[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;