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