DBA Data[Home] [Help]

PACKAGE BODY: APPS.HRI_OLTP_PMV_UTIL_PKG

Source


1 PACKAGE BODY hri_oltp_pmv_util_pkg AS
2 /* $Header: hrioputl.pkb 120.5 2005/09/22 07:12 jrstewar noship $ */
3 
4 g_rtn  VARCHAR2(30) := '
5 ';
6 
7 /* Returns SQL fragment for applying security to DBI reports */
8 FUNCTION get_security_clause(p_security_type    VARCHAR2)  -- [MGR, ORG]
9    RETURN VARCHAR2 IS
10 
11   l_security_clause  VARCHAR2(2000);
12 
13 BEGIN
14 
15   IF (p_security_type = 'MGR') THEN
16     l_security_clause :=
17 'AND EXISTS
18  (SELECT /*+ NO_UNNEST INDEX(sup hri_cs_suph_n4) */ null
19   FROM  hri_cs_suph sup
20   WHERE sup.sup_person_id IN (hri_bpl_security.get_apps_signin_person_id,&BIS_SELECTED_TOP_MANAGER)
21   AND sup.sub_person_id = &HRI_PERSON+HRI_PER_USRDR_H
22   AND sup.sub_invalid_flag_code = ''N''
23   AND &BIS_CURRENT_ASOF_DATE BETWEEN sup.effective_start_date
24               AND sup.effective_end_date)';
25 
26   END IF;
27 
28   RETURN l_security_clause;
29 
30 END get_security_clause;
31 
32 /* Calculates the annualization factor */
33 FUNCTION calc_anl_factor(p_period_type  IN VARCHAR2)
34      RETURN NUMBER IS
35 
36   l_anl_factor  NUMBER;
37 
38 BEGIN
39 
40   IF (p_period_type = 'FII_ROLLING_YEAR') THEN
41     l_anl_factor := 1;
42   ELSIF (p_period_type = 'FII_ROLLING_QTR') THEN
43     l_anl_factor := 365 / 90;
44   ELSIF (p_period_type = 'FII_ROLLING_MONTH') THEN
45     l_anl_factor := 365 / 30;
46   ELSIF (p_period_type = 'FII_ROLLING_WEEK') THEN
47     l_anl_factor := 365 / 7;
48   ELSE
49     l_anl_factor := (365/30);
50   END IF;
51 
52   RETURN l_anl_factor;
53 
54 END calc_anl_factor;
55 
56 -- Sets default sort order
57 FUNCTION set_default_order_by(p_order_by_clause  IN VARCHAR2)
58    RETURN VARCHAR2 IS
59 
60   l_return_value   VARCHAR2(1000);
61 
62 BEGIN
63 
64   IF (p_order_by_clause IS NOT NULL) THEN
65     l_return_value := REPLACE(p_order_by_clause, 'VIEWBY', 'HRI_P_ORDER_BY_1');
66   ELSE
67     l_return_value := 'order_by';
68   END IF;
69 
70   RETURN l_return_value;
71 
72 END set_default_order_by;
73 
74 -- adds a filter on the viewby for "small" view bys
75 FUNCTION set_viewby_filter
76   (p_parameter_rec  IN hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE,
77    p_bind_tab       IN hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE,
78    p_view_by_alias  IN VARCHAR2)
79       RETURN VARCHAR2 IS
80 
81   l_viewby_filter   VARCHAR2(1000);
82 
83 BEGIN
84 
85 /* Trap exceptions for no data found */
86   BEGIN
87 
88     l_viewby_filter :=
89 'AND ' || p_view_by_alias || '.id IN (' ||
90           p_bind_tab(p_parameter_rec.view_by).pmv_bind_string || ')' || g_rtn;
91 
92 /* When no parameter value is set no filter is needed */
93   EXCEPTION WHEN OTHERS THEN
94     null;
95 
96   END;
97 
98 /* Special case - filters correct set of LOW bands */
99   IF (p_parameter_rec.view_by = 'HRI_LOW+HRI_LOW_BAND_X') THEN
100 
101   /* If person type filter is applied use it to filter the bands */
102     IF (p_parameter_rec.wkth_wktyp_sk_fk IS NOT NULL) THEN
103 
104       l_viewby_filter := l_viewby_filter ||
105 'AND ' || p_view_by_alias || '.wkth_wktyp_sk_fk = ''' ||
106           p_parameter_rec.wkth_wktyp_sk_fk || '''' || g_rtn;
107 
108     END IF;
109 
110   END IF;
111 
112   RETURN l_viewby_filter;
113 
114 END set_viewby_filter;
115 --
116 -- -------------------------------------------------------------------------
117 -- This procedure sets the parameters taking into consideration whethere the
118 -- PMV is being generated in PMV mode or SQL mode. The SQL mode is used for
119 -- debugging.
120 -- -------------------------------------------------------------------------
121 --
122 PROCEDURE substitute_bind_values
123   (p_bind_tab    IN hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE,
124    p_bind_format IN VARCHAR2,
125    p_sql         IN OUT NOCOPY VARCHAR2)
126 IS
127   --
128   l_index      VARCHAR2(100);
129   --
130 BEGIN
131   --
132   IF p_bind_format = 'SQL' THEN
133     --
134     -- Loop through all the parameters and set them
135     --
136     l_index := p_bind_tab.FIRST;
137     --
138     WHILE l_index IS NOT NULL LOOP
139       --
140       p_sql := replace(p_sql,
141                        p_bind_tab(l_index).pmv_bind_string,
142                        p_bind_tab(l_index).sql_bind_string);
143       --
144       l_index := p_bind_tab.NEXT(l_index);
145       --
146     END LOOP;
147   --
148   END IF;
149   --
150 END substitute_bind_values;
151 
152 --
153 -- -------------------------------------------------------------------------
154 -- This function checks Profile Option HRI:DBI Link To Transaction System
155 -- Link to HR Employee Directory
156 --
157 -- -------------------------------------------------------------------------
158 --
159 FUNCTION chk_emp_dir_lnk(p_parameter_rec  IN hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE
160                         ,p_bind_tab       IN hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE)
161 
162    RETURN NUMBER IS
163 
164   l_return_chk  NUMBER;
165   l_hr_dir_chk  NUMBER;
166   l_profile_vl  VARCHAR2(1000);
167 
168 BEGIN
169     /* Checks Employee Directory has been populated */
170   	SELECT count(*) INTO l_hr_dir_chk
171     FROM per_empdir_people
172     WHERE orig_system = 'PER'
173     AND rownum <= 1;
174 
175   fnd_profile.get('HRI_DBI_LNK_TRNS_SYS',l_profile_vl);
176 
177   /* Check the Profile HRI:DBI Link To Transaction System */
178   IF (l_profile_vl = 'HR_EMP_DIR_ONLY') AND (l_hr_dir_chk = 1) THEN
179     --
180 	  l_return_chk := 1;
181     --
182 	ELSIF (l_profile_vl = 'NO_LNK' ) THEN
183     --
184 	  l_return_chk := 0;
185     ELSE
186     --
187 	  l_return_chk := 0;
188   --
189   END IF;
190 
191  RETURN l_return_chk ;
192 
193 END chk_emp_dir_lnk;
194 
195 -- Gets sql fragment for change %
196 FUNCTION get_change_percent_sql(p_previous_col   IN VARCHAR2,
197                                 p_current_col    IN VARCHAR2)
198      RETURN VARCHAR2 IS
199 
200 BEGIN
201 
202 --
203 -- --------------------------------------------------------------------
204 -- The change percent calculation is:
205 --
206 -- 100 * (CURRENT - PREVIOUS) / PREVIOUS
207 --
208 -- If PREVIOUS is 0 NULL is returned to avoid the divide by 0 error,
209 -- which is rendered as N/a.
210 -- --------------------------------------------------------------------
211 --
212   RETURN
213 'DECODE(' || p_previous_col || ',
214  0, to_number(null),
215 100 * (' || p_current_col || ' - ' || p_previous_col || ') / ' || p_previous_col || ')';
216 
217 EXCEPTION WHEN OTHERS THEN
218 
219   RETURN 'to_number(NULL)';
220 
221 END get_change_percent_sql;
222 
223 END hri_oltp_pmv_util_pkg;