[Home] [Help]
PACKAGE BODY: APPS.JTF_RS_GROUP_RELATE_VUHK
Source
1 PACKAGE BODY jtf_rs_group_relate_vuhk AS
2 /* $Header: cnirsgrb.pls 120.2 2005/08/04 15:12:41 mblum noship $ */
3
4 -- variables to pass the values from update_res_group_relate_pre to update_res_group_relate_post
5 G_PKG_NAME VARCHAR2(30) := 'JTF_RS_GROUP_RELATE_VUHK';
6 g_event_log_id NUMBER;
7 g_start_date_old DATE;
8 g_end_date_old DATE;
9 g_group_id NUMBER;
10
11 -- helper procedure for the MOAC session context
12 PROCEDURE restore_context(p_acc_mode VARCHAR2,
13 p_org_id NUMBER) IS
14 BEGIN
15 IF p_acc_mode IS NOT NULL then
16 mo_global.set_policy_context(p_acc_mode, p_org_id);
17 END IF;
18 END restore_context;
19
20
21 PROCEDURE create_res_group_relate_pre
22 (P_GROUP_ID IN JTF_RS_GROUPS_B.GROUP_ID%TYPE,
23 P_RELATED_GROUP_ID IN JTF_RS_GRP_RELATIONS.RELATED_GROUP_ID%TYPE,
24 P_RELATION_TYPE IN JTF_RS_GRP_RELATIONS.RELATION_TYPE%TYPE,
25 P_START_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.START_DATE_ACTIVE%TYPE,
26 P_END_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.END_DATE_ACTIVE%TYPE DEFAULT NULL,
27 P_DATA OUT NOCOPY VARCHAR2,
28 P_COUNT OUT NOCOPY NUMBER,
29 P_RETURN_CODE OUT NOCOPY VARCHAR2
30 ) IS
31 BEGIN
32 p_return_code := fnd_api.g_ret_sts_success;
33 END create_res_group_relate_pre;
34
35
36 PROCEDURE update_res_group_relate_pre
37 (P_GROUP_RELATE_ID IN JTF_RS_GRP_RELATIONS.GROUP_RELATE_ID%TYPE,
38 P_START_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.START_DATE_ACTIVE%TYPE DEFAULT FND_API.G_MISS_DATE,
39 P_END_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.END_DATE_ACTIVE%TYPE DEFAULT FND_API.G_MISS_DATE,
40 P_OBJECT_VERSION_NUM IN JTF_RS_GRP_RELATIONS.OBJECT_VERSION_NUMBER%TYPE,
41 P_DATA OUT NOCOPY VARCHAR2,
42 P_COUNT OUT NOCOPY NUMBER,
43 P_RETURN_CODE OUT NOCOPY VARCHAR2
44 ) IS
45 l_start_date DATE;
46 l_end_date DATE;
47 l_group_name VARCHAR2(60);
48 l_action_link_id NUMBER;
49 l_roll_action_link_id NUMBER;
50 l_srp cn_rollup_pvt.srp_group_rec_type;
51 l_srp_tbl cn_rollup_pvt.srp_group_tbl_type;
52 l_return_status VARCHAR2(30);
53 l_msg_count NUMBER;
54 l_msg_data VARCHAR2(256);
55 l_api_name VARCHAR2(30) := 'update_res_group_relate_pre';
56 -- clku, fix max date
57 l_max_date CONSTANT DATE := to_date('31-12-9999','DD-MM-YYYY');
58
59 l_orig_org_id NUMBER;
60 l_orig_acc_mode VARCHAR2(1);
61
62
63 -- cursor to get the usage code of the group identified by p_group_id
64 -- Do we need to make sure that the related group is also used by OSC
65 CURSOR group_info IS
66 SELECT r.start_date_active, r.end_date_active, r.group_id
67 FROM jtf_rs_group_usages u,
68 jtf_rs_grp_relations r
69 WHERE r.group_relate_id = p_group_relate_id
70 AND u.group_id = r.group_id AND u.usage = 'SALES_COMP';
71
72 -- cursor to get the name of the group identified by p_group_id
73 CURSOR group_name IS
74 SELECT name
75 FROM cn_comp_groups
76 WHERE comp_group_id = g_group_id;
77
78 -- cursor to find all periods in the date range for each srp
79 CURSOR periods(p_salesrep_id NUMBER, p_start_date DATE, p_end_date DATE) IS
80 SELECT p.period_id,
81 greatest(p_start_date, p.start_date) start_date,
82 Decode(p_end_date, NULL, p.end_date, Least(p_end_date, p.end_date)) end_date
83 FROM cn_srp_intel_periods p
84 WHERE p.salesrep_id = p_salesrep_id
85 AND (p_end_date IS NULL OR p.start_date <= p_end_date)
86 AND (p.end_date >= p_start_date);
87
88 --- get the reps who belong to the group
89 CURSOR srp_group_team_csr (p_salesrep_id NUMBER, p_group_id NUMBER, p_start_date DATE, p_end_date DATE)IS
90 select distinct ct.name name,
91 ct.comp_team_id team_id,
92 greatest(p_start_date, cg.start_date_active, ct.start_date_active) start_date,
93 least(nvl(ct.end_date_active, l_max_date), nvl(cg.end_date_active, l_max_date), nvl(p_end_date, l_max_date)) end_date
94 from cn_srp_comp_teams_v srt, cn_comp_teams ct, cn_srp_comp_groups_v cg
95 where (p_salesrep_id IS NULL or srt.salesrep_id = p_salesrep_id)
96 and (p_salesrep_id IS NULL or cg.salesrep_id = p_salesrep_id)
97 and cg.comp_group_id = p_group_id
98 and srt.comp_team_id = ct.comp_team_id
99 and (cg.start_date_active <= ct.start_date_active
100 or cg.start_date_active between ct.start_date_active and nvl (ct.end_date_active, cg.start_date_active))
101 and nvl(cg.end_date_active, ct.start_date_active) >= ct.start_date_active
102 and (cg.end_date_active IS NULL OR p_start_date <= cg.end_date_active)
103 and (p_end_date IS NULL OR p_end_date >= cg.start_date_active);
104
105 CURSOR get_orgs IS
106 SELECT org_id FROM cn_repositories_all WHERE status = 'A';
107 BEGIN
108 p_return_code := fnd_api.g_ret_sts_success;
109
110 IF fnd_profile.value('CN_MARK_EVENTS') <> 'Y' THEN
111 RETURN;
112 END IF;
113
114 -- store MOAC session info in local variables
115 l_orig_org_id := mo_global.get_current_org_id;
116 l_orig_acc_mode := mo_global.get_access_mode;
117
118 -- loop through orgs
119 FOR o IN get_orgs LOOP
120 mo_global.set_policy_context('S', o.org_id);
121
122 -- reset g_group_id to null before trying to set it to another value.
123 g_group_id := NULL;
124
125 OPEN group_info;
126 FETCH group_info INTO g_start_date_old, g_end_date_old, g_group_id;
127 IF (group_info%notfound) THEN
128 CLOSE group_info;
129 ELSE
130 CLOSE group_info;
131
132 OPEN group_name;
133 FETCH group_name INTO l_group_name;
134 IF (group_name%notfound) THEN
135 CLOSE group_name;
136 ELSE
137 CLOSE group_name;
138
139 cn_mark_events_pkg.log_event
140 ( p_event_name => 'CHANGE_CP_HIER_DATE',
141 p_object_name => l_group_name,
142 p_object_id => g_group_id,
143 p_start_date => p_start_date_active,
144 p_start_date_old => g_start_date_old,
145 p_end_date => p_end_date_active,
146 p_end_date_old => g_end_date_old,
147 x_event_log_id => g_event_log_id,
148 p_org_id => o.org_id);
149
150 l_srp.group_id := g_group_id;
151 -- delete the period (g_start_date_old, p_start_date_active) which is not active any more
152 IF (p_start_date_active > g_start_date_old) THEN
153 IF (g_end_date_old IS NOT NULL AND g_end_date_old < p_start_date_active) THEN
154 l_end_date := g_end_date_old;
155 ELSE
156 l_end_date := p_start_date_active - 1;
157 END IF;
158
159 l_srp.start_date := g_start_date_old;
160 l_srp.end_date := l_end_date;
161
162 cn_rollup_pvt.get_ancestor_salesrep
163 ( p_api_version => 1.0,
164 p_init_msg_list => FND_API.G_false,
165 p_commit => FND_API.G_false,
166 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
167 x_return_status => l_return_status,
168 x_msg_count => l_msg_count,
169 x_msg_data => l_msg_data,
170 p_srp => l_srp,
171 p_org_id => o.org_id,
172 x_srp => l_srp_tbl);
173
174 IF (l_srp_tbl.COUNT > 0) THEN
175 cn_mark_events_pkg.mark_notify_salesreps
176 ( p_salesrep_id => NULL,
177 p_comp_group_id => l_srp.group_id,
178 p_period_id => null,
179 p_start_date => l_srp.start_date,
180 p_end_date => l_srp.end_date,
181 p_revert_to_state => 'NCALC',
182 p_action => 'DELETE_ROLL_PULL',
183 p_action_link_id => NULL,
184 p_base_salesrep_id => NULL,
185 p_base_comp_group_id => NULL,
186 p_event_log_id => g_event_log_id,
187 x_action_link_id => l_roll_action_link_id,
188 p_org_id => o.org_id);
189
190 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
191 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
192 cn_mark_events_pkg.mark_notify_salesreps
193 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
194 p_comp_group_id => l_srp_tbl(i).group_id,
195 p_period_id => prd.period_id,
196 p_start_date => prd.start_date,
197 p_end_date => prd.end_date,
198 p_revert_to_state => 'CALC',
199 p_action => NULL,
200 p_action_link_id => l_roll_action_link_id,
201 p_base_salesrep_id => NULL,
202 p_base_comp_group_id => NULL,
203 p_event_log_id => g_event_log_id,
204 x_action_link_id => l_action_link_id,
205 p_org_id => o.org_id);
206 END LOOP;
207
208 -- check if this rep belongs to a team
209 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
210
211 if srp_gp_tm_rec.end_date = l_max_date then
212 srp_gp_tm_rec.end_date := NULL;
213 end if;
214
215 cn_mark_events_pkg.mark_notify_team
216 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
217 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_DEL_REP',
218 P_TEAM_NAME => srp_gp_tm_rec.name,
219 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
220 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
221 P_EVENT_LOG_ID => g_event_log_id,
222 p_org_id => o.org_id);
223 END LOOP;
224 END LOOP;
225 END IF;
226 l_srp_tbl.DELETE;
227 END IF;
228
229 -- delete the period (p_end_date_active, g_end_date_old) which is not active any more
230 IF ((g_end_date_old IS NULL AND p_end_date_active IS NOT NULL) OR p_end_date_active < g_end_date_old) THEN
231 IF (p_end_date_active < g_start_date_old) THEN
232 l_start_date := g_start_date_old;
233 ELSE
234 l_start_date := p_end_date_active + 1;
235 END IF;
236
237 l_srp.start_date := l_start_date;
238 l_srp.end_date := g_end_date_old;
239
240 cn_rollup_pvt.get_ancestor_salesrep
241 ( p_api_version => 1.0,
242 p_init_msg_list => FND_API.G_false,
243 p_commit => FND_API.G_false,
244 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
245 x_return_status => l_return_status,
246 x_msg_count => l_msg_count,
247 x_msg_data => l_msg_data,
248 p_srp => l_srp,
249 p_org_id => o.org_id,
250 x_srp => l_srp_tbl);
251
252 IF (l_srp_tbl.COUNT > 0) THEN
253 cn_mark_events_pkg.mark_notify_salesreps
254 ( p_salesrep_id => NULL,
255 p_comp_group_id => l_srp.group_id,
256 p_period_id => null,
257 p_start_date => l_srp.start_date,
258 p_end_date => l_srp.end_date,
259 p_revert_to_state => 'NCALC',
260 p_action => 'DELETE_ROLL_PULL',
261 p_action_link_id => NULL,
262 p_base_salesrep_id => NULL,
263 p_base_comp_group_id => NULL,
264 p_event_log_id => g_event_log_id,
265 x_action_link_id => l_roll_action_link_id,
266 p_org_id => o.org_id);
267
268 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
269 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
270
271 cn_mark_events_pkg.mark_notify_salesreps
272 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
273 p_comp_group_id => l_srp_tbl(i).group_id,
274 p_period_id => prd.period_id,
275 p_start_date => prd.start_date,
276 p_end_date => prd.end_date,
277 p_revert_to_state => 'CALC',
278 p_action => NULL,
279 p_action_link_id => l_roll_action_link_id,
280 p_base_salesrep_id => NULL,
281 p_base_comp_group_id => NULL,
282 p_event_log_id => g_event_log_id,
283 x_action_link_id => l_action_link_id,
284 p_org_id => o.org_id);
285 END LOOP;
286
287 -- check if this rep belongs to a team
288 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
289
290 if srp_gp_tm_rec.end_date = l_max_date then
291 srp_gp_tm_rec.end_date := NULL;
292 end if;
293
294 cn_mark_events_pkg.mark_notify_team
295 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
296 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_DEL_REP',
297 P_TEAM_NAME => srp_gp_tm_rec.name,
298 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
299 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
300 P_EVENT_LOG_ID => g_event_log_id,
301 p_org_id => o.org_id);
302 END LOOP;
303 END LOOP;
304 END IF;
305 l_srp_tbl.DELETE;
306 END IF;
307
308 END IF; -- group_name found
309 END IF; -- group_info found
310 END LOOP; -- orgs
311
312 -- restore context
313 restore_context(l_orig_acc_mode, l_orig_org_id);
314
315 EXCEPTION
316 WHEN OTHERS THEN
317 p_return_code := fnd_api.g_ret_sts_unexp_error;
318 restore_context(l_orig_acc_mode, l_orig_org_id);
319 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
320 THEN
321 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
322 END IF;
323 FND_MSG_PUB.count_and_get
324 (
325 p_count => p_count ,
326 p_data => p_data ,
327 p_encoded => FND_API.g_false
328 );
329
330 END update_res_group_relate_pre;
331
332 PROCEDURE delete_res_group_relate_pre
333 (P_GROUP_RELATE_ID IN JTF_RS_GRP_RELATIONS.GROUP_RELATE_ID%TYPE,
334 P_OBJECT_VERSION_NUM IN JTF_RS_GROUPS_VL.OBJECT_VERSION_NUMBER%TYPE,
335 P_DATA OUT NOCOPY VARCHAR2,
336 P_COUNT OUT NOCOPY NUMBER,
337 P_RETURN_CODE OUT NOCOPY VARCHAR2
338 ) IS
339 l_event_log_id NUMBER;
340 l_start_date DATE;
341 l_end_date DATE;
342 l_group_name VARCHAR2(60);
343 l_action_link_id NUMBER;
344 p_action_link_id NUMBER;
345 l_srp cn_rollup_pvt.srp_group_rec_type;
346 l_srp_tbl cn_rollup_pvt.srp_group_tbl_type;
347 l_return_status VARCHAR2(30);
348 l_msg_count NUMBER;
349 l_msg_data VARCHAR2(256);
350 l_group_id NUMBER;
351 l_api_name VARCHAR2(30) := 'delete_res_group_relate_pre';
352 -- clku, fix max date
353 l_max_date CONSTANT DATE := to_date('31-12-9999','DD-MM-YYYY');
354
355 l_orig_org_id NUMBER;
356 l_orig_acc_mode VARCHAR2(1);
357
358 -- cursor to get the usage code of the group identified by p_group_id
359 -- Do we need to make sure that the related group is also used by OSC
360 CURSOR group_info IS
361 SELECT r.start_date_active, r.end_date_active, r.group_id
362 FROM jtf_rs_group_usages u,
363 jtf_rs_grp_relations r
364 WHERE r.group_relate_id = p_group_relate_id
365 AND u.group_id = r.group_id AND u.usage = 'SALES_COMP';
366
367 -- cursor to get the name of the group identified by p_group_id
368 CURSOR group_name IS
372
369 SELECT name
370 FROM cn_comp_groups
371 WHERE comp_group_id = l_group_id;
373 -- cursor to find all periods in the date range for each srp
374 CURSOR periods(p_salesrep_id NUMBER, p_start_date DATE, p_end_date DATE) IS
375 SELECT p.period_id,
376 greatest(p_start_date, p.start_date) start_date,
377 Decode(p_end_date, NULL, p.end_date, Least(p_end_date, p.end_date)) end_date
378 FROM cn_srp_intel_periods p
379 WHERE p.salesrep_id = p_salesrep_id
380 AND (p_end_date IS NULL OR p.start_date <= p_end_date)
381 AND (p.end_date >= p_start_date);
382
383 --- get the reps who belong to the group
384 CURSOR srp_group_team_csr (p_salesrep_id NUMBER, p_group_id NUMBER, p_start_date DATE, p_end_date DATE)IS
385 select distinct ct.name name,
386 ct.comp_team_id team_id,
387 greatest(p_start_date, cg.start_date_active, ct.start_date_active) start_date,
388 Least(nvl(ct.end_date_active, l_max_date), nvl(cg.end_date_active, l_max_date), nvl(p_end_date, l_max_date)) end_date
389 from cn_srp_comp_teams_v srt, cn_comp_teams ct, cn_srp_comp_groups_v cg
390 where (p_salesrep_id IS NULL or srt.salesrep_id = p_salesrep_id)
391 and (p_salesrep_id IS NULL or cg.salesrep_id = p_salesrep_id)
392 and cg.comp_group_id = p_group_id
393 and srt.comp_team_id = ct.comp_team_id
394 and (cg.start_date_active <= ct.start_date_active
395 or cg.start_date_active between ct.start_date_active and nvl (ct.end_date_active, cg.start_date_active))
396 and nvl(cg.end_date_active, ct.start_date_active) >= ct.start_date_active
397 and (cg.end_date_active IS NULL OR p_start_date <= cg.end_date_active)
398 and (p_end_date IS NULL OR p_end_date >= cg.start_date_active);
399
400 CURSOR get_orgs is
401 SELECT org_id FROM cn_repositories_all WHERE status = 'A';
402 BEGIN
403 p_return_code := fnd_api.g_ret_sts_success;
404
405 IF fnd_profile.value('CN_MARK_EVENTS') <> 'Y' THEN
406 RETURN;
407 END IF;
408
409 -- store MOAC session info in local variables
410 l_orig_org_id := mo_global.get_current_org_id;
411 l_orig_acc_mode := mo_global.get_access_mode;
412
413 -- loop through orgs
414 FOR o IN get_orgs LOOP
415 mo_global.set_policy_context('S', o.org_id);
416
417 OPEN group_info;
418 FETCH group_info INTO l_start_date, l_end_date, l_group_id;
419 IF (group_info%notfound) THEN
420 CLOSE group_info;
421 ELSE
422 CLOSE group_info;
423
424 OPEN group_name;
425 FETCH group_name INTO l_group_name;
426 IF (group_name%notfound) THEN
427 CLOSE group_name;
428 ELSE
429 CLOSE group_name;
430
431 cn_mark_events_pkg.log_event
432 ( p_event_name => 'CHANGE_CP_HIER_DELETE',
433 p_object_name => l_group_name,
434 p_object_id => l_group_id,
435 p_start_date => NULL,
436 p_start_date_old => l_start_date,
437 p_end_date => NULL,
438 p_end_date_old => l_end_date,
439 x_event_log_id => l_event_log_id,
440 p_org_id => o.org_id);
441
442 cn_mark_events_pkg.mark_notify_salesreps
443 ( p_salesrep_id => NULL,
444 p_comp_group_id => l_group_id,
445 p_period_id => null,
446 p_start_date => l_start_date,
447 p_end_date => l_end_date,
448 p_revert_to_state => 'NCALC',
449 p_action => 'DELETE_ROLL_PULL',
450 p_action_link_id => NULL,
451 p_base_salesrep_id => NULL,
452 p_base_comp_group_id => NULL,
453 p_event_log_id => l_event_log_id,
454 x_action_link_id => p_action_link_id,
455 p_org_id => o.org_id);
456
457 -- check if this rep belongs to a team
458 FOR srp_gp_tm_rec IN srp_group_team_csr (NULL, l_group_id, l_start_date, l_end_date) LOOP
459
460 if srp_gp_tm_rec.end_date = l_max_date then
461 srp_gp_tm_rec.end_date := null;
462 end if;
463
464 cn_mark_events_pkg.mark_notify_team
465 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
466 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_DEL_REP',
467 P_TEAM_NAME => srp_gp_tm_rec.name,
468 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
469 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
470 P_EVENT_LOG_ID => l_event_log_id,
471 p_org_id => o.org_id);
472 END LOOP;
473
474 -- find the ancestors of the group identified by p_group_id and call mark_notify for all of them
475 -- not that we use l_start_date and l_end_date since this date range is the super range which covers
476 -- the date effectivity of all the salesreps in this group.
477 l_srp.group_id := l_group_id;
478 l_srp.start_date := l_start_date;
479 l_srp.end_date := l_end_date;
480
481 cn_rollup_pvt.get_ancestor_salesrep
482 ( p_api_version => 1.0,
483 p_init_msg_list => FND_API.G_false,
484 p_commit => FND_API.G_false,
485 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
486 x_return_status => l_return_status,
487 x_msg_count => l_msg_count,
488 x_msg_data => l_msg_data,
489 p_srp => l_srp,
493 IF (l_srp_tbl.COUNT > 0) THEN
490 p_org_id => o.org_id,
491 x_srp => l_srp_tbl);
492
494 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
495 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
496 cn_mark_events_pkg.mark_notify_salesreps
497 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
498 p_comp_group_id => l_srp_tbl(i).group_id,
499 p_period_id => prd.period_id,
500 p_start_date => prd.start_date,
501 p_end_date => prd.end_date,
502 p_revert_to_state => 'CALC',
503 p_action => NULL,
504 p_action_link_id => p_action_link_id,
505 p_base_salesrep_id => NULL,
506 p_base_comp_group_id => NULL,
507 p_event_log_id => l_event_log_id,
508 x_action_link_id => l_action_link_id,
509 p_org_id => o.org_id);
510 END LOOP;
511
512 -- check if this rep belongs to a team
513 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
514
515 if srp_gp_tm_rec.end_date = l_max_date then
516 srp_gp_tm_rec.end_date := null;
517 end if;
518
519 cn_mark_events_pkg.mark_notify_team
520 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
521 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_DEL_REP',
522 P_TEAM_NAME => srp_gp_tm_rec.name,
523 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
524 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
525 P_EVENT_LOG_ID => l_event_log_id,
526 p_org_id => o.org_id);
527 END LOOP;
528 END LOOP;
529 END IF;
530 l_srp_tbl.DELETE;
531 END IF; -- group_name found
532 END IF; -- group_info found
533 END LOOP; -- orgs
534
535 -- restore context
536 restore_context(l_orig_acc_mode, l_orig_org_id);
537
538 EXCEPTION
539 WHEN OTHERS THEN
540 p_return_code := fnd_api.g_ret_sts_unexp_error;
541 restore_context(l_orig_acc_mode, l_orig_org_id);
542 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
543 THEN
544 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
545 END IF;
546 FND_MSG_PUB.count_and_get
547 (
548 p_count => p_count ,
549 p_data => p_data ,
550 p_encoded => FND_API.g_false
551 );
552 END delete_res_group_relate_pre;
553
554 PROCEDURE create_res_group_relate_post
555 (P_GROUP_RELATE_ID IN JTF_RS_GRP_RELATIONS.GROUP_RELATE_ID%TYPE,
556 P_GROUP_ID IN JTF_RS_GROUPS_B.GROUP_ID%TYPE,
557 P_RELATED_GROUP_ID IN JTF_RS_GRP_RELATIONS.RELATED_GROUP_ID%TYPE,
558 P_RELATION_TYPE IN JTF_RS_GRP_RELATIONS.RELATION_TYPE%TYPE,
559 P_START_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.START_DATE_ACTIVE%TYPE,
560 P_END_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.END_DATE_ACTIVE%TYPE DEFAULT NULL,
561 P_DATA OUT NOCOPY VARCHAR2,
562 P_COUNT OUT NOCOPY NUMBER,
563 P_RETURN_CODE OUT NOCOPY VARCHAR2
564 ) IS
565 l_event_log_id NUMBER;
566 l_start_date DATE;
567 l_end_date DATE;
568 l_group_name VARCHAR2(60);
569 l_action_link_id NUMBER;
570 p_action_link_id NUMBER;
571 l_srp cn_rollup_pvt.srp_group_rec_type;
572 l_srp_tbl cn_rollup_pvt.srp_group_tbl_type;
573 l_return_status VARCHAR2(30);
574 l_msg_count NUMBER;
575 l_msg_data VARCHAR2(256);
576 l_dummy NUMBER;
577 l_api_name VARCHAR2(30) := 'create_res_group_relate_post';
578 -- clku fix max date
579 l_max_date CONSTANT DATE := to_date('31-12-9999','DD-MM-YYYY');
580
581 l_orig_org_id NUMBER;
582 l_orig_acc_mode VARCHAR2(1);
583
584 -- cursor to get the usage code of the group identified by p_group_id.
585 -- Do we need to make sure that the related group is also used by OSC ???
586 CURSOR usage IS
587 SELECT 1
588 FROM jtf_rs_group_usages
589 WHERE group_id = p_group_id AND usage = 'SALES_COMP';
590
591 -- cursor to get the name of the group identified by p_group_id
592 CURSOR group_name IS
593 SELECT name
594 FROM cn_comp_groups
595 WHERE comp_group_id = p_group_id;
596
597 -- cursor to find all periods in the date range for each srp
598 CURSOR periods(p_salesrep_id NUMBER, p_start_date DATE, p_end_date DATE) IS
599 SELECT p.period_id,
600 greatest(p_start_date, p.start_date) start_date,
601 Decode(p_end_date, NULL, p.end_date, Least(p_end_date, p.end_date)) end_date
602 FROM cn_srp_intel_periods p
603 WHERE p.salesrep_id = p_salesrep_id
604 AND (p_end_date IS NULL OR p.start_date <= p_end_date)
605 AND (p.end_date >= p_start_date);
606
607 --- get the reps who belong to the group
608 CURSOR srp_group_team_csr (p_salesrep_id NUMBER, p_group_id NUMBER, p_start_date DATE, p_end_date DATE)IS
609 select distinct ct.name name,
610 ct.comp_team_id team_id,
611 greatest(p_start_date, cg.start_date_active, ct.start_date_active) start_date,
615 and cg.salesrep_id = p_salesrep_id
612 least(nvl(ct.end_date_active, l_max_date), nvl(cg.end_date_active, l_max_date), nvl(p_end_date, l_max_date)) end_date
613 from cn_srp_comp_teams_v srt, cn_comp_teams ct, cn_srp_comp_groups_v cg
614 where srt.salesrep_id = p_salesrep_id
616 and cg.comp_group_id = p_group_id
617 and srt.comp_team_id = ct.comp_team_id
618 and (cg.start_date_active <= ct.start_date_active
619 or cg.start_date_active between ct.start_date_active and nvl (ct.end_date_active, cg.start_date_active))
620 and nvl(cg.end_date_active, ct.start_date_active) >= ct.start_date_active
621 and (cg.end_date_active IS NULL OR p_start_date <= cg.end_date_active)
622 and (p_end_date IS NULL OR p_end_date >= cg.start_date_active);
623
624 CURSOR get_orgs is
625 SELECT org_id FROM cn_repositories_all WHERE status = 'A';
626 BEGIN
627 p_return_code := fnd_api.g_ret_sts_success;
628
629 IF fnd_profile.value('CN_MARK_EVENTS') <> 'Y' THEN
630 RETURN;
631 END IF;
632
633 -- store MOAC session info in local variables
634 l_orig_org_id := mo_global.get_current_org_id;
635 l_orig_acc_mode := mo_global.get_access_mode;
636
637 -- loop through orgs
638 FOR o IN get_orgs LOOP
639 mo_global.set_policy_context('S', o.org_id);
640
641 OPEN usage;
642 FETCH usage INTO l_dummy;
643 IF (usage%notfound) THEN
644 CLOSE usage;
645 ELSE
646 CLOSE usage;
647
648 OPEN group_name;
649 FETCH group_name INTO l_group_name;
650 IF (group_name%notfound) THEN
651 CLOSE group_name;
652 ELSE
653 CLOSE group_name;
654
655 cn_mark_events_pkg.log_event
656 ( p_event_name => 'CHANGE_CP_HIER_ADD',
657 p_object_name => l_group_name,
658 p_object_id => p_group_id,
659 p_start_date => p_start_date_active,
660 p_start_date_old => NULL,
661 p_end_date => p_end_date_active,
662 p_end_date_old => NULL,
663 x_event_log_id => l_event_log_id,
664 p_org_id => o.org_id);
665
666 cn_mark_events_pkg.mark_notify_salesreps
667 ( p_salesrep_id => NULL,
668 p_comp_group_id => p_group_id,
669 p_period_id => null,
670 p_start_date => p_start_date_active,
671 p_end_date => p_end_date_active,
672 p_revert_to_state => 'NCALC',
673 p_action => 'ROLL_PULL',
674 p_action_link_id => NULL,
675 p_base_salesrep_id => NULL,
676 p_base_comp_group_id => NULL,
677 p_event_log_id => l_event_log_id,
678 x_action_link_id => p_action_link_id,
679 p_org_id => o.org_id);
680
681 -- check if this rep belongs to a team
682 FOR srp_gp_tm_rec IN srp_group_team_csr (NULL, p_group_id, p_start_date_active, p_end_date_active) LOOP
683
684 if srp_gp_tm_rec.end_date = l_max_date then
685 srp_gp_tm_rec.end_date := null;
686 end if;
687
688 cn_mark_events_pkg.mark_notify_team
689 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
690 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_ADD_REP',
691 P_TEAM_NAME => srp_gp_tm_rec.name,
692 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
693 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
694 P_EVENT_LOG_ID => l_event_log_id,
695 p_org_id => o.org_id);
696 END LOOP;
697
698
699 -- find the ancestors of the group identifed by p_group_id and call mark_notify for all of them
700 -- not that we use l_start_date and l_end_date since this date range is the super range which covers
701 -- the date effectivity of all the salesreps in this group.
702 l_srp.start_date := p_start_date_active;
703 l_srp.end_date := p_end_date_active;
704 l_srp.group_id := p_group_id;
705
706 cn_rollup_pvt.get_ancestor_salesrep
707 ( p_api_version => 1.0,
708 p_init_msg_list => FND_API.G_false,
709 p_commit => FND_API.G_false,
710 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
711 x_return_status => l_return_status,
712 x_msg_count => l_msg_count,
713 x_msg_data => l_msg_data,
714 p_srp => l_srp,
715 p_org_id => o.org_id,
716 x_srp => l_srp_tbl);
717
718 IF (l_srp_tbl.COUNT > 0) THEN
719 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
720 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
721 cn_mark_events_pkg.mark_notify_salesreps
722 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
723 p_comp_group_id => l_srp_tbl(i).group_id,
724 p_period_id => prd.period_id,
725 p_start_date => prd.start_date,
726 p_end_date => prd.end_date,
727 p_revert_to_state => 'CALC',
728 p_action => NULL,
729 p_action_link_id => p_action_link_id,
730 p_base_salesrep_id => NULL,
731 p_base_comp_group_id => NULL,
732 p_event_log_id => l_event_log_id,
733 x_action_link_id => l_action_link_id,
734 p_org_id => o.org_id);
735 END LOOP;
736
737 -- check if this rep belongs to a team
738 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
739
740 if srp_gp_tm_rec.end_date = l_max_date then
741 srp_gp_tm_rec.end_date := null;
742 end if;
743
744 cn_mark_events_pkg.mark_notify_team
745 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
746 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_ADD_REP',
747 P_TEAM_NAME => srp_gp_tm_rec.name,
748 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
749 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
750 P_EVENT_LOG_ID => l_event_log_id,
751 p_org_id => o.org_id);
752 END LOOP;
753 END LOOP;
754 END IF;
755 l_srp_tbl.DELETE;
756 END IF; -- group_name found
757 END IF; -- usage found
758 END LOOP; -- orgs
759
760 -- restore context
761 restore_context(l_orig_acc_mode, l_orig_org_id);
762
763 EXCEPTION
764 WHEN OTHERS THEN
765 p_return_code := fnd_api.g_ret_sts_unexp_error;
766 restore_context(l_orig_acc_mode, l_orig_org_id);
767 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
768 THEN
769 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
770 END IF;
771 FND_MSG_PUB.count_and_get
772 (
773 p_count => p_count ,
774 p_data => p_data ,
775 p_encoded => FND_API.g_false
776 );
777 END create_res_group_relate_post;
778
779
780 PROCEDURE update_res_group_relate_post
781 (P_GROUP_RELATE_ID IN JTF_RS_GRP_RELATIONS.GROUP_RELATE_ID%TYPE,
785 P_DATA OUT NOCOPY VARCHAR2,
782 P_START_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.START_DATE_ACTIVE%TYPE DEFAULT FND_API.G_MISS_DATE,
783 P_END_DATE_ACTIVE IN JTF_RS_GRP_RELATIONS.END_DATE_ACTIVE%TYPE DEFAULT FND_API.G_MISS_DATE,
784 P_OBJECT_VERSION_NUM IN JTF_RS_GRP_RELATIONS.OBJECT_VERSION_NUMBER%TYPE,
786 P_COUNT OUT NOCOPY NUMBER,
787 P_RETURN_CODE OUT NOCOPY VARCHAR2
788 ) IS
789 l_start_date DATE;
790 l_end_date DATE;
791 l_action_link_id NUMBER;
792 p_action_link_id NUMBER;
793 l_srp cn_rollup_pvt.srp_group_rec_type;
794 l_srp_tbl cn_rollup_pvt.srp_group_tbl_type;
795 l_return_status VARCHAR2(30);
796 l_msg_count NUMBER;
797 l_msg_data VARCHAR2(256);
798 l_api_name VARCHAR2(30) := 'update_res_group_relate_post';
799 -- clku , fix max date
800 l_max_date CONSTANT DATE := to_date('31-12-9999','DD-MM-YYYY');
801 l_orig_org_id NUMBER;
802 l_orig_acc_mode VARCHAR2(1);
803
804
805 -- cursor to find all periods in the date range for each srp
806 CURSOR periods(p_salesrep_id NUMBER, p_start_date DATE, p_end_date DATE) IS
807 SELECT p.period_id,
808 greatest(p_start_date, p.start_date) start_date,
809 Decode(p_end_date, NULL, p.end_date, Least(p_end_date, p.end_date)) end_date
810 FROM cn_srp_intel_periods p
811 WHERE p.salesrep_id = p_salesrep_id
812 AND (p_end_date IS NULL OR p.start_date <= p_end_date)
813 AND (p.end_date >= p_start_date);
814
815 --- get the reps who belong to the group
816 CURSOR srp_group_team_csr (p_salesrep_id NUMBER, p_group_id NUMBER, p_start_date DATE, p_end_date DATE)IS
817 select distinct ct.name name,
818 ct.comp_team_id team_id,
819 greatest(p_start_date, cg.start_date_active, ct.start_date_active) start_date,
820 Least(nvl(ct.end_date_active, l_max_date), nvl(cg.end_date_active, l_max_date), nvl(p_end_date, l_max_date) ) end_date
821 from cn_srp_comp_teams_v srt, cn_comp_teams ct, cn_srp_comp_groups_v cg
822 where srt.salesrep_id = p_salesrep_id
823 and cg.salesrep_id = p_salesrep_id
824 and cg.comp_group_id = p_group_id
825 and srt.comp_team_id = ct.comp_team_id
826 and (cg.start_date_active <= ct.start_date_active
827 or cg.start_date_active between ct.start_date_active and nvl (ct.end_date_active, cg.start_date_active))
828 and nvl(cg.end_date_active, ct.start_date_active) >= ct.start_date_active
829 and (cg.end_date_active IS NULL OR p_start_date <= cg.end_date_active)
830 and (p_end_date IS NULL OR p_end_date >= cg.start_date_active);
831
832 CURSOR get_orgs IS
833 SELECT org_id FROM cn_repositories_all WHERE status = 'A';
834 BEGIN
835 p_return_code := fnd_api.g_ret_sts_success;
836
837 IF fnd_profile.value('CN_MARK_EVENTS') <> 'Y' THEN
838 RETURN;
839 END IF;
840
841 IF (g_group_id IS NULL) THEN
842 RETURN;
843 END IF;
844
845 -- store MOAC session info in local variables
846 l_orig_org_id := mo_global.get_current_org_id;
847 l_orig_acc_mode := mo_global.get_access_mode;
848
849 -- loop through orgs
850 FOR o IN get_orgs LOOP
851 mo_global.set_policy_context('S', o.org_id);
852
853 cn_mark_events_pkg.mark_notify_salesreps
854 ( p_salesrep_id => NULL,
855 p_comp_group_id => g_group_id,
856 p_period_id => null,
857 p_start_date => p_start_date_active,
858 p_end_date => p_end_date_active,
859 p_revert_to_state => 'NCALC',
860 p_action => 'ROLL_PULL',
861 p_action_link_id => NULL,
862 p_base_salesrep_id => NULL,
863 p_base_comp_group_id => NULL,
864 p_event_log_id => g_event_log_id,
865 x_action_link_id => p_action_link_id,
866 p_org_id => o.org_id);
867
868 l_srp.group_id := g_group_id;
869 -- insert the period(p_start_date_active, g_start_date_old) which becomes active
870 IF (p_start_date_active < g_start_date_old) THEN
871 IF (p_end_date_active IS NOT NULL AND p_end_date_active < g_start_date_old) THEN
872 l_end_date := p_end_date_active;
873 ELSE
874 l_end_date := g_start_date_old - 1;
875 END IF;
876
877 l_srp.start_date := p_start_date_active;
878 l_srp.end_date := l_end_date;
879
880 cn_rollup_pvt.get_ancestor_salesrep
881 ( p_api_version => 1.0,
882 p_init_msg_list => FND_API.G_false,
883 p_commit => FND_API.G_false,
884 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
885 x_return_status => l_return_status,
886 x_msg_count => l_msg_count,
887 x_msg_data => l_msg_data,
888 p_srp => l_srp,
889 p_org_id => o.org_id,
890 x_srp => l_srp_tbl);
891
892 IF (l_srp_tbl.COUNT > 0) THEN
893 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
894 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
895 cn_mark_events_pkg.mark_notify_salesreps
896 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
897 p_comp_group_id => l_srp_tbl(i).group_id,
898 p_period_id => prd.period_id,
899 p_start_date => prd.start_date,
900 p_end_date => prd.end_date,
901 p_revert_to_state => 'CALC',
902 p_action => NULL,
903 p_action_link_id => p_action_link_id,
904 p_base_salesrep_id => NULL,
905 p_base_comp_group_id => NULL,
909 END LOOP;
906 p_event_log_id => g_event_log_id,
907 x_action_link_id => l_action_link_id,
908 p_org_id => o.org_id);
910
911 -- check if this rep belongs to a team
912 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
913
914 if srp_gp_tm_rec.end_date = l_max_date then
915 srp_gp_tm_rec.end_date := null;
916 end if;
917
918 cn_mark_events_pkg.mark_notify_team
919 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
920 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_ADD_REP',
921 P_TEAM_NAME => srp_gp_tm_rec.name,
922 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
923 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
924 P_EVENT_LOG_ID => g_event_log_id,
925 p_org_id => o.org_id);
926 END LOOP;
927 END LOOP;
928 END IF;
929 l_srp_tbl.DELETE;
930 END IF;
931
932 -- insert the period (l_end_date_old, p_end_date_active) which becomes active.
933 IF ((p_end_date_active IS NULL AND g_end_date_old IS NOT NULL) OR p_end_date_active > g_end_date_old) THEN
934 IF (g_end_date_old < p_start_date_active) THEN
935 l_start_date := p_start_date_active;
936 ELSE
937 l_start_date := g_end_date_old + 1;
938 END IF;
939
940 l_srp.start_date := l_start_date;
941 l_srp.end_date := p_end_date_active;
942
943 cn_rollup_pvt.get_ancestor_salesrep
944 ( p_api_version => 1.0,
945 p_init_msg_list => FND_API.G_false,
946 p_commit => FND_API.G_false,
947 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
948 x_return_status => l_return_status,
949 x_msg_count => l_msg_count,
950 x_msg_data => l_msg_data,
951 p_srp => l_srp,
952 p_org_id => o.org_id,
953 x_srp => l_srp_tbl);
954
955 IF (l_srp_tbl.COUNT > 0) THEN
956 FOR i IN l_srp_tbl.first..l_srp_tbl.last LOOP
957 FOR prd IN periods(l_srp_tbl(i).salesrep_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
958 cn_mark_events_pkg.mark_notify_salesreps
959 ( p_salesrep_id => l_srp_tbl(i).salesrep_id,
960 p_comp_group_id => l_srp_tbl(i).group_id,
961 p_period_id => prd.period_id,
962 p_start_date => prd.start_date,
963 p_end_date => prd.end_date,
964 p_revert_to_state => 'CALC',
965 p_action => NULL,
966 p_action_link_id => p_action_link_id,
967 p_base_salesrep_id => NULL,
968 p_base_comp_group_id => NULL,
969 p_event_log_id => g_event_log_id,
970 x_action_link_id => l_action_link_id,
971 p_org_id => o.org_id);
972 END LOOP;
973
974 -- check if this rep belongs to a team
975 FOR srp_gp_tm_rec IN srp_group_team_csr (l_srp_tbl(i).salesrep_id, l_srp_tbl(i).group_id, l_srp_tbl(i).start_date, l_srp_tbl(i).end_date) LOOP
976
977 if srp_gp_tm_rec.end_date = l_max_date then
978 srp_gp_tm_rec.end_date := null;
979 end if;
980
981 cn_mark_events_pkg.mark_notify_team
982 (P_TEAM_ID => srp_gp_tm_rec.team_id ,
983 P_TEAM_EVENT_NAME => 'CHANGE_TEAM_ADD_REP',
984 P_TEAM_NAME => srp_gp_tm_rec.name,
985 P_START_DATE_ACTIVE => srp_gp_tm_rec.start_date,
986 P_END_DATE_ACTIVE => srp_gp_tm_rec.end_date,
987 P_EVENT_LOG_ID => g_event_log_id,
988 p_org_id => o.org_id);
989 END LOOP;
990 END LOOP;
991 END IF;
992 l_srp_tbl.DELETE;
993 END IF;
994 END LOOP; -- orgs
995
996 -- restore context
997 restore_context(l_orig_acc_mode, l_orig_org_id);
998
999 EXCEPTION
1000 WHEN OTHERS THEN
1001 p_return_code := fnd_api.g_ret_sts_unexp_error;
1002 restore_context(l_orig_acc_mode, l_orig_org_id);
1003 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1004 THEN
1005 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
1006 END IF;
1007 FND_MSG_PUB.count_and_get
1008 (
1009 p_count => p_count ,
1010 p_data => p_data ,
1011 p_encoded => FND_API.g_false
1012 );
1013 END update_res_group_relate_post;
1014
1015 PROCEDURE delete_res_group_relate_post
1016 (P_GROUP_RELATE_ID IN JTF_RS_GRP_RELATIONS.GROUP_RELATE_ID%TYPE,
1017 P_OBJECT_VERSION_NUM IN JTF_RS_GROUPS_VL.OBJECT_VERSION_NUMBER%TYPE,
1018 P_DATA OUT NOCOPY VARCHAR2,
1019 P_COUNT OUT NOCOPY NUMBER,
1020 P_RETURN_CODE OUT NOCOPY VARCHAR2
1021 ) IS
1022 BEGIN
1023 p_return_code := fnd_api.g_ret_sts_success;
1024 END delete_res_group_relate_post;
1025
1026
1027 FUNCTION Ok_To_Generate_Msg
1028 (P_DATA OUT NOCOPY VARCHAR2,
1029 P_COUNT OUT NOCOPY NUMBER,
1030 P_RETURN_CODE OUT NOCOPY VARCHAR2)
1031 RETURN BOOLEAN IS
1032 BEGIN
1033 p_return_code := fnd_api.g_ret_sts_success;
1034 RETURN false;
1035 END ok_to_generate_msg;
1036
1037 END jtf_rs_group_relate_vuhk;