[Home] [Help]
PACKAGE BODY: APPS.JTF_RS_GROUP_REPORT_PUB
Source
1 PACKAGE BODY JTF_RS_GROUP_REPORT_PUB AS
2 /* $Header: jtfrsbgb.pls 120.0 2005/05/11 08:19:17 appldev ship $ */
3
4 /*****************************************************************************
5
6 This is a sql to get the history of movement of members in and out of groups
7
8 15-JUN-2004 nsinghai added dummy parameters for selective enabling
9 disbaling of fields.
10
11 *****************************************************************************/
12
13 TYPE REL_RECORD_TYPE IS RECORD
14 ( p_group_id JTF_RS_GROUPS_VL.GROUP_ID%TYPE,
15 p_related_group_id JTF_RS_GROUPS_VL.GROUP_ID%TYPE,
16 p_start_date_active DATE,
17 p_end_date_active DATE,
18 p_relation_start_date DATE,
19 p_relation_end_date DATE,
20 level NUMBER);
21
22
23 TYPE rel_table IS TABLE OF REL_RECORD_TYPE INDEX BY BINARY_INTEGER;
24 g_child_tab rel_table;
25
26
27 PROCEDURE child_groups(p_group_id in number,
28 p_usr_name in varchar2,
29 p_start_date in date,
30 p_end_date in date,
31 p_usage in varchar2);
32
33 /**********************************************************************************************
34 * <Start>
35 * Introduced for incorporating reporting of DFF fields
36 * Ref: ER# 2549463
37 * Data structures and private procedures to accomplish reporting of DFFs
38 */
39
40 -- Cursor definition to verify if the DFF definition associated with the groups table is frozen.
41 CURSOR c_DFF_frozen
42 IS
43 SELECT 1
44 FROM FND_DESCRIPTIVE_FLEXS_VL
45 WHERE DESCRIPTIVE_FLEXFIELD_NAME = 'JTF_RS_GROUPS'
46 AND FREEZE_FLEX_DEFINITION_FLAG = 'Y';
47
48 r_DFF_frozen c_DFF_frozen%ROWTYPE;
49
50 g_DFF_to_be_displayed boolean := false;
51 g_DFF_prompt_max_length number := 0;
52
53 -- Type definition to store relevent details for each segment in the DFF definition
54 TYPE segment_details_record IS RECORD
55 ( context_code fnd_descr_flex_contexts.descriptive_flex_context_code%TYPE,
56 is_global BOOLEAN,
57 segment_name fnd_descr_flex_col_usage_vl.end_user_column_name%TYPE,
58 is_displayed BOOLEAN,
59 row_prompt fnd_descr_flex_col_usage_vl.form_left_prompt%TYPE,
60 application_column_name fnd_descr_flex_col_usage_vl.application_column_name%TYPE);
61
62 -- Define table to store records containing relevant details of segments
63 -- Stores all the segments for all the contexts in the DFF definition
64 TYPE segment_details_table IS TABLE OF segment_details_record INDEX BY BINARY_INTEGER;
65
66 all_segment_details_tab segment_details_table;
67
68
69 /*
70 * Private Procedure to cache the DFF segment details in a local table
71 * Uses FND_DFLEX APIs to populate segment and context details into a local table all_segment_details_tab
72 * A record is created for each segment in each context in the DFF definition.
73 */
74 PROCEDURE populate_segment_details_table ( p_appl_short_name IN fnd_application.application_short_name%TYPE,
75 p_flexfield_name IN fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE )
76 IS
77 k INTEGER := 0;
78 flexfield fnd_dflex.dflex_r;
79 flexinfo fnd_dflex.dflex_dr;
80 contexts fnd_dflex.contexts_dr;
81 segments fnd_dflex.segments_dr;
82
83 BEGIN
84 fnd_dflex.get_flexfield(p_appl_short_name, p_flexfield_name, flexfield, flexinfo);
85 fnd_dflex.get_contexts(flexfield, contexts);
86 FOR i IN 1 .. contexts.ncontexts LOOP /* loop through the contexts defined */
87 IF(contexts.is_enabled(i)) THEN /* consider only the contexts that are enabled.*/
88 fnd_dflex.get_segments(fnd_dflex.make_context(flexfield, contexts.context_code(i)), segments,TRUE);
89 FOR j IN 1 .. segments.nsegments LOOP /* loop through the segments in the each context */
90 /* push a record into the local table all_segment_details_tab for each segment */
91 k := all_segment_details_tab.count + 1;
92 all_segment_details_tab(k).context_code := contexts.context_code(i);
93 all_segment_details_tab(k).is_global := contexts.is_global(i);
94 all_segment_details_tab(k).segment_name := segments.segment_name(j);
95 all_segment_details_tab(k).is_displayed := segments.is_displayed(j);
96 all_segment_details_tab(k).row_prompt := segments.row_prompt(j);
97 all_segment_details_tab(k).application_column_name := segments.application_column_name(j);
98 /* Determine the maximum length of the prompts for the DFF segments */
99 IF ( LENGTH(segments.row_prompt(j)) > g_DFF_prompt_max_length)
100 THEN
101 g_DFF_prompt_max_length := LENGTH(segments.row_prompt(j)) ;
102 END IF;
103 END LOOP;
104 END IF;
105 END LOOP;
106 END populate_segment_details_table;
107
108 /*
109 * Private Procedure to print the DFF field values to the output file, for a particular row.
110 * this proc may be invoked after only after invoking the procedure: populate_segment_details_table
111 * Parameters: ATTRIBUTE_CATEGORY and ATTRIBUTEn field values of the row and the required indent for printing
112 * Loops over all the segment records for the DFF definition from the local table all_segment_details_tab
113 already populated by the proc populate_segment_details_table
114 * Prints out values for segments that are either in the global context
115 or in the context pertinent to this particular row identified from the value of ATTRIBUTE_CATEGORY of the row
116 and with is_displayed flag on.
117 * For each segment, identifies the ATTRIBUTEn field storing value for that segment and prints it.
118 */
119 PROCEDURE get_DFF_output
120 ( p_attribute_category jtf_rs_groups_b.ATTRIBUTE_CATEGORY%TYPE,
121 p_attribute1 jtf_rs_groups_b.ATTRIBUTE1%TYPE,
122 p_attribute2 jtf_rs_groups_b.ATTRIBUTE2%TYPE,
123 p_attribute3 jtf_rs_groups_b.ATTRIBUTE3%TYPE,
124 p_attribute4 jtf_rs_groups_b.ATTRIBUTE4%TYPE,
125 p_attribute5 jtf_rs_groups_b.ATTRIBUTE5%TYPE,
126 p_attribute6 jtf_rs_groups_b.ATTRIBUTE6%TYPE,
127 p_attribute7 jtf_rs_groups_b.ATTRIBUTE7%TYPE,
128 p_attribute8 jtf_rs_groups_b.ATTRIBUTE8%TYPE,
129 p_attribute9 jtf_rs_groups_b.ATTRIBUTE9%TYPE,
130 p_attribute10 jtf_rs_groups_b.ATTRIBUTE10%TYPE,
131 p_attribute11 jtf_rs_groups_b.ATTRIBUTE11%TYPE,
132 p_attribute12 jtf_rs_groups_b.ATTRIBUTE12%TYPE,
133 p_attribute13 jtf_rs_groups_b.ATTRIBUTE13%TYPE,
134 p_attribute14 jtf_rs_groups_b.ATTRIBUTE14%TYPE,
135 p_attribute15 jtf_rs_groups_b.ATTRIBUTE15%TYPE,
136 p_indent NUMBER
137 )
138 IS
139 l_DFF_value jtf_rs_groups_b.ATTRIBUTE1%TYPE;
140 BEGIN
141 FOR i IN 1 .. all_segment_details_tab.count /* Loop over all the segments in the DFF defn. */
142 LOOP
143 IF (all_segment_details_tab(i).is_displayed AND (all_segment_details_tab(i).is_global OR all_segment_details_tab(i).context_code = p_attribute_category))
144 /* segment needs to be printed if it belongs to global context or context pertinent to this record */
145 THEN
146 /* Identify the ATTRIBUTEn field storing value for this segment */
147 IF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE1' THEN
148 l_DFF_value := p_attribute1;
149 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE2' THEN
150 l_DFF_value := p_attribute2;
151 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE3' THEN
152 l_DFF_value := p_attribute3;
153 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE4' THEN
154 l_DFF_value := p_attribute4;
155 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE5' THEN
156 l_DFF_value := p_attribute5;
157 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE6' THEN
158 l_DFF_value := p_attribute6;
159 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE7' THEN
160 l_DFF_value := p_attribute7;
161 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE8' THEN
162 l_DFF_value := p_attribute8;
163 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE9' THEN
164 l_DFF_value := p_attribute9;
165 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE10' THEN
166 l_DFF_value := p_attribute10;
167 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE11' THEN
168 l_DFF_value := p_attribute11;
169 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE12' THEN
170 l_DFF_value := p_attribute12;
171 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE13' THEN
172 l_DFF_value := p_attribute13;
173 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE14' THEN
174 l_DFF_value := p_attribute14;
175 ELSIF all_segment_details_tab(i).application_column_name = 'ATTRIBUTE15' THEN
176 l_DFF_value := p_attribute15;
177 END IF;
178 /* indent the line */
179 FOR i IN 1 .. p_indent
180 LOOP
181 fnd_file.put(fnd_file.log,' ');
182 END LOOP;
183 /* RPAD so that the values besides the prompts are printed aligned */
184 fnd_file.put(fnd_file.log, RPAD (all_segment_details_tab(i).row_prompt || ': ', g_DFF_prompt_max_length + 5, ' ') || l_DFF_value);
185 fnd_file.put_line(fnd_file.log,'');
186 END IF;
187 END LOOP;
188
189 END get_DFF_output;
190
191
192 /*
193 * Introduced for incorporating reporting of DFF fields
194 * Ref: ER# 2549463
195 * Data structures and private procedures to accomplish reporting of DFFs
196 * <End>
197 * Hereafter code is inserted at appropriate places to invoke the above procedures.
198 ***********************************************************************************************/
199
200
201
202
203 PROCEDURE query_group(ERRBUF OUT NOCOPY VARCHAR2,
204 RETCODE OUT NOCOPY VARCHAR2,
205 P_REP_TYPE IN VARCHAR2 ,
206 P_DUMMY_1 IN VARCHAR2 ,
207 P_DUMMY_2 IN VARCHAR2 ,
208 P_DUMMY_3 IN VARCHAR2 ,
209 P_GROUP_ID IN NUMBER ,
210 P_RES_ID IN NUMBER ,
211 P_USAGE IN VARCHAR2 ,
212 P_USR_NAME IN VARCHAR2 ,
213 P_DATE_OPT IN VARCHAR2 ,
214 P_START_DATE IN varchar2 ,
215 P_END_DATE IN varchar2 ,
216 P_NO_OF_DAYS IN number )
217 IS
218 begin
219 query_group (ERRBUF, RETCODE, P_REP_TYPE, P_DUMMY_1, P_DUMMY_2, P_DUMMY_3, P_GROUP_ID, P_RES_ID, P_USAGE, P_USR_NAME, P_DATE_OPT, P_START_DATE, P_END_DATE, P_NO_OF_DAYS, 'N') ;
220 end;
221
222
223 /*
224 * Procedure overloaded to give user choice to display DFF fields in the report.
225 * While submitting the concurrent request, The user may choose to display DFF fields in the report.
226 * Ref: ER# 2549463
227 */
228
229 PROCEDURE query_group(ERRBUF OUT NOCOPY VARCHAR2,
230 RETCODE OUT NOCOPY VARCHAR2,
231 P_REP_TYPE IN VARCHAR2 ,
232 P_DUMMY_1 IN VARCHAR2 ,
233 P_DUMMY_2 IN VARCHAR2 ,
234 P_DUMMY_3 IN VARCHAR2 ,
235 P_GROUP_ID IN NUMBER ,
236 P_RES_ID IN NUMBER ,
237 P_USAGE IN VARCHAR2 ,
238 P_USR_NAME IN VARCHAR2 ,
239 P_DATE_OPT IN VARCHAR2 ,
240 P_START_DATE IN varchar2 ,
241 P_END_DATE IN varchar2 ,
242 P_NO_OF_DAYS IN number,
243 P_DISP_DFF_FIELDS IN VARCHAR2)
244 is
245 /* Moved the initial assignment of below variables to inside begin */
246 l_group_id number;
247 l_res_id number;
248 l_usr_name VARCHAR2(2000);
249 l_start_date date;
250 l_end_date date;
251 l_no_of_days number;
252
253 cursor c_grp_usage
254 is
255 select /*+ INDEX(usg jtf_rs_group_usages_n1) */ group_id
256 from jtf_rs_group_usages usg
257 where usg.usage = p_usage
258 and not exists (select group_id
259 from jtf_rs_grp_relations rel
260 where rel.group_id = usg.group_id
261 and nvl(delete_flag, 'N') <> 'Y') ;
262
263 cursor c_grp_usage2
264 is
265 select /*+ INDEX(usg jtf_rs_group_usages_n1) */ group_id
266 from jtf_rs_group_usages usg
267 where usg.usage = p_usage
268 and usg.group_id = p_group_id;
269
270 r_grp_usage c_grp_usage%rowtype;
271
272 --Bug# 2909006. To print Usage at the top of report.
273 cursor c_grp_usagename
274 is
275 select
276 meaning
277 from
278 fnd_lookups
279 where lookup_type = 'JTF_RS_USAGE'
280 and lookup_code = p_usage;
281
282 r_grp_usagename c_grp_usagename%rowtype;
283
284 cursor c_grp_sec(l_group number)
285 is
286 select /*+ INDEX(gm jtf_rs_group_members_aud_nu3) */ g1.group_name,
287 --<Start>: Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
288 g1.attribute_category, g1.attribute1, g1.attribute2, g1.attribute3, g1.attribute4, g1.attribute5, g1.attribute6, g1.attribute7, g1.attribute8,
289 g1.attribute9, g1.attribute10, g1.attribute11, g1.attribute12, g1.attribute13, g1.attribute14, g1.attribute15,
290 --<End>: Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
291 ext.resource_number,
292 ext.resource_name,
293 ext.category,
294 lkp.name category_name,
295 to_char(gm.creation_date, 'DD-MON-YYYY:HH24:MI:SS') creation_date,
296 fnd.user_name created_by,
297 decode(gm.old_group_id, g1.group_id, 'OUT', 'IN') moved,
298 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_number ) from_group_number,
299 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_name ) from_group_name,
300 decode(gm.old_group_id, g1.group_id, g2.group_number, null) to_group_number,
301 decode(gm.old_group_id, g1.group_id, g2.group_name, null) to_group_name,
302 ext.resource_id,
303 g1.group_id
304 from
305 jtf_rs_groups_vl g2,
306 jtf_rs_groups_vl g3,
307 jtf_rs_resource_extns_vl ext,
308 jtf_objects_vl lkp ,
309 fnd_user fnd,
310 jtf_rs_group_members_aud gm,
311 jtf_rs_group_members mem,
312 jtf_rs_groups_vl g1
313 where g1.group_id = l_group
314 and mem.group_id = g1.group_id
315 and gm.group_member_id = mem.group_member_id
316 and ( gm.new_group_id = g1.group_id
317 or gm.old_group_id = g1.group_id )
318 and gm.creation_date between nvl(l_start_date,sysdate)
319 and nvl(l_end_date,sysdate)
320 and gm.new_group_id = g2.group_id(+)
321 and gm.old_group_id = g3.group_id(+)
322 and fnd.user_name like nvl(l_usr_name, '%')
323 and fnd.user_id = gm.created_by
324 and mem.resource_id = ext.resource_id
325 and ext.category = lkp.object_code
326 order by g1.group_name , resource_name, gm.creation_date , fnd.user_name;
327
328
329 r_grp c_grp_sec%rowtype;
330 l_prev_group JTF_RS_GROUPS_TL.GROUP_NAME%TYPE;
331
332
333 cursor c_res
334 is
335 select /*+ INDEX(gm jtf_rs_group_members_aud_nu3) */ g1.group_name,
336 --<Start>: Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
337 g1.attribute_category, g1.attribute1, g1.attribute2, g1.attribute3, g1.attribute4, g1.attribute5, g1.attribute6, g1.attribute7, g1.attribute8,
338 g1.attribute9, g1.attribute10, g1.attribute11, g1.attribute12, g1.attribute13, g1.attribute14, g1.attribute15,
339 --<End>: Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
340 ext.resource_number,
341 ext.resource_name,
342 ext.category,
343 lkp.name category_name,
344 to_char(gm.creation_date, 'DD-MON-YYYY:HH24:MI:SS') creation_date,
345 fnd.user_name created_by,
346 decode(gm.old_group_id, g1.group_id, 'OUT', 'IN') moved,
347 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_number ) from_group_number,
348 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_name ) from_group_name,
349 decode(gm.old_group_id, g1.group_id, g2.group_number, null) to_group_number,
350 decode(gm.old_group_id, g1.group_id, g2.group_name, null) to_group_name
351 from
352 jtf_rs_groups_vl g2,
353 jtf_rs_groups_vl g3,
354 fnd_user fnd,
355 jtf_objects_vl lkp,
356 jtf_rs_groups_vl g1,
357 jtf_rs_group_members_aud gm,
358 jtf_rs_group_members mem,
359 jtf_rs_resource_extns_vl ext
360 where ext.resource_id = l_res_id
361 and mem.resource_id = ext.resource_id
362 and gm.group_member_id = mem.group_member_id
363 and gm.creation_date between nvl(l_start_date,sysdate)
364 and nvl(l_end_date,sysdate)
365 and gm.created_by = fnd.user_id
366 and fnd.user_name like nvl(l_usr_name, '%')
367 and g1.group_id = mem.group_id
368 and g2.group_id(+)= gm.new_group_id
369 and g3.group_id(+) = gm.old_group_id
370 and ext.category = lkp.object_code
371 order by resource_name, g1.group_name , gm.creation_date , fnd.user_name;
372
373 r_res c_res%rowtype;
374
375 /* Moved the initial assignment of below variable to inside begin */
376 l_rep_type VARCHAR2(30);
377
378 cursor to_grp_cur(l_group_id number,
379 l_resource_id number)
380 is
381 select gm.group_member_id,
382 g1.group_id,
383 g1.group_name,
384 g1.group_number
385 from jtf_rs_group_members_aud gm,
386 jtf_rs_groups_vl g1
387 where gm.old_group_id = l_group_id
388 and gm.new_resource_id = l_resource_id
389 and g1.group_id = gm.new_group_id;
390
391 to_grp_rec to_grp_cur%rowtype;
392 l_to_grp_number jtf_rs_groups_vl.group_number%type;
393 l_to_grp_name jtf_rs_groups_vl.group_name%type;
394
395
396
397
398 begin
399
400 l_group_id := p_group_id;
401 l_res_id := p_res_id;
402 l_usr_name := p_usr_name;
403 l_no_of_days := p_no_of_days;
404 l_rep_type := p_rep_type;
405
406 IF(p_date_opt = 'RANGE')
407 THEN
408 l_start_date := trunc(to_date(p_start_date,'YYYY/MM/DD HH24:MI:SS'));
409 l_end_date := trunc(to_date(p_end_date,'YYYY/MM/DD HH24:MI:SS'));
410 ELSE
411 l_start_date := sysdate - nvl(p_no_of_days ,0);
412 l_end_date := sysdate;
413 END IF;
414
415 fnd_file.new_line(fnd_file.log, 1);
416
417 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
418 /*
419 * If the user chooses to display the DFFs AND the DFF definition is frozen
420 * Cache the segment details in a local table.
421 */
422 IF (P_DISP_DFF_FIELDS = 'Y')
423 THEN
424 OPEN c_DFF_frozen;
425 FETCH c_DFF_frozen INTO r_DFF_frozen;
426 IF(c_DFF_frozen%found)
427 THEN
428 g_DFF_to_be_displayed := TRUE;
429 all_segment_details_tab.delete;
430 populate_segment_details_table('JTF', 'JTF_RS_GROUPS');
431 END IF;
432 CLOSE c_DFF_frozen;
433 END IF;
434 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
435
436 IF(l_rep_type = 'GROUP')
437 THEN
438 open c_grp_sec(p_group_id);
439 fetch c_grp_sec into r_grp;
440 if(c_grp_sec%found)
441 then
442 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
443 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
444 IF (g_DFF_to_be_displayed)
445 THEN
446 get_DFF_output
447 ( r_grp.ATTRIBUTE_CATEGORY,
448 r_grp.ATTRIBUTE1,
449 r_grp.ATTRIBUTE2,
450 r_grp.ATTRIBUTE3,
451 r_grp.ATTRIBUTE4,
452 r_grp.ATTRIBUTE5,
453 r_grp.ATTRIBUTE6,
454 r_grp.ATTRIBUTE7,
455 r_grp.ATTRIBUTE8,
456 r_grp.ATTRIBUTE9,
457 r_grp.ATTRIBUTE10,
458 r_grp.ATTRIBUTE11,
459 r_grp.ATTRIBUTE12,
460 r_grp.ATTRIBUTE13,
461 r_grp.ATTRIBUTE14,
462 r_grp.ATTRIBUTE15,
463 0
464 );
465 END IF;
466 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
467 else
468 fnd_file.put_line(fnd_file.log,'No values found based on your criterion');
469 end if;
470 l_prev_group := r_grp.group_name;
471 while (c_grp_sec%FOUND)
472 loop
473 if (l_prev_group <> r_grp.group_name)
474 then
475 fnd_file.new_line(fnd_file.log, 3);
476 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
477 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
478 IF (g_DFF_to_be_displayed)
479 THEN
480 get_DFF_output
481 ( r_grp.ATTRIBUTE_CATEGORY,
482 r_grp.ATTRIBUTE1,
483 r_grp.ATTRIBUTE2,
484 r_grp.ATTRIBUTE3,
485 r_grp.ATTRIBUTE4,
486 r_grp.ATTRIBUTE5,
487 r_grp.ATTRIBUTE6,
488 r_grp.ATTRIBUTE7,
489 r_grp.ATTRIBUTE8,
490 r_grp.ATTRIBUTE9,
491 r_grp.ATTRIBUTE10,
492 r_grp.ATTRIBUTE11,
493 r_grp.ATTRIBUTE12,
494 r_grp.ATTRIBUTE13,
495 r_grp.ATTRIBUTE14,
496 r_grp.ATTRIBUTE15,
497 0
498 );
499 END IF;
500 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
501 end if;
502
503 if(r_grp.moved = 'OUT')
504 then
505 open to_grp_cur( r_grp.group_id,
506 r_grp.resource_id) ;
507 fetch to_grp_cur into to_grp_rec;
508 l_to_grp_number := to_grp_rec.group_number;
509 l_to_grp_name := to_grp_rec.group_name;
510 close to_grp_cur;
511 else
512 l_to_grp_number := null;
513 l_to_grp_name := null;
514 end if;
515
516 fnd_file.put_line(fnd_file.log,rpad(' Resource Name: ',27, ' ')||r_grp.resource_name);
517 fnd_file.put_line(fnd_file.log,rpad(' Resource Number: ',27, ' ')||r_grp.resource_number);
518 fnd_file.put_line(fnd_file.log,rpad(' Category: ',27, ' ')||r_grp.category_name);
519 fnd_file.put_line(fnd_file.log,rpad(' Date: ',27, ' ')||r_grp.creation_date);
520 fnd_file.put_line(fnd_file.log,rpad(' Updated By: ',27, ' ')||r_grp.created_by);
521 fnd_file.put_line(fnd_file.log,rpad(' Action: ',27, ' ')||r_grp.moved);
522 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group #:',27, ' ')||r_grp.from_group_number);
523 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group Name:',27, ' ')||r_grp.from_group_name);
524 fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||l_to_grp_number);
525 fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||l_to_grp_name);
526 --fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||r_grp.to_group_number);
527 --fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||r_grp.to_group_name);
528 l_prev_group := r_grp.group_name;
529 fnd_file.new_line(fnd_file.log, 1);
530 fetch c_grp_sec into r_grp;
531
532 end loop; -- end of if
533 close c_grp_sec;
534
535
536 -- for the child groups
537 child_groups(p_group_id,
538 p_usr_name,
539 l_start_date,
540 l_end_date,
541 p_usage);
542 ELSIF(l_rep_type = 'USAGE')
543 THEN
544 --Bug# 2909006. Print Usage at the top of report.
545 open c_grp_usagename;
546 fetch c_grp_usagename into r_grp_usagename;
547 if (c_grp_usagename%found) then
548 fnd_file.put_line(fnd_file.log,'Usage: ' || r_grp_usagename.meaning);
549 end if;
550 close c_grp_usagename;
551
552 if(p_group_id is null)
553 then
554
555 open c_grp_usage;
556 fetch c_grp_usage into r_grp_usage;
557 while(c_grp_usage%found)
558 loop
559 open c_grp_sec(r_grp_usage.group_id);
560 fetch c_grp_sec into r_grp;
561 if(c_grp_sec%found)
562 then
563 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
564 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
565 IF (g_DFF_to_be_displayed)
566 THEN
567 get_DFF_output
568 ( r_grp.ATTRIBUTE_CATEGORY,
569 r_grp.ATTRIBUTE1,
570 r_grp.ATTRIBUTE2,
571 r_grp.ATTRIBUTE3,
572 r_grp.ATTRIBUTE4,
573 r_grp.ATTRIBUTE5,
574 r_grp.ATTRIBUTE6,
575 r_grp.ATTRIBUTE7,
576 r_grp.ATTRIBUTE8,
577 r_grp.ATTRIBUTE9,
578 r_grp.ATTRIBUTE10,
579 r_grp.ATTRIBUTE11,
580 r_grp.ATTRIBUTE12,
581 r_grp.ATTRIBUTE13,
582 r_grp.ATTRIBUTE14,
583 r_grp.ATTRIBUTE15,
584 0
585 );
586 END IF;
587 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
588 end if;
589 l_prev_group := r_grp.group_name;
590
591
592 while (c_grp_sec%FOUND)
593 loop
594 if (l_prev_group <> r_grp.group_name)
595 then
596 fnd_file.new_line(fnd_file.log, 3);
597 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
598 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
599 IF (g_DFF_to_be_displayed)
600 THEN
601 get_DFF_output
602 ( r_grp.ATTRIBUTE_CATEGORY,
603 r_grp.ATTRIBUTE1,
604 r_grp.ATTRIBUTE2,
605 r_grp.ATTRIBUTE3,
606 r_grp.ATTRIBUTE4,
607 r_grp.ATTRIBUTE5,
608 r_grp.ATTRIBUTE6,
609 r_grp.ATTRIBUTE7,
610 r_grp.ATTRIBUTE8,
611 r_grp.ATTRIBUTE9,
612 r_grp.ATTRIBUTE10,
613 r_grp.ATTRIBUTE11,
614 r_grp.ATTRIBUTE12,
615 r_grp.ATTRIBUTE13,
616 r_grp.ATTRIBUTE14,
617 r_grp.ATTRIBUTE15,
618 0
619 );
620 END IF;
621 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
622 end if;
623
624 if(r_grp.moved = 'OUT')
625 then
626 open to_grp_cur( r_grp.group_id,
627 r_grp.resource_id) ;
628 fetch to_grp_cur into to_grp_rec;
629 l_to_grp_number := to_grp_rec.group_number;
630 l_to_grp_name := to_grp_rec.group_name;
631 close to_grp_cur;
632 else
633 l_to_grp_number := null;
634 l_to_grp_name := null;
635 end if;
636
637 fnd_file.put_line(fnd_file.log,rpad(' Resource Name: ',27, ' ')||r_grp.resource_name);
638 fnd_file.put_line(fnd_file.log,rpad(' Resource Number: ',27, ' ')||r_grp.resource_number);
639 fnd_file.put_line(fnd_file.log,rpad(' Category: ',27, ' ')||r_grp.category_name);
640 fnd_file.put_line(fnd_file.log,rpad(' Date: ',27, ' ')||r_grp.creation_date);
641 fnd_file.put_line(fnd_file.log,rpad(' Updated By: ',27, ' ')||r_grp.created_by);
642 fnd_file.put_line(fnd_file.log,rpad(' Action: ',27, ' ')||r_grp.moved);
643 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group #:',27, ' ')||r_grp.from_group_number);
644 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group Name:',27, ' ')||r_grp.from_group_name);
645 --fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||r_grp.to_group_number);
646 --fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||r_grp.to_group_name);
647 fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||l_to_grp_number);
648 fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||l_to_grp_name);
649 l_prev_group := r_grp.group_name;
650 fnd_file.new_line(fnd_file.log, 1);
651 fetch c_grp_sec into r_grp;
652
653 end loop; -- end of if
654 close c_grp_sec;
655
656 --call drill down
657 child_groups(r_grp_usage.group_id,
658 p_usr_name,
659 l_start_date,
660 l_end_date,
661 p_usage);
662
663
664 fetch c_grp_usage into r_grp_usage;
665 end loop;
666 close c_grp_usage;
667 else
668 open c_grp_usage2;
669 fetch c_grp_usage2 into r_grp_usage;
670 while(c_grp_usage2%found)
671 loop
672 open c_grp_sec(r_grp_usage.group_id);
673 fetch c_grp_sec into r_grp;
674 if(c_grp_sec%found)
675 then
676 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
677 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
678 IF (g_DFF_to_be_displayed)
679 THEN
680 get_DFF_output
681 ( r_grp.ATTRIBUTE_CATEGORY,
682 r_grp.ATTRIBUTE1,
683 r_grp.ATTRIBUTE2,
684 r_grp.ATTRIBUTE3,
685 r_grp.ATTRIBUTE4,
686 r_grp.ATTRIBUTE5,
687 r_grp.ATTRIBUTE6,
688 r_grp.ATTRIBUTE7,
689 r_grp.ATTRIBUTE8,
690 r_grp.ATTRIBUTE9,
691 r_grp.ATTRIBUTE10,
692 r_grp.ATTRIBUTE11,
693 r_grp.ATTRIBUTE12,
694 r_grp.ATTRIBUTE13,
695 r_grp.ATTRIBUTE14,
696 r_grp.ATTRIBUTE15,
697 0
698 );
699 END IF;
700 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
701 end if;
702 l_prev_group := r_grp.group_name;
703
704
705 while (c_grp_sec%FOUND)
706 loop
707 if (l_prev_group <> r_grp.group_name)
708 then
709 fnd_file.new_line(fnd_file.log, 3);
710 fnd_file.put_line(fnd_file.log,'Group name: '||r_grp.group_name);
711 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
712 IF (g_DFF_to_be_displayed)
713 THEN
714 get_DFF_output
715 ( r_grp.ATTRIBUTE_CATEGORY,
716 r_grp.ATTRIBUTE1,
717 r_grp.ATTRIBUTE2,
718 r_grp.ATTRIBUTE3,
719 r_grp.ATTRIBUTE4,
720 r_grp.ATTRIBUTE5,
721 r_grp.ATTRIBUTE6,
722 r_grp.ATTRIBUTE7,
723 r_grp.ATTRIBUTE8,
724 r_grp.ATTRIBUTE9,
725 r_grp.ATTRIBUTE10,
726 r_grp.ATTRIBUTE11,
727 r_grp.ATTRIBUTE12,
728 r_grp.ATTRIBUTE13,
729 r_grp.ATTRIBUTE14,
730 r_grp.ATTRIBUTE15,
731 0
732 );
733 END IF;
734 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
735 end if;
736
737 if(r_grp.moved = 'OUT')
738 then
739 open to_grp_cur( r_grp.group_id,
740 r_grp.resource_id) ;
741 fetch to_grp_cur into to_grp_rec;
742 l_to_grp_number := to_grp_rec.group_number;
743 l_to_grp_name := to_grp_rec.group_name;
744 close to_grp_cur;
745 else
746 l_to_grp_number := null;
747 l_to_grp_name := null;
748 end if;
749
750 fnd_file.put_line(fnd_file.log,rpad(' Resource Name: ',27, ' ')||r_grp.resource_name);
751 fnd_file.put_line(fnd_file.log,rpad(' Resource Number: ',27, ' ')||r_grp.resource_number);
752 fnd_file.put_line(fnd_file.log,rpad(' Category: ',27, ' ')||r_grp.category_name);
753 fnd_file.put_line(fnd_file.log,rpad(' Date: ',27, ' ')||r_grp.creation_date);
754 fnd_file.put_line(fnd_file.log,rpad(' Updated By: ',27, ' ')||r_grp.created_by);
755 fnd_file.put_line(fnd_file.log,rpad(' Action: ',27, ' ')||r_grp.moved);
756 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group #:',27, ' ')||r_grp.from_group_number);
757 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group Name:',27, ' ')||r_grp.from_group_name);
758 --fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||r_grp.to_group_number);
759 --fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||r_grp.to_group_name);
760 fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',27, ' ')||l_to_grp_number);
761 fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',27, ' ')||l_to_grp_name);
762 l_prev_group := r_grp.group_name;
763 fnd_file.new_line(fnd_file.log, 1);
764 fetch c_grp_sec into r_grp;
765
766 end loop; -- end of if
767 close c_grp_sec;
768
769 --call drill down
770 child_groups(r_grp_usage.group_id,
771 p_usr_name,
772 l_start_date,
773 l_end_date,
774 p_usage);
775
776
777 fetch c_grp_usage2 into r_grp_usage;
778 end loop;
779 close c_grp_usage2;
780 end if; --end of group_id check
781 ELSIF(l_rep_type = 'RESOURCE')
782 THEN
783 open c_res;
784 fetch c_res into r_res;
785 if(c_res%found)
786 then
787 fnd_file.put_line(fnd_file.log,'Resource: '||r_res.resource_name);
788 fnd_file.put_line(fnd_file.log,'Resource Number: '||r_res.resource_number);
789 fnd_file.put_line(fnd_file.log,'Category: '||r_res.category_name);
790 fnd_file.put_line(fnd_file.log,rpad(' Group name: ',27,' ')||r_res.group_name);
791 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
792 IF (g_DFF_to_be_displayed)
793 THEN
794 get_DFF_output
795 ( r_res.ATTRIBUTE_CATEGORY,
796 r_res.ATTRIBUTE1,
797 r_res.ATTRIBUTE2,
798 r_res.ATTRIBUTE3,
799 r_res.ATTRIBUTE4,
800 r_res.ATTRIBUTE5,
801 r_res.ATTRIBUTE6,
802 r_res.ATTRIBUTE7,
803 r_res.ATTRIBUTE8,
804 r_res.ATTRIBUTE9,
805 r_res.ATTRIBUTE10,
806 r_res.ATTRIBUTE11,
807 r_res.ATTRIBUTE12,
808 r_res.ATTRIBUTE13,
809 r_res.ATTRIBUTE14,
810 r_res.ATTRIBUTE15,
811 1
812 );
813 END IF;
814 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
815 else
816 fnd_file.put_line(fnd_file.log,'No values found based on your criterion');
817 end if;
818 l_prev_group := r_res.group_name;
819 while (c_res%FOUND)
820 loop
821 if (l_prev_group <> r_res.group_name)
822 then
823 fnd_file.new_line(fnd_file.log, 3);
824 fnd_file.put_line(fnd_file.log,rpad(' Group name: ',27,' ')||r_res.group_name);
825 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
826 IF (g_DFF_to_be_displayed)
827 THEN
828 get_DFF_output
829 ( r_res.ATTRIBUTE_CATEGORY,
830 r_res.ATTRIBUTE1,
831 r_res.ATTRIBUTE2,
832 r_res.ATTRIBUTE3,
833 r_res.ATTRIBUTE4,
834 r_res.ATTRIBUTE5,
835 r_res.ATTRIBUTE6,
836 r_res.ATTRIBUTE7,
837 r_res.ATTRIBUTE8,
838 r_res.ATTRIBUTE9,
839 r_res.ATTRIBUTE10,
840 r_res.ATTRIBUTE11,
841 r_res.ATTRIBUTE12,
842 r_res.ATTRIBUTE13,
843 r_res.ATTRIBUTE14,
844 r_res.ATTRIBUTE15,
845 2
846 );
847 END IF;
848 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
849 end if;
850 fnd_file.put_line(fnd_file.log,rpad(' Date: ',29, ' ')||r_res.creation_date);
851 fnd_file.put_line(fnd_file.log,rpad(' Updated By: ',29, ' ')||r_res.created_by);
852 fnd_file.put_line(fnd_file.log,rpad(' Action: ',29, ' ')||r_res.moved);
853 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group #:',29, ' ')||r_res.from_group_number);
854 fnd_file.put_line(fnd_file.log,rpad(' Moved From Group Name:',29, ' ')||r_res.from_group_name);
855 fnd_file.put_line(fnd_file.log,rpad(' Moved To Group #:',29, ' ')||r_res.to_group_number);
856 fnd_file.put_line(fnd_file.log,rpad(' Moved to Group Name: ',29, ' ')||r_res.to_group_name);
857 l_prev_group := r_res.group_name;
858 fnd_file.new_line(fnd_file.log, 1);
859 fetch c_res into r_res;
860
861 end loop; -- end of if
862 close c_res;
863
864 END IF;
865 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
866 IF (g_DFF_to_be_displayed <> FALSE)
867 THEN
868 all_segment_details_tab.delete;
869 g_DFF_to_be_displayed := FALSE;
870 g_DFF_prompt_max_length := 0;
871 END IF;
872 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
873 exception
874 when others then
875 fnd_file.put_line(fnd_file.log,sqlerrm);
876 end query_group;
877
878 /* This procedure traverse recursively thru the child
879 hierarchy of a group and populates g_child_tab table with
880 records which are within the date range. This procedure
881 emulates the connect by prior cursor for finding parent groups. */
882 PROCEDURE POPULATE_CHILD_TABLE(P_GROUP_ID IN NUMBER,
883 P_GREATEST_START_DATE IN DATE,
884 P_LEAST_END_DATE IN DATE,
885 P_LEVEL IN NUMBER)
886 IS
887 CURSOR c_children (l_g_miss_date DATE)
888 IS
889 SELECT rel.group_id,
890 rel.related_group_id,
891 trunc(greatest(rel.start_date_active,
892 nvl(p_greatest_start_date, rel.start_date_active))) greatest_start_date,
893 /* Logic : end_date_active, p_least_end_date
894 NULL , NULL = NULL
895 NULL , Value = Value
896 Value , NULL = Value
897 Value1 , Value2 = least(value1, value2) */
898 trunc(least(nvl(rel.end_date_active, p_least_end_date),
899 nvl(p_least_end_date, rel.end_date_active))) least_end_date,
900 start_date_active relation_start_date,
901 end_date_active relation_end_date
902 FROM jtf_rs_grp_relations rel
903 WHERE relation_type = 'PARENT_GROUP'
904 AND rel.related_group_id = p_group_id
905 AND NVL(rel.delete_flag, 'N') <> 'Y'
906 /*
907 mugsrin:
908 Modified the following lines to comply with GSCC standard
909 Original:
910 AND least(nvl(end_date_active, to_date(l_g_miss_date)),
911 nvl(p_least_end_date, to_date(l_g_miss_date))) >=
912 Modified as given below:
913 */
914 AND least(nvl(end_date_active, to_date(to_char(l_g_miss_date,'DD-MM-RRRR'),'DD-MM-RRRR')),
915 nvl(p_least_end_date, to_date(to_char(l_g_miss_date,'DD-MM-RRRR'),'DD-MM-RRRR'))) >=
916 trunc(greatest(start_date_active,nvl(p_greatest_start_date, start_date_active)));
917
918 i INTEGER := 0;
919 BEGIN
920 FOR r_child IN c_children(FND_API.G_MISS_DATE) LOOP
921 i := g_child_tab.COUNT+1;
922 g_child_tab(i).p_group_id := r_child.group_id;
923 g_child_tab(i).p_related_group_id := r_child.related_group_id;
924 g_child_tab(i).p_start_date_active := r_child.greatest_start_date;
925 g_child_tab(i).p_end_date_active := r_child.least_end_date;
926 g_child_tab(i).p_relation_start_date := r_child.relation_start_date;
927 g_child_tab(i).p_relation_end_date := r_child.relation_end_date;
928 g_child_tab(i).level := p_level;
929 populate_child_table(g_child_tab(i).p_group_id,
930 g_child_tab(i).p_start_date_active,
931 g_child_tab(i).p_end_date_active,
932 p_level+1);
933 END LOOP;
934 END;
935
936 /* This procedure traverse recursively thru the child
937 hierarchy of a group and populates g_child_tab table with
938 records which are within the date range. This procedure
939 emulates the connect by prior cursor for finding parent groups. */
940 PROCEDURE POPULATE_CHILD_TABLE(P_GROUP_ID IN NUMBER)
941 IS
942 BEGIN
943 g_child_tab.delete;
944 populate_child_table(p_group_id, null, null, 1);
945 END;
946
947 /*
948 Added P_DISP_ROLE parameter vide Bug# 1745032
949 */
950
951 PROCEDURE query_group_hierarchy(ERRBUF OUT NOCOPY VARCHAR2,
952 RETCODE OUT NOCOPY VARCHAR2,
953 P_GROUP_NAME IN VARCHAR2 ,
954 P_DISP_ROLE IN VARCHAR2 )
955 is
956 begin
957 query_group_hierarchy (ERRBUF, RETCODE, P_GROUP_NAME, P_DISP_ROLE, 'N');
958 end;
959
960 /*
961 * Procedure overloaded to give user choice to display DFF fields in the report.
962 * While submitting the concurrent request, The user may choose to display DFF fields in the report.
963 * Ref: ER# 2549463
964 */
965 PROCEDURE query_group_hierarchy(ERRBUF OUT NOCOPY VARCHAR2,
966 RETCODE OUT NOCOPY VARCHAR2,
967 P_GROUP_NAME IN VARCHAR2 ,
968 P_DISP_ROLE IN VARCHAR2,
969 P_DISP_DFF_FIELDS IN VARCHAR2 )
970 is
971
972 cursor group_id_cur
973 is
974 select group_id,
975 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
976 attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8,
977 attribute9, attribute10, attribute11, attribute12, attribute13, attribute14, attribute15
978 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
979 from jtf_rs_groups_vl
980 where group_name = p_group_name;
981 group_id_rec group_id_cur%rowtype;
982
983 cursor child_dtls_cur(l_group_id number)
984 is
985 select group_name,
986 start_date_active,
987 end_date_active,
988 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
989 attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7,
990 attribute8, attribute9, attribute10, attribute11, attribute12, attribute13, attribute14, attribute15
991 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
992 from jtf_rs_groups_vl
993 where group_id = l_group_id;
994
995 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
996 child_dtls_rec child_dtls_cur%rowtype;
997 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
998
999 /* Begin of Change - Bug # 1745032 */
1000 /*
1001 cursor members_cur(l_group_id number)
1002 is
1003 select mem.resource_id,
1004 res.resource_name,
1005 obj.name category_name
1006 from jtf_rs_group_members mem,
1007 jtf_rs_resource_extns_vl res,
1008 jtf_objects_vl obj
1009 where mem.group_id = l_group_id
1010 and nvl(mem.delete_flag, 'N') <> 'Y'
1011 and mem.resource_id = res.resource_id
1012 and res.category = obj.object_code;
1013 */
1014
1015 cursor members_cur(l_group_id number)
1016 is
1017 select mem.resource_id,
1018 res.resource_name,
1019 rol.role_name,
1020 obj.name category_name,
1021 rol.res_rl_start_date,
1022 rol.res_rl_end_date
1023 from jtf_rs_group_members mem,
1024 jtf_rs_resource_extns_vl res,
1025 jtf_rs_defresroles_vl rol,
1026 jtf_objects_vl obj
1027 where mem.group_id = l_group_id
1028 and nvl(mem.delete_flag, 'N') <> 'Y'
1029 and mem.resource_id = res.resource_id
1030 and mem.group_member_id = rol.role_resource_id(+)
1031 and rol.role_resource_type(+) = 'RS_GROUP_MEMBER'
1032 and nvl(rol.delete_flag, 'N') <> 'Y'
1033 -- and trunc(sysdate) between nvl(rol.res_rl_start_date(+),sysdate) and nvl(rol.res_rl_end_date(+),sysdate)
1034 and res.category = obj.object_code;
1035
1036 /* End of Change - Bug# 1745032 */
1037
1038 members_rec members_cur%rowtype;
1039 l_group_id number;
1040 l_role_name jtf_rs_roles_vl.role_name%TYPE;
1041 l_sysdate DATE;
1042
1043 l_child_tab rel_table;
1044
1045 begin
1046
1047 l_sysdate := TRUNC(SYSDATE);
1048
1049 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1050 /*
1051 * If the user chooses to display the DFFs AND the DFF definition is frozen
1052 * Cache the segment details in a local table.
1053 */
1054 IF (P_DISP_DFF_FIELDS = 'Y')
1055 THEN
1056 OPEN c_DFF_frozen;
1057 FETCH c_DFF_frozen INTO r_DFF_frozen;
1058 IF(c_DFF_frozen%found)
1059 THEN
1060 g_DFF_to_be_displayed := TRUE;
1061 all_segment_details_tab.delete;
1062 populate_segment_details_table('JTF', 'JTF_RS_GROUPS');
1063 END IF;
1064 CLOSE c_DFF_frozen;
1065 END IF;
1066 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1067 open group_id_cur;
1068 fetch group_id_cur into group_id_rec;
1069 while(group_id_cur%found)
1070 loop
1071 fnd_file.put_line(fnd_file.log,'Group name: '||p_group_name);
1072 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1073 IF (g_DFF_to_be_displayed)
1074 THEN
1075 get_DFF_output
1076 ( group_id_rec.ATTRIBUTE_CATEGORY,
1077 group_id_rec.ATTRIBUTE1,
1078 group_id_rec.ATTRIBUTE2,
1079 group_id_rec.ATTRIBUTE3,
1080 group_id_rec.ATTRIBUTE4,
1081 group_id_rec.ATTRIBUTE5,
1082 group_id_rec.ATTRIBUTE6,
1083 group_id_rec.ATTRIBUTE7,
1084 group_id_rec.ATTRIBUTE8,
1085 group_id_rec.ATTRIBUTE9,
1086 group_id_rec.ATTRIBUTE10,
1087 group_id_rec.ATTRIBUTE11,
1088 group_id_rec.ATTRIBUTE12,
1089 group_id_rec.ATTRIBUTE13,
1090 group_id_rec.ATTRIBUTE14,
1091 group_id_rec.ATTRIBUTE15,
1092 0
1093 );
1094 END IF;
1095 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1096 l_group_id := group_id_rec.group_id;
1097 -- get members
1098 open members_cur(l_group_id);
1099 fetch members_cur into members_rec;
1100 while(members_cur%found)
1101 loop
1102 --print members
1103 fnd_file.put_line(fnd_file.log,rpad(' Member :',15,' ') ||members_rec.resource_name);
1104 /* Begin of Add - Bug# 1745032 */
1105 if (p_disp_role ='Y') then
1106 l_role_name := members_rec.role_name;
1107 if members_rec.res_rl_start_date IS NOT NULL THEN
1108 if (l_sysdate NOT BETWEEN members_rec.res_rl_start_date
1109 AND NVL (members_rec.res_rl_end_date, l_sysdate)) THEN
1110 l_role_name := NULL;
1111 end if;
1112 end if;
1113 fnd_file.put_line(fnd_file.log,rpad(' Role :',15,' ') ||l_role_name);
1114 end if;
1115 /* End of Add - Bug# 1745032 */
1116 fnd_file.put_line(fnd_file.log,rpad(' Category :',15,' ') ||members_rec.category_name);
1117
1118 fetch members_cur into members_rec;
1119 end loop;
1120 close members_cur;
1121
1122 populate_child_table(l_group_id);
1123 l_child_tab := g_child_tab;
1124
1125 FOR I IN 1 .. l_child_tab.COUNT
1126 LOOP
1127 open child_dtls_cur(l_child_tab(i).p_group_id);
1128 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1129 fetch child_dtls_cur into child_dtls_rec;
1130 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1131
1132 --get group name etc
1133 fnd_file.put_line(fnd_file.log,rpad(' Child Group name: ',27, ' ')||child_dtls_rec.group_name);
1134 fnd_file.put_line(fnd_file.log,rpad(' Level : ',27, ' ')||l_child_tab(i).level);
1135 fnd_file.put_line(fnd_file.log,rpad(' Effective : ',27, ' ')||l_child_tab(i).p_relation_start_date ||' -- '||l_child_tab(i).p_relation_end_date);
1136 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1137 IF (g_DFF_to_be_displayed)
1138 THEN
1139 get_DFF_output
1140 ( child_dtls_rec.ATTRIBUTE_CATEGORY,
1141 child_dtls_rec.ATTRIBUTE1,
1142 child_dtls_rec.ATTRIBUTE2,
1143 child_dtls_rec.ATTRIBUTE3,
1144 child_dtls_rec.ATTRIBUTE4,
1145 child_dtls_rec.ATTRIBUTE5,
1146 child_dtls_rec.ATTRIBUTE6,
1147 child_dtls_rec.ATTRIBUTE7,
1148 child_dtls_rec.ATTRIBUTE8,
1149 child_dtls_rec.ATTRIBUTE9,
1150 child_dtls_rec.ATTRIBUTE10,
1151 child_dtls_rec.ATTRIBUTE11,
1152 child_dtls_rec.ATTRIBUTE12,
1153 child_dtls_rec.ATTRIBUTE13,
1154 child_dtls_rec.ATTRIBUTE14,
1155 child_dtls_rec.ATTRIBUTE15,
1156 6
1157 );
1158 END IF;
1159 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1160 close child_dtls_cur;
1161
1162 -- get members
1163 open members_cur(l_child_tab(i).p_group_id);
1164 fetch members_cur into members_rec;
1165 while(members_cur%found)
1166 loop
1167 --print members
1168 fnd_file.put_line(fnd_file.log,rpad(' Member :',20,' ') ||members_rec.resource_name);
1169 /* Begin of Add - Bug# 1745032 */
1170 if (p_disp_role ='Y') then
1171 fnd_file.put_line(fnd_file.log,rpad(' Role :',20,' ') ||members_rec.role_name);
1172 end if;
1173 /* End of Add - Bug# 1745032 */
1174 fnd_file.put_line(fnd_file.log,rpad(' Category :',20,' ') ||members_rec.category_name);
1175
1176 fetch members_cur into members_rec;
1177 end loop;
1178 close members_cur;
1179 end loop; -- end of FOR loop
1180 fetch group_id_cur into group_id_rec;
1181 end loop;
1182 close group_id_cur;
1183 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1184 IF (g_DFF_to_be_displayed <> FALSE)
1185 THEN
1186 all_segment_details_tab.delete;
1187 g_DFF_to_be_displayed := FALSE;
1188 g_DFF_prompt_max_length := 0;
1189 END IF;
1190 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1191 end query_group_hierarchy;
1192
1193 procedure child_groups(p_group_id in number,
1194 p_usr_name in varchar2,
1195 p_start_date in date,
1196 p_end_date in date,
1197 p_usage in varchar2)
1198 is
1199
1200 CURSOR c_date(x_group_id JTF_RS_GROUPS_VL.GROUP_ID%TYPE)
1201 IS
1202 SELECT grp.start_date_active,
1203 grp.end_date_active
1204 FROM jtf_rs_groups_b grp
1205 WHERE grp.group_id = x_group_id;
1206
1207 cursor c_check_usage(l_group_id number,
1208 l_usage varchar2)
1209 is
1210 select usg.usage
1211 from jtf_rs_group_usages usg
1212 where usg.usage = l_usage
1213 and usg.group_id = l_group_id;
1214
1215
1216 r_check_usage c_check_usage%rowtype;
1217
1218 cursor c_grp_child(l_group_id number,
1219 l_usr_name varchar2,
1220 l_start_date date,
1221 l_end_date date)
1222 is
1223 select /*+ INDEX(gm jtf_rs_group_members_aud_nu3) */ g1.group_name,
1224 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1225 g1.attribute_category, g1.attribute1, g1.attribute2, g1.attribute3, g1.attribute4, g1.attribute5, g1.attribute6, g1.attribute7, g1.attribute8,
1226 g1.attribute9, g1.attribute10, g1.attribute11, g1.attribute12, g1.attribute13, g1.attribute14, g1.attribute15,
1227 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1228 ext.resource_number,
1229 ext.resource_name,
1230 ext.category,
1231 lkp.name category_name,
1232 to_char(gm.creation_date, 'DD-MON-YYYY:HH24:MI:SS') creation_date,
1233 fnd.user_name created_by,
1234 decode(gm.old_group_id, g1.group_id, 'OUT', 'IN') moved,
1235 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_number ) from_group_number,
1236 decode(gm.old_group_id, null, null, g1.group_id,null, g3.group_name ) from_group_name,
1237 decode(gm.old_group_id, g1.group_id, g2.group_number, null) to_group_number,
1238 decode(gm.old_group_id, g1.group_id, g2.group_name, null) to_group_name,
1239 ext.resource_id,
1240 g1.group_id
1241 from
1242 jtf_rs_groups_vl g2,
1243 jtf_rs_groups_vl g3,
1244 jtf_rs_resource_extns_vl ext,
1245 jtf_objects_vl lkp ,
1246 fnd_user fnd,
1247 jtf_rs_group_members_aud gm,
1248 jtf_rs_group_members mem,
1249 jtf_rs_groups_vl g1
1250 where g1.group_id = l_group_id
1251 and mem.group_id = g1.group_id
1252 and gm.group_member_id = mem.group_member_id
1253 and ( gm.new_group_id = g1.group_id
1254 or gm.old_group_id = g1.group_id )
1255 and gm.creation_date between nvl(l_start_date,sysdate)
1256 and nvl(l_end_date,sysdate)
1257 and gm.new_group_id = g2.group_id(+)
1258 and gm.old_group_id = g3.group_id(+)
1259 and fnd.user_name like nvl(l_usr_name, '%')
1260 and fnd.user_id = gm.created_by
1261 and mem.resource_id = ext.resource_id
1262 and ext.category = lkp.object_code
1263 order by g1.group_name , resource_name, gm.creation_date , fnd.user_name;
1264
1265 r_grp_child c_grp_child%rowtype;
1266
1267 l_child_tab rel_table;
1268
1269 i BINARY_INTEGER := 0;
1270 j BINARY_INTEGER := 0;
1271
1272 cursor to_grp_cur(l_group_id number,
1273 l_resource_id number)
1274 is
1275 select gm.group_member_id,
1276 g1.group_id,
1277 g1.group_name,
1278 g1.group_number
1279 from jtf_rs_group_members_aud gm,
1280 jtf_rs_groups_vl g1
1281 where gm.old_group_id = l_group_id
1282 and gm.new_resource_id = l_resource_id
1283 and g1.group_id = gm.new_group_id;
1284
1285 to_grp_rec to_grp_cur%rowtype;
1286 l_to_grp_number jtf_rs_groups_vl.group_number%type;
1287 l_to_grp_name jtf_rs_groups_vl.group_name%type;
1288
1289 --Declare the variables
1290 --
1291 l_api_version CONSTANT NUMBER :=1.0;
1292
1293 /* Moved the initial assignment of below variable to inside begin */
1294 l_immediate_parent_flag VARCHAR2(1);
1295 l_date Date;
1296 l_user_id Number;
1297 l_login_id Number;
1298 l_start_date Date;
1299 l_end_date Date;
1300 /* Moved the initial assignment of below variable to inside begin */
1301 l_return_status varchar2(1);
1302 l_msg_count number;
1303 l_msg_data varchar2(2000);
1304
1305 l_usage_found number := 1;
1306
1307
1308 l_indent number := 0;
1309
1310
1311 BEGIN
1312
1313 l_immediate_parent_flag := 'N';
1314 l_return_status := fnd_api.g_ret_sts_success;
1315
1316 -- if no group id is passed in then raise error
1317 IF p_group_id IS NOT NULL
1318 THEN
1319
1320 --fetch the start date and the end date for the group
1321 OPEN c_date(p_group_id);
1322 FETCH c_date INTO l_start_date, l_end_date;
1323 CLOSE c_date;
1324
1325
1326
1327 --get all the child groups for this group
1328
1329 POPULATE_CHILD_TABLE(p_group_id, l_start_date, l_end_date, 1);
1330 l_child_tab := g_child_tab;
1331
1332 FOR I IN 1 .. l_child_tab.COUNT
1333 LOOP
1334
1335
1336 --assign start date and end date for which this relation is valid
1337
1338 l_usage_found := 1;
1339 if(p_usage is not null)
1340 then
1341 open c_check_usage(l_child_tab(i).p_group_id,
1342 p_usage);
1343 fetch c_check_usage into r_check_usage;
1344 if(c_check_usage%found)
1345 then
1346 l_usage_found := 1;
1347 else
1348 l_usage_found := 0;
1349 end if;
1350 close c_check_usage;
1351 end if;
1352
1353
1354 if(
1355 (l_usage_found = 1)
1356 )
1357 THEN
1358 --get audit report
1359
1360 open c_grp_child(l_child_tab(i).p_group_id,
1361 p_usr_name,
1362 p_start_date,
1363 p_end_date);
1364
1365 fetch c_grp_child into r_grp_child;
1366 if(c_grp_child%found)
1367 then
1368 l_indent := l_child_tab(i).level * 3 + 15;
1369 fnd_file.put_line(fnd_file.log,lpad('Group name: ',l_indent,' ')||r_grp_child.group_name);
1370 --<Start> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1371 IF (g_DFF_to_be_displayed)
1372 THEN
1373 get_DFF_output
1374 ( r_grp_child.ATTRIBUTE_CATEGORY,
1375 r_grp_child.ATTRIBUTE1,
1376 r_grp_child.ATTRIBUTE2,
1377 r_grp_child.ATTRIBUTE3,
1378 r_grp_child.ATTRIBUTE4,
1379 r_grp_child.ATTRIBUTE5,
1380 r_grp_child.ATTRIBUTE6,
1381 r_grp_child.ATTRIBUTE7,
1382 r_grp_child.ATTRIBUTE8,
1383 r_grp_child.ATTRIBUTE9,
1384 r_grp_child.ATTRIBUTE10,
1385 r_grp_child.ATTRIBUTE11,
1386 r_grp_child.ATTRIBUTE12,
1387 r_grp_child.ATTRIBUTE13,
1388 r_grp_child.ATTRIBUTE14,
1389 r_grp_child.ATTRIBUTE15,
1390 l_indent - 12
1391 );
1392 END IF;
1393 --<End> Introduced for incorporating reporting of DFF fields Ref: ER# 2549463
1394 --fnd_file.put_line(fnd_file.log,'Level: '||l_child_tab(i).level);
1395
1396 end if;
1397 while (c_grp_child%FOUND)
1398 loop
1399 if(r_grp_child.moved = 'OUT')
1400 then
1401 open to_grp_cur( r_grp_child.group_id,
1402 r_grp_child.resource_id) ;
1403 fetch to_grp_cur into to_grp_rec;
1404 l_to_grp_number := to_grp_rec.group_number;
1405 l_to_grp_name := to_grp_rec.group_name;
1406 close to_grp_cur;
1407 else
1408 l_to_grp_number := null;
1409 l_to_grp_name := null;
1410 end if;
1411
1412 fnd_file.put_line(fnd_file.log,lpad(rpad(' Resource Name: ',27, ' '),15+l_indent, ' ')||r_grp_child.resource_name);
1413 fnd_file.put_line(fnd_file.log,lpad(rpad(' Resource Number: ',27, ' '),15+l_indent, ' ')||r_grp_child.resource_number);
1414 fnd_file.put_line(fnd_file.log,lpad(rpad(' Category: ',27, ' '),15+l_indent, ' ')||r_grp_child.category_name);
1415 fnd_file.put_line(fnd_file.log,lpad(rpad(' Date: ',27, ' '),15+l_indent, ' ')||r_grp_child.creation_date);
1416 fnd_file.put_line(fnd_file.log,lpad(rpad(' Updated By: ',27, ' '),15+l_indent, ' ')||r_grp_child.created_by);
1417 fnd_file.put_line(fnd_file.log,lpad(rpad(' Action: ',27, ' '),15+l_indent, ' ')||r_grp_child.moved);
1418 fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved From Group #:',27, ' '),15+l_indent, ' ')||r_grp_child.from_group_number);
1419 fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved From Group Name:',27, ' '),15+l_indent, ' ')||r_grp_child.from_group_name);
1420 -- fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved To Group #:',27, ' '),15+l_indent, ' ')||r_grp_child.to_group_number);
1421 -- fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved to Group Name: ',27, ' '),15+l_indent, ' ')||r_grp_child.to_group_name);
1422 fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved To Group #:',27, ' '),15+l_indent,' ')||l_to_grp_number);
1423 fnd_file.put_line(fnd_file.log,lpad(rpad(' Moved to Group Name: ',27, ' '),15+l_indent,' ')||l_to_grp_name);
1424 fnd_file.new_line(fnd_file.log, 1);
1425 fetch c_grp_child into r_grp_child;
1426
1427 end loop; -- end of if
1428 close c_grp_child;
1429
1430 END IF; -- end of start date < end date check
1431
1432 END LOOP;
1433
1434 END IF; -- end of group_id not cull check
1435 end child_groups;
1436 end jtf_rs_group_report_pub;