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