DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_CREDIT_ENGINE_GRP

Source


1 PACKAGE BODY OE_Credit_Engine_GRP AS
2 -- $Header: OEXPCRGB.pls 120.6.12010000.3 2008/11/14 11:52:18 msundara ship $
3 --+=======================================================================+
4 --|               Copyright (c) 2001 Oracle Corporation                   |
5 --|                       Redwood Shores, CA, USA                         |
6 --|                         All rights reserved.                          |
7 --+=======================================================================+
8 --|                                                                       |
9 --|  FILENAME                                                             |
10 --|    OEXPCRGB.pls                                                       |
11 --|                                                                       |
12 --|  DESCRIPTION                                                          |
13 --|    Body of package OE_Credit_Engine_GRP                               |
14 --|                                                                       |
15 --|  NOTES                                                                |
16 --|    This package body contains the procedures that will be             |
17 --|    used to call Order Specific Payment Verification process           |
18 --|                                                                       |
19 --|  HISTORY                                                              |
20 --|    26-SEP-2001 INGERSOL BUG                                           |
21 --|    05-FEB-2002 multi org                                              |
22 --|                ontdev=>  OEXPCRGB.pls 115.17 2001/09/27 22:58:05      |
23 --|    05-FEB-2002 rajkrish 1PM                                           |
24 --|    18-FEB-2002 External Credit Checking change                        |
25 --|    19-MAR-2002 Modified Check_Credit for external credit checking     |
26 --|    12-JUN-2002 rajkrish 2412678                                       |
27 --|    12-NOV-2002                                                        |
28 --|    31-MAR-2003 vto      2846473,2878410. Changed call to              |
29 --|                         Send_Credit_Hold_NTF                          |
30 --|    01-APR-2003 vto      2853800. Use globals for activity cc holds    |
31 --|                         G_cc_hold_activity_name                       |
32 --|                         G_cc_hold_item_type                           |
33 --|                         Added Set_G_CC_Hold_info procedure.           |
34 --|    15-MAY-2003  vto     2894424, 2971689. New cc calling action:      |
35 --|                         AUTO HOLD, AUTO RELEASE.                      |
36 --|                         Obsolete calling action: AUTO                 |
37 --+=======================================================================+
38 
39 --=========================================================================
40 -- CONSTANTS
41 --=========================================================================
42 G_PKG_NAME    CONSTANT VARCHAR2(30) := 'OE_Credit_Engine_GRP';
43 
44 --=========================================================================
45 -- PRIVATE GLOBAL VARIABLES
46 --=========================================================================
47 G_debug_flag  VARCHAR2(1) := NVL(OE_CREDIT_CHECK_UTIL.check_debug_flag ,'N');
48 
49 --=========================================================================
50 -- PROCEDURES AND FUNCTIONS
51 --=========================================================================
52 
53 ---------------------------------------------------------------------------
54 -- PROCEDURE: Set_G_CC_Hold_Info
55 -- COMMENT:   Set the values for the G_cc_hold_item_type and
56 --            G_cc_hold_activity_name global variables.
57 ---------------------------------------------------------------------------
58 PROCEDURE Set_G_CC_Hold_Info
59 IS
60 BEGIN
61   IF G_debug_flag = 'Y' THEN
62     OE_DEBUG_PUB.ADD('OEXPCRGB: In Set_G_CC_Hold_Info', 1);
63   END IF;
64 
65   SELECT item_type,
66          activity_name
67   INTO   G_cc_hold_item_type,
68          G_cc_hold_activity_name
69   FROM   oe_hold_definitions
70   WHERE  hold_id = 1;
71 
72   IF G_debug_flag = 'Y' THEN
73     OE_DEBUG_PUB.ADD('G_cc_hold_item_type     = '||G_cc_hold_item_type, 2);
74     OE_DEBUG_PUB.ADD('G_cc_hold_activity_name = '||G_cc_hold_activity_name, 2);
75     OE_DEBUG_PUB.ADD('OEXPCRGB: Out Set_G_CC_Hold_Info', 1);
76   END IF;
77 EXCEPTION
78   WHEN NO_DATA_FOUND THEN
79     -- Hold definition should exist. This exception should not occur if setup is correct.
80     -- Ideally, an error should be raised indicating no cc hold definition found instead
81     -- of unexpected error.
82     IF G_debug_flag = 'Y' THEN
83       OE_DEBUG_PUB.ADD('EXCEPTION: No credit check hold definition found.', 1);
84     END IF;
85     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
86       OE_MSG_PUB.Add_Exc_Msg
87       (   G_PKG_NAME
88       ,   'Set_G_CC_Hold_Info'
89       );
90     END IF;
91     RAISE;
92   WHEN OTHERS THEN
93     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
94       OE_MSG_PUB.Add_Exc_Msg
95       (   G_PKG_NAME
96       ,   'Set_G_CC_Hold_Info'
97       );
98     END IF;
99     RAISE;
100 END Set_G_CC_Hold_Info;
101 
102 ---------------------------------------------------------------------------
103 --PROCEDURE: Get_Credit_Check_Rule_ID
104 --COMMENT:   Returns the credit check rule id attached with
105 --          the order trn type
106 ---------------------------------------------------------------------------
107 PROCEDURE Get_Credit_Check_Rule_ID
108 ( p_calling_action      IN VARCHAR2
109 , p_order_type_id       IN OE_ORDER_HEADERS.order_type_id%TYPE
110 , x_credit_rule_id      OUT NOCOPY /* file.sql.39 change */ OE_Credit_check_rules.credit_check_rule_id%TYPE
111 )
112 IS
113 BEGIN
114 IF G_debug_flag = 'Y'
115 THEN
116   OE_DEBUG_PUB.ADD('OEXPCRGB: In Get_Credit_Check_Rule_ID ');
117   OE_DEBUG_PUB.ADD('p_order_type_id = '|| p_order_type_id );
118   OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action );
119 END IF;
120   x_credit_rule_id := NULL ;
121 
122   IF p_calling_action in ('BOOKING','BOOKING_INLINE','UPDATE',
123                           'AUTO HOLD', 'AUTO RELEASE')
124   THEN
125 
126 /*7194250
127     SELECT ENTRY_CREDIT_CHECK_RULE_ID
128     INTO   x_credit_rule_id
129     FROM   OE_ORDER_TYPES_V
130     WHERE  ORDER_TYPE_ID = p_order_type_id;
131 7194250*/
132 --7194250
133     SELECT ENTRY_CREDIT_CHECK_RULE_ID
134     INTO   x_credit_rule_id
135     FROM   OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
136     WHERE  ORDER_TYPE_ID = p_order_type_id
137     AND   ENTRY_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
138     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
139 --7194250
140 
141     OE_Verify_Payment_PUB.G_credit_check_rule := 'Ordering';   --ER#7479609
142 
143   ELSIF p_calling_action = 'SHIPPING'
144   THEN
145 /*7194250
146     SELECT SHIPPING_CREDIT_CHECK_RULE_ID
147     INTO   x_credit_rule_id
148     FROM   OE_ORDER_TYPES_V
149     WHERE  ORDER_TYPE_ID = p_order_type_id;
150 7194250*/
151 --7194250
152     SELECT SHIPPING_CREDIT_CHECK_RULE_ID
153     INTO   x_credit_rule_id
154     FROM   OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
155     WHERE  ORDER_TYPE_ID = p_order_type_id
156     AND   SHIPPING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
157     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
158 --7194250
159 
160     OE_Verify_Payment_PUB.G_credit_check_rule := 'Shipping';   --ER#7479609
161 
162   ELSIF p_calling_action = 'PACKING'
163   THEN
164 /*7194250
165     SELECT PACKING_CREDIT_CHECK_RULE_ID
166     INTO   x_credit_rule_id
167     FROM   OE_ORDER_TYPES_V
168     WHERE  ORDER_TYPE_ID = p_order_type_id;
169 7194250*/
170 --7194250
171     SELECT PACKING_CREDIT_CHECK_RULE_ID
172     INTO   x_credit_rule_id
173     FROM   OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
174     WHERE  ORDER_TYPE_ID = p_order_type_id
175     AND   PACKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
176     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
177 --7194250
178 
179     OE_Verify_Payment_PUB.G_credit_check_rule := 'Packing';   --ER#7479609
180 
181   ELSIF p_calling_action = 'PICKING'
182   THEN
183 /*7194250
184     SELECT PICKING_CREDIT_CHECK_RULE_ID
185     INTO   x_credit_rule_id
186     FROM   OE_ORDER_TYPES_V
187     WHERE  ORDER_TYPE_ID = p_order_type_id;
188 7194250*/
189 --7194250
190     SELECT PICKING_CREDIT_CHECK_RULE_ID
191     INTO   x_credit_rule_id
192     FROM   OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
193     WHERE  ORDER_TYPE_ID = p_order_type_id
194     AND   PICKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
195     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
196 --7194250
197 
198     OE_Verify_Payment_PUB.G_credit_check_rule := 'Picking/Purchase Release';   --ER#7479609
199 
200   END IF;
201 
202 IF G_debug_flag = 'Y'
203 THEN
204   OE_DEBUG_PUB.ADD('OEXPCRGB: Credit Check Rule ID: '
205        ||TO_CHAR(x_credit_rule_id) );
206 
207   OE_DEBUG_PUB.ADD('OEXPCRGB: Out Get_Credit_Check_Rule_ID');
208 END IF;
209 
210 EXCEPTION
211   WHEN NO_DATA_FOUND
212   THEN
213    x_credit_rule_id := NULL ;
214    OE_DEBUG_PUB.ADD('EXCEPTION:No credit check rule found');
215   WHEN OTHERS THEN
216     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
217       OE_MSG_PUB.Add_Exc_Msg
218       (   G_PKG_NAME
219       ,   'Get_Credit_Check_Rule_ID'
220       );
221     END IF;
222     RAISE ;
223 END Get_Credit_Check_Rule_ID ;
224 
225 
226 
227 ---------------------------------------------------------------------
228 -- PROCEDURE: Apply_exception_hold
229 -- COMMENT:   Apply credit check hold on the specified order
230 --            during process exceptions
231 --            when the return status is not SUCCESS
232 --            The return status will be assigned as Error
233 --            If apply hold returns error , the process will
234 --            abort and return Unexpected error
235 ----------------------------------------------------------------------
236 PROCEDURE Apply_exception_hold
237  ( p_header_id             IN  NUMBER
238  , x_return_status         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
239   )
240 IS
241 
242   l_hold_exists        VARCHAR2(1)  := NULL ;
243   l_hold_result        VARCHAR2(30);
244   l_msg_count          NUMBER := 0;
245   l_msg_data           VARCHAR2(2000);
246   l_return_status      VARCHAR2(30);
247   l_hold_comment       VARCHAR2(2000);
248   l_hold_source_rec    OE_HOLDS_PVT.Hold_Source_Rec_Type :=
249           OE_HOLDS_PVT.G_MISS_Hold_Source_REC;
250 BEGIN
251   IF G_debug_flag = 'Y'
252   THEN
253      OE_DEBUG_PUB.Add('OEXPCRGB: In Apply_exception_hold ');
254   END IF;
255 
256   l_hold_source_rec.hold_id          := 1;           -- credit hold
257   l_hold_source_rec.hold_entity_code := 'O';         -- order hold
258   l_hold_source_rec.hold_entity_id   := p_header_id; -- order header
259 
260   IF G_debug_flag = 'Y'
261   THEN
262     OE_DEBUG_PUB.Add('Call OE_HOLDS_PUB.Check_Holds');
263   END IF;
264 
265   OE_HOLDS_PUB.Check_Holds
266                       ( p_api_version    => 1.0
267                       , p_header_id      => p_header_id
268                       , p_hold_id        => 1
269                       , p_wf_item        => OE_Credit_Engine_GRP.G_cc_hold_item_type
270                       , p_wf_activity    => OE_Credit_Engine_GRP.G_cc_hold_activity_name
271                       , p_entity_code    => 'O'
272                       , p_entity_id      => p_header_id
273                       , x_result_out     => l_hold_result
274                       , x_msg_count      => l_msg_count
275                       , x_msg_data       => l_msg_data
276                       , x_return_status  => x_return_status
277                       );
278 
279   IF x_return_status = FND_API.G_RET_STS_ERROR THEN
280       RAISE FND_API.G_EXC_ERROR;
281   ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
282       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
283   END IF;
284 
285   IF l_hold_result = FND_API.G_TRUE
286   THEN
287       OE_DEBUG_PUB.Add('OEXVCRHB: Hold already applied on Header ID:' ||
288       p_header_id );
289   ELSE
290       l_hold_comment := 'Credit checking package API Error' ;
291       l_hold_source_rec.hold_comment :=
292             NVL(OE_Credit_Engine_GRP.G_currency_error_msg, l_hold_comment) ;
293 
294       OE_DEBUG_PUB.Add('Call OE_Holds_PUB.Apply_Holds' );
295 
296       OE_Holds_PUB.Apply_Holds
297         (   p_api_version       => 1.0
298         ,   p_validation_level  => FND_API.G_VALID_LEVEL_NONE
299         ,   p_hold_source_rec   => l_hold_source_rec
300         ,   x_msg_count         => l_msg_count
301         ,   x_msg_data          => l_msg_data
302         ,   x_return_status     => x_return_status
303         );
304 
305         IF x_return_status = FND_API.G_RET_STS_ERROR THEN
306           RAISE FND_API.G_EXC_ERROR;
307         ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
308           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
309         ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
310         OE_DEBUG_PUB.ADD('OEXPCRGB: Credit check hold applied on header_ID: '
311                        ||p_header_id, 1);
312       END IF;
313     END IF; -- Check hold exist
314 
315    IF G_debug_flag = 'Y'
316    THEN
317      OE_DEBUG_PUB.Add('OEXPCRGB: Out Apply_exception_hold ');
318    END IF;
319 
320 EXCEPTION
321 
322   WHEN OTHERS THEN
323   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
324     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
325       OE_MSG_PUB.Add_Exc_Msg
326       (   G_PKG_NAME
327       ,   'Apply_exception_hold'
328       );
329     END IF;
330     OE_DEBUG_PUB.ADD( SUBSTR( SQLERRM,1,300) ,1 ) ;
331 
332 
333 END Apply_Exception_hold ;
334 
335 
336 ---------------------------------------------------------------------------
337 --FUNCTION GET_GL_currency
338 --COMMENT:   Returns the SOB currency
339 
340 ---------------------------------------------------------------------------
341 FUNCTION GET_GL_currency
342 RETURN VARCHAR2
343 IS
344 
345 l_gl_currency VARCHAR2(10);
346 l_sob_id      NUMBER;
347 
348 BEGIN
349   IF G_debug_flag = 'Y'
350   THEN
351     OE_DEBUG_PUB.ADD('OEXPCRGB: In Get_GL_currency ');
352   END IF;
353 
354   BEGIN
355     l_sob_id := FND_PROFILE.VALUE('GL_SET_OF_BKS_ID') ;
356 
357     IF G_debug_flag = 'Y'
358     THEN
359       OE_DEBUG_PUB.ADD('l_sob_id = '|| l_sob_id );
360       OE_DEBUG_PUB.ADD('GET SOB currency ');
361     END IF;
362 
363     SELECT
364       currency_code
365     INTO
366       l_gl_currency
367     FROM
368       GL_sets_of_books
369     WHERE set_of_books_id = l_sob_id ;
370 
371     IF G_debug_flag = 'Y'
372     THEN
373       OE_DEBUG_PUB.ADD('l_gl_currency = '|| l_gl_currency );
374     END IF;
375 
376    EXCEPTION
377    WHEN NO_DATA_FOUND
378    THEN
379      l_gl_currency := NULL ;
380     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
381      l_gl_currency := NULL ;
382    WHEN TOO_MANY_ROWS
383    THEN
384      l_gl_currency := NULL ;
385     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS');
386      l_gl_currency := NULL ;
387   END ;
388 
389   IF G_debug_flag = 'Y'
390   THEN
391     OE_DEBUG_PUB.ADD('OEXPCRGB: Out Get_GL_currency ');
392   END IF;
393 
394   RETURN(l_GL_currency);
395 
396 EXCEPTION
397   WHEN OTHERS THEN
398     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
399       OE_MSG_PUB.Add_Exc_Msg
400       (   G_PKG_NAME
401       ,   'Get_GL_currency'
402       );
403     END IF;
404     OE_DEBUG_PUB.ADD( SUBSTR(SQLERRM,1,300) ) ;
405 END Get_GL_currency ;
406 
407 ---------------------------------------------------------------------------
408 --PROCEDURE: Credit_check_with_payment_typ
409 --COMMENT:   Main API called from verify_payment switch
410 -- 2412678 add a new input parameter
411 ---------------------------------------------------------------------------
412 PROCEDURE Credit_check_with_payment_typ
413 (  p_header_id            IN   NUMBER
414 ,  p_calling_action       IN   VARCHAR2
415 ,  p_delayed_request      IN   VARCHAR2
416 ,  p_credit_check_rule_id IN   NUMBER := NULL
417 ,  x_msg_count            OUT NOCOPY /* file.sql.39 change */  NUMBER
418 ,  x_msg_data             OUT NOCOPY /* file.sql.39 change */  VARCHAR2
419 ,  x_return_status        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
420 )
421 IS
422 
423 l_epayment VARCHAR2(1) ;
424 
425 l_msg_count         NUMBER        := 0 ;
426 l_msg_data          VARCHAR2(2000):= NULL ;
427 l_result_out        VARCHAR2(100);
428 l_cc_hold_comment   VARCHAR2(2000):= NULL;
429 
430 BEGIN
431   x_return_status := FND_API.G_RET_STS_SUCCESS;
432 
433   IF G_debug_flag = 'Y'
434   THEN
435     OE_DEBUG_PUB.ADD('OEXPCRGB: IN Credit_check_with_payment_typ ',1);
436     OE_DEBUG_PUB.ADD('p_header_id = '|| p_header_id,1 );
437     OE_DEBUG_PUB.ADD('p_calling_action = ' || p_calling_action,1 );
438     OE_DEBUG_PUB.ADD('p_delayed_request = '|| p_delayed_request,1 );
439     OE_DEBUG_PUB.ADD('p_credit_check_rule_id => '|| p_credit_check_rule_id,1 );
440   END IF;
441 
442   OE_Credit_Engine_GRP.G_delayed_request    := NULL ;
443 
444   IF G_debug_flag = 'Y'
445   THEN
446     OE_DEBUG_PUB.ADD('call Check_Credit for credit checking',1);
447   END IF;
448 
449    Check_Credit
450    (      p_header_id       => p_header_id
451       ,   p_calling_action  => p_calling_action
452       ,   p_delayed_request => p_delayed_request
453       ,   p_credit_check_rule_id => p_credit_check_rule_id
454       ,   x_msg_count       => x_msg_count
455       ,   x_msg_data        => x_msg_data
456       ,   x_cc_hold_comment => l_cc_hold_comment
457       ,   x_result_out      => l_result_out
458       ,   x_return_status   => x_return_status
459    );
460 
461    IF G_debug_flag = 'Y'
462    THEN
463       OE_DEBUG_PUB.ADD('x_return_status '|| x_return_status );
464    END IF;
465 
466    IF x_return_status = FND_API.G_RET_STS_ERROR
467    THEN
468          -- Assign the status to SUCCESS as the order will
469          -- put on hold when the status  is error
470          -- GL currency conversion
471 
472           x_return_status := FND_API.G_RET_STS_SUCCESS ;
473 
474    ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
475         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
476    END IF;
477 
478   IF G_debug_flag = 'Y'
479   THEN
480    OE_DEBUG_PUB.ADD('OEXPCRGB:Final x_return_status = '|| x_return_status,1 );
481    OE_DEBUG_PUB.ADD('OEXPCRGB:l_result_out = '|| l_result_out,1 );
482    OE_DEBUG_PUB.ADD('OEXPCRGB: OUT Credit_check_with_payment_typ ',1);
483   END IF;
484 
485 EXCEPTION
486 
487     WHEN FND_API.G_EXC_ERROR THEN
488       x_return_status := FND_API.G_RET_STS_ERROR;
489     oe_debug_pub.add(' SQLERRM: '|| SQLERRM );
490       OE_MSG_PUB.Count_And_Get
491             ( p_count => l_msg_count,
492               p_data  => l_msg_data
493             );
494 
495     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
496       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
497     oe_debug_pub.add(' SQLERRM: '|| SQLERRM );
498       OE_MSG_PUB.Count_And_Get
499             ( p_count => l_msg_count,
500               p_data  => l_msg_data
501             );
502 
503     WHEN OTHERS THEN
504       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
505     oe_debug_pub.add(' SQLERRM: '|| SQLERRM );
506       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
507       THEN
508         FND_MSG_PUB.Add_Exc_Msg
509             (   G_PKG_NAME
510             ,   'Credit_check_with_payment_typ'
511             );
512       END IF;
513 
514       OE_MSG_PUB.Count_And_Get
515             ( p_count => l_msg_count,
516               p_data  => l_msg_data
517             );
518 
519 END Credit_check_with_payment_typ ;
520 
521 --=========================================================================
522 -- PROCEDURE  : Get_Customer_Exposure   PUBLIC
523 -- PARAMETERS : p_customer_id           Customer ID
524 --            : p_site_id               Bill-to Site ID
525 --            : p_limit_curr_code       Credit limit currency code
526 --            : p_credit_check_rule_id  Credit Check Rule Id
527 --            : x_total_exposure        Credit exposure
528 --            : x_return_status         Status
529 -- COMMENT    : This procedure calculates credit exposure for given customer
530 --              or given bill-to site.
531 --             This procedure will superseed the original get_customer_exposure
532 --             API for party level changes from ONT-I
533 --             For backward compatible reasons, the original procedure
534 --             will call this procedure
535 --=========================================================================
536 PROCEDURE Get_customer_exposure
537 ( p_party_id             IN NUMBER
538 , p_customer_id           IN NUMBER
539 , p_site_id               IN NUMBER
540 , p_limit_curr_code       IN VARCHAR2
541 , p_credit_check_rule_id  IN NUMBER
542 , p_need_exposure_details IN VARCHAR2 := 'N'
543 , x_total_exposure        OUT NOCOPY /* file.sql.39 change */ NUMBER
544 , x_order_hold_amount     OUT NOCOPY /* file.sql.39 change */ NUMBER
545 , x_order_amount          OUT NOCOPY /* file.sql.39 change */ NUMBER
546 , x_ar_amount             OUT NOCOPY /* file.sql.39 change */ NUMBER
547 , x_external_amount       OUT NOCOPY /* file.sql.39 change */ NUMBER
548 , x_return_status         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
549 )
550 IS
551 
552 
553 l_msg_count             NUMBER        := 0 ;
554 l_msg_data              VARCHAR2(2000):= NULL ;
555 l_credit_check_rule_rec OE_CREDIT_CHECK_UTIL.OE_CREDIT_RULES_REC_TYPE ;
556 l_system_parameters_rec OE_CREDIT_CHECK_UTIL.OE_SYSTEMS_PARAM_REC_TYPE ;
557 l_usage_curr_tbl        OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE;
558 l_total_exposure        NUMBER;
559 l_error_curr_tbl        OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE;
560 l_conversion_status     OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE;
561 l_return_status         VARCHAR2(50);
562 l_include_all_flag      VARCHAR2(15);
563 i                       INTEGER:=0;
564 j                       INTEGER:=0;
565 k                       INTEGER:=0;
566 f                       INTEGER:=0;
567 
568 l_start                 NUMBER:=0;
569 l_end                   NUMBER:=0;
570 
571 l_global_exposure_flag  VARCHAR2(1);
572 l_org_id                NUMBER:=0; /* MOAC CREDIT CHECK CHANGE */
573 
574 BEGIN
575  IF G_debug_flag = 'Y'
576  THEN
577   OE_DEBUG_PUB.ADD('OEXPCRGB: IN Get_Customer_Exposure ',1);
578   OE_DEBUG_PUB.ADD('p_party_id              => '|| p_party_id );
579   OE_DEBUG_PUB.ADD('p_customer_id           => '|| p_customer_id );
580   OE_DEBUG_PUB.ADD('p_site_id               => '|| p_site_id );
581   OE_DEBUG_PUB.ADD('p_limit_curr_code       => '|| p_limit_curr_code );
582   OE_DEBUG_PUB.ADD('p_credit_check_rule_id  => '|| p_credit_check_rule_id );
583   OE_DEBUG_PUB.ADD('p_need_exposure_details => '|| p_need_exposure_details );
584  END IF;
585 
586   x_return_status := FND_API.G_RET_STS_SUCCESS;
587   l_global_exposure_flag := 'N' ;
588 
589 
590   ---get credit check rule record
591   OE_CREDIT_CHECK_UTIL.GET_credit_check_rule
592   ( p_credit_check_rule_id   => p_credit_check_rule_id
593   , x_credit_check_rules_rec => l_credit_check_rule_rec
594   );
595 
596   -----Get system parameters record
597   OE_CREDIT_CHECK_UTIL.GET_System_parameters
598   ( x_system_parameter_rec=>l_system_parameters_rec
599   );
600 
601    OE_DEBUG_PUB.ADD('Check entity type ');
602 
603 -------------------- EXPOSURE -----------------------
604 
605 /* Modified the following condition to fix the bug 5650329 */
606   IF p_party_id IS NOT NULL and ( p_customer_id IS NULL ) and ( p_site_id IS NULL )
607   THEN
608     l_global_exposure_flag := 'Y' ;
609 
610     IF G_debug_flag = 'Y'
611     THEN
612       OE_DEBUG_PUB.ADD('Party level exposure ');
613       OE_DEBUG_PUB.ADD('Calling Get_global_exposure_flag ');
614       OE_DEBUG_PUB.ADD('l_global_exposure_flag = '||
615            l_global_exposure_flag );
616       OE_DEBUG_PUB.ADD('OEXPCRGB: Get usages for PARTY level ');
617      END IF;
618 
619     ----get table of usages
620     OE_CREDIT_CHECK_UTIL.Get_Usages
621     ( p_entity_type                 => 'PARTY'
622     , p_entity_id                   => p_party_id
623     , p_limit_curr_code             => p_limit_curr_code
624     , p_suppress_unused_usages_flag => 'Y'
625     , p_default_limit_flag          => NULL
626     , p_global_exposure_flag        => l_global_exposure_flag
627     , x_include_all_flag            => l_include_all_flag
628     , x_usage_curr_tbl              => l_usage_curr_tbl
629     );
630 
631    IF G_debug_flag = 'Y'
632     THEN
633        OE_DEBUG_PUB.ADD('OEXPCRGB: OUT of OE_CREDIT_CHECK_UTIL. Get_Usages ');
634        OE_DEBUG_PUB.ADD('x_include_all_flag: '||l_include_all_flag);
635        OE_DEBUG_PUB.ADD('---------------------------------------');
636     END IF;
637 
638     ----IF l_include_all_flag is 'Y', assign it to the global variable
639     --- used later for unchecked exposure
640 
641     IF l_include_all_flag='Y'
642     THEN
643       OE_Credit_Engine_GRP.G_cust_incl_all_flag :='Y';
644     END IF;
645 
646     FOR a IN 1..l_usage_curr_tbl.COUNT
647     LOOP
648      IF G_debug_flag = 'Y'
649      THEN
650        OE_DEBUG_PUB.ADD('currency_code=: '
651               ||l_usage_curr_tbl(a).usage_curr_code);
652      END IF;
653     END LOOP;
654 --------------------------------------------------------------------------------
655     ----assign table of usages to the Global variable
656 
657     l_start:=OE_Credit_Engine_GRP.G_cust_curr_tbl.COUNT+1;
658     l_end:=OE_Credit_Engine_GRP.G_cust_curr_tbl.COUNT+l_usage_curr_tbl.COUNT;
659 
660      IF G_debug_flag = 'Y'
661      THEN
662         OE_DEBUG_PUB.ADD('l_start= '||TO_CHAR(l_start));
663         OE_DEBUG_PUB.ADD('l_end= '||TO_CHAR(l_end));
664         OE_DEBUG_PUB.ADD('IN loop for assign table of usge to Glb variable ');
665      END IF;
666 
667     FOR i IN l_start..l_end
668     LOOP
669       j:=j+1;
670       OE_Credit_Engine_GRP.G_cust_curr_tbl(i).usage_curr_code
671                  := l_usage_curr_tbl(j).usage_curr_code;
672 
673     END LOOP;
674 
675      OE_CREDIT_EXPOSURE_PVT.Get_Exposure
676       ( p_party_id                => p_party_id
677       , p_customer_id             => NULL
678       , p_site_use_id             => NULL
679       , p_header_id               => NULL
680       , p_credit_check_rule_rec   => l_credit_check_rule_rec
681       , p_system_parameters_rec   => l_system_parameters_rec
682       , p_limit_curr_code         => p_limit_curr_code
683       , p_usage_curr_tbl          => l_usage_curr_tbl
684       , p_include_all_flag        => l_include_all_flag
685       , p_global_exposure_flag    => l_global_exposure_flag
686       , p_need_exposure_details  => p_need_exposure_details
687       , x_total_exposure         => x_total_exposure
688       , x_order_amount           => x_order_amount
689       , x_order_hold_amount      => x_order_hold_amount
690       , x_ar_amount              => x_ar_amount
691       , x_return_status           => l_return_status
692       , x_error_curr_tbl          => l_error_curr_tbl
693       );
694 
695 
696       IF l_error_curr_tbl.COUNT<>0
697       THEN
698 
699         FOR k IN 1..l_error_curr_tbl.COUNT
700         LOOP
701           IF G_debug_flag = 'Y'
702           THEN
703             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
704 !!!!!!!');
705             OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||l_error_curr_tbl(k)
706 .usage_curr_code
707                ||' and credit limit currency '
708                ||p_limit_curr_code
709                ||' is missing for conversion type '
710               || NVL(l_credit_check_rule_rec.user_conversion_type,'Corporate'),1
711 );
712             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
713 !!!!!!!');
714 
715           END IF;
716         END LOOP;
717 
718        x_return_status:='C';
719 
720       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
721       THEN
722         RAISE FND_API.G_EXC_ERROR;
723       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
724       THEN
725         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
726       END IF;
727 
728    -----------End party ----
729   ---customer level exposure
730   ELSIF p_site_id IS NULL
731   THEN
732     IF G_debug_flag = 'Y'
733     THEN
734       OE_DEBUG_PUB.ADD('Customer level exposure ');
735       OE_DEBUG_PUB.ADD('Calling Get_global_exposure_flag ');
736     END IF;
737 
738        l_global_exposure_flag :=
739        OE_CREDIT_CHECK_UTIL.Get_global_exposure_flag
740        (  p_entity_type      => 'CUSTOMER'
741         , p_entity_id        => p_customer_id
742         , p_limit_curr_code  => p_limit_curr_code
743        );
744 
745      /* Start MOAC CREDIT CHECK CHANGE */
746      IF l_global_exposure_flag = 'N'
747      THEN
748          OE_Credit_Engine_GRP.Set_context;
749      END IF;
750      /* End MOAC CREDIT CHECK CHANGE */
751 
752      IF G_debug_flag = 'Y'
753      THEN
754          OE_DEBUG_PUB.ADD('l_global_exposure_flag = '||
755            l_global_exposure_flag );
756          OE_DEBUG_PUB.ADD('OEXPCRGB: Get usages for CUSTOMER level ');
757      END IF;
758 
759     ----get table of usages
760     OE_CREDIT_CHECK_UTIL.Get_Usages
761     ( p_entity_type                 => 'CUSTOMER'
762     , p_entity_id                   => p_customer_id
763     , p_limit_curr_code             => p_limit_curr_code
764     , p_suppress_unused_usages_flag => 'Y'
765     , p_default_limit_flag          => NULL
766     , p_global_exposure_flag        => l_global_exposure_flag
767     , x_include_all_flag            => l_include_all_flag
768     , x_usage_curr_tbl              => l_usage_curr_tbl
769     );
770 
771     IF G_debug_flag = 'Y'
772     THEN
773        OE_DEBUG_PUB.ADD('OEXPCRGB: OUT of OE_CREDIT_CHECK_UTIL. Get_Usages ');
774        OE_DEBUG_PUB.ADD('x_include_all_flag: '||l_include_all_flag);
775        OE_DEBUG_PUB.ADD('---------------------------------------');
776     END IF;
777 
778     ----IF l_include_all_flag is 'Y', assign it to the global variable
779     --- used later for unchecked exposure
780 
781     IF l_include_all_flag='Y'
782     THEN
783       OE_Credit_Engine_GRP.G_cust_incl_all_flag :='Y';
784     END IF;
785 
786 
787     FOR a IN 1..l_usage_curr_tbl.COUNT
788     LOOP
789      IF G_debug_flag = 'Y'
790      THEN
791        OE_DEBUG_PUB.ADD('currency_code=: '
792               ||l_usage_curr_tbl(a).usage_curr_code);
793      END IF;
794     END LOOP;
795 --------------------------------------------------------------------------------
796     ----assign table of usages to the Global variable
797 
798     l_start:=OE_Credit_Engine_GRP.G_cust_curr_tbl.COUNT+1;
799     l_end:=OE_Credit_Engine_GRP.G_cust_curr_tbl.COUNT+l_usage_curr_tbl.COUNT;
800 
801      IF G_debug_flag = 'Y'
802      THEN
803         OE_DEBUG_PUB.ADD('l_start= '||TO_CHAR(l_start));
804         OE_DEBUG_PUB.ADD('l_end= '||TO_CHAR(l_end));
805         OE_DEBUG_PUB.ADD('IN loop for assign table of usages to Global variable ');
806      END IF;
807 
808     FOR i IN l_start..l_end
809     LOOP
810       j:=j+1;
811       OE_Credit_Engine_GRP.G_cust_curr_tbl(i).usage_curr_code
812                  := l_usage_curr_tbl(j).usage_curr_code;
813 
814     END LOOP;
815 
816     ----pre-calculate exposure
817     IF l_credit_check_rule_rec.quick_cr_check_flag = 'Y'
818     THEN
819 
820       OE_CREDIT_EXPOSURE_PVT.Get_Exposure
821       ( p_customer_id             => p_customer_id
822       , p_site_use_id             => NULL
823       , p_header_id               => NULL
824       , p_credit_check_rule_rec   => l_credit_check_rule_rec
825       , p_system_parameters_rec   => l_system_parameters_rec
826       , p_limit_curr_code         => p_limit_curr_code
827       , p_usage_curr_tbl          => l_usage_curr_tbl
828       , p_include_all_flag        => l_include_all_flag
829       , p_global_exposure_flag    => l_global_exposure_flag
830       , p_need_exposure_details  => p_need_exposure_details
831       , x_total_exposure         => x_total_exposure
832       , x_order_amount           => x_order_amount
833       , x_order_hold_amount      => x_order_hold_amount
834       , x_ar_amount              => x_ar_amount
835       , x_return_status           => l_return_status
836       , x_error_curr_tbl          => l_error_curr_tbl
837       );
838 
839       IF l_error_curr_tbl.COUNT<>0
840       THEN
841 
842         FOR k IN 1..l_error_curr_tbl.COUNT
843         LOOP
844           IF G_debug_flag = 'Y'
845           THEN
846             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
847             OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||l_error_curr_tbl(k).usage_curr_code
848                ||' and credit limit currency '
849                ||p_limit_curr_code
850                ||' is missing for conversion type '
851               || NVL(l_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
852             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
853           END IF;
854         END LOOP;
855 
856        ---bug fix 2439029
857 
858        -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
859 
860        x_return_status:='C';
861 
862       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
863       THEN
864         RAISE FND_API.G_EXC_ERROR;
865       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
866       THEN
867         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
868       END IF;
869 
870     ----non pre-calculate exposure
871     ELSIF l_credit_check_rule_rec.quick_cr_check_flag ='N'
872     THEN
873 
874       OE_CREDIT_CHECK_UTIL.Get_order_exposure
875       ( p_header_id              => NULL
876       , p_transaction_curr_code  => NULL
877       , p_customer_id            => p_customer_id
878       , p_site_use_id            => NULL
879       , p_credit_check_rule_rec  => l_credit_check_rule_rec
880       , p_system_parameter_rec   => l_system_parameters_rec
881       , p_credit_level           => 'CUSTOMER'
882       , p_limit_curr_code        => p_limit_curr_code
883       , p_usage_curr             => l_usage_curr_tbl
884       , p_include_all_flag       => l_include_all_flag
885       ,  p_global_exposure_flag  => l_global_exposure_flag
886       , p_need_exposure_details  => p_need_exposure_details
887       , x_total_exposure         => x_total_exposure
888       , x_order_amount           => x_order_amount
889       , x_order_hold_amount      => x_order_hold_amount
890       , x_ar_amount              => x_ar_amount
891       , x_return_status          => l_return_status
892       , x_conversion_status      => l_conversion_status
893       );
894 
895 
896       IF l_conversion_status.COUNT<>0
897       THEN
898 
899         FOR k IN 1..l_conversion_status.COUNT
900         LOOP
901          IF G_debug_flag = 'Y'
902          THEN
903           OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
904           OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||l_conversion_status(k).usage_curr_code
905                 ||' and credit limit currency '
906                 ||p_limit_curr_code
907                 ||' is missing for conversion type '
908             || NVL(l_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
909           OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
910          END IF;
911         END LOOP;
912 
913        ---bug fix 2439029
914 
915        -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
916 
917        x_return_status:='C';
918 
919       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
920       THEN
921         RAISE FND_API.G_EXC_ERROR;
922       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
923       THEN
924         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
925       END IF;
926 
927     END IF;
928 
929  ----------------- SITE level exposure ----------------
930 
931   -----bill-to site level exposure
932   ELSIF p_site_id IS NOT NULL
933   THEN
934       l_global_exposure_flag := 'N' ;
935 
936 /* Start MOAC CREDIT CHECK CHANGE */
937 
938     BEGIN
939       SELECT org_id
940       INTO   l_org_id
941       FROM   hz_cust_site_uses_all
942       WHERE  site_use_id = p_site_id;
943 
944     EXCEPTION
945       WHEN NO_DATA_FOUND THEN
946          IF G_debug_flag = 'Y' THEN
947             OE_DEBUG_PUB.ADD ('Exception : No org id via site_id ', 1);
948          END IF;
949 
950          IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
951          THEN
952            FND_MSG_PUB.Add_Exc_Msg
953             (   G_PKG_NAME
954             ,   'Get_Customer_Exposure'
955             );
956          END IF;
957 
958       WHEN OTHERS THEN
959          IF G_debug_flag = 'Y' THEN
960             OE_DEBUG_PUB.ADD ('Exception : Unexpected error in finding org id via site_id ', 1);
961          END IF;
962 
963          IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
964          THEN
965            FND_MSG_PUB.Add_Exc_Msg
966             (   G_PKG_NAME
967             ,   'Get_Customer_Exposure'
968             );
969          END IF;
970 
971          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
972     END ;
973 
974     MO_GLOBAL.Set_Policy_Context('S', l_org_id) ;
975 
976     OE_CREDIT_CHECK_UTIL.G_org_id := l_org_id ;
977 
978 /* End MOAC CREDIT CHECK CHANGE */
979 
980     IF G_debug_flag = 'Y'
981     THEN
982       OE_DEBUG_PUB.ADD('Site level exposure ');
983     END IF;
984 
985     ----get table of usages
986     OE_CREDIT_CHECK_UTIL.Get_Usages
987     ( p_entity_type                 => 'SITE'
988     , p_entity_id                   => p_site_id
989     , p_limit_curr_code             => p_limit_curr_code
990     , p_suppress_unused_usages_flag => 'Y'
991     , p_default_limit_flag          => NULL
992     , p_global_exposure_flag        => 'N'
993     , x_include_all_flag            => l_include_all_flag
994     , x_usage_curr_tbl              => l_usage_curr_tbl
995     );
996 
997 
998     ----IF l_include_all_flag is 'Y', assign it to the global variable
999     IF l_include_all_flag='Y'
1000     THEN
1001       OE_Credit_Engine_GRP.G_site_incl_all_flag:='Y';
1002     END IF;
1003 
1004 
1005 
1006     FOR a IN 1..l_usage_curr_tbl.COUNT
1007     LOOP
1008       IF G_debug_flag = 'Y'
1009       THEN
1010         OE_DEBUG_PUB.ADD('currency_code=: '||l_usage_curr_tbl(a).usage_curr_code);
1011       END IF;
1012     END LOOP;
1013 --------------------------------------------------------------------------------
1014 
1015     ----assign table of usages to the Global variable
1016     l_start := OE_Credit_Engine_GRP.G_site_curr_tbl.COUNT+1;
1017     l_end   := OE_Credit_Engine_GRP.G_site_curr_tbl.COUNT+l_usage_curr_tbl.COUNT;
1018 
1019     IF G_debug_flag = 'Y'
1020     THEN
1021       OE_DEBUG_PUB.ADD('l_start= '||TO_CHAR(l_start));
1022       OE_DEBUG_PUB.ADD('l_end= '||TO_CHAR(l_end));
1023       OE_DEBUG_PUB.ADD('IN loop for assign table of usages to Global variable ');
1024       OE_DEBUG_PUB.ADD('table of currencies:');
1025     END IF;
1026 
1027     FOR i IN l_start..l_end
1028     LOOP
1029 
1030       j:=j+1;
1031       OE_Credit_Engine_GRP.G_site_curr_tbl(i).usage_curr_code
1032              := l_usage_curr_tbl(j).usage_curr_code;
1033 
1034       IF G_debug_flag = 'Y'
1035       THEN
1036         OE_DEBUG_PUB.ADD('currency= '||l_usage_curr_tbl(j).usage_curr_code);
1037       END IF;
1038     END LOOP;
1039 
1040 
1041     ----pre-calculate exposure
1042     IF l_credit_check_rule_rec.quick_cr_check_flag ='Y'
1043     THEN
1044 
1045       OE_CREDIT_EXPOSURE_PVT.Get_Exposure
1046       ( p_customer_id             => p_customer_id
1047       , p_site_use_id             => p_site_id
1048       , p_header_id               => NULL
1049       , p_credit_check_rule_rec   => l_credit_check_rule_rec
1050       , p_system_parameters_rec   => l_system_parameters_rec
1051       , p_limit_curr_code         => p_limit_curr_code
1052       , p_usage_curr_tbl          => l_usage_curr_tbl
1053       , p_include_all_flag        => l_include_all_flag
1054       , p_global_exposure_flag    => 'N'
1055       , p_need_exposure_details  => p_need_exposure_details
1056       , x_total_exposure         => x_total_exposure
1057       , x_order_amount           => x_order_amount
1058       , x_order_hold_amount      => x_order_hold_amount
1059       , x_ar_amount              => x_ar_amount
1060       , x_return_status           => l_return_status
1061       , x_error_curr_tbl          => l_error_curr_tbl
1062       );
1063 
1064       IF l_error_curr_tbl.COUNT<>0
1065       THEN
1066         FOR f IN 1..l_error_curr_tbl.COUNT
1067         LOOP
1068          IF G_debug_flag = 'Y'
1069          THEN
1070            OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
1071            OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||l_error_curr_tbl(f).usage_curr_code
1072                ||' and credit limit currency '
1073                ||p_limit_curr_code
1074                ||' is missing for conversion type '
1075             || NVL(l_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
1076            OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
1077          END IF;
1078         END LOOP;
1079 
1080        ---bug fix 2439029
1081 
1082        -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1083 
1084        x_return_status:='C';
1085 
1086       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1087       THEN
1088         RAISE FND_API.G_EXC_ERROR;
1089       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1090       THEN
1091         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1092       END IF;
1093 
1094     ----non pre-calculate exposure
1095     ELSIF l_credit_check_rule_rec.quick_cr_check_flag ='N'
1096     THEN
1097 
1098       OE_CREDIT_CHECK_UTIL.Get_order_exposure
1099       ( p_header_id              => NULL
1100       , p_transaction_curr_code  => NULL
1101       , p_customer_id            => p_customer_id
1102       , p_site_use_id            => p_site_id
1103       , p_credit_check_rule_rec  => l_credit_check_rule_rec
1104       , p_system_parameter_rec   => l_system_parameters_rec
1105       , p_credit_level           => 'SITE'
1106       , p_limit_curr_code        => p_limit_curr_code
1107       , p_usage_curr             => l_usage_curr_tbl
1108       , p_include_all_flag       => l_include_all_flag
1109       , p_global_exposure_flag  => 'N'
1110       , p_need_exposure_details  => p_need_exposure_details
1111       , x_total_exposure         => x_total_exposure
1112       , x_order_amount           => x_order_amount
1113       , x_order_hold_amount      => x_order_hold_amount
1114       , x_ar_amount              => x_ar_amount
1115       , x_return_status          => l_return_status
1116       , x_conversion_status      => l_conversion_status
1117       );
1118 
1119 
1120       IF l_conversion_status.COUNT<>0
1121       THEN
1122 
1123         FOR f IN 1..l_conversion_status.COUNT
1124         LOOP
1125           IF G_debug_flag = 'Y'
1126           THEN
1127             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
1128             OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||l_conversion_status(f).usage_curr_code
1129                    ||' and credit limit currency '
1130                    ||p_limit_curr_code
1131                    ||' is missing for conversion type '
1132              || NVL(l_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
1133             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
1134          END IF;
1135         END LOOP;
1136 
1137        ---bug fix 2439029
1138 
1139        -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1140 
1141        x_return_status:='C';
1142 
1143 
1144       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1145       THEN
1146         RAISE FND_API.G_EXC_ERROR;
1147       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1148       THEN
1149         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1150       END IF;
1151     END IF;
1152 
1153   END IF;
1154 
1155     IF G_debug_flag = 'Y'
1156     THEN
1157       OE_DEBUG_PUB.ADD('OEXPCRGB: OUT Get_Customer_Exposure with the status='||x_return_status);
1158     END IF;
1159 
1160 EXCEPTION
1161 
1162     WHEN FND_API.G_EXC_ERROR THEN
1163       x_return_status := FND_API.G_RET_STS_ERROR;
1164       OE_MSG_PUB.Count_And_Get
1165             ( p_count => l_msg_count,
1166               p_data  => l_msg_data
1167             );
1168 
1169     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1170       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1171       OE_MSG_PUB.Count_And_Get
1172             ( p_count => l_msg_count,
1173               p_data  => l_msg_data
1174             );
1175 
1176     WHEN OTHERS THEN
1177       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1178       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1179       THEN
1180         FND_MSG_PUB.Add_Exc_Msg
1181             (   G_PKG_NAME
1182             ,   'Get_Customer_Exposure'
1183             );
1184       END IF;
1185 
1186       OE_MSG_PUB.Count_And_Get
1187             ( p_count => l_msg_count,
1188               p_data  => l_msg_data
1189             );
1190 
1191 END Get_Customer_Exposure;
1192 
1193 --------------------------------------------------------
1194 -- The following is the Original procedure released with ONT-G
1195 -- From the ONT-I, this procedure is overloaded with the
1196 -- party level
1197 -- for backward compatible this procedure is retained
1198 -------------------------------------------------------------
1199 PROCEDURE Get_customer_exposure
1200 ( p_customer_id           IN NUMBER
1201 , p_site_id               IN NUMBER
1202 , p_limit_curr_code       IN VARCHAR2
1203 , p_credit_check_rule_id  IN NUMBER
1204 , x_total_exposure    OUT NOCOPY /* file.sql.39 change */ NUMBER
1205 , x_return_status     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1206 )
1207 IS
1208 
1209 l_msg_count             NUMBER        := 0 ;
1210 l_msg_data              VARCHAR2(2000):= NULL ;
1211 
1212 l_order_hold_amount NUMBER;
1213 l_ar_amount         NUMBER;
1214 l_order_amount      NUMBER;
1215 l_EXTERNAL_AMOUNT   NUMBER ;
1216 
1217 BEGIN
1218 
1219  IF G_debug_flag = 'Y'
1220  THEN
1221     OE_DEBUG_PUB.ADD(' Into Get_customer_exposure ');
1222     OE_DEBUG_PUB.ADD(' Calling Get_customer_exposure with details');
1223     OE_DEBUG_PUB.ADD('p_customer_id           => '|| p_customer_id );
1224     OE_DEBUG_PUB.ADD('p_site_id               => '|| p_site_id );
1225     OE_DEBUG_PUB.ADD('p_limit_curr_code       => '|| p_limit_curr_code );
1226     OE_DEBUG_PUB.ADD('p_credit_check_rule_id  => '|| p_credit_check_rule_id );
1227 
1228  END IF;
1229 
1230 OE_CREDIT_ENGINE_GRP.Get_customer_exposure
1231 ( p_party_id              => NULL
1232 , p_customer_id           => p_customer_id
1233 , p_site_id               => p_site_id
1234 , p_limit_curr_code       => p_limit_curr_code
1235 , p_credit_check_rule_id  => p_credit_check_rule_id
1236 , p_need_exposure_details => 'N'
1237 , x_total_exposure        => x_total_exposure
1238 , x_order_hold_amount     => l_order_hold_amount
1239 , x_order_amount          => l_order_amount
1240 , x_ar_amount             => l_ar_amount
1241 , x_external_amount       => l_external_amount
1242 , x_return_status         => x_return_status
1243 );
1244 
1245   IF G_debug_flag = 'Y'
1246   THEN
1247     OE_DEBUG_PUB.ADD(' Out x_total_exposure => '|| x_total_exposure );
1248     OE_DEBUG_PUB.ADD(' Out x_return_status => '|| x_return_status );
1249     OE_DEBUG_PUB.ADD(' Out Get_customer_exposure');
1250   END IF;
1251 
1252 EXCEPTION
1253     WHEN OTHERS THEN
1254       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1255       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1256       THEN
1257         FND_MSG_PUB.Add_Exc_Msg
1258             (   G_PKG_NAME
1259             ,   'Get_Customer_Exposure'
1260             );
1261       END IF;
1262 
1263       OE_MSG_PUB.Count_And_Get
1264             ( p_count => l_msg_count,
1265               p_data  => l_msg_data
1266             );
1267 
1268 END Get_Customer_Exposure;
1269 
1270 
1271 --------------------------------------------------------------------------
1272 --PROCEDURE: Check_Credit
1273 --COMMENT:  main procedure for checking non electronic payments
1274 --MODIFICATION:
1275 -- 02/15/2002 Removed Default NULL for p_calling_action
1276 ---------------------------------------------------------------------------
1277 PROCEDURE Check_Credit
1278 (   p_header_id                 IN      NUMBER
1279 ,   p_calling_action            IN      VARCHAR2
1280 ,   p_delayed_request           IN      VARCHAR2 := NULL
1281 ,   p_bill_to_site_use_id       IN      NUMBER   := NULL
1282 ,   p_credit_check_rule_id      IN      NUMBER   := NULL
1283 ,   p_functional_currency_code  IN      VARCHAR2 := NULL
1284 ,   p_transaction_currency_code IN      VARCHAR2 := NULL
1285 ,   p_transaction_amount        IN      NUMBER   := NULL
1286 ,   p_org_id                    IN      NUMBER   := NULL
1287 ,   x_cc_hold_comment           OUT NOCOPY /* file.sql.39 change */     VARCHAR2
1288 ,   x_msg_count                 OUT NOCOPY /* file.sql.39 change */     NUMBER
1289 ,   x_msg_data                  OUT NOCOPY /* file.sql.39 change */     VARCHAR2
1290 ,   x_result_out                OUT NOCOPY /* file.sql.39 change */     VARCHAR2
1291 ,   x_return_status             OUT NOCOPY /* file.sql.39 change */     VARCHAR2
1292 )
1293 IS
1294 
1295 l_msg_count              NUMBER        := 0 ;
1296 l_msg_data               VARCHAR2(2000):= NULL ;
1297 l_credit_check_rule_id   NUMBER;
1298 l_credit_check_rule_rec  OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type ;
1299 l_system_parameter_rec   OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type ;
1300 l_cc_limit_used          NUMBER;
1301 l_cc_profile_used        VARCHAR2(30);
1302 l_header_rec             OE_Order_PUB.Header_Rec_Type;
1303 
1304 BEGIN
1305 
1306   x_return_status := FND_API.G_RET_STS_SUCCESS;
1307 
1308   IF G_debug_flag = 'Y'
1309   THEN
1310     OE_DEBUG_PUB.ADD('OEXPCRGB: IN Check_Credit ',1);
1311     OE_DEBUG_PUB.ADD('Input parameters list ');
1312     OE_DEBUG_PUB.ADD('p_header_id = '|| p_header_id,1 );
1313     OE_DEBUG_PUB.ADD('p_delayed_request = '|| p_delayed_request,1 );
1314     OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action,1 );
1315     OE_DEBUG_PUB.ADD('p_credit_check_rule_id => '|| p_credit_check_rule_id );
1316   END IF;
1317 
1318   OE_Credit_Engine_GRP.G_delayed_request    := NULL ;
1319   OE_Credit_Engine_GRP.G_currency_error_msg := NULL ;
1320   OE_Credit_Engine_GRP.G_delayed_request    := p_delayed_request ;
1321 
1322 --ER#7479609 start
1323   IF p_calling_action in ('AUTO HOLD','AUTO RELEASE')  THEN
1324    OE_Verify_Payment_PUB.G_init_calling_action := p_calling_action;
1325   END IF;
1326 --ER#7479609 end
1327 
1328 --bug# 4967828
1329   IF p_org_id IS NOT NULL THEN
1330      OE_CREDIT_CHECK_UTIL.G_org_id := p_org_id ;
1331   END IF;
1332 
1333   -- Get Gl currency if calling action is not EXTERNAL
1334   --
1335   IF NVL(p_calling_action, 'BOOKING') <> 'EXTERNAL' THEN
1336     OE_Credit_Engine_GRP.GL_currency := OE_Credit_Engine_GRP.GET_GL_currency;
1337 
1338     OE_Header_UTIL.Query_Row
1339         (p_header_id            => p_header_id
1340         ,x_header_rec           => l_header_rec
1341         );
1342 
1343     --bug# 4967828
1344     IF p_org_id IS NULL THEN
1345        OE_CREDIT_CHECK_UTIL.G_org_id := l_header_rec.org_id ;
1346     END IF;
1347 
1348     IF G_debug_flag = 'Y'
1349     THEN
1350       OE_DEBUG_PUB.ADD('after query header ');
1351       OE_DEBUG_PUB.ADD(' ');
1352       OE_DEBUG_PUB.ADD('======================================');
1353       OE_DEBUG_PUB.ADD('Header ID = '|| l_header_rec.header_id );
1354       OE_DEBUG_PUB.ADD('order_category_code = '||
1355          l_header_rec.order_category_code );
1356       OE_DEBUG_PUB.ADD('Booked flag = '||
1357          l_header_rec.booked_flag );
1358       OE_DEBUG_PUB.ADD('Order number = '||
1359          l_header_rec.order_number );
1360       OE_DEBUG_PUB.ADD('Credit crad approval date = '||
1361          l_header_rec.credit_card_approval_date );
1362       OE_DEBUG_PUB.ADD('payment_term_id = ' ||
1363       l_header_rec.payment_term_id );
1364       OE_DEBUG_PUB.ADD('order_type_id = '||
1365       l_header_rec.order_type_id );
1366       OE_DEBUG_PUB.ADD(' ');
1367       OE_DEBUG_PUB.ADD('======================================');
1368    END IF;
1369 
1370     IF p_credit_check_rule_id is NULL or
1371          NVL(p_credit_check_rule_id,0) = 0
1372     THEN
1373 
1374        Get_Credit_Check_Rule_ID
1375        ( p_calling_action        => p_calling_action
1376        , p_order_type_id         => l_header_rec.order_type_id
1377        , x_credit_rule_id        => l_credit_check_rule_id
1378       );
1379     ELSE
1380      l_credit_check_rule_id := p_credit_check_rule_id;
1381     END IF;
1382 
1383   ELSE
1384     -- External credit checking call
1385     l_credit_check_rule_id := p_credit_check_rule_id;
1386     OE_CREDIT_ENGINE_GRP.GL_Currency := p_functional_currency_code;
1387     l_header_rec.header_id := NULL;
1388     l_header_rec.transactional_curr_code := p_transaction_currency_code;
1389     l_header_rec.invoice_to_org_id := p_bill_to_site_use_id;
1390   END IF;
1391 
1392     IF G_debug_flag = 'Y'
1393     THEN
1394      OE_DEBUG_PUB.ADD(' GL_CURRENCY after = '|| OE_Credit_Engine_GRP.GL_currency );
1395      OE_DEBUG_PUB.ADD('l_credit_check_rule_id = '|| l_credit_check_rule_id );
1396     END IF;
1397 
1398   ----------------------- start Processing --------------------
1399 
1400   IF l_credit_check_rule_id is NULL
1401   THEN
1402     IF G_debug_flag = 'Y'
1403     THEN
1404       OE_DEBUG_PUB.ADD(' No credit check attached, return ');
1405     END IF;
1406     RETURN ;
1407   END IF;
1408 
1409   -- Initialize the G_cc_hold_item_type and G_cc_hold_activity_name
1410   -- global variables
1411   Set_G_CC_Hold_Info;
1412 
1413   OE_CREDIT_CHECK_UTIL.GET_credit_check_rule
1414   ( p_credit_check_rule_id   => l_credit_check_rule_id
1415   , x_credit_check_rules_rec => l_credit_check_rule_rec
1416   );
1417 
1418   OE_CREDIT_CHECK_UTIL.GET_System_parameters
1419   ( x_system_parameter_rec => l_system_parameter_rec
1420   );
1421 
1422   IF G_debug_flag = 'Y'
1423   THEN
1424      OE_DEBUG_PUB.ADD('credit_check_level_code = '||
1425        l_credit_check_rule_rec.credit_check_level_code );
1426   END IF;
1427 
1428   IF NVL(l_credit_check_rule_rec.credit_check_level_code,'ORDER')
1429           = 'ORDER'
1430   THEN
1431     OE_Credit_check_order_PVT.Check_order_credit
1432     ( p_header_rec            => l_header_rec
1433     , p_calling_action        => p_calling_action
1434     , p_credit_check_rule_rec => l_credit_check_rule_rec
1435     , p_system_parameter_rec  => l_system_parameter_rec
1436     , p_transaction_amount    => p_transaction_amount
1437     , x_msg_count             => x_msg_count
1438     , x_msg_data              => x_msg_data
1439     , x_cc_result_out         => x_result_out
1440     , x_cc_hold_comment       => x_cc_hold_comment
1441     , x_return_status         => x_return_status
1442     );
1443 
1444     IF G_debug_flag = 'Y'
1445     THEN
1446       OE_DEBUG_PUB.ADD('OEXPCRGB: Out of Check_order_credit ');
1447       OE_DEBUG_PUB.ADD('x_return_status = '|| x_return_status );
1448       OE_DEBUG_PUB.ADD('x_result_out =>' || x_result_out );
1449     END IF;
1450 
1451   ELSIF NVL(l_credit_check_rule_rec.credit_check_level_code,'ORDER')
1452           = 'LINE'
1453   THEN
1454     OE_Credit_Check_lines_PVT.G_line_hold_count := 0;
1455     OE_Credit_check_lines_PVT.Check_order_lines_credit
1456     ( p_header_rec            => l_header_rec
1457     , p_calling_action        => p_calling_action
1458     , p_credit_check_rule_rec => l_credit_check_rule_rec
1459     , p_system_parameter_rec  => l_system_parameter_rec
1460     , x_msg_count             => x_msg_count
1461     , x_msg_data              => x_msg_data
1462     , x_cc_result_out         => x_result_out
1463     , x_cc_limit_used         => l_cc_limit_used
1464     , x_cc_profile_used       => l_cc_profile_used
1465     , x_return_status         => x_return_status
1466     ) ;
1467 
1468     IF G_debug_flag = 'Y'
1469     THEN
1470       OE_DEBUG_PUB.ADD('OEXPCRGB: Out of Check_order_lines_credit ');
1471       OE_DEBUG_PUB.ADD('x_return_status = '|| x_return_status );
1472       OE_DEBUG_PUB.ADD('x_result_out => '|| x_result_out );
1473       OE_DEBUG_PUB.ADD('line hold count =>'||OE_Credit_Check_lines_PVT.G_line_hold_count);
1474     END IF;
1475   END IF;
1476 
1477   -- Moved calling_action check to outside of status check
1478   IF p_calling_action <> 'EXTERNAL' THEN
1479     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1480 
1481 
1482       Apply_exception_hold
1483         ( p_header_id            => p_header_id
1484         , x_return_status        => x_return_status
1485         );
1486 
1487        IF G_debug_flag = 'Y'
1488        THEN
1489          OE_DEBUG_PUB.ADD('Apply_exception_hold  x_return_status => '
1490               || x_return_status );
1491        END IF;
1492 
1493       IF x_return_status = FND_API.G_RET_STS_SUCCESS
1494       THEN
1495         x_return_status := FND_API.G_RET_STS_ERROR;
1496       ELSE
1497         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1498       END IF;
1499     END IF;  -- apply exception hold
1500     -- set result out to FAIL when credit check failed or
1501     -- when an exception occurred and a hold was successfully placed
1502 
1503     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1504       x_result_out := 'FAIL' ;
1505     END IF;
1506   ELSE  -- for the case of EXTERNAL credit check
1507     -- x_return_status is either SUCCESS, ERROR or UNEXP_ERROR
1508     -- for external. If it is is and expected error, it might be
1509     -- due to credit check failure or failure from currency conversion.
1510     -- In this case, don't attempt to place credit hold
1511     -- set return status to SUCCESS with result_out=FAIL to indicate that
1512     -- credit checking completed successfully, even though
1513     -- the result_out is failure.
1514     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1515 
1516       IF G_debug_flag = 'Y'
1517       THEN
1518          OE_DEBUG_PUB.ADD( ' x_return_status = '|| x_return_status );
1519          OE_DEBUG_PUB.ADD( ' G_currency_error_msg = '||
1520               OE_Credit_Engine_GRP.G_currency_error_msg );
1521        END IF;
1522     END IF;
1523 
1524     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1525       x_result_out := 'FAIL';
1526       x_return_status := FND_API.G_RET_STS_SUCCESS;
1527     ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1528       x_result_out := 'FAIL';
1529     END IF;
1530     -- for success, default is PASS
1531   END IF;
1532 
1533   IF G_debug_flag = 'Y'
1534   THEN
1535      OE_DEBUG_PUB.ADD('after excp holds  x_return_status => '
1536             || x_return_status );
1537      OE_DEBUG_PUB.ADD('after excp holds x_result_out => '
1538             || x_result_out );
1539      OE_DEBUG_PUB.ADD('Check for notification send ' ) ;
1540    END IF;
1541 
1542   IF x_result_out = 'FAIL_HOLD' AND -- Bug 4506263 FP
1543       NVL(p_calling_action, 'BOOKING') NOT IN ('EXTERNAL', 'AUTO RELEASE')
1544   THEN
1545     IF  l_credit_check_rule_rec.send_hold_notifications_flag = 'Y'
1546     THEN
1547       OE_credit_check_util.send_credit_hold_ntf
1548       ( p_header_rec        => l_header_rec
1549       , p_credit_hold_level => l_credit_check_rule_rec.credit_hold_level_code
1550       , p_cc_hold_comment   => x_cc_hold_comment
1551       , x_return_status     => x_return_status
1552       );
1553 
1554       IF G_debug_flag = 'Y'
1555       THEN
1556 
1557         OE_DEBUG_PUB.ADD('after call send_credit_hold_ntf ');
1558         OE_DEBUG_PUB.ADD('x_return_status = '|| x_return_status );
1559         OE_DEBUG_PUB.ADD('line hold count =>'||OE_Credit_Check_lines_PVT.G_line_hold_count);
1560       END IF;
1561 
1562        IF x_return_status <> FND_API.G_RET_STS_SUCCESS
1563        THEN
1564 
1565          OE_DEBUG_PUB.ADD('send failed ');
1566 
1567          x_return_status := FND_API.G_RET_STS_SUCCESS ;
1568 
1569         OE_DEBUG_PUB.ADD(' after assign x_return_status = '
1570                 || x_return_status );
1571        END IF;
1572 
1573 
1574      ELSE
1575        IF G_debug_flag = 'Y'
1576        THEN
1577           OE_DEBUG_PUB.ADD('No need for sending notifications flag OFF or ignored',1);
1578        END IF;
1579      END IF;
1580 
1581   END IF;
1582 
1583 
1584 
1585   OE_Credit_Engine_GRP.G_delayed_request    := NULL ;
1586 
1587   IF p_calling_action = 'EXTERNAL'
1588   THEN
1589     OE_MSG_PUB.Count_And_Get
1590     ( p_count => x_msg_count,
1591       p_data  => x_msg_data
1592     );
1593   END IF;
1594 
1595   IF G_debug_flag = 'Y'
1596   THEN
1597     OE_DEBUG_PUB.ADD('Final x_return_status => '|| x_return_status );
1598     OE_DEBUG_PUB.ADD('Final x_result_out => '|| x_result_out );
1599     OE_DEBUG_PUB.ADD('OEXPCRGB: OUT Check_Credit ',1);
1600   END IF;
1601 
1602 EXCEPTION
1603 
1604     WHEN FND_API.G_EXC_ERROR THEN
1605       x_return_status := FND_API.G_RET_STS_ERROR;
1606        x_result_out := 'FAIL' ;
1607       OE_MSG_PUB.Count_And_Get
1608             ( p_count => x_msg_count,
1609               p_data  => x_msg_data
1610             );
1611 
1612     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1613       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1614        x_result_out := 'FAIL' ;
1615       OE_MSG_PUB.Count_And_Get
1616             ( p_count => x_msg_count,
1617               p_data  => x_msg_data
1618             );
1619 
1620     WHEN OTHERS THEN
1621       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1622        x_result_out := 'FAIL' ;
1623       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1624       THEN
1625         FND_MSG_PUB.Add_Exc_Msg
1626             (   G_PKG_NAME
1627             ,   'Check_Credit'
1628             );
1629       END IF;
1630 
1631       OE_MSG_PUB.Count_And_Get
1632             ( p_count => x_msg_count,
1633               p_data  => x_msg_data
1634             );
1635 
1636 END Check_Credit ;
1637 
1638 /* Start MOAC CREDIT CHECK CHANGE */
1639 ------------------------------------------------------------------------------
1640 --  PROCEDURE  : Set_context                 PRIVATE
1641 --  COMMENT    : This procedure set the context
1642 --
1643 --------------------------------------------------------------------------------
1644 PROCEDURE Set_context
1645 IS
1646 --
1647 l_org_id        NUMBER;
1648 --
1649 BEGIN
1650 
1651   OE_DEBUG_PUB.ADD('OEXPCRGB: IN Set_context ' );
1652   BEGIN
1653 
1654     l_org_id :=  mo_global.get_current_org_id;
1655 
1656     IF l_org_id IS NOT NULL THEN
1657        IF G_debug_flag = 'Y' THEN
1658           oe_debug_pub.add(  'OEXPCRGB: setting single org context to '|| l_org_id , 1 );
1659        END IF;
1660 
1661        MO_GLOBAL.Set_Policy_Context('S', l_org_id);
1662     ELSE
1663        IF G_debug_flag = 'Y' THEN
1664           oe_debug_pub.add('OEXPCRGB: Unexpected error in setting org context where Customer Exposure flag is ''''N', 1 );
1665        END IF;
1666        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1667     END IF;
1668 
1669     OE_CREDIT_CHECK_UTIL.G_org_id := l_org_id ;
1670 
1671     IF l_org_id IS NULL THEN
1672        Fnd_Message.set_name('FND','MO_ORG_REQUIRED');
1673        Oe_Msg_Pub.Add;
1674        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1675     END IF;
1676 
1677   EXCEPTION
1678   WHEN NO_DATA_FOUND
1679   THEN
1680     l_org_id := NULL ;
1681 
1682     OE_CREDIT_CHECK_UTIL.G_org_id := NULL ;
1683 
1684     OE_DEBUG_PUB.ADD(' Exception Set context');
1685   END ;
1686 
1687   OE_DEBUG_PUB.ADD('OEXPCRGB: OUT Set_context ' );
1688 
1689 EXCEPTION
1690   WHEN OTHERS THEN
1691     IF G_debug_flag = 'Y' THEN
1692        OE_DEBUG_PUB.ADD ('Exception : Unexpected error from Set_Context ', 1);
1693     END IF;
1694 
1695     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1696     THEN
1697        FND_MSG_PUB.Add_Exc_Msg
1698        (   G_PKG_NAME
1699        ,   'Set_Context'
1700        );
1701     END IF;
1702 
1703     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1704 
1705 END Set_context ;
1706 
1707 /* End MOAC CREDIT CHECK CHANGE */
1708 
1709 END OE_Credit_Engine_GRP ;