DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_TERMINAL_GAIN_LOSS_PVT

Source


1 PACKAGE BODY FA_TERMINAL_GAIN_LOSS_PVT as
2 /* $Header: FAVTGLB.pls 120.2 2005/12/02 22:36:23 tkawamur noship $   */
3 
4 FUNCTION fadtgl (
5    p_asset_id          IN NUMBER,
6    p_book_type_code    IN VARCHAR2,
7    p_deprn_reserve     IN NUMBER,
8    p_mrc_sob_type_code IN VARCHAR2,
9    p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null) RETURN NUMBER IS
10 
11    l_calling_fn      varchar2(50) := 'FA_TERMINAL_GAIN_LOSS_PVT.fadtgl';
12    l_db_title        varchar2(30) := 'fadtgl';
13    l_trans_rec       FA_API_TYPES.trans_rec_type;
14    l_asset_hdr_rec   FA_API_TYPES.asset_hdr_rec_type;
15    l_asset_type_rec  FA_API_TYPES.asset_type_rec_type;
16    l_asset_fin_rec   FA_API_TYPES.asset_fin_rec_type;
17    l_period_rec      FA_API_TYPES.period_rec_type;
18    l_asset_cat_rec   FA_API_TYPES.asset_cat_rec_type;
19    l_adj             FA_ADJUST_TYPE_PKG.FA_ADJ_ROW_STRUCT;
20 
21    l_date_effective  date;
22    l_updated_by      number;
23    l_update_login   number;
24 
25    l_th_rowid       ROWID;
26    l_bks_rowid      ROWID;
27    l_status         boolean;
28 
29    CURSOR c_get_deprn_run_date IS
30       select last_update_date
31            , last_updated_by
32            , last_update_login
33       from   fa_book_controls
34       where  book_type_code = p_book_type_code;
35 
36    CURSOR c_get_mc_deprn_run_date IS
37       select last_update_date
38            , last_updated_by
39            , last_update_login
40       from   fa_book_controls_mrc_v
41       where  book_type_code = p_book_type_code;
42 
43     -- +++++ Get Current Unit and category_id of Group Asset +++++
44    CURSOR c_get_unit IS
45      select units,
46             category_id
47      from   fa_asset_history
48      where  asset_id = l_asset_hdr_rec.asset_id
49      and    transaction_header_id_out is null;
50 
51    tgl_err  EXCEPTION;
52 
53 BEGIN
54 
55    if (p_log_level_rec.statement_level) then
56       fa_debug_pkg.add(l_db_title, 'BEGIN', p_asset_id ,p_log_level_rec => p_log_level_rec);
57    end if;
58 
59    l_asset_hdr_rec.asset_id := p_asset_id;
60    l_asset_hdr_rec.book_type_code := p_book_type_code;
61    l_asset_type_rec.asset_type := 'GROUP';
62 
63    -- call the cache for the primary transaction book
64    if NOT fa_cache_pkg.fazcbc(X_book => l_asset_hdr_rec.book_type_code
65   				,p_log_level_rec => p_log_level_rec) then
66       if (p_log_level_rec.statement_level) then
67          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling fazcbc',
68                           p_log_level_rec => p_log_level_rec);
69       end if;
70 
71       raise tgl_err;
72    end if;
73 
74    -- load the period struct for current period info
75    if not FA_UTIL_PVT.get_period_rec(
76            p_book           => l_asset_hdr_rec.book_type_code,
77            p_effective_date => NULL,
78            x_period_rec     => l_period_rec
79            ,p_log_level_rec => p_log_level_rec) then
80       if (p_log_level_rec.statement_level) then
81          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling get_period_rec',
82                           p_log_level_rec => p_log_level_rec);
83       end if;
84 
85       raise tgl_err;
86    end if;
87 
88    -- load the old fin structs
89    if not FA_UTIL_PVT.get_asset_fin_rec(
90            p_asset_hdr_rec         => l_asset_hdr_rec,
91            px_asset_fin_rec        => l_asset_fin_rec,
92            p_transaction_header_id => NULL,
93            p_mrc_sob_type_code     => p_mrc_sob_type_code
94            ,p_log_level_rec => p_log_level_rec) then
95 
96       if (p_log_level_rec.statement_level) then
97          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling get_asset_fin_rec',
98                           p_log_level_rec => p_log_level_rec);
99       end if;
100 
101       raise tgl_err;
102    end if;
103 
104    -- Get last_update_date from fa_book_controls
105    -- date effective for this terminal gain loss trx
106    -- will be last_update_date - 1 sec.
107    if (p_mrc_sob_type_code = 'R') then
108       OPEN c_get_mc_deprn_run_date;
109       FETCH c_get_mc_deprn_run_date INTO l_date_effective
110                                        , l_updated_by
111                                        , l_update_login;
112       CLOSE c_get_mc_deprn_run_date;
113    else
114       OPEN c_get_deprn_run_date;
115       FETCH c_get_deprn_run_date INTO l_date_effective
116                                     , l_updated_by
117                                     , l_update_login;
118       CLOSE c_get_deprn_run_date;
119    end if;
120 
121    l_date_effective := l_date_effective - (1/24/60/60);
122 
123    if (p_log_level_rec.statement_level) then
124       fa_debug_pkg.add(l_db_title, 'INSERT', 'FA_TRANSACTION_HEADERS',
125                        p_log_level_rec => p_log_level_rec);
126    end if;
127 
128    --
129    -- Proceed to process FA_TRANSACTION_HEADERS if this is primary book');
130    --
131    if (nvl(p_mrc_sob_type_code, 'P') <> 'R') then
132       if (p_log_level_rec.statement_level) then
133          fa_debug_pkg.add(l_db_title, 'INSERT', 'FA_TRANSACTION_HEADERS',
134                           p_log_level_rec => p_log_level_rec);
135       end if;
136 
137       l_trans_rec.who_info.last_update_date := l_date_effective;
138       l_trans_rec.who_info.creation_date := l_date_effective;
139 
140       SELECT fa_transaction_headers_s.nextval
141       INTO   l_trans_rec.transaction_header_id
142       FROM   DUAL;
143 
144       l_trans_rec.transaction_subtype := 'AMORTIZED';
145       l_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
146       l_trans_rec.transaction_key := 'TG';
147       l_trans_rec.transaction_date_entered := greatest(l_period_rec.calendar_period_open_date,
148                                                least(sysdate,l_period_rec.calendar_period_close_date));
149       l_trans_rec.amortization_start_date := l_trans_rec.transaction_date_entered;
150       l_trans_rec.calling_interface := 'FADEPR';
151 
152 
153       if (p_log_level_rec.statement_level) then
154          fa_debug_pkg.add(l_db_title, 'Calling', 'FA_XLA_EVENTS_PVT.create_transaction_event',
155                           p_log_level_rec => p_log_level_rec);
156       end if;
157 
158       if not FA_XLA_EVENTS_PVT.create_transaction_event(
159                   p_asset_hdr_rec          => l_asset_hdr_rec,
160                   p_asset_type_rec         => l_asset_type_rec,
161                   px_trans_rec             => l_trans_rec,
162                   p_event_status           => NULL,
163                   p_calling_fn             => l_calling_fn
164                   ,p_log_level_rec => p_log_level_rec) then
165 
166          if (p_log_level_rec.statement_level) then
167             fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling create_transaction_event',
168                              p_log_level_rec => p_log_level_rec);
169          end if;
170 
171          raise tgl_err;
172       end if;
173 
174 
175       FA_TRANSACTION_HEADERS_PKG.Insert_Row
176                       (X_Rowid                          => l_th_rowid,
177                        X_Transaction_Header_Id          => l_trans_rec.transaction_header_id,
178                        X_Book_Type_Code                 => l_asset_hdr_rec.book_type_code,
179                        X_Asset_Id                       => l_asset_hdr_rec.asset_id,
180                        X_Transaction_Type_Code          => l_trans_rec.transaction_type_code,
181                        X_Transaction_Date_Entered       => l_trans_rec.transaction_date_entered,
182                        X_Date_Effective                 => l_trans_rec.who_info.creation_date,
183                        X_Last_Update_Date               => l_trans_rec.who_info.last_update_date,
184                        X_Last_Updated_By                => l_trans_rec.who_info.last_updated_by,
185                        X_Transaction_Name               => l_trans_rec.transaction_name,
186                        X_Invoice_Transaction_Id         => null,
187                        X_Source_Transaction_Header_Id   => l_trans_rec.Source_Transaction_Header_Id,
188                        X_Mass_Reference_Id              => l_trans_rec.mass_reference_id,
189                        X_Last_Update_Login              => l_trans_rec.who_info.last_update_login,
190                        X_Transaction_Subtype            => l_trans_rec.transaction_subtype,
191                        X_Attribute1                     => l_trans_rec.desc_flex.attribute1,
192                        X_Attribute2                     => l_trans_rec.desc_flex.attribute2,
193                        X_Attribute3                     => l_trans_rec.desc_flex.attribute3,
194                        X_Attribute4                     => l_trans_rec.desc_flex.attribute4,
195                        X_Attribute5                     => l_trans_rec.desc_flex.attribute5,
196                        X_Attribute6                     => l_trans_rec.desc_flex.attribute6,
197                        X_Attribute7                     => l_trans_rec.desc_flex.attribute7,
198                        X_Attribute8                     => l_trans_rec.desc_flex.attribute8,
199                        X_Attribute9                     => l_trans_rec.desc_flex.attribute9,
200                        X_Attribute10                    => l_trans_rec.desc_flex.attribute10,
201                        X_Attribute11                    => l_trans_rec.desc_flex.attribute11,
202                        X_Attribute12                    => l_trans_rec.desc_flex.attribute12,
203                        X_Attribute13                    => l_trans_rec.desc_flex.attribute13,
204                        X_Attribute14                    => l_trans_rec.desc_flex.attribute14,
205                        X_Attribute15                    => l_trans_rec.desc_flex.attribute15,
206                        X_Attribute_Category_Code        => l_trans_rec.desc_flex.attribute_category_code,
207                        X_Transaction_Key                => l_trans_rec.transaction_key,
208                        X_Amortization_Start_Date        => l_trans_rec.amortization_start_date,
209                        X_Calling_Interface              => l_trans_rec.calling_interface,
210                        X_Mass_Transaction_ID            => l_trans_rec.mass_transaction_id,
211                        X_Member_Transaction_Header_Id   => l_trans_rec.member_transaction_header_id,
212                        X_Trx_Reference_Id               => l_trans_rec.trx_reference_id,
213                        X_Event_Id                       => l_trans_rec.event_id,
214                        X_Return_Status                  => l_status,
215                        X_Calling_Fn                     => l_calling_fn
216                        ,p_log_level_rec => p_log_level_rec);
217       if not l_status then
218          if (p_log_level_rec.statement_level) then
219             fa_debug_pkg.add(l_db_title, 'Failed to insert ', 'FA_TRANSACTION_HEADERS',
220                              p_log_level_rec => p_log_level_rec);
221          end if;
222          raise tgl_err;
223       end if;
224 
225    end if;
226 
227    if (p_log_level_rec.statement_level) then
228       fa_debug_pkg.add(l_db_title, 'INSERT', 'FA_ADJUSTMENTS',
229                        p_log_level_rec => p_log_level_rec);
230    end if;
231 
232    -- Create following entries in FA_ADJUSTMENTS
233    -- DR  RESERVE
234    --   CR NBV GAIN or NBV LOSS
235 
236    l_adj.asset_id                := l_asset_hdr_rec.asset_id;
237    l_adj.book_type_code          := l_asset_hdr_rec.book_type_code;
238    l_adj.period_counter_created  := l_period_rec.period_counter;
239    l_adj.period_counter_adjusted := l_period_rec.period_counter;
240    l_adj.transaction_header_id   := l_trans_rec.transaction_header_id;
241    l_adj.source_type_code        := 'ADJUSTMENT';
242 
243    l_adj.selection_retid         := 0;
244    l_adj.selection_mode          := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
245    l_adj.leveling_flag           := TRUE;
246    l_adj.flush_adj_flag          := FALSE;
247    l_adj.last_update_date        := sysdate;
248    l_adj.gen_ccid_flag           := TRUE;
249    l_adj.adjustment_type         := 'RESERVE';
250    l_adj.account_type            := 'DEPRN_RESERVE_ACCT';
251 
252    l_adj.adjustment_amount       := abs(p_deprn_reserve);
253 
254    if (p_deprn_reserve > 0) then
255       l_adj.debit_credit_flag    := 'DR';
256    else
257       l_adj.debit_credit_flag    := 'CR';
258    end if;
259 
260 
261    OPEN c_get_unit;
262    FETCH c_get_unit INTO l_adj.current_units , l_asset_cat_rec.category_id;
263    CLOSE c_get_unit;
264 
265    if not fa_cache_pkg.fazccb(l_asset_hdr_rec.book_type_code,
266                               l_asset_cat_rec.category_id
267                               ,p_log_level_rec => p_log_level_rec) then
268       if (p_log_level_rec.statement_level) then
269          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling fazccb',
270                           p_log_level_rec => p_log_level_rec);
271       end if;
272 
273       raise tgl_err;
274    end if;
275 
276    l_adj.account           := fa_cache_pkg.fazccb_record.DEPRN_RESERVE_ACCT;
277 
278    if (p_log_level_rec.statement_level) then
279       fa_debug_pkg.add(l_db_title, 'CALL', 'FA_INS_ADJUST_PKG.faxinaj for RESERVE',
280                        p_log_level_rec => p_log_level_rec);
281    end if;
282 
283    if not FA_INS_ADJUST_PKG.faxinaj(
284                l_adj,
285                l_trans_rec.who_info.last_update_date,
286                l_trans_rec.who_info.last_updated_by,
287                l_trans_rec.who_info.last_update_login
288                ,p_log_level_rec => p_log_level_rec) then
289 
290       if (p_log_level_rec.statement_level) then
291          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling faxinaj',
292                           p_log_level_rec => p_log_level_rec);
293       end if;
294 
295       raise tgl_err;
296    end if;
297 
298    l_adj.adjustment_type      := 'NBV RETIRED';
299    l_adj.adjustment_amount    := abs(p_deprn_reserve);
300    l_adj.flush_adj_flag       := TRUE;
301 
302    if (p_deprn_reserve > 0) then
303       l_adj.debit_credit_flag := 'CR';
304       l_adj.account_type      := 'NBV_RETIRED_GAIN_ACCT';
305       l_adj.account           := fa_cache_pkg.fazcbc_record.nbv_retired_gain_acct;
306    else
307       l_adj.debit_credit_flag := 'DR';
308       l_adj.account_type      := 'NBV_RETIRED_LOSS_ACCT';
309       l_adj.account           := fa_cache_pkg.fazcbc_record.nbv_retired_loss_acct;
310    end if;
311 
312    if (p_log_level_rec.statement_level) then
313       fa_debug_pkg.add(l_db_title, 'CALL', 'FA_INS_ADJUST_PKG.faxinaj for NBV GAIN/LOSS',
314                        p_log_level_rec => p_log_level_rec);
315    end if;
316 
317    if not FA_INS_ADJUST_PKG.faxinaj(
318                l_adj,
319                l_trans_rec.who_info.last_update_date,
320                l_trans_rec.who_info.last_updated_by,
321                l_trans_rec.who_info.last_update_login
322                ,p_log_level_rec => p_log_level_rec) then
323       if (p_log_level_rec.statement_level) then
324          fa_debug_pkg.add(l_db_title, 'ERROR', 'Calling faxinaj',
325                           p_log_level_rec => p_log_level_rec);
326       end if;
327 
328       raise tgl_err;
329    end if;
330 
331 
332    -- Deactivate(Update) FA_BOOKS
333    if (p_log_level_rec.statement_level) then
334       fa_debug_pkg.add(l_db_title, 'DEACTIVATE', 'FA_BOOKS',
335                        p_log_level_rec => p_log_level_rec);
336    end if;
337 
338    fa_books_pkg.deactivate_row
339         (X_asset_id                  => l_asset_hdr_rec.asset_id,
340          X_book_type_code            => l_asset_hdr_rec.book_type_code,
341          X_transaction_header_id_out => l_trans_rec.transaction_header_id,
342          X_date_ineffective          => l_trans_rec.who_info.last_update_date,
343          X_mrc_sob_type_code         => p_mrc_sob_type_code,
344          X_Calling_Fn                => l_calling_fn
345          ,p_log_level_rec => p_log_level_rec);
346 
347    -- Insert into FA_BOOKS
348    if (p_log_level_rec.statement_level) then
349       fa_debug_pkg.add(l_db_title, 'INSERT', 'FA_BOOKS',
350                        p_log_level_rec => p_log_level_rec);
351    end if;
352 
353    fa_books_pkg.insert_row
354          (X_Rowid                        => l_bks_rowid,
355           X_Book_Type_Code               => l_asset_hdr_rec.book_type_code,
356           X_Asset_Id                     => l_asset_hdr_rec.asset_id,
357           X_Date_Placed_In_Service       => l_asset_fin_rec.date_placed_in_service,
358           X_Date_Effective               => l_trans_rec.who_info.last_update_date,
359           X_Deprn_Start_Date             => l_asset_fin_rec.deprn_start_date,
360           X_Deprn_Method_Code            => l_asset_fin_rec.deprn_method_code,
361           X_Life_In_Months               => l_asset_fin_rec.life_in_months,
362           X_Rate_Adjustment_Factor       => l_asset_fin_rec.rate_adjustment_factor,
363           X_Adjusted_Cost                => l_asset_fin_rec.adjusted_cost,
364           X_Cost                         => l_asset_fin_rec.cost,
365           X_Original_Cost                => l_asset_fin_rec.original_cost,
366           X_Salvage_Value                => l_asset_fin_rec.salvage_value,
367           X_Prorate_Convention_Code      => l_asset_fin_rec.prorate_convention_code,
368           X_Prorate_Date                 => l_asset_fin_rec.prorate_date,
369           X_Cost_Change_Flag             => l_asset_fin_rec.cost_change_flag,
370           X_Adjustment_Required_Status   => l_asset_fin_rec.adjustment_required_status,
371           X_Capitalize_Flag              => l_asset_fin_rec.capitalize_flag,
372           X_Retirement_Pending_Flag      => l_asset_fin_rec.retirement_pending_flag,
373           X_Depreciate_Flag              => l_asset_fin_rec.depreciate_flag,
374           X_Disabled_Flag                => l_asset_fin_rec.disabled_flag, --HH
375           X_Last_Update_Date             => l_trans_rec.who_info.last_update_date,
376           X_Last_Updated_By              => l_trans_rec.who_info.last_updated_by,
377           X_Date_Ineffective             => NULL,
378           X_Transaction_Header_Id_In     => l_trans_rec.transaction_header_id,
379           X_Transaction_Header_Id_Out    => NULL,
380           X_Itc_Amount_Id                => l_asset_fin_rec.itc_amount_id,
381           X_Itc_Amount                   => l_asset_fin_rec.itc_amount,
382           X_Retirement_Id                => l_asset_fin_rec.retirement_id,
383           X_Tax_Request_Id               => l_asset_fin_rec.tax_request_id,
384           X_Itc_Basis                    => l_asset_fin_rec.itc_basis,
385           X_Basic_Rate                   => l_asset_fin_rec.basic_rate,
386           X_Adjusted_Rate                => l_asset_fin_rec.adjusted_rate,
387           X_Bonus_Rule                   => l_asset_fin_rec.bonus_rule,
388           X_Ceiling_Name                 => l_asset_fin_rec.ceiling_name,
389           X_Recoverable_Cost             => l_asset_fin_rec.recoverable_cost,
390           X_Last_Update_Login            => l_trans_rec.who_info.last_update_login,
391           X_Adjusted_Capacity            => l_asset_fin_rec.adjusted_capacity,
392           X_Fully_Rsvd_Revals_Counter    => l_asset_fin_rec.fully_rsvd_revals_counter,
393           X_Idled_Flag                   => l_asset_fin_rec.idled_flag,
394           X_Period_Counter_Capitalized   => l_asset_fin_rec.period_counter_capitalized,
395           X_PC_Fully_Reserved            => l_asset_fin_rec.period_counter_fully_reserved,
396           X_Period_Counter_Fully_Retired => l_asset_fin_rec.period_counter_fully_retired,
397           X_Production_Capacity          => l_asset_fin_rec.production_capacity,
398           X_Reval_Amortization_Basis     => l_asset_fin_rec.reval_amortization_basis,
399           X_Reval_Ceiling                => l_asset_fin_rec.reval_ceiling,
400           X_Unit_Of_Measure              => l_asset_fin_rec.unit_of_measure,
401           X_Unrevalued_Cost              => l_asset_fin_rec.unrevalued_cost,
402           X_Annual_Deprn_Rounding_Flag   => l_asset_fin_rec.annual_deprn_rounding_flag,
403           X_Percent_Salvage_Value        => l_asset_fin_rec.percent_salvage_value,
404           X_Allowed_Deprn_Limit          => l_asset_fin_rec.allowed_deprn_limit,
405           X_Allowed_Deprn_Limit_Amount   => l_asset_fin_rec.allowed_deprn_limit_amount,
406           X_Period_Counter_Life_Complete => l_asset_fin_rec.period_counter_life_complete,
407           X_Adjusted_Recoverable_Cost    => l_asset_fin_rec.adjusted_recoverable_cost,
408           X_Short_Fiscal_Year_Flag       => l_asset_fin_rec.short_fiscal_year_flag,
409           X_Conversion_Date              => l_asset_fin_rec.conversion_date,
410           X_Orig_Deprn_Start_Date        => l_asset_fin_rec.orig_deprn_start_date,
411           X_Remaining_Life1              => l_asset_fin_rec.remaining_life1,
412           X_Remaining_Life2              => l_asset_fin_rec.remaining_life2,
413           X_Old_Adj_Cost                 => l_asset_fin_rec.old_adjusted_cost,
414           X_Formula_Factor               => l_asset_fin_rec.formula_factor,
415           X_gf_Attribute1                => l_asset_fin_rec.global_attribute1,
416           X_gf_Attribute2                => l_asset_fin_rec.global_attribute2,
417           X_gf_Attribute3                => l_asset_fin_rec.global_attribute3,
418           X_gf_Attribute4                => l_asset_fin_rec.global_attribute4,
419           X_gf_Attribute5                => l_asset_fin_rec.global_attribute5,
420           X_gf_Attribute6                => l_asset_fin_rec.global_attribute6,
421           X_gf_Attribute7                => l_asset_fin_rec.global_attribute7,
422           X_gf_Attribute8                => l_asset_fin_rec.global_attribute8,
423           X_gf_Attribute9                => l_asset_fin_rec.global_attribute9,
424           X_gf_Attribute10               => l_asset_fin_rec.global_attribute10,
425           X_gf_Attribute11               => l_asset_fin_rec.global_attribute11,
426           X_gf_Attribute12               => l_asset_fin_rec.global_attribute12,
427           X_gf_Attribute13               => l_asset_fin_rec.global_attribute13,
428           X_gf_Attribute14               => l_asset_fin_rec.global_attribute14,
429           X_gf_Attribute15               => l_asset_fin_rec.global_attribute15,
430           X_gf_Attribute16               => l_asset_fin_rec.global_attribute16,
431           X_gf_Attribute17               => l_asset_fin_rec.global_attribute17,
432           X_gf_Attribute18               => l_asset_fin_rec.global_attribute18,
433           X_gf_Attribute19               => l_asset_fin_rec.global_attribute19,
434           X_gf_Attribute20               => l_asset_fin_rec.global_attribute20,
435           X_global_attribute_category    => l_asset_fin_rec.global_attribute_category,
436           X_group_asset_id               => l_asset_fin_rec.group_asset_id,
437           X_salvage_type                 => l_asset_fin_rec.salvage_type,
438           X_deprn_limit_type             => l_asset_fin_rec.deprn_limit_type,
439           X_over_depreciate_option       => l_asset_fin_rec.over_depreciate_option,
440           X_super_group_id               => l_asset_fin_rec.super_group_id,
441           X_reduction_rate               => l_asset_fin_rec.reduction_rate,
442           X_reduce_addition_flag         => l_asset_fin_rec.reduce_addition_flag,
443           X_reduce_adjustment_flag       => l_asset_fin_rec.reduce_adjustment_flag,
444           X_reduce_retirement_flag       => l_asset_fin_rec.reduce_retirement_flag,
445           X_recognize_gain_loss          => l_asset_fin_rec.recognize_gain_loss,
446           X_recapture_reserve_flag       => l_asset_fin_rec.recapture_reserve_flag,
447           X_limit_proceeds_flag          => l_asset_fin_rec.limit_proceeds_flag,
448           X_terminal_gain_loss           => l_asset_fin_rec.terminal_gain_loss,
449           X_exclude_proceeds_from_basis  => l_asset_fin_rec.exclude_proceeds_from_basis,
450           X_retirement_deprn_option      => l_asset_fin_rec.retirement_deprn_option,
451           X_tracking_method              => l_asset_fin_rec.tracking_method,
452           X_allocate_to_fully_rsv_flag   => l_asset_fin_rec.allocate_to_fully_rsv_flag,
453           X_allocate_to_fully_ret_flag   => l_asset_fin_rec.allocate_to_fully_ret_flag,
454           X_exclude_fully_rsv_flag       => l_asset_fin_rec.exclude_fully_rsv_flag,
455           X_excess_allocation_option     => l_asset_fin_rec.excess_allocation_option,
456           X_depreciation_option          => l_asset_fin_rec.depreciation_option,
457           X_member_rollup_flag           => l_asset_fin_rec.member_rollup_flag,
458           X_ytd_proceeds                 => l_asset_fin_rec.ytd_proceeds,
459           X_ltd_proceeds                 => l_asset_fin_rec.ltd_proceeds,
460           X_eofy_reserve                 => l_asset_fin_rec.eofy_reserve,
461           X_cip_cost                     => l_asset_fin_rec.cip_cost,
462           X_terminal_gain_loss_amount    => p_deprn_reserve,
463           X_terminal_gain_loss_flag      => null,
464           X_ltd_cost_of_removal          => l_asset_fin_rec.ltd_cost_of_removal,
465           X_mrc_sob_type_code            => p_mrc_sob_type_code,
466           X_Return_Status                => l_status,
467           X_Calling_Fn                   => l_calling_fn
468           ,p_log_level_rec => p_log_level_rec);
469 
470 
471    if not l_status then
472       if (p_log_level_rec.statement_level) then
473          fa_debug_pkg.add(l_db_title, 'Failed to insert ', 'FA_BOOKS',
474                           p_log_level_rec => p_log_level_rec);
475       end if;
476       raise tgl_err;
477    end if;
478 
479 -- Update FA_BOOKS_SUMMARY
480    if (p_log_level_rec.statement_level) then
481       fa_debug_pkg.add(l_db_title, 'Update', 'FA_BOOKS_SUMMARY: '||p_mrc_sob_type_code,
482                        p_log_level_rec => p_log_level_rec);
483    end if;
484 
485    if (p_mrc_sob_type_code = 'R') then
486       UPDATE FA_BOOKS_SUMMARY_MRC_V
487       SET    TERMINAL_GAIN_LOSS_AMOUNT = p_deprn_reserve
488            , TERMINAL_GAIN_LOSS_FLAG   = 'C'
489            , RESERVE_ADJUSTMENT_AMOUNT = RESERVE_ADJUSTMENT_AMOUNT + p_deprn_reserve
490            , DEPRN_RESERVE             = DEPRN_RESERVE + p_deprn_reserve
491       WHERE  ASSET_ID                  = l_asset_hdr_rec.asset_id
492       AND    BOOK_TYPE_CODE            = l_asset_hdr_rec.book_type_code
493       AND    PERIOD_COUNTER            = l_period_rec.period_counter;
494    else
495       UPDATE FA_BOOKS_SUMMARY
496       SET    TERMINAL_GAIN_LOSS_AMOUNT = p_deprn_reserve
497            , TERMINAL_GAIN_LOSS_FLAG   = 'C'
498            , RESERVE_ADJUSTMENT_AMOUNT = RESERVE_ADJUSTMENT_AMOUNT + p_deprn_reserve
499            , DEPRN_RESERVE             = DEPRN_RESERVE + p_deprn_reserve
500       WHERE  ASSET_ID                  = l_asset_hdr_rec.asset_id
501       AND    BOOK_TYPE_CODE            = l_asset_hdr_rec.book_type_code
502       AND    PERIOD_COUNTER            = l_period_rec.period_counter;
503    end if;
504 
505 
506    if (p_log_level_rec.statement_level) then
507       fa_debug_pkg.add(l_db_title, 'END', p_asset_id,
508                        p_log_level_rec => p_log_level_rec);
509    end if;
510 
511    return 0;
512 
513 EXCEPTION
514    WHEN tgl_err THEN
515       if (p_log_level_rec.statement_level) then
516          fa_debug_pkg.add(l_db_title, 'EXCEPTION', 'tgl_err',
517                           p_log_level_rec => p_log_level_rec);
518          fa_debug_pkg.add(l_db_title, 'EXCEPTION(tgl_err)', sqlerrm);
519       end if;
520       return 1;
521 
522    WHEN OTHERS THEN
523       if (p_log_level_rec.statement_level) then
524          fa_debug_pkg.add(l_db_title, 'EXCEPTION(OTHERS)', sqlerrm);
525       end if;
526       return 1;
527 
528 END fadtgl;
529 
530 END FA_TERMINAL_GAIN_LOSS_PVT;