DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_DI_SUBSCRIPTION_PVT

Source


1 PACKAGE BODY AHL_DI_SUBSCRIPTION_PVT AS
2 /* $Header: AHLVSUBB.pls 120.2 2006/02/07 03:49:26 sagarwal noship $ */
3 --
4 G_PKG_NAME  VARCHAR2(30)  := 'AHL_DI_SUBSCRIPTION_PVT';
5 --
6 
7 -- Validates the Subscriptions Info
8 /*---------------------------------------------------------*/
9 /* procedure name: validate_subscription(private procedure)*/
10 /* description :  Validation checks for before inserting   */
11 /*                new record as well before modification   */
12 /*                takes place                              */
13 /*---------------------------------------------------------*/
14 
15 G_DEBUG          VARCHAR2(1):=AHL_DEBUG_PUB.is_log_enabled;
16 PROCEDURE VALIDATE_SUBSCRIPTION
17 (
18  P_SUBSCRIPTION_ID         IN NUMBER     ,
19  P_DOCUMENT_ID             IN NUMBER     ,
20  P_STATUS_CODE             IN VARCHAR2   ,
21  P_REQUESTED_BY_PARTY_ID   IN NUMBER     ,
22  P_QUANTITY                IN NUMBER     ,
23  P_FREQUENCY_CODE          IN VARCHAR2   ,
24  P_SUBSCRIBED_FRM_PARTY_ID IN NUMBER     ,
25  P_START_DATE              IN DATE       ,
26  P_END_DATE                IN DATE       ,
27  P_MEDIA_TYPE_CODE         IN VARCHAR2   ,
28  P_SUBSCRIPTION_TYPE_CODE  IN VARCHAR2   ,
29  P_PURCHASE_ORDER_NO       IN VARCHAR2   ,
30  P_DELETE_FLAG             IN VARCHAR2   := 'N')
31 IS
32 
33 -- Cursor to retrieve the status code from fnd lookups table
34  CURSOR get_status_code(c_status_code VARCHAR2)
35   IS
36  SELECT lookup_code
37    FROM FND_LOOKUP_VALUES_VL
38   WHERE lookup_code = c_status_code
39     AND lookup_type = 'AHL_SUBSCRIBE_STATUS_TYPE'
40     AND sysdate between start_date_active
41     AND nvl(end_date_active,sysdate);
42 -- Cursor to retrieve the frequency from fnd lookups
43  CURSOR get_frequency_code(c_frequency_code VARCHAR2)
44   IS
45  SELECT lookup_code
46    FROM FND_LOOKUP_VALUES_VL
47   WHERE lookup_code = c_frequency_code
48     AND lookup_type = 'AHL_FREQUENCY_TYPE'
49     AND sysdate between start_date_active
50     AND nvl(end_date_active,sysdate);
51 -- Cursor to retrieve the sub type code from fnd lookups table
52  CURSOR get_sub_type_code(c_subscription_type_code VARCHAR2)
53   IS
54  SELECT lookup_code
55    FROM FND_LOOKUP_VALUES_VL
56   WHERE lookup_code = c_subscription_type_code
57     AND lookup_type = 'AHL_SUBSCRIPTION_TYPE'
58     AND sysdate between start_date_active
59     AND nvl(end_date_active,sysdate);
60 -- Cursor to retrieve the media type code from fnd lookups
61  CURSOR get_media_type_code(c_media_type_code VARCHAR2)
62   IS
63  SELECT lookup_code
64    FROM FND_LOOKUP_VALUES_VL
65   WHERE lookup_code = c_media_type_code
66     AND lookup_type = 'AHL_MEDIA_TYPE'
67     AND sysdate between start_date_active
68     AND nvl(end_date_active,sysdate);
69 
70 --Cursor is used to check the record exists in supplier documents
71 --Modified pjha 05-Jul-2002 for bug# 2448536: validating supplier: Begin
72 /*
73  CURSOR subc_from_pty_info(c_subscribed_frm_pty_id IN NUMBER)
74   IS
75  SELECT  'x'
76    FROM AHL_SUPPLIER_DOCUMENTS S
77   WHERE S.supplier_id = c_subscribed_frm_pty_id;
78 */
79 CURSOR subc_from_pty_info(c_subscribed_frm_pty_id IN NUMBER,
80                           c_document_id IN NUMBER)
81   IS
82  SELECT  'x'
83    FROM AHL_SUPPLIER_DOCUMENTS S
84   WHERE S.supplier_id = c_subscribed_frm_pty_id
85   AND S.document_id = c_document_id;
86 --Modified pjha 05-Jul-2002 for bug# 2448536: validating supplier: End
87 
88  -- Used to validate the document id
89  CURSOR check_doc_info(c_document_id  NUMBER)
90   IS
91  SELECT 'X'
92    FROM AHL_DOCUMENTS_B
93   WHERE document_id  = c_document_id;
94 -- Cursor to retrieve the exisiting subscription record from base table
95  CURSOR get_sub_rec_b_info (c_subscription_id NUMBER)
96   IS
97  SELECT document_id,
98         status_code,
99         requested_by_party_id,
100         quantity,
101         frequency_code,
102         subscribed_frm_party_id,
103         start_date,
104         end_date,
105         media_type_code
106    FROM AHL_SUBSCRIPTIONS_B
107   WHERE subscription_id = c_subscription_id;
108 -- Cursor is used to check for duplicate record
109  CURSOR dup_rec(c_document_id  NUMBER,
110                 c_requested_by_party_id NUMBER)
111   IS
112  SELECT 'X'
113    FROM AHL_SUBSCRIPTIONS_B
114   WHERE document_id           = c_document_id
115     AND requested_by_party_id = c_requested_by_party_id;
116  --
117 
118  -- Cursor is used to get requested by name given requested id
119   -- Perf Fixes for 4919023
120   /*
121   CURSOR get_requested_name(c_requested_by_party_id NUMBER)
122    IS
123   SELECT party_name
124     FROM ahl_hz_per_employees_v
125    WHERE party_id= c_requested_by_party_id;
126   */
127 
128   CURSOR get_requested_name_hz(c_requested_by_party_id NUMBER)
129    IS
130   SELECT PARTY_NAME
131     FROM HZ_PARTIES
132    WHERE party_id= c_requested_by_party_id
133      AND PARTY_TYPE ='PERSON';
134 
135   CURSOR get_requested_name_ppf(c_requested_by_party_id NUMBER)
136    IS
137   SELECT PPF.FULL_NAME
138     FROM PER_PEOPLE_F PPF, PER_PERSON_TYPES PPT
139    WHERE PPF.PERSON_ID= c_requested_by_party_id
140      AND TRUNC(SYSDATE) BETWEEN PPF.EFFECTIVE_START_DATE AND PPF.EFFECTIVE_END_DATE
141      AND NVL(PPF.CURRENT_EMPLOYEE_FLAG, 'X') = 'Y'
142      AND PPF.PERSON_TYPE_ID = PPT.PERSON_TYPE_ID
143      AND PPT.SYSTEM_PERSON_TYPE ='EMP';
144 
145 -- enhancement #2525108: lov for PO Number : pbarman april 2003
146 -- Get Puchase Order Number from PO_PURCHASE_ORDER_V
147    CURSOR for_ponumber_id(c_ponumber IN VARCHAR2)
148    IS
149    SELECT distinct segment1
150    FROM PO_HEADERS_V
151    WHERE nvl(approved_flag, 'N')='Y' and upper(segment1) = upper(c_ponumber);
152 --
153 
154   l_requested_by_name          VARCHAR2(301) := NULL;
155   l_api_name          CONSTANT VARCHAR2(30)    := 'VALIDATE_SUBSCRIPTION';
156   l_api_version       CONSTANT NUMBER          := 1.0;
157   l_dummy                      VARCHAR2(2000);
158   l_subscription_id            NUMBER;
159   l_document_id                NUMBER;
160   l_status_code                VARCHAR2(30);
161   l_requested_by_party_id      NUMBER;
162   l_quantity                   NUMBER;
163   l_frequency_code             VARCHAR2(30);
164   l_subscription_frm_party_id  NUMBER;
165   l_start_date                 DATE;
166   l_end_date                   DATE;
167   l_subscription_type_code     VARCHAR2(30);
168   l_media_type_code            VARCHAR2(30);
169   l_purchase_order_no          VARCHAR2(20);
170   l_prod_install_status        VARCHAR2(30);
171 
172   --
173 BEGIN
174    -- When the delte flag is 'YES' means either insert or update
175    --Enhancement nos #2034767 and #2205830: pbarman : April 2003
176    IF (NVL(p_delete_flag, 'N') = 'N' )
177    THEN
178     IF G_DEBUG='Y' THEN
179       AHL_DEBUG_PUB.enable_debug;
180     END IF;
181 
182     -- Perf Fixes for 4919023
183     BEGIN
184         IF G_DEBUG='Y' THEN
185            AHL_DEBUG_PUB.debug( 'Fetching Installation Status of PER','+SUB+');
186         END IF;
187         SELECT AHL_DI_DOC_INDEX_PVT.GET_PRODUCT_INSTALL_STATUS('PER')
188           INTO l_prod_install_status
189           FROM DUAL;
190     END;
191 
192       -- Debug info.
193     IF G_DEBUG='Y' THEN
194       AHL_DEBUG_PUB.debug( 'VALIDATION START');
195     END IF;
196    --When the process is update
197     IF p_subscription_id IS NOT NULL
198     THEN
199        OPEN get_sub_rec_b_info (p_subscription_id);
200        FETCH get_sub_rec_b_info INTO l_document_id,
201                                      l_status_code,
202                                      l_requested_by_party_id,
203                                      l_quantity,
204                                      l_frequency_code,
205                                      l_subscription_frm_party_id,
206                                      l_start_date,
207                                      l_end_date,
208                                      l_media_type_code;
209        CLOSE get_sub_rec_b_info;
210     END IF;
211     --
212     IF p_document_id IS NOT NULL
213     THEN
214         l_document_id := p_document_id;
215     END IF;
216     --
217     IF p_status_code IS NOT NULL
218     THEN
219         l_status_code := p_status_code;
220     END IF;
221     --
222     IF p_requested_by_party_id IS NOT NULL
223     THEN
224         l_requested_by_party_id := p_requested_by_party_id;
225     END IF;
226     --
227     IF p_quantity IS NOT NULL
228     THEN
229         l_quantity := p_quantity;
230     END IF;
231     --
232     IF p_frequency_code IS NOT NULL
233     THEN
234         l_frequency_code := p_frequency_code;
235     END IF;
236     --
237     IF p_start_date IS NOT NULL
238     THEN
239         l_start_date := p_start_date;
240     END IF;
241     --
242    IF p_end_date IS NOT NULL
243     THEN
244         l_end_date := p_end_date;
245     END IF;
246    --
247    IF p_media_type_code IS NOT NULL
248    THEN
249         l_media_type_code := p_media_type_code;
250     END IF;
251    --
252    IF p_subscribed_frm_party_id IS NOT NULL
253    THEN
254         l_subscription_frm_party_id := p_subscribed_frm_party_id;
255     END IF;
256 
257        l_subscription_id := p_subscription_id;
258     -- This condition checks Document Id, when the action is insert or update
259      IF ((p_subscription_id IS NULL AND
260         p_document_id IS NULL)  OR
261 
262         (p_subscription_id IS NOT NULL
263         AND l_document_id IS NULL))
264 
265      THEN
266         FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOCUMENT_ID_NULL');
267         FND_MSG_PUB.ADD;
268      END IF;
269      -- This condition checks Status Code, When the action is insert or update
270      IF ((p_subscription_id IS NULL AND
271         p_status_code IS NULL)  OR
272 
273         (p_subscription_id IS NOT NULL
274         AND l_status_code IS NULL))
275      THEN
276         FND_MESSAGE.SET_NAME('AHL','AHL_DI_STATUS_CODE_NULL');
277         FND_MSG_PUB.ADD;
278      END IF;
279 
280             -- Perf Fixes for 4919023
281             /*
282             OPEN get_requested_name(l_requested_by_party_id);
283             FETCH get_requested_name INTO l_requested_by_name;
284             CLOSE get_requested_name;
285             */
286 
287             IF l_prod_install_status IN ('N','L') THEN
288                OPEN get_requested_name_hz(l_requested_by_party_id);
289                FETCH get_requested_name_hz INTO l_requested_by_name;
290                CLOSE get_requested_name_hz;
291             ELSIF l_prod_install_status IN ('I','S') THEN
292                OPEN get_requested_name_ppf(l_requested_by_party_id);
293                FETCH get_requested_name_ppf INTO l_requested_by_name;
294                CLOSE get_requested_name_ppf;
295             END IF;
296 
297      -- This condition checks Quantity Field, When the action is insert or update
298      IF ((p_subscription_id IS NULL AND
299         p_quantity IS NULL) OR
300 
301         (p_subscription_id IS NOT NULL
302         AND p_quantity IS NULL))
303        THEN
304         FND_MESSAGE.SET_NAME('AHL','AHL_DI_QUAN_REQID_NULL');
305        FND_MESSAGE.SET_TOKEN('REQ',l_requested_by_name);
306        FND_MSG_PUB.ADD;
307      END IF;
308 
309 
310       -- Enhancement #2525108: check PO Number against PO Numbers in PO_PURCHASE_ORDER_V: pbarman april 2003
311 
312      IF p_purchase_order_no IS NOT NULL
313      THEN
314 
315      IF ahl_di_doc_index_pvt.get_product_install_status('PO') in ('I','S')THEN
316            OPEN for_ponumber_id(p_purchase_order_no);
317        FETCH for_ponumber_id INTO l_purchase_order_no;
318        IF for_ponumber_id%NOTFOUND THEN
319           FND_MESSAGE.SET_NAME('AHL','AHL_DI_PO_NUM_NOT_EXISTS');
320           FND_MSG_PUB.ADD;
321        END IF;
322        CLOSE for_ponumber_id;
323       END IF;
324      END IF;
325      -- Checks for Valid  Subscription from party id, Record should exist in supplier
326      -- documents table
327      --Modified pjha 12-Jul-2002 added end_date conditions to do the validation
328      --only in the case of active subscriptions: Begin
329           --IF (l_subscription_frm_party_id IS NOT NULL AND
330           --    l_subscription_frm_party_id IS NOT NULL)
331           IF (l_subscription_frm_party_id IS NOT NULL AND
332               (p_end_date IS NULL OR
333               p_end_date >= TRUNC(sysdate)))
334 
335      --Modified pjha 12-Jul-2002 added end_date conditions to do the validation
336      --only in the case of active subscriptions: End
337      THEN
338          --Modified pjha 05-Jul-2002 for bug# 2448536: validating supplier: Begin
339          --OPEN subc_from_pty_info(l_subscription_frm_party_id);
340          OPEN subc_from_pty_info(l_subscription_frm_party_id,
341                                  l_document_id);
342          --Modified pjha 05-Jul-2002 for bug# 2448536: validating supplier: End
343          FETCH subc_from_pty_info INTO l_dummy;
344          IF subc_from_pty_info%NOTFOUND
345          THEN
346             FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUB_PTY_ID_INVALID');
347             FND_MSG_PUB.ADD;
348          END IF;
349          CLOSE subc_from_pty_info;
350       END IF;
351      --Validates Requested by
352      IF ((p_subscription_id IS NULL AND
353         p_requested_by_party_id IS NULL)
354         OR
355 
356         (p_subscription_id IS NOT NULL
357         AND l_requested_by_party_id IS NULL))
358      THEN
359 
360        FND_MESSAGE.SET_NAME('AHL','AHL_DI_REQUES_BY_PARTY_ID_NULL');
361        FND_MSG_PUB.ADD;
362      END IF;
363    -- Validates the Quantity Field
364    IF p_quantity IS NOT NULL
365       OR
366       l_quantity IS NOT NULL
367    THEN
368      IF(p_quantity <= 0 or l_quantity <= 0) THEN
369        --FND_MESSAGE.SET_NAME('AHL','AHL_DI_QUANTITY_INVALID');
370 
371        FND_MESSAGE.SET_NAME('AHL','AHL_DI_QUAN_REQID_NULL');
372        FND_MESSAGE.SET_TOKEN('REQ',l_requested_by_name);
373        FND_MSG_PUB.ADD;
374      END IF;
375    END IF;
376    -- Validations for start date
377    IF (p_start_date IS NOT NULL
378       AND p_end_date IS NOT NULL)
379         OR
380       (l_start_date IS NOT NULL
381        AND l_end_date IS NOT NULL)
382 
383    THEN
384      --Modified pjha 12-Jun-2002 for date range check and for picking right message bug# 2314334 Begin
385           /*
386           IF(p_start_date > nvl(l_end_date, p_start_date))  OR
387             (l_start_date > nvl(l_end_date,l_start_date))
388             THEN
389             FND_MESSAGE.SET_NAME('AHL','AHL_DI_INVALID_DATE');
390             FND_MSG_PUB.ADD;
391           END IF;
392           */
393           IF(p_start_date >= nvl(l_end_date, p_start_date))  OR
394             (l_start_date >= nvl(l_end_date,l_start_date))
395             THEN
396             FND_MESSAGE.SET_NAME('AHL','AHL_DI_INVALID_DATE_RANGE');
397             FND_MSG_PUB.ADD;
398           END IF;
399 
400      --Modified pjha 12-Jun-2002 for date range check and for picking right message bug# 2314334 End
401   END IF;
402     -- Checks for existence of status code in fnd lookups
403     IF p_status_code IS NOT NULL
404     THEN
405        OPEN get_status_code(p_status_code);
406        FETCH get_status_code INTO l_dummy;
407        IF get_status_code%NOTFOUND
408        THEN
409           FND_MESSAGE.SET_NAME('AHL','AHL_DI_STATUS_CODE_NOT_EXISTS');
410           FND_MSG_PUB.ADD;
411         END IF;
412         CLOSE get_status_code;
413      END IF;
414     -- This condition checks the document id exists in ahl documents table
415     IF p_document_id IS NOT NULL
416     THEN
417        OPEN Check_doc_info(p_document_id);
418        FETCH Check_doc_info INTO l_dummy;
419        IF Check_doc_info%NOTFOUND
420        THEN
421           FND_MESSAGE.SET_NAME('AHL','AHL_DI_DOCUMENT_ID_NOT_EXISTS');
422           FND_MSG_PUB.ADD;
423         END IF;
424         CLOSE Check_doc_info;
425      END IF;
426      -- Checks for existence of status code in fnd lookups
427      IF p_media_type_code IS NOT NULL
428      THEN
429         OPEN get_media_type_code(p_media_type_code);
430         FETCH get_media_type_code INTO l_dummy;
431         IF get_media_type_code%NOTFOUND
432         THEN
433            FND_MESSAGE.SET_NAME('AHL','AHL_DI_MEDTYP_CODE_NOT_EXISTS');
434            FND_MSG_PUB.ADD;
435         END IF;
436         CLOSE get_media_type_code;
437       END IF;
438      -- Checks for existence of subscription type code in fnd lookups
439      IF p_subscription_type_code IS NOT NULL
440      THEN
441         OPEN get_sub_type_code(p_subscription_type_code);
442         FETCH get_sub_type_code INTO l_dummy;
443         IF get_sub_type_code%NOTFOUND
444         THEN
445            FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBTYP_CODE_NOT_EXISTS');
446            FND_MSG_PUB.ADD;
447         END IF;
448         CLOSE get_sub_type_code;
449       END IF;
450      -- Checks for existence of frequency code in fnd lookups
451      IF p_frequency_code IS NOT NULL
452      THEN
453         OPEN get_frequency_code(p_frequency_code);
454         FETCH get_frequency_code INTO l_dummy;
455         IF get_frequency_code%NOTFOUND
456         THEN
457            FND_MESSAGE.SET_NAME('AHL','AHL_DI_FREQCY_CODE_NOT_EXISTS');
458            FND_MSG_PUB.ADD;
459         END IF;
460         CLOSE get_frequency_code;
461       END IF;
462    -- Checks for Duplicate Record, when inserting new subscription record
463    IF p_subscription_id IS NULL
464    THEN
465        OPEN dup_rec(l_document_id ,
466                     l_requested_by_party_id);
467        FETCH dup_rec INTO l_dummy;
468           IF dup_rec%FOUND THEN
469           --FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBSC_DUP_RECORD');
470 
471           /*
472            OPEN get_requested_name(l_requested_by_party_id);
473            FETCH get_requested_name INTO l_requested_by_name;
474            CLOSE get_requested_name;
475           */
476 
477           FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBS_DUP_RECORD');
478           FND_MESSAGE.SET_TOKEN('REQID',l_requested_by_name);
479           FND_MSG_PUB.ADD;
480           END IF;
481        CLOSE dup_rec;
482     END IF;
483 END IF;
484 
485 END VALIDATE_SUBSCRIPTION;
486 /*------------------------------------------------------*/
487 /* procedure name: create_subscription                  */
488 /* description :  Creates new subscription record       */
489 /*                for an associated document            */
490 /*                                                      */
491 /*------------------------------------------------------*/
492 
493 PROCEDURE CREATE_SUBSCRIPTION
494 (
495  p_api_version                 IN      NUMBER    :=  1.0                ,
496  p_init_msg_list               IN      VARCHAR2  := FND_API.G_TRUE      ,
497  p_commit                      IN      VARCHAR2  := FND_API.G_FALSE     ,
498  p_validate_only               IN      VARCHAR2  := FND_API.G_TRUE      ,
499  p_validation_level            IN      NUMBER    := FND_API.G_VALID_LEVEL_FULL,
500  p_x_subscription_tbl          IN  OUT NOCOPY subscription_tbl          ,
501  x_return_status                   OUT NOCOPY VARCHAR2                         ,
502  x_msg_count                       OUT NOCOPY NUMBER                           ,
503  x_msg_data                        OUT NOCOPY VARCHAR2
504  )
505 IS
506  l_api_name        CONSTANT VARCHAR2(30) := 'CREATE_SUBSCRIPTION';
507  l_api_version     CONSTANT NUMBER       := 1.0;
508  l_num_rec                  NUMBER;
509  l_msg_count                NUMBER;
510  l_rowid                    ROWID;
511  l_subscription_id          NUMBER;
512  l_requested_by_party_id    NUMBER;
513  l_subscription_info        subscription_rec;
514  -- Added pjha 15-May-2002 for modifying 'subscribed to' Begin
515   l_subscribe_to_flag       VARCHAR2(1);
516  -- Added pjha 15-May-2002 for modifying 'subscribed to' End
517 BEGIN
518    -- Standard Start of API savepoint
519    SAVEPOINT create_subscription;
520 
521    -- Check if API is called in debug mode. If yes, enable debug.
522    IF G_DEBUG='Y' THEN
523           AHL_DEBUG_PUB.enable_debug;
524 
525     END IF;
526    -- Debug info.
527    IF G_DEBUG='Y' THEN
528        IF G_DEBUG='Y' THEN
529           AHL_DEBUG_PUB.debug( 'enter ahl_di_subscription_pvt.Create Subscription','+SUB+');
530 
531     END IF;
532     END IF;
533    -- Standard call to check for call compatibility.
534    IF FND_API.to_boolean(p_init_msg_list)
535    THEN
536      FND_MSG_PUB.initialize;
537    END IF;
538     --  Initialize API return status to success
539     x_return_status := FND_API.G_RET_STS_SUCCESS;
540    -- Initialize message list if p_init_msg_list is set to TRUE.
541    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
542                                       p_api_version,
543                                       l_api_name,G_PKG_NAME)
544    THEN
545        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
546    END IF;
547   --Start API Body
548   IF p_x_subscription_tbl.COUNT > 0
549   THEN
550      FOR i IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
551      LOOP
552         VALIDATE_SUBSCRIPTION
553         (
554         p_subscription_id         => p_x_subscription_tbl(i).subscription_id,
555         p_document_id             =>p_x_subscription_tbl(i).document_id,
556         p_status_code             =>p_x_subscription_tbl(i).status_code,
557         p_requested_by_party_id   =>p_x_subscription_tbl(i).requested_by_party_id,
558         p_quantity                =>p_x_subscription_tbl(i).quantity,
559         p_frequency_code          =>p_x_subscription_tbl(i).frequency_code,
560         p_subscribed_frm_party_id =>p_x_subscription_tbl(i).subscribed_frm_party_id,
561         p_start_date              =>p_x_subscription_tbl(i).start_date,
562         p_end_date                =>p_x_subscription_tbl(i).end_date,
563         p_media_type_code         =>p_x_subscription_tbl(i).media_type_code,
564         p_subscription_type_code  =>p_x_subscription_tbl(i).subscription_type_code,
565         p_purchase_order_no       =>p_x_subscription_tbl(i).purchase_order_no,
566         p_delete_flag             =>p_x_subscription_tbl(i).delete_flag
567         );
568    END LOOP;
569    -- Standard call to get message count and if count is  get message info.
570    l_msg_count := FND_MSG_PUB.count_msg;
571 
572    IF l_msg_count > 0 THEN
573       X_msg_count := l_msg_count;
574       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
575       RAISE FND_API.G_EXC_ERROR;
576    END IF;
577 
578    FOR i IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
579    LOOP
580       IF  (p_x_subscription_tbl(i).subscription_id IS NULL)
581       THEN
582          -- These conditions are required for optional fields, Frequency code
583             l_subscription_info.frequency_code := p_x_subscription_tbl(i).frequency_code;
584          -- Subscribed from party id
585             l_subscription_info.subscribed_frm_party_id := p_x_subscription_tbl(i).subscribed_frm_party_id;
586 
587          -- Start Date
588          IF p_x_subscription_tbl(i).start_date IS NULL
589          THEN
590          --Modified pjha 03-Jul-2002 for making default start date: Begin
591             --l_subscription_info.start_date := null;
592             l_subscription_info.start_date := sysdate;
593          --Modified pjha 03-Jul-2002 for making default start date: End
594          ELSE
595             l_subscription_info.start_date := p_x_subscription_tbl(i).start_date;
596          END IF;
597             l_subscription_info.end_date := p_x_subscription_tbl(i).end_date;
598             l_subscription_info.purchase_order_no := p_x_subscription_tbl(i).purchase_order_no;
599             l_subscription_info.subscription_type_code := p_x_subscription_tbl(i).subscription_type_code;
600             l_subscription_info.media_type_code := p_x_subscription_tbl(i).media_type_code;
601             l_subscription_info.comments := p_x_subscription_tbl(i).comments;
602             l_subscription_info.attribute_category := p_x_subscription_tbl(i).attribute_category;
603             l_subscription_info.attribute1 := p_x_subscription_tbl(i).attribute1;
604             l_subscription_info.attribute2 := p_x_subscription_tbl(i).attribute2;
605             l_subscription_info.attribute3 := p_x_subscription_tbl(i).attribute3;
606             l_subscription_info.attribute4 := p_x_subscription_tbl(i).attribute4;
607             l_subscription_info.attribute5 := p_x_subscription_tbl(i).attribute5;
608             l_subscription_info.attribute6 := p_x_subscription_tbl(i).attribute6;
609             l_subscription_info.attribute7 := p_x_subscription_tbl(i).attribute7;
610             l_subscription_info.attribute8 := p_x_subscription_tbl(i).attribute8;
611             l_subscription_info.attribute9 := p_x_subscription_tbl(i).attribute9;
612             l_subscription_info.attribute10 := p_x_subscription_tbl(i).attribute10;
613             l_subscription_info.attribute11 := p_x_subscription_tbl(i).attribute11;
614             l_subscription_info.attribute12 := p_x_subscription_tbl(i).attribute12;
615             l_subscription_info.attribute13 := p_x_subscription_tbl(i).attribute13;
616             l_subscription_info.attribute14 := p_x_subscription_tbl(i).attribute14;
617             l_subscription_info.attribute15 := p_x_subscription_tbl(i).attribute15;
618          -- Retrive the subscription id from sequence
619     Select AHL_SUBSCRIPTIONS_B_S.Nextval Into
620     l_subscription_id from dual;
621 /*-------------------------------------------------------- */
622 /* procedure name: AHL_SUBSCRIPTIONS_PKG.INSERT_ROW        */
623 /* description   :  Added by Senthil to call Table Handler */
624 /*      Date     : Dec 31 2001                             */
625 /*---------------------------------------------------------*/
626     -- Insert the new record into subscriptions table and trans table
627     AHL_SUBSCRIPTIONS_PKG.INSERT_ROW (
628         X_ROWID             =>  l_rowid,
629         X_SUBSCRIPTION_ID       =>  l_subscription_id,
630         X_ATTRIBUTE5            =>  l_subscription_info.attribute5,
631         X_DOCUMENT_ID           =>  p_x_subscription_tbl(i).document_id,
632         X_REQUESTED_BY_PARTY_ID     =>  p_x_subscription_tbl(i).requested_by_party_id,
633         X_ATTRIBUTE6            =>  l_subscription_info.attribute6,
634         X_ATTRIBUTE7            =>  l_subscription_info.attribute7,
635         X_ATTRIBUTE8            =>  l_subscription_info.attribute8,
636         X_ATTRIBUTE9            =>  l_subscription_info.attribute9,
637         X_ATTRIBUTE10           =>  l_subscription_info.attribute10,
638         X_ATTRIBUTE11           =>  l_subscription_info.attribute11,
639         X_ATTRIBUTE12           =>  l_subscription_info.attribute12,
640         X_ATTRIBUTE13           =>  l_subscription_info.attribute13,
641         X_ATTRIBUTE14           =>  l_subscription_info.attribute14,
642         X_ATTRIBUTE_CATEGORY        =>  l_subscription_info.attribute_category,
643         X_ATTRIBUTE1            =>  l_subscription_info.attribute1,
644         X_ATTRIBUTE2            =>  l_subscription_info.attribute2,
645         X_ATTRIBUTE3            =>  l_subscription_info.attribute3,
646         X_ATTRIBUTE4            =>  l_subscription_info.attribute4,
647         X_OBJECT_VERSION_NUMBER     =>  1,
648         X_ATTRIBUTE15           =>  l_subscription_info.attribute15,
649         X_SUBSCRIBED_FRM_PARTY_ID   =>  l_subscription_info.subscribed_frm_party_id,
650         X_QUANTITY          =>  p_x_subscription_tbl(i).quantity,
651         X_STATUS_CODE           =>  p_x_subscription_tbl(i).status_code,
652         X_PURCHASE_ORDER_NO     =>  l_subscription_info.purchase_order_no,
653         X_FREQUENCY_CODE        =>  l_subscription_info.frequency_code,
654         X_SUBSCRIPTION_TYPE_CODE    =>  l_subscription_info.subscription_type_code,
655         X_MEDIA_TYPE_CODE       =>  l_subscription_info.media_type_code,
656         X_START_DATE            =>  l_subscription_info.start_date,
657         X_END_DATE          =>  l_subscription_info.end_date,
658         X_COMMENTS          =>  l_subscription_info.comments,
659         X_CREATION_DATE         =>  sysdate,
660         X_CREATED_BY            =>  fnd_global.user_id,
661         X_LAST_UPDATE_DATE      =>  sysdate,
662         X_LAST_UPDATED_BY       =>  fnd_global.user_id,
663         X_LAST_UPDATE_LOGIN     =>  fnd_global.login_id
664         ) ;
665 /*
666     -- Insert the new record into subscriptions table
667     INSERT INTO AHL_SUBSCRIPTIONS_B
668                 (
669                  SUBSCRIPTION_ID,
670                  DOCUMENT_ID,
671                  STATUS_CODE,
672                  REQUESTED_BY_PARTY_ID,
673                  QUANTITY,
674                  FREQUENCY_CODE,
675                  SUBSCRIBED_FRM_PARTY_ID,
676                  START_DATE,
677                  END_DATE,
678                  PURCHASE_ORDER_NO,
679                  SUBSCRIPTION_TYPE_CODE,
680                  MEDIA_TYPE_CODE,
681                  OBJECT_VERSION_NUMBER,
682                  ATTRIBUTE_CATEGORY,
683                  ATTRIBUTE1,
684                  ATTRIBUTE2,
685                  ATTRIBUTE3,
686                  ATTRIBUTE4,
687                  ATTRIBUTE5,
688                  ATTRIBUTE6,
689                  ATTRIBUTE7,
690                  ATTRIBUTE8,
691                  ATTRIBUTE9,
692                  ATTRIBUTE10,
693                  ATTRIBUTE11,
694                  ATTRIBUTE12,
695                  ATTRIBUTE13,
696                  ATTRIBUTE14,
697                  ATTRIBUTE15,
698                  LAST_UPDATE_DATE,
699                  LAST_UPDATED_BY,
700                  CREATION_DATE,
701                  CREATED_BY,
702                  LAST_UPDATE_LOGIN
703                 )
704       VALUES
705                (
706                  l_subscription_id,
707                  p_x_subscription_tbl(i).document_id,
708                  p_x_subscription_tbl(i).status_code,
709                  p_x_subscription_tbl(i).requested_by_party_id,
710                  p_x_subscription_tbl(i).quantity,
711                  l_subscription_info.frequency_code,
712                  l_subscription_info.subscribed_frm_party_id,
713                  l_subscription_info.start_date,
714                  l_subscription_info.end_date,
715                  l_subscription_info.purchase_order_no,
716                  l_subscription_info.subscription_type_code,
717                  l_subscription_info.media_type_code,
718                  1,
719                  l_subscription_info.attribute_category,
720                  l_subscription_info.attribute1,
721                  l_subscription_info.attribute2,
722                  l_subscription_info.attribute3,
723                  l_subscription_info.attribute4,
724                  l_subscription_info.attribute5,
725                  l_subscription_info.attribute6,
726                  l_subscription_info.attribute7,
727                  l_subscription_info.attribute8,
728                  l_subscription_info.attribute9,
729                  l_subscription_info.attribute10,
730                  l_subscription_info.attribute11,
731                  l_subscription_info.attribute12,
732                  l_subscription_info.attribute13,
733                  l_subscription_info.attribute14,
734                  l_subscription_info.attribute15,
735                  sysdate,
736                  fnd_global.user_id,
737                  sysdate,
738                  fnd_global.user_id,
739                  fnd_global.login_id
740                 );
741        p_x_subscription_tbl(i).subscription_id := l_subscription_id;
742        p_x_subscription_tbl(i).object_version_number := 1;
743        -- Insert the record into trans table
744        INSERT INTO AHL_SUBSCRIPTIONS_TL
745                   (
746                    SUBSCRIPTION_ID,
747                    LAST_UPDATE_DATE,
748                    LAST_UPDATED_BY,
749                    CREATION_DATE,
750                    CREATED_BY,
751                    COMMENTS,
752                    LANGUAGE,
753                    SOURCE_LANG
754                   )
755           SELECT
756                   l_subscription_id,
757                   sysdate,
758                   fnd_global.user_id,
759                   sysdate,
760                   fnd_global.user_id,
761                   l_subscription_info.comments,
762                   L.LANGUAGE_CODE,
763                   userenv('LANG')
764              FROM FND_LANGUAGES L
765             WHERE L.INSTALLED_FLAG IN ('I','B')
766               AND NOT EXISTS
767            (SELECT NULL
768               FROM AHL_SUBSCRIPTIONS_TL T
769              WHERE T.subscription_id = l_subscription_id
770                AND T.language = L.LANGUAGE_CODE);
771 */
772 
773        -- Added pjha 15-May-2002 for modifying 'subscribed to' Begin
774 
775               --Check whether Subscribed To is Yes or No in AHL_DOCUMENTS_B
776               SELECT subscribe_to_flag
777               INTO l_subscribe_to_flag
778               FROM AHL_DOCUMENTS_B
779               WHERE document_id =  p_x_subscription_tbl(i).document_id;
780 
781               --If Subscribed To  is no, then make it yes
782               IF l_subscribe_to_flag = 'N' THEN
783                 UPDATE AHL_DOCUMENTS_B
784                 SET subscribe_to_flag = 'Y'
785                 WHERE document_id =  p_x_subscription_tbl(i).document_id;
786               END IF;
787 
788        -- Added pjha 15-May-2002 for modifying 'subscribed to' End
789 
790        --Assign the values
791        p_x_subscription_tbl(i).subscription_id := l_subscription_id;
792        p_x_subscription_tbl(i).object_version_number := 1;
793        --
794        l_msg_count := FND_MSG_PUB.count_msg;
795       IF l_msg_count > 0 THEN
796          X_msg_count := l_msg_count;
797          X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
798        RAISE FND_API.G_EXC_ERROR;
799       END IF;
800     END IF;
801   END LOOP;
802 END IF;
803    -- Standard check of p_commit.
804    IF FND_API.TO_BOOLEAN(p_commit) THEN
805       COMMIT;
806    END IF;
807    -- Debug info
808    IF G_DEBUG='Y' THEN
809           AHL_DEBUG_PUB.debug( 'End of private api Create Subscription','+SUB+');
810 
811     END IF;
812    -- Check if API is called in debug mode. If yes, disable debug.
813    IF G_DEBUG='Y' THEN
814           AHL_DEBUG_PUB.disable_debug;
815 
816     END IF;
817 
818 EXCEPTION
819  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
820     ROLLBACK TO create_subscription;
821     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
822     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
823                                p_count => x_msg_count,
824                                p_data  => x_msg_data);
825 
826         IF G_DEBUG='Y' THEN
827             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'ERROR' );
828             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Create Subscription','+SUB+');
829 
830 
831         -- Check if API is called in debug mode. If yes, disable debug.
832             AHL_DEBUG_PUB.disable_debug;
833 
834     END IF;
835 
836  WHEN FND_API.G_EXC_ERROR THEN
837     ROLLBACK TO create_subscription;
838     X_return_status := FND_API.G_RET_STS_ERROR;
839     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
840                                p_count => x_msg_count,
841                                p_data  => X_msg_data);
842         -- Debug info.
843         IF G_DEBUG='Y' THEN
844             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
845             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Create Subscription','+SUB+');
846 
847 
848         -- Check if API is called in debug mode. If yes, disable debug.
849             AHL_DEBUG_PUB.disable_debug;
850 
851     END IF;
852 
853 
854  WHEN DUP_VAL_ON_INDEX THEN
855     ROLLBACK TO create_subscription;
856     X_return_status := FND_API.G_RET_STS_ERROR;
857          FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBSC_DUP_RECORD');
858          FND_MSG_PUB.ADD;
859         -- Check if API is called in debug mode. If yes, disable debug.
860         IF G_DEBUG='Y' THEN
861           AHL_DEBUG_PUB.disable_debug;
862 
863     END IF;
864 
865 
866  WHEN OTHERS THEN
867     ROLLBACK TO create_subscription;
868     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
869     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
870     THEN
871     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DI_SUBSCRIPTION_PVT',
872                             p_procedure_name  =>  'CREATE_SUBSCRIPTION',
873                             p_error_text      => SUBSTR(SQLERRM,1,240));
874     END IF;
875     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
876                                p_count => x_msg_count,
877                                p_data  => X_msg_data);
878         -- Debug info.
879         IF G_DEBUG='Y' THEN
880             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'SQL ERROR' );
881             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Create Subscription','+SUB+');
882 
883 
884         -- Check if API is called in debug mode. If yes, disable debug.
885             AHL_DEBUG_PUB.disable_debug;
886 
887     END IF;
888 
889 END CREATE_SUBSCRIPTION;
890 /*------------------------------------------------------*/
891 /* procedure name: modify_subscription                  */
892 /* description :  Update the existing subscription recor*/
893 /*                d and removes the subscription record */
894 /*                for an associated document            */
895 /*                                                      */
896 /*------------------------------------------------------*/
897 PROCEDURE MODIFY_SUBSCRIPTION
898 (
899  p_api_version                IN      NUMBER    :=  1.0               ,
900  p_init_msg_list              IN      VARCHAR2  := FND_API.G_TRUE      ,
901  p_commit                     IN      VARCHAR2  := FND_API.G_FALSE     ,
902  p_validate_only              IN      VARCHAR2  := FND_API.G_TRUE      ,
903  p_validation_level           IN      NUMBER    := FND_API.G_VALID_LEVEL_FULL,
904  p_x_subscription_tbl         IN  OUT NOCOPY subscription_tbl          ,
905  x_return_status                  OUT NOCOPY VARCHAR2                         ,
906  x_msg_count                      OUT NOCOPY NUMBER                           ,
907  x_msg_data                       OUT NOCOPY VARCHAR2
908 )
909 IS
910 -- Cursor to retrieve the existing subscriptions record
911 CURSOR get_sub_rec_b_info(c_subscription_id  NUMBER)
912  IS
913 SELECT ROWID row_id,
914        document_id,
915        status_code,
916        requested_by_party_id,
917        quantity,
918        frequency_code,
919        subscribed_frm_party_id,
920        start_date,
921        end_date,
922        purchase_order_no,
923        subscription_type_code,
924        media_type_code,
925        object_version_number,
926        attribute_category,
927        attribute1,
928        attribute2,
929        attribute3,
930        attribute4,
931        attribute5,
932        attribute6,
933        attribute7,
934        attribute8,
935        attribute9,
936        attribute10,
937        attribute11,
938        attribute12,
939        attribute13,
940        attribute14,
941        attribute15
942   FROM AHL_SUBSCRIPTIONS_B
943  WHERE subscription_id = c_subscription_id
944    FOR UPDATE OF object_version_number NOWAIT;
945 -- Cursor to retrieve the record from trans table
946 CURSOR get_sub_rec_tl_info(c_subscription_id NUMBER)
947  IS
948 SELECT ROWID,
949        comments
950   FROM AHL_SUBSCRIPTIONS_TL
951  WHERE subscription_id = c_subscription_id
952    FOR UPDATE OF subscription_id NOWAIT;
953 
954 -- modified the code for fixing Bug 2183529
955 -- Cursor to check for old subscriptions
956 CURSOR get_old_sub ( c_document_id  NUMBER,
957                      c_requested_by_party_id NUMBER)
958 IS
959 SELECT subscription_id
960 FROM AHL_SUBSCRIPTIONS_B
961 WHERE   document_id           = c_document_id AND
962     requested_by_party_id = c_requested_by_party_id;
963 
964 --
965 --added pjha 28-Jun-2002 for proper update of Subscribed to
966 --Cursor to get maximum end_date for subscriptions for the document
967 CURSOR get_max_end_date(c_document_id NUMBER)
968 IS
969 SELECT MAX(NVL(end_date,SYSDATE))
970 FROM AHL_SUBSCRIPTIONS_B
971 WHERE document_id = c_document_id;
972 
973 --
974 -- Cursor is used to get requested by name given requested id
975   -- Perf Fixes for 4919023
976   /*
977   CURSOR get_requested_name(c_requested_by_party_id NUMBER)
978    IS
979   SELECT party_name
980     FROM ahl_hz_per_employees_v
981    WHERE party_id= c_requested_by_party_id;
982   */
983 
984   CURSOR get_requested_name_hz(c_requested_by_party_id NUMBER)
985    IS
986   SELECT PARTY_NAME
987     FROM HZ_PARTIES
988    WHERE party_id= c_requested_by_party_id
989      AND PARTY_TYPE ='PERSON';
990 
991   CURSOR get_requested_name_ppf(c_requested_by_party_id NUMBER)
992    IS
993   SELECT PPF.FULL_NAME
994     FROM PER_PEOPLE_F PPF, PER_PERSON_TYPES PPT
995    WHERE PPF.PERSON_ID= c_requested_by_party_id
996      AND TRUNC(SYSDATE) BETWEEN PPF.EFFECTIVE_START_DATE AND PPF.EFFECTIVE_END_DATE
997      AND NVL(PPF.CURRENT_EMPLOYEE_FLAG, 'X') = 'Y'
998      AND PPF.PERSON_TYPE_ID = PPT.PERSON_TYPE_ID
999      AND PPT.SYSTEM_PERSON_TYPE ='EMP';
1000 
1001 
1002 --
1003 l_requested_by_party_id      NUMBER;
1004 l_requested_by_name   VARCHAR2(301) := NULL;
1005 l_api_name       CONSTANT VARCHAR2(30)    := 'MODIFY_SUBSCRIPTION';
1006 l_api_version    CONSTANT NUMBER          := 1.0;
1007 l_comments                VARCHAR2(2000);
1008 l_msg_count               NUMBER;
1009 l_num_rec                 NUMBER;
1010 l_rowid                   ROWID;
1011 l_language                VARCHAR2(4);
1012 l_source_lang             VARCHAR2(4);
1013 l_subscription_info       get_sub_rec_b_info%ROWTYPE;
1014 l_old_sub_id              NUMBER;
1015 l_dup_flag                VARCHAR2(1) := 'N';
1016 l_prod_install_status     VARCHAR2(30);
1017 
1018 -- Added pjha 28-Jun-2002 for bug#2438718: Begin
1019 l_subscription_tbl subscription_tbl;
1020 -- Added pjha 28-Jun-2002 for bug#2438718: End
1021 
1022 -- Added pjha 28-Jun-2002 for modifying 'subscribed to' Begin
1023 l_end_date DATE;
1024 -- Added pjha 28-Jun-2002 for modifying 'subscribed to' End
1025 
1026 --
1027  BEGIN
1028     -- Standard Start of API savepoint
1029     SAVEPOINT modify_subscription;
1030    -- Check if API is called in debug mode. If yes, enable debug.
1031    IF G_DEBUG='Y' THEN
1032           AHL_DEBUG_PUB.enable_debug;
1033 
1034     END IF;
1035    -- Debug info.
1036        IF G_DEBUG='Y' THEN
1037           AHL_DEBUG_PUB.debug( 'enter ahl_di_subscription_pvt.Modify Subscription','+SUB+');
1038        END IF;
1039     -- Standard call to check for call compatibility.
1040    IF FND_API.to_boolean(p_init_msg_list)
1041    THEN
1042      FND_MSG_PUB.initialize;
1043    END IF;
1044     --  Initialize API return status to success
1045     x_return_status := 'S';
1046     -- Initialize message list if p_init_msg_list is set to TRUE.
1047    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1048                                       p_api_version,
1049                                       l_api_name,G_PKG_NAME)
1050    THEN
1051        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1052    END IF;
1053 
1054    -- Start API Body
1055 
1056    -- Perf Fixes for 4919023
1057    BEGIN
1058        IF G_DEBUG='Y' THEN
1059          AHL_DEBUG_PUB.debug( 'Fetching Installation Status of PER','+SUB+');
1060        END IF;
1061        SELECT AHL_DI_DOC_INDEX_PVT.GET_PRODUCT_INSTALL_STATUS('PER')
1062          INTO l_prod_install_status
1063          FROM DUAL;
1064    END;
1065 
1066    IF p_x_subscription_tbl.COUNT > 0
1067    THEN
1068 
1069       FOR i IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
1070       LOOP
1071       --Enhancement nos #2034767 and #2205830: pbarman : April 2003
1072          IF (NVL(p_x_subscription_tbl(i).delete_flag, 'N') = 'N' )
1073      THEN
1074 
1075         -- Calling validate subscriptions
1076         VALIDATE_SUBSCRIPTION
1077          (
1078           p_subscription_id         => p_x_subscription_tbl(i).subscription_id,
1079           p_document_id             =>p_x_subscription_tbl(i).document_id,
1080           p_status_code             =>p_x_subscription_tbl(i).status_code,
1081           p_requested_by_party_id   =>p_x_subscription_tbl(i).requested_by_party_id,
1082           p_quantity                =>p_x_subscription_tbl(i).quantity,
1083           p_frequency_code          =>p_x_subscription_tbl(i).frequency_code,
1084           p_subscribed_frm_party_id =>p_x_subscription_tbl(i).subscribed_frm_party_id,
1085           p_start_date              =>p_x_subscription_tbl(i).start_date,
1086           p_end_date                =>p_x_subscription_tbl(i).end_date,
1087           p_media_type_code         =>p_x_subscription_tbl(i).media_type_code,
1088           p_subscription_type_code  =>p_x_subscription_tbl(i).subscription_type_code,
1089           p_purchase_order_no       =>p_x_subscription_tbl(i).purchase_order_no,
1090           p_delete_flag             =>p_x_subscription_tbl(i).delete_flag
1091          );
1092 
1093 
1094 
1095          OPEN get_old_sub (p_x_subscription_tbl(i).document_id,
1096                    p_x_subscription_tbl(i).requested_by_party_id);
1097      FETCH get_old_sub INTO l_old_sub_id;
1098      IF (l_old_sub_id <> p_x_subscription_tbl(i).subscription_id) THEN
1099         --FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBSC_DUP_RECORD');
1100      FOR j IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
1101      LOOP
1102         IF ((l_old_sub_id = p_x_subscription_tbl(j).subscription_id) AND (l_old_sub_id <> p_x_subscription_tbl(i).subscription_id)) THEN
1103           l_dup_flag := 'Y';
1104           IF(p_x_subscription_tbl(i).requested_by_party_id = p_x_subscription_tbl(j).requested_by_party_id) THEN
1105 
1106                     -- Perf Fixes for 4919023
1107                     /*
1108                    OPEN get_requested_name(p_x_subscription_tbl(i).requested_by_party_id);
1109                    FETCH get_requested_name INTO l_requested_by_name;
1110                    CLOSE get_requested_name;
1111                     */
1112 
1113                     IF l_prod_install_status IN ('N','L') THEN
1114                        OPEN get_requested_name_hz(p_x_subscription_tbl(i).requested_by_party_id);
1115                        FETCH get_requested_name_hz INTO l_requested_by_name;
1116                        CLOSE get_requested_name_hz;
1117                     ELSIF l_prod_install_status IN ('I','S') THEN
1118                        OPEN get_requested_name_ppf(p_x_subscription_tbl(i).requested_by_party_id);
1119                        FETCH get_requested_name_ppf INTO l_requested_by_name;
1120                        CLOSE get_requested_name_ppf;
1121                     END IF;
1122 
1123                   FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBS_DUP_RECORD');
1124                   FND_MESSAGE.SET_TOKEN('REQID',l_requested_by_name);
1125                   FND_MSG_PUB.ADD;
1126          END IF;
1127        END IF;
1128      END LOOP;
1129      IF (l_dup_flag = 'N') THEN
1130         -- Perf Fixes for 4919023
1131         /*
1132         OPEN get_requested_name(p_x_subscription_tbl(i).requested_by_party_id);
1133         FETCH get_requested_name INTO l_requested_by_name;
1134         CLOSE get_requested_name;
1135         */
1136 
1137         IF l_prod_install_status IN ('N','L') THEN
1138            OPEN get_requested_name_hz(p_x_subscription_tbl(i).requested_by_party_id);
1139            FETCH get_requested_name_hz INTO l_requested_by_name;
1140            CLOSE get_requested_name_hz;
1141         ELSIF l_prod_install_status IN ('I','S') THEN
1142            OPEN get_requested_name_ppf(p_x_subscription_tbl(i).requested_by_party_id);
1143            FETCH get_requested_name_ppf INTO l_requested_by_name;
1144            CLOSE get_requested_name_ppf;
1145         END IF;
1146 
1147         FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUBS_DUP_RECORD');
1148             FND_MESSAGE.SET_TOKEN('REQID',l_requested_by_name);
1149         FND_MSG_PUB.ADD;
1150      END IF;
1151      l_dup_flag := 'N';
1152      END IF;
1153      CLOSE get_old_sub;
1154      END IF;
1155       END LOOP;
1156    --End of Validations
1157    -- Standard call to get message count
1158    l_msg_count := FND_MSG_PUB.count_msg;
1159 
1160    IF l_msg_count > 0 THEN
1161       X_msg_count := l_msg_count;
1162       X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1163       RAISE FND_API.G_EXC_ERROR;
1164    END IF;
1165    --Start of API Body
1166    FOR i IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
1167    LOOP
1168       --Retrieve the existing subscription record for passed subscription id
1169       OPEN get_sub_rec_b_info(p_x_subscription_tbl(i).subscription_id);
1170       FETCH get_sub_rec_b_info INTO l_subscription_info;
1171       CLOSE get_sub_rec_b_info;
1172       --Retrieves the existing tranlation record
1173       OPEN get_sub_rec_tl_info(p_x_subscription_tbl(i).subscription_id);
1174       FETCH get_sub_rec_tl_info INTO l_rowid,
1175                                      l_comments;
1176       CLOSE get_sub_rec_tl_info;
1177 
1178  --This is a fix  for  earlier bug when concurrent users are
1179  -- updating same record...02/05/02
1180     if (l_subscription_info.object_version_number <>p_x_subscription_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_subscription_tbl(i).subscription_id IS NOT NULL
1189       THEN
1190              l_subscription_info.status_code := p_x_subscription_tbl(i).status_code;
1191             l_subscription_info.requested_by_party_id := p_x_subscription_tbl(i).requested_by_party_id;
1192              l_subscription_info.quantity := p_x_subscription_tbl(i).quantity;
1193             l_subscription_info.frequency_code := p_x_subscription_tbl(i).frequency_code;
1194             l_subscription_info.subscribed_frm_party_id := p_x_subscription_tbl(i).subscribed_frm_party_id;
1195             l_subscription_info.start_date := p_x_subscription_tbl(i).start_date;
1196             l_subscription_info.end_date := p_x_subscription_tbl(i).end_date;
1197             l_subscription_info.purchase_order_no := p_x_subscription_tbl(i).purchase_order_no;
1198             l_subscription_info.media_type_code := p_x_subscription_tbl(i).media_type_code;
1199             l_subscription_info.subscription_type_code := p_x_subscription_tbl(i).subscription_type_code;
1200             l_comments := p_x_subscription_tbl(i).comments;
1201             l_subscription_info.attribute_category := p_x_subscription_tbl(i).attribute_category;
1202             l_subscription_info.attribute1 := p_x_subscription_tbl(i).attribute1;
1203             l_subscription_info.attribute2 := p_x_subscription_tbl(i).attribute2;
1204             l_subscription_info.attribute3 := p_x_subscription_tbl(i).attribute3;
1205             l_subscription_info.attribute3 := p_x_subscription_tbl(i).attribute3;
1206             l_subscription_info.attribute4 := p_x_subscription_tbl(i).attribute4;
1207             l_subscription_info.attribute5 := p_x_subscription_tbl(i).attribute5;
1208             l_subscription_info.attribute6 := p_x_subscription_tbl(i).attribute6;
1209             l_subscription_info.attribute7 := p_x_subscription_tbl(i).attribute7;
1210             l_subscription_info.attribute8 := p_x_subscription_tbl(i).attribute8;
1211             l_subscription_info.attribute9 := p_x_subscription_tbl(i).attribute9;
1212             l_subscription_info.attribute10 := p_x_subscription_tbl(i).attribute10;
1213             l_subscription_info.attribute11 := p_x_subscription_tbl(i).attribute11;
1214             l_subscription_info.attribute12 := p_x_subscription_tbl(i).attribute12;
1215             l_subscription_info.attribute13 := p_x_subscription_tbl(i).attribute13;
1216             l_subscription_info.attribute14 := p_x_subscription_tbl(i).attribute14;
1217             l_subscription_info.attribute15 := p_x_subscription_tbl(i).attribute15;
1218 
1219 /*-------------------------------------------------------- */
1220 /* procedure name: AHL_SUBSCRIPTIONS_PKG.UPDATE_ROW        */
1221 /* description   :  Added by Senthil to call Table Handler */
1222 /*      Date     : Dec 31 2001                             */
1223 /*---------------------------------------------------------*/
1224          -- Updates subscriptions record and tranlation table
1225          --Enhancement nos #2034767 and #2205830: pbarman : April 2003
1226           IF (p_x_subscription_tbl(i).subscription_id IS NOT NULL AND
1227                       NVL(p_x_subscription_tbl(i).delete_flag, 'N') = 'N' )
1228      THEN
1229      AHL_SUBSCRIPTIONS_PKG.UPDATE_ROW (
1230           X_SUBSCRIPTION_ID         => p_x_subscription_tbl(i).subscription_id,
1231           X_ATTRIBUTE5          => l_subscription_info.attribute5,
1232           X_DOCUMENT_ID         => l_subscription_info.document_id,
1233           X_REQUESTED_BY_PARTY_ID   => l_subscription_info.requested_by_party_id,
1234           X_ATTRIBUTE6          => l_subscription_info.attribute6,
1235           X_ATTRIBUTE7          => l_subscription_info.attribute7,
1236           X_ATTRIBUTE8          => l_subscription_info.attribute8,
1237           X_ATTRIBUTE9          => l_subscription_info.attribute9,
1238           X_ATTRIBUTE10         => l_subscription_info.attribute10,
1239           X_ATTRIBUTE11         => l_subscription_info.attribute11,
1240           X_ATTRIBUTE12         => l_subscription_info.attribute12,
1241           X_ATTRIBUTE13         => l_subscription_info.attribute13,
1242           X_ATTRIBUTE14         => l_subscription_info.attribute14,
1243           X_ATTRIBUTE_CATEGORY      => l_subscription_info.attribute_category,
1244           X_ATTRIBUTE1          => l_subscription_info.attribute1,
1245           X_ATTRIBUTE2          => l_subscription_info.attribute2,
1246           X_ATTRIBUTE3          => l_subscription_info.attribute3,
1247           X_ATTRIBUTE4          => l_subscription_info.attribute4,
1248           X_OBJECT_VERSION_NUMBER   => l_subscription_info.object_version_number+1,
1249           X_ATTRIBUTE15         => l_subscription_info.attribute15,
1250           X_SUBSCRIBED_FRM_PARTY_ID     => l_subscription_info.subscribed_frm_party_id,
1251           X_QUANTITY            => l_subscription_info.quantity,
1252           X_STATUS_CODE         => l_subscription_info.status_code,
1253           X_PURCHASE_ORDER_NO       => l_subscription_info.purchase_order_no,
1254           X_FREQUENCY_CODE      => l_subscription_info.frequency_code,
1255           X_SUBSCRIPTION_TYPE_CODE  => l_subscription_info.subscription_type_code,
1256           X_MEDIA_TYPE_CODE         => l_subscription_info.media_type_code,
1257           X_START_DATE          => l_subscription_info.start_date,
1258           X_END_DATE            => l_subscription_info.end_date,
1259           X_COMMENTS            => l_comments,
1260           X_LAST_UPDATE_DATE        => sysdate,
1261           X_LAST_UPDATED_BY         => fnd_global.user_id,
1262           X_LAST_UPDATE_LOGIN       => fnd_global.login_id
1263         );
1264 /*
1265          -- Updates subscriptions record
1266 
1267 
1268           UPDATE AHL_SUBSCRIPTIONS_B
1269              SET document_id             = l_subscription_info.document_id,
1270                  status_code             = l_subscription_info.status_code,
1271                  requested_by_party_id   = l_subscription_info.requested_by_party_id,
1272                  quantity                = l_subscription_info.quantity,
1273                  frequency_code          = l_subscription_info.frequency_code,
1274                  subscribed_frm_party_id =l_subscription_info.subscribed_frm_party_id,
1275                  start_date              = l_subscription_info.start_date,
1276                  end_date                = l_subscription_info.end_date,
1277                  purchase_order_no       = l_subscription_info.purchase_order_no,
1278                  subscription_type_code  = l_subscription_info.subscription_type_code,
1279                  media_type_code         = l_subscription_info.media_type_code,
1280                  object_version_number   = l_subscription_info.object_version_number+1,
1281                  attribute_category      = l_subscription_info.attribute_category,
1282                  attribute1              = l_subscription_info.attribute1,
1283                  attribute2              = l_subscription_info.attribute2,
1284                  attribute3              = l_subscription_info.attribute3,
1285                  attribute4              = l_subscription_info.attribute4,
1286                  attribute5              = l_subscription_info.attribute5,
1287                  attribute6              = l_subscription_info.attribute6,
1288                  attribute7              = l_subscription_info.attribute7,
1289                  attribute8              = l_subscription_info.attribute8,
1290                  attribute9              = l_subscription_info.attribute9,
1291                  attribute10             = l_subscription_info.attribute10,
1292                  attribute11             = l_subscription_info.attribute11,
1293                  attribute12             = l_subscription_info.attribute12,
1294                  attribute13             = l_subscription_info.attribute13,
1295                  attribute14             = l_subscription_info.attribute14,
1296                  attribute15             = l_subscription_info.attribute15,
1297                  last_update_date        = sysdate,
1298                  last_updated_by         = fnd_global.user_id,
1299                  last_update_login       = fnd_global.login_id
1300          WHERE   subscription_id      = p_x_subscription_tbl(i).subscription_id;
1301          --Update the tranlation table
1302                UPDATE AHL_SUBSCRIPTIONS_TL
1303                   SET comments          = l_comments,
1304                       last_update_date  = sysdate,
1305                       last_updated_by   = fnd_global.user_id,
1306                       last_update_login = fnd_global.login_id
1307                WHERE SUBSCRIPTION_ID    = p_x_subscription_tbl(i).subscription_id
1308                  AND userenv('LANG') in (LANGUAGE, SOURCE_LANG);
1309 
1310 
1311 */
1312      -- Incase of delte a subscription record set the end date,
1313      -- At this point we are not using delete subscriptions
1314 
1315      -- Modified pjha 28-Jun-2002 for modifying 'subscribed to' Begin
1316 
1317                    --Check if the document is subscribed and then update accordingly
1318                    OPEN get_max_end_date(p_x_subscription_tbl(i).document_id);
1319                    FETCH get_max_end_date INTO l_end_date;
1320                    --Modified pjha 09-Jul-2002 for fixing bug#2452714: Begin
1321                    IF (l_end_date IS NULL OR get_max_end_date%NOTFOUND OR l_end_date < TRUNC(sysdate)) THEN
1322                    --IF (get_max_end_date%NOTFOUND OR l_end_date < TRUNC(sysdate)) THEN
1323                    --Modified pjha 09-Jul-2002 for fixing bug#2452714: End
1324                      UPDATE AHL_DOCUMENTS_B
1325              SET subscribe_to_flag = 'N'
1326                      WHERE document_id = p_x_subscription_tbl(i).document_id;
1327                    ELSE
1328                      UPDATE AHL_DOCUMENTS_B
1329              SET subscribe_to_flag = 'Y'
1330                      WHERE document_id = p_x_subscription_tbl(i).document_id;
1331                    END IF;
1332                    CLOSE get_max_end_date;
1333 
1334       END IF;
1335       -- Modified pjha 28-Jun-2002 for modifying 'subscribed to' End
1336 
1337       END IF;
1338 
1339       IF (p_x_subscription_tbl(i).subscription_id IS NOT NULL AND
1340                 NVL(p_x_subscription_tbl(i).delete_flag, 'N') = 'Y' )
1341 
1342         THEN
1343            -- Added pjha 28-Jun-2002 for bug#2438718: Begin
1344            l_subscription_tbl(1).subscription_id := p_x_subscription_tbl(i).subscription_id;
1345            DELETE_SUBSCRIPTION
1346            (
1347             p_api_version        => 1.0                        ,
1348             p_init_msg_list      => FND_API.G_TRUE             ,
1349             p_commit             => FND_API.G_FALSE            ,
1350             p_validate_only      => FND_API.G_TRUE             ,
1351             p_validation_level   => FND_API.G_VALID_LEVEL_FULL ,
1352             p_x_subscription_tbl =>  l_subscription_tbl      ,
1353             x_return_status      => x_return_status            ,
1354             x_msg_count          => x_msg_count                ,
1355             x_msg_data           => x_msg_data);
1356 
1357           -- Added pjha 28-Jun-2002 for bug#2438718: End
1358 
1359 
1360        -- Modified pjha 28-Jun-2002 for modifying 'subscribed to' Begin
1361 
1362        --Check if the document is subscribed and then update accordingly
1363 
1364            OPEN get_max_end_date(p_x_subscription_tbl(i).document_id);
1365        FETCH get_max_end_date INTO l_end_date;
1366        --Modified pjha 09-Jul-2002 for fixing bug#2452714: Begin
1367        IF (l_end_date IS NULL OR get_max_end_date%NOTFOUND OR l_end_date < TRUNC(sysdate)) THEN
1368        --IF (get_max_end_date%NOTFOUND OR l_end_date < TRUNC(sysdate)) THEN
1369        --Modified pjha 09-Jul-2002 for fixing bug#2452714: End
1370           UPDATE AHL_DOCUMENTS_B
1371           SET subscribe_to_flag = 'N'
1372           WHERE document_id = p_x_subscription_tbl(i).document_id;
1373        ELSE
1374           UPDATE AHL_DOCUMENTS_B
1375           SET subscribe_to_flag = 'Y'
1376           WHERE document_id = p_x_subscription_tbl(i).document_id;
1377        END IF;
1378        CLOSE get_max_end_date;
1379 
1380 
1381 
1382 
1383       -- Modified pjha 28-Jun-2002 for modifying 'subscribed to' End
1384 
1385       END IF;
1386    END LOOP;
1387  END IF;
1388     -- Standard check of p_commit.
1389    IF FND_API.TO_BOOLEAN(p_commit) THEN
1390        COMMIT;
1391    END IF;
1392    -- Debug info
1393    IF G_DEBUG='Y' THEN
1394           AHL_DEBUG_PUB.debug( 'End of private api Modify Subscription','+SUB+');
1395 
1396     END IF;
1397    -- Check if API is called in debug mode. If yes, disable debug.
1398    IF G_DEBUG='Y' THEN
1399           AHL_DEBUG_PUB.disable_debug;
1400 
1401     END IF;
1402 
1403 EXCEPTION
1404  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1405     ROLLBACK TO modify_subscription;
1406     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1407     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1408                                p_count => x_msg_count,
1409                                p_data  => x_msg_data);
1410 
1411         IF G_DEBUG='Y' THEN
1412             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'ERROR' );
1413             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Modify Subscription','+SUB+');
1414 
1415 
1416         -- Check if API is called in debug mode. If yes, disable debug.
1417             AHL_DEBUG_PUB.disable_debug;
1418 
1419     END IF;
1420 
1421  WHEN FND_API.G_EXC_ERROR THEN
1422     ROLLBACK TO modify_subscription;
1423     X_return_status := FND_API.G_RET_STS_ERROR;
1424     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1425                                p_count => x_msg_count,
1426                                p_data  => X_msg_data);
1427         -- Debug info.
1428         IF G_DEBUG='Y' THEN
1429             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
1430             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Modify Subscription','+SUB+');
1431 
1432 
1433         -- Check if API is called in debug mode. If yes, disable debug.
1434            AHL_DEBUG_PUB.disable_debug;
1435 
1436     END IF;
1437 
1438  WHEN OTHERS THEN
1439     ROLLBACK TO modify_subscription;
1440     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1441     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1442     THEN
1443     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DI_SUBSCRIPTION_PVT',
1444                             p_procedure_name  =>  'MODIFY_SUBSCRIPTION',
1445                             p_error_text      => SUBSTR(SQLERRM,1,240));
1446     END IF;
1447     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1448                                p_count => x_msg_count,
1449                                p_data  => X_msg_data);
1450 
1451         -- Debug info.
1452         IF G_DEBUG='Y' THEN
1453             AHL_DEBUG_PUB.log_app_messages (x_msg_count, x_msg_data, 'SQL ERROR' );
1454             AHL_DEBUG_PUB.debug( 'ahl_di_subscription_pvt.Modify Subscription','+SUB+');
1455 
1456 
1457         -- Check if API is called in debug mode. If yes, disable debug.
1458             AHL_DEBUG_PUB.disable_debug;
1459 
1460     END IF;
1461 
1462 END MODIFY_SUBSCRIPTION;
1463 /*-------------------------------------------------------*/
1464 /* procedure name: delete_subscription                   */
1465 /* description :we are not using this procedure, probably*/
1466 /*               next phase                              */
1467 /*                                                       */
1468 /*-------------------------------------------------------*/
1469 
1470 
1471 PROCEDURE DELETE_SUBSCRIPTION
1472 (
1473  p_api_version                IN     NUMBER    := 1.0               ,
1474  p_init_msg_list              IN     VARCHAR2  := FND_API.G_TRUE      ,
1475  p_commit                     IN     VARCHAR2  := FND_API.G_FALSE     ,
1476  p_validate_only              IN     VARCHAR2  := FND_API.G_TRUE      ,
1477  p_validation_level           IN     NUMBER    := FND_API.G_VALID_LEVEL_FULL,
1478  p_x_subscription_tbl         IN OUT NOCOPY subscription_tbl          ,
1479  x_return_status                 OUT NOCOPY VARCHAR2                         ,
1480  x_msg_count                     OUT NOCOPY NUMBER                           ,
1481  x_msg_data                      OUT NOCOPY VARCHAR2
1482 )
1483 IS
1484 
1485 CURSOR get_sub_rec_b_info(c_subscription_id  NUMBER)
1486 IS
1487 SELECT ROWID,
1488        start_date,
1489        end_date,
1490        object_version_number
1491 FROM AHL_SUBSCRIPTIONS_B
1492 WHERE subscription_id = c_subscription_id
1493   FOR UPDATE OF object_version_number NOWAIT;
1494 
1495 l_api_name     CONSTANT VARCHAR2(30) := 'DELETE_SUBSCRIPTION';
1496 l_api_version  CONSTANT NUMBER       := 1.0;
1497 l_rowid                 ROWID;
1498 l_object_version_number NUMBER;
1499 l_end_date              DATE;
1500 l_start_date            DATE;
1501 BEGIN
1502     -- Standard Start of API savepoint
1503     SAVEPOINT delete_subscriptions;
1504     -- Standard call to check for call compatibility.
1505    IF FND_API.to_boolean(p_init_msg_list)
1506    THEN
1507      FND_MSG_PUB.initialize;
1508    END IF;
1509     --  Initialize API return status to success
1510     x_return_status := 'S';
1511     -- Initialize message list if p_init_msg_list is set to TRUE.
1512    IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1513                                       p_api_version,
1514                                       l_api_name,G_PKG_NAME)
1515    THEN
1516        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1517    END IF;
1518    --Start of API Body
1519    IF p_x_subscription_tbl.COUNT > 0
1520    THEN
1521       FOR i IN p_x_subscription_tbl.FIRST..p_x_subscription_tbl.LAST
1522       LOOP
1523          OPEN get_sub_rec_b_info(p_x_subscription_tbl(i).subscription_id);
1524          FETCH get_sub_rec_b_info INTO l_rowid,
1525                                        l_start_date,
1526                                        l_end_date,
1527                                        l_object_version_number;
1528 
1529          IF (get_sub_rec_b_info%NOTFOUND)
1530          THEN
1531             FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUB_RECORD_NOT_EXISTS');
1532             FND_MSG_PUB.ADD;
1533          END IF;
1534          CLOSE get_sub_rec_b_info;
1535          /* No need, it's done in modify document
1536          -- Check for version number
1537         IF (l_object_version_number <> p_x_subscription_tbl(i).object_version_number)
1538         THEN
1539            FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUB_RECORD_CHANGED');
1540            FND_MSG_PUB.ADD;
1541         END IF;
1542         */
1543         -- Validate with end date
1544         /* Not required, user should be able to delete subscriptions
1545         after they have become obsolete: pjha 09-Jul-2002
1546         IF (l_end_date IS NOT NULL AND l_end_date < sysdate )
1547         THEN
1548            FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUB_RECORD_CLOSED');
1549            FND_MSG_PUB.ADD;
1550         END IF;
1551         */
1552         /* Not required
1553         -- Check for start date
1554         IF l_start_date IS NULL
1555         THEN
1556            FND_MESSAGE.SET_NAME('AHL','AHL_DI_START_DATE_INVALID');
1557            FND_MSG_PUB.ADD;
1558         END IF;
1559 
1560         --Check for End Date
1561         IF (TRUNC(NVL(l_end_date, SYSDATE)) >
1562            TRUNC(NVL(p_x_subscription_tbl(i).end_date,SYSDATE)))
1563         THEN
1564            FND_MESSAGE.SET_NAME('AHL','AHL_DI_SUB_E_DATE_INVALID');
1565            FND_MSG_PUB.ADD;
1566         END IF;
1567         */
1568         -- Update the end date in subscriptions table
1569         -- Modified pjha 15-May-2002 for modifying 'subscribed to' Begin
1570 
1571 
1572         -- Modified pjha 14-Jun-2002 for deleting the row: Begin
1573         AHL_SUBSCRIPTIONS_PKG.DELETE_ROW(
1574         X_SUBSCRIPTION_ID => p_x_subscription_tbl(i).subscription_id);
1575 
1576 
1577         /*
1578         UPDATE AHL_SUBSCRIPTIONS_B
1579                  SET END_DATE = sysdate
1580         WHERE ROWID = l_rowid;
1581         */
1582 
1583         -- Modified pjha 14-Jun-2002 for deleting the row: End
1584       END LOOP;
1585         -- Modified pjha 15-May-2002 for modifying 'subscribed to' End
1586  END IF;
1587     -- Standard check of p_commit.
1588     IF FND_API.TO_BOOLEAN(p_commit) THEN
1589         COMMIT;
1590     END IF;
1591 
1592 EXCEPTION
1593  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1594     ROLLBACK TO delete_subscription;
1595     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1596     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1597                                p_count => x_msg_count,
1598                                p_data  => x_msg_data);
1599 
1600  WHEN FND_API.G_EXC_ERROR THEN
1601     ROLLBACK TO delete_subscription;
1602     X_return_status := FND_API.G_RET_STS_ERROR;
1603     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1604                                p_count => x_msg_count,
1605                                p_data  => X_msg_data);
1606  WHEN OTHERS THEN
1607     ROLLBACK TO delete_subscription;
1608     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1609     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1610     THEN
1611     fnd_msg_pub.add_exc_msg(p_pkg_name        =>  'AHL_DI_SUBSCRIPTION_PVT',
1612                             p_procedure_name  =>  'DELETE_SUBSCRIPTION',
1613                             p_error_text      =>   SUBSTR(SQLERRM,1,240));
1614     END IF;
1615     FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1616                                p_count => x_msg_count,
1617                                p_data  => X_msg_data);
1618 
1619 END DELETE_SUBSCRIPTION;
1620 
1621 END AHL_DI_SUBSCRIPTION_PVT;