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