DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_GROUP_RECLASS2_PVT

Source


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;