DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_CDRL_PVT

Source


1 PACKAGE  BODY OKC_CDRL_PVT AS
2 /* $Header: OKCVCDRLB.pls 120.0.12020000.13 2013/04/06 12:25:05 serukull noship $ */
3 
4 
5 ---------------------------------------------------------------------------
6 -- Global VARIABLES
7 ---------------------------------------------------------------------------
8     G_PKG_NAME       CONSTANT VARCHAR2(200) := 'OKC_CDRL_PVT';
9     G_APP_NAME       CONSTANT VARCHAR2(3)   :=  OKC_API.G_APP_NAME;
10     G_ENTITY_NAME    CONSTANT VARCHAR2(40)  :=  'OKC_DELIVERABLES';
11 
12     G_MODULE         CONSTANT   VARCHAR2(200) := 'okc.plsql.'||G_PKG_NAME||'.';
13 
14 
15 ------------------------------------------------------------------------------
16 -- GLOBAL CONSTANTS
17 ------------------------------------------------------------------------------
18  G_FALSE                      CONSTANT   VARCHAR2(1) := FND_API.G_FALSE;
19  G_TRUE                       CONSTANT   VARCHAR2(1) := FND_API.G_TRUE;
20  G_RET_STS_SUCCESS            CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
21  G_RET_STS_ERROR              CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_ERROR;
22  G_RET_STS_UNEXP_ERROR        CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
23  G_SQLERRM_TOKEN              CONSTANT   VARCHAR2(200) := 'ERROR_MESSAGE';
24  G_SQLCODE_TOKEN              CONSTANT   VARCHAR2(200) := 'ERROR_CODE';
25  G_DLV_QA_TYPE                CONSTANT   VARCHAR2(30)  := 'DELIVERABLE';
26 
27  G_NORMAL_QA             CONSTANT VARCHAR2(30) :=  'NORMAL';
28  G_AMEND_QA              CONSTANT VARCHAR2(30) :=  'AMEND';
29  G_OKC                   CONSTANT VARCHAR2(3)  :=  'OKC';
30 
31  -------------------------
32 
33 FUNCTION get_Document_Class(p_doc_type IN VARCHAR2)
34 RETURN VARCHAR2
35 IS
36 
37 CURSOR cur_bus_doc_class
38 IS
39 SELECT  DOCUMENT_TYPE_CLASS
40 FROM okc_bus_doc_types_vl
41 WHERE DOCUMENT_TYPE =  p_doc_type;
42 
43 l_doc_class VARCHAR2(60);
44 
45 BEGIN
46 
47  OPEN cur_bus_doc_class;
48  FETCH cur_bus_doc_class INTO  l_doc_class;
49  CLOSE  cur_bus_doc_class;
50 
51  RETURN l_doc_class;
52 
53 END get_Document_Class;
54 
55 PROCEDURE delete_deliverables(  p_del_id_tbl IN deliverable_tbl_type
56                               , p_mode IN VARCHAR2 DEFAULT NULL
57 )
58 IS
59 
60   CURSOR cur_attach (cdrl_id VARCHAR2)
61   IS
62   SELECT att.attached_document_id
63     ,doc.datatype_id
64     FROM fnd_attached_documents att
65     ,fnd_documents doc
66     WHERE att.document_id = doc.document_id
67     AND   att.entity_name = OKC_DELIVERABLE_PROCESS_PVT.G_ENTITY_NAME
68     AND   att.pk1_value   = cdrl_id;
69 
70     TYPE id_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
71     attach_doc_id_tbl id_tbl_type;
72     datatype_id_tbl id_tbl_type;
73 BEGIN
74 
75 
76 IF Nvl(p_mode,'ABC') <> 'AMEND' THEN
77 -- Delete deliverable status history
78    FORALL i IN p_del_id_tbl.first..p_del_id_tbl.last
79     DELETE FROM okc_del_status_history
80     WHERE deliverable_id = p_del_id_tbl(i);
81 
82 -- Delete attachments from deliverable
83    FOR i IN 1.. p_del_id_tbl.Count
84     LOOP
85 
86        -- Fetch all attachments for a given deliverable.
87        OPEN  cur_attach(To_Char(p_del_id_tbl(i)));
88        FETCH  cur_attach BULK COLLECT INTO attach_doc_id_tbl,datatype_id_tbl;
89        CLOSE  cur_attach;
90 
91        -- Delete attachments by calling attachment API for each deliverable.
92        FOR j IN  1..attach_doc_id_tbl.Count
93         LOOP
94             BEGIN
95             fnd_attached_documents3_pkg.delete_row (
96                         X_attached_document_id  => attach_doc_id_tbl(j),
97                         X_datatype_id           => datatype_id_tbl(j),
98                         delete_document_flag    => 'Y' );
99             EXCEPTION
100              WHEN OTHERS THEN
101               NULL;
102              END;
103         END LOOP;
104      END LOOP;
105 
106 -- Delete deliverable.
107     FORALL i IN p_del_id_tbl.first..p_del_id_tbl.last
108        DELETE FROM okc_deliverables
109        WHERE deliverable_id = p_del_id_tbl(i);
110 RETURN;
111 END IF;
112 
113      FORALL i IN p_del_id_tbl.first..p_del_id_tbl.last
114        UPDATE okc_deliverables
115        SET  amendment_operation = 'DELETED'
116           ,  summary_amend_operation_code  = 'DELETED'
117        WHERE deliverable_id = p_del_id_tbl(i)
118          ;
119 
120 END  delete_deliverables;
121 
122 /* ---------------------------------
123   Removing the following code for dependencies
124   Product teams to pass the next exhibit.
125 
126 FUNCTION get_next_exhibit (p_doc_class IN VARCHAR2
127                          , p_doc_type IN VARCHAR2
128                          , p_doc_id IN VARCHAR2)
129 RETURN VARCHAR2
130 IS
131 l_next_exhibit VARCHAR2(100);
132 
133 CURSOR cur_get_next_exhibit (p_doc_class VARCHAR2,p_doc_type VARCHAR2,p_doc_id NUMBER)
134 IS
135 Select LOOKUP_CODE
136 from fnd_lookup_values_vl e
137 where lookup_type = 'PO_CLM_EXHIBIT_NUMBER'
138 AND ENABLED_FLAG    = 'Y'
139 AND SYSDATE BETWEEN Trunc(START_DATE_ACTIVE)  AND Nvl(END_DATE_ACTIVE,SYSDATE+1)
140 AND (
141         ( ('SOURCING' =  p_doc_class)
142            AND
143           (NOT EXISTS (SELECT 'Y'
144                     FROM pon_auction_exhibit_details n
145                     WHERE n.AUCTION_HEADER_ID=p_doc_id
146                     AND n.EXHIBIT_NUMBER=  e.LOOKUP_CODE
147                     )
148            )  -- NOT EXISTS
149          )  -- SOURCING
150 
151     OR
152         (
153 
154             ('PO' =  p_doc_class)
155               AND
156              (
157                 ( SubStr(p_doc_type,-3) <> 'MOD'
158                     AND NOT EXISTS (SELECT 'Y'
159                     FROM po_exhibit_details p
160                     WHERE p.po_HEADER_ID=p_doc_id
161                     AND p.EXHIBIT_NAME=  e.LOOKUP_CODE)
162                  )   -- NORMAL CASE
163 
164               OR
165 
166                   ( SubStr(p_doc_type,-3) = 'MOD'
167                     AND NOT EXISTS (SELECT 'Y'
168                     FROM po_exhibit_details_merge_v p
169                     WHERE p.draft_ID=p_doc_id
170                     AND p.EXHIBIT_NAME=  e.LOOKUP_CODE)
171                   )  -- MOD CASE
172                ) -- AND
173          )  --OR
174       )  -- AND
175 order by length(lookup_code), lookup_code;
176 
177 
178 BEGIN
179     OPEN cur_get_next_exhibit(p_doc_class,p_doc_type,p_doc_id);
180     FETCH cur_get_next_exhibit INTO  l_next_exhibit;
181     CLOSE cur_get_next_exhibit;
182     RETURN  l_next_exhibit;
183 END  get_next_exhibit;
184 ------------------------*/
185 
186 
187 
188 
189  ------------------------------
190  -- public procedure start
191  ------------------------------
192  PROCEDURE copy_cdrl_for_exhibit
193    (
194     p_api_version           IN NUMBER,
195     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
196     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
197 
198     p_doc_type       IN VARCHAR2,
199     p_doc_id         IN NUMBER,
200     p_doc_version    IN NUMBER,
201     p_mode           IN VARCHAR2 DEFAULT NULL,
202 
203     p_src_exhibit   IN VARCHAR2,
204     p_target_exhibit IN VARCHAR2,
205 
206 
207 
208 
209     x_msg_data              OUT NOCOPY VARCHAR2,
210     x_msg_count             OUT NOCOPY NUMBER,
211     x_return_status         OUT NOCOPY VARCHAR2
212    )
213 
214    IS
215 
216 
217     l_api_version      CONSTANT NUMBER := 1;
218     l_api_name         CONSTANT VARCHAR2(30) := 'copy_cdrl_for_exhibit';
219     l_dummy            VARCHAR2(10);
220 
221 
222     old_del_id_tbl deliverable_tbl_type;
223     new_del_id_tbl deliverable_tbl_type;
224 
225 
226     CURSOR cur_new_cdrl
227     IS
228     SELECT deliverable_id,orig_system_reference_id1
229     FROM okc_deliverables
230     WHERE  business_document_type = p_doc_type
231     and business_document_id =   p_doc_id
232     AND business_document_version  = Nvl(p_doc_version,-99)
233     AND exhibit_code=p_target_exhibit
234     AND del_category_code = 'CDRL' ;
235 
236     l_src_cdrl_count NUMBER;
237     data_item_num_tbl   exhibit_tbl_type;
238     l_target_exhibit_len NUMBER := Length(p_target_exhibit);
239 
240   l_return_status  VARCHAR2(1);
241   l_msg_count      NUMBER;
242   l_msg_data       VARCHAR2(1000);
243   l_errorcode      NUMBER;
244 
245 
246    BEGIN
247 
248     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
249 
250       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: copy_cdrl_for_exhibits');
251       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
252 
253       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
254       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
255       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
256 
257       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_type : '||p_doc_type);
258       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_id : '||p_doc_id);
259 
260       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_src_exhibit (count) : '||p_src_exhibit);
261       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_target_exhibit (count) : '||p_target_exhibit);
262 
263     END IF;
264 
265     -- Standard Start of API savepoint
266     SAVEPOINT g_copy_cdrl_for_exhibit;
267     -- Standard call to check for call compatibility.
268     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
269       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
270     END IF;
271     -- Initialize message list if p_init_msg_list is set to TRUE.
272     IF FND_API.to_Boolean( p_init_msg_list ) THEN
273       FND_MSG_PUB.initialize;
274     END IF;
275 
276     --  Initialize API return status to success
277     x_return_status := G_RET_STS_SUCCESS;
278 
279     -- Generate CDRL Data item numbers:
280      SELECT Count(1)   INTO l_src_cdrl_count
281                   FROM okc_deliverables
282                   WHERE  business_document_type = p_doc_type
283                   and business_document_id =p_doc_id
284                   AND business_document_version = Nvl(p_doc_version,-99)
285                   and DEL_CATEGORY_CODE = 'CDRL'
286                   and exhibit_code = p_src_exhibit;
287 
288      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
289       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, ' l_src_cdrl_count count ' || l_src_cdrl_count);
290      END IF;
291 
292 
293               IF ( (l_target_exhibit_len=2 AND (l_src_cdrl_count) > 1155)
294                     OR
295                     (l_target_exhibit_len=1 AND (l_src_cdrl_count) > 39303)
296                    )
297                    THEN
298                     Raise_Application_Error (-20900, 'OKC_ELIN_NUMBERS_EXHAUSTED');
299              END IF;
300 
301  SELECT NEXT_ELIN_SET
302 BULK COLLECT INTO data_item_num_tbl
303 FROM
304   (SELECT p_target_exhibit
305           ||Decode( Length(p_target_exhibit)+Length(OKC_CDRL_PVT.DECIMAL_TO_ELIN(X)),4,'',3,'0',2,'00')
306           ||OKC_CDRL_PVT.DECIMAL_TO_ELIN(X)
307     AS NEXT_ELIN_SET
308     FROM
309        (SELECT LEVEL AS X
310          FROM dual
311           CONNECT BY LEVEL <=
312             (l_src_cdrl_count)
313           )
314       )
315      WHERE ROWNUM<=l_src_cdrl_count
316      ORDER BY NEXT_ELIN_SET
317     ;
318 
319     --
320     INSERT INTO okc_deliverables
321            ( deliverable_id
322             , business_document_type
323             , business_document_id
324             , business_document_number
325             , deliverable_type
326             , responsible_party
327             , internal_party_contact_id
328             , external_party_contact_id
329             , deliverable_name
330             , description
331             , comments
332             , display_sequence
333             , fixed_due_date_yn
334             , actual_due_date
335             , print_due_date_msg_name
336             , recurring_yn
337             , notify_prior_due_date_value
338             , notify_prior_due_date_uom
339             , notify_prior_due_date_yn
340             , notify_completed_yn
341             , notify_overdue_yn
342             , notify_escalation_yn
343             , notify_escalation_value
344             , notify_escalation_uom
345             , escalation_assignee
346             --, amendment_operation
347             --, amendment_notes
348             , LANGUAGE
349             , original_deliverable_id
350             , requester_id
351             , external_party_id
352             , recurring_del_parent_id
353             , business_document_version
354             , relative_st_date_duration
355             , relative_st_date_uom
356             , relative_st_date_event_id
357             , relative_end_date_duration
358             , relative_end_date_uom
359             , relative_end_date_event_id
360             , repeating_day_of_month
361             , repeating_day_of_week
362             , repeating_frequency_uom
363             , repeating_duration
364             , fixed_start_date
365             , fixed_end_date
366             , manage_yn
367             , internal_party_id
368             , deliverable_status
369             , status_change_notes
370             -- Who col
371             , created_by
372             , creation_date
373             , last_updated_by
374             , last_update_date
375             , last_update_login
376             , object_version_number
377             -- DFF
378             , attribute_category
379             , attribute1
380             , attribute2
381             , attribute3
382             , attribute4
383             , attribute5
384             , attribute6
385             , attribute7
386             , attribute8
387             , attribute9
388             , attribute10
389             , attribute11
390             , attribute12
391             , attribute13
392             , attribute14
393             , attribute15
394 
395             , disable_notifications_yn
396            -- , last_amendment_date
397             , business_document_line_id
398             , external_party_site_id
399             , start_event_date
400             , end_event_date
401           --  , summary_amend_operation_code
402             , external_party_role
403             , pay_hold_prior_due_date_yn
404             , pay_hold_prior_due_date_value
405             , pay_hold_prior_due_date_uom
406             , pay_hold_overdue_yn
407             , completion_date
408             , raise_completion_event_yn
409             , orig_system_reference_code
410             , orig_system_reference_id1
411           --  , orig_system_reference_id2
412             , del_category_code
413             , exhibit_code
414            -- , data_item_number
415             , price_group
416             , estimated_price
417             , uda_template_id
418             , schedule_type
419            )
420            SELECT  OKC_DELIVERABLE_ID_S.NEXTVAL
421                   ,business_document_type
422                   ,business_document_id
423                   ,business_document_number
424                   ,deliverable_type
425                   ,responsible_party
426                   ,internal_party_contact_id
427                   ,external_party_contact_id
428                    , deliverable_name
429             , description
430             , comments
431             , display_sequence
432             , fixed_due_date_yn
433             , actual_due_date
434             , print_due_date_msg_name
435             , recurring_yn
436             , notify_prior_due_date_value
437             , notify_prior_due_date_uom
438             , notify_prior_due_date_yn
439             , notify_completed_yn
440             , notify_overdue_yn
441             , notify_escalation_yn
442             , notify_escalation_value
443             , notify_escalation_uom
444             , escalation_assignee
445             --, amendment_operation
446             --, amendment_notes
447             , LANGUAGE
448             ,OKC_DELIVERABLE_ID_S.CURRVAL
449             , requester_id
450             , external_party_id
451             , recurring_del_parent_id
452             , business_document_version
453             , relative_st_date_duration
454             , relative_st_date_uom
455             , relative_st_date_event_id
456             , relative_end_date_duration
457             , relative_end_date_uom
458             , relative_end_date_event_id
459             , repeating_day_of_month
460             , repeating_day_of_week
461             , repeating_frequency_uom
462             , repeating_duration
463             , fixed_start_date
464             , fixed_end_date
465             , manage_yn
466             , internal_party_id
467             , deliverable_status
468             , status_change_notes
469             -- WHO cols
470             , fnd_global.user_id --created_by
471             , SYSDATE --creation_date
472             , fnd_global.user_id --last_updated_by
473             , SYSDATE --last_update_date
474             , fnd_global.login_id --last_update_login
475             , 1 --object_version_number
476              -- DFF
477             , attribute_category
478             , attribute1
479             , attribute2
480             , attribute3
481             , attribute4
482             , attribute5
483             , attribute6
484             , attribute7
485             , attribute8
486             , attribute9
487             , attribute10
488             , attribute11
489             , attribute12
490             , attribute13
491             , attribute14
492             , attribute15
493             , disable_notifications_yn
494            -- , last_amendment_date
495             , business_document_line_id
496             , external_party_site_id
497             , start_event_date
498             , end_event_date
499           --  , summary_amend_operation_code
500             , external_party_role
501             , pay_hold_prior_due_date_yn
502             , pay_hold_prior_due_date_value
503             , pay_hold_prior_due_date_uom
504             , pay_hold_overdue_yn
505             , completion_date
506             , raise_completion_event_yn
507             , 'COPY'
508             , deliverable_id
509          --   , orig_system_reference_id2
510             , del_category_code
511             , p_target_exhibit
512            -- , REPLACE(data_item_number,p_src_exhibit,p_target_exhibit)
513             , price_group
514             , estimated_price
515             , uda_template_id
516             , schedule_type
517            FROM okc_deliverables
518            WHERE  business_document_type =  p_doc_type
519             AND business_document_id  = p_doc_id
520             AND business_document_version = Nvl(p_doc_version,-99)
521             AND exhibit_code   =  p_src_exhibit
522             AND del_category_code = 'CDRL'
523             ;
524 
525 
526 
527 
528           OPEN cur_new_cdrl;
529           FETCH cur_new_cdrl BULK COLLECT INTO new_del_id_tbl, old_del_id_tbl;
530           CLOSE cur_new_cdrl;
531 
532     -- Update exhibit, data item num on deliverable
533       FORALL i IN new_del_id_tbl.first..new_del_id_tbl.last
534         UPDATE okc_deliverables
535         SET    data_item_number=data_item_num_tbl(i)
536         WHERE deliverable_id= new_del_id_tbl(i);
537 
538        -- copy uda data
539          FOR i IN 1..old_del_id_tbl.Count
540           LOOP
541              okc_deliverable_process_pvt.copy_deliverable_udas(
542               old_del_id_tbl(i),
543               new_del_id_tbl(i),
544               l_return_status,
545               l_msg_count,
546               l_msg_data,
547               l_errorcode
548               );
549             if l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
550 	            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
551             END IF;
552         END LOOP;
553 
554         --  copy attachments
555           FOR i IN 1..old_del_id_tbl.count LOOP
556                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
557                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Inside loop'||to_char(old_del_id_tbl(i)));
558                   END IF;
559                   -- check if attachments exists
560                   IF OKC_DELIVERABLE_PROCESS_PVT.attachment_exists(
561                                        p_entity_name => OKC_DELIVERABLE_PROCESS_PVT.G_ENTITY_NAME
562                                       ,p_pk1_value    =>  old_del_id_tbl(i)
563                                       ) THEN
564                       fnd_attached_documents2_pkg.copy_attachments(
565                                   X_from_entity_name =>  OKC_DELIVERABLE_PROCESS_PVT.G_ENTITY_NAME,
566                                   X_from_pk1_value   =>  To_Char(old_del_id_tbl(i)),
567                                   X_to_entity_name   =>  OKC_DELIVERABLE_PROCESS_PVT.G_ENTITY_NAME,
568                                   X_to_pk1_value     =>  to_char(new_del_id_tbl(i)),
569                                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
570                                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
571                                   );
572                       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
573                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'121: Attachments copied for delId: '||to_char(old_del_id_tbl(i)));
574                       END IF;
575                   END IF; -- IF attachment_exists()
576            END LOOP; -- FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
577 
578 
579      --END LOOP;
580     EXCEPTION
581      WHEN OTHERS THEN
582       ROLLBACK TO g_copy_cdrl_for_exhibit;
583       RAISE;
584    END  copy_cdrl_for_exhibit;
585 
586     PROCEDURE delete_cdrl_for_exhibits
587    (
588     p_api_version           IN NUMBER,
589     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
590     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
591 
592 
593     p_doc_type       IN VARCHAR2,
594     p_doc_id         IN NUMBER,
595     p_doc_version    IN NUMBER,
596     p_mode           IN VARCHAR2 DEFAULT NULL,
597 
598     p_exhibit_tbl     IN exhibit_tbl_type,
599 
600     x_msg_data              OUT NOCOPY VARCHAR2,
601     x_msg_count             OUT NOCOPY NUMBER,
602     x_return_status         OUT NOCOPY VARCHAR2
603    )
604 
605 
606 
607    IS
608 
609 
610    del_id_tbl   deliverable_tbl_type;
611 
612    CURSOR cur_cdrl_for_exhibit (p_exhibit_code VARCHAR2)
613    IS
614    SELECT   deliverable_id
615     FROM okc_deliverables
616     WHERE business_document_type =  p_doc_type
617     AND business_document_id  = p_doc_id
618     AND business_document_version = Nvl(p_doc_version,-99)
619     AND exhibit_code   =  p_exhibit_code
620     AND del_category_code='CDRL';
621 
622     l_api_name varchar2(30) := 'delete_cdrl_for_exhibits';
623    BEGIN
624 
625 
626      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
627 
628       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: delete_cdrl_for_exhibits');
629       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
630       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
631       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
632       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
633       --FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_class : '||p_doc_class);
634       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_type : '||p_doc_type);
635       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_doc_id : '||p_doc_id);
636       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'900: p_mode : '||p_mode);
637       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: p_exhibit_tbl count : '||p_exhibit_tbl.Count());
638       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: p_doc_version : '||p_doc_version);
639     END IF;
640 
641 
642       x_return_status := g_ret_sts_success;
643 
644 
645 
646        FOR i IN  1..p_exhibit_tbl.Count
647          LOOP
648 
649              -- Fetch the cdrl deliverables for given exhibit
650              OPEN cur_cdrl_for_exhibit(p_exhibit_tbl(i));
651              FETCH cur_cdrl_for_exhibit BULK COLLECT INTO del_id_tbl;
652              CLOSE cur_cdrl_for_exhibit;
653 
654              -- delete the cdrl deliverables
655 
656                 delete_deliverables(del_id_tbl,p_mode);
657          END LOOP;
658 
659     IF FND_API.To_Boolean( p_commit ) THEN
660       COMMIT WORK;
661     END IF;
662 
663     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
664      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'999:  leaving delete_cdrl_for_exhibits');
665     END IF;
666 
667    END delete_cdrl_for_exhibits;
668 
669 
670    --------------------------------------
671    PROCEDURE create_exhibit_for_cdrl
672    (
673     p_api_version           IN NUMBER,
674     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
675     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
676 
677     p_doc_class      IN VARCHAR2,
678     p_doc_type       IN VARCHAR2,
679     p_doc_id         IN NUMBER,
680     p_doc_version    IN NUMBER DEFAULT NULL,
681 
682     p_mode           IN VARCHAR2,
683     p_exhibit_code   IN VARCHAR2,
684     p_exhibit_desc   IN VARCHAR2,
685 
686     x_msg_data              OUT NOCOPY VARCHAR2,
687     x_msg_count             OUT NOCOPY NUMBER,
688     x_return_status         OUT NOCOPY VARCHAR2
689    )
690    IS
691 
692 
693     l_api_version      CONSTANT NUMBER := 1;
694     l_api_name         CONSTANT VARCHAR2(30) := 'create_exhibit_for_cdrl';
695     l_dummy            VARCHAR2(10);
696 
697     l_msg_data               VARCHAR2(2000);
698     l_msg_count              NUMBER;
699     l_return_status          VARCHAR2(1);
700 
701 
702     l_document_type_tbl PO_TBL_VARCHAR30 := PO_TBL_VARCHAR30();
703     l_document_id_tbl   PO_TBL_NUMBER := PO_TBL_NUMBER();
704     l_exhibit_name_tbl  PO_TBL_VARCHAR30 := PO_TBL_VARCHAR30();
705     l_exhibit_description_tbl PO_TBL_VARCHAR240 := PO_TBL_VARCHAR240();
706     l_is_cdrl_tbl       PO_TBL_VARCHAR1 := PO_TBL_VARCHAR1();
707     l_revision_num_tbl  PO_TBL_NUMBER := PO_TBL_NUMBER();
708 
709     l_doc_class VARCHAR2(60) := p_doc_class;
710    BEGIN
711 
712      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
713 
714       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: create_exhibit_for_cdrl');
715       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
716       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
717       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
718       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
719       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_class : '||p_doc_class);
720       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_type : '||p_doc_type);
721       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_doc_id : '||p_doc_id);
722       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'900: p_mode : '||p_mode);
723       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: p_exhibit_code : '||p_exhibit_code);
724       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: p_doc_version : '||p_doc_version);
725     END IF;
726 
727     -- Standard Start of API savepoint
728     SAVEPOINT g_copy_del_for_exhibit;
729     -- Standard call to check for call compatibility.
730     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
731       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
732     END IF;
733     -- Initialize message list if p_init_msg_list is set to TRUE.
734     IF FND_API.to_Boolean( p_init_msg_list ) THEN
735       FND_MSG_PUB.initialize;
736     END IF;
737     --  Initialize API return status to success
738     x_return_status := G_RET_STS_SUCCESS;
739 
740     IF (l_doc_class IS NULL) THEN
741      l_doc_class := get_document_class(p_doc_type);
742     END IF;
743 
744      -- SOURCING
745      IF  l_doc_class = 'SOURCING'   THEN
746 
747          pon_exhibits_pkg.INSERT_CDRL_EXHIBIT_DETAILS (
748                                       p_auction_header_id => p_doc_id,
749                                       p_exhibit_number    => p_exhibit_code,
750                                       x_return_status     => l_return_status,
751                                       x_return_msg        => l_msg_data
752                                       );
753 
754               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
755                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: After Calling pon_exhibits_pkg.INSERT_CDRL_EXHIBIT_DETAILS');
756                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: l_return_status');
757                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: l_msg_data ');
758               END IF;
759 
760              IF  l_return_status <> 'S' THEN
761 
762                  IF l_return_status = 'EXHIBIT_NUM_USED_BY_ELIN'
763                   THEN
764                        Okc_Api.Set_Message(G_APP_NAME
765                                     ,'OKC_EXHB_USED_BY_ELIN');
766                         RAISE FND_API.G_EXC_ERROR;
767                   END IF;
768              END IF;
769 
770 
771 
772      ELSIF  l_doc_class = 'PO'   THEN
773 
774           l_document_type_tbl.extend;
775           l_document_id_tbl.extend;
776           l_exhibit_name_tbl.extend;
777           l_exhibit_description_tbl.extend;
778           l_is_cdrl_tbl.extend;
779           l_revision_num_tbl.extend;
780 
781           l_document_type_tbl(1) := p_doc_type;
782           l_document_id_tbl(1) := p_doc_id;
783           l_exhibit_name_tbl(1) := p_exhibit_code;
784           --p_exhibit_description_tbl(1) := p_exhibit_desc;
785           l_exhibit_description_tbl(1) := NULL;
786           l_is_cdrl_tbl(1) := 'Y';
787           l_revision_num_tbl(1) := p_doc_version ;
788 
789           --
790           po_clm_okc_integ_pkg.insert_exhibits
791                   (
792                     p_document_type_tbl => l_document_type_tbl,
793                     p_document_id_tbl   => l_document_id_tbl,
794                     p_exhibit_name_tbl  => l_exhibit_name_tbl,
795                     p_exhibit_description_tbl => l_exhibit_description_tbl,
796                     p_revision_num_tbl => l_revision_num_tbl,
797                     p_is_cdrl_tbl       => l_is_cdrl_tbl,
798                     x_return_status => l_return_status,
799                     x_return_msg   =>  l_msg_data
800                   );
801 
802                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
803                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: After Calling po_clm_okc_integ_pkg.insert_exhibits');
804                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: l_return_status');
805                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: l_msg_data ');
806               END IF;
807 
808              IF  l_return_status <> 'S' THEN
809 
810                  IF l_return_status = 'EXHIBIT_NUM_USED_BY_ELIN'
811                   THEN
812                        Okc_Api.Set_Message(G_APP_NAME
813                                     ,'OKC_EXHB_USED_BY_ELIN');
814                         RAISE FND_API.G_EXC_ERROR;
815                   END IF;
816              END IF;
817      END IF;
818 
819     IF FND_API.To_Boolean( p_commit ) THEN
820       COMMIT WORK;
821     END IF;
822 
823     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
824      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'999:  leaving create_exhibit_for_cdrl');
825     END IF;
826 
827    EXCEPTION
828 
829       WHEN FND_API.G_EXC_ERROR THEN
830        ROLLBACK TO g_copy_del_for_exhibit;
831 
832        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
833         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving create_exhibit_for_cdrl with G_EXC_ERROR');
834        END IF;
835 
836 
837        x_return_status := G_RET_STS_ERROR;
838        FND_MSG_PUB.Count_And_Get(
839         p_count =>  x_msg_count,
840         p_data  =>  x_msg_data
841         );
842 
843     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
844        ROLLBACK TO g_copy_del_for_exhibit;
845 
846        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
847         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving create_exhibit_for_cdrl with G_EXC_UNEXPECTED_ERROR ');
848        END IF;
849 
850        x_return_status := G_RET_STS_UNEXP_ERROR;
851        FND_MSG_PUB.Count_And_Get(
852         p_count =>  x_msg_count,
853         p_data  =>  x_msg_data
854         );
855 
856     WHEN OTHERS THEN
857        ROLLBACK TO g_copy_del_for_exhibit;
858 
859        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
860         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving create_exhibit_for_cdrl with OTHERS EXCEPTION '||SQLERRM);
861        END IF;
862 
863       x_return_status := G_RET_STS_UNEXP_ERROR;
864       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
865       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
866       END IF;
867       FND_MSG_PUB.Count_And_Get(
868         p_count =>  x_msg_count,
869         p_data  =>  x_msg_data
870         );
871    END create_exhibit_for_cdrl;
872 
873    PROCEDURE delete_exhibit_for_cdrl
874    (
875     p_api_version           IN NUMBER,
876     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
877     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
878 
879     p_doc_class      IN VARCHAR2,
880 
881     p_doc_type       IN VARCHAR2,
882     p_doc_id         IN NUMBER,
883     p_doc_version    IN NUMBER,
884 
885     p_mode           IN VARCHAR2,
886     p_exhibit_code   IN VARCHAR2,
887 
888     x_msg_data              OUT NOCOPY VARCHAR2,
889     x_msg_count             OUT NOCOPY NUMBER,
890     x_return_status         OUT NOCOPY VARCHAR2,
891     p_validate_before_delete IN VARCHAR2 DEFAULT 'Y',
892     p_deliverable_id IN NUMBER DEFAULT NULL
893    )
894    IS
895 
896 
897     l_api_version      CONSTANT NUMBER := 1;
898     l_api_name         CONSTANT VARCHAR2(30) := 'delete_exhibit_for_cdrl';
899     l_dummy            VARCHAR2(10);
900 
901     l_msg_data               VARCHAR2(2000);
902     l_msg_count              NUMBER;
903     l_return_status          VARCHAR2(1);
904 
905     p_document_type_tbl PO_TBL_VARCHAR30 := PO_TBL_VARCHAR30();
906     p_document_id_tbl   PO_TBL_NUMBER := PO_TBL_NUMBER();
907     p_exhibit_name_tbl  PO_TBL_VARCHAR30 := PO_TBL_VARCHAR30();
908     p_exhibit_description_tbl PO_TBL_VARCHAR240 := PO_TBL_VARCHAR240();
909     p_is_cdrl_tbl       PO_TBL_VARCHAR1 := PO_TBL_VARCHAR1();
910 
911     x_return_msg VARCHAR2(40);
912     l_cdrl_count NUMBER := 0;
913 
914     l_doc_class  VARCHAR2(60) := p_doc_class;
915 
916    BEGIN
917 
918      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
919 
920       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: delete_exhibit_for_cdrl');
921       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
922       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
923       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
924       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
925       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_class : '||p_doc_class);
926       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_type : '||p_doc_type);
927       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_doc_id : '||p_doc_id);
928       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'900: p_mode : '||p_mode);
929       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: p_exhibit_code : '||p_exhibit_code);
930     END IF;
931 
932     -- Standard Start of API savepoint
933     SAVEPOINT g_delete_exhibit_for_cdrl;
934     -- Standard call to check for call compatibility.
935     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
936       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
937     END IF;
938     -- Initialize message list if p_init_msg_list is set to TRUE.
939     IF FND_API.to_Boolean( p_init_msg_list ) THEN
940       FND_MSG_PUB.initialize;
941     END IF;
942     --  Initialize API return status to success
943     x_return_status := G_RET_STS_SUCCESS;
944 
945     IF (l_doc_class IS NULL  )  THEN
946      l_doc_class := get_document_class(p_doc_type);
947     END IF;
948 
949      IF p_validate_before_delete = 'Y' THEN
950        SELECT Count(1)
951         INTO l_cdrl_count
952         FROM okc_deliverables
953        WHERE business_document_type = p_doc_type
954        AND   business_document_id   =  p_doc_id
955        AND   business_document_version = Nvl(p_doc_version,-99)
956        AND   exhibit_code = p_exhibit_code
957        AND ( p_deliverable_id IS NULL OR
958              (p_deliverable_id <> deliverable_id)
959             );
960        --- ('Calling po_exhibits_pvt for exhibit '|| p_exhibit_code || ': '|| l_cdrl_count);
961     END IF;
962 
963 
964 
965    IF ( p_validate_before_delete = 'N' OR
966        ( p_validate_before_delete= 'Y' AND l_cdrl_count <= 0)
967       ) THEN
968 
969      -- SOURCING
970      IF  l_doc_class = 'SOURCING'   THEN
971 
972          pon_exhibits_pkg.DELETE_CDRL_EXHIBIT_DETAILS (
973                                       p_auction_header_id => p_doc_id,
974                                       p_exhibit_number    => p_exhibit_code,
975                                       x_return_status     => x_return_status
976                                       );
977               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
978                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: After Calling pon_exhibits_pkg.DELETE_CDRL_EXHIBIT_DETAILS');
979                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: l_return_status');
980                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: l_msg_data ');
981               END IF;
982 
983 
984 
985 
986      ELSIF  l_doc_class = 'PO'   THEN
987 
988           p_document_type_tbl.extend;
989           p_document_id_tbl.extend;
990           p_exhibit_name_tbl.extend;
991           p_exhibit_description_tbl.extend;
992           p_is_cdrl_tbl.extend;
993 
994           p_document_type_tbl(1) := p_doc_type;
995           p_document_id_tbl(1) := p_doc_id;
996           p_exhibit_name_tbl(1) := p_exhibit_code;
997           p_exhibit_description_tbl(1) := NULL;
998           p_is_cdrl_tbl(1) := 'Y';
999 
1000 
1001            po_clm_okc_integ_pkg.delete_exhibits (
1002                             p_document_type_tbl => p_document_type_tbl,
1003                             p_document_id_tbl   => p_document_id_tbl,
1004                             p_exhibit_name_tbl  => p_exhibit_name_tbl,
1005                             p_is_cdrl_tbl       => p_is_cdrl_tbl,
1006                             x_return_status =>   x_return_status,
1007                             x_return_msg   =>     x_return_msg
1008 
1009                                       );
1010               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1011                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: After Calling po_clm_okc_integ_pkg.delete_exhibits');
1012                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: l_return_status');
1013                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: l_msg_data ');
1014               END IF;
1015 
1016 
1017      END IF;
1018 
1019     END IF;
1020 
1021     IF FND_API.To_Boolean( p_commit ) THEN
1022       COMMIT WORK;
1023     END IF;
1024 
1025     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1026      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'999:  leaving delete_exhibit_for_cdrl');
1027     END IF;
1028 
1029    EXCEPTION
1030 
1031       WHEN FND_API.G_EXC_ERROR THEN
1032        ROLLBACK TO g_delete_exhibit_for_cdrl;
1033 
1034        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1035         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving delete_exhibit_for_cdrl with G_EXC_ERROR');
1036        END IF;
1037 
1038 
1039        x_return_status := G_RET_STS_ERROR;
1040        FND_MSG_PUB.Count_And_Get(
1041         p_count =>  x_msg_count,
1042         p_data  =>  x_msg_data
1043         );
1044 
1045     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1046        ROLLBACK TO g_delete_exhibit_for_cdrl;
1047 
1048        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1049         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving delete_exhibit_for_cdrl with G_EXC_UNEXPECTED_ERROR ');
1050        END IF;
1051 
1052        x_return_status := G_RET_STS_UNEXP_ERROR;
1053        FND_MSG_PUB.Count_And_Get(
1054         p_count =>  x_msg_count,
1055         p_data  =>  x_msg_data
1056         );
1057 
1058     WHEN OTHERS THEN
1059        ROLLBACK TO g_delete_exhibit_for_cdrl;
1060 
1061        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1062         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving delete_exhibit_for_cdrl with OTHERS EXCEPTION '||SQLERRM);
1063        END IF;
1064 
1065       x_return_status := G_RET_STS_UNEXP_ERROR;
1066       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1067       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1068       END IF;
1069       FND_MSG_PUB.Count_And_Get(
1070         p_count =>  x_msg_count,
1071         p_data  =>  x_msg_data
1072         );
1073    END delete_exhibit_for_cdrl;
1074 
1075 
1076 FUNCTION ELIN_TO_DECIMAL(linNum VARCHAR2)
1077  RETURN NUMBER
1078 IS
1079 
1080   l_asciiValue NUMBER:=0;
1081   temp NUMBER;
1082   base_size NUMBER;
1083   ret_linNum VARCHAR2(100);
1084   c_base32_digits CONSTANT VARCHAR2(34) := '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
1085 
1086   BEGIN
1087 
1088             base_size := Length(c_base32_digits);
1089             FOR i IN 1 .. Length(linNum) loop
1090                 temp := InStr(c_base32_digits,SubStr(linNum, i, 1))-1;
1091                 l_asciiValue:=l_asciiValue+temp*Power(base_size,(Length(linNum)-i));
1092              END LOOP;
1093 
1094           RETURN l_asciiValue;
1095   END ;
1096 
1097 FUNCTION DECIMAL_TO_ELIN(elin_dec NUMBER) RETURN VARCHAR2
1098 IS
1099  v_modulo INTEGER;
1100  v_temp_int INTEGER := elin_dec;
1101  v_temp_val VARCHAR2(256);
1102  v_temp_char VARCHAR2(1);
1103  c_base32_digits CONSTANT VARCHAR2(34) := '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
1104 
1105   BEGIN
1106 
1107                 IF ( elin_dec = 0 ) THEN
1108                  v_temp_val := '0';
1109                 END IF;
1110 
1111                 WHILE ( v_temp_int <> 0 ) LOOP
1112                   v_modulo := v_temp_int MOD 34;
1113                   v_temp_char := SUBSTR( c_base32_digits, v_modulo + 1, 1 );
1114                   v_temp_val := v_temp_char || v_temp_val;
1115                   v_temp_int := floor(v_temp_int / 34);
1116                 END LOOP;
1117 
1118                 RETURN v_temp_val;
1119 
1120   END ;
1121 
1122 
1123 FUNCTION GET_NEXT_CDRL_NUM(
1124   p_document_type in VARCHAR2
1125 , p_Document_ID IN NUMBER
1126 , p_exhibit_code IN VARCHAR2) return VARCHAR2
1127 IS
1128 
1129 exhibit_len NUMBER;
1130 line_num_tbl_qry VARCHAR2(1000);
1131 lineNumber NUMBER;
1132 linNumDisplay VARCHAR2(3);
1133 
1134 ELIN_NUMBERS_EXHAUSTED EXCEPTION;
1135 
1136 
1137 BEGIN
1138 
1139 exhibit_len:=Length(p_exhibit_code);
1140 
1141 line_num_tbl_qry := 'SELECT Nvl(Max(ROWNUM),0)+1
1142                      FROM (SELECT OKC_CDRL_PVT.ELIN_TO_DECIMAL(SubStr(data_item_number,'|| exhibit_len||'+1,4-'||exhibit_len||')) elin_decimal FROM okc_deliverables
1143                      where business_document_type = :1 and business_document_id =:2
1144                      and business_document_version = -99 and DEL_CATEGORY_CODE = :3
1145                      and exhibit_code = :4  order by 1) WHERE ELIN_DECIMAL=rownum';
1146 
1147 EXECUTE IMMEDIATE line_num_tbl_qry INTO lineNumber using p_document_type, p_document_id, 'CDRL', p_exhibit_code;
1148 
1149 IF((exhibit_len=2 AND lineNumber>1155) OR (exhibit_len=1 AND lineNumber>39303)) THEN
1150   RAISE ELIN_NUMBERS_EXHAUSTED;
1151 END IF;
1152 
1153 linNumDisplay:=DECIMAL_TO_ELIN(lineNumber);
1154 
1155   IF(exhibit_len=1) THEN
1156               IF(Length(linNumDisplay)=1)  THEN
1157                     linNumDisplay:='00'||linNumDisplay;
1158               ELSIF(Length(linNumDisplay)=2) then
1159                     linNumDisplay:='0'||linNumDisplay;
1160               END IF;
1161   ELSIF(exhibit_len=2) THEN
1162               IF(Length(linNumDisplay)=1)  THEN
1163                     linNumDisplay:='0'||linNumDisplay;
1164               END IF;
1165 
1166 END IF;
1167 
1168 RETURN p_exhibit_code||linNumDisplay;
1169 
1170 EXCEPTION
1171       WHEN ELIN_NUMBERS_EXHAUSTED THEN
1172           Raise_Application_Error (-20900, 'OKC_ELIN_NUMBERS_EXHAUSTED');
1173 END;
1174 
1175 PROCEDURE ins_exb_and_get_dataItemNum (
1176 
1177     p_api_version           IN NUMBER,
1178     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1179     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
1180 
1181     p_doc_class      IN VARCHAR2,
1182 
1183     p_doc_type       IN VARCHAR2,
1184     p_doc_id         IN NUMBER,
1185     p_doc_version    IN NUMBER DEFAULT NULL,
1186 
1187     p_mode           IN VARCHAR2 DEFAULT NULL,
1188 
1189     p_old_exhibit_code   IN VARCHAR2,
1190     p_new_exhibit_code   IN VARCHAR2,
1191 
1192 
1193     x_data_item_number      OUT NOCOPY  VARCHAR2,
1194     x_msg_data              OUT NOCOPY VARCHAR2,
1195     x_msg_count             OUT NOCOPY NUMBER,
1196     x_return_status         OUT NOCOPY VARCHAR2,
1197     p_deliverable_id       IN NUMBER
1198    )
1199 IS
1200 BEGIN
1201      x_return_status := 'S';
1202 
1203 
1204    -- Delete the old exhibit if it is not null
1205       IF  (p_old_exhibit_code IS NOT NULL )
1206       THEN
1207         delete_exhibit_for_cdrl
1208                  (
1209     p_api_version          => 1.0,
1210     p_init_msg_list        => FND_API.G_FALSE,
1211     p_commit                => FND_API.G_FALSE,
1212     p_doc_class      => p_doc_class,
1213     p_doc_type       => p_doc_type,
1214     p_doc_id         => p_doc_id,
1215     p_doc_version    => p_doc_version,
1216     p_mode           => p_mode,
1217     p_exhibit_code   => p_old_exhibit_code,
1218     x_msg_data             => x_return_status,
1219     x_msg_count             => x_msg_count,
1220     x_return_status         => x_return_status,
1221     p_deliverable_id => p_deliverable_id);
1222       END IF;
1223    -- Insert the new exhibit.
1224 
1225 
1226       create_exhibit_for_cdrl (
1227 
1228     p_api_version           => 1.0 ,
1229     p_init_msg_list         => FND_API.G_FALSE,
1230     p_commit                => FND_API.G_FALSE,
1231 
1232     p_doc_class      => p_doc_class,
1233     p_doc_type       => p_doc_type,
1234     p_doc_id         => p_doc_id,
1235     p_doc_version    => p_doc_version,
1236 
1237     p_mode           => p_mode,
1238 
1239     p_exhibit_code   => p_new_exhibit_code,
1240     p_exhibit_desc   => NULL,
1241 
1242 
1243 
1244     x_msg_data              => x_msg_data,
1245     x_msg_count             => x_msg_count,
1246     x_return_status         => x_return_status)    ;
1247 
1248 
1249    x_data_item_number :=  GET_NEXT_CDRL_NUM(p_doc_type,p_doc_id,p_new_exhibit_code);
1250 
1251 END  ins_exb_and_get_dataItemNum;
1252 
1253 /*
1254 PROCEDURE copy_exhibits (
1255 
1256     p_api_version           IN NUMBER,
1257     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1258     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
1259 
1260     p_doc_class      IN VARCHAR2,
1261     p_doc_type       IN VARCHAR2,
1262     p_doc_id         IN NUMBER,
1263     p_doc_version    IN NUMBER,
1264     p_mode           IN VARCHAR2 DEFAULT NULL,
1265 
1266     p_copy_cdrl      IN VARCHAR2 DEFAULT 'Y',
1267 
1268     p_src_exhibit_tbl     IN exhibit_tbl_type,
1269     p_target_exhibit_tbl  IN exhibit_tbl_type,
1270 
1271     x_msg_data              OUT NOCOPY VARCHAR2,
1272     x_msg_count             OUT NOCOPY NUMBER,
1273     x_return_status         OUT NOCOPY VARCHAR2
1274 
1275 
1276 
1277                          )
1278  IS
1279 
1280  l_api_version      CONSTANT NUMBER := 1;
1281  l_api_name         CONSTANT VARCHAR2(30) := 'copy_exhibits';
1282  l_dummy            VARCHAR2(10);
1283  l_new_exhibit_code VARCHAR2(100);
1284 
1285    BEGIN
1286 
1287     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1288 
1289       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: copy_cdrl_for_exhibits');
1290       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
1291 
1292       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
1293       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
1294       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
1295 
1296       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_type : '||p_doc_type);
1297       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_id : '||p_doc_id);
1298 
1299       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_exhibit_tbl (count) : '||p_exhibit_tbl.count);
1300 
1301     END IF;
1302 
1303     -- Standard Start of API savepoint
1304     SAVEPOINT g_copy_exhibits;
1305 
1306     -- Standard call to check for call compatibility.
1307     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1308       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1309     END IF;
1310 
1311     -- Initialize message list if p_init_msg_list is set to TRUE.
1312     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1313       FND_MSG_PUB.initialize;
1314     END IF;
1315 
1316     --  Initialize API return status to success
1317     x_return_status := G_RET_STS_SUCCESS;
1318 
1319   FOR i IN 1..p_exhibit_tbl.Count
1320   LOOP
1321     -- l_new_exhibit_code
1322     --l_new_exhibit_code := get_next_exhibit(p_doc_class,p_doc_type,p_doc_id);
1323      l_new_exhibit_code :=  p_target_exhibit_tbl(i);
1324 
1325     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1326          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1000: l_new_exhibit_code : ' || l_new_exhibit_code);
1327     END IF;
1328 
1329    -- insert exhibit.
1330    create_exhibit_for_cdrl
1331    (
1332     p_api_version        => 1.0,
1333     p_init_msg_list      => FND_API.G_FALSE,
1334     p_commit             => FND_API.G_FALSE,
1335     p_doc_class      => p_doc_class,
1336     p_doc_type       => p_doc_type,
1337     p_doc_id         => p_doc_id,
1338     p_mode           => p_mode,
1339     p_exhibit_code   => l_new_exhibit_code,
1340     p_exhibit_desc   => null,
1341     x_msg_data       => x_msg_data,
1342     x_msg_count      => x_msg_count,
1343     x_return_status  => x_return_status
1344    );
1345 
1346    -- if copy cdrl is 'Y' then
1347    if  p_copy_cdrl = 'Y' THEN
1348 
1349     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1350          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'1110: calling  copy_cdrl_for_exhibits for exhibit: ' || p_exhibit_tbl(i));
1351     END IF;
1352 
1353 
1354    copy_cdrl_for_exhibits
1355    (
1356     p_api_version           => 1.0,
1357     p_init_msg_list         => FND_API.G_FALSE,
1358     p_commit                => FND_API.G_FALSE,
1359 
1360     p_doc_class      => p_doc_class,
1361     p_doc_type       => p_doc_type,
1362     p_doc_id         => p_doc_id,
1363     p_doc_version    => p_doc_version,
1364     p_mode           => p_mode,
1365 
1366     p_src_exhibit     => p_exhibit_tbl(i),
1367 
1368     p_target_exhibit =>  l_new_exhibit_code,
1369 
1370 
1371     x_msg_data              => x_msg_data,
1372     x_msg_count  => x_msg_count,
1373     x_return_status =>  x_return_status
1374    ) ;
1375    END IF;
1376  END LOOP;
1377 END  copy_exhibits; */
1378 
1379 PROCEDURE specify_exhibits_for_cdrls
1380 (
1381 
1382 p_api_version IN NUMBER,
1383 p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1384 p_commit                IN VARCHAR2:=FND_API.G_FALSE,
1385 
1386  p_cdrl_tbl IN deliverable_tbl_type,
1387  p_exhibit_code IN VARCHAR2,
1388 
1389  p_doc_class      IN VARCHAR2,
1390  p_doc_type       IN VARCHAR2,
1391  p_doc_id         IN NUMBER,
1392  p_doc_version    IN NUMBER,
1393 
1394  p_mode           IN VARCHAR2 DEFAULT NULL,
1395 
1396  x_msg_data              OUT NOCOPY VARCHAR2,
1397  x_msg_count             OUT NOCOPY NUMBER,
1398  x_return_status         OUT NOCOPY VARCHAR2
1399 
1400 
1401  )
1402 IS
1403 
1404  CURSOR cur_exhibits
1405  IS
1406  SELECT DISTINCT exhibit_code
1407  FROM okc_deliverables;
1408 
1409  l_okc_cdrl_ids okc_tbl_number;
1410  l_exhibit_tbl exhibit_tbl_type;
1411  l_input_cdrl_count NUMBER;
1412 
1413  data_item_num_tbl   exhibit_tbl_type;
1414  exhibit_code_length NUMBER := Length(p_exhibit_code);
1415 
1416  l_progress VARCHAR2(3) := '000';
1417  l_existing_cdrl_count NUMBER :=0;
1418 
1419  l_api_name VARCHAR2(60) := 'specify_exhibits_for_cdrls';
1420  l_api_version NUMBER := 1;
1421 
1422 BEGIN
1423 
1424 
1425 
1426     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1427 
1428       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: specify_exhibits_for_cdrls');
1429       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
1430 
1431       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
1432       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
1433       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
1434 
1435       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_class : '||p_doc_class);
1436       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_type : '||p_doc_type);
1437       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_id : '||p_doc_id);
1438       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_version : '||p_doc_version);
1439 
1440       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_exhibit_code: '||p_exhibit_code );
1441 
1442       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_cdrl_tbl  (count) - Input cdrl count : '||p_cdrl_tbl.Count());
1443       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_mode : '|| p_mode);
1444 
1445     END IF;
1446 
1447     -- Standard Start of API savepoint
1448     SAVEPOINT g_specify_exhibit;
1449     -- Standard call to check for call compatibility.
1450     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1451       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1452     END IF;
1453     -- Initialize message list if p_init_msg_list is set to TRUE.
1454     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1455       FND_MSG_PUB.initialize;
1456     END IF;
1457 
1458     --  Initialize API return status to success
1459     x_return_status := G_RET_STS_SUCCESS;
1460 
1461    l_progress := '020';
1462    l_input_cdrl_count := p_cdrl_tbl.Count();
1463 
1464    l_progress := '030';
1465    l_okc_cdrl_ids :=  okc_tbl_number();
1466    l_okc_cdrl_ids.extend(l_input_cdrl_count);
1467 
1468    l_progress := '040';
1469    FOR i IN 1..p_cdrl_tbl.Count
1470     LOOP
1471        l_okc_cdrl_ids(i) :=p_cdrl_tbl(i);
1472     END LOOP;
1473 
1474    -- Get the Exhibits for delete
1475    -- As we are specifying the new exhibit, we should delete the old exhibit references from
1476    -- exhibit details table
1477    -- Get the all the currently specified exhibits on the given deliverables.
1478    -- and these exhibits should not be specified on any other deliverable
1479 
1480  l_progress := '050';
1481  SELECT DISTINCT c.exhibit_code
1482     BULK COLLECT INTO l_exhibit_tbl
1483   FROM  okc_deliverables c,
1484       TABLE(l_okc_cdrl_ids) d
1485   WHERE  Value(d)=c.deliverable_id;
1486 
1487    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1488       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' l_exhibit_tbl count ' || l_exhibit_tbl.count);
1489    END IF;
1490 
1491   SELECT Count(1)   INTO l_existing_cdrl_count
1492                   FROM okc_deliverables
1493                   WHERE  business_document_type = p_doc_type
1494                   and business_document_id =p_doc_id
1495                   AND business_document_version = Nvl(p_doc_version,-99)
1496                   and DEL_CATEGORY_CODE = 'CDRL'
1497                   and exhibit_code = p_exhibit_code;
1498 
1499      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1500       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' l_existing_cdrl_count count ' || l_existing_cdrl_count);
1501      END IF;
1502 
1503 
1504               IF ( (exhibit_code_length=2 AND (l_existing_cdrl_count+l_input_cdrl_count) > 1155)
1505                     OR
1506                     (exhibit_code_length=1 AND (l_existing_cdrl_count+l_input_cdrl_count) > 39303)
1507                    )
1508                    THEN
1509                     Raise_Application_Error (-20900, 'OKC_ELIN_NUMBERS_EXHAUSTED');
1510              END IF;
1511 
1512 
1513    l_progress := '060';
1514     -- Insert Exhibit
1515     create_exhibit_for_cdrl
1516    (
1517     p_api_version         => 1.0,
1518     p_init_msg_list       => FND_API.G_FALSE,
1519     p_commit              => FND_API.G_FALSE,
1520 
1521     p_doc_class      => p_doc_class,
1522     p_doc_type       => p_doc_type,
1523     p_doc_id         => p_doc_id,
1524 
1525     p_mode           => p_mode,
1526 
1527     p_exhibit_code   => p_exhibit_code,
1528     p_exhibit_desc   => NULL ,
1529     x_msg_data       => x_msg_data,
1530     x_msg_count      => x_msg_count,
1531     x_return_status   => x_return_status
1532    );
1533    -- Get next data item num in bulk.
1534 
1535    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1536       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' After Calling create_exhibit_for_cdrl return status ' || x_return_status);
1537    END IF;
1538 
1539    IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1540          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1541    ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1542          RAISE FND_API.G_EXC_ERROR ;
1543    END IF;
1544 
1545    /*
1546 
1547    CONTROL IF A DELIVERABLE HAS SAME EXHIBIT CODE
1548    FILTER THE ROWS.
1549 
1550    */
1551 
1552  l_progress := '070';
1553 
1554 SELECT NEXT_ELIN_SET
1555 BULK COLLECT INTO data_item_num_tbl
1556 FROM
1557   (SELECT p_exhibit_code
1558           ||Decode( Length(p_exhibit_code)+Length(OKC_CDRL_PVT.DECIMAL_TO_ELIN(X)),4,'',3,'0',2,'00')
1559           ||OKC_CDRL_PVT.DECIMAL_TO_ELIN(X)
1560     AS NEXT_ELIN_SET
1561     FROM
1562        (SELECT LEVEL AS X
1563          FROM dual
1564           CONNECT BY LEVEL <=
1565             (l_input_cdrl_count + l_existing_cdrl_count)
1566           )
1567       )
1568      WHERE NEXT_ELIN_SET
1569      NOT IN (SELECT data_item_number
1570              FROM okc_deliverables
1571                   WHERE  business_document_type = p_doc_type
1572                   and business_document_id =p_doc_id
1573                   AND business_document_version = Nvl(p_doc_version,-99)
1574                   and DEL_CATEGORY_CODE = 'CDRL'
1575                   and exhibit_code = p_exhibit_code
1576                 )
1577       and ROWNUM<=l_input_cdrl_count
1578      ORDER BY NEXT_ELIN_SET
1579     ;
1580 
1581   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1582       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' Got Next set of Data Item Numbers - count ' || data_item_num_tbl.Count);
1583   END IF;
1584 
1585 
1586 
1587    l_progress := '080';
1588    -- Update exhibit, data item num on deliverable
1589     FORALL i IN p_cdrl_tbl.first..p_cdrl_tbl.last
1590       UPDATE okc_deliverables
1591       SET exhibit_code= p_exhibit_code
1592           ,data_item_number=data_item_num_tbl(i)
1593       WHERE deliverable_id= p_cdrl_tbl(i);
1594 
1595   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1596       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' Updated table with the new values. ' || data_item_num_tbl.Count);
1597   END IF;
1598 
1599     -- delete the exhibits.
1600     -- delete_exhibit_for_cdrl performs check before calling delete API.
1601 
1602  l_progress := '090';
1603 
1604  IF l_exhibit_tbl.Count > 0 THEN
1605 
1606    FOR i IN 1..l_exhibit_tbl.Count
1607      LOOP
1608       -- delete exhibit for cdrl.
1609        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1610          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' Calling delete API for deleting Exhibit ' || l_exhibit_tbl (i));
1611        END IF;
1612 
1613 
1614       delete_exhibit_for_cdrl
1615       (
1616         p_api_version           => 1.0,
1617         p_init_msg_list         => FND_API.G_FALSE,
1618         p_commit                => FND_API.G_FALSE,
1619 
1620         p_doc_class      => p_doc_class,
1621 
1622         p_doc_type       => p_doc_type,
1623         p_doc_id         => p_doc_id,
1624         p_doc_version    => p_doc_version,
1625 
1626         p_mode           => p_mode,
1627         p_exhibit_code   => l_exhibit_tbl(i),
1628 
1629         x_msg_data             => x_msg_data,
1630         x_msg_count            => x_msg_count,
1631         x_return_status        => x_return_status
1632        );
1633 
1634        IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1635            RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1636        ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1637          RAISE FND_API.G_EXC_ERROR ;
1638       END IF;
1639      END LOOP;
1640    END IF;
1641 
1642      IF FND_API.To_Boolean( p_commit ) THEN
1643       COMMIT WORK;
1644     END IF;
1645 
1646    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1647       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: Leaving SPECIFY_EXHIBITS_FOR_CDRLS');
1648     END IF;
1649 
1650 EXCEPTION
1651     WHEN FND_API.G_EXC_ERROR THEN
1652      ROLLBACK TO g_specify_exhibit;
1653      IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1654          FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'500: Leaving SPECIFY_EXHIBITS_FOR_CDRLS:FND_API.G_EXC_ERROR Exception');
1655       END IF;
1656       x_return_status := G_RET_STS_ERROR ;
1657 
1658     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1659       ROLLBACK TO g_specify_exhibit;
1660       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1661          FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'500: Leaving SPECIFY_EXHIBITS_FOR_CDRLS:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
1662       END IF;
1663       x_return_status := G_RET_STS_UNEXP_ERROR ;
1664 
1665        IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
1666         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
1667       END IF;
1668 
1669  WHEN OTHERS THEN
1670       x_return_status := G_RET_STS_UNEXP_ERROR;
1671        IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1672          FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'500: Leaving SPECIFY_EXHIBITS_FOR_CDRLS: Exception '|| SQLERRM);      END IF;
1673 
1674       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
1675         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
1676       END IF;
1677      ROLLBACK TO g_specify_exhibit;
1678 END  specify_exhibits_for_cdrls;
1679 
1680 
1681 PROCEDURE delete_doc_exhibits (
1682 
1683     p_api_version           IN NUMBER,
1684     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1685     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
1686 
1687     p_doc_class      IN VARCHAR2 DEFAULT NULL,
1688 
1689     p_doc_type       IN VARCHAR2,
1690     p_doc_id         IN NUMBER,
1691 
1692     p_doc_version    IN NUMBER DEFAULT NULL,
1693 
1694     p_mode           IN VARCHAR2 DEFAULT NULL,
1695 
1696     p_retain_lock_deliverables_yn IN VARCHAR2 DEFAULT 'N',
1697 
1698 
1699     x_msg_data              OUT NOCOPY VARCHAR2,
1700     x_msg_count             OUT NOCOPY NUMBER,
1701     x_return_status         OUT NOCOPY VARCHAR2
1702     )
1703 IS
1704 
1705 CURSOR cur_exhibits
1706 IS
1707 SELECT DISTINCT exhibit_code
1708 FROM okc_deliverables
1709 WHERE business_document_type =  p_doc_type
1710 AND business_document_id      =  p_doc_id
1711 AND DEL_CATEGORY_CODE = 'CDRL'
1712 AND (p_retain_lock_deliverables_yn = 'N'
1713                OR
1714            (p_retain_lock_deliverables_yn = 'Y'
1715             AND amendment_operation IS NULL)
1716      )       ;
1717 
1718 
1719 CURSOR cur_exhibits_ver
1720 IS
1721 SELECT DISTINCT exhibit_code
1722 FROM okc_deliverables
1723 WHERE business_document_type =  p_doc_type
1724 AND business_document_id      =  p_doc_id
1725 AND DEL_CATEGORY_CODE = 'CDRL'
1726  AND   business_document_version = p_doc_version
1727     AND   ( p_retain_lock_deliverables_yn = 'N'
1728                OR
1729            (p_retain_lock_deliverables_yn = 'Y'
1730             AND amendment_operation IS NULL)
1731           );
1732 
1733 
1734 CURSOR cur_bus_doc_class
1735 IS
1736 SELECT  DOCUMENT_TYPE_CLASS
1737 FROM okc_bus_doc_types_vl
1738 WHERE DOCUMENT_TYPE =  p_doc_type;
1739 
1740 
1741 l_bus_doc_class VARCHAR2(60);
1742 
1743 l_progress VARCHAR2(3) := '000';
1744 
1745 
1746 l_api_name VARCHAR2(60) := 'delete_doc_exhibits';
1747 l_api_version NUMBER := 1;
1748 
1749 
1750 l_exhibit_tbl exhibit_tbl_type;
1751 
1752 
1753 BEGIN
1754 
1755     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1756       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: Starting delete_doc_exhibits');
1757     END IF;
1758 
1759 
1760    -- Standard Start of API savepoint
1761     SAVEPOINT g_delete_doc_exhibit;
1762     -- Standard call to check for call compatibility.
1763     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1764       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1765     END IF;
1766     -- Initialize message list if p_init_msg_list is set to TRUE.
1767     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1768       FND_MSG_PUB.initialize;
1769     END IF;
1770 
1771     --  Initialize API return status to success
1772     x_return_status := G_RET_STS_SUCCESS;
1773 
1774 
1775 
1776    OPEN cur_bus_doc_class;
1777    FETCH cur_bus_doc_class INTO  l_bus_doc_class;
1778    close  cur_bus_doc_class;
1779     --p_validate_before_delete
1780 
1781     IF p_doc_version IS NULL THEN
1782       OPEN  cur_exhibits;
1783       FETCH cur_exhibits BULK COLLECT INTO l_exhibit_tbl;
1784       CLOSE cur_exhibits;
1785     ELSE
1786      OPEN  cur_exhibits_ver;
1787      FETCH cur_exhibits_ver BULK COLLECT INTO l_exhibit_tbl;
1788      CLOSE cur_exhibits_ver;
1789     END IF;
1790 
1791    IF l_exhibit_tbl.Count > 0 THEN
1792 
1793    FOR i IN 1..l_exhibit_tbl.Count
1794      LOOP
1795       -- delete exhibit for cdrl.
1796        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1797          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, l_progress|| ' Calling delete API for deleting Exhibit ' || l_exhibit_tbl (i));
1798        END IF;
1799 
1800 
1801       delete_exhibit_for_cdrl
1802       (
1803         p_api_version           => 1.0,
1804         p_init_msg_list         => FND_API.G_FALSE,
1805         p_commit                => FND_API.G_FALSE,
1806 
1807         p_doc_class      => l_bus_doc_class,
1808 
1809         p_doc_type       => p_doc_type,
1810         p_doc_id         => p_doc_id,
1811         p_doc_version    => p_doc_version,
1812 
1813         p_mode           => p_mode,
1814         p_exhibit_code   => l_exhibit_tbl(i),
1815 
1816         x_msg_data             => x_msg_data,
1817         x_msg_count            => x_msg_count,
1818         x_return_status        => x_return_status,
1819 
1820         p_validate_before_delete => 'N'
1821        );
1822 
1823        IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1824            RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1825        ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1826          RAISE FND_API.G_EXC_ERROR ;
1827       END IF;
1828      END LOOP;
1829    END IF;
1830 
1831     IF FND_API.To_Boolean( p_commit ) THEN
1832       COMMIT WORK;
1833     END IF;
1834 
1835    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1836       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: Leaving delete_doc_exhibits');
1837     END IF;
1838 
1839 
1840 EXCEPTION
1841  WHEN OTHERS THEN
1842   ROLLBACK TO g_delete_doc_exhibit;
1843   RAISE;
1844 END delete_doc_exhibits;
1845 
1846 FUNCTION  has_Cdrls(
1847     p_document_type         IN  VARCHAR2,
1848     p_document_id           IN  NUMBER,
1849     p_doc_version           IN NUMBER DEFAULT NULL
1850 ) RETURN VARCHAR2
1851 IS
1852 
1853      CURSOR cur_get_cdrl
1854      IS
1855      SELECT 'Y'
1856      FROM okc_deliverables
1857      WHERE business_document_type = p_document_type
1858        AND business_document_id = p_document_id
1859        AND business_document_version=Nvl(p_doc_version,-99)
1860        AND del_category_code='CDRL';
1861 
1862   l_value VARCHAR2(1);
1863 
1864 BEGIN
1865       OPEN cur_get_cdrl;
1866       FETCH cur_get_cdrl INTO l_value;
1867       IF (cur_get_cdrl%NOTFOUND) THEN
1868         CLOSE cur_get_cdrl;
1869         RETURN 'Y';
1870       END IF;
1871       CLOSE  cur_get_cdrl;
1872 
1873       Return 'N';
1874 
1875 
1876 END has_Cdrls;
1877 
1878 PROCEDURE RETAIN_CDRLS_FOR_EXHIBITS  (
1879     p_api_version           IN NUMBER,
1880     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1881     p_commit                IN VARCHAR2:=FND_API.G_FALSE,
1882 
1883     p_doc_type       IN VARCHAR2,
1884     p_doc_id         IN NUMBER,
1885     p_doc_version    IN NUMBER DEFAULT NULL,
1886     p_mode           IN VARCHAR2 DEFAULT NULL,
1887 
1888     p_exhibit_tbl     IN exhibit_tbl_type,
1889 
1890 
1891     x_msg_data              OUT NOCOPY VARCHAR2,
1892     x_msg_count             OUT NOCOPY NUMBER,
1893     x_return_status         OUT NOCOPY VARCHAR2
1894 
1895 
1896 )
1897 
1898 
1899 
1900 
1901 IS
1902 
1903 l_exhibit_tbl_for_delete exhibit_tbl_type;
1904 l_msg_data  VARCHAR2(2000);
1905 l_msg_count NUMBER;
1906 l_return_status VARCHAR2(1);
1907 
1908 TYPE exh_tbl_type IS TABLE OF VARCHAR2(30) INDEX BY VARCHAR2(120);
1909 
1910 l_input_exhibit_tbl  exh_tbl_type;
1911 
1912 l_api_version      CONSTANT NUMBER := 1;
1913 l_api_name         CONSTANT VARCHAR2(30) := 'RETAIN_CDRLS_FOR_EXHIBITS';
1914 
1915 k BINARY_INTEGER := 1;
1916 l_doc_exhibit_tbl exhibit_tbl_type;
1917 
1918 BEGIN
1919 
1920  IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1921 
1922       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: RETAIN_CDRLS_FOR_EXHIBITS');
1923       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Parameter List ');
1924 
1925       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: p_api_version : '||p_api_version);
1926       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'400: p_init_msg_list : '||p_init_msg_list);
1927       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: p_commit : '||p_commit);
1928 
1929       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'600: p_doc_type : '||p_doc_type);
1930       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: p_doc_id : '||p_doc_id);
1931 
1932       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: p_exhibit_tbl (count) : '||p_exhibit_tbl.Count());
1933 
1934 
1935     END IF;
1936 
1937     -- Standard Start of API savepoint
1938     SAVEPOINT G_RETAIN_CDRLS_FOR_EXHIBITS;
1939     -- Standard call to check for call compatibility.
1940     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1941       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1942     END IF;
1943     -- Initialize message list if p_init_msg_list is set to TRUE.
1944     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1945       FND_MSG_PUB.initialize;
1946     END IF;
1947 
1948     --  Initialize API return status to success
1949     x_return_status := G_RET_STS_SUCCESS;
1950 
1951     -- copy input list to table.
1952     FOR i IN 1..p_exhibit_tbl.Count
1953      LOOP
1954          l_input_exhibit_tbl(p_exhibit_tbl(i)) := p_exhibit_tbl(i);
1955      END LOOP;
1956 
1957     -- Get the exhibits on document
1958     BEGIN
1959     SELECT DISTINCT exhibit_code
1960     BULK COLLECT INTO l_doc_exhibit_tbl
1961     FROM  okc_deliverables
1962     WHERE business_document_type = p_doc_type
1963        AND business_document_id = p_doc_id
1964        AND business_document_version=Nvl(p_doc_version,-99)
1965        AND del_category_code='CDRL'
1966        AND exhibit_code IS NOT NULL;
1967     EXCEPTION
1968      WHEN OTHERS THEN
1969       NULL;
1970     END;
1971 
1972 
1973     --   filter the list.
1974 
1975     FOR i IN 1..l_doc_exhibit_tbl.Count
1976      LOOP
1977         IF NOT (l_input_exhibit_tbl.EXISTS(l_doc_exhibit_tbl(i))) THEN
1978           l_exhibit_tbl_for_delete (k) := l_doc_exhibit_tbl(i);
1979           k := k+1;
1980         END IF;
1981      END LOOP;
1982 
1983   delete_cdrl_for_exhibits
1984    (
1985     p_api_version           => 1.0,
1986     p_init_msg_list         => FND_API.G_FALSE,
1987     p_commit                => FND_API.G_FALSE,
1988 
1989 
1990     p_doc_type       => p_doc_type,
1991     p_doc_id         => p_doc_id,
1992     p_doc_version    => p_doc_version,
1993     p_mode           => p_mode,
1994 
1995     p_exhibit_tbl     => l_exhibit_tbl_for_delete,
1996 
1997     x_msg_data             => l_msg_data,
1998     x_msg_count             => l_msg_count,
1999     x_return_status         => l_return_status
2000    );
2001 
2002 
2003 EXCEPTION
2004 WHEN OTHERS THEN
2005  ROLLBACK TO  G_RETAIN_CDRLS_FOR_EXHIBITS;
2006 
2007 END RETAIN_CDRLS_FOR_EXHIBITS;
2008 
2009 /*
2010   function to create new deliverable id and then copy the UDA values from source to destination
2011   and return the new deliverable id
2012 */
2013 FUNCTION get_new_deliverable_id(p_old_deliverable_id NUMBER) RETURN NUMBER IS
2014   l_new_id NUMBER;
2015   x_return_status  VARCHAR2(1);
2016   x_msg_count      NUMBER;
2017   x_msg_data       VARCHAR2(1000);
2018   x_errorcode      NUMBER;
2019 BEGIN
2020   l_new_id :=OKC_DELIVERABLE_ID_S.NEXTVAL;
2021   okc_deliverable_process_pvt.copy_deliverable_udas(
2022         p_old_deliverable_id,
2023         l_new_id,
2024         x_return_status,
2025         x_msg_count,
2026         x_msg_data,
2027         x_errorcode
2028         );
2029   if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2030 	  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2031   END IF;
2032 END get_new_deliverable_id;
2033 
2034 
2035 END  OKC_CDRL_PVT;