1 package body pay_kw_general as
2 /* $Header: pykwgenr.pkb 120.2.12010000.2 2008/09/23 12:59:02 bkeshary ship $ */
3 g_package varchar2(30);
4 l_organization_id hr_all_organization_units.organization_id%type;
5 l_person_id per_all_people_f.person_id%type;
6 l_nationality_cd hr_lookups.meaning%type;
7 l_nationality_person per_all_people_f.nationality%type;
8 ------------------------------------------------------------------------
9 -- Function LOCAL_NATIONALITY_NOT_DEFINED
10 -- This function return NOTEXISTS If the value for HR: Local Nationality
11 -- Profile has not been defined else it retuns EXISTS.
12 ------------------------------------------------------------------------
13 function local_nationality_not_defined (p_business_group_id IN number) return varchar2
14 is
15 begin
16 BEGIN
17 /* l_organization_id := FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID');*/
18 /* Added context business group id */
19 l_organization_id := p_business_group_id;
20 Select Org_Information1
21 Into l_nationality_cd
22 From HR_ORGANIZATION_INFORMATION
23 Where ORG_INFORMATION_CONTEXT = 'KW_BG_DETAILS'
24 And ORGANIZATION_ID = l_organization_id;
25 EXCEPTION
26 WHEN no_data_found Then
27 Null;
28 END;
29 if l_nationality_cd is null then
30 return 'NOTEXISTS';
31 else
32 return 'EXISTS';
33 end if;
34 /**** if FND_PROFILE.VALUE('PER_LOCAL_NATIONALITY') is null then
35 return 'NOTEXISTS';
36 else
37 return 'EXISTS';
38 end if;
39 ****/
40 end local_nationality_not_defined;
41 ------------------------------------------------------------------------
42 -- Function LOCAL_NATNATIONALITY_MATCHES
43 -- This function return NOMATCH If the value for HR: Local Nationality
44 -- Profile does not match with the person's nationality else it retuns MATCH.
45 ------------------------------------------------------------------------
46 function local_nationality_matches
47 (p_assignment_id IN per_all_assignments_f.assignment_id%type,
48 p_date_earned IN Date)
49 return varchar2
50 is
51 begin
52 BEGIN
53 Select person_id
54 Into l_person_id
55 From PER_ALL_ASSIGNMENTS_F
56 Where ASSIGNMENT_ID = p_assignment_id
57 AND p_date_earned between EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE;
58 EXCEPTION
59 WHEN no_data_found Then
60 Null;
61 END;
62 BEGIN
63 Select Nationality
64 Into l_nationality_person
65 From PER_ALL_PEOPLE_F
66 Where PERSON_ID = l_person_id
67 AND p_date_earned between EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE;
68 EXCEPTION
69 WHEN no_data_found Then
70 Null;
71 END;
72 if l_nationality_cd = l_nationality_person then
73 return 'MATCH';
74 else
75 return 'NOMATCH';
76 end if;
77 end local_nationality_matches;
78 ------------------------------------------------------------------------
79 -- Function GET_LOCAL_NATIONALITY
80 -- This function is used to obtain a the local nationality defined at
81 -- the Business Group Level.
82 ------------------------------------------------------------------------
83 function get_local_nationality return varchar2
84 is
85 l_nationality hr_lookups.meaning%type;
86 begin
87 l_nationality := hr_general.decode_lookup('NATIONALITY',l_nationality_cd);
88 RETURN l_nationality;
89 END get_local_nationality;
90 ------------------------------------------------------------------------
91 -- Function GET_MESSAGE
92 -- This function is used to obtain a message.
93 -- The token parameters must be of the form 'TOKEN_NAME:TOKEN_VALUE' i.e.
94 -- If you want to set the value of a token called ELEMENT to Social Ins
95 -- the token parameter would be 'ELEMENT:Social Ins.'
96 ------------------------------------------------------------------------
97 function get_message
98 (p_product in varchar2
99 ,p_message_name in varchar2
100 ,p_token1 in varchar2 default null
101 ,p_token2 in varchar2 default null
102 ,p_token3 in varchar2 default null) return varchar2
103 is
104 l_message varchar2(2000);
105 l_token_name varchar2(20);
106 l_token_value varchar2(80);
107 l_colon_position number;
108 l_proc varchar2(72) ;
109 --
110 begin
111 g_package := 'pay_kw_general';
112 l_proc := g_package||'.get_message';
113 --
114 hr_utility.set_location('Entered '||l_proc,5);
115 hr_utility.set_location('. Message Name: '||p_message_name,40);
116 fnd_message.set_name(p_product, p_message_name);
117 if p_token1 is not null then
118 /* Obtain token 1 name and value */
119 l_colon_position := instr(p_token1,':');
120 l_token_name := substr(p_token1,1,l_colon_position-1);
121 l_token_value := substr(p_token1,l_colon_position+1,length(p_token1));
122 fnd_message.set_token(l_token_name, l_token_value);
123 hr_utility.set_location('. Token1: '||l_token_name||'. Value: '||l_token_value,50);
124 end if;
125 if p_token2 is not null then
126 /* Obtain token 2 name and value */
127 l_colon_position := instr(p_token2,':');
128 l_token_name := substr(p_token2,1,l_colon_position-1);
129 l_token_value := substr(p_token2,l_colon_position+1,length(p_token2));
130 fnd_message.set_token(l_token_name, l_token_value);
131 hr_utility.set_location('. Token2: '||l_token_name||'. Value: '||l_token_value,60);
132 end if;
133 if p_token3 is not null then
134 /* Obtain token 3 name and value */
135 l_colon_position := instr(p_token3,':');
136 l_token_name := substr(p_token3,1,l_colon_position-1);
137 l_token_value := substr(p_token3,l_colon_position+1,length(p_token3));
138 fnd_message.set_token(l_token_name, l_token_value);
139 hr_utility.set_location('. Token3: '||l_token_name||'. Value: '||l_token_value,70);
140 end if;
141 l_message := substr(fnd_message.get,1,254);
142 hr_utility.set_location('leaving '||l_proc,100);
143 return l_message;
144 end get_message;
145 ------------------------------------------------------------------------
146 -- Function GET_TABLE_BANDS
147 -- This function is used to obtain User table's high and low values.
148 ------------------------------------------------------------------------
149 function get_table_bands
150 (p_Date_Earned IN DATE
151 ,p_table_name in varchar2
152 ,p_return_type in varchar2) return number
153 is
154 CURSOR csr_get_user_table_id(l_table_name varchar2) IS
155 SELECT user_table_id
156 FROM pay_user_tables
157 WHERE legislation_code='KW'
158 AND UPPER(user_table_name) = UPPER(l_table_name);
159 CURSOR csr_get_min_low (l_user_table_id NUMBER, l_effective_date DATE) IS
160 SELECT MIN(fnd_number.canonical_to_number(row_low_range_or_name))
161 FROM pay_user_rows_f
162 WHERE user_table_id = l_user_table_id
163 AND legislation_code = 'KW'
164 AND l_effective_date BETWEEN effective_start_date AND effective_end_date;
165 CURSOR csr_get_min_high (l_user_table_id number ,l_effective_date DATE ) IS
166 SELECT MIN(fnd_number.canonical_to_number(row_high_range))
167 FROM pay_user_rows_f
168 WHERE user_table_id = l_user_table_id
169 AND legislation_code = 'KW'
170 AND l_effective_date BETWEEN effective_start_date AND effective_end_date;
171 CURSOR csr_get_max_high (l_user_table_id number, l_effective_date DATE) IS
172 SELECT MAX(fnd_number.canonical_to_number(row_high_range))
173 FROM pay_user_rows_f
174 WHERE user_table_id = l_user_table_id
175 AND legislation_code = 'KW'
176 AND l_effective_date BETWEEN effective_start_date AND effective_end_date;
177 l_ret_val number(15,3);
178 l_table_id number(9);
179 l_proc varchar2(72) ;
180 --
181 begin
182 g_package := 'pay_kw_general';
183 l_proc := g_package||'.get_table_bands';
184 --
185 hr_utility.set_location('Entered '||l_proc,5);
186 -- Get the User Table ID
187 OPEN csr_get_user_table_id(p_table_name);
188 FETCH csr_get_user_table_id INTO l_table_id;
189 CLOSE csr_get_user_table_id;
190 --
191 IF p_return_type = 'MIN_LOW' THEN
192 OPEN csr_get_min_low (l_table_id,p_Date_Earned);
193 FETCH csr_get_min_low INTO l_ret_val;
194 CLOSE csr_get_min_low;
195 ELSIF p_return_type = 'MIN_HIGH' THEN
196 OPEN csr_get_min_high (l_table_id,p_Date_Earned);
197 FETCH csr_get_min_high INTO l_ret_val;
198 CLOSE csr_get_min_high;
199 ELSIF p_return_type = 'MAX_HIGH' THEN
200 OPEN csr_get_max_high (l_table_id, p_Date_Earned);
201 FETCH csr_get_max_high INTO l_ret_val;
202 CLOSE csr_get_max_high;
203 END IF;
204 return l_ret_val;
205 end get_table_bands;
206 -----------------------------------------------------------------------
207 -- Functions for EFT file
208 -----------------------------------------------------------------------
209 -----------------------------------------------------------------------------
210 -- GET_PARAMETER used in SQL to decode legislative parameters
211 -----------------------------------------------------------------------------
212 FUNCTION get_parameter(
213 p_parameter_string IN VARCHAR2
214 ,p_token IN VARCHAR2
215 ,p_segment_number IN NUMBER DEFAULT NULL ) RETURN VARCHAR2
216 IS
217 l_parameter pay_payroll_actions.legislative_parameters%TYPE:=NULL;
218 l_start_pos NUMBER;
219 l_delimiter varchar2(1):=' ';
220 l_proc VARCHAR2(60):= g_package||' get parameter ';
221 BEGIN
222 l_start_pos := instr(' '||p_parameter_string,l_delimiter||p_token||'=');
223 IF l_start_pos = 0 THEN
224 l_delimiter := '|';
225 l_start_pos := instr(' '||p_parameter_string,l_delimiter||p_token||'=');
226 end if;
227 IF l_start_pos <> 0 THEN
228 l_start_pos := l_start_pos + length(p_token||'=');
229 l_parameter := substr(p_parameter_string,
230 l_start_pos,
231 instr(p_parameter_string||' ',
232 ',',l_start_pos)
233 - l_start_pos);
234 IF p_segment_number IS NOT NULL THEN
235 l_parameter := ':'||l_parameter||':';
236 l_parameter := substr(l_parameter,
237 instr(l_parameter,':',1,p_segment_number)+1,
238 instr(l_parameter,':',1,p_segment_number+1) -1
239 - instr(l_parameter,':',1,p_segment_number));
240 END IF;
241 END IF;
242 RETURN l_parameter;
243 END get_parameter;
244 --
245 FUNCTION chk_multiple_assignments(p_effective_date IN DATE
246 ,p_person_id IN NUMBER) RETURN VARCHAR2 AS
247 CURSOR get_multiple_assgts IS
248 SELECT count(DISTINCT paf.assignment_id)
249 FROM per_all_assignments_f paf
250 ,per_assignment_status_types pas
251 WHERE paf.assignment_type = 'E'
252 AND paf.PERSON_ID = p_person_id
253 AND p_effective_date between effective_start_date and effective_end_date
254 AND paf.assignment_status_type_id = pas.assignment_status_type_id
255 AND pas.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN');
256 l_count NUMBER :=0;
257 BEGIN
258 OPEN get_multiple_assgts;
259 FETCH get_multiple_assgts INTO l_count;
260 CLOSE get_multiple_assgts;
261 IF l_count > 1 THEN
262 RETURN 'Y';
263 ELSE
264 RETURN 'N';
265 END IF;
266 END chk_multiple_assignments;
267 -----
268 function get_count RETURN NUMBER as
269 l_count NUMBER(15);
270 CURSOR CSR_KW_EFT_COUNT IS
271 SELECT COUNT(*)
272 FROM per_assignments_f paf
273 ,per_people_f pef
274 ,pay_pre_payments ppp
275 ,pay_assignment_actions paa
276 ,pay_payroll_actions ppa
277 WHERE paa.payroll_action_id =
278 pay_magtape_generic.get_parameter_value('PAYROLL_ACTION_ID')
279 AND paa.pre_payment_id = ppp.pre_payment_id
280 AND paa.payroll_action_id = ppa.payroll_action_id
281 AND paa.assignment_id = paf.assignment_id
282 AND paf.person_id = pef.person_id
283 AND ppp.value > 0
284 AND ppa.effective_date BETWEEN paf.effective_start_date
285 AND paf.effective_end_date
286 AND ppa.effective_date BETWEEN pef.effective_start_date
287 AND pef.effective_end_date;
288 BEGIN
289 open CSR_KW_EFT_COUNT;
290 fetch CSR_KW_EFT_COUNT into l_count;
291 close CSR_KW_EFT_COUNT;
292 return l_count;
293 END get_count;
294 ---------
295 function get_sum return number as
296 l_sum pay_pre_payments.value%type;
297 CURSOR CSR_KW_EFT_SUM is
298 SELECT SUM(ppp.value)
299 FROM per_assignments_f paf
300 ,per_people_f pef
301 ,pay_pre_payments ppp
302 ,pay_assignment_actions paa
303 ,pay_payroll_actions ppa
304 WHERE paa.payroll_action_id =
305 pay_magtape_generic.get_parameter_value('PAYROLL_ACTION_ID')
306 AND paa.pre_payment_id = ppp.pre_payment_id
307 AND paa.payroll_action_id = ppa.payroll_action_id
308 AND paa.assignment_id = paf.assignment_id
309 AND paf.person_id = pef.person_id
310 AND ppp.value > 0
311 AND ppa.effective_date BETWEEN paf.effective_start_date
312 AND paf.effective_end_date
313 AND ppa.effective_date BETWEEN pef.effective_start_date
314 AND pef.effective_end_date;
315 BEGIN
316 open CSR_KW_EFT_SUM;
317 fetch CSR_KW_EFT_SUM into l_sum;
318 close CSR_KW_EFT_SUM;
319 return l_sum;
320 END get_sum;
321 --------
322 end pay_kw_general;