[Home] [Help]
PACKAGE BODY: APPS.PV_ORDER_MGMT_PVT
Source
1 PACKAGE BODY PV_ORDER_MGMT_PVT as
2 /* $Header: pvxvpomb.pls 120.38 2009/12/15 19:17:08 hekkiral ship $ */
3
4
5
6 --Comments
7 --kvattiku: Aug 05, 05 For R12
8 -- 1. In set_enrq_payment_info, retrieve from pv_lookups as all the payment types
9 -- are included in it for backporting enhancements.
10 -- 2. Invoice is a payment type and we should pass payment type code as null in set_payment_info.
11 -- 3. As Purchase Order is not a payment type, commented out relevant code in set_payment_info.
12 -- 4. PO number is a new attribute for all pay types, so store the number in set_payment_info.
13 --kvattiku: Aug 08, 05 For R12 (NOCOPY bug 4445205)
14 -- 1. Declared new output variables (l_header_out_rec and l_line_out_tbl) wherever required and substituted
15 -- them for the output variables (x_header_rec and x_line_tbl) when calling OE_ORDER_GRP.process_order
16 --kvattiku: Aug 14, 05 For R12
17 -- Modified the signatures of set_enrq_payment_info and set_payment_info procedures. p_payment_method_rec and
18 -- p_enrl_req_id (in set_enrq_payment_info) are only IN and not IN OUT. p_payment_method_rec and
19 -- p_order_header_id (in set_payment_info) are only IN and not IN OUT.
20 --ktsao: Oct 05, 05 Fixed for bug 4645137
21 --ktsao: Oct 05, 05 Added debug message for cancel_order
22
23
24 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PV_ORDER_MGMT_PVT';
25 G_FILE_NAME CONSTANT VARCHAR2(12) := 'pvxvpomb.pls';
26 PV_DEBUG_HIGH_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
27 PV_DEBUG_LOW_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
28 PV_DEBUG_MEDIUM_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
29
30
31 -- usage: this function is needed because OM is writing messages into its on
32 -- stack and is not using the fnd stack. here the exception handlers will not
33 -- take care of it.
34
35 PROCEDURE Retrieve_OE_Messages IS
36 l_msg_count NUMBER;
37 l_msg_data VARCHAR2(2000);
38 x_msg_data VARCHAR2(2000);
39 l_msg_index NUMBER := 0;
40
41
42 l_len_sqlerrm NUMBER;
43 i NUMBER := 1;
44
45
46 BEGIN
47
48 OE_MSG_PUB.Count_And_Get
49 ( p_count => l_msg_count,
50 p_data => l_msg_data
51 );
52
53 IF l_msg_count > 0 THEN
54
55 IF (PV_DEBUG_HIGH_ON) THEN
56
57
58
59 PVX_UTILITY_PVT.debug_message('before updating the processing messages table');
60
61 END IF;
62
63 FOR k IN 1 .. l_msg_count LOOP
64
65 i:=1;
66
67 IF (PV_DEBUG_HIGH_ON) THEN
68
69
70
71 PVX_UTILITY_PVT.debug_message('before calling oe_msg_pub.get');
72
73 END IF;
74 oe_msg_pub.get (
75 p_msg_index => k
76 ,p_encoded => FND_API.G_FALSE
77 ,p_data => l_msg_data
78 ,p_msg_index_out => l_msg_index);
79
80 IF oe_msg_pub.g_msg_tbl(l_msg_index).message_text IS NULL THEN
81 IF (PV_DEBUG_HIGH_ON) THEN
82
83 PVX_UTILITY_PVT.debug_message('In index.message_text is null');
84 END IF;
85 x_msg_data := oe_msg_pub.get(l_msg_index, 'F');
86 END IF;
87
88 x_msg_data := l_msg_data;
89
90 IF (PV_DEBUG_HIGH_ON) THEN
91
92
93
94 PVX_UTILITY_PVT.debug_message('x_msg_data ' || x_msg_data);
95
96 END IF;
97
98 l_len_sqlerrm := Length(x_msg_data) ;
99 WHILE l_len_sqlerrm >= i LOOP
100 FND_MESSAGE.Set_Name('PV', 'PV_OM_ERROR');
101 FND_MESSAGE.Set_token('MSG_TXT' , substr(x_msg_data,i,240));
102 i := i + 240;
103 FND_MSG_PUB.ADD;
104 END LOOP;
105
106 END LOOP;
107
108 END IF;
109
110 END Retrieve_OE_Messages;
111
112
113 PROCEDURE Order_Debug_On IS
114
115 cursor c_debug_directory IS
116 select value value, substr(value,1,instr(value,',')-1) subvalue
117 from v$parameter where name = 'utl_file_dir';
118
119 l_debug_dir varchar2(512);
120 l_file_val varchar2(2000);
121 l_debug_on VARCHAR2(240);
122 l_debug_level number;
123
124
125 BEGIN
126
127 l_debug_on := FND_PROFILE.Value('SO_DEBUG');
128
129 IF (PV_DEBUG_HIGH_ON) THEN
130 PVX_UTILITY_PVT.debug_message('OE Debug on ' || l_debug_on);
131 END IF;
132
133 IF (l_debug_on = 'Y' )THEN
134 for x in c_debug_directory loop
135 IF (x.subvalue IS NULL) THEN
136 l_debug_dir := x.value;
137 else
138 l_debug_dir := x.subvalue;
139 END IF;
140 exit when l_debug_dir IS NOT NULL;
141 end loop;
142
143 l_debug_level := to_number(nvl(FND_PROFILE.Value('OE_DEBUG_LEVEL'), 5));
144 oe_Debug_pub.setdebuglevel(l_debug_level);
145 oe_debug_pub.debug_on;
146 oe_debug_pub.initialize;
147 OE_DEBUG_PUB.G_DIR := l_debug_dir;
148 l_file_val := OE_DEBUG_PUB.Set_Debug_Mode('FILE');
149 IF (PV_DEBUG_HIGH_ON) THEN
150 PVX_UTILITY_PVT.debug_message('Debug File ' || l_file_val);
151 END IF;
152 END IF;
153
154 END Order_Debug_On;
155
156
157
158
159 PROCEDURE set_mo_policy_context (p_order_header_id IN number)
160 IS
161 CURSOR c_order_header_id (l_order_header_id number) IS
162 select org_id
163 from oe_order_headers_all
164 where header_id = l_order_header_id;
165
166 curr_org number;
167 order_org number;
168
169 BEGIN
170
171 IF (PV_DEBUG_HIGH_ON) THEN
172 PVX_UTILITY_PVT.debug_message(' begin : set_mo_policy_context: ' );
173 END IF;
174
175 curr_org := mo_global.get_current_org_id;
176
177 IF (PV_DEBUG_HIGH_ON) THEN
178 PVX_UTILITY_PVT.debug_message('set_mo_policy_context: p_order_header_id ' || p_order_header_id);
179 PVX_UTILITY_PVT.debug_message('set_mo_policy_context: curr_org ' || curr_org);
180 END IF;
181
182 OPEN c_order_header_id(p_order_header_id);
183 FETCH c_order_header_id into order_org;
184 CLOSE c_order_header_id;
185
186 IF (PV_DEBUG_HIGH_ON) THEN
187 PVX_UTILITY_PVT.debug_message('set_mo_policy_context: order_org ' || order_org);
188 END IF;
189
190 if ((curr_org is null or curr_org <> order_org) and order_org is not null) then
191 mo_global.set_policy_context('S', order_org);
192 IF (PV_DEBUG_HIGH_ON) THEN
193 PVX_UTILITY_PVT.debug_message('call mo_global.set_policy_context set single org');
194 END IF;
195 end if;
196
197 IF (PV_DEBUG_HIGH_ON) THEN
198 PVX_UTILITY_PVT.debug_message(' end : set_mo_policy_context: ' );
199 END IF;
200
201 END set_mo_policy_context;
202
203
204
205
206
207 PROCEDURE process_order(
208 p_api_version_number IN NUMBER
209 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
210 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
211 ,p_party_site_id IN NUMBER
212 ,p_partner_party_id IN NUMBER
213 ,p_currency_code IN VARCHAR2
214 ,p_contact_party_id IN NUMBER
215 ,p_partner_account_id IN NUMBER
216 ,P_order_tbl IN Order_Tbl_type
217 ,x_order_header_id OUT NOCOPY JTF_NUMBER_TABLE
218 ,x_return_status OUT NOCOPY VARCHAR2
219 ,x_msg_count OUT NOCOPY NUMBER
220 ,x_msg_data OUT NOCOPY VARCHAR2
221 )
222 IS
223
224 l_api_version_number CONSTANT NUMBER := 1.0;
225 l_api_name CONSTANT VARCHAR2(30) := 'process_order';
226 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
227
228 l_header_rec OE_ORDER_PUB.Header_Rec_Type;
229 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
230
231 --kvattiku Aug 08, 05 Added new variables to take care of the NOCOPY related changes (bug # 4445205)
232 l_header_out_rec OE_ORDER_PUB.Header_Rec_Type;
233 l_line_out_tbl OE_ORDER_PUB.Line_Tbl_Type;
234
235
236 l_transaction_type_id NUMBER;
237 l_bill_to_site_use_id NUMBER;
238 l_ship_to_site_use_id NUMBER;
239 l_cust_account_role_id NUMBER;
240 l_cust_acct_site_id NUMBER;
241 l_party_id NUMBER;
242 l_salesrep_id NUMBER;
243 l_price_exists boolean := true;
244 l_update_order boolean := false;
245
246 l_msg_count number;
247 l_msg_data varchar2(200);
248 l_return_status VARCHAR2(1);
249
250
251 x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type;
252 x_Header_Adj_tbl OE_ORDER_PUB. Header_Adj_Tbl_Type;
253 x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type;
254 x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type;
255 x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type;
256 x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type;
257 x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;
258 x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type;
259 x_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
260 x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type;
261 x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type;
262 x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type;
263 x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type;
264 x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type;
265 x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type;
266 x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;
267 x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type;
268 x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type;
269 x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type;
270 x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
271
272 CURSOR validate_price (cv_order_header_id JTF_NUMBER_TABLE) IS
273 select 1 from dual where exists
274 (select /*+ CARDINALITY(t 10) */ 1
275 from oe_order_lines_all,(SELECT * FROM TABLE (CAST(cv_order_header_id AS JTF_NUMBER_TABLE))) t
276 where header_id = t.column_value
277 and (unit_list_price is null or
278 unit_selling_price is null or price_list_id is null));
279
280
281 BEGIN
282
283
284 ---------------Initialize --------------------
285 -- Standard Start of API savepoint
286 SAVEPOINT PV_PROCESS_ORDER;
287
288 -- Initialize message list if p_init_msg_list is set to TRUE.
289 IF FND_API.to_Boolean( p_init_msg_list )
290 THEN
291 FND_MSG_PUB.initialize;
292 END IF;
293
294 -- Standard call to check for call compatibility.
295 IF NOT FND_API.Compatible_API_Call (
296 l_api_version_number
297 ,p_api_version_number
298 ,l_api_name
299 ,G_PKG_NAME
300 )
301 THEN
302 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
303 END IF;
304
305 -- Debug Message
306 IF (PV_DEBUG_HIGH_ON) THEN
307
308 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
309 END IF;
310
311
312 -- Initialize API return status to SUCCESS
313 x_return_status := FND_API.G_RET_STS_SUCCESS;
314 -------------End Of Initialize -------------------------------
315
316 -------------Validate IN Parameters -----------------------------
317
318 IF FND_GLOBAL.User_Id IS NULL THEN
319 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
320 FND_MSG_PUB.add;
321 RAISE FND_API.G_EXC_ERROR;
322 END IF;
323
324
325 IF (p_party_site_id = FND_API.G_MISS_NUM) THEN
326 FND_MESSAGE.set_name('PV', 'PV_API_NO_PARTY_SITE_ID');
327 FND_MSG_PUB.add;
328 RAISE FND_API.G_EXC_ERROR;
329 END IF;
330
331
332 IF (p_partner_party_id = FND_API.G_MISS_NUM) THEN
333 FND_MESSAGE.set_name('PV', 'PV_API_NO_PARTNER_PARTY_ID');
334 FND_MSG_PUB.add;
335 RAISE FND_API.G_EXC_ERROR;
336 END IF;
337
338
339 IF (p_currency_code = FND_API.G_MISS_CHAR) THEN
340 FND_MESSAGE.set_name('PV', 'PV_API_NO_CURRENCY');
341 FND_MSG_PUB.add;
342 RAISE FND_API.G_EXC_ERROR;
343 END IF;
344
345
346 IF (p_contact_party_id = FND_API.G_MISS_NUM) THEN
347 FND_MESSAGE.set_name('PV', 'PV_API_NO_CONTACT_PARTY_ID');
348 FND_MSG_PUB.add;
349 RAISE FND_API.G_EXC_ERROR;
350 END IF;
351
352
353 IF (p_partner_account_id = FND_API.G_MISS_NUM) THEN
354 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
355 FND_MESSAGE.Set_Token('ID', 'Account', FALSE);
356 FND_MSG_PUB.add;
357 RAISE FND_API.G_EXC_ERROR;
358 END IF;
359
360 IF (P_order_tbl.count = 0) THEN
361 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
362 FND_MESSAGE.Set_Token('ID', 'Order Details', FALSE);
363 FND_MSG_PUB.add;
364 RAISE FND_API.G_EXC_ERROR;
365 END IF;
366
367 FOR i in P_order_tbl.FIRST..P_order_tbl.LAST loop
368 IF((P_order_tbl(i).order_header_id=FND_API.G_MISS_NUM or P_order_tbl(i).order_header_id IS NULL)
369 and (P_order_tbl(i).inventory_item_id=FND_API.G_MISS_NUM or P_order_tbl(i).inventory_item_id IS NULL)) THEN
370 FND_MESSAGE.set_name('PV', 'PV_NO_PROGRAM_INVENTORY_ITEM');
371 FND_MSG_PUB.add;
372 RAISE FND_API.G_EXC_ERROR;
373 END IF;
374 end loop;
375
376
377 -------------End of Validate IN Parameters -----------------------------
378 ------------- Get Transaction Type ID and Salesperson ID for order creation -----------
379
380 for i in P_order_tbl.FIRST..P_order_tbl.LAST loop
381 IF((P_order_tbl(i).order_header_id is not null) and
382 (P_order_tbl(i).order_header_id <> FND_API.G_MISS_NUM)) THEN
383 l_update_order := true;
384 exit;
385 END IF;
386 end loop;
387
388 IF(not(l_update_order)) THEN
389 l_transaction_type_id := to_number(FND_PROFILE.Value('PV_ORDER_TRANSACTION_TYPE_ID'));
390 IF l_transaction_type_id is null then
391 x_return_status := FND_API.G_RET_STS_ERROR;
392 FND_MESSAGE.Set_Name('PV', 'PV_NO_ORDER_TRANSACTION_TYPE');
393 FND_MSG_PUB.ADD;
394 RAISE FND_API.G_EXC_ERROR;
395 END IF;
396
397 -- add to fix bug#2792593
398 l_salesrep_id := to_number(FND_PROFILE.Value('PV_DEFAULT_SALESPERSON_ID'));
399 IF l_salesrep_id is null then
400 x_return_status := FND_API.G_RET_STS_ERROR;
401 FND_MESSAGE.Set_Name('PV', 'PV_NO_SALESREP_ID');
402 FND_MSG_PUB.ADD;
403 RAISE FND_API.G_EXC_ERROR;
404 END IF;
405 -- end adding
406 END IF;
407
408 -------------End of Get Transaction Type ID and Salesperson ID for order creation -----------
409
410
411
412 IF (PV_DEBUG_HIGH_ON) THEN
413
414 PVX_UTILITY_PVT.debug_message('Partner Accoutn ID : ' || p_partner_account_id);
415
416 END IF;
417
418
419
420 ----------------End of Get Sold to org ID----------------------------------
421 /* R12 Changes
422 * Calls to PV_PARTNER_ACCNT_MGMT_PVT.get_acct_site_uses will have an extra
423 * out parameter x_cust_acct_site_id which will get passed to the procedure
424 * PV_PARTNER_ACCNT_MGMT_PVT.get_cust_acct_roles
425 * also will pass a generic party_id to get_acct_site_uses and will throw
426 * an exception if the party_site_id does not match with the partner_party_id
427 * or contact_party_id
428 */
429
430 IF (PV_DEBUG_HIGH_ON) THEN
431
432 PVX_UTILITY_PVT.debug_message('-----Get generic party_id based on party_site_id------');
433 END IF;
434
435 select party_id
436 into l_party_id
437 from hz_party_sites
438 where party_site_id = p_party_site_id
439 and party_id in (p_partner_party_id, p_contact_party_id)
440 and status = 'A';
441
442 IF (l_party_id IS NULL) THEN
443 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
444 FND_MESSAGE.Set_Name('PV', 'PV_INVALID_PARTY_SITE_COMB');
445 FND_MESSAGE.Set_Token('ID1', to_char(p_partner_party_id) || ',' || to_char(p_contact_party_id), FALSE);
446 FND_MESSAGE.Set_Token('ID2', to_char(p_party_site_id), FALSE);
447 FND_MSG_PUB.ADD;
448 END IF;
449 RAISE FND_API.G_EXC_ERROR;
450 END IF;
451
452 IF (PV_DEBUG_HIGH_ON) THEN
453
454 PVX_UTILITY_PVT.debug_message('-----Get Invoice to Org ID------');
455 END IF;
456 PV_PARTNER_ACCNT_MGMT_PVT.Get_acct_site_uses(
457 p_party_site_id => p_party_site_id,
458 p_acct_site_type => 'BILL_TO',
459 p_cust_account_id => p_partner_account_id,
460 p_party_id => l_party_id,
461 x_return_status => l_return_status,
462 x_site_use_id => l_bill_to_site_use_id,
463 x_cust_acct_site_id => l_cust_acct_site_id
464 );
465
466 IF (PV_DEBUG_HIGH_ON) THEN
467
468 PVX_UTILITY_PVT.debug_message('l_bill_to_site_use_id : ' ||l_bill_to_site_use_id);
469 PVX_UTILITY_PVT.debug_message('l_return_status : ' || l_return_status);
470
471 END IF;
472
473 IF l_Return_Status <> FND_API.G_RET_STS_SUCCESS THEN
474 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
475 FND_MESSAGE.Set_Name('PV', 'PV_INVOICE_ORG_ERROR');
476 FND_MESSAGE.Set_Token('ID', to_char(p_partner_party_id), FALSE);
477 FND_MSG_PUB.ADD;
478 END IF;
479 raise FND_API.G_EXC_ERROR;
480 END IF;
481
482 -----------------End of get Invoice to Org ID--------------------------------
483 IF (PV_DEBUG_HIGH_ON) THEN
484
485 PVX_UTILITY_PVT.debug_message('---------Get Ship To Org ID-----------');
486 END IF;
487
488 PV_PARTNER_ACCNT_MGMT_PVT.Get_acct_site_uses(
489 p_party_site_id => p_party_site_id,
490 p_acct_site_type => 'SHIP_TO',
491 p_cust_account_id => p_partner_account_id,
492 p_party_id => l_party_id,
493 x_return_status => l_return_status,
494 x_site_use_id => l_ship_to_site_use_id,
495 x_cust_acct_site_id => l_cust_acct_site_id
496 );
497
498 IF (PV_DEBUG_HIGH_ON) THEN
499
500 PVX_UTILITY_PVT.debug_message('l_ship_to_site_use_id : ' ||l_ship_to_site_use_id);
501 PVX_UTILITY_PVT.debug_message('l_return_status : ' || l_return_status);
502
503 END IF;
504 IF l_Return_Status <> FND_API.G_RET_STS_SUCCESS THEN
505 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
506 FND_MESSAGE.Set_Name('PV', 'PV_SHIP_TO_ORG_ERROR');
507 FND_MESSAGE.Set_Token('ID', to_char(p_partner_party_id), FALSE);
508 FND_MSG_PUB.ADD;
509 END IF;
510 raise FND_API.G_EXC_ERROR;
511 END IF;
512
513 ---------------End of Ship Org ID----------------------------------
514 IF (PV_DEBUG_HIGH_ON) THEN
515
516 PVX_UTILITY_PVT.debug_message('----- Get Contact Role--------');
517 END IF;
518
519 PV_PARTNER_ACCNT_MGMT_PVT.Get_cust_acct_roles(
520 p_contact_party_id => p_contact_party_id,
521 p_cust_account_id => p_partner_account_id,
522 p_cust_account_site_id => l_cust_acct_site_id,
523 x_return_status => l_return_status,
524 x_cust_account_role_id => l_cust_account_role_id
525 );
526
527 IF (PV_DEBUG_HIGH_ON) THEN
528
529 PVX_UTILITY_PVT.debug_message('l_cust_account_role_id : ' ||l_cust_account_role_id);
530 PVX_UTILITY_PVT.debug_message('l_return_status : ' || l_return_status);
531
532 END IF;
533
534 IF l_Return_Status <> FND_API.G_RET_STS_SUCCESS THEN
535 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
536 FND_MESSAGE.Set_Name('PV', 'PV_ACCOUNT_ROLE_ERROR');
537 FND_MESSAGE.Set_Token('ID', to_char(p_contact_party_id), FALSE);
538 FND_MSG_PUB.ADD;
539 END IF;
540 raise FND_API.G_EXC_ERROR;
541 END IF;
542 --------------End of get Contact role--------------------------------
543
544
545
546 IF (PV_DEBUG_HIGH_ON) THEN
547 PVX_UTILITY_PVT.debug_message('Before header rec initialization');
548 END IF;
549
550 x_order_header_id := JTF_NUMBER_TABLE();
551
552 FOR i in p_order_tbl.FIRST..p_order_tbl.LAST LOOP
553
554 Order_Debug_On;
555
556 l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
557 l_header_rec.freight_terms_code := NULL;
558 l_header_rec.transactional_curr_code := P_currency_code;
559 l_header_rec.sold_to_org_id := p_partner_account_id;
560 l_header_rec.INVOICE_TO_ORG_ID := l_bill_to_site_use_id;
561 l_header_rec.SHIP_TO_ORG_ID := l_ship_to_site_use_id;
562 l_header_rec.INVOICE_TO_CONTACT_ID := l_cust_account_role_id;
563 l_header_rec.SOLD_TO_CONTACT_ID := l_cust_account_role_id;
564 IF (p_order_tbl(i).enrl_request_id is not null) THEN
565 l_header_rec.order_source_id := 23;
566 l_header_rec.source_document_type_id := 23;
567 l_header_rec.source_document_id := p_order_tbl(i).enrl_request_id;
568 l_header_rec.orig_sys_document_ref := p_order_tbl(i).enrl_request_id;
569 ELSIF (p_order_tbl(i).invite_header_id is not null) THEN
570 l_header_rec.order_source_id := 31;
571 l_header_rec.source_document_type_id := 31;
572 l_header_rec.source_document_id := p_order_tbl(i).invite_header_id;
573 l_header_rec.orig_sys_document_ref := p_order_tbl(i).invite_header_id;
574 END IF;
575
576
577 l_header_out_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
578 /*l_header_out_rec.order_type_id := l_transaction_type_id;
579 l_header_out_rec.freight_terms_code := NULL;
580 l_header_out_rec.transactional_curr_code := P_currency_code;
581 l_header_out_rec.sold_to_org_id := p_partner_account_id;
582 l_header_out_rec.INVOICE_TO_ORG_ID := l_bill_to_site_use_id;
583 l_header_out_rec.SHIP_TO_ORG_ID := l_ship_to_site_use_id;
584 l_header_out_rec.INVOICE_TO_CONTACT_ID := l_cust_account_role_id;
585 l_header_out_rec.SOLD_TO_CONTACT_ID := l_cust_account_role_id;
586 l_header_out_rec.order_source_id := 23;
587 l_header_out_rec.salesrep_id := l_salesrep_id;*/
588
589
590 IF(P_order_tbl(i).order_header_id=FND_API.G_MISS_NUM or P_order_tbl(i).order_header_id IS NULL) THEN
591
592 l_header_rec.operation := OE_GLOBALS.G_OPR_CREATE;
593 l_header_rec.order_type_id := l_transaction_type_id;
594 l_header_rec.salesrep_id := l_salesrep_id;
595
596 l_line_tbl(1) := OE_ORDER_PUB.G_MISS_LINE_REC;
597 l_line_tbl(1).ordered_quantity := 1;
598 l_line_tbl(1).operation := OE_GLOBALS.G_OPR_CREATE;
599 l_line_tbl(1).inventory_item_id := P_order_tbl(i).inventory_item_id;
600
601
602 --kvattiku: Aug 08, 05 NOCOPY bug related change
603 /*l_header_out_rec.operation := OE_GLOBALS.G_OPR_CREATE;
604
605 l_line_out_tbl(1) := OE_ORDER_PUB.G_MISS_LINE_REC;
606 l_line_out_tbl(1).ordered_quantity := 1;
607 l_line_out_tbl(1).operation := OE_GLOBALS.G_OPR_CREATE;
608 l_line_out_tbl(1).inventory_item_id := P_order_tbl(i).inventory_item_id;*/
609
610 else
611 l_header_rec.operation := OE_GLOBALS.G_OPR_UPDATE;
612 l_header_rec.header_id := P_order_tbl(i).order_header_id;
613 l_header_rec.pricing_date := sysdate;
614 l_header_rec.change_reason := 'SYSTEM';
615
616 --kvattiku: Aug 08, 05 NOCOPY bug related change
617 /*l_header_out_rec.operation := OE_GLOBALS.G_OPR_UPDATE;
618 l_header_out_rec.header_id := P_order_tbl(i).order_header_id;
619 l_header_out_rec.pricing_date := sysdate;
620 l_header_out_rec.change_reason := 'SYSTEM';*/
621
622 END IF;
623
624
625
626
627
628 IF (PV_DEBUG_HIGH_ON) THEN
629
630
631
632 PVX_UTILITY_PVT.debug_message('Just before order call');
633
634 END IF;
635
636 --kvattiku: Aug 08, 05 Changed the x_line_tbl initialization to l_line_out_tbl and x_header_rec
637 --to l_header_out_rec from l_line_tbl and l_header_rec respectively (NOCOPY bug)
638
639 OE_ORDER_GRP.process_order(
640 p_api_version_number => l_api_version_number,
641 p_init_msg_list => FND_API.g_false ,
642 p_return_values => FND_API.g_true ,
643 p_commit => FND_API.g_false ,
644 x_return_status => x_return_status,
645 x_msg_count => x_msg_count,
646 x_msg_data => x_msg_data,
647 p_header_rec => l_header_rec,
648 p_line_tbl => l_line_tbl,
649 x_header_rec => l_header_out_rec,
650 x_header_val_rec => x_header_val_rec,
651 x_Header_Adj_tbl => x_Header_Adj_tbl ,
652 x_Header_Adj_val_tbl => x_Header_Adj_val_tbl,
653 x_Header_price_Att_tbl => x_Header_price_Att_tbl,
654 x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl,
655 x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl,
656 x_Header_Scredit_tbl => x_Header_Scredit_tbl,
657 x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl,
658 x_line_tbl => l_line_out_tbl,
659 x_line_val_tbl => x_line_val_tbl ,
660 x_Line_Adj_tbl => x_Line_Adj_tbl,
661 x_Line_Adj_val_tbl => x_Line_Adj_val_tbl,
662 x_Line_price_Att_tbl => x_Line_price_Att_tbl,
663 x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl ,
664 x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl,
665 x_Line_Scredit_tbl => x_Line_Scredit_tbl,
666 x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl,
667 x_Lot_Serial_tbl => x_Lot_Serial_tbl ,
668 x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl,
669 x_action_request_tbl =>x_action_request_tbl
670 );
671
672 IF (PV_DEBUG_HIGH_ON) THEN
673 PVX_UTILITY_PVT.debug_message('X_return_status ' || x_return_status);
674 PVX_UTILITY_PVT.debug_message('X_msg_count ' || x_msg_count);
675 PVX_UTILITY_PVT.debug_message('X_msg_data ' || x_msg_data);
676 END IF;
677
678
679 x_order_header_id.extend;
680
681 --kvattiku: Aug 08, 05 NOCOPY bug related change
682 --x_order_header_id(x_order_header_id.count) := l_header_rec.header_id;
683 x_order_header_id(x_order_header_id.count) := l_header_out_rec.header_id;
684
685 IF (PV_DEBUG_HIGH_ON) THEN
686
687 PVX_UTILITY_PVT.debug_message('x_order_header_id : '|| i|| ' : ' || x_order_header_id(x_order_header_id.count));
688 END IF;
689 Retrieve_OE_Messages;
690
691 IF x_return_status = FND_API.g_ret_sts_error THEN
692 RAISE FND_API.g_exc_error;
693 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
694 RAISE FND_API.g_exc_unexpected_error;
695 END IF;
696
697
698 END LOOP;
699
700 FOR x in validate_price( x_order_header_id) LOOP
701 fnd_message.SET_NAME ('PV', 'PV_ERROR_IN_CALC_PRICE');
702 fnd_msg_pub.ADD;
703 raise FND_API.G_EXC_ERROR;
704 END LOOP;
705
706 FND_MSG_PUB.Count_And_Get
707 ( p_encoded => FND_API.G_FALSE,
708 p_count => x_msg_count,
709 p_data => x_msg_data
710 );
711
712 IF FND_API.to_Boolean( p_commit ) THEN
713 COMMIT WORK;
714 END IF;
715
716
717
718 EXCEPTION
719 WHEN FND_API.G_EXC_ERROR THEN
720 ROLLBACK TO PV_PROCESS_ORDER;
721 x_return_status := FND_API.G_RET_STS_ERROR;
722 FND_MSG_PUB.Count_And_Get (
723 p_encoded => FND_API.G_FALSE
724 ,p_count => x_msg_count
725 ,p_data => x_msg_data
726 );
727
728
729 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
730 ROLLBACK TO PV_PROCESS_ORDER;
731 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
732 -- Standard call to get message count and if count=1, get the message
733 FND_MSG_PUB.Count_And_Get (
734 p_encoded => FND_API.G_FALSE
735 ,p_count => x_msg_count
736 ,p_data => x_msg_data
737 );
738
739 WHEN OTHERS THEN
740 ROLLBACK TO PV_PROCESS_ORDER;
741 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
742 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
743 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
744 END IF;
745 FND_MSG_PUB.Count_And_Get (
746 p_encoded => FND_API.G_FALSE
747 ,p_count => x_msg_count
748 ,p_data => x_msg_data
749 );
750
751
752 End process_order;
753
754
755
756
757 PROCEDURE process_order(
758 p_api_version_number IN NUMBER
759 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
760 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
761 ,p_party_site_id IN NUMBER
762 ,p_partner_party_id IN NUMBER
763 ,p_currency_code IN VARCHAR2
764 ,p_contact_party_id IN NUMBER
765 ,p_partner_account_id IN NUMBER
766 ,p_enrl_req_id IN JTF_NUMBER_TABLE
767 ,x_return_status OUT NOCOPY VARCHAR2
768 ,x_msg_count OUT NOCOPY NUMBER
769 ,x_msg_data OUT NOCOPY VARCHAR2
770 )
771 IS
772 l_api_version_number CONSTANT NUMBER := 1.0;
773 l_api_name CONSTANT VARCHAR2(30) := 'Process_order';
774 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
775
776 l_index number := 0;
777 l_order_header_id_tbl JTF_NUMBER_TABLE;
778 l_enrl_req_id_tbl JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
779 l_obj_ver_tbl JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
780 l_order_tbl Order_Tbl_type;
781 l_enrl_req_rec PV_Pg_Enrl_Requests_PVT.enrl_request_rec_type;
782
783 -- Cursor to get partner program inventoty item id
784 CURSOR c_inventory_item_id IS
785 SELECT /*+ CARDINALITY(erequests 10) */ pvpp.inventory_item_id, pver.enrl_request_id, pver.order_header_id, pver.object_version_number
786 FROM PV_PARTNER_PROGRAM_B pvpp, PV_PG_ENRL_REQUESTS pver,
787 (Select column_value from table (CAST(p_enrl_req_id AS JTF_NUMBER_TABLE))) erequests
788 WHERE pver.enrl_request_id = erequests.column_value
789 and pver.PROGRAM_ID = pvpp.program_id
790 and pver.custom_setup_id in (7004, 7005)
791 and (pver.order_header_id is null
792 OR (pver.order_header_id is not null and pver.payment_status_code <> 'AUTHORIZED_PAYMENT'));
793
794
795
796 BEGIN
797
798 ---------------Initialize --------------------
799 -- Standard Start of API savepoint
800 SAVEPOINT ENRQ_PROCESS_ORDER;
801
802 -- Initialize message list if p_init_msg_list is set to TRUE.
803 IF FND_API.to_Boolean( p_init_msg_list )
804 THEN
805 FND_MSG_PUB.initialize;
806 END IF;
807
808 -- Standard call to check for call compatibility.
809 IF NOT FND_API.Compatible_API_Call (
810 l_api_version_number
811 ,p_api_version_number
812 ,l_api_name
813 ,G_PKG_NAME
814 )
815 THEN
816 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
817 END IF;
818
819 -- Debug Message
820 IF (PV_DEBUG_HIGH_ON) THEN
821
822 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
823 END IF;
824
825
826 -- Initialize API return status to SUCCESS
827 x_return_status := FND_API.G_RET_STS_SUCCESS;
828 -------------End Of Initialize -------------------------------
829
830
831 IF FND_GLOBAL.User_Id IS NULL THEN
832 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
833 FND_MSG_PUB.add;
834 RAISE FND_API.G_EXC_ERROR;
835 END IF;
836
837
838 IF p_enrl_req_id.count() = 0 THEN
839 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
840 FND_MESSAGE.Set_Token('ID', 'Enrollment Request', FALSE);
841 fnd_msg_pub.ADD;
842 raise FND_API.G_EXC_ERROR;
843 END IF;
844
845
846 FOR x IN c_inventory_item_id LOOP
847 -- Debug Message
848 IF (x.order_header_id IS NOT NULL) THEN
849 l_order_tbl(l_index).order_header_id := x.order_header_id;
850 ELSE
851 l_order_tbl(l_index).inventory_item_id := x.inventory_item_id;
852 END IF;
853 l_order_tbl(l_index).enrl_request_id := x.enrl_request_id;
854 l_enrl_req_id_tbl.extend;
855 l_obj_ver_tbl.extend;
856 l_enrl_req_id_tbl(l_enrl_req_id_tbl.count) := x.enrl_request_id;
857 l_obj_ver_tbl(l_obj_ver_tbl.count) := x.object_version_number;
858 l_index := l_index + 1;
859 END loop;
860
861
862 IF(l_order_tbl.count >0) THEN
863 process_order(
864 p_api_version_number => p_api_version_number
865 ,p_init_msg_list => FND_API.g_false
866 ,p_commit => FND_API.G_FALSE
867 ,p_party_site_id => p_party_site_id
868 ,p_partner_party_id => p_partner_party_id
869 ,p_currency_code => p_currency_code
870 ,p_contact_party_id => p_contact_party_id
871 ,p_partner_account_id => p_partner_account_id
872 ,p_order_tbl => l_order_tbl
873 ,x_order_header_id => l_order_header_id_tbl
874 ,x_return_status => x_return_status
875 ,x_msg_count => x_msg_count
876 ,x_msg_data => x_msg_data
877 );
878
879
880 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
881 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
882 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
883 RAISE FND_API.G_EXC_ERROR;
884 END IF;
885
886
887 FOR i in l_order_header_id_tbl.FIRST ..l_order_header_id_tbl.LAST LOOP
888
889
890 l_enrl_req_rec.object_version_number := l_obj_ver_tbl(i);
891 l_enrl_req_rec.enrl_request_id := l_enrl_req_id_tbl(i);
892 l_enrl_req_rec.order_header_id := l_order_header_id_tbl(i);
893 l_enrl_req_rec.payment_status_code := 'NOT_AUTHORIZED';
894
895
896 PV_Pg_Enrl_Requests_PVT.Update_Pg_Enrl_Requests
897 (
898 p_api_version_number => p_api_version_number,
899 p_init_msg_list => Fnd_Api.G_FALSE,
900 p_commit => Fnd_Api.G_FALSE,
901 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
902 x_return_status => x_return_status,
903 x_msg_count => x_msg_count,
904 x_msg_data => x_msg_data,
905 p_enrl_request_rec => l_enrl_req_rec
906 );
907
908 IF x_return_status = FND_API.g_ret_sts_error THEN
909 RAISE FND_API.g_exc_error;
910 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
911 RAISE FND_API.g_exc_unexpected_error;
912 END IF;
913
914
915 END LOOP;
916
917 END IF;
918 FND_MSG_PUB.Count_And_Get
919 ( p_encoded => FND_API.G_FALSE,
920 p_count => x_msg_count,
921 p_data => x_msg_data
922 );
923
924 IF FND_API.to_Boolean( p_commit ) THEN
925 COMMIT WORK;
926 END IF;
927
928
929 EXCEPTION
930 WHEN FND_API.G_EXC_ERROR THEN
931 ROLLBACK TO ENRQ_PROCESS_ORDER;
932 x_return_status := FND_API.G_RET_STS_ERROR;
933 FND_MSG_PUB.Count_And_Get (
934 p_encoded => FND_API.G_FALSE
935 ,p_count => x_msg_count
936 ,p_data => x_msg_data
937 );
938
939
940 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
941 ROLLBACK TO ENRQ_PROCESS_ORDER;
942 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
943 -- Standard call to get message count and if count=1, get the message
944 FND_MSG_PUB.Count_And_Get (
945 p_encoded => FND_API.G_FALSE
946 ,p_count => x_msg_count
947 ,p_data => x_msg_data
948 );
949
950 WHEN OTHERS THEN
951 ROLLBACK TO ENRQ_PROCESS_ORDER;
952 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
953 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
954 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
955 END IF;
956 FND_MSG_PUB.Count_And_Get (
957 p_encoded => FND_API.G_FALSE
958 ,p_count => x_msg_count
959 ,p_data => x_msg_data
960 );
961
962 END process_order;
963
964
965
966 PROCEDURE process_order(
967 p_api_version_number IN NUMBER
968 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
969 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
970 ,p_party_site_id IN NUMBER
971 ,p_partner_party_id IN NUMBER
972 ,p_currency_code IN VARCHAR2
973 ,p_contact_party_id IN NUMBER
974 ,p_partner_account_id IN NUMBER
975 ,p_program_id IN NUMBER
976 ,p_invite_header_id IN NUMBER
977 ,x_order_header_id OUT NOCOPY NUMBER
978 ,x_return_status OUT NOCOPY VARCHAR2
979 ,x_msg_count OUT NOCOPY NUMBER
980 ,x_msg_data OUT NOCOPY VARCHAR2
981 )
982 IS
983 l_api_version_number CONSTANT NUMBER := 1.0;
984 l_api_name CONSTANT VARCHAR2(30) := 'Process_order';
985 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
986
987 l_index number := 0;
988 l_order_tbl Order_Tbl_type;
989 l_order_header_id_tbl JTF_NUMBER_TABLE;
990 l_inventory_item_id NUMBER;
991 l_invite_headers_rec PV_PG_INVITE_HEADERS_PVT.invite_headers_rec_type;
992
993 -- Cursor to get partner program inventoty item id
994 CURSOR c_inventory_item_id(cv_program_id NUMBER) IS
995 SELECT pvpp.inventory_item_id
996 FROM PV_PARTNER_PROGRAM_B pvpp
997 WHERE program_id = cv_program_id;
998
999
1000 BEGIN
1001
1002 ---------------Initialize --------------------
1003 -- Standard Start of API savepoint
1004 SAVEPOINT PRGM_PROCESS_ORDER;
1005
1006 -- Initialize message list if p_init_msg_list is set to TRUE.
1007 IF FND_API.to_Boolean( p_init_msg_list )
1008 THEN
1009 FND_MSG_PUB.initialize;
1010 END IF;
1011
1012 -- Standard call to check for call compatibility.
1013 IF NOT FND_API.Compatible_API_Call (
1014 l_api_version_number
1015 ,p_api_version_number
1016 ,l_api_name
1017 ,G_PKG_NAME
1018 )
1019 THEN
1020 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1021 END IF;
1022
1023 -- Debug Message
1024 IF (PV_DEBUG_HIGH_ON) THEN
1025
1026 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
1027 END IF;
1028
1029
1030 -- Initialize API return status to SUCCESS
1031 x_return_status := FND_API.G_RET_STS_SUCCESS;
1032 -------------End Of Initialize -------------------------------
1033
1034
1035 IF FND_GLOBAL.User_Id IS NULL THEN
1036 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
1037 FND_MSG_PUB.add;
1038 RAISE FND_API.G_EXC_ERROR;
1039 END IF;
1040
1041
1042 IF (p_program_id = FND_API.G_MISS_NUM) THEN
1043 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
1044 FND_MESSAGE.Set_Token('ID', 'Program', FALSE);
1045 fnd_msg_pub.ADD;
1046 raise FND_API.G_EXC_ERROR;
1047 END IF;
1048
1049
1050 OPEN c_inventory_item_id(p_program_id);
1051 FETCH c_inventory_item_id into l_inventory_item_id;
1052 IF c_inventory_item_id%FOUND THEN
1053 l_order_tbl(0).inventory_item_id := l_inventory_item_id;
1054 END IF;
1055 CLOSE c_inventory_item_id;
1056
1057 IF(l_order_tbl.count >0) THEN
1058 l_order_tbl(0).invite_header_id := p_invite_header_id;
1059 process_order(
1060 p_api_version_number => p_api_version_number
1061 ,p_init_msg_list => FND_API.g_false
1062 ,p_commit => FND_API.G_FALSE
1063 ,p_party_site_id => p_party_site_id
1064 ,p_partner_party_id => p_partner_party_id
1065 ,p_currency_code => p_currency_code
1066 ,p_contact_party_id => p_contact_party_id
1067 ,p_partner_account_id => p_partner_account_id
1068 ,p_order_tbl => l_order_tbl
1069 ,x_order_header_id => l_order_header_id_tbl
1070 ,x_return_status => x_return_status
1071 ,x_msg_count => x_msg_count
1072 ,x_msg_data => x_msg_data
1073 );
1074
1075 x_order_header_id := l_order_header_id_tbl(l_order_header_id_tbl.FIRST);
1076
1077 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1078 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1079 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
1080 RAISE FND_API.G_EXC_ERROR;
1081 END IF;
1082
1083 l_invite_headers_rec.invite_header_id := p_invite_header_id;
1084 l_invite_headers_rec.order_header_id := x_order_header_id;
1085 l_invite_headers_rec.object_version_number := 1;
1086
1087 PV_PG_INVITE_HEADERS_PVT.update_invite_headers
1088 (
1089 p_api_version_number => p_api_version_number,
1090 p_init_msg_list => Fnd_Api.G_FALSE,
1091 p_commit => Fnd_Api.G_FALSE,
1092 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
1093 x_return_status => x_return_status,
1094 x_msg_count => x_msg_count,
1095 x_msg_data => x_msg_data,
1096 p_invite_headers_rec => l_invite_headers_rec
1097 );
1098
1099 IF x_return_status = FND_API.g_ret_sts_error THEN
1100 RAISE FND_API.g_exc_error;
1101 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1102 RAISE FND_API.g_exc_unexpected_error;
1103 END IF;
1104
1105 END IF;
1106
1107 FND_MSG_PUB.Count_And_Get
1108 ( p_encoded => FND_API.G_FALSE,
1109 p_count => x_msg_count,
1110 p_data => x_msg_data
1111 );
1112
1113 IF FND_API.to_Boolean( p_commit ) THEN
1114 COMMIT WORK;
1115 END IF;
1116
1117
1118 EXCEPTION
1119 WHEN FND_API.G_EXC_ERROR THEN
1120 ROLLBACK TO PRGM_PROCESS_ORDER;
1121 x_return_status := FND_API.G_RET_STS_ERROR;
1122 FND_MSG_PUB.Count_And_Get (
1123 p_encoded => FND_API.G_FALSE
1124 ,p_count => x_msg_count
1125 ,p_data => x_msg_data
1126 );
1127
1128
1129 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1130 ROLLBACK TO PRGM_PROCESS_ORDER;
1131 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1132 -- Standard call to get message count and if count=1, get the message
1133 FND_MSG_PUB.Count_And_Get (
1134 p_encoded => FND_API.G_FALSE
1135 ,p_count => x_msg_count
1136 ,p_data => x_msg_data
1137 );
1138
1139 WHEN OTHERS THEN
1140 ROLLBACK TO PRGM_PROCESS_ORDER;
1141 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1142 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1143 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1144 END IF;
1145 FND_MSG_PUB.Count_And_Get (
1146 p_encoded => FND_API.G_FALSE
1147 ,p_count => x_msg_count
1148 ,p_data => x_msg_data
1149 );
1150
1151 END process_order;
1152
1153
1154
1155
1156
1157
1158 PROCEDURE book_order(
1159 p_api_version_number IN NUMBER
1160 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
1161 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1162 ,p_order_header_id IN NUMBER
1163 ,x_return_status OUT NOCOPY VARCHAR2
1164 ,x_msg_count OUT NOCOPY NUMBER
1165 ,x_msg_data OUT NOCOPY VARCHAR2
1166 )
1167 IS
1168
1169 l_api_version_number CONSTANT NUMBER := 1.0;
1170 l_api_name CONSTANT VARCHAR2(30) := 'Book_order';
1171 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1172 l_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
1173
1174
1175 x_header_rec OE_ORDER_PUB.Header_Rec_Type;
1176 x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type;
1177 x_Header_Adj_tbl OE_ORDER_PUB. Header_Adj_Tbl_Type;
1178 x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type;
1179 x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type;
1180 x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type;
1181 x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type;
1182 x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;
1183 x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type;
1184 x_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
1185 x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type;
1186 x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type;
1187 x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type;
1188 x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type;
1189 x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type;
1190 x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type;
1191 x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;
1192 x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type;
1193 x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type;
1194 x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type;
1195 x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
1196
1197
1198 BEGIN
1199
1200
1201 ---------------Initialize --------------------
1202 -- Standard Start of API savepoint
1203 SAVEPOINT BOOK_ORDER;
1204
1205 -- Initialize message list if p_init_msg_list is set to TRUE.
1206 IF FND_API.to_Boolean( p_init_msg_list )
1207 THEN
1208 FND_MSG_PUB.initialize;
1209 END IF;
1210
1211 -- Standard call to check for call compatibility.
1212 IF NOT FND_API.Compatible_API_Call (
1213 l_api_version_number
1214 ,p_api_version_number
1215 ,l_api_name
1216 ,G_PKG_NAME
1217 )
1218 THEN
1219 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1220 END IF;
1221
1222 -- Debug Message
1223 IF (PV_DEBUG_HIGH_ON) THEN
1224
1225 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - start');
1226 END IF;
1227
1228
1229 -- Initialize API return status to SUCCESS
1230 x_return_status := FND_API.G_RET_STS_SUCCESS;
1231 -------------End Of Initialize -------------------------------
1232
1233 IF FND_GLOBAL.User_Id IS NULL THEN
1234 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
1235 FND_MSG_PUB.add;
1236 RAISE FND_API.G_EXC_ERROR;
1237 END IF;
1238
1239 IF p_order_header_id IS NULL or p_order_header_id = FND_API.g_miss_num then
1240 FND_MESSAGE.set_name('PV', 'PV_API_NO_ORDER_HEADER_ID');
1241 FND_MSG_PUB.add;
1242 RAISE FND_API.G_EXC_ERROR;
1243 END IF;
1244
1245 Order_Debug_On;
1246
1247 set_mo_policy_context (p_order_header_id);
1248
1249 l_action_request_tbl(1) := oe_order_pub.G_MISS_REQUEST_REC;
1250 l_action_request_tbl(1).Entity_code := OE_GLOBALS.G_ENTITY_HEADER;
1251 l_action_request_tbl(1).Entity_id := p_order_header_id;
1252 l_action_request_tbl(1).request_type := OE_GLOBALS.G_BOOK_ORDER;
1253
1254 OE_ORDER_GRP.process_order(
1255 p_api_version_number => l_api_version_number,
1256 p_init_msg_list => FND_API.g_false ,
1257 p_return_values => FND_API.g_true ,
1258 p_commit => FND_API.g_false ,
1259 x_return_status => x_return_status,
1260 x_msg_count => x_msg_count,
1261 x_msg_data => x_msg_data,
1262 p_action_request_tbl => l_action_request_tbl,
1263 x_header_rec => x_header_rec,
1264 x_header_val_rec => x_header_val_rec,
1265 x_Header_Adj_tbl => x_Header_Adj_tbl ,
1266 x_Header_Adj_val_tbl => x_Header_Adj_val_tbl,
1267 x_Header_price_Att_tbl => x_Header_price_Att_tbl,
1268 x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl,
1269 x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl,
1270 x_Header_Scredit_tbl => x_Header_Scredit_tbl,
1271 x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl,
1272 x_line_tbl => x_line_tbl,
1273 x_line_val_tbl => x_line_val_tbl ,
1274 x_Line_Adj_tbl => x_Line_Adj_tbl,
1275 x_Line_Adj_val_tbl => x_Line_Adj_val_tbl,
1276 x_Line_price_Att_tbl => x_Line_price_Att_tbl,
1277 x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl ,
1278 x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl,
1279 x_Line_Scredit_tbl => x_Line_Scredit_tbl,
1280 x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl,
1281 x_Lot_Serial_tbl => x_Lot_Serial_tbl ,
1282 x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl,
1283 x_action_request_tbl =>x_action_request_tbl
1284 );
1285
1286 IF (PV_DEBUG_HIGH_ON) THEN
1287 PVX_UTILITY_PVT.debug_message('process_order :: x_return_status : ' || x_return_status);
1288 PVX_UTILITY_PVT.debug_message('process_order :: x_msg_data : ' || x_msg_data);
1289 PVX_UTILITY_PVT.debug_message('process_order :: x_msg_count : ' || x_msg_count);
1290 PVX_UTILITY_PVT.debug_message('process_order :: x_action_request_tbl.COUNT : ' || x_action_request_tbl.COUNT);
1291 END IF;
1292
1293 Retrieve_OE_Messages;
1294
1295 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1296 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1297 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
1298 RAISE FND_API.G_EXC_ERROR;
1299 ELSIF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1300 FOR i in 1..x_action_request_tbl.COUNT LOOP
1301 PVX_UTILITY_PVT.debug_message('process_order :: x_action_request_tbl(i).return_status : ' || x_action_request_tbl(i).return_status);
1302 IF x_action_request_tbl(i).return_status = FND_API.G_RET_STS_ERROR THEN
1303 PVX_UTILITY_PVT.debug_message('x_action_request_tbl.return_status is ' || x_action_request_tbl(i).return_status);
1304 RAISE FND_API.g_exc_error;
1305 ELSIF x_action_request_tbl(i).return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1306 PVX_UTILITY_PVT.debug_message('x_action_request_tbl.return_status is ' || x_action_request_tbl(i).return_status);
1307 RAISE FND_API.g_exc_error;
1308 END IF;
1309 END LOOP;
1310 END IF;
1311
1312 FND_MSG_PUB.Count_And_Get
1313 ( p_encoded => FND_API.G_FALSE ,
1314 p_count => x_msg_count,
1315 p_data => x_msg_data
1316 );
1317
1318 IF FND_API.to_Boolean( p_commit ) THEN
1319 COMMIT WORK;
1320 END IF;
1321
1322
1323 EXCEPTION
1324 WHEN FND_API.G_EXC_ERROR THEN
1325 ROLLBACK TO BOOK_ORDER;
1326 x_return_status := FND_API.G_RET_STS_ERROR;
1327 FND_MSG_PUB.Count_And_Get (
1328 p_encoded => FND_API.G_FALSE
1329 ,p_count => x_msg_count
1330 ,p_data => x_msg_data
1331 );
1332
1333
1334 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1335 ROLLBACK TO BOOK_ORDER;
1336 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1337 -- Standard call to get message count and if count=1, get the message
1338 FND_MSG_PUB.Count_And_Get (
1339 p_encoded => FND_API.G_FALSE
1340 ,p_count => x_msg_count
1341 ,p_data => x_msg_data
1342 );
1343
1344 WHEN OTHERS THEN
1345 ROLLBACK TO BOOK_ORDER;
1346 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1347 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1348 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1349 END IF;
1350 FND_MSG_PUB.Count_And_Get (
1351 p_encoded => FND_API.G_FALSE
1352 ,p_count => x_msg_count
1353 ,p_data => x_msg_data
1354 );
1355
1356 End book_order;
1357
1358
1359 PROCEDURE cancel_order(
1360 p_api_version_number IN NUMBER
1361 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
1362 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1363 ,p_order_header_id IN NUMBER
1364 ,p_set_moac_context IN VARCHAR2 := 'Y'
1365 ,x_return_status OUT NOCOPY VARCHAR2
1366 ,x_msg_count OUT NOCOPY NUMBER
1367 ,x_msg_data OUT NOCOPY VARCHAR2
1368 )
1369 IS
1370 l_api_version_number CONSTANT NUMBER := 1.0;
1371 l_api_name CONSTANT VARCHAR2(30) := 'Cancel_order';
1372 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1373 l_header_rec OE_ORDER_PUB.Header_Rec_Type;
1374 --kvattiku: Aug 08, 05 NOCOPY bug related change
1375 l_header_out_rec OE_ORDER_PUB.Header_Rec_Type;
1376 l_change_reason VARCHAR2(30);
1377
1378 x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type;
1379 x_Header_Adj_tbl OE_ORDER_PUB. Header_Adj_Tbl_Type;
1380 x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type;
1381 x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type;
1382 x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type;
1383 x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type;
1384 x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;
1385 x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type;
1386 x_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
1387 x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type;
1388 x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type;
1389 x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type;
1390 x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type;
1391 x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type;
1392 x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type;
1393 x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;
1394 x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type;
1395 x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type;
1396 x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type;
1397 x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
1398
1399
1400
1401 BEGIN
1402
1403
1404 ---------------Initialize --------------------
1405 -- Standard Start of API savepoint
1406 SAVEPOINT cancel_ORDER;
1407
1408 -- Initialize message list if p_init_msg_list is set to TRUE.
1409 IF FND_API.to_Boolean( p_init_msg_list )
1410 THEN
1411 FND_MSG_PUB.initialize;
1412 END IF;
1413
1414 -- Standard call to check for call compatibility.
1415 IF NOT FND_API.Compatible_API_Call (
1416 l_api_version_number
1417 ,p_api_version_number
1418 ,l_api_name
1419 ,G_PKG_NAME
1420 )
1421 THEN
1422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1423 END IF;
1424
1425 -- Debug Message
1426 IF (PV_DEBUG_HIGH_ON) THEN
1427
1428 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - start');
1429 END IF;
1430
1431
1432 -- Initialize API return status to SUCCESS
1433 x_return_status := FND_API.G_RET_STS_SUCCESS;
1434 -------------End Of Initialize -------------------------------
1435
1436 IF FND_GLOBAL.User_Id IS NULL THEN
1437 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
1438 FND_MSG_PUB.add;
1439 RAISE FND_API.G_EXC_ERROR;
1440 END IF;
1441
1442 IF p_order_header_id IS NULL or p_order_header_id = FND_API.g_miss_num then
1443 FND_MESSAGE.set_name('PV', 'PV_API_NO_ORDER_HEADER_ID');
1444 FND_MSG_PUB.add;
1445 RAISE FND_API.G_EXC_ERROR;
1446 END IF;
1447
1448 l_change_reason := FND_PROFILE.Value('PV_ORDER_CANCEL_REASON');
1449 IF l_change_reason is null then
1450 x_return_status := FND_API.G_RET_STS_ERROR;
1451 FND_MESSAGE.Set_Name('PV', 'PV_NO_ORDER_CANCEL_REASON');
1452 FND_MSG_PUB.ADD;
1453 RAISE FND_API.G_EXC_ERROR;
1454 END IF;
1455
1456
1457 Order_Debug_On;
1458
1459 set_mo_policy_context (p_order_header_id);
1460
1461 l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
1462 l_header_rec.operation := OE_GLOBALS.G_OPR_UPDATE;
1463 l_header_rec.header_id := p_order_header_id;
1464 l_header_rec.cancelled_flag := 'Y';
1465 l_header_rec.change_reason := l_change_reason;
1466
1467 --kvattiku: Aug 08, 05 NOCOPY bug related change
1468 /*l_header_out_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
1469 l_header_out_rec.operation := OE_GLOBALS.G_OPR_UPDATE;
1470 l_header_out_rec.header_id := p_order_header_id;
1471 l_header_out_rec.cancelled_flag := 'Y';
1472 l_header_out_rec.change_reason := l_change_reason;*/
1473
1474 --kvattiku: Aug 08, 05 NOCOPY bug related change
1475 OE_ORDER_GRP.process_order(
1476 p_api_version_number => l_api_version_number,
1477 p_init_msg_list => FND_API.g_false ,
1478 p_return_values => FND_API.g_true ,
1479 p_commit => FND_API.g_false ,
1480 x_return_status => x_return_status,
1481 x_msg_count => x_msg_count,
1482 x_msg_data => x_msg_data,
1483 p_header_rec => l_header_rec,
1484 x_header_rec => l_header_out_rec,
1485 x_header_val_rec => x_header_Val_Rec,
1486 x_Header_Adj_tbl => x_Header_Adj_tbl ,
1487 x_Header_Adj_val_tbl => x_Header_Adj_val_tbl,
1488 x_Header_price_Att_tbl => x_Header_price_Att_tbl,
1489 x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl,
1490 x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl,
1491 x_Header_Scredit_tbl => x_Header_Scredit_tbl,
1492 x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl,
1493 x_line_tbl => x_line_tbl,
1494 x_line_val_tbl => x_line_val_tbl ,
1495 x_Line_Adj_tbl => x_Line_Adj_tbl,
1496 x_Line_Adj_val_tbl => x_Line_Adj_val_tbl,
1497 x_Line_price_Att_tbl => x_Line_price_Att_tbl,
1498 x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl ,
1499 x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl,
1500 x_Line_Scredit_tbl => x_Line_Scredit_tbl,
1501 x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl,
1502 x_Lot_Serial_tbl => x_Lot_Serial_tbl ,
1503 x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl,
1504 x_action_request_tbl =>x_action_request_tbl
1505 );
1506
1507 IF (PV_DEBUG_HIGH_ON) THEN
1508 PVX_UTILITY_PVT.debug_message('process_order :: x_return_status : ' || x_return_status);
1509 PVX_UTILITY_PVT.debug_message('process_order :: x_msg_data : ' || x_msg_data);
1510 PVX_UTILITY_PVT.debug_message('process_order :: x_msg_count : ' || x_msg_count);
1511 END IF;
1512
1513 Retrieve_OE_Messages;
1514
1515 IF x_return_status = FND_API.g_ret_sts_error THEN
1516 RAISE FND_API.g_exc_error;
1517 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1518 RAISE FND_API.g_exc_unexpected_error;
1519 END IF;
1520
1521
1522 FND_MSG_PUB.Count_And_Get
1523 ( p_encoded => FND_API.G_FALSE,
1524 p_count => x_msg_count,
1525 p_data => x_msg_data
1526 );
1527
1528 IF FND_API.to_Boolean( p_commit ) THEN
1529 COMMIT WORK;
1530 END IF;
1531
1532
1533 EXCEPTION
1534 WHEN FND_API.G_EXC_ERROR THEN
1535 ROLLBACK TO cancel_ORDER;
1536 x_return_status := FND_API.G_RET_STS_ERROR;
1537 FND_MSG_PUB.Count_And_Get (
1538 p_encoded => FND_API.G_FALSE
1539 ,p_count => x_msg_count
1540 ,p_data => x_msg_data
1541 );
1542
1543
1544 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1545 ROLLBACK TO cancel_ORDER;
1546 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1547 -- Standard call to get message count and if count=1, get the message
1548 FND_MSG_PUB.Count_And_Get (
1549 p_encoded => FND_API.G_FALSE
1550 ,p_count => x_msg_count
1551 ,p_data => x_msg_data
1552 );
1553
1554 WHEN OTHERS THEN
1555 ROLLBACK TO cancel_ORDER;
1556 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1557 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1558 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1559 END IF;
1560 FND_MSG_PUB.Count_And_Get (
1561 p_encoded => FND_API.G_FALSE
1562 ,p_count => x_msg_count
1563 ,p_data => x_msg_data
1564 );
1565 End cancel_order;
1566
1567
1568
1569 PROCEDURE cancel_order(
1570 p_api_version_number IN NUMBER
1571 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
1572 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1573 ,p_enrl_req_id IN JTF_NUMBER_TABLE
1574 ,x_return_status OUT NOCOPY VARCHAR2
1575 ,x_msg_count OUT NOCOPY NUMBER
1576 ,x_msg_data OUT NOCOPY VARCHAR2
1577 )
1578 IS
1579 l_api_version_number CONSTANT NUMBER := 1.0;
1580 l_api_name CONSTANT VARCHAR2(30) := 'Cancel_order';
1581 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1582
1583
1584 -- Cursor to get order_header_id
1585 CURSOR c_order_header_id IS
1586 SELECT /*+ CARDINALITY(t 10) */ pver.order_header_id
1587 FROM PV_PG_ENRL_REQUESTS pver,
1588 (Select * from table (CAST(p_enrl_req_id AS JTF_NUMBER_TABLE))) t
1589 WHERE pver.enrl_request_id = t.column_value
1590 and pver.order_header_id is not null
1591 and pver.payment_status_code <> 'AUTHORIZED_PAYMENT';
1592
1593
1594 BEGIN
1595
1596
1597 ---------------Initialize --------------------
1598 -- Standard Start of API savepoint
1599 SAVEPOINT ENRQ_cancel_ORDER;
1600
1601 -- Initialize message list if p_init_msg_list is set to TRUE.
1602 IF FND_API.to_Boolean( p_init_msg_list )
1603 THEN
1604 FND_MSG_PUB.initialize;
1605 END IF;
1606
1607 -- Standard call to check for call compatibility.
1608 IF NOT FND_API.Compatible_API_Call (
1609 l_api_version_number
1610 ,p_api_version_number
1611 ,l_api_name
1612 ,G_PKG_NAME
1613 )
1614 THEN
1615 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1616 END IF;
1617
1618 -- Debug Message
1619 IF (PV_DEBUG_HIGH_ON) THEN
1620
1621 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' - start');
1622 END IF;
1623
1624
1625 -- Initialize API return status to SUCCESS
1626 x_return_status := FND_API.G_RET_STS_SUCCESS;
1627 -------------End Of Initialize -------------------------------
1628 FOR x in c_order_header_id loop
1629 cancel_order
1630 ( p_api_version_number => p_api_version_number
1631 ,p_init_msg_list => FND_API.g_false
1632 ,p_commit => p_commit
1633 ,p_order_header_id => x.order_header_id
1634 ,p_set_moac_context => 'N'
1635 ,x_return_status => x_return_status
1636 ,x_msg_count => x_msg_count
1637 ,x_msg_data => x_msg_data
1638 );
1639
1640 IF x_return_status = FND_API.g_ret_sts_error THEN
1641 RAISE FND_API.g_exc_error;
1642 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1643 RAISE FND_API.g_exc_unexpected_error;
1644 END IF;
1645
1646 END LOOP;
1647
1648 FND_MSG_PUB.Count_And_Get
1649 ( p_encoded => FND_API.G_FALSE,
1650 p_count => x_msg_count,
1651 p_data => x_msg_data
1652 );
1653
1654 IF FND_API.to_Boolean( p_commit ) THEN
1655 COMMIT WORK;
1656 END IF;
1657
1658
1659 EXCEPTION
1660 WHEN FND_API.G_EXC_ERROR THEN
1661 ROLLBACK TO ENRQ_cancel_ORDER;
1662 x_return_status := FND_API.G_RET_STS_ERROR;
1663 FND_MSG_PUB.Count_And_Get (
1664 p_encoded => FND_API.G_FALSE
1665 ,p_count => x_msg_count
1666 ,p_data => x_msg_data
1667 );
1668
1669
1670 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1671 ROLLBACK TO ENRQ_cancel_ORDER;
1672 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1673 -- Standard call to get message count and if count=1, get the message
1674 FND_MSG_PUB.Count_And_Get (
1675 p_encoded => FND_API.G_FALSE
1676 ,p_count => x_msg_count
1677 ,p_data => x_msg_data
1678 );
1679
1680 WHEN OTHERS THEN
1681 ROLLBACK TO ENRQ_cancel_ORDER;
1682 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1683 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1684 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1685 END IF;
1686 FND_MSG_PUB.Count_And_Get (
1687 p_encoded => FND_API.G_FALSE
1688 ,p_count => x_msg_count
1689 ,p_data => x_msg_data
1690 );
1691 End cancel_order;
1692
1693 /* R12 Changes
1694 * New function that will return 'Y' or 'N' for whether
1695 * certain credit card attributes are required
1696 * If p_attribute = CVV2, then it will look at CVV2 code
1697 * if p_attribute = STMT, then it will look at card statement address
1698 */
1699 FUNCTION get_cc_requirements(
1700 p_attribute IN VARCHAR2
1701 ) RETURN VARCHAR2 IS
1702 l_return_status VARCHAR2(100);
1703 l_msg_count NUMBER;
1704 l_msg_data VARCHAR2(200);
1705 l_payment_attribs IBY_FNDCPT_SETUP_PUB.PmtChannel_AttribUses_rec_type;
1706 l_response IBY_FNDCPT_COMMON_PUB.Result_rec_type;
1707 BEGIN
1708
1709 IF ((p_attribute <> 'CVV2') and (p_attribute <> 'STMT')) THEN
1710 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1711 END IF;
1712
1713 IBY_FNDCPT_SETUP_PUB.get_payment_channel_attribs
1714 (
1715 p_api_version => 1.0,
1716 p_init_msg_list => FND_API.G_FALSE,
1717 x_return_status => l_return_status,
1718 x_msg_count => l_msg_count,
1719 x_msg_data => l_msg_data,
1720 p_channel_code => 'CREDIT_CARD',
1721 x_channel_attrib_uses => l_payment_attribs,
1722 x_response => l_response
1723 );
1724 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1725 IF (l_response.result_code = 'INVALID_PMT_CHANNEL') THEN
1726 RAISE FND_API.G_EXC_ERROR;
1727 ELSE
1728 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1729 END IF;
1730 END IF;
1731
1732 IF (p_attribute = 'CVV2') THEN
1733 IF (l_payment_attribs.Instr_SecCode_Use = 'REQUIRED') THEN
1734 RETURN 'Y';
1735 ELSE
1736 RETURN 'N';
1737 END IF;
1738 ELSIF (p_attribute = 'STMT') THEN
1739 IF (l_payment_attribs.Instr_Billing_Address = 'REQUIRED') THEN
1740 RETURN 'Y';
1741 ELSE
1742 RETURN 'N';
1743 END IF;
1744 END IF;
1745 END get_cc_requirements;
1746
1747 FUNCTION get_party_site_id(
1748 p_contact_party_id IN NUMBER
1749 ,p_location_id IN NUMBER
1750 ) RETURN NUMBER
1751 IS
1752
1753 x_party_site_id NUMBER;
1754
1755 BEGIN
1756
1757 select party_site_id
1758 into x_party_site_id
1759 from hz_party_sites
1760 where party_id = p_contact_party_id
1761 and location_id = p_location_id
1762 and status = 'A';
1763
1764 return x_party_site_id;
1765
1766 EXCEPTION
1767 WHEN NO_DATA_FOUND THEN
1768 return null;
1769
1770 END get_party_site_id;
1771
1772
1773 PROCEDURE set_payment_info(
1774 p_api_version_number IN NUMBER
1775 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
1776 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1777 ,p_contact_party_id IN NUMBER
1778 ,p_payment_method_rec IN Payment_method_Rec_type
1779 ,p_order_header_id IN Payment_info_Tbl_type
1780 ,p_enrollment_flow IN VARCHAR2
1781 ,x_return_status OUT NOCOPY VARCHAR2
1782 ,x_msg_count OUT NOCOPY NUMBER
1783 ,x_msg_data OUT NOCOPY VARCHAR2
1784 ,x_is_authorized OUT NOCOPY VARCHAR2
1785 ,x_enrl_info OUT NOCOPY Payment_info_Tbl_type
1786 )
1787 IS
1788 l_api_version_number CONSTANT NUMBER := 1.0;
1789 l_api_name CONSTANT VARCHAR2(30) := 'set_payment_info';
1790 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1791
1792 --dgottlie: Process new credit card and create transaction extension variables
1793 l_party_type VARCHAR2(30);
1794 l_location_id NUMBER;
1795 l_party_site_rec HZ_PARTY_SITE_V2PUB.Party_Site_Rec_Type;
1796 l_party_site_use_rec HZ_PARTY_SITE_V2PUB.Party_Site_Use_Rec_Type;
1797 l_party_site_id NUMBER;
1798 l_party_site_number NUMBER;
1799 l_count NUMBER;
1800 l_cc_exp_date DATE;
1801 l_skip_auth VARCHAR2(1);
1802 lx_response IBY_FNDCPT_COMMON_PUB.Result_rec_type;
1803 l_payer IBY_FNDCPT_COMMON_PUB.PayerContext_rec_type;
1804 l_payee IBY_FNDCPT_TRXN_PUB.PayeeContext_rec_type;
1805 l_trxn_attribs IBY_FNDCPT_TRXN_PUB.trxnExtension_rec_type;
1806 l_amount IBY_FNDCPT_TRXN_PUB.amount_rec_type;
1807 l_auth_attribs IBY_FNDCPT_TRXN_PUB.authattribs_rec_type;
1808 l_auth_result IBY_FNDCPT_TRXN_PUB.authresult_rec_type;
1809 l_payment_attribs IBY_FNDCPT_SETUP_PUB.PmtChannel_AttribUses_rec_type;
1810 l_card_instrument IBY_FNDCPT_SETUP_PUB.CreditCard_Rec_type;
1811 l_PmtInstrument IBY_FNDCPT_SETUP_PUB.PmtInstrument_rec_type;
1812 l_assignment_attr IBY_FNDCPT_SETUP_PUB.PmtInstrAssignment_rec_type;
1813 lx_instr_assign_id NUMBER;
1814 lx_trxn_extension_id NUMBER;
1815 l_is_authorized VARCHAR2(1);
1816
1817 l_order_header_id_tbl JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
1818
1819 cursor c_get_payment_amount(cv_order_header_id_tbl JTF_NUMBER_TABLE) IS
1820 SELECT /*+ cardinality( T 10 ) */ ((oeol.unit_selling_price*oeol.ordered_quantity)+nvl(oeol.tax_value,0)) payment_amount, oeoh.transactional_curr_code currency,
1821 oeoh.header_id
1822 FROM oe_order_headers_all oeoh, oe_order_Lines_all oeol,
1823 (SELECT * FROM TABLE (CAST(cv_order_header_id_tbl AS JTF_NUMBER_TABLE))) T
1824 WHERE oeoh.header_id = T.column_value
1825 AND oeoh.header_id = oeol.header_id;
1826
1827 BEGIN
1828
1829
1830 ---------------Initialize --------------------
1831 -- Initialize message list if p_init_msg_list is set to TRUE.
1832 IF FND_API.to_Boolean( p_init_msg_list )
1833 THEN
1834 FND_MSG_PUB.initialize;
1835 END IF;
1836
1837 -- Standard call to check for call compatibility.
1838 IF NOT FND_API.Compatible_API_Call (
1839 l_api_version_number
1840 ,p_api_version_number
1841 ,l_api_name
1842 ,G_PKG_NAME
1843 )
1844 THEN
1845 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1846 END IF;
1847
1848 -- Debug Message
1849 IF (PV_DEBUG_HIGH_ON) THEN
1850
1851 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
1852 END IF;
1853
1854
1855 -- Initialize API return status to SUCCESS
1856 x_return_status := FND_API.G_RET_STS_SUCCESS;
1857 -- Initialize local authorization to successful as well as authorization and skip to No
1858 l_is_authorized := 'Y';
1859 x_is_authorized := 'N';
1860 l_skip_auth := 'N';
1861 -------------End Of Initialize -------------------------------
1862
1863
1864
1865 IF FND_GLOBAL.User_Id IS NULL THEN
1866 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
1867 FND_MSG_PUB.add;
1868 RAISE FND_API.G_EXC_ERROR;
1869 END IF;
1870
1871 IF p_order_header_id.count() = 0 THEN
1872 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
1873 FND_MESSAGE.Set_Token('ID', 'Order Details', FALSE);
1874 fnd_msg_pub.ADD;
1875 raise FND_API.G_EXC_ERROR;
1876 END IF;
1877
1878 for i in p_order_header_id.FIRST..p_order_header_id.LAST loop
1879 IF (p_order_header_id(i).order_header_id IS NULL or p_order_header_id(i).order_header_id = FND_API.G_MISS_NUM) THEN
1880 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
1881 FND_MESSAGE.Set_Token('ID', 'Order Details', FALSE);
1882 FND_MSG_PUB.add;
1883 RAISE FND_API.G_EXC_ERROR;
1884 END IF;
1885 l_order_header_id_tbl.extend;
1886 l_order_header_id_tbl(l_order_header_id_tbl.count) := p_order_header_id(i).order_header_id;
1887 --dgottlie: set local collection of enrollment info to deal with trxn extension ids
1888 -- the loop variable i is really the order header id used to populate the record
1889 x_enrl_info(i).order_header_id := p_order_header_id(i).order_header_id;
1890 IF (p_enrollment_flow = 'Y') THEN
1891 x_enrl_info(i).enrl_req_id := p_order_header_id(i).enrl_req_id;
1892 ELSE
1893 x_enrl_info(i).invite_header_id := p_order_header_id(i).invite_header_id;
1894 END IF;
1895 x_enrl_info(i).trxn_extension_id := p_order_header_id(i).trxn_extension_id;
1896 x_enrl_info(i).object_version_number := p_order_header_id(i).object_version_number;
1897 END LOOP;
1898
1899
1900 IF (p_payment_method_rec.payment_type_code = FND_API.G_MISS_CHAR or p_payment_method_rec.payment_type_code IS NULL) THEN
1901 FND_MESSAGE.set_name('PV', 'PV_API_NO_PAYMENT_TYPE');
1902 FND_MSG_PUB.add;
1903 RAISE FND_API.G_EXC_ERROR;
1904 END IF;
1905
1906 IF (PV_DEBUG_HIGH_ON) THEN
1907 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Payment Type : ' || p_payment_method_rec.payment_type_code );
1908 END IF;
1909
1910
1911
1912
1913 IF (p_payment_method_rec.payment_type_code = 'CHECK') THEN
1914 IF (p_payment_method_rec.check_number = FND_API.G_MISS_CHAR or p_payment_method_rec.check_number IS NULL) THEN
1915 FND_MESSAGE.set_name('PV', 'PV_API_NO_CHECK_NUMBER');
1916 FND_MSG_PUB.add;
1917 RAISE FND_API.G_EXC_ERROR;
1918 END IF;
1919
1920 ELSIF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
1921 /* R12 Changes
1922 * Adding check to see if statement address and security code are supplied if they are required
1923 * Only running validations for everything except security code if the inst_assignment_id is null
1924 * meaning we're dealing with a new credit card
1925 * Adding code to process new credit cards
1926 */
1927 IBY_FNDCPT_SETUP_PUB.get_payment_channel_attribs
1928 (
1929 p_api_version => p_api_version_number,
1930 p_init_msg_list => FND_API.G_FALSE,
1931 x_return_status => x_return_status,
1932 x_msg_count => x_msg_count,
1933 x_msg_data => x_msg_data,
1934 p_channel_code => 'CREDIT_CARD',
1935 x_channel_attrib_uses => l_payment_attribs,
1936 x_response => lx_response
1937 );
1938
1939 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1940 IF (lx_response.result_code = 'INVALID_PMT_CHANNEL') THEN
1941 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
1942 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
1943 FND_MSG_PUB.add;
1944 RAISE FND_API.G_EXC_ERROR;
1945 ELSE
1946 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1947 END IF;
1948 END IF;
1949
1950
1951 -- Debug Message
1952 IF (PV_DEBUG_HIGH_ON) THEN
1953 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after call to get_payment_channel_attribs');
1954 END IF;
1955
1956 -- Debug Message
1957 IF (PV_DEBUG_HIGH_ON) THEN
1958 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' CVV2 : ' || l_payment_attribs.Instr_SecCode_Use);
1959 END IF;
1960
1961
1962
1963
1964 IF (l_payment_attribs.Instr_SecCode_Use = 'REQUIRED') THEN
1965 IF (p_payment_method_rec.instrument_security_code = FND_API.G_MISS_NUM or p_payment_method_rec.instrument_security_code IS NULL) THEN
1966 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_CVV2_CODE');
1967 FND_MSG_PUB.add;
1968 RAISE FND_API.G_EXC_ERROR;
1969 END IF;
1970 END IF;
1971
1972 IF (p_enrollment_flow IS NULL or (p_enrollment_flow not in ('Y' , 'N'))) THEN
1973 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
1974 FND_MESSAGE.Set_Token('ID', 'Authorization', FALSE);
1975 FND_MSG_PUB.add;
1976 RAISE FND_API.G_EXC_ERROR;
1977 END IF;
1978
1979 IF (p_payment_method_rec.instr_assignment_id IS NULL) THEN
1980
1981 -- Debug Message
1982 IF (PV_DEBUG_HIGH_ON) THEN
1983 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Entered the instr_assignment_id is NULL block');
1984 END IF;
1985
1986
1987 IF (p_payment_method_rec.credit_card_holder_name = FND_API.G_MISS_CHAR or p_payment_method_rec.credit_card_holder_name IS NULL) THEN
1988 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_HOLDER_NAME');
1989 FND_MSG_PUB.add;
1990 RAISE FND_API.G_EXC_ERROR;
1991 END IF;
1992
1993 IF (p_payment_method_rec.credit_card_number = FND_API.G_MISS_CHAR or p_payment_method_rec.credit_card_number IS NULL) THEN
1994 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_NUMBER');
1995 FND_MSG_PUB.add;
1996 RAISE FND_API.G_EXC_ERROR;
1997 END IF;
1998
1999 IF (p_payment_method_rec.credit_card_code = FND_API.G_MISS_CHAR or p_payment_method_rec.credit_card_code is null) THEN
2000 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_TYPE');
2001 FND_MSG_PUB.add;
2002 RAISE FND_API.G_EXC_ERROR;
2003 END IF;
2004
2005 /* No Expiration Date in R12, instead it is passed as month and year and the date is then derived */
2006 IF (p_payment_method_rec.credit_card_exp_month = FND_API.G_MISS_NUM or p_payment_method_rec.credit_card_exp_month IS NULL) THEN
2007 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_EXP_DATE');
2008 FND_MESSAGE.set_token('DPART', 'month');
2009 FND_MSG_PUB.add;
2010 RAISE FND_API.G_EXC_ERROR;
2011 END IF;
2012
2013 IF (p_payment_method_rec.credit_card_exp_year = FND_API.G_MISS_NUM or p_payment_method_rec.credit_card_exp_year IS NULL) THEN
2014 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_EXP_DATE');
2015 FND_MESSAGE.set_token('DPART', 'year');
2016 FND_MSG_PUB.add;
2017 RAISE FND_API.G_EXC_ERROR;
2018 END IF;
2019
2020 --kvattiku Aug 14, 05
2021 -- Debug Message
2022 IF (PV_DEBUG_HIGH_ON) THEN
2023 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Billing Address : ' || l_payment_attribs.Instr_Billing_Address);
2024 END IF;
2025
2026 IF (l_payment_attribs.Instr_Billing_Address = 'REQUIRED') THEN
2027 IF (p_payment_method_rec.cc_stmt_party_site_id = FND_API.G_MISS_NUM or p_payment_method_rec.cc_stmt_party_site_id IS NULL) THEN
2028 FND_MESSAGE.set_name('PV', 'PV_API_NO_CC_STMT_ADDR');
2029 FND_MSG_PUB.add;
2030 RAISE FND_API.G_EXC_ERROR;
2031 END IF;
2032
2033 IF (PV_DEBUG_HIGH_ON) THEN
2034 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' party site id = ' || p_payment_method_rec.cc_stmt_party_site_id);
2035 END IF;
2036
2037 select hzp.party_type,
2038 hzs.location_id
2039 into l_party_type,
2040 l_location_id
2041 from hz_parties hzp,
2042 hz_party_sites hzs
2043 where hzs.party_site_id = p_payment_method_rec.cc_stmt_party_site_id
2044 and hzp.party_id = hzs.party_id;
2045
2046 IF (PV_DEBUG_HIGH_ON) THEN
2047 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' contact party id = ' || p_contact_party_id);
2048 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' party type = ' || l_party_type);
2049 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' location id = ' || l_location_id);
2050 END IF;
2051
2052 IF (l_party_type = 'ORGANIZATION') THEN
2053
2054 l_party_site_id := get_party_site_id(
2055 p_contact_party_id => p_contact_party_id,
2056 p_location_id => l_location_id
2057 );
2058
2059 IF (PV_DEBUG_HIGH_ON) THEN
2060 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Contact''s party site id = ' || l_party_site_id);
2061 END IF;
2062
2063 IF (l_party_site_id IS NULL) THEN
2064 l_party_site_rec.party_id := p_contact_party_id;
2065 l_party_site_rec.location_id := l_location_id;
2066 l_party_site_rec.identifying_address_flag := 'N';
2067 l_party_site_rec.created_by_module := 'PV';
2068
2069 IF (PV_DEBUG_HIGH_ON) THEN
2070 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Before HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_rec.party_id = ' ||
2071 p_contact_party_id);
2072 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Before HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_rec.location_id = ' ||
2073 l_location_id);
2074 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Before HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_rec.identifying_address_flag = ' ||
2075 'N');
2076 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Before HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_rec.created_by_module = ' ||
2077 'PV');
2078 END IF;
2079
2080 HZ_PARTY_SITE_V2PUB.create_party_site (
2081 p_init_msg_list => FND_API.G_FALSE,
2082 p_party_site_rec => l_party_site_rec,
2083 x_party_site_id => l_party_site_id,
2084 x_party_site_number => l_party_site_number,
2085 x_return_status => x_return_status,
2086 x_msg_count => x_msg_count,
2087 x_msg_data => x_msg_data );
2088 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
2089 RAISE FND_API.G_EXC_ERROR;
2090 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2091 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2092 END IF;
2093
2094 IF (PV_DEBUG_HIGH_ON) THEN
2095 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' After HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_id = ' || l_party_site_id);
2096 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' After HZ_PARTY_SITE_V2PUB.create_party_site l_party_site_number = ' || l_party_site_number);
2097 END IF;
2098
2099 END IF;
2100 ELSE
2101 l_party_site_id := p_payment_method_rec.cc_stmt_party_site_id;
2102 END IF;
2103 ELSE
2104 l_party_site_id := null;
2105 END IF;
2106
2107
2108 -- Debug Message
2109 IF (PV_DEBUG_HIGH_ON) THEN
2110 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' l_party_site_id : ' || l_party_site_id);
2111 END IF;
2112
2113
2114 /* Create Card and get Intrument Assignment ID*/
2115 IF (p_payment_method_rec.credit_card_exp_month = 12) THEN
2116 l_cc_exp_date := to_date('01/'||(p_payment_method_rec.credit_card_exp_year+1),'MM/YYYY') - 1;
2117 ELSE
2118 l_cc_exp_date := to_date((p_payment_method_rec.credit_card_exp_month + 1)||'/'||p_payment_method_rec.credit_card_exp_year,'MM/YYYY') - 1;
2119 END IF;
2120 l_card_instrument.card_id := NULL;
2121 l_card_instrument.owner_id := p_contact_party_id;
2122 l_card_instrument.billing_address_id := l_party_site_id;
2123 l_card_instrument.card_number := p_payment_method_rec.credit_card_number;
2124 l_card_instrument.expiration_date := l_cc_exp_date;
2125 l_card_instrument.instrument_type := 'CREDITCARD';
2126 l_card_instrument.card_issuer := p_payment_method_rec.credit_card_code;
2127 l_card_instrument.card_holder_name := p_payment_method_rec.credit_card_holder_name;
2128 l_payer.Payment_Function := 'CUSTOMER_PAYMENT';
2129 l_payer.Party_Id := p_contact_party_id;
2130 l_PmtInstrument.Instrument_Type := 'CREDITCARD';
2131 l_PmtInstrument.Instrument_Id := NULL;
2132 l_assignment_attr.Assignment_Id := NULL;
2133 l_assignment_attr.Instrument := l_PmtInstrument;
2134 l_assignment_attr.Start_Date := sysdate;
2135
2136
2137
2138 -- Debug Message
2139 IF (PV_DEBUG_HIGH_ON) THEN
2140 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the IBY_FNDCPT_SETUP_PUB.process_credit_card call');
2141 END IF;
2142
2143
2144 IBY_FNDCPT_SETUP_PUB.process_credit_card
2145 (
2146 p_api_version => 1.0,
2147 p_init_msg_list => FND_API.G_FALSE,
2148 p_commit => FND_API.G_FALSE,
2149 x_return_status => x_return_status,
2150 x_msg_count => x_msg_count,
2151 x_msg_data => x_msg_data,
2152 p_payer => l_payer,
2153 p_credit_card => l_card_instrument,
2154 p_assignment_attribs => l_assignment_attr,
2155 x_assign_id => lx_instr_assign_id,
2156 x_response => lx_response
2157 );
2158
2159 -- Debug Message
2160 IF (PV_DEBUG_HIGH_ON) THEN
2161 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_return_status from IBY_FNDCPT_SETUP_PUB.process_credit_card call: ' || x_return_status);
2162 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_count from IBY_FNDCPT_SETUP_PUB.process_credit_card call: ' || x_msg_count);
2163 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_data from IBY_FNDCPT_SETUP_PUB.process_credit_card call: ' || x_msg_data);
2164 END IF;
2165
2166
2167
2168 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2169 IF (lx_response.Result_Category = 'INVALID PARAM') THEN
2170 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
2171 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
2172 FND_MSG_PUB.add;
2173 RAISE FND_API.G_EXC_ERROR;
2174 ELSE
2175 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2176 END IF;
2177 END IF;
2178
2179 -- Debug Message
2180 IF (PV_DEBUG_HIGH_ON) THEN
2181 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the IBY_FNDCPT_SETUP_PUB.process_credit_card call');
2182 END IF;
2183
2184 ELSE
2185 lx_instr_assign_id := p_payment_method_rec.instr_assignment_id;
2186 END IF; --inst_assignment_id is null
2187 END IF; -- p_payment_method_rec.payment_type_code = 'CHECK' or 'CREDIT_CARD'
2188
2189 IF (PV_DEBUG_HIGH_ON) THEN
2190 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' lx_instr_assign_id ' || lx_instr_assign_id);
2191 END IF;
2192
2193
2194 FOR x in c_get_payment_amount(l_order_header_id_tbl) loop
2195
2196 -- Debug Message
2197 IF (PV_DEBUG_HIGH_ON) THEN
2198 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' Entered the c_get_payment_amount for loop');
2199 END IF;
2200
2201 x_enrl_info(x.header_id).payment_amount := x.payment_amount;
2202 x_enrl_info(x.header_id).currency := x.currency;
2203
2204 --dgottlie: If the payment is anything but credit card and the transaction extension id exists, then delete the extension
2205 IF ((p_payment_method_rec.payment_type_code <> 'CREDIT_CARD') and (x_enrl_info(x.header_id).trxn_extension_id IS NOT NULL) and
2206 (p_enrollment_flow = 'Y')) THEN
2207 -- Debug Message
2208 IF (PV_DEBUG_HIGH_ON) THEN
2209 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension call');
2210 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' p_contact_party_id ' || p_contact_party_id);
2211 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).trxn_extension_id ' || x_enrl_info(x.header_id).trxn_extension_id);
2212 END IF;
2213
2214 l_payer.party_id := p_contact_party_id;
2215
2216 IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension
2217 (
2218 p_api_version => 1.0,
2219 p_init_msg_list => FND_API.G_FALSE,
2220 p_commit => FND_API.G_FALSE,
2221 x_return_status => x_return_status,
2222 x_msg_count => x_msg_count,
2223 x_msg_data => x_msg_data,
2224 p_payer => l_payer,
2225 p_payer_equivalency => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
2226 p_entity_id => x_enrl_info(x.header_id).trxn_extension_id,
2227 x_response => lx_response
2228 );
2229
2230 IF (PV_DEBUG_HIGH_ON) THEN
2231 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_return_status from IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension : ' || x_return_status);
2232 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_count from IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension : ' || x_msg_count);
2233 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_data from IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension : ' || x_msg_data);
2234 END IF;
2235
2236 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2237 IF ((lx_response.Result_Category = 'INVALID_PARAM') or (lx_response.Result_Category = 'INCORRECT_FLOW')) THEN
2238 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
2239 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
2240 FND_MSG_PUB.add;
2241 RAISE FND_API.G_EXC_ERROR;
2242 ELSE
2243 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2244 END IF;
2245 END IF;
2246
2247 x_enrl_info(x.header_id).trxn_extension_id := null;
2248
2249 -- Debug Message
2250 IF (PV_DEBUG_HIGH_ON) THEN
2251 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the IBY_FNDCPT_TRXN_PUB.Delete_Transaction_Extension call');
2252 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).trxn_extension_id ' || x_enrl_info(x.header_id).trxn_extension_id);
2253 END IF;
2254
2255 ELSIF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
2256
2257 /* R12 Changes
2258 * Creating or Updating transaction extension id
2259 * First step is to test if the transaction extension id exists
2260 * If not, go ahead and create one, otherwise just update it
2261 */
2262
2263 -- Debug Message
2264 IF (PV_DEBUG_HIGH_ON) THEN
2265 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the IF (x_enrl_info(x.header_id).trxn_extension_id IS NULL)');
2266 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id.trxn_extension_id ' || x_enrl_info(x.header_id).trxn_extension_id);
2267 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).order_header_id ' || x_enrl_info(x.header_id).order_header_id);
2268 IF (p_enrollment_flow = 'Y') THEN
2269 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).enrl_req_id ' || x_enrl_info(x.header_id).enrl_req_id);
2270 ELSE
2271 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).invite_header_id ' || x_enrl_info(x.header_id).invite_header_id);
2272 END IF;
2273 END IF;
2274
2275 l_trxn_attribs.instrument_security_code := p_payment_method_rec.instrument_security_code;
2276 l_trxn_attribs.originating_application_id := 691;
2277 IF (p_enrollment_flow = 'Y') THEN
2278 l_trxn_attribs.order_id := x_enrl_info(x.header_id).enrl_req_id; --wait for geetha
2279 ELSE
2280 l_trxn_attribs.order_id := x_enrl_info(x.header_id).invite_header_id; --wait for geetha
2281 END IF;
2282 l_trxn_attribs.trxn_ref_number1 := null; --wait for geetha
2283
2284 l_payer.Payment_Function := 'CUSTOMER_PAYMENT';
2285 l_payer.Party_Id := p_contact_party_id;
2286
2287
2288 IF (x_enrl_info(x.header_id).trxn_extension_id IS NULL) THEN
2289 -- Debug Message
2290 IF (PV_DEBUG_HIGH_ON) THEN
2291 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension call');
2292 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' p_payment_method_rec.instrument_security_code ' || p_payment_method_rec.instrument_security_code);
2293 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' p_contact_party_id ' || p_contact_party_id);
2294 IF (p_enrollment_flow = 'Y') THEN
2295 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).enrl_req_id ' || x_enrl_info(x.header_id).enrl_req_id);
2296 ELSE
2297 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_enrl_info(x.header_id).invite_header_id ' || x_enrl_info(x.header_id).invite_header_id);
2298 END IF;
2299 END IF;
2300
2301 IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension
2302 (
2303 p_api_version => 1.0,
2304 p_init_msg_list => FND_API.G_FALSE,
2305 p_commit => FND_API.G_FALSE,
2306 x_return_status => x_return_status,
2307 x_msg_count => x_msg_count,
2308 x_msg_data => x_msg_data,
2309 p_payer => l_payer,
2310 p_payer_equivalency => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
2311 p_pmt_channel => 'CREDIT_CARD',
2312 p_instr_assignment => lx_instr_assign_id,
2313 p_trxn_attribs => l_trxn_attribs,
2314 x_entity_id => lx_trxn_extension_id,
2315 x_response => lx_response
2316 );
2317
2318 IF (PV_DEBUG_HIGH_ON) THEN
2319 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_return_status from IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension : ' || x_return_status);
2320 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_count from IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension : ' || x_msg_count);
2321 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_data from IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension : ' || x_msg_data);
2322 END IF;
2323
2324 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2325 IF (lx_response.Result_Category = 'INVALID_PARAM') THEN
2326 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
2327 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
2328 FND_MSG_PUB.add;
2329 RAISE FND_API.G_EXC_ERROR;
2330 ELSE
2331 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2332 END IF;
2333 END IF;
2334
2335 x_enrl_info(x.header_id).trxn_extension_id := lx_trxn_extension_id;
2336
2337 -- Debug Message
2338 IF (PV_DEBUG_HIGH_ON) THEN
2339 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the IBY_FNDCPT_TRXN_PUB.Create_Transaction_Extension call');
2340 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' lx_trxn_extension_id ' || lx_trxn_extension_id);
2341 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' lx_instr_assign_id ' || lx_instr_assign_id);
2342 END IF;
2343
2344 ELSE
2345 lx_trxn_extension_id := x_enrl_info(x.header_id).trxn_extension_id;
2346
2347 -- Debug Message
2348 IF (PV_DEBUG_HIGH_ON) THEN
2349 PVX_UTILITY_PVT.debug_message('Checking if credit card is the same and has already been authorized');
2350 END IF;
2351
2352 IF (l_skip_auth = 'N') THEN
2353 select nvl(authorized_flag,'N')
2354 into l_skip_auth
2355 from iby_trxn_extensions_v
2356 where trxn_extension_id = lx_trxn_extension_id;
2357 END IF;
2358
2359 -- Debug Message
2360 IF (PV_DEBUG_HIGH_ON) THEN
2361 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension call');
2362 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' instrument assignment id = ' || lx_instr_assign_id);
2363 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' skip authorization flag = ' || l_skip_auth);
2364 END IF;
2365
2366
2367 -- Only update transaction extension if successful authorization hasn't already happened (online or offline)
2368 IF (l_skip_auth = 'N') THEN
2369
2370 IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension
2371 (
2372 p_api_version => 1.0,
2373 p_init_msg_list => FND_API.G_FALSE,
2374 p_commit => FND_API.G_FALSE,
2375 x_return_status => x_return_status,
2376 x_msg_count => x_msg_count,
2377 x_msg_data => x_msg_data,
2378 p_payer => l_payer,
2379 p_payer_equivalency => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
2380 p_pmt_channel => 'CREDIT_CARD',
2381 p_instr_assignment => lx_instr_assign_id,
2382 p_trxn_attribs => l_trxn_attribs,
2383 p_entity_id => lx_trxn_extension_id,
2384 x_response => lx_response
2385 );
2386
2387 IF (PV_DEBUG_HIGH_ON) THEN
2388 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_return_status from IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension : ' || x_return_status);
2389 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_count from IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension : ' || x_msg_count);
2390 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_data from IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension : ' || x_msg_data);
2391 END IF;
2392
2393 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2394 IF ((lx_response.Result_Category = 'INVALID_PARAM') or (lx_response.Result_Category = 'INCORRECT_FLOW')) THEN
2395 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
2396 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
2397 FND_MSG_PUB.add;
2398 RAISE FND_API.G_EXC_ERROR;
2399 ELSE
2400 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2401 END IF;
2402 END IF;
2403
2404 -- Debug Message
2405 IF (PV_DEBUG_HIGH_ON) THEN
2406 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the IBY_FNDCPT_TRXN_PUB.Update_Transaction_Extension call');
2407 END IF;
2408 END IF;
2409
2410 END IF; -- x_enrl_info(x.header_id).trxn_extension_id IS NULL
2411
2412 /* R12 Changes
2413 * Removing call to authorize payment procedure and instead
2414 * just call the Oracle Payments procedure directly
2415 * Also, we will commit all our work right before the call to create_authorization
2416 */
2417 commit;
2418
2419 IF ((p_enrollment_flow = 'Y') and (l_is_authorized = 'Y') and (l_skip_auth = 'N')) THEN
2420 l_payer.payment_function := 'CUSTOMER_PAYMENT';
2421 l_payer.party_id := p_contact_party_id;
2422 l_payee.Org_Type := 'OPERATING_UNIT';
2423 l_payee.Org_Id := MO_GLOBAL.get_current_org_id;
2424 l_amount.value := x.payment_amount;
2425 l_amount.currency_code := x.currency;
2426 l_auth_attribs.RiskEval_Enable_Flag := 'N';
2427
2428 -- Debug Message
2429 IF (PV_DEBUG_HIGH_ON) THEN
2430 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before IBY_FNDCPT_TRXN_PUB.Create_Authorization');
2431 PVX_UTILITY_PVT.debug_message('Payee ID (Org ID): ' || l_payee.Org_id);
2432 END IF;
2433
2434 IBY_FNDCPT_TRXN_PUB.CREATE_AUTHORIZATION
2435 (
2436 p_api_version => 1.0,
2437 x_return_status => x_return_status,
2438 x_msg_count => x_msg_count,
2439 x_msg_data => x_msg_data,
2440 p_payer => l_payer,
2441 p_payee => l_payee,
2442 p_payer_equivalency => IBY_FNDCPT_COMMON_PUB.G_PAYER_EQUIV_UPWARD,
2443 p_trxn_entity_id => lx_trxn_extension_id,
2444 p_auth_attribs => l_auth_attribs,
2445 p_amount => l_amount,
2446 x_auth_result => l_auth_result,
2447 x_response => lx_response
2448 );
2449
2450 IF (PV_DEBUG_HIGH_ON) THEN
2451 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_return_status from IBY_FNDCPT_TRXN_PUB.CREATE_AUTHORIZATION : ' || x_return_status);
2452 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_count from IBY_FNDCPT_TRXN_PUB.CREATE_AUTHORIZATION : ' || x_msg_count);
2453 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_msg_data from IBY_FNDCPT_TRXN_PUB.CREATE_AUTHORIZATION : ' || x_msg_data);
2454 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_response Code: ' || lx_response.Result_Code);
2455 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_response Category: ' || lx_response.Result_Category);
2456 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' x_response Message: ' || lx_response.Result_Message);
2457 END IF;
2458
2459 /* R12 Changes
2460 * Even if Authorization is unsuccessful, we do not throw an expection.
2461 * We still need to update the enrollment with the transaction extension
2462 */
2463
2464 IF ((x_Return_Status <> FND_API.G_RET_STS_SUCCESS) OR (lx_response.Result_Code <> 'AUTH_SUCCESS')) THEN
2465 l_is_authorized := 'N';
2466 l_skip_auth := 'Y'; -- already failure, don't need to do anything relating to authorization
2467 END IF;
2468
2469 FND_MESSAGE.set_name('PV', 'PV_DEBUG_MESSAGE');
2470 FND_MESSAGE.set_token('TEXT', lx_response.Result_Message);
2471 FND_MSG_PUB.add;
2472
2473 END IF;
2474
2475 /* It is possible that we have skipped authorization for just a single request, but that subsequent
2476 requests need authorization (i.e. updating a transaction that failed once but was manually authorized)
2477 In that case, we need to allow authorization to continue on the next pass through */
2478 IF ((l_skip_auth = 'Y') and (l_is_authorized = 'Y')) THEN
2479 l_skip_auth := 'N';
2480 END IF;
2481
2482 END IF;
2483
2484 END LOOP;
2485
2486 /* Need to set the authorized output flag to match the internal flag. The internal flag will only get
2487 set to 'N' if the authorization has failed for any one of the enrollment requrests;
2488 */
2489 IF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
2490 x_is_authorized := l_is_authorized;
2491 END IF;
2492
2493 FND_MSG_PUB.Count_And_Get
2494 ( p_encoded => FND_API.G_FALSE,
2495 p_count => x_msg_count,
2496 p_data => x_msg_data
2497 );
2498
2499 IF FND_API.to_Boolean( p_commit ) THEN
2500 COMMIT WORK;
2501 END IF;
2502
2503
2504 EXCEPTION
2505 WHEN FND_API.G_EXC_ERROR THEN
2506 ROLLBACK;
2507 x_return_status := FND_API.G_RET_STS_ERROR;
2508 FND_MSG_PUB.Count_And_Get (
2509 p_encoded => FND_API.G_FALSE
2510 ,p_count => x_msg_count
2511 ,p_data => x_msg_data
2512 );
2513
2514
2515 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2516 ROLLBACK;
2517 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2518 -- Standard call to get message count and if count=1, get the message
2519 FND_MSG_PUB.Count_And_Get (
2520 p_encoded => FND_API.G_FALSE
2521 ,p_count => x_msg_count
2522 ,p_data => x_msg_data
2523 );
2524
2525 WHEN OTHERS THEN
2526 ROLLBACK;
2527 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2528 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
2529 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2530 END IF;
2531 FND_MSG_PUB.Count_And_Get (
2532 p_encoded => FND_API.G_FALSE
2533 ,p_count => x_msg_count
2534 ,p_data => x_msg_data
2535 );
2536
2537 End set_payment_info;
2538
2539 PROCEDURE set_enrq_payment_info(
2540 p_api_version_number IN NUMBER
2541 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2542 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2543 ,p_contact_party_id IN NUMBER
2544 ,p_payment_method_rec IN Payment_method_Rec_type
2545 ,P_enrl_req_id IN Payment_info_Tbl_type
2546 ,x_return_status OUT NOCOPY VARCHAR2
2547 ,x_msg_count OUT NOCOPY NUMBER
2548 ,x_msg_data OUT NOCOPY VARCHAR2
2549 ,x_is_authorized OUT NOCOPY VARCHAR2
2550 )
2551 IS
2552 l_api_version_number CONSTANT NUMBER := 1.0;
2553 l_api_name CONSTANT VARCHAR2(30) := 'set_enrq_payment_info';
2554 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2555
2556 lx_enrl_info Payment_info_Tbl_type;
2557 l_enrl_req_id_tbl JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
2558 l_order_header_id_tbl Payment_info_Tbl_type;
2559 l_enrl_req_rec PV_Pg_Enrl_Requests_PVT.enrl_request_rec_type;
2560 l_log_params_tbl pvx_utility_pvt.log_params_tbl_type;
2561 l_partner_id number;
2562 l_trans_currency varchar2(15);
2563 l_payment_amount number;
2564 l_pmnt_mode_mean varchar2(80);
2565
2566 /*Moving process_order to here instead of set_payment_info*/
2567 l_header_payment_tbl OE_ORDER_PUB.Header_Payment_Tbl_Type;
2568 l_header_payment_out_tbl OE_ORDER_PUB.Header_Payment_Tbl_Type;
2569 l_header_rec OE_ORDER_PUB.Header_Rec_Type;
2570 l_header_out_rec OE_ORDER_PUB.Header_Rec_Type;
2571 x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type;
2572 x_header_payment_val_tbl OE_ORDER_PUB.Header_Payment_Val_Tbl_Type;
2573 x_Header_Adj_tbl OE_ORDER_PUB.Header_Adj_Tbl_Type;
2574 x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type;
2575 x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type;
2576 x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type;
2577 x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type;
2578 x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;
2579 x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type;
2580 x_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
2581 x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type;
2582 x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type;
2583 x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type;
2584 x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type;
2585 x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type;
2586 x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type;
2587 x_Line_Payment_tbl OE_ORDER_PUB.Line_Payment_Tbl_Type;
2588 x_Line_Payment_val_tbl OE_ORDER_PUB.Line_Payment_Val_Tbl_Type;
2589 x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;
2590 x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type;
2591 x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type;
2592 x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type;
2593 x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
2594
2595
2596 /* R12 Change
2597 * cursor c_get_order_id will return the transaction extension id
2598 */
2599 CURSOR c_get_order_id(cv_enrl_req_id JTF_NUMBER_TABLE) IS
2600 SELECT /*+ CARDINALITY(t 10) */ pver.order_header_id, pver.enrl_request_id,
2601 pver.object_version_number, pver.partner_id, pver.trxn_extension_id
2602 FROM PV_PG_ENRL_REQUESTS pver,
2603 (Select * from table (CAST(cv_enrl_req_id AS JTF_NUMBER_TABLE))) t
2604 WHERE pver.enrl_request_id = t.column_value
2605 and pver.custom_setup_id in (7004, 7005)
2606 and pver.order_header_id is not null
2607 and pver.payment_status_code <> 'AUTHORIZED_PAYMENT';
2608
2609
2610
2611 BEGIN
2612
2613 ---------------Initialize --------------------
2614 -- Initialize message list if p_init_msg_list is set to TRUE.
2615 IF FND_API.to_Boolean( p_init_msg_list )
2616 THEN
2617 FND_MSG_PUB.initialize;
2618 END IF;
2619
2620 -- Standard call to check for call compatibility.
2621 IF NOT FND_API.Compatible_API_Call (
2622 l_api_version_number
2623 ,p_api_version_number
2624 ,l_api_name
2625 ,G_PKG_NAME
2626 )
2627 THEN
2628 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2629 END IF;
2630
2631 -- Debug Message
2632 IF (PV_DEBUG_HIGH_ON) THEN
2633
2634 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
2635 END IF;
2636
2637
2638 -- Initialize API return status to SUCCESS
2639 x_return_status := FND_API.G_RET_STS_SUCCESS;
2640 -------------End Of Initialize -------------------------------
2641
2642
2643 IF FND_GLOBAL.User_Id IS NULL THEN
2644 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
2645 FND_MSG_PUB.add;
2646 RAISE FND_API.G_EXC_ERROR;
2647 END IF;
2648
2649
2650 IF p_enrl_req_id.count() = 0 THEN
2651 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
2652 FND_MESSAGE.Set_Token('ID', 'Enrollment Request', FALSE);
2653 fnd_msg_pub.ADD;
2654 raise FND_API.G_EXC_ERROR;
2655 END IF;
2656
2657
2658
2659 for i in p_enrl_req_id.FIRST..p_enrl_req_id.LAST loop
2660 IF (p_enrl_req_id(i).enrl_req_id IS NULL or p_enrl_req_id(i).enrl_req_id = FND_API.G_MISS_NUM) THEN
2661 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
2662 FND_MESSAGE.Set_Token('ID', 'Enrollment Request', FALSE);
2663 FND_MSG_PUB.add;
2664 RAISE FND_API.G_EXC_ERROR;
2665 END IF;
2666 l_enrl_req_id_tbl.extend;
2667 l_enrl_req_id_tbl(l_enrl_req_id_tbl.count) := p_enrl_req_id(i).enrl_req_id;
2668 END LOOP;
2669
2670
2671 FOR x IN c_get_order_id(l_enrl_req_id_tbl) LOOP
2672 l_order_header_id_tbl(x.order_header_id).order_header_id := x.order_header_id;
2673 l_order_header_id_tbl(x.order_header_id).enrl_req_id := x.enrl_request_id;
2674 l_order_header_id_tbl(x.order_header_id).trxn_extension_id := x.trxn_extension_id; -- dgottlie: new in R12
2675 l_order_header_id_tbl(x.order_header_id).object_version_number := x.object_version_number; -- dgottlie: new in R12
2676 l_partner_id := x.partner_id;
2677 END loop;
2678
2679
2680 IF (l_order_header_id_tbl.count >0) THEN
2681 IF (PV_DEBUG_HIGH_ON) THEN
2682 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' Before calling set_payment_info ');
2683 END IF;
2684
2685 set_payment_info(
2686 p_api_version_number => p_api_version_number
2687 ,p_init_msg_list => FND_API.g_false
2688 ,p_commit => FND_API.G_FALSE
2689 ,p_contact_party_id => p_contact_party_id
2690 ,p_payment_method_rec => p_payment_method_rec
2691 ,p_order_header_id => l_order_header_id_tbl
2692 ,p_enrollment_flow => 'Y'
2693 ,x_return_status => x_return_status
2694 ,x_msg_count => x_msg_count
2695 ,x_msg_data => x_msg_data
2696 ,x_is_authorized => x_is_authorized
2697 ,x_enrl_info => lx_enrl_info
2698 );
2699
2700 IF (PV_DEBUG_HIGH_ON) THEN
2701 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' After calling set_payment_info');
2702 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' x_return_status ' || x_return_status);
2703 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' x_msg_count ' || x_msg_count);
2704 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' x_msg_data ' || x_msg_data);
2705 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' x_is_authorized ' || x_is_authorized);
2706 END IF;
2707
2708 END IF;
2709
2710 /* R12 Changes
2711 * For credit cards only, we will be updated the transaction extension id
2712 * in the enrollment requests table regardless of whether the credit card
2713 * authorization is sucessful
2714 */
2715 for i in lx_enrl_info.FIRST..lx_enrl_info.LAST loop
2716
2717 l_enrl_req_rec.object_version_number := lx_enrl_info(i).object_version_number;
2718 l_enrl_req_rec.enrl_request_id := lx_enrl_info(i).enrl_req_id;
2719 l_enrl_req_rec.trxn_extension_id := lx_enrl_info(i).trxn_extension_id;
2720
2721
2722 IF (PV_DEBUG_HIGH_ON) THEN
2723 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' Before update pv_pg_enrl_request');
2724 END IF;
2725
2726 PV_Pg_Enrl_Requests_PVT.Update_Pg_Enrl_Requests
2727 (
2728 p_api_version_number => p_api_version_number,
2729 p_init_msg_list => Fnd_Api.G_FALSE,
2730 p_commit => Fnd_Api.G_TRUE, -- we will always commit the new trxn extensions generated
2731 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
2732 x_return_status => x_return_status,
2733 x_msg_count => x_msg_count,
2734 x_msg_data => x_msg_data,
2735 p_enrl_request_rec => l_enrl_req_rec
2736 );
2737
2738 IF (PV_DEBUG_HIGH_ON) THEN
2739 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| 'After populating trxn_extension_id in pv_pg_enrl_request x_return_status ' || x_return_status);
2740 END IF;
2741
2742 IF x_return_status = FND_API.g_ret_sts_error THEN
2743 RAISE FND_API.g_exc_error;
2744 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
2745 RAISE FND_API.g_exc_unexpected_error;
2746 END IF;
2747
2748 END LOOP;
2749
2750
2751
2752
2753 -- dgottlie: If one of the authorization failed, print error message and throw exception
2754 -- This needed to be done after enrollment requests table updated but before OM order processed
2755 IF ((p_payment_method_rec.payment_type_code = 'CREDIT_CARD') and (x_is_authorized = 'N')) THEN
2756 RAISE FND_API.G_EXC_ERROR;
2757 END IF;
2758
2759
2760
2761
2762 -- dgottlie:If we reach here, all the enrollment requests have been authorized and we can update OM with the orders.
2763 l_header_payment_tbl := OE_ORDER_PUB.G_MISS_HEADER_PAYMENT_TBL;
2764 l_header_payment_out_tbl := OE_ORDER_PUB.G_MISS_HEADER_PAYMENT_TBL;
2765 l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
2766 l_header_out_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
2767
2768
2769 FOR i IN lx_enrl_info.FIRST..lx_enrl_info.LAST LOOP
2770
2771 l_header_rec.operation := OE_GLOBALS.g_OPR_UPDATE;
2772 l_header_rec.header_id := lx_enrl_info(i).order_header_id;
2773 l_header_rec.change_reason := 'SYSTEM';
2774 l_header_rec.payment_amount := lx_enrl_info(i).payment_amount;
2775 l_header_rec.cust_po_number := p_payment_method_rec.cust_po_number;
2776 l_header_rec.creation_date := SYSDATE;
2777 l_header_rec.created_by := FND_GLOBAL.USER_ID;
2778 l_header_rec.last_update_date := SYSDATE;
2779 l_header_rec.last_updated_by := FND_GLOBAL.USER_ID;
2780
2781 IF (p_payment_method_rec.payment_type_code <> 'CREDIT_CARD') THEN
2782 l_header_rec.payment_type_code := p_payment_method_rec.payment_type_code;
2783 END IF;
2784
2785 IF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
2786 l_header_payment_tbl(1).operation := OE_GLOBALS.g_OPR_CREATE;
2787 l_header_payment_tbl(1).header_id := lx_enrl_info(i).order_header_id;
2788 l_header_payment_tbl(1).payment_collection_event := 'INVOICE';
2789 l_header_payment_tbl(1).payment_type_code := p_payment_method_rec.payment_type_code;
2790 l_header_payment_tbl(1).trxn_extension_id := lx_enrl_info(i).trxn_extension_id;
2791 ELSIF (p_payment_method_rec.payment_type_code = 'CHECK') THEN
2792 l_header_rec.check_number := p_payment_method_rec.check_number;
2793 ELSIF (p_payment_method_rec.payment_type_code = 'INVOICE') THEN
2794 l_header_rec.payment_type_code := null;
2795 END IF;
2796
2797 Order_Debug_On;
2798
2799 -- Debug Message
2800 IF (PV_DEBUG_HIGH_ON) THEN
2801 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the OE_ORDER_GRP.process_order call ');
2802 END IF;
2803
2804 OE_ORDER_GRP.process_order(
2805 p_api_version_number => l_api_version_number,
2806 p_init_msg_list => FND_API.g_false ,
2807 p_return_values => FND_API.g_true ,
2808 p_commit => FND_API.g_false ,
2809 x_return_status => x_return_status,
2810 x_msg_count => x_msg_count,
2811 x_msg_data => x_msg_data,
2812 p_header_rec => l_header_rec,
2813 x_header_rec => l_header_out_rec,
2814 p_header_payment_tbl => l_header_payment_tbl,
2815 x_header_payment_tbl => l_header_payment_out_tbl,
2816 x_header_val_rec => x_header_Val_Rec,
2817 x_header_payment_val_tbl => x_header_payment_val_tbl,
2818 x_Header_Adj_tbl => x_Header_Adj_tbl ,
2819 x_Header_Adj_val_tbl => x_Header_Adj_val_tbl,
2820 x_Header_price_Att_tbl => x_Header_price_Att_tbl,
2821 x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl,
2822 x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl,
2823 x_Header_Scredit_tbl => x_Header_Scredit_tbl,
2824 x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl,
2825 x_line_tbl => x_line_tbl,
2826 x_line_val_tbl => x_line_val_tbl ,
2827 x_Line_Adj_tbl => x_Line_Adj_tbl,
2828 x_Line_Adj_val_tbl => x_Line_Adj_val_tbl,
2829 x_Line_price_Att_tbl => x_Line_price_Att_tbl,
2830 x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl ,
2831 x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl,
2832 x_Line_Payment_tbl => x_line_payment_tbl,
2833 x_Line_Payment_val_tbl => x_line_payment_val_tbl,
2834 x_Line_Scredit_tbl => x_Line_Scredit_tbl,
2835 x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl,
2836 x_Lot_Serial_tbl => x_Lot_Serial_tbl ,
2837 x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl,
2838 x_action_request_tbl =>x_action_request_tbl
2839 );
2840
2841 IF (PV_DEBUG_HIGH_ON) THEN
2842 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| 'After process_order API call : x_return_status ' || x_return_status);
2843 END IF;
2844
2845 Retrieve_OE_Messages;
2846
2847 IF (x_return_status = FND_API.g_ret_sts_error) THEN
2848 RAISE FND_API.g_exc_error;
2849 ELSIF (x_return_status = FND_API.g_ret_sts_unexp_error) THEN
2850 RAISE FND_API.g_exc_unexpected_error;
2851 ELSIF (x_return_status = FND_API.g_ret_sts_success) THEN
2852 for i in 1..l_header_payment_out_tbl.count loop
2853 IF (l_header_payment_out_tbl(i).return_status = FND_API.g_ret_sts_error) THEN
2854 RAISE FND_API.g_exc_error;
2855 ELSIF (l_header_payment_out_tbl(i).return_status = FND_API.g_ret_sts_unexp_error) THEN
2856 RAISE FND_API.g_exc_unexpected_error;
2857 END IF;
2858 end loop;
2859 END IF;
2860
2861
2862 END LOOP;
2863
2864 -- Debug Message
2865 IF (PV_DEBUG_HIGH_ON) THEN
2866 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the OE_ORDER_GRP.process_order call');
2867 END IF;
2868
2869
2870 for i in lx_enrl_info.FIRST..lx_enrl_info.LAST loop
2871
2872 l_enrl_req_rec.object_version_number := lx_enrl_info(i).object_version_number+1;
2873 l_enrl_req_rec.enrl_request_id := lx_enrl_info(i).enrl_req_id;
2874 IF ((p_payment_method_rec.payment_type_code <> 'CREDIT_CARD') or (x_is_authorized = 'Y')) THEN
2875 l_enrl_req_rec.payment_status_code := 'AUTHORIZED_PAYMENT';
2876 END IF;
2877
2878
2879 IF (PV_DEBUG_HIGH_ON) THEN
2880 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' Before update pv_pg_enrl_request');
2881 END IF;
2882
2883 PV_Pg_Enrl_Requests_PVT.Update_Pg_Enrl_Requests
2884 (
2885 p_api_version_number => p_api_version_number,
2886 p_init_msg_list => Fnd_Api.G_FALSE,
2887 p_commit => Fnd_Api.G_FALSE,
2888 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
2889 x_return_status => x_return_status,
2890 x_msg_count => x_msg_count,
2891 x_msg_data => x_msg_data,
2892 p_enrl_request_rec => l_enrl_req_rec
2893 );
2894
2895 IF (PV_DEBUG_HIGH_ON) THEN
2896 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| 'After updating payment status to AUTHORIZED in pv_pg_enrl_request x_return_status ' || x_return_status);
2897 END IF;
2898
2899 IF x_return_status = FND_API.g_ret_sts_error THEN
2900 RAISE FND_API.g_exc_error;
2901 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
2902 RAISE FND_API.g_exc_unexpected_error;
2903 END IF;
2904
2905
2906 IF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
2907 IF (x_is_authorized = 'Y') THEN
2908
2909 pvx_utility_pvt.create_history_log
2910 (
2911 p_arc_history_for_entity_code => 'ENRQ',
2912 p_history_for_entity_id => lx_enrl_info(i).enrl_req_id,
2913 p_history_category_code => 'PAYMENT',
2914 p_message_code => 'PV_CREDIT_CARD_AUTH_SUCCESS',
2915 p_partner_id => l_partner_id,
2916 p_access_level_flag => 'V',
2917 p_log_params_tbl => l_log_params_tbl,
2918 x_return_status => x_return_status,
2919 x_msg_count => x_msg_count,
2920 x_msg_data => x_msg_data
2921 );
2922
2923 IF (PV_DEBUG_HIGH_ON) THEN
2924 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' After create history log : x_return_status ' || x_return_status);
2925 END IF;
2926
2927 IF (x_return_status = FND_API.g_ret_sts_error) THEN
2928 RAISE FND_API.g_exc_error;
2929 ELSIF (x_return_status = FND_API.g_ret_sts_unexp_error) THEN
2930 RAISE FND_API.g_exc_unexpected_error;
2931 END IF;
2932 END IF;
2933 END IF;
2934
2935 IF (p_payment_method_rec.payment_type_code <> 'CREDIT_CARD') and (x_is_authorized = 'Y') THEN
2936 select payment_amount,
2937 transactional_curr_code
2938 into l_payment_amount,
2939 l_trans_currency
2940 from oe_order_headers_all
2941 where header_id = lx_enrl_info(i).order_header_id;
2942
2943 select meaning
2944 into l_pmnt_mode_mean
2945 from PV_LOOKUPS
2946 where lookup_type = 'PV_PAYMENT_TYPE'
2947 and lookup_code = p_payment_method_rec.payment_type_code;
2948
2949 l_log_params_tbl(1).param_name := 'AMOUNT';
2950 l_log_params_tbl(1).param_value := l_payment_amount;
2951
2952 l_log_params_tbl(2).param_name := 'CURRENCY';
2953 l_log_params_tbl(2).param_value := l_trans_currency;
2954
2955 l_log_params_tbl(3).param_name := 'MODE';
2956 l_log_params_tbl(3).param_value := l_pmnt_mode_mean;
2957
2958 pvx_utility_pvt.create_history_log
2959 (
2960 p_arc_history_for_entity_code => 'ENRQ',
2961 p_history_for_entity_id => lx_enrl_info(i).enrl_req_id,
2962 p_history_category_code => 'PAYMENT',
2963 p_message_code => 'PV_PAYMENT_AUTHORIZED',
2964 p_partner_id => l_partner_id,
2965 p_access_level_flag => 'V',
2966 p_log_params_tbl => l_log_params_tbl,
2967 x_return_status => x_return_status,
2968 x_msg_count => x_msg_count,
2969 x_msg_data => x_msg_data
2970 );
2971
2972 IF (PV_DEBUG_HIGH_ON) THEN
2973 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' After create history log : x_return_status ' || x_return_status);
2974 END IF;
2975
2976 IF (x_return_status = FND_API.g_ret_sts_error) THEN
2977 RAISE FND_API.g_exc_error;
2978 ELSIF (x_return_status = FND_API.g_ret_sts_unexp_error) THEN
2979 RAISE FND_API.g_exc_unexpected_error;
2980 END IF;
2981 END IF;
2982
2983 END LOOP;
2984
2985 IF (PV_DEBUG_HIGH_ON) THEN
2986 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name|| ' Processing done');
2987 END IF;
2988
2989
2990 FND_MSG_PUB.Count_And_Get
2991 ( p_encoded => FND_API.G_FALSE,
2992 p_count => x_msg_count,
2993 p_data => x_msg_data
2994 );
2995
2996 IF FND_API.to_Boolean( p_commit ) THEN
2997 COMMIT WORK;
2998 END IF;
2999
3000
3001 EXCEPTION
3002 WHEN FND_API.G_EXC_ERROR THEN
3003 ROLLBACK;
3004 x_return_status := FND_API.G_RET_STS_ERROR;
3005 FND_MSG_PUB.Count_And_Get (
3006 p_encoded => FND_API.G_FALSE
3007 ,p_count => x_msg_count
3008 ,p_data => x_msg_data
3009 );
3010
3011 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3012 ROLLBACK;
3013 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3014 -- Standard call to get message count and if count=1, get the message
3015 FND_MSG_PUB.Count_And_Get (
3016 p_encoded => FND_API.G_FALSE
3017 ,p_count => x_msg_count
3018 ,p_data => x_msg_data
3019 );
3020
3021 WHEN OTHERS THEN
3022 ROLLBACK;
3023 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3024 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
3025 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3026 END IF;
3027 FND_MSG_PUB.Count_And_Get (
3028 p_encoded => FND_API.G_FALSE
3029 ,p_count => x_msg_count
3030 ,p_data => x_msg_data
3031 );
3032
3033 END set_enrq_payment_info;
3034
3035 PROCEDURE set_vad_payment_info(
3036 p_api_version_number IN NUMBER
3037 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3038 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3039 ,p_contact_party_id IN NUMBER
3040 ,p_payment_method_rec IN Payment_method_Rec_type
3041 ,P_order_header_id IN Payment_info_Tbl_type
3042 ,x_return_status OUT NOCOPY VARCHAR2
3043 ,x_msg_count OUT NOCOPY NUMBER
3044 ,x_msg_data OUT NOCOPY VARCHAR2
3045 )
3046 IS
3047
3048 l_api_version_number CONSTANT NUMBER := 1.0;
3049 l_api_name CONSTANT VARCHAR2(30) := 'set_vad_payment_info';
3050 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
3051
3052 l_order_header_id_tbl Payment_info_Tbl_type;
3053 l_partner_id NUMBER;
3054 lx_enrl_info Payment_info_Tbl_type;
3055 l_is_authorized VARCHAR2(1);
3056 l_invite_header_rec Pv_Pg_Invite_headers_PVT.invite_headers_rec_type;
3057
3058 /*Moving process_order to here instead of set_payment_info*/
3059 l_header_payment_tbl OE_ORDER_PUB.Header_Payment_Tbl_Type;
3060 l_header_payment_out_tbl OE_ORDER_PUB.Header_Payment_Tbl_Type;
3061 l_header_rec OE_ORDER_PUB.Header_Rec_Type;
3062 l_header_out_rec OE_ORDER_PUB.Header_Rec_Type;
3063 x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type;
3064 x_header_payment_val_tbl OE_ORDER_PUB.Header_Payment_Val_Tbl_Type;
3065 x_Header_Adj_tbl OE_ORDER_PUB.Header_Adj_Tbl_Type;
3066 x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type;
3067 x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type;
3068 x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type;
3069 x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type;
3070 x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type;
3071 x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type;
3072 x_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
3073 x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type;
3074 x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type;
3075 x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type;
3076 x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type;
3077 x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type;
3078 x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type;
3079 x_Line_Payment_tbl OE_ORDER_PUB.Line_Payment_Tbl_Type;
3080 x_Line_Payment_val_tbl OE_ORDER_PUB.Line_Payment_Val_Tbl_Type;
3081 x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type;
3082 x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type;
3083 x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type;
3084 x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type;
3085 x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type;
3086
3087 /* R12 Change
3088 * cursor c_get_order_id will return the transaction extension id
3089 */
3090 CURSOR c_get_order_id(cv_invite_header_id NUMBER) IS
3091 SELECT pvih.order_header_id, pvih.invite_header_id, pvih.object_version_number,
3092 pvih.partner_id, pvih.trxn_extension_id
3093 FROM PV_PG_INVITE_HEADERS_B pvih
3094 WHERE pvih.invite_header_id = cv_invite_header_id
3095 and pvih.order_header_id is not null;
3096
3097 BEGIN
3098
3099 ---------------Initialize --------------------
3100 -- Initialize message list if p_init_msg_list is set to TRUE.
3101 IF FND_API.to_Boolean( p_init_msg_list )
3102 THEN
3103 FND_MSG_PUB.initialize;
3104 END IF;
3105
3106 -- Standard call to check for call compatibility.
3107 IF NOT FND_API.Compatible_API_Call (
3108 l_api_version_number
3109 ,p_api_version_number
3110 ,l_api_name
3111 ,G_PKG_NAME
3112 )
3113 THEN
3114 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3115 END IF;
3116
3117 -- Debug Message
3118 IF (PV_DEBUG_HIGH_ON) THEN
3119 PVX_UTILITY_PVT.debug_message('API: ' || l_api_name || ' - start');
3120 END IF;
3121
3122
3123 -- Initialize API return status to SUCCESS
3124 x_return_status := FND_API.G_RET_STS_SUCCESS;
3125 -------------End Of Initialize -------------------------------
3126
3127
3128 IF FND_GLOBAL.User_Id IS NULL THEN
3129 FND_MESSAGE.set_name('PV', 'PV_API_USER_PROFILE_MISSING');
3130 FND_MSG_PUB.add;
3131 RAISE FND_API.G_EXC_ERROR;
3132 END IF;
3133
3134 IF p_order_header_id.count() = 0 THEN
3135 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
3136 FND_MESSAGE.Set_Token('ID', 'Order Header', FALSE);
3137 FND_MSG_PUB.ADD;
3138 RAISE FND_API.G_EXC_ERROR;
3139 END IF;
3140
3141 IF ((p_order_header_id(p_order_header_id.FIRST).invite_header_id IS NULL) or
3142 (p_order_header_id(p_order_header_id.FIRST).invite_header_id = FND_API.G_MISS_NUM)) THEN
3143 FND_MESSAGE.set_name('PV', 'PV_API_MISSING_REQ_ID');
3144 FND_MESSAGE.Set_Token('ID', 'Invite Header', FALSE);
3145 FND_MSG_PUB.add;
3146 RAISE FND_API.G_EXC_ERROR;
3147 END IF;
3148
3149 FOR x IN c_get_order_id(p_order_header_id(p_order_header_id.FIRST).invite_header_id) LOOP
3150 l_order_header_id_tbl(x.order_header_id).order_header_id := x.order_header_id;
3151 l_order_header_id_tbl(x.order_header_id).invite_header_id := x.invite_header_id;
3152 l_order_header_id_tbl(x.order_header_id).trxn_extension_id := x.trxn_extension_id; -- dgottlie: new in R12
3153 l_order_header_id_tbl(x.order_header_id).object_version_number := x.object_version_number; -- dgottlie: new in R12
3154 l_partner_id := x.partner_id;
3155 END loop;
3156
3157 IF(l_order_header_id_tbl.count >0) THEN
3158 set_payment_info(
3159 p_api_version_number => p_api_version_number
3160 ,p_init_msg_list => FND_API.g_false
3161 ,p_commit => FND_API.G_FALSE
3162 ,p_contact_party_id => p_contact_party_id
3163 ,p_payment_method_rec => p_payment_method_rec
3164 ,p_order_header_id => l_order_header_id_tbl
3165 ,p_enrollment_flow => 'N'
3166 ,x_return_status => x_return_status
3167 ,x_msg_count => x_msg_count
3168 ,x_msg_data => x_msg_data
3169 ,x_is_authorized => l_is_authorized
3170 ,x_enrl_info => lx_enrl_info
3171 );
3172 END IF;
3173
3174 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3175 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3176 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3177 RAISE FND_API.G_EXC_ERROR;
3178 END IF;
3179
3180 for i in lx_enrl_info.FIRST..lx_enrl_info.LAST loop
3181
3182 l_invite_header_rec.object_version_number := lx_enrl_info(i).object_version_number;
3183 l_invite_header_rec.invite_header_id := lx_enrl_info(i).invite_header_id;
3184 l_invite_header_rec.trxn_extension_id := lx_enrl_info(i).trxn_extension_id;
3185
3186 PV_Pg_Invite_Headers_PVT.Update_Invite_Headers
3187 (
3188 p_api_version_number => p_api_version_number,
3189 p_init_msg_list => Fnd_Api.G_FALSE,
3190 p_commit => Fnd_Api.G_FALSE,
3191 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
3192 x_return_status => x_return_status,
3193 x_msg_count => x_msg_count,
3194 x_msg_data => x_msg_data,
3195 p_invite_headers_rec => l_invite_header_rec
3196 );
3197
3198 IF x_return_status = FND_API.g_ret_sts_error THEN
3199 RAISE FND_API.g_exc_error;
3200 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
3201 RAISE FND_API.g_exc_unexpected_error;
3202 END IF;
3203
3204 END LOOP;
3205
3206 -- dgottlie:If we reach here, all the enrollment requests have been authorized and we can update OM with the orders.
3207 l_header_payment_tbl := OE_ORDER_PUB.G_MISS_HEADER_PAYMENT_TBL;
3208 l_header_payment_out_tbl := OE_ORDER_PUB.G_MISS_HEADER_PAYMENT_TBL;
3209 l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
3210 l_header_out_rec := OE_ORDER_PUB.G_MISS_HEADER_REC;
3211 FOR i IN lx_enrl_info.FIRST..lx_enrl_info.LAST LOOP
3212 l_header_rec.operation := OE_GLOBALS.g_OPR_UPDATE;
3213 l_header_rec.header_id := lx_enrl_info(i).order_header_id;
3214 l_header_rec.change_reason := 'SYSTEM';
3215 l_header_rec.payment_amount := lx_enrl_info(i).payment_amount;
3216 l_header_rec.cust_po_number := p_payment_method_rec.cust_po_number;
3217 l_header_rec.creation_date := SYSDATE;
3218 l_header_rec.created_by := FND_GLOBAL.USER_ID;
3219 l_header_rec.last_update_date := SYSDATE;
3220 l_header_rec.last_updated_by := FND_GLOBAL.USER_ID;
3221
3222 IF (p_payment_method_rec.payment_type_code <> 'CREDIT_CARD') THEN
3223 l_header_rec.payment_type_code := p_payment_method_rec.payment_type_code;
3224 END IF;
3225
3226 IF (p_payment_method_rec.payment_type_code = 'CREDIT_CARD') THEN
3227 l_header_payment_tbl(1).operation := OE_GLOBALS.g_OPR_CREATE;
3228 l_header_payment_tbl(1).header_id := lx_enrl_info(i).order_header_id;
3229 l_header_payment_tbl(1).payment_collection_event := 'INVOICE';
3230 l_header_payment_tbl(1).payment_type_code := p_payment_method_rec.payment_type_code;
3231 l_header_payment_tbl(1).trxn_extension_id := lx_enrl_info(i).trxn_extension_id;
3232 ELSIF (p_payment_method_rec.payment_type_code = 'CHECK') THEN
3233 l_header_rec.check_number := p_payment_method_rec.check_number;
3234 ELSIF (p_payment_method_rec.payment_type_code = 'INVOICE') THEN
3235 l_header_rec.payment_type_code := null;
3236 END IF;
3237
3238 Order_Debug_On;
3239
3240 -- Debug Message
3241 IF (PV_DEBUG_HIGH_ON) THEN
3242 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' before the OE_ORDER_GRP.process_order call');
3243 END IF;
3244
3245 OE_ORDER_GRP.process_order(
3246 p_api_version_number => l_api_version_number,
3247 p_init_msg_list => FND_API.g_false ,
3248 p_return_values => FND_API.g_true ,
3249 p_commit => FND_API.g_false ,
3250 x_return_status => x_return_status,
3251 x_msg_count => x_msg_count,
3252 x_msg_data => x_msg_data,
3253 p_header_rec => l_header_rec,
3254 x_header_rec => l_header_out_rec,
3255 p_header_payment_tbl => l_header_payment_tbl,
3256 x_header_payment_tbl => l_header_payment_out_tbl,
3257 x_header_val_rec => x_header_Val_Rec,
3258 x_header_payment_val_tbl => x_header_payment_val_tbl,
3259 x_Header_Adj_tbl => x_Header_Adj_tbl ,
3260 x_Header_Adj_val_tbl => x_Header_Adj_val_tbl,
3261 x_Header_price_Att_tbl => x_Header_price_Att_tbl,
3262 x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl,
3263 x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl,
3264 x_Header_Scredit_tbl => x_Header_Scredit_tbl,
3265 x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl,
3266 x_line_tbl => x_line_tbl,
3267 x_line_val_tbl => x_line_val_tbl ,
3268 x_Line_Adj_tbl => x_Line_Adj_tbl,
3269 x_Line_Adj_val_tbl => x_Line_Adj_val_tbl,
3270 x_Line_price_Att_tbl => x_Line_price_Att_tbl,
3271 x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl ,
3272 x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl,
3273 x_Line_Payment_tbl => x_line_payment_tbl,
3274 x_Line_Payment_val_tbl => x_line_payment_val_tbl,
3275 x_Line_Scredit_tbl => x_Line_Scredit_tbl,
3276 x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl,
3277 x_Lot_Serial_tbl => x_Lot_Serial_tbl ,
3278 x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl,
3279 x_action_request_tbl =>x_action_request_tbl
3280 );
3281
3282 Retrieve_OE_Messages;
3283
3284 IF (x_return_status = FND_API.g_ret_sts_error) THEN
3285 RAISE FND_API.g_exc_error;
3286 ELSIF (x_return_status = FND_API.g_ret_sts_unexp_error) THEN
3287 RAISE FND_API.g_exc_unexpected_error;
3288 ELSIF (x_return_status = FND_API.g_ret_sts_success) THEN
3289 for i in 1..l_header_payment_out_tbl.count loop
3290 IF (l_header_payment_out_tbl(i).return_status = FND_API.g_ret_sts_error) THEN
3291 RAISE FND_API.g_exc_error;
3292 ELSIF (l_header_payment_out_tbl(i).return_status = FND_API.g_ret_sts_unexp_error) THEN
3293 RAISE FND_API.g_exc_unexpected_error;
3294 END IF;
3295 end loop;
3296 END IF;
3297
3298 -- Debug Message
3299 IF (PV_DEBUG_HIGH_ON) THEN
3300 PVX_UTILITY_PVT.debug_message('In ' || l_api_name || ' after the OE_ORDER_GRP.process_order call');
3301 END IF;
3302
3303 END LOOP;
3304
3305 FND_MSG_PUB.Count_And_Get
3306 ( p_encoded => FND_API.G_FALSE,
3307 p_count => x_msg_count,
3308 p_data => x_msg_data
3309 );
3310
3311 IF FND_API.to_Boolean( p_commit ) THEN
3312 COMMIT WORK;
3313 END IF;
3314
3315 EXCEPTION
3316 WHEN FND_API.G_EXC_ERROR THEN
3317 ROLLBACK;
3318 x_return_status := FND_API.G_RET_STS_ERROR;
3319 FND_MSG_PUB.Count_And_Get (
3320 p_encoded => FND_API.G_FALSE
3321 ,p_count => x_msg_count
3322 ,p_data => x_msg_data
3323 );
3324
3325
3326 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3327 ROLLBACK;
3328 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3329 -- Standard call to get message count and if count=1, get the message
3330 FND_MSG_PUB.Count_And_Get (
3331 p_encoded => FND_API.G_FALSE
3332 ,p_count => x_msg_count
3333 ,p_data => x_msg_data
3334 );
3335
3336 WHEN OTHERS THEN
3337 ROLLBACK;
3338 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3339 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
3340 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3341 END IF;
3342 FND_MSG_PUB.Count_And_Get (
3343 p_encoded => FND_API.G_FALSE
3344 ,p_count => x_msg_count
3345 ,p_data => x_msg_data
3346 );
3347
3348 END set_vad_payment_info;
3349
3350 END PV_ORDER_MGMT_PVT;