1 PACKAGE BODY FA_GROUP_RECLASS2_PVT AS
2 /* $Header: FAVGRECB.pls 120.71.12020000.2 2013/03/02 19:22:26 dvjoshi ship $ */
3
4 g_release number := fa_cache_pkg.fazarel_release;
5
6 TYPE num_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7 TYPE date_tbl IS TABLE OF DATE INDEX BY BINARY_INTEGER;
8 TYPE v30_tbl IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
9
10 FUNCTION do_group_reclass
11 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
12 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
13 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
14 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
15 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
16 px_src_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
17 px_src_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
18 p_src_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
19 p_src_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
20 p_src_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
21 px_dest_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
22 px_dest_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
23 p_dest_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
24 p_dest_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
25 p_dest_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
26 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
27 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
28 p_asset_fin_rec_new IN FA_API_TYPES.asset_fin_rec_type,
29 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type,
30 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
31 p_asset_deprn_rec_new IN FA_API_TYPES.asset_deprn_rec_type,
32 px_group_reclass_options_rec IN OUT NOCOPY FA_API_TYPES.group_reclass_options_rec_type,
33 p_period_rec IN FA_API_TYPES.period_rec_type,
34 p_mrc_sob_type_code IN VARCHAR2,
35 p_calling_fn IN VARCHAR2
36 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
37
38
39 l_src_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
40 l_src_asset_desc_rec fa_api_types.asset_desc_rec_type;
41 l_src_asset_type_rec fa_api_types.asset_type_rec_type;
42 l_src_asset_cat_rec fa_api_types.asset_cat_rec_type;
43 l_src_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
44 l_src_asset_fin_rec_adj fa_api_types.asset_fin_rec_type;
45 l_src_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
46 l_src_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
47 l_src_asset_deprn_rec_adj fa_api_types.asset_deprn_rec_type;
48 l_src_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
49
50 l_dest_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
51 l_dest_asset_desc_rec fa_api_types.asset_desc_rec_type;
52 l_dest_asset_type_rec fa_api_types.asset_type_rec_type;
53 l_dest_asset_cat_rec fa_api_types.asset_cat_rec_type;
54 l_dest_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
55 l_dest_asset_fin_rec_adj fa_api_types.asset_fin_rec_type;
56 l_dest_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
57 l_dest_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
58 l_dest_asset_deprn_rec_adj fa_api_types.asset_deprn_rec_type;
59 l_dest_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
60
61 l_inv_trans_rec fa_api_types.inv_trans_rec_type;
62 l_null_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
63
64 l_transaction_date date;
65 l_group_reclass_code varchar2(20);
66
67 l_trx_reference_id number;
68 l_return_status boolean;
69 l_rowid varchar2(200);
70
71 l_calling_fn VARCHAR2(35) := 'fa_group_reclass_pvt.do_grp_reclass';
72
73 -- BUG# 6936546
74 l_api_version NUMBER := 1.0;
75 l_init_msg_list VARCHAR2(1) := FND_API.G_FALSE;
76 l_commit VARCHAR2(1) := FND_API.G_FALSE;
77 l_validation_level NUMBER := FND_API.G_VALID_LEVEL_NONE;
78 l_return_status2 VARCHAR2(1);
79 l_msg_count NUMBER;
80 l_msg_data VARCHAR2(2000);
81 l_trans_rec FA_API_TYPES.trans_rec_type;
82 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type :=
83 p_asset_hdr_rec;
84 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
85
86 l_distribution_id num_tbl;
87 l_units_assigned num_tbl;
88 l_code_combination_id num_tbl;
89 l_location_id num_tbl;
90 l_assigned_to num_tbl;
91
92 l_transfer_amount NUMBER;
93 l_reserve_amt NUMBER;
94
95 cursor c_member_dists (p_asset_id number) is
96 select distribution_id,
97 units_assigned,
98 code_combination_id,
99 location_id,
100 assigned_to
101 from fa_distribution_history
102 where asset_id = p_asset_id
103 and transaction_header_id_out is null;
104
105 --Bug6987743: Getting previously transfered reserve
106 cursor c_get_reserve is
107 select nvl(reserve_transfer_amount, 0)
108 from fa_trx_references
109 where dest_asset_id = l_src_asset_hdr_rec.asset_id
110 and member_asset_id = p_asset_hdr_rec.asset_id
111 and book_type_code = p_asset_hdr_rec.book_type_code
112 order by trx_reference_id desc;
113
114
115 -- used for faxinaj calls
116 l_rsv_adj FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
117
118 grp_rec_err exception;
119
120
121 BEGIN
122
123 fa_debug_pkg.add(l_calling_fn, 'src exp amount', px_group_reclass_options_rec.source_exp_amount, p_log_level_rec => p_log_level_rec);
124 fa_debug_pkg.add(l_calling_fn, 'dest exp amount', px_group_reclass_options_rec.destination_exp_amount, p_log_level_rec => p_log_level_rec);
125 fa_debug_pkg.add(l_calling_fn, 'reserve amount', px_group_reclass_options_rec.reserve_amount, p_log_level_rec => p_log_level_rec);
126 fa_debug_pkg.add(l_calling_fn, 'p_trans_rec.amort_start_date', p_trans_rec.amortization_start_date, p_log_level_rec => p_log_level_rec);
127
128 -- note that adjustments to both expense and reserve will be handled
129 -- here in and not in the adjustment api/calc engine (via faadjust)
130 -- note this code will be bypassed by a cominbation of the following:
131 --
132 -- trx_type = 'GROUP RECLASS'
133 -- trx_subtype = ''
134 --
135
136 -- note that we need to investigate / determine transaction subtype and track member impacts!!!!
137 -- including merging this into the adjustment API
138 --
139 -- how to handle amort start / trx_date , etc on the member in all three scenarios
140 -- - the transaction date currently must be equal among all three
141 -- - validate / prevent it exceeding the dpis of member and or group
142 -- - should be able to "expense" the adjustment on the member when
143 -- pulling it out of a group (per last discussion on UI)
144 -- thus when amort comes in as expense, we need to
145 -- set to amort for group leave as expensed for member
146
147
148 -- use this
149 -- *** VERIFY THE TWO GROUP TRX APP CALLS - they may too expensive
150 -- though some form of locking is required ***
151 -- now doen in the calling public api
152
153 -- verify a change in group is occurring / otherwise error out
154 -- store the "reclass code" for easy reference at various
155 -- points in the api
156 if (p_log_level_rec.statement_level) then
157 fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_old.group_asset_id', p_asset_fin_rec_old.group_asset_id, p_log_level_rec => p_log_level_rec);
158 fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_adj.group_asset_id', p_asset_fin_rec_adj.group_asset_id, p_log_level_rec => p_log_level_rec);
159 fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_new.group_asset_id', p_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
160 end if;
161
162
163 if (nvl(p_asset_fin_rec_old.group_asset_id, -99) = nvl(p_asset_fin_rec_new.group_asset_id, -99)) then
164
165 raise grp_rec_err;
166 elsif (p_asset_fin_rec_old.group_asset_id is not null and
167 p_asset_fin_rec_new.group_asset_id is not null) then
168 l_group_reclass_code := 'GRP-GRP';
169 elsif (p_asset_fin_rec_old.group_asset_id is not null) then
170 l_group_reclass_code := 'GRP-NONE';
171 else
172 l_group_reclass_code := 'NONE-GRP';
173 end if;
174
175 if (p_log_level_rec.statement_level) then
176 fa_debug_pkg.add(l_calling_fn, 'reclass code', l_group_reclass_code, p_log_level_rec => p_log_level_rec);
177 end if;
178
179 -- validate intercompany impacts before doing anything else
180 if (l_group_reclass_code <> 'GRP-NONE' and
181 nvl(fa_cache_pkg.fazcbc_record.allow_interco_group_flag, 'N') <> 'Y') then
182
183 if not fa_interco_pvt.validate_grp_interco
184 (p_asset_hdr_rec => p_asset_hdr_rec,
185 p_trans_rec => p_trans_rec,
186 p_asset_type_rec => p_asset_type_rec,
187 p_group_asset_id => px_dest_asset_hdr_rec.asset_id,
188 p_asset_dist_tbl => l_null_dist_tbl,
189 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
190 raise grp_rec_err;
191 end if;
192 end if;
193
194 -- do not allow reclasses from or to none in conjunction with manual amounts
195 -- this is still questionable - refernece open issues as we could
196 -- do this by performing two calculations/insert branches:
197 -- 1) inserting the manual amount
198 -- 2) taking the difference between oracle's calc and the entered amount
199 --
200 -- this would allow the effective "backdating" of a group reclass
201 -- where the amount entered is < reserve (NONE->GRP)
202
203
204 -- if ((l_group_reclass_code = 'GRP-NONE' or l_group_reclass_code = 'NONE-GRP') and
205 -- (p_group_reclass_options_rec.group_reclass_type = 'MANUAL-EXP' or
206 -- p_group_reclass_options_rec.group_reclass_type = 'MANUAL-RES')) then
207 -- raise grp_rec_err;
208 -- end if;
209
210 -- Do not allow amort date is not either DPIS of member asset to be reclassified
211 -- or current date in case of the group asset id defined as Year End Balance
212 -- Method.
213
214 -- For Source Group
215 -- Populate Subtract Ytd Flag
216 if not fa_cache_pkg.fazccmt(X_method => p_asset_fin_rec_old.deprn_method_code,
217 X_life => p_asset_fin_rec_old.life_in_months, p_log_level_rec => p_log_level_rec) then
218 raise grp_rec_err;
219 end if;
220
221 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' and
222 p_trans_rec.amortization_start_date <> p_asset_fin_rec_old.date_placed_in_service and
223 p_trans_rec.amortization_start_date < p_period_rec.calendar_period_open_date then
224 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
225 name => '***FA_AMORT_DATE_SUB***',
226 p_log_level_rec => p_log_level_rec);
227 return false;
228 raise grp_rec_err;
229 end if;
230
231 -- For Target Group
232 -- Populate Subtract Ytd Flag
233 if not fa_cache_pkg.fazccmt(X_method => p_asset_fin_rec_new.deprn_method_code,
234 X_life => p_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec) then
235 raise grp_rec_err;
236 end if;
237
238 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' and
239 p_trans_rec.amortization_start_date <> p_asset_fin_rec_old.date_placed_in_service and
240 p_trans_rec.amortization_start_date < p_period_rec.calendar_period_open_date then
241 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
242 name => '***FA_AMORT_DATE_SUB***',
243 p_log_level_rec => p_log_level_rec);
244 raise grp_rec_err;
245 end if;
246
247 -- now process the group(s) and or deprn / reserve impacts
248 --
249 -- open issues in terms of sequence when you are combining
250 -- a cost change with a change in group in the same transaction
251 --
252 -- option1: backout old.cost only
253 -- option2: perform adj for cost change, then backout the total new cost
254
255 -- Bug#3737670
256 -- get the old fin and deprn information of destination group
257
258 if (p_log_level_rec.statement_level) then
259 fa_debug_pkg.add(l_calling_fn, 'px_dest_asset_hdr_rec.asset_id:book_type_code',px_dest_asset_hdr_rec.asset_id||':'||
260 px_dest_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
261 end if;
262
263 if l_group_reclass_code <> 'GRP-NONE' then
264 if not FA_UTIL_PVT.get_asset_fin_rec
265 (p_asset_hdr_rec => px_dest_asset_hdr_rec,
266 px_asset_fin_rec => l_dest_asset_fin_rec_old,
267 p_transaction_header_id => NULL,
268 p_mrc_sob_type_code => p_mrc_sob_type_code
269 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
270 end if;
271 end if;
272
273
274 ------------
275 -- SOURCE --
276 ------------
277
278 if (p_log_level_rec.statement_level) then
279 fa_debug_pkg.add(l_calling_fn, 'processing','source asset', p_log_level_rec => p_log_level_rec);
280 end if;
281
282 -- For Source Group
283 -- Populate Subtract Ytd Flag
284 if not fa_cache_pkg.fazccmt(X_method => p_asset_fin_rec_old.deprn_method_code,
285 X_life => p_asset_fin_rec_old.life_in_months, p_log_level_rec => p_log_level_rec) then
286 raise grp_rec_err;
287 end if;
288
289
290 -- If the asset was moved out of a group, deduct the asset's cost from the old group
291 if p_asset_fin_rec_old.group_asset_id is not null then
292
293 if (p_log_level_rec.statement_level) then
294 fa_debug_pkg.add(l_calling_fn, 'source is','group', p_log_level_rec => p_log_level_rec);
295 end if;
296
297 l_src_asset_hdr_rec := px_src_asset_hdr_rec;
298 l_src_asset_desc_rec := p_src_asset_desc_rec;
299 l_src_asset_type_rec := p_src_asset_type_rec;
300 l_src_asset_cat_rec := p_src_asset_cat_rec;
301
302 -- load the delta cost for the group with the -ve cost of the member
303 -- NOTE: iniital test we'll use the od cost and not increment the
304 -- source group's cost first in the case of a combo cost/reclass
305
306 if (p_asset_type_rec.asset_type = 'CIP') then
307 l_src_asset_fin_rec_adj.cost := -(p_asset_fin_rec_old.cost - p_asset_fin_rec_old.cip_cost);
308 l_src_asset_fin_rec_adj.cip_cost := -p_asset_fin_rec_old.cip_cost;
309 else
310 l_src_asset_fin_rec_adj.cost := -p_asset_fin_rec_old.cost;
311 end if;
312
313 if (p_mrc_sob_type_code <> 'R') then
314
315 -- set up the group recs
316 px_src_trans_rec := p_trans_rec;
317 px_src_trans_rec.member_transaction_header_id := p_trans_rec.transaction_header_id;
318 px_src_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
319 px_src_trans_rec.member_transaction_header_id := p_trans_rec.transaction_header_id;
320 px_src_trans_rec.transaction_subtype := 'AMORTIZED';
321 px_src_trans_rec.transaction_key := 'GC';
322
323 if (p_trans_rec.amortization_start_date is not null) then
324 px_src_trans_rec.transaction_date_entered := p_trans_rec.amortization_start_date;
325 end if;
326
327 select fa_transaction_headers_s.nextval
328 into px_src_trans_rec.transaction_header_id
329 from dual;
330
331 end if;
332
333 -- get the old fin and deprn information
334 if not FA_UTIL_PVT.get_asset_fin_rec
335 (p_asset_hdr_rec => px_src_asset_hdr_rec,
336 px_asset_fin_rec => l_src_asset_fin_rec_old,
337 p_transaction_header_id => NULL,
338 p_mrc_sob_type_code => p_mrc_sob_type_code
339 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
340 end if;
341 /* Bug#8640802 */
342 if nvl(l_src_asset_fin_rec_old.member_rollup_flag,'N') = 'Y' and px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
343 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
344 name => 'FA_INVALID_RECLASS_TRX',
345 p_log_level_rec => p_log_level_rec);
346 raise grp_rec_err;
347 end if;
348 --HH Validate disabled_flag
349 --Reject transaction if src group is disabled
350 if not FA_ASSET_VAL_PVT.validate_disabled_flag
351 (p_group_asset_id => l_src_asset_fin_rec_old.group_asset_id,
352 p_book_type_code => px_src_asset_hdr_rec.book_type_code,
353 p_old_flag => l_src_asset_fin_rec_old.disabled_flag,
354 p_new_flag => l_src_asset_fin_rec_old.disabled_flag
355 , p_log_level_rec => p_log_level_rec) then
356 raise grp_rec_err;
357 end if; --End HH
358
359 if not FA_UTIL_PVT.get_asset_deprn_rec
360 (p_asset_hdr_rec => px_src_asset_hdr_rec,
361 px_asset_deprn_rec => l_src_asset_deprn_rec_old,
362 p_period_counter => NULL,
363 p_mrc_sob_type_code => p_mrc_sob_type_code
364 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
365 end if;
366
367 -- If the deprn basis rule is defined as Year End Balance type,
368 -- new adjusted cost must be calculated based on the entered eofy_reserve
369 -- Need to set adj.eofy_reserve
370 -- if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
371 l_src_asset_fin_rec_adj.eofy_reserve := (-1)*nvl(px_group_reclass_options_rec.source_eofy_reserve,0);
372 -- end if;
373
374 if (p_log_level_rec.statement_level) then
375 fa_debug_pkg.add(l_calling_fn, 'l_src_asset_fin_rec_old.eofy_reserve',
376 l_src_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
377 fa_debug_pkg.add(l_calling_fn, 'l_src_asset_fin_rec_adj.eofy_reserve',
378 l_src_asset_fin_rec_adj.eofy_reserve, p_log_level_rec => p_log_level_rec);
379 end if;
380
381 -- now process the adjustment on the group
382 -- raf / adjusted_cost to be updated later
383
384 if (p_log_level_rec.statement_level) then
385 fa_debug_pkg.add(l_calling_fn, 'source is','group', p_log_level_rec => p_log_level_rec);
386 end if;
387
388
389 if (p_log_level_rec.statement_level) then
390 fa_debug_pkg.add(l_calling_fn, 'amort start date2',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
391 fa_debug_pkg.add(l_calling_fn, 'amort start date2a',px_src_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
392 end if;
393
394 --
395 -- Initialize Member Tables
396 --
397 FA_AMORT_PVT.initMemberTable;
398
399 --
400 -- Bug3537474: pass reserve entered by user to pass it to faxama.
401 --
402 if px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
403 l_src_asset_deprn_rec_adj.deprn_reserve := -1 * px_group_reclass_options_rec.reserve_amount;
404 l_reserve_amt := px_group_reclass_options_rec.reserve_amount;
405 --Bug6987743:Following make sure to pass reserve transfered to faxama so
406 --that previously transferred amount will be taken out form Books Summary table.
407 elsif px_group_reclass_options_rec.group_reclass_type = 'CALC' and
408 (l_src_asset_fin_rec_old.tracking_method = 'ALLOCATE' or
409 (l_src_asset_fin_rec_old.tracking_method = 'CALCULATE' and
410 nvl(l_src_asset_fin_rec_old.member_rollup_flag, 'N') = 'N')) then
411
412 /*Bug 8814747 added this condition for Energy methods amortization date is always current period.
413 So we are calculating the reserve in bsRecalculate. Not required to pass from here.*/
414 if (not(fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE' and
415 l_src_asset_fin_rec_old.tracking_method = 'ALLOCATE')) then
416 OPEN c_get_reserve;
417 FETCH c_get_reserve INTO l_transfer_amount;
418 CLOSE c_get_reserve;
419
420 l_src_asset_deprn_rec_adj.deprn_reserve := -1 * nvl(l_transfer_amount, 0);
421
422 if (p_log_level_rec.statement_level) then
423 fa_debug_pkg.add(l_calling_fn, 'Getting previously transferred rsv', l_transfer_amount , p_log_level_rec => p_log_level_rec);
424 fa_debug_pkg.add(l_calling_fn, 'l_src_asset_deprn_rec_adj.deprn_reserve', l_src_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
425 end if;
426 end if;
427 l_reserve_amt := p_asset_deprn_rec_old.deprn_reserve;
428 end if;
429 /*Bug# 8527619 */
430 if p_mrc_sob_type_code <> 'R' then
431 if not FA_ASSET_VAL_PVT.validate_over_depreciation
432 (p_asset_hdr_rec => px_src_asset_hdr_rec,
433 p_asset_fin_rec => p_asset_fin_rec_old,
434 p_validation_type => 'RECLASS_SOURCE',
435 p_cost_adj => p_asset_fin_rec_old.cost,
436 p_rsv_adj => l_reserve_amt,
437 p_log_level_rec => p_log_level_rec) then
438 raise grp_rec_err;
439 end if;
440 end if;
441
442 if not FA_ADJUSTMENT_PVT.do_adjustment
443 (px_trans_rec => px_src_trans_rec,
444 px_asset_hdr_rec => px_src_asset_hdr_rec,
445 p_asset_desc_rec => p_src_asset_desc_rec,
446 p_asset_type_rec => p_src_asset_type_rec,
447 p_asset_cat_rec => p_src_asset_cat_rec,
448 p_asset_fin_rec_old => l_src_asset_fin_rec_old,
449 p_asset_fin_rec_adj => l_src_asset_fin_rec_adj,
450 x_asset_fin_rec_new => l_src_asset_fin_rec_new,
451 p_inv_trans_rec => l_inv_trans_rec,
452 p_asset_deprn_rec_old => l_src_asset_deprn_rec_old,
453 p_asset_deprn_rec_adj => l_src_asset_deprn_rec_adj,
454 x_asset_deprn_rec_new => l_src_asset_deprn_rec_new,
455 p_period_rec => p_period_rec,
456 p_reclassed_asset_id => p_asset_hdr_rec.asset_id,
457 p_reclass_src_dest => 'SOURCE',
458 p_reclassed_asset_dpis => p_asset_fin_rec_old.date_placed_in_service,
459 p_mrc_sob_type_code => p_mrc_sob_type_code,
460 p_group_reclass_options_rec => px_group_reclass_options_rec,
461 p_calling_fn => l_calling_fn
462 , p_log_level_rec => p_log_level_rec) then
463 raise grp_rec_err;
464 end if; -- do_adjustment
465
466
467 if px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
468
469 -- BUG# 2683922, issue #2
470 -- delete any expense rows taken in the above call from
471 -- calc_fin_info. currently, there's no easy way to
472 -- distinguish whether the group adjustment was from
473 -- a group reclass / member adjustment, etc inside
474 -- calc_fin_info when calling faxama/faxiat
475
476 if (p_mrc_sob_type_code = 'R') then
477 delete from fa_mc_adjustments
478 where asset_id = px_src_asset_hdr_rec.asset_id
479 and book_type_code = px_src_asset_hdr_rec.book_type_code
480 and transaction_header_id = px_src_trans_rec.transaction_header_id
481 and adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
482 and source_type_code = 'DEPRECIATION'
483 and set_of_books_id = px_src_asset_hdr_rec.set_of_books_id;
484 else
485 delete from fa_adjustments
486 where asset_id = px_src_asset_hdr_rec.asset_id
487 and book_type_code = px_src_asset_hdr_rec.book_type_code
488 and transaction_header_id = px_src_trans_rec.transaction_header_id
489 and adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
490 and source_type_code = 'DEPRECIATION';
491 end if;
492 end if;
493
494 if (p_log_level_rec.statement_level) then
495 fa_debug_pkg.add(l_calling_fn, 'amort start date2.5',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
496 fa_debug_pkg.add(l_calling_fn, 'amort start date2.5a',px_src_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
497 fa_debug_pkg.add(l_calling_fn, 'l_src_asset_fin_rec_new.eofy_reserve',l_src_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
498 end if;
499
500 l_src_asset_deprn_rec_new := l_src_asset_deprn_rec_old;
501
502 else -- asset was originally standalone
503
504 if (p_log_level_rec.statement_level) then
505 fa_debug_pkg.add(l_calling_fn, 'source is','standalone', p_log_level_rec => p_log_level_rec);
506 end if;
507
508
509 -- whether expense or reserve transfer, amount must be set to
510 -- the current reserve balance in order to remove all balances
511 -- from the memeber asset (i.e. ignore calc / manual) this is
512 -- done internally inside the private api
513
514
515 -- set the main structs equal to member if asset was
516 -- originally standalone
517
518 px_src_trans_rec := p_trans_rec;
519 l_src_asset_hdr_rec := p_asset_hdr_rec;
520 l_src_asset_desc_rec := p_asset_desc_rec;
521 l_src_asset_type_rec := p_asset_type_rec;
522 l_src_asset_cat_rec := p_asset_cat_rec;
523 l_src_asset_fin_rec_new := p_asset_fin_rec_old; -- NOTE: using old here
524 l_src_asset_deprn_rec_new := p_asset_deprn_rec_old;
525
526 end if;
527
528 px_src_trans_rec.amortization_start_date := p_trans_rec.amortization_start_date;
529
530 if (p_log_level_rec.statement_level) then
531 fa_debug_pkg.add(l_calling_fn, 'fin_rec_new.deprn_method',l_src_asset_fin_rec_new.deprn_method_code, p_log_level_rec => p_log_level_rec);
532 fa_debug_pkg.add(l_calling_fn, 'fin_rec_new.eofy_reserve',l_src_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
533 fa_debug_pkg.add(l_calling_fn, 'fin_rec_old.eofy_reserve',l_src_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
534 fa_debug_pkg.add(l_calling_fn, 'amort start date3',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
535 fa_debug_pkg.add(l_calling_fn, 'amort start date3a',px_src_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
536 fa_debug_pkg.add(l_calling_fn, 'destination tracking method',l_dest_asset_fin_rec_old.tracking_method, p_log_level_rec => p_log_level_rec);
537 end if;
538
539 -- If the asset was moved out of a group, deduct the asset's cost from the old group
540 if (l_src_asset_type_rec.asset_type <> 'GROUP' and
541 nvl(l_dest_asset_fin_rec_old.tracking_method,'NONE') <> 'CALCULATE') or
542 px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
543 if not FA_GROUP_RECLASS2_PVT.do_adjustment
544 (px_trans_rec => px_src_trans_rec,
545 p_asset_hdr_rec => l_src_asset_hdr_rec,
546 p_asset_desc_rec => l_src_asset_desc_rec,
547 p_asset_type_rec => l_src_asset_type_rec,
548 p_asset_cat_rec => l_src_asset_cat_rec,
549 p_asset_fin_rec_old => l_src_asset_fin_rec_old,
550 p_asset_fin_rec_new => l_src_asset_fin_rec_new,
551 p_asset_deprn_rec_old => l_src_asset_deprn_rec_new,
552 p_mem_asset_hdr_rec => p_asset_hdr_rec,
553 p_mem_asset_desc_rec => p_asset_desc_rec,
554 p_mem_asset_type_rec => p_asset_type_rec,
555 p_mem_asset_cat_rec => p_asset_cat_rec,
556 p_mem_asset_fin_rec_new => p_asset_fin_rec_old,
557 p_mem_asset_deprn_rec_new => p_asset_deprn_rec_old,
558 px_group_reclass_options_rec => px_group_reclass_options_rec,
559 p_period_rec => p_period_rec,
560 p_mrc_sob_type_code => p_mrc_sob_type_code,
561 p_src_dest => 'SOURCE'
562 , p_log_level_rec => p_log_level_rec) then
563 raise grp_rec_err;
564 end if;
565
566 if (p_log_level_rec.statement_level) then
567 fa_debug_pkg.add(l_calling_fn, 'amort start date4',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
568 fa_debug_pkg.add(l_calling_fn, 'amort start date4a',px_src_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
569 end if;
570 end if;
571
572 -----------------
573 -- DESTINATION --
574 -----------------
575
576 if (p_log_level_rec.statement_level) then
577 fa_debug_pkg.add(l_calling_fn, 'processing','detination asset', p_log_level_rec => p_log_level_rec);
578 end if;
579
580 -- For Source Group
581 -- Populate Subtract Ytd Flag
582 if not fa_cache_pkg.fazccmt(X_method => p_asset_fin_rec_new.deprn_method_code,
583 X_life => p_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec) then
584 raise grp_rec_err;
585 end if;
586
587 -- If the asset was moved into a group, add the asset's cost to the new group
588 if p_asset_fin_rec_new.group_asset_id is not null then
589
590 if (p_log_level_rec.statement_level) then
591 fa_debug_pkg.add(l_calling_fn, 'processing dest as ','group', p_log_level_rec => p_log_level_rec);
592 end if;
593
594 l_dest_asset_hdr_rec := px_dest_asset_hdr_rec;
595 l_dest_asset_desc_rec := p_dest_asset_desc_rec;
596 l_dest_asset_type_rec := p_dest_asset_type_rec;
597 l_dest_asset_cat_rec := p_dest_asset_cat_rec;
598
599 -- load the delta cost for the group with the cost of the member
600
601 if (p_asset_type_rec.asset_type = 'CIP') then
602 l_dest_asset_fin_rec_adj.cost := p_asset_fin_rec_new.cost - p_asset_fin_rec_new.cip_cost;
603 l_dest_asset_fin_rec_adj.cip_cost := p_asset_fin_rec_new.cip_cost;
604 else
605 l_dest_asset_fin_rec_adj.cost := p_asset_fin_rec_new.cost;
606 end if;
607
608 if (p_mrc_sob_type_code <> 'R') then
609
610 -- set up the group recs
611 px_dest_trans_rec := p_trans_rec;
612 px_dest_trans_rec.member_transaction_header_id := p_trans_rec.transaction_header_id;
613
614 px_dest_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
615 px_dest_trans_rec.member_transaction_header_id := p_trans_rec.transaction_header_id;
616 px_dest_trans_rec.transaction_subtype := 'AMORTIZED';
617 px_dest_trans_rec.transaction_key := 'GC';
618
619 if (p_trans_rec.amortization_start_date is not null) then
620 px_dest_trans_rec.transaction_date_entered := p_trans_rec.amortization_start_date;
621 end if;
622
623 select fa_transaction_headers_s.nextval
624 into px_dest_trans_rec.transaction_header_id
625 from dual;
626
627 end if;
628
629 -- get the old fin and deprn information
630 if not FA_UTIL_PVT.get_asset_fin_rec
631 (p_asset_hdr_rec => px_dest_asset_hdr_rec,
632 px_asset_fin_rec => l_dest_asset_fin_rec_old,
633 p_transaction_header_id => NULL,
634 p_mrc_sob_type_code => p_mrc_sob_type_code
635 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
636 end if;
637
638 --HH Validate disabled_flag
639 --Reject transaction if dest group is disabled
640 if not FA_ASSET_VAL_PVT.validate_disabled_flag
641 (p_group_asset_id => l_dest_asset_fin_rec_old.group_asset_id,
642 p_book_type_code => px_dest_asset_hdr_rec.book_type_code,
643 p_old_flag => l_dest_asset_fin_rec_old.disabled_flag,
644 p_new_flag => l_dest_asset_fin_rec_old.disabled_flag
645 , p_log_level_rec => p_log_level_rec) then
646 raise grp_rec_err;
647 end if; --End HH
648
649 if not FA_UTIL_PVT.get_asset_deprn_rec
650 (p_asset_hdr_rec => px_dest_asset_hdr_rec,
651 px_asset_deprn_rec => l_dest_asset_deprn_rec_old,
652 p_period_counter => NULL,
653 p_mrc_sob_type_code => p_mrc_sob_type_code
654 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
655 end if;
656
657 if (p_log_level_rec.statement_level) then
658 fa_debug_pkg.add(l_calling_fn, 'amort start date6', p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
659 fa_debug_pkg.add(l_calling_fn, 'amort start date6a',px_dest_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
660 end if;
661
662 -- If the deprn basis rule is defined as Year End Balance type,
663 -- new adjusted cost must be calculated based on the entered eofy_reserve
664 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
665 l_dest_asset_fin_rec_adj.eofy_reserve := nvl(px_group_reclass_options_rec.destination_eofy_reserve,0);
666 end if;
667
668 --
669 -- Populating eofy_reserve is necessary because fin_rec_adj is not populated in
670 -- faxama if this is not called from FAXASSET
671 --
672 if (p_asset_fin_rec_old.group_asset_id is null) and
673 (p_trans_rec.calling_interface <> 'FAXASSET') then
674 l_dest_asset_fin_rec_adj.eofy_reserve := nvl(p_asset_fin_rec_new.eofy_reserve,0);
675 end if;
676
677 if px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
678 l_dest_asset_deprn_rec_adj.deprn_reserve := px_group_reclass_options_rec.reserve_amount;
679 end if;
680
681 if (p_log_level_rec.statement_level) then
682 fa_debug_pkg.add(l_calling_fn, 'l_dest_asset_fin_rec_old.eofy_reserve',
683 l_dest_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
684 fa_debug_pkg.add(l_calling_fn, 'l_dest_asset_fin_rec_adj.eofy_reserve',
685 l_dest_asset_fin_rec_adj.eofy_reserve, p_log_level_rec => p_log_level_rec);
686 fa_debug_pkg.add(l_calling_fn, 'l_dest_asset_fin_rec_new.eofy_reserve',
687 l_dest_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
688 fa_debug_pkg.add(l_calling_fn, 'amort start date befor calling faxama',
689 px_dest_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
690 end if;
691 /*Bug# 8527619 */
692 if p_mrc_sob_type_code <> 'R' then
693 if not FA_ASSET_VAL_PVT.validate_over_depreciation
694 (p_asset_hdr_rec => px_dest_asset_hdr_rec,
695 p_asset_fin_rec =>l_dest_asset_fin_rec_old,
696 p_validation_type => 'RECLASS_DEST',
697 p_cost_adj => p_asset_fin_rec_old.cost,
698 p_rsv_adj => l_reserve_amt,
699 p_log_level_rec => p_log_level_rec) then
700 raise grp_rec_err;
701 end if;
702 end if;
703 -- now process the adjustment on the group
704 if not FA_ADJUSTMENT_PVT.do_adjustment
705 (px_trans_rec => px_dest_trans_rec,
706 px_asset_hdr_rec => px_dest_asset_hdr_rec,
707 p_asset_desc_rec => p_dest_asset_desc_rec,
708 p_asset_type_rec => p_dest_asset_type_rec,
709 p_asset_cat_rec => p_dest_asset_cat_rec,
710 p_asset_fin_rec_old => l_dest_asset_fin_rec_old,
711 p_asset_fin_rec_adj => l_dest_asset_fin_rec_adj,
712 x_asset_fin_rec_new => l_dest_asset_fin_rec_new,
713 p_inv_trans_rec => l_inv_trans_rec,
714 p_asset_deprn_rec_old => l_dest_asset_deprn_rec_old,
715 p_asset_deprn_rec_adj => l_dest_asset_deprn_rec_adj,
716 x_asset_deprn_rec_new => l_dest_asset_deprn_rec_new,
717 p_period_rec => p_period_rec,
718 p_reclassed_asset_id => p_asset_hdr_rec.asset_id,
719 p_reclass_src_dest => 'DESTINATION',
720 p_reclassed_asset_dpis => p_asset_fin_rec_old.date_placed_in_service,
721 p_mrc_sob_type_code => p_mrc_sob_type_code,
722 p_group_reclass_options_rec => px_group_reclass_options_rec,
723 p_calling_fn => l_calling_fn
724 , p_log_level_rec => p_log_level_rec)then
725 raise grp_rec_err;
726 end if; -- do_adjustment
727
728 if px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then
729 -- BUG# 2683922, issue #2
730 -- delete any expense rows taken in the above call from
731 -- calc_fin_info. currently, there's no easy way to
732 -- distinguish whether the group adjustment was from
733 -- a group reclass / member adjustment, etc inside
734 -- calc_fin_info when calling faxama/faxiat
735
736 if (p_mrc_sob_type_code = 'R') then
737 delete from fa_mc_adjustments
738 where asset_id = px_dest_asset_hdr_rec.asset_id
739 and book_type_code = px_dest_asset_hdr_rec.book_type_code
740 and transaction_header_id = px_dest_trans_rec.transaction_header_id
741 and adjustment_type in ('EXPENSE', 'BONUS EXPENSE',
742 'IMPAIR EXPENSE')
743 and source_type_code = 'DEPRECIATION'
744 and set_of_books_id = px_dest_asset_hdr_rec.set_of_books_id;
745 else
746 delete from fa_adjustments
747 where asset_id = px_dest_asset_hdr_rec.asset_id
748 and book_type_code = px_dest_asset_hdr_rec.book_type_code
749 and transaction_header_id = px_dest_trans_rec.transaction_header_id
750 and adjustment_type in ('EXPENSE', 'BONUS EXPENSE',
751 'IMPAIR EXPENSE')
752 and source_type_code = 'DEPRECIATION';
753 end if;
754 end if;
755
756 if (p_log_level_rec.statement_level) then
757 fa_debug_pkg.add(l_calling_fn, 'amort start date7', p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
758 fa_debug_pkg.add(l_calling_fn, 'amort start date7a',px_dest_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
759 fa_debug_pkg.add(l_calling_fn, 'l_dest_asset_fin_rec_new.eofy_reserve',
760 l_dest_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
761 end if;
762
763 l_dest_asset_deprn_rec_new := l_dest_asset_deprn_rec_old;
764
765 else -- asset is now standalone
766
767 if (p_log_level_rec.statement_level) then
768 fa_debug_pkg.add(l_calling_fn, 'processing dest as','standalone', p_log_level_rec => p_log_level_rec);
769 end if;
770
771 -- set the main structs equal to member if asset is
772 -- now standalone
773
774 px_dest_trans_rec := p_trans_rec;
775 l_dest_asset_hdr_rec := p_asset_hdr_rec;
776 l_dest_asset_desc_rec := p_asset_desc_rec;
777 l_dest_asset_type_rec := p_asset_type_rec;
778 l_dest_asset_cat_rec := p_asset_cat_rec;
779 l_dest_asset_fin_rec_old := p_asset_fin_rec_old;
780 l_dest_asset_fin_rec_new := p_asset_fin_rec_new;
781 l_dest_asset_deprn_rec_old := p_asset_deprn_rec_old;
782 l_dest_asset_deprn_rec_new := p_asset_deprn_rec_new;
783
784 end if;
785
786 px_dest_trans_rec.amortization_start_date := p_trans_rec.amortization_start_date;
787
788 if (p_log_level_rec.statement_level) then
789 fa_debug_pkg.add(l_calling_fn, 'amort start date8',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
790 fa_debug_pkg.add(l_calling_fn, 'amort start date8a',px_dest_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
791 end if;
792
793 -- If the asset was moved into a group, add the asset's cost to the new group
794 if (l_dest_asset_type_rec.asset_type <> 'GROUP' and
795 nvl(l_src_asset_fin_rec_old.tracking_method,'NONE') <> 'CALCULATE' ) or
796 (px_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
797 -- l_dest_asset_type_rec.asset_type = 'GROUP') then
798 if not FA_GROUP_RECLASS2_PVT.do_adjustment
799 (px_trans_rec => px_dest_trans_rec,
800 p_asset_hdr_rec => l_dest_asset_hdr_rec,
801 p_asset_desc_rec => l_dest_asset_desc_rec,
802 p_asset_type_rec => l_dest_asset_type_rec,
803 p_asset_cat_rec => l_dest_asset_cat_rec,
804 p_asset_fin_rec_old => l_dest_asset_fin_rec_old,
805 p_asset_fin_rec_new => l_dest_asset_fin_rec_new,
806 p_asset_deprn_rec_old => l_dest_asset_deprn_rec_new,
807 p_mem_asset_hdr_rec => p_asset_hdr_rec,
808 p_mem_asset_desc_rec => p_asset_desc_rec,
809 p_mem_asset_type_rec => p_asset_type_rec,
810 p_mem_asset_cat_rec => p_asset_cat_rec,
811 p_mem_asset_fin_rec_new => p_asset_fin_rec_new,
812 p_mem_asset_deprn_rec_new => p_asset_deprn_rec_new,
813 px_group_reclass_options_rec => px_group_reclass_options_rec,
814 p_period_rec => p_period_rec,
815 p_mrc_sob_type_code => p_mrc_sob_type_code,
816 p_src_dest => 'DESTINATION'
817 , p_log_level_rec => p_log_level_rec) then
818 raise grp_rec_err;
819 end if;
820 end if;
821
822 if (p_log_level_rec.statement_level) then
823 fa_debug_pkg.add(l_calling_fn, 'amort start date9',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
824 fa_debug_pkg.add(l_calling_fn, 'amort start date9a',px_dest_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
825 end if;
826
827 --
828 -- Initialize Member Tables
829 --
830 FA_AMORT_PVT.initMemberTable;
831
832 -- Adding this if statement because this will be called in FAPGADJB.pls
833 if (G_release = 11 and
834 (px_group_reclass_options_rec.group_reclass_type = 'MANUAL' or
835 p_trans_rec.calling_interface <> 'FAXASSET') -- COMMENT THIS LINE OUT FOR NON-CONC PROGRAM TESTING
836 ) then
837 -- process any intercompany effects
838 if not fa_interco_pvt.do_all_books
839 (p_src_trans_rec => px_src_trans_rec,
840 p_src_asset_hdr_rec => l_src_asset_hdr_rec,
841 p_dest_trans_rec => px_dest_trans_rec,
842 p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
843 p_calling_fn => l_calling_fn
844 , p_log_level_rec => p_log_level_rec) then raise grp_rec_err;
845 end if;
846 end if;
847
848 -- insert the transaction link record
849 -- note that the trx_ref_id was loaded in FAPADJB.pls
850
851 if (p_mrc_sob_type_code <> 'R') then
852
853 l_trx_reference_id := p_trans_rec.trx_reference_id;
854
855 fa_trx_references_pkg.insert_row
856 (X_Rowid => l_rowid,
857 X_Trx_Reference_Id => l_trx_reference_id,
858 X_Book_Type_Code => p_asset_hdr_rec.book_type_code,
859 X_Src_Asset_Id => l_src_asset_hdr_rec.asset_id,
860 X_Src_Transaction_Header_Id => px_src_trans_rec.transaction_header_id,
861 X_Dest_Asset_Id => l_dest_asset_hdr_rec.asset_id,
862 X_Dest_Transaction_Header_Id => px_dest_trans_rec.transaction_header_id,
863 X_Member_Asset_Id => p_asset_hdr_rec.asset_id,
864 X_Member_Transaction_Header_Id => p_trans_rec.transaction_header_id,
865 X_Transaction_Type => 'GROUP CHANGE',
866 X_Src_Transaction_Subtype => px_src_trans_rec.transaction_subtype || ' ' || px_group_reclass_options_rec.group_reclass_type,
867 X_Dest_Transaction_Subtype => px_dest_trans_rec.transaction_subtype || ' ' || px_group_reclass_options_rec.group_reclass_type,
868 X_Src_Amortization_Start_Date => px_src_trans_rec.amortization_start_date,
869 X_Dest_Amortization_Start_Date => px_dest_trans_rec.amortization_start_date,
870 X_Reserve_Transfer_Amount => px_group_reclass_options_rec.reserve_amount,
871 X_Src_Expense_Amount => px_group_reclass_options_rec.source_exp_amount,
872 X_Dest_Expense_Amount => px_group_reclass_options_rec.destination_exp_amount,
873 X_Src_Eofy_Reserve => px_group_reclass_options_rec.source_eofy_reserve,
874 X_Dest_Eofy_Reserve => px_group_reclass_options_rec.destination_eofy_reserve,
875 X_Creation_Date => p_trans_rec.who_info.creation_date,
876 X_Created_By => p_trans_rec.who_info.created_by,
877 X_Last_Update_Date => p_trans_rec.who_info.last_update_date,
878 X_Last_Updated_By => p_trans_rec.who_info.last_updated_by,
879 X_Last_Update_Login => p_trans_rec.who_info.last_update_login,
880 X_Return_Status => l_return_status,
881 X_Calling_Fn => l_calling_fn
882 , p_log_level_rec => p_log_level_rec);
883
884 end if;
885
886 -- no go back and update all transaction header rows with the link_id
887
888 --
889 -- Source group is the only potential group requires terminal gain loss
890 -- calculation.
891 --
892 if (nvl(l_src_asset_fin_rec_new.adjustment_required_status, 'NONE') <> 'GADJ') then
893 if not FA_RETIREMENT_PVT.Check_Terminal_Gain_Loss(
894 p_trans_rec => px_src_trans_rec,
895 p_asset_hdr_rec => px_src_asset_hdr_rec,
896 p_asset_type_rec => p_src_asset_type_rec,
897 p_asset_fin_rec => l_src_asset_fin_rec_new,
898 p_period_rec => p_period_rec,
899 p_mrc_sob_type_code => p_mrc_sob_type_code,
900 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
901 if (p_log_level_rec.statement_level) then
902 fa_debug_pkg.add(l_calling_fn, 'Failed Calling',
903 ' FA_RETIREMENT_PVT.Check_Terminal_Gain_Loss', p_log_level_rec => p_log_level_rec);
904 end if;
905 raise grp_rec_err;
906
907 end if;
908 end if; -- (nvl(l_src_asset_fin_rec_new.adjustment_required_status, 'NONE') <> 'GADJ')
909
910
911
912 return true;
913
914 EXCEPTION
915
916 WHEN GRP_REC_ERR THEN
917 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
918 return FALSE;
919
920 WHEN OTHERS THEN
921 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
922 return FALSE;
923
924
925 end do_group_reclass;
926
927 ---------------------------------------------------------------------------------------
928
929 FUNCTION do_adjustment
930 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
931 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
932 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
933 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
934 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
935 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
936 p_asset_fin_rec_new IN FA_API_TYPES.asset_fin_rec_type,
937 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type,
938 p_mem_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
939 p_mem_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
940 p_mem_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
941 p_mem_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
942 p_mem_asset_fin_rec_new IN FA_API_TYPES.asset_fin_rec_type,
943 p_mem_asset_deprn_rec_new IN FA_API_TYPES.asset_deprn_rec_type,
944 px_group_reclass_options_rec IN OUT NOCOPY FA_API_TYPES.group_reclass_options_rec_type,
945 p_period_rec IN fa_api_types.period_rec_type,
946 p_mrc_sob_type_code IN VARCHAR2,
947 p_src_dest IN VARCHAR2
948 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
949
950 -- used for faxinaj calls
951 l_exp_adj FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
952 l_rsv_adj FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
953
954
955 -- used for temporary holding
956 l_exp_amount number := 0;
957 l_rsv_amount number := 0;
958 l_total_rsv_amount number := 0;
959 l_bonus_exp_amount number := 0;
960 l_impair_exp_amount number := 0;
961
962
963 -- used for temporary storage for calls to faxama
964 l_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
965 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
966 l_asset_deprn_rec_old FA_API_TYPES.asset_deprn_rec_type;
967 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
968 l_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
969 l_trans_rec FA_API_TYPES.trans_rec_type;
970 l_group_reclass_options_rec FA_API_TYPES.group_reclass_options_rec_type;
971 l_deprn_exp number;
972 l_bonus_deprn_exp number;
973 l_impairment_exp number;
974
975 l_difference_eofy_reserve number;
976 l_exp_adjust_for_ye number;
977 l_exp_amount_by_system number;
978 l_eofy_reserve number;
979
980 l_backed_out_exp number;
981
982 --bug6983091: getting expense just backed out
983 CURSOR c_get_exp_amount IS
984 select NVL(SUM(DECODE(adj.debit_credit_flag,
985 'DR', adj.adjustment_amount,
986 'CR', -1 * adj.adjustment_amount)), 0)
987 from fa_adjustments adj
988 where adj.asset_id = p_asset_hdr_rec.asset_id
989 and adj.book_type_code = p_asset_hdr_rec.book_type_code
990 and adj.adjustment_type = 'EXPENSE'
991 and adj.period_counter_created = p_period_rec.period_counter
992 and adj.track_member_flag = 'Y'
993 and adj.transaction_header_id = px_trans_rec.transaction_header_id;
994 /* Bug 8237945 added above transaction_header_id condition. To get the backed out expense
995 we need to consider the expense just inserted into fa_adjustments by this transaction*/
996
997 --bug6983091: MRC: getting expense just backed out
998 CURSOR c_get_mc_exp_amount IS
999 select NVL(SUM(DECODE(adj.debit_credit_flag,
1000 'DR', adj.adjustment_amount,
1001 'CR', -1 * adj.adjustment_amount)), 0)
1002 from fa_mc_adjustments adj
1003 where adj.asset_id = p_asset_hdr_rec.asset_id
1004 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1005 and adj.adjustment_type = 'EXPENSE'
1006 and adj.period_counter_created = p_period_rec.period_counter
1007 and adj.track_member_flag = 'Y'
1008 and adj.transaction_header_id = px_trans_rec.transaction_header_id
1009 and adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1010 /* Bug 8237945 added above transaction_header_id condition. To get the backed out expense
1011 we need to consider the expense just inserted into fa_adjustments by this transaction*/
1012
1013 l_calling_fn VARCHAR2(35) := 'fa_group_reclass_pvt.do_adjustment';
1014 grp_rec_err EXCEPTION;
1015
1016
1017 BEGIN
1018
1019 if (p_log_level_rec.statement_level) then
1020 fa_debug_pkg.add(l_calling_fn, 'amort start date inside 1',px_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
1021 end if;
1022
1023
1024 l_asset_fin_rec_new := p_asset_fin_rec_new;
1025
1026 if (p_src_dest = 'SOURCE') then
1027 l_asset_fin_rec_adj.cost := -1 * p_mem_asset_fin_rec_new.cost;
1028 l_asset_fin_rec_adj.salvage_value := -1 * p_mem_asset_fin_rec_new.salvage_value;
1029 l_asset_fin_rec_adj.allowed_deprn_limit_amount
1030 := -1 * p_mem_asset_fin_rec_new.allowed_deprn_limit_amount;
1031 else
1032 l_asset_fin_rec_adj.cost := p_mem_asset_fin_rec_new.cost;
1033 l_asset_fin_rec_adj.salvage_value := p_mem_asset_fin_rec_new.salvage_value;
1034 l_asset_fin_rec_adj.allowed_deprn_limit_amount
1035 := p_mem_asset_fin_rec_new.allowed_deprn_limit_amount;
1036 end if;
1037
1038 -- calculate / insert the expense and reserve accordingly
1039 --
1040 -- notes:
1041 -- 1) we do not allow NONE in conjunction with manual (***OPEN ISSUE***)
1042 -- UPDATE: yes we will as the form will default the amount and not allow
1043 -- it to change. validation below will validate that for
1044 -- NONE-GRP, that the amount is equal to the member's reserve
1045 --
1046 -- 2) precedence is as follows:
1047 -- - reserve portion (calc only)
1048 -- - NONE-GRP (the asset's reserve is always used)
1049 -- - GRP-NONE (the asset's dpis is used to derive
1050 -- the amount of grp reserve to extract)
1051 -- - GRP-GRP (the asset's dpis is used to derive
1052 -- the amount of source group's reserve)
1053 -- - expense
1054 -- - (both CALC and MANUAL):
1055 -- each side of the expense part of transaction is treated
1056 -- totally independantly.
1057 -- - (CALC only): each side uses same amortization start date.
1058 -- if there is any difference between the amort start date and
1059 -- current period open date, we will charge expense for the periods
1060 -- in between. In the event the amort start date = members dpis,
1061 -- the axpense will equal reserve portion leaving no reserve to
1062 -- transfer.
1063 --
1064 -- 3) for mrc scenarios, the incoming values will already be
1065 -- set to the reporting values we will always convert the amounts
1066 -- so that the ratio of new reserve / new cost is the same
1067 -- as in primary *** as in CRL, this poses a problem when
1068 -- using transfer reserve because there is the likely
1069 -- potential that when this ratio is applied to both the
1070 -- and destination, the amounts will not be equal, but
1071 -- from an accounting standpoint - they must be
1072 --
1073
1074
1075 -- call the category books cache for the accounts
1076 if not fa_cache_pkg.fazccb
1077 (X_book => p_asset_hdr_rec.book_type_code,
1078 X_cat_id => p_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
1079 raise grp_rec_err;
1080 end if;
1081
1082 -- set up the structs to be passed to faxinaj
1083 l_rsv_adj.transaction_header_id := px_trans_rec.transaction_header_id;
1084 l_rsv_adj.asset_id := p_asset_hdr_rec.asset_id; -- p_asset_fin_rec_new.group_asset_id;
1085 l_rsv_adj.book_type_code := p_asset_hdr_rec.book_type_code;
1086 l_rsv_adj.period_counter_created := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1087 l_rsv_adj.period_counter_adjusted := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1088 l_rsv_adj.current_units := p_asset_desc_rec.current_units;
1089 l_rsv_adj.selection_mode := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
1090 l_rsv_adj.selection_thid := 0;
1091 l_rsv_adj.selection_retid := 0;
1092 l_rsv_adj.leveling_flag := TRUE;
1093 l_rsv_adj.last_update_date := px_trans_rec.transaction_date_entered;
1094 l_rsv_adj.flush_adj_flag := TRUE;
1095 l_rsv_adj.gen_ccid_flag := TRUE;
1096 l_rsv_adj.annualized_adjustment := 0;
1097 l_rsv_adj.asset_invoice_id := 0;
1098 l_rsv_adj.distribution_id := 0;
1099 l_rsv_adj.mrc_sob_type_code := p_mrc_sob_type_code;
1100 l_rsv_adj.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
1101
1102 l_exp_adj.transaction_header_id := px_trans_rec.transaction_header_id;
1103 l_exp_adj.asset_id := p_asset_hdr_rec.asset_id; -- p_asset_fin_rec_new.group_asset_id;
1104 l_exp_adj.book_type_code := p_asset_hdr_rec.book_type_code;
1105 l_exp_adj.period_counter_created := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1106 l_exp_adj.period_counter_adjusted := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1107 l_exp_adj.current_units := p_asset_desc_rec.current_units;
1108 l_exp_adj.selection_mode := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
1109 l_exp_adj.selection_thid := 0;
1110 l_exp_adj.selection_retid := 0;
1111 l_exp_adj.leveling_flag := TRUE;
1112 l_exp_adj.last_update_date := px_trans_rec.transaction_date_entered;
1113 l_exp_adj.flush_adj_flag := TRUE;
1114 l_exp_adj.gen_ccid_flag := TRUE;
1115 l_exp_adj.annualized_adjustment := 0;
1116 l_exp_adj.asset_invoice_id := 0;
1117 l_exp_adj.distribution_id := 0;
1118 l_exp_adj.mrc_sob_type_code := p_mrc_sob_type_code;
1119 l_exp_adj.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
1120
1121 -- most of the following logic was stolen from FAVGRCLB.pls (CRL)
1122 -- basically, derive the info for each insert into fa_adjustments
1123 -- based on the source / destination / asset type, etc
1124
1125 -- set up the accounting related values in the adj_ptr
1126 if (p_src_dest = 'SOURCE') then
1127
1128 -- Expense accounts have to be CR for the old acct
1129 -- Reserve accounts have to be DR for the old acct
1130
1131 l_rsv_adj.source_type_code := 'ADJUSTMENT';
1132 l_rsv_adj.adjustment_type := 'RESERVE';
1133 l_rsv_adj.code_combination_id := fa_cache_pkg.fazccb_record.reserve_account_ccid;
1134 l_rsv_adj.account := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
1135 l_rsv_adj.account_type := 'DEPRN_RESERVE_ACCT';
1136 l_rsv_adj.debit_credit_flag := 'DR';
1137
1138 -- Bug4335926:
1139 -- Set l_rsv_adj.track_member_flag accordingly.
1140 --
1141 -- Bug5736734: Modified so that it only set flag for member tracking
1142 if (p_mem_asset_fin_rec_new.group_asset_id is not null) and
1143 (p_mem_asset_fin_rec_new.tracking_method is not null) and
1144 (p_asset_type_rec.asset_type <> 'GROUP') then
1145 l_rsv_adj.track_member_flag := 'Y';
1146 l_exp_adj.track_member_flag := 'Y';
1147 else
1148 l_rsv_adj.track_member_flag := null;
1149 l_exp_adj.track_member_flag := null;
1150 end if;
1151
1152 l_exp_adj.source_type_code := 'DEPRECIATION';
1153 l_exp_adj.adjustment_type := 'EXPENSE';
1154 l_exp_adj.code_combination_id := 0;
1155 l_exp_adj.account := fa_cache_pkg.fazccb_record.deprn_expense_acct;
1156 l_exp_adj.account_type := 'DEPRN_EXPENSE_ACCT';
1157 l_exp_adj.debit_credit_flag := 'CR';
1158
1159 else -- (p_src_dest = 'DESTINATION') then
1160
1161 -- Expense accounts have to be DR for the new acct
1162 -- Reserve accounts have to be CR for the new acct
1163
1164 l_rsv_adj.source_type_code := 'ADJUSTMENT';
1165 l_rsv_adj.adjustment_type := 'RESERVE';
1166 l_rsv_adj.code_combination_id := fa_cache_pkg.fazccb_record.reserve_account_ccid;
1167 l_rsv_adj.account := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
1168 l_rsv_adj.account_type := 'DEPRN_RESERVE_ACCT';
1169 l_rsv_adj.debit_credit_flag := 'CR';
1170
1171 l_exp_adj.source_type_code := 'DEPRECIATION';
1172 l_exp_adj.adjustment_type := 'EXPENSE';
1173 l_exp_adj.code_combination_id := 0;
1174 l_exp_adj.account := fa_cache_pkg.fazccb_record.deprn_expense_acct;
1175 l_exp_adj.account_type := 'DEPRN_EXPENSE_ACCT';
1176 l_exp_adj.debit_credit_flag := 'DR';
1177
1178 end if;
1179
1180 -- here are how the the various options are calculated / handled:
1181 --
1182 -- MANUAL : use the entered amounts for expense and reserve for both assets
1183 --
1184 -- CALC : use the member's dpis and derive the amount of reserve
1185 -- which it contributed (for standalone source, use query balances)
1186 -- use the amort start date and derive the expense for all periods
1187 -- since that date. transfer the difference between the two as reserve
1188 -- use the difference and the respective expense amounts for source and dest
1189 --
1190 -- (In Case the Tracking Method is enabled)
1191 -- When the Tracking Method is enabled, reclass option is passed as 'CALC',
1192 -- But the amounts for reserve and expense will be populated from stored amounts
1193 -- instead of calculating the amounts.
1194 -- This behavior is similar to MANUAL type.
1195 --
1196 -- implications: we can/must always use the same reserve for source and dest
1197 -- regardless of the reclass type
1198 --
1199
1200 if (p_log_level_rec.statement_level) then
1201 fa_debug_pkg.add(l_calling_fn, 'debug message','just before if-clause to switch logic by reclass type', p_log_level_rec => p_log_level_rec);
1202 fa_debug_pkg.add(l_calling_fn, 'group_reclass_type',px_group_reclass_options_rec.group_reclass_type, p_log_level_rec => p_log_level_rec);
1203 fa_debug_pkg.add(l_calling_fn, 'asset_type',p_asset_type_rec.asset_type, p_log_level_rec => p_log_level_rec);
1204 fa_debug_pkg.add(l_calling_fn, 'tracking_method',p_asset_fin_rec_new.tracking_method, p_log_level_rec => p_log_level_rec);
1205 fa_debug_pkg.add(l_calling_fn, 'Source or Dest',p_src_dest, p_log_level_rec => p_log_level_rec);
1206 fa_debug_pkg.add(l_calling_fn, 'src exp amount', px_group_reclass_options_rec.source_exp_amount, p_log_level_rec => p_log_level_rec);
1207 fa_debug_pkg.add(l_calling_fn, 'dest exp amount', px_group_reclass_options_rec.destination_exp_amount, p_log_level_rec => p_log_level_rec);
1208 fa_debug_pkg.add(l_calling_fn, 'reserve amount', px_group_reclass_options_rec.reserve_amount, p_log_level_rec => p_log_level_rec);
1209 fa_debug_pkg.add(l_calling_fn, 'src eofy reserve amount', px_group_reclass_options_rec.source_eofy_reserve, p_log_level_rec => p_log_level_rec);
1210 fa_debug_pkg.add(l_calling_fn, 'dest eofy_reserve amount', px_group_reclass_options_rec.destination_eofy_reserve, p_log_level_rec => p_log_level_rec);
1211 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.eofy_reserve', l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
1212 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.group_asset_id', l_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
1213 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.tracking_method', l_asset_fin_rec_new.tracking_method, p_log_level_rec => p_log_level_rec);
1214 end if;
1215
1216 if (px_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
1217
1218 -- note: this section is interdependent on the section following calc logic
1219 -- where the rsv is rederived. For destination we are intentionally
1220 -- not adding the two together here, for source we are.
1221 if (p_src_dest = 'SOURCE') then
1222 l_exp_amount := nvl(px_group_reclass_options_rec.source_exp_amount, 0);
1223 l_total_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0) +
1224 nvl(px_group_reclass_options_rec.source_exp_amount, 0);
1225 l_eofy_reserve := nvl(px_group_reclass_options_rec.source_eofy_reserve, 0);
1226 else
1227 l_exp_amount := nvl(px_group_reclass_options_rec.destination_exp_amount, 0);
1228 l_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1229 l_total_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1230 l_eofy_reserve := nvl(px_group_reclass_options_rec.destination_eofy_reserve,l_eofy_reserve);
1231 end if;
1232
1233 elsif (px_group_reclass_options_rec.group_reclass_type = 'CALC') and
1234 (p_asset_type_rec.asset_type = 'GROUP') and
1235 (p_asset_fin_rec_new.tracking_method is not null) then
1236
1237 if (p_log_level_rec.statement_level) then
1238 fa_debug_pkg.add(l_calling_fn, 'entering','populate member amounts logic', p_log_level_rec => p_log_level_rec);
1239 end if;
1240
1241 if not fa_group_reclass2_pvt.populate_member_amounts
1242 (p_trans_rec => px_trans_rec,
1243 p_asset_hdr_rec => p_asset_hdr_rec,
1244 p_asset_fin_rec_new => p_asset_fin_rec_new,
1245 p_mem_asset_hdr_rec => p_mem_asset_hdr_rec,
1246 p_mem_asset_fin_rec_new => p_mem_asset_fin_rec_new,
1247 px_group_reclass_options_rec => px_group_reclass_options_rec,
1248 p_period_rec => p_period_rec,
1249 p_mrc_sob_type_code => p_mrc_sob_type_code,
1250 p_src_dest => p_src_dest
1251 , p_log_level_rec => p_log_level_rec) then
1252 raise grp_rec_err;
1253 end if;
1254
1255 l_eofy_reserve := nvl(px_group_reclass_options_rec.source_eofy_reserve,0);
1256
1257 if (p_src_dest = 'SOURCE') then
1258 l_exp_amount := nvl(px_group_reclass_options_rec.source_exp_amount, 0);
1259 l_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1260 l_total_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1261
1262 else -- for destination group, needs to calculate expense amount.
1263 if (px_trans_rec.amortization_start_date < p_period_rec.calendar_period_open_date and
1264 px_trans_rec.calling_interface = 'FAPGADJ') then
1265
1266 if not FA_AMORT_PVT.faxama
1267 (px_trans_rec => px_trans_rec, -- use amort start
1268 p_asset_hdr_rec => p_asset_hdr_rec,
1269 p_asset_desc_rec => p_asset_desc_rec,
1270 p_asset_cat_rec => p_asset_cat_rec,
1271 p_asset_type_rec => p_asset_type_rec,
1272 p_asset_fin_rec_old => p_asset_fin_rec_new,
1273 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
1274 px_asset_fin_rec_new => l_asset_fin_rec_new,
1275 p_asset_deprn_rec => p_asset_deprn_rec_old,
1276 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
1277 p_period_rec => p_period_rec,
1278 p_mrc_sob_type_code => p_mrc_sob_type_code,
1279 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1280 p_used_by_revaluation => null,
1281 p_reclassed_asset_id => p_mem_asset_hdr_rec.asset_id,
1282 p_reclass_src_dest => p_src_dest,
1283 p_reclassed_asset_dpis => p_mem_asset_fin_rec_new.date_placed_in_service,
1284 x_deprn_exp => l_deprn_exp,
1285 x_bonus_deprn_exp => l_bonus_deprn_exp,
1286 x_impairment_exp => l_impairment_exp
1287 , p_log_level_rec => p_log_level_rec) then
1288 raise grp_rec_err;
1289 end if;
1290
1291 if (p_log_level_rec.statement_level) then
1292 fa_debug_pkg.add(l_calling_fn, 'deprn expense from faxama - in tracking logic',l_deprn_exp, p_log_level_rec => p_log_level_rec);
1293 end if;
1294 l_total_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1295 l_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1296 l_exp_amount := l_deprn_exp; -- l_rsv_amount;
1297 else
1298 l_exp_amount := 0;
1299 end if;
1300 end if;
1301
1302 elsif (px_group_reclass_options_rec.group_reclass_type = 'CALC') then
1303
1304 -- get the portion of reserve which the member contributed
1305 -- (starting from dpis) and store temporarily - needed only
1306 -- for the source asset (same amount used for destination)
1307
1308 if (p_src_dest = 'SOURCE') then
1309
1310 -- Populate Subtract Ytd Flag
1311 if not fa_cache_pkg.fazccmt(X_method => l_asset_fin_rec_new.deprn_method_code,
1312 X_life => l_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec) then
1313 raise grp_rec_err;
1314 end if;
1315
1316 if (p_asset_type_rec.asset_type = 'GROUP' and
1317 px_trans_rec.calling_interface = 'FAPGADJ') then
1318
1319 l_trans_rec := px_trans_rec;
1320 l_trans_rec.amortization_start_date := p_mem_asset_fin_rec_new.date_placed_in_service;
1321
1322 if not FA_AMORT_PVT.faxama
1323 (px_trans_rec => l_trans_rec, -- uses DPIS for amort start
1324 p_asset_hdr_rec => p_asset_hdr_rec,
1325 p_asset_desc_rec => p_asset_desc_rec,
1326 p_asset_cat_rec => p_asset_cat_rec,
1327 p_asset_type_rec => p_asset_type_rec,
1328 p_asset_fin_rec_old => p_asset_fin_rec_new,
1329 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
1330 px_asset_fin_rec_new => l_asset_fin_rec_new,
1331 p_asset_deprn_rec => p_asset_deprn_rec_old,
1332 p_period_rec => p_period_rec,
1333 p_mrc_sob_type_code => p_mrc_sob_type_code,
1334 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1335 p_used_by_revaluation => null,
1336 p_reclassed_asset_id => p_mem_asset_hdr_rec.asset_id,
1337 p_reclass_src_dest => p_src_dest,
1338 p_reclassed_asset_dpis => p_mem_asset_fin_rec_new.date_placed_in_service,
1339 x_deprn_exp => l_deprn_exp,
1340 x_bonus_deprn_exp => l_bonus_deprn_exp,
1341 x_impairment_exp => l_impairment_exp
1342 , p_log_level_rec => p_log_level_rec) then
1343 raise grp_rec_err;
1344 end if;
1345
1346 if (p_log_level_rec.statement_level) then
1347 fa_debug_pkg.add(l_calling_fn, 'faxama from DPIS',l_deprn_exp, p_log_level_rec => p_log_level_rec);
1348 fa_debug_pkg.add(l_calling_fn, 'New eofy_reserve', l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
1349 fa_debug_pkg.add(l_calling_fn, 'Old eofy_reserve', p_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
1350 end if;
1351
1352 l_eofy_reserve := nvl(p_asset_fin_rec_old.eofy_reserve,0) - nvl(l_asset_fin_rec_new.eofy_reserve,0);
1353 px_group_reclass_options_rec.source_eofy_reserve := l_eofy_reserve;
1354 px_group_reclass_options_rec.destination_eofy_reserve := l_eofy_reserve;
1355
1356 -- flip the sign as the amount will be negative since this is a negative cost adj
1357 l_total_rsv_amount := -l_deprn_exp;
1358
1359 -- In case the Source Method is Year End Balance,
1360 -- Necessary Reserve Amount is NEW Eofy Reserve Amount.
1361 -- Here, the total rsv amount is calculated as New.Eofy - Old.Eofy
1362 -- This may be negative amount.
1363 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
1364 if (p_log_level_rec.statement_level) then
1365 fa_debug_pkg.add(l_calling_fn, 'Source group method type', 'Year End Balance', p_log_level_rec => p_log_level_rec);
1366 fa_debug_pkg.add(l_calling_fn, 'New eofy_reserve', l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
1367 fa_debug_pkg.add(l_calling_fn, 'Old eofy_reserve', p_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
1368 end if;
1369 l_total_rsv_amount := nvl(p_asset_fin_rec_old.eofy_reserve,0) - nvl(l_asset_fin_rec_new.eofy_reserve,0);
1370 l_difference_eofy_reserve := l_total_rsv_amount;
1371 end if;
1372 else -- asset was originally standalone, use current reserve balance
1373 -- Bug# 3737670
1374 -- If the tracking method is 'CALCULATE' then doesn't need to reverse calculated reserve amount
1375 -- at member level. So set 0 to l_total_rsv_amount
1376 if nvl(l_asset_fin_rec_new.tracking_method,'NONE') = 'CALCULATE' then
1377 l_total_rsv_amount := 0;
1378 else
1379 l_total_rsv_amount := p_asset_deprn_rec_old.deprn_reserve;
1380 end if;
1381
1382 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
1383 --l_total_rsv_amount := nvl(l_eofy_reserve,0); --DVJ_CCA commented
1384 null;
1385 end if;
1386 end if;
1387
1388 else
1389
1390 l_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1391 l_total_rsv_amount := nvl(px_group_reclass_options_rec.reserve_amount, 0);
1392 if nvl(px_group_reclass_options_rec.source_eofy_reserve,0) = 0 then
1393 l_group_reclass_options_rec := px_group_reclass_options_rec;
1394 -- Call populate member amounts to get eofy_reserve;
1395 if not fa_group_reclass2_pvt.populate_member_amounts
1396 (p_trans_rec => px_trans_rec,
1397 p_asset_hdr_rec => p_asset_hdr_rec,
1398 p_asset_fin_rec_new => p_asset_fin_rec_new,
1399 p_mem_asset_hdr_rec => p_mem_asset_hdr_rec,
1400 p_mem_asset_fin_rec_new => p_mem_asset_fin_rec_new,
1401 px_group_reclass_options_rec => px_group_reclass_options_rec,
1402 p_period_rec => p_period_rec,
1403 p_mrc_sob_type_code => p_mrc_sob_type_code,
1404 p_src_dest => p_src_dest
1405 , p_log_level_rec => p_log_level_rec) then
1406 raise grp_rec_err;
1407 end if;
1408
1409 l_eofy_reserve := nvl(px_group_reclass_options_rec.source_eofy_reserve,0);
1410 px_group_reclass_options_rec := l_group_reclass_options_rec;
1411
1412 else
1413 l_eofy_reserve := nvl(px_group_reclass_options_rec.destination_eofy_reserve,
1414 px_group_reclass_options_rec.source_eofy_reserve);
1415 end if;
1416 end if;
1417
1418 if (p_log_level_rec.statement_level) then
1419 fa_debug_pkg.add(l_calling_fn, 'l_exp_amount(1)', l_exp_amount);
1420 fa_debug_pkg.add(l_calling_fn, 'l_rsv_amount(1)', l_rsv_amount);
1421 fa_debug_pkg.add(l_calling_fn, 'l_total_rsv_amount(1)', l_total_rsv_amount);
1422 fa_debug_pkg.add(l_calling_fn, 'l_eofy_reserve(1)', l_eofy_reserve);
1423 end if;
1424
1425 -- get the portion of expense which the member contributed
1426 -- (starting from amort_start) for both source and desitnation
1427 --
1428 -- only needed when the transaction is backdated
1429 -- for the source asset, if the amort start = dpis,
1430 -- we can use the reserve amount in full
1431 -- but for destination, we always need the amount
1432
1433 if (p_log_level_rec.statement_level) then
1434 fa_debug_pkg.add(l_calling_fn, 'amort start date',px_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
1435 end if;
1436
1437 if (px_trans_rec.amortization_start_date < p_period_rec.calendar_period_open_date) then
1438
1439 if (p_log_level_rec.statement_level) then
1440 fa_debug_pkg.add(l_calling_fn, 'entering','catchup expense logic', p_log_level_rec => p_log_level_rec);
1441 fa_debug_pkg.add(l_calling_fn, 'subtract_ytd_flag', fa_cache_pkg.fazcdrd_record.subtract_ytd_flag, p_log_level_rec => p_log_level_rec);
1442 end if;
1443
1444 if ((px_trans_rec.amortization_start_date <> p_mem_asset_fin_rec_new.date_placed_in_service OR
1445 p_src_dest = 'DESTINATION') and
1446 px_trans_rec.calling_interface ='FAPGADJ') then
1447
1448 --bug6983091: getting expense just backed out
1449 -- Set up-to-date deprn info when it becomes standalone
1450 -- necessry because when reclassed out, there may be
1451 -- expense row created while processing source
1452 l_backed_out_exp := 0;
1453 if (p_src_dest = 'DESTINATION') and
1454 (l_asset_fin_rec_new.group_asset_id is null) and
1455 (p_asset_fin_rec_old.tracking_method = 'ALLOCATE' or
1456 (p_asset_fin_rec_old.tracking_method = 'CALCULATE' and
1457 nvl(p_asset_fin_rec_old.member_rollup_flag, 'N') = 'N')) then
1458
1459 if p_mrc_sob_type_code <> 'R' then
1460 OPEN c_get_exp_amount;
1461 FETCH c_get_exp_amount INTO l_backed_out_exp;
1462 CLOSE c_get_exp_amount;
1463 else
1464 OPEN c_get_mc_exp_amount;
1465 FETCH c_get_mc_exp_amount INTO l_backed_out_exp;
1466 CLOSE c_get_mc_exp_amount;
1467 end if;
1468 end if;
1469
1470 if (p_src_dest = 'SOURCE') then
1471 l_asset_fin_rec_adj.eofy_reserve := (-1)*l_eofy_reserve;
1472 else
1473 l_asset_fin_rec_adj.eofy_reserve := l_eofy_reserve;
1474 end if;
1475
1476 if (p_log_level_rec.statement_level) then
1477 fa_debug_pkg.add(l_calling_fn, 'faxama from amort date','before calling', p_log_level_rec => p_log_level_rec);
1478 fa_debug_pkg.add(l_calling_fn, 'Adj eofy_reserve', l_asset_fin_rec_adj.eofy_reserve, p_log_level_rec => p_log_level_rec);
1479 fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_old.deprn_reserve', p_asset_deprn_rec_old.deprn_reserve, p_log_level_rec => p_log_level_rec);
1480 fa_debug_pkg.add(l_calling_fn, 'l_backed_out_exp', l_backed_out_exp, p_log_level_rec => p_log_level_rec);
1481 end if;
1482
1483 --bug6983091: setting up-to-date reserve
1484 l_asset_deprn_rec_old := p_asset_deprn_rec_old;
1485 l_asset_deprn_rec_old.deprn_reserve := l_asset_deprn_rec_old.deprn_reserve + nvl(l_backed_out_exp, 0);
1486
1487 if not FA_AMORT_PVT.faxama
1488 (px_trans_rec => px_trans_rec, -- use amort start
1489 p_asset_hdr_rec => p_asset_hdr_rec,
1490 p_asset_desc_rec => p_asset_desc_rec,
1491 p_asset_cat_rec => p_asset_cat_rec,
1492 p_asset_type_rec => p_asset_type_rec,
1493 p_asset_fin_rec_old => p_asset_fin_rec_new,
1494 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
1495 px_asset_fin_rec_new => l_asset_fin_rec_new,
1496 p_asset_deprn_rec => l_asset_deprn_rec_old,
1497 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
1498 p_period_rec => p_period_rec,
1499 p_mrc_sob_type_code => p_mrc_sob_type_code,
1500 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1501 p_used_by_revaluation => null,
1502 p_reclassed_asset_id => p_mem_asset_hdr_rec.asset_id,
1503 p_reclass_src_dest => p_src_dest,
1504 p_reclassed_asset_dpis => p_mem_asset_fin_rec_new.date_placed_in_service,
1505 x_deprn_exp => l_deprn_exp,
1506 x_bonus_deprn_exp => l_bonus_deprn_exp,
1507 x_impairment_exp => l_impairment_exp
1508 , p_log_level_rec => p_log_level_rec) then
1509 raise grp_rec_err;
1510 end if;
1511
1512 if (p_log_level_rec.statement_level) then
1513 fa_debug_pkg.add(l_calling_fn, 'deprn expense from faxama',l_deprn_exp, p_log_level_rec => p_log_level_rec);
1514 fa_debug_pkg.add(l_calling_fn, 'Target group method type(expense)', 'Year End Balance');
1515 fa_debug_pkg.add(l_calling_fn, 'New eofy_reserve', l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
1516 fa_debug_pkg.add(l_calling_fn, 'Old eofy_reserve', p_asset_fin_rec_old.eofy_reserve, p_log_level_rec => p_log_level_rec);
1517 end if;
1518
1519 -- l_eofy_reserve := nvl(l_asset_fin_rec_new.eofy_reserve,0);
1520
1521 -- flip the sign as the amount will be negative since this is a negative cost adj
1522 if (p_src_dest = 'SOURCE') then
1523 l_exp_amount := -l_deprn_exp;
1524 else
1525 l_exp_amount := l_deprn_exp;
1526 end if;
1527
1528 -- In case of Year End Balance, amort date can be set only DPIS of reclassified member or
1529 -- Current Date.
1530 -- If the amort date is set as DPIS of member, all amount is treated as expense.
1531 -- on the other hand, it is treated as reserve.
1532 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' and
1533 px_trans_rec.amortization_start_date = p_mem_asset_fin_rec_new.date_placed_in_service then
1534 if (p_src_dest = 'SOURCE') then
1535 l_exp_amount := l_total_rsv_amount;
1536 else
1537 l_exp_amount := nvl(p_asset_fin_rec_new.eofy_reserve,0) - nvl(p_asset_fin_rec_old.eofy_reserve,0);
1538 end if;
1539 -- BUG# 2774165: removing this code as it overwrights value from faxama
1540 --else
1541 -- l_exp_amount := 0;
1542 end if;
1543
1544 else
1545 l_exp_amount := l_total_rsv_amount;
1546 l_eofy_reserve := 0;
1547 end if;
1548 else
1549 l_exp_amount := 0;
1550 end if;
1551
1552 if (p_src_dest = 'SOURCE') then
1553 l_eofy_reserve := p_asset_fin_rec_new.eofy_reserve - l_asset_fin_rec_new.eofy_reserve;
1554 end if;
1555
1556 end if;
1557
1558 if (p_log_level_rec.statement_level) then
1559 fa_debug_pkg.add(l_calling_fn, 'l_exp_amount(2)', l_exp_amount);
1560 fa_debug_pkg.add(l_calling_fn, 'l_rsv_amount(2)', l_rsv_amount);
1561 fa_debug_pkg.add(l_calling_fn, 'l_total_rsv_amount(2)', l_total_rsv_amount);
1562 fa_debug_pkg.add(l_calling_fn, 'l_eofy_reserve(2)', l_eofy_reserve);
1563 end if;
1564
1565 -- load the amounts regardless of the type of reclass
1566 -- signs are assumed to all be the same (i.e. generally +ve)
1567 -- with reliance on the debit_credit_flags to due the rest
1568 --
1569 -- need to insure the total reserve transfered from source
1570 -- is used here as well
1571 --
1572 -- reverting initial change for BUG# 2780960 as this section
1573 -- applies to calc and manual and is dependant on code above
1574 -- note that values for total_rsv are different in both scenarios
1575 -- for src and dest assets. for destination total only stores the
1576 -- amount of reserve transfered from source at this point, so
1577 -- we need to add in the expense, not subtract it
1578
1579 if (p_src_dest = 'DESTINATION') then
1580 l_rsv_amount := l_total_rsv_amount;
1581 l_total_rsv_amount := l_total_rsv_amount + l_exp_amount;
1582 else
1583 l_rsv_amount := l_total_rsv_amount - l_exp_amount;
1584 end if;
1585
1586 if (p_log_level_rec.statement_level) then
1587 fa_debug_pkg.add(l_calling_fn, 'l_exp_amount(3)', l_exp_amount);
1588 fa_debug_pkg.add(l_calling_fn, 'l_rsv_amount(3)', l_rsv_amount);
1589 end if;
1590
1591 l_rsv_adj.adjustment_amount := l_rsv_amount;
1592 l_exp_adj.adjustment_amount := l_exp_amount; -- l_deprn_exp; (need to use one with same sign as tot_rsv)
1593
1594 -- In case of Year End Balance, back the values into original amount
1595 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
1596 l_exp_amount := l_exp_amount_by_system;
1597 end if;
1598 -- if this is the source asset, reset the amount in the
1599 -- reclass structure to be the delta amount as dest will use this
1600 -- (i.e. the reserve which was transfered)
1601 -- if it's the destination, we need to update the total amount
1602 -- to be the transfered value + expense
1603
1604 if (p_src_dest = 'SOURCE') then
1605 px_group_reclass_options_rec.reserve_amount := l_rsv_amount;
1606 else
1607 l_total_rsv_amount := l_rsv_amount + l_exp_amount;
1608 end if;
1609
1610 -- flush all the reserve and expense rows to the db
1611
1612 -- Fix for bug 3062207. Quick fix to not call faxinaj for CALC
1613 -- and FAXASSET combination since no reserve or exp rows must be inserted
1614 -- if called from faxasset.
1615
1616 if (l_rsv_adj.adjustment_amount <> 0 and
1617 (px_group_reclass_options_rec.group_reclass_type <> 'CALC' OR
1618 px_trans_rec.calling_interface = 'FAPGADJ')) then
1619
1620 if (p_log_level_rec.statement_level) then
1621 fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for rsv', p_log_level_rec => p_log_level_rec);
1622 end if;
1623
1624 if not FA_INS_ADJUST_PKG.faxinaj
1625 (l_rsv_adj,
1626 px_trans_rec.who_info.last_update_date,
1627 px_trans_rec.who_info.last_updated_by,
1628 px_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
1629 raise grp_rec_err;
1630 end if;
1631 end if;
1632
1633 if (l_exp_adj.adjustment_amount <> 0 and
1634 (px_group_reclass_options_rec.group_reclass_type <> 'CALC' OR
1635 px_trans_rec.calling_interface = 'FAPGADJ')) then
1636
1637 if (p_log_level_rec.statement_level) then
1638 fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for exp', p_log_level_rec => p_log_level_rec);
1639 end if;
1640
1641 if not FA_INS_ADJUST_PKG.faxinaj
1642 (l_exp_adj,
1643 px_trans_rec.who_info.last_update_date,
1644 px_trans_rec.who_info.last_updated_by,
1645 px_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
1646 raise grp_rec_err;
1647 end if;
1648 end if;
1649
1650
1651 -- now that rows are flushed, call the amort package again
1652 -- this time just to amortize the nbv over remaining life
1653 -- first we need to add the deprn effects to the deprn_old values
1654
1655 l_asset_deprn_rec_new := p_asset_deprn_rec_old;
1656
1657 -- Bug7487450: Modified condition in case of DESTINATION. if destination
1658 -- is standalone, and used to be tracked, then total amount
1659 -- will be the new rsv.
1660 if (p_src_dest = 'SOURCE') then
1661 l_asset_deprn_rec_new.deprn_reserve :=
1662 l_asset_deprn_rec_new.deprn_reserve - l_total_rsv_amount;
1663 else
1664 if (l_asset_fin_rec_new.group_asset_id is null) and
1665 (p_asset_fin_rec_old.tracking_method is not null) then
1666 l_asset_deprn_rec_new.deprn_reserve := l_total_rsv_amount;
1667 else
1668 l_asset_deprn_rec_new.deprn_reserve :=
1669 l_asset_deprn_rec_new.deprn_reserve + l_total_rsv_amount;
1670 end if;
1671 end if;
1672
1673 if (p_src_dest = 'SOURCE') then
1674 l_asset_deprn_rec_adj.deprn_reserve := -1 * l_rsv_amount;
1675 l_asset_fin_rec_adj.eofy_reserve := (-1)*nvl(l_eofy_reserve,0);
1676 if (px_group_reclass_options_rec.group_reclass_type = 'CALC') and
1677 (p_asset_type_rec.asset_type = 'GROUP') and
1678 (p_asset_fin_rec_new.tracking_method is not null) then
1679 l_asset_fin_rec_new.eofy_reserve := nvl(l_asset_fin_rec_new.eofy_reserve,0) - nvl(l_eofy_reserve,0);
1680 elsif (px_group_reclass_options_rec.group_reclass_type = 'MANUAL') and
1681 (p_asset_type_rec.asset_type = 'GROUP') then
1682 l_asset_fin_rec_new.eofy_reserve := nvl(p_asset_fin_rec_old.eofy_reserve,0) - nvl(l_eofy_reserve,0);
1683 end if;
1684 else
1685 if px_group_reclass_options_rec.group_reclass_type = 'MANUAL' then --Bug 9377904 added If code
1686 l_asset_deprn_rec_adj.deprn_reserve := l_rsv_amount;
1687 end if;
1688 l_asset_fin_rec_adj.eofy_reserve := nvl(l_eofy_reserve,0);
1689 if (px_group_reclass_options_rec.group_reclass_type = 'MANUAL') and
1690 (p_asset_type_rec.asset_type = 'GROUP') then
1691 l_asset_fin_rec_new.eofy_reserve := nvl(p_asset_fin_rec_old.eofy_reserve,0) + nvl(l_eofy_reserve,0);
1692 else
1693 l_asset_fin_rec_new.eofy_reserve := nvl(l_asset_fin_rec_new.eofy_reserve,0) + nvl(l_eofy_reserve,0);
1694 end if;
1695 end if;
1696
1697 if (p_log_level_rec.statement_level) then
1698 fa_debug_pkg.add(l_calling_fn, 'just before last call to faxama-p_src_dest',p_src_dest, p_log_level_rec => p_log_level_rec);
1699 fa_debug_pkg.add(l_calling_fn, 'existing reserve before last call to faxama',l_asset_deprn_rec_new.deprn_reserve , p_log_level_rec => p_log_level_rec);
1700 fa_debug_pkg.add(l_calling_fn, 'new expense before last call to faxama',l_exp_amount , p_log_level_rec => p_log_level_rec);
1701 fa_debug_pkg.add(l_calling_fn, 'new reserve before last call to faxama',l_rsv_amount, p_log_level_rec => p_log_level_rec);
1702 fa_debug_pkg.add(l_calling_fn, 'new total reserve before last call to faxama',l_total_rsv_amount, p_log_level_rec => p_log_level_rec);
1703 fa_debug_pkg.add(l_calling_fn, 'total reserve before last call to faxama',l_asset_deprn_rec_new.deprn_reserve , p_log_level_rec => p_log_level_rec);
1704 fa_debug_pkg.add(l_calling_fn, 'old eofy reserve before last call to faxama',p_asset_fin_rec_new.eofy_reserve , p_log_level_rec => p_log_level_rec);
1705 fa_debug_pkg.add(l_calling_fn, 'new eofy reserve before last call to faxama',l_asset_fin_rec_new.eofy_reserve , p_log_level_rec => p_log_level_rec);
1706 fa_debug_pkg.add(l_calling_fn, 'adj eofy reserve before last call to faxama',l_asset_fin_rec_adj.eofy_reserve , p_log_level_rec => p_log_level_rec);
1707 fa_debug_pkg.add(l_calling_fn, 'amort start date',px_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
1708 end if;
1709
1710 -- +++ This won't be necessary
1711 l_trans_rec := px_trans_rec;
1712 l_trans_rec.amortization_start_date := null; -- use current period
1713
1714
1715 -- no need to do the amort and update when an asset is
1716 -- reclassed into a group
1717
1718 /*
1719 if (((p_asset_type_rec.asset_type = 'GROUP') or
1720 (p_src_dest = 'DESTINATION' and
1721 p_asset_type_rec.asset_type = 'CAPITALIZED')) and
1722 (px_group_reclass_options_rec.group_reclass_type = 'MANUAL' OR
1723 (px_trans_rec.calling_interface <> 'FAXASSET' and
1724 px_group_reclass_options_rec.group_reclass_type = 'CALC'))) then
1725 */
1726
1727 if ((p_asset_type_rec.asset_type = 'GROUP') or
1728 (p_src_dest = 'DESTINATION' and
1729 p_asset_type_rec.asset_type = 'CAPITALIZED')) then
1730
1731
1732 if (p_log_level_rec.statement_level) then
1733 fa_debug_pkg.add(l_calling_fn,
1734 'LAST CALL TO FAXAMA',
1735 'CALLING FAXAMA', p_log_level_rec => p_log_level_rec);
1736 end if;
1737
1738
1739 -- use calc_raf_adj_cost rather than faxama if trx is in current
1740 -- period or it's a manual transaction for performance
1741
1742 if (px_group_reclass_options_rec.group_reclass_type = 'MANUAL' or
1743 px_trans_rec.amortization_start_date >= p_period_rec.calendar_period_open_date) then
1744
1745 if (p_log_level_rec.statement_level) then
1746 fa_debug_pkg.add(l_calling_fn, 'calling','calc_raf_adj_cost', p_log_level_rec => p_log_level_rec);
1747 fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_old.rsv', p_asset_deprn_rec_old.deprn_reserve, p_log_level_rec => p_log_level_rec);
1748 fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_old.bonus_rsv', p_asset_deprn_rec_old.bonus_deprn_reserve, p_log_level_rec => p_log_level_rec);
1749 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec_adj.rsv', l_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
1750 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec_adj.bonus_rsv', l_asset_deprn_rec_adj.bonus_deprn_reserve, p_log_level_rec => p_log_level_rec);
1751 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec_new.rsv', l_asset_deprn_rec_new.deprn_reserve, p_log_level_rec => p_log_level_rec);
1752 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec_new.bonus_rsv', l_asset_deprn_rec_new.bonus_deprn_reserve, p_log_level_rec => p_log_level_rec);
1753 end if;
1754
1755 if not FA_AMORT_PVT.calc_raf_adj_cost
1756 (p_trans_rec => px_trans_rec,
1757 p_asset_hdr_rec => p_asset_hdr_rec,
1758 p_asset_desc_rec => p_asset_desc_rec,
1759 p_asset_type_rec => p_asset_type_rec,
1760 p_asset_fin_rec_old => p_asset_fin_rec_old,
1761 px_asset_fin_rec_new => l_asset_fin_rec_new,
1762 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj, -- should contain the total delta (set to l_rsv)
1763 p_asset_deprn_rec_new => l_asset_deprn_rec_new, -- total new amount old + adj (set above)
1764 p_period_rec => p_period_rec,
1765 p_group_reclass_options_rec => px_group_reclass_options_rec,
1766 p_mrc_sob_type_code => p_mrc_sob_type_code,
1767 p_log_level_rec => p_log_level_rec
1768 ) then raise grp_rec_err;
1769 end if;
1770
1771 elsif (px_trans_rec.calling_interface = 'FAPGADJ') then
1772
1773 if not FA_AMORT_PVT.faxama
1774 (px_trans_rec => px_trans_rec, -- use amort start date
1775 p_asset_hdr_rec => p_asset_hdr_rec,
1776 p_asset_desc_rec => p_asset_desc_rec,
1777 p_asset_cat_rec => p_asset_cat_rec,
1778 p_asset_type_rec => p_asset_type_rec,
1779 p_asset_fin_rec_old => p_asset_fin_rec_new,
1780 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
1781 px_asset_fin_rec_new => l_asset_fin_rec_new,
1782 p_asset_deprn_rec => p_asset_deprn_rec_old,
1783 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
1784 p_period_rec => p_period_rec,
1785 p_mrc_sob_type_code => p_mrc_sob_type_code,
1786 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1787 p_used_by_revaluation => null,
1788 p_reclassed_asset_id => p_mem_asset_hdr_rec.asset_id,
1789 p_reclass_src_dest => p_src_dest,
1790 p_reclassed_asset_dpis => p_mem_asset_fin_rec_new.date_placed_in_service,
1791 x_deprn_exp => l_deprn_exp,
1792 x_bonus_deprn_exp => l_bonus_deprn_exp,
1793 x_impairment_exp => l_impairment_exp
1794 , p_log_level_rec => p_log_level_rec) then
1795 raise grp_rec_err;
1796 end if;
1797 end if;
1798
1799 if (p_log_level_rec.statement_level) then
1800 fa_debug_pkg.add(l_calling_fn, 'new adjusted_cost after last call to faxama',l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
1801 fa_debug_pkg.add(l_calling_fn, 'new eofy_reserve after last call to faxama',l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
1802 end if;
1803
1804 -- if reclassing out of the group to standalone, then
1805 -- insure the amount doesn't exceed the recoverable_cost
1806 -- of the standalone asset (open issue - see japan / track member)
1807
1808 -- if (l_temp_rsv + l_exp_amount > l_asset_fin_rec_new.recoverable_cost) then
1809 -- l_src_amount := l_src_asset_fin_rec_new.recoverable_cost;
1810 -- end if;
1811
1812 -- now update fa_books with new RAF / adjusted_cost
1813
1814 fa_books_pkg.update_row
1815 (X_asset_id => p_asset_hdr_rec.asset_id,
1816 X_book_type_code => p_asset_hdr_rec.book_type_code,
1817 X_rate_adjustment_factor => l_asset_fin_rec_new.rate_adjustment_factor,
1818 X_reval_amortization_basis => l_asset_fin_rec_new.reval_amortization_basis,
1819 X_adjusted_cost => l_asset_fin_rec_new.adjusted_cost,
1820 X_adjusted_capacity => l_asset_fin_rec_new.adjusted_capacity,
1821 X_eofy_reserve => l_asset_fin_rec_new.eofy_reserve,
1822 X_mrc_sob_type_code => p_mrc_sob_type_code,
1823 X_set_of_books_id => p_asset_hdr_rec.set_of_books_id,
1824 X_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1825
1826 end if;
1827
1828 return true;
1829
1830 EXCEPTION
1831 when grp_rec_err then
1832 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1833 return false;
1834
1835 when others then
1836 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1837 return false;
1838
1839 END do_adjustment;
1840
1841 ----------------------------------------------
1842 -- Function: populate_member_amounts
1843 -- Description:
1844 -- In case tracking is enabled, transferred amount will be populated from
1845 -- tables.
1846 ----------------------------------------------
1847
1848 FUNCTION populate_member_amounts
1849 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
1850 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
1851 p_asset_fin_rec_new IN FA_API_TYPES.asset_fin_rec_type,
1852 p_mem_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
1853 p_mem_asset_fin_rec_new IN FA_API_TYPES.asset_fin_rec_type,
1854 px_group_reclass_options_rec IN OUT NOCOPY FA_API_TYPES.group_reclass_options_rec_type,
1855 p_period_rec IN fa_api_types.period_rec_type,
1856 p_mrc_sob_type_code IN VARCHAR2,
1857 p_src_dest IN VARCHAR2
1858 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
1859
1860 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
1861
1862 h_book_type_code varchar2(30);
1863 h_member_asset_id number(15);
1864 h_group_asset_id number(15);
1865 h_period_counter number;
1866 h_cur_fiscal_year number;
1867 h_amort_fiscal_year number;
1868
1869 h_reserve_dpis_current number;
1870 h_reserve_dpis_amort number;
1871 h_eofy_reserve number;
1872 h_set_of_books_id number;
1873
1874 h_amort_start_date date;
1875
1876 h_ytd_deprn number;
1877 h_ds_fiscal_year number;
1878
1879 h_adj_eofy_reserve number;
1880 h_adj_reserve number;
1881
1882 --* Cursor to populate the member level amounts
1883 cursor MEM_EXP_RESERVE is
1884 select ds1.deprn_reserve,ds1.ytd_deprn,dp1.fiscal_year
1885 from fa_deprn_summary ds1,
1886 fa_deprn_periods dp1
1887 where ds1.book_type_code = h_book_type_code
1888 and ds1.asset_id = h_member_asset_id
1889 and dp1.book_type_code = ds1.book_type_Code
1890 and dp1.period_counter = ds1.period_counter
1891 and ds1.period_counter =
1892 (select max(period_counter)
1893 from fa_deprn_summary ds2
1894 where ds2.book_type_code = h_book_type_code
1895 and ds2.asset_id = h_member_asset_id
1896 and period_counter <= h_period_counter);
1897
1898 cursor MEM_EXP_RESERVE_MRC is
1899 select ds1.deprn_reserve,ds1.ytd_deprn,dp1.fiscal_year
1900 from fa_mc_deprn_summary ds1,
1901 fa_mc_deprn_periods dp1
1902 where ds1.book_type_code = h_book_type_code
1903 and ds1.asset_id = h_member_asset_id
1904 and dp1.book_type_code = ds1.book_type_Code
1905 and dp1.period_counter = ds1.period_counter
1906 and dp1.set_of_books_id = h_set_of_books_id
1907 and ds1.period_counter =
1908 (select max(period_counter)
1909 from fa_deprn_summary ds2
1910 where ds2.book_type_code = h_book_type_code
1911 and ds2.asset_id = h_member_asset_id
1912 and period_counter <= h_period_counter)
1913 and ds1.set_of_books_id = h_set_of_books_id;
1914
1915 --* Cursor for EOFY_RESERVE adjustment
1916 cursor FA_RET_RSV is
1917 select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
1918 from fa_retirements ret
1919 where ret.book_type_code = h_book_type_code
1920 and ret.asset_id = h_member_asset_id
1921 and ret.transaction_header_id_in in
1922 (select th1.transaction_header_id
1923 from fa_transaction_headers th1,
1924 fa_deprn_periods dp1,
1925 fa_deprn_periods dp3
1926 where th1.asset_id = ret.asset_id
1927 and dp1.book_type_code = h_book_type_code
1928 and dp1.fiscal_year =
1929 (select dp2.fiscal_year
1930 from fa_deprn_periods dp2
1931 where dp2.book_type_code = dp1.book_type_code
1932 and dp2.period_Counter = h_period_counter - 1)
1933 and dp1.period_num = 1
1934 and dp3.book_type_code = dp1.book_type_code
1935 and dp3.period_counter = h_period_counter - 1
1936 and th1.transaction_date_entered >= dp1.calendar_period_open_date
1937 and th1.transaction_date_entered <= dp3.calendar_period_close_date
1938 and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT'));
1939
1940 cursor FA_RET_RSV_MRC is
1941 select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
1942 from fa_mc_retirements ret
1943 where ret.book_type_code = h_book_type_code
1944 and ret.asset_id = h_member_asset_id
1945 and ret.set_of_books_id = h_set_of_books_id
1946 and ret.transaction_header_id_in in
1947 (select th1.transaction_header_id
1948 from fa_transaction_headers th1,
1949 fa_deprn_periods dp1,
1950 fa_deprn_periods dp3
1951 where th1.asset_id = ret.asset_id
1952 and dp1.book_type_code = h_book_type_code
1953 and dp1.fiscal_year =
1954 (select dp2.fiscal_year
1955 from fa_deprn_periods dp2
1956 where dp2.book_type_code = dp1.book_type_code
1957 and dp2.period_Counter = h_period_counter - 1)
1958 and dp1.period_num = 1
1959 and dp3.book_type_code = dp1.book_type_code
1960 and dp3.period_counter = h_period_counter - 1
1961 and th1.transaction_date_entered >= dp1.calendar_period_open_date
1962 and th1.transaction_date_entered <= dp3.calendar_period_close_date
1963 and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT'));
1964
1965 cursor FA_ADJ_RESERVE is
1966 select sum(decode(adj.debit_credit_flag,
1967 'DR',adj.adjustment_amount,
1968 'CR', -1 * adj.adjustment_amount))
1969 from fa_adjustments adj
1970 where adj.book_type_code = h_book_type_code
1971 and adj.asset_id = h_member_asset_id
1972 and adj.adjustment_type = 'RESERVE'
1973 and adj.source_type_code = 'ADJUSTMENT'
1974 and adj.period_counter_adjusted in
1975 (select dp2.period_counter
1976 from fa_deprn_periods dp1,
1977 fa_deprn_periods dp2
1978 where dp1.book_type_code = adj.book_type_code
1979 and dp1.period_counter = h_period_counter - 1
1980 and dp2.book_type_code = dp1.book_type_code
1981 and dp2.fiscal_year = dp1.fiscal_year
1982 and dp2.period_counter <= dp1.period_counter);
1983
1984 cursor FA_ADJ_RESERVE_MRC is
1985 select sum(decode(adj.debit_credit_flag,
1986 'DR',adj.adjustment_amount,
1987 'CR', -1 * adj.adjustment_amount))
1988 from fa_mc_adjustments adj
1989 where adj.book_type_code = h_book_type_code
1990 and adj.asset_id = h_member_asset_id
1991 and adj.adjustment_type = 'RESERVE'
1992 and adj.source_type_code = 'ADJUSTMENT'
1993 and adj.set_of_books_id = h_set_of_books_id
1994 and adj.period_counter_adjusted in
1995 (select dp2.period_counter
1996 from fa_mc_deprn_periods dp1,
1997 fa_mc_deprn_periods dp2
1998 where dp1.book_type_code = adj.book_type_code
1999 and dp1.period_counter = h_period_counter - 1
2000 and dp1.set_of_books_id = h_set_of_books_id
2001 and dp2.book_type_code = dp1.book_type_code
2002 and dp2.fiscal_year = dp1.fiscal_year
2003 and dp2.set_of_books_id = h_set_of_books_id
2004 and dp2.period_counter <= dp1.period_counter);
2005
2006
2007 l_calling_fn VARCHAR2(50) := 'fa_group_reclass_pvt.populate_member_amounts';
2008 pop_mem_amt_err EXCEPTION;
2009
2010
2011 BEGIN
2012
2013 if (p_log_level_rec.statement_level) then
2014 fa_debug_pkg.add(l_calling_fn, 'populate member amt',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
2015 end if;
2016
2017 l_asset_fin_rec_new := p_asset_fin_rec_new;
2018 h_book_type_code := p_asset_hdr_rec.book_type_code;
2019 h_group_asset_id := p_asset_hdr_rec.asset_id;
2020 h_member_asset_id := p_mem_asset_hdr_rec.asset_id;
2021 h_amort_start_date := nvl(p_trans_rec.amortization_start_date,sysdate);
2022 h_set_of_books_id := p_asset_hdr_rec.set_of_books_id;
2023 h_eofy_reserve := p_asset_fin_rec_new.eofy_reserve;
2024
2025 -- Populate Subtract Ytd Flag
2026 if not fa_cache_pkg.fazccmt(X_method => l_asset_fin_rec_new.deprn_method_code,
2027 X_life => l_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec) then
2028 raise pop_mem_amt_err;
2029 end if;
2030
2031 -- Get Period Counter for current period
2032 h_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter;
2033
2034 -- Get Reserve Amount between member's DPIS and current period -- For Source Group Reserve
2035 if p_mrc_sob_type_code <> 'R' then
2036
2037 select fiscal_year into h_cur_fiscal_year
2038 from fa_deprn_periods
2039 where book_type_code = h_book_type_code
2040 and period_counter = h_period_counter;
2041
2042 open MEM_EXP_RESERVE;
2043 fetch MEM_EXP_RESERVE into h_reserve_dpis_current,h_ytd_deprn,h_ds_fiscal_year;
2044 if MEM_EXP_RESERVE%NOTFOUND then
2045 h_reserve_dpis_current := 0;
2046 end if;
2047 close MEM_EXP_RESERVE;
2048
2049 open FA_RET_RSV;
2050 fetch FA_RET_RSV into h_adj_eofy_reserve;
2051 close FA_RET_RSV;
2052
2053 open FA_ADJ_RESERVE;
2054 fetch FA_ADJ_RESERVE into h_adj_reserve;
2055 close FA_ADJ_RESERVE;
2056
2057 else
2058
2059 select fiscal_year into h_cur_fiscal_year
2060 from fa_mc_deprn_periods
2061 where book_type_code = h_book_type_code
2062 and period_counter = h_period_counter
2063 and set_of_books_id = h_set_of_books_id;
2064
2065 open MEM_EXP_RESERVE_MRC;
2066 fetch MEM_EXP_RESERVE_MRC into h_reserve_dpis_current,h_ytd_deprn,h_ds_fiscal_year;
2067 if MEM_EXP_RESERVE_MRC%NOTFOUND then
2068 h_reserve_dpis_current := 0;
2069 end if;
2070 close MEM_EXP_RESERVE_MRC;
2071
2072 open FA_RET_RSV_MRC;
2073 fetch FA_RET_RSV_MRC into h_adj_eofy_reserve;
2074 close FA_RET_RSV_MRC;
2075
2076 open FA_ADJ_RESERVE_MRC;
2077 fetch FA_ADJ_RESERVE_MRC into h_adj_reserve;
2078 close FA_ADJ_RESERVE_MRC;
2079
2080 end if;
2081
2082 -- calculate current eofy_reserve using amounts above
2083 h_eofy_reserve := p_mem_asset_fin_rec_new.eofy_reserve;
2084
2085 if (p_log_level_rec.statement_level) then
2086 fa_debug_pkg.add(l_calling_fn,'h_eofy_reserve',h_eofy_reserve, p_log_level_rec => p_log_level_rec);
2087 fa_debug_pkg.add(l_calling_fn,'h_cur_fiscal_yesr',h_cur_fiscal_year, p_log_level_rec => p_log_level_rec);
2088 fa_debug_pkg.add(l_calling_fn,'h_ds_fiscal_year',h_ds_fiscal_year, p_log_level_rec => p_log_level_rec);
2089 fa_debug_pkg.add(l_calling_fn,'h_reserve_dpis_current',h_reserve_dpis_current, p_log_level_rec => p_log_level_rec);
2090 fa_debug_pkg.add(l_calling_fn,'h_ytd_deprn',h_ytd_deprn, p_log_level_rec => p_log_level_rec);
2091 fa_debug_pkg.add(l_calling_fn,'h_adj_eofy_reserve',h_adj_eofy_reserve, p_log_level_rec => p_log_level_rec);
2092 fa_debug_pkg.add(l_calling_fn,'h_adj_reserve',h_adj_reserve, p_log_level_rec => p_log_level_rec);
2093 end if;
2094
2095 if nvl(h_eofy_reserve,0) = 0 then
2096 if h_cur_fiscal_year = h_ds_fiscal_year then
2097 h_eofy_reserve := h_reserve_dpis_current - h_ytd_deprn + nvl(h_adj_eofy_reserve,0) + nvl(h_adj_reserve,0);
2098 else
2099 h_eofy_reserve := h_reserve_dpis_current;
2100 end if;
2101 end if;
2102
2103 if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
2104 h_reserve_dpis_current := nvl(h_eofy_reserve,0);
2105 end if; -- Subtarct Flag
2106
2107 if (p_src_dest = 'SOURCE') then
2108 px_group_reclass_options_rec.reserve_amount := h_reserve_dpis_current;
2109 end if;
2110
2111 if (p_log_level_rec.statement_level) then
2112 fa_debug_pkg.add(l_calling_fn,'reserve_amount',px_group_reclass_options_rec.reserve_amount, p_log_level_rec => p_log_level_rec);
2113 end if;
2114
2115 -- Get Period Counter of amortization start date
2116 if (p_trans_rec.amortization_start_date <> p_mem_asset_fin_rec_new.date_placed_in_service) then
2117
2118 --Bug6933735: Replaced fa_deprn_period based cursor with following.
2119 select fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM period_counter
2120 , fy.fiscal_year fiscal_year
2121 into h_period_counter,h_amort_fiscal_year
2122 from fa_fiscal_year fy
2123 , fa_calendar_types ct
2124 , fa_calendar_periods cp
2125 where fa_cache_pkg.fazcbc_record.deprn_calendar = ct.calendar_type
2126 and fa_cache_pkg.fazcbc_record.fiscal_year_name = fy.fiscal_year_name
2127 and ct.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
2128 and ct.calendar_type = cp.calendar_type
2129 and cp.start_date between fy.start_date and fy.end_date
2130 and fa_cache_pkg.fazcbc_record.last_period_counter + 1 >= fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM
2131 and h_amort_start_date between cp.start_date and cp.end_date;
2132
2133 h_period_counter := h_period_counter - 1;
2134
2135 -- Get Reserve Amount between amortization start date and current date -- For destination
2136 if (p_mrc_sob_type_code <> 'R') then
2137
2138 open MEM_EXP_RESERVE;
2139 fetch MEM_EXP_RESERVE into h_reserve_dpis_amort,h_ytd_deprn,h_ds_fiscal_year;
2140 if MEM_EXP_RESERVE%NOTFOUND then
2141 h_reserve_dpis_amort := 0;
2142 end if;
2143 close MEM_EXP_RESERVE;
2144
2145 open FA_RET_RSV;
2146 fetch FA_RET_RSV into h_adj_eofy_reserve;
2147 close FA_RET_RSV;
2148
2149 open FA_ADJ_RESERVE;
2150 fetch FA_ADJ_RESERVE into h_adj_reserve;
2151 close FA_ADJ_RESERVE;
2152
2153 else
2154
2155 open MEM_EXP_RESERVE_MRC;
2156 fetch MEM_EXP_RESERVE_MRC into h_reserve_dpis_amort,h_ytd_deprn,h_ds_fiscal_year;
2157 if MEM_EXP_RESERVE_MRC%NOTFOUND then
2158 h_reserve_dpis_amort := 0;
2159 end if;
2160 close MEM_EXP_RESERVE_MRC;
2161
2162 open FA_RET_RSV_MRC;
2163 fetch FA_RET_RSV_MRC into h_adj_eofy_reserve;
2164 close FA_RET_RSV_MRC;
2165
2166 open FA_ADJ_RESERVE_MRC;
2167 fetch FA_ADJ_RESERVE_MRC into h_adj_reserve;
2168 close FA_ADJ_RESERVE_MRC;
2169
2170 end if;
2171
2172 if (p_log_level_rec.statement_level) then
2173 fa_debug_pkg.add(l_calling_fn,'h_cur_fiscal_yesr',h_cur_fiscal_year, p_log_level_rec => p_log_level_rec);
2174 fa_debug_pkg.add(l_calling_fn,'h_amort_fiscal_year',h_amort_fiscal_year, p_log_level_rec => p_log_level_rec);
2175 fa_debug_pkg.add(l_calling_fn,'h_ds_fiscal_year',h_ds_fiscal_year, p_log_level_rec => p_log_level_rec);
2176 fa_debug_pkg.add(l_calling_fn,'h_reserve_dpis_amort',h_reserve_dpis_amort, p_log_level_rec => p_log_level_rec);
2177 fa_debug_pkg.add(l_calling_fn,'h_ytd_deprn',h_ytd_deprn, p_log_level_rec => p_log_level_rec);
2178 fa_debug_pkg.add(l_calling_fn,'h_adj_eofy_reserve',h_adj_eofy_reserve, p_log_level_rec => p_log_level_rec);
2179 fa_debug_pkg.add(l_calling_fn,'h_adj_reserve',h_adj_reserve, p_log_level_rec => p_log_level_rec);
2180 end if;
2181
2182 -- calculate current eofy_reserve using amounts above
2183 if h_cur_fiscal_year <> h_amort_fiscal_year then
2184 if h_amort_fiscal_year = h_ds_fiscal_year then
2185 h_eofy_reserve := h_reserve_dpis_amort - h_ytd_deprn + nvl(h_adj_eofy_reserve,0) + nvl(h_adj_reserve,0);
2186 else
2187 h_eofy_reserve := h_reserve_dpis_amort;
2188 end if;
2189 end if;
2190
2191 px_group_reclass_options_rec.source_exp_amount := h_reserve_dpis_current - h_reserve_dpis_amort;
2192 -- px_group_reclass_options_rec.reserve_amount := h_reserve_dpis_amort;
2193
2194 else -- amortization start date is equal to the DPIS
2195
2196 h_eofy_reserve := 0;
2197 px_group_reclass_options_rec.source_exp_amount := h_reserve_dpis_current;
2198
2199 end if;
2200
2201 px_group_reclass_options_rec.source_eofy_reserve := h_eofy_reserve;
2202
2203 if (p_log_level_rec.statement_level) then
2204 fa_debug_pkg.add(l_calling_fn,'reserve_dpis_current',h_reserve_dpis_current, p_log_level_rec => p_log_level_rec);
2205 fa_debug_pkg.add(l_calling_fn,'reserve_dpis_amort',h_reserve_dpis_amort, p_log_level_rec => p_log_level_rec);
2206 fa_debug_pkg.add(l_calling_fn,'source_exp_amount',px_group_reclass_options_rec.source_exp_amount, p_log_level_rec => p_log_level_rec);
2207 fa_debug_pkg.add(l_calling_fn,'eofy_reserve',px_group_reclass_options_rec.source_eofy_reserve, p_log_level_rec => p_log_level_rec);
2208 end if;
2209
2210 -- x_eofy_reserve := h_eofy_reserve;
2211
2212 return true;
2213
2214 EXCEPTION
2215 when pop_mem_amt_err then
2216 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2217 return false;
2218
2219 when others then
2220 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2221 return false;
2222
2223 end populate_member_amounts;
2224
2225
2226 END FA_GROUP_RECLASS2_PVT;