DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_FI_BAL_UPLOAD

Source


1 PACKAGE BODY pay_fi_bal_upload AS
2 /* $Header: pyfibupl.pkb 120.0.12000000.1 2007/04/26 11:57:45 dbehera noship $ */
3    --
4    -- Date constants.
5    --
6    start_of_time CONSTANT DATE := TO_date('01/01/0001','DD/MM/YYYY');
7    end_of_time   CONSTANT DATE := TO_date('31/12/4712','DD/MM/YYYY');
8 
9    procedure get_expiry_date_info
10    (p_assignment_id  in             number
11    ,p_upload_date    in             date
12    ,p_itd_start_date    out  nocopy date
13    )
14  is
15 
16    cursor csr_itd_start_date
17    is
18    select
19      greatest(min(asg.effective_start_date)
20              ,min(ptp.start_date))
21    from
22      per_all_assignments_f asg
23     ,per_time_periods  ptp
24    where asg.assignment_id = p_assignment_id
25    and ptp.payroll_id   = asg.payroll_id
26    and ptp.start_date <= asg.effective_end_date;
27 
28    l_itd_start_date date;
29 
30  begin
31 
32      open csr_itd_start_date;
33      fetch csr_itd_start_date into l_itd_start_date;
34      close csr_itd_start_date;
35 
36      l_itd_start_date := nvl(l_itd_start_date, END_OF_TIME);
37 
38    --
39    -- Check to see if the start date is before the upload date.
40    --
41    if l_itd_start_date <= p_upload_date then
42      p_itd_start_date := l_itd_start_date;
43    else
44      p_itd_start_date := END_OF_TIME;
45    end if;
46 
47  end get_expiry_date_info;
48 
49    -----------------------------------------------------------------------------
50    -- NAME
51    --  expiry_date
52    -- PURPOSE
53    --  Returns the expiry date of a given dimension relative to a date.
54    -- ARGUMENTS
55    --  p_upload_date       - the date on which the balance should be correct.
56    --  p_dimension_name    - the dimension being set.
57    --  p_assignment_id     - the assignment involved.
58    --  p_original_entry_id - Original_entry_id context.
59    -- USES
60    -- NOTES
61    --  This is used by pay_balance_upload.dim_expiry_date.
62    --  If the expiry date cannot be derived then it is set to the end of time
63    --  to indicate that a failure has occured. The process that uses the
64    --  expiry DATE knows this rule and acts accordingly.
65    -----------------------------------------------------------------------------
66    -- -------------------------------------------------------------------------
67 -- Funtion to return expiry date for supported Routes.
68 -- -------------------------------------------------------------------------
69   FUNCTION expiry_date
70 		(p_upload_date		IN	DATE,
71 		 p_dimension_name	IN	VARCHAR2,
72 		 p_assignment_id	IN	NUMBER,
73 		 p_original_entry_id	IN	NUMBER)
74 		 RETURN DATE IS
75 
76 -- period start date
77 --
78 CURSOR csr_start_of_date
79 		(p_assignment_id	NUMBER
80 		,p_upload_date		DATE
81 		) IS
82 SELECT  ptp.start_date
83 FROM	per_all_assignments_f ass
84        ,per_time_periods  ptp
85 WHERE	ass.assignment_id = p_assignment_id
86 AND 	ass.effective_start_date <= p_upload_date
87 AND	ass.effective_end_date	 >= p_upload_date
88 AND 	ptp.payroll_id		  = ass.payroll_id
89 AND 	p_upload_date BETWEEN ptp.start_date
90 AND     ptp.end_date;
91 
92 l_expiry_date	DATE;
93 l_business_group_id	PER_ALL_ASSIGNMENTS_F.BUSINESS_GROUP_ID%TYPE;
94 l_itd_start_date        date;
95 --l_oe_start_date         date;
96  l_holiday_year		date;
97 BEGIN
98 
99     hr_utility.trace('Entering pay_ip_bal_upload.expiry_date');
100 
101     --
102     -- Get the ITD start date.
103     --
104     get_expiry_date_info
105        (p_assignment_id  => p_assignment_id
106        ,p_upload_date    => p_upload_date
107        ,p_itd_start_date => l_itd_start_date
108        );
109     --
110     hr_utility.trace('Asg Start Date='||l_itd_start_date);
111 
112 IF  p_dimension_name IN ('ASSIGNMENT HOLIDAY PERIOD TO DATE') THEN
113 
114 	open csr_start_of_date(p_assignment_id, p_upload_date);
115 	fetch csr_start_of_date into l_expiry_date;
116 	close csr_start_of_date;
117         hr_utility.trace('Period Start Date=' || l_expiry_date);
118 
119 ELSIF  p_dimension_name IN ('ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER INCEPTION TO DATE') THEN
120 		l_expiry_date := l_itd_start_date;
121                 hr_utility.trace('Asg Start Date=' || l_expiry_date);
122 
123 ELSIF  p_dimension_name IN ('ASSIGNMENT HOLIDAY MONTH TO DATE') THEN
124 		l_expiry_date := TRUNC(p_upload_date,'MM');
125                 hr_utility.trace('Mth Start Date=' || l_expiry_date);
126 
127 ELSIF  p_dimension_name IN ('ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER YEAR TO DATE') THEN
128 		l_expiry_date := TRUNC(p_upload_date,'Y');
129                 hr_utility.trace('Year Start Date=' || l_expiry_date);
130 
131 ELSIF  p_dimension_name IN ('ASSIGNMENT HOLIDAY YEAR TO DATE') THEN
132 
133 		SELECT TO_DATE('0104'||TO_CHAR(p_upload_date,'YYYY'),'DD/MM/YYYY')
134 		INTO l_holiday_year
135 		FROM DUAL;
136 
137 		IF p_upload_date >=  l_holiday_year THEN
138 			l_expiry_date := l_holiday_year;
139 		ELSE
140 			l_expiry_date := ADD_MONTHS(l_holiday_year , -12);
141 		END IF;
142 
143                 hr_utility.trace('HY Start Date=' || l_expiry_date);
144 
145 ELSE
146   --
147   -- Dimension not supported.
148   --
149   l_expiry_date := END_OF_TIME;
150   hr_utility.trace('Dimension Not Supported. ' || p_dimension_name);
151 
152 END IF;
153 
154   l_expiry_date := nvl(greatest(l_itd_start_date
155                                ,l_expiry_date
156                                ), END_OF_TIME);
157 
158   if (l_expiry_date <> END_OF_TIME) and (l_expiry_date > p_upload_date) then
159     hr_utility.trace('Expiry date is later than upload_date! expiry_date='||l_expiry_date);
160     --
161     l_expiry_date := END_OF_TIME;
162   end if;
163 
164     hr_utility.trace('Exiting pay_ip_bal_upload.expiry_date');
165 
166 RETURN l_expiry_date;
167 
168 END expiry_date;
169 
170    -----------------------------------------------------------------------------
171    -- NAME
172    --  is_supported
173    -- PURPOSE
174    --  Checks if the dimension is supported by the upload process.
175    -- ARGUMENTS
176    --  p_dimension_name - the balance dimension to be checked.
177    -- USES
178    -- NOTES
179    --  Only a subset of the FI dimensions are supported.
180    --  This is used by pay_balance_upload.validate_dimension.
181    -----------------------------------------------------------------------------
182    FUNCTION is_supported(p_dimension_name VARCHAR2) RETURN NUMBER IS
183       p_dimension_name_temp VARCHAR2(100);
184     BEGIN
185       -- See if the dimension is supported.
186       IF p_dimension_name IN ('ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER INCEPTION TO DATE',
187 							'ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER YEAR TO DATE',
188 							'ASSIGNMENT HOLIDAY MONTH TO DATE',
189 							'ASSIGNMENT HOLIDAY PERIOD TO DATE',
190 							'ASSIGNMENT HOLIDAY YEAR TO DATE')
191 
192 	THEN
193          RETURN 1;
194       ELSE
195          RETURN 0;
196       END IF;
197       hr_utility.trace('Exiting pay_fi_bal_upload.is_supported stub');
198    END is_supported;
199    -----------------------------------------------------------------------------
200    -- NAME
201    --  include_adjustment
202    -- PURPOSE
203    --  Given a dimension, and relevant contexts and details of an existing
204    --  balance adjustment, it will find out if the balance adjustment effects
205    --  the dimension to be set. Both the dimension to be set and the adjustment
206    --  are for the same assignment and balance.
207    -- ARGUMENTS
208    --  p_balance_type_id    - the balance to be set.
209    --  p_dimension_name     - the balance dimension to be set.
210    --  p_original_entry_id  - ORIGINAL_ENTRY_ID context.
211    --  p_test_batch_line_id -
212    -- USES
213    -- NOTES
214    --  This is used by pay_balance_upload.get_current_value.
215    -----------------------------------------------------------------------------
216  FUNCTION include_adjustment
217  	(
218 	  p_balance_type_id     NUMBER
219 	 ,p_dimension_name      VARCHAR2
220 	 ,p_original_entry_id   NUMBER
221 	 ,p_upload_date	        DATE
222 	 ,p_batch_line_id	NUMBER
223 	 ,p_test_batch_line_id	NUMBER
224 	 ) RETURN NUMBER IS
225 
226     	CURSOR csr_bal_adj_st1 (p_test_batch_line_id NUMBER, p_batch_line_id NUMBER) IS
227 	  SELECT tba.source_text ,  tba.tax_unit_id
228 	  FROM   pay_temp_balance_adjustments tba,
229 		 pay_balance_batch_lines bbl
230 	  WHERE  tba.batch_line_id = p_test_batch_line_id
231 	  AND    bbl.batch_line_id = p_batch_line_id
232 	 AND    nvl(tba.balance_type_id ,0) = nvl(bbl.balance_type_id ,0)
233 	  AND    nvl(tba.source_text ,0) = nvl(bbl.source_text ,0)
234 	  AND    nvl(tba.tax_unit_id,0) = nvl(bbl.tax_unit_id,0)
235 	  AND  tba.tax_unit_id IS NOT NULL
236 	  AND  tba.source_text IS NOT NULL;
237 
238 	l_include_adj BOOLEAN :=  TRUE ;
239 	v_cur_bal_adj_st1  csr_bal_adj_st1%ROWTYPE;
240 
241    BEGIN
242 	       hr_utility.trace('Entering pay_fi_bal_upload.include_adjustment stub');
243 
244 		IF p_dimension_name IN ('ASSIGNMENT HOLIDAY PERIOD TO DATE',
245 								'ASSIGNMENT HOLIDAY MONTH TO DATE',
246 								'ASSIGNMENT HOLIDAY YEAR TO DATE') THEN
247 
248 			 l_include_adj := TRUE;
249 
250 		 ELSIF p_dimension_name IN ('ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER INCEPTION TO DATE','ASSIGNMENT EMPLOYMENT TYPE LEGAL EMPLOYER YEAR TO DATE') THEN
251 
252 			 OPEN csr_bal_adj_st1(p_test_batch_line_id => p_test_batch_line_id,
253 			 p_batch_line_id => p_batch_line_id);
254 
255 			 FETCH csr_bal_adj_st1 INTO v_cur_bal_adj_st1;
256 
257 			 IF csr_bal_adj_st1%NOTFOUND THEN
258 			      l_include_adj := FALSE ;
259 			 END IF;
260 
261 			 CLOSE csr_bal_adj_st1;
262 
263 		ELSE
264 
265 			NULL;
266 
267 		END IF;
268 
269 	    hr_utility.trace('Exiting pay_fi_bal_upload.include_adjustment');
270 
271 	  if  l_include_adj  then
272             RETURN 1;
273          else
274              RETURN 0;
275          end if;
276 
277    END include_adjustment;
278        -----------------------------------------------------------------------------
279      -- NAME
280      --  validate_batch_lines
281      -- PURPOSE
282      --  Applies FI specific validation to the batch.
283      -- ARGUMENTS
284      --  p_batch_id - the batch to be validate_batch_linesd.
285      -- USES
286      -- NOTES
287      --  This is used by pay_balance_upload.validate_batch_lines.
288      -----------------------------------------------------------------------------
289    --
290      PROCEDURE validate_batch_lines(p_batch_id NUMBER) IS
291      BEGIN
292         hr_utility.trace('Entering pay_fi_bal_upload.validate_batch_lines stub');
293         hr_utility.trace('Exiting pay_fi_bal_upload.validate_batch_lines stub' );
294      END validate_batch_lines;
295 
296 END pay_fi_bal_upload;