[Home] [Help]
PACKAGE BODY: APPS.HRI_OLTP_PMV_ABS_DTL
Source
1 PACKAGE BODY hri_oltp_pmv_abs_dtl AS
2 /* $Header: hriopabsdt.pkb 120.9 2008/01/06 10:11:40 vjaganat noship $ */
3
4 g_rtn VARCHAR2(30) := '
5 ';
6
7 g_unassigned VARCHAR2(50) := HRI_OLTP_VIEW_MESSAGE.get_unassigned_msg;
8
9 g_abs_cat_cl_view VARCHAR2(30) :=
10 hri_mtdt_dim_lvl.g_dim_lvl_mtdt_tab('HRI_ABSNC+HRI_ABSNC_CAT').viewby_table;
11 g_abs_rsn_cl_view VARCHAR2(30) :=
12 hri_mtdt_dim_lvl.g_dim_lvl_mtdt_tab('HRI_ABSNC+HRI_ABSNC_RSN').viewby_table;
13 g_abs_per_per_cl_view VARCHAR2(30) := 'hri_dbi_cl_per_n_v';
14 g_abs_per_sup_cl_view VARCHAR2(30) := 'hri_dbi_cl_per_n_v';
15
16 /******************************************************************************/
17 /* Absence detail for Staff = Directs */
18 /******************************************************************************/
19 PROCEDURE get_abs_detail_directs
20 (p_parameter_rec IN hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE,
21 p_bind_tab IN hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE,
22 p_lnk_emp_name IN VARCHAR2,
23 p_lnk_mgr_name IN VARCHAR2,
24 x_custom_sql OUT NOCOPY VARCHAR2,
25 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
26
27 /* Variable to return SQL query for report */
28 l_sqltext VARCHAR2(32000);
29 l_params_header VARCHAR2(10000);
30 l_lnk_profile_chk VARCHAR2(4000);
31
32 /* Table of custom parameters */
33 l_custom_rec BIS_QUERY_ATTRIBUTES;
34
35 /* Security clause */
36 l_security_clause VARCHAR2(1000);
37
38 /* Variables for dynamic part of SQL query */
39 l_parameter_name VARCHAR2(100);
40 l_column VARCHAR2(100);
41 l_where_clause VARCHAR2(1000);
42
43 -- functional decision (JC) default to days
44 l_dynmc_drtn_prd VARCHAR2(100) := 'factM.abs_drtn_days_prd';
45 l_dynmc_drtn VARCHAR2(100) := 'abs_cs.abs_drtn_days';
46
47 BEGIN
48
49 /* Initialize table/record variables */
50 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
51 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
52
53 /* Set security clause */
54 l_security_clause := hri_oltp_pmv_util_pkg.get_security_clause('MGR');
55
56 /* Loop through parameters that have been set */
57 l_parameter_name := p_bind_tab.FIRST;
58
59 WHILE (l_parameter_name IS NOT NULL) LOOP
60
61 IF (l_parameter_name = 'HRI_ABSNC+HRI_ABSNC_CAT' ) THEN
62
63 /* Dynamically set conditions for parameter */
64 l_where_clause := l_where_clause ||
65 'AND abs_cs.' || hri_mtdt_dim_lvl.g_dim_lvl_mtdt_tab
66 (l_parameter_name).fact_viewby_col ||
67 ' IN (' || p_bind_tab(l_parameter_name).pmv_bind_string || ')' || g_rtn;
68
69 END IF;
70
71 /* Move to next parameter */
72 l_parameter_name := p_bind_tab.NEXT(l_parameter_name);
73 END LOOP;
74
75 /* formulate the dynmaic column selection based on Absence Duration
76 unit of measure profile option */
77 IF (hri_bpl_utilization.get_abs_durtn_profile_vl = 'DAYS') THEN
78 l_dynmc_drtn_prd := 'factM.abs_drtn_days_prd';
79 l_dynmc_drtn := 'abs_cs.abs_drtn_days';
80 ELSIF (hri_bpl_utilization.get_abs_durtn_profile_vl = 'HOURS') THEN
81 l_dynmc_drtn_prd := 'factM.abs_drtn_hrs_prd';
82 l_dynmc_drtn := 'abs_cs.abs_drtn_hrs';
83 ELSE -- functional decision (JC) default to days
84 l_dynmc_drtn_prd := 'factM.abs_drtn_days_prd';
85 l_dynmc_drtn := 'abs_cs.abs_drtn_days';
86 END IF;
87
88
89
90 /* Formulate query */
91 l_sqltext :=
92 'SELECT -- Employee Absence Detail (Direct Reports)' || g_rtn ||
93 ' peo.value VIEWBY ' || g_rtn ||
94 ',peo.order_by HRI_P_ORDER_BY_1 ' || g_rtn ||
95 ',peo.value HRI_P_PER_LNAME_CN ' || g_rtn ||
96 ',peo.id HRI_P_PER_ID ' || g_rtn ||
97 ',''' || p_lnk_emp_name || ''' HRI_P_DRILL_URL1' || g_rtn ||
98 ',sup.value HRI_P_PER_SUP_LNAME_CN ' || g_rtn ||
99 ',sup.id HRI_P_SUP_ID ' || g_rtn ||
100 ',''' || p_lnk_mgr_name || ''' HRI_P_DRILL_URL2' || g_rtn ||
101 ',abs_cs.abs_start_date HRI_P_DATE1_GA' || g_rtn ||
102 ',DECODE(abs_cs.abs_end_date,
103 to_date(''' || to_char(hr_general.end_of_time, 'DD-MM-YYYY') ||
104 ''', ''DD-MM-YYYY''), to_date(NULL),
105 abs_cs.abs_end_date
106 ) HRI_P_DATE2_GA' || g_rtn ||
107 ',abs_cat.value HRI_P_CHAR1_GA' || g_rtn ||
108 ',pabstyp.name HRI_P_CHAR2_GA' || g_rtn ||
109 ',abs_rsn.value HRI_P_CHAR3_GA' || g_rtn ||
110 ','||l_dynmc_drtn_prd||' HRI_P_MEASURE1' || g_rtn ||
111 ','||l_dynmc_drtn||' HRI_P_MEASURE2' || g_rtn ||
112 'FROM
113 -- inner query
114 (SELECT /*+ NO_MERGE */
115 fact.abs_person_id
116 ,suph.sup_person_id supervisor_person_id
117 ,fact.absence_sk_fk
118 ,abs_cs.absence_category_code absence_category_code
119 ,SUM(fact.abs_drtn_days) abs_drtn_days_prd
120 ,SUM(fact.abs_drtn_hrs) abs_drtn_hrs_prd
121 FROM hri_mb_utl_absnc_ct fact
122 ,hri_cs_suph suph
123 ,HRI_CS_ABSENCE_CT abs_cs
124 WHERE suph.sup_person_id = &HRI_PERSON+HRI_PER_USRDR_H
125 AND fact.effective_date BETWEEN suph.effective_start_date
126 AND suph.effective_end_date
127 AND suph.sub_invalid_flag_code = ''N''
128 AND suph.sub_relative_level = 1
129 AND suph.sub_person_id = fact.abs_person_id
130 AND fact.absence_sk_fk = abs_cs.absence_sk_pk
131 AND fact.abs_person_id = abs_cs.abs_person_id
132 AND fact.effective_date BETWEEN &BIS_CURRENT_EFFECTIVE_START_DATE
133 AND &BIS_CURRENT_EFFECTIVE_END_DATE
134 -- dynamic where conditions' || g_rtn ||
135 l_where_clause|| g_rtn ||
136 '-- end of dynamic where conditions
137 GROUP BY
138 fact.abs_person_id
139 ,suph.sup_person_id
140 ,fact.absence_sk_fk
141 ,abs_cs.absence_category_code
142 ) factM
143 , hri_cs_absence_ct abs_cs
144 , per_absence_attendance_types pabstyp
145 , hri_cl_absnc_cat_v abs_cat
146 , hri_cl_absnc_rsn_v abs_rsn
147 , hri_dbi_cl_per_n_v peo
148 , hri_dbi_cl_per_n_v sup
149 , per_all_assignments_f asg
150 WHERE
151 factM.absence_sk_fk = abs_cs.absence_sk_pk
152 AND abs_cs.absence_attendance_type_id = pabstyp.absence_attendance_type_id
153 AND abs_cs.absence_category_code = abs_cat.id
154 AND abs_cs.absence_reason_code = abs_rsn.id
155 AND factM.abs_person_id = peo.id
156 AND &BIS_CURRENT_ASOF_DATE BETWEEN peo.start_date and peo.end_date
157 AND factM.abs_person_id = asg.person_id
158 AND abs_cs.abs_start_date BETWEEN asg.effective_start_date and asg.effective_end_date
159 AND asg.primary_flag = ''Y''
160 AND asg.supervisor_id = sup.id
161 AND &BIS_CURRENT_ASOF_DATE BETWEEN sup.start_date and sup.end_date' || g_rtn ||
162 l_security_clause || g_rtn ||
163 '&ORDER_BY_CLAUSE ';
164
165 x_custom_sql := l_sqltext;
166
167 END get_abs_detail_directs;
168
169 /******************************************************************************/
170 /* Absence (Employee) Detail for Staff = All */
171 /******************************************************************************/
172 PROCEDURE get_abs_detail_all
173 (p_parameter_rec IN hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE,
174 p_bind_tab IN hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE,
175 p_lnk_emp_name IN VARCHAR2,
176 p_lnk_mgr_name IN VARCHAR2,
177 x_custom_sql OUT NOCOPY VARCHAR2,
178 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
179
180 /* Variable to return SQL query for report */
181 l_sqltext VARCHAR2(32000);
182 l_params_header VARCHAR2(10000);
183 l_lnk_profile_chk VARCHAR2(4000);
184
185 /* Table of custom parameters */
186 l_custom_rec BIS_QUERY_ATTRIBUTES;
187
188 /* Security clause */
189 l_security_clause VARCHAR2(1000);
190
191 /* Variables for dynamic part of SQL query */
192 l_parameter_name VARCHAR2(100);
193 l_where_clause VARCHAR2(1000);
194
195 -- functional decision (JC) default to days
196 l_dynmc_drtn_prd VARCHAR2(100) := 'factM.abs_drtn_days_prd';
197 l_dynmc_drtn VARCHAR2(100) := 'abs_cs.abs_drtn_days';
198
199 BEGIN
200
201 /* Initialize table/record variables */
202 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
203 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
204
205 /* Set security clause */
206 l_security_clause := hri_oltp_pmv_util_pkg.get_security_clause('MGR');
207
208 /* Loop through parameters that have been set */
209 l_parameter_name := p_bind_tab.FIRST;
210
211 WHILE (l_parameter_name IS NOT NULL) LOOP
212
213 IF (l_parameter_name = 'HRI_ABSNC+HRI_ABSNC_CAT' ) THEN
214
215 /* Dynamically set conditions for parameter */
216 l_where_clause := l_where_clause ||
217 'AND fact.' || hri_mtdt_dim_lvl.g_dim_lvl_mtdt_tab
218 (l_parameter_name).fact_viewby_col ||
219 ' IN (' || p_bind_tab(l_parameter_name).pmv_bind_string || ')' || g_rtn;
220
221 END IF;
222
223 /* Move to next parameter */
224 l_parameter_name := p_bind_tab.NEXT(l_parameter_name);
225 END LOOP;
226
227 /* formulate the dynmaic column selection based on Absence Duration
228 unit of measure profile option */
229 IF (hri_bpl_utilization.get_abs_durtn_profile_vl = 'DAYS') THEN
230 l_dynmc_drtn_prd := 'factM.abs_drtn_days_prd';
231 l_dynmc_drtn := 'abs_cs.abs_drtn_days';
232 ELSIF (hri_bpl_utilization.get_abs_durtn_profile_vl = 'HOURS') THEN
233 l_dynmc_drtn_prd := 'factM.abs_drtn_hrs_prd';
234 l_dynmc_drtn := 'abs_cs.abs_drtn_hrs';
235 ELSE -- functional decision (JC) default to days
236 l_dynmc_drtn_prd := 'factM.abs_drtn_days_prd';
237 l_dynmc_drtn := 'abs_cs.abs_drtn_days';
238 END IF;
239
240
241 /* Formulate query */
242 l_sqltext :=
243 'SELECT -- Employee Absence Detail (All Staff)' || g_rtn ||
244 ' peo.value VIEWBY ' || g_rtn ||
245 ',peo.order_by HRI_P_ORDER_BY_1 ' || g_rtn ||
246 ',peo.value HRI_P_PER_LNAME_CN ' || g_rtn ||
247 ',peo.id HRI_P_PER_ID ' || g_rtn ||
248 ',''' || p_lnk_emp_name || ''' HRI_P_DRILL_URL1' || g_rtn ||
249 ',sup.value HRI_P_PER_SUP_LNAME_CN ' || g_rtn ||
250 ',sup.id HRI_P_SUP_ID ' || g_rtn ||
251 ',''' || p_lnk_mgr_name || ''' HRI_P_DRILL_URL2' || g_rtn ||
252 ',abs_cs.abs_start_date HRI_P_DATE1_GA' || g_rtn ||
253 ',DECODE(abs_cs.abs_end_date,
254 to_date(''' || to_char(hr_general.end_of_time, 'DD-MM-YYYY') ||
255 ''', ''DD-MM-YYYY''), to_date(NULL),
256 abs_cs.abs_end_date
257 ) HRI_P_DATE2_GA' || g_rtn ||
258 ',abs_cat.value HRI_P_CHAR1_GA' || g_rtn ||
259 ',pabstyp.name HRI_P_CHAR2_GA' || g_rtn ||
260 ',abs_rsn.value HRI_P_CHAR3_GA' || g_rtn ||
261 ','||l_dynmc_drtn_prd||' HRI_P_MEASURE1' || g_rtn ||
262 ','||l_dynmc_drtn||' HRI_P_MEASURE2' || g_rtn ||
263 'FROM
264 -- inner query
265 (SELECT /*+ NO_MERGE */
266 fact.abs_person_id
267 ,fact.supervisor_person_id
268 ,fact.absence_sk_fk
269 ,SUM(fact.abs_drtn_days) abs_drtn_days_prd
270 ,SUM(fact.abs_drtn_hrs) abs_drtn_hrs_prd
271 FROM
272 hri_mdp_sup_absnc_occ_ct fact
273 WHERE fact.supervisor_person_id = &HRI_PERSON+HRI_PER_USRDR_H
274 AND fact.effective_date BETWEEN &BIS_CURRENT_EFFECTIVE_START_DATE
275 AND &BIS_CURRENT_EFFECTIVE_END_DATE
276 -- dynamic where conditions' || g_rtn ||
277 l_where_clause|| g_rtn ||
278 '-- end of dynamic where conditions
279 GROUP BY
280 fact.abs_person_id
281 ,fact.supervisor_person_id
282 ,fact.absence_sk_fk
283 ) factM
284 -- end of inner query
285 , hri_cs_absence_ct abs_cs
286 , per_absence_attendance_types pabstyp
287 , hri_cl_absnc_cat_v abs_cat
288 , hri_cl_absnc_rsn_v abs_rsn
289 , hri_dbi_cl_per_n_v peo
290 , per_all_assignments_f asg
291 , hri_dbi_cl_per_n_v sup
292 WHERE factM.absence_sk_fk = abs_cs.absence_sk_pk
293 AND abs_cs.absence_attendance_type_id = pabstyp.absence_attendance_type_id
294 AND abs_cs.absence_category_code = abs_cat.id
295 AND abs_cs.absence_reason_code = abs_rsn.id
296 AND factM.abs_person_id = peo.id
297 AND &BIS_CURRENT_ASOF_DATE BETWEEN peo.start_date and peo.end_date
298 AND factM.abs_person_id = asg.person_id
299 AND abs_cs.abs_start_date BETWEEN asg.effective_start_date and asg.effective_end_date
300 AND asg.primary_flag = ''Y''
301 AND asg.supervisor_id = sup.id
302 AND abs_cs.abs_start_date BETWEEN sup.start_date and sup.end_date' || g_rtn ||
303 l_security_clause || g_rtn ||
304 '&ORDER_BY_CLAUSE ';
305
306 x_custom_sql := l_sqltext;
307
308 END get_abs_detail_all;
309
310 /******************************************************************************/
311 /* Absence Detail report */
312 /******************************************************************************/
313 PROCEDURE GET_ABS_DETAIL(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
314 x_custom_sql OUT NOCOPY VARCHAR2,
315 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
316
317 /* Parameter values */
318 l_parameter_rec hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE;
319 l_bind_tab hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE;
320
321 /* Variables for dynamic part of SQL query */
322 l_lnk_profile_chk VARCHAR2(4000);
323 l_lnk_emp_name VARCHAR2(4000);
324 l_lnk_mgr_name VARCHAR2(4000);
325
326 BEGIN
327
328 /* Get common parameter values */
329 hri_oltp_pmv_util_param.get_parameters_from_table
330 (p_page_parameter_tbl => p_page_parameter_tbl,
331 p_parameter_rec => l_parameter_rec,
332 p_bind_tab => l_bind_tab);
333
334 /* Activite Drill URL for Link to HR Employee Directory */
335 l_lnk_profile_chk := hri_oltp_pmv_util_pkg.chk_emp_dir_lnk
336 (p_parameter_rec => l_parameter_rec
337 ,p_bind_tab => l_bind_tab);
338
339 IF (l_lnk_profile_chk = 1 AND
340 l_parameter_rec.time_curr_end_date = TRUNC(SYSDATE)) THEN
341 l_lnk_emp_name := 'pFunctionName=HR_EMPDIR_EMPDTL_PROXY_SS&pId=HRI_P_PER_ID&OAPB=FII_HR_BRAND_TEXT';
342 l_lnk_mgr_name := 'pFunctionName=HR_EMPDIR_EMPDTL_PROXY_SS&pId=HRI_P_SUP_ID&OAPB=FII_HR_BRAND_TEXT';
343 END IF ;
344
345 /* Check supervisor hierarchy rollup */
346 IF (l_parameter_rec.peo_sup_rollup_flag = 'N') THEN
347
348 /* Call directs only function to get the SQL */
349 get_abs_detail_directs
350 (p_parameter_rec => l_parameter_rec,
351 p_bind_tab => l_bind_tab,
352 p_lnk_emp_name => l_lnk_emp_name,
353 p_lnk_mgr_name => l_lnk_mgr_name,
354 x_custom_sql => x_custom_sql,
355 x_custom_output => x_custom_output);
356
357 ELSE
358
359 /* Call all staff function to get the SQL */
360 get_abs_detail_all
361 (p_parameter_rec => l_parameter_rec,
362 p_bind_tab => l_bind_tab,
363 p_lnk_emp_name => l_lnk_emp_name,
364 p_lnk_mgr_name => l_lnk_mgr_name,
365 x_custom_sql => x_custom_sql,
366 x_custom_output => x_custom_output);
367
368 END IF;
369
370 END get_abs_detail;
371
372 END HRI_OLTP_PMV_ABS_DTL ;