[Home] [Help]
PACKAGE BODY: APPS.IGI_IAC_YTD_ENGINE
Source
1 Package Body IGI_IAC_YTD_ENGINE AS
2 -- $Header: igiiaytb.pls 120.2.12000000.1 2007/08/01 16:20:26 npandya noship $
3
4 g_debug BOOLEAN := FALSE;
5 PROCEDURE Debug(p_debug varchar2) IS
6 BEGIN
7 IF g_debug THEN
8 fnd_file.put_line(fnd_file.log,'YTD Engine***'||p_debug);
9 END IF;
10 END Debug;
11
12 FUNCTION Calculate_YTD
13 ( p_book_type_code IN VARCHAR2,
14 p_asset_id IN NUMBER,
15 p_asset_info IN OUT NOCOPY igi_iac_types.fa_hist_asset_info,
16 p_start_period IN OUT NOCOPY NUMBER,
17 p_end_period IN OUT NOCOPY NUMBER,
18 p_calling_program IN VARCHAR2
19 ) RETURN BOOLEAN
20 IS
21
22 CURSOR c_get_dpis IS
23 SELECT date_placed_in_service
24 FROM fa_books
25 WHERE book_type_code = p_book_type_code
26 AND asset_id = p_asset_id;
27
28 CURSOR c_get_deprn_calendar IS
29 SELECT deprn_calendar
30 FROM fa_book_controls
31 WHERE book_type_code like p_book_type_code;
32
33 CURSOR c_get_periods_in_year(p_calendar_type fa_calendar_types.calendar_type%TYPE) IS
34 SELECT number_per_fiscal_year
35 FROM fa_calendar_types
36 WHERE calendar_type = p_calendar_type;
37
38 l_start_period igi_iac_types.prd_rec;
39 l_end_period igi_iac_types.prd_rec;
40 l_dpis_period igi_iac_types.prd_rec;
41 l_open_period igi_iac_types.prd_rec;
42 l_last_period igi_iac_types.prd_rec;
43 l_deprn_reserve NUMBER;
44 l_max_deprn_period NUMBER(15);
45 l_deprn_calendar fa_book_controls.deprn_calendar%TYPE;
46 l_periods_per_FY fa_calendar_types.number_per_fiscal_year%TYPE;
47 l_total_periods NUMBER;
48 l_last_period_counter NUMBER;
49 l_last_deprn_period igi_iac_types.prd_rec;
50 l_deprn_periods_elapsed NUMBER;
51 l_deprn_periods_current_year NUMBER;
52
53 BEGIN
54 IF FND_PROFILE.VALUE('IGI_DEBUG_OPTION') = 'Y' THEN
55 g_debug := TRUE;
56 END IF;
57
58 Debug('Start of processing for YTD Engine');
59 IF (p_asset_info.date_placed_in_service IS NULL) THEN
60 OPEN c_get_dpis;
61 FETCH c_get_dpis INTO p_asset_info.date_placed_in_service;
62 CLOSE c_get_dpis;
63 END IF;
64
65 IF NOT igi_iac_common_utils.get_period_info_for_date(p_book_type_code,
66 p_asset_info.date_placed_in_service,
67 l_dpis_period) THEN
68 RETURN FALSE;
69 END IF;
70
71 IF (p_start_period IS NULL) THEN
72 l_start_period := l_dpis_period;
73 ELSE
74 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
75 p_start_period,
76 l_start_period) THEN
77 RETURN FALSE;
78 END IF;
79 END IF;
80
81 IF NOT igi_iac_common_utils.get_open_period_info(p_book_type_code,
82 l_open_period) THEN
83 RETURN FALSE;
84 END IF;
85
86 IF (p_end_period IS NULL) THEN
87 l_end_period := l_open_period;
88 ELSE
89 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
90 p_end_period,
91 l_end_period) THEN
92 RETURN FALSE;
93 END IF;
94 END IF;
95
96 OPEN c_get_deprn_calendar;
97 FETCH c_get_deprn_calendar INTO l_deprn_calendar;
98 CLOSE c_get_deprn_calendar;
99
100 OPEN c_get_periods_in_year(l_deprn_calendar);
101 FETCH c_get_periods_in_year INTO l_periods_per_FY;
102 CLOSE c_get_periods_in_year;
103
104 l_total_periods := ceil((p_asset_info.life_in_months*l_periods_per_FY)/12);
105 l_last_period_counter := (l_dpis_period.period_counter + l_total_periods - 1);
106
107 l_deprn_periods_elapsed := l_end_period.period_counter - l_dpis_period.period_counter + 1;
108 l_deprn_periods_current_year := l_end_period.period_num;
109 Debug('+l_deprn_periods_elapsed : '||l_deprn_periods_elapsed);
110 Debug('+l_deprn_periods_current_year :'||l_deprn_periods_current_year);
111 IF (l_end_period.fiscal_year = l_dpis_period.fiscal_year) THEN
112 l_deprn_periods_current_year := l_end_period.period_counter - l_dpis_period.period_counter + 1;
113 l_deprn_periods_elapsed := l_deprn_periods_current_year;
114 END IF;
115
116 IF (l_last_period_counter < l_end_period.period_counter) THEN
117 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
118 l_last_period_counter,
119 l_last_deprn_period) THEN
120 RETURN FALSE;
121 END IF;
122 l_deprn_periods_elapsed := l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
123 IF (l_end_period.fiscal_year = l_last_deprn_period.fiscal_year) THEN
124 l_deprn_periods_current_year := l_last_deprn_period.period_num;
125 END IF;
126
127 IF (l_dpis_period.fiscal_year = l_last_deprn_period.fiscal_year) THEN
128 l_deprn_periods_current_year := l_last_deprn_period.period_num - l_dpis_period.period_num + 1;
129 END IF;
130
131 IF (l_last_deprn_period.fiscal_year < l_end_period.fiscal_year ) THEN
132 l_deprn_periods_current_year := 0;
133 END IF;
134
135 END IF;
136 Debug('++l_deprn_periods_elapsed : '||l_deprn_periods_elapsed);
137 Debug('++l_deprn_periods_current_year :'||l_deprn_periods_current_year);
138 IF nvl(p_asset_info.depreciate_flag,'NO') <> 'YES' THEN
139 p_asset_info.deprn_periods_current_year := l_deprn_periods_current_year;
140 p_asset_info.deprn_periods_elapsed := l_deprn_periods_elapsed;
141 p_asset_info.deprn_periods_prior_year := l_deprn_periods_elapsed - l_deprn_periods_current_year;
142 p_asset_info.ytd_deprn := 0;
143 p_asset_info.pys_deprn_reserve := 0;
144 p_asset_info.deprn_amount := 0;
145 ELSE
146 p_asset_info.deprn_periods_current_year := l_deprn_periods_current_year;
147 p_asset_info.deprn_periods_elapsed := l_deprn_periods_elapsed;
148 p_asset_info.deprn_periods_prior_year := l_deprn_periods_elapsed - l_deprn_periods_current_year;
149 p_asset_info.ytd_deprn := p_asset_info.deprn_reserve * (l_deprn_periods_current_year/l_deprn_periods_elapsed);
150 p_asset_info.pys_deprn_reserve := p_asset_info.deprn_reserve - p_asset_info.ytd_deprn;
151 IF (l_last_period_counter < l_end_period.period_counter) AND (p_calling_program <> 'EXPENSED') THEN
152 p_asset_info.deprn_amount := 0;
153 ELSE
154 p_asset_info.deprn_amount := p_asset_info.deprn_reserve / l_deprn_periods_elapsed;
155 END IF;
156 p_asset_info.last_period_counter := l_last_period_counter;
157 END IF;
158 return TRUE ;
159 EXCEPTION
160 WHEN others THEN
161 return FALSE ;
162 END Calculate_YTD;
163
164 END igi_iac_ytd_engine;
165