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.12010000.2 2009/03/16 06:34:37 kannavar ship $
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       /* Added the below call in Bug No.8316321 */
232       GMD_API_GRP.set_activity_sequence_num (P_oprn_id => v_oprn_id,
233                                            P_user_id => fnd_global.user_id,
234                                            P_login_id => fnd_global.login_id);
235 
236 
237       IF p_oprn_rsrc_tbl.count > 0  THEN
238          /* call insert operation resources */
239          GMD_OPERATION_RESOURCES_PUB.insert_operation_resources(
240                                    p_init_msg_list => FALSE,
241 		                   p_oprn_line_id  => p_oprn_activity.oprn_line_id,
242 		                   p_oprn_rsrc_tbl => p_oprn_rsrc_tbl,
243             	                   x_message_count => x_message_count,
244         	                   x_message_list  => x_message_list,
245       		                   x_return_status => l_retn_status);
246          IF l_retn_status <> FND_API.g_ret_sts_success THEN
247            RAISE ins_oprn_actv_err;
248          END IF;
249       END IF;
250 
251       IF p_commit THEN
252          COMMIT;
253       END IF;
254     END IF;
255 
256     FND_MSG_PUB.count_and_get(p_count   => x_message_count
257                               ,p_data    => x_message_list);
258   EXCEPTION
259     WHEN setup_failure OR invalid_version THEN
260          ROLLBACK TO SAVEPOINT insert_oprn_actv;
261          x_return_status := FND_API.G_RET_STS_ERROR;
262          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
263        			        P_data  => x_message_list);
264     WHEN ins_oprn_actv_err THEN
265           ROLLBACK TO SAVEPOINT insert_oprn_actv;
266           x_return_status := FND_API.G_RET_STS_ERROR;
267           FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
268       	                             P_data  => x_message_list);
269      WHEN OTHERS THEN
270           ROLLBACK TO SAVEPOINT insert_oprn_actv;
271           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
272           FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
273           FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
274           FND_MSG_PUB.ADD;
275           FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
276        			             P_data  => x_message_list);
277   END insert_operation_activity;
278 
279   /*===============================================
280   Procedure
281      update_operation_activity
282   Description
283     This particular procedure is used to update
284     an operation activity Parameters
285   ================================================ */
286   PROCEDURE update_operation_activity
287   ( p_api_version 	IN          NUMBER
288   , p_init_msg_list 	IN          BOOLEAN
289   , p_commit		IN          BOOLEAN
290   , p_oprn_line_id	IN          gmd_operation_activities.oprn_line_id%TYPE
291   , p_update_table	IN          gmd_operation_activities_pub.update_tbl_type
292   , x_message_count 	OUT NOCOPY  NUMBER
293   , x_message_list 	OUT NOCOPY  VARCHAR2
294   , x_return_status	OUT NOCOPY  VARCHAR2)    IS
295 
296     v_oprn_id           gmd_operations.oprn_id%TYPE;
297     l_retn_status       VARCHAR2(1);
298     l_api_version       NUMBER := 1.0;
299 
300     invalid_version	EXCEPTION;
301     setup_failure	EXCEPTION;
302     upd_oprn_actv_err   EXCEPTION;
303 
304     CURSOR get_oprn_id(p_oprN_line_id gmd_operation_activities.oprn_line_id%TYPE) IS
305     SELECT oprn_id
306     FROM   gmd_operation_activities
307     WHERE  oprn_line_id = p_oprn_line_id
308       AND  delete_mark = 0;
309 
310   BEGIN
311     SAVEPOINT upd_oprn_actv;
312 
313     /* Initialize message list and count if needed */
314     IF p_init_msg_list THEN
315       fnd_msg_pub.initialize;
316     END IF;
317 
318     /* Initially let us assign the return status to success */
319     x_return_status := FND_API.g_ret_sts_success;
320 
321     IF NOT gmd_api_grp.setup_done THEN
322        gmd_api_grp.setup_done := gmd_api_grp.setup;
323     END IF;
324     IF NOT gmd_api_grp.setup_done THEN
325        RAISE setup_failure;
326     END IF;
327 
328     /* Make sure we are call compatible */
329     IF NOT FND_API.compatible_api_call(l_api_version
330                                       ,p_api_version
331                                       ,'update_operation_activity'
332                                       ,'gmd_operation_activities_pub') THEN
333       RAISE invalid_version;
334     END IF;
335 
336     IF (l_debug = 'Y') THEN
337       gmd_debug.put_line('Start of update_operation_activity PUB');
338     END IF;
339 
340     /* Oprn_line_id must be passed, otherwise give error */
341     IF p_oprn_line_id IS NULL THEN
342        IF (l_debug = 'Y') THEN
343          gmd_debug.put_line('operation line id is required');
344        END IF;
345 
346        FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
347        FND_MESSAGE.SET_TOKEN ('MISSING', 'OPRN_LINE_ID');
348        FND_MSG_PUB.ADD;
349        RAISE upd_oprn_actv_err;
350     END IF;
351 
352          /* Loop thru cols to be updated - verify col and value are present */
353     FOR i in 1 .. p_update_table.count LOOP
354         /* Col_to_update and value must be passed, otherwise give error */
355       IF p_update_table(i).p_col_to_update IS NULL THEN
356          IF (l_debug = 'Y') THEN
357            gmd_debug.put_line('col_to_update required');
358          END IF;
359 
360          FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
361          FND_MESSAGE.SET_TOKEN ('MISSING', 'COL_TO_UPDATE');
362          FND_MSG_PUB.ADD;
363          RAISE upd_oprn_actv_err;
364       ELSIF p_update_table(i).p_value IS NULL THEN
365          IF (l_debug = 'Y') THEN
366            gmd_debug.put_line('value required');
367          END IF;
368 
369          FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
370          FND_MESSAGE.SET_TOKEN ('MISSING', 'P_VALUE');
371          FND_MSG_PUB.ADD;
372          RAISE upd_oprn_actv_err;
373       END IF;
374      END LOOP;
375 
376      /* Validation : Verify Operation status is not On Hold nor Obsolete/Archived
377        and Operation is not logically deleted */
378      OPEN get_oprn_id(p_oprn_line_id);
379      FETCH get_oprn_id INTO v_oprn_id;
380      IF get_oprn_id%NOTFOUND THEN
381        gmd_api_grp.log_message('GMD_INVALID_OPRNLINE_ID');
382        x_return_status := FND_API.g_ret_sts_error;
383      END IF;
384      CLOSE get_oprn_id;
385 
386      /* Operation Security Validation */
387      /* Validation: Check if this users performing update has access to this
388           operation owner orgn code */
389      IF NOT GMD_API_GRP.Check_orgn_access(Entity     => 'OPERATION'
390                                      ,Entity_id  => v_oprn_id) THEN
391        RAISE upd_oprn_actv_err;
392      END IF;
393 
394      IF NOT GMD_COMMON_VAL.UPDATE_ALLOWED(Entity => 'OPERATION',
395                                         Entity_id => v_oprn_id ) THEN
396          FND_MESSAGE.SET_NAME('GMD', 'GMD_OPRN_NOT_VALID');
397          FND_MSG_PUB.ADD;
398          RAISE upd_oprn_actv_err;
399      END IF;
400 
401          /* delete_mark validation */
402      FOR a IN 1 .. p_update_table.count  LOOP
403         /* check activity factor has a value else default */
404        IF (UPPER(p_update_table(a).p_col_to_update) = 'ACTIVITY_FACTOR' 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        /* check offset interval has a value else default */
410        ELSIF (UPPER(p_update_table(a).p_col_to_update) = 'OFFSET_INTERVAL' AND
411           p_update_table(a).p_value < 0) THEN
412           gmd_api_grp.log_message ('GMD_NEGATIVE_FIELDS',
413                                         'FIELD', p_update_table(a).p_col_to_update);
414           RAISE upd_oprn_actv_err;
415        ELSIF (UPPER(p_update_table(a).p_col_to_update) = 'SEQUENCE_DEPENDENT_IND' AND
416           p_update_table(a).p_value NOT IN (1,0)) THEN
417           FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_SEQ_DEP_IND');
418           FND_MSG_PUB.ADD;
419           RAISE upd_oprn_actv_err;
420        END IF;
421      END LOOP;
422 
423      IF x_return_status = 'S' THEN
424         GMD_OPERATION_ACTIVITIES_PVT.update_operation_activity(p_oprn_line_id => p_oprn_line_id
425         					, p_update_table	=> p_update_table
426         					, x_message_count => x_message_count
427         					, x_message_list 	=> x_message_list
428         					, x_return_status 	=> l_retn_status);
429         IF l_retn_status <> FND_API.g_ret_sts_success THEN
430           RAISE upd_oprn_actv_err;
431         END IF;
432 
433         /* Added the below call in Bug No.8316321 */
434         GMD_API_GRP.set_activity_sequence_num (P_oprn_id => v_oprn_id,
435                                            P_user_id => fnd_global.user_id,
436                                            P_login_id => fnd_global.login_id);
437 
438         IF p_commit THEN
439            COMMIT;
440         END IF;
441 
442      END IF;
443 
444      FND_MSG_PUB.count_and_get(p_count   => x_message_count
445                               ,p_data    => x_message_list);
446 
447   EXCEPTION
448     WHEN setup_failure OR invalid_version THEN
449          ROLLBACK TO SAVEPOINT upd_oprn_actv;
450          x_return_status := FND_API.G_RET_STS_ERROR;
451          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
452       			      P_data  => x_message_list);
453     WHEN upd_oprn_actv_err THEN
454          ROLLBACK TO SAVEPOINT upd_oprn_actv;
455          x_return_status := FND_API.G_RET_STS_ERROR;
456          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
457       			      P_data  => x_message_list);
458 
459     WHEN OTHERS THEN
460         ROLLBACK TO SAVEPOINT upd_oprn_actv;
461         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
462         FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
463         FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
464         FND_MSG_PUB.ADD;
465         FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
466         			     P_data  => x_message_list);
467 
468 
469   END update_operation_activity;
470 
471   /*================================================
472   Procedure
473      delete_operation_activity
474   Description
475     This particular procedure is used to delete an
476     operation activity Parameters
477   ================================================ */
478   PROCEDURE delete_operation_activity
479   ( p_api_version 		IN 	NUMBER
480   , p_init_msg_list	 	IN 	BOOLEAN
481   , p_commit		IN 	BOOLEAN
482   , p_oprn_line_id		IN	gmd_operation_activities.oprn_line_id%TYPE
483   , x_message_count 		OUT NOCOPY  	NUMBER
484   , x_message_list 		OUT NOCOPY  	VARCHAR2
485   , x_return_status		OUT NOCOPY  	VARCHAR2)  IS
486 
487     v_update_table   		gmd_operation_activities_pub.update_tbl_type;
488     v_count		NUMBER;
489     l_retn_status		VARCHAR2(1);
490     l_api_version		NUMBER := 1.0;
491     l_oprn_id		NUMBER(15);
492 
493     invalid_version		EXCEPTION;
494     setup_failure		EXCEPTION;
495     del_oprn_actv_err		EXCEPTION;
496 
497     CURSOR chk_oprn_line_id(v_oprN_line_id NUMBER) IS
498       SELECT oprn_id
499       FROM gmd_operation_activities
500       WHERE oprn_line_id = v_oprn_line_id;
501 
502     CURSOR get_activity_count (v_oprn_id NUMBER) IS
503       SELECT COUNT(1)
504       FROM gmd_operation_activities a
505       WHERE a.oprn_id = v_oprn_id;
506 
507   BEGIN
508     SAVEPOINT delete_oprn_actv;
509 
510     /* Initialize message list and count if needed */
511     IF p_init_msg_list THEN
512       fnd_msg_pub.initialize;
513     END IF;
514 
515     /* Initially let us assign the return status to success */
516     x_return_status := FND_API.g_ret_sts_success;
517 
518     IF NOT gmd_api_grp.setup_done THEN
519        gmd_api_grp.setup_done := gmd_api_grp.setup;
520     END IF;
521     IF NOT gmd_api_grp.setup_done THEN
522        RAISE setup_failure;
523     END IF;
524 
525 
526     /* Make sure we are call compatible */
527     IF NOT FND_API.compatible_api_call(l_api_version
528                                        ,p_api_version
529                                        ,'delete_operation_activity'
530                                        ,'gmd_operation_activities_pvt') THEN
531        RAISE invalid_version;
532     END IF;
533 
534     IF (l_debug = 'Y') THEN
535       gmd_debug.put_line('START of delete_operation_activity PUB');
536     END IF;
537 
538 
539     /* Operation Line ID must be passed, otherwise give error */
540     IF p_oprn_line_id IS NULL  THEN
541        IF (l_debug = 'Y') THEN
542          gmd_debug.put_line('Operation Line id is required');
543        END IF;
544 
545        FND_MESSAGE.SET_NAME ('GMI', 'GMI_MISSING');
546        FND_MESSAGE.SET_TOKEN ('MISSING', 'OPRN_LINE_ID');
547        FND_MSG_PUB.ADD;
548        RAISE del_oprn_actv_err;
549     ELSE
550        OPEN chk_oprn_line_id(p_oprn_line_id);
551        FETCH chk_oprn_line_Id INTO l_oprn_id;
552        IF chk_oprn_line_ID%NOTFOUND THEN
553           FND_MESSAGE.SET_NAME('GMD','GMD_INVALID_OPRNLINE_ID');
554           FND_MSG_PUB.ADD;
555           RAISE del_oprn_actv_err;
556        ELSE
557          OPEN get_activity_count (l_oprn_id);
558          FETCH get_activity_count INTO v_count;
559          CLOSE get_activity_count;
560          IF v_count = 1 THEN
561            gmd_api_grp.log_message ('GMD_DETAILS_REQUIRED');
562            RAISE del_oprn_actv_err;
563          END IF;
564        END IF;
565        CLOSE chk_oprN_line_id;
566     END IF;
567 
568     /* Operation Security Validation */
569     /* Validation: Check if this users performing update has access to this
570        operation owner orgn code */
571     IF NOT GMD_API_GRP.Check_orgn_access(Entity     => 'OPERATION'
572                                         ,Entity_id  => l_oprn_id) THEN
573       RAISE del_oprn_actv_err;
574     END IF;
575 
576     IF x_return_status = 'S' THEN
577        gmd_operation_activities_pvt.delete_operation_activity
578                                    (p_oprn_line_id  => p_oprn_line_id
579                                   , x_message_count => x_message_count
580                                   , x_message_list  => x_message_list
581                                   , x_return_status => l_retn_status);
582        IF l_retn_status <> FND_API.g_ret_sts_success THEN
583          RAISE del_oprn_actv_err;
584        END IF;
585 
586        IF p_commit THEN
587          COMMIT;
588        END IF;
589     END IF;
590 
591     FND_MSG_PUB.count_and_get(p_count   => x_message_count
592                               ,p_data    => x_message_list);
593 
594   EXCEPTION
595       WHEN setup_failure OR invalid_version THEN
596          ROLLBACK TO SAVEPOINT delete_oprn_actv;
597          x_return_status := FND_API.G_RET_STS_ERROR;
598          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
599         			      P_data  => x_message_list);
600       WHEN del_oprn_actv_err THEN
601            ROLLBACK TO SAVEPOINT delete_oprn_actv;
602            x_return_status := FND_API.G_RET_STS_ERROR;
603            FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
604         			      P_data  => x_message_list);
605       WHEN OTHERS THEN
606         ROLLBACK TO SAVEPOINT delete_oprn_actv;
607          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
608          FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
609          FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
610          FND_MSG_PUB.ADD;
611          FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
612          			                         P_data  => x_message_list);
613   END delete_operation_activity;
614 
615 END GMD_OPERATION_ACTIVITIES_PUB;