DBA Data[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;