[Home] [Help]
PACKAGE BODY: APPS.PJI_PMV_UTLZ
Source
1 PACKAGE BODY PJI_PMV_UTLZ AS
2 /* $Header: PJIRR02B.pls 120.2 2005/12/07 20:53:36 appldev ship $ */
3
4 PROCEDURE Get_SQL_PJI_REP_UAP1(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
5 , x_PMV_Sql OUT NOCOPY VARCHAR2
6 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
7 IS
8 BEGIN
9
10 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
11 ,P_SELECT_LIST =>
12 ' FACT.BILL_HOURS_PERCENT "PJI_REP_MSR_3",
13 FACT.CHANGE_PERCENT_2 "PJI_REP_MSR_20",
14 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_2",
15 FACT.CHANGE_PERCENT_1 "PJI_REP_MSR_10",
16 FACT.RES_HOURS_PERCENT "PJI_REP_MSR_4",
17 FACT.CHANGE_PERCENT_3 "PJI_REP_MSR_21",
18 FACT.ACTUAL_UTIL_HOURS "PJI_REP_MSR_5",
19 FACT.ACTUAL_DENOMINATOR "PJI_REP_MSR_6",
20 FACT.RESOURCE_HOURS "PJI_REP_MSR_7",
21 FACT.TOTAL_RESOURCE_HOURS "PJI_REP_MSR_8",
22 FACT.BILLABLE_HOURS "PJI_REP_MSR_9",
23 FACT.PRIOR_ACTUAL_UTIL_HOURS "PJI_REP_MSR_11",
24 FACT.PRIOR_ACTUAL_DENOMINATOR "PJI_REP_MSR_12",
25 FACT.PRIOR_RESOURCE_HOURS "PJI_REP_MSR_13",
26 FACT.PRIOR_TOTAL_RESOURCE_HOURS "PJI_REP_MSR_14",
27 FACT.PRIOR_BILLABLE_HOURS "PJI_REP_MSR_15",
28 FACT.PRIOR_RES_HOURS_PERCENT "PJI_REP_MSR_16",
29 FACT.PRIOR_ACT_UTIL_PERCENT "PJI_REP_MSR_17",
30 FACT.PRIOR_BILL_HOURS_PERCENT "PJI_REP_MSR_18",
31 FACT.BILL_HOURS_PERCENT "PJI_REP_MSR_19",
32 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_22",
33 FACT.RES_HOURS_PERCENT "PJI_REP_MSR_23",
34 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
35 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
36 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
37 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
38 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_5",
39 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_6",
40 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_7",
41 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_8",
42 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_9",
43 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_12",
44 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_14",
45 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_16" '
46 ,P_SQL_STATEMENT => x_PMV_Sql
47 ,P_PMV_OUTPUT => x_PMV_Output,
48 P_REGION_CODE => 'PJI_REP_UAP1',
49 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U1',
50 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
51 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
52 '<<AS_OF_DATE>>, ' ||
53 '<<PERIOD_TYPE>>, ' ||
54 '<<TIME_COMPARISON_TYPE>>, ' ||
55 '<<VIEW_BY>>');
56 END Get_SQL_PJI_REP_UAP1;
57
58
59 PROCEDURE Get_SQL_PJI_REP_U1(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
60 , x_PMV_Sql OUT NOCOPY VARCHAR2
61 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
62 IS
63 BEGIN
64
65 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
66 ,P_SELECT_LIST =>
67 ' FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_1",
68 FACT.CHANGE_PERCENT_1 "PJI_REP_MSR_19",
69 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_2",
70 FACT.SCH_VAR_PERCENT "PJI_REP_MSR_10",
71 FACT.BILL_HOURS_PERCENT "PJI_REP_MSR_3",
72 FACT.CHANGE_PERCENT_2 "PJI_REP_MSR_20",
73 FACT.MISSING_HOURS "PJI_REP_MSR_4",
74 FACT.MISSING_HOURS_PERCENT "PJI_REP_MSR_21",
75 FACT.ACTUAL_UTIL_HOURS "PJI_REP_MSR_5",
76 FACT.ACTUAL_DENOMINATOR "PJI_REP_MSR_6",
77 FACT.SCHEDULED_UTIL_HOURS "PJI_REP_MSR_7",
78 FACT.SCHEDULED_DENOMINATOR "PJI_REP_MSR_8",
79 FACT.BILLABLE_HOURS "PJI_REP_MSR_9",
80 FACT.PRIOR_ACTUAL_UTIL_HOURS "PJI_REP_MSR_11",
81 FACT.PRIOR_ACTUAL_DENOMINATOR "PJI_REP_MSR_12",
82 FACT.PRIOR_SCH_UTIL_HOURS "PJI_REP_MSR_13",
83 FACT.PRIOR_SCHEDULED_DENOMINATOR "PJI_REP_MSR_14",
84 FACT.PRIOR_BILLABLE_HOURS "PJI_REP_MSR_15",
85 FACT.PRIOR_MISSING_HOURS "PJI_REP_MSR_16",
86 FACT.PRIOR_ACT_UTIL_PERCENT "PJI_REP_MSR_17",
87 FACT.PRIOR_BILL_HOURS_PERCENT "PJI_REP_MSR_18",
88 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_23",
89 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_24",
90 FACT.BILL_HOURS_PERCENT "PJI_REP_MSR_25",
91 FACT.MISSING_HOURS "PJI_REP_MSR_26",
92 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_1",
93 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_2",
94 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_3",
95 FACT.PJI_REP_TOTAL_12 "PJI_REP_TOTAL_4",
96 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_5",
97 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_6",
98 FACT.PJI_REP_TOTAL_13 "PJI_REP_TOTAL_7",
99 FACT.PJI_REP_TOTAL_11 "PJI_REP_TOTAL_8" '
100 ,P_SQL_STATEMENT => x_PMV_Sql
101 ,P_PMV_OUTPUT => x_PMV_Output,
102 P_REGION_CODE => 'PJI_REP_U1',
103 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U1',
104 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
105 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
106 '<<AS_OF_DATE>>, ' ||
107 '<<PERIOD_TYPE>>, ' ||
108 '<<TIME_COMPARISON_TYPE>>, ' ||
109 '<<VIEW_BY>>,'||
110 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
111 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
112 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>');
113 END Get_SQL_PJI_REP_U1;
114
115
116 PROCEDURE Get_SQL_PJI_REP_U2(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
117 , x_PMV_Sql OUT NOCOPY VARCHAR2
118 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
119 IS
120 BEGIN
121
122 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
123 ,P_SELECT_LIST =>
124 ' FACT.ACTUAL_CAPACITY_HOURS "PJI_REP_MSR_1",
125 FACT.MISSING_HOURS "PJI_REP_MSR_2",
126 FACT.ACTUAL_UTILIZATION_HOURS "PJI_REP_MSR_3",
127 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_4",
128 FACT.BILL_UTIL_PERCENT "PJI_REP_MSR_6",
129 FACT.NONBILL_UTIL_PERCENT "PJI_REP_MSR_7",
130 FACT.TRAINING_PERCENT "PJI_REP_MSR_20",
131 FACT.SCHEDULED_CAPACITY_HOURS "PJI_REP_MSR_5",
132 FACT.CONF_SCHEDULED_HOURS "PJI_REP_MSR_8",
133 FACT.PROV_SCHEDULED_HOURS "PJI_REP_MSR_9",
134 FACT.SCHEDULED_UTILIZATION_HOURS "PJI_REP_MSR_10",
135 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_17",
136 FACT.PRIOR_UTIL_PERCENT "PJI_REP_MSR_18",
137 FACT.BILLABLE_HOURS "PJI_REP_MSR_11",
138 FACT.NONBILLABLE_HOURS "PJI_REP_MSR_12",
139 FACT.TRAINING_HOURS "PJI_REP_MSR_13",
140 FACT.PRIOR_ACTUAL_UTIL_HOURS "PJI_REP_MSR_14",
141 FACT.PRIOR_ACTUAL_DENOMINATOR "PJI_REP_MSR_15",
142 FACT.SCHEDULED_DENOMINATOR "PJI_REP_MSR_19",
143 FACT.ACTUAL_DENOMINATOR "PJI_REP_MSR_23",
144 FACT.PRIOR_UTIL_PERCENT "PJI_REP_MSR_24",
145 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_25",
146 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_26" '
147 ,P_SQL_STATEMENT => x_PMV_Sql
148 ,P_PMV_OUTPUT => x_PMV_Output,
149 P_REGION_CODE => 'PJI_REP_U2',
150 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U2',
151 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
152 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
153 '<<AS_OF_DATE>>, ' ||
154 '<<PERIOD_TYPE>>, ' ||
155 '<<VIEW_BY>>');
156 END Get_SQL_PJI_REP_U2;
157
158
159 PROCEDURE Get_SQL_PJI_REP_U3(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
160 , x_PMV_Sql OUT NOCOPY VARCHAR2
161 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
162 IS
163 BEGIN
164
165 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
166 ,P_SELECT_LIST =>
167 ' FACT.ACTUAL_HOURS "PJI_REP_MSR_11",
168 FACT.CAPACITY_HOURS "PJI_REP_MSR_16",
169 FACT.MISSING_HOURS "PJI_REP_MSR_15",
170 FACT.UTILIZATION_HOURS "PJI_REP_MSR_1",
171 FACT.UTIL_PERCENT "PJI_REP_MSR_2",
172 FACT.BILL_PERCENT "PJI_REP_MSR_3",
173 FACT.NON_BILL_PERCENT "PJI_REP_MSR_4",
174 FACT.TRAINING_PERCENT "PJI_REP_MSR_5",
175 FACT.PRIOR_ACTUAL_HOURS "PJI_REP_MSR_12",
176 FACT.PRIOR_CAPACITY_HOURS "PJI_REP_MSR_19",
177 FACT.PRIOR_UTIL_PERCENT "PJI_REP_MSR_20",
178 FACT.PRIOR_BILL_PERCENT "PJI_REP_MSR_21",
179 FACT.PRIOR_NON_BILL_PERCENT "PJI_REP_MSR_22",
180 FACT.PRIOR_TRAINING_PERCENT "PJI_REP_MSR_23",
181 FACT.PRIOR_BILL_PERCENT "PJI_REP_MSR_10",
182 FACT.BILL_PERCENT "PJI_REP_MSR_30",
183 FACT.PRIOR_NON_BILL_PERCENT "PJI_REP_MSR_8",
184 FACT.NON_BILL_PERCENT "PJI_REP_MSR_9",
185 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
186 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
187 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
188 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
189 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_5",
190 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_6",
191 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_7",
192 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_8",
193 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_9",
194 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_10",
195 FACT.PJI_REP_TOTAL_11 "PJI_REP_TOTAL_11",
196 FACT.PJI_REP_TOTAL_12 "PJI_REP_TOTAL_12",
197 FACT.PJI_REP_TOTAL_13 "PJI_REP_TOTAL_13",
198 FACT.PJI_REP_TOTAL_14 "PJI_REP_TOTAL_14" '
199 ,P_SQL_STATEMENT => x_PMV_Sql
200 ,P_PMV_OUTPUT => x_PMV_Output,
201 P_REGION_CODE => 'PJI_REP_U3',
202 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U3',
203 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
204 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
205 '<<AS_OF_DATE>>, ' ||
206 '<<PERIOD_TYPE>>, ' ||
207 '<<VIEW_BY>>,'||
208 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
209 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
210 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>');
211 END Get_SQL_PJI_REP_U3;
212
213
214 PROCEDURE Get_SQL_PJI_REP_U4(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
215 , x_PMV_Sql OUT NOCOPY VARCHAR2
216 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
217 IS
218 l_PMV_Rec BIS_QUERY_ATTRIBUTES;
219 BEGIN
220
221 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
222 ,P_SELECT_LIST =>
223 ' FACT.SCHEDULED_HOURS "PJI_REP_MSR_17",
224 FACT.SCHEDULED_CAPACITY_HOURS "PJI_REP_MSR_18",
225 FACT.SCHEDULED_UTIL_HOURS "PJI_REP_MSR_1",
226 FACT.PROVISIONAL_HOURS "PJI_REP_MSR_2",
227 FACT.PRIOR_SCHEDULED_HOURS "PJI_REP_MSR_3",
228 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_4",
229 FACT.BILL_UTIL_PERCENT "PJI_REP_MSR_7",
230 FACT.NONBILL_UTIL_PERCENT "PJI_REP_MSR_5",
231 FACT.UNASSIGNED_PERCENT "PJI_REP_MSR_6",
232 FACT.TRAINING_PERCENT "PJI_REP_MSR_13",
233 FACT.PROV_BILL_PERCENT "PJI_REP_MSR_11",
234 FACT.PROV_NONBILL_PERCENT "PJI_REP_MSR_12",
235 FACT.PRIOR_SCH_UTIL_PERCENT "PJI_REP_MSR_14",
236 FACT.PRIOR_BILL_UTIL_PERCENT "PJI_REP_MSR_15",
237 FACT.PRIOR_NONBILL_UTIL_PERCENT "PJI_REP_MSR_16",
238 FACT.PRIOR_BILL_UTIL_PERCENT "PJI_MSR2",
239 FACT.BILL_UTIL_PERCENT "PJI_REP_MSR_29",
240 FACT.PRIOR_NONBILL_UTIL_PERCENT "PJI_MSR3",
241 FACT.NONBILL_UTIL_PERCENT "PJI_MSR1",
242 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
243 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
244 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
245 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
246 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_5",
247 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_6",
248 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_7",
249 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_8",
250 FACT.PJI_REP_TOTAL_11 "PJI_REP_TOTAL_9",
251 FACT.PJI_REP_TOTAL_12 "PJI_REP_TOTAL_10",
252 FACT.PJI_REP_TOTAL_13 "PJI_REP_TOTAL_11",
253 FACT.PJI_REP_TOTAL_14 "PJI_REP_TOTAL_12",
254 FACT.PJI_REP_TOTAL_15 "PJI_REP_TOTAL_13",
255 FACT.PJI_REP_TOTAL_16 "PJI_REP_TOTAL_14",
256 FACT.PJI_REP_TOTAL_17 "PJI_REP_TOTAL_15" '
257 ,P_SQL_STATEMENT => x_PMV_Sql
258 ,P_PMV_OUTPUT => x_PMV_Output,
259 P_REGION_CODE => 'PJI_REP_U4',
260 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U4',
261 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
262 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
263 '<<AS_OF_DATE>>, ' ||
264 '<<PERIOD_TYPE>>, ' ||
265 '<<VIEW_BY>>,'||
266 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
267 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
268 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>');
269
270 l_PMV_Rec:=BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
271 l_PMV_Rec.attribute_name:=':PJI_EXTRA_BND_01';
272 l_PMV_Rec.attribute_value:='FALSE'; -- replace with the literal being passed.
273 l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
274 l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
275
276 x_PMV_Output.EXTEND();
277 x_PMV_Output(x_PMV_Output.COUNT):=l_PMV_Rec;
278
279 END Get_SQL_PJI_REP_U4;
280
281
282 PROCEDURE Get_SQL_PJI_REP_U5(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
283 , x_PMV_Sql OUT NOCOPY VARCHAR2
284 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
285 IS
286 l_PMV_Rec BIS_QUERY_ATTRIBUTES;
287 BEGIN
288
289 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
290 ,P_SELECT_LIST =>
291 ' FACT.EXPECTED_HOURS "PJI_REP_MSR_17",
292 FACT.EXPECTED_CAPACITY_HOURS "PJI_REP_MSR_18",
293 FACT.EXP_ACT_UTIL_PERCENT "PJI_REP_MSR_1",
294 FACT.EXP_SCH_UTIL_PERCENT "PJI_REP_MSR_2",
295 FACT.EXP_UTIL_PERCENT "PJI_REP_MSR_3",
296 FACT.PROV_SCH_UTIL_PERCENT "PJI_REP_MSR_4",
297 FACT.EXP_TOTAL_UTIL_PERCENT "PJI_REP_MSR_6",
298 FACT.PRIOR_ACT_UTIL_PERCENT "PJI_REP_MSR_7",
299 FACT.EXP_UTIL_PERCENT "PJI_REP_MSR_23",
300 FACT.EXP_TOTAL_UTIL_PERCENT "PJI_REP_MSR_24",
301 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_1",
302 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_2",
303 FACT.PJI_REP_TOTAL_18 "PJI_REP_TOTAL_3",
304 FACT.PJI_REP_TOTAL_19 "PJI_REP_TOTAL_4",
305 FACT.PJI_REP_TOTAL_20 "PJI_REP_TOTAL_5",
306 FACT.PJI_REP_TOTAL_21 "PJI_REP_TOTAL_6",
307 FACT.PJI_REP_TOTAL_22 "PJI_REP_TOTAL_7",
308 FACT.PJI_REP_TOTAL_23 "PJI_REP_TOTAL_8" '
309 ,P_SQL_STATEMENT => x_PMV_Sql
310 ,P_PMV_OUTPUT => x_PMV_Output,
311 P_REGION_CODE => 'PJI_REP_U5',
312 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_U4',
313 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
314 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
315 '<<AS_OF_DATE>>, ' ||
316 '<<PERIOD_TYPE>>, ' ||
317 '<<VIEW_BY>>,'||
318 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
319 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
320 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>');
321
322 l_PMV_Rec:=BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
323 l_PMV_Rec.attribute_name:=':PJI_EXTRA_BND_01';
324 l_PMV_Rec.attribute_value:='TRUE'; -- replace with the literal being passed.
325 l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
326 l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
327
328 x_PMV_Output.EXTEND();
329 x_PMV_Output(x_PMV_Output.COUNT):=l_PMV_Rec;
330
331 END Get_SQL_PJI_REP_U5;
332
333
334 FUNCTION PLSQLDriver_U1 (
335 p_operating_unit IN VARCHAR2 DEFAULT NULL,
336 p_organization IN VARCHAR2,
337 p_as_of_date IN NUMBER,
338 p_period_type IN VARCHAR2,
339 p_comparator_type IN VARCHAR2,
340 p_view_by IN VARCHAR2,
341 p_utilization_category IN VARCHAR2 DEFAULT NULL,
342 p_work_type IN VARCHAR2 DEFAULT NULL,
343 p_job_level IN VARCHAR2 DEFAULT NULL
344 ) RETURN PJI_REP_U1_TBL
345 IS
346 PRAGMA AUTONOMOUS_TRANSACTION;
347 l_u1_tbl PJI_REP_U1_TBL:=PJI_REP_U1_TBL();
348 l_util_category_flag VARCHAR2(1);
349 l_job_flag VARCHAR2(1);
350 l_denominator VARCHAR2(25);
351 l_labor_unit VARCHAR2(40);
352 l_sequence NUMBER;
353 l_actual_capacity_hours NUMBER := 0;
354 l_missing_hours NUMBER := 0;
355 l_actual_util_hours NUMBER := 0;
356 l_billable_hours NUMBER := 0;
357 l_scheduled_util_hours NUMBER := 0;
358 l_scheduled_capacity_hours NUMBER := 0;
359 l_resource_hours NUMBER := 0;
360 l_total_resource_hours NUMBER := 0;
361 l_actual_denominator NUMBER := 0;
362 l_scheduled_denominator NUMBER := 0;
363 l_prior_actual_capacity_hours NUMBER := 0;
364 l_prior_missing_hours NUMBER := 0;
365 l_prior_actual_util_hours NUMBER := 0;
366 l_prior_billable_hours NUMBER := 0;
367 l_prior_sch_util_hours NUMBER := 0;
368 l_prior_sch_capacity_hours NUMBER := 0;
369 l_prior_resource_hours NUMBER := 0;
370 l_prior_total_resource_hours NUMBER := 0;
371 l_prior_actual_denominator NUMBER := 0;
372 l_prior_scheduled_denominator NUMBER := 0;
373 l_Top_Org_Index NUMBER;
374 l_Top_Organization_Name VARCHAR2(240);
375
376 BEGIN
377 PJI_PMV_ENGINE.Convert_Operating_Unit (p_operating_unit, p_view_by);
378 PJI_PMV_ENGINE.Convert_Time (p_as_of_date, p_period_type, p_view_by, 'Y', 'DBI', p_comparator_type, 'N');
379 l_util_category_flag := PJI_PMV_ENGINE.Convert_Util_Category(p_work_type, p_utilization_category, p_view_by);
380 l_job_flag := PJI_PMV_ENGINE.Convert_Job_Level(null, p_job_level, p_view_by);
381
382 /*
383 * Get Utilization percentage denominator profile value
384 */
385 BEGIN
386 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
387 INTO l_denominator
388 from dual;
389
390 EXCEPTION WHEN NO_DATA_FOUND THEN
391 l_denominator := 'CAPACITY';
392 END;
393
394 /*
395 * Get report labor unit
396 */
397 BEGIN
398 select report_labor_units
399 into l_labor_unit
400 from pji_system_settings;
401
402 EXCEPTION WHEN OTHERS THEN
403 l_labor_unit := null;
404 END;
405
406 SELECT seq
407 INTO l_sequence
408 FROM pji_mt_buckets
409 WHERE bucket_set_code = 'PJI_RESOURCE_AVAILABILITY'
410 AND default_flag = 'Y';
411
412 IF l_util_category_flag = 'N' AND l_job_flag = 'N' THEN
413
414 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
415 , P_VIEW_BY => p_view_by
416 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
417
418 SELECT PJI_REP_U1(org_id,
419 organization_id,
420 time_id,
421 time_key,
422 util_category_id,
423 work_type_id,
424 job_level_id,
425 sum(actual_capacity_hours),
426 sum(missing_hours),
427 sum(actual_util_hours),
428 sum(billable_hours),
429 sum(scheduled_util_hours),
430 sum(scheduled_capacity_hours),
431 sum(resource_hours),
432 sum(total_resource_hours),
433 sum(decode(l_denominator, 'CAPACITY', actual_capacity_hours, actual_hours)),
434 sum(decode(l_denominator, 'CAPACITY', scheduled_capacity_hours, actual_hours)),
435 sum(prior_actual_capacity_hours),
436 sum(prior_missing_hours),
437 sum(prior_actual_util_hours),
438 sum(prior_billable_hours),
439 sum(prior_sch_util_hours),
440 sum(prior_sch_capacity_hours),
441 sum(prior_resource_hours),
442 sum(prior_total_resource_hours),
443 sum(decode(l_denominator, 'CAPACITY', prior_actual_capacity_hours, prior_actual_hours)),
444 sum(decode(l_denominator, 'CAPACITY', prior_sch_capacity_hours, prior_actual_hours)),
445 null,null,null,null,null,null,
446 null,null,null,null,null,null,
447 null,null,null,null,null,null,
448 null,null,null,null,null,null,null
449 )
450 BULK COLLECT INTO l_u1_tbl
451 FROM ( /* Bug 3515594 */
452 SELECT /*+ ORDERED */
453 hou.name org_id,
454 horg.name organization_id,
455 time.name time_id,
456 DECODE(p_view_by, 'TM', time.id, -1) time_key,
457 '-1' util_category_id,
458 '-1' work_type_id,
459 '-1' job_level_id,
460 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_capacity_hours,
461 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) missing_hours,
462 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
463 actual_util_hours,
464 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
465 billable_hours,
466 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
467 scheduled_util_hours,
468 (capacity_hrs - reduce_capacity_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
469 scheduled_capacity_hours,
470 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
471 actual_hours,
472 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
473 scheduled_hours,
474 DECODE (l_sequence, 1, available_hrs_bkt1_s,
475 2, available_hrs_bkt2_s,
476 3, available_hrs_bkt3_s,
477 4, available_hrs_bkt4_s,
478 5, available_hrs_bkt5_s)
479 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
480 resource_hours,
481 capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
482 total_resource_hours,
483 0 prior_actual_capacity_hours,
484 0 prior_missing_hours,
485 0 prior_actual_util_hours,
486 0 prior_billable_hours,
487 0 prior_sch_util_hours,
488 0 prior_sch_capacity_hours,
489 0 prior_actual_hours,
490 0 prior_scheduled_hours,
491 0 prior_resource_hours,
492 0 prior_total_resource_hours
493 FROM PJI_PMV_ORGZ_DIM_TMP horg,
494 PJI_PMV_TIME_DIM_TMP time,
495 PJI_RM_ORGO_F_MV fct,
496 PJI_PMV_ORG_DIM_TMP hou,
497 PA_IMPLEMENTATIONS_ALL imp
498 WHERE fct.expenditure_org_id = hou.id
499 AND fct.expenditure_organization_id = horg.id
500 AND fct.time_id = time.id
501 AND fct.period_type_id = time.period_type
502 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
503 AND time.id is not null
504 AND hou.id = imp.org_id
505 UNION ALL
506 /* Bug 3515594 */
507 SELECT /*+ ORDERED */
508 hou.name org_id,
509 horg.name organization_id,
510 time.name time_id,
511 DECODE(p_view_by, 'TM', time.id, -1) time_key,
512 '-1' util_category_id,
513 '-1' work_type_id,
514 '-1' job_level_id,
515 0 actual_capacity_hours,
516 0 missing_hours,
517 0 actual_util_hours,
518 0 billable_hours,
519 0 scheduled_util_hours,
520 0 scheduled_capacity_hours,
521 0 actual_hours,
522 0 scheduled_hours,
523 0 resource_hours,
524 0 total_resource_hours,
525 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
526 prior_actual_capacity_hours,
527 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
528 prior_missing_hours,
529 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
530 prior_actual_util_hours,
531 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
532 prior_billable_hours,
533 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
534 prior_sch_util_hours,
535 (capacity_hrs - reduce_capacity_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
536 prior_sch_capacity_hours,
537 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
538 prior_actual_hours,
539 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
540 prior_scheduled_hours,
541 DECODE (l_sequence, 1, available_hrs_bkt1_s,
542 2, available_hrs_bkt2_s,
543 3, available_hrs_bkt3_s,
544 4, available_hrs_bkt4_s,
545 5, available_hrs_bkt5_s)
546 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
547 prior_resource_hours,
548 capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
549 prior_total_resource_hours
550 FROM PJI_PMV_ORGZ_DIM_TMP horg,
551 PJI_PMV_TCMP_DIM_TMP time,
552 PJI_RM_ORGO_F_MV fct,
553 PJI_PMV_ORG_DIM_TMP hou,
554 PA_IMPLEMENTATIONS_ALL imp
555 WHERE fct.expenditure_org_id = hou.id
556 AND fct.expenditure_organization_id = horg.id
557 AND fct.time_id = time.id
558 AND fct.period_type_id = time.period_type
559 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
560 AND hou.id = imp.org_id
561 UNION ALL
562 SELECT '-1' org_id,
563 name organization_id,
564 '-1' time_id,
565 -1 time_key,
566 '-1' util_category_id,
567 '-1' work_type_id,
568 '-1' job_level_id,
569 0 actual_capacity_hours,
570 0 missing_hours,
571 0 actual_util_hours,
572 0 billable_hours,
573 0 scheduled_util_hours,
574 0 scheduled_capacity_hours,
575 0 actual_hours,
576 0 scheduled_hours,
577 0 resource_hours,
578 0 total_resource_hours,
579 0 prior_actual_capacity_hours,
580 0 prior_missing_hours,
581 0 prior_actual_util_hours,
582 0 prior_billable_hours,
583 0 prior_sch_util_hours,
584 0 prior_sch_capacity_hours,
585 0 prior_actual_hours,
586 0 prior_scheduled_hours,
587 0 prior_resource_hours,
588 0 prior_total_resource_hours
589 FROM PJI_PMV_ORGZ_DIM_TMP
590 WHERE name <> '-1'
591 UNION ALL
592 SELECT '-1' org_id,
593 '-1' organization_id,
594 name time_id,
595 order_by_id time_key,
596 '-1' util_category_id,
597 '-1' work_type_id,
598 '-1' job_level_id,
599 0 actual_capacity_hours,
600 0 missing_hours,
601 0 actual_util_hours,
602 0 billable_hours,
603 0 scheduled_utilization_hours,
604 0 scheduled_capacity_hours,
605 0 actual_hours,
606 0 scheduled_hours,
607 0 resource_hours,
608 0 total_resource_hours,
609 0 prior_actual_capacity_hours,
610 0 prior_missing_hours,
611 0 prior_actual_util_hours,
612 0 prior_billable_hours,
613 0 prior_sch_util_hours,
614 0 prior_sch_capacity_hours,
615 0 prior_actual_hours,
616 0 prior_scheduled_hours,
617 0 prior_resource_hours,
618 0 prior_total_resource_hours
619 FROM PJI_PMV_TIME_DIM_TMP
620 WHERE name <> '-1'
621 )
622 GROUP BY org_id,
623 organization_id,
624 time_id,
625 time_key,
626 util_category_id,
627 work_type_id,
628 job_level_id;
629
630 ELSIF l_job_flag = 'N' THEN
631
632 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
633 , P_VIEW_BY => p_view_by
634 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
635
636
637 SELECT PJI_REP_U1(org_id,
638 organization_id,
639 time_id,
640 time_key,
641 util_category_id,
642 work_type_id,
643 job_level_id,
644 sum(capacity_hours-act_reduce_capacity_hours),
645 sum(decode (p_view_by, 'UC', null, 'WT',null, missing_hours)),
646 sum(actual_util_hours),
647 sum(billable_hours),
648 sum(scheduled_util_hours),
649 sum(capacity_hours-sch_reduce_capacity_hours),
650 0, -- resource_hours
651 0, -- total_resource_hours,
652 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
653 sum(decode(l_denominator, 'CAPACITY', capacity_hours-sch_reduce_capacity_hours, total_actual_hours)),
654 sum(prior_act_capacity_hours-prior_act_red_capacity_hours),
655 sum(decode (p_view_by, 'UC', null, 'WT',null, prior_missing_hours)),
656 sum(prior_actual_util_hours),
657 sum(prior_billable_hours),
658 sum(prior_sch_util_hours),
659 sum(prior_act_capacity_hours-prior_act_red_capacity_hours),
660 0, -- prior_resource_hours
661 0, -- prior_total_resource_hours
662 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
663 prior_total_actual_hours)),
664 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
665 prior_total_actual_hours)),
666 null,null,null,null,null,null,
667 null,null,null,null,null,null,
668 null,null,null,null,null,null,
669 null,null,null,null,null,null,null)
670 BULK COLLECT INTO l_u1_tbl
671 FROM ( /* Bug 3515594 */
672 SELECT /*+ ORDERED */
673 hou.name org_id,
674 horg.name organization_id,
675 time.name time_id,
676 DECODE(p_view_by, 'TM', time.id, -1) time_key,
677 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
678 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
679 '-1' job_level_id,
680 0 capacity_hours,
681 0 act_reduce_capacity_hours,
682 null missing_hours,
683 0 total_actual_hours,
684 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
685 worktype.org_utilization_percentage / 100
686 actual_util_hours,
687
688 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
689 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
690 billable_hours,
691 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
692 worktype.org_utilization_percentage / 100
693 scheduled_util_hours,
694 0 sch_reduce_capacity_hours,
695 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
696 actual_hours,
697 fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
698 scheduled_hours,
699 0 prior_act_capacity_hours,
700 0 prior_act_red_capacity_hours,
701 null prior_missing_hours,
702 0 prior_total_actual_hours,
703 0 prior_actual_util_hours,
704 0 prior_billable_hours,
705 0 prior_sch_util_hours,
706 0 prior_actual_hours,
707 0 prior_scheduled_hours
708 FROM PJI_PMV_ORGZ_DIM_TMP horg,
709 PJI_PMV_TIME_DIM_TMP time,
710 PJI_PMV_WT_DIM_TMP wt,
711 PJI_RM_WTO_F_MV fct,
712 PJI_PMV_ORG_DIM_TMP hou,
713 PA_WORK_TYPES_B worktype,
714 PA_IMPLEMENTATIONS_ALL imp
715 WHERE fct.expenditure_org_id = hou.id
716 AND fct.expenditure_organization_id = horg.id
717 AND wt.id = worktype.work_type_id
718 AND fct.work_type_id = wt.id
719 AND fct.time_id = time.id
720 AND fct.period_type_id = time.period_type
721 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
722 AND time.id is not null
723 AND hou.id = imp.org_id
724 UNION ALL
725 /* Bug 3515594 */
726 SELECT /*+ ORDERED */
727 hou.name org_id,
728 horg.name organization_id,
729 time.name time_id,
730 DECODE(p_view_by, 'TM', time.id, -1) time_key,
731 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
732 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
733 '-1' job_level_id,
734 0 capacity_hours,
735 0 act_reduce_capacity_hours,
736 null missing_hours,
737 0 total_actual_hours,
738 0 actual_util_hours,
739 0 billable_hours,
740 0 scheduled_util_hours,
741 0 sch_reduce_capacity_hours,
742 0 actual_hours,
743 0 scheduled_hours,
744 0 prior_act_capacity_hours,
745 0 prior_act_red_capacity_hours,
746 null prior_missing_hours,
747 0 prior_total_actual_hours,
748 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1))
749 * worktype.org_utilization_percentage / 100
750 prior_actual_util_hours,
751 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
752 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
753 prior_billable_hours,
754 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
755 worktype.org_utilization_percentage / 100
756 prior_sch_util_hours,
757 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
758 prior_actual_hours,
759 fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
760 prior_scheduled_hours
761 FROM PJI_PMV_ORGZ_DIM_TMP horg,
762 PJI_PMV_TCMP_DIM_TMP time,
763 PJI_PMV_WT_DIM_TMP wt,
764 PJI_RM_WTO_F_MV fct,
765 PJI_PMV_ORG_DIM_TMP hou,
766 PA_WORK_TYPES_B worktype,
767 PA_IMPLEMENTATIONS_ALL imp
768 WHERE fct.expenditure_org_id = hou.id
769 AND fct.expenditure_organization_id = horg.id
770 AND wt.id = worktype.work_type_id
771 AND fct.work_type_id = wt.id
772 AND fct.time_id = time.id
773 AND fct.period_type_id = time.period_type
774 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
775 AND hou.id = imp.org_id
776 UNION ALL
777 SELECT '-1' org_id,
778 name organization_id,
779 '-1' time_id,
780 -1 time_key,
781 '-1' util_category_id,
782 '-1' work_type_id,
783 '-1' job_level_id,
784 0 capacity_hours,
785 0 act_reduce_capacity_hours,
786 null missing_hours,
787 0 total_actual_hours,
788 0 actual_util_hours,
789 0 billable_hours,
790 0 scheduled_util_hours,
791 0 sch_reduce_capacity_hours,
792 0 actual_hours,
793 0 scheduled_hours,
794 0 prior_act_capacity_hours,
795 0 prior_act_red_capacity_hours,
796 null prior_missing_hours,
797 0 prior_total_actual_hours,
798 0 prior_actual_util_hours,
799 0 prior_billable_hours,
800 0 prior_sch_util_hours,
801 0 prior_actual_hours,
802 0 prior_scheduled_hours
803 FROM PJI_PMV_ORGZ_DIM_TMP
804 WHERE name <> '-1'
805 UNION ALL
806 SELECT '-1' org_id,
807 '-1' organization_id,
808 '-1' time_id,
809 -1 time_key,
810 decode(p_view_by, 'UC', name, '-1') util_category_id,
811 decode(p_view_by, 'WT', name, '-1') work_type_id,
812 '-1' job_level_id,
813 -- 0 actual_capacity_hours,
814 0 capacity_hours,
815 0 act_reduce_capacity_hours,
816 null missing_hours,
817 0 total_actual_hours,
818 0 actual_util_hours,
819 0 billable_hours,
820 0 scheduled_util_hours,
821 0 sch_reduce_capacity_hours,
822 0 actual_hours,
823 0 scheduled_hours,
824 0 prior_act_capacity_hours,
825 0 prior_act_red_capacity_hours,
826 null prior_missing_hours,
827 0 prior_total_actual_hours,
828 0 prior_actual_util_hours,
829 0 prior_billable_hours,
830 0 prior_sch_util_hours,
831 0 prior_actual_hours,
832 0 prior_scheduled_hours
833 FROM PJI_PMV_WT_DIM_TMP
834 WHERE name <> '-1'
835 UNION ALL
836 SELECT '-1' org_id,
837 '-1' organization_id,
838 name time_id,
839 order_by_id time_key,
840 '-1' util_category_id,
841 '-1' work_type_id,
842 '-1' job_level_id,
843 0 capacity_hours,
844 0 act_reduce_capacity_hours,
845 null missing_hours,
846 0 total_actual_hours,
847 0 actual_util_hours,
848 0 billable_hours,
849 0 scheduled_util_hours,
850 0 sch_reduce_capacity_hours,
851 0 actual_hours,
852 0 scheduled_hours,
853 0 prior_act_capacity_hours,
854 0 prior_act_red_capacity_hours,
855 null prior_missing_hours,
856 0 prior_total_actual_hours,
857 0 prior_actual_util_hours,
858 0 prior_billable_hours,
859 0 prior_sch_util_hours,
860 0 prior_actual_hours,
861 0 prior_scheduled_hours
862 FROM PJI_PMV_TIME_DIM_TMP
863 WHERE name <> '-1'
864 UNION ALL -- added for current year capacity_hours
865 SELECT
866 FACT.org_id,
867 FACT.organization_id,
868 FACT.time_id,
869 FACT.time_key,
870 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
871 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
872 '-1' job_level_id,
873 FACT.capacity_hours,
874 FACT.reduce_capacity_hrs_a act_reduce_capacity_hours,
875 FACT.missing_hrs_a missing_hours,
876 FACT.total_actual_hours total_actual_hours,
877 0 actual_util_hours,
878 0 billable_hours,
879 0 scheduled_util_hours,
880 FACT.reduce_capacity_hrs_s sch_reduce_capacity_hours,
881 0 actual_hours,
882 0 scheduled_hours,
883 0 prior_act_capacity_hours,
884 0 prior_act_red_capacity_hours,
885 null prior_missing_hours,
886 0 prior_total_actual_hours,
887 0 prior_actual_util_hours,
888 0 prior_billable_hours,
889 0 prior_sch_util_hours,
890 0 prior_actual_hours,
891 0 prior_scheduled_hours
892 FROM
893 /* Bug 3515594 */
894 (SELECT /*+ ORDERED */
895 hou.name org_id,
896 horg.name organization_id,
897 time.name time_id,
898 DECODE(p_view_by, 'TM', time.id, -1) time_key,
899 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
900 capacity_hours,
901 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
902 total_actual_hours,
903 fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
904 missing_hrs_a,
905 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
906 reduce_capacity_hrs_a,
907 fct.reduce_capacity_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
908 reduce_capacity_hrs_s
909 FROM PJI_PMV_ORGZ_DIM_TMP horg,
910 PJI_PMV_TIME_DIM_TMP time,
911 PJI_RM_ORGO_F_MV fct,
912 PJI_PMV_ORG_DIM_TMP hou,
913 PA_IMPLEMENTATIONS_ALL imp
914 WHERE fct.expenditure_org_id = hou.id
915 AND fct.expenditure_organization_id = horg.id
916 AND fct.time_id = time.id
917 AND fct.period_type_id = time.period_type
918 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
919 AND time.id is not null
920 AND hou.id = imp.org_id ) FACT,
921 (SELECT distinct WT.name
922 FROM PJI_PMV_WT_DIM_TMP wt ) WT
923 UNION ALL -- added for prior year capacity_hours
924 /* Bug 3515594 */
925 SELECT
926 FACT.org_id,
927 FACT.organization_id,
928 FACT.time_id,
929 FACT.time_key,
930 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
931 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
932 '-1' job_level_id,
933 0 capacity_hours,
934 0 act_reduce_capacity_hours,
935 null missing_hours,
936 0 total_actual_hours,
937 0 actual_util_hours,
938 0 billable_hours,
939 0 scheduled_util_hours,
940 0 sch_reduce_capacity_hours,
941 0 actual_hours,
942 0 scheduled_hours,
943 FACT.capacity_hours prior_act_capacity_hours,
944 FACT.reduce_capacity_hrs_a prior_act_red_capacity_hours,
945 FACT.missing_hrs_a prior_missing_hours,
946 FACT.total_actual_hours prior_total_actual_hours,
947 0 prior_actual_util_hours,
948 0 prior_billable_hours,
949 0 prior_sch_util_hours,
950 0 prior_actual_hours,
951 0 prior_scheduled_hours
952 FROM
953 (SELECT /*+ ORDERED */
954 hou.name org_id,
955 horg.name organization_id,
956 time.name time_id,
957 DECODE(p_view_by, 'TM', time.id, -1) time_key,
958 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
959 capacity_hours,
960 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
961 total_actual_hours,
962 fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
963 missing_hrs_a,
964 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
965 reduce_capacity_hrs_a
966 FROM PJI_PMV_ORGZ_DIM_TMP horg,
967 PJI_PMV_TCMP_DIM_TMP time,
968 PJI_RM_ORGO_F_MV fct,
969 PJI_PMV_ORG_DIM_TMP hou,
970 PA_IMPLEMENTATIONS_ALL imp
971 WHERE fct.expenditure_org_id = hou.id
972 AND fct.expenditure_organization_id = horg.id
973 AND fct.time_id = time.id
974 AND fct.period_type_id = time.period_type
975 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
976 AND hou.id = imp.org_id ) FACT,
977 (SELECT distinct WT.name
978 FROM PJI_PMV_WT_DIM_TMP wt ) WT
979 )
980 GROUP BY org_id,
981 organization_id,
982 time_id,
983 time_key,
984 util_category_id,
985 work_type_id,
986 job_level_id;
987
988
989 ELSIF l_util_category_flag = 'N' THEN
990
991 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
992 , P_VIEW_BY => p_view_by
993 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
994
995
996 SELECT PJI_REP_U1(org_id,
997 organization_id,
998 time_id,
999 time_key,
1000 util_category_id,
1001 work_type_id,
1002 job_level_id,
1003 sum(capacity_hrs - reduce_capacity_hrs_a),
1004 --null,
1005 sum(missing_hours),
1006 sum(actual_util_hours),
1007 sum(billable_hours),
1008 sum(scheduled_util_hours),
1009 sum(capacity_hrs - reduce_capacity_hrs_s),
1010 0, -- resource_hours
1011 0, -- total_resource_hours,
1012 sum(decode(l_denominator, 'CAPACITY', capacity_hrs - reduce_capacity_hrs_a, actual_hours)),
1013 sum(decode(l_denominator, 'CAPACITY', capacity_hrs - reduce_capacity_hrs_s, actual_hours)),
1014 sum (prior_capacity_hours - prior_reduce_capacity_hrs_a),
1015 sum(prior_missing_hours),
1016 --null,
1017 sum(prior_actual_util_hours),
1018 sum(prior_billable_hours),
1019 sum(prior_sch_util_hours),
1020 sum(prior_capacity_hours - prior_reduce_capacity_hrs_s),
1021 0, -- prior_resource_hours
1022 0, -- prior_total_resource_hours
1023 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours - prior_reduce_capacity_hrs_a, prior_actual_hours)),
1024 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours - prior_reduce_capacity_hrs_s, prior_actual_hours)),
1025 null,null,null,null,null,null,
1026 null,null,null,null,null,null,
1027 null,null,null,null,null,null,
1028 null,null,null,null,null,null,null
1029 )
1030 /* Bug 3515594 */
1031 BULK COLLECT INTO l_u1_tbl
1032 FROM (
1033 SELECT /*+ ORDERED */
1034 hou.name org_id,
1035 horg.name organization_id,
1036 time.name time_id,
1037 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1038 '-1' util_category_id,
1039 '-1' work_type_id,
1040 job.name job_level_id,
1041 capacity_hrs capacity_hrs,
1042 reduce_capacity_hrs_a reduce_capacity_hrs_a,
1043 missing_hrs_a missing_hours,
1044 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1045 actual_util_hours,
1046 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1047 billable_hours,
1048 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1049 scheduled_util_hours,
1050 reduce_capacity_hrs_s reduce_capacity_hrs_s,
1051 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1052 actual_hours,
1053 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1054 scheduled_hours,
1055 0 prior_capacity_hours,
1056 0 prior_reduce_capacity_hrs_a,
1057 0 prior_reduce_capacity_hrs_s,
1058 0 prior_missing_hours,
1059 0 prior_actual_util_hours,
1060 0 prior_billable_hours,
1061 0 prior_sch_util_hours,
1062 0 prior_actual_hours,
1063 0 prior_scheduled_hours
1064 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1065 PJI_PMV_TIME_DIM_TMP time,
1066 PJI_PMV_JB_DIM_TMP job,
1067 PJI_RM_JOBO_F_MV fct,
1068 PJI_PMV_ORG_DIM_TMP hou,
1069 PA_IMPLEMENTATIONS_ALL imp
1070 WHERE fct.expenditure_org_id = hou.id
1071 AND fct.expenditure_organization_id = horg.id
1072 AND fct.job_id = job.id
1073 AND fct.time_id = time.id
1074 AND fct.period_type_id = time.period_type
1075 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1076 AND time.id is not null
1077 AND hou.id = imp.org_id
1078 UNION ALL
1079 /* Bug 3515594 */
1080 SELECT /*+ ORDERED */
1081 hou.name org_id,
1082 horg.name organization_id,
1083 time.name time_id,
1084 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1085 '-1' util_category_id,
1086 '-1' work_type_id,
1087 job.name job_level_id,
1088 0 capacity_hours,
1089 0 reduce_capacity_hrs_a,
1090 0 reduce_capacity_hrs_s,
1091 0 missing_hours,
1092 0 actual_util_hours,
1093 0 billable_hours,
1094 0 scheduled_util_hours,
1095 0 actual_hours,
1096 0 scheduled_hours,
1097 0 prior_capacity_hours,
1098 reduce_capacity_hrs_a prior_reduce_capacity_hrs_a,
1099 missing_hrs_a prior_missing_hours,
1100 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1101 prior_actual_util_hours,
1102 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1103 prior_billable_hours,
1104 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1105 prior_sch_util_hours,
1106 reduce_capacity_hrs_s prior_reduce_capacity_hrs_s,
1107 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1108 prior_actual_hours,
1109 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1110 prior_scheduled_hours
1111 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1112 PJI_PMV_TCMP_DIM_TMP time,
1113 PJI_PMV_JB_DIM_TMP job,
1114 PJI_RM_JOBO_F_MV fct,
1115 PJI_PMV_ORG_DIM_TMP hou,
1116 PA_IMPLEMENTATIONS_ALL imp
1117 WHERE fct.expenditure_org_id = hou.id
1118 AND fct.expenditure_organization_id = horg.id
1119 AND fct.job_id = job.id
1120 AND fct.time_id = time.id
1121 AND fct.period_type_id = time.period_type
1122 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1123 AND hou.id = imp.org_id
1124 UNION ALL
1125 SELECT '-1' org_id,
1126 name organization_id,
1127 '-1' time_id,
1128 -1 time_key,
1129 '-1' util_category_id,
1130 '-1' work_type_id,
1131 '-1' job_level_id,
1132 0 capacity_hours,
1133 0 reduce_capacity_hrs_a,
1134 0 reduce_capacity_hrs_s,
1135 null missing_hours,
1136 0 actual_util_hours,
1137 0 billable_hours,
1138 0 scheduled_util_hours,
1139 0 actual_hours,
1140 0 scheduled_hours,
1141 0 prior_capacity_hours,
1142 0 prior_reduce_capacity_hrs_a,
1143 0 prior_reduce_capacity_hrs_s,
1144 null prior_missing_hours,
1145 0 prior_actual_util_hours,
1146 0 prior_billable_hours,
1147 0 prior_sch_util_hours,
1148 0 prior_actual_hours,
1149 0 prior_scheduled_hours
1150 FROM PJI_PMV_ORGZ_DIM_TMP
1151 WHERE name <> '-1'
1152 UNION ALL
1153 SELECT '-1' org_id,
1154 '-1' organization_id,
1155 '-1' time_id,
1156 -1 time_key,
1157 '-1' util_category_id,
1158 '-1' work_type_id,
1159 name job_level_id,
1160 0 capacity_hours,
1161 0 reduce_capacity_hrs_a,
1162 0 reduce_capacity_hrs_s,
1163 null missing_hours,
1164 0 actual_util_hours,
1165 0 billable_hours,
1166 0 scheduled_util_hours,
1167 0 actual_hours,
1168 0 scheduled_hours,
1169 0 prior_capacity_hours,
1170 0 prior_reduce_capacity_hrs_a,
1171 0 prior_reduce_capacity_hrs_s,
1172 null prior_missing_hours,
1173 0 prior_actual_util_hours,
1174 0 prior_billable_hours,
1175 0 prior_sch_util_hours,
1176 0 prior_actual_hours,
1177 0 prior_scheduled_hours
1178 FROM PJI_PMV_JB_DIM_TMP
1179 WHERE name <> '-1'
1180 UNION ALL
1181 SELECT '-1' org_id,
1182 '-1' organization_id,
1183 name time_id,
1184 order_by_id time_key,
1185 '-1' util_category_id,
1186 '-1' work_type_id,
1187 '-1' job_level_id,
1188 0 capacity_hours,
1189 0 reduce_capacity_hrs_a,
1190 0 reduce_capacity_hrs_s,
1191 null missing_hours,
1192 0 actual_util_hours,
1193 0 billable_hours,
1194 0 scheduled_util_hours,
1195 0 actual_hours,
1196 0 scheduled_hours,
1197 0 prior_capacity_hours,
1198 0 prior_reduce_capacity_hrs_a,
1199 0 prior_reduce_capacity_hrs_s,
1200 null prior_missing_hours,
1201 0 prior_actual_util_hours,
1202 0 prior_billable_hours,
1203 0 prior_sch_util_hours,
1204 0 prior_actual_hours,
1205 0 prior_scheduled_hours
1206 FROM PJI_PMV_TIME_DIM_TMP
1207 WHERE name <> '-1'
1208 )
1209 GROUP BY org_id,
1210 organization_id,
1211 time_id,
1212 time_key,
1213 util_category_id,
1214 work_type_id,
1215 job_level_id;
1216
1217 ELSE
1218
1219 PJI_PMV_ENGINE.Convert_Organization( p_Organization, p_view_by);
1220
1221 SELECT PJI_REP_U1(org_id,
1222 organization_id,
1223 time_id,
1224 time_key,
1225 util_category_id,
1226 work_type_id,
1227 job_level_id,
1228 sum(capacity_hours-act_reduce_capacity_hours),
1229 sum(decode (p_view_by, 'UC', null, 'WT',null, missing_hours)),
1230 sum(actual_util_hours),
1231 sum(billable_hours),
1232 sum(scheduled_util_hours),
1233 sum(capacity_hours-sch_reduce_capacity_hours),
1234 0, -- resource_hours
1235 0, -- total_resource_hours,
1236 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
1237 sum(decode(l_denominator, 'CAPACITY', capacity_hours-sch_reduce_capacity_hours, total_actual_hours)),
1238 sum(prior_act_capacity_hours-prior_act_red_capacity_hours),
1239 sum(decode (p_view_by, 'UC', null, 'WT',null, prior_missing_hours)),
1240 sum(prior_actual_util_hours),
1241 sum(prior_billable_hours),
1242 sum(prior_sch_util_hours),
1243 sum(prior_act_capacity_hours-prior_act_red_capacity_hours),
1244 0, -- prior_resource_hours
1245 0, -- prior_total_resource_hours
1246 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
1247 prior_total_actual_hours)),
1248 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
1249 prior_total_actual_hours)),
1250 null,null,null,null,null,null,
1251 null,null,null,null,null,null,
1252 null,null,null,null,null,null,
1253 null,null,null,null,null,null,null
1254 )
1255 /* Bug 3515594 */
1256 BULK COLLECT INTO l_u1_tbl
1257 FROM (
1258 SELECT /*+ ORDERED */
1259 hou.name org_id,
1260 horg.name organization_id,
1261 time.name time_id,
1262 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1263 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
1264 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
1265
1266 job.name job_level_id,
1267 0 capacity_hours,
1268 0 act_reduce_capacity_hours,
1269 null missing_hours,
1270 0 total_actual_hours,
1271 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
1272 worktype.org_utilization_percentage / 100
1273 actual_util_hours,
1274
1275 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
1276 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1277 billable_hours,
1278 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
1279 worktype.org_utilization_percentage / 100
1280 scheduled_util_hours,
1281 0 sch_reduce_capacity_hours,
1282 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1283 actual_hours,
1284 fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1285 scheduled_hours,
1286 0 prior_act_capacity_hours,
1287 0 prior_act_red_capacity_hours,
1288 null prior_missing_hours,
1289 0 prior_total_actual_hours,
1290 0 prior_actual_util_hours,
1291 0 prior_billable_hours,
1292 0 prior_sch_util_hours,
1293 -- 0 prior_sch_capacity_hours,
1294 0 prior_actual_hours,
1295 0 prior_scheduled_hours
1296 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1297 PJI_PMV_TIME_DIM_TMP time,
1298 PJI_PMV_WT_DIM_TMP wt,
1299 PJI_RM_RES_WT_F fct,
1300 PJI_PMV_ORG_DIM_TMP hou,
1301 PJI_PMV_JB_DIM_TMP job,
1302 PA_WORK_TYPES_B worktype,
1303 PA_IMPLEMENTATIONS_ALL imp
1304 WHERE fct.expenditure_org_id = hou.id
1305 AND fct.expenditure_organization_id = horg.id
1306 AND wt.id = worktype.work_type_id
1307 AND fct.work_type_id = wt.id
1308 AND fct.job_id = job.id
1309 AND fct.time_id = time.id
1310 AND fct.period_type_id = time.period_type
1311 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1312 AND time.id is not null
1313 AND hou.id = imp.org_id
1314 UNION ALL
1315 /* Bug 3515594 */
1316 SELECT /*+ ORDERED */
1317 hou.name org_id,
1318 horg.name organization_id,
1319 time.name time_id,
1320 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1321 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
1322 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
1323
1324 job.name job_level_id,
1325 0 capacity_hours,
1326 0 act_reduce_capacity_hours,
1327 null missing_hours,
1328 0 total_actual_hours,
1329 0 actual_util_hours,
1330 0 billable_hours,
1331 0 scheduled_util_hours,
1332 0 sch_reduce_capacity_hours,
1333 0 actual_hours,
1334 0 scheduled_hours,
1335 0 prior_act_capacity_hours,
1336 0 prior_act_red_capacity_hours,
1337 null prior_missing_hours,
1338 0 prior_total_actual_hours,
1339 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
1340 worktype.org_utilization_percentage / 100
1341 prior_actual_util_hours,
1342 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
1343 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1344 prior_billable_hours,
1345 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
1346 worktype.org_utilization_percentage / 100
1347 prior_sch_util_hours,
1348 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1349 prior_actual_hours,
1350 fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1351 prior_scheduled_hours
1352 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1353 PJI_PMV_TCMP_DIM_TMP time,
1354 PJI_PMV_WT_DIM_TMP wt,
1355 PJI_RM_RES_WT_F fct,
1356 PJI_PMV_ORG_DIM_TMP hou,
1357 PJI_PMV_JB_DIM_TMP job,
1358 PA_WORK_TYPES_B worktype,
1359 PA_IMPLEMENTATIONS_ALL imp
1360 WHERE fct.expenditure_org_id = hou.id
1361 AND fct.expenditure_organization_id = horg.id
1362 AND wt.id = worktype.work_type_id
1363 AND fct.work_type_id = wt.id
1364 AND fct.job_id = job.id
1365 AND fct.time_id = time.id
1366 AND fct.period_type_id = time.period_type
1367 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1368 AND hou.id = imp.org_id
1369 UNION ALL
1370 SELECT '-1' org_id,
1371 name organization_id,
1372 '-1' time_id,
1373 -1 time_key,
1374 '-1' util_category_id,
1375 '-1' work_type_id,
1376 '-1' job_level_id,
1377 0 capacity_hours,
1378 0 act_reduce_capacity_hours,
1379 null missing_hours,
1380 0 total_actual_hours,
1381 0 actual_util_hours,
1382 0 billable_hours,
1383 0 scheduled_util_hours,
1384 0 sch_reduce_capacity_hours,
1385 0 actual_hours,
1386 0 scheduled_hours,
1387 0 prior_act_capacity_hours,
1388 0 prior_act_red_capacity_hours,
1389 null prior_missing_hours,
1390 0 prior_total_actual_hours,
1391 0 prior_actual_util_hours,
1392 0 prior_billable_hours,
1393 0 prior_sch_util_hours,
1394 0 prior_actual_hours,
1395 0 prior_scheduled_hours
1396 FROM PJI_PMV_ORGZ_DIM_TMP
1397 WHERE name <> '-1'
1398 UNION ALL
1399 SELECT '-1' org_id,
1400 '-1' organization_id,
1401 '-1' time_id,
1402 -1 time_key,
1403 decode(p_view_by, 'UC', name, '-1') util_category_id,
1404 decode(p_view_by, 'WT', name, '-1') work_type_id,
1405 '-1' job_level_id,
1406 0 capacity_hours,
1407 0 act_reduce_capacity_hours,
1408 null missing_hours,
1409 0 total_actual_hours,
1410 0 actual_util_hours,
1411 0 billable_hours,
1412 0 scheduled_util_hours,
1413 0 sch_reduce_capacity_hours,
1414 0 actual_hours,
1415 0 scheduled_hours,
1416 0 prior_act_capacity_hours,
1417 0 prior_act_red_capacity_hours,
1418 null prior_missing_hours,
1419 0 prior_total_actual_hours,
1420 0 prior_actual_util_hours,
1421 0 prior_billable_hours,
1422 0 prior_sch_util_hours,
1423 0 prior_actual_hours,
1424 0 prior_scheduled_hours
1425 FROM PJI_PMV_WT_DIM_TMP
1426 WHERE name <> '-1'
1427 UNION ALL
1428 SELECT '-1' org_id,
1429 '-1' organization_id,
1430 '-1' time_id,
1431 -1 time_key,
1432 '-1' util_category_id,
1433 '-1' work_typd_id,
1434 name job_level_id,
1435 0 capacity_hours,
1436 0 act_reduce_capacity_hours,
1437 null missing_hours,
1438 0 total_actual_hours,
1439 0 actual_util_hours,
1440 0 billable_hours,
1441 0 scheduled_util_hours,
1442 0 sch_reduce_capacity_hours,
1443 0 actual_hours,
1444 0 scheduled_hours,
1445 0 prior_act_capacity_hours,
1446 0 prior_act_red_capacity_hours,
1447 null prior_missing_hours,
1448 0 prior_total_actual_hours,
1449 0 prior_actual_util_hours,
1450 0 prior_billable_hours,
1451 0 prior_sch_util_hours,
1452 0 prior_actual_hours,
1453 0 prior_scheduled_hours
1454 FROM PJI_PMV_JB_DIM_TMP
1455 WHERE name <> '-1'
1456 UNION ALL
1457 SELECT '-1' org_id,
1458 '-1' organization_id,
1459 name time_id,
1460 order_by_id time_key,
1461 '-1' util_category_id,
1462 '-1' work_type_id,
1463 '-1' job_level_id,
1464 0 capacity_hours,
1465 0 act_reduce_capacity_hours,
1466 null missing_hours,
1467 0 total_actual_hours,
1468 0 actual_util_hours,
1469 0 billable_hours,
1470 0 scheduled_util_hours,
1471 0 sch_reduce_capacity_hours,
1472 0 actual_hours,
1473 0 scheduled_hours,
1474 0 prior_act_capacity_hours,
1475 0 prior_act_red_capacity_hours,
1476 null prior_missing_hours,
1477 0 prior_total_actual_hours,
1478 0 prior_actual_util_hours,
1479 0 prior_billable_hours,
1480 0 prior_sch_util_hours,
1481 0 prior_actual_hours,
1482 0 prior_scheduled_hours
1483 FROM PJI_PMV_TIME_DIM_TMP
1484 WHERE name <> '-1'
1485 UNION ALL -- added for current year capacity_hours
1486 /* Bug 3515594 */
1487 SELECT
1488 FACT.org_id,
1489 FACT.organization_id,
1490 FACT.time_id,
1491 FACT.time_key,
1492 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
1493 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
1494 FACT.job_level_id job_level_id,
1495 FACT.capacity_hours,
1496 FACT.reduce_capacity_hrs_a act_reduce_capacity_hours,
1497 FACT.missing_hrs_a missing_hours,
1498 FACT.total_actual_hours total_actual_hours,
1499 0 actual_util_hours,
1500 0 billable_hours,
1501 0 scheduled_util_hours,
1502 FACT.reduce_capacity_hrs_s sch_reduce_capacity_hours,
1503 0 actual_hours,
1504 0 scheduled_hours,
1505 0 prior_act_capacity_hours,
1506 0 prior_act_red_capacity_hours,
1507 null prior_missing_hours,
1508 0 prior_total_actual_hours,
1509 0 prior_actual_util_hours,
1510 0 prior_billable_hours,
1511 0 prior_sch_util_hours,
1512 0 prior_actual_hours,
1513 0 prior_scheduled_hours
1514 FROM
1515 (SELECT /*+ ORDERED */
1516 hou.name org_id,
1517 horg.name organization_id,
1518 time.name time_id,
1519 job.name job_level_id,
1520 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1521
1522 capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1523 capacity_hours,
1524 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1525 total_actual_hours,
1526 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1527 missing_hrs_a,
1528 reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1529 reduce_capacity_hrs_a,
1530 reduce_capacity_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1531 reduce_capacity_hrs_s
1532 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1533 PJI_PMV_TIME_DIM_TMP time,
1534 PJI_PMV_JB_DIM_TMP job,
1535 PJI_RM_JOB_F_MV fct,
1536 PJI_PMV_ORG_DIM_TMP hou,
1537 PA_IMPLEMENTATIONS_ALL imp
1538 WHERE fct.expenditure_org_id = hou.id
1539 AND fct.expenditure_organization_id = horg.id
1540 AND fct.time_id = time.id
1541 AND time.id is not null
1542 AND fct.job_id = job.id
1543 AND fct.period_type_id = time.period_type
1544 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1545 AND hou.id = imp.org_id ) FACT,
1546 (SELECT distinct WT.name
1547 FROM PJI_PMV_WT_DIM_TMP wt ) WT
1548 UNION ALL -- added for prior year capacity_hours
1549 /* Bug 3515594 */
1550 SELECT
1551 FACT.org_id,
1552 FACT.organization_id,
1553 FACT.time_id,
1554 FACT.time_key,
1555 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
1556 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
1557 FACT.job_level_id job_level_id,
1558 0 capacity_hours,
1559 0 act_reduce_capacity_hours,
1560 null missing_hours,
1561 0 total_actual_hours,
1562 0 actual_util_hours,
1563 0 billable_hours,
1564 0 scheduled_util_hours,
1565 0 sch_reduce_capacity_hours,
1566 0 actual_hours,
1567 0 scheduled_hours,
1568 FACT.capacity_hours prior_act_capacity_hours,
1569 FACT.prior_reduce_capacity_hrs_a prior_act_red_capacity_hours,
1570 FACT.missing_hrs_a prior_missing_hours,
1571 FACT.total_actual_hours prior_total_actual_hours,
1572 0 prior_actual_util_hours,
1573 0 prior_billable_hours,
1574 0 prior_sch_util_hours,
1575 0 prior_actual_hours,
1576 0 prior_scheduled_hours
1577 FROM
1578 (SELECT /*+ ORDERED */
1579 hou.name org_id,
1580 horg.name organization_id,
1581 time.name time_id,
1582 DECODE(p_view_by, 'TM', time.id, -1) time_key,
1583 job.name job_level_id,
1584 capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1585 capacity_hours,
1586
1587 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1588 total_actual_hours,
1589
1590 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1591 missing_hrs_a,
1592 reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1593 prior_reduce_capacity_hrs_a
1594 FROM PJI_PMV_ORGZ_DIM_TMP horg,
1595 PJI_PMV_TCMP_DIM_TMP time,
1596 PJI_PMV_JB_DIM_TMP job,
1597 PJI_RM_JOB_F_MV fct,
1598 PJI_PMV_ORG_DIM_TMP hou,
1599 PA_IMPLEMENTATIONS_ALL imp
1600 WHERE fct.expenditure_org_id = hou.id
1601 AND fct.expenditure_organization_id = horg.id
1602 AND fct.time_id = time.id
1603 AND fct.job_id = job.id
1604 AND fct.period_type_id = time.period_type
1605 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
1606 AND hou.id = imp.org_id ) FACT,
1607 (SELECT distinct WT.name
1608 FROM PJI_PMV_WT_DIM_TMP wt ) WT
1609 )
1610 GROUP BY org_id,
1611 organization_id,
1612 time_id,
1613 time_key,
1614 util_category_id,
1615 work_type_id,
1616 job_level_id;
1617
1618 END IF;
1619
1620
1621 FOR i in 1..l_u1_tbl.COUNT
1622 LOOP
1623
1624 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' )
1625 AND l_u1_tbl(i).ORGANIZATION_ID = l_Top_Organization_Name THEN
1626
1627 l_Top_Org_Index:=i;
1628 ELSE
1629 l_actual_capacity_hours := l_actual_capacity_hours + nvl(l_u1_tbl(i).ACTUAL_CAPACITY_HOURS,0);
1630 l_missing_hours := l_missing_hours + nvl(l_u1_tbl(i).MISSING_HOURS,0);
1631 l_actual_util_hours := l_actual_util_hours + nvl(l_u1_tbl(i).ACTUAL_UTIL_HOURS,0);
1632 l_billable_hours := l_billable_hours + nvl(l_u1_tbl(i).BILLABLE_HOURS,0);
1633 l_scheduled_util_hours := l_scheduled_util_hours + nvl(l_u1_tbl(i).SCHEDULED_UTIL_HOURS,0);
1634 l_scheduled_capacity_hours := l_scheduled_capacity_hours + nvl(l_u1_tbl(i).SCHEDULED_CAPACITY_HOURS,0);
1635 l_resource_hours := l_resource_hours + nvl(l_u1_tbl(i).RESOURCE_HOURS,0);
1636 l_total_resource_hours := l_total_resource_hours + nvl(l_u1_tbl(i).TOTAL_RESOURCE_HOURS,0);
1637 l_actual_denominator := l_actual_denominator + nvl(l_u1_tbl(i).ACTUAL_DENOMINATOR,0);
1638 l_scheduled_denominator := l_scheduled_denominator + nvl(l_u1_tbl(i).SCHEDULED_DENOMINATOR,0);
1639 l_prior_actual_capacity_hours := l_prior_actual_capacity_hours + nvl(l_u1_tbl(i).PRIOR_ACTUAL_CAPACITY_HOURS,0);
1640 l_prior_missing_hours := l_prior_missing_hours + nvl(l_u1_tbl(i).PRIOR_MISSING_HOURS,0);
1641 l_prior_actual_util_hours := l_prior_actual_util_hours + nvl(l_u1_tbl(i).PRIOR_ACTUAL_UTIL_HOURS,0);
1642 l_prior_billable_hours := l_prior_billable_hours + nvl(l_u1_tbl(i).PRIOR_BILLABLE_HOURS,0);
1643 l_prior_sch_util_hours := l_prior_sch_util_hours + nvl(l_u1_tbl(i).PRIOR_SCH_UTIL_HOURS,0);
1644 l_prior_sch_capacity_hours := l_prior_sch_capacity_hours + nvl(l_u1_tbl(i).PRIOR_SCH_CAPACITY_HOURS,0);
1645 l_prior_resource_hours := l_prior_resource_hours + nvl(l_u1_tbl(i).PRIOR_RESOURCE_HOURS,0);
1646 l_prior_total_resource_hours := l_prior_total_resource_hours + nvl(l_u1_tbl(i).PRIOR_TOTAL_RESOURCE_HOURS,0);
1647 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u1_tbl(i).PRIOR_ACTUAL_DENOMINATOR,0);
1648 l_prior_scheduled_denominator := l_prior_scheduled_denominator + nvl(l_u1_tbl(i).PRIOR_SCHEDULED_DENOMINATOR,0);
1649
1650 --Calculated columns processing is done below
1651 --The l_Top_org is not done here
1652 IF nvl(l_u1_tbl(i).prior_total_resource_hours,0) <> 0 THEN
1653 l_u1_tbl(i).prior_res_hours_percent := 100 * (l_u1_tbl(i).prior_resource_hours / l_u1_tbl(i).prior_total_resource_hours);
1654 ELSE
1655 l_u1_tbl(i).prior_res_hours_percent := NULL;
1656 END IF;
1657
1658 IF nvl(l_u1_tbl(i).prior_actual_denominator,0) <> 0 THEN
1659 l_u1_tbl(i).prior_act_util_percent := 100 * (l_u1_tbl(i).prior_actual_util_hours / l_u1_tbl(i).prior_actual_denominator);
1660 l_u1_tbl(i).prior_bill_hours_percent := 100 * (l_u1_tbl(i).prior_billable_hours / l_u1_tbl(i).prior_actual_denominator);
1661 ELSE
1662 l_u1_tbl(i).prior_act_util_percent := NULL;
1663 l_u1_tbl(i).prior_bill_hours_percent := NULL;
1664 END IF;
1665
1666 IF nvl(l_u1_tbl(i).actual_denominator,0) <> 0 THEN
1667 l_u1_tbl(i).bill_hours_percent := 100 * (l_u1_tbl(i).billable_hours / l_u1_tbl(i).actual_denominator);
1668 l_u1_tbl(i).act_util_percent := 100 * (l_u1_tbl(i).actual_util_hours / l_u1_tbl(i).actual_denominator);
1669 ELSE
1670 l_u1_tbl(i).bill_hours_percent := NULL;
1671 l_u1_tbl(i).act_util_percent := NULL;
1672 END IF;
1673
1674 IF nvl(l_u1_tbl(i).total_resource_hours,0) <> 0 THEN
1675 l_u1_tbl(i).res_hours_percent := 100 * (l_u1_tbl(i).resource_hours / l_u1_tbl(i).total_resource_hours);
1676 ELSE
1677 l_u1_tbl(i).res_hours_percent := NULL;
1678 END IF;
1679
1680 --TODO:Does the change need to be null when both values are null??
1681 l_u1_tbl(i).change_percent_1 := nvl(l_u1_tbl(i).act_util_percent,0) - nvl(l_u1_tbl(i).prior_act_util_percent,0);
1682 l_u1_tbl(i).change_percent_2 := nvl(l_u1_tbl(i).bill_hours_percent,0) - nvl(l_u1_tbl(i).prior_bill_hours_percent,0);
1683 l_u1_tbl(i).change_percent_3 := nvl(l_u1_tbl(i).res_hours_percent,0) - nvl(l_u1_tbl(i).prior_res_hours_percent,0);
1684
1685 --Columns for U1 only
1686 IF nvl(l_u1_tbl(i).scheduled_denominator,0) <> 0 THEN
1687 l_u1_tbl(i).sch_util_percent := 100 * (l_u1_tbl(i).scheduled_util_hours / l_u1_tbl(i).scheduled_denominator);
1688 ELSE
1689 l_u1_tbl(i).sch_util_percent := NULL;
1690 END IF;
1691
1692 IF nvl(l_u1_tbl(i).prior_missing_hours,0) <> 0 THEN
1693 l_u1_tbl(i).missing_hours_percent := 100 * ((l_u1_tbl(i).missing_hours - l_u1_tbl(i).prior_missing_hours)/ l_u1_tbl(i).prior_missing_hours);
1694 ELSE
1695 l_u1_tbl(i).missing_hours_percent := NULL;
1696 END IF;
1697
1698 l_u1_tbl(i).sch_var_percent := nvl(l_u1_tbl(i).act_util_percent,0) - nvl(l_u1_tbl(i).sch_util_percent,0);
1699
1700 END IF; --p_view_by
1701
1702 END LOOP;
1703
1704 --Processing for l_top_org_index
1705 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' ) THEN
1706
1707 l_u1_tbl(l_Top_Org_Index).ACTUAL_CAPACITY_HOURS := l_u1_tbl(l_Top_Org_Index).ACTUAL_CAPACITY_HOURS - l_actual_capacity_hours;
1708 l_u1_tbl(l_Top_Org_Index).MISSING_HOURS := l_u1_tbl(l_Top_Org_Index).MISSING_HOURS - l_missing_hours;
1709 l_u1_tbl(l_Top_Org_Index).ACTUAL_UTIL_HOURS := l_u1_tbl(l_Top_Org_Index).ACTUAL_UTIL_HOURS - l_actual_util_hours;
1710 l_u1_tbl(l_Top_Org_Index).BILLABLE_HOURS := l_u1_tbl(l_Top_Org_Index).BILLABLE_HOURS - l_billable_hours;
1711 l_u1_tbl(l_Top_Org_Index).SCHEDULED_UTIL_HOURS := l_u1_tbl(l_Top_Org_Index).SCHEDULED_UTIL_HOURS - l_scheduled_util_hours;
1712 l_u1_tbl(l_Top_Org_Index).SCHEDULED_CAPACITY_HOURS := l_u1_tbl(l_Top_Org_Index).SCHEDULED_CAPACITY_HOURS - l_scheduled_capacity_hours;
1713 l_u1_tbl(l_Top_Org_Index).RESOURCE_HOURS := l_u1_tbl(l_Top_Org_Index).RESOURCE_HOURS - l_resource_hours;
1714 l_u1_tbl(l_Top_Org_Index).TOTAL_RESOURCE_HOURS := l_u1_tbl(l_Top_Org_Index).TOTAL_RESOURCE_HOURS - l_total_resource_hours;
1715 l_u1_tbl(l_Top_Org_Index).ACTUAL_DENOMINATOR := l_u1_tbl(l_Top_Org_Index).ACTUAL_DENOMINATOR - l_actual_denominator;
1716 l_u1_tbl(l_Top_Org_Index).SCHEDULED_DENOMINATOR := l_u1_tbl(l_Top_Org_Index).SCHEDULED_DENOMINATOR - l_scheduled_denominator;
1717 l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_CAPACITY_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_CAPACITY_HOURS - l_prior_actual_capacity_hours;
1718 l_u1_tbl(l_Top_Org_Index).PRIOR_MISSING_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_MISSING_HOURS - l_prior_missing_hours;
1719 l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_UTIL_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_UTIL_HOURS - l_prior_actual_util_hours;
1720 l_u1_tbl(l_Top_Org_Index).PRIOR_BILLABLE_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_BILLABLE_HOURS - l_prior_billable_hours;
1721 l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_UTIL_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_UTIL_HOURS - l_prior_sch_util_hours;
1722 l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_CAPACITY_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_CAPACITY_HOURS - l_prior_sch_capacity_hours;
1723 l_u1_tbl(l_Top_Org_Index).PRIOR_RESOURCE_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_RESOURCE_HOURS - l_prior_resource_hours;
1724 l_u1_tbl(l_Top_Org_Index).PRIOR_TOTAL_RESOURCE_HOURS := l_u1_tbl(l_Top_Org_Index).PRIOR_TOTAL_RESOURCE_HOURS - l_prior_total_resource_hours;
1725 l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_DENOMINATOR := l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_DENOMINATOR - l_prior_actual_denominator;
1726 l_u1_tbl(l_Top_Org_Index).PRIOR_SCHEDULED_DENOMINATOR := l_u1_tbl(l_Top_Org_Index).PRIOR_SCHEDULED_DENOMINATOR - l_prior_scheduled_denominator;
1727
1728 --Calculated columns processing for l_top_org
1729 IF nvl(l_u1_tbl(l_Top_Org_Index).prior_total_resource_hours,0) <> 0 THEN
1730 l_u1_tbl(l_Top_Org_Index).prior_res_hours_percent := 100 * (l_u1_tbl(l_Top_Org_Index).prior_resource_hours / l_u1_tbl(l_Top_Org_Index).prior_total_resource_hours);
1731 ELSE
1732 l_u1_tbl(l_Top_Org_Index).prior_res_hours_percent := NULL;
1733 END IF;
1734
1735 IF nvl(l_u1_tbl(l_Top_Org_Index).prior_actual_denominator,0) <> 0 THEN
1736 l_u1_tbl(l_Top_Org_Index).prior_act_util_percent := 100 * (l_u1_tbl(l_Top_Org_Index).prior_actual_util_hours / l_u1_tbl(l_Top_Org_Index).prior_actual_denominator);
1737 l_u1_tbl(l_Top_Org_Index).prior_bill_hours_percent := 100 * (l_u1_tbl(l_Top_Org_Index).prior_billable_hours / l_u1_tbl(l_Top_Org_Index).prior_actual_denominator);
1738 ELSE
1739 l_u1_tbl(l_Top_Org_Index).prior_act_util_percent := NULL;
1740 l_u1_tbl(l_Top_Org_Index).prior_bill_hours_percent := NULL;
1741 END IF;
1742
1743 IF nvl(l_u1_tbl(l_Top_Org_Index).actual_denominator,0) <> 0 THEN
1744 l_u1_tbl(l_Top_Org_Index).bill_hours_percent := 100 * (l_u1_tbl(l_Top_Org_Index).billable_hours / l_u1_tbl(l_Top_Org_Index).actual_denominator);
1745 l_u1_tbl(l_Top_Org_Index).act_util_percent := 100 * (l_u1_tbl(l_Top_Org_Index).actual_util_hours / l_u1_tbl(l_Top_Org_Index).actual_denominator);
1746 ELSE
1747 l_u1_tbl(l_Top_Org_Index).bill_hours_percent := NULL;
1748 l_u1_tbl(l_Top_Org_Index).act_util_percent := NULL;
1749 END IF;
1750
1751 IF nvl(l_u1_tbl(l_Top_Org_Index).total_resource_hours,0) <> 0 THEN
1752 l_u1_tbl(l_Top_Org_Index).res_hours_percent := 100 * (l_u1_tbl(l_Top_Org_Index).resource_hours / l_u1_tbl(l_Top_Org_Index).total_resource_hours);
1753 ELSE
1754 l_u1_tbl(l_Top_Org_Index).res_hours_percent := NULL;
1755 END IF;
1756
1757 --TODO:Does the change need to be null when both values are null??
1758 l_u1_tbl(l_Top_Org_Index).change_percent_1 := nvl(l_u1_tbl(l_Top_Org_Index).act_util_percent,0) - nvl(l_u1_tbl(l_Top_Org_Index).prior_act_util_percent,0);
1759 l_u1_tbl(l_Top_Org_Index).change_percent_2 := nvl(l_u1_tbl(l_Top_Org_Index).bill_hours_percent,0) - nvl(l_u1_tbl(l_Top_Org_Index).prior_bill_hours_percent,0);
1760 l_u1_tbl(l_Top_Org_Index).change_percent_3 := nvl(l_u1_tbl(l_Top_Org_Index).res_hours_percent,0) - nvl(l_u1_tbl(l_Top_Org_Index).prior_res_hours_percent,0);
1761
1762 --Columns for U1 only
1763 IF nvl(l_u1_tbl(l_Top_Org_Index).scheduled_denominator,0) <> 0 THEN
1764 l_u1_tbl(l_Top_Org_Index).sch_util_percent := 100 * (l_u1_tbl(l_Top_Org_Index).scheduled_util_hours / l_u1_tbl(l_Top_Org_Index).scheduled_denominator);
1765 ELSE
1766 l_u1_tbl(l_Top_Org_Index).sch_util_percent := NULL;
1767 END IF;
1768
1769 IF nvl(l_u1_tbl(l_Top_Org_Index).prior_missing_hours,0) <> 0 THEN
1770 l_u1_tbl(l_Top_Org_Index).missing_hours_percent := 100 * ((l_u1_tbl(l_Top_Org_Index).missing_hours - l_u1_tbl(l_Top_Org_Index).prior_missing_hours)/ l_u1_tbl(l_Top_Org_Index).prior_missing_hours);
1771 ELSE
1772 l_u1_tbl(l_Top_Org_Index).missing_hours_percent := NULL;
1773 END IF;
1774
1775 l_u1_tbl(l_Top_Org_Index).sch_var_percent := nvl(l_u1_tbl(l_Top_Org_Index).act_util_percent,0) - nvl(l_u1_tbl(l_Top_Org_Index).sch_util_percent,0);
1776
1777 END IF; --end p_view_by = OG
1778
1779 --Update local variables to include top level org for grand total
1780 IF l_Top_Org_Index is not null THEN
1781
1782 l_actual_capacity_hours := l_actual_capacity_hours + nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_CAPACITY_HOURS,0);
1783 l_missing_hours := l_missing_hours + nvl(l_u1_tbl(l_Top_Org_Index).MISSING_HOURS,0);
1784 l_actual_util_hours := l_actual_util_hours + nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_UTIL_HOURS,0);
1785 l_billable_hours := l_billable_hours + nvl(l_u1_tbl(l_Top_Org_Index).BILLABLE_HOURS,0);
1786 l_scheduled_util_hours := l_scheduled_util_hours + nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_UTIL_HOURS,0);
1787 l_scheduled_capacity_hours := l_scheduled_capacity_hours + nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_CAPACITY_HOURS,0);
1788 l_resource_hours := l_resource_hours + nvl(l_u1_tbl(l_Top_Org_Index).RESOURCE_HOURS,0);
1789 l_total_resource_hours := l_total_resource_hours + nvl(l_u1_tbl(l_Top_Org_Index).TOTAL_RESOURCE_HOURS,0);
1790 l_actual_denominator := l_actual_denominator + nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_DENOMINATOR,0);
1791 l_scheduled_denominator := l_scheduled_denominator + nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_DENOMINATOR,0);
1792 l_prior_actual_capacity_hours := l_prior_actual_capacity_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_CAPACITY_HOURS,0);
1793 l_prior_missing_hours := l_prior_missing_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_MISSING_HOURS,0);
1794 l_prior_actual_util_hours := l_prior_actual_util_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_UTIL_HOURS,0);
1795 l_prior_billable_hours := l_prior_billable_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_BILLABLE_HOURS,0);
1796 l_prior_sch_util_hours := l_prior_sch_util_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_UTIL_HOURS,0);
1797 l_prior_sch_capacity_hours := l_prior_sch_capacity_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_CAPACITY_HOURS,0);
1798 l_prior_resource_hours := l_prior_resource_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_RESOURCE_HOURS,0);
1799 l_prior_total_resource_hours := l_prior_total_resource_hours + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_TOTAL_RESOURCE_HOURS,0);
1800 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_DENOMINATOR,0);
1801 l_prior_scheduled_denominator := l_prior_scheduled_denominator + nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCHEDULED_DENOMINATOR,0);
1802 END IF;
1803
1804 IF l_u1_tbl.COUNT > 0 THEN
1805 FOR i IN 1..l_u1_tbl.COUNT
1806 LOOP
1807
1808 IF l_u1_tbl.EXISTS(i) THEN
1809
1810 /*Bug 2836444*/
1811 --Capacity is denormalized when context is view by UC or WT
1812 IF p_view_by = 'UC' OR p_view_by = 'WT' THEN
1813
1814 l_actual_denominator := l_u1_tbl(i).ACTUAL_DENOMINATOR;
1815 l_scheduled_denominator := l_u1_tbl(i).SCHEDULED_DENOMINATOR;
1816 l_prior_actual_denominator := l_u1_tbl(i).PRIOR_ACTUAL_DENOMINATOR;
1817
1818 END IF;
1819
1820 IF nvl(l_actual_denominator,0) <> 0 THEN
1821
1822 l_u1_tbl(i).PJI_REP_TOTAL_1 := (l_billable_hours/l_actual_denominator)*100;
1823 l_u1_tbl(i).PJI_REP_TOTAL_3 := (l_actual_util_hours/l_actual_denominator)*100;
1824
1825 END IF;
1826
1827 IF nvl(l_prior_actual_denominator,0) <> 0 THEN
1828
1829 l_u1_tbl(i).PJI_REP_TOTAL_2 := (l_prior_billable_hours/l_prior_actual_denominator)*100;
1830 l_u1_tbl(i).PJI_REP_TOTAL_4 := (l_prior_actual_util_hours/l_prior_actual_denominator)*100;
1831
1832 END IF;
1833
1834 IF nvl(l_total_resource_hours,0) <> 0 THEN
1835
1836 l_u1_tbl(i).PJI_REP_TOTAL_5 := (l_resource_hours/l_total_resource_hours)*100;
1837
1838 END IF;
1839
1840 IF nvl(l_prior_total_resource_hours,0) <> 0 THEN
1841
1842 l_u1_tbl(i).PJI_REP_TOTAL_6 := (l_prior_resource_hours/l_prior_total_resource_hours)*100;
1843
1844 END IF;
1845
1846 l_u1_tbl(i).PJI_REP_TOTAL_7 := l_u1_tbl(i).PJI_REP_TOTAL_1 - l_u1_tbl(i).PJI_REP_TOTAL_2;
1847 l_u1_tbl(i).PJI_REP_TOTAL_8 := l_u1_tbl(i).PJI_REP_TOTAL_3 - l_u1_tbl(i).PJI_REP_TOTAL_4;
1848 l_u1_tbl(i).PJI_REP_TOTAL_9 := l_u1_tbl(i).PJI_REP_TOTAL_5 - l_u1_tbl(i).PJI_REP_TOTAL_6;
1849
1850 --Columns for U1 only
1851 IF nvl(l_scheduled_denominator,0) <> 0 THEN
1852
1853 l_u1_tbl(i).PJI_REP_TOTAL_10 := (l_scheduled_util_hours/l_scheduled_denominator)*100;
1854
1855 END IF;
1856
1857 IF nvl(l_prior_missing_hours,0) <> 0 THEN
1858
1859 l_u1_tbl(i).PJI_REP_TOTAL_11 := ((l_missing_hours- l_prior_missing_hours)/l_prior_missing_hours)*100;
1860
1861 END IF;
1862
1863 l_u1_tbl(i).PJI_REP_TOTAL_12 := l_u1_tbl(i).PJI_REP_TOTAL_3 - l_u1_tbl(i).PJI_REP_TOTAL_10;
1864
1865 l_u1_tbl(i).PJI_REP_TOTAL_13 := l_missing_hours;
1866
1867 END IF; -- l_u1_tbl.EXISTS(i)
1868 END LOOP;
1869 END IF; --l_u1_tbl.COUNT > 0
1870
1871 IF l_Top_Org_Index is not null THEN
1872 --Delete record for top org if all values are 0 or null
1873 IF nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_CAPACITY_HOURS,0) = 0 AND
1874 nvl(l_u1_tbl(l_Top_Org_Index).MISSING_HOURS,0) = 0 AND
1875 nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_UTIL_HOURS,0) = 0 AND
1876 nvl(l_u1_tbl(l_Top_Org_Index).BILLABLE_HOURS,0) = 0 AND
1877 nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_UTIL_HOURS,0) = 0 AND
1878 nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_CAPACITY_HOURS,0) = 0 AND
1879 nvl(l_u1_tbl(l_Top_Org_Index).RESOURCE_HOURS,0) = 0 AND
1880 nvl(l_u1_tbl(l_Top_Org_Index).TOTAL_RESOURCE_HOURS,0) = 0 AND
1881 nvl(l_u1_tbl(l_Top_Org_Index).ACTUAL_DENOMINATOR,0) = 0 AND
1882 nvl(l_u1_tbl(l_Top_Org_Index).SCHEDULED_DENOMINATOR,0) = 0 AND
1883 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_CAPACITY_HOURS,0) = 0 AND
1884 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_MISSING_HOURS,0) = 0 AND
1885 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_UTIL_HOURS,0) = 0 AND
1886 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_BILLABLE_HOURS,0) = 0 AND
1887 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_UTIL_HOURS,0) = 0 AND
1888 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCH_CAPACITY_HOURS,0) = 0 AND
1889 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_RESOURCE_HOURS,0) = 0 AND
1890 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_TOTAL_RESOURCE_HOURS,0) = 0 AND
1891 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_ACTUAL_DENOMINATOR,0) = 0 AND
1892 nvl(l_u1_tbl(l_Top_Org_Index).PRIOR_SCHEDULED_DENOMINATOR,0) = 0 AND
1893 nvl(l_u1_tbl(l_Top_Org_Index).prior_res_hours_percent,0) = 0 AND
1894 nvl(l_u1_tbl(l_Top_Org_Index).prior_act_util_percent,0) = 0 AND
1895 nvl(l_u1_tbl(l_Top_Org_Index).prior_bill_hours_percent,0) = 0 AND
1896 nvl(l_u1_tbl(l_Top_Org_Index).bill_hours_percent,0) = 0 AND
1897 nvl(l_u1_tbl(l_Top_Org_Index).act_util_percent ,0) = 0 AND
1898 nvl(l_u1_tbl(l_Top_Org_Index).res_hours_percent,0) = 0 AND
1899 nvl(l_u1_tbl(l_Top_Org_Index).change_percent_1,0) = 0 AND
1900 nvl(l_u1_tbl(l_Top_Org_Index).change_percent_2,0) = 0 AND
1901 nvl(l_u1_tbl(l_Top_Org_Index).change_percent_3,0) = 0 AND
1902 nvl(l_u1_tbl(l_Top_Org_Index).sch_util_percent ,0) = 0 AND
1903 nvl(l_u1_tbl(l_Top_Org_Index).missing_hours_percent,0) = 0 AND
1904 nvl(l_u1_tbl(l_Top_Org_Index).sch_var_percent,0) = 0
1905 THEN
1906 l_u1_tbl.DELETE(l_Top_Org_Index);
1907 END IF;
1908 END IF;
1909
1910 /*
1911 ** Return the bulk collected table back to pmv.
1912 */
1913
1914 COMMIT;
1915 RETURN l_u1_tbl;
1916
1917 END PLSQLDriver_U1;
1918
1919 FUNCTION PLSQLDriver_U2 (
1920 p_operating_unit IN VARCHAR2 DEFAULT NULL,
1921 p_organization IN VARCHAR2,
1922 p_as_of_date IN NUMBER,
1923 p_period_type IN VARCHAR2,
1924 p_view_by IN VARCHAR2
1925 ) RETURN PJI_REP_U2_TBL
1926 IS
1927 PRAGMA AUTONOMOUS_TRANSACTION;
1928 l_u2_tbl PJI_REP_U2_TBL:=PJI_REP_U2_TBL();
1929 l_denominator VARCHAR2(25);
1930 l_labor_unit VARCHAR2(40);
1931 l_Top_Org_Index NUMBER;
1932 l_Top_Organization_Name VARCHAR2(240);
1933 BEGIN
1934 PJI_PMV_ENGINE.Convert_Operating_Unit (p_operating_unit, p_view_by);
1935 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
1936 , P_VIEW_BY => p_view_by
1937 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
1938 PJI_PMV_ENGINE.Convert_Time (p_as_of_date, p_period_type, p_view_by, 'Y');
1939
1940 /*
1941 * Get Utilization percentage denominator profile value
1942 */
1943 BEGIN
1944 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
1945 INTO l_denominator
1946 from dual;
1947
1948 EXCEPTION WHEN NO_DATA_FOUND THEN
1949 l_denominator := 'CAPACITY';
1950 END;
1951
1952 /*
1953 * Get report labor unit
1954 */
1955 BEGIN
1956 select report_labor_units
1957 into l_labor_unit
1958 from pji_system_settings;
1959
1960 EXCEPTION WHEN OTHERS THEN
1961 l_labor_unit := null;
1962 END;
1963
1964 SELECT PJI_REP_U2(org_id,
1965 organization_id,
1966 time_id,
1967 time_key,
1968 sum(actual_capacity_hours),
1969 sum(missing_hours),
1970 sum(actual_utilization_hours),
1971 sum(billable_hours),
1972 sum(nonbillable_hours),
1973 sum(training_hours),
1974 sum(scheduled_capacity_hours),
1975 sum(conf_scheduled_hours),
1976 sum(prov_scheduled_hours),
1977 sum(scheduled_utilization_hours),
1978 sum(decode(l_denominator, 'CAPACITY', actual_capacity_hours, actual_hours)),
1979 sum(decode(l_denominator, 'CAPACITY', scheduled_capacity_hours, actual_hours)),
1980 sum(prior_actual_util_hours),
1981 sum(prior_actual_capacity_hours),
1982 sum(decode(l_denominator, 'CAPACITY', prior_actual_capacity_hours, prior_actual_hours)),
1983 null,null,null,null,null,null)
1984 BULK COLLECT INTO l_u2_tbl
1985 /* Bug 3515594 */
1986 FROM (
1987 SELECT /*+ ORDERED */
1988 hou.name org_id,
1989 horg.name organization_id,
1990 time.name time_id,
1991 DECODE(p_view_by, 'TM', time.order_by_id, -1) time_key,
1992 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1993 actual_capacity_hours,
1994 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1995 missing_hours,
1996 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1997 actual_utilization_hours,
1998 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
1999 billable_hours,
2000 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2001 nonbillable_hours,
2002 training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2003 training_hours,
2004 (capacity_hrs - reduce_capacity_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2005 scheduled_capacity_hours,
2006 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2007 conf_scheduled_hours,
2008 prov_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2009 prov_scheduled_hours,
2010 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2011 scheduled_utilization_hours,
2012 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2013 actual_hours,
2014 0 prior_actual_util_hours,
2015 0 prior_actual_capacity_hours,
2016 0 prior_actual_hours
2017 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2018 PJI_PMV_TIME_DIM_TMP time,
2019 PJI_RM_ORGO_F_MV fct,
2020 PJI_PMV_ORG_DIM_TMP hou,
2021 PA_IMPLEMENTATIONS_ALL imp
2022 WHERE fct.expenditure_org_id = hou.id
2023 AND fct.expenditure_organization_id = horg.id
2024 AND fct.time_id = time.id
2025 AND fct.period_type_id = time.period_type
2026 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2027 AND time.id is not null
2028 AND hou.id = imp.org_id
2029 UNION ALL
2030 /* Bug 3515594 */
2031 SELECT /*+ ORDERED */
2032 hou.name org_id,
2033 horg.name organization_id,
2034 time.name time_id,
2035 DECODE(p_view_by, 'TM', time.order_by_id, -1) time_key,
2036 0 actual_capacity_hours,
2037 0 missing_hours,
2038 0 actual_utilization_hours,
2039 0 billable_hours,
2040 0 nonbillable_hours,
2041 0 training_hours,
2042 0 scheduled_capacity_hours,
2043 0 conf_scheduled_hours,
2044 0 prov_scheduled_hours,
2045 0 scheduled_utilization_hours,
2046 0 actual_hours,
2047 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2048 prior_actual_util_hours,
2049 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2050 prior_actual_capacity_hours,
2051 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2052 prior_actual_hours
2053 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2054 PJI_PMV_TIME_DIM_TMP time,
2055 PJI_RM_ORGO_F_MV fct,
2056 PJI_PMV_ORG_DIM_TMP hou,
2057 PA_IMPLEMENTATIONS_ALL imp
2058 WHERE fct.expenditure_org_id = hou.id
2059 AND fct.expenditure_organization_id = horg.id
2060 AND fct.time_id = time.prior_id
2061 AND fct.period_type_id = time.period_type
2062 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2063 AND time.prior_id is not null
2064 AND hou.id = imp.org_id
2065 UNION ALL
2066 SELECT '-1' org_id,
2067 '-1' organization_id,
2068 name time_id,
2069 order_by_id time_key,
2070 0 actual_capacity_hours,
2071 0 missing_hours,
2072 0 actual_utilization_hours,
2073 0 billable_hours,
2074 0 nonbillable_hours,
2075 0 training_hours,
2076 0 scheduled_capacity_hours,
2077 0 conf_scheduled_hours,
2078 0 prov_scheduled_hours,
2079 0 scheduled_utilization_hours,
2080 0 actual_hours,
2081 0 prior_actual_util_hours,
2082 0 prior_actual_capacity_hours,
2083 0 prior_actual_hours
2084 FROM PJI_PMV_TIME_DIM_TMP
2085 WHERE name <> '-1'
2086 )
2087 GROUP BY org_id,
2088 organization_id,
2089 time_key,
2090 time_id ORDER BY TIME_KEY ASC;
2091
2092 FOR i in 1..l_u2_tbl.COUNT
2093 LOOP
2094
2095 --Calculated columns processing is done below
2096 IF nvl(l_u2_tbl(i).actual_denominator,0) <> 0 THEN
2097 l_u2_tbl(i).act_util_percent := 100 * (l_u2_tbl(i).actual_utilization_hours / l_u2_tbl(i).actual_denominator);
2098 l_u2_tbl(i).bill_util_percent := 100 * (l_u2_tbl(i).billable_hours / l_u2_tbl(i).actual_denominator);
2099 l_u2_tbl(i).nonbill_util_percent := 100 * (l_u2_tbl(i).nonbillable_hours / l_u2_tbl(i).actual_denominator);
2100 l_u2_tbl(i).training_percent := 100 * (l_u2_tbl(i).training_hours / l_u2_tbl(i).actual_denominator);
2101
2102 ELSE
2103 l_u2_tbl(i).act_util_percent := NULL;
2104 l_u2_tbl(i).bill_util_percent := NULL;
2105 l_u2_tbl(i).nonbill_util_percent := NULL;
2106 l_u2_tbl(i).training_percent := NULL;
2107
2108 END IF;
2109
2110 IF nvl(l_u2_tbl(i).scheduled_denominator,0) <> 0 THEN
2111 l_u2_tbl(i).sch_util_percent := 100 * (l_u2_tbl(i).scheduled_utilization_hours / l_u2_tbl(i).scheduled_denominator);
2112 ELSE
2113 l_u2_tbl(i).sch_util_percent := NULL;
2114 END IF;
2115
2116 IF nvl(l_u2_tbl(i).prior_actual_denominator,0) <> 0 THEN
2117 l_u2_tbl(i).prior_util_percent := 100 * (l_u2_tbl(i).prior_actual_util_hours / l_u2_tbl(i).prior_actual_denominator);
2118 ELSE
2119 l_u2_tbl(i).prior_util_percent := NULL;
2120 END IF;
2121
2122 END LOOP;
2123
2124 COMMIT;
2125 RETURN l_u2_tbl;
2126
2127 END PLSQLDriver_U2;
2128
2129 FUNCTION PLSQLDriver_U3 (
2130 p_operating_unit IN VARCHAR2 DEFAULT NULL,
2131 p_organization IN VARCHAR2,
2132 p_as_of_date IN NUMBER,
2133 p_period_type IN VARCHAR2,
2134 p_view_by IN VARCHAR2,
2135 p_utilization_category IN VARCHAR2 DEFAULT NULL,
2136 p_work_type IN VARCHAR2 DEFAULT NULL,
2137 p_job_level IN VARCHAR2 DEFAULT NULL
2138 ) RETURN PJI_REP_U3_TBL
2139 IS
2140 PRAGMA AUTONOMOUS_TRANSACTION;
2141 l_u3_tbl PJI_REP_U3_TBL:=PJI_REP_U3_TBL();
2142 l_util_category_flag VARCHAR2(1);
2143 l_job_flag VARCHAR2(1);
2144 l_denominator VARCHAR2(25);
2145 l_labor_unit VARCHAR2(40);
2146 l_actual_hours NUMBER := 0;
2147 l_capacity_hours NUMBER := 0;
2148 l_missing_hours NUMBER := 0;
2149 l_utilization_hours NUMBER := 0;
2150 l_billable_hours NUMBER := 0;
2151 l_nonbillable_hours NUMBER := 0;
2152 l_training_hours NUMBER := 0;
2153 l_actual_denominator NUMBER := 0;
2154 l_prior_actual_hours NUMBER := 0;
2155 l_prior_capacity_hours NUMBER := 0;
2156 l_prior_utilization_hours NUMBER := 0;
2157 l_prior_billable_hours NUMBER := 0;
2158 l_prior_nonbillable_hours NUMBER := 0;
2159 l_prior_training_hours NUMBER := 0;
2160 l_prior_actual_denominator NUMBER := 0;
2161 l_Top_Org_Index NUMBER;
2162 l_Top_Organization_Name VARCHAR2(240);
2163 BEGIN
2164 PJI_PMV_ENGINE.Convert_Operating_Unit (p_operating_unit, p_view_by);
2165 PJI_PMV_ENGINE.Convert_Time (p_as_of_date, p_period_type, p_view_by, 'Y');
2166 l_util_category_flag := PJI_PMV_ENGINE.Convert_Util_Category(p_work_type, p_utilization_category, p_view_by);
2167 l_job_flag := PJI_PMV_ENGINE.Convert_Job_Level(null, p_job_level, p_view_by);
2168
2169 /*
2170 * Get Utilization percentage denominator profile value
2171 */
2172 BEGIN
2173 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
2174 INTO l_denominator
2175 from dual;
2176
2177 EXCEPTION WHEN NO_DATA_FOUND THEN
2178 l_denominator := 'CAPACITY';
2179 END;
2180
2181 /*
2182 * Get report labor unit
2183 */
2184 BEGIN
2185 select report_labor_units
2186 into l_labor_unit
2187 from pji_system_settings;
2188
2189 EXCEPTION WHEN OTHERS THEN
2190 l_labor_unit := null;
2191 END;
2192
2193 IF l_util_category_flag = 'N' AND l_job_flag = 'N' THEN
2194
2195 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
2196 , P_VIEW_BY => p_view_by
2197 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
2198
2199
2200 SELECT PJI_REP_U3(org_id,
2201 organization_id,
2202 time_id,
2203 time_key,
2204 util_category_id,
2205 work_type_id,
2206 job_level_id,
2207 sum(actual_hours),
2208 sum(capacity_hours),
2209 sum(missing_hours),
2210 sum(utilization_hours),
2211 sum(billable_hours),
2212 sum(nonbillable_hours),
2213 sum(training_hours),
2214 sum(decode(l_denominator, 'CAPACITY', capacity_hours, actual_hours)),
2215 sum(prior_actual_hours),
2216 sum(prior_capacity_hours),
2217 sum(prior_utilization_hours),
2218 sum(prior_billable_hours),
2219 sum(prior_nonbillable_hours),
2220 sum(prior_training_hours),
2221 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours, prior_actual_hours)),
2222 null,null,null,null,null,null,
2223 null,null,null,null,null,null,
2224 null,null,null,null,null,null,
2225 null,null,null,null
2226 )
2227 BULK COLLECT INTO l_u3_tbl
2228 /* Bug 3515594 */
2229 FROM (
2230 SELECT /*+ ORDERED */
2231 hou.name org_id,
2232 horg.name organization_id,
2233 time.name time_id,
2234 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2235 '-1' util_category_id,
2236 '-1' work_type_id,
2237 '-1' job_level_id,
2238 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2239 actual_hours,
2240 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2241 capacity_hours,
2242 missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2243 missing_hours,
2244 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2245 utilization_hours,
2246 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2247 billable_hours,
2248 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2249 nonbillable_hours,
2250 training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2251 training_hours,
2252 0 prior_actual_hours,
2253 0 prior_capacity_hours,
2254 0 prior_utilization_hours,
2255 0 prior_billable_hours,
2256 0 prior_nonbillable_hours,
2257 0 prior_training_hours
2258 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2259 PJI_PMV_TIME_DIM_TMP time,
2260 PJI_RM_ORGO_F_MV fct,
2261 PJI_PMV_ORG_DIM_TMP hou,
2262 PA_IMPLEMENTATIONS_ALL imp
2263 WHERE fct.expenditure_org_id = hou.id
2264 AND fct.expenditure_organization_id = horg.id
2265 AND fct.time_id = time.id
2266 AND fct.period_type_id = time.period_type
2267 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2268 AND time.id is not null
2269 AND hou.id = imp.org_id
2270 UNION ALL
2271 /* Bug 3515594 */
2272 SELECT /*+ ORDERED */
2273 hou.name org_id,
2274 horg.name organization_id,
2275 time.name time_id,
2276 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2277 '-1' util_category_id,
2278 '-1' work_type_id,
2279 '-1' job_level_id,
2280 0 actual_hours,
2281 0 capacity_hours,
2282 0 missing_hours,
2283 0 utilization_hours,
2284 0 billable_hours,
2285 0 nonbillable_hours,
2286 0 training_hours,
2287 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2288 prior_actual_hours,
2289 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2290 prior_capacity_hours,
2291 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2292 prior_utilization_hours,
2293 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2294 prior_billable_hours,
2295 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2296 prior_nonbillable_hours,
2297 training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2298 prior_training_hours
2299 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2300 PJI_PMV_TIME_DIM_TMP time,
2301 PJI_RM_ORGO_F_MV fct,
2302 PJI_PMV_ORG_DIM_TMP hou,
2303 PA_IMPLEMENTATIONS_ALL imp
2304 WHERE fct.expenditure_org_id = hou.id
2305 AND fct.expenditure_organization_id = horg.id
2306 AND fct.time_id = time.prior_id
2307 AND fct.period_type_id = time.period_type
2308 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2309 AND time.prior_id is not null
2310 AND hou.id = imp.org_id
2311 UNION ALL
2312 SELECT '-1' org_id,
2313 name organization_id,
2314 '-1' time_id,
2315 -1 time_key,
2316 '-1' util_category_id,
2317 '-1' work_type_id,
2318 '-1' job_level_id,
2319 0 actual_hours,
2320 0 capacity_hours,
2321 0 missing_hours,
2322 0 utilization_hours,
2323 0 billable_hours,
2324 0 nonbillable_hours,
2325 0 training_hours,
2326 0 prior_actual_hours,
2327 0 prior_capacity_hours,
2328 0 prior_utilization_hours,
2329 0 prior_billable_hours,
2330 0 prior_nonbillable_hours,
2331 0 prior_training_hours
2332 FROM PJI_PMV_ORGZ_DIM_TMP
2333 WHERE name <> '-1'
2334 UNION ALL
2335 SELECT '-1' org_id,
2336 '-1' organization_id,
2337 name time_id,
2338 order_by_id time_key,
2339 '-1' util_category_id,
2340 '-1' work_type_id,
2341 '-1' job_level_id,
2342 0 actual_hours,
2343 0 capacity_hours,
2344 0 missing_hours,
2345 0 utilization_hours,
2346 0 billable_hours,
2347 0 nonbillable_hours,
2348 0 training_hours,
2349 0 prior_actual_hours,
2350 0 prior_capacity_hours,
2351 0 prior_utilization_hours,
2352 0 prior_billable_hours,
2353 0 prior_nonbillable_hours,
2354 0 prior_training_hours
2355 FROM PJI_PMV_TIME_DIM_TMP
2356 WHERE name <> '-1'
2357 )
2358 GROUP BY org_id,
2359 organization_id,
2360 time_id,
2361 time_key,
2362 util_category_id,
2363 work_type_id,
2364 job_level_id;
2365
2366 ELSIF l_job_flag = 'N' THEN
2367
2368 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
2369 , P_VIEW_BY => p_view_by
2370 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
2371
2372
2373 SELECT PJI_REP_U3(org_id,
2374 organization_id,
2375 time_id,
2376 time_key,
2377 util_category_id,
2378 work_type_id,
2379 job_level_id,
2380 sum(actual_hours),
2381 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-act_reduce_capacity_hours)),
2382 sum(decode (p_view_by, 'UC', null, 'WT',null, missing_hours)),
2383 sum(utilization_hours),
2384 sum(billable_hours),
2385 sum(nonbillable_hours),
2386 sum(training_hours),
2387 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
2388 sum(prior_actual_hours),
2389 sum(decode (p_view_by, 'UC', null, 'WT',null, prior_act_capacity_hours-prior_act_red_capacity_hours)),
2390 sum(prior_utilization_hours),
2391 sum(prior_billable_hours),
2392 sum(prior_nonbillable_hours),
2393 sum(prior_training_hours),
2394 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
2395 prior_total_actual_hours)),
2396 null,null,null,null,null,null,
2397 null,null,null,null,null,null,
2398 null,null,null,null,null,null,
2399 null,null,null,null
2400 )
2401 BULK COLLECT INTO l_u3_tbl
2402 /* Bug 3515594 */
2403 FROM (
2404 SELECT /*+ ORDERED */
2405 hou.name org_id,
2406 horg.name organization_id,
2407 time.name time_id,
2408 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2409 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
2410 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
2411 '-1' job_level_id,
2412 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2413 actual_hours,
2414 0 capacity_hours,
2415 0 act_reduce_capacity_hours,
2416 null missing_hours,
2417 0 total_actual_hours,
2418 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) *
2419 worktype.org_utilization_percentage / 100
2420 utilization_hours,
2421 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
2422 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2423 billable_hours,
2424 ((fct.total_hrs_a - fct.bill_hrs_a) * worktype.org_utilization_percentage / 100)
2425 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2426 nonbillable_hours,
2427 (CASE WHEN worktype.training_flag = 'Y' THEN
2428 fct.total_hrs_a
2429 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2430 training_hours,
2431 0 prior_actual_hours,
2432 0 prior_act_capacity_hours,
2433 0 prior_act_red_capacity_hours,
2434 0 prior_total_actual_hours,
2435 0 prior_utilization_hours,
2436 0 prior_billable_hours,
2437 0 prior_nonbillable_hours,
2438 0 prior_training_hours
2439 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2440 PJI_PMV_TIME_DIM_TMP time,
2441 PJI_PMV_WT_DIM_TMP wt,
2442 PJI_RM_WTO_F_MV fct,
2443 PJI_PMV_ORG_DIM_TMP hou,
2444 PA_WORK_TYPES_B worktype,
2445 PA_IMPLEMENTATIONS_ALL imp
2446 WHERE fct.expenditure_org_id = hou.id
2447 AND fct.expenditure_organization_id = horg.id
2448 AND wt.id = worktype.work_type_id
2449 AND fct.work_type_id = wt.id
2450 AND fct.time_id = time.id
2451 AND fct.period_type_id = time.period_type
2452 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2453 AND time.id is not null
2454 AND hou.id = imp.org_id
2455 UNION ALL
2456 /* Bug 3515594 */
2457 SELECT /*+ ORDERED */
2458 hou.name org_id,
2459 horg.name organization_id,
2460 time.name time_id,
2461 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2462 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
2463 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
2464 '-1' job_level_id,
2465 0 actual_hours,
2466 0 capacity_hours,
2467 0 act_reduce_capacity_hours,
2468 null missing_hours,
2469 0 total_actual_hours,
2470 0 utilization_hours,
2471 0 billable_hours,
2472 0 nonbillable_hours,
2473 0 training_hours,
2474 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2475 prior_actual_hours,
2476 0 prior_act_capacity_hours,
2477 0 prior_act_red_capacity_hours,
2478 0 prior_total_actual_hours,
2479 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
2480 worktype.org_utilization_percentage / 100
2481 prior_utilization_hours,
2482 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
2483 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2484 prior_billable_hours,
2485 ((fct.total_hrs_a-fct.bill_hrs_a) * worktype.org_utilization_percentage / 100)
2486 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2487 prior_nonbillable_hours,
2488 (CASE WHEN worktype.training_flag = 'Y' THEN
2489 fct.total_hrs_a
2490 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2491 prior_training_hours
2492 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2493 PJI_PMV_TIME_DIM_TMP time,
2494 PJI_PMV_WT_DIM_TMP wt,
2495 PJI_RM_WTO_F_MV fct,
2496 PJI_PMV_ORG_DIM_TMP hou,
2497 PA_WORK_TYPES_B worktype,
2498 PA_IMPLEMENTATIONS_ALL imp
2499 WHERE fct.expenditure_org_id = hou.id
2500 AND fct.expenditure_organization_id = horg.id
2501 AND wt.id = worktype.work_type_id
2502 AND fct.work_type_id = wt.id
2503 AND fct.time_id = time.prior_id
2504 AND fct.period_type_id = time.period_type
2505 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2506 AND time.prior_id is not null
2507 AND hou.id = imp.org_id
2508 UNION ALL
2509 SELECT '-1' org_id,
2510 name organization_id,
2511 '-1' time_id,
2512 -1 time_key,
2513 '-1' util_category_id,
2514 '-1' work_type_id,
2515 '-1' job_level_id,
2516 0 actual_hours,
2517 0 capacity_hours,
2518 0 act_reduce_capacity_hours,
2519 null missing_hours,
2520 0 total_actual_hours,
2521 0 utilization_hours,
2522 0 billable_hours,
2523 0 nonbillable_hours,
2524 0 training_hours,
2525 0 prior_actual_hours,
2526 0 prior_act_capacity_hours,
2527 0 prior_act_red_capacity_hours,
2528 0 prior_total_actual_hours,
2529 0 prior_utilization_hours,
2530 0 prior_billable_hours,
2531 0 prior_nonbillable_hours,
2532 0 prior_training_hours
2533 FROM PJI_PMV_ORGZ_DIM_TMP
2534 WHERE name <> '-1'
2535 UNION ALL
2536 SELECT '-1' org_id,
2537 '-1' organization_id,
2538 '-1' time_id,
2539 -1 time_key,
2540 decode(p_view_by, 'UC', name, '-1') util_category_id,
2541 decode(p_view_by, 'WT', name, '-1') work_type_id,
2542 '-1' job_level_id,
2543 0 actual_hours,
2544 0 capacity_hours,
2545 0 act_reduce_capacity_hours,
2546 null missing_hours,
2547 0 total_actual_hours,
2548 0 utilization_hours,
2549 0 billable_hours,
2550 0 nonbillable_hours,
2551 0 training_hours,
2552 0 prior_actual_hours,
2553 0 prior_act_capacity_hours,
2554 0 prior_act_red_capacity_hours,
2555 0 prior_total_actual_hours,
2556 0 prior_utilization_hours,
2557 0 prior_billable_hours,
2558 0 prior_nonbillable_hours,
2559 0 prior_training_hours
2560 FROM PJI_PMV_WT_DIM_TMP
2561 WHERE name <> '-1'
2562 UNION ALL
2563 SELECT '-1' org_id,
2564 '-1' organization_id,
2565 name time_id,
2566 order_by_id time_key,
2567 '-1' util_category_id,
2568 '-1' work_type_id,
2569 '-1' job_level_id,
2570 0 actual_hours,
2571 0 capacity_hours,
2572 0 act_reduce_capacity_hours,
2573 null missing_hours,
2574 0 total_actual_hours,
2575 0 utilization_hours,
2576 0 billable_hours,
2577 0 nonbillable_hours,
2578 0 training_hours,
2579 0 prior_actual_hours,
2580 0 prior_act_capacity_hours,
2581 0 prior_act_red_capacity_hours,
2582 0 prior_total_actual_hours,
2583 0 prior_utilization_hours,
2584 0 prior_billable_hours,
2585 0 prior_nonbillable_hours,
2586 0 prior_training_hours
2587 FROM PJI_PMV_TIME_DIM_TMP
2588 WHERE name <> '-1'
2589 UNION ALL -- added for current year capacity_hours
2590 SELECT
2591 FACT.org_id,
2592 FACT.organization_id,
2593 FACT.time_id,
2594 FACT.time_key,
2595 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
2596 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
2597 '-1' job_level_id,
2598 0 actual_hours,
2599 FACT.capacity_hours,
2600 FACT.reduce_capacity_hrs_a act_reduce_capacity_hours,
2601 FACT.missing_hrs_a missing_hours,
2602 FACT.total_actual_hours total_actual_hours,
2603 0 utilization_hours,
2604 0 billable_hours,
2605 0 nonbillable_hours,
2606 0 training_hours,
2607 0 prior_actual_hours,
2608 0 prior_act_capacity_hours,
2609 0 prior_act_red_capacity_hours,
2610 0 prior_total_actual_hours,
2611 0 prior_utilization_hours,
2612 0 prior_billable_hours,
2613 0 prior_nonbillable_hours,
2614 0 prior_training_hours
2615 FROM
2616 /* Bug 3515594 */
2617 (SELECT /*+ ORDERED */
2618 hou.name org_id,
2619 horg.name organization_id,
2620 time.name time_id,
2621 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2622 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2623 capacity_hours,
2624 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2625 total_actual_hours,
2626
2627 fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2628 missing_hrs_a,
2629 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2630 reduce_capacity_hrs_a
2631 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2632 PJI_PMV_TIME_DIM_TMP time,
2633 PJI_RM_ORGO_F_MV fct,
2634 PJI_PMV_ORG_DIM_TMP hou,
2635 PA_IMPLEMENTATIONS_ALL imp
2636 WHERE fct.expenditure_org_id = hou.id
2637 AND fct.expenditure_organization_id = horg.id
2638 AND fct.time_id = time.id
2639 AND fct.period_type_id = time.period_type
2640 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2641 AND time.id is not null
2642 AND hou.id = imp.org_id ) FACT,
2643 (SELECT distinct WT.name
2644 FROM PJI_PMV_WT_DIM_TMP wt ) WT
2645 UNION ALL -- added for prior year capacity_hours
2646 SELECT
2647 FACT.org_id,
2648 FACT.organization_id,
2649 FACT.time_id,
2650 FACT.time_key,
2651 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
2652 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
2653 '-1' job_level_id,
2654 0 actual_hours,
2655 0 capacity_hours,
2656 0 act_reduce_capacity_hours,
2657 null missing_hours,
2658 0 total_actual_hours,
2659 0 utilization_hours,
2660 0 billable_hours,
2661 0 nonbillable_hours,
2662 0 training_hours,
2663 0 prior_actual_hours,
2664 FACT.capacity_hours prior_act_capacity_hours,
2665 FACT.reduce_capacity_hrs_a prior_act_red_capacity_hours,
2666 FACT.total_actual_hours prior_total_actual_hours,
2667 0 prior_utilization_hours,
2668 0 prior_billable_hours,
2669 0 prior_nonbillable_hours,
2670 0 prior_training_hours
2671 FROM
2672 /* Bug 3515594 */
2673 (SELECT /*+ ORDERED */
2674 hou.name org_id,
2675 horg.name organization_id,
2676 time.name time_id,
2677 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2678 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2679 capacity_hours,
2680 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2681 total_actual_hours,
2682
2683 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2684 reduce_capacity_hrs_a
2685 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2686 PJI_PMV_TIME_DIM_TMP time,
2687 PJI_RM_ORGO_F_MV fct,
2688 PJI_PMV_ORG_DIM_TMP hou,
2689 PA_IMPLEMENTATIONS_ALL imp
2690 WHERE fct.expenditure_org_id = hou.id
2691 AND fct.expenditure_organization_id = horg.id
2692 AND fct.time_id = time.prior_id
2693 AND fct.period_type_id = time.period_type
2694 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2695 AND time.prior_id is not null
2696 AND hou.id = imp.org_id ) FACT,
2697 (SELECT distinct WT.name
2698 FROM PJI_PMV_WT_DIM_TMP wt ) WT
2699 )
2700 GROUP BY org_id,
2701 organization_id,
2702 time_id,
2703 time_key,
2704 util_category_id,
2705 work_type_id,
2706 job_level_id;
2707
2708
2709 ELSIF l_util_category_flag = 'N' THEN
2710
2711 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
2712 , P_VIEW_BY => p_view_by
2713 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
2714
2715
2716 SELECT PJI_REP_U3(org_id,
2717 organization_id,
2718 time_id,
2719 time_key,
2720 util_category_id,
2721 work_type_id,
2722 job_level_id,
2723 sum(actual_hours),
2724 sum(capacity_hours - reduce_capacity_hrs_a),
2725 sum(missing_hours),
2726 sum(utilization_hours),
2727 sum(billable_hours),
2728 sum(nonbillable_hours),
2729 sum(training_hours),
2730 sum(decode(l_denominator, 'CAPACITY', capacity_hours - reduce_capacity_hrs_a, actual_hours)),
2731 sum(prior_actual_hours),
2732 sum(prior_capacity_hours - prior_reduce_capacity_hrs_a),
2733 sum(prior_utilization_hours),
2734 sum(prior_billable_hours),
2735 sum(prior_nonbillable_hours),
2736 sum(prior_training_hours),
2737 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours - prior_reduce_capacity_hrs_a, prior_actual_hours)),
2738 null,null,null,null,null,null,
2739 null,null,null,null,null,null,
2740 null,null,null,null,null,null,
2741 null,null,null,null
2742 )
2743 BULK COLLECT INTO l_u3_tbl
2744 /* Bug 3515594 */
2745 FROM (
2746 SELECT /*+ ORDERED */
2747 hou.name org_id,
2748 horg.name organization_id,
2749 time.name time_id,
2750 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2751 '-1' util_category_id,
2752 '-1' work_type_id,
2753 job.name job_level_id,
2754 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2755 actual_hours,
2756 capacity_hrs capacity_hours,
2757 reduce_capacity_hrs_a reduce_capacity_hrs_a,
2758 missing_hrs_a missing_hours,
2759 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2760 utilization_hours,
2761 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2762 billable_hours,
2763 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2764 nonbillable_hours,
2765 training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2766 training_hours,
2767 0 prior_actual_hours,
2768 0 prior_capacity_hours,
2769 0 prior_reduce_capacity_hrs_a,
2770 0 prior_utilization_hours,
2771 0 prior_billable_hours,
2772 0 prior_nonbillable_hours,
2773 0 prior_training_hours
2774 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2775 PJI_PMV_TIME_DIM_TMP time,
2776 PJI_PMV_JB_DIM_TMP job,
2777 PJI_RM_JOBO_F_MV fct,
2778 PJI_PMV_ORG_DIM_TMP hou,
2779 PA_IMPLEMENTATIONS_ALL imp
2780 WHERE fct.expenditure_org_id = hou.id
2781 AND fct.expenditure_organization_id = horg.id
2782 AND fct.job_id = job.id
2783 AND fct.time_id = time.id
2784 AND fct.period_type_id = time.period_type
2785 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2786 AND time.id is not null
2787 AND hou.id = imp.org_id
2788 UNION ALL
2789 /* Bug 3515594 */
2790 SELECT /*+ ORDERED */
2791 hou.name org_id,
2792 horg.name organization_id,
2793 time.name time_id,
2794 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2795 '-1' util_category_id,
2796 '-1' work_type_id,
2797 job.name job_level_id,
2798 0 actual_hours,
2799 0 capacity_hours,
2800 0 reduce_capacity_hrs_a,
2801 null missing_hours,
2802 0 utilization_hours,
2803 0 billable_hours,
2804 0 nonbillable_hours,
2805 0 training_hours,
2806 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2807 prior_actual_hours,
2808 capacity_hrs prior_capacity_hours,
2809 reduce_capacity_hrs_a prior_reduce_capacity_hrs_a,
2810 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2811 prior_utilization_hours,
2812 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2813 prior_billable_hours,
2814 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2815 prior_nonbillable_hours,
2816 training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2817 prior_training_hours
2818 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2819 PJI_PMV_TIME_DIM_TMP time,
2820 PJI_PMV_JB_DIM_TMP job,
2821 PJI_RM_JOBO_F_MV fct,
2822 PJI_PMV_ORG_DIM_TMP hou,
2823 PA_IMPLEMENTATIONS_ALL imp
2824 WHERE fct.expenditure_org_id = hou.id
2825 AND fct.expenditure_organization_id = horg.id
2826 AND fct.job_id = job.id
2827 AND fct.time_id = time.prior_id
2828 AND fct.period_type_id = time.period_type
2829 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
2830 AND time.prior_id is not null
2831 AND hou.id = imp.org_id
2832 UNION ALL
2833 SELECT '-1' org_id,
2834 name organization_id,
2835 '-1' time_id,
2836 -1 time_key,
2837 '-1' util_category_id,
2838 '-1' work_type_id,
2839 '-1' job_level_id,
2840 0 actual_hours,
2841 0 capacity_hours,
2842 0 reduce_capacity_hrs_a,
2843 null missing_hours,
2844 0 utilization_hours,
2845 0 billable_hours,
2846 0 nonbillable_hours,
2847 0 training_hours,
2848 0 prior_actual_hours,
2849 0 prior_capacity_hours,
2850 0 prior_reduce_capacity_hrs_a,
2851 0 prior_utilization_hours,
2852 0 prior_billable_hours,
2853 0 prior_nonbillable_hours,
2854 0 prior_training_hours
2855 FROM PJI_PMV_ORGZ_DIM_TMP
2856 WHERE name <> '-1'
2857 UNION ALL
2858 SELECT '-1' org_id,
2859 '-1' organization_id,
2860 '-1' time_id,
2861 -1 time_key,
2862 '-1' util_category_id,
2863 '-1' work_type_id,
2864 name job_level_id,
2865 0 actual_hours,
2866 0 capacity_hours,
2867 0 reduce_capacity_hrs_a,
2868 null missing_hours,
2869 0 utilization_hours,
2870 0 billable_hours,
2871 0 nonbillable_hours,
2872 0 training_hours,
2873 0 prior_actual_hours,
2874 0 prior_capacity_hours,
2875 0 prior_reduce_capacity_hrs_a,
2876 0 prior_utilization_hours,
2877 0 prior_billable_hours,
2878 0 prior_nonbillable_hours,
2879 0 prior_training_hours
2880 FROM PJI_PMV_JB_DIM_TMP
2881 WHERE name <> '-1'
2882 UNION ALL
2883 SELECT '-1' org_id,
2884 '-1' organization_id,
2885 name time_id,
2886 order_by_id time_key,
2887 '-1' util_category_id,
2888 '-1' work_type_id,
2889 '-1' job_level_id,
2890 0 actual_hours,
2891 0 capacity_hours,
2892 0 reduce_capacity_hrs_a,
2893 null missing_hours,
2894 0 utilization_hours,
2895 0 billable_hours,
2896 0 nonbillable_hours,
2897 0 training_hours,
2898 0 prior_actual_hours,
2899 0 prior_capacity_hours,
2900 0 prior_reduce_capacity_hrs_a,
2901 0 prior_utilization_hours,
2902 0 prior_billable_hours,
2903 0 prior_nonbillable_hours,
2904 0 prior_training_hours
2905 FROM PJI_PMV_TIME_DIM_TMP
2906 WHERE name <> '-1'
2907 )
2908 GROUP BY org_id,
2909 organization_id,
2910 time_id,
2911 time_key,
2912 util_category_id,
2913 work_type_id,
2914 job_level_id;
2915
2916 ELSE
2917
2918 PJI_PMV_ENGINE.Convert_Organization(p_Organization, p_view_by);
2919
2920
2921 SELECT PJI_REP_U3(org_id,
2922 organization_id,
2923 time_id,
2924 time_key,
2925 util_category_id,
2926 work_type_id,
2927 job_level_id,
2928 sum(actual_hours),
2929 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-act_reduce_capacity_hours)),
2930 sum(decode (p_view_by, 'UC', null, 'WT',null, missing_hours)),
2931 sum(utilization_hours),
2932 sum(billable_hours),
2933 sum(nonbillable_hours),
2934 sum(training_hours),
2935 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
2936 sum(prior_actual_hours),
2937 sum(decode (p_view_by, 'UC', null, 'WT',null, prior_act_capacity_hours-prior_act_red_capacity_hours)),
2938 sum(prior_utilization_hours),
2939 sum(prior_billable_hours),
2940 sum(prior_nonbillable_hours),
2941 sum(prior_training_hours),
2942 sum(decode(l_denominator, 'CAPACITY', prior_act_capacity_hours-prior_act_red_capacity_hours,
2943 prior_total_actual_hours)),
2944 null,null,null,null,null,null,
2945 null,null,null,null,null,null,
2946 null,null,null,null,null,null,
2947 null,null,null,null)
2948 BULK COLLECT INTO l_u3_tbl
2949 /* Bug 3515594 */
2950 FROM (
2951 SELECT /*+ ORDERED */
2952 hou.name org_id,
2953 decode(p_view_by, 'OG', horg.name, -1) organization_id,
2954 time.name time_id,
2955 DECODE(p_view_by, 'TM', time.id, -1) time_key,
2956 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
2957 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
2958 decode(p_view_by, 'JL', job.name , '-1') job_level_id,
2959 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2960 actual_hours,
2961 0 capacity_hours,
2962 0 act_reduce_capacity_hours,
2963 null missing_hours,
2964 0 total_actual_hours,
2965 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
2966 worktype.org_utilization_percentage / 100
2967 utilization_hours,
2968 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
2969 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2970 billable_hours,
2971 ((fct.total_hrs_a - fct.bill_hrs_a) * worktype.org_utilization_percentage / 100)
2972 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2973 nonbillable_hours,
2974 (CASE WHEN worktype.training_flag = 'Y' THEN
2975 fct.total_hrs_a
2976 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
2977 training_hours,
2978 0 prior_actual_hours,
2979 0 prior_act_capacity_hours,
2980 0 prior_act_red_capacity_hours,
2981 0 prior_total_actual_hours,
2982 0 prior_utilization_hours,
2983 0 prior_billable_hours,
2984 0 prior_nonbillable_hours,
2985 0 prior_training_hours
2986 FROM PJI_PMV_ORGZ_DIM_TMP horg,
2987 PJI_PMV_TIME_DIM_TMP time,
2988 PJI_PMV_WT_DIM_TMP wt,
2989 PJI_RM_RES_WT_F fct,
2990 PJI_PMV_ORG_DIM_TMP hou,
2991 PJI_PMV_JB_DIM_TMP job,
2992 PA_WORK_TYPES_B worktype,
2993 PA_IMPLEMENTATIONS_ALL imp
2994 WHERE fct.expenditure_org_id = hou.id
2995 AND fct.expenditure_organization_id = horg.id
2996 AND wt.id = worktype.work_type_id
2997 AND fct.work_type_id = wt.id
2998 AND fct.job_id = job.id
2999 AND fct.time_id = time.id
3000 AND fct.period_type_id = time.period_type
3001 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3002 AND time.id is not null
3003 AND hou.id = imp.org_id
3004 UNION ALL
3005 /* Bug 3515594 */
3006 SELECT /*+ ORDERED */
3007 hou.name org_id,
3008 decode(p_view_by, 'OG', horg.name, -1) organization_id,
3009 time.name time_id,
3010 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3011 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
3012 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
3013 decode(p_view_by, 'JL', job.name , '-1') job_level_id,
3014 0 actual_hours,
3015 0 capacity_hours,
3016 0 act_reduce_capacity_hours,
3017 null missing_hours,
3018 0 total_actual_hours,
3019 0 utilization_hours,
3020 0 billable_hours,
3021 0 nonbillable_hours,
3022 0 training_hours,
3023 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3024 prior_actual_hours,
3025 0 prior_act_capacity_hours,
3026 0 prior_act_red_capacity_hours,
3027 0 prior_total_actual_hours,
3028 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) *
3029 worktype.org_utilization_percentage / 100
3030 prior_utilization_hours,
3031 (fct.bill_hrs_a * worktype.org_utilization_percentage / 100)
3032 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3033 prior_billable_hours,
3034 ((fct.total_hrs_a-fct.bill_hrs_a) * worktype.org_utilization_percentage / 100)
3035 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3036 prior_nonbillable_hours,
3037 (CASE WHEN worktype.training_flag = 'Y' THEN
3038 fct.total_hrs_a
3039 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3040 prior_training_hours
3041 FROM PJI_PMV_ORGZ_DIM_TMP horg,
3042 PJI_PMV_TIME_DIM_TMP time,
3043 PJI_PMV_WT_DIM_TMP wt,
3044 PJI_RM_RES_WT_F fct,
3045 PJI_PMV_ORG_DIM_TMP hou,
3046 PJI_PMV_JB_DIM_TMP job,
3047 PA_WORK_TYPES_B worktype,
3048 PA_IMPLEMENTATIONS_ALL imp
3049 WHERE fct.expenditure_org_id = hou.id
3050 AND fct.expenditure_organization_id = horg.id
3051 AND wt.id = worktype.work_type_id
3052 AND fct.work_type_id = wt.id
3053 AND fct.job_id = job.id
3054 AND fct.time_id = time.prior_id
3055 AND fct.period_type_id = time.period_type
3056 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3057 AND time.prior_id is not null
3058 AND hou.id = imp.org_id
3059 UNION ALL
3060 SELECT '-1' org_id,
3061 decode(p_view_by, 'OG', name, -1) organization_id,
3062 '-1' time_id,
3063 -1 time_key,
3064 '-1' util_category_id,
3065 '-1' work_type_id,
3066 '-1' job_level_id,
3067 0 actual_hours,
3068 0 capacity_hours,
3069 0 act_reduce_capacity_hours,
3070 null missing_hours,
3071 0 total_actual_hours,
3072 0 utilization_hours,
3073 0 billable_hours,
3074 0 nonbillable_hours,
3075 0 training_hours,
3076 0 prior_actual_hours,
3077 0 prior_act_capacity_hours,
3078 0 prior_act_red_capacity_hours,
3079 0 prior_total_actual_hours,
3080 0 prior_utilization_hours,
3081 0 prior_billable_hours,
3082 0 prior_nonbillable_hours,
3083 0 prior_training_hours
3084 FROM PJI_PMV_ORGZ_DIM_TMP
3085 WHERE name <> '-1'
3086 UNION ALL
3087 SELECT '-1' org_id,
3088 '-1' organization_id,
3089 '-1' time_id,
3090 -1 time_key,
3091 decode(p_view_by, 'UC', name, '-1') util_category_id,
3092 decode(p_view_by, 'WT', name, '-1') work_type_id,
3093 '-1' job_level_id,
3094 0 actual_hours,
3095 0 capacity_hours,
3096 0 act_reduce_capacity_hours,
3097 null missing_hours,
3098 0 total_actual_hours,
3099 0 utilization_hours,
3100 0 billable_hours,
3101 0 nonbillable_hours,
3102 0 training_hours,
3103 0 prior_actual_hours,
3104 0 prior_act_capacity_hours,
3105 0 prior_act_red_capacity_hours,
3106 0 prior_total_actual_hours,
3107 0 prior_utilization_hours,
3108 0 prior_billable_hours,
3109 0 prior_nonbillable_hours,
3110 0 prior_training_hours
3111 FROM PJI_PMV_WT_DIM_TMP
3112 WHERE name <> '-1'
3113 UNION ALL
3114 SELECT '-1' org_id,
3115 '-1' organization_id,
3116 '-1' time_id,
3117 -1 time_key,
3118 '-1' util_category_id,
3119 '-1' work_type_id,
3120 name job_level_id,
3121 0 actual_hours,
3122 0 capacity_hours,
3123 0 act_reduce_capacity_hours,
3124 null missing_hours,
3125 0 total_actual_hours,
3126 0 utilization_hours,
3127 0 billable_hours,
3128 0 nonbillable_hours,
3129 0 training_hours,
3130 0 prior_actual_hours,
3131 0 prior_act_capacity_hours,
3132 0 prior_act_red_capacity_hours,
3133 0 prior_total_actual_hours,
3134 0 prior_utilization_hours,
3135 0 prior_billable_hours,
3136 0 prior_nonbillable_hours,
3137 0 prior_training_hours
3138 FROM PJI_PMV_JB_DIM_TMP
3139 WHERE name <> '-1'
3140 UNION ALL
3141 SELECT '-1' org_id,
3142 '-1' organization_id,
3143 name time_id,
3144 order_by_id time_key,
3145 '-1' util_category_id,
3146 '-1' work_type_id,
3147 '-1' job_level_id,
3148 0 actual_hours,
3149 0 capacity_hours,
3150 0 act_reduce_capacity_hours,
3151 null missing_hours,
3152 0 total_actual_hours,
3153 0 utilization_hours,
3154 0 billable_hours,
3155 0 nonbillable_hours,
3156 0 training_hours,
3157 0 prior_actual_hours,
3158 -- 0 prior_capacity_hours,
3159 0 prior_act_capacity_hours,
3160 0 prior_act_red_capacity_hours,
3161 0 prior_total_actual_hours,
3162 0 prior_utilization_hours,
3163 0 prior_billable_hours,
3164 0 prior_nonbillable_hours,
3165 0 prior_training_hours
3166 FROM PJI_PMV_TIME_DIM_TMP
3167 WHERE name <> '-1'
3168 UNION ALL -- added for current year capacity_hours
3169 SELECT
3170 FACT.org_id,
3171 FACT.organization_id,
3172 FACT.time_id,
3173 FACT.time_key,
3174 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
3175 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
3176 decode(p_view_by, 'JL', FACT.job_level_id , '-1') job_level_id,
3177 0 actual_hours,
3178 FACT.capacity_hours capacity_hours,
3179 FACT.reduce_capacity_hrs_a act_reduce_capacity_hours,
3180 FACT.missing_hrs_a missing_hours,
3181 FACT.total_actual_hours total_actual_hours,
3182 0 utilization_hours,
3183 0 billable_hours,
3184 0 nonbillable_hours,
3185 0 training_hours,
3186 0 prior_actual_hours,
3187 0 prior_act_capacity_hours,
3188 0 prior_act_red_capacity_hours,
3189 0 prior_total_actual_hours,
3190 0 prior_utilization_hours,
3191 0 prior_billable_hours,
3192 0 prior_nonbillable_hours,
3193 0 prior_training_hours
3194 FROM
3195 /* Bug 3515594 */
3196 (SELECT /*+ ORDERED */
3197 hou.name org_id,
3198 decode(p_view_by, 'OG', horg.name, -1) organization_id,
3199 time.name time_id,
3200 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3201 job.name job_level_id,
3202 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3203 capacity_hours,
3204 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3205 total_actual_hours,
3206
3207 fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3208 missing_hrs_a,
3209 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3210 reduce_capacity_hrs_a
3211 FROM PJI_PMV_ORGZ_DIM_TMP horg,
3212 PJI_PMV_TIME_DIM_TMP time,
3213 PJI_PMV_JB_DIM_TMP job,
3214 PJI_RM_JOB_F_MV fct,
3215 PJI_PMV_ORG_DIM_TMP hou,
3216 PA_IMPLEMENTATIONS_ALL imp
3217 WHERE fct.expenditure_org_id = hou.id
3218 AND fct.expenditure_organization_id = horg.id
3219 AND fct.time_id = time.id
3220 AND fct.period_type_id = time.period_type
3221 AND fct.job_id = job.id
3222 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3223 AND time.id is not null
3224 AND hou.id = imp.org_id ) FACT,
3225 (SELECT distinct WT.name
3226 FROM PJI_PMV_WT_DIM_TMP wt ) WT
3227 UNION ALL -- added for prior year capacity_hours
3228 /* Bug 3515594 */
3229 SELECT
3230 FACT.org_id,
3231 FACT.organization_id,
3232 FACT.time_id,
3233 FACT.time_key,
3234 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
3235 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
3236 decode(p_view_by, 'JL', FACT.job_level_id , '-1') job_level_id,
3237 0 actual_hours,
3238 0 capacity_hours,
3239 0 act_reduce_capacity_hours,
3240 null missing_hours,
3241 0 total_actual_hours,
3242 0 utilization_hours,
3243 0 billable_hours,
3244 0 nonbillable_hours,
3245 0 training_hours,
3246 0 prior_actual_hours,
3247 FACT.capacity_hours prior_act_capacity_hours,
3248 FACT.reduce_capacity_hrs_a prior_act_red_capacity_hours,
3249 FACT.total_actual_hours prior_total_actual_hours,
3250 0 prior_utilization_hours,
3251 0 prior_billable_hours,
3252 0 prior_nonbillable_hours,
3253 0 prior_training_hours
3254 FROM
3255 (SELECT /*+ ORDERED */
3256 hou.name org_id,
3257 decode(p_view_by, 'OG', horg.name, -1) organization_id,
3258 time.name time_id,
3259 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3260 job.name job_level_id,
3261 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3262 capacity_hours,
3263 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3264 total_actual_hours,
3265 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3266 reduce_capacity_hrs_a
3267 FROM PJI_PMV_ORGZ_DIM_TMP horg,
3268 PJI_PMV_TIME_DIM_TMP time,
3269 PJI_PMV_JB_DIM_TMP job,
3270 PJI_RM_JOB_F_MV fct,
3271 PJI_PMV_ORG_DIM_TMP hou,
3272 PA_IMPLEMENTATIONS_ALL imp
3273 WHERE fct.expenditure_org_id = hou.id
3274 AND fct.expenditure_organization_id = horg.id
3275 AND fct.time_id = time.prior_id
3276 AND fct.period_type_id = time.period_type
3277 AND fct.job_id = job.id
3278 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3279 AND time.prior_id is not null
3280 AND hou.id = imp.org_id ) FACT,
3281 (SELECT distinct WT.name
3282 FROM PJI_PMV_WT_DIM_TMP wt ) WT
3283 )
3284 GROUP BY org_id,
3285 organization_id,
3286 time_id,
3287 time_key,
3288 util_category_id,
3289 work_type_id,
3290 job_level_id;
3291
3292 END IF;
3293
3294 /* Totals and Top level org correction*/
3295
3296 FOR i in 1..l_u3_tbl.COUNT
3297 LOOP
3298 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' )
3299 AND l_u3_tbl(i).ORGANIZATION_ID = l_Top_Organization_Name THEN
3300
3301 l_Top_Org_Index:=i;
3302
3303 ELSE
3304
3305 l_actual_hours := l_actual_hours + nvl(l_u3_tbl(i).actual_hours,0);
3306 l_capacity_hours := l_capacity_hours + nvl(l_u3_tbl(i).capacity_hours,0);
3307 l_missing_hours := l_missing_hours + nvl(l_u3_tbl(i).missing_hours,0);
3308 l_utilization_hours := l_utilization_hours + nvl(l_u3_tbl(i).utilization_hours,0);
3309 l_billable_hours := l_billable_hours + nvl(l_u3_tbl(i).billable_hours,0);
3310 l_nonbillable_hours := l_nonbillable_hours + nvl(l_u3_tbl(i).nonbillable_hours,0);
3311 l_training_hours := l_training_hours + nvl(l_u3_tbl(i).training_hours,0);
3312 l_actual_denominator := l_actual_denominator + nvl(l_u3_tbl(i).actual_denominator,0);
3313 l_prior_actual_hours := l_prior_actual_hours + nvl(l_u3_tbl(i).prior_actual_hours,0);
3314 l_prior_capacity_hours := l_prior_capacity_hours + nvl(l_u3_tbl(i).prior_capacity_hours,0);
3315 l_prior_utilization_hours := l_prior_utilization_hours + nvl(l_u3_tbl(i).prior_utilization_hours,0);
3316 l_prior_billable_hours := l_prior_billable_hours + nvl(l_u3_tbl(i).prior_billable_hours,0);
3317 l_prior_nonbillable_hours := l_prior_nonbillable_hours + nvl(l_u3_tbl(i).prior_nonbillable_hours,0);
3318 l_prior_training_hours := l_prior_training_hours + nvl(l_u3_tbl(i).prior_training_hours,0);
3319 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u3_tbl(i).prior_actual_denominator,0);
3320
3321 --Calculated Columns processing is done below
3322 --The l_Top_org is not done here
3323 IF nvl(l_u3_tbl(i).actual_denominator,0) <> 0 THEN
3324 l_u3_tbl(i).util_percent := 100 * (l_u3_tbl(i).utilization_hours / l_u3_tbl(i).actual_denominator);
3325 l_u3_tbl(i).bill_percent := 100 * (l_u3_tbl(i).billable_hours / l_u3_tbl(i).actual_denominator);
3326 l_u3_tbl(i).non_bill_percent := 100 * (l_u3_tbl(i).nonbillable_hours / l_u3_tbl(i).actual_denominator);
3327 l_u3_tbl(i).training_percent := 100 * (l_u3_tbl(i).training_hours / l_u3_tbl(i).actual_denominator);
3328 ELSE
3329 l_u3_tbl(i).util_percent := NULL;
3330 l_u3_tbl(i).bill_percent := NULL;
3331 l_u3_tbl(i).non_bill_percent := NULL;
3332 l_u3_tbl(i).training_percent := NULL;
3333 END IF;
3334
3335 IF nvl(l_u3_tbl(i).prior_actual_denominator,0) <> 0 THEN
3336 l_u3_tbl(i).prior_util_percent := 100 * (l_u3_tbl(i).prior_utilization_hours / l_u3_tbl(i).prior_actual_denominator);
3337 l_u3_tbl(i).prior_bill_percent := 100 * (l_u3_tbl(i).prior_billable_hours / l_u3_tbl(i).prior_actual_denominator);
3338 l_u3_tbl(i).prior_non_bill_percent := 100 * (l_u3_tbl(i).prior_nonbillable_hours / l_u3_tbl(i).prior_actual_denominator);
3339 l_u3_tbl(i).prior_training_percent := 100 * (l_u3_tbl(i).prior_training_hours / l_u3_tbl(i).prior_actual_denominator);
3340 ELSE
3341 l_u3_tbl(i).prior_util_percent := NULL;
3342 l_u3_tbl(i).prior_bill_percent := NULL;
3343 l_u3_tbl(i).prior_non_bill_percent := NULL;
3344 l_u3_tbl(i).prior_training_percent := NULL;
3345 END IF;
3346
3347 END IF; --end p_view_by
3348 END LOOP;
3349
3350 --Processing for Top Org
3351 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' ) THEN
3352
3353 l_u3_tbl(l_Top_Org_Index).actual_hours := l_u3_tbl(l_Top_Org_Index).actual_hours - l_actual_hours;
3354 l_u3_tbl(l_Top_Org_Index).capacity_hours := l_u3_tbl(l_Top_Org_Index).capacity_hours - l_capacity_hours;
3355 l_u3_tbl(l_Top_Org_Index).missing_hours := l_u3_tbl(l_Top_Org_Index).missing_hours - l_missing_hours;
3356 l_u3_tbl(l_Top_Org_Index).utilization_hours := l_u3_tbl(l_Top_Org_Index).utilization_hours - l_utilization_hours;
3357 l_u3_tbl(l_Top_Org_Index).billable_hours := l_u3_tbl(l_Top_Org_Index).billable_hours - l_billable_hours;
3358 l_u3_tbl(l_Top_Org_Index).nonbillable_hours := l_u3_tbl(l_Top_Org_Index).nonbillable_hours - l_nonbillable_hours;
3359 l_u3_tbl(l_Top_Org_Index).training_hours := l_u3_tbl(l_Top_Org_Index).training_hours - l_training_hours;
3360 l_u3_tbl(l_Top_Org_Index).actual_denominator := l_u3_tbl(l_Top_Org_Index).actual_denominator - l_actual_denominator;
3361 l_u3_tbl(l_Top_Org_Index).prior_actual_hours := l_u3_tbl(l_Top_Org_Index).prior_actual_hours - l_prior_actual_hours;
3362 l_u3_tbl(l_Top_Org_Index).prior_capacity_hours := l_u3_tbl(l_Top_Org_Index).prior_capacity_hours - l_prior_capacity_hours;
3363 l_u3_tbl(l_Top_Org_Index).prior_utilization_hours := l_u3_tbl(l_Top_Org_Index).prior_utilization_hours - l_prior_utilization_hours;
3364 l_u3_tbl(l_Top_Org_Index).prior_billable_hours := l_u3_tbl(l_Top_Org_Index).prior_billable_hours - l_prior_billable_hours;
3365 l_u3_tbl(l_Top_Org_Index).prior_nonbillable_hours := l_u3_tbl(l_Top_Org_Index).prior_nonbillable_hours - l_prior_nonbillable_hours;
3366 l_u3_tbl(l_Top_Org_Index).prior_training_hours := l_u3_tbl(l_Top_Org_Index).prior_training_hours - l_prior_training_hours;
3367 l_u3_tbl(l_Top_Org_Index).prior_actual_denominator := l_u3_tbl(l_Top_Org_Index).prior_actual_denominator - l_prior_actual_denominator;
3368
3369 --Calculated columns processing for Top Org
3370 IF nvl(l_u3_tbl(l_Top_Org_Index).actual_denominator,0) <> 0 THEN
3371 l_u3_tbl(l_Top_Org_Index).util_percent := 100 * (l_u3_tbl(l_Top_Org_Index).utilization_hours / l_u3_tbl(l_Top_Org_Index).actual_denominator);
3372 l_u3_tbl(l_Top_Org_Index).bill_percent := 100 * (l_u3_tbl(l_Top_Org_Index).billable_hours / l_u3_tbl(l_Top_Org_Index).actual_denominator);
3373 l_u3_tbl(l_Top_Org_Index).non_bill_percent := 100 * (l_u3_tbl(l_Top_Org_Index).nonbillable_hours / l_u3_tbl(l_Top_Org_Index).actual_denominator);
3374 l_u3_tbl(l_Top_Org_Index).training_percent := 100 * (l_u3_tbl(l_Top_Org_Index).training_hours / l_u3_tbl(l_Top_Org_Index).actual_denominator);
3375 ELSE
3376 l_u3_tbl(l_Top_Org_Index).util_percent := NULL;
3377 l_u3_tbl(l_Top_Org_Index).bill_percent := NULL;
3378 l_u3_tbl(l_Top_Org_Index).non_bill_percent := NULL;
3379 l_u3_tbl(l_Top_Org_Index).training_percent := NULL;
3380 END IF;
3381
3382 IF nvl(l_u3_tbl(l_Top_Org_Index).prior_actual_denominator,0) <> 0 THEN
3383 l_u3_tbl(l_Top_Org_Index).prior_util_percent := 100 * (l_u3_tbl(l_Top_Org_Index).prior_utilization_hours / l_u3_tbl(l_Top_Org_Index).prior_actual_denominator);
3384 l_u3_tbl(l_Top_Org_Index).prior_bill_percent := 100 * (l_u3_tbl(l_Top_Org_Index).prior_billable_hours / l_u3_tbl(l_Top_Org_Index).prior_actual_denominator);
3385 l_u3_tbl(l_Top_Org_Index).prior_non_bill_percent := 100 * (l_u3_tbl(l_Top_Org_Index).prior_nonbillable_hours / l_u3_tbl(l_Top_Org_Index).prior_actual_denominator);
3386 l_u3_tbl(l_Top_Org_Index).prior_training_percent := 100 * (l_u3_tbl(l_Top_Org_Index).prior_training_hours / l_u3_tbl(l_Top_Org_Index).prior_actual_denominator);
3387 ELSE
3388 l_u3_tbl(l_Top_Org_Index).prior_util_percent := NULL;
3389 l_u3_tbl(l_Top_Org_Index).prior_bill_percent := NULL;
3390 l_u3_tbl(l_Top_Org_Index).prior_non_bill_percent := NULL;
3391 l_u3_tbl(l_Top_Org_Index).prior_training_percent := NULL;
3392 END IF;
3393
3394 END IF; --end p_view_by
3395
3396
3397 --Update local variables to include top level org values in grand totals
3398 IF l_Top_Org_Index is not null THEN
3399
3400 l_actual_hours := l_actual_hours + nvl(l_u3_tbl(l_Top_Org_Index).actual_hours,0);
3401 l_capacity_hours := l_capacity_hours + nvl(l_u3_tbl(l_Top_Org_Index).capacity_hours,0);
3402 l_missing_hours := l_missing_hours + nvl(l_u3_tbl(l_Top_Org_Index).missing_hours,0);
3403 l_utilization_hours := l_utilization_hours + nvl(l_u3_tbl(l_Top_Org_Index).utilization_hours,0);
3404 l_billable_hours := l_billable_hours + nvl(l_u3_tbl(l_Top_Org_Index).billable_hours,0);
3405 l_nonbillable_hours := l_nonbillable_hours + nvl(l_u3_tbl(l_Top_Org_Index).nonbillable_hours,0);
3406 l_training_hours := l_training_hours + nvl(l_u3_tbl(l_Top_Org_Index).training_hours,0);
3407 l_actual_denominator := l_actual_denominator + nvl(l_u3_tbl(l_Top_Org_Index).actual_denominator,0);
3408 l_prior_actual_hours := l_prior_actual_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_actual_hours,0);
3409 l_prior_capacity_hours := l_prior_capacity_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_capacity_hours,0);
3410 l_prior_utilization_hours := l_prior_utilization_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_utilization_hours,0);
3411 l_prior_billable_hours := l_prior_billable_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_billable_hours,0);
3412 l_prior_nonbillable_hours := l_prior_nonbillable_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_nonbillable_hours,0);
3413 l_prior_training_hours := l_prior_training_hours + nvl(l_u3_tbl(l_Top_Org_Index).prior_training_hours,0);
3414 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u3_tbl(l_Top_Org_Index).prior_actual_denominator,0);
3415
3416 END IF;
3417
3418 IF l_u3_tbl.COUNT > 0 THEN
3419 FOR i IN 1..l_u3_tbl.COUNT
3420 LOOP
3421
3422 IF l_u3_tbl.EXISTS(i) THEN
3423
3424 --Capacity is denormalized when context is view by UC or WT
3425 IF p_view_by = 'UC' OR p_view_by = 'WT' THEN
3426
3427 /*Bug 2836444*/
3428
3429 l_actual_denominator := l_u3_tbl(i).ACTUAL_DENOMINATOR;
3430 l_prior_actual_denominator := l_u3_tbl(i).PRIOR_ACTUAL_DENOMINATOR;
3431
3432 /*Bug 2836477*/
3433
3434 l_capacity_hours := null;
3435 l_missing_hours := null;
3436 l_prior_capacity_hours := null;
3437
3438 END IF;
3439
3440 l_u3_tbl(i).PJI_REP_TOTAL_1 := l_actual_hours;
3441 l_u3_tbl(i).PJI_REP_TOTAL_2 := l_capacity_hours;
3442 l_u3_tbl(i).PJI_REP_TOTAL_3 := l_missing_hours;
3443 l_u3_tbl(i).PJI_REP_TOTAL_4 := l_utilization_hours;
3444 l_u3_tbl(i).PJI_REP_TOTAL_5 := l_prior_actual_hours;
3445 l_u3_tbl(i).PJI_REP_TOTAL_6 := l_prior_capacity_hours;
3446
3447 IF NVL(l_actual_denominator,0) <> 0 THEN
3448
3449 l_u3_tbl(i).PJI_REP_TOTAL_7 := (l_utilization_hours/l_actual_denominator)*100;
3450 l_u3_tbl(i).PJI_REP_TOTAL_8 := (l_billable_hours/l_actual_denominator)*100;
3451 l_u3_tbl(i).PJI_REP_TOTAL_9 := (l_nonbillable_hours/l_actual_denominator)*100;
3452 l_u3_tbl(i).PJI_REP_TOTAL_10 := (l_training_hours/l_actual_denominator)*100;
3453
3454 END IF;
3455
3456 IF NVL(l_prior_actual_denominator,0) <> 0 THEN
3457
3458 l_u3_tbl(i).PJI_REP_TOTAL_11 := (l_prior_utilization_hours/l_prior_actual_denominator)*100;
3459 l_u3_tbl(i).PJI_REP_TOTAL_12 := (l_prior_billable_hours/l_prior_actual_denominator)*100;
3460 l_u3_tbl(i).PJI_REP_TOTAL_13 := (l_prior_nonbillable_hours/l_prior_actual_denominator)*100;
3461 l_u3_tbl(i).PJI_REP_TOTAL_14 := (l_prior_training_hours/l_prior_actual_denominator)*100;
3462
3463 END IF;
3464
3465 END IF; -- l_u3_tbl.EXISTS(i)
3466 END LOOP;
3467 END IF; --l_u3_tbl.COUNT > 0
3468
3469
3470 --Delete record for top org if all values are 0 or null
3471 IF l_Top_Org_Index is not null THEN
3472 IF nvl(l_u3_tbl(l_Top_Org_Index).ACTUAL_HOURS,0) = 0 AND
3473 nvl(l_u3_tbl(l_Top_Org_Index).CAPACITY_HOURS,0) = 0 AND
3474 nvl(l_u3_tbl(l_Top_Org_Index).MISSING_HOURS,0) = 0 AND
3475 nvl(l_u3_tbl(l_Top_Org_Index).UTILIZATION_HOURS,0) = 0 AND
3476 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_ACTUAL_HOURS,0) = 0 AND
3477 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_CAPACITY_HOURS,0) = 0 AND
3478 nvl(l_u3_tbl(l_Top_Org_Index).UTIL_PERCENT,0) = 0 AND
3479 nvl(l_u3_tbl(l_Top_Org_Index).BILL_PERCENT,0) = 0 AND
3480 nvl(l_u3_tbl(l_Top_Org_Index).NON_BILL_PERCENT,0) = 0 AND
3481 nvl(l_u3_tbl(l_Top_Org_Index).TRAINING_PERCENT,0) = 0 AND
3482 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_UTIL_PERCENT,0) = 0 AND
3483 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_BILL_PERCENT,0) = 0 AND
3484 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_NON_BILL_PERCENT,0) = 0 AND
3485 nvl(l_u3_tbl(l_Top_Org_Index).PRIOR_TRAINING_PERCENT,0) = 0
3486 THEN
3487 l_u3_tbl.DELETE(l_Top_Org_Index);
3488 END IF;
3489 END IF;
3490
3491
3492 COMMIT;
3493 RETURN l_u3_tbl;
3494
3495 END PLSQLDriver_U3;
3496
3497 FUNCTION PLSQLDriver_U4 (
3498 p_operating_unit IN VARCHAR2 DEFAULT NULL,
3499 p_organization IN VARCHAR2,
3500 p_as_of_date IN NUMBER,
3501 p_period_type IN VARCHAR2,
3502 p_view_by IN VARCHAR2,
3503 p_utilization_category IN VARCHAR2 DEFAULT NULL,
3504 p_work_type IN VARCHAR2 DEFAULT NULL,
3505 p_job_level IN VARCHAR2 DEFAULT NULL,
3506 p_flag IN VARCHAR2
3507 ) RETURN PJI_REP_U4_TBL
3508 IS
3509 PRAGMA AUTONOMOUS_TRANSACTION;
3510 l_u4_tbl PJI_REP_U4_TBL:=PJI_REP_U4_TBL();
3511 l_util_category_flag VARCHAR2(1);
3512 l_job_flag VARCHAR2(1);
3513 l_denominator VARCHAR2(25);
3514 l_labor_unit VARCHAR2(40);
3515 l_scheduled_hours NUMBER := 0;
3516 l_scheduled_capacity_hours NUMBER := 0;
3517 l_scheduled_util_hours NUMBER := 0;
3518 l_provisional_hours NUMBER := 0;
3519 l_unassigned_hours NUMBER := 0;
3520 l_conf_billable_hours NUMBER := 0;
3521 l_conf_nonbillable_hours NUMBER := 0;
3522 l_prov_billable_hours NUMBER := 0;
3523 l_prov_nonbillable_hours NUMBER := 0;
3524 l_training_hours NUMBER := 0;
3525 l_expected_hours NUMBER := 0;
3526 l_expected_util_hours NUMBER := 0;
3527 l_expected_total_util_hours NUMBER := 0;
3528 l_actual_util_hours NUMBER := 0;
3529 l_actual_capacity_hours NUMBER := 0;
3530 l_expected_capacity_hours NUMBER := 0;
3531 l_prov_util_hours NUMBER := 0;
3532 l_exp_ac_util_hours NUMBER := 0;
3533 l_exp_sch_util_hours NUMBER := 0;
3534 l_exp_ac_denominator NUMBER := 0;
3535 l_exp_sch_denominator NUMBER := 0;
3536 l_actual_denominator NUMBER := 0;
3537 l_scheduled_denominator NUMBER := 0;
3538 l_expected_denominator NUMBER := 0;
3539 l_prior_scheduled_hours NUMBER := 0;
3540 l_prior_sch_capacity_hours NUMBER := 0;
3541 l_prior_sch_util_hours NUMBER := 0;
3542 l_prior_conf_billable_hours NUMBER := 0;
3543 l_prior_conf_nonbillable_hours NUMBER := 0;
3544 l_prior_actual_capacity_hours NUMBER := 0;
3545 l_prior_actual_util_hours NUMBER := 0;
3546 l_prior_actual_denominator NUMBER := 0;
3547 l_prior_scheduled_denominator NUMBER := 0;
3548 l_Top_Org_Index NUMBER;
3549 l_Top_Organization_Name VARCHAR2(240);
3550 BEGIN
3551 PJI_PMV_ENGINE.Convert_Operating_Unit (p_operating_unit, p_view_by);
3552 IF (p_flag = 'FALSE') THEN
3553 PJI_PMV_ENGINE.Convert_Time (p_as_of_date, p_period_type, p_view_by, 'Y');
3554 ELSE PJI_PMV_ENGINE.Convert_Expected_Time (p_as_of_date, p_period_type, 'Y');
3555 END IF;
3556
3557 l_util_category_flag := PJI_PMV_ENGINE.Convert_Util_Category(p_work_type, p_utilization_category, p_view_by);
3558 l_job_flag := PJI_PMV_ENGINE.Convert_Job_Level(null, p_job_level, p_view_by);
3559
3560 /*
3561 * Get Utilization percentage denominator profile value
3562 */
3563 BEGIN
3564 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
3565 INTO l_denominator
3566 from dual;
3567
3568 EXCEPTION WHEN NO_DATA_FOUND THEN
3569 l_denominator := 'CAPACITY';
3570 END;
3571
3572 /*
3573 * Get report labor unit
3574 */
3575 BEGIN
3576 select report_labor_units
3577 into l_labor_unit
3578 from pji_system_settings;
3579
3580 EXCEPTION WHEN OTHERS THEN
3581 l_labor_unit := null;
3582 END;
3583
3584 IF l_util_category_flag = 'N' AND l_job_flag = 'N' THEN
3585
3586 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
3587 , P_VIEW_BY => p_view_by
3588 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
3589
3590 SELECT PJI_REP_U4(org_id,
3591 organization_id,
3592 time_id,
3593 time_key,
3594 util_category_id,
3595 work_type_id,
3596 job_level_id,
3597 sum(scheduled_hours),
3598 sum(scheduled_capacity_hours),
3599 sum(scheduled_util_hours),
3600 sum(provisional_hours),
3601 sum(unassigned_hours),
3602 sum(conf_billable_hours),
3603 sum(conf_nonbillable_hours),
3604 sum(prov_billable_hours),
3605 sum(prov_nonbillable_hours),
3606 sum(training_hours),
3607 sum(expected_hours),
3608 sum(expected_util_hours),
3609 sum(expected_total_util_hours),
3610 sum(actual_util_hours),
3611 sum(actual_capacity_hours),
3612 sum(expected_capacity_hours),
3613 sum(prov_util_hours),
3614 sum(exp_ac_util_hours),
3615 sum(exp_sch_util_hours),
3616 sum(decode(l_denominator, 'CAPACITY', exp_ac_capacity_hours, exp_ac_actual_hours)),
3617 sum(decode(l_denominator, 'CAPACITY', exp_sch_capacity_hours, exp_sch_actual_hours)),
3618 sum(decode(l_denominator, 'CAPACITY', actual_capacity_hours, actual_hours)),
3619 sum(decode(l_denominator, 'CAPACITY', scheduled_capacity_hours, actual_hours)),
3620 sum(decode(l_denominator, 'CAPACITY', expected_capacity_hours, actual_hours)),
3621 sum(prior_scheduled_hours),
3622 sum(prior_sch_capacity_hours),
3623 sum(prior_sch_util_hours),
3624 sum(prior_conf_billable_hours),
3625 sum(prior_conf_nonbillable_hours),
3626 sum(prior_actual_capacity_hours),
3627 sum(prior_actual_util_hours),
3628 sum(decode(l_denominator, 'CAPACITY', prior_actual_capacity_hours, prior_actual_hours)),
3629 sum(decode(l_denominator, 'CAPACITY', prior_sch_capacity_hours, prior_actual_hours)),
3630 null,null,null,null,null,null,
3631 null,null,null,null,null,null,
3632 null,null,null,null,null,null,
3633 null,null,null,null,null,null,
3634 null,null,null,null,null,null,
3635 null,null,null,null,null,null,
3636 null,null,null
3637 )
3638 /* Bug 3515594 */
3639 BULK COLLECT INTO l_u4_tbl
3640 FROM (
3641 SELECT /*+ ORDERED */
3642 hou.name org_id,
3643 horg.name organization_id,
3644 time.name time_id,
3645 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3646 '-1' util_category_id,
3647 '-1' work_type_id,
3648 '-1' job_level_id,
3649 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3650 scheduled_hours,
3651 (capacity_hrs - reduce_capacity_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3652 scheduled_capacity_hours,
3653 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3654 scheduled_util_hours,
3655 prov_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3656 provisional_hours,
3657 unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3658 unassigned_hours,
3659 conf_bill_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3660 conf_billable_hours,
3661 (conf_wtd_org_hrs_s - conf_bill_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3662 conf_nonbillable_hours,
3663 prov_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3664 prov_billable_hours,
3665 (prov_wtd_org_hrs_s - prov_bill_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3666 prov_nonbillable_hours,
3667 training_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3668 training_hours,
3669 decode(time.amount_type, 0, total_hrs_a, conf_hrs_s)
3670 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3671 expected_hours,
3672 decode(time.amount_type, 0, total_wtd_org_hrs_a, conf_wtd_org_hrs_s)
3673 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3674 expected_util_hours,
3675 decode(time.amount_type, 0, total_wtd_org_hrs_a, conf_wtd_org_hrs_s + prov_wtd_org_hrs_s)
3676 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3677 expected_total_util_hours,
3678 decode(time.amount_type, 0, capacity_hrs-reduce_capacity_hrs_a,
3679 capacity_hrs-reduce_capacity_hrs_s)
3680 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3681 expected_capacity_hours,
3682 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3683 actual_hours,
3684 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3685 actual_util_hours,
3686 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3687 actual_capacity_hours,
3688 decode(time.amount_type, 0, 0, prov_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3689 prov_util_hours,
3690 decode(time.amount_type, 0, total_wtd_org_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3691 exp_ac_util_hours,
3692 decode(time.amount_type, 0, 0, conf_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3693 exp_sch_util_hours,
3694 decode(time.amount_type, 0, total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3695 exp_ac_actual_hours,
3696 decode(time.amount_type, 0, 0, total_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3697 exp_sch_actual_hours,
3698 decode(time.amount_type, 0, capacity_hrs - reduce_capacity_hrs_a, capacity_hrs)
3699 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3700 exp_ac_capacity_hours,
3701 decode(time.amount_type, 0, capacity_hrs, capacity_hrs - reduce_capacity_hrs_s)
3702 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3703 exp_sch_capacity_hours,
3704 0 prior_scheduled_hours,
3705 0 prior_sch_capacity_hours,
3706 0 prior_sch_util_hours,
3707 0 prior_conf_billable_hours,
3708 0 prior_conf_nonbillable_hours,
3709 0 prior_actual_capacity_hours,
3710 0 prior_actual_util_hours,
3711 0 prior_actual_hours
3712 FROM PJI_PMV_ORGZ_DIM_TMP horg,
3713 PJI_PMV_TIME_DIM_TMP time,
3714 PJI_RM_ORGO_F_MV fct,
3715 PJI_PMV_ORG_DIM_TMP hou,
3716 PA_IMPLEMENTATIONS_ALL imp
3717 WHERE fct.expenditure_org_id = hou.id
3718 AND fct.expenditure_organization_id = horg.id
3719 AND fct.time_id = time.id
3720 AND fct.period_type_id = time.period_type
3721 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3722 AND time.id is not null
3723 AND hou.id = imp.org_id
3724 UNION ALL
3725 /* Bug 3515594 */
3726 SELECT /*+ ORDERED */
3727 hou.name org_id,
3728 horg.name organization_id,
3729 time.name time_id,
3730 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3731 '-1' util_category_id,
3732 '-1' work_type_id,
3733 '-1' job_level_id,
3734 0 scheduled_hours,
3735 0 scheduled_capacity_hours,
3736 0 scheduled_util_hours,
3737 0 provisional_hours,
3738 0 unassigned_hours,
3739 0 conf_billable_hours,
3740 0 conf_nonbillable_hours,
3741 0 prov_billable_hours,
3742 0 prov_nonbillable_hours,
3743 0 training_hours,
3744 0 expected_hours,
3745 0 expected_util_hours,
3746 0 expected_total_util_hours,
3747 0 expected_capacity_hours,
3748 0 actual_hours,
3749 0 actual_util_hours,
3750 0 actual_capacity_hours,
3751 0 prov_util_hours,
3752 0 exp_ac_util_hours,
3753 0 exp_sch_util_hours,
3754 0 exp_ac_actual_hours,
3755 0 exp_sch_actual_hours,
3756 0 exp_ac_capacity_hours,
3757 0 exp_sch_capacity_hours,
3758 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3759 prior_scheduled_hours,
3760 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3761 prior_sch_capacity_hours,
3762 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3763 prior_sch_util_hours,
3764 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3765 prior_conf_billable_hours,
3766 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3767 prior_conf_nonbillable_hours,
3768 (capacity_hrs - reduce_capacity_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3769 prior_actual_capacity_hours,
3770 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3771 prior_actual_util_hours,
3772 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3773 prior_actual_hours
3774 FROM PJI_PMV_ORGZ_DIM_TMP horg,
3775 PJI_PMV_TIME_DIM_TMP time,
3776 PJI_RM_ORGO_F_MV fct,
3777 PJI_PMV_ORG_DIM_TMP hou,
3778 PA_IMPLEMENTATIONS_ALL imp
3779 WHERE fct.expenditure_org_id = hou.id
3780 AND fct.expenditure_organization_id = horg.id
3781 AND fct.time_id = time.prior_id
3782 AND fct.period_type_id = time.period_type
3783 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
3784 AND time.prior_id is not null
3785 AND hou.id = imp.org_id
3786 UNION ALL
3787 SELECT '-1' org_id,
3788 name organization_id,
3789 '-1' time_id,
3790 -1 time_key,
3791 '-1' util_category_id,
3792 '-1' work_type_id,
3793 '-1' job_level_id,
3794 0 scheduled_hours,
3795 0 scheduled_capacity_hours,
3796 0 scheduled_util_hours,
3797 0 provisional_hours,
3798 0 unassigned_hours,
3799 0 conf_billable_hours,
3800 0 conf_nonbillable_hours,
3801 0 prov_billable_hours,
3802 0 prov_nonbillable_hours,
3803 0 training_hours,
3804 0 expected_hours,
3805 0 expected_util_hours,
3806 0 expected_total_util_hours,
3807 0 expected_capacity_hours,
3808 0 actual_hours,
3809 0 actual_util_hours,
3810 0 actual_capacity_hours,
3811 0 prov_util_hours,
3812 0 exp_ac_util_hours,
3813 0 exp_sch_util_hours,
3814 0 exp_ac_actual_hours,
3815 0 exp_sch_actual_hours,
3816 0 exp_ac_capacity_hours,
3817 0 exp_sch_capacity_hours,
3818 0 prior_scheduled_hours,
3819 0 prior_sch_capacity_hours,
3820 0 prior_sch_util_hours,
3821 0 prior_conf_billable_hours,
3822 0 prior_conf_nonbillable_hours,
3823 0 prior_actual_capacity_hours,
3824 0 prior_actual_util_hours,
3825 0 prior_actual_hours
3826 FROM PJI_PMV_ORGZ_DIM_TMP
3827 WHERE name <> '-1'
3828 UNION ALL
3829 SELECT '-1' org_id,
3830 '-1' organization_id,
3831 name time_id,
3832 order_by_id time_key,
3833 '-1' util_category_id,
3834 '-1' work_type_id,
3835 '-1' job_level_id,
3836 0 scheduled_hours,
3837 0 scheduled_capacity_hours,
3838 0 scheduled_util_hours,
3839 0 provisional_hours,
3840 0 unassigned_hours,
3841 0 conf_billable_hours,
3842 0 conf_nonbillable_hours,
3843 0 prov_billable_hours,
3844 0 prov_nonbillable_hours,
3845 0 training_hours,
3846 0 expected_hours,
3847 0 expected_util_hours,
3848 0 expected_total_util_hours,
3849 0 expected_capacity_hours,
3850 0 actual_hours,
3851 0 actual_util_hours,
3852 0 actual_capacity_hours,
3853 0 prov_util_hours,
3854 0 exp_ac_util_hours,
3855 0 exp_sch_util_hours,
3856 0 exp_ac_actual_hours,
3857 0 exp_sch_actual_hours,
3858 0 exp_ac_capacity_hours,
3859 0 exp_sch_capacity_hours,
3860 0 prior_scheduled_hours,
3861 0 prior_sch_capacity_hours,
3862 0 prior_sch_util_hours,
3863 0 prior_conf_billable_hours,
3864 0 prior_conf_nonbillable_hours,
3865 0 prior_actual_capacity_hours,
3866 0 prior_actual_util_hours,
3867 0 prior_actual_hours
3868 FROM PJI_PMV_TIME_DIM_TMP
3869 WHERE name <> '-1'
3870 )
3871 GROUP BY org_id,
3872 organization_id,
3873 time_id,
3874 time_key,
3875 util_category_id,
3876 work_type_id,
3877 job_level_id;
3878
3879 ELSIF l_job_flag = 'N' THEN
3880
3881 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
3882 , P_VIEW_BY => p_view_by
3883 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
3884
3885 SELECT PJI_REP_U4(org_id,
3886 organization_id,
3887 time_id,
3888 time_key,
3889 util_category_id,
3890 work_type_id,
3891 job_level_id,
3892 sum(scheduled_hours),
3893 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-sch_reduce_capacity_hours)),
3894 sum(scheduled_util_hours),
3895 sum(provisional_hours),
3896 sum(decode (p_view_by, 'UC', null, 'WT',null, unassigned_hours)),
3897 sum(conf_billable_hours),
3898 sum(conf_nonbillable_hours),
3899 sum(prov_billable_hours),
3900 sum(prov_nonbillable_hours),
3901 sum(training_hours),
3902 sum(expected_hours),
3903 sum(expected_util_hours),
3904 sum(expected_total_util_hours),
3905 sum(actual_util_hours),
3906 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-act_reduce_capacity_hours)),
3907 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-exp_reduce_capacity_hours)),
3908 sum(prov_util_hours),
3909 sum(exp_ac_util_hours),
3910 sum(exp_sch_util_hours),
3911 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_ac_red_capacity_hours,
3912 exp_ac_actual_hours)),
3913 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_sch_red_capacity_hours,
3914 exp_ac_actual_hours)),
3915 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
3916 sum(decode(l_denominator, 'CAPACITY', capacity_hours-sch_reduce_capacity_hours, total_actual_hours)),
3917 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_reduce_capacity_hours, total_actual_hours)),
3918 sum(prior_scheduled_hours),
3919 sum(prior_capacity_hours-prior_red_capacity_hours),
3920 sum(prior_sch_util_hours),
3921 sum(prior_conf_billable_hours),
3922 sum(prior_conf_nonbillable_hours),
3923 sum(prior_capacity_hours-prior_red_capacity_hours),
3924 sum(prior_actual_util_hours),
3925 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours-prior_red_capacity_hours,
3926 prior_total_actual_hours)),
3927 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours-prior_red_capacity_hours,
3928 prior_total_actual_hours)),
3929 null,null,null,null,null,null,
3930 null,null,null,null,null,null,
3931 null,null,null,null,null,null,
3932 null,null,null,null,null,null,
3933 null,null,null,null,null,null,
3934 null,null,null,null,null,null,
3935 null,null,null
3936 )
3937 BULK COLLECT INTO l_u4_tbl
3938 /* Bug 3515594 */
3939 FROM (
3940 SELECT /*+ ORDERED */
3941 hou.name org_id,
3942 horg.name organization_id,
3943 time.name time_id,
3944 DECODE(p_view_by, 'TM', time.id, -1) time_key,
3945 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
3946 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
3947 '-1' job_level_id,
3948 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3949 scheduled_hours,
3950 0 capacity_hours,
3951 0 sch_reduce_capacity_hours,
3952 0 total_actual_hours,
3953 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
3954 worktype.org_utilization_percentage / 100
3955 scheduled_util_hours,
3956 prov_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3957 provisional_hours,
3958 unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3959 unassigned_hours,
3960 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
3961 fct.conf_hrs_s * worktype.org_utilization_percentage / 100
3962 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3963 conf_billable_hours,
3964 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
3965 fct.conf_hrs_s * worktype.org_utilization_percentage / 100
3966 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3967 conf_nonbillable_hours,
3968 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
3969 fct.prov_hrs_s * worktype.org_utilization_percentage / 100
3970 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3971 prov_billable_hours,
3972 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
3973 fct.prov_hrs_s * worktype.org_utilization_percentage / 100
3974 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3975 prov_nonbillable_hours,
3976 (CASE WHEN worktype.training_flag = 'Y' THEN
3977 fct.conf_hrs_s
3978 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3979 training_hours,
3980 decode(time.amount_type, 0, fct.total_hrs_a, fct.conf_hrs_s)
3981 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3982 expected_hours,
3983 (decode(time.amount_type, 0, fct.total_hrs_a, fct.conf_hrs_s) * worktype.org_utilization_percentage / 100)
3984 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3985 expected_util_hours,
3986 (decode(time.amount_type, 0, fct.total_hrs_a, fct.conf_hrs_s + fct.prov_hrs_s)
3987 * worktype.org_utilization_percentage / 100) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3988 expected_total_util_hours,
3989 0 exp_reduce_capacity_hours,
3990 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
3991 actual_hours,
3992 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
3993 worktype.org_utilization_percentage / 100
3994 actual_util_hours,
3995 0 act_reduce_capacity_hours,
3996 (decode(time.amount_type, 0, 0, fct.prov_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
3997 worktype.org_utilization_percentage / 100
3998 prov_util_hours,
3999 (decode(time.amount_type, 0, fct.total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4000 worktype.org_utilization_percentage / 100
4001 exp_ac_util_hours,
4002 (decode(time.amount_type, 0, 0, fct.conf_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4003 worktype.org_utilization_percentage / 100
4004 exp_sch_util_hours,
4005 decode(time.amount_type, 0, fct.total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4006 exp_ac_actual_hours,
4007 decode(time.amount_type, 0, 0, fct.total_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4008 exp_sch_actual_hours,
4009 0 exp_ac_red_capacity_hours,
4010 0 exp_sch_red_capacity_hours,
4011 0 prior_scheduled_hours,
4012 0 prior_capacity_hours,
4013 0 prior_red_capacity_hours,
4014 0 prior_total_actual_hours,
4015 0 prior_sch_util_hours,
4016 0 prior_conf_billable_hours,
4017 0 prior_conf_nonbillable_hours,
4018 0 prior_actual_util_hours,
4019 0 prior_actual_hours
4020 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4021 PJI_PMV_TIME_DIM_TMP time,
4022 PJI_PMV_WT_DIM_TMP wt,
4023 PJI_RM_WTO_F_MV fct,
4024 PJI_PMV_ORG_DIM_TMP hou,
4025 PA_WORK_TYPES_B worktype,
4026 PA_IMPLEMENTATIONS_ALL imp
4027 WHERE fct.expenditure_org_id = hou.id
4028 AND fct.expenditure_organization_id = horg.id
4029 AND fct.work_type_id = wt.id
4030 AND wt.id = worktype.work_type_id
4031 AND fct.time_id = time.id
4032 AND fct.period_type_id = time.period_type
4033 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4034 AND time.id is not null
4035 AND hou.id = imp.org_id
4036 UNION ALL
4037 /* Bug 3515594 */
4038 SELECT /*+ ORDERED */
4039 hou.name org_id,
4040 horg.name organization_id,
4041 time.name time_id,
4042 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4043 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
4044 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
4045 '-1' job_level_id,
4046 0 scheduled_hours,
4047 0 capacity_hours,
4048 0 sch_reduce_capacity_hours,
4049 0 total_actual_hours,
4050 0 scheduled_util_hours,
4051 0 provisional_hours,
4052 0 unassigned_hours,
4053 0 conf_billable_hours,
4054 0 conf_nonbillable_hours,
4055 0 prov_billable_hours,
4056 0 prov_nonbillable_hours,
4057 0 training_hours,
4058 0 expected_hours,
4059 0 expected_util_hours,
4060 0 expected_total_util_hours,
4061 0 exp_reduce_capacity_hours,
4062 0 actual_hours,
4063 0 actual_util_hours,
4064 0 act_reduce_capacity_hours,
4065 0 prov_util_hours,
4066 0 exp_ac_util_hours,
4067 0 exp_sch_util_hours,
4068 0 exp_ac_actual_hours,
4069 0 exp_sch_actual_hours,
4070 0 exp_ac_red_capacity_hours,
4071 0 exp_sch_red_capacity_hours,
4072 fct.total_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4073 prior_scheduled_hours,
4074 0 prior_capacity_hours,
4075 0 prior_red_capacity_hours,
4076 0 prior_total_actual_hours,
4077 fct.total_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) *
4078 worktype.org_utilization_percentage / 100 prior_sch_util_hours,
4079 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
4080 fct.total_hrs_a * worktype.org_utilization_percentage / 100
4081 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4082 prior_conf_billable_hours,
4083 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
4084 fct.total_hrs_a * worktype.org_utilization_percentage / 100
4085 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4086 prior_conf_nonbillable_hours,
4087 fct.total_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) *
4088 worktype.org_utilization_percentage / 100 prior_actual_util_hours,
4089 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4090 prior_actual_hours
4091 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4092 PJI_PMV_TIME_DIM_TMP time,
4093 PJI_PMV_WT_DIM_TMP wt,
4094 PJI_RM_WTO_F_MV fct,
4095 PJI_PMV_ORG_DIM_TMP hou,
4096 PA_WORK_TYPES_B worktype,
4097 PA_IMPLEMENTATIONS_ALL imp
4098 WHERE fct.expenditure_org_id = hou.id
4099 AND fct.expenditure_organization_id = horg.id
4100 AND fct.work_type_id = wt.id
4101 AND wt.id = worktype.work_type_id
4102 AND fct.time_id = time.prior_id
4103 AND fct.period_type_id = time.period_type
4104 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4105 AND time.prior_id is not null
4106 AND hou.id = imp.org_id
4107 UNION ALL
4108 SELECT '-1' org_id,
4109 name organization_id,
4110 '-1' time_id,
4111 -1 time_key,
4112 '-1' util_category_id,
4113 '-1' work_type_id,
4114 '-1' job_level_id,
4115 0 scheduled_hours,
4116 0 capacity_hours,
4117 0 sch_reduce_capacity_hours,
4118 0 total_actual_hours,
4119 0 scheduled_util_hours,
4120 0 provisional_hours,
4121 0 unassigned_hours,
4122 0 conf_billable_hours,
4123 0 conf_nonbillable_hours,
4124 0 prov_billable_hours,
4125 0 prov_nonbillable_hours,
4126 0 training_hours,
4127 0 expected_hours,
4128 0 expected_util_hours,
4129 0 expected_total_util_hours,
4130 0 exp_reduce_capacity_hours,
4131 0 actual_hours,
4132 0 actual_util_hours,
4133 0 act_reduce_capacity_hours,
4134 0 prov_util_hours,
4135 0 exp_ac_util_hours,
4136 0 exp_sch_util_hours,
4137 0 exp_ac_actual_hours,
4138 0 exp_sch_actual_hours,
4139 0 exp_ac_red_capacity_hours,
4140 0 exp_sch_red_capacity_hours,
4141 0 prior_scheduled_hours,
4142 0 prior_capacity_hours,
4143 0 prior_red_capacity_hours,
4144 0 prior_total_actual_hours,
4145 0 prior_sch_util_hours,
4146 0 prior_conf_billable_hours,
4147 0 prior_conf_nonbillable_hours,
4148 0 prior_actual_util_hours,
4149 0 prior_actual_hours
4150 FROM PJI_PMV_ORGZ_DIM_TMP
4151 WHERE name <> '-1'
4152 UNION ALL
4153 SELECT '-1' org_id,
4154 '-1' organization_id,
4155 '-1' time_id,
4156 -1 time_key,
4157 decode(p_view_by, 'UC', name, '-1') util_category_id,
4158 decode(p_view_by, 'WT', name, '-1') work_type_id,
4159 '-1' job_level_id,
4160 0 scheduled_hours,
4161 0 capacity_hours,
4162 0 sch_reduce_capacity_hours,
4163 0 total_actual_hours,
4164 0 scheduled_util_hours,
4165 0 provisional_hours,
4166 0 unassigned_hours,
4167 0 conf_billable_hours,
4168 0 conf_nonbillable_hours,
4169 0 prov_billable_hours,
4170 0 prov_nonbillable_hours,
4171 0 training_hours,
4172 0 expected_hours,
4173 0 expected_util_hours,
4174 0 expected_total_util_hours,
4175 0 exp_reduce_capacity_hours,
4176 0 actual_hours,
4177 0 actual_util_hours,
4178 0 act_reduce_capacity_hours,
4179 0 prov_util_hours,
4180 0 exp_ac_util_hours,
4181 0 exp_sch_util_hours,
4182 0 exp_ac_actual_hours,
4183 0 exp_sch_actual_hours,
4184 0 exp_ac_red_capacity_hours,
4185 0 exp_sch_red_capacity_hours,
4186 0 prior_scheduled_hours,
4187 0 prior_capacity_hours,
4188 0 prior_red_capacity_hours,
4189 0 prior_total_actual_hours,
4190 0 prior_sch_util_hours,
4191 0 prior_conf_billable_hours,
4192 0 prior_conf_nonbillable_hours,
4193 0 prior_actual_util_hours,
4194 0 prior_actual_hours
4195 FROM PJI_PMV_WT_DIM_TMP
4196 WHERE name <> '-1'
4197 UNION ALL
4198 SELECT '-1' org_id,
4199 '-1' organization_id,
4200 name time_id,
4201 order_by_id time_key,
4202 '-1' util_category_id,
4203 '-1' work_type_id,
4204 '-1' job_level_id,
4205 0 scheduled_hours,
4206 0 capacity_hours,
4207 0 sch_reduce_capacity_hours,
4208 0 total_actual_hours,
4209 0 scheduled_util_hours,
4210 0 provisional_hours,
4211 0 unassigned_hours,
4212 0 conf_billable_hours,
4213 0 conf_nonbillable_hours,
4214 0 prov_billable_hours,
4215 0 prov_nonbillable_hours,
4216 0 training_hours,
4217 0 expected_hours,
4218 0 expected_util_hours,
4219 0 expected_total_util_hours,
4220 0 exp_reduce_capacity_hours,
4221 0 actual_hours,
4222 0 actual_util_hours,
4223 0 act_reduce_capacity_hours,
4224 0 prov_util_hours,
4225 0 exp_ac_util_hours,
4226 0 exp_sch_util_hours,
4227 0 exp_ac_actual_hours,
4228 0 exp_sch_actual_hours,
4229 0 exp_ac_red_capacity_hours,
4230 0 exp_sch_red_capacity_hours,
4231 0 prior_scheduled_hours,
4232 0 prior_capacity_hours,
4233 0 prior_red_capacity_hours,
4234 0 prior_total_actual_hours,
4235 0 prior_sch_util_hours,
4236 0 prior_conf_billable_hours,
4237 0 prior_conf_nonbillable_hours,
4238 0 prior_actual_util_hours,
4239 0 prior_actual_hours
4240 FROM PJI_PMV_TIME_DIM_TMP
4241 WHERE name <> '-1'
4242 UNION ALL -- added for current year capacity_hours
4243 SELECT
4244 FACT.org_id,
4245 FACT.organization_id,
4246 FACT.time_id,
4247 FACT.time_key,
4248 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
4249 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
4250 '-1' job_level_id,
4251 0 scheduled_hours,
4252 FACT.capacity_hours,
4253 FACT.sch_reduce_capacity_hours sch_reduce_capacity_hours,
4254 FACT.total_actual_hours total_actual_hours,
4255 0 scheduled_util_hours,
4256 0 provisional_hours,
4257 0 unassigned_hours,
4258 0 conf_billable_hours,
4259 0 conf_nonbillable_hours,
4260 0 prov_billable_hours,
4261 0 prov_nonbillable_hours,
4262 0 training_hours,
4263 0 expected_hours,
4264 0 expected_util_hours,
4265 0 expected_total_util_hours,
4266 FACT.exp_reduce_capacity_hours exp_reduce_capacity_hours,
4267 0 actual_hours,
4268 0 actual_util_hours,
4269 FACT.act_reduce_capacity_hours act_reduce_capacity_hours,
4270 0 prov_util_hours,
4271 0 exp_ac_util_hours,
4272 0 exp_sch_util_hours,
4273 0 exp_ac_actual_hours,
4274 0 exp_sch_actual_hours,
4275 FACT.exp_ac_red_capacity_hours exp_ac_red_capacity_hours,
4276 FACT.exp_sch_red_capacity_hours exp_sch_red_capacity_hours,
4277 0 prior_scheduled_hours,
4278 0 prior_capacity_hours,
4279 0 prior_red_capacity_hours,
4280 0 prior_total_actual_hours,
4281 0 prior_sch_util_hours,
4282 0 prior_conf_billable_hours,
4283 0 prior_conf_nonbillable_hours,
4284 0 prior_actual_util_hours,
4285 0 prior_actual_hours
4286 FROM
4287 /* Bug 3515594 */
4288 (SELECT /*+ ORDERED */
4289 hou.name org_id,
4290 horg.name organization_id,
4291 time.name time_id,
4292 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4293 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4294 capacity_hours,
4295 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4296 total_actual_hours,
4297
4298 fct.reduce_capacity_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4299 sch_reduce_capacity_hours,
4300 decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, fct.reduce_capacity_hrs_s)
4301 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4302 exp_reduce_capacity_hours,
4303 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4304 act_reduce_capacity_hours,
4305 decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, 0)
4306 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4307 exp_ac_red_capacity_hours,
4308 decode(time.amount_type, 1, fct.reduce_capacity_hrs_s, 0)
4309 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4310 exp_sch_red_capacity_hours
4311 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4312 PJI_PMV_TIME_DIM_TMP time,
4313 PJI_RM_ORGO_F_MV fct,
4314 PJI_PMV_ORG_DIM_TMP hou,
4315 PA_IMPLEMENTATIONS_ALL imp
4316 WHERE fct.expenditure_org_id = hou.id
4317 AND fct.expenditure_organization_id = horg.id
4318 AND fct.time_id = time.id
4319 AND fct.period_type_id = time.period_type
4320 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4321 AND time.id is not null
4322 AND hou.id = imp.org_id ) FACT,
4323 (SELECT distinct WT.name
4324 FROM PJI_PMV_WT_DIM_TMP wt ) WT
4325 UNION ALL -- added for prior year capacity_hours
4326 SELECT
4327 FACT.org_id,
4328 FACT.organization_id,
4329 FACT.time_id,
4330 FACT.time_key,
4331 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
4332 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
4333 '-1' job_level_id,
4334 0 scheduled_hours,
4335 0 capacity_hours,
4336 0 sch_reduce_capacity_hours,
4337 0 total_actual_hours,
4338 0 scheduled_util_hours,
4339 0 provisional_hours,
4340 0 unassigned_hours,
4341 0 conf_billable_hours,
4342 0 conf_nonbillable_hours,
4343 0 prov_billable_hours,
4344 0 prov_nonbillable_hours,
4345 0 training_hours,
4346 0 expected_hours,
4347 0 expected_util_hours,
4348 0 expected_total_util_hours,
4349 0 exp_reduce_capacity_hours,
4350 0 actual_hours,
4351 0 actual_util_hours,
4352 0 act_reduce_capacity_hours,
4353 0 prov_util_hours,
4354 0 exp_ac_util_hours,
4355 0 exp_sch_util_hours,
4356 0 exp_ac_actual_hours,
4357 0 exp_sch_actual_hours,
4358 0 exp_ac_red_capacity_hours,
4359 0 exp_sch_red_capacity_hours,
4360 0 prior_scheduled_hours,
4361 FACT.capacity_hours prior_capacity_hours,
4362 FACT.prior_red_capacity_hours prior_red_capacity_hours,
4363 FACT.total_actual_hours prior_total_actual_hours,
4364 0 prior_sch_util_hours,
4365 0 prior_conf_billable_hours,
4366 0 prior_conf_nonbillable_hours,
4367 0 prior_actual_util_hours,
4368 0 prior_actual_hours
4369 FROM
4370 (SELECT /*+ ORDERED */
4371 hou.name org_id,
4372 horg.name organization_id,
4373 time.name time_id,
4374 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4375 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4376 capacity_hours,
4377 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4378 total_actual_hours,
4379 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4380 prior_red_capacity_hours
4381 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4382 PJI_PMV_TIME_DIM_TMP time,
4383 PJI_RM_ORGO_F_MV fct,
4384 PJI_PMV_ORG_DIM_TMP hou,
4385 PA_IMPLEMENTATIONS_ALL imp
4386 WHERE fct.expenditure_org_id = hou.id
4387 AND fct.expenditure_organization_id = horg.id
4388 AND fct.time_id = time.prior_id
4389 AND fct.period_type_id = time.period_type
4390 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4391 AND time.prior_id is not null
4392 AND hou.id = imp.org_id ) FACT,
4393 (SELECT distinct WT.name
4394 FROM PJI_PMV_WT_DIM_TMP wt ) WT
4395 )
4396 GROUP BY org_id,
4397 organization_id,
4398 time_id,
4399 time_key,
4400 util_category_id,
4401 work_type_id,
4402 job_level_id;
4403
4404 ELSIF l_util_category_flag = 'N' THEN
4405
4406 PJI_PMV_ENGINE.Convert_Organization(P_TOP_ORGANIZATION_ID => p_Organization
4407 , P_VIEW_BY => p_view_by
4408 , P_TOP_ORGANIZATION_NAME => l_Top_Organization_Name );
4409
4410 SELECT PJI_REP_U4(org_id,
4411 organization_id,
4412 time_id,
4413 time_key,
4414 util_category_id,
4415 work_type_id,
4416 job_level_id,
4417 sum(scheduled_hours),
4418 sum(capacity_hours - reduce_capacity_hrs_s),
4419 sum(scheduled_util_hours),
4420 sum(provisional_hours),
4421 sum(unassigned_hours),
4422 sum(conf_billable_hours),
4423 sum(conf_nonbillable_hours),
4424 sum(prov_billable_hours),
4425 sum(prov_nonbillable_hours),
4426 sum(training_hours),
4427 sum(expected_hours),
4428 sum(expected_util_hours),
4429 sum(expected_total_util_hours),
4430 sum(actual_util_hours),
4431 sum(capacity_hours - reduce_capacity_hrs_a),
4432 sum(capacity_hours - reduce_capacity_hrs_e),
4433 sum(prov_util_hours),
4434 sum(exp_ac_util_hours),
4435 sum(exp_sch_util_hours),
4436 sum(decode(l_denominator, 'CAPACITY', capacity_hours - exp_ac_reduce_capacity_hours, exp_ac_actual_hours)),
4437 sum(decode(l_denominator, 'CAPACITY', capacity_hours - exp_sch_reduce_capacity_hours, exp_sch_actual_hours)),
4438 sum(decode(l_denominator, 'CAPACITY', capacity_hours - reduce_capacity_hrs_a, actual_hours)),
4439 sum(decode(l_denominator, 'CAPACITY', capacity_hours - reduce_capacity_hrs_s, actual_hours)),
4440 sum(decode(l_denominator, 'CAPACITY', capacity_hours - reduce_capacity_hrs_e, actual_hours)),
4441 sum(prior_scheduled_hours),
4442 sum(prior_capacity_hours - prior_reduce_capacity_hrs_a),
4443 sum(prior_sch_util_hours),
4444 sum(prior_conf_billable_hours),
4445 sum(prior_conf_nonbillable_hours),
4446 sum(prior_capacity_hours - prior_reduce_capacity_hrs_a),
4447 sum(prior_actual_util_hours),
4448 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours - prior_reduce_capacity_hrs_a, prior_actual_hours)),
4449 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours - prior_reduce_capacity_hrs_a, prior_actual_hours)),
4450 null,null,null,null,null,null,
4451 null,null,null,null,null,null,
4452 null,null,null,null,null,null,
4453 null,null,null,null,null,null,
4454 null,null,null,null,null,null,
4455 null,null,null,null,null,null,
4456 null,null,null
4457 )
4458 /* Bug 3515594 */
4459 BULK COLLECT INTO l_u4_tbl
4460 FROM (
4461 SELECT /*+ ORDERED */
4462 hou.name org_id,
4463 horg.name organization_id,
4464 time.name time_id,
4465 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4466 '-1' util_category_id,
4467 '-1' work_type_id,
4468 job.name job_level_id,
4469 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4470 scheduled_hours,
4471 capacity_hrs capacity_hours,
4472 conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4473 scheduled_util_hours,
4474 prov_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4475 provisional_hours,
4476 unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4477 unassigned_hours,
4478 conf_bill_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4479 conf_billable_hours,
4480 (conf_wtd_org_hrs_s - conf_bill_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4481 conf_nonbillable_hours,
4482 prov_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4483 prov_billable_hours,
4484 (prov_wtd_org_hrs_s - prov_bill_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4485 prov_nonbillable_hours,
4486 training_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4487 training_hours,
4488 decode(time.amount_type, 0, total_hrs_a, conf_hrs_s)
4489 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4490 expected_hours,
4491 decode(time.amount_type, 0, total_wtd_org_hrs_a, conf_wtd_org_hrs_s)
4492 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4493 expected_util_hours,
4494 decode(time.amount_type, 0, total_wtd_org_hrs_a, conf_wtd_org_hrs_s + prov_wtd_org_hrs_s)
4495 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4496 expected_total_util_hours,
4497 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4498 actual_hours,
4499 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4500 actual_util_hours,
4501 decode(time.amount_type, 0, 0, prov_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4502 prov_util_hours,
4503 decode(time.amount_type, 0, total_wtd_org_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4504 exp_ac_util_hours,
4505 decode(time.amount_type, 0, 0, conf_wtd_org_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4506 exp_sch_util_hours,
4507 decode(time.amount_type, 0, total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4508 exp_ac_actual_hours,
4509 decode(time.amount_type, 0, 0, total_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4510 exp_sch_actual_hours,
4511 reduce_capacity_hrs_a
4512 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4513 reduce_capacity_hrs_a,
4514 reduce_capacity_hrs_s
4515 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4516 reduce_capacity_hrs_s,
4517 decode(time.amount_type, 0, reduce_capacity_hrs_a,
4518 reduce_capacity_hrs_s)
4519 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4520 reduce_capacity_hrs_e,
4521 decode(time.amount_type, 0, reduce_capacity_hrs_a,
4522 0)
4523 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4524 exp_ac_reduce_capacity_hours,
4525 decode(time.amount_type, 1, reduce_capacity_hrs_s,
4526 0)
4527 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4528 exp_sch_reduce_capacity_hours,
4529 0 prior_reduce_capacity_hrs_a,
4530 0 prior_scheduled_hours,
4531 0 prior_capacity_hours,
4532 0 prior_sch_util_hours,
4533 0 prior_conf_billable_hours,
4534 0 prior_conf_nonbillable_hours,
4535 0 prior_actual_util_hours,
4536 0 prior_actual_hours
4537 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4538 PJI_PMV_TIME_DIM_TMP time,
4539 PJI_PMV_JB_DIM_TMP job,
4540 PJI_RM_JOBO_F_MV fct,
4541 PJI_PMV_ORG_DIM_TMP hou,
4542 PA_IMPLEMENTATIONS_ALL imp
4543 WHERE fct.expenditure_org_id = hou.id
4544 AND fct.expenditure_organization_id = horg.id
4545 AND fct.job_id = job.id
4546 AND fct.time_id = time.id
4547 AND fct.period_type_id = time.period_type
4548 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4549 AND time.id is not null
4550 AND hou.id = imp.org_id
4551 UNION ALL
4552 /* Bug 3515594 */
4553 SELECT /*+ ORDERED */
4554 hou.name org_id,
4555 horg.name organization_id,
4556 time.name time_id,
4557 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4558 '-1' util_category_id,
4559 '-1' work_type_id,
4560 job.name job_level_id,
4561 0 scheduled_hours,
4562 0 capacity_hours,
4563 0 scheduled_util_hours,
4564 0 provisional_hours,
4565 0 unassigned_hours,
4566 0 conf_billable_hours,
4567 0 conf_nonbillable_hours,
4568 0 prov_billable_hours,
4569 0 prov_nonbillable_hours,
4570 0 training_hours,
4571 0 expected_hours,
4572 0 expected_util_hours,
4573 0 expected_total_util_hours,
4574 0 actual_hours,
4575 0 actual_util_hours,
4576 0 prov_util_hours,
4577 0 exp_ac_util_hours,
4578 0 exp_sch_util_hours,
4579 0 exp_ac_actual_hours,
4580 0 exp_sch_actual_hours,
4581 0 reduce_capacity_hrs_a,
4582 0 reduce_capacity_hrs_s,
4583 0 reduce_capacity_hrs_e,
4584 0 exp_ac_reduce_capacity_hours,
4585 0 exp_sch_reduce_capacity_hours,
4586 reduce_capacity_hrs_a prior_reduce_capacity_hrs_a,
4587 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4588 prior_scheduled_hours,
4589 capacity_hrs prior_capacity_hours,
4590 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4591 prior_sch_util_hours,
4592 bill_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4593 prior_conf_billable_hours,
4594 (total_wtd_org_hrs_a - bill_wtd_org_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4595 prior_conf_nonbillable_hours,
4596 total_wtd_org_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4597 prior_actual_util_hours,
4598 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4599 prior_actual_hours
4600 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4601 PJI_PMV_TIME_DIM_TMP time,
4602 PJI_PMV_JB_DIM_TMP job,
4603 PJI_RM_JOBO_F_MV fct,
4604 PJI_PMV_ORG_DIM_TMP hou,
4605 PA_IMPLEMENTATIONS_ALL imp
4606 WHERE fct.expenditure_org_id = hou.id
4607 AND fct.expenditure_organization_id = horg.id
4608 AND fct.job_id = job.id
4609 AND fct.time_id = time.prior_id
4610 AND fct.period_type_id = time.period_type
4611 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4612 AND time.prior_id is not null
4613 AND hou.id = imp.org_id
4614 UNION ALL
4615 SELECT '-1' org_id,
4616 name organization_id,
4617 '-1' time_id,
4618 -1 time_key,
4619 '-1' util_category_id,
4620 '-1' work_type_id,
4621 '-1' job_level_id,
4622 0 scheduled_hours,
4623 0 capacity_hours,
4624 0 scheduled_util_hours,
4625 0 provisional_hours,
4626 0 unassigned_hours,
4627 0 conf_billable_hours,
4628 0 conf_nonbillable_hours,
4629 0 prov_billable_hours,
4630 0 prov_nonbillable_hours,
4631 0 training_hours,
4632 0 expected_hours,
4633 0 expected_util_hours,
4634 0 expected_total_util_hours,
4635 0 actual_hours,
4636 0 actual_util_hours,
4637 0 prov_util_hours,
4638 0 exp_ac_util_hours,
4639 0 exp_sch_util_hours,
4640 0 exp_ac_actual_hours,
4641 0 exp_sch_actual_hours,
4642 0 reduce_capacity_hrs_a,
4643 0 reduce_capacity_hrs_s,
4644 0 reduce_capacity_hrs_e,
4645 0 exp_ac_reduce_capacity_hours,
4646 0 exp_sch_reduce_capacity_hours,
4647 0 prior_reduce_capacity_hrs_a,
4648 0 prior_scheduled_hours,
4649 0 prior_capacity_hours,
4650 0 prior_sch_util_hours,
4651 0 prior_conf_billable_hours,
4652 0 prior_conf_nonbillable_hours,
4653 0 prior_actual_util_hours,
4654 0 prior_actual_hours
4655 FROM PJI_PMV_ORGZ_DIM_TMP
4656 WHERE name <> '-1'
4657 UNION ALL
4658 SELECT '-1' org_id,
4659 '-1' organization_id,
4660 '-1' time_id,
4661 -1 time_key,
4662 '-1' util_category_id,
4663 '-1' work_type_id,
4664 name job_level_id,
4665 0 scheduled_hours,
4666 0 capacity_hours,
4667 0 scheduled_util_hours,
4668 0 provisional_hours,
4669 0 unassigned_hours,
4670 0 conf_billable_hours,
4671 0 conf_nonbillable_hours,
4672 0 prov_billable_hours,
4673 0 prov_nonbillable_hours,
4674 0 training_hours,
4675 0 expected_hours,
4676 0 expected_util_hours,
4677 0 expected_total_util_hours,
4678 0 actual_hours,
4679 0 actual_util_hours,
4680 0 prov_util_hours,
4681 0 exp_ac_util_hours,
4682 0 exp_sch_util_hours,
4683 0 exp_ac_actual_hours,
4684 0 exp_sch_actual_hours,
4685 0 reduce_capacity_hrs_a,
4686 0 reduce_capacity_hrs_s,
4687 0 reduce_capacity_hrs_e,
4688 0 exp_ac_reduce_capacity_hours,
4689 0 exp_sch_reduce_capacity_hours,
4690 0 prior_reduce_capacity_hrs_a,
4691 0 prior_scheduled_hours,
4692 0 prior_capacity_hours,
4693 0 prior_sch_util_hours,
4694 0 prior_conf_billable_hours,
4695 0 prior_conf_nonbillable_hours,
4696 0 prior_actual_util_hours,
4697 0 prior_actual_hours
4698 FROM PJI_PMV_JB_DIM_TMP
4699 WHERE name <> '-1'
4700 UNION ALL
4701 SELECT '-1' org_id,
4702 '-1' organization_id,
4703 name time_id,
4704 order_by_id time_key,
4705 '-1' util_category_id,
4706 '-1' work_type_id,
4707 '-1' job_level_id,
4708 0 scheduled_hours,
4709 0 capacity_hours,
4710 0 scheduled_util_hours,
4711 0 provisional_hours,
4712 0 unassigned_hours,
4713 0 conf_billable_hours,
4714 0 conf_nonbillable_hours,
4715 0 prov_billable_hours,
4716 0 prov_nonbillable_hours,
4717 0 training_hours,
4718 0 expected_hours,
4719 0 expected_util_hours,
4720 0 expected_total_util_hours,
4721 0 actual_hours,
4722 0 actual_util_hours,
4723 0 prov_util_hours,
4724 0 exp_ac_util_hours,
4725 0 exp_sch_util_hours,
4726 0 exp_ac_actual_hours,
4727 0 exp_sch_actual_hours,
4728 0 reduce_capacity_hrs_a,
4729 0 reduce_capacity_hrs_s,
4730 0 reduce_capacity_hrs_e,
4731 0 exp_ac_reduce_capacity_hours,
4732 0 exp_sch_reduce_capacity_hours,
4733 0 prior_reduce_capacity_hrs_a,
4734 0 prior_scheduled_hours,
4735 0 prior_capacity_hours,
4736 0 prior_sch_util_hours,
4737 0 prior_conf_billable_hours,
4738 0 prior_conf_nonbillable_hours,
4739 0 prior_actual_util_hours,
4740 0 prior_actual_hours
4741 FROM PJI_PMV_TIME_DIM_TMP
4742 WHERE name <> '-1'
4743 )
4744 GROUP BY org_id,
4745 organization_id,
4746 time_id,
4747 time_key,
4748 util_category_id,
4749 work_type_id,
4750 job_level_id;
4751 ELSE
4752
4753 PJI_PMV_ENGINE.Convert_Organization(p_Organization, p_view_by);
4754
4755 SELECT PJI_REP_U4(org_id,
4756 organization_id,
4757 time_id,
4758 time_key,
4759 util_category_id,
4760 work_type_id,
4761 job_level_id,
4762 sum(scheduled_hours),
4763 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-sch_reduce_capacity_hours)),
4764 sum(scheduled_util_hours),
4765 sum(provisional_hours),
4766 sum(decode (p_view_by, 'UC', null, 'WT',null, unassigned_hours)),
4767 sum(conf_billable_hours),
4768 sum(conf_nonbillable_hours),
4769 sum(prov_billable_hours),
4770 sum(prov_nonbillable_hours),
4771 sum(training_hours),
4772 sum(expected_hours),
4773 sum(expected_util_hours),
4774 sum(expected_total_util_hours),
4775 sum(actual_util_hours),
4776 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-act_reduce_capacity_hours)),
4777 sum(decode (p_view_by, 'UC', null, 'WT',null, capacity_hours-exp_reduce_capacity_hours)),
4778 sum(prov_util_hours),
4779 sum(exp_ac_util_hours),
4780 sum(exp_sch_util_hours),
4781 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_ac_red_capacity_hours,
4782 exp_ac_actual_hours)),
4783 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_sch_red_capacity_hours,
4784 exp_ac_actual_hours)),
4785 sum(decode(l_denominator, 'CAPACITY', capacity_hours-act_reduce_capacity_hours, total_actual_hours)),
4786 sum(decode(l_denominator, 'CAPACITY', capacity_hours-sch_reduce_capacity_hours, total_actual_hours)),
4787 sum(decode(l_denominator, 'CAPACITY', capacity_hours-exp_reduce_capacity_hours, total_actual_hours)),
4788 sum(prior_scheduled_hours),
4789 sum(prior_capacity_hours-prior_red_capacity_hours),
4790 sum(prior_sch_util_hours),
4791 sum(prior_conf_billable_hours),
4792 sum(prior_conf_nonbillable_hours),
4793 sum(prior_capacity_hours-prior_red_capacity_hours),
4794 sum(prior_actual_util_hours),
4795 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours-prior_red_capacity_hours,
4796 prior_total_actual_hours)),
4797 sum(decode(l_denominator, 'CAPACITY', prior_capacity_hours-prior_red_capacity_hours,
4798 prior_total_actual_hours)),
4799 null,null,null,null,null,null,
4800 null,null,null,null,null,null,
4801 null,null,null,null,null,null,
4802 null,null,null,null,null,null,
4803 null,null,null,null,null,null,
4804 null,null,null,null,null,null,
4805 null,null,null
4806 )
4807 /* Bug 3515594 */
4808 BULK COLLECT INTO l_u4_tbl
4809 FROM (
4810 SELECT /*+ ORDERED */
4811 hou.name org_id,
4812 horg.name organization_id,
4813 time.name time_id,
4814 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4815 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
4816 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
4817 job.name job_level_id,
4818 conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4819 scheduled_hours,
4820 0 capacity_hours,
4821 0 sch_reduce_capacity_hours,
4822 0 total_actual_hours,
4823 (fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4824 worktype.org_utilization_percentage / 100 scheduled_util_hours,
4825 prov_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4826 provisional_hours,
4827 unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4828 unassigned_hours,
4829 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
4830 fct.conf_hrs_s * worktype.org_utilization_percentage / 100
4831 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4832 conf_billable_hours,
4833 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
4834 fct.conf_hrs_s * worktype.org_utilization_percentage / 100
4835 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4836 conf_nonbillable_hours,
4837 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
4838 fct.prov_hrs_s * worktype.org_utilization_percentage / 100
4839 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4840 prov_billable_hours,
4841 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
4842 fct.prov_hrs_s * worktype.org_utilization_percentage / 100
4843 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4844 prov_nonbillable_hours,
4845 (CASE WHEN worktype.training_flag = 'Y' THEN
4846 fct.conf_hrs_s
4847 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4848 training_hours,
4849 decode(time.amount_type, 0, total_hrs_a, conf_hrs_s)
4850 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4851 expected_hours,
4852 (decode(time.amount_type, 0, total_hrs_a, conf_hrs_s) * worktype.org_utilization_percentage / 100)
4853 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4854 expected_util_hours,
4855 (decode(time.amount_type, 0, total_hrs_a, conf_hrs_s + prov_hrs_s) * worktype.org_utilization_percentage / 100)
4856 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4857 expected_total_util_hours,
4858 0 exp_reduce_capacity_hours,
4859 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4860 actual_hours,
4861 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1))*
4862 worktype.org_utilization_percentage / 100 actual_util_hours,
4863 0 act_reduce_capacity_hours,
4864 (decode(time.amount_type, 0, 0, fct.prov_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4865 worktype.org_utilization_percentage / 100 prov_util_hours,
4866 (decode(time.amount_type, 0, fct.total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4867 worktype.org_utilization_percentage / 100
4868 exp_ac_util_hours,
4869 (decode(time.amount_type, 0, 0, fct.conf_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4870 worktype.org_utilization_percentage / 100
4871 exp_sch_util_hours,
4872 decode(time.amount_type, 0, fct.total_hrs_a, 0) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4873 exp_ac_actual_hours,
4874 decode(time.amount_type, 0, 0, fct.total_hrs_a) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4875 exp_sch_actual_hours,
4876 0 exp_ac_red_capacity_hours,
4877 0 exp_sch_red_capacity_hours,
4878 0 prior_scheduled_hours,
4879 0 prior_capacity_hours,
4880 0 prior_red_capacity_hours,
4881 0 prior_total_actual_hours,
4882 0 prior_sch_util_hours,
4883 0 prior_conf_billable_hours,
4884 0 prior_conf_nonbillable_hours,
4885 0 prior_actual_util_hours,
4886 0 prior_actual_hours
4887 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4888 PJI_PMV_TIME_DIM_TMP time,
4889 PJI_PMV_WT_DIM_TMP wt,
4890 PJI_RM_RES_WT_F fct,
4891 PJI_PMV_ORG_DIM_TMP hou,
4892 PJI_PMV_JB_DIM_TMP job,
4893 PA_WORK_TYPES_B worktype,
4894 PA_IMPLEMENTATIONS_ALL imp
4895 WHERE fct.expenditure_org_id = hou.id
4896 AND fct.expenditure_organization_id = horg.id
4897 AND fct.work_type_id = wt.id
4898 AND wt.id = worktype.work_type_id
4899 AND fct.job_id = job.id
4900 AND fct.time_id = time.id
4901 AND fct.period_type_id = time.period_type
4902 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4903 AND time.id is not null
4904 AND hou.id = imp.org_id
4905 UNION ALL
4906 /* Bug 3515594 */
4907 SELECT /*+ ORDERED */
4908 hou.name org_id,
4909 horg.name organization_id,
4910 time.name time_id,
4911 DECODE(p_view_by, 'TM', time.id, -1) time_key,
4912 decode(p_view_by, 'UC', wt.name, '-1') util_category_id,
4913 decode(p_view_by, 'WT', wt.name, '-1') work_type_id,
4914 job.name job_level_id,
4915 0 scheduled_hours,
4916 0 capacity_hours,
4917 0 sch_reduce_capacity_hours,
4918 0 total_actual_hours,
4919 0 scheduled_util_hours,
4920 0 provisional_hours,
4921 0 unassigned_hours,
4922 0 conf_billable_hours,
4923 0 conf_nonbillable_hours,
4924 0 prov_billable_hours,
4925 0 prov_nonbillable_hours,
4926 0 training_hours,
4927 0 expected_hours,
4928 0 expected_util_hours,
4929 0 expected_total_util_hours,
4930 0 exp_reduce_capacity_hours,
4931 0 actual_hours,
4932 0 actual_util_hours,
4933 0 act_reduce_capacity_hours,
4934 0 prov_util_hours,
4935 0 exp_ac_util_hours,
4936 0 exp_sch_util_hours,
4937 0 exp_ac_actual_hours,
4938 0 exp_sch_actual_hours,
4939 0 exp_ac_red_capacity_hours,
4940 0 exp_sch_red_capacity_hours,
4941 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4942 prior_scheduled_hours,
4943 0 prior_capacity_hours,
4944 0 prior_red_capacity_hours,
4945 0 prior_total_actual_hours,
4946 (fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)) *
4947 worktype.org_utilization_percentage / 100 prior_sch_util_hours,
4948 (CASE WHEN worktype.billable_capitalizable_flag = 'Y' THEN
4949 fct.total_hrs_a * worktype.org_utilization_percentage / 100
4950 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4951 prior_conf_billable_hours,
4952 (CASE WHEN worktype.billable_capitalizable_flag = 'N' THEN
4953 fct.conf_hrs_s * worktype.org_utilization_percentage / 100
4954 ELSE 0 END) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4955 prior_conf_nonbillable_hours,
4956 fct.total_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) *
4957 worktype.org_utilization_percentage / 100 prior_actual_util_hours,
4958 total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
4959 prior_actual_hours
4960 FROM PJI_PMV_ORGZ_DIM_TMP horg,
4961 PJI_PMV_TIME_DIM_TMP time,
4962 PJI_PMV_WT_DIM_TMP wt,
4963 PJI_RM_RES_WT_F fct,
4964 PJI_PMV_ORG_DIM_TMP hou,
4965 PJI_PMV_JB_DIM_TMP job,
4966 PA_WORK_TYPES_B worktype,
4967 PA_IMPLEMENTATIONS_ALL imp
4968 WHERE fct.expenditure_org_id = hou.id
4969 AND fct.expenditure_organization_id = horg.id
4970 AND fct.work_type_id = wt.id
4971 AND wt.id = worktype.work_type_id
4972 AND fct.job_id = job.id
4973 AND fct.time_id = time.prior_id
4974 AND fct.period_type_id = time.period_type
4975 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
4976 AND time.prior_id is not null
4977 AND hou.id = imp.org_id
4978 UNION ALL
4979 SELECT '-1' org_id,
4980 name organization_id,
4981 '-1' time_id,
4982 -1 time_key,
4983 '-1' util_category_id,
4984 '-1' work_type_id,
4985 '-1' job_level_id,
4986 0 scheduled_hours,
4987 0 capacity_hours,
4988 0 sch_reduce_capacity_hours,
4989 0 total_actual_hours,
4990 0 scheduled_util_hours,
4991 0 provisional_hours,
4992 0 unassigned_hours,
4993 0 conf_billable_hours,
4994 0 conf_nonbillable_hours,
4995 0 prov_billable_hours,
4996 0 prov_nonbillable_hours,
4997 0 training_hours,
4998 0 expected_hours,
4999 0 expected_util_hours,
5000 0 expected_total_util_hours,
5001 0 exp_reduce_capacity_hours,
5002 0 actual_hours,
5003 0 actual_util_hours,
5004 0 act_reduce_capacity_hours,
5005 0 prov_util_hours,
5006 0 exp_ac_util_hours,
5007 0 exp_sch_util_hours,
5008 0 exp_ac_actual_hours,
5009 0 exp_sch_actual_hours,
5010 0 exp_ac_red_capacity_hours,
5011 0 exp_sch_red_capacity_hours,
5012 0 prior_scheduled_hours,
5013 0 prior_capacity_hours,
5014 0 prior_red_capacity_hours,
5015 0 prior_total_actual_hours,
5016 0 prior_sch_util_hours,
5017 0 prior_conf_billable_hours,
5018 0 prior_conf_nonbillable_hours,
5019 0 prior_actual_util_hours,
5020 0 prior_actual_hours
5021 FROM PJI_PMV_ORGZ_DIM_TMP
5022 WHERE name <> '-1'
5023 UNION ALL
5024 SELECT '-1' org_id,
5025 '-1' organization_id,
5026 '-1' time_id,
5027 -1 time_key,
5028 decode(p_view_by, 'UC', name, '-1') util_category_id,
5029 decode(p_view_by, 'WT', name, '-1') work_type_id,
5030 '-1' job_level_id,
5031 0 scheduled_hours,
5032 0 capacity_hours,
5033 0 sch_reduce_capacity_hours,
5034 0 total_actual_hours,
5035 0 scheduled_util_hours,
5036 0 provisional_hours,
5037 0 unassigned_hours,
5038 0 conf_billable_hours,
5039 0 conf_nonbillable_hours,
5040 0 prov_billable_hours,
5041 0 prov_nonbillable_hours,
5042 0 training_hours,
5043 0 expected_hours,
5044 0 expected_util_hours,
5045 0 expected_total_util_hours,
5046 0 exp_reduce_capacity_hours,
5047 0 actual_hours,
5048 0 actual_util_hours,
5049 0 act_reduce_capacity_hours,
5050 0 prov_util_hours,
5051 0 exp_ac_util_hours,
5052 0 exp_sch_util_hours,
5053 0 exp_ac_actual_hours,
5054 0 exp_sch_actual_hours,
5055 0 exp_ac_red_capacity_hours,
5056 0 exp_sch_red_capacity_hours,
5057 0 prior_scheduled_hours,
5058 0 prior_capacity_hours,
5059 0 prior_red_capacity_hours,
5060 0 prior_total_actual_hours,
5061 0 prior_sch_util_hours,
5062 0 prior_conf_billable_hours,
5063 0 prior_conf_nonbillable_hours,
5064 0 prior_actual_util_hours,
5065 0 prior_actual_hours
5066 FROM PJI_PMV_WT_DIM_TMP
5067 WHERE name <> '-1'
5068 UNION ALL
5069 SELECT '-1' org_id,
5070 '-1' organization_id,
5071 '-1' time_id,
5072 -1 time_key,
5073 '-1' util_category_id,
5074 '-1' work_type_id,
5075 name job_level_id,
5076 0 scheduled_hours,
5077 0 capacity_hours,
5078 0 sch_reduce_capacity_hours,
5079 0 total_actual_hours,
5080 0 scheduled_util_hours,
5081 0 provisional_hours,
5082 0 unassigned_hours,
5083 0 conf_billable_hours,
5084 0 conf_nonbillable_hours,
5085 0 prov_billable_hours,
5086 0 prov_nonbillable_hours,
5087 0 training_hours,
5088 0 expected_hours,
5089 0 expected_util_hours,
5090 0 expected_total_util_hours,
5091 0 exp_reduce_capacity_hours,
5092 0 actual_hours,
5093 0 actual_util_hours,
5094 0 act_reduce_capacity_hours,
5095 0 prov_util_hours,
5096 0 exp_ac_util_hours,
5097 0 exp_sch_util_hours,
5098 0 exp_ac_actual_hours,
5099 0 exp_sch_actual_hours,
5100 0 exp_ac_red_capacity_hours,
5101 0 exp_sch_red_capacity_hours,
5102 0 prior_scheduled_hours,
5103 0 prior_capacity_hours,
5104 0 prior_red_capacity_hours,
5105 0 prior_total_actual_hours,
5106 0 prior_sch_util_hours,
5107 0 prior_conf_billable_hours,
5108 0 prior_conf_nonbillable_hours,
5109 0 prior_actual_util_hours,
5110 0 prior_actual_hours
5111 FROM PJI_PMV_JB_DIM_TMP
5112 WHERE name <> '-1'
5113 UNION ALL
5114 SELECT '-1' org_id,
5115 '-1' organization_id,
5116 name time_id,
5117 order_by_id time_key,
5118 '-1' util_category_id,
5119 '-1' work_type_id,
5120 '-1' job_level_id,
5121 0 scheduled_hours,
5122 0 capacity_hours,
5123 0 sch_reduce_capacity_hours,
5124 0 total_actual_hours,
5125 0 scheduled_util_hours,
5126 0 provisional_hours,
5127 0 unassigned_hours,
5128 0 conf_billable_hours,
5129 0 conf_nonbillable_hours,
5130 0 prov_billable_hours,
5131 0 prov_nonbillable_hours,
5132 0 training_hours,
5133 0 expected_hours,
5134 0 expected_util_hours,
5135 0 expected_total_util_hours,
5136 0 exp_reduce_capacity_hours,
5137 0 actual_hours,
5138 0 actual_util_hours,
5139 0 act_reduce_capacity_hours,
5140 0 prov_util_hours,
5141 0 exp_ac_util_hours,
5142 0 exp_sch_util_hours,
5143 0 exp_ac_actual_hours,
5144 0 exp_sch_actual_hours,
5145 0 exp_ac_red_capacity_hours,
5146 0 exp_sch_red_capacity_hours,
5147 0 prior_scheduled_hours,
5148 0 prior_capacity_hours,
5149 0 prior_red_capacity_hours,
5150 0 prior_total_actual_hours,
5151 0 prior_sch_util_hours,
5152 0 prior_conf_billable_hours,
5153 0 prior_conf_nonbillable_hours,
5154 0 prior_actual_util_hours,
5155 0 prior_actual_hours
5156 FROM PJI_PMV_TIME_DIM_TMP
5157 WHERE name <> '-1'
5158 UNION ALL -- added for current year capacity_hours
5159 /* Bug 3515594 */
5160 SELECT
5161 FACT.org_id,
5162 FACT.organization_id,
5163 FACT.time_id,
5164 FACT.time_key,
5165 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
5166 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
5167 FACT.job_level_id job_level_id,
5168 0 scheduled_hours,
5169 FACT.capacity_hours capacity_hours,
5170 FACT.sch_reduce_capacity_hours sch_reduce_capacity_hours,
5171 FACT.total_actual_hours total_actual_hours,
5172 0 scheduled_util_hours,
5173 0 provisional_hours,
5174 0 unassigned_hours,
5175 0 conf_billable_hours,
5176 0 conf_nonbillable_hours,
5177 0 prov_billable_hours,
5178 0 prov_nonbillable_hours,
5179 0 training_hours,
5180 0 expected_hours,
5181 0 expected_util_hours,
5182 0 expected_total_util_hours,
5183 FACT.exp_reduce_capacity_hours exp_reduce_capacity_hours,
5184 0 actual_hours,
5185 0 actual_util_hours,
5186 FACT.act_reduce_capacity_hours act_reduce_capacity_hours,
5187 0 prov_util_hours,
5188 0 exp_ac_util_hours,
5189 0 exp_sch_util_hours,
5190 0 exp_ac_actual_hours,
5191 0 exp_sch_actual_hours,
5192 FACT.exp_ac_red_capacity_hours exp_ac_red_capacity_hours,
5193 FACT.exp_sch_red_capacity_hours exp_sch_red_capacity_hours,
5194 0 prior_scheduled_hours,
5195 0 prior_capacity_hours,
5196 0 prior_red_capacity_hours,
5197 0 prior_total_actual_hours,
5198 0 prior_sch_util_hours,
5199 0 prior_conf_billable_hours,
5200 0 prior_conf_nonbillable_hours,
5201 0 prior_actual_util_hours,
5202 0 prior_actual_hours
5203 FROM
5204 (SELECT /*+ ORDERED */
5205 hou.name org_id,
5206 horg.name organization_id,
5207 time.name time_id,
5208 DECODE(p_view_by, 'TM', time.id, -1) time_key,
5209 job.name job_level_id,
5210 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5211 capacity_hours,
5212 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5213 total_actual_hours,
5214 fct.reduce_capacity_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5215 sch_reduce_capacity_hours,
5216 decode(time.amount_type, 0, reduce_capacity_hrs_a, reduce_capacity_hrs_s)
5217 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5218 exp_reduce_capacity_hours,
5219 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5220 act_reduce_capacity_hours,
5221 decode(time.amount_type, 0, reduce_capacity_hrs_a,0)
5222 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5223 exp_ac_red_capacity_hours,
5224 decode(time.amount_type, 1, reduce_capacity_hrs_s,0)
5225 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5226 exp_sch_red_capacity_hours
5227 FROM PJI_PMV_ORGZ_DIM_TMP horg,
5228 PJI_PMV_TIME_DIM_TMP time,
5229 PJI_PMV_JB_DIM_TMP job,
5230 PJI_RM_JOB_F_MV fct,
5231 PJI_PMV_ORG_DIM_TMP hou,
5232 PA_IMPLEMENTATIONS_ALL imp
5233 WHERE fct.expenditure_org_id = hou.id
5234 AND fct.expenditure_organization_id = horg.id
5235 AND fct.time_id = time.id
5236 AND fct.period_type_id = time.period_type
5237 AND fct.job_id = job.id
5238 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
5239 AND time.id is not null
5240 AND hou.id = imp.org_id ) FACT,
5241 (SELECT distinct WT.name
5242 FROM PJI_PMV_WT_DIM_TMP wt ) WT
5243 UNION ALL -- added for prior year capacity_hours
5244 /* Bug 3515594 */
5245 SELECT
5246 FACT.org_id,
5247 FACT.organization_id,
5248 FACT.time_id,
5249 FACT.time_key,
5250 decode(p_view_by, 'UC', WT.name, '-1') util_category_id,
5251 decode(p_view_by, 'WT', WT.name, '-1') work_type_id,
5252 FACT.job_level_id job_level_id,
5253 0 scheduled_hours,
5254 0 capacity_hours,
5255 0 sch_reduce_capacity_hours,
5256 0 total_actual_hours,
5257 0 scheduled_util_hours,
5258 0 provisional_hours,
5259 0 unassigned_hours,
5260 0 conf_billable_hours,
5261 0 conf_nonbillable_hours,
5262 0 prov_billable_hours,
5263 0 prov_nonbillable_hours,
5264 0 training_hours,
5265 0 expected_hours,
5266 0 expected_util_hours,
5267 0 expected_total_util_hours,
5268 0 exp_reduce_capacity_hours,
5269 0 actual_hours,
5270 0 actual_util_hours,
5271 0 act_reduce_capacity_hours,
5272 0 prov_util_hours,
5273 0 exp_ac_util_hours,
5274 0 exp_sch_util_hours,
5275 0 exp_ac_actual_hours,
5276 0 exp_sch_actual_hours,
5277 0 exp_ac_red_capacity_hours,
5278 0 exp_sch_red_capacity_hours,
5279 0 prior_scheduled_hours,
5280 FACT.capacity_hours prior_capacity_hours,
5281 FACT.prior_red_capacity_hours prior_red_capacity_hours,
5282 FACT.total_actual_hours prior_total_actual_hours,
5283 0 prior_sch_util_hours,
5284 0 prior_conf_billable_hours,
5285 0 prior_conf_nonbillable_hours,
5286 0 prior_actual_util_hours,
5287 0 prior_actual_hours
5288 FROM
5289 (SELECT /*+ ORDERED */
5290 hou.name org_id,
5291 horg.name organization_id,
5292 time.name time_id,
5293 DECODE(p_view_by, 'TM', time.id, -1) time_key,
5294 job.name job_level_id,
5295 fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5296 capacity_hours,
5297 fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5298 total_actual_hours,
5299 fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
5300 prior_red_capacity_hours
5301 FROM PJI_PMV_ORGZ_DIM_TMP horg,
5302 PJI_PMV_TIME_DIM_TMP time,
5303 PJI_PMV_JB_DIM_TMP job,
5304 PJI_RM_JOB_F_MV fct,
5305 PJI_PMV_ORG_DIM_TMP hou,
5306 PA_IMPLEMENTATIONS_ALL imp
5307 WHERE fct.expenditure_org_id = hou.id
5308 AND fct.expenditure_organization_id = horg.id
5309 AND fct.time_id = time.prior_id
5310 AND fct.period_type_id = time.period_type
5311 AND fct.job_id = job.id
5312 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
5313 AND time.prior_id is not null
5314 AND hou.id = imp.org_id ) FACT,
5315 (SELECT distinct WT.name
5316 FROM PJI_PMV_WT_DIM_TMP wt ) WT
5317 )
5318 GROUP BY org_id,
5319 organization_id,
5320 time_id,
5321 time_key,
5322 util_category_id,
5323 work_type_id,
5324 job_level_id;
5325 END IF;
5326
5327 /* Correcting value of Top level Org */
5328
5329
5330 FOR i in 1..l_u4_tbl.COUNT
5331 LOOP
5332 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' )
5333 AND l_u4_tbl(i).ORGANIZATION_ID = l_Top_Organization_Name THEN
5334
5335 l_Top_Org_Index:=i;
5336
5337 ELSE
5338
5339 l_scheduled_hours := l_scheduled_hours + nvl(l_u4_tbl(i).scheduled_hours,0);
5340 l_scheduled_capacity_hours := l_scheduled_capacity_hours + nvl(l_u4_tbl(i).scheduled_capacity_hours,0);
5341 l_scheduled_util_hours := l_scheduled_util_hours + nvl(l_u4_tbl(i).scheduled_util_hours,0);
5342 l_provisional_hours := l_provisional_hours + nvl(l_u4_tbl(i).provisional_hours,0);
5343 l_unassigned_hours := l_unassigned_hours + nvl(l_u4_tbl(i).unassigned_hours,0);
5344 l_conf_billable_hours := l_conf_billable_hours + nvl(l_u4_tbl(i).conf_billable_hours,0);
5345 l_conf_nonbillable_hours := l_conf_nonbillable_hours + nvl(l_u4_tbl(i).conf_nonbillable_hours,0);
5346 l_prov_billable_hours := l_prov_billable_hours + nvl(l_u4_tbl(i).prov_billable_hours,0);
5347 l_prov_nonbillable_hours := l_prov_nonbillable_hours + nvl(l_u4_tbl(i).prov_nonbillable_hours,0);
5348 l_training_hours := l_training_hours + nvl(l_u4_tbl(i).training_hours,0);
5349 l_expected_hours := l_expected_hours + nvl(l_u4_tbl(i).expected_hours,0);
5350 l_expected_util_hours := l_expected_util_hours + nvl(l_u4_tbl(i).expected_util_hours,0);
5351 l_expected_total_util_hours := l_expected_total_util_hours + nvl(l_u4_tbl(i).expected_total_util_hours,0);
5352 l_actual_util_hours := l_actual_util_hours + nvl(l_u4_tbl(i).actual_util_hours,0);
5353 l_actual_capacity_hours := l_actual_capacity_hours + nvl(l_u4_tbl(i).actual_capacity_hours,0);
5354 l_expected_capacity_hours := l_expected_capacity_hours + nvl(l_u4_tbl(i).expected_capacity_hours,0);
5355 l_prov_util_hours := l_prov_util_hours + nvl(l_u4_tbl(i).prov_util_hours,0);
5356 l_exp_ac_util_hours := l_exp_ac_util_hours + nvl(l_u4_tbl(i).exp_ac_util_hours,0);
5357 l_exp_sch_util_hours := l_exp_sch_util_hours + nvl(l_u4_tbl(i).exp_sch_util_hours,0);
5358 l_exp_ac_denominator := l_exp_ac_denominator + nvl(l_u4_tbl(i).exp_ac_denominator,0);
5359 l_exp_sch_denominator := l_exp_sch_denominator + nvl(l_u4_tbl(i).exp_sch_denominator,0);
5360 l_actual_denominator := l_actual_denominator + nvl(l_u4_tbl(i).actual_denominator,0);
5361 l_scheduled_denominator := l_scheduled_denominator + nvl(l_u4_tbl(i).scheduled_denominator,0);
5362 l_expected_denominator := l_expected_denominator + nvl(l_u4_tbl(i).expected_denominator,0);
5363 l_prior_scheduled_hours := l_prior_scheduled_hours + nvl(l_u4_tbl(i).prior_scheduled_hours,0);
5364 l_prior_sch_capacity_hours := l_prior_sch_capacity_hours + nvl(l_u4_tbl(i).prior_sch_capacity_hours,0);
5365 l_prior_sch_util_hours := l_prior_sch_util_hours + nvl(l_u4_tbl(i).prior_sch_util_hours,0);
5366 l_prior_conf_billable_hours := l_prior_conf_billable_hours + nvl(l_u4_tbl(i).prior_conf_billable_hours,0);
5367 l_prior_conf_nonbillable_hours := l_prior_conf_nonbillable_hours + nvl(l_u4_tbl(i).prior_conf_nonbillable_hours,0);
5368 l_prior_actual_capacity_hours := l_prior_actual_capacity_hours + nvl(l_u4_tbl(i).prior_actual_capacity_hours,0);
5369 l_prior_actual_util_hours := l_prior_actual_util_hours + nvl(l_u4_tbl(i).prior_actual_util_hours,0);
5370 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u4_tbl(i).prior_actual_denominator,0);
5371 l_prior_scheduled_denominator := l_prior_scheduled_denominator + nvl(l_u4_tbl(i).prior_scheduled_denominator,0);
5372
5373 --Calculated column processing is done below
5374 --L-Top-Org is not done here
5375 --Calculated columns for PJI_REP_U4
5376 IF nvl(l_u4_tbl(i).scheduled_denominator,0) <> 0 THEN
5377 l_u4_tbl(i).sch_util_percent := 100 * (l_u4_tbl(i).scheduled_util_hours / l_u4_tbl(i).scheduled_denominator);
5378 l_u4_tbl(i).bill_util_percent := 100 * (l_u4_tbl(i).conf_billable_hours / l_u4_tbl(i).scheduled_denominator);
5379 l_u4_tbl(i).nonbill_util_percent := 100 * (l_u4_tbl(i).conf_nonbillable_hours / l_u4_tbl(i).scheduled_denominator);
5380 l_u4_tbl(i).unassigned_percent := 100 * (l_u4_tbl(i).unassigned_hours / l_u4_tbl(i).scheduled_denominator);
5381 l_u4_tbl(i).training_percent := 100 * (l_u4_tbl(i).training_hours / l_u4_tbl(i).scheduled_denominator);
5382 l_u4_tbl(i).prov_bill_percent := 100 * (l_u4_tbl(i).prov_billable_hours / l_u4_tbl(i).scheduled_denominator);
5383 l_u4_tbl(i).prov_nonbill_percent := 100 * (l_u4_tbl(i).prov_nonbillable_hours / l_u4_tbl(i).scheduled_denominator);
5384
5385 ELSE
5386 l_u4_tbl(i).sch_util_percent := NULL;
5387 l_u4_tbl(i).bill_util_percent := NULL;
5388 l_u4_tbl(i).nonbill_util_percent := NULL;
5389 l_u4_tbl(i).unassigned_percent := NULL;
5390 l_u4_tbl(i).training_percent := NULL;
5391 l_u4_tbl(i).prov_bill_percent := NULL;
5392 l_u4_tbl(i).prov_nonbill_percent := NULL;
5393
5394 END IF;
5395
5396 IF nvl(l_u4_tbl(i).prior_scheduled_denominator,0) <> 0 THEN
5397 l_u4_tbl(i).prior_sch_util_percent := 100 * (l_u4_tbl(i).prior_sch_util_hours / l_u4_tbl(i).prior_scheduled_denominator);
5398 l_u4_tbl(i).prior_bill_util_percent := 100 * (l_u4_tbl(i).prior_conf_billable_hours / l_u4_tbl(i).prior_scheduled_denominator);
5399 l_u4_tbl(i).prior_nonbill_util_percent := 100 * (l_u4_tbl(i).prior_conf_nonbillable_hours / l_u4_tbl(i).prior_scheduled_denominator);
5400 ELSE
5401 l_u4_tbl(i).prior_sch_util_percent := NULL;
5402 l_u4_tbl(i).prior_bill_util_percent := NULL;
5403 l_u4_tbl(i).prior_nonbill_util_percent := NULL;
5404 END IF;
5405
5406 --Calculated columns for PJI_REP_U5
5407 IF nvl(l_u4_tbl(i).exp_ac_denominator,0) <> 0 THEN
5408
5409 l_u4_tbl(i).exp_act_util_percent := 100 * (l_u4_tbl(i).exp_ac_util_hours / l_u4_tbl(i).exp_ac_denominator);
5410
5411 ELSE
5412 l_u4_tbl(i).exp_act_util_percent := NULL;
5413 END IF;
5414
5415 IF nvl(l_u4_tbl(i).exp_sch_denominator,0) <> 0 THEN
5416
5417 l_u4_tbl(i).exp_sch_util_percent := 100 * (l_u4_tbl(i).exp_sch_util_hours / l_u4_tbl(i).exp_sch_denominator);
5418 l_u4_tbl(i).prov_sch_util_percent := 100 * (l_u4_tbl(i).prov_util_hours / l_u4_tbl(i).exp_sch_denominator);
5419
5420 ELSE
5421 l_u4_tbl(i).exp_sch_util_percent := NULL;
5422 l_u4_tbl(i).prov_sch_util_percent := NULL;
5423 END IF;
5424
5425 IF nvl(l_u4_tbl(i).expected_denominator,0) <> 0 THEN
5426
5427 l_u4_tbl(i).exp_util_percent := 100 * (l_u4_tbl(i).expected_util_hours / l_u4_tbl(i).expected_denominator);
5428 l_u4_tbl(i).exp_total_util_percent := 100 * (l_u4_tbl(i).expected_total_util_hours / l_u4_tbl(i).expected_denominator);
5429
5430 ELSE
5431 l_u4_tbl(i).exp_util_percent := NULL;
5432 l_u4_tbl(i).exp_total_util_percent := NULL;
5433 END IF;
5434
5435 IF nvl(l_u4_tbl(i).prior_actual_denominator,0) <> 0 THEN
5436
5437 l_u4_tbl(i).prior_act_util_percent := 100 * (l_u4_tbl(i).prior_actual_util_hours / l_u4_tbl(i).prior_actual_denominator);
5438
5439 ELSE
5440 l_u4_tbl(i).prior_act_util_percent := NULL;
5441 END IF;
5442
5443 END IF; --end p_view_by
5444 END LOOP;
5445
5446 IF p_View_By = 'OG' AND ( l_job_flag = 'N' OR l_util_category_flag = 'N' ) THEN
5447
5448 l_u4_tbl(l_Top_Org_Index).scheduled_hours := l_u4_tbl(l_Top_Org_Index).scheduled_hours - l_scheduled_hours;
5449 l_u4_tbl(l_Top_Org_Index).scheduled_capacity_hours := l_u4_tbl(l_Top_Org_Index).scheduled_capacity_hours - l_scheduled_capacity_hours;
5450 l_u4_tbl(l_Top_Org_Index).scheduled_util_hours := l_u4_tbl(l_Top_Org_Index).scheduled_util_hours - l_scheduled_util_hours;
5451 l_u4_tbl(l_Top_Org_Index).provisional_hours := l_u4_tbl(l_Top_Org_Index).provisional_hours - l_provisional_hours;
5452 l_u4_tbl(l_Top_Org_Index).unassigned_hours := l_u4_tbl(l_Top_Org_Index).unassigned_hours - l_unassigned_hours;
5453 l_u4_tbl(l_Top_Org_Index).conf_billable_hours := l_u4_tbl(l_Top_Org_Index).conf_billable_hours - l_conf_billable_hours;
5454 l_u4_tbl(l_Top_Org_Index).conf_nonbillable_hours := l_u4_tbl(l_Top_Org_Index).conf_nonbillable_hours - l_conf_nonbillable_hours;
5455 l_u4_tbl(l_Top_Org_Index).prov_billable_hours := l_u4_tbl(l_Top_Org_Index).prov_billable_hours - l_prov_billable_hours;
5456 l_u4_tbl(l_Top_Org_Index).prov_nonbillable_hours := l_u4_tbl(l_Top_Org_Index).prov_nonbillable_hours - l_prov_nonbillable_hours;
5457 l_u4_tbl(l_Top_Org_Index).training_hours := l_u4_tbl(l_Top_Org_Index).training_hours - l_training_hours;
5458 l_u4_tbl(l_Top_Org_Index).expected_hours := l_u4_tbl(l_Top_Org_Index).expected_hours - l_expected_hours;
5459 l_u4_tbl(l_Top_Org_Index).expected_util_hours := l_u4_tbl(l_Top_Org_Index).expected_util_hours - l_expected_util_hours;
5460 l_u4_tbl(l_Top_Org_Index).expected_total_util_hours := l_u4_tbl(l_Top_Org_Index).expected_total_util_hours - l_expected_total_util_hours;
5461 l_u4_tbl(l_Top_Org_Index).actual_util_hours := l_u4_tbl(l_Top_Org_Index).actual_util_hours - l_actual_util_hours;
5462 l_u4_tbl(l_Top_Org_Index).actual_capacity_hours := l_u4_tbl(l_Top_Org_Index).actual_capacity_hours - l_actual_capacity_hours;
5463 l_u4_tbl(l_Top_Org_Index).expected_capacity_hours := l_u4_tbl(l_Top_Org_Index).expected_capacity_hours - l_expected_capacity_hours;
5464 l_u4_tbl(l_Top_Org_Index).prov_util_hours := l_u4_tbl(l_Top_Org_Index).prov_util_hours - l_prov_util_hours;
5465 l_u4_tbl(l_Top_Org_Index).exp_ac_util_hours := l_u4_tbl(l_Top_Org_Index).exp_ac_util_hours - l_exp_ac_util_hours;
5466 l_u4_tbl(l_Top_Org_Index).exp_sch_util_hours := l_u4_tbl(l_Top_Org_Index).exp_sch_util_hours - l_exp_sch_util_hours;
5467 l_u4_tbl(l_Top_Org_Index).exp_ac_denominator := l_u4_tbl(l_Top_Org_Index).exp_ac_denominator - l_exp_ac_denominator;
5468 l_u4_tbl(l_Top_Org_Index).exp_sch_denominator := l_u4_tbl(l_Top_Org_Index).exp_sch_denominator - l_exp_sch_denominator;
5469 l_u4_tbl(l_Top_Org_Index).actual_denominator := l_u4_tbl(l_Top_Org_Index).actual_denominator - l_actual_denominator;
5470 l_u4_tbl(l_Top_Org_Index).scheduled_denominator := l_u4_tbl(l_Top_Org_Index).scheduled_denominator - l_scheduled_denominator;
5471 l_u4_tbl(l_Top_Org_Index).expected_denominator := l_u4_tbl(l_Top_Org_Index).expected_denominator - l_expected_denominator;
5472 l_u4_tbl(l_Top_Org_Index).prior_scheduled_hours := l_u4_tbl(l_Top_Org_Index).prior_scheduled_hours - l_prior_scheduled_hours;
5473 l_u4_tbl(l_Top_Org_Index).prior_sch_capacity_hours := l_u4_tbl(l_Top_Org_Index).prior_sch_capacity_hours - l_prior_sch_capacity_hours;
5474 l_u4_tbl(l_Top_Org_Index).prior_sch_util_hours := l_u4_tbl(l_Top_Org_Index).prior_sch_util_hours - l_prior_sch_util_hours;
5475 l_u4_tbl(l_Top_Org_Index).prior_conf_billable_hours := l_u4_tbl(l_Top_Org_Index).prior_conf_billable_hours - l_prior_conf_billable_hours;
5476 l_u4_tbl(l_Top_Org_Index).prior_conf_nonbillable_hours := l_u4_tbl(l_Top_Org_Index).prior_conf_nonbillable_hours - l_prior_conf_nonbillable_hours;
5477 l_u4_tbl(l_Top_Org_Index).prior_actual_capacity_hours := l_u4_tbl(l_Top_Org_Index).prior_actual_capacity_hours - l_prior_actual_capacity_hours;
5478 l_u4_tbl(l_Top_Org_Index).prior_actual_util_hours := l_u4_tbl(l_Top_Org_Index).prior_actual_util_hours - l_prior_actual_util_hours;
5479 l_u4_tbl(l_Top_Org_Index).prior_actual_denominator := l_u4_tbl(l_Top_Org_Index).prior_actual_denominator - l_prior_actual_denominator;
5480 l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator := l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator - l_prior_scheduled_denominator;
5481
5482 --Calculated columns processing for l_top_org
5483 IF nvl(l_u4_tbl(l_Top_Org_Index).scheduled_denominator,0) <> 0 THEN
5484 l_u4_tbl(l_Top_Org_Index).sch_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).scheduled_util_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5485 l_u4_tbl(l_Top_Org_Index).bill_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).conf_billable_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5486 l_u4_tbl(l_Top_Org_Index).nonbill_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).conf_nonbillable_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5487 l_u4_tbl(l_Top_Org_Index).unassigned_percent := 100 * (l_u4_tbl(l_Top_Org_Index).unassigned_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5488 l_u4_tbl(l_Top_Org_Index).training_percent := 100 * (l_u4_tbl(l_Top_Org_Index).training_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5489 l_u4_tbl(l_Top_Org_Index).prov_bill_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prov_billable_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5490 l_u4_tbl(l_Top_Org_Index).prov_nonbill_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prov_nonbillable_hours / l_u4_tbl(l_Top_Org_Index).scheduled_denominator);
5491
5492 ELSE
5493 l_u4_tbl(l_Top_Org_Index).sch_util_percent := NULL;
5494 l_u4_tbl(l_Top_Org_Index).bill_util_percent := NULL;
5495 l_u4_tbl(l_Top_Org_Index).nonbill_util_percent := NULL;
5496 l_u4_tbl(l_Top_Org_Index).unassigned_percent := NULL;
5497 l_u4_tbl(l_Top_Org_Index).training_percent := NULL;
5498 l_u4_tbl(l_Top_Org_Index).prov_bill_percent := NULL;
5499 l_u4_tbl(l_Top_Org_Index).prov_nonbill_percent := NULL;
5500
5501 END IF;
5502
5503 IF nvl(l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator,0) <> 0 THEN
5504 l_u4_tbl(l_Top_Org_Index).prior_sch_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prior_sch_util_hours / l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator);
5505 l_u4_tbl(l_Top_Org_Index).prior_bill_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prior_conf_billable_hours / l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator);
5506 l_u4_tbl(l_Top_Org_Index).prior_nonbill_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prior_conf_nonbillable_hours / l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator);
5507 ELSE
5508 l_u4_tbl(l_Top_Org_Index).prior_sch_util_percent := NULL;
5509 l_u4_tbl(l_Top_Org_Index).prior_bill_util_percent := NULL;
5510 l_u4_tbl(l_Top_Org_Index).prior_nonbill_util_percent := NULL;
5511 END IF;
5512
5513 --Calculated columns for PJI_REP_U5
5514 IF nvl(l_u4_tbl(l_Top_Org_Index).exp_ac_denominator,0) <> 0 THEN
5515
5516 l_u4_tbl(l_Top_Org_Index).exp_act_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).exp_ac_util_hours / l_u4_tbl(l_Top_Org_Index).exp_ac_denominator);
5517
5518 ELSE
5519 l_u4_tbl(l_Top_Org_Index).exp_act_util_percent := NULL;
5520 END IF;
5521
5522 IF nvl(l_u4_tbl(l_Top_Org_Index).exp_sch_denominator,0) <> 0 THEN
5523
5524 l_u4_tbl(l_Top_Org_Index).exp_sch_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).exp_sch_util_hours / l_u4_tbl(l_Top_Org_Index).exp_sch_denominator);
5525 l_u4_tbl(l_Top_Org_Index).prov_sch_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prov_util_hours / l_u4_tbl(l_Top_Org_Index).exp_sch_denominator);
5526
5527 ELSE
5528 l_u4_tbl(l_Top_Org_Index).exp_sch_util_percent := NULL;
5529 l_u4_tbl(l_Top_Org_Index).prov_sch_util_percent := NULL;
5530 END IF;
5531
5532 IF nvl(l_u4_tbl(l_Top_Org_Index).expected_denominator,0) <> 0 THEN
5533
5534 l_u4_tbl(l_Top_Org_Index).exp_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).expected_util_hours / l_u4_tbl(l_Top_Org_Index).expected_denominator);
5535 l_u4_tbl(l_Top_Org_Index).exp_total_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).expected_total_util_hours / l_u4_tbl(l_Top_Org_Index).expected_denominator);
5536
5537 ELSE
5538 l_u4_tbl(l_Top_Org_Index).exp_util_percent := NULL;
5539 l_u4_tbl(l_Top_Org_Index).exp_total_util_percent := NULL;
5540 END IF;
5541
5542 IF nvl(l_u4_tbl(l_Top_Org_Index).prior_actual_denominator,0) <> 0 THEN
5543
5544 l_u4_tbl(l_Top_Org_Index).prior_act_util_percent := 100 * (l_u4_tbl(l_Top_Org_Index).prior_actual_util_hours / l_u4_tbl(l_Top_Org_Index).prior_actual_denominator);
5545
5546 ELSE
5547 l_u4_tbl(l_Top_Org_Index).prior_act_util_percent := NULL;
5548 END IF;
5549
5550 END IF; --end p_view_vy
5551
5552 IF l_Top_Org_Index is not null THEN
5553
5554 --Update local variables to include top level org for grand total
5555 l_scheduled_hours := l_scheduled_hours + nvl(l_u4_tbl(l_Top_Org_Index).scheduled_hours,0);
5556 l_scheduled_capacity_hours := l_scheduled_capacity_hours + nvl(l_u4_tbl(l_Top_Org_Index).scheduled_capacity_hours,0);
5557 l_scheduled_util_hours := l_scheduled_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).scheduled_util_hours,0);
5558 l_provisional_hours := l_provisional_hours + nvl(l_u4_tbl(l_Top_Org_Index).provisional_hours,0);
5559 l_unassigned_hours := l_unassigned_hours + nvl(l_u4_tbl(l_Top_Org_Index).unassigned_hours,0);
5560 l_conf_billable_hours := l_conf_billable_hours + nvl(l_u4_tbl(l_Top_Org_Index).conf_billable_hours,0);
5561 l_conf_nonbillable_hours := l_conf_nonbillable_hours + nvl(l_u4_tbl(l_Top_Org_Index).conf_nonbillable_hours,0);
5562 l_prov_billable_hours := l_prov_billable_hours + nvl(l_u4_tbl(l_Top_Org_Index).prov_billable_hours,0);
5563 l_prov_nonbillable_hours := l_prov_nonbillable_hours + nvl(l_u4_tbl(l_Top_Org_Index).prov_nonbillable_hours,0);
5564 l_training_hours := l_training_hours + nvl(l_u4_tbl(l_Top_Org_Index).training_hours,0);
5565 l_expected_hours := l_expected_hours + nvl(l_u4_tbl(l_Top_Org_Index).expected_hours,0);
5566 l_expected_util_hours := l_expected_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).expected_util_hours,0);
5567 l_expected_total_util_hours := l_expected_total_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).expected_total_util_hours,0);
5568 l_actual_util_hours := l_actual_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).actual_util_hours,0);
5569 l_actual_capacity_hours := l_actual_capacity_hours + nvl(l_u4_tbl(l_Top_Org_Index).actual_capacity_hours,0);
5570 l_expected_capacity_hours := l_expected_capacity_hours + nvl(l_u4_tbl(l_Top_Org_Index).expected_capacity_hours,0);
5571 l_prov_util_hours := l_prov_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).prov_util_hours,0);
5572 l_exp_ac_util_hours := l_exp_ac_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).exp_ac_util_hours,0);
5573 l_exp_sch_util_hours := l_exp_sch_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).exp_sch_util_hours,0);
5574 l_exp_ac_denominator := l_exp_ac_denominator + nvl(l_u4_tbl(l_Top_Org_Index).exp_ac_denominator,0);
5575 l_exp_sch_denominator := l_exp_sch_denominator + nvl(l_u4_tbl(l_Top_Org_Index).exp_sch_denominator,0);
5576 l_actual_denominator := l_actual_denominator + nvl(l_u4_tbl(l_Top_Org_Index).actual_denominator,0);
5577 l_scheduled_denominator := l_scheduled_denominator + nvl(l_u4_tbl(l_Top_Org_Index).scheduled_denominator,0);
5578 l_expected_denominator := l_expected_denominator + nvl(l_u4_tbl(l_Top_Org_Index).expected_denominator,0);
5579 l_prior_scheduled_hours := l_prior_scheduled_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_scheduled_hours,0);
5580 l_prior_sch_capacity_hours := l_prior_sch_capacity_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_sch_capacity_hours,0);
5581 l_prior_sch_util_hours := l_prior_sch_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_sch_util_hours,0);
5582 l_prior_conf_billable_hours := l_prior_conf_billable_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_conf_billable_hours,0);
5583 l_prior_conf_nonbillable_hours := l_prior_conf_nonbillable_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_conf_nonbillable_hours,0);
5584 l_prior_actual_capacity_hours := l_prior_actual_capacity_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_actual_capacity_hours,0);
5585 l_prior_actual_util_hours := l_prior_actual_util_hours + nvl(l_u4_tbl(l_Top_Org_Index).prior_actual_util_hours,0);
5586 l_prior_actual_denominator := l_prior_actual_denominator + nvl(l_u4_tbl(l_Top_Org_Index).prior_actual_denominator,0);
5587 l_prior_scheduled_denominator := l_prior_scheduled_denominator + nvl(l_u4_tbl(l_Top_Org_Index).prior_scheduled_denominator,0);
5588
5589 END IF;
5590
5591 IF l_u4_tbl.COUNT > 0 THEN
5592 FOR i in 1..l_u4_tbl.COUNT LOOP
5593
5594 IF l_u4_tbl.EXISTS(i) THEN
5595
5596 --Capacity is denormalized when context is view by UC or WT
5597 IF p_view_by = 'UC' OR p_view_by = 'WT' THEN
5598
5599 /*Bug 2836444*/
5600
5601 l_scheduled_denominator := l_u4_tbl(i).SCHEDULED_DENOMINATOR;
5602 l_prior_scheduled_denominator := l_u4_tbl(i).PRIOR_SCHEDULED_DENOMINATOR;
5603 l_exp_ac_denominator := l_u4_tbl(i).EXP_AC_DENOMINATOR;
5604 l_exp_sch_denominator := l_u4_tbl(i).EXP_SCH_DENOMINATOR;
5605 l_expected_denominator := l_u4_tbl(i).EXPECTED_DENOMINATOR;
5606 l_prior_actual_denominator := l_u4_tbl(i).PRIOR_ACTUAL_DENOMINATOR;
5607
5608 /*Bug 2836477*/
5609 l_scheduled_capacity_hours := null;
5610 l_expected_capacity_hours := null;
5611 l_unassigned_hours := null;
5612
5613 END IF;
5614
5615 l_u4_tbl(i).PJI_REP_TOTAL_1 := l_scheduled_hours;
5616 l_u4_tbl(i).PJI_REP_TOTAL_2 := l_scheduled_capacity_hours;
5617 l_u4_tbl(i).PJI_REP_TOTAL_3 := l_scheduled_util_hours;
5618 l_u4_tbl(i).PJI_REP_TOTAL_4 := l_provisional_hours;
5619 l_u4_tbl(i).PJI_REP_TOTAL_5 := l_expected_hours;
5620 l_u4_tbl(i).PJI_REP_TOTAL_6 := l_expected_capacity_hours;
5621 l_u4_tbl(i).PJI_REP_TOTAL_7 := l_prior_scheduled_hours;
5622
5623
5624 IF nvl(l_scheduled_denominator,0) <> 0 THEN
5625
5626 l_u4_tbl(i).PJI_REP_TOTAL_8 := (l_scheduled_util_hours/l_scheduled_denominator)*100;
5627 l_u4_tbl(i).PJI_REP_TOTAL_9 := (l_conf_billable_hours/l_scheduled_denominator)*100;
5628 l_u4_tbl(i).PJI_REP_TOTAL_10 := (l_conf_nonbillable_hours/l_scheduled_denominator)*100;
5629 l_u4_tbl(i).PJI_REP_TOTAL_11 := (l_unassigned_hours/l_scheduled_denominator)*100;
5630 l_u4_tbl(i).PJI_REP_TOTAL_12 := (l_training_hours/l_scheduled_denominator)*100;
5631 l_u4_tbl(i).PJI_REP_TOTAL_13 := (l_prov_billable_hours/l_scheduled_denominator)*100;
5632 l_u4_tbl(i).PJI_REP_TOTAL_14 := (l_prov_nonbillable_hours/l_scheduled_denominator)*100;
5633
5634 END IF;
5635
5636 IF nvl(l_prior_scheduled_denominator,0) <> 0 THEN
5637
5638 l_u4_tbl(i).PJI_REP_TOTAL_15 := (l_prior_sch_util_hours/l_prior_scheduled_denominator)*100;
5639 l_u4_tbl(i).PJI_REP_TOTAL_16 := (l_prior_conf_billable_hours/l_prior_scheduled_denominator)*100;
5640 l_u4_tbl(i).PJI_REP_TOTAL_17 := (l_prior_conf_nonbillable_hours/l_prior_scheduled_denominator)*100;
5641
5642 END IF;
5643
5644 IF nvl(l_exp_ac_denominator,0) <> 0 THEN
5645 l_u4_tbl(i).PJI_REP_TOTAL_18 := (l_exp_ac_util_hours/l_exp_ac_denominator)*100;
5646 END IF;
5647
5648 IF nvl(l_exp_sch_denominator,0) <> 0 THEN
5649 l_u4_tbl(i).PJI_REP_TOTAL_19 := (l_exp_sch_util_hours/l_exp_sch_denominator)*100;
5650 l_u4_tbl(i).PJI_REP_TOTAL_21 := (l_prov_util_hours /l_exp_sch_denominator)*100;
5651
5652 END IF;
5653
5654 IF nvl(l_expected_denominator,0) <> 0 THEN
5655 l_u4_tbl(i).PJI_REP_TOTAL_20 := (l_expected_util_hours/l_expected_denominator)*100;
5656 l_u4_tbl(i).PJI_REP_TOTAL_22 := (l_expected_total_util_hours/l_expected_denominator)*100;
5657
5658 END IF;
5659
5660 IF nvl(l_prior_actual_denominator,0) <> 0 THEN
5661 l_u4_tbl(i).PJI_REP_TOTAL_23 := (l_prior_actual_util_hours/l_prior_actual_denominator)*100;
5662 END IF;
5663
5664 END IF; -- l_u4_tbl.EXISTS(i)
5665
5666 END LOOP;
5667 END IF; --l_u4_tbl.COUNT
5668
5669 --Delete record for top org if all values are 0 or null
5670
5671 IF l_Top_Org_Index is not null THEN
5672 IF nvl(l_u4_tbl(l_Top_Org_Index).SCHEDULED_HOURS,0) = 0 AND
5673 nvl(l_u4_tbl(l_Top_Org_Index).SCHEDULED_CAPACITY_HOURS,0) = 0 AND
5674 nvl(l_u4_tbl(l_Top_Org_Index).SCHEDULED_UTIL_HOURS,0) = 0 AND
5675 nvl(l_u4_tbl(l_Top_Org_Index).PROVISIONAL_HOURS,0) = 0 AND
5676 nvl(l_u4_tbl(l_Top_Org_Index).EXPECTED_HOURS,0) = 0 AND
5677 nvl(l_u4_tbl(l_Top_Org_Index).EXPECTED_CAPACITY_HOURS,0) = 0 AND
5678 nvl(l_u4_tbl(l_Top_Org_Index).PRIOR_SCHEDULED_HOURS,0) = 0 AND
5679 nvl(l_u4_tbl(l_Top_Org_Index).SCH_UTIL_PERCENT,0) = 0 AND
5680 nvl(l_u4_tbl(l_Top_Org_Index).BILL_UTIL_PERCENT,0) = 0 AND
5681 nvl(l_u4_tbl(l_Top_Org_Index).NONBILL_UTIL_PERCENT,0) = 0 AND
5682 nvl(l_u4_tbl(l_Top_Org_Index).UNASSIGNED_PERCENT,0) = 0 AND
5683 nvl(l_u4_tbl(l_Top_Org_Index).TRAINING_PERCENT,0) = 0 AND
5684 nvl(l_u4_tbl(l_Top_Org_Index).PROV_BILL_PERCENT,0) = 0 AND
5685 nvl(l_u4_tbl(l_Top_Org_Index).PROV_NONBILL_PERCENT,0) = 0 AND
5686 nvl(l_u4_tbl(l_Top_Org_Index).PRIOR_SCH_UTIL_PERCENT,0) = 0 AND
5687 nvl(l_u4_tbl(l_Top_Org_Index).PRIOR_BILL_UTIL_PERCENT,0) = 0 AND
5688 nvl(l_u4_tbl(l_Top_Org_Index).PRIOR_NONBILL_UTIL_PERCENT,0) = 0 AND
5689 nvl(l_u4_tbl(l_Top_Org_Index).EXP_ACT_UTIL_PERCENT,0) = 0 AND
5690 nvl(l_u4_tbl(l_Top_Org_Index).EXP_SCH_UTIL_PERCENT,0) = 0 AND
5691 nvl(l_u4_tbl(l_Top_Org_Index).EXP_UTIL_PERCENT,0) = 0 AND
5692 nvl(l_u4_tbl(l_Top_Org_Index).PROV_SCH_UTIL_PERCENT,0) = 0 AND
5693 nvl(l_u4_tbl(l_Top_Org_Index).EXP_TOTAL_UTIL_PERCENT,0) = 0 AND
5694 nvl(l_u4_tbl(l_Top_Org_Index).PRIOR_ACT_UTIL_PERCENT,0) = 0
5695 THEN
5696 l_u4_tbl.DELETE(l_Top_Org_Index);
5697 END IF;
5698 END IF;
5699
5700 COMMIT;
5701 RETURN l_u4_tbl;
5702
5703 END PLSQLDriver_U4;
5704
5705
5706
5707
5708 /*****************************************************************************
5709 *
5710 * The functions for report U6: Project Actual Utilization Detail
5711 *
5712 *****************************************************************************/
5713
5714 PROCEDURE Get_SQL_PJI_REP_U6(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
5715 , x_PMV_Sql OUT NOCOPY VARCHAR2
5716 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
5717 IS
5718 BEGIN
5719
5720 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
5721 ,P_SELECT_LIST =>
5722 ' FACT.RESOURCE_NAME "VIEWBY",
5723 FACT.ACTUAL_HOURS "PJI_REP_MSR_2",
5724 FACT.CAPACITY_HOURS "PJI_REP_MSR_3",
5725 FACT.MISSING_HOURS "PJI_REP_MSR_4",
5726 FACT.BILLABLE_HOURS "PJI_REP_MSR_5",
5727 FACT.NONBILLABLE_HOURS "PJI_REP_MSR_6",
5728 FACT.TRAINING_HOURS "PJI_REP_MSR_7",
5729 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_8",
5730 FACT.BILL_UTIL_PERCENT "PJI_REP_MSR_9",
5731 FACT.NONBILL_UTIL_PERCENT "PJI_REP_MSR_10",
5732 FACT.TRAINING_PERCENT "PJI_REP_MSR_11",
5733 FACT.ACTUAL_WEIGHTED_HOURS "PJI_REP_MSR_20",
5734 FACT.BILLABLE_WEIGHTED_HOURS "PJI_REP_MSR_21",
5735 FACT.UTIL_PERCENT_DENOM_HOURS "PJI_REP_MSR_22",
5736 FACT.RESOURCE_ID "PJI_REP_MSR_24",
5737 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
5738 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
5739 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
5740 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
5741 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_5",
5742 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_6",
5743 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_7",
5744 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_8",
5745 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_9",
5746 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_10" '
5747 ,P_SQL_STATEMENT => x_PMV_Sql
5748 ,P_PMV_OUTPUT => x_PMV_Output,
5749 P_REGION_CODE => 'PJI_REP_U6',
5750 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_PJI_REP_U6',
5751 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
5752 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
5753 '<<AS_OF_DATE>>, ' ||
5754 '<<PERIOD_TYPE>>, ' ||
5755 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
5756 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
5757 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>, ' ||
5758 '<<VIEW_BY>>');
5759 END Get_SQL_PJI_REP_U6;
5760
5761
5762 FUNCTION PLSQLDriver_PJI_REP_U6 (
5763 p_operating_unit IN VARCHAR2 DEFAULT NULL
5764 , p_organization IN VARCHAR2
5765 , p_as_of_date IN NUMBER
5766 , p_period_type IN VARCHAR2
5767 , p_util_categories IN VARCHAR2 DEFAULT NULL
5768 , p_work_type IN VARCHAR2 DEFAULT NULL
5769 , p_job_level IN VARCHAR2 DEFAULT NULL
5770 , p_view_by IN VARCHAR2
5771 )RETURN PJI_REP_U6_TBL
5772 IS
5773 PRAGMA AUTONOMOUS_TRANSACTION;
5774 l_u6_tbl PJI_REP_U6_TBL:=PJI_REP_U6_TBL();
5775 l_job_level_param VARCHAR2(1);
5776 l_util_categories_param VARCHAR2(1);
5777 l_util_percent_denom_prof VARCHAR(25);
5778 l_dft_util_percent_denom_prof VARCHAR(25) := 'CAPACITY';
5779 l_labor_unit VARCHAR2(40);
5780 l_actual_hours NUMBER := 0;
5781 l_capacity_hours NUMBER := 0;
5782 l_missing_hours NUMBER := 0;
5783 l_billable_hours NUMBER := 0;
5784 l_nonbillable_hours NUMBER := 0;
5785 l_training_hours NUMBER := 0;
5786 l_actual_weighted_hours NUMBER := 0;
5787 l_billable_weighted_hours NUMBER := 0;
5788 l_nonbillable_weighted_hours NUMBER := 0;
5789 l_util_percent_denom_hours NUMBER := 0;
5790
5791 BEGIN
5792 /*
5793 * Place a call to all the parse API's which parse the parameters
5794 * passed by PMV and populate all the temporary tables.
5795 */
5796 PJI_PMV_ENGINE.Convert_Operating_Unit(p_operating_unit, p_view_by);
5797 PJI_PMV_ENGINE.Convert_Organization(p_organization, p_view_by);
5798 PJI_PMV_ENGINE.Convert_Time(p_as_of_date, p_period_type, p_view_by);
5799
5800 l_util_categories_param := PJI_PMV_ENGINE.convert_util_category(p_work_type, p_util_categories, p_view_by);
5801 l_job_level_param := PJI_PMV_ENGINE.convert_job_level(null, p_job_level, p_view_by);
5802
5803 /*
5804 * Get Utilization percentage denominator profile value
5805 */
5806 BEGIN
5807 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
5808 INTO l_util_percent_denom_prof
5809 from dual;
5810
5811 EXCEPTION WHEN NO_DATA_FOUND THEN
5812 l_util_percent_denom_prof := l_dft_util_percent_denom_prof;
5813 END;
5814
5815 /*
5816 * Get report labor unit
5817 */
5818 BEGIN
5819 select report_labor_units
5820 into l_labor_unit
5821 from pji_system_settings;
5822
5823 EXCEPTION WHEN OTHERS THEN
5824 l_labor_unit := null;
5825 END;
5826
5827
5828 /*
5829 * determine the fact tables you choose to run the database query on.
5830 *
5831 * If util_categories=null and job_level=null
5832 */
5833
5834 IF l_util_categories_param = 'N' AND l_job_level_param = 'N' THEN
5835
5836 SELECT PJI_REP_U6( resource_name
5837 , resource_id
5838 , SUM(actual_hours)
5839 , SUM(capacity_hours)
5840 , SUM(missing_hours)
5841 , SUM(billable_hours)
5842 , SUM(nonbillable_hours)
5843 , SUM(training_hours)
5844 , SUM(actual_weighted_hours)
5845 , SUM(billable_weighted_hours)
5846 , SUM(nonbillable_weighted_hours)
5847 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours,actual_hours)) ,
5848 null,null,null,null,null,null,
5849 null,null,null,null,null,null,
5850 null,null)
5851 /* Bug 3515594 */
5852 BULK COLLECT INTO l_u6_tbl
5853 FROM
5854 (
5855 SELECT /*+ ORDERED */
5856 resd.resource_name resource_name
5857 ,fct.person_id resource_id
5858 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
5859 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_a,0))
5860 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
5861 ,fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) missing_hours
5862 ,fct.bill_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_hours
5863 ,(fct.total_hrs_a-bill_hrs_a)
5864 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_hours
5865 ,fct.training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
5866 ,fct.total_wtd_org_hrs_a
5867 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
5868 ,fct.bill_wtd_org_hrs_a
5869 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_weighted_hours
5870 ,(fct.total_wtd_org_hrs_a-fct.bill_wtd_org_hrs_a)
5871 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_weighted_hours
5872 FROM
5873 pji_pmv_orgz_dim_tmp horg
5874 ,pji_pmv_time_dim_tmp time
5875 ,pji_rm_res_f fct
5876 ,pji_pmv_org_dim_tmp hou
5877 ,pa_resources_denorm resd
5878 ,pa_implementations_all imp
5879 WHERE
5880 fct.expenditure_org_id = hou.id
5881 AND fct.expenditure_organization_id = horg.id
5882 AND fct.time_id = time.id
5883 AND fct.period_type_id = time.period_type
5884 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
5885 AND time.id is not null
5886 AND fct.person_id = resd.person_id
5887 AND resd.resource_organization_id = horg.id
5888 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
5889 resd.resource_effective_end_date
5890 AND hou.id = imp.org_id
5891 UNION ALL
5892 SELECT
5893 resd.resource_name resource_name
5894 ,resd.person_id resource_id
5895 ,0 actual_hours
5896 ,0 capacity_hours
5897 ,0 missing_hours
5898 ,0 billable_hours
5899 ,0 nonbillable_hours
5900 ,0 training_hours
5901 ,0 actual_weighted_hours
5902 ,0 billable_weighted_hours
5903 ,0 nonbillable_weighted_hours
5904 FROM
5905 pa_resources_denorm resd
5906 ,pji_pmv_orgz_dim_tmp horg
5907 WHERE
5908 resd.resource_organization_id = horg.id
5909 AND resd.utilization_flag = 'Y'
5910 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
5911 resd.resource_effective_end_date
5912 )
5913 GROUP BY resource_name, resource_id;
5914
5915
5916 /*
5917 * If util_categories=null and job_level<>null
5918 */
5919 ELSIF l_util_categories_param = 'N' AND l_job_level_param = 'Y' THEN
5920
5921 SELECT PJI_REP_U6( resource_name
5922 , resource_id
5923 , SUM(actual_hours)
5924 , SUM(capacity_hours)
5925 , SUM(missing_hours)
5926 , SUM(billable_hours)
5927 , SUM(nonbillable_hours)
5928 , SUM(training_hours)
5929 , SUM(actual_weighted_hours)
5930 , SUM(billable_weighted_hours)
5931 , SUM(nonbillable_weighted_hours)
5932 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours,actual_hours)) ,
5933 null,null,null,null,null,null,
5934 null,null,null,null,null,null,
5935 null,null)
5936 /* Bug 3515594 */
5937 BULK COLLECT INTO l_u6_tbl
5938 FROM
5939 (
5940 SELECT /*+ ORDERED */
5941 resd.resource_name resource_name
5942 ,fct.person_id resource_id
5943 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
5944 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_a,0))
5945 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
5946 ,fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) missing_hours
5947 ,fct.bill_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_hours
5948 ,(fct.total_hrs_a-bill_hrs_a)
5949 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_hours
5950 ,fct.training_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
5951 ,fct.total_wtd_org_hrs_a
5952 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
5953 ,fct.bill_wtd_org_hrs_a
5954 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_weighted_hours
5955 ,(fct.total_wtd_org_hrs_a-fct.bill_wtd_org_hrs_a)
5956 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_weighted_hours
5957 FROM
5958 pji_pmv_orgz_dim_tmp horg
5959 ,pji_pmv_time_dim_tmp time
5960 ,pji_pmv_jb_dim_tmp jbt
5961 ,pji_rm_res_f fct
5962 ,pji_pmv_org_dim_tmp hou
5963 ,pa_resources_denorm resd
5964 ,pa_implementations_all imp
5965 WHERE
5966 fct.expenditure_org_id = hou.id
5967 AND fct.expenditure_organization_id = horg.id
5968 AND fct.time_id = time.id
5969 AND fct.period_type_id = time.period_type
5970 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
5971 AND time.id is not null
5972 AND fct.job_id = jbt.id
5973 AND fct.person_id = resd.person_id
5974 AND resd.resource_organization_id = horg.id
5975 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
5976 resd.resource_effective_end_date
5977 AND hou.id = imp.org_id
5978 UNION ALL
5979 SELECT
5980 resource_name resource_name
5981 ,resd.person_id resource_id
5982 ,0 actual_hours
5983 ,0 capacity_hours
5984 ,0 missing_hours
5985 ,0 billable_hours
5986 ,0 nonbillable_hours
5987 ,0 training_hours
5988 ,0 actual_weighted_hours
5989 ,0 billable_weighted_hours
5990 ,0 nonbillable_weighted_hours
5991 FROM
5992 pa_resources_denorm resd
5993 ,pji_pmv_orgz_dim_tmp horg
5994 ,pji_pmv_jb_dim_tmp jbt
5995 WHERE
5996 resd.resource_organization_id = horg.id
5997 AND resd.utilization_flag = 'Y'
5998 AND resd.job_id = jbt.id
5999 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6000 resd.resource_effective_end_date
6001 )
6002 GROUP BY resource_name, resource_id;
6003
6004 /*
6005 * If util_categories<>null and job_level=null
6006 */
6007 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'N' THEN
6008
6009 SELECT PJI_REP_U6 ( resource_name
6010 , resource_id
6011 , SUM(actual_hours)
6012 , SUM(capacity_hours-act_reduce_capacity_hours)
6013 , SUM(missing_hours)
6014 , SUM(billable_hours)
6015 , SUM(nonbillable_hours)
6016 , SUM(training_hours)
6017 , SUM(actual_weighted_hours)
6018 , SUM(billable_weighted_hours)
6019 , SUM(nonbillable_weighted_hours)
6020 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours-act_reduce_capacity_hours,
6021 actual_hours)) ,
6022 null,null,null,null,null,null,
6023 null,null,null,null,null,null,
6024 null,null)
6025 /* Bug 3515594 */
6026 BULK COLLECT INTO l_u6_tbl
6027 FROM
6028 (
6029 SELECT /*+ ORDERED */
6030 resource_name resource_name
6031 ,fct.person_id resource_id
6032 ,fct.total_hrs_a actual_hours
6033 ,0 capacity_hours
6034 ,0 act_reduce_capacity_hours
6035 ,null missing_hours
6036 ,fct.bill_hrs_a
6037 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_hours
6038 ,(fct.total_hrs_a-fct.bill_hrs_a)
6039 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_hours
6040 ,decode(wtb.training_flag,'Y',fct.total_hrs_a, 0)
6041 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6042 ,fct.total_hrs_a * (wtb.org_utilization_percentage/100)
6043 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
6044 ,fct.bill_hrs_a * (wtb.org_utilization_percentage/100)
6045 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_weighted_hours
6046 ,(fct.total_hrs_a-fct.bill_hrs_a)
6047 *wtb.org_utilization_percentage/100 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6048 nonbillable_weighted_hours
6049 FROM
6050 pji_pmv_orgz_dim_tmp horg
6051 ,pji_pmv_time_dim_tmp time
6052 ,pji_pmv_wt_dim_tmp wt
6053 ,pji_rm_res_wt_f fct
6054 ,pji_pmv_org_dim_tmp hou
6055 ,pa_work_types_b wtb
6056 ,pa_resources_denorm resd
6057 ,pa_implementations_all imp
6058 WHERE
6059 fct.expenditure_org_id = hou.id
6060 AND fct.expenditure_organization_id = horg.id
6061 AND fct.time_id = time.id
6062 AND fct.period_type_id = time.period_type
6063 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6064 AND time.id is not null
6065 AND fct.work_type_id = wt.id
6066 AND wtb.work_type_id = wt.id
6067 AND fct.person_id = resd.person_id
6068 AND resd.resource_organization_id = horg.id
6069 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6070 resd.resource_effective_end_date
6071 AND hou.id = imp.org_id
6072 UNION ALL
6073 SELECT
6074 resource_name resource_name
6075 ,resd.person_id resource_id
6076 ,0 actual_hours
6077 ,0 capacity_hours
6078 ,0 act_reduce_capacity_hours
6079 ,null missing_hours
6080 ,0 billable_hours
6081 ,0 nonbillable_hours
6082 ,0 training_hours
6083 ,0 actual_weighted_hours
6084 ,0 billable_weighted_hours
6085 ,0 nonbillable_weighted_hours
6086 FROM
6087 pa_resources_denorm resd
6088 ,pji_pmv_orgz_dim_tmp horg
6089 WHERE
6090 resd.resource_organization_id = horg.id
6091 AND resd.utilization_flag = 'Y'
6092 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6093 resd.resource_effective_end_date
6094
6095 UNION ALL -- added for current year capacity_hours
6096 SELECT /*+ ORDERED */
6097 resource_name resource_name
6098 ,resd.person_id resource_id
6099 ,0 actual_hours
6100 ,capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6101 capacity_hours
6102 ,reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6103 act_reduce_capacity_hours
6104 ,missing_hrs_a missing_hours
6105 ,0 billable_hours
6106 ,0 nonbillable_hours
6107 ,0 training_hours
6108 ,0 actual_weighted_hours
6109 ,0 billable_weighted_hours
6110 ,0 nonbillable_weighted_hours
6111 FROM
6112 pji_pmv_orgz_dim_tmp horg
6113 ,pji_pmv_time_dim_tmp time
6114 ,pji_rm_res_f fct
6115 ,pji_pmv_org_dim_tmp hou
6116 ,pa_resources_denorm resd
6117 ,pa_implementations_all imp
6118 WHERE
6119 fct.expenditure_org_id = hou.id
6120 AND fct.expenditure_organization_id = horg.id
6121 AND fct.time_id = time.id
6122 AND fct.period_type_id = time.period_type
6123 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6124 AND time.id is not null
6125 AND fct.person_id = resd.person_id
6126 AND resd.resource_organization_id = horg.id
6127 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6128 resd.resource_effective_end_date
6129 AND hou.id = imp.org_id
6130 )
6131 GROUP BY resource_name, resource_id;
6132
6133 /*
6134 * If util_categories<>null and job_level<>null
6135 */
6136 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'Y' THEN
6137
6138 SELECT PJI_REP_U6 ( resource_name
6139 , resource_id
6140 , SUM(actual_hours)
6141 , SUM(capacity_hours-act_reduce_capacity_hours)
6142 , SUM(missing_hours)
6143 , SUM(billable_hours)
6144 , SUM(nonbillable_hours)
6145 , SUM(training_hours)
6146 , SUM(actual_weighted_hours)
6147 , SUM(billable_weighted_hours)
6148 , SUM(nonbillable_weighted_hours)
6149 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours-act_reduce_capacity_hours,
6150 actual_hours)) ,
6151 null,null,null,null,null,null,
6152 null,null,null,null,null,null,
6153 null,null)
6154 /* Bug 3515594 */
6155 BULK COLLECT INTO l_u6_tbl
6156 FROM
6157 (
6158 SELECT /*+ ORDERED */
6159 resd.resource_name resource_name
6160 ,fct.person_id resource_id
6161 ,fct.total_hrs_a actual_hours
6162 ,0 capacity_hours
6163 ,0 act_reduce_capacity_hours
6164 ,null missing_hours
6165 ,fct.bill_hrs_a
6166 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_hours
6167 ,(fct.total_hrs_a - fct.bill_hrs_a)
6168 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) nonbillable_hours
6169 ,decode(wtb.training_flag,'Y',fct.total_hrs_a, 0)
6170 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6171 ,fct.total_hrs_a * (wtb.org_utilization_percentage/100)
6172 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
6173 ,fct.bill_hrs_a * (wtb.org_utilization_percentage/100)
6174 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_weighted_hours
6175 ,(fct.total_hrs_a - fct.bill_hrs_a)
6176 *wtb.org_utilization_percentage/100 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6177 nonbillable_weighted_hours
6178 FROM
6179 pji_pmv_orgz_dim_tmp horg
6180 ,pji_pmv_time_dim_tmp time
6181 ,pji_pmv_wt_dim_tmp wt
6182 ,pji_rm_res_wt_f fct
6183 ,pji_pmv_jb_dim_tmp jbt
6184 ,pji_pmv_org_dim_tmp hou
6185 ,pa_work_types_b wtb
6186 ,pa_resources_denorm resd
6187 ,pa_implementations_all imp
6188 WHERE
6189 fct.expenditure_org_id = hou.id
6190 AND fct.expenditure_organization_id = horg.id
6191 AND fct.time_id = time.id
6192 AND fct.period_type_id = time.period_type
6193 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6194 AND time.id is not null
6195 AND fct.work_type_id = wt.id
6196 AND wtb.work_type_id = wt.id
6197 AND fct.job_id = jbt.id
6198 AND fct.person_id = resd.person_id
6199 AND resd.resource_organization_id = horg.id
6200 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6201 resd.resource_effective_end_date
6202 AND hou.id = imp.org_id
6203 UNION ALL
6204 SELECT
6205 resd.resource_name resource_name
6206 ,resd.person_id resource_id
6207 ,0 actual_hours
6208 ,0 capacity_hours
6209 ,0 act_reduce_capacity_hours
6210 ,null missing_hours
6211 ,0 billable_hours
6212 ,0 nonbillable_hours
6213 ,0 training_hours
6214 ,0 actual_weighted_hours
6215 ,0 billable_weighted_hours
6216 ,0 nonbillable_weighted_hours
6217 FROM
6218 pa_resources_denorm resd
6219 ,pji_pmv_orgz_dim_tmp horg
6220 ,pji_pmv_jb_dim_tmp jbt
6221 WHERE
6222 resd.resource_organization_id = horg.id
6223 AND resd.utilization_flag = 'Y'
6224 AND resd.job_id = jbt.id
6225 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6226 resd.resource_effective_end_date
6227 UNION ALL -- added for current year capacity_hours
6228 /* Bug 3515594 */
6229 SELECT /*+ ORDERED */
6230 resource_name resource_name
6231 ,resd.person_id resource_id
6232 ,0 actual_hours
6233 ,capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6234 capacity_hours
6235 ,reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6236 act_reduce_capacity_hours
6237 ,missing_hrs_a missing_hours
6238 ,0 billable_hours
6239 ,0 nonbillable_hours
6240 ,0 training_hours
6241 ,0 actual_weighted_hours
6242 ,0 billable_weighted_hours
6243 ,0 nonbillable_weighted_hours
6244 FROM
6245 pji_pmv_orgz_dim_tmp horg
6246 ,pji_pmv_time_dim_tmp time
6247 ,pji_pmv_jb_dim_tmp jbt
6248 ,pji_rm_res_f fct
6249 ,pji_pmv_org_dim_tmp hou
6250 ,pa_resources_denorm resd
6251 ,pa_implementations_all imp
6252 WHERE
6253 fct.expenditure_org_id = hou.id
6254 AND fct.expenditure_organization_id = horg.id
6255 AND fct.time_id = time.id
6256 AND fct.period_type_id = time.period_type
6257 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6258 AND time.id is not null
6259 AND fct.person_id = resd.person_id
6260 AND fct.job_id = jbt.id
6261 AND resd.resource_organization_id = horg.id
6262 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6263 resd.resource_effective_end_date
6264 AND hou.id = imp.org_id
6265 )
6266 GROUP BY resource_name, resource_id;
6267
6268 END IF;
6269
6270 FOR i in 1..l_u6_tbl.COUNT
6271 LOOP
6272
6273 l_actual_hours := l_actual_hours + nvl(l_u6_tbl(i).actual_hours ,0);
6274 l_capacity_hours := l_capacity_hours + nvl(l_u6_tbl(i).capacity_hours ,0);
6275 l_missing_hours := l_missing_hours + nvl(l_u6_tbl(i).missing_hours ,0);
6276 l_billable_hours := l_billable_hours + nvl(l_u6_tbl(i).billable_hours ,0);
6277 l_nonbillable_hours := l_nonbillable_hours + nvl(l_u6_tbl(i).nonbillable_hours ,0);
6278 l_training_hours := l_training_hours + nvl(l_u6_tbl(i).training_hours ,0);
6279 l_actual_weighted_hours := l_actual_weighted_hours + nvl(l_u6_tbl(i).actual_weighted_hours ,0);
6280 l_billable_weighted_hours := l_billable_weighted_hours + nvl(l_u6_tbl(i).billable_weighted_hours ,0);
6281 l_nonbillable_weighted_hours := l_nonbillable_weighted_hours + nvl(l_u6_tbl(i).nonbillable_weighted_hours ,0);
6282 l_util_percent_denom_hours := l_util_percent_denom_hours + nvl(l_u6_tbl(i).util_percent_denom_hours ,0);
6283
6284
6285 --Calculated columns processing is done below
6286 IF nvl(l_u6_tbl(i).util_percent_denom_hours,0) <> 0 THEN
6287 l_u6_tbl(i).act_util_percent := 100 * (l_u6_tbl(i).actual_weighted_hours / l_u6_tbl(i).util_percent_denom_hours);
6288 l_u6_tbl(i).bill_util_percent := 100 * (l_u6_tbl(i).billable_weighted_hours / l_u6_tbl(i).util_percent_denom_hours);
6289 l_u6_tbl(i).nonbill_util_percent := 100 * (l_u6_tbl(i).nonbillable_weighted_hours / l_u6_tbl(i).util_percent_denom_hours);
6290 l_u6_tbl(i).training_percent := 100 * (l_u6_tbl(i).training_hours / l_u6_tbl(i).util_percent_denom_hours);
6291
6292 ELSE
6293 l_u6_tbl(i).act_util_percent := NULL;
6294 l_u6_tbl(i).bill_util_percent := NULL;
6295 l_u6_tbl(i).nonbill_util_percent := NULL;
6296 l_u6_tbl(i).training_percent := NULL;
6297 END IF;
6298
6299 END LOOP;
6300
6301 IF l_u6_tbl.COUNT > 0 THEN
6302 FOR i IN 1..l_u6_tbl.COUNT
6303 LOOP
6304
6305 IF l_u6_tbl.EXISTS(i) THEN
6306
6307 l_u6_tbl(i).PJI_REP_TOTAL_1 := l_actual_hours ;
6308 l_u6_tbl(i).PJI_REP_TOTAL_2 := l_capacity_hours ;
6309 l_u6_tbl(i).PJI_REP_TOTAL_3 := l_missing_hours ;
6310 l_u6_tbl(i).PJI_REP_TOTAL_4 := l_billable_hours ;
6311 l_u6_tbl(i).PJI_REP_TOTAL_5 := l_nonbillable_hours;
6312 l_u6_tbl(i).PJI_REP_TOTAL_6 := l_training_hours ;
6313
6314
6315 IF nvl(l_util_percent_denom_hours,0) <> 0 THEN
6316
6317 l_u6_tbl(i).PJI_REP_TOTAL_7 := (l_actual_weighted_hours/l_util_percent_denom_hours)*100;
6318 l_u6_tbl(i).PJI_REP_TOTAL_8 := (l_billable_weighted_hours/l_util_percent_denom_hours)*100;
6319 l_u6_tbl(i).PJI_REP_TOTAL_9 := (l_nonbillable_weighted_hours/l_util_percent_denom_hours)*100;
6320 l_u6_tbl(i).PJI_REP_TOTAL_10 := (l_training_hours/l_util_percent_denom_hours)*100;
6321
6322 END IF;
6323
6324 END IF; -- l_u6_tbl.EXISTS(i)
6325 END LOOP;
6326 END IF; --l_u6_tbl.COUNT > 0
6327
6328
6329 /*
6330 * Return the bulk collected table back to pmv.
6331 */
6332 COMMIT;
6333 RETURN l_u6_tbl;
6334
6335 END PLSQLDriver_PJI_REP_U6;
6336
6337
6338
6339 /*****************************************************************************
6340 *
6341 * The functions for report U7: Project Scheduled Utilization Detail
6342 *
6343 *****************************************************************************/
6344 PROCEDURE Get_SQL_PJI_REP_U7(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
6345 , x_PMV_Sql OUT NOCOPY VARCHAR2
6346 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
6347 IS
6348 BEGIN
6349
6350 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
6351 ,P_SELECT_LIST =>
6352 ' FACT.RESOURCE_NAME "VIEWBY",
6353 FACT.SCHEDULED_HOURS "PJI_REP_MSR_2",
6354 FACT.CAPACITY_HOURS "PJI_REP_MSR_3",
6355 FACT.CONFIRMED_BILLABLE_HOURS "PJI_REP_MSR_4",
6356 FACT.CONFIRMED_NONBILLABLE_HOURS "PJI_REP_MSR_5",
6357 FACT.PROVISIONAL_BILLABLE_HOURS "PJI_REP_MSR_6",
6358 FACT.PROVISIONAL_NONBILLABLE_HOURS "PJI_REP_MSR_7",
6359 FACT.TRAINING_HOURS "PJI_REP_MSR_12",
6360 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_8",
6361 FACT.BILL_UTIL_PERCENT "PJI_REP_MSR_9",
6362 FACT.NONBILL_UTIL_PERCENT "PJI_REP_MSR_10",
6363 FACT.UNASSIGNED_PERCENT "PJI_REP_MSR_13",
6364 FACT.TRAINING_PERCENT "PJI_REP_MSR_11",
6365 FACT.CONFIRMED_WEIGHTED_HOURS "PJI_REP_MSR_20",
6366 FACT.BILLABLE_CONF_WEIGHTED_HOURS "PJI_REP_MSR_21",
6367 FACT.UTIL_PERCENT_DENOM_HOURS "PJI_REP_MSR_22",
6368 FACT.UNASSIGNED_HOURS "PJI_REP_MSR_23",
6369 FACT.RESOURCE_ID "PJI_REP_MSR_24",
6370 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
6371 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
6372 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
6373 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
6374 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_5",
6375 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_6",
6376 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_7",
6377 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_8",
6378 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_9",
6379 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_10",
6380 FACT.PJI_REP_TOTAL_11 "PJI_REP_TOTAL_11",
6381 FACT.PJI_REP_TOTAL_12 "PJI_REP_TOTAL_12" '
6382 ,P_SQL_STATEMENT => x_PMV_Sql
6383 ,P_PMV_OUTPUT => x_PMV_Output,
6384 P_REGION_CODE => 'PJI_REP_U7',
6385 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_PJI_REP_U7',
6386 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
6387 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
6388 '<<AS_OF_DATE>>, ' ||
6389 '<<PERIOD_TYPE>>, ' ||
6390 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
6391 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
6392 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>, ' ||
6393 '<<VIEW_BY>>');
6394 END Get_SQL_PJI_REP_U7;
6395
6396
6397 FUNCTION PLSQLDriver_PJI_REP_U7 (
6398 p_operating_unit IN VARCHAR2 DEFAULT NULL
6399 , p_organization IN VARCHAR2
6400 , p_as_of_date IN NUMBER
6401 , p_period_type IN VARCHAR2
6402 , p_util_categories IN VARCHAR2 DEFAULT NULL
6403 , p_work_type IN VARCHAR2 DEFAULT NULL
6404 , p_job_level IN VARCHAR2 DEFAULT NULL
6405 , p_view_by IN VARCHAR2
6406 )RETURN PJI_REP_U7_TBL
6407 IS
6408 PRAGMA AUTONOMOUS_TRANSACTION;
6409 l_u7_tbl PJI_REP_U7_TBL:=PJI_REP_U7_TBL();
6410 l_job_level_param VARCHAR2(1);
6411 l_util_categories_param VARCHAR2(1);
6412 l_util_percent_denom_prof VARCHAR(25);
6413 l_dft_util_percent_denom_prof VARCHAR(25) := 'CAPACITY';
6414 l_labor_unit VARCHAR2(40);
6415 l_scheduled_hours NUMBER := 0;
6416 l_capacity_hours NUMBER := 0;
6417 l_confirmed_billable_hours NUMBER := 0;
6418 l_confirmed_nonbillable_hours NUMBER := 0;
6419 l_provisional_billable_hours NUMBER := 0;
6420 l_prov_nonbillable_hours NUMBER := 0;
6421 l_training_hours NUMBER := 0;
6422 l_confirmed_weighted_hours NUMBER := 0;
6423 l_billable_conf_weighted_hours NUMBER := 0;
6424 l_unassigned_hours NUMBER := 0;
6425 l_util_percent_denom_hours NUMBER := 0;
6426
6427 BEGIN
6428 /*
6429 * Place a call to all the parse API's which parse the parameters
6430 * passed by PMV and populate all the temporary tables.
6431 */
6432 PJI_PMV_ENGINE.Convert_Operating_Unit(p_operating_unit, p_view_by);
6433 PJI_PMV_ENGINE.Convert_Organization(p_organization, p_view_by);
6434 PJI_PMV_ENGINE.Convert_Time(p_as_of_date, p_period_type, p_view_by);
6435
6436 l_util_categories_param := PJI_PMV_ENGINE.convert_util_category(p_work_type, p_util_categories, p_view_by);
6437 l_job_level_param := PJI_PMV_ENGINE.convert_job_level(null, p_job_level, p_view_by);
6438
6439
6440 /*
6441 * Get Utilization percentage denominator profile value
6442 */
6443 BEGIN
6444 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
6445 INTO l_util_percent_denom_prof
6446 from dual;
6447
6448 EXCEPTION WHEN NO_DATA_FOUND THEN
6449 l_util_percent_denom_prof := l_dft_util_percent_denom_prof;
6450 END;
6451
6452
6453 /*
6454 * Get report labor unit
6455 */
6456 BEGIN
6457 select report_labor_units
6458 into l_labor_unit
6459 from pji_system_settings;
6460
6461 EXCEPTION WHEN OTHERS THEN
6462 l_labor_unit := null;
6463 END;
6464
6465 -- insert into pji_pmv_generated_sql values('PLSQLDriver_PJI_REP_U7 1');
6466 -- commit;
6467
6468 /*
6469 * determine the fact tables you choose to run the database query on.
6470 *
6471 * If util_categories=null and job_level=null
6472 */
6473
6474 IF l_util_categories_param = 'N' AND l_job_level_param = 'N' THEN
6475 SELECT PJI_REP_U7( resource_name
6476 , resource_id
6477 , SUM(scheduled_hours)
6478 , SUM(capacity_hours)
6479 , SUM(confirmed_billable_hours)
6480 , SUM(confirmed_nonbillable_hours)
6481 , SUM(provisional_billable_hours)
6482 , SUM(provisional_nonbillable_hours)
6483 , SUM(training_hours)
6484 , SUM(confirmed_weighted_hours)
6485 , SUM(billable_conf_weighted_hours)
6486 , SUM(unassigned_hours)
6487 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
6488 capacity_hours,actual_hours)),
6489 null,null,null,null,null,null,
6490 null,null,null,null,null,null,
6491 null,null,null,null,null)
6492 /* Bug 3515594 */
6493 BULK COLLECT INTO l_u7_tbl
6494 FROM
6495 (
6496 SELECT /*+ ORDERED */
6497 resd.resource_name resource_name
6498 ,fct.person_id resource_id
6499 ,fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) scheduled_hours
6500 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_s,0))
6501 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
6502 ,fct.conf_bill_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6503 confirmed_billable_hours
6504 ,(fct.conf_hrs_s-conf_bill_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6505 confirmed_nonbillable_hours
6506 ,fct.prov_bill_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6507 provisional_billable_hours
6508 ,(fct.prov_hrs_s-fct.prov_bill_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6509 provisional_nonbillable_hours
6510 ,fct.training_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6511 ,fct.conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6512 confirmed_weighted_hours
6513 ,fct.conf_bill_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6514 billable_conf_weighted_hours
6515 ,fct.unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) unassigned_hours
6516 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
6517 FROM
6518 pji_pmv_orgz_dim_tmp horg
6519 ,pji_pmv_time_dim_tmp time
6520 ,pji_rm_res_f fct
6521 ,pji_pmv_org_dim_tmp hou
6522 ,pa_resources_denorm resd
6523 ,pa_implementations_all imp
6524 WHERE
6525 fct.expenditure_org_id = hou.id
6526 AND fct.expenditure_organization_id = horg.id
6527 AND fct.time_id = time.id
6528 AND fct.period_type_id = time.period_type
6529 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6530 AND time.id is not null
6531 AND fct.person_id = resd.person_id
6532 AND resd.resource_organization_id = horg.id
6533 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6534 resd.resource_effective_end_date
6535 AND hou.id = imp.org_id
6536 UNION ALL
6537 SELECT
6538 resd.resource_name resource_name
6539 ,resd.person_id resource_id
6540 ,0 scheduled_hours
6541 ,0 capacity_hours
6542 ,0 confirmed_billable_hours
6543 ,0 confirmed_nonbillable_hours
6544 ,0 provisional_billable_hours
6545 ,0 provisional_nonbillable_hours
6546 ,0 training_hours
6547 ,0 confirmed_weighted_hours
6548 ,0 billable_conf_weighted_hours
6549 ,0 unassigned_hours
6550 ,0 actual_hours
6551 FROM
6552 pji_pmv_orgz_dim_tmp horg
6553 ,pa_resources_denorm resd
6554 WHERE
6555 resd.resource_organization_id = horg.id
6556 AND resd.utilization_flag = 'Y'
6557 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6558 resd.resource_effective_end_date
6559 )
6560 GROUP BY resource_name, resource_id;
6561
6562 /*
6563 * If util_categories=null and job_level<>null
6564 */
6565 ELSIF l_util_categories_param = 'N' AND l_job_level_param = 'Y' THEN
6566 SELECT PJI_REP_U7( resource_name
6567 , resource_id
6568 , SUM(scheduled_hours)
6569 , SUM(capacity_hours)
6570 , SUM(confirmed_billable_hours)
6571 , SUM(confirmed_nonbillable_hours)
6572 , SUM(provisional_billable_hours)
6573 , SUM(provisional_nonbillable_hours)
6574 , SUM(training_hours)
6575 , SUM(confirmed_weighted_hours)
6576 , SUM(billable_conf_weighted_hours)
6577 , SUM(unassigned_hours)
6578 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours,
6579 actual_hours)) ,
6580 null,null,null,null,null,null,
6581 null,null,null,null,null,null,
6582 null,null,null,null,null)
6583 /* Bug 3515594 */
6584 BULK COLLECT INTO l_u7_tbl
6585 FROM
6586 (
6587 SELECT /*+ ORDERED */
6588 resd.resource_name resource_name
6589 ,fct.person_id resource_id
6590 ,fct.conf_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) scheduled_hours
6591 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_s,0))
6592 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
6593 ,fct.conf_bill_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6594 confirmed_billable_hours
6595 ,(fct.conf_hrs_s-conf_bill_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6596 confirmed_nonbillable_hours
6597 ,fct.prov_bill_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6598 provisional_billable_hours
6599 ,(fct.prov_hrs_s-fct.prov_bill_hrs_s) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6600 provisional_nonbillable_hours
6601 ,fct.training_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6602 ,fct.conf_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6603 confirmed_weighted_hours
6604 ,fct.conf_bill_wtd_org_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6605 billable_conf_weighted_hours
6606 ,fct.unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) unassigned_hours
6607 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
6608 FROM
6609 pji_pmv_orgz_dim_tmp horg
6610 ,pji_pmv_time_dim_tmp time
6611 ,pji_pmv_jb_dim_tmp jbt
6612 ,pji_rm_res_f fct
6613 ,pji_pmv_org_dim_tmp hou
6614 ,pa_resources_denorm resd
6615 ,pa_implementations_all imp
6616 WHERE
6617 fct.expenditure_org_id = hou.id
6618 AND fct.expenditure_organization_id = horg.id
6619 AND fct.time_id = time.id
6620 AND fct.period_type_id = time.period_type
6621 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6622 AND time.id is not null
6623 AND fct.job_id = jbt.id
6624 AND fct.person_id = resd.person_id
6625 AND resd.resource_organization_id = horg.id
6626 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6627 resd.resource_effective_end_date
6628 AND hou.id = imp.org_id
6629 UNION ALL
6630 SELECT
6631 resd.resource_name resource_name
6632 ,resd.person_id resource_id
6633 ,0 scheduled_hours
6634 ,0 capacity_hours
6635 ,0 confirmed_billable_hours
6636 ,0 confirmed_nonbillable_hours
6637 ,0 provisional_billable_hours
6638 ,0 provisional_nonbillable_hours
6639 ,0 training_hours
6640 ,0 confirmed_weighted_hours
6641 ,0 billable_conf_weighted_hours
6642 ,0 unassigned_hours
6643 ,0 actual_hours
6644 FROM
6645 pji_pmv_orgz_dim_tmp horg
6646 ,pji_pmv_jb_dim_tmp jbt
6647 ,pa_resources_denorm resd
6648 WHERE
6649 resd.resource_organization_id = horg.id
6650 AND resd.utilization_flag = 'Y'
6651 AND resd.job_id = jbt.id
6652 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6653 resd.resource_effective_end_date
6654 )
6655 GROUP BY resource_name, resource_id;
6656
6657 /*
6658 * If util_categories<>null and job_level=null
6659 */
6660 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'N' THEN
6661 SELECT PJI_REP_U7( resource_name
6662 , resource_id
6663 , SUM(scheduled_hours)
6664 , SUM(capacity_hours-sch_reduce_capacity_hours)
6665 , SUM(confirmed_billable_hours)
6666 , SUM(confirmed_nonbillable_hours)
6667 , SUM(provisional_billable_hours)
6668 , SUM(provisional_nonbillable_hours)
6669 , SUM(training_hours)
6670 , SUM(confirmed_weighted_hours)
6671 , SUM(billable_conf_weighted_hours)
6672 , SUM(unassigned_hours)
6673 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours-sch_reduce_capacity_hours,
6674 actual_hours)) ,
6675 null,null,null,null,null,null,
6676 null,null,null,null,null,null,
6677 null,null,null,null,null)
6678 /* Bug 3515594 */
6679 BULK COLLECT INTO l_u7_tbl
6680 FROM
6681 (
6682 SELECT /*+ ORDERED */
6683 resd.resource_name resource_name
6684 ,fct.person_id resource_id
6685 ,fct.conf_hrs_s scheduled_hours
6686 ,0 capacity_hours
6687 ,0 sch_reduce_capacity_hours
6688 ,decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0)
6689 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_billable_hours
6690 ,(fct.conf_hrs_s-decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0))
6691 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_nonbillable_hours
6692 ,decode(wtb.billable_capitalizable_flag,'Y',prov_hrs_s,0)
6693 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) provisional_billable_hours
6694 ,(prov_hrs_s-decode(wtb.billable_capitalizable_flag,'Y',prov_hrs_s,0))
6695 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) provisional_nonbillable_hours
6696 ,decode(wtb.training_flag,'Y',fct.conf_hrs_s, 0)
6697 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6698 ,fct.conf_hrs_s * wtb.org_utilization_percentage/100
6699 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_weighted_hours
6700 ,decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0)*wtb.org_utilization_percentage/100
6701 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_conf_weighted_hours
6702 ,unassigned_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6703 unassigned_hours
6704 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
6705 FROM
6706 pji_pmv_orgz_dim_tmp horg
6707 ,pji_pmv_time_dim_tmp time
6708 ,pji_pmv_wt_dim_tmp wt
6709 ,pji_rm_res_wt_f fct
6710 ,pji_pmv_org_dim_tmp hou
6711 ,pa_work_types_b wtb
6712 ,pa_resources_denorm resd
6713 ,pa_implementations_all imp
6714 WHERE
6715 fct.expenditure_org_id = hou.id
6716 AND fct.expenditure_organization_id = horg.id
6717 AND fct.time_id = time.id
6718 AND fct.period_type_id = time.period_type
6719 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6720 AND time.id is not null
6721 AND fct.work_type_id = wt.id
6722 AND wtb.work_type_id = wt.id
6723 AND fct.person_id = resd.person_id
6724 AND resd.resource_organization_id = horg.id
6725 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6726 resd.resource_effective_end_date
6727 AND hou.id = imp.org_id
6728 UNION ALL
6729 SELECT
6730 resd.resource_name resource_name
6731 ,resd.person_id resource_id
6732 ,0 scheduled_hours
6733 ,0 capacity_hours
6734 ,0 sch_reduce_capacity_hours
6735 ,0 confirmed_billable_hours
6736 ,0 confirmed_nonbillable_hours
6737 ,0 provisional_billable_hours
6738 ,0 provisional_nonbillable_hours
6739 ,0 training_hours
6740 ,0 confirmed_weighted_hours
6741 ,0 billable_conf_weighted_hours
6742 ,0 unassigned_hours
6743 ,0 actual_hours
6744 FROM
6745 pji_pmv_orgz_dim_tmp horg
6746 ,pa_resources_denorm resd
6747 WHERE
6748 resd.resource_organization_id = horg.id
6749 AND resd.utilization_flag = 'Y'
6750 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6751 resd.resource_effective_end_date
6752
6753 UNION ALL -- added for current year capacity_hours
6754 /* Bug 3515594 */
6755 SELECT /*+ ORDERED */
6756 resd.resource_name resource_name
6757 ,resd.person_id resource_id
6758 ,0 scheduled_hours
6759 ,capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6760 capacity_hours
6761 ,reduce_capacity_hrs_s / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6762 sch_reduce_capacity_hours
6763 ,0 confirmed_billable_hours
6764 ,0 confirmed_nonbillable_hours
6765 ,0 provisional_billable_hours
6766 ,0 provisional_nonbillable_hours
6767 ,0 training_hours
6768 ,0 confirmed_weighted_hours
6769 ,0 billable_conf_weighted_hours
6770 ,0 unassigned_hours
6771 ,0 actual_hours
6772 FROM
6773 pji_pmv_orgz_dim_tmp horg
6774 ,pji_pmv_time_dim_tmp time
6775 ,pji_rm_res_f fct
6776 ,pji_pmv_org_dim_tmp hou
6777 ,pa_resources_denorm resd
6778 ,pa_implementations_all imp
6779 WHERE
6780 fct.expenditure_org_id = hou.id
6781 AND fct.expenditure_organization_id = horg.id
6782 AND fct.time_id = time.id
6783 AND fct.period_type_id = time.period_type
6784 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6785 AND time.id is not null
6786 AND fct.person_id = resd.person_id
6787 AND resd.resource_organization_id = horg.id
6788 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6789 resd.resource_effective_end_date
6790 AND hou.id = imp.org_id
6791 )
6792 GROUP BY resource_name, resource_id;
6793
6794 /*
6795 * If util_categories<>null and job_level<>null
6796 */
6797 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'Y' THEN
6798 SELECT PJI_REP_U7( resource_name
6799 , resource_id
6800 , SUM(scheduled_hours)
6801 , SUM(capacity_hours-sch_reduce_capacity_hours)
6802 , SUM(confirmed_billable_hours)
6803 , SUM(confirmed_nonbillable_hours)
6804 , SUM(provisional_billable_hours)
6805 , SUM(provisional_nonbillable_hours)
6806 , SUM(training_hours)
6807 , SUM(confirmed_weighted_hours)
6808 , SUM(billable_conf_weighted_hours)
6809 , SUM(unassigned_hours)
6810 , SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',capacity_hours-sch_reduce_capacity_hours,
6811 actual_hours)) ,
6812 null,null,null,null,null,null,
6813 null,null,null,null,null,null,
6814 null,null,null,null,null)
6815 /* Bug 3515594 */
6816 BULK COLLECT INTO l_u7_tbl
6817 FROM
6818 (
6819 SELECT /*+ ORDERED */
6820 resd.resource_name resource_name
6821 ,fct.person_id resource_id
6822 ,fct.conf_hrs_s scheduled_hours
6823 ,0 capacity_hours
6824 ,0 sch_reduce_capacity_hours
6825 ,decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0)
6826 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_billable_hours
6827 ,(fct.conf_hrs_s-decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0))
6828 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_nonbillable_hours
6829 ,decode(wtb.billable_capitalizable_flag,'Y',prov_hrs_s,0)
6830 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) provisional_billable_hours
6831 ,(prov_hrs_s-decode(wtb.billable_capitalizable_flag,'Y',prov_hrs_s,0))
6832 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) provisional_nonbillable_hours
6833 ,decode(wtb.training_flag,'Y',fct.conf_hrs_s, 0)
6834 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) training_hours
6835 ,fct.conf_hrs_s * wtb.org_utilization_percentage/100
6836 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) confirmed_weighted_hours
6837 ,decode(wtb.billable_capitalizable_flag,'Y',fct.conf_hrs_s, 0)*wtb.org_utilization_percentage/100
6838 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) billable_conf_weighted_hours
6839 ,unassigned_hrs_s * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6840 unassigned_hours
6841 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_hours
6842 FROM
6843 pji_pmv_orgz_dim_tmp horg
6844 ,pji_pmv_time_dim_tmp time
6845 ,pji_pmv_wt_dim_tmp wt
6846 ,pji_rm_res_wt_f fct
6847 ,pji_pmv_jb_dim_tmp jbt
6848 ,pji_pmv_org_dim_tmp hou
6849 ,pa_work_types_b wtb
6850 ,pa_resources_denorm resd
6851 ,pa_implementations_all imp
6852 WHERE
6853 fct.expenditure_org_id = hou.id
6854 AND fct.expenditure_organization_id = horg.id
6855 AND fct.time_id = time.id
6856 AND fct.period_type_id = time.period_type
6857 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6858 AND time.id is not null
6859 AND fct.work_type_id = wt.id
6860 AND wtb.work_type_id = wt.id
6861 AND fct.job_id = jbt.id
6862 AND fct.person_id = resd.person_id
6863 AND resd.resource_organization_id = horg.id
6864 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6865 resd.resource_effective_end_date
6866 AND hou.id = imp.org_id
6867 UNION ALL
6868 SELECT
6869 resd.resource_name resource_name
6870 ,resd.person_id resource_id
6871 ,0 scheduled_hours
6872 ,0 capacity_hours
6873 ,0 sch_reduce_capacity_hours
6874 ,0 confirmed_billable_hours
6875 ,0 confirmed_nonbillable_hours
6876 ,0 provisional_billable_hours
6877 ,0 provisional_nonbillable_hours
6878 ,0 training_hours
6879 ,0 confirmed_weighted_hours
6880 ,0 billable_conf_weighted_hours
6881 ,0 unassigned_hours
6882 ,0 actual_hours
6883 FROM
6884 pji_pmv_orgz_dim_tmp horg
6885 ,pji_pmv_jb_dim_tmp jbt
6886 ,pa_resources_denorm resd
6887 WHERE
6888 resd.resource_organization_id = horg.id
6889 AND resd.utilization_flag = 'Y'
6890 AND resd.job_id = jbt.id
6891 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6892 resd.resource_effective_end_date
6893 UNION ALL -- added for current year capacity_hours
6894 /* Bug 3515594 */
6895 SELECT /*+ ORDERED */
6896 resd.resource_name resource_name
6897 ,resd.person_id resource_id
6898 ,0 scheduled_hours
6899 ,capacity_hrs * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6900 capacity_hours
6901 ,reduce_capacity_hrs_s * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
6902 sch_reduce_capacity_hours
6903 ,0 confirmed_billable_hours
6904 ,0 confirmed_nonbillable_hours
6905 ,0 provisional_billable_hours
6906 ,0 provisional_nonbillable_hours
6907 ,0 training_hours
6908 ,0 confirmed_weighted_hours
6909 ,0 billable_conf_weighted_hours
6910 ,0 unassigned_hours
6911 ,0 actual_hours
6912 FROM
6913 pji_pmv_orgz_dim_tmp horg
6914 ,pji_pmv_time_dim_tmp time
6915 ,pji_pmv_jb_dim_tmp jbt
6916 ,pji_rm_res_f fct
6917 ,pji_pmv_org_dim_tmp hou
6918 ,pa_resources_denorm resd
6919 ,pa_implementations_all imp
6920 WHERE
6921 fct.expenditure_org_id = hou.id
6922 AND fct.expenditure_organization_id = horg.id
6923 AND fct.time_id = time.id
6924 AND fct.period_type_id = time.period_type
6925 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
6926 AND time.id is not null
6927 AND fct.job_id = jbt.id
6928 AND fct.person_id = resd.person_id
6929 AND resd.resource_organization_id = horg.id
6930 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
6931 resd.resource_effective_end_date
6932 AND hou.id = imp.org_id
6933 )
6934 GROUP BY resource_name, resource_id;
6935 END IF;
6936
6937 FOR i in 1..l_u7_tbl.COUNT
6938 LOOP
6939
6940 l_scheduled_hours := l_scheduled_hours + nvl(l_u7_tbl(i).scheduled_hours ,0);
6941 l_capacity_hours := l_capacity_hours + nvl(l_u7_tbl(i).capacity_hours ,0);
6942 l_confirmed_billable_hours := l_confirmed_billable_hours + nvl(l_u7_tbl(i).confirmed_billable_hours ,0);
6943 l_confirmed_nonbillable_hours := l_confirmed_nonbillable_hours + nvl(l_u7_tbl(i).confirmed_nonbillable_hours,0);
6944 l_provisional_billable_hours := l_provisional_billable_hours + nvl(l_u7_tbl(i).provisional_billable_hours,0);
6945 l_prov_nonbillable_hours := l_prov_nonbillable_hours + nvl(l_u7_tbl(i).provisional_nonbillable_hours,0);
6946 l_training_hours := l_training_hours + nvl(l_u7_tbl(i).training_hours ,0);
6947 l_confirmed_weighted_hours := l_confirmed_weighted_hours + nvl(l_u7_tbl(i).confirmed_weighted_hours ,0);
6948 l_billable_conf_weighted_hours := l_billable_conf_weighted_hours + nvl(l_u7_tbl(i).billable_conf_weighted_hours,0);
6949 l_unassigned_hours := l_unassigned_hours + nvl(l_u7_tbl(i).unassigned_hours ,0);
6950 l_util_percent_denom_hours := l_util_percent_denom_hours + nvl(l_u7_tbl(i).util_percent_denom_hours ,0);
6951
6952 --Calculated columns processing is done below
6953 IF nvl(l_u7_tbl(i).util_percent_denom_hours,0) <> 0 THEN
6954 l_u7_tbl(i).sch_util_percent := 100 * (l_u7_tbl(i).confirmed_weighted_hours / l_u7_tbl(i).util_percent_denom_hours);
6955 l_u7_tbl(i).bill_util_percent := 100 * (l_u7_tbl(i).billable_conf_weighted_hours / l_u7_tbl(i).util_percent_denom_hours);
6956 l_u7_tbl(i).nonbill_util_percent := 100 * ((l_u7_tbl(i).confirmed_weighted_hours - l_u7_tbl(i).billable_conf_weighted_hours)/ l_u7_tbl(i).util_percent_denom_hours);
6957 l_u7_tbl(i).unassigned_percent := 100 * (l_u7_tbl(i).unassigned_hours / l_u7_tbl(i).util_percent_denom_hours);
6958 l_u7_tbl(i).training_percent := 100 * (l_u7_tbl(i).training_hours / l_u7_tbl(i).util_percent_denom_hours);
6959
6960 ELSE
6961 l_u7_tbl(i).sch_util_percent := NULL;
6962 l_u7_tbl(i).bill_util_percent := NULL;
6963 l_u7_tbl(i).nonbill_util_percent := NULL;
6964 l_u7_tbl(i).unassigned_percent := NULL;
6965 l_u7_tbl(i).training_percent := NULL;
6966 END IF;
6967
6968 END LOOP;
6969
6970 IF l_u7_tbl.COUNT > 0 THEN
6971 FOR i IN 1..l_u7_tbl.COUNT
6972 LOOP
6973
6974 IF l_u7_tbl.EXISTS(i) THEN
6975
6976 l_u7_tbl(i).PJI_REP_TOTAL_1 := l_scheduled_hours;
6977 l_u7_tbl(i).PJI_REP_TOTAL_2 := l_capacity_hours;
6978 l_u7_tbl(i).PJI_REP_TOTAL_3 := l_confirmed_billable_hours;
6979 l_u7_tbl(i).PJI_REP_TOTAL_4 := l_confirmed_nonbillable_hours;
6980 l_u7_tbl(i).PJI_REP_TOTAL_5 := l_provisional_billable_hours;
6981 l_u7_tbl(i).PJI_REP_TOTAL_6 := l_prov_nonbillable_hours;
6982 l_u7_tbl(i).PJI_REP_TOTAL_7 := l_training_hours ;
6983
6984
6985 IF nvl(l_util_percent_denom_hours,0) <> 0 THEN
6986
6987 l_u7_tbl(i).PJI_REP_TOTAL_8 := (l_confirmed_weighted_hours/l_util_percent_denom_hours)*100;
6988 l_u7_tbl(i).PJI_REP_TOTAL_9 := (l_billable_conf_weighted_hours/l_util_percent_denom_hours)*100;
6989 l_u7_tbl(i).PJI_REP_TOTAL_10 := ((l_confirmed_weighted_hours - l_billable_conf_weighted_hours)/l_util_percent_denom_hours)*100;
6990 l_u7_tbl(i).PJI_REP_TOTAL_11 := (l_unassigned_hours/l_util_percent_denom_hours)*100;
6991 l_u7_tbl(i).PJI_REP_TOTAL_12 := (l_training_hours/l_util_percent_denom_hours)*100;
6992
6993 END IF;
6994
6995 END IF; -- l_u7_tbl.EXISTS(i)
6996 END LOOP;
6997 END IF; --l_u7_tbl.COUNT > 0
6998
6999 /*
7000 * Return the bulk collected table back to pmv.
7001 */
7002 COMMIT;
7003 RETURN l_u7_tbl;
7004
7005
7006 END PLSQLDriver_PJI_REP_U7;
7007
7008
7009 /*****************************************************************************
7010 *
7011 * The functions for report U8: Project Expected Utilization Detail
7012 *
7013 *****************************************************************************/
7014
7015 PROCEDURE Get_SQL_PJI_REP_U8(p_page_parameter_tbl IN BIS_PMV_PAGE_PARAMETER_TBL
7016 , x_PMV_Sql OUT NOCOPY VARCHAR2
7017 , x_PMV_Output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
7018 IS
7019 BEGIN
7020
7021 PJI_PMV_ENGINE.Generate_SQL(P_PAGE_PARAMETER_TBL => p_page_parameter_tbl
7022 ,P_SELECT_LIST =>
7023 ' FACT.RESOURCE_NAME "VIEWBY",
7024 FACT.EXPECTED_HOURS "PJI_REP_MSR_2",
7025 FACT.CAPACITY_HOURS "PJI_REP_MSR_3",
7026 FACT.MISSING_HOURS "PJI_REP_MSR_4",
7027 FACT.ACT_UTIL_PERCENT "PJI_REP_MSR_5",
7028 FACT.SCH_UTIL_PERCENT "PJI_REP_MSR_6",
7029 FACT.EXP_UTIL_PERCENT "PJI_REP_MSR_7",
7030 FACT.PROV_SCH_UTIL_PERCENT "PJI_REP_MSR_12",
7031 FACT.EXP_TOTAL_UTIL_PERCENT "PJI_REP_MSR_8",
7032 FACT.PRIOR_UTIL_PERCENT "PJI_REP_MSR_9",
7033 FACT.EXP_BILL_UTIL_PERCENT "PJI_REP_MSR_10",
7034 FACT.EXP_NONBILL_UTIL_PERCENT "PJI_REP_MSR_13",
7035 FACT.EXP_TRAINING_PERCENT "PJI_REP_MSR_11",
7036 FACT.SCH_CONF_WEIGHTED_HOURS "PJI_REP_MSR_21",
7037 FACT.SCH_PROV_WEIGHTED_HOURS "PJI_REP_MSR_23",
7038 FACT.EXPECTED_BILL_WEIGHTED_HOURS "PJI_REP_MSR_14",
7039 FACT.EXPECTED_TRAINING_HOURS "PJI_REP_MSR_15",
7040 FACT.PRIOR_ACTUAL_WEIGHTED_HOURS "PJI_REP_MSR_16",
7041 FACT.PRIOR_CAPACITY_HOURS "PJI_REP_MSR_17",
7042 FACT.UTIL_PERCENT_DENOM_HOURS "PJI_REP_MSR_22",
7043 FACT.PRIOR_UTIL_PERCENT_DENOM_HOURS "PJI_REP_MSR_18",
7044 FACT.ACTUAL_WEIGHTED_HOURS "PJI_REP_MSR_19",
7045 FACT.RESOURCE_ID "PJI_REP_MSR_24",
7046 FACT.EXP_AC_UTIL_PERCENT_DENOM "PJI_REP_MSR_25",
7047 FACT.EXP_SCH_UTIL_PERCENT_DENOM "PJI_REP_MSR_26",
7048 FACT.PJI_REP_TOTAL_1 "PJI_REP_TOTAL_1",
7049 FACT.PJI_REP_TOTAL_2 "PJI_REP_TOTAL_2",
7050 FACT.PJI_REP_TOTAL_3 "PJI_REP_TOTAL_3",
7051 FACT.PJI_REP_TOTAL_4 "PJI_REP_TOTAL_4",
7052 FACT.PJI_REP_TOTAL_5 "PJI_REP_TOTAL_5",
7053 FACT.PJI_REP_TOTAL_6 "PJI_REP_TOTAL_6",
7054 FACT.PJI_REP_TOTAL_7 "PJI_REP_TOTAL_7",
7055 FACT.PJI_REP_TOTAL_8 "PJI_REP_TOTAL_8",
7056 FACT.PJI_REP_TOTAL_9 "PJI_REP_TOTAL_9",
7057 FACT.PJI_REP_TOTAL_10 "PJI_REP_TOTAL_10",
7058 FACT.PJI_REP_TOTAL_11 "PJI_REP_TOTAL_11",
7059 FACT.PJI_REP_TOTAL_12 "PJI_REP_TOTAL_12" '
7060 ,P_SQL_STATEMENT => x_PMV_Sql
7061 ,P_PMV_OUTPUT => x_PMV_Output,
7062 P_REGION_CODE => 'PJI_REP_U8',
7063 P_PLSQL_DRIVER => 'PJI_PMV_UTLZ.PLSQLDriver_PJI_REP_U8',
7064 P_PLSQL_DRIVER_PARAMS => '<<ORGANIZATION+FII_OPERATING_UNITS>>, ' ||
7065 '<<ORGANIZATION+PJI_ORGANIZATIONS>>, ' ||
7066 '<<AS_OF_DATE>>, ' ||
7067 '<<PERIOD_TYPE>>, ' ||
7068 '<<PROJECT WORK TYPE+PJI_UTIL_CATEGORIES>>, ' ||
7069 '<<PROJECT WORK TYPE+PJI_WORK_TYPES>>, ' ||
7070 '<<PROJECT JOB LEVEL+PJI_JOB_LEVELS>>, ' ||
7071 '<<VIEW_BY>>');
7072 END Get_SQL_PJI_REP_U8;
7073
7074
7075 FUNCTION PLSQLDriver_PJI_REP_U8 (
7076 p_operating_unit IN VARCHAR2 DEFAULT NULL
7077 , p_organization IN VARCHAR2
7078 , p_as_of_date IN NUMBER
7079 , p_period_type IN VARCHAR2
7080 , p_util_categories IN VARCHAR2 DEFAULT NULL
7081 , p_work_type IN VARCHAR2 DEFAULT NULL
7082 , p_job_level IN VARCHAR2 DEFAULT NULL
7083 , p_view_by IN VARCHAR2
7084 )RETURN PJI_REP_U8_TBL
7085 IS
7086 PRAGMA AUTONOMOUS_TRANSACTION;
7087 l_u8_tbl PJI_REP_U8_TBL:=PJI_REP_U8_TBL();
7088 l_job_level_param VARCHAR2(1);
7089 l_util_categories_param VARCHAR2(1);
7090 l_util_percent_denom_prof VARCHAR(25);
7091 l_dft_util_percent_denom_prof VARCHAR(25) := 'CAPACITY';
7092 l_labor_unit VARCHAR2(40);
7093 l_expected_hours NUMBER := 0;
7094 l_capacity_hours NUMBER := 0;
7095 l_missing_hours NUMBER := 0;
7096 l_actual_weighted_hours NUMBER := 0;
7097 l_sch_conf_weighted_hours NUMBER := 0;
7098 l_sch_prov_weighted_hours NUMBER := 0;
7099 l_expected_bill_weighted_hours NUMBER := 0;
7100 l_expected_training_hours NUMBER := 0;
7101 l_prior_actual_weighted_hours NUMBER := 0;
7102 l_prior_capacity_hours NUMBER := 0;
7103 l_util_percent_denom_hours NUMBER := 0;
7104 l_exp_ac_util_percent_denom NUMBER := 0;
7105 l_exp_sch_util_percent_denom NUMBER := 0;
7106 l_prior_util_denom NUMBER := 0;
7107 l_act_util_percent NUMBER := 0;
7108 l_sch_util_percent NUMBER := 0;
7109 l_exp_util_percent NUMBER := 0;
7110 l_prov_sch_util_percent NUMBER := 0;
7111 l_exp_total_util_percent NUMBER := 0;
7112 l_prior_util_percent NUMBER := 0;
7113 l_exp_bill_util_percent NUMBER := 0;
7114 l_exp_nonbill_util_percent NUMBER := 0;
7115 l_exp_training_percent NUMBER := 0;
7116
7117 BEGIN
7118 /*
7119 * Place a call to all the parse API's which parse the parameters
7120 * passed by PMV and populate all the temporary tables.
7121 */
7122 PJI_PMV_ENGINE.Convert_Operating_Unit(p_operating_unit, p_view_by);
7123 PJI_PMV_ENGINE.Convert_Organization(p_organization, p_view_by);
7124 PJI_PMV_ENGINE.Convert_Expected_Time(p_as_of_date, p_period_type, 'Y');
7125
7126 l_util_categories_param := PJI_PMV_ENGINE.convert_util_category(p_work_type, p_util_categories, p_view_by);
7127 l_job_level_param := PJI_PMV_ENGINE.convert_job_level(null, p_job_level, p_view_by);
7128
7129 /*
7130 * Get Utilization percentage denominator profile value
7131 */
7132 BEGIN
7133 SELECT fnd_profile.value('PA_ORG_UTIL_DEF_CALC_METHOD')
7134 INTO l_util_percent_denom_prof
7135 from dual;
7136
7137 EXCEPTION WHEN NO_DATA_FOUND THEN
7138 l_util_percent_denom_prof := l_dft_util_percent_denom_prof;
7139 END;
7140
7141
7142 /*
7143 * Get report labor unit
7144 */
7145 BEGIN
7146 select report_labor_units
7147 into l_labor_unit
7148 from pji_system_settings;
7149
7150 EXCEPTION WHEN OTHERS THEN
7151 l_labor_unit := null;
7152 END;
7153
7154
7155 /*
7156 * determine the fact tables you choose to run the database query on.
7157 *
7158 * If util_categories=null and job_level=null
7159 */
7160 IF l_util_categories_param = 'N' AND l_job_level_param = 'N' THEN
7161 SELECT PJI_REP_U8( resource_name
7162 ,resource_id
7163 ,SUM(expected_hours)
7164 ,SUM(capacity_hours)
7165 ,SUM(missing_hours)
7166 ,SUM(actual_weighted_hours)
7167 ,SUM(sch_conf_weighted_hours)
7168 ,SUM(sch_prov_weighted_hours)
7169 ,SUM(expected_bill_weighted_hours)
7170 ,SUM(expected_training_hours)
7171 ,SUM(prior_actual_weighted_hours)
7172 ,SUM(prior_capacity_hours)
7173 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7174 capacity_hours,actual_hours))
7175 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7176 exp_ac_capacity_hours, exp_ac_actual_hours))
7177 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7178 exp_sch_capacity_hours, exp_sch_actual_hours))
7179 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7180 prior_capacity_hours,prior_actual_hours)),
7181 null,null,null,null,null,null,
7182 null,null,null,null,null,null,
7183 null,null,null,null,null,null,
7184 null,null,null
7185 )
7186 BULK COLLECT INTO l_u8_tbl
7187 /* Bug 3515594 */
7188 FROM
7189 (
7190 -- get current year values
7191 SELECT /*+ ORDERED */
7192 resd.resource_name resource_name
7193 ,fct.person_id resource_id
7194 ,DECODE(time.amount_type,0,fct.total_hrs_a,fct.conf_hrs_s)
7195 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_hours
7196 ,(fct.capacity_hrs-DECODE(time.amount_type,0,NVL(fct.reduce_capacity_hrs_a,0),
7197 NVL(fct.reduce_capacity_hrs_s,0)))
7198 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
7199 ,fct.missing_hrs_a
7200 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) missing_hours
7201 ,DECODE(time.amount_type,0,fct.total_wtd_org_hrs_a,0)
7202 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
7203 ,DECODE(time.amount_type,1,conf_wtd_org_hrs_s,0)
7204 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_conf_weighted_hours
7205 ,DECODE(time.amount_type,1,prov_wtd_org_hrs_s,0)
7206 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_prov_weighted_hours
7207 ,DECODE(time.amount_type,0,fct.bill_wtd_org_hrs_a,fct.conf_bill_wtd_org_hrs_s)
7208 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_bill_weighted_hours
7209 ,DECODE(time.amount_type,0,fct.training_hrs_a,fct.training_hrs_s)
7210 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_training_hours
7211 ,fct.total_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7212 actual_hours
7213 ,decode(time.amount_type, 0, fct.capacity_hrs - fct.reduce_capacity_hrs_a, fct.capacity_hrs)
7214 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7215 exp_ac_capacity_hours
7216 ,decode(time.amount_type, 0, fct.total_hrs_a, 0)
7217 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7218 exp_ac_actual_hours
7219 ,decode(time.amount_type, 0, fct.capacity_hrs, fct.capacity_hrs - fct.reduce_capacity_hrs_s)
7220 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7221 exp_sch_capacity_hours
7222 ,decode(time.amount_type, 0, 0, fct.total_hrs_a)
7223 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7224 exp_sch_actual_hours
7225 ,0 prior_actual_weighted_hours
7226 ,0 prior_capacity_hours
7227 ,0 prior_actual_hours
7228 FROM
7229 pji_pmv_orgz_dim_tmp horg
7230 ,pji_pmv_time_dim_tmp time
7231 ,pji_rm_res_f fct
7232 ,pji_pmv_org_dim_tmp hou
7233 ,pa_resources_denorm resd
7234 ,pa_implementations_all imp
7235 WHERE
7236 fct.expenditure_org_id = hou.id
7237 AND fct.expenditure_organization_id = horg.id
7238 AND fct.time_id = time.id
7239 AND fct.period_type_id = time.period_type
7240 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7241 AND time.id is not null
7242 AND fct.person_id = resd.person_id
7243 AND resd.resource_organization_id = horg.id
7244 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7245 resd.resource_effective_end_date
7246 AND hou.id = imp.org_id
7247 -- get prior year values
7248 UNION ALL
7249 /* Bug 3515594 */
7250 SELECT /*+ ORDERED */
7251 resd.resource_name resource_name
7252 ,fct.person_id resource_id
7253 ,0 expected_hours
7254 ,0 capacity_hours
7255 ,0 missing_hours
7256 ,0 actual_weighted_hours
7257 ,0 sch_conf_weighted_hours
7258 ,0 sch_prov_weighted_hours
7259 ,0 expected_bill_weighted_hours
7260 ,0 expected_training_hours
7261 ,0 actual_hours
7262 ,0 exp_ac_capacity_hours
7263 ,0 exp_ac_actual_hours
7264 ,0 exp_sch_capacity_hours
7265 ,0 exp_sch_actual_hours
7266 ,fct.total_wtd_org_hrs_a
7267 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_actual_weighted_hours
7268 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_a,0))
7269 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_capacity_hours
7270 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7271 prior_actual_hours
7272 FROM
7273 pji_pmv_orgz_dim_tmp horg
7274 ,pji_pmv_time_dim_tmp time
7275 ,pji_rm_res_f fct
7276 ,pji_pmv_org_dim_tmp hou
7277 ,pa_resources_denorm resd
7278 ,pa_implementations_all imp
7279 WHERE
7280 fct.expenditure_org_id = hou.id
7281 AND fct.expenditure_organization_id = horg.id
7282 AND fct.time_id = time.prior_id
7283 AND fct.period_type_id = time.period_type
7284 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7285 AND time.prior_id is not null
7286 AND fct.person_id = resd.person_id
7287 AND resd.resource_organization_id = horg.id
7288 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7289 resd.resource_effective_end_date
7290 AND fct.expenditure_org_id = imp.org_id
7291 -- get the data for the resources who doens't have data
7292 UNION ALL
7293 SELECT
7294 resd.resource_name resource_name
7295 ,resd.person_id resource_id
7296 ,0 expected_hours
7297 ,0 capacity_hours
7298 ,0 missing_hours
7299 ,0 actual_weighted_hours
7300 ,0 sch_conf_weighted_hours
7301 ,0 sch_prov_weighted_hours
7302 ,0 expected_bill_weighted_hours
7303 ,0 expected_training_hours
7304 ,0 actual_hours
7305 ,0 exp_ac_capacity_hours
7306 ,0 exp_ac_actual_hours
7307 ,0 exp_sch_capacity_hours
7308 ,0 exp_sch_actual_hours
7309 ,0 prior_actual_weighted_hours
7310 ,0 prior_capacity_hours
7311 ,0 prior_actual_hours
7312 FROM
7313 pji_pmv_orgz_dim_tmp horg
7314 ,pa_resources_denorm resd
7315 WHERE
7316 resd.resource_organization_id = horg.id
7317 AND resd.utilization_flag = 'Y'
7318 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7319 resd.resource_effective_end_date
7320 )
7321 GROUP BY resource_name, resource_id;
7322
7323 /*
7324 * If util_categories=null and job_level<>null
7325 */
7326 ELSIF l_util_categories_param = 'N' AND l_job_level_param = 'Y' THEN
7327 SELECT PJI_REP_U8( resource_name
7328 ,resource_id
7329 ,SUM(expected_hours)
7330 ,SUM(capacity_hours)
7331 ,SUM(missing_hours)
7332 ,SUM(actual_weighted_hours)
7333 ,SUM(sch_conf_weighted_hours)
7334 ,SUM(sch_prov_weighted_hours)
7335 ,SUM(expected_bill_weighted_hours)
7336 ,SUM(expected_training_hours)
7337 ,SUM(prior_actual_weighted_hours)
7338 ,SUM(prior_capacity_hours)
7339 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7340 capacity_hours,actual_hours))
7341 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7342 exp_ac_capacity_hours, exp_ac_actual_hours))
7343 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7344 exp_sch_capacity_hours, exp_sch_actual_hours))
7345 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7346 prior_capacity_hours,prior_actual_hours)),
7347 null,null,null,null,null,null,
7348 null,null,null,null,null,null,
7349 null,null,null,null,null,null,
7350 null,null,null
7351 )
7352 /* Bug 3515594 */
7353 BULK COLLECT INTO l_u8_tbl
7354 FROM
7355 (
7356 -- get current year values
7357 SELECT /*+ ORDERED */
7358 resd.resource_name resource_name
7359 ,fct.person_id resource_id
7360 ,DECODE(time.amount_type,0,fct.total_hrs_a,fct.conf_hrs_s)
7361 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_hours
7362 ,(fct.capacity_hrs-DECODE(time.amount_type,0,NVL(fct.reduce_capacity_hrs_a,0),
7363 NVL(fct.reduce_capacity_hrs_s,0)))
7364 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) capacity_hours
7365 ,fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) missing_hours
7366 ,DECODE(time.amount_type,0,fct.total_wtd_org_hrs_a,0)
7367 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
7368 ,DECODE(time.amount_type,1,conf_wtd_org_hrs_s,0)
7369 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_conf_weighted_hours
7370 ,DECODE(time.amount_type,1,prov_wtd_org_hrs_s,0)
7371 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_prov_weighted_hours
7372 ,DECODE(time.amount_type,0,fct.bill_wtd_org_hrs_a,fct.conf_bill_wtd_org_hrs_s)
7373 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_bill_weighted_hours
7374 ,DECODE(time.amount_type,0,fct.training_hrs_a,fct.training_hrs_s)
7375 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_training_hours
7376 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7377 actual_hours
7378 ,decode(time.amount_type, 0, fct.capacity_hrs - fct.reduce_capacity_hrs_a, fct.capacity_hrs)
7379 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7380 exp_ac_capacity_hours
7381 ,decode(time.amount_type, 0, fct.total_hrs_a, 0)
7382 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7383 exp_ac_actual_hours
7384 ,decode(time.amount_type, 0, fct.capacity_hrs, fct.capacity_hrs - fct.reduce_capacity_hrs_s)
7385 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7386 exp_sch_capacity_hours
7387 ,decode(time.amount_type, 0, 0, fct.total_hrs_a)
7388 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7389 exp_sch_actual_hours
7390 ,0 prior_actual_weighted_hours
7391 ,0 prior_capacity_hours
7392 ,0 prior_actual_hours
7393 FROM
7394 pji_pmv_orgz_dim_tmp horg
7395 ,pji_pmv_time_dim_tmp time
7396 ,pji_pmv_jb_dim_tmp jbt
7397 ,pji_rm_res_f fct
7398 ,pji_pmv_org_dim_tmp hou
7399 ,pa_resources_denorm resd
7400 ,pa_implementations_all imp
7401 WHERE
7402 fct.expenditure_org_id = hou.id
7403 AND fct.expenditure_organization_id = horg.id
7404 AND fct.time_id = time.id
7405 AND fct.period_type_id = time.period_type
7406 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7407 AND time.id is not null
7408 AND fct.job_id = jbt.id
7409 AND fct.person_id = resd.person_id
7410 AND resd.resource_organization_id = horg.id
7411 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7412 resd.resource_effective_end_date
7413 AND hou.id = imp.org_id
7414 -- get prior year values
7415 UNION ALL
7416 SELECT /*+ ORDERED */
7417 resd.resource_name resource_name
7418 ,fct.person_id resource_id
7419 ,0 expected_hours
7420 ,0 capacity_hours
7421 ,null missing_hours
7422 ,0 actual_weighted_hours
7423 ,0 sch_conf_weighted_hours
7424 ,0 sch_prov_weighted_hours
7425 ,0 expected_bill_weighted_hours
7426 ,0 expected_traing_traing_hours
7427 ,0 actual_hours
7428 ,0 exp_ac_capacity_hours
7429 ,0 exp_ac_actual_hours
7430 ,0 exp_sch_capacity_hours
7431 ,0 exp_sch_actual_hours
7432 ,fct.total_wtd_org_hrs_a
7433 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_actual_weighted_hours
7434 ,(fct.capacity_hrs-NVL(fct.reduce_capacity_hrs_a,0))
7435 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_capacity_hours
7436 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7437 prior_actual_hours
7438 FROM
7439 pji_pmv_orgz_dim_tmp horg
7440 ,pji_pmv_time_dim_tmp time
7441 ,pji_pmv_jb_dim_tmp jbt
7442 ,pji_rm_res_f fct
7443 ,pji_pmv_org_dim_tmp hou
7444 ,pa_resources_denorm resd
7445 ,pa_implementations_all imp
7446 WHERE
7447 fct.expenditure_org_id = hou.id
7448 AND fct.expenditure_organization_id = horg.id
7449 AND fct.time_id = time.prior_id
7450 AND fct.period_type_id = time.period_type
7451 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7452 AND time.prior_id is not null
7453 AND fct.job_id = jbt.id
7454 AND fct.person_id = resd.person_id
7455 AND resd.resource_organization_id = horg.id
7456 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7457 resd.resource_effective_end_date
7458 AND hou.id = imp.org_id
7459 -- get the data for the resources who doens't have data
7460 UNION ALL
7461 SELECT
7462 resd.resource_name resource_name
7463 ,resd.person_id resource_id
7464 ,0 expected_hours
7465 ,0 capacity_hours
7466 ,null missing_hours
7467 ,0 actual_weighted_hours
7468 ,0 sch_conf_weighted_hours
7469 ,0 sch_prov_weighted_hours
7470 ,0 expected_bill_weighted_hours
7471 ,0 expected_traing_traing_hours
7472 ,0 actual_hours
7473 ,0 exp_ac_capacity_hours
7474 ,0 exp_ac_actual_hours
7475 ,0 exp_sch_capacity_hours
7476 ,0 exp_sch_actual_hours
7477 ,0 prior_actual_weighted_hours
7478 ,0 prior_capacity_hours
7479 ,0 prior_actual_hours
7480 FROM
7481 pji_pmv_orgz_dim_tmp horg
7482 ,pji_pmv_jb_dim_tmp jbt
7483 ,pa_resources_denorm resd
7484 WHERE
7485 resd.resource_organization_id = horg.id
7486 AND resd.utilization_flag = 'Y'
7487 AND resd.job_id = jbt.id
7488 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7489 resd.resource_effective_end_date
7490 )
7491 GROUP BY resource_name, resource_id;
7492
7493 /*
7494 * If util_categories<>null and job_level=null
7495 */
7496 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'N' THEN
7497 SELECT PJI_REP_U8( resource_name
7498 ,resource_id
7499 ,SUM(expected_hours)
7500 ,SUM(capacity_hours-reduce_capacity_hours)
7501 ,SUM(missing_hours)
7502 ,SUM(actual_weighted_hours)
7503 ,SUM(sch_conf_weighted_hours)
7504 ,SUM(sch_prov_weighted_hours)
7505 ,SUM(expected_bill_weighted_hours)
7506 ,SUM(expected_training_hours)
7507 ,SUM(prior_actual_weighted_hours)
7508 ,SUM(prior_capacity_hours-prior_red_capacity_hours)
7509 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7510 capacity_hours-reduce_capacity_hours,actual_hours))
7511 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7512 capacity_hours-exp_ac_red_capacity_hours, exp_ac_actual_hours))
7513 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7514 capacity_hours-exp_sch_red_capacity_hours, exp_sch_actual_hours))
7515 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7516 prior_capacity_hours-prior_red_capacity_hours,prior_actual_hours)),
7517 null,null,null,null,null,null,
7518 null,null,null,null,null,null,
7519 null,null,null,null,null,null,
7520 null,null,null
7521 )
7522 BULK COLLECT INTO l_u8_tbl
7523 /* Bug 3515594 */
7524 FROM
7525 (
7526 -- get current year values
7527 SELECT /*+ ORDERED */
7528 resd.resource_name resource_name
7529 ,fct.person_id resource_id
7530 ,DECODE(time.amount_type,0,fct.total_hrs_a,fct.conf_hrs_s)
7531 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_hours
7532 ,0 capacity_hours
7533 ,0 reduce_capacity_hours
7534 ,null missing_hours
7535 ,DECODE(time.amount_type,0,fct.total_hrs_a,0)* wtb.org_utilization_percentage/100
7536 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
7537 ,DECODE(time.amount_type,1,fct.conf_hrs_s,0)* wtb.org_utilization_percentage/100
7538 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_conf_weighted_hours
7539 ,DECODE(time.amount_type,1,fct.prov_hrs_s,0)* wtb.org_utilization_percentage/100
7540 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_prov_weighted_hours
7541 ,(case when time.amount_type=0 then
7542 fct.bill_hrs_a*wtb.org_utilization_percentage/100
7543 when time.amount_type=1 and wtb.billable_capitalizable_flag='Y' then
7544 fct.conf_hrs_s*wtb.org_utilization_percentage/100
7545 else 0 end) * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7546 expected_bill_weighted_hours
7547 ,(case when time.amount_type=0 and wtb.training_flag='Y' then fct.total_hrs_a
7548 when time.amount_type=1 and wtb.training_flag='Y' then fct.conf_hrs_s
7549 else 0 end) / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7550 expected_training_hours
7551 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7552 actual_hours
7553 ,0 exp_ac_red_capacity_hours
7554 ,decode(time.amount_type, 0, fct.total_hrs_a, 0)
7555 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7556 exp_ac_actual_hours
7557 ,0 exp_sch_red_capacity_hours
7558 ,decode(time.amount_type, 0, 0, fct.total_hrs_a)
7559 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7560 exp_sch_actual_hours
7561 ,0 prior_actual_weighted_hours
7562 ,0 prior_capacity_hours
7563 ,0 prior_red_capacity_hours
7564 ,0 prior_actual_hours
7565 FROM
7566 pji_pmv_orgz_dim_tmp horg
7567 ,pji_pmv_time_dim_tmp time
7568 ,pji_pmv_wt_dim_tmp wt
7569 ,pji_rm_res_wt_f fct
7570 ,pji_pmv_org_dim_tmp hou
7571 ,pa_work_types_b wtb
7572 ,pa_resources_denorm resd
7573 ,pa_implementations_all imp
7574 WHERE
7575 fct.expenditure_org_id = hou.id
7576 AND fct.expenditure_organization_id = horg.id
7577 AND fct.time_id = time.id
7578 AND fct.period_type_id = time.period_type
7579 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7580 AND time.id is not null
7581 AND fct.work_type_id = wt.id
7582 AND wtb.work_type_id = wt.id
7583 AND fct.person_id = resd.person_id
7584 AND resd.resource_organization_id = horg.id
7585 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7586 resd.resource_effective_end_date
7587 AND hou.id = imp.org_id
7588 -- get prior year values
7589 UNION ALL
7590 SELECT
7591 resd.resource_name resource_name
7592 ,fct.person_id resource_id
7593 ,0 expected_hours
7594 ,0 capacity_hours
7595 ,0 reduce_capacity_hours
7596 ,null missing_hours
7597 ,0 actual_weighted_hours
7598 ,0 sch_conf_weighted_hours
7599 ,0 sch_prov_weighted_hours
7600 ,0 expected_bill_weighted_hours
7601 ,0 expected_traing_hours
7602 ,0 actual_hours
7603 ,0 exp_ac_red_capacity_hours
7604 ,0 exp_ac_actual_hours
7605 ,0 exp_sch_red_capacity_hours
7606 ,0 exp_sch_actual_hours
7607 ,fct.total_hrs_a * wtb.org_utilization_percentage/100
7608 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_actual_weighted_hours
7609 ,0 prior_capacity_hours
7610 ,0 prior_red_capacity_hours
7611 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7612 prior_actual_hours
7613 FROM
7614 pji_pmv_orgz_dim_tmp horg
7615 ,pji_pmv_time_dim_tmp time
7616 ,pji_pmv_wt_dim_tmp wt
7617 ,pji_rm_res_wt_f fct
7618 ,pji_pmv_org_dim_tmp hou
7619 ,pa_work_types_b wtb
7620 ,pa_resources_denorm resd
7621 ,pa_implementations_all imp
7622 WHERE
7623 fct.expenditure_org_id = hou.id
7624 AND fct.expenditure_organization_id = horg.id
7625 AND fct.time_id = time.prior_id
7626 AND fct.period_type_id = time.period_type
7627 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7628 AND time.prior_id is not null
7629 AND fct.work_type_id = wt.id
7630 AND wtb.work_type_id = wt.id
7631 AND fct.person_id = resd.person_id
7632 AND resd.resource_organization_id = horg.id
7633 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7634 resd.resource_effective_end_date
7635 AND fct.expenditure_org_id = imp.org_id
7636 -- get the data for the resources who doesn't have data
7637 UNION ALL
7638 SELECT
7639 resd.resource_name resource_name
7640 ,resd.person_id resource_id
7641 ,0 expected_hours
7642 ,0 capacity_hours
7643 ,0 reduce_capacity_hours
7644 ,null missing_hours
7645 ,0 actual_weighted_hours
7646 ,0 sch_conf_weighted_hours
7647 ,0 sch_prov_weighted_hours
7648 ,0 expected_bill_weighted_hours
7649 ,0 expected_traing_hours
7650 ,0 actual_hours
7651 ,0 exp_ac_red_capacity_hours
7652 ,0 exp_ac_actual_hours
7653 ,0 exp_sch_red_capacity_hours
7654 ,0 exp_sch_actual_hours
7655 ,0 prior_actual_weighted_hours
7656 ,0 prior_capacity_hours
7657 ,0 prior_red_capacity_hours
7658 ,0 prior_actual_hours
7659 FROM
7660 pji_pmv_orgz_dim_tmp horg
7661 ,pa_resources_denorm resd
7662 WHERE
7663 resd.resource_organization_id = horg.id
7664 AND resd.utilization_flag = 'Y'
7665 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7666 resd.resource_effective_end_date
7667 UNION ALL -- added for current year capacity_hours
7668 /* Bug 3515594 */
7669 SELECT /*+ ORDERED */
7670 resd.resource_name resource_name
7671 ,resd.person_id resource_id
7672 ,0 expected_hours
7673 ,fct.capacity_hrs
7674 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7675 capacity_hours
7676 ,decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, reduce_capacity_hrs_s)
7677 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7678 reduce_capacity_hours
7679 ,fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7680 missing_hours
7681 ,0 actual_weighted_hours
7682 ,0 sch_conf_weighted_hours
7683 ,0 sch_prov_weighted_hours
7684 ,0 expected_bill_weighted_hours
7685 ,0 expected_traing_hours
7686 ,0 actual_hours
7687 ,decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, 0)
7688 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7689 exp_ac_red_capacity_hours
7690 ,0 exp_ac_actual_hours
7691 ,decode(time.amount_type, 1, fct.reduce_capacity_hrs_s, 0)
7692 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7693 exp_sch_red_capacity_hours
7694 ,0 exp_sch_actual_hours
7695 ,0 prior_actual_weighted_hours
7696 ,0 prior_capacity_hours
7697 ,0 prior_red_capacity_hours
7698 ,0 prior_actual_hours
7699 FROM
7700 pji_pmv_orgz_dim_tmp horg
7701 ,pji_pmv_time_dim_tmp time
7702 ,pji_rm_res_f fct
7703 ,pji_pmv_org_dim_tmp hou
7704 ,pa_resources_denorm resd
7705 ,pa_implementations_all imp
7706 WHERE
7707 fct.expenditure_org_id = hou.id
7708 AND fct.expenditure_organization_id = horg.id
7709 AND fct.time_id = time.id
7710 AND fct.period_type_id = time.period_type
7711 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7712 AND time.id is not null
7713 AND fct.person_id = resd.person_id
7714 AND resd.resource_organization_id = horg.id
7715 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7716 resd.resource_effective_end_date
7717 AND hou.id = imp.org_id
7718 UNION ALL -- added for prior year capacity_hours
7719 SELECT /*+ ORDERED */
7720 resd.resource_name resource_name
7721 ,resd.person_id resource_id
7722 ,0 expected_hours
7723 ,0 capacity_hours
7724 ,0 reduce_capacity_hours
7725 ,null missing_hours
7726 ,0 actual_weighted_hours
7727 ,0 sch_conf_weighted_hours
7728 ,0 sch_prov_weighted_hours
7729 ,0 expected_bill_weighted_hours
7730 ,0 expected_traing_hours
7731 ,0 actual_hours
7732 ,0 exp_ac_red_capacity_hours
7733 ,0 exp_ac_actual_hours
7734 ,0 exp_sch_red_capacity_hours
7735 ,0 exp_sch_actual_hours
7736 ,0 prior_actual_weighted_hours
7737 ,fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7738 prior_capacity_hours
7739 ,fct.reduce_capacity_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7740 prior_red_capacity_hours
7741 ,0 prior_actual_hours
7742 FROM
7743 pji_pmv_orgz_dim_tmp horg
7744 ,pji_pmv_time_dim_tmp time
7745 ,pji_rm_res_f fct
7746 ,pji_pmv_org_dim_tmp hou
7747 ,pa_resources_denorm resd
7748 ,pa_implementations_all imp
7749 WHERE
7750 fct.expenditure_org_id = hou.id
7751 AND fct.expenditure_organization_id = horg.id
7752 AND fct.time_id = time.prior_id
7753 AND fct.period_type_id = time.period_type
7754 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7755 AND time.prior_id is not null
7756 AND fct.person_id = resd.person_id
7757 AND resd.resource_organization_id = horg.id
7758 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7759 resd.resource_effective_end_date
7760 AND hou.id = imp.org_id
7761
7762 )
7763 GROUP BY resource_name, resource_id;
7764
7765 /*
7766 * If util_categories<>null and job_level<>null
7767 */
7768 ELSIF l_util_categories_param = 'Y' AND l_job_level_param = 'Y' THEN
7769 SELECT PJI_REP_U8( resource_name
7770 ,resource_id
7771 ,SUM(expected_hours)
7772 ,SUM(capacity_hours-reduce_capacity_hours)
7773 ,SUM(missing_hours)
7774 ,SUM(actual_weighted_hours)
7775 ,SUM(sch_conf_weighted_hours)
7776 ,SUM(sch_prov_weighted_hours)
7777 ,SUM(expected_bill_weighted_hours)
7778 ,SUM(expected_training_hours)
7779 ,SUM(prior_actual_weighted_hours)
7780 ,SUM(prior_capacity_hours-prior_red_capacity_hours)
7781 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7782 capacity_hours-reduce_capacity_hours,actual_hours))
7783 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7784 capacity_hours-exp_ac_red_capacity_hours, exp_ac_actual_hours))
7785 ,SUM(decode(l_util_percent_denom_prof, 'CAPACITY',
7786 capacity_hours-exp_sch_red_capacity_hours, exp_sch_actual_hours))
7787 ,SUM(DECODE(l_util_percent_denom_prof,'CAPACITY',
7788 prior_capacity_hours-prior_red_capacity_hours,prior_actual_hours)),
7789 null,null,null,null,null,null,
7790 null,null,null,null,null,null,
7791 null,null,null,null,null,null,
7792 null,null,null
7793 )
7794 BULK COLLECT INTO l_u8_tbl
7795 /* Bug 3515594 */
7796 FROM
7797 (
7798 -- get current year values
7799 SELECT /*+ ORDERED */
7800 resd.resource_name resource_name
7801 ,fct.person_id resource_id
7802 ,DECODE(time.amount_type,0,fct.total_hrs_a,fct.conf_hrs_s)
7803 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) expected_hours
7804 ,0 capacity_hours
7805 ,0 reduce_capacity_hours
7806 ,null missing_hours
7807 ,DECODE(time.amount_type,0,fct.total_hrs_a,0)* wtb.org_utilization_percentage/100
7808 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) actual_weighted_hours
7809 ,DECODE(time.amount_type,1,fct.conf_hrs_s,0)* wtb.org_utilization_percentage/100
7810 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_conf_weighted_hours
7811 ,DECODE(time.amount_type,1,fct.prov_hrs_s,0)* wtb.org_utilization_percentage/100
7812 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) sch_prov_weighted_hours
7813 ,(case when time.amount_type=0 and wtb.billable_capitalizable_flag='Y' then
7814 fct.total_hrs_a*wtb.org_utilization_percentage/100
7815 when time.amount_type=1 and wtb.billable_capitalizable_flag='Y' then
7816 fct.conf_hrs_s*wtb.org_utilization_percentage/100 else 0 end)
7817 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7818 expected_bill_weighted_hours
7819 ,(case when time.amount_type=0 and wtb.training_flag='Y' then fct.total_hrs_a
7820 when time.amount_type=1 and wtb.training_flag='Y' then fct.conf_hrs_s else 0 end)
7821 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7822 expected_training_hours
7823 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7824 actual_hours
7825 ,0 exp_ac_red_capacity_hours
7826 ,decode(time.amount_type, 0, fct.total_hrs_a, 0)
7827 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7828 exp_ac_actual_hours
7829 ,0 exp_sch_red_capacity_hours
7830 ,decode(time.amount_type, 0, 0, fct.total_hrs_a)
7831 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7832 exp_sch_actual_hours
7833 ,0 prior_actual_weighted_hours
7834 ,0 prior_capacity_hours
7835 ,0 prior_red_capacity_hours
7836 ,0 prior_actual_hours
7837 FROM
7838 pji_pmv_orgz_dim_tmp horg
7839 ,pji_pmv_time_dim_tmp time
7840 ,pji_pmv_wt_dim_tmp wt
7841 ,pji_rm_res_wt_f fct
7842 ,pji_pmv_jb_dim_tmp jbt
7843 ,pji_pmv_org_dim_tmp hou
7844 ,pa_work_types_b wtb
7845 ,pa_resources_denorm resd
7846 ,pa_implementations_all imp
7847 WHERE
7848 fct.expenditure_org_id = hou.id
7849 AND fct.expenditure_organization_id = horg.id
7850 AND fct.time_id = time.id
7851 AND fct.period_type_id = time.period_type
7852 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7853 AND time.id is not null
7854 AND fct.work_type_id = wt.id
7855 AND wtb.work_type_id = wt.id
7856 AND fct.job_id = jbt.id
7857 AND fct.person_id = resd.person_id
7858 AND resd.resource_organization_id = horg.id
7859 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7860 resd.resource_effective_end_date
7861 AND hou.id = imp.org_id
7862 -- get prior year values
7863 UNION ALL
7864 SELECT
7865 resd.resource_name resource_name
7866 ,fct.person_id resource_id
7867 ,0 expected_hours
7868 ,0 capacity_hours
7869 ,0 reduce_capacity_hours
7870 ,null missing_hours
7871 ,0 actual_weighted_hours
7872 ,0 sch_conf_weighted_hours
7873 ,0 sch_prov_weighted_hours
7874 ,0 expected_bill_weighted_hours
7875 ,0 expected_traing_hours
7876 ,0 actual_hours
7877 ,0 exp_ac_red_capacity_hours
7878 ,0 exp_ac_actual_hours
7879 ,0 exp_sch_red_capacity_hours
7880 ,0 exp_sch_actual_hours
7881 ,(fct.total_hrs_a * wtb.org_utilization_percentage/100)
7882 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_actual_weighted_hours
7883 ,0 prior_capacity_hours
7884 ,(CASE WHEN wtb.reduce_capacity_flag = 'Y' THEN fct.total_hrs_a ELSE 0 END)
7885 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) prior_red_capacity_hours
7886 ,fct.total_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7887 prior_actual_hours
7888 FROM
7889 pji_pmv_orgz_dim_tmp horg
7890 ,pji_pmv_time_dim_tmp time
7891 ,pji_pmv_wt_dim_tmp wt
7892 ,pji_rm_res_wt_f fct
7893 ,pji_pmv_jb_dim_tmp jbt
7894 ,pji_pmv_org_dim_tmp hou
7895 ,pa_work_types_b wtb
7896 ,pa_resources_denorm resd
7897 ,pa_implementations_all imp
7898 WHERE
7899 fct.expenditure_org_id = hou.id
7900 AND fct.expenditure_organization_id = horg.id
7901 AND fct.time_id = time.prior_id
7902 AND fct.period_type_id = time.period_type
7903 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7904 AND time.prior_id is not null
7905 AND fct.work_type_id = wt.id
7906 AND wtb.work_type_id = wt.id
7907 AND fct.job_id = jbt.id
7908 AND fct.person_id = resd.person_id
7909 AND resd.resource_organization_id = horg.id
7910 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7911 resd.resource_effective_end_date
7912 AND fct.expenditure_org_id = imp.org_id
7913 -- get the data for the resources who doesn't have data
7914 UNION ALL
7915 SELECT
7916 resd.resource_name resource_name
7917 ,resd.person_id resource_id
7918 ,0 expected_hours
7919 ,0 capacity_hours
7920 ,0 reduce_capacity_hours
7921 ,null missing_hours
7922 ,0 actual_weighted_hours
7923 ,0 sch_conf_weighted_hours
7924 ,0 sch_prov_weighted_hours
7925 ,0 expected_bill_weighted_hours
7926 ,0 expected_traing_hours
7927 ,0 actual_hours
7928 ,0 exp_ac_red_capacity_hours
7929 ,0 exp_ac_actual_hours
7930 ,0 exp_sch_red_capacity_hours
7931 ,0 exp_sch_actual_hours
7932 ,0 prior_actual_weighted_hours
7933 ,0 prior_capacity_hours
7934 ,0 prior_red_capacity_hours
7935 ,0 prior_actual_hours
7936 FROM
7937 pa_resources_denorm resd
7938 ,pji_pmv_orgz_dim_tmp horg
7939 ,pji_pmv_jb_dim_tmp jbt
7940 WHERE
7941 resd.resource_organization_id = horg.id
7942 AND resd.utilization_flag = 'Y'
7943 AND resd.job_id = jbt.id
7944 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7945 resd.resource_effective_end_date
7946
7947 UNION ALL -- added for current year capacity_hours
7948 /* Bug 3515594 */
7949 SELECT /*+ ORDERED */
7950 resd.resource_name resource_name
7951 ,resd.person_id resource_id
7952 ,0 expected_hours
7953 ,fct.capacity_hrs / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7954 capacity_hours
7955 ,decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, fct.reduce_capacity_hrs_s)
7956 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7957 reduce_capacity_hours
7958 ,fct.missing_hrs_a / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7959 missing_hours
7960 ,0 actual_weighted_hours
7961 ,0 sch_conf_weighted_hours
7962 ,0 sch_prov_weighted_hours
7963 ,0 expected_bill_weighted_hours
7964 ,0 expected_traing_hours
7965 ,0 actual_hours
7966 ,decode(time.amount_type, 0, fct.reduce_capacity_hrs_a, 0)
7967 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
7968 exp_ac_red_capacity_hours
7969 ,0 exp_ac_actual_hours
7970 ,decode(time.amount_type, 1, fct.reduce_capacity_hrs_s, 0)
7971 / decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1) exp_sch_red_capacity_hours
7972 ,0 exp_sch_actual_hours
7973 ,0 prior_actual_weighted_hours
7974 ,0 prior_capacity_hours
7975 ,0 prior_red_capacity_hours
7976 ,0 prior_actual_hours
7977 FROM
7978 pji_pmv_orgz_dim_tmp horg
7979 ,pji_pmv_time_dim_tmp time
7980 ,pji_pmv_jb_dim_tmp jbt
7981 ,pji_rm_res_f fct
7982 ,pji_pmv_org_dim_tmp hou
7983 ,pa_resources_denorm resd
7984 ,pa_implementations_all imp
7985 WHERE
7986 fct.expenditure_org_id = hou.id
7987 AND fct.expenditure_organization_id = horg.id
7988 AND fct.time_id = time.id
7989 AND fct.period_type_id = time.period_type
7990 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
7991 AND time.id is not null
7992 AND fct.job_id = jbt.id
7993 AND fct.person_id = resd.person_id
7994 AND resd.resource_organization_id = horg.id
7995 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
7996 resd.resource_effective_end_date
7997 AND hou.id = imp.org_id
7998
7999 UNION ALL -- added for prior year capacity_hours
8000 SELECT /*+ ORDERED */
8001 resd.resource_name resource_name
8002 ,resd.person_id resource_id
8003 ,0 expected_hours
8004 ,0 capacity_hours
8005 ,0 reduce_capacity_hours
8006 ,null missing_hours
8007 ,0 actual_weighted_hours
8008 ,0 sch_conf_weighted_hours
8009 ,0 sch_prov_weighted_hours
8010 ,0 expected_bill_weighted_hours
8011 ,0 expected_traing_hours
8012 ,0 actual_hours
8013 ,0 exp_ac_red_capacity_hours
8014 ,0 exp_ac_actual_hours
8015 ,0 exp_sch_red_capacity_hours
8016 ,0 exp_sch_actual_hours
8017 ,0 prior_actual_weighted_hours
8018 ,fct.capacity_hrs * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
8019 prior_capacity_hours
8020 ,fct.reduce_capacity_hrs_a * decode(l_labor_unit, 'DAYS', imp.FTE_DAY, 'WEEKS',imp.FTE_WEEK, 1)
8021 prior_red_capacity_hours
8022 ,0 prior_actual_hours
8023 FROM
8024 pji_pmv_orgz_dim_tmp horg
8025 ,pji_pmv_time_dim_tmp time
8026 ,pji_pmv_jb_dim_tmp jbt
8027 ,pji_rm_res_f fct
8028 ,pji_pmv_org_dim_tmp hou
8029 ,pa_resources_denorm resd
8030 ,pa_implementations_all imp
8031 WHERE
8032 fct.expenditure_org_id = hou.id
8033 AND fct.expenditure_organization_id = horg.id
8034 AND fct.time_id = time.prior_id
8035 AND fct.period_type_id = time.period_type
8036 AND fct.calendar_type = decode(fct.period_type_id,1, 'C',time.calendar_type)
8037 AND time.prior_id is not null
8038 AND fct.job_id = jbt.id
8039 AND fct.person_id = resd.person_id
8040 AND resd.resource_organization_id = horg.id
8041 AND TO_DATE(p_as_of_date,'j') between resd.resource_effective_start_date and
8042 resd.resource_effective_end_date
8043 AND hou.id = imp.org_id
8044 )
8045 GROUP BY resource_name, resource_id;
8046
8047 END IF;
8048
8049 FOR i in 1..l_u8_tbl.COUNT
8050 LOOP
8051
8052 l_expected_hours := l_expected_hours + nvl(l_u8_tbl(i).expected_hours,0);
8053 l_capacity_hours := l_capacity_hours + nvl(l_u8_tbl(i).capacity_hours,0);
8054 l_missing_hours := l_missing_hours + nvl(l_u8_tbl(i).missing_hours,0);
8055 l_actual_weighted_hours := l_actual_weighted_hours + nvl(l_u8_tbl(i).actual_weighted_hours,0);
8056 l_sch_conf_weighted_hours := l_sch_conf_weighted_hours + nvl(l_u8_tbl(i).sch_conf_weighted_hours,0);
8057 l_sch_prov_weighted_hours := l_sch_prov_weighted_hours + nvl(l_u8_tbl(i).sch_prov_weighted_hours,0);
8058 l_expected_bill_weighted_hours := l_expected_bill_weighted_hours + nvl(l_u8_tbl(i).expected_bill_weighted_hours,0);
8059 l_expected_training_hours := l_expected_training_hours + nvl(l_u8_tbl(i).expected_training_hours,0);
8060 l_prior_actual_weighted_hours := l_prior_actual_weighted_hours + nvl(l_u8_tbl(i).prior_actual_weighted_hours,0);
8061 l_util_percent_denom_hours := l_util_percent_denom_hours + nvl(l_u8_tbl(i).util_percent_denom_hours,0);
8062 l_exp_ac_util_percent_denom := l_exp_ac_util_percent_denom + nvl(l_u8_tbl(i).exp_ac_util_percent_denom,0);
8063 l_exp_sch_util_percent_denom := l_exp_sch_util_percent_denom + nvl(l_u8_tbl(i).exp_sch_util_percent_denom,0);
8064 l_prior_util_denom := l_prior_util_denom + nvl(l_u8_tbl(i).prior_util_percent_denom_hours,0);
8065
8066 --Calculated columns processing is done below
8067 IF nvl(l_u8_tbl(i).exp_ac_util_percent_denom,0) <> 0 THEN
8068 l_u8_tbl(i).act_util_percent := 100 * (l_u8_tbl(i).actual_weighted_hours / l_u8_tbl(i).exp_ac_util_percent_denom);
8069 ELSE
8070 l_u8_tbl(i).act_util_percent := NULL;
8071 END IF;
8072
8073 IF nvl(l_u8_tbl(i).exp_sch_util_percent_denom,0) <> 0 THEN
8074 l_u8_tbl(i).sch_util_percent := 100 * (l_u8_tbl(i).sch_conf_weighted_hours / l_u8_tbl(i).exp_sch_util_percent_denom);
8075 l_u8_tbl(i).prov_sch_util_percent := 100 * (l_u8_tbl(i).sch_prov_weighted_hours / l_u8_tbl(i).exp_sch_util_percent_denom);
8076
8077 ELSE
8078 l_u8_tbl(i).sch_util_percent := NULL;
8079 l_u8_tbl(i).prov_sch_util_percent := NULL;
8080 END IF;
8081
8082 IF nvl(l_u8_tbl(i).util_percent_denom_hours,0) <> 0 THEN
8083 l_u8_tbl(i).exp_util_percent := 100 * ((l_u8_tbl(i).actual_weighted_hours + l_u8_tbl(i).sch_conf_weighted_hours) / l_u8_tbl(i).util_percent_denom_hours);
8084 l_u8_tbl(i).exp_total_util_percent := 100 * ((l_u8_tbl(i).actual_weighted_hours + l_u8_tbl(i).sch_conf_weighted_hours + l_u8_tbl(i).sch_prov_weighted_hours) / l_u8_tbl(i).util_percent_denom_hours);
8085 l_u8_tbl(i).exp_bill_util_percent := 100 * ( l_u8_tbl(i).expected_bill_weighted_hours / l_u8_tbl(i).util_percent_denom_hours);
8086 l_u8_tbl(i).exp_nonbill_util_percent := 100 * ((l_u8_tbl(i).actual_weighted_hours + l_u8_tbl(i).sch_conf_weighted_hours - l_u8_tbl(i).expected_bill_weighted_hours) / l_u8_tbl(i).util_percent_denom_hours);
8087 l_u8_tbl(i).exp_training_percent := 100 * (l_u8_tbl(i).expected_training_hours/ l_u8_tbl(i).util_percent_denom_hours);
8088
8089
8090 ELSE
8091 l_u8_tbl(i).exp_util_percent := NULL;
8092 l_u8_tbl(i).exp_total_util_percent := NULL;
8093 l_u8_tbl(i).exp_bill_util_percent := NULL;
8094 l_u8_tbl(i).exp_nonbill_util_percent := NULL;
8095 l_u8_tbl(i).exp_training_percent := NULL;
8096 END IF;
8097
8098 IF nvl(l_u8_tbl(i).prior_util_percent_denom_hours,0) <> 0 THEN
8099 l_u8_tbl(i).prior_util_percent := 100 * (l_u8_tbl(i).prior_actual_weighted_hours / l_u8_tbl(i).prior_util_percent_denom_hours);
8100 ELSE
8101 l_u8_tbl(i).prior_util_percent := NULL;
8102 END IF;
8103
8104 END LOOP;
8105
8106 IF l_u8_tbl.COUNT > 0 THEN
8107 FOR i IN 1..l_u8_tbl.COUNT
8108 LOOP
8109
8110 IF l_u8_tbl.EXISTS(i) THEN
8111
8112 l_u8_tbl(i).PJI_REP_TOTAL_1 := l_expected_hours;
8113 l_u8_tbl(i).PJI_REP_TOTAL_2 := l_capacity_hours;
8114 l_u8_tbl(i).PJI_REP_TOTAL_3 := l_missing_hours;
8115
8116 IF nvl(l_exp_ac_util_percent_denom,0) <> 0 THEN
8117 l_u8_tbl(i).PJI_REP_TOTAL_4 := (l_actual_weighted_hours/l_exp_ac_util_percent_denom)*100;
8118 END IF;
8119
8120 IF nvl(l_exp_sch_util_percent_denom,0) <> 0 THEN
8121 l_u8_tbl(i).PJI_REP_TOTAL_5 := (l_sch_conf_weighted_hours/l_exp_sch_util_percent_denom)*100;
8122 l_u8_tbl(i).PJI_REP_TOTAL_7 := (l_sch_prov_weighted_hours/l_exp_sch_util_percent_denom)*100;
8123
8124 END IF;
8125
8126 IF nvl(l_util_percent_denom_hours,0) <> 0 THEN
8127 l_u8_tbl(i).PJI_REP_TOTAL_6 := ((l_actual_weighted_hours + l_sch_conf_weighted_hours)/l_util_percent_denom_hours)*100;
8128 l_u8_tbl(i).PJI_REP_TOTAL_8 := ((l_actual_weighted_hours + l_sch_conf_weighted_hours + l_sch_prov_weighted_hours)/l_util_percent_denom_hours)*100;
8129 l_u8_tbl(i).PJI_REP_TOTAL_10 := (l_expected_bill_weighted_hours/l_util_percent_denom_hours)*100;
8130 l_u8_tbl(i).PJI_REP_TOTAL_11 := ((l_actual_weighted_hours + l_sch_conf_weighted_hours - l_expected_bill_weighted_hours)/l_util_percent_denom_hours)*100;
8131 l_u8_tbl(i).PJI_REP_TOTAL_12 := (l_expected_training_hours/l_util_percent_denom_hours)*100;
8132
8133 END IF;
8134
8135 IF nvl(l_prior_util_denom,0) <> 0 THEN
8136 l_u8_tbl(i).PJI_REP_TOTAL_9 := (l_prior_actual_weighted_hours/l_prior_util_denom)*100;
8137 END IF;
8138
8139
8140 END IF; -- l_u8_tbl.EXISTS(i)
8141 END LOOP;
8142 END IF; --l_u8_tbl.COUNT > 0
8143
8144
8145 /*
8146 * Return the bulk collected table back to pmv.
8147 */
8148 COMMIT;
8149 RETURN l_u8_tbl;
8150
8151
8152 END PLSQLDriver_PJI_REP_U8;
8153
8154
8155 END PJI_PMV_UTLZ;