DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGI_IAC_REVAL_INIT_STRUCT

Source


1 PACKAGE BODY IGI_IAC_REVAL_INIT_STRUCT AS
2 -- $Header: igiiarsb.pls 120.10.12000000.1 2007/08/01 16:17:59 npandya ship $
3 
4 --===========================FND_LOG.START=====================================
5 
6 g_state_level NUMBER;
7 g_proc_level  NUMBER;
8 g_event_level NUMBER;
9 g_excep_level NUMBER;
10 g_error_level NUMBER;
11 g_unexp_level NUMBER;
12 g_path        VARCHAR2(100);
13 
14 --===========================FND_LOG.END=======================================
15 
16 l_rec igi_iac_revaluation_rates%rowtype;  -- create this for quicker access via sql navigator
17 
18 g_who_user_id           number;
19 g_who_login_id          number;
20 g_who_date              date;
21 
22 /*
23 procedure log ( p_mesg in varchar2 ) is
24 begin
25  IGI_IAC_REVAL_UTILITIES.log ( p_calling_code => 'INIT_STRUCT'
26                              , p_mesg => p_mesg );
27 end;
28 */
29 function initialize ( fp_reval_control        in   out NOCOPY  IGI_IAC_TYPES.iac_reval_control_type )
30 return boolean is
31   l_Reval_control  IGI_IAC_TYPES.iac_reval_control_type;
32   l_path varchar2(100);
33 begin
34   l_path := g_path||'initialize1';
35    l_reval_control.revaluation_mode := 'P';  --Preview
36    l_reval_control.transaction_type_code := 'REVALUATION';
37    l_reval_control.transaction_sub_type := 'OCCASSIONAL';
38    l_reval_control.adjustment_status := 'PREVIEW';
39    fp_Reval_control := l_reval_control;
40    return true;
41 exception when others then
42    fp_Reval_control := l_reval_control;
43    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
44    return false;
45 end;
46 
47 function initialize ( fp_reval_asset_params   in   out NOCOPY  IGI_IAC_TYPES.iac_reval_asset_params )
48 return boolean is
49    l_Reval_asset_params IGI_IAC_TYPES.iac_reval_asset_params;
50    l_path varchar2(100);
51 begin
52    l_path := g_path||'initialize2';
53    fp_reval_asset_params := l_reval_asset_params;
54    return true;
55 exception when others then
56    fp_reval_asset_params := l_reval_asset_params;
57    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
58    return false;
59 end;
60 
61 function initialize ( fp_reval_input_asset        in   out NOCOPY  IGI_IAC_TYPES.iac_Reval_input_asset )
62 return boolean is
63      fp_reval_input_asset_old  IGI_IAC_TYPES.iac_Reval_input_asset;
64      l_path varchar2(100);
65 begin
66      l_path  := g_path||'initialize3';
67     fp_reval_input_asset_old := fp_reval_input_asset;
68 
69     fp_reval_input_asset.asset_id              := 0;
70     fp_reval_input_asset.book_type_code        := null;
71     fp_reval_input_asset.period_counter        := 0;
72     fp_reval_input_asset.net_book_value        := 0;
73     fp_reval_input_asset.adjusted_cost         := 0;
74     fp_reval_input_asset.operating_acct        := 0;
75     fp_reval_input_asset.reval_reserve         := 0;
76     fp_reval_input_asset.deprn_amount          := 0;
77     fp_reval_input_asset.deprn_reserve         := 0;
78     fp_reval_input_asset.backlog_deprn_reserve := 0;
79     fp_reval_input_asset.general_fund          := 0;
80     fp_reval_input_asset.last_reval_date       := null;
81     fp_reval_input_asset.current_reval_factor   := 0;
82     fp_reval_input_asset.cumulative_reval_factor  := 0;
83     fp_reval_input_asset.created_by           := 0;
84     fp_reval_input_asset.creation_date        := null;
85     fp_reval_input_asset.last_update_login    := 0;
86     fp_reval_input_asset.last_update_date     := null;
87     fp_reval_input_asset.last_updated_by      := 0;
88     return true;
89 exception when others then
93 end;
90    fp_reval_input_asset := fp_reval_input_asset_old;
91    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
92    return false;
94 
95 function initialize ( fp_reval_asset_rules        in   out NOCOPY  IGI_IAC_TYPES.iac_Reval_asset_rules )
96 return boolean is
97   fp_reval_asset_rules_old  IGI_IAC_TYPES.iac_Reval_asset_rules;
98   l_path varchar2(100);
99 begin
100   l_path := g_path||'initialize4';
101  fp_reval_asset_rules_old := fp_reval_asset_rules;
102 
103  fp_reval_asset_rules.revaluation_id             := 0;
104  fp_reval_asset_rules.book_type_code            := null;
105  fp_reval_asset_rules.category_id               := 0;
106  fp_reval_asset_rules.asset_id                  := 0;
107  fp_reval_asset_rules.revaluation_factor        := 0;
108  fp_reval_asset_rules.revaluation_type          := null;
109  fp_reval_asset_rules.new_cost                  := 0;
110  fp_reval_asset_rules.current_cost              := 0;
111  fp_reval_asset_rules.selected_for_reval_flag   := null;
112  fp_reval_asset_rules.selected_for_calc_flag    := null;
113  fp_reval_asset_rules.created_by                := 0;
114  fp_reval_asset_rules.creation_date             := null;
115  fp_reval_asset_rules.last_update_login         := 0;
116  fp_reval_asset_rules.last_update_date          := null;
117  fp_reval_asset_rules.last_updated_by           := 0;
118  fp_reval_asset_rules.allow_prof_update         := null;
119    return true;
120 exception when others then
121    fp_reval_asset_rules := fp_reval_asset_rules_old;
122    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
123    return false;
124 end;
125 
126 function initialize ( fp_asset_info        in   out NOCOPY  IGI_IAC_TYPES.fa_hist_asset_info )
127 return boolean is
128  l_asset_info IGI_IAC_TYPES.fa_hist_asset_info;
129  l_path varchar2(100);
130 begin
131  l_path := g_path||'initialize5';
132    fp_Asset_info := l_asset_info;
133    return true;
134 exception when others then
135    fp_Asset_info := l_asset_info;
136    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
137    return false;
138 end;
139 
140 function initialize ( fp_Reval_Rates         in   out NOCOPY  IGI_IAC_TYPES.iac_reval_rate_params )
141 return boolean is
142     fp_Reval_Rates_old IGI_IAC_TYPES.iac_reval_rate_params;
143     l_path varchar2(100);
144 begin
145     l_path := g_path||'initialize6';
146     fp_Reval_Rates_old := fp_Reval_Rates;
147 
148     fp_Reval_Rates.asset_id                  := 0;
149     fp_Reval_Rates.book_type_code            := null;
150     fp_Reval_Rates.revaluation_id            := 0;
151     fp_Reval_Rates.period_counter            := 0;
152     fp_Reval_Rates.reval_type                := null;
153     fp_Reval_Rates.current_reval_factor      := 0;
154     fp_Reval_Rates.cumulative_reval_factor   := 0;
155     fp_Reval_Rates.processed_flag            := null;
156     fp_Reval_Rates.latest_record             := null;
157     fp_Reval_Rates.created_by                := 0;
158     fp_Reval_Rates.creation_date             := null;
159     fp_Reval_Rates.last_update_login         := 0;
160     fp_Reval_Rates.last_update_date          := null;
161     fp_Reval_Rates.last_updated_by           := 0;
162     fp_Reval_Rates.adjustment_id             := 0;
163    return true;
164 exception when others then
165    fp_Reval_Rates := fp_Reval_Rates_old;
166    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
167    return false;
168 end;
169 
170 function initialize ( fp_Reval_exceptions         in   out NOCOPY  IGI_IAC_TYPES.iac_reval_exception_line )
171 return boolean is
172    l_line IGI_IAC_TYPES.iac_reval_exception_line ;
173    l_path varchar2(100);
174 begin
175    l_path := g_path||'initialize7';
176    fp_reval_Exceptions := l_line;
177    return true;
178 exception when others then
179    fp_reval_Exceptions := l_line;
180    return false;
181 end;
182 
183 
184 function initialize ( fp_reval_params         in   out NOCOPY  IGI_IAC_TYPES.iac_reval_params )
185 return boolean is
186    fp_reval_params_old IGI_IAC_TYPES.iac_reval_params;
187    l_path varchar2(100);
188 begin
189    l_path := g_path||'initialize8';
190 
191    fp_reval_params_old := fp_reval_params;
192 
193    if not initialize ( fp_reval_params.reval_control ) then
194       return false;
195    end if;
196 
197   if not initialize ( fp_reval_params.reval_asset_params ) then
198       return false;
199    end if;
200   if not initialize ( fp_reval_params.reval_input_Asset ) then
201       return false;
202    end if;
203 
204    if not initialize ( fp_reval_params.reval_output_asset ) then
205       return false;
206    end if;
207   if not initialize ( fp_reval_params.reval_output_asset_mvmt ) then
208       return false;
209    end if;
210   if not initialize ( fp_reval_params.reval_prev_rate_info ) then
211       return false;
212    end if;
213    if not initialize ( fp_reval_params.reval_curr_rate_info_first ) then
214       return false;
215    end if;
216   if not initialize ( fp_reval_params.reval_curr_rate_info_next ) then
217       return false;
218    end if;
219   if not initialize ( fp_reval_params.reval_asset_exceptions ) then
220       return false;
221    end if;
222    if not initialize ( fp_reval_params.fa_asset_info ) then
223       return false;
224    end if;
225   if not initialize ( fp_reval_params.reval_asset_rules ) then
226       return false;
227    end if;
228 
229    return true;
230 exception when others then
231    fp_reval_params := fp_reval_params_old;
232    igi_iac_debug_pkg.debug_unexpected_msg(l_path);
233    return false;
234 end;
235 
239                                  , fp_revaluation_mode         in      varchar2
236 function init_struct_for_srs    ( fp_asset_id                  in      number
237                                  , fp_book_type_code           in      varchar2
238                                  , fp_revaluation_id           in      number
240                                  , fp_period_counter           in      number
241                                  , fp_control                  in      IGI_IAC_TYPES.iac_reval_control_type
242                                  , fp_reval_params             out NOCOPY  IGI_IAC_TYPES.iac_reval_params
243                                  )
244 return  boolean is
245      l_revaluation_date date;
246      l_reval_params IGI_IAC_TYPES.iac_reval_params;
247      l_output_dists IGI_IAC_TYPES.iac_reval_output_dists;
248      l_idx          BINARY_INTEGER;
249      fp_reval_params_old IGI_IAC_TYPES.iac_reval_params;
250      l_path varchar2(100);
251 begin
252      l_idx  := 1;
253      l_path := g_path||'init_struct_for_srs';
254 
255    if not  initialize ( fp_reval_params         => l_Reval_params )
256    then
257       igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'Error initializing structure');
258       return false;
259    end if;
260 
261    igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'Begin init_struct_for_srs');
262 
263 /* update or populate the  reval_control record */
264      l_reval_params.reval_control.revaluation_mode := fp_revaluation_mode;
265     -- get the revaluation type!
266     -- this needs to be optimized by adding parameter to do_revaluation_asset.
267     begin
268         select dd.*
269         into   l_reval_params.reval_asset_rules
270         from   igi_iac_reval_asset_rules dd
271         where  dd.asset_id       = fp_asset_id
272           and  dd.book_type_code = fp_book_type_code
273           and  dd.revaluation_id = fp_revaluation_id
274           ;
275         select h.revaluation_date
276         into   l_reval_params.reval_asset_params.revaluation_date
277         from   igi_iac_revaluations      h
278         where  h.revaluation_id = fp_revaluation_id
279         ;
280         l_reval_params.reval_asset_params.revaluation_rate
281           := l_reval_params.reval_Asset_rules.revaluation_Factor;
282 
283         if l_reval_params.reval_asset_rules.revaluation_type = 'O' then
284            l_reval_params.reval_control.transaction_sub_type := 'OCCASSIONAL';
285         else
286            l_reval_params.reval_control.transaction_sub_type := 'PROFESSIONAL';
287         end if;
288 
289     exception when others then
290        igi_iac_debug_pkg.debug_other_string(g_unexp_level,l_path,'+failed to get the asset rules');
291        igi_iac_debug_pkg.debug_unexpected_msg(l_path);
292        return false;
293     end;
294      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+set the reval control based on reval mode');
295      if l_reval_params.reval_control.revaluation_mode = 'P'
296      then
297          l_reval_params.reval_control.message_level           := 3;
298          l_reval_params.reval_control.validate_business_rules := true;
299          l_reval_params.reval_control.create_acctg_entries    := true;
300          l_reval_params.reval_control.crud_allowed            := true;
301          l_reval_params.reval_control.modify_balances         := false;
302      elsif l_reval_params.reval_control.revaluation_mode in ( 'R','L') then
303          l_reval_params.reval_control.validate_business_rules := false;
304          l_reval_params.reval_control.message_level           := 3;
305          l_reval_params.reval_control.create_acctg_entries    := false;
306          l_reval_params.reval_control.crud_allowed            := true;
307          l_reval_params.reval_control.modify_balances         := true;
308      else
309          l_reval_params.reval_control.validate_business_rules := false;
310          l_reval_params.reval_control.message_level           := 0;
311          l_reval_params.reval_control.create_acctg_entries    := false;
312          l_reval_params.reval_control.crud_allowed            := false;
313          l_reval_params.reval_control.modify_balances         := false;
314      end if;
315      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+set the reval control other defaults');
316      l_reval_params.reval_control.print_report                := false;
317  /* populate the reval_asset_params record, category id would be calculated later in the code
318     when fa information is retrieved.
319   */
320      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_asset_params record');
321      l_reval_params.reval_asset_params.asset_id            := fp_asset_id;
322      l_reval_params.reval_asset_params.book_type_code      := fp_book_type_code;
323      l_reval_params.reval_asset_params.revaluation_id      := fp_revaluation_id;
324      l_reval_params.reval_asset_params.period_counter      := fp_period_counter;
325      l_Reval_params.reval_asset_params.first_set_adjustment_id := 0;
326      l_reval_params.reval_asset_params.second_set_adjustment_id := 0;
327  /* populate the reval_input_asset  record */
328      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_input_asset record');
329      declare
330         l_max_period_counter number := 0;
331      begin
332         select nvl(max(period_counter),0)
333         into   l_max_period_counter
334         from   igi_iac_asset_balances
335         where  asset_id   = fp_asset_id
336         and    book_type_code = fp_book_type_code
337         and    period_counter <= fp_period_counter
338         ;
339         if l_max_period_counter = 0 then
340 
341            l_reval_params.reval_control.first_time_flag             := true;
345            l_reval_params.reval_input_asset.net_book_value          := 0;
342            l_reval_params.reval_input_asset.asset_id                := fp_asset_id;
343            l_reval_params.reval_input_asset.book_type_code          := fp_book_type_code ;
344            l_reval_params.reval_input_asset.period_counter          := fp_period_counter ;
346            l_reval_params.reval_input_asset.adjusted_cost           := 0;
347            l_reval_params.reval_input_asset.operating_acct          := 0 ;
348            l_reval_params.reval_input_asset.reval_reserve           := 0 ;
349            l_reval_params.reval_input_asset.deprn_amount            := 0;
350            l_reval_params.reval_input_asset.deprn_reserve           := 0 ;
351            l_reval_params.reval_input_asset.backlog_deprn_reserve   := 0 ;
352            l_reval_params.reval_input_asset.general_fund            := 0;
353            l_reval_params.reval_input_asset.last_reval_date         := l_revaluation_date;
354            l_reval_params.reval_input_asset.current_reval_factor    := 1 ;
355            l_reval_params.reval_input_asset.cumulative_reval_factor := 1 ;
356            l_reval_params.reval_input_asset.created_by              := g_who_user_id   ;
357            l_reval_params.reval_input_asset.creation_date           := g_who_date  ;
358            l_reval_params.reval_input_asset.last_update_login       := g_who_login_id ;
359            l_reval_params.reval_input_asset.last_update_date        := g_who_date ;
360            l_reval_params.reval_input_asset.last_updated_by         := g_who_user_id;
361         else
362            begin
363                select *
364                into   l_reval_params.reval_input_asset
365                from   igi_iac_asset_balances
366                where  asset_id   = fp_asset_id
367                and    book_type_code = fp_book_type_code
368                and    period_counter = l_max_period_counter
369                ;
370            exception when others then
371                return false;
372            end;
373            l_reval_params.reval_control.first_time_flag := false;
374         end if;
375 
376      exception when others then
377         return false;
378      end;
379      if l_reval_params.reval_control.first_time_flag then
380         igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+first time processing for this asset');
381      end if;
382  /* populate the reval_output_asset record */
383      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_output_asset record');
384      l_reval_params.reval_output_asset := l_reval_params.reval_input_asset;
385  /* populate the reval_output_asset_mvmt record */
386      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_output_asset_mvmt record');
387      if not initialize ( l_reval_params.reval_output_asset_mvmt ) then
388       return false;
389      end if;
390 
391      l_reval_params.reval_output_asset_mvmt.asset_id          := fp_asset_id;
392      l_reval_params.reval_output_asset_mvmt.book_type_code    := fp_book_type_code;
393      l_reval_params.reval_output_asset_mvmt.period_counter    := fp_period_counter;
394  /* populate the reval_prev_rate_info  record */
395     igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_prev_rate_info record');
396     declare
397       l_dummy varchar2(1);
398     begin
399       select *
400       into   l_reval_params.reval_prev_rate_info
401       from   igi_iac_revaluation_rates
402       where  asset_id       = fp_asset_id
403         and  period_counter <= fp_period_counter
404         and  book_type_code = fp_book_type_code
405         and  reval_type     in ( 'O','P')
406         and  nvl(latest_record,'X')  = 'Y'
407         ;
408     exception
409         when no_data_found then
410             l_reval_params.reval_prev_rate_info.asset_id            :=      fp_asset_id;
411             l_reval_params.reval_prev_rate_info.book_type_code      :=      fp_book_type_code;
412             l_reval_params.reval_prev_rate_info.revaluation_id      :=      fp_revaluation_id;
413             l_reval_params.reval_prev_rate_info.period_counter      :=      fp_period_counter;
414             l_reval_params.reval_prev_rate_info.reval_type          :=
415                                         l_reval_params.reval_Asset_rules.revaluation_type;
416             l_reval_params.reval_prev_rate_info.current_reval_factor :=      1;
417             l_reval_params.reval_prev_rate_info.cumulative_reval_factor     :=      1;
418             l_reval_params.reval_prev_rate_info.processed_flag      :=      'Y';
419             l_reval_params.reval_prev_rate_info.latest_record       :=      'Y';
420             l_reval_params.reval_prev_rate_info.created_by          :=      g_who_user_id;
421             l_reval_params.reval_prev_rate_info.creation_date       :=      g_who_date;
422             l_reval_params.reval_prev_rate_info.last_update_login   :=      g_who_login_id;
423             l_reval_params.reval_prev_rate_info.last_update_date    :=      g_who_date;
424             l_reval_params.reval_prev_rate_info.last_updated_by     :=      g_who_user_id;
425         when too_many_rows then
426             igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+more than 1 revaluation record found with latest record set. aborting.');
427             return false;
428         when others then
429             igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'error getting information from revaluation rates table'||sqlerrm);
430             return false;
431     end;
432 
433  /*  fa information from fa_books and fa_deprn summary from the historic books! */
434      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the fa_asset_info record');
435      declare
436         cursor c_fa_books is
440                 , fb.salvage_value
437            select  fb.cost
438                 , fb.adjusted_cost
439                 , fb.original_cost
441                 , fb.life_in_months
442                 , fb.rate_adjustment_factor
443                 , fb.period_counter_fully_reserved
444                 , fb.adjusted_recoverable_cost
445                 , fb.recoverable_cost
446                 , fb.date_placed_in_service
447                 , fb.deprn_start_date
448                 , fb.depreciate_flag
449                 , fbc.last_period_counter
450                 , fbc.gl_posting_allowed_flag
451                 , fds.ytd_deprn
452                 , fds.deprn_reserve
453                 , fds.deprn_amount
454                 , fadd.asset_category_id
455           from  fa_books fb
456                 , fa_book_controls fbc
457                 , fa_deprn_summary fds
458                 , fa_additions fadd
459           where  fb.book_type_code = fbc.book_type_code
460             and  fb.book_type_code = fp_book_type_code
461             -- and  fbc.last_period_counter = fp_period_counter
462             and  fadd.asset_id           = fp_asset_id
463             and  fb.asset_id             = fp_asset_id
464             and  fb.transaction_header_id_out is null
465             and  fds.book_type_code      = fp_book_type_code
466             and  fds.asset_id            = fp_asset_id
467             and  fds.period_counter      = ( select max(period_counter)
468                                              from   fa_deprn_summary
469                                              where  asset_id = fp_asset_id
470                                               and   book_type_code = fp_book_type_code
471                                               and   period_counter <= fp_period_counter
472                                             )
473             -- this should fail with asset with deprn = no, need to verify this later on...
474             ;
475 --            l_available boolean := false;
476             l_dpis_period           fa_deprn_periods.period_counter%TYPE;
477             l_current_period  fa_deprn_periods.period_counter%TYPE;
478      begin
479 
480            for l_b in c_fa_books loop
481 
482                 /*Salavge value correction*/
483                 If l_b.Salvage_value <> 0 THen
484                 -- resreve
485                 IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
486                                                       P_book_type_code =>fp_book_type_code,
487                                                       P_value=>l_b.deprn_reserve,
488                                                       P_cost=>l_b.cost,
489                                                       P_salvage_value=>l_b.salvage_value,
490                                                       P_calling_program=>'REVALUATION') THEN
491 	            igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
492                     return false;
493                  END IF;
494                  -- YTD
495                 IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
496                                                       P_book_type_code =>fp_book_type_code,
497                                                       P_value=>l_b.ytd_deprn,
498                                                       P_cost=>l_b.cost,
499                                                       P_salvage_value=>l_b.salvage_value,
500                                                       P_calling_program=>'REVALUATION') THEN
501 
502 	          igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
503                   return false;
504                  END IF;
505                  -- deprn amount
506                  IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
507                                                       P_book_type_code =>fp_book_type_code,
508                                                       P_value=>l_b.deprn_amount,
509                                                       P_cost=>l_b.cost,
510                                                       P_salvage_value=>l_b.salvage_value,
511                                                       P_calling_program=>'REVALUATION') THEN
512 
513 	            igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
514                     return false;
515                  END IF ;
516                 END IF;
517                 /*salvage value correction*/
518 
519 
520 
521                 l_reval_params.fa_asset_info.cost                          := l_b.cost;
522                 l_reval_params.fa_asset_info.adjusted_cost                 := l_b.adjusted_cost;
523                 l_reval_params.fa_asset_info.original_cost                 := l_b.original_cost;
524 	        igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+original cost : '|| l_b.original_cost);
525                 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+cost          : '|| l_b.cost);
526                 l_reval_params.fa_asset_info.salvage_value                 := l_b.salvage_value;
527                 l_reval_params.fa_asset_info.life_in_months                := l_b.life_in_months;
528                 l_reval_params.fa_asset_info.rate_adjustment_factor        := l_b.rate_adjustment_factor;
529                 l_reval_params.fa_asset_info.period_counter_fully_reserved := l_b.period_counter_fully_reserved;
530                 l_reval_params.fa_asset_info.adjusted_recoverable_cost     := l_b.adjusted_recoverable_cost;
531                 l_reval_params.fa_asset_info.recoverable_cost              := l_b.recoverable_cost;
532                 l_reval_params.fa_asset_info.date_placed_in_service        := l_b.date_placed_in_service;
536                 l_reval_params.fa_asset_info.ytd_deprn                     := l_b.ytd_deprn;
533                 l_reval_params.fa_asset_info.deprn_start_date              := l_b.deprn_start_date;
534                 l_reval_params.fa_asset_info.last_period_counter           := l_b.last_period_counter;
535                 l_reval_params.fa_asset_info.gl_posting_allowed_flag       := l_b.gl_posting_allowed_flag;
537                 l_reval_params.fa_asset_info.deprn_reserve                 := l_b.deprn_reserve;
538                 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+deprn reserve : '|| l_b.deprn_reserve);
539                 l_reval_params.fa_asset_info.deprn_amount                  := l_b.deprn_amount;
540                 l_reval_params.fa_asset_info.depreciate_flag               := l_b.depreciate_flag;
541                 l_reval_params.reval_asset_params.category_id              := l_b.asset_category_id;
542 
543                 l_current_period := fp_period_counter;
544                 IF NOT igi_iac_ytd_engine.Calculate_YTD
545                                 ( fp_book_type_code,
546                                 fp_asset_id,
547                                 l_reval_params.fa_asset_info,
548                                 l_dpis_period,
549                                 l_current_period,
550                                 l_reval_params.reval_control.calling_program) THEN
551                     RETURN FALSE;
552                 END IF;
553 
554            end loop;
555 
556      exception when others then
557           igi_iac_debug_pkg.debug_other_string(g_unexp_level,l_path,'+error in get period info from common utils'||sqlerrm);
558           igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'End init_struct_for_srs');
559           return false;
560      end;
561 
562      fp_reval_params := l_reval_params;
563      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+successful processing for init_struct_for_srs');
564      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'End init_struct_for_srs');
565 
566      return true;
567 exception when others then
568   fp_reval_params := fp_reval_params_old;
569   igi_iac_debug_pkg.debug_unexpected_msg(l_path);
570   return false;
571 end;
572 
573 /*
574 -- initialize if called for calculation from the form
575 */
576 
577 function init_struct_for_calc    ( fp_asset_id                 in      number
578                                  , fp_book_type_code           in      varchar2
579                                  , fp_revaluation_id           in      number
580                                  , fp_revaluation_mode         in      varchar2
581                                  , fp_period_counter           in      number
582                                  , fp_control                  in      IGI_IAC_TYPES.iac_reval_control_type
583                                  , fp_reval_params             out NOCOPY     IGI_IAC_TYPES.iac_reval_params
584                                  )
585 return  boolean is
586       l_revaluation_date date;
587      l_reval_params IGI_IAC_TYPES.iac_reval_params;
588      l_output_dists IGI_IAC_TYPES.iac_reval_output_dists;
589      l_idx          BINARY_INTEGER;
590      fp_reval_params_old IGI_IAC_TYPES.iac_reval_params;
591      l_path varchar2(100);
592 begin
593      l_idx := 1;
594      l_path := g_path||'init_struct_for_calc';
595 
596    if not  initialize ( fp_reval_params         => l_Reval_params )
597    then
598       igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'Error initializing structure');
599       return false;
600    end if;
601 
602    igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'Error initializing structure');
603 
604 /* update or populate the  reval_control record */
605      l_reval_params.reval_control.revaluation_mode := fp_revaluation_mode;
606     begin
607         select dd.*
608         into   l_reval_params.reval_asset_rules
609         from   igi_iac_reval_asset_rules dd
610         where  dd.asset_id       = fp_asset_id
611           and  dd.book_type_code = fp_book_type_code
612           and  dd.revaluation_id = fp_revaluation_id
613           ;
614         select h.revaluation_date
615         into   l_reval_params.reval_asset_params.revaluation_date
616         from   igi_iac_revaluations      h
617         where  h.revaluation_id = fp_revaluation_id
618         ;
619         l_reval_params.reval_asset_params.revaluation_rate
620           := l_reval_params.reval_Asset_rules.revaluation_Factor;
621 
622         if l_reval_params.reval_asset_rules.revaluation_type = 'O' then
623            l_reval_params.reval_control.transaction_sub_type := 'OCCASSIONAL';
624         else
625            l_reval_params.reval_control.transaction_sub_type := 'PROFESSIONAL';
626         end if;
627 
628     exception when others then
629        igi_iac_debug_pkg.debug_other_string(g_unexp_level,l_path,'+failed to get the asset rules');
630        return false;
631     end;
632      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+set the reval control based on reval mode');
633      l_reval_params.reval_control.message_level           := 3;
634      l_reval_params.reval_control.validate_business_rules := false;
635      l_reval_params.reval_control.create_acctg_entries    := false;
636      l_reval_params.reval_control.crud_allowed            := false;
637      l_reval_params.reval_control.modify_balances         := false;
638      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+set the reval control other defaults');
639      l_reval_params.reval_control.print_report            := false;
640  /* populate the reval_asset_params record, category id would be calculated later in the code
641     when fa information is retrieved.
642   */
643      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_asset_params record');
647      l_reval_params.reval_asset_params.period_counter      := fp_period_counter;
644      l_reval_params.reval_asset_params.asset_id            := fp_asset_id;
645      l_reval_params.reval_asset_params.book_type_code      := fp_book_type_code;
646      l_reval_params.reval_asset_params.revaluation_id      := fp_revaluation_id;
648      l_Reval_params.reval_asset_params.first_set_adjustment_id := 0;
649      l_reval_params.reval_asset_params.second_set_adjustment_id := 0;
650  /* populate the reval_input_asset  record */
651      igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'+populate the reval_input_asset record');
652      declare
653         l_max_period_counter number := 0;
654      begin
655         select nvl(max(period_counter),0)
656         into   l_max_period_counter
657         from   igi_iac_asset_balances
658         where  asset_id   = fp_asset_id
659         and    book_type_code = fp_book_type_code
660         and    period_counter <= fp_period_counter
661         ;
662         if l_max_period_counter = 0 then
663 
664            l_reval_params.reval_control.first_time_flag             := true;
665            l_reval_params.reval_input_asset.asset_id                := fp_asset_id;
666            l_reval_params.reval_input_asset.book_type_code          := fp_book_type_code ;
667            l_reval_params.reval_input_asset.period_counter          := fp_period_counter ;
668            l_reval_params.reval_input_asset.net_book_value          := 0;
669            l_reval_params.reval_input_asset.adjusted_cost           := 0;
670            l_reval_params.reval_input_asset.operating_acct          := 0 ;
671            l_reval_params.reval_input_asset.reval_reserve           := 0 ;
672            l_reval_params.reval_input_asset.deprn_amount            := 0;
673            l_reval_params.reval_input_asset.deprn_reserve           := 0 ;
674            l_reval_params.reval_input_asset.backlog_deprn_reserve   := 0 ;
675            l_reval_params.reval_input_asset.general_fund            := 0;
676            l_reval_params.reval_input_asset.last_reval_date         := l_revaluation_date;
677            l_reval_params.reval_input_asset.current_reval_factor    := 1 ;
678            l_reval_params.reval_input_asset.cumulative_reval_factor := 1 ;
679            l_reval_params.reval_input_asset.created_by              := g_who_user_id   ;
680            l_reval_params.reval_input_asset.creation_date           := g_who_date  ;
681            l_reval_params.reval_input_asset.last_update_login       := g_who_login_id ;
682            l_reval_params.reval_input_asset.last_update_date        := g_who_date ;
683            l_reval_params.reval_input_asset.last_updated_by         := g_who_user_id;
684         else
685            begin
686                select *
687                into   l_reval_params.reval_input_asset
688                from   igi_iac_asset_balances
689                where  asset_id   = fp_asset_id
690                and    book_type_code = fp_book_type_code
691                and    period_counter = l_max_period_counter
692                ;
693            exception when others then
694                return false;
695            end;
696            l_reval_params.reval_control.first_time_flag := false;
697         end if;
698 
699      exception when others then
700         return false;
701      end;
702 
703  /* populate the reval_output_asset record */
704 
705      l_reval_params.reval_output_asset := l_reval_params.reval_input_asset;
706  /* populate the reval_output_asset_mvmt record */
707      if not initialize ( l_reval_params.reval_output_asset_mvmt ) then
708         return false;
709      end if;
710 
711      l_reval_params.reval_output_asset_mvmt.asset_id          := fp_asset_id;
712      l_reval_params.reval_output_asset_mvmt.book_type_code    := fp_book_type_code;
713      l_reval_params.reval_output_asset_mvmt.period_counter    := fp_period_counter;
714  /* populate the reval_prev_rate_info  record */
715 
716     l_reval_params.reval_prev_rate_info.cumulative_reval_factor
717                := l_reval_params.reval_input_asset.cumulative_reval_factor;
718 
719 
720     l_reval_params.reval_prev_rate_info.current_reval_factor   :=
721     l_reval_params.reval_prev_rate_info.cumulative_reval_factor;
722 
723     l_reval_params.reval_prev_rate_info.asset_id                    :=      fp_asset_id;
724     l_reval_params.reval_prev_rate_info.book_type_code              :=      fp_book_type_code;
725     l_reval_params.reval_prev_rate_info.revaluation_id              :=      fp_revaluation_id;
726     l_reval_params.reval_prev_rate_info.period_counter              :=      fp_period_counter;
727     l_reval_params.reval_prev_rate_info.reval_type                  :=
728                                              l_reval_params.reval_Asset_rules.revaluation_type;
729     l_reval_params.reval_prev_rate_info.processed_flag              :=      'Y';
730     l_reval_params.reval_prev_rate_info.latest_record               :=      'Y';
731     l_reval_params.reval_prev_rate_info.created_by                  :=      g_who_user_id;
732     l_reval_params.reval_prev_rate_info.creation_date               :=      g_who_date;
733     l_reval_params.reval_prev_rate_info.last_update_login           :=      g_who_login_id;
734     l_reval_params.reval_prev_rate_info.last_update_date            :=      g_who_date;
735     l_reval_params.reval_prev_rate_info.last_updated_by             :=      g_who_user_id;
736 
737 
738  /*  fa information from fa_books and fa_deprn summary from the historic books! */
739      declare
740         cursor c_fa_books is
741            select  fb.cost
742                 , fb.adjusted_cost
743                 , fb.original_cost
744                 , fb.salvage_value
745                 , fb.life_in_months
746                 , fb.rate_adjustment_factor
747                 , fb.period_counter_fully_reserved
748                 , fb.adjusted_recoverable_cost
749                 , fb.recoverable_cost
753                 , fbc.last_period_counter
750                 , fb.date_placed_in_service
751                 , fb.deprn_start_date
752                 , fb.depreciate_flag
754                 , fbc.gl_posting_allowed_flag
755                 , fds.ytd_deprn
756                 , fds.deprn_reserve
757                 , fds.deprn_amount
758                 , fadd.asset_category_id
759           from  fa_books fb
760                 , fa_book_controls fbc
761                 , fa_deprn_summary fds
762                 , fa_additions fadd
763           where  fb.book_type_code = fbc.book_type_code
764             and  fb.book_type_code = fp_book_type_code
765             and  fadd.asset_id           = fp_asset_id
766             and  fb.asset_id             = fp_asset_id
767             and  fb.transaction_header_id_out is null
768             and  fds.book_type_code      = fp_book_type_code
769             and  fds.asset_id            = fp_asset_id
770             and  fds.period_counter      = ( select max(period_counter)
771                                              from   fa_deprn_summary
772                                              where  asset_id = fp_asset_id
773                                               and   book_type_code = fp_book_type_code
774                                               and   period_counter <= fp_period_counter
775                                             )
776             -- this should fail with asset with deprn = no, need to verify this later on...
777             ;
778 --            l_available boolean := false;
779             l_dpis_period           fa_deprn_periods.period_counter%TYPE;
780             l_current_period  fa_deprn_periods.period_counter%TYPE;
781 
782      begin
783           for l_b in c_fa_books loop
784 
785               /*Salavge value correction*/
786                 -- resreve
787                 If l_b.Salvage_value <> 0 THen
788                     IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
789                                                         P_book_type_code =>fp_book_type_code,
790                                                       P_value=>l_b.deprn_reserve,
791                                                       P_cost=>l_b.cost,
792                                                       P_salvage_value=>l_b.salvage_value,
793                                                       P_calling_program=>'REVALUATION') THEN
794     			igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
795                         Return false;
796                     END IF;
797                  -- YTD
798                     IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
799                                                       P_book_type_code =>fp_book_type_code,
800                                                       P_value=>l_b.ytd_deprn,
801                                                       P_cost=>l_b.cost,
802                                                       P_salvage_value=>l_b.salvage_value,
803                                                       P_calling_program=>'REVALUATION') THEN
804 
805     			igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
806                         Return false;
807                      END IF;
808                   -- deprn amount
809                     IF NOT igi_iac_salvage_pkg.correction(p_asset_id => fp_asset_id,
810                                                       P_book_type_code =>fp_book_type_code,
811                                                       P_value=>l_b.deprn_amount,
812                                                       P_cost=>l_b.cost,
813                                                       P_salvage_value=>l_b.salvage_value,
814                                                       P_calling_program=>'REVALUATION') THEN
815     			igi_iac_debug_pkg.debug_other_string(g_error_level,l_path,'+Salvage Value Correction Failed : ');
816                         Return false;
817                      END IF;
818                   End If;
819                 /*salvage value correction*/
820 
821                 l_reval_params.fa_asset_info.cost                          := l_b.cost;
822                 l_reval_params.fa_asset_info.adjusted_cost                 := l_b.adjusted_cost;
823                 l_reval_params.fa_asset_info.original_cost                 := l_b.original_cost;
824                 l_reval_params.fa_asset_info.salvage_value                 := l_b.salvage_value;
825                 l_reval_params.fa_asset_info.life_in_months                := l_b.life_in_months;
826                 l_reval_params.fa_asset_info.rate_adjustment_factor        := l_b.rate_adjustment_factor;
827                 l_reval_params.fa_asset_info.period_counter_fully_reserved := l_b.period_counter_fully_reserved;
828                 l_reval_params.fa_asset_info.adjusted_recoverable_cost     := l_b.adjusted_recoverable_cost;
829                 l_reval_params.fa_asset_info.recoverable_cost              := l_b.recoverable_cost;
830                 l_reval_params.fa_asset_info.date_placed_in_service        := l_b.date_placed_in_service;
831                 l_reval_params.fa_asset_info.deprn_start_date              := l_b.deprn_start_date;
832                 l_reval_params.fa_asset_info.last_period_counter           := l_b.last_period_counter;
833                 l_reval_params.fa_asset_info.gl_posting_allowed_flag       := l_b.gl_posting_allowed_flag;
834                 l_reval_params.fa_asset_info.ytd_deprn                     := l_b.ytd_deprn;
835                 l_reval_params.fa_asset_info.deprn_reserve                 := l_b.deprn_reserve;
836                 l_reval_params.fa_asset_info.deprn_amount                  := l_b.deprn_amount;
837                 l_reval_params.fa_asset_info.depreciate_flag               := l_b.depreciate_flag;
838                 l_reval_params.reval_asset_params.category_id              := l_b.asset_category_id;
839 
840                 l_current_period := fp_period_counter;
841                 IF NOT igi_iac_ytd_engine.Calculate_YTD
845                                 l_dpis_period,
842                                 ( fp_book_type_code,
843                                 fp_asset_id,
844                                 l_reval_params.fa_asset_info,
846                                 l_current_period,
847                                 l_reval_params.reval_control.calling_program) THEN
848                     RETURN FALSE;
849                 END IF;
850 
851            end loop;
852 
853      exception when others then
854           igi_iac_debug_pkg.debug_unexpected_msg(l_path);
855           return false;
856      end;
857 
858      fp_reval_params := l_reval_params;
859 
860      return true;
861 exception when others then
862  fp_reval_params := fp_reval_params_old;
863  igi_iac_debug_pkg.debug_unexpected_msg(l_path);
864  return false;
865 end;
866 
867 BEGIN
868     --===========================FND_LOG.START=====================================
869     g_state_level :=	FND_LOG.LEVEL_STATEMENT;
870     g_proc_level  :=	FND_LOG.LEVEL_PROCEDURE;
871     g_event_level :=	FND_LOG.LEVEL_EVENT;
872     g_excep_level :=	FND_LOG.LEVEL_EXCEPTION;
873     g_error_level :=	FND_LOG.LEVEL_ERROR;
874     g_unexp_level :=	FND_LOG.LEVEL_UNEXPECTED;
875     g_path        := 'IGI.PLSQL.igiiarsb.IGI_IAC_REVAL_INIT_STRUCT.';
876     --===========================FND_LOG.END=======================================
877 
878     g_who_user_id   := fnd_global.user_id;
879     g_who_login_id  := fnd_global.login_id;
880     g_who_date      := sysdate;
881 
882 END;
883