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