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.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