1 PACKAGE BODY OZF_FUND_UTILIZED_PUB AS
2 /* $Header: OZFPFUTB.pls 120.6 2008/03/18 05:19:54 psomyaju ship $ */
3
4 g_pkg_name CONSTANT VARCHAR2(30) := 'OZF_FUND_UTILIZED_PUB';
5 G_DEBUG BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
6
7 ---------------------------------------------------------------------
8 -- PROCEDURE
9 -- Validate_Items
10 --
11 -- PURPOSE
12 -- Validate adjustment record.
13 --
14 -- PARAMETERS
15 -- p_adj_rec: adjustment record to be validated
16 -- x_return_status: return status
17 --
18 -- HISTORY
19 -- 04/05/2005 kdass Created
20 -- 03/14/2005 psomyaju ER-6858324
21 ---------------------------------------------------------------------
22 PROCEDURE Validate_Items (
23 p_adj_rec IN OUT NOCOPY OZF_FUND_UTILIZED_PUB.adjustment_rec_type
24 ,x_return_status OUT NOCOPY VARCHAR2
25 )
26 IS
27 l_api_name VARCHAR(30) := 'Validate_Items';
28 l_fund_exists NUMBER := NULL;
29 l_fund_id NUMBER := NULL;
30 l_activity_id NUMBER := NULL;
31 l_valid_csch NUMBER := NULL;
32 l_valid_scantype_id NUMBER := NULL;
33 l_cust_type NUMBER := NULL;
34 l_dummy NUMBER := 0;
35
36 CURSOR c_fund_exists (p_fund_id IN NUMBER) IS
37 SELECT 1
38 FROM ozf_funds_all_b
39 WHERE fund_id = p_fund_id;
40
41 CURSOR c_fund_num_exists (p_fund_num IN VARCHAR2) IS
42 SELECT fund_id
43 FROM ozf_funds_all_b
44 WHERE fund_number = p_fund_num;
45
46 CURSOR c_valid_campaign (p_activity_id IN NUMBER) IS
47 SELECT campaign_id
48 FROM ams_campaigns_vl
49 WHERE active_flag = 'Y'
50 AND show_campaign_flag = 'Y'
51 AND campaign_id = p_activity_id;
52
53 CURSOR c_valid_event (p_activity_id IN NUMBER, p_approver_id IN NUMBER) IS
54 SELECT event.event_header_id
55 FROM ams_event_headers_vl event,
56 jtf_loc_hierarchies_vl loc,
57 ams_act_access_denorm acc
58 WHERE loc.location_type_code = 'COUNTRY'
59 AND event.active_flag='Y'
60 AND event.event_level='MAIN'
61 AND event.event_standalone_flag='N'
62 AND event.user_status_id NOT IN (6,9,7,27)
63 AND TO_NUMBER(event.country_code) = loc.location_hierarchy_id
64 AND acc.object_type = 'EVEH'
65 AND acc.object_id = event.event_header_id
66 AND acc.resource_id = p_approver_id
67 AND event.event_header_id = p_activity_id;
68
69 CURSOR c_valid_deliverable (p_activity_id IN NUMBER) IS
70 SELECT b.deliverable_id
71 FROM ams_deliverables_all_b b,
72 ams_deliverables_all_tl tl,
73 jtf_loc_hierarchies_vl c
74 WHERE c.location_type_code = 'COUNTRY'
75 AND b.active_flag='Y'
76 AND c.location_hierarchy_id = b.country_id
77 AND b.deliverable_id = tl.deliverable_id
78 AND tl.language =userenv('LANG')
79 AND b.deliverable_id = p_activity_id;
80
81 CURSOR c_valid_offer (p_activity_id IN NUMBER) IS
82 SELECT qp_list_header_id
83 FROM ozf_offers
84 WHERE qp_list_header_id = p_activity_id;
85
86 CURSOR c_valid_csch (p_activity_id IN NUMBER) IS
87 SELECT 1
88 FROM ams_campaign_schedules_vl
89 WHERE campaign_id = p_activity_id;
90
91 CURSOR c_valid_cust_type (p_cust_type IN VARCHAR2) IS
92 SELECT 1
93 FROM ozf_lookups
94 WHERE lookup_type = 'OZF_VO_CUSTOMER_TYPES'
95 AND enabled_flag = 'Y'
96 AND lookup_code = p_cust_type;
97
98 CURSOR c_cust_id_buyer (p_cust_id IN NUMBER) IS
99 SELECT max(cust_account_id)
100 FROM hz_cust_accounts
101 WHERE party_id = p_cust_id
102 AND status= 'A';
103
104 CURSOR c_cust_id_billto (p_cust_id IN NUMBER) IS
105 SELECT hzas.cust_account_id
106 FROM hz_cust_site_uses_all hzs,
107 hz_cust_acct_sites_all hzas
108 WHERE hzs.cust_acct_site_id = hzas.cust_acct_site_id
109 AND hzs.site_use_id = p_cust_id;
110
111 CURSOR c_cust_id_shipto (p_cust_id IN NUMBER) IS
112 SELECT hzas.cust_account_id, hzs.bill_to_site_use_id
113 FROM hz_cust_site_uses_all hzs,
114 hz_cust_acct_sites_all hzas
115 WHERE hzs.cust_acct_site_id = hzas.cust_acct_site_id
116 AND hzs.site_use_id = p_cust_id;
117
118 CURSOR c_valid_scantype_id (p_activity_id IN NUMBER, p_scan_type_id IN NUMBER) IS
119 SELECT 1
120 FROM ams_media_channels_vl med, ozf_offers off
121 WHERE med.media_id = off.activity_media_id(+)
122 AND qp_list_header_id = p_activity_id
123 AND channel_id = p_scan_type_id;
124
125 --08-MAY-2006 kdass bug 5199585 SQL ID# 17777526 - added last condition so that table uses index
126 CURSOR c_valid_prod_family (p_prod_name IN VARCHAR2) IS
127 SELECT category_id
128 FROM eni_prod_den_hrchy_parents_v
129 WHERE category_desc = p_prod_name
130 AND NVL(category_id, 0) = category_id;
131
132 CURSOR c_valid_product (p_prod_name IN VARCHAR2, p_org_id IN NUMBER) IS
133 SELECT inventory_item_id
134 FROM mtl_system_items_kfv
135 WHERE organization_id = p_org_id
136 AND trim(padded_concatenated_segments) = p_prod_name;
137
138 CURSOR c_adj_type_id (p_adj_type IN VARCHAR2) IS
139 SELECT max(claim_type_id)
140 FROM ozf_claim_types_all_vl
141 WHERE adjustment_type = p_adj_type
142 AND claim_class = 'ADJ'
143 AND claim_type_id > -1;
144
145 CURSOR c_approver_id (p_fund_id IN NUMBER) IS
146 SELECT owner
147 FROM ozf_funds_all_vl
148 WHERE fund_id = p_fund_id;
149
150 CURSOR c_curr_code (p_fund_id IN NUMBER) IS
151 SELECT currency_code_tc
152 FROM ozf_funds_all_b
153 WHERE fund_id = p_fund_id;
154
155 --Order_Line_Id validation added for ER-6858324
156 CURSOR c_order_line (p_order_line_id IN NUMBER) IS
157 SELECT 1
158 FROM oe_order_headers_all a
159 , oe_order_lines_all b
160 WHERE b.line_id = p_order_line_id
161 AND a.header_id = b.header_id;
162
163 BEGIN
164
165 --check if the fund id or fund number is valid
166 IF p_adj_rec.fund_id <> fnd_api.g_miss_num AND p_adj_rec.fund_id IS NOT NULL THEN
167 --check if the input fund_id is valid
168 OPEN c_fund_exists (p_adj_rec.fund_id);
169 FETCH c_fund_exists INTO l_fund_exists;
170 CLOSE c_fund_exists;
171
172 IF l_fund_exists IS NULL THEN
173 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
174 fnd_message.set_name('OZF', 'OZF_INVALID_FUND_ID');
175 fnd_msg_pub.add;
176 END IF;
177 x_return_status := fnd_api.g_ret_sts_error;
178 RETURN;
179 END IF;
180 ELSIF p_adj_rec.fund_number <> fnd_api.g_miss_num AND p_adj_rec.fund_number IS NOT NULL THEN
181 --check if the input fund_number is valid
182 OPEN c_fund_num_exists (p_adj_rec.fund_number);
183 FETCH c_fund_num_exists INTO l_fund_id;
184 CLOSE c_fund_num_exists;
185
186 IF l_fund_id IS NOT NULL THEN
187 p_adj_rec.fund_id := l_fund_id;
188 ELSE
189 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
190 fnd_message.set_name('OZF', 'OZF_INVALID_FUND_NUM');
191 fnd_msg_pub.add;
192 END IF;
193 x_return_status := fnd_api.g_ret_sts_error;
194 RETURN;
195 END IF;
196 END IF;
197
198 IF p_adj_rec.adjustment_type = fnd_api.g_miss_char OR p_adj_rec.adjustment_type IS NULL THEN
199 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
200 fnd_message.set_name('OZF', 'OZF_FUND_NO_ADJ_TYPE');
201 fnd_msg_pub.add;
202 END IF;
203 x_return_status := fnd_api.g_ret_sts_error;
204 RETURN;
205 END IF;
206
207 IF p_adj_rec.adjustment_type NOT IN ('DECREASE_COMM_EARNED', 'DECREASE_COMMITTED', 'DECREASE_EARNED',
208 'STANDARD', 'DECREASE_PAID', 'INCREASE_PAID') THEN
209 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
210 fnd_message.set_name('OZF', 'OZF_INVALID_ADJ_TYPE');
211 fnd_msg_pub.add;
212 END IF;
213 x_return_status := fnd_api.g_ret_sts_error;
214 RETURN;
215 END IF;
216
217 mo_global.init('OZF');
218
219 OPEN c_adj_type_id(p_adj_rec.adjustment_type);
220 FETCH c_adj_type_id INTO p_adj_rec.adjustment_type_id;
221 CLOSE c_adj_type_id;
222
223 IF p_adj_rec.amount = fnd_api.g_miss_num OR p_adj_rec.amount IS NULL THEN
224 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
225 fnd_message.set_name('OZF', 'OZF_FUND_NO_ADJ_AMT');
226 fnd_msg_pub.add;
227 END IF;
228 x_return_status := fnd_api.g_ret_sts_error;
229 RETURN;
230 END IF;
231
232 IF p_adj_rec.fund_id IS NOT NULL THEN
233 OPEN c_curr_code(p_adj_rec.fund_id);
234 FETCH c_curr_code INTO p_adj_rec.currency_code;
235 CLOSE c_curr_code;
236 END IF;
237
238 IF p_adj_rec.activity_type NOT IN ('CAMP', 'DELV', 'EVEH', 'OFFR') THEN
239 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
240 fnd_message.set_name('OZF', 'OZF_INVALID_ACTIVITY_TYPE');
241 fnd_msg_pub.add;
242 END IF;
243 x_return_status := fnd_api.g_ret_sts_error;
244 RETURN;
245 END IF;
246
247 IF p_adj_rec.activity_type = 'CAMP' THEN
248 OPEN c_valid_campaign (p_adj_rec.activity_id);
249 FETCH c_valid_campaign INTO l_activity_id;
250 CLOSE c_valid_campaign;
251 ELSIF p_adj_rec.activity_type = 'DELV' THEN
252 OPEN c_valid_deliverable (p_adj_rec.activity_id);
253 FETCH c_valid_deliverable INTO l_activity_id;
254 CLOSE c_valid_deliverable;
255 ELSIF p_adj_rec.activity_type = 'EVEH' THEN
256 OPEN c_valid_event (p_adj_rec.activity_id, p_adj_rec.approver_id);
257 FETCH c_valid_event INTO l_activity_id;
258 CLOSE c_valid_event;
259 ELSIF p_adj_rec.activity_type = 'OFFR' THEN
260 OPEN c_valid_offer (p_adj_rec.activity_id);
261 FETCH c_valid_offer INTO l_activity_id;
262 CLOSE c_valid_offer;
263 END IF;
264
265 IF l_activity_id IS NULL THEN
266 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
267 fnd_message.set_name('OZF', 'OZF_INVALID_ACTIVITY_ID');
268 fnd_msg_pub.add;
269 END IF;
270 x_return_status := fnd_api.g_ret_sts_error;
271 RETURN;
272 END IF;
273
274
275 IF p_adj_rec.activity_type = 'CAMP' AND p_adj_rec.camp_schedule_id <> fnd_api.g_miss_num
276 AND p_adj_rec.camp_schedule_id IS NOT NULL THEN
277
278 OPEN c_valid_csch (p_adj_rec.activity_id);
279 FETCH c_valid_csch INTO l_valid_csch;
280 CLOSE c_valid_csch;
281
282 IF l_valid_csch IS NULL THEN
283 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
284 fnd_message.set_name('OZF', 'OZF_INVALID_CSCH_ID');
285 fnd_msg_pub.add;
286 END IF;
287 x_return_status := fnd_api.g_ret_sts_error;
288 RETURN;
289 END IF;
290 END IF;
291
292 IF p_adj_rec.customer_type <> fnd_api.g_miss_char AND p_adj_rec.customer_type IS NOT NULL THEN
293
294 OPEN c_valid_cust_type (p_adj_rec.customer_type);
295 FETCH c_valid_cust_type INTO l_cust_type;
296 CLOSE c_valid_cust_type;
297
298 IF l_cust_type IS NULL THEN
299 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
300 fnd_message.set_name('OZF', 'OZF_INVALID_CUST_TYPE');
301 fnd_msg_pub.add;
302 END IF;
303 x_return_status := fnd_api.g_ret_sts_error;
304 RETURN;
305 END IF;
306
307 IF p_adj_rec.customer_type = 'CUSTOMER' THEN
308 p_adj_rec.cust_account_id := p_adj_rec.cust_id;
309 p_adj_rec.bill_to_site_use_id := NULL;
310 p_adj_rec.ship_to_site_use_id := NULL;
311 ELSIF p_adj_rec.customer_type = 'BUYER' THEN
312
313 OPEN c_cust_id_buyer (p_adj_rec.cust_id);
314 FETCH c_cust_id_buyer INTO p_adj_rec.cust_account_id;
315 CLOSE c_cust_id_buyer;
316
317 p_adj_rec.bill_to_site_use_id := NULL;
318 p_adj_rec.ship_to_site_use_id := NULL;
319 ELSIF p_adj_rec.customer_type = 'CUSTOMER_BILL_TO' THEN
320
321 OPEN c_cust_id_billto (p_adj_rec.cust_id);
322 FETCH c_cust_id_billto INTO p_adj_rec.cust_account_id;
323 CLOSE c_cust_id_billto;
324
325 p_adj_rec.bill_to_site_use_id := p_adj_rec.cust_id;
326 p_adj_rec.ship_to_site_use_id := NULL;
327 ELSIF p_adj_rec.customer_type = 'SHIP_TO' THEN
328
329 OPEN c_cust_id_shipto (p_adj_rec.cust_id);
330 FETCH c_cust_id_shipto INTO p_adj_rec.cust_account_id, p_adj_rec.bill_to_site_use_id;
331 CLOSE c_cust_id_shipto;
332
333 p_adj_rec.ship_to_site_use_id := p_adj_rec.cust_id;
334 END IF;
335
336 IF p_adj_rec.cust_account_id = fnd_api.g_miss_num OR p_adj_rec.cust_account_id IS NULL THEN
337
338 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
339 fnd_message.set_name('OZF', 'OZF_INVALID_CUST_ID');
340 fnd_msg_pub.add;
341 END IF;
342 x_return_status := fnd_api.g_ret_sts_error;
343 RETURN;
344 END IF;
345
346 END IF;
347
348 IF p_adj_rec.document_type <> fnd_api.g_miss_char AND p_adj_rec.document_type IS NOT NULL THEN
349 IF p_adj_rec.document_type NOT IN ('INVOICE', 'ORDER', 'PCHO', 'TP_ORDER') THEN
350
351 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
352 fnd_message.set_name('OZF', 'OZF_INVALID_DOCUMENT_TYPE');
353 fnd_msg_pub.add;
354 END IF;
355 x_return_status := fnd_api.g_ret_sts_error;
356 RETURN;
357 END IF;
358
359 IF p_adj_rec.document_number = fnd_api.g_miss_num OR p_adj_rec.document_number IS NULL THEN
360
361 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
362 fnd_message.set_name('OZF', 'OZF_NO_DOCUMENT_NUM');
363 fnd_msg_pub.add;
364 END IF;
365 x_return_status := fnd_api.g_ret_sts_error;
366 RETURN;
367 END IF;
368 END IF;
369
370 -- for SCAN_DATA type of offer
371 IF p_adj_rec.scan_type_id <> fnd_api.g_miss_num AND p_adj_rec.scan_type_id IS NOT NULL THEN
372
373 OPEN c_valid_scantype_id (p_adj_rec.activity_id, p_adj_rec.scan_type_id);
374 FETCH c_valid_scantype_id INTO l_valid_scantype_id;
375 CLOSE c_valid_scantype_id;
376
377 IF l_valid_scantype_id IS NULL THEN
378 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
379 fnd_message.set_name('OZF', 'OZF_INVALID_SCANTYPE_ID');
380 fnd_msg_pub.add;
381 END IF;
382 x_return_status := fnd_api.g_ret_sts_error;
383 RETURN;
384 END IF;
385 END IF;
386
387 IF p_adj_rec.activity_type = 'OFFR' THEN
388 IF p_adj_rec.product_level_type <> fnd_api.g_miss_char AND p_adj_rec.product_level_type IS NOT NULL THEN
389
390 IF p_adj_rec.product_level_type NOT IN ('FAMILY', 'PRODUCT') THEN
391 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
392 fnd_message.set_name('OZF', 'OZF_INVALID_PROD_LEVEL');
393 fnd_msg_pub.add;
394 END IF;
395 x_return_status := fnd_api.g_ret_sts_error;
396 RETURN;
397 END IF;
398
399 IF G_DEBUG THEN
400 ozf_utility_pvt.debug_message('p_adj_rec.product_id: ' || p_adj_rec.product_id);
401 ozf_utility_pvt.debug_message('p_adj_rec.product_name: ' || p_adj_rec.product_name);
402 ozf_utility_pvt.debug_message('p_adj_rec.org_id: ' || p_adj_rec.org_id);
403 END IF;
404
405 IF p_adj_rec.product_name = fnd_api.g_miss_char OR p_adj_rec.product_name IS NULL THEN
406 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
407 fnd_message.set_name('OZF', 'OZF_NO_PROD_NAME');
408 fnd_msg_pub.add;
409 END IF;
410 x_return_status := fnd_api.g_ret_sts_error;
411 RETURN;
412 ELSE
413 IF p_adj_rec.product_level_type = 'FAMILY' THEN
414 OPEN c_valid_prod_family (p_adj_rec.product_name);
415 FETCH c_valid_prod_family INTO p_adj_rec.product_id;
416 CLOSE c_valid_prod_family;
417 ELSIF p_adj_rec.product_level_type = 'PRODUCT' THEN
418 OPEN c_valid_product (p_adj_rec.product_name, p_adj_rec.org_id);
419 FETCH c_valid_product INTO p_adj_rec.product_id;
420 CLOSE c_valid_product;
421 END IF;
422
423 IF p_adj_rec.product_id IS NULL THEN
424 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
425 fnd_message.set_name('OZF', 'OZF_INVALID_PROD');
426 fnd_msg_pub.add;
427 END IF;
428 x_return_status := fnd_api.g_ret_sts_error;
429 RETURN;
430 END IF;
431 END IF;
432 END IF;
433 ELSE
434 p_adj_rec.product_level_type := NULL;
435 p_adj_rec.product_id := NULL;
436 END IF;
437
438 IF p_adj_rec.adjustment_type IN ('INCREASE_PAID', 'DECREASE_PAID') THEN
439 IF p_adj_rec.gl_account_credit = fnd_api.g_miss_num OR p_adj_rec.gl_account_credit IS NULL THEN
440 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
441 fnd_message.set_name('OZF', 'OZF_NO_GL_CREDIT_ACCT');
442 fnd_msg_pub.add;
443 END IF;
444 x_return_status := fnd_api.g_ret_sts_error;
445 RETURN;
446 END IF;
447
448 IF p_adj_rec.gl_account_debit = fnd_api.g_miss_num OR p_adj_rec.gl_account_debit IS NULL THEN
449 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
450 fnd_message.set_name('OZF', 'OZF_NO_GL_DEBIT_ACCT');
451 fnd_msg_pub.add;
452 END IF;
453 x_return_status := fnd_api.g_ret_sts_error;
454 RETURN;
455 END IF;
456 END IF;
457
458 OPEN c_approver_id (p_adj_rec.fund_id);
459 FETCH c_approver_id INTO p_adj_rec.approver_id;
460 CLOSE c_approver_id;
461
462 IF p_adj_rec.skip_acct_gen_flag <> fnd_api.g_miss_char AND p_adj_rec.skip_acct_gen_flag IS NOT NULL THEN
463
464 IF p_adj_rec.skip_acct_gen_flag NOT IN ('F', 'T') THEN
465 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
466 fnd_message.set_name('OZF', 'OZF_INVALID_ACCT_GEN_FLAG');
467 fnd_msg_pub.add;
468 END IF;
469 x_return_status := fnd_api.g_ret_sts_error;
470 RETURN;
471 END IF;
472 END IF;
473
474 --Order_Line_Id validation added by Pranay/29.02.08
475 IF p_adj_rec.order_line_id <> fnd_api.g_miss_num AND p_adj_rec.order_line_id IS NOT NULL THEN
476 OPEN c_order_line(p_adj_rec.order_line_id);
477 FETCH c_order_line INTO l_dummy;
478 IF c_order_line%NOTFOUND THEN
479 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
480 fnd_message.set_name('OZF', 'OZF_INVALID_ORDER_LINE');
481 fnd_msg_pub.add;
482 END IF;
483 x_return_status := fnd_api.g_ret_sts_error;
484 RETURN;
485 END IF;
486 CLOSE c_order_line;
487 END IF;
488 END Validate_Items;
489
490 ---------------------------------------------------------------------
491 -- PROCEDURE
492 -- Create_Fund_Adjustment
493 --
494 -- PURPOSE
495 -- Create fund adjustment.
496 --
497 -- PARAMETERS
498 -- p_adj_rec: the new record to be inserted
499 --
500 -- HISTORY
501 -- 04/05/2005 kdass Created
502 -- 03/14/2008 psomyaju ER-6858324
503 ---------------------------------------------------------------------
504 PROCEDURE Create_Fund_Adjustment(
505 p_api_version IN NUMBER
506 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
507 ,p_commit IN VARCHAR2 := fnd_api.g_false
508 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
509 ,p_adj_rec IN OZF_FUND_UTILIZED_PUB.adjustment_rec_type
510 ,x_return_status OUT NOCOPY VARCHAR2
511 ,x_msg_count OUT NOCOPY NUMBER
512 ,x_msg_data OUT NOCOPY VARCHAR2
513 )
514 IS
515 l_api_name VARCHAR(30) := 'Create_Fund_Adjustment';
516 l_act_budgets_rec ozf_actbudgets_pvt.act_budgets_rec_type;
517 l_act_util_rec ozf_actbudgets_pvt.act_util_rec_type;
518 l_act_budget_util_rec ozf_actbudgets_pvt.act_budgets_rec_type;
519 l_parent_src_tbl ozf_fund_adjustment_pvt.parent_src_tbl_type;
520 l_accrual_flag NUMBER := 0;
521 l_adj_type_id NUMBER;
522 l_flagDecCommitted BOOLEAN := TRUE; -- flag for adjustment type DECREASE_COMM_EARNED
523 l_adj_rec OZF_FUND_UTILIZED_PUB.adjustment_rec_type := p_adj_rec;
524 l_api_version NUMBER := p_api_version;
525 l_init_msg_list VARCHAR2(100) := p_init_msg_list;
526 l_validation_level NUMBER := p_validation_level;
527 l_act_budget_id NUMBER;
528 l_utilized_amount NUMBER;
529 l_fund_id NUMBER;
530 l_gl_posted_flag VARCHAR2(1);
531
532 CURSOR c_fund_type (p_fund_id IN NUMBER) IS
533 SELECT 1 FROM ozf_funds_all_b
534 WHERE fund_id = p_fund_id
535 AND fund_type = 'FULLY_ACCRUED'
536 AND accrual_basis= 'CUSTOMER'
537 AND liability_flag= 'Y';
538
539 CURSOR c_org_order (p_doc_number IN NUMBER) IS
540 SELECT org_id
541 FROM oe_order_headers_all
542 WHERE header_id = p_doc_number;
543
544 CURSOR c_org_fund (p_fund_id IN NUMBER) IS
545 SELECT org_id
546 FROM ozf_funds_all_b
547 WHERE fund_id = p_fund_id;
548
549 CURSOR c_orig_util_id (p_activity_id IN NUMBER, p_activity_type IN VARCHAR2,
550 p_fund_id IN NUMBER, p_product_id IN NUMBER, p_cust_acct_id IN NUMBER) IS
551 SELECT utilization_id, NVL(gl_posted_flag,'N')
552 FROM ozf_funds_utilized_all_b
553 WHERE plan_id = p_activity_id
554 AND plan_type = p_activity_type
555 AND fund_id = p_fund_id
556 AND NVL(product_id,0) = NVL(p_product_id,0)
557 AND NVL(cust_account_id,0) = NVL(p_cust_acct_id,0)
558 AND utilization_type NOT IN ('REQUEST', 'TRANSFER');
559
560 BEGIN
561 SAVEPOINT Create_Fund_Adjustment;
562
563 IF l_adj_rec.fund_id IS NULL THEN
564
565 IF l_adj_rec.currency_code = fnd_api.g_miss_char OR l_adj_rec.currency_code IS NULL THEN
566 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
567 fnd_message.set_name('OZF', 'OZF_FUND_NO_CURR_CODE');
568 fnd_msg_pub.add;
569 END IF;
570 RAISE fnd_api.g_exc_error;
571 END IF;
572
573 --get the budgets from which the object is sourcing to post the adjustment amount proportionately
574 ozf_fund_adjustment_pvt.get_parent_src(p_budget_source_type => l_adj_rec.activity_type
575 ,p_budget_source_id => l_adj_rec.activity_id
576 ,p_amount => l_adj_rec.amount
577 ,p_req_curr => l_adj_rec.currency_code
578 ,x_return_status => x_return_status
579 ,x_parent_src_tbl => l_parent_src_tbl
580 );
581
582 IF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
583 RAISE fnd_api.g_exc_unexpected_error;
584 ELSIF x_return_status = fnd_api.g_ret_sts_error THEN
585 RAISE fnd_api.g_exc_error;
586 END IF;
587
588 IF G_DEBUG THEN
589 ozf_utility_pvt.debug_message('l_parent_src_tbl.count: ' || l_parent_src_tbl.count);
590 END IF;
591
592 --check the number of records returned by l_parent_src_tbl. if no records returned, raise exception
593 IF l_parent_src_tbl.count > 0 THEN
594 l_fund_id := l_parent_src_tbl (1).fund_id;
595 ELSE
596 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
597 fnd_message.set_name('OZF', 'OZF_NO_SRC_BUDGETS');
598 fnd_msg_pub.add;
599 END IF;
600 RAISE fnd_api.g_exc_error;
601 END IF;
602
603 END IF;
604
605 --get the org_id
606 IF l_adj_rec.org_id = fnd_api.g_miss_num OR l_adj_rec.org_id IS NULL THEN
607 IF l_adj_rec.document_type = 'ORDER' THEN
608 OPEN c_org_order (l_adj_rec.document_number);
609 FETCH c_org_order INTO l_adj_rec.org_id;
610 CLOSE c_org_order;
611 ELSE
612 OPEN c_org_fund (NVL(l_adj_rec.fund_id,l_fund_id));
613 FETCH c_org_fund INTO l_adj_rec.org_id;
614 CLOSE c_org_fund;
615 END IF;
616 END IF;
617
618 validate_items(p_adj_rec => l_adj_rec
619 ,x_return_status => x_return_status);
620
621 IF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
622 RAISE fnd_api.g_exc_unexpected_error;
623 ELSIF x_return_status = fnd_api.g_ret_sts_error THEN
624 RAISE fnd_api.g_exc_error;
625 END IF;
626
627 l_act_util_rec.adjustment_type_id := l_adj_rec.adjustment_type_id;
628 l_act_util_rec.adjustment_type := l_adj_rec.adjustment_type;
629 l_act_util_rec.adjustment_date := l_adj_rec.adjustment_date;
630 l_act_util_rec.gl_date := l_adj_rec.gl_date;
631 l_act_util_rec.gl_account_credit := l_adj_rec.gl_account_credit;
632 l_act_util_rec.gl_account_debit := l_adj_rec.gl_account_debit;
633 l_act_util_rec.camp_schedule_id := l_adj_rec.camp_schedule_id;
634 l_act_util_rec.object_type := l_adj_rec.document_type;
635 l_act_util_rec.object_id := l_adj_rec.document_number;
636 l_act_util_rec.product_level_type := l_adj_rec.product_level_type;
637 l_act_util_rec.product_id := l_adj_rec.product_id;
638 l_act_util_rec.cust_account_id := l_adj_rec.cust_account_id;
639 l_act_util_rec.bill_to_site_use_id := l_adj_rec.bill_to_site_use_id;
640 l_act_util_rec.ship_to_site_use_id := l_adj_rec.ship_to_site_use_id;
641 l_act_budgets_rec.justification := fnd_message.get_string ('OZF', 'OZF_ADJ_PUB_API');
642 l_act_budgets_rec.budget_source_type := l_adj_rec.activity_type;
643 l_act_budgets_rec.budget_source_id := l_adj_rec.activity_id;
644 l_act_budgets_rec.transaction_type := 'DEBIT';
645 l_act_budgets_rec.request_currency := l_adj_rec.currency_code;
646 l_act_budgets_rec.request_amount := l_adj_rec.amount;
647 l_act_budgets_rec.status_code := 'APPROVED';
648 l_act_budgets_rec.approver_id := l_adj_rec.approver_id;
649 g_skip_acct_gen_flag := l_adj_rec.skip_acct_gen_flag;
650
651 --DFFs/order_line_id added for ER-6858324
652 l_act_util_rec.order_line_id := l_adj_rec.order_line_id;
653 l_act_util_rec.attribute_category := l_adj_rec.attribute_category;
654 l_act_util_rec.attribute1 := l_adj_rec.attribute1;
655 l_act_util_rec.attribute2 := l_adj_rec.attribute2;
656 l_act_util_rec.attribute3 := l_adj_rec.attribute3;
657 l_act_util_rec.attribute4 := l_adj_rec.attribute4;
658 l_act_util_rec.attribute5 := l_adj_rec.attribute5;
659 l_act_util_rec.attribute6 := l_adj_rec.attribute6;
660 l_act_util_rec.attribute7 := l_adj_rec.attribute7;
661 l_act_util_rec.attribute8 := l_adj_rec.attribute8;
662 l_act_util_rec.attribute9 := l_adj_rec.attribute9;
663 l_act_util_rec.attribute10 := l_adj_rec.attribute10;
664 l_act_util_rec.attribute11 := l_adj_rec.attribute11;
665 l_act_util_rec.attribute12 := l_adj_rec.attribute12;
666 l_act_util_rec.attribute13 := l_adj_rec.attribute13;
667 l_act_util_rec.attribute14 := l_adj_rec.attribute14;
668 l_act_util_rec.attribute15 := l_adj_rec.attribute15;
669
670 -- if adjustment type is 'Decrease Committed and Earned Amounts'
671 IF l_act_util_rec.adjustment_type = 'DECREASE_COMM_EARNED' THEN
672 l_act_budgets_rec.transfer_type := 'TRANSFER';
673 l_act_budgets_rec.act_budget_used_by_id := l_adj_rec.fund_id;
674 l_act_budgets_rec.arc_act_budget_used_by := 'FUND';
675 l_act_budget_util_rec.justification := l_act_budgets_rec.justification;
676 l_act_budget_util_rec.budget_source_type := l_act_budgets_rec.budget_source_type;
677 l_act_budget_util_rec.budget_source_id := l_act_budgets_rec.budget_source_id;
678 l_act_budget_util_rec.transaction_type := l_act_budgets_rec.transaction_type;
679 l_act_budget_util_rec.request_currency := l_act_budgets_rec.request_currency;
680 l_act_budget_util_rec.request_amount := l_act_budgets_rec.request_amount;
681 l_act_budget_util_rec.status_code := l_act_budgets_rec.status_code;
682 l_act_budget_util_rec.approver_id := l_act_budgets_rec.approver_id;
683 l_act_budget_util_rec.transfer_type := 'UTILIZED';
684 l_act_budget_util_rec.act_budget_used_by_id := l_act_budgets_rec.budget_source_id;
685 l_act_budget_util_rec.arc_act_budget_used_by := l_act_budgets_rec.budget_source_type;
686 l_act_util_rec.utilization_type := 'ADJUSTMENT';
687 l_act_budget_util_rec.parent_source_id := l_adj_rec.fund_id;
688 l_act_budget_util_rec.parent_src_curr := l_act_budgets_rec.request_currency;
689 l_act_budget_util_rec.parent_src_apprvd_amt := l_act_budgets_rec.request_amount;
690
691 -- for customer fully accrual budget with liability flag on, do not decrease committed in java,
692 -- instead let pl/sql api handle it along with other cases
693 OPEN c_fund_type(l_adj_rec.fund_id);
694 FETCH c_fund_type INTO l_accrual_flag;
695 CLOSE c_fund_type;
696
697 IF l_accrual_flag = 1 THEN
698 l_flagDecCommitted := FALSE;
699 END IF;
700
701 IF l_adj_rec.fund_id IS NOT NULL THEN
702
703 ozf_fund_utilized_pvt.create_act_utilization(p_api_version => l_api_version
704 ,p_init_msg_list => l_init_msg_list
705 ,p_validation_level => l_validation_level
706 ,x_return_status => x_return_status
707 ,x_msg_count => x_msg_count
708 ,x_msg_data => x_msg_data
709 ,p_act_budgets_rec => l_act_budget_util_rec
710 ,p_act_util_rec => l_act_util_rec
711 ,x_act_budget_id => l_act_budget_id
712 );
713 ELSE --if fund id is null, then post proportionately to the budgets which the offer is sourcing from
714 FOR i IN NVL (l_parent_src_tbl.FIRST, 1) .. NVL (l_parent_src_tbl.LAST, 0)
715 LOOP
716 l_act_budgets_rec.act_budget_used_by_id := l_parent_src_tbl (i).fund_id;
717 l_act_budget_util_rec.request_currency := l_parent_src_tbl (i).fund_curr;
718 l_act_budget_util_rec.request_amount := l_parent_src_tbl (i).fund_amount;
719 l_act_budget_util_rec.parent_source_id := l_parent_src_tbl (i).fund_id;
720
721 ozf_fund_utilized_pvt.create_act_utilization(p_api_version => l_api_version
722 ,p_init_msg_list => l_init_msg_list
723 ,p_validation_level => l_validation_level
724 ,x_return_status => x_return_status
725 ,x_msg_count => x_msg_count
726 ,x_msg_data => x_msg_data
727 ,p_act_budgets_rec => l_act_budget_util_rec
728 ,p_act_util_rec => l_act_util_rec
729 ,x_act_budget_id => l_act_budget_id
730 );
731 END LOOP;
732
733 END IF;
734
735 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
736 RAISE FND_API.g_exc_unexpected_error;
737 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
738 RAISE FND_API.g_exc_unexpected_error;
739 END IF;
740
741 --reset utilization_type for decrease committed amount
742 l_act_util_rec.utilization_type := NULL;
743
744 -- if adjustment type is 'Decrease Committed Amount'
745 ELSIF l_act_util_rec.adjustment_type = 'DECREASE_COMMITTED' THEN
746 l_act_util_rec.utilization_type := null;
747 l_act_budgets_rec.transfer_type := 'TRANSFER';
748 l_act_budgets_rec.act_budget_used_by_id := l_adj_rec.fund_id;
749 l_act_budgets_rec.arc_act_budget_used_by := 'FUND';
750
751 -- if adjustment type is 'Increase Earned Amount' (STANDARD) or 'Decrease Earned Amount' (DECREASE_EARNED)
752 -- or 'Increase Paid Amount' (INCREASE_PAID) or 'Decrease Paid Amount' (DECREASE_PAID)
753 ELSE
754 l_act_budgets_rec.transfer_type := 'UTILIZED';
755 l_act_budgets_rec.act_budget_used_by_id := l_act_budgets_rec.budget_source_id;
756 l_act_budgets_rec.arc_act_budget_used_by := l_act_budgets_rec.budget_source_type;
757 l_act_util_rec.utilization_type := 'ADJUSTMENT';
758 l_act_util_rec.scan_type_id := l_adj_rec.scan_type_id;
759 l_act_budgets_rec.parent_source_id := l_adj_rec.fund_id;
760 l_act_budgets_rec.parent_src_curr := l_act_budgets_rec.request_currency;
761 l_act_budgets_rec.parent_src_apprvd_amt := l_act_budgets_rec.request_amount;
762 --l_act_util_rec.orig_utilization_id := l_adj_rec.orig_utilization_id;
763 END IF;
764
765 --for all adjustment types
766 IF (l_flagDecCommitted) THEN
767
768 IF l_adj_rec.fund_id IS NOT NULL THEN
769 IF l_act_util_rec.adjustment_type NOT IN ('INCREASE_PAID', 'DECREASE_PAID') THEN
770 ozf_fund_utilized_pvt.create_act_utilization(p_api_version => l_api_version
771 ,p_init_msg_list => l_init_msg_list
772 ,p_validation_level => l_validation_level
773 ,x_return_status => x_return_status
774 ,x_msg_count => x_msg_count
775 ,x_msg_data => x_msg_data
776 ,p_act_budgets_rec => l_act_budgets_rec
777 ,p_act_util_rec => l_act_util_rec
778 ,x_act_budget_id => l_act_budget_id
779 );
780 ELSE
781
782 --get the original utilization id
783 OPEN c_orig_util_id (l_adj_rec.activity_id, l_adj_rec.activity_type, l_adj_rec.fund_id,
784 l_adj_rec.product_id, l_adj_rec.cust_account_id);
785 FETCH c_orig_util_id INTO l_act_util_rec.orig_utilization_id, l_gl_posted_flag;
786 CLOSE c_orig_util_id;
787
788 IF G_DEBUG THEN
789 ozf_utility_pvt.debug_message('orig_utilization_id: ' || l_act_util_rec.orig_utilization_id);
790 ozf_utility_pvt.debug_message('activity_id: ' || l_adj_rec.activity_id);
791 ozf_utility_pvt.debug_message('activity_type: ' || l_adj_rec.activity_type);
792 ozf_utility_pvt.debug_message('fund_id: ' || l_adj_rec.fund_id);
793 ozf_utility_pvt.debug_message('product_id: ' || l_adj_rec.product_id);
794 ozf_utility_pvt.debug_message('cust_account_id: ' || l_adj_rec.cust_account_id);
795 END IF;
796
797 IF l_act_util_rec.orig_utilization_id IS NULL THEN
798 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
799 fnd_message.set_name('OZF', 'OZF_NO_ORIG_UTIL_ID');
800 fnd_msg_pub.add;
801 END IF;
802 RAISE fnd_api.g_exc_error;
803 END IF;
804
805 --if the original utilization is not posted to GL(e.g. marketing cost, or off invoice offer
806 --where gl posting is not required), then paid adjustment should not be allowed.
807 IF l_gl_posted_flag <> 'Y' THEN
808 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
809 fnd_message.set_name('OZF', 'OZF_ADJ_PAID_NOT_ALLOWED');
810 fnd_msg_pub.add;
811 END IF;
812 RAISE fnd_api.g_exc_error;
813 END IF;
814
815 IF l_act_util_rec.adjustment_type = 'DECREASE_PAID' THEN
816 l_act_budgets_rec.parent_src_apprvd_amt := - l_act_budgets_rec.parent_src_apprvd_amt;
817 l_act_budgets_rec.request_amount := - l_act_budgets_rec.request_amount;
818 END IF;
819
820 ozf_fund_adjustment_pvt.create_fund_utilization(p_act_budget_rec => l_act_budgets_rec
821 ,x_return_status => x_return_status
822 ,x_msg_count => x_msg_count
823 ,x_msg_data => x_msg_data
824 ,p_act_util_rec => l_act_util_rec
825 ,x_utilized_amount => l_utilized_amount
826 );
827 END IF;
828 ELSE --if fund id is null, then post proportionately to the budgets which the offer is sourcing from
829
830 FOR i IN NVL (l_parent_src_tbl.FIRST, 1) .. NVL (l_parent_src_tbl.LAST, 0)
831 LOOP
832 l_act_budgets_rec.request_currency := l_parent_src_tbl (i).fund_curr;
833 l_act_budgets_rec.request_amount := l_parent_src_tbl (i).fund_amount;
834
835 IF l_adj_rec.adjustment_type IN ('DECREASE_COMM_EARNED', 'DECREASE_COMMITTED') THEN
836 l_act_budgets_rec.act_budget_used_by_id := l_parent_src_tbl (i).fund_id;
837 ELSE
838 l_act_budgets_rec.parent_src_curr := l_act_budgets_rec.request_currency;
839 l_act_budgets_rec.parent_src_apprvd_amt := l_act_budgets_rec.request_amount;
840 l_act_budgets_rec.parent_source_id := l_parent_src_tbl (i).fund_id;
841 END IF;
842
843 IF l_act_util_rec.adjustment_type NOT IN ('INCREASE_PAID', 'DECREASE_PAID') THEN
844
845 ozf_fund_utilized_pvt.create_act_utilization(p_api_version => l_api_version
846 ,p_init_msg_list => l_init_msg_list
847 ,p_validation_level => l_validation_level
848 ,x_return_status => x_return_status
849 ,x_msg_count => x_msg_count
850 ,x_msg_data => x_msg_data
851 ,p_act_budgets_rec => l_act_budgets_rec
852 ,p_act_util_rec => l_act_util_rec
853 ,x_act_budget_id => l_act_budget_id
854 );
855 ELSE
856
857 --get the original utilization id
858 OPEN c_orig_util_id (l_adj_rec.activity_id, l_adj_rec.activity_type, l_parent_src_tbl (i).fund_id,
859 l_adj_rec.product_id, l_adj_rec.cust_account_id);
860 FETCH c_orig_util_id INTO l_act_util_rec.orig_utilization_id, l_gl_posted_flag;
861 CLOSE c_orig_util_id;
862
863 IF G_DEBUG THEN
864 ozf_utility_pvt.debug_message('orig_utilization_id: ' || l_act_util_rec.orig_utilization_id);
865 ozf_utility_pvt.debug_message('activity_id: ' || l_adj_rec.activity_id);
866 ozf_utility_pvt.debug_message('activity_type: ' || l_adj_rec.activity_type);
867 ozf_utility_pvt.debug_message('fund_id: ' || l_parent_src_tbl (i).fund_id);
868 ozf_utility_pvt.debug_message('product_id: ' || l_adj_rec.product_id);
869 ozf_utility_pvt.debug_message('cust_account_id: ' || l_adj_rec.cust_account_id);
870 END IF;
871
872 IF l_act_util_rec.orig_utilization_id IS NULL THEN
873 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
874 fnd_message.set_name('OZF', 'OZF_NO_ORIG_UTIL_ID');
875 fnd_msg_pub.add;
876 END IF;
877 RAISE fnd_api.g_exc_error;
878 END IF;
879
880 --if the original utilization is not posted to GL(e.g. marketing cost, or off invoice offer
881 --where gl posting is not required), then paid adjustment should not be allowed.
882 IF l_gl_posted_flag <> 'Y' THEN
883 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
884 fnd_message.set_name('OZF', 'OZF_ADJ_PAID_NOT_ALLOWED');
885 fnd_msg_pub.add;
886 END IF;
887 RAISE fnd_api.g_exc_error;
888 END IF;
889
890 IF l_act_util_rec.adjustment_type = 'DECREASE_PAID' THEN
891 l_act_budgets_rec.parent_src_apprvd_amt := - l_act_budgets_rec.parent_src_apprvd_amt;
892 l_act_budgets_rec.request_amount := - l_act_budgets_rec.request_amount;
893 END IF;
894
895 ozf_fund_adjustment_pvt.create_fund_utilization(p_act_budget_rec => l_act_budgets_rec
896 ,x_return_status => x_return_status
897 ,x_msg_count => x_msg_count
898 ,x_msg_data => x_msg_data
899 ,p_act_util_rec => l_act_util_rec
900 ,x_utilized_amount => l_utilized_amount
901 );
902 END IF;
903 END LOOP;
904 END IF;
905
906 END IF;
907
908 IF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
909 RAISE fnd_api.g_exc_unexpected_error;
910 ELSIF x_return_status = fnd_api.g_ret_sts_error THEN
911 RAISE fnd_api.g_exc_error;
912 END IF;
913
914 FND_MSG_PUB.Count_And_Get (
915 p_encoded => FND_API.G_FALSE,
916 p_count => x_msg_count,
917 p_data => x_msg_data
918 );
919
920 EXCEPTION
921 WHEN FND_API.G_EXC_ERROR THEN
922 ROLLBACK TO Create_Fund_Adjustment;
923 x_return_status := FND_API.G_RET_STS_ERROR;
924 -- Standard call to get message count and if count=1, get the message
925 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
926 ,p_count => x_msg_count
927 ,p_data => x_msg_data
928 );
929 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
930 ROLLBACK TO Create_Fund_Adjustment;
931 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
932 -- Standard call to get message count and if count=1, get the message
933 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
934 ,p_count => x_msg_count
935 ,p_data => x_msg_data
936 );
937 WHEN OTHERS THEN
938 ROLLBACK TO Create_Fund_Adjustment;
939 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
940 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
941 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
942 END IF;
943 -- Standard call to get message count and if count=1, get the message
944 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
945 ,p_count => x_msg_count
946 ,p_data => x_msg_data
947 );
948 END Create_Fund_Adjustment;
949 --------------------------------------------------------------------
950
951 END OZF_FUND_UTILIZED_PUB;