DBA Data[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