[Home] [Help]
PACKAGE BODY: APPS.CSF_ALERTS_PUB
Source
1 PACKAGE BODY csf_alerts_pub AS
2 /*$Header: csfAlertb.pls 120.5 2007/11/16 06:48:53 htank noship $*/
3
4 -- This function will do basic filteration as per the bussiness conditions
5 -- also based on the event type it will call another function
6 -- Main entry point for the CSF wireless alerts
7 -- What to check?
8 -- 1. Assignment should have task attached to it with Schedule Start/End date
9 -- 2. Schedule start date should be greater than sysdate
10 -- 3. Task should be a type of 'Dispatch' and schedulable flag = 'Y' (only for FS tasks)
11 -- 4. Check for Task priority (check against profile value)
12 -- 5. Task assignment status should be of 'CSF: Default Assigned task status' profile value
13 -- at the application level
14
15 function checkForAlerts (p_subscription_guid in raw,
16 p_event in out nocopy WF_EVENT_T) return varchar2 is
17
18 l_event_name varchar2(100);
19 l_event_key varchar2(100);
20 l_task_asgn_id number;
21 l_task_id number;
22 l_scheduled_start_date date;
23 l_scheduled_end_date date;
24 l_resource_id number;
25 l_resource_type_code varchar2(20);
26 -- l_shifts CSF_RESOURCE_PUB.shift_tbl_type;
27 X_RETURN_STATUS VARCHAR2(200);
28 X_MSG_COUNT NUMBER;
29 X_MSG_DATA VARCHAR2(200);
30 l_shift_start_date date;
31 l_minutes_before number;
32 l_send_date date;
33 l_wf_parameter_list_t wf_parameter_list_t;
34 l_wf_parameter_list_t_cp wf_parameter_list_t;
35 l_wf_parameter_t wf_parameter_t;
36 l_old_resource number;
37 l_new_resource number;
38 l_old_resource_type varchar2(100);
39 l_new_resource_type varchar2(100);
40 l_new_asgnmnt_status_id number;
41 l_old_asgnmnt_status_id number;
42 l_assigned_status_flag varchar2(10);
43 l_task_audit_id number;
44 l_task_sch_update_check varchar2(10);
45 l_task_priority_update_check varchar2(10);
46 l_priority_test varchar2(10);
47 l_org_assignment_status_id number;
48
49 cursor c_task_assgn_detail (v_task_assgn_id number) is
50 SELECT distinct jtb.task_id,
51 jtb.scheduled_start_date,
52 jtb.scheduled_end_date,
53 jta.resource_id,
54 jta.resource_type_code,
55 jta.assignment_status_id
56 FROM jtf_tasks_b jtb,
57 jtf_task_assignments jta,
58 jtf_task_priorities_vl jp_vl,
59 jtf_task_types_vl jtt_vl
60 WHERE jta.task_assignment_id = v_task_assgn_id
61 and jta.task_id = jtb.task_id
62 and nvl(jtb.scheduled_start_date, sysdate - 1) > sysdate
63 and nvl(jtb.scheduled_end_date, sysdate - 1) > sysdate
64 and jta.assignment_status_id in (
65 select
66 task_status_id
67 from
68 jtf_task_statuses_b
69 where
70 usage = 'TASK'
71 and nvl(assigned_flag, 'N') = 'Y'
72 and nvl(assignment_status_flag, 'N') = 'Y'
73 and sysdate between nvl(start_date_active, sysdate)
74 and nvl(end_date_active, sysdate + 1)
75 )
76 and jtb.task_type_id = jtt_vl.task_type_id
77 and jtt_vl.task_type_id in (
78 select
79 task_type_id
80 from
81 JTF_TASK_TYPES_B
82 where
83 rule = 'DISPATCH'
84 ) -- only dispatch tasks
85 and nvl(jtt_vl.schedule_flag, 'N') = 'Y' -- schedulable tasks
86 and sysdate between nvl(jtt_vl.start_date_active, sysdate)
87 and nvl(jtt_vl.end_date_active, sysdate + 1)
88 and jtb.task_priority_id = jp_vl.task_priority_id
89 and sysdate between nvl(jp_vl.start_date_active, sysdate)
90 and nvl(jp_vl.end_date_active, sysdate + 1)
91 and jp_vl.importance_level <= fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
92 getUserId(jta.resource_id, jta.resource_type_code),
93 21685,
94 513,
95 null,
96 null);
97
98 cursor c_task_assgn_detail_status (v_task_assgn_id number) is
99 SELECT distinct jtb.task_id,
100 jtb.scheduled_start_date,
101 jtb.scheduled_end_date,
102 jta.resource_id,
103 jta.resource_type_code
104 FROM jtf_tasks_b jtb,
105 jtf_task_assignments jta,
106 jtf_task_priorities_vl jp_vl,
107 jtf_task_types_vl jtt_vl
108 WHERE jta.task_assignment_id = v_task_assgn_id
109 and jta.task_id = jtb.task_id
110 and nvl(jtb.scheduled_start_date, sysdate - 1) > sysdate
111 and nvl(jtb.scheduled_end_date, sysdate - 1) > sysdate
112 and jtb.task_type_id = jtt_vl.task_type_id
113 and jtt_vl.task_type_id in (
114 select
115 task_type_id
116 from
117 JTF_TASK_TYPES_B
118 where
119 rule = 'DISPATCH'
120 ) -- only dispatch tasks
121 and jtt_vl.schedule_flag = 'Y' -- schedulable tasks
122 and sysdate between nvl(jtt_vl.start_date_active, sysdate)
123 and nvl(jtt_vl.end_date_active, sysdate + 1)
124 and jtb.task_priority_id = jp_vl.task_priority_id
125 and sysdate between nvl(jp_vl.start_date_active, sysdate)
126 and nvl(jp_vl.end_date_active, sysdate + 1)
127 and jp_vl.importance_level <= fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
128 getUserId(jta.resource_id, jta.resource_type_code),
129 21685,
130 513,
131 null,
132 null);
133
134 cursor c_check_task_status_id (v_new_status_id number, v_old_status_id number) is
135 select 'TRUE' from dual where v_old_status_id in (select
136 task_status_id
137 from
138 jtf_task_statuses_b
139 where
140 usage = 'TASK'
141 and nvl(assigned_flag, 'N') <> 'Y'
142 and nvl(assignment_status_flag, 'N') = 'Y'
143 and sysdate between nvl(start_date_active, sysdate)
144 and nvl(end_date_active, sysdate + 1))
145 and v_new_status_id in (select
146 task_status_id
147 from
148 jtf_task_statuses_b
149 where
150 usage = 'TASK'
151 and nvl(assigned_flag, 'N') = 'Y'
152 and nvl(assignment_status_flag, 'N') = 'Y'
153 and sysdate between nvl(start_date_active, sysdate)
154 and nvl(end_date_active, sysdate + 1));
155
156 cursor c_task_detail (v_task_id number, v_resource_id number, v_resource_type_code varchar2) is
157 SELECT jtb.scheduled_start_date,
158 jtb.scheduled_end_date
159 FROM jtf_tasks_b jtb,
160 jtf_task_priorities_vl jp_vl,
161 jtf_task_types_vl jtt_vl
162 WHERE jtb.task_id = v_task_id
163 and nvl(jtb.scheduled_start_date, sysdate - 1) > sysdate
164 and jtb.task_type_id = jtt_vl.task_type_id
165 and jtt_vl.task_type_id in (
166 select
167 task_type_id
168 from
169 JTF_TASK_TYPES_B
170 where
171 rule = 'DISPATCH'
172 ) -- only dispatch tasks
173 and jtt_vl.schedule_flag = 'Y' -- schedulable tasks
174 and sysdate between nvl(jtt_vl.start_date_active, sysdate)
175 and nvl(jtt_vl.end_date_active, sysdate + 1)
176 and jtb.task_priority_id = jp_vl.task_priority_id
177 and sysdate between nvl(jp_vl.start_date_active, sysdate)
178 and nvl(jp_vl.end_date_active, sysdate + 1)
179 and jp_vl.importance_level <= fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
180 getUserId(v_resource_id, v_resource_type_code),
181 21685,
182 513,
183 null,
184 null);
185 -- should take from profile here it is Medium
186
187 cursor c_task_update_check (v_task_id number, v_task_audit_id number) is
188 select
189 (select
190 'TRUE'
191 from
192 jtf_task_audits_b
193 where
194 task_id = v_task_id
195 and task_audit_id = v_task_audit_id
196 and (new_scheduled_start_date <> old_scheduled_start_date
197 or new_scheduled_end_date <> old_scheduled_end_date)) as is_schedule_dates,
198 (select
199 'TRUE'
200 from
201 jtf_task_audits_b
202 where
203 task_id = v_task_id
204 and task_audit_id = v_task_audit_id
205 and new_task_priority_id <> old_task_priority_id) as is_priority
206 from dual;
207
208 cursor c_get_all_assignments (v_task_id number) is
209 select
210 task_assignment_Id
211 from
212 jtf_task_assignments
213 where task_id = v_task_id;
214
215 cursor c_priority_test (v_task_id number,
216 v_task_audit_id number,
217 v_resource_id number,
218 v_resource_type varchar2) is
219 select
220 'TRUE'
221 from
222 jtf_task_priorities_vl jp_vl1,
223 jtf_task_priorities_vl jp_vl2,
224 jtf_task_audits_b jtab
225 where
226 jtab.task_id = v_task_id
227 and jtab.task_audit_id = v_task_audit_id
228 and jp_vl1.task_priority_id = jtab.new_task_priority_id
229 and jp_vl1.importance_level <= fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
230 getUserId(v_resource_id, v_resource_type),
231 21685,
232 513,
233 null,
234 null)
235 and jp_vl2.task_priority_id = jtab.old_task_priority_id
236 and jp_vl2.importance_level > fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
237 getUserId(v_resource_id, v_resource_type),
238 21685,
239 513,
240 null,
241 null);
242 begin
243
244 l_event_name := p_event.getEventName();
245 l_task_asgn_id := p_event.GetValueForParameter('TASK_ASSIGNMENT_ID');
246 l_wf_parameter_list_t := p_event.getParameterList();
247
248 -- create task assignment event
249 if (l_event_name = 'oracle.apps.jtf.cac.task.createTaskAssignment') then -- event type create
250
251 open c_task_assgn_detail(l_task_asgn_id);
252 fetch c_task_assgn_detail into l_task_id,
253 l_scheduled_start_date,
254 l_scheduled_end_date,
255 l_resource_id,
256 l_resource_type_code,
257 l_org_assignment_status_id;
258 close c_task_assgn_detail;
259
260 if l_task_id is null then
261 return 'SUCCESS'; -- nothing to do now :)
262 end if;
263
264 -- calculate SendDate
265 l_send_date := getSendDate(l_resource_id,
266 l_resource_type_code,
267 l_scheduled_start_date,
268 l_scheduled_end_date);
269
270 if checkAlertsEnabled(l_resource_id, l_resource_type_code) then
271
272 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'CREATE');
273 l_wf_parameter_list_t.EXTEND;
274 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
275
276 l_wf_parameter_t := wf_parameter_t('ORG_TASK_ASSGN_STS_ID', to_char(l_org_assignment_status_id));
277 l_wf_parameter_list_t.EXTEND;
278 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
279
280 l_event_key := getItemKey('oracle.apps.csf.createTaskAssignment',
281 l_resource_id,
282 l_resource_type_code,
283 l_task_asgn_id,
284 p_event.getEventKey());
285
286 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
287 p_event_key => l_event_key,
288 p_parameters => l_wf_parameter_list_t,
289 p_send_date => l_send_date);
290
291 end if;
292
293 -- delete assignment event
294 elsif (l_event_name = 'oracle.apps.jtf.cac.task.deleteTaskAssignment') then -- event type delete
295
296 l_task_id := p_event.GetValueForParameter('TASK_ID');
297 l_resource_id := p_event.GetValueForParameter('RESOURCE_ID');
298 l_resource_type_code := p_event.GetValueForParameter('RESOURCE_TYPE_CODE');
299
300 open c_task_detail(l_task_id, l_resource_id, l_resource_type_code);
301 fetch c_task_detail into l_scheduled_start_date, l_scheduled_end_date;
302 close c_task_detail;
303
304 if l_task_id is null then
305 return 'SUCCESS'; -- nothing to do now :)
306 end if;
307
308 -- calculate SendDate
309 l_send_date := getSendDate(l_resource_id,
310 l_resource_type_code,
311 l_scheduled_start_date,
312 l_scheduled_end_date);
313
314 if checkAlertsEnabled(l_resource_id, l_resource_type_code) then
315
316 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'DELETE');
317 l_wf_parameter_list_t.EXTEND;
318 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
319
320 l_event_key := getItemKey('oracle.apps.csf.deleteTaskAssignment',
321 l_resource_id,
322 l_resource_type_code,
323 l_task_asgn_id,
324 p_event.getEventKey());
325
326 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
327 p_event_key => l_event_key,
328 p_parameters => l_wf_parameter_list_t,
329 p_send_date => l_send_date);
330
331 end if;
332
333 -- update assignee event
334 elsif (l_event_name = 'oracle.apps.jtf.cac.task.updateTaskAssignment') then -- event type update assignment
335
336 l_old_resource := p_event.GetValueForParameter('OLD_RESOURCE_ID');
337 l_new_resource := p_event.GetValueForParameter('NEW_RESOURCE_ID');
338 l_old_resource_type := p_event.GetValueForParameter('OLD_RESOURCE_TYPE_CODE');
339 l_new_resource_type := p_event.GetValueForParameter('NEW_RESOURCE_TYPE_CODE');
340
341 l_new_asgnmnt_status_id := p_event.GetValueForParameter('NEW_ASSIGNMENT_STATUS_ID');
342 l_old_asgnmnt_status_id := p_event.GetValueForParameter('OLD_ASSIGNMENT_STATUS_ID');
343
344 -- Assignee change case
345 if l_old_resource is not null and l_new_resource is not null then -- resource change
346
347 open c_task_assgn_detail(l_task_asgn_id);
348 fetch c_task_assgn_detail into l_task_id,
349 l_scheduled_start_date,
350 l_scheduled_end_date,
351 l_resource_id,
352 l_resource_type_code,
353 l_org_assignment_status_id;
354 close c_task_assgn_detail;
355
356 if l_task_id is null then
357 return 'SUCCESS'; -- nothing to do now :)
358 end if;
359
360 -- calculate SendDate
361 l_send_date := getSendDate(l_resource_id,
362 l_resource_type_code,
363 l_scheduled_start_date,
364 l_scheduled_end_date);
365
366 -- create notification to new resource
367 if checkAlertsEnabled(l_new_resource, l_new_resource_type) then -- alerts enables?
368
369 l_wf_parameter_list_t_cp := l_wf_parameter_list_t;
370 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'CREATE');
371 l_wf_parameter_list_t.EXTEND;
372 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
373
374 l_wf_parameter_t := wf_parameter_t('ORG_TASK_ASSGN_STS_ID', to_char(l_org_assignment_status_id));
375 l_wf_parameter_list_t.EXTEND;
376 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
377
378
379 l_event_key := getItemKey('oracle.apps.csf.createTaskAssignment',
380 l_new_resource,
381 l_new_resource_type,
382 l_task_asgn_id,
383 p_event.getEventKey());
384
385 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
386 p_event_key => l_event_key,
387 p_parameters => l_wf_parameter_list_t,
388 p_send_date => l_send_date
389 );
390
391 end if; -- alerts enabled?
392
393 -- delete alert to old resource
394 if checkAlertsEnabled(l_old_resource, l_old_resource_type) then -- alerts enabled?
395
396 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'DELETE_FOR_UPDATE');
397 l_wf_parameter_list_t := l_wf_parameter_list_t_cp;
398 l_wf_parameter_list_t.EXTEND;
399 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
400
401 l_event_key := getItemKey('oracle.apps.csf.deleteTaskAssignment',
402 l_old_resource,
403 l_old_resource_type,
404 l_task_asgn_id,
405 p_event.getEventKey());
406
407 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
408 p_event_key => l_event_key,
409 p_parameters => l_wf_parameter_list_t,
410 p_send_date => l_send_date);
411
412 end if; -- alerts enabled?
413
414 -- Status change case
415 elsif l_new_asgnmnt_status_id is not null and l_old_asgnmnt_status_id is not null then -- assignment status change
416
417 -- check for other conditions without status change
418 open c_task_assgn_detail_status(l_task_asgn_id);
419 fetch c_task_assgn_detail_status into l_task_id,
420 l_scheduled_start_date,
421 l_scheduled_end_date,
422 l_resource_id,
423 l_resource_type_code;
424 close c_task_assgn_detail_status;
425
426 if l_task_id is null then
427 return 'SUCCESS'; -- nothing to do now :)
428 end if;
429
430 if l_new_asgnmnt_status_id = fnd_profile.VALUE_SPECIFIC('CSF_DEFAULT_TASK_CANCELLED_STATUS',
431 getUserId(l_resource_id, l_resource_type_code),
432 21685,
433 513,
434 null,
435 null)
436 and checkAlertsEnabled(l_resource_id, l_resource_type_code)
437 then -- is it cancel status
438
439 -- calculate SendDate
440 l_send_date := getSendDate(l_resource_id,
441 l_resource_type_code,
442 l_scheduled_start_date,
443 l_scheduled_end_date);
444
445 -- delete case
446 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'DELETE');
447 l_wf_parameter_list_t.EXTEND;
448 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
449
450 l_event_key := getItemKey('oracle.apps.csf.deleteTaskAssignment',
451 l_resource_id,
452 l_resource_type_code,
453 l_task_asgn_id,
454 p_event.getEventKey());
455
456 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
457 p_event_key => l_event_key,
458 p_parameters => l_wf_parameter_list_t,
459 p_send_date => l_send_date);
460
461 else -- not a cancel status
462
463 -- calculate SendDate
464 l_send_date := getSendDate(l_resource_id,
465 l_resource_type_code,
466 l_scheduled_start_date,
467 l_scheduled_end_date);
468
469 if checkAlertsEnabled(l_resource_id, l_resource_type_code) then -- alerts enabled
470 -- check for status non-assigned to assigned
471 l_assigned_status_flag := 'FALSE';
472
473 open c_check_task_status_id(l_new_asgnmnt_status_id, l_old_asgnmnt_status_id);
474 fetch c_check_task_status_id into l_assigned_status_flag;
475 close c_check_task_status_id;
476
477 if l_assigned_status_flag = 'TRUE' then -- new assignment
478 -- status from non-assigned to assigned
479
480 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'CREATE');
481 l_wf_parameter_list_t.EXTEND;
482 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
483
484 l_wf_parameter_t := wf_parameter_t('ORG_TASK_ASSGN_STS_ID', to_char(l_new_asgnmnt_status_id));
485 l_wf_parameter_list_t.EXTEND;
486 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
487
488 l_event_key := getItemKey('oracle.apps.csf.createTaskAssignment',
489 l_resource_id,
490 l_resource_type_code,
491 l_task_asgn_id,
492 p_event.getEventKey());
493
494 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
495 p_event_key => l_event_key,
496 p_parameters => l_wf_parameter_list_t,
497 p_send_date => l_send_date
498 );
499
500 end if; -- new assignemnt over
501
502 end if; -- alerts enabled? over
503
504 end if; -- not a cancel status over
505
506 end if; -- status change over
507
508 elsif (l_event_name = 'oracle.apps.jtf.cac.task.updateTask') then
509
510 l_task_id := p_event.GetValueForParameter('TASK_ID');
511 l_task_audit_id := p_event.GetValueForParameter('TASK_AUDIT_ID');
512
513 open c_task_update_check (l_task_id, l_task_audit_id);
514 fetch c_task_update_check into l_task_sch_update_check, l_task_priority_update_check;
515 close c_task_update_check;
516
517 if l_task_sch_update_check = 'TRUE' or l_task_priority_update_check = 'TRUE' then
518
519 -- fetch all the task assignemnts and resources
520 -- loop for each assignment and check other conditions
521 open c_get_all_assignments(l_task_id);
522 loop
523 fetch c_get_all_assignments into l_task_asgn_id;
524 exit when c_get_all_assignments%notfound;
525
526 open c_task_assgn_detail(l_task_asgn_id);
527 fetch c_task_assgn_detail into l_task_id,
528 l_scheduled_start_date,
529 l_scheduled_end_date,
530 l_resource_id,
531 l_resource_type_code,
532 l_org_assignment_status_id;
533 close c_task_assgn_detail;
534
535 if l_task_id is null then
536 return 'SUCCESS'; -- nothing to do now :)
537 end if;
538
539 -- calculate SendDate
540 l_send_date := getSendDate(l_resource_id,
541 l_resource_type_code,
542 l_scheduled_start_date,
543 l_scheduled_end_date);
544
545 -- priority change
546 if l_task_priority_update_check = 'TRUE' then
547
548 -- check if new priority is higher than the profile and
549 -- old priority should be less than
550
551 open c_priority_test(l_task_id, l_task_audit_id, l_resource_id, l_resource_type_code);
552 fetch c_priority_test into l_priority_test;
553 close c_priority_test;
554
555 if l_priority_test = 'TRUE'
556 and checkAlertsEnabled(l_resource_id, l_resource_type_code) then -- create assignment notification
557
558 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'CREATE');
559 l_wf_parameter_list_t.EXTEND;
560 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
561
562 l_wf_parameter_t := wf_parameter_t('TASK_ASSIGNMENT_ID', to_char(l_task_asgn_id));
563 l_wf_parameter_list_t.EXTEND;
564 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
565
566 l_wf_parameter_t := wf_parameter_t('ORG_TASK_ASSGN_STS_ID', to_char(l_org_assignment_status_id));
567 l_wf_parameter_list_t.EXTEND;
568 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
569
570 l_event_key := getItemKey('oracle.apps.csf.createTaskAssignment',
571 l_resource_id,
572 l_resource_type_code,
573 l_task_asgn_id,
574 p_event.getEventKey());
575
576 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
577 p_event_key => l_event_key,
578 p_parameters => l_wf_parameter_list_t,
579 p_send_date => l_send_date
580 );
581
582 end if; -- end of create assignment notification
583
584 elsif l_task_sch_update_check = 'TRUE' then
585
586 -- raise and sch_dates update alert
587 if checkAlertsEnabled(l_resource_id, l_resource_type_code) then
588
589 l_wf_parameter_t := wf_parameter_t('CSF_EVENT_TYPE', 'SCH_UPDATE');
590 l_wf_parameter_list_t.EXTEND;
591 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
592
593 l_wf_parameter_t := wf_parameter_t('TASK_ASSIGNMENT_ID', to_char(l_task_asgn_id));
594 l_wf_parameter_list_t.EXTEND;
595 l_wf_parameter_list_t(l_wf_parameter_list_t.count()) := l_wf_parameter_t;
596
597 l_event_key := getItemKey('oracle.apps.csf.updateScheduleDates',
598 l_resource_id,
599 l_resource_type_code,
600 l_task_asgn_id,
601 p_event.getEventKey());
602
603 wf_event.raise(p_event_name => 'oracle.apps.csf.alerts.sendNotification',
604 p_event_key => l_event_key,
605 p_parameters => l_wf_parameter_list_t,
606 p_send_date => l_send_date
607 );
608
609 end if;
610
611 end if; -- end of priority change
612
613 end loop;
614 close c_get_all_assignments;
615
616 end if;
617
618 end if; -- event type update assignment over
619
620 return 'SUCCESS';
621
622 end;
623
624 function sendNotification (p_subscription_guid in raw,
625 p_event in out nocopy WF_EVENT_T) return varchar2 is
626
627 l_msg_subject varchar(1000);
628 l_msg_subject2 varchar(1000);
629
630 l_task_asgn_record task_asgn_record;
631 itemkey varchar2(150);
632 l_task_asgn_id number;
633 l_task_id number;
634 l_task_audit_id number;
635 l_cust_name varchar2(200);
636 l_schedule_start_date varchar2(100);
637 l_csfw_event_type varchar2(25);
638 l_resource_id number;
639 l_resource_type varchar2(150);
640 l_resource varchar2(150);
641 l_time_out1 number;
642 l_time_out2 number;
643 itemtype varchar2(10);
644 l_auto_reject varchar2(10);
645 l_document_id varchar2(100);
646 l_org_assignment_status_id number;
647 l_curr_assignment_status_id number;
648
649 cursor c_resource_from_task_asgn_id (v_task_asgn_id number) is
650 select
651 jr.resource_id,
652 jt.resource_id,
653 jt.resource_type_code,
654 jt.assignment_status_id
655 from
656 jtf_task_assignments jt,
657 jtf_rs_resource_extns jr
658 where
659 jt.task_assignment_id = v_task_asgn_id
660 and jt.resource_id = jr.resource_id
661 and category_type(jt.resource_type_code) = jr.category;
662 begin
663 itemkey := p_event.getEventKey();
664 l_task_asgn_id := p_event.GetValueForParameter('TASK_ASSIGNMENT_ID');
665 l_task_id := p_event.GetValueForParameter('TASK_ID');
666 l_task_audit_id := p_event.GetValueForParameter('TASK_AUDIT_ID');
667 l_csfw_event_type := p_event.GetValueForParameter('CSF_EVENT_TYPE');
668 l_org_assignment_status_id := p_event.GetValueForParameter('ORG_TASK_ASSGN_STS_ID');
669
670 if l_csfw_event_type = 'CREATE' then
671
672 l_csfw_event_type := 'CREATE_EVENT';
673
674 open c_resource_from_task_asgn_id(l_task_asgn_id);
675 fetch c_resource_from_task_asgn_id into l_resource,
676 l_resource_id,
677 l_resource_type,
678 l_curr_assignment_status_id;
679 close c_resource_from_task_asgn_id;
680
681 -- check if task assignment status has changed from the time event was
682 -- generated
683 if l_org_assignment_status_id is not null
684 and l_org_assignment_status_id <> l_curr_assignment_status_id then
685 return 'SUCCESS';
686 end if;
687
688 l_resource := getWFRole(l_resource_id);
689
690 l_task_asgn_record := getTaskDetails(null, l_task_asgn_id, null);
691
692 l_cust_name := l_task_asgn_record.cust_name;
693 l_schedule_start_date := to_char(getClientTime(l_task_asgn_record.sch_st_date,
694 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
695
696 fnd_message.set_name('CSF', 'CSF_ALERTS_ASSIGNED_SUB');
697 fnd_message.set_token('CUST_NAME', l_cust_name);
698 fnd_message.set_token('SCH_START_DT', l_schedule_start_date);
699
700 l_msg_subject := fnd_message.get;
701
702 fnd_message.set_name('CSF', 'CSF_ALERTS_REMINDER_SUB');
703 fnd_message.set_token('CUST_NAME', l_cust_name);
704 fnd_message.set_token('SCH_START_DT', l_schedule_start_date);
705
706 l_msg_subject2 := fnd_message.get;
707
708 l_document_id := to_char(l_resource_id) || '-' || l_resource_type || '-' || to_char(l_task_asgn_id);
709
710 elsif l_csfw_event_type = 'DELETE' or l_csfw_event_type = 'DELETE_FOR_UPDATE' then
711
712 if l_csfw_event_type = 'DELETE' then
713
714 l_resource_id := p_event.GetValueForParameter('RESOURCE_ID');
715 l_resource_type := p_event.GetValueForParameter('RESOURCE_TYPE_CODE');
716
717 else
718
719 l_resource_id := p_event.GetValueForParameter('OLD_RESOURCE_ID');
720 l_resource_type := p_event.GetValueForParameter('OLD_RESOURCE_TYPE_CODE');
721
722 end if;
723
724 l_csfw_event_type := 'DELETE_EVENT';
725 l_resource := getWFRole(l_resource_id);
726 l_task_asgn_record := getTaskDetails(l_task_id, null, null);
727
728 l_cust_name := l_task_asgn_record.cust_name;
729 l_schedule_start_date := to_char(getClientTime(l_task_asgn_record.sch_st_date,
730 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
731
732 fnd_message.set_name('CSF', 'CSF_ALERTS_CANCEL_SUB');
733 fnd_message.set_token('CUST_NAME', l_cust_name);
734 fnd_message.set_token('SCH_START_DT', l_schedule_start_date);
735
736 l_msg_subject := fnd_message.get;
737
738 l_document_id := to_char(l_resource_id) || '-' || l_resource_type || '-' || to_char(l_task_id);
739
740 elsif l_csfw_event_type = 'SCH_UPDATE' then
741
742 l_csfw_event_type := 'SCH_UPDATE_EVENT';
743
744 open c_resource_from_task_asgn_id(l_task_asgn_id);
745 fetch c_resource_from_task_asgn_id into l_resource,
746 l_resource_id,
747 l_resource_type,
748 l_curr_assignment_status_id;
749 close c_resource_from_task_asgn_id;
750
751 l_resource := getWFRole(l_resource_id);
752
753 l_task_asgn_record := getTaskDetails(null, l_task_asgn_id, null);
754 l_cust_name := l_task_asgn_record.cust_name;
755 l_schedule_start_date := to_char(getClientTime(l_task_asgn_record.sch_st_date,
756 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
757
758
759 fnd_message.set_name('CSF', 'CSF_ALERTS_RESCHEDULE_SUB');
760 fnd_message.set_token('CUST_NAME', l_cust_name);
761 fnd_message.set_token('SCH_START_DT', l_schedule_start_date);
762
763 l_msg_subject := fnd_message.get;
764
765 l_document_id := to_char(l_resource_id) || '-' || l_resource_type || '-' || to_char(l_task_id) || '-' || to_char(l_task_audit_id);
766
767 else
768 return 'SUCCESS';
769 end if;
770
771 itemtype := 'CSFALERT';
772
773 wf_engine.createprocess(itemtype => itemtype,
774 itemkey => itemkey,
775 process => 'MAIN_PROCESS');
776
777 wf_engine.setItemAttrNumber(itemtype => itemtype,
778 itemkey => itemkey,
779 aname => 'TASK_ASSGN_ID',
780 avalue => l_task_asgn_id);
781
782 wf_engine.setItemAttrNumber(itemtype => itemtype,
783 itemkey => itemkey,
784 aname => 'RES_ID',
785 avalue => l_resource_id);
786
787 wf_engine.setItemAttrText(itemtype => itemtype,
788 itemkey => itemkey,
789 aname => 'RES_TYPE',
790 avalue => l_resource_type);
791
792 wf_engine.setItemAttrText(itemtype => itemtype,
793 itemkey => itemkey,
794 aname => 'EVENT_TYPE',
795 avalue => l_csfw_event_type);
796
797 wf_engine.setItemAttrText(itemtype => itemtype,
798 itemkey => itemkey,
799 aname => 'RESOURCE',
800 avalue => l_resource);
801
802 wf_engine.setItemAttrText(itemtype => itemtype,
803 itemkey => itemkey,
804 aname => 'DOCUMENT_ID',
805 avalue => l_document_id);
806
807 wf_engine.setItemAttrText(itemtype => itemtype,
808 itemkey => itemkey,
809 aname => 'MSG_SUBJECT',
810 avalue => l_msg_subject);
811
812 wf_engine.setItemAttrText(itemtype => itemtype,
813 itemkey => itemkey,
814 aname => 'MSG_SUBJECT2',
815 avalue => l_msg_subject2);
816
817 l_auto_reject := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_AUTO_REJECT',
818 getUserId(l_resource_id, l_resource_type),
819 21685,
820 513,
821 null,
822 null);
823 if l_auto_reject = 'Y' then
824 l_auto_reject := 'TRUE';
825 else
826 l_auto_reject := 'FALSE';
827 end if;
828
829 wf_engine.setItemAttrText(itemtype => itemtype,
830 itemkey => itemkey,
831 aname => 'AUTO_REJECT_VALUE',
832 avalue => l_auto_reject);
833
834 l_time_out1 := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_RESPONSE_TIME_MIN',
835 getUserId(l_resource_id, l_resource_type),
836 21685,
837 513,
838 null,
839 null);
840
841 wf_engine.setItemAttrNumber(itemtype => itemtype,
842 itemkey => itemkey,
843 aname => 'TIMEOUT1',
844 avalue => l_time_out1);
845
846 l_time_out2 := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_REMINDER_TIME_MIN',
847 getUserId(l_resource_id, l_resource_type),
848 21685,
849 513,
850 null,
851 null);
852
853 wf_engine.setItemAttrNumber(itemtype => itemtype,
854 itemkey => itemkey,
855 aname => 'TIMEOUT2',
856 avalue => l_time_out2);
857
858 -- original task assignment status id
859 wf_engine.setItemAttrNumber(itemtype => itemtype,
860 itemkey => itemkey,
861 aname => 'ORG_TSK_ASG_STS_ID',
862 avalue => l_org_assignment_status_id);
863
864 wf_engine.startprocess(itemtype => itemtype,
865 itemkey => itemkey);
866
867 return 'SUCCESS';
868
869 end;
870
871 procedure checkEvent (itemtype in varchar2,
872 itemkey in varchar2,
873 actid in number,
874 funcmode in varchar2,
875 resultout out nocopy varchar2) is
876
877 l_event_type varchar2(20);
878 begin
879 l_event_type := wf_engine.GetItemAttrText(itemtype => itemtype,
880 itemkey => itemkey,
881 aname => 'EVENT_TYPE');
882 resultout := 'COMPLETE:' || l_event_type;
883 end;
884
885 procedure check_again (itemtype in varchar2,
886 itemkey in varchar2,
887 actid in number,
888 funcmode in varchar2,
889 resultout out nocopy varchar2) is
890
891 l_task_assgn_id number;
892 l_task_id number;
893 l_reminder_timeout number;
894 l_resource_id number;
895 l_resource_type varchar2(100);
896 l_org_assignment_status_id number;
897 l_curr_assignment_status_id number;
898
899 cursor c_task_assgn_detail (v_task_assgn_id number) is
900 SELECT distinct jtb.task_id,
901 jta.resource_id,
902 jta.resource_type_code,
903 jta.assignment_status_id
904 FROM jtf_tasks_b jtb,
905 jtf_task_assignments jta,
906 jtf_task_priorities_vl jp_vl,
907 jtf_task_types_vl jtt_vl
908 WHERE jta.task_assignment_id = v_task_assgn_id
909 and jta.task_id = jtb.task_id
910 and nvl(jtb.scheduled_start_date, sysdate - 1) > sysdate
911 and nvl(jtb.scheduled_end_date, sysdate - 1) > sysdate
912 and jta.assignment_status_id in (
913 select
914 task_status_id
915 from
916 jtf_task_statuses_b
917 where
918 usage = 'TASK'
919 and nvl(assigned_flag, 'N') = 'Y'
920 and nvl(assignment_status_flag, 'N') = 'Y'
921 and sysdate between nvl(start_date_active, sysdate)
922 and nvl(end_date_active, sysdate + 1)
923 )
924 and jtb.task_type_id = jtt_vl.task_type_id
925 and jtt_vl.task_type_id in (
926 select
927 task_type_id
928 from
929 JTF_TASK_TYPES_B
930 where
931 rule = 'DISPATCH'
932 ) -- only dispatch tasks
933 and nvl(jtt_vl.schedule_flag, 'N') = 'Y' -- schedulable tasks
934 and sysdate between nvl(jtt_vl.start_date_active, sysdate)
935 and nvl(jtt_vl.end_date_active, sysdate + 1)
936 and jtb.task_priority_id = jp_vl.task_priority_id
937 and sysdate between nvl(jp_vl.start_date_active, sysdate)
938 and nvl(jp_vl.end_date_active, sysdate + 1)
939 and jp_vl.importance_level <= fnd_profile.VALUE_SPECIFIC('CSF_ALERT_PRIORITY',
940 getUserId(jta.resource_id, jta.resource_type_code),
941 21685,
942 513,
943 null,
944 null);
945 begin
946
947 resultout := 'COMPLETE:F';
948
949 l_task_assgn_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
950 itemkey => itemkey,
951 aname => 'TASK_ASSGN_ID');
952
953 l_org_assignment_status_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
954 itemkey => itemkey,
955 aname => 'ORG_TSK_ASG_STS_ID');
956
957
958 open c_task_assgn_detail(l_task_assgn_id);
959 fetch c_task_assgn_detail into l_task_id, l_resource_id, l_resource_type, l_curr_assignment_status_id;
960 close c_task_assgn_detail;
961
962 if l_org_assignment_status_id is null then
963 l_org_assignment_status_id := l_curr_assignment_status_id;
964 end if;
965
966 if l_task_id is not null
967 and l_org_assignment_status_id = l_curr_assignment_status_id then
968 -- check for timeout2 profile
969 -- if it is null then do not send reminder
970
971 l_reminder_timeout := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_REMINDER_TIME_MIN',
972 getUserId(l_resource_id, l_resource_type),
973 21685,
974 513,
975 null,
976 null);
977
978 if l_reminder_timeout is not null and l_reminder_timeout > 0 then
979 resultout := 'COMPLETE:T';
980 end if;
981
982 end if;
983
984 end;
985
986 procedure check_auto_reject (itemtype in varchar2,
987 itemkey in varchar2,
988 actid in number,
989 funcmode in varchar2,
990 resultout out nocopy varchar2) is
991
992 l_AUTO_REJECT_VALUE varchar2(25);
993
994 begin
995 resultout := 'COMPLETE:F';
996 l_AUTO_REJECT_VALUE := wf_engine.GetItemAttrText(itemtype => itemtype,
997 itemkey => itemkey,
998 aname => 'AUTO_REJECT_VALUE');
999 if l_AUTO_REJECT_VALUE = 'TRUE' then
1000 -- bug # 5845177
1001 wf_engine.setItemAttrText(itemtype => itemtype,
1002 itemkey => itemkey,
1003 aname => 'IS_AUTO_REJECT',
1004 avalue => 'Y');
1005 resultout := 'COMPLETE:T';
1006 end if;
1007 end;
1008
1009 procedure accept_assgn (itemtype in varchar2,
1010 itemkey in varchar2,
1011 actid in number,
1012 funcmode in varchar2,
1013 resultout out nocopy varchar2) is
1014
1015 l_task_assgn_id number;
1016 l_object_version_number number;
1017
1018 l_tmp_user_id number;
1019 l_tmp_resp_id number;
1020 l_tmp_resp_apps_id number;
1021
1022 l_resource_id number;
1023 l_resource_type varchar2(100);
1024 p_user_id number;
1025
1026 l_return_status varchar2(10);
1027 l_msg_count number;
1028 l_msg_data varchar2(2000);
1029 l_task_object_version_number number;
1030 l_task_status_id number;
1031 --l_task_status_name varchar2(100);
1032
1033 l_org_assignment_status_id number;
1034 l_curr_assignment_status_id number;
1035
1036 cursor c_task_assgn_detail (v_task_assgn_id number) is
1037 SELECT jta.object_version_number, jta.assignment_status_id
1038 FROM
1039 jtf_task_assignments jta
1040 WHERE jta.task_assignment_id = v_task_assgn_id;
1041 begin
1042 l_task_assgn_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1043 itemkey => itemkey,
1044 aname => 'TASK_ASSGN_ID');
1045
1046 l_org_assignment_status_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1047 itemkey => itemkey,
1048 aname => 'ORG_TSK_ASG_STS_ID');
1049
1050 open c_task_assgn_detail(l_task_assgn_id);
1051 fetch c_task_assgn_detail into l_object_version_number, l_curr_assignment_status_id;
1052 close c_task_assgn_detail;
1053
1054 -- check if task assignment status has been changed from the original value
1055 if l_org_assignment_status_id is null then
1056 l_org_assignment_status_id := l_curr_assignment_status_id;
1057 end if;
1058
1059 resultout := 'COMPLETE';
1060
1061 if l_org_assignment_status_id = l_curr_assignment_status_id then
1062
1063 l_resource_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1064 itemkey => itemkey,
1065 aname => 'RES_ID');
1066
1067 l_resource_type := wf_engine.GetItemAttrText(itemtype => itemtype,
1068 itemkey => itemkey,
1069 aname => 'RES_TYPE');
1070
1071 p_user_id := getUserId(l_resource_id, l_resource_type);
1072
1073 if p_user_id is null then
1074 p_user_id := 0;
1075 end if;
1076
1077 -- call API
1078 l_tmp_user_id := fnd_global.USER_ID;
1079 l_tmp_resp_id := fnd_global.RESP_ID;
1080 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
1081
1082 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
1083
1084 csf_task_assignments_pub.update_assignment_status(
1085 p_api_version => 1.0,
1086 p_task_assignment_id => l_task_assgn_id,
1087 p_assignment_status_id => fnd_profile.VALUE_SPECIFIC('CSF_DEFAULT_ACCEPTED_STATUS',
1088 getUserId(l_resource_id, l_resource_type),
1089 21685,
1090 513,
1091 null,
1092 null), -- accepted
1093 p_object_version_number => l_object_version_number,
1094 x_return_status => l_return_status,
1095 x_msg_count => l_msg_count,
1096 x_msg_data => l_msg_data,
1097 x_task_object_version_number => l_task_object_version_number,
1098 x_task_status_id => l_task_status_id
1099 );
1100
1101 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
1102
1103 if l_return_status = 'S' then
1104 resultout := 'COMPLETE';
1105 else
1106 resultout := 'ERROR' || ':' || l_msg_data;
1107 end if;
1108
1109 end if; -- check for asgn status chng check
1110 end;
1111
1112 procedure cancel_assgn (itemtype in varchar2,
1113 itemkey in varchar2,
1114 actid in number,
1115 funcmode in varchar2,
1116 resultout out nocopy varchar2) is
1117
1118 l_task_assgn_id number;
1119 l_object_version_number number;
1120
1121 l_tmp_user_id number;
1122 l_tmp_resp_id number;
1123 l_tmp_resp_apps_id number;
1124
1125 l_resource_id number;
1126 l_resource_type varchar2(100);
1127 p_user_id number;
1128
1129 l_return_status varchar2(10);
1130 l_msg_count number;
1131 l_msg_data varchar2(2000);
1132 l_task_object_version_number number;
1133 l_task_status_id number;
1134 --l_task_status_name varchar2(100);
1135
1136 l_org_assignment_status_id number;
1137 l_curr_assignment_status_id number;
1138
1139 cursor c_task_assgn_detail (v_task_assgn_id number) is
1140 SELECT jta.object_version_number, jta.assignment_status_id
1141 FROM
1142 jtf_task_assignments jta
1143 WHERE jta.task_assignment_id = v_task_assgn_id;
1144
1145 -- bug # 5220702
1146 l_auto_reject varchar2(1);
1147 l_task_id number;
1148 l_task_asgn_record task_asgn_record;
1149 l_cust_name varchar2(250);
1150 l_schedule_start_date varchar2(100);
1151 l_msg_subject varchar2(1000);
1152 l_document_id varchar2(250);
1153
1154 cursor c_get_task_id (v_task_asgn_id number) is
1155 select task_id
1156 from jtf_task_assignments
1157 where task_assignment_id = v_task_asgn_id;
1158 begin
1159 l_task_assgn_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1160 itemkey => itemkey,
1161 aname => 'TASK_ASSGN_ID');
1162
1163 l_org_assignment_status_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1164 itemkey => itemkey,
1165 aname => 'ORG_TSK_ASG_STS_ID');
1166
1167 open c_task_assgn_detail(l_task_assgn_id);
1168 fetch c_task_assgn_detail into l_object_version_number, l_curr_assignment_status_id;
1169 close c_task_assgn_detail;
1170
1171 -- check if task assignment status has been changed from the original value
1172
1173 if l_org_assignment_status_id is null then
1174 l_org_assignment_status_id := l_curr_assignment_status_id;
1175 end if;
1176
1177 resultout := 'COMPLETE:F';
1178 if l_org_assignment_status_id = l_curr_assignment_status_id then
1179
1180 l_resource_id := wf_engine.GetItemAttrNumber(itemtype => itemtype,
1181 itemkey => itemkey,
1182 aname => 'RES_ID');
1183
1184 l_resource_type := wf_engine.GetItemAttrText(itemtype => itemtype,
1185 itemkey => itemkey,
1186 aname => 'RES_TYPE');
1187
1188 p_user_id := getUserId(l_resource_id, l_resource_type);
1189
1190 if p_user_id is null then
1191 p_user_id := 0;
1192 end if;
1193
1194 -- call API
1195 l_tmp_user_id := fnd_global.USER_ID;
1196 l_tmp_resp_id := fnd_global.RESP_ID;
1197 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
1198
1199 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
1200
1201 csf_task_assignments_pub.update_assignment_status(
1202 p_api_version => 1.0,
1203 p_task_assignment_id => l_task_assgn_id,
1204 p_assignment_status_id => fnd_profile.VALUE_SPECIFIC('CSF_DEFAULT_REJECTED_STATUS',
1205 getUserId(l_resource_id, l_resource_type),
1206 21685,
1207 513,
1208 null,
1209 null), -- Rejected
1210 p_object_version_number => l_object_version_number,
1211 x_return_status => l_return_status,
1212 x_msg_count => l_msg_count,
1213 x_msg_data => l_msg_data,
1214 x_task_object_version_number => l_task_object_version_number,
1215 x_task_status_id => l_task_status_id
1216 );
1217
1218 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
1219
1220 if l_return_status = 'S' then
1221
1222 -- bug # 5220702
1223 l_auto_reject := wf_engine.GetItemAttrText(itemtype => itemtype,
1224 itemkey => itemkey,
1225 aname => 'IS_AUTO_REJECT');
1226 if l_auto_reject = 'Y' then
1227 -- modify subject and document_id
1228 open c_get_task_id(l_task_assgn_id);
1229 fetch c_get_task_id into l_task_id;
1230 close c_get_task_id;
1231
1232 l_task_asgn_record := getTaskDetails(l_task_id, null, null);
1233
1234 l_cust_name := l_task_asgn_record.cust_name;
1235 l_schedule_start_date := to_char(getClientTime(l_task_asgn_record.sch_st_date,
1236 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
1237
1238 fnd_message.set_name('CSF', 'CSF_ALERTS_CANCEL_SUB');
1239 fnd_message.set_token('CUST_NAME', l_cust_name);
1240 fnd_message.set_token('SCH_START_DT', l_schedule_start_date);
1241
1242 l_msg_subject := fnd_message.get;
1243
1244 l_document_id := to_char(l_resource_id) || '-' || l_resource_type || '-' || to_char(l_task_id);
1245
1246 wf_engine.setItemAttrText(itemtype => itemtype,
1247 itemkey => itemkey,
1248 aname => 'DOCUMENT_ID',
1249 avalue => l_document_id);
1250
1251 wf_engine.setItemAttrText(itemtype => itemtype,
1252 itemkey => itemkey,
1253 aname => 'MSG_SUBJECT',
1254 avalue => l_msg_subject);
1255
1256 resultout := 'COMPLETE:T';
1257 else
1258 resultout := 'COMPLETE:F';
1259 end if;
1260 else
1261 resultout := 'ERROR' || ':' || l_msg_data;
1262 end if;
1263
1264 end if; -- check for asgn status chng check
1265
1266 end;
1267
1268 function getSendDate (p_resource_id number,
1269 p_resource_type_code varchar2,
1270 p_scheduled_start_date date,
1271 p_scheduled_end_date date) return date is
1272 l_return_date date;
1273 l_profile_value varchar2(100);
1274 l_minutes_before number;
1275 l_shifts CSF_RESOURCE_PUB.shift_tbl_type;
1276 X_RETURN_STATUS VARCHAR2(200);
1277 X_MSG_COUNT NUMBER;
1278 X_MSG_DATA VARCHAR2(200);
1279 begin
1280 l_return_date := null;
1281 l_profile_value := fnd_profile.value_specific('CSF_ALERT_SEND_PREF',
1282 getUserId(p_resource_id, p_resource_type_code),
1283 21685,
1284 513,
1285 null,
1286 null);
1287
1288 if l_profile_value = 'SHIFT_DAY' then -- During Shift
1289
1290 -- fetch shift start date time for the given schedule dates
1291 CSF_RESOURCE_PUB.GET_RESOURCE_SHIFTS(
1292 P_API_VERSION => 1.0,
1293 P_RESOURCE_ID => p_resource_id,
1294 P_RESOURCE_TYPE => p_resource_type_code,
1295 P_START_DATE => p_scheduled_start_date,
1296 P_END_DATE => p_scheduled_end_date,
1297 X_RETURN_STATUS => X_RETURN_STATUS,
1298 X_MSG_COUNT => X_MSG_COUNT,
1299 X_MSG_DATA => X_MSG_DATA,
1300 X_SHIFTS => l_shifts
1301 );
1302
1303 if (X_RETURN_STATUS = 'S') and (l_shifts is not null) and (l_shifts.count > 0) then
1304 l_return_date := l_shifts(1).start_datetime;
1305
1306 -- if shift start is less than current date time then send immediately
1307 if l_return_date > sysdate then
1308 -- fetch next shift start from today
1309 CSF_RESOURCE_PUB.GET_RESOURCE_SHIFTS(
1310 P_API_VERSION => 1.0,
1311 P_RESOURCE_ID => p_resource_id,
1312 P_RESOURCE_TYPE => p_resource_type_code,
1313 P_START_DATE => trunc(sysdate) + 1,
1314 P_END_DATE => trunc(sysdate) + 2,
1315 X_RETURN_STATUS => X_RETURN_STATUS,
1316 X_MSG_COUNT => X_MSG_COUNT,
1317 X_MSG_DATA => X_MSG_DATA,
1318 X_SHIFTS => l_shifts
1319 );
1320
1321 if (X_RETURN_STATUS = 'S') and (l_shifts is not null) and (l_shifts.count > 0) then
1322 l_return_date := l_shifts(1).start_datetime;
1323
1324 -- fetch profile value for how many minutes before should we send the notification
1325 l_minutes_before := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_MIN_BEFORE_SHIFT',
1326 getUserId(p_resource_id, p_resource_type_code),
1327 21685,
1328 513,
1329 null,
1330 null);
1331
1332 l_return_date := (l_return_date - l_minutes_before / 1440);
1333
1334 -- for testing purpose
1335 -- l_return_date := sysdate + 20/86400;
1336
1337 end if;
1338
1339 end if;
1340
1341 end if;
1342
1343 elsif l_profile_value = 'SCHEDULE_DAY' then -- Scheduled Day
1344
1345 -- fetch shift start date time for the given schedule dates
1346 CSF_RESOURCE_PUB.GET_RESOURCE_SHIFTS(
1347 P_API_VERSION => 1.0,
1348 P_RESOURCE_ID => p_resource_id,
1349 P_RESOURCE_TYPE => p_resource_type_code,
1350 P_START_DATE => p_scheduled_start_date,
1351 P_END_DATE => p_scheduled_end_date,
1352 X_RETURN_STATUS => X_RETURN_STATUS,
1353 X_MSG_COUNT => X_MSG_COUNT,
1354 X_MSG_DATA => X_MSG_DATA,
1355 X_SHIFTS => l_shifts
1356 );
1357
1358 if (X_RETURN_STATUS = 'S') and (l_shifts is not null) and (l_shifts.count > 0) then
1359 l_return_date := l_shifts(1).start_datetime;
1360
1361 -- fetch profile value for how many minutes before should we send the notification
1362 l_minutes_before := fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_MIN_BEFORE_SHIFT',
1363 getUserId(p_resource_id, p_resource_type_code),
1364 21685,
1365 513,
1366 null,
1367 null);
1368
1369 l_return_date := (l_return_date - l_minutes_before / 1440);
1370
1371 -- for testing purpose
1372 -- l_return_date := sysdate + 20/86400;
1373
1374 -- if shift start is less than current date time then send immediately
1375 if l_return_date <= sysdate then
1376 l_return_date := null;
1377 end if;
1378 end if;
1379
1380 else -- Immediate
1381 l_return_date := null;
1382 end if;
1383
1384 return l_return_date;
1385 end;
1386
1387 function getUserId (p_resource_id number,
1388 p_resource_type varchar2) return number is
1389 l_user_id number;
1390 cursor c_user_id (v_resource_id number, v_category varchar2) is
1391 select user_id from jtf_rs_resource_extns where resource_id = v_resource_id and category = v_category;
1392 begin
1393 l_user_id := 0;
1394
1395 open c_user_id (p_resource_id, category_type(p_resource_type));
1396 fetch c_user_id into l_user_id;
1397 close c_user_id;
1398
1399 return l_user_id;
1400 end;
1401
1402 function getUserName (p_resource_id number,
1403 p_resource_type varchar2) return varchar2 is
1404 l_user_name varchar2(100);
1405 begin
1406 return l_user_name;
1407 end;
1408
1409 FUNCTION category_type ( p_rs_category varchar2 ) return varchar2 is
1410 begin
1411 if p_rs_category = 'RS_EMPLOYEE' then
1412 return 'EMPLOYEE';
1413 elsif p_rs_category = 'RS_PARTNER' then
1414 return 'PARTNER';
1415 elsif p_rs_category = 'RS_SUPPLIER_CONTACT' then
1416 return 'SUPPLIER_CONTACT';
1417 elsif p_rs_category = 'RS_PARTY' then
1418 return 'PARTY';
1419 elsif p_rs_category = 'RS_OTHER' then
1420 return 'OTHER';
1421 else
1422 return null;
1423 end if;
1424 end;
1425
1426 function getItemKey (p_event_type varchar2,
1427 p_resource_id number,
1428 p_resource_type_code varchar2,
1429 p_task_assignment_id varchar2,
1430 p_old_event_id varchar2) return varchar2 is
1431
1432 l_new_item_key varchar2(240);
1433 l_old_event_id varchar2(20);
1434 begin
1435 l_old_event_id := substr(p_old_event_id, (INSTR(p_old_event_id, '-') + 1));
1436 l_new_item_key := '';
1437 l_new_item_key := l_new_item_key || p_event_type
1438 || '-' || to_char(p_resource_id)
1439 || '-' || p_resource_type_code
1440 || '-' || to_char(p_task_assignment_id)
1441 || '-' || l_old_event_id;
1442 return l_new_item_key;
1443 end;
1444
1445 function checkAlertsEnabled(p_resource_id number,
1446 p_resource_type_code varchar2) return boolean is
1447 l_return_value boolean;
1448 begin
1449 l_return_value := false;
1450
1451 if fnd_profile.VALUE_SPECIFIC('CSF_ALERTS_ENABLE',
1452 getUserId(p_resource_id, p_resource_type_code),
1453 21685,
1454 513,
1455 null,
1456 null) = 'Y' then
1457 l_return_value := true;
1458 end if;
1459 return l_return_value;
1460 end;
1461
1462 procedure getAssignedMessage(document_id varchar2,
1463 display_type varchar2,
1464 document in out nocopy varchar2,
1465 document_type in out nocopy varchar2) is
1466 l_resource_id number;
1467 l_resource_type varchar2(100);
1468 l_task_asgn_id number;
1469 l_message varchar2(32000);
1470 l_task_detail task_asgn_record;
1471 l_message_header varchar2(1000);
1472
1473 l_tmp_user_id number;
1474 l_tmp_resp_id number;
1475 l_tmp_resp_apps_id number;
1476 p_user_id number;
1477
1478 -- notes
1479 l_is_notes varchar2(1);
1480 l_notes varchar2(30000);
1481 cursor c_notes (v_task_asgn_id number) is
1482 select
1483 n.notes
1484 from
1485 jtf_notes_vl n,
1486 jtf_task_assignments a
1487 where
1488 n.source_object_code = 'TASK'
1489 and n.source_object_id = a.task_id
1490 and a.task_assignment_id = v_task_asgn_id
1491 union select
1492 n.notes
1493 from
1494 jtf_notes_vl n,
1495 jtf_task_assignments a,
1496 jtf_tasks_b t
1497 where
1498 n.source_object_code = 'SR'
1499 and n.source_object_id = t.source_object_id
1500 and t.task_id = a.task_id
1501 and a.task_assignment_id = v_task_asgn_id;
1502 begin
1503
1504 l_resource_id := to_number(substr(document_id, 1, instr(document_id, '-', 1, 1) - 1));
1505 l_resource_type := substr(document_id, instr(document_id, '-', 1, 1) + 1, instr(document_id, '-', 1, 2) - instr(document_id, '-', 1, 1) - 1);
1506 l_task_asgn_id := to_number(substr(document_id, instr(document_id, '-', 1, 2) + 1));
1507
1508
1509 p_user_id := getUserId(l_resource_id, l_resource_type);
1510
1511
1512 if p_user_id is null then
1513 p_user_id := 0;
1514 end if;
1515
1516 -- call API
1517 l_tmp_user_id := fnd_global.USER_ID;
1518 l_tmp_resp_id := fnd_global.RESP_ID;
1519 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
1520
1521 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
1522
1523 l_task_detail := getTaskDetails(null, l_task_asgn_id, null);
1524
1525
1526 fnd_message.set_name('CSF', 'CSF_ALERTS_ASSIGNED_HDR');
1527 l_message_header := fnd_message.get;
1528
1529 if display_type = 'text/html' then
1530
1531 l_message := '<P>';
1532 l_message := l_message || l_message_header || '</P>';
1533 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':</B></P>';
1534 l_message := l_message || '<P>';
1535 l_message := l_message || '<TABLE cellSpacing=0 cellPadding=0 border=1>';
1536 l_message := l_message || '<TR>';
1537 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_TASK') || '</B></TD>';
1538 l_message := l_message || '<TD>' || l_task_detail.task_number || ' ' || l_task_detail.task_name || '</TD>';
1539 l_message := l_message || '</TR>';
1540 l_message := l_message || '<TR>';
1541 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_DESCRIPTION') || '</B></TD>';
1542 l_message := l_message || '<TD>' || l_task_detail.task_desc || '</TD>';
1543 l_message := l_message || '</TR>';
1544 l_message := l_message || '<TR>';
1545 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_START') || '</B></TD>';
1546 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_st_date,
1547 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
1548 || '</TD>';
1549 l_message := l_message || '</TR>';
1550 l_message := l_message || '<TR>';
1551 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_END') || '</B></TD>';
1552 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_end_date,
1553 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
1554 || '</TD>';
1555 l_message := l_message || '</TR>';
1556 l_message := l_message || '<TR>';
1557 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || '</B></TD>';
1558 l_message := l_message || '<TD>' || l_task_detail.planned_effort || '</TD>';
1559 l_message := l_message || '</TR>';
1560 l_message := l_message || '<TR>';
1561 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PRIORITY') || '</B></TD>';
1562 l_message := l_message || '<TD>' || l_task_detail.priority || '</TD>';
1563 l_message := l_message || '</TR>';
1564 l_message := l_message || '<TR>';
1565 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_STATUS') || '</B></TD>';
1566 l_message := l_message || '<TD>' || l_task_detail.asgm_sts_name || '</TD>';
1567 l_message := l_message || '</TR>';
1568 l_message := l_message || '</TABLE>';
1569 l_message := l_message || '</P>';
1570 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ': </B>';
1571 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
1572 l_message := l_message || '</P>';
1573
1574 if l_task_detail.product_nr is not null then
1575 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_ITEM') || '</B>: ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
1576 if l_task_detail.item_serial is not null then
1577 l_message := l_message || '(' || l_task_detail.item_serial || ')';
1578 end if;
1579 l_message := l_message || '</P>';
1580 end if;
1581
1582 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_CUSTOMER') || '</B>:<BR/>';
1583 l_message := l_message || l_task_detail.cust_name || '<BR/>';
1584 l_message := l_message || l_task_detail.cust_address || '<BR/>';
1585
1586 if l_task_detail.contact_name is not null then
1587 l_message := l_message || '<B>' || getPrompt('CSF_ALERTS_CONTACT') || '</B>: ' || l_task_detail.contact_name || '<BR/>';
1588 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
1589 end if;
1590
1591 l_message := l_message || '</P>';
1592
1593 -- notes
1594 l_is_notes := 'N';
1595
1596 open c_notes(l_task_asgn_id);
1597 loop
1598 fetch c_notes into l_notes;
1599 exit when c_notes%NOTFOUND;
1600
1601 if l_is_notes = 'N' then
1602 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_NOTES') || ':</B></P>';
1603 l_is_notes := 'Y';
1604 end if;
1605
1606 l_message := l_message || l_notes || '<BR/>';
1607
1608 end loop;
1609 close c_notes;
1610
1611 else
1612
1613 l_message := '';
1614 l_message := l_message || '
1615 ' || l_message_header;
1616 l_message := l_message || '
1617 ' || '
1618 ' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':';
1619 l_message := l_message || '
1620 ' || getPrompt('CSF_ALERTS_TASK') || ': ';
1621 l_message := l_message || l_task_detail.task_number || ' ' || l_task_detail.task_name;
1622 l_message := l_message || '
1623 ' || getPrompt('CSF_ALERTS_DESCRIPTION') || ': ';
1624 l_message := l_message || l_task_detail.task_desc;
1625 l_message := l_message || '
1626 ' || getPrompt('CSF_ALERTS_SCHEDULE_START') || ': ';
1627 l_message := l_message || to_char(getClientTime(l_task_detail.sch_st_date,
1628 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
1629 l_message := l_message || '
1630 ' || getPrompt('CSF_ALERTS_SCHEDULE_END') || ': ';
1631 l_message := l_message || to_char(getClientTime(l_task_detail.sch_end_date,
1632 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
1633 l_message := l_message || '
1634 ' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || ': ';
1635 l_message := l_message || l_task_detail.planned_effort;
1636 l_message := l_message || '
1637 ' || getPrompt('CSF_ALERTS_PRIORITY') || ': ';
1638 l_message := l_message || l_task_detail.priority;
1639 l_message := l_message || '
1640 ' || getPrompt('CSF_ALERTS_STATUS') || ': ';
1641 l_message := l_message || l_task_detail.asgm_sts_name;
1642 l_message := l_message || '
1643 ' || '
1644 ' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ': ';
1645 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
1646
1647 if l_task_detail.product_nr is not null then
1648 l_message := l_message || '
1649 ' || '
1650 ' || getPrompt('CSF_ALERTS_ITEM') || ': ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
1651 if l_task_detail.item_serial is not null then
1652 l_message := l_message || '(' || l_task_detail.item_serial || ')';
1653 end if;
1654 end if;
1655
1656 l_message := l_message || '
1657 ' || '
1658 ' || getPrompt('CSF_ALERTS_CUSTOMER') || ': ';
1659 l_message := l_message || '
1660 ' || l_task_detail.cust_name;
1661 l_message := l_message || '
1662 ' || l_task_detail.cust_address;
1663
1664 if l_task_detail.contact_name is not null then
1665 l_message := l_message || '
1666 ' || '
1667 ' || getPrompt('CSF_ALERTS_CONTACT') || ': ' || l_task_detail.contact_name;
1668 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
1669 end if;
1670
1671 -- notes
1672 l_is_notes := 'N';
1673
1674 open c_notes(l_task_asgn_id);
1675 loop
1676 fetch c_notes into l_notes;
1677 exit when c_notes%NOTFOUND;
1678
1679 if l_is_notes = 'N' then
1680 l_message := l_message || '
1681 ' || getPrompt('CSF_ALERTS_NOTES') || ':';
1682 l_is_notes := 'Y';
1683 end if;
1684
1685 l_message := l_message || l_notes || '
1686 ';
1687
1688 end loop;
1689 close c_notes;
1690
1691 end if;
1692
1693 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
1694
1695 document := l_message;
1696
1697 end;
1698
1699 procedure getReminderMessage(document_id varchar2,
1700 display_type varchar2,
1701 document in out nocopy varchar2,
1702 document_type in out nocopy varchar2) is
1703 l_resource_id number;
1704 l_resource_type varchar2(100);
1705 l_task_asgn_id number;
1706
1707 l_message varchar2(32000);
1708 l_task_detail task_asgn_record;
1709 l_message_header1 varchar2(1000);
1710 l_message_header2 varchar2(1000);
1711
1712 l_tmp_user_id number;
1713 l_tmp_resp_id number;
1714 l_tmp_resp_apps_id number;
1715 p_user_id number;
1716
1717 -- notes
1718 l_is_notes varchar2(1);
1719 l_notes varchar2(30000);
1720 cursor c_notes (v_task_asgn_id number) is
1721 select
1722 n.notes
1723 from
1724 jtf_notes_vl n,
1725 jtf_task_assignments a
1726 where
1727 n.source_object_code = 'TASK'
1728 and n.source_object_id = a.task_id
1729 and a.task_assignment_id = v_task_asgn_id
1730 union select
1731 n.notes
1732 from
1733 jtf_notes_vl n,
1734 jtf_task_assignments a,
1735 jtf_tasks_b t
1736 where
1737 n.source_object_code = 'SR'
1738 and n.source_object_id = t.source_object_id
1739 and t.task_id = a.task_id
1740 and a.task_assignment_id = v_task_asgn_id;
1741 begin
1742
1743 l_resource_id := to_number(substr(document_id, 1, instr(document_id, '-', 1, 1) - 1));
1744 l_resource_type := substr(document_id, instr(document_id, '-', 1, 1) + 1, instr(document_id, '-', 1, 2) - instr(document_id, '-', 1, 1) - 1);
1745 l_task_asgn_id := to_number(substr(document_id, instr(document_id, '-', 1, 2) + 1));
1746
1747 p_user_id := getUserId(l_resource_id, l_resource_type);
1748
1749 if p_user_id is null then
1750 p_user_id := 0;
1751 end if;
1752
1753 -- call API
1754 l_tmp_user_id := fnd_global.USER_ID;
1755 l_tmp_resp_id := fnd_global.RESP_ID;
1756 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
1757
1758 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
1759
1760 l_task_detail := getTaskDetails(null, l_task_asgn_id, null);
1761
1762 fnd_message.set_name('CSF', 'CSF_ALERTS_REMINDER_HDR');
1763 l_message_header1 := fnd_message.get;
1764 fnd_message.set_name('CSF', 'CSF_ALERTS_ASSIGNED_HDR');
1765 l_message_header2 := fnd_message.get;
1766
1767 if display_type = 'text/html' then
1768
1769 l_message := '<P>';
1770 l_message := l_message || '<B>' || l_message_header1 || '</B>';
1771 l_message := l_message || '<P>';
1772 l_message := l_message || l_message_header2 || '</P>';
1773 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':</B></P>';
1774 l_message := l_message || '<P>';
1775 l_message := l_message || '<TABLE cellSpacing=0 cellPadding=0 border=1>';
1776 l_message := l_message || '<TR>';
1777 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_TASK') || '</B></TD>';
1778 l_message := l_message || '<TD>' || l_task_detail.task_number || ' ' || l_task_detail.task_name || '</TD>';
1779 l_message := l_message || '</TR>';
1780 l_message := l_message || '<TR>';
1781 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_DESCRIPTION') || '</B></TD>';
1782 l_message := l_message || '<TD>' || l_task_detail.task_desc || '</TD>';
1783 l_message := l_message || '</TR>';
1784 l_message := l_message || '<TR>';
1785 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_START') || '</B></TD>';
1786 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_st_date,
1787 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
1788 || '</TD>';
1789 l_message := l_message || '</TR>';
1790 l_message := l_message || '<TR>';
1791 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_END') || '</B></TD>';
1792 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_end_date,
1793 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
1794 || '</TD>';
1795 l_message := l_message || '</TR>';
1796 l_message := l_message || '<TR>';
1797 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || '</B></TD>';
1798 l_message := l_message || '<TD>' || l_task_detail.planned_effort || '</TD>';
1799 l_message := l_message || '</TR>';
1800 l_message := l_message || '<TR>';
1801 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PRIORITY') || '</B></TD>';
1802 l_message := l_message || '<TD>' || l_task_detail.priority || '</TD>';
1803 l_message := l_message || '</TR>';
1804 l_message := l_message || '<TR>';
1805 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_STATUS') || '</B></TD>';
1806 l_message := l_message || '<TD>' || l_task_detail.asgm_sts_name || '</TD>';
1807 l_message := l_message || '</TR>';
1808 l_message := l_message || '</TABLE>';
1809 l_message := l_message || '</P>';
1810 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ':</B>';
1811 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
1812 l_message := l_message || '</P>';
1813
1814 if l_task_detail.product_nr is not null then
1815 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_ITEM') || '</B>: ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
1816 if l_task_detail.item_serial is not null then
1817 l_message := l_message || '(' || l_task_detail.item_serial || ')';
1818 end if;
1819 l_message := l_message || '</P>';
1820 end if;
1821
1822 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_CUSTOMER') || '</B>:<BR/>';
1823 l_message := l_message || l_task_detail.cust_name || '<BR/>';
1824 l_message := l_message || l_task_detail.cust_address || '<BR/>';
1825
1826 if l_task_detail.contact_name is not null then
1827 l_message := l_message || '<B>' || getPrompt('CSF_ALERTS_CONTACT') || '</B>: ' || l_task_detail.contact_name || '<BR/>';
1828 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
1829 end if;
1830
1831 l_message := l_message || '</P>';
1832
1833 -- notes
1834 l_is_notes := 'N';
1835
1836 open c_notes(l_task_asgn_id);
1837 loop
1838 fetch c_notes into l_notes;
1839 exit when c_notes%NOTFOUND;
1840
1841 if l_is_notes = 'N' then
1842 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_NOTES') || ':</B></P>';
1843 l_is_notes := 'Y';
1844 end if;
1845
1846 l_message := l_message || l_notes || '<BR/>';
1847
1848 end loop;
1849 close c_notes;
1850
1851 else
1852
1853 l_message := '
1854 ' || l_message_header1;
1855 l_message := l_message || '
1856 ' || '
1857 ' || l_message_header2;
1858 l_message := l_message || '
1859 ' || '
1860 ' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':';
1861 l_message := l_message || '
1862 ' || getPrompt('CSF_ALERTS_TASK') || ': ';
1863 l_message := l_message || l_task_detail.task_number || ' ' || l_task_detail.task_name;
1864 l_message := l_message || '
1865 ' || getPrompt('CSF_ALERTS_DESCRIPTION') || ': ';
1866 l_message := l_message || l_task_detail.task_desc;
1867 l_message := l_message || '
1868 ' || getPrompt('CSF_ALERTS_SCHEDULE_START') || ': ';
1869 l_message := l_message || to_char(getClientTime(l_task_detail.sch_st_date,
1870 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
1871 l_message := l_message || '
1872 ' || getPrompt('CSF_ALERTS_SCHEDULE_END') || ': ';
1873 l_message := l_message || to_char(getClientTime(l_task_detail.sch_end_date,
1874 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
1875 l_message := l_message || '
1876 ' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || ': ';
1877 l_message := l_message || l_task_detail.planned_effort;
1878 l_message := l_message || '
1879 ' || getPrompt('CSF_ALERTS_PRIORITY') || ': ';
1880 l_message := l_message || l_task_detail.priority;
1881 l_message := l_message || '
1882 ' || getPrompt('CSF_ALERTS_STATUS') || ': ';
1883 l_message := l_message || l_task_detail.asgm_sts_name;
1884 l_message := l_message || '
1885 ' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ': ';
1886 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
1887
1888 if l_task_detail.product_nr is not null then
1889 l_message := l_message || '
1890 ' || '
1891 ' || getPrompt('CSF_ALERTS_ITEM') || ': ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
1892 if l_task_detail.item_serial is not null then
1893 l_message := l_message || '(' || l_task_detail.item_serial || ')';
1894 end if;
1895 end if;
1896
1897 l_message := l_message || '
1898 ' || '
1899 ' || getPrompt('CSF_ALERTS_CUSTOMER') || ': ';
1900 l_message := l_message || '
1901 ' || l_task_detail.cust_name;
1902 l_message := l_message || '
1903 ' || l_task_detail.cust_address;
1904
1905 if l_task_detail.contact_name is not null then
1906 l_message := l_message || '
1907 ' || getPrompt('CSF_ALERTS_CONTACT') || ': ' || l_task_detail.contact_name;
1908 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
1909 end if;
1910
1911 -- notes
1912 l_is_notes := 'N';
1913
1914 open c_notes(l_task_asgn_id);
1915 loop
1916 fetch c_notes into l_notes;
1917 exit when c_notes%NOTFOUND;
1918
1919 if l_is_notes = 'N' then
1920 l_message := l_message || '
1921 ' || getPrompt('CSF_ALERTS_NOTES') || ':';
1922 l_is_notes := 'Y';
1923 end if;
1924
1925 l_message := l_message || l_notes || '
1926 ';
1927
1928 end loop;
1929 close c_notes;
1930
1931 end if;
1932
1933 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
1934
1935 document := l_message;
1936
1937 end;
1938
1939 procedure getDeleteMessage(document_id varchar2,
1940 display_type varchar2,
1941 document in out nocopy varchar2,
1942 document_type in out nocopy varchar2) is
1943 l_resource_id number;
1944 l_resource_type varchar2(100);
1945 l_task_id number;
1946
1947 l_message varchar2(32000);
1948 l_task_detail task_asgn_record;
1949 l_message_header varchar2(1000);
1950
1951 l_tmp_user_id number;
1952 l_tmp_resp_id number;
1953 l_tmp_resp_apps_id number;
1954 p_user_id number;
1955
1956 -- notes
1957 l_is_notes varchar2(1);
1958 l_notes varchar2(30000);
1959 cursor c_notes (v_task_id number) is
1960 select
1961 n.notes
1962 from
1963 jtf_notes_vl n
1964 where
1965 n.source_object_code = 'TASK'
1966 and n.source_object_id = v_task_id
1967 union select
1968 n.notes
1969 from
1970 jtf_notes_vl n,
1971 jtf_tasks_b t
1972 where
1973 n.source_object_code = 'SR'
1974 and n.source_object_id = t.source_object_id
1975 and t.task_id = v_task_id;
1976 begin
1977
1978 l_resource_id := to_number(substr(document_id, 1, instr(document_id, '-', 1, 1) - 1));
1979 l_resource_type := substr(document_id, instr(document_id, '-', 1, 1) + 1, instr(document_id, '-', 1, 2) - instr(document_id, '-', 1, 1) - 1);
1980 l_task_id := to_number(substr(document_id, instr(document_id, '-', 1, 2) + 1));
1981
1982 p_user_id := getUserId(l_resource_id, l_resource_type);
1983
1984 if p_user_id is null then
1985 p_user_id := 0;
1986 end if;
1987
1988 -- call API
1989 l_tmp_user_id := fnd_global.USER_ID;
1990 l_tmp_resp_id := fnd_global.RESP_ID;
1991 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
1992
1993 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
1994
1995 l_task_detail := getTaskDetails(l_task_id, null, null);
1996
1997 fnd_message.set_name('CSF', 'CSF_ALERTS_DELETE_HDR');
1998 l_message_header := fnd_message.get;
1999
2000 if display_type = 'text/html' then
2001
2002 l_message := '<P>';
2003 l_message := l_message || l_message_header || '</P>';
2004 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':</B></P>';
2005 l_message := l_message || '<P>';
2006 l_message := l_message || '<TABLE cellSpacing=0 cellPadding=0 border=1>';
2007 l_message := l_message || '<TR>';
2008 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_TASK') || '</B></TD>';
2009 l_message := l_message || '<TD>' || l_task_detail.task_number || ' ' || l_task_detail.task_name || '</TD>';
2010 l_message := l_message || '</TR>';
2011 l_message := l_message || '<TR>';
2012 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_DESCRIPTION') || '</B></TD>';
2013 l_message := l_message || '<TD>' || l_task_detail.task_desc || '</TD>';
2014 l_message := l_message || '</TR>';
2015 l_message := l_message || '<TR>';
2016 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_START') || '</B></TD>';
2017 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_st_date,
2018 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2019 || '</TD>';
2020 l_message := l_message || '</TR>';
2021 l_message := l_message || '<TR>';
2022 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_SCHEDULE_END') || '</B></TD>';
2023 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_end_date,
2024 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2025 || '</TD>';
2026 l_message := l_message || '</TR>';
2027 l_message := l_message || '<TR>';
2028 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || '</B></TD>';
2029 l_message := l_message || '<TD>' || l_task_detail.planned_effort || '</TD>';
2030 l_message := l_message || '</TR>';
2031 l_message := l_message || '<TR>';
2032 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PRIORITY') || '</B></TD>';
2033 l_message := l_message || '<TD>' || l_task_detail.priority || '</TD>';
2034 l_message := l_message || '</TR>';
2035 l_message := l_message || '</TABLE>';
2036 l_message := l_message || '</P>';
2037 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ':</B>';
2038 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
2039 l_message := l_message || '</P>';
2040
2041 if l_task_detail.product_nr is not null then
2042 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_ITEM') || '</B>: ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
2043 if l_task_detail.item_serial is not null then
2044 l_message := l_message || '(' || l_task_detail.item_serial || ')';
2045 end if;
2046 l_message := l_message || '</P>';
2047 end if;
2048
2049 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_CUSTOMER') || '</B>:<BR/>';
2050 l_message := l_message || l_task_detail.cust_name || '<BR/>';
2051 l_message := l_message || l_task_detail.cust_address || '<BR/>';
2052
2053 if l_task_detail.contact_name is not null then
2054 l_message := l_message || '<B>' || getPrompt('CSF_ALERTS_CONTACT') || '</B>: ' || l_task_detail.contact_name || '<BR/>';
2055 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
2056 end if;
2057
2058 l_message := l_message || '</P>';
2059
2060 -- notes
2061 l_is_notes := 'N';
2062
2063 open c_notes(l_task_id);
2064 loop
2065 fetch c_notes into l_notes;
2066 exit when c_notes%NOTFOUND;
2067
2068 if l_is_notes = 'N' then
2069 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_NOTES') || ':</B></P>';
2070 l_is_notes := 'Y';
2071 end if;
2072
2073 l_message := l_message || l_notes || '<BR/>';
2074
2075 end loop;
2076 close c_notes;
2077
2078 else
2079
2080 l_message := '';
2081 l_message := l_message || '
2082 ' || l_message_header;
2083 l_message := l_message || '
2084 ' || '
2085 ' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':';
2086 l_message := l_message || '
2087 ' || getPrompt('CSF_ALERTS_TASK') || ': ';
2088 l_message := l_message || l_task_detail.task_number || ' ' || l_task_detail.task_name;
2089 l_message := l_message || '
2090 ' || getPrompt('CSF_ALERTS_DESCRIPTION') || ': ';
2091 l_message := l_message || l_task_detail.task_desc;
2092 l_message := l_message || '
2093 ' || getPrompt('CSF_ALERTS_SCHEDULE_START') || ': ';
2094 l_message := l_message || to_char(getClientTime(l_task_detail.sch_st_date,
2095 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2096 l_message := l_message || '
2097 ' || getPrompt('CSF_ALERTS_SCHEDULE_END') || ': ';
2098 l_message := l_message || to_char(getClientTime(l_task_detail.sch_end_date,
2099 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2100 l_message := l_message || '
2101 ' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || ': ';
2102 l_message := l_message || l_task_detail.planned_effort;
2103 l_message := l_message || '
2104 ' || getPrompt('CSF_ALERTS_PRIORITY') || ': ';
2105 l_message := l_message || l_task_detail.priority;
2106 l_message := l_message || '
2107 ' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ': ';
2108 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
2109
2110 if l_task_detail.product_nr is not null then
2111 l_message := l_message || '
2112 ' || '
2113 ' || getPrompt('CSF_ALERTS_ITEM') || ': ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
2114 if l_task_detail.item_serial is not null then
2115 l_message := l_message || '(' || l_task_detail.item_serial || ')';
2116 end if;
2117 end if;
2118
2119 l_message := l_message || '
2120 ' || '
2121 ' || getPrompt('CSF_ALERTS_CUSTOMER') || ': ';
2122 l_message := l_message || '
2123 ' || l_task_detail.cust_name;
2124 l_message := l_message || '
2125 ' || l_task_detail.cust_address;
2126
2127 if l_task_detail.contact_name is not null then
2128 l_message := l_message || '
2129 ' || getPrompt('CSF_ALERTS_CONTACT') || ': ' || l_task_detail.contact_name;
2130 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
2131 end if;
2132
2133 -- notes
2134 l_is_notes := 'N';
2135
2136 open c_notes(l_task_id);
2137 loop
2138 fetch c_notes into l_notes;
2139 exit when c_notes%NOTFOUND;
2140
2141 if l_is_notes = 'N' then
2142 l_message := l_message || '
2143 ' || getPrompt('CSF_ALERTS_NOTES') || ':';
2144 l_is_notes := 'Y';
2145 end if;
2146
2147 l_message := l_message || l_notes || '
2148 ';
2149
2150 end loop;
2151 close c_notes;
2152
2153 end if;
2154
2155 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
2156
2157 document := l_message;
2158
2159 end;
2160
2161 procedure getRescheduleMessage(document_id varchar2,
2162 display_type varchar2,
2163 document in out nocopy varchar2,
2164 document_type in out nocopy varchar2) is
2165 l_resource_id number;
2166 l_resource_type varchar2(100);
2167 l_message varchar2(32000);
2168 l_task_detail task_asgn_record;
2169 p_task_id number;
2170 p_task_audit_id number;
2171 l_message_header varchar2(1000);
2172
2173 l_tmp_user_id number;
2174 l_tmp_resp_id number;
2175 l_tmp_resp_apps_id number;
2176 p_user_id number;
2177
2178 -- notes
2179 l_is_notes varchar2(1);
2180 l_notes varchar2(30000);
2181 cursor c_notes (v_task_id number) is
2182 select
2183 n.notes
2184 from
2185 jtf_notes_vl n
2186 where
2187 n.source_object_code = 'TASK'
2188 and n.source_object_id = v_task_id
2189 union select
2190 n.notes
2191 from
2192 jtf_notes_vl n,
2193 jtf_tasks_b t
2194 where
2195 n.source_object_code = 'SR'
2196 and n.source_object_id = t.source_object_id
2197 and t.task_id = v_task_id;
2198 begin
2199
2200 l_resource_id := to_number(substr(document_id, 1, instr(document_id, '-', 1, 1) - 1));
2201 l_resource_type := substr(document_id, instr(document_id, '-', 1, 1) + 1, instr(document_id, '-', 1, 2) - instr(document_id, '-', 1, 1) - 1);
2202
2203 p_task_id := to_number(substr(document_id, instr(document_id, '-', 1, 2) + 1, instr(document_id, '-', 1, 3) - instr(document_id, '-', 1, 2) - 1));
2204 p_task_audit_id := to_number(substr(document_id, instr(document_id, '-', 1, 3) + 1));
2205
2206 p_user_id := getUserId(l_resource_id, l_resource_type);
2207
2208 if p_user_id is null then
2209 p_user_id := 0;
2210 end if;
2211
2212 -- call API
2213 l_tmp_user_id := fnd_global.USER_ID;
2214 l_tmp_resp_id := fnd_global.RESP_ID;
2215 l_tmp_resp_apps_id := fnd_global.RESP_APPL_ID;
2216
2217 fnd_global.APPS_INITIALIZE(user_id => p_user_id, resp_id => 21685, resp_appl_id => 513);
2218
2219 l_task_detail := getTaskDetails(p_task_id, null, p_task_audit_id);
2220
2221 fnd_message.set_name('CSF', 'CSF_ALERTS_RESCHEDULE_HDR');
2222 l_message_header := fnd_message.get;
2223
2224 if display_type = 'text/html' then
2225
2226 l_message := '<P>';
2227 l_message := l_message || l_message_header || '</P>';
2228 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':</B></P>';
2229 l_message := l_message || '<P>';
2230 l_message := l_message || '<TABLE cellSpacing=0 cellPadding=0 border=1>';
2231 l_message := l_message || '<TR>';
2232 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_TASK') || '</B></TD>';
2233 l_message := l_message || '<TD>' || l_task_detail.task_number || ' ' || l_task_detail.task_name || '</TD>';
2234 l_message := l_message || '</TR>';
2235 l_message := l_message || '<TR>';
2236 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_DESCRIPTION') || '</B></TD>';
2237 l_message := l_message || '<TD>' || l_task_detail.task_desc || '</TD>';
2238 l_message := l_message || '</TR>';
2239 l_message := l_message || '<TR>';
2240 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_N_SCH_START') || '</B></TD>';
2241 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_st_date,
2242 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2243 || '</TD>';
2244 l_message := l_message || '</TR>';
2245 l_message := l_message || '<TR>';
2246 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_O_SCH_START') || '</B></TD>';
2247 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.old_sch_st_date,
2248 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2249 || '</TD>';
2250 l_message := l_message || '</TR>';
2251 l_message := l_message || '<TR>';
2252 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_N_SCH_END') || '</B></TD>';
2253 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.sch_end_date,
2254 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2255 || '</TD>';
2256 l_message := l_message || '</TR>';
2257 l_message := l_message || '<TR>';
2258 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_O_SCH_END') || '</B></TD>';
2259 l_message := l_message || '<TD>' || to_char(getClientTime(l_task_detail.old_sch_end_date,
2260 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI')
2261 || '</TD>';
2262 l_message := l_message || '</TR>';
2263 l_message := l_message || '<TR>';
2264 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || '</B></TD>';
2265 l_message := l_message || '<TD>' || l_task_detail.planned_effort || '</TD>';
2266 l_message := l_message || '</TR>';
2267 l_message := l_message || '<TR>';
2268 l_message := l_message || '<TD><B>' || getPrompt('CSF_ALERTS_PRIORITY') || '</B></TD>';
2269 l_message := l_message || '<TD>' || l_task_detail.priority || '</TD>';
2270 l_message := l_message || '</TR>';
2271 l_message := l_message || '</TABLE>';
2272 l_message := l_message || '</P>';
2273 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ':</B>';
2274 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
2275 l_message := l_message || '</P>';
2276
2277 if l_task_detail.product_nr is not null then
2278 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_ITEM') || '</B>: ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
2279 if l_task_detail.item_serial is not null then
2280 l_message := l_message || '(' || l_task_detail.item_serial || ')';
2281 end if;
2282 l_message := l_message || '</P>';
2283 end if;
2284
2285 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_CUSTOMER') || '</B>:<BR/>';
2286 l_message := l_message || l_task_detail.cust_name || '<BR/>';
2287 l_message := l_message || l_task_detail.cust_address || '<BR/>';
2288
2289 if l_task_detail.contact_name is not null then
2290 l_message := l_message || '<B>' || getPrompt('CSF_ALERTS_CONTACT') || '</B>: ' || l_task_detail.contact_name || '<BR/>';
2291 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
2292 end if;
2293
2294 l_message := l_message || '</P>';
2295
2296 -- notes
2297 l_is_notes := 'N';
2298
2299 open c_notes(p_task_id);
2300 loop
2301 fetch c_notes into l_notes;
2302 exit when c_notes%NOTFOUND;
2303
2304 if l_is_notes = 'N' then
2305 l_message := l_message || '<P><B>' || getPrompt('CSF_ALERTS_NOTES') || ':</B></P>';
2306 l_is_notes := 'Y';
2307 end if;
2308
2309 l_message := l_message || l_notes || '<BR/>';
2310
2311 end loop;
2312 close c_notes;
2313
2314 else
2315
2316 l_message := '';
2317 l_message := l_message || '
2318 ' || l_message_header;
2319 l_message := l_message || '
2320 ' || '
2321 ' || getPrompt('CSF_ALERTS_TASK_DETAILS') || ':';
2322 l_message := l_message || '
2323 ' || getPrompt('CSF_ALERTS_TASK') || ': ';
2324 l_message := l_message || l_task_detail.task_number || ' ' || l_task_detail.task_name;
2325 l_message := l_message || '
2326 ' || getPrompt('CSF_ALERTS_DESCRIPTION') || ': ';
2327 l_message := l_message || l_task_detail.task_desc;
2328 l_message := l_message || '
2329 ' || getPrompt('CSF_ALERTS_N_SCH_START') || ': ';
2330 l_message := l_message || to_char(getClientTime(l_task_detail.sch_st_date,
2331 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2332 l_message := l_message || '
2333 ' || getPrompt('CSF_ALERTS_O_SCH_START') || ': ';
2334 l_message := l_message || to_char(getClientTime(l_task_detail.old_sch_st_date,
2335 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2336 l_message := l_message || '
2337 ' || getPrompt('CSF_ALERTS_N_SCH_END') || ': ';
2338 l_message := l_message || to_char(getClientTime(l_task_detail.sch_end_date,
2339 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2340 l_message := l_message || '
2341 ' || getPrompt('CSF_ALERTS_O_SCH_END') || ': ';
2342 l_message := l_message || to_char(getClientTime(l_task_detail.old_sch_end_date,
2343 getUserId(l_resource_id, l_resource_type)), 'DD-MON-YYYY HH24:MI');
2344 l_message := l_message || '
2345 ' || getPrompt('CSF_ALERTS_PLANNED_EFFORT') || ': ';
2346 l_message := l_message || l_task_detail.planned_effort;
2347 l_message := l_message || '
2348 ' || getPrompt('CSF_ALERTS_PRIORITY') || ': ';
2349 l_message := l_message || l_task_detail.priority;
2350 l_message := l_message || '
2351 ' || getPrompt('CSF_ALERTS_SERVICE_REQUEST') || ': ';
2352 l_message := l_message || l_task_detail.sr_number || ' ' || l_task_detail.sr_summary;
2353
2354 if l_task_detail.product_nr is not null then
2355 l_message := l_message || '
2356 ' || '
2357 ' || getPrompt('CSF_ALERTS_ITEM') || ': ' || l_task_detail.product_nr || ', ' || l_task_detail.item_description;
2358 if l_task_detail.item_serial is not null then
2359 l_message := l_message || '(' || l_task_detail.item_serial || ')';
2360 end if;
2361 end if;
2362
2363 l_message := l_message || '
2364 ' || '
2365 ' || getPrompt('CSF_ALERTS_CUSTOMER') || ': ';
2366 l_message := l_message || '
2367 ' || l_task_detail.cust_name;
2368 l_message := l_message || '
2369 ' || l_task_detail.cust_address;
2370
2371 if l_task_detail.contact_name is not null then
2372 l_message := l_message || '
2373 ' || getPrompt('CSF_ALERTS_CONTACT') || ': ' || l_task_detail.contact_name;
2374 l_message := l_message || l_task_detail.contact_phone || ' ' || l_task_detail.contact_email;
2375 end if;
2376
2377 -- notes
2378 l_is_notes := 'N';
2379
2380 open c_notes(p_task_id);
2381 loop
2382 fetch c_notes into l_notes;
2383 exit when c_notes%NOTFOUND;
2384
2385 if l_is_notes = 'N' then
2386 l_message := l_message || '
2387 ' || getPrompt('CSF_ALERTS_NOTES') || ':';
2388 l_is_notes := 'Y';
2389 end if;
2390
2391 l_message := l_message || l_notes || '
2392 ';
2393
2394 end loop;
2395 close c_notes;
2396
2397 end if;
2398
2399 fnd_global.APPS_INITIALIZE(user_id => l_tmp_user_id, resp_id => l_tmp_resp_id, resp_appl_id => l_tmp_resp_apps_id);
2400
2401 document := l_message;
2402
2403 end;
2404
2405 function getPrompt (p_name varchar2) return varchar2 is
2406 l_return varchar2(100);
2407 begin
2408 l_return := '';
2409 fnd_message.set_name('CSF', p_name);
2410 l_return := fnd_message.get;
2411 return l_return;
2412 end;
2413
2414 function getContactDetail(p_incident_id number,
2415 p_contact_type varchar2,
2416 p_party_id number) return contact_record is
2417
2418 l_contact contact_record;
2419
2420 l_contact_name varchar2(100);
2421 l_contact_email varchar2(250);
2422 l_contact_phone varchar2(100);
2423
2424 cursor c_EMP_contact(v_id number) is
2425 SELECT
2426 per.full_name contactname,
2427 per.email_address email,
2428 ph.phone_number phone_number
2429 FROM
2430 per_all_people_f per,
2431 per_phones ph
2432 WHERE
2433 per.person_id = v_id
2434 and per.person_id = ph.parent_id
2435 and ph.phone_type = 'W1'
2436 AND ph.parent_table = 'PER_ALL_PEOPLE_F'
2437 AND sysdate between nvl(per.effective_start_date, sysdate)
2438 and nvl(per.effective_end_date, sysdate);
2439
2440 -- bug # 6630754
2441 -- relaced hz_party_relationships with hz_relationships
2442 cursor c_REL_contact(v_id number) is
2443 SELECT
2444 hp.person_first_name ||' '|| hp.person_last_name contactname,
2445 hp.email_address email
2446 FROM
2447 hz_relationships rel,
2448 hz_parties hp
2449 WHERE
2450 rel.party_id = v_id
2451 AND rel.subject_id = hp.party_id
2452 AND rel.subject_table_name = 'HZ_PARTIES'
2453 AND rel.subject_type = 'PERSON';
2454
2455 cursor c_PERSON_contact(v_id number) is
2456 Select PARTY_NAME, EMAIL_ADDRESS from hz_parties where party_id = v_id;
2457
2458 cursor c_rel_person_phone(v_incident_id number) is
2459 SELECT
2460 hcp.phone_country_code || ' ' || hcp.phone_area_code || ' ' || hcp.phone_number PHONE_NUMBER
2461 FROM
2462 cs_incidents_all_b ci_all_b,
2463 cs_hz_sr_contact_points_v chscp,
2464 hz_contact_points hcp
2465 WHERE
2466 ci_all_b.incident_id = chscp.incident_id
2467 AND chscp.contact_point_id = hcp.contact_point_id
2468 AND chscp.primary_flag = 'Y'
2469 AND hcp.contact_point_type = 'PHONE'
2470 AND ci_all_b.incident_id = v_incident_id;
2471 begin
2472
2473 if p_contact_type = 'EMPLOYEE' then
2474
2475 open c_EMP_contact(p_party_id);
2476 fetch c_EMP_contact into l_contact_name, l_contact_email, l_contact_phone;
2477 close c_EMP_contact;
2478
2479 elsif p_contact_type = 'PARTY_RELATIONSHIP' then
2480
2481 open c_REL_contact(p_party_id);
2482 fetch c_REL_contact into l_contact_name, l_contact_email;
2483 close c_REL_contact;
2484
2485 open c_rel_person_phone(p_incident_id);
2486 fetch c_rel_person_phone into l_contact_phone;
2487 close c_rel_person_phone;
2488
2489 elsif p_contact_type = 'PERSON' then
2490
2491 open c_PERSON_contact(p_party_id);
2492 fetch c_PERSON_contact into l_contact_name, l_contact_email;
2493 close c_PERSON_contact;
2494
2495 open c_rel_person_phone(p_incident_id);
2496 fetch c_rel_person_phone into l_contact_phone;
2497 close c_rel_person_phone;
2498
2499 end if;
2500
2501 l_contact.contact_name := l_contact_name;
2502 l_contact.contact_email := l_contact_email;
2503 l_contact.contact_phone := l_contact_phone;
2504
2505 return l_contact;
2506
2507 end;
2508
2509 function getTaskDetails(p_task_id number,
2510 p_task_asgn_id number,
2511 p_task_audit_id number) return task_asgn_record is
2512
2513 l_task_asgn_record task_asgn_record;
2514 l_contact_record contact_record;
2515
2516 l_task_number jtf_tasks_b.task_number%type;
2517 l_task_name jtf_tasks_vl.task_name%type;
2518 l_task_desc jtf_tasks_vl.description%type;
2519 l_sch_st_date jtf_tasks_b.scheduled_start_date%type;
2520 l_old_sch_st_date jtf_tasks_b.scheduled_start_date%type;
2521 l_sch_end_date jtf_tasks_b.scheduled_end_date%type;
2522 l_old_sch_end_date jtf_tasks_b.scheduled_end_date%type;
2523 l_planned_effort varchar2(100);
2524 l_priority jtf_task_priorities_vl.name%type;
2525 l_asgm_sts_name jtf_task_statuses_vl.name%type;
2526 l_sr_number cs_incidents_all_b.incident_number%type;
2527 l_sr_summary cs_incidents_all_b.summary%type;
2528 l_product_nr mtl_system_items_vl.concatenated_segments%type;
2529 l_item_serial cs_customer_products_all.current_serial_number%type;
2530 l_item_description mtl_system_items_vl.description%type;
2531 l_cust_name hz_parties.party_name%type;
2532 l_cust_address varchar2(1000);
2533 l_contact_name varchar2(100);
2534 l_contact_phone varchar2(100);
2535 l_contact_email varchar2(250);
2536 l_contact_type varchar2(200);
2537 l_contact_party_id number;
2538 l_incident_id number;
2539
2540 cursor c_task_assgn_detail (v_task_assgn_id number) is
2541 SELECT
2542 c_b.incident_id incident_id,
2543 c_b.incident_number sr_number,
2544 c_b.summary sr_summary,
2545 hp.party_name cust_name,
2546 hp.address1 || ', ' || hp.postal_code || ', ' || hp.city address,
2547 jtb.task_number task_number,
2548 j_vl.task_name task_name,
2549 js_vl.name assignment_name,
2550 jp_vl.name priority,
2551 j_vl.PLANNED_EFFORT || ' ' || j_vl.PLANNED_EFFORT_UOM planned_effort,
2552 jtb.scheduled_start_date sch_st_date,
2553 jtb.scheduled_end_date sch_end_date,
2554 j_vl.description task_desc,
2555 msi_b.concatenated_segments product_nr,
2556 ccp_all.current_serial_number item_serial,
2557 msi_b.description item_description,
2558 chscp.contact_type contact_type,
2559 chscp.party_id contact_party_id
2560 FROM
2561 jtf_tasks_b jtb,
2562 jtf_task_assignments jta,
2563 jtf_tasks_vl j_vl,
2564 jtf_task_priorities_vl jp_vl,
2565 jtf_task_statuses_vl js_vl,
2566 cs_incidents_all c_b,
2567 hz_party_sites hps,
2568 hz_parties hp,
2569 mtl_system_items_vl msi_b,
2570 cs_customer_products_all ccp_all,
2571 cs_hz_sr_contact_points_v chscp
2572 WHERE
2573 jta.task_assignment_id = v_task_assgn_id
2574 and jta.task_id = jtb.task_id
2575 and j_vl.task_id = jta.task_id
2576 and jp_vl.task_priority_id (+) = j_vl.task_priority_id
2577 and js_vl.task_status_id = jta.assignment_status_id
2578 and jtb.source_object_type_code = 'SR'
2579 and jtb.source_object_id = c_b.incident_id
2580 and jtb.address_id = hps.party_site_id
2581 and hps.party_id = hp.party_id
2582 and c_b.inventory_item_id = msi_b.inventory_item_id (+)
2583 and c_b.customer_product_id = ccp_all.customer_product_id(+)
2584 and msi_b.organization_id (+) = c_b.org_id
2585 and chscp.primary_flag (+) = 'Y'
2586 and chscp.incident_id (+) = c_b.incident_id;
2587
2588 cursor c_task_detail (v_task_id number) is
2589 SELECT
2590 c_b.incident_id incident_id,
2591 c_b.incident_number sr_number,
2592 c_b.summary sr_summary,
2593 hp.party_name cust_name,
2594 hp.address1 || ', ' || hp.postal_code || ', ' || hp.city address,
2595 jtb.task_number task_number,
2596 j_vl.task_name task_name,
2597 jp_vl.name priority,
2598 j_vl.PLANNED_EFFORT || ' ' || j_vl.PLANNED_EFFORT_UOM planned_effort,
2599 jtb.scheduled_start_date sch_st_date,
2600 jtb.scheduled_end_date sch_end_date,
2601 j_vl.description task_desc,
2602 msi_b.concatenated_segments product_nr,
2603 ccp_all.current_serial_number item_serial,
2604 msi_b.description item_description,
2605 chscp.contact_type contact_type,
2606 chscp.party_id contact_party_id
2607 FROM
2608 jtf_tasks_b jtb,
2609 jtf_tasks_vl j_vl,
2610 jtf_task_priorities_vl jp_vl,
2611 cs_incidents_all c_b,
2612 hz_party_sites hps,
2613 hz_parties hp,
2614 mtl_system_items_vl msi_b,
2615 cs_customer_products_all ccp_all,
2616 cs_hz_sr_contact_points_v chscp
2617 WHERE
2618 jtb.task_id = v_task_id
2619 and j_vl.task_id = jtb.task_id
2620 and jp_vl.task_priority_id (+) = j_vl.task_priority_id
2621 and jtb.source_object_type_code = 'SR'
2622 and jtb.source_object_id = c_b.incident_id
2623 and jtb.address_id = hps.party_site_id
2624 and hps.party_id = hp.party_id
2625 and c_b.inventory_item_id = msi_b.inventory_item_id (+)
2626 and c_b.customer_product_id = ccp_all.customer_product_id(+)
2627 and msi_b.organization_id (+) = c_b.org_id
2628 and chscp.primary_flag (+) = 'Y'
2629 and chscp.incident_id (+) = c_b.incident_id;
2630
2631 cursor c_task_audit_detail (v_task_id number, v_task_audit_id number) is
2632 SELECT
2633 c_b.incident_id incident_id,
2634 c_b.incident_number sr_number,
2635 c_b.summary sr_summary,
2636 hp.party_name cust_name,
2637 hp.address1 || ', ' || hp.postal_code || ', ' || hp.city address,
2638 jtb.task_number task_number,
2639 j_vl.task_name task_name,
2640 jp_vl.name priority,
2641 j_vl.PLANNED_EFFORT || ' ' || j_vl.PLANNED_EFFORT_UOM planned_effort,
2642 jtb.scheduled_start_date sch_st_date,
2643 jtb.scheduled_end_date sch_end_date,
2644 j_vl.description task_desc,
2645 msi_b.concatenated_segments product_nr,
2646 ccp_all.current_serial_number item_serial,
2647 msi_b.description item_description,
2648 chscp.contact_type contact_type,
2649 chscp.party_id contact_party_id,
2650 jtab.old_scheduled_start_date old_sch_st_date,
2651 jtab.old_scheduled_end_date old_sch_end_date
2652 FROM
2653 jtf_tasks_b jtb,
2654 jtf_task_audits_b jtab,
2655 jtf_tasks_vl j_vl,
2656 jtf_task_priorities_vl jp_vl,
2657 cs_incidents_all c_b,
2658 hz_party_sites hps,
2659 hz_parties hp,
2660 mtl_system_items_vl msi_b,
2661 cs_customer_products_all ccp_all,
2662 cs_hz_sr_contact_points_v chscp
2663 WHERE
2664 jtb.task_id = v_task_id
2665 and jtab.task_audit_id = v_task_audit_id
2666 and jtab.task_id = jtb.task_id
2667 and j_vl.task_id = jtb.task_id
2668 and jp_vl.task_priority_id (+) = j_vl.task_priority_id
2669 and jtb.source_object_type_code = 'SR'
2670 and jtb.source_object_id = c_b.incident_id
2671 and jtb.address_id = hps.party_site_id
2672 and hps.party_id = hp.party_id
2673 and c_b.inventory_item_id = msi_b.inventory_item_id (+)
2674 and c_b.customer_product_id = ccp_all.customer_product_id(+)
2675 and msi_b.organization_id (+) = c_b.org_id
2676 and chscp.primary_flag (+) = 'Y'
2677 and chscp.incident_id (+) = c_b.incident_id;
2678 begin
2679
2680
2681 if p_task_asgn_id is not null then
2682
2683 open c_task_assgn_detail(p_task_asgn_id);
2684 fetch c_task_assgn_detail into
2685 l_incident_id,
2686 l_sr_number,
2687 l_sr_summary,
2688 l_cust_name,
2689 l_cust_address,
2690 l_task_number,
2691 l_task_name,
2692 l_asgm_sts_name,
2693 l_priority,
2694 l_planned_effort,
2695 l_sch_st_date,
2696 l_sch_end_date,
2697 l_task_desc,
2698 l_product_nr,
2699 l_item_serial,
2700 l_item_description,
2701 l_contact_type,
2702 l_contact_party_id;
2703 close c_task_assgn_detail;
2704
2705 l_contact_record := getContactDetail(l_incident_id,
2706 l_contact_type,
2707 l_contact_party_id);
2708
2709 l_task_asgn_record.task_number := l_task_number;
2710 l_task_asgn_record.task_name := l_task_name;
2711 l_task_asgn_record.task_desc := l_task_desc;
2712 l_task_asgn_record.sch_st_date := l_sch_st_date;
2713 l_task_asgn_record.sch_end_date := l_sch_end_date;
2714 l_task_asgn_record.planned_effort := l_planned_effort;
2715 l_task_asgn_record.priority := l_priority;
2716 l_task_asgn_record.asgm_sts_name := l_asgm_sts_name;
2717 l_task_asgn_record.sr_number := l_sr_number;
2718 l_task_asgn_record.sr_summary := l_sr_summary;
2719 l_task_asgn_record.product_nr := l_product_nr;
2720 l_task_asgn_record.item_serial := l_item_serial;
2721 l_task_asgn_record.item_description := l_item_description;
2722 l_task_asgn_record.cust_name := l_cust_name;
2723 l_task_asgn_record.cust_address := l_cust_address;
2724 l_task_asgn_record.contact_name := l_contact_record.contact_name;
2725 l_task_asgn_record.contact_phone := l_contact_record.contact_phone;
2726 l_task_asgn_record.contact_email := l_contact_record.contact_email;
2727
2728 elsif p_task_id is not null and p_task_audit_id is null then
2729
2730 open c_task_detail(p_task_id);
2731 fetch c_task_detail into
2732 l_incident_id,
2733 l_sr_number,
2734 l_sr_summary,
2735 l_cust_name,
2736 l_cust_address,
2737 l_task_number,
2738 l_task_name,
2739 l_priority,
2740 l_planned_effort,
2741 l_sch_st_date,
2742 l_sch_end_date,
2743 l_task_desc,
2744 l_product_nr,
2745 l_item_serial,
2746 l_item_description,
2747 l_contact_type,
2748 l_contact_party_id;
2749 close c_task_detail;
2750
2751 l_contact_record := getContactDetail(l_incident_id,
2752 l_contact_type,
2753 l_contact_party_id);
2754
2755 l_task_asgn_record.task_number := l_task_number;
2756 l_task_asgn_record.task_name := l_task_name;
2757 l_task_asgn_record.task_desc := l_task_desc;
2758 l_task_asgn_record.sch_st_date := l_sch_st_date;
2759 l_task_asgn_record.sch_end_date := l_sch_end_date;
2760 l_task_asgn_record.planned_effort := l_planned_effort;
2761 l_task_asgn_record.priority := l_priority;
2762 l_task_asgn_record.sr_number := l_sr_number;
2763 l_task_asgn_record.sr_summary := l_sr_summary;
2764 l_task_asgn_record.product_nr := l_product_nr;
2765 l_task_asgn_record.item_serial := l_item_serial;
2766 l_task_asgn_record.item_description := l_item_description;
2767 l_task_asgn_record.cust_name := l_cust_name;
2768 l_task_asgn_record.cust_address := l_cust_address;
2769 l_task_asgn_record.contact_name := l_contact_record.contact_name;
2770 l_task_asgn_record.contact_phone := l_contact_record.contact_phone;
2771 l_task_asgn_record.contact_email := l_contact_record.contact_email;
2772
2773 elsif p_task_id is not null and p_task_audit_id is not null then
2774
2775 open c_task_audit_detail(p_task_id, p_task_audit_id);
2776 fetch c_task_audit_detail into
2777 l_incident_id,
2778 l_sr_number,
2779 l_sr_summary,
2780 l_cust_name,
2781 l_cust_address,
2782 l_task_number,
2783 l_task_name,
2784 l_priority,
2785 l_planned_effort,
2786 l_sch_st_date,
2787 l_sch_end_date,
2788 l_task_desc,
2789 l_product_nr,
2790 l_item_serial,
2791 l_item_description,
2792 l_contact_type,
2793 l_contact_party_id,
2794 l_old_sch_st_date,
2795 l_old_sch_end_date;
2796 close c_task_audit_detail;
2797
2798 l_contact_record := getContactDetail(l_incident_id,
2799 l_contact_type,
2800 l_contact_party_id);
2801
2802 l_task_asgn_record.task_number := l_task_number;
2803 l_task_asgn_record.task_name := l_task_name;
2804 l_task_asgn_record.task_desc := l_task_desc;
2805 l_task_asgn_record.sch_st_date := l_sch_st_date;
2806 l_task_asgn_record.sch_end_date := l_sch_end_date;
2807 l_task_asgn_record.planned_effort := l_planned_effort;
2808 l_task_asgn_record.priority := l_priority;
2809 l_task_asgn_record.sr_number := l_sr_number;
2810 l_task_asgn_record.sr_summary := l_sr_summary;
2811 l_task_asgn_record.product_nr := l_product_nr;
2812 l_task_asgn_record.item_serial := l_item_serial;
2813 l_task_asgn_record.item_description := l_item_description;
2814 l_task_asgn_record.cust_name := l_cust_name;
2815 l_task_asgn_record.cust_address := l_cust_address;
2816 l_task_asgn_record.contact_name := l_contact_record.contact_name;
2817 l_task_asgn_record.contact_phone := l_contact_record.contact_phone;
2818 l_task_asgn_record.contact_email := l_contact_record.contact_email;
2819 l_task_asgn_record.old_sch_st_date := l_old_sch_st_date;
2820 l_task_asgn_record.old_sch_end_date := l_old_sch_end_date;
2821
2822 end if;
2823
2824 return l_task_asgn_record;
2825 end;
2826
2827 function getClientTime (p_server_time date,
2828 p_user_id number) return date is
2829 l_client_tz_id number;
2830 l_server_tz_id number;
2831 l_msg_count number;
2832 l_status varchar2(1);
2833 x_client_time date;
2834 l_msg_data varchar2(2000);
2835
2836 begin
2837
2838 IF (fnd_timezones.timezones_enabled <> 'Y') THEN
2839 return p_server_time;
2840 END IF;
2841
2842 l_client_tz_id := to_number(fnd_profile.VALUE_SPECIFIC('CLIENT_TIMEZONE_ID',
2843 p_user_id,
2844 21685,
2845 513,
2846 null,
2847 null));
2848
2849 l_server_tz_id := to_number(fnd_profile.VALUE_SPECIFIC('SERVER_TIMEZONE_ID',
2850 p_user_id,
2851 21685,
2852 513,
2853 null,
2854 null));
2855
2856 HZ_TIMEZONE_PUB.GET_TIME(1.0,
2857 'F',
2858 l_server_tz_id,
2859 l_client_tz_id,
2860 p_server_time,
2861 x_client_time,
2862 l_status,
2863 l_msg_count,
2864 l_msg_data);
2865
2866 return x_client_time;
2867
2868 end;
2869
2870 -- Returns WF ROLE NAME
2871 -- Bug # 5245611
2872 function getWFRole (p_resource_id number) return varchar2 is
2873
2874 l_wf_role_name varchar2(150) := NULL;
2875 cursor c_check_user_name (v_resource_id number) is
2876 select
2877 j.user_name
2878 from
2879 jtf_rs_resource_extns j,
2880 wf_roles w
2881 where
2882 j.resource_id = v_resource_id
2883 and j.user_name = w.name;
2884
2885 begin
2886
2887 open c_check_user_name(p_resource_id);
2888 fetch c_check_user_name into l_wf_role_name;
2889 close c_check_user_name;
2890
2891 if l_wf_role_name is NULL
2892 then
2893 l_wf_role_name := JTF_RS_WF_INTEGRATION_PUB.get_wf_role(p_resource_id);
2894 end if;
2895
2896 return l_wf_role_name;
2897
2898 end;
2899
2900 END csf_alerts_pub;