DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_VERIFY_PAYMENT_PUB

Source


1 PACKAGE BODY OE_Verify_Payment_PUB AS
2 /* $Header: OEXPVPMB.pls 120.39.12010000.4 2008/11/14 11:54:30 msundara ship $ */
3 
4 G_PKG_NAME    CONSTANT VARCHAR2(30) := 'OE_Verify_Payment_PUB';
5 G_credit_check_rule_id NUMBER;
6 
7 PROCEDURE Check_ReAuth_for_MultiPmnts
8 (  p_credit_card_approval_code 	IN VARCHAR2
9 ,  p_trxn_extension_id 		IN NUMBER
10 ,  p_amount_to_authorize  	IN NUMBER
11 ,  p_org_id			IN NUMBER
12 ,  p_site_use_id                IN NUMBER
13 ,  p_header_id                  IN NUMBER  --bug 5209584
14 ,  p_line_id                    IN NUMBER
15 ,  p_payment_number             IN NUMBER
16 ,  p_reauthorize_out 		OUT NOCOPY  VARCHAR2
17 ,  x_msg_count       		OUT NOCOPY  NUMBER
18 ,  x_msg_data        		OUT NOCOPY  VARCHAR2
19 ,  x_return_status   		OUT NOCOPY  VARCHAR2
20 );
21 
22 --bug3225795 start
23 --this function is currently similar to Get_Line_Total. Needs to be changed later to consider partial invoicing.
24 FUNCTION Get_Inv_Line_Total
25 ( p_line_id		  IN 	NUMBER
26 , p_header_id		  IN	NUMBER
27 , p_currency_code	  IN	VARCHAR2
28 , p_level		  IN	VARCHAR2
29 , p_to_exclude_commitment IN    VARCHAR2 DEFAULT 'Y' --bug3225795
30 ) RETURN NUMBER;
31 
32 
33 PROCEDURE Update_AuthInfo_for_MultiPmnts
34 ( p_header_id           IN   NUMBER
35 , p_auth_amount         IN   NUMBER
36 , p_auth_code           IN   VARCHAR2
37 , p_auth_date           IN   DATE
38 , p_tangible_id		IN   VARCHAR2
39 , p_line_id             IN   NUMBER
40 , p_payment_number	IN   NUMBER
41 , p_msg_count           OUT NOCOPY /* file.sql.39 change */  VARCHAR2
42 , p_msg_data            OUT NOCOPY /* file.sql.39 change */  VARCHAR2
43 , p_return_status       OUT NOCOPY /* file.sql.39 change */  VARCHAR2
44 );
45 
46 -- bug 4339864, make this autonomous to be called for picking,shipping and packing event.
47 PROCEDURE Apply_Verify_Line_Hold_Commit
48 (  p_header_id       IN   NUMBER
49 ,  p_line_id         IN   NUMBER
50 ,  p_hold_id         IN   NUMBER
51 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
52 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
53 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
54 ) IS
55 
56 -- bug 4339864
57 PRAGMA AUTONOMOUS_TRANSACTION;
58 
59 l_hold_id		NUMBER;
60 l_hold_source_rec   	OE_HOLDS_PVT.Hold_Source_Rec_Type;
61 l_hold_release_rec  	OE_HOLDS_PVT.Hold_Release_Rec_Type;
62 l_hold_result   	VARCHAR2(30);
63 l_line_ind		VARCHAR2(240);
64 l_line_number		NUMBER;
65 l_shipment_number 	NUMBER;
66 l_option_number   	NUMBER;
67 l_component_number	NUMBER;
68 l_service_number	NUMBER;
69 
70 l_msg_count         	NUMBER := 0;
71 l_msg_data          	VARCHAR2(2000);
72 l_return_status     	VARCHAR2(30);
73 l_debug_level CONSTANT 	NUMBER := oe_debug_pub.g_debug_level;
74 
75 BEGIN
76 
77   p_return_status := FND_API.G_RET_STS_SUCCESS;
78 
79   IF l_debug_level  > 0 THEN
80       oe_debug_pub.add(  'OEXPVPMB: IN APPLY VERIFY LINE HOLDS' ) ;
81   END IF;
82 
83   IF l_debug_level  > 0 THEN
84       oe_debug_pub.add(  'OEXPVPMB: LINE ID : '||P_LINE_ID ) ;
85   END IF;
86   IF l_debug_level  > 0 THEN
87       oe_debug_pub.add(  'OEXPVPMB: HOLD ID : '||P_HOLD_ID ) ;
88   END IF;
89 
90   -- Check if Hold already exists on this order
91   IF l_debug_level  > 0 THEN
92       oe_debug_pub.add(  'OEXPVPMB: CHECKING IF REQUESTED VERIFY HOLD ALREADY APPLIED' ) ;
93   END IF;
94   --
95     OE_HOLDS_PUB.Check_Holds
96                       ( p_api_version    => 1.0
97                       , p_header_id      => p_header_id
98                       , p_line_id        => p_line_id
99                       , p_hold_id        => l_hold_id
100                       , p_entity_code    => 'O'
101                       , p_entity_id      => p_header_id
102                       , x_result_out     => l_hold_result
103                       , x_msg_count      => l_msg_count
104                       , x_msg_data       => l_msg_data
105                       , x_return_status  => l_return_status
106                       );
107 
108   -- Return with Success if this Hold Already exists on the order
109   IF l_hold_result = FND_API.G_TRUE THEN
110     IF l_debug_level  > 0 THEN
111         oe_debug_pub.add(  'OEXPVPMB: HOLD ALREADY APPLIED ON LINE ID : ' || P_LINE_ID ) ;
112     END IF;
113     RETURN ;
114   END IF ;
115 
116   -- Apply Verify Hold on Order Line
117   IF l_debug_level  > 0 THEN
118       oe_debug_pub.add(  'OEXPVPMB: APPLYING VERIFY HOLD ON LINE ID : ' || P_LINE_ID ) ;
119   END IF;
120 
121   l_hold_source_rec.hold_id         := p_hold_id ;
122   l_hold_source_rec.hold_entity_code:= 'O';
123   l_hold_source_rec.hold_entity_id  := p_header_id;
124   l_hold_source_rec.line_id         := p_line_id;
125 
126   OE_Holds_PUB.Apply_Holds
127                 (   p_api_version       =>      1.0
128                 ,   p_validation_level  =>      FND_API.G_VALID_LEVEL_NONE
129                 ,   p_hold_source_rec   =>      l_hold_source_rec
130                 ,   x_msg_count         =>      l_msg_count
131                 ,   x_msg_data          =>      l_msg_data
132                 ,   x_return_status     =>      l_return_status
133                 );
134 
135   IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
136     IF p_hold_id = 16 THEN
137 
138       BEGIN
139        SELECT line_number,
140               shipment_number,
141               option_number,
142               component_number,
143               service_number
144        INTO   l_line_number,
145               l_shipment_number,
146               l_option_number,
147               l_component_number,
148               l_service_number
149        from  oe_order_lines_all
150        where line_id = p_line_id;
151 
152 
153       end;
154       l_line_ind := RTRIM(l_line_number      || '.' ||
155                              l_shipment_number  || '.' ||
156                              l_option_number    || '.' ||
157                              l_component_number || '.' ||
158                              l_service_number, '.');
159 
160 
161       FND_MESSAGE.SET_NAME('ONT','ONT_PENDING_AUTH_HOLD_APPLIED');
162       FND_MESSAGE.SET_TOKEN('LEVEL','LINE '||l_line_ind);
163       OE_MSG_PUB.ADD;
164       IF l_debug_level  > 0 THEN
165         oe_debug_pub.add(  'OEXVPPYB: Pending Payment Authorization hold  has been applied on order line.', 3);
166       END IF;
167     END IF;
168   ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
169     RAISE FND_API.G_EXC_ERROR;
170   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
171     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
172   END IF;
173 
174   -- bug 4339864
175   IF l_debug_level  > 0 THEN
176     OE_DEBUG_PUB.ADD(' Holds success ' , 3);
177     OE_DEBUG_PUB.ADD(' About to Issue COMMIT', 3);
178   END IF;
179 
180   COMMIT;
181 
182   IF l_debug_level  > 0 THEN
183       oe_debug_pub.add(  'OEXPVPMB: APPLIED VERIFY HOLD ON LINE ID:' || P_LINE_ID ) ;
184   END IF;
185 
186   EXCEPTION
187 
188     WHEN FND_API.G_EXC_ERROR THEN
189       p_return_status := FND_API.G_RET_STS_ERROR;
190       OE_MSG_PUB.Count_And_Get
191             ( p_count => l_msg_count,
192               p_data  => l_msg_data
193             );
194 
195     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
196       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
197       OE_MSG_PUB.Count_And_Get
198             ( p_count => l_msg_count,
199               p_data  => l_msg_data
200             );
201 
202     WHEN OTHERS THEN
203       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
204       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
205       THEN
206         FND_MSG_PUB.Add_Exc_Msg
207             (   G_PKG_NAME
208             ,   'Apply_Verify_Line_Hold'
209             );
210       END IF;
211 
212       OE_MSG_PUB.Count_And_Get
213             ( p_count => l_msg_count,
214               p_data  => l_msg_data
215             );
216 
217 END Apply_Verify_Line_Hold_Commit;
218 
219 Function CHECK_MANUAL_RELEASED_HOLDS (
220  p_calling_action    IN   VARCHAR2,
221  p_hold_id           IN   OE_HOLD_DEFINITIONS.HOLD_ID%TYPE,
222  p_header_id         IN   NUMBER,
223  p_line_id	     IN   NUMBER DEFAULT  NULL
224                                   )
225 RETURN varchar2
226 IS
227  l_hold_release_id           number;
228  l_dummy                     VARCHAR2(1);
229  l_manual_hold_exists        varchar2(1) := 'N';
230  l_released_rec_exists       varchar2(1) := 'Y';
231  --
232  l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
233  --
234 BEGIN
235                      IF l_debug_level  > 0 THEN
236                          oe_debug_pub.add(  'CHECKING FOR MANUALLY RELEASED HOLDS ON HEADER_ID'|| TO_CHAR ( P_HEADER_ID ) ) ;
237                      END IF;
238 
239  if p_calling_action = 'SHIPPING' then
240     IF p_line_id IS NULL THEN
241       BEGIN
242         SELECT NVL(MAX(H.HOLD_RELEASE_ID),0)
243         INTO l_hold_release_id
244         FROM OE_ORDER_HOLDS h,
245              OE_HOLD_SOURCES s
246        WHERE H.HOLD_SOURCE_ID = S.HOLD_SOURCE_ID
247          AND H.HEADER_ID = p_header_id
248          AND H.LINE_ID IS NULL
249          AND H.HOLD_RELEASE_ID IS NOT NULL
250          AND S.HOLD_ID = p_hold_id
251          AND S.HOLD_ENTITY_CODE = 'O'
252          AND S.HOLD_ENTITY_ID = p_header_id
253          AND S.RELEASED_FLAG ='Y';
254       EXCEPTION
255         WHEN NO_DATA_FOUND THEN
256           IF l_debug_level  > 0 THEN
257               oe_debug_pub.add(  'NO RELEASED RECORD FOR CREDIT CHECK HOLDS' ) ;
258           END IF;
259           l_released_rec_exists := 'N';
260         WHEN OTHERS THEN
261           null;
262       END;
263 
264     ELSE
265       -- p_line_id is not null, this is line level credit check.
266       BEGIN
267         SELECT NVL(MAX(H.HOLD_RELEASE_ID),0)
268         INTO l_hold_release_id
269         FROM OE_ORDER_HOLDS h,
270              OE_HOLD_SOURCES s
271        WHERE H.HOLD_SOURCE_ID = S.HOLD_SOURCE_ID
272          AND H.HEADER_ID = p_header_id
273          AND H.LINE_ID = p_line_id
274          AND H.HOLD_RELEASE_ID IS NOT NULL
275          AND S.HOLD_ID = p_hold_id
276          AND S.HOLD_ENTITY_CODE = 'O'
277          AND S.HOLD_ENTITY_ID = p_header_id
278          AND S.RELEASED_FLAG ='Y';
279       EXCEPTION
280         WHEN NO_DATA_FOUND THEN
281           IF l_debug_level  > 0 THEN
282               oe_debug_pub.add(  'NO RELEASED RECORD FOR CREDIT CHECK HOLDS' ) ;
283           END IF;
284           l_released_rec_exists := 'N';
285         WHEN OTHERS THEN
286           null;
287       END;
288 
289     END IF;   -- end if p_line_id is null
290 
291     IF l_released_rec_exists = 'Y' THEN
292        BEGIN
293          select 'Y'
294            into l_manual_hold_exists
295            FROM OE_HOLD_RELEASES
296           WHERE HOLD_RELEASE_ID = l_hold_release_id
297             AND RELEASE_REASON_CODE <> 'PASS_CREDIT'
298             AND CREATED_BY <> 1;
299        EXCEPTION
300          WHEN NO_DATA_FOUND THEN
301            IF l_debug_level  > 0 THEN
302                oe_debug_pub.add(  'NO MANUALLY RELEASED CREDIT HOLDS' ) ;
303            END IF;
304            l_manual_hold_exists := 'N';
305          WHEN OTHERS THEN
306           null;
307        END;
308     END IF;
309  end if;
310  IF l_debug_level  > 0 THEN
311      oe_debug_pub.add(  'MANUAL HOLDS EXISTS:' || L_MANUAL_HOLD_EXISTS ) ;
312  END IF;
313  return l_manual_hold_exists;
314 
315 End CHECK_MANUAL_RELEASED_HOLDS;
316 
317 PROCEDURE Release_Credit_Check_Hold
318 (  p_header_id       IN   NUMBER
319 ,  p_invoice_to_org_id  IN NUMBER DEFAULT NULL
320 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
321 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
322 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
323 )
324 IS
325 l_hold_entity_id    NUMBER := p_header_id;
326 l_hold_id                 NUMBER;
327 l_hold_exists       VARCHAR2(1);
328 l_msg_count         NUMBER := 0;
329 l_msg_data          VARCHAR2(2000);
330 l_return_status     VARCHAR2(30);
331 l_release_reason    VARCHAR2(30);
332 l_hold_source_rec   OE_HOLDS_PVT.Hold_Source_Rec_Type;
333 l_hold_release_rec  OE_HOLDS_PVT.Hold_Release_Rec_Type;
334 l_hold_result   VARCHAR2(30);
335 
336 CURSOR c_billto_lines IS
337   SELECT line_id
338     FROM oe_order_lines
339    WHERE header_id = p_header_id
340     AND  invoice_to_org_id = nvl(p_invoice_to_org_id, invoice_to_org_id);
341 
342 --
343 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
344 --
345 BEGIN
346 
347   p_return_status := FND_API.G_RET_STS_SUCCESS;
348 
349   IF l_debug_level  > 0 THEN
350       oe_debug_pub.add(  'OEXPVPMB: IN RELEASE CREDIT CHECK HOLD' ) ;
351   END IF;
352 
353  FOR C1 in c_billto_lines
354  LOOP
355                  IF l_debug_level  > 0 THEN
356                      oe_debug_pub.add(  'OEXPVPMB:CHECKING CREDIT CHECK HOLD FOR HEADER/LINE ID : ' || TO_CHAR ( P_HEADER_ID ) || '/' || TO_CHAR ( C1.LINE_ID ) ) ;
357                  END IF;
358 
359     l_hold_id := 1 ; -- Credit Checking Hold
360 
361     -- Call Check for Hold to see if the Hold Exists
362     IF l_debug_level  > 0 THEN
363         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
364     END IF;
365 
366   OE_HOLDS_PUB.Check_Holds
367                 ( p_api_version    => 1.0
368                 , p_header_id      => p_header_id
369                 , p_line_id        => C1.line_id
370                 , p_hold_id        => 1
371                 , p_entity_code    => 'O'
372                 , p_entity_id      => p_header_id
373                 , x_result_out     => l_hold_result
374                 , x_msg_count      => l_msg_count
375                 , x_msg_data       => l_msg_data
376                 , x_return_status  => l_return_status
377                 );
378 
379     IF l_hold_result = FND_API.G_TRUE THEN
380 
381               IF l_debug_level  > 0 THEN
382                   oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CHECK HOLD ON HEADER ID:' || TO_CHAR ( P_HEADER_ID ) || '/' || TO_CHAR ( C1.LINE_ID ) , 1 ) ;
383               END IF;
384 
385       l_hold_source_rec.hold_id          := 1;
386       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
387       l_hold_source_rec.HOLD_ENTITY_ID   := p_header_id;
388       l_hold_source_rec.line_id := C1.line_id;
389 
390 
391       l_hold_release_rec.release_reason_code := 'PASS_CREDIT';
392 
393       OE_Holds_PUB.Release_Holds
394                 (   p_api_version       =>   1.0
395                 ,   p_hold_source_rec   =>   l_hold_source_rec
396                 ,   p_hold_release_rec  =>   l_hold_release_rec
397                 ,   x_msg_count         =>   l_msg_count
398                 ,   x_msg_data          =>   l_msg_data
399                 ,   x_return_status     =>   l_return_status
400                 );
401 
402       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
403         RAISE FND_API.G_EXC_ERROR;
404       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
405         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
406       ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
407         fnd_message.set_name('ONT', 'OE_CC_HOLD_REMOVED');
408         oe_msg_pub.add;
409       END IF;
410 
411     END IF;  -- Do nothing if the hold has already been released.
412 
413   END LOOP;
414 
415 EXCEPTION
416 
417     WHEN FND_API.G_EXC_ERROR THEN
418       p_return_status := FND_API.G_RET_STS_ERROR;
419       OE_MSG_PUB.Count_And_Get
420             ( p_count => l_msg_count,
421               p_data  => l_msg_data
422             );
423 
424     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
425       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
426       OE_MSG_PUB.Count_And_Get
427             ( p_count => l_msg_count,
428               p_data  => l_msg_data
429             );
430 
431     WHEN OTHERS THEN
432       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
433       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
434       THEN
435         FND_MSG_PUB.Add_Exc_Msg
436             (   G_PKG_NAME
437             ,   'Release_Credit_Check_Hold'
438             );
439       END IF;
440 
441       OE_MSG_PUB.Count_And_Get
442             ( p_count => l_msg_count,
443               p_data  => l_msg_data
444             );
445 
446 END Release_Credit_Check_Hold;
447 
448 
449 /*----------------------------------------------------------------------
450 Applies a Credit Check Failure Hold
451 ----------------------------------------------------------------------*/
452 PROCEDURE Apply_Credit_Check_Hold
453 (   p_header_id       IN   NUMBER
454 ,   p_invoice_to_org_id         IN   NUMBER
455 ,   p_hold_id         IN   NUMBER
456 ,   p_calling_action  IN   VARCHAR2
457 ,   p_delayed_request IN   VARCHAR2
458 ,   p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
459 ,   p_msg_data         OUT NOCOPY /* file.sql.39 change */  VARCHAR2
460 ,   p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
461 )
462 IS
463 l_hold_exists     VARCHAR2(1) := NULL ;
464 l_msg_count       NUMBER := 0;
465 l_msg_data        VARCHAR2(2000);
466 l_return_status   VARCHAR2(30);
467 l_hold_result   VARCHAR2(30);
468 l_attribute         VARCHAR2(30);
469 l_line_number       NUMBER;
470 l_hold_source_rec   OE_Holds_PVT.Hold_Source_REC_type;
471 
472 l_apply_hold      VARCHAR2(1) := 'N';
473 
474 CURSOR c_billto_lines IS
475   SELECT line_id, line_number
476     FROM oe_order_lines
477    WHERE header_id = p_header_id
478     AND  invoice_to_org_id = p_invoice_to_org_id
479     AND  open_flag = 'Y';
480 
481 --
482 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
483 --
484 BEGIN
485 
486   p_return_status := FND_API.G_RET_STS_SUCCESS;
487 
488   IF l_debug_level  > 0 THEN
489       oe_debug_pub.add(  'OEXPVPMB: IN APPLY CREDIT CHECK HOLDS' ) ;
490   END IF;
491 
492  FOR C1 in c_billto_lines
493  LOOP
494 
495           IF l_debug_level  > 0 THEN
496               oe_debug_pub.add(  'OEXPVPMB: HEADER/LINE ID : '|| P_HEADER_ID || '/' || C1.LINE_ID ) ;
497           END IF;
498   IF l_debug_level  > 0 THEN
499       oe_debug_pub.add(  'OEXPVPMB: HOLD ID : '||P_HOLD_ID ) ;
500   END IF;
501 
502   -- If the call was made from a delayed request, always apply hold.
503   IF NVL(p_delayed_request, FND_API.G_FALSE) = FND_API.G_TRUE THEN
504     l_apply_hold := 'Y';
505   ELSE
506     IF CHECK_MANUAL_RELEASED_HOLDS (
507                p_calling_action    => p_calling_action,
508                p_hold_id           => 1,
509                p_header_id         => p_header_id,
510                p_line_id           => C1.line_id
511                                  ) = 'N' then
512       l_apply_hold := 'Y';
513     END IF;
514   END IF;
515 
516   -- Check if Hold already exists on this order
517   IF l_debug_level  > 0 THEN
518       oe_debug_pub.add(  'OEXPVPMB: CHECK IF HOLD ALREADY APPLIED' ) ;
519   END IF;
520   --
521     OE_HOLDS_PUB.Check_Holds
522                 ( p_api_version    => 1.0
523                 , p_header_id      => p_header_id
524                 , p_line_id        => C1.line_id
525                 , p_hold_id        => 1
526                 , p_entity_code    => 'O'
527                 , p_entity_id      => p_header_id
528                 , x_result_out     => l_hold_result
529                 , x_msg_count      => l_msg_count
530                 , x_msg_data       => l_msg_data
531                 , x_return_status  => l_return_status
532                 );
533 
534   -- Return with Success if this Hold Already exists on the order
535   IF l_hold_result = FND_API.G_TRUE THEN
536            IF l_debug_level  > 0 THEN
537                oe_debug_pub.add(  'OEXPVPMB: HOLD ALREADY APPLIED ON HEADER/LINE ID:' || P_HEADER_ID || '/' || C1.LINE_ID ) ;
538            END IF;
539     -- IF One line is on Hold, other lines will NOT go on hold
540     -- because of this Return.
541     --
542     --RETURN ;
543     l_apply_hold := 'N';
544   END IF ;
545 
546   -- Apply hold only if the flag was set to "Yes" above.
547   IF l_apply_hold = 'Y' THEN
548     -- Apply Credit Check  Hold on Header
549               IF l_debug_level  > 0 THEN
550                   oe_debug_pub.add(  'OEXPVPMB: APPLYING CREDIT CHECK HOLD ON HEADER/LINE ID:' || P_HEADER_ID || '/' || C1.LINE_ID ) ;
551               END IF;
552 
553     l_hold_source_rec.hold_id         := p_hold_id ;  -- Requested Hold
554     l_hold_source_rec.hold_entity_code:= 'O';         -- Order Hold
555     l_hold_source_rec.hold_entity_id  := p_header_id; -- Order Header
556     l_hold_source_rec.line_id         := C1.line_id;
557 
558     OE_Holds_PUB.Apply_Holds
559                   (   p_api_version       =>      1.0
560                   ,   p_validation_level  =>      FND_API.G_VALID_LEVEL_NONE
561                   ,   p_hold_source_rec   =>      l_hold_source_rec
562                   ,   x_msg_count         =>      l_msg_count
563                   ,   x_msg_data          =>      l_msg_data
564                   ,   x_return_status     =>      l_return_status
565                   );
566 
567     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
568       RAISE FND_API.G_EXC_ERROR;
569     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
570       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
571     ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
572        --fnd_message.set_name('ONT', 'OE_CC_HOLD_APPLIED');
573          l_attribute := 'Credit Check';
574          l_line_number := C1.line_number;
575          fnd_message.set_name('ONT','OE_HLD_APPLIED_LINE');
576          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',l_attribute);
577          FND_MESSAGE.SET_TOKEN('LINE_NUMBER',l_line_number);
578          oe_msg_pub.add;
579 
580     END IF;
581 
582          IF l_debug_level  > 0 THEN
583              oe_debug_pub.add(  'OEXPVPMB: APPLIED CREDIT CHECK HOLD ON HEADER/LINE ID:' || P_HEADER_ID || '/' || C1.LINE_ID ) ;
584          END IF;
585   END IF; -- IF apply hold "Yes"
586 END LOOP;
587 
588   EXCEPTION
589 
590     WHEN FND_API.G_EXC_ERROR THEN
591       p_return_status := FND_API.G_RET_STS_ERROR;
592       OE_MSG_PUB.Count_And_Get
593             ( p_count => l_msg_count,
594               p_data  => l_msg_data
595             );
596 
597     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
598       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
599       OE_MSG_PUB.Count_And_Get
600             ( p_count => l_msg_count,
601               p_data  => l_msg_data
602             );
603 
604     WHEN OTHERS THEN
605       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
606       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
607       THEN
608         FND_MSG_PUB.Add_Exc_Msg
609             (   G_PKG_NAME
610             ,   'Apply_Credit_Check_Hold'
611             );
612       END IF;
613 
614       OE_MSG_PUB.Count_And_Get
615             ( p_count => l_msg_count,
616               p_data  => l_msg_data
617             );
618 
619 END Apply_Credit_Check_Hold;
620 
621 PROCEDURE  Credit_Check_line_level
622                     ( p_header_id      	IN 	NUMBER
623                     , p_calling_action  IN   	VARCHAR2
624                     , p_delayed_request IN      VARCHAR2
625                     , p_msg_count       OUT NOCOPY /* file.sql.39 change */	NUMBER
626                     , p_msg_data        OUT NOCOPY /* file.sql.39 change */	VARCHAR2
627                     , p_result_out      OUT NOCOPY /* file.sql.39 change */	VARCHAR2
628                     , p_return_status 	OUT NOCOPY /* file.sql.39 change */ 	VARCHAR2
629                     )
630 IS
631 
632 l_calling_action    VARCHAR2(30) := p_calling_action;
633 l_epayment          VARCHAR2(1);
634 l_header_rec        OE_Order_PUB.Header_Rec_Type;
635 l_msg_count         NUMBER        := 0 ;
636 l_msg_data          VARCHAR2(2000):= NULL ;
637 l_result_out        VARCHAR2(30)   := NULL ;
638 l_return_status     VARCHAR2(30)   := NULL ;
639 
640 CURSOR C_credit_check_lines IS
641  SELECT invoice_to_org_id
642    FROM oe_order_lines
643   where header_id = l_header_rec.header_id
644    group by invoice_to_org_id;
645 
646 --
647 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
648 --
649 BEGIN
650 
651     IF l_debug_level  > 0 THEN
652         oe_debug_pub.add(  'ENTERING OE_VERIFY_PAYMENT_PUB.CREDIT_CHECK_LINE_LEVEL.' , 1 ) ;
653     END IF;
654 
655     -- Query the Order Header
656     IF l_debug_level  > 0 THEN
657         oe_debug_pub.add(  'OEXPVPMB: BEFORE QUERYING HEADER ID : '||P_HEADER_ID ) ;
658     END IF;
659     --
660     OE_Header_UTIL.Query_Row
661 	(p_header_id		=> p_header_id
662 	,x_header_rec		=> l_header_rec
663 	);
664 
665     FOR C1 in C_credit_check_lines LOOP
666                IF l_debug_level  > 0 THEN
667                    oe_debug_pub.add(  'OEXPVPMB LINE LEVEL: HEADERID/INVOICETOORGID:' || L_HEADER_REC.HEADER_ID || '/' || C1.INVOICE_TO_ORG_ID , 1 ) ;
668                END IF;
669 
670       OE_Credit_PUB.Check_Available_Credit_Line
671                     ( p_header_id          => l_header_rec.header_id
672                     , p_invoice_to_org_id  => C1.invoice_to_org_id
673                     , p_calling_action     => l_calling_action
674                     , p_msg_count          => l_msg_count
675                     , p_msg_data           => l_msg_data
676                     , p_result_out         => l_result_out
677                     , p_return_status      => l_return_status
678                     );
679 
680                            IF l_debug_level  > 0 THEN
681                                oe_debug_pub.add(  'OEXPVPMB: AFTER CALLING CREDIT REQUEST API:' || L_RESULT_OUT ) ;
682                            END IF;
683 
684     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
685          RAISE FND_API.G_EXC_ERROR;
686     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
687       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
688     END IF;
689 
690     -- Release Any existing CC Holds
691                           IF l_debug_level  > 0 THEN
692                               oe_debug_pub.add(  'OEXPVPMB LINE LEVEL: RELEASING CREDIT CARD ' || 'HOLDS-AFTER CREDITCHECKING' ) ;
693                           END IF;
694     --
695     OE_Verify_Payment_PUB.Release_Verify_Hold
696                   ( p_header_id     => l_header_rec.header_id
697                   , p_epayment_hold => 'Y' -- We want to Release Credit Card Hol
698                   , p_msg_count     => l_msg_count
699                   , p_msg_data      => l_msg_data
700                   , p_return_status => l_return_status
701                   );
702     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
703       RAISE FND_API.G_EXC_ERROR;
704     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
705       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
706     END IF;
707 
708     -- Check the Out Result of Credit Checking
709     IF l_result_out = 'PASS' THEN
710 
711          -- Release Any existing Credit Checking Holds
712       IF l_debug_level  > 0 THEN
713           oe_debug_pub.add(  'OEXPVPMB LINE LEVEL: RELEASING CREDIT CHECKING HOLDS' ) ;
714       END IF;
715          --
716          OE_Verify_Payment_PUB.Release_Credit_Check_Hold
717                                 ( p_header_id     => l_header_rec.header_id
718                                  , p_invoice_to_org_id  => C1.invoice_to_org_id
719                                  , p_msg_count     => l_msg_count
720                                  , p_msg_data      => l_msg_data
721                                  , p_return_status => l_return_status
722                                  );
723       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
724            RAISE FND_API.G_EXC_ERROR;
725       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
726         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
727       END IF;
728 
729    ELSE -- Failed
730 
731             -- Apply Credit Checking Failure Hold on the Order
732         IF l_debug_level  > 0 THEN
733             oe_debug_pub.add(  'OEXPVPMB LINE LEVEL: APPLYING CREDIT CHECKING FAILURE HOLD' ) ;
734         END IF;
735           --
736         OE_Verify_Payment_PUB.Apply_Credit_Check_Hold
737                       ( p_header_id     => l_header_rec.header_id
738                       , p_invoice_to_org_id  => C1.invoice_to_org_id -- XX
739                       , p_hold_id       => 1
740                       , p_calling_action  => l_calling_action
741                       , p_delayed_request => p_delayed_request
742                       , p_msg_count     => l_msg_count
743                       , p_msg_data      => l_msg_data
744                       , p_return_status => l_return_status
745                       );
746          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
747                 RAISE FND_API.G_EXC_ERROR;
748          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
749              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
750          END IF;
751 
752    END IF; -- IF Result Out of Credit Checking
753   END LOOP;
754 
755     IF l_debug_level  > 0 THEN
756         oe_debug_pub.add(  'EXITING OE_VERIFY_PAYMENT_PUB.CREDIT_CHECK_LINE_LEVEL.' , 1 ) ;
757     END IF;
758 
759 EXCEPTION
760 
761     WHEN FND_API.G_EXC_ERROR THEN
762       p_return_status := FND_API.G_RET_STS_ERROR;
763       OE_MSG_PUB.Count_And_Get
764             ( p_count => l_msg_count,
765               p_data  => l_msg_data
766             );
767 
768     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
769       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
770       OE_MSG_PUB.Count_And_Get
771             ( p_count => l_msg_count,
772               p_data  => l_msg_data
773             );
774 
775     WHEN OTHERS THEN
776       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
777       IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
778       THEN
779         OE_MSG_PUB.Add_Exc_Msg
780             (   G_PKG_NAME
781             ,   'Credit_Check_Line_Level'
782             );
783       END IF;
784 
785       OE_MSG_PUB.Count_And_Get
786             ( p_count => l_msg_count,
787               p_data  => l_msg_data
788             );
789 
790 END Credit_Check_line_level;
791 
792 /*--------------------------------------------------------------------------
793 Called By Booking, Pre Ship or Purchase Release Processing.
794  Checks if Electronic Payment is associated to the Order.
795  IF Yes THEN
796    Calls OE_Verify_Payment_PUB.Payment_Request Authorization
797  ELSE
798    Calls OE_Credit_PUB.OE_Check_Available_Credit for Credit Limit Checking
799 
800   1961228 - Multi currency credit checking changes
801             As part of the code swict design logic, the verify_payment
802             will call the new Multi currency Credit checking Engine API's
803             for credit checking.
804             The switch will be governed by a hidded profile that will
805             be seeded as MULTI with the patch
806             The existing OM profile to check for line level
807             ( calculating Exposure onlide from transaction tables )
808              will still be
809             checked to avoid any change of behavior for customers
810             already using the feature
811 ----------------------------------------------------------------------------*/
812 PROCEDURE Verify_Payment
813 (  p_header_id       IN   NUMBER
814 ,  p_calling_action  IN   VARCHAR2
815 ,  p_delayed_request IN   VARCHAR2
816 --R12 CVV2
817 --comm rej,  p_reject_on_auth_failure IN VARCHAR2 DEFAULT NULL
818 --comm rej,  p_reject_on_risk_failure IN VARCHAR2 DEFAULT NULL
819 ,  p_risk_eval_flag  IN VARCHAR2 DEFAULT  NULL --'Y'
820 --R12 CVV2
821 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
822 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
823 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
824 )
825 IS
826 l_calling_action    VARCHAR2(30) := p_calling_action;
827 l_rule_defined      VARCHAR2(1);
828 l_epayment          VARCHAR2(1);
829 l_header_rec        OE_Order_PUB.Header_Rec_Type;
830 l_msg_count         NUMBER        := 0 ;
831 l_msg_data          VARCHAR2(2000):= NULL ;
832 l_result_out        VARCHAR2(30)   := NULL ;
833 l_return_status     VARCHAR2(30)   := NULL ;
834 l_prepayment	    VARCHAR2(1);
835 l_payment_server_order_num	VARCHAR2(80);
836 l_approval_code			VARCHAR2(80);
837 
838 --
839 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
840 --
841 BEGIN
842 
843   p_return_status := FND_API.G_RET_STS_SUCCESS;
844 
845   IF l_debug_level  > 0 THEN
846       oe_debug_pub.add(  'OEXPVPMB: IN VERIFY PAYMENT MAIN' , 1 ) ;
847   END IF;
848   G_credit_check_rule_id := NULL ;
849 
850   OE_Verify_Payment_PUB.G_init_calling_action := p_calling_action;   --ER#7479609
851 
852   -- Query the Order Header
853   IF l_debug_level  > 0 THEN
854       oe_debug_pub.add(  'OEXPVPMB: BEFORE QUERYING HEADER ID : '||P_HEADER_ID , 1 ) ;
855   END IF;
856   IF l_debug_level  > 0 THEN
857       oe_debug_pub.add(  'OEXPVPMB: P_CALLING_ACTION => '|| P_CALLING_ACTION , 1 ) ;
858   END IF;
859   IF l_debug_level  > 0 THEN
860       oe_debug_pub.add(  'OEXPVPMB: L_CALLING_ACTION => '|| L_CALLING_ACTION , 1 ) ;
861   END IF;
862   IF l_debug_level  > 0 THEN
863       oe_debug_pub.add(  'OEXPVPMB: P_DELAYED_REQUEST => '|| P_DELAYED_REQUEST , 1 ) ;
864   END IF;
865   --
866   OE_Header_UTIL.Query_Row
867 	(p_header_id		=> p_header_id
868 	,x_header_rec		=> l_header_rec
869 	);
870 
871   -- Verify Payment is N/A for RMAs, return if Order Category is 'RETURN'
872   --
873           IF l_debug_level  > 0 THEN
874               oe_debug_pub.add(  'AFTER QUERY ORDER CATEGORY => '|| L_HEADER_REC.ORDER_CATEGORY_CODE ) ;
875           END IF;
876           IF l_debug_level  > 0 THEN
877               oe_debug_pub.add(  'AFTER QUERY BOOKED FLAG => '|| L_HEADER_REC.BOOKED_FLAG ) ;
878           END IF;
879 
880   IF l_header_rec.order_category_code = 'RETURN' THEN
881     RETURN;
882   END IF;
883 
884   -- Check if Verify Payment Call was made from Delayed Request
885   -- Because if call was made from a delayed request, we need to
886   -- VOID the Current Credit Card Authorization if any exists.
887   IF l_debug_level  > 0 THEN
888       oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING CALL FROM DELAYED REQUEST OR NOT' ) ;
889   END IF;
890   --
891   IF NVL(p_delayed_request, FND_API.G_FALSE) = FND_API.G_TRUE THEN
892 
893     /*
894     ** Fix for 1967295:
895     ** As VOID has been de-supported by iPayment, commenting
896     ** following code which was used to VOID existing Trxns.
897     **
898     -- VOID only if the Approval Date exist
899     OE_DEBUG_PUB.ADD('OEXPVPMB: Before checking if APPROVAL DATE is NOT NULL');
900     --
901     **
902     ** Commented as this will not be true if the approval code
903     **  itself is being updated to NULL
904     IF l_header_rec.credit_card_approval_code is NOT NULL THEN
905     **
906 
907     -- Check approval date(instead of approval code) to find out
908     -- if we should really proceed with VOID. This  is a must as
909     -- without this IF condition every time a delayed request is
910     -- logged application will  try to void  irrespective of the
911     -- fact that it is really required.Approval date will be not
912     -- null even if approval code has been updated to null.
913     IF l_header_rec.credit_card_approval_date is NOT NULL THEN
914 
915       -- Call the Payment Request API
916       OE_DEBUG_PUB.ADD('OEXPVPMB: Before Calling Payment Request API For VOIDAUTHONLY');
917       --
918       OE_Verify_Payment_PUB.Payment_Request
919                                 ( p_header_rec     => l_header_rec
920                                 , p_trxn_type      => 'VOIDAUTHONLY'
921                                 , p_msg_count      => l_msg_count
922                                 , p_msg_data       => l_msg_data
923                                 , p_result_out     => l_result_out
924                                 , p_return_status  => l_return_status
925                                 );
926       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
927 	   RAISE FND_API.G_EXC_ERROR;
928       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
929         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
930       END IF;
931 
932       -- Requery Order Header just in case it was updated during VOID.
933       OE_DEBUG_PUB.ADD('OEXPVPMB: Requerying Order Header After Void : ');
934       --
935       OE_Header_UTIL.Query_Row
936 	(p_header_id		=> p_header_id
937 	,x_header_rec		=> l_header_rec
938 	);
939 
940     END IF;
941     */
942 
943     -- If the Order is UnBooked then return
944     IF l_debug_level  > 0 THEN
945         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING IF THE ORDER IS UNBOOKED' ) ;
946     END IF;
947     --
948     IF l_header_rec.booked_flag = 'N' THEN
949       RETURN;
950 
951     ELSE
952 	 -- Call Which_Rule function to find out Which Rule to Apply
953       IF l_debug_level  > 0 THEN
954           oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING WHICH RULE ' ) ;
955       END IF;
956       --
957 
958        -- Commenting code as the credit check rule will be BOOKING
959        -- for order updates as well 2412678
960        -- New fix: code was uncommented as part of Bug # 3292283.
961 
962        l_calling_action := OE_Verify_Payment_PUB.Which_Rule(p_header_id => p_header_id);
963 
964     END IF;
965 
966   END IF;
967             IF l_debug_level  > 0 THEN
968                 oe_debug_pub.add(  'L_CALLING_ACTION => '|| L_CALLING_ACTION ) ;
969             END IF;
970 
971 
972     -- Begin of the change for Prepayment.
973     -- determine whether or not this is a prepaid order
974     l_prepayment := OE_PrePayment_UTIL.is_prepaid_order(l_header_rec);
975 
976     IF l_debug_level  > 0 THEN
977         oe_debug_pub.add(  'OEXPVPMB: THE PREPAYMENT_FLAG FOR THIS ORDER IS: '||L_PREPAYMENT , 3 ) ;
978     END IF;
979     IF l_debug_level  > 0 THEN
980         oe_debug_pub.add(  'OEXPVPMB: THE CALLING_ACTION FOR THIS ORDER IS: '||L_CALLING_ACTION , 3 ) ;
981     END IF;
982 
983     IF l_prepayment = 'Y' AND l_header_rec.booked_flag = 'Y'
984        AND NOT OE_PREPAYMENT_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
985 
986       -- do not need to process prepayment during or after shipping.
987       IF l_calling_action IN ( 'SHIPPING', 'PACKING' , 'PICKING' )
988       THEN
989          RETURN;
990       END IF;
991 
992        -- if this is a full prepaid order.
993        OE_PrePayment_PVT.Process_PrePayment_Order
994                ( p_header_rec           => l_header_rec
995                 , p_calling_action      => p_calling_action
996                 , p_delayed_request	=> p_delayed_request
997                 , x_msg_count           => l_msg_count
998                 , x_msg_data            => l_msg_data
999                 , x_return_status       => l_return_status
1000                 );
1001 
1002         p_return_status := l_return_status;
1003         IF l_debug_level  > 0 THEN
1004             oe_debug_pub.add(  'OEXPVPMB: OUT OF OE_PREPAYMENT_PVT' , 1 ) ;
1005         END IF;
1006         IF l_debug_level  > 0 THEN
1007             oe_debug_pub.add(  'X_RETURN_STATUS = ' || L_RETURN_STATUS , 1 ) ;
1008         END IF;
1009 
1010         -- control returned from Verify_payment for Prepayment to
1011         -- avoid continuation of code through the existing code flow
1012         IF l_debug_level  > 0 THEN
1013             oe_debug_pub.add(  ' RETURN FROM VERIFY_PAYMENT FOR PREPAYMENT' , 1 ) ;
1014         END IF;
1015 
1016         RETURN ;
1017 
1018      END IF;
1019      -- end of the change for Prepayment.
1020 
1021 
1022   -- Check if Calling action is being passed as Null.
1023   -- This will be the case only if Credit Card Auth
1024   -- has been Invoked On-Line. And if that's the case
1025   -- We don't need to check for any rules.
1026   IF l_calling_action IS NOT NULL
1027     AND l_header_rec.booked_flag = 'Y' THEN
1028 
1029     IF l_debug_level  > 0 THEN
1030         oe_debug_pub.add(  'OEXPVPMB: RULE TO BE USED IS : '|| L_CALLING_ACTION ) ;
1031     END IF;
1032 
1033     -- Check the Rule to Apply
1034     IF l_debug_level  > 0 THEN
1035         oe_debug_pub.add(  'G_CREDIT_CHECK_RULE_ID => '|| G_CREDIT_CHECK_RULE_ID ) ;
1036     END IF;
1037     G_credit_check_rule_id := NULL ;
1038 
1039     -- check rule defined here is multiple payment is not enabled, if
1040     -- enabled, the check has been moved to OE_Prepayment_PVT.Process_Payments.
1041     IF NOT OE_PREPAYMENT_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
1042       IF l_debug_level  > 0 THEN
1043         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING IF THE RULE IS DEFINED OR NOT' ) ;
1044       END IF;
1045       l_rule_defined := OE_Verify_Payment_PUB.Check_Rule_Defined
1046 				( p_header_rec     => l_header_rec
1047 				, p_calling_action => l_calling_action
1048 				) ;
1049 
1050       IF l_debug_level  > 0 THEN
1051         oe_debug_pub.add('OEXPVPMB: OUT OF RULE DEFINED : '|| L_RULE_DEFINED);
1052         oe_debug_pub.add('G_CREDIT_CHECK_RULE_ID => ' || G_CREDIT_CHECK_RULE_ID);
1053       END IF;
1054 
1055       -- If NO Rule defined for the calling action then return
1056       -- Modified the condition so that only return when multiple
1057       -- payments is not enabled. If multiple payments is enabled,
1058       -- we don't check the rule for prepayments. This logic has been
1059       -- moved to OE_Prepayment_PVT.
1060       IF l_rule_defined = 'N' THEN
1061          RETURN;
1062       END IF;
1063     END IF;
1064 
1065   ELSE
1066 
1067     -- Fix for 1967295:
1068     -- Control will come into this ELSE condition when call is being
1069     -- made from "Authorize Payment" action. Setting CC Approval Code
1070     -- to NULL so that the Order is always re-authorized.
1071     l_header_rec.credit_card_approval_code := NULL;
1072 
1073   END IF;
1074 
1075 
1076   -- Check for Electronic Payment
1077   IF l_debug_level  > 0 THEN
1078       oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING FOR ELECTRONIC PAYMENT' , 1 ) ;
1079   END IF;
1080   --
1081   l_epayment := OE_Verify_Payment_PUB.Is_Electronic_Payment( l_header_rec ) ;
1082 
1083   IF l_debug_level  > 0 THEN
1084       oe_debug_pub.add(  'OEXPVPMB: IS IT AN ELECTRONIC PAYMENT : '|| L_EPAYMENT ) ;
1085   END IF;
1086 
1087 
1088 IF OE_PREPAYMENT_UTIL.IS_MULTIPLE_PAYMENTS_ENABLED THEN
1089   -- new code for Pack J, if multiple payments is enabled
1090   -- Credit card authorization and prepayment collection
1091   -- are all coded in OE_PREPAYMENT_PVT.Process_Payments
1092   -- from Pack J if multiple payments is enabled.
1093 
1094        IF l_debug_level  > 0 THEN
1095          oe_debug_pub.add(  'start processing multiple payments.',3 ) ;
1096        END IF;
1097 
1098        OE_PREPAYMENT_PVT.Process_Payments(
1099              	       p_header_id 	=> l_header_rec.header_id,
1100                        p_calling_action => l_calling_action,
1101                        p_amount         => null,
1102                        p_delayed_request=> p_delayed_request,
1103                       --comm rej p_reject_on_auth_failure => p_reject_on_auth_failure,
1104                       --comm rej p_reject_on_risk_failure => p_reject_on_risk_failure,
1105                        p_risk_eval_flag => p_risk_eval_flag,
1106                        x_msg_data	=> l_msg_data,
1107                        x_msg_count	=> l_msg_count,
1108                        x_return_status	=> l_return_status);
1109 
1110        OE_MSG_PUB.Count_And_Get( p_count => p_msg_count
1111                                 ,p_data  => p_msg_data
1112                                );
1113 
1114        IF l_debug_level  > 0 THEN
1115          oe_debug_pub.add(  'OEXPVPMB: after calling Process_Payments, returns tatus is: '||l_return_status, 3 ) ;
1116        END IF;
1117 
1118        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1119          RAISE FND_API.G_EXC_ERROR;
1120        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1121          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1122        END IF;
1123 
1124        RETURN;
1125        -- end of multiple payments processing.
1126 
1127        -- comment out the following code, as credit checking
1128        -- is now called from OE_Prepayment_PVT.process_payments
1129        -- if multiple payments is enabled.
1130        /*
1131        -- Check rule defined before going to credit checking engine.
1132        l_rule_defined := OE_Verify_Payment_PUB.Check_Rule_Defined
1133 				( p_header_rec     => l_header_rec
1134 				, p_calling_action => l_calling_action
1135 				) ;
1136 
1137       IF l_debug_level  > 0 THEN
1138          oe_debug_pub.add(  'OEXVPPYB: RULE DEFINED FOR AUTHORIZATION: '|| L_RULE_DEFINED ) ;
1139       END IF;
1140 
1141       IF l_rule_defined = 'N' THEN
1142          return;
1143       END IF;
1144 
1145 
1146     ------------- Begin Multi currency credit checking changes ----
1147     ----------------------------------------------------------------
1148     -- The credit checking code
1149      -- ( NON- Electronic, NON iPayment )
1150     -- code is now maintained, developed, enhanced
1151     --  and Bug fixed in the new MUlti currency API's.
1152     -- including customers prior to OM patch set G will
1153     -- get the new  API's
1154 
1155     --  For clarifications, please contact
1156     --  Global Manufacturing
1157     ----------------------------------------------------------------
1158 
1159     -- BUG 2298782 .
1160     -- Remove check for OE_CREDIT_CHECK_API_FLOW
1161 
1162     BEGIN
1163       IF l_debug_level  > 0 THEN
1164           oe_debug_pub.add(  'OEXPVPMB: NON ELECTRONIC PAYMENT ' ) ;
1165       END IF;
1166       IF l_debug_level  > 0 THEN
1167           oe_debug_pub.add(  'OEXPVPMB: BEGIN CHECK FOR MCC CODE SWITCH ' , 1 ) ;
1168       END IF;
1169       IF l_debug_level  > 0 THEN
1170           oe_debug_pub.add(  'NO CHECK FOR OE_CREDIT_CHECK_API_FLOW ' , 1 ) ;
1171       END IF;
1172 
1173       IF l_debug_level  > 0 THEN
1174           oe_debug_pub.add(  'P_CALLING_ACTION = '|| P_CALLING_ACTION , 1 ) ;
1175       END IF;
1176       IF l_debug_level  > 0 THEN
1177           oe_debug_pub.add(  'L_CALLING_ACTION = '|| L_CALLING_ACTION , 1 ) ;
1178       END IF;
1179       IF l_debug_level  > 0 THEN
1180           oe_debug_pub.add(  'P_DELAYED_REQUEST = '|| P_DELAYED_REQUEST , 1 ) ;
1181       END IF;
1182       IF l_debug_level  > 0 THEN
1183           oe_debug_pub.add(  'P_HEADER_ID = '|| P_HEADER_ID , 1 ) ;
1184       END IF;
1185 
1186 
1187       -- lkxu 10/22/02: commented out the check for profile option,
1188       -- as this profile option is not being used any more.
1189       -- IF NVL(Fnd_Profile.Value('OE_CREDIT_CHECKING_LEVEL'),'ORDER')
1190       --    = 'ORDER' THEN
1191         BEGIN
1192           IF l_debug_level  > 0 THEN
1193               oe_debug_pub.add(  'OEXPVPMB:INTO MULTI CREDIT CHECKING FLOW ' , 1 ) ;
1194           END IF;
1195           IF l_debug_level  > 0 THEN
1196               oe_debug_pub.add(  'L_CALLING_ACTION = '|| L_CALLING_ACTION , 1 ) ;
1197           END IF;
1198           IF l_debug_level  > 0 THEN
1199               oe_debug_pub.add(  'P_HEADER_ID => '|| P_HEADER_ID ) ;
1200           END IF;
1201                         IF l_debug_level  > 0 THEN
1202                             oe_debug_pub.add(  'P_DELAYED_REQUEST => '|| P_DELAYED_REQUEST ) ;
1203                         END IF;
1204                     IF l_debug_level  > 0 THEN
1205                         oe_debug_pub.add(  'G_CREDIT_CHECK_RULE_ID => ' || G_CREDIT_CHECK_RULE_ID ) ;
1206                     END IF;
1207           IF l_debug_level  > 0 THEN
1208               oe_debug_pub.add(  'OEXPVPMB: CALL OE_CREDIT_ENGINE_GRP' , 1 ) ;
1209           END IF;
1210 
1211           OE_Credit_Engine_GRP.Credit_check_with_payment_typ
1212            (  p_header_id            => p_header_id
1213            ,  p_calling_action       => l_calling_action
1214            ,  p_delayed_request      => p_delayed_request
1215            ,  p_credit_check_rule_id => G_credit_check_rule_id
1216            ,  x_msg_count            => p_msg_count
1217            ,  x_msg_data             => p_msg_data
1218            ,  x_return_status        => p_return_status
1219            );
1220 
1221           IF l_debug_level  > 0 THEN
1222               oe_debug_pub.add(  'OEXPVPMB: OUT OF OE_CREDIT_ENGINE_GRP' , 1 ) ;
1223           END IF;
1224           IF l_debug_level  > 0 THEN
1225               oe_debug_pub.add(  'X_RETURN_STATUS = ' || P_RETURN_STATUS , 1 ) ;
1226           END IF;
1227 
1228           -- Control returned out of Verify_payment to avoid
1229           -- continuation of code through the existing code flow
1230           G_credit_check_rule_id := NULL ;
1231           IF l_debug_level  > 0 THEN
1232               oe_debug_pub.add(  'OEXPVPMB: RETURN FROM VERIFY_PAYMENT ' , 1 ) ;
1233           END IF;
1234           RETURN ;
1235         END ;
1236 
1237         IF l_debug_level  > 0 THEN
1238             oe_debug_pub.add(  'OEXPVPMB: EXCEPTION - CONTROL NOT RETURNED OUT ' , 1 ) ;
1239         END IF;
1240 
1241     --  END IF; -- End MCC profile IF
1242     END ; -- End MCC Block
1243     */
1244 
1245     --------------------------------------------------------------------
1246     ----------------- End Multi currency credit checking code changes --
1247     ---------------------------------------------------------------------
1248 
1249     IF l_debug_level  > 0 THEN
1250         oe_debug_pub.add(  'OEXPVPMB: IN SINGLE CREDIT CHECKING' , 1 ) ;
1251     END IF;
1252     -- The following Check_Available_Credit is replaced by MULTI
1253     -- must not be supported
1254 
1255     -- Call the Credit Checking API
1256     IF l_debug_level  > 0 THEN
1257         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING CREDIT CHECKING API' ) ;
1258     END IF;
1259     --
1260 
1261     -- lkxu, call different code according to the profile option.
1262     -- No need to check this profile option as it is not being used any more.
1263     -- IF Nvl(Fnd_Profile.Value('OE_CREDIT_CHECKING_LEVEL'),'ORDER') = 'ORDER' THEN
1264     -- calling order level credit checking.
1265 
1266     OE_Credit_PUB.Check_Available_Credit
1267                     ( p_header_id      => l_header_rec.header_id
1268                     , p_calling_action => l_calling_action
1269                     , p_msg_count      => l_msg_count
1270                     , p_msg_data       => l_msg_data
1271                     , p_result_out     => l_result_out
1272                     , p_return_status  => l_return_status
1273                     );
1274 
1275 
1276     IF l_debug_level  > 0 THEN
1277         oe_debug_pub.add(  'OEXPVPMB: AFTER CALLING CREDIT REQUEST API' ) ;
1278     END IF;
1279 
1280     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1281 	 RAISE FND_API.G_EXC_ERROR;
1282     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1283       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1284     END IF;
1285     -- Check the Out Result of Credit Checking
1286     IF l_result_out = 'PASS' THEN
1287 
1288 	 -- Release Any existing Credit Checking Holds
1289       IF l_debug_level  > 0 THEN
1290           oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CHECKING HOLDS' ) ;
1291       END IF;
1292 	 --
1293 	 OE_Verify_Payment_PUB.Release_Verify_Hold
1294                                 ( p_header_id     => l_header_rec.header_id
1295                                  , p_epayment_hold => 'N' -- We want to Release Credit Checking Hold
1296                                  , p_msg_count     => l_msg_count
1297                                  , p_msg_data      => l_msg_data
1298                                  , p_return_status => l_return_status
1299                                  );
1300       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1301 	   RAISE FND_API.G_EXC_ERROR;
1302       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1303         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1304       END IF;
1305 
1306     ELSE -- Failed
1307       IF CHECK_MANUAL_RELEASED_HOLDS (
1308                    p_calling_action    => l_calling_action,
1309                    p_hold_id           => 1,
1310                    p_header_id         => l_header_rec.header_id
1311                                      ) = 'N' then
1312 	    -- Apply Credit Checking Failure Hold on the Order
1313          IF l_debug_level  > 0 THEN
1314              oe_debug_pub.add(  'OEXPVPMB: APPLYING CREDIT CHECKING FAILURE HOLD' ) ;
1315          END IF;
1316           --
1317 	    OE_Verify_Payment_PUB.Apply_Verify_Hold
1318                             ( p_header_id     => l_header_rec.header_id
1319                             , p_hold_id       => 1
1320                             , p_msg_count     => l_msg_count
1321                             , p_msg_data      => l_msg_data
1322                             , p_return_status => l_return_status
1323                              );
1324          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1325 	        RAISE FND_API.G_EXC_ERROR;
1326          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1327              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1328          ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
1329               fnd_message.set_name('ONT', 'OE_CC_HOLD_APPLIED');
1330      	    oe_msg_pub.add;
1331          END IF;
1332       END IF; -- CHECK_MANUAL_RELEASED_HOLDS
1333 
1334     END IF; -- IF Result Out of Credit Checking
1335 
1336      --  ELSE
1337      -- lkxu, perform line leve credit checking according the profile option.
1338      -- 10/22/02: this part of code is not needed as MCC has this line level credit
1339      -- checking.
1340      /***
1341       Credit_Check_line_level
1342                     ( p_header_id      => l_header_rec.header_id
1343                     , p_calling_action => l_calling_action
1344                     , p_delayed_request=> p_delayed_request
1345                     , p_msg_count      => l_msg_count
1346                     , p_msg_data       => l_msg_data
1347                     , p_result_out     => l_result_out
1348                     , p_return_status  => l_return_status
1349                     );
1350 
1351 
1352     END IF;   -- IF level of credit checking is ORDER
1353     ***/
1354 ELSE
1355   -- retain the original code before Pack J if multiple payments
1356   -- is not enabled.
1357   IF l_debug_level  > 0 THEN
1358       oe_debug_pub.add(  'start processing verify payment without multiple payments.',3 ) ;
1359   END IF;
1360 
1361   IF l_epayment = 'Y' THEN
1362 
1363     IF l_debug_level  > 0 THEN
1364         oe_debug_pub.add(  'OEXPVPMB: IN ELECTRONIC PAYMENT' ) ;
1365     END IF;
1366 
1367     -- Call the Electronic Payment Request API
1368     IF l_debug_level  > 0 THEN
1369         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING PAYMENT REQUEST API FOR AUTHONLY' ) ;
1370     END IF;
1371     --
1372     OE_Verify_Payment_PUB.Payment_Request
1373                                 ( p_header_rec    => l_header_rec
1374                                 , p_trxn_type     => 'AUTHONLY'
1375                                 , p_msg_count     => l_msg_count
1376                                 , p_msg_data      => l_msg_data
1377                                 , p_result_out    => l_result_out
1378                                 , p_return_status => l_return_status
1379                                 );
1380 
1381     IF l_debug_level  > 0 THEN
1382         oe_debug_pub.add(  'OEXPVPMB: AFTER CALLING PAYMENT REQUEST API' ) ;
1383     END IF;
1384 
1385     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1386       RAISE FND_API.G_EXC_ERROR;
1387     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1388       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1389     END IF;
1390 
1391     -- If No Error Occurred in Payment Request, Release any existing
1392     -- Credit Checking Holds This will ensure that for Elctronic Payment
1393     -- only  Credit Card Holds, if any, remain applied.
1394     IF l_debug_level  > 0 THEN
1395         oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CHECKING HOLD' ) ;
1396     END IF;
1397     --
1398     OE_Verify_Payment_PUB.Release_Verify_Hold
1399                                ( p_header_id     => l_header_rec.header_id
1400                                , p_epayment_hold => 'N' -- We want to Release Credit Check Hold
1401                                , p_msg_count     => l_msg_count
1402                                , p_msg_data      => l_msg_data
1403                                , p_return_status => l_return_status
1404                                );
1405     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1406 	 RAISE FND_API.G_EXC_ERROR;
1407     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1408       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1409     END IF;
1410 
1411     -- Check the Out Result of Payment Request
1412     IF l_result_out = 'PASS' THEN
1413 
1414 	 -- Release Any existing CC Holds
1415       IF l_debug_level  > 0 THEN
1416           oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CARD HOLDS' ) ;
1417       END IF;
1418 	 --
1419 	 OE_Verify_Payment_PUB.Release_Verify_Hold
1420                                  ( p_header_id     => l_header_rec.header_id
1421                                  , p_epayment_hold => 'Y' -- We want to Release Credit Card Holds
1422                                  , p_msg_count     => l_msg_count
1423                                  , p_msg_data      => l_msg_data
1424                                  , p_return_status => l_return_status
1425                                  );
1426       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1427 	   RAISE FND_API.G_EXC_ERROR;
1428       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1429         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1430       END IF;
1431 
1432     ELSIF l_result_out = 'RISK' THEN
1433 
1434 	 -- Apply Risk Hold on the Order
1435       IF l_debug_level  > 0 THEN
1436           oe_debug_pub.add(  'OEXPVPMB: APPLYING CC RISK HOLD' ) ;
1437       END IF;
1438 	 --
1439 	 OE_Verify_Payment_PUB.Apply_Verify_Hold
1440                                  ( p_header_id     => l_header_rec.header_id
1441                                  , p_hold_id       => 12 -- Seed Id for CC Risk Hold
1442                                  , p_msg_count     => l_msg_count
1443                                  , p_msg_data      => l_msg_data
1444                                  , p_return_status => l_return_status
1445                                  );
1446       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1447 	   RAISE FND_API.G_EXC_ERROR;
1448       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1449         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1450       END IF;
1451 
1452     ELSE -- Failed
1453 
1454 	 -- Apply CC Auth Failure Hold on the Order
1455       IF l_debug_level  > 0 THEN
1456           oe_debug_pub.add(  'OEXPVPMB: APPLYING CC AUTH FAILURE HOLD' ) ;
1457       END IF;
1458 	 --
1459 	 OE_Verify_Payment_PUB.Apply_Verify_Hold
1460                                  ( p_header_id     => l_header_rec.header_id
1461                                  , p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
1462                                  , p_msg_count     => l_msg_count
1463                                  , p_msg_data      => l_msg_data
1464                                  , p_return_status => l_return_status
1465                                  );
1466       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1467 	   RAISE FND_API.G_EXC_ERROR;
1468       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1469         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1470       END IF;
1471 
1472     END IF; -- IF Result Out of Payment Request
1473 
1474   ELSE -- It's Not An Electronic Payment
1475 
1476     ------------- Begin Multi currency credit checking changes ----
1477     ----------------------------------------------------------------
1478     -- The credit checking code
1479      -- ( NON- Electronic, NON iPayment )
1480     -- code is now maintained, developed, enhanced
1481     --  and Bug fixed in the new MUlti currency API's.
1482     -- including customers prior to OM patch set G will
1483     -- get the new  API's
1484 
1485     --  For clarifications, please contact
1486     --  Global Manufacturing
1487     ----------------------------------------------------------------
1488 
1489     -- BUG 2298782 .
1490     -- Remove check for OE_CREDIT_CHECK_API_FLOW
1491 
1492     BEGIN
1493       IF l_debug_level  > 0 THEN
1494           oe_debug_pub.add(  'OEXPVPMB: NON ELECTRONIC PAYMENT ' ) ;
1495       END IF;
1496       IF l_debug_level  > 0 THEN
1497           oe_debug_pub.add(  'OEXPVPMB: BEGIN CHECK FOR MCC CODE SWITCH ' , 1 ) ;
1498       END IF;
1499       IF l_debug_level  > 0 THEN
1500           oe_debug_pub.add(  'NO CHECK FOR OE_CREDIT_CHECK_API_FLOW ' , 1 ) ;
1501       END IF;
1502 
1503       IF l_debug_level  > 0 THEN
1504           oe_debug_pub.add(  'P_CALLING_ACTION = '|| P_CALLING_ACTION , 1 ) ;
1505       END IF;
1506       IF l_debug_level  > 0 THEN
1507           oe_debug_pub.add(  'L_CALLING_ACTION = '|| L_CALLING_ACTION , 1 ) ;
1508       END IF;
1509       IF l_debug_level  > 0 THEN
1510           oe_debug_pub.add(  'P_DELAYED_REQUEST = '|| P_DELAYED_REQUEST , 1 ) ;
1511       END IF;
1512       IF l_debug_level  > 0 THEN
1513           oe_debug_pub.add(  'P_HEADER_ID = '|| P_HEADER_ID , 1 ) ;
1514       END IF;
1515 
1516 
1517       -- lkxu 10/22/02: commented out the check for profile option,
1518       -- as this profile option is not being used any more.
1519       -- IF NVL(Fnd_Profile.Value('OE_CREDIT_CHECKING_LEVEL'),'ORDER')
1520       --    = 'ORDER' THEN
1521         BEGIN
1522           IF l_debug_level  > 0 THEN
1523               oe_debug_pub.add(  'OEXPVPMB:INTO MULTI CREDIT CHECKING FLOW ' , 1 ) ;
1524           END IF;
1525           IF l_debug_level  > 0 THEN
1526               oe_debug_pub.add(  'L_CALLING_ACTION = '|| L_CALLING_ACTION , 1 ) ;
1527           END IF;
1528           IF l_debug_level  > 0 THEN
1529               oe_debug_pub.add(  'P_HEADER_ID => '|| P_HEADER_ID ) ;
1530           END IF;
1531                         IF l_debug_level  > 0 THEN
1532                             oe_debug_pub.add(  'P_DELAYED_REQUEST => '|| P_DELAYED_REQUEST ) ;
1533                         END IF;
1534                     IF l_debug_level  > 0 THEN
1535                         oe_debug_pub.add(  'G_CREDIT_CHECK_RULE_ID => ' || G_CREDIT_CHECK_RULE_ID ) ;
1536                     END IF;
1537           IF l_debug_level  > 0 THEN
1538               oe_debug_pub.add(  'OEXPVPMB: CALL OE_CREDIT_ENGINE_GRP' , 1 ) ;
1539           END IF;
1540 
1541           OE_Credit_Engine_GRP.Credit_check_with_payment_typ
1542            (  p_header_id            => p_header_id
1543            ,  p_calling_action       => l_calling_action
1544            ,  p_delayed_request      => p_delayed_request
1545            ,  p_credit_check_rule_id => G_credit_check_rule_id
1546            ,  x_msg_count            => p_msg_count
1547            ,  x_msg_data             => p_msg_data
1548            ,  x_return_status        => p_return_status
1549            );
1550 
1551           IF l_debug_level  > 0 THEN
1552               oe_debug_pub.add(  'OEXPVPMB: OUT OF OE_CREDIT_ENGINE_GRP' , 1 ) ;
1553           END IF;
1554           IF l_debug_level  > 0 THEN
1555               oe_debug_pub.add(  'X_RETURN_STATUS = ' || P_RETURN_STATUS , 1 ) ;
1556           END IF;
1557 
1558           -- Control returned out of Verify_payment to avoid
1559           -- continuation of code through the existing code flow
1560           G_credit_check_rule_id := NULL ;
1561           IF l_debug_level  > 0 THEN
1562               oe_debug_pub.add(  'OEXPVPMB: RETURN FROM VERIFY_PAYMENT ' , 1 ) ;
1563           END IF;
1564           RETURN ;
1565         END ;
1566 
1567         IF l_debug_level  > 0 THEN
1568             oe_debug_pub.add(  'OEXPVPMB: EXCEPTION - CONTROL NOT RETURNED OUT ' , 1 ) ;
1569         END IF;
1570 
1571     --  END IF; -- End MCC profile IF
1572     END ; -- End MCC Block
1573 
1574     --------------------------------------------------------------------
1575     ----------------- End Multi currency credit checking code changes --
1576     ---------------------------------------------------------------------
1577 
1578     IF l_debug_level  > 0 THEN
1579         oe_debug_pub.add(  'OEXPVPMB: IN SINGLE CREDIT CHECKING' , 1 ) ;
1580     END IF;
1581     -- The following Check_Available_Credit is replaced by MULTI
1582     -- must not be supported
1583 
1584     -- Call the Credit Checking API
1585     IF l_debug_level  > 0 THEN
1586         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING CREDIT CHECKING API' ) ;
1587     END IF;
1588     --
1589 
1590     -- lkxu, call different code according to the profile option.
1591     -- No need to check this profile option as it is not being used any more.
1592     -- IF Nvl(Fnd_Profile.Value('OE_CREDIT_CHECKING_LEVEL'),'ORDER') = 'ORDER' THEN
1593     -- calling order level credit checking.
1594 
1595     OE_Credit_PUB.Check_Available_Credit
1596                     ( p_header_id      => l_header_rec.header_id
1597                     , p_calling_action => l_calling_action
1598                     , p_msg_count      => l_msg_count
1599                     , p_msg_data       => l_msg_data
1600                     , p_result_out     => l_result_out
1601                     , p_return_status  => l_return_status
1602                     );
1603 
1604 
1605     IF l_debug_level  > 0 THEN
1606         oe_debug_pub.add(  'OEXPVPMB: AFTER CALLING CREDIT REQUEST API' ) ;
1607     END IF;
1608 
1609     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1610 	 RAISE FND_API.G_EXC_ERROR;
1611     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1612       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1613     END IF;
1614     -- Check the Out Result of Credit Checking
1615     IF l_result_out = 'PASS' THEN
1616 
1617 	 -- Release Any existing Credit Checking Holds
1618       IF l_debug_level  > 0 THEN
1619           oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CHECKING HOLDS' ) ;
1620       END IF;
1621 	 --
1622 	 OE_Verify_Payment_PUB.Release_Verify_Hold
1623                                 ( p_header_id     => l_header_rec.header_id
1624                                  , p_epayment_hold => 'N' -- We want to Release Credit Checking Hold
1625                                  , p_msg_count     => l_msg_count
1626                                  , p_msg_data      => l_msg_data
1627                                  , p_return_status => l_return_status
1628                                  );
1629       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1630 	   RAISE FND_API.G_EXC_ERROR;
1631       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1632         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1633       END IF;
1634 
1635     ELSE -- Failed
1636       IF CHECK_MANUAL_RELEASED_HOLDS (
1637                    p_calling_action    => l_calling_action,
1638                    p_hold_id           => 1,
1639                    p_header_id         => l_header_rec.header_id
1640                                      ) = 'N' then
1641 	    -- Apply Credit Checking Failure Hold on the Order
1642          IF l_debug_level  > 0 THEN
1643              oe_debug_pub.add(  'OEXPVPMB: APPLYING CREDIT CHECKING FAILURE HOLD' ) ;
1644          END IF;
1645           --
1646 	    OE_Verify_Payment_PUB.Apply_Verify_Hold
1647                             ( p_header_id     => l_header_rec.header_id
1648                             , p_hold_id       => 1
1649                             , p_msg_count     => l_msg_count
1650                             , p_msg_data      => l_msg_data
1651                             , p_return_status => l_return_status
1652                              );
1653          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1654 	        RAISE FND_API.G_EXC_ERROR;
1655          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1656              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1657          ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
1658               fnd_message.set_name('ONT', 'OE_CC_HOLD_APPLIED');
1659      	    oe_msg_pub.add;
1660          END IF;
1661       END IF; -- CHECK_MANUAL_RELEASED_HOLDS
1662 
1663     END IF; -- IF Result Out of Credit Checking
1664 
1665      --  ELSE
1666      -- lkxu, perform line leve credit checking according the profile option.
1667      -- 10/22/02: this part of code is not needed as MCC has this line level credit
1668      -- checking.
1669      /***
1670       Credit_Check_line_level
1671                     ( p_header_id      => l_header_rec.header_id
1672                     , p_calling_action => l_calling_action
1673                     , p_delayed_request=> p_delayed_request
1674                     , p_msg_count      => l_msg_count
1675                     , p_msg_data       => l_msg_data
1676                     , p_result_out     => l_result_out
1677                     , p_return_status  => l_return_status
1678                     );
1679 
1680 
1681     END IF;   -- IF level of credit checking is ORDER
1682     ***/
1683 
1684   END IF; -- IF Electronic Payment
1685 
1686 END IF; -- if multiple payments is enabled.
1687 
1688   OE_MSG_PUB.Count_And_Get( p_count => p_msg_count
1689                           , p_data  => p_msg_data
1690                           );
1691 
1692   EXCEPTION
1693 
1694     WHEN FND_API.G_EXC_ERROR THEN
1695       p_return_status := FND_API.G_RET_STS_ERROR;
1696       OE_MSG_PUB.Count_And_Get
1697             ( p_count => l_msg_count,
1698               p_data  => l_msg_data
1699             );
1700 
1701     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1702       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1703       OE_MSG_PUB.Count_And_Get
1704             ( p_count => l_msg_count,
1705               p_data  => l_msg_data
1706             );
1707 
1708     WHEN OTHERS THEN
1709       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1710       IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1711       THEN
1712         OE_MSG_PUB.Add_Exc_Msg
1713             (   G_PKG_NAME
1714             ,   'Verify_Payment'
1715             );
1716       END IF;
1717 
1718       OE_MSG_PUB.Count_And_Get
1719             ( p_count => l_msg_count,
1720               p_data  => l_msg_data
1721             );
1722 
1723 END Verify_Payment;
1724 
1725 /*----------------------------------------------------------------------
1726 Function to find out Rule to be applied for Verify Payment
1727 ----------------------------------------------------------------------*/
1728 FUNCTION Which_Rule
1729 (  p_header_id  IN  NUMBER )
1730 RETURN VARCHAR2
1731 IS
1732 l_calling_action  VARCHAR2(30) := 'BOOKING';
1733 l_ship_rule_count NUMBER := 0;
1734 --
1735 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1736 --
1737 BEGIN
1738 
1739   IF l_debug_level  > 0 THEN
1740       oe_debug_pub.add(  'OEXPVPMB: INSIDE WHICH RULE' ) ;
1741   END IF;
1742   -- Count lines in the order with "SHIP_LINE" activity completed.
1743   /* For bug 1459546, performance issue, query has been tuned */
1744 
1745   /*
1746   ** Fix Bug 1723338 - Performance Issue
1747   **
1748   ** Commented following query because it accesses WF tables giving
1749   ** poor performance. Added new query to use shipped_quantity > 0
1750   ** on lines to find if at least one line in the order has shipped.
1751 
1752   SELECT COUNT(*)
1753   INTO   l_ship_rule_count
1754   FROM   WF_ITEM_ACTIVITY_STATUSES WIAS,
1755 	    WF_PROCESS_ACTIVITIES WPA,
1756 	    OE_ORDER_LINES OOL,
1757 	    OE_ORDER_HEADERS OOH
1758   WHERE  WIAS.ITEM_TYPE            = 'OEOL'
1759   AND    WIAS.ACTIVITY_STATUS      = 'COMPLETE'
1760   AND    WIAS.PROCESS_ACTIVITY     = WPA.INSTANCE_ID
1761   AND    WPA.ACTIVITY_NAME         = 'SHIP_LINE'
1762   AND    WIAS.ITEM_KEY = TO_CHAR(OOL.LINE_ID)
1763   AND    OOL.HEADER_ID = OOH.HEADER_ID
1764   AND    OOH.HEADER_ID = p_header_id;
1765   */
1766 
1767   BEGIN
1768     SELECT 1 /* MOAC_SQL_CHANGE */
1769     INTO   l_ship_rule_count
1770     FROM   OE_ORDER_HEADERS_ALL OOH
1771     WHERE  OOH.HEADER_ID = p_header_id
1772     AND    EXISTS
1773           (SELECT 'Line Shipped'
1774            FROM   OE_ORDER_LINES OOL
1775            WHERE  OOL.HEADER_ID = OOH.HEADER_ID
1776            AND    NVL(OOL.SHIPPED_QUANTITY, 0) > 0);
1777 
1778     EXCEPTION
1779 	 WHEN NO_DATA_FOUND THEN
1780 	   NULL;
1781   END;
1782 
1783   -- Count lines in  the order  for which "PURCHASE RELEASE ELIGIBLE"
1784   -- activity is completed and have a payment type code = CREDIT_CARD.
1785   /* For bug 1459546, performance issue, query has been tuned */
1786 
1787   /*
1788   ** Fix Bug 1723338 - Performance Issue
1789   **
1790   ** Commented following query because it accesses WF tables giving
1791   ** poor performance. Added new query to use drop ship sources table
1792   ** to find if at least one line in the order has purchase released.
1793 
1794   SELECT COUNT(*) + l_ship_rule_count
1795   INTO   l_ship_rule_count
1796   FROM   WF_ITEM_ACTIVITY_STATUSES WIAS,
1797 	    WF_PROCESS_ACTIVITIES  WPA,
1798 	    OE_ORDER_LINES OOL,
1799 	    OE_ORDER_HEADERS OOH
1800   WHERE  WIAS.ITEM_TYPE           = 'OEOL'
1801   AND    WPA.ACTIVITY_NAME        = 'PURCHASE RELEASE ELIGIBLE'
1802   AND    WPA.INSTANCE_ID          = WIAS.PROCESS_ACTIVITY
1803   AND    WIAS.ACTIVITY_STATUS     = 'COMPLETE'
1804   AND    WIAS.ITEM_KEY            = TO_CHAR(OOL.LINE_ID)
1805   AND    OOH.PAYMENT_TYPE_CODE    = 'CREDIT_CARD'
1806   AND    OOL.HEADER_ID            = OOH.HEADER_ID
1807   AND    OOH.HEADER_ID            = p_header_id;
1808   */
1809 
1810   BEGIN
1811     SELECT 1 + l_ship_rule_count /* MOAC_SQL_CHANGE */
1812     INTO   l_ship_rule_count
1813     FROM   OE_ORDER_HEADERS_ALL OOH
1814     WHERE  OOH.PAYMENT_TYPE_CODE = 'CREDIT_CARD'
1815     AND    OOH.HEADER_ID         = p_header_id
1816     AND    EXISTS
1817           (SELECT 'Purchase Released'
1818            FROM   OE_ORDER_LINES  OOL, OE_DROP_SHIP_SOURCES ODSS
1819            WHERE  OOL.HEADER_ID  = OOH.HEADER_ID
1820            AND    ODSS.LINE_ID   = OOL.LINE_ID
1821            AND    ODSS.HEADER_id = OOL.HEADER_ID);
1822     EXCEPTION
1823 	 WHEN NO_DATA_FOUND THEN
1824 	   NULL;
1825   END;
1826 
1827   IF l_ship_rule_count > 0 THEN
1828     l_calling_action := 'SHIPPING';
1829   ELSE
1830     l_calling_action := 'BOOKING';
1831   END IF;
1832 
1833   IF l_debug_level  > 0 THEN
1834       oe_debug_pub.add(  'OEXPVPMB: CALLING ACTION FROM WHICH_RULE ( AFTER 1723338 ) '||L_CALLING_ACTION , 1 ) ;
1835   END IF;
1836   RETURN (l_calling_action);
1837 
1838   EXCEPTION
1839     WHEN OTHERS THEN
1840       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1841 
1842 END Which_Rule;
1843 
1844 /*-------------------------------------------------------------------
1845   Checks if the Rule defined by calling action has been setup at
1846   Order Type or not. If setup then returns 'Y' else returns 'N'.
1847 ---------------------------------------------------------------------*/
1848 FUNCTION Check_Rule_Defined
1849 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
1850 ,  p_calling_action  IN   VARCHAR2
1851 ) RETURN VARCHAR2
1852 IS
1853 l_credit_check_rule_id	NUMBER ;
1854 --
1855 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1856 --
1857 BEGIN
1858 
1859   IF l_debug_level  > 0 THEN
1860       oe_debug_pub.add(  'OEXPVPMB: INSIDE CHECK RULE DEFINED' ) ;
1861   END IF;
1862   IF l_debug_level  > 0 THEN
1863       oe_debug_pub.add(  'P_CALLING_ACTION => '|| P_CALLING_ACTION ) ;
1864   END IF;
1865 
1866   G_credit_check_rule_id := NULL ;
1867   -- Entry Credit Check Rule.
1868   IF p_calling_action = 'BOOKING' THEN
1869 
1870     IF l_debug_level  > 0 THEN
1871         oe_debug_pub.add(  'OEXPVPMB: SELECTING THE ENTRY RULE' ) ;
1872     END IF;
1873     --
1874     begin
1875 /*7194250
1876       SELECT NVL(ENTRY_CREDIT_CHECK_RULE_ID, -1)
1877       INTO   l_credit_check_rule_id
1878       FROM   oe_order_types_v
1879       WHERE  ORDER_TYPE_ID = p_header_rec.order_type_id;
1880 7194250*/
1881 --7194250
1882     SELECT NVL(ENTRY_CREDIT_CHECK_RULE_ID, -1)
1883     INTO l_credit_check_rule_id
1884     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
1885     WHERE OT.ORDER_TYPE_ID = p_header_rec.order_type_id
1886     AND   ENTRY_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
1887     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
1888 --7194250
1889 
1890 
1891       OE_Verify_Payment_PUB.G_credit_check_rule := 'Ordering';  --ER#7479609
1892 
1893 	 EXCEPTION
1894 	   WHEN NO_DATA_FOUND THEN
1895 		l_credit_check_rule_id := 0;
1896     end;
1897 
1898   ELSE -- If not Use the Shipping Rule for all other calling Actions
1899     -- Fetch PICKING/PACKING/SHIPPING Credit check rules
1900 
1901     BEGIN
1902       IF p_calling_action = 'SHIPPING'
1903       THEN
1904         IF l_debug_level  > 0 THEN
1905             oe_debug_pub.add(  'OEXPVPMB: SELECTING THE SHIPPING RULE' ) ;
1906         END IF;
1907     --
1908         begin
1909 /*7194250
1910           SELECT NVL(SHIPPING_CREDIT_CHECK_RULE_ID, -1)
1911           INTO l_credit_check_rule_id
1912           FROM OE_ORDER_TYPES_V
1913           WHERE ORDER_TYPE_ID = p_header_rec.order_type_id;
1914 7194250*/
1915 --7194250
1916           SELECT NVL(SHIPPING_CREDIT_CHECK_RULE_ID, -1)
1917           INTO l_credit_check_rule_id
1918           FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
1919           WHERE OT.ORDER_TYPE_ID = p_header_rec.order_type_id
1920           AND   SHIPPING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
1921           AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
1922 --7194250
1923 
1924 
1925       OE_Verify_Payment_PUB.G_credit_check_rule := 'Shipping';  --ER#7479609
1926 
1927 	 EXCEPTION
1928 	   WHEN NO_DATA_FOUND THEN
1929 		l_credit_check_rule_id := 0;
1930         end;
1931       END IF;
1932 
1933       IF p_calling_action = 'PACKING'
1934       THEN
1935         IF l_debug_level  > 0 THEN
1936             oe_debug_pub.add(  'OEXPVPMB: SELECTING THE PACKING RULE' ) ;
1937         END IF;
1938     --
1939         begin
1940 /*7194250
1941           SELECT NVL(PACKING_CREDIT_CHECK_RULE_ID, -1)
1942           INTO l_credit_check_rule_id
1943           FROM OE_ORDER_TYPES_V
1944           WHERE ORDER_TYPE_ID = p_header_rec.order_type_id;
1945 7194250*/
1946 --7194250
1947           SELECT NVL(PACKING_CREDIT_CHECK_RULE_ID, -1)
1948           INTO l_credit_check_rule_id
1949           FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
1950           WHERE OT.ORDER_TYPE_ID = p_header_rec.order_type_id
1951           AND   PACKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
1952           AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
1953 --7194250
1954 
1955 
1956       OE_Verify_Payment_PUB.G_credit_check_rule := 'Packing';  --ER#7479609
1957 
1958          EXCEPTION
1959            WHEN NO_DATA_FOUND THEN
1960                 l_credit_check_rule_id := 0;
1961         end;
1962       END IF;
1963 
1964       IF p_calling_action = 'PICKING'
1965       THEN
1966         IF l_debug_level  > 0 THEN
1967             oe_debug_pub.add(  'OEXPVPMB: SELECTING THE PICKING RULE' ) ;
1968         END IF;
1969     --
1970         begin
1971 /*7194250
1972           SELECT NVL(PICKING_CREDIT_CHECK_RULE_ID, -1)
1973           INTO l_credit_check_rule_id
1974           FROM OE_ORDER_TYPES_V
1975           WHERE ORDER_TYPE_ID = p_header_rec.order_type_id;
1976 7194250*/
1977 --7194250
1978           SELECT NVL(PICKING_CREDIT_CHECK_RULE_ID, -1)
1979           INTO l_credit_check_rule_id
1980           FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
1981           WHERE OT.ORDER_TYPE_ID = p_header_rec.order_type_id
1982           AND   PICKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
1983           AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
1984 --7194250
1985 
1986 
1987       OE_Verify_Payment_PUB.G_credit_check_rule := 'Picking/Purchase Release';  --ER#7479609
1988 
1989          EXCEPTION
1990            WHEN NO_DATA_FOUND THEN
1991                 l_credit_check_rule_id := 0;
1992         end;
1993       END IF;
1994     END ;
1995 
1996   END IF; --- calling action
1997 
1998   IF l_debug_level  > 0 THEN
1999       oe_debug_pub.add(  'L_CREDIT_CHECK_RULE_ID => '|| L_CREDIT_CHECK_RULE_ID ) ;
2000   END IF;
2001   -- If no rule was found for the calling action
2002   -- Order is not subject to Payment Verification
2003   IF l_credit_check_rule_id > 0 THEN
2004     IF l_debug_level  > 0 THEN
2005         oe_debug_pub.add(  'OEXPVPMB: RULE EXISTS' ) ;
2006     END IF;
2007       G_credit_check_rule_id := l_credit_check_rule_id ;
2008     RETURN ('Y') ;
2009   ELSE
2010     IF l_debug_level  > 0 THEN
2011         oe_debug_pub.add(  'OEXPVPMB: NO RULE FOUND' ) ;
2012     END IF;
2013       G_credit_check_rule_id := NULL ;
2014     RETURN ('N') ;
2015   END IF;
2016 
2017 
2018 
2019 END Check_Rule_Defined;
2020 
2021 /*-------------------------------------------------------------------
2022 Returns 'Y' if the Order is being paid using a Credit Card
2023 ---------------------------------------------------------------------*/
2024 FUNCTION Is_Electronic_Payment
2025 (  p_header_rec  IN  OE_Order_PUB.Header_Rec_Type )
2026 RETURN 	VARCHAR2
2027 IS
2028 --
2029 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2030 --
2031 BEGIN
2032 
2033   IF l_debug_level  > 0 THEN
2034       oe_debug_pub.add(  'OEXPVPMB: IN IS ELECTRONIC PAYMENT' ) ;
2035   END IF;
2036 
2037   IF p_header_rec.payment_type_code = 'CREDIT_CARD' THEN
2038     IF l_debug_level  > 0 THEN
2039         oe_debug_pub.add(  'OEXPVPMB: EXITING IS ELECTRONIC PAYMENT' ) ;
2040     END IF;
2041     RETURN ('Y') ;
2042   ELSE
2043     IF l_debug_level  > 0 THEN
2044         oe_debug_pub.add(  'OEXPVPMB: EXITING IS ELECTRONIC PAYMENT' ) ;
2045     END IF;
2046     RETURN ('N') ;
2047   END IF;
2048 
2049 END Is_Electronic_Payment;
2050 
2051 /*----------------------------------------------------------------------
2052 Returns 'Y' if a specific Verify Hold already exists on the order
2053 ----------------------------------------------------------------------*/
2054 PROCEDURE Hold_Exists
2055 (  p_header_id      IN   NUMBER
2056 ,  p_hold_id        IN   NUMBER
2057 ,  p_hold_exists    OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2058 )
2059 IS
2060 l_hold_result   VARCHAR2(30);
2061 l_return_status VARCHAR2(30);
2062 l_msg_count     NUMBER;
2063 l_msg_data      VARCHAR2(2000);
2064 --
2065 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2066 --
2067 BEGIN
2068 
2069   IF l_debug_level  > 0 THEN
2070       oe_debug_pub.add(  'OEXPVPMB: IN CHECK FOR HOLD' ) ;
2071   END IF;
2072 
2073   --  Checking existense of unreleased holds on this order
2074   IF l_debug_level  > 0 THEN
2075       oe_debug_pub.add(  'OEXPVPMB: CHECKING HOLDS ON HEADER '||P_HEADER_ID||' FOR HOLD '||P_HOLD_ID ) ;
2076   END IF;
2077   --
2078   OE_HOLDS_PUB.Check_Holds
2079 		      ( p_api_version    => 1.0
2080 		      , p_header_id      => p_header_id
2081 			 , p_hold_id        => p_hold_id
2082 			 , p_entity_code    => 'O'
2083 		      , p_entity_id      => p_header_id
2084 		      , x_result_out     => l_hold_result
2085 		      , x_msg_count      => l_msg_count
2086 		      , x_msg_data       => l_msg_data
2087 		      , x_return_status  => l_return_status
2088 		      );
2089 
2090   -- Check the Result
2091   IF l_hold_result = FND_API.G_TRUE THEN
2092     p_hold_exists := 'Y';
2093     IF l_debug_level  > 0 THEN
2094         oe_debug_pub.add(  'OEXPVPMB: HOLD EXISTS ON ORDER' ) ;
2095     END IF;
2096   ELSE
2097     p_hold_exists := 'N';
2098     IF l_debug_level  > 0 THEN
2099         oe_debug_pub.add(  'OEXPVPMB: NO HOLD ON ORDER' ) ;
2100     END IF;
2101   END IF;
2102 
2103   EXCEPTION
2104 
2105     WHEN OTHERS THEN
2106       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2107       THEN
2108         FND_MSG_PUB.Add_Exc_Msg
2109             (   G_PKG_NAME
2110             ,   'Hold_Exists'
2111             );
2112       END IF;
2113 
2114       OE_MSG_PUB.Count_And_Get
2115             ( p_count => l_msg_count,
2116               p_data  => l_msg_data
2117             );
2118 
2119 END Hold_Exists;
2120 
2121 /*----------------------------------------------------------------------
2122 Releases all Verify Holds on the Order, uses standard Hold APIs.
2123 ----------------------------------------------------------------------*/
2124 
2125 PROCEDURE Release_Verify_Hold
2126 (  p_header_id       IN   NUMBER
2127 ,  p_epayment_hold   IN   VARCHAR2
2128 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
2129 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2130 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2131 )
2132 IS
2133 l_hold_entity_id    NUMBER := p_header_id;
2134 l_hold_id	          NUMBER;
2135 l_hold_exists       VARCHAR2(1);
2136 l_msg_count         NUMBER := 0;
2137 l_msg_data          VARCHAR2(2000);
2138 l_return_status     VARCHAR2(30);
2139 l_release_reason    VARCHAR2(30);
2140 l_hold_source_rec   OE_HOLDS_PVT.Hold_Source_Rec_Type;
2141 l_hold_release_rec  OE_HOLDS_PVT.Hold_Release_Rec_Type;
2142 --
2143 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2144 --
2145 BEGIN
2146 
2147   p_return_status := FND_API.G_RET_STS_SUCCESS;
2148 
2149   IF l_debug_level  > 0 THEN
2150       oe_debug_pub.add(  'OEXPVPMB: IN RELEASE VERIFY HOLD' ) ;
2151   END IF;
2152 
2153   -- Check What type of Holds to Release
2154   IF p_epayment_hold = 'Y' THEN
2155     IF l_debug_level  > 0 THEN
2156         oe_debug_pub.add(  'OEXPVPMB: RELEASE EPAYMENT HOLDS FOR HEADER ID : ' || L_HOLD_ENTITY_ID ) ;
2157     END IF;
2158 
2159 --    l_hold_release_rec  := OE_Hold_Sources_Pvt.G_MISS_Hold_Release_REC;
2160 
2161     l_hold_id := 11 ;  -- Credit Card Authorization Failure Hold
2162 
2163     -- Call Check for Hold to see if the Hold Exists
2164     IF l_debug_level  > 0 THEN
2165         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
2166     END IF;
2167     --
2168     OE_Verify_Payment_PUB.Hold_Exists
2169                           ( p_header_id   => l_hold_entity_id
2170                           , p_hold_id     => l_hold_id
2171                           , p_hold_exists => l_hold_exists
2172                           ) ;
2173 
2174     IF l_hold_exists = 'Y' THEN
2175 
2176       IF l_debug_level  > 0 THEN
2177           oe_debug_pub.add(  'OEXPVPMB: RELEASING CC FAILURE HOLD ON ORDER HEADER ID:' || L_HOLD_ENTITY_ID ) ;
2178       END IF;
2179       l_hold_source_rec.hold_id          := l_hold_id;
2180       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
2181       l_hold_source_rec.HOLD_ENTITY_ID   := l_hold_entity_id;
2182 
2183       l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
2184 
2185 
2186       OE_Holds_PUB.Release_Holds
2187                 (   p_api_version       =>   1.0
2188                 ,   p_hold_source_rec   =>   l_hold_source_rec
2189                 ,   p_hold_release_rec  =>   l_hold_release_rec
2190                 ,   x_msg_count         =>   l_msg_count
2191                 ,   x_msg_data          =>   l_msg_data
2192                 ,   x_return_status     =>   l_return_status
2193                 );
2194 
2195       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2196         RAISE FND_API.G_EXC_ERROR;
2197       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2198         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2199       END IF;
2200 
2201     END IF;  -- Do nothing if the hold has already been released.
2202 
2203     IF l_debug_level  > 0 THEN
2204         oe_debug_pub.add(  'OEXPVPMB: CHECKING CREDIT CARD RISK HOLD FOR HEADER ID : ' || L_HOLD_ENTITY_ID ) ;
2205     END IF;
2206 
2207 --    l_hold_release_rec  := OE_Hold_Sources_Pvt.G_MISS_Hold_Release_REC;
2208     l_hold_id := 12 ; -- Credit Card Risk Hold
2209 
2210     -- Call Check for Hold to see if the Hold Exists
2211     IF l_debug_level  > 0 THEN
2212         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
2213     END IF;
2214     --
2215     OE_Verify_Payment_PUB.Hold_Exists
2216                           ( p_header_id   => l_hold_entity_id
2217                           , p_hold_id     => l_hold_id
2218                           , p_hold_exists => l_hold_exists
2219                           ) ;
2220 
2221     IF l_hold_exists = 'Y' THEN
2222 
2223       IF l_debug_level  > 0 THEN
2224           oe_debug_pub.add(  'OEXPVPMB: RELEASING CC RISK HOLD ON ORDER HEADER ID:' || L_HOLD_ENTITY_ID ) ;
2225       END IF;
2226       l_hold_source_rec.hold_id          := l_hold_id;
2227       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
2228       l_hold_source_rec.HOLD_ENTITY_ID   := l_hold_entity_id;
2229 
2230       l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
2231 
2232       OE_Holds_PUB.Release_Holds
2233                 (   p_api_version       =>   1.0
2234                 ,   p_hold_source_rec   =>   l_hold_source_rec
2235                 ,   p_hold_release_rec  =>   l_hold_release_rec
2236                 ,   x_msg_count         =>   l_msg_count
2237                 ,   x_msg_data          =>   l_msg_data
2238                 ,   x_return_status     =>   l_return_status
2239                 );
2240 
2241       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2242         RAISE FND_API.G_EXC_ERROR;
2243       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2244         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2245       END IF;
2246 
2247     END IF;  -- Do nothing if the hold has already been released.
2248 
2249     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
2250       -- release pending payment authorization hold.
2251       IF l_debug_level  > 0 THEN
2252         oe_debug_pub.add(  'OEXPVPMB: CHECKING PENDING AUTHORIZATION HOLD FOR HEADER ID : ' || L_HOLD_ENTITY_ID ) ;
2253       END IF;
2254 
2255       l_hold_id := 16 ; -- Pending Payment Authorization Hold.
2256 
2257       -- Call Check for Hold to see if the Hold Exists
2258       IF l_debug_level  > 0 THEN
2259         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
2260       END IF;
2261       --
2262       OE_Verify_Payment_PUB.Hold_Exists
2263                           ( p_header_id   => l_hold_entity_id
2264                           , p_hold_id     => l_hold_id
2265                           , p_hold_exists => l_hold_exists
2266                           ) ;
2267 
2268       IF l_hold_exists = 'Y' THEN
2269 
2270         IF l_debug_level  > 0 THEN
2271           oe_debug_pub.add(  'OEXPVPMB: RELEASING PENDING AUTHORIZATION HOLD FOR HEADER ID:' || L_HOLD_ENTITY_ID ) ;
2272         END IF;
2273         l_hold_source_rec.hold_id          := l_hold_id;
2274         l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
2275         l_hold_source_rec.HOLD_ENTITY_ID   := l_hold_entity_id;
2276 
2277         l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
2278 
2279         OE_Holds_PUB.Release_Holds
2280                 (   p_api_version       =>   1.0
2281                 ,   p_hold_source_rec   =>   l_hold_source_rec
2282                 ,   p_hold_release_rec  =>   l_hold_release_rec
2283                 ,   x_msg_count         =>   l_msg_count
2284                 ,   x_msg_data          =>   l_msg_data
2285                 ,   x_return_status     =>   l_return_status
2286                 );
2287 
2288         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2289           RAISE FND_API.G_EXC_ERROR;
2290         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2291           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2292         END IF;
2293       END IF;  -- Do nothing if the hold has already been released.
2294     END IF;
2295 
2296   ELSE -- Release Other Verify Holds
2297 
2298     IF l_debug_level  > 0 THEN
2299         oe_debug_pub.add(  'OEXPVPMB: CHECKING CREDIT CHECKING HOLD FOR HEADER ID : ' || L_HOLD_ENTITY_ID ) ;
2300     END IF;
2301 
2302 --    l_hold_release_rec  := OE_Hold_Sources_Pvt.G_MISS_Hold_Release_REC;
2303     l_hold_id := 1 ; -- Credit Checking Hold
2304 
2305     -- Call Check for Hold to see if the Hold Exists
2306     IF l_debug_level  > 0 THEN
2307         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
2308     END IF;
2309     --
2310     OE_Verify_Payment_PUB.Hold_Exists
2311                           ( p_header_id   => l_hold_entity_id
2312                           , p_hold_id     => l_hold_id
2313                           , p_hold_exists => l_hold_exists
2314                           ) ;
2315 
2316     IF l_hold_exists = 'Y' THEN
2317 
2318       IF l_debug_level  > 0 THEN
2319           oe_debug_pub.add(  'OEXPVPMB: RELEASING CREDIT CHECKING HOLD ON ORDER HEADER ID:' || L_HOLD_ENTITY_ID ) ;
2320       END IF;
2321 
2322       l_hold_source_rec.hold_id          := l_hold_id;
2323       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
2324       l_hold_source_rec.HOLD_ENTITY_ID   := l_hold_entity_id;
2325 
2326       l_hold_release_rec.release_reason_code := 'PASS_CREDIT';
2327 
2328       OE_Holds_PUB.Release_Holds
2329                 (   p_api_version       =>   1.0
2330                 ,   p_hold_source_rec   =>   l_hold_source_rec
2331                 ,   p_hold_release_rec  =>   l_hold_release_rec
2332                 ,   x_msg_count         =>   l_msg_count
2333                 ,   x_msg_data          =>   l_msg_data
2334                 ,   x_return_status     =>   l_return_status
2335                 );
2336 
2337       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2338         RAISE FND_API.G_EXC_ERROR;
2339       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2340         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2341       ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
2342         fnd_message.set_name('ONT', 'OE_CC_HOLD_REMOVED');
2343         oe_msg_pub.add;
2344       END IF;
2345 
2346     END IF;  -- Do nothing if the hold has already been released.
2347 
2348   END IF; -- Electronic Payment
2349 
2350   EXCEPTION
2351 
2352     WHEN FND_API.G_EXC_ERROR THEN
2353       p_return_status := FND_API.G_RET_STS_ERROR;
2354       OE_MSG_PUB.Count_And_Get
2355             ( p_count => l_msg_count,
2356               p_data  => l_msg_data
2357             );
2358 
2359     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2360       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2361       OE_MSG_PUB.Count_And_Get
2362             ( p_count => l_msg_count,
2363               p_data  => l_msg_data
2364             );
2365 
2366     WHEN OTHERS THEN
2367       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2368       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2369       THEN
2370         FND_MSG_PUB.Add_Exc_Msg
2371             (   G_PKG_NAME
2372             ,   'Release_Verify_Hold'
2373             );
2374       END IF;
2375 
2376       OE_MSG_PUB.Count_And_Get
2377             ( p_count => l_msg_count,
2378               p_data  => l_msg_data
2379             );
2380 
2381 END Release_Verify_Hold;
2382 
2383 /*----------------------------------------------------------------------
2384 Applies a Verify Hold which can be Credit Checking Failure, Credit
2385 Card Authorization Failure or  Credit Card Risk Hold  based on the
2386 Hold Id Passed IN, uses standard Hold APIs.
2387 ----------------------------------------------------------------------*/
2388 PROCEDURE Apply_Verify_Hold
2389 (   p_header_id       IN   NUMBER
2390 ,   p_hold_id         IN   NUMBER
2391 ,   p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
2392 ,   p_msg_data	       OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2393 ,   p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2394 )
2395 IS
2396 
2397 
2398 l_hold_exists     VARCHAR2(1) := NULL ;
2399 l_msg_count       NUMBER := 0;
2400 l_msg_data        VARCHAR2(2000);
2401 l_return_status   VARCHAR2(30);
2402 
2403 l_hold_source_rec   OE_Holds_PVT.Hold_Source_REC_type;
2404 --
2405 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2406 --
2407 BEGIN
2408 
2409   p_return_status := FND_API.G_RET_STS_SUCCESS;
2410 
2411   IF l_debug_level  > 0 THEN
2412       oe_debug_pub.add(  'OEXPVPMB: IN APPLY VERIFY HOLDS' ) ;
2413   END IF;
2414 
2415   IF l_debug_level  > 0 THEN
2416       oe_debug_pub.add(  'OEXPVPMB: HEADER ID : '||P_HEADER_ID ) ;
2417   END IF;
2418   IF l_debug_level  > 0 THEN
2419       oe_debug_pub.add(  'OEXPVPMB: HOLD ID : '||P_HOLD_ID ) ;
2420   END IF;
2421 
2422   -- Check if Hold already exists on this order
2423   IF l_debug_level  > 0 THEN
2424       oe_debug_pub.add(  'OEXPVPMB: CHECKING IF REQUESTED VERIFY HOLD ALREADY APPLIED' ) ;
2425   END IF;
2426   --
2427   OE_Verify_Payment_PUB.Hold_Exists
2428                         ( p_header_id   => p_header_id
2429                         , p_hold_id     => p_hold_id
2430                         , p_hold_exists => l_hold_exists
2431                         );
2432 
2433   -- Return with Success if this Hold Already exists on the order
2434   IF l_hold_exists = 'Y' THEN
2435     IF l_debug_level  > 0 THEN
2436         oe_debug_pub.add(  'OEXPVPMB: HOLD ALREADY APPLIED ON HEADER ID : ' || P_HEADER_ID ) ;
2437     END IF;
2438     RETURN ;
2439   END IF ;
2440 
2441   -- Apply Verify Hold on Header
2442   IF l_debug_level  > 0 THEN
2443       oe_debug_pub.add(  'OEXPVPMB: APPLYING VERIFY HOLD ON HEADER ID : ' || P_HEADER_ID ) ;
2444   END IF;
2445 
2446   l_hold_source_rec.hold_id         := p_hold_id ;  -- Requested Hold
2447   l_hold_source_rec.hold_entity_code:= 'O';         -- Order Hold
2448   l_hold_source_rec.hold_entity_id  := p_header_id; -- Order Header
2449 
2450   OE_Holds_PUB.Apply_Holds
2451                 (   p_api_version       =>      1.0
2452                 ,   p_validation_level  =>      FND_API.G_VALID_LEVEL_NONE
2453                 ,   p_hold_source_rec   =>      l_hold_source_rec
2454                 ,   x_msg_count         =>      l_msg_count
2455                 ,   x_msg_data          =>      l_msg_data
2456                 ,   x_return_status     =>      l_return_status
2457                 );
2458 
2459   IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2460     IF p_hold_id = 16 THEN
2461       FND_MESSAGE.SET_NAME('ONT','ONT_PENDING_AUTH_HOLD_APPLIED');
2462       FND_MESSAGE.SET_TOKEN('LEVEL','ORDER');
2463       OE_MSG_PUB.ADD;
2464       IF l_debug_level  > 0 THEN
2465         oe_debug_pub.add(  'OEXVPPYB: Pending Payment Authorization hold  has been applied on order.', 3);
2466       END IF;
2467     END IF;
2468   ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2469     RAISE FND_API.G_EXC_ERROR;
2470   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2471     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2472   END IF;
2473 
2474   IF l_debug_level  > 0 THEN
2475       oe_debug_pub.add(  'OEXPVPMB: APPLIED VERIFY HOLD ON HEADER ID:' || P_HEADER_ID ) ;
2476   END IF;
2477 
2478   EXCEPTION
2479 
2480     WHEN FND_API.G_EXC_ERROR THEN
2481       p_return_status := FND_API.G_RET_STS_ERROR;
2482       OE_MSG_PUB.Count_And_Get
2483             ( p_count => l_msg_count,
2484               p_data  => l_msg_data
2485             );
2486 
2487     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2488       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2489       OE_MSG_PUB.Count_And_Get
2490             ( p_count => l_msg_count,
2491               p_data  => l_msg_data
2492             );
2493 
2494     WHEN OTHERS THEN
2495       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2496       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2497       THEN
2498         FND_MSG_PUB.Add_Exc_Msg
2499             (   G_PKG_NAME
2500             ,   'Apply_Verify_Hold'
2501             );
2502       END IF;
2503 
2504       OE_MSG_PUB.Count_And_Get
2505             ( p_count => l_msg_count,
2506               p_data  => l_msg_data
2507             );
2508 
2509 END Apply_Verify_Hold;
2510 
2511 -- bug 4339864, added this new procedure to do autonomous commit when
2512 -- calling action is picking, packing or shipping.
2513 /*----------------------------------------------------------------------
2514 Applies a Verify Hold which can be Credit Checking Failure, Credit
2515 Card Authorization Failure or  Credit Card Risk Hold  based on the
2516 Hold Id Passed IN, uses standard Hold APIs.
2517 ----------------------------------------------------------------------*/
2518 PROCEDURE Apply_Verify_Hold_and_Commit
2519 (   p_header_id       IN   NUMBER
2520 ,   p_hold_id         IN   NUMBER
2521 ,   p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
2522 ,   p_msg_data	       OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2523 ,   p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2524 )
2525 IS
2526 
2527 -- bug 4339864
2528 PRAGMA AUTONOMOUS_TRANSACTION;
2529 
2530 l_hold_exists     VARCHAR2(1) := NULL ;
2531 l_msg_count       NUMBER := 0;
2532 l_msg_data        VARCHAR2(2000);
2533 l_return_status   VARCHAR2(30);
2534 
2535 l_hold_source_rec   OE_Holds_PVT.Hold_Source_REC_type;
2536 --
2537 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2538 --
2539 BEGIN
2540 
2541   p_return_status := FND_API.G_RET_STS_SUCCESS;
2542 
2543   IF l_debug_level  > 0 THEN
2544       oe_debug_pub.add(  'OEXPVPMB: IN APPLY VERIFY HOLDS' ) ;
2545   END IF;
2546 
2547   IF l_debug_level  > 0 THEN
2548       oe_debug_pub.add(  'OEXPVPMB: HEADER ID : '||P_HEADER_ID ) ;
2549   END IF;
2550   IF l_debug_level  > 0 THEN
2551       oe_debug_pub.add(  'OEXPVPMB: HOLD ID : '||P_HOLD_ID ) ;
2552   END IF;
2553 
2554   -- Check if Hold already exists on this order
2555   IF l_debug_level  > 0 THEN
2556       oe_debug_pub.add(  'OEXPVPMB: CHECKING IF REQUESTED VERIFY HOLD ALREADY APPLIED' ) ;
2557   END IF;
2558   --
2559   OE_Verify_Payment_PUB.Hold_Exists
2560                         ( p_header_id   => p_header_id
2561                         , p_hold_id     => p_hold_id
2562                         , p_hold_exists => l_hold_exists
2563                         );
2564 
2565   -- Return with Success if this Hold Already exists on the order
2566   IF l_hold_exists = 'Y' THEN
2567     IF l_debug_level  > 0 THEN
2568         oe_debug_pub.add(  'OEXPVPMB: HOLD ALREADY APPLIED ON HEADER ID : ' || P_HEADER_ID ) ;
2569     END IF;
2570     RETURN ;
2571   END IF ;
2572 
2573   -- Apply Verify Hold on Header
2574   IF l_debug_level  > 0 THEN
2575       oe_debug_pub.add(  'OEXPVPMB: APPLYING VERIFY HOLD ON HEADER ID : ' || P_HEADER_ID ) ;
2576   END IF;
2577 
2578   l_hold_source_rec.hold_id         := p_hold_id ;  -- Requested Hold
2579   l_hold_source_rec.hold_entity_code:= 'O';         -- Order Hold
2580   l_hold_source_rec.hold_entity_id  := p_header_id; -- Order Header
2581 
2582   OE_Holds_PUB.Apply_Holds
2583                 (   p_api_version       =>      1.0
2584                 ,   p_validation_level  =>      FND_API.G_VALID_LEVEL_NONE
2585                 ,   p_hold_source_rec   =>      l_hold_source_rec
2586                 ,   x_msg_count         =>      l_msg_count
2587                 ,   x_msg_data          =>      l_msg_data
2588                 ,   x_return_status     =>      l_return_status
2589                 );
2590 
2591   IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2592     IF p_hold_id = 16 THEN
2593       FND_MESSAGE.SET_NAME('ONT','ONT_PENDING_AUTH_HOLD_APPLIED');
2594       FND_MESSAGE.SET_TOKEN('LEVEL','ORDER');
2595       OE_MSG_PUB.ADD;
2596       IF l_debug_level  > 0 THEN
2597         oe_debug_pub.add(  'OEXVPPYB: Pending Payment Authorization hold  has been applied on order.', 3);
2598       END IF;
2599     END IF;
2600   ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2601     RAISE FND_API.G_EXC_ERROR;
2602   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2603     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2604   END IF;
2605 
2606   -- bug 4339864
2607   IF l_debug_level  > 0 THEN
2608     OE_DEBUG_PUB.ADD(' Holds success ' , 3);
2609     OE_DEBUG_PUB.ADD(' About to Issue COMMIT', 3);
2610   END IF;
2611 
2612   COMMIT;
2613 
2614   IF l_debug_level  > 0 THEN
2615       oe_debug_pub.add(  'OEXPVPMB: APPLIED VERIFY HOLD ON HEADER ID:' || P_HEADER_ID ) ;
2616   END IF;
2617 
2618   EXCEPTION
2619 
2620     WHEN FND_API.G_EXC_ERROR THEN
2621       p_return_status := FND_API.G_RET_STS_ERROR;
2622       OE_MSG_PUB.Count_And_Get
2623             ( p_count => l_msg_count,
2624               p_data  => l_msg_data
2625             );
2626 
2627     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2628       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2629       OE_MSG_PUB.Count_And_Get
2630             ( p_count => l_msg_count,
2631               p_data  => l_msg_data
2632             );
2633 
2634     WHEN OTHERS THEN
2635       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2636       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2637       THEN
2638         FND_MSG_PUB.Add_Exc_Msg
2639             (   G_PKG_NAME
2640             ,   'Apply_Verify_Hold_and_Commit'
2641             );
2642       END IF;
2643 
2644       OE_MSG_PUB.Count_And_Get
2645             ( p_count => l_msg_count,
2646               p_data  => l_msg_data
2647             );
2648 
2649 END Apply_Verify_Hold_and_Commit;
2650 
2651 /*----------------------------------------------------------------------
2652 Main Procedure called for all Electronic Payment Processing.
2653 ----------------------------------------------------------------------*/
2654 PROCEDURE Payment_Request (
2655   p_header_rec		IN	OE_Order_PUB.Header_Rec_Type,
2656   p_trxn_type		IN 	VARCHAR2,
2657   p_msg_count		OUT NOCOPY /* file.sql.39 change */	NUMBER,
2658   p_msg_data		OUT NOCOPY /* file.sql.39 change */	VARCHAR2,
2659   p_result_out      OUT NOCOPY /* file.sql.39 change */  VARCHAR2,
2660   p_return_status	OUT NOCOPY /* file.sql.39 change */	VARCHAR2 )
2661 IS
2662 l_void_trxn_id      NUMBER := 0 ;
2663 l_automatic_auth    VARCHAR2(1) ;
2664 l_auth_code         VARCHAR2(80);
2665 l_trxn_date         DATE;
2666 l_msg_count         NUMBER := 0 ;
2667 l_msg_data          VARCHAR2(2000) := NULL ;
2668 l_return_status     VARCHAR2(30) := NULL;
2669 l_void_supported    VARCHAR2(1);
2670 
2671 --
2672 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2673 --
2674 BEGIN
2675 
2676   p_result_out := 'PASS';
2677   p_return_status := FND_API.G_RET_STS_SUCCESS;
2678 
2679   IF l_debug_level  > 0 THEN
2680       oe_debug_pub.add(  'OEXPVPMB: IN PAYMENT REQUEST MAIN' ) ;
2681   END IF;
2682 
2683   -- Return if iPayment is Not Installed
2684   IF l_debug_level  > 0 THEN
2685       oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING IPAYMENT IS INSTALLED OR NOT' ) ;
2686   END IF;
2687   --
2688   -- lkxu, fix bug 1701377
2689   /***
2690   IF ( OE_Verify_Payment_PUB.Check_Ipayment_Installed = 'N' ) THEN
2691     -- We don't want to continue and we want to RETURN a SUCCESS.
2692     RETURN ;
2693   END IF;
2694   ***/
2695 
2696   -- lkxu, for bug 1701377
2697   IF OE_GLOBALS.G_IPAYMENT_INSTALLED IS NULL THEN
2698 
2699      OE_GLOBALS.G_IPAYMENT_INSTALLED := OE_GLOBALS.CHECK_PRODUCT_INSTALLED(673);
2700   END IF;
2701 
2702   IF OE_GLOBALS.G_IPAYMENT_INSTALLED <> 'Y' THEN
2703      IF l_debug_level  > 0 THEN
2704          oe_debug_pub.add(  'OEXPVPMB: IPAYMENT IS NOT INSTALLED!' , 3 ) ;
2705      END IF;
2706      RETURN;
2707   END IF;
2708 
2709   IF l_debug_level  > 0 THEN
2710       oe_debug_pub.add(  'OEXPVPMB: TRANSACTION TYPE PASSED TO THE PROCEDURE IS '||P_TRXN_TYPE ) ;
2711   END IF;
2712 
2713   -- If Authorization is Requested then
2714   IF l_debug_level  > 0 THEN
2715       oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING THE TRANSACTION TYPE' ) ;
2716   END IF;
2717   --
2718   IF p_trxn_type = 'AUTHONLY' THEN
2719 
2720     -- Call Authorize Payment for Credit Card Authorization
2721     IF l_debug_level  > 0 THEN
2722         oe_debug_pub.add(  'OEXPVPMB: CALLING AUTHORIZE PAYMENT' ) ;
2723     END IF;
2724     --
2725     OE_Verify_Payment_PUB.Authorize_Payment( p_header_rec   => p_header_rec
2726                                            , p_msg_count    => l_msg_count
2727                                            , p_msg_data     => l_msg_data
2728 					   , p_result_out   => p_result_out
2729                                            , p_return_status=> l_return_status
2730                                            );
2731     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2732       RAISE FND_API.G_EXC_ERROR;
2733     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2734       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2735     END IF;
2736 
2737   ELSIF p_trxn_type = 'VOIDAUTHONLY' THEN
2738 
2739     -- Call Fetch Authorization Trxn
2740     IF l_debug_level  > 0 THEN
2741         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING FETCH AUTHORIZATION TRXN' ) ;
2742     END IF;
2743     --
2744     OE_Verify_Payment_PUB.Fetch_Authorization_Trxn
2745                             (  p_header_rec     => p_header_rec
2746                             ,  p_trxn_id        => l_void_trxn_id
2747                             ,  p_automatic_auth => l_automatic_auth
2748 					   );
2749 
2750     -- If a valid Transaction Id returned by above program then Void it.
2751     IF l_debug_level  > 0 THEN
2752         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING VALID TRANSACTION ID FOR VOIDING' ) ;
2753     END IF;
2754     --
2755     IF l_void_trxn_id > 0 THEN
2756 
2757       -- Void this Transaction
2758       IF l_debug_level  > 0 THEN
2759           oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING VOID PAYMENT FOR TRXN ID : '||L_VOID_TRXN_ID ) ;
2760       END IF;
2761       --
2762       OE_Verify_Payment_PUB.Void_Payment
2763 						( p_void_trxn_id => l_void_trxn_id
2764                               , p_msg_count    => l_msg_count
2765                               , p_msg_data     => l_msg_data
2766                               , p_return_status=> l_return_status
2767 						, p_void_supported => l_void_supported
2768                               ) ;
2769       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2770         RAISE FND_API.G_EXC_ERROR;
2771       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2772         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2773       END IF;
2774     END IF;
2775 
2776     -- Return if VOID is not even supported.
2777     IF l_void_supported = 'N' THEN
2778       IF l_debug_level  > 0 THEN
2779           oe_debug_pub.add(  'OEXPVPMB: VOID NOT SUPPORTED , RETURNING SUCCESS - 1' ) ;
2780       END IF;
2781 	 RETURN;
2782     END IF;
2783 
2784     -- Update Auth Code, Date to Null only if it was an Automatic Auth.
2785     -- Payment Amount will still be updated to NULL.
2786     --
2787     IF l_automatic_auth = 'N' THEN
2788 	 l_auth_code := p_header_rec.credit_card_approval_code;
2789 	 l_trxn_date := p_header_rec.credit_card_approval_date;
2790     ELSE
2791 	 l_auth_code := NULL;
2792 	 l_trxn_date := NULL;
2793     END IF;
2794 
2795     -- Update Payment Amount and Authorization Code and DATE
2796     IF l_debug_level  > 0 THEN
2797         oe_debug_pub.add(  'OEXPVPMB: CALLING UPDATE AUTH INFO TO UPDATE THE APPROVAL INFO TO NULL' ) ;
2798     END IF;
2799     --
2800     OE_Verify_Payment_PUB.Update_Authorization_Info
2801                          ( p_header_rec.header_id
2802                           , NULL
2803 			  , l_auth_code
2804 			  , l_trxn_date
2805                           , l_msg_count
2806                           , l_msg_data
2807                           , l_return_status
2808 			  );
2809     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2810       RAISE FND_API.G_EXC_ERROR;
2811     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2812       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2813     END IF;
2814 
2815     -- Release any existing Credit Card Holds on the Order
2816     IF l_debug_level  > 0 THEN
2817         oe_debug_pub.add(  'OEXPVPMB: RELEASING EXISTING CC HOLDS SINCE AUTH HAS BEEN VOIDED' ) ;
2818     END IF;
2819     --
2820     OE_Verify_Payment_PUB.Release_Verify_Hold
2821                                ( p_header_id     => p_header_rec.header_id
2822                                , p_epayment_hold => 'Y' -- We want to Release Credit Card Hold
2823                                , p_msg_count     => l_msg_count
2824                                , p_msg_data      => l_msg_data
2825                                , p_return_status => l_return_status
2826                                );
2827     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2828 	 RAISE FND_API.G_EXC_ERROR;
2829     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2830       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2831     END IF;
2832 
2833   END IF;
2834 
2835   EXCEPTION
2836 
2837     WHEN FND_API.G_EXC_ERROR THEN
2838 	 p_result_out := 'FAIL';
2839       p_return_status := FND_API.G_RET_STS_ERROR;
2840       OE_MSG_PUB.Count_And_Get
2841             ( p_count => l_msg_count,
2842               p_data  => l_msg_data
2843             );
2844 
2845     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2846 	 p_result_out := 'FAIL';
2847       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2848       OE_MSG_PUB.Count_And_Get
2849             ( p_count => l_msg_count,
2850               p_data  => l_msg_data
2851             );
2852 
2853     WHEN OTHERS THEN
2854 	 p_result_out := 'FAIL';
2855       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2856       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2857       THEN
2858         FND_MSG_PUB.Add_Exc_Msg
2859             (   G_PKG_NAME
2860             ,   'Payment_Request'
2861             );
2862       END IF;
2863 
2864       OE_MSG_PUB.Count_And_Get
2865             ( p_count => l_msg_count,
2866               p_data  => l_msg_data
2867             );
2868 
2869 End Payment_Request;
2870 
2871 /*----------------------------------------------------------------------
2872 This Function returns 'Y' if iPayment is Installed else returns 'N'.
2873 ----------------------------------------------------------------------*/
2874 FUNCTION Check_Ipayment_Installed return VARCHAR2
2875 is
2876 l_status               VARCHAR2(1)  := NULL;
2877 l_industry             VARCHAR2(30) := NULL;
2878 l_ipayment_product_id  NUMBER	      := 673 ;
2879 --
2880 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2881 --
2882 BEGIN
2883 
2884   IF l_debug_level  > 0 THEN
2885       oe_debug_pub.add(  'OEXPVPMB: IN CHECK IPAYMENT INSTALLED' ) ;
2886   END IF;
2887 
2888   IF fnd_installation.get ( l_ipayment_product_id, l_ipayment_product_id, l_status, l_industry) THEN
2889     IF (l_status = 'I') THEN
2890       IF l_debug_level  > 0 THEN
2891           oe_debug_pub.add(  'OEXPVPMB: EXITING CHECK IPAYMENT INSTALLED' ) ;
2892       END IF;
2893       RETURN('Y') ;
2894     ELSE
2895       IF l_debug_level  > 0 THEN
2896           oe_debug_pub.add(  'OEXPVPMB: EXITING CHECK IPAYMENT INSTALLED' ) ;
2897       END IF;
2898       RETURN('N') ;
2899     END IF;
2900   ELSE
2901     IF l_debug_level  > 0 THEN
2902         oe_debug_pub.add(  'OEXPVPMB: EXITING CHECK IPAYMENT INSTALLED' ) ;
2903     END IF;
2904     RETURN('N') ;
2905   END IF ;
2906 
2907 END Check_IPayment_Installed;
2908 
2909 /*----------------------------------------------------------------------
2910 This Procedure returns tangibleid, amount if Voice Auth Needed
2911 ----------------------------------------------------------------------*/
2912 PROCEDURE Voice_Auth_Requested
2913 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
2914 ,  p_tangible_id     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2915 ,  p_amount          OUT NOCOPY /* file.sql.39 change */  NUMBER
2916 ,  p_line_id	     IN NUMBER DEFAULT NULL)
2917 IS
2918 Type IBYCurType IS REF CURSOR;
2919 iby_cursor    IBYCurType;
2920 l_ref_info    VARCHAR2(80);
2921 l_sql_stmt    VARCHAR2(1000);
2922 --
2923 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2924 --
2925 BEGIN
2926 
2927   IF l_debug_level  > 0 THEN
2928       oe_debug_pub.add(  'OEXPVPMB: IN VOICE AUTH REQUESTED' ) ;
2929   END IF;
2930 
2931   -- Query the data related to last authorization trxn for this order
2932   IF l_debug_level  > 0 THEN
2933       oe_debug_pub.add(  'OEXPVPMB: SQL FOR QUERYING THE LAST AUTHORIZATION TRXN' ) ;
2934   END IF;
2935   --
2936 
2937   -- modified for multiple payments.
2938   IF p_line_id IS NOT NULL THEN
2939     l_ref_info := TO_CHAR(p_line_id);
2940   ELSE
2941     l_ref_info := TO_CHAR(p_header_rec.header_id);
2942   END IF;
2943 
2944   -- Create the query string
2945   l_sql_stmt := 'SELECT IT.TANGIBLEID, IT.AMOUNT
2946                  FROM   IBY_TANGIBLE IT
2947                  WHERE  IT.REFINFO = :ref_info
2948                  AND    EXISTS
2949                        (SELECT ''Voice Auth Requested''
2950                         FROM   IBY_TRANS_ALL_V A
2951                         WHERE  A.REQTYPE    = ''ORAPMTREQ''
2952                         AND    A.STATUS     = 21
2953                         AND    A.TANGIBLEID = IT.TANGIBLEID)
2954                  AND    NOT
2955                         EXISTS
2956                        (SELECT ''Voice Auth Successful''
2957                         FROM   IBY_TRANS_ALL_V B
2958                         WHERE  B.REQTYPE    = ''ORAPMTREQ''
2959                         AND    B.STATUS     = 0
2960                         AND    B.TANGIBLEID = IT.TANGIBLEID)';
2961 
2962   --OE_DEBUG_PUB.ADD(l_sql_stmt);
2963 
2964   OPEN iby_cursor FOR l_sql_stmt USING l_ref_info;
2965 
2966   FETCH iby_cursor INTO p_tangible_id, p_amount;
2967 
2968   CLOSE iby_cursor;
2969 
2970   -- Return Tangible Id and Amount
2971   IF l_debug_level  > 0 THEN
2972       oe_debug_pub.add(  'OEXPVPMB: VOICE AUTH TANGIBLE ID: '||P_TANGIBLE_ID ) ;
2973   END IF;
2974   IF l_debug_level  > 0 THEN
2975       oe_debug_pub.add(  'OEXPVPMB: VOICE AUTH AMOUNT: '||P_AMOUNT ) ;
2976   END IF;
2977 
2978   IF l_debug_level  > 0 THEN
2979       oe_debug_pub.add(  'OEXPVPMB: EXITING VOICE AUTH REQUESTED' ) ;
2980   END IF;
2981 
2982 END Voice_Auth_Requested;
2983 
2984 /*----------------------------------------------------------------------
2985 Returns Payment Method Details for a given Receipt Method Id
2986 New local procedure created as a result of change done by AR
2987 Now Merchant Id is stored in a new char column MERCHANT_REF.
2988 ----------------------------------------------------------------------*/
2989 PROCEDURE Get_Pay_Method_Info
2990 (   p_pay_method_id   IN   NUMBER
2991 ,   p_pay_method_name OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2992 ,   p_merchant_ref    OUT NOCOPY /* file.sql.39 change */  VARCHAR2
2993 )
2994 IS
2995 --
2996 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2997 --
2998 BEGIN
2999 
3000   IF l_debug_level  > 0 THEN
3001       oe_debug_pub.add(  'OEXPVPMB: IN GET PAY METHOD INFO - LOCAL' ) ;
3002   END IF;
3003 
3004   -- Fetch Pay Method Name and Merchant Id based on Pay Method ID
3005   IF l_debug_level  > 0 THEN
3006       oe_debug_pub.add(  'OEXPVPMB: BEFORE FETCHING THE DETAILS' ) ;
3007   END IF;
3008   --
3009   begin
3010     SELECT
3011       name
3012     , merchant_ref
3013     INTO
3014       p_pay_method_name
3015     , p_merchant_ref
3016     FROM  AR_RECEIPT_METHODS
3017     WHERE RECEIPT_METHOD_ID = p_pay_method_id
3018     AND   SYSDATE >= NVL(START_DATE, SYSDATE)
3019     AND   SYSDATE <= NVL(END_DATE, SYSDATE)
3020     AND   PAYMENT_TYPE_CODE = 'CREDIT_CARD';
3021     EXCEPTION
3022       WHEN OTHERS THEN
3023         NULL;
3024   end;
3025 
3026 END Get_Pay_Method_Info;
3027 
3028 /*----------------------------------------------------------------------
3029 Calls iPayment's API to authorize a Credit Card Payment for an Order.
3030 ----------------------------------------------------------------------*/
3031 PROCEDURE Authorize_Payment
3032 (   p_header_rec        IN   OE_Order_PUB.Header_Rec_Type
3033 ,   p_msg_count         OUT NOCOPY /* file.sql.39 change */  NUMBER
3034 ,   p_msg_data          OUT NOCOPY /* file.sql.39 change */  VARCHAR2
3035 ,   p_result_out        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
3036 ,   p_return_status     OUT NOCOPY /* file.sql.39 change */  VARCHAR2
3037 )
3038 is
3039 l_void_trxn_id       NUMBER;
3040 l_outbound_total     NUMBER;
3041 l_order_value_chr    VARCHAR2(100);
3042 l_order_value        NUMBER;
3043 l_reauthorize_flag   VARCHAR2(1);
3044 l_pay_method_id      NUMBER;
3045 l_pay_method_name	 VARCHAR2(50);
3046 l_bank_acct_id      NUMBER ;
3047 l_bank_acct_uses_id NUMBER ;
3048 l_merchant_id        NUMBER;
3049 l_payee_id           VARCHAR2(80);
3050 l_tangible_id        VARCHAR2(80);
3051 l_ref_info           VARCHAR2(80) := TO_CHAR(p_header_rec.header_id);
3052 l_payer_cust_id      NUMBER;
3053 l_payer_address1     VARCHAR2(240);
3054 l_payer_address2     VARCHAR2(240);
3055 l_payer_address3     VARCHAR2(240);
3056 l_payer_city         VARCHAR2(60);
3057 l_payer_county       VARCHAR2(60);
3058 l_payer_state        VARCHAR2(60);
3059 l_payer_postalcode   VARCHAR2(60);
3060 l_payer_country      VARCHAR2(60);
3061 l_header_val_rec	 OE_Order_PUB.Header_Val_Rec_Type;
3062 l_ship_to_address    VARCHAR2(10);
3063 l_time_of_purchase   VARCHAR2(10);
3064 l_block_str          VARCHAR2(5000);
3065 l_risk_threshold	 NUMBER := 0 ;
3066 l_riskresp_included  VARCHAR2(30);
3067 l_risk_score         NUMBER := 0 ;
3068 l_auth_code          VARCHAR2(80);
3069 l_trxn_date          DATE;
3070 l_status             NUMBER;
3071 l_err_code           VARCHAR2(80);
3072 l_err_mesg           VARCHAR2(255);
3073 l_err_loc            NUMBER;
3074 l_bep_err_code       VARCHAR2(80);
3075 l_bep_err_mesg       VARCHAR2(255);
3076 l_msg_count          NUMBER := 0 ;
3077 l_msg_data           VARCHAR2(2000) := NULL ;
3078 l_return_status      VARCHAR2(30) := NULL ;
3079 l_result_out         VARCHAR2(30) := NULL ;
3080 l_void_supported     VARCHAR2(1);
3081 l_voiceauth_flag     VARCHAR2(1) := 'N';
3082 l_voice_auth_code    VARCHAR2(80):= NULL;
3083 l_hold_exists        VARCHAR2(1);
3084 
3085 l_ship_address1      VARCHAR2(240);
3086 l_ship_address2      VARCHAR2(240);
3087 l_ship_address3      VARCHAR2(240);
3088 l_ship_city          VARCHAR2(60);
3089 l_ship_postalcode    VARCHAR2(60);
3090 l_ship_country       VARCHAR2(60);
3091 
3092 l_trxn_id            NUMBER;
3093 l_cust_trx_date	     DATE;
3094 
3095 --
3096 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3097 --
3098 BEGIN
3099 
3100   p_result_out := 'PASS' ;
3101   p_return_status := FND_API.G_RET_STS_SUCCESS;
3102 
3103   IF l_debug_level  > 0 THEN
3104       oe_debug_pub.add(  'OEXPVPMB: IN AUTHORIZE PAYMENT' ) ;
3105   END IF;
3106 
3107   -- Call Check Reauthorize Order to find out if Reauthorization is required
3108   IF l_debug_level  > 0 THEN
3109       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING CHECK REAUTHORIZE FLAG' ) ;
3110   END IF;
3111   --
3112   OE_Verify_Payment_PUB.Check_Reauthorize_Order
3113 					    ( p_header_rec      => p_header_rec
3114 					    , p_void_trxn_id    => l_void_trxn_id
3115 					    , p_outbound_total  => l_outbound_total
3116 					    , p_reauthorize_out => l_reauthorize_flag
3117 					    );
3118 
3119   IF l_debug_level  > 0 THEN
3120       oe_debug_pub.add(  'OEXPVPMB: REAUTHORIZE FLAG HAS BEEN SET TO : '||L_REAUTHORIZE_FLAG ) ;
3121   END IF;
3122 
3123   /*
3124   ** Fix for 1967295:
3125   ** As VOID has been de-supported by iPayment, commenting
3126   ** following code which was used to VOID existing Trxns.
3127   **
3128   -- If a valid Transaction Id returned by above program then Void it.
3129   OE_DEBUG_PUB.ADD('OEXPVPMB: Before Checking Valid Transaction ID for Voiding');
3130   --
3131   IF l_void_trxn_id > 0 THEN
3132 
3133     -- Void this Transaction
3134     OE_DEBUG_PUB.ADD('OEXPVPMB: Before Calling Void Payment for Trxn ID : '||l_void_trxn_id);
3135     --
3136     OE_Verify_Payment_PUB.Void_Payment
3137 					    ( p_void_trxn_id => l_void_trxn_id
3138                              , p_msg_count    => l_msg_count
3139                              , p_msg_data     => l_msg_data
3140                              , p_return_status=> l_return_status
3141 					    , p_void_supported => l_void_supported
3142                              ) ;
3143     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3144       p_result_out := 'FAIL';
3145       RETURN;
3146     END IF;
3147 
3148   END IF;
3149   */
3150 
3151   -- Check Reauthorize Flag and proceed
3152   IF l_reauthorize_flag = 'N' THEN
3153 
3154     IF l_debug_level  > 0 THEN
3155         oe_debug_pub.add(  'OEXPVPMB: NO NEED TO REAUTHORIZE' ) ;
3156     END IF;
3157 
3158     -- Check if Hold already exists on this order
3159     IF l_debug_level  > 0 THEN
3160         oe_debug_pub.add(  'OEXPVPMB: CHECK IF ORDER ON RISK HOLD' ) ;
3161     END IF;
3162     --
3163     OE_Verify_Payment_PUB.Hold_Exists
3164                         ( p_header_id   => p_header_rec.header_id
3165                         , p_hold_id     => 12 -- Seed Id for CC Risk Hold
3166                         , p_hold_exists => l_hold_exists
3167                         );
3168 
3169     IF l_hold_exists = 'Y' THEN
3170       IF l_debug_level  > 0 THEN
3171           oe_debug_pub.add(  'OEXPVPMB: ORDER IS ON RISK HOLD' ) ;
3172       END IF;
3173       p_result_out := 'RISK';
3174     END IF;
3175 
3176     RETURN;
3177 
3178   ELSIF l_reauthorize_flag = 'V' THEN
3179 
3180     IF l_debug_level  > 0 THEN
3181         oe_debug_pub.add(  'OEXPVPMB: SETUP A VOICE AUTHORIZATION' ) ;
3182     END IF;
3183     l_voiceauth_flag := 'Y';
3184     l_voice_auth_code:= p_header_rec.credit_card_approval_code;
3185 
3186   ELSE
3187 
3188     -- Call to see if an auth already exists which was not updated on order
3189     IF l_debug_level  > 0 THEN
3190         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING FETCH LAST AUTH' ) ;
3191     END IF;
3192     --
3193     OE_Verify_Payment_PUB.Fetch_Last_Auth ( p_header_rec  => p_header_rec
3194 					  , p_trxn_id     => l_trxn_id
3195 					  , p_tangible_id => l_tangible_id
3196                                           , p_auth_code   => l_auth_code
3197                                           , p_trxn_date   => l_trxn_date
3198                                           , p_amount      => l_order_value
3199                                           );
3200 
3201     IF l_trxn_id > 0 THEN
3202       IF l_debug_level  > 0 THEN
3203           oe_debug_pub.add(  'OEXPVPMB: GOING DIRECTLY TO UPDATE AUTH' ) ;
3204       END IF;
3205       goto UPDATE_AUTH;
3206     END IF;
3207 
3208   /*
3209   ** Fix for 1967295:
3210   ** As VOID has been de-supported by iPayment, commenting
3211   ** following code which was used to VOID existing Trxns.
3212   **
3213     -- Return if VOID is not even supported.
3214     IF l_void_supported = 'N' THEN
3215       OE_DEBUG_PUB.ADD('OEXPVPMB: Void Not Supported, Returning Success - 2');
3216 
3217       -- Check if Hold already exists on this order
3218       OE_DEBUG_PUB.ADD('OEXPVPMB: Check if Order on Risk Hold');
3219       --
3220       OE_Verify_Payment_PUB.Hold_Exists
3221                         ( p_header_id   => p_header_rec.header_id
3222                         , p_hold_id     => 12 -- Seed Id for CC Risk Hold
3223                         , p_hold_exists => l_hold_exists
3224                         );
3225 
3226       IF l_hold_exists = 'Y' THEN
3227         OE_DEBUG_PUB.ADD('OEXPVPMB: Order is on Risk Hold');
3228         p_result_out := 'RISK';
3229       END IF;
3230 
3231 	 RETURN;
3232     END IF;
3233   */
3234 
3235   END IF;
3236 
3237   -- Check if Voice Auth was requested in previous call to iPayment for this order.
3238   Voice_Auth_Requested( p_header_rec  => p_header_rec
3239                       , p_tangible_id => l_tangible_id
3240                       , p_amount      => l_order_value
3241                       );
3242 
3243   IF l_tangible_id IS NOT NULL AND l_reauthorize_flag = 'Y' THEN
3244       IF l_debug_level  > 0 THEN
3245           oe_debug_pub.add(  'OEXPVPMB: WILL NOT REAUTHORIZE , VOICE AUTH REQUESTED' ) ;
3246       END IF;
3247       p_result_out := 'FAIL';
3248       RETURN;
3249   END IF;
3250 
3251   -- Check the Existence of attributes required for CC Payment Authorization
3252   IF l_debug_level  > 0 THEN
3253       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING THE VALIDATE REQUIRED ATTRIBUTES' ) ;
3254   END IF;
3255   --
3256   IF NOT Validate_Required_Attributes(p_header_rec) THEN
3257     p_result_out := 'FAIL';
3258     RETURN;
3259   END IF;
3260 
3261   -- Get Primary Payment Method Id for this Customer, Site
3262   IF l_debug_level  > 0 THEN
3263       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING GET PRIMARY PAYMENT METHOD' ) ;
3264   END IF;
3265   --
3266   l_pay_method_id := OE_Verify_Payment_PUB.Get_Primary_Pay_Method
3267 					                  ( p_header_rec => p_header_rec ) ;
3268 
3269   -- Check if a valid method was selected
3270   IF l_debug_level  > 0 THEN
3271       oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING THE METHOD ID' ) ;
3272   END IF;
3273   --
3274   IF l_pay_method_id > 0 THEN
3275 
3276     IF l_debug_level  > 0 THEN
3277         oe_debug_pub.add(  'OEXPVPMB: PAYMENT METHOD ID IS : '||L_PAY_METHOD_ID ) ;
3278     END IF;
3279 
3280     -- Fetch Payment Method Name and Merchant Id based on the Method ID.
3281     IF l_debug_level  > 0 THEN
3282         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING GET PAY METHOD INFO' ) ;
3283     END IF;
3284     --
3285                           Get_Pay_Method_Info
3286 					   ( p_pay_method_id   => l_pay_method_id
3287 					   , p_pay_method_name => l_pay_method_name
3288 					   , p_merchant_ref    => l_payee_id
3289 					   ) ;
3290 
3291     -- If Merchant Id is invalid then set the out result to FAIL and return
3292     IF l_debug_level  > 0 THEN
3293         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING THE PAYEE ID' ) ;
3294     END IF;
3295     --
3296     IF l_payee_id is NULL THEN
3297 
3298       -- Message "Unable to retrieve Payee/Merchant  ID for Customer's Primary Payment Method"
3299       FND_MESSAGE.SET_NAME('ONT','OE_VPM_NO_PAYEE_ID');
3300       OE_MSG_PUB.ADD;
3301       p_result_out := 'FAIL' ;
3302 	 RETURN;
3303 
3304     END IF;
3305 
3306   ELSE -- Method ID is invalid
3307 
3308     -- Message "Unable to retrieve Primary Payment Method for the customer"
3309     FND_MESSAGE.SET_NAME('ONT','OE_VPM_NO_PAY_METHOD');
3310     OE_MSG_PUB.ADD;
3311     p_result_out := 'FAIL' ;
3312     RETURN;
3313 
3314   END IF;
3315 
3316   -- Setup the Data Required to Call OraPmtReq, iPayment's API.
3317 
3318   -- The Payee Id is
3319 --l_payee_id := TO_CHAR(l_merchant_id);
3320 
3321   IF l_debug_level  > 0 THEN
3322       oe_debug_pub.add(  'OEXPVPMB: PAYEE ID IS : '|| L_PAYEE_ID ) ;
3323   END IF;
3324 
3325   IF l_debug_level  > 0 THEN
3326       oe_debug_pub.add(  'OEXPVPMB: PAYER NAME IS : '|| P_HEADER_REC.CREDIT_CARD_HOLDER_NAME ) ;
3327   END IF;
3328 
3329   -- Get a NEW tangible id only if it's not already pulled from Voice Auth
3330   IF l_tangible_id is NULL THEN
3331     -- Fetch the Tangible Id from sequence
3332     IF l_debug_level  > 0 THEN
3333         oe_debug_pub.add(  'OEXPVPMB: BEFORE FETCHING THE TANGIBLE ID' ) ;
3334     END IF;
3335     --
3336     begin
3337       SELECT TO_CHAR(OE_IPAYMENT_TANGIBLE_S.NEXTVAL)||'_ONT'
3338       INTO   l_tangible_id
3339       FROM   DUAL ;
3340     end ;
3341   END IF; -- tangible id null
3342 
3343   IF l_debug_level  > 0 THEN
3344       oe_debug_pub.add(  'OEXPVPMB: TANGIBLE ID IS : '||L_TANGIBLE_ID ) ;
3345   END IF;
3346 
3347   -- Setup the Payer Address Record Type
3348   begin
3349     SELECT  ADDRESS_LINE_1
3350     ,       ADDRESS_LINE_2
3351     ,       ADDRESS_LINE_3
3352     ,       TOWN_OR_CITY
3353     ,       COUNTY
3354     ,       STATE
3355     ,       COUNTRY
3356     ,       POSTAL_CODE
3357     ,       CUSTOMER_ID
3358     INTO    l_payer_address1
3359     ,       l_payer_address2
3360     ,       l_payer_address3
3361     ,       l_payer_city
3362     ,       l_payer_county
3363     ,       l_payer_state
3364     ,       l_payer_country
3365     ,       l_payer_postalcode
3366     ,       l_payer_cust_id
3367     FROM    OE_INVOICE_TO_ORGS_V
3368     WHERE   ORGANIZATION_ID = p_header_rec.invoice_to_org_id;
3369   end ;
3370 
3371   -- Fix for Bug # 1586750.
3372   -- Call to Process_Cust_Bank_Account moved to this place
3373   -- so that invoice to org customer id can be used to set
3374   -- up the credit card bank account.
3375 
3376   -- Setup the Customer Bank Account in AP
3377   IF l_debug_level  > 0 THEN
3378       oe_debug_pub.add(  'OEXPVPMB: BEFORE SETTING UP THE CUSTOMER BANK ACCOUNT' ) ;
3379   END IF;
3380   --
3381 
3382   /**
3383   l_cust_trx_date := nvl(p_header_rec.ordered_date, sysdate)
3384                - nvl( to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);
3385   begin
3386     arp_bank_pkg.process_cust_bank_account
3387 	             ( p_trx_date         => l_cust_trx_date
3388 	             , p_currency_code    => p_header_rec.transactional_curr_code
3389           	     , p_cust_id          => l_payer_cust_id
3390 	             , p_site_use_id      => p_header_rec.invoice_to_org_id
3391 	             , p_credit_card_num  => p_header_rec.credit_card_number
3392 		     , p_acct_name        => p_header_rec.credit_card_holder_name
3393 	             , p_exp_date         => p_header_rec.credit_card_expiration_date
3394 	             , p_bank_account_id      => l_bank_acct_id
3395 	             , p_bank_account_uses_id => l_bank_acct_uses_id
3396 	             ) ;
3397     EXCEPTION
3398 	 WHEN OTHERS THEN
3399         FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_ACCT_NOT_SET');
3400         OE_MSG_PUB.ADD;
3401         IF l_debug_level  > 0 THEN
3402             oe_debug_pub.add(  'OEXPVPMB: ERROR IN ARP_BANK_PKG.PROCESS_CUST_BANK_ACCOUNT' ) ;
3403         END IF;
3404 	   p_result_out := 'FAIL';
3405 	   RETURN;
3406   end;
3407   **/
3408 
3409   IF l_debug_level  > 0 THEN
3410       oe_debug_pub.add(  'OEXPVPMB: AFTER SETTING UP THE CUSTOMER BANK ACCOUNT' ) ;
3411   END IF;
3412 
3413   IF l_debug_level  > 0 THEN
3414       oe_debug_pub.add(  'OEXPVPMB: INVOICE/CREDIT CARD HOLDER ADDRESS START .. ' ) ;
3415   END IF;
3416   IF l_debug_level  > 0 THEN
3417       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 1 : '|| L_PAYER_ADDRESS1 ) ;
3418   END IF;
3419   IF l_debug_level  > 0 THEN
3420       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 2 : '|| L_PAYER_ADDRESS2 ) ;
3421   END IF;
3422   IF l_debug_level  > 0 THEN
3423       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 3 : '|| L_PAYER_ADDRESS3 ) ;
3424   END IF;
3425   IF l_debug_level  > 0 THEN
3426       oe_debug_pub.add(  'OEXPVPMB: CITY : '|| L_PAYER_CITY ) ;
3427   END IF;
3428   IF l_debug_level  > 0 THEN
3429       oe_debug_pub.add(  'OEXPVPMB: COUNTY : '|| L_PAYER_COUNTY ) ;
3430   END IF;
3431   IF l_debug_level  > 0 THEN
3432       oe_debug_pub.add(  'OEXPVPMB: STATE : '|| L_PAYER_STATE ) ;
3433   END IF;
3434   IF l_debug_level  > 0 THEN
3435       oe_debug_pub.add(  'OEXPVPMB: COUNTRY : '|| L_PAYER_COUNTRY ) ;
3436   END IF;
3437   IF l_debug_level  > 0 THEN
3438       oe_debug_pub.add(  'OEXPVPMB: POSTAL CODE : '|| L_PAYER_POSTALCODE ) ;
3439   END IF;
3440   IF l_debug_level  > 0 THEN
3441       oe_debug_pub.add(  'OEXPVPMB: INVOICE/CREDIT CARD HOLDER TO ADDRESS END .. ' ) ;
3442   END IF;
3443 
3444   -- Fetch the Header Values
3445   /*
3446   ** Ship To Address is now selected from the table.
3447   l_header_val_rec := OE_Header_Util.Get_Values( p_header_rec => p_header_rec );
3448   */
3449 
3450   -- Get the Ship To Address Information
3451   begin
3452     SELECT  ADDRESS_LINE_1
3453     ,       ADDRESS_LINE_2
3454     ,       ADDRESS_LINE_3
3455     ,       TOWN_OR_CITY
3456     ,       POSTAL_CODE
3457     ,       COUNTRY
3458     INTO    l_ship_address1
3459     ,       l_ship_address2
3460     ,       l_ship_address3
3461     ,       l_ship_city
3462     ,       l_ship_postalcode
3463     ,       l_ship_country
3464     FROM    OE_SHIP_TO_ORGS_V
3465     WHERE   ORGANIZATION_ID = p_header_rec.ship_to_org_id;
3466   end ;
3467 
3468   IF l_debug_level  > 0 THEN
3469       oe_debug_pub.add(  'OEXPVPMB: SHIP TO ADDRESS START .. ' ) ;
3470   END IF;
3471   IF l_debug_level  > 0 THEN
3472       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 1 : '|| L_SHIP_ADDRESS1 ) ;
3473   END IF;
3474   IF l_debug_level  > 0 THEN
3475       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 2 : '|| L_SHIP_ADDRESS2 ) ;
3476   END IF;
3477   IF l_debug_level  > 0 THEN
3478       oe_debug_pub.add(  'OEXPVPMB: ADDRESS 3 : '|| L_SHIP_ADDRESS3 ) ;
3479   END IF;
3480   IF l_debug_level  > 0 THEN
3481       oe_debug_pub.add(  'OEXPVPMB: CITY : '|| L_SHIP_CITY ) ;
3482   END IF;
3483   IF l_debug_level  > 0 THEN
3484       oe_debug_pub.add(  'OEXPVPMB: COUNTRY : '|| L_SHIP_COUNTRY ) ;
3485   END IF;
3486   IF l_debug_level  > 0 THEN
3487       oe_debug_pub.add(  'OEXPVPMB: POSTAL CODE : '|| L_SHIP_POSTALCODE ) ;
3488   END IF;
3489   IF l_debug_level  > 0 THEN
3490       oe_debug_pub.add(  'OEXPVPMB: SHIP TO ADDRESS END .. ' ) ;
3491   END IF;
3492 
3493   /*
3494   ** Fix Bug # 2262893
3495   ** Modified following IF condition to handle adresses with NULL values in line
3496   ** 1, 2 and 3 columns. City, Postal Code and Country are now checked separately.
3497   */
3498   IF l_debug_level  > 0 THEN
3499       oe_debug_pub.add(  'OEXPVPMB: CHECKING IF SHIP TO AND INVOICE TO ADDRESSES MATCH' ) ;
3500   END IF;
3501   --
3502   /*
3503   IF (l_header_val_rec.invoice_to_address1 = l_header_val_rec.ship_to_address1
3504   AND l_header_val_rec.invoice_to_address2 = l_header_val_rec.ship_to_address2
3505   AND l_header_val_rec.invoice_to_address3 = l_header_val_rec.ship_to_address3
3506   AND l_header_val_rec.invoice_to_address4 = l_header_val_rec.ship_to_address4) THEN
3507   */
3508 
3509   IF  nvl(ltrim(rtrim(l_payer_address1)), ' ')  = nvl(ltrim(rtrim(l_ship_address1)), ' ')
3510   AND nvl(ltrim(rtrim(l_payer_address2)), ' ')  = nvl(ltrim(rtrim(l_ship_address2)), ' ')
3511   AND nvl(ltrim(rtrim(l_payer_address3)), ' ')  = nvl(ltrim(rtrim(l_ship_address3)), ' ')
3512   AND nvl(ltrim(rtrim(l_payer_city)), ' ')      = nvl(ltrim(rtrim(l_ship_city)), ' ')
3513   AND nvl(ltrim(rtrim(l_payer_postalcode)), ' ')= nvl(ltrim(rtrim(l_ship_postalcode)), ' ')
3514   AND nvl(ltrim(rtrim(l_payer_country)), ' ')   = nvl(ltrim(rtrim(l_ship_country)), ' ')
3515   THEN
3516     l_ship_to_address := 'TRUE' ; -- Ship To and Invoice To Addresses Match
3517   ELSE
3518     l_ship_to_address := 'FALSE' ; -- Ship To and Invoice To Addresses DO NOT Match
3519   END IF;
3520 
3521   IF l_debug_level  > 0 THEN
3522       oe_debug_pub.add(  'OEXPVPMB: SHIP TO AND INVOICE TO MATCH : '|| L_SHIP_TO_ADDRESS ) ;
3523   END IF;
3524 
3525   -- Hour and Minutes after Mid Night in HH24:MM format
3526   IF l_debug_level  > 0 THEN
3527       oe_debug_pub.add(  'OEXPVPMB: FETCHING HOUR AND MINUTES AFTER MIDNIGHT AS TIME OF PURCHASE' ) ;
3528   END IF;
3529   --
3530   SELECT TO_CHAR(sysdate, 'HH24:MI')
3531   INTO   l_time_of_purchase
3532   FROM   DUAL ;
3533 
3534   IF l_debug_level  > 0 THEN
3535       oe_debug_pub.add(  'OEXPVPMB: TIME OF PURCHASE AFTER MIDNIGHT HH24:MI IS : '|| L_TIME_OF_PURCHASE ) ;
3536   END IF;
3537 
3538   -- Set the Order Value to Outbound Total only if it's not already
3539   -- set to the tangible amount from the Voice Authorization.
3540   IF NVL(l_order_value, 0) <= 0 THEN
3541     l_order_value := l_outbound_total;
3542   END IF; -- tangible Amount not > 0
3543 
3544   IF l_debug_level  > 0 THEN
3545       oe_debug_pub.add(  'OEXPVPMB: AMOUNT TO BE AUTHORIZED , OUTBOUND TOTAL : '||L_ORDER_VALUE ) ;
3546   END IF;
3547 
3548   l_block_str := 'DECLARE
3549 
3550   /**** Declaration Section ****/
3551     l_ecapp_id       INTEGER := 660;
3552     l_payee_rec      IBY_Payment_Adapter_PUB.Payee_Rec_Type;
3553     l_payer_rec      IBY_Payment_Adapter_PUB.Payer_Rec_Type;
3554     l_payer_addr_rec IBY_Payment_Adapter_PUB.Address_Rec_Type;
3555     l_cc_instr_rec   IBY_Payment_Adapter_PUB.CreditCardInstr_Rec_Type;
3556     l_pmtinstr_rec   IBY_Payment_Adapter_PUB.PmtInstr_Rec_Type;
3557     l_tangible_rec   IBY_Payment_Adapter_PUB.Tangible_Rec_Type;
3558     l_pmtreqtrxn_rec IBY_Payment_Adapter_PUB.PmtReqTrxn_Rec_Type;
3559     l_riskinfo_rec   IBY_Payment_Adapter_PUB.RiskInfo_Rec_Type;
3560     l_reqresp_rec    IBY_Payment_Adapter_PUB.ReqResp_Rec_Type;
3561     l_return_status  VARCHAR2(30);
3562     l_msg_count      NUMBER;
3563     l_msg_data       VARCHAR2(2000);
3564 
3565   BEGIN
3566   /**** Setup PayEE Record ****/
3567     l_payee_rec.payee_id := :payee_id;
3568   /**** Setup PayER Record ****/
3569     l_payer_rec.payer_name := :payer_name;
3570   /**** Setup Payer Address Record ****/
3571     l_payer_addr_rec.address1 := :payer_addr1;
3572     l_payer_addr_rec.address2 := :payer_addr2;
3573     l_payer_addr_rec.address3 := :payer_addr3;
3574     l_payer_addr_rec.city     := :payer_city;
3575     l_payer_addr_rec.county   := :payer_county;
3576     l_payer_addr_rec.state    := :payer_state;
3577     l_payer_addr_rec.postalcode := :payer_postalcode;
3578     l_payer_addr_rec.country  := :payer_country;
3579   /**** Setup Credit Card Record ****/
3580     l_cc_instr_rec.CC_Type       := :cc_type;
3581     l_cc_instr_rec.CC_Num        := :cc_num;
3582     l_cc_instr_rec.CC_ExpDate    := :cc_expdate;
3583     l_cc_instr_rec.CC_HolderName := :cc_holdername;
3584     l_cc_instr_rec.CC_BillingAddr:= l_payer_addr_rec;
3585   /**** Setup Payment Instrument Record ****/
3586     l_pmtinstr_rec.creditcardinstr:= l_cc_instr_rec;
3587   /**** Setup Tangible Record ****/
3588     l_tangible_rec.tangible_id    := :tangible_id;
3589     l_tangible_rec.tangible_amount:= :order_value;
3590     l_tangible_rec.currency_code  := :currency_code;
3591     l_tangible_rec.refinfo        := :ref_info;
3592   /**** Setup Payment Request Trxn Record ****/
3593     l_pmtreqtrxn_rec.pmtmode   := ''ONLINE'';
3594     l_pmtreqtrxn_rec.auth_type := ''AUTHONLY'';
3595     l_pmtreqtrxn_rec.org_id    := :pmt_org_id;
3596     l_pmtreqtrxn_rec.voiceauthflag := :voice_auth_flag;
3597     l_pmtreqtrxn_rec.authcode  := :voice_auth_code;
3598   /**** Setup Risk Info Record ****/
3599     l_riskinfo_rec.shiptobillto_flag:= :shipto_address;
3600     l_riskinfo_rec.time_of_purchase:= :time_of_purchase;
3601 
3602   /**** Setup call to iPayment API OraPmtReq for Authorization ****/
3603     IBY_Payment_Adapter_PUB.OraPmtReq
3604     (  p_api_version      => 1.0
3605     ,  p_ecapp_id         => l_ecapp_id
3606     ,  p_payee_rec        => l_payee_rec
3607     ,  p_payer_rec        => l_payer_rec
3608     ,  p_pmtinstr_rec     => l_pmtinstr_rec
3609     ,  p_tangible_rec     => l_tangible_rec
3610     ,  p_pmtreqtrxn_rec   => l_pmtreqtrxn_rec
3611     ,  p_riskinfo_rec     => l_riskinfo_rec
3612     ,  x_return_status    => l_return_status
3613     ,  x_msg_count        => l_msg_count
3614     ,  x_msg_data         => l_msg_data
3615     ,  x_reqresp_rec      => l_reqresp_rec
3616     );
3617 
3618   /**** Return all the Responses so as to Handle Output of OraPmtReq ****/
3619 
3620     :riskrep_included := l_reqresp_rec.riskrespincluded;
3621     :risk_score    := l_reqresp_rec.riskresponse.risk_score;
3622     :auth_code     := l_reqresp_rec.authcode;
3623     :trxn_date     := l_reqresp_rec.trxn_date;
3624     :return_status := l_return_status;
3625     :msg_count     := l_msg_count;
3626     :msg_data      := l_msg_data;
3627     :status        := NVL(l_reqresp_rec.response.status,0);
3628     :err_code      := l_reqresp_rec.response.errcode;
3629     :err_mesg      := l_reqresp_rec.response.errmessage;
3630     :err_loc       := l_reqresp_rec.errorlocation;
3631     :bep_err_code  := l_reqresp_rec.beperrcode;
3632     :bep_err_mesg  := l_reqresp_rec.beperrmessage;
3633 
3634   END;';
3635 
3636   -- PL/SQL Block for call to OraPmtReq
3637   -- OE_DEBUG_PUB.ADD(l_block_str);
3638   --
3639 
3640   -- Before Executing the Block
3641   IF l_debug_level  > 0 THEN
3642       oe_debug_pub.add(  'OEXPVPMB: BEFORE EXECUTING THE PL/SQL BLOCK' ) ;
3643   END IF;
3644   --
3645   EXECUTE IMMEDIATE l_block_str
3646 		    USING   IN l_payee_id
3647 		          , IN p_header_rec.credit_card_holder_name
3648 		          , IN l_payer_address1
3649 		          , IN l_payer_address2
3650 		          , IN l_payer_address3
3651 		          , IN l_payer_city
3652 		          , IN l_payer_county
3653 		          , IN l_payer_state
3654 		          , IN l_payer_postalcode
3655 		          , IN l_payer_country
3656 		          , IN p_header_rec.credit_card_code
3657 		          , IN p_header_rec.credit_card_number
3658 		          , IN p_header_rec.credit_card_expiration_date
3659 		          , IN p_header_rec.credit_card_holder_name
3660 		          , IN l_tangible_id
3661 		          , IN l_order_value
3662 		          , IN p_header_rec.transactional_curr_code
3663 		          , IN l_ref_info
3664 				, IN p_header_rec.org_id
3665 				, IN l_voiceauth_flag
3666 				, IN l_voice_auth_code
3667 		          , IN l_ship_to_address
3668 		          , IN l_time_of_purchase
3669   		          , OUT l_riskresp_included
3670   		          , OUT l_risk_score
3671   		          , OUT l_auth_code
3672   		          , OUT l_trxn_date
3673   		          , OUT l_return_status
3674 		          , OUT l_msg_count
3675 		          , OUT l_msg_data
3676 				, OUT l_status
3677 				, OUT l_err_code
3678 				, OUT l_err_mesg
3679 				, OUT l_err_loc
3680 				, OUT l_bep_err_code
3681 				, OUT l_bep_err_mesg;
3682 
3683   -- After Executing the Block
3684   IF l_debug_level  > 0 THEN
3685       oe_debug_pub.add(  'OEXPVPMB: AFTER EXECUTING THE PL/SQL BLOCK' ) ;
3686   END IF;
3687   --
3688 
3689   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_status > 0 THEN
3690     --bug 4065891 commenting out the following code which checks for err_code = 'IBY_0008'
3691     -- Check if the Operation was Supported or not
3692 /*    IF  NVL(l_err_code, 'XXX') = 'IBY_0008' THEN
3693       l_return_status := FND_API.G_RET_STS_SUCCESS;
3694       IF l_debug_level  > 0 THEN
3695           oe_debug_pub.add(  'OEXPVPMB: OPERATION NOT SUPPORTED.' ) ;
3696       END IF;
3697 	 RETURN;
3698     END IF;
3699 */
3700 
3701     -- Message "The following error(s) occurred when calling iPayment for Credit Card Transaction :"
3702     FND_MESSAGE.SET_NAME('ONT','OE_VPM_IPAYMENT_ERROR');
3703     FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
3704     FND_MESSAGE.SET_TOKEN('ERRMESSAGE',l_err_mesg);
3705     FND_MESSAGE.SET_TOKEN('ERRLOCATION',l_err_loc);
3706     FND_MESSAGE.SET_TOKEN('BEPERRCODE',l_bep_err_code);
3707     FND_MESSAGE.SET_TOKEN('BEPERRMESSAGE',l_bep_err_mesg);
3708     OE_MSG_PUB.ADD;
3709 
3710     IF l_debug_level  > 0 THEN
3711         oe_debug_pub.add(  'OEXPVPMB: ERROR CODE : '||L_ERR_CODE ) ;
3712     END IF;
3713     IF l_debug_level  > 0 THEN
3714         oe_debug_pub.add(  'OEXPVPMB: ERROR MESSAGE : '||L_ERR_MESG ) ;
3715     END IF;
3716     IF l_debug_level  > 0 THEN
3717         oe_debug_pub.add(  'OEXPVPMB: BACK END PAYMENT SYSTEM ERRORS : ' ) ;
3718     END IF;
3719     IF l_debug_level  > 0 THEN
3720         oe_debug_pub.add(  'OEXPVPMB: ERROR LOCATION : '||L_ERR_LOC ) ;
3721     END IF;
3722     IF l_debug_level  > 0 THEN
3723         oe_debug_pub.add(  'OEXPVPMB: BEP ERR CODE : '||L_BEP_ERR_CODE ) ;
3724     END IF;
3725     IF l_debug_level  > 0 THEN
3726         oe_debug_pub.add(  'OEXPVPMB: BEP ERR MESG : '||L_BEP_ERR_MESG ) ;
3727     END IF;
3728 
3729     p_result_out := 'FAIL';
3730 
3731     RETURN;
3732 
3733   END IF;
3734 
3735   IF l_debug_level  > 0 THEN
3736       oe_debug_pub.add(  ' ' ) ;
3737   END IF;
3738   IF l_debug_level  > 0 THEN
3739       oe_debug_pub.add(  'OEXPVPMB: AUTHORIZATION SUCCEEDED ...' ) ;
3740   END IF;
3741 
3742   <<UPDATE_AUTH>>
3743   -- Update Payment Amount and Authorization Code and DATE
3744   IF l_debug_level  > 0 THEN
3745       oe_debug_pub.add(  'OEXPVPMB: BEFORE UPDATING AUTHORIZATION INFO' ) ;
3746       oe_debug_pub.add(  'OEXPVPMB: l_order_value is: '||l_order_value ) ;
3747       oe_debug_pub.add(  'OEXPVPMB: l_auth_code is: '||l_auth_code ) ;
3748   END IF;
3749   --
3750   OE_Verify_Payment_PUB.Update_Authorization_Info
3751 		       	    ( p_header_rec.header_id
3752                             , l_order_value
3753                             , l_auth_code
3754                             , l_trxn_date
3755                             , l_msg_count
3756                             , l_msg_data
3757                             , l_return_status
3758                             );
3759 
3760   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3761     p_result_out := 'FAIL';
3762     RETURN;
3763   END IF;
3764 
3765   IF l_debug_level  > 0 THEN
3766       oe_debug_pub.add(  'OEXPVPMB: RISK RESPONSE INCLUDED : '||L_RISKRESP_INCLUDED ) ;
3767   END IF;
3768 
3769   IF l_riskresp_included = 'YES' THEN
3770     l_risk_threshold := TO_NUMBER(NVL(fnd_profile.value('ONT_RISK_FAC_THRESHOLD'), '0')) ;
3771 
3772     IF l_debug_level  > 0 THEN
3773         oe_debug_pub.add(  'OEXPVPMB: RISK SCORE : '||L_RISK_SCORE ) ;
3774     END IF;
3775     IF l_debug_level  > 0 THEN
3776         oe_debug_pub.add(  'OEXPVPMB: OM RISK FACTOR THRESHOLD : '||L_RISK_THRESHOLD ) ;
3777     END IF;
3778 
3779     -- If Transaction is Risky, then apply credit card Risk hold.
3780     IF l_risk_score > l_risk_threshold THEN
3781 
3782          IF l_debug_level  > 0 THEN
3783              oe_debug_pub.add(  'OEXPVPMB: TRANSACTION WAS RISKY' ) ;
3784          END IF;
3785       -- Set the Out result to Risk to indicate a risky Transaction
3786 	 p_result_out := 'RISK' ;
3787 	 RETURN;
3788 
3789     END IF;
3790   END IF;
3791 
3792 
3793 
3794   EXCEPTION
3795 
3796     WHEN OTHERS THEN
3797 	 p_result_out := 'FAIL';
3798       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3799 
3800       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3801       THEN
3802         FND_MSG_PUB.Add_Exc_Msg
3803             (   G_PKG_NAME
3804             ,   'Authorize_Payment'
3805             );
3806       END IF;
3807 
3808       OE_MSG_PUB.Count_And_Get
3809             ( p_count => l_msg_count,
3810               p_data  => l_msg_data
3811             );
3812 
3813 
3814 END Authorize_Payment;
3815 
3816 /*----------------------------------------------------------------------
3817 Returns
3818 1. Last Authorization Transactions Associated to the Order
3819 2. Authorization Transaction currently associated to the Order
3820 3. The Order Total of Outbound Lines
3821 4. Flag to indicate if Reauthorization is required or Not
3822 5. Flag to indicate if the Current Transaction is Automatic or Manual
3823 ----------------------------------------------------------------------*/
3824 PROCEDURE Check_Reauthorize_Order
3825 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
3826 ,  p_void_trxn_id    OUT NOCOPY /* file.sql.39 change */  NUMBER
3827 ,  p_outbound_total  OUT NOCOPY /* file.sql.39 change */  NUMBER
3828 ,  p_reauthorize_out OUT NOCOPY /* file.sql.39 change */  VARCHAR2 )
3829 IS
3830 l_automatic_auth   VARCHAR2(1);
3831 l_outbound_total   NUMBER;
3832 l_captured_total   NUMBER;
3833 l_est_valid_days   NUMBER := 0 ;
3834 l_reauthorize_flag VARCHAR2(1);
3835 l_void_trxn_id     NUMBER;
3836 l_prepaid_total    NUMBER;
3837 l_commitment_total NUMBER;
3838 --
3839 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3840 --
3841 BEGIN
3842 
3843   IF l_debug_level  > 0 THEN
3844       oe_debug_pub.add(  'OEXPVPMB: IN CHECK REAUTHORIZE ORDER' ) ;
3845   END IF;
3846 
3847   -- Call Fetch Authorization Trxn
3848   IF l_debug_level  > 0 THEN
3849       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING FETCH AUTHORIZATION TRXN' ) ;
3850   END IF;
3851   --
3852   OE_Verify_Payment_PUB.Fetch_Authorization_Trxn
3853                           (  p_header_rec     => p_header_rec
3854                           ,  p_trxn_id        => l_void_trxn_id
3855                           ,  p_automatic_auth => l_automatic_auth
3856 					 );
3857 
3858   -- Fetch the Order Total Amount
3859   IF l_debug_level  > 0 THEN
3860       oe_debug_pub.add(  'OEXPVPMB: FETCH OUTBOUND LINES TOTAL' ) ;
3861   END IF;
3862   --
3863   p_outbound_total := OE_OE_TOTALS_SUMMARY.Outbound_Order_Total(p_header_rec.header_id);
3864 
3865 
3866   IF l_debug_level  > 0 THEN
3867       oe_debug_pub.add(  'OEXPVPMB: TOTAL VALUE OF OUTBOUND LINES : '||P_OUTBOUND_TOTAL ) ;
3868   END IF;
3869 
3870   /*
3871   ** Fix Bug # 2554360: OE_OE_TOTALS_SUMMARY.Outbound_Order_Total will now exclude closed
3872   ** lines. Following is not required as closed lines will be considered captured.
3873   -- Fetch the Captured Amount Total
3874   OE_DEBUG_PUB.ADD('OEXPVPMB: Fetch Captured Amount Total');
3875   --
3876   l_captured_total := OE_Verify_Payment_PUB.Captured_Amount_Total(p_header_rec.header_id);
3877   OE_DEBUG_PUB.ADD('OEXPVPMB: Total Amount already Captured : '||l_captured_total);
3878 
3879   -- Uncaptured outbound Total is
3880   p_outbound_total := l_outbound_total - l_captured_total;
3881   */
3882 
3883   -- Check the Following only if Outbound Total is greater than 0
3884   IF p_outbound_total > 0 THEN
3885 
3886     -- Credit Card Approval Code is NOT NULL
3887     IF l_debug_level  > 0 THEN
3888         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING CC APPROVAL CODE' ) ;
3889     END IF;
3890     --
3891     IF p_header_rec.credit_card_approval_code IS NOT NULL THEN
3892 
3893       -- Fetch the value for profile "OM: Estimated Authorization Validity Period"
3894       -- This is required to estimate the validity of existing Authorizations.
3895       IF l_debug_level  > 0 THEN
3896           oe_debug_pub.add(  'OEXPVPMB: FETCHING VALUE FOR OM: ESTIMATED AUTHORIZATION VALIDITY PERIOD' ) ;
3897       END IF;
3898       --
3899       l_est_valid_days := to_number( nvl(fnd_profile.value('ONT_EST_AUTH_VALID_DAYS'), '0') ) ;
3900 
3901       IF l_debug_level  > 0 THEN
3902           oe_debug_pub.add(  'OEXPVPMB: OM: ESTIMATED AUTHORIZATION VALIDITY PERIOD : '|| L_EST_VALID_DAYS ) ;
3903       END IF;
3904 
3905       -- If the Authorization was taken Automatically using iPayment
3906       --
3907       IF l_automatic_auth = 'Y' THEN
3908 
3909         IF l_debug_level  > 0 THEN
3910             oe_debug_pub.add(  'OEXPVPMB: IT IS AN AUTOMATIC AUTHORIZATION' ) ;
3911         END IF;
3912 
3913         -- If Transaction has already been captured then
3914 	   IF (OE_Verify_Payment_PUB.Check_Trxn_Captured(l_void_trxn_id) = 'Y') THEN
3915 
3916           IF l_debug_level  > 0 THEN
3917               oe_debug_pub.add(  'OEXPVPMB: CURRENT AUTH CAPTURED , REAUTHORIZE' ) ;
3918           END IF;
3919           l_reauthorize_flag := 'Y' ;
3920 	     l_void_trxn_id := 0 ;
3921 
3922         /*
3923         ** Fix for 1967295:
3924         ** As VOID has been de-supported by iPayment, commenting
3925         ** following code which was used to VOID existing Trxns.
3926         **
3927         -- If Order Total is greater than previously Authorized Amount.
3928         ELSIF ( p_outbound_total > nvl(p_header_rec.payment_amount, 0) ) THEN
3929 
3930           OE_DEBUG_PUB.ADD('OEXPVPMB: Current Auth is for amount lesser than Order Total, reauthorize ');
3931           l_reauthorize_flag := 'Y' ;
3932         */
3933 
3934         -- If based on the estimated authorization validity period,
3935         -- the authorization has expired then reauthorize.
3936         ELSIF ( p_header_rec.credit_card_approval_date + l_est_valid_days <= SYSDATE ) THEN
3937 
3938           IF l_debug_level  > 0 THEN
3939               oe_debug_pub.add(  'OEXPVPMB: CURRENT AUTH EXPIRED , REAUTHORIZE' ) ;
3940           END IF;
3941           l_reauthorize_flag := 'Y' ;
3942 
3943 	   ELSE
3944 
3945 	     -- Niether the Order should be reauthorized nor the existing transaction should be voided.
3946           IF l_debug_level  > 0 THEN
3947               oe_debug_pub.add(  'OEXPVPMB: NO NEED TO REAUTHORIZE OR VOID EXISTING TRANSACTION' ) ;
3948           END IF;
3949           l_reauthorize_flag := 'N' ;
3950 	     l_void_trxn_id := 0 ;
3951 
3952         END IF;
3953 
3954       ELSE -- Manual Authorization
3955 
3956         IF l_debug_level  > 0 THEN
3957             oe_debug_pub.add(  'OEXPVPMB: IT IS A MANUAL AUTHORIZATION' ) ;
3958         END IF;
3959 
3960 	   --
3961 	   -- Check if Manual Auth is still valid, use Estimated Validity Period.
3962         IF l_debug_level  > 0 THEN
3963             oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING VALIDITITY OF MANUAL AUTHORIZATION' ) ;
3964         END IF;
3965 	   --
3966 	   IF    p_header_rec.credit_card_approval_date is NOT NULL
3967 	   AND ( p_header_rec.credit_card_approval_date + l_est_valid_days ) > SYSDATE THEN
3968 
3969           -- Set Reauthorize Flag to 'N', as manual Authorization is valid
3970           IF l_debug_level  > 0 THEN
3971               oe_debug_pub.add(  'OEXPVPMB: MANUAL AUTHORIZATION IS STILL VALID , VOID EXISTING AUTOMATIC AUTH' ) ;
3972           END IF;
3973 	     --
3974 	     l_reauthorize_flag := 'V' ; -- Now this procedure returns V to setup Voice Auth
3975 
3976         ELSE
3977 
3978           IF l_debug_level  > 0 THEN
3979               oe_debug_pub.add(  'OEXPVPMB: THE ORDER SHOULD BE REAUTHORIZED' ) ;
3980           END IF;
3981 	     l_reauthorize_flag := 'Y' ;
3982 
3983         END IF; -- Approval DATE Validity
3984 
3985         IF l_debug_level  > 0 THEN
3986             oe_debug_pub.add(  'OEXPVPMB: AFTER CHECKING VALIDITITY OF MANUAL AUTHORIZATION' ) ;
3987         END IF;
3988 
3989       END IF; -- Manual/Automatic Authorization
3990 
3991       IF l_debug_level  > 0 THEN
3992           oe_debug_pub.add(  'OEXPVPMB: END OF MANUAL AUTHORIZATION' ) ;
3993       END IF;
3994 
3995     ELSE
3996 
3997       l_reauthorize_flag := 'Y' ;
3998 
3999     END IF; -- Order NOT Authorized OR Approval Code Cleared due to some attribute change.
4000 
4001   ELSE
4002 
4003     -- If Outbound Total is <= 0 then NO need to Reauthorize
4004     l_reauthorize_flag := 'N';
4005 
4006   END IF; -- IF Outbound Total
4007 
4008   p_reauthorize_out := l_reauthorize_flag ;
4009   p_void_trxn_id    := 0 ;
4010 --  p_outbound_total  := l_outbound_total ;
4011 
4012 END Check_Reauthorize_Order;
4013 
4014 /*----------------------------------------------------------------------
4015 Returns TRUE if all the Required Attributes exists else returns FALSE.
4016 ----------------------------------------------------------------------*/
4017 FUNCTION Validate_Required_Attributes
4018 (  p_header_rec  IN  OE_Order_Pub.Header_Rec_Type )
4019 RETURN BOOLEAN
4020 IS
4021 l_result BOOLEAN := TRUE;
4022 --
4023 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4024 --
4025 BEGIN
4026 
4027   IF l_debug_level  > 0 THEN
4028       oe_debug_pub.add(  'OEXPVPMB: IN VALIDATE REQUIRED ATTRIBUTES' ) ;
4029   END IF;
4030 
4031   -- Check For all Required Attributes
4032   IF p_header_rec.invoice_to_org_id is NULL THEN
4033     FND_MESSAGE.SET_NAME('ONT','OE_VPM_INV_TO_REQUIRED');
4034     OE_MSG_PUB.ADD;
4035     IF l_debug_level  > 0 THEN
4036         oe_debug_pub.add(  'OEXPVPMB: INVOICE_TO_ORG_ID IS REQUIRED' ) ;
4037     END IF;
4038     l_result := FALSE;
4039   ELSIF p_header_rec.credit_card_number is NULL THEN
4040     --R12 CC Encryption
4041     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_NUM_REQUIRED');
4042     OE_MSG_PUB.ADD;
4043     IF l_debug_level  > 0 THEN
4044         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_NUMBER IS REQUIRED' ) ;
4045     END IF;
4046     l_result := FALSE;
4047   ELSIF p_header_rec.credit_card_expiration_date is NULL THEN
4048     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_EXP_DT_REQUIRED');
4049     OE_MSG_PUB.ADD;
4050     IF l_debug_level  > 0 THEN
4051         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_EXPIRATION_DATE IS REQUIRED' ) ;
4052     END IF;
4053     l_result := FALSE;
4054   ELSIF p_header_rec.credit_card_holder_name is NULL THEN
4055     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_HOLDER_REQUIRED');
4056     OE_MSG_PUB.ADD;
4057     IF l_debug_level  > 0 THEN
4058         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_HOLDER_NAME IS REQUIRED' ) ;
4059     END IF;
4060     l_result := FALSE;
4061   ELSE
4062     l_result := TRUE;
4063   END IF;
4064 
4065   IF l_debug_level  > 0 THEN
4066       oe_debug_pub.add(  'OEXPVPMB: EXITING VALIDATE REQUIRED ATTRIBUTES' ) ;
4067   END IF;
4068   RETURN l_result;
4069 
4070 END Validate_Required_Attributes;
4071 
4072 /*----------------------------------------------------------------------
4073 Returns Primary Payment Method for the Customer
4074 ----------------------------------------------------------------------*/
4075 FUNCTION Get_Primary_Pay_Method
4076 (  p_header_rec  IN  OE_Order_PUB.Header_Rec_Type )
4077 RETURN NUMBER
4078 IS
4079 l_cc_only  BOOLEAN := TRUE ;
4080 l_pay_method_id       NUMBER := 0;
4081 l_cust_pay_method_id  NUMBER := 0 ;
4082 --
4083 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4084 
4085 l_as_of_date        DATE; --bug 3881076
4086 --
4087 BEGIN
4088 
4089   IF l_debug_level  > 0 THEN
4090       oe_debug_pub.add(  'OEXPVPMB: IN GET PRIMARY PAY METHOD' ) ;
4091   END IF;
4092 
4093   -- Get Primary Receipt Method Id for this Customer, Site
4094   IF l_debug_level  > 0 THEN
4095       oe_debug_pub.add(  'OEXPVPMB: to get primary pay method.' ) ;
4096   END IF;
4097   --
4098 
4099   /* Changed code to query from AR table directly for R12 cc encryption
4100   l_pay_method_id := arp_bank_pkg.get_primary_pay_method
4101                                  ( p_customer_id => p_header_rec.sold_to_org_id
4102                                  , p_site_use_id => p_header_rec.invoice_to_org_id
4103 				 , p_cc_only     => l_cc_only
4104 				 , p_as_of_date  => sysdate
4105                                  );
4106   */
4107 
4108   BEGIN
4109     --bug 5204358
4110     --Changed the query to retrieve the receipt_method_id instead of
4111     --cust_receipt_method id as the pay method id corresponds to receipt_method_id
4112     SELECT receipt_method_id
4113     INTO   l_pay_method_id
4114     FROM   ra_cust_receipt_methods rm
4115     WHERE  rm.customer_id = p_header_rec.sold_to_org_id
4116     AND    rm.SITE_USE_ID = NVL( p_header_rec.invoice_to_org_id, -1)
4117     AND    sysdate BETWEEN rm.start_date AND NVL(rm.end_date, sysdate)
4118     AND    primary_flag = 'Y';
4119   EXCEPTION WHEN NO_DATA_FOUND THEN
4120     null;
4121   END;
4122 
4123   IF l_debug_level  > 0 THEN
4124       oe_debug_pub.add(  'OEXPVPMB: PRIMARY PAYMENT METHOD ID AT SITE LEVEL: '||L_PAY_METHOD_ID ) ;
4125   END IF;
4126 
4127   -- Fix Bug # 2256571
4128   -- If No Primary Payment Method set at SITE level, check at CUSTOMER Level.
4129 
4130   IF NVL(l_pay_method_id, 0) <= 0 THEN
4131     /* Changed code to query from AR table directly for R12 cc encryption
4132     l_pay_method_id := arp_bank_pkg.get_primary_pay_method
4133                                   ( p_customer_id => p_header_rec.sold_to_org_id
4134                                   , p_site_use_id => null
4135                                   , p_cc_only     => l_cc_only
4136                                   , p_as_of_date  => sysdate
4137                                   );
4138      */
4139 
4140     BEGIN
4141       --bug 5204358
4142       --Changed the query to retrieve the receipt_method_id instead of
4143       --cust_receipt_method id as the pay method id corresponds to receipt_method_id
4144       SELECT receipt_method_id
4145       INTO   l_pay_method_id
4146       FROM   ra_cust_receipt_methods rm
4147       WHERE  rm.customer_id = p_header_rec.sold_to_org_id
4148       AND    rm.SITE_USE_ID IS NULL
4149       AND    sysdate BETWEEN rm.start_date AND NVL(rm.end_date, sysdate)
4150       AND    primary_flag = 'Y';
4151     EXCEPTION WHEN NO_DATA_FOUND THEN
4152       null;
4153     END;
4154 
4155     IF l_debug_level  > 0 THEN
4156       oe_debug_pub.add('OEXPVPMB: PRIMARY PAYMENT METHOD ID AT CUSTOMER LEVEL: '||L_PAY_METHOD_ID ) ;
4157     END IF;
4158   END IF;
4159 
4160  /* comment out for R12 cc encryption
4161   -- Check if Primary Payment Method valid
4162   IF NVL(l_pay_method_id, 0) <= 0 THEN
4163     -- Fetch the Receipt Method ID from OM Profile Option
4164     IF l_debug_level  > 0 THEN
4165         oe_debug_pub.add(  'OEXPVPMB: FETCHING PAYMENT METHOD ID FROM PROFILE OPTION' ) ;
4166     END IF;
4167     --
4168     l_pay_method_id := to_number(nvl(fnd_profile.value('ONT_RECEIPT_METHOD_ID'), '0')) ;
4169     --
4170     IF l_debug_level  > 0 THEN
4171         oe_debug_pub.add(  'OEXPVPMB: PROFILE PAYMENT METHOD ID IS : '||L_PAY_METHOD_ID ) ;
4172     END IF;
4173 
4174     IF l_pay_method_id > 0 THEN
4175       -- Assign the Payment Method as Primary if setup in Profile
4176       IF l_debug_level  > 0 THEN
4177           oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING ARP_BANK_PKG.PROCESS_CUST_PAY_METHOD' ) ;
4178       END IF;
4179 
4180       -- comment out the code for R12 cc encryption project
4181       -- Fixed for the FP bug 3881076
4182       -- l_as_of_date := nvl(p_header_rec.ordered_date, sysdate)
4183       --               - nvl(to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);
4184 
4185       l_cust_pay_method_id := arp_bank_pkg.process_cust_pay_method
4186                               ( p_pay_method_id => l_pay_method_id
4187                               , p_customer_id   => p_header_rec.sold_to_org_id
4188                               , p_site_use_id   => p_header_rec.invoice_to_org_id
4189                            -- , p_as_of_date    => l_as_of_date --bug 3881076
4190                               , p_as_of_date    => sysdate
4191                               );
4192     END IF;
4193     END IF;
4194     */
4195 
4196   RETURN (l_pay_method_id);
4197 
4198 
4199 END Get_Primary_Pay_Method ;
4200 
4201 /*----------------------------------------------------------------------
4202 Returns Payment Method Details for a given Receipt Method Id
4203 ----------------------------------------------------------------------*/
4204 PROCEDURE Get_Pay_Method_Info
4205 (   p_pay_method_id   IN   NUMBER
4206 ,   p_pay_method_name OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4207 ,   p_merchant_id     OUT NOCOPY /* file.sql.39 change */  NUMBER
4208 )
4209 IS
4210 --
4211 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4212 --
4213 BEGIN
4214 
4215   IF l_debug_level  > 0 THEN
4216       oe_debug_pub.add(  'OEXPVPMB: IN GET PAY METHOD INFO' ) ;
4217   END IF;
4218 
4219   -- Fetch Pay Method Name and Merchant Id based on Pay Method ID
4220   IF l_debug_level  > 0 THEN
4221       oe_debug_pub.add(  'OEXPVPMB: BEFORE FETCHING THE DETAILS' ) ;
4222   END IF;
4223   --
4224   begin
4225     SELECT
4226       name
4227     , null
4228     INTO
4229       p_pay_method_name
4230     , p_merchant_id
4231     FROM  AR_RECEIPT_METHODS
4232     WHERE RECEIPT_METHOD_ID = p_pay_method_id
4233     AND   SYSDATE >= NVL(START_DATE, SYSDATE)
4234     AND   SYSDATE <= NVL(END_DATE, SYSDATE)
4235     AND   PAYMENT_TYPE_CODE = 'CREDIT_CARD';
4236     EXCEPTION
4237       WHEN OTHERS THEN
4238         NULL;
4239   end;
4240 
4241 END Get_Pay_Method_Info ;
4242 
4243 /*--------------------------------------------------------------
4244 Voids an uncaptured authorization transaction
4245 --------------------------------------------------------------*/
4246 PROCEDURE Void_Payment
4247 (   p_void_trxn_id      IN   NUMBER
4248 ,   p_msg_count         OUT NOCOPY /* file.sql.39 change */  NUMBER
4249 ,   p_msg_data          OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4250 ,   p_return_status     OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4251 ,   p_void_supported    OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4252 )
4253 IS
4254 l_block_str      VARCHAR2(2000);
4255 l_msg_count      NUMBER := 0 ;
4256 l_msg_data       VARCHAR2(2000) := NULL ;
4257 l_return_status  VARCHAR2(30) := NULL ;
4258 l_status         NUMBER;
4259 l_err_code       VARCHAR2(80);
4260 l_err_mesg       VARCHAR2(255);
4261 l_bep_err_code   VARCHAR2(80);
4262 l_bep_err_mesg   VARCHAR2(255);
4263 l_err_loc        NUMBER;
4264 --
4265 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4266 --
4267 BEGIN
4268 
4269   p_return_status := FND_API.G_RET_STS_SUCCESS;
4270   p_void_supported:= 'Y';
4271 
4272   IF l_debug_level  > 0 THEN
4273       oe_debug_pub.add(  'OEXPVPMB: IN VOID PAYMENT' ) ;
4274   END IF;
4275 
4276 
4277   -- Return if Trxn has already been captured
4278   IF ( OE_Verify_Payment_PUB.Check_Trxn_Captured(p_void_trxn_id) = 'Y' ) THEN
4279     RETURN;
4280   END IF;
4281 
4282   -- Create the Dynamic SQL to Call the iPayment API
4283   IF l_debug_level  > 0 THEN
4284       oe_debug_pub.add(  'OEXPVPMB: CREATING DYNAMIC SQL TO CALL IPAYMENT API ORAPMTVOID' ) ;
4285   END IF;
4286   --
4287   l_block_str:= 'DECLARE
4288       /**** Declaration Section ****/
4289         l_ecapp_id      INTEGER := 660;
4290         l_voidtrxn_rec  IBY_Payment_Adapter_PUB.VoidTrxn_Rec_Type;
4291         l_voidresp_rec  IBY_Payment_Adapter_PUB.VoidResp_Rec_Type;
4292 	   l_return_status VARCHAR2(30);
4293 	   l_msg_count     NUMBER;
4294 	   l_msg_data      VARCHAR2(2000);
4295       BEGIN
4296 
4297       /**** Setup Void Record ****/
4298         l_voidtrxn_rec.pmtmode  := ''ONLINE'';
4299         l_voidtrxn_rec.trxn_id  := :void_trxn_id;
4300         l_voidtrxn_rec.trxn_type:= 2; /* ID for Voiding AUTHONLY Trxn */
4301 
4302       /**** Setup Call to iPayment API OraPmtVoid for Trxn Void ****/
4303         IBY_Payment_Adapter_PUB.OraPmtVoid
4304         (  p_api_version   => 1.0
4305         ,  p_ecapp_id      => l_ecapp_id
4306         ,  p_voidtrxn_rec  => l_voidtrxn_rec
4307         ,  x_return_status => l_return_status
4308         ,  x_msg_count     => l_msg_count
4309         ,  x_msg_data      => l_msg_data
4310         ,  x_voidresp_rec  => l_voidresp_rec
4311 	   );
4312 
4313       /**** Return all the Responses so as to Handle Output of OraPmtReq ****/
4314 
4315         :return_status := l_return_status;
4316         :msg_count     := l_msg_count;
4317         :msg_data      := l_msg_data;
4318         :status        := NVL(l_voidresp_rec.response.status,0);
4319 	   :err_code      := l_voidresp_rec.response.errcode;
4320 	   :err_mesg      := l_voidresp_rec.response.errmessage;
4321         :err_loc       := l_voidresp_rec.errorlocation;
4322 	   :bep_err_code  := l_voidresp_rec.beperrcode;
4323 	   :bep_err_mesg  := l_voidresp_rec.beperrmessage;
4324 
4325       END;';
4326 
4327   -- PL/SQL Block for call to iPayment
4328   IF l_debug_level  > 0 THEN
4329       oe_debug_pub.add(  L_BLOCK_STR ) ;
4330   END IF;
4331   --
4332 
4333   -- Before Executing the Block
4334   IF l_debug_level  > 0 THEN
4335       oe_debug_pub.add(  'OEXPVPMB: BEFORE EXECUTING THE PL/SQL BLOCK' ) ;
4336   END IF;
4337   --
4338   EXECUTE IMMEDIATE l_block_str
4339 		    USING   IN p_void_trxn_id
4340 			    , OUT l_return_status
4341 			    , OUT l_msg_count
4342 			    , OUT l_msg_data
4343 			    , OUT l_status
4344 			    , OUT l_err_code
4345 			    , OUT l_err_mesg
4346 			    , OUT l_err_loc
4347 			    , OUT l_bep_err_code
4348 			    , OUT l_bep_err_mesg;
4349 
4350   -- After Executing the Block
4351   IF l_debug_level  > 0 THEN
4352       oe_debug_pub.add(  'OEXPVPMB: AFTER EXECUTING THE PL/SQL BLOCK' ) ;
4353   END IF;
4354   --
4355 
4356   -- Check the Response Status to ensure that there are NO errors
4357   IF l_status > 0 THEN
4358 
4359     -- Check if the Operation was Supported or not
4360     IF  NVL(l_err_code, 'XXX') = 'IBY_0008' THEN
4361       l_return_status := FND_API.G_RET_STS_SUCCESS;
4362 	 p_void_supported:= 'N';
4363       IF l_debug_level  > 0 THEN
4364           oe_debug_pub.add(  'OEXPVPMB: VOID TRANSACTION NOT SUPPORTED.' ) ;
4365       END IF;
4366 	 RETURN;
4367     ELSE
4368       l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4369     END IF;
4370   END IF;
4371 
4372   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4373 
4374     -- Message "The following error(s) occurred when calling iPayment for Credit Card Transaction :"
4375     FND_MESSAGE.SET_NAME('ONT','OE_VPM_IPAYMENT_ERROR');
4376     FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4377     FND_MESSAGE.SET_TOKEN('ERRMESSAGE',l_err_mesg);
4378     FND_MESSAGE.SET_TOKEN('ERRLOCATION',l_err_loc);
4379     FND_MESSAGE.SET_TOKEN('BEPERRCODE',l_bep_err_code);
4380     FND_MESSAGE.SET_TOKEN('BEPERRMESSAGE',l_bep_err_mesg);
4381     OE_MSG_PUB.ADD;
4382 
4383     IF l_debug_level  > 0 THEN
4384         oe_debug_pub.add(  'OEXPVPMB: ERROR CODE : '||L_ERR_CODE ) ;
4385     END IF;
4386     IF l_debug_level  > 0 THEN
4387         oe_debug_pub.add(  'OEXPVPMB: ERROR MESSAGE : '||L_ERR_MESG ) ;
4388     END IF;
4389     IF l_debug_level  > 0 THEN
4390         oe_debug_pub.add(  'OEXPVPMB: BACK END PAYMENT SYSTEM ERRORS : ' ) ;
4391     END IF;
4392     IF l_debug_level  > 0 THEN
4393         oe_debug_pub.add(  'OEXPVPMB: BEP ERR LOCATION : '||L_ERR_LOC ) ;
4394     END IF;
4395     IF l_debug_level  > 0 THEN
4396         oe_debug_pub.add(  'OEXPVPMB: BEP ERR CODE : '||L_BEP_ERR_CODE ) ;
4397     END IF;
4398     IF l_debug_level  > 0 THEN
4399         oe_debug_pub.add(  'OEXPVPMB: BEP ERR MESG : '||L_BEP_ERR_MESG ) ;
4400     END IF;
4401 
4402     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4403 
4404   END IF;
4405 
4406   EXCEPTION
4407 
4408     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4409       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4410       OE_MSG_PUB.Count_And_Get
4411             ( p_count => l_msg_count,
4412               p_data  => l_msg_data
4413             );
4414 
4415     WHEN OTHERS THEN
4416       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4417       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4418       THEN
4419         FND_MSG_PUB.Add_Exc_Msg
4420             (   G_PKG_NAME
4421             ,   'Void_Payment'
4422             );
4423       END IF;
4424 
4425       OE_MSG_PUB.Count_And_Get
4426             ( p_count => l_msg_count,
4427               p_data  => l_msg_data
4428             );
4429 
4430 END Void_Payment ;
4431 
4432 /*----------------------------------------------------------------------
4433 This Function takes Transaction Id as input parameter and returns 'Y'
4434 if Transaction has already been captured in iPayment.
4435 ----------------------------------------------------------------------*/
4436 FUNCTION Check_Trxn_Captured
4437 ( p_trxn_id  IN  NUMBER)
4438 RETURN VARCHAR2
4439 IS
4440 l_captured_flag VARCHAR2(1) := 'N';
4441 l_sql_stmt      VARCHAR2(1000) := NULL;
4442 --
4443 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4444 --
4445 BEGIN
4446 
4447   IF l_debug_level  > 0 THEN
4448       oe_debug_pub.add(  'OEXPVPMB: IN CHECK TRANSACTION CAPTURED' ) ;
4449   END IF;
4450   -- Create the query string
4451   IF l_debug_level  > 0 THEN
4452       oe_debug_pub.add(  'OEXPVPMB: SQL STATEMENT TO CHECK IF TRANSACTION HAS BEEN CAPTURED' ) ;
4453   END IF;
4454   --
4455   l_sql_stmt := 'SELECT ''Y'' FROM   IBY_TRANS_ALL_V
4456                  WHERE  TRANSACTIONID = :trxn_id
4457                  AND  ((REQTYPE = ''ORAPMTCAPTURE'')
4458 				OR (REQTYPE = ''ORAPMTREQ'' AND AUTHTYPE = ''AUTHCAPTURE''))
4459                  AND    NVL(AMOUNT, 0) > 0
4460 			  AND    ROWNUM = 1';
4461 
4462   --OE_DEBUG_PUB.ADD(l_sql_stmt);
4463 
4464   begin
4465     EXECUTE IMMEDIATE l_sql_stmt
4466                  INTO l_captured_flag
4467     	           USING p_trxn_id ;
4468     EXCEPTION
4469 	 WHEN NO_DATA_FOUND THEN
4470 	   l_captured_flag := 'N';
4471   end;
4472 
4473   RETURN (l_captured_flag);
4474 
4475 END Check_Trxn_Captured ;
4476 
4477 /*----------------------------------------------------------------------
4478 Returns 'Y' if this authorization was taken through iPayment else 'N'.
4479 Also returns the Transaction ID.
4480 ----------------------------------------------------------------------*/
4481 PROCEDURE Fetch_Authorization_Trxn
4482 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
4483 ,  p_trxn_id         OUT NOCOPY /* file.sql.39 change */  NUMBER
4484 ,  p_automatic_auth  OUT NOCOPY /* file.sql.39 change */  VARCHAR2 )
4485 IS
4486 l_trxn_id     NUMBER;
4487 l_tangible_id VARCHAR2(80);
4488 --
4489 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4490 --
4491 BEGIN
4492 
4493   IF l_debug_level  > 0 THEN
4494       oe_debug_pub.add(  'OEXPVPMB: IN FETCH AUTHORIZATION TRANSACTION' ) ;
4495   END IF;
4496 
4497   -- Check if Authorization Code of the Order is NOT NULL
4498   IF p_header_rec.credit_card_approval_code IS NOT NULL THEN
4499     -- Call Fetch Current Auth
4500     IF l_debug_level  > 0 THEN
4501         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING FETCH CURRENT AUTH' ) ;
4502     END IF;
4503     --
4504     OE_Verify_Payment_PUB.Fetch_Current_Auth
4505 						( p_header_rec  => p_header_rec
4506 						, p_trxn_id     => l_trxn_id
4507 						, p_tangible_id => l_tangible_id
4508 						);
4509 
4510     IF l_trxn_id > 0 THEN
4511       p_automatic_auth := 'Y' ;
4512 	 p_trxn_id := l_trxn_id ;
4513     ELSE
4514       p_automatic_auth := 'N' ;
4515     END IF;
4516 
4517   END IF;
4518 
4519   -- If Credit Card Approval Code is NULL OR Current Authorization is Manual
4520   -- then select the last authorized transaction for this order. This will
4521   -- ensure that any existing  automatic authorizations are voided in case of
4522   -- reauthorization and valid manual authorizations.
4523   --
4524   /*
4525   ** Since VOIDS are no more supported, following call to fetch
4526   ** last authorization is unnecessary.
4527   ** Procedure Fetch_Last_Auth will now be used to find out the
4528   ** last authorization which might have been taken but was not
4529   ** updated on the order header due to some errors.
4530   **
4531   IF  p_header_rec.credit_card_approval_code IS NULL
4532   OR  p_automatic_auth = 'N' THEN
4533 
4534     -- Call Last Current Auth
4535     OE_DEBUG_PUB.ADD('OEXPVPMB: Before calling Fetch Last Auth');
4536     --
4537     OE_Verify_Payment_PUB.Fetch_Last_Auth
4538 						( p_header_rec  => p_header_rec
4539 						, p_trxn_id     => l_trxn_id
4540 						, p_tangible_id => l_tangible_id
4541 						);
4542 
4543     IF l_trxn_id > 0 THEN
4544 	 p_trxn_id := l_trxn_id ;
4545     END IF;
4546   END IF;
4547   */
4548 
4549 END Fetch_Authorization_Trxn;
4550 
4551 /*----------------------------------------------------------------------
4552 Fetches the authorization details for the approval code on the Order.
4553 ----------------------------------------------------------------------*/
4554 PROCEDURE Fetch_Current_Auth
4555 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
4556 ,  p_line_id	     IN NUMBER DEFAULT NULL
4557 ,  p_auth_code	     IN VARCHAR2 DEFAULT NULL
4558 ,  p_auth_date	     IN DATE DEFAULT NULL
4559 ,  p_trxn_id         OUT NOCOPY /* file.sql.39 change */  NUMBER
4560 ,  p_tangible_id     OUT NOCOPY /* file.sql.39 change */  VARCHAR2 )
4561 IS
4562 l_sql_stmt    VARCHAR2(5000) := NULL;
4563 l_ref_info    VARCHAR2(80);
4564 l_credit_card_approval_code	VARCHAR2(80);
4565 l_credit_card_approval_date     DATE;
4566 --
4567 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4568 --
4569 BEGIN
4570 
4571   IF l_debug_level  > 0 THEN
4572       oe_debug_pub.add(  'OEXPVPMB: IN FETCH CURRENT AUTHORIZATION' ) ;
4573   END IF;
4574 
4575   IF p_line_id IS NOT NULL THEN
4576     l_ref_info := TO_CHAR(p_line_id);
4577     l_credit_card_approval_code := p_auth_code;
4578     l_credit_card_approval_date := p_auth_date;
4579   ELSE
4580     l_ref_info := TO_CHAR(p_header_rec.header_id);
4581     IF p_auth_code IS NOT NULL THEN
4582       l_credit_card_approval_code := p_auth_code;
4583       l_credit_card_approval_date := p_auth_date;
4584     ELSE
4585       l_credit_card_approval_code := p_header_rec.credit_card_approval_code;
4586       l_credit_card_approval_date := p_header_rec.credit_card_approval_date;
4587     END IF;
4588   END IF;
4589 
4590   -- Check if Authorization Code of the Order is NOT NULL
4591   IF l_credit_card_approval_code IS NOT NULL THEN
4592 
4593     -- If the Order was neither entered through UI nor copied
4594     -- then only update the REFINFO column.
4595     IF ( ( NVL(p_header_rec.order_source_id, 0 ) > 0
4596 	      AND p_header_rec.order_source_id <> 2 )
4597     OR  ( NVL(p_header_rec.source_document_type_id, 0 ) > 0
4598 	     AND p_header_rec.source_document_type_id <> 2 ) ) THEN
4599 
4600       -- Update REFINFO with Order HEADER_ID if not updated yet.
4601       IF l_debug_level  > 0 THEN
4602           oe_debug_pub.add(  'OEXPVPMB: SQL STMT TO UPDATE REFINFO WITH HEADER_ID' ) ;
4603       END IF;
4604       --
4605       /* Bug 6700106
4606          l_sql_stmt := 'UPDATE IBY_TANGIBLE IT
4607                      SET    IT.REFINFO  = :ref_info1
4608                      WHERE  IT.TANGIBLEID IN
4609                            (SELECT DISTINCT ITAV.TANGIBLEID
4610                             FROM   IBY_TRANS_ALL_V ITAV
4611                             WHERE  ITAV.REQTYPE    = ''ORAPMTREQ''
4612                             AND    ITAV.ECAPPID   != 660
4613                             AND    ITAV.AUTHCODE   = :auth_code
4614                             AND    trunc(ITAV.UPDATEDATE) = trunc(:auth_date) --5932506
4615                             AND   (ITAV.REFINFO    IS NULL
4616                              OR    ITAV.REFINFO   != :ref_info2))';
4617 
4618       --OE_DEBUG_PUB.ADD(l_sql_stmt);
4619 
4620       begin
4621         EXECUTE IMMEDIATE l_sql_stmt
4622 	               USING l_ref_info
4623 				,     l_credit_card_approval_code
4624                     ,     l_credit_card_approval_date
4625                     ,     l_ref_info;
4626       Bug 6700106 */
4627 
4628 -- Bug 6700106
4629 
4630    	BEGIN
4631              /*  UPDATE IBY_TANGIBLE IT
4632 	                      SET  IT.REFINFO  = l_ref_info
4633 	                      WHERE  IT.TANGIBLEID IN
4634 	                       (SELECT DISTINCT ITAV.TANGIBLEID
4635 	                       FROM   IBY_TRANS_ALL_V ITAV
4636 	                       WHERE  ITAV.REQTYPE    = 'ORAPMTREQ'
4637 	                       AND    ITAV.ECAPPID   <> 660
4638 	                       AND    ITAV.AUTHCODE   = l_credit_card_approval_code
4639 	                       AND    trunc(ITAV.UPDATEDATE) = trunc(l_credit_card_approval_date) --5932506
4640 	                       AND   (ITAV.REFINFO IS NULL
4641                                 OR    ITAV.REFINFO <> l_ref_info));
4642 	     */
4643 --Bug 6770094
4644                UPDATE IBY_TANGIBLE IT
4645                      SET    IT.REFINFO  = l_ref_info
4646                      WHERE  IT.TANGIBLEID IN
4647                            (SELECT DISTINCT ITAV.TANGIBLEID
4648                             FROM   IBY_TRANS_ALL_V ITAV
4649                             WHERE  ITAV.REQTYPE    = 'ORAPMTREQ'
4650                             AND    ITAV.AUTHCODE   = l_credit_card_approval_code
4651                             AND    trunc(ITAV.UPDATEDATE) = trunc(l_credit_card_approval_date)
4652                             AND  ((    ITAV.ECAPPID  = 697
4653                                    AND ITAV.REFINFO  = p_header_rec.source_document_id)
4654                              OR   (    ITAV.ECAPPID  NOT IN (660, 697, 222, 673)
4655                                    AND NVL(ITAV.REFINFO, -99) <> l_ref_info)));
4656 --Bug 6770094
4657 
4658 -- Bug 6700106
4659 
4660 
4661         IF l_debug_level  > 0 THEN
4662             oe_debug_pub.add(  'OEXPVPMB: UPDATED '||SQL%ROWCOUNT||' ROWS.' ) ;
4663         END IF;
4664 
4665         EXCEPTION
4666 	     WHEN OTHERS THEN
4667             IF l_debug_level  > 0 THEN
4668                 oe_debug_pub.add(  'OEXPVPMB: UNEXPECTED ERROR UPDATING REFINFO.' ) ;
4669             END IF;
4670             IF l_debug_level  > 0 THEN
4671                 oe_debug_pub.add(  'OEXPVPMB: ERROR: '||SQLERRM ) ;
4672             END IF;
4673             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4674       end;
4675 
4676     END IF;
4677 
4678     -- Create the query string
4679     IF l_debug_level  > 0 THEN
4680         oe_debug_pub.add(  'OEXPVPMB: SQL STATEMENT TO FETCH TRXN BASED ON ORDER AUTH CODE' ) ;
4681     END IF;
4682     --
4683     l_sql_stmt := 'SELECT TRANSACTIONID, TANGIBLEID
4684                    FROM  (SELECT A.TRANSACTIONID, A.TANGIBLEID
4685                           FROM   IBY_TRANS_ALL_V A
4686                           WHERE  A.AUTHCODE = :auth_code
4687                           AND    trunc(A.UPDATEDATE) = trunc(:auth_date) --5932506
4688                           AND    A.REQTYPE  = ''ORAPMTREQ''
4689                           AND    A.STATUS   = 0
4690                           AND    A.REFINFO  = :ref_info
4691                           AND    NOT
4692                                  EXISTS (SELECT ''Trxn Already Voided''
4693                                          FROM  IBY_TRANS_ALL_V B
4694                                          WHERE B.TANGIBLEID = A.TANGIBLEID
4695                                          AND   B.REQTYPE    = ''ORAPMTVOID''
4696                                          AND   B.STATUS     = 0)
4697                           ORDER  BY A.UPDATEDATE DESC)
4698                     WHERE ROWNUM = 1';
4699 
4700     --OE_DEBUG_PUB.ADD(l_sql_stmt);
4701 
4702     begin
4703       EXECUTE IMMEDIATE l_sql_stmt
4704                    INTO p_trxn_id, p_tangible_id
4705 	             USING l_credit_card_approval_code
4706                     ,     l_credit_card_approval_date
4707                   ,     l_ref_info;
4708       EXCEPTION
4709 	   WHEN NO_DATA_FOUND THEN
4710 		p_trxn_id := 0;
4711 	   WHEN OTHERS THEN
4712           IF l_debug_level  > 0 THEN
4713               oe_debug_pub.add(  'OEXPVPMB: UNEXPECTED ERROR IN FETCH_CURRENT_AUTH.' ) ;
4714           END IF;
4715           IF l_debug_level  > 0 THEN
4716               oe_debug_pub.add(  'OEXPVPMB: ERROR: '||SQLERRM ) ;
4717           END IF;
4718           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4719     end;
4720 
4721   END IF;
4722 
4723   IF l_debug_level  > 0 THEN
4724       oe_debug_pub.add(  'OEXPVPMB: FOUND TRXN WITH TANGBILE ID '||P_TANGIBLE_ID ) ;
4725   END IF;
4726 
4727   IF l_debug_level  > 0 THEN
4728       oe_debug_pub.add(  'OEXPVPMB: EXITING FETCH CURRENT AUTHORIZATION' ) ;
4729   END IF;
4730 
4731 END Fetch_Current_Auth;
4732 
4733 /*----------------------------------------------------------------------
4734 Fetches the Last Authorization Transaction for the Order
4735 ----------------------------------------------------------------------*/
4736 PROCEDURE Fetch_Last_Auth
4737 (  p_header_rec      IN   OE_Order_PUB.Header_Rec_Type
4738 ,  p_trxn_id         OUT NOCOPY /* file.sql.39 change */  NUMBER
4739 ,  p_tangible_id     OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4740 ,  p_auth_code       OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4741 ,  p_trxn_date       OUT NOCOPY /* file.sql.39 change */  DATE
4742 ,  p_amount          OUT NOCOPY /* file.sql.39 change */  NUMBER
4743 )
4744 IS
4745 l_sql_stmt    VARCHAR2(5000);
4746 l_req_date    DATE;
4747 l_ref_info    VARCHAR2(80) :=TO_CHAR(p_header_rec.header_id);
4748 l_est_valid_days   NUMBER  := 0 ;
4749 --
4750 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4751 --
4752 
4753 BEGIN
4754 
4755   IF l_debug_level  > 0 THEN
4756       oe_debug_pub.add(  'OEXPVPMB: IN FETCH LAST AUTHORIZATION' ) ;
4757   END IF;
4758 
4759   /*
4760   ** We don't want to trigger following processing if user is
4761   ** using the Authorize Payment action.
4762   */
4763   IF p_header_rec.credit_card_approval_code is null
4764   AND p_header_rec.credit_card_approval_date is not null THEN
4765     IF l_debug_level  > 0 THEN
4766         oe_debug_pub.add(  'OEXPVPMB: EXITING FETCH LAST AUTH , AUTH PAYMENT ACTION' ) ;
4767     END IF;
4768     RETURN;
4769   END IF;
4770 
4771   -- Query the data related to last authorized trxn for this order
4772   IF l_debug_level  > 0 THEN
4773       oe_debug_pub.add(  'OEXPVPMB: SQL FOR QUERYING THE LAST AUTHORIZED TRXN' ) ;
4774   END IF;
4775   --
4776   -- Create the query string
4777   l_sql_stmt := 'SELECT TRANSACTIONID, TANGIBLEID, AUTHCODE, UPDATEDATE, AMOUNT
4778                  FROM (SELECT A.TRANSACTIONID, A.TANGIBLEID, A.AUTHCODE, A.UPDATEDATE, A.AMOUNT
4779                        FROM IBY_TRANS_ALL_V A
4780                        WHERE A.REFINFO = :ref_info
4781                        AND   A.REQTYPE = ''ORAPMTREQ''
4782                        AND   A.ECAPPID = 660
4783                        AND   A.STATUS  = 0
4784                        AND   A.AUTHCODE IS NOT NULL
4785                        AND   NOT
4786                              EXISTS (SELECT ''Trxn Already Captured or Voided''
4787                                      FROM  IBY_TRANS_ALL_V B
4788                                      WHERE B.TANGIBLEID = A.TANGIBLEID
4789                                      AND ((B.REQTYPE    = ''ORAPMTVOID'')
4790                                       OR  (B.REQTYPE    = ''ORAPMTCAPTURE'')
4791                                       OR  (B.REQTYPE    = ''ORAPMTREQ''
4792                                       AND  B.AUTHTYPE   = ''AUTHCAPTURE''))
4793                                      AND   B.STATUS     = 0)
4794                        ORDER  BY A.UPDATEDATE DESC)
4795                  WHERE  ROWNUM = 1';
4796 
4797   --OE_DEBUG_PUB.ADD(l_sql_stmt);
4798 
4799   begin
4800     EXECUTE IMMEDIATE l_sql_stmt
4801                  INTO p_trxn_id, p_tangible_id, p_auth_code, p_trxn_date, p_amount
4802                 USING l_ref_info;
4803     EXCEPTION
4804 	 WHEN NO_DATA_FOUND THEN
4805 	   p_trxn_id := 0;
4806   end;
4807 
4808   IF p_trxn_id > 0 then
4809 
4810     -- Fetch the value for profile "OM: Estimated Authorization Validity Period"
4811     -- This is required to estimate the validity of Authorization which might
4812     -- have been taken through iPayment, but was not updated on the order header.
4813     l_est_valid_days := to_number( nvl(fnd_profile.value('ONT_EST_AUTH_VALID_DAYS'), '0') ) ;
4814 
4815     IF l_debug_level  > 0 THEN
4816         oe_debug_pub.add(  'OEXPVPMB: FETCH_LAST_AUTH , ESTIMATED AUTH VALIDITY PERIOD : '|| L_EST_VALID_DAYS ) ;
4817     END IF;
4818 
4819     IF (p_trxn_date + l_est_valid_days > SYSDATE) THEN
4820 
4821       IF l_debug_level  > 0 THEN
4822           oe_debug_pub.add(  'OEXPVPMB: VALID AUTH ALREADY EXISTS , TANGIBLEID '||P_TANGIBLE_ID ) ;
4823       END IF;
4824 
4825     ELSE
4826 
4827       IF l_debug_level  > 0 THEN
4828           oe_debug_pub.add(  'OEXPVPMB: NO PREVIOUS AUTH EXISTS' ) ;
4829       END IF;
4830 
4831       p_trxn_id   := 0;
4832       p_auth_code := null;
4833       p_trxn_date := null;
4834       p_amount    := null;
4835     END IF;
4836 
4837   END IF;
4838 
4839   IF l_debug_level  > 0 THEN
4840       oe_debug_pub.add(  'OEXPVPMB: EXITING FETCH LAST AUTHORIZATION' ) ;
4841   END IF;
4842 
4843 END Fetch_Last_Auth;
4844 
4845 /*----------------------------------------------------------------------
4846 Updates Order Header with Authorized Amount, Authorization Code and DATE
4847 ----------------------------------------------------------------------*/
4848 PROCEDURE Update_Authorization_Info
4849 ( p_header_id        IN   NUMBER
4850 , p_auth_amount      IN   NUMBER
4851 , p_auth_code        IN   VARCHAR2
4852 , p_auth_date        IN   DATE
4853 , p_msg_count        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4854 , p_msg_data	      OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4855 , p_return_status    OUT NOCOPY /* file.sql.39 change */  VARCHAR2
4856 )
4857 IS
4858 l_index                  NUMBER := 1;
4859 l_notify_index           NUMBER := 1;  -- jolin
4860 l_line_id                NUMBER;
4861 l_header_rec             OE_ORDER_PUB.Header_Rec_Type;
4862 l_old_header_rec         OE_ORDER_PUB.Header_Rec_Type;
4863 l_msg_count              NUMBER;
4864 l_msg_data               VARCHAR2(2000);
4865 l_control_rec            OE_GLOBALS.Control_Rec_Type;
4866 l_return_status          VARCHAR2(30);
4867 --
4868 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4869 --
4870 BEGIN
4871 
4872   SAVEPOINT Update_Authorization_Info;
4873 
4874   p_return_status := FND_API.G_RET_STS_SUCCESS;
4875 
4876   IF l_debug_level  > 0 THEN
4877       oe_debug_pub.add(  'OEXPVPMB: IN UPDATE AUTHORIZATION INFORMATION' ) ;
4878   END IF;
4879 
4880   -- Set up the Header record
4881   OE_Header_Util.Lock_Row
4882 		(p_header_id			=> p_header_id
4883 		,p_x_header_rec		=> l_old_header_rec
4884 		,x_return_status		=> l_return_status
4885 		);
4886   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4887     RAISE FND_API.G_EXC_ERROR;
4888   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4889     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4890   END IF;
4891 
4892   l_header_rec := l_old_header_rec;
4893 
4894   l_header_rec.header_id                 := p_header_id;
4895   l_header_rec.credit_card_approval_code := p_auth_code;
4896   l_header_rec.credit_card_approval_date := p_auth_date;
4897   l_header_rec.last_updated_by		 := FND_GLOBAL.USER_ID;
4898   l_header_rec.last_update_date		 := SYSDATE;
4899   l_header_rec.last_update_login		 := FND_GLOBAL.LOGIN_ID;
4900   l_header_rec.lock_control		      := l_header_rec.lock_control + 1;
4901   l_header_rec.operation                 := OE_GLOBALS.G_OPR_UPDATE;
4902 
4903   -- Header needs to be requeried, setting the flag to true
4904   OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
4905 
4906   IF l_debug_level  > 0 THEN
4907       oe_debug_pub.add(  'OEXPVPMB: UPDATING FIELDS ON HEADER' ) ;
4908   END IF;
4909 
4910   update oe_order_headers
4911   set credit_card_approval_code = p_auth_code
4912     , credit_card_approval_date = p_auth_date
4913     , last_updated_by = FND_GLOBAL.USER_ID
4914     , last_update_date = SYSDATE
4915     , last_update_login = FND_GLOBAL.LOGIN_ID
4916     , lock_control = lock_control + 1
4917   where header_id = p_header_id;
4918 
4919   -- aksingh performance
4920   -- As the update is on headers table, it is time to update
4921   -- cache also!
4922   OE_Order_Cache.Set_Order_Header(l_header_rec);
4923 
4924   -- Bug 1755817: clear the cached constraint results for header entity
4925   -- when order header is updated.
4926   OE_PC_Constraints_Admin_Pvt.Clear_Cached_Results
4927        (p_validation_entity_id => OE_PC_GLOBALS.G_ENTITY_HEADER);
4928 
4929 -- jolin start
4930 IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110508' THEN
4931 
4932     -- call notification framework to get header index position
4933     OE_ORDER_UTIL.Update_Global_Picture
4934 	(p_Upd_New_Rec_If_Exists =>FALSE
4935 	, p_header_rec		=> l_header_rec
4936 	, p_old_header_rec	=> l_old_header_rec
4937         , p_header_id 		=> l_header_rec.header_id
4938         , x_index 		=> l_notify_index
4939         , x_return_status 	=> l_return_status);
4940 
4941     IF l_debug_level  > 0 THEN
4942         oe_debug_pub.add(  'UPDATE_GLOBAL RETURN STATUS FOR HDR IS: ' || L_RETURN_STATUS ) ;
4943     END IF;
4944     IF l_debug_level  > 0 THEN
4945         oe_debug_pub.add(  'HDR INDEX IS: ' || L_NOTIFY_INDEX , 1 ) ;
4946     END IF;
4947 
4948    IF l_notify_index is not null then
4949      -- modify Global Picture
4950 
4951     OE_ORDER_UTIL.g_header_rec.payment_amount:=
4952 					l_header_rec.payment_amount;
4953     OE_ORDER_UTIL.g_header_rec.credit_card_approval_code:=
4954 					l_header_rec.credit_card_approval_code;
4955     OE_ORDER_UTIL.g_header_rec.credit_card_approval_date:=
4956 					l_header_rec.credit_card_approval_date;
4957     OE_ORDER_UTIL.g_header_rec.last_updated_by:=l_header_rec.last_updated_by;
4958     OE_ORDER_UTIL.g_header_rec.last_update_login:=l_header_rec.last_update_login;
4959     OE_ORDER_UTIL.g_header_rec.last_update_date:=l_header_rec.last_update_date;
4960     OE_ORDER_UTIL.g_header_rec.lock_control:=	l_header_rec.lock_control;
4961 
4962 		IF l_debug_level  > 0 THEN
4963 		    oe_debug_pub.add(  'GLOBAL HDR PAYMENT_AMOUNT IS: ' || OE_ORDER_UTIL.G_HEADER_REC.PAYMENT_AMOUNT , 1 ) ;
4964 		END IF;
4965 		IF l_debug_level  > 0 THEN
4966 		    oe_debug_pub.add(  'GLOBAL HDR CC APPROVAL_CODE IS: ' || OE_ORDER_UTIL.G_HEADER_REC.CREDIT_CARD_APPROVAL_CODE , 1 ) ;
4967 		END IF;
4968 		IF l_debug_level  > 0 THEN
4969 		    oe_debug_pub.add(  'GLOBAL HDR CC APPROVAL_DATE IS: ' || OE_ORDER_UTIL.G_HEADER_REC.CREDIT_CARD_APPROVAL_DATE , 1 ) ;
4970 		END IF;
4971 
4972   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4973     RAISE FND_API.G_EXC_ERROR;
4974   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4975     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4976   END IF;
4977 
4978 -- Process requests is TRUE so still need to call it, but don't need to notify
4979   IF l_debug_level  > 0 THEN
4980       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
4981   END IF;
4982   OE_Order_PVT.Process_Requests_And_Notify
4983 	( p_process_requests		=> TRUE
4984 	, p_notify			=> FALSE
4985 	, p_header_rec			=> l_header_rec
4986 	, p_old_header_rec		=> l_old_header_rec
4987 	, x_return_status		=> l_return_status
4988 	);
4989 
4990   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4991     RAISE FND_API.G_EXC_ERROR;
4992   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4993     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4994   END IF;
4995 
4996  END IF ; /* global entity index null check */
4997 
4998 ELSE /* pre- pack H */
4999 
5000   IF l_debug_level  > 0 THEN
5001       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
5002   END IF;
5003   OE_Order_PVT.Process_Requests_And_Notify
5004 	( p_process_requests		=> TRUE
5005 	, p_notify			=> TRUE
5006 	, p_header_rec			=> l_header_rec
5007 	, p_old_header_rec		=> l_old_header_rec
5008 	, x_return_status		=> l_return_status
5009 	);
5010 
5011   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5012     RAISE FND_API.G_EXC_ERROR;
5013   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5014     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5015   END IF;
5016 
5017    -- notification framework end
5018 END IF; /* code set is pack H or higher */
5019 /* jolin end*/
5020 
5021 EXCEPTION
5022 
5023     WHEN FND_API.G_EXC_ERROR THEN
5024 	 ROLLBACK TO Update_Authorization_Info;
5025       p_return_status := FND_API.G_RET_STS_ERROR;
5026       OE_MSG_PUB.Count_And_Get
5027             ( p_count => l_msg_count,
5028               p_data  => l_msg_data
5029             );
5030 
5031     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5032 	 ROLLBACK TO Update_Authorization_Info;
5033       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5034       OE_MSG_PUB.Count_And_Get
5035             ( p_count => l_msg_count,
5036               p_data  => l_msg_data
5037             );
5038 
5039     WHEN OTHERS THEN
5040 	 ROLLBACK TO Update_Authorization_Info;
5041       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5042 
5043       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5044       THEN
5045         FND_MSG_PUB.Add_Exc_Msg
5046             (   G_PKG_NAME
5047             ,   'Update_Authorization_Info'
5048             );
5049       END IF;
5050 
5051       OE_MSG_PUB.Count_And_Get
5052             ( p_count => l_msg_count,
5053               p_data  => l_msg_data
5054             );
5055 
5056 END Update_Authorization_Info ;
5057 
5058 /*----------------------------------------------------------------------
5059 Returns the Total Captured Amount for the Order.
5060 ----------------------------------------------------------------------*/
5061 FUNCTION Captured_Amount_Total
5062 (  p_header_id      IN   Number )
5063 RETURN NUMBER
5064 IS
5065 l_sql_stmt    VARCHAR2(1000) := NULL;
5066 l_captured    NUMBER;
5067 l_ref_info    VARCHAR2(80)   := TO_CHAR(p_header_id);
5068 --
5069 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5070 --
5071 BEGIN
5072 
5073   IF l_debug_level  > 0 THEN
5074       oe_debug_pub.add(  'OEXPVPMB: IN CAPTURED AMOUNT TOTAL' ) ;
5075   END IF;
5076 
5077   -- Create the query string
5078   IF l_debug_level  > 0 THEN
5079       oe_debug_pub.add(  'OEXPVPMB: SQL STATEMENT TO FETCH TOTAL AMOUNT CAPTURED FOR THE ORDER' ) ;
5080   END IF;
5081   --
5082   l_sql_stmt := 'SELECT NVL(SUM(AMOUNT), 0)
5083                  FROM   IBY_TRANS_ALL_V
5084                  WHERE  REFINFO  = :ref_info
5085 			  AND    STATUS   = 0
5086                  AND  ((REQTYPE = ''ORAPMTCAPTURE'')
5087 				OR (REQTYPE = ''ORAPMTREQ'' AND AUTHTYPE = ''AUTHCAPTURE''))';
5088 
5089   --OE_DEBUG_PUB.ADD(l_sql_stmt);
5090 
5091   begin
5092     EXECUTE IMMEDIATE l_sql_stmt
5093                  INTO l_captured
5094                 USING l_ref_info ;
5095   end;
5096 
5097   IF l_debug_level  > 0 THEN
5098       oe_debug_pub.add(  'OEXPVPMB: EXITING CAPTURED AMOUNT TOTAL' ) ;
5099   END IF;
5100 
5101   RETURN (l_captured);
5102 
5103 END Captured_Amount_Total;
5104 
5105 PROCEDURE Authorize_MultiPayments
5106 (   p_header_rec             IN   OE_Order_PUB.Header_Rec_Type
5107 ,   p_line_id                IN   NUMBER DEFAULT null --bug3524209
5108 ,   p_calling_action         IN   VARCHAR2
5109 --comm rej,   p_reject_on_auth_failure IN VARCHAR2 DEFAULT NULL --R12 CC Encryption
5110 --comm rej,   p_reject_on_risk_failure IN VARCHAR2 DEFAULT NULL
5111 ,   p_risk_eval_flag	     IN VARCHAR2 DEFAULT  NULL --'Y'
5112 ,   p_msg_count              OUT NOCOPY /* file.sql.39 change */  NUMBER
5113 ,   p_msg_data               OUT NOCOPY /* file.sql.39 change */  VARCHAR2
5114 ,   p_result_out             OUT NOCOPY /* file.sql.39 change */  VARCHAR2
5115 ,   p_return_status          OUT NOCOPY /* file.sql.39 change */  VARCHAR2
5116 )
5117 IS
5118 l_auth_code         		VARCHAR2(80);
5119 l_trxn_date         		DATE;
5120 l_msg_count         		NUMBER := 0 ;
5121 l_msg_data          		VARCHAR2(2000) := NULL ;
5122 l_return_status     		VARCHAR2(30) := NULL;
5123 l_result_status     		VARCHAR2(30) := NULL;
5124 l_format_mask	     		VARCHAR2(500);
5125 l_amount_to_authorize     	NUMBER := 0;
5126 l_reauthorize_flag   		VARCHAR2(1);
5127 l_pay_method_id      		NUMBER;
5128 l_pay_method_name		VARCHAR2(50);
5129 l_merchant_id        		NUMBER;
5130 l_payee_id           		VARCHAR2(80);
5131 l_tangible_id        		VARCHAR2(80);
5132 l_time_of_purchase   		VARCHAR2(10);
5133 l_risk_threshold	 	NUMBER := 0 ;
5134 l_riskresp_included  		VARCHAR2(30);
5135 l_risk_score         		NUMBER := 0 ;
5136 l_result_out         		VARCHAR2(30) := NULL ;
5137 l_hold_exists        		VARCHAR2(1);
5138 l_line_rec          		OE_Order_PUB.Line_Rec_Type;
5139 l_ordered_date      		DATE;
5140 l_currency_code     		VARCHAR2(15);
5141 l_line_total			NUMBER := 0;
5142 l_order_total			NUMBER := 0;
5143 
5144 l_invoice_to_org_id		NUMBER;
5145 l_ship_to_org_id		NUMBER;
5146 l_line_id			NUMBER;
5147 l_payments_tbl	        	OE_ORDER_PUB.Line_Payment_Tbl_Type;
5148 l_count				NUMBER;
5149 i				PLS_INTEGER;
5150 l_prepaid_total			NUMBER;
5151 l_outbound_total		NUMBER;
5152 l_outbound_total_no_comt 	NUMBER;
5153 l_downpayment 			NUMBER;
5154 l_hold_result   		VARCHAR2(30);
5155 
5156 --bug3225795 start
5157 l_inv_interface_status_code     VARCHAR2(30) := 'NO';
5158 l_inv_lines_total               NUMBER := 0;
5159 l_line_total_exc_comt           NUMBER := 0;
5160 l_balance_on_prepay             NUMBER := 0;
5161 --bug3225795 end
5162 
5163 --R12 CC Encryption
5164 l_trxn_extension_id  	NUMBER;
5165 l_payer		     	IBY_FNDCPT_COMMON_PUB.PayerContext_rec_type;
5166 l_payee_rec	     	IBY_FNDCPT_TRXN_PUB.PayeeContext_rec_type;
5167 l_party_id	     	NUMBER;
5168 l_org_type	     	VARCHAR2(30) := 'OPERATING_UNIT';
5169 l_payment_function   	VARCHAR2(30) := 'CUSTOMER_PAYMENT';
5170 l_result_rec	     	IBY_FNDCPT_COMMON_PUB.Result_rec_type;
5171 l_auth_result	     	IBY_FNDCPT_TRXN_PUB.AuthResult_rec_type;
5172 l_amount	     	IBY_FNDCPT_TRXN_PUB.Amount_rec_type;
5173 l_auth_attribs       	IBY_FNDCPT_TRXN_PUB.AuthAttribs_rec_type;
5174 l_response	     	IBY_FNDCPT_COMMON_PUB.Result_rec_type;
5175 l_RiskEval_Enable_Flag 	VARCHAR2(1) := 'N';
5176 l_err_message	     	VARCHAR2(2000);
5177 l_cust_account_id    	NUMBER;
5178 --Verify
5179 x_invoice_to_org_id  	NUMBER;
5180 x_ship_from_org_id   	NUMBER;
5181 x_ship_to_org_id     	NUMBER;
5182 --R12 CC Encryption
5183 --
5184 l_debug_level CONSTANT 	NUMBER := oe_debug_pub.g_debug_level;
5185 --
5186 
5187 -- get line level credit card payments.
5188 CURSOR line_payments_cur(p_header_id IN NUMBER) IS
5189 SELECT line_id
5190       ,trxn_extension_id
5191       /*,credit_card_number --R12 CC Encryption
5192       ,credit_card_holder_name
5193       ,credit_card_expiration_date
5194       ,credit_card_approval_code
5195       ,credit_card_approval_date
5196       ,tangible_id*/
5197       ,receipt_method_id
5198       ,payment_number
5199       ,defer_payment_processing_flag
5200 FROM   oe_payments
5201 WHERE  payment_type_code = 'CREDIT_CARD'
5202 AND    header_id = p_header_id
5203 AND    line_id IS NOT NULL;
5204 
5205 -- get header level credit card payments
5206 CURSOR header_payments_cur(p_header_id IN NUMBER) IS
5207 SELECT payment_number
5208       ,trxn_extension_id
5209       /*,credit_card_number  --R12 CC Encryption
5210       ,credit_card_holder_name
5211       ,credit_card_expiration_date
5212       ,credit_card_approval_code
5213       ,credit_card_approval_date
5214       ,tangible_id*/
5215       ,receipt_method_id
5216       ,defer_payment_processing_flag
5217 FROM  oe_payments
5218 WHERE payment_type_code = 'CREDIT_CARD'
5219 AND   payment_collection_event = 'INVOICE'
5220 AND   line_id is null
5221 AND   header_id = p_header_id;
5222 
5223 --bug3524209 New cursor for getting the line_payments given the line_id
5224 CURSOR line_payments_cur_for_line(p_line_id IN NUMBER, p_header_id IN NUMBER) IS
5225 SELECT line_id
5226       ,trxn_extension_id
5227       /*,credit_card_number --R12 CC Encryption
5228       ,credit_card_holder_name
5229       ,credit_card_expiration_date
5230       ,credit_card_approval_code
5231       ,credit_card_approval_date
5232       ,tangible_id*/
5233       ,receipt_method_id
5234       ,payment_number
5235       ,defer_payment_processing_flag
5236 FROM   oe_payments
5237 WHERE  payment_type_code = 'CREDIT_CARD'
5238 AND    line_id = p_line_id
5239 AND    header_id = p_header_id;
5240 
5241 --R12 CC Encryption
5242 
5243 --bug3225795 changing the following cursor to look into oe_order_lines_all
5244 -- get those lines paid with payments other than the main one.
5245 CURSOR lines_cur(p_header_id IN NUMBER) IS
5246 SELECT line_id
5247 FROM   oe_order_lines_all
5248 WHERE  header_id = p_header_id
5249 AND    payment_type_code IS NOT NULL
5250 AND    payment_type_code <> 'COMMITMENT'
5251 AND    nvl(invoice_interface_status_code,'NO') <> 'YES';
5252 
5253 --bug3225795 New cursor to fetch all the invoiced lines given the header_id
5254 CURSOR inv_lines_cur(p_header_id IN NUMBER) IS
5255 SELECT line_id
5256 FROM   oe_order_lines_all
5257 WHERE  header_id = p_header_id
5258 AND    nvl(invoice_interface_status_code,'NO') = 'YES';
5259 
5260 
5261 BEGIN
5262 
5263   p_result_out := 'PASS' ;
5264   p_return_status := FND_API.G_RET_STS_SUCCESS;
5265 
5266   IF l_debug_level  > 0 THEN
5267       oe_debug_pub.add(  'OEXPVPMB: IN AUTHORIZE MULTIPLE PAYMENTS' ) ;
5268   END IF;
5269 
5270   IF OE_GLOBALS.G_IPAYMENT_INSTALLED IS NULL THEN
5271 
5272      OE_GLOBALS.G_IPAYMENT_INSTALLED := OE_GLOBALS.CHECK_PRODUCT_INSTALLED(673);
5273   END IF;
5274 
5275   IF OE_GLOBALS.G_IPAYMENT_INSTALLED <> 'Y' THEN
5276      IF l_debug_level  > 0 THEN
5277          oe_debug_pub.add(  'OEXPVPMB: IPAYMENT IS NOT INSTALLED!' , 3 ) ;
5278      END IF;
5279      RETURN;
5280   END IF;
5281 
5282   l_ordered_date := nvl(p_header_rec.ordered_date, sysdate);
5283   l_currency_code := p_header_rec.transactional_curr_code;
5284 
5285 	       l_count := 1;
5286            --bug3524209
5287 	   IF(p_line_id IS NULL) THEN
5288 	       FOR c_payments_rec IN line_payments_cur(p_header_rec.header_id) LOOP
5289 		 IF l_debug_level  > 0 THEN
5290 		   oe_debug_pub.add(  'OEXPVPMB: In line_payments_cur', 5 ) ;
5291 		 END IF;
5292 		 --R12 CC Encryption
5293 		 l_payments_tbl(l_count).line_id := c_payments_rec.line_id;
5294 		 l_payments_tbl(l_count).trxn_extension_id := c_payments_rec.trxn_extension_id;
5295 		 /*l_payments_tbl(l_count).credit_card_number := c_payments_rec.credit_card_number;
5296 		 l_payments_tbl(l_count).credit_card_holder_name
5297 				   := c_payments_rec.credit_card_holder_name;
5298 		 l_payments_tbl(l_count).credit_card_expiration_date
5299 				   := c_payments_rec.credit_card_expiration_date;
5300 		 l_payments_tbl(l_count).credit_card_approval_code
5301 				   := c_payments_rec.credit_card_approval_code;
5302 		 l_payments_tbl(l_count).credit_card_approval_date
5303 				   := c_payments_rec.credit_card_approval_date;
5304 		 l_payments_tbl(l_count).tangible_id := c_payments_rec.tangible_id;*/
5305 		 --R12 CC Encryption
5306 		 l_payments_tbl(l_count).receipt_method_id := c_payments_rec.receipt_method_id;
5307 		 l_payments_tbl(l_count).payment_number := c_payments_rec.payment_number;
5308 		 l_payments_tbl(l_count).defer_payment_processing_flag := c_payments_rec.defer_payment_processing_flag;
5309 		 l_count := l_count + 1;
5310 	       END LOOP;
5311 
5312 	       FOR c_payments_rec IN header_payments_cur(p_header_rec.header_id) LOOP
5313 		 IF l_debug_level  > 0 THEN
5314 		   oe_debug_pub.add(  'OEXPVPMB: In header_payments_cur', 5 ) ;
5315 		 END IF;
5316 		 l_payments_tbl(l_count).payment_number := c_payments_rec.payment_number;
5317 		 --R12 CC Encryption
5318 		 l_payments_tbl(l_count).trxn_extension_id := c_payments_rec.trxn_extension_id;
5319 		 /*
5320 		 l_payments_tbl(l_count).credit_card_number := c_payments_rec.credit_card_number;
5321 		 l_payments_tbl(l_count).credit_card_holder_name
5322 				   := c_payments_rec.credit_card_holder_name;
5323 		 l_payments_tbl(l_count).credit_card_expiration_date
5324 				   := c_payments_rec.credit_card_expiration_date;
5325 		 l_payments_tbl(l_count).credit_card_approval_code
5326 				   := c_payments_rec.credit_card_approval_code;
5327 		 l_payments_tbl(l_count).credit_card_approval_date
5328 				   := c_payments_rec.credit_card_approval_date;
5329 		 l_payments_tbl(l_count).tangible_id := c_payments_rec.tangible_id;
5330                  */
5331 		 --R12 CC Encryption
5332 		 l_payments_tbl(l_count).receipt_method_id := c_payments_rec.receipt_method_id;
5333 		 l_payments_tbl(l_count).defer_payment_processing_flag := c_payments_rec.defer_payment_processing_flag;
5334 		 l_count := l_count + 1;
5335 	       END LOOP;
5336             --bug3524209 start
5337 	    ELSE
5338 	        FOR c_payments_rec IN line_payments_cur_for_line(p_line_id, p_header_rec.header_id) LOOP
5339 		 IF l_debug_level  > 0 THEN
5340 		   oe_debug_pub.add(  'OEXPVPMB: In line_payments_cur_for_line', 5 ) ;
5341 		 END IF;
5342 		 l_payments_tbl(l_count).line_id := c_payments_rec.line_id;
5343 		 --R12 CC Encryption
5344 		 l_payments_tbl(l_count).trxn_extension_id := c_payments_rec.trxn_extension_id;
5345 		 /*
5346 		 l_payments_tbl(l_count).credit_card_number := c_payments_rec.credit_card_number;
5347 		 l_payments_tbl(l_count).credit_card_holder_name
5348 				   := c_payments_rec.credit_card_holder_name;
5349 		 l_payments_tbl(l_count).credit_card_expiration_date
5350 				   := c_payments_rec.credit_card_expiration_date;
5351 		 l_payments_tbl(l_count).credit_card_approval_code
5352 				   := c_payments_rec.credit_card_approval_code;
5353 		 l_payments_tbl(l_count).credit_card_approval_date
5354 				   := c_payments_rec.credit_card_approval_date;
5355 		 l_payments_tbl(l_count).tangible_id := c_payments_rec.tangible_id;
5356                  */
5357 		 --R12 CC Encryption
5358 		 l_payments_tbl(l_count).receipt_method_id := c_payments_rec.receipt_method_id;
5359 		 l_payments_tbl(l_count).payment_number := c_payments_rec.payment_number;
5360 		 l_payments_tbl(l_count).defer_payment_processing_flag := c_payments_rec.defer_payment_processing_flag;
5361 		 l_count := l_count + 1;
5362 	       END LOOP;
5363 	    END IF;
5364             --bug3524209 end
5365 
5366 	    IF l_debug_level  > 0 THEN
5367 	      oe_debug_pub.add(  'OEXPVPMB.pls: Total count l_payment_tbl is : '||l_payments_tbl.COUNT);
5368 	    END IF;
5369 
5370 	    I := l_payments_tbl.FIRST;
5371 	    WHILE I IS NOT NULL LOOP
5372 	      IF l_debug_level  > 0 THEN
5373 	        oe_debug_pub.add('OEXPVPMB: Looping through payment records: '||I, 3);
5374 	      END IF;
5375 	      l_result_status := 'PASS' ;
5376               l_amount_to_authorize := 0;
5377 	       IF l_payments_tbl(I).line_id IS NOT NULL THEN
5378 		 -- place on line level CC authorization hold.
5379 	         IF l_debug_level  > 0 THEN
5380 	           oe_debug_pub.add('OEXPVPMB: processing authorization for line: '||l_payments_tbl(I).line_id, 3);
5381 	         END IF;
5382 		 IF p_calling_action IS NOT NULL
5383                     AND p_calling_action NOT IN ('SHIPPING','PACKING' ,'PICKING')
5384 		    AND nvl(l_payments_tbl(I).defer_payment_processing_flag, 'N') = 'Y' THEN
5385 		   IF l_debug_level  > 0 THEN
5386 		     oe_debug_pub.add(  'OEXPVPMB: place order on Defer Payment Authorization hold for line: '||l_payments_tbl(I).line_id , 1 ) ;
5387 		   END IF;
5388 		   OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
5389 		     ( p_header_id     => p_header_rec.header_id
5390 		     , p_line_id       => l_payments_tbl(I).line_id
5391 		     , p_hold_id       => 16
5392 		     , p_msg_count     => l_msg_count
5393 		     , p_msg_data      => l_msg_data
5394 		     , p_return_status => l_return_status
5395 		     );
5396 		   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5397 		     RAISE FND_API.G_EXC_ERROR;
5398 		   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5399 		     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5400 		   END IF;
5401 		   goto Next_In_Loop;
5402 		 END IF;
5403 
5404 	      --bug3225795 start
5405               BEGIN
5406 		 SELECT invoice_interface_status_code
5407 		 INTO   l_inv_interface_status_code
5408 		 FROM   oe_order_lines_all
5409 		 WHERE  line_id = l_payments_tbl(I).line_id;
5410               EXCEPTION
5411 		 WHEN NO_DATA_FOUND THEN
5412 		    null;
5413 	      END;
5414 
5415               IF nvl(l_inv_interface_status_code,'NO') <> 'YES' THEN
5416               --bug3225795 end
5417 	            l_amount_to_authorize := l_amount_to_authorize +
5418 		 	Get_Line_Total
5419                         ( p_line_id          	=> l_payments_tbl(I).line_id
5420                          ,p_header_id		=> p_header_rec.header_id
5421                          ,p_currency_code	=> l_currency_code
5422                          ,p_level		 => 'LINE'
5423                         );
5424                --bug3225795 start
5425                ELSE
5426                     l_amount_to_authorize :=0;
5427                END IF;
5428 	       --bug3225795 end
5429 
5430 
5431 	      IF l_debug_level  > 0 THEN
5432 	        oe_debug_pub.add('OEXPVPMB: amount to authorize for line level is: '||l_amount_to_authorize, 3);
5433 	      END IF;
5434      ELSE
5435        -- header level authorization.
5436        IF l_debug_level  > 0 THEN
5437          oe_debug_pub.add('OEXPVPMB: processing header level authorization.', 3);
5438        END IF;
5439        IF p_calling_action IS NOT NULL
5440           AND p_calling_action NOT IN ('SHIPPING','PACKING' ,'PICKING')
5441           AND nvl(l_payments_tbl(I).defer_payment_processing_flag,'N') = 'Y' THEN
5442          IF l_debug_level  > 0 THEN
5443            oe_debug_pub.add(  'OEXPVPMB: place order on Defer Payment Authorization hold for header: '||l_payments_tbl(I).header_id , 1 ) ;
5444          END IF;
5445 
5446          -- place on header level CC authorization hold.
5447          OE_Verify_Payment_PUB.Apply_Verify_Hold
5448              ( p_header_id     => p_header_rec.header_id
5449              , p_hold_id       => 16
5450              , p_msg_count     => l_msg_count
5451              , p_msg_data      => l_msg_data
5452              , p_return_status => l_return_status
5453              );
5454          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5455            RAISE FND_API.G_EXC_ERROR;
5456          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5457            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5458          END IF;
5459          goto Next_In_Loop;
5460        END IF;
5461 
5462        -- Get the amount to be authorized for header multiple payments
5463        -- need to exclude total prepaid amount from authorization.
5464        -- we sum up payment_amount instead of prepaid_amount here
5465        -- as we need to include those deferred prepayment as well.
5466       BEGIN
5467       SELECT sum(nvl(payment_amount, 0))
5468       INTO   l_prepaid_total
5469       FROM   oe_payments
5470       WHERE  payment_collection_event = 'PREPAY'
5471       AND    header_id = p_header_rec.header_id;
5472       EXCEPTION WHEN NO_DATA_FOUND THEN
5473         l_prepaid_total := 0;
5474       END;
5475 
5476       --bug3225795 start
5477       FOR c_inv_line_rec IN inv_lines_cur(p_header_rec.header_id) LOOP
5478         l_inv_lines_total := l_inv_lines_total + Get_Inv_Line_Total
5479                                          (p_line_id               => c_inv_line_rec.line_id
5480 					 ,p_header_id             => p_header_rec.header_id
5481 					 ,p_currency_code         => null
5482 					 ,p_level                 => 'HEADER'
5483 					 ,p_to_exclude_commitment => 'Y'
5484 					 );
5485       END LOOP;
5486 
5487       IF l_prepaid_total > nvl(l_inv_lines_total,0) THEN
5488 	 l_balance_on_prepay := l_prepaid_total - nvl(l_inv_lines_total,0);
5489       ELSE
5490 	 l_balance_on_prepay := 0;
5491       END IF;
5492       --bug3225795 end
5493 
5494       IF l_debug_level  > 0 THEN
5495         oe_debug_pub.add('In Authorize_Multipayments: l_prepaid_total is : '||l_prepaid_total);
5496       END IF;
5497 
5498       -- Get the line total amount paid with payments other than the main one.
5499       FOR c_line_rec IN lines_cur(p_header_rec.header_id) LOOP
5500 	--pnpl l_line_total is not required anymore
5501         /*
5502         l_line_total := l_line_total + Get_Line_Total
5503                               ( p_line_id      		=> c_line_rec.line_id
5504                                ,p_header_id		=> p_header_rec.header_id
5505                                ,p_currency_code		=> null --bug3225795
5506                                ,p_level 		=> 'HEADER'
5507 			       ,p_to_exclude_commitment => 'N' --bug3225795
5508                               );
5509         */
5510 	--bug3225795 start
5511         l_line_total_exc_comt := l_line_total_exc_comt + Get_Line_Total
5512                                       ( p_line_id      	       => c_line_rec.line_id
5513 				      ,p_header_id	       => p_header_rec.header_id
5514 				      ,p_currency_code         => null
5515 				      ,p_level 		       => 'HEADER'
5516 				      ,p_to_exclude_commitment => 'Y'
5517                               );
5518 	--bug3225795 end
5519       IF l_debug_level  > 0 THEN
5520         oe_debug_pub.add('In lines_cur: line_id is : '||c_line_rec.line_id);
5521 	--bug3225795
5522         oe_debug_pub.add('In lines_cur: l_line_total_exc_comt is : '||l_line_total_exc_comt );
5523       END IF;
5524       END LOOP;
5525 
5526       IF l_debug_level  > 0 THEN
5527         oe_debug_pub.add('In Authorize_Multipayments: l_line_total to exclude is : '||l_line_total_exc_comt);
5528       END IF;
5529 
5530       -- commitment applied amount has already been taken out from outbound total,
5531       -- no need to exclude commitment again here.
5532 
5533       -- l_outbound_total := OE_OE_TOTALS_SUMMARY.Outbound_Order_Total(p_header_rec.header_id);
5534 
5535       -- l_amount_to_authorize := l_outbound_total- nvl(l_prepaid_total,0) - nvl(l_line_total,0);
5536 
5537       --pnpl l_outbound_total_no_comt is not needed as the function Outbound_Order_Total takes care of returning the proper value based on the value in OE_PREPAYMENT_UTIL.Get_Installment_Options
5538       /*
5539       l_outbound_total_no_comt := Outbound_Order_Total --bug3225795
5540                                    (p_header_id             =>p_header_rec.header_id,
5541                                     p_to_exclude_commitment => 'N');
5542       */
5543       --bug3225795 start
5544       l_outbound_total := Outbound_Order_Total
5545                            (p_header_id             =>p_header_rec.header_id,
5546                             p_to_exclude_commitment => 'Y');
5547       --bug3225795 end
5548 
5549       IF l_debug_level  > 0 THEN
5550         oe_debug_pub.add('In Authorize_Multipayments: l_outbound_total is : '||l_outbound_total);
5551       END IF;
5552 
5553       --pnpl  The Outbound_Order_Total takes care of returning the proper value depending on the value in OE_PREPAYMENT_UTIL.Get_Installment_Options
5554       l_amount_to_authorize := l_outbound_total - nvl(l_balance_on_prepay,0) - nvl(l_line_total_exc_comt,0);
5555 
5556 
5557     END IF; -- end of header level or line level authorization.
5558 
5559     IF l_debug_level  > 0 THEN
5560       oe_debug_pub.add('OEXPVPMB: amount to authorize is : '||l_amount_to_authorize);
5561     END IF;
5562 
5563      -- For each order line call Check Reauthorize Order to find out
5564      -- if Reauthorization is required
5565      IF l_debug_level  > 0 THEN
5566        oe_debug_pub.add(  'OEXPVPMB.pls: Before Checking Reauthorize Flag for Multiple Payments.');
5567      END IF;
5568 
5569      IF l_payments_tbl(I).line_id IS NOT NULL THEN
5570      BEGIN
5571        SELECT invoice_to_org_id, ship_to_org_id
5572        INTO   l_invoice_to_org_id,l_ship_to_org_id
5573        FROM   oe_order_lines_all
5574        WHERE  line_id = l_payments_tbl(I).line_id;
5575      EXCEPTION WHEN NO_DATA_FOUND THEN
5576        null;
5577      END;
5578    ELSE
5579      BEGIN
5580        SELECT invoice_to_org_id, ship_to_org_id
5581        INTO   l_invoice_to_org_id,l_ship_to_org_id
5582        FROM   oe_order_headers_all
5583        WHERE  header_id = p_header_rec.header_id;
5584      EXCEPTION WHEN NO_DATA_FOUND THEN
5585        null;
5586      END;
5587    END IF;
5588 
5589    IF l_debug_level  > 0 THEN  --bug 5209584
5590       oe_debug_pub.add('OEXPVPMB: Header ID      : '||p_header_rec.header_id, 3);
5591       oe_debug_pub.add('OEXPVPMB: Line ID        : '||l_payments_tbl(I).line_id, 3);
5592       oe_debug_pub.add('OEXPVPMB: Payment Number : '||l_payments_tbl(I).payment_number, 3);
5593    END IF;
5594 
5595     OE_Verify_Payment_PUB.Check_ReAuth_for_MultiPmnts
5596         ( p_credit_card_approval_code 	=> l_payments_tbl(I).credit_card_approval_code
5597         , p_trxn_extension_id	      	=> l_payments_tbl(I).trxn_extension_id
5598         , p_amount_to_authorize       	=> l_amount_to_authorize
5599         , p_org_id			=> p_header_rec.org_id
5600         , p_site_use_id			=> l_invoice_to_org_id
5601         , p_header_id                   => p_header_rec.header_id  --bug 5209584
5602         , p_line_id                     => l_payments_tbl(I).line_id
5603         , p_payment_number              => l_payments_tbl(I).payment_number
5604 	, p_reauthorize_out           	=> l_reauthorize_flag
5605         , x_msg_count      		=> l_msg_count
5606         , x_msg_data       		=> l_msg_data
5607         , x_return_status  		=> l_return_status
5608 	);
5609 
5610 
5611       IF l_debug_level  > 0 THEN
5612         oe_debug_pub.add(  'OEXPVPMB: for Multiple Payments reauthorize Flag is set to : '||L_REAUTHORIZE_FLAG) ;
5613       END IF;
5614 
5615   -- Check Reauthorize Flag and proceed
5616   IF l_reauthorize_flag = 'N' THEN
5617 
5618     IF l_debug_level  > 0 THEN
5619         oe_debug_pub.add(  'OEXPVPMB: NO NEED TO REAUTHORIZE' ) ;
5620     END IF;
5621 
5622     -- Check if Hold already exists on this order
5623     IF l_debug_level  > 0 THEN
5624         oe_debug_pub.add(  'OEXPVPMB: CHECK IF ORDER ON RISK HOLD' ) ;
5625     END IF;
5626     --
5627 
5628     IF l_payments_tbl(I).line_id IS NULL THEN
5629       -- header level authorization
5630       OE_HOLDS_PUB.Check_Holds
5631                       ( p_api_version    => 1.0
5632                       , p_header_id      => p_header_rec.header_id
5633                       , p_hold_id        => 12
5634                       , p_entity_code    => 'O'
5635                       , p_entity_id      => p_header_rec.header_id
5636                       , x_result_out     => l_hold_result
5637                       , x_msg_count      => l_msg_count
5638                       , x_msg_data       => l_msg_data
5639                       , x_return_status  => l_return_status
5640                       );
5641 
5642     ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
5643       -- line level authorization
5644       OE_HOLDS_PUB.Check_Holds
5645                       ( p_api_version    => 1.0
5646                       , p_header_id      => p_header_rec.header_id
5647                       , p_line_id        => l_payments_tbl(I).line_id
5648                       , p_hold_id        => 12
5649                       , p_entity_code    => 'O'
5650                       , p_entity_id      => p_header_rec.header_id
5651                       , x_result_out     => l_hold_result
5652                       , x_msg_count      => l_msg_count
5653                       , x_msg_data       => l_msg_data
5654                       , x_return_status  => l_return_status
5655                       );
5656     END IF;
5657 
5658     IF l_hold_result = FND_API.G_TRUE THEN
5659       IF l_debug_level  > 0 THEN
5660           oe_debug_pub.add(  'OEXPVPMB: ORDER IS ON RISK HOLD' ) ;
5661       END IF;
5662       l_result_status := 'RISK';
5663     END IF;
5664 
5665     -- RETURN;
5666     goto Update_Verify_Hold;
5667 
5668   END IF;
5669 
5670   -- this validation moved to the code below.
5671   /*
5672   IF NOT Validate_Required_Attributes(p_header_rec) THEN
5673     p_result_out := 'FAIL';
5674     RETURN;
5675   END IF;
5676   */
5677 
5678 
5679     -- Fetch Payment Method Name and Merchant Id based on the Method ID.
5680     IF l_debug_level  > 0 THEN
5681         oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING GET PAY METHOD INFO' ) ;
5682     END IF;
5683 
5684     IF l_payments_tbl(I).receipt_method_id IS NOT NULL THEN
5685       l_pay_method_id := l_payments_tbl(I).receipt_method_id;
5686     ELSE
5687       -- get from the payment type setup first.
5688       BEGIN
5689       SELECT receipt_method_id
5690       INTO l_pay_method_id
5691       FROM oe_payment_types_all
5692       WHERE payment_type_code = 'CREDIT_CARD'
5693       AND nvl(org_id, -99) = nvl(p_header_rec.org_id, -99);
5694       EXCEPTION WHEN NO_DATA_FOUND THEN
5695         null;
5696       END;
5697 
5698       IF l_pay_method_id IS NULL THEN
5699         l_pay_method_id := OE_Verify_Payment_PUB.Get_Primary_Pay_Method
5700                             ( p_header_rec => p_header_rec ) ;
5701       END IF;
5702     END IF;
5703 
5704   IF nvl(l_pay_method_id, 0) > 0 THEN
5705     Get_Pay_Method_Info
5706 	( p_pay_method_id   => l_pay_method_id
5707 	, p_pay_method_name => l_pay_method_name
5708 	, p_merchant_ref    => l_payee_id
5709 	) ;
5710 
5711     IF l_debug_level  > 0 THEN
5712         oe_debug_pub.add(  'OEXPVPMB: receipt method id is: '|| l_payments_tbl(I).receipt_method_id ) ;
5713     END IF;
5714 
5715     -- If Merchant Id is invalid then set the out result to FAIL and return
5716     IF l_debug_level  > 0 THEN
5717         oe_debug_pub.add(  'OEXPVPMB: BEFORE CHECKING THE PAYEE ID' ) ;
5718     END IF;
5719 
5720 -- Commenting the following IF condition for the sake of bug6532165
5721 
5722 /*    IF l_payee_id is NULL THEN
5723       -- Message "Unable to retrieve Payee/Merchant  ID
5724       -- for Customer's Primary Payment Method"
5725       FND_MESSAGE.SET_NAME('ONT','OE_VPM_NO_PAYEE_ID');
5726       OE_MSG_PUB.ADD;
5727       l_result_status := 'FAIL' ;
5728       goto Update_Verify_Hold;
5729       -- RETURN;
5730     END IF;      */
5731   ELSE -- Method ID is invalid
5732 
5733     -- Message "Unable to retrieve Primary Payment Method for the customer"
5734     FND_MESSAGE.SET_NAME('ONT','OE_VPM_NO_PAY_METHOD');
5735     OE_MSG_PUB.ADD;
5736     l_result_status := 'FAIL' ;
5737     goto Update_Verify_Hold;
5738     -- RETURN;
5739   END IF;
5740 
5741   IF l_debug_level  > 0 THEN
5742       oe_debug_pub.add(  'OEXPVPMB: PAYEE ID IS : '|| L_PAYEE_ID ) ;
5743   END IF;
5744 
5745 
5746   -- move this piece of code to above before calling check_reauth_for_multipmts
5747   /*
5748   IF l_payments_tbl(I).line_id IS NOT NULL THEN
5749     BEGIN
5750       SELECT invoice_to_org_id, ship_to_org_id
5751       INTO   l_invoice_to_org_id,l_ship_to_org_id
5752       FROM   oe_order_lines_all
5753       WHERE  line_id = l_payments_tbl(I).line_id;
5754     EXCEPTION WHEN NO_DATA_FOUND THEN
5755       null;
5756     END;
5757   ELSE
5758     BEGIN
5759       SELECT invoice_to_org_id, ship_to_org_id
5760       INTO   l_invoice_to_org_id,l_ship_to_org_id
5761       FROM   oe_order_headers_all
5762       WHERE  header_id = p_header_rec.header_id;
5763     EXCEPTION WHEN NO_DATA_FOUND THEN
5764       null;
5765     END;
5766   END IF;
5767   */
5768 
5769   --R12 CC Encryption
5770   /*l_cust_trx_date := l_ordered_date
5771                - nvl( to_number(fnd_profile.value('ONT_DAYS_TO_BACKDATE_BANK_ACCT')), 0);*/
5772      -- IF p_line_id is null then
5773      IF l_payments_tbl(I).line_id IS NULL THEN
5774         IF l_debug_level  > 0 THEN
5775 		oe_debug_pub.add('Before getting trxn id'||l_payments_tbl(I).line_id||' and '||p_header_rec.header_id);
5776 	END IF;
5777 	BEGIN
5778 		select trxn_extension_id
5779 			into l_trxn_extension_id
5780 		FROM OE_PAYMENTS
5781 		WHERE HEADER_ID = p_header_rec.header_id and line_id is null
5782 		AND nvl(payment_collection_event,'PREPAY') = 'INVOICE'; --bug 5020737
5783 	EXCEPTION WHEN NO_DATA_FOUND THEN
5784 		IF l_debug_level  > 0 THEN
5785 			oe_debug_pub.add('Trxn extension id is null.....');
5786 		END IF;
5787 	END;
5788 	x_invoice_to_org_id := OE_Order_Cache.g_invoice_to_rec.org_id;
5789 	x_ship_from_org_id := OE_Order_Cache.g_ship_to_rec.ship_from_org_id;  --Verify
5790 	x_ship_to_org_id := OE_Order_Cache.g_ship_to_rec.org_id;
5791     ELSE
5792 	BEGIN
5793 		IF l_debug_level  > 0 THEN
5794 			oe_debug_pub.add('Before getting trxn id else'||l_payments_tbl(I).line_id||' and '||p_header_rec.header_id);
5795 		END IF;
5796 		select trxn_extension_id
5797 			into l_trxn_extension_id
5798 		FROM OE_PAYMENTS
5799 		WHERE line_id = l_payments_tbl(I).line_id
5800                 AND   header_id = p_header_rec.header_id
5801                 AND  payment_type_code <> 'COMMITMENT';
5802 
5803 		SELECT invoice_to_org_id, ship_from_org_id, ship_to_org_id
5804 		INTO   x_invoice_to_org_id, x_ship_from_org_id, x_ship_to_org_id
5805 		FROM   oe_order_lines_all
5806 		WHERE  line_id = l_payments_tbl(I).line_id;
5807 	 EXCEPTION WHEN NO_DATA_FOUND THEN
5808 		IF l_debug_level  > 0 THEN
5809 			oe_debug_pub.add('Trxn extension id....'||nvl(l_trxn_extension_id,'0'));
5810 		END IF;
5811 	END;
5812     END IF;
5813 
5814   -- Check For all Required Attributes
5815   IF l_debug_level  > 0 THEN
5816       oe_debug_pub.add(  'OEXPVPMB: Checking required attributes for multiple payments.' ) ;
5817   END IF;
5818 
5819   IF l_invoice_to_org_id is NULL THEN
5820     FND_MESSAGE.SET_NAME('ONT','OE_VPM_INV_TO_REQUIRED');
5821     OE_MSG_PUB.ADD;
5822     IF l_debug_level  > 0 THEN
5823         oe_debug_pub.add(  'OEXPVPMB: INVOICE_TO_ORG_ID IS REQUIRED' ) ;
5824     END IF;
5825     l_result_status := 'FAIL';
5826     goto Update_Verify_Hold;
5827     -- return;
5828   ELSIF l_payments_tbl(I).trxn_extension_id is NULL THEN  --R12 CC Encryption
5829     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_NUM_REQUIRED');
5830     OE_MSG_PUB.ADD;
5831     IF l_debug_level  > 0 THEN
5832         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_NUMBER IS REQUIRED' ) ;
5833     END IF;
5834     l_result_status := 'FAIL';
5835     goto Update_Verify_Hold;
5836     -- return;
5837   END IF;
5838 
5839   /*
5840   ELSIF l_payments_tbl(I).credit_card_expiration_date is NULL THEN
5841     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_EXP_DT_REQUIRED');
5842     OE_MSG_PUB.ADD;
5843     IF l_debug_level  > 0 THEN
5844         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_EXPIRATION_DATE IS REQUIRED' ) ;
5845     END IF;
5846     l_result_status := 'FAIL';
5847     goto Update_Verify_Hold;
5848     -- return;
5849   ELSIF l_payments_tbl(I).credit_card_holder_name is NULL THEN
5850     FND_MESSAGE.SET_NAME('ONT','OE_VPM_CC_HOLDER_REQUIRED');
5851     OE_MSG_PUB.ADD;
5852     IF l_debug_level  > 0 THEN
5853         oe_debug_pub.add(  'OEXPVPMB: CREDIT_CARD_HOLDER_NAME IS REQUIRED' ) ;
5854     END IF;
5855     l_result_status := 'FAIL';
5856     goto Update_Verify_Hold;
5857     -- return;
5858   END IF;
5859   */
5860   --R12 CC Encryption
5861 
5862   -- Hour and Minutes after Mid Night in HH24:MM format
5863   IF l_debug_level  > 0 THEN
5864       oe_debug_pub.add(  'OEXPVPMB: FETCHING HOUR AND MINUTES AFTER MIDNIGHT AS TIME OF PURCHASE' ) ;
5865   END IF;
5866   --
5867   SELECT TO_CHAR(sysdate, 'HH24:MI')
5868   INTO   l_time_of_purchase
5869   FROM   DUAL ;
5870 
5871   IF l_debug_level  > 0 THEN
5872       oe_debug_pub.add(  'OEXPVPMB: TIME OF PURCHASE AFTER MIDNIGHT HH24:MI IS : '|| L_TIME_OF_PURCHASE ) ;
5873   END IF;
5874 
5875   Begin
5876 	/*Select	party_site.party_id, acct_site.cust_account_id
5877 	Into 	l_party_id, l_cust_account_id
5878 	From 	HZ_CUST_SITE_USES_ALL SITE,
5879 		HZ_PARTY_SITES             PARTY_SITE,
5880 		HZ_CUST_ACCT_SITES         ACCT_SITE  --Verify
5881 	Where 	SITE.SITE_USE_ID = p_header_rec.invoice_to_org_id
5882 	AND	SITE.SITE_USE_CODE  = 'BILL_TO'
5883 	AND   	SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
5884 	AND   	ACCT_SITE.PARTY_SITE_ID = PARTY_SITE.PARTY_SITE_ID
5885 	AND  	 SITE.ORG_ID = ACCT_SITE.ORG_ID;
5886         */
5887 
5888  	SELECT hca.party_id,acctsite.cust_account_id --acct_site.	cust_account_id, site.cust_acct_site_id
5889  	INTO l_party_id, l_cust_account_id
5890  	FROM hz_cust_acct_sites_all acctsite, hz_cust_site_uses_all site, hz_cust_accounts_all hca
5891  	WHERE SITE.SITE_USE_CODE = 'BILL_TO'
5892  	AND SITE.CUST_ACCT_SITE_ID = ACCTSITE.CUST_ACCT_SITE_ID
5893 	AND ACCTSITE.cust_account_id = HCA.cust_account_id
5894  	AND SITE.SITE_USE_ID  = p_header_rec.invoice_to_org_id;
5895 
5896   Exception When No_Data_Found THEN
5897 	Null;
5898   End;
5899 
5900 IF l_debug_level  > 0 THEN
5901 	oe_debug_pub.add('Amount populated...'||l_amount_to_authorize);
5902 	oe_debug_pub.add('account site id'||x_invoice_to_org_id);
5903 END IF;
5904 
5905 l_payer.payment_function := l_payment_function ;
5906 l_payer.party_id := l_party_id;
5907 l_payer.org_type := l_org_type;
5908 l_payer.org_id	 := p_header_rec.org_id;
5909 -- 6524493 l_payer.cust_account_id	:= p_header_rec.sold_to_org_id; --Verify l_cust_account_id
5910 l_payer.cust_account_id	:= l_cust_account_id; --6524493
5911 l_payer.account_site_id	:= p_header_rec.invoice_to_org_id; -- Verify x_invoice_to_org_id;
5912 l_amount.value := l_amount_to_authorize;
5913 l_amount.currency_code := p_header_rec.transactional_curr_code;
5914 
5915 l_auth_attribs.RiskEval_Enable_Flag := p_risk_eval_flag;
5916 l_auth_attribs.shipFrom_SiteUse_Id := x_ship_from_org_id;
5917 l_auth_attribs.shipTo_SiteUse_Id := x_ship_to_org_id;
5918 
5919 
5920   l_payee_rec.org_id := p_header_rec.org_id;
5921   l_payee_rec.org_type := 'OPERATING_UNIT';
5922 
5923   IF l_debug_level >0 THEN
5924     oe_debug_pub.add('Before call to create auth trxn_extension_id is: '||l_trxn_extension_id);
5925     oe_debug_pub.add('Payee id is...'||l_payee_id);
5926     oe_debug_pub.add('Payer context values ...');
5927     oe_debug_pub.add('payment function'||l_payment_function);
5928     oe_debug_pub.add('l_payer.party_id'||l_party_id);
5929     oe_debug_pub.add('l_payer.org_type'||l_org_type);
5930     oe_debug_pub.add('l_payer.org_id'||p_header_rec.sold_to_org_id);
5931     oe_debug_pub.add('l_payer.account_site_id'||l_invoice_to_org_id);
5932     oe_debug_pub.add('Cust acct id'||l_cust_account_id);
5933     oe_debug_pub.add('amount is '||l_amount.value);
5934     oe_debug_pub.add('currency is '||l_amount.currency_code);
5935     oe_debug_pub.add('risk eval flag is '||l_auth_attribs.RiskEval_Enable_Flag);
5936     oe_debug_pub.add('ship from is '||l_auth_attribs.shipFrom_SiteUse_Id);
5937     oe_debug_pub.add('ship to is '||l_auth_attribs.shipTo_SiteUse_Id);
5938   END IF;
5939 
5940 
5941  IBY_Fndcpt_Trxn_Pub.Create_Authorization
5942 (p_api_version		=> 1.0,
5943  x_return_status	=> l_return_status,
5944  x_msg_count		=> l_msg_count,
5945  x_msg_data		=> l_msg_data,
5946  p_payer		=> l_payer,
5947  p_payer_equivalency	=> IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
5948  p_payee		=> l_payee_rec,
5949  p_trxn_entity_id	=> l_trxn_extension_id,
5950  p_auth_attribs		=> l_auth_attribs,
5951  p_amount		=> l_amount,
5952  x_auth_result		=> l_auth_result,
5953  x_response		=> l_response);
5954 
5955 
5956   --For bug 3571485
5957   l_format_mask := get_format_mask(p_header_rec.transactional_curr_code);
5958 
5959   IF l_return_status = FND_API.G_RET_STS_SUCCESS AND
5960   l_response.result_code = 'AUTH_SUCCESS' THEN
5961 
5962 	IF l_debug_level >0 THEN
5963 		oe_debug_pub.add('Authorization successful....');
5964 		oe_debug_pub.add('Risk flag Value :'||p_risk_eval_flag);
5965 	END IF;
5966 
5967         -- moved release hold code here before applying risk hold for bug 4543147
5968 	-- Release Any existing CC Holds
5969 	IF l_payments_tbl(I).line_id IS NULL THEN
5970 	        OE_Verify_Payment_PUB.Release_Verify_Hold
5971 	                                 ( p_header_id     => p_header_rec.header_id
5972 	                                 , p_epayment_hold => 'Y' -- We want to Release Credit Card Holds
5973 	                                 , p_msg_count     => l_msg_count
5974 	                                 , p_msg_data      => l_msg_data
5975 	                                 , p_return_status => l_return_status
5976 	                                 );
5977 
5978 	 ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
5979 	         OE_Verify_Payment_PUB.Release_Verify_Line_Hold
5980 	                                 ( p_header_id     => p_header_rec.header_id
5981 	                                 , p_line_id       => l_payments_tbl(I).line_id
5982 	                                 , p_epayment_hold => 'Y' -- We want to Release Credit Card Holds
5983 	                                 , p_msg_count     => l_msg_count
5984 	                                 , p_msg_data      => l_msg_data
5985 	                                 , p_return_status => l_return_status
5986 	                                 );
5987 	 END IF;
5988 
5989 	 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5990 	           RAISE FND_API.G_EXC_ERROR;
5991 	 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5992 	        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5993 	 END IF;
5994 
5995 	--Risk Score evaluation -- Bug 	6805953
5996 	IF  nvl(p_risk_eval_flag, 'Y') = 'Y' THEN --change flag to p_risk_eval_flag l_RiskEval_Enable_Flag verify
5997 --		l_risk_threshold := oe_sys_parameters.value('RISK_FACTOR_THRESHOLD');
5998 		IF l_debug_level > 0 THEN
5999 			oe_debug_pub.add('Risk threshold value....'||L_auth_result.risk_result.Risk_Threshold_Val);
6000 			oe_debug_pub.add('Risk score...'||L_auth_result.risk_result.risk_score);
6001                         oe_debug_pub.add('Risky Flag : ' || L_auth_result.risk_result.risky_flag);
6002 		END IF;
6003 --		IF L_auth_result.risk_result.risk_score > l_risk_threshold THEN
6004                 IF L_auth_result.risk_result.risky_flag = 'Y' Then
6005 			IF l_debug_level >0 THEN
6006 				oe_debug_pub.add('Risk threshold exceeded...!');
6007 			END IF;
6008 
6009 		--comm rej	IF nvl(p_reject_on_risk_failure, 'N') = 'N' THEN  --R12 CVV2
6010 	 			-- the value for parameter param3  is Hold, then
6011 				IF l_payments_tbl(I).line_id IS NULL THEN
6012                                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6013                                    THEN
6014 					OE_Verify_Payment_PUB.Apply_Verify_Hold_and_Commit
6015 					( p_header_id     => p_header_rec.header_id
6016 					, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6017 					, p_msg_count     => l_msg_count
6018 					, p_msg_data      => l_msg_data
6019 					, p_return_status => l_return_status
6020 					);
6021 
6022                                    ELSE
6023 					OE_Verify_Payment_PUB.Apply_Verify_Hold
6024 					( p_header_id     => p_header_rec.header_id
6025 					, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6026 					, p_msg_count     => l_msg_count
6027 					, p_msg_data      => l_msg_data
6028 					, p_return_status => l_return_status
6029 					);
6030                                    END IF;
6031 				ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6032                                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6033                                    THEN
6034 					OE_Verify_Payment_PUB.Apply_Verify_Line_Hold_Commit
6035 					( p_header_id     => p_header_rec.header_id
6036 					, p_line_id	=> l_payments_tbl(I).line_id
6037 					, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6038 					, p_msg_count     => l_msg_count
6039 					, p_msg_data      => l_msg_data
6040 					, p_return_status => l_return_status
6041 					);
6042                                    ELSE
6043 					OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6044 					( p_header_id     => p_header_rec.header_id
6045 					, p_line_id	=> l_payments_tbl(I).line_id
6046 					, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6047 					, p_msg_count     => l_msg_count
6048 					, p_msg_data      => l_msg_data
6049 					, p_return_status => l_return_status
6050 					);
6051                                    END IF;
6052 				END IF; -- line id is not null
6053 
6054 				FND_MESSAGE.SET_NAME('ONT','ONT_CC_RISK_HOLD_APPLIED');
6055 				OE_MSG_PUB.ADD;
6056 				RETURN;
6057 
6058                                 oe_debug_pub.add('after commented message');
6059 		/*comm rej	ELSE
6060 				IF l_debug_level >0 THEN
6061 					oe_debug_pub.add('Risk validation failed...!');
6062 				END IF;
6063 				-- the value is reject, then
6064 				FND_MESSAGE.SET_NAME('ONT','ONT_RISK_VALIDATION_FAILED');
6065 				OE_MSG_PUB.ADD;
6066 				RAISE FND_API.G_EXC_ERROR;
6067 			END IF; --Reject flag
6068                   comm rej  */
6069 		END IF; -- risk score > threshold
6070 	END IF; --risk eval flag = y
6071         oe_debug_pub.add('before uncommented message');
6072 	FND_MESSAGE.SET_NAME('ONT','ONT_PAYMENT_AUTH_SUCCESS');
6073 	FND_MESSAGE.SET_TOKEN('AMOUNT',TO_CHAR(l_amount_to_authorize,l_format_mask));
6074 	OE_MSG_PUB.ADD;
6075         oe_debug_pub.add('after uncommented message');
6076 	IF l_debug_level >0 THEN
6077 		oe_debug_pub.add('After risk evaluation...!');
6078 	END IF;
6079 
6080         -- update the payment amount field on order header, this is for backward compatibility
6081         -- we used to show the authorized amount on order header. We have to update header
6082         -- table directly here as we did in 11i code, as the payment amount field is also
6083         -- used for Cash and Check payment type.
6084         -- if line_id is null, then this is for header invoice payment.
6085         IF l_payments_tbl(I).line_id IS NULL THEN
6086           UPDATE oe_order_headers_all
6087           SET    payment_amount = l_amount.value
6088                 , last_updated_by = FND_GLOBAL.USER_ID
6089                 , last_update_date = SYSDATE
6090                 , last_update_login = FND_GLOBAL.LOGIN_ID
6091                 , lock_control = lock_control + 1
6092           WHERE  header_id = p_header_rec.header_id
6093           AND    payment_type_code = 'CREDIT_CARD';
6094         END IF;
6095 
6096 
6097   --bug 4767915
6098   --A new message has been added for the scenario when the
6099   --authorization is successful but security code validation has failed
6100   ELSIF l_return_status = FND_API.G_RET_STS_SUCCESS AND
6101   l_response.result_code = 'SECURITY_CODE_WARNING' THEN
6102 
6103 	IF l_debug_level > 0 THEN
6104 		oe_debug_pub.add('Security code warning...');
6105 		oe_debug_pub.add('Message returned by payments...'||l_response.result_message);
6106 		oe_debug_pub.add('Result code...'||l_Response.result_code);
6107 	END IF;
6108 
6109 
6110 	IF l_payments_tbl(I).line_id IS NULL THEN
6111            IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6112            THEN
6113 		OE_Verify_Payment_PUB.Apply_Verify_Hold_and_Commit
6114 		( p_header_id     => p_header_rec.header_id
6115 		, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6116 		, p_msg_count     => l_msg_count
6117 		, p_msg_data      => l_msg_data
6118 		, p_return_status => l_return_status
6119 		);
6120 
6121            ELSE
6122 		OE_Verify_Payment_PUB.Apply_Verify_Hold
6123 		( p_header_id     => p_header_rec.header_id
6124 		, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6125 		, p_msg_count     => l_msg_count
6126 		, p_msg_data      => l_msg_data
6127 		, p_return_status => l_return_status
6128 		);
6129           END IF;
6130 
6131           -- update order header with the authorized amount for header invoice payment.
6132           UPDATE oe_order_headers_all
6133           SET    payment_amount = l_amount.value
6134                 , last_updated_by = FND_GLOBAL.USER_ID
6135                 , last_update_date = SYSDATE
6136                 , last_update_login = FND_GLOBAL.LOGIN_ID
6137                 , lock_control = lock_control + 1
6138           WHERE  header_id = p_header_rec.header_id
6139           AND    payment_type_code = 'CREDIT_CARD';
6140 
6141 	ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6142            IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6143            THEN
6144 		OE_Verify_Payment_PUB.Apply_Verify_Line_Hold_Commit
6145 		( p_header_id     => p_header_rec.header_id
6146 		, p_line_id	=> l_payments_tbl(I).line_id
6147 		, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6148 		, p_msg_count     => l_msg_count
6149 		, p_msg_data      => l_msg_data
6150 		, p_return_status => l_return_status
6151 		);
6152 
6153            ELSE
6154 		OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6155 		( p_header_id     => p_header_rec.header_id
6156 		, p_line_id	=> l_payments_tbl(I).line_id
6157 		, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6158 		, p_msg_count     => l_msg_count
6159 		, p_msg_data      => l_msg_data
6160 		, p_return_status => l_return_status
6161 		);
6162            END IF;
6163 	END IF; -- line id is not null
6164 
6165 	FND_MESSAGE.SET_NAME('ONT','ONT_CC_SECURITY_CODE_FAILED');
6166 	OE_MSG_PUB.ADD;
6167 	RETURN;
6168   --bug 4767915
6169   /*  ELSIF l_return_status = FND_API.G_RET_STS_SUCCESS AND
6170   l_response.result_code = 'RISK_THRESHOLD_EXCEEDED' THEN
6171 
6172 	IF l_debug_level > 0 THEN
6173 		oe_debug_pub.add('Risk threshold exceeded...');
6174 		oe_debug_pub.add('Value of risky flag...'||L_auth_result.risk_result.risky_flag);
6175 	END IF;
6176 
6177 	IF L_auth_result.risk_result.risky_flag = 'Y' Then
6178 		IF l_debug_level >0 THEN
6179 			oe_debug_pub.add('Risk threshold exceeded...inside risky flag!');
6180 		END IF;
6181 
6182 		IF l_payments_tbl(I).line_id IS NULL THEN
6183                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6184                    THEN
6185 			OE_Verify_Payment_PUB.Apply_Verify_Hold_and_Commit
6186 			( p_header_id     => p_header_rec.header_id
6187 			, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6188 			, p_msg_count     => l_msg_count
6189 			, p_msg_data      => l_msg_data
6190 			, p_return_status => l_return_status
6191 			);
6192                    ELSE
6193 			OE_Verify_Payment_PUB.Apply_Verify_Hold
6194 			( p_header_id     => p_header_rec.header_id
6195 			, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6196 			, p_msg_count     => l_msg_count
6197 			, p_msg_data      => l_msg_data
6198 			, p_return_status => l_return_status
6199 			);
6200                   END IF;
6201 		ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6202                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6203                    THEN
6204 			OE_Verify_Payment_PUB.Apply_Verify_Line_Hold_Commit
6205 			( p_header_id     => p_header_rec.header_id
6206 			, p_line_id	=> l_payments_tbl(I).line_id
6207 			, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6208 			, p_msg_count     => l_msg_count
6209 			, p_msg_data      => l_msg_data
6210 			, p_return_status => l_return_status
6211 			);
6212                    ELSE
6213 			OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6214 			( p_header_id     => p_header_rec.header_id
6215 			, p_line_id	=> l_payments_tbl(I).line_id
6216 			, p_hold_id       => 12 -- Seeded Id for CC Risk Hold
6217 			, p_msg_count     => l_msg_count
6218 			, p_msg_data      => l_msg_data
6219 			, p_return_status => l_return_status
6220 			);
6221                    END IF;
6222 		END IF; -- line id is not null
6223 
6224 		FND_MESSAGE.SET_NAME('ONT','ONT_CC_RISK_HOLD_APPLIED');
6225 		OE_MSG_PUB.ADD;
6226 		RETURN;
6227 	END IF;*/
6228   ELSE
6229 	IF l_debug_level >0 THEN
6230 		oe_debug_pub.add('Authorization failure...!'||l_return_status);
6231 		oe_debug_pub.add('l_response.result_code'||l_response.result_code);
6232 		oe_debug_pub.add('Message....'||l_response.result_message);
6233 		oe_debug_pub.add('SQLERRM '||sqlerrm);
6234 	END IF;
6235 
6236         l_result_status := 'FAIL';
6237 
6238 	-- add messages to message stack.
6239 	oe_msg_pub.add_text(p_message_text => l_response.result_message);
6240 
6241 	-- apply credit card authorization hold in case of auth failure.
6242 --comm rej	IF nvl(p_reject_on_auth_failure, 'N') = 'N' THEN
6243 		IF l_payments_tbl(I).line_id IS NULL THEN
6244                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6245                    THEN
6246 			OE_Verify_Payment_PUB.Apply_Verify_Hold_and_Commit
6247 				( p_header_id     => p_header_rec.header_id
6248 				, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6249 				, p_msg_count     => l_msg_count
6250 				, p_msg_data      => l_msg_data
6251 				, p_return_status => l_return_status
6252 				 );
6253 
6254                    ELSE
6255 			OE_Verify_Payment_PUB.Apply_Verify_Hold
6256 				( p_header_id     => p_header_rec.header_id
6257 				, p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6258 				, p_msg_count     => l_msg_count
6259 				, p_msg_data      => l_msg_data
6260 				, p_return_status => l_return_status
6261 				 );
6262                    END IF;
6263 		ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6264                    IF NVL(p_calling_action, 'BOOKING') IN ('SHIPPING','PACKING','PICKING')
6265                    THEN
6266 			OE_Verify_Payment_PUB.Apply_Verify_Line_Hold_Commit
6267 				( p_header_id     => p_header_rec.header_id
6268 				 , p_line_id       => l_payments_tbl(I).line_id
6269 				 , p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6270 				 , p_msg_count     => l_msg_count
6271 				 , p_msg_data      => l_msg_data
6272 				 , p_return_status => l_return_status
6273 			 );
6274 
6275                    ELSE
6276 			OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6277 				( p_header_id     => p_header_rec.header_id
6278 				 , p_line_id       => l_payments_tbl(I).line_id
6279 				 , p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6280 				 , p_msg_count     => l_msg_count
6281 				 , p_msg_data      => l_msg_data
6282 				 , p_return_status => l_return_status
6283 			 );
6284                    END IF;
6285 		END IF;
6286 
6287 		FND_MESSAGE.SET_NAME('ONT','ONT_CC_AUTH_HOLD_APPLIED');
6288 		FND_MESSAGE.SET_TOKEN('AMOUNT',TO_CHAR(l_amount_to_authorize,l_format_mask));
6289 		OE_MSG_PUB.ADD;
6290 
6291 /*comm rej	ELSE
6292 	       -- the value is to reject on failure, then
6293 		-- raise error so the transaction will fail
6294 		FND_MESSAGE.SET_NAME('ONT',' ONT_CC_AUTH_FAILED');				 			FND_MESSAGE.SET_TOKEN('AMOUNT',TO_CHAR(l_amount_to_authorize,l_format_mask));
6295 		OE_MSG_PUB.ADD;
6296 		RAISE FND_API.G_EXC_ERROR;
6297 	END IF;
6298 comm rej*/
6299 	IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6300 			RAISE FND_API.G_EXC_ERROR;
6301 	ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6302 			RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6303 	END IF;
6304 
6305   END IF; --Return status of create_auth
6306 
6307   /*IF l_debug_level  > 0 THEN
6308       oe_debug_pub.add(  ' ' ) ;
6309   END IF;
6310   IF l_debug_level  > 0 THEN
6311       oe_debug_pub.add(  'OEXPVPMB: AUTHORIZATION SUCCEEDED ...' ) ;
6312   END IF;
6313 
6314   --For bug 3571485
6315   l_format_mask := get_format_mask(p_header_rec.transactional_curr_code);
6316 
6317   --bug3511992 start
6318   FND_MESSAGE.SET_NAME('ONT','ONT_PAYMENT_AUTH_SUCCESS');
6319   FND_MESSAGE.SET_TOKEN('AMOUNT',TO_CHAR(l_amount_to_authorize,l_format_mask)); --Format mask for bug 3571485
6320   OE_MSG_PUB.ADD;*/
6321   --bug3511992 end
6322 
6323   <<UPDATE_AUTH_FOR_MULTIPMNTS>>
6324   -- Update Payment Amount and Authorization Code and DATE
6325   IF l_debug_level  > 0 THEN
6326       oe_debug_pub.add(  'OEXPVPMB: BEFORE UPDATING AUTHORIZATION INFO FOR MULTIPLE PAYMENT.' ) ;
6327       oe_debug_pub.add(  'OEXPVPMB: l_amount_to_authorize is: '||l_amount_to_authorize ) ;
6328       oe_debug_pub.add(  'OEXPVPMB: l_auth_code is: '||l_auth_code ) ;
6329       oe_debug_pub.add(  'OEXPVPMB: payment_number is: '||l_payments_tbl(I).payment_number ) ;
6330   END IF;
6331   --
6332 
6333 /*
6334   IF l_result_status = 'PASS' THEN
6335     OE_Verify_Payment_PUB.Update_AuthInfo_for_MultiPmnts
6336 		           (  p_header_rec.header_id
6337                             , l_amount_to_authorize
6338                             , l_auth_code
6339                             , l_trxn_date
6340                             , l_tangible_id
6341                             , l_payments_tbl(I).line_id
6342                             , l_payments_tbl(I).payment_number
6343                             , l_msg_count
6344                             , l_msg_data
6345                             , l_return_status
6346                             );
6347   END IF;
6348 
6349 
6350   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6351     p_result_out := 'FAIL';
6352 
6353 
6354 
6355     RETURN;
6356   END IF;
6357 
6358   IF l_debug_level  > 0 THEN
6359       oe_debug_pub.add(  'OEXPVPMB: RISK RESPONSE INCLUDED : '||L_RISKRESP_INCLUDED ) ;
6360   END IF;
6361 
6362   IF l_riskresp_included = 'YES' THEN
6363     l_risk_threshold := TO_NUMBER(NVL(fnd_profile.value('ONT_RISK_FAC_THRESHOLD'), '0')) ;
6364 
6365     IF l_debug_level  > 0 THEN
6366         oe_debug_pub.add(  'OEXPVPMB: RISK SCORE : '||L_RISK_SCORE ) ;
6367     END IF;
6368     IF l_debug_level  > 0 THEN
6369         oe_debug_pub.add(  'OEXPVPMB: OM RISK FACTOR THRESHOLD : '||L_RISK_THRESHOLD ) ;
6370     END IF;
6371 
6372     -- If Transaction is Risky, then apply credit card Risk hold.
6373     IF l_risk_score > l_risk_threshold THEN
6374 
6375          IF l_debug_level  > 0 THEN
6376              oe_debug_pub.add(  'OEXPVPMB: TRANSACTION WAS RISKY' ) ;
6377          END IF;
6378       -- Set the Out result to Risk to indicate a risky Transaction
6379 	 p_result_out := 'RISK' ;
6380 	 RETURN;
6381 
6382     END IF;
6383   END IF;*/
6384 
6385   <<Update_Verify_Hold>>
6386     -- To either release or apply the verify hold.
6387     p_result_out := l_result_status;
6388 
6389     IF l_result_status = 'PASS'
6390        AND  l_return_status = FND_API.G_RET_STS_SUCCESS  THEN
6391 
6392 	 -- Release Any existing CC Holds
6393       IF l_debug_level  > 0 THEN
6394           oe_debug_pub.add(  'OEXPVPMB: RELEASING LINE LEVEL CREDIT CARD HOLDS' ) ;
6395       END IF;
6396 	 --
6397 
6398      IF l_payments_tbl(I).line_id IS NULL THEN
6399         OE_Verify_Payment_PUB.Release_Verify_Hold
6400                                  ( p_header_id     => p_header_rec.header_id
6401                                  , p_epayment_hold => 'Y' -- We want to Release Credit Card Holds
6402                                  , p_msg_count     => l_msg_count
6403                                  , p_msg_data      => l_msg_data
6404                                  , p_return_status => l_return_status
6405                                  );
6406 
6407       ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6408 	 OE_Verify_Payment_PUB.Release_Verify_Line_Hold
6409                                  ( p_header_id     => p_header_rec.header_id
6410                                  , p_line_id       => l_payments_tbl(I).line_id
6411                                  , p_epayment_hold => 'Y' -- We want to Release Credit Card Holds
6412                                  , p_msg_count     => l_msg_count
6413                                  , p_msg_data      => l_msg_data
6414                                  , p_return_status => l_return_status
6415                                  );
6416       END IF;
6417 
6418       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6419 	   RAISE FND_API.G_EXC_ERROR;
6420       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6421         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6422       END IF;
6423 
6424     ELSIF l_result_status = 'RISK' THEN
6425 
6426 	 -- Apply Risk Hold on the Order
6427       IF l_debug_level  > 0 THEN
6428           oe_debug_pub.add(  'OEXPVPMB: APPLYING LINE LEVEL CC RISK HOLD' ) ;
6429       END IF;
6430 	 --
6431       IF l_payments_tbl(I).line_id IS NULL THEN
6432 	 OE_Verify_Payment_PUB.Apply_Verify_Hold
6433                                  ( p_header_id     => p_header_rec.header_id
6434                                  , p_hold_id       => 12 -- Seed Id for CC Risk Hold
6435                                  , p_msg_count     => l_msg_count
6436                                  , p_msg_data      => l_msg_data
6437                                  , p_return_status => l_return_status
6438                                  );
6439       ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6440 	 OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6441                                  ( p_header_id     => p_header_rec.header_id
6442                                  , p_line_id       => l_payments_tbl(I).line_id
6443                                  , p_hold_id       => 12 -- Seed Id for CC Risk Hold
6444                                  , p_msg_count     => l_msg_count
6445                                  , p_msg_data      => l_msg_data
6446                                  , p_return_status => l_return_status
6447                                  );
6448       END IF;
6449 
6450       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6451 	   RAISE FND_API.G_EXC_ERROR;
6452       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6453         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6454       END IF;
6455 
6456     ELSE -- Failed
6457 
6458 	 -- Apply CC Auth Failure Hold on the Order
6459       IF l_debug_level  > 0 THEN
6460           oe_debug_pub.add(  'OEXPVPMB: APPLYING LINE LEVEL CC AUTH FAILURE HOLD' ) ;
6461       END IF;
6462 	 --
6463 
6464       IF l_payments_tbl(I).line_id IS NULL THEN
6465 	 OE_Verify_Payment_PUB.Apply_Verify_Hold
6466                                  ( p_header_id     => p_header_rec.header_id
6467                                  , p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6468                                  , p_msg_count     => l_msg_count
6469                                  , p_msg_data      => l_msg_data
6470                                  , p_return_status => l_return_status
6471                                  );
6472       ELSIF l_payments_tbl(I).line_id IS NOT NULL THEN
6473 	 OE_Verify_Payment_PUB.Apply_Verify_Line_Hold
6474                                  ( p_header_id     => p_header_rec.header_id
6475                                  , p_line_id       => l_payments_tbl(I).line_id
6476                                  , p_hold_id       => 11 -- Seeded Id for CC Auth Failure Hold
6477                                  , p_msg_count     => l_msg_count
6478                                  , p_msg_data      => l_msg_data
6479                                  , p_return_status => l_return_status
6480                                  );
6481       END IF;
6482 
6483       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6484 	   RAISE FND_API.G_EXC_ERROR;
6485       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6486         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6487       END IF;
6488 
6489     END IF; -- IF Result Status.
6490 
6491   <<Next_In_Loop>>
6492   I := l_payments_tbl.NEXT(I);
6493 END LOOP;
6494 
6495   p_return_status := l_return_status;
6496 
6497 EXCEPTION
6498     WHEN FND_API.G_EXC_ERROR THEN
6499         l_err_message := SQLERRM;
6500 	IF l_debug_level > 0 THEN
6501 		oe_debug_pub.add('Create_Authorization error....exc');
6502 		oe_debug_pub.add('After call to Create_Authorization error'||l_return_status);
6503 		oe_debug_pub.add('Result code'||l_response.result_code);
6504 		oe_debug_pub.add('Error'||l_err_message);
6505 	END IF;
6506 
6507       p_return_status := FND_API.G_RET_STS_ERROR;
6508       OE_MSG_PUB.Count_And_Get
6509             ( p_count => l_msg_count,
6510               p_data  => l_msg_data
6511             );
6512 
6513     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6514         l_err_message := SQLERRM;
6515 	IF l_debug_level > 0 THEN
6516 		oe_debug_pub.add('Create_Authorization error....unxc');
6517 		oe_debug_pub.add('After call to Create_Authorization error'||l_return_status);
6518 		oe_debug_pub.add('Result code'||l_response.result_code);
6519 		oe_debug_pub.add('f Error'||l_err_message);
6520 	END IF;
6521 
6522       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6523       OE_MSG_PUB.Count_And_Get
6524             ( p_count => l_msg_count,
6525               p_data  => l_msg_data
6526             );
6527 
6528     WHEN OTHERS THEN
6529       l_err_message := SQLERRM;
6530       oe_debug_pub.add('Returned error others part in Auth multi payments...'||l_err_message);
6531 
6532 	 p_result_out := 'FAIL';
6533       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6534 
6535       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6536       THEN
6537         FND_MSG_PUB.Add_Exc_Msg
6538             (   G_PKG_NAME
6539             ,   'Authorize_Payment'
6540             );
6541       END IF;
6542 
6543       OE_MSG_PUB.Count_And_Get
6544             ( p_count => l_msg_count,
6545               p_data  => l_msg_data
6546             );
6547 
6548 
6549 END Authorize_MultiPayments;
6550 
6551 PROCEDURE Check_ReAuth_for_MultiPmnts
6552 (  p_credit_card_approval_code 	IN VARCHAR2
6553 ,  p_trxn_extension_id		IN NUMBER
6554 ,  p_amount_to_authorize	IN NUMBER
6555 ,  p_org_id			IN NUMBER
6556 ,  p_site_use_id		IN NUMBER
6557 ,  p_header_id                  IN NUMBER  --bug 5209584
6558 ,  p_line_id                    IN NUMBER
6559 ,  p_payment_number             IN NUMBER
6560 ,  p_reauthorize_out 		OUT NOCOPY VARCHAR2
6561 ,  x_msg_count                  OUT NOCOPY  NUMBER
6562 ,  x_msg_data                   OUT NOCOPY  VARCHAR2
6563 ,  x_return_status              OUT NOCOPY  VARCHAR2
6564 )
6565 IS
6566 
6567 l_reauthorize_flag 	VARCHAR2(1) ; -- 4863717
6568 l_settled_flag	 	VARCHAR2(1) := 'N';
6569 
6570 l_return_Status		VARCHAR2(1);
6571 l_msg_count		NUMBER;
6572 l_msg_data		VARCHAR2(2000);
6573 l_trxn_extension_id     NUMBER;
6574 l_effective_auth_amount	NUMBER;
6575 --
6576 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
6577 --
6578 
6579 BEGIN
6580 
6581   x_return_status := FND_API.G_RET_STS_SUCCESS;
6582   IF l_debug_level  > 0 THEN
6583       oe_debug_pub.add(  'OEXPVPMB: IN CHECK REAUTHORIZE ORDER' ) ;
6584   END IF;
6585 
6586    l_reauthorize_flag := 'N' ;
6587 
6588   IF p_amount_to_authorize > 0 THEN
6589 
6590   -- comment out for 4863717
6591   --  IF p_credit_card_approval_code IS NOT NULL THEN
6592 
6593       -- to check if the authorization has been settled
6594       BEGIN
6595         SELECT 	nvl(settled_flag, 'N')
6596         INTO	l_settled_flag
6597   	FROM 	iby_trxn_extensions_v
6598 	WHERE   trxn_extension_id = p_trxn_extension_id;
6599       EXCEPTION WHEN NO_DATA_FOUND THEN
6600 	l_settled_flag := 'N';
6601       END;
6602 
6603       IF l_settled_flag = 'Y' THEN
6604         IF l_debug_level  > 0 THEN
6605           oe_debug_pub.add(  'OEXPVPMB: authorization has been settled, need to re-authorize.');
6606         END IF;
6607 
6608         -- need to create a new payment transaction extension as the old one has been settled.
6609         Create_New_Payment_Trxn (p_trxn_extension_id => p_trxn_extension_id,
6610                                  p_org_id	     => p_org_id,
6611                                  p_site_use_id	     => p_site_use_id,
6612                                  x_trxn_extension_id => l_trxn_extension_id,
6613                                  x_msg_count         => x_msg_count,
6614                                  x_msg_data          => x_msg_data,
6615                                  x_return_status     => x_return_status);
6616 
6617         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6618           RAISE FND_API.G_EXC_ERROR;
6619         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6620           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6621         END IF;
6622 
6623        -- update oe_payments table
6624        UPDATE oe_payments
6625        SET    trxn_extension_id = l_trxn_extension_id
6626        WHERE  trxn_extension_id = p_trxn_extension_id
6627          AND  header_id         = p_header_id  --bug 5209584
6628          AND  nvl(line_id,-1)   = nvl(p_line_id,-1)
6629          AND  payment_number    = p_payment_number;
6630 
6631 	p_reauthorize_out := 'Y' ;
6632 	RETURN;
6633 
6634       END IF;
6635 
6636       -- need to re-authorize if the authorization has expired.
6637       -- effective_auth_amount of 0 indicates auth has expired.
6638       -- the auth would be valid if authorization_amount is equal to
6639       -- effective_auth_amount
6640       BEGIN
6641    	SELECT effective_auth_amount
6642         INTO   l_effective_auth_amount
6643 	FROM   iby_trxn_ext_auths_v
6644 	WHERE  trxn_extension_id = p_trxn_extension_id
6645         AND    nvl(authorization_amount,0) > 0
6646         AND    authorization_status=0;
6647       EXCEPTION WHEN NO_DATA_FOUND THEN
6648         -- if never been authorized
6649         l_reauthorize_flag := 'Y';
6650         p_reauthorize_out := l_reauthorize_flag ;
6651         -- if no entry found, need to auth without creating a new trxn id.
6652         RETURN;
6653       END;
6654 
6655       IF nvl(l_effective_auth_amount,0) = 0 THEN
6656         l_reauthorize_flag := 'Y';
6657         p_reauthorize_out := l_reauthorize_flag ;
6658         IF l_debug_level  > 0 THEN
6659            oe_debug_pub.add(  'OEXPVPMB: authorization has either expired or not exists.');
6660         END IF;
6661       END IF;
6662 
6663       IF l_reauthorize_flag = 'Y' THEN
6664          -- need to create a new payment transaction extension as the old one has expired.
6665          Create_New_Payment_Trxn (p_trxn_extension_id => p_trxn_extension_id,
6666                                 p_org_id	     => p_org_id,
6667                                 p_site_use_id	     => p_site_use_id,
6668                                 x_trxn_extension_id => l_trxn_extension_id,
6669                                 x_msg_count         => x_msg_count,
6670                                 x_msg_data          => x_msg_data,
6671                                 x_return_status     => x_return_status);
6672 
6673          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6674            RAISE FND_API.G_EXC_ERROR;
6675          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6676            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6677          END IF;
6678 
6679          -- update oe_payments table
6680          UPDATE oe_payments
6681          SET    trxn_extension_id = l_trxn_extension_id
6682          WHERE  trxn_extension_id = p_trxn_extension_id
6683            AND  header_id         = p_header_id  --bug 5209584
6684            AND  nvl(line_id,-1)   = nvl(p_line_id,-1)
6685            AND  payment_number    = p_payment_number;
6686        END IF;
6687 
6688    -- comment out for bug 4863717
6689    /*
6690    ELSE
6691       l_reauthorize_flag := 'Y' ;
6692 
6693    END IF;
6694    */
6695 
6696   ELSE
6697 
6698     -- If Outbound Total is less or equal to 0 then NO need to Reauthorize
6699     l_reauthorize_flag := 'N';
6700 
6701   END IF; -- IF Outbound Total
6702 
6703   IF l_debug_level  > 0 THEN
6704     oe_debug_pub.add(  'OEXPVPMB: reauthorize flag is: '||l_reauthorize_flag);
6705   END IF;
6706 
6707   p_reauthorize_out := l_reauthorize_flag ;
6708 
6709   EXCEPTION WHEN OTHERS THEN
6710       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6711       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6712       THEN
6713         FND_MSG_PUB.Add_Exc_Msg
6714             (   G_PKG_NAME
6715             ,   'Check_ReAuth_for_MultiPmnts'
6716             );
6717       END IF;
6718 
6719       OE_MSG_PUB.Count_And_Get
6720             ( p_count => x_msg_count,
6721               p_data  => x_msg_data
6722             );
6723 
6724 END Check_ReAuth_for_MultiPmnts;
6725 
6726 -- This function needs to be changed later on to consider partially invoicing
6727 FUNCTION Get_Line_Total
6728 ( p_line_id		  IN 	NUMBER
6729 , p_header_id		  IN	NUMBER
6730 , p_currency_code	  IN   	VARCHAR2
6731 , p_level	 	  IN	VARCHAR2
6732 , p_amount_type           IN    VARCHAR2 DEFAULT NULL --pnpl
6733 , p_to_exclude_commitment IN    VARCHAR2 DEFAULT 'Y' --bug3225795
6734 ) RETURN NUMBER IS
6735 
6736 l_tax_value  		NUMBER := 0;
6737 l_extended_price	NUMBER := 0;
6738 l_line_total		NUMBER := 0;
6739 l_line_total_no_comt	NUMBER := 0;
6740 l_charge_amount		NUMBER;
6741 l_commitment_applied    NUMBER := 0;
6742 l_header_id		NUMBER;
6743 l_payment_term_id	NUMBER;
6744 l_msg_count		NUMBER;
6745 l_msg_data		VARCHAR2(2000);
6746 l_downpayment           number := 0;
6747 l_downpayment_due       number := 0;
6748 l_item_invoiceable	VARCHAR2(1) := 'Y';
6749 i			pls_integer;
6750 
6751 --pnpl start
6752 l_pay_now_total_detail_tbl   AR_VIEW_TERM_GRP.amounts_table;
6753 l_pay_now_total_summary_rec  AR_VIEW_TERM_GRP.summary_amounts_rec;
6754 l_return_status              VARCHAR2(30) := FND_API.G_RET_STS_SUCCESS;
6755 l_return_value          NUMBER;
6756 --pnpl end
6757 
6758 --
6759 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
6760 --
6761 BEGIN
6762 
6763   IF l_debug_level  > 0 THEN
6764       oe_debug_pub.add(  'ENTERING OE_Verify_Payment_Pub.Get_Line_Total.' , 1 ) ;
6765   END IF;
6766 
6767   -- Select the Tax Value and Outbound Extended Price
6768   BEGIN
6769   SELECT nvl(ool.tax_value,0)
6770        , nvl(ool.Ordered_Quantity,0) * ool.unit_selling_price
6771        , header_id
6772        , payment_term_id
6773   INTO   l_tax_value
6774        , l_extended_price
6775        , l_header_id
6776        , l_payment_term_id
6777   FROM  oe_order_lines_all ool
6778   WHERE ool.line_id = p_line_id
6779 --  AND   ool.open_flag = 'Y' --bug3225795
6780   AND   ool.line_category_code <> 'RETURN'
6781   AND   NOT EXISTS
6782        (SELECT 'Non Invoiceable Item Line'
6783         FROM   mtl_system_items mti
6784         WHERE  mti.inventory_item_id = ool.inventory_item_id
6785         AND    mti.organization_id   = nvl(ool.ship_from_org_id,
6786                          oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
6787         AND   (mti.invoiceable_item_flag = 'N'
6788            OR  mti.invoice_enabled_flag  = 'N'));
6789 
6790   EXCEPTION
6791     WHEN NO_DATA_FOUND THEN
6792       l_tax_value := 0;
6793       l_extended_price := 0;
6794   END;
6795 
6796     IF l_debug_level  > 0 THEN
6797       oe_debug_pub.add(  'In Get_Line_Total, l_extended_price is: '||l_extended_price , 3 ) ;
6798     END IF;
6799 
6800     -- Select the committment applied amount
6801     BEGIN
6802     --pnpl added the Do_Commitment_Sequencing check
6803     IF OE_Commitment_Pvt.Do_Commitment_Sequencing THEN
6804        SELECT SUM(nvl(op.commitment_applied_amount,0))
6805        INTO   l_commitment_applied
6806        FROM   oe_payments op
6807        WHERE  op.line_id = p_line_id
6808        AND    op.header_id = p_header_id
6809        AND    NOT EXISTS
6810           (SELECT 'Non Invoiceable Item Line'
6811            FROM   mtl_system_items mti, oe_order_lines_all ool
6812            WHERE  ool.line_id           = op.line_id
6813            AND    mti.inventory_item_id = ool.inventory_item_id
6814            AND    mti.organization_id   = nvl(ool.ship_from_org_id,
6815                           oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
6816            AND   (mti.invoiceable_item_flag = 'N'
6817                 OR  mti.invoice_enabled_flag  = 'N'));
6818     ELSE
6819        SELECT nvl(ool.Ordered_Quantity,0) *(ool.unit_selling_price)
6820        INTO   l_commitment_applied
6821        FROM   oe_order_lines_all ool
6822        WHERE  ool.line_id      = p_line_id
6823        AND    ool.commitment_id is not null
6824        --AND    ool.open_flag      = 'Y'
6825        --AND    nvl(ool.invoice_interface_status_code,'NO') <> 'YES' --bug3225795
6826        AND    ool.line_category_code <> 'RETURN'
6827        AND   NOT EXISTS
6828 	  (SELECT 'Non Invoiceable Item Line'
6829 	   FROM   mtl_system_items mti
6830 	   WHERE  mti.inventory_item_id = ool.inventory_item_id
6831 	   AND    mti.organization_id   = nvl(ool.ship_from_org_id,
6832 					      oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
6833 	   AND   (mti.invoiceable_item_flag = 'N'
6834 		  OR  mti.invoice_enabled_flag  = 'N'));
6835     END IF;
6836 
6837     EXCEPTION
6838       WHEN NO_DATA_FOUND THEN
6839         l_commitment_applied := 0;
6840     END;
6841 
6842 
6843     IF l_debug_level  > 0 THEN
6844       oe_debug_pub.add(  'In Get_Line_Total, commitment_applied_amount is: '||l_commitment_applied , 3 ) ;
6845     END IF;
6846 
6847     -- get line level charges
6848     BEGIN
6849     SELECT SUM(
6850                 DECODE(P.CREDIT_OR_CHARGE_FLAG,'C',
6851                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
6852                                DECODE(L.ORDERED_QUANTITY,0,0,(-1) * (P.OPERAND)),
6853                                (-1) * (L.ORDERED_QUANTITY* nvl(P.ADJUSTED_AMOUNT,0))),
6854                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
6855                                DECODE(L.ORDERED_QUANTITY,0,0,P.OPERAND),
6856                                (L.ORDERED_QUANTITY* nvl(P.ADJUSTED_AMOUNT,0)))
6857                        )
6858                  )
6859      INTO l_charge_amount
6860      FROM OE_PRICE_ADJUSTMENTS P,
6861           OE_ORDER_LINES_ALL L
6862      WHERE P.LINE_ID = p_line_id
6863      AND   P.LINE_ID = L.LINE_ID
6864      AND   P.LIST_LINE_TYPE_CODE = 'FREIGHT_CHARGE'
6865      AND   P.APPLIED_FLAG = 'Y'
6866      --Bug 6072691
6867      --Uninvoiced and invoiced charges will be returned in the first two conditions
6868      --Last condition will handle all the other amount types
6869      AND   ( (nvl(p_amount_type,'OTHERS') = 'UNINV_CHARGES'
6870               AND nvl(p.invoiced_flag,'N') = 'N')
6871             OR
6872              (nvl(p_amount_type,'OTHERS') = 'INV_CHARGES'
6873               AND nvl(p.invoiced_flag,'N') = 'Y')
6874             OR
6875              (nvl(p_amount_type,'OTHERS') NOT IN('UNINV_CHARGES','INV_CHARGES'))
6876            );
6877 
6878      EXCEPTION
6879        WHEN NO_DATA_FOUND THEN
6880          l_charge_amount := 0;
6881      END;
6882 
6883      IF l_debug_level  > 0 THEN
6884        oe_debug_pub.add(  'In Get_Line_Total, l_charge_amount is: '||l_charge_amount , 3 ) ;
6885      END IF;
6886 
6887      l_line_total := nvl(l_extended_price,0) + nvl(l_tax_value,0)
6888                      + nvl(l_charge_amount,0) - nvl(l_commitment_applied,0);
6889 
6890      IF l_debug_level  > 0 THEN
6891        oe_debug_pub.add(  'In Get_Line_Total, l_line_total is: '||l_line_total , 3 ) ;
6892      END IF;
6893 
6894     l_line_total_no_comt := nvl(l_extended_price,0) + nvl(l_tax_value,0)
6895                               + nvl(l_charge_amount,0);
6896 
6897   --pnpl adding the checks w.r.t p_amount_type
6898   IF p_amount_type IS NULL THEN
6899       --IF oe_sys_parameters.value('ACCOUNT_FIRST_INSTALLMENT_ONLY') = 'Y'
6900        --pnpl
6901        IF Oe_Prepayment_Util.Get_Installment_Options = 'AUTHORIZE_FIRST_INSTALLMENT' THEN
6902 
6903 	   l_pay_now_total_detail_tbl(1).line_id := p_line_id;
6904 	   l_pay_now_total_detail_tbl(1).term_id := l_payment_term_id;
6905 	   l_pay_now_total_detail_tbl(1).line_amount := nvl(l_extended_price,0);
6906            l_pay_now_total_detail_tbl(1).tax_amount := nvl(l_tax_value,0);
6907 	   l_pay_now_total_detail_tbl(1).freight_amount := nvl(l_charge_amount,0);
6908 
6909 
6910            OE_PREPAYMENT_PVT.Get_First_Installment
6911 	                      (p_currency_code               => OE_Order_Cache.g_header_rec.transactional_curr_code
6912 			      ,p_x_due_now_total_detail_tbl 	=> l_pay_now_total_detail_tbl
6913 			      ,x_due_now_total_summary_rec	=> l_pay_now_total_summary_rec
6914 			      ,x_return_status    		=> l_return_status
6915 			      ,x_msg_count			=> l_msg_count
6916 			      ,x_msg_data			=> l_msg_data
6917 			      );
6918 
6919 
6920 	     IF l_debug_level  > 0 THEN
6921 		oe_debug_pub.add(  'In Get_Line_Total, First Installment is: '|| l_pay_now_total_summary_rec.total_amount , 3 ) ;
6922 	     END IF;
6923 
6924              l_return_value :=  l_pay_now_total_summary_rec.total_amount;
6925 
6926        ELSIF OE_Prepayment_Util.Get_Installment_Options = 'ENABLE_PAY_NOW' THEN
6927 	   l_pay_now_total_detail_tbl(1).line_id := p_line_id;
6928 	   l_pay_now_total_detail_tbl(1).term_id := l_payment_term_id;
6929 	   l_pay_now_total_detail_tbl(1).line_amount := nvl(l_extended_price,0);
6930            l_pay_now_total_detail_tbl(1).tax_amount := nvl(l_tax_value,0);
6931 	   l_pay_now_total_detail_tbl(1).freight_amount := nvl(l_charge_amount,0);
6932 
6933 	   -- calling AR API to get pay now total
6934 	   AR_VIEW_TERM_GRP.pay_now_amounts
6935 	                    (p_api_version         => 1.0
6936 			    ,p_init_msg_list       => FND_API.G_TRUE
6937 			    ,p_validation_level    => FND_API.G_VALID_LEVEL_FULL
6938 			    ,p_currency_code       => OE_Order_Cache.g_header_rec.transactional_curr_code
6939 			    ,p_amounts_tbl         => l_pay_now_total_detail_tbl
6940                             ,x_pay_now_summary_rec => l_pay_now_total_summary_rec
6941 			    ,x_return_status       => l_return_status
6942 			    ,x_msg_count           => l_msg_count
6943 			    ,x_msg_data            => l_msg_data
6944 			    );
6945 
6946 	   IF l_debug_level > 0 THEN
6947 	      oe_debug_pub.add('l_pay_now_total_summary_rec.total_amount is '|| l_pay_now_total_summary_rec.total_amount);
6948 	   END IF;
6949 
6950 	   -- return pay_now_total minus line level commitment applied amount.
6951 	   l_return_value :=  l_pay_now_total_summary_rec.total_amount;
6952 	ELSE --OE_Prepayment_Util.Get_Installment_Options = 'NONE'
6953            l_return_value := l_line_total_no_comt;
6954 	END IF;
6955 
6956         IF p_level = 'LINE' THEN
6957 	   RETURN l_return_value - nvl(l_commitment_applied,0);
6958 	ELSE --p_level = 'HEADER'
6959 	   IF p_to_exclude_commitment = 'Y' THEN
6960 	       RETURN l_return_value - nvl(l_commitment_applied,0);
6961 	   ELSE
6962 	       RETURN l_return_value;
6963 	   END IF;
6964 	END IF;
6965 
6966   ELSE
6967      IF p_amount_type = 'SUBTOTAL' THEN
6968 	Return nvl(l_extended_price,0);
6969      ELSIF p_amount_type = 'TAX' THEN
6970 	Return nvl(l_tax_value,0);
6971      --Bug 6072691
6972      ELSIF p_amount_type IN('CHARGES','UNINV_CHARGES','INV_CHARGES') THEN
6973 	Return nvl(l_charge_amount,0);
6974      ELSIF p_amount_type = 'TOTAL' THEN
6975 	Return l_line_total_no_comt;
6976      ELSIF p_amount_type = 'COMMITMENT' THEN
6977 	Return nvl(l_commitment_applied,0);
6978      END IF;
6979   END IF;
6980 
6981   IF l_debug_level  > 0 THEN
6982      oe_debug_pub.add(  'Exiting OE_Verify_Payment_PUB.Get_Line_Total.' , 3 ) ;
6983   END IF;
6984 
6985 EXCEPTION
6986   WHEN OTHERS THEN
6987     IF l_debug_level  > 0 THEN
6988        oe_debug_pub.add(  'Unexpected Error from OE_Verify_Payment_PUB.Get_Line_Total ' || SQLERRM ) ;
6989     END IF;
6990     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6991 END Get_Line_Total;
6992 
6993 --bug3225795 start
6994 --This function is currently similar to Get_Line_Total. Needs to be changed later to consider partial invoicing.
6995 FUNCTION Get_Inv_Line_Total
6996 ( p_line_id		  IN 	NUMBER
6997 , p_header_id		  IN	NUMBER
6998 , p_currency_code	  IN   	VARCHAR2
6999 , p_level	 	  IN	VARCHAR2
7000 , p_to_exclude_commitment IN    VARCHAR2 DEFAULT 'Y' --bug3225795
7001 ) RETURN NUMBER IS
7002 
7003 l_tax_value  		NUMBER := 0;
7004 l_extended_price	NUMBER := 0;
7005 l_line_total		NUMBER := 0;
7006 l_line_total_no_comt	NUMBER := 0;
7007 l_charge_amount		NUMBER;
7008 l_commitment_applied    NUMBER := 0;
7009 l_header_id		NUMBER;
7010 l_payment_term_id	NUMBER;
7011 l_msg_count		NUMBER;
7012 l_msg_data		VARCHAR2(2000);
7013 l_downpayment           number := 0;
7014 l_downpayment_due       number := 0;
7015 l_item_invoiceable	VARCHAR2(1) := 'Y';
7016 i			pls_integer;
7017 
7018 --pnpl start
7019 l_pay_now_total_detail_tbl   AR_VIEW_TERM_GRP.amounts_table;
7020 l_pay_now_total_summary_rec  AR_VIEW_TERM_GRP.summary_amounts_rec;
7021 l_return_status              VARCHAR2(30) := FND_API.G_RET_STS_SUCCESS;
7022 l_return_value          NUMBER;
7023 --pnpl end
7024 
7025 
7026 --
7027 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7028 --
7029 BEGIN
7030 
7031   IF l_debug_level  > 0 THEN
7032       oe_debug_pub.add(  'ENTERING OE_Verify_Payment_Pub.Get_Inv_Line_Total.' , 1 ) ;
7033   END IF;
7034 
7035   -- Select the Tax Value and Outbound Extended Price
7036   BEGIN
7037   SELECT nvl(ool.tax_value,0)
7038        , nvl(ool.Ordered_Quantity,0) * ool.unit_selling_price
7039        , header_id
7040        , payment_term_id
7041   INTO   l_tax_value
7042        , l_extended_price
7043        , l_header_id
7044        , l_payment_term_id
7045   FROM  oe_order_lines_all ool
7046   WHERE ool.line_id = p_line_id
7047 --  AND   ool.open_flag = 'Y'
7048   AND   ool.line_category_code <> 'RETURN'
7049   AND   NOT EXISTS
7050        (SELECT 'Non Invoiceable Item Line'
7051         FROM   mtl_system_items mti
7052         WHERE  mti.inventory_item_id = ool.inventory_item_id
7053         AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7054                          oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7055         AND   (mti.invoiceable_item_flag = 'N'
7056            OR  mti.invoice_enabled_flag  = 'N'));
7057   EXCEPTION
7058     WHEN NO_DATA_FOUND THEN
7059       l_tax_value := 0;
7060       l_extended_price := 0;
7061   END;
7062 
7063   IF l_debug_level  > 0 THEN
7064      oe_debug_pub.add(  'In Get_Inv_Line_Total, l_extended_price is: '||l_extended_price , 3 ) ;
7065   END IF;
7066 
7067   BEGIN
7068      --pnpl added the Do_Commitment_Sequencing check
7069     IF OE_Commitment_Pvt.Do_Commitment_Sequencing THEN
7070     -- Select the committment applied amount
7071        SELECT SUM(nvl(op.commitment_applied_amount,0))
7072        INTO   l_commitment_applied
7073        FROM   oe_payments op
7074        WHERE  op.line_id = p_line_id
7075        AND    op.header_id = p_header_id
7076        AND    NOT EXISTS
7077 	  (SELECT 'Non Invoiceable Item Line'
7078 	   FROM   mtl_system_items mti, oe_order_lines_all ool
7079 	   WHERE  ool.line_id           = op.line_id
7080 	   AND    mti.inventory_item_id = ool.inventory_item_id
7081 	   AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7082 					      oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7083 	   AND   (mti.invoiceable_item_flag = 'N'
7084 		OR  mti.invoice_enabled_flag  = 'N'));
7085      ELSE
7086 	 SELECT nvl(ool.Ordered_Quantity,0) *(ool.unit_selling_price)
7087 	 INTO   l_commitment_applied
7088 	 FROM   oe_order_lines_all ool
7089 	 WHERE  ool.line_id      = p_line_id
7090 	 AND    ool.commitment_id is not null
7091 	 AND    ool.line_category_code <> 'RETURN'
7092 	 AND   NOT EXISTS
7093 	    (SELECT 'Non Invoiceable Item Line'
7094 	     FROM   mtl_system_items mti
7095 	     WHERE  mti.inventory_item_id = ool.inventory_item_id
7096 	     AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7097 						oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7098 	     AND   (mti.invoiceable_item_flag = 'N'
7099 		    OR  mti.invoice_enabled_flag  = 'N'));
7100       END IF;
7101 
7102    EXCEPTION
7103       WHEN NO_DATA_FOUND THEN
7104         l_commitment_applied := 0;
7105     END;
7106 
7107     IF l_debug_level  > 0 THEN
7108       oe_debug_pub.add(  'In Get_Inv_Line_Total, commitment_applied_amount is: '||l_commitment_applied , 3 ) ;
7109     END IF;
7110 
7111     -- get line level charges
7112     BEGIN
7113          SELECT SUM(
7114                 DECODE(P.CREDIT_OR_CHARGE_FLAG,'C',
7115                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
7116                                DECODE(L.ORDERED_QUANTITY,0,0,(-1) * (P.OPERAND)),
7117                                (-1) * (L.ORDERED_QUANTITY* nvl(P.ADJUSTED_AMOUNT,0))),
7118                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
7119                                DECODE(L.ORDERED_QUANTITY,0,0,P.OPERAND),
7120                                (L.ORDERED_QUANTITY* nvl(P.ADJUSTED_AMOUNT,0)))
7121                        )
7122                  )
7123 	  INTO l_charge_amount
7124 	  FROM OE_PRICE_ADJUSTMENTS P,
7125           OE_ORDER_LINES_ALL L
7126 	  WHERE P.LINE_ID = p_line_id
7127 	  AND   P.LINE_ID = L.LINE_ID
7128 	  AND   P.LIST_LINE_TYPE_CODE = 'FREIGHT_CHARGE'
7129 	  AND   P.APPLIED_FLAG = 'Y';
7130 
7131      EXCEPTION
7132        WHEN NO_DATA_FOUND THEN
7133          l_charge_amount := 0;
7134      END;
7135 
7136      IF l_debug_level  > 0 THEN
7137        oe_debug_pub.add(  'In Get_Inv_Line_Total, l_charge_amount is: '||l_charge_amount , 3 ) ;
7138      END IF;
7139 
7140      l_line_total := nvl(l_extended_price,0) + nvl(l_tax_value,0)
7141                      + nvl(l_charge_amount,0) - nvl(l_commitment_applied,0);
7142 
7143      IF l_debug_level  > 0 THEN
7144        oe_debug_pub.add(  'In Get_Inv_Line_Total, l_line_total is: '||l_line_total , 3 ) ;
7145      END IF;
7146 
7147     l_line_total_no_comt := nvl(l_extended_price,0) + nvl(l_tax_value,0)
7148                               + nvl(l_charge_amount,0);
7149 
7150    IF Oe_Prepayment_Util.Get_Installment_Options = 'AUTHORIZE_FIRST_INSTALLMENT' THEN
7151         l_pay_now_total_detail_tbl(1).line_id := p_line_id;
7152 	   l_pay_now_total_detail_tbl(1).term_id := l_payment_term_id;
7153 	   l_pay_now_total_detail_tbl(1).line_amount := nvl(l_extended_price,0);
7154            l_pay_now_total_detail_tbl(1).tax_amount := nvl(l_tax_value,0);
7155 	   l_pay_now_total_detail_tbl(1).freight_amount := nvl(l_charge_amount,0);
7156 
7157 
7158            OE_PREPAYMENT_PVT.Get_First_Installment
7159 	                      (p_currency_code               => OE_Order_Cache.g_header_rec.transactional_curr_code
7160 			      ,p_x_due_now_total_detail_tbl 	=> l_pay_now_total_detail_tbl
7161 			      ,x_due_now_total_summary_rec	=> l_pay_now_total_summary_rec
7162 			      ,x_return_status    		=> l_return_status
7163 			      ,x_msg_count			=> l_msg_count
7164 			      ,x_msg_data			=> l_msg_data
7165 			      );
7166 
7167 
7168 	     IF l_debug_level  > 0 THEN
7169 		oe_debug_pub.add(  'In Get_Inv_Line_Total, First Installment is: '|| l_pay_now_total_summary_rec.total_amount , 3 ) ;
7170 	     END IF;
7171 
7172              l_return_value :=  l_pay_now_total_summary_rec.total_amount;
7173 
7174     ELSIF OE_Prepayment_Util.Get_Installment_Options = 'ENABLE_PAY_NOW' THEN
7175         l_pay_now_total_detail_tbl(1).line_id := p_line_id;
7176 	l_pay_now_total_detail_tbl(1).term_id := l_payment_term_id;
7177 	l_pay_now_total_detail_tbl(1).line_amount := nvl(l_extended_price,0);
7178 	l_pay_now_total_detail_tbl(1).tax_amount := nvl(l_tax_value,0);
7179 	l_pay_now_total_detail_tbl(1).freight_amount := nvl(l_charge_amount,0);
7180 
7181         -- calling AR API to get pay now total
7182 	AR_VIEW_TERM_GRP.pay_now_amounts
7183 	    (p_api_version         => 1.0
7184 	    ,p_init_msg_list       => FND_API.G_TRUE
7185 	    ,p_validation_level    => FND_API.G_VALID_LEVEL_FULL
7186 	    ,p_currency_code       => OE_Order_Cache.g_header_rec.transactional_curr_code
7187 	    ,p_amounts_tbl         => l_pay_now_total_detail_tbl
7188 	    ,x_pay_now_summary_rec => l_pay_now_total_summary_rec
7189 	    ,x_return_status       => l_return_status
7190 	    ,x_msg_count           => l_msg_count
7191 	    ,x_msg_data            => l_msg_data
7192 	    );
7193 
7194 	   IF l_debug_level > 0 THEN
7195 	      oe_debug_pub.add('l_pay_now_total_summary_rec.total_amount is '|| l_pay_now_total_summary_rec.total_amount);
7196 	   END IF;
7197 
7198 	   -- return pay_now_total minus line level commitment applied amount.
7199 	   l_return_value :=  l_pay_now_total_summary_rec.total_amount;
7200       ELSE --OE_Prepayment_Util.Get_Installment_Options = 'NONE'
7201            l_return_value := l_line_total_no_comt;
7202       END IF;
7203 
7204 
7205     IF p_level = 'LINE' THEN
7206        RETURN l_return_value - nvl(l_commitment_applied,0);
7207     ELSE --p_level = 'HEADER'
7208        IF p_to_exclude_commitment = 'Y' THEN
7209 	  RETURN l_return_value - nvl(l_commitment_applied,0);
7210        ELSE
7211 	  RETURN l_return_value;
7212        END IF;
7213     END IF;
7214 
7215     IF l_debug_level  > 0 THEN
7216       oe_debug_pub.add(  'Exiting OE_Verify_Payment_PUB.Get_Inv_Line_Total.' , 3 ) ;
7217     END IF;
7218 
7219 EXCEPTION
7220   WHEN OTHERS THEN
7221     IF l_debug_level  > 0 THEN
7222              oe_debug_pub.add(  'FROM OE_Verify_Payment_PUB.Get_Inv_Line_Total' ) ;
7223     END IF;
7224     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7225 END Get_Inv_Line_Total;
7226 
7227 --This function also needs to be modified later to consider partial invoicing
7228 FUNCTION Outbound_Order_Total
7229 ( p_header_id     IN NUMBER
7230 , p_to_exclude_commitment        IN VARCHAR2 DEFAULT 'Y'
7231 , p_total_type                   IN VARCHAR2 DEFAULT NULL --pnpl
7232 ) RETURN NUMBER
7233 IS
7234 l_order_total     NUMBER;
7235 l_tax_total       NUMBER;
7236 l_charges         NUMBER;
7237 l_outbound_total  NUMBER;
7238 l_commitment_total NUMBER;
7239 l_chgs_w_line_id   NUMBER := 0;
7240 l_chgs_wo_line_id  NUMBER := 0;
7241 
7242 --pnpl start
7243 l_pay_now_subtotal NUMBER;
7244 l_pay_now_tax      NUMBER;
7245 l_pay_now_charges  NUMBER;
7246 l_pay_now_total    NUMBER;
7247 l_pay_now_commitment NUMBER;
7248 l_msg_count          NUMBER;
7249 l_msg_data           VARCHAR2(2000);
7250 l_return_status      VARCHAR2(1);
7251 --pnpl end
7252 
7253 --
7254 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7255 --
7256 Is_fmt           BOOLEAN;   --7010350
7257 BEGIN
7258   -- bug#5946168 added round function
7259   -- Select the Tax Total and Outbound Extended Price
7260 --7010350
7261    IF OE_ORDER_UTIL.G_Precision IS NULL THEN
7262      Is_fmt:= OE_ORDER_UTIL.Get_Precision(p_header_id=>p_header_id);
7263 
7264      IF OE_ORDER_UTIL.G_Precision IS NULL THEN
7265         OE_ORDER_UTIL.G_Precision:=2;
7266      END IF;
7267    END IF;
7268  --7010350
7269 
7270   SELECT
7271     SUM(ROUND(nvl(ool.tax_value,0),OE_ORDER_UTIL.G_Precision))
7272   , SUM(ROUND(nvl(ool.Ordered_Quantity,0)
7273 	   *(ool.unit_selling_price),OE_ORDER_UTIL.G_Precision))
7274   INTO
7275     l_tax_total
7276   , l_order_total
7277   FROM  oe_order_lines_all ool
7278   WHERE ool.header_id      = p_header_id
7279   AND   ool.open_flag      = 'Y'
7280   AND   nvl(ool.invoice_interface_status_code,'NO') <> 'YES' --bug3225795
7281   AND   ool.line_category_code <> 'RETURN'
7282   AND   NOT EXISTS
7283        (SELECT 'Non Invoiceable Item Line'
7284         FROM   mtl_system_items mti
7285         WHERE  mti.inventory_item_id = ool.inventory_item_id
7286         AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7287                          oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7288         AND   (mti.invoiceable_item_flag = 'N'
7289            OR  mti.invoice_enabled_flag  = 'N'));
7290 
7291   IF OE_Commitment_Pvt.Do_Commitment_Sequencing THEN
7292     -- Select the committment applied amount if Commitment Sequencing "On"
7293     SELECT SUM(ROUND(nvl(op.commitment_applied_amount,0),OE_ORDER_UTIL.G_Precision))
7294     INTO   l_commitment_total
7295     FROM   oe_payments op,
7296 	   oe_order_lines_all ool --bug3225795
7297     WHERE  op.header_id = p_header_id
7298     AND    ool.header_id  = p_header_id --bug3225795
7299     AND    nvl(ool.invoice_interface_status_code,'NO') <> 'YES' --bug3225795
7300     AND    ool.line_id=op.line_id --bug3225795
7301     AND    NOT EXISTS
7302           (SELECT 'Non Invoiceable Item Line'
7303            FROM   mtl_system_items mti, oe_order_lines_all ool
7304            WHERE  ool.line_id           = op.line_id
7305            AND    mti.inventory_item_id = ool.inventory_item_id
7306            AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7307                           oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7308            AND   (mti.invoiceable_item_flag = 'N'
7309               OR  mti.invoice_enabled_flag  = 'N'));
7310   ELSE
7311   -- Select the Outbound Extended Price for lines that have committment
7312   SELECT SUM(ROUND(nvl(ool.Ordered_Quantity,0) * (ool.unit_selling_price),OE_ORDER_UTIL.G_Precision))
7313   INTO   l_commitment_total
7314   FROM   oe_order_lines_all ool
7315   WHERE  ool.header_id      = p_header_id
7316   AND    ool.commitment_id is not null
7317   AND    ool.open_flag      = 'Y'
7318   AND    nvl(ool.invoice_interface_status_code,'NO') <> 'YES' --bug3225795
7319   AND    ool.line_category_code <> 'RETURN'
7320   AND   NOT EXISTS
7321        (SELECT 'Non Invoiceable Item Line'
7322         FROM   mtl_system_items mti
7323         WHERE  mti.inventory_item_id = ool.inventory_item_id
7324         AND    mti.organization_id   = nvl(ool.ship_from_org_id,
7325                          oe_sys_parameters.value('MASTER_ORGANIZATION_ID', ool.org_id))
7326         AND   (mti.invoiceable_item_flag = 'N'
7327            OR  mti.invoice_enabled_flag  = 'N'));
7328   END IF;
7329 
7330   -- Select the Outbound Charges Total
7331 
7332      SELECT SUM(
7333                 ROUND(DECODE(P.CREDIT_OR_CHARGE_FLAG,'C',(-1) * P.OPERAND,P.OPERAND),OE_ORDER_UTIL.G_Precision)
7334                )
7335      INTO l_chgs_wo_line_id
7336      FROM OE_PRICE_ADJUSTMENTS P
7337      WHERE P.HEADER_ID = p_header_id
7338      AND   P.LINE_ID IS NULL
7339      AND   P.LIST_LINE_TYPE_CODE = 'FREIGHT_CHARGE'
7340      AND   P.APPLIED_FLAG = 'Y'
7341      AND   NVL(P.INVOICED_FLAG, 'N') = 'N';
7342 
7343      SELECT SUM(
7344                 ROUND(DECODE(P.CREDIT_OR_CHARGE_FLAG,'C',
7345                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
7346                                (-1) * (P.OPERAND),
7347                                (-1) * (L.ORDERED_QUANTITY*P.ADJUSTED_AMOUNT)),
7348                         DECODE(P.ARITHMETIC_OPERATOR, 'LUMPSUM',
7349                                P.OPERAND,
7350                                (L.ORDERED_QUANTITY*P.ADJUSTED_AMOUNT))
7351                       ),OE_ORDER_UTIL.G_Precision)
7352               )
7353      INTO l_chgs_w_line_id
7354      FROM OE_PRICE_ADJUSTMENTS P,
7355           OE_ORDER_LINES_ALL L
7356      WHERE P.HEADER_ID = p_header_id
7357      AND   P.LINE_ID = L.LINE_ID
7358      AND   P.LIST_LINE_TYPE_CODE = 'FREIGHT_CHARGE'
7359      AND   P.APPLIED_FLAG = 'Y'
7360      AND   L.header_id      = p_header_id
7361      AND   L.open_flag      = 'Y'
7362      AND   nvl(L.invoice_interface_status_code,'NO') <> 'YES' --bug3225795
7363      AND   L.line_category_code <> 'RETURN'
7364      AND   NOT EXISTS
7365           (SELECT 'Non Invoiceable Item Line'
7366            FROM   MTL_SYSTEM_ITEMS MTI
7367            WHERE  MTI.INVENTORY_ITEM_ID = L.INVENTORY_ITEM_ID
7368            AND    MTI.ORGANIZATION_ID   = NVL(L.SHIP_FROM_ORG_ID,
7369                          oe_sys_parameters.value('MASTER_ORGANIZATION_ID', L.org_id))
7370            AND   (MTI.INVOICEABLE_ITEM_FLAG = 'N'
7371               OR  MTI.INVOICE_ENABLED_FLAG  = 'N'));
7372 
7373     l_charges := nvl(l_chgs_wo_line_id,0) + nvl(l_chgs_w_line_id,0);
7374 
7375  --pnpl added the conditions w.r.t p_total_type
7376  IF p_total_type IS NULL THEN
7377   IF OE_Prepayment_Util.Get_Installment_Options IN ('ENABLE_PAY_NOW','AUTHORIZE_FIRST_INSTALLMENT') THEN
7378      OE_Prepayment_PVT.Get_Pay_Now_Amounts
7379 	 (p_header_id 		=> p_header_id
7380 	 ,p_line_id		=> null
7381 	 ,p_exc_inv_lines       => 'Y'
7382 	 ,x_pay_now_subtotal 	=> l_pay_now_subtotal
7383 	 ,x_pay_now_tax   	=> l_pay_now_tax
7384 	 ,x_pay_now_charges  	=> l_pay_now_charges
7385 	 ,x_pay_now_total	=> l_pay_now_total
7386 	 ,x_pay_now_commitment  => l_pay_now_commitment
7387 	 ,x_msg_count		=> l_msg_count
7388 	 ,x_msg_data		=> l_msg_data
7389 	 ,x_return_status       => l_return_status
7390 	 );
7391      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7392 	IF l_debug_level > 0 THEN
7393 	   oe_debug_pub.add('Error in  OE_Prepayment_PVT.Get_Pay_Now_Amounts... returning zero');
7394 	END IF;
7395 	RETURN 0;
7396      END IF;
7397 
7398      IF p_to_exclude_commitment = 'Y' THEN
7399 	l_outbound_total := l_pay_now_total - nvl(l_pay_now_commitment,0);
7400      ELSE
7401 	l_outbound_total := l_pay_now_total;
7402      END IF;
7403 
7404   ELSE -- OE_Prepayment_Util.Get_Installment_Options = 'NONE'
7405 
7406      IF p_to_exclude_commitment = 'Y' THEN
7407 	l_outbound_total := nvl(l_order_total, 0) + nvl(l_tax_total, 0)
7408 	   + nvl(l_charges, 0) - nvl(l_commitment_total,0);
7409      ELSE
7410 	l_outbound_total := nvl(l_order_total, 0) + nvl(l_tax_total, 0)
7411 	   + nvl(l_charges, 0);
7412      END IF;
7413   END IF; -- check for OE_Prepayment_Util.Get_Installment_Options
7414 
7415  ELSIF p_total_type = 'COMMITMENT' THEN
7416     l_outbound_total := NVL(l_commitment_total,0);
7417  ELSIF p_total_type = 'HEADER_CHARGES' THEN
7418     l_outbound_total := NVL(l_chgs_wo_line_id,0);
7419  END IF;
7420 
7421  IF l_debug_level  > 0 THEN
7422       oe_debug_pub.add(  'CALCULATING THE TOTAL AMOUNT TO BE AUTHORIZED FOR THIS ORDER ' , 1 ) ;
7423       oe_debug_pub.add(  'ORDER TOTAL -> '||TO_CHAR ( L_ORDER_TOTAL ) , 1 ) ;
7424       oe_debug_pub.add(  'TAX TOTAL -> '||TO_CHAR ( L_TAX_TOTAL ) , 1 ) ;
7425       oe_debug_pub.add(  'COMMITMENTS -> '||TO_CHAR ( L_COMMITMENT_TOTAL ) , 1 ) ;
7426       oe_debug_pub.add(  'OTHER CHARGES -> '||TO_CHAR ( L_CHARGES ) , 1 ) ;
7427       oe_debug_pub.add(  'P_TOTAL_TYPE -> '||P_TOTAL_TYPE);
7428       oe_debug_pub.add(  'L_OUTBOUND_TOTAL => '||TO_CHAR ( L_OUTBOUND_TOTAL ) , 1 ) ;
7429  END IF;
7430  RETURN (l_outbound_total);
7431 
7432   EXCEPTION
7433     WHEN OTHERS THEN
7434 	 IF l_debug_level  > 0 THEN
7435 	     oe_debug_pub.add(  'FROM OUTBOUND TOTAL OTHERS: ' || SQLERRM ) ;
7436 	 END IF;
7437       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7438 
7439 END Outbound_Order_Total;
7440 
7441 --bug3225795 end
7442 
7443 
7444 /*----------------------------------------------------------------------
7445 Updates Order Line with Authorized Amount, Authorization Code and DATE
7446 ----------------------------------------------------------------------*/
7447 PROCEDURE Update_AuthInfo_for_MultiPmnts
7448 ( p_header_id           IN   NUMBER
7449 , p_auth_amount         IN   NUMBER
7450 , p_auth_code           IN   VARCHAR2
7451 , p_auth_date           IN   DATE
7452 , p_tangible_id         IN   VARCHAR2
7453 , p_line_id             IN   NUMBER
7454 , p_payment_number	IN   NUMBER
7455 , p_msg_count           OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7456 , p_msg_data	        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7457 , p_return_status       OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7458 )
7459 IS
7460 l_index                  NUMBER := 1;
7461 l_notify_index           NUMBER := 1;
7462 l_line_id                NUMBER;
7463 l_Line_Payment_rec       OE_ORDER_PUB.Line_Payment_Rec_Type;
7464 l_old_Line_Payment_rec   OE_ORDER_PUB.Line_Payment_Rec_Type;
7465 l_Header_Payment_rec       OE_ORDER_PUB.Header_Payment_Rec_Type;
7466 l_old_Header_Payment_rec   OE_ORDER_PUB.Header_Payment_Rec_Type;
7467 l_msg_count              NUMBER;
7468 l_msg_data               VARCHAR2(2000);
7469 l_control_rec            OE_GLOBALS.Control_Rec_Type;
7470 l_return_status          VARCHAR2(30);
7471 --
7472 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7473 --
7474 BEGIN
7475 
7476 
7477   SAVEPOINT Update_AuthInfo_for_MultiPmnts;
7478 
7479   p_return_status := FND_API.G_RET_STS_SUCCESS;
7480 
7481   IF l_debug_level  > 0 THEN
7482       oe_debug_pub.add(  'OEXPVPMB: IN UPDATE AUTHORIZATION INFORMATION' ) ;
7483   END IF;
7484 
7485 /*
7486   -- Set up the Header record
7487   OE_Header_Payment_Util.Lock_Row
7488 		(p_header_id			=> p_header_id
7489 		,p_payment_number		=> null
7490 		,p_x_Header_Payment_rec		=> l_old_Header_Payment_rec
7491 		,x_return_status		=> l_return_status
7492 		);
7493   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7494     RAISE FND_API.G_EXC_ERROR;
7495   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7496     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7497   END IF;
7498 
7499   l_Line_Payment_rec := l_old_Line_Payment_rec;
7500 
7501   l_Line_Payment_rec.header_id                 := p_header_id;
7502   l_Line_Payment_rec.line_id                   := p_line_id;
7503   l_Line_Payment_rec.credit_card_approval_code := p_auth_code;
7504   l_Line_Payment_rec.credit_card_approval_date := p_auth_date;
7505   l_Line_Payment_rec.last_updated_by	 := FND_GLOBAL.USER_ID;
7506   l_Line_Payment_rec.last_update_date	 := SYSDATE;
7507   l_Line_Payment_rec.last_update_login	 := FND_GLOBAL.LOGIN_ID;
7508   l_Line_Payment_rec.lock_control        := l_header_rec.lock_control + 1;
7509   l_Line_Payment_rec.operation           := OE_GLOBALS.G_OPR_UPDATE;
7510 
7511   -- Header needs to be requeried, setting the flag to true
7512   -- OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
7513 
7514   IF l_debug_level  > 0 THEN
7515       oe_debug_pub.add(  'OEXPVPMB: UPDATING FIELDS ON HEADER' ) ;
7516   END IF;
7517 */
7518 
7519   IF p_line_id IS NOT NULL THEN
7520     -- line level payments
7521     update oe_payments
7522     set credit_card_approval_code = p_auth_code
7523       , credit_card_approval_date = p_auth_date
7524       , tangible_id = p_tangible_id
7525       , last_updated_by = FND_GLOBAL.USER_ID
7526       , last_update_date = SYSDATE
7527       , last_update_login = FND_GLOBAL.LOGIN_ID
7528       , lock_control = lock_control + 1
7529     where nvl(payment_number, -1) = nvl(p_payment_number, -1)
7530     and   line_id = p_line_id
7531     and   header_id = p_header_id;
7532   ELSE
7533     -- header level payments
7534     update oe_payments
7535     set credit_card_approval_code = p_auth_code
7536       , credit_card_approval_date = p_auth_date
7537       , tangible_id = p_tangible_id
7538       , last_updated_by = FND_GLOBAL.USER_ID
7539       , last_update_date = SYSDATE
7540       , last_update_login = FND_GLOBAL.LOGIN_ID
7541       , lock_control = lock_control + 1
7542     where line_id IS NULL
7543     and payment_type_code = 'CREDIT_CARD'
7544     and payment_collection_event = 'INVOICE'
7545     and nvl(payment_number, -1) = nvl(p_payment_number, -1)
7546     and header_id = p_header_id;
7547 
7548     update oe_order_headers_all
7549     set credit_card_approval_code = p_auth_code
7550       , credit_card_approval_date = p_auth_date
7551     where header_id = p_header_id;
7552   END IF;
7553 
7554 
7555   -- aksingh performance
7556   -- As the update is on headers table, it is time to update
7557   -- cache also!
7558   -- ??? OE_Order_Cache.Set_Order_Header(l_header_rec);
7559 
7560   -- Bug 1755817: clear the cached constraint results for header entity
7561   -- when order header is updated.
7562   -- ?? OE_PC_Constraints_Admin_Pvt.Clear_Cached_Results
7563   -- ??     (p_validation_entity_id => OE_PC_GLOBALS.G_ENTITY_HEADER);
7564 
7565 
7566 /*  commented out for multiple payments
7567 
7568 IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110508' THEN
7569 
7570     -- call notification framework to get header index position
7571     OE_ORDER_UTIL.Update_Global_Picture
7572 	(p_Upd_New_Rec_If_Exists =>FALSE
7573 	, p_header_rec		=> l_header_rec
7574 	, p_old_header_rec	=> l_old_header_rec
7575         , p_header_id 		=> l_header_rec.header_id
7576         , x_index 		=> l_notify_index
7577         , x_return_status 	=> l_return_status);
7578 
7579     IF l_debug_level  > 0 THEN
7580         oe_debug_pub.add(  'UPDATE_GLOBAL RETURN STATUS FOR HDR IS: ' || L_RETURN_STATUS ) ;
7581     END IF;
7582     IF l_debug_level  > 0 THEN
7583         oe_debug_pub.add(  'HDR INDEX IS: ' || L_NOTIFY_INDEX , 1 ) ;
7584     END IF;
7585 
7586    IF l_notify_index is not null then
7587      -- modify Global Picture
7588 
7589     OE_ORDER_UTIL.g_header_rec.payment_amount:=
7590 					l_header_rec.payment_amount;
7591     OE_ORDER_UTIL.g_header_rec.credit_card_approval_code:=
7592 					l_header_rec.credit_card_approval_code;
7593     OE_ORDER_UTIL.g_header_rec.credit_card_approval_date:=
7594 					l_header_rec.credit_card_approval_date;
7595     OE_ORDER_UTIL.g_header_rec.last_updated_by:=l_header_rec.last_updated_by;
7596     OE_ORDER_UTIL.g_header_rec.last_update_login:=l_header_rec.last_update_login;
7597     OE_ORDER_UTIL.g_header_rec.last_update_date:=l_header_rec.last_update_date;
7598     OE_ORDER_UTIL.g_header_rec.lock_control:=	l_header_rec.lock_control;
7599 
7600 		IF l_debug_level  > 0 THEN
7601 		    oe_debug_pub.add(  'GLOBAL HDR PAYMENT_AMOUNT IS: ' || OE_ORDER_UTIL.G_HEADER_REC.PAYMENT_AMOUNT , 1 ) ;
7602 		END IF;
7603 		IF l_debug_level  > 0 THEN
7604 		    oe_debug_pub.add(  'GLOBAL HDR CC APPROVAL_CODE IS: ' || OE_ORDER_UTIL.G_HEADER_REC.CREDIT_CARD_APPROVAL_CODE , 1 ) ;
7605 		END IF;
7606 		IF l_debug_level  > 0 THEN
7607 		    oe_debug_pub.add(  'GLOBAL HDR CC APPROVAL_DATE IS: ' || OE_ORDER_UTIL.G_HEADER_REC.CREDIT_CARD_APPROVAL_DATE , 1 ) ;
7608 		END IF;
7609 
7610   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7611     RAISE FND_API.G_EXC_ERROR;
7612   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7613     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7614   END IF;
7615 
7616 -- Process requests is TRUE so still need to call it, but don't need to notify
7617   IF l_debug_level  > 0 THEN
7618       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
7619   END IF;
7620   OE_Order_PVT.Process_Requests_And_Notify
7621 	( p_process_requests		=> TRUE
7622 	, p_notify			=> FALSE
7623 	, p_header_rec			=> l_header_rec
7624 	, p_old_header_rec		=> l_old_header_rec
7625 	, x_return_status		=> l_return_status
7626 	);
7627 
7628   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7629     RAISE FND_API.G_EXC_ERROR;
7630   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7631     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7632   END IF;
7633 
7634  END IF ; -- global entity index null check
7635 
7636 ELSE -- pre- pack H
7637 
7638   IF l_debug_level  > 0 THEN
7639       oe_debug_pub.add(  'OEXPVPMB: BEFORE CALLING PROCESS_REQUESTS_AND_NOTIFY' ) ;
7640   END IF;
7641   OE_Order_PVT.Process_Requests_And_Notify
7642 	( p_process_requests		=> TRUE
7643 	, p_notify			=> TRUE
7644 	, p_header_rec			=> l_header_rec
7645 	, p_old_header_rec		=> l_old_header_rec
7646 	, x_return_status		=> l_return_status
7647 	);
7648 
7649   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7650     RAISE FND_API.G_EXC_ERROR;
7651   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7652     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7653   END IF;
7654 
7655    -- notification framework end
7656 END IF; -- code set is pack H or higher
7657 -- end of code commented out for Multiple Payments Project */
7658 
7659 EXCEPTION
7660 
7661     WHEN FND_API.G_EXC_ERROR THEN
7662 	 ROLLBACK TO Update_AuthInfo_for_MultiPmnts;
7663       p_return_status := FND_API.G_RET_STS_ERROR;
7664       OE_MSG_PUB.Count_And_Get
7665             ( p_count => l_msg_count,
7666               p_data  => l_msg_data
7667             );
7668 
7669     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7670 	 ROLLBACK TO Update_AuthInfo_for_MultiPmnts;
7671       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7672       OE_MSG_PUB.Count_And_Get
7673             ( p_count => l_msg_count,
7674               p_data  => l_msg_data
7675             );
7676 
7677     WHEN OTHERS THEN
7678 	 ROLLBACK TO Update_AuthInfo_for_MultiPmnts;
7679       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7680 
7681       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7682       THEN
7683         FND_MSG_PUB.Add_Exc_Msg
7684             (   G_PKG_NAME
7685             ,   'Update_AuthInfo_for_MultiPmnts'
7686             );
7687       END IF;
7688 
7689       OE_MSG_PUB.Count_And_Get
7690             ( p_count => l_msg_count,
7691               p_data  => l_msg_data
7692             );
7693 
7694 END Update_AuthInfo_for_MultiPmnts ;
7695 
7696 -- release line level authorization hold
7697 PROCEDURE Release_Verify_Line_Hold
7698 (  p_header_id       IN   NUMBER
7699 ,  p_line_id         IN   NUMBER
7700 ,  p_epayment_hold   IN   VARCHAR2
7701 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
7702 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7703 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7704 ) IS
7705 
7706 l_hold_id		NUMBER;
7707 l_hold_source_rec   	OE_HOLDS_PVT.Hold_Source_Rec_Type;
7708 l_hold_release_rec  	OE_HOLDS_PVT.Hold_Release_Rec_Type;
7709 l_hold_result   	VARCHAR2(30);
7710 l_msg_count         NUMBER := 0;
7711 l_msg_data          VARCHAR2(2000);
7712 l_return_status     VARCHAR2(30);
7713 l_debug_level CONSTANT 	NUMBER := oe_debug_pub.g_debug_level;
7714 
7715 BEGIN
7716 
7717   p_return_status := FND_API.G_RET_STS_SUCCESS;
7718   IF l_debug_level  > 0 THEN
7719       oe_debug_pub.add(  'OEXPVPMB: IN RELEASE VERIFY LINE HOLD' ) ;
7720   END IF;
7721 
7722   -- Check What type of Holds to Release
7723   IF p_epayment_hold = 'Y' THEN
7724     IF l_debug_level  > 0 THEN
7725         oe_debug_pub.add(  'OEXPVPMB: RELEASE EPAYMENT HOLDS FOR LINE ID : ' || p_line_id ) ;
7726     END IF;
7727 
7728 --    l_hold_release_rec  := OE_Hold_Sources_Pvt.G_MISS_Hold_Release_REC;
7729 
7730     l_hold_id := 11 ;  -- Credit Card Authorization Failure Hold
7731 
7732     -- Call Check for Hold to see if the Hold Exists
7733     IF l_debug_level  > 0 THEN
7734         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
7735     END IF;
7736     --
7737 
7738     OE_HOLDS_PUB.Check_Holds
7739                       ( p_api_version    => 1.0
7740                       , p_header_id      => p_header_id
7741                       , p_line_id        => p_line_id
7742                       , p_hold_id        => l_hold_id
7743                       , p_entity_code    => 'O'
7744                       , p_entity_id      => p_header_id
7745                       , x_result_out     => l_hold_result
7746                       , x_msg_count      => l_msg_count
7747                       , x_msg_data       => l_msg_data
7748                       , x_return_status  => l_return_status
7749                       );
7750 
7751     -- Check the Result
7752     IF l_hold_result = FND_API.G_TRUE THEN
7753 
7754       IF l_debug_level  > 0 THEN
7755           oe_debug_pub.add(  'OEXPVPMB: RELEASING CC FAILURE HOLD ON ORDER HEADER ID:' || p_header_id ) ;
7756       END IF;
7757       l_hold_source_rec.hold_id          := l_hold_id;
7758       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
7759       l_hold_source_rec.HOLD_ENTITY_ID   := p_header_id;
7760       l_hold_source_rec.LINE_ID	         := p_line_id;
7761 
7762       l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
7763 
7764 
7765       OE_Holds_PUB.Release_Holds
7766                 (   p_api_version       =>   1.0
7767                 ,   p_hold_source_rec   =>   l_hold_source_rec
7768                 ,   p_hold_release_rec  =>   l_hold_release_rec
7769                 ,   x_msg_count         =>   l_msg_count
7770                 ,   x_msg_data          =>   l_msg_data
7771                 ,   x_return_status     =>   l_return_status
7772                 );
7773 
7774       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7775         RAISE FND_API.G_EXC_ERROR;
7776       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7777         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7778       END IF;
7779 
7780     END IF;  -- Do nothing if the hold has already been released.
7781 
7782     IF l_debug_level  > 0 THEN
7783         oe_debug_pub.add(  'OEXPVPMB: CHECKING CREDIT CARD RISK HOLD FOR LINE ID : ' || p_line_id ) ;
7784     END IF;
7785 
7786 --    l_hold_release_rec  := OE_Hold_Sources_Pvt.G_MISS_Hold_Release_REC;
7787     l_hold_id := 12 ; -- Credit Card Risk Hold
7788 
7789     -- Call Check for Hold to see if the Hold Exists
7790     IF l_debug_level  > 0 THEN
7791         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
7792     END IF;
7793     --
7794     OE_HOLDS_PUB.Check_Holds
7795                       ( p_api_version    => 1.0
7796                       , p_header_id      => p_header_id
7797                       , p_line_id        => p_line_id
7798                       , p_hold_id        => l_hold_id
7799                       , p_entity_code    => 'O'
7800                       , p_entity_id      => p_header_id
7801                       , x_result_out     => l_hold_result
7802                       , x_msg_count      => l_msg_count
7803                       , x_msg_data       => l_msg_data
7804                       , x_return_status  => l_return_status
7805                       );
7806 
7807     -- Check the Result
7808     IF l_hold_result = FND_API.G_TRUE THEN
7809 
7810       IF l_debug_level  > 0 THEN
7811           oe_debug_pub.add(  'OEXPVPMB: RELEASING CC RISK HOLD ON ORDER LINE ID:' || p_line_id ) ;
7812       END IF;
7813       l_hold_source_rec.hold_id          := l_hold_id;
7814       l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
7815       l_hold_source_rec.HOLD_ENTITY_ID   := p_header_id;
7816       l_hold_source_rec.LINE_ID          := p_line_id;
7817 
7818       l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
7819 
7820       OE_Holds_PUB.Release_Holds
7821                 (   p_api_version       =>   1.0
7822                 ,   p_hold_source_rec   =>   l_hold_source_rec
7823                 ,   p_hold_release_rec  =>   l_hold_release_rec
7824                 ,   x_msg_count         =>   l_msg_count
7825                 ,   x_msg_data          =>   l_msg_data
7826                 ,   x_return_status     =>   l_return_status
7827                 );
7828 
7829       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7830         RAISE FND_API.G_EXC_ERROR;
7831       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7832         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7833       END IF;
7834 
7835     END IF;  -- Do nothing if the hold has already been released.
7836 
7837     IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
7838       IF l_debug_level  > 0 THEN
7839         oe_debug_pub.add(  'OEXPVPMB: CHECKING CREDIT CARD RISK HOLD FOR LINE ID : ' || p_line_id ) ;
7840       END IF;
7841 
7842       l_hold_id := 16 ; -- Credit Card Risk Hold
7843 
7844       -- Call Check for Hold to see if the Hold Exists
7845       IF l_debug_level  > 0 THEN
7846         oe_debug_pub.add(  'OEXPVPMB: CHECKING EXISTENCE OF HOLD ID : '||L_HOLD_ID ) ;
7847       END IF;
7848       --
7849       OE_HOLDS_PUB.Check_Holds
7850                       ( p_api_version    => 1.0
7851                       , p_header_id      => p_header_id
7852                       , p_line_id        => p_line_id
7853                       , p_hold_id        => l_hold_id
7854                       , p_entity_code    => 'O'
7855                       , p_entity_id      => p_header_id
7856                       , x_result_out     => l_hold_result
7857                       , x_msg_count      => l_msg_count
7858                       , x_msg_data       => l_msg_data
7859                       , x_return_status  => l_return_status
7860                       );
7861 
7862       -- Check the Result
7863       IF l_hold_result = FND_API.G_TRUE THEN
7864 
7865         IF l_debug_level  > 0 THEN
7866           oe_debug_pub.add(  'OEXPVPMB: RELEASING CC RISK HOLD ON ORDER LINE ID:' || p_line_id ) ;
7867         END IF;
7868         l_hold_source_rec.hold_id          := l_hold_id;
7869         l_hold_source_rec.HOLD_ENTITY_CODE := 'O';
7870         l_hold_source_rec.HOLD_ENTITY_ID   := p_header_id;
7871         l_hold_source_rec.LINE_ID          := p_line_id;
7872 
7873         l_hold_release_rec.release_reason_code := 'AUTH_EPAYMENT';
7874 
7875         OE_Holds_PUB.Release_Holds
7876                 (   p_api_version       =>   1.0
7877                 ,   p_hold_source_rec   =>   l_hold_source_rec
7878                 ,   p_hold_release_rec  =>   l_hold_release_rec
7879                 ,   x_msg_count         =>   l_msg_count
7880                 ,   x_msg_data          =>   l_msg_data
7881                 ,   x_return_status     =>   l_return_status
7882                 );
7883 
7884         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7885           RAISE FND_API.G_EXC_ERROR;
7886         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7887           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7888         END IF;
7889 
7890       END IF;  -- Do nothing if the hold has already been released.
7891     END IF;
7892 
7893   END IF; -- Electronic Payment
7894 
7895   EXCEPTION
7896 
7897     WHEN FND_API.G_EXC_ERROR THEN
7898       p_return_status := FND_API.G_RET_STS_ERROR;
7899       OE_MSG_PUB.Count_And_Get
7900             ( p_count => l_msg_count,
7901               p_data  => l_msg_data
7902             );
7903 
7904     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7905       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7906       OE_MSG_PUB.Count_And_Get
7907             ( p_count => l_msg_count,
7908               p_data  => l_msg_data
7909             );
7910 
7911     WHEN OTHERS THEN
7912       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7913       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7914       THEN
7915         FND_MSG_PUB.Add_Exc_Msg
7916             (   G_PKG_NAME
7917             ,   'Release_Verify_Line_Hold'
7918             );
7919       END IF;
7920 
7921       OE_MSG_PUB.Count_And_Get
7922             ( p_count => l_msg_count,
7923               p_data  => l_msg_data
7924             );
7925 
7926 
7927 
7928 END Release_Verify_Line_Hold;
7929 
7930 -- apply line level authorization hold
7931 PROCEDURE Apply_Verify_Line_Hold
7932 (  p_header_id       IN   NUMBER
7933 ,  p_line_id         IN   NUMBER
7934 ,  p_hold_id         IN   NUMBER
7935 ,  p_msg_count       OUT NOCOPY /* file.sql.39 change */  NUMBER
7936 ,  p_msg_data        OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7937 ,  p_return_status   OUT NOCOPY /* file.sql.39 change */  VARCHAR2
7938 ) IS
7939 
7940 l_hold_id		NUMBER;
7941 l_hold_source_rec   	OE_HOLDS_PVT.Hold_Source_Rec_Type;
7942 l_hold_release_rec  	OE_HOLDS_PVT.Hold_Release_Rec_Type;
7943 l_hold_result   	VARCHAR2(30);
7944 l_line_ind		VARCHAR2(240);
7945 l_line_number		NUMBER;
7946 l_shipment_number 	NUMBER;
7947 l_option_number   	NUMBER;
7948 l_component_number	NUMBER;
7949 l_service_number	NUMBER;
7950 
7951 l_msg_count         	NUMBER := 0;
7952 l_msg_data          	VARCHAR2(2000);
7953 l_return_status     	VARCHAR2(30);
7954 l_debug_level CONSTANT 	NUMBER := oe_debug_pub.g_debug_level;
7955 
7956 BEGIN
7957 
7958   p_return_status := FND_API.G_RET_STS_SUCCESS;
7959 
7960   IF l_debug_level  > 0 THEN
7961       oe_debug_pub.add(  'OEXPVPMB: IN APPLY VERIFY LINE HOLDS' ) ;
7962   END IF;
7963 
7964   IF l_debug_level  > 0 THEN
7965       oe_debug_pub.add(  'OEXPVPMB: LINE ID : '||P_LINE_ID ) ;
7966   END IF;
7967   IF l_debug_level  > 0 THEN
7968       oe_debug_pub.add(  'OEXPVPMB: HOLD ID : '||P_HOLD_ID ) ;
7969   END IF;
7970 
7971   -- Check if Hold already exists on this order
7972   IF l_debug_level  > 0 THEN
7973       oe_debug_pub.add(  'OEXPVPMB: CHECKING IF REQUESTED VERIFY HOLD ALREADY APPLIED' ) ;
7974   END IF;
7975   --
7976     OE_HOLDS_PUB.Check_Holds
7977                       ( p_api_version    => 1.0
7978                       , p_header_id      => p_header_id
7979                       , p_line_id        => p_line_id
7980                       , p_hold_id        => l_hold_id
7981                       , p_entity_code    => 'O'
7982                       , p_entity_id      => p_header_id
7983                       , x_result_out     => l_hold_result
7984                       , x_msg_count      => l_msg_count
7985                       , x_msg_data       => l_msg_data
7986                       , x_return_status  => l_return_status
7987                       );
7988 
7989   -- Return with Success if this Hold Already exists on the order
7990   IF l_hold_result = FND_API.G_TRUE THEN
7991     IF l_debug_level  > 0 THEN
7992         oe_debug_pub.add(  'OEXPVPMB: HOLD ALREADY APPLIED ON LINE ID : ' || P_LINE_ID ) ;
7993     END IF;
7994     RETURN ;
7995   END IF ;
7996 
7997   -- Apply Verify Hold on Order Line
7998   IF l_debug_level  > 0 THEN
7999       oe_debug_pub.add(  'OEXPVPMB: APPLYING VERIFY HOLD ON LINE ID : ' || P_LINE_ID ) ;
8000   END IF;
8001 
8002   l_hold_source_rec.hold_id         := p_hold_id ;
8003   l_hold_source_rec.hold_entity_code:= 'O';
8004   l_hold_source_rec.hold_entity_id  := p_header_id;
8005   l_hold_source_rec.line_id         := p_line_id;
8006 
8007   OE_Holds_PUB.Apply_Holds
8008                 (   p_api_version       =>      1.0
8009                 ,   p_validation_level  =>      FND_API.G_VALID_LEVEL_NONE
8010                 ,   p_hold_source_rec   =>      l_hold_source_rec
8011                 ,   x_msg_count         =>      l_msg_count
8012                 ,   x_msg_data          =>      l_msg_data
8013                 ,   x_return_status     =>      l_return_status
8014                 );
8015 
8016   IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
8017     IF p_hold_id = 16 THEN
8018 
8019       BEGIN
8020        SELECT line_number,
8021               shipment_number,
8022               option_number,
8023               component_number,
8024               service_number
8025        INTO   l_line_number,
8026               l_shipment_number,
8027               l_option_number,
8028               l_component_number,
8029               l_service_number
8030        from  oe_order_lines_all
8031        where line_id = p_line_id;
8032 
8033 
8034       end;
8035       l_line_ind := RTRIM(l_line_number      || '.' ||
8036                              l_shipment_number  || '.' ||
8037                              l_option_number    || '.' ||
8038                              l_component_number || '.' ||
8039                              l_service_number, '.');
8040 
8041 
8042       FND_MESSAGE.SET_NAME('ONT','ONT_PENDING_AUTH_HOLD_APPLIED');
8043       FND_MESSAGE.SET_TOKEN('LEVEL','LINE '||l_line_ind);
8044       OE_MSG_PUB.ADD;
8045       IF l_debug_level  > 0 THEN
8046         oe_debug_pub.add(  'OEXVPPYB: Pending Payment Authorization hold  has been applied on order line.', 3);
8047       END IF;
8048     END IF;
8049   ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
8050     RAISE FND_API.G_EXC_ERROR;
8051   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8052     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8053   END IF;
8054 
8055   IF l_debug_level  > 0 THEN
8056       oe_debug_pub.add(  'OEXPVPMB: APPLIED VERIFY HOLD ON LINE ID:' || P_LINE_ID ) ;
8057   END IF;
8058 
8059   EXCEPTION
8060 
8061     WHEN FND_API.G_EXC_ERROR THEN
8062       p_return_status := FND_API.G_RET_STS_ERROR;
8063       OE_MSG_PUB.Count_And_Get
8064             ( p_count => l_msg_count,
8065               p_data  => l_msg_data
8066             );
8067 
8068     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8069       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8070       OE_MSG_PUB.Count_And_Get
8071             ( p_count => l_msg_count,
8072               p_data  => l_msg_data
8073             );
8074 
8075     WHEN OTHERS THEN
8076       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8077       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8078       THEN
8079         FND_MSG_PUB.Add_Exc_Msg
8080             (   G_PKG_NAME
8081             ,   'Apply_Verify_Line_Hold'
8082             );
8083       END IF;
8084 
8085       OE_MSG_PUB.Count_And_Get
8086             ( p_count => l_msg_count,
8087               p_data  => l_msg_data
8088             );
8089 
8090 
8091 END Apply_Verify_Line_Hold;
8092 
8093 
8094 -- For bug 3571485. Can use this function for Formatting number to two decimal places.
8095 FUNCTION Get_Format_Mask(p_currency_code IN VARCHAR2)
8096 RETURN  VARCHAR2
8097 IS
8098 
8099 l_precision         	NUMBER;
8100 l_ext_precision     	NUMBER;
8101 l_min_acct_unit     	NUMBER;
8102 l_format_mask	        VARCHAR2(500);
8103 
8104  --
8105  l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
8106  --
8107 BEGIN
8108   FND_CURRENCY.Get_Info(p_currency_code,  -- IN variable
8109                         l_precision,
8110 		       	l_ext_precision,
8111 		 	l_min_acct_unit);
8112 
8113   FND_CURRENCY.Build_Format_Mask(l_format_mask, 20, l_precision,
8114                                  l_min_acct_unit, TRUE
8115                                  );
8116 
8117   RETURN l_format_mask;
8118 END Get_Format_Mask;
8119 
8120 PROCEDURE Create_New_Payment_Trxn
8121 (  p_trxn_extension_id 		IN 	NUMBER
8122 ,  p_org_id			IN	NUMBER
8123 ,  p_site_use_id		IN	NUMBER
8124 ,  p_line_id                    IN   	NUMBER DEFAULT NULL
8125 ,  p_instrument_security_code   IN      VARCHAR2 DEFAULT NULL --bug 5028932
8126 ,  x_trxn_extension_id  	OUT  	NOCOPY NUMBER
8127 ,  x_msg_count       		OUT 	NOCOPY NUMBER
8128 ,  x_msg_data        		OUT 	NOCOPY VARCHAR2
8129 ,  x_return_status   		OUT 	NOCOPY VARCHAR2
8130 ) IS
8131 
8132 L_return_status         VARCHAR2(30);
8133 L_msg_count             NUMBER;
8134 L_msg_data              VARCHAR2(2000);
8135 L_response_code         IBY_FNDCPT_COMMON_PUB.Result_rec_type;
8136 L_payer                 IBY_FNDCPT_COMMON_PUB.PayerContext_rec_type;
8137 L_assign_id             NUMBER;
8138 L_trxn_attribs          IBY_FNDCPT_TRXN_PUB.TrxnExtension_rec_type;
8139 l_trxn_extension_id     NUMBER;
8140 l_org_type              VARCHAR2(80) := 'OPERATING_UNIT';
8141 l_cust_account_id	NUMBER;
8142 l_party_id		NUMBER;
8143 l_pos			NUMBER := 0;
8144 l_retry_num		NUMBER := 0;
8145 
8146 --
8147 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
8148 --
8149 
8150 BEGIN
8151 
8152   l_return_status := FND_API.G_RET_STS_SUCCESS;
8153 
8154   IF l_debug_level  > 0 THEN
8155       oe_debug_pub.add(  'Entering Create_New_Payment_Trxn.', 1 ) ;
8156   END IF;
8157 
8158   Select  hca.party_id, acct_site.cust_account_id
8159   Into    l_party_id, l_cust_account_id
8160   From    HZ_CUST_SITE_USES_ALL      SITE,
8161           HZ_CUST_ACCT_SITES         ACCT_SITE,
8162           HZ_CUST_ACCOUNTS_ALL       HCA
8163   Where   SITE.SITE_USE_ID = p_site_use_id
8164   AND     SITE.SITE_USE_CODE  = 'BILL_TO'
8165   AND     SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
8166   AND     ACCT_SITE.CUST_ACCOUNT_ID = HCA.CUST_ACCOUNT_ID
8167   AND     SITE.ORG_ID = ACCT_SITE.ORG_ID;
8168 
8169   IF l_debug_level > 0 THEN
8170      oe_debug_pub.add('Party id in Create payment trxn'||l_party_id);
8171   END IF;
8172 
8173   l_payer.payment_function :=  'CUSTOMER_PAYMENT'; --Verify
8174   l_payer.party_id        := l_party_id;
8175   l_payer.org_type        := l_org_type;
8176   l_payer.org_id          := p_org_id;
8177   l_payer.cust_account_id        := l_cust_account_id;
8178   l_payer.account_site_id        := p_site_use_id;
8179 
8180 
8181   IBY_FNDCPT_TRXN_PUB.Get_Transaction_Extension
8182                         (p_api_version          => 1.0,
8183                         X_return_status         => l_return_status,
8184                         X_msg_count             => l_msg_count,
8185                         X_msg_data              => l_msg_data,
8186                         P_entity_id             => p_trxn_extension_id,
8187                         P_payer                 => l_payer,
8188                         X_trxn_attribs          => l_trxn_attribs,
8189                         X_response              => l_response_code);
8190 
8191   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8192     IF l_debug_level > 0 THEN
8193       oe_debug_pub.add('Result error code in Get_Transaction_Extension'||l_response_code.result_code);
8194     END IF;
8195     RAISE FND_API.G_EXC_ERROR;
8196   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8197     IF l_debug_level > 0 THEN
8198       oe_debug_pub.add('Result error code in Get_Transaction_Extension'||l_response_code.result_code);
8199     END IF;
8200     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8201   ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
8202     IF l_debug_level > 0 THEN
8203       oe_debug_pub.add('Get_Transaction_Extension assignment Successful....');
8204       oe_debug_pub.add('After call to Get Transaction Extension'||l_return_status);
8205       oe_debug_pub.add('After call to get trxn...instr sec code'||l_trxn_attribs.instrument_security_code);
8206     END IF;
8207   END IF;
8208 
8209   -- get assignment id from the payments table
8210   begin
8211   select instr_assignment_id
8212   into   l_assign_id
8213   from   IBY_TRXN_EXTENSIONS_V
8214   where  trxn_extension_id = p_trxn_extension_id;
8215   exception when NO_DATA_FOUND THEN
8216     null;
8217   end;
8218 
8219   IF l_debug_level > 0 THEN
8220      oe_debug_pub.add('Instrument assignment id for existing instrument'||l_assign_id);
8221   END IF;
8222 
8223   IF p_line_id IS NOT NULL THEN
8224   -- this is for line split
8225   l_trxn_attribs.trxn_ref_number1 := p_line_id;
8226 
8227 
8228   ELSE
8229   -- update trxn_ref_number2 to append string "R(n+1)" , where n is the
8230   -- previous retry number. The was suggested by IBY to avoid IBY restriction
8231   -- that order_id, ref_number1 and ref_number2 must be unique for each
8232   -- trxn_extension_id.
8233   l_pos := instr(l_trxn_attribs.trxn_ref_number2,'R');
8234 
8235 
8236   IF l_pos > 0 THEN
8237     l_retry_num := substr(l_trxn_attribs.trxn_ref_number2, l_pos+1, length(l_trxn_attribs.trxn_ref_number2)) + 1;
8238   l_trxn_attribs.trxn_ref_number2 := substr(l_trxn_attribs.trxn_ref_number2, 1, l_pos)||to_char(l_retry_num);
8239   ELSE
8240     l_retry_num := 1;
8241   l_trxn_attribs.trxn_ref_number2 := l_trxn_attribs.trxn_ref_number2||'R'||to_char(l_retry_num);
8242   END IF;
8243   END IF;
8244 
8245   IF l_debug_level > 0 THEN
8246     oe_debug_pub.add('l_pos is: '||l_pos, 3);
8247     oe_debug_pub.add('l_retry_num is: '||l_retry_num, 3);
8248     oe_debug_pub.add('trxn_ref_number2 in Create_New_Payment_Trxn is: '||l_trxn_attribs.trxn_ref_number2, 3);
8249     oe_debug_pub.add('Before calling create_transaction extension', 3);
8250     oe_debug_pub.add('Assignment id ---->'|| l_assign_id ,3);
8251     oe_debug_pub.add('l_trxn_attribs.Instrument_Security_Code --->'||l_trxn_attribs.Instrument_Security_Code, 3);
8252     oe_debug_pub.add('l_trxn_attribs.order_id ----> '||l_trxn_attribs.order_id ,3);
8253     oe_debug_pub.add('l_trxn_attribs.trxn_ref_number1 --->'||l_trxn_attribs.trxn_ref_number1, 3);
8254     oe_debug_pub.add('l_trxn_attribs.trxn_ref_number2 --->'||l_trxn_attribs.trxn_ref_number2, 3);
8255   END IF;
8256 
8257   --bug 5028932
8258   IF Oe_Payment_Trxn_Util.Get_CC_Security_Code_Use = 'REQUIRED'
8259   AND (l_trxn_attribs.Instrument_Security_Code IS NULL OR
8260   OE_GLOBALS.Equal(l_trxn_attribs.Instrument_Security_Code,FND_API.G_MISS_CHAR))
8261   THEN
8262 	IF p_instrument_security_code IS NOT NULL AND
8263 	NOT OE_GLOBALS.Equal(p_instrument_security_code,FND_API.G_MISS_CHAR) THEN
8264 		l_trxn_attribs.Instrument_Security_Code := p_instrument_security_code;
8265 	ELSE
8266 		FND_MESSAGE.SET_NAME('ONT','OE_CC_SECURITY_CODE_REQD');
8267 		OE_Msg_Pub.Add;
8268 		RAISE FND_API.G_EXC_ERROR;
8269 	END IF;
8270   END IF;
8271   --bug 5028932
8272 
8273   -- create new payment transaction extension id
8274   IBY_Fndcpt_Trxn_Pub.Create_Transaction_Extension
8275                                 (p_api_version          => 1.0,
8276                                 p_init_msg_list         => FND_API.G_TRUE,
8277                                 p_commit                => FND_API.G_FALSE,
8278                                 X_return_status         => l_return_status,
8279                                 X_msg_count             => l_msg_count,
8280                                 X_msg_data              => l_msg_data,
8281                                 P_payer                 => l_payer,
8282                                 P_payer_equivalency     => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
8283                                 P_pmt_channel           => 'CREDIT_CARD',
8284                                 P_instr_assignment      => l_assign_id,
8285                                 P_trxn_attribs          => l_trxn_attribs,
8286                                 x_entity_id             => x_trxn_extension_id,
8287                                 X_response              => l_response_code);
8288 
8289 
8290   IF l_debug_level > 0 THEN
8291     oe_debug_pub.add('Result code'||l_Response_code.result_code);
8292     oe_debug_pub.add('Return status'||l_Return_Status);
8293   END IF;
8294 
8295   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8296     IF l_debug_level > 0 THEN
8297       oe_debug_pub.add('Result error code in Create_Transaction_Extension'||l_response_code.result_code);
8298     END IF;
8299     RAISE FND_API.G_EXC_ERROR;
8300   ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8301     IF l_debug_level > 0 THEN
8302       oe_debug_pub.add('Result error code in Create_Transaction_Extension'||l_response_code.result_code);
8303     END IF;
8304     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8305   ELSIF l_return_status =FND_API.G_RET_STS_SUCCESS THEN
8306     IF l_debug_level > 0 THEN
8307       oe_debug_pub.add('Create_Transaction_Extension assignment Successful....');
8308       oe_debug_pub.add('After call to Create_Transaction_Extension'||l_return_status);
8309       oe_debug_pub.add('New trxn extension id'||x_trxn_extension_id);
8310     END IF;
8311   END IF;
8312 
8313   x_return_status := l_return_status;
8314 
8315   IF l_debug_level  > 0 THEN
8316       oe_debug_pub.add(  'Exiting Create_New_Payment_Trxn.', 1 ) ;
8317   END IF;
8318 
8319 EXCEPTION
8320 
8321     WHEN FND_API.G_EXC_ERROR THEN
8322 
8323       X_return_status := FND_API.G_RET_STS_ERROR;
8324       OE_MSG_PUB.Count_And_Get
8325             ( p_count => l_msg_count,
8326               p_data  => l_msg_data
8327             );
8328       RAISE FND_API.G_EXC_ERROR;
8329 
8330     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8331 
8332       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8333       OE_MSG_PUB.Count_And_Get
8334             ( p_count => l_msg_count,
8335               p_data  => l_msg_data
8336             );
8337       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8338 
8339     WHEN OTHERS THEN
8340 
8341       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8342       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8343       THEN
8344         FND_MSG_PUB.Add_Exc_Msg
8345             (   G_PKG_NAME
8346             ,   'OE_Verify_Payment_PUB'
8347             );
8348       END IF;
8349 
8350       OE_MSG_PUB.Count_And_Get
8351             ( p_count => l_msg_count,
8352               p_data  => l_msg_data
8353             );
8354       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8355 
8356 
8357 END Create_New_Payment_Trxn;
8358 
8359 END OE_Verify_Payment_PUB ;