[Home] [Help]
PACKAGE BODY: APPS.OZF_FUNDS_PVT
Source
1 PACKAGE BODY OZF_FUNDS_PVT AS
2 /* $Header: ozfvfunb.pls 120.31 2011/12/29 14:56:52 apyadav ship $ */
3 -----------------------------------------------------------
4 -- PACKAGE
5 -- OZF_Funds_PVT
6 --
7 -- PROCEDURES
8 --
9 -- Create_Fund
10 -- Delete_Fund
11 -- Lock_Fund
12 -- Update_Fund
13 -- Validate_Fund
14 --
15 -- Check_Fund_Req_Items
16 -- Check_Fund_Uk_Items
17 -- Check_Fund_Fk_Items
18 -- Check_Fund_Lookup_Items
19 -- Check_Fund_Flag_Items
20 --
21 -- Check_Fund_Items
22 -- Check_Fund_Record
23 --
24 -- Init_Fund_Rec
25 -- Complete_Fund_Rec
26 -- GET_DEFAULT_GL_INFO
27 -- HISTORY
28 -- 02/02/2000 Shitij Vatsa Create.
29 -- 06/12/2000 Mumu Pande Made all fund record validation
30 -- 06/13/2000 Mumu Pande Added all access calls
31 -- 06/15/2000 Mumu Pande Added all amount validation and status_vaidation
32 -- 07/06/2000 Mumu Pande Added accrual_type fund validations fo rR2
33 --- 07/06/2000 COMPLETE_DEFAULT_GL_INFO ADDED FOR R2 Requirements to get default GL info--- mpande
34 -- 07/28/2000 Added MC Transactions calls ,added convert_currency calls ,added 3 procedures check_fund_type_vs_child
35 -- and check_fund_dates_vs_child and check_fund_amount_vs_child
36 -- 08/03/2000 Commented out uniqueness validation on fund short_name
37 -- 08/28/2001 mpande bug#1950117
38 -- 10/11/2001 yzhao bug#2020218 publish: child budget market eligibility and product eligibility not set
39 -- 03/11/2003 feliu added copy for accrual budget.
40 -- DESCRIPTION
41 -- Amount columns in Budgets
42 -- Original budget -- When you create a budget you enter this amount and update it when fund_status is DRAFT.
43 -- You cannot update this amount once the fund status is ACTIVE
44 -- Holdback Budget -- This is like putting aside some money which wont be calculated in your avalaible budget
45 -- Available budget-- This is always a calculated amount and the formula is
46 -- (OB (Original)-HB (Holback)) +(TI(Transfer in) - TO(Transfer out))
47 -- Total Budget -- This is always a calculated amount and the formula is
48 -- (AB (Available) + HB (Holback))
49 -- 08/29/2000 mchang insert org_id value into OZF_FUNDS_ALL_TL when creating a fund.
50 -- 09/12/2000 mpande added code to facilitate team and other user update access
51 -- 09/26/2000 mpande added code to facilitate user_status
52 -- 11/30/2000 mpande BUG#1494231
53 --------------major changes for 11.5.5----------------------------------------------------------------
54 -- 1) All functionality related to statistical fund removed.
55 -- 2) Added the five columns , start_period_name, end_period_name, accrual_quantity,
56 -- accrue_to_level_id,fund_calendar
57 -- 3) Introduced new API check_fund-inter_entity
58 -- 4) Removed some of the fund rules validations to package OZFFundRulesPvt (for clarity)
59 -- 5) Removed all active fund transactions to package OZFFundRulesPvt
60 -- 6) Added approval and other fully accrued fund related transactions
61 -- 05/09/2001 MPande added l_act_budget_rec.adjusted_flag ='N' when calling create_act_budget
62 -- 06/22/2001 MPande Added code for business_ubit, threshold, country task
63 -- 07/10/2001 Mpande bug#1875760
64 -- 07/30/2001 Feliu add accrual_rate, accrual_basis,country_id as required field for copy.
65 -- 10/23/2001 Feliu add recal_committed.
66 -- 11/06/2001 mpande Updated for updating transfered in amount and not original budget for child fund
67 -- Commented security group id
68 -- Added validation for dated for fully accrued budget
69 -- Added extra parameters in copy
70 ------------------------------------------------------------ ------------------------------- /
71 -- 02/08/2002 Feliu 1)Added columns for rollup amount and procedure for updating rollup amount.
72 -- for create, first create rollup amount, if parent_fund_id is not null
73 -- call update_rollup_amount to update rollup amount for parent fund.
74 -- for update, first update rollup amount. if parent_fund_id is not null,
75 -- pass rollup diffence to update_rollup_amount for all parent fund.
76 -- if parent_id is remove, then pass fund own rollup amount in negative and
77 -- call update_rollup_amount for all_parent fund.
78 -- 2)Added update_funds_access procedure for updating parent fund access. If parent_fund_id is
79 -- not null, call this procedure to create access for all parent fund. if parent_fund_id
80 -- is removed, call this procedure to remove access for all parent fund. if parent_fund_id
81 -- or fund owner has been changed, first remove access then create access for all
82 -- parent funds.
83 -- 03/11/2002 Modify rollup amount calculation.
84 -- 6/11/2002 mpande Accrual Offer Original budget Updatoin Fixed
85 -- 07/01/2002 feliu Removed default g_universal_currency and added error message.
86 -- 07/15/2002 yzhao fix bug 2457199 UNABLE TO CREATE FULLY ACCRUED BUDGET DUE TO START DATE PROBLEM
87 -- 11/06/2002 feliu fix bug 2637445 OWNER OF CHILD BUDGET CAN REMOVE OWNER OF PARENT BUDGET FROM TEAM by setting
88 -- owner_flag to 'Y' when adding access for parent budget owner.
89 -- 11/06/2002 feliu fix bug 2654263 CHILD LINE MISSING FROM TREE OVERVIEW by adding access during create budget.
90 -- 03/13/2003 feliu fix bug copy of accrual budget and market eligibility.
91 -- 03/18/2003 yzhao handle allocation activation on territory hiearchy of different owners - bypass workflow approval
92 -- 06/03/2003 yzhao fix bug 2984497 - TST1159.14 MASTER: BUDGET APPROVAL VALIDATION FAILS UPON APPROVAL IN WORKFLOW
93 -- 11/07/2003 yzhao: fix bug 3238497 - allow fully accrual budget to go below 0
94 -- Wed Mar 10 2004:1/59 PM RSSHARMA Call raise_business_event on request approval.
95 -- This will raise a business event if the fund type is Quota
96 -- 06-APR-2004 mkothari Changed bussiness event param to oracle.apps.ozf.quota.QuotaApproval
97 -- 20-Apr-2004 rimehrot Check fund amount should not be <= 0: bug fix 3580531
98 -- 10-May-2004 feliu add business event for budget create, update, and approval.
99 -- 09/09/2004 Ribha Bug Fix 3498826. Validate for fund_number uniqueness modified. Validate for fund_name uniqueness removed.
100 -- 12/28/2004 kdass fix for 11.5.10 bug 4089720, when the fund is created from mass transfer, do not check for end date
101 -- 01/04/2005 Ribha Bug Fix 4087106 - Rollup holdback amount not updated when holdback amt updated manualy.
102 -- 10/10/2005 kdass R12 bug 4613689 - validate accrual budget's ledger and offer's org
103 -- 10/26/2005 mkothari Forward port 11.5.10 Bug 4701105
104 -- 11/09/2005 kdass fixed bug 4618523
105 -- 04-Feb-2006 asylvia fixed bug 5073532 . Duplicate Budget Number error .
106 -- 27-Mar-2006 asylvia fixed bug 5107243 . Copy Budget doesnt copy all the fields .
107 -- 06-APR-2006 kdass fixed bug 5104398
108 -- 19-Apr-2006 asylvia fixed bug 5169099 . Copy Activity of Accrual Budget to new Budget.
109 -- 25-APR-2006 kdass fixed bug 5176819 - Ledger is required field
110 -- 26-APR-2006 asylvia fixed bug 5185302 . Remove copying end date to new budget .
111 -- 08-OCT-2008 nirprasa fixed bug 7425189 - Use old conversion date for reconcile flow
112 -- 12-JUN-2009 kdass bug 8532055 - ADD EXCHANGE RATE DATE PARAM TO OZF_FUND_UTILIZED_PUB.CREATE_FUND_ADJUSTMENT API
113 -- 03-MAY-2010 nepanda bug 9616725 - not able to get the fund_id in subscription for ozf budget create business event
114 -- 04/01/2011 muthsubr Fix for bug#8867381 - IDSM BATCH PAYMENT INITIALIZATION ERROR
115 -- 04/01/2011 muthsubr Altered px_ozf_funds_new_rectype to px_ozf_funds_new_tbl for TPA Parallel Execution ER Bug#9614703.
116 -- 13-DEC-2011 apyadav Bug 13360969 - COPY ACCRUAL BUDGET THROWING UNIQUE CONSTRAINT ERROR
117 -- Validating Budget before calling copy_offer_details to avoid savepoint never established error.
118 -- 29-DEC-2011 APYADAV Bug 13529250 - CLAIM SETTLEMENT FETCHER ERRORS, BUDGET AMOUNT MUST BE GREATER THAN 0
119 -- p_mode default NULL is added to be passed as 'SETTLE' while claim settlement to avoid budget amount validation
120 g_pkg_name CONSTANT VARCHAR2(30) := 'OZF_Funds_PVT';
121 -- 08/14/2001 mpande updated for approval and object type
122 G_PARENT_APPROVAL_TYPE CONSTANT VARCHAR2(30) := 'BUDGET';
123 -- addded 08/14/2001 mpande
124 g_activity_type CONSTANT VARCHAR2(30) := 'RFRQ';
125 -- added 02/08/2002 by feliu
126 g_universal_currency CONSTANT VARCHAR2 (15) := fnd_profile.VALUE ('OZF_UNIV_CURR_CODE');
127 G_DEBUG BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
128
129
130 -----------------------------------------------------------------------
131 -- PROCEDURE
132 -- handle_fund_status
133 --
134 -- HISTORY
135 -- 20/09/00 mpande Created.
136 -----------------------------------------------------------------------
137
138
139 PROCEDURE handle_fund_status(
140 p_user_status_id IN NUMBER
141 ,x_status_code OUT NOCOPY VARCHAR2
142 ,x_return_status OUT NOCOPY VARCHAR2)
143 IS
144 l_status_code VARCHAR2(30);
145
146 CURSOR c_status_code
147 IS
148 SELECT system_status_code
149 FROM ams_user_statuses_vl
150 WHERE user_status_id = p_user_status_id
151 AND system_status_type = 'OZF_FUND_STATUS'
152 AND enabled_flag = 'Y';
153 BEGIN
154 x_return_status := fnd_api.g_ret_sts_success;
155 OPEN c_status_code;
156 FETCH c_status_code INTO l_status_code;
157 CLOSE c_status_code;
158
159 IF l_status_code IS NULL THEN
160 x_return_status := fnd_api.g_ret_sts_error;
161 Ozf_utility_pvt.error_message('OZF_FUND_BAD_USER_STATUS');
162 END IF;
163
164 x_status_code := l_status_code;
165 END handle_fund_status;
166
167 -----------------------------------------------------------------------
168 -- PROCEDURE
169 -- get_user_status
170 --
171 -- HISTORY
172 -- 20/09/00 mpande Created.
173 -- this packagge is created because ,if there are already records in funds table
174 -- then it would be taken care of them .
175 -----------------------------------------------------------------------
176
177 PROCEDURE get_user_status(
178 p_status_code IN VARCHAR2
179 ,x_user_status_id OUT NOCOPY NUMBER
180 ,x_return_status OUT NOCOPY VARCHAR2)
181 IS
182 l_user_status_id NUMBER;
183
184 CURSOR c_user_status_id
185 IS
186 SELECT user_status_id
187 FROM ams_user_statuses_vl
188 WHERE UPPER(system_status_code) = UPPER(p_status_code)
189 AND system_status_type = 'OZF_FUND_STATUS'
190 AND enabled_flag = 'Y';
191 BEGIN
192 x_return_status := fnd_api.g_ret_sts_success;
193 OPEN c_user_status_id;
194 FETCH c_user_status_id INTO l_user_status_id;
195 CLOSE c_user_status_id;
196
197 IF l_user_status_id IS NULL THEN
198 x_return_status := fnd_api.g_ret_sts_error;
199 Ozf_utility_pvt.error_message('OZF_FUND_BAD_USER_STATUS');
200 END IF;
201
202 x_user_status_id := l_user_status_id;
203 END get_user_status;
204 -----------------------------------------------------------------------
205 -- PROCEDURE
206 -- get_child_source_code
207 --
208 -- HISTORY
209 -- 02/20/2001 mpande Created.
210 -----------------------------------------------------------------------
211
212 PROCEDURE get_child_source_code(
213 p_parent_fund_id IN NUMBER
214 ,x_code OUT NOCOPY VARCHAR2
215 ,x_return_status OUT NOCOPY VARCHAR2)
216 IS
217 l_par_number VARCHAR2(30);
218 l_count NUMBER := 0;
219
220 CURSOR c_child_count(
221 p_fund_id IN NUMBER)
222 IS
223 SELECT COUNT(fund_id)
224 FROM ozf_funds_all_b
225 WHERE parent_fund_id = p_fund_id;
226
227 CURSOR c_parent_number(
228 p_fund_id IN NUMBER)
229 IS
230 SELECT fund_number
231 FROM ozf_funds_all_b
232 WHERE fund_id = p_fund_id;
233 BEGIN
234 x_return_status := fnd_api.g_ret_sts_success;
235 OPEN c_child_count(p_parent_fund_id);
236 FETCH c_child_count INTO l_count;
237 CLOSE c_child_count;
238 OPEN c_parent_number(p_parent_fund_id);
239 FETCH c_parent_number INTO l_par_number;
240 CLOSE c_parent_number;
241
242 IF l_par_number IS NULL THEN
243 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
244 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
245 fnd_msg_pub.add;
246 END IF;
247
248 x_return_status := fnd_api.g_ret_sts_error;
249 END IF;
250
251 x_code := SUBSTRB(l_par_number || l_count, 1, 30);
252
253 --asylvia Fixed bug 5073532
254 WHILE ozf_utility_pvt.check_uniqueness('ozf_funds_all_b'
255 ,'fund_number = ''' || x_code || '''') =
256 fnd_api.g_false LOOP
257 l_count := l_count + 1 ;
258 x_code :=SUBSTRB(l_par_number || l_count, 1, 30);
259 END LOOP;
260
261 END get_child_source_code;
262
263 -----------------------------------------------------------------------
264 -- PROCEDURE
265 -- raise_business_event
266 --
267 -- HISTORY
268 -- 05/08/2004 feliu Created.
269 -----------------------------------------------------------------------
270
271
272 PROCEDURE raise_business_event(p_object_id IN NUMBER,p_event_type IN VARCHAR2)
273 IS
274 CURSOR c_fund_type(p_fund_id NUMBER) IS
275 SELECT fund_type FROM ozf_funds_all_b
276 WHERE fund_id = p_fund_id;
277
278 l_fund_type varchar2(30);
279 l_item_key varchar2(30);
280 l_event_name varchar2(80);
281
282 l_parameter_list wf_parameter_list_t;
283 BEGIN
284 l_item_key := p_object_id ||'_'|| TO_CHAR(SYSDATE,'DDMMRRRRHH24MISS');
285 l_parameter_list := WF_PARAMETER_LIST_T();
286
287 OPEN c_fund_type(p_object_id);
288 FETCH c_fund_type into l_fund_type;
289 CLOSE c_fund_type;
290
291 IF l_fund_type = 'QUOTA' THEN
292 l_event_name := 'oracle.apps.ozf.quota.QuotaApproval';
293 ELSE
294 IF p_event_type = 'CREATE' THEN
295 l_event_name := 'oracle.apps.ozf.fund.budget.creation';
296 ELSIF p_event_type = 'UPDATE' THEN
297 l_event_name := 'oracle.apps.ozf.fund.budget.update';
298 ELSE
299 l_event_name := 'oracle.apps.ozf.fund.budget.approval';
300 END IF;
301 END IF;
302
303 IF G_DEBUG THEN
304 ozf_utility_pvt.debug_message('p_event_type is :'||p_event_type || ' Fund Id is :'||p_object_id );
305 END IF;
306
307 wf_event.AddParameterToList(p_name => 'P_FUND_ID',
308 p_value => p_object_id,
309 p_parameterlist => l_parameter_list);
310
311 IF G_DEBUG THEN
312 ozf_utility_pvt.debug_message('Item Key is :'||l_item_key);
313 END IF;
314
315 wf_event.raise( p_event_name =>l_event_name,
316 p_event_key => l_item_key,
317 p_parameters => l_parameter_list);
318
319
320 EXCEPTION
321 WHEN OTHERS THEN
322 RAISE Fnd_Api.g_exc_error;
323 ozf_utility_pvt.debug_message('Exception in raising business event');
324 END;
325
326
327 ---------------------------------------------------------------------
328 -- PROCEDURE
329 -- Create_Fund
330 --
331 -- HISTORY
332 -- 02/02/2000 Shitij Vatsa Create.
333 -- 06/13/2000 Added access calls and other validations
334 -- 07/24/2000 Added Multiple Currency Calls
335
336
337 -- 01/15/2001 Made all necessary changes for 11.5.5 .
338 -- 02/08/2002 Added create rollup amount.
339 -- NOTE
340 -- For all bug fixes for prior 11.5.5 please arcs out the
341 -- earlier versions.
342 -- The create API is called with a 'active' fund status only from allocation
343 -- where no approval is required . Create fund doesnot handle the approval process.
344 ---------------------------------------------------------------------
345
346 PROCEDURE create_fund(
347 p_api_version IN NUMBER
348 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
349 ,p_commit IN VARCHAR2 := fnd_api.g_false
350 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
351 ,x_return_status OUT NOCOPY VARCHAR2
352 ,x_msg_count OUT NOCOPY NUMBER
353 ,x_msg_data OUT NOCOPY VARCHAR2
354 ,p_fund_rec IN fund_rec_type
355 ,x_fund_id OUT NOCOPY NUMBER)
356 IS
357 l_api_version CONSTANT NUMBER := 1.0;
358 l_api_name CONSTANT VARCHAR2(30) := 'Create_Fund';
359
360 l_full_name CONSTANT VARCHAR2(60)
361 := g_pkg_name || '.' || l_api_name;
362 l_return_status VARCHAR2(1);
363 l_fund_rec fund_rec_type
364 := p_fund_rec;
365 l_fund_count NUMBER;
366 l_object_version_number NUMBER := 1;
367 --//mpande
368 l_request_id NUMBER;
369 l_approver_id NUMBER;
370 l_is_requester_owner VARCHAR2(10);
371 -- l_request_rec ozf_fund_request_pvt.request_rec_type;
372 -- variable for creating access //mpande
373 l_access_rec ams_access_pvt.access_rec_type;
374 l_access_id NUMBER;
375 l_par_fund_owner NUMBER;
376 /* R12: yzhao bug 4669269 - obsolete ozf_mc_transactions
377 -- record and table variable for creating FC record // mpande
378 l_mc_transaction_rec ozf_mc_transactions_pvt.mc_transactions_rec_type;
379 l_mc_transaction_id NUMBER;
380 */
381 l_act_budget_rec ozf_actbudgets_pvt.act_budgets_rec_type;
382 l_act_budget_id NUMBER ;
383 l_is_requestor_owner VARCHAR2(30);
384 l_rate NUMBER;
385 l_valid_flag VARCHAR2(1);
386 l_ledger_name VARCHAR2(50);
387
388 CURSOR c_fund_seq
389 IS
390 SELECT ozf_funds_s.nextval
391 FROM dual;
392
393 --changed by mpande
394 CURSOR c_fund_count(
395 cv_fund_id IN NUMBER)
396 IS
397 SELECT COUNT(fund_id)
398 FROM ozf_funds_all_b
399 WHERE fund_id = cv_fund_id;
400
401
402 CURSOR c_prog_fund_number (cl_fund_number IN VARCHAR2)
403 IS
404 SELECT count(fund_id) from ozf_funds_all_b
405 WHERE fund_number = cl_fund_number;
406
407 BEGIN
408 --------------------- initialize -----------------------
409 SAVEPOINT create_fund;
410 IF G_DEBUG THEN
411 ozf_utility_pvt.debug_message(l_full_name || ': start');
412 END IF;
413 x_return_status := fnd_api.g_ret_sts_success;
414
415 IF fnd_api.to_boolean(p_init_msg_list) THEN
416 fnd_msg_pub.initialize;
417 END IF;
418
419 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
420 RAISE fnd_api.g_exc_unexpected_error;
421 END IF;
422
423 -- check fund status and fill in system status
424 handle_fund_status(
425 p_user_status_id => l_fund_rec.user_status_id
426 ,x_status_code => l_fund_rec.status_code
427 ,x_return_status => x_return_status);
428
429 IF x_return_status = fnd_api.g_ret_sts_error THEN
430 RAISE fnd_api.g_exc_error;
431 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
432 RAISE fnd_api.g_exc_unexpected_error;
433 END IF;
434
435 -- default fund calendar
436 IF l_fund_rec.fund_calendar IS NULL
437 AND ( l_fund_rec.start_period_name IS NOT NULL
438 OR l_fund_rec.end_period_name IS NOT NULL) THEN
439 l_fund_rec.fund_calendar := fnd_profile.VALUE('AMS_CAMPAIGN_DEFAULT_CALENDER');
440 END IF;
441
442 IF p_fund_rec.fund_number IS NULL THEN
443 IF p_fund_rec.parent_fund_id IS NULL THEN
444 /*l_fund_rec.fund_number :=
445 ams_sourcecode_pvt.get_source_code(
446 p_category_id => p_fund_rec.category_id
447 ,p_arc_object_for => 'FUND');*/
448 l_valid_flag := 1;
449 WHILE l_valid_flag <> 0 LOOP
450 l_fund_rec.fund_number :=
451 ams_sourcecode_pvt.get_source_code(
452 p_category_id => p_fund_rec.category_id
453 ,p_arc_object_for => 'FUND');
454
455 OPEN c_prog_fund_number (l_fund_rec.fund_number);
456 FETCH c_prog_fund_number INTO l_valid_flag;
457 CLOSE c_prog_fund_number; -- Bug Fix 3498826
458
459 /*l_valid_flag := ams_utility_pvt.check_uniqueness(
460 'ozf_funds_all_vl'
461 ,'fund_number = ''' || l_fund_rec.fund_number || '''');*/
462
463 END LOOP;
464 -- by feliu on 11/10/03 to fix bug 3244033
465 ELSE
466 get_child_source_code(
467 p_fund_rec.parent_fund_id
468 ,l_fund_rec.fund_number
469 ,x_return_status);
470 IF x_return_status = fnd_api.g_ret_sts_error THEN
471 RAISE fnd_api.g_exc_error;
472 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
473 RAISE fnd_api.g_exc_unexpected_error;
474 END IF;
475 END IF;
476 END IF;
477
478 ----------------------- validate -----------------------
479 IF G_DEBUG THEN
480 ozf_utility_pvt.debug_message(l_full_name || ': validate');
481 END IF;
482 validate_fund(
483 p_api_version => l_api_version
484 ,p_init_msg_list => p_init_msg_list
485 ,p_validation_level => p_validation_level
486 ,x_return_status => l_return_status
487 ,x_msg_count => x_msg_count
488 ,x_msg_data => x_msg_data
489 ,p_fund_rec => l_fund_rec);
490
491
492 IF l_return_status = fnd_api.g_ret_sts_error THEN
493 RAISE fnd_api.g_exc_error;
494 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
495 RAISE fnd_api.g_exc_unexpected_error;
496 END IF;
497
498 -------------------------- insert --------------------------
499 IF G_DEBUG THEN
500 ozf_utility_pvt.debug_message(l_full_name || ': insert');
501 END IF;
502
503 IF l_fund_rec.fund_id IS NULL THEN
504 LOOP
505 OPEN c_fund_seq;
506 FETCH c_fund_seq INTO l_fund_rec.fund_id;
507 CLOSE c_fund_seq;
508 OPEN c_fund_count(l_fund_rec.fund_id);
509 FETCH c_fund_count INTO l_fund_count;
510 CLOSE c_fund_count;
511 EXIT WHEN l_fund_count = 0;
512 END LOOP;
513 END IF;
514
515
516 IF G_DEBUG THEN
517 ozf_utility_pvt.debug_message(l_full_name || ': get_category');
518 END IF;
519
520 -- kdass 09-NOV-05 Bug 4618523
521 /*
522 --added by mpande 6th JULY-2000 get default category GL Info
523 IF p_fund_rec.category_id IS NOT NULL THEN
524 complete_default_gl_info(
525 l_fund_rec.category_id
526 ,l_fund_rec.accrued_liable_account
527 ,l_fund_rec.ded_adjustment_account
528 ,l_return_status);
529
530 IF l_return_status = fnd_api.g_ret_sts_error THEN
531 RAISE fnd_api.g_exc_error;
532 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
533 RAISE fnd_api.g_exc_unexpected_error;
534 END IF;
535 END IF;
536 */
537
538 -- 11/06/2001 mpande added for updating transfered in amount
539 IF p_fund_rec.status_code = 'ON_HOLD' OR l_fund_rec.status_code = 'ACTIVE' THEN
540 IF p_fund_rec.parent_fund_id IS NOT NULL THEN
541 l_fund_rec.transfered_in_amt := l_fund_rec.original_budget;
542 l_fund_rec.original_budget := 0 ;
543 END IF;
544 END IF;
545
546 IF g_universal_currency IS NULL THEN
547
548 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
549 fnd_message.set_name('OZF', 'OZF_UNIV_CURR_NOT_FOUND');
550 fnd_msg_pub.add;
551 END IF;
552
553 RAISE fnd_api.g_exc_error;
554
555 END IF;
556
557 -- Calculate rollup amount columns, added by feliu 02/08/02
558 IF l_fund_rec.original_budget IS NOT NULL
559 AND l_fund_rec.original_budget <> fnd_api.g_miss_num THEN
560 Ozf_utility_pvt.convert_currency(
561 x_return_status => l_return_status
562 ,p_from_currency => l_fund_rec.currency_code_tc
563 ,p_to_currency => g_universal_currency
564 ,p_from_amount => l_fund_rec.original_budget
565 ,x_to_amount => l_fund_rec.rollup_original_budget
566 ,x_rate => l_rate);
567
568 IF l_return_status = fnd_api.g_ret_sts_error THEN
569 RAISE fnd_api.g_exc_error;
570 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
571 RAISE fnd_api.g_exc_unexpected_error;
572 END IF;
573
574 END IF;
575
576 IF l_fund_rec.transfered_in_amt IS NOT NULL
577 AND l_rate is NOT NULL
578 AND l_fund_rec.transfered_in_amt <> fnd_api.g_miss_num THEN
579
580 l_fund_rec.rollup_transfered_in_amt := l_fund_rec.transfered_in_amt * l_rate;
581
582 END IF;
583
584 IF l_fund_rec.transfered_out_amt IS NOT NULL
585 AND l_rate is NOT NULL
586 AND l_fund_rec.transfered_out_amt <> fnd_api.g_miss_num THEN
587
588 l_fund_rec.rollup_transfered_out_amt := l_fund_rec.transfered_out_amt * l_rate;
589
590 END IF;
591
592
593 IF l_fund_rec.holdback_amt IS NOT NULL
594 AND l_rate is NOT NULL
595 AND l_fund_rec.holdback_amt <> fnd_api.g_miss_num THEN
596 l_fund_rec.rollup_holdback_amt := l_fund_rec.holdback_amt * l_rate;
597 END IF;
598
599 -- make liability_flag to be 'N' for sales accrual.
600 IF l_fund_rec.accrual_basis ='SALES' THEN
601 l_fund_rec.liability_flag := 'N';
602 END IF;
603
604 -- kdass 09-NOV-05 Bug 4618523
605 -- if ledger_id is null, derive it from org_id which is the default OU for the user
606 IF l_fund_rec.ledger_id = fnd_api.g_miss_num OR l_fund_rec.ledger_id IS NULL THEN
607
608 IF l_fund_rec.org_id <> fnd_api.g_miss_num AND l_fund_rec.org_id IS NOT NULL THEN
609 MO_UTILS.Get_Ledger_Info (
610 p_operating_unit => l_fund_rec.org_id,
611 p_ledger_id => l_fund_rec.ledger_id,
612 p_ledger_name => l_ledger_name
613 );
614 END IF;
615
616 END IF;
617
618 INSERT INTO ozf_funds_all_b
619 (
620 fund_id,
621 last_update_date,
622 last_updated_by,
623 last_update_login,
624 creation_date,
625 created_by,
626 created_from,
627 request_id,
628 program_application_id,
629 program_id,
630 program_update_date,
631 fund_number,
632 parent_fund_id,
633 category_id,
634 fund_type,
635 fund_usage, -- obsolete
636 status_code,
637 user_status_id,
638 status_date,
639 accrued_liable_account,
640 ded_adjustment_account,
641 liability_flag,
642 set_of_books_id, -- obsolete
643 start_period_id, -- obsolete
644 end_period_id, -- obsolete
645 start_date_active,
646 end_date_active,
647 budget_amount_tc, -- obsolete
648 budget_amount_fc, -- obsolete
649 available_amount, -- obsolete
650 distributed_amount, -- obsolete
651 currency_code_tc,
652 currency_code_fc, -- obsolete
653 exchange_rate_type, -- obsolete
654 exchange_rate_date, -- obsolete
655 exchange_rate, -- obsolete
656 department_id, -- obsolete
657 costcentre_id, -- obsolete
658 owner,
659 accrual_method,
660 accrual_operand,
661 accrual_rate,
662 accrual_basis,
663 hierarchy,
664 hierarchy_level,
665 hierarchy_id,
666 parent_node_id,
667 node_id, --,level_value
668 budget_flag,
669 earned_flag,
670 apply_accrual_on, -- obsolete
671 accrual_phase,
672 accrual_cap,
673 accrual_uom,
674 object_version_number,
675 attribute_category,
676 attribute1,
677 attribute2,
678 attribute3,
679 attribute4,
680 attribute5,
681 attribute6,
682 attribute7,
683 attribute8,
684 attribute9,
685 attribute10,
686 attribute11,
687 attribute12,
688 attribute13,
689 attribute14,
690 attribute15,
691 org_id,
692 original_budget,
693 transfered_in_amt,
694 transfered_out_amt,
695 holdback_amt,
696 planned_amt,
697 committed_amt,
698 earned_amt,
699 paid_amt,
700 plan_type, -- obsolete
701 plan_id, -- obsolete
702 liable_accnt_segments, -- obsolete
703 adjustment_accnt_segments, -- obsolete
704 fund_calendar,
705 start_period_name,
706 end_period_name,
707 accrual_quantity,
708 accrue_to_level_id,
709 accrual_discount_level,
710 custom_setup_id,
711 threshold_id,
712 business_unit_id,
713 country_id,
714 task_id,
715 rollup_original_budget,
716 rollup_transfered_in_amt,
717 rollup_transfered_out_amt,
718 rollup_holdback_amt,
719 retroactive_flag,
720 qualifier_id,
721 -- niprakas added
722 prev_fund_id,
723 transfered_flag,
724 utilized_amt,
725 rollup_utilized_amt,
726 product_spread_time_id,
727 ledger_id -- kdass - R12 MOAC changes
728 )
729 VALUES(
730 l_fund_rec.fund_id
731 ,SYSDATE -- LAST_UPDATE_DATE
732 ,NVL(fnd_global.user_id, -1) -- LAST_UPDATED_BY
733 ,NVL(fnd_global.conc_login_id, -1) -- LAST_UPDATE_LOGIN
734 ,SYSDATE -- CREATION_DATE
735 ,NVL(fnd_global.user_id, -1) -- CREATED_BY
736 ,NULL -- l_fund_rec.created_from -- CREATED_FROM -- we donot use this column
737 ,fnd_global.conc_request_id -- REQUEST_ID
738 ,fnd_global.prog_appl_id -- PROGRAM_APPLICATION_ID
739 ,fnd_global.conc_program_id -- PROGRAM_ID
740 ,SYSDATE -- PROGRAM_UPDATE_DATE
741 ,l_fund_rec.fund_number
742 ,l_fund_rec.parent_fund_id
743 ,l_fund_rec.category_id
744 ,l_fund_rec.fund_type
745 ,l_fund_rec.fund_usage
746 ,l_fund_rec.status_code
747 ,l_fund_rec.user_status_id
748 ,NVL(l_fund_rec.status_date, SYSDATE)
749 ,l_fund_rec.accrued_liable_account
750 ,l_fund_rec.ded_adjustment_account
751 ,NVL(l_fund_rec.liability_flag, 'N')
752 ,l_fund_rec.set_of_books_id
753 ,l_fund_rec.start_period_id
754 ,l_fund_rec.end_period_id
755 ,NVL(l_fund_rec.start_date_active, SYSDATE)
756 ,l_fund_rec.end_date_active
757 ,l_fund_rec.budget_amount_tc
758 ,l_fund_rec.budget_amount_fc
759 ,l_fund_rec.available_amount
760 ,l_fund_rec.distributed_amount
761 ,l_fund_rec.currency_code_tc
762 ,l_fund_rec.currency_code_fc
763 ,l_fund_rec.exchange_rate_type
764 ,l_fund_rec.exchange_rate_date
765 ,l_fund_rec.exchange_rate
766 ,l_fund_rec.department_id
767 ,l_fund_rec.costcentre_id
768 ,NVL(l_fund_rec.owner, NVL(fnd_global.user_id, -1)) -- OWNER
769 ,l_fund_rec.accrual_method
770 ,l_fund_rec.accrual_operand
771 ,l_fund_rec.accrual_rate
772 ,l_fund_rec.accrual_basis
773 ,l_fund_rec.hierarchy
774 ,l_fund_rec.hierarchy_level
775 ,l_fund_rec.hierarchy_id
776 ,l_fund_rec.parent_node_id
777 ,l_fund_rec.node_id --,l_fund_rec.level_value
778 ,NVL(l_fund_rec.budget_flag, 'N')
779 ,NVL(l_fund_rec.earned_flag, 'N')
780 ,l_fund_rec.apply_accrual_on
781 ,l_fund_rec.accrual_phase
782 ,l_fund_rec.accrual_cap
783 ,l_fund_rec.accrual_uom
784 ,l_object_version_number -- OBJECT_VERSION_NUMBER
785 ,l_fund_rec.attribute_category
786 ,l_fund_rec.attribute1
787 ,l_fund_rec.attribute2
788 ,l_fund_rec.attribute3
789 ,l_fund_rec.attribute4
790 ,l_fund_rec.attribute5
791 ,l_fund_rec.attribute6
792 ,l_fund_rec.attribute7
793 ,l_fund_rec.attribute8
794 ,l_fund_rec.attribute9
795 ,l_fund_rec.attribute10
796 ,l_fund_rec.attribute11
797 ,l_fund_rec.attribute12
798 ,l_fund_rec.attribute13
799 ,l_fund_rec.attribute14
800 ,l_fund_rec.attribute15
801 --,TO_NUMBER(SUBSTRB(USERENV('CLIENT_INFO'), 1, 10)) -- org_id
802 ,l_fund_rec.org_id -- kdass - R12 MOAC changes
803 ,l_fund_rec.original_budget
804 ,l_fund_rec.transfered_in_amt
805 ,l_fund_rec.transfered_out_amt
806 ,l_fund_rec.holdback_amt
807 ,l_fund_rec.planned_amt
808 ,l_fund_rec.committed_amt
809 ,l_fund_rec.earned_amt
810 ,l_fund_rec.paid_amt
811 ,l_fund_rec.plan_type
812 ,l_fund_rec.plan_id
813 ,l_fund_rec.liable_accnt_segments
814 ,l_fund_rec.adjustment_accnt_segments
815 ,l_fund_rec.fund_calendar
816 ,l_fund_rec.start_period_name
817 ,l_fund_rec.end_period_name
818 ,l_fund_rec.accrual_quantity
819 ,l_fund_rec.accrue_to_level_id
820 ,l_fund_rec.accrual_discount_level
821 ,l_fund_rec.custom_setup_id
822 ,l_fund_rec.threshold_id
823 ,l_fund_rec.business_unit_id
824 ,l_fund_rec.country_id
825 ,l_fund_rec.task_id
826 ,l_fund_rec.rollup_original_budget
827 ,l_fund_rec.rollup_transfered_in_amt
828 ,l_fund_rec.rollup_transfered_out_amt
829 ,l_fund_rec.rollup_holdback_amt
830 ,l_fund_rec.retroactive_flag
831 ,l_fund_rec.qualifier_id
832 -- niprakas added
833 ,l_fund_rec.prev_fund_id
834 ,l_fund_rec.transfered_flag
835 ,l_fund_rec.utilized_amt
836 ,l_fund_rec.rollup_utilized_amt
837 ,l_fund_rec.product_spread_time_id
838 ,l_fund_rec.ledger_id
839 );
840
841 INSERT INTO ozf_funds_all_tl
842 (fund_id,
843 last_update_date,
844 last_updated_by,
845 last_update_login,
846 creation_date,
847 created_by,
848 created_from,
849 request_id,
850 program_application_id,
851 program_id,
852 program_update_date,
853 short_name,
854 description,
855 source_lang,
856 language,
857 org_id )
858 SELECT l_fund_rec.fund_id
859 ,SYSDATE -- LAST_UPDATE_DATE
860 ,NVL(fnd_global.user_id, -1) -- LAST_UPDATED_BY
861 ,NVL(fnd_global.conc_login_id, -1) -- LAST_UPDATE_LOGIN
862 ,SYSDATE -- CREATION_DATE
863 ,NVL(fnd_global.user_id, -1) -- CREATED_BY
864 ,NULL -- CREATED_FROM
865 ,fnd_global.conc_request_id -- REQUEST_ID
866 ,fnd_global.prog_appl_id -- PROGRAM_APPLICATION_ID
867 ,fnd_global.conc_program_id -- PROGRAM_ID
868 ,SYSDATE -- PROGRAM_UPDATE_DATE
869 ,l_fund_rec.short_name
870 ,l_fund_rec.description
871 ,USERENV('LANG')
872 ,l.language_code
873 --,TO_NUMBER(SUBSTRB(USERENV('CLIENT_INFO'), 1, 10))
874 ,l_fund_rec.org_id -- kdass - R12 MOAC changes
875 FROM fnd_languages l
876 WHERE l.installed_flag IN('I', 'B')
877 AND NOT EXISTS(SELECT NULL
878 FROM ozf_funds_all_tl t
879 WHERE t.fund_id = l_fund_rec.fund_id
880 AND t.language = l.language_code);
881
882 ------------------------- finish -------------------------------
883 x_fund_id := l_fund_rec.fund_id;
884 IF G_DEBUG THEN
885 ozf_utility_pvt.debug_message(l_full_name || ': insert object attribute');
886 END IF;
887
888 -- If the fund_status is 'ACTIVE', we need to create a record in th ACT_BUDGET table for the holdback amount
889 -- fixed bug for validation level and p_commit
890
891 IF ((l_fund_rec.status_code = 'ACTIVE')
892 AND (NVL(l_fund_rec.holdback_amt, 0) <> 0)) THEN
893 l_act_budget_rec.status_code := 'APPROVED';
894 l_act_budget_rec.arc_act_budget_used_by := 'FUND'; -- hardcoded to fund
895 l_act_budget_rec.act_budget_used_by_id := l_fund_rec.fund_id;
896 l_act_budget_rec.requester_id := l_fund_rec.owner;
897 l_act_budget_rec.approver_id := l_fund_rec.owner;
898 l_act_budget_rec.request_amount := l_fund_rec.holdback_amt; --- in transferring to fund currency
899 l_act_budget_rec.approved_amount := l_fund_rec.holdback_amt; --- in transferring to fund currency
900 l_act_budget_rec.approved_original_amount := l_fund_rec.holdback_amt; --- in transferring to fund currency
901 l_act_budget_rec.budget_source_type := 'FUND';
902 l_act_budget_rec.budget_source_id := l_fund_rec.fund_id;
903 l_act_budget_rec.transfer_type := 'RESERVE';
904 l_act_budget_rec.transaction_type := 'CREDIT';
905 l_act_budget_rec.approved_in_currency := l_fund_rec.currency_code_tc;
906 l_act_budget_rec.adjusted_flag :='N';
907 --l_act_budget_rec.date_required_by := p_needbydate;
908 -- Create_transfer record
909 ozf_actbudgets_pvt.create_act_budgets(
910 p_api_version => l_api_version
911 ,x_return_status => l_return_status
912 ,x_msg_count => x_msg_count
913 ,x_msg_data => x_msg_data
914 ,p_act_budgets_rec => l_act_budget_rec
915 ,x_act_budget_id => l_act_budget_id);
916
917 IF l_return_status = fnd_api.g_ret_sts_error THEN
918 RAISE fnd_api.g_exc_error;
919 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
920 RAISE fnd_api.g_exc_unexpected_error;
921 END IF;
922 END IF;
923
924 /* R12: yzhao bug 4669269 - obsolete ozf_mc_transactions
925 --- Insert a record in OZF_MC_TRANSACTIONS_ALL IN functional currency
926 -- so that we have the functional currency amounts
927 -- The exchange_rate_type is picked up by the MC_TRAnSACTIONS API from proile
928 IF G_DEBUG THEN
929 ozf_utility_pvt.debug_message(l_full_name || ': insert Functional currency record');
930 END IF;
931 -- Populate the record variable
932 l_mc_transaction_rec.source_object_name := 'FUND';
933 l_mc_transaction_rec.source_object_id := l_fund_rec.fund_id;
934 l_mc_transaction_rec.currency_code := l_fund_rec.currency_code_tc;
935 l_mc_transaction_rec.amount_column1 := l_fund_rec.original_budget;
936 l_mc_transaction_rec.amount_column2 := l_fund_rec.transfered_in_amt;
937 l_mc_transaction_rec.amount_column3 := l_fund_rec.transfered_out_amt;
938 l_mc_transaction_rec.amount_column4 := l_fund_rec.holdback_amt;
939 l_mc_transaction_rec.amount_column5 := l_fund_rec.planned_amt;
940 l_mc_transaction_rec.amount_column6 := l_fund_rec.committed_amt;
941 l_mc_transaction_rec.amount_column7 := l_fund_rec.earned_amt;
942 l_mc_transaction_rec.amount_column8 := l_fund_rec.paid_amt;
943 l_mc_transaction_rec.amount_column9 := l_fund_rec.utilized_amt; -- yzhao: 11.5.10
944 -- Call mc_transaction API if the fund type is not QUOTA
945 IF l_fund_rec.fund_type <> 'QUOTA' THEN
946 ozf_mc_transactions_pvt.insert_mc_transactions(
947 p_api_version => l_api_version
948 ,p_init_msg_list => fnd_api.g_false
949 ,p_commit => fnd_api.g_false
950 ,x_return_status => l_return_status
951 ,x_msg_count => x_msg_count
952 ,x_msg_data => x_msg_data
953 ,p_mc_transactions_rec => l_mc_transaction_rec
954 ,x_mc_transaction_id => l_mc_transaction_id);
955
956 IF l_return_status = fnd_api.g_ret_sts_error THEN
957 RAISE fnd_api.g_exc_error;
958 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
959 RAISE fnd_api.g_exc_unexpected_error;
960 END IF;
961 END IF;
962 */
963
964 /************************ MPANDE JAN-15 2001 ************************************************
965 For 11.5.5 release fund status will not be 'active' but will be always 'Draft' in the create
966 mode except during allocation .During fund allocation we donot need a approval for a child
967 **********************************************************************************************/
968 -- 07/10/2001 mpande bug#1875760
969 IF p_fund_rec.status_code = 'ACTIVE' THEN
970 IF p_fund_rec.parent_fund_id IS NOT NULL AND
971 p_fund_rec.fund_type <> 'FULLY_ACCRUED' THEN
972
973 -- changing status from 'DRAFT or 'REJECTED' to 'ACTIVE or ON_HOLD is
974 -- equivalent to submitting for approval.
975 -- Approval submission child fund
976 IF G_DEBUG THEN
977 ozf_utility_pvt.debug_message(l_full_name || 'owner' || p_fund_rec.owner);
978 END IF;
979
980 ozf_fund_request_apr_pvt.create_fund_request(
981 p_commit => fnd_api.g_false
982 ,p_approval_for_id => l_fund_rec.fund_id
983 ,p_requester_id => l_fund_rec.owner
984 ,p_requested_amount => l_fund_rec.transfered_in_amt ---l_fund_rec.original_budget mpande 11/06/2001
985 ,p_approval_fm => 'FUND'
986 ,p_approval_fm_id => l_fund_rec.parent_fund_id
987 ,p_transfer_type => 'TRANSFER'
988 ,p_child_flag =>'Y'
989 ,p_justification => l_fund_rec.description
990 -- 10/22/2001 mpande Changed code different owner allocation bug
991 ,p_allocation_flag => 'Y' -- set this flag to yes to by pass workflow approval
992 ,x_return_status => l_return_status
993 ,x_msg_count => x_msg_count
994 ,x_msg_data => x_msg_data
995 ,x_request_id => l_request_id
996 ,x_approver_id => l_approver_id
997 ,x_is_requester_owner => l_is_requestor_owner);
998
999 IF l_return_status = fnd_api.g_ret_sts_error THEN
1000 RAISE fnd_api.g_exc_error;
1001 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1002 RAISE fnd_api.g_exc_unexpected_error;
1003 END IF;
1004
1005 -- mpande end if end
1006 END IF;
1007
1008 END IF ;
1009 --added by mpande
1010 -- insert a access for the owner
1011 IF G_DEBUG THEN
1012 ozf_utility_pvt.debug_message(l_full_name || ': insert access owner');
1013 END IF;
1014
1015 IF l_fund_rec.fund_id IS NOT NULL THEN
1016
1017 l_access_rec.act_access_to_object_id := l_fund_rec.fund_id;
1018 l_access_rec.arc_act_access_to_object := 'FUND';
1019 l_access_rec.user_or_role_id := l_fund_rec.owner;
1020 l_access_rec.arc_user_or_role_type := 'USER';
1021 l_access_rec.admin_flag := 'Y';
1022 l_access_rec.owner_flag := 'Y';
1023 ams_access_pvt.create_access(
1024 p_api_version => l_api_version
1025 ,p_init_msg_list => fnd_api.g_false
1026 ,p_validation_level => p_validation_level
1027 ,x_return_status => l_return_status
1028 ,x_msg_count => x_msg_count
1029 ,x_msg_data => x_msg_data
1030 ,p_commit => fnd_api.g_false
1031 ,p_access_rec => l_access_rec
1032 ,x_access_id => l_access_id);
1033
1034 IF l_return_status = fnd_api.g_ret_sts_error THEN
1035 RAISE fnd_api.g_exc_error;
1036 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1037 RAISE fnd_api.g_exc_unexpected_error;
1038 END IF;
1039 END IF;
1040
1041 --added by mpande
1042 -- if parent id is not null during creation , a row is created in the ams_act_access to give access
1043 -- to the owner of the parent fund to this child
1044 IF G_DEBUG THEN
1045 ozf_utility_pvt.debug_message(l_full_name || ': insert access parent');
1046 END IF;
1047
1048 IF l_fund_rec.parent_fund_id IS NOT NULL THEN
1049 -- added updating rollup columns by feliu.
1050 IF l_fund_rec.status_code = 'ACTIVE' THEN
1051 update_rollup_amount(
1052 p_api_version => l_api_version
1053 ,p_init_msg_list => fnd_api.g_false
1054 ,p_commit => fnd_api.g_false
1055 ,p_validation_level => p_validation_level
1056 ,x_return_status => l_return_status
1057 ,x_msg_count => x_msg_count
1058 ,x_msg_data => x_msg_data
1059 ,p_fund_rec => l_fund_rec
1060 );
1061 /* move this part to update_rollup_amount by feliu.
1062
1063 OPEN c_par_fund_owner(l_fund_rec.parent_fund_id);
1064 FETCH c_par_fund_owner INTO l_par_fund_owner;
1065 CLOSE c_par_fund_owner;
1066 --if the owner of the parent and child fund is different then only add access
1067 IF l_fund_rec.owner <> l_par_fund_owner THEN
1068 l_access_rec.act_access_to_object_id := l_fund_rec.fund_id;
1069 l_access_rec.arc_act_access_to_object := 'FUND';
1070 l_access_rec.user_or_role_id := l_par_fund_owner;
1071 l_access_rec.arc_user_or_role_type := 'USER';
1072 l_access_rec.admin_flag := 'Y'; -- 12/03/2001 yzhao: give admin access to parent
1073 l_access_rec.owner_flag := 'N';
1074 ams_access_pvt.create_access(
1075 p_api_version => l_api_version
1076 ,p_init_msg_list => fnd_api.g_false
1077 ,p_validation_level => p_validation_level
1078 ,x_return_status => l_return_status
1079 ,x_msg_count => x_msg_count
1080 ,x_msg_data => x_msg_data
1081 ,p_commit => fnd_api.g_false
1082 ,p_access_rec => l_access_rec
1083 ,x_access_id => l_access_id);
1084 END IF;
1085 */
1086 IF l_return_status = fnd_api.g_ret_sts_error THEN
1087 RAISE fnd_api.g_exc_error;
1088 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1089 RAISE fnd_api.g_exc_unexpected_error;
1090 END IF;
1091
1092 END IF;
1093 -- added by feliu to fix bug 2654263
1094
1095 update_funds_access(
1096 p_api_version => l_api_version
1097 ,p_init_msg_list => fnd_api.g_false
1098 ,p_commit => fnd_api.g_false
1099 ,p_validation_level => p_validation_level
1100 ,x_return_status => l_return_status
1101 ,x_msg_count => x_msg_count
1102 ,x_msg_data => x_msg_data
1103 ,p_fund_rec => l_fund_rec
1104 ,p_mode => 'CREATE'
1105 );
1106
1107 IF l_return_status = fnd_api.g_ret_sts_error THEN
1108 RAISE fnd_api.g_exc_error;
1109 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1110 RAISE fnd_api.g_exc_unexpected_error;
1111 END IF;
1112
1113 END IF;
1114 -- mpadne 10/14/2002 for 11.5.9
1115 IF G_DEBUG THEN
1116 OZF_UTILITY_PVT.DEBUG_MESSAGE('ACCRUAL BASIS ='||L_FUND_REC.accrual_basis);
1117 END IF;
1118 IF p_fund_rec.fund_type = 'FULLY_ACCRUED' AND p_fund_rec.plan_id is null THEN
1119 ozf_fundrules_pvt.process_accrual (
1120 p_fund_rec => l_fund_rec
1121 ,p_api_version => l_api_version
1122 ,p_mode => 'CREATE'
1123 ,x_return_status => l_return_status
1124 ,x_msg_count => x_msg_count
1125 ,x_msg_data => x_msg_data );
1126 IF l_return_status = fnd_api.g_ret_sts_error THEN
1127 RAISE fnd_api.g_exc_error;
1128 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1129 RAISE fnd_api.g_exc_unexpected_error;
1130 END IF;
1131 END IF;
1132 -- Check for commit
1133 IF fnd_api.to_boolean(p_commit) THEN
1134 COMMIT;
1135 END IF;
1136
1137 -- raise business event.
1138 --nepanda : fix for bug # 9616725
1139 raise_business_event(p_object_id => l_fund_rec.fund_id ,p_event_type =>'CREATE');
1140
1141 fnd_msg_pub.count_and_get(
1142 p_encoded => fnd_api.g_false
1143 ,p_count => x_msg_count
1144 ,p_data => x_msg_data);
1145 IF G_DEBUG THEN
1146 ozf_utility_pvt.debug_message(l_full_name || ': end');
1147 END IF;
1148
1149 EXCEPTION
1150 WHEN fnd_api.g_exc_error THEN
1151 ROLLBACK TO create_fund;
1152 x_return_status := fnd_api.g_ret_sts_error;
1153 fnd_msg_pub.count_and_get(
1154 p_encoded => fnd_api.g_false
1155 ,p_count => x_msg_count
1156 ,p_data => x_msg_data);
1157 WHEN fnd_api.g_exc_unexpected_error THEN
1158 ROLLBACK TO create_fund;
1159 x_return_status := fnd_api.g_ret_sts_unexp_error;
1160 fnd_msg_pub.count_and_get(
1161 p_encoded => fnd_api.g_false
1162 ,p_count => x_msg_count
1163 ,p_data => x_msg_data);
1164 WHEN OTHERS THEN
1165 ROLLBACK TO create_fund;
1166 x_return_status := fnd_api.g_ret_sts_unexp_error;
1167
1168 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1169 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
1170 END IF;
1171
1172 fnd_msg_pub.count_and_get(
1173 p_encoded => fnd_api.g_false
1174 ,p_count => x_msg_count
1175 ,p_data => x_msg_data);
1176 END create_fund;
1177
1178
1179
1180 ---------------------------------------------------------------
1181 -- PROCEDURE
1182 -- Delete_Fund
1183 --
1184 -- HISTORY
1185 -- 02/02/2000 Shitij Vatsa Create.
1186 ---------------------------------------------------------------
1187 PROCEDURE delete_fund(
1188 p_api_version IN NUMBER
1189 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1190 ,p_commit IN VARCHAR2 := fnd_api.g_false
1191 ,x_return_status OUT NOCOPY VARCHAR2
1192 ,x_msg_count OUT NOCOPY NUMBER
1193 ,x_msg_data OUT NOCOPY VARCHAR2
1194 ,p_fund_id IN NUMBER
1195 ,p_object_version IN NUMBER)
1196 IS
1197 l_api_version CONSTANT NUMBER := 1.0;
1198 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Fund';
1199 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name || '.' || l_api_name;
1200 BEGIN
1201 --------------------- initialize -----------------------
1202 SAVEPOINT delete_fund;
1203 IF G_DEBUG THEN
1204 ozf_utility_pvt.debug_message(l_full_name || ': start');
1205 END IF;
1206
1207 IF fnd_api.to_boolean(p_init_msg_list) THEN
1208 fnd_msg_pub.initialize;
1209 END IF;
1210
1211 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
1212 RAISE fnd_api.g_exc_unexpected_error;
1213 END IF;
1214
1215 x_return_status := fnd_api.g_ret_sts_success;
1216 ------------------------ delete ------------------------
1217 IF G_DEBUG THEN
1218 ozf_utility_pvt.debug_message(l_full_name || ': delete');
1219 END IF;
1220
1221 DELETE
1222 FROM ozf_funds_all_b
1223 WHERE fund_id = p_fund_id
1224 AND object_version_number = p_object_version;
1225
1226 IF (SQL%NOTFOUND) THEN
1227 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
1228 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
1229 fnd_msg_pub.add;
1230 END IF;
1231
1232 RAISE fnd_api.g_exc_error;
1233 END IF;
1234
1235 DELETE
1236 FROM ozf_funds_all_tl
1237 WHERE fund_id = p_fund_id;
1238
1239 IF (SQL%NOTFOUND) THEN
1240 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
1241 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
1242 fnd_msg_pub.add;
1243 END IF;
1244
1245 RAISE fnd_api.g_exc_error;
1246 END IF;
1247
1248 -------------------- finish --------------------------
1249 IF fnd_api.to_boolean(p_commit) THEN
1250 COMMIT;
1251 END IF;
1252
1253 fnd_msg_pub.count_and_get(
1254 p_encoded => fnd_api.g_false
1255 ,p_count => x_msg_count
1256 ,p_data => x_msg_data);
1257 IF G_DEBUG THEN
1258 ozf_utility_pvt.debug_message(l_full_name || ': end');
1259 END IF;
1260 EXCEPTION
1261 WHEN fnd_api.g_exc_error THEN
1262 ROLLBACK TO delete_fund;
1263 x_return_status := fnd_api.g_ret_sts_error;
1264 fnd_msg_pub.count_and_get(
1265 p_encoded => fnd_api.g_false
1266 ,p_count => x_msg_count
1267 ,p_data => x_msg_data);
1268 WHEN fnd_api.g_exc_unexpected_error THEN
1269 ROLLBACK TO delete_fund;
1270 x_return_status := fnd_api.g_ret_sts_unexp_error;
1271 fnd_msg_pub.count_and_get(
1272 p_encoded => fnd_api.g_false
1273 ,p_count => x_msg_count
1274 ,p_data => x_msg_data);
1275 WHEN OTHERS THEN
1276 ROLLBACK TO delete_fund;
1277 x_return_status := fnd_api.g_ret_sts_unexp_error;
1278
1279 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1280 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
1281 END IF;
1282
1283 fnd_msg_pub.count_and_get(
1284 p_encoded => fnd_api.g_false
1285 ,p_count => x_msg_count
1286 ,p_data => x_msg_data);
1287 END delete_fund;
1288
1289
1290
1291 -------------------------------------------------------------------
1292 -- PROCEDURE
1293 -- Lock_Fund
1294 --
1295 -- HISTORY
1296 -- 02/02/2000 Shitij Vatsa Create.
1297 --------------------------------------------------------------------
1298 PROCEDURE lock_fund(
1299 p_api_version IN NUMBER
1300 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1301 ,x_return_status OUT NOCOPY VARCHAR2
1302 ,x_msg_count OUT NOCOPY NUMBER
1303 ,x_msg_data OUT NOCOPY VARCHAR2
1304 ,p_fund_id IN NUMBER
1305 ,p_object_version IN NUMBER)
1306 IS
1307 l_api_version CONSTANT NUMBER := 1.0;
1308 l_api_name CONSTANT VARCHAR2(30) := 'Lock_Fund';
1309 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name || '.' || l_api_name;
1310 l_fund_id NUMBER;
1311
1312 CURSOR c_fund_b
1313 IS
1314 SELECT fund_id
1315 FROM ozf_funds_all_b
1316 WHERE fund_id = p_fund_id
1317 AND object_version_number = p_object_version
1318 FOR UPDATE OF fund_id NOWAIT;
1319
1320 CURSOR c_fund_tl
1321 IS
1322 SELECT fund_id
1323 FROM ozf_funds_all_tl
1324 WHERE fund_id = p_fund_id
1325 AND USERENV('LANG') IN(language, source_lang)
1326 FOR UPDATE OF fund_id NOWAIT;
1327 BEGIN
1328 -------------------- initialize ------------------------
1329 IF G_DEBUG THEN
1330 ozf_utility_pvt.debug_message(l_full_name || ': start');
1331 END IF;
1332
1333 IF fnd_api.to_boolean(p_init_msg_list) THEN
1334 fnd_msg_pub.initialize;
1335 END IF;
1336
1337 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
1338 RAISE fnd_api.g_exc_unexpected_error;
1339 END IF;
1340
1341 x_return_status := fnd_api.g_ret_sts_success;
1342 ------------------------ lock -------------------------
1343 IF G_DEBUG THEN
1344 ozf_utility_pvt.debug_message(l_full_name || ': lock');
1345 END IF;
1346 OPEN c_fund_b;
1347 FETCH c_fund_b INTO l_fund_id;
1348
1349 IF (c_fund_b%NOTFOUND) THEN
1350 CLOSE c_fund_b;
1351
1352 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
1353 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
1354 fnd_msg_pub.add;
1355 END IF;
1356
1357 RAISE fnd_api.g_exc_error;
1358 END IF;
1359
1360 CLOSE c_fund_b;
1361 OPEN c_fund_tl;
1362 CLOSE c_fund_tl;
1363 -------------------- finish --------------------------
1364 fnd_msg_pub.count_and_get(
1365 p_encoded => fnd_api.g_false
1366 ,p_count => x_msg_count
1367 ,p_data => x_msg_data);
1368 IF G_DEBUG THEN
1369 ozf_utility_pvt.debug_message(l_full_name || ': end');
1370 END IF;
1371 EXCEPTION
1372 WHEN ozf_utility_pvt.resource_locked THEN
1373 x_return_status := fnd_api.g_ret_sts_error;
1374
1375 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
1376 fnd_message.set_name('OZF', 'OZF_API_RESOURCE_LOCKED');
1377 fnd_msg_pub.add;
1378 END IF;
1379
1380 fnd_msg_pub.count_and_get(
1381 p_encoded => fnd_api.g_false
1382 ,p_count => x_msg_count
1383 ,p_data => x_msg_data);
1384 WHEN fnd_api.g_exc_error THEN
1385 x_return_status := fnd_api.g_ret_sts_error;
1386 fnd_msg_pub.count_and_get(
1387 p_encoded => fnd_api.g_false
1388 ,p_count => x_msg_count
1389 ,p_data => x_msg_data);
1390 WHEN fnd_api.g_exc_unexpected_error THEN
1391 x_return_status := fnd_api.g_ret_sts_unexp_error;
1392 fnd_msg_pub.count_and_get(
1393 p_encoded => fnd_api.g_false
1394 ,p_count => x_msg_count
1395 ,p_data => x_msg_data);
1396 WHEN OTHERS THEN
1397 x_return_status := fnd_api.g_ret_sts_unexp_error;
1398
1399 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1400 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
1401 END IF;
1402
1403 fnd_msg_pub.count_and_get(
1404 p_encoded => fnd_api.g_false
1405 ,p_count => x_msg_count
1406 ,p_data => x_msg_data);
1407 END lock_fund;
1408
1409 ---------------------------------------------------------------------
1410 -- PROCEDURE
1411 -- Update_Fund
1412 -- Over loaded Update_Fund for bug#8867381
1413 -- Altered px_ozf_funds_new_rectype to px_ozf_funds_new_tbl for TPA Parallel Execution ER Bug#9614703.
1414 ----------------------------------------------------------------------
1415 PROCEDURE update_fund(
1416 p_api_version IN NUMBER
1417 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1418 ,p_commit IN VARCHAR2 := fnd_api.g_false
1419 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
1420 ,x_return_status OUT NOCOPY VARCHAR2
1421 ,x_msg_count OUT NOCOPY NUMBER
1422 ,x_msg_data OUT NOCOPY VARCHAR2
1423 ,p_fund_rec IN fund_rec_type
1424 ,p_mode IN VARCHAR2 := jtf_plsql_api.g_update
1425 )
1426 IS
1427 l_resale_batch_id NUMBER;
1428 l_use_fund_staging_tables VARCHAR2(1) := 'F';
1429 lx_ozf_funds_old_rectype OZF_UTILITY_PVT.ozf_funds_all_b_rectype;
1430 lx_ozf_funds_new_tbl OZF_UTILITY_PVT.ozf_funds_table;
1431 l_batch_type VARCHAR2(30);
1432 BEGIN
1433 update_fund(
1434 p_api_version => p_api_version
1435 ,p_init_msg_list => p_init_msg_list
1436 ,p_commit => p_commit
1437 ,p_validation_level => p_validation_level
1438 ,x_return_status => x_return_status
1439 ,x_msg_count => x_msg_count
1440 ,x_msg_data => x_msg_data
1441 ,p_fund_rec => p_fund_rec
1442 ,p_mode => p_mode
1443 ,p_resale_batch_id => l_resale_batch_id
1444 ,p_batch_type => l_batch_type
1445 ,p_use_fund_staging_tables => l_use_fund_staging_tables
1446 ,px_ozf_funds_old_rectype => lx_ozf_funds_old_rectype
1447 ,px_ozf_funds_new_tbl => lx_ozf_funds_new_tbl
1448 );
1449 END update_fund;
1450
1451 ---------------------------------------------------------------------
1452 -- PROCEDURE
1453 -- Update_Fund
1454 --
1455 -- HISTORY
1456 -- 02/02/2000 Shitij Vatsa Create.
1457 -- 06/13/2000 mpande Added access calls
1458 -- 06/13/2000 mpande fixed bug complete rec
1459 -- 06/13/2000 Added access calls and other validations
1460 -- 07/24/2000 Added Multiple Currency Enabling Calls
1461 -- 07/28/2000 Added parent_validation against child
1462 -- 02/08/2002 Added rollup amount update.
1463 /*************major changes for 11.5.5*********************************
1464 -- All functionality related to statistical fund removed.
1465 -- 2) Added the five columns , start_period_name, end_period_name, accrual_quantity,
1466 -- accrue_to_level_id,fund_calendar
1467 -- 3) Introduced new API check_fund-inter_entity
1468 -- 4) Removed some of the fund rules validations to package OzfFundRulesPvt (because this Api was getging bigger)
1469 -- 5) Removed all active fund transactions to package OzfFundRulesPvt
1470 -- 6) Added approval and other fully accrued fund related transactions
1471 --
1472 **********************************************************************/
1473
1474
1475
1476 ----------------------------------------------------------------------
1477 PROCEDURE update_fund(
1478 p_api_version IN NUMBER
1479 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
1480 ,p_commit IN VARCHAR2 := fnd_api.g_false
1481 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
1482 ,x_return_status OUT NOCOPY VARCHAR2
1483 ,x_msg_count OUT NOCOPY NUMBER
1484 ,x_msg_data OUT NOCOPY VARCHAR2
1485 ,p_fund_rec IN fund_rec_type
1486 ,p_mode IN VARCHAR2 := jtf_plsql_api.g_update
1487 ,p_resale_batch_id IN NUMBER
1488 ,p_batch_type IN VARCHAR2
1489 ,p_use_fund_staging_tables IN VARCHAR2
1490 ,px_ozf_funds_old_rectype IN OZF_UTILITY_PVT.ozf_funds_all_b_rectype
1491 ,px_ozf_funds_new_tbl IN OUT NOCOPY OZF_UTILITY_PVT.ozf_funds_table
1492 )
1493 IS
1494 l_api_version CONSTANT NUMBER := 1.0;
1495 l_api_name CONSTANT VARCHAR2(30)
1496 := 'Update_Fund';
1497 l_full_name CONSTANT VARCHAR2(60)
1498 := g_pkg_name || '.' || l_api_name;
1499 l_fund_rec fund_rec_type;
1500 l_return_status VARCHAR2(1) := FND_API.g_ret_sts_success;
1501 l_mode VARCHAR2(30);
1502 l_request_id NUMBER;
1503 /* R12: yzhao bug 4669269 - obsolete ozf_mc_transactions
1504 l_mc_obj_number NUMBER;
1505 l_mc_record_id NUMBER;
1506 l_mc_transaction_rec ozf_mc_transactions_pvt.mc_transactions_rec_type;
1507 */
1508 --- variable for creating access //mpande
1509 l_access_rec ams_access_pvt.access_rec_type;
1510 l_access_id NUMBER;
1511 l_act_access_id NUMBER;
1512 l_acc_obj_ver_num NUMBER;
1513 l_par_fund_owner NUMBER;
1514 -- l_request_rec ozf_fund_request_pvt.request_rec_type;
1515 l_status_code VARCHAR2(30);
1516 -- 08/14/2001 mpande added
1517 l_submit_budget_approval VARCHAR2(1):= FND_API.g_false;
1518 l_submit_child_approval VARCHAR2(1):= FND_API.g_false;
1519 l_approver_id NUMBER;
1520 l_workflow_process VARCHAR2(30) := 'AMSGAPP';
1521 l_item_type VARCHAR2(30) := 'AMSGAPP';
1522 l_old_user_status_id NUMBER;
1523 l_status_type VARCHAR2(30) := 'OZF_FUND_STATUS';
1524 l_is_requestor_owner VARCHAR2(1);
1525 l_reject_status_id NUMBER;
1526 l_child_request_amt NUMBER ; -- mpande 11/06/2001 added
1527
1528 -- For Bug#8867381
1529 l_use_fund_staging_tables VARCHAR2(1):= p_use_fund_staging_tables;
1530
1531
1532 l_operation VARCHAR2(15);
1533 l_fund_record_num number := 0;
1534
1535
1536 -- CURSOR for old status code //updated by mpande
1537 CURSOR c_old_status(
1538 cv_fund_id IN NUMBER)
1539 IS
1540 SELECT status_code
1541 ,parent_fund_id
1542 ,user_status_id
1543 FROM ozf_funds_all_b
1544 WHERE fund_id = cv_fund_id;
1545
1546 l_old_status VARCHAR2(30);
1547 l_old_parent_fund_id NUMBER;
1548 l_old_par_fund_owner NUMBER;
1549
1550 --added by mpande cursor to get parent fund owner
1551 CURSOR c_par_fund_owner(
1552 par_fund_id IN NUMBER)
1553 IS
1554 SELECT owner
1555 FROM ozf_funds_all_b
1556 WHERE fund_id = par_fund_id;
1557
1558 /* R12: yzhao bug 4669269 - obsolete ozf_mc_transactions
1559 CURSOR c_mc_record(
1560 source_id IN NUMBER)
1561 IS
1562 SELECT mc_record_id
1563 ,object_version_number
1564 FROM ozf_mc_transactions_all
1565 WHERE source_object_id = source_id
1566 AND source_object_name = 'FUND';
1567 */
1568
1569 CURSOR c_access(
1570 p_fund_id IN NUMBER)
1571 IS
1572 SELECT activity_access_id
1573 ,object_version_number
1574 FROM ams_act_access
1575 WHERE act_access_to_object_id = p_fund_id
1576 AND arc_act_access_to_object = 'FUND'
1577 AND owner_flag = 'Y';
1578
1579 CURSOR c_par_access(
1580 p_fund_id IN NUMBER
1581 ,p_par_owner_id IN NUMBER)
1582 IS
1583 SELECT activity_access_id
1584 ,object_version_number
1585 FROM ams_act_access
1586 WHERE act_access_to_object_id = p_fund_id
1587 AND arc_act_access_to_object = 'FUND'
1588 AND arc_user_or_role_type = 'USER'
1589 AND user_or_role_id = p_par_owner_id
1590 -- 09/05/2001 mpande
1591 AND NVL(owner_flag,'N') = 'N' ;
1592
1593 --- cursor to get old (TC) currency_code
1594 CURSOR c_old_curr(
1595 cv_fund_id IN NUMBER)
1596 IS
1597 SELECT currency_code_tc , owner
1598 FROM ozf_funds_all_b
1599 WHERE fund_id = cv_fund_id;
1600
1601 l_old_curr VARCHAR2(30);
1602 l_rate NUMBER;
1603 l_owner NUMBER;
1604
1605 -- added by feliu for rollup amount updating.
1606 CURSOR c_amt IS
1607 SELECT planned_amt,committed_amt,
1608 earned_amt,paid_amt,transfered_in_amt
1609 ,transfered_out_amt,original_budget
1610 ,recal_committed,holdback_amt
1611 ,utilized_amt -- yzhao: 11.5.10
1612 FROM ozf_funds_all_b
1613 WHERE fund_id = p_fund_rec.fund_id;
1614
1615 CURSOR c_rollup_amt IS
1616 SELECT rollup_planned_amt,rollup_committed_amt
1617 ,rollup_earned_amt,rollup_paid_amt,rollup_transfered_in_amt
1618 ,rollup_transfered_out_amt,rollup_original_budget
1619 ,rollup_recal_committed,rollup_holdback_amt
1620 ,rollup_utilized_amt -- yzhao: 11.5.10
1621 FROM ozf_funds_all_b
1622 WHERE fund_id = p_fund_rec.fund_id;
1623
1624 /* kdass - R12 MOAC changes
1625 CURSOR c_get_org_id IS
1626 SELECT org_id
1627 FROM ozf_funds_all_b
1628 WHERE fund_id = p_fund_rec.fund_id;
1629 */
1630
1631 l_original_budget NUMBER;
1632 l_old_original_budget NUMBER;
1633 l_old_transfered_in_amt NUMBER;
1634 l_old_transfered_out_amt NUMBER;
1635 l_old_holdback_amt NUMBER;
1636 l_old_planned_amt NUMBER;
1637 l_old_committed_amt NUMBER;
1638 l_old_utilized_amt NUMBER; -- yzhao: 11.5.10
1639 l_old_earned_amt NUMBER;
1640 l_old_paid_amt NUMBER;
1641 l_old_recal_committed NUMBER;
1642
1643
1644 l_or_original_budget NUMBER;
1645 l_or_transfered_in_amt NUMBER;
1646 l_or_transfered_out_amt NUMBER;
1647 l_or_holdback_amt NUMBER;
1648 l_or_planned_amt NUMBER;
1649 l_or_committed_amt NUMBER;
1650 l_or_utilized_amt NUMBER; -- yzhao: 11.5.10
1651 l_or_earned_amt NUMBER;
1652 l_or_paid_amt NUMBER;
1653 l_or_recal_committed NUMBER;
1654
1655 l_rollup_original_budget NUMBER;
1656 l_rollup_transfered_in_amt NUMBER;
1657 l_rollup_transfered_out_amt NUMBER;
1658 l_rollup_holdback_amt NUMBER;
1659 l_rollup_planned_amt NUMBER;
1660 l_rollup_committed_amt NUMBER;
1661 l_rollup_utilized_amt NUMBER; -- yzhao: 11.5.10
1662 l_rollup_earned_amt NUMBER;
1663 l_rollup_paid_amt NUMBER;
1664 l_rollup_recal_committed NUMBER;
1665 l_active_flag BOOLEAN := false;
1666 l_allocation_flag VARCHAR2(2) := 'N'; -- yzhao: 03/18/2003 added
1667
1668 l_tmp_status_code VARCHAR2(30);
1669 l_tmp_status_id NUMBER;
1670
1671 --Added for bug 7425189
1672 l_fund_reconc_msg VARCHAR2(4000);
1673 l_act_bud_cst_msg VARCHAR2(4000);
1674
1675 BEGIN
1676 -------------------- initialize -------------------------
1677 SAVEPOINT update_fund;
1678 IF G_DEBUG THEN
1679 ozf_utility_pvt.debug_message(l_full_name || ': start');
1680 END IF;
1681
1682 IF fnd_api.to_boolean(p_init_msg_list) THEN
1683 fnd_msg_pub.initialize;
1684 END IF;
1685
1686 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
1687 RAISE fnd_api.g_exc_unexpected_error;
1688 END IF;
1689
1690 x_return_status := fnd_api.g_ret_sts_success;
1691
1692 -- //added on Sep20 for user status validation
1693 complete_fund_rec(p_fund_rec, l_fund_rec);
1694 -- check fund status and fill in system status
1695 IF p_fund_rec.user_status_id <> fnd_api.g_miss_num THEN
1696 handle_fund_status(
1697 p_user_status_id => p_fund_rec.user_status_id
1698 ,x_status_code => l_status_code
1699 ,x_return_status => x_return_status);
1700
1701 IF x_return_status = fnd_api.g_ret_sts_error THEN
1702 RAISE fnd_api.g_exc_error;
1703 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
1704 RAISE fnd_api.g_exc_unexpected_error;
1705 END IF;
1706
1707 l_fund_rec.status_code := l_status_code;
1708 ELSIF p_fund_rec.status_code <> fnd_api.g_miss_char THEN
1709 IF G_DEBUG THEN
1710 ozf_utility_pvt.debug_message(l_full_name || 'debug' || p_fund_rec.status_code);
1711 END IF;
1712 get_user_status(
1713 p_status_code => p_fund_rec.status_code
1714 ,x_user_status_id => l_fund_rec.user_status_id
1715 ,x_return_status => x_return_status);
1716
1717 IF x_return_status = fnd_api.g_ret_sts_error THEN
1718 RAISE fnd_api.g_exc_error;
1719 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
1720 RAISE fnd_api.g_exc_unexpected_error;
1721 END IF;
1722 --- this we need because there could be some records in the database with no user status
1723 ELSE
1724 IF G_DEBUG THEN
1725 ozf_utility_pvt.debug_message(l_full_name || 'in else ');
1726 END IF;
1727
1728 IF l_fund_rec.user_status_id IS NOT NULL THEN
1729 handle_fund_status(
1730 p_user_status_id => l_fund_rec.user_status_id
1731 ,x_status_code => l_status_code
1732 ,x_return_status => x_return_status);
1733
1734 IF x_return_status = fnd_api.g_ret_sts_error THEN
1735 RAISE fnd_api.g_exc_error;
1736 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
1737 RAISE fnd_api.g_exc_unexpected_error;
1738 END IF;
1739 ELSE
1740 -- if user_status_id is null in database then we will populate it with the corrsponnding system status value form user_status_table
1741 get_user_status(
1742 p_status_code => l_fund_rec.status_code
1743 ,x_user_status_id => l_fund_rec.user_status_id
1744 ,x_return_status => x_return_status);
1745
1746 IF x_return_status = fnd_api.g_ret_sts_error THEN
1747 RAISE fnd_api.g_exc_error;
1748 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
1749 RAISE fnd_api.g_exc_unexpected_error;
1750 END IF;
1751 END IF;
1752
1753 l_fund_rec.status_code := l_status_code;
1754 END IF;
1755
1756 --Added for bug 7425189
1757 l_fund_reconc_msg := fnd_message.get_string ('OZF', 'OZF_FUND_RECONCILE');
1758 l_act_bud_cst_msg := fnd_message.get_string ('OZF', 'OZF_ACT_BUDG_CST_UTIL');
1759
1760 --changed by mpande
1761 -- Fetch the old status code and old parentID
1762 OPEN c_old_status(p_fund_rec.fund_id);
1763 FETCH c_old_status INTO l_old_status, l_old_parent_fund_id,l_old_user_status_id;
1764 CLOSE c_old_status;
1765 ----------------------- validate ----------------------
1766 IF G_DEBUG THEN
1767 ozf_utility_pvt.debug_message(l_full_name || ': validate');
1768 END IF;
1769 -- replace g_miss_char/num/date with current column values
1770 --added by mpande 27th JULY-2000
1771 ---if the fund is active and the currency_code_tc passed is different than the fund_currency_code
1772 -- then this is either a transfer of fund or utlization record or updation of planned amount .
1773 -- The amount could only be updated in fund currency
1774 -- All the amounts passed should be converted to the fund_currency and then updated
1775
1776 OPEN c_old_curr(p_fund_rec.fund_id);
1777 FETCH c_old_curr INTO l_old_curr,l_owner;
1778 CLOSE c_old_curr;
1779 ----dbms_output.put_line ('OLD CURR = '||l_old_curr);
1780 ----dbms_output.put_line ('PASSED CURR = '||p_fund_rec.currency_code_tc);
1781 IF G_DEBUG THEN
1782 ozf_utility_pvt.debug_message(l_full_name || ': convert currrency');
1783 END IF;
1784 -- changed the status call here to check for the changed status
1785 IF l_fund_rec.status_code <> 'DRAFT' AND l_old_status <> 'DRAFT'
1786 AND l_old_curr <> l_fund_rec.currency_code_tc THEN
1787 IF p_fund_rec.original_budget IS NOT NULL
1788 AND p_fund_rec.original_budget <> fnd_api.g_miss_num THEN
1789
1790
1791 IF G_DEBUG THEN
1792 ozf_utility_pvt.debug_message (l_full_name
1793 || ' p_fund_rec.exchange_rate_date1: ' || p_fund_rec.exchange_rate_date);
1794 END IF;
1795
1796 ozf_utility_pvt.convert_currency(
1797 x_return_status => l_return_status
1798 ,p_from_currency => p_fund_rec.currency_code_tc
1799 ,p_to_currency => l_old_curr
1800 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
1801 ,p_from_amount => p_fund_rec.original_budget
1802 ,x_to_amount => l_fund_rec.original_budget
1803 ,x_rate => l_rate);
1804 /*
1805 --nirprasa, added for bug 7425189
1806 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
1807 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
1808 Ozf_utility_pvt.convert_currency(
1809 x_return_status => l_return_status
1810 ,p_from_currency => p_fund_rec.currency_code_tc
1811 ,p_to_currency => l_old_curr
1812 ,p_conv_date => p_fund_rec.exchange_rate_date
1813 ,p_from_amount => p_fund_rec.original_budget
1814 ,x_to_amount => l_fund_rec.original_budget
1815 ,x_rate => l_rate);
1816 ELSE
1817 Ozf_utility_pvt.convert_currency(
1818 x_return_status => l_return_status
1819 ,p_from_currency => p_fund_rec.currency_code_tc
1820 ,p_to_currency => l_old_curr
1821 ,p_from_amount => p_fund_rec.original_budget
1822 ,x_to_amount => l_fund_rec.original_budget
1823 ,x_rate => l_rate);
1824 END IF;
1825 */
1826
1827 -- we need to pass the fund currency after calculating
1828 l_fund_rec.currency_code_tc := l_old_curr;
1829
1830 ----dbms_output.put_line ('DEBUG ');
1831 IF l_return_status = fnd_api.g_ret_sts_error THEN
1832 RAISE fnd_api.g_exc_error;
1833 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1834 RAISE fnd_api.g_exc_unexpected_error;
1835 END IF;
1836 END IF;
1837
1838 IF p_fund_rec.transfered_in_amt IS NOT NULL
1839 AND p_fund_rec.transfered_in_amt <> fnd_api.g_miss_num THEN
1840
1841
1842 IF G_DEBUG THEN
1843 ozf_utility_pvt.debug_message (l_full_name
1844 || ' p_fund_rec.exchange_rate_date2: ' || p_fund_rec.exchange_rate_date);
1845 END IF;
1846
1847 ozf_utility_pvt.convert_currency(
1848 x_return_status => l_return_status
1849 ,p_from_currency => p_fund_rec.currency_code_tc
1850 ,p_to_currency => l_old_curr
1851 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
1852 ,p_from_amount => p_fund_rec.transfered_in_amt
1853 ,x_to_amount => l_fund_rec.transfered_in_amt
1854 ,x_rate => l_rate);
1855
1856 /*
1857 --nirprasa, added for bug 7425189
1858 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
1859 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
1860 Ozf_utility_pvt.convert_currency(
1861 x_return_status => l_return_status
1862 ,p_from_currency => p_fund_rec.currency_code_tc
1863 ,p_to_currency => l_old_curr
1864 ,p_conv_date => p_fund_rec.exchange_rate_date
1865 ,p_from_amount => p_fund_rec.transfered_in_amt
1866 ,x_to_amount => l_fund_rec.transfered_in_amt
1867 ,x_rate => l_rate);
1868 ELSE
1869 Ozf_utility_pvt.convert_currency(
1870 x_return_status => l_return_status
1871 ,p_from_currency => p_fund_rec.currency_code_tc
1872 ,p_to_currency => l_old_curr
1873 ,p_from_amount => p_fund_rec.transfered_in_amt
1874 ,x_to_amount => l_fund_rec.transfered_in_amt
1875 ,x_rate => l_rate);
1876 END IF;
1877 */
1878
1879 -- we need to pass the fund currency after calculating
1880 l_fund_rec.currency_code_tc := l_old_curr;
1881
1882 IF l_return_status = fnd_api.g_ret_sts_error THEN
1883 RAISE fnd_api.g_exc_error;
1884 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1885 RAISE fnd_api.g_exc_unexpected_error;
1886 END IF;
1887 END IF;
1888
1889 IF p_fund_rec.transfered_out_amt IS NOT NULL
1890 AND p_fund_rec.transfered_out_amt <> fnd_api.g_miss_num THEN
1891
1892 IF G_DEBUG THEN
1893 ozf_utility_pvt.debug_message (l_full_name
1894 || ' p_fund_rec.exchange_rate_date3: ' || p_fund_rec.exchange_rate_date);
1895 END IF;
1896
1897 ozf_utility_pvt.convert_currency(
1898 x_return_status => l_return_status
1899 ,p_from_currency => p_fund_rec.currency_code_tc
1900 ,p_to_currency => l_old_curr
1901 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
1902 ,p_from_amount => p_fund_rec.transfered_in_amt
1903 ,x_to_amount => l_fund_rec.transfered_in_amt
1904 ,x_rate => l_rate);
1905 /*
1906 --nirprasa, added for bug 7425189
1907 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
1908 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
1909 Ozf_utility_pvt.convert_currency(
1910 x_return_status => l_return_status
1911 ,p_from_currency => p_fund_rec.currency_code_tc
1912 ,p_to_currency => l_old_curr
1913 ,p_conv_date => p_fund_rec.exchange_rate_date
1914 ,p_from_amount => p_fund_rec.transfered_in_amt
1915 ,x_to_amount => l_fund_rec.transfered_in_amt
1916 ,x_rate => l_rate);
1917 ELSE
1918 Ozf_utility_pvt.convert_currency(
1919 x_return_status => l_return_status
1920 ,p_from_currency => p_fund_rec.currency_code_tc
1921 ,p_to_currency => l_old_curr
1922 ,p_from_amount => p_fund_rec.transfered_in_amt
1923 ,x_to_amount => l_fund_rec.transfered_in_amt
1924 ,x_rate => l_rate);
1925 END IF;
1926 */
1927
1928 -- we need to pass the fund currency after calculating
1929 l_fund_rec.currency_code_tc := l_old_curr;
1930
1931 IF l_return_status = fnd_api.g_ret_sts_error THEN
1932 RAISE fnd_api.g_exc_error;
1933 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1934 RAISE fnd_api.g_exc_unexpected_error;
1935 END IF;
1936 END IF;
1937
1938 IF p_fund_rec.planned_amt IS NOT NULL
1939 AND p_fund_rec.planned_amt <> fnd_api.g_miss_num THEN
1940
1941 IF G_DEBUG THEN
1942 ozf_utility_pvt.debug_message (l_full_name
1943 || ' p_fund_rec.exchange_rate_date4: ' || p_fund_rec.exchange_rate_date);
1944 END IF;
1945
1946 ozf_utility_pvt.convert_currency(
1947 x_return_status => l_return_status
1948 ,p_from_currency => p_fund_rec.currency_code_tc
1949 ,p_to_currency => l_old_curr
1950 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
1951 ,p_from_amount => p_fund_rec.planned_amt
1952 ,x_to_amount => l_fund_rec.planned_amt
1953 ,x_rate => l_rate);
1954
1955 /*
1956 --nirprasa, added for bug 7425189
1957 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
1958 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
1959 Ozf_utility_pvt.convert_currency(
1960 x_return_status => l_return_status
1961 ,p_from_currency => p_fund_rec.currency_code_tc
1962 ,p_to_currency => l_old_curr
1963 ,p_conv_date => p_fund_rec.exchange_rate_date
1964 ,p_from_amount => p_fund_rec.planned_amt
1965 ,x_to_amount => l_fund_rec.planned_amt
1966 ,x_rate => l_rate);
1967 ELSE
1968 Ozf_utility_pvt.convert_currency(
1969 x_return_status => l_return_status
1970 ,p_from_currency => p_fund_rec.currency_code_tc
1971 ,p_to_currency => l_old_curr
1972 ,p_from_amount => p_fund_rec.planned_amt
1973 ,x_to_amount => l_fund_rec.planned_amt
1974 ,x_rate => l_rate);
1975 END IF;
1976 */
1977
1978 -- we need to pass the fund currency after calculating
1979 l_fund_rec.currency_code_tc := l_old_curr;
1980
1981 IF l_return_status = fnd_api.g_ret_sts_error THEN
1982 RAISE fnd_api.g_exc_error;
1983 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1984 RAISE fnd_api.g_exc_unexpected_error;
1985 END IF;
1986 END IF;
1987
1988 -- yzhao: 11.5.10
1989 IF p_fund_rec.utilized_amt IS NOT NULL
1990 AND p_fund_rec.utilized_amt <> fnd_api.g_miss_num THEN
1991
1992 IF G_DEBUG THEN
1993 ozf_utility_pvt.debug_message (l_full_name
1994 || ' p_fund_rec.exchange_rate_date5: ' || p_fund_rec.exchange_rate_date);
1995 END IF;
1996
1997 ozf_utility_pvt.convert_currency(
1998 x_return_status => l_return_status
1999 ,p_from_currency => p_fund_rec.currency_code_tc
2000 ,p_to_currency => l_old_curr
2001 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
2002 ,p_from_amount => p_fund_rec.utilized_amt
2003 ,x_to_amount => l_fund_rec.utilized_amt
2004 ,x_rate => l_rate);
2005
2006 /*
2007 --nirprasa, added for bug 7425189
2008 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
2009 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
2010 Ozf_utility_pvt.convert_currency(
2011 x_return_status => l_return_status
2012 ,p_from_currency => p_fund_rec.currency_code_tc
2013 ,p_to_currency => l_old_curr
2014 ,p_conv_date => p_fund_rec.exchange_rate_date
2015 ,p_from_amount => p_fund_rec.utilized_amt
2016 ,x_to_amount => l_fund_rec.utilized_amt
2017 ,x_rate => l_rate);
2018 ELSE
2019 Ozf_utility_pvt.convert_currency(
2020 x_return_status => l_return_status
2021 ,p_from_currency => p_fund_rec.currency_code_tc
2022 ,p_to_currency => l_old_curr
2023 ,p_from_amount => p_fund_rec.utilized_amt
2024 ,x_to_amount => l_fund_rec.utilized_amt
2025 ,x_rate => l_rate);
2026 END IF;
2027 */
2028 -- we need to pass the fund currency after calculating
2029 l_fund_rec.currency_code_tc := l_old_curr;
2030
2031 IF l_return_status = fnd_api.g_ret_sts_error THEN
2032 RAISE fnd_api.g_exc_error;
2033 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2034 RAISE fnd_api.g_exc_unexpected_error;
2035 END IF;
2036 END IF;
2037
2038 IF p_fund_rec.earned_amt IS NOT NULL
2039 AND p_fund_rec.earned_amt <> fnd_api.g_miss_num THEN
2040
2041 IF G_DEBUG THEN
2042 ozf_utility_pvt.debug_message (l_full_name
2043 || ' p_fund_rec.exchange_rate_date6: ' || p_fund_rec.exchange_rate_date);
2044 END IF;
2045
2046 ozf_utility_pvt.convert_currency(
2047 x_return_status => l_return_status
2048 ,p_from_currency => p_fund_rec.currency_code_tc
2049 ,p_to_currency => l_old_curr
2050 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
2051 ,p_from_amount => p_fund_rec.earned_amt
2052 ,x_to_amount => l_fund_rec.earned_amt
2053 ,x_rate => l_rate);
2054
2055 /*
2056 --nirprasa, added for bug 7425189
2057 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
2058 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
2059 Ozf_utility_pvt.convert_currency(
2060 x_return_status => l_return_status
2061 ,p_from_currency => p_fund_rec.currency_code_tc
2062 ,p_to_currency => l_old_curr
2063 ,p_conv_date => p_fund_rec.exchange_rate_date
2064 ,p_from_amount => p_fund_rec.earned_amt
2065 ,x_to_amount => l_fund_rec.earned_amt
2066 ,x_rate => l_rate);
2067 ELSE
2068 Ozf_utility_pvt.convert_currency(
2069 x_return_status => l_return_status
2070 ,p_from_currency => p_fund_rec.currency_code_tc
2071 ,p_to_currency => l_old_curr
2072 ,p_from_amount => p_fund_rec.earned_amt
2073 ,x_to_amount => l_fund_rec.earned_amt
2074 ,x_rate => l_rate);
2075 END IF;
2076 */
2077 -- we need to pass the fund currency after calculating
2078 l_fund_rec.currency_code_tc := l_old_curr;
2079
2080 IF l_return_status = fnd_api.g_ret_sts_error THEN
2081 RAISE fnd_api.g_exc_error;
2082 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2083 RAISE fnd_api.g_exc_unexpected_error;
2084 END IF;
2085 END IF;
2086
2087 IF p_fund_rec.committed_amt IS NOT NULL
2088 AND p_fund_rec.committed_amt <> fnd_api.g_miss_num THEN
2089
2090 IF G_DEBUG THEN
2091 ozf_utility_pvt.debug_message (l_full_name
2092 || ' p_fund_rec.exchange_rate_date7: ' || p_fund_rec.exchange_rate_date);
2093 END IF;
2094
2095 ozf_utility_pvt.convert_currency(
2096 x_return_status => l_return_status
2097 ,p_from_currency => p_fund_rec.currency_code_tc
2098 ,p_to_currency => l_old_curr
2099 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
2100 ,p_from_amount => p_fund_rec.committed_amt
2101 ,x_to_amount => l_fund_rec.committed_amt
2102 ,x_rate => l_rate);
2103
2104 /*
2105 --nirprasa, added for bug 7425189
2106 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
2107 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
2108 Ozf_utility_pvt.convert_currency(
2109 x_return_status => l_return_status
2110 ,p_from_currency => p_fund_rec.currency_code_tc
2111 ,p_to_currency => l_old_curr
2112 ,p_conv_date => p_fund_rec.exchange_rate_date
2113 ,p_from_amount => p_fund_rec.committed_amt
2114 ,x_to_amount => l_fund_rec.committed_amt
2115 ,x_rate => l_rate);
2116 ELSE
2117 Ozf_utility_pvt.convert_currency(
2118 x_return_status => l_return_status
2119 ,p_from_currency => p_fund_rec.currency_code_tc
2120 ,p_to_currency => l_old_curr
2121 ,p_from_amount => p_fund_rec.committed_amt
2122 ,x_to_amount => l_fund_rec.committed_amt
2123 ,x_rate => l_rate);
2124 END IF;
2125 */
2126 -- we need to pass the fund currency after calculating
2127 l_fund_rec.currency_code_tc := l_old_curr;
2128
2129 IF l_return_status = fnd_api.g_ret_sts_error THEN
2130 RAISE fnd_api.g_exc_error;
2131 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2132 RAISE fnd_api.g_exc_unexpected_error;
2133 END IF;
2134 END IF;
2135
2136 IF p_fund_rec.paid_amt IS NOT NULL
2137 AND p_fund_rec.paid_amt <> fnd_api.g_miss_num THEN
2138
2139 IF G_DEBUG THEN
2140 ozf_utility_pvt.debug_message (l_full_name
2141 || ' p_fund_rec.exchange_rate_date8: ' || p_fund_rec.exchange_rate_date);
2142 END IF;
2143
2144 Ozf_utility_pvt.convert_currency(
2145 x_return_status => l_return_status
2146 ,p_from_currency => p_fund_rec.currency_code_tc
2147 ,p_to_currency => l_old_curr
2148 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
2149 ,p_from_amount => p_fund_rec.paid_amt
2150 ,x_to_amount => l_fund_rec.paid_amt
2151 ,x_rate => l_rate);
2152
2153 /*
2154 --nirprasa, added for bug 7425189
2155 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
2156 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
2157 Ozf_utility_pvt.convert_currency(
2158 x_return_status => l_return_status
2159 ,p_from_currency => p_fund_rec.currency_code_tc
2160 ,p_to_currency => l_old_curr
2161 ,p_conv_date => p_fund_rec.exchange_rate_date
2162 ,p_from_amount => p_fund_rec.paid_amt
2163 ,x_to_amount => l_fund_rec.paid_amt
2164 ,x_rate => l_rate);
2165 ELSE
2166 Ozf_utility_pvt.convert_currency(
2167 x_return_status => l_return_status
2168 ,p_from_currency => p_fund_rec.currency_code_tc
2169 ,p_to_currency => l_old_curr
2170 ,p_from_amount => p_fund_rec.paid_amt
2171 ,x_to_amount => l_fund_rec.paid_amt
2172 ,x_rate => l_rate);
2173 END IF;
2174 */
2175 -- we need to pass the fund currency after calculating
2176 l_fund_rec.currency_code_tc := l_old_curr;
2177
2178 IF l_return_status = fnd_api.g_ret_sts_error THEN
2179 RAISE fnd_api.g_exc_error;
2180 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2181 RAISE fnd_api.g_exc_unexpected_error;
2182 END IF;
2183 END IF;
2184 END IF;
2185
2186 -- default fund_calendar
2187 IF l_fund_rec.start_period_name IS NULL
2188 AND l_fund_rec.end_period_name IS NULL THEN
2189 l_fund_rec.fund_calendar := NULL;
2190 ELSE
2191 l_fund_rec.fund_calendar := fnd_profile.VALUE('AMS_CAMPAIGN_DEFAULT_CALENDER');
2192 END IF;
2193
2194 -- generate source code
2195 IF p_fund_rec.parent_fund_id IS NOT NULL
2196 AND p_fund_rec.parent_fund_id <> fnd_api.g_miss_num
2197 AND p_fund_rec.fund_number IS NULL THEN
2198 get_child_source_code(
2199 p_fund_rec.parent_fund_id
2200 ,l_fund_rec.fund_number
2201 ,x_return_status);
2202
2203 IF x_return_status = fnd_api.g_ret_sts_error THEN
2204 RAISE fnd_api.g_exc_error;
2205 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
2206 RAISE fnd_api.g_exc_unexpected_error;
2207 END IF;
2208 END IF;
2209
2210 IF p_validation_level >= jtf_plsql_api.g_valid_level_item THEN
2211 ----dbms_output.put_line ('Calling Check_Fund_Items');
2212 check_fund_items(
2213 /* yzhao: 06/03/2003 fix bug 2984497 - TST1159.14 MASTER: BUDGET APPROVAL VALIDATION FAILS UPON APPROVAL IN WORKFLOW
2214 p_fund_rec => p_fund_rec
2215 */
2216 p_fund_rec => l_fund_rec
2217 ,p_validation_mode => jtf_plsql_api.g_update
2218 ,x_return_status => l_return_status
2219 ,p_mode => p_mode); -- For Bug 13529250, to pass p_mode to avoid budget amount validation while claim settlement
2220
2221 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2222 RAISE fnd_api.g_exc_unexpected_error;
2223 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
2224 RAISE fnd_api.g_exc_error;
2225 END IF;
2226 END IF;
2227
2228 -- record level
2229 IF p_validation_level >= jtf_plsql_api.g_valid_level_record THEN
2230 check_fund_record(
2231 p_fund_rec => p_fund_rec
2232 ,p_complete_rec => l_fund_rec
2233 ,p_mode => p_mode
2234 ,x_return_status => l_return_status);
2235
2236 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2237 RAISE fnd_api.g_exc_unexpected_error;
2238 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
2239 RAISE fnd_api.g_exc_error;
2240 END IF;
2241 END IF;
2242
2243 -- inter-entity level
2244 IF G_DEBUG THEN
2245 ozf_utility_pvt.debug_message(l_full_name || ': check inter-entity');
2246 END IF;
2247
2248 IF p_validation_level >= jtf_plsql_api.g_valid_level_inter_entity THEN
2249 check_fund_inter_entity(
2250 p_fund_rec => p_fund_rec
2251 ,p_complete_rec => l_fund_rec
2252 ,p_validation_mode => jtf_plsql_api.g_update
2253 ,x_return_status => l_return_status);
2254
2255 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2256 RAISE fnd_api.g_exc_unexpected_error;
2257 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
2258 RAISE fnd_api.g_exc_error;
2259 END IF;
2260 END IF;
2261
2262 -------------------------- update --------------------
2263 IF G_DEBUG THEN
2264 ozf_utility_pvt.debug_message(l_full_name || ': update');
2265
2266 ozf_utility_pvt.debug_message(l_full_name || ': get_category');
2267 END IF;
2268
2269 -- kdass 09-NOV-05 Bug 4618523
2270 /*
2271 --added by mpande 6th JULY-2000
2272 --get default category GL Info not for statistical funds
2273 IF p_fund_rec.category_id <> fnd_api.g_miss_num
2274 AND l_fund_rec.category_id IS NOT NULL THEN
2275 complete_default_gl_info(
2276 l_fund_rec.category_id
2277 ,l_fund_rec.accrued_liable_account
2278 ,l_fund_rec.ded_adjustment_account
2279 ,l_return_status);
2280
2281 IF l_return_status = fnd_api.g_ret_sts_error THEN
2282 RAISE fnd_api.g_exc_error;
2283 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2284 RAISE fnd_api.g_exc_unexpected_error;
2285 END IF;
2286 END IF;
2287 */
2288
2289 IF G_DEBUG THEN
2290 ozf_utility_pvt.debug_message(l_full_name || 'before update status' ||l_fund_rec.original_budget);
2291 END IF;
2292 -- perform all status related updation and if it is successful then only update the fund record
2293 -- Update fund could be called by other APIS in active status to update earned amt or committed amt .
2294 -- We do allow them to update the record then
2295 IF l_return_status = fnd_api.g_ret_sts_success THEN
2296 IF p_mode IN (jtf_PLSQL_API.G_UPDATE, 'WORKFLOW') THEN
2297 Ozf_fundrules_pvt.update_fund_status(
2298 p_fund_rec => l_fund_rec
2299 /* yzhao: 11/26/2002 how weird to pass IN parameter l_fund_rec, and use member as OUT parameter
2300 most importantly, it breaks with NOCOPY hint
2301 ,x_new_status_code => l_fund_rec.status_code
2302 ,x_new_status_id => l_fund_rec.user_status_id
2303 */
2304 ,x_new_status_code => l_tmp_status_code
2305 ,x_new_status_id => l_tmp_status_id
2306 ,x_submit_budget_approval => l_submit_budget_approval
2307 ,x_submit_child_approval =>l_submit_child_approval
2308 ,x_return_status => l_return_status
2309 ,x_msg_count => x_msg_count
2310 ,x_msg_data => x_msg_data
2311 ,p_api_version => 1.0);
2312
2313 IF l_return_status = fnd_api.g_ret_sts_error THEN
2314 RAISE fnd_api.g_exc_error;
2315 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2316 RAISE fnd_api.g_exc_unexpected_error;
2317 END IF;
2318
2319 l_fund_rec.status_code := l_tmp_status_code;
2320 l_fund_rec.user_status_id := l_tmp_status_id;
2321
2322 -- sangara added for R12
2323 IF l_tmp_status_code = 'ACTIVE' THEN
2324 l_fund_rec.activation_date := sysdate;
2325 END IF;
2326
2327 END IF;
2328 END IF;
2329
2330 -- 11/02/2001 mpande added for child fund we donot want to update original_budget but transfered_in_amt
2331 -- when no approval required , other the approval API will do the needful
2332 -- 11/06/2001 mpande added
2333 l_child_request_amt := l_fund_rec.original_budget;
2334 -- when setting the status directly to active
2335 IF l_fund_rec.parent_fund_id IS NOT NULL THEN
2336 IF l_fund_rec.status_code = 'ON_HOLD' OR l_fund_rec.status_code = 'ACTIVE' THEN
2337 --OR l_fund_rec.status_code = 'PENDING'
2338 IF l_old_status = 'DRAFT' THEN
2339 l_fund_rec.transfered_in_amt := l_fund_rec.original_budget;
2340 l_fund_rec.original_budget := 0 ;
2341 END IF ;
2342
2343 IF l_old_status = 'PENDING' OR l_old_status = 'DRAFT' THEN
2344 l_active_flag := true;
2345 END IF ;
2346
2347 END IF;
2348 END IF;
2349
2350 OPEN c_amt;
2351 FETCH c_amt INTO
2352 l_old_planned_amt,
2353 l_old_committed_amt,
2354 l_old_earned_amt,
2355 l_old_paid_amt,
2356 l_old_transfered_in_amt ,
2357 l_old_transfered_out_amt ,
2358 l_old_original_budget,
2359 l_old_recal_committed,
2360 l_old_holdback_amt,
2361 l_old_utilized_amt; -- yzhao: 11.5.10
2362 CLOSE c_amt;
2363
2364 OPEN c_rollup_amt;
2365 FETCH c_rollup_amt INTO
2366 l_or_planned_amt,
2367 l_or_committed_amt,
2368 l_or_earned_amt,
2369 l_or_paid_amt,
2370 l_or_transfered_in_amt ,
2371 l_or_transfered_out_amt ,
2372 l_or_original_budget,
2373 l_or_recal_committed,
2374 l_or_holdback_amt,
2375 l_or_utilized_amt;
2376 CLOSE c_rollup_amt;
2377
2378 IF l_fund_rec.original_budget IS NOT NULL
2379 THEN
2380
2381 IF G_DEBUG THEN
2382 ozf_utility_pvt.debug_message (l_full_name
2383 || ' p_fund_rec.exchange_rate_date9: ' || p_fund_rec.exchange_rate_date);
2384 END IF;
2385
2386 ozf_utility_pvt.convert_currency(
2387 x_return_status => l_return_status
2388 ,p_from_currency => l_fund_rec.currency_code_tc
2389 ,p_to_currency => g_universal_currency
2390 ,p_conv_date => p_fund_rec.exchange_rate_date --bug 7425189, 8532055
2391 ,p_from_amount => l_fund_rec.original_budget
2392 ,x_to_amount => l_original_budget
2393 ,x_rate => l_rate);
2394
2395 /*
2396 --nirprasa, added for bug 7425189
2397 IF p_fund_rec.description IN (l_fund_reconc_msg,l_act_bud_cst_msg)
2398 AND p_fund_rec.exchange_rate_date IS NOT NULL THEN
2399 Ozf_utility_pvt.convert_currency(
2400 x_return_status => l_return_status
2401 ,p_from_currency => l_fund_rec.currency_code_tc
2402 ,p_to_currency => g_universal_currency
2403 ,p_conv_date => p_fund_rec.exchange_rate_date
2404 ,p_from_amount => l_fund_rec.original_budget
2405 ,x_to_amount => l_original_budget
2406 ,x_rate => l_rate);
2407 ELSE
2408 Ozf_utility_pvt.convert_currency(
2409 x_return_status => l_return_status
2410 ,p_from_currency => l_fund_rec.currency_code_tc
2411 ,p_to_currency => g_universal_currency
2412 ,p_from_amount => l_fund_rec.original_budget
2413 ,x_to_amount => l_original_budget
2414 ,x_rate => l_rate);
2415 END IF;
2416 */
2417
2418
2419 --l_rollup_original_budget := l_original_budget - NVL(l_or_original_budget,0);
2420 --l_fund_rec.rollup_original_budget := l_original_budget;
2421
2422 l_fund_rec.rollup_original_budget := ozf_utility_pvt.CurrRound((l_fund_rec.original_budget - NVL(l_old_original_budget,0)) * l_rate
2423 ,g_universal_currency) + NVL(l_or_original_budget,0);
2424 l_rollup_original_budget := l_fund_rec.rollup_original_budget - NVL(l_or_original_budget,0);
2425
2426
2427 IF l_return_status = fnd_api.g_ret_sts_error THEN
2428 RAISE fnd_api.g_exc_error;
2429 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2430 RAISE fnd_api.g_exc_unexpected_error;
2431 END IF;
2432
2433 END IF;
2434
2435 IF l_fund_rec.transfered_in_amt IS NOT NULL
2436 AND l_rate is NOT NULL
2437 AND l_fund_rec.transfered_in_amt <> NVL(l_old_transfered_in_amt,0) THEN
2438
2439 l_fund_rec.rollup_transfered_in_amt := ozf_utility_pvt.CurrRound((l_fund_rec.transfered_in_amt - NVL(l_old_transfered_in_amt,0)) * l_rate
2440 ,g_universal_currency) + NVL(l_or_transfered_in_amt,0);
2441 l_rollup_transfered_in_amt := l_fund_rec.rollup_transfered_in_amt - NVL(l_or_transfered_in_amt,0);
2442
2443 END IF;
2444
2445 IF l_fund_rec.transfered_out_amt IS NOT NULL
2446 AND l_rate is NOT NULL
2447 AND l_fund_rec.transfered_out_amt <> NVL(l_old_transfered_out_amt,0) THEN
2448
2449 l_fund_rec.rollup_transfered_out_amt := ozf_utility_pvt.CurrRound((l_fund_rec.transfered_out_amt-NVL(l_old_transfered_out_amt,0)) * l_rate
2450 ,g_universal_currency) + NVL(l_or_transfered_out_amt,0);
2451 l_rollup_transfered_out_amt := l_fund_rec.rollup_transfered_out_amt - NVL(l_or_transfered_out_amt,0);
2452
2453 END IF;
2454
2455
2456 --IF l_fund_rec.holdback_amt IS NOT NULL
2457 --Bug Fix 4087106, Rollup holdback amt not updated when manually updated.
2458 IF l_rate is NOT NULL
2459 AND NVL(l_fund_rec.holdback_amt,0) <> NVL(l_old_holdback_amt,0) THEN
2460
2461 l_fund_rec.rollup_holdback_amt := ozf_utility_pvt.CurrRound((NVL(l_fund_rec.holdback_amt,0)-NVL(l_old_holdback_amt,0)) * l_rate
2462 ,g_universal_currency)+ NVL(l_or_holdback_amt,0);
2463 l_rollup_holdback_amt := l_fund_rec.rollup_holdback_amt - NVL(l_or_holdback_amt,0);
2464
2465 END IF;
2466
2467
2468 IF l_fund_rec.planned_amt IS NOT NULL
2469 AND l_rate is NOT NULL
2470 AND l_fund_rec.planned_amt <> NVL(l_old_planned_amt,0) THEN
2471
2472 l_fund_rec.rollup_planned_amt := ozf_utility_pvt.CurrRound((l_fund_rec.planned_amt-NVL(l_old_planned_amt,0)) * l_rate
2473 ,g_universal_currency)+ NVL(l_or_planned_amt,0);
2474 l_rollup_planned_amt := l_fund_rec.rollup_planned_amt - NVL(l_or_planned_amt,0);
2475
2476 END IF;
2477
2478 IF l_fund_rec.committed_amt IS NOT NULL
2479 AND l_rate is NOT NULL
2480 AND l_fund_rec.committed_amt <> NVL(l_old_committed_amt,0) THEN
2481
2482 l_fund_rec.rollup_committed_amt := ozf_utility_pvt.CurrRound((l_fund_rec.committed_amt-NVL(l_old_committed_amt,0)) * l_rate
2483 ,g_universal_currency) + NVL(l_or_committed_amt,0);
2484 l_rollup_committed_amt :=l_fund_rec.rollup_committed_amt - NVL(l_or_committed_amt,0);
2485
2486 END IF;
2487
2488 IF l_fund_rec.utilized_amt IS NOT NULL
2489 AND l_rate is NOT NULL
2490 AND l_fund_rec.utilized_amt <> NVL(l_old_utilized_amt,0) THEN
2491
2492 l_fund_rec.rollup_utilized_amt := ozf_utility_pvt.CurrRound((l_fund_rec.utilized_amt-NVL(l_old_utilized_amt,0)) * l_rate
2493 ,g_universal_currency) + NVL(l_or_utilized_amt,0);
2494 l_rollup_utilized_amt := l_fund_rec.rollup_utilized_amt - NVL(l_or_utilized_amt,0);
2495
2496 END IF;
2497
2498 IF l_fund_rec.earned_amt IS NOT NULL
2499 AND l_rate is NOT NULL
2500 AND l_fund_rec.earned_amt <> NVL(l_old_earned_amt,0) THEN
2501
2502 l_fund_rec.rollup_earned_amt := ozf_utility_pvt.CurrRound((l_fund_rec.earned_amt-NVL(l_old_earned_amt,0)) * l_rate
2503 ,g_universal_currency) + NVL(l_or_earned_amt,0);
2504 l_rollup_earned_amt := l_fund_rec.rollup_earned_amt - NVL(l_or_earned_amt,0);
2505
2506 END IF;
2507
2508
2509 IF l_fund_rec.paid_amt IS NOT NULL
2510 AND l_rate is NOT NULL
2511 AND l_fund_rec.paid_amt <> NVL(l_old_paid_amt,0) THEN
2512
2513 l_fund_rec.rollup_paid_amt := ozf_utility_pvt.CurrRound((l_fund_rec.paid_amt-NVL(l_old_paid_amt,0)) * l_rate
2514 ,g_universal_currency) +NVL(l_or_paid_amt,0);
2515 l_rollup_paid_amt := l_fund_rec.rollup_paid_amt - NVL(l_or_paid_amt,0);
2516
2517 END IF;
2518
2519 IF l_fund_rec.recal_committed IS NOT NULL
2520 AND l_rate is NOT NULL
2521 AND l_fund_rec.recal_committed <> NVL(l_old_recal_committed,0) THEN
2522
2523 l_fund_rec.rollup_recal_committed := ozf_utility_pvt.CurrRound((l_fund_rec.recal_committed-NVL(l_old_recal_committed,0)) * l_rate
2524 ,g_universal_currency) +NVL(l_or_recal_committed,0);
2525 l_rollup_recal_committed :=l_fund_rec.rollup_recal_committed - NVL(l_or_recal_committed,0);
2526
2527 END IF;
2528
2529 -- added by feliu to fix bug 2654263
2530 IF l_fund_rec.parent_fund_id IS NOT NULL THEN
2531 OPEN c_par_fund_owner(l_fund_rec.parent_fund_id);
2532 FETCH c_par_fund_owner INTO l_par_fund_owner;
2533 CLOSE c_par_fund_owner;
2534 END IF;
2535
2536 -- delete access before update budget because we delete access by loop through tree.
2537 --if the parent fundowner and the child fund owner is not same.
2538 IF l_fund_rec.parent_fund_id IS NOT NULL AND l_fund_rec.owner <> l_par_fund_owner THEN
2539 --if there is no parent fund OR (09/05/2001 mpande) when no records exists in ams_act_access for the fund
2540 --then create a access for the new parent ownner
2541 --if the old parent fund and the new parent fund is diffrent then delete the access
2542 IF l_old_parent_fund_id <> l_fund_rec.parent_fund_id THEN
2543 -- remove old access.
2544 update_funds_access(
2545 p_api_version => l_api_version
2546 ,p_init_msg_list => fnd_api.g_false
2547 ,p_commit => fnd_api.g_false
2548 ,p_validation_level => p_validation_level
2549 ,x_return_status => l_return_status
2550 ,x_msg_count => x_msg_count
2551 ,x_msg_data => x_msg_data
2552 ,p_fund_rec => l_fund_rec
2553 ,p_mode => 'DELETE'
2554 );
2555
2556 IF l_return_status = fnd_api.g_ret_sts_error THEN
2557 RAISE fnd_api.g_exc_error;
2558 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2559 RAISE fnd_api.g_exc_unexpected_error;
2560 END IF;
2561 END IF; -- end of l_old_parent_fund_id <> l_fund_rec.parent_fund_id.
2562 END IF; -- end of l_fund_rec.parent_fund_id IS NOT NULL
2563
2564 -- if removing parent then remove access
2565 IF l_fund_rec.parent_fund_id IS NULL AND l_old_parent_fund_id IS NOT NULL THEN
2566 update_funds_access(
2567 p_api_version => l_api_version
2568 ,p_init_msg_list => fnd_api.g_false
2569 ,p_commit => fnd_api.g_false
2570 ,p_validation_level => p_validation_level
2571 ,x_return_status => l_return_status
2572 ,x_msg_count => x_msg_count
2573 ,x_msg_data => x_msg_data
2574 ,p_fund_rec => l_fund_rec
2575 ,p_mode => 'DELETE'
2576 );
2577
2578 IF l_return_status = fnd_api.g_ret_sts_error THEN
2579 RAISE fnd_api.g_exc_error;
2580 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2581 RAISE fnd_api.g_exc_unexpected_error;
2582 END IF;
2583
2584 END IF; -- l_fund_rec.parent_fund_id
2585 -- added by feliu to fix bug 2654263
2586
2587 -- feliu 04/08/04 to fix bug 3551038 to update status_date.
2588 IF l_fund_rec.status_code <> l_old_status THEN
2589 l_fund_rec.status_date := SYSDATE;
2590 END IF;
2591
2592 IF G_DEBUG THEN
2593 ozf_utility_pvt.debug_message('l_use_fund_staging_tables: ' || l_use_fund_staging_tables );
2594 END IF;
2595 -- For BUG#8867381(+)
2596 -- l_use_fund_staging_tables flag is set only for chargeback flow and will insert the records into
2597 -- new record type and pass it on to OZF_RESALE_COMMON_PVT.UPDATE_OZF_FUNDS_ALL_B procedure for updating
2598 -- the main table.
2599 If l_use_fund_staging_tables <> 'T' then
2600
2601
2602 UPDATE ozf_funds_all_tl
2603 SET last_update_date = SYSDATE
2604 ,last_updated_by = NVL(fnd_global.user_id, -1)
2605 ,last_update_login = NVL(fnd_global.conc_login_id, -1)
2606 ,created_from = NULL
2607 ,request_id = fnd_global.conc_request_id
2608 ,program_application_id = fnd_global.prog_appl_id
2609 ,program_id = fnd_global.conc_program_id
2610 ,program_update_date = SYSDATE
2611 ,short_name = l_fund_rec.short_name
2612 ,description = l_fund_rec.description
2613 ,source_lang = USERENV('LANG')
2614 WHERE fund_id = l_fund_rec.fund_id
2615 AND USERENV('LANG') IN(language, source_lang);
2616
2617 UPDATE ozf_funds_all_b
2618 SET last_update_date = SYSDATE
2619 ,last_updated_by = NVL(fnd_global.user_id, -1)
2620 ,last_update_login = NVL(fnd_global.conc_login_id, -1)
2621 ,created_from = NULL
2622 ,request_id = fnd_global.conc_request_id
2623 ,program_application_id = fnd_global.prog_appl_id
2624 ,program_id = fnd_global.conc_program_id
2625 ,program_update_date = SYSDATE
2626 ,fund_number = l_fund_rec.fund_number
2627 ,parent_fund_id = l_fund_rec.parent_fund_id
2628 ,category_id = l_fund_rec.category_id
2629 ,fund_type = l_fund_rec.fund_type
2630 ,fund_usage = l_fund_rec.fund_usage
2631 ,status_code = l_fund_rec.status_code
2632 ,user_status_id = l_fund_rec.user_status_id
2633 ,status_date = NVL(l_fund_rec.status_date, SYSDATE)
2634 ,accrued_liable_account = l_fund_rec.accrued_liable_account
2635 ,ded_adjustment_account = l_fund_rec.ded_adjustment_account
2636 ,liability_flag = l_fund_rec.liability_flag
2637 ,set_of_books_id = l_fund_rec.set_of_books_id
2638 ,start_period_id = l_fund_rec.start_period_id
2639 ,end_period_id = l_fund_rec.end_period_id
2640 ,start_date_active = l_fund_rec.start_date_active
2641 ,end_date_active = l_fund_rec.end_date_active
2642 ,budget_amount_tc = l_fund_rec.budget_amount_tc
2643 ,budget_amount_fc = l_fund_rec.budget_amount_fc
2644 ,available_amount = l_fund_rec.available_amount
2645 ,distributed_amount = l_fund_rec.distributed_amount
2646 ,currency_code_tc = l_fund_rec.currency_code_tc
2647 ,currency_code_fc = l_fund_rec.currency_code_fc
2648 ,exchange_rate_type = l_fund_rec.exchange_rate_type
2649 ,exchange_rate_date = l_fund_rec.exchange_rate_date
2650 ,exchange_rate = l_fund_rec.exchange_rate
2651 ,department_id = l_fund_rec.department_id
2652 ,costcentre_id = l_fund_rec.costcentre_id
2653 ,owner = l_fund_rec.owner
2654 ,accrual_method = l_fund_rec.accrual_method
2655 ,accrual_operand = l_fund_rec.accrual_operand
2656 ,accrual_rate = l_fund_rec.accrual_rate
2657 ,accrual_basis = l_fund_rec.accrual_basis
2658 ,hierarchy = l_fund_rec.hierarchy
2659 ,hierarchy_level = l_fund_rec.hierarchy_level
2660 ,hierarchy_id = l_fund_rec.hierarchy_id
2661 ,parent_node_id = l_fund_rec.parent_node_id
2662 ,node_id = l_fund_rec.node_id --,level_value = l_fund_rec.level_value
2663 ,budget_flag = l_fund_rec.budget_flag
2664 ,earned_flag = l_fund_rec.earned_flag
2665 ,apply_accrual_on = l_fund_rec.apply_accrual_on
2666 ,accrual_phase = l_fund_rec.accrual_phase
2667 ,accrual_cap = l_fund_rec.accrual_cap
2668 ,accrual_uom = l_fund_rec.accrual_uom
2669 ,object_version_number = l_fund_rec.object_version_number + 1
2670 ,recal_committed = l_fund_rec.recal_committed
2671 ,attribute_category = l_fund_rec.attribute_category
2672 ,attribute1 = l_fund_rec.attribute1
2673 ,attribute2 = l_fund_rec.attribute2
2674 ,attribute3 = l_fund_rec.attribute3
2675 ,attribute4 = l_fund_rec.attribute4
2676 ,attribute5 = l_fund_rec.attribute5
2677 ,attribute6 = l_fund_rec.attribute6
2678 ,attribute7 = l_fund_rec.attribute7
2679 ,attribute8 = l_fund_rec.attribute8
2680 ,attribute9 = l_fund_rec.attribute9
2681 ,attribute10 = l_fund_rec.attribute10
2682 ,attribute11 = l_fund_rec.attribute11
2683 ,attribute12 = l_fund_rec.attribute12
2684 ,attribute13 = l_fund_rec.attribute13
2685 ,attribute14 = l_fund_rec.attribute14
2686 ,attribute15 = l_fund_rec.attribute15
2687 ,original_budget = l_fund_rec.original_budget
2688 ,transfered_in_amt = l_fund_rec.transfered_in_amt
2689 ,transfered_out_amt = l_fund_rec.transfered_out_amt
2690 ,holdback_amt = l_fund_rec.holdback_amt
2691 ,planned_amt = l_fund_rec.planned_amt
2692 ,committed_amt = l_fund_rec.committed_amt
2693 ,earned_amt = l_fund_rec.earned_amt
2694 ,paid_amt = l_fund_rec.paid_amt
2695 ,plan_type = l_fund_rec.plan_type
2696 ,plan_id = l_fund_rec.plan_id
2697 ,liable_accnt_segments = l_fund_rec.liable_accnt_segments
2698 ,adjustment_accnt_segments = l_fund_rec.adjustment_accnt_segments
2699 ,fund_calendar = l_fund_rec.fund_calendar
2700 ,start_period_name = l_fund_rec.start_period_name
2701 ,end_period_name = l_fund_rec.end_period_name
2702 ,accrual_quantity = l_fund_rec.accrual_quantity
2703 ,accrue_to_level_id = l_fund_rec.accrue_to_level_id
2704 ,accrual_discount_level = l_fund_rec.accrual_discount_level
2705 ,custom_setup_id = l_fund_rec.custom_setup_id
2706 ,threshold_id = l_fund_rec.threshold_id
2707 ,business_unit_id = l_fund_rec.business_unit_id
2708 ,country_id = l_fund_rec.country_id
2709 ,task_id = l_fund_rec.task_id
2710 ,rollup_original_budget = l_fund_rec.rollup_original_budget
2711 ,rollup_transfered_in_amt = l_fund_rec.rollup_transfered_in_amt
2712 ,rollup_transfered_out_amt = l_fund_rec.rollup_transfered_out_amt
2713 ,rollup_holdback_amt = l_fund_rec.rollup_holdback_amt
2714 ,rollup_planned_amt = l_fund_rec.rollup_planned_amt
2715 ,rollup_committed_amt = l_fund_rec.rollup_committed_amt
2716 ,rollup_earned_amt = l_fund_rec.rollup_earned_amt
2717 ,rollup_paid_amt = l_fund_rec.rollup_paid_amt
2718 ,rollup_recal_committed = l_fund_rec.rollup_recal_committed
2719 ,retroactive_flag = l_fund_rec.retroactive_flag
2720 ,qualifier_id = l_fund_rec.qualifier_id
2721 -- niprakas added
2722 ,prev_fund_id = l_fund_rec.prev_fund_id
2723 ,transfered_flag = l_fund_rec.transfered_flag
2724 ,utilized_amt = l_fund_rec.utilized_amt
2725 ,rollup_utilized_amt = l_fund_rec.rollup_utilized_amt
2726 ,product_spread_time_id = l_fund_rec.product_spread_time_id
2727 -- sangara added
2728 ,activation_date = l_fund_rec.activation_date
2729 -- kdass - R12 MOAC changes
2730 ,ledger_id = l_fund_rec.ledger_id
2731 WHERE fund_id = l_fund_rec.fund_id
2732 AND object_version_number = l_fund_rec.object_version_number;
2733
2734 IF (SQL%NOTFOUND) THEN
2735 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
2736 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
2737 fnd_msg_pub.add;
2738 END IF;
2739
2740 RAISE fnd_api.g_exc_error;
2741 END IF;
2742
2743 ELSE
2744 -- For TPA Parallel Execution ER - 9614703 (+)
2745 IF p_batch_type = 'CHARGEBACK' THEN
2746
2747 px_ozf_funds_new_tbl(1).RESALE_BATCH_ID := p_resale_batch_id;
2748 px_ozf_funds_new_tbl(1).FUND_ID := l_fund_rec.fund_id;
2749 px_ozf_funds_new_tbl(1).BATCH_TYPE := px_ozf_funds_old_rectype.BATCH_TYPE;
2750 px_ozf_funds_new_tbl(1).BUDGET_AMOUNT_TC := NVL(px_ozf_funds_new_tbl(1).BUDGET_AMOUNT_TC ,0) + NVL(l_fund_rec.budget_amount_tc,0) - NVL(px_ozf_funds_old_rectype.BUDGET_AMOUNT_TC ,0);
2751 px_ozf_funds_new_tbl(1).BUDGET_AMOUNT_FC := NVL(px_ozf_funds_new_tbl(1).BUDGET_AMOUNT_FC ,0) + NVL(l_fund_rec.budget_amount_fc,0) - NVL(px_ozf_funds_old_rectype.BUDGET_AMOUNT_FC ,0);
2752 px_ozf_funds_new_tbl(1).AVAILABLE_AMOUNT := NVL(px_ozf_funds_new_tbl(1).AVAILABLE_AMOUNT ,0) + NVL(l_fund_rec.available_amount,0) - NVL(px_ozf_funds_old_rectype.AVAILABLE_AMOUNT ,0);
2753 px_ozf_funds_new_tbl(1).TRANSFERED_IN_AMT := NVL(px_ozf_funds_new_tbl(1).TRANSFERED_IN_AMT ,0) + NVL(l_fund_rec.transfered_in_amt,0) - NVL(px_ozf_funds_old_rectype.TRANSFERED_IN_AMT ,0);
2754 px_ozf_funds_new_tbl(1).TRANSFERED_OUT_AMT := NVL(px_ozf_funds_new_tbl(1).TRANSFERED_OUT_AMT ,0) + NVL(l_fund_rec.transfered_out_amt,0) - NVL(px_ozf_funds_old_rectype.TRANSFERED_OUT_AMT ,0);
2755 px_ozf_funds_new_tbl(1).PLANNED_AMT := NVL(px_ozf_funds_new_tbl(1).PLANNED_AMT ,0) + NVL(l_fund_rec.planned_amt,0) - NVL(px_ozf_funds_old_rectype.PLANNED_AMT ,0);
2756 px_ozf_funds_new_tbl(1).COMMITTED_AMT := NVL(px_ozf_funds_new_tbl(1).COMMITTED_AMT ,0) + NVL(l_fund_rec.committed_amt,0) - NVL(px_ozf_funds_old_rectype.COMMITTED_AMT ,0);
2757 px_ozf_funds_new_tbl(1).EARNED_AMT := NVL(px_ozf_funds_new_tbl(1).EARNED_AMT ,0) + NVL(l_fund_rec.earned_amt,0) - NVL(px_ozf_funds_old_rectype.EARNED_AMT ,0);
2758 px_ozf_funds_new_tbl(1).PAID_AMT := NVL(px_ozf_funds_new_tbl(1).PAID_AMT ,0) + NVL(l_fund_rec.paid_amt,0) - NVL(px_ozf_funds_old_rectype.PAID_AMT ,0);
2759 px_ozf_funds_new_tbl(1).RECAL_COMMITTED := NVL(px_ozf_funds_new_tbl(1).RECAL_COMMITTED ,0) + NVL(l_fund_rec.recal_committed,0) - NVL(px_ozf_funds_old_rectype.RECAL_COMMITTED ,0);
2760 px_ozf_funds_new_tbl(1).ROLLUP_ORIGINAL_BUDGET := NVL(px_ozf_funds_new_tbl(1).ROLLUP_ORIGINAL_BUDGET ,0) + NVL(l_fund_rec.rollup_original_budget,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_ORIGINAL_BUDGET ,0);
2761 px_ozf_funds_new_tbl(1).ROLLUP_TRANSFERED_IN_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_TRANSFERED_IN_AMT ,0) + NVL(l_fund_rec.rollup_transfered_in_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_TRANSFERED_IN_AMT ,0);
2762 px_ozf_funds_new_tbl(1).ROLLUP_TRANSFERED_OUT_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_TRANSFERED_OUT_AMT ,0) + NVL(l_fund_rec.rollup_transfered_out_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_TRANSFERED_OUT_AMT ,0);
2763 px_ozf_funds_new_tbl(1).ROLLUP_HOLDBACK_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_HOLDBACK_AMT ,0) + NVL(l_fund_rec.rollup_holdback_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_HOLDBACK_AMT ,0);
2764 px_ozf_funds_new_tbl(1).ROLLUP_PLANNED_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_PLANNED_AMT ,0) + NVL(l_fund_rec.rollup_planned_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_PLANNED_AMT ,0);
2765 px_ozf_funds_new_tbl(1).ROLLUP_COMMITTED_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_COMMITTED_AMT ,0) + NVL(l_fund_rec.rollup_committed_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_COMMITTED_AMT ,0);
2766 px_ozf_funds_new_tbl(1).ROLLUP_RECAL_COMMITTED := NVL(px_ozf_funds_new_tbl(1).ROLLUP_RECAL_COMMITTED ,0) + NVL(l_fund_rec.rollup_recal_committed,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_RECAL_COMMITTED ,0);
2767 px_ozf_funds_new_tbl(1).ROLLUP_EARNED_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_EARNED_AMT ,0) + NVL(l_fund_rec.rollup_earned_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_EARNED_AMT ,0);
2768 px_ozf_funds_new_tbl(1).ROLLUP_PAID_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_PAID_AMT ,0) + NVL(l_fund_rec.rollup_paid_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_PAID_AMT ,0);
2769 px_ozf_funds_new_tbl(1).UTILIZED_AMT := NVL(px_ozf_funds_new_tbl(1).UTILIZED_AMT ,0) + NVL(l_fund_rec.utilized_amt,0) - NVL(px_ozf_funds_old_rectype.UTILIZED_AMT ,0);
2770 px_ozf_funds_new_tbl(1).ROLLUP_UTILIZED_AMT := NVL(px_ozf_funds_new_tbl(1).ROLLUP_UTILIZED_AMT ,0) + NVL(l_fund_rec.rollup_utilized_amt,0) - NVL(px_ozf_funds_old_rectype.ROLLUP_UTILIZED_AMT ,0);
2771
2772 ELSIF p_batch_type = 'TP_ACCRUAL' THEN
2773
2774 l_fund_record_num := 0;
2775 l_operation := 'INSERT';
2776
2777 IF px_ozf_funds_new_tbl.COUNT > 0 THEN
2778 FOR i IN 1 .. px_ozf_funds_new_tbl.COUNT
2779 LOOP
2780 IF l_fund_rec.fund_id = px_ozf_funds_new_tbl(i).fund_id THEN
2781 l_operation := 'UPDATE';
2782 l_fund_record_num := i;
2783 GOTO START_OPERATION;
2784 END IF;
2785 END LOOP;
2786 END IF;
2787
2788 <<START_OPERATION>>
2789
2790 IF G_DEBUG THEN
2791 ozf_utility_pvt.debug_message('l_operation: ' || l_operation);
2792 END IF;
2793
2794 IF l_operation = 'UPDATE' THEN
2795
2796 IF G_DEBUG THEN
2797 ozf_utility_pvt.debug_message('fund_id: ' || px_ozf_funds_new_tbl(l_fund_record_num).FUND_ID);
2798 ozf_utility_pvt.debug_message('existing earned: ' || px_ozf_funds_new_tbl(l_fund_record_num).EARNED_AMT);
2799 END IF;
2800
2801 px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_TC := NVL(px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_TC ,0)
2802 + NVL(l_fund_rec.budget_amount_tc,0)
2803 - NVL(px_ozf_funds_old_rectype.budget_amount_tc,0);
2804 px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_FC := NVL(px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_FC ,0)
2805 + NVL(l_fund_rec.budget_amount_fc,0)
2806 - NVL(px_ozf_funds_old_rectype.budget_amount_fc,0);
2807 px_ozf_funds_new_tbl(l_fund_record_num).AVAILABLE_AMOUNT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).AVAILABLE_AMOUNT ,0)
2808 + NVL(l_fund_rec.available_amount,0)
2809 - NVL(px_ozf_funds_old_rectype.available_amount,0);
2810 px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_IN_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_IN_AMT ,0)
2811 + NVL(l_fund_rec.transfered_in_amt,0)
2812 - NVL(px_ozf_funds_old_rectype.transfered_in_amt,0);
2813 px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_OUT_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_OUT_AMT ,0)
2814 + NVL(l_fund_rec.transfered_out_amt,0)
2815 - NVL(px_ozf_funds_old_rectype.transfered_out_amt,0);
2816 px_ozf_funds_new_tbl(l_fund_record_num).PLANNED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).PLANNED_AMT ,0)
2817 + NVL(l_fund_rec.planned_amt,0)
2818 - NVL(px_ozf_funds_old_rectype.planned_amt,0);
2819 px_ozf_funds_new_tbl(l_fund_record_num).COMMITTED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).COMMITTED_AMT ,0)
2820 + NVL(l_fund_rec.committed_amt,0)
2821 - NVL(px_ozf_funds_old_rectype.committed_amt,0);
2822 px_ozf_funds_new_tbl(l_fund_record_num).EARNED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).EARNED_AMT ,0)
2823 + NVL(l_fund_rec.earned_amt,0)
2824 - NVL(px_ozf_funds_old_rectype.earned_amt,0);
2825 px_ozf_funds_new_tbl(l_fund_record_num).PAID_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).PAID_AMT ,0)
2826 + NVL(l_fund_rec.paid_amt,0)
2827 - NVL(px_ozf_funds_old_rectype.paid_amt,0);
2828 px_ozf_funds_new_tbl(l_fund_record_num).RECAL_COMMITTED := NVL(px_ozf_funds_new_tbl(l_fund_record_num).RECAL_COMMITTED ,0)
2829 + NVL(l_fund_rec.recal_committed,0)
2830 - NVL(px_ozf_funds_old_rectype.recal_committed,0);
2831 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_ORIGINAL_BUDGET := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_ORIGINAL_BUDGET ,0)
2832 + NVL(l_fund_rec.rollup_original_budget,0)
2833 - NVL(px_ozf_funds_old_rectype.rollup_original_budget,0);
2834 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_IN_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_IN_AMT ,0)
2835 + NVL(l_fund_rec.rollup_transfered_in_amt,0)
2836 - NVL(px_ozf_funds_old_rectype.rollup_transfered_in_amt,0);
2837 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_OUT_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_OUT_AMT ,0)
2838 + NVL(l_fund_rec.rollup_transfered_out_amt,0)
2839 - NVL(px_ozf_funds_old_rectype.rollup_transfered_out_amt,0);
2840 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_HOLDBACK_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_HOLDBACK_AMT ,0)
2841 + NVL(l_fund_rec.rollup_holdback_amt,0)
2842 - NVL(px_ozf_funds_old_rectype.rollup_holdback_amt,0);
2843 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PLANNED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PLANNED_AMT ,0)
2844 + NVL(l_fund_rec.rollup_planned_amt,0)
2845 - NVL(px_ozf_funds_old_rectype.rollup_planned_amt,0);
2846 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_COMMITTED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_COMMITTED_AMT ,0)
2847 + NVL(l_fund_rec.rollup_committed_amt,0)
2848 - NVL(px_ozf_funds_old_rectype.rollup_committed_amt,0);
2849 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_RECAL_COMMITTED := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_RECAL_COMMITTED ,0)
2850 + NVL(l_fund_rec.rollup_recal_committed,0)
2851 - NVL(px_ozf_funds_old_rectype.rollup_recal_committed,0);
2852 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_EARNED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_EARNED_AMT ,0)
2853 + NVL(l_fund_rec.rollup_earned_amt,0)
2854 - NVL(px_ozf_funds_old_rectype.rollup_earned_amt,0);
2855 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PAID_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PAID_AMT ,0)
2856 + NVL(l_fund_rec.rollup_paid_amt,0)
2857 - NVL(px_ozf_funds_old_rectype.rollup_paid_amt,0);
2858 px_ozf_funds_new_tbl(l_fund_record_num).UTILIZED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).UTILIZED_AMT ,0)
2859 + NVL(l_fund_rec.utilized_amt,0)
2860 - NVL(px_ozf_funds_old_rectype.utilized_amt,0);
2861 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_UTILIZED_AMT := NVL(px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_UTILIZED_AMT ,0)
2862 + NVL(l_fund_rec.rollup_utilized_amt,0)
2863 - NVL(px_ozf_funds_old_rectype.rollup_utilized_amt,0);
2864
2865 ELSIF l_operation = 'INSERT' THEN
2866 l_fund_record_num := px_ozf_funds_new_tbl.COUNT + 1;
2867
2868 IF G_DEBUG THEN
2869 ozf_utility_pvt.debug_message('fund_id: ' || l_fund_rec.fund_id);
2870 END IF;
2871
2872 px_ozf_funds_new_tbl(l_fund_record_num).RESALE_BATCH_ID := p_resale_batch_id;
2873 px_ozf_funds_new_tbl(l_fund_record_num).FUND_ID := l_fund_rec.fund_id;
2874 px_ozf_funds_new_tbl(l_fund_record_num).BATCH_TYPE := p_batch_type;
2875 px_ozf_funds_new_tbl(l_fund_record_num).REQUEST_ID := fnd_global.conc_request_id;
2876 px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_TC := NVL(l_fund_rec.budget_amount_tc,0) - NVL(px_ozf_funds_old_rectype.budget_amount_tc,0);
2877 px_ozf_funds_new_tbl(l_fund_record_num).BUDGET_AMOUNT_FC := NVL(l_fund_rec.budget_amount_fc,0)- NVL(px_ozf_funds_old_rectype.budget_amount_fc,0);
2878 px_ozf_funds_new_tbl(l_fund_record_num).AVAILABLE_AMOUNT := NVL(l_fund_rec.available_amount,0) - NVL(px_ozf_funds_old_rectype.available_amount,0);
2879 px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_IN_AMT := NVL(l_fund_rec.transfered_in_amt,0) - NVL(px_ozf_funds_old_rectype.transfered_in_amt,0);
2880 px_ozf_funds_new_tbl(l_fund_record_num).TRANSFERED_OUT_AMT := NVL(l_fund_rec.transfered_out_amt,0) - NVL(px_ozf_funds_old_rectype.transfered_out_amt,0);
2881 px_ozf_funds_new_tbl(l_fund_record_num).PLANNED_AMT := NVL(l_fund_rec.planned_amt,0) - NVL(px_ozf_funds_old_rectype.planned_amt,0);
2882 px_ozf_funds_new_tbl(l_fund_record_num).COMMITTED_AMT := NVL(l_fund_rec.committed_amt,0) - NVL(px_ozf_funds_old_rectype.committed_amt,0);
2883 px_ozf_funds_new_tbl(l_fund_record_num).EARNED_AMT := NVL(l_fund_rec.earned_amt,0) - NVL(px_ozf_funds_old_rectype.earned_amt,0);
2884 px_ozf_funds_new_tbl(l_fund_record_num).PAID_AMT := NVL(l_fund_rec.paid_amt,0) - NVL(px_ozf_funds_old_rectype.paid_amt,0);
2885 px_ozf_funds_new_tbl(l_fund_record_num).RECAL_COMMITTED := NVL(l_fund_rec.recal_committed,0) - NVL(px_ozf_funds_old_rectype.recal_committed,0);
2886 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_ORIGINAL_BUDGET := NVL(l_fund_rec.rollup_original_budget,0) - NVL(px_ozf_funds_old_rectype.rollup_original_budget,0);
2887 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_IN_AMT := NVL(l_fund_rec.rollup_transfered_in_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_transfered_in_amt,0);
2888 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_TRANSFERED_OUT_AMT := NVL(l_fund_rec.rollup_transfered_out_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_transfered_out_amt,0);
2889 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_HOLDBACK_AMT := NVL(l_fund_rec.rollup_holdback_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_holdback_amt,0);
2890 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PLANNED_AMT := NVL(l_fund_rec.rollup_planned_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_planned_amt,0);
2891 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_COMMITTED_AMT := NVL(l_fund_rec.rollup_committed_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_committed_amt,0);
2892 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_RECAL_COMMITTED := NVL(l_fund_rec.rollup_recal_committed,0) - NVL(px_ozf_funds_old_rectype.rollup_recal_committed,0);
2893 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_EARNED_AMT := NVL(l_fund_rec.rollup_earned_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_earned_amt,0);
2894 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_PAID_AMT := NVL(l_fund_rec.rollup_paid_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_paid_amt,0);
2895 px_ozf_funds_new_tbl(l_fund_record_num).UTILIZED_AMT := NVL(l_fund_rec.utilized_amt,0) - NVL(px_ozf_funds_old_rectype.utilized_amt,0);
2896 px_ozf_funds_new_tbl(l_fund_record_num).ROLLUP_UTILIZED_AMT := NVL(l_fund_rec.rollup_utilized_amt,0) - NVL(px_ozf_funds_old_rectype.rollup_utilized_amt,0);
2897
2898 END IF;
2899
2900 IF G_DEBUG THEN
2901 ozf_utility_pvt.debug_message('earned from fund table: ' || px_ozf_funds_old_rectype.earned_amt);
2902 ozf_utility_pvt.debug_message('new earned: ' || l_fund_rec.earned_amt);
2903 ozf_utility_pvt.debug_message('final earned: ' || px_ozf_funds_new_tbl(l_fund_record_num).EARNED_AMT);
2904 END IF;
2905
2906 END IF;
2907 -- For TPA Parallel Execution ER - 9614703 (-)
2908
2909 END IF;
2910 -- For Bug#8867381 (-)
2911
2912 IF l_return_status = fnd_api.g_ret_sts_success THEN
2913
2914 -- added by feliu for updating rollup amount columns.
2915 -- if parent_fund_id is not null, update parent's rollup amount by using this fund's
2916 -- rollup amount change.
2917 --dbms_output.put_line('parent_fund_id '||l_fund_rec.parent_fund_id);
2918
2919 IF l_fund_rec.status_code NOT IN ( 'DRAFT' ,'REJECTED','PENDING')
2920 AND (l_rollup_original_budget IS NOT NULL OR
2921 l_rollup_transfered_in_amt IS NOT NULL OR
2922 l_rollup_transfered_out_amt IS NOT NULL OR
2923 l_rollup_holdback_amt IS NOT NULL OR
2924 l_rollup_planned_amt IS NOT NULL OR
2925 l_rollup_committed_amt IS NOT NULL OR
2926 l_rollup_utilized_amt IS NOT NULL OR
2927 l_rollup_earned_amt IS NOT NULL OR -- yzhao: 11.5.10
2928 l_rollup_paid_amt IS NOT NULL OR
2929 l_rollup_recal_committed IS NOT NULL)
2930 THEN
2931
2932 --nirprasa, no chnage needed as parent_fund_id is NULL for reconcile flow
2933 IF l_fund_rec.parent_fund_id IS NOT NULL THEN
2934 --For case from draft to active, update with own value, other case use difference to update rollup
2935 IF l_active_flag = false THEN
2936 l_fund_rec.rollup_original_budget := NVL(l_rollup_original_budget,0);
2937 l_fund_rec.rollup_transfered_in_amt := NVL(l_rollup_transfered_in_amt,0);
2938 l_fund_rec.rollup_transfered_out_amt := NVL(l_rollup_transfered_out_amt,0);
2939 l_fund_rec.rollup_holdback_amt := NVL(l_rollup_holdback_amt,0);
2940 l_fund_rec.rollup_planned_amt := NVL(l_rollup_planned_amt,0);
2941 l_fund_rec.rollup_committed_amt := NVL(l_rollup_committed_amt,0);
2942 l_fund_rec.rollup_utilized_amt := NVL(l_rollup_utilized_amt,0); -- yzhao: 11.5.10
2943 l_fund_rec.rollup_earned_amt := NVL(l_rollup_earned_amt,0);
2944 l_fund_rec.rollup_paid_amt := NVL(l_rollup_paid_amt,0);
2945 l_fund_rec.rollup_recal_committed := NVL(l_rollup_recal_committed,0);
2946 END IF;
2947
2948
2949 -- For BUG#8867381(+)
2950 -- l_use_fund_staging_tables flag is set only for chargeback flow and for the
2951 -- chargeback flow it updates roll up amount in OZF_RESALE_COMMON_PVT.UPDATE_OZF_FUNDS_ALL_B procedure.
2952
2953 If l_use_fund_staging_tables <> 'T' then
2954
2955 IF G_DEBUG THEN
2956 ozf_utility_pvt.debug_message('Going to update mode of update_rollup_amount as l_use_fund_staging_tables is :'||l_use_fund_staging_tables );
2957 END IF;
2958
2959 update_rollup_amount(
2960 p_api_version => l_api_version
2961 ,p_init_msg_list => fnd_api.g_false
2962 ,p_commit => fnd_api.g_false
2963 ,p_validation_level => p_validation_level
2964 ,x_return_status => l_return_status
2965 ,x_msg_count => x_msg_count
2966 ,x_msg_data => x_msg_data
2967 ,p_fund_rec => l_fund_rec
2968 );
2969 IF l_return_status = fnd_api.g_ret_sts_error THEN
2970 RAISE fnd_api.g_exc_error;
2971 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2972 RAISE fnd_api.g_exc_unexpected_error;
2973 END IF;
2974 END IF;
2975 -- For BUG#8867381(-)
2976
2977 -- commented by feliu to fix bug 2654263
2978 /* IF l_active_flag = true THEN
2979
2980 update_funds_access(
2981 p_api_version => l_api_version
2982 ,p_init_msg_list => fnd_api.g_false
2983 ,p_commit => fnd_api.g_false
2984 ,p_validation_level => p_validation_level
2985 ,x_return_status => l_return_status
2986 ,x_msg_count => x_msg_count
2987 ,x_msg_data => x_msg_data
2988 ,p_fund_rec => l_fund_rec
2989 ,p_mode => 'CREATE'
2990 );
2991 IF l_return_status = fnd_api.g_ret_sts_error THEN
2992 RAISE fnd_api.g_exc_error;
2993 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
2994 RAISE fnd_api.g_exc_unexpected_error;
2995 END IF;
2996 END IF; */
2997 END IF; -- end if for parent fund
2998 END IF; -- end if for status code
2999
3000
3001 -- yzhao 04/02/2002 no need to call process_approval if it's from actbudget update
3002
3003 IF p_mode NOT IN ('ADJUST', 'SETTLE') THEN
3004 -- 10/14/2002 mode is always update in QP
3005 /*IF l_fund_rec.status_code IN ('CLOSED','CANCELLED','ACTIVE','ON_HOLD')
3006 AND l_old_status IN ('ACTIVE','ON_HOLD') THEN
3007 */
3008 l_mode := 'UPDATE' ; -- when not creating act_budgets
3009 IF l_fund_rec.status_code IN ('ACTIVE','ON_HOLD')
3010 AND l_old_status IN ('PENDING','DRAFT') THEN
3011 l_mode := 'ACTIVE' ; -- when creating act budgets for active funds
3012 END IF;
3013 -- call when it is active after submitting for approval
3014 IF l_mode IN ('ACTIVE' , 'UPDATE' ) THEN
3015 ozf_fundrules_pvt.process_approval(
3016 p_fund_rec => l_fund_rec
3017 ,p_mode => l_mode
3018 ,p_old_fund_status => l_old_status
3019 ,x_return_status => l_return_status
3020 ,x_msg_count => x_msg_count
3021 ,x_msg_data => x_msg_data
3022 ,p_api_version => 1.0);
3023 END IF;
3024
3025 IF l_return_status = fnd_api.g_ret_sts_error THEN
3026 RAISE fnd_api.g_exc_error;
3027 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3028 RAISE fnd_api.g_exc_unexpected_error;
3029 END IF;
3030 END IF; -- yzhao: end of IF p_mode <> 'ADJUST'
3031
3032 -- call when it is submitting for approval
3033 IF l_submit_child_approval = FND_API.g_true THEN
3034 -- yzhao: 03/18/2003 handle budget allocation as well
3035 IF l_fund_rec.fund_usage IS NOT NULL AND l_fund_rec.fund_usage = 'ALLOC' THEN
3036 -- yzhao: 03/18/2003 budget allocation does not need workflow approval process so pass allocation_flag='Y'
3037 l_allocation_flag := 'Y';
3038 ELSE
3039 l_allocation_flag := 'N';
3040 END IF;
3041 --nirprasa, no chnage needed as this flow is for request
3042 ozf_fund_request_apr_pvt.create_fund_request(
3043 p_commit => fnd_api.g_false
3044 ,p_approval_for_id => p_fund_rec.fund_id
3045 /* yzhao: Jan 16 2005 fix bug 4943323(4912954) pass in correct requester id
3046 ,p_requester_id => l_fund_rec.owner
3047 */
3048 ,p_requester_id => ozf_utility_pvt.get_resource_id(p_user_id => fnd_global.user_id)
3049 ,p_requested_amount => l_child_request_amt
3050 ,p_approval_fm => 'FUND'
3051 ,p_approval_fm_id => l_fund_rec.parent_fund_id
3052 ,p_transfer_type => 'REQUEST'
3053 ,p_child_flag =>'Y'
3054 -- yzhao: 03/18/2003 11.5.9 for allocation activation of territory hierarchy, always pass as 'Y'; all others 'N'
3055 ,p_allocation_flag => l_allocation_flag
3056 ,p_justification => l_fund_rec.description
3057 ,x_return_status => l_return_status
3058 ,x_msg_count => x_msg_count
3059 ,x_msg_data => x_msg_data
3060 ,x_request_id => l_request_id
3061 ,x_approver_id => l_approver_id
3062 ,x_is_requester_owner => l_is_requestor_owner);
3063
3064 IF l_return_status = fnd_api.g_ret_sts_error THEN
3065 RAISE fnd_api.g_exc_error;
3066 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3067 RAISE fnd_api.g_exc_unexpected_error;
3068 END IF;
3069 END IF;
3070 -- call when it is submitting for approval
3071 IF l_submit_budget_approval = FND_API.g_true THEN
3072 l_reject_status_id :=ozf_utility_pvt.get_default_user_status(
3073 l_status_type
3074 ,'REJECTED');
3075
3076 AMS_GEN_APPROVAL_PVT.StartProcess
3077 (p_activity_type => g_activity_type
3078 ,p_activity_id => p_fund_rec.fund_id
3079 ,p_approval_type => G_PARENT_APPROVAL_TYPE
3080 ,p_object_version_number =>p_fund_rec.object_version_number -- old object version number
3081 ,p_orig_stat_id =>l_old_user_status_id
3082 ,p_new_stat_id =>p_fund_rec.user_status_id -- active status
3083 ,p_reject_stat_id =>l_reject_status_id
3084 /* yzhao: Jan 16 2005 fix bug 4943323(4912954) pass in correct requester id
3085 ,p_requester_userid =>l_fund_rec.owner
3086 */
3087 ,p_requester_userid =>ozf_utility_pvt.get_resource_id(p_user_id => fnd_global.user_id)
3088 ,p_notes_from_requester =>l_fund_rec.description
3089 ,p_workflowprocess => l_workflow_process
3090 ,p_item_type => l_item_type);
3091
3092 raise_business_event(p_object_id => p_fund_rec.fund_id , p_event_type =>'APPROVAL');
3093 ELSE
3094 -- raise business event.
3095 raise_business_event(p_object_id => p_fund_rec.fund_id ,p_event_type =>'UPDATE');
3096 END IF;
3097
3098 /************************ MPANDE JAN-16 2001 ************************************************
3099 ..The calls that were made to the following API for child fund workflow process
3100 ozf_wf_request_apr_pvt.create_fund_request
3101 was removed from this place and put in update_fund_status APIS
3102 The code was removed and not commented because of clarity and cleanliness. Please refer to
3103 earlier versions for bug fixes etc. in releases prior to 11.5.5. (hornet)
3104 **********************************************************************************************/
3105 -- reinitialize the variables
3106 l_act_access_id := NULL;
3107 l_acc_obj_ver_num := NULL;
3108 -- if owner is changing update acesss
3109 IF p_fund_rec.owner <> fnd_api.g_miss_num
3110 AND l_owner <> p_fund_rec.owner THEN
3111 IF G_DEBUG THEN
3112 ozf_utility_pvt.debug_message(l_full_name || ': insert access owner');
3113 END IF;
3114 /* commented by feliu on 05/13/2003 to fix bug 2969498;
3115 OPEN c_access(p_fund_rec.fund_id);
3116 FETCH c_access INTO l_act_access_id, l_acc_obj_ver_num;
3117 CLOSE c_access;
3118 ams_access_pvt.init_access_rec(l_access_rec);
3119 l_access_rec.activity_access_id := l_act_access_id;
3120 l_access_rec.object_version_number := l_acc_obj_ver_num;
3121 l_access_rec.act_access_to_object_id := l_fund_rec.fund_id;
3122 l_access_rec.arc_act_access_to_object := 'FUND';
3123 l_access_rec.user_or_role_id := l_fund_rec.owner;
3124 l_access_rec.arc_user_or_role_type := 'USER';
3125 l_access_rec.admin_flag := 'Y';
3126 l_access_rec.owner_flag := 'Y';
3127 ams_access_pvt.update_access(
3128 p_api_version => l_api_version
3129 ,p_init_msg_list => fnd_api.g_false
3130 ,p_validation_level => p_validation_level
3131 ,x_return_status => l_return_status
3132 ,x_msg_count => x_msg_count
3133 ,x_msg_data => x_msg_data
3134 ,p_commit => fnd_api.g_false
3135 ,p_access_rec => l_access_rec);
3136 */
3137
3138 AMS_Access_PVT.update_object_owner
3139 ( p_api_version => 1.0
3140 ,p_init_msg_list => FND_API.G_FALSE
3141 ,p_commit => FND_API.G_FALSE
3142 ,p_validation_level => p_validation_level
3143 ,x_return_status => x_return_status
3144 ,x_msg_count => x_msg_count
3145 ,x_msg_data => x_msg_data
3146 ,p_object_type => 'FUND'
3147 ,p_object_id => l_fund_rec.fund_id
3148 ,p_resource_id => l_fund_rec.owner
3149 ,p_old_resource_id => l_owner
3150 );
3151 IF l_return_status = fnd_api.g_ret_sts_error THEN
3152 RAISE fnd_api.g_exc_error;
3153 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3154 RAISE fnd_api.g_exc_unexpected_error;
3155 END IF;
3156 END IF; -- end of owner is changing
3157
3158 -- added by feliu to fix bug 2654263
3159 -- if parent id is not null during updation and old parent id is null ,
3160 -- a row is created in the ams_act_access to give access
3161 -- to the owner of the parent fund to this child
3162 --if the parent fund owner and the child fund owner is not same then only create this
3163 IF l_fund_rec.parent_fund_id IS NOT NULL AND l_fund_rec.owner <> l_par_fund_owner THEN
3164 --if there is no parent fund OR (09/05/2001 mpande) when no records exists in ams_act_access for the fund
3165 --then create a access for the new parent ownner
3166 IF l_old_parent_fund_id IS NULL THEN
3167 update_funds_access(
3168 p_api_version => l_api_version
3169 ,p_init_msg_list => fnd_api.g_false
3170 ,p_commit => fnd_api.g_false
3171 ,p_validation_level => p_validation_level
3172 ,x_return_status => l_return_status
3173 ,x_msg_count => x_msg_count
3174 ,x_msg_data => x_msg_data
3175 ,p_fund_rec => l_fund_rec
3176 ,p_mode => 'CREATE'
3177 );
3178 IF l_return_status = fnd_api.g_ret_sts_error THEN
3179 RAISE fnd_api.g_exc_error;
3180 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3181 RAISE fnd_api.g_exc_unexpected_error;
3182 END IF;
3183
3184 --if the old parent fund and the new parent fund is diffrent.
3185 ELSIF l_old_parent_fund_id <> l_fund_rec.parent_fund_id THEN
3186 update_funds_access(
3187 p_api_version => l_api_version
3188 ,p_init_msg_list => fnd_api.g_false
3189 ,p_commit => fnd_api.g_false
3190 ,p_validation_level => p_validation_level
3191 ,x_return_status => l_return_status
3192 ,x_msg_count => x_msg_count
3193 ,x_msg_data => x_msg_data
3194 ,p_fund_rec => l_fund_rec
3195 ,p_mode => 'CREATE'
3196 );
3197 IF l_return_status = fnd_api.g_ret_sts_error THEN
3198 RAISE fnd_api.g_exc_error;
3199 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3200 RAISE fnd_api.g_exc_unexpected_error;
3201 END IF;
3202 END IF; -- end of l_old_parent_fund_id <> l_fund_rec.parent_fund_id.
3203 END IF; -- end of l_fund_rec.parent_fund_id IS NOT NULL
3204 -- added by feliu to fix bug 2654263
3205
3206 /* R12: yzhao bug 4669269 - obsolete ozf_mc_transactions
3207 IF p_fund_rec.original_budget <> FND_API.g_miss_num
3208 OR p_fund_rec.transfered_in_amt <> FND_API.g_miss_num
3209 OR p_fund_rec.transfered_out_amt <> FND_API.g_miss_num
3210 OR p_fund_rec.holdback_amt <> FND_API.g_miss_num
3211 OR p_fund_rec.planned_amt <> FND_API.g_miss_num
3212 OR p_fund_rec.committed_amt <> FND_API.g_miss_num
3213 OR p_fund_rec.utilized_amt <> FND_API.g_miss_num -- yzhao: 11.5.10
3214 OR p_fund_rec.earned_amt <> FND_API.g_miss_num
3215 OR p_fund_rec.paid_amt <> FND_API.g_miss_num
3216 OR p_fund_rec.currency_code_tc <> FND_API.g_miss_char THEN
3217
3218 OPEN c_mc_record(p_fund_rec.fund_id);
3219 FETCH c_mc_record INTO l_mc_record_id, l_mc_obj_number;
3220 CLOSE c_mc_record;
3221 --///mpande
3222 -- Insert a record in OZF_MC_TRANSACTIONS_ALL IN functional currency
3223 -- so that we have the functional currency amounts
3224 -- The exchange_rate_type is picked up by the MC_TRAnSACTIONS API
3225 -- from proile
3226 -- update the transaction table on all cases.
3227
3228 IF G_DEBUG THEN
3229 ozf_utility_pvt.debug_message(l_full_name ||': insert FC record' ||l_fund_rec.currency_code_tc);
3230 END IF;
3231 ozf_mc_transactions_pvt.init_transaction_rec(x_mc_transactions_rec => l_mc_transaction_rec);
3232 -- Populate the record variable
3233 l_mc_transaction_rec.mc_record_id := l_mc_record_id;
3234 l_mc_transaction_rec.object_version_number := l_mc_obj_number;
3235 l_mc_transaction_rec.source_object_name := 'FUND';
3236 l_mc_transaction_rec.source_object_id := l_fund_rec.fund_id;
3237 l_mc_transaction_rec.currency_code := l_fund_rec.currency_code_tc;
3238 l_mc_transaction_rec.amount_column1 := l_fund_rec.original_budget;
3239 l_mc_transaction_rec.amount_column2 := l_fund_rec.transfered_in_amt;
3240 l_mc_transaction_rec.amount_column3 := l_fund_rec.transfered_out_amt;
3241 l_mc_transaction_rec.amount_column4 := l_fund_rec.holdback_amt;
3242 l_mc_transaction_rec.amount_column5 := l_fund_rec.planned_amt;
3243 l_mc_transaction_rec.amount_column6 := l_fund_rec.committed_amt;
3244 l_mc_transaction_rec.amount_column7 := l_fund_rec.earned_amt;
3245 l_mc_transaction_rec.amount_column8 := l_fund_rec.paid_amt;
3246 l_mc_transaction_rec.amount_column9 := l_fund_rec.utilized_amt; -- yzhao: 11.5.10
3247
3248 -- kdass - R12 MOAC changes
3249 OPEN c_get_org_id;
3250 FETCH c_get_org_id INTO l_fund_rec.org_id;
3251 CLOSE c_get_org_id;
3252
3253 -- Call mc_transaction API if fund type is not QUOTA
3254 IF l_fund_rec.fund_type <> 'QUOTA' THEN
3255 ozf_mc_transactions_pvt.update_mc_transactions(
3256 p_api_version => l_api_version
3257 ,p_init_msg_list => fnd_api.g_false
3258 ,p_commit => fnd_api.g_false
3259 -- 01/13/2003 yzhao fix bug BUG 2750841(same as 2741039) pass in org_id
3260 ,p_org_id => l_fund_rec.org_id
3261 ,x_return_status => l_return_status
3262 ,x_msg_count => x_msg_count
3263 ,x_msg_data => x_msg_data
3264 ,p_mc_transactions_rec => l_mc_transaction_rec);
3265
3266 IF l_return_status = fnd_api.g_ret_sts_error THEN
3267 RAISE fnd_api.g_exc_error;
3268 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3269 RAISE fnd_api.g_exc_unexpected_error;
3270 END IF;
3271 END IF;
3272
3273 END IF ; --check for amount
3274 */
3275
3276 END IF;-- end return status
3277
3278 -- Check for commit
3279 IF fnd_api.to_boolean(p_commit) THEN
3280 COMMIT;
3281 END IF;
3282
3283 fnd_msg_pub.count_and_get(
3284 p_encoded => fnd_api.g_false
3285 ,p_count => x_msg_count
3286 ,p_data => x_msg_data);
3287 IF G_DEBUG THEN
3288 ozf_utility_pvt.debug_message(l_full_name || ': end');
3289 END IF;
3290 EXCEPTION
3291 WHEN fnd_api.g_exc_error THEN
3292 ROLLBACK TO update_fund;
3293 x_return_status := fnd_api.g_ret_sts_error;
3294 fnd_msg_pub.count_and_get(
3295 p_encoded => fnd_api.g_false
3296 ,p_count => x_msg_count
3297 ,p_data => x_msg_data);
3298 WHEN fnd_api.g_exc_unexpected_error THEN
3299 ROLLBACK TO update_fund;
3300 x_return_status := fnd_api.g_ret_sts_unexp_error;
3301 fnd_msg_pub.count_and_get(
3302 p_encoded => fnd_api.g_false
3303 ,p_count => x_msg_count
3304 ,p_data => x_msg_data);
3305 WHEN OTHERS THEN
3306 ROLLBACK TO update_fund;
3307 x_return_status := fnd_api.g_ret_sts_unexp_error;
3308
3309 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3310 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
3311 END IF;
3312
3313 fnd_msg_pub.count_and_get(
3314 p_encoded => fnd_api.g_false
3315 ,p_count => x_msg_count
3316 ,p_data => x_msg_data);
3317 END update_fund;
3318
3319 --------------------------------------------------------------------
3320 -- PROCEDURE
3321 -- Validate_Fund
3322 --
3323 -- HISTORY
3324 -- 02/02/2000 Shitij Vatsa Create.
3325 -- 06/13/2000 Mumu PAnde Added validations
3326 -- 07/28/2000 Mumu Pande Added parent_validation against child
3327 -- 01/20/2001 Mumu Pande Added call for fund inter entity validations
3328 --------------------------------------------------------------------
3329 PROCEDURE validate_fund(
3330 p_api_version IN NUMBER
3331 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
3332 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
3333 ,x_return_status OUT NOCOPY VARCHAR2
3334 ,x_msg_count OUT NOCOPY NUMBER
3335 ,x_msg_data OUT NOCOPY VARCHAR2
3336 ,p_fund_rec IN fund_rec_type)
3337 IS
3338 l_api_version CONSTANT NUMBER := 1.0;
3339 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Fund';
3340 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name || '.' || l_api_name;
3341 l_return_status VARCHAR2(1);
3342 BEGIN
3343 ----------------------- initialize --------------------
3344 IF G_DEBUG THEN
3345 ozf_utility_pvt.debug_message(l_full_name || ': start');
3346 END IF;
3347
3348 IF fnd_api.to_boolean(p_init_msg_list) THEN
3349 fnd_msg_pub.initialize;
3350 END IF;
3351
3352 IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version, l_api_name, g_pkg_name) THEN
3353 RAISE fnd_api.g_exc_unexpected_error;
3354 END IF;
3355
3356 x_return_status := fnd_api.g_ret_sts_success;
3357 ---------------------- validate ------------------------
3358 IF G_DEBUG THEN
3359 ozf_utility_pvt.debug_message(l_full_name || ': check items');
3360 END IF;
3361
3362 IF p_validation_level >= jtf_plsql_api.g_valid_level_item THEN
3363 ----dbms_output.put_line ('Calling Check_Fund_Items from validate');
3364 check_fund_items(
3365 p_fund_rec => p_fund_rec
3366 ,p_validation_mode => jtf_plsql_api.g_create
3367 ,x_return_status => l_return_status);
3368
3369 ----dbms_output.put_line ('Called Check_Fund_Items from validate');
3370 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3371 RAISE fnd_api.g_exc_unexpected_error;
3372 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
3373 RAISE fnd_api.g_exc_error;
3374 END IF;
3375 END IF;
3376
3377 IF G_DEBUG THEN
3378 ozf_utility_pvt.debug_message(l_full_name || ': check record');
3379 END IF;
3380
3381 IF p_validation_level >= jtf_plsql_api.g_valid_level_record THEN
3382 check_fund_record(
3383 p_fund_rec => p_fund_rec
3384 ,p_complete_rec => p_fund_rec
3385 ,p_mode => jtf_plsql_api.g_create
3386 ,x_return_status => l_return_status);
3387
3388 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3389 RAISE fnd_api.g_exc_unexpected_error;
3390 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
3391 RAISE fnd_api.g_exc_error;
3392 END IF;
3393 END IF;
3394
3395 -- added on 01/20/2001 for all inter entity validations Mumu Pande
3396 IF G_DEBUG THEN
3397 ozf_utility_pvt.debug_message(l_full_name || ': check inter-entity');
3398 END IF;
3399
3400 IF p_validation_level >= jtf_plsql_api.g_valid_level_inter_entity THEN
3401 check_fund_inter_entity(
3402 p_fund_rec => p_fund_rec
3403 ,p_complete_rec => p_fund_rec
3404 ,p_validation_mode => jtf_plsql_api.g_create
3405 ,x_return_status => l_return_status);
3406
3407 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
3408 RAISE fnd_api.g_exc_unexpected_error;
3409 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
3410 RAISE fnd_api.g_exc_error;
3411 END IF;
3412 END IF;
3413
3414 -------------------- finish --------------------------
3415 fnd_msg_pub.count_and_get(
3416 p_encoded => fnd_api.g_false
3417 ,p_count => x_msg_count
3418 ,p_data => x_msg_data);
3419 IF G_DEBUG THEN
3420 ozf_utility_pvt.debug_message(l_full_name || ': end');
3421 END IF;
3422 EXCEPTION
3423 WHEN fnd_api.g_exc_error THEN
3424 x_return_status := fnd_api.g_ret_sts_error;
3425 fnd_msg_pub.count_and_get(
3426 p_encoded => fnd_api.g_false
3427 ,p_count => x_msg_count
3428 ,p_data => x_msg_data);
3429 WHEN fnd_api.g_exc_unexpected_error THEN
3430 x_return_status := fnd_api.g_ret_sts_unexp_error;
3431 fnd_msg_pub.count_and_get(
3432 p_encoded => fnd_api.g_false
3433 ,p_count => x_msg_count
3434 ,p_data => x_msg_data);
3435 WHEN OTHERS THEN
3436 x_return_status := fnd_api.g_ret_sts_unexp_error;
3437
3438 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3439 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
3440 END IF;
3441
3442 fnd_msg_pub.count_and_get(
3443 p_encoded => fnd_api.g_false
3444 ,p_count => x_msg_count
3445 ,p_data => x_msg_data);
3446 END validate_fund;
3447
3448 ---------------------------------------------------------------------
3449 -- PROCEDURE
3450 -- Check_Fund_Req_Items
3451 --
3452 -- HISTORY
3453 -- 02/02/2000 Shitij Vatsa Create.
3454 -- 09/20/2000 Mumu Pande for user status
3455 -- 01/20/2001 Mumu Pande for category
3456 -- 29/DEC/2011 Added parameter p_mode default NULL Bug 13529250 to avoid validation for budget amount while settling claim
3457 ---------------------------------------------------------------------
3458 PROCEDURE check_fund_req_items(
3459 p_fund_rec IN fund_rec_type
3460 ,x_return_status OUT NOCOPY VARCHAR2
3461 ,p_mode IN VARCHAR2 DEFAULT NULL)
3462 IS
3463
3464 BEGIN
3465 x_return_status := fnd_api.g_ret_sts_success;
3466
3467 -- Commented by mpande 02/16/2001 We are going to generate the number if it is null
3468 ------------------------ fund_number --------------------------
3469 /* IF p_fund_rec.fund_number IS NULL THEN -- check for fund number
3470 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3471 IF p_fund_rec.fund_type = 'QUOTA' THEN
3472 fnd_message.set_name('OZF', 'OZF_TP_NO_QUOTA_NUMBER');
3473 ELSE
3474 fnd_message.set_name('OZF', 'OZF_FUND_NO_FUND_NUMBER');
3475 END IF;
3476 fnd_msg_pub.add;
3477 END IF;
3478
3479 x_return_status := fnd_api.g_ret_sts_error;
3480 RETURN;
3481 END IF;
3482 */
3483 ------------------------ owner -------------------------------
3484 IF p_fund_rec.owner IS NULL THEN -- check for fund owner
3485 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3486 IF p_fund_rec.fund_type = 'QUOTA' THEN
3487 fnd_message.set_name('OZF', 'OZF_TP_NO_QUOTA_OWNER');
3488 ELSE
3489 fnd_message.set_name('OZF', 'OZF_FUND_NO_FUND_OWNER');
3490 END IF;
3491 fnd_msg_pub.add;
3492 END IF;
3493
3494 x_return_status := fnd_api.g_ret_sts_error;
3495 RETURN;
3496 END IF;
3497
3498 IF p_fund_rec.fund_type IS NULL THEN -- check for fund owner
3499 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3500 fnd_message.set_name('OZF', 'OZF_FUND_NO_FUND_TYPE');
3501 fnd_msg_pub.add;
3502 END IF;
3503
3504 x_return_status := fnd_api.g_ret_sts_error;
3505 RETURN;
3506 END IF;
3507
3508 -- 09/20/2000 Mumu Pande for user status
3509 IF p_fund_rec.user_status_id IS NULL THEN -- check for fund user status
3510 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3511 fnd_message.set_name('OZF', 'OZF_FUND_NO_USER_STATUS');
3512 fnd_msg_pub.add;
3513 END IF;
3514
3515 x_return_status := fnd_api.g_ret_sts_error;
3516 RETURN;
3517 END IF;
3518
3519 -- 01/20/2001 Mumu Pande for category
3520 IF p_fund_rec.fund_type <> 'QUOTA' AND p_fund_rec.category_id IS NULL THEN -- check for fund category
3521 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3522 fnd_message.set_name('OZF', 'OZF_FUND_NO_CATEGORY');
3523 fnd_msg_pub.add;
3524 END IF;
3525
3526 x_return_status := fnd_api.g_ret_sts_error;
3527 RETURN;
3528 END IF;
3529 -- 01/20/2001 Mumu Pande for custom_setup_id
3530 IF p_fund_rec.custom_setup_id IS NULL THEN -- check for fund category
3531 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3532 fnd_message.set_name('OZF', 'OZF_FUND_NO_CUSTOM_SETUP');
3533 fnd_msg_pub.add;
3534 END IF;
3535
3536 x_return_status := fnd_api.g_ret_sts_error;
3537 RETURN;
3538 END IF;
3539 -- 11/13/2001 mpande added budget amount cannot be euqal to 0 for root budgets
3540 -- 12/23/04 by feliu. For the budgets created from mass transfer, don't validate. fix bug 3580531.
3541 -- 29/DEC/2011 Added parameter p_mode default NULL Bug 13529250 , to avoid validation while claim settling
3542 -- p_mode ='SETTLE' is passed while claim settlement fetcher
3543 IF p_fund_rec.prev_fund_id IS NULL AND p_fund_rec.parent_fund_id IS NULL AND p_fund_rec.fund_type = 'FIXED' AND (p_mode is NULL OR p_mode <> 'SETTLE') THEN
3544 -- niprakas changed <= to <
3545 -- rimehrot changed back to <= for bug fix 3580531
3546 IF NVL(p_fund_rec.original_budget,0) <= 0 THEN -- check for fund amount
3547 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3548 IF p_fund_rec.fund_type = 'QUOTA' THEN
3549 fnd_message.set_name('OZF', 'OZF_TP_NO_ORG_QUOTA');
3550 ELSE
3551 fnd_message.set_name('OZF', 'OZF_FUND_NO_ORG_BUDGET');
3552 END IF;
3553 fnd_msg_pub.add;
3554 END IF;
3555
3556 x_return_status := fnd_api.g_ret_sts_error;
3557 RETURN;
3558 END IF;
3559 END IF;
3560
3561 --kdass 25-APR-2006 bug 5176819 - Ledger is required field
3562 IF p_fund_rec.fund_type <> 'QUOTA' AND p_fund_rec.ledger_id IS NULL THEN
3563 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3564 fnd_message.set_name('OZF', 'OZF_FUND_NO_LEDGER');
3565 fnd_msg_pub.add;
3566 END IF;
3567
3568 x_return_status := fnd_api.g_ret_sts_error;
3569 RETURN;
3570 END IF;
3571
3572 /* yzhao: bug 4669461: R12 budget is org aware, but not org stripped. quota is not org aware
3573 so org_id is not required
3574 IF p_fund_rec.org_id IS NULL THEN -- check for org id
3575 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3576 fnd_message.set_name('OZF', 'OZF_NO_DEFAULT_ORG_ID');
3577 fnd_msg_pub.add;
3578 END IF;
3579
3580 x_return_status := fnd_api.g_ret_sts_error;
3581 RETURN;
3582 END IF;
3583 */
3584
3585 END check_fund_req_items;
3586
3587 ---------------------------------------------------------------------
3588 -- PROCEDURE
3589 -- Check_Fund_Uk_Items
3590 --
3591 -- HISTORY
3592 -- 02/02/2000 Shitij Vatsa Create.
3593 -- 2nd August200 MPAnde Updated
3594 ---------------------------------------------------------------------
3595 PROCEDURE check_fund_uk_items(
3596 p_fund_rec IN fund_rec_type
3597 ,p_validation_mode IN VARCHAR2 := jtf_plsql_api.g_create
3598 ,x_return_status OUT NOCOPY VARCHAR2)
3599 IS
3600 l_valid_flag VARCHAR2(1);
3601
3602 -- Added for Bug #3498826
3603 CURSOR c_prog_fund_number_create
3604 IS
3605 SELECT 1 from ozf_funds_all_b
3606 WHERE fund_number = p_fund_rec.fund_number;
3607
3608 CURSOR c_prog_fund_number_update
3609 IS
3610 SELECT 1 from ozf_funds_all_b
3611 WHERE fund_number = p_fund_rec.fund_number
3612 AND fund_id <> p_fund_rec.fund_id;
3613
3614
3615 BEGIN
3616 x_return_status := fnd_api.g_ret_sts_success;
3617
3618 -- For Create_Fund, when fund_id is passed in, we need to
3619 -- check if this fund_id is unique.
3620 IF p_validation_mode = jtf_plsql_api.g_create
3621 AND p_fund_rec.fund_id IS NOT NULL THEN
3622 IF ozf_utility_pvt.check_uniqueness(
3623 'ozf_funds_all_vl'
3624 ,'fund_id = ' || p_fund_rec.fund_id) =
3625 fnd_api.g_false THEN
3626 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3627 IF p_fund_rec.fund_type = 'QUOTA' THEN
3628 fnd_message.set_name('OZF', 'OZF_TP_DUPLICATE_ID');
3629 ELSE
3630 fnd_message.set_name('OZF', 'OZF_FUND_DUPLICATE_ID');
3631 END IF;
3632 fnd_msg_pub.add;
3633 END IF;
3634
3635 x_return_status := fnd_api.g_ret_sts_error;
3636 RETURN;
3637 END IF;
3638 END IF;
3639
3640 -- Check if fund_number is unique. Need to handle create and
3641 -- update differently.
3642 IF p_validation_mode = jtf_plsql_api.g_create THEN
3643 /*l_valid_flag :=
3644 ozf_utility_pvt.check_uniqueness(
3645 'ozf_funds_all_vl'
3646 ,'fund_number = ''' || p_fund_rec.fund_number || '''');*/
3647 OPEN c_prog_fund_number_create;
3648 FETCH c_prog_fund_number_create INTO l_valid_flag;
3649 CLOSE c_prog_fund_number_create;
3650 ELSE
3651 /* l_valid_flag :=
3652 ozf_utility_pvt.check_uniqueness(
3653 'ozf_funds_all_vl'
3654 ,'fund_number = ''' ||
3655 p_fund_rec.fund_number ||
3656 ''' AND fund_id <> ' ||
3657 p_fund_rec.fund_id);*/
3658 OPEN c_prog_fund_number_update;
3659 FETCH c_prog_fund_number_update INTO l_valid_flag;
3660 CLOSE c_prog_fund_number_update;
3661 END IF;
3662
3663 IF l_valid_flag = 1 THEN
3664 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3665 IF p_fund_rec.fund_type = 'QUOTA' THEN
3666 fnd_message.set_name('OZF', 'OZF_TP_DUPLICATE_NUMBER');
3667 ELSE
3668 fnd_message.set_name('OZF', 'OZF_FUND_DUPLICATE_NUMBER');
3669 END IF;
3670 fnd_msg_pub.add;
3671 END IF;
3672
3673 x_return_status := fnd_api.g_ret_sts_error;
3674 RETURN;
3675 END IF;
3676 -- Check if fund_name is unique if it is accrual fund/offer name . Need to handle create and
3677 -- update differently.
3678 -- Commented for Bug Fix #3498826
3679 /*
3680 IF p_fund_rec.fund_type = 'FULLY_ACCRUED' THEN
3681 IF p_validation_mode = jtf_plsql_api.g_create THEN
3682 l_valid_flag :=
3683 ozf_utility_pvt.check_uniqueness(
3684 'ozf_funds_all_vl'
3685 ,'short_name = ''' || p_fund_rec.short_name || '''');
3686 ELSE
3687 l_valid_flag :=
3688 ozf_utility_pvt.check_uniqueness(
3689 'ozf_funds_all_vl'
3690 ,'short_name = ''' ||
3691 p_fund_rec.short_name ||
3692 ''' AND fund_id <> ' ||
3693 p_fund_rec.fund_id);
3694 END IF;
3695
3696 IF l_valid_flag = fnd_api.g_false THEN
3697 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3698 IF p_fund_rec.fund_type = 'QUOTA' THEN
3699 fnd_message.set_name('OZF', 'OZF_TP_DUPLICATE_NAME');
3700 ELSE
3701 fnd_message.set_name('OZF', 'OZF_FUND_DUPLICATE_NAME');
3702 END IF;
3703 fnd_msg_pub.add;
3704 END IF;
3705
3706 x_return_status := fnd_api.g_ret_sts_error;
3707 RETURN;
3708 END IF;
3709 END IF;*/
3710
3711 END check_fund_uk_items;
3712
3713 ---------------------------------------------------------------------
3714 -- PROCEDURE
3715 -- Check_Fund_Fk_Items
3716 --
3717 -- HISTORY
3718 -- 20/09/2000 Mumu Pande Create.
3719 -- 09/20/2000 Mumu Pande for user status
3720 -- 01/20/2001 Mumu PAnde for category validations
3721 ---------------------------------------------------------------------
3722 PROCEDURE check_fund_fk_items(
3723 p_fund_rec IN fund_rec_type
3724 ,x_return_status OUT NOCOPY VARCHAR2)
3725 IS
3726 BEGIN
3727 x_return_status := fnd_api.g_ret_sts_success;
3728
3729 ----------------------- user_status_id ------------------------
3730 IF p_fund_rec.user_status_id <> fnd_api.g_miss_num THEN
3731 IF ozf_utility_pvt.check_fk_exists(
3732 'ams_user_statuses_vl'
3733 ,'user_status_id'
3734 ,p_fund_rec.user_status_id) =
3735 fnd_api.g_false THEN
3736 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3737 fnd_message.set_name('OZF', 'OZF_FUND_BAD_USER_STATUS_ID');
3738 fnd_msg_pub.add;
3739 END IF;
3740
3741 x_return_status := fnd_api.g_ret_sts_error;
3742 RETURN;
3743 END IF;
3744 END IF;
3745
3746 -- added on 01/20/2001 MPANDE
3747 ----------------------- category_id ------------------------
3748 -- mkothari - Bug 4701105 - start ----
3749 IF p_fund_rec.fund_type <> 'QUOTA' THEN
3750 IF p_fund_rec.category_id <> fnd_api.g_miss_num THEN
3751 IF ozf_utility_pvt.check_fk_exists(
3752 'ams_categories_vl'
3753 ,'category_id'
3754 ,p_fund_rec.category_id) =
3755 fnd_api.g_false THEN
3756 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3757 fnd_message.set_name('OZF', 'OZF_FUND_BAD_CAT_ID');
3758 fnd_msg_pub.add;
3759 END IF;
3760
3761 x_return_status := fnd_api.g_ret_sts_error;
3762 RETURN;
3763 END IF;
3764 END IF;
3765 END IF;
3766 -- mkothari - Bug 4701105 - end ----
3767 -- check other fk items
3768
3769 END check_fund_fk_items;
3770
3771
3772
3773 ---------------------------------------------------------------------
3774 -- PROCEDURE
3775 -- Check_Fund_Lookup_Items
3776 --
3777 -- HISTORY
3778 -- 02/02/2000 Shitij Vatsa Create.
3779 ---------------------------------------------------------------------
3780 PROCEDURE check_fund_lookup_items(
3781 p_fund_rec IN fund_rec_type
3782 ,x_return_status OUT NOCOPY VARCHAR2)
3783 IS
3784 BEGIN
3785 x_return_status := fnd_api.g_ret_sts_success;
3786
3787 ----------------------- fund_type ------------------------
3788 IF p_fund_rec.fund_type <> fnd_api.g_miss_char THEN
3789 IF ozf_utility_pvt.check_lookup_exists(
3790 p_lookup_table_name => 'OZF_LOOKUPS'
3791 ,p_lookup_type => 'OZF_FUND_TYPE'
3792 ,p_lookup_code => p_fund_rec.fund_type) =
3793 fnd_api.g_false THEN
3794 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3795 IF p_fund_rec.fund_type = 'QUOTA' THEN
3796 fnd_message.set_name('OZF', 'OZF_TP_BAD_QUOTA_TYPE');
3797 ELSE
3798 fnd_message.set_name('OZF', 'OZF_FUND_BAD_FUND_TYPE');
3799 END IF;
3800 fnd_msg_pub.add;
3801 END IF;
3802
3803 x_return_status := fnd_api.g_ret_sts_error;
3804 RETURN;
3805 END IF;
3806 END IF;
3807
3808
3809 ----------------------- status_code ------------------------
3810 IF p_fund_rec.status_code <> fnd_api.g_miss_char THEN
3811 IF ozf_utility_pvt.check_lookup_exists(
3812 p_lookup_table_name => 'OZF_LOOKUPS'
3813 ,p_lookup_type => 'OZF_FUND_STATUS'
3814 ,p_lookup_code => p_fund_rec.status_code) =
3815 fnd_api.g_false THEN
3816 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3817 IF p_fund_rec.fund_type = 'QUOTA' THEN
3818 fnd_message.set_name('OZF', 'OZF_TP_BAD_STATUS_CODE');
3819 ELSE
3820 fnd_message.set_name('OZF', 'OZF_FUND_BAD_STATUS_CODE');
3821 END IF;
3822 fnd_msg_pub.add;
3823 END IF;
3824
3825 x_return_status := fnd_api.g_ret_sts_error;
3826 RETURN;
3827 END IF;
3828 END IF;
3829 -- check other lookup codes
3830
3831 END check_fund_lookup_items;
3832
3833
3834
3835 ---------------------------------------------------------------------
3836 -- PROCEDURE
3837 -- Check_Fund_Flag_Items
3838 --
3839 -- HISTORY
3840 -- 02/02/2000 Shitij Vatsa Create.
3841 ---------------------------------------------------------------------
3842 PROCEDURE check_fund_flag_items(
3843 p_fund_rec IN fund_rec_type
3844 ,x_return_status OUT NOCOPY VARCHAR2)
3845 IS
3846 BEGIN
3847 x_return_status := fnd_api.g_ret_sts_success;
3848
3849 ----------------------- liability_flag ------------------------
3850 IF p_fund_rec.liability_flag <> fnd_api.g_miss_char
3851 AND p_fund_rec.liability_flag IS NOT NULL THEN
3852 IF ozf_utility_pvt.is_y_or_n(p_fund_rec.liability_flag) = fnd_api.g_false THEN
3853 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3854 fnd_message.set_name('OZF', 'OZF_FUND_BAD_LIABILITY_FLAG');
3855 fnd_msg_pub.add;
3856 END IF;
3857
3858 x_return_status := fnd_api.g_ret_sts_error;
3859 RETURN;
3860 END IF;
3861 END IF;
3862
3863 ----------------------- budget_flag ------------------------
3864 IF p_fund_rec.budget_flag <> fnd_api.g_miss_char
3865 AND p_fund_rec.budget_flag IS NOT NULL THEN
3866 IF ozf_utility_pvt.is_y_or_n(p_fund_rec.budget_flag) = fnd_api.g_false THEN
3867 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3868 IF p_fund_rec.fund_type = 'QUOTA' THEN
3869 fnd_message.set_name('OZF', 'OZF_TP_BAD_QUOTA_FLAG');
3870 ELSE
3871 fnd_message.set_name('OZF', 'OZF_FUND_BAD_BUDGET_FLAG');
3872 END IF;
3873 fnd_msg_pub.add;
3874 END IF;
3875
3876 x_return_status := fnd_api.g_ret_sts_error;
3877 RETURN;
3878 END IF;
3879 END IF;
3880
3881 ----------------------- earned_flag ------------------------
3882 IF p_fund_rec.earned_flag <> fnd_api.g_miss_char
3883 AND p_fund_rec.earned_flag IS NOT NULL THEN
3884 IF ozf_utility_pvt.is_y_or_n(p_fund_rec.earned_flag) = fnd_api.g_false THEN
3885 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
3886 fnd_message.set_name('OZF', 'OZF_FUND_BAD_EARNED_FLAG');
3887 fnd_msg_pub.add;
3888 END IF;
3889
3890 x_return_status := fnd_api.g_ret_sts_error;
3891 RETURN;
3892 END IF;
3893 END IF;
3894 -- check other flags
3895
3896 END check_fund_flag_items;
3897
3898 ---------------------------------------------------------------------
3899 -- PROCEDURE
3900 -- Check_Fund_Items
3901 --
3902 -- HISTORY
3903 -- 02/02/2000 Shitij Vatsa Create.
3904 -- 29/DEC/2011 Added parameter p_mode default NULL Bug 13529250
3905 ---------------------------------------------------------------------
3906 PROCEDURE check_fund_items(
3907 p_validation_mode IN VARCHAR2 := jtf_plsql_api.g_create
3908 ,x_return_status OUT NOCOPY VARCHAR2
3909 ,p_fund_rec IN fund_rec_type
3910 ,p_mode IN VARCHAR2 DEFAULT NULL)
3911 IS
3912 BEGIN
3913 ----dbms_output.put_line('Calling Req_Items');
3914
3915 check_fund_req_items(p_fund_rec => p_fund_rec, x_return_status => x_return_status, p_mode => p_mode);
3916
3917 IF x_return_status <> fnd_api.g_ret_sts_success THEN
3918 RETURN;
3919 END IF;
3920
3921 ----dbms_output.put_line('Calling Uk_Items');
3922 check_fund_uk_items(
3923 p_fund_rec => p_fund_rec
3924 ,p_validation_mode => p_validation_mode
3925 ,x_return_status => x_return_status);
3926
3927 IF x_return_status <> fnd_api.g_ret_sts_success THEN
3928 RETURN;
3929 END IF;
3930
3931 ----dbms_output.put_line('Calling Fk_Items');
3932 check_fund_fk_items(p_fund_rec => p_fund_rec, x_return_status => x_return_status);
3933
3934 IF x_return_status <> fnd_api.g_ret_sts_success THEN
3935 RETURN;
3936 END IF;
3937
3938 ----dbms_output.put_line('Calling Lookup_Items');
3939
3940 check_fund_lookup_items(p_fund_rec => p_fund_rec, x_return_status => x_return_status);
3941
3942 IF x_return_status <> fnd_api.g_ret_sts_success THEN
3943 RETURN;
3944 END IF;
3945
3946 ----dbms_output.put_line('Calling Flag_Items');
3947 check_fund_flag_items(p_fund_rec => p_fund_rec, x_return_status => x_return_status);
3948
3949 IF x_return_status <> fnd_api.g_ret_sts_success THEN
3950 RETURN;
3951 END IF;
3952 END check_fund_items;
3953
3954
3955
3956 ---------------------------------------------------------------------
3957 -- PROCEDURE
3958 -- Check_Fund_Record
3959 --
3960 -- HISTORY
3961 -- 02/02/2000 Shitij Vatsa Create.
3962 -- 06/14/2000 Mumu Pande Added validation and chaged some of the earlier validations
3963 -- 01/20/2001 Mumu Pande Rempved all fund inter entity validation to procedure check_fund_inter_entity
3964 -- 01/20/2001 Mumu Pande Added all calls for fund accrual validation
3965 -- 11/05/2003 yzhao: fix bug 3238497 - allow fully accrual budget to go below 0
3966 ---------------------------------------------------------------------
3967 PROCEDURE check_fund_record(
3968 p_fund_rec IN fund_rec_type
3969 ,p_complete_rec IN fund_rec_type
3970 ,p_mode IN VARCHAR2
3971 ,x_return_status OUT NOCOPY VARCHAR2)
3972 IS
3973 l_fund_id NUMBER;
3974 l_start_date DATE;
3975 l_end_date DATE;
3976
3977 -- Check old fund status
3978 CURSOR c_old_status(
3979 cv_fund_id IN NUMBER)
3980 IS
3981 SELECT status_code, original_budget
3982 FROM ozf_funds_all_b
3983 WHERE fund_id = cv_fund_id;
3984
3985 CURSOR c_offer_org(p_list_header_id IN NUMBER)
3986 IS
3987 SELECT org_id
3988 FROM ozf_offers
3989 WHERE qp_list_header_id = p_list_header_id;
3990
3991 l_fund_old_status VARCHAR2(30);
3992 l_fund_old_amount NUMBER;
3993 l_return_status VARCHAR2(1);
3994 l_resource_id NUMBER;
3995 l_offer_org NUMBER := NULL;
3996 l_offer_ledger NUMBER;
3997 l_offer_ledgerName VARCHAR2(50);
3998
3999 BEGIN
4000 x_return_status := fnd_api.g_ret_sts_success;
4001 -- Check all modes validations
4002
4003 -- Ensure that start date is greater than the end date --
4004 l_start_date := p_complete_rec.start_date_active;
4005 l_end_date := p_complete_rec.end_date_active;
4006 IF p_complete_rec.status_code = 'DRAFT' THEN
4007 IF p_fund_rec.fund_type = 'FULLY_ACCRUED' THEN
4008 -- yzhao 07/15/2002 fix bug 2457199 UNABLE TO CREATE FULLY ACCRUED BUDGET DUE TO START DATE PROB
4009 -- start date passed in is midnight of the selected day. So trunc sysdate to get midnight time
4010 IF NVL(l_start_date, sysdate) < trunc(sysdate) THEN
4011 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4012 fnd_message.set_name('OZF', 'OZF_FUND_STARTDATE_MISMATCH');
4013 fnd_msg_pub.add;
4014 END IF;
4015
4016 x_return_status := fnd_api.g_ret_sts_error;
4017 END IF;
4018 END IF ;
4019 END IF;
4020
4021 /* yzhao: 01/14/2003 fix BUG 2750445 - UNABLE TO CLOSE BUDGET, BUDGET 'END DATE' CANNOT BE BEFORE TODAY'S DATE
4022 IF p_fund_rec.end_date_active <> FND_API.g_miss_date
4023 AND l_end_date IS NOT NULL OR p_complete_rec.status_code = 'DRAFT'
4024 AND p_fund_rec.status_code = FND_API.g_miss_char THEN
4025 */
4026 IF p_complete_rec.status_code NOT IN ('CLOSED','CANCELLED','ARCHIVED') AND
4027 l_end_date IS NOT NULL THEN
4028 -- validate only if status changes or date changes
4029 OPEN c_old_status(p_fund_rec.fund_id);
4030 FETCH c_old_status INTO l_fund_old_status,l_fund_old_amount;
4031 CLOSE c_old_status;
4032 IF ((p_fund_rec.status_code <> FND_API.G_MISS_CHAR AND
4033 p_fund_rec.status_code <> l_fund_old_status) OR
4034 p_fund_rec.end_date_active <> FND_API.g_miss_date) THEN
4035 /* yzhao: 01/14/2003 fix bug 2750445 ends */
4036
4037 -- yzhao 09/03/2002 fix bug 2540628 TST 1158.7 FUNC MASTER : CANNOT END DATE A BUDGET ON CURRENT DATE
4038 -- end date passed in is midnight of the selected day. So trunc sysdate to get midnight time
4039 -- IF NVL(l_end_date,sysdate) < sysdate THEN
4040 /* kdass 28-Dec-2004 fix for 11.5.10 bug 4089720, when the fund is created from mass transfer,
4041 do not check for end date */
4042 --IF NVL(l_end_date,sysdate) < trunc(sysdate) THEN
4043 IF NVL(l_end_date,sysdate) < trunc(sysdate) AND p_fund_rec.prev_fund_id IS NULL THEN
4044 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4045 IF p_fund_rec.fund_type = 'QUOTA' THEN
4046 fnd_message.set_name('OZF', 'OZF_TP_ENDDATE_MISMATCH');
4047 ELSE
4048 fnd_message.set_name('OZF', 'OZF_FUND_ENDDATE_MISMATCH');
4049 END IF;
4050 fnd_msg_pub.add;
4051 END IF;
4052 x_return_status := fnd_api.g_ret_sts_error;
4053 END IF;
4054 END IF;
4055 END IF;
4056
4057 /* -- Budget Amount cannot be updated for an active budget. #3570045 -- reverted change.
4058 IF p_complete_rec.status_code = 'ACTIVE' THEN
4059 OPEN c_old_status(p_fund_rec.fund_id);
4060 FETCH c_old_status INTO l_fund_old_status, l_fund_old_amount;
4061 CLOSE c_old_status;
4062
4063 IF l_fund_old_status = 'ACTIVE' AND p_complete_rec.original_budget <> l_fund_old_amount THEN
4064 fnd_message.set_name('OZF', 'OZF_ACTIVE_FUND_AMT');
4065 fnd_msg_pub.add;
4066 x_return_status := fnd_api.g_ret_sts_error;
4067 END IF;
4068 END IF;
4069 */
4070 --original amount should be within 15 digits
4071 IF p_complete_rec.original_budget > 999999999999999 THEN
4072 IF p_fund_rec.fund_type = 'QUOTA' THEN
4073 fnd_message.set_name('OZF', 'OZF_TP_MAX_AMT_EXCEEDED');
4074 ELSE
4075 fnd_message.set_name('OZF', 'OZF_FUND_MAX_AMT_EXCEEDED');
4076 END IF;
4077 fnd_msg_pub.add;
4078 x_return_status := fnd_api.g_ret_sts_error;
4079 END IF;
4080
4081 IF l_start_date > l_end_date THEN
4082 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4083 fnd_message.set_name('OZF', 'OZF_FUND_DATE_MISMATCH');
4084 fnd_msg_pub.add;
4085 END IF;
4086
4087 x_return_status := fnd_api.g_ret_sts_error;
4088 END IF;
4089
4090 IF p_mode = jtf_plsql_api.g_update THEN
4091 IF p_fund_rec.parent_fund_id <> fnd_api.g_miss_num
4092 AND p_fund_rec.parent_fund_id IS NOT NULL THEN
4093 IF p_complete_rec.fund_id = p_complete_rec.parent_fund_id THEN
4094 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4095 IF p_fund_rec.fund_type = 'QUOTA' THEN
4096 fnd_message.set_name('OZF', 'OZF_TP_WRONG_PARENT');
4097 ELSE
4098 fnd_message.set_name('OZF', 'OZF_FUND_WRONG_PARENT');
4099 END IF;
4100 fnd_msg_pub.add;
4101 x_return_status := fnd_api.g_ret_sts_error;
4102 END IF;
4103 END IF;
4104 END IF;
4105 END IF;
4106
4107 -- added by mpande
4108 -- holdback amt cannot be greater than total budget which is equal to
4109 -- (ORG_BUDG - Holdback_amt + Trasfered_in_amt - Transfered_out_amt)
4110 -- in a active fund where as in a draft fund holdback should be more than original budget
4111 IF p_complete_rec.status_code = 'ACTIVE' THEN
4112 -- 11/05/2003 yzhao: fix bug 3238497 - allow fully accrual budget to go below 0
4113 IF p_complete_rec.fund_type <> 'FULLY_ACCRUED' OR
4114 p_complete_rec.original_budget >= 0 OR
4115 NVL(p_complete_rec.holdback_amt, 0) <> 0 THEN
4116 IF p_complete_rec.holdback_amt >
4117 ( NVL(p_complete_rec.original_budget, 0) +
4118 NVL(p_complete_rec.transfered_in_amt, 0) -
4119 NVL(p_complete_rec.transfered_out_amt, 0)) THEN
4120 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4121 fnd_message.set_name('OZF', 'OZF_EXCESS_HOLDBACK_AMT');
4122 fnd_msg_pub.add;
4123 END IF;
4124 x_return_status := fnd_api.g_ret_sts_error;
4125 END IF;
4126 END IF;
4127
4128 -- hold back amount should not be negative fix for bug#3352216
4129 IF p_complete_rec.holdback_amt < 0 THEN
4130 fnd_message.set_name('OZF', 'OZF_FUND_NO_HOLDBACK_BUDGET');
4131 fnd_msg_pub.add;
4132 x_return_status := fnd_api.g_ret_sts_error;
4133 END IF;
4134
4135 ELSE
4136 IF p_complete_rec.holdback_amt > (NVL(p_complete_rec.original_budget, 0)) THEN
4137 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4138 fnd_message.set_name('OZF', 'OZF_EXCESS_HOLDBACK_AMT');
4139 fnd_msg_pub.add;
4140 END IF;
4141
4142 x_return_status := fnd_api.g_ret_sts_error;
4143 --RAISE FND_API.g_exc_error;
4144 END IF;
4145
4146 -- holdback amount should not be negative. Fix for bug#3352216
4147 IF p_complete_rec.holdback_amt < 0 THEN
4148 fnd_message.set_name('OZF', 'OZF_FUND_NO_HOLDBACK_BUDGET');
4149 fnd_msg_pub.add;
4150 x_return_status := fnd_api.g_ret_sts_error;
4151 END IF;
4152
4153 END IF;
4154
4155 -- For a accrual type fund whenever it becomes active the original budget should be 0
4156 -- 01/20/2001 Mumu Pande Added all calls for fund accrual validation
4157 -- 6/11/2002 mpande Check for Original Budget = 0 when the status is not ACTIVE
4158 IF p_complete_rec.fund_type = 'FULLY_ACCRUED' THEN
4159
4160 /* yzhao: 02/04/2003 fix bug: can not close an accrual budget if it already accrued some fund
4161 IF NVL(p_complete_rec.original_budget, 0) <> 0 AND p_complete_rec.status_code IN ('DRAFT','CLOSED','CANCELLED','ARCHIVED') THEN
4162 */
4163 IF NVL(p_complete_rec.original_budget, 0) <> 0 AND p_complete_rec.status_code = 'DRAFT' THEN
4164 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4165 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_ORG_BUDGET');
4166 fnd_msg_pub.add;
4167 END IF;
4168
4169 x_return_status := fnd_api.g_ret_sts_error;
4170 END IF;
4171 /* 11.5.9
4172 IF p_complete_rec.accrual_basis IS NULL THEN
4173 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4174 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_BASIS');
4175 fnd_msg_pub.add;
4176 END IF;
4177
4178 x_return_status := fnd_api.g_ret_sts_error;
4179 END IF;*/
4180 /*
4181 IF p_complete_rec.accrual_operand IS NULL THEN
4182 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4183 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_OPERAND');
4184 fnd_msg_pub.add;
4185 END IF;
4186
4187 x_return_status := fnd_api.g_ret_sts_error;
4188 END IF;
4189 */
4190 /* -- we donot need to give the UOM
4191 IF p_complete_rec.accrual_uom IS NULL THEN
4192 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4193 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_UOM');
4194 fnd_msg_pub.add;
4195 END IF;
4196
4197 x_return_status := fnd_api.g_ret_sts_error;
4198 END IF;
4199 */
4200 /*
4201 -- sangara - R12 enhancement - not mandatory, as they are moved to Market Options cuecard
4202 IF p_complete_rec.accrual_phase IS NULL THEN
4203 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4204 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_PHASE');
4205 fnd_msg_pub.add;
4206 END IF;
4207
4208 x_return_status := fnd_api.g_ret_sts_error;
4209 END IF;
4210 */
4211 /*
4212 IF NVL(p_complete_rec.accrual_rate, 0) <= 0 THEN
4213 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4214 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_RATE');
4215 fnd_msg_pub.add;
4216 END IF;
4217
4218 x_return_status := fnd_api.g_ret_sts_error;
4219 END IF;
4220 -- default the quantity to 1
4221 /*
4222 IF NVL(p_complete_rec.accrual_quantity, 0) <= 0 THEN
4223 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4224 fnd_message.set_name('OZF', 'OZF_ACCRUAL_NO_QUANTITY');
4225 fnd_msg_pub.add;
4226 END IF;
4227
4228 x_return_status := fnd_api.g_ret_sts_error;
4229 END IF;
4230
4231 --- for a active accrual fund product eligibiilty should exist 01/20/2001 mpande
4232 -- not when a active fund is created automatically
4233 IF p_complete_rec.status_code = 'ACTIVE' AND
4234 p_mode <> jtf_plsql_api.g_create THEN
4235 Ozf_fundrules_pvt.check_product_elig_exists(
4236 p_complete_rec.fund_id
4237 ,l_return_status);
4238
4239 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4240 x_return_status := l_return_status;
4241 END IF;
4242 END IF; */
4243 END IF;
4244
4245 -- Check for update validations
4246 IF p_mode = jtf_plsql_api.g_update THEN
4247 -- mpande added on Sep 11 for giving update access to owner and persons who have access with edit metric flag = 'Y'
4248 l_resource_id := ozf_utility_pvt.get_resource_id(p_user_id => fnd_global.user_id);
4249
4250 IF G_DEBUG THEN
4251 ozf_utility_pvt.debug_message('resource'||ams_access_pvt.check_update_access(p_complete_rec.fund_id, 'FUND', l_resource_id, 'USER'));
4252 END IF;
4253
4254 IF l_resource_id <> -1 THEN
4255 IF ams_access_pvt.check_update_access(
4256 p_complete_rec.fund_id
4257 ,'FUND'
4258 ,l_resource_id
4259 ,'USER') <>
4260 'F' THEN
4261 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4262 IF p_fund_rec.fund_type = 'QUOTA' THEN
4263 fnd_message.set_name('OZF', 'OZF_TP_ILLEGAL_OWNER');
4264 ELSE
4265 fnd_message.set_name('OZF', 'OZF_FUND_ILLEGAL_OWNER');
4266 END IF;
4267 fnd_msg_pub.add;
4268 END IF;
4269
4270 x_return_status := fnd_api.g_ret_sts_error;
4271 END IF;
4272 ELSIF l_resource_id = -1 THEN
4273 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4274 fnd_message.set_name('OZF', 'OZF_NO_RESOURCE_ID');
4275 fnd_msg_pub.add;
4276 END IF;
4277
4278 x_return_status := fnd_api.g_ret_sts_error;
4279 END IF;
4280
4281 --kdass 10-OCT-05 - R12 bug 4613689 validate accrual budget's ledger and offer's org
4282 IF p_fund_rec.fund_type = 'FULLY_ACCRUED' AND p_complete_rec.ledger_id IS NOT NULL THEN
4283 OPEN c_offer_org (p_complete_rec.plan_id);
4284 FETCH c_offer_org INTO l_offer_org;
4285 CLOSE c_offer_org;
4286
4287 IF l_offer_org IS NOT NULL THEN
4288 -- Get offer's ledger
4289 MO_UTILS.Get_Ledger_Info (p_operating_unit => l_offer_org,
4290 p_ledger_id => l_offer_ledger,
4291 p_ledger_name => l_offer_ledgerName
4292 );
4293 IF p_complete_rec.ledger_id <> l_offer_ledger THEN
4294 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4295 fnd_message.set_name('OZF', 'OZF_BUDGET_OFFR_LEDG_MISMATCH');
4296 fnd_msg_pub.add;
4297 END IF;
4298 x_return_status := fnd_api.g_ret_sts_error;
4299 END IF;
4300 END IF;
4301 END IF;
4302
4303 END IF;
4304
4305 END check_fund_record;
4306
4307 ---------------------------------------------------------------------
4308 -- PROCEDURE
4309 -- check_fund_inter_entity
4310 --
4311 -- HISTORY
4312 -- 1/15/01 mpande Created.
4313 ---------------------------------------------------------------------
4314
4315 PROCEDURE check_fund_inter_entity(
4316 p_fund_rec IN fund_rec_type
4317 ,p_complete_rec IN fund_rec_type
4318 ,p_validation_mode IN VARCHAR2
4319 ,x_return_status OUT NOCOPY VARCHAR2)
4320 IS
4321 l_return_status VARCHAR2(1);
4322 BEGIN
4323 x_return_status := fnd_api.g_ret_sts_success;
4324
4325 ------------------- check calendar ----------------------
4326 IF p_fund_rec.fund_calendar <> fnd_api.g_miss_char
4327 OR p_fund_rec.start_period_name <> fnd_api.g_miss_char
4328 OR p_fund_rec.end_period_name <> fnd_api.g_miss_char
4329 OR p_fund_rec.start_date_active <> fnd_api.g_miss_date
4330 OR p_fund_rec.end_date_active <> fnd_api.g_miss_date THEN
4331 Ozf_fundrules_pvt.check_fund_calendar(
4332 p_complete_rec.fund_calendar
4333 ,p_complete_rec.start_period_name
4334 ,p_complete_rec.end_period_name
4335 ,p_complete_rec.start_date_active
4336 ,p_complete_rec.end_date_active
4337 ,p_complete_rec.fund_type
4338 ,l_return_status);
4339
4340 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4341 x_return_status := l_return_status;
4342 END IF;
4343 END IF;
4344
4345 ------------------- check dates ------------------------------
4346 IF p_fund_rec.start_date_active <> fnd_api.g_miss_date
4347 OR p_fund_rec.end_date_active <> fnd_api.g_miss_date THEN
4348 Ozf_fundrules_pvt.check_fund_dates_vs_parent(
4349 p_complete_rec.parent_fund_id
4350 ,p_complete_rec.start_date_active
4351 ,p_complete_rec.end_date_active
4352 ,l_return_status);
4353
4354 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4355 x_return_status := l_return_status;
4356 END IF;
4357
4358 IF p_validation_mode = jtf_plsql_api.g_update THEN
4359 Ozf_fundrules_pvt.check_fund_dates_vs_child(
4360 p_complete_rec.fund_id
4361 ,p_complete_rec.start_date_active
4362 ,p_complete_rec.end_date_active
4363 ,l_return_status);
4364
4365 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4366 x_return_status := l_return_status;
4367 END IF;
4368 END IF;
4369 END IF;
4370
4371 ------------------- check budget amounts ------------------------------
4372 -- only in planning stage --07/23/2001 mpande
4373 IF p_complete_rec.status_code NOT IN ('ACTIVE','ON_HOLD','CANCELLED','ARCHIVED','CLOSED') THEN
4374 IF p_fund_rec.original_budget <> fnd_api.g_miss_num
4375 OR p_fund_rec.transfered_in_amt <> fnd_api.g_miss_num
4376 OR p_fund_rec.transfered_out_amt <> fnd_api.g_miss_num THEN
4377 -- updated 09/04/2001 mpande for Multi Currency Child
4378 Ozf_fundrules_pvt.check_fund_amount_vs_parent(
4379 p_complete_rec.parent_fund_id
4380 ,p_complete_rec.currency_code_tc
4381 ,p_complete_rec.original_budget
4382 ,l_return_status);
4383
4384 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4385 x_return_status := l_return_status;
4386 END IF;
4387
4388 IF p_validation_mode = jtf_plsql_api.g_update THEN
4389 -- updated 09/04/2001 mpande for Multi Currency Child
4390 Ozf_fundrules_pvt.check_fund_amount_vs_child(
4391 p_complete_rec.fund_id
4392 ,p_complete_rec.original_budget
4393 ,p_complete_rec.transfered_in_amt
4394 ,p_complete_rec.transfered_out_amt
4395 ,p_complete_rec.currency_code_tc
4396 ,l_return_status);
4397
4398 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4399 x_return_status := l_return_status;
4400 END IF;
4401 END IF;
4402 END IF;
4403 END IF;
4404
4405 ------------------- check fund type ------------------------------
4406 IF p_fund_rec.fund_type <> fnd_api.g_miss_char
4407 OR p_fund_rec.parent_fund_id <> fnd_api.g_miss_num THEN
4408 --- the chikd parent validation is done always
4409 Ozf_fundrules_pvt.check_fund_type_vs_parent(
4410 p_complete_rec.parent_fund_id
4411 ,p_complete_rec.fund_type
4412 ,l_return_status);
4413
4414 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4415 x_return_status := l_return_status;
4416 END IF;
4417
4418 -- check for change of fund type only when the status is going active
4419 -- cause in a draft mode the user can change the fund type
4420 IF p_validation_mode = jtf_plsql_api.g_update
4421 AND p_complete_rec.status_code = 'ACTIVE' THEN
4422 Ozf_fundrules_pvt.check_fund_type_vs_child(
4423 p_complete_rec.fund_id
4424 ,p_complete_rec.fund_type
4425 ,l_return_status);
4426
4427 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4428 x_return_status := l_return_status;
4429 END IF;
4430 END IF;
4431 END IF;
4432
4433 ------------------- check fund curr ------------------------------
4434 --09/04/2001 mpande commented
4435 /*
4436 IF p_fund_rec.currency_code_tc <> fnd_api.g_miss_char
4437 OR p_fund_rec.parent_fund_id <> fnd_api.g_miss_num THEN
4438 --- the child parent validation is done always
4439 Ozf_fundrules_pvt.check_fund_curr_vs_parent(
4440 p_complete_rec.parent_fund_id
4441 ,p_complete_rec.currency_code_tc
4442 ,l_return_status);
4443
4444 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4445 x_return_status := l_return_status;
4446 END IF;
4447
4448 -- check for change of fund currency only when the status is going active
4449 -- cause in a draft mode the user can change the fund currency
4450 IF p_validation_mode = jtf_plsql_api.g_update
4451 AND p_complete_rec.status_code = 'ACTIVE' THEN
4452 Ozf_fundrules_pvt.check_fund_curr_vs_child(
4453 p_complete_rec.fund_id
4454 ,p_complete_rec.currency_code_tc
4455 ,l_return_status);
4456
4457 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4458 x_return_status := l_return_status;
4459 END IF;
4460 END IF;
4461 END IF;
4462 */
4463
4464 ------------------- check fund_status ------------------------------
4465 IF p_fund_rec.status_code <> fnd_api.g_miss_char
4466 OR p_fund_rec.parent_fund_id <> fnd_api.g_miss_num THEN
4467 Ozf_fundrules_pvt.check_fund_status_vs_parent(
4468 p_complete_rec.parent_fund_id
4469 ,p_complete_rec.status_code
4470 ,l_return_status);
4471
4472 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4473 x_return_status := l_return_status;
4474 END IF;
4475 END IF;
4476 END check_fund_inter_entity;
4477
4478
4479
4480 ---------------------------------------------------------------------
4481 -- PROCEDURE
4482 -- Init_Fund_Rec
4483 --
4484 -- HISTORY
4485 -- 02/02/2000 Shitij Vatsa Create.
4486 ---------------------------------------------------------------------
4487 PROCEDURE init_fund_rec(
4488 x_fund_rec OUT NOCOPY fund_rec_type)
4489 IS
4490 BEGIN
4491
4492 RETURN;
4493 END init_fund_rec;
4494
4495
4496
4497 ---------------------------------------------------------------------
4498 -- PROCEDURE
4499 -- Complete_Fund_Rec
4500 --
4501 -- HISTORY
4502 -- 02/02/2000 Shitij Vatsa Create.
4503 ---------------------------------------------------------------------
4504 PROCEDURE complete_fund_rec(
4505 p_fund_rec IN fund_rec_type
4506 ,x_complete_rec OUT NOCOPY fund_rec_type)
4507 IS
4508 CURSOR c_fund
4509 IS
4510 SELECT *
4511 FROM ozf_funds_all_vl
4512 WHERE fund_id = p_fund_rec.fund_id;
4513
4514 l_fund_rec c_fund%ROWTYPE;
4515 BEGIN
4516 x_complete_rec := p_fund_rec;
4517 OPEN c_fund;
4518 FETCH c_fund INTO l_fund_rec;
4519
4520 IF c_fund%NOTFOUND THEN
4521 CLOSE c_fund;
4522
4523 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4524 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
4525 fnd_msg_pub.add;
4526 END IF;
4527
4528 RAISE fnd_api.g_exc_error;
4529 END IF;
4530
4531 CLOSE c_fund;
4532
4533 IF p_fund_rec.fund_number = fnd_api.g_miss_char THEN
4534 x_complete_rec.fund_number := NULL;
4535 END IF;
4536 IF p_fund_rec.fund_number IS NULL THEN
4537 x_complete_rec.fund_number := l_fund_rec.fund_number;
4538 END IF;
4539
4540 IF p_fund_rec.parent_fund_id = fnd_api.g_miss_num THEN
4541 x_complete_rec.parent_fund_id := NULL;
4542 END IF;
4543 IF p_fund_rec.parent_fund_id IS NULL THEN
4544 x_complete_rec.parent_fund_id := l_fund_rec.parent_fund_id;
4545 END IF;
4546
4547 IF p_fund_rec.category_id = fnd_api.g_miss_num THEN
4548 x_complete_rec.category_id := NULL;
4549 END IF;
4550 IF p_fund_rec.category_id IS NULL THEN
4551 x_complete_rec.category_id := l_fund_rec.category_id;
4552 END IF;
4553
4554 IF p_fund_rec.fund_type = fnd_api.g_miss_char THEN
4555 x_complete_rec.fund_type := NULL;
4556 END IF;
4557 IF p_fund_rec.fund_type IS NULL THEN
4558 x_complete_rec.fund_type := l_fund_rec.fund_type;
4559 END IF;
4560
4561 IF p_fund_rec.fund_usage = fnd_api.g_miss_char THEN
4562 x_complete_rec.fund_usage := NULL;
4563 END IF;
4564 IF p_fund_rec.fund_usage IS NULL THEN
4565 x_complete_rec.fund_usage := l_fund_rec.fund_usage;
4566 END IF;
4567
4568 IF p_fund_rec.status_code = fnd_api.g_miss_char THEN
4569 x_complete_rec.status_code := NULL;
4570 END IF;
4571 IF p_fund_rec.status_code IS NULL THEN
4572 x_complete_rec.status_code := l_fund_rec.status_code;
4573 END IF;
4574
4575 IF p_fund_rec.user_status_id = fnd_api.g_miss_num THEN
4576 x_complete_rec.user_status_id := NULL;
4577 END IF;
4578 IF p_fund_rec.user_status_id IS NULL THEN
4579 x_complete_rec.user_status_id := l_fund_rec.user_status_id;
4580 END IF;
4581
4582 IF p_fund_rec.status_date = fnd_api.g_miss_date THEN
4583 x_complete_rec.status_date := NULL;
4584 END IF;
4585 IF p_fund_rec.status_date IS NULL THEN
4586 x_complete_rec.status_date := l_fund_rec.status_date;
4587 END IF;
4588
4589 IF p_fund_rec.accrued_liable_account = fnd_api.g_miss_num THEN
4590 x_complete_rec.accrued_liable_account := NULL;
4591 END IF;
4592 IF p_fund_rec.accrued_liable_account IS NULL THEN
4593 x_complete_rec.accrued_liable_account := l_fund_rec.accrued_liable_account;
4594 END IF;
4595
4596 IF p_fund_rec.ded_adjustment_account = fnd_api.g_miss_num THEN
4597 x_complete_rec.ded_adjustment_account := NULL;
4598 END IF;
4599 IF p_fund_rec.ded_adjustment_account IS NULL THEN
4600 x_complete_rec.ded_adjustment_account := l_fund_rec.ded_adjustment_account;
4601 END IF;
4602
4603 IF p_fund_rec.liability_flag = fnd_api.g_miss_char THEN
4604 x_complete_rec.liability_flag := NULL;
4605 END IF;
4606 IF p_fund_rec.liability_flag IS NULL THEN
4607 x_complete_rec.liability_flag := l_fund_rec.liability_flag;
4608 END IF;
4609
4610 IF p_fund_rec.set_of_books_id = fnd_api.g_miss_num THEN
4611 x_complete_rec.set_of_books_id := NULL;
4612 END IF;
4613 IF p_fund_rec.set_of_books_id IS NULL THEN
4614 x_complete_rec.set_of_books_id := l_fund_rec.set_of_books_id;
4615 END IF;
4616
4617 IF p_fund_rec.start_period_id = fnd_api.g_miss_num THEN
4618 x_complete_rec.start_period_id := NULL;
4619 END IF;
4620 IF p_fund_rec.start_period_id IS NULL THEN
4621 x_complete_rec.start_period_id := l_fund_rec.start_period_id;
4622 END IF;
4623
4624 IF p_fund_rec.end_period_id = fnd_api.g_miss_num THEN
4625 x_complete_rec.end_period_id := NULL;
4626 END IF;
4627 IF p_fund_rec.end_period_id IS NULL THEN
4628 x_complete_rec.end_period_id := l_fund_rec.end_period_id;
4629 END IF;
4630
4631 IF p_fund_rec.start_date_active = fnd_api.g_miss_date THEN
4632 x_complete_rec.start_date_active := NULL;
4633 END IF;
4634 IF p_fund_rec.start_date_active IS NULL THEN
4635 x_complete_rec.start_date_active := l_fund_rec.start_date_active;
4636 END IF;
4637
4638 IF p_fund_rec.end_date_active = fnd_api.g_miss_date THEN
4639 x_complete_rec.end_date_active := NULL;
4640 END IF;
4641 IF p_fund_rec.end_date_active IS NULL THEN
4642 x_complete_rec.end_date_active := l_fund_rec.end_date_active;
4643 END IF;
4644
4645 IF p_fund_rec.budget_amount_tc = fnd_api.g_miss_num THEN
4646 x_complete_rec.budget_amount_tc := NULL;
4647 END IF;
4648 IF p_fund_rec.budget_amount_tc IS NULL THEN
4649 x_complete_rec.budget_amount_tc := l_fund_rec.budget_amount_tc;
4650 END IF;
4651
4652 IF p_fund_rec.budget_amount_fc = fnd_api.g_miss_num THEN
4653 x_complete_rec.budget_amount_fc := NULL;
4654 END IF;
4655 IF p_fund_rec.budget_amount_fc IS NULL THEN
4656 x_complete_rec.budget_amount_fc := l_fund_rec.budget_amount_fc;
4657 END IF;
4658
4659 IF p_fund_rec.available_amount = fnd_api.g_miss_num THEN
4660 x_complete_rec.available_amount := NULL;
4661 END IF;
4662 IF p_fund_rec.available_amount IS NULL THEN
4663 x_complete_rec.available_amount := l_fund_rec.available_amount;
4664 END IF;
4665
4666 IF p_fund_rec.distributed_amount = fnd_api.g_miss_num THEN
4667 x_complete_rec.distributed_amount := NULL;
4668 END IF;
4669 IF p_fund_rec.distributed_amount IS NULL THEN
4670 x_complete_rec.distributed_amount := l_fund_rec.distributed_amount;
4671 END IF;
4672
4673 IF p_fund_rec.currency_code_tc = fnd_api.g_miss_char THEN
4674 x_complete_rec.currency_code_tc := NULL;
4675 END IF;
4676 IF p_fund_rec.currency_code_tc IS NULL THEN
4677 x_complete_rec.currency_code_tc := l_fund_rec.currency_code_tc;
4678 END IF;
4679
4680 IF p_fund_rec.currency_code_fc = fnd_api.g_miss_char THEN
4681 x_complete_rec.currency_code_fc := NULL;
4682 END IF;
4683 IF p_fund_rec.currency_code_fc IS NULL THEN
4684 x_complete_rec.currency_code_fc := l_fund_rec.currency_code_fc;
4685 END IF;
4686
4687 IF p_fund_rec.exchange_rate_type = fnd_api.g_miss_char THEN
4688 x_complete_rec.exchange_rate_type := NULL;
4689 END IF;
4690 IF p_fund_rec.exchange_rate_type IS NULL THEN
4691 x_complete_rec.exchange_rate_type := l_fund_rec.exchange_rate_type;
4692 END IF;
4693
4694 IF p_fund_rec.exchange_rate_date = fnd_api.g_miss_date THEN
4695 x_complete_rec.exchange_rate_date := NULL;
4696 END IF;
4697 IF p_fund_rec.exchange_rate_date IS NULL THEN
4698 x_complete_rec.exchange_rate_date := l_fund_rec.exchange_rate_date;
4699 END IF;
4700
4701 IF p_fund_rec.exchange_rate = fnd_api.g_miss_num THEN
4702 x_complete_rec.exchange_rate := NULL;
4703 END IF;
4704 IF p_fund_rec.exchange_rate IS NULL THEN
4705 x_complete_rec.exchange_rate := l_fund_rec.exchange_rate;
4706 END IF;
4707
4708 IF p_fund_rec.department_id = fnd_api.g_miss_num THEN
4709 x_complete_rec.department_id := NULL;
4710 END IF;
4711 IF p_fund_rec.department_id IS NULL THEN
4712 x_complete_rec.department_id := l_fund_rec.department_id;
4713 END IF;
4714
4715 IF p_fund_rec.costcentre_id = fnd_api.g_miss_num THEN
4716 x_complete_rec.costcentre_id := NULL;
4717 END IF;
4718 IF p_fund_rec.costcentre_id IS NULL THEN
4719 x_complete_rec.costcentre_id := l_fund_rec.costcentre_id;
4720 END IF;
4721
4722 IF p_fund_rec.owner = fnd_api.g_miss_num THEN
4723 x_complete_rec.owner := NULL;
4724 END IF;
4725 IF p_fund_rec.owner IS NULL THEN
4726 x_complete_rec.owner := l_fund_rec.owner;
4727 END IF;
4728
4729 IF p_fund_rec.accrual_method = fnd_api.g_miss_char THEN
4730 x_complete_rec.accrual_method := NULL;
4731 END IF;
4732 IF p_fund_rec.accrual_method IS NULL THEN
4733 x_complete_rec.accrual_method := l_fund_rec.accrual_method;
4734 END IF;
4735
4736 IF p_fund_rec.accrual_operand = fnd_api.g_miss_char THEN
4737 x_complete_rec.accrual_operand := NULL;
4738 END IF;
4739 IF p_fund_rec.accrual_operand IS NULL THEN
4740 x_complete_rec.accrual_operand := l_fund_rec.accrual_operand;
4741 END IF;
4742
4743 IF p_fund_rec.accrual_rate = fnd_api.g_miss_num THEN
4744 x_complete_rec.accrual_rate := NULL;
4745 END IF;
4746 IF p_fund_rec.accrual_rate IS NULL THEN
4747 x_complete_rec.accrual_rate := l_fund_rec.accrual_rate;
4748 END IF;
4749
4750 IF p_fund_rec.accrual_basis = fnd_api.g_miss_char THEN
4751 x_complete_rec.accrual_basis := NULL;
4752 END IF;
4753 IF p_fund_rec.accrual_basis IS NULL THEN
4754 x_complete_rec.accrual_basis := l_fund_rec.accrual_basis;
4755 END IF;
4756
4757 IF p_fund_rec.hierarchy = fnd_api.g_miss_char THEN
4758 x_complete_rec.hierarchy := NULL;
4759 END IF;
4760 IF p_fund_rec.hierarchy IS NULL THEN
4761 x_complete_rec.hierarchy := l_fund_rec.hierarchy;
4762 END IF;
4763
4764 IF p_fund_rec.hierarchy_level = fnd_api.g_miss_char THEN
4765 x_complete_rec.hierarchy_level := NULL;
4766 END IF;
4767 IF p_fund_rec.hierarchy_level IS NULL THEN
4768 x_complete_rec.hierarchy_level := l_fund_rec.hierarchy_level;
4769 END IF;
4770
4771 IF p_fund_rec.hierarchy_id = fnd_api.g_miss_num THEN
4772 x_complete_rec.hierarchy_id := NULL;
4773 END IF;
4774 IF p_fund_rec.hierarchy_id IS NULL THEN
4775 x_complete_rec.hierarchy_id := l_fund_rec.hierarchy_id;
4776 END IF;
4777
4778 IF p_fund_rec.parent_node_id = fnd_api.g_miss_num THEN
4779 x_complete_rec.parent_node_id := NULL;
4780 END IF;
4781 IF p_fund_rec.parent_node_id IS NULL THEN
4782 x_complete_rec.parent_node_id := l_fund_rec.parent_node_id;
4783 END IF;
4784
4785 IF p_fund_rec.node_id = fnd_api.g_miss_num THEN
4786 x_complete_rec.node_id := NULL;
4787 END IF;
4788 IF p_fund_rec.node_id IS NULL THEN
4789 x_complete_rec.node_id := l_fund_rec.node_id;
4790 END IF;
4791
4792 IF p_fund_rec.budget_flag = fnd_api.g_miss_char THEN
4793 x_complete_rec.budget_flag := NULL;
4794 END IF;
4795 IF p_fund_rec.budget_flag IS NULL THEN
4796 x_complete_rec.budget_flag := l_fund_rec.budget_flag;
4797 END IF;
4798
4799 IF p_fund_rec.earned_flag = fnd_api.g_miss_char THEN
4800 x_complete_rec.earned_flag := NULL;
4801 END IF;
4802 IF p_fund_rec.earned_flag IS NULL THEN
4803 x_complete_rec.earned_flag := l_fund_rec.earned_flag;
4804 END IF;
4805
4806 IF p_fund_rec.apply_accrual_on = fnd_api.g_miss_char THEN
4807 x_complete_rec.apply_accrual_on := NULL;
4808 END IF;
4809 IF p_fund_rec.apply_accrual_on IS NULL THEN
4810 x_complete_rec.apply_accrual_on := l_fund_rec.apply_accrual_on;
4811 END IF;
4812
4813 IF p_fund_rec.accrual_phase = fnd_api.g_miss_char THEN
4814 x_complete_rec.accrual_phase := NULL;
4815 END IF;
4816 IF p_fund_rec.accrual_phase IS NULL THEN
4817 x_complete_rec.accrual_phase := l_fund_rec.accrual_phase;
4818 END IF;
4819
4820 IF p_fund_rec.accrual_cap = fnd_api.g_miss_num THEN
4821 x_complete_rec.accrual_cap := NULL;
4822 END IF;
4823 IF p_fund_rec.accrual_cap IS NULL THEN
4824 x_complete_rec.accrual_cap := l_fund_rec.accrual_cap;
4825 END IF;
4826
4827 IF p_fund_rec.accrual_uom = fnd_api.g_miss_char THEN
4828 x_complete_rec.accrual_uom := NULL;
4829 END IF;
4830 IF p_fund_rec.accrual_uom IS NULL THEN
4831 x_complete_rec.accrual_uom := l_fund_rec.accrual_uom;
4832 END IF;
4833
4834
4835 IF p_fund_rec.recal_committed = fnd_api.g_miss_num THEN
4836 x_complete_rec.recal_committed := NULL;
4837 END IF;
4838 IF p_fund_rec.recal_committed IS NULL THEN
4839 x_complete_rec.recal_committed := l_fund_rec.recal_committed;
4840 END IF;
4841
4842
4843 IF p_fund_rec.attribute_category = fnd_api.g_miss_char THEN
4844 x_complete_rec.attribute_category := NULL;
4845 END IF;
4846 IF p_fund_rec.attribute_category IS NULL THEN
4847 x_complete_rec.attribute_category := l_fund_rec.attribute_category;
4848 END IF;
4849
4850 IF p_fund_rec.attribute1 = fnd_api.g_miss_char THEN
4851 x_complete_rec.attribute1 := NULL;
4852 END IF;
4853 IF p_fund_rec.attribute1 IS NULL THEN
4854 x_complete_rec.attribute1 := l_fund_rec.attribute1;
4855 END IF;
4856
4857 IF p_fund_rec.attribute2 = fnd_api.g_miss_char THEN
4858 x_complete_rec.attribute2 := NULL;
4859 END IF;
4860 IF p_fund_rec.attribute2 IS NULL THEN
4861 x_complete_rec.attribute2 := l_fund_rec.attribute2;
4862 END IF;
4863
4864 IF p_fund_rec.attribute3 = fnd_api.g_miss_char THEN
4865 x_complete_rec.attribute3 := NULL;
4866 END IF;
4867 IF p_fund_rec.attribute3 IS NULL THEN
4868 x_complete_rec.attribute3 := l_fund_rec.attribute3;
4869 END IF;
4870
4871 IF p_fund_rec.attribute4 = fnd_api.g_miss_char THEN
4872 x_complete_rec.attribute4 := NULL;
4873 END IF;
4874 IF p_fund_rec.attribute4 IS NULL THEN
4875 x_complete_rec.attribute4 := l_fund_rec.attribute4;
4876 END IF;
4877
4878 IF p_fund_rec.attribute5 = fnd_api.g_miss_char THEN
4879 x_complete_rec.attribute5 := NULL;
4880 END IF;
4881 IF p_fund_rec.attribute5 IS NULL THEN
4882 x_complete_rec.attribute5 := l_fund_rec.attribute5;
4883 END IF;
4884
4885 IF p_fund_rec.attribute6 = fnd_api.g_miss_char THEN
4886 x_complete_rec.attribute6 := NULL;
4887 END IF;
4888 IF p_fund_rec.attribute6 IS NULL THEN
4889 x_complete_rec.attribute6 := l_fund_rec.attribute6;
4890 END IF;
4891
4892 IF p_fund_rec.attribute7 = fnd_api.g_miss_char THEN
4893 x_complete_rec.attribute7 := NULL;
4894 END IF;
4895 IF p_fund_rec.attribute7 IS NULL THEN
4896 x_complete_rec.attribute7 := l_fund_rec.attribute7;
4897 END IF;
4898
4899 IF p_fund_rec.attribute8 = fnd_api.g_miss_char THEN
4900 x_complete_rec.attribute8 := NULL;
4901 END IF;
4902 IF p_fund_rec.attribute8 IS NULL THEN
4903 x_complete_rec.attribute8 := l_fund_rec.attribute8;
4904 END IF;
4905
4906 IF p_fund_rec.attribute9 = fnd_api.g_miss_char THEN
4907 x_complete_rec.attribute9 := NULL;
4908 END IF;
4909 IF p_fund_rec.attribute9 IS NULL THEN
4910 x_complete_rec.attribute9 := l_fund_rec.attribute9;
4911 END IF;
4912
4913 IF p_fund_rec.attribute10 = fnd_api.g_miss_char THEN
4914 x_complete_rec.attribute10 := NULL;
4915 END IF;
4916 IF p_fund_rec.attribute10 IS NULL THEN
4917 x_complete_rec.attribute10 := l_fund_rec.attribute10;
4918 END IF;
4919
4920 IF p_fund_rec.attribute11 = fnd_api.g_miss_char THEN
4921 x_complete_rec.attribute11 := NULL;
4922 END IF;
4923 IF p_fund_rec.attribute11 IS NULL THEN
4924 x_complete_rec.attribute11 := l_fund_rec.attribute11;
4925 END IF;
4926
4927 IF p_fund_rec.attribute12 = fnd_api.g_miss_char THEN
4928 x_complete_rec.attribute12 := NULL;
4929 END IF;
4930 IF p_fund_rec.attribute12 IS NULL THEN
4931 x_complete_rec.attribute12 := l_fund_rec.attribute12;
4932 END IF;
4933
4934 IF p_fund_rec.attribute13 = fnd_api.g_miss_char THEN
4935 x_complete_rec.attribute13 := NULL;
4936 END IF;
4937 IF p_fund_rec.attribute13 IS NULL THEN
4938 x_complete_rec.attribute13 := l_fund_rec.attribute13;
4939 END IF;
4940
4941 IF p_fund_rec.attribute14 = fnd_api.g_miss_char THEN
4942 x_complete_rec.attribute14 := NULL;
4943 END IF;
4944 IF p_fund_rec.attribute14 IS NULL THEN
4945 x_complete_rec.attribute14 := l_fund_rec.attribute14;
4946 END IF;
4947
4948 IF p_fund_rec.attribute15 = fnd_api.g_miss_char THEN
4949 x_complete_rec.attribute15 := NULL;
4950 END IF;
4951 IF p_fund_rec.attribute15 IS NULL THEN
4952 x_complete_rec.attribute15 := l_fund_rec.attribute15;
4953 END IF;
4954
4955 IF p_fund_rec.original_budget = fnd_api.g_miss_num THEN
4956 x_complete_rec.original_budget := NULL;
4957 END IF;
4958 IF p_fund_rec.original_budget IS NULL THEN
4959 x_complete_rec.original_budget := l_fund_rec.original_budget;
4960 END IF;
4961
4962 IF p_fund_rec.transfered_in_amt = fnd_api.g_miss_num THEN
4963 x_complete_rec.transfered_in_amt := NULL;
4964 END IF;
4965 IF p_fund_rec.transfered_in_amt IS NULL THEN
4966 x_complete_rec.transfered_in_amt := l_fund_rec.transfered_in_amt;
4967 END IF;
4968
4969 IF p_fund_rec.transfered_out_amt = fnd_api.g_miss_num THEN
4970 x_complete_rec.transfered_out_amt := NULL;
4971 END IF;
4972 IF p_fund_rec.transfered_out_amt IS NULL THEN
4973 x_complete_rec.transfered_out_amt := l_fund_rec.transfered_out_amt;
4974 END IF;
4975
4976 IF p_fund_rec.holdback_amt = fnd_api.g_miss_num THEN
4977 x_complete_rec.holdback_amt := NULL;
4978 END IF;
4979 IF p_fund_rec.holdback_amt IS NULL THEN
4980 x_complete_rec.holdback_amt := l_fund_rec.holdback_amt;
4981 END IF;
4982
4983 IF p_fund_rec.planned_amt = fnd_api.g_miss_num THEN
4984 x_complete_rec.planned_amt := NULL;
4985 END IF;
4986 IF p_fund_rec.planned_amt IS NULL THEN
4987 x_complete_rec.planned_amt := l_fund_rec.planned_amt;
4988 END IF;
4989
4990 IF p_fund_rec.committed_amt = fnd_api.g_miss_num THEN
4991 x_complete_rec.committed_amt := NULL;
4992 END IF;
4993 IF p_fund_rec.committed_amt IS NULL THEN
4994 x_complete_rec.committed_amt := l_fund_rec.committed_amt;
4995 END IF;
4996
4997 -- yzhao: 11.5.10
4998 IF p_fund_rec.utilized_amt = fnd_api.g_miss_num THEN
4999 x_complete_rec.utilized_amt := NULL;
5000 END IF;
5001 IF p_fund_rec.utilized_amt IS NULL THEN
5002 x_complete_rec.utilized_amt := l_fund_rec.utilized_amt;
5003 END IF;
5004
5005 IF p_fund_rec.earned_amt = fnd_api.g_miss_num THEN
5006 x_complete_rec.earned_amt := NULL;
5007 END IF;
5008 IF p_fund_rec.earned_amt IS NULL THEN
5009 x_complete_rec.earned_amt := l_fund_rec.earned_amt;
5010 END IF;
5011
5012 IF p_fund_rec.paid_amt = fnd_api.g_miss_num THEN
5013 x_complete_rec.paid_amt := NULL;
5014 END IF;
5015 IF p_fund_rec.paid_amt IS NULL THEN
5016 x_complete_rec.paid_amt := l_fund_rec.paid_amt;
5017 END IF;
5018
5019 IF p_fund_rec.plan_type = fnd_api.g_miss_char THEN
5020 x_complete_rec.plan_type := NULL;
5021 END IF;
5022 IF p_fund_rec.plan_type IS NULL THEN
5023 x_complete_rec.plan_type := l_fund_rec.plan_type;
5024 END IF;
5025
5026 IF p_fund_rec.plan_id = fnd_api.g_miss_num THEN
5027 x_complete_rec.plan_id := NULL;
5028 END IF;
5029 IF p_fund_rec.plan_id IS NULL THEN
5030 x_complete_rec.plan_id := l_fund_rec.plan_id;
5031 END IF;
5032
5033 IF p_fund_rec.liable_accnt_segments = fnd_api.g_miss_char THEN
5034 x_complete_rec.liable_accnt_segments := NULL;
5035 END IF;
5036 IF p_fund_rec.liable_accnt_segments IS NULL THEN
5037 x_complete_rec.liable_accnt_segments := l_fund_rec.liable_accnt_segments;
5038 END IF;
5039
5040 IF p_fund_rec.adjustment_accnt_segments = fnd_api.g_miss_char THEN
5041 x_complete_rec.adjustment_accnt_segments := NULL;
5042 END IF;
5043 IF p_fund_rec.adjustment_accnt_segments IS NULL THEN
5044 x_complete_rec.adjustment_accnt_segments := l_fund_rec.adjustment_accnt_segments;
5045 END IF;
5046
5047 IF p_fund_rec.short_name = fnd_api.g_miss_char THEN
5048 x_complete_rec.short_name := NULL;
5049 END IF;
5050 IF p_fund_rec.short_name IS NULL THEN
5051 x_complete_rec.short_name := l_fund_rec.short_name;
5052 END IF;
5053
5054 IF p_fund_rec.description = fnd_api.g_miss_char THEN
5055 x_complete_rec.description := NULL;
5056 END IF;
5057 IF p_fund_rec.description IS NULL THEN
5058 x_complete_rec.description := l_fund_rec.description;
5059 END IF;
5060 --08/28/2001 mpande bug#1950117
5061 /*
5062 IF p_fund_rec.language = fnd_api.g_miss_char THEN
5063 x_complete_rec.language := NULL;
5064 END IF;
5065 IF p_fund_rec.language IS NULL THEN
5066 x_complete_rec.language := l_fund_rec.language;
5067 END IF;
5068
5069 IF p_fund_rec.source_lang = fnd_api.g_miss_char THEN
5070 x_complete_rec.source_lang := NULL;
5071 END IF;
5072 IF p_fund_rec.source_lang IS NULL THEN
5073 x_complete_rec.source_lang := l_fund_rec.source_lang;
5074 END IF;
5075 */
5076 IF p_fund_rec.fund_calendar = fnd_api.g_miss_char THEN
5077 x_complete_rec.fund_calendar := NULL;
5078 END IF;
5079 IF p_fund_rec.fund_calendar IS NULL THEN
5080 x_complete_rec.fund_calendar := l_fund_rec.fund_calendar;
5081 END IF;
5082
5083 IF p_fund_rec.start_period_name = fnd_api.g_miss_char THEN
5084 x_complete_rec.start_period_name := NULL;
5085 END IF;
5086 IF p_fund_rec.start_period_name IS NULL THEN
5087 x_complete_rec.start_period_name := l_fund_rec.start_period_name;
5088 END IF;
5089
5090 IF p_fund_rec.end_period_name = fnd_api.g_miss_char THEN
5091 x_complete_rec.end_period_name := NULL;
5092 END IF;
5093 IF p_fund_rec.end_period_name IS NULL THEN
5094 x_complete_rec.end_period_name := l_fund_rec.end_period_name;
5095 END IF;
5096
5097 IF p_fund_rec.accrual_quantity = fnd_api.g_miss_num THEN
5098 x_complete_rec.accrual_quantity := NULL;
5099 END IF;
5100 IF p_fund_rec.accrual_quantity IS NULL THEN
5101 x_complete_rec.accrual_quantity := l_fund_rec.accrual_quantity;
5102 END IF;
5103
5104 IF p_fund_rec.accrue_to_level_id = fnd_api.g_miss_num THEN
5105 x_complete_rec.accrue_to_level_id := NULL;
5106 END IF;
5107 IF p_fund_rec.accrue_to_level_id IS NULL THEN
5108 x_complete_rec.accrue_to_level_id := l_fund_rec.accrue_to_level_id;
5109 END IF;
5110
5111 IF p_fund_rec.accrual_discount_level = fnd_api.g_miss_char THEN
5112 x_complete_rec.accrual_discount_level := NULL;
5113 END IF;
5114 IF p_fund_rec.accrual_discount_level IS NULL THEN
5115 x_complete_rec.accrual_discount_level := l_fund_rec.accrual_discount_level;
5116 END IF;
5117 IF p_fund_rec.custom_setup_id = fnd_api.g_miss_num THEN
5118 x_complete_rec.custom_setup_id := NULL;
5119 END IF;
5120 IF p_fund_rec.custom_setup_id IS NULL THEN
5121 x_complete_rec.custom_setup_id := l_fund_rec.custom_setup_id;
5122 END IF;
5123 IF p_fund_rec.threshold_id = fnd_api.g_miss_num THEN
5124 x_complete_rec.threshold_id := NULL;
5125 END IF;
5126 IF p_fund_rec.threshold_id IS NULL THEN
5127 x_complete_rec.threshold_id := l_fund_rec.threshold_id;
5128 END IF;
5129 IF p_fund_rec.business_unit_id = fnd_api.g_miss_num THEN
5130 x_complete_rec.business_unit_id := NULL;
5131 END IF;
5132 IF p_fund_rec.business_unit_id IS NULL THEN
5133 x_complete_rec.business_unit_id := l_fund_rec.business_unit_id;
5134 END IF;
5135 IF p_fund_rec.task_id = fnd_api.g_miss_num THEN
5136 x_complete_rec.task_id := NULL;
5137 END IF;
5138 IF p_fund_rec.task_id IS NULL THEN
5139 x_complete_rec.task_id := l_fund_rec.task_id;
5140 END IF;
5141 IF p_fund_rec.country_id = fnd_api.g_miss_num THEN
5142 x_complete_rec.country_id := NULL;
5143 END IF;
5144 IF p_fund_rec.country_id IS NULL THEN
5145 x_complete_rec.country_id := l_fund_rec.country_id;
5146 END IF;
5147 -- added by feliu 02/08/2002 for rollup amount columns
5148 IF p_fund_rec.rollup_original_budget = fnd_api.g_miss_num THEN
5149 x_complete_rec.rollup_original_budget := NULL;
5150 END IF;
5151 IF p_fund_rec.rollup_original_budget IS NULL THEN
5152 x_complete_rec.rollup_original_budget := l_fund_rec.rollup_original_budget;
5153 END IF;
5154 IF p_fund_rec.rollup_holdback_amt = fnd_api.g_miss_num THEN
5155 x_complete_rec.rollup_holdback_amt := NULL;
5156 END IF;
5157 IF p_fund_rec.rollup_holdback_amt IS NULL THEN
5158 x_complete_rec.rollup_holdback_amt := l_fund_rec.rollup_holdback_amt;
5159 END IF;
5160 IF p_fund_rec.rollup_transfered_in_amt = fnd_api.g_miss_num THEN
5161 x_complete_rec.rollup_transfered_in_amt := NULL;
5162 END IF;
5163 IF p_fund_rec.rollup_transfered_in_amt IS NULL THEN
5164 x_complete_rec.rollup_transfered_in_amt := l_fund_rec.rollup_transfered_in_amt;
5165 END IF;
5166 IF p_fund_rec.rollup_transfered_out_amt = fnd_api.g_miss_num THEN
5167 x_complete_rec.rollup_transfered_out_amt := NULL;
5168 END IF;
5169 IF p_fund_rec.rollup_transfered_out_amt IS NULL THEN
5170 x_complete_rec.rollup_transfered_out_amt := l_fund_rec.rollup_transfered_out_amt;
5171 END IF;
5172 IF p_fund_rec.rollup_planned_amt = fnd_api.g_miss_num THEN
5173 x_complete_rec.rollup_planned_amt := NULL;
5174 END IF;
5175 IF p_fund_rec.rollup_planned_amt IS NULL THEN
5176 x_complete_rec.rollup_planned_amt := l_fund_rec.rollup_planned_amt;
5177 END IF;
5178 IF p_fund_rec.rollup_committed_amt = fnd_api.g_miss_num THEN
5179 x_complete_rec.rollup_committed_amt := NULL;
5180 END IF;
5181 IF p_fund_rec.rollup_committed_amt IS NULL THEN
5182 x_complete_rec.rollup_committed_amt := l_fund_rec.rollup_committed_amt;
5183 END IF;
5184 -- yzhao: 11.5.10
5185 IF p_fund_rec.rollup_utilized_amt = fnd_api.g_miss_num THEN
5186 x_complete_rec.rollup_utilized_amt := NULL;
5187 END IF;
5188 IF p_fund_rec.rollup_utilized_amt IS NULL THEN
5189 x_complete_rec.rollup_utilized_amt := l_fund_rec.rollup_utilized_amt;
5190 END IF;
5191 IF p_fund_rec.rollup_earned_amt = fnd_api.g_miss_num THEN
5192 x_complete_rec.rollup_earned_amt := NULL;
5193 END IF;
5194 IF p_fund_rec.rollup_earned_amt IS NULL THEN
5195 x_complete_rec.rollup_earned_amt := l_fund_rec.rollup_earned_amt;
5196 END IF;
5197 IF p_fund_rec.rollup_paid_amt = fnd_api.g_miss_num THEN
5198 x_complete_rec.rollup_paid_amt := NULL;
5199 END IF;
5200 IF p_fund_rec.rollup_paid_amt IS NULL THEN
5201 x_complete_rec.rollup_paid_amt := l_fund_rec.rollup_paid_amt;
5202 END IF;
5203 IF p_fund_rec.rollup_recal_committed = fnd_api.g_miss_num THEN
5204 x_complete_rec.rollup_recal_committed := NULL;
5205 END IF;
5206 IF p_fund_rec.rollup_recal_committed IS NULL THEN
5207 x_complete_rec.rollup_recal_committed := l_fund_rec.rollup_recal_committed ;
5208 END IF;
5209 IF p_fund_rec.retroactive_flag = fnd_api.g_miss_char THEN
5210 x_complete_rec.retroactive_flag := NULL;
5211 END IF;
5212 IF p_fund_rec.retroactive_flag IS NULL THEN
5213 x_complete_rec.retroactive_flag := l_fund_rec.retroactive_flag ;
5214 END IF;
5215 IF p_fund_rec.qualifier_id = fnd_api.g_miss_num THEN
5216 x_complete_rec.qualifier_id := NULL;
5217 END IF;
5218 IF p_fund_rec.qualifier_id IS NULL THEN
5219 x_complete_rec.qualifier_id := l_fund_rec.qualifier_id;
5220 END IF;
5221
5222 -- niprakas added
5223 IF p_fund_rec.prev_fund_id = fnd_api.g_miss_num THEN
5224 x_complete_rec.prev_fund_id := NULL;
5225 END IF;
5226 IF p_fund_rec.prev_fund_id IS NULL THEN
5227 x_complete_rec.prev_fund_id := l_fund_rec.prev_fund_id;
5228 END IF;
5229
5230 -- niprakas added
5231
5232 IF p_fund_rec.transfered_flag = fnd_api.g_miss_char THEN
5233 x_complete_rec.transfered_flag := NULL;
5234 END IF;
5235 IF p_fund_rec.transfered_flag IS NULL THEN
5236 x_complete_rec.transfered_flag := l_fund_rec.transfered_flag;
5237 END IF;
5238
5239 -- niprakas added
5240 IF p_fund_rec.utilized_amt = fnd_api.g_miss_num THEN
5241 x_complete_rec.utilized_amt := NULL;
5242 END IF;
5243 IF p_fund_rec.utilized_amt = fnd_api.g_miss_num THEN
5244 x_complete_rec.utilized_amt := l_fund_rec.utilized_amt;
5245 END IF;
5246
5247 -- niprakas added
5248 IF p_fund_rec.rollup_utilized_amt = fnd_api.g_miss_num THEN
5249 x_complete_rec.rollup_utilized_amt := NULL;
5250 END IF;
5251 IF p_fund_rec.rollup_utilized_amt = fnd_api.g_miss_num THEN
5252 x_complete_rec.rollup_utilized_amt := l_fund_rec.rollup_utilized_amt;
5253 END IF;
5254
5255 --kdass added
5256 IF p_fund_rec.product_spread_time_id = fnd_api.g_miss_num THEN
5257 x_complete_rec.product_spread_time_id := NULL;
5258 END IF;
5259 IF p_fund_rec.product_spread_time_id IS NULL THEN
5260 x_complete_rec.product_spread_time_id := l_fund_rec.product_spread_time_id;
5261 END IF;
5262
5263 --kdass - R12 MOAC changes
5264 IF p_fund_rec.org_id = fnd_api.g_miss_num THEN
5265 x_complete_rec.org_id := NULL;
5266 END IF;
5267 IF p_fund_rec.org_id IS NULL THEN
5268 x_complete_rec.org_id := l_fund_rec.org_id;
5269 END IF;
5270
5271 IF p_fund_rec.ledger_id = fnd_api.g_miss_num THEN
5272 x_complete_rec.ledger_id := NULL;
5273 END IF;
5274 IF p_fund_rec.ledger_id IS NULL THEN
5275 x_complete_rec.ledger_id := l_fund_rec.ledger_id;
5276 END IF;
5277
5278 END complete_fund_rec;
5279
5280
5281 -- ADDED FOR R2 Requirements to get default GL info--- by mpande //6th JULY-2000
5282 ---------------------------------------------------------------------
5283 -- PROCEDURE
5284 -- GET_DEFAULT_GL_INFO
5285 --
5286 -- PURPOSE : A fund should always have a category . When creating a category the user can
5287 -- give the GL info 1) ACCRUED_LIABILITY_ACCOUNT 2) DED_ADJUSTMENT_ACCOUNT
5288 -- When the user is creating a fund the funds API should pickup
5289 -- the default GL INFO from the associated category of the fund if the user has not passed anything.
5290 -- This API gets the defauls GL INFO.
5291 -- PARAMETERS
5292 -- p_category_id IN NUMBER,
5293 -- p_accrued_liability_account IN OUT NUMBER -- if null will deafult it otherwise will return whatever was passed
5294 -- p_ded_adjustment_account IN OUT NUMBER,-- if null will deafult it otherwise will return whatever was passed
5295 -- x_return_status OUT VARCHAR2
5296 -- Created by mpande 07/07/2000
5297 ---------------------------------------------------------------------
5298 PROCEDURE complete_default_gl_info(
5299 p_category_id IN NUMBER
5300 ,p_accrued_liability_account IN OUT NOCOPY NUMBER
5301 ,p_ded_adjustment_account IN OUT NOCOPY NUMBER
5302 ,x_return_status OUT NOCOPY VARCHAR2)
5303 IS
5304 CURSOR c_gl_info(
5305 p_cat_id IN NUMBER)
5306 IS
5307 SELECT accrued_liability_account
5308 ,ded_adjustment_account
5309 FROM ams_categories_vl
5310 WHERE category_id = p_cat_id;
5311
5312 l_accrued_liability_account NUMBER;
5313 l_ded_adjustment_account NUMBER;
5314 BEGIN
5315 x_return_status := fnd_api.g_ret_sts_success;
5316 OPEN c_gl_info(p_category_id);
5317 FETCH c_gl_info INTO l_accrued_liability_account, l_ded_adjustment_account;
5318 CLOSE c_gl_info;
5319
5320 --- if p_categroy_id is null then return null----
5321 IF p_category_id IS NULL THEN
5322 x_return_status := fnd_api.g_ret_sts_success;
5323 ELSIF p_category_id IS NOT NULL THEN
5324 IF p_accrued_liability_account IS NULL THEN --if present keep the value else default it
5325 p_accrued_liability_account := l_accrued_liability_account;
5326 END IF;
5327
5328 IF p_ded_adjustment_account IS NULL THEN --if present keep the value else default it
5329 p_ded_adjustment_account := l_ded_adjustment_account;
5330 END IF;
5331 END IF;
5332 EXCEPTION
5333 WHEN OTHERS THEN
5334 x_return_status := fnd_api.g_ret_sts_unexp_error;
5335 END complete_default_gl_info;
5336
5337
5338 -- 14-May-2001 feliu added for copy function.
5339 ---------------------------------------------------------------------
5340 -- PROCEDURE
5341 -- copy_fund
5342 --
5343 -- PURPOSE : -- Copy is broken into 4 sections:
5344 -- - copy all required fields of the object
5345 -- - copy all fields passed in thru the UI, but
5346 -- use the value of the base object if the field
5347 -- isn't passed through the UI
5348 -- - copy all fields passed in thru the UI, but
5349 -- leave the field as null if it isn't passed in
5350 -- - copy all attributes passed in from the UI
5351 -- PARAMETERS
5352 -- p_source_object_id: Original object id,
5353 -- p_attributes_table: AMS_CpyUtility_PVT.copy_attributes_table_type,
5354 -- p_copy_columns_table: AMS_CpyUtility_PVT.copy_columns_table_type,
5355 -- x_new_object_id: New object Id.
5356 -- x_custom_setup_id: custom_setup_id.
5357 ---------------------------------------------------------------------
5358 PROCEDURE copy_fund (
5359 p_api_version IN NUMBER,
5360 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
5361 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5362 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5363 x_return_status OUT NOCOPY VARCHAR2,
5364 x_msg_count OUT NOCOPY NUMBER,
5365 x_msg_data OUT NOCOPY VARCHAR2,
5366 p_source_object_id IN NUMBER,
5367 p_attributes_table IN AMS_CpyUtility_PVT.copy_attributes_table_type,
5368 p_copy_columns_table IN AMS_CpyUtility_PVT.copy_columns_table_type,
5369 x_new_object_id OUT NOCOPY NUMBER,
5370 x_custom_setup_id OUT NOCOPY NUMBER
5371 )
5372 IS
5373 L_API_NAME CONSTANT VARCHAR2(30) := 'copy_fund';
5374 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
5375 L_OBJECT_TYPE_FUND CONSTANT VARCHAR2(30) := 'FUND';
5376 L_FUND_STATUS_TYPE CONSTANT VARCHAR2(30) := 'OZF_FUND_STATUS';
5377 L_DEFAULT_STATUS CONSTANT VARCHAR2(30) := 'DRAFT';
5378 l_return_status VARCHAR2(1);
5379
5380 l_new_fund_id NUMBER;
5381 l_fund_rec fund_rec_type;
5382
5383 -- for non-standard out params in copy_act_access
5384 l_errnum NUMBER;
5385 l_errcode VARCHAR2(30);
5386 l_errmsg VARCHAR2(4000);
5387
5388 CURSOR c_fund (p_fund_id IN NUMBER) IS
5389 SELECT *
5390 FROM ozf_funds_all_vl
5391 WHERE fund_id = p_fund_id
5392 ;
5393 CURSOR c_user_status_id (p_status_type IN VARCHAR2, p_status_code IN VARCHAR2) IS
5394 SELECT user_status_id
5395 FROM ams_user_statuses_b
5396 WHERE system_status_type = p_status_type
5397 AND system_status_code = p_status_code
5398 AND default_flag = 'Y'
5399 AND enabled_flag = 'Y'
5400 ;
5401 l_reference_rec c_fund%ROWTYPE;
5402 l_new_fund_rec c_fund%ROWTYPE;
5403 l_offer_custsetup NUMBER;
5404 l_plan_id NUMBER;
5405 l_attr_table AMS_CpyUtility_PVT.copy_attributes_table_type;
5406 l_copy_columns_table AMS_CpyUtility_PVT.copy_columns_table_type;
5407
5408 -- julou: get custom_setup_id for FAB offer. bug fix for copy offer enhancement
5409 CURSOR c_custom_setup_id(p_obj_id NUMBER) IS
5410 SELECT custom_setup_id
5411 FROM ozf_offers
5412 WHERE qp_list_header_id = p_obj_id;
5413 -- julou: end
5414
5415 BEGIN
5416 -- Standard Start of API savepoint
5417 SAVEPOINT copy_fund;
5418
5419 -- Standard call to check for call compatibility.
5420 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
5421 p_api_version,
5422 l_api_name,
5423 G_PKG_NAME)
5424 THEN
5425 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5426 END IF;
5427
5428 -- Initialize message list if p_init_msg_list is set to TRUE.
5429 IF FND_API.to_Boolean( p_init_msg_list )THEN
5430 FND_MSG_PUB.initialize;
5431 END IF;
5432
5433 IF G_DEBUG THEN
5434 OZF_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' start');
5435 END IF;
5436
5437 -- Initialize API return status to SUCCESS
5438 x_return_status := FND_API.G_RET_STS_SUCCESS;
5439
5440 --
5441 -- Start of API body.
5442 --
5443 -- Initialize the new fund record
5444 -- use ams_cpyutility_pvt.get_column_value to fetch a value
5445 -- to replace the reference column value with a new value
5446 -- passed in from the UI through p_copy_columns_table.
5447 OPEN c_fund (p_source_object_id);
5448 FETCH c_fund INTO l_reference_rec;
5449 CLOSE c_fund;
5450
5451 -- copy all required fields
5452 l_fund_rec.fund_type := l_reference_rec.fund_type;
5453 l_fund_rec.fund_number := null;
5454 l_fund_rec.status_code := L_DEFAULT_STATUS;
5455 l_fund_rec.category_id := l_reference_rec.category_id;
5456 l_fund_rec.currency_code_tc := l_reference_rec.currency_code_tc;
5457
5458 -- 08/13/2004 kdass when the budget has a parent budget, then the original budget amount is 0, so copy budget gives error.
5459 -- l_fund_rec.original_budget := l_reference_rec.original_budget;
5460 l_fund_rec.original_budget := NVL(l_reference_rec.original_budget, 0)
5461 + NVL(l_reference_rec.transfered_in_amt, 0)
5462 - NVL(l_reference_rec.transfered_out_amt, 0);
5463
5464 l_fund_rec.custom_setup_id := l_reference_rec.custom_setup_id;
5465 l_fund_rec.accrual_rate := l_reference_rec.accrual_rate;
5466 l_fund_rec.accrual_basis := l_reference_rec.accrual_basis;
5467 l_fund_rec.country_id := l_reference_rec.country_id;
5468 l_fund_rec.holdback_amt := l_reference_rec.holdback_amt;
5469
5470 -- kdass R12 Bug 4621165 - copy org_id and ledger_id to the new budget
5471 l_fund_rec.org_id := l_reference_rec.org_id;
5472 l_fund_rec.ledger_id := l_reference_rec.ledger_id;
5473
5474 -- 10/22/2001 mpande added to copy all other accrual parameters and not copy org budget for fully accrued
5475 IF l_fund_rec.fund_type = 'FULLY_ACCRUED' THEN
5476 l_fund_rec.original_budget := 0;
5477 l_fund_rec.plan_type := 'OFFR';
5478 END IF;
5479
5480 l_fund_rec.apply_accrual_on := l_reference_rec.apply_accrual_on;
5481 l_fund_rec.accrual_quantity := l_reference_rec.accrual_quantity;
5482 l_fund_rec.retroactive_flag := l_reference_rec.retroactive_flag;
5483 l_fund_rec.qualifier_id := l_reference_rec.qualifier_id;
5484 l_fund_rec.accrue_to_level_id := l_reference_rec.accrue_to_level_id;
5485 l_fund_rec.business_unit_id := l_reference_rec.business_unit_id;
5486 l_fund_rec.accrual_method := l_reference_rec.accrual_method;
5487 l_fund_rec.liability_flag := l_reference_rec.liability_flag;
5488 l_fund_rec.accrual_operand := l_reference_rec.accrual_operand;
5489 l_fund_rec.accrual_discount_level := l_reference_rec.accrual_discount_level;
5490 l_fund_rec.liability_flag := l_reference_rec.liability_flag;
5491 l_fund_rec.accrual_cap := l_reference_rec.accrual_cap;
5492 l_fund_rec.accrual_method := l_reference_rec.accrual_method;
5493
5494 -- 02/05/2003 yzhao fix bug 2788123 MKTF1R9:1159.0204:FUNC:COPY BUDGET THROWING ERROR OZF_ACCRUAL_NO_PHASE
5495 l_fund_rec.accrual_phase := l_reference_rec.accrual_phase;
5496 l_fund_rec.accrual_uom := l_reference_rec.accrual_uom;
5497 -- 02/05/2003 yzhao fix bug 2788123 ends
5498
5499 --asylvia fixed bug 5169099 - Activity copied to new budget.
5500 l_fund_rec.task_id := l_reference_rec.task_id;
5501 --asylvia start bug 5107243
5502 l_fund_rec.parent_fund_id := l_reference_rec.parent_fund_id ;
5503 l_fund_rec.accrued_liable_account := l_reference_rec.accrued_liable_account;
5504 l_fund_rec.ded_adjustment_account := l_reference_rec.ded_adjustment_account;
5505 l_fund_rec.description := l_reference_rec.description;
5506 l_fund_rec.threshold_id := l_reference_rec.threshold_id;
5507 --l_fund_rec.start_period_id:= l_reference_rec.start_period_id;
5508 --l_fund_rec.end_period_id:= l_reference_rec.end_period_id;
5509 --l_fund_rec.end_date_active := NVL (l_fund_rec.end_date_active, l_reference_rec.end_date_active);
5510 l_fund_rec.attribute_category := l_reference_rec.attribute_category;
5511 l_fund_rec.attribute1 := l_reference_rec.attribute1;
5512 l_fund_rec.attribute2 := l_reference_rec.attribute2;
5513 l_fund_rec.attribute3 := l_reference_rec.attribute3;
5514 l_fund_rec.attribute4 := l_reference_rec.attribute4;
5515 l_fund_rec.attribute5 := l_reference_rec.attribute5;
5516 l_fund_rec.attribute6 := l_reference_rec.attribute6;
5517 l_fund_rec.attribute7 := l_reference_rec.attribute7;
5518 l_fund_rec.attribute8 := l_reference_rec.attribute8;
5519 l_fund_rec.attribute9 := l_reference_rec.attribute9;
5520 l_fund_rec.attribute10 := l_reference_rec.attribute10;
5521 l_fund_rec.attribute11 := l_reference_rec.attribute11;
5522 l_fund_rec.attribute12 := l_reference_rec.attribute12;
5523 l_fund_rec.attribute13 := l_reference_rec.attribute13;
5524 l_fund_rec.attribute14 := l_reference_rec.attribute14;
5525 l_fund_rec.attribute15 := l_reference_rec.attribute15;
5526 --asylvia end bug 5107243
5527
5528 OPEN c_user_status_id (L_FUND_STATUS_TYPE, l_fund_rec.status_code);
5529 FETCH c_user_status_id INTO l_fund_rec.user_status_id;
5530 CLOSE c_user_status_id;
5531 l_fund_rec.currency_code_tc := l_reference_rec.currency_code_tc;
5532
5533 -- if field is not passed in from copy_columns_table
5534 -- copy from the base object
5535 AMS_CpyUtility_PVT.get_column_value ('ownerId', p_copy_columns_table, l_fund_rec.owner);
5536 l_fund_rec.owner := NVL (l_fund_rec.owner, l_reference_rec.owner);
5537
5538 AMS_CpyUtility_PVT.get_column_value ('startDate', p_copy_columns_table, l_fund_rec.start_date_active);
5539 l_fund_rec.start_date_active := NVL (l_fund_rec.start_date_active, l_reference_rec.start_date_active);
5540
5541 -- if field is not passed in from copy_columns_table
5542 -- don't copy
5543 AMS_CpyUtility_PVT.get_column_value ('newObjName', p_copy_columns_table, l_fund_rec.short_name);
5544
5545 IF l_fund_rec.fund_type = 'FULLY_ACCRUED' THEN
5546 -- to fix bug 3240787
5547 IF l_fund_rec.parent_fund_id IS NULL THEN
5548 l_fund_rec.fund_number :=
5549 ams_sourcecode_pvt.get_source_code(
5550 p_category_id => l_fund_rec.category_id
5551 ,p_arc_object_for => 'FUND');
5552 ELSE
5553 get_child_source_code(
5554 l_fund_rec.parent_fund_id
5555 ,l_fund_rec.fund_number
5556 ,x_return_status);
5557 IF x_return_status = fnd_api.g_ret_sts_error THEN
5558 RAISE fnd_api.g_exc_error;
5559 ELSIF x_return_status = fnd_api.g_ret_sts_unexp_error THEN
5560 RAISE fnd_api.g_exc_unexpected_error;
5561 END IF;
5562 END IF;
5563 -- to fix bug 3240787
5564
5565 l_attr_table(1) := 'DETL';
5566 l_attr_table(2) := 'ELIG';
5567 l_copy_columns_table(1).column_name := 'offerCode';
5568 l_copy_columns_table(1).column_value := l_fund_rec.fund_number;
5569 l_copy_columns_table(2).column_name := 'startDateActive';
5570 l_copy_columns_table(2).column_value := l_fund_rec.start_date_active;
5571 l_copy_columns_table(3).column_name := 'endDateActive';
5572 l_copy_columns_table(3).column_value := '';
5573 l_copy_columns_table(4).column_name := 'ownerId';
5574 l_copy_columns_table(4).column_value := l_fund_rec.owner;
5575 l_copy_columns_table(5).column_name := 'description';
5576 l_copy_columns_table(5).column_value := '';
5577 l_copy_columns_table(6).column_name :='newObjName';
5578 l_copy_columns_table(6).column_value := l_fund_rec.short_name;
5579
5580 OPEN c_custom_setup_id(l_reference_rec.plan_id);
5581 FETCH c_custom_setup_id INTO l_offer_custsetup;
5582 CLOSE c_custom_setup_id;
5583
5584 --Fix for Bug 13360969
5585 --Doing budget validation before calling copy offer detail to avoid savepoint error as earlier validation was done in Create_Fund
5586 -- after copy offer detail.
5587 --As in copy offer detail copy_discounts is called for pricing where unconditional commit is present causing savepoint never established error.
5588 ----------------------- validate -----------------------
5589 IF G_DEBUG THEN
5590 OZF_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' validate');
5591 END IF;
5592 validate_fund(
5593 p_api_version => l_api_version_number
5594 ,p_init_msg_list => p_init_msg_list
5595 ,p_validation_level => p_validation_level
5596 ,x_return_status => l_return_status
5597 ,x_msg_count => x_msg_count
5598 ,x_msg_data => x_msg_data
5599 ,p_fund_rec => l_fund_rec);
5600
5601
5602 IF l_return_status = fnd_api.g_ret_sts_error THEN
5603 RAISE fnd_api.g_exc_error;
5604 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
5605 RAISE fnd_api.g_exc_unexpected_error;
5606 END IF;
5607 ------------------------------------------------------------
5608 --end 13360969
5609
5610 OZF_COPY_OFFER_PVT.copy_offer_detail(
5611 p_api_version=> 1.0,
5612 p_init_msg_list=> FND_API.G_FALSE,
5613 p_commit=> FND_API.G_FALSE,
5614 p_validation_level=> p_validation_level,
5615 x_return_status=> l_return_status,
5616 x_msg_count=> x_msg_count,
5617 x_msg_data=> x_msg_data,
5618 p_source_object_id => l_reference_rec.plan_id,
5619 p_attributes_table =>l_attr_table,
5620 p_copy_columns_table =>l_copy_columns_table,
5621 x_new_object_id =>l_plan_id,
5622 p_custom_setup_id =>l_offer_custsetup);
5623
5624 l_fund_rec.plan_id := l_plan_id;
5625
5626 IF l_return_status = fnd_api.g_ret_sts_error THEN
5627 RAISE fnd_api.g_exc_error;
5628 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
5629 RAISE fnd_api.g_exc_unexpected_error;
5630 END IF;
5631
5632 END IF;
5633
5634 OZF_Funds_PVT.Create_Fund (
5635 p_api_version => 1.0,
5636 p_init_msg_list => FND_API.G_FALSE,
5637 p_commit => FND_API.G_FALSE,
5638 p_validation_level => p_validation_level,
5639 x_return_status => l_return_status,
5640 x_msg_count => x_msg_count,
5641 x_msg_data => x_msg_data,
5642 p_fund_rec => l_fund_rec,
5643 x_fund_id => l_new_fund_id
5644 );
5645
5646 IF l_return_status = fnd_api.g_ret_sts_error THEN
5647 RAISE fnd_api.g_exc_error;
5648 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
5649 RAISE fnd_api.g_exc_unexpected_error;
5650 END IF;
5651
5652 -- copy market_segments
5653
5654
5655 IF AMS_CpyUtility_PVT.is_copy_attribute ('ELIG', p_attributes_table) = FND_API.G_TRUE THEN
5656
5657 AMS_CopyElements_PVT.copy_act_market_segments (
5658 p_src_act_type => L_OBJECT_TYPE_FUND,
5659 p_new_act_type => L_OBJECT_TYPE_FUND,
5660 p_src_act_id => p_source_object_id,
5661 p_new_act_id => l_new_fund_id,
5662 p_errnum => l_errnum,
5663 p_errcode => l_errcode,
5664 p_errmsg => l_errmsg
5665 );
5666 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5667 RAISE FND_API.G_EXC_ERROR;
5668 END IF;
5669 END IF;
5670
5671 -- copy product
5672 IF AMS_CpyUtility_PVT.is_copy_attribute (AMS_CopyElements_PVT.G_ATTRIBUTE_PROD, p_attributes_table) = FND_API.G_TRUE THEN
5673 AMS_CopyElements_PVT.copy_act_prod(
5674 p_src_act_type => L_OBJECT_TYPE_FUND,
5675 p_new_act_type => L_OBJECT_TYPE_FUND,
5676 p_src_act_id => p_source_object_id,
5677 p_new_act_id => l_new_fund_id,
5678 p_errnum => l_errnum,
5679 p_errcode => l_errcode,
5680 p_errmsg => l_errmsg
5681 );
5682 END IF;
5683
5684 -- currently, only needed to fetch custom_setup_id
5685 -- but can be used to return other values later.
5686 OPEN c_fund (l_new_fund_id);
5687 FETCH c_fund INTO l_new_fund_rec;
5688 CLOSE c_fund;
5689
5690 x_new_object_id := l_new_fund_id;
5691 x_custom_setup_id := l_new_fund_rec.custom_setup_id;
5692 --
5693 -- End of API body.
5694 --
5695
5696 -- Standard check for p_commit
5697 IF FND_API.to_Boolean( p_commit ) THEN
5698 COMMIT WORK;
5699 END IF;
5700
5701
5702 -- Debug Message
5703 IF G_DEBUG THEN
5704 OZF_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' end');
5705 END IF;
5706
5707 -- Standard call to get message count and if count is 1, get message info.
5708 FND_MSG_PUB.Count_And_Get (
5709 p_count => x_msg_count,
5710 p_data => x_msg_data
5711 );
5712 EXCEPTION
5713 WHEN FND_API.G_EXC_ERROR THEN
5714 ROLLBACK TO copy_fund;
5715 x_return_status := FND_API.G_RET_STS_ERROR;
5716 -- Standard call to get message count and if count=1, get the message
5717 FND_MSG_PUB.Count_And_Get (
5718 p_encoded => FND_API.G_FALSE,
5719 p_count => x_msg_count,
5720 p_data => x_msg_data
5721 );
5722 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5723 ROLLBACK TO copy_fund;
5724 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5725 -- Standard call to get message count and if count=1, get the message
5726 FND_MSG_PUB.Count_And_Get (
5727 p_encoded => FND_API.G_FALSE,
5728 p_count => x_msg_count,
5729 p_data => x_msg_data
5730 );
5731 WHEN OTHERS THEN
5732 ROLLBACK TO copy_fund;
5733 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5734 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5735 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5736 END IF;
5737 -- Standard call to get message count and if count=1, get the message
5738 FND_MSG_PUB.Count_And_Get (
5739 p_encoded => FND_API.G_FALSE,
5740 p_count => x_msg_count,
5741 p_data => x_msg_data
5742 );
5743 END copy_fund;
5744
5745
5746 ---------------------------------------------------------------------
5747 -- PROCEDURE
5748 --- update_rollup_amount
5749 --
5750 -- PURPOSE
5751 -- Update rollup columns. added by feliu
5752 --
5753 -- PARAMETERS
5754 -- p_fund_rec fund record.
5755 ---------------------------------------------------------------------
5756
5757 PROCEDURE update_rollup_amount(
5758 p_api_version IN NUMBER
5759 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
5760 ,p_commit IN VARCHAR2 := fnd_api.g_false
5761 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
5762 ,x_return_status OUT NOCOPY VARCHAR2
5763 ,x_msg_count OUT NOCOPY NUMBER
5764 ,x_msg_data OUT NOCOPY VARCHAR2
5765 ,p_fund_rec IN fund_rec_type
5766 ) IS
5767 l_api_version CONSTANT NUMBER := 1.0;
5768 l_api_name CONSTANT VARCHAR2(30)
5769 := 'update_rollup_amount';
5770 l_full_name CONSTANT VARCHAR2(60)
5771 := g_pkg_name || '.' || l_api_name;
5772
5773 --Get all of parent fund through bottom up tree walking.
5774 CURSOR c_parent
5775 IS
5776 SELECT fund_id
5777 ,object_version_number
5778 ,rollup_original_budget
5779 ,rollup_transfered_in_amt
5780 ,rollup_transfered_out_amt
5781 ,rollup_holdback_amt
5782 ,rollup_planned_amt
5783 ,rollup_committed_amt
5784 ,rollup_utilized_amt -- yzhao: 11.5.10
5785 ,rollup_earned_amt
5786 ,rollup_paid_amt
5787 ,rollup_recal_committed
5788 FROM ozf_funds_all_b
5789 connect by prior parent_fund_id =fund_id
5790 start with fund_id = p_fund_rec.fund_id;
5791
5792 BEGIN
5793
5794 -- Standard call to check for call compatibility.
5795 IF NOT FND_API.Compatible_API_Call ( l_api_version,
5796 p_api_version,
5797 l_api_name,
5798 G_PKG_NAME)
5799 THEN
5800 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5801 END IF;
5802
5803 -- Initialize message list if p_init_msg_list is set to TRUE.
5804 IF FND_API.to_Boolean( p_init_msg_list )THEN
5805 FND_MSG_PUB.initialize;
5806 END IF;
5807
5808 IF G_DEBUG THEN
5809 OZF_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' start');
5810 END IF;
5811
5812 -- Initialize API return status to SUCCESS
5813 x_return_status := FND_API.G_RET_STS_SUCCESS;
5814
5815 FOR fund IN c_parent
5816 LOOP
5817 IF fund.fund_id <> p_fund_rec.fund_id THEN
5818
5819 UPDATE ozf_funds_all_b
5820 SET object_version_number = fund.object_version_number + 1
5821 ,rollup_original_budget = NVL(fund.rollup_original_budget,0) + NVL(p_fund_rec.rollup_original_budget,0)
5822 ,rollup_transfered_in_amt = NVL(fund.rollup_transfered_in_amt,0) + NVL(p_fund_rec.rollup_transfered_in_amt,0)
5823 ,rollup_transfered_out_amt = NVL(fund.rollup_transfered_out_amt,0) + NVL(p_fund_rec.rollup_transfered_out_amt,0)
5824 ,rollup_holdback_amt = NVL(fund.rollup_holdback_amt,0) + NVL(p_fund_rec.rollup_holdback_amt,0)
5825 ,rollup_planned_amt = NVL(fund.rollup_planned_amt,0)+ NVL(p_fund_rec.rollup_planned_amt,0)
5826 ,rollup_committed_amt = NVL(fund.rollup_committed_amt,0) + NVL(p_fund_rec.rollup_committed_amt,0)
5827 ,rollup_utilized_amt = NVL(fund.rollup_utilized_amt,0) + NVL(p_fund_rec.rollup_utilized_amt,0) -- yzhao: 11.5.10
5828 ,rollup_earned_amt = NVL(fund.rollup_earned_amt,0) + NVL(p_fund_rec.rollup_earned_amt,0)
5829 ,rollup_paid_amt = NVL(fund.rollup_paid_amt,0) + NVL(p_fund_rec.rollup_paid_amt,0)
5830 ,rollup_recal_committed = NVL(fund.rollup_recal_committed ,0)+ NVL(p_fund_rec.rollup_recal_committed,0)
5831 WHERE fund_id = fund.fund_id
5832 AND object_version_number = fund.object_version_number;
5833
5834 IF (SQL%NOTFOUND) THEN
5835 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
5836 fnd_message.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
5837 fnd_msg_pub.add;
5838 END IF;
5839
5840 RAISE fnd_api.g_exc_error;
5841 END IF;
5842 END IF;
5843 END LOOP;
5844 -------------------- finish --------------------------
5845 fnd_msg_pub.count_and_get(
5846 p_encoded => fnd_api.g_false
5847 ,p_count => x_msg_count
5848 ,p_data => x_msg_data);
5849 IF G_DEBUG THEN
5850 ozf_utility_pvt.debug_message( l_api_name || ': end');
5851 END IF;
5852 EXCEPTION
5853 WHEN fnd_api.g_exc_error THEN
5854 x_return_status := fnd_api.g_ret_sts_error;
5855 fnd_msg_pub.count_and_get(
5856 p_encoded => fnd_api.g_false
5857 ,p_count => x_msg_count
5858 ,p_data => x_msg_data);
5859 WHEN fnd_api.g_exc_unexpected_error THEN
5860 x_return_status := fnd_api.g_ret_sts_unexp_error;
5861 fnd_msg_pub.count_and_get(
5862 p_encoded => fnd_api.g_false
5863 ,p_count => x_msg_count
5864 ,p_data => x_msg_data);
5865 WHEN OTHERS THEN
5866 x_return_status := fnd_api.g_ret_sts_unexp_error;
5867
5868 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
5869 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
5870 END IF;
5871
5872 fnd_msg_pub.count_and_get(
5873 p_encoded => fnd_api.g_false
5874 ,p_count => x_msg_count
5875 ,p_data => x_msg_data);
5876
5877 END update_rollup_amount;
5878
5879 ---------------------------------------------------------------------
5880 -- PROCEDURE
5881 --- update_funds_access
5882 --
5883 -- PURPOSE
5884 -- Update parent funds access. added by feliu
5885 --
5886 -- PARAMETERS
5887 -- p_fund_rec: the fund record.
5888 -- p_mode: the mode for create, and delete.
5889 ---------------------------------------------------------------------
5890
5891 PROCEDURE update_funds_access(
5892 p_api_version IN NUMBER
5893 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_false
5894 ,p_commit IN VARCHAR2 := fnd_api.g_false
5895 ,p_validation_level IN NUMBER := fnd_api.g_valid_level_full
5896 ,x_return_status OUT NOCOPY VARCHAR2
5897 ,x_msg_count OUT NOCOPY NUMBER
5898 ,x_msg_data OUT NOCOPY VARCHAR2
5899 ,p_fund_rec IN fund_rec_type
5900 ,p_mode IN VARCHAR2 := JTF_PLSQL_API.G_CREATE
5901 ) IS
5902
5903 l_api_version CONSTANT NUMBER := 1.0;
5904 l_api_name CONSTANT VARCHAR2(30)
5905 := 'update_funds_access';
5906 l_full_name CONSTANT VARCHAR2(60)
5907 := g_pkg_name || '.' || l_api_name;
5908
5909 l_access_rec ams_access_pvt.access_rec_type;
5910 --l_fund_owner NUMBER;
5911 l_return_status VARCHAR2(1);
5912 l_access_id NUMBER;
5913 l_acc_obj_ver_num NUMBER;
5914 --Get all of parent fund through bottom up tree walking.
5915 CURSOR c_parent
5916 IS
5917 SELECT fund_id,owner
5918 FROM ozf_funds_all_b
5919 connect by prior parent_fund_id =fund_id
5920 start with fund_id = p_fund_rec.fund_id;
5921
5922 CURSOR c_fund_access(
5923 p_fund_id IN NUMBER
5924 ,p_owner_id IN NUMBER)
5925 IS
5926 SELECT activity_access_id
5927 ,object_version_number
5928 FROM ams_act_access
5929 WHERE act_access_to_object_id = p_fund_id
5930 AND arc_act_access_to_object = 'FUND'
5931 AND arc_user_or_role_type = 'USER'
5932 AND user_or_role_id = p_owner_id;
5933 --AND NVL(owner_flag,'N') = 'N' ;
5934
5935
5936 TYPE owner_table_type IS TABLE of NUMBER
5937 INDEX BY BINARY_INTEGER;
5938 l_owner_table owner_table_type;
5939 l_count NUMBER := 1 ;
5940 l_owner_exist BOOLEAN := false;
5941
5942 BEGIN
5943 -- Standard call to check for call compatibility.
5944 IF NOT FND_API.Compatible_API_Call ( l_api_version,
5945 p_api_version,
5946 l_api_name,
5947 G_PKG_NAME)
5948 THEN
5949 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5950 END IF;
5951
5952 -- Initialize message list if p_init_msg_list is set to TRUE.
5953 IF FND_API.to_Boolean( p_init_msg_list )THEN
5954 FND_MSG_PUB.initialize;
5955 END IF;
5956
5957 IF G_DEBUG THEN
5958 OZF_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' start');
5959 END IF;
5960
5961 FOR fund IN c_parent
5962 LOOP
5963 --Remove last level fund.
5964 IF fund.fund_id <> p_fund_rec.fund_id THEN
5965 IF p_mode = 'CREATE' THEN
5966 --check if access has been created for same owner at children level.
5967 FOR i IN NVL(l_owner_table.FIRST, 0)..NVL(l_owner_table.LAST, 0) LOOP
5968 EXIT WHEN l_owner_table.COUNT = 0;
5969 IF l_owner_table(i) = fund.owner THEN
5970 l_owner_exist := true;
5971 END IF;
5972 END LOOP;
5973
5974 --if the owner of the parent and child fund is different then only add access
5975 IF l_owner_exist = false AND fund.owner <> p_fund_rec.owner THEN
5976 --added owner to owner table to avoide creating another access next time.
5977 l_owner_table(l_count) := fund.owner;
5978 l_count := l_count + 1;
5979
5980 l_access_rec.act_access_to_object_id := p_fund_rec.fund_id;
5981 l_access_rec.arc_act_access_to_object := 'FUND';
5982 l_access_rec.user_or_role_id := fund.owner;
5983 l_access_rec.arc_user_or_role_type := 'USER';
5984 l_access_rec.admin_flag := 'Y';
5985 l_access_rec.owner_flag := 'Y';
5986 ams_access_pvt.create_access(
5987 p_api_version => l_api_version
5988 ,p_init_msg_list => fnd_api.g_false
5989 ,p_validation_level => p_validation_level
5990 ,x_return_status => l_return_status
5991 ,x_msg_count => x_msg_count
5992 ,x_msg_data => x_msg_data
5993 ,p_commit => fnd_api.g_false
5994 ,p_access_rec => l_access_rec
5995 ,x_access_id => l_access_id);
5996
5997 --l_return_status := fnd_api.g_ret_sts_error;
5998 IF l_return_status = fnd_api.g_ret_sts_error THEN
5999 RAISE fnd_api.g_exc_error;
6000 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
6001 RAISE fnd_api.g_exc_unexpected_error;
6002 END IF;
6003 END IF;
6004 ELSE -- end create access mode.
6005
6006 OPEN c_fund_access(p_fund_rec.fund_id, fund.owner);
6007 FETCH c_fund_access INTO l_access_id, l_acc_obj_ver_num;
6008 CLOSE c_fund_access;
6009 l_access_rec.activity_access_id := l_access_id;
6010 l_access_rec.object_version_number := l_acc_obj_ver_num;
6011
6012 IF fund.owner <>p_fund_rec.owner AND l_access_rec.activity_access_id is NOT NULL THEN
6013 ams_access_pvt.delete_access(
6014 p_api_version => l_api_version
6015 ,p_init_msg_list => fnd_api.g_false
6016 ,p_validation_level => p_validation_level
6017 ,x_return_status => l_return_status
6018 ,x_msg_count => x_msg_count
6019 ,x_msg_data => x_msg_data
6020 ,p_commit => fnd_api.g_false
6021 ,p_access_id => l_access_id
6022 ,p_object_version => l_acc_obj_ver_num);
6023
6024 IF l_return_status = fnd_api.g_ret_sts_error THEN
6025 RAISE fnd_api.g_exc_error;
6026 ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
6027 RAISE fnd_api.g_exc_unexpected_error;
6028 END IF;
6029 END IF; -- end of l_access_rec.activity_access_id is NOT NULL
6030
6031 END IF; -- end delete access mode.
6032 END IF;
6033 END LOOP;
6034 -------------------- finish --------------------------
6035 fnd_msg_pub.count_and_get(
6036 p_encoded => fnd_api.g_false
6037 ,p_count => x_msg_count
6038 ,p_data => x_msg_data);
6039 IF G_DEBUG THEN
6040 ozf_utility_pvt.debug_message( l_api_name ||': end');
6041 END IF;
6042
6043 EXCEPTION
6044 WHEN fnd_api.g_exc_error THEN
6045 x_return_status := fnd_api.g_ret_sts_error;
6046 fnd_msg_pub.count_and_get(
6047 p_encoded => fnd_api.g_false
6048 ,p_count => x_msg_count
6049 ,p_data => x_msg_data);
6050 WHEN fnd_api.g_exc_unexpected_error THEN
6051 x_return_status := fnd_api.g_ret_sts_unexp_error;
6052 fnd_msg_pub.count_and_get(
6053 p_encoded => fnd_api.g_false
6054 ,p_count => x_msg_count
6055 ,p_data => x_msg_data);
6056 WHEN OTHERS THEN
6057 x_return_status := fnd_api.g_ret_sts_unexp_error;
6058
6059 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6060 fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
6061 END IF;
6062
6063 fnd_msg_pub.count_and_get(
6064 p_encoded => fnd_api.g_false
6065 ,p_count => x_msg_count
6066 ,p_data => x_msg_data);
6067
6068 END update_funds_access;
6069
6070 END Ozf_funds_pvt;
6071