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