DBA Data[Home] [Help]

PACKAGE BODY: APPS.CS_WF_EVENT_SUBSCRIPTIONS_PKG

Source


1 PACKAGE BODY CS_WF_EVENT_SUBSCRIPTIONS_PKG AS
2 /* $Header: csxevtsb.pls 120.2.12010000.2 2008/08/29 07:02:22 vpremach ship $ */
3 --
4 -- To modify this template, edit file PKGBODY.TXT in TEMPLATE
5 -- directory of SQL Navigator
6 --
7 -- Purpose: Briefly explain the functionality of the package body
8 --
9 -- MODIFICATION HISTORY
10 -- Person      Date    Comments
11 -- ---------   ------  ------------------------------------------
12 -- VPREMACH    08/28/08  Bug 7118071 : When task is created in close status,
13 --                       upward propagation has to work.
14    -- Enter procedure, function bodies as shown below
15 
16 
17   FUNCTION CS_SR_Verify_All(p_subscription_guid in raw,
18                             p_event in out nocopy WF_EVENT_T) RETURN varchar2 is
19 
20 
21 -- Task Related Event Parameters and Cursors
22     l_task_id       NUMBER;
23     l_task_audit_id NUMBER;
24 
25    CURSOR c_sr_task_sr_closure_csr IS
26     SELECT source_object_type_code,
27            source_object_id ,
28            open_flag ,
29            last_updated_by,
30            last_update_login
31       FROM jtf_tasks_b
32      WHERE task_id = l_task_id;
33 
34    c_sr_task_sr_closure_rec   c_sr_task_sr_closure_csr%ROWTYPE;
35 
36 -- Get the status details from the SR task audit record
37 
38    CURSOR c_sr_task_status_audit IS
39     SELECT old_task_status_id ,
40            new_task_status_id,
41            last_updated_by
42       FROM jtf_task_audits_b
43      WHERE task_id = l_task_id
44        AND task_audit_id = l_task_audit_id ;
45 
46    c_sr_task_status_audit_rec  c_sr_task_status_audit%ROWTYPE;
47 
48 -- Generic Event Parameters and Cursors
49     l_event_name         VARCHAR2(240) := p_event.getEventName( );
50     l_request_id         NUMBER := NULL;
51     l_resp_appl_id       NUMBER := NULL;
52     l_login_id           NUMBER := NULL;
53     l_user_id            NUMBER := NULL;
54     l_return_status      VARCHAR2(1);
55     l_msg_count          NUMBER;
56     l_msg_data           VARCHAR2(2000);
57     l_auto_close_profile VARCHAR2(30);
58     l_status_prop_flag   VARCHAR2(3) := 'N' ;
59 
60 BEGIN
61 
62     l_return_status := FND_API.G_RET_STS_SUCCESS;
63 
64     FND_PROFILE.GET('CS_SR_AUTO_CLOSE_SR',l_auto_close_profile);
65 
66     IF nvl(l_auto_close_profile, 'NO') <> 'YES' THEN
67        return 'SUCCESS';
68     END IF;
69 
70     --Begin Bug 7118071
71       IF (l_event_name = 'oracle.apps.jtf.cac.task.createTask') THEN
72        l_task_id       := p_event.GetValueForParameter('TASK_ID');
73 
74        OPEN c_sr_task_sr_closure_csr;
75        FETCH c_sr_task_sr_closure_csr INTO c_sr_task_sr_closure_rec;
76        CLOSE c_sr_task_sr_closure_csr;
77 
78        IF (  c_sr_task_sr_closure_rec.source_object_type_code <> 'SR') THEN
79   	   return 'SUCCESS';
80        END IF;
81        IF (NVL(c_sr_task_sr_closure_rec.open_flag ,'X') = 'N') THEN
82              l_status_prop_flag := 'Y';
83              l_request_id       :=  c_sr_task_sr_closure_rec.source_object_id;
84              l_user_id          := NVL(c_sr_task_sr_closure_rec.last_updated_by,FND_GLOBAL.USER_ID);
85              l_resp_appl_id     :=  FND_GLOBAL.RESP_APPL_ID;
86              l_login_id         := NVL(c_sr_task_sr_closure_rec.last_update_login,FND_GLOBAL.LOGIN_ID) ;
87        END IF;
88      END IF;
89     --End Bug 7118071
90 
91     ---- Code to handle update to SR task status
92 
93     IF (l_event_name = 'oracle.apps.jtf.cac.task.updateTask') THEN
94 
95        l_task_id       := p_event.GetValueForParameter('TASK_ID');
96        l_task_audit_id := p_event.GetValueForParameter('TASK_AUDIT_ID');
97 
98         OPEN c_sr_task_sr_closure_csr;
99         FETCH c_sr_task_sr_closure_csr INTO c_sr_task_sr_closure_rec;
100         CLOSE c_sr_task_sr_closure_csr;
101 
102         IF (  c_sr_task_sr_closure_rec.source_object_type_code <> 'SR') THEN
103            return 'SUCCESS';
104         END IF;
105 
106        IF (NVL(c_sr_task_sr_closure_rec.open_flag ,'X') = 'N') THEN
107 
108            OPEN c_sr_task_status_audit ;
109           FETCH c_sr_task_status_audit INTO c_sr_task_status_audit_rec;
110           CLOSE c_sr_task_status_audit ;
111 
112           IF (c_sr_task_status_audit_rec.new_task_status_id <> c_sr_task_status_audit_rec.old_task_status_id) THEN
113 
114              l_status_prop_flag := 'Y';
115              l_request_id       :=  c_sr_task_sr_closure_rec.source_object_id;
116              l_user_id          := NVL(c_sr_task_sr_closure_rec.last_updated_by,FND_GLOBAL.USER_ID);
117              l_resp_appl_id     :=  FND_GLOBAL.RESP_APPL_ID;
118              l_login_id         := NVL(c_sr_task_sr_closure_rec.last_update_login,FND_GLOBAL.LOGIN_ID) ;
119           END IF ;
120        END IF ;
121     END IF;
122 
123     ---- Code to handle charge lines
124     IF (l_event_name = 'oracle.apps.cs.chg.Charges.submitted') THEN
125 
126         l_status_prop_flag := 'Y';
127         l_request_id       :=  p_event.GetValueForParameter('INCIDENT_ID');
128         l_user_id          := p_event.GetValueForParameter('USER_ID');
129         l_resp_appl_id     := p_event.GetValueForParameter('RESP_APPL_ID');
130         l_login_id         := FND_GLOBAL.LOGIN_ID;
131 
132     END IF;
133 
134     IF l_status_prop_flag = 'Y' THEN
135 
136        CS_SR_STATUS_PROPAGATION_PKG.SR_UPWARD_STATUS_PROPAGATION(
137                       p_api_version        => 1.0,
138                       p_service_request_id => l_request_id,
139                       p_user_id            => l_user_id,
140                       p_resp_appl_id       => l_resp_appl_id,
141                       p_login_id           => l_login_id,
142                       x_return_status      => l_return_status,
143                       x_msg_count          => l_msg_count,
144                       x_msg_data           => l_msg_data);
145 
146        IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
147 --           RAISE FND_API.G_EXC_ERROR ;
148           return 'SUCCESS';
149        END IF;
150     END IF ;
151 
152     return 'SUCCESS';
153 
154   EXCEPTION
155     WHEN FND_API.G_EXC_ERROR THEN
156          return 'ERROR';
157 
158     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
159          return 'ERROR';
160 
161     WHEN OTHERS THEN
162          return 'ERROR';
163 
164 END CS_SR_Verify_All;
165 
166 /*
167     This business event subscription notifies the task owner and/or task assignee,
168     if conditions are met, when assigned non-field service tasks are Cancelled/Rejected
169 
170     The conditions are :
171     1) The event that triggered this subscription should be "updateTask" event
172     2) The state restrictions profile option "CS_SR_TASK_STATE_ENABLED" should be set to value "Yes"
173     3) The task that got cancelled/rejected should be non-field service task
174     4) The non-field service task was in assigned state when it was cancelled/rejected
175 */
176 FUNCTION CS_SR_SendNtf_To_NonFS_Task(p_subscription_guid in raw,
177                                      p_event in out nocopy WF_EVENT_T) RETURN varchar2 is
178 
179 -- Generic Event Parameters and Cursors
180     l_event_name 	VARCHAR2(240) := p_event.getEventName( );
181 
182      l_task_audit_id NUMBER;
183      l_task_id NUMBER;
184      l_task_status_id NUMBER;
185      l_task_owner_id NUMBER;
186      l_task_assignee_id NUMBER;
187      l_task_resource_id NUMBER;
188      l_nid NUMBER;
189 
190      l_state_restrictions_on  VARCHAR2(3);
191      l_tasktype_rule VARCHAR2(30);
192      l_task_status VARCHAR2(30);
193      l_owner_role                VARCHAR2(320);
194      l_owner_name                VARCHAR2(240);
195 
196     l_return_status     VARCHAR2(1);
197     l_msg_count         NUMBER;
198     l_msg_data          VARCHAR2(2000);
199 
200 
201     CURSOR cs_sr_oldnew_task_status_csr IS
202       SELECT old_task_status_id, new_task_status_id
203       FROM JTF_TASK_AUDITS_VL
204       WHERE task_audit_id = l_task_audit_id;
205 
206    cs_sr_oldnew_task_status_rec cs_sr_oldnew_task_status_csr%ROWTYPE;
207 
208 
209    CURSOR cs_sr_get_status_flags_csr IS
210       SELECT assigned_flag, cancelled_flag, rejected_flag, start_date_type, end_date_type, name
211         FROM JTF_TASK_STATUSES_VL
212         WHERE task_status_id = l_task_status_id;
213 
214    cs_sr_get_status_flags_rec cs_sr_get_status_flags_csr%ROWTYPE;
215 
216    CURSOR cs_sr_check_nonFS_type_csr IS
217 	  SELECT b.rule, a.task_name, a.description, a.task_number
218 	    FROM JTF_TASKS_VL a,
219 	         JTF_TASK_TYPES_B b
220 	    WHERE a.task_type_id = b.task_type_id
221 	      AND a.task_id = l_task_id;
222 
223    cs_sr_check_nonFS_type_rec cs_sr_check_nonFS_type_csr%ROWTYPE;
224 
225 /* The following 2 cursors will get the task resource information required to send WF notifications */
226   CURSOR cs_sr_get_task_assignee_id_csr IS
227     SELECT b.source_id
228 	FROM jtf_task_assignments a, jtf_rs_resource_extns b
229 	WHERE a.resource_id = b.resource_id(+) AND
230    	      a.task_id = l_task_id;
231 
232   CURSOR cs_sr_get_task_owner_id_csr IS
233     SELECT b.source_id
234 	FROM jtf_tasks_b a, jtf_rs_resource_extns b
235 	WHERE a.owner_id = b.resource_id(+) AND
236    	      a.task_id = l_task_id;
237 
238 BEGIN
239 
240     l_return_status := FND_API.G_RET_STS_SUCCESS;
241 
242     -- Get the value currently held by the "Service: Apply State Restrictions on Tasks" profile option
243     l_state_restrictions_on := FND_PROFILE.VALUE('CS_SR_ENABLE_TASK_STATE_RESTRICTIONS');
244 
245     --INSERT into cs_tmp1 values ('l_state_restrictions_on = ' || l_state_restrictions_on);
246 
247     /*
248     We want to sent error notification to the task owner and/or task assignee
249     only if :
250 
251     1) Task update has occurred
252     2) An assigned non-field service task is cancelled/rejected
253     3) State restrictions are enforced
254 
255     */
256     IF (l_state_restrictions_on = 'Y' AND
257 	l_event_name = 'oracle.apps.jtf.cac.task.updateTask') THEN
258 
259 
260       l_task_id := p_event.GetValueForParameter('TASK_ID');
261       l_task_audit_id := p_event.GetValueForParameter('TASK_AUDIT_ID');
262 
263 
264       OPEN cs_sr_check_nonFS_type_csr;
265       FETCH cs_sr_check_nonFS_type_csr into cs_sr_check_nonFS_type_rec;
266       CLOSE cs_sr_check_nonFS_type_csr;
267 
268       /* Ensure the task is non-field service task */
269       IF( cs_sr_check_nonFS_type_rec.rule is null OR
270 	  (cs_sr_check_nonFS_type_rec.rule is not null AND cs_sr_check_nonFS_type_rec.rule <> 'DISPATCH') ) THEN
271 
272 
273         --l_task_id := p_event.GetValueForParameter('TASK_ID');
274         --l_task_audit_id := p_event.GetValueForParameter('TASK_AUDIT_ID');
275 
276 
277         OPEN cs_sr_oldnew_task_status_csr;
278         FETCH cs_sr_oldnew_task_status_csr INTO cs_sr_oldnew_task_status_rec;
279         CLOSE cs_sr_oldnew_task_status_csr;
280 
281         /* If both old and new status id's are the same, no need to proceed any further */
282 	IF (cs_sr_oldnew_task_status_rec.old_task_status_id <> cs_sr_oldnew_task_status_rec.new_task_status_id) THEN
283 
284 
285 	  l_task_status_id := cs_sr_oldnew_task_status_rec.new_task_status_id;
286 	  OPEN cs_sr_get_status_flags_csr;
287 	  FETCH cs_sr_get_status_flags_csr INTO cs_sr_get_status_flags_rec;
288 	  CLOSE cs_sr_get_status_flags_csr;
289 
290           /* First check if the current task was cancelled/rejected. Else, the subscription can exit right away */
291 	  IF(nvl(cs_sr_get_status_flags_rec.cancelled_flag,' ') = 'Y' OR
292 	     nvl(cs_sr_get_status_flags_rec.rejected_flag,' ') = 'Y') THEN
293 
294 
295 	    l_task_status := cs_sr_get_status_flags_rec.name;
296 
297 	    l_task_status_id := cs_sr_oldnew_task_status_rec.old_task_status_id;
298     	    OPEN cs_sr_get_status_flags_csr;
299 	    FETCH cs_sr_get_status_flags_csr INTO cs_sr_get_status_flags_rec;
300 	    CLOSE cs_sr_get_status_flags_csr;
301 
302 	    /* Now check if the previous task status was "Assigned" status.
303 	       If yes, we need to send notifications to task owner and/or task assignee
304 	    */
305 	    IF(nvl(cs_sr_get_status_flags_rec.assigned_flag,' ') = 'Y'  --AND
306 		      -- nvl(cs_sr_get_status_flags_rec.start_date_type, ' ') = 'SCHEDULED_START' AND
307 		      -- nvl(cs_sr_get_status_flags_rec.end_date_type, ' ') = 'SCHEDULED_END'
308 	      ) THEN
309 
310 
311 	      /* Send WF notifications to task owner.. */
312    	      OPEN cs_sr_get_task_owner_id_csr;
313    	      FETCH cs_sr_get_task_owner_id_csr INTO l_task_owner_id;
314    	      CLOSE cs_sr_get_task_owner_id_csr;
315 
316    	      IF(l_task_owner_id is not null) THEN
317 
318 
319 	        CS_WORKFLOW_PUB.Get_Employee_Role (
320                     p_api_version           =>  1.0,
321                     p_return_status         =>  l_return_status,
322                     p_msg_count             =>  l_msg_count,
323                     p_msg_data              =>  l_msg_data,
324                     p_employee_id           =>  l_task_owner_id,
325                     p_role_name             =>  l_owner_role,
326                     p_role_display_name     =>  l_owner_name );
327 
328 	        IF (l_owner_role IS NOT NULL) THEN
329 
330 
331           	    l_nid := WF_NOTIFICATION.Send(role => l_owner_role,
332 					            msg_type => 'SERVEREQ',
333 						    msg_name => 'CS_SR_NOTIFY_TASK_RESOURCES');
334 
335                   WF_NOTIFICATION.setattrtext(l_nid,'TASK_NUMBER',cs_sr_check_nonFS_type_rec.task_number);
336                   WF_NOTIFICATION.setattrtext(l_nid,'TASK_NAME',cs_sr_check_nonFS_type_rec.task_name);
337                   WF_NOTIFICATION.setattrtext(l_nid,'TASK_DESCRIPTION',cs_sr_check_nonFS_type_rec.description);
338                   WF_NOTIFICATION.setattrtext(l_nid,'TASK_RESOURCE_NAME',l_owner_name);
339                   WF_NOTIFICATION.setattrtext(l_nid,'ASSOCIATION_TYPE','owned by ');
340 		  WF_NOTIFICATION.setattrtext(l_nid,'TASK_STATUS',l_task_status);
341 
342 		  Wf_Notification.Denormalize_Notification(l_nid);
343 
344 		END IF;
345 
346               END IF ; -- End of 	IF(l_task_owner_id is not null)
347 
348 
349      	      OPEN cs_sr_get_task_assignee_id_csr;
350 	      LOOP
351 
352 	        FETCH cs_sr_get_task_assignee_id_csr INTO l_task_assignee_id;
353 	   	EXIT WHEN cs_sr_get_task_assignee_id_csr%NOTFOUND;
354 
355    		IF(l_task_assignee_id is not null) THEN
356 
357 
358 	    	  CS_WORKFLOW_PUB.Get_Employee_Role (
359                     p_api_version           =>  1.0,
360                     p_return_status         =>  l_return_status,
361                     p_msg_count             =>  l_msg_count,
362                     p_msg_data              =>  l_msg_data,
363                     p_employee_id           =>  l_task_assignee_id,
364                     p_role_name             =>  l_owner_role,
365                     p_role_display_name     =>  l_owner_name );
366 
367 	   	  IF (l_owner_role IS NOT NULL) THEN
368 
369 
370           	    l_nid := WF_NOTIFICATION.Send(role => l_owner_role,
371 						  msg_type => 'SERVEREQ',
372 						  msg_name => 'CS_SR_NOTIFY_TASK_RESOURCES');
373                     WF_NOTIFICATION.setattrtext(l_nid,'TASK_NUMBER',cs_sr_check_nonFS_type_rec.task_number);
374                     WF_NOTIFICATION.setattrtext(l_nid,'TASK_NAME',cs_sr_check_nonFS_type_rec.task_name);
375                     WF_NOTIFICATION.setattrtext(l_nid,'TASK_DESCRIPTION',cs_sr_check_nonFS_type_rec.description);
376                     WF_NOTIFICATION.setattrtext(l_nid,'TASK_RESOURCE_NAME',l_owner_name);
377                     WF_NOTIFICATION.setattrtext(l_nid,'ASSOCIATION_TYPE','assigned to ');
378 		    WF_NOTIFICATION.setattrtext(l_nid,'TASK_STATUS',l_task_status);
379 
380 		    Wf_Notification.Denormalize_Notification(l_nid);
381 
382 		  END IF;
383 
384 		END IF; /* end of IF(l_task_assignee_id is not null)  */
385 
386 
387 	      END LOOP;
388 	      CLOSE cs_sr_get_task_assignee_id_csr;
389 
390 
391 
392 	    END IF; -- End of IF(nvl(cs_sr_get_status_flags_rec.assigned_flag,' ') = 'Y' ....
393 
394 	  END IF;	-- End of IF(nvl(cs_sr_get_status_flags_rec.cancelled_flag,' ') = 'Y' ....
395 
396 	END IF;  -- End of IF (cs_sr_oldnew_task_status_rec.old_task_status_id ....
397 
398       END IF ; -- End of IF(l_tasktype_rule is not null)
399 
400     END IF;   -- End of IF (l_state_restrictions_on = 'Y' AND l_event_name = 'oracle.apps.jtf.cac.task.updateTask')
401 
402     return 'SUCCESS';
403 
404   EXCEPTION
405 
406     WHEN OTHERS THEN
407       return 'WARNING';
408 
409 END CS_SR_SendNtf_To_NonFS_Task;
410 
411 
412    -- Enter further code below as specified in the Package spec.
413 END; -- Package Body CS_WF_EVENT_SUBSCRIPTIONS_PKG