DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_AE_RULES

Source


4        g_custom_context    pay_action_information.action_information_category%type;
1 PACKAGE BODY PAY_AE_RULES AS
2 /* $Header: pyaerule.pkb 120.1.12010000.3 2010/04/01 07:27:34 bkeshary ship $ */
3 
5        g_action_ctx_id  NUMBER;
6 
7 -------------------------------------------------------------------------------
8 -- flex_seg_enabled
9 -------------------------------------------------------------------------------
10 FUNCTION flex_seg_enabled(p_context_code              VARCHAR2,
11                           p_application_column_name   VARCHAR2) RETURN BOOLEAN AS
12     --
13     CURSOR csr_seg_enabled IS
14     SELECT 'Y'
15     FROM fnd_descr_flex_col_usage_vl
16     WHERE descriptive_flexfield_name  LIKE 'Action Information DF'
17     AND descriptive_flex_context_code    =  p_context_code
18     AND application_column_name       LIKE  p_application_column_name
19     AND enabled_flag                     =  'Y';
20     --
21     l_proc_name varchar2(100);
22     l_exists    varchar2(1);
23     --
24 BEGIN
25     --
26     OPEN csr_seg_enabled;
27         FETCH csr_seg_enabled INTO l_exists;
28     CLOSE csr_seg_enabled;
29     --
30     IF l_exists = 'Y' THEN
31         RETURN (TRUE);
32     ELSE
33         RETURN (FALSE);
34     END IF;
35     --
36 END flex_seg_enabled;
37 --
38 
39 PROCEDURE LOAD_XML (
40     P_NODE_TYPE     varchar2,
41     P_CONTEXT_CODE  varchar2,
42     P_NODE          varchar2,
43     P_DATA          varchar2
44 ) AS
45 
46     CURSOR csr_get_tag_name IS
47         SELECT TRANSLATE (UPPER(end_user_column_name), ' /','__') tag_name
48           FROM fnd_descr_flex_col_usage_vl
49          WHERE descriptive_flexfield_name = 'Action Information DF'
50            AND descriptive_flex_context_code = p_context_code
51            AND application_column_name = UPPER (p_node);
52 
53     CURSOR csr_get_chk_no IS
54         SELECT paa_chk.serial_number
55           FROM pay_assignment_actions paa_xfr,
56                pay_action_interlocks pai_xfr,
57                pay_action_interlocks pai_chk,
58                pay_assignment_actions paa_chk,
59                pay_payroll_actions ppa_chk
60          WHERE paa_xfr.assignment_action_id = pai_xfr.locking_action_id
61            AND pai_xfr.locked_action_id = pai_chk.locked_action_id
62            AND pai_chk.locking_action_id = paa_chk.assignment_action_id
63            AND paa_chk.payroll_action_id = ppa_chk.payroll_action_id
64            AND ppa_chk.action_type = 'H'
65            AND paa_xfr.assignment_action_id = g_action_ctx_id;
66 
67     l_tag_name  varchar2(500);
68     l_chk_no    pay_assignment_actions.serial_number%type;
69     l_data      pay_action_information.action_information1%type;
70 
71 PROCEDURE LOAD_XML_INTERNAL (
72     P_NODE_TYPE         varchar2,
73     P_NODE              varchar2,
74     P_DATA              varchar2
75 ) AS
76 
77     l_data      pay_action_information.action_information1%type;
78 
79 BEGIN
80 
81 IF p_node_type = 'CS' THEN
82 
86 
83 	pay_payroll_xml_extract_pkg.g_custom_xml (pay_payroll_xml_extract_pkg.g_custom_xml.count() + 1) := '<'||p_node||'>';
84 
85 ELSIF p_node_type = 'CE' THEN
87 	pay_payroll_xml_extract_pkg.g_custom_xml (pay_payroll_xml_extract_pkg.g_custom_xml.count() + 1) := '</'||p_node||'>';
88 
89 ELSIF p_node_type = 'D' THEN
90 
91 	/* Handle special charaters in data */
92 	l_data := REPLACE (p_data, '&', '&');
93 	l_data := REPLACE (l_data, '>', '>');
94 	l_data := REPLACE (l_data, '<', '<');
95 	l_data := REPLACE (l_data, '''', ''');
96 	l_data := REPLACE (l_data, '"', '"');
97 	pay_payroll_xml_extract_pkg.g_custom_xml (pay_payroll_xml_extract_pkg.g_custom_xml.count() + 1) := '<'||p_node||'>'||l_data||'</'||p_node||'>';
98 END IF;
99 END LOAD_XML_INTERNAL;
100 
101 
102 BEGIN
103 
104     IF p_node_type = 'D' THEN
105 
106         /* Fetch segment names */
107         OPEN csr_get_tag_name;
108             FETCH csr_get_tag_name INTO l_tag_name;
109         CLOSE csr_get_tag_name;
110 
111 	/* Fetch cheque number */
112         IF p_context_code = 'EMPLOYEE NET PAY DISTRIBUTION' AND
113            l_tag_name = 'CHECK_DEPOSIT_NUMBER' THEN
114             OPEN csr_get_chk_no;
115                 FETCH csr_get_chk_no INTO l_chk_no;
116             CLOSE csr_get_chk_no;
117         END IF;
118 
119     END IF;
120 
121     IF UPPER(p_node) NOT LIKE '?XML%' AND UPPER(p_node) NOT LIKE 'XAPI%' THEN
122         l_tag_name := nvl(l_tag_name, TRANSLATE(p_node, ' /', '__'));
123         IF p_node_type IN ('CS', 'CE') THEN
124             l_tag_name := nvl(g_custom_context, TRANSLATE(p_node, ' /', '__'));
125         END IF;
126     ELSE
127         l_tag_name := p_node;
128     END IF;
129 
130     l_data := nvl(l_chk_no, p_data);
131     load_xml_internal (p_node_type, l_tag_name, l_data);
132 END LOAD_XML;
133 
134 
135  PROCEDURE add_custom_xml
136        (p_assignment_action_id number,
137         p_action_information_category varchar2,
138         p_document_type varchar2) as
139 
140 /* Cursor to fetch Payroll Processing Information */
141 CURSOR csr_payroll_info(p_action_context_id    NUMBER) IS
142 SELECT ppf.payroll_name	   payroll_name
143       ,ptp.period_name     period_name
144       ,ptp.period_type     period_type
145       ,ptp.start_date      start_date
146       ,ptp.end_date	   end_date
147       ,pai.effective_date  payment_date
148 FROM   per_time_periods ptp
149       ,pay_payrolls_f   ppf
150       ,pay_action_information pai
151 WHERE ppf.payroll_id = ptp.payroll_id
152 AND pai.effective_date BETWEEN ppf.effective_start_date AND ppf.effective_end_date
153 AND ptp.time_period_id = pai.action_information16
154 AND pai.action_context_type  = 'AAP'
155 AND pai.action_information_category  = 'EMPLOYEE DETAILS'
156 AND (pai.action_context_id    =  p_action_context_id
157      OR pai.action_context_id = ( SELECT paa.source_action_id
158                                   FROM   pay_assignment_actions paa
159                                   WHERE  paa.assignment_action_id =  p_action_context_id
160                                  -- AND    paa.assignment_id  =  pai.assignment_id
161                                 ));
162 
163 /* Cursor to fetch Element Details */
164 CURSOR csr_element_info(p_action_context_id   NUMBER) IS
165 SELECT pai.action_information2 element_type_id
166       ,pai.action_information3 input_value_id
167       ,decode(pai1.action_information8,NULL,pai.action_information4,
171       ,sum(pai1.action_information4) value
168       pai.action_information4||'('||pai1.action_information8||')') Name
169       ,pai.action_information5 type
170       ,pai.action_information6 uom
172 FROM pay_action_information pai
173     ,pay_action_information pai1
174     ,pay_assignment_actions paa
175 WHERE pai.action_context_type = 'PA'
176 AND pai.action_information_category = 'EMEA ELEMENT DEFINITION'
177 AND pai1.action_context_type = 'AAP'
178 AND pai.action_information5 <> 'F'
179 AND pai1.action_information3 <> 'F'
180 /*AND ( pai1.action_context_id  IN ( SELECT paa.assignment_action_id
181 				   FROM pay_assignment_actions paa
182 				   WHERE paa.source_action_id = p_action_context_id
183 				   AND paa.assignment_id 	  = pai1.assignment_id)
184 			      OR pai1.action_context_id = 	p_action_context_id)*/
185 and pai1.action_information_category = 'EMEA ELEMENT INFO'
186 and pai.action_information2 = pai1.action_information1
187 and pai.action_information3 = pai1.action_information2
188 and pai.action_context_id    = paa.payroll_action_id
189 and pai1.action_context_id   = paa.assignment_action_id
190 and paa.assignment_action_id = p_action_context_id
191 group by pai.action_information2
192         ,pai.action_information3
193 	,pai.action_information4
194 	,pai.action_information5
195 	,pai.action_information6
196 	,pai1.action_information8
197 ORDER BY pai.action_information5,pai1.action_information8 DESC;
198 
199 /* Cursor to fetch Additional Information Elements Details */
200 CURSOR csr_add_element_info(p_action_context_id   NUMBER) IS
201 SELECT pai.action_information2 element_type_id
202       ,pai.action_information3 input_value_id
203       ,decode(pai1.action_information8,NULL,pai.action_information4,
204       pai.action_information4||'('||pai1.action_information8||')') Name
205       ,pai.action_information5 type
206       ,pai.action_information6 uom
207       ,pai1.action_information4 value
208 FROM pay_action_information pai
209     ,pay_action_information pai1
210     ,pay_assignment_actions paa
211 WHERE pai.action_context_type = 'PA'
212 AND pai.action_information_category = 'EMEA ELEMENT DEFINITION'
213 AND pai1.action_context_type = 'AAP'
214 AND pai.action_information5 = 'F'
215 AND pai1.action_information3 = 'F'
216 /*AND ( pai1.action_context_id  IN ( SELECT paa.assignment_action_id
217 				   FROM pay_assignment_actions paa
218 				   WHERE paa.source_action_id = p_action_context_id
219 				   AND paa.assignment_id 	  = pai1.assignment_id)
220 		 OR pai1.action_context_id = 	p_action_context_id)*/
221 AND pai1.action_information_category = 'EMEA ELEMENT INFO'
222 AND pai.action_information2 = pai1.action_information1
223 AND pai.action_information3 = pai1.action_information2
224 AND pai.action_context_id    = paa.payroll_action_id
225 AND pai1.action_context_id   = paa.assignment_action_id
226 AND paa.assignment_action_id = p_action_context_id
227 /* Commented for Bug 9525527 */
228 /* GROUP BY pai.action_information2
229 	,pai.action_information3
230 	,pai.action_information4
231 	,pai.action_information5
232 	,pai.action_information6
233 	,pai1.action_information4
234 	,pai1.action_information8 */
235 ORDER BY pai.action_information4,pai.action_information5,pai1.action_information8 DESC;
236 
237 /* Cursor to fetch input value's name */
238 CURSOR csr_get_input_value (p_input_value_id NUMBER) IS
239 SELECT name
240 FROM pay_input_values_f
241 WHERE input_value_id = p_input_value_id;
242 
243 /* Cursor to fetch Balance Details */
244 CURSOR csr_balance_info(p_action_context_id   NUMBER) IS
245 SELECT pai.action_information4 Name
246       ,pai.action_information2 defined_balance_id
247       ,pai.action_information6 type
248       ,pai1.action_information4 value
249       ,pai1.action_information6 uom
250 FROM pay_action_information pai
251     ,pay_action_information pai1
252     ,pay_assignment_actions paa
253 WHERE pai.action_context_type       = 'PA'
254 AND pai.action_information_category = 'EMEA BALANCE DEFINITION'
255 AND pai1.action_context_type        = 'AAP'
256 AND pai1.action_information_category = 'EMEA BALANCES'
257 AND pai.action_information6 = 'OBAL'
258 AND pai1.action_information2 = 'OBAL'
259 AND pai.action_information2          = pai1.action_information1
260 AND pai.action_context_id            = paa.payroll_action_id
261 AND pai1.action_context_id           = paa.assignment_action_id
262 AND paa.assignment_action_id  in
263 			(SELECT paa1.assignment_action_id
264                         FROM pay_assignment_actions paa1
265 			WHERE paa1.source_action_id = p_action_context_id
266 			AND    paa1.action_status            = 'C'
267 			UNION
268 			SELECT p_action_context_id
269 			FROM dual )
270 ORDER BY pai.action_information5,pai1.action_information5 DESC;
271 
272 
273 l_xml            CLOB;
277 csr              NUMBER;
274 cntr_flex_col    NUMBER;
275 l_flex_col_num   NUMBER;
276 sqlstr           DBMS_SQL.VARCHAR2S;
278 ret              NUMBER;
279 l_cntr_sql       NUMBER;
280 l_total_pay      NUMBER;
281 l_total_earnings   NUMBER;
282 l_total_deductions NUMBER;
283 l_input_value    VARCHAR2(100);
284 
285 
286 PROCEDURE build_sql(p_sqlstr_tab    IN OUT NOCOPY DBMS_SQL.VARCHAR2S,
287                     p_cntr          IN OUT NOCOPY NUMBER,
288                     p_string        VARCHAR2) AS
289     --
290     l_proc_name varchar2(100);
291     --
292 BEGIN
293     p_sqlstr_tab(p_cntr) := p_string;
294     p_cntr               := p_cntr + 1;
295 END;
296 
297    BEGIN
298 	l_flex_col_num := 30;
299 
300 	IF   p_action_information_category IS NULL AND p_document_type ='PAYSLIP' THEN
301 
302 		l_total_earnings:=0 ;
303 		l_total_deductions :=0;
304 		g_action_ctx_id     := p_assignment_action_id ;
305 
306 		FOR payroll_info_rec IN csr_payroll_info (p_assignment_action_id)
307 			LOOP
308 
309   				load_xml('CS', NULL, 'PAYROLL PROCESSING INFORMATION', NULL);
310 				load_xml('D', NULL, 'PAYROLL_NAME', payroll_info_rec.payroll_name );
311 				load_xml('D', NULL, 'PERIOD_NAME', payroll_info_rec.period_name);
312 				load_xml('D', NULL, 'PERIOD_TYPE', payroll_info_rec.period_type);
313 				load_xml('D', NULL, 'START_DATE', payroll_info_rec.start_date);
314 				load_xml('D', NULL, 'END_DATE', payroll_info_rec.end_date);
315 				load_xml('D', NULL, 'PAYMENT_DATE', payroll_info_rec.payment_date);
316 				load_xml('CE', NULL, 'PAYROLL PROCESSING INFORMATION', NULL);
317 
318 			END LOOP;
319     --
320   		FOR element_info_rec IN csr_element_info(p_assignment_action_id)
321 			LOOP
322 
323 				load_xml('CS', NULL, 'ELEMENT DETAILS', NULL);
324 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION2', element_info_rec.element_type_id);
325 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION3', element_info_rec.input_value_id);
326 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION4', element_info_rec.Name);
327 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION5', element_info_rec.type);
328 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION6', element_info_rec.uom);
329 				load_xml('D', 'EMEA ELEMENT INFO', 'ACTION_INFORMATION4', fnd_number.canonical_to_number(element_info_rec.value));
330 				load_xml('CE', NULL, 'ELEMENT DETAILS', NULL);
331 
332 				       IF element_info_rec.type = 'E' THEN
333 					       l_total_earnings := fnd_number.canonical_to_number(l_total_earnings) + fnd_number.canonical_to_number(nvl(element_info_rec.value,0)) ;
334 				       ELSIF element_info_rec.type = 'D' THEN
335 					       l_total_deductions := fnd_number.canonical_to_number(l_total_deductions) + fnd_number.canonical_to_number(nvl(element_info_rec.value,0)) ;
336 				       END IF ;
337 					l_total_pay := l_total_earnings - l_total_deductions ;
338 
339 			END LOOP;
340 
341 		FOR add_element_info_rec IN csr_add_element_info(p_assignment_action_id)
342 			LOOP
343 
344 			OPEN csr_get_input_value(add_element_info_rec.input_value_id);
345 				FETCH csr_get_input_value INTO l_input_value;
346 			CLOSE csr_get_input_value;
347 
348 				load_xml('CS', NULL, 'ELEMENT DETAILS', NULL);
349 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION2', add_element_info_rec.element_type_id);
350 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION3', add_element_info_rec.input_value_id);
351 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION4', add_element_info_rec.Name);
352 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION5', add_element_info_rec.type);
353 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION6', add_element_info_rec.uom);
354 				load_xml('D', 'EMEA ELEMENT DEFINITION', 'ACTION_INFORMATION7', l_input_value);
355 				/* Bug 9242951 */
356 				IF add_element_info_rec.uom in ('N','M') THEN
357 				  load_xml('D', 'EMEA ELEMENT INFO', 'ACTION_INFORMATION4', fnd_number.canonical_to_number(add_element_info_rec.value));
358 				ELSE
359 				  load_xml('D', 'EMEA ELEMENT INFO', 'ACTION_INFORMATION4',add_element_info_rec.value);
360 				END IF;
361 				load_xml('CE', NULL, 'ELEMENT DETAILS', NULL);
362 
363 			END LOOP;
364 
365 
366 		FOR balance_info_rec IN csr_balance_info(p_assignment_action_id)
367 			LOOP
368 
369 				load_xml('CS', NULL, 'BALANCE DETAILS', NULL);
370 				load_xml('D', 'EMEA BALANCE DEFINITION', 'ACTION_INFORMATION2', balance_info_rec.defined_balance_id);
371 				load_xml('D', 'EMEA BALANCE DEFINITION', 'ACTION_INFORMATION4', balance_info_rec.Name);
372 				load_xml('D', 'EMEA BALANCE DEFINITION', 'ACTION_INFORMATION6', balance_info_rec.type);
373 				load_xml('D', 'EMEA BALANCES', 'ACTION_INFORMATION4', fnd_number.canonical_to_number(balance_info_rec.value));
374 				load_xml('D', 'EMEA BALANCES', 'ACTION_INFORMATION6', balance_info_rec.uom);
375 				load_xml('CE', NULL, 'BALANCE DETAILS', NULL);
376 
377 			END LOOP;
378 
379 			load_xml('CS', NULL, 'SUMMARY OF PAYMENTS', NULL);
380                         load_xml('D', NULL, 'TOTAL_EARNINGS', l_total_earnings);
381                         load_xml('D', NULL, 'TOTAL_DEDUCTIONS', l_total_deductions);
382                         load_xml('D', NULL, 'TOTAL_PAY', l_total_pay);
383 			load_xml('CE', NULL, 'SUMMARY OF PAYMENTS', NULL);
384 
385 
386 
387 
388 	END IF;
389 
390    END;
391 
392   PROCEDURE element_template_post_process
393     (p_template_id       IN NUMBER) AS
394   BEGIN
395 
396    hr_utility.set_location('Entering: post process',  10);
397     pay_ae_element_template_pkg.element_template_post_process(p_template_id);
401 END PAY_AE_RULES;398    hr_utility.set_location('Leaving: post process',  20);
399   END element_template_post_process;
400