DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMD_OPERATION_ACTIVITIES_PUB

Source


1 PACKAGE BODY GMD_OPERATION_ACTIVITIES_PUB AS
2 /*  $Header: GMDPOPAB.pls 120.0 2005/05/25 19:17:14 appldev noship $
3  +=========================================================================+
4  | FILENAME                                                                |
5  |     GMDPOPAB.pls                                                        |
6  |                                                                         |
7  | DESCRIPTION                                                             |
8  |     This package contains public definitions for  			   |
9  |     creating, modifying, deleting operation activities                  |
10  |                                                                         |
11  | HISTORY                                                                 |
12  |     21-AUG-2002  Sandra Dulyk    Created                                |
13  | 20-FEB-2004 NSRIVAST  Bug# 3222090                                      |
14  |                       Removed call to FND_PROFILE.VALUE('AFLOG_ENABLED')|
15  +=========================================================================+
16   API Name  : GMD_OPERATION_ACTIVITIES_PUB
17   Type      : Public
18   Function  : This package contains public procedures used to create, modify, and delete operation activties
19   Pre-reqs  : N/A
20   Parameters: Per function
21 
22   Current Vers  : 1.0
23 
24   Previous Vers : 1.0
25 
26   Initial Vers  : 1.0
27   Notes
28 */
29 
30 --Bug 3222090, NSRIVAST 20-FEB-2004, BEGIN
31 --Forward declaration.
32    FUNCTION set_debug_flag RETURN VARCHAR2;
33    l_debug VARCHAR2(1) := set_debug_flag;
34 
35    FUNCTION set_debug_flag RETURN VARCHAR2 IS
36    l_debug VARCHAR2(1):= 'N';
37    BEGIN
38     IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
39       l_debug := 'Y';
40     END IF;
41     RETURN l_debug;
42    END set_debug_flag;
43 --Bug 3222090, NSRIVAST 20-FEB-2004, END
44 
45   /*==============================================
46   Procedure
47      insert_operation_activity
48   Description
49     This particular procedure is used to insert an
50     operation activity Parameters
51   ================================================ */
52   PROCEDURE insert_operation_activity
53   ( p_api_version 	IN              NUMBER
54   , p_init_msg_list	IN              BOOLEAN
55   , p_commit		IN              BOOLEAN
56   , p_oprn_no		IN              gmd_operations.oprn_no%TYPE
57   , p_oprn_vers		IN              gmd_operations.oprn_vers%TYPE
58   , p_oprn_activity	IN OUT NOCOPY 	gmd_operation_activities%ROWTYPE
59   , p_oprn_rsrc_tbl	IN              gmd_operation_resources_pub.gmd_oprn_resources_tbl_type
60   , x_message_count 	OUT NOCOPY  	NUMBER
61   , x_message_list 	OUT NOCOPY  	VARCHAR2
62   , x_return_status	OUT NOCOPY  	VARCHAR2)    IS
63 
64     v_activity	        gmd_operation_activities.activity%TYPE;
65     v_oprn_line_Id 	gmd_operation_activities.oprn_line_id%TYPE;
66     v_oprn_id	        gmd_operation_activities.oprn_id%TYPE;
67     v_count	        NUMBER;
68 
69    l_retn_status	VARCHAR2(1);
70    l_api_version	NUMBER := 1.0;
71 
72    setup_failure  	EXCEPTION;
73    invalid_version  	EXCEPTION;
74    ins_oprn_actv_err	EXCEPTION;
75 
76    CURSOR check_oprn_id (p_oprn_id gmd_operations.oprn_id%TYPE)IS
77       SELECT 1
78       FROM gmd_operations_b
79       WHERE oprn_id = p_oprn_id
80        AND delete_mark = 0;
81 
82    CURSOR check_oprn_no_vers(p_oprn_no gmd_operations.oprn_no%TYPE
83                            , p_oprn_vers gmd_operations.oprn_vers%TYPE ) IS
84      SELECT oprn_id
85      FROM gmd_operations_b
86      WHERE oprn_No = p_oprn_no
87          AND oprn_vers = p_oprn_vers
88          and delete_Mark = 0;
89 
90    CURSOR check_activity(v_activity gmd_operation_activities.activity%TYPE) IS
91      SELECT 1
92      FROM gmd_activities
93      WHERE activity = v_activity
94      and delete_mark = 0;
95 
96    CURSOR Cur_gen_oprnline_id IS
97       SELECT GEM5_OPRNLINE_ID_S.NEXTVAL
98       FROM   FND_DUAL;
99 
100  BEGIN
101    SAVEPOINT insert_oprn_actv;
102 
103    /* Initialize message list and count if needed */
104    IF p_init_msg_list THEN
105       fnd_msg_pub.initialize;
106    END IF;
107 
108    IF (l_debug = 'Y') THEN
109      gmd_debug.put_line('In insert_operation_activity public.');
110    END IF;
111 
112    /* Initially let us assign the return status to success */
113    x_return_status := FND_API.g_ret_sts_success;
114 
115    IF NOT gmd_api_grp.setup_done THEN
116        gmd_api_grp.setup_done := gmd_api_grp.setup;
117    END IF;
118    IF NOT gmd_api_grp.setup_done THEN
119        RAISE setup_failure;
120    END IF;
121 
122    /* Make sure we are call compatible */
123    IF NOT FND_API.compatible_api_call(l_api_version
124                                 ,p_api_version
125                                 ,'insert_operation_activity'
126                                 ,'gmd_operation_activities_pub') THEN
127       RAISE invalid_version;
128    END IF;
129 
130    /* Operation number ID must be passed, otherwise give error, also check operation exists */
131    IF (p_oprn_activity.oprn_id IS NULL) THEN
132       IF ((p_oprn_no IS NULL) OR (p_oprn_vers IS NULL)) THEN
133      	FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
134         FND_MESSAGE.SET_TOKEN ('MISSING', 'OPRN_NO');
135         FND_MSG_PUB.ADD;
136       ELSE
137         OPEN check_oprn_no_vers(p_oprn_no, p_oprn_vers);
138         FETCH check_oprn_no_vers INTO v_oprn_id;
139          IF check_oprn_no_vers%NOTFOUND  THEN
140             /* must pass existing operation no and vers */
141             FND_MESSAGE.SET_NAME('GMD','FM_INVOPRN');
142             FND_MSG_PUB.ADD;
143             RAISE ins_oprn_actv_err;
144          END IF;
145         CLOSE check_oprn_no_vers;
146       END IF;
147    ELSE
148      v_oprn_id := p_oprn_activity.oprn_id;
149    END IF;
150 
151    /* Operation Security Validation */
152    /* Validation: Check if this users performing update has access to this
153       operation owner orgn code */
154    IF NOT GMD_API_GRP.Check_orgn_access(Entity     => 'OPERATION'
155                                        ,Entity_id  => v_oprn_id) THEN
156      RAISE ins_oprn_actv_err;
157    END IF;
158 
159    /* Activity must be passed, otherwise give error */
160    IF p_oprn_activity.activity IS NULL THEN
161       IF (l_debug = 'Y') THEN
162         gmd_debug.put_line('operation activity required');
163       END IF;
164 
165       FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
166       FND_MESSAGE.SET_TOKEN ('MISSING', 'ACTIVITY');
167       FND_MSG_PUB.ADD;
168       RAISE ins_oprn_actv_err;
169    ELSE
170       v_activity := p_oprn_activity.activity;
171       OPEN check_activity(v_activity);
172       FETCH check_activity INTO v_count;
173       IF check_activity%NOTFOUND THEN
174         /* must pass existing activity */
175         FND_MESSAGE.SET_NAME('GMD','FM_INVACTIVITY');
176         FND_MSG_PUB.ADD;
177         RAISE ins_oprn_actv_err;
178       END IF;
179       CLOSE check_activity;
180    END IF;
181 
182    /* check activity factor has a value else default */
183    IF p_oprn_activity.activity_factor IS NULL THEN
184        p_oprn_activity.activity_factor := 1;
185    ELSIF p_oprn_activity.activity_factor < 0 THEN
186        gmd_api_grp.log_message ('GMD_NEGATIVE_FIELDS',
187                                 'FIELD', 'ACTIVITY_FACTOR');
188        RAISE ins_oprn_actv_err;
189    END IF;
190 
191    /* check offset interval has a value else default */
192    IF p_oprn_activity.offset_interval IS NULL THEN
193        p_oprn_activity.offset_interval := 0;
194    ELSIF p_oprn_activity.offset_interval < 0 THEN
195        gmd_api_grp.log_message ('GMD_NEGATIVE_FIELDS',
196                                 'FIELD','OFFSET_INTERVAL');
197        RAISE ins_oprn_actv_err;
198    END IF;
199 
200    /* check sequence_dependent_ind has a value else default */
201    IF p_oprn_activity.sequence_dependent_ind IS NULL THEN
202        p_oprn_activity.sequence_dependent_ind := 0;
203    ELSIF p_oprn_activity.sequence_dependent_ind NOT IN (1,0) THEN
204        FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_SEQ_DEP_IND');
205        FND_MSG_PUB.ADD;
206        RAISE ins_oprn_actv_err;
207    END IF;
208 
209    /* generate oprnline_id */
210    OPEN Cur_gen_oprnline_id;
211    FETCH Cur_gen_oprnline_id INTO p_oprn_activity.oprn_line_id;
212    CLOSE Cur_gen_oprnline_id;
213 
214    IF x_return_status = 'S' THEN
215       IF (l_debug = 'Y') THEN
216         gmd_debug.put_line('before PVT insert_oprn_activity routine called');
217       END IF;
218 
219       /* call insert operation activity routine using oprn_id */
220       GMD_OPERATION_ACTIVITIES_PVT.insert_operation_activity(
221            	                   p_oprn_id       => v_oprn_id,
222            	                   p_oprn_activity => p_oprn_activity,
223       		                   x_message_count => x_message_count,
224       		                   x_message_list  => x_message_list,
225       		                   x_return_status => l_retn_status);
226 
227       IF l_retn_status <> FND_API.g_ret_sts_success THEN
228         RAISE ins_oprn_actv_err;
229       END IF;
230 
231       IF p_oprn_rsrc_tbl.count > 0  THEN
232          /* call insert operation resources */
233          GMD_OPERATION_RESOURCES_PUB.insert_operation_resources(
234                                    p_init_msg_list => FALSE,
235 		                   p_oprn_line_id  => p_oprn_activity.oprn_line_id,
236 		                   p_oprn_rsrc_tbl => p_oprn_rsrc_tbl,
237             	                   x_message_count => x_message_count,
238         	                   x_message_list  => x_message_list,
239       		                   x_return_status => l_retn_status);
240          IF l_retn_status <> FND_API.g_ret_sts_success THEN
241            RAISE ins_oprn_actv_err;
242          END IF;
243       END IF;
244 
245       IF p_commit THEN
246          COMMIT;
247       END IF;
248     END IF;
249 
250     FND_MSG_PUB.count_and_get(p_count   => x_message_count
251                               ,p_data    => x_message_list);
252   EXCEPTION
253     WHEN setup_failure OR invalid_version THEN
254          ROLLBACK TO SAVEPOINT insert_oprn_actv;
255          x_return_status := FND_API.G_RET_STS_ERROR;
256          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
257        			        P_data  => x_message_list);
258     WHEN ins_oprn_actv_err THEN
259           ROLLBACK TO SAVEPOINT insert_oprn_actv;
260           x_return_status := FND_API.G_RET_STS_ERROR;
261           FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
262       	                             P_data  => x_message_list);
263      WHEN OTHERS THEN
264           ROLLBACK TO SAVEPOINT insert_oprn_actv;
265           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
266           FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
267           FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
268           FND_MSG_PUB.ADD;
269           FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
270        			             P_data  => x_message_list);
271   END insert_operation_activity;
272 
273   /*===============================================
274   Procedure
275      update_operation_activity
276   Description
277     This particular procedure is used to update
278     an operation activity Parameters
279   ================================================ */
280   PROCEDURE update_operation_activity
281   ( p_api_version 	IN          NUMBER
282   , p_init_msg_list 	IN          BOOLEAN
283   , p_commit		IN          BOOLEAN
284   , p_oprn_line_id	IN          gmd_operation_activities.oprn_line_id%TYPE
285   , p_update_table	IN          gmd_operation_activities_pub.update_tbl_type
286   , x_message_count 	OUT NOCOPY  NUMBER
287   , x_message_list 	OUT NOCOPY  VARCHAR2
288   , x_return_status	OUT NOCOPY  VARCHAR2)    IS
289 
290     v_oprn_id           gmd_operations.oprn_id%TYPE;
291     l_retn_status       VARCHAR2(1);
292     l_api_version       NUMBER := 1.0;
293 
294     invalid_version	EXCEPTION;
295     setup_failure	EXCEPTION;
296     upd_oprn_actv_err   EXCEPTION;
297 
298     CURSOR get_oprn_id(p_oprN_line_id gmd_operation_activities.oprn_line_id%TYPE) IS
299     SELECT oprn_id
300     FROM   gmd_operation_activities
301     WHERE  oprn_line_id = p_oprn_line_id
302       AND  delete_mark = 0;
303 
304   BEGIN
305     SAVEPOINT upd_oprn_actv;
306 
307     /* Initialize message list and count if needed */
308     IF p_init_msg_list THEN
309       fnd_msg_pub.initialize;
310     END IF;
311 
312     /* Initially let us assign the return status to success */
313     x_return_status := FND_API.g_ret_sts_success;
314 
315     IF NOT gmd_api_grp.setup_done THEN
316        gmd_api_grp.setup_done := gmd_api_grp.setup;
317     END IF;
318     IF NOT gmd_api_grp.setup_done THEN
319        RAISE setup_failure;
320     END IF;
321 
322     /* Make sure we are call compatible */
323     IF NOT FND_API.compatible_api_call(l_api_version
324                                       ,p_api_version
325                                       ,'update_operation_activity'
326                                       ,'gmd_operation_activities_pub') THEN
327       RAISE invalid_version;
328     END IF;
329 
330     IF (l_debug = 'Y') THEN
331       gmd_debug.put_line('Start of update_operation_activity PUB');
332     END IF;
333 
334     /* Oprn_line_id must be passed, otherwise give error */
335     IF p_oprn_line_id IS NULL THEN
336        IF (l_debug = 'Y') THEN
337          gmd_debug.put_line('operation line id is required');
338        END IF;
339 
340        FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
341        FND_MESSAGE.SET_TOKEN ('MISSING', 'OPRN_LINE_ID');
342        FND_MSG_PUB.ADD;
343        RAISE upd_oprn_actv_err;
344     END IF;
345 
346          /* Loop thru cols to be updated - verify col and value are present */
347     FOR i in 1 .. p_update_table.count LOOP
348         /* Col_to_update and value must be passed, otherwise give error */
349       IF p_update_table(i).p_col_to_update IS NULL THEN
350          IF (l_debug = 'Y') THEN
351            gmd_debug.put_line('col_to_update required');
352          END IF;
353 
354          FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
355          FND_MESSAGE.SET_TOKEN ('MISSING', 'COL_TO_UPDATE');
356          FND_MSG_PUB.ADD;
357          RAISE upd_oprn_actv_err;
358       ELSIF p_update_table(i).p_value IS NULL THEN
359          IF (l_debug = 'Y') THEN
360            gmd_debug.put_line('value required');
361          END IF;
362 
363          FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
364          FND_MESSAGE.SET_TOKEN ('MISSING', 'P_VALUE');
365          FND_MSG_PUB.ADD;
366          RAISE upd_oprn_actv_err;
367       END IF;
368      END LOOP;
369 
370      /* Validation : Verify Operation status is not On Hold nor Obsolete/Archived
371        and Operation is not logically deleted */
372      OPEN get_oprn_id(p_oprn_line_id);
373      FETCH get_oprn_id INTO v_oprn_id;
374      IF get_oprn_id%NOTFOUND THEN
375        gmd_api_grp.log_message('GMD_INVALID_OPRNLINE_ID');
376        x_return_status := FND_API.g_ret_sts_error;
377      END IF;
378      CLOSE get_oprn_id;
379 
380      /* Operation Security Validation */
381      /* Validation: Check if this users performing update has access to this
382           operation owner orgn code */
383      IF NOT GMD_API_GRP.Check_orgn_access(Entity     => 'OPERATION'
384                                      ,Entity_id  => v_oprn_id) THEN
385        RAISE upd_oprn_actv_err;
386      END IF;
387 
388      IF NOT GMD_COMMON_VAL.UPDATE_ALLOWED(Entity => 'OPERATION',
389                                         Entity_id => v_oprn_id ) THEN
390          FND_MESSAGE.SET_NAME('GMD', 'GMD_OPRN_NOT_VALID');
391          FND_MSG_PUB.ADD;
392          RAISE upd_oprn_actv_err;
393      END IF;
394 
395          /* delete_mark validation */
396      FOR a IN 1 .. p_update_table.count  LOOP
397         /* check activity factor has a value else default */
398        IF (UPPER(p_update_table(a).p_col_to_update) = 'ACTIVITY_FACTOR' AND
399            p_update_table(a).p_value < 0) THEN
400           gmd_api_grp.log_message ('GMD_NEGATIVE_FIELDS',
401                                         'FIELD', p_update_table(a).p_col_to_update);
402           RAISE upd_oprn_actv_err;
403        /* check offset interval has a value else default */
404        ELSIF (UPPER(p_update_table(a).p_col_to_update) = 'OFFSET_INTERVAL' AND
405           p_update_table(a).p_value < 0) THEN
406           gmd_api_grp.log_message ('GMD_NEGATIVE_FIELDS',
407                                         'FIELD', p_update_table(a).p_col_to_update);
408           RAISE upd_oprn_actv_err;
409        ELSIF (UPPER(p_update_table(a).p_col_to_update) = 'SEQUENCE_DEPENDENT_IND' AND
410           p_update_table(a).p_value NOT IN (1,0)) THEN
411           FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_SEQ_DEP_IND');
412           FND_MSG_PUB.ADD;
413           RAISE upd_oprn_actv_err;
414        END IF;
415      END LOOP;
416 
417      IF x_return_status = 'S' THEN
418         GMD_OPERATION_ACTIVITIES_PVT.update_operation_activity(p_oprn_line_id => p_oprn_line_id
419         					, p_update_table	=> p_update_table
420         					, x_message_count => x_message_count
421         					, x_message_list 	=> x_message_list
422         					, x_return_status 	=> l_retn_status);
423         IF l_retn_status <> FND_API.g_ret_sts_success THEN
424           RAISE upd_oprn_actv_err;
425         END IF;
426 
427         IF p_commit THEN
428            COMMIT;
429         END IF;
430 
431      END IF;
432 
433      FND_MSG_PUB.count_and_get(p_count   => x_message_count
434                               ,p_data    => x_message_list);
435 
436   EXCEPTION
437     WHEN setup_failure OR invalid_version THEN
438          ROLLBACK TO SAVEPOINT upd_oprn_actv;
439          x_return_status := FND_API.G_RET_STS_ERROR;
440          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
441       			      P_data  => x_message_list);
442     WHEN upd_oprn_actv_err THEN
443          ROLLBACK TO SAVEPOINT upd_oprn_actv;
444          x_return_status := FND_API.G_RET_STS_ERROR;
445          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
446       			      P_data  => x_message_list);
447 
448     WHEN OTHERS THEN
449         ROLLBACK TO SAVEPOINT upd_oprn_actv;
450         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
451         FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
452         FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
453         FND_MSG_PUB.ADD;
454         FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
455         			     P_data  => x_message_list);
456 
457 
458   END update_operation_activity;
459 
460   /*================================================
461   Procedure
462      delete_operation_activity
463   Description
464     This particular procedure is used to delete an
465     operation activity Parameters
466   ================================================ */
467   PROCEDURE delete_operation_activity
468   ( p_api_version 		IN 	NUMBER
469   , p_init_msg_list	 	IN 	BOOLEAN
470   , p_commit		IN 	BOOLEAN
471   , p_oprn_line_id		IN	gmd_operation_activities.oprn_line_id%TYPE
472   , x_message_count 		OUT NOCOPY  	NUMBER
473   , x_message_list 		OUT NOCOPY  	VARCHAR2
474   , x_return_status		OUT NOCOPY  	VARCHAR2)  IS
475 
476     v_update_table   		gmd_operation_activities_pub.update_tbl_type;
477     v_count		NUMBER;
478     l_retn_status		VARCHAR2(1);
479     l_api_version		NUMBER := 1.0;
480     l_oprn_id		NUMBER(15);
481 
482     invalid_version		EXCEPTION;
483     setup_failure		EXCEPTION;
484     del_oprn_actv_err		EXCEPTION;
485 
486     CURSOR chk_oprn_line_id(v_oprN_line_id NUMBER) IS
487       SELECT oprn_id
488       FROM gmd_operation_activities
489       WHERE oprn_line_id = v_oprn_line_id;
490 
491     CURSOR get_activity_count (v_oprn_id NUMBER) IS
492       SELECT COUNT(1)
493       FROM gmd_operation_activities a
494       WHERE a.oprn_id = v_oprn_id;
495 
496   BEGIN
497     SAVEPOINT delete_oprn_actv;
498 
499     /* Initialize message list and count if needed */
500     IF p_init_msg_list THEN
501       fnd_msg_pub.initialize;
502     END IF;
503 
504     /* Initially let us assign the return status to success */
505     x_return_status := FND_API.g_ret_sts_success;
506 
507     IF NOT gmd_api_grp.setup_done THEN
508        gmd_api_grp.setup_done := gmd_api_grp.setup;
509     END IF;
510     IF NOT gmd_api_grp.setup_done THEN
511        RAISE setup_failure;
512     END IF;
513 
514 
515     /* Make sure we are call compatible */
516     IF NOT FND_API.compatible_api_call(l_api_version
517                                        ,p_api_version
518                                        ,'delete_operation_activity'
519                                        ,'gmd_operation_activities_pvt') THEN
520        RAISE invalid_version;
521     END IF;
522 
523     IF (l_debug = 'Y') THEN
524       gmd_debug.put_line('START of delete_operation_activity PUB');
525     END IF;
526 
527 
528     /* Operation Line ID must be passed, otherwise give error */
529     IF p_oprn_line_id IS NULL  THEN
530        IF (l_debug = 'Y') THEN
531          gmd_debug.put_line('Operation Line id is required');
532        END IF;
533 
534        FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
535        FND_MESSAGE.SET_TOKEN ('MISSING', 'OPRN_LINE_ID');
536        FND_MSG_PUB.ADD;
537        RAISE del_oprn_actv_err;
538     ELSE
539        OPEN chk_oprn_line_id(p_oprn_line_id);
540        FETCH chk_oprn_line_Id INTO l_oprn_id;
541        IF chk_oprn_line_ID%NOTFOUND THEN
542           FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_OPRNLINE_ID');
543           FND_MSG_PUB.ADD;
544           RAISE del_oprn_actv_err;
545        ELSE
546          OPEN get_activity_count (l_oprn_id);
547          FETCH get_activity_count INTO v_count;
548          CLOSE get_activity_count;
549          IF v_count = 1 THEN
550            gmd_api_grp.log_message ('GMD_DETAILS_REQUIRED');
551            RAISE del_oprn_actv_err;
552          END IF;
553        END IF;
554        CLOSE chk_oprN_line_id;
555     END IF;
556 
557     /* Operation Security Validation */
558     /* Validation: Check if this users performing update has access to this
559        operation owner orgn code */
560     IF NOT GMD_API_GRP.Check_orgn_access(Entity     => 'OPERATION'
561                                         ,Entity_id  => l_oprn_id) THEN
562       RAISE del_oprn_actv_err;
563     END IF;
564 
565     IF x_return_status = 'S' THEN
566        gmd_operation_activities_pvt.delete_operation_activity
567                                    (p_oprn_line_id  => p_oprn_line_id
568                                   , x_message_count => x_message_count
569                                   , x_message_list  => x_message_list
570                                   , x_return_status => l_retn_status);
571        IF l_retn_status <> FND_API.g_ret_sts_success THEN
572          RAISE del_oprn_actv_err;
573        END IF;
574 
575        IF p_commit THEN
576          COMMIT;
577        END IF;
578     END IF;
579 
580     FND_MSG_PUB.count_and_get(p_count   => x_message_count
581                               ,p_data    => x_message_list);
582 
583   EXCEPTION
584       WHEN setup_failure OR invalid_version THEN
585          ROLLBACK TO SAVEPOINT delete_oprn_actv;
586          x_return_status := FND_API.G_RET_STS_ERROR;
587          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
588         			      P_data  => x_message_list);
589       WHEN del_oprn_actv_err THEN
590            ROLLBACK TO SAVEPOINT delete_oprn_actv;
591            x_return_status := FND_API.G_RET_STS_ERROR;
592            FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
593         			      P_data  => x_message_list);
594       WHEN OTHERS THEN
595         ROLLBACK TO SAVEPOINT delete_oprn_actv;
596          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
597          FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
598          FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
599          FND_MSG_PUB.ADD;
600          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
601          			                         P_data  => x_message_list);
602   END delete_operation_activity;
603 
604 END GMD_OPERATION_ACTIVITIES_PUB;