[Home] [Help]
PACKAGE BODY: APPS.IGI_IAC_YTD_ENGINE
Source
1 Package Body IGI_IAC_YTD_ENGINE AS
2 -- $Header: igiiaytb.pls 120.2.12010000.2 2010/06/24 17:59:06 schakkin ship $
3 --===========================FND_LOG.START=====================================
4
5 g_state_level NUMBER := FND_LOG.LEVEL_STATEMENT;
6 g_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
7 g_event_level NUMBER := FND_LOG.LEVEL_EVENT;
8 g_excep_level NUMBER := FND_LOG.LEVEL_EXCEPTION;
9 g_error_level NUMBER := FND_LOG.LEVEL_ERROR;
10 g_unexp_level NUMBER := FND_LOG.LEVEL_UNEXPECTED;
11 g_path VARCHAR2(100) := 'IGI.PLSQL.igiiareb.IGI_IAC_YTD_ENGINE.';
12
13 --===========================FND_LOG.END=======================================
14 g_debug BOOLEAN := FALSE;
15 PROCEDURE Debug(p_debug varchar2) IS
16 BEGIN
17 IF g_debug THEN
18 --fnd_file.put_line(fnd_file.log,'YTD Engine***'||p_debug);
19 igi_iac_debug_pkg.debug_other_string( p_level => g_state_level,
20 p_full_path => g_path,
21 p_string => p_debug);
22 END IF;
23 END Debug;
24
25 procedure do_round ( p_amount in out NOCOPY number, p_book_type_code in varchar2) is
26 l_path varchar2(150) := g_path||'do_round(p_amount,p_book_type_code)';
27 l_amount number := p_amount;
28 l_amount_old number := p_amount;
29 --l_path varchar2(150) := g_path||'do_round';
30 begin
31 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'--- Inside Round() ---');
32 IF IGI_IAC_COMMON_UTILS.Iac_Round(X_Amount => l_amount, X_Book => p_book_type_code)
33 THEN
34 p_amount := l_amount;
35 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'IGI_IAC_COMMON_UTILS.Iac_Round is TRUE');
36 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'p_amount = '||p_amount);
37 ELSE
38 p_amount := round( l_amount, 2);
39 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'IGI_IAC_COMMON_UTILS.Iac_Round is FALSE');
40 igi_iac_debug_pkg.debug_other_string(g_state_level,l_path,'p_amount = '||p_amount);
41 END IF;
42 exception when others then
43 p_amount := l_amount_old;
44 igi_iac_debug_pkg.debug_unexpected_msg(l_path);
45 Raise;
46 end;
47
48 FUNCTION Calculate_YTD
49 ( p_book_type_code IN VARCHAR2,
50 p_asset_id IN NUMBER,
51 p_asset_info IN OUT NOCOPY igi_iac_types.fa_hist_asset_info,
52 p_start_period IN OUT NOCOPY NUMBER,
53 p_end_period IN OUT NOCOPY NUMBER,
54 p_calling_program IN VARCHAR2
55 ) RETURN BOOLEAN
56 IS
57
58 CURSOR c_get_dpis IS
59 SELECT date_placed_in_service
60 FROM fa_books
61 WHERE book_type_code = p_book_type_code
62 AND asset_id = p_asset_id;
63
64 CURSOR c_get_deprn_calendar IS
65 SELECT deprn_calendar
66 FROM fa_book_controls
67 WHERE book_type_code like p_book_type_code;
68
69 CURSOR c_get_periods_in_year(p_calendar_type fa_calendar_types.calendar_type%TYPE) IS
70 SELECT number_per_fiscal_year
71 FROM fa_calendar_types
72 WHERE calendar_type = p_calendar_type;
73
74 l_start_period igi_iac_types.prd_rec;
75 l_end_period igi_iac_types.prd_rec;
76 l_dpis_period igi_iac_types.prd_rec;
77 l_open_period igi_iac_types.prd_rec;
78 l_last_period igi_iac_types.prd_rec;
79 l_deprn_reserve NUMBER;
80 l_max_deprn_period NUMBER(15);
81 l_deprn_calendar fa_book_controls.deprn_calendar%TYPE;
82 l_periods_per_FY fa_calendar_types.number_per_fiscal_year%TYPE;
83 l_total_periods NUMBER;
84 l_last_period_counter NUMBER;
85 l_last_deprn_period igi_iac_types.prd_rec;
86 l_deprn_periods_elapsed NUMBER;
87 l_deprn_periods_current_year NUMBER;
88
89 BEGIN
90 IF FND_PROFILE.VALUE('IGI_DEBUG_OPTION') = 'Y' THEN
91 g_debug := TRUE;
92 END IF;
93
94 Debug('Start of processing for YTD Engine');
95 IF (p_asset_info.date_placed_in_service IS NULL) THEN
96 OPEN c_get_dpis;
97 FETCH c_get_dpis INTO p_asset_info.date_placed_in_service;
98 CLOSE c_get_dpis;
99 END IF;
100
101 IF NOT igi_iac_common_utils.get_period_info_for_date(p_book_type_code,
102 p_asset_info.date_placed_in_service,
103 l_dpis_period) THEN
104 RETURN FALSE;
105 END IF;
106
107 IF (p_start_period IS NULL) THEN
108 l_start_period := l_dpis_period;
109 ELSE
110 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
111 p_start_period,
112 l_start_period) THEN
113 RETURN FALSE;
114 END IF;
115 END IF;
116
117 IF NOT igi_iac_common_utils.get_open_period_info(p_book_type_code,
118 l_open_period) THEN
119 RETURN FALSE;
120 END IF;
121
122 IF (p_end_period IS NULL) THEN
123 l_end_period := l_open_period;
124 ELSE
125 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
126 p_end_period,
127 l_end_period) THEN
128 RETURN FALSE;
129 END IF;
130 END IF;
131
132 OPEN c_get_deprn_calendar;
133 FETCH c_get_deprn_calendar INTO l_deprn_calendar;
134 CLOSE c_get_deprn_calendar;
135
136 OPEN c_get_periods_in_year(l_deprn_calendar);
137 FETCH c_get_periods_in_year INTO l_periods_per_FY;
138 CLOSE c_get_periods_in_year;
139
140 l_total_periods := ceil((p_asset_info.life_in_months*l_periods_per_FY)/12);
141 l_last_period_counter := (l_dpis_period.period_counter + l_total_periods - 1);
142
143 l_deprn_periods_elapsed := l_end_period.period_counter - l_dpis_period.period_counter + 1;
144 l_deprn_periods_current_year := l_end_period.period_num;
145 Debug('+l_deprn_periods_elapsed : '||l_deprn_periods_elapsed);
146 Debug('+l_deprn_periods_current_year :'||l_deprn_periods_current_year);
147 IF (l_end_period.fiscal_year = l_dpis_period.fiscal_year) THEN
148 l_deprn_periods_current_year := l_end_period.period_counter - l_dpis_period.period_counter + 1;
149 l_deprn_periods_elapsed := l_deprn_periods_current_year;
150 END IF;
151
152 IF (l_last_period_counter < l_end_period.period_counter) THEN
153 IF NOT igi_iac_common_utils.get_period_info_for_counter(p_book_type_code,
154 l_last_period_counter,
155 l_last_deprn_period) THEN
156 RETURN FALSE;
157 END IF;
158 l_deprn_periods_elapsed := l_last_deprn_period.period_counter - l_dpis_period.period_counter + 1;
159 IF (l_end_period.fiscal_year = l_last_deprn_period.fiscal_year) THEN
160 l_deprn_periods_current_year := l_last_deprn_period.period_num;
161 END IF;
162
163 IF (l_dpis_period.fiscal_year = l_last_deprn_period.fiscal_year) THEN
164 l_deprn_periods_current_year := l_last_deprn_period.period_num - l_dpis_period.period_num + 1;
165 END IF;
166
167 IF (l_last_deprn_period.fiscal_year < l_end_period.fiscal_year ) THEN
168 l_deprn_periods_current_year := 0;
169 END IF;
170
171 END IF;
172 Debug('++l_deprn_periods_elapsed : '||l_deprn_periods_elapsed);
173 Debug('++l_deprn_periods_current_year :'||l_deprn_periods_current_year);
174 IF nvl(p_asset_info.depreciate_flag,'NO') <> 'YES' THEN
175 p_asset_info.deprn_periods_current_year := l_deprn_periods_current_year;
176 p_asset_info.deprn_periods_elapsed := l_deprn_periods_elapsed;
177 p_asset_info.deprn_periods_prior_year := l_deprn_periods_elapsed - l_deprn_periods_current_year;
178 p_asset_info.ytd_deprn := 0;
179 p_asset_info.pys_deprn_reserve := 0;
180 p_asset_info.deprn_amount := 0;
181 ELSE
182 p_asset_info.deprn_periods_current_year := l_deprn_periods_current_year;
183 p_asset_info.deprn_periods_elapsed := l_deprn_periods_elapsed;
184 p_asset_info.deprn_periods_prior_year := l_deprn_periods_elapsed - l_deprn_periods_current_year;
185 p_asset_info.ytd_deprn := p_asset_info.deprn_reserve * (l_deprn_periods_current_year/l_deprn_periods_elapsed);
186 do_round(p_asset_info.ytd_deprn,p_book_type_code);
187 p_asset_info.pys_deprn_reserve := p_asset_info.deprn_reserve - p_asset_info.ytd_deprn;
188 IF (l_last_period_counter < l_end_period.period_counter) AND (p_calling_program <> 'EXPENSED') THEN
189 p_asset_info.deprn_amount := 0;
190 ELSE
191 p_asset_info.deprn_amount := p_asset_info.deprn_reserve / l_deprn_periods_elapsed;
192 do_round(p_asset_info.deprn_amount,p_book_type_code);
193 END IF;
194 p_asset_info.last_period_counter := l_last_period_counter;
195 END IF;
196 return TRUE ;
197 EXCEPTION
198 WHEN others THEN
199 return FALSE ;
200 END Calculate_YTD;
201
202 END igi_iac_ytd_engine;
203