[Home] [Help]
PACKAGE BODY: APPS.HRI_OLTP_PMV_WMV_WF_SUP
Source
1 PACKAGE BODY HRI_OLTP_PMV_WMV_WF_SUP AS
2 /* $Header: hriopwfs.pkb 120.1 2005/10/26 07:54:16 jrstewar noship $ */
3
4 g_rtn VARCHAR2(5) := '
5 ';
6 --
7 -- *********************************
8 -- * AK SQL For Total Workforce KPI*
9 -- * AK Region : HRI_K_WMV_WF *
10 -- *********************************
11 --
12 PROCEDURE get_kpi
13 (p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
14 x_custom_sql OUT NOCOPY VARCHAR2,
15 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
16
17 l_SQLText VARCHAR2(32000);
18 l_security_clause VARCHAR2(4000);
19 l_custom_rec BIS_QUERY_ATTRIBUTES ;
20
21 /* Parameter values */
22 l_parameter_rec hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE;
23 l_bind_tab hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE;
24
25 /* Dynamic SQL controls */
26 l_wrkfc_fact_params hri_bpl_fact_sup_wrkfc_sql.wrkfc_fact_param_type;
27 l_wrkfc_fact_sql VARCHAR2(10000);
28
29 BEGIN
30
31 /* Initialize out parameters */
32 l_custom_rec := BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
33 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
34
35 /* Get security clause for Manager based security */
36 l_security_clause := hri_oltp_pmv_util_pkg.get_security_clause('MGR');
37
38 /* Get common parameter values */
39 hri_oltp_pmv_util_param.get_parameters_from_table
40 (p_page_parameter_tbl => p_page_parameter_tbl,
41 p_parameter_rec => l_parameter_rec,
42 p_bind_tab => l_bind_tab);
43
44 /* Force view by manager */
45 l_parameter_rec.view_by := 'HRI_PERSON+HRI_PER_USRDR_H';
46
47 /* Get SQL for workforce fact */
48 l_wrkfc_fact_params.bind_format := 'PMV';
49 l_wrkfc_fact_params.include_comp := 'Y';
50 l_wrkfc_fact_params.include_hdc := 'Y';
51 l_wrkfc_fact_params.kpi_mode := 'Y';
52 l_wrkfc_fact_params.bucket_dim := 'HRI_PRSNTYP+HRI_WKTH_WKTYP';
53 l_wrkfc_fact_sql := hri_bpl_fact_sup_wrkfc_sql.get_sql
54 (p_parameter_rec => l_parameter_rec,
55 p_bind_tab => l_bind_tab,
56 p_wrkfc_params => l_wrkfc_fact_params,
57 p_calling_module => 'HRI_OLTP_PMV_WMV_WF_SUP.GET_KPI');
58
59 l_SQLText :=
60 'SELECT -- Total Workforce KPI Report
61 vby.id VIEWBYID
62 ,vby.value VIEWBY
63 ,tab.CURR_HDC_END HRI_P_MEASURE1
64 ,tab.COMP_HDC_END HRI_P_MEASURE2
65 ,tab.CURR_HDC_EMP HRI_P_MEASURE3
66 ,tab.CURR_HDC_EMP HRI_P_MEASURE4
67 ,tab.CURR_HDC_CWK HRI_P_MEASURE5
68 ,tab.COMP_HDC_CWK HRI_P_MEASURE6
69 ,tab.CURR_HDC_END HRI_P_GRAND_TOTAL1
70 ,tab.COMP_HDC_END HRI_P_GRAND_TOTAL2
71 ,tab.CURR_HDC_EMP HRI_P_GRAND_TOTAL3
72 ,tab.CURR_HDC_EMP HRI_P_GRAND_TOTAL4
73 ,CURR_HDC_CWK HRI_P_GRAND_TOTAL5
74 ,COMP_HDC_CWK HRI_P_GRAND_TOTAL6
75 FROM
76 hri_dbi_cl_per_n_v vby
77 ,(' || l_wrkfc_fact_sql || ') tab
78 WHERE tab.vby_id = vby.id
79 AND &BIS_CURRENT_ASOF_DATE BETWEEN vby.effective_start_date
80 AND vby.effective_end_date
81 ' || l_security_clause;
82
83 x_custom_sql := l_SQLText;
84
85 END GET_KPI;
86 --
87 -- ***************************************************
88 -- * AK SQL For Workforce Activity By Manager Status *
89 -- * AK Region : HRI_P_WMV_WF_SUP *
90 -- ***************************************************
91 --
92 PROCEDURE get_sql(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL,
93 x_custom_sql OUT NOCOPY VARCHAR2,
94 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
95
96 l_sqltext VARCHAR2(32767);
97 l_security_clause VARCHAR2(4000);
98 l_custom_rec BIS_QUERY_ATTRIBUTES;
99
100 /* Parameter values */
101 l_parameter_rec hri_oltp_pmv_util_param.HRI_PMV_PARAM_REC_TYPE;
102 l_bind_tab hri_oltp_pmv_util_param.HRI_PMV_BIND_TAB_TYPE;
103
104 /* Pre-calculations */
105 l_tot_gain NUMBER;
106 l_tot_gain_hire NUMBER;
107 l_tot_gain_place NUMBER;
108 l_tot_gain_all NUMBER;
109 l_tot_gain_transfer_emp NUMBER;
110 l_tot_gain_transfer_cwk NUMBER;
111 l_tot_gain_transfer_all NUMBER;
112 l_tot_loss NUMBER;
113 l_tot_loss_term NUMBER;
114 l_tot_loss_place NUMBER;
115 l_tot_loss_all NUMBER;
116 l_tot_loss_transfer_emp NUMBER;
117 l_tot_loss_transfer_cwk NUMBER;
118 l_tot_loss_transfer_all NUMBER;
119 l_tot_net NUMBER;
120
121 /* Direct reports string */
122 l_direct_reports_string VARCHAR2(30);
123
124 /* To support selective drill across urls */
125 l_drill_to_function1 VARCHAR2(300);
126 l_drill_to_function2 VARCHAR2(300);
127 l_drill_to_function3 VARCHAR2(300);
128 l_drill_to_function4 VARCHAR2(300);
129 l_drill_to_function5 VARCHAR2(300);
130 l_drill_to_function6 VARCHAR2(300);
131 l_drill_url1 VARCHAR2(300);
132 l_drill_url2 VARCHAR2(300);
133 l_drill_url3 VARCHAR2(300);
134 l_drill_url4 VARCHAR2(300);
135 l_drill_url5 VARCHAR2(300);
136 l_drill_url6 VARCHAR2(300);
137 l_drill_url7 VARCHAR2(300);
138 l_drill_url8 VARCHAR2(300);
139
140 /* Dynamic SQL controls */
141 l_wrkfc_fact_params hri_bpl_fact_sup_wrkfc_sql.wrkfc_fact_param_type;
142 l_wrkfc_fact_sql VARCHAR2(10000);
143 l_wcnt_chg_fact_params hri_bpl_fact_sup_wcnt_chg_sql.wcnt_chg_fact_param_type;
144 l_wcnt_chg_fact_sql VARCHAR2(10000);
145
146 BEGIN
147
148 /* Initialize out parameters */
149 l_custom_rec := BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
150 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
151
152 /* Get common parameter values */
153 hri_oltp_pmv_util_param.get_parameters_from_table
154 (p_page_parameter_tbl => p_page_parameter_tbl,
155 p_parameter_rec => l_parameter_rec,
156 p_bind_tab => l_bind_tab);
157
158
159 /* use selective drill across feature */
160 l_drill_url1 := 'pFunctionName=HRI_P_WMV_WF_SUP&' ||
161 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
162 'VIEW_BY_NAME=VIEW_BY_ID&' ||
163 'pParamIds=Y';
164
165 l_drill_url2 := 'pFunctionName=HRI_P_WAC_HIR_SUP_DTL&' ||
166 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
167 'VIEW_BY_NAME=VIEW_BY_ID&' ||
168 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
169 'pParamIds=Y';
170
171 l_drill_url3 := 'pFunctionName=HRI_P_WAC_C_HIR_SUP_DTL&' ||
172 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
173 'VIEW_BY_NAME=VIEW_BY_ID&' ||
174 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
175 'pParamIds=Y';
176
177 l_drill_url4 := 'pFunctionName=HRI_P_WAC_WF_IN_SUP_DTL&' ||
178 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
179 'VIEW_BY_NAME=VIEW_BY_ID&' ||
180 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
181 'pParamIds=Y';
182
183 l_drill_url5 := 'pFunctionName=HRI_P_WAC_SEP_SUP_DTL&' ||
184 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
185 'VIEW_BY_NAME=VIEW_BY_ID&' ||
186 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
187 'pParamIds=Y';
188
189 l_drill_url6 := 'pFunctionName=HRI_P_WAC_C_SEP_SUP_DTL&' ||
190 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
191 'VIEW_BY_NAME=VIEW_BY_ID&' ||
192 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
193 'pParamIds=Y';
194
195 l_drill_url7 := 'pFunctionName=HRI_P_WAC_WF_OUT_SUP_DTL&' ||
196 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
197 'VIEW_BY_NAME=VIEW_BY_ID&' ||
198 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
199 'pParamIds=Y';
200
201 l_drill_url8 := 'pFunctionName=HRI_P_WMV_WF_SUP_DTL&' ||
202 'VIEW_BY=HRI_PERSON+HRI_PER_USRDR_H&' ||
203 'VIEW_BY_NAME=VIEW_BY_ID&' ||
204 'HRI_P_SUPH_RO_CA=HRI_P_SUPH_RO_CA&' ||
205 'pParamIds=Y';
206
207 /* Get security clause for Manager based security */
208 l_security_clause := hri_oltp_pmv_util_pkg.get_security_clause('MGR');
209
210 /* Set direct reports string */
211 l_direct_reports_string := hri_oltp_view_message.get_direct_reports_msg;
212
213 /* Get WMV Change totals for supervisor from cursor */
214
215
216 /* Totals For Employee Columns */
217 hri_bpl_dbi_calc_period.calc_sup_wcnt_chg
218 (p_supervisor_id => l_parameter_rec.peo_supervisor_id,
219 p_from_date => l_parameter_rec.time_curr_start_date,
220 p_to_date => l_parameter_rec.time_curr_end_date,
221 p_period_type => l_parameter_rec.page_period_type,
222 p_comparison_type => l_parameter_rec.time_comparison_type,
223 p_total_type => 'ROLLUP',
224 p_wkth_wktyp_sk_fk => 'EMP',
225 p_total_gain_hire => l_tot_gain_hire,
226 p_total_gain_transfer => l_tot_gain_transfer_emp,
227 p_total_loss_term => l_tot_loss_term,
228 p_total_loss_transfer => l_tot_loss_transfer_emp);
229
230 /* Totals Contingent Worker Columns */
231 hri_bpl_dbi_calc_period.calc_sup_wcnt_chg
232 (p_supervisor_id => l_parameter_rec.peo_supervisor_id,
233 p_from_date => l_parameter_rec.time_curr_start_date,
234 p_to_date => l_parameter_rec.time_curr_end_date,
235 p_period_type => l_parameter_rec.page_period_type,
236 p_comparison_type => l_parameter_rec.time_comparison_type,
237 p_total_type => 'ROLLUP',
238 p_wkth_wktyp_sk_fk => 'CWK',
239 p_total_gain_hire => l_tot_gain_place,
240 p_total_gain_transfer => l_tot_gain_transfer_cwk,
241 p_total_loss_term => l_tot_loss_place,
242 p_total_loss_transfer => l_tot_loss_transfer_cwk);
243
244
245 /* Set WMV Change dependent totals */
246 l_tot_gain_transfer_all := l_tot_gain_transfer_emp + l_tot_gain_transfer_cwk;
247 l_tot_loss_transfer_all := l_tot_loss_transfer_emp + l_tot_loss_transfer_cwk;
248 l_tot_gain_all := l_tot_gain_hire + l_tot_gain_place;
249 l_tot_loss_all := l_tot_loss_term + l_tot_loss_place;
250
251 l_tot_gain := l_tot_gain_all + l_tot_gain_transfer_all;
252 l_tot_loss := l_tot_loss_all + l_tot_loss_transfer_all;
253 l_tot_net := l_tot_gain - l_tot_loss;
254
255 /* Set the dynamic order by from the dimension metadata */
256 l_parameter_rec.order_by := hri_oltp_pmv_util_pkg.set_default_order_by
257 (p_order_by_clause => l_parameter_rec.order_by);
258
259
260 /* Currently Using Standalone query */
261
262 /* Get SQL for workforce fact */
263 l_wrkfc_fact_params.bind_format := 'PMV';
264 l_wrkfc_fact_params.include_comp := 'Y';
265 l_wrkfc_fact_params.include_hdc := 'Y';
266 l_wrkfc_fact_params.include_start := 'Y';
267 l_wrkfc_fact_sql := hri_bpl_fact_sup_wrkfc_sql.get_sql
268 (p_parameter_rec => l_parameter_rec,
269 p_bind_tab => l_bind_tab,
270 p_wrkfc_params => l_wrkfc_fact_params,
271 p_calling_module => 'HRI_OLTP_PMV_WMV_WF_SUP.GET_SQL2');
272
273 /* Get SQL for workforce changes fact */
274 l_wcnt_chg_fact_params.bind_format := 'PMV';
275 l_wcnt_chg_fact_params.include_hire := 'Y';
276 l_wcnt_chg_fact_params.include_trin := 'Y';
277 l_wcnt_chg_fact_params.include_trout := 'Y';
278 l_wcnt_chg_fact_params.include_term := 'Y';
279 l_wcnt_chg_fact_params.bucket_dim := 'HRI_PRSNTYP+HRI_WKTH_WKTYP';
280 l_wcnt_chg_fact_sql := hri_bpl_fact_sup_wcnt_chg_sql.get_sql
281 (p_parameter_rec => l_parameter_rec,
282 p_bind_tab => l_bind_tab,
283 p_wcnt_chg_params => l_wcnt_chg_fact_params,
284 p_calling_module => 'HRI_OLTP_PMV_WMV_WF_SUP.GET_SQL');
285
286 /* Build query */
287 l_sqltext :='SELECT -- Workforce Activity by Manager Status
288 tots.id VIEWBYID
289 ,tots.value VIEWBY
290 ,tots.current_wmv_start HRI_P_MEASURE1
291 ,tots.wmv_gain_hire HRI_P_MEASURE2
292 ,'''|| l_drill_url2 ||''' HRI_P_DRILL_URL2
293 ,tots.wmv_gain_place HRI_P_MEASURE3
294 ,'''|| l_drill_url3 ||''' HRI_P_DRILL_URL3
295 ,tots.wmv_gain_transfer HRI_P_MEASURE4
296 ,'''|| l_drill_url4 ||''' HRI_P_DRILL_URL4
297 ,tots.wmv_loss_term HRI_P_MEASURE5
298 ,'''|| l_drill_url5 ||''' HRI_P_DRILL_URL5
299 ,tots.wmv_loss_end_place HRI_P_MEASURE6
300 ,'''|| l_drill_url6 ||''' HRI_P_DRILL_URL6
301 ,tots.wmv_loss_transfer HRI_P_MEASURE7
302 ,'''|| l_drill_url7 ||''' HRI_P_DRILL_URL7
303 ,tots.current_wmv_end HRI_P_MEASURE8
304 ,tots.wmv_net HRI_P_MEASURE9
305 ,DECODE(tots.previous_wmv_end,
306 0, DECODE(tots.current_wmv_end,0,0,100),
307 (tots.current_wmv_end - tots.previous_wmv_end) * 100 /
308 tots.previous_wmv_end) HRI_P_MEASURE10
309 ,tots.curr_total_hdc_start HRI_P_GRAND_TOTAL1
310 ,:HRI_TOT_GAIN_HIRE HRI_P_GRAND_TOTAL2
311 ,:HRI_TOT_GAIN_PLACE HRI_P_GRAND_TOTAL3
312 ,:HRI_TOT_GAIN_TRANSFER HRI_P_GRAND_TOTAL4
313 ,:HRI_TOT_LOSS_TERM HRI_P_GRAND_TOTAL5
314 ,:HRI_TOT_LOSS_PLACE HRI_P_GRAND_TOTAL6
315 ,:HRI_TOT_LOSS_TRANSFER HRI_P_GRAND_TOTAL7
316 ,tots.curr_total_hdc_end HRI_P_GRAND_TOTAL8
317 ,:HRI_TOT_NET_GAIN_LOSS HRI_P_GRAND_TOTAL9
318 ,DECODE(tots.comp_total_hdc_end,
319 0, DECODE(tots.curr_total_hdc_end , 0, 0, 100),
320 (tots.curr_total_hdc_end - tots.comp_total_hdc_end) * 100 /
321 tots.comp_total_hdc_end) HRI_P_GRAND_TOTAL10
322 ,tots.order_by HRI_P_ORDER_BY_1
323 ,tots.suph_rollup_flag HRI_P_SUPH_RO_CA
324 ,DECODE(tots.suph_rollup_flag,''Y'','''|| l_drill_url1 ||'''
325 ,''N'','''|| l_drill_url8 ||''')
326 HRI_P_DRILL_URL8
327 FROM
328 (SELECT
329 per.id
330 ,DECODE(wmv.direct_ind,
331 1, ''' || l_direct_reports_string || ''',
332 per.value) value
333 ,to_char(wmv.direct_ind) || per.order_by order_by
334 ,NVL(chg.Curr_hire_hdc + chg.curr_transfer_in_hdc,0) wmv_gain
335 ,NVL(chg.curr_hire_hdc_emp,0) wmv_gain_hire
336 ,NVL(chg.curr_hire_hdc_cwk,0) wmv_gain_place
337 ,NVL(chg.curr_transfer_in_hdc,0) wmv_gain_transfer
338 ,NVL(chg.curr_termination_hdc + curr_transfer_out_hdc,0)
339 wmv_loss
340 ,NVL(chg.curr_termination_hdc_emp,0) wmv_loss_term
341 ,NVL(chg.curr_termination_hdc_cwk,0) wmv_loss_end_place
342 ,NVL(chg.curr_transfer_out_hdc,0) wmv_loss_transfer
343 ,NVL((chg.curr_hire_hdc + chg.curr_transfer_in_hdc) -
344 (chg.curr_termination_hdc + chg.curr_transfer_out_hdc), 0)
345 wmv_net
346 ,wmv.curr_hdc_start current_wmv_start
347 ,wmv.curr_hdc_end current_wmv_end
348 ,wmv.comp_hdc_start previous_wmv_start
349 ,wmv.comp_hdc_end previous_wmv_end
350 ,SUM(wmv.curr_hdc_end) OVER () curr_total_hdc_end
351 ,SUM(wmv.curr_total_hdc_start) OVER () curr_total_hdc_start
352 ,SUM(wmv.comp_total_hdc_end) OVER () comp_total_hdc_end
353 ,DECODE(wmv.direct_ind,
354 1, ''N'',
355 '''') suph_rollup_flag
356 FROM
357 hri_dbi_cl_per_n_v per
358 ,('|| l_wrkfc_fact_sql ||') wmv
359 ,('|| l_wcnt_chg_fact_sql ||') chg
360 WHERE wmv.vby_id = chg.vby_id (+)
361 AND wmv.vby_id = per.id
362 AND &AS_OF_DATE BETWEEN per.effective_start_date
363 AND per.effective_end_date
364 AND (wmv.curr_hdc_end > 0
365 OR chg.curr_hire_hdc > 0
366 or chg.curr_transfer_in_hdc > 0
367 or chg.curr_transfer_out_hdc > 0
368 or chg.curr_termination_hdc > 0
369 or wmv.direct_ind = 1)
370 ) tots
371 WHERE 1 = 1
372 ' || l_security_clause || '
373 ORDER BY ' || l_parameter_rec.order_by;
374
375 x_custom_sql := l_SQLText;
376
377 /* Total not yet code for */
378
379 l_custom_rec.attribute_name := ':HRI_TOT_GAIN_HIRE';
380 l_custom_rec.attribute_value := l_tot_gain_hire;
381 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
382 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
383 x_custom_output.extend;
384 x_custom_output(1) := l_custom_rec;
385
386 l_custom_rec.attribute_name := ':HRI_TOT_GAIN_PLACE';
387 l_custom_rec.attribute_value := l_tot_gain_place;
388 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
389 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
390 x_custom_output.extend;
391 x_custom_output(2) := l_custom_rec;
392
393 l_custom_rec.attribute_name := ':HRI_TOT_GAIN_TRANSFER';
394 l_custom_rec.attribute_value := l_tot_gain_transfer_all;
395 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
396 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
397 x_custom_output.extend;
398 x_custom_output(3) := l_custom_rec;
399
400 l_custom_rec.attribute_name := ':HRI_TOT_LOSS_TERM';
401 l_custom_rec.attribute_value := l_tot_loss_term;
402 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
403 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
404 x_custom_output.extend;
405 x_custom_output(4) := l_custom_rec;
406
407 l_custom_rec.attribute_name := ':HRI_TOT_LOSS_PLACE';
408 l_custom_rec.attribute_value := l_tot_loss_place;
409 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
410 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
411 x_custom_output.extend;
412 x_custom_output(5) := l_custom_rec;
413
414 l_custom_rec.attribute_name := ':HRI_TOT_LOSS_TRANSFER';
415 l_custom_rec.attribute_value := l_tot_loss_transfer_all;
416 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
417 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
418 x_custom_output.extend;
419 x_custom_output(6) := l_custom_rec;
420
421 l_custom_rec.attribute_name := ':HRI_TOT_NET_GAIN_LOSS';
422 l_custom_rec.attribute_value := l_tot_net;
423 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
424 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.numeric_bind;
425 x_custom_output.extend;
426 x_custom_output(7) := l_custom_rec;
427
428 END get_sql;
429
430 END HRI_OLTP_PMV_WMV_WF_SUP;