DBA Data[Home] [Help]

PACKAGE BODY: APPS.CS_SR_STATUS_PROPAGATION_PKG

Source


1 PACKAGE BODY CS_SR_STATUS_PROPAGATION_PKG AS
2 /* $Header: csxsrspb.pls 120.5.12020000.2 2012/07/10 10:47:24 sshilpam ship $ */
3 
4 
5   G_PKG_NAME VARCHAR2(30) := 'CS_SR_STATUS_PROPAGATION_PKG';
6   PROCEDURE VALIDATE_SR_CLOSURE(
7 	      p_api_version   	   IN         NUMBER,
8 	      p_init_msg_list	   IN         VARCHAR2 DEFAULT fnd_api.g_false,
9 	      p_commit		   IN         VARCHAR2,
10               p_service_request_id IN         NUMBER,
11               p_user_id            IN         NUMBER,
12               p_resp_appl_id       IN         NUMBER,
13               p_login_id           IN         NUMBER DEFAULT NULL,
14               x_return_status      OUT NOCOPY VARCHAR2,
15               x_msg_count          OUT NOCOPY NUMBER,
16               x_msg_data           OUT NOCOPY VARCHAR2
17 	      )  IS
18 
19 
20     l_task_id NUMBER;
21     l_inc_id NUMBER;
22     l_api_name VARCHAR2(30) := 'Validate_SR_Closure';
23     l_return_status  VARCHAR2(3);
24     l_func_ret_status  BOOLEAN;
25     l_msg_count    NUMBER;
26     l_msg_data   VARCHAR2(2000);
27 
28     CS_UNSUBMITTED_CHARGES_EXIST exception;
29     CS_OPEN_TASKS_EXIST  exception;
30 
31     CURSOR c_charge_lines IS
32       SELECT incident_id
33         FROM CS_ESTIMATE_DETAILS
34         WHERE incident_id = p_service_request_id
35 	  AND (charge_line_type = 'IN_PROGRESS'
36             OR (charge_line_type='ACTUAL'
37 	        AND interface_to_oe_flag = 'Y'
38 	        AND order_line_id is null));
39 
40 	CURSOR c_OpenTasks IS
41 	  SELECT a.task_id,
42                  a.source_object_id ,
43 	         --b.closed_flag,
44                  a.open_flag,
45 	         --b.completed_flag,
46 	         a.scheduled_start_date,
47 	         a.scheduled_end_date,
48 	         a.actual_start_date,
49 	         a.actual_end_date,
50 	         c.rule
51 	    FROM JTF_TASKS_B a,
52 	         --JTF_TASK_STATUSES_B b,
53 	         JTF_TASK_TYPES_B c
54 	    WHERE a.task_type_id = c.task_type_id
55 	     --a.task_status_id = b.task_status_id
56 	      AND a.source_object_type_code = 'SR'
57 	      AND a.source_object_id = p_service_request_id;
58 
59     BEGIN
60 
61       x_return_status := FND_API.G_RET_STS_SUCCESS;
62 
63       /* Check if child is a charge line with charge_line_type = 'Actual'
64          and OM interface flag = 'Y' and charge line is not yet submitted
65          to OM */
66 
67       OPEN c_charge_lines;
68       fetch c_charge_lines into l_inc_id;
69 
70       IF(c_charge_lines%FOUND) THEN
71         raise CS_UNSUBMITTED_CHARGES_EXIST;
72       END IF;
73       CLOSE c_charge_lines;
74 
75 
76 
77       For sr_tasks in c_OpenTasks LOOP
78 
79 	/* check if the child is :
80            *) Field Service task  AND (if not, the FS api should return success)
81 	*/
82 	IF(sr_tasks.rule = 'DISPATCH') THEN
83 
84 --	   Invoke Field Service API
85 
86          l_func_ret_status := CSF_TASKS_PUB.task_is_closable
87 	                     ( p_task_id => sr_tasks.task_id,
88 	                       x_return_status => l_return_status,
89 	                       x_msg_count  => l_msg_count,
90 	                       x_msg_data  => l_msg_data);
91 
92           IF (l_func_ret_status = FALSE) THEN
93              raise FND_API.G_EXC_ERROR;
94 	  END IF;
95 	ELSE
96 
97 	/* Check if child is an open non-field service task  */
98 	  --IF (nvl(sr_tasks.closed_flag,'N') <> 'Y') THEN
99 	    IF (nvl(sr_tasks.open_flag,'Y') <> 'N') THEN
100 	       IF (sr_tasks.actual_start_date is not null) THEN
101 		 IF (trunc(sr_tasks.actual_start_date) <= trunc(sysdate)                         -- bug 11847647: Added the = sign in the condition
102 	           AND trunc(nvl(sr_tasks.actual_end_date,sysdate+1)) > trunc(sysdate)) THEN     -- bug 9653580: Removed the = sign in the condition
103 		                                                                                 -- bug 11652506: Added +1 to sysdate
104                    raise CS_OPEN_TASKS_EXIST;
105                  END IF;
106                ELSE
107 	          IF (sr_tasks.scheduled_start_date is not null
108 	            AND (trunc(sr_tasks.scheduled_start_date) <= trunc(sysdate)                   -- bug 11847647: Added the = sign in the condition
109 	            AND trunc(nvl(sr_tasks.scheduled_end_date,sysdate+1)) > trunc(sysdate))) THEN -- bug 9653580: Removed the = sign in the condition
110 												  -- bug 11652506: Added +1 to sysdate
111                     raise CS_OPEN_TASKS_EXIST;
112 
113 	          END IF;
114 	        END IF;
115               END IF;
116             END IF;
117 	  END LOOP;
118       EXCEPTION
119          WHEN FND_API.G_EXC_ERROR THEN
120            x_return_status := FND_API.G_RET_STS_ERROR;
121            FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
122                                        p_data  => x_msg_data);
123 
124          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
125            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
126            FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
127                                        p_data  => x_msg_data);
128 
129          WHEN  CS_UNSUBMITTED_CHARGES_EXIST THEN
130   	   x_return_status := FND_API.G_RET_STS_ERROR;
131            FND_MESSAGE.SET_NAME('CS','CS_SR_OPEN_CHARGES_EXISTS');
132            FND_MSG_PUB.ADD;
133            FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
134                                        p_data  => x_msg_data);
135 
136          WHEN  CS_OPEN_TASKS_EXIST THEN
137   	   x_return_status := FND_API.G_RET_STS_ERROR;
138            FND_MESSAGE.SET_NAME('CS','CS_SR_OPEN_TASKS_EXISTS');
139            FND_MSG_PUB.ADD;
140            FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
141                                        p_data  => x_msg_data);
142          WHEN OTHERS THEN
143            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
144            IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
145              FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
146            END IF;
147            FND_MSG_PUB.Count_And_Get( p_count        => x_msg_count,
148                                       p_data         => x_msg_data);
149   END;
150 
151 -- -----------------------------------------------------------------------------
152 -- Modification History
153 -- Date     Name     Desc
154 -- -----------------------------------------------------------------------------
155 -- 05/10/05 smisra   Fixed bug 4211144
156 --                   changed the type of variable l_auto_Task_close_status from
157 --                   varchar2(3) to Number. Added another variable
158 --                   l_profile_value to get value of profile
159 --                   CS_SR_TASK_AUTO_CLOSE_STATUS and set
160 --                   l_auto_task_close_status using to_number of l_profile_value
161 --                   The above change was needed to avoid pl/sql numberic value
162 --                   Error. Called csf_tasks_pub.close_task using named natotion
163 -- 07/06/05 smisra   Fixed bug 4453777
164 --                   Changed the size of variable l_profile_value from
165 --                   varchar2 to varchar2(240)
166 -- -----------------------------------------------------------------------------
167   PROCEDURE CLOSE_SR_CHILDREN(
168 	      p_api_version   	    IN         NUMBER,
169 	      p_init_msg_list       IN         VARCHAR2 DEFAULT fnd_api.g_false,
170 	      p_commit		    IN         VARCHAR2 DEFAULT fnd_api.g_false,
171 	      p_validation_required IN         VARCHAR2,
172 	      p_action_required     IN 	       VARCHAR2,
173               p_service_request_id  IN         NUMBER,
174               p_user_id             IN         NUMBER,
175               p_resp_appl_id        IN         NUMBER,
176               p_login_id            IN         NUMBER DEFAULT NULL,
177               x_return_status       OUT NOCOPY VARCHAR2,
178               x_msg_count           OUT NOCOPY NUMBER,
179               x_msg_data            OUT NOCOPY VARCHAR2
180 	      )  IS
181 
182 
183     CURSOR c_OpenTasks IS
184       SELECT task.task_id,
185              task.object_version_number,
186              --status.closed_flag,
187              task.open_flag,
188              type.rule
189 	FROM JTF_TASKS_B task,
190 	     --JTF_TASK_STATUSES_B  status,
191              JTF_TASK_TYPES_B type
192 	WHERE task.source_object_type_code = 'SR'
193 	  AND task.source_object_id = p_service_request_id
194           AND task.task_type_id = type.task_type_id
195           --AND task.task_status_id = status.task_status_id
196 	  --AND nvl(status.closed_flag,'N') = 'N';
197 	  AND nvl(task.open_flag,'Y') = 'Y';
198 
199     CURSOR c_sr_status IS
200       SELECT status.close_flag
201         FROM cs_incidents_all_B sr,
202              cs_incident_statuses_b status
203         WHERE sr.incident_id = p_service_request_id
204           AND sr.incident_status_id = status.incident_status_id
205           AND status.close_flag = 'Y';
206 
207     l_api_name VARCHAR2(30) := 'Close_SR_Children';
208 
209     l_status_flag            varchar2(3);
210     l_profile_value          varchar2(240);
211     l_auto_task_close_status NUMBER     ;
212     l_return_status  VARCHAR2(3);
213 
214     BEGIN
215 
216       SAVEPOINT CLOSE_SR_CHILDREN;
217 
218       x_return_status := FND_API.G_RET_STS_SUCCESS;
219 
220       -- If the auto task close status is null, return immediately
221 
222       FND_PROFILE.GET('CS_SR_TASK_AUTO_CLOSE_STATUS',l_profile_value);
223 
224       IF  (l_profile_value is not null) THEN
225       -- Invoke the validation API if validation_required = Y
226         l_auto_task_close_status := to_number(l_profile_value);
227         IF (p_validation_required = 'Y') THEN
228           CS_SR_STATUS_PROPAGATION_PKG.VALIDATE_SR_CLOSURE(
229    	                                 p_api_version,
230 	                                 p_init_msg_list,
231 	                                 p_commit,
232                                          p_service_request_id,
233                                          p_user_id ,
234                                          p_resp_appl_id ,
235                                          p_login_id ,
236                                          l_return_status,
237                                          x_msg_count,
238                                          x_msg_data);
239 
240            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
241 	     x_return_status := FND_API.G_RET_STS_ERROR;
242 	     raise FND_API.G_EXC_ERROR;
243 	   END IF;
244        END IF;
245 
246        -- Continue with the rest of the flow if action_required = Y
247        if (p_action_required = 'Y') then
248 
249           -- Get all open tasks
250           FOR sr_tasks in c_OpenTasks
251             LOOP
252 
253               IF (sr_tasks.rule = 'DISPATCH') THEN
254                 --   Invoke Field Service action API();
255 --dbms_output.put_line('Found a FS task ');
256                  CSF_TASKS_PUB.close_task
257                  ( p_api_version   => 1.0
258                  , p_init_msg_list => p_init_msg_list
259                  , p_commit        => p_commit
260                  , p_task_id       => sr_tasks.task_id
261                  , x_return_status => l_return_status
262                  , x_msg_count     => x_msg_count
263                  , x_msg_data      => x_msg_data
264                  );
265 
266 	         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
267 	           raise FND_API.G_EXC_UNEXPECTED_ERROR;
268 	         end if;
269                ELSE
270 
271                /*
272 	          Call update_task() API to update the task status to the
273                   status value held in the Service: Task Auto Close Status
274                   profile option
275                */
276 
277 --dbms_output.put_line('Found a NFS task ');
278 
279                  JTF_TASKS_PUB.update_task(
280 	                                p_api_version => 1.0,
281 	                                p_init_msg_list => p_init_msg_list,
282 	                                p_commit => p_commit,
283                                         p_object_version_number => sr_tasks.object_version_number,
284                                         p_task_id => sr_tasks.task_id,
285                                         p_task_status_id => l_auto_task_close_status,
286                                         x_return_status => l_return_status,
287                                         x_msg_count => x_msg_count,
288                                         x_msg_data => x_msg_data
289                                        );
290 
291  	         -- If update_task() API returned error, raise an exception
292 
293 	         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
294 	           raise FND_API.G_EXC_UNEXPECTED_ERROR;
295 	         end if;
296    	       END IF;
297              END LOOP;
298 	   END IF;
299          END IF;
300 
301     EXCEPTION
302       WHEN FND_API.G_EXC_ERROR THEN
303         ROLLBACK TO CLOSE_SR_CHILDREN;
304         x_return_status := FND_API.G_RET_STS_ERROR;
305         FND_MSG_PUB.Count_And_Get
306           ( p_count => x_msg_count,
307             p_data  => x_msg_data
308           );
309       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
310         ROLLBACK TO CLOSE_SR_CHILDREN;
311         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
312         FND_MSG_PUB.Count_And_Get
313           ( p_count => x_msg_count,
314             p_data  => x_msg_data
315           );
316       WHEN OTHERS THEN
317         ROLLBACK TO CLOSE_SR_CHILDREN;
318         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
319         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
320           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
321         END IF;
322         FND_MSG_PUB.Count_And_Get( p_count        => x_msg_count,
323                                    p_data         => x_msg_data);
324 
325     END;
326 
327 
328   PROCEDURE SR_UPWARD_STATUS_PROPAGATION(
329 	      p_api_version   	   IN         NUMBER,
330 	      p_init_msg_list	   IN         VARCHAR2 DEFAULT fnd_api.g_false,
331 	      p_commit		   IN         VARCHAR2 DEFAULT fnd_api.g_false,
332               p_service_request_id IN         NUMBER,
333               p_user_id            IN         NUMBER,
334               p_resp_appl_id       IN         NUMBER,
335 	      p_resp_id            IN         NUMBER,
336               p_login_id           IN         NUMBER DEFAULT NULL,
337               x_return_status      OUT NOCOPY VARCHAR2,
338               x_msg_count          OUT NOCOPY NUMBER,
339               x_msg_data           OUT NOCOPY VARCHAR2
340 	      )  IS
341 
342     l_task_id NUMBER;
343     l_status_id NUMBER;
344     l_child_id NUMBER;
345     l_resp_id NUMBER;
346     l_interaction_id NUMBER;
347     l_object_version_number  NUMBER;
348     l_close_date  DATE;
349     l_sr_status  NUMBER;
350     l_api_name VARCHAR2(30) := 'SR_Upward_Status_Propagation';
351     l_return_status  VARCHAR2(3);
352     l_msg_count    NUMBER;
353     l_msg_data   VARCHAR2(2000);
354 
355     CS_UNSUBMITTED_CHARGES_EXIST exception;
356     CS_OPEN_TASKS_EXIST  exception;
357     CS_DEPOT_ORDERS_EXIST exception;
358     CS_CMRO_ORDERS_EXIST exception;
359     CS_EAM_ORDERS_EXIST exception;
360 
361     CURSOR c_status(c_request_id number) IS
362       SELECT incident_status_id
363         FROM cs_incidents_all_b
364         WHERE incident_id = c_request_id;
365 
366     CURSOR c_charge_lines IS
367       SELECT incident_id
368         FROM CS_ESTIMATE_DETAILS
369         WHERE incident_id = p_service_request_id
370 	  AND (charge_line_type = 'IN_PROGRESS'
371             OR (charge_line_type='ACTUAL'
372 	        AND interface_to_oe_flag = 'Y'
373 	        AND order_line_id is null));
374 
375 	CURSOR c_open_tasks IS
376 	  SELECT tasks.task_id
377 	    FROM JTF_TASKS_B tasks
378 	         --JTF_TASK_STATUSES_B status
379 	    WHERE tasks.source_object_type_code  = 'SR'
380 	      AND tasks.source_object_id         = p_service_request_id
381 	      --AND tasks.task_status_id           = status.task_status_id
382 	      --AND nvl(status.closed_flag,'N')    = 'N';
383 	      AND nvl(tasks.open_flag,'Y')    = 'Y';
384 
385      CURSOR c_depot_orders IS
386        SELECT REPAIR_LINE_ID
387          FROM csd_repairs
388          WHERE incident_id = p_service_request_id;
389 
390      CURSOR c_eam_orders IS
391        SELECT wip_entity_id
392          FROM eam_wo_service_association
393          WHERE service_request_id = p_service_request_id;
394 
395      CURSOR c_cmro_orders IS
396        SELECT ue.mr_header_id
397          FROM ahl_unit_effectivities_app_v sr_ue,
398               ahl_unit_effectivities_app_v ue,
399               ahl_ue_relationships uer
400          WHERE sr_ue.unit_effectivity_id = uer.ue_id
401            and uer.related_ue_id = ue.unit_effectivity_id
402            and sr_ue.cs_incident_id = p_service_request_id;
403      CURSOR c_obj_ver_num IS
404        Select object_version_number
405          FROM cs_incidents_all_b
406          WHERE incident_id = p_service_request_id;
407 
408 
409 /* ROOPA - 12/02/2003 - Begin*/
410 /* This block of code takes care of the exception path for upward status propagation */
411     CURSOR l_cs_sr_get_empid_csr IS
412       SELECT inc.incident_number, emp.source_id
413       FROM jtf_rs_resource_extns emp ,
414            cs_incidents_all_b inc
415       WHERE emp.resource_id = inc.incident_owner_id
416         AND inc.incident_id = p_service_request_id;
417 
418     l_subject_owner_id		NUMBER;
419     l_notification_id   NUMBER;
420 
421     l_owner_role        VARCHAR2(100);
422     l_owner_name        VARCHAR2(240);
423     l_request_number    	VARCHAR2(64);
424 /* ROOPA - 12/02/2003 - End */
425 
426     BEGIN
427 
428       SAVEPOINT SR_UPWARD_STATUS_PROPAGATION;
429 
430       x_return_status := FND_API.G_RET_STS_SUCCESS;
431       FND_GLOBAL.APPS_INITIALIZE(
432                               user_id      => p_user_id,
433                               resp_id      => p_resp_id,
434                               resp_appl_id => p_resp_appl_id
435                           );
436 
437       open c_status(p_service_request_id);
438       fetch c_status into l_sr_status;
439       IF (c_status%NOTFOUND) THEN
440         raise FND_API.G_EXC_UNEXPECTED_ERROR;
441       END IF;
442       -- If all the above conditions are satisfied, update SR status
443       -- to 'Close' status. This status is derived fromt the profile
444       -- 'Service : Service Request Auto Close Status'
445       -- (Internal Name - CS_SR_AUTO_CLOSE_STATUS')
446 
447       FND_PROFILE.GET('CS_SR_AUTO_CLOSE_STATUS',l_status_id);
448 
449       IF (l_status_id IS NOT NULL and l_status_id <> l_sr_status) THEN
450         open c_depot_orders;
451         fetch c_depot_orders into l_child_id;
452         IF(c_depot_orders%FOUND) THEN
453           raise CS_DEPOT_ORDERS_EXIST;
454         END IF;
455 
456         open c_eam_orders;
457         fetch c_eam_orders into l_child_id;
458         IF(c_eam_orders%FOUND) THEN
459           raise CS_EAM_ORDERS_EXIST;
460         END IF;
461 
462         open c_cmro_orders;
463         fetch c_cmro_orders into l_child_id;
464         IF(c_cmro_orders%FOUND) THEN
465           raise CS_CMRO_ORDERS_EXIST;
466         END IF;
467 
468         -- Check if child is a charge line with charge_line_type = 'Actual'
469         -- and OM interface flag = 'Y' and charge line is not yet submitted
470         -- to OM
471 
472 
473         open c_charge_lines;
474         fetch c_charge_lines into l_child_id;
475         IF(c_charge_lines%FOUND) THEN
476           raise CS_UNSUBMITTED_CHARGES_EXIST;
477         END IF;
478 
479         open c_open_tasks;
480         fetch c_open_tasks into l_child_id;
481         IF(c_open_tasks%FOUND) THEN
482           raise CS_OPEN_TASKS_EXIST;
483         END IF;
484 
485     --      IF (l_close_flag = 'Y') THEN
486     --        l_closed_date := sysdate;
487     --      ELSE
488     --        l_closed_date := NULL;
489    --       END IF;
490 
491         open c_obj_ver_num;
492         fetch c_obj_ver_num into l_object_version_number;
493         close c_obj_ver_num;
494 
495         l_resp_id := fnd_global.resp_id;
496 
497 	CS_ServiceRequest_PVT.Update_Status
498 		( p_api_version		=>2.0,
499 		  p_init_msg_list	=>p_init_msg_list,
500 		  p_commit		=>p_commit,
501 		  p_resp_id		=> fnd_global.RESP_ID ,
502 		  p_validation_level     => fnd_api.g_valid_level_none,
503 		  x_return_status	=>x_return_status,
504 		  x_msg_count		=>x_msg_count,
505 		  x_msg_data		=>x_msg_data,
506 		  p_request_id		=> p_service_request_id,
507 		  p_object_version_number =>l_object_version_number,
508 		  p_status_id		=> l_status_id,
509 		  p_last_updated_by      => p_user_id,
510 		  p_last_update_date     => sysdate,
511 		  x_interaction_id	 => l_interaction_id
512 		);
513 
514 /*         CS_ServiceRequest_PVT.Update_Status
515            ( p_api_version          => 2.0,
516              p_init_msg_list        => p_init_msg_list,
517              p_commit               => p_commit,
518              p_resp_id              => l_resp_id,
519              p_validation_level     => fnd_api.g_valid_level_none,
520              x_return_status        => x_return_status,
521              x_msg_count            => x_msg_count,
522              x_msg_data             => x_msg_data,
523              p_request_id           => p_service_request_id,
524              p_status_id            => l_status_id,
525            --  p_closed_date          => l_close_date,
526              p_object_version_number => l_object_version_number,
527              p_last_updated_by      => p_user_id,
528              p_last_update_date     => sysdate,
529              x_interaction_id       => l_interaction_id);*/
530 
531 
532 
533 /* ROOPA - 12/02/2003 - Begin*/
534 /* This block of code takes care of the exception path for upward status propagation */
535 /* Logic
536    ------
537    1) Get the current service request's owner
538    2) Get the WF role associated to the current service request's owner
539    3) If a WF role exists,
540         -- Set the required WF message attributes
541         -- Invoke WF_NOTIFICATION.Send() API to send an independent notificatiom
542             to the service request owner
543 */
544    IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
545     OPEN l_cs_sr_get_empid_csr;
546 	FETCH l_cs_sr_get_empid_csr	INTO l_request_number, l_subject_owner_id;
547 
548 	IF( l_cs_sr_get_empid_csr%NOTFOUND OR l_subject_owner_id IS NULL) THEN
549 	  l_owner_role := NULL;
550     ELSE
551 	  -- Retrieve the role name for the request owner
552           CS_WORKFLOW_PUB.Get_Employee_Role (
553                     p_api_version           =>  1.0,
554                     p_return_status         =>  l_return_status,
555                     p_msg_count             =>  l_msg_count,
556                     p_msg_data              =>  l_msg_data,
557                     p_employee_id           =>  l_subject_owner_id,
558                     p_role_name             =>  l_owner_role,
559                     p_role_display_name     =>  l_owner_name );
560 	END IF;
561 	CLOSE l_cs_sr_get_empid_csr;
562 
563 
564     If (l_owner_role IS NOT NULL) THEN
565 
566       l_notification_id := WF_Notification.Send(
567                         role            =>  l_owner_role,
568                         msg_type        =>  'SERVEREQ',
569                         msg_name        =>  'CS_SR_NTFY_OWNER_UPDATE_FAILED');
570 
571       WF_Notification.SetAttrText(
572                         nid             =>  l_notification_id,
573                         aname           =>  'UPDATE_ERROR_DATA',
574                         avalue          =>  l_msg_data);
575 
576 
577       WF_Notification.SetAttrText(
578                         nid             =>  l_notification_id,
579                         aname           =>  'UPDATE_REQUEST_NUMBER',
580                         avalue          =>  l_request_number);
581 
582 
583       WF_NOTIFICATION.SetAttrText(
584                         nid             =>      l_notification_id,
585                         aname           =>      '#FROM_ROLE',
586                         avalue          =>      l_owner_role);
587 
588 
589       END IF; /*     If (l_owner_role IS NOT NULL) */
590      END IF; /* IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) */
591 /* ROOPA - 12/02/2003 - End*/
592 
593 
594 
595       END IF;
596 
597     EXCEPTION
598       WHEN FND_API.G_EXC_ERROR THEN
599         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
600         x_return_status := FND_API.G_RET_STS_ERROR;
601         FND_MSG_PUB.Count_And_Get
602           ( p_count => x_msg_count,
603             p_data  => x_msg_data
604           );
605       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
606         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
607         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
608         FND_MSG_PUB.Count_And_Get
609           ( p_count => x_msg_count,
610             p_data  => x_msg_data
611           );
612       WHEN  CS_DEPOT_ORDERS_EXIST THEN
613         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
614   	x_return_status := FND_API.G_RET_STS_ERROR;
615         FND_MESSAGE.SET_NAME('CS','CS_SR_EAM_ORDERS_EXIST');
616         FND_MSG_PUB.ADD;
617         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
618                                     p_data  => x_msg_data);
619       WHEN  CS_EAM_ORDERS_EXIST THEN
620         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
621   	x_return_status := FND_API.G_RET_STS_ERROR;
622         FND_MESSAGE.SET_NAME('CS','CS_SR_CMRO_ORDERS_EXIST');
623         FND_MSG_PUB.ADD;
624         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
625                                     p_data  => x_msg_data);
626       WHEN  CS_CMRO_ORDERS_EXIST THEN
627         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
628   	x_return_status := FND_API.G_RET_STS_ERROR;
629         FND_MESSAGE.SET_NAME('CS','CS_SR_CMRO_ORDERS_EXIST');
630         FND_MSG_PUB.ADD;
631         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
632                                     p_data  => x_msg_data);
633       WHEN  CS_UNSUBMITTED_CHARGES_EXIST THEN
634         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
635   	x_return_status := FND_API.G_RET_STS_ERROR;
636         FND_MESSAGE.SET_NAME('CS','CS_SR_OPEN_CHARGES_EXISTS');
637         FND_MSG_PUB.ADD;
638         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
639                                     p_data  => x_msg_data);
640       WHEN  CS_OPEN_TASKS_EXIST THEN
641         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
642   	x_return_status := FND_API.G_RET_STS_ERROR;
643         FND_MESSAGE.SET_NAME('CS','CS_SR_OPEN_TASKS_EXIST');
644         FND_MSG_PUB.ADD;
645         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
646                                     p_data  => x_msg_data);
647       WHEN OTHERS THEN
648         ROLLBACK TO SR_UPWARD_STATUS_PROPAGATION;
649         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
650         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
651           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
652         END IF;
653         FND_MSG_PUB.Count_And_Get( p_count        => x_msg_count,
654                                    p_data         => x_msg_data,
655                                    p_encoded      => FND_API.G_FALSE );
656   END;
657 
658   END CS_SR_STATUS_PROPAGATION_PKG;