[Home] [Help]
PACKAGE BODY: APPS.PAY_CORE_DATES
Source
1 package body pay_core_dates as
2 /* $Header: pycordat.pkb 120.4 2006/04/25 06:16:25 mkataria noship $ */
3 --
4 --
5 -- Set up the globals
6 --
7 g_debug boolean := hr_utility.debug_enabled;
8 --
9 procedure get_offset_date(p_period_type in varchar2,
10 p_period_units in number,
11 p_effective_date in date,
12 p_offset_date out nocopy date)
13 is
14 begin
15 --
16 /* do we need to alter the date, only if the
17 number of offset periods in question is not
18 zero
19 */
20 if (p_period_units = 0) then
21 --
22 p_offset_date := p_effective_date;
23 --
24 else
25 --
26 if (p_period_type = 'YEAR') then
27 --
28 p_offset_date := add_months(p_effective_date, (12 * p_period_units));
29 --
30 elsif (p_period_type = 'QUARTER') then
31 --
32 p_offset_date := add_months(p_effective_date, (3 * p_period_units));
33 --
34 elsif (p_period_type = 'MONTH') then
35 --
36 p_offset_date := add_months(p_effective_date, (1 * p_period_units));
37 --
38 else
39 --
40 p_offset_date := p_effective_date;
41 --
42 end if;
43 end if;
44 --
45 end get_offset_date;
46 --
47 procedure perform_day_adjustment(p_day_adjustment in varchar2,
48 p_effective_date in out nocopy date
49 )
50 is
51 l_day_adjustment_value number;
52 begin
53 --
54 if p_day_adjustment = 'NEXT' then
55 l_day_adjustment_value := 1;
56 elsif p_day_adjustment = 'PRIOR' then
57 l_day_adjustment_value := -1;
58 elsif p_day_adjustment = 'CURRENT' then
59 l_day_adjustment_value := 0;
60 else
61 begin
62 l_day_adjustment_value := to_number(p_day_adjustment);
63 exception
64 when others then
65 hr_utility.set_message(801,'HR_51153_INVAL_NUM_FORMAT');
66 hr_utility.raise_error;
67 end;
68 end if;
69 p_effective_date := p_effective_date + l_day_adjustment_value;
70
71 --
72 end perform_day_adjustment;
73 --
74 procedure get_time_definition_date(p_time_def_id in number,
75 p_effective_date in date,
76 p_start_date out nocopy date,
77 p_bus_grp in number default null)
78 is
79 l_return_date date;
80 --
81 l_period_type pay_time_definitions.period_type%type;
82 l_period_unit pay_time_definitions.period_unit%type;
83 l_day_adjustment pay_time_definitions.day_adjustment%type;
84 l_period_date date;
85 --
86 begin
87 g_debug := hr_utility.debug_enabled;
88 --
89 select period_type,
90 nvl(period_unit, 0),
91 nvl(day_adjustment,0)
92 into l_period_type,
93 l_period_unit,
94 l_day_adjustment
95 from pay_time_definitions
96 where time_definition_id = p_time_def_id;
97 --
98 --
99 get_offset_date(l_period_type,
100 l_period_unit,
101 p_effective_date,
102 l_period_date);
103 --
104 l_return_date := null;
105 --
106 if (l_period_type = 'YEAR') then
107 --
108 l_return_date := trunc(l_period_date, 'Y');
109 --
110 elsif (l_period_type = 'QUARTER') then
111 --
112 l_return_date := trunc(l_period_date, 'Q');
113 --
114 elsif (l_period_type = 'START_OF_TIME') then
115 --
116 l_return_date := to_date('0001/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS');
117 --
118 elsif (l_period_type = 'END_OF_TIME') then
119 --
120 l_return_date := to_date('4712/12/31 00:00:00', 'YYYY/MM/DD HH24:MI:SS');
121 --
122 elsif (l_period_type = 'MONTH') then
123 --
124 l_return_date := trunc(l_period_date, 'MM');
125 --
126 elsif (l_period_type = 'RUN') then
127 --
128 l_return_date := l_period_date;
129 --
130 elsif (l_period_type = 'TYEAR') then
131 --
132 l_return_date:= pay_ip_route_support.tax_year(p_bus_grp,
133 l_period_date);
134 --
135 elsif (l_period_type = 'TQUARTER') then
136 --
137 l_return_date:= pay_ip_route_support.tax_quarter(p_bus_grp,
138 l_period_date);
139 --
140 elsif (l_period_type = 'FYEAR') then
141 --
142 l_return_date:= pay_ip_route_support.fiscal_year(p_bus_grp,
143 l_period_date);
144 --
145 elsif (l_period_type = 'FQUARTER') then
146 --
147 l_return_date:= pay_ip_route_support.fiscal_quarter(p_bus_grp,
148 l_period_date);
149 --
150 elsif (l_period_type = 'DAILY') then
151 --
152 l_return_date := l_period_date;
153
154 end if;
155 --
156 perform_day_adjustment(l_day_adjustment,
157 l_return_date
158 );
159
160 p_start_date := l_return_date;
161 --
162 end get_time_definition_date;
163 --
164 function get_time_definition_date(p_time_def_id in number,
165 p_effective_date in date,
166 p_bus_grp in number default null)
167 return date
168 is
169 l_start_date date;
170 begin
171 --
172 get_time_definition_date(p_time_def_id => p_time_def_id,
173 p_effective_date => p_effective_date,
174 p_start_date => l_start_date,
175 p_bus_grp => p_bus_grp);
176 --
177 return l_start_date;
178 --
179 end get_time_definition_date;
180 --
181 procedure is_date_in_span(p_start_time_def_id in number,
182 p_end_time_def_id in number,
183 p_test_date in date,
184 p_effective_date in date,
185 p_result out nocopy boolean,
186 p_bus_grp in number default null
187 )
188 is
189 l_start_date date;
190 l_end_date date;
191 begin
192 --
193 get_time_definition_date(p_time_def_id => p_start_time_def_id,
194 p_effective_date => p_effective_date,
195 p_start_date => l_start_date,
196 p_bus_grp => p_bus_grp);
197 --
198 get_time_definition_date(p_time_def_id => p_end_time_def_id,
199 p_effective_date => p_effective_date,
200 p_start_date => l_end_date,
201 p_bus_grp => p_bus_grp);
202 --
203 if (p_test_date between l_start_date and l_end_date) then
204 p_result := TRUE;
205 else
206 p_result := FALSE;
207 end if;
208 --
209 end is_date_in_span;
210 --
211 function is_date_in_span(p_start_time_def_id in number,
212 p_end_time_def_id in number,
213 p_test_date in date,
214 p_effective_date in date,
215 p_bus_grp in number default null
216 )
217 return varchar2
218 is
219 l_start_date date;
220 l_end_date date;
221 begin
222 --
223 get_time_definition_date(p_time_def_id => p_start_time_def_id,
224 p_effective_date => p_effective_date,
225 p_start_date => l_start_date,
226 p_bus_grp => p_bus_grp);
227 --
228 get_time_definition_date(p_time_def_id => p_end_time_def_id,
229 p_effective_date => p_effective_date,
230 p_start_date => l_end_date,
231 p_bus_grp => p_bus_grp);
232 --
233 if (p_test_date between l_start_date and l_end_date) then
234 return 'Y';
235 else
236 return 'N';
237 end if;
238 --
239 end is_date_in_span;
240 --
241 end pay_core_dates;