DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_DI_DOC_REVISION_PVT

Source


1 PACKAGE BODY AHL_DI_DOC_REVISION_PVT AS
2 /* $Header: AHLVDORB.pls 120.7.12020000.2 2012/12/14 08:00:06 shnatu ship $ */
3 --
4 G_PKG_NAME  VARCHAR2(30)  := 'AHL_DI_DOC_REVISION_PVT';
5 --
6 /*---------------------------------------------------------*/
7 /* procedure name: validate_revision(private procedure)    */
8 /* description :  Validation checks for before inserting   */
9 /*                new record as well before modification   */
10 /*                takes place                              */
11 /*---------------------------------------------------------*/
12 
13 G_DEBUG 		 VARCHAR2(1):=AHL_DEBUG_PUB.is_log_enabled;
14 PROCEDURE VALIDATE_REVISION
15 (
16  P_DOC_REVISION_ID        IN    NUMBER    ,
17  P_DOCUMENT_ID            IN    NUMBER    ,
18  P_REVISION_NO            IN    VARCHAR2  ,
19  P_REVISION_TYPE_CODE     IN    VARCHAR2  ,
20  P_REVISION_STATUS_CODE   IN    VARCHAR2  ,
21  P_REVISION_DATE          IN    DATE      ,
22  P_APPROVED_BY_PARTY_ID   IN    NUMBER    ,
23  P_APPROVED_DATE          IN    DATE      ,
24  P_EFFECTIVE_DATE         IN    DATE      ,
25  P_OBSOLETE_DATE          IN    DATE      ,
26  P_ISSUE_DATE             IN    DATE      ,
27  P_RECEIVED_DATE          IN    DATE      ,
28  P_MEDIA_TYPE_CODE        IN    VARCHAR2  ,
29  --pekambar Enigma Phase II changes -- start
30  P_ENIGMA_DOC_ID        IN    VARCHAR2  ,
31  P_X_ENIGMA_MODEL_CODE        IN OUT NOCOPY VARCHAR2  ,
32  P_X_ENIGMA_MODEL_MEANING        IN OUT NOCOPY  VARCHAR2  ,
33  --pekambar Enigma Phase II changes -- end
34  P_ISSUE_NUMBER           IN    NUMBER    ,
35  P_DELETE_FLAG            IN    VARCHAR2  := 'N' )
36 IS
37 
38 --Cursor to retrieve the revision type code
39 CURSOR get_revision_type_code(c_revision_type_code VARCHAR2)
40  IS
41 SELECT lookup_code
42   FROM FND_LOOKUP_VALUES_VL
43  WHERE lookup_code = c_revision_type_code
44    AND lookup_type = 'AHL_REVISION_TYPE'
45    AND sysdate between start_date_active
46    AND nvl(end_date_active,sysdate);
47 
48 --Cursor to retrieve revision status code
49 CURSOR get_revision_status_code(c_revision_status_code VARCHAR2)
50  IS
51 SELECT lookup_code
52   FROM FND_LOOKUP_VALUES_VL
53  WHERE lookup_code = c_revision_status_code
54    AND lookup_type = 'AHL_REVISION_STATUS_TYPE'
55    AND sysdate between start_date_active
56    AND nvl(end_date_active,sysdate);
57 
58 --Cursor to retrieve media type code
59 CURSOR get_media_type_code(c_media_type_code VARCHAR2)
60  IS
61 SELECT lookup_code
62   FROM FND_LOOKUP_VALUES_VL
63  WHERE lookup_code = c_media_type_code
64    AND lookup_type = 'AHL_MEDIA_TYPE'
65    AND sysdate between start_date_active
66    AND nvl(end_date_active,sysdate);
67 
68  -- Used to validate the document id
69 CURSOR check_doc_info(c_document_id  NUMBER)
70  IS
71 SELECT 'X'
72   FROM AHL_DOCUMENTS_B
73  WHERE document_id  = c_document_id;
74 
75 -- Retrieves doc revision record
76 CURSOR get_doc_revision_rec_info (c_doc_revision_id NUMBER)
77  IS
78 SELECT document_id,
79        revision_no,
80        revision_type_code,
81        revision_status_code,
82        revision_date,
83        approved_by_party_id,
84        approved_date,
85        effective_date,
86        obsolete_date,
87        issue_date,
88        received_date,
89        media_type_code,
90        --pekambar Enigma Phase II changes -- start
91        enigma_doc_id,
92        enigma_model_code,
93        --pekambar Enigma Phase II changes -- end
94        issue_number
95   FROM AHL_DOC_REVISIONS_B
96  WHERE doc_revision_id = c_doc_revision_id;
97 
98 -- Check for Duplicate Record
99 CURSOR dup_rec(c_document_id  NUMBER,
100                c_revision_no VARCHAR2)
101  IS
102 SELECT 'X'
103   FROM AHL_DOC_REVISIONS_B
104 WHERE document_id = c_document_id
105   AND revision_no = c_revision_no;
106 
107 --Modified pjha 25-Jun-2002 for restricting Media Type to Electronic File
108 --if there is a file uploaded for the document : Begin
109 --Cursor to check if record exist in IBC_CITEM_LIVE_V
110 CURSOR get_record_from_AHL(c_doc_revision_id VARCHAR2)
111 IS
112 SELECT '1'
113 FROM AHL_DOC_FILE_ASSOC_V
114 WHERE revision_id = c_doc_revision_id;
115 --Modified pjha 25-Jun-2002 for restricting Media Type to Electronic File
116 --if there is a file uploaded for the document : End
117  --
118  l_api_name        CONSTANT VARCHAR2(30) := 'VALIDATE_REVISION';
119  l_api_version     CONSTANT NUMBER       := 1.0;
120  l_dummy                    VARCHAR2(2000);
121  l_doc_revision_id          NUMBER;
122  l_revision_no              VARCHAR2(30);
123  l_document_id              NUMBER;
124  l_revision_type_code       VARCHAR2(30);
125  l_revision_status_code     VARCHAR2(30);
126  l_revision_date            DATE;
127  l_approved_by_party_id     NUMBER;
128  l_approved_date            DATE;
129  l_effective_date           DATE;
130  l_obsolete_date            DATE;
131  l_issue_date               DATE;
132  l_received_date            DATE;
133  l_media_type_code          VARCHAR2(30);
134  l_media_type_meaning       VARCHAR2(80);
135  --pekambar Enigma Phase II changes -- start
136  l_enigma_doc_id            VARCHAR2(80);
137  l_enigma_model_code    VARCHAR2(30);
138  l_enigma_model_meaning            VARCHAR2(80);
139  l_return_status   VARCHAR2(1);
140  l_msg_data       VARCHAR2(2000);
141  --pekambar Enigma Phase II changes -- end
142  l_issue_number             NUMBER;
143 
144  BEGIN
145    --When the delete flag is 'YES' means either insert or update
146    IF NVL(p_delete_flag,'N')  <> 'Y'
147    THEN
148     IF p_doc_revision_id IS NOT NULL
149     THEN
150        OPEN get_doc_revision_rec_info(p_doc_revision_id);
151        FETCH get_doc_revision_rec_info INTO l_document_id,
152                                             l_revision_no,
153                                             l_revision_type_code,
154                                             l_revision_status_code,
155                                             l_revision_date,
156                                             l_approved_by_party_id,
157                                             l_approved_date,
158                                             l_effective_date,
159                                             l_obsolete_date,
160                                             l_issue_date,
161                                             l_received_date,
162                                             l_media_type_code,
163 					    --pekambar Enigma Phase II changes -- start
164 					    l_enigma_doc_id,
165 					    l_enigma_model_code,
166 					    --pekambar Enigma Phase II changes -- end
167                                             l_issue_number;
168        CLOSE get_doc_revision_rec_info;
169     END IF;
170     --
171     IF p_document_id IS NOT NULL
172     THEN
173         l_document_id := p_document_id;
174     END IF;
175     --
176     IF p_revision_no IS NOT NULL
177     THEN
178         l_revision_no := p_revision_no;
179     END IF;
180     --
181     IF p_revision_type_code IS NOT NULL
182     THEN
183         l_revision_type_code := p_revision_type_code;
184     END IF;
185     --
186     IF p_revision_status_code IS NOT NULL
187     THEN
188         l_revision_status_code := p_revision_status_code;
189     END IF;
190     --
191     IF p_revision_date IS NOT NULL
192     THEN
193         l_revision_date := p_revision_date;
194     END IF;
195     --
196     IF p_approved_by_party_id IS NOT NULL
197     THEN
198         l_approved_by_party_id := p_approved_by_party_id;
199     END IF;
200     --
201     IF p_approved_date IS NOT NULL
202     THEN
203         l_approved_date := p_approved_date;
204     END IF;
205     --
206     IF p_effective_date IS NOT NULL
207     THEN
208         l_effective_date := p_effective_date;
209     END IF;
210     --
211     IF p_obsolete_date IS NOT NULL
212     THEN
213         l_obsolete_date := p_obsolete_date;
214     END IF;
215     --
216     IF p_media_type_code IS NOT NULL
217     THEN
218         l_media_type_code := p_media_type_code;
219     END IF;
220     --
221     --pekambar Enigma Phase II changes -- start
222     IF p_enigma_doc_id IS NOT NULL
223     THEN
224         l_enigma_doc_id := p_enigma_doc_id;
225     END IF;
226     --
227     IF p_x_enigma_model_code IS NOT NULL
228     THEN
229         l_enigma_model_code := p_x_enigma_model_code;
230     END IF;
231     --
232     IF p_x_enigma_model_meaning IS NOT NULL
233     THEN
234         l_enigma_model_meaning := p_x_enigma_model_meaning;
235     END IF;
236 
237     --pekambar Enigma Phase II changes -- end
238     --
239     IF p_issue_number IS NOT NULL
240     THEN
241         l_issue_number := p_issue_number;
242     END IF;
243        l_doc_revision_id := p_doc_revision_id;
244     -- This condition checks Document Id, when the action is insert or update
245      IF ((p_doc_revision_id IS NULL AND
246          p_document_id IS NULL)
247         OR
248 
249         (p_doc_revision_id IS NOT NULL
250         AND l_document_id IS NULL))
251 
252      THEN
253         FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOCUMENT_ID_NULL');
254         FND_MSG_PUB.ADD;
255      END IF;
256      --This condition checks fro Revision Number, when the action is insert or update
257      IF ((p_doc_revision_id IS NULL AND
258         p_revision_no IS NULL)
259         OR
260 
261         (p_doc_revision_id IS NOT NULL
262         AND l_revision_no IS NULL))
263      THEN
264         FND_MESSAGE.SET_NAME('AHL','AHL_DI_REVISION_NO_NULL');
265         FND_MSG_PUB.ADD;
266      END IF;
267      --This condition checks for Revision Type Code
268      IF ((p_doc_revision_id IS NULL AND
269         p_revision_type_code IS NULL)
270         OR
271 
272         (p_doc_revision_id IS NOT NULL
273         AND l_revision_type_code IS NULL))
274      THEN
275         FND_MESSAGE.SET_NAME('AHL','AHL_DI_REV_TYPE_CODE_NULL');
276         FND_MSG_PUB.ADD;
277      END IF;
278      --This condition checks for Revision Status Code
279      IF ((p_doc_revision_id IS NULL AND
280         p_revision_status_code IS NULL)
281         OR
282 
283         (p_doc_revision_id IS NOT NULL
284         AND l_revision_status_code IS NULL))
285 
286      THEN
287         FND_MESSAGE.SET_NAME('AHL','AHL_DI_REV_STATUS_CODE_NULL');
288         FND_MSG_PUB.ADD;
289      END IF;
290      -- Checks for existence of Revision type code in fnd lookups
291     IF p_revision_type_code IS NOT NULL
292     THEN
293        OPEN get_revision_type_code(p_revision_type_code);
294        FETCH get_revision_type_code INTO l_dummy;
295        IF get_revision_type_code%NOTFOUND
296        THEN
297           FND_MESSAGE.SET_NAME('AHL','AHL_DI_REV_TYPE_CODE_NOT_EXIST');
298           FND_MSG_PUB.ADD;
299         END IF;
300         CLOSE get_revision_type_code;
301      END IF;
302      --Checks for existence of Revision Status Code in fnd lookups
303     IF p_revision_status_code IS NOT NULL
304     THEN
305        OPEN get_revision_status_code(p_revision_status_code);
306        FETCH get_revision_status_code INTO l_dummy;
307        IF get_revision_status_code%NOTFOUND
308        THEN
309           FND_MESSAGE.SET_NAME('AHL','AHL_DI_REV_STAT_CODE_NOT_EXIST');
310           FND_MSG_PUB.ADD;
311         END IF;
312         CLOSE get_revision_status_code;
313      END IF;
314     -- Checks for existence of Media Type Code in fnd lookups
315     IF p_media_type_code IS NOT NULL
316     THEN
317        OPEN get_media_type_code(p_media_type_code);
318        FETCH get_media_type_code INTO l_dummy;
319        IF get_media_type_code%NOTFOUND
320        THEN
321           FND_MESSAGE.SET_NAME('AHL','AHL_DI_MEDTYP_CODE_NOT_EXISTS');
322           FND_MSG_PUB.ADD;
323         END IF;
324         CLOSE get_media_type_code;
325      END IF;
326 
327      --Modified pjha 25-Jun-2002 for restricting Media Type to Electronic File
328      --if there is a file uploaded for the document : Begin
329      IF (p_media_type_code IS NULL OR p_media_type_code <> 'E-FILE')
330      THEN
331         OPEN get_record_from_AHL(l_doc_revision_id);
332         FETCH get_record_from_AHL into l_dummy;
333         IF get_record_from_AHL%FOUND THEN
334           --{{adharia to add a token to the message
335           SELECT MEANING into l_media_type_meaning
336           FROM FND_LOOKUP_VALUES_VL
337           WHERE LOOKUP_TYPE='AHL_MEDIA_TYPE' AND LOOKUP_CODE='E-FILE';
338 
339           FND_MESSAGE.SET_NAME('AHL','AHL_DI_MEDTYP_NOT_EFILE');
340           FND_MESSAGE.SET_TOKEN('EFILE',l_media_type_meaning);
341           FND_MSG_PUB.ADD;
342         END IF;
343         CLOSE get_record_from_AHL;
344      END IF;
345      --Modified pjha 25-Jun-2002 for restricting Media Type to Electronic File
346      --if there is a file uploaded for the document : End
347 
348    --pekambar Enigma Phase II changes -- start
349 
350    -- Validating if media type is enigma enigma_doc_id should not be null
351    --  if null throw error message
352    IF G_DEBUG='Y' THEN
353 	  AHL_DEBUG_PUB.debug( 'in  Validate :p_media_type_code ' ||p_enigma_doc_id||'p_media_type_code:'||p_media_type_code);
354 	  AHL_DEBUG_PUB.debug( 'in  Validate :p_enigma_doc_id ' ||p_enigma_doc_id);
355 	  AHL_DEBUG_PUB.debug( 'in  Validate :p_x_enigma_model_code ' ||p_x_enigma_model_code);
356 	  AHL_DEBUG_PUB.debug( 'in  Validate :p_x_enigma_model_meaning ' ||p_x_enigma_model_meaning);
357   END IF;
358 
359    /* IF (p_media_type_code = 'ENIGMA' AND p_enigma_doc_id IS NULL)
360      THEN
361           FND_MESSAGE.SET_NAME('AHL','AHL_DI_ENIGMA_DOC_ID_NOT_NULL');
362           FND_MSG_PUB.ADD;
363     END IF;
364     IF (p_media_type_code <> 'ENIGMA' AND p_enigma_doc_id IS NOT NULL)
365      THEN
366           FND_MESSAGE.SET_NAME('AHL','AHL_DI_MEDIATYPE_IS_NOT_ENIGMA');
367           FND_MSG_PUB.ADD;
368     END IF;*/
369 
370 
371     IF G_DEBUG='Y' THEN
372 	  AHL_DEBUG_PUB.debug( 'in AFter lookup  Validate :p_media_type_code ' ||p_enigma_doc_id||'p_media_type_code:'||p_media_type_code);
373 	  AHL_DEBUG_PUB.debug( 'in  AFter lookup  Validate :p_enigma_doc_id ' ||p_enigma_doc_id);
374 	  AHL_DEBUG_PUB.debug( 'in  AFter lookup  Validate :p_x_enigma_model_code ' ||p_x_enigma_model_code);
375 	  AHL_DEBUG_PUB.debug( 'in  AFter lookup  Validate :p_x_enigma_model_meaning ' ||p_x_enigma_model_meaning);
376   END IF;
377    -- Validating if media type is enigma enigma_model_code should not be null
378    --  if null throw error message
379     IF ( p_media_type_code = 'ENIGMA' )
380      THEN
381 
382 	    IF (p_enigma_doc_id IS NULL)
383 	    THEN
384 		  FND_MESSAGE.SET_NAME('AHL','AHL_DI_ENIGMA_DOC_ID_NOT_NULL');
385 		  FND_MSG_PUB.ADD;
386 	    END IF;
387 
388 	    IF( p_x_enigma_model_code IS  NULL AND p_x_enigma_model_meaning IS NULL)
389 	    THEN
390 		FND_MESSAGE.set_name( 'AHL','AHL_RM_MODEL_CODE_NULL' );
391 		FND_MSG_PUB.add;
392 	    END IF;
393 
394             -- There is MODULE_TYPE passed to this package. assuming only call from JSP.
395 	    -- So Validating Lookup againest Meaning.
396 
397 	    IF(  p_x_enigma_model_meaning IS NOT NULL )
398 		THEN
399 		   AHL_RM_ROUTE_UTIL.validate_lookup
400 		    (
401 		      x_return_status	     => l_return_status,
402 		      x_msg_data		     => l_msg_data,
403 		      p_lookup_type	     => 'AHL_ENIGMA_MODEL_CODE',
404 		      p_lookup_meaning	     => p_x_enigma_model_meaning,
405 		      p_x_lookup_code	     => p_x_enigma_model_code
406 		    );
407 
408 		    IF ( NVL( l_return_status, 'X' ) <> FND_API.G_RET_STS_SUCCESS ) THEN
409 
410 			      IF ( l_msg_data = 'AHL_COM_INVALID_LOOKUP' ) THEN
411 				FND_MESSAGE.set_name( 'AHL', 'AHL_CM_INVALID_MODEL' );
412 			      ELSIF ( l_msg_data = 'AHL_COM_TOO_MANY_LOOKUPS' ) THEN
413 				FND_MESSAGE.set_name( 'AHL', 'AHL_CM_TOO_MANY_MODELS' );
414 			      ELSE
415 				FND_MESSAGE.set_name( 'AHL', l_msg_data );
416 			      END IF;
417 
418 			      IF ( p_x_enigma_model_meaning IS NULL OR
419 				   p_x_enigma_model_meaning = FND_API.G_MISS_CHAR ) THEN
420 				FND_MESSAGE.set_token( 'FIELD', p_x_enigma_model_code );
421 			      ELSE
422 				FND_MESSAGE.set_token( 'FIELD', p_x_enigma_model_meaning );
423 			      END IF;
424 
425 			      FND_MSG_PUB.add;
426 
427 		    END IF;
428 		END IF;
429 
430       ELSIF (p_media_type_code <> 'ENIGMA' OR p_media_type_code IS NULL)
431       THEN
432           IF( p_x_enigma_model_meaning IS NOT NULL  OR p_enigma_doc_id IS NOT NULL )
433 	  THEN
434 		FND_MESSAGE.SET_NAME('AHL','AHL_DI_MEDIATYPE_IS_NOT_ENIGMA');
435 		FND_MSG_PUB.ADD;
436           ELSIF(p_x_enigma_model_meaning IS NULL)
437 	  THEN
438 		p_x_enigma_model_code := NULL ;
439 	  END IF;
440 
441       END IF;
442 
443 
444    --pekambar Enigma Phase II changes -- end
445 
446 
447     -- Validates for existence of document id in ahl documents table
448     IF p_document_id IS NOT NULL
449     THEN
450        OPEN Check_doc_info(p_document_id);
451        FETCH Check_doc_info INTO l_dummy;
452        IF Check_doc_info%NOTFOUND
453        THEN
454           FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOCUMENT_ID_NOT_EXISTS');
455           FND_MSG_PUB.ADD;
456         END IF;
457         CLOSE Check_doc_info;
458       END IF;
459 
460    -- Validates the Issue Number
461    IF p_issue_number IS NOT NULL
462       OR
463       l_issue_number IS NOT NULL
464    THEN
465      IF(p_issue_number <= 0 or l_issue_number <= 0)
466      THEN
467        FND_MESSAGE.SET_NAME('AHL','AHL_DI_ISSUE_NUM_INVALID');
468        FND_MSG_PUB.ADD;
469      END IF;
470    END IF;
471   --Validations for Duplicate Record
472   IF p_doc_revision_id IS NULL
473   THEN
474      OPEN dup_rec(l_document_id, l_revision_no);
475      FETCH dup_rec INTO l_dummy;
476         IF dup_rec%FOUND THEN
477          FND_MESSAGE.SET_NAME('AHL','AHL_DI_REVISION_DUP_RECORD');
478          FND_MSG_PUB.ADD;
479         END IF;
480      CLOSE dup_rec;
481   END IF;
482 
483 END IF;
484 END VALIDATE_REVISION;
485 
486 -- FP for Bug #8410484
487 PROCEDURE UPDATE_ASSOCIATIONS
488 (
489 	p_doc_revision_id	IN	NUMBER	:=NULL,
490 	p_document_id		IN	NUMBER	:=NULL
491 )
492 IS
493 	--Cursor to get Association Records
494 	CURSOR get_association_records(c_document_id NUMBER)
495 	IS
496 	SELECT doc_title_asso_id,object_version_number,last_update_date,last_updated_by,last_update_login,
497 		aso_object_type_code,aso_object_id
498 	FROM AHL_DOC_TITLE_ASSOS_B
499 	WHERE document_id = c_document_id
500 	AND use_latest_rev_flag = 'Y';
501 
502 	l_asso_record	get_association_records%rowtype;
503 
504 	--Cursor To get revision status code
505 	CURSOR get_revision_status_code(c_doc_revision_id NUMBER)
506 	IS
507 	SELECT revision_status_code
508 	FROM AHL_DOC_REVISIONS_B
509 	WHERE doc_revision_id = c_doc_revision_id;
510 
511 		-- Cursor to get MC status
512 	CURSOR get_mc_status(c_relationship_id NUMBER)
513 	IS
514 	SELECT CONFIG_STATUS_CODE
515 	FROM ahl_mc_headers_b header,ahl_mc_relationships relation
516 	WHERE relation.relationship_id =  c_relationship_id
517 	AND header.mc_header_id = relation.mc_header_id;
518 
519 		--Cursor to get PC status
520 	CURSOR get_pc_status(c_node_id NUMBER)
521 	IS
522 	SELECT STATUS
523 	FROM ahl_pc_headers_b header,ahl_pc_nodes_b node
524 	WHERE node.pc_node_id = c_node_id
525 	AND header.pc_header_id = node.pc_header_id;
526 
527 		--Cursor to get MR status
528 	CURSOR get_mr_status(c_mr_header_id Number)
529 	IS
530 	SELECT mr_status_code
531 	FROM ahl_mr_headers_b
532 	where mr_header_id = c_mr_header_id;
533 
534 		--Cursor to get Operation Status
535 	CURSOR get_operation_status(c_operation_id NUMBER)
536 	IS
537 	SELECT revision_status_code
538 	FROM ahl_operations_b
539 	WHERE operation_id = c_operation_id;
540 
541 		--Cursor to get Route Status
542 	CURSOR get_route_status(c_route_id NUMBER)
543 	IS
544 	SELECT revision_status_code
545 	FROM ahl_routes_b
546 	WHERE route_id = c_route_id;
547 
548 	l_revision_status_code		VARCHAR2(30):= NULL;
549 	l_object_status_code		VARCHAR2(30):= NULL;
550 	l_latest_doc_revision_id	NUMBER:= NULL;
551 
552 BEGIN
553 	--Query to select the latest revision id
554 	SELECT MAX(doc_revision_id) INTO l_latest_doc_revision_id
555 	FROM ahl_doc_revisions_b
556 	WHERE NVL(effective_date,revision_date) = (SELECT MAX(NVL(effective_date,revision_date))
557 							   FROM ahl_doc_revisions_b
558 						           WHERE document_id = p_document_id
559                                                 	   AND NVL(effective_date,revision_date) <= SYSDATE
560 							   AND revision_status_code = 'CURRENT')
561 		AND document_id = p_document_id
562 		AND revision_status_code = 'CURRENT';
563 	-- If concurrent program is the caller then p_doc_revision_id is passed as null.So in this case
564 	-- l_latest_doc_revision_id will be used for updating the association table.
565 	-- If this procdure is not called by concurrent program then if the new/modified revision(of which
566         -- revision id is passed) is not latest then the program will return at this point.
567 	IF p_doc_revision_id IS NOT NULL AND l_latest_doc_revision_id <> p_doc_revision_id THEN
568 		RETURN ;
569 	END IF;
570 	-- If no 'Current' revision of the document is available(i.e. all the revisions are 'Obsolete'
571 	-- and the document is associated with Use Latest Flag ='Yes' then keep the association as it is.
572 
573 	IF l_latest_doc_revision_id IS NULL THEN
574 		RETURN ;
575 	END IF;
576 
577 	IF G_DEBUG='Y' THEN
578 		  AHL_DEBUG_PUB.debug( 'Got Max Revision Id' || l_latest_doc_revision_id);
579 	END IF;
580 
581 
582 	-- For each association record which has use_latest_flag = 'Y' and this document is attached,
583 	-- the following piece of code will update the document association table with the latest revision.
584 	OPEN get_association_records(p_document_id);
585 	LOOP
586 		FETCH get_association_records INTO l_asso_record;
587 		EXIT WHEN get_association_records%NOTFOUND;
588 		IF l_asso_record.aso_object_type_code = 'MR' THEN
589 			OPEN get_mr_status(l_asso_record.aso_object_id);
590 			FETCH get_mr_status INTO l_object_status_code;
591 			CLOSE get_mr_status;
592 		ELSIF l_asso_record.aso_object_type_code = 'ROUTE' THEN
593 			OPEN get_route_status(l_asso_record.aso_object_id);
594 			FETCH get_route_status INTO l_object_status_code;
595 			CLOSE get_route_status;
596 		ELSIF l_asso_record.aso_object_type_code = 'OPERATION' THEN
597 			OPEN get_operation_status(l_asso_record.aso_object_id);
598 			FETCH get_operation_status INTO l_object_status_code;
599 			CLOSE get_operation_status;
600 		ELSIF l_asso_record.aso_object_type_code = 'MC' THEN
601 			OPEN get_mc_status(l_asso_record.aso_object_id);
602 			FETCH get_mc_status INTO l_object_status_code;
603 			CLOSE get_mc_status;
604 		ELSIF l_asso_record.aso_object_type_code = 'PC' THEN
605 			OPEN get_pc_status(l_asso_record.aso_object_id);
606 			FETCH get_pc_status INTO l_object_status_code;
607 			CLOSE get_pc_status;
608 		END IF;
609 		IF G_DEBUG='Y' THEN
610 		  AHL_DEBUG_PUB.debug( 'Object Status Code ' || l_object_status_code);
611 		END IF;
612 		-- Updation is allowed only if the associated object status is complete or approval rejected or
613 		-- draft.
614 		IF l_object_status_code = 'COMPLETE' OR l_object_status_code = 'APPROVAL_REJECTED'
615 		   OR l_object_status_code = 'DRAFT' THEN
616 			IF G_DEBUG='Y' THEN
617 				AHL_DEBUG_PUB.debug( 'Before Update in New Procedure' );
618 			END IF;
619 			UPDATE AHL_DOC_TITLE_ASSOS_B
620 				SET	doc_revision_id = l_latest_doc_revision_id,
621 					object_version_number = l_asso_record.object_version_number + 1,
622 					last_update_date = l_asso_record.last_update_date,
623 					last_updated_by =l_asso_record.last_updated_by,
624 					last_update_login = l_asso_record.last_update_login
625 				WHERE	doc_title_asso_id =l_asso_record.doc_title_asso_id;
626 		END IF;
627 	END LOOP;
628 	CLOSE get_association_records;
629 END UPDATE_ASSOCIATIONS;
630 
631 -- FP end
632 
633 /*------------------------------------------------------*/
634 /* procedure name: create_revision                      */
635 /* description :  Creates new revision record           */
636 /*                for an associated document            */
637 /*                                                      */
638 /*------------------------------------------------------*/
639 PROCEDURE CREATE_REVISION
640 (
641  p_api_version               IN     NUMBER    :=  1.0                ,
642  p_init_msg_list             IN     VARCHAR2  := FND_API.G_TRUE      ,
643  p_commit                    IN     VARCHAR2  := FND_API.G_FALSE     ,
644  p_validate_only             IN     VARCHAR2  := FND_API.G_TRUE      ,
645  p_validation_level          IN     NUMBER    := FND_API.G_VALID_LEVEL_FULL,
646  p_x_revision_tbl            IN OUT NOCOPY revision_tbl              ,
647  x_return_status                OUT NOCOPY VARCHAR2                         ,
648  x_msg_count                    OUT NOCOPY NUMBER                           ,
649  x_msg_data                     OUT NOCOPY VARCHAR2
650  )
651 IS
652 --
653  l_api_name     CONSTANT VARCHAR2(30) := 'CREATE_REVISION';
654  l_api_version  CONSTANT NUMBER       := 1.0;
655  l_msg_count             NUMBER;
656  l_rowid                 ROWID;
657  l_doc_revision_id       NUMBER;
658  l_revision_info        revision_rec;
659  --Added for storing local variables to pass to Table Handler- Prakash 26-Dec-2001
660  l_row_id                   VARCHAR2(30);
661  --End of addition: Prakash 26-dec-2001
662 BEGIN
663    -- Standard Start of API savepoint
664    SAVEPOINT create_revision;
665    -- Check if API is called in debug mode. If yes, enable debug.
666    IF G_DEBUG='Y' THEN
667 		  AHL_DEBUG_PUB.enable_debug;
668 
669 	END IF;
670    -- Debug info.
671    IF G_DEBUG='Y' THEN
672        IF G_DEBUG='Y' THEN
673 		  AHL_DEBUG_PUB.debug( 'enter ahl_di_doc_revision_pvt.Create Revision','+REV+');
674 
675 	END IF;
676     END IF;
677    -- Standard call to check for call compatibility.
678    IF FND_API.to_boolean(p_init_msg_list)
679    THEN
680      FND_MSG_PUB.initialize;
681    END IF;
682     --  Initialize API return status to success
683     x_return_status := 'S';
684    -- Initialize message list if p_init_msg_list is set to TRUE.
685    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
686                                       p_api_version,
687                                       l_api_name,G_PKG_NAME)
688    THEN
689        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
690    END IF;
691    --Start of API Body
692     IF p_x_revision_tbl.COUNT > 0
693     THEN
694      FOR i IN p_x_revision_tbl.FIRST..p_x_revision_tbl.LAST
695      LOOP
696         -- Calling for Validation
697         VALIDATE_REVISION
698            (
699              p_doc_revision_id        => p_x_revision_tbl(i).doc_revision_id,
700              p_document_id            => p_x_revision_tbl(i).document_id,
701              p_revision_no            => p_x_revision_tbl(i).revision_no,
702              p_revision_type_code     => p_x_revision_tbl(i).revision_type_code,
703              p_revision_status_code   => p_x_revision_tbl(i).revision_status_code,
704              p_revision_date          => p_x_revision_tbl(i).revision_date,
705              p_approved_by_party_id   => p_x_revision_tbl(i).approved_by_party_id,
706              p_approved_date          => p_x_revision_tbl(i).approved_date,
707              p_effective_date         => p_x_revision_tbl(i).effective_date,
708              p_obsolete_date          => p_x_revision_tbl(i).obsolete_date,
709              p_issue_date             => p_x_revision_tbl(i).issue_date,
710              p_received_date          => p_x_revision_tbl(i).received_date,
711              p_media_type_code        => p_x_revision_tbl(i).media_type_code,
712              --pekambar Enigma Phase II changes -- start
713 	     p_enigma_doc_id        => p_x_revision_tbl(i).enigma_doc_id,
714 	     p_x_enigma_model_code        => p_x_revision_tbl(i).enigma_model_code,
715 	     p_x_enigma_model_meaning        => p_x_revision_tbl(i).enigma_model_meaning,
716 	     --pekambar Enigma Phase II changes -- end
717              p_issue_number           => p_x_revision_tbl(i).issue_number,
718              p_delete_flag            => p_x_revision_tbl(i).delete_flag
719            );
720       END LOOP;
721    -- Standard call to get message count and if count is  get message info.
722    l_msg_count := FND_MSG_PUB.count_msg;
723 
724 
725    IF l_msg_count > 0 THEN
726       X_msg_count := l_msg_count;
727       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
728       RAISE FND_API.G_EXC_ERROR;
729    END IF;
730    FOR i IN p_x_revision_tbl.FIRST..p_x_revision_tbl.LAST
731    LOOP
732       IF  p_x_revision_tbl(i).doc_revision_id IS NULL
733       THEN
734          -- The following conditions should be checked for Optional Fields
735              l_revision_info.approved_by_party_id := p_x_revision_tbl(i).approved_by_party_id;
736             l_revision_info.revision_date := p_x_revision_tbl(i).revision_date;
737             l_revision_info.approved_date := p_x_revision_tbl(i).approved_date;
738             l_revision_info.effective_date := p_x_revision_tbl(i).effective_date;
739             l_revision_info.obsolete_date := p_x_revision_tbl(i).obsolete_date;
740             l_revision_info.issue_date := p_x_revision_tbl(i).issue_date;
741             l_revision_info.received_date := p_x_revision_tbl(i).received_date;
742             l_revision_info.url := p_x_revision_tbl(i).url;
743             l_revision_info.media_type_code := p_x_revision_tbl(i).media_type_code;
744             --pekambar Enigma Phase II changes -- start
745 	    l_revision_info.enigma_doc_id := p_x_revision_tbl(i).enigma_doc_id;
746 	    l_revision_info.enigma_model_code := p_x_revision_tbl(i).enigma_model_code;
747 	    l_revision_info.enigma_model_meaning := p_x_revision_tbl(i).enigma_model_meaning;
748 	    --pekambar Enigma Phase II changes -- end
749             l_revision_info.volume := p_x_revision_tbl(i).volume;
750             l_revision_info.issue := p_x_revision_tbl(i).issue;
751             l_revision_info.issue_number := p_x_revision_tbl(i).issue_number;
752             l_revision_info.comments := p_x_revision_tbl(i).comments;
753             --snarkhed::Added this as part of bug fix for Bug #9532118
754 
755 	    IF(p_x_revision_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
756 		l_revision_info.attribute_category := NULL;
757 	    ELSE
758 		l_revision_info.attribute_category := p_x_revision_tbl(i).attribute_category;
759 	    END IF;
760 
761 
762 	    IF(p_x_revision_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
763 		l_revision_info.attribute1 := NULL;
764 	    ELSE
765 		l_revision_info.attribute1 := p_x_revision_tbl(i).attribute1;
766 	    END IF;
767 
768 	    IF(p_x_revision_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
769 		l_revision_info.attribute2 := NULL;
770 	    ELSE
771 		l_revision_info.attribute2 := p_x_revision_tbl(i).attribute2;
772 	    END IF;
773 
774 	    IF(p_x_revision_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
775 		l_revision_info.attribute3 := NULL;
776 	    ELSE
777 		l_revision_info.attribute3 := p_x_revision_tbl(i).attribute3;
778 	    END IF;
779 
780 	    IF(p_x_revision_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
781 		l_revision_info.attribute4 := NULL;
782 	    ELSE
783 		l_revision_info.attribute4 := p_x_revision_tbl(i).attribute4;
784 	    END IF;
785 
786 	    IF(p_x_revision_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
787 		l_revision_info.attribute5 := NULL;
788 	    ELSE
789 		l_revision_info.attribute5 := p_x_revision_tbl(i).attribute5;
790 	    END IF;
791 
792 	    IF(p_x_revision_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
793 		l_revision_info.attribute6 := NULL;
794 	    ELSE
795 		l_revision_info.attribute6 := p_x_revision_tbl(i).attribute6;
796 	    END IF;
797 
798 	    IF(p_x_revision_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
799 		l_revision_info.attribute7 := NULL;
800 	    ELSE
801 		l_revision_info.attribute7 := p_x_revision_tbl(i).attribute7;
802 	    END IF;
803 
804 	    IF(p_x_revision_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
805 		l_revision_info.attribute8 := NULL;
806 	    ELSE
807 		l_revision_info.attribute8 := p_x_revision_tbl(i).attribute8;
808 	    END IF;
809 
810 	    IF(p_x_revision_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
811 		l_revision_info.attribute9 := NULL;
812 	    ELSE
813 		l_revision_info.attribute9 := p_x_revision_tbl(i).attribute9;
814 	    END IF;
815 
816 	    IF(p_x_revision_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
817 		l_revision_info.attribute10 := NULL;
818 	    ELSE
819 		l_revision_info.attribute10 := p_x_revision_tbl(i).attribute10;
820 	    END IF;
821 
822 	    IF(p_x_revision_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
823 		l_revision_info.attribute11:= NULL;
824 	    ELSE
825 		l_revision_info.attribute11 := p_x_revision_tbl(i).attribute11;
826 	    END IF;
827 
828 	    IF(p_x_revision_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
829 		l_revision_info.attribute12 := NULL;
830 	    ELSE
831 		l_revision_info.attribute12 := p_x_revision_tbl(i).attribute12;
832 	    END IF;
833 
834 	    IF(p_x_revision_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
835 		l_revision_info.attribute13 := NULL;
836 	    ELSE
837 		l_revision_info.attribute13 := p_x_revision_tbl(i).attribute13;
838             END IF;
839 
840 	    IF(p_x_revision_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
841 		l_revision_info.attribute14 := NULL;
842 	    ELSE
843 	 	l_revision_info.attribute14 := p_x_revision_tbl(i).attribute14;
844             END IF;
845 
846 	    IF(p_x_revision_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
847 		l_revision_info.attribute15 := NULL;
848 	    ELSE
849 	 	l_revision_info.attribute15 := p_x_revision_tbl(i).attribute15;
850             END IF;
851 
852 	    /*l_revision_info.attribute_category := p_x_revision_tbl(i).attribute_category;
853             l_revision_info.attribute1 := p_x_revision_tbl(i).attribute1;
854             l_revision_info.attribute2 := p_x_revision_tbl(i).attribute2;
855             l_revision_info.attribute3 := p_x_revision_tbl(i).attribute3;
856             l_revision_info.attribute4 := p_x_revision_tbl(i).attribute4;
857             l_revision_info.attribute5 := p_x_revision_tbl(i).attribute5;
858             l_revision_info.attribute6 := p_x_revision_tbl(i).attribute6;
859             l_revision_info.attribute7 := p_x_revision_tbl(i).attribute7;
860             l_revision_info.attribute8 := p_x_revision_tbl(i).attribute8;
861             l_revision_info.attribute9 := p_x_revision_tbl(i).attribute9;
862             l_revision_info.attribute10 := p_x_revision_tbl(i).attribute10;
863             l_revision_info.attribute11 := p_x_revision_tbl(i).attribute11;
864             l_revision_info.attribute12 := p_x_revision_tbl(i).attribute12;
865             l_revision_info.attribute13 := p_x_revision_tbl(i).attribute13;
866             l_revision_info.attribute14 := p_x_revision_tbl(i).attribute14;
867             l_revision_info.attribute15 := p_x_revision_tbl(i).attribute15;*/
868 	    --End of changes for Bug 9532118
869          -- Gets the value from sequence
870         Select AHL_DOC_REVISIONS_B_S.Nextval Into l_doc_revision_id from dual;
871         --Insert the record into doc revisions table
872              AHL_DOC_REVISIONS_PKG.INSERT_ROW(X_ROWID => l_row_id,
873              				      X_DOC_REVISION_ID => l_doc_revision_id,
874              				      X_APPROVED_DATE => l_revision_info.approved_date,
875              				      X_EFFECTIVE_DATE => l_revision_info.effective_date,
876 					      X_OBSOLETE_DATE => l_revision_info.obsolete_date,
877 					      X_ISSUE_DATE => l_revision_info.issue_date,
878 					      X_RECEIVED_DATE => l_revision_info.received_date,
879 					      X_URL => l_revision_info.url,
880 					      X_MEDIA_TYPE_CODE => l_revision_info.media_type_code,
881 				              --pekambar Enigma Phase II changes -- start
882 				              X_ENIGMA_DOC_ID => l_revision_info.enigma_doc_id,
883 					      X_ENIGMA_MODEL_CODE => l_revision_info.enigma_model_code,
884 				              --pekambar Enigma Phase II changes -- end
885 					      X_VOLUME => l_revision_info.volume,
886 					      X_ISSUE => l_revision_info.issue,
887 					      X_ISSUE_NUMBER => l_revision_info.issue_number,
888 					      X_ATTRIBUTE_CATEGORY => l_revision_info.attribute_category,
889 					      X_ATTRIBUTE1 => l_revision_info.attribute1,
890 					      X_ATTRIBUTE2 => l_revision_info.attribute2,
891 					      X_REVISION_DATE => l_revision_info.revision_date,
892 					      X_ATTRIBUTE15 => l_revision_info.attribute15,
893 					      X_ATTRIBUTE9 => l_revision_info.attribute9,
894 					      X_ATTRIBUTE10 => l_revision_info.attribute10,
895 					      X_ATTRIBUTE11 => l_revision_info.attribute11,
896 					      X_ATTRIBUTE12 => l_revision_info.attribute12,
897 					      X_ATTRIBUTE13 => l_revision_info.attribute13,
898 					      X_DOCUMENT_ID => p_x_revision_tbl(i).document_id,
899 					      X_REVISION_NO => p_x_revision_tbl(i).revision_no,
900 					      X_APPROVED_BY_PARTY_ID => l_revision_info.approved_by_party_id,
901 					      X_REVISION_TYPE_CODE => p_x_revision_tbl(i).revision_type_code,
902 					      X_REVISION_STATUS_CODE => p_x_revision_tbl(i).revision_status_code,
903 					      X_OBJECT_VERSION_NUMBER => 1,
904 					      X_ATTRIBUTE3 => l_revision_info.attribute3,
905 					      X_ATTRIBUTE4 => l_revision_info.attribute4,
906 					      X_ATTRIBUTE5 => l_revision_info.attribute5,
907 					      X_ATTRIBUTE6 => l_revision_info.attribute6,
908 					      X_ATTRIBUTE7 => l_revision_info.attribute7,
909 					      X_ATTRIBUTE8 => l_revision_info.attribute8,
910 					      X_ATTRIBUTE14 => l_revision_info.attribute14,
911 					      X_COMMENTS => l_revision_info.comments,
912 					      X_CREATION_DATE => sysdate,
913 					      X_CREATED_BY => fnd_global.user_id,
914 					      X_LAST_UPDATE_DATE => sysdate,
915 					      X_LAST_UPDATED_BY => fnd_global.user_id,
916                                               X_LAST_UPDATE_LOGIN => fnd_global.login_id);
917 
918 	                -- FP for Bug #8410484
919 			UPDATE_ASSOCIATIONS(p_doc_revision_id => l_doc_revision_id,
920 					    p_document_id => p_x_revision_tbl(i).document_id);
921 			-- FP end
922 
923              /*Following line have been moved, since table handler does not take care of
924              assignments: Prakash : 24-Dec-2001*/
925              --Assign doc revision id
926 	            p_x_revision_tbl(i).doc_revision_id := l_doc_revision_id;
927                     p_x_revision_tbl(i).object_version_number := 1;
928         l_msg_count := FND_MSG_PUB.count_msg;
929 
930    IF l_msg_count > 0 THEN
931       X_msg_count := l_msg_count;
932       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
933       RAISE FND_API.G_EXC_ERROR;
934    END IF;
935   END IF;
936  END LOOP;
937 END IF;
938    -- Standard check of p_commit.
939    IF FND_API.TO_BOOLEAN(p_commit) THEN
940       COMMIT;
941    END IF;
942    -- Debug info
943    IF G_DEBUG='Y' THEN
944 		  AHL_DEBUG_PUB.debug( 'End of private api Create Revision','+REV+');
945 
946 	END IF;
947    -- Check if API is called in debug mode. If yes, disable debug.
948    IF G_DEBUG='Y' THEN
949 		  AHL_DEBUG_PUB.disable_debug;
950 
951 	END IF;
952 
953 EXCEPTION
954  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
955     ROLLBACK TO create_revision;
956     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
957     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
958                                p_count => x_msg_count,
959                                p_data  => x_msg_data);
960         --Debug Info
961         IF G_DEBUG='Y' THEN
962             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'ERROR' );
963             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Create Revision','+REV+');
964 
965 
966         -- Check if API is called in debug mode. If yes, disable debug.
967             AHL_DEBUG_PUB.disable_debug;
968 
969 	END IF;
970 
971  WHEN FND_API.G_EXC_ERROR THEN
972     ROLLBACK TO create_revision;
973     X_return_status := FND_API.G_RET_STS_ERROR;
974     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
975                                p_count => x_msg_count,
976                                p_data  => X_msg_data);
977         -- Debug info.
978         IF G_DEBUG='Y' THEN
979             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
980             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Create Revision','+REV+');
981 
982 
983         -- Check if API is called in debug mode. If yes, disable debug.
984            AHL_DEBUG_PUB.disable_debug;
985 
986 	END IF;
987 
988  WHEN OTHERS THEN
989     ROLLBACK TO create_revision;
990     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
991     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
992     THEN
993     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DI_DOC_REVISION_PVT',
994                             p_procedure_name  =>  'CREATE_REVISION',
995                             p_error_text      => SUBSTR(SQLERRM,1,240));
996     END IF;
997     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
998                                p_count => x_msg_count,
999                                p_data  => X_msg_data);
1000         -- Debug info.
1001         IF G_DEBUG='Y' THEN
1002             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'SQL ERROR' );
1003             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Create Revision','+REV+');
1004 
1005         -- Check if API is called in debug mode. If yes, disable debug.
1006             AHL_DEBUG_PUB.disable_debug;
1007 
1008 	END IF;
1009 
1010 END CREATE_REVISION;
1011 /*------------------------------------------------------*/
1012 /* procedure name: modify_revision                      */
1013 /* description :  Update the existing revision record   */
1014 /*                and removes the revision record       */
1015 /*                for an associated document            */
1016 /*                                                      */
1017 /*------------------------------------------------------*/
1018 PROCEDURE MODIFY_REVISION
1019 (
1020  p_api_version               IN     NUMBER    :=  1.0                ,
1021  p_init_msg_list             IN     VARCHAR2  := FND_API.G_TRUE      ,
1022  p_commit                    IN     VARCHAR2  := FND_API.G_FALSE     ,
1023  p_validate_only             IN     VARCHAR2  := FND_API.G_TRUE      ,
1024  p_validation_level          IN     NUMBER    := FND_API.G_VALID_LEVEL_FULL,
1025  --pekambar changed in enigma phase -2
1026  --p_x_revision_tbl            IN     revision_tbl                     ,
1027  p_x_revision_tbl            IN  OUT  NOCOPY  revision_tbl                     ,
1028  x_return_status                OUT NOCOPY VARCHAR2                         ,
1029  x_msg_count                    OUT NOCOPY NUMBER                           ,
1030  x_msg_data                     OUT NOCOPY VARCHAR2
1031 )
1032 IS
1033 -- Used to retrieve the existing record info
1034 CURSOR get_doc_revisions_b_rec_info(c_doc_revision_id  NUMBER)
1035  IS
1036 SELECT ROWID,
1037        document_id,
1038        revision_no,
1039        revision_type_code,
1040        revision_status_code,
1041        revision_date,
1042        approved_by_party_id,
1043        approved_date,
1044        effective_date,
1045        obsolete_date,
1046        issue_date,
1047        received_date,
1048        url,
1049        media_type_code,
1050        --pekambar Enigma Phase II changes -- start
1051        enigma_doc_id,
1052        enigma_model_code,
1053        --pekambar Enigma Phase II changes -- end
1054        volume,
1055        issue,
1056        issue_number,
1057        object_version_number,
1058        attribute_category,
1059        attribute1,
1060        attribute2,
1061        attribute3,
1062        attribute4,
1063        attribute5,
1064        attribute6,
1065        attribute7,
1066        attribute8,
1067        attribute9,
1068        attribute10,
1069        attribute11,
1070        attribute12,
1071        attribute13,
1072        attribute14,
1073        attribute15
1074   FROM AHL_DOC_REVISIONS_B
1075  WHERE doc_revision_id = c_doc_revision_id
1076    FOR UPDATE OF object_version_number NOWAIT;
1077 --Used to retrieve the record from trans table
1078 CURSOR get_doc_revisions_tl_rec_info(c_doc_revision_id NUMBER)
1079  IS
1080 SELECT comments
1081   FROM AHL_DOC_REVISIONS_TL
1082  WHERE doc_revision_id = c_doc_revision_id
1083    FOR UPDATE OF doc_revision_id NOWAIT;
1084 --
1085  l_api_name       CONSTANT VARCHAR2(30) := 'MODIFY_REVISION';
1086  l_api_version    CONSTANT NUMBER       := 1.0;
1087  l_msg_count               NUMBER;
1088  l_rowid                   ROWID;
1089  l_doc_revision_id         NUMBER;
1090  l_language                VARCHAR2(4);
1091  l_source_lang             VARCHAR2(4);
1092  l_comments                VARCHAR2(2000);
1093  /*--pekambar Enigma Phase II changes -- start
1094  l_enigma_doc_id    VARCHAR2(80);
1095  l_enigma_model_code    VARCHAR2(30);
1096  l_enigma_model_meaning    VARCHAR2(80);
1097  --pekambar Enigma Phase II changes -- end*/
1098 
1099  l_revision_info           get_doc_revisions_b_rec_info%ROWTYPE;
1100  --
1101  BEGIN
1102     -- Standard Start of API savepoint
1103     SAVEPOINT modify_revision;
1104    -- Check if API is called in debug mode. If yes, enable debug.
1105    IF G_DEBUG='Y' THEN
1106 		  AHL_DEBUG_PUB.enable_debug;
1107 
1108 	END IF;
1109    -- Debug info.
1110    IF G_DEBUG='Y' THEN
1111        IF G_DEBUG='Y' THEN
1112 		  AHL_DEBUG_PUB.debug( 'enter ahl_di_doc_revision_pvt.Modify Revision','+REV+');
1113 
1114 	END IF;
1115     END IF;
1116     -- Standard call to check for call compatibility.
1117    IF FND_API.to_boolean(p_init_msg_list)
1118    THEN
1119      FND_MSG_PUB.initialize;
1120    END IF;
1121     --  Initialize API return status to success
1122     x_return_status := 'S';
1123 
1124    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1125                                       p_api_version,
1126                                       l_api_name,G_PKG_NAME)
1127    THEN
1128        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1129    END IF;
1130    --Start of API Body
1131    IF p_x_revision_tbl.COUNT > 0
1132    THEN
1133      FOR i IN p_x_revision_tbl.FIRST..p_x_revision_tbl.LAST
1134      LOOP
1135         --Calling for Validation
1136         VALIDATE_REVISION
1137          (
1138           p_doc_revision_id        => p_x_revision_tbl(i).doc_revision_id,
1139           p_document_id            => p_x_revision_tbl(i).document_id,
1140           p_revision_no            => p_x_revision_tbl(i).revision_no,
1141           p_revision_type_code     => p_x_revision_tbl(i).revision_type_code,
1142           p_revision_status_code   => p_x_revision_tbl(i).revision_status_code,
1143           p_revision_date          => p_x_revision_tbl(i).revision_date,
1144           p_approved_by_party_id   => p_x_revision_tbl(i).approved_by_party_id,
1145           p_approved_date          => p_x_revision_tbl(i).approved_date,
1146           p_effective_date         => p_x_revision_tbl(i).effective_date,
1147           p_obsolete_date          => p_x_revision_tbl(i).obsolete_date,
1148           p_issue_date             => p_x_revision_tbl(i).obsolete_date,
1149           p_received_date          => p_x_revision_tbl(i).obsolete_date,
1150           p_media_type_code        => p_x_revision_tbl(i).media_type_code,
1151 	  --pekambar Enigma Phase II changes -- start
1152 	  p_enigma_doc_id        => p_x_revision_tbl(i).enigma_doc_id,
1153 	  p_x_enigma_model_code        => p_x_revision_tbl(i).enigma_model_code,
1154 	  p_x_enigma_model_meaning        => p_x_revision_tbl(i).enigma_model_meaning,
1155 	  --pekambar Enigma Phase II changes -- end
1156           p_issue_number           => p_x_revision_tbl(i).issue_number,
1157           p_delete_flag            => p_x_revision_tbl(i).delete_flag
1158         );
1159       END LOOP;
1160    --End of Validations
1161    -- Standard call to get message count
1162    l_msg_count := FND_MSG_PUB.count_msg;
1163    IF l_msg_count > 0 THEN
1164       X_msg_count := l_msg_count;
1165       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1166       RAISE FND_API.G_EXC_ERROR;
1167    END IF;
1168    FOR i IN p_x_revision_tbl.FIRST..p_x_revision_tbl.LAST
1169    LOOP
1170       OPEN get_doc_revisions_b_rec_info(p_x_revision_tbl(i).doc_revision_id);
1171       FETCH get_doc_revisions_b_rec_info INTO l_revision_info;
1172       CLOSE get_doc_revisions_b_rec_info;
1173       --
1174       OPEN get_doc_revisions_tl_rec_info(p_x_revision_tbl(i).doc_revision_id);
1175       FETCH get_doc_revisions_tl_rec_info INTO l_comments;
1176       CLOSE get_doc_revisions_tl_rec_info;
1177 
1178     -- This  bug fix when concurrent users  update
1179     -- updating same record...02/05/02
1180     if (l_revision_info.object_version_number <>p_x_revision_tbl(i).object_version_number)
1181     then
1182         FND_MESSAGE.SET_NAME('AHL','AHL_COM_RECORD_CHANGED');
1183         FND_MSG_PUB.ADD;
1184         RAISE FND_API.G_EXC_ERROR;
1185     end if;
1186       -- The following conditions compare the new record value with old  record
1187       -- value, if its different then assign the new value else continue
1188       IF p_x_revision_tbl(i).doc_revision_id IS NOT NULL
1189       THEN
1190            l_revision_info.document_id := p_x_revision_tbl(i).document_id;
1191           l_revision_info.revision_no := p_x_revision_tbl(i).revision_no;
1192           l_revision_info.revision_type_code := p_x_revision_tbl(i).revision_type_code;
1193           l_revision_info.revision_date := p_x_revision_tbl(i).revision_date;
1194           l_revision_info.approved_by_party_id := p_x_revision_tbl(i).approved_by_party_id;
1195           l_revision_info.approved_date := p_x_revision_tbl(i).approved_date;
1196           l_revision_info.effective_date := p_x_revision_tbl(i).effective_date;
1197           l_revision_info.obsolete_date := p_x_revision_tbl(i).obsolete_date;
1198 	  --FP for Bug #8410484
1199 	  IF (trunc(l_revision_info.obsolete_date) <= trunc(sysdate)) THEN
1200 		l_revision_info.revision_status_code := 'OBSOLETE';
1201 	  ELSE
1202 		l_revision_info.revision_status_code := p_x_revision_tbl(i).revision_status_code;
1203 	  END IF;
1204 
1205 	  IF G_DEBUG='Y' THEN
1206 		  AHL_DEBUG_PUB.debug( 'obs date ' || l_revision_info.obsolete_date);
1207 		  AHL_DEBUG_PUB.debug( 'rev_status_code ' || l_revision_info.revision_status_code);
1208 	  END IF;
1209 	  -- End of FP
1210           l_revision_info.issue_date := p_x_revision_tbl(i).issue_date;
1211           l_revision_info.received_date := p_x_revision_tbl(i).received_date;
1212           l_revision_info.url := p_x_revision_tbl(i).url;
1213           l_revision_info.media_type_code := p_x_revision_tbl(i).media_type_code;
1214   	  --pekambar Enigma Phase II changes -- start
1215           l_revision_info.enigma_doc_id := p_x_revision_tbl(i).enigma_doc_id;
1216 	  l_revision_info.enigma_model_code := p_x_revision_tbl(i).enigma_model_code;
1217 	  --l_revision_info.enigma_model_meaning := p_x_revision_tbl(i).enigma_model_meaning;
1218 	  --pekambar Enigma Phase II changes -- end
1219           l_revision_info.volume := p_x_revision_tbl(i).volume;
1220           l_revision_info.issue := p_x_revision_tbl(i).issue;
1221           l_revision_info.issue_number := p_x_revision_tbl(i).issue_number;
1222           l_comments := p_x_revision_tbl(i).comments;
1223           --snarkhed::Added this as part of bug fix for Bug #9532118
1224 
1225           IF(p_x_revision_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
1226 		l_revision_info.attribute_category := NULL;
1227 	  ELSIF(p_x_revision_tbl(i).attribute_category IS NOT NULL) THEN
1228 		l_revision_info.attribute_category := p_x_revision_tbl(i).attribute_category;
1229 	  END IF;
1230 
1231 
1232 	  IF(p_x_revision_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
1233 		l_revision_info.attribute1 := NULL;
1234 	  ELSIF(p_x_revision_tbl(i).attribute1 IS NOT NULL) THEN
1235 		l_revision_info.attribute1 := p_x_revision_tbl(i).attribute1;
1236 	  END IF;
1237 
1238 	  IF(p_x_revision_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
1239 		l_revision_info.attribute2 := NULL;
1240 	  ELSIF(p_x_revision_tbl(i).attribute2 IS NOT NULL) THEN
1241 		l_revision_info.attribute2 := p_x_revision_tbl(i).attribute2;
1242 	  END IF;
1243 
1244 	  IF(p_x_revision_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
1245 		l_revision_info.attribute3 := NULL;
1246 	  ELSIF(p_x_revision_tbl(i).attribute3 IS NOT NULL) THEN
1247 		l_revision_info.attribute3 := p_x_revision_tbl(i).attribute3;
1248 	  END IF;
1249 
1250 	  IF(p_x_revision_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
1251 		l_revision_info.attribute4 := NULL;
1252 	  ELSIF(p_x_revision_tbl(i).attribute4 IS NOT NULL) THEN
1253 		l_revision_info.attribute4 := p_x_revision_tbl(i).attribute4;
1254 	  END IF;
1255 
1256 	  IF(p_x_revision_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
1257 		l_revision_info.attribute5 := NULL;
1258 	  ELSIF(p_x_revision_tbl(i).attribute5 IS NOT NULL) THEN
1259 		l_revision_info.attribute5 := p_x_revision_tbl(i).attribute5;
1260 	  END IF;
1261 
1262 	  IF(p_x_revision_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
1263 		l_revision_info.attribute6 := NULL;
1264 	  ELSIF(p_x_revision_tbl(i).attribute6 IS NOT NULL) THEN
1265 		l_revision_info.attribute6 := p_x_revision_tbl(i).attribute6;
1266 	  END IF;
1267 
1268 	  IF(p_x_revision_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
1269 		l_revision_info.attribute7 := NULL;
1270 	  ELSIF(p_x_revision_tbl(i).attribute7 IS NOT NULL) THEN
1271 		l_revision_info.attribute7 := p_x_revision_tbl(i).attribute7;
1272 	  END IF;
1273 
1274 	  IF(p_x_revision_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
1275 		l_revision_info.attribute8 := NULL;
1276 	  ELSIF(p_x_revision_tbl(i).attribute8 IS NOT NULL) THEN
1277 		l_revision_info.attribute8 := p_x_revision_tbl(i).attribute8;
1278 	  END IF;
1279 
1280 	  IF(p_x_revision_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
1281 		l_revision_info.attribute9 := NULL;
1282 	  ELSIF(p_x_revision_tbl(i).attribute9 IS NOT NULL) THEN
1283 		l_revision_info.attribute9 := p_x_revision_tbl(i).attribute9;
1284 	  END IF;
1285 
1286 	  IF(p_x_revision_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
1287 		l_revision_info.attribute10 := NULL;
1288 	  ELSIF(p_x_revision_tbl(i).attribute10 IS NOT NULL) THEN
1289 		l_revision_info.attribute10 := p_x_revision_tbl(i).attribute10;
1290 	  END IF;
1291 
1292 	  IF(p_x_revision_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
1293 		l_revision_info.attribute11:= NULL;
1294 	  ELSIF(p_x_revision_tbl(i).attribute11 IS NOT NULL) THEN
1295 		l_revision_info.attribute11 := p_x_revision_tbl(i).attribute11;
1296 	  END IF;
1297 
1298 	  IF(p_x_revision_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
1299 		l_revision_info.attribute12 := NULL;
1300 	  ELSIF(p_x_revision_tbl(i).attribute12 IS NOT NULL) THEN
1301 		l_revision_info.attribute12 := p_x_revision_tbl(i).attribute12;
1302 	  END IF;
1303 
1304 	  IF(p_x_revision_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
1305 		l_revision_info.attribute13 := NULL;
1306 	  ELSIF(p_x_revision_tbl(i).attribute13 IS NOT NULL) THEN
1307 		l_revision_info.attribute13 := p_x_revision_tbl(i).attribute13;
1308           END IF;
1309 
1310 	  IF(p_x_revision_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
1311 		l_revision_info.attribute14 := NULL;
1312 	  ELSIF(p_x_revision_tbl(i).attribute14 IS NOT NULL) THEN
1313 	 	l_revision_info.attribute14 := p_x_revision_tbl(i).attribute14;
1314           END IF;
1315 
1316 	  IF(p_x_revision_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
1317 		l_revision_info.attribute15 := NULL;
1318 	  ELSIF(p_x_revision_tbl(i).attribute15 IS NOT NULL) THEN
1319 	 	l_revision_info.attribute15 := p_x_revision_tbl(i).attribute15;
1320           END IF;
1321 
1322 
1323 	  /*
1324 	  l_revision_info.attribute_category := p_x_revision_tbl(i).attribute_category;
1325           l_revision_info.attribute1 := p_x_revision_tbl(i).attribute1;
1326           l_revision_info.attribute2 := p_x_revision_tbl(i).attribute2;
1327           l_revision_info.attribute3 := p_x_revision_tbl(i).attribute3;
1328           l_revision_info.attribute4 := p_x_revision_tbl(i).attribute4;
1329           l_revision_info.attribute5 := p_x_revision_tbl(i).attribute5;
1330           l_revision_info.attribute6 := p_x_revision_tbl(i).attribute6;
1331           l_revision_info.attribute7 := p_x_revision_tbl(i).attribute7;
1332           l_revision_info.attribute8 := p_x_revision_tbl(i).attribute8;
1333           l_revision_info.attribute9 := p_x_revision_tbl(i).attribute9;
1334           l_revision_info.attribute10 := p_x_revision_tbl(i).attribute10;
1335           l_revision_info.attribute11 := p_x_revision_tbl(i).attribute11;
1336           l_revision_info.attribute12 := p_x_revision_tbl(i).attribute12;
1337           l_revision_info.attribute13 := p_x_revision_tbl(i).attribute13;
1338           l_revision_info.attribute14 := p_x_revision_tbl(i).attribute14;
1339           l_revision_info.attribute15 := p_x_revision_tbl(i).attribute15;*/
1340 	  --Changes for Bug 9532118 End
1341 
1342      /*Calling Table Handler: Prakash : 26-Dec-2001 */
1343      AHL_DOC_REVISIONS_PKG.UPDATE_ROW(X_DOC_REVISION_ID => p_x_revision_tbl(i).doc_revision_id,
1344                                       X_APPROVED_DATE => l_revision_info.approved_date,
1345                                       X_EFFECTIVE_DATE => l_revision_info.effective_date,
1346                                       X_OBSOLETE_DATE => l_revision_info.obsolete_date,
1347                                       X_ISSUE_DATE => l_revision_info.issue_date,
1348                                       X_RECEIVED_DATE => l_revision_info.received_date,
1349                                       X_URL => l_revision_info.url,
1350                                       X_MEDIA_TYPE_CODE => l_revision_info.media_type_code,
1351 				      --pekambar Enigma Phase II changes -- start
1352 				      X_ENIGMA_DOC_ID => l_revision_info.enigma_doc_id,
1353 				      X_ENIGMA_MODEL_CODE => l_revision_info.enigma_model_code,
1354 				      --pekambar Enigma Phase II changes -- end
1355                                       X_VOLUME => l_revision_info.volume,
1356                                       X_ISSUE => l_revision_info.issue,
1357                                       X_ISSUE_NUMBER => l_revision_info.issue_number,
1358                                       X_ATTRIBUTE_CATEGORY => l_revision_info.attribute_category,
1359                                       X_ATTRIBUTE1 => l_revision_info.attribute1,
1360                                       X_ATTRIBUTE2 => l_revision_info.attribute2,
1361                                       X_REVISION_DATE => l_revision_info.revision_date,
1362                                       X_ATTRIBUTE15 => l_revision_info.attribute15,
1363                                       X_ATTRIBUTE9 => l_revision_info.attribute9,
1364                                       X_ATTRIBUTE10 => l_revision_info.attribute10,
1365                                       X_ATTRIBUTE11 => l_revision_info.attribute11,
1366                                       X_ATTRIBUTE12 => l_revision_info.attribute12,
1367                                       X_ATTRIBUTE13 => l_revision_info.attribute13,
1368                                       X_DOCUMENT_ID => l_revision_info.document_id,
1369                                       X_REVISION_NO => l_revision_info.revision_no,
1370                                       X_APPROVED_BY_PARTY_ID => l_revision_info.approved_by_party_id,
1371                                       X_REVISION_TYPE_CODE => l_revision_info.revision_type_code,
1372                                       X_REVISION_STATUS_CODE => l_revision_info.revision_status_code,
1373                                       X_OBJECT_VERSION_NUMBER => l_revision_info.object_version_number+1,
1374                                       X_ATTRIBUTE3 => l_revision_info.attribute3,
1375                                       X_ATTRIBUTE4 => l_revision_info.attribute4,
1376                                       X_ATTRIBUTE5 => l_revision_info.attribute5,
1377                                       X_ATTRIBUTE6 => l_revision_info.attribute6,
1378                                       X_ATTRIBUTE7 => l_revision_info.attribute7,
1379                                       X_ATTRIBUTE8 => l_revision_info.attribute8,
1380                                       X_ATTRIBUTE14 => l_revision_info.attribute14,
1381                                       X_COMMENTS => l_comments,
1382                                       X_LAST_UPDATE_DATE => sysdate,
1383                                       X_LAST_UPDATED_BY => fnd_global.user_id,
1384                                       X_LAST_UPDATE_LOGIN => fnd_global.login_id);
1385 			-- FP for Bug 8410484
1386 			UPDATE_ASSOCIATIONS(NULL,
1387 					    p_document_id => p_x_revision_tbl(i).document_id);
1388 			--FP end
1389   -- This will be called to delete revision record, not supported in this phase
1390  ELSIF ((p_x_revision_tbl(i).doc_revision_id IS NOT NULL) AND
1391        NVL(p_x_revision_tbl(i).delete_flag, 'N') = 'Y' )
1392 
1393     THEN
1394        DELETE_REVISION
1395         (p_api_version      => 1.0               ,
1396          p_init_msg_list    => FND_API.G_TRUE      ,
1397          p_commit           => FND_API.G_FALSE     ,
1398          p_validate_only    => FND_API.G_TRUE      ,
1399          p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1400          p_x_revision_tbl   =>  p_x_revision_tbl   ,
1401          x_return_status    => x_return_status     ,
1402          x_msg_count        => x_msg_count         ,
1403          x_msg_data         => x_msg_data
1404          );
1405   END IF;
1406  END LOOP;
1407 END IF;
1408     -- Standard check of p_commit.
1409     IF FND_API.TO_BOOLEAN(p_commit) THEN
1410         COMMIT;
1411     END IF;
1412    -- Debug info
1413    IF G_DEBUG='Y' THEN
1414 		  AHL_DEBUG_PUB.debug( 'End of private api Modify Revision','+REV+');
1415 
1416 	END IF;
1417    -- Check if API is called in debug mode. If yes, disable debug.
1418    IF G_DEBUG='Y' THEN
1419 		  AHL_DEBUG_PUB.disable_debug;
1420 
1421 	END IF;
1422 EXCEPTION
1423  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1424     ROLLBACK TO modify_revision;
1425     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1426     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1427                                p_count => x_msg_count,
1428                                p_data  => x_msg_data);
1429 
1430         IF G_DEBUG='Y' THEN
1431             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'ERROR' );
1432             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Modify Revision','+REV+');
1433 
1434 
1435         -- Check if API is called in debug mode. If yes, disable debug.
1436             AHL_DEBUG_PUB.disable_debug;
1437 
1438 	END IF;
1439 
1440  WHEN FND_API.G_EXC_ERROR THEN
1441     ROLLBACK TO modify_revision;
1442     X_return_status := FND_API.G_RET_STS_ERROR;
1443     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1444                                p_count => x_msg_count,
1445                                p_data  => X_msg_data);
1446         -- Debug info.
1447         IF G_DEBUG='Y' THEN
1448             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
1449             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Modify Revision','+REV+');
1450 
1451 
1452         -- Check if API is called in debug mode. If yes, disable debug.
1453             AHL_DEBUG_PUB.disable_debug;
1454 
1455 	END IF;
1456 
1457  WHEN OTHERS THEN
1458     ROLLBACK TO modify_revision;
1459     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1460     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1461     THEN
1462     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DI_DOC_REVISION_PVT',
1463                             p_procedure_name  =>  'MODIFY_REVISION',
1464                             p_error_text      => SUBSTR(SQLERRM,1,240));
1465     END IF;
1466     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1467                                p_count => x_msg_count,
1468                                p_data  => X_msg_data);
1469 
1470         -- Debug info.
1471         IF G_DEBUG='Y' THEN
1472             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'SQL ERROR' );
1473             AHL_DEBUG_PUB.debug( 'ahl_di_doc_revision_pvt.Modify Revision','+REV+');
1474 
1475 
1476         -- Check if API is called in debug mode. If yes, disable debug.
1477             AHL_DEBUG_PUB.disable_debug;
1478 
1479 	END IF;
1480 
1481 END MODIFY_REVISION;
1482 --
1483 PROCEDURE DELETE_REVISION
1484 (
1485  p_api_version               IN     NUMBER    := 1.0               ,
1486  p_init_msg_list             IN     VARCHAR2  := FND_API.G_TRUE      ,
1487  p_commit                    IN     VARCHAR2  := FND_API.G_FALSE     ,
1488  p_validate_only             IN     VARCHAR2  := FND_API.G_TRUE      ,
1489  p_validation_level          IN     NUMBER    := FND_API.G_VALID_LEVEL_FULL,
1490  p_x_revision_tbl            IN     revision_tbl                     ,
1491  x_return_status                OUT NOCOPY VARCHAR2                         ,
1492  x_msg_count                    OUT NOCOPY NUMBER                           ,
1493  x_msg_data                     OUT NOCOPY VARCHAR2
1494  )
1495 IS
1496 -- to get the revision rec
1497 CURSOR get_revision_rec_b_info(c_doc_revision_id  NUMBER)
1498  IS
1499 SELECT ROWID,
1500        effective_date,
1501        obsolete_date,
1502        object_version_number
1503   FROM AHL_DOC_REVISIONS_B
1504  WHERE doc_revision_id = c_doc_revision_id
1505    FOR UPDATE OF object_version_number NOWAIT;
1506 --
1507 l_api_name         CONSTANT VARCHAR2(30) := 'DELETE_REVISION';
1508 l_api_version      CONSTANT NUMBER       := 1.0;
1509 l_rowid                     ROWID;
1510 l_object_version_number     NUMBER;
1511 l_effective_date            DATE;
1512 l_obsolete_date             DATE;
1513 BEGIN
1514     -- Standard Start of API savepoint
1515     SAVEPOINT delete_revision;
1516     -- Standard call to check for call compatibility.
1517    IF FND_API.to_boolean(p_init_msg_list)
1518    THEN
1519      FND_MSG_PUB.initialize;
1520    END IF;
1521     --  Initialize API return status to success
1522     x_return_status := 'S';
1523     -- Initialize message list if p_init_msg_list is set to TRUE.
1524    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1525                                       p_api_version,
1526                                       l_api_name,G_PKG_NAME)
1527    THEN
1528        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1529    END IF;
1530    --Start of API Body
1531    IF p_x_revision_tbl.COUNT > 0
1532    THEN
1533       FOR i IN p_x_revision_tbl.FIRST..p_x_revision_tbl.LAST
1534       LOOP
1535         OPEN get_revision_rec_b_info(p_x_revision_tbl(i).doc_revision_id);
1536         FETCH get_revision_rec_b_info INTO l_rowid,
1537                                            l_effective_date,
1538                                            l_obsolete_date,
1539                                            l_object_version_number;
1540         IF (get_revision_rec_b_info%NOTFOUND)
1541         THEN
1542            FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOC_REVI_RECORD_INVALID');
1543            FND_MSG_PUB.ADD;
1544         END IF;
1545         CLOSE get_revision_rec_b_info;
1546          -- Check for version number
1547         IF (l_object_version_number <> p_x_revision_tbl(i).object_version_number)
1548         THEN
1549            FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOC_REVI_RECORD_CHANGED');
1550            FND_MSG_PUB.ADD;
1551         END IF;
1552         -- Validate with end date
1553        IF (l_obsolete_date IS NOT NULL AND l_obsolete_date <= SYSDATE)
1554        THEN
1555           FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOC_REVI_RECORD_CLOSED');
1556           FND_MSG_PUB.ADD;
1557        END IF;
1558        IF (TRUNC(NVL(l_obsolete_date, SYSDATE)) >
1559           TRUNC(NVL(p_x_revision_tbl(i).obsolete_date,SYSDATE)))
1560        THEN
1561           FND_MESSAGE.SET_NAME('AHL','AHL_DI_OBSOLETE_DATE_INVALID');
1562           FND_MSG_PUB.ADD;
1563        END IF;
1564        -- Update the end date in subscriptions table
1565       UPDATE AHL_DOC_REVISIONS_B
1566          SET OBSOLETE_DATE = p_x_revision_tbl(i).obsolete_date
1567        WHERE ROWID = l_rowid;
1568   END LOOP;
1569 END IF;
1570     -- Standard check of p_commit.
1571     IF FND_API.TO_BOOLEAN(p_commit) THEN
1572         COMMIT;
1573     END IF;
1574 
1575 EXCEPTION
1576  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1577     ROLLBACK TO delete_revision;
1578     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1579     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1580                                p_count => x_msg_count,
1581                                p_data  => x_msg_data);
1582 
1583  WHEN FND_API.G_EXC_ERROR THEN
1584     ROLLBACK TO delete_revision;
1585     X_return_status := FND_API.G_RET_STS_ERROR;
1586     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1587                                p_count => x_msg_count,
1588                                p_data  => X_msg_data);
1589  WHEN OTHERS THEN
1590     ROLLBACK TO delete_revision;
1591     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1592     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1593     THEN
1594     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DOC_REVISIONS_PVT',
1595                             p_procedure_name  =>  'DELETE_REVISION',
1596                             p_error_text      => SUBSTR(SQLERRM,1,240));
1597     END IF;
1598     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1599                                p_count => x_msg_count,
1600                                p_data  => X_msg_data);
1601 
1602 END DELETE_REVISION;
1603 
1604 --FP #8410484
1605 PROCEDURE UPDATE_ASSOCIATIONS_CONCURRENT(
1606 	errbuf		OUT NOCOPY VARCHAR2,
1607 	retcode		OUT NOCOPY NUMBER,
1608 	p_api_version	IN  NUMBER       := 1.0
1609 )
1610 IS
1611 --Cursor to get ids of all the documents which are associated with use latest flag ='Yes'.
1612 CURSOR get_all_document_ids
1613 IS
1614 select distinct(asso.document_id),doc.document_no
1615 from ahl_doc_title_assos_b asso,ahl_documents_b doc
1616 where asso.use_latest_rev_flag='Y'
1617 and asso.document_id=doc.document_id;
1618 
1619 l_api_version		NUMBER	:=1.0;
1620 l_api_name		VARCHAR2(40) := 'UPDATE_ASSOCIATIONS_CONCURRENT';
1621 l_document_id		NUMBER;
1622 l_document_no		VARCHAR2(100);
1623 
1624 BEGIN
1625 	FND_MSG_PUB.Initialize;
1626 	IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1627         THEN
1628                 retcode := 2;
1629                 errbuf := FND_MSG_PUB.Get;
1630                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1631         END IF;
1632 	-- To change the status of the documents obsoleted using future obsolete date to 'obsolete' status.
1633 	update ahl_doc_revisions_b
1634 	set revision_status_code ='OBSOLETE'
1635 	where trunc(obsolete_date) <= trunc(sysdate)
1636 	and revision_status_code <> 'OBSOLETE';
1637 
1638 	fnd_file.put_line(fnd_file.log,'Associations for following documents are checked and updated appropriately');
1639 	OPEN get_all_document_ids;
1640 	LOOP
1641 		FETCH get_all_document_ids INTO l_document_id,l_document_no;
1642 		EXIT WHEN get_all_document_ids%NOTFOUND;
1643 		UPDATE_ASSOCIATIONS(NULL,l_document_id);
1644 		fnd_file.put_line(fnd_file.log,' document_no -> ' || l_document_no);
1645 	END LOOP;
1646 	CLOSE get_all_document_ids;
1647 	EXCEPTION
1648 	WHEN OTHERS THEN
1649 		retcode := 2;
1650 		FND_MESSAGE.SET_NAME('AHL','AHL_DI_CONC_UPDT_FAILED');
1651 		FND_MSG_PUB.ADD;
1652 		errbuf := FND_MSG_PUB.GET;
1653 		fnd_file.put_line(fnd_file.log, errbuf);
1654 
1655 END UPDATE_ASSOCIATIONS_CONCURRENT;
1656 END AHL_DI_DOC_REVISION_PVT;