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