DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGI_IAC_CATCHUP_PKG

Source


1 PACKAGE BODY IGI_IAC_CATCHUP_PKG AS
2 -- $Header: igiiactb.pls 120.19.12000000.4 2007/11/05 14:01:29 sharoy ship $
3 
4      g_debug BOOLEAN ;
5 
6     --===========================FND_LOG.START=====================================
7 
8     g_state_level NUMBER	    ;
9     g_proc_level  NUMBER	    ;
10     g_event_level NUMBER	    ;
11     g_excep_level NUMBER	    ;
12     g_error_level NUMBER	    ;
13     g_unexp_level NUMBER	    ;
14     g_path        VARCHAR2(100) ;
15 
16     --===========================FND_LOG.END=====================================
17 
18     PROCEDURE Debug_Period(p_period igi_iac_types.prd_rec) IS
19   	l_path_name VARCHAR2(150) ;
20     BEGIN
21   	    l_path_name := g_path||'debug_period';
22 
23   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
24 		     p_full_path => l_path_name,
25 		     p_string => '         Period counter :'||to_char(p_period.period_counter));
26   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
27 		     p_full_path => l_path_name,
28 		     p_string => '         Period Num :'||to_char(p_period.period_num));
29   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
30 		     p_full_path => l_path_name,
31 		     p_string => '         Fiscal Year :'||to_char(p_period.fiscal_year));
32   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
33 		     p_full_path => l_path_name,
34 		     p_string => '         Period Name :'||p_period.period_name);
35     END Debug_Period;
36 
37     PROCEDURE Debug_Asset(p_asset igi_iac_types.iac_reval_input_asset) IS
38   	l_path_name VARCHAR2(150);
39     BEGIN
40   	    l_path_name := g_path||'debug_asset';
41 
42      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
43 	     		p_full_path => l_path_name,
44 	     		p_string => '         Net book value :'||to_char(p_asset.net_book_value));
45      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
46 	     		p_full_path => l_path_name,
47 	     		p_string => '         Adjusted Cost :'||to_char(p_asset.adjusted_cost));
48      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
49 	     		p_full_path => l_path_name,
50 	     		p_string => '         Operating Account :'||to_char(p_asset.operating_acct));
51      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
52 	     		p_full_path => l_path_name,
53 	     		p_string => '         Reval Reserve :'||to_char(p_asset.reval_reserve));
54      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
55 	     		p_full_path => l_path_name,
56 	     		p_string => '         Deprn Amount :'||to_char(p_asset.deprn_amount));
57      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
58 	     		p_full_path => l_path_name,
59 	     		p_string => '         Deprn Reserve :'||to_char(p_asset.deprn_reserve));
60      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
61 	     		p_full_path => l_path_name,
62 	     		p_string => '         Backlog Deprn Reserve :'||to_char(p_asset.backlog_deprn_reserve));
63      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
64 	     		p_full_path => l_path_name,
65 	     		p_string => '         General Fund :'||to_char(p_asset.general_fund));
66      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
67 	     		p_full_path => l_path_name,
68 	     		p_string => '         Current Reval Factor :'||to_char(p_asset.current_reval_factor));
69      	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
70 	     		p_full_path => l_path_name,
71 	     		p_string => '         Cumulative Reval Factor :'||to_char(p_asset.Cumulative_reval_factor));
72     END Debug_Asset;
73 
74     FUNCTION get_FA_Deprn_Expense(
75                     p_asset_id          IN NUMBER,
76                     p_book_type_code    IN VARCHAR2,
77                     p_period_counter    IN NUMBER,
78                     p_calling_function  IN VARCHAR2,
79                     p_deprn_reserve     IN NUMBER,
80                     p_deprn_YTD         IN NUMBER,
81                     p_deprn_expense_py  OUT NOCOPY NUMBER,
82                     p_deprn_expense_cy  OUT NOCOPY NUMBER,
83                     p_last_asset_period OUT NOCOPY NUMBER
84                     ) return BOOLEAN IS
85 
86         CURSOR c_get_fa_asset_info IS
87         SELECT cost,
88                salvage_value,
89                date_placed_in_service,
90                depreciate_flag,
91                period_counter_fully_reserved,
92                period_counter_fully_retired,
93                transaction_header_id_in,
94                life_in_months,
95                add_months(date_placed_in_service,life_in_months) last_date
96         FROM   fa_books
97         WHERE  book_type_code = p_book_type_code
98         AND    asset_id  = p_asset_id
99         AND    transaction_header_id_out IS NULL;
100 
101 	/* Bug 2961656 vgadde 08-jul-03 Start(1) */
102         CURSOR c_get_user_deprn IS
103         SELECT period_counter,deprn_reserve,YTD_deprn
104         FROM fa_deprn_summary
105         WHERE book_type_code = p_book_type_code
106         AND asset_id = p_asset_id
107         AND deprn_source_code = 'BOOKS';
108 	/* Bug 2961656 vgadde 08-jul-03 End(1) */
109 
110         /* Cursor for fetching latest deprn_reserve for RECLASS */
111 	CURSOR c_get_deprn_reserve IS
112         SELECT period_counter, deprn_reserve
113         FROM fa_deprn_summary
114         WHERE book_type_code = p_book_type_code
115         AND asset_id = p_asset_id
116         AND period_counter = (SELECT max(period_counter)
117                               FROM fa_deprn_summary
118                               WHERE book_type_code = p_book_type_code
119                               AND asset_id = p_asset_id);
120 
121         CURSOR c_get_deprn_calendar IS
122         SELECT deprn_calendar
123         FROM fa_book_controls
124         WHERE book_type_code like p_book_type_code;
125 
126         CURSOR c_get_periods_in_year(p_calendar_type fa_calendar_types.calendar_type%TYPE) IS
127         SELECT number_per_fiscal_year
128         FROM fa_calendar_types
129         WHERE calendar_type = p_calendar_type;
130 
131         l_fa_deprn_acc      fa_adjustments.adjustment_amount%TYPE;
132         l_dpis_period       igi_iac_types.prd_rec;
133         l_current_period    igi_iac_types.prd_rec;
134         l_last_period        igi_iac_types.prd_rec;
135         l_booksrow_period_rec igi_iac_types.prd_rec;
136         l_deprn_calendar    fa_calendar_types.calendar_type%TYPE;
137         l_periods_in_year   fa_calendar_types.number_per_fiscal_year%TYPE;
138         l_booksrow_period   NUMBER;	-- added for bug 2961656
139         l_booksrow_reserve  NUMBER;	-- added for bug 2961656
140         l_deprn_reserve     NUMBER;
141         l_reclass_period    fa_deprn_periods.period_counter%TYPE;
142         l_total_periods     NUMBER;
143         l_last_period_counter fa_deprn_periods.period_counter%TYPE;    -- added for bug 2411599
144       	l_path_name VARCHAR2(150);
145         l_booksrow_ytd_deprn  NUMBER;
146 
147     BEGIN
148       	l_path_name := g_path||'get_fa_deprn_expense';
149   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
150 		     p_full_path => l_path_name,
151 		     p_string => '     Start of processing in get_FA_Deprn_Expense function');
152   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
153 		     p_full_path => l_path_name,
154 		     p_string => '     ---------Input Parameter Values---------');
155   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
156 		     p_full_path => l_path_name,
157 		     p_string => '     Asset Id :'||to_char(p_asset_id));
158   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
159 		     p_full_path => l_path_name,
160 		     p_string => '     Book Type Code :'||p_book_type_code);
161   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
162 		     p_full_path => l_path_name,
163 		     p_string => '     Period Counter :'||to_char(p_period_counter));
164   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
165 		     p_full_path => l_path_name,
166 		     p_string => '     Calling function :'||p_calling_function);
167   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
168 		     p_full_path => l_path_name,
169 		     p_string => '     ----------------------------------');
170 
171 	/* Bug 2961656 vgadde 08-jul-03 Start(2) */
172         IF (p_calling_function = 'UPGRADE') THEN
173 
174             OPEN c_get_deprn_calendar;
175     	    FETCH c_get_deprn_calendar INTO l_deprn_calendar;
176     	    CLOSE c_get_deprn_calendar;
177 
178     	    OPEN c_get_periods_in_year(l_deprn_calendar);
179     	    FETCH c_get_periods_in_year INTO l_periods_in_year;
180     	    CLOSE c_get_periods_in_year;
181       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
182 		     p_full_path => l_path_name,
183 		     p_string => '     Periods in Year for the calendar :'||to_char(l_periods_in_year));
184 
185             FOR l_asset_info IN c_get_fa_asset_info LOOP
186 
187                 IF (l_asset_info.depreciate_flag = 'NO') THEN
188           		    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
189 		     		p_full_path => l_path_name,
190 		     		p_string => '     Depreciate Flag is off. No depreciation required');
191                     p_deprn_expense_py := 0;
192                     p_deprn_expense_cy := 0;
193                     p_last_asset_period := NULL;
194                     return TRUE;
195                 END IF;
196 
197                 IF NOT igi_iac_common_utils.get_period_info_for_date(p_book_type_code,
198                                                                      l_asset_info.date_placed_in_service,
199                                                                      l_dpis_period) THEN
200           		    igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
201 		     		p_full_path => l_path_name,
202 		     		p_string => '     Error in fetching dpis period information');
203                     return FALSE;
204                 END IF;
205 
206                 l_total_periods := ceil((l_asset_info.life_in_months*l_periods_in_year)/12);
207                 l_last_period_counter := (l_dpis_period.period_counter + l_total_periods - 1);
208 
209                 IF nvl(l_asset_info.period_counter_fully_reserved,l_last_period_counter) < l_last_period_counter THEN
210                     l_last_period_counter := l_asset_info.period_counter_fully_reserved;
211                 END IF;
212 
213                 IF l_last_period_counter > p_period_counter THEN
214                     l_last_period_counter := NULL;
215                 END IF;
216 
217                 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
218                                                                      p_period_counter,
219                                                                      l_current_period) THEN
220           		    igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
221 		                                                 p_full_path => l_path_name,
222                                                          p_string => '     Error in fetching open period information');
223                     return FALSE;
224                 END IF;
225 
226                 IF (l_last_period_counter IS NULL) THEN
227   	            	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
228     		                                                 p_full_path => l_path_name,
229                                              	     		 p_string => '     Asset is not fully reserved.');
230                     IF p_deprn_ytd IS NULL THEN
231                         p_deprn_expense_py := p_deprn_reserve /  (p_period_counter - l_dpis_period.period_counter);
232                         p_deprn_expense_cy := p_deprn_expense_py;
233                         p_last_asset_period := NULL;
234                     ELSE
235                          p_last_asset_period := NULL;
236                         p_deprn_expense_py := (p_deprn_reserve - p_deprn_ytd)/(p_period_counter - l_dpis_period.period_counter - l_current_period.period_num + 1);
237                         p_deprn_expense_cy := p_deprn_ytd / (l_current_period.period_num - 1);
238                     END IF;
239                 ELSE
240           		    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
241 		                                          		p_full_path => l_path_name,
242                                                 		p_string => '     Asset is fully reserved');
243                     IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
244                                                                          l_last_period_counter,
245                                                                          l_last_period) THEN
246                         return FALSE;
247                     END IF;
248 
249                     IF p_deprn_ytd IS NULL THEN
250                         p_deprn_expense_py := p_deprn_reserve / (l_last_period.period_counter - l_dpis_period.period_counter + 1);
251                         p_deprn_expense_cy := p_deprn_expense_py;
252                         p_last_asset_period := l_last_period_counter;
253                     ELSE
254                         IF l_last_period.fiscal_year = l_current_period.fiscal_year THEN
255                             p_deprn_expense_py := (p_deprn_reserve - p_deprn_ytd)/(l_last_period_counter - l_dpis_period.period_counter - l_last_period.period_num + 1);
256                             p_deprn_expense_cy := p_deprn_ytd / (l_last_period.period_counter);
257                             p_last_asset_period := l_last_period_counter;
258                         ELSE
259                             p_deprn_expense_py := p_deprn_reserve / (l_last_period_counter - l_dpis_period.period_counter + 1);
260                             p_deprn_expense_cy := p_deprn_expense_py;
261                             p_last_asset_period := l_last_period_counter;
262                         END IF;
263                         IF l_last_period.fiscal_year < l_current_period.fiscal_year THEN
264                             p_deprn_expense_cy := 0;
265                         END IF;
266                     END IF;
267                 END IF;
268             END LOOP;
269         END IF;
270 
271 	    IF ((p_calling_function = 'RECLASS') OR (p_calling_function = 'ADDITION') ) THEN
272 
273             OPEN c_get_user_deprn;
274             FETCH c_get_user_deprn INTO l_booksrow_period, l_booksrow_reserve,l_booksrow_ytd_deprn;
275             CLOSE c_get_user_deprn;
276 
277     	    OPEN c_get_deprn_calendar;
278 	        FETCH c_get_deprn_calendar INTO l_deprn_calendar;
279 	        CLOSE c_get_deprn_calendar;
280 
281     	    OPEN c_get_periods_in_year(l_deprn_calendar);
282 	        FETCH c_get_periods_in_year INTO l_periods_in_year;
283 	        CLOSE c_get_periods_in_year;
284       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
285 	                                	     	p_full_path => l_path_name,
286                                  		     	p_string => '     Periods in Year for the calendar :'||to_char(l_periods_in_year));
287 
288     	    FOR l_asset_info IN c_get_fa_asset_info LOOP
289 
290               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
291 		                                                 p_full_path => l_path_name,
292                                                   		p_string => '         cost :'||to_char(l_asset_info.cost));
293               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
294 		                                         		p_full_path => l_path_name,
295                                     		     		p_string => '         salvage value :'||to_char(l_asset_info.salvage_value));
296               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
297 		                                         		p_full_path => l_path_name,
298                                     		     		p_string => '         date placed in service :'||to_char(l_asset_info.date_placed_in_service));
299               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
300 		                                         		p_full_path => l_path_name,
301                                     		     		p_string => '         depreciate flag :'||l_asset_info.depreciate_flag);
302               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
303 		                                             		p_full_path => l_path_name,
304                                         		     		p_string => '         period counter fully reserved :'||to_char(l_asset_info.period_counter_fully_reserved));
305               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
306 		                                             		p_full_path => l_path_name,
307                                         		     		p_string => '         transaction header id in :'||to_char(l_asset_info.transaction_header_id_in));
308               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
309 		                                             		p_full_path => l_path_name,
310                                         		     		p_string => '         life in months :'||to_char(l_asset_info.life_in_months));
311 
312                 IF (l_asset_info.depreciate_flag = 'NO') THEN
313                   		    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
314 		     	                                            	p_full_path => l_path_name,
315                                             		     		p_string => '     Depreciate Flag is off. No depreciation calculation required');
316                     p_deprn_expense_py := 0;
317                     p_deprn_expense_cy := 0;
318                     p_last_asset_period := NULL;
319                     return TRUE;
320                END IF;
321 
322                 l_total_periods := ceil((l_asset_info.life_in_months*l_periods_in_year)/12);
323               		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
324 		                                         		p_full_path => l_path_name,
325                                         	     		p_string => '     Total Periods in Asset life :'||to_char(l_total_periods));
326 
327             		/* Added for bug 2411599 vgadde 12/06/2002 Start(1)*/
328             		/* Modified logic for getting last period in asset life */
329                 IF NOT igi_iac_common_utils.get_period_info_for_date(p_book_type_code,
330                                                                      l_asset_info.date_placed_in_service,
331                                                                      l_dpis_period) THEN
332                     return FALSE;
333                 END IF;
334 
335                 l_last_period_counter := (l_dpis_period.period_counter + l_total_periods - 1);
336           		igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
337 		                                     		p_full_path => l_path_name,
338                                 		     		p_string => '     Last Period counter :'||to_char(l_last_period_counter));
339 
340                 IF nvl(l_asset_info.period_counter_fully_reserved,l_last_period_counter) < l_last_period_counter THEN
341                     l_last_period_counter := l_asset_info.period_counter_fully_reserved;
342                 END IF;
343 
344                 IF (l_last_period_counter < p_period_counter) THEN
345                     p_last_asset_period := l_last_period_counter;
346                 ELSE
347                     p_last_asset_period := NULL;
348                 END IF;
349         		/* Added for bug 2411599 vgadde 12/06/2002 End(1) */
350 
351                 IF ((p_calling_function = 'ADDITION') AND (nvl(l_booksrow_reserve,0) <> 0) and p_last_asset_period IS NULL) THEN
352 
353               		    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
354 		             		p_full_path => l_path_name,
355         		     		p_string => '     Depreciation amount entered by user');
356 
357                         ------------- supplied YTD -----------------
358                         IF Nvl(l_booksrow_ytd_deprn,0) <> 0 Then
359 
360                                  IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
361                                                                      p_period_counter-1,
362                                                                      l_current_period) THEN
363                                                    return FALSE;
364                                  END IF;
365 
366                                     p_deprn_expense_py := (l_booksrow_reserve - l_booksrow_ytd_deprn)/(p_period_counter - l_dpis_period.period_counter - l_current_period.period_num );
367                                     p_deprn_expense_cy := l_booksrow_ytd_deprn/l_current_period.period_num;
368                         Else
369                                 p_deprn_expense_py := l_booksrow_reserve/ (p_period_counter - l_dpis_period.period_counter);
370                                 p_deprn_expense_cy := p_deprn_expense_py;
371                        END IF;
372 
373                 ELSIF (p_calling_function = 'RECLASS') THEN
374                          OPEN c_get_deprn_reserve;
375                          FETCH c_get_deprn_reserve INTO l_reclass_period,l_deprn_reserve;
376                          CLOSE c_get_deprn_reserve;
377 
378                           --Code added by Venkat Gadde
379 			  IF l_reclass_period <> l_booksrow_period THEN
380                             IF l_last_period_counter is not null and l_last_period_counter < l_reclass_period Then
381                               l_reclass_period := l_last_period_counter;
382                             end if;
383                             p_deprn_expense_py := l_deprn_reserve /(l_reclass_period - l_dpis_period.period_counter + 1);
384                             p_deprn_expense_cy := p_deprn_expense_py;
385                           ELSIF (nvl(l_booksrow_reserve,0) <> 0) THEN
386                             p_deprn_expense_py := l_booksrow_reserve/ (p_period_counter - l_dpis_period.period_counter);
387                             p_deprn_expense_cy := p_deprn_expense_py;
388                           ELSE
389                             p_deprn_expense_py := (l_asset_info.cost-l_asset_info.salvage_value)/l_total_periods;
390                             p_deprn_expense_cy := p_deprn_expense_py;
391                           END IF;
392 
393                           igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
394 		             		p_full_path => l_path_name,
395         		     		p_string => '     Calculated the deprn expense for '||l_reclass_period);
396                           -- End of code added by Venkat Gadde
397                     ELSE
398                 		    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
399 		             	                            	p_full_path => l_path_name,
400                             		     	        	p_string => '     Depreciation amount calculated by FA');
401                           p_deprn_expense_py := (l_asset_info.cost-l_asset_info.salvage_value)/l_total_periods;
402                           p_deprn_expense_cy := p_deprn_expense_py;
403               END IF;
404 
405             END LOOP;
406 
407         END IF;
408 	/* Bug 2961656 vgadde 08-jul-03 End(2) */
409   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
410 		     p_full_path => l_path_name,
411 		     p_string => '-----Output from get_fa_deprn_expense function');
412   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
413 		     p_full_path => l_path_name,
414 		     p_string => '     FA pys Depreciation Expense per period :'||to_char(p_deprn_expense_py));
415   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
416 		     p_full_path => l_path_name,
417 		     p_string => '     FA cys Depreciation Expense per period :'||to_char(p_deprn_expense_cy));
418   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
419 		     p_full_path => l_path_name,
420 		     p_string => '     Last period for the asset :'||to_char(p_last_asset_period));
421   	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
422 		     p_full_path => l_path_name,
423 		     p_string => '----------------------------------------------');
424         return TRUE;
425 
426         EXCEPTION
427             WHEN OTHERS THEN
428   		igi_iac_debug_pkg.debug_unexpected_msg(p_full_path => l_path_name);
429                 return FALSE;
430     END get_FA_Deprn_Expense;
431 
432    FUNCTION Do_Deprn_Catchup(
433                 p_period_counter_from   IN  NUMBER,
434                 p_period_counter_to     IN  NUMBER,
435                 p_period_counter        IN  NUMBER,
436                 p_crud_iac_tables       IN  BOOLEAN,
437                 p_calling_function      IN  VARCHAR2,
438                 p_fa_deprn_expense_py   IN  NUMBER,
439                 p_fa_deprn_expense_cy   IN  NUMBER,
440                 p_asset_last_period     IN  NUMBER,
441                 p_fa_deprn_reserve      IN  NUMBER,
442                 p_fa_deprn_ytd          IN  NUMBER,
443                 p_asset_balance         IN OUT NOCOPY igi_iac_types.iac_reval_input_asset,
444                 p_event_id              IN  NUMBER    --R12 uptake
445                 ) return BOOLEAN IS
446 
447         l_deprn_catchup_amount      NUMBER;
448         l_rowid                     VARCHAR2(25) ;
449         l_adjustment_id             igi_iac_transaction_headers.adjustment_id%TYPE;
450         l_transaction_sub_type      igi_iac_transaction_headers.transaction_sub_type%TYPE;
451         l_distributions_tab         igi_iac_types.dist_amt_tab;
452         l_fa_dist_catchup_tab	    igi_iac_types.dist_amt_tab;
453         l_account_ccid	            NUMBER(15) ;
454     	l_set_of_books_id           NUMBER(15) ;
455     	l_chart_of_accts_id         NUMBER(15) ;
456     	l_currency_code	            VARCHAR2(15) ;
457     	l_precision                 VARCHAR2(1) ;
458         l_idx                       NUMBER;
459         l_detail_balance            igi_iac_det_balances%ROWTYPE;
460         l_distribution_amount       NUMBER;
461         l_dist_period_amount        NUMBER;
462         l_last_catchup_prd_rec      igi_iac_types.prd_rec;
463         l_last_reval_prd_rec        igi_iac_types.prd_rec;
464         l_deprn_ytd                 NUMBER;
465         l_reval_reserve_net         igi_iac_det_balances.reval_reserve_net%TYPE;
466         l_reval_general_fund	    igi_iac_det_balances.reval_reserve_gen_fund%TYPE;
467         l_general_fund_acc          igi_iac_det_balances.general_fund_acc%TYPE;
468         l_fa_deprn_acc	    	    NUMBER;
469         l_fa_deprn_catchup_amount   NUMBER;
470         l_iac_fa_deprn_rec          igi_iac_fa_deprn%ROWTYPE;
471         l_last_deprn_catchup_period NUMBER;
472         l_periods_in_year           NUMBER;
473         l_deprn_calendar            fa_calendar_types.calendar_type%TYPE;
474         /* Bug 2961656 vgadde 08-jul-2003 Start(3) */
475         l_iac_deprn_amount_py       NUMBER;
476         l_iac_deprn_amount_cy       NUMBER;
477         l_period_from               igi_iac_types.prd_rec;
478         l_period_to                 igi_iac_types.prd_rec;
479         l_period_open               igi_iac_types.prd_rec;
480         l_period_reserved           igi_iac_types.prd_rec;
481         /* Bug 2961656 vgadde 08-jul-2003 End(3) */
482         l_path_name                 VARCHAR2(150);
483         l_iac_deprn_period_amount   NUMBER;
484         l_fa_deprn_period_amount    NUMBER;
485         l_booksrow_period           NUMBER;
486         l_booksrow_reserve          NUMBER;
487         l_booksrow_YTD              NUMBER;
488         l_reval_rsv_ccid            NUMBER;
489         l_iac_active_dists_YTD      NUMBER;
490         l_fa_active_dists_YTD       NUMBER;
491         l_iac_inactive_dists_YTD    NUMBER;
492         l_fa_inactive_dists_YTD     NUMBER;
493         l_iac_all_dists_YTD         NUMBER;
494         l_fa_all_dists_YTD          NUMBER;
495 
496         CURSOR c_get_transaction IS
497         SELECT *
498         FROM igi_iac_transaction_headers
499         WHERE period_counter = p_period_counter
500         AND book_type_code = p_asset_balance.book_type_code
501         AND asset_id = p_asset_balance.asset_id
502         AND transaction_type_code = p_calling_function
503         AND transaction_sub_type = 'REVALUATION'
504         AND adjustment_id_out is NULL;
505 
506         CURSOR c_get_detail_balances(p_adjustment_id NUMBER,p_distribution_id NUMBER) IS
507         SELECT *
508         FROM igi_iac_det_balances
509         WHERE book_type_code = p_asset_balance.book_type_code
510         AND asset_id = p_asset_balance.asset_id
511         AND adjustment_id = p_adjustment_id
512         AND distribution_id = p_distribution_id;
513 
514         CURSOR c_get_inactive_dists(p_adjustment_id NUMBER) IS
515         SELECT *
516         FROM igi_iac_det_balances
517         WHERE adjustment_id = p_adjustment_id
518         AND book_type_code = p_asset_balance.book_type_code
519         AND asset_id = p_asset_balance.asset_id
520         AND nvl(active_flag,'Y') = 'N';
521 
522         CURSOR c_get_upgrade_rec IS
523         SELECT *
524         FROM igi_imp_iac_interface_py_add
525         WHERE book_type_code = p_asset_balance.book_type_code
526         AND asset_id = p_asset_balance.asset_id
527         AND period_counter = p_period_counter;
528 
529         CURSOR c_get_iac_fa_deprn_rec(cp_adjustment_id	igi_iac_fa_deprn.adjustment_id%TYPE
530         			     ,cp_distribution_id igi_iac_fa_deprn.distribution_id%TYPE) IS
531         SELECT *
532         FROM igi_iac_fa_deprn
533         WHERE book_type_code = p_asset_balance.book_type_code
534         AND asset_id = p_asset_balance.asset_id
535         AND adjustment_id = cp_adjustment_id
536         AND distribution_id = cp_distribution_id;
537 
538         CURSOR c_get_iac_fa_inactive_dists(cp_adjustment_id igi_iac_fa_deprn.adjustment_id%TYPE) IS
539         SELECT *
540         FROM igi_iac_fa_deprn
541         WHERE adjustment_id = cp_adjustment_id
542         AND book_type_code = p_asset_balance.book_type_code
543         AND asset_id = p_asset_balance.asset_id
544         AND nvl(active_flag,'Y') = 'N';
545 
546         cursor c_asset_details_salvage is
547         SELECT 	life_in_months,salvage_value,rate_adjustment_factor
548  	    FROM fa_books
549    	    WHERE book_type_code = p_asset_balance.book_type_code
550    	    AND   asset_id = p_asset_balance.asset_id
551    	    AND   date_ineffective is NULL ;
552 
553         l_asset_details_salvage c_asset_details_salvage%rowtype;
554         l_salvage_value_correction number ;
555 
556         CURSOR c_get_deprn_calendar IS
557         SELECT deprn_calendar
558         FROM fa_book_controls
559         WHERE book_type_code = p_asset_balance.book_type_code;
560 
561         CURSOR c_get_periods_in_year(p_calendar_type fa_calendar_types.calendar_type%TYPE) IS
562         SELECT number_per_fiscal_year
563         FROM fa_calendar_types
564         WHERE calendar_type = p_calendar_type;
565 
566         CURSOR c_get_user_deprn IS
567         SELECT period_counter,deprn_reserve,YTD_deprn
568         FROM fa_deprn_summary
569         WHERE book_type_code = p_asset_balance.book_type_code
570         AND asset_id = p_asset_balance.asset_id
571         AND deprn_source_code = 'BOOKS';
572 
573 
574     BEGIN
575         IF FND_PROFILE.VALUE('IGI_DEBUG_OPTION') = 'Y'  THEN
576             g_debug := TRUE;
577         END IF;
578         l_path_name := g_path||'do_deprn_catchup';
579         l_salvage_value_correction :=0;
580 
581   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
582 		     	                             p_full_path => l_path_name,
583                                            	 p_string => '----------Start of processing by function Do_Deprn_Catchup....');
584       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
585 	                             	     	 p_full_path => l_path_name,
586                              		         p_string => '---- Input Parameters for the function ---------');
587       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
588 	                            	         p_full_path => l_path_name,
589 		     	                             p_string => '     Period Counter From :'||to_char(p_period_counter_from));
590       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
591 	                             	     	 p_full_path => l_path_name,
592                                  	     	 p_string => '     Period Counter To :'||to_char(p_period_counter_to));
593       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
594 	                                      	 p_full_path => l_path_name,
595                              		     	 p_string => '     Current Open Period Counter :'||to_char(p_period_counter));
596         If p_crud_iac_tables then
597   	            igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
598 		                                             p_full_path => l_path_name,
599                                      		     	 p_string => '     CRUD IAC tables is TRUE');
600         Else
601           	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
602 		                                          	 p_full_path => l_path_name,
603                                          	     	 p_string => '     CRUD IAC tables is FALSE');
604         End If;
605         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
606 		  	                                 p_full_path => l_path_name,
607                             		     	 p_string => '     Calling Function :'||p_calling_function);
608     	Debug_Asset(p_asset_balance);
609   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
610 		                                   	 p_full_path => l_path_name,
611                                          	 p_string => '--------------------------------------------------');
612         IF (p_period_counter_from >= p_period_counter_to) THEN
613   	                igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
614 		                                            	p_full_path => l_path_name,
615                                       		     		p_string => '     Returning from do_deprn_catchup as no catchup is required');
616             return TRUE;
617         END IF;
618 
619         /* Bug 2961656 vgadde 08-jul-2003 Start(4) */
620         /*IF NOT get_FA_Deprn_Expense(p_asset_balance.asset_id,
621                                  p_asset_balance.book_type_code,
622                                  p_period_counter,
623                                  p_calling_function,
624                                  l_fa_deprn_amount,
625                                  l_last_asset_period) THEN
626                 Debug('*** Error in get_FA_Deprn_Expense function');
627                 return FALSE;
628         END IF;*/
629         /* Bug 2961656 vgadde 08-jul-2003 End(4) */
630 
631         /* Bug 2961656 vgadde 08-jul-2003 Start(5) */
632         IF (nvl(p_fa_deprn_expense_py,0) = 0 AND nvl(p_fa_deprn_expense_cy,0) = 0) THEN
633             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
634 		     	p_full_path => l_path_name,
635 		     	p_string => '     Returning from do_deprn_catchup since no depreciation catchup is required');
636             return TRUE;
637         END IF;
638 
639         l_iac_deprn_amount_py := (p_fa_deprn_expense_py * p_asset_balance.cumulative_reval_factor)-p_fa_deprn_expense_py;
640         l_iac_deprn_amount_cy := (p_fa_deprn_expense_cy * p_asset_balance.cumulative_reval_factor)-p_fa_deprn_expense_cy;
641       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
642 		     	                             p_full_path => l_path_name,
643                              		     	 p_string => '     IAC pys Depreciation amount per period :'||to_char(l_iac_deprn_amount_py));
644   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
645                                  	     	 p_full_path => l_path_name,
646                                  	     	 p_string => '     IAC cys Depreciation amount per period :'||to_char(l_iac_deprn_amount_cy));
647         Open  c_get_deprn_calendar;
648         Fetch c_get_deprn_calendar into l_deprn_calendar;
649         Close c_get_deprn_calendar;
650 
651         Open  c_get_periods_in_year(l_deprn_calendar);
652         Fetch c_get_periods_in_year into l_periods_in_year;
653         Close c_get_periods_in_year;
654 
655         IF (p_calling_function = 'ADDITION' OR p_calling_function = 'RECLASS') THEN
656 
657             -- Supplied  YTD
658             OPEN c_get_user_deprn;
659             FETCH c_get_user_deprn INTO l_booksrow_period, l_booksrow_reserve,l_booksrow_ytd;
660             CLOSE c_get_user_deprn;
661 
662             IF  ((p_calling_function = 'ADDITION') AND (nvl(l_booksrow_YTD,0) <> 0) AND (p_asset_last_period IS NULL)) THEN
663 
664                 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
665                                                                         p_period_counter_from,l_period_from) THEN
666                     return FALSE;
667                 END IF;
668 
669                 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
670                                                                  p_period_counter_to-1,l_period_to) THEN
671                     return FALSE;
672                 END IF;
673 
674                 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
675                                                                  p_period_counter-1,
676                                                                  l_period_open) THEN
677                     return FALSE;
678                 END IF;
679                 -- get the deprn amt per period ---
680 
681                     IF (l_period_from.fiscal_year < l_period_open.fiscal_year) AND (l_period_to.fiscal_year < l_period_open.fiscal_year) THEN
682                           igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
683                                  	     	 p_full_path => l_path_name,
684                                  	     	 p_string => 'Depreciation catch up in previous years :');
685                           l_deprn_catchup_amount := l_iac_deprn_amount_py * (p_period_counter_to - p_period_counter_from );
686                           l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from);
687 
688                     ELSIF (l_period_from.fiscal_year < l_period_open.fiscal_year) AND (l_period_to.fiscal_year = l_period_open.fiscal_year) THEN
689                             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
690                                  	     	 p_full_path => l_path_name,
691                                  	     	 p_string => 'Depreciation catch up in previous year and current year :');
692 
693 
694                         l_deprn_catchup_amount := (l_iac_deprn_amount_cy * l_period_to.period_num ) +
695                             (l_iac_deprn_amount_py * (p_period_counter_to - p_period_counter_from - l_period_to.period_num ));
696                         l_fa_deprn_catchup_amount := (p_fa_deprn_expense_cy * l_period_to.period_num ) +
697                             (p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from - l_period_to.period_num ));
698 
699                     ELSIF (l_period_from.fiscal_year = l_period_open.fiscal_year) AND (l_period_to.fiscal_year = l_period_open.fiscal_year) THEN
700                            igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
701                                  	     	 p_full_path => l_path_name,
702                                  	     	 p_string => 'Depreciation catch up in current year :');
703 
704                           l_deprn_catchup_amount := l_iac_deprn_amount_cy *  (p_period_counter_to - p_period_counter_from );
705                           l_fa_deprn_catchup_amount := p_fa_deprn_expense_cy * (p_period_counter_to - p_period_counter_from );
706                     END IF;
707 
708             ELSE -- not supplied YTD
709 
710                 IF (p_asset_last_period IS NULL) THEN
711                     l_deprn_catchup_amount := l_iac_deprn_amount_py * ( p_period_counter_to - p_period_counter_from);
712                     l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from);
713                 ELSE
714                     IF(p_asset_last_period < p_period_counter_from) THEN
715                         return TRUE;
716                     ELSIF (p_asset_last_period < p_period_counter_to) THEN
717                         l_deprn_catchup_amount := l_iac_deprn_amount_py * (p_asset_last_period - p_period_counter_from + 1);
718                         l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_asset_last_period - p_period_counter_from + 1);
719                     ELSE
720                         l_deprn_catchup_amount := l_iac_deprn_amount_py * ( p_period_counter_to - p_period_counter_from);
721                         l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from);
722                     END IF;
723                 END IF;
724             END IF;
725         END IF; -- Addition and reclass
726 
727         IF (p_calling_function = 'UPGRADE') THEN
728             IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
729                                                                  p_period_counter_from,
730                                                                  l_period_from) THEN
731                 return FALSE;
732             END IF;
733 
734             IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
735                                                                  p_period_counter_to-1,
736                                                                  l_period_to) THEN
737                 return FALSE;
738             END IF;
739             IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
740                                                                  p_period_counter,
741                                                                  l_period_open) THEN
742                 return FALSE;
743             END IF;
744             IF nvl(p_asset_last_period, l_period_to.period_counter) >= l_period_to.period_counter THEN
745                 IF l_period_to.fiscal_year < l_period_open.fiscal_year THEN
746                     l_deprn_catchup_amount := l_iac_deprn_amount_py * (p_period_counter_to - p_period_counter_from);
747                     l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from);
748                 ELSE
749                     IF l_period_from.fiscal_year < l_period_open.fiscal_year THEN
750                         l_deprn_catchup_amount := (l_iac_deprn_amount_cy * l_period_to.period_num) +
751                             (l_iac_deprn_amount_py * (p_period_counter_to - p_period_counter_from - l_period_to.period_num ));
752                         l_fa_deprn_catchup_amount := (p_fa_deprn_expense_cy * l_period_to.period_num) +
753                             (p_fa_deprn_expense_py * (p_period_counter_to - p_period_counter_from - l_period_to.period_num ));
754                     ELSE
755                         l_deprn_catchup_amount := l_iac_deprn_amount_cy * (p_period_counter_to - p_period_counter_from);
756                         l_fa_deprn_catchup_amount := p_fa_deprn_expense_cy * (p_period_counter_to - p_period_counter_from);
757                     END IF;
758                 END IF;
759             ELSIF p_asset_last_period < p_period_counter_from THEN
760                 return TRUE;
761             ELSE
762                 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
763                                                                         p_asset_last_period,
764                                                                         l_period_reserved) THEN
765                     return FALSE;
766                 END IF;
767 
768                 IF l_period_to.fiscal_year < l_period_open.fiscal_year THEN
769                     l_deprn_catchup_amount := l_iac_deprn_amount_py * (p_asset_last_period - l_period_from.period_counter + 1);
770                     l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_asset_last_period - l_period_from.period_counter + 1);
771                 ELSIF l_period_to.fiscal_year = l_period_open.fiscal_year THEN
772                     IF l_period_from.fiscal_year < l_period_open.fiscal_year THEN
773                         IF l_period_reserved.fiscal_year < l_period_open.fiscal_year THEN
774                             l_deprn_catchup_amount := l_iac_deprn_amount_py * (p_asset_last_period - p_period_counter_from + 1);
775                             l_fa_deprn_catchup_amount := p_fa_deprn_expense_py * (p_asset_last_period - p_period_counter_from + 1);
776                         ELSIF l_period_reserved.fiscal_year = l_period_open.fiscal_year THEN
777                             l_deprn_catchup_amount := (l_iac_deprn_amount_cy * l_period_reserved.period_num) +
778                                 (l_iac_deprn_amount_py * (l_period_reserved.period_counter - l_period_from.period_counter - l_period_reserved.period_num));
779                             l_fa_deprn_catchup_amount := (p_fa_deprn_expense_cy * l_period_reserved.period_num) +
780                                 (p_fa_deprn_expense_py * (l_period_reserved.period_counter - l_period_from.period_counter - l_period_reserved.period_num));
781                         END IF;
782                     ELSIF l_period_from.fiscal_year = l_period_open.fiscal_year THEN
783                         l_deprn_catchup_amount := l_iac_deprn_amount_cy * (p_asset_last_period - p_period_counter_from + 1);
784                         l_fa_deprn_catchup_amount := p_fa_deprn_expense_cy * (p_asset_last_period - p_period_counter_from + 1);
785                     END IF;
786                 END IF;
787             END IF;
788 
789         END IF;
790         /* Bug 2961656 vgadde 08-jul-2003 End(5) */
791 
792         IF NOT (igi_iac_common_utils.iac_round(l_deprn_catchup_amount,p_asset_balance.book_type_code)) THEN
793             return FALSE;
794         END IF;
795 
796          IF NOT (igi_iac_common_utils.iac_round(l_fa_deprn_catchup_amount,p_asset_balance.book_type_code)) THEN
797             return FALSE;
798         END IF;
799 
800         /* Bug 2961656 vgadde 08-jul-2003 Start(6) */
801         IF NOT (igi_iac_common_utils.iac_round(l_iac_deprn_amount_py,p_asset_balance.book_type_code)) THEN
802             return FALSE;
803         END IF;
804 
805         IF NOT (igi_iac_common_utils.iac_round(l_iac_deprn_amount_cy,p_asset_balance.book_type_code)) THEN
806             return FALSE;
807         END IF;
808         /* Bug 2961656 vgadde 08-jul-2003 End(6) */
809 
810         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
811 		     	p_full_path => l_path_name,
812 		     	p_string => '     Total Depreciation catchup amount :'||to_char(l_deprn_catchup_amount));
813         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
814 		     	p_full_path => l_path_name,
815 		     	p_string => '	    FA Depreciation catchup amount :'||to_char(l_fa_deprn_catchup_amount));
816 
817         p_asset_balance.deprn_amount := l_iac_deprn_amount_cy;
818         p_asset_balance.net_book_value := nvl(p_asset_balance.net_book_value,0) - l_deprn_catchup_amount;
819         p_asset_balance.deprn_reserve  := nvl(p_asset_balance.deprn_reserve,0) + l_deprn_catchup_amount;
820 
821         /* Bug 2423710 vgadde 19/06/2002 Start(1) */
822         IF (p_asset_balance.adjusted_cost > 0) THEN
823 	        p_asset_balance.reval_reserve  := nvl(p_asset_balance.reval_reserve,0) - l_deprn_catchup_amount;
824 	        p_asset_balance.general_fund   := nvl(p_asset_balance.general_fund,0) + l_deprn_catchup_amount;
825         END IF;
826         /* Bug 2423710 vgadde 19/06/2002 End(1) */
827 
828         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
829 		     	p_full_path => l_path_name,
830 		     	p_string => '------ Output Asset Record from do_deprn_catchup-----------');
831         Debug_Asset(p_asset_balance);
832 
833         IF (p_crud_iac_tables) THEN
834 
835             IF (nvl(p_asset_last_period,p_period_counter) < (p_period_counter - 1)) THEN
836                 l_last_deprn_catchup_period := p_asset_last_period;
837             ELSE
838                 l_last_deprn_catchup_period := p_period_counter - 1;
839             END IF;
840 
841             IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
842                                                                         l_last_deprn_catchup_period,
843                                                                         l_last_catchup_prd_rec) THEN
844                    return FALSE;
845             END IF;
846 
847             IF NOT igi_iac_common_utils.get_period_info_for_counter(p_asset_balance.book_type_code,
848                                                                         p_period_counter_from-1,
849                                                                         l_last_reval_prd_rec) THEN
850                     return FALSE;
851             END IF;
852 
853             IF (p_calling_function <> 'UPGRADE') THEN
854 
855                 /* Accounting entries to be created */
856                 igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
857 		     		p_full_path => l_path_name,
858 		     		p_string => '     Inserting records into IAC tables');
859                 IF NOT (igi_iac_common_utils.get_book_gl_info(p_asset_balance.book_type_code ,
860     		    				  l_set_of_books_id ,
861 			    				  l_chart_of_accts_id ,
862 			    				  l_currency_code ,
863 			    				  l_precision )) THEN
864                     igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
865                         p_full_path => l_path_name,
866                         p_string => '*** Error in getting book GL info - do_deprn_catchup');
867                     RETURN false;
868                 END IF;
869 
870                 l_rowid := NULL;
871                 l_adjustment_id := NULL;
872 
873                 FOR l_transaction IN c_get_transaction LOOP
874                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
875                         p_full_path => l_path_name,
876                         p_string => '     Transaction ID created by revaluation :'||to_char(l_transaction.adjustment_id));
877                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
878                         p_full_path => l_path_name,
879                         p_string => '     Inserting record into igi_iac_transaction_headers');
880                     igi_iac_trans_headers_pkg.insert_row(
881 	                       	    X_rowid		            => l_rowid ,
882                         		X_adjustment_id	        => l_adjustment_id ,
883                         		X_transaction_header_id => NULL ,
884                         		X_adjustment_id_out	    => NULL ,
885                         		X_transaction_type_code => p_calling_function ,
886                         		X_transaction_date_entered => sysdate ,
887                         		X_mass_refrence_id	    => NULL ,
888                         		X_transaction_sub_type	=> 'CATCHUP' ,
889                         		X_book_type_code	    => l_transaction.book_type_code ,
890                         		X_asset_id		        => l_transaction.asset_id ,
891                         		X_category_id		    => l_transaction.category_id ,
892                         		X_adj_deprn_start_date	=> l_transaction.adj_deprn_start_date ,
893                         		X_revaluation_type_flag => NULL,
894                         		X_adjustment_status	    => 'COMPLETE' ,
895                         		X_period_counter	    => l_transaction.period_counter,
896                                 X_event_id              =>  p_event_id) ;
897 
898                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
899                         p_full_path => l_path_name,
900                         p_string => '     New Adjustment Id for deprn catchup :'||to_char(l_adjustment_id));
901 
902                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
903                         p_full_path => l_path_name,
904                         p_string => '	    Processing Inactive distributions');
905 
906                     l_iac_inactive_dists_YTD := 0;
907                     l_fa_inactive_dists_YTD := 0;
908                     l_iac_active_dists_YTD := 0;
909                     l_fa_active_dists_YTD := 0;
910                     l_iac_all_dists_YTD := 0;
911                     l_fa_all_dists_YTD := 0;
912 
913                     FOR l_inactive_dist IN c_get_inactive_dists(l_transaction.adjustment_id) LOOP
914                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
915                             p_full_path => l_path_name,
916                             p_string => '	    Distribution Id :'||to_char(l_inactive_dist.distribution_id));
917 
918                         l_rowid := NULL;
919                         igi_iac_det_balances_pkg.insert_row(
920                             X_rowid                     => l_rowid ,
921                             X_adjustment_id             => l_adjustment_id ,
922                             X_asset_id                  => l_inactive_dist.asset_id ,
923                             X_distribution_id           => l_inactive_dist.distribution_id ,
924                             X_book_type_code            => l_inactive_dist.book_type_code ,
925                             X_period_counter            => p_period_counter ,
926                             X_adjustment_cost           => l_inactive_dist.adjustment_cost ,
927                             X_net_book_value            => l_inactive_dist.net_book_value ,
928                             X_reval_reserve_cost        => l_inactive_dist.reval_reserve_cost ,
929                             X_reval_reserve_backlog     => l_inactive_dist.reval_reserve_backlog ,
930                             X_reval_reserve_gen_fund    => l_inactive_dist.reval_reserve_gen_fund ,
931                             X_reval_reserve_net         => l_inactive_dist.reval_reserve_net,
932                             X_operating_acct_cost	    => l_inactive_dist.operating_acct_cost ,
933                             X_operating_acct_backlog    => l_inactive_dist.operating_acct_backlog ,
934                             X_operating_acct_net	    => l_inactive_dist.operating_acct_net ,
935                             X_operating_acct_ytd	    => l_inactive_dist.operating_acct_ytd ,
936                             X_deprn_period              => l_inactive_dist.deprn_period ,
937                             X_deprn_ytd                 => l_inactive_dist.deprn_ytd ,
938                             X_deprn_reserve             => l_inactive_dist.deprn_reserve ,
939                             X_deprn_reserve_backlog	    => l_inactive_dist.deprn_reserve_backlog ,
940                             X_general_fund_per          => l_inactive_dist.general_fund_per ,
941                             X_general_fund_acc          => l_inactive_dist.general_fund_acc ,
942                             X_last_reval_date           => l_inactive_dist.last_reval_date ,
943                             X_current_reval_factor	    => l_inactive_dist.current_reval_factor ,
944                             X_cumulative_reval_factor   => l_inactive_dist.cumulative_reval_factor ,
945                             X_active_flag               => l_inactive_dist.active_flag ) ;
946 
947                             l_iac_inactive_dists_YTD := l_iac_inactive_dists_YTD + l_inactive_dist.deprn_ytd;
948                     END LOOP; /* inactive distributions of igi_iac_det_balances */
949 
950                     FOR l_iac_fa_inactive_dist IN c_get_iac_fa_inactive_dists(l_transaction.adjustment_id) LOOP
951                         l_rowid := NULL;
952                         igi_iac_fa_deprn_pkg.insert_row(
953                             x_rowid                     => l_rowid,
954                             x_book_type_code            => l_iac_fa_inactive_dist.book_type_code,
955                             x_asset_id                  => l_iac_fa_inactive_dist.asset_id,
956                             x_distribution_id           => l_iac_fa_inactive_dist.distribution_id,
957                             x_period_counter            => p_period_counter,
958                             x_adjustment_id             => l_adjustment_id,
959                             x_deprn_period              => l_iac_fa_inactive_dist.deprn_period,
960                             x_deprn_ytd                 => l_iac_fa_inactive_dist.deprn_ytd ,
961                             x_deprn_reserve             => l_iac_fa_inactive_dist.deprn_reserve ,
962                             x_active_flag               => l_iac_fa_inactive_dist.active_flag,
963                             x_mode                      => 'R');
964                             l_fa_inactive_dists_YTD := l_fa_inactive_dists_YTD + l_iac_fa_inactive_dist.deprn_ytd;
965                     END LOOP;
966 
967                     IF (l_last_catchup_prd_rec.period_num > l_last_reval_prd_rec.period_num) THEN
968                         l_iac_all_dists_YTD := l_iac_deprn_amount_cy *
969                                         (l_last_catchup_prd_rec.period_num - l_last_reval_prd_rec.period_num );
970                         l_fa_all_dists_YTD := p_fa_deprn_expense_cy *
971                                         (l_last_catchup_prd_rec.period_num - l_last_reval_prd_rec.period_num );
972 
973                         l_iac_active_dists_YTD := l_iac_all_dists_YTD ;
974                         l_fa_active_dists_YTD := l_fa_all_dists_YTD ;
975                     ELSE
976                         l_iac_all_dists_YTD := l_iac_deprn_amount_cy * l_last_catchup_prd_rec.period_num;
977                         l_fa_all_dists_YTD := p_fa_deprn_expense_cy * l_last_catchup_prd_rec.period_num;
978                         l_iac_active_dists_YTD := l_iac_all_dists_YTD - l_iac_inactive_dists_YTD;
979                         l_fa_active_dists_YTD := l_fa_all_dists_YTD - l_fa_inactive_dists_YTD;
980                     END IF;
981 
982 
983                     IF NOT igi_iac_common_utils.Prorate_Amt_to_Active_Dists( l_transaction.book_type_Code ,
984                                                      l_transaction.Asset_id ,
985                                                      l_deprn_catchup_amount ,
986                                                      l_distributions_tab ) THEN
987                         igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
988                             p_full_path => l_path_name,
989                             p_string => '*** Error in prorating catchup amount to active distributions');
990                         return FALSE;
991                     END IF;
992 
993                     IF NOT igi_iac_common_utils.Prorate_Amt_to_Active_Dists( l_transaction.book_type_Code ,
994                                                      l_transaction.Asset_id ,
995                                                      l_fa_deprn_catchup_amount ,
996                                                      l_fa_dist_catchup_tab ) THEN
997                         igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
998                             p_full_path => l_path_name,
999                             p_string => '*** Error in prorating period amount to active distributions');
1000                         return FALSE;
1001                     END IF;
1002 
1003                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1004                         p_full_path => l_path_name,
1005                         p_string => '     Total Number of Distributions For Asset:'||to_char(l_distributions_tab.LAST));
1006                     FOR l_idx IN l_distributions_tab.FIRST..l_distributions_tab.LAST LOOP
1007                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1008                             p_full_path => l_path_name,
1009                             p_string => '     Distribution id :'||to_char(l_distributions_tab(l_idx).distribution_id));
1010                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1011                             p_full_path => l_path_name,
1012                             p_string => '     Prorated Catchup Amount for the distribution :'||to_char(l_distributions_tab(l_idx).amount));
1013                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1014                             p_full_path => l_path_name,
1015                             p_string => '     Units for the distribution :'||to_char(l_distributions_tab(l_idx).units));
1016                         OPEN c_get_detail_balances(l_transaction.adjustment_id,
1017                                                 l_distributions_tab(l_idx).distribution_id);
1018                         FETCH c_get_detail_balances INTO l_detail_balance;
1019                         CLOSE c_get_detail_balances;
1020 
1021                         l_distribution_amount := l_distributions_tab(l_idx).amount;
1022                         l_dist_period_amount := l_iac_deprn_amount_cy * l_distributions_tab(l_idx).prorate_factor;
1023 
1024                         IF NOT igi_iac_common_utils.iac_round(l_distribution_amount,
1025                                                         l_transaction.book_type_code) THEN
1026                             return FALSE;
1027                         END IF;
1028 
1029                         IF NOT igi_iac_common_utils.iac_round(l_dist_period_amount,
1030                                                         l_transaction.book_type_code) THEN
1031                             return FALSE;
1032                         END IF;
1033 
1034                         IF (l_distribution_amount <> 0) THEN
1035             		    /* Do not create accounting entries if the amount is zero */
1036 
1037                             l_rowid := NULL;
1038                             l_account_ccid := NULL ;
1039                             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1040                                 p_full_path => l_path_name,
1041                                 p_string => '     Inserting records into igi_iac_adjustments');
1042                             IF NOT (igi_iac_common_utils.get_account_ccid(l_transaction.book_type_code ,
1043 			    						  l_transaction.asset_id ,
1044 			    						  l_distributions_tab(l_idx).distribution_id ,
1045 			    						  'DEPRN_EXPENSE_ACCT' ,
1046 			    						  l_account_ccid )) THEN
1047 
1048                                 RETURN false;
1049                             END IF;
1050                             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1051                                 p_full_path => l_path_name,
1052                                 p_string => '     Deprn expense ccid :'||to_char(l_account_ccid));
1053                             igi_iac_adjustments_pkg.insert_row(
1054 		     		    	    X_rowid                 => l_rowid ,
1055                                 X_adjustment_id         => l_adjustment_id ,
1056                                 X_book_type_code		=> l_transaction.book_type_code ,
1057                                 X_code_combination_id	=> l_account_ccid,
1058                                 X_set_of_books_id		=> l_set_of_books_id ,
1059                                 X_dr_cr_flag            => 'DR' ,
1060                                 X_amount               	=> l_distribution_amount ,
1061                                 X_adjustment_type      	=> 'EXPENSE' ,
1062                                 X_transfer_to_gl_flag  	=> 'Y' ,
1063                                 X_units_assigned		=> l_distributions_tab(l_idx).units ,
1064                                 X_asset_id		        => l_transaction.asset_id ,
1065                                 X_distribution_id      	=> l_distributions_tab(l_idx).distribution_id ,
1066                                 X_period_counter       	=> l_transaction.period_counter,
1067                                 X_adjustment_offset_type => 'RESERVE' ,
1068                                 X_report_ccid        	=> Null,
1069                                 x_mode                  => 'R',
1070                                 X_event_id              =>  p_event_id ) ;
1071 
1072                             l_rowid := NULL;
1073                             l_account_ccid := NULL ;
1074                             IF NOT (igi_iac_common_utils.get_account_ccid(l_transaction.book_type_code ,
1075 			    						  l_transaction.asset_id ,
1076 			    						  l_distributions_tab(l_idx).distribution_id ,
1077 			    						  'DEPRN_RESERVE_ACCT' ,
1078 			    						  l_account_ccid )) THEN
1079 
1080                                 RETURN false;
1081                             END IF;
1082                             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1083                                 p_full_path => l_path_name,
1084                                 p_string    => '     Deprn reserve ccid :'||to_char(l_account_ccid));
1085                             igi_iac_adjustments_pkg.insert_row(
1086                                 X_rowid                 => l_rowid ,
1087                                 X_adjustment_id         => l_adjustment_id ,
1088                                 X_book_type_code		=> l_transaction.book_type_code ,
1089                                 X_code_combination_id	=> l_account_ccid,
1090                                 X_set_of_books_id		=> l_set_of_books_id ,
1091                                 X_dr_cr_flag            => 'CR' ,
1092                                 X_amount               	=> l_distribution_amount ,
1093                                 X_adjustment_type      	=> 'RESERVE' ,
1094                                 X_transfer_to_gl_flag  	=> 'Y' ,
1095                                 X_units_assigned		=> l_distributions_tab(l_idx).units ,
1096                                 X_asset_id		        => l_transaction.asset_id ,
1097                                 X_distribution_id      	=> l_distributions_tab(l_idx).distribution_id ,
1098                                 X_period_counter       	=> l_transaction.period_counter,
1099                                 X_adjustment_offset_type => 'EXPENSE' ,
1100                                 X_report_ccid        	=> Null,
1101                                 x_mode                  => 'R',
1102                                 X_event_id              =>  p_event_id ) ;
1103 
1104                             IF (p_asset_balance.adjusted_cost > 0) THEN
1105 
1106                                 l_rowid := NULL;
1107                                 l_account_ccid := NULL ;
1108                                 l_reval_rsv_ccid := Null;
1109 
1110                                 IF NOT (igi_iac_common_utils.get_account_ccid(l_transaction.book_type_code ,
1111 			    						  l_transaction.asset_id ,
1112 			    						  l_distributions_tab(l_idx).distribution_id ,
1113 			    						  'REVAL_RESERVE_ACCT' ,
1114 			    						  l_account_ccid )) THEN
1115 
1116                                     RETURN false;
1117                                 END IF;
1118                                 l_reval_rsv_ccid :=l_account_ccid;
1119                                 igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1120                                     p_full_path => l_path_name,
1121                                     p_string => '     Reval reserve ccid :'||to_char(l_account_ccid));
1122                                 igi_iac_adjustments_pkg.insert_row(
1123                                     X_rowid                 => l_rowid ,
1124                                     X_adjustment_id         => l_adjustment_id ,
1125                                     X_book_type_code        => l_transaction.book_type_code ,
1126                                     X_code_combination_id	=> l_account_ccid,
1127                                     X_set_of_books_id       => l_set_of_books_id ,
1128                                     X_dr_cr_flag            => 'DR' ,
1129                                     X_amount               	=> l_distribution_amount ,
1130                                     X_adjustment_type      	=> 'REVAL RESERVE' ,
1131                                     X_transfer_to_gl_flag  	=> 'Y' ,
1132                                     X_units_assigned        => l_distributions_tab(l_idx).units ,
1133                                     X_asset_id		        => l_transaction.asset_id ,
1134                                     X_distribution_id      	=> l_distributions_tab(l_idx).distribution_id ,
1135                                     X_period_counter       	=> l_transaction.period_counter,
1136                                     X_adjustment_offset_type => 'GENERAL FUND' ,
1137                                     X_report_ccid        	=> Null ,
1138                                     x_mode                  => 'R',
1139                                     X_event_id              =>  p_event_id ) ;
1140 
1141                                 l_rowid := NULL;
1142                                 l_account_ccid := NULL ;
1143                                 IF NOT (igi_iac_common_utils.get_account_ccid(l_transaction.book_type_code ,
1144 			    						  l_transaction.asset_id ,
1145 			    						  l_distributions_tab(l_idx).distribution_id ,
1146 			    						  'GENERAL_FUND_ACCT' ,
1147 			    						  l_account_ccid )) THEN
1148 
1149                                     RETURN false;
1150                                 END IF;
1151                                 igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1152                                     p_full_path => l_path_name,
1153                                     p_string => '     General Fund ccid :'||to_char(l_account_ccid));
1154                                 igi_iac_adjustments_pkg.insert_row(
1155                                     X_rowid                 => l_rowid ,
1156                                     X_adjustment_id         => l_adjustment_id ,
1157                                     X_book_type_code		=> l_transaction.book_type_code ,
1158                                     X_code_combination_id	=> l_account_ccid,
1159                                     X_set_of_books_id       => l_set_of_books_id ,
1160                                     X_dr_cr_flag            => 'CR' ,
1161                                     X_amount               	=> l_distribution_amount ,
1162                                     X_adjustment_type      	=> 'GENERAL FUND' ,
1163                                     X_transfer_to_gl_flag  	=> 'Y' ,
1164                                     X_units_assigned		=> l_distributions_tab(l_idx).units ,
1165                                     X_asset_id		        => l_transaction.asset_id ,
1166                                     X_distribution_id      	=> l_distributions_tab(l_idx).distribution_id ,
1167                                     X_period_counter       	=> l_transaction.period_counter,
1168                                     X_adjustment_offset_type => 'REVAL RESERVE' ,
1169                                     X_report_ccid        	=> l_reval_rsv_ccid ,
1170                                     x_mode                  => 'R',
1171                                     X_event_id              =>  p_event_id ) ;
1172 
1173                             END IF; /* End of checking adjusted_cost > 0 */
1174                         END IF; /* End of distribution amount is not zero */
1175 
1176                         /* Bug 2423710 vgadde 19/06/2002 Start(2) */
1177                         IF (p_asset_balance.adjusted_cost > 0) THEN
1178                             l_reval_reserve_net := nvl(l_detail_balance.reval_reserve_net,0) - l_distribution_amount;
1179                             l_reval_general_fund := nvl(l_detail_balance.reval_reserve_gen_fund,0) + l_distribution_amount;
1180                             l_general_fund_acc := nvl(l_detail_balance.general_fund_acc,0) + l_distribution_amount;
1181                         ELSE
1182                             l_reval_reserve_net := nvl(l_detail_balance.reval_reserve_net,0) ;
1183                             l_reval_general_fund := nvl(l_detail_balance.reval_reserve_gen_fund,0) ;
1184                             l_general_fund_acc := nvl(l_detail_balance.general_fund_acc,0) ;
1185                         END IF;
1186                         /* Bug 2423710 vgadde 19/06/2002 End(2) */
1187 
1188                         IF (l_last_catchup_prd_rec.period_counter < p_period_counter - 1) THEN
1189                             l_iac_deprn_period_amount := 0;
1190                         ELSE
1191                             l_iac_deprn_period_amount := l_dist_period_amount;
1192                         END IF;
1193 
1194                         IF (l_last_catchup_prd_rec.period_num > l_last_reval_prd_rec.period_num) THEN
1195                             l_deprn_ytd := l_detail_balance.deprn_ytd + (l_iac_active_dists_YTD * l_distributions_tab(l_idx).prorate_factor);
1196                         ELSE
1197                             l_deprn_ytd := (l_iac_active_dists_YTD * l_distributions_tab(l_idx).prorate_factor);
1198                         END IF;
1199 
1200                         IF NOT igi_iac_common_utils.iac_round(l_deprn_ytd,
1201                                                         l_transaction.book_type_code) THEN
1202                             return FALSE;
1203                         END IF;
1204 
1205                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1206                             p_full_path => l_path_name,
1207                             p_string => '     Inserting into igi_iac_det_balances ');
1208                         l_rowid := NULL;
1209                         igi_iac_det_balances_pkg.insert_row(
1210                         		X_rowid                     => l_rowid ,
1211 			     		    X_adjustment_id		    => l_adjustment_id ,
1212     					    X_asset_id		    => l_detail_balance.asset_id ,
1213 	    				    X_distribution_id	    => l_detail_balance.distribution_id ,
1214 		    			    X_book_type_code	    => l_detail_balance.book_type_code ,
1215 			    		    X_period_counter	    => l_detail_balance.period_counter ,
1216 				    	    X_adjustment_cost	    => l_detail_balance.adjustment_cost ,
1217                             X_net_book_value	    => l_detail_balance.net_book_value - l_distribution_amount ,
1218         				    X_reval_reserve_cost	    => l_detail_balance.reval_reserve_cost ,
1219 		    			    X_reval_reserve_backlog     => l_detail_balance.reval_reserve_backlog ,
1220 			    		    X_reval_reserve_gen_fund    => l_reval_general_fund ,
1221 				    	    X_reval_reserve_net	    => l_reval_reserve_net,
1222                             X_operating_acct_cost	    => l_detail_balance.operating_acct_cost ,
1223     					    X_operating_acct_backlog    => l_detail_balance.operating_acct_backlog ,
1224 	    				    X_operating_acct_net	    => l_detail_balance.operating_acct_net ,
1225  		    			    X_operating_acct_ytd	    => l_detail_balance.operating_acct_ytd ,
1226 			    		    X_deprn_period		    => l_iac_deprn_period_amount ,
1227  				    	    X_deprn_ytd		    => l_deprn_ytd ,
1228                             X_deprn_reserve		    => l_detail_balance.deprn_reserve + l_distribution_amount ,
1229     					    X_deprn_reserve_backlog	    => l_detail_balance.deprn_reserve_backlog ,
1230 	    				    X_general_fund_per	    => l_distribution_amount ,
1231 		    			    X_general_fund_acc	    => l_general_fund_acc ,
1232  			    		    X_last_reval_date	    => l_detail_balance.last_reval_date ,
1233 				    	    X_current_reval_factor	    => l_detail_balance.current_reval_factor ,
1234                             X_cumulative_reval_factor   =>l_detail_balance.cumulative_reval_factor ,
1235      					    X_active_flag		    => l_detail_balance.active_flag ) ;
1236 
1237                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1238                             p_full_path => l_path_name,
1239                             p_string => '     distribution YTD:'||to_char(l_deprn_ytd));
1240 
1241                     END LOOP; /* End of Processing each distribution */
1242 
1243                     IF (l_last_catchup_prd_rec.period_counter < p_period_counter - 1) THEN
1244                         l_iac_deprn_period_amount := 0;
1245                     ELSE
1246                         l_iac_deprn_period_amount := p_asset_balance.deprn_amount;
1247                     END IF;
1248 
1249                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1250                         p_full_path => l_path_name,
1251                         p_string => '     Updating asset balances record for the current period');
1252                     igi_iac_asset_balances_pkg.update_row(
1253 		    			X_asset_id		=> p_asset_balance.asset_id ,
1254 				    	X_book_type_code	=> p_asset_balance.book_type_code ,
1255     					X_period_counter	=> p_period_counter ,
1256 	    				X_net_book_value	=> p_asset_balance.net_book_value ,
1257 		    			X_adjusted_cost		=> p_asset_balance.adjusted_cost ,
1258 			    		X_operating_acct	=> p_asset_balance.operating_acct ,
1259 				    	X_reval_reserve		=> p_asset_balance.reval_reserve ,
1260                         X_deprn_amount		=> l_iac_deprn_period_amount ,
1261     					X_deprn_reserve		=> p_asset_balance.deprn_reserve ,
1262 	    				X_backlog_deprn_reserve => p_asset_balance.backlog_deprn_reserve ,
1263 		    			X_general_fund		=> p_asset_balance.general_fund ,
1264 			    		X_last_reval_date	=> p_asset_balance.last_reval_date ,
1265 				    	X_current_reval_factor	=> p_asset_balance.current_reval_factor ,
1266                         X_cumulative_reval_factor => p_asset_balance.cumulative_reval_factor ) ;
1267 
1268                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1269                         p_full_path => l_path_name,
1270                         p_string => '	    Updating asset balances record for the next period');
1271                     igi_iac_asset_balances_pkg.update_row(
1272 		    			X_asset_id		=> p_asset_balance.asset_id ,
1273 				    	X_book_type_code	=> p_asset_balance.book_type_code ,
1274     					X_period_counter	=> p_period_counter + 1 ,
1275 	    				X_net_book_value	=> p_asset_balance.net_book_value ,
1276 		    			X_adjusted_cost		=> p_asset_balance.adjusted_cost ,
1277 			    		X_operating_acct	=> p_asset_balance.operating_acct ,
1278 				    	X_reval_reserve		=> p_asset_balance.reval_reserve ,
1279                         X_deprn_amount		=> l_iac_deprn_period_amount ,
1280     					X_deprn_reserve		=> p_asset_balance.deprn_reserve ,
1281 	    				X_backlog_deprn_reserve => p_asset_balance.backlog_deprn_reserve ,
1282 		    			X_general_fund		=> p_asset_balance.general_fund ,
1283 			    		X_last_reval_date	=> p_asset_balance.last_reval_date ,
1284 				    	X_current_reval_factor	=> p_asset_balance.current_reval_factor ,
1285                         X_cumulative_reval_factor => p_asset_balance.cumulative_reval_factor ) ;
1286 
1287 
1288                     FOR l_idx IN l_fa_dist_catchup_tab.FIRST..l_fa_dist_catchup_tab.LAST LOOP
1289 
1290                         OPEN c_get_iac_fa_deprn_rec(l_transaction.adjustment_id, l_fa_dist_catchup_tab(l_idx).distribution_id);
1291                         FETCH c_get_iac_fa_deprn_rec INTO l_iac_fa_deprn_rec;
1292                         CLOSE c_get_iac_fa_deprn_rec;
1293 
1294                         IF (l_last_catchup_prd_rec.period_num > l_last_reval_prd_rec.period_num) THEN
1295                     		l_deprn_ytd := l_iac_fa_deprn_rec.deprn_ytd + (l_fa_active_dists_YTD * l_fa_dist_catchup_tab(l_idx).prorate_factor);
1296                         ELSE
1297                     		l_deprn_ytd := (l_fa_active_dists_YTD * l_fa_dist_catchup_tab(l_idx).prorate_factor);
1298                         END IF;
1299 
1300                         IF (l_last_catchup_prd_rec.period_counter < p_period_counter - 1) THEN
1301                     		l_fa_deprn_period_amount := 0;
1302                         ELSE
1303                     		l_fa_deprn_period_amount := p_fa_deprn_expense_cy * l_fa_dist_catchup_tab(l_idx).prorate_factor;
1304                         END IF;
1305 
1306                         IF NOT igi_iac_common_utils.iac_round(l_fa_deprn_period_amount,
1307                                                         l_iac_fa_deprn_rec.book_type_code) THEN
1308                        		return FALSE;
1309                         END IF;
1310 
1311                         IF NOT igi_iac_common_utils.iac_round(l_deprn_ytd,
1312                                                         l_iac_fa_deprn_rec.book_type_code) THEN
1313                        		return FALSE;
1314                         END IF;
1315 
1316                         IF NOT igi_iac_common_utils.iac_round(l_fa_dist_catchup_tab(l_idx).amount,
1317                                                         l_iac_fa_deprn_rec.book_type_code) THEN
1318                        		return FALSE;
1319                         END IF;
1320 
1321                         l_rowid := NULL;
1322                         igi_iac_fa_deprn_pkg.insert_row(
1323                             x_rowid			=> l_rowid,
1324                             x_book_type_code	=> l_iac_fa_deprn_rec.book_type_code,
1325                             x_asset_id		=> l_iac_fa_deprn_rec.asset_id,
1326                             x_distribution_id	=> l_iac_fa_deprn_rec.distribution_id,
1327                             x_period_counter	=> p_period_counter,
1328                             x_adjustment_id		=> l_adjustment_id,
1329                             x_deprn_period		=> l_fa_deprn_period_amount,
1330                             x_deprn_ytd		=> l_deprn_ytd ,
1331                             x_deprn_reserve		=> l_iac_fa_deprn_rec.deprn_reserve + l_fa_dist_catchup_tab(l_idx).amount,
1332                             x_active_flag		=> l_iac_fa_deprn_rec.active_flag,
1333                             x_mode			=> 'R');
1334                         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1335                             p_full_path => l_path_name,
1336                             p_string => '     distribution FA YTD:'||to_char(l_deprn_ytd));
1337 
1338                     END LOOP; /* processing distributions for igi_iac_fa_deprn */
1339 
1340 
1341                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1342                         p_full_path => l_path_name,
1343                         p_string => '     Closing the previous transaction created by IAC revaluation');
1344                     igi_iac_trans_headers_pkg.update_row(
1345 		    			X_prev_adjustment_id	=> l_transaction.adjustment_id ,
1346 					    X_adjustment_id		    => l_adjustment_id ) ;
1347 
1348                 END LOOP; /* End of Processing the transaction */
1349             ELSE /* calling function is UPGRADE */
1350 
1351                 FOR l_upgrade_rec IN c_get_upgrade_rec LOOP
1352                     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1353                         p_full_path => l_path_name,
1354                         p_string => '     Processing for upgrade. Updating the record');
1355 
1356                     /* Bug 2961656 vgadde 08-Jul-2003 Start(7) */
1357             	    IF p_fa_deprn_ytd IS NOT NULL THEN
1358                         l_deprn_ytd := p_fa_deprn_ytd;
1359             	    ELSE
1360                         l_deprn_ytd := p_fa_deprn_expense_cy * l_last_catchup_prd_rec.period_num;
1361             	    END IF;
1362                     l_fa_deprn_acc := p_fa_deprn_reserve;
1363                     /* Bug 2961656 vgadde 08-Jul-2003 End(7) */
1364 
1365                     IF (l_last_catchup_prd_rec.period_counter < p_period_counter - 1) THEN
1366                         l_iac_deprn_period_amount := 0;
1367                         l_fa_deprn_period_amount := 0;
1368                     ELSE
1369                         l_fa_deprn_period_amount := p_fa_deprn_expense_cy;
1370                         l_iac_deprn_period_amount := p_asset_balance.deprn_amount;
1371                     END IF;
1372 
1373                     UPDATE igi_imp_iac_interface_py_add
1374                     SET net_book_value  	= p_asset_balance.net_book_value,
1375                         adjusted_cost   	= p_asset_balance.adjusted_cost,
1376                         operating_acct  	= p_asset_balance.operating_acct,
1377                         reval_reserve   	= p_asset_balance.reval_reserve,
1378                         deprn_amount    	= l_iac_deprn_period_amount,
1379                         deprn_reserve   	= p_asset_balance.deprn_reserve,
1380                         backlog_deprn_reserve 	= p_asset_balance.backlog_deprn_reserve,
1381                         general_fund    	= p_asset_balance.general_fund,
1382                         hist_deprn_expense      = l_fa_deprn_period_amount,
1383                         hist_accum_deprn 	= l_fa_deprn_acc,
1384                         hist_ytd		= l_deprn_ytd,
1385                         hist_nbv		= l_upgrade_rec.hist_cost - l_fa_deprn_acc,
1386                         general_fund_periodic   = p_asset_balance.deprn_amount
1387                     WHERE   asset_id = l_upgrade_rec.asset_id
1388                     AND     book_type_code = l_upgrade_rec.book_type_code
1389                     AND     period_counter = l_upgrade_rec.period_counter;
1390 
1391                 END LOOP;
1392             END IF; /* End of check for calling function */
1393         END IF; /* End of check for CRUD allowed */
1394         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1395             p_full_path => l_path_name,
1396             p_string => ' End of Processing by Do_Deprn_Catchup');
1397         return TRUE;
1398 
1399         EXCEPTION
1400             WHEN OTHERS THEN
1401   		        igi_iac_debug_pkg.debug_unexpected_msg(p_full_path => l_path_name);
1402                 return FALSE;
1403     END Do_Deprn_Catchup;
1404 
1405     FUNCTION do_reval_init_struct(
1406                     p_period_counter        IN NUMBER,
1407                     p_reval_control         IN OUT NOCOPY igi_iac_types.iac_reval_control_tab,
1408                     p_reval_asset_params    IN OUT NOCOPY igi_iac_types.iac_reval_asset_params_tab,
1409                     p_reval_input_asset     IN OUT NOCOPY igi_iac_types.iac_reval_asset_tab,
1410                     p_reval_output_asset    IN OUT NOCOPY igi_iac_types.iac_reval_asset_tab,
1411                     p_reval_output_asset_mvmt IN OUT NOCOPY igi_iac_types.iac_reval_asset_tab,
1412                     p_reval_asset_rules     IN OUT NOCOPY igi_iac_types.iac_reval_asset_rules_tab,
1413                     p_prev_rate_info        IN OUT NOCOPY igi_iac_types.iac_reval_rates_tab,
1414                     p_curr_rate_info_first  IN OUT NOCOPY igi_iac_types.iac_reval_rates_tab,
1415                     p_curr_rate_info_next   IN OUT NOCOPY igi_iac_types.iac_reval_rates_tab,
1416                     p_curr_rate_info        IN OUT NOCOPY igi_iac_types.iac_reval_rates_tab,
1417                     p_reval_exceptions      IN OUT NOCOPY igi_iac_types.iac_reval_exceptions_tab,
1418                     p_fa_asset_info         IN OUT NOCOPY igi_iac_types.iac_reval_fa_asset_info_tab,
1419                     p_fa_deprn_expense_py   IN NUMBER,
1420                     p_fa_deprn_expense_cy   IN NUMBER,
1421                     p_asset_last_period     IN NUMBER,
1422                     p_calling_function      IN VARCHAR2
1423                     ) return BOOLEAN IS
1424 
1425         CURSOR c_fa_asset_info IS
1426         SELECT cost,
1427                 adjusted_cost,
1428                 original_cost,
1429                 salvage_value,
1430                 life_in_months,
1431                 rate_adjustment_factor,
1432                 period_counter_fully_reserved,
1433                 adjusted_recoverable_cost,
1434                 recoverable_cost,
1435                 date_placed_in_service,
1436                 0 deprn_periods_elapsed,
1437                 0 deprn_periods_current_year,
1438                 0 deprn_periods_prior_year,
1439                 last_period_counter,
1440                 gl_posting_allowed_flag,
1441                 0 ytd_deprn,
1442                 0 deprn_reserve,
1443                 0 pys_deprn_reserve,
1444                 0 deprn_amount,
1445                 deprn_start_date,
1446                 depreciate_flag
1447         FROM    fa_books b, fa_book_controls c
1448         WHERE   b.book_type_code = p_reval_asset_params(1).book_type_code
1449         AND     c.book_type_code = p_reval_asset_params(1).book_type_code
1450         AND     b.asset_id = p_reval_asset_params(1).asset_id
1451         AND     b.transaction_header_id_out IS NULL;
1452 
1453 
1454         CURSOR c_get_user_deprn IS
1455         SELECT period_counter,deprn_reserve,YTD_deprn
1456         FROM fa_deprn_summary
1457         WHERE book_type_code = p_reval_asset_params(1).book_type_code
1458         AND asset_id = p_reval_asset_params(1).asset_id
1459         AND deprn_source_code = 'BOOKS';
1460 
1461 
1462         l_user_id           NUMBER ;
1463         l_login_id          NUMBER ;
1464         l_prev_price_index  NUMBER;
1465         l_dpis_price_index  NUMBER;
1466         l_curr_price_index  NUMBER;
1467         l_curr_period       igi_iac_types.prd_rec;
1468         l_dpis_period       igi_iac_types.prd_rec;
1469 	/* Bug 2961656 vgadde 08-jul-2003 Start(8) */
1470         l_open_period       igi_iac_types.prd_rec;
1471         l_last_catchup_period igi_iac_types.prd_rec;
1472         l_last_deprn_period igi_iac_types.prd_rec;
1473         l_fa_asset_info     igi_iac_types.fa_hist_asset_info;
1474         l_reval_factor      NUMBER;
1475         l_last_deprn_date   DATE;
1476 	/* Bug 2961656 vgadde 08-jul-2003 End(8) */
1477         l_path_name VARCHAR2(150);
1478         l_booksrow_period_rec igi_iac_types.prd_rec;
1479         l_deprn_calendar    fa_calendar_types.calendar_type%TYPE;
1480         l_periods_in_year   fa_calendar_types.number_per_fiscal_year%TYPE;
1481         l_booksrow_period   NUMBER;
1482         l_booksrow_reserve  NUMBER;
1483         l_booksrow_YTD  NUMBER;
1484         l_fa_deprn_expense_py   NUMBER;
1485         l_fa_deprn_expense_cy   NUMBER;
1486 
1487     BEGIN
1488          IF FND_PROFILE.VALUE('IGI_DEBUG_OPTION') = 'Y'  THEN
1489                 g_debug := TRUE;
1490          END IF;
1491         l_path_name := g_path||'do_reval_init_struct';
1492         l_user_id            := fnd_global.user_id;
1493         l_login_id           := fnd_global.login_id;
1494 
1495         	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1496 		                                         p_full_path => l_path_name,
1497 		                                         p_string => '-----------Start of processing by do_reval_init_struct');
1498         OPEN c_fa_asset_info;
1499         FETCH c_fa_asset_info INTO l_fa_asset_info;
1500         CLOSE c_fa_asset_info;
1501 
1502         IF NOT igi_iac_common_utils.get_period_info_for_date(
1503                                          p_reval_asset_params(1).book_type_code,
1504                                          l_fa_asset_info.date_placed_in_service,
1505                                          l_dpis_period) THEN
1506              return FALSE;
1507         END IF;
1508   	        igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1509 		                                         p_full_path => l_path_name,
1510                                                  p_string => '    DPIS Period Info');
1511         	Debug_Period(l_dpis_period);
1512 
1513         IF NOT igi_iac_common_utils.get_price_index_value(
1514                                         p_reval_asset_params(1).book_type_code,
1515                                         p_reval_asset_params(1).asset_id,
1516                                         l_dpis_period.period_name,
1517                                         l_dpis_price_index) THEN
1518             return FALSE;
1519         END IF;
1520       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1521 	                                	     p_full_path => l_path_name,
1522                                 		     p_string => '     Price Index for DPIS :'||to_char(l_dpis_price_index));
1523         l_prev_price_index := l_dpis_price_index;
1524 
1525 	/* Bug 2961656 vgadde 08-jul-2003 Start(9) */
1526         /*IF NOT get_FA_Deprn_Expense(p_reval_asset_params(1).asset_id,
1527                                  p_reval_asset_params(1).book_type_code,
1528                                  p_period_counter,
1529                                  p_calling_function,
1530                                  l_fa_deprn_amount,
1531                                  l_last_asset_period) THEN
1532                 return FALSE;
1533         END IF;*/
1534 	/* Bug 2961656 vgadde 08-jul-2003 End(9) */
1535 
1536        ---Get the details for supplied depreciation and YTD --------
1537        IF (p_calling_function = 'ADDITION' OR p_calling_function = 'RECLASS') THEN
1538 
1539             OPEN c_get_user_deprn;
1540             FETCH c_get_user_deprn INTO l_booksrow_period, l_booksrow_reserve,l_booksrow_ytd;
1541             CLOSE c_get_user_deprn;
1542 
1543     	   /* OPEN c_get_deprn_calendar;
1544 	        FETCH c_get_deprn_calendar INTO l_deprn_calendar;
1545 	        CLOSE c_get_deprn_calendar;
1546 
1547     	    OPEN c_get_periods_in_year(l_deprn_calendar);
1548 	        FETCH c_get_periods_in_year INTO l_periods_in_year;
1549 	        CLOSE c_get_periods_in_year;*/
1550 
1551        END IF;
1552        ---Get the details for supplied depreciation and YTD --------
1553 
1554 
1555         FOR idx IN p_reval_control.FIRST..p_reval_control.LAST LOOP
1556 
1557             IF NOT (igi_iac_common_utils.get_period_info_for_counter(
1558                                         p_reval_asset_params(idx).book_type_code,
1559                                         p_reval_asset_params(idx).period_counter,
1560                                         l_curr_period)) THEN
1561                 return FALSE;
1562             END IF;
1563 
1564             IF NOT (igi_iac_common_utils.get_price_index_value(
1565                                         p_reval_asset_params(idx).book_type_code,
1566                                         p_reval_asset_params(idx).asset_id,
1567                                         l_curr_period.period_name,
1568                                         l_curr_price_index)) THEN
1569                 return FALSE;
1570             END IF;
1571   	             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1572 		     p_full_path => l_path_name,
1573 		     p_string => '     Price Index for current revaluation catchup period :'||to_char(l_curr_price_index));
1574 
1575             l_reval_factor := l_curr_price_index / l_prev_price_index ;
1576   	         igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1577 		     p_full_path => l_path_name,
1578 		     p_string => '     Current Reval Factor : '||to_char(l_reval_factor));
1579             IF (idx = p_reval_control.FIRST) THEN
1580   		            igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1581 		     	p_full_path => l_path_name,
1582 		     	p_string => '     Initialization for First revaluation ');
1583                 p_reval_control(idx).first_time_flag := TRUE;
1584 
1585   		                igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1586 		     	p_full_path => l_path_name,
1587 		     	p_string => '     Initializing reval input asset');
1588                 p_reval_input_asset(idx).asset_id := p_reval_asset_params(idx).asset_id;
1589                 p_reval_input_asset(idx).book_type_code := p_reval_asset_params(idx).book_type_code;
1590                 p_reval_input_asset(idx).period_counter := p_reval_asset_params(idx).period_counter;
1591                 p_reval_input_asset(idx).net_book_value := 0;
1592                 p_reval_input_asset(idx).adjusted_cost := 0;
1593                 p_reval_input_asset(idx).operating_acct := 0;
1594                 p_reval_input_asset(idx).reval_reserve := 0;
1595                 p_reval_input_asset(idx).deprn_amount := 0;
1596                 p_reval_input_asset(idx).deprn_reserve := 0;
1597                 p_reval_input_asset(idx).backlog_deprn_reserve := 0;
1598                 p_reval_input_asset(idx).general_fund := 0;
1599                 p_reval_input_asset(idx).last_reval_date := sysdate;
1600                 p_reval_input_asset(idx).current_reval_factor := l_reval_factor;
1601                 p_reval_input_asset(idx).cumulative_reval_factor := l_reval_factor;
1602                 p_reval_input_asset(idx).created_by := l_user_id;
1603                 p_reval_input_asset(idx).creation_date := sysdate;
1604                 p_reval_input_asset(idx).last_update_login := l_login_id;
1605                 p_reval_input_asset(idx).last_update_date := sysdate;
1606                 p_reval_input_asset(idx).last_updated_by := l_user_id;
1607 
1608   	        	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1609 		     	p_full_path => l_path_name,
1610 		     	p_string => '     Initializing previous rate info');
1611                 p_prev_rate_info(idx).asset_id := p_reval_asset_params(idx).asset_id;
1612                 p_prev_rate_info(idx).book_type_code := p_reval_asset_params(idx).book_type_code;
1613                 p_prev_rate_info(idx).period_counter := p_reval_asset_params(idx).period_counter;
1614                 p_prev_rate_info(idx).revaluation_id := 0;
1615                 p_prev_rate_info(idx).current_reval_factor := 1;
1616                 p_prev_rate_info(idx).cumulative_reval_factor := 1;
1617                 p_prev_rate_info(idx).processed_flag := 'Y';
1618                 p_prev_rate_info(idx).latest_record := 'Y';
1619                 p_prev_rate_info(idx).created_by := l_user_id;
1620                 p_prev_rate_info(idx).creation_date := sysdate;
1621                 p_prev_rate_info(idx).last_update_login := l_login_id;
1622                 p_prev_rate_info(idx).last_update_date := sysdate;
1623                 p_prev_rate_info(idx).last_updated_by := l_user_id;
1624                 p_prev_rate_info(idx).adjustment_id := 0;
1625 
1626                 p_curr_rate_info(idx).cumulative_reval_factor := l_reval_factor;
1627 
1628             ELSE
1629 
1630                 p_reval_control(idx).first_time_flag := FALSE;
1631                 p_prev_rate_info(idx) := p_curr_rate_info(idx-1);
1632                 p_curr_rate_info(idx).current_reval_factor := l_reval_factor;
1633                 p_curr_rate_info(idx).cumulative_reval_factor :=
1634                                 l_reval_factor * p_curr_rate_info(idx-1).cumulative_reval_factor;
1635                 p_reval_input_asset(idx).current_reval_factor := l_reval_factor;
1636                 p_reval_input_asset(idx).cumulative_reval_factor :=
1637                                 p_curr_rate_info(idx).cumulative_reval_factor;
1638             END IF;
1639 
1640             IF (idx = p_reval_control.LAST) THEN
1641   		        igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1642 		     	p_full_path => l_path_name,
1643 		     	p_string => '     Last revaluation - setting CRUD flags to TRUE');
1644                 p_reval_control(idx).create_acctg_entries := TRUE;
1645                 p_reval_control(idx).crud_allowed := TRUE;
1646                 p_reval_control(idx).modify_balances := TRUE;
1647             ELSE
1648                 p_reval_control(idx).create_acctg_entries := FALSE;
1649                 p_reval_control(idx).crud_allowed := FALSE;
1650                 p_reval_control(idx).modify_balances := FALSE;
1651             END IF;
1652 
1653   	             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1654 		     p_full_path => l_path_name,
1655 		     p_string => '     Initializing reval control structure');
1656             p_reval_control(idx).transaction_type_code := p_calling_function;
1657             p_reval_control(idx).transaction_sub_type := 'REVALUATION';
1658             p_reval_control(idx).adjustment_status := 'COMPLETE';
1659             p_reval_control(idx).validate_business_rules := FALSE;
1660             p_reval_control(idx).message_level := 3;
1661             p_reval_control(idx).commit_flag := FALSE;
1662             p_reval_control(idx).print_report := FALSE;
1663             p_reval_control(idx).mixed_scenario := FALSE;
1664             p_reval_control(idx).show_exceptions := FALSE;
1665 
1666   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1667 		     p_full_path => l_path_name,
1668 		     p_string => '     Initializing reval asset params');
1669             p_reval_asset_params(idx).revaluation_rate := l_reval_factor;
1670             p_reval_asset_params(idx).revaluation_date := sysdate;
1671             p_reval_asset_params(idx).first_set_adjustment_id := 0;
1672             p_reval_asset_params(idx).second_set_adjustment_id := 0;
1673 
1674   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1675 		     p_full_path => l_path_name,
1676 		     p_string => '     Initializing reval out NOCOPY put asset');
1677             p_reval_output_asset(idx) := p_reval_input_asset(idx);
1678 
1679   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1680 		     p_full_path => l_path_name,
1681 		     p_string => '     Initializing reval output asset mvmt ');
1682             p_reval_output_asset_mvmt(idx) := p_reval_input_asset(idx);
1683             p_reval_output_asset_mvmt(idx).net_book_value := 0;
1684             p_reval_output_asset_mvmt(idx).adjusted_cost := 0;
1685             p_reval_output_asset_mvmt(idx).operating_acct := 0;
1686             p_reval_output_asset_mvmt(idx).reval_reserve := 0;
1687             p_reval_output_asset_mvmt(idx).deprn_amount := 0;
1688             p_reval_output_asset_mvmt(idx).deprn_reserve := 0;
1689             p_reval_output_asset_mvmt(idx).backlog_deprn_reserve := 0;
1690             p_reval_output_asset_mvmt(idx).general_fund := 0;
1691 
1692   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1693 		     p_full_path => l_path_name,
1694 		     p_string => '     Initializing current rate info');
1695             p_curr_rate_info(idx).asset_id := p_reval_asset_params(idx).asset_id;
1696             p_curr_rate_info(idx).book_type_code := p_reval_asset_params(idx).book_type_code;
1697             p_curr_rate_info(idx).period_counter := p_reval_asset_params(idx).period_counter;
1698             p_curr_rate_info(idx).revaluation_id := 0;
1699             p_curr_rate_info(idx).reval_type := p_reval_asset_rules(idx).revaluation_type;
1700             p_curr_rate_info(idx).current_reval_factor := l_reval_factor;
1701             p_curr_rate_info(idx).processed_flag := 'Y';
1702             p_curr_rate_info(idx).latest_record := 'Y';
1703             p_curr_rate_info(idx).created_by := l_user_id;
1704             p_curr_rate_info(idx).creation_date := sysdate;
1705             p_curr_rate_info(idx).last_update_login := l_login_id;
1706             p_curr_rate_info(idx).last_update_date := sysdate;
1707             p_curr_rate_info(idx).last_updated_by := l_user_id;
1708             p_curr_rate_info(idx).adjustment_id := 0;
1709 
1710   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1711 		     p_full_path => l_path_name,
1712 		     p_string => '     Initializing current rate info first and current rate info next');
1713             p_curr_rate_info_first(idx) := p_curr_rate_info(idx);
1714             p_curr_rate_info_next(idx) := p_curr_rate_info(idx);
1715 
1716   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1717 		     p_full_path => l_path_name,
1718 		     p_string => '     Initializing reval asset rules');
1719             p_reval_asset_rules(idx).book_type_code := p_reval_asset_params(idx).book_type_code;
1720             p_reval_asset_rules(idx).asset_id := p_reval_asset_params(idx).asset_id;
1721             p_reval_asset_rules(idx).revaluation_factor := l_reval_factor;
1722             p_reval_asset_rules(idx).category_id := p_reval_asset_params(idx).category_id;
1723             p_reval_asset_rules(idx).revaluation_id := 0;
1724 
1725   	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1726 		     p_full_path => l_path_name,
1727 		     p_string => '     Initializing fa asset info');
1728             p_fa_asset_info(idx) := l_fa_asset_info;
1729 
1730 	    /* Bug 2961656 vgadde 08-jul-2003 Start(10) */
1731             IF (p_calling_function = 'ADDITION' OR p_calling_function = 'RECLASS') THEN
1732 
1733                  ---Get the details for supplied depreciation and YTD --------
1734                  IF ((p_calling_function = 'ADDITION') AND (NVL(l_booksrow_YTD,0) <> 0) AND (p_asset_last_period IS NuLL))  THEN -- supplied YYD
1735 
1736                         IF NOT (igi_iac_common_utils.get_period_info_for_counter(
1737                                         p_reval_asset_params(idx).book_type_code,
1738                                         p_period_counter-1,
1739                                         l_open_period)) THEN
1740                       		    igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
1741 		                                                             p_full_path => l_path_name,
1742                                            		     		         p_string => '     Error in getting open period information');
1743                             return FALSE;
1744                         END IF;
1745 
1746                         IF (l_open_period.fiscal_year <> l_curr_period.fiscal_year) THEN -- If not addition year
1747 
1748                                     p_fa_asset_info(idx).deprn_amount := p_fa_deprn_expense_py;
1749                                     p_fa_asset_info(idx).deprn_periods_elapsed :=l_curr_period.period_counter - l_dpis_period.period_counter + 1;
1750                                     --p_fa_asset_info(idx).deprn_amount := (l_booksrow_reserve-l_booksrow_YTD)/p_fa_asset_info(idx).deprn_periods_elapsed;
1751                                     IF (l_dpis_period.fiscal_year = l_curr_period.fiscal_year AND l_dpis_period.period_num <= l_curr_period.period_num) THEN
1752                                 	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num - l_dpis_period.period_num + 1;
1753     		                        ELSE
1754                     	                p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num ;
1755                             		END IF;
1756                                     p_fa_asset_info(idx).deprn_periods_prior_year :=
1757                                     p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1758                                     p_fa_asset_info(idx).deprn_reserve :=
1759                                     p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_deprn_expense_py;
1760                                     p_fa_asset_info(idx).ytd_deprn :=
1761                                     p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_py;
1762                                     p_fa_asset_info(idx).pys_deprn_reserve :=
1763                                     p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1764                          ELSE /* Revaluation in the latest fiscal year */
1765                                         p_fa_asset_info(idx).deprn_periods_elapsed :=
1766                                         l_curr_period.period_counter - l_dpis_period.period_counter + 1;
1767 
1768                                         IF (l_dpis_period.fiscal_year = l_curr_period.fiscal_year AND l_dpis_period.period_num <= l_curr_period.period_num) THEN
1769                                                p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num - l_dpis_period.period_num + 1;
1770                         		        ELSE
1771                                     	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num ;
1772                                 		END IF;
1773     		                            p_fa_asset_info(idx).deprn_periods_prior_year :=
1774                                         p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1775                                         p_fa_asset_info(idx).pys_deprn_reserve := p_fa_asset_info(idx).deprn_periods_prior_year*p_fa_deprn_expense_py;
1776                                         p_fa_asset_info(idx).ytd_deprn :=  p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_cy;
1777                                         p_fa_asset_info(idx).deprn_reserve :=p_fa_asset_info(idx).pys_deprn_reserve+p_fa_asset_info(idx).ytd_deprn;
1778                                         p_fa_asset_info(idx).deprn_amount :=p_fa_deprn_expense_cy;
1779 
1780                      END IF;
1781             ELSE      -- If no supplied YTD
1782 
1783                     IF (nvl(p_asset_last_period,l_curr_period.period_counter+1) >= l_curr_period.period_counter) THEN
1784                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1785                                          l_curr_period.period_counter - l_dpis_period.period_counter + 1 ;
1786                     ELSE
1787                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1788                                         p_asset_last_period - l_dpis_period.period_counter + 1;
1789                     END IF;
1790                     p_fa_asset_info(idx).deprn_reserve :=
1791                                 p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_deprn_expense_py;
1792 
1793                     IF NOT igi_iac_ytd_engine.Calculate_YTD
1794                                     ( p_reval_asset_params(1).book_type_code,
1795                                       p_reval_asset_params(1).asset_id,
1796                                       p_fa_asset_info(idx),
1797                                      l_dpis_period.period_counter,
1798                                      l_curr_period.period_counter,
1799                                     p_calling_function) THEN
1800                         RETURN FALSE;
1801                     END IF;
1802 
1803                 END IF; -- supplied YTd
1804 
1805             ELSIF p_calling_function = 'UPGRADE' THEN
1806 
1807             IF (p_fa_deprn_expense_py = p_fa_deprn_expense_cy) THEN
1808                 IF (nvl(p_asset_last_period,l_curr_period.period_counter+1) >= l_curr_period.period_counter) THEN
1809                     p_fa_asset_info(idx).deprn_periods_elapsed :=
1810                         l_curr_period.period_counter - l_dpis_period.period_counter + 1 ;
1811                 ELSE
1812                     p_fa_asset_info(idx).deprn_periods_elapsed :=
1813                             p_asset_last_period - l_dpis_period.period_counter + 1;
1814                 END IF;
1815                 p_fa_asset_info(idx).deprn_reserve :=
1816                             p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_deprn_expense_py;
1817 
1818                 IF NOT igi_iac_ytd_engine.Calculate_YTD
1819                                 ( p_reval_asset_params(1).book_type_code,
1820                                 p_reval_asset_params(1).asset_id,
1821                                 p_fa_asset_info(idx),
1822                                 l_dpis_period.period_counter,
1823                                 l_curr_period.period_counter,
1824                                 p_calling_function) THEN
1825                     RETURN FALSE;
1826                 END IF;
1827             ELSE
1828 
1829                 IF NOT (igi_iac_common_utils.get_period_info_for_counter(
1830                                         p_reval_asset_params(idx).book_type_code,
1831                                         p_period_counter,
1832                                         l_open_period)) THEN
1833           		    igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
1834 		     		p_full_path => l_path_name,
1835 		     		p_string => '     Error in getting open period information');
1836                     return FALSE;
1837                 END IF;
1838 
1839                 IF p_asset_last_period IS NOT NULL THEN
1840                     IF NOT igi_iac_common_utils.get_period_info_for_counter(
1841                                                     p_reval_asset_params(idx).book_type_code,
1842                                                     p_asset_last_period,
1843                                                     l_last_deprn_period) THEN
1844                       			igi_iac_debug_pkg.debug_other_string(p_level => g_error_level,
1845 		         	                                 	p_full_path => l_path_name,
1846                             		             		p_string => '     Error in getting last depreciation period information');
1847                             return FALSE;
1848                     END IF;
1849                 END IF;
1850 
1851                 IF (l_open_period.fiscal_year <> l_curr_period.fiscal_year) THEN
1852                     IF (nvl(p_asset_last_period,l_curr_period.period_counter+1) >= l_curr_period.period_counter) THEN
1853                         p_fa_asset_info(idx).deprn_amount := p_fa_deprn_expense_py;
1854                         p_fa_asset_info(idx).deprn_periods_elapsed :=
1855                             l_curr_period.period_counter - l_dpis_period.period_counter + 1;
1856                         IF (l_dpis_period.fiscal_year = l_curr_period.fiscal_year AND l_dpis_period.period_num <= l_curr_period.period_num) THEN
1857                     	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num - l_dpis_period.period_num + 1;
1858     		        ELSE
1859                     	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num ;
1860             		END IF;
1861                         p_fa_asset_info(idx).deprn_periods_prior_year :=
1862                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1863                         p_fa_asset_info(idx).deprn_reserve :=
1864                                 p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_asset_info(idx).deprn_amount;
1865                         p_fa_asset_info(idx).ytd_deprn :=
1866                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_asset_info(idx).deprn_amount;
1867                         p_fa_asset_info(idx).pys_deprn_reserve :=
1868                                 p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1869                     ELSE
1870                         IF l_last_deprn_period.fiscal_year = l_curr_period.fiscal_year THEN
1871                             p_fa_asset_info(idx).deprn_amount := 0;
1872                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1873                                 l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
1874                             IF (l_dpis_period.fiscal_year = l_last_deprn_period.fiscal_year AND l_dpis_period.period_num <= l_last_deprn_period.period_num) THEN
1875                     	        p_fa_asset_info(idx).deprn_periods_current_year := l_last_deprn_period.period_num - l_dpis_period.period_num + 1;
1876     		            ELSE
1877                     	        p_fa_asset_info(idx).deprn_periods_current_year := l_last_deprn_period.period_num ;
1878             		    END IF;
1879     		            p_fa_asset_info(idx).deprn_periods_prior_year :=
1880                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1881                             p_fa_asset_info(idx).deprn_reserve :=
1882                                 p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_deprn_expense_py;
1883                             p_fa_asset_info(idx).ytd_deprn :=
1884                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_py;
1885                             p_fa_asset_info(idx).pys_deprn_reserve :=
1886                                 p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1887                         ELSE /* fully reserved in a year prior to current revaluation */
1888                             p_fa_asset_info(idx).deprn_amount := 0;
1889                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1890                                 l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
1891                             p_fa_asset_info(idx).deprn_periods_current_year := 0;
1892     		            p_fa_asset_info(idx).deprn_periods_prior_year :=
1893                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1894                             p_fa_asset_info(idx).deprn_reserve :=
1895                                 p_fa_asset_info(idx).deprn_periods_elapsed * p_fa_deprn_expense_py;
1896                             p_fa_asset_info(idx).ytd_deprn :=
1897                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_py;
1898                             p_fa_asset_info(idx).pys_deprn_reserve :=
1899                                 p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1900                         END IF;
1901                     END IF;
1902                 ELSE /* Revaluation in the latest fiscal year */
1903                     IF (nvl(p_asset_last_period,l_curr_period.period_counter+1) >= l_curr_period.period_counter) THEN
1904                         p_fa_asset_info(idx).deprn_amount := p_fa_deprn_expense_cy;
1905                         p_fa_asset_info(idx).deprn_periods_elapsed :=
1906                             l_curr_period.period_counter - l_dpis_period.period_counter + 1;
1907                         IF (l_dpis_period.fiscal_year = l_curr_period.fiscal_year AND l_dpis_period.period_num <= l_curr_period.period_num) THEN
1908                     	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num - l_dpis_period.period_num + 1;
1909     		        ELSE
1910                     	    p_fa_asset_info(idx).deprn_periods_current_year := l_curr_period.period_num ;
1911             		END IF;
1912     		        p_fa_asset_info(idx).deprn_periods_prior_year :=
1913                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1914                         p_fa_asset_info(idx).deprn_reserve :=
1915                                 p_fa_asset_info(idx).deprn_periods_prior_year * p_fa_deprn_expense_py +
1916                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_cy;
1917                         p_fa_asset_info(idx).ytd_deprn :=
1918                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_cy;
1919                         p_fa_asset_info(idx).pys_deprn_reserve :=
1920                                 p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1921                     ELSE
1922                         IF l_last_deprn_period.fiscal_year = l_curr_period.fiscal_year THEN
1923                             p_fa_asset_info(idx).deprn_amount := 0;
1924                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1925                                 l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
1926                             IF (l_dpis_period.fiscal_year = l_last_deprn_period.fiscal_year AND l_dpis_period.period_num <= l_last_deprn_period.period_num) THEN
1927                     	        p_fa_asset_info(idx).deprn_periods_current_year := l_last_deprn_period.period_num - l_dpis_period.period_num + 1;
1928     		            ELSE
1929                     	        p_fa_asset_info(idx).deprn_periods_current_year := l_last_deprn_period.period_num ;
1930             		    END IF;
1931     		            p_fa_asset_info(idx).deprn_periods_prior_year :=
1932                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1933                             p_fa_asset_info(idx).deprn_reserve :=
1934                                 p_fa_asset_info(idx).deprn_periods_prior_year * p_fa_deprn_expense_py +
1935                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_cy;
1936                             p_fa_asset_info(idx).ytd_deprn :=
1937                                 p_fa_asset_info(idx).deprn_periods_current_year * p_fa_deprn_expense_cy;
1938                             p_fa_asset_info(idx).pys_deprn_reserve :=
1939                                 p_fa_asset_info(idx).deprn_reserve - p_fa_asset_info(idx).ytd_deprn;
1940                         ELSE /* fully reserved in a year prior to current revaluation */
1941                             p_fa_asset_info(idx).deprn_amount := 0;
1942                             p_fa_asset_info(idx).deprn_periods_elapsed :=
1943                                 l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
1944                             p_fa_asset_info(idx).deprn_periods_current_year := 0;
1945     		                p_fa_asset_info(idx).deprn_periods_prior_year :=
1946                                 p_fa_asset_info(idx).deprn_periods_elapsed - p_fa_asset_info(idx).deprn_periods_current_year;
1947                             p_fa_asset_info(idx).deprn_reserve :=
1948                                 p_fa_asset_info(idx).deprn_periods_prior_year * p_fa_deprn_expense_py;
1949                             p_fa_asset_info(idx).ytd_deprn := 0;
1950                             p_fa_asset_info(idx).pys_deprn_reserve := p_fa_asset_info(idx).deprn_reserve;
1951                         END IF;
1952                     END IF;
1953                 END IF;
1954             END IF;
1955             END IF;
1956 	        /* Bug 2961656 vgadde 08-jul-2003 End(10) */
1957       	     igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1958 		                                     p_full_path => l_path_name,
1959                                 		     p_string => '         Deprn amount :'||to_char(p_fa_asset_info(idx).deprn_amount));
1960   	        igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1961 		                                     p_full_path => l_path_name,
1962                                 		     p_string => '         Deprn periods elapsed :'||to_char(p_fa_asset_info(idx).deprn_periods_elapsed));
1963       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1964 	                                    	     p_full_path => l_path_name,
1965                                     		     p_string => '         Deprn periods current year :'||to_char(p_fa_asset_info(idx).deprn_periods_current_year));
1966       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1967 	                                             p_full_path => l_path_name,
1968                                     		     p_string => '         Deprn periods prior year :'||to_char(p_fa_asset_info(idx).deprn_periods_prior_year));
1969             igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1970 		                                         p_full_path => l_path_name,
1971                                     		     p_string => '         Deprn YTD :'||to_char(p_fa_asset_info(idx).ytd_deprn));
1972       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1973 		                                         p_full_path => l_path_name,
1974                                 	    	     p_string => '         Prior years deprn reserve :'||to_char(p_fa_asset_info(idx).pys_deprn_reserve));
1975       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1976 	                                    	     p_full_path => l_path_name,
1977                                     		     p_string => '         Deprn Reserve :'||to_char(p_fa_asset_info(idx).deprn_reserve));
1978       	    igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1979 	                                    	     p_full_path => l_path_name,
1980                                     		     p_string => '     Initializing reval exceptions');
1981                                                  p_reval_exceptions(idx).asset_id := p_reval_asset_params(idx).asset_id;
1982                                                     p_reval_exceptions(idx).book_type_code := p_reval_asset_params(idx).book_type_code;
1983 
1984             l_prev_price_index := l_curr_price_index;
1985 
1986         END LOOP;
1987 
1988       	igi_iac_debug_pkg.debug_other_string(p_level => g_state_level,
1989 	                                	     p_full_path => l_path_name,
1990                                             p_string => ' End of initialization for revaluation in catchup pkg');
1991         return TRUE;
1992 
1993         EXCEPTION
1994             WHEN OTHERS THEN
1995           		igi_iac_debug_pkg.debug_unexpected_msg(p_full_path => l_path_name);
1996                 return FALSE;
1997     END do_reval_init_struct;
1998 
1999  BEGIN
2000 
2001     g_debug := FALSE;
2002 
2003     --===========================FND_LOG.START=====================================
2004 
2005     g_state_level :=	FND_LOG.LEVEL_STATEMENT;
2006     g_proc_level  :=	FND_LOG.LEVEL_PROCEDURE;
2007     g_event_level :=	FND_LOG.LEVEL_EVENT;
2008     g_excep_level :=	FND_LOG.LEVEL_EXCEPTION;
2009     g_error_level :=	FND_LOG.LEVEL_ERROR;
2010     g_unexp_level :=	FND_LOG.LEVEL_UNEXPECTED;
2011     g_path        := 'IGI.PLSQL.igiiactb.igi_iac_catchup_pkg.';
2012 
2013     --===========================FND_LOG.END=====================================
2014 
2015 
2016 
2017 END igi_iac_catchup_pkg;