DBA Data[Home] [Help]

PACKAGE BODY: APPS.OZF_FUND_UTILIZED_PUB

Source


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;