DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_DELIVERABLE_PROCESS_PVT

Source


1 PACKAGE BODY OKC_DELIVERABLE_PROCESS_PVT AS
2 /* $Header: OKCVDPRB.pls 120.16.12020000.22 2013/05/31 10:01:10 nbingi ship $ */
3 
4   ---------------------------------------------------------------------------
5   -- package variables
6   ---------------------------------------------------------------------------
7     g_module          CONSTANT VARCHAR2(250) := 'okc.plsql.'||g_pkg_name||'.';
8   ---------------------------------------------------------------------------
9   -- Procedures and Functions
10   ---------------------------------------------------------------------------
11 
12   TYPE VerifiedEventsTbl IS TABLE OF OKC_BUS_DOC_EVENTS_B.bus_doc_event_id%TYPE
13   INDEX BY BINARY_INTEGER;
14 
15   verifiedListOfEvents VerifiedEventsTbl;
16   evtCount PLS_INTEGER := 0;
17 
18  /**
19   * Bug 5143307, Helper function to check if deliverable copy allowed on the target doc type
20   */
21  FUNCTION copy_allowed(p_deliverable_type IN VARCHAR2,
22                        p_target_doc_type IN VARCHAR2,
23                        p_target_contractual_doc_type IN VARCHAR2)
24  RETURN BOOLEAN
25  IS
26 
27   CURSOR C_delTypeExists (x_deliverable_type VARCHAR2,
28                 x_doc_type VARCHAR2) is
29     SELECT 'X'
30     FROM
31     okc_bus_doc_types_b doctyp,
32     okc_del_bus_doc_combxns deltypcomb
33     WHERE
34     doctyp.document_type_class = deltypcomb.document_type_class
35     AND doctyp.document_type = x_doc_type
36     AND deltypcomb.deliverable_type_code = x_deliverable_type;
37 
38     l_api_name CONSTANT VARCHAR2(30) :='copy_allowed';
39     l_return_value BOOLEAN := FALSE;
40 
41     C_delTypeExists_rec  C_delTypeExists%ROWTYPE;
42  BEGIN
43 
44   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
45     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_allowed (OVERLOADED) ');
46         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
47                         ,'101: p_deliverable_type = '||p_deliverable_type);
48         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
49                         ,'102: p_target_doc_type = '||p_target_doc_type);
50         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
51                         ,'103: p_target_contractual_doc_type = '||p_target_contractual_doc_type);
52   END IF;
53 
54     IF p_deliverable_type is null OR p_target_doc_type is null THEN
55         return l_return_value;
56     END IF;
57 
58     -- first check if deliverable type is valid for the target document type
59     OPEN C_delTypeExists (p_deliverable_type, p_target_doc_type);
60         FETCH C_delTypeExists into C_delTypeExists_rec;
61 
62     IF C_delTypeExists%FOUND THEN
63     l_return_value := TRUE;
64   ELSE
65       IF C_delTypeExists%ISOPEN THEN
66        CLOSE C_delTypeExists;
67       END IF;
68 
69       -- check if deliverable type is valid for the target contractual document type
70       OPEN C_delTypeExists (p_deliverable_type, p_target_contractual_doc_type);
71           FETCH C_delTypeExists into C_delTypeExists_rec;
72 
73     IF C_delTypeExists%FOUND THEN
74       l_return_value := TRUE;
75     ELSE
76       l_return_value := FALSE;
77     END IF;
78     END IF; -- IF C_delTypeExists%FOUND
79 
80     IF C_delTypeExists%ISOPEN THEN
81      CLOSE C_delTypeExists;
82     END IF;
83 
84     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
85         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
86                         ,'104: Returning l_return_value =  ');
87     END IF;
88     return l_return_value;
89 
90   EXCEPTION
91    WHEN OTHERS THEN
92      IF C_delTypeExists%ISOPEN THEN
93      CLOSE C_delTypeExists;
94      END IF;
95      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
96           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
97                          ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
98      END IF;
99 
100     return l_return_value;
101 
102  END copy_allowed;
103 
104  /**
105   * Bug 5143307, Helper function to check if mapping of events required for the given deliverable
106   * type and on the target doc type
107   */
108  FUNCTION event_mapping_allowed(p_deliverable_type IN VARCHAR2,
109                                 p_target_doc_type IN VARCHAR2)
110             RETURN BOOLEAN
111   IS
112 
113    CURSOR C_delTypeExists (x_deliverable_type VARCHAR2,
114                            x_doc_type VARCHAR2) is
115     SELECT 'X'
116     FROM
117      okc_bus_doc_types_b doctyp,
118      okc_del_bus_doc_combxns deltypcomb
119      WHERE
120      doctyp.document_type_class = deltypcomb.document_type_class
121      AND doctyp.document_type = x_doc_type
122      AND deltypcomb.deliverable_type_code = x_deliverable_type;
123 
124      l_api_name CONSTANT VARCHAR2(30) :='event_mapping_allowed';
125      l_return_value BOOLEAN := FALSE;
126 
127       C_delTypeExists_rec  C_delTypeExists%ROWTYPE;
128   BEGIN
129 
130     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
131     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.event_mapping_allowed ');
132          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
133                          ,'101: p_deliverable_type = '||p_deliverable_type);
134          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
135                          ,'102: p_target_doc_type = '||p_target_doc_type);
136   END IF;
137 
138      IF p_deliverable_type is null OR p_target_doc_type is null THEN
139          return l_return_value;
140      END IF;
141 
142      -- check if deliverable type exists for the target document type
143      OPEN C_delTypeExists (p_deliverable_type, p_target_doc_type);
144          FETCH C_delTypeExists into C_delTypeExists_rec;
145 
146      IF C_delTypeExists%FOUND THEN
147     l_return_value := TRUE;
148      ELSE
149     l_return_value := FALSE;
150      END IF; -- IF C_delTypeExists%FOUND
151 
152      IF C_delTypeExists%ISOPEN THEN
153        CLOSE C_delTypeExists;
154      END IF;
155 
156      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
157          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
158                          ,'104: Returning l_return_value =  ');
159      END IF;
160      return l_return_value;
161 
162    EXCEPTION
163     WHEN OTHERS THEN
164       IF C_delTypeExists%ISOPEN THEN
165        CLOSE C_delTypeExists;
166       END IF;
167       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
168            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
169                           ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
170       END IF;
171 
172      return l_return_value;
173 
174  END event_mapping_allowed;
175 
176  /**
177   * Bug 5143307, Helper function to resolve target doc event id (start or end)
178   * for the given source doc event id
179   */
180  FUNCTION resolveTargetDocEvent(p_source_event_id IN NUMBER,
181                                 p_target_doc_type IN VARCHAR2) return NUMBER IS
182 
183   CURSOR C_sourceEventCode (x_sourceEventId NUMBER) is
184   select business_event_code, before_after
185   from  okc_bus_doc_events_b
186   where bus_doc_event_id = x_sourceEventId;
187 
188   CURSOR C_targetEventId (x_sourceEventCode VARCHAR2,
189                           x_targetBusDocType VARCHAR2,
190                           x_sourceBeforeAfter VARCHAR2) is
191   select bus_doc_event_id
192   from  okc_bus_doc_events_b
193   where business_event_code = x_sourceEventCode
194   and bus_doc_type = x_targetBusDocType
195   and before_after = x_sourceBeforeAfter;
196 
197   CURSOR C_targetEventId2 (x_sourceEventCode VARCHAR2,
198                            x_targetBusDocType VARCHAR2,
199                            x_sourceBeforeAfter VARCHAR2) is
200   select bus_doc_event_id
201   from  okc_bus_doc_events_b
202   where business_event_code = x_sourceEventCode
203   and before_after = x_sourceBeforeAfter
204   and bus_doc_type in (select target_response_doc_type from okc_bus_doc_types_b
205                        where document_type = x_targetBusDocType);
206 
207   l_api_name  CONSTANT VARCHAR2(30) :='resolveTargetDocEvent';
208   l_source_event_code okc_bus_doc_events_b.business_event_code%TYPE:=null;
209   l_source_before_after okc_bus_doc_events_b.before_after%TYPE:=null;
210   l_target_event_id okc_bus_doc_events_b.bus_doc_event_id%TYPE:=null;
211 
212  Begin
213     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
214         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
215                         ,'100: Inside FUNCTION: resolveTargetDocEvent');
216         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
217                         ,'101: p_source_event_id = '||p_source_event_id);
218         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
219                         ,'102: p_target_doc_type = '||p_target_doc_type);
220     END IF;
221 
222     IF p_source_event_id is null OR p_target_doc_type is null THEN
223         return null;
224     END IF;
225 
226     -- get current source event code for the given event id
227     OPEN C_sourceEventCode (p_source_event_id);
228         FETCH C_sourceEventCode into l_source_event_code,l_source_before_after;
229     CLOSE C_sourceEventCode;
230 
231     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
232         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
233                         ,'103: Found l_source_event_code =  '||l_source_event_code);
234         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
235                         ,'103a: Found l_source_before_after =  '||l_source_before_after);
236     END IF;
237 
238     IF l_source_event_code is not null AND l_source_before_after is not null THEN
239         -- get target event id for the given source event code and target bus doc type
240         OPEN C_targetEventId (l_source_event_code, p_target_doc_type, l_source_before_after);
241             FETCH C_targetEventId into l_target_event_id;
242         CLOSE C_targetEventId;
243 
244         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
245             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
246                             ,'104: Found l_target_event_id =  '||l_target_event_id);
247         END IF;
248 
249         -- l_target_event_id is not resolved, it may be the case, p_target_doc_type
250         -- is a response doc type (AUCTION_RESPONSE, RFQ_RESPONSE, RFI_RESPONSE)
251         IF l_target_event_id is null THEN
252             -- get target event id for the given source event code and target
253             -- response doc type fetched from okc_bus_doc_types_b where doc_type
254             -- is p_target_doc_type
255             OPEN C_targetEventId2 (l_source_event_code, p_target_doc_type, l_source_before_after);
256                 FETCH C_targetEventId2 into l_target_event_id;
257             CLOSE C_targetEventId2;
258 
259             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
260                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
261                                 ,'105: Found l_target_event_id (RESPONSE DOC) =  '||l_target_event_id);
262             END IF;
263         END IF; -- IF l_target_event_id is null
264     END IF; -- IF l_source_event_code is not null
265 
266     return l_target_event_id;
267   EXCEPTION
268    WHEN OTHERS THEN
269      IF C_sourceEventCode%ISOPEN THEN
270      CLOSE C_sourceEventCode;
271      END IF;
272      IF C_targetEventId%ISOPEN THEN
273      CLOSE C_targetEventId;
274      END IF;
275      IF C_targetEventId2%ISOPEN THEN
276      CLOSE C_targetEventId2;
277      END IF;
278      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
279           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
280                          ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
281      END IF;
282 
283     return l_target_event_id;
284  END resolveTargetDocEvent;
285 
286  /**
287   * Helper method to return the Document Type Class for a given Business Document Type
288   *
289   */
290 
291  Function getDocTypeClass(p_bus_doctype IN VARCHAR2) return VARCHAR2 IS
292   cursor getDocClass is
293   select document_type_class
294   from okc_bus_doc_types_b
295   where document_type = p_bus_doctype;
296 
297   l_doc_type_class OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE;
298 
299  Begin
300   OPEN getDocClass;
301   FETCH getDocClass into l_doc_type_class;
302     If getDocClass%NOTFOUND then
303     l_doc_type_class := NULL;
304     End If;
305   CLOSE getDocClass;
306    return l_doc_type_class;
307   EXCEPTION
308    WHEN OTHERS THEN
309      If getDocClass%ISOPEN then
310      CLOSE getDocClass;
311      End If;
312      l_doc_type_class := NULL;
313      return l_doc_type_class;
314 
315  End getDocTypeClass;
316 
317 /**
318  * Helper Function to return all the attributes of a given Business Document Type
319  *
320  */
321  Function getBusDocTypeInfo(p_bus_doc_type IN VARCHAR2) RETURN BUSDOCTYPE_REC_TYPE IS
322 
323   l_bus_doc_type_rec BUSDOCTYPE_REC_TYPE;
324   CURSOR getBusDocTypeInfo IS
325   select
326    document_type_class
327   ,intent
328   from
329   okc_bus_doc_types_b
330   where document_type = p_bus_doc_type;
331 
332  Begin
333   OPEN getBusDocTypeInfo;
334   FETCH getBusDocTypeInfo into
335    l_bus_doc_type_rec.document_type_class
336   ,l_bus_doc_type_rec.document_type_intent;
337     If getBusDocTypeInfo%NOTFOUND then
338      l_bus_doc_type_rec.document_type_class := NULL;
339   l_bus_doc_type_rec.document_type_intent := NULL;
340     End If;
341   CLOSE getBusDocTypeInfo;
342 
343      RETURN l_bus_doc_type_rec;
344 
345   EXCEPTION
346    WHEN OTHERS THEN
347     If getBusDocTypeInfo%ISOPEN then
348       CLOSE getBusDocTypeInfo;
349     End If;
350     RETURN l_bus_doc_type_rec;
351 
352  End getBusDocTypeInfo;
353 
354 /**
355   * Helper method to return the Internal_flag for a given Deliverable_type and a given document type class
356   */
357    Function getDelTypeIntFlag(p_document_type_class IN VARCHAR2,
358                               p_deliverable_type IN VARCHAR2) RETURN VARCHAR2 IS
359     -- updated cursor for bug#4069955
360    CURSOR getDelTypeIntFlag IS
361    select delTyp.internal_flag
362    from okc_deliverable_types_b delTyp,
363    okc_del_bus_doc_combxns delComb
364    where delTyp.deliverable_type_code = p_deliverable_type
365    and delComb.deliverable_type_code = delTyp.deliverable_type_code
366    and delComb.document_type_class = p_document_type_class;
367 
368 
369    l_del_type_int_flag     OKC_DELIVERABLE_TYPES_B.INTERNAL_FLAG%TYPE;
370 
371    Begin
372     OPEN getDelTypeIntFlag;
373     FETCH getDelTypeIntFlag into l_del_type_int_flag;
374     If getDelTypeIntFlag%NOTFOUND then
375       l_del_type_int_flag := NULL;
376     End If;
377     CLOSE getDelTypeIntFlag;
378       return l_del_type_int_flag;
379    EXCEPTION
380        WHEN OTHERS THEN
381       If getDelTypeIntFlag%ISOPEN then
382          close getDelTypeIntFlag;
383       End If;
384       l_del_type_int_flag := NULL;
385          return l_del_type_int_flag;
386    End getDelTypeIntFlag;
387 
388    /**
389     * Helper method to return Event Code and Before After value for given
390     * event id, stored in OKC_DELIVERABLES
391     */
392    PROCEDURE getDelEventDetails(
393     p_event_id IN NUMBER,
394     p_end_event_yn IN varchar2,
395     x_event_name OUT NOCOPY VARCHAR2,
396     x_event_full_name OUT NOCOPY VARCHAR2)
397     IS
398     l_api_name        CONSTANT VARCHAR2(30) := 'getDelEventDetails';
399 
400     BEGIN
401            SELECT business_event_code, event_name into x_event_name, x_event_full_name
402            FROM OKC_BUS_DOC_EVENTS_V
403            WHERE bus_doc_event_id = p_event_id;
404     EXCEPTION
405         WHEN OTHERS THEN
406         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
407             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
408         END IF;
409       Okc_Api.Set_Message(G_APP_NAME,
410                         'OKC_DEL_ERR_EVT_DTLS');
411         RAISE FND_API.G_EXC_ERROR;
412 
413   END;
414 
415 /*    FUNCTION isQaMessageAlreadyExist(p_event_id NUMBER,
416                                      p_list_events_tbl VerifiedEventsTbl)
417     RETURN VARCHAR2
418     IS
419     BEGIN
420 
421       IF p_list_events_tbl.count > 0 THEN
422          FOR k IN
423              p_list_events_tbl.FIRST..p_list_events_tbl.LAST LOOP
424 
425              IF p_event_id = p_list_events_tbl(k) THEN
426                 return 'Y';
427              END IF;
428          END LOOP;
429       END IF;
430 
431       return 'N';
432     END isQaMessageAlreadyExist; */
433 
434     /**
435      * Resolve date, for given event id and event codes/dates from table of records
436      */
437     FUNCTION resolveRelativeDueEvents(
438                             p_bus_doc_date_events_tbl   IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
439                             p_event_id IN NUMBER,
440                             p_end_event_yn IN VARCHAR2,
441                             px_event_full_name OUT NOCOPY VARCHAR2,
442                             px_not_matched_flag OUT NOCOPY VARCHAR2,
443                             px_event_code OUT NOCOPY VARCHAR2)
444     return DATE
445     IS
446          l_api_name CONSTANT VARCHAR2(30) := 'resolveRelativeDueEvents';
447          l_del_event_name OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
448          l_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE := null;
449          l_actual_date DATE := NULL;
450          l_not_matched_flag varchar2(1) := 'Y';
451 
452     BEGIN
453 
454       -- start procedure
455       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
456          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered '||G_PKG_NAME ||'.'||l_api_name);
457       END IF;
458       IF p_event_id is NULL THEN
459            Okc_Api.Set_Message(G_APP_NAME,
460                           'OKC_DEL_NOT_RSLV_EVTS');
461            RAISE FND_API.G_EXC_ERROR;
462 
463       END IF;
464 
465           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
466              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Calling getDelEventDetails');
467           END IF;
468 
469           --- get current deliverable's end event details
470           getDelEventDetails(
471                p_event_id => p_event_id,
472                p_end_event_yn => p_end_event_yn,
473                x_event_name => l_del_event_name,
474                x_event_full_name => l_event_full_name);
475 
476           px_event_full_name := l_event_full_name;
477           px_event_code := l_del_event_name;
478 
479           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
480              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Finished getDelEventDetails - Event Name'||l_del_event_name);
481              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'102: Finished getDelEventDetails - Before After'||l_event_full_name);
482           END IF;
483 
484           --- if relative, check for event name with the given event names
485           --- in table of records.
486           IF p_bus_doc_date_events_tbl.count <> 0 THEN
487              FOR k IN
488                  p_bus_doc_date_events_tbl.FIRST..p_bus_doc_date_events_tbl.LAST LOOP
489                  IF p_bus_doc_date_events_tbl(k).event_code = l_del_event_name THEN
490 
491                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
492                        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'103: Event Matched '||l_del_event_name);
493                     END IF;
494 
495                     --- set the flag, that event is matched
496                     l_not_matched_flag := 'N';
497 
498                     --- Calculate actual date
499                     l_actual_date := p_bus_doc_date_events_tbl(k).event_date;
500                   END IF;
501              END LOOP;
502       END IF;
503 
504       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
505           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'104: Returning Resolved Date as '||l_actual_date);
506       END IF;
507         px_not_matched_flag := l_not_matched_flag;
508   return l_actual_date;
509 
510     END; --- resolveRelativeDueEvents
511 
512 
513     -- This function checks if the given deliverable has an attachment
514     FUNCTION attachment_exists(
515     p_entity_name IN VARCHAR2
516     ,p_pk1_value    IN VARCHAR2
517     ) RETURN BOOLEAN
518     IS
519     CURSOR att_cur IS
520     SELECT 'X'
521     FROM fnd_attached_documents
522     WHERE entity_name = p_entity_name
523     AND pk1_value  =  p_pk1_value;
524 
525     att_rec  att_cur%ROWTYPE;
526     l_return_value BOOLEAN := FALSE;
527     l_api_name VARCHAR2(30) := 'attachment_exists';
528 
529     BEGIN
530 
531             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
532                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.attachment_exists ');
533             END IF;
534             OPEN att_cur;
535             FETCH att_cur INTO att_rec;
536             IF att_cur%FOUND THEN
537                 l_return_value := TRUE;
538             ELSE
539                 l_return_value := FALSE;
540             END IF;
541             CLOSE att_cur;
542 
543             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
544                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Leaving attachment_exists ');
545             END IF;
546 
547       RETURN l_return_value;
548 
549     EXCEPTION
550     WHEN OTHERS THEN
551         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
552           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving attachment_exists with Exception');
553         END IF;
554         IF att_cur %ISOPEN THEN
555           CLOSE att_cur ;
556         END IF;
557           RETURN l_return_value;
558     END attachment_exists;
559 
560     /*** This API is invoked from OKC_TERMS_PVT.COPY_TC.
561     This API copies deliverables from one busdoc to another
562     of same type. Used in Sourcing amendment process.
563     1.  Verify if the source and target business documents
564     are of same Class. If Not, raise error.
565     2.  The procedure will query deliverables from source
566     business document WHERE amendment_operation is NOT 'DELETE'.
567     (The reson of this check: In case of RFQ, amendments operation
568     and descriptions are maintained in the current copy,
569     hence all deletes are just soft deletes.
570     So the copy procedure should not copy deliverables which
571     were deleted from the RFQ during amendment).
572     3.  Create instances of deliverables for p_target_doc_id
573     and p_target_doc_type, definition  copied from
574     p_source_doc_id and p_source_doc_type.
575     Carry forward original deliverable id. Copy attachments.
576     ***/
577     PROCEDURE copy_del_for_amendment (
578     p_api_version           IN NUMBER,
579     p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
580     p_source_doc_id         IN NUMBER,
581     p_source_doc_type       IN VARCHAR2,
582     p_target_doc_id         IN NUMBER,
583     p_target_doc_type       IN VARCHAR2,
584     p_target_doc_number     IN VARCHAR2,
585     p_reset_fixed_date_yn   IN VARCHAR2 ,
586     x_msg_data              OUT NOCOPY VARCHAR2,
587     x_msg_count             OUT NOCOPY NUMBER,
588     x_return_status         OUT NOCOPY VARCHAR2,
589     p_copy_del_attachments_yn   IN VARCHAR2 default 'Y',
590     p_target_contractual_doctype  IN  Varchar2 default null)
591     IS
592 
593     -- used '*' in place of column list because the datastructure
594     -- declared as table%ROWTYPE is structured based on column positions
595     -- in the database. When the cursor is selected into the datastructure
596     -- there is a mismatch.
597     CURSOR del_cur IS
598     SELECT *
599     FROM OKC_DELIVERABLES
600     WHERE business_document_id = p_source_doc_id
601     AND   business_document_type = p_source_doc_type
602     AND   NVL(amendment_operation,'NONE') <> 'DELETED'
603     AND   manage_yn = 'N'
604     AND   recurring_del_parent_id is null;
605     del_rec  del_cur%ROWTYPE;
606 
607 
608     CURSOR del_ins_cur(x NUMBER) IS
609     SELECT *
610     FROM okc_deliverables a
611     WHERE business_document_id = p_source_doc_id
612     AND   business_document_type = p_source_doc_type
613     AND   recurring_del_parent_id = x;
614     del_ins_rec   del_ins_cur%ROWTYPE;
615 
616     delRecTab       delRecTabType;
617     delInsTab       delRecTabType;
618     delNewTab       delRecTabType;
619     l_api_name      CONSTANT VARCHAR2(30) :='copy_del_for_amendment';
620     l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
621     l_deliverable_id NUMBER;
622    l_from_pk1_value   VARCHAR2(100);
623    l_result            BOOLEAN;
624    l_copy_attachments  VARCHAR2(1);
625    k PLS_INTEGER := 0;
626    m PLS_INTEGER := 0;
627    j PLS_INTEGER := 0;
628    q PLS_INTEGER := 0;
629     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
630     TYPE delIdTabType IS TABLE OF delIdRecType;
631     delIdTab    delIdTabType;
632     l_recurring_del_parent_id NUMBER;
633 
634    l_target_start_event_id okc_deliverables.relative_st_date_event_id%TYPE:=null;
635    l_target_end_event_id okc_deliverables.relative_end_date_event_id%TYPE:=null;
636 
637    	--Acq Plan Message Cleanup
638     l_resolved_msg_name VARCHAR2(30);
639     l_resolved_token VARCHAR2(100);
640     x_errorcode NUMBER;
641     BEGIN
642 
643       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
644               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
645                                         ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment'||
646                                         'p_source_doc_id = '||p_source_doc_id||
647                                         'p_source_doc_type = '||p_source_doc_type||
648                                         'p_target_doc_type = '||p_target_doc_type||
649                                         'p_target_doc_number = '||p_target_doc_number||
650                                         'p_reset_fixed_date_yn = '||p_reset_fixed_date_yn||
651                                         'p_copy_del_attachments_yn = '||p_copy_del_attachments_yn);
652       END IF;
653 
654       -- initialize the table type variable
655       delIdTab := delIdTabType();
656 
657       FOR del_rec IN del_cur LOOP
658           k := k+1;
659           delRecTab(k).deliverable_id := del_rec.deliverable_id;
660           delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
661           delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
662           delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
663           delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
664           delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
665           delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
666           delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
667           delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
668           delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
669           delRecTab(k).COMMENTS:= del_rec.COMMENTS;
670           delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
671           delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
672           delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
673           delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
674           delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
675           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
676           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
677           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
678           delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
679           delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
680           delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
681           delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
682           delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
683           delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
684           delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
685           delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
686           delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
687           delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
688           delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
689           delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
690           delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
691           delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
692           delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
693           delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
694           delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
695           delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
696           delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
697           delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
698           delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
699           delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
700           delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
701           delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
702           delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
703           delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
704           delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
705           delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
706           delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
707           delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
708           delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
709           delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
710           delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
711           delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
712           delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
713           delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
714           delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
715           delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
716           delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
717           delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
718           delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
719           delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
720           delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
721           delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
722           delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
723           delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
724           delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
725           delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
726           delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
727           delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
728           delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
729           delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
730           delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
731           delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
732           delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
733           delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
734           delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
735           delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
736           delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
737           delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
738           delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
739           delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
740           delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
741           delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
742           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
743           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
744           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
745           delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
746 
747          -- Support for Concurrent updates to deliverables
748          delRecTab(k).orig_system_reference_code:='COPY';
749          delRecTab(k).orig_system_reference_id1:= del_rec.deliverable_id;
750          delRecTab(k).orig_system_reference_id2:= null;
751          -- Support for Concurrent updates to deliverables
752          delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
753 
754           delRecTab(k).del_category_code := del_rec.del_category_code;
755           delRecTab(k).exhibit_code := del_rec.exhibit_code;
756           delRecTab(k).data_item_number:= del_rec.data_item_number;
757           delRecTab(k).price_group:= del_rec.price_group;
758           delRecTab(k).estimated_price:= del_rec.estimated_price;
759           delRecTab(k).uda_template_id:= del_rec.uda_template_id;
760           delRecTab(k).schedule_type:= del_rec.schedule_type;
761 
762       END LOOP;
763 
764       -- commented as this is not supported by 8i PL/SQL Bug#3307941
765       /*OPEN del_cur;
766       FETCH del_cur BULK COLLECT INTO delRecTab;*/
767       IF delRecTab.COUNT <> 0 THEN
768           FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
769               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
770                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Inside loop'||to_char(delRecTab(i).deliverable_id));
771               END IF;
772 
773               IF copy_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
774                                p_target_doc_type => p_target_doc_type,
775                                p_target_contractual_doc_type => p_target_contractual_doctype) THEN
776 
777                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
778                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101a: Copy ALLOWED');
779                   END IF;
780 
781                   j := j+1;
782                   q := q+1;
783 
784                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
785                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'102: deliverable table record = '||q);
786                   END IF;
787 
788                   delNewTab(q) := delRecTab(i);
789 
790                   -- extend table type
791                   delIdTab.extend;
792                   delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
793 
794                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
795                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'103: deliverable IDs table record = '||j);
796                   END IF;
797 
798                   select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
799 
800                   delNewTab(q).business_document_id := p_target_doc_id;
801                   delNewTab(q).business_document_type := p_target_doc_type;
802                   delNewTab(q).business_document_number := p_target_doc_number;
803 
804                   -- Bug 5143307, check if source and target do are not same
805                   -- resolve source document relative due date events to target
806                   -- document relative due date event
807                   -- first initialize
808                   l_target_start_event_id := null;
809                   l_target_end_event_id := null;
810                   IF p_source_doc_type <> p_target_doc_type
811                      AND
812                      event_mapping_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
813                                                             p_target_doc_type => p_target_doc_type) THEN
814 
815                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
816                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'104: Source and Target docs are NOT SAME ');
817                           END IF;
818 
819                           IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null THEN
820 
821                                   -- resolve target start event id
822                                   l_target_start_event_id := resolveTargetDocEvent(
823                                   p_source_event_id => delRecTab(i).RELATIVE_ST_DATE_EVENT_ID,
824                                   p_target_doc_type => p_target_doc_type);
825                                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
826                                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'105: Found l_target_start_event_id = '||l_target_start_event_id);
827                                   END IF;
828 
829                                   -- raise error if could not resolve target event id
830                                   IF l_target_start_event_id is null THEN
831 				  --Acq Plan Message Cleanup
832                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_COULD_NT_RESOLVE_EVT',del_rec.business_document_type);
833                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
834 
835 /*                                          Okc_Api.Set_Message(G_APP_NAME
836                                                     ,'OKC_DEL_COULD_NT_RESOLVE_EVT');*/
837 
838                                           Okc_Api.Set_Message(G_APP_NAME
839                                                     ,l_resolved_msg_name,
840                                                     p_token1 => 'DEL_TOKEN',
841                                                     p_token1_value => l_resolved_token);
842                                           RAISE FND_API.G_EXC_ERROR;
843                                   END IF;
844                           END IF; -- IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null
845 
846                           IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null THEN
847                                   -- resolve target end event id
848                                   l_target_end_event_id := resolveTargetDocEvent(
849                                   p_source_event_id => delRecTab(i).RELATIVE_END_DATE_EVENT_ID,
850                                   p_target_doc_type => p_target_doc_type);
851 
852                                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
853                                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'106: Found l_target_end_event_id = '||l_target_end_event_id);
854                                   END IF;
855 
856                                   -- raise error if could not resolve target event id
857                                   IF l_target_end_event_id is null THEN
858 
859 				  --Acq Plan Message Cleanup
860                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_COULD_NT_RESOLVE_EVT',del_rec.business_document_type);
861                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
862 
863 /*                                          Okc_Api.Set_Message(G_APP_NAME
864                                                     ,'OKC_DEL_COULD_NT_RESOLVE_EVT');*/
865 
866                                           Okc_Api.Set_Message(G_APP_NAME
867                                                     ,l_resolved_msg_name,
868                                                     p_token1 => 'DEL_TOKEN',
869                                                     p_token1_value => l_resolved_token);
870 
871                                           RAISE FND_API.G_EXC_ERROR;
872                                   END IF;
873                           END IF; -- IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null
874 
875                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
876                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'107: Setting NEW resolved Start Event and End Event Ids');
877                           END IF;
878 
879                           -- set resolved start and event ids on new delRecTab
880                           delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
881                           delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
882                   END IF; -- IF p_source_doc_type <> p_target_doc_type
883 
884                   -- bug#3489625 POCST: DELIVERABLE ATTACHMENTS ARE NOT COPIED TO AMENDMENT
885                   delIdTab(j).del_id := delNewTab(q).deliverable_id;
886 
887                   -- store the deliverable_id to assign to the instances
888                   l_recurring_del_parent_id := delNewTab(q).deliverable_id;
889 
890                   -- flush amendment operation attributes
891                   delNewTab(q).amendment_operation:= null;
892                   delNewTab(q).amendment_notes:= null;
893                   delNewTab(q).summary_amend_operation_code:= null;
894 
895                   -- fix bug 3667895, carrying forward last amendment date during amendments
896                   --delNewTab(q).last_amendment_date:= null;
897 
898                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
899                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'108: Inside loop1'||to_char(delNewTab(q).deliverable_id));
900                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'109: q in def loop'||to_char(q));
901                   END IF;
902 
903                 IF delRecTab(i).recurring_yn = 'N' THEN
904           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
905             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'110: Recurring?'||delRecTab(i).recurring_yn);
906           END IF;
907 
908                     -- initialize all resolved dates to null
909                     delNewTab(q).start_event_date:= null;
910                     delNewTab(q).end_event_date:= null;
911                     delNewTab(q).actual_due_date:= null;
912 
913                 ELSIF delRecTab(i).recurring_yn = 'Y' THEN
914                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
915                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'111: Recurring?'||delRecTab(i).recurring_yn);
916                     END IF;
917 
918                     --OPEN del_ins_cur(delRecTab(i).deliverable_id);
919                     --Initialize the table with 0 rows
920                     delInsTab.DELETE;
921                     m := 0;
922         FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
923       m := m+1;
924       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
925       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
926       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
927       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
928       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
929       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
930       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
931       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
932       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
933       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
934       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
935       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
936       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
937       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
938       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
939       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
940       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
941       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
942       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
943       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
944       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
945       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
946       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
947       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
948       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
949       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
950       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
951       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
952       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
953       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
954       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
955       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
956       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
957       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
958       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
959       delInsTab(m).EXTERNAL_PARTY_ROLE := del_ins_rec.EXTERNAL_PARTY_ROLE;
960       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
961       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
962       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
963       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
964       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
965       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
966       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
967       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
968       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
969       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
970       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
971       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
972       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
973       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
974       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
975       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
976       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
977       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
978       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
979       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
980       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
981       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
982       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
983       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
984       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
985       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
986       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
987       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
988       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
989       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
990       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
991       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
992       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
993       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
994       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
995       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
996       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
997       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
998       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
999       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
1000       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
1001       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
1002       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
1003       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
1004       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
1005       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
1006       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
1007       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
1008       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
1009       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
1010       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
1011       delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
1012 
1013            delInsTab(m).orig_system_reference_code :='COPY';
1014            delInsTab(m).orig_system_reference_id1 :=del_ins_rec.deliverable_id;
1015            delInsTab(m).orig_system_reference_id2 :=null;
1016 
1017           delInsTab(m).del_category_code := del_ins_rec.del_category_code;
1018           delInsTab(m).exhibit_code := del_ins_rec.exhibit_code;
1019           delInsTab(m).data_item_number:= del_ins_rec.data_item_number;
1020           delInsTab(m).price_group:= del_ins_rec.price_group;
1021           delInsTab(m).estimated_price:= del_ins_rec.estimated_price;
1022 
1023           delInsTab(m).uda_template_id:= del_ins_rec.uda_template_id;
1024           delInsTab(m).schedule_type:= del_ins_rec.schedule_type;
1025 
1026                     END LOOP;
1027                     IF del_ins_cur %ISOPEN THEN
1028                       CLOSE del_ins_cur ;
1029                     END IF;
1030 
1031                     /****
1032                     commented as this is not supported by 8i PL/SQL Bug#3307941
1033               OPEN del_ins_cur(delRecTab(i).deliverable_id);
1034                     FETCH del_ins_cur BULK COLLECT INTO delInsTab;****/
1035 
1036                     IF delInsTab.COUNT <> 0 THEN
1037                       FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
1038                           j := j+1;
1039                           q := q+1;
1040                           delNewTab(q) := delInsTab(s);
1041 
1042                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1043                               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'112: Deliverable Instance record = '||q);
1044                           END IF;
1045 
1046                           -- extend table type
1047                           delIdTab.extend;
1048 
1049                           delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
1050 
1051                           select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
1052 
1053                           delNewTab(q).business_document_id := p_target_doc_id;
1054                           delNewTab(q).business_document_type := p_target_doc_type;
1055                           delNewTab(q).business_document_number := p_target_doc_number;
1056 
1057                           -- Bug 5143307, resolve target start and end events for
1058                           -- recurring instances, assuming these events are already
1059                           -- resolved above for recurring deliverable definition
1060                           IF p_source_doc_type <> p_target_doc_type THEN
1061                              IF l_target_start_event_id is not null THEN
1062                                      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1063                                              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'113: Setting Start Event Id on this instance = '||l_target_start_event_id);
1064                                      END IF;
1065 
1066                                      delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
1067                              END IF;
1068                              IF l_target_end_event_id is not null THEN
1069                                      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1070                                              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'114: Setting End Event Id on this instance = '||l_target_end_event_id);
1071                                      END IF;
1072 
1073                                     delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
1074                              END IF;
1075                           END IF; -- IF p_source_doc_type <> p_target_doc_type
1076 
1077                           -- instantiate parent del id for the instances
1078                           delNewTab(q).recurring_del_parent_id := l_recurring_del_parent_id;
1079                           delIdTab(j).del_id := delNewTab(q).deliverable_id;
1080 
1081                           -- flush amendment operation attributes
1082                           delNewTab(q).amendment_operation:= null;
1083                           delNewTab(q).amendment_notes:= null;
1084                           delNewTab(q).summary_amend_operation_code:= null;
1085                           delNewTab(q).last_amendment_date:= null;
1086                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1087                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'115: Inside loop2'||to_char(delNewTab(q).deliverable_id));
1088                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'116: q in ins loop'||to_char(q));
1089                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'117: s in ins loop'||to_char(s));
1090                           END IF;
1091             END LOOP;-- FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
1092           END IF; -- IF delInsTab.COUNT <> 0
1093                     IF del_ins_cur %ISOPEN THEN
1094                         CLOSE del_ins_cur ;
1095                     END IF;
1096                 END IF; -- ELSIF delRecTab(i).recurring_yn = 'Y'
1097               END IF; -- IF copy_allowed ()
1098             END LOOP; -- FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
1099       END IF;-- IF delRecTab.COUNT <> 0
1100       IF del_cur %ISOPEN THEN
1101         CLOSE del_cur ;
1102       END IF;
1103 
1104       IF delNewTab.COUNT <> 0 THEN
1105           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1106               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'118: Before insert');
1107           END IF;
1108           FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
1109               INSERT INTO okc_deliverables
1110                           (DELIVERABLE_ID,
1111                           BUSINESS_DOCUMENT_TYPE      ,
1112                           BUSINESS_DOCUMENT_ID        ,
1113                           BUSINESS_DOCUMENT_NUMBER    ,
1114                           DELIVERABLE_TYPE            ,
1115                           RESPONSIBLE_PARTY           ,
1116                           INTERNAL_PARTY_CONTACT_ID   ,
1117                           EXTERNAL_PARTY_CONTACT_ID   ,
1118                           DELIVERABLE_NAME            ,
1119                           DESCRIPTION                 ,
1120                           COMMENTS                    ,
1121                           DISPLAY_SEQUENCE            ,
1122                           FIXED_DUE_DATE_YN           ,
1123                           ACTUAL_DUE_DATE             ,
1124                           PRINT_DUE_DATE_MSG_NAME     ,
1125                           RECURRING_YN                ,
1126                           NOTIFY_PRIOR_DUE_DATE_VALUE ,
1127                           NOTIFY_PRIOR_DUE_DATE_UOM   ,
1128                           NOTIFY_PRIOR_DUE_DATE_YN    ,
1129                           NOTIFY_COMPLETED_YN         ,
1130                           NOTIFY_OVERDUE_YN           ,
1131                           NOTIFY_ESCALATION_YN        ,
1132                           NOTIFY_ESCALATION_VALUE     ,
1133                           NOTIFY_ESCALATION_UOM       ,
1134                           ESCALATION_ASSIGNEE         ,
1135                           AMENDMENT_OPERATION         ,
1136                           PRIOR_NOTIFICATION_ID       ,
1137                           AMENDMENT_NOTES             ,
1138                           COMPLETED_NOTIFICATION_ID   ,
1139                           OVERDUE_NOTIFICATION_ID     ,
1140                           ESCALATION_NOTIFICATION_ID  ,
1141                           LANGUAGE                    ,
1142                           ORIGINAL_DELIVERABLE_ID     ,
1143                           REQUESTER_ID                ,
1144                           EXTERNAL_PARTY_ID           ,
1145                           EXTERNAL_PARTY_ROLE         ,
1146                           RECURRING_DEL_PARENT_ID     ,
1147                           BUSINESS_DOCUMENT_VERSION   ,
1148                           RELATIVE_ST_DATE_DURATION   ,
1149                           RELATIVE_ST_DATE_UOM        ,
1150                           RELATIVE_ST_DATE_EVENT_ID   ,
1151                           RELATIVE_END_DATE_DURATION  ,
1152                           RELATIVE_END_DATE_UOM       ,
1153                           RELATIVE_END_DATE_EVENT_ID  ,
1154                           REPEATING_DAY_OF_MONTH      ,
1155                           REPEATING_DAY_OF_WEEK       ,
1156                           REPEATING_FREQUENCY_UOM     ,
1157                           REPEATING_DURATION          ,
1158                           FIXED_START_DATE            ,
1159                           FIXED_END_DATE              ,
1160                           MANAGE_YN                   ,
1161                           INTERNAL_PARTY_ID           ,
1162                           DELIVERABLE_STATUS          ,
1163                           STATUS_CHANGE_NOTES         ,
1164                           CREATED_BY                  ,
1165                           CREATION_DATE               ,
1166                           LAST_UPDATED_BY             ,
1167                           LAST_UPDATE_DATE            ,
1168                           LAST_UPDATE_LOGIN           ,
1169                           OBJECT_VERSION_NUMBER       ,
1170                           ATTRIBUTE_CATEGORY          ,
1171                           ATTRIBUTE1                  ,
1172                           ATTRIBUTE2                  ,
1173                           ATTRIBUTE3                  ,
1174                           ATTRIBUTE4                  ,
1175                           ATTRIBUTE5                  ,
1176                           ATTRIBUTE6                  ,
1177                           ATTRIBUTE7                  ,
1178                           ATTRIBUTE8                  ,
1179                           ATTRIBUTE9                  ,
1180                           ATTRIBUTE10                 ,
1181                           ATTRIBUTE11                 ,
1182                           ATTRIBUTE12                 ,
1183                           ATTRIBUTE13                 ,
1184                           ATTRIBUTE14                 ,
1185                           ATTRIBUTE15                 ,
1186                           DISABLE_NOTIFICATIONS_YN    ,
1187                           LAST_AMENDMENT_DATE         ,
1188                           BUSINESS_DOCUMENT_LINE_ID   ,
1189                           EXTERNAL_PARTY_SITE_ID      ,
1190                           START_EVENT_DATE            ,
1191                           END_EVENT_DATE              ,
1192                           SUMMARY_AMEND_OPERATION_CODE,
1193                           PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1194                           PAY_HOLD_PRIOR_DUE_DATE_UOM,
1195                           PAY_HOLD_PRIOR_DUE_DATE_YN,
1196                           PAY_HOLD_OVERDUE_YN
1197                           ,orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2,
1198                           RAISE_COMPLETION_EVENT_YN,
1199                          del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
1200                          uda_template_id ,
1201                          schedule_type
1202                           )
1203                           VALUES (
1204                           delNewTab(i).DELIVERABLE_ID,
1205                           delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
1206                           delNewTab(i).BUSINESS_DOCUMENT_ID        ,
1207                           delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
1208                           delNewTab(i).DELIVERABLE_TYPE            ,
1209                           delNewTab(i).RESPONSIBLE_PARTY           ,
1210                           delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
1211                           delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
1212                           delNewTab(i).DELIVERABLE_NAME            ,
1213                           delNewTab(i).DESCRIPTION                 ,
1214                           delNewTab(i).COMMENTS                    ,
1215                           delNewTab(i).DISPLAY_SEQUENCE            ,
1216                           delNewTab(i).FIXED_DUE_DATE_YN           ,
1217                           delNewTab(i).ACTUAL_DUE_DATE             ,
1218                           delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
1219                           delNewTab(i).RECURRING_YN                ,
1220                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
1221                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
1222                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
1223                           delNewTab(i).NOTIFY_COMPLETED_YN         ,
1224                           delNewTab(i).NOTIFY_OVERDUE_YN           ,
1225                           delNewTab(i).NOTIFY_ESCALATION_YN        ,
1226                           delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
1227                           delNewTab(i).NOTIFY_ESCALATION_UOM       ,
1228                           delNewTab(i).ESCALATION_ASSIGNEE         ,
1229                           delNewTab(i).AMENDMENT_OPERATION         ,
1230                           delNewTab(i).PRIOR_NOTIFICATION_ID       ,
1231                           delNewTab(i).AMENDMENT_NOTES             ,
1232                           delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
1233                           delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
1234                           delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
1235                           delNewTab(i).LANGUAGE                    ,
1236                           delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
1237                           delNewTab(i).REQUESTER_ID                ,
1238                           delNewTab(i).EXTERNAL_PARTY_ID           ,
1239                           delNewTab(i).EXTERNAL_PARTY_ROLE         ,
1240                           delNewTab(i).RECURRING_DEL_PARENT_ID     ,
1241                           delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
1242                           delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
1243                           delNewTab(i).RELATIVE_ST_DATE_UOM        ,
1244                           delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
1245                           delNewTab(i).RELATIVE_END_DATE_DURATION  ,
1246                           delNewTab(i).RELATIVE_END_DATE_UOM       ,
1247                           delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
1248                           delNewTab(i).REPEATING_DAY_OF_MONTH      ,
1249                           delNewTab(i).REPEATING_DAY_OF_WEEK       ,
1250                           delNewTab(i).REPEATING_FREQUENCY_UOM     ,
1251                           delNewTab(i).REPEATING_DURATION          ,
1252                           delNewTab(i).FIXED_START_DATE            ,
1253                           delNewTab(i).FIXED_END_DATE              ,
1254                           delNewTab(i).MANAGE_YN                   ,
1255                           delNewTab(i).INTERNAL_PARTY_ID           ,
1256                           delNewTab(i).DELIVERABLE_STATUS          ,
1257                           delNewTab(i).STATUS_CHANGE_NOTES         ,
1258                           delNewTab(i).CREATED_BY                  ,
1259                           delNewTab(i).CREATION_DATE               ,
1260                           delNewTab(i).LAST_UPDATED_BY             ,
1261                           delNewTab(i).LAST_UPDATE_DATE            ,
1262                           delNewTab(i).LAST_UPDATE_LOGIN           ,
1263                           delNewTab(i).OBJECT_VERSION_NUMBER       ,
1264                           delNewTab(i).ATTRIBUTE_CATEGORY          ,
1265                           delNewTab(i).ATTRIBUTE1                  ,
1266                           delNewTab(i).ATTRIBUTE2                  ,
1267                           delNewTab(i).ATTRIBUTE3                  ,
1268                           delNewTab(i).ATTRIBUTE4                  ,
1269                           delNewTab(i).ATTRIBUTE5                  ,
1270                           delNewTab(i).ATTRIBUTE6                  ,
1271                           delNewTab(i).ATTRIBUTE7                  ,
1272                           delNewTab(i).ATTRIBUTE8                  ,
1273                           delNewTab(i).ATTRIBUTE9                  ,
1274                           delNewTab(i).ATTRIBUTE10                 ,
1275                           delNewTab(i).ATTRIBUTE11                 ,
1276                           delNewTab(i).ATTRIBUTE12                 ,
1277                           delNewTab(i).ATTRIBUTE13                 ,
1278                           delNewTab(i).ATTRIBUTE14                 ,
1279                           delNewTab(i).ATTRIBUTE15                 ,
1280                           delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
1281                           delNewTab(i).LAST_AMENDMENT_DATE         ,
1282                           delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
1283                           delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
1284                           delNewTab(i).START_EVENT_DATE            ,
1285                           delNewTab(i).END_EVENT_DATE              ,
1286                           delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
1287                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1288                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
1289                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
1290                           delNewTab(i).PAY_HOLD_OVERDUE_YN
1291                           ,delNewTab(i).orig_system_reference_code
1292                           , delNewTab(i).orig_system_reference_id1
1293                           , delNewTab(i).orig_system_reference_id2,
1294                           delNewTab(i).RAISE_COMPLETION_EVENT_YN
1295                           ,  delNewTab(i).del_category_code
1296                           ,  delNewTab(i).exhibit_code
1297                           ,  delNewTab(i).data_item_number
1298                           ,  delNewTab(i).price_group
1299                           ,  delNewTab(i).estimated_price
1300                           ,  delNewTab(i).uda_template_id
1301                           ,  delNewTab(i).schedule_type
1302                           );
1303 
1304             copy_deliverable_udas(
1305                   delNewTab(i).orig_system_reference_id1,
1306                   delNewTab(i).DELIVERABLE_ID,
1307                   x_return_status,
1308                   x_msg_count,
1309                   x_msg_data,
1310                   x_errorcode
1311                   );
1312             if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1313 	            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1314             END IF;
1315           END LOOP;
1316           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1317               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'119: New deliverables inserted');
1318           END IF;
1319       END IF; -- IF delNewTab.COUNT <> 0
1320 
1321       -- copy any existing attachments if allowed
1322       IF p_copy_del_attachments_yn = 'Y' THEN
1323 
1324           -- copy any existing attachments
1325           IF delIdTab.COUNT <> 0 THEN
1326               FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1327                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1328                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Inside loop'||to_char(delIdTab(i).del_id));
1329                   END IF;
1330                   -- check if attachments exists
1331                   IF attachment_exists(p_entity_name => G_ENTITY_NAME
1332                                       ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
1333 
1334                       -- copy attachments
1335                       -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
1336                       fnd_attached_documents2_pkg.copy_attachments(
1337                                   X_from_entity_name =>  G_ENTITY_NAME,
1338                                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
1339                                   X_to_entity_name   =>  G_ENTITY_NAME,
1340                                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
1341                                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
1342                                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
1343                                   );
1344                       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1345                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'121: Attachments copied for delId: '||to_char(delIdTab(i).del_id));
1346                       END IF;
1347                   END IF; -- IF attachment_exists()
1348               END LOOP; -- FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1349           END IF;--delRecTab.COUNT
1350       END IF; -- IF p_copy_del_attachments_yn = 'Y'
1351 
1352       x_return_status := l_return_status;
1353       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1354           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'122: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment' );
1355       END IF;
1356 
1357     EXCEPTION
1358     WHEN FND_API.G_EXC_ERROR THEN
1359             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1360                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_ERROR');
1361             END IF;
1362         IF del_cur %ISOPEN THEN
1363           CLOSE del_cur ;
1364         END IF;
1365     x_return_status := G_RET_STS_ERROR;
1366       FND_MSG_PUB.Count_And_Get(
1367         p_count =>  x_msg_count,
1368         p_data  =>  x_msg_data
1369         );
1370     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1371             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1372                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
1373             END IF;
1374         IF del_cur %ISOPEN THEN
1375           CLOSE del_cur ;
1376         END IF;
1377     x_return_status := G_RET_STS_UNEXP_ERROR;
1378       FND_MSG_PUB.Count_And_Get(
1379         p_count =>  x_msg_count,
1380         p_data  =>  x_msg_data
1381         );
1382 
1383     WHEN OTHERS THEN
1384             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1385                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
1386             END IF;
1387         IF del_cur %ISOPEN THEN
1388           CLOSE del_cur ;
1389         END IF;
1390         x_return_status := G_RET_STS_UNEXP_ERROR;
1391       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1392       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1393       END IF;
1394       FND_MSG_PUB.Count_And_Get(
1395         p_count =>  x_msg_count,
1396         p_data  =>  x_msg_data
1397         );
1398     END copy_del_for_amendment;
1399 
1400 
1401     -- this function checks if the a bus_doc_event exists
1402     -- for a given combination of busdoc_type and event_id
1403     FUNCTION event_matches(
1404     p_bus_doc_type  IN VARCHAR2
1405     ,p_event_id     IN NUMBER)
1406     RETURN BOOLEAN
1407     IS
1408 
1409     CURSOR event_cur
1410     IS
1411     SELECT 'X'
1412     FROM okc_bus_doc_events_b
1413     WHERE bus_doc_type = p_bus_doc_type
1414     AND   bus_doc_event_id = p_event_id;
1415 
1416     event_rec  event_cur%ROWTYPE;
1417     l_api_name        CONSTANT VARCHAR2(30) := 'event_matches';
1418     l_return_value BOOLEAN := FALSE;
1419 
1420     BEGIN
1421 
1422             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1423                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.event_matches');
1424             END IF;
1425             OPEN event_cur;
1426             FETCH event_cur INTO event_rec;
1427             IF event_cur%FOUND THEN
1428           l_return_value := TRUE;
1429             ELSE
1430           l_return_value := FALSE;
1431             END IF;
1432             CLOSE event_cur;
1433             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1434                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Leaving event_matches');
1435             END IF;
1436       RETURN l_return_value;
1437     EXCEPTION
1438     WHEN OTHERS THEN
1439         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1440           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving event_matches with Exception');
1441         END IF;
1442         IF event_cur %ISOPEN THEN
1443           CLOSE event_cur ;
1444         END IF;
1445           RETURN l_return_value;
1446     END event_matches;
1447 
1448 
1449     -- function returns Y if the busdoc type and
1450     -- deliverable type belong to the same class
1451     FUNCTION deltype_matches(p_del_type IN VARCHAR2
1452                           ,p_busdoc_type IN VARCHAR2)
1453     RETURN VARCHAR2
1454     IS
1455 
1456    /*
1457     CURSOR delType_cur IS
1458     select 'Y'
1459     FROM okc_bus_doc_types_b docType,
1460     okc_del_bus_doc_combxns bdc
1461     WHERE docType.document_type_class = bdc.document_type_class
1462     AND docType.document_type = p_busdoc_type
1463     and bdc.deliverable_type = p_del_type;
1464     */
1465    --Repository change: Changed cursor to look at okc_deliverable_types_b
1466     -- updated cursor for bug#4069955
1467     CURSOR delType_cur IS
1468     select 'Y'
1469     FROM
1470     okc_bus_doc_types_b doctyp
1471     ,okc_del_bus_doc_combxns deltyp
1472     where
1473     doctyp.document_type_class = deltyp.document_type_class
1474     AND doctyp.document_type = p_busdoc_type
1475     AND deltyp.deliverable_type_code = p_del_type;
1476 
1477     l_deltype_matches    VARCHAR2(1);
1478     l_api_name        CONSTANT VARCHAR2(30) := 'deltype_matches';
1479 
1480     BEGIN
1481 
1482     OPEN delType_cur;
1483     FETCH delType_cur INTO l_deltype_matches;
1484     CLOSE delType_cur;
1485         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1486           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: DelType Matches is :'||l_deltype_matches);
1487         END IF;
1488     RETURN(l_deltype_matches);
1489 
1490     EXCEPTION
1491     WHEN OTHERS THEN
1492         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1493           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving Deltype_Matches with Exception');
1494         END IF;
1495         IF delType_cur %ISOPEN THEN
1496           CLOSE delType_cur ;
1497         END IF;
1498             RETURN(l_deltype_matches);
1499 
1500     END deltype_matches;
1501 
1502 
1503     /* Checks if the relative deliverable can be copied over to target document
1504     based on start or end date event matching the target response document type.
1505     Fixed date deliverables are copied over even if the dates are null.
1506     */
1507     ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1508     -- where fixed dates are nulled out
1509     -- bug#3675608 added new param p_target_doctype to check if recurring del end event
1510     -- matches target_doctype.
1511 
1512     FUNCTION copy_response_allowed (p_delrec  IN   okc_deliverables%ROWTYPE
1513     ,p_target_response_doctype  IN VARCHAR2
1514     ,p_target_doctype  IN VARCHAR2
1515     ) RETURN VARCHAR2
1516     IS
1517     l_copy   VARCHAR2(1);
1518     l_start_copy   VARCHAR2(1);
1519     l_end_copy   VARCHAR2(1);
1520     l_api_name        CONSTANT VARCHAR2(30) := 'copy_response_allowed';
1521 
1522     BEGIN
1523 
1524       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1525         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' 100: Inside copy_response_allowed ');
1526         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1527         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn is :'||p_delrec.fixed_due_date_yn);
1528         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_response_doctype is :'||p_target_response_doctype);
1529         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name is :'||p_delrec.deliverable_name);
1530         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id is :'||p_delrec.deliverable_id);
1531         END IF;
1532                     --If not a recurring deliverable
1533                     IF p_delrec.recurring_yn = 'N' THEN
1534                         IF p_delrec.fixed_due_date_yn = 'Y' THEN
1535                         -- copy deliverable as is
1536                         l_copy := 'Y';
1537                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1538                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1539                             END IF;
1540                         ELSE  --  p_delrec.fixed_due_date_yn = 'N'
1541                             IF p_delrec.relative_st_date_event_id is not null THEN
1542                                 -- match the event doctype to target doctype
1543                                 IF p_target_response_doctype is not null THEN
1544                                     -- match the event doctype to p_target_response_doctype
1545                                         IF event_matches(p_target_response_doctype
1546                                             ,p_delrec.relative_st_date_event_id) THEN
1547                                             --copy deliverable
1548                                             l_copy := 'Y';
1549                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1550                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1551                                                 '100: msg3 :'||l_copy);
1552                                             END IF;
1553                                         END IF; -- event_matches
1554                                 ELSE
1555                                     l_copy :='N';
1556                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1557                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1558                                         '100: msg4 :'||l_copy);
1559                                     END IF;
1560                                 END IF; -- event_matches
1561                             ELSE -- start event id is null
1562                                 l_copy := 'Y';
1563                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1564                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1565                                     '100: msg5 :'||l_copy);
1566                                 END IF;
1567                             END IF; -- p_delrec.relative_st_date_event_id is not null
1568 
1569                         END IF; -- fixed_due_date_yn = 'Y'
1570                         --------------------------------------------------------
1571                     --If recurring deliverable
1572                     ELSIF p_delrec.recurring_yn = 'Y' THEN
1573                         l_end_copy := null;
1574                         l_start_copy := null;
1575                         -- check if the recurring del has a fixed start or end date
1576                         IF p_delrec.fixed_start_date is not null THEN
1577                             IF p_delrec.fixed_end_date is not null THEN
1578                                 --copy deliverables
1579                                 l_end_copy := 'Y';
1580                                 l_start_copy := 'Y';
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,
1583                                     '100: msg6 : both are Y');
1584                                 END IF;
1585                             ELSE -- fixed end date is null
1586                             IF p_delrec.relative_end_date_event_id is not null THEN
1587                                  IF p_target_response_doctype is not null THEN
1588                                     -- match the event doctype to p_target_response_doctype
1589                                         IF event_matches(p_target_response_doctype
1590                                         ,p_delrec.relative_end_date_event_id) THEN
1591                                         --copy deliverable
1592                                         l_end_copy := 'Y';
1593                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1594                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1595                                                 '100: end msg2 :'||l_end_copy);
1596                                             END IF;
1597                                         END IF;
1598                                  ELSE
1599                                     l_end_copy := 'N';
1600                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1601                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1602                                         '100: end msg3 :'||l_end_copy);
1603                                     END IF;
1604                                 END IF;  -- event matches
1605                             ELSE -- end date event is null
1606                                 l_end_copy := 'Y';
1607                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1608                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1609                                     '100: end msg4 :'||l_end_copy);
1610                                 END IF;
1611                             END IF; -- end_date event is not null
1612                             END IF; -- fixed_end_date is not null
1613                                 l_start_copy := 'Y';
1614                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1615                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1616                                     '100: start msg5 :'||l_start_copy);
1617                                 END IF;
1618                         ELSE  -- fixed start date is null
1619                           IF p_delrec.relative_st_date_event_id is not null THEN
1620                                 IF p_target_response_doctype is not null THEN
1621                                     IF event_matches(p_target_response_doctype
1622                                     ,p_delrec.relative_st_date_event_id) THEN
1623                                     --copy deliverable
1624                                     l_start_copy := 'Y';
1625                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1626                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1627                                             '100: start msg2 :'||l_start_copy);
1628                                         END IF;
1629                                     END IF;
1630                                 ELSE
1631                                     l_start_copy := 'N';
1632                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1633                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1634                                         '100: start msg3 :'||l_start_copy);
1635                                     END IF;
1636                                 END IF;
1637                           ELSE -- start date event id is null
1638                             l_start_copy := 'Y';
1639                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1640                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1641                                 '100: start msg4 :'||l_start_copy);
1642                             END IF;
1643                           END IF; -- st event id is not null
1644                             IF p_delrec.fixed_end_date is null THEN
1645                               IF p_delrec.relative_end_date_event_id is not null THEN
1646                                 IF p_target_response_doctype is not null THEN
1647                                     -- match the event doctype to p__doctype
1648                                         IF event_matches(p_target_response_doctype
1649                                         ,p_delrec.relative_end_date_event_id) THEN
1650                                         --copy deliverable
1651                                         l_end_copy := 'Y';
1652                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1653                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1654                                                 '100: start end msg2 :'||l_end_copy);
1655                                             END IF;
1656                                         ELSE  -- event_matches is not true
1657                                         --check for target_contractual bug#3675608
1658                                         IF event_matches(p_target_doctype
1659                                            ,p_delrec.relative_end_date_event_id) THEN
1660                                                 --copy deliverable
1661                                                 l_end_copy := 'Y';
1662                                         END IF;
1663                                         END IF; -- event_matches
1664 
1665                                 ELSE
1666                                    l_end_copy := 'N';
1667                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1668                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1669                                         '100: start end msg3 :'||l_end_copy);
1670                                     END IF;
1671                                 END IF; -- event matches
1672                               ELSE -- end event id is null
1673                                 l_end_copy := 'Y';
1674                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1675                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1676                                         '100: start end msg4 :'||l_end_copy);
1677                                     END IF;
1678                               END IF; -- end event id is not null
1679                              ELSE -- fixed end date is not null
1680                                l_end_copy := 'Y';
1681                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1682                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1683                                     '100: start end msg5 :'||l_end_copy);
1684                                 END IF;
1685                              END IF; -- fixed end date is null
1686 
1687                         END IF; -- fixed st date is null
1688                         IF l_end_copy = 'Y' AND
1689                            l_start_copy = 'Y' THEN
1690                            l_copy := 'Y';
1691                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1692                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1693                                 '100: final msg1 :'||l_copy);
1694                             END IF;
1695                         ELSE
1696                             l_copy := 'N';
1697                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1698                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1699                                 '100: final msg2 :'||l_copy);
1700                             END IF;
1701                         END IF;
1702                     END IF; -- recurring yn
1703       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1704         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1705       END IF;
1706     RETURN(l_copy);
1707     END copy_response_allowed;
1708 
1709 ------------------
1710     /* Checks if the relative deliverable can be copied over to target document
1711     based on start or end date event matching the target document type or
1712     target contractual document type. Fixed date deliverables are copied over
1713     even if the dates are null.
1714     */
1715     ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1716     -- where fixed dates are nulled out
1717     FUNCTION copy_allowed (p_delrec  IN   okc_deliverables%ROWTYPE,
1718     p_target_doc_type              IN VARCHAR2,
1719     p_target_contractual_doctype  IN VARCHAR2
1720     ) RETURN VARCHAR2
1721     IS
1722     l_copy   VARCHAR2(1);
1723     l_start_copy   VARCHAR2(1);
1724     l_end_copy   VARCHAR2(1);
1725     l_api_name        CONSTANT VARCHAR2(30) := 'copy_allowed';
1726 
1727     BEGIN
1728 
1729       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1730         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Inside copy_allowed' );
1731         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1732         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn :'||p_delrec.fixed_due_date_yn);
1733         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' target doc type :'||p_target_doc_type);
1734         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_contractual_doctype :'||p_target_contractual_doctype);
1735         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name :'||p_delrec.deliverable_name);
1736         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id :'||p_delrec.deliverable_id);
1737       END IF;
1738                     --If not a recurring deliverable
1739                     IF p_delrec.recurring_yn = 'N' THEN
1740                         IF p_delrec.fixed_due_date_yn = 'Y' THEN
1741                         -- copy deliverable as is
1742                         l_copy := 'Y';
1743                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1744                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1745                             END IF;
1746                         ELSE -- p_delrec.fixed_due_date_yn = 'N'
1747                             IF p_delrec.relative_st_date_event_id is not null THEN
1748                                 -- match the event doctype to target doctype
1749                                 IF event_matches(p_target_doc_type
1750                                 ,p_delrec.relative_st_date_event_id) THEN
1751                                 --copy deliverable
1752                                 l_copy := 'Y';
1753                                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1754                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1755                                         '100: msg2 :'||l_copy);
1756                                     END IF;
1757                                 ELSE
1758                                     l_copy :='N';
1759                                     IF p_target_contractual_doctype is not null THEN
1760                                     -- match the event doctype to p_target_contractual_doctype
1761                                         IF event_matches(p_target_contractual_doctype
1762                                             ,p_delrec.relative_st_date_event_id) THEN
1763                                             --copy deliverable
1764                                             l_copy := 'Y';
1765                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1766                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1767                                                 '100: msg3 :'||l_copy);
1768                                             END IF;
1769                                         END IF; -- event_matches
1770                                     END IF; -- p_target_contractual_doctype is not null
1771                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1772                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1773                                             '100: msg4 :'||l_copy);
1774                                         END IF;
1775                                 END IF; -- event_matches
1776                             ELSE -- start event id is null
1777                                 l_copy := 'Y';
1778                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1779                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1780                                     '100: msg5 :'||l_copy);
1781                                 END IF;
1782                             END IF; -- p_delrec.relative_st_date_event_id is not null
1783 
1784                         END IF; -- fixed_due_date_yn = 'Y'
1785                         --------------------------------------------------------
1786                     --If recurring deliverable
1787                     ELSIF p_delrec.recurring_yn = 'Y' THEN
1788                         l_end_copy := null;
1789                         l_start_copy := null;
1790                         -- check if the recurring del has a fixed start or end date
1791                         IF p_delrec.fixed_start_date is not null THEN
1792                             IF p_delrec.fixed_end_date is not null THEN
1793                                 --copy deliverables
1794                                 l_end_copy := 'Y';
1795                                 l_start_copy := 'Y';
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,
1798                                     '100: msg6 : both are Y');
1799                                 END IF;
1800                             ELSE -- fixed end date is null
1801                             IF p_delrec.relative_end_date_event_id is not null THEN
1802                                 IF event_matches(p_target_doc_type
1803                                    ,p_delrec.relative_end_date_event_id) THEN
1804                                     --copy deliverable
1805                                     l_end_copy := 'Y';
1806                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1807                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1808                                         '100: end msg1 :'||l_end_copy);
1809                                     END IF;
1810                                 ELSE
1811                                     l_end_copy := 'N';
1812                                     IF p_target_contractual_doctype is not null THEN
1813                                     -- match the event doctype to p_target_contractual_doctype
1814                                         IF event_matches(p_target_contractual_doctype
1815                                         ,p_delrec.relative_end_date_event_id) THEN
1816                                         --copy deliverable
1817                                         l_end_copy := 'Y';
1818                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1819                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1820                                                 '100: end msg2 :'||l_end_copy);
1821                                             END IF;
1822                                         END IF;
1823                                      END IF;
1824                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1825                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1826                                             '100: end msg3 :'||l_end_copy);
1827                                         END IF;
1828                                 END IF;  -- event matches
1829                             ELSE -- end date event is null
1830                                 l_end_copy := 'Y';
1831                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1832                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1833                                     '100: end msg4 :'||l_end_copy);
1834                                 END IF;
1835                             END IF; -- end_date event is not null
1836                             END IF; -- fixed_end_date is not null
1837                                 l_start_copy := 'Y';
1838                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1839                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1840                                     '100: start msg5 :'||l_start_copy);
1841                                 END IF;
1842                         ELSE  -- fixed start date is null
1843                           IF p_delrec.relative_st_date_event_id is not null THEN
1844                                 IF event_matches(p_target_doc_type
1845                                    ,p_delrec.relative_st_date_event_id) THEN
1846                                     --copy deliverable
1847                                     l_start_copy := 'Y';
1848                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1849                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1850                                         '100: start msg1 :'||l_start_copy);
1851                                     END IF;
1852                                 ELSE
1853                                     l_start_copy := 'N';
1854                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1855                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1856                                         '100: start msg2 :'||l_start_copy);
1857                                     END IF;
1858                                     IF p_target_contractual_doctype is not null THEN
1859                                         IF event_matches(p_target_contractual_doctype
1860                                             ,p_delrec.relative_st_date_event_id) THEN
1861                                             --copy deliverable
1862                                             l_start_copy := 'Y';
1863                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1864                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1865                                                 '100: start msg3 :'||l_start_copy);
1866                                             END IF;
1867                                         END IF; -- event matches
1868                                     END IF; -- target contractual not null
1869                                  END IF; -- event matches
1870                           ELSE -- start date event id is null
1871                             l_start_copy := 'Y';
1872                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1873                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1874                                     '100: start msg4 :'||l_start_copy);
1875                                 END IF;
1876                           END IF; -- st event id is not null
1877                             IF p_delrec.fixed_end_date is null THEN
1878                               IF p_delrec.relative_end_date_event_id is not null THEN
1879                                 IF event_matches(p_target_doc_type
1880                                 ,p_delrec.relative_end_date_event_id) THEN
1881                                     --copy deliverable
1882                                     l_end_copy := 'Y';
1883                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1884                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1885                                         '100: start end msg1 :'||l_end_copy);
1886                                     END IF;
1887                                 ELSE
1888                                    l_end_copy := 'N';
1889                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1890                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1891                                         '100: start end msg2 :'||l_end_copy);
1892                                     END IF;
1893                                     IF p_target_contractual_doctype is not null THEN
1894                                     -- match the event doctype to p_target_contractual_doctype
1895                                         IF event_matches(p_target_contractual_doctype
1896                                         ,p_delrec.relative_end_date_event_id) THEN
1897                                         --copy deliverable
1898                                         l_end_copy := 'Y';
1899                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1900                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1901                                                 '100: start end msg3 :'||l_end_copy);
1902                                             END IF;
1903                                         END IF; -- event matches
1904                                      END IF; -- target contractual not null
1905                                 END IF; -- event matches
1906                               ELSE -- end event id is null
1907                                 l_end_copy := 'Y';
1908                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1909                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1910                                         '100: start end msg4 :'||l_end_copy);
1911                                     END IF;
1912                               END IF; -- end event id is not null
1913                              ELSE -- fixed end date is not null
1914                                l_end_copy := 'Y';
1915                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1916                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1917                                     '100: start end msg5 :'||l_end_copy);
1918                                 END IF;
1919                              END IF; -- fixed end date is null
1920 
1921                         END IF; -- fixed st date is null
1922                         IF l_end_copy = 'Y' AND
1923                            l_start_copy = 'Y' THEN
1924                            l_copy := 'Y';
1925                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1926                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1927                                 '100: final msg1 :'||l_copy);
1928                             END IF;
1929                         ELSE
1930                             l_copy := 'N';
1931                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1932                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1933                                 '100: final msg2 :'||l_copy);
1934                             END IF;
1935                         END IF;
1936                     END IF; -- recurring yn
1937       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1938         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1939       END IF;
1940     RETURN(l_copy);
1941     END copy_allowed;
1942 ----------------------------------------------------------
1943 
1944     /*** This API is invoked from OKC_TERMS_PVT.COPY_TC.
1945     Copies deliverables from source to target documents
1946     Template to template, Template to Business document
1947     Busdoc to busdoc of same or different types.
1948     The procedure will query deliverables from source
1949     business document WHERE amendment_operation is NOT 'DELETE'.
1950     (The reason of this check: In case of RFQ, amendments operation
1951     and descriptions are maintained in the current copy,
1952     hence all deletes are just soft deletes.
1953     So the copy procedure should not copy deliverables which
1954     were deleted from the RFQ during amendment).
1955     Bug#4126344
1956     p_carry_forward_ext_party_yn: If set to Y carry forward following attributes
1957     from source doc in busdoc to busdoc copy
1958      external_party_contact_id,
1959      external_party_id,
1960      external_party_site_id,
1961      external_party_role
1962     Else reset from parameters
1963     p_carry_forward_int_contact_yn: If set to Y carry forward following attributes from source doc in busdoc to busdoc copy
1964      internal_party_contact_id,
1965     ***/
1966 
1967     PROCEDURE copy_deliverables (
1968         p_api_version           IN NUMBER,
1969         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1970         p_source_doc_id             IN NUMBER,
1971         p_source_doc_type           IN VARCHAR2,
1972         p_target_doc_id             IN NUMBER,
1973         p_target_doc_type           IN VARCHAR2,
1974         p_target_doc_number         IN VARCHAR2,
1975         p_target_contractual_doctype IN VARCHAR2 default null,
1976         p_target_response_doctype    IN VARCHAR2 default null,
1977         p_initialize_status_yn      IN VARCHAR2 default 'Y',
1978         p_copy_del_attachments_yn   IN VARCHAR2 default 'Y',
1979         p_internal_party_id         IN NUMBER default null,
1980         p_reset_fixed_date_yn       IN VARCHAR2 default 'N',
1981         p_internal_contact_id       IN NUMBER default null,
1982         p_external_party_id         IN NUMBER default null,
1983         p_external_party_site_id    IN NUMBER default null,
1984         p_external_contact_id       IN NUMBER default null,
1985         x_msg_data              OUT NOCOPY VARCHAR2,
1986         x_msg_count                 OUT NOCOPY NUMBER,
1987         x_return_status             OUT NOCOPY VARCHAR2,
1988         p_carry_forward_ext_party_yn  IN  VARCHAR2 default 'N',
1989         p_carry_forward_int_contact_yn IN  VARCHAR2 default 'Y'
1990        --,p_add_only_amend_deliverables IN VARCHAR2 := 'N'
1991        ,P_RETAIN_LOCK_DELIVERABLES_YN IN VARCHAR2 DEFAULT 'N'
1992         )
1993     IS
1994     CURSOR del_cur IS
1995     SELECT *
1996     FROM OKC_DELIVERABLES s
1997     WHERE business_document_id = p_source_doc_id
1998     AND   business_document_version = -99
1999     AND   business_document_type = p_source_doc_type
2000     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
2001     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
2002     AND   recurring_del_parent_id is null
2003    /* AND  (( p_add_only_amend_deliverables = 'N')
2004           OR
2005          ( p_add_only_amend_deliverables = 'Y'
2006            AND  amendment_operation IS NOT NULL
2007           )) */
2008     AND  (  (p_source_doc_type <> 'TEMPLATE')
2009              OR
2010              (  p_source_doc_type = 'TEMPLATE'
2011                 AND NOT EXISTS ( SELECT 'Y'
2012                                    FROM okc_deliverables    t
2013                                  WHERE  t.original_deliverable_id   = s.original_deliverable_id
2014                                  AND    t.business_document_type    = p_target_doc_type
2015                                  AND    t.business_document_id      = p_target_doc_id
2016                                  AND    t.business_document_version = -99
2017                                 )
2018               )
2019            )
2020      AND (
2021            (P_RETAIN_LOCK_DELIVERABLES_YN = 'N')
2022               OR
2023            ( P_RETAIN_LOCK_DELIVERABLES_YN = 'Y'
2024              AND NOT EXISTS ( SELECT 'LOCKEXISTS'
2025                                FROM  okc_k_entity_locks
2026                               WHERE  entity_name='DELIVERABLE'
2027                                AND   entity_pk1 = To_Char(s.deliverable_id)
2028                                AND   lock_by_document_type=p_target_doc_type
2029                                AND   lock_by_document_id=p_target_doc_id
2030                              )
2031          )
2032         )
2033     ;
2034 
2035     delRecTab           delRecTabType;
2036     delNewTab           delRecTabType;
2037     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
2038     TYPE delIdTabType IS TABLE OF delIdRecType;
2039     delIdTab    delIdTabType;
2040     j PLS_INTEGER := 0;
2041     k PLS_INTEGER := 0;
2042     l_api_name      CONSTANT VARCHAR2(30) :='copy_deliverables';
2043     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
2044     l_deliverable_id    NUMBER;
2045     l_from_pk1_value    VARCHAR2(100);
2046     l_result            BOOLEAN;
2047     l_copy              VARCHAR2(1) := 'N';
2048     l_copy_attachments  VARCHAR2(1) := 'N';
2049         --ER strivedi
2050     l_doc_type_class okc_bus_doc_types_b.document_type_class%TYPE;
2051     l_ccc_event_id number;
2052 
2053     -- 11.5.10+ code bug#4148082
2054     cursor getExtPartyRole is
2055     select resp.resp_party_code
2056     from okc_resp_parties_b resp, okc_bus_doc_types_b busdoc
2057     where resp.document_type_class = busdoc.document_type_class
2058     and resp.intent = busdoc.intent
2059     and resp.internal_external_flag = 'EXTERNAL'
2060     and busdoc.document_type = p_target_doc_type;
2061     l_ext_party_role  okc_resp_parties_b.resp_party_code%TYPE;
2062 
2063     --ER Structured Terms Authoring in Repository strivedi
2064     CURSOR getRepDefaultInternalContactId IS
2065     SELECT pf.person_id contact_id
2066     FROM  per_all_workforce_v  pf,fnd_user fu
2067     WHERE fu.user_id = fnd_global.user_id
2068     AND   pf.person_id = fu.employee_id;
2069     l_rep_dflt_int_contact_id okc_deliverables.INTERNAL_PARTY_CONTACT_ID%TYPE;
2070     --End of ER Code Modifications
2071     x_errorcode NUMBER;
2072     BEGIN
2073             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2074                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
2075                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
2076                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
2077                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target contractual doctype:'||p_target_contractual_doctype);
2078                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target response doctype:'||p_target_response_doctype);
2079                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: P_RETAIN_LOCK_DELIVERABLES_YN :'||P_RETAIN_LOCK_DELIVERABLES_YN);
2080 
2081             END IF;
2082                 -- initialize the table type variable
2083                 delIdTab := delIdTabType();
2084 
2085         FOR del_rec IN del_cur LOOP
2086 
2087       k := k+1;
2088       delRecTab(k).deliverable_id := del_rec.deliverable_id;
2089       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
2090       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
2091       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
2092       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
2093       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
2094       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
2095       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
2096       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
2097       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
2098       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
2099       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
2100       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
2101       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
2102       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
2103       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
2104       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
2105       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
2106       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
2107       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
2108       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
2109       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
2110       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
2111       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
2112       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
2113       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
2114       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
2115       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
2116       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
2117       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
2118       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
2119       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
2120       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
2121       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
2122       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
2123       delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
2124       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
2125       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
2126       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
2127       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
2128       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
2129       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
2130       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
2131       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
2132       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
2133       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
2134       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
2135       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
2136       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
2137       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
2138       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
2139       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
2140       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
2141       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
2142       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
2143       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
2144       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
2145       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
2146       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
2147       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
2148       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
2149       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
2150       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
2151       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
2152       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
2153       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
2154       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
2155       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
2156       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
2157       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
2158       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
2159       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
2160       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
2161       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
2162       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
2163       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
2164       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
2165       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
2166       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
2167       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
2168       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
2169       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
2170       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
2171       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
2172       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
2173       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
2174       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
2175       -- Support for Concurrent updates to deliverables
2176       delRecTab(k).orig_system_reference_code:='COPY';
2177       delRecTab(k).orig_system_reference_id1:= del_rec.deliverable_id;
2178       delRecTab(k).orig_system_reference_id2:= null;
2179       -- Support for Concurrent updates to deliverables
2180       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
2181 
2182       -- CDRL Project Start
2183       delRecTab(k).del_category_code := del_rec.del_category_code;
2184       delRecTab(k).exhibit_code := del_rec.exhibit_code;
2185       delRecTab(k).data_item_number:= del_rec.data_item_number;
2186       delRecTab(k).price_group:= del_rec.price_group;
2187       delRecTab(k).estimated_price:= del_rec.estimated_price;
2188       -- CDRL Project End
2189       delRecTab(k).uda_template_id := del_rec.uda_template_id;
2190       delRecTab(k).schedule_type :=  del_rec.schedule_type;
2191 
2192             END LOOP;
2193         IF del_cur %ISOPEN THEN
2194           CLOSE del_cur ;
2195         END IF;
2196             -- commented as this is not supported by 8i PL/SQL Bug#3307941
2197             /*OPEN del_cur;
2198             FETCH del_cur BULK COLLECT INTO delRecTab;*/
2199 
2200 
2201 
2202         IF p_source_doc_type = 'TEMPLATE' THEN
2203             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2204                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
2205             END IF;
2206             -- copy from template to template
2207             IF p_target_doc_type = 'TEMPLATE' THEN
2208             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2209                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
2210             END IF;
2211 
2212                /*** OPEN del_cur;
2213                 FETCH del_cur BULK COLLECT INTO delRecTab;**/
2214                 IF delRecTab.COUNT <> 0 THEN
2215                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2216                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2217                     END IF;
2218                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2219                     j := j+1;
2220                     -- extend table type
2221                     delIdTab.extend;
2222                     delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2223                     delNewTab(j) := delRecTab(i);
2224                     select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
2225                     delIdTab(j).del_id := delNewTab(j).deliverable_id;
2226                     delNewTab(j).original_deliverable_id :=  delNewTab(j).deliverable_id;
2227                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2228                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2229                     END IF;
2230                     -- bug# 4335441 If p_internal_party_id is not null then assign it to new Template
2231                     IF p_internal_party_id is not null THEN
2232                         delNewTab(j).internal_party_id := p_internal_party_id;
2233                     END IF;
2234 
2235                 END LOOP;
2236                 END IF;-- cur_del%notfound
2237 ---------------------------------------------------------------------------------
2238             -- copy from template to business document
2239             -- example template to RFQ
2240             ELSIF p_target_doc_type <> 'TEMPLATE' THEN
2241             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2242                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is not template');
2243             END IF;
2244 
2245                 IF p_target_contractual_doctype is not null THEN
2246                /*** OPEN del_cur;
2247                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2248                 IF delRecTab.COUNT <> 0 THEN
2249                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2250                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2251                         ,'100: target_contractual_doctype is not null and '||
2252                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2253                     END IF;
2254                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2255                     -- initialize
2256                     l_copy := 'N';
2257                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2258                     p_target_contractual_doctype);
2259                     IF l_copy = 'Y' THEN
2260                         j := j+1;
2261                         -- extend table type
2262                         delIdTab.extend;
2263                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2264                         delNewTab(j) := delRecTab(i);
2265                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2266                         from dual;
2267                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2268                         -- If party and contact info is null then assign the parameter values
2269                         delNewTab(j).internal_party_id :=
2270                         NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2271                         delNewTab(j).internal_party_contact_id :=
2272                         NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2273                         -- Nullout external party attributes as there are no external
2274                         -- parties on Negotiation document
2275                         delNewTab(j).external_party_contact_id := null;
2276                         delNewTab(j).external_party_id := null;
2277             delNewTab(j).external_party_role := null;
2278                         delNewTab(j).external_party_site_id := null;
2279                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2280                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2281                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2282                         END IF;
2283                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2284                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2285                             IF l_copy = 'Y' THEN
2286                                 j := j+1;
2287                                 -- extend table type
2288                                 delIdTab.extend;
2289                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2290                                 delNewTab(j) := delRecTab(i);
2291                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2292                                 from dual;
2293                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2294                                 -- If party and contact info is null then assign the parameter values
2295                                 delNewTab(j).internal_party_id :=
2296                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2297                                 delNewTab(j).internal_party_contact_id :=
2298                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2299                                 -- Nullout external party attributes as there are no external
2300                                 -- parties on Negotiation document
2301                                 delNewTab(j).external_party_contact_id := null;
2302                                 delNewTab(j).external_party_id := null;
2303               delNewTab(j).external_party_role := null;
2304                                 delNewTab(j).external_party_site_id := null;
2305                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2306                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2307                                 ,'100: New Deliverable Id from copy_response_allowed :'||
2308                                 to_char(delNewTab(j).deliverable_id));
2309                                 END IF;
2310                             END IF;
2311                     END IF;-- l_copy is 'Y'
2312                 END LOOP;
2313                 END IF; -- del_cur%NOTFOUND
2314 
2315                 /*** This copy is from template to contract.
2316                 Only contractual, internal purchasing deliverables are copied
2317                 Template to SPO or RFI ****/
2318                ELSIF p_target_contractual_doctype is null THEN
2319 
2320                                 -- bug#4148082 set ext party role during template to PO copy
2321                                 OPEN getExtPartyRole;
2322                                 FETCH getExtPartyRole INTO l_ext_party_role;
2323                                 CLOSE getExtPartyRole;
2324 
2325 				-- ER Structured Terms Authoring in Repository strivedi
2326                                 OPEN getRepDefaultInternalContactId;
2327                                 FETCH getRepDefaultInternalContactId INTO l_rep_dflt_int_contact_id;
2328                                 CLOSE getRepDefaultInternalContactId;
2329                 /***OPEN del_cur;
2330                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2331                 IF delRecTab.COUNT <> 0 THEN
2332                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2333                     -- initialize
2334                     l_copy := 'N';
2335                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2336                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2337                       '100: Old Deliverable Id :'||to_char(delRecTab(i).deliverable_id));
2338                    END IF;
2339 
2340 
2341                   --ER Repository Structured Terms Authoring
2342                   --  if the target document type is a repository contract type, then Change the deliverable type
2343                   --  from INTERNAL_PURCHASING to INTERNAL as  INTERNAL_PURCHASING is not supported by repository.
2344                   l_doc_type_class := getDocTypeClass(p_target_doc_type);
2345 
2346                   IF l_doc_type_class = 'REPOSITORY' THEN
2347                     IF delRecTab(i).deliverable_type = 'INTERNAL_PURCHASING' THEN
2348                       delRecTab(i).deliverable_type := 'INTERNAL';
2349                     END IF;
2350 
2351                     IF delRecTab(i).internal_party_contact_id IS NULL THEN
2352                        delRecTab(i).internal_party_contact_id := l_rep_dflt_int_contact_id;
2353                     END IF;
2354                     --No need of setting the External Party Role as this is done only for PO flow.
2355                     l_ext_party_role:=NULL;
2356                   END IF;
2357                   -- End of ER code modifications
2358 
2359                   --check if the deliverable is of contractual type
2360                   IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2361                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2362                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Contractual is :Y');
2363                     END IF;
2364                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2365                     p_target_contractual_doctype);
2366                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2367                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2368                       '100: Copy allowed is :'||l_copy);
2369                     END IF;
2370                   END IF; -- deltype_matches
2371                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2372                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2373                       '100: Copy allowed is :'||l_copy);
2374                     END IF;
2375 
2376                     IF l_copy = 'Y' THEN
2377                         j := j+1;
2378                         -- extend table type
2379                         delIdTab.extend;
2380                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2381                         delNewTab(j) := delRecTab(i);
2382                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2383                         from dual;
2384                                 -- If party and contact info is null then assign the parameter values
2385                                 delNewTab(j).internal_party_id :=
2386                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2387                                 delNewTab(j).external_party_id :=
2388                                 NVL(delNewTab(j).external_party_id,p_external_party_id);
2389 
2390 
2391                                 delNewTab(j).external_party_site_id :=
2392                                 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2393                                 delNewTab(j).internal_party_contact_id :=
2394                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2395                                 -- bug#4148082 set ext party role during template to PO copy
2396                                 delNewTab(j).external_party_role := l_ext_party_role;
2397 
2398 
2399 
2400                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2401                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2402                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2403                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2404                             '100: External Party Role :'||delNewTab(j).external_party_role);
2405                         END IF;
2406                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2407                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2408                       --do not copy contractual type deliverables on to RFI bug#3641673
2409                       IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2410                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2411                             IF l_copy = 'Y' THEN
2412                                 j := j+1;
2413                                 -- extend table type
2414                                 delIdTab.extend;
2415                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2416                                 delNewTab(j) := delRecTab(i);
2417                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2418                                 from dual;
2419                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2420                                 -- If party and contact info is null then assign the parameter values
2421                                 delNewTab(j).internal_party_id :=
2422                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2423                                 delNewTab(j).internal_party_contact_id :=
2424                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2425                                 delNewTab(j).external_party_id :=
2426                                 NVL(delNewTab(j).external_party_id,p_external_party_id);
2427 
2428                                 delNewTab(j).external_party_site_id :=
2429                                 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2430 
2431                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2432                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2433                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2434                                     to_char(delNewTab(j).deliverable_id));
2435                                 END IF;
2436                             END IF; -- l_copy is Y
2437                       END IF; -- deltype_matches
2438                     END IF;-- l_copy is 'Y'
2439                 END LOOP;
2440                 END IF; -- del_cur%NOTFOUND
2441 
2442                END IF; -- p_target_contractual_doctype
2443         IF del_cur %ISOPEN THEN
2444           CLOSE del_cur ;
2445         END IF;
2446 
2447             END IF;
2448         IF del_cur %ISOPEN THEN
2449           CLOSE del_cur ;
2450         END IF;
2451 ---------------------------------------------------------------------------------
2452         -- Busdoc to Busdoc copy
2453         ELSIF p_source_doc_type <> 'TEMPLATE' THEN
2454                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2455                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2456                       '100: Source doc is not template');
2457                    END IF;
2458 ---------------------------------------------------------------------------------
2459             -- copy from business document to business document of different type
2460             -- for example RFI to RFQ
2461             IF p_source_doc_type <> p_target_doc_type THEN
2462                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2463                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2464                       '100: Source doc and target doc are different type');
2465                    END IF;
2466             IF p_target_contractual_doctype is not null THEN
2467 
2468                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2469                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2470                       '100: p_target_contractual_doctype:'||p_target_contractual_doctype);
2471                    END IF;
2472                 /***OPEN del_cur;
2473                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2474                 IF delRecTab.COUNT <> 0 THEN
2475                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2476                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2477                         ,'100: target_contractual_doctype is not null and '||
2478                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2479                     END IF;
2480                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2481                     -- initialize
2482                     l_copy := 'N';
2483                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2484                     p_target_contractual_doctype);
2485                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2486                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_copy is :'||l_copy);
2487                         END IF;
2488                     IF l_copy = 'Y' THEN
2489                         j := j+1;
2490                         -- extend table type
2491                         delIdTab.extend;
2492                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2493                         delNewTab(j) := delRecTab(i);
2494                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2495                         from dual;
2496                         -- 11.5.10+ bug#3670582 fix reset original del id
2497                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2498 
2499 
2500                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2501                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2502                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2503                         END IF;
2504                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2505                         /* Nullout all external party attributes on deliverables.
2506                         Because external party is not assigned on Negociation
2507                         documents (RFQ, Auction). */
2508                         --Bug#4126344
2509                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2510                             delNewTab(j).external_party_contact_id := null;
2511                             delNewTab(j).external_party_id := null;
2512                             delNewTab(j).external_party_site_id := null;
2513                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2514 
2515                         --Bug#4126344 set the param value if the flag says N
2516                         IF p_carry_forward_int_contact_yn = 'N' THEN
2517                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2518                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2519 
2520                         /* Nullout actual due date,start_event_date, end event_date
2521                         bug#3369934*/
2522                             delNewTab(j).actual_due_date:= null;
2523                             delNewTab(j).start_event_date:= null;
2524                             delNewTab(j).end_event_date:= null;
2525 
2526                     END IF;-- l_copy is 'Y'
2527                 END LOOP;
2528                END IF; -- del_cur%NOTFOUND
2529 ---------------------------------------------------
2530             -- busdoc to busdoc of different types
2531             -- for example RFQ to SPO or BPA
2532                 ELSIF p_target_contractual_doctype is null THEN
2533                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2534                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2535                       '100: p_target_contractual_doctype is null');
2536                    END IF;
2537                 /***OPEN del_cur;
2538                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2539                 IF delRecTab.COUNT <> 0 THEN
2540                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2541                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2542                         ,'100: target_contractual_doctype is null and '||
2543                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2544                     END IF;
2545                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2546                     -- initialize
2547                     l_copy := 'N';
2548                     --check if the deliverable belongs to target document type
2549                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2550                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2551                             '100: deltype :'||delRecTab(i).deliverable_type);
2552                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2553                             '100: doctype :'||p_target_doc_type);
2554                         END IF;
2555                     IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2556 
2557                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2558                     p_target_contractual_doctype);
2559                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2560                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2561                             '100: l_copy is :'||l_copy);
2562                         END IF;
2563                     END IF; -- deltype_matches
2564 
2565               --Contract Type specific code for 'Closeout'
2566               --If Source Contract Type is Checklist Template - 'REP_CCT' and target is 'REP_CCC'
2567               --Copy allowed should return 'Y' even if event_id does not match.
2568                IF (p_target_doc_type = 'REP_CCC' AND delRecTab(i).BUSINESS_DOCUMENT_TYPE = 'REP_CCT') THEN
2569                    l_copy := 'Y';
2570                END IF;
2571 
2572                     IF l_copy = 'Y' THEN
2573                         j := j+1;
2574                         -- extend table type
2575                         delIdTab.extend;
2576                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2577                         delNewTab(j) := delRecTab(i);
2578                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2579                         from dual;
2580                         -- 11.5.10+ bug#3670582 fix reset original del id
2581                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2582 
2583                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2584                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2585                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2586                         END IF;
2587                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2588                         -- Bug#3308804 assign param values if they are not null
2589                         --Bug#4126344
2590                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2591                         delNewTab(j).external_party_id := NVL(p_external_party_id,delNewTab(j).external_party_id);
2592                         delNewTab(j).external_party_site_id := NVL(p_external_party_site_id,delNewTab(j).external_party_site_id);
2593                         END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2594 
2595                         --Bug#4126344 set the param value if the flag says N
2596                         IF p_carry_forward_int_contact_yn = 'N' THEN
2597                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2598                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2599                         /* Nullout actual due date,start_event_date, end event_date
2600                         bug#3369934*/
2601                             delNewTab(j).actual_due_date:= null;
2602                             delNewTab(j).start_event_date:= null;
2603                             delNewTab(j).end_event_date:= null;
2604               --Contract Type specific code for 'Closeout'
2605               --If Source Contract Type is Checklist Template - 'REP_CCT' and target is 'REP_CCC'
2606 
2607                         IF(p_target_doc_type = 'REP_CCC') THEN
2608 
2609                           SELECT bus_doc_event_id INTO l_ccc_event_id FROM okc_bus_doc_events_b
2610                             WHERE bus_doc_type = 'REP_CCC';
2611 
2612                             delNewTab(j).RELATIVE_ST_DATE_EVENT_ID:= l_ccc_event_id;
2613                         END IF;
2614 
2615                     END IF;-- l_copy is 'Y'
2616                 END LOOP;
2617                 END IF; -- del_cur%NOTFOUND
2618                 END IF; -- p_target_contractual_doctype
2619 ---------------------------------------------------------------------------------
2620             -- copy from business document to business document of same type
2621             -- for example RFQ to RFQ
2622             ELSIF p_source_doc_type = p_target_doc_type THEN
2623                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2624                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2625                       '100: Source doc and target doc are same type');
2626                    END IF;
2627                IF p_target_contractual_doctype is not null THEN
2628 
2629                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2630                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2631                       '100: p_target_contractual_doctype is not null');
2632                    END IF;
2633                 /***OPEN del_cur;
2634                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2635                 IF delRecTab.COUNT <> 0 THEN
2636                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2637                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2638                         ,'100: target_contractual_doctype is not null and '||
2639                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2640                     END IF;
2641                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2642                     -- initialize
2643                     l_copy := 'N';
2644                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2645                     p_target_contractual_doctype);
2646                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2647                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2648                             '100: l_copy is :'||l_copy);
2649                         END IF;
2650                     IF l_copy = 'Y' THEN
2651                         j := j+1;
2652                         -- extend table type
2653                         delIdTab.extend;
2654                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2655                         delNewTab(j) := delRecTab(i);
2656                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2657                         from dual;
2658                         -- 11.5.10+ bug#3670582 fix reset original del id
2659                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2660 
2661                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2662                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2663                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2664                         END IF;
2665                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2666                         /* Nullout all external party attributes on deliverables.
2667                         Because external party is not assigned on Negotiation
2668                         documents (RFQ, Auction). */
2669                         --Bug#4126344
2670                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2671                             delNewTab(j).external_party_contact_id := null;
2672                             delNewTab(j).external_party_id := null;
2673                             delNewTab(j).external_party_site_id := null;
2674                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2675 
2676                         --Bug#4126344 set the param value if the flag says N
2677                         IF p_carry_forward_int_contact_yn = 'N' THEN
2678                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2679                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2680 
2681                             /*bug#3455441 reset buyer contact while creating new busdoc
2682                             by copying from another busdoc of same type*/
2683                             delNewTab(j).internal_party_id := p_internal_party_id;
2684                             --commented the below line as bug#4126344 superceeds bug#3455441
2685                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2686                         /* Nullout actual due date,start_event_date, end event_date
2687                         bug#3369934*/
2688                             delNewTab(j).actual_due_date:= null;
2689                             delNewTab(j).start_event_date:= null;
2690                             delNewTab(j).end_event_date:= null;
2691 
2692                             /**bug#3262940 added copy target_response_doctype deliverables logic
2693                             to support RFQ to RFQ copy case ********/
2694 
2695                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2696                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2697                             IF l_copy = 'Y' THEN
2698                                 j := j+1;
2699                                 -- extend table type
2700                                 delIdTab.extend;
2701                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2702                                 delNewTab(j) := delRecTab(i);
2703                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2704                                 from dual;
2705                                 -- 11.5.10+ bug#3670582 fix reset original del id
2706                                 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2707 
2708                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2709                                 /* Nullout all external party attributes on deliverables.
2710                                 Because external party is not assigned on Negotiation
2711                                 documents (RFQ, Auction). */
2712                         --Bug#4126344
2713                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2714                                 delNewTab(j).external_party_contact_id := null;
2715                                 delNewTab(j).external_party_id := null;
2716                                 delNewTab(j).external_party_site_id := null;
2717                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2718 
2719                         --Bug#4126344 set the param value if the flag says N
2720                         IF p_carry_forward_int_contact_yn = 'N' THEN
2721                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2722                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2723 
2724                                 /*bug#3455441 reset buyer contact while creating new busdoc
2725                                 by copying from another busdoc of same type*/
2726                                 delNewTab(j).internal_party_id := p_internal_party_id;
2727                             --commented the below line as bug#4126344 superceeds bug#3455441
2728                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2729                                 /* Nullout actual due date,start_event_date, end event_date
2730                                 bug#3369934*/
2731                                 delNewTab(j).actual_due_date:= null;
2732                                 delNewTab(j).start_event_date:= null;
2733                                 delNewTab(j).end_event_date:= null;
2734 
2735                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2736                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2737                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2738                                     to_char(delNewTab(j).deliverable_id));
2739                                 END IF;
2740                             END IF;
2741 
2742                     END IF;-- l_copy is 'Y'
2743                 END LOOP;
2744                 END IF; -- del_cur%NOTFOUND
2745              -- this is applicable to purchasing documents and RFIs
2746              ELSIF p_target_contractual_doctype is null THEN
2747                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2748                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2749                       ,'100: p_target_contractual_doctype is null');
2750                    END IF;
2751                 /***OPEN del_cur;
2752                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2753                 IF delRecTab.COUNT <> 0 THEN
2754                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2755                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2756                         ,'100: target_contractual_doctype is null and '||
2757                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2758                     END IF;
2759                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2760                     -- initialize
2761                     l_copy := 'N';
2762                     --check if the deliverable belongs to target document type
2763                     IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2764 
2765                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2766                     p_target_contractual_doctype);
2767                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2768                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2769                             '100: l_copy is :'||l_copy);
2770                         END IF;
2771                     END IF; -- deltype_matches
2772 
2773                     IF l_copy = 'Y' THEN
2774                         j := j+1;
2775                         -- extend table type
2776                         delIdTab.extend;
2777                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2778                         delNewTab(j) := delRecTab(i);
2779                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2780                         from dual;
2781                         -- 11.5.10+ bug#3670582 fix reset original del id
2782                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2783 
2784                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2785                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2786                             ,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2787                         END IF;
2788                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2789                         --Bug#4126344
2790                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2791                         delNewTab(j).external_party_id := p_external_party_id;
2792                         delNewTab(j).external_party_site_id := p_external_party_site_id;
2793                         END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2794 
2795                         --Bug#4126344 set the param value if the flag says N
2796                         IF p_carry_forward_int_contact_yn = 'N' THEN
2797                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2798                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2799 
2800                             /*bug#3455441 reset buyer contact while creating new busdoc
2801                             by copying from another busdoc of same type*/
2802                             delNewTab(j).internal_party_id := p_internal_party_id;
2803                             --commented the below line as bug#4126344 superceeds bug#3455441
2804                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2805                         /* Nullout actual due date,start_event_date, end event_date
2806                         bug#3369934*/
2807                             delNewTab(j).actual_due_date:= null;
2808                             delNewTab(j).start_event_date:= null;
2809                             delNewTab(j).end_event_date:= null;
2810                     /*then check if response document event matches. this check is for RFI**/
2811                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2812                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2813                             IF l_copy = 'Y' THEN
2814                                 j := j+1;
2815                                 -- extend table type
2816                                 delIdTab.extend;
2817                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2818                                 delNewTab(j) := delRecTab(i);
2819                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2820                                 from dual;
2821                                 -- 11.5.10+ bug#3670582 fix reset original del id
2822                                 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2823 
2824                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2825                                 /* Nullout all external party attributes on deliverables.
2826                                 Because external party is not assigned on Negotiation
2827                                 documents (RFQ, Auction,RFI). */
2828                         --Bug#4126344
2829                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2830                                 delNewTab(j).external_party_contact_id := null;
2831                                 delNewTab(j).external_party_id := null;
2832                                 delNewTab(j).external_party_site_id := null;
2833                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2834 
2835                         --Bug#4126344 set the param value if the flag says N
2836                         IF p_carry_forward_int_contact_yn = 'N' THEN
2837                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2838                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2839 
2840                                 /*bug#3455441 reset buyer contact while creating new busdoc
2841                                 by copying from another busdoc of same type*/
2842                                 delNewTab(j).internal_party_id := p_internal_party_id;
2843                             --commented the below line as bug#4126344 superceeds bug#3455441
2844                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2845                                 /* Nullout actual due date,start_event_date, end event_date
2846                                 bug#3369934*/
2847                                 delNewTab(j).actual_due_date:= null;
2848                                 delNewTab(j).start_event_date:= null;
2849                                 delNewTab(j).end_event_date:= null;
2850 
2851                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2852                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2853                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2854                                     to_char(delNewTab(j).deliverable_id));
2855                                 END IF;
2856                             END IF;
2857 
2858                     END IF;-- l_copy is 'Y'
2859                 END LOOP;
2860                 END IF; -- del_cur%NOTFOUND
2861                 END IF; -- p_target_contractual_doctype
2862 
2863             END IF;
2864         END IF;
2865 
2866         -- create deliverables for the target document
2867         IF delNewTab.COUNT <> 0 THEN
2868           FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2869                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2870                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2871                  ,'100: Create new Deliverables  :'||to_char(delNewTab(i).deliverable_id));
2872                END IF;
2873             delNewTab(i).business_document_id := p_target_doc_id;
2874             delNewTab(i).business_document_type := p_target_doc_type;
2875             delNewTab(i).business_document_number := p_target_doc_number;
2876             delNewTab(i).business_document_version := -99;
2877             delNewTab(i).created_by:= Fnd_Global.User_Id;
2878             delNewTab(i).creation_date := sysdate;
2879             delNewTab(i).last_updated_by:= Fnd_Global.User_Id;
2880             delNewTab(i).last_update_date := sysdate;
2881             delNewTab(i).last_update_login:=Fnd_Global.Login_Id;
2882             /*bug#3631944 flush amendment attributes at the time of copy.
2883             Since the target document will be a new document.*/
2884             delNewTab(i).amendment_operation := null;
2885             delNewTab(i).summary_amend_operation_code := null;
2886             delNewTab(i).amendment_notes := null;
2887             delNewTab(i).last_amendment_date := null;
2888 
2889                 IF p_reset_fixed_date_yn = 'Y' THEN
2890                     --delNewTab(i).fixed_due_date_yn = 'Y' THEN  -- Bug#3369934 reset recurring dels also
2891                     delNewTab(i).fixed_start_date:= null;
2892                     delNewTab(i).fixed_end_date:= null;
2893                     -- bug#3465662 clear print due date msg name only for recurring deliverables
2894                     -- with fixed start or end dates
2895                     IF delNewTab(i).recurring_yn = 'Y' AND
2896                         (delNewTab(i).relative_st_date_event_id is null OR
2897                         delNewTab(i).relative_end_date_event_id is null) THEN
2898                         delNewTab(i).print_due_date_msg_name:= null;
2899                     END IF;
2900                 END IF;
2901                 IF p_initialize_status_yn = 'Y' THEN
2902                     delNewTab(i).deliverable_status := 'INACTIVE';
2903                 END IF;
2904           END LOOP;
2905             /*FORALL i IN delNewTab.FIRST..delNewTab.LAST
2906             INSERT INTO okc_deliverables VALUES delNewTab(i);*/
2907                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2908                 INSERT INTO okc_deliverables
2909                 (DELIVERABLE_ID,
2910                 BUSINESS_DOCUMENT_TYPE      ,
2911                 BUSINESS_DOCUMENT_ID        ,
2912                 BUSINESS_DOCUMENT_NUMBER    ,
2913                 DELIVERABLE_TYPE            ,
2914                 RESPONSIBLE_PARTY           ,
2915                 INTERNAL_PARTY_CONTACT_ID   ,
2916                 EXTERNAL_PARTY_CONTACT_ID   ,
2917                 DELIVERABLE_NAME            ,
2918                 DESCRIPTION                 ,
2919                 COMMENTS                    ,
2920                 DISPLAY_SEQUENCE            ,
2921                 FIXED_DUE_DATE_YN           ,
2922                 ACTUAL_DUE_DATE             ,
2923                 PRINT_DUE_DATE_MSG_NAME     ,
2924                 RECURRING_YN                ,
2925                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
2926                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
2927                 NOTIFY_PRIOR_DUE_DATE_YN    ,
2928                 NOTIFY_COMPLETED_YN         ,
2929                 NOTIFY_OVERDUE_YN           ,
2930                 NOTIFY_ESCALATION_YN        ,
2931                 NOTIFY_ESCALATION_VALUE     ,
2932                 NOTIFY_ESCALATION_UOM       ,
2933                 ESCALATION_ASSIGNEE         ,
2934                 AMENDMENT_OPERATION         ,
2935                 PRIOR_NOTIFICATION_ID       ,
2936                 AMENDMENT_NOTES             ,
2937                 COMPLETED_NOTIFICATION_ID   ,
2938                 OVERDUE_NOTIFICATION_ID     ,
2939                 ESCALATION_NOTIFICATION_ID  ,
2940                 LANGUAGE                    ,
2941                 ORIGINAL_DELIVERABLE_ID     ,
2942                 REQUESTER_ID                ,
2943                 EXTERNAL_PARTY_ID           ,
2944                 EXTERNAL_PARTY_ROLE           ,
2945                 RECURRING_DEL_PARENT_ID      ,
2946                 BUSINESS_DOCUMENT_VERSION   ,
2947                 RELATIVE_ST_DATE_DURATION   ,
2948                 RELATIVE_ST_DATE_UOM        ,
2949                 RELATIVE_ST_DATE_EVENT_ID   ,
2950                 RELATIVE_END_DATE_DURATION  ,
2951                 RELATIVE_END_DATE_UOM       ,
2952                 RELATIVE_END_DATE_EVENT_ID  ,
2953                 REPEATING_DAY_OF_MONTH      ,
2954                 REPEATING_DAY_OF_WEEK       ,
2955                 REPEATING_FREQUENCY_UOM     ,
2956                 REPEATING_DURATION          ,
2957                 FIXED_START_DATE            ,
2958                 FIXED_END_DATE              ,
2959                 MANAGE_YN                   ,
2960                 INTERNAL_PARTY_ID           ,
2961                 DELIVERABLE_STATUS          ,
2962                 STATUS_CHANGE_NOTES         ,
2963                 CREATED_BY                  ,
2964                 CREATION_DATE               ,
2965                 LAST_UPDATED_BY             ,
2966                 LAST_UPDATE_DATE            ,
2967                 LAST_UPDATE_LOGIN           ,
2968                 OBJECT_VERSION_NUMBER       ,
2969                 ATTRIBUTE_CATEGORY          ,
2970                 ATTRIBUTE1                  ,
2971                 ATTRIBUTE2                  ,
2972                 ATTRIBUTE3                  ,
2973                 ATTRIBUTE4                  ,
2974                 ATTRIBUTE5                  ,
2975                 ATTRIBUTE6                  ,
2976                 ATTRIBUTE7                  ,
2977                 ATTRIBUTE8                  ,
2978                 ATTRIBUTE9                  ,
2979                 ATTRIBUTE10                 ,
2980                 ATTRIBUTE11                 ,
2981                 ATTRIBUTE12                 ,
2982                 ATTRIBUTE13                 ,
2983                 ATTRIBUTE14                 ,
2984                 ATTRIBUTE15                 ,
2985                 DISABLE_NOTIFICATIONS_YN    ,
2986                 LAST_AMENDMENT_DATE         ,
2987                 BUSINESS_DOCUMENT_LINE_ID   ,
2988                 EXTERNAL_PARTY_SITE_ID      ,
2989                 START_EVENT_DATE            ,
2990                 END_EVENT_DATE              ,
2991                 SUMMARY_AMEND_OPERATION_CODE,
2992                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
2993                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
2994                 PAY_HOLD_PRIOR_DUE_DATE_YN,
2995                 PAY_HOLD_OVERDUE_YN
2996                 ,orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2,
2997                 RAISE_COMPLETION_EVENT_YN
2998                 ,del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
2999                 uda_template_id ,schedule_type
3000                 )
3001                 VALUES (
3002                 delNewTab(i).DELIVERABLE_ID,
3003                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
3004                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
3005                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
3006                 delNewTab(i).DELIVERABLE_TYPE            ,
3007                 delNewTab(i).RESPONSIBLE_PARTY           ,
3008                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
3009                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
3010                 delNewTab(i).DELIVERABLE_NAME            ,
3011                 delNewTab(i).DESCRIPTION                 ,
3012                 delNewTab(i).COMMENTS                    ,
3013                 delNewTab(i).DISPLAY_SEQUENCE            ,
3014                 delNewTab(i).FIXED_DUE_DATE_YN           ,
3015                 delNewTab(i).ACTUAL_DUE_DATE             ,
3016                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
3017                 delNewTab(i).RECURRING_YN                ,
3018                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
3019                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
3020                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
3021                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
3022                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
3023                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
3024                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
3025                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
3026                 delNewTab(i).ESCALATION_ASSIGNEE         ,
3027                 delNewTab(i).AMENDMENT_OPERATION         ,
3028                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
3029                 delNewTab(i).AMENDMENT_NOTES             ,
3030                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
3031                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
3032                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
3033                 delNewTab(i).LANGUAGE                    ,
3034                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
3035                 delNewTab(i).REQUESTER_ID                ,
3036                 delNewTab(i).EXTERNAL_PARTY_ID           ,
3037                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
3038                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
3039                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
3040                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
3041                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
3042                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
3043                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
3044                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
3045                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
3046                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
3047                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
3048                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
3049                 delNewTab(i).REPEATING_DURATION          ,
3050                 delNewTab(i).FIXED_START_DATE            ,
3051                 delNewTab(i).FIXED_END_DATE              ,
3052                 delNewTab(i).MANAGE_YN                   ,
3053                 delNewTab(i).INTERNAL_PARTY_ID           ,
3054                 delNewTab(i).DELIVERABLE_STATUS          ,
3055                 delNewTab(i).STATUS_CHANGE_NOTES         ,
3056                 delNewTab(i).CREATED_BY                  ,
3057                 delNewTab(i).CREATION_DATE               ,
3058                 delNewTab(i).LAST_UPDATED_BY             ,
3059                 delNewTab(i).LAST_UPDATE_DATE            ,
3060                 delNewTab(i).LAST_UPDATE_LOGIN           ,
3061                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
3062                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
3063                 delNewTab(i).ATTRIBUTE1                  ,
3064                 delNewTab(i).ATTRIBUTE2                  ,
3065                 delNewTab(i).ATTRIBUTE3                  ,
3066                 delNewTab(i).ATTRIBUTE4                  ,
3067                 delNewTab(i).ATTRIBUTE5                  ,
3068                 delNewTab(i).ATTRIBUTE6                  ,
3069                 delNewTab(i).ATTRIBUTE7                  ,
3070                 delNewTab(i).ATTRIBUTE8                  ,
3071                 delNewTab(i).ATTRIBUTE9                  ,
3072                 delNewTab(i).ATTRIBUTE10                 ,
3073                 delNewTab(i).ATTRIBUTE11                 ,
3074                 delNewTab(i).ATTRIBUTE12                 ,
3075                 delNewTab(i).ATTRIBUTE13                 ,
3076                 delNewTab(i).ATTRIBUTE14                 ,
3077                 delNewTab(i).ATTRIBUTE15                 ,
3078                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
3079                 delNewTab(i).LAST_AMENDMENT_DATE         ,
3080                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
3081                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
3082                 delNewTab(i).START_EVENT_DATE            ,
3083                 delNewTab(i).END_EVENT_DATE              ,
3084                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
3085                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
3086                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
3087                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
3088                 delNewTab(i).PAY_HOLD_OVERDUE_YN,
3089                 delNewTab(i).orig_system_reference_code,
3090                 delNewTab(i).orig_system_reference_id1,
3091                 delNewTab(i).orig_system_reference_id2,
3092                 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
3093                 delNewTab(i).del_category_code,
3094                 delNewTab(i).exhibit_code,
3095                 delNewTab(i).data_item_number,
3096                 delNewTab(i).price_group,
3097                 delNewTab(i).estimated_price,
3098                 delNewTab(i).uda_template_id,
3099                 delNewTab(i).schedule_type
3100                 );
3101 
3102                  copy_deliverable_udas(
3103                       delNewTab(i).orig_system_reference_id1,
3104                       delNewTab(i).DELIVERABLE_ID,
3105                       x_return_status,
3106                       x_msg_count,
3107                       x_msg_data,
3108                       x_errorcode
3109                       );
3110                 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3111 	                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3112                 END IF;
3113                 END LOOP;
3114                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3115                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3116                  '100: Done Creating Deliverables ');
3117                END IF;
3118         END IF; -- delNewTab.COUNT <> 0
3119                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3120                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3121                  '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
3122                END IF;
3123 
3124         -- copy any existing attachments if allowed
3125         IF p_copy_del_attachments_yn = 'Y' THEN
3126 
3127           IF delIdTab.COUNT <> 0 THEN
3128           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
3129             -- check if attachments exists
3130             IF attachment_exists(p_entity_name => G_ENTITY_NAME
3131                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
3132 
3133                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3134                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3135                  '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
3136                END IF;
3137               -- copy attachments
3138               -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
3139               fnd_attached_documents2_pkg.copy_attachments(
3140                   X_from_entity_name =>  G_ENTITY_NAME,
3141                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
3142                   X_to_entity_name   =>  G_ENTITY_NAME,
3143                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
3144                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
3145                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
3146                   );
3147                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3148                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3149                  '100: Done Copy Deliverable Attachments ');
3150                END IF;
3151             END IF;
3152           END LOOP;
3153           END IF;
3154         END IF; -- p_copy_del_attachments_yn = 'Y'
3155 
3156         IF del_cur %ISOPEN THEN
3157           CLOSE del_cur ;
3158         END IF;
3159         x_return_status := l_return_status;
3160             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3161                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3162                 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
3163             END IF;
3164     EXCEPTION
3165     WHEN FND_API.G_EXC_ERROR THEN
3166             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3167                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
3168                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with G_EXC_ERROR: '||
3169                 substr(sqlerrm,1,200));
3170             END IF;
3171         IF del_cur %ISOPEN THEN
3172           CLOSE del_cur ;
3173         END IF;
3174     x_return_status := G_RET_STS_ERROR;
3175       FND_MSG_PUB.Count_And_Get(
3176         p_count =>  x_msg_count,
3177         p_data  =>  x_msg_data
3178         );
3179 
3180     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3181             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3182                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3183                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3184                 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3185             END IF;
3186         IF del_cur %ISOPEN THEN
3187           CLOSE del_cur ;
3188         END IF;
3189     x_return_status := G_RET_STS_UNEXP_ERROR;
3190       FND_MSG_PUB.Count_And_Get(
3191         p_count =>  x_msg_count,
3192         p_data  =>  x_msg_data
3193         );
3194 
3195     WHEN OTHERS THEN
3196             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3197                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3198                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3199                 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3200             END IF;
3201         IF del_cur %ISOPEN THEN
3202           CLOSE del_cur ;
3203         END IF;
3204       x_return_status := G_RET_STS_UNEXP_ERROR;
3205       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3206        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3207       END IF;
3208       FND_MSG_PUB.Count_And_Get(
3209         p_count =>  x_msg_count,
3210         p_data  =>  x_msg_data
3211         );
3212 
3213     END copy_deliverables;
3214 
3215 
3216 
3217 
3218 /** Invoked by activate_deliverables group API
3219 1.Copies recurring instances from previous signed document.
3220 2.Copies instance of onetime deliverable from previous signed
3221 document and deletes the definition on the current document.
3222 3. Copies status history, attachments from the instance.
3223 4. creation_date will be reset for recurring instances of deliverables
3224 copied from currently managed version of document. The deliverable definitions and
3225 onetime deliverable instances will carry forwad the creation_date from the definition.
3226 bug#3702020 added following  clauses to filter deleted deliverable
3227     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
3228     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3229 **/
3230 PROCEDURE sync_deliverables (
3231         p_api_version   IN NUMBER,
3232         p_init_msg_list IN VARCHAR2,
3233         p_current_docid        IN NUMBER,
3234         p_current_doctype      IN  VARCHAR2,
3235         p_current_doc_version        IN NUMBER,
3236         x_msg_data      OUT NOCOPY  VARCHAR2,
3237         x_msg_count     OUT NOCOPY  NUMBER,
3238         x_return_status OUT NOCOPY  VARCHAR2)
3239     IS
3240 
3241     CURSOR del_cur IS
3242     SELECT *
3243     FROM  okc_deliverables
3244     WHERE business_document_id = p_current_docid
3245     AND   business_document_version = p_current_doc_version
3246     AND   business_document_type = p_current_doctype
3247     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
3248     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3249     AND   manage_yn = 'N'
3250     AND   Nvl(schedule_type,'SYSTEM')='SYSTEM';
3251     del_rec del_cur%ROWTYPE;
3252 
3253 
3254     CURSOR del_ins_cur(x NUMBER) IS
3255     SELECT *
3256     FROM okc_deliverables a
3257     WHERE a.business_document_id = p_current_docid
3258     AND   a.business_document_type = p_current_doctype
3259     AND   a.business_document_version <> -99
3260     AND   a.original_deliverable_id = x
3261     AND   a.manage_yn = 'Y';
3262     del_ins_rec  del_ins_cur%ROWTYPE;
3263 
3264     CURSOR delStsHist(X NUMBER) IS
3265     SELECT *
3266     FROM okc_del_status_history
3267     WHERE deliverable_id = X;
3268     delStsHist_rec delStsHist%ROWTYPE;
3269     delHistTab    delHistTabType;
3270 
3271     CURSOR event_date_cursor(X NUMBER) IS
3272     select start_event_date, end_event_date
3273     from okc_deliverables
3274     where deliverable_id = X;
3275     event_date_rec   event_date_cursor%ROWTYPE;
3276 
3277     l_api_name      CONSTANT VARCHAR2(30) :='sync_deliverables';
3278     delRecTab       delRecTabType;
3279     delNewTab       delRecTabType;
3280     delInsTab       delRecTabType;
3281     l_deliverable_id NUMBER;
3282     j PLS_INTEGER := 0;
3283     q PLS_INTEGER := 0;
3284     k PLS_INTEGER := 0;
3285     m PLS_INTEGER := 0;
3286     p PLS_INTEGER := 0;
3287     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
3288     TYPE delIdTabType IS TABLE OF delIdRecType;
3289     delIdTab    delIdTabType;
3290     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
3291     l_msg_count       NUMBER;
3292     l_msg_data        VARCHAR2(1000);
3293     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
3294     l_recur_parent_id  NUMBER;
3295     x_errorcode NUMBER;
3296     BEGIN
3297 
3298             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3299                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3300                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
3301             END IF;
3302 
3303 
3304 /*****
3305 8i compatability bug#3307941
3306 ***/
3307 
3308 
3309     FOR del_rec IN del_cur LOOP
3310       k := k+1;
3311       delRecTab(k).deliverable_id := del_rec.deliverable_id;
3312       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
3313       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
3314       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
3315       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
3316       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
3317       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
3318       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
3319       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
3320       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
3321       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
3322       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
3323       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
3324       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
3325       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
3326       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
3327       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3328       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3329       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3330       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
3331       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
3332       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
3333       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
3334       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
3335       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
3336       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
3337       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
3338       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
3339       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
3340       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
3341       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
3342       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
3343       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
3344       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
3345       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
3346       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
3347       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
3348       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
3349       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
3350       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
3351       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
3352       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
3353       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
3354       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
3355       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
3356       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
3357       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
3358       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
3359       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
3360       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
3361       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
3362       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
3363       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
3364       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
3365       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
3366       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
3367       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
3368       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
3369       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
3370       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
3371       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
3372       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
3373       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
3374       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
3375       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
3376       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
3377       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
3378       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
3379       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
3380       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
3381       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
3382       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
3383       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
3384       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
3385       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
3386       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
3387       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
3388       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
3389       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
3390       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
3391       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
3392       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
3393       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
3394       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3395       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3396       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3397       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
3398       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
3399        delRecTab(k).orig_system_reference_code := 'COPY';
3400        delRecTab(k).orig_system_reference_id1 := del_rec.deliverable_id;
3401        delRecTab(k).orig_system_reference_id2  := NULL;
3402       delRecTab(k).del_category_code := del_rec.del_category_code;
3403       delRecTab(k).exhibit_code      := del_rec. exhibit_code;
3404       delRecTab(k).data_item_number  := del_rec.data_item_number;
3405       delRecTab(k).price_group       := del_rec. price_group;
3406       delRecTab(k).estimated_price   := del_rec.estimated_price ;
3407       delRecTab(k).uda_template_id   := del_rec.uda_template_id ;
3408       delRecTab(k).schedule_type   := del_rec.schedule_type ;
3409 
3410             END LOOP;
3411         IF del_cur%ISOPEN THEN
3412           CLOSE del_cur ;
3413         END IF;
3414 
3415 
3416 
3417         /**commented as this is not supported by 8i PL/SQL Bug#3307941
3418         OPEN del_cur;
3419         FETCH del_cur BULK COLLECT INTO delDefRecTab;**/
3420         IF delRecTab.COUNT <> 0 THEN
3421            -- initialize the table type variable
3422            delIdTab := delIdTabType();
3423         FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
3424             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3425                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3426                 ,'100: Inside def cursor loop'||to_char(delRecTab(i).deliverable_id));
3427             END IF;
3428 
3429 
3430              -- if it is a recurrying deliverable
3431              IF delRecTab(i).recurring_yn = 'Y' THEN
3432 ----------------------------------
3433             --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3434             --Initialize the table with 0 rows
3435             delInsTab.DELETE;
3436       m := 0;
3437             -- if deliverable is updated from onetime to recurring due to amendment
3438             -- don't copy the instance
3439         FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3440             IF del_ins_rec.recurring_yn = 'N' AND
3441                   del_ins_rec.recurring_del_parent_id is null THEN
3442                   null;
3443             ELSE
3444       m := m+1;
3445       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3446       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3447       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3448       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3449       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3450       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3451       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3452       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3453       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3454       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3455       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3456       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3457       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3458       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3459       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3460       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3461       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3462       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3463       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3464       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3465       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3466       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3467       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3468       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3469       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3470       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3471       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3472       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3473       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3474       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3475       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3476       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3477       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3478       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3479       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3480       delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3481       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3482       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3483       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3484       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3485       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3486       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3487       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3488       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3489       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3490       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3491       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3492       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3493       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3494       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3495       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3496       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3497       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3498       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3499       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3500       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3501       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3502       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3503       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3504       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3505       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3506       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3507       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3508       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3509       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3510       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3511       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3512       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3513       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3514       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3515       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3516       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3517       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3518       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3519       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3520       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3521       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3522       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3523       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3524       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3525       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3526       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3527       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3528       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3529       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3530       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3531       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3532       delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
3533       delInsTab(m).orig_system_reference_code  :=  'COPY';
3534       delInsTab(m).orig_system_reference_id1   :=  del_ins_rec.deliverable_id;
3535       delInsTab(m).orig_system_reference_id2   :=  null;
3536 
3537        delInsTab(m).del_category_code :=   del_ins_rec.del_category_code;
3538        delInsTab(m). exhibit_code     :=   del_ins_rec.exhibit_code;
3539        delInsTab(m). data_item_number   :=  del_ins_rec.data_item_number;
3540        delInsTab(m). price_group          := del_ins_rec.price_group;
3541        delInsTab(m). estimated_price        :=  del_ins_rec.estimated_price;
3542        delInsTab(m). uda_template_id        :=  del_ins_rec.uda_template_id;
3543        delInsTab(m). schedule_type        :=  del_ins_rec.schedule_type;
3544           END IF;
3545      END LOOP;
3546         IF del_ins_cur %ISOPEN THEN
3547           CLOSE del_ins_cur ;
3548         END IF;
3549 
3550 
3551 
3552 --------------------------------------
3553                 -- check for instances and copy instances from managing version
3554                 /****
3555                 commented as this is not supported by 8i PL/SQL Bug#3307941
3556                 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3557                 FETCH del_ins_cur BULK COLLECT INTO delInsTab;*/
3558                 IF delInsTab.COUNT <> 0 THEN
3559                    FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3560                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3561                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3562                     END IF;
3563                         j:=j+1;
3564                         q:=q+1;
3565                         -- extend table type
3566                         delIdTab.extend;
3567                         -- build the id table to copy attachments
3568                         delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3569                         -- build new version deliverables table
3570                         delNewTab(j):= delInsTab(k);
3571                         --store the recurring_del_parent_id in local variable
3572                         l_recur_parent_id := delInsTab(k).recurring_del_parent_id;
3573                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3574                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Recur Id'||l_recur_parent_id);
3575                     END IF;
3576                         delNewTab(j).business_document_version := p_current_doc_version;
3577                         delNewTab(j).recurring_del_parent_id := delRecTab(i).deliverable_id;
3578                         select okc_deliverable_id_s.nextval
3579                         INTO delNewTab(j).deliverable_id from dual;
3580                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
3581                         -- reset end date definition to new definition
3582                         delNewTab(j).RELATIVE_END_DATE_DURATION:=
3583                                             delRecTab(i).RELATIVE_END_DATE_DURATION;
3584                         delNewTab(j).RELATIVE_END_DATE_UOM:= delRecTab(i).RELATIVE_END_DATE_UOM;
3585                         delNewTab(j).RELATIVE_END_DATE_EVENT_ID:=
3586                                             delRecTab(i).RELATIVE_END_DATE_EVENT_ID;
3587                         delNewTab(j).FIXED_END_DATE:= delRecTab(i).FIXED_END_DATE;
3588                         -- Start 3711754 reset the contact ids and notification attributes from the definition
3589                         delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3590                         delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3591                         delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3592                         delNewTab(j).comments:= delRecTab(i).comments;
3593                         delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3594                         delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3595                         -- Prior due date notification attributes
3596                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3597                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3598                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3599                         -- Escalation notification attributes
3600                         delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3601                         delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3602                         delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3603                         delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3604                         -- Reset the notification ids to null if deliverables are not fulfilled.
3605                         IF delNewTab(j).deliverable_status  = 'OPEN' OR
3606                            delNewTab(j).deliverable_status  = 'REJECTED' THEN
3607                            delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3608                            delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3609                            delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3610                         END IF;
3611                         -- End 3711754 reset the contact ids and notification attributes from the definition
3612 
3613                         -- 3667445 Reset the creation_date and created_by for instances. 03-Jun-2004
3614                         delNewTab(j).creation_date := sysdate;
3615                         delNewTab(j).created_by := FND_GLOBAL.User_id;
3616 
3617 			--bug 6055520
3618                         delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3619                         delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3620                         delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3621                         delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3622                         delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3623                         delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3624                         delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3625                         delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3626                         delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3627                         delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3628                         delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3629                         delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3630                         delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3631                         delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3632                         delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3633                         delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3634 			--bug 6055520
3635 
3636                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3637                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3638                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3639                         delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3640                         delNewTab(j).RAISE_COMPLETION_EVENT_YN := delRecTab(i).RAISE_COMPLETION_EVENT_YN;
3641 
3642 
3643                     END LOOP;
3644                 END IF;
3645         IF del_ins_cur %ISOPEN THEN
3646           CLOSE del_ins_cur ;
3647         END IF;
3648 
3649                 --Assign start and end eventdates to the new definition from instance
3650                 open event_date_cursor(l_recur_parent_id);
3651                 fetch event_date_cursor INTO event_date_rec;
3652                 IF event_date_cursor%FOUND THEN
3653                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3654                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3655                         ,'Def Id'||delRecTab(i).deliverable_id);
3656                     END IF;
3657 
3658                     Update okc_deliverables set start_event_date = event_date_rec.start_event_date,
3659                     end_event_date = event_date_rec.end_event_date
3660                     where deliverable_id = delRecTab(i).deliverable_id;
3661 
3662 
3663                 END IF;
3664                 close event_date_cursor;
3665 
3666              ELSIF delRecTab(i).recurring_yn = 'N' THEN
3667 
3668             --If the amendment_action on the deliverable definition
3669             --is null then open deliverable instance for the definition.
3670             --Add this deliverable record to delNewVersion Table.
3671 
3672             IF delRecTab(i).amendment_operation is null AND
3673                delRecTab(i).summary_amend_operation_code is null THEN -- bug#3656679
3674                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3675                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: amendment_operation is null');
3676                 END IF;
3677                 -- Always copy instance from managing version
3678                 -- do not copy definition
3679  ----------------------------------
3680             --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3681             -- 02-FEB-2004 pnayani -- Fix for bug 3407758
3682             --Initialize the table with 0 rows
3683             delInsTab.DELETE;
3684       m := 0;
3685         FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3686       m := m+1;
3687       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3688       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3689       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3690       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3691       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3692       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3693       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3694       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3695       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3696       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3697       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3698       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3699       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3700       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3701       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3702       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3703       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3704       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3705       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3706       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3707       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3708       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3709       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3710       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3711       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3712       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3713       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3714       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3715       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3716       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3717       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3718       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3719       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3720       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3721       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3722       delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3723       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3724       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3725       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3726       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3727       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3728       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3729       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3730       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3731       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3732       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3733       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3734       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3735       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3736       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3737       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3738       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3739       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3740       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3741       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3742       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3743       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3744       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3745       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3746       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3747       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3748       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3749       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3750       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3751       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3752       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3753       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3754       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3755       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3756       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3757       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3758       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3759       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3760       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3761       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3762       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3763       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3764       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3765       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3766       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3767       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3768       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3769       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3770       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3771       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3772       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3773       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3774       delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
3775 
3776       delInsTab(m).orig_system_reference_code := 'COPY';
3777       delInsTab(m).orig_system_reference_id1  := del_ins_rec.deliverable_id;
3778       delInsTab(m).orig_system_reference_id2  := NULL;
3779 
3780 
3781       delInsTab(m).del_category_code  := del_ins_rec.del_category_code;
3782       delInsTab(m).exhibit_code   := del_ins_rec.exhibit_code        ;
3783       delInsTab(m).data_item_number := del_ins_rec.data_item_number ;
3784       delInsTab(m).price_group     := del_ins_rec.price_group      ;
3785       delInsTab(m).estimated_price  := del_ins_rec.estimated_price;
3786 
3787 
3788 
3789      END LOOP;
3790         IF del_ins_cur %ISOPEN THEN
3791           CLOSE del_ins_cur ;
3792         END IF;
3793  ----------------------------------
3794                 /****
3795                 commented as this is not supported by 8i PL/SQL Bug#3307941
3796                 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3797                 FETCH del_ins_cur BULK COLLECT INTO delInsTab;**/
3798                 IF delInsTab.COUNT <> 0 THEN
3799                    FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3800                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3801                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3802                     END IF;
3803                         j:=j+1;
3804                         q:=q+1;
3805                         -- extend table type
3806                         delIdTab.extend;
3807                         -- build the id table to copy attachments
3808                         delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3809                         -- build new version deliverables table
3810                         delNewTab(j):= delInsTab(k);
3811                         select okc_deliverable_id_s.nextval
3812                         INTO delNewTab(j).deliverable_id from dual;
3813                         delNewTab(j).business_document_version := p_current_doc_version;
3814                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
3815                         -- Resetting the amendment attributes to the definition values bug#3293314
3816                         delNewTab(j).AMENDMENT_OPERATION := delRecTab(i).amendment_operation;
3817                         delNewTab(j).SUMMARY_AMEND_OPERATION_CODE := delRecTab(i).summary_amend_operation_code;
3818                         delNewTab(j).LAST_AMENDMENT_DATE:= delRecTab(i).LAST_AMENDMENT_DATE;
3819                         delNewTab(j).AMENDMENT_NOTES:= delRecTab(i).AMENDMENT_NOTES;
3820                         -- Start 3711754 reset the contact ids and notification attributes from the definition
3821                         delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3822                         delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3823                         delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3824                         delNewTab(j).comments:= delRecTab(i).comments;
3825                         delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3826                         delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3827                         -- Prior due date notification attributes
3828                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3829                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3830                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3831                         -- Escalation notification attributes
3832                         delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3833                         delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3834                         delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3835                         delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3836                         -- Reset the notification ids to null if deliverables are not fulfilled.
3837                         IF delNewTab(j).deliverable_status  = 'OPEN' OR
3838                            delNewTab(j).deliverable_status  = 'REJECTED' THEN
3839                            delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3840                            delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3841                            delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3842                         END IF;
3843                         -- End 3711754 reset the contact ids and notification attributes from the definition
3844 
3845                         -- Bug 5911527. Reset the DFF values
3846                         delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3847                         delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3848                         delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3849                         delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3850                         delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3851                         delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3852                         delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3853                         delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3854                         delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3855                         delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3856                         delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3857                         delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3858                         delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3859                         delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3860                         delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3861                         delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3862 
3863                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3864                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3865                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3866                         delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3867                         delNewTab(j).RAISE_COMPLETION_EVENT_YN := delRecTab(i).RAISE_COMPLETION_EVENT_YN;
3868 
3869                     END LOOP;
3870                     -- delete the deliverable definition
3871                     delete_deliverable (
3872                     p_api_version  => l_api_version,
3873                     p_init_msg_list => OKC_API.G_FALSE,
3874                     p_del_id    => delRecTab(i).deliverable_id,
3875                     x_msg_data  => l_msg_data ,
3876                     x_msg_count => l_msg_count,
3877                     x_return_status  => l_return_status);
3878 
3879                     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
3880                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3881                     END IF;
3882 
3883                 END IF;
3884         IF del_ins_cur %ISOPEN THEN
3885           CLOSE del_ins_cur ;
3886         END IF;
3887              END IF;-- amendment_operation is null
3888              END IF; -- recurring_yn = 'Y'
3889 
3890         END  LOOP;-- delRecTab(i)
3891         END IF; --delRecTab.COUNT <> 0
3892                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3893                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'outside def cursor loop');
3894                     END IF;
3895 
3896         --BULK INSERT into okc_deliverables the new version of deliverables.
3897         IF delNewTab.COUNT <> 0 THEN
3898                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3899                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
3900                     END IF;
3901         -- update the who columns
3902         FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
3903         --3667445 do not reset creation date for definitions, reset only for instances
3904         -- of recurring deliverables
3905           -- delNewTab(j).creation_date := sysdate;
3906           -- delNewTab(j).created_by := FND_GLOBAL.User_id;
3907            delNewTab(j).last_update_date := sysdate;
3908            delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
3909            delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
3910            --copy status history not done as status is not being changed here
3911            --OPEN delStsHist(delNewTab(j).deliverable_id);
3912            /*FOR delStsHist_rec in delStsHist(delNewTab(j).deliverable_id) LOOP
3913            p := p+1;
3914            delHistTab(p).DELIVERABLE_ID := delStsHist_rec.DELIVERABLE_ID;
3915            delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
3916            delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
3917            delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
3918            delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
3919            delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
3920            delHistTab(p).CREATED_BY := delStsHist_rec.CREATED_BY;
3921            delHistTab(p).CREATION_DATE := delStsHist_rec.CREATION_DATE;
3922            delHistTab(p).LAST_UPDATED_BY := delStsHist_rec.LAST_UPDATED_BY;
3923            delHistTab(p).LAST_UPDATE_DATE := delStsHist_rec.LAST_UPDATE_DATE;
3924            delHistTab(p).LAST_UPDATE_LOGIN := delStsHist_rec.LAST_UPDATE_LOGIN;
3925 
3926            END LOOP;
3927            IF delStsHist%ISOPEN THEN
3928             CLOSE  delStsHist;
3929            END IF;*/
3930            /* commented for 8i compatability bug#330794 major code change
3931            OPEN delStsHist(delNewTab(j).deliverable_id);
3932            FETCH delStsHist BULK COLLECT INTO delHistTab;*/
3933            /*IF delHistTab.COUNT <> 0 THEN
3934             FOR j IN delHistTab.FIRST..delHistTab.LAST LOOP
3935                 delHistTab(j).deliverable_id := delNewTab(j).deliverable_id;
3936                 delHistTab(j).creation_date := sysdate;
3937                 delHistTab(j).created_by := FND_GLOBAL.User_id;
3938                 delHistTab(j).last_update_date := sysdate;
3939                 delHistTab(j).last_updated_by := FND_GLOBAL.User_id;
3940                 delHistTab(j).last_update_login:= Fnd_Global.Login_Id;
3941             END LOOP;
3942            END IF;
3943            IF delStsHist%ISOPEN THEN
3944             CLOSE  delStsHist;
3945            END IF;*/
3946         END  LOOP;
3947         -- insert records code changed for 8i compatability bug#3307941
3948        /* commented for 8i compatability bug#330794 major code change
3949         FORALL j IN delNewTab.FIRST..delNewTab.LAST
3950         INSERT INTO okc_deliverables VALUES delNewTab(j);*/
3951 
3952         --------------------------------------------
3953 
3954                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3955                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
3956                 END IF;
3957                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
3958                 INSERT INTO okc_deliverables
3959                 (DELIVERABLE_ID,
3960                 BUSINESS_DOCUMENT_TYPE      ,
3961                 BUSINESS_DOCUMENT_ID        ,
3962                 BUSINESS_DOCUMENT_NUMBER    ,
3963                 DELIVERABLE_TYPE            ,
3964                 RESPONSIBLE_PARTY           ,
3965                 INTERNAL_PARTY_CONTACT_ID   ,
3966                 EXTERNAL_PARTY_CONTACT_ID   ,
3967                 DELIVERABLE_NAME            ,
3968                 DESCRIPTION                 ,
3969                 COMMENTS                    ,
3970                 DISPLAY_SEQUENCE            ,
3971                 FIXED_DUE_DATE_YN           ,
3972                 ACTUAL_DUE_DATE             ,
3973                 PRINT_DUE_DATE_MSG_NAME     ,
3974                 RECURRING_YN                ,
3975                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
3976                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
3977                 NOTIFY_PRIOR_DUE_DATE_YN    ,
3978                 NOTIFY_COMPLETED_YN         ,
3979                 NOTIFY_OVERDUE_YN           ,
3980                 NOTIFY_ESCALATION_YN        ,
3981                 NOTIFY_ESCALATION_VALUE     ,
3982                 NOTIFY_ESCALATION_UOM       ,
3983                 ESCALATION_ASSIGNEE         ,
3984                 AMENDMENT_OPERATION         ,
3985                 PRIOR_NOTIFICATION_ID       ,
3986                 AMENDMENT_NOTES             ,
3987                 COMPLETED_NOTIFICATION_ID   ,
3988                 OVERDUE_NOTIFICATION_ID     ,
3989                 ESCALATION_NOTIFICATION_ID  ,
3990                 LANGUAGE                    ,
3991                 ORIGINAL_DELIVERABLE_ID     ,
3992                 REQUESTER_ID                ,
3993                 EXTERNAL_PARTY_ID           ,
3994                 EXTERNAL_PARTY_ROLE           ,
3995                 RECURRING_DEL_PARENT_ID      ,
3996                 BUSINESS_DOCUMENT_VERSION   ,
3997                 RELATIVE_ST_DATE_DURATION   ,
3998                 RELATIVE_ST_DATE_UOM        ,
3999                 RELATIVE_ST_DATE_EVENT_ID   ,
4000                 RELATIVE_END_DATE_DURATION  ,
4001                 RELATIVE_END_DATE_UOM       ,
4002                 RELATIVE_END_DATE_EVENT_ID  ,
4003                 REPEATING_DAY_OF_MONTH      ,
4004                 REPEATING_DAY_OF_WEEK       ,
4005                 REPEATING_FREQUENCY_UOM     ,
4006                 REPEATING_DURATION          ,
4007                 FIXED_START_DATE            ,
4008                 FIXED_END_DATE              ,
4009                 MANAGE_YN                   ,
4010                 INTERNAL_PARTY_ID           ,
4011                 DELIVERABLE_STATUS          ,
4012                 STATUS_CHANGE_NOTES         ,
4013                 CREATED_BY                  ,
4014                 CREATION_DATE               ,
4015                 LAST_UPDATED_BY             ,
4016                 LAST_UPDATE_DATE            ,
4017                 LAST_UPDATE_LOGIN           ,
4018                 OBJECT_VERSION_NUMBER       ,
4019                 ATTRIBUTE_CATEGORY          ,
4020                 ATTRIBUTE1                  ,
4021                 ATTRIBUTE2                  ,
4022                 ATTRIBUTE3                  ,
4023                 ATTRIBUTE4                  ,
4024                 ATTRIBUTE5                  ,
4025                 ATTRIBUTE6                  ,
4026                 ATTRIBUTE7                  ,
4027                 ATTRIBUTE8                  ,
4028                 ATTRIBUTE9                  ,
4029                 ATTRIBUTE10                 ,
4030                 ATTRIBUTE11                 ,
4031                 ATTRIBUTE12                 ,
4032                 ATTRIBUTE13                 ,
4033                 ATTRIBUTE14                 ,
4034                 ATTRIBUTE15                 ,
4035                 DISABLE_NOTIFICATIONS_YN    ,
4036                 LAST_AMENDMENT_DATE         ,
4037                 BUSINESS_DOCUMENT_LINE_ID   ,
4038                 EXTERNAL_PARTY_SITE_ID      ,
4039                 START_EVENT_DATE            ,
4040                 END_EVENT_DATE              ,
4041                 SUMMARY_AMEND_OPERATION_CODE,
4042                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4043                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
4044                 PAY_HOLD_PRIOR_DUE_DATE_YN,
4045                 PAY_HOLD_OVERDUE_YN,
4046                 RAISE_COMPLETION_EVENT_YN,
4047                 orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2, del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
4048                 uda_template_id ,schedule_type
4049                 )
4050                 VALUES (
4051                 delNewTab(i).DELIVERABLE_ID,
4052                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
4053                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
4054                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
4055                 delNewTab(i).DELIVERABLE_TYPE            ,
4056                 delNewTab(i).RESPONSIBLE_PARTY           ,
4057                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
4058                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
4059                 delNewTab(i).DELIVERABLE_NAME            ,
4060                 delNewTab(i).DESCRIPTION                 ,
4061                 delNewTab(i).COMMENTS                    ,
4062                 delNewTab(i).DISPLAY_SEQUENCE            ,
4063                 delNewTab(i).FIXED_DUE_DATE_YN           ,
4064                 delNewTab(i).ACTUAL_DUE_DATE             ,
4065                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
4066                 delNewTab(i).RECURRING_YN                ,
4067                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
4068                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
4069                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
4070                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
4071                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
4072                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
4073                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
4074                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
4075                 delNewTab(i).ESCALATION_ASSIGNEE         ,
4076                 delNewTab(i).AMENDMENT_OPERATION         ,
4077                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
4078                 delNewTab(i).AMENDMENT_NOTES             ,
4079                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
4080                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
4081                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
4082                 delNewTab(i).LANGUAGE                    ,
4083                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
4084                 delNewTab(i).REQUESTER_ID                ,
4085                 delNewTab(i).EXTERNAL_PARTY_ID           ,
4086                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
4087                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
4088                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
4089                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
4090                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
4091                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
4092                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
4093                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
4094                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
4095                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
4096                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
4097                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
4098                 delNewTab(i).REPEATING_DURATION          ,
4099                 delNewTab(i).FIXED_START_DATE            ,
4100                 delNewTab(i).FIXED_END_DATE              ,
4101                 delNewTab(i).MANAGE_YN                   ,
4102                 delNewTab(i).INTERNAL_PARTY_ID           ,
4103                 delNewTab(i).DELIVERABLE_STATUS          ,
4104                 delNewTab(i).STATUS_CHANGE_NOTES         ,
4105                 delNewTab(i).CREATED_BY                  ,
4106                 delNewTab(i).CREATION_DATE               ,
4107                 delNewTab(i).LAST_UPDATED_BY             ,
4108                 delNewTab(i).LAST_UPDATE_DATE            ,
4109                 delNewTab(i).LAST_UPDATE_LOGIN           ,
4110                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
4111                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
4112                 delNewTab(i).ATTRIBUTE1                  ,
4113                 delNewTab(i).ATTRIBUTE2                  ,
4114                 delNewTab(i).ATTRIBUTE3                  ,
4115                 delNewTab(i).ATTRIBUTE4                  ,
4116                 delNewTab(i).ATTRIBUTE5                  ,
4117                 delNewTab(i).ATTRIBUTE6                  ,
4118                 delNewTab(i).ATTRIBUTE7                  ,
4119                 delNewTab(i).ATTRIBUTE8                  ,
4120                 delNewTab(i).ATTRIBUTE9                  ,
4121                 delNewTab(i).ATTRIBUTE10                 ,
4122                 delNewTab(i).ATTRIBUTE11                 ,
4123                 delNewTab(i).ATTRIBUTE12                 ,
4124                 delNewTab(i).ATTRIBUTE13                 ,
4125                 delNewTab(i).ATTRIBUTE14                 ,
4126                 delNewTab(i).ATTRIBUTE15                 ,
4127                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
4128                 delNewTab(i).LAST_AMENDMENT_DATE         ,
4129                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
4130                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
4131                 delNewTab(i).START_EVENT_DATE            ,
4132                 delNewTab(i).END_EVENT_DATE              ,
4133                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
4134                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4135                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
4136                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
4137                 delNewTab(i).PAY_HOLD_OVERDUE_YN,
4138                 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
4139                 delNewTab(i).orig_system_reference_code,
4140                 delNewTab(i).orig_system_reference_id1,
4141                 delNewTab(i).orig_system_reference_id2,
4142                 delNewTab(i).del_category_code,
4143                 delNewTab(i).exhibit_code,
4144                 delNewTab(i).data_item_number,
4145                 delNewTab(i).price_group,
4146                 delNewTab(i).estimated_price,
4147                 delNewTab(i).uda_template_id,
4148                 delNewTab(i).schedule_type
4149                 );
4150                   copy_deliverable_udas(
4151                         delNewTab(i).orig_system_reference_id1,
4152                         delNewTab(i).DELIVERABLE_ID,
4153                         x_return_status,
4154                         x_msg_count,
4155                         x_msg_data,
4156                         x_errorcode
4157                         );
4158                   if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4159 	                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4160                   END IF;
4161                 END LOOP;
4162 
4163 
4164 
4165         -------------------------------------------------
4166 
4167             FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
4168 
4169             --copy status history not done as status is not being changed here
4170             --OPEN delStsHist(delNewTab(j).deliverable_id);
4171             /* commented for 8i compatability bug#330794 major code change
4172             OPEN delStsHist(delNewTab(j).deliverable_id);
4173             FETCH delStsHist BULK COLLECT INTO delHistTab;*/
4174             FOR delStsHist_rec in delStsHist(delIdTab(j).orig_del_id) LOOP
4175             /*p := p+1;
4176             delHistTab(p).DELIVERABLE_ID := delIdTab(j).del_id;
4177             delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
4178             delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
4179             delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
4180             delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
4181             delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
4182             delHistTab(p).CREATED_BY := FND_GLOBAL.User_id;
4183             delHistTab(p).CREATION_DATE := sysdate;
4184             delHistTab(p).LAST_UPDATED_BY := FND_GLOBAL.User_id;
4185             delHistTab(p).LAST_UPDATE_DATE := sysdate;
4186             delHistTab(p).LAST_UPDATE_LOGIN := Fnd_Global.Login_Id;*/
4187 
4188             --insert into status history
4189             INSERT INTO okc_del_status_history (
4190             deliverable_id,
4191             deliverable_status,
4192             status_changed_by,
4193             status_change_date,
4194             status_change_notes,
4195             object_version_number,
4196             created_by,
4197             creation_date,
4198             last_updated_by,
4199             last_update_date,
4200             last_update_login)
4201             VALUES(
4202             delIdTab(j).del_id,
4203             delStsHist_rec.DELIVERABLE_STATUS,
4204             delStsHist_rec.STATUS_CHANGED_BY,
4205             delStsHist_rec.STATUS_CHANGE_DATE,
4206             delStsHist_rec.STATUS_CHANGE_NOTES,
4207             delStsHist_rec.OBJECT_VERSION_NUMBER,
4208             FND_GLOBAL.User_id,
4209             sysdate,
4210             FND_GLOBAL.User_id,
4211             sysdate,
4212             Fnd_Global.Login_Id);
4213                                                                                                                           END LOOP;
4214                                                                                                                             IF delStsHist%ISOPEN THEN
4215                   CLOSE  delStsHist;
4216               END IF;
4217 
4218 
4219         -------------------------------------------------
4220                 IF attachment_exists(p_entity_name => G_ENTITY_NAME
4221                       ,p_pk1_value    =>  delIdTab(j).orig_del_id) THEN
4222                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4223                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
4224                     END IF;
4225                     -- copy attachments
4226                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
4227                     fnd_attached_documents2_pkg.copy_attachments(
4228                     X_from_entity_name =>  G_ENTITY_NAME,
4229                     X_from_pk1_value   =>  delIdTab(j).orig_del_id,
4230                     X_to_entity_name   =>  G_ENTITY_NAME,
4231                     X_to_pk1_value     =>  to_char(delIdTab(j).del_id),
4232                     X_CREATED_BY       =>  FND_GLOBAL.User_id,
4233                     X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
4234                     );
4235                 END IF;
4236             END LOOP;
4237         END IF; -- delNewTab.COUNT
4238 
4239         IF del_cur%ISOPEN THEN
4240           CLOSE del_cur ;
4241         END IF;
4242 
4243 
4244             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4245                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4246                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
4247             END IF;
4248 
4249             x_return_status := l_return_status;
4250     EXCEPTION
4251     WHEN FND_API.G_EXC_ERROR THEN
4252             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4253                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4254                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_ERROR'||
4255                 substr(sqlerrm,1,200));
4256             END IF;
4257         IF del_cur %ISOPEN THEN
4258           CLOSE del_cur ;
4259         END IF;
4260         IF delStsHist%ISOPEN THEN
4261           CLOSE delStsHist;
4262         END IF;
4263         IF del_ins_cur %ISOPEN THEN
4264           CLOSE del_ins_cur ;
4265         END IF;
4266     x_return_status := G_RET_STS_ERROR;
4267       FND_MSG_PUB.Count_And_Get(
4268         p_count =>  x_msg_count,
4269         p_data  =>  x_msg_data
4270         );
4271     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4272             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4273                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4274                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||
4275                 substr(sqlerrm,1,200));
4276             END IF;
4277         IF del_cur %ISOPEN THEN
4278           CLOSE del_cur ;
4279         END IF;
4280         IF del_ins_cur %ISOPEN THEN
4281           CLOSE del_ins_cur ;
4282         END IF;
4283         IF delStsHist%ISOPEN THEN
4284           CLOSE delStsHist;
4285         END IF;
4286     x_return_status := G_RET_STS_UNEXP_ERROR;
4287       FND_MSG_PUB.Count_And_Get(
4288         p_count =>  x_msg_count,
4289         p_data  =>  x_msg_data
4290         );
4291 
4292     WHEN OTHERS THEN
4293         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4294           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4295           ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4296         END IF;
4297         IF del_cur %ISOPEN THEN
4298           CLOSE del_cur ;
4299         END IF;
4300         IF del_ins_cur %ISOPEN THEN
4301           CLOSE del_ins_cur ;
4302         END IF;
4303         IF delStsHist%ISOPEN THEN
4304           CLOSE delStsHist;
4305         END IF;
4306     x_return_status := G_RET_STS_UNEXP_ERROR;
4307       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4308          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4309       END IF;
4310       FND_MSG_PUB.Count_And_Get(
4311         p_count =>  x_msg_count,
4312         p_data  =>  x_msg_data
4313         );
4314     END sync_deliverables;
4315 
4316 
4317 
4318 
4319     /***This API is invoked from OKC_TERMS_PVT.VERSION_DOC.
4320     This API creates new set of deliverables for a given
4321     version of document.
4322     1.Gets all dliverable definitions for a given busdoc version
4323     2.Check if amendment operation code is null
4324         i.check if recurring deliverable
4325             a.copy definition
4326             b.open instances cursor and copy instances
4327         ii.if not recurring del
4328             a.copy instance of one time deliverable
4329     3.If amendment operation is not null
4330         i.amendment operation is DELETE and summary amendment operation
4331         is not null
4332             a.Recurring del then copy both def and instances
4333             b.One time del then copy only definition
4334         ii.amendment operation is UPDATE or ADDED
4335             a.Recurring del then copy both def and instances
4336             b.One time del then copy only definition
4337     4.Copy attachments
4338     ***/
4339 
4340 
4341 
4342 
4343     PROCEDURE version_deliverables (
4344         p_api_version   IN NUMBER,
4345         p_init_msg_list IN VARCHAR2,
4346         p_doc_id        IN NUMBER,
4347         p_doc_version   IN NUMBER,
4348         p_doc_type      IN  VARCHAR2,
4349         x_msg_data      OUT NOCOPY  VARCHAR2,
4350         x_msg_count     OUT NOCOPY  NUMBER,
4351         x_return_status OUT NOCOPY  VARCHAR2)
4352     IS
4353 
4354     CURSOR del_cur IS
4355     SELECT *
4356     FROM okc_deliverables
4357     WHERE business_document_id = p_doc_id
4358     AND   business_document_version = -99
4359     AND   business_document_type = p_doc_type
4360     AND   manage_yn = 'N';
4361     del_rec del_cur%ROWTYPE;
4362 
4363 
4364     l_api_name      CONSTANT VARCHAR2(30) :='version_deliverables';
4365     delRecTab       delRecTabType;
4366     delNewTab       delRecTabType;
4367     --delInsTab       delRecTabType;
4368     l_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
4369     l_deliverable_id NUMBER;
4370     j PLS_INTEGER := 0;
4371     k PLS_INTEGER := 0;
4372     q PLS_INTEGER := 0;
4373     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
4374     TYPE delIdTabType IS TABLE OF delIdRecType;
4375     delIdTab    delIdTabType;
4376     delCount NUMBER;
4377     x_errorcode NUMBER;
4378     BEGIN
4379 
4380             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4381                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4382                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4383             END IF;
4384 ----------------------------------------
4385 /*****
4386 8i compatability bug#3307941
4387 ***/
4388 	SELECT count(deliverable_id) INTO delCount
4389 	FROM OKC_DELIVERABLES
4390 	WHERE business_document_id = p_doc_id
4391 	AND business_document_type = p_doc_type
4392 	AND business_document_version = p_doc_version;
4393   --If already deliverables are created for the new version, then we wont create it.
4394   IF delCount = 0 THEN
4395     FOR del_rec IN del_cur LOOP
4396       k := k+1;
4397       delRecTab(k).deliverable_id := del_rec.deliverable_id;
4398       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
4399       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
4400       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
4401       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
4402       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
4403       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
4404       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
4405       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
4406       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
4407       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
4408       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
4409       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
4410       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
4411       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
4412       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
4413       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
4414       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
4415       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
4416       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
4417       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
4418       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
4419       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
4420       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
4421       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
4422       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
4423       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
4424       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
4425       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
4426       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
4427       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
4428       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
4429       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
4430       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
4431       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
4432       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
4433       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
4434       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
4435       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
4436       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
4437       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
4438       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
4439       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
4440       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
4441       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
4442       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
4443       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
4444       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
4445       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
4446       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
4447       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
4448       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
4449       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
4450       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
4451       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
4452       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
4453       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
4454       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
4455       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
4456       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
4457       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
4458       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
4459       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
4460       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
4461       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
4462       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
4463       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
4464       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
4465       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
4466       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
4467       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
4468       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
4469       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
4470       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
4471       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
4472       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
4473       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
4474       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
4475       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
4476       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
4477       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
4478       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
4479       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
4480       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
4481       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
4482       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
4483       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
4484       -- serukull for conc mod impact changes
4485       delRecTab(k).orig_system_reference_code := 'COPY';
4486       delRecTab(k).orig_system_reference_id1  := del_rec.deliverable_id;
4487       delRecTab(k).orig_system_reference_id2  := null;
4488       -- serukull for conc mod impact changes
4489       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
4490 
4491 
4492           delRecTab(k).del_category_code := del_rec.del_category_code;
4493           delRecTab(k).exhibit_code := del_rec.exhibit_code;
4494           delRecTab(k).data_item_number:= del_rec.data_item_number;
4495           delRecTab(k).price_group:= del_rec.price_group;
4496           delRecTab(k).estimated_price:= del_rec.estimated_price;
4497           delRecTab(k).uda_template_id:= del_rec.uda_template_id;
4498           delRecTab(k).schedule_type:= del_rec.schedule_type;
4499 
4500             END LOOP;
4501         IF del_cur%ISOPEN THEN
4502           CLOSE del_cur ;
4503         END IF;
4504 
4505 
4506         /* commented for 8i compatability bug#330794 major code change
4507         OPEN del_cur;
4508         FETCH del_cur BULK COLLECT INTO delRecTab;**/
4509         IF delRecTab.COUNT <> 0 THEN
4510            -- initialize the table type variable
4511            delIdTab := delIdTabType();
4512         FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
4513             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4514                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside def cursor loop'||
4515                 to_char(delRecTab(i).deliverable_id));
4516             END IF;
4517 
4518                 /* bug#3630770 commented this code and moved to clear_amendment_operation
4519                    IF delRecTab(i).amendment_operation = 'DELETED' AND
4520                    delRecTab(i).summary_amend_operation_code is null THEN
4521                    -- Since the summary_amend_operation_code is null, the deliverable is not
4522                    -- existing in the signed contract, it was added and deleted in the intermediate
4523                    -- versions. So hard delete the record.
4524                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4525                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4526                         ,'100: Amendment_operation_summary_code is null hard delete this deliverable'||
4527                         to_char(delRecTab(i).deliverable_id));
4528                     END IF;
4529                      delete from okc_deliverables where deliverable_id = delRecTab(i).deliverable_id;*/
4530 
4531 
4532                         j:=j+1;
4533                         q:=q+1;
4534                         -- extend table type
4535                         delIdTab.extend;
4536                         -- build the id table to copy attachments
4537                         delIdTab(q).orig_del_id := delRecTab(i).deliverable_id;
4538                         -- build new version deliverables table
4539                         delNewTab(j):= delRecTab(i);
4540                         --bug#3293314 update last amendment date only
4541                         --if they is an amendment on the deliverable
4542                         IF delRecTab(i).amendment_operation IS NOT NULL THEN
4543                             delNewTab(j).last_amendment_date :=  delRecTab(i).last_amendment_date;
4544                         END IF;
4545                         select okc_deliverable_id_s.nextval
4546                         INTO delNewTab(j).deliverable_id from dual;
4547                         delNewTab(j).business_document_version := p_doc_version;
4548                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
4549 
4550         END  LOOP;-- delRecTab(i)
4551         END IF; --delRecTab.COUNT <> 0
4552 
4553         /***
4554         BULK INSERT into okc_deliverables the new version of deliverables.
4555         ***/
4556         IF delNewTab.COUNT <> 0 THEN
4557                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4558                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
4559                     END IF;
4560         -- update the who columns
4561         FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
4562           -- do not reset the creation date bug#3641366
4563           -- delNewTab(j).creation_date := sysdate;
4564           -- delNewTab(j).created_by := FND_GLOBAL.User_id;
4565            delNewTab(j).last_update_date := sysdate;
4566            delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
4567            delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
4568         END  LOOP;
4569         ------------------------------------------
4570 
4571 
4572                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4573                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
4574                 END IF;
4575                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
4576                 INSERT INTO okc_deliverables
4577                 (DELIVERABLE_ID,
4578                 BUSINESS_DOCUMENT_TYPE      ,
4579                 BUSINESS_DOCUMENT_ID        ,
4580                 BUSINESS_DOCUMENT_NUMBER    ,
4581                 DELIVERABLE_TYPE            ,
4582                 RESPONSIBLE_PARTY           ,
4583                 INTERNAL_PARTY_CONTACT_ID   ,
4584                 EXTERNAL_PARTY_CONTACT_ID   ,
4585                 DELIVERABLE_NAME            ,
4586                 DESCRIPTION                 ,
4587                 COMMENTS                    ,
4588                 DISPLAY_SEQUENCE            ,
4589                 FIXED_DUE_DATE_YN           ,
4590                 ACTUAL_DUE_DATE             ,
4591                 PRINT_DUE_DATE_MSG_NAME     ,
4592                 RECURRING_YN                ,
4593                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
4594                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
4595                 NOTIFY_PRIOR_DUE_DATE_YN    ,
4596                 NOTIFY_COMPLETED_YN         ,
4597                 NOTIFY_OVERDUE_YN           ,
4598                 NOTIFY_ESCALATION_YN        ,
4599                 NOTIFY_ESCALATION_VALUE     ,
4600                 NOTIFY_ESCALATION_UOM       ,
4601                 ESCALATION_ASSIGNEE         ,
4602                 AMENDMENT_OPERATION         ,
4603                 PRIOR_NOTIFICATION_ID       ,
4604                 AMENDMENT_NOTES             ,
4605                 COMPLETED_NOTIFICATION_ID   ,
4606                 OVERDUE_NOTIFICATION_ID     ,
4607                 ESCALATION_NOTIFICATION_ID  ,
4608                 LANGUAGE                    ,
4609                 ORIGINAL_DELIVERABLE_ID     ,
4610                 REQUESTER_ID                ,
4611                 EXTERNAL_PARTY_ID           ,
4612                 EXTERNAL_PARTY_ROLE           ,
4613                 RECURRING_DEL_PARENT_ID      ,
4614                 BUSINESS_DOCUMENT_VERSION   ,
4615                 RELATIVE_ST_DATE_DURATION   ,
4616                 RELATIVE_ST_DATE_UOM        ,
4617                 RELATIVE_ST_DATE_EVENT_ID   ,
4618                 RELATIVE_END_DATE_DURATION  ,
4619                 RELATIVE_END_DATE_UOM       ,
4620                 RELATIVE_END_DATE_EVENT_ID  ,
4621                 REPEATING_DAY_OF_MONTH      ,
4622                 REPEATING_DAY_OF_WEEK       ,
4623                 REPEATING_FREQUENCY_UOM     ,
4624                 REPEATING_DURATION          ,
4625                 FIXED_START_DATE            ,
4626                 FIXED_END_DATE              ,
4627                 MANAGE_YN                   ,
4628                 INTERNAL_PARTY_ID           ,
4629                 DELIVERABLE_STATUS          ,
4630                 STATUS_CHANGE_NOTES         ,
4631                 CREATED_BY                  ,
4632                 CREATION_DATE               ,
4633                 LAST_UPDATED_BY             ,
4634                 LAST_UPDATE_DATE            ,
4635                 LAST_UPDATE_LOGIN           ,
4636                 OBJECT_VERSION_NUMBER       ,
4637                 ATTRIBUTE_CATEGORY          ,
4638                 ATTRIBUTE1                  ,
4639                 ATTRIBUTE2                  ,
4640                 ATTRIBUTE3                  ,
4641                 ATTRIBUTE4                  ,
4642                 ATTRIBUTE5                  ,
4643                 ATTRIBUTE6                  ,
4644                 ATTRIBUTE7                  ,
4645                 ATTRIBUTE8                  ,
4646                 ATTRIBUTE9                  ,
4647                 ATTRIBUTE10                 ,
4648                 ATTRIBUTE11                 ,
4649                 ATTRIBUTE12                 ,
4650                 ATTRIBUTE13                 ,
4651                 ATTRIBUTE14                 ,
4652                 ATTRIBUTE15                 ,
4653                 DISABLE_NOTIFICATIONS_YN    ,
4654                 LAST_AMENDMENT_DATE         ,
4655                 BUSINESS_DOCUMENT_LINE_ID   ,
4656                 EXTERNAL_PARTY_SITE_ID      ,
4657                 START_EVENT_DATE            ,
4658                 END_EVENT_DATE              ,
4659                 SUMMARY_AMEND_OPERATION_CODE,
4660                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4661                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
4662                 PAY_HOLD_PRIOR_DUE_DATE_YN,
4663                 PAY_HOLD_OVERDUE_YN
4664                 , orig_system_reference_code
4665                 , orig_system_reference_id1
4666                 , orig_system_reference_id2,
4667                 RAISE_COMPLETION_EVENT_YN
4668                 ,del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
4669                 uda_template_id ,schedule_type
4670                 )
4671                 VALUES (
4672                 delNewTab(i).DELIVERABLE_ID,
4673                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
4674                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
4675                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
4676                 delNewTab(i).DELIVERABLE_TYPE            ,
4677                 delNewTab(i).RESPONSIBLE_PARTY           ,
4678                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
4679                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
4680                 delNewTab(i).DELIVERABLE_NAME            ,
4681                 delNewTab(i).DESCRIPTION                 ,
4682                 delNewTab(i).COMMENTS                    ,
4683                 delNewTab(i).DISPLAY_SEQUENCE            ,
4684                 delNewTab(i).FIXED_DUE_DATE_YN           ,
4685                 delNewTab(i).ACTUAL_DUE_DATE             ,
4686                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
4687                 delNewTab(i).RECURRING_YN                ,
4688                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
4689                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
4690                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
4691                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
4692                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
4693                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
4694                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
4695                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
4696                 delNewTab(i).ESCALATION_ASSIGNEE         ,
4697                 delNewTab(i).AMENDMENT_OPERATION         ,
4698                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
4699                 delNewTab(i).AMENDMENT_NOTES             ,
4700                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
4701                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
4702                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
4703                 delNewTab(i).LANGUAGE                    ,
4704                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
4705                 delNewTab(i).REQUESTER_ID                ,
4706                 delNewTab(i).EXTERNAL_PARTY_ID           ,
4707                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
4708                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
4709                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
4710                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
4711                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
4712                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
4713                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
4714                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
4715                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
4716                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
4717                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
4718                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
4719                 delNewTab(i).REPEATING_DURATION          ,
4720                 delNewTab(i).FIXED_START_DATE            ,
4721                 delNewTab(i).FIXED_END_DATE              ,
4722                 delNewTab(i).MANAGE_YN                   ,
4723                 delNewTab(i).INTERNAL_PARTY_ID           ,
4724                 delNewTab(i).DELIVERABLE_STATUS          ,
4725                 delNewTab(i).STATUS_CHANGE_NOTES         ,
4726                 delNewTab(i).CREATED_BY                  ,
4727                 delNewTab(i).CREATION_DATE               ,
4728                 delNewTab(i).LAST_UPDATED_BY             ,
4729                 delNewTab(i).LAST_UPDATE_DATE            ,
4730                 delNewTab(i).LAST_UPDATE_LOGIN           ,
4731                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
4732                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
4733                 delNewTab(i).ATTRIBUTE1                  ,
4734                 delNewTab(i).ATTRIBUTE2                  ,
4735                 delNewTab(i).ATTRIBUTE3                  ,
4736                 delNewTab(i).ATTRIBUTE4                  ,
4737                 delNewTab(i).ATTRIBUTE5                  ,
4738                 delNewTab(i).ATTRIBUTE6                  ,
4739                 delNewTab(i).ATTRIBUTE7                  ,
4740                 delNewTab(i).ATTRIBUTE8                  ,
4741                 delNewTab(i).ATTRIBUTE9                  ,
4742                 delNewTab(i).ATTRIBUTE10                 ,
4743                 delNewTab(i).ATTRIBUTE11                 ,
4744                 delNewTab(i).ATTRIBUTE12                 ,
4745                 delNewTab(i).ATTRIBUTE13                 ,
4746                 delNewTab(i).ATTRIBUTE14                 ,
4747                 delNewTab(i).ATTRIBUTE15                 ,
4748                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
4749                 delNewTab(i).LAST_AMENDMENT_DATE         ,
4750                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
4751                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
4752                 delNewTab(i).START_EVENT_DATE            ,
4753                 delNewTab(i).END_EVENT_DATE              ,
4754                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
4755                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4756                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
4757                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
4758                 delNewTab(i).PAY_HOLD_OVERDUE_YN
4759                 ,delNewTab(i).orig_system_reference_code
4760                 ,delNewTab(i).orig_system_reference_id1
4761                 ,delNewTab(i).orig_system_reference_id2
4762                 ,delNewTab(i).RAISE_COMPLETION_EVENT_YN
4763                 ,delNewTab(i).del_category_code
4764                 , delNewTab(i).exhibit_code
4765                 , delNewTab(i).data_item_number
4766                 , delNewTab(i).price_group
4767                 , delNewTab(i).estimated_price
4768                 , delNewTab(i).uda_template_id
4769                 , delNewTab(i).schedule_type
4770                 );
4771                   copy_deliverable_udas(
4772                         delNewTab(i).orig_system_reference_id1,
4773                         delNewTab(i).DELIVERABLE_ID,
4774                         x_return_status,
4775                         x_msg_count,
4776                         x_msg_data,
4777                         x_errorcode
4778                         );
4779                   if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4780 	                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4781                   END IF;
4782                 END LOOP;
4783 
4784         -- insert records code changed for 8i compatability bug#3307941
4785         /* commented for 8i compatability bug#330794 major code change
4786         FORALL j IN delNewTab.FIRST..delNewTab.LAST
4787         INSERT INTO okc_deliverables VALUES delNewTab(j);*/
4788 
4789             FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
4790                 IF attachment_exists(p_entity_name => G_ENTITY_NAME
4791                       ,p_pk1_value    =>  delIdTab(j).orig_del_id) THEN
4792                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4793                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
4794                     END IF;
4795                     -- copy attachments
4796                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
4797                     fnd_attached_documents2_pkg.copy_attachments(
4798                     X_from_entity_name =>  G_ENTITY_NAME,
4799                     X_from_pk1_value   =>  delIdTab(j).orig_del_id,
4800                     X_to_entity_name   =>  G_ENTITY_NAME,
4801                     X_to_pk1_value     =>  to_char(delIdTab(j).del_id),
4802                     X_CREATED_BY       =>  FND_GLOBAL.User_id,
4803                     X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
4804                     );
4805                 END IF;
4806             END LOOP;
4807 
4808         END IF;
4809         IF del_cur %ISOPEN THEN
4810           CLOSE del_cur ;
4811         END IF;
4812 
4813 
4814         /*** start bug#3618448 do not flush amendment operations during versioning. PO will call
4815         clear amendment to flush amendment operation code.
4816             FOR del_rec IN del_cur LOOP
4817                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4818                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4819                     ,'100: Flush Amendment operation:'
4820                     ||to_char(del_rec.deliverable_id));
4821                 END IF;
4822                 UPDATE okc_deliverables SET amendment_operation = null,
4823                 --amendment_notes = null,
4824                 --last_amendment_date = null,
4825                 last_updated_by= Fnd_Global.User_Id,
4826                 last_update_date = sysdate,
4827                 last_update_login=Fnd_Global.Login_Id
4828                 WHERE deliverable_id = del_rec.deliverable_id;
4829 
4830             END LOOP;
4831         IF del_cur %ISOPEN THEN
4832           CLOSE del_cur ;
4833         END IF;*** end bug#3618448 **/
4834 
4835 	END IF; -- IF delCount = 0
4836             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4837                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4838                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4839             END IF;
4840 
4841             x_return_status := l_return_status;
4842     EXCEPTION
4843     WHEN FND_API.G_EXC_ERROR THEN
4844             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4845                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4846                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_ERROR'||
4847                 substr(sqlerrm,1,200));
4848             END IF;
4849         IF del_cur %ISOPEN THEN
4850           CLOSE del_cur ;
4851         END IF;
4852     x_return_status := G_RET_STS_ERROR;
4853       FND_MSG_PUB.Count_And_Get(
4854         p_count =>  x_msg_count,
4855         p_data  =>  x_msg_data
4856        );
4857 
4858     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4859             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4860                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4861                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||
4862                 substr(sqlerrm,1,200));
4863             END IF;
4864         IF del_cur %ISOPEN THEN
4865           CLOSE del_cur ;
4866         END IF;
4867     x_return_status := G_RET_STS_UNEXP_ERROR;
4868       FND_MSG_PUB.Count_And_Get(
4869         p_count =>  x_msg_count,
4870         p_data  =>  x_msg_data
4871         );
4872 
4873     WHEN OTHERS THEN
4874         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4875            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4876            ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4877         END IF;
4878         IF del_cur %ISOPEN THEN
4879           CLOSE del_cur ;
4880         END IF;
4881     x_return_status := G_RET_STS_UNEXP_ERROR;
4882       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4883          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4884       END IF;
4885       FND_MSG_PUB.Count_And_Get(
4886         p_count =>  x_msg_count,
4887         p_data  =>  x_msg_data
4888         );
4889     END version_deliverables;
4890 
4891     /***Invoked From: OKC_TERMS_VERSION_GRP.clear_amendment
4892     This API is invoked to clear amendment operation,
4893     summary amend operation code and amendment notes
4894     on deliverables for a given busdoc.
4895     Parameter Details:
4896     p_doc_id :       Business document Id
4897     p_doc_type :     Business document type
4898     bug#3618448 new param added
4899     p_keep_summary:  If set to 'N' all amendment attributes should be cleared.
4900     If 'Y' then only amendment_operation will be cleared, default is 'N'.
4901     ***/
4902     PROCEDURE clear_amendment_operation (
4903         p_api_version   IN NUMBER,
4904         p_init_msg_list IN VARCHAR2,
4905         p_doc_id        IN NUMBER,
4906         p_doc_type      IN VARCHAR2,
4907         x_msg_data      OUT NOCOPY  VARCHAR2,
4908         x_msg_count     OUT NOCOPY  NUMBER,
4909         x_return_status OUT NOCOPY  VARCHAR2,
4910         p_keep_summary  IN VARCHAR2 )
4911 
4912     IS
4913     CURSOR def_cur IS
4914     SELECT deliverable_id
4915     ,amendment_operation
4916     ,summary_amend_operation_code
4917     FROM okc_deliverables
4918     WHERE business_document_id = p_doc_id
4919     AND   business_document_version = -99
4920     AND   business_document_type = p_doc_type
4921     AND   manage_yn = 'N';
4922 
4923     def_rec def_cur%ROWTYPE;
4924     --TYPE delIdTabType IS TABLE OF NUMBER;
4925     --delIdTab    delIdTabType;
4926     l_return_status  VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
4927     l_api_name      CONSTANT VARCHAR2(30) :='clear_amendment_operation';
4928 
4929     BEGIN
4930 
4931          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4932            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': inside the API');
4933            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_id :'||p_doc_id);
4934            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_type :'||p_doc_type);
4935            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':p_keep_summary:'||p_keep_summary);
4936          END IF;
4937         -- Flush amendment attributes on the definition
4938         FOR def_rec IN def_cur LOOP
4939             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4940                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '
4941                 ||to_char(def_rec.deliverable_id));
4942             END IF;
4943             IF p_keep_summary = 'N' THEN
4944                 --bug#3630770,3639432 As per the new changes to amendments we hard delete deliverable
4945                 -- if either amendment_operation or summary code is 'DELETED' 20th May 2004
4946                 IF def_rec.amendment_operation = 'DELETED' OR
4947                     def_rec.summary_amend_operation_code = 'DELETED' THEN
4948                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4949                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4950                         '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4951                     END IF;
4952                     -- delete deleverable definitions which are removed from approved business doc
4953                     delete from okc_deliverables
4954                     where   deliverable_id = def_rec.deliverable_id;
4955                     DELETE FROM OKC_DELIVERABLES_EXT_B
4956                     WHERE  deliverable_id = def_rec.deliverable_id;
4957                     DELETE FROM OKC_DELIVERABLES_EXT_TL
4958                     WHERE  deliverable_id = def_rec.deliverable_id;
4959                 ELSE
4960                     -- clear all amendment attributes but
4961                     -- don't clear last_amendment_date this is needed for PO change History
4962                     -- to enable or disable deliverables link
4963                     UPDATE okc_deliverables SET amendment_operation = null,
4964                     summary_amend_operation_code = null,
4965                     amendment_notes = null,
4966                     last_updated_by= Fnd_Global.User_Id,
4967                     last_update_date = sysdate,
4968                     last_update_login=Fnd_Global.Login_Id
4969                     WHERE deliverable_id = def_rec.deliverable_id;
4970                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4971                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4972                         ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
4973                     END IF;
4974                 END IF;
4975 
4976             ELSE -- p_keep_summary = 'Y'
4977                 --bug#3630770, 3639432 As per the new changes to amendments we hard delete deliverable
4978                 -- if either amendment_operation is DELETED or summary code is null
4979                 IF def_rec.amendment_operation = 'DELETED' AND
4980                     def_rec.summary_amend_operation_code is null THEN
4981                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4982                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4983                         '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4984                     END IF;
4985                     -- delete deleverable definitions which are removed from approved business doc
4986                     delete from okc_deliverables
4987                     where   deliverable_id = def_rec.deliverable_id;
4988                     DELETE FROM OKC_DELIVERABLES_EXT_B
4989                     WHERE  deliverable_id = def_rec.deliverable_id;
4990                     DELETE FROM OKC_DELIVERABLES_EXT_TL
4991                     WHERE  deliverable_id = def_rec.deliverable_id;
4992                 ELSE
4993                     -- clear only amendment_operation
4994                     UPDATE okc_deliverables SET amendment_operation = null,
4995                     last_updated_by= Fnd_Global.User_Id,
4996                     last_update_date = sysdate,
4997                     last_update_login=Fnd_Global.Login_Id
4998                     WHERE deliverable_id = def_rec.deliverable_id;
4999                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5000                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
5001                         ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
5002                     END IF;
5003                 END IF;
5004 
5005             END IF; -- p_keep_summary
5006         END LOOP; -- del_cur loop
5007         -- close any open cursors
5008         IF def_cur %ISOPEN THEN
5009           CLOSE def_cur ;
5010         END IF;
5011         x_return_status := l_return_status;
5012 
5013     EXCEPTION
5014     WHEN OTHERS THEN
5015        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5016           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
5017           ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.clear_amendments with G_EXC_UNEXPECTED_ERROR'||
5018           substr(sqlerrm,1,200));
5019        END IF;
5020         -- close any open cursors
5021         IF def_cur %ISOPEN THEN
5022           CLOSE def_cur ;
5023         END IF;
5024         x_return_status := G_RET_STS_UNEXP_ERROR;
5025       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5026          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5027       END IF;
5028       FND_MSG_PUB.Count_And_Get(
5029         p_count =>  x_msg_count,
5030         p_data  =>  x_msg_data
5031         );
5032 
5033     END clear_amendment_operation;
5034 
5035 
5036 
5037     /*** This procedure will disable or turn manage_yn to 'N'
5038     for a given document type and version ***/
5039     PROCEDURE disable_deliverables (
5040         p_api_version       IN  NUMBER,
5041         p_init_msg_list     IN VARCHAR2,
5042         p_doc_id            IN  NUMBER,
5043         p_doc_version       IN  NUMBER,
5044         p_doc_type          IN VARCHAR2,
5045         x_msg_data      OUT NOCOPY  VARCHAR2,
5046         x_msg_count     OUT NOCOPY  NUMBER,
5047         x_return_status OUT NOCOPY  VARCHAR2)
5048     IS
5049     l_api_name      CONSTANT VARCHAR2(30) :='disable_deliverable';
5050     CURSOR del_cur IS
5051     SELECT deliverable_id
5052     FROM okc_deliverables
5053     WHERE business_document_id = p_doc_id
5054     AND   business_document_version =p_doc_version
5055     AND   business_document_type = p_doc_type
5056     AND   manage_yn = 'Y';
5057     TYPE delIdTabType IS TABLE OF NUMBER;
5058     delIdTab    delIdTabType;
5059     l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5060 
5061     BEGIN
5062           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5063             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
5064             ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES');
5065           END IF;
5066             OPEN del_cur;
5067             FETCH del_cur BULK COLLECT INTO delIdTab;
5068             IF delIdTab.COUNT <> 0 THEN
5069                 FORALL i IN delIdTab.FIRST..delIdTab.LAST
5070                 UPDATE okc_deliverables SET manage_yn = 'N',
5071                 last_updated_by= Fnd_Global.User_Id,
5072                 last_update_date = sysdate,
5073                 last_update_login=Fnd_Global.Login_Id
5074                 WHERE deliverable_id = delIdTab(i);
5075             END IF;
5076         IF del_cur %ISOPEN THEN
5077           CLOSE del_cur ;
5078         END IF;
5079             x_return_status := l_return_status;
5080 
5081     EXCEPTION
5082     WHEN FND_API.G_EXC_ERROR THEN
5083         IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5084             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_ERROR');
5085         END IF;
5086         IF del_cur %ISOPEN THEN
5087           CLOSE del_cur ;
5088         END IF;
5089       x_return_status := G_RET_STS_ERROR;
5090       FND_MSG_PUB.Count_And_Get(
5091         p_count =>  x_msg_count,
5092         p_data  =>  x_msg_data
5093         );
5094     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5095         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5096             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_UNEXPECTED_ERROR');
5097         END IF;
5098         IF del_cur %ISOPEN THEN
5099           CLOSE del_cur ;
5100         END IF;
5101       x_return_status := G_RET_STS_UNEXP_ERROR;
5102       FND_MSG_PUB.Count_And_Get(
5103         p_count =>  x_msg_count,
5104         p_data  =>  x_msg_data
5105         );
5106 
5107     WHEN OTHERS THEN
5108         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5109             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_UNEXPECTED_ERROR');
5110         END IF;
5111         IF del_cur %ISOPEN THEN
5112           CLOSE del_cur ;
5113         END IF;
5114       x_return_status := G_RET_STS_UNEXP_ERROR;
5115       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5116         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5117       END IF;
5118       FND_MSG_PUB.Count_And_Get(
5119         p_count =>  x_msg_count,
5120         p_data  =>  x_msg_data
5121         );
5122 
5123     END disable_deliverables;
5124 
5125     -- Creates status history for a given deliverable
5126     PROCEDURE create_del_status_history(
5127         p_api_version       IN NUMBER,
5128         p_init_msg_list     IN VARCHAR2,
5129         p_del_id            IN NUMBER,
5130         p_deliverable_status    IN VARCHAR2,
5131         x_msg_data      OUT NOCOPY  VARCHAR2,
5132         x_msg_count     OUT NOCOPY  NUMBER,
5133         x_return_status OUT NOCOPY  VARCHAR2)
5134     IS
5135 
5136     l_api_name      CONSTANT VARCHAR2(30) :='create_del_status_history';
5137     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
5138     l_msg_count       NUMBER;
5139     l_msg_data        VARCHAR2(1000);
5140     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5141     j PLS_INTEGER := 0;
5142 
5143 
5144     BEGIN
5145 
5146           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5147             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
5148           END IF;
5149 
5150 
5151                     --insert into status history
5152                     INSERT INTO okc_del_status_history (
5153                     deliverable_id,
5154                     deliverable_status,
5155                     status_changed_by,
5156                     status_change_date,
5157                     status_change_notes,
5158                     object_version_number,
5159                     created_by,
5160                     creation_date,
5161                     last_updated_by,
5162                     last_update_date,
5163                     last_update_login)
5164                     VALUES(
5165                      p_del_id,
5166                      p_deliverable_status,
5167                      null,
5168                      sysdate,
5169                      null,
5170                      1,
5171                      Fnd_Global.User_Id,
5172                      sysdate,
5173                      Fnd_Global.User_Id,
5174                      sysdate,
5175                      Fnd_Global.Login_Id);
5176 
5177           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5178             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
5179           END IF;
5180           x_return_status := l_return_status;
5181     EXCEPTION
5182     WHEN FND_API.G_EXC_ERROR THEN
5183           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5184             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
5185           END IF;
5186     x_return_status := G_RET_STS_ERROR;
5187       FND_MSG_PUB.Count_And_Get(
5188         p_count =>  x_msg_count,
5189         p_data  =>  x_msg_data
5190         );
5191 
5192     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5193           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5194             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
5195           END IF;
5196     x_return_status := G_RET_STS_UNEXP_ERROR;
5197       FND_MSG_PUB.Count_And_Get(
5198         p_count =>  x_msg_count,
5199         p_data  =>  x_msg_data
5200         );
5201 
5202     WHEN OTHERS THEN
5203           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5204             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
5205           END IF;
5206     x_return_status := G_RET_STS_UNEXP_ERROR;
5207       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5208       END IF;
5209       FND_MSG_PUB.Count_And_Get(
5210         p_count =>  x_msg_count,
5211         p_data  =>  x_msg_data
5212         );
5213     END create_del_status_history;
5214 
5215     /***
5216     This API is invoked from OKC_MANAGE_DELIVERABLES_GRP.activate_deliverables
5217     and close_deliverables. It changes the status to a given status for a busdoc.
5218     Creates status history for deliverable.
5219     ***/
5220     PROCEDURE change_deliverable_status (
5221         p_api_version       IN NUMBER,
5222         p_init_msg_list     IN VARCHAR2,
5223         p_doc_id            IN NUMBER,
5224         p_doc_version       IN NUMBER,
5225         p_doc_type          IN VARCHAR2,
5226         p_cancel_yn         IN VARCHAR2,
5227         p_cancel_event_code IN VARCHAR2,
5228         p_current_status    IN VARCHAR2,
5229         p_new_status        IN VARCHAR2,
5230         p_manage_yn         IN VARCHAR2,
5231         x_msg_data      OUT NOCOPY  VARCHAR2,
5232         x_msg_count     OUT NOCOPY  NUMBER,
5233         x_return_status OUT NOCOPY  VARCHAR2)
5234     IS
5235     l_api_name      CONSTANT VARCHAR2(30) :='change_deliverable_status';
5236     CURSOR del_activate_cur IS
5237     SELECT deliverable_id
5238     FROM okc_deliverables
5239     WHERE business_document_id = p_doc_id
5240     AND   business_document_version =p_doc_version
5241     AND   business_document_type = p_doc_type
5242     AND   deliverable_status = p_current_status
5243     AND   actual_due_date is not null;
5244 
5245  /*   CURSOR del_cancel_cur IS
5246     SELECT deliverable_id
5247     FROM okc_deliverables
5248     WHERE business_document_id = p_doc_id
5249     AND   business_document_version =p_doc_version
5250     AND   business_document_type = p_doc_type
5251     AND   NVL(relative_st_date_event_id,0) NOT IN (
5252     select bus_doc_event_id
5253     from okc_bus_doc_events_v
5254     where business_event_code = p_cancel_event_code);
5255 */
5256     TYPE delIdTabType IS TABLE OF NUMBER;
5257     delIdTab    delIdTabType;
5258 
5259     TYPE delStsTabType IS TABLE OF okc_del_status_history%ROWTYPE;
5260     delStsTab   delStsTabType;
5261 
5262     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
5263     l_msg_count       NUMBER;
5264     l_msg_data        VARCHAR2(1000);
5265     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5266     j PLS_INTEGER := 0;
5267 
5268 
5269     BEGIN
5270 
5271           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5272             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
5273           END IF;
5274         IF p_cancel_yn = 'N' THEN
5275             OPEN del_activate_cur;
5276             FETCH del_activate_cur BULK COLLECT INTO delIdTab;
5277             IF delIdTab.COUNT <> 0 THEN
5278                     delStsTab   := delStsTabType();
5279             FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
5280 
5281                     j := j+1;
5282                     delStsTab.extend;
5283                     delStsTab(j).deliverable_id := delIdTab(i);
5284                     delStsTab(j).deliverable_status:= p_new_status;
5285                     delStsTab(j).status_change_date:= sysdate;
5286                     delStsTab(j).status_change_notes:= null;
5287                     delStsTab(j).object_version_number:= 1;
5288                     delStsTab(j).created_by:= Fnd_Global.User_Id;
5289                     delStsTab(j).creation_date := sysdate;
5290                     delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
5291                     delStsTab(j).last_update_date := sysdate;
5292                     delStsTab(j).last_update_login := Fnd_Global.Login_Id;
5293             END LOOP;
5294 
5295                     --Bulk update of status in okc_deliverables
5296                     FORALL i IN delIdTab.FIRST..delIdTab.LAST
5297                     UPDATE okc_deliverables
5298                     SET
5299                     deliverable_status = p_new_status,
5300                     manage_yn   = p_manage_yn,
5301                     last_updated_by= Fnd_Global.User_Id,
5302                     last_update_date = sysdate,
5303                     last_update_login = Fnd_Global.Login_Id
5304                     WHERE deliverable_id = delIdTab(i);
5305                     --Bulk insert into status history
5306                         FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5307                 /*code changed for 8i compatability bug#3307941
5308                 INSERT INTO okc_del_status_history VALUES delStsTab(i); */
5309                         INSERT INTO okc_del_status_history
5310                         (deliverable_id,
5311                         deliverable_status,
5312                         STATUS_CHANGED_BY,
5313                         status_change_date,
5314                         status_change_notes,
5315                         object_version_number,
5316                         created_by,
5317                         creation_date,
5318                         last_updated_by,
5319                         last_update_date,
5320                         last_update_login)
5321                         VALUES (delStsTab(i).DELIVERABLE_ID
5322                         ,delStsTab(i).DELIVERABLE_STATUS
5323                         ,delStsTab(i).STATUS_CHANGED_BY
5324                         ,delStsTab(i).STATUS_CHANGE_DATE
5325                         ,delStsTab(i).STATUS_CHANGE_NOTES
5326                         ,delStsTab(i).OBJECT_VERSION_NUMBER
5327                         ,delStsTab(i).CREATED_BY
5328                         ,delStsTab(i).CREATION_DATE
5329                         ,delStsTab(i).LAST_UPDATED_BY
5330                         ,delStsTab(i).LAST_UPDATE_DATE
5331                         ,delStsTab(i).LAST_UPDATE_LOGIN
5332                         );
5333                         END LOOP;
5334             END IF;
5335             CLOSE del_activate_cur;
5336 
5337         -- If status change is called when any business document is cancelled
5338         ELSIF p_cancel_yn = 'Y' THEN
5339 
5340 /** Updated this procedure - 01/20/2004 by SASETHI
5341     Commendted out code for changing deliverable status to CANCELLED when canceled
5342     operation is called from Mng Deliverables GRP.
5343 **/
5344            -- disable deliverables that are currently being managed.
5345             -- before activating deliverables on new version
5346             disable_deliverables (
5347                  p_api_version      => l_api_version ,
5348                  p_init_msg_list    => FND_API.G_FALSE ,
5349                  p_doc_id           => p_doc_id ,
5350                  p_doc_version      => p_doc_version ,
5351                  p_doc_type         => p_doc_type ,
5352                  x_msg_data         => l_msg_data ,
5353                  x_msg_count        => l_msg_count ,
5354                  x_return_status    => l_return_status );
5355 
5356 /** Status change is not required as per bug # 3369337
5357 
5358             OPEN del_cancel_cur;
5359             FETCH del_cancel_cur BULK COLLECT INTO delIdTab;
5360 
5361             IF delIdTab.COUNT <> 0 THEN
5362                 delStsTab   := delStsTabType();
5363                 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
5364 
5365                     j := j+1;
5366                     delStsTab.extend;
5367                     --delStsTab(j).deliverable_id := delIdTab(i).deliverable_id;
5368                     delStsTab(j).deliverable_id := delIdTab(i);
5369                     delStsTab(j).deliverable_status:= p_new_status;
5370                     delStsTab(j).status_change_date:= sysdate;
5371                     delStsTab(j).status_change_notes:= null;
5372                     delStsTab(j).object_version_number:= 1;
5373                     delStsTab(j).created_by:= Fnd_Global.User_Id;
5374                     delStsTab(j).creation_date := sysdate;
5375                     delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
5376                     delStsTab(j).last_update_date := sysdate;
5377                     delStsTab(j).last_update_login := Fnd_Global.Login_Id;
5378                 END LOOP;
5379 
5380                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
5381                     -- BULK UPDATE of status
5382                     FORALL i IN delIdTab.FIRST..delIdTab.LAST
5383                     UPDATE okc_deliverables
5384                     SET
5385                     deliverable_status = p_new_status,
5386                     manage_yn   = 'N',
5387                     last_updated_by= Fnd_Global.User_Id,
5388                     last_update_date = sysdate,
5389                     last_update_login = Fnd_Global.Login_Id
5390                     WHERE deliverable_id = delIdTab(i);
5391 
5392                 -- BULK INSERT into status history
5393                 FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5394                 --code changed for 8i compatability bug#3307941
5395                 --INSERT INTO okc_del_status_history VALUES delStsTab(i);
5396                 INSERT INTO okc_del_status_history
5397                 (deliverable_id,
5398                 deliverable_status,
5399                 STATUS_CHANGED_BY,
5400                 status_change_date,
5401                 status_change_notes,
5402                 object_version_number,
5403                 created_by,
5404                 creation_date,
5405                 last_updated_by,
5406                 last_update_date,
5407                 last_update_login)
5408                 VALUES (delStsTab(i).DELIVERABLE_ID
5409                 ,delStsTab(i).DELIVERABLE_STATUS
5410                 ,delStsTab(i).STATUS_CHANGED_BY
5411                 ,delStsTab(i).STATUS_CHANGE_DATE
5412                 ,delStsTab(i).STATUS_CHANGE_NOTES
5413                 ,delStsTab(i).OBJECT_VERSION_NUMBER
5414                 ,delStsTab(i).CREATED_BY
5415                 ,delStsTab(i).CREATION_DATE
5416                 ,delStsTab(i).LAST_UPDATED_BY
5417                 ,delStsTab(i).LAST_UPDATE_DATE
5418                 ,delStsTab(i).LAST_UPDATE_LOGIN
5419                 );
5420                 END LOOP;
5421                 ELSE
5422                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5423                 END IF;
5424             END IF;
5425             CLOSE del_cancel_cur;
5426 **/
5427         END IF; -- if operation is for CANCELLED
5428 
5429           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5430             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
5431           END IF;
5432           x_return_status := l_return_status;
5433     EXCEPTION
5434     WHEN FND_API.G_EXC_ERROR THEN
5435           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5436             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_ERROR');
5437           END IF;
5438         IF del_activate_cur %ISOPEN THEN
5439           CLOSE del_activate_cur ;
5440         END IF;
5441     x_return_status := G_RET_STS_ERROR;
5442       FND_MSG_PUB.Count_And_Get(
5443         p_count =>  x_msg_count,
5444         p_data  =>  x_msg_data
5445         );
5446 
5447     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5448           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5449             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_UNEXPECTED_ERROR');
5450           END IF;
5451         IF del_activate_cur %ISOPEN THEN
5452           CLOSE del_activate_cur ;
5453         END IF;
5454     x_return_status := G_RET_STS_UNEXP_ERROR;
5455       FND_MSG_PUB.Count_And_Get(
5456         p_count =>  x_msg_count,
5457         p_data  =>  x_msg_data
5458         );
5459 
5460     WHEN OTHERS THEN
5461           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5462             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_UNEXPECTED_ERROR');
5463           END IF;
5464         IF del_activate_cur %ISOPEN THEN
5465           CLOSE del_activate_cur ;
5466         END IF;
5467     x_return_status := G_RET_STS_UNEXP_ERROR;
5468       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5469       END IF;
5470       FND_MSG_PUB.Count_And_Get(
5471         p_count =>  x_msg_count,
5472         p_data  =>  x_msg_data
5473         );
5474 
5475     END change_deliverable_status;
5476 
5477 
5478 
5479     /***
5480     This is the Concurrent Program scheduled to run every day
5481     to send out notifications about overdue deliverables.
5482     It internally calls API overdue_del_notifier
5483     to check for overdue deliverabls and send out notifications
5484     ***/
5485     PROCEDURE overdue_deliverable_manager (
5486     errbuf  OUT NOCOPY VARCHAR2,
5487     retcode OUT NOCOPY VARCHAR2)
5488     IS
5489     l_api_name      CONSTANT VARCHAR2(30) :='overdue_deliverable_manager';
5490     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5491     l_msg_count       NUMBER;
5492     l_msg_data        VARCHAR2(1000);
5493     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5494     l_init_msg_list   VARCHAR2(3) := 'T';
5495     E_Resource_Busy   EXCEPTION;
5496     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
5497 
5498     BEGIN
5499           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5500             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5501           END IF;
5502     --Initialize the return code
5503         retcode := 0;
5504     --Invoke overdue_del_notifier
5505         overdue_del_notifier(
5506         p_api_version          => l_api_version ,
5507         p_init_msg_list        => l_init_msg_list,
5508         x_return_status        => l_return_status,
5509         x_msg_count            => l_msg_count,
5510         x_msg_data             => l_msg_data);
5511            --check return status
5512             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5513                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5514             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5515                 RAISE OKC_API.G_EXCEPTION_ERROR;
5516             END IF;
5517           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5518             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5519           END IF;
5520     EXCEPTION
5521     WHEN E_Resource_Busy THEN
5522           IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5523             FND_LOG.STRING(  FND_LOG.LEVEL_EXCEPTION ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager with resource busy state');
5524           END IF;
5525       l_return_status := okc_api.g_ret_sts_error;
5526       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5527     WHEN OTHERS THEN
5528           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5529             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager with G_EXC_UNEXPECTED_ERROR');
5530           END IF;
5531       retcode := 2;
5532       errbuf  := substr(sqlerrm,1,200);
5533       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5534        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5535       END IF;
5536       IF FND_MSG_PUB.Count_Msg > 0 Then
5537         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5538           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5539         END LOOP;
5540       END IF;
5541       FND_MSG_PUB.initialize;
5542 
5543     END overdue_deliverable_manager;
5544 
5545     /***
5546     Invoked by Concurrent Program "overdue_deliverable_manager"
5547     Picks all deliverables that are overdue
5548     Invokes Deliverable Notifier to send out notifications
5549     Update deliverables with overdue_notification_id
5550     ***/
5551     PROCEDURE overdue_del_notifier(
5552     p_api_version                  IN NUMBER ,
5553     p_init_msg_list                IN VARCHAR2 ,
5554     x_return_status                OUT NOCOPY VARCHAR2,
5555     x_msg_count                    OUT NOCOPY NUMBER,
5556     x_msg_data                     OUT NOCOPY VARCHAR2) IS
5557 
5558     l_api_name      CONSTANT VARCHAR2(30) :='overdue_del_notifier';
5559 
5560     CURSOR del_cur IS
5561       SELECT deliverable_id,
5562              deliverable_name,
5563              deliverable_type,
5564              business_document_id,
5565              business_document_version,
5566              business_document_type,
5567              business_document_number,
5568              responsible_party,
5569              external_party_contact_id,
5570              internal_party_contact_id,
5571              requester_id
5572       FROM okc_deliverables
5573       WHERE manage_yn = 'Y'
5574       AND   disable_notifications_yn = 'N'
5575       AND   notify_overdue_yn = 'Y'
5576       AND   overdue_notification_id is null
5577       AND   business_document_type <> 'TEMPLATE'
5578       AND   deliverable_status IN ('OPEN','REJECTED')
5579       AND   actual_due_date < trunc(sysdate); --  bug#3617906 removed trunc on actual due date
5580 
5581     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5582     l_msg_count       NUMBER;
5583     l_msg_data        VARCHAR2(1000);
5584     l_notification_id NUMBER;
5585     j  PLS_INTEGER := 0;
5586 
5587     TYPE del_cur_tbl IS TABLE OF del_cur%ROWTYPE;
5588     selected_dels del_cur_tbl;
5589 
5590     TYPE OverdueNtfIdList IS TABLE OF okc_deliverables.overdue_notification_id%TYPE NOT NULL
5591         INDEX BY PLS_INTEGER;
5592     TYPE DeliverableIdList IS TABLE OF okc_deliverables.deliverable_id%TYPE NOT NULL
5593         INDEX BY PLS_INTEGER;
5594     overdue_ntf_ids OverdueNtfIdList;
5595     deliverable_ids DeliverableIdList;
5596 
5597     l_batch_size number(4) := 1000;
5598 
5599 	--Acq Plan Message Cleanup
5600     l_resolved_msg_name VARCHAR2(30);
5601 
5602 
5603     BEGIN
5604       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5605         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5606       END IF;
5607 
5608       -- call start_activity to create savepoint, check comptability
5609       -- and initialize message list
5610       l_return_status := OKC_API.START_ACTIVITY(l_api_name
5611                                                 ,p_init_msg_list
5612                                                 ,'_PROCESS'
5613                                                 ,x_return_status);
5614 
5615       -- check if activity started successfully
5616       IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5617         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5618       ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5619         RAISE OKC_API.G_EXCEPTION_ERROR;
5620       END IF;
5621 
5622 
5623       OPEN del_cur;
5624       LOOP -- the following statement fetches 1000 rows or less in each iteration
5625 
5626         FETCH del_cur BULK COLLECT INTO selected_dels
5627         LIMIT l_batch_size;
5628 
5629         EXIT WHEN selected_dels.COUNT = 0;
5630 
5631         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5632           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: selected_dels.COUNT is :'||to_char(selected_dels.COUNT));
5633         END IF;
5634 
5635 
5636         FOR i IN selected_dels.FIRST..NVL(selected_dels.LAST, -1) LOOP
5637 
5638           -- log messages in concurrent program log file
5639           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5640                       selected_dels(i).business_document_type||'-'||selected_dels(i).business_document_number);
5641           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5642                       to_char(selected_dels(i).deliverable_id));
5643 
5644 				  --Acq Plan Message Cleanup
5645                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_OVERDUE_NTF_SUBJECT',selected_dels(i).business_document_type);
5646 
5647           okc_deliverable_wf_pvt.deliverables_notifier(
5648                       p_api_version               => 1.0,
5649                       p_init_msg_list             => FND_API.G_TRUE,
5650                       p_deliverable_id            => selected_dels(i).deliverable_id,
5651                       p_deliverable_name          => selected_dels(i).deliverable_name,
5652                       p_deliverable_type          => selected_dels(i).deliverable_type,
5653                       p_business_document_id      => selected_dels(i).business_document_id,
5654                       p_business_document_version => selected_dels(i).business_document_version,
5655                       p_business_document_type    => selected_dels(i).business_document_type,
5656                       p_business_document_number  => selected_dels(i).business_document_number,
5657                       p_resp_party                => selected_dels(i).responsible_party,
5658                       p_external_contact          => selected_dels(i).external_party_contact_id,
5659                       p_internal_contact          => selected_dels(i).internal_party_contact_id,
5660                       p_requester_id              => selected_dels(i).requester_id,
5661                       --p_msg_code                  => 'OKC_DEL_OVERDUE_NTF_SUBJECT',
5662                       p_msg_code                  => l_resolved_msg_name,
5663                       x_notification_id           => l_notification_id,
5664                       x_msg_data                  => l_msg_data,
5665                       x_msg_count                 => l_msg_count,
5666                       x_return_status             => l_return_status);
5667 
5668           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5669             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
5670           END IF;
5671 
5672           --If notification id is not null then the deliverables_notifier is success
5673           IF l_notification_id is not null THEN
5674             -- if return status is success then notification is sent to
5675             -- internal or external contact so update table with ntf id
5676             IF l_return_status = 'S' THEN
5677               j := j+1;
5678               deliverable_ids(j) := selected_dels(i).deliverable_id;
5679               overdue_ntf_ids(j) := l_notification_id;
5680             ELSIF l_return_status <> 'S' THEN
5681               -- The return status is success because error notification has been
5682               -- sent to person who launched the concurrent request.
5683               l_return_status := 'S';
5684             END IF;
5685           ELSE
5686             RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5687           END IF;
5688 
5689         END LOOP;
5690 
5691       END LOOP;
5692 
5693       CLOSE del_cur;
5694 
5695       IF deliverable_ids.COUNT > 0 THEN
5696         FORALL i IN deliverable_ids.FIRST..NVL(deliverable_ids.LAST, -1)
5697 
5698           UPDATE okc_deliverables
5699           SET overdue_notification_id = overdue_ntf_ids(i),
5700               last_update_date = sysdate,
5701               last_updated_by = FND_GLOBAL.User_id,
5702               last_update_login =Fnd_Global.Login_Id
5703           WHERE deliverable_id = deliverable_ids(i);
5704 
5705         COMMIT;
5706 
5707       END IF;
5708 
5709       OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
5710 
5711       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5712         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5713       END IF;
5714 
5715     EXCEPTION
5716       WHEN FND_API.G_EXC_ERROR THEN
5717         IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5718           FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
5719         END IF;
5720 
5721         IF del_cur %ISOPEN THEN
5722           CLOSE del_cur ;
5723         END IF;
5724 
5725         x_return_status := G_RET_STS_ERROR;
5726         FND_MSG_PUB.Count_And_Get(
5727           p_count =>  x_msg_count,
5728           p_data  =>  x_msg_data);
5729 
5730       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5731         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5732           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
5733         END IF;
5734 
5735         IF del_cur %ISOPEN THEN
5736           CLOSE del_cur ;
5737         END IF;
5738 
5739         x_return_status := G_RET_STS_UNEXP_ERROR;
5740         FND_MSG_PUB.Count_And_Get(
5741           p_count =>  x_msg_count,
5742           p_data  =>  x_msg_data);
5743 
5744       WHEN OTHERS THEN
5745         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5746           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
5747         END IF;
5748 
5749         IF del_cur %ISOPEN THEN
5750           CLOSE del_cur ;
5751         END IF;
5752 
5753         x_return_status := G_RET_STS_UNEXP_ERROR;
5754 
5755         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5756           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5757         END IF;
5758 
5759         FND_MSG_PUB.Count_And_Get(
5760           p_count =>  x_msg_count,
5761           p_data  =>  x_msg_data);
5762         FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
5763 
5764     END overdue_del_notifier;
5765 
5766 
5767     /***
5768     This is the Concurrent Program scheduled to run every day
5769     to send out notifications about beforedue deliverables.
5770     It internally calls API beforedue_del_notifier
5771     ***/
5772     PROCEDURE beforedue_deliverable_manager (
5773     errbuf  OUT NOCOPY VARCHAR2,
5774     retcode OUT NOCOPY VARCHAR2)
5775     IS
5776     l_api_name      CONSTANT VARCHAR2(30) :='beforedue_deliverable_manager';
5777     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5778     l_init_msg_list   VARCHAR2(3) := 'T';
5779     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5780     l_msg_count       NUMBER;
5781     l_msg_data        VARCHAR2(1000);
5782     E_Resource_Busy   EXCEPTION;
5783     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
5784 
5785     BEGIN
5786          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5787           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5788          END IF;
5789     --Initialize the return code
5790         retcode := 0;
5791     --Invoke beforedue_del_notifier
5792            beforedue_del_notifier (
5793         p_api_version          => l_api_version ,
5794         p_init_msg_list        => l_init_msg_list,
5795         x_return_status        => l_return_status,
5796         x_msg_count            => l_msg_count,
5797         x_msg_data             => l_msg_data);
5798 
5799            --check return status
5800             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5801                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5802             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5803                 RAISE OKC_API.G_EXCEPTION_ERROR;
5804             END IF;
5805 
5806          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5807           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5808          END IF;
5809     EXCEPTION
5810     WHEN E_Resource_Busy THEN
5811       l_return_status := okc_api.g_ret_sts_error;
5812       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5813       IF FND_MSG_PUB.Count_Msg > 0 Then
5814         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5815           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5816         END LOOP;
5817       END IF;
5818       FND_MSG_PUB.initialize;
5819     WHEN OTHERS THEN
5820       retcode := 2;
5821       errbuf  := substr(sqlerrm,1,200);
5822       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5823         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5824       END IF;
5825       IF FND_MSG_PUB.Count_Msg > 0 Then
5826         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5827           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5828         END LOOP;
5829       END IF;
5830       FND_MSG_PUB.initialize;
5831 
5832     END beforedue_deliverable_manager;
5833 
5834 
5835     /***
5836     Invoked by Concurrent Program "beforedue_deliverable_manager"
5837     Picks all deliverables eligible for before due date notifications
5838     Invokes Deliverable Notifier to send out notifications
5839     Update deliverables with prior_notification_id
5840     ***/
5841     PROCEDURE beforedue_del_notifier (
5842     p_api_version                  IN NUMBER ,
5843     p_init_msg_list                IN VARCHAR2 ,
5844     x_return_status                OUT NOCOPY VARCHAR2,
5845     x_msg_count                    OUT NOCOPY NUMBER,
5846     x_msg_data                     OUT NOCOPY VARCHAR2)
5847     IS
5848     CURSOR del_cur IS
5849     SELECT *
5850     FROM okc_deliverables
5851     WHERE manage_yn = 'Y'
5852     AND   disable_notifications_yn = 'N'
5853     AND   notify_prior_due_date_yn = 'Y'
5854     AND   prior_notification_id is null
5855     AND   business_document_type <> 'TEMPLATE'
5856     AND   deliverable_status IN ('OPEN','REJECTED')
5857     AND   trunc(actual_due_date) > trunc(sysdate);
5858 
5859     l_api_name      CONSTANT VARCHAR2(30) :='beforedue_del_notifier';
5860     l_notification_date DATE;
5861     delRecTab   delRecTabType;
5862     delNtfTab   delRecTabType;
5863     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5864     l_msg_count       NUMBER;
5865     l_msg_data        VARCHAR2(1000);
5866     l_notification_id NUMBER;
5867     l_deliverable_id NUMBER;
5868     j  PLS_INTEGER := 0;
5869     k  PLS_INTEGER := 0;
5870 
5871 	--Acq Plan Message Cleanup
5872     l_resolved_msg_name VARCHAR2(30);
5873     BEGIN
5874 
5875        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5876         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
5877        END IF;
5878        -- call start_activity to create savepoint, check comptability
5879        -- and initialize message list
5880            l_return_status := OKC_API.START_ACTIVITY(l_api_name
5881                  ,p_init_msg_list
5882                  ,'_PROCESS'
5883                  ,x_return_status
5884                  );
5885                  -- check if activity started successfully
5886                  IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5887                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5888                  ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5889                     RAISE OKC_API.G_EXCEPTION_ERROR;
5890                  END IF;
5891 ---------------------------------------------------
5892         FOR del_rec IN del_cur LOOP
5893       k := k+1;
5894       delRecTab(k).deliverable_id := del_rec.deliverable_id;
5895       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
5896       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
5897       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
5898       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
5899       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
5900       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
5901       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
5902       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
5903       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
5904       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
5905       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
5906       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
5907       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
5908       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
5909       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
5910       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
5911       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
5912       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
5913       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
5914       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
5915       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
5916       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
5917       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
5918       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
5919       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
5920       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
5921       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
5922       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
5923       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
5924       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
5925       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
5926       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
5927       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
5928       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
5929       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
5930       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
5931       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
5932       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
5933       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
5934       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
5935       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
5936       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
5937       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
5938       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
5939       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
5940       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
5941       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
5942       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
5943       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
5944       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
5945       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
5946       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
5947       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
5948       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
5949       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
5950       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
5951       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
5952       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
5953       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
5954       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
5955       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
5956       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
5957       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
5958       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
5959       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
5960       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
5961       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
5962       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
5963       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
5964       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
5965       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
5966       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
5967       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
5968       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
5969       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
5970       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
5971       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
5972       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
5973       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
5974       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
5975       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
5976       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
5977       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
5978       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
5979       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
5980       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
5981       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
5982 
5983     END LOOP;
5984 
5985 
5986          -- commented as this is not supported by 8i PL/SQL Bug#3307941
5987           /*OPEN del_cur;
5988             FETCH del_cur BULK COLLECT INTO delRecTab;*/
5989             IF delRecTab.COUNT > 0 THEN
5990          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5991            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
5992          END IF;
5993             FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
5994 
5995             -- log messages in concurrent program log file
5996           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5997             delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
5998           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5999             to_char(delRecTab(i).deliverable_id));
6000          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6001            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
6002          END IF;
6003                 IF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'DAY' THEN
6004                     l_notification_date := trunc(delRecTab(i).actual_due_date)-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
6005                 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'WK' THEN
6006                     l_notification_date :=trunc(delRecTab(i).actual_due_date)-7*delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
6007                 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'MTH' THEN
6008                     select add_months(delRecTab(i).actual_due_date,-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE)
6009                     INTO l_notification_date from dual;
6010                 END IF;
6011 
6012                 IF trunc(l_notification_date) = trunc(sysdate) OR
6013                    trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
6014                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6015                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100:Del Id  :'||to_char(delRecTab(i).deliverable_id));
6016                     END IF;
6017 
6018 				  --Acq Plan Message Cleanup
6019                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_BEFOREDUE_NTF_SUBJECT',delRecTab(i).business_document_type);
6020 
6021                     okc_deliverable_wf_pvt.deliverables_notifier(
6022                     p_api_version               => 1.0,
6023                     p_init_msg_list             => FND_API.G_TRUE,
6024                     p_deliverable_id            => delRecTab(i).deliverable_id,
6025                     p_deliverable_name          => delRecTab(i).deliverable_name,
6026                     p_deliverable_type          => delRecTab(i).deliverable_type,
6027                     p_business_document_id      => delRecTab(i).business_document_id,
6028                     p_business_document_version => delRecTab(i).business_document_version,
6029                     p_business_document_type    => delRecTab(i).business_document_type,
6030                     p_business_document_number  => delRecTab(i).business_document_number,
6031                     p_resp_party                => delRecTab(i).responsible_party,
6032                     p_external_contact          => delRecTab(i).external_party_contact_id,
6033                     p_internal_contact          => delRecTab(i).internal_party_contact_id,
6034                     p_notify_prior_due_date_value => delRecTab(i).notify_prior_due_date_value,
6035                     p_notify_prior_due_date_uom => delRecTab(i).notify_prior_due_date_uom,
6036                     --p_msg_code                  => 'OKC_DEL_BEFOREDUE_NTF_SUBJECT',
6037                     p_msg_code                  => l_resolved_msg_name,
6038                     x_notification_id           => l_notification_id,
6039                     x_msg_data                  => l_msg_data,
6040                     x_msg_count                 => l_msg_count,
6041                     x_return_status             => l_return_status);
6042                     --check return status
6043                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6044                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
6045                     END IF;
6046                     IF l_notification_id is not null THEN
6047                         -- if return status is success then notification is sent to
6048                         -- internal or external contact so update table with ntf id
6049                         IF l_return_status = 'S' THEN
6050                             j := j+1;
6051                             delNtfTab(j) := delRecTab(i);
6052                             delNtfTab(j).prior_notification_id := l_notification_id;
6053                             delNtfTab(j).last_update_date := sysdate;
6054                             delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
6055                             delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
6056                         ELSIF l_return_status <> 'S' THEN
6057                         -- The return status is success because error notification has been
6058                         -- sent to person who launched the concurrent request.
6059                             l_return_status := 'S';
6060                         END IF;
6061                     ELSE
6062                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6063                     END IF;
6064                 END IF; -- call to notifier
6065             END LOOP;
6066             END IF;
6067             IF delNtfTab.COUNT > 0 THEN
6068                 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
6069                 /** commented as this is not supported by 8i PL/SQL Bug#3307941
6070                 UPDATE okc_deliverables SET ROW = delNtfTab(i)
6071                 where deliverable_id = l_deliverable_id;
6072                 l_deliverable_id := delNtfTab(i).deliverable_id;*/
6073                 UPDATE okc_deliverables
6074                 SET prior_notification_id = delNtfTab(i).prior_notification_id,
6075                 last_update_date = sysdate,
6076                 last_updated_by = FND_GLOBAL.User_id,
6077                 last_update_login =Fnd_Global.Login_Id
6078                 where deliverable_id = delNtfTab(i).deliverable_id;
6079                 END LOOP;
6080           COMMIT;
6081             END IF;
6082         IF del_cur %ISOPEN THEN
6083           CLOSE del_cur ;
6084         END IF;
6085             x_return_status := l_return_status;
6086     OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
6087        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6088         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
6089        END IF;
6090     EXCEPTION
6091     WHEN FND_API.G_EXC_ERROR THEN
6092        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6093         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
6094        END IF;
6095         IF del_cur %ISOPEN THEN
6096           CLOSE del_cur ;
6097         END IF;
6098     x_return_status := G_RET_STS_ERROR;
6099       FND_MSG_PUB.Count_And_Get(
6100         p_count =>  x_msg_count,
6101         p_data  =>  x_msg_data
6102         );
6103 
6104     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6105        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6106         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6107        END IF;
6108         IF del_cur %ISOPEN THEN
6109           CLOSE del_cur ;
6110         END IF;
6111     x_return_status := G_RET_STS_UNEXP_ERROR;
6112       FND_MSG_PUB.Count_And_Get(
6113         p_count =>  x_msg_count,
6114         p_data  =>  x_msg_data
6115         );
6116 
6117     WHEN OTHERS THEN
6118        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6119         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6120        END IF;
6121         IF del_cur %ISOPEN THEN
6122           CLOSE del_cur ;
6123         END IF;
6124     x_return_status := G_RET_STS_UNEXP_ERROR;
6125       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6126       END IF;
6127       FND_MSG_PUB.Count_And_Get(
6128         p_count =>  x_msg_count,
6129         p_data  =>  x_msg_data
6130         );
6131        FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
6132 
6133     END beforedue_del_notifier;
6134 
6135     /***
6136     This is the Concurrent Program scheduled to run every day
6137     to send out escalated notifications about deliverables.
6138     It internally calls API escalation_deliverable_notifier
6139     ***/
6140     PROCEDURE escalation_deliverable_manager (
6141     errbuf  OUT NOCOPY VARCHAR2,
6142     retcode OUT NOCOPY VARCHAR2)
6143     IS
6144     l_api_name      CONSTANT VARCHAR2(30) :='escalation_deliverable_manager';
6145     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
6146     l_init_msg_list   VARCHAR2(3) := 'T';
6147     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
6148     l_msg_count       NUMBER;
6149     l_msg_data        VARCHAR2(1000);
6150     E_Resource_Busy   EXCEPTION;
6151     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
6152 
6153     BEGIN
6154        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6155         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
6156        END IF;
6157     --Initialize the return code
6158         retcode := 0;
6159     --Invoke escalation_deliverable_notifier
6160            esc_del_notifier(
6161         p_api_version          => l_api_version ,
6162         p_init_msg_list        => l_init_msg_list,
6163         x_return_status        => l_return_status,
6164         x_msg_count            => l_msg_count,
6165         x_msg_data             => l_msg_data);
6166 
6167            --check return status
6168             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
6169                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6170             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
6171                 RAISE OKC_API.G_EXCEPTION_ERROR;
6172             END IF;
6173 
6174        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6175         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
6176        END IF;
6177     EXCEPTION
6178     WHEN E_Resource_Busy THEN
6179       l_return_status := okc_api.g_ret_sts_error;
6180       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
6181       IF FND_MSG_PUB.Count_Msg > 0 Then
6182         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
6183           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
6184         END LOOP;
6185       END IF;
6186       FND_MSG_PUB.initialize;
6187     WHEN OTHERS THEN
6188       retcode := 2;
6189       errbuf  := substr(sqlerrm,1,200);
6190       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6191         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6192       END IF;
6193       IF FND_MSG_PUB.Count_Msg > 0 Then
6194         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
6195           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
6196         END LOOP;
6197       END IF;
6198       FND_MSG_PUB.initialize;
6199 
6200     END escalation_deliverable_manager;
6201 
6202 
6203     /***
6204     Invoked by Concurrent Program "escalation_deliverable_manager"
6205     Picks all deliverables eligible for escalation
6206     Invokes Deliverable Notifier to send out notifications only to escalation assignee
6207     Update deliverables with escalation_notification_id
6208     ***/
6209     PROCEDURE esc_del_notifier  (
6210     p_api_version                  IN NUMBER ,
6211     p_init_msg_list                IN VARCHAR2 ,
6212     x_return_status                OUT NOCOPY VARCHAR2,
6213     x_msg_count                    OUT NOCOPY NUMBER,
6214     x_msg_data                     OUT NOCOPY VARCHAR2)
6215     IS
6216     l_api_name      CONSTANT VARCHAR2(30) :='esc_del_notifier';
6217     CURSOR del_cur IS
6218     SELECT *
6219     FROM okc_deliverables
6220     WHERE manage_yn = 'Y'
6221     AND   disable_notifications_yn = 'N'
6222     AND   notify_escalation_yn = 'Y'
6223     AND   escalation_assignee is not null
6224     AND   escalation_notification_id is null
6225     AND   business_document_type <> 'TEMPLATE'
6226     AND   deliverable_status IN ('OPEN','REJECTED')
6227     AND   actual_due_date < trunc(sysdate);
6228     -- OR     actual_due_date = sysdate); bug#3722423
6229     l_notification_date DATE;
6230     delRecTab   delRecTabType;
6231     delNtfTab   delRecTabType;
6232     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
6233     l_msg_count       NUMBER;
6234     l_msg_data        VARCHAR2(1000);
6235     l_notification_id NUMBER;
6236     l_deliverable_id NUMBER;
6237     j  PLS_INTEGER := 0;
6238     k  PLS_INTEGER := 0;
6239 
6240 	--Acq Plan Message Cleanup
6241     l_resolved_msg_name VARCHAR2(30);
6242     BEGIN
6243 
6244        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6245         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
6246        END IF;
6247        -- call start_activity to create savepoint, check comptability
6248        -- and initialize message list
6249            l_return_status := OKC_API.START_ACTIVITY(l_api_name
6250                  ,p_init_msg_list
6251                  ,'_PROCESS'
6252                  ,x_return_status
6253                  );
6254                  -- check if activity started successfully
6255                  IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
6256                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6257                  ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
6258                     RAISE OKC_API.G_EXCEPTION_ERROR;
6259                  END IF;
6260 ---------------------------------------------------
6261         FOR del_rec IN del_cur LOOP
6262       k := k+1;
6263       delRecTab(k).deliverable_id := del_rec.deliverable_id;
6264       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
6265       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
6266       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
6267       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
6268       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
6269       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
6270       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
6271       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
6272       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
6273       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
6274       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
6275       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
6276       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
6277       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
6278       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
6279       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
6280       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
6281       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
6282       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
6283       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
6284       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
6285       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
6286       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
6287       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
6288       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
6289       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
6290       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
6291       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
6292       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
6293       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
6294       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
6295       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
6296       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
6297       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
6298       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
6299       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
6300       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
6301       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
6302       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
6303       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
6304       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
6305       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
6306       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
6307       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
6308       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
6309       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
6310       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
6311       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
6312       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
6313       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
6314       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
6315       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
6316       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
6317       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
6318       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
6319       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
6320       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
6321       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
6322       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
6323       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
6324       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
6325       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
6326       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
6327       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
6328       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
6329       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
6330       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
6331       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
6332       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
6333       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
6334       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
6335       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
6336       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
6337       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
6338       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
6339       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
6340       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
6341       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
6342       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
6343       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
6344       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
6345       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
6346       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
6347       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
6348       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
6349       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
6350       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
6351     END LOOP;
6352 
6353 
6354             -- commented as this is not supported by 8i PL/SQL Bug#3307941
6355             /*OPEN del_cur;
6356             FETCH del_cur BULK COLLECT INTO delRecTab;*/
6357             IF delRecTab.COUNT > 0 THEN
6358          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6359            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
6360          END IF;
6361             FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
6362             -- log messages in concurrent program log file
6363           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
6364             delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
6365           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
6366             to_char(delRecTab(i).deliverable_id));
6367          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6368            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
6369          END IF;
6370 
6371                 IF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'DAY' THEN
6372                     l_notification_date := trunc(delRecTab(i).actual_due_date)+delRecTab(i).NOTIFY_ESCALATION_VALUE;
6373                 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'WK' THEN
6374                     l_notification_date :=trunc(delRecTab(i).actual_due_date)+7*delRecTab(i).NOTIFY_ESCALATION_VALUE;
6375                 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'MTH' THEN
6376                     select add_months(delRecTab(i).actual_due_date,delRecTab(i).NOTIFY_ESCALATION_VALUE)
6377                     INTO l_notification_date from dual;
6378                 END IF;
6379 
6380                 IF trunc(l_notification_date) = trunc(sysdate) OR
6381                    trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
6382 
6383 --Acq Plan Messages Cleanup
6384                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_ESCALATE_NTF_SUBJECT',delRecTab(i).business_document_type);
6385 
6386                     okc_deliverable_wf_pvt.deliverables_notifier(
6387                     p_api_version               => 1.0,
6388                     p_init_msg_list             => FND_API.G_TRUE,
6389                     p_deliverable_id            => delRecTab(i).deliverable_id,
6390                     p_deliverable_name          => delRecTab(i).deliverable_name,
6391                     p_deliverable_type          => delRecTab(i).deliverable_type,
6392                     p_business_document_id      => delRecTab(i).business_document_id,
6393                     p_business_document_version => delRecTab(i).business_document_version,
6394                     p_business_document_type    => delRecTab(i).business_document_type,
6395                     p_business_document_number  => delRecTab(i).business_document_number,
6396                     p_resp_party                => delRecTab(i).responsible_party,
6397                     p_external_contact          => delRecTab(i).external_party_contact_id,
6398                     p_internal_contact          => delRecTab(i).escalation_assignee,
6399                     p_requester_id              => delRecTab(i).requester_id,
6400                     --p_msg_code                  => 'OKC_DEL_ESCALATE_NTF_SUBJECT',
6401                     p_msg_code                  => l_resolved_msg_name,
6402                     x_notification_id           => l_notification_id,
6403                     x_msg_data                  => l_msg_data,
6404                     x_msg_count                 => l_msg_count,
6405                     x_return_status             => l_return_status);
6406            --check return status
6407          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6408            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
6409          END IF;
6410                 IF l_notification_id is not null THEN
6411                     -- if return status is success then notification is sent to
6412                     -- internal or external contact so update table with ntf id
6413                     IF l_return_status = 'S' THEN
6414                         j := j+1;
6415                         delNtfTab(j) := delRecTab(i);
6416                         delNtfTab(j).escalation_notification_id := l_notification_id;
6417                         delNtfTab(j).last_update_date := sysdate;
6418                         delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
6419                         delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
6420                     ELSIF l_return_status <> 'S' THEN
6421                         -- The return status is success because error notification has been
6422                         -- sent to person who launched the concurrent request.
6423                         l_return_status := 'S';
6424                     END IF;
6425                 ELSE
6426                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6427                 END IF;
6428                 END IF; -- call to notifier
6429             END LOOP;
6430             END IF;
6431             IF delNtfTab.COUNT > 0 THEN
6432                 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
6433                 /** commented as this is not supported by 8i PL/SQL Bug#3307941
6434                 UPDATE okc_deliverables SET ROW = delNtfTab(i)
6435                 where deliverable_id = l_deliverable_id;
6436                 l_deliverable_id := delNtfTab(i).deliverable_id;*/
6437                 UPDATE okc_deliverables
6438                 SET escalation_notification_id = delNtfTab(i).escalation_notification_id,
6439                 last_update_date = sysdate,
6440                 last_updated_by = FND_GLOBAL.User_id,
6441                 last_update_login =Fnd_Global.Login_Id
6442                 where deliverable_id = delNtfTab(i).deliverable_id;
6443                 END LOOP;
6444           COMMIT;
6445             END IF;
6446         IF del_cur %ISOPEN THEN
6447           CLOSE del_cur ;
6448         END IF;
6449             x_return_status := l_return_status;
6450     OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
6451        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6452         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
6453        END IF;
6454 
6455     EXCEPTION
6456     WHEN FND_API.G_EXC_ERROR THEN
6457        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6458         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
6459        END IF;
6460         IF del_cur %ISOPEN THEN
6461           CLOSE del_cur ;
6462         END IF;
6463     x_return_status := G_RET_STS_ERROR;
6464       FND_MSG_PUB.Count_And_Get(
6465         p_count =>  x_msg_count,
6466         p_data  =>  x_msg_data
6467         );
6468 
6469     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6470        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6471         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6472        END IF;
6473         IF del_cur %ISOPEN THEN
6474           CLOSE del_cur ;
6475         END IF;
6476     x_return_status := G_RET_STS_UNEXP_ERROR;
6477       FND_MSG_PUB.Count_And_Get(
6478         p_count =>  x_msg_count,
6479         p_data  =>  x_msg_data
6480         );
6481 
6482     WHEN OTHERS THEN
6483        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6484         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6485        END IF;
6486         IF del_cur %ISOPEN THEN
6487           CLOSE del_cur ;
6488         END IF;
6489     x_return_status := G_RET_STS_UNEXP_ERROR;
6490       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6491       END IF;
6492       FND_MSG_PUB.Count_And_Get(
6493         p_count =>  x_msg_count,
6494         p_data  =>  x_msg_data
6495         );
6496        FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
6497     END esc_del_notifier;
6498 
6499     -- checks for attachments and deletes them
6500     PROCEDURE delete_attachments (
6501     p_entity_name   IN VARCHAR2
6502     ,p_pk1_value    IN VARCHAR2
6503     ,x_result       OUT NOCOPY VARCHAR2
6504     )
6505     IS
6506     l_api_name      CONSTANT VARCHAR2(30) :='delete_attachments';
6507     l_att_exists    BOOLEAN;
6508     l_result    VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6509 
6510     CURSOR att_cur IS
6511     SELECT att.attached_document_id
6512     ,doc.datatype_id
6513     FROM fnd_attached_documents att
6514     ,fnd_documents doc
6515     WHERE att.document_id = doc.document_id
6516     AND   att.entity_name = p_entity_name
6517     AND   att.pk1_value   = p_pk1_value;
6518     att_rec   att_cur%ROWTYPE;
6519     x_return_status  VARCHAR2(1);
6520     x_msg_count   NUMBER;
6521     x_msg_data    VARCHAR2(200);
6522 
6523     BEGIN
6524 
6525        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6526         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6527        END IF;
6528                 l_att_exists :=  attachment_exists(
6529                     p_entity_name => p_entity_name
6530                     ,p_pk1_value    => p_pk1_value );
6531 
6532                 IF l_att_exists THEN
6533                     --delete attachments
6534                     FOR att_rec IN  att_cur
6535                      LOOP
6536                     BEGIN
6537                     fnd_attached_documents3_pkg.delete_row (
6538                         X_attached_document_id  => att_rec.attached_document_id,
6539                         X_datatype_id           => att_rec.datatype_id,
6540                         delete_document_flag    => 'Y' );
6541                     EXCEPTION
6542                      WHEN OTHERS THEN
6543                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6544                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'90: Exception when deleting attachment ' || SQLERRM);
6545                         END IF;
6546                      END;
6547                     END LOOP;
6548                 END IF;
6549                         x_result := l_result;
6550        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6551         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6552        END IF;
6553     EXCEPTION
6554     WHEN OTHERS THEN
6555        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6556         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments in OTHERS');
6557        END IF;
6558         IF att_cur %ISOPEN THEN
6559           CLOSE att_cur ;
6560         END IF;
6561         x_result := G_RET_STS_UNEXP_ERROR;
6562         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6563             FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6564         END IF;
6565         FND_MSG_PUB.Count_And_Get(
6566         p_count =>  x_msg_count,
6567         p_data  =>  x_msg_data
6568         );
6569 
6570     END delete_attachments;
6571 
6572     /***
6573     1.  This API performs bulk delete of deliverables for business documents.
6574         Invoked by OKC_TERMS_UTIL_GRP.purge_documents
6575     2.  For each doc_type and doc_id in p_doc_table,
6576         find the deliverables that belong to the business document,
6577         delete the deliverable, status history and attachments.
6578     ***/
6579     PROCEDURE purge_doc_deliverables (
6580     p_api_version  IN NUMBER,
6581     p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
6582     p_doc_table IN OKC_TERMS_UTIL_GRP.doc_tbl_type,
6583     x_msg_data  OUT NOCOPY  VARCHAR2,
6584     x_msg_count OUT NOCOPY  NUMBER,
6585     x_return_status OUT NOCOPY  VARCHAR2)
6586     IS
6587     l_api_name      CONSTANT VARCHAR2(30) :='purge_doc_deliverables';
6588     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6589     l_msg_count       NUMBER;
6590     l_msg_data        VARCHAR2(1000);
6591     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
6592     l_deliverable_id    NUMBER;
6593     BEGIN
6594 
6595        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6596         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6597        END IF;
6598         IF p_doc_table.COUNT <> 0 THEN
6599         FOR i in 1.. p_doc_table.COUNT LOOP
6600             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6601                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Id:'||to_char(p_doc_table(i).doc_id));
6602                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Type:'||p_doc_table(i).doc_type);
6603             END IF;
6604                 delete_deliverables (
6605                 p_api_version  => l_api_version,
6606                 p_init_msg_list => OKC_API.G_FALSE,
6607                 p_doc_id    => p_doc_table(i).doc_id,
6608                 p_doc_type  => p_doc_table(i).doc_type,
6609                 x_msg_data   => l_msg_data,
6610                 x_msg_count  => l_msg_count,
6611                 x_return_status  => l_return_status);
6612         END LOOP;
6613         END IF;
6614             x_return_status := l_return_status;
6615        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6616         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6617        END IF;
6618 
6619     EXCEPTION
6620     WHEN FND_API.G_EXC_ERROR THEN
6621        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6622         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_ERROR');
6623        END IF;
6624     x_return_status := G_RET_STS_ERROR;
6625       FND_MSG_PUB.Count_And_Get(
6626         p_count =>  x_msg_count,
6627         p_data  =>  x_msg_data
6628         );
6629 
6630     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6631        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6632         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_UNEXPECTED_ERROR');
6633        END IF;
6634     x_return_status := G_RET_STS_UNEXP_ERROR;
6635       FND_MSG_PUB.Count_And_Get(
6636         p_count =>  x_msg_count,
6637         p_data  =>  x_msg_data
6638         );
6639 
6640     WHEN OTHERS THEN
6641        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6642         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_UNEXPECTED_ERROR');
6643        END IF;
6644     x_return_status := G_RET_STS_UNEXP_ERROR;
6645       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6646       END IF;
6647       FND_MSG_PUB.Count_And_Get(
6648         p_count =>  x_msg_count,
6649         p_data  =>  x_msg_data
6650         );
6651 
6652     END purge_doc_deliverables;
6653 
6654     /***
6655     1.  This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6656     2.  This API will select all deliverables for a given
6657         business document type and version
6658     3.  Delete all deliverables along with the attachments and status history
6659     ***/
6660     PROCEDURE delete_deliverables (
6661     p_api_version  IN NUMBER,
6662     p_init_msg_list IN VARCHAR2,
6663     p_doc_id    IN NUMBER,
6664     p_doc_type  IN  VARCHAR2,
6665     p_doc_version IN NUMBER DEFAULT NULL,
6666     x_msg_data   OUT NOCOPY  VARCHAR2,
6667     x_msg_count  OUT NOCOPY  NUMBER,
6668     x_return_status  OUT NOCOPY  VARCHAR2
6669     ,p_retain_lock_deliverables_yn IN VARCHAR2
6670     ,p_retain_exhibits IN VARCHAR2 := 'N')
6671     IS
6672     CURSOR del_cur IS
6673     SELECT deliverable_id
6674     FROM okc_deliverables
6675     WHERE business_document_id = p_doc_id
6676     AND   business_document_type = p_doc_type
6677     AND   ( p_retain_lock_deliverables_yn = 'N'
6678                OR
6679            (p_retain_lock_deliverables_yn = 'Y'
6680             AND amendment_operation IS NULL)
6681           );
6682 
6683     CURSOR del_version_cur IS
6684     SELECT deliverable_id
6685     FROM okc_deliverables
6686     WHERE business_document_id = p_doc_id
6687     AND   business_document_type = p_doc_type
6688     AND   business_document_version = p_doc_version
6689     AND   ( p_retain_lock_deliverables_yn = 'N'
6690                OR
6691            (p_retain_lock_deliverables_yn = 'Y'
6692             AND amendment_operation IS NULL)
6693           );
6694 
6695 
6696     l_result   VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6697     l_api_name VARCHAR2(30) :='delete_deliverables';
6698     TYPE delIdTabType IS TABLE OF NUMBER;
6699     delIdTab    delIdTabType;
6700     BEGIN
6701 
6702        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6703          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6704          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_retain_lock_deliverables_yn : ' || p_retain_lock_deliverables_yn);
6705        END IF;
6706 
6707        -- Call the CDRL API.
6708       IF (p_retain_exhibits = 'N')  THEN
6709        OKC_CDRL_PVT.delete_doc_exhibits (
6710     p_api_version           => 1.0,
6711     p_init_msg_list         => FND_API.G_FALSE,
6712     p_commit                => FND_API.G_FALSE,
6713     p_doc_class             =>  NULL,         -- Value will be Derived in the API
6714     p_doc_type      => p_doc_type,
6715     p_doc_id         => p_doc_id,
6716     p_doc_version    => p_doc_version,
6717     p_mode           => NULL,
6718     p_retain_lock_deliverables_yn => p_retain_lock_deliverables_yn,
6719     x_msg_data              => x_msg_data,
6720     x_msg_count             => x_msg_count,
6721     x_return_status         => x_return_status
6722     ) ;
6723     END IF;
6724 
6725     --------------------------------------------
6726     IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6727       RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6728     ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6729       RAISE FND_API.G_EXC_ERROR ;
6730     END IF;
6731     --------------------------------------------
6732 
6733 
6734        -- Delete specific version of deliverables or all deliverables
6735        -- based on p_doc_version
6736        IF p_doc_version IS NULL THEN
6737         OPEN del_cur;
6738         FETCH del_cur BULK COLLECT INTO delIdTab;
6739        ELSIF p_doc_version IS NOT NULL THEN
6740         OPEN del_version_cur;
6741         FETCH del_version_cur BULK COLLECT INTO delIdTab;
6742        END IF;
6743         IF delIdTab.COUNT <> 0 THEN
6744         FOR i in delIdTab.FIRST..delIdTab.LAST LOOP
6745             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6746                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Deleting Deliverable Id :'||to_char(delIdTab(i)));
6747             END IF;
6748                 -- delete deliverables status history
6749                 DELETE FROM okc_del_status_history
6750                 WHERE deliverable_id = delIdTab(i);
6751                 -- delete attachments if any
6752                 delete_attachments (
6753                     p_entity_name => G_ENTITY_NAME
6754                     ,p_pk1_value    =>  delIdTab(i)
6755                     ,x_result       =>  l_result);
6756                     IF l_result = 'S' THEN
6757                         -- delete deliverables
6758                         DELETE FROM okc_deliverables
6759                         WHERE deliverable_id = delIdTab(i);
6760                         DELETE FROM OKC_DELIVERABLES_EXT_B
6761                         WHERE  deliverable_id = delIdTab(i);
6762                         DELETE FROM OKC_DELIVERABLES_EXT_TL
6763                         WHERE  deliverable_id = delIdTab(i);
6764                     END IF;
6765 
6766 
6767         END LOOP;
6768         END IF; -- delIdTab.COUNT <> 0
6769         IF del_cur %ISOPEN THEN
6770           CLOSE del_cur ;
6771         END IF;
6772         IF del_version_cur %ISOPEN THEN
6773           CLOSE del_version_cur ;
6774         END IF;
6775             x_return_status := l_result;
6776        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6777         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6778        END IF;
6779 
6780     EXCEPTION
6781     WHEN FND_API.G_EXC_ERROR THEN
6782        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6783         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_ERROR');
6784        END IF;
6785         IF del_cur %ISOPEN THEN
6786           CLOSE del_cur ;
6787         END IF;
6788         IF del_version_cur %ISOPEN THEN
6789           CLOSE del_version_cur ;
6790         END IF;
6791     x_return_status := G_RET_STS_ERROR;
6792       FND_MSG_PUB.Count_And_Get(
6793         p_count =>  x_msg_count,
6794         p_data  =>  x_msg_data
6795         );
6796 
6797     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6798        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6799         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_UNEXPECTED_ERROR');
6800        END IF;
6801         IF del_cur %ISOPEN THEN
6802           CLOSE del_cur ;
6803         END IF;
6804         IF del_version_cur %ISOPEN THEN
6805           CLOSE del_version_cur ;
6806         END IF;
6807     x_return_status := G_RET_STS_UNEXP_ERROR;
6808       FND_MSG_PUB.Count_And_Get(
6809         p_count =>  x_msg_count,
6810         p_data  =>  x_msg_data
6811         );
6812 
6813     WHEN OTHERS THEN
6814        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6815         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_UNEXPECTED_ERROR');
6816        END IF;
6817         IF del_cur %ISOPEN THEN
6818           CLOSE del_cur ;
6819         END IF;
6820         IF del_version_cur %ISOPEN THEN
6821           CLOSE del_version_cur ;
6822         END IF;
6823     x_return_status := G_RET_STS_UNEXP_ERROR;
6824       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6825       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6826       END IF;
6827       FND_MSG_PUB.Count_And_Get(
6828         p_count =>  x_msg_count,
6829         p_data  =>  x_msg_data
6830         );
6831 
6832     END delete_deliverables;
6833 
6834     /***
6835     1.  This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6836     2.  This API will select all deliverables for a given source template id
6837     3.  Update all deliverables on the target template Id
6838         set the business_document_id = source template id
6839     ***/
6840     PROCEDURE update_del_for_template_merge (
6841     p_api_version  IN NUMBER,
6842     p_init_msg_list IN VARCHAR2,
6843     p_base_template_id  IN NUMBER,
6844     p_working_template_id   IN NUMBER,
6845     x_msg_data   OUT NOCOPY  VARCHAR2,
6846     x_msg_count  OUT NOCOPY  NUMBER,
6847     x_return_status  OUT NOCOPY  VARCHAR2)
6848     IS
6849     CURSOR del_cur IS
6850     SELECT deliverable_id
6851     FROM okc_deliverables
6852     WHERE business_document_id = p_working_template_id
6853     AND   business_document_type = 'TEMPLATE';
6854     TYPE delIdRecTabType IS TABLE OF NUMBER;
6855     delIdTab  delIdRecTabType;
6856     l_api_name      CONSTANT VARCHAR2(30) :='update_del_for_template_merge';
6857     l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6858     BEGIN
6859 
6860        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6861         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6862        END IF;
6863             OPEN del_cur;
6864             FETCH del_cur BULK COLLECT INTO delIdTab;
6865             IF delIdTab.COUNT <> 0 THEN
6866                 FORALL j IN delIdTab.FIRST..delIdTab.LAST
6867                 UPDATE okc_deliverables
6868                 SET business_document_id = p_base_template_id,
6869                 last_updated_by= Fnd_Global.User_Id,
6870                 last_update_date = sysdate,
6871                 last_update_login=Fnd_Global.Login_Id
6872                 WHERE deliverable_id = delIdTab(j);
6873             END IF;
6874         IF del_cur %ISOPEN THEN
6875           CLOSE del_cur ;
6876         END IF;
6877        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6878         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6879        END IF;
6880        x_return_status := l_return_status;
6881     EXCEPTION
6882     WHEN FND_API.G_EXC_ERROR THEN
6883        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6884         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_ERROR');
6885         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6886        END IF;
6887         IF del_cur %ISOPEN THEN
6888           CLOSE del_cur ;
6889         END IF;
6890     x_return_status := G_RET_STS_ERROR;
6891       FND_MSG_PUB.Count_And_Get(
6892         p_count =>  x_msg_count,
6893         p_data  =>  x_msg_data
6894         );
6895 
6896     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6897        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6898         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_UNEXPECTED_ERROR');
6899         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6900        END IF;
6901         IF del_cur %ISOPEN THEN
6902           CLOSE del_cur ;
6903         END IF;
6904     x_return_status := G_RET_STS_UNEXP_ERROR;
6905       FND_MSG_PUB.Count_And_Get(
6906         p_count =>  x_msg_count,
6907         p_data  =>  x_msg_data
6908         );
6909 
6910     WHEN OTHERS THEN
6911        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6912         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_UNEXPECTED_ERROR');
6913         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6914        END IF;
6915         IF del_cur %ISOPEN THEN
6916           CLOSE del_cur ;
6917         END IF;
6918     x_return_status := G_RET_STS_UNEXP_ERROR;
6919       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6920       END IF;
6921       FND_MSG_PUB.Count_And_Get(
6922         p_count =>  x_msg_count,
6923         p_data  =>  x_msg_data
6924         );
6925 
6926     END update_del_for_template_merge;
6927 
6928     -- Returns the max date of the last_amendment_date for a busdoc
6929     -- if the deliverables did not get amended then returns the
6930     --max last update date
6931 /*** added new signature bug#3192512**/
6932 
6933 FUNCTION get_last_amendment_date (
6934 p_api_version      IN  NUMBER
6935 ,p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE
6936 
6937 ,x_return_status    OUT NOCOPY VARCHAR2
6938 ,x_msg_data         OUT NOCOPY VARCHAR2
6939 ,x_msg_count        OUT NOCOPY NUMBER
6940 
6941 ,p_busdoc_id        IN    NUMBER
6942 ,p_busdoc_type     IN    VARCHAR2
6943 ,p_busdoc_version  IN    NUMBER)
6944 RETURN DATE
6945 IS
6946 -- always go by the -99 version as amendments happen only on -99
6947 -- bug#3293314
6948 -- Filter internal deliverables as they are not considered in amendments 20th May 2004.
6949 -- bug#3641366 get max last amend date from across the versions if it is null then get
6950 -- max creation date from across versions
6951 -- updated cursor for bug#4069955
6952 CURSOR del_cur IS
6953 SELECT NVL(MAX(del.last_amendment_date),MAX(del.creation_date))
6954 FROM
6955  okc_deliverables del
6956 ,okc_deliverable_types_b delType
6957 WHERE del.business_document_id = p_busdoc_id
6958 AND   del.business_document_type = p_busdoc_type
6959 AND   del.recurring_del_parent_id is null
6960 --AND   manage_yn = 'N' commented to reproduce the bug#3667445
6961 --AND   business_document_version = -99 commented for bug#3641366
6962 --AND  deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
6963 AND   del.deliverable_type = delType.deliverable_type_code
6964 AND   delType.internal_flag = 'N';
6965 
6966 /*CURSOR create_date_cur IS
6967 SELECT MAX(last_amendment_date)
6968 FROM okc_deliverables
6969 WHERE business_document_id = p_busdoc_id
6970 AND   business_document_type = p_busdoc_type
6971 AND   business_document_version = -99
6972 AND   deliverable_type not like '%INTERNAL%';*/
6973 l_api_name      CONSTANT VARCHAR2(30) :='get_last_amendment_date';
6974 l_date  DATE;
6975 
6976 BEGIN
6977 
6978 
6979   --  Initialize API return status to success
6980   x_return_status := OKC_API.G_RET_STS_SUCCESS;
6981 
6982 
6983   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6984     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6985   END IF;
6986   OPEN del_cur;
6987   FETCH del_cur INTO l_date;
6988     /*bug# 3641366 IF l_date is null THEN
6989         OPEN create_date_cur;
6990         FETCH create_date_cur INTO l_date;
6991         CLOSE create_date_cur;
6992     END IF;*/
6993   IF del_cur %ISOPEN THEN
6994      CLOSE del_cur ;
6995   END IF;
6996 
6997   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6998       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6999   END IF;
7000     RETURN l_date;
7001 
7002 EXCEPTION
7003 WHEN OTHERS THEN
7004 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7005          FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving get_last_amendment_date because of EXCEPTION: '||sqlerrm);
7006 END IF;
7007 
7008      IF del_cur%ISOPEN THEN
7009        CLOSE del_cur;
7010      END IF;
7011 
7012     /*bug# 3641366 IF create_date_cur%ISOPEN THEN
7013         CLOSE create_date_cur;
7014     END IF;*/
7015      x_return_status := G_RET_STS_UNEXP_ERROR ;
7016      IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7017      FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7018      END IF;
7019      FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
7020      , p_count => x_msg_count
7021      , p_data => x_msg_data );
7022 
7023      RETURN null;
7024 END get_last_amendment_date;
7025 
7026 
7027   /**
7028    * This helper function returns valid day of week for the given date.
7029    * It makes sure that days sequence is matching the seeded days sequence in
7030    * DAY_OF_WEEK lookup type, which is standard as per AMERICA territory.
7031    */
7032   FUNCTION getStartDayOfWeek(
7033            p_start_date in date)
7034   return number is
7035 
7036     l_day_of_week number;
7037   l_api_name      CONSTANT VARCHAR2(30) :='getStartDayOfWeek';
7038     BEGIN
7039         IF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SUN' THEN
7040         return 1;
7041         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='MON' THEN
7042         return 2;
7043         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='TUE' THEN
7044         return 3;
7045         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='WED' THEN
7046         return 4;
7047         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='THU' THEN
7048         return 5;
7049         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='FRI' THEN
7050         return 6;
7051         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SAT' THEN
7052         return 7;
7053         END IF;
7054 
7055     EXCEPTION
7056     WHEN OTHERS THEN
7057         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7058           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
7059         END IF;
7060     END getStartDayOfWeek;
7061 
7062 
7063   /**
7064    * This function Returns end date as actual date for given Start date,
7065    * time unit(DAYS, WEEKS, MONTHS), duration and (B)efore/(A)fter.
7066    */
7067   FUNCTION get_actual_date(
7068     p_start_date in date,
7069     p_timeunit varchar2,
7070     p_duration number,
7071     p_before_after varchar2)
7072   return date is
7073 
7074   l_end_date date := NULL;
7075   l_timeunit varchar2(30);
7076   l_duration number := 0;
7077   x_return_status     VARCHAR2(1)           := OKC_API.G_RET_STS_SUCCESS;
7078   l_api_name      CONSTANT VARCHAR2(30) :='get_actual_date';
7079 
7080   begin
7081    --- check if time unit and duration values are set
7082    if p_timeunit is NULL and
7083    p_duration is NULL Then
7084    return (NULL);
7085    end if;
7086 
7087    --- if before
7088    if p_before_after = 'B' then
7089     l_duration := -1 * p_duration;
7090    else  --- if after
7091       l_duration := p_duration;
7092    end if;
7093 
7094    --- If time unit is MONTHS
7095    if p_timeunit = 'MTH' then
7096      if l_duration > 0 then
7097        l_end_date := add_months(p_start_date,l_duration);
7098      elsif l_duration < 0 then
7099        l_end_date := add_months(p_start_date,l_duration);
7100      elsif l_duration = 0 then
7101        l_end_date := p_start_date;
7102      end if;
7103      return(l_end_date);
7104 
7105    --- If time unit is DAYS
7106    elsif p_timeunit = 'DAY' then
7107      if l_duration > 0 then
7108        l_end_date := p_start_date + l_duration;
7109      elsif l_duration < 0 then
7110        l_end_date := p_start_date + l_duration;
7111      elsif l_duration = 0 then
7112        l_end_date := p_start_date;
7113      end if;
7114      return(l_end_date);
7115 
7116    --- If time unit is WEEKS
7117    elsif p_timeunit = 'WK' then
7118      if l_duration > 0 then
7119        l_end_date := p_start_date + ((l_duration*7));
7120      elsif l_duration < 0 then
7121        l_end_date := p_start_date + ((l_duration*7));
7122      elsif l_duration = 0 then
7123        l_end_date := p_start_date;
7124      end if;
7125      return(l_end_date);
7126    else
7127     return(NULL);
7128    end if;
7129    EXCEPTION
7130    WHEN OTHERS THEN
7131         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7132           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
7133         END IF;
7134           RETURN(null);
7135   END get_actual_date;
7136 
7137   /**
7138    * Resolve recurring dates for given start date, end date and repeat
7139    * frequency, day of month, day of week. Returns Table of dates resolved.
7140    */
7141   PROCEDURE get_recurring_dates (
7142     p_api_version  IN NUMBER,
7143     p_init_msg_list IN VARCHAR2,
7144     p_start_date in date,
7145     p_end_date in date,
7146     p_frequency in number,
7147     p_recurr_day_of_month number,
7148     p_recurr_day_of_week number,
7149     x_recurr_dates   OUT NOCOPY recurring_dates_tab_type,
7150     x_msg_data   OUT NOCOPY  VARCHAR2,
7151     x_msg_count  OUT NOCOPY  NUMBER,
7152     x_return_status  OUT NOCOPY  VARCHAR2)
7153     IS
7154        --- User defined Exception for handling invalid start date
7155        INVALID_START_DATE EXCEPTION;
7156        PRAGMA EXCEPTION_INIT(INVALID_START_DATE, -01839);
7157 
7158        l_daynum_of_week number := 0;
7159        l_daynum_offset number := 0;
7160        l_day number := 0;
7161        l_frequency number := 0;
7162        l_date date := NULL;
7163        dates_count number := 0;
7164        l_api_name      CONSTANT VARCHAR2(30) :='get_recurring_dates';
7165 
7166     BEGIN
7167      -- check the frequency, if 0 or null, reset to 1
7168      if p_frequency = 0 OR null THEN
7169        l_frequency := 1;
7170      else
7171        l_frequency := p_frequency;
7172      end if;
7173 
7174    -- Check if  p_recurr_day_of_month and   p_recurr_day_of_week are null, if both are  null that means
7175    -- deliverable repeats daily.
7176 
7177    IF  p_recurr_day_of_month IS NULL AND  p_recurr_day_of_week IS NULL
7178    THEN
7179 
7180      -- Calculate the end date
7181      l_date := p_start_date;
7182      IF (TRUNC(l_date) > TRUNC(p_end_date) ) THEN
7183      x_return_status         := OKC_API.G_RET_STS_SUCCESS;
7184     return;
7185      end if;
7186 
7187      -- initialize the count to add into table of records
7188        dates_count := dates_count +1;
7189 
7190        ---
7191      while (TRUNC(l_date) <= TRUNC(p_end_date)) loop
7192          x_recurr_dates(dates_count) := l_date;
7193           l_date := l_date + l_frequency;
7194          dates_count := dates_count +1;
7195      end loop;
7196    RETURN;
7197    END IF;
7198 
7199 
7200      ---- repeat every WEEK
7201    if p_recurr_day_of_month is NULL then
7202 
7203        -- find the offset between given day of week and calculated day based on
7204        -- start date
7205        -- Fix for bug # 3438381
7206        l_daynum_of_week := getStartDayOfWeek(p_start_date); -- to_char(p_start_date,'D');
7207      l_daynum_offset := p_recurr_day_of_week - l_daynum_of_week ;
7208 
7209        --- if offset is less than 0, subtract from 7 (for the week)
7210      if l_daynum_offset < 0 then
7211         l_daynum_offset := 7 + l_daynum_offset;
7212      end if;
7213 
7214      --- Calculate the end date
7215      l_date := p_start_date + l_daynum_offset;
7216      if TRUNC(l_date) > TRUNC(p_end_date) then
7217           x_return_status                := OKC_API.G_RET_STS_SUCCESS;
7218     return;
7219      end if;
7220 
7221        -- initialize the count to add into table of records
7222        dates_count := dates_count +1;
7223 
7224        ---
7225      while (TRUNC(l_date) <= TRUNC(p_end_date)) loop
7226          x_recurr_dates(dates_count) := l_date;
7227        l_date := l_date + (7*l_frequency);
7228          dates_count := dates_count +1;
7229      end loop;
7230      else ---- repeat every MONTH
7231 
7232          -- set the given day of month
7233          l_day := p_recurr_day_of_month;
7234 
7235          --- if l_day is 99 repeat every last day of month
7236          if l_day = 99 THEN
7237 
7238             --- get last day of given start date month
7239             l_date := last_day(p_start_date);
7240 
7241             -- initialize the count to add into table of records
7242             dates_count := dates_count +1;
7243 
7244             --- Loop through, unles meet end date
7245             while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
7246                x_recurr_dates(dates_count) := l_date;
7247                l_date := last_day(add_months(l_date, l_frequency));
7248                dates_count := dates_count +1;
7249             END LOOP;
7250    else --- repeat every given day of month
7251             begin
7252         --- The first date based on given day of month
7253             l_date := to_date(lpad(l_day,2,'0') ||
7254                        SUBSTR(to_char(p_start_date,'ddmmyyyy'), 3),
7255                        'ddmmyyyy');
7256             --- If date is not valid (for e.g. 30 or 29th Feb)
7257             EXCEPTION
7258             WHEN INVALID_START_DATE THEN
7259                  --- set l_Date to the last day of month
7260                  l_date := last_day(p_start_date);
7261             end;
7262           end if;
7263 
7264           --- if calculated day comes out to be less than start date, calulate
7265           --- the first date here itself
7266           if TRUNC(l_date) < TRUNC(p_start_date) THEN
7267                l_date := add_months(l_date, l_frequency);
7268           end if;
7269 
7270           -- initialize the count to add into table of records
7271           dates_count := dates_count +1;
7272 
7273           --- Loop through, unles meet end date
7274           while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
7275                x_recurr_dates(dates_count) := l_date;
7276                l_date := add_months(l_date, l_frequency);
7277                dates_count := dates_count +1;
7278           END LOOP;
7279      end if;
7280     EXCEPTION
7281     WHEN OTHERS THEN
7282             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7283                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_recurring_dates with OTHER ERROR');
7284             END IF;
7285     x_return_status := OKC_API.G_RET_STS_ERROR;
7286     FND_MSG_PUB.Count_And_Get(
7287         p_count =>  x_msg_count,
7288         p_data  =>  x_msg_data
7289         );
7290     END get_recurring_dates;
7291 
7292 FUNCTION internal_contact_valid(
7293 p_contact_id NUMBER
7294 ) RETURN VARCHAR2
7295 IS
7296 
7297 CURSOR fnd_user_cur IS
7298 select employee_id from fnd_user
7299 where employee_id = p_contact_id;
7300 
7301 fnd_user_rec  fnd_user_cur%ROWTYPE;
7302 
7303     CURSOR contact_cur IS
7304     select email_address
7305     from per_all_people_f
7306     where person_id = p_contact_id
7307     --and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
7308     and trunc(sysdate) between effective_start_date and effective_end_date;
7309 
7310 
7311     contact_rec  contact_cur%ROWTYPE;
7312     l_api_name      CONSTANT VARCHAR2(30) :='internal_contact_valid';
7313 
7314 
7315 BEGIN
7316             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7317                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid ');
7318             END IF;
7319             OPEN fnd_user_cur;
7320             FETCH fnd_user_cur INTO fnd_user_rec;
7321             IF fnd_user_cur%FOUND THEN
7322                 --contact person is a fnd user, so it's ok
7323                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7324                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is a fnd user, thus returning Y');
7325                 END IF;
7326                 RETURN('Y');
7327             ELSE
7328                 OPEN contact_cur;
7329                 FETCH contact_cur INTO contact_rec;
7330                 IF contact_cur%FOUND THEN
7331                     IF(contact_rec.email_address is not null) THEN
7332                     --contact person is not fnd user, but it has an email address in per_people_all
7333                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7334                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not a fnd user, but has an email address, thus returning Y');
7335                         END IF;
7336                         RETURN('Y');
7337                     ELSE
7338                     --not a fnd user, no email address either
7339                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7340                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not a fnd user, does not have an email address, thus returning N');
7341                         END IF;
7342                         RETURN('N');
7343                     END IF;
7344                 ELSE
7345                     --not a fnd user, not in per_people_all
7346                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7347                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not in per_people_f also not a fnd user, thus returning N');
7348                 END IF;
7349                     RETURN('N');
7350                 END IF;
7351             END IF;
7352             CLOSE fnd_user_cur;
7353             CLOSE contact_cur;
7354             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7355                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid');
7356             END IF;
7357 
7358     EXCEPTION
7359     WHEN OTHERS THEN
7360         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7361           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid with Exception');
7362         END IF;
7363         IF fnd_user_cur %ISOPEN THEN
7364           CLOSE fnd_user_cur ;
7365         END IF;
7366         IF contact_cur %ISOPEN THEN
7367           CLOSE contact_cur ;
7368         END IF;
7369           RETURN('N');
7370     END internal_contact_valid;
7371 
7372 
7373 /**
7374  * This function takes a contact_id
7375  * and check in table per_people_f
7376  * to see if that contact exists
7377  * @return true if the contact is found
7378  *         false  otherwise
7379  */
7380 FUNCTION internal_contact_exists(
7381     p_contact_id  NUMBER
7382     ) RETURN VARCHAR2
7383     IS
7384     CURSOR contact_cur IS
7385     select 'X'
7386     from per_all_people_f
7387     where person_id = p_contact_id
7388     and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
7389 
7390 
7391     contact_rec  contact_cur%ROWTYPE;
7392     l_api_name      CONSTANT VARCHAR2(30) :='internal_contact_exists';
7393 
7394     BEGIN
7395 
7396             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7397                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists ');
7398             END IF;
7399             OPEN contact_cur;
7400             FETCH contact_cur INTO contact_rec;
7401             IF contact_cur%FOUND THEN
7402                 RETURN('Y');
7403             ELSE
7404                 RETURN('N');
7405             END IF;
7406             CLOSE contact_cur;
7407             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7408                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists');
7409             END IF;
7410     EXCEPTION
7411     WHEN OTHERS THEN
7412         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7413           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists with Exception');
7414         END IF;
7415         IF contact_cur %ISOPEN THEN
7416           CLOSE contact_cur ;
7417         END IF;
7418           RETURN('N');
7419     END internal_contact_exists;
7420 
7421 
7422     /**
7423       * This function checks if a given contact_id
7424       * exists in po_supplier_contacts_val_v
7425       * @return true if a record is found with the given contact_id
7426       *         false otherwise
7427       */
7428     FUNCTION external_contact_valid(
7429      p_party_id IN NUMBER
7430     ,p_party_role IN VARCHAR2
7431     ,p_contact_id  IN NUMBER
7432     ) RETURN VARCHAR2 IS
7433 
7434 
7435     -- 4145213 changed hz_parties select to synch up with ExternalPartyContact LOV query
7436     -- 4208420 changed hz_parties select to synch up with ExternalPartyContact LOV query
7437 
7438    CURSOR contact_cur IS
7439    select 'X'
7440    from
7441    po_supplier_users_v
7442    where user_party_id = p_contact_id
7443    and po_vendor_id = p_party_id
7444    and 'SUPPLIER_ORG' = p_party_role
7445    UNION
7446    SELECT 'X'
7447    FROM  hz_parties  contact,
7448    hz_relationships hr
7449    WHERE hr.subject_id = contact.party_id
7450    AND 'SUPPLIER_ORG' <> p_party_role
7451    And hr.object_id = p_party_id
7452    And contact.party_id = p_contact_id
7453    AND hr.relationship_type = 'CONTACT'
7454    AND hr.relationship_code = 'CONTACT_OF'
7455    and hr.subject_type = 'PERSON'
7456    and hr.object_type = 'ORGANIZATION'
7457    and hr.subject_table_name ='HZ_PARTIES'
7458    and hr.object_table_name ='HZ_PARTIES'
7459    AND     hr.status = 'A'
7460    AND     hr.start_date <= sysdate
7461    AND     nvl(hr.end_date, sysdate + 1) > sysdate;
7462 
7463 
7464    contact_rec  contact_cur%ROWTYPE;
7465    l_api_name      CONSTANT VARCHAR2(30) :='external_contact_valid';
7466 
7467    BEGIN
7468 
7469       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7470            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7471               ||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid ');
7472       END IF;
7473       OPEN contact_cur;
7474       FETCH contact_cur INTO contact_rec;
7475       IF contact_cur%FOUND THEN
7476         RETURN('Y');
7477       ELSE
7478         RETURN('N');
7479       END IF;
7480       CLOSE contact_cur;
7481 
7482       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7483            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7484            ||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid');
7485       END IF;
7486     EXCEPTION
7487     WHEN OTHERS THEN
7488         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7489           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid with Exception');
7490         END IF;
7491         IF contact_cur %ISOPEN THEN
7492           CLOSE contact_cur ;
7493         END IF;
7494           RETURN('N');
7495     END external_contact_valid;
7496 
7497   /**
7498    * This function returns the meaning of a given
7499    * fnd lookup type and code
7500    */
7501   FUNCTION get_lookup_meaning(
7502     p_lookup_type   IN VARCHAR2,
7503     p_lookup_code   IN VARCHAR2
7504   ) RETURN VARCHAR2
7505 
7506   IS
7507 
7508 
7509     l_meaning VARCHAR2(80);
7510     l_api_name      CONSTANT VARCHAR2(30) :='get_lookup_meaning';
7511 
7512     BEGIN
7513         select meaning into l_meaning
7514         from fnd_lookups
7515         where lookup_type = p_lookup_type
7516         and lookup_code = p_lookup_code;
7517 
7518         return l_meaning;
7519 
7520     EXCEPTION
7521     WHEN OTHERS THEN
7522         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7523           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.get_lookup_meaning with exception');
7524         END IF;
7525 
7526         RETURN '';
7527     END get_lookup_meaning;
7528 
7529 
7530   /**
7531    * This procedure checks if there is any error related to a given
7532    * deliverable's notification details
7533    * @modifies px_qa_result_tbl  table of records that contains validation
7534    *           errors and warnings
7535    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7536    *                           OKC_API.G_RET_STS_ERROR if failes
7537    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7538    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7539    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7540    */
7541   PROCEDURE check_notifications (
7542     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7543     p_severity          IN VARCHAR2,
7544     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7545     x_return_status    OUT  NOCOPY VARCHAR2
7546    ) IS
7547 
7548     l_api_version                  CONSTANT NUMBER := 1;
7549     l_api_name                     CONSTANT VARCHAR2(30) := 'check_notifications';
7550     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7551     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7552     l_index                         PLS_INTEGER := 0;
7553     l_start                         PLS_INTEGER := 0;
7554     l_message_txt                   VARCHAR2(2000);
7555     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7556     l_qa_code                       VARCHAR2(80) := 'CHECK_NOTIFICATIONS';
7557     l_short_desc                    VARCHAR2(80);
7558 
7559 	--Acq Plan Message Cleanup
7560     l_resolved_msg_name VARCHAR2(30);
7561     l_resolved_token VARCHAR2(100);
7562 
7563 
7564 
7565    BEGIN
7566 
7567    l_qa_result_tbl := px_qa_result_tbl;
7568    l_index := px_qa_result_tbl.count;
7569    l_start := px_qa_result_tbl.count;
7570    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7571 
7572    --if business_document_type is not TEMPLATE, we need to perform the checks
7573    IF (del_rec.business_document_type <> 'TEMPLATE') THEN
7574 
7575         --check notification
7576         /*IF(del_rec.notify_prior_due_date_yn = 'Y') THEN
7577             IF(del_rec.notify_prior_due_date_value is null OR del_rec.notify_prior_due_date_uom is null) THEN
7578                 l_index := l_index+1;
7579                 l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7580                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_NTF_DETAILS_REQUIRED';
7581                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7582                                                             p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED',
7583                                                             p_token1 => 'NOTIFICATION_TYPE',
7584                                                             p_token1_value => 'prior due',
7585                                                             p_token2 => 'DELIVERABLE_NAME',
7586                                                             p_token2_value => del_rec.deliverable_name);
7587                 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7588                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7589                                                             p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED_S');
7590                 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7591 
7592             END IF;
7593         END IF;
7594         */
7595 
7596         IF(del_rec.notify_escalation_yn = 'Y') THEN
7597             IF(del_rec.notify_escalation_value is null OR del_rec.notify_escalation_uom is null OR del_rec.escalation_assignee is null) THEN
7598                 l_index := l_index+1;
7599                 l_qa_result_tbl(l_index).error_severity := p_severity;
7600 				  --Acq Plan Message Cleanup
7601                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_ESCALATE_REQUIRED',del_rec.business_document_type);
7602                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7603 
7604                 /*l_qa_result_tbl(l_index).message_name := 'OKC_DEL_ESCALATE_REQUIRED';
7605                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7606                                                             p_msg_name => 'OKC_DEL_ESCALATE_REQUIRED',
7607                                                             p_token1 => 'DELIVERABLE_NAME',
7608                                                             p_token1_value => del_rec.deliverable_name);*/
7609 
7610                 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7611                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7612                                                             p_msg_name => l_resolved_msg_name,
7613 	                                                          p_token1 => 'DEL_TOKEN',
7614                                                             p_token1_value => l_resolved_token,
7615                                                             p_token2 => 'DELIVERABLE_NAME',
7616                                                             p_token2_value => del_rec.deliverable_name);
7617 
7618             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7619             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
7620 
7621                 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7622                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7623                                                             p_msg_name => 'OKC_DEL_REQUIRED_S');
7624                 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7625 
7626             END IF;
7627         END IF;
7628     END IF;
7629    --mass update common attributes
7630    IF(l_index > l_start) THEN
7631    --We have some errors
7632    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7633     FOR i IN (l_start+1)..l_index
7634     LOOP
7635         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7636         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7637         l_qa_result_tbl(i).qa_code := l_qa_code;
7638         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7639 
7640     END LOOP;
7641    END IF;
7642 
7643    x_return_status := l_return_status;
7644    px_qa_result_tbl := l_qa_result_tbl;
7645 
7646    EXCEPTION
7647      WHEN FND_API.G_EXC_ERROR THEN
7648        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7649         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with G_EXC_ERROR');
7650        END IF;
7651 
7652        x_return_status := G_RET_STS_ERROR;
7653 
7654 
7655     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7656        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7657         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with G_EXC_UNEXPECTED_ERROR');
7658        END IF;
7659 
7660        x_return_status := G_RET_STS_UNEXP_ERROR;
7661 
7662 
7663     WHEN OTHERS THEN
7664        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7665         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with OTHERS EXCEPTION');
7666        END IF;
7667 
7668       x_return_status := G_RET_STS_UNEXP_ERROR;
7669       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7670       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7671       END IF;
7672 
7673 
7674    END check_notifications;
7675 
7676   /**
7677    * This procedure checks if there is any error related to a given
7678    * deliverable's internal contacts
7679    * @modifies px_qa_result_tbl  table of records that contains validation
7680    *           errors and warnings
7681    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7682    *                           OKC_API.G_RET_STS_ERROR if failes
7683    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7684    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7685    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7686    */
7687    PROCEDURE check_internal_contacts (
7688     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7689     p_severity         IN VARCHAR2,
7690     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7691     x_return_status    OUT  NOCOPY VARCHAR2
7692    ) IS
7693 
7694     l_api_version                  CONSTANT NUMBER := 1;
7695     l_api_name                     CONSTANT VARCHAR2(30) := 'check_internal_contacts';
7696     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7697     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7698     l_index                         PLS_INTEGER := 0;
7699     l_start                         PLS_INTEGER := 0;
7700     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7701     l_contact_exists                VARCHAR2(1);
7702     l_qa_code                       VARCHAR2(80) := 'CHECK_BUYER_CONTACT';
7703     l_short_desc                    VARCHAR2(80);
7704 
7705     l_err_message_txt          FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7706     l_sugg_message_txt         FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7707 
7708 --Acq Plan Message Cleanup
7709  --   l_IntContactMissing_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_INT_CONTACT';
7710     l_IntContactMissing_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_INT_CONTACT';
7711 --    l_IntContactInvalid_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT';
7712     l_IntContactInvalid_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT';
7713     l_IntContactInvalid_sugg_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT_S';
7714 
7715     l_ContactMissing_sugg_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_REQUIRED_S';
7716     l_InvalidRequestor_err_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER';
7717     l_InvalidRequestor_sugg_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER_S';
7718     --Acq Plan Message Cleanup
7719     --l_InvalidEscAssgn_err_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_ASSIGNEE';
7720     l_InvalidEscAssgn_err_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_ASSIGNEE';
7721     l_InvalidEscAssgn_sugg_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_S';
7722 
7723     l_resolved_msg_name VARCHAR2(30);
7724     l_resolved_token VARCHAR2(100);
7725 
7726 
7727    BEGIN
7728 
7729    l_qa_result_tbl := px_qa_result_tbl;
7730    l_index := px_qa_result_tbl.count;
7731    l_start := px_qa_result_tbl.count;
7732 
7733    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7734 
7735    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7736 
7737         --if bus doc is not template, then internal contact is required
7738         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is null) THEN
7739             l_index := l_index+1;
7740 
7741             --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7742 				  --Acq Plan Message Cleanup
7743                   l_resolved_msg_name := OKC_API.resolve_message(l_IntContactMissing_err_msg,del_rec.business_document_type);
7744                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7745 
7746 /*          l_qa_result_tbl(l_index).message_name := l_IntContactMissing_err_msg;
7747             l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7748                                                             p_msg_name => l_IntContactMissing_err_msg,
7749                                                             p_token1 => 'DELIVERABLE_NAME',
7750                                                             p_token1_value => del_rec.deliverable_name);   */
7751 
7752             l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7753             l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7754                                                             p_msg_name => l_resolved_msg_name,
7755 	                                                          p_token1 => 'DEL_TOKEN',
7756                                                             p_token1_value => l_resolved_token,
7757                                                             p_token2 => 'DELIVERABLE_NAME',
7758                                                             p_token2_value => del_rec.deliverable_name);
7759 
7760             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7761             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
7762 
7763             l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7764                                                             p_msg_name => l_ContactMissing_sugg_msg);
7765 
7766             l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7767             l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7768         END IF;
7769 
7770 
7771         --check if internal contact exists on a bus doc
7772         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
7773             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.internal_party_contact_id);
7774 
7775             IF l_contact_exists = 'N' THEN
7776                 l_index := l_index+1;
7777                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7778 
7779 				  --Acq Plan Message Cleanup
7780                   l_resolved_msg_name := OKC_API.resolve_message(l_IntContactInvalid_err_msg,del_rec.business_document_type);
7781                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7782 
7783 /*                l_qa_result_tbl(l_index).message_name := l_IntContactInvalid_err_msg;
7784                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7785                                                             p_msg_name => l_IntContactInvalid_err_msg);*/
7786 
7787                 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7788                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7789                                                             p_msg_name => l_resolved_msg_name,
7790 	                                                          p_token1 => 'DEL_TOKEN',
7791                                                             p_token1_value => l_resolved_token
7792                                                             );
7793 
7794             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7795 
7796                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7797                                                             p_msg_name => l_IntContactInvalid_sugg_msg);
7798 
7799                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7800                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7801 
7802             END IF;
7803 
7804         END IF;
7805 
7806 
7807 
7808         --check if requestor exists on a bus doc
7809         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
7810             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.requester_id);
7811             IF(l_contact_exists = 'N') THEN
7812 
7813                 l_index := l_index+1;
7814                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_WARNING;
7815                 --Acq Plan Message Cleanup
7816 
7817                 l_resolved_msg_name := OKC_API.resolve_message(l_InvalidRequestor_err_msg,del_rec.business_document_type);
7818                 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7819 
7820                 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7821                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7822                                                             p_msg_name => l_resolved_msg_name,
7823                                                             p_token1 => 'DEL_TOKEN',
7824                                                             p_token1_value => l_resolved_token);
7825 
7826             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7827 
7828                 /*l_qa_result_tbl(l_index).message_name := l_InvalidRequestor_err_msg;
7829                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7830                                                             p_msg_name => l_InvalidRequestor_err_msg);*/
7831                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7832                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7833                                                             p_msg_name => l_InvalidRequestor_sugg_msg);
7834                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7835 
7836             END IF;
7837         END IF;
7838 
7839         --check if escalation assignee exists on a bus doc
7840         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
7841             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.escalation_assignee);
7842             IF (l_contact_exists = 'N')  THEN
7843 
7844                 l_index := l_index+1;
7845                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7846                 --Acq Plan Message Cleanup
7847                 /*l_qa_result_tbl(l_index).message_name := l_InvalidEscAssgn_err_msg;
7848                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7849                                                             p_msg_name => l_InvalidEscAssgn_err_msg);*/
7850 
7851                   l_resolved_msg_name := OKC_API.resolve_message(l_InvalidEscAssgn_err_msg,del_rec.business_document_type);
7852                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7853 
7854 
7855                 l_qa_result_tbl(l_index).message_name := l_InvalidEscAssgn_err_msg;
7856                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7857                                                             p_msg_name => l_resolved_msg_name,
7858                                                             p_token1 => 'DEL_TOKEN',
7859                                                             p_token1_value => l_resolved_token);
7860                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7861 
7862             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7863 
7864                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7865                                                             p_msg_name => l_InvalidEscAssgn_sugg_msg);
7866                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7867 
7868             END IF;
7869         END IF;
7870 
7871    --mass update common attributes
7872    IF(l_index > l_start) THEN
7873    --We have some errors
7874    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7875     FOR i IN (l_start+1)..l_index
7876     LOOP
7877         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7878         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7879         l_qa_result_tbl(i).qa_code := l_qa_code;
7880         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7881         l_qa_result_tbl(i).error_severity := p_severity;
7882 
7883     END LOOP;
7884    END IF;
7885 
7886    x_return_status := l_return_status;
7887    px_qa_result_tbl := l_qa_result_tbl;
7888 
7889    EXCEPTION
7890      WHEN FND_API.G_EXC_ERROR THEN
7891        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7892         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_ERROR');
7893        END IF;
7894 
7895        x_return_status := G_RET_STS_ERROR;
7896 
7897 
7898     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7899        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7900         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_UNEXPECTED_ERROR');
7901        END IF;
7902 
7903        x_return_status := G_RET_STS_UNEXP_ERROR;
7904 
7905 
7906     WHEN OTHERS THEN
7907        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7908         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with OTHERS EXCEPTION');
7909        END IF;
7910 
7911       x_return_status := G_RET_STS_UNEXP_ERROR;
7912       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7913       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7914       END IF;
7915 
7916 
7917    END check_internal_contacts;
7918 
7919    FUNCTION  is_cdrl_check_required
7920    RETURN VARCHAR2
7921    IS
7922 
7923     l_cdrl_enabled VARCHAR2(1) :='N';
7924    BEGIN
7925 
7926        -- Check clm installed.
7927         IF NVL(FND_PROFILE.VALUE('PO_CLM_INSTALLED'),'N') = 'Y' and
7928            NVL(FND_PROFILE.VALUE('PO_CLM_ENABLED'),'N') = 'Y' THEN
7929 
7930              -- Check po system parameters
7931              BEGIN
7932               EXECUTE IMMEDIATE 'SELECT enable_cdrl FROM po_system_parameters_all WHERE org_id=fnd_global.org_id ' INTO l_cdrl_enabled;
7933              EXCEPTION
7934               WHEN OTHERS THEN
7935                 l_cdrl_enabled := 'N';
7936               END;
7937         END IF;
7938          RETURN l_cdrl_enabled;
7939 
7940    END is_cdrl_check_required;
7941 
7942    PROCEDURE check_exhibit_details (
7943     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7944     p_severity         IN VARCHAR2,
7945     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7946     x_return_status    OUT  NOCOPY VARCHAR2
7947 )
7948    IS
7949     l_api_version                  CONSTANT NUMBER := 1;
7950     l_api_name                     CONSTANT VARCHAR2(30) := 'check_exhibit_details';
7951     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7952     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7953     l_index                         PLS_INTEGER := 0;
7954     l_start                         PLS_INTEGER := 0;
7955     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7956     l_contact_exists                VARCHAR2(1);
7957     l_qa_code                       VARCHAR2(80) := 'CHECK_DELIVERABLE_EXHIBIT';
7958     l_short_desc                    VARCHAR2(80);
7959 
7960     l_err_message_txt          FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7961     l_sugg_message_txt         FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7962 
7963     l_exhibitMissing_err_msg    FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_EXHIBIT';
7964     l_exhibitMissing_sugg_msg   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_EXHIBIT_S';
7965 
7966    	--Acq Plan Message Cleanup
7967     l_resolved_msg_name VARCHAR2(30);
7968     l_resolved_token VARCHAR2(100);
7969 
7970 
7971    BEGIN
7972 
7973    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7974           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_exhibit_details');
7975    END IF;
7976 
7977 
7978 
7979    l_qa_result_tbl := px_qa_result_tbl;
7980    l_index := px_qa_result_tbl.count;
7981    l_start := px_qa_result_tbl.count;
7982 
7983 
7984    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7985    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7986 
7987 
7988 
7989 
7990 
7991    IF (del_rec.del_category_code='CDRL' AND  del_rec.exhibit_code IS NULL )
7992    THEN
7993 
7994     l_index := l_index+1;
7995 
7996     l_resolved_msg_name := OKC_API.resolve_message(l_exhibitMissing_err_msg,del_rec.business_document_type);
7997     l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7998 
7999     l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8000     l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8001                                                             p_msg_name => l_resolved_msg_name,
8002 																                            p_token1 => 'DEL_TOKEN',
8003                                                             p_token1_value => l_resolved_token,
8004                                                             p_token2 => 'DELIVERABLE_NAME',
8005                                                             p_token2_value => del_rec.deliverable_name
8006                                                             );
8007 
8008     l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8009     l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8010 
8011 
8012 
8013     l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8014                                                          p_msg_name => l_exhibitMissing_sugg_msg);
8015 
8016     l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8017     l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8018 
8019     END IF;
8020 
8021    --mass update common attributes
8022    IF(l_index > l_start) THEN
8023    --We have some errors
8024    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8025     FOR i IN (l_start+1)..l_index
8026     LOOP
8027         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8028         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8029         l_qa_result_tbl(i).qa_code := l_qa_code;
8030         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8031         l_qa_result_tbl(i).error_severity := p_severity;
8032 
8033     END LOOP;
8034    END IF;
8035 
8036    x_return_status := l_return_status;
8037    px_qa_result_tbl := l_qa_result_tbl;
8038 
8039    EXCEPTION
8040      WHEN FND_API.G_EXC_ERROR THEN
8041        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8042         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with G_EXC_ERROR');
8043        END IF;
8044 
8045        x_return_status := G_RET_STS_ERROR;
8046 
8047 
8048     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8049        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8050         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with G_EXC_UNEXPECTED_ERROR');
8051        END IF;
8052 
8053        x_return_status := G_RET_STS_UNEXP_ERROR;
8054 
8055 
8056     WHEN OTHERS THEN
8057        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8058         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with OTHERS EXCEPTION');
8059        END IF;
8060 
8061       x_return_status := G_RET_STS_UNEXP_ERROR;
8062       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8063       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8064       END IF;
8065 
8066    END   check_exhibit_details;
8067 
8068 
8069      /**
8070    * This procedure checks if there is any error related to a given
8071    * deliverable's internal contacts
8072    * @modifies px_qa_result_tbl  table of records that contains validation
8073    *           errors and warnings
8074    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8075    *                           OKC_API.G_RET_STS_ERROR if failes
8076    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8077    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8078    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8079    */
8080    PROCEDURE check_internal_contacts_valid (
8081     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8082     p_severity         IN VARCHAR2,
8083     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8084     x_return_status    OUT  NOCOPY VARCHAR2
8085    ) IS
8086 
8087     l_api_version                  CONSTANT NUMBER := 1;
8088     l_api_name                     CONSTANT VARCHAR2(30) := 'check_internal_contacts_valid';
8089     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8090     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8091     l_index                         PLS_INTEGER := 0;
8092     l_start                         PLS_INTEGER := 0;
8093     l_message_txt                   VARCHAR2(2000);
8094     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8095     l_contact_valid                 VARCHAR2(1);
8096 
8097     l_qa_code                       VARCHAR2(80) := 'CHECK_INTERNAL_CONTACT_VALID';
8098     l_short_desc                    VARCHAR2(80);
8099 
8100     l_err_message_txt          FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8101     l_sugg_message_txt         FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8102 
8103 	--Acq Plan Message Cleanup
8104     l_resolved_msg_name VARCHAR2(30);
8105     l_resolved_token VARCHAR2(100);
8106 
8107    BEGIN
8108       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8109           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts_valid');
8110       END IF;
8111    l_qa_result_tbl := px_qa_result_tbl;
8112    l_index := px_qa_result_tbl.count;
8113    l_start := px_qa_result_tbl.count;
8114 
8115    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8116 
8117    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
8118 
8119         --check if internal contact is a valid fnd user or if it has an email address
8120         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
8121             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.internal_party_contact_id);
8122             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8123                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'internal contact valid (l_contact_valid): '||l_contact_valid);
8124             END IF;
8125             IF l_contact_valid = 'N'  THEN
8126               l_index := l_index+1;
8127 
8128 				  --Acq Plan Message Cleanup
8129                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_INV_INT_CONT_EMAIL',del_rec.business_document_type);
8130                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8131 
8132 /*                l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_INT_CONT_EMAIL';
8133                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8134                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL');*/
8135 
8136                 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8137                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8138                                                             p_msg_name => l_resolved_msg_name,
8139 																                            p_token1 => 'DEL_TOKEN',
8140                                                             p_token1_value => l_resolved_token
8141                                                             );
8142                 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8143                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8144                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8145 
8146                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8147                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8148 
8149             END IF;
8150 
8151         END IF;
8152 
8153         --check if requester is a valid fnd user or if it has an email address
8154          IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
8155             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.requester_id);
8156             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8157                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'requester valid (l_contact_valid): '||l_contact_valid);
8158             END IF;
8159             IF l_contact_valid = 'N'  THEN
8160 
8161                 l_index := l_index+1;
8162 
8163 				  --Acq Plan Message Cleanup
8164                 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_INV_REQ_CONT_EMAIL',del_rec.business_document_type);
8165                 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8166 
8167 /*              l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_REQ_CONT_EMAIL';
8168                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8169                                                             p_msg_name => 'OKC_DEL_INV_REQ_CONT_EMAIL');*/
8170 
8171                 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8172                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8173                                                             p_msg_name => l_resolved_msg_name,
8174 																                            p_token1 => 'DEL_TOKEN',
8175                                                             p_token1_value => l_resolved_token
8176                                                             );
8177                 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8178                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8179                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8180                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8181                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8182 
8183             END IF;
8184         END IF;
8185 
8186         --check if escalation assignee is a valid fnd user or if it has an email address
8187         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
8188             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.escalation_assignee);
8189             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8190                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'escalation assignee valid (l_contact_valid): '||l_contact_valid);
8191             END IF;
8192             IF l_contact_valid = 'N'  THEN
8193 
8194                 l_index := l_index+1;
8195                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_ESC_CONT_EMAIL';
8196                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8197                                                             p_msg_name => 'OKC_DEL_INV_ESC_CONT_EMAIL');
8198                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8199                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8200                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8201                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8202 
8203             END IF;
8204         END IF;
8205 
8206 
8207 
8208    --mass update common attributes
8209    IF(l_index > l_start) THEN
8210    --We have some errors
8211    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8212     FOR i IN (l_start+1)..l_index
8213     LOOP
8214         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8215         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8216         l_qa_result_tbl(i).qa_code := l_qa_code;
8217         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8218         l_qa_result_tbl(i).error_severity := p_severity;
8219 
8220     END LOOP;
8221    END IF;
8222 
8223    x_return_status := l_return_status;
8224    px_qa_result_tbl := l_qa_result_tbl;
8225 
8226    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8227         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'leaving check_internal_contacts_valid without error');
8228    END IF;
8229    EXCEPTION
8230      WHEN FND_API.G_EXC_ERROR THEN
8231        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8232         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving check_internal_contacts_valid with G_EXC_ERROR');
8233        END IF;
8234 
8235        x_return_status := G_RET_STS_ERROR;
8236 
8237 
8238     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8239        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8240         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_UNEXPECTED_ERROR');
8241        END IF;
8242 
8243        x_return_status := G_RET_STS_UNEXP_ERROR;
8244 
8245 
8246     WHEN OTHERS THEN
8247        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8248         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts_valid with OTHERS EXCEPTION');
8249        END IF;
8250 
8251       x_return_status := G_RET_STS_UNEXP_ERROR;
8252       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8253       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8254       END IF;
8255 
8256 
8257    END check_internal_contacts_valid;
8258 
8259 
8260 
8261 
8262 
8263   /**
8264    * This procedure checks if there is any error related to a given
8265    * deliverable's external contacts
8266    * @modifies px_qa_result_tbl  table of records that contains validation
8267    *           errors and warnings
8268    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8269    *                           OKC_API.G_RET_STS_ERROR if failes
8270    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8271    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8272    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8273    */
8274    PROCEDURE check_external_contacts (
8275     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8276     p_severity         IN VARCHAR2,
8277     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8278     x_return_status    OUT  NOCOPY VARCHAR2
8279    ) IS
8280 
8281     l_api_version                  CONSTANT NUMBER := 1;
8282     l_api_name                     CONSTANT VARCHAR2(30) := 'check_external_contacts';
8283     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8284     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8285     l_index                         PLS_INTEGER := 0;
8286     l_start                         PLS_INTEGER := 0;
8287     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8288     l_contact_exists                VARCHAR2(1);
8289     l_contact_valid                 VARCHAR2(1);
8290 
8291     l_qa_code                       VARCHAR2(80) := 'CHECK_SUPPLIER_CONTACT';
8292     l_short_desc                    VARCHAR2(80);
8293 
8294 --Messages for Repository
8295 -- Acq Plan Messages Cleanup
8296     --l_ExtContact_err_msg   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT';
8297     l_ExtContact_err_msg   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT';
8298     l_ExtContact_sugg_msg  FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT_S';
8299 
8300 --Messages for PO
8301     --l_SupplierContact_err_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT';
8302     l_SupplierContact_err_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT';
8303     l_SupplierContact_sugg_msg  VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT_S';
8304 
8305     l_err_message_txt   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8306     l_sugg_message_txt   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8307 
8308     --Acq Plan Message Cleanup
8309     l_resolved_msg_name VARCHAR2(30);
8310     l_resolved_token VARCHAR2(100);
8311 
8312 
8313    BEGIN
8314 
8315    l_qa_result_tbl := px_qa_result_tbl;
8316    l_index := px_qa_result_tbl.count;
8317    l_start := px_qa_result_tbl.count;
8318 
8319    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8320 
8321    --get the document type class based on deliverable's business document type
8322    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
8323 
8324         --check if specified external contact exists on a bus doc
8325         IF(l_doc_type_class <> 'TEMPLATE' and
8326            del_rec.external_party_id is not null and
8327            del_rec.external_party_contact_id is not null) THEN
8328             l_contact_exists := external_contact_valid(p_party_id => del_rec.external_party_id
8329                                                       ,p_party_role => del_rec.external_party_role
8330                                                       ,p_contact_id => del_rec.external_party_contact_id);
8331             IF (l_contact_exists = 'N') THEN
8332 
8333                 l_index := l_index+1;
8334                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
8335 
8336        If (l_doc_type_class = 'REPOSITORY') THEN
8337        --Acq Plan Messages Cleanup
8338                   /*l_qa_result_tbl(l_index).message_name := l_ExtContact_err_msg;
8339                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8340                                                             p_msg_name => l_ExtContact_err_msg,
8341                                                             p_token1 => 'DELIVERABLE_NAME',
8342                                                             p_token1_value => del_rec.deliverable_name);*/
8343 
8344                   l_resolved_msg_name := OKC_API.resolve_message(l_ExtContact_err_msg,del_rec.business_document_type);
8345                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8346 
8347                   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8348                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8349                                                             p_msg_name => l_resolved_msg_name,
8350                                                             p_token1 => 'DEL_TOKEN',
8351                                                             p_token1_value => l_resolved_token,
8352                                                             p_token2 => 'DELIVERABLE_NAME',
8353                                                             p_token2_value => del_rec.deliverable_name);
8354 
8355                   l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8356                                                             p_msg_name => l_ExtContact_sugg_msg);
8357        ELSE
8358       --Acq Plan Messages Cleanup
8359 
8360 /*                  l_qa_result_tbl(l_index).message_name := l_SupplierContact_err_msg;
8361                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8362                                                             p_msg_name => l_SupplierContact_err_msg,
8363                                                             p_token1 => 'DELIVERABLE_NAME',
8364                                                             p_token1_value => del_rec.deliverable_name);*/
8365                   l_resolved_msg_name := OKC_API.resolve_message(l_SupplierContact_err_msg,del_rec.business_document_type);
8366                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8367 
8368                   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8369                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8370                                                             p_msg_name => l_resolved_msg_name,
8371                                                             p_token1 => 'DEL_TOKEN',
8372                                                             p_token1_value => l_resolved_token,
8373                                                             p_token2 => 'DELIVERABLE_NAME',
8374                                                             p_token2_value => del_rec.deliverable_name);
8375 
8376                   l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8377                                                             p_msg_name => l_SupplierContact_sugg_msg);
8378        End If;
8379 
8380                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8381                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8382 
8383             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8384             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8385 
8386             END IF;
8387         END IF;
8388 
8389 
8390 
8391 
8392    --mass update common attributes
8393    IF(l_index > l_start) THEN
8394    --We have some errors
8395    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8396     FOR i IN (l_start+1)..l_index
8397     LOOP
8398         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8399         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8400         l_qa_result_tbl(i).qa_code := l_qa_code;
8401         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8402         l_qa_result_tbl(i).error_severity := p_severity;
8403 
8404     END LOOP;
8405    END IF;
8406 
8407    x_return_status := l_return_status;
8408    px_qa_result_tbl := l_qa_result_tbl;
8409 
8410    EXCEPTION
8411      WHEN FND_API.G_EXC_ERROR THEN
8412        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8413         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with G_EXC_ERROR');
8414        END IF;
8415 
8416        x_return_status := G_RET_STS_ERROR;
8417 
8418 
8419     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8420        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8421         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with G_EXC_UNEXPECTED_ERROR');
8422        END IF;
8423 
8424        x_return_status := G_RET_STS_UNEXP_ERROR;
8425 
8426 
8427     WHEN OTHERS THEN
8428        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8429         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with OTHERS EXCEPTION');
8430        END IF;
8431 
8432       x_return_status := G_RET_STS_UNEXP_ERROR;
8433       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8434       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8435       END IF;
8436 
8437 
8438    END check_external_contacts;
8439 
8440   /**
8441    * This procedure checks if there is any error related to a given
8442    * deliverable's due date details
8443    * @modifies px_qa_result_tbl  table of records that contains validation
8444    *           errors and warnings
8445    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8446    *                           OKC_API.G_RET_STS_ERROR if failes
8447    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8448    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8449    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8450    */
8451    PROCEDURE check_due_dates (
8452     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8453     p_severity         IN VARCHAR2,
8454     p_bus_doc_date_events_tbl   IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
8455     p_doc_type IN VARCHAR2, --Acq plan Messages Cleanup
8456     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8457     x_return_status    OUT NOCOPY  VARCHAR2
8458    ) IS
8459 
8460     l_api_version                  CONSTANT NUMBER := 1;
8461     l_api_name                     CONSTANT VARCHAR2(30) := 'check_due_dates';
8462     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8463     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8464     l_index                         PLS_INTEGER := 0;
8465     l_start                         PLS_INTEGER := 0;
8466     l_message_txt                   VARCHAR2(2000);
8467     l_qa_code                       VARCHAR2(80) := 'CHECK_DUE_DATES';
8468     l_short_desc                    VARCHAR2(80);
8469 
8470     l_start_date                    Date;
8471     l_end_date                      Date;
8472 
8473     l_has_rltv_end_date             VARCHAR2(1);
8474     l_has_rltv_start_date           VARCHAR2(1);
8475 
8476     l_start_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
8477     l_end_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
8478     msgCount PLS_INTEGER := 0;
8479     l_start_not_matched_flag varchar2(1) := 'Y';
8480     l_end_not_matched_flag varchar2(1) := 'Y';
8481     l_st_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
8482     l_end_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
8483 
8484     TYPE QaMessagesTbl IS TABLE OF OKC_BUS_DOC_EVENTS_TL.meaning%TYPE
8485     INDEX BY BINARY_INTEGER;
8486 
8487     qaMessages QaMessagesTbl;
8488 
8489     --Acq Plan Message Cleanup
8490     l_resolved_msg_name VARCHAR2(30);
8491     l_resolved_token VARCHAR2(100);
8492 
8493 
8494    BEGIN
8495    l_qa_result_tbl := px_qa_result_tbl;
8496    l_index := px_qa_result_tbl.count;
8497    l_start := px_qa_result_tbl.count;
8498    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8499        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8500         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_due_dates ');
8501         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '||to_char(del_rec.deliverable_id));
8502         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.deliverable_name);
8503         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.recurring_yn);
8504         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_start_date: '||del_rec.fixed_start_date);
8505         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_end_date: '||del_rec.fixed_end_date);
8506         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: start_event_date: '||del_rec.start_event_date);
8507         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: end_event_date: '||del_rec.end_event_date);
8508         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: relative_st_date_event_id: '||to_char(del_rec.relative_st_date_event_id));
8509         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: relative_end_date_event_id: '||to_char(del_rec.relative_end_date_event_id));
8510        END IF;
8511 
8512             --single due date field validation
8513             --check if due date fields are populated
8514       IF del_rec.fixed_due_date_yn = 'Y' THEN
8515 
8516             IF del_rec.fixed_start_date is null THEN
8517                   --missing fixed_start_date
8518                   l_index := l_index+1;
8519 
8520             --Acq Plan Message Cleanup
8521 
8522                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_FIXED_ST_DATE',p_doc_type);
8523                   l_resolved_token := OKC_API.resolve_del_token(p_doc_type);
8524 
8525                     -- set qa message name
8526                 --  l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_FIXED_ST_DATE';
8527                   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8528 
8529                     --- set problem long description
8530                   l_qa_result_tbl(l_index).problem_details :=
8531                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8532                     --p_msg_name => 'OKC_DEL_MISSING_FIXED_ST_DATE',
8533                     p_msg_name => l_resolved_msg_name,
8534                     p_token1 => 'DEL_TOKEN',
8535                    -- p_token1_value => del_rec.deliverable_name,
8536                     p_token1_value => l_resolved_token,
8537                     p_token2 => 'DELIVERABLE_NAME',
8538                     p_token2_value => del_rec.deliverable_name);
8539 
8540 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8541             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8542                     -- set suggestion for given qa message
8543                   l_qa_result_tbl(l_index).suggestion :=
8544                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8545                     p_msg_name => 'OKC_DEL_REQUIRED_S');
8546 
8547                     -- set return status for calling API to know, that there's a QA message
8548                   --l_qa_status := OKC_API.G_RET_STS_ERROR;
8549             END IF;
8550         ELSE
8551 
8552             --06-FEB-2004 pnayani -- Fix for bug 3369934 Resetting due date attributes during copy
8553             IF del_rec.recurring_yn = 'Y' THEN
8554                 IF del_rec.fixed_start_date is null THEN
8555                     IF del_rec.relative_st_date_event_id is null THEN
8556                   --missing fixed_start_date
8557                   l_index := l_index+1;
8558                     -- set qa message name
8559 				  --Acq Plan Message Cleanup
8560                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_DUE_DATE_ST_INCOMPLETE',del_rec.business_document_type);
8561                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8562 
8563 /*                  l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_ST_INCOMPLETE';
8564 
8565                     --- set problem long description
8566                   l_qa_result_tbl(l_index).problem_details :=
8567                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8568                     p_msg_name => 'OKC_DEL_DUE_DATE_ST_INCOMPLETE',
8569                     p_token1 => 'DELIVERABLE_NAME',
8570                     p_token1_value => del_rec.deliverable_name);*/
8571 
8572                   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8573 
8574                     --- set problem long description
8575                   l_qa_result_tbl(l_index).problem_details :=
8576                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8577                     p_msg_name => l_resolved_msg_name,
8578 										p_token1 => 'DEL_TOKEN',
8579                     p_token1_value => l_resolved_token,
8580                     p_token2 => 'DELIVERABLE_NAME',
8581                     p_token2_value => del_rec.deliverable_name);
8582 
8583                     -- set suggestion for given qa message
8584                   l_qa_result_tbl(l_index).suggestion :=
8585                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8586                     p_msg_name => 'OKC_DEL_REQUIRED_S');
8587 
8588                     END IF;  -- relative_st_event_id is null
8589                 END IF; -- del_rec.fixed_start_date is null THEN
8590 
8591                 IF del_rec.fixed_end_date is null THEN
8592 
8593                     IF del_rec.relative_end_date_event_id is null THEN
8594                   --missing fixed_start_date
8595                   l_index := l_index+1;
8596 
8597                     -- set qa message name
8598 				  --Acq Plan Message Cleanup
8599                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_DUE_DATE_EN_INCOMPLETE',del_rec.business_document_type);
8600                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8601 
8602 /*                  l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_EN_INCOMPLETE';
8603 
8604                     --- set problem long description
8605                   l_qa_result_tbl(l_index).problem_details :=
8606                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8607                     p_msg_name => 'OKC_DEL_DUE_DATE_EN_INCOMPLETE',
8608                     p_token1 => 'DELIVERABLE_NAME',
8609                     p_token1_value => del_rec.deliverable_name);*/
8610 
8611                   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8612 
8613                     --- set problem long description
8614                   l_qa_result_tbl(l_index).problem_details :=
8615                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8616                     p_msg_name => l_resolved_msg_name,
8617 										p_token1 => 'DEL_TOKEN',
8618                     p_token1_value => l_resolved_token,
8619                     p_token2 => 'DELIVERABLE_NAME',
8620                     p_token2_value => del_rec.deliverable_name);
8621                     -- set suggestion for given qa message
8622                   l_qa_result_tbl(l_index).suggestion :=
8623                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8624                     p_msg_name => 'OKC_DEL_REQUIRED_S');
8625 
8626 
8627                     END IF;
8628                 END IF;  --del_rec.fixed_end_date is null THEN
8629             END IF; -- del_rec.recurring_yn = 'Y' THEN
8630 
8631             IF p_bus_doc_date_events_tbl.count > 0 THEN
8632 
8633                 -- if deliverable definition is recurring
8634                 IF del_rec.recurring_yn = 'Y' THEN
8635 
8636                     -- in itialize start date
8637                     l_start_date := NULL;
8638                     l_end_date   := NULL;
8639 
8640                     -- initialize boolean value which indicates if start date is
8641                     -- relative or fixed
8642                     l_has_rltv_start_date := 'N';
8643                     l_has_rltv_end_date   := 'N';
8644 
8645                     -- check start date, if it is relative to an event, and not fixed
8646                     IF del_rec.relative_st_date_event_id is not NULL THEN
8647                        -- set boolean value to Y, indicating that start date is relative
8648                         l_has_rltv_start_date := 'Y';
8649                         l_start_date := resolveRelativeDueEvents (
8650                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8651                                         p_event_id => del_rec.relative_st_date_event_id,
8652                                         p_end_event_yn => 'N',
8653                                         px_event_full_name => l_start_event_full_name,
8654                                         px_not_matched_flag => l_start_not_matched_flag,
8655                                         px_event_code => l_st_event_code);
8656 
8657                     END IF; -- if start date is relative
8658 
8659                     -- check end date, if it is relative to an event, and not fixed
8660                     IF del_rec.relative_end_date_event_id is not NULL THEN
8661                         -- set boolean value to Y, indicating that start date is relative
8662                         l_has_rltv_end_date := 'Y';
8663                         l_end_date := resolveRelativeDueEvents (
8664                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8665                                         p_event_id => del_rec.relative_end_date_event_id,
8666                                         p_end_event_yn => 'Y',
8667                                         px_event_full_name => l_end_event_full_name,
8668                                         px_not_matched_flag => l_end_not_matched_flag,
8669                                         px_event_code => l_end_event_code);
8670                     END IF; -- if end date is relative
8671 
8672                     --- if start date is relative
8673                     IF l_has_rltv_start_date = 'Y' THEN
8674 
8675                         -- start date is null on the business document
8676                         IF l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
8677 
8678                             -- increment the count first
8679                             msgCount := msgCount + 1;
8680 
8681                             --- set the QA message
8682                             qaMessages(msgCount) := l_start_event_full_name;
8683                         END IF; -- is start date is null
8684                     END IF; -- if start date is relative
8685 
8686                     --- if end date is relative
8687                     IF l_has_rltv_end_date = 'Y' THEN
8688 
8689                         -- end date is null on the business document
8690                         IF  l_end_not_matched_flag = 'N' and l_end_date is NULL THEN
8691 
8692                            IF l_has_rltv_start_date = 'Y' THEN
8693 
8694                                -- add this meesage only if start and end events are not same,
8695                                -- other wise start qa message has lready been added.
8696 
8697                                IF  l_st_event_code <> l_end_event_code THEN
8698                                    --- increment the count first
8699                                    msgCount := msgCount + 1;
8700 
8701                                    --- set the QA message
8702                                    qaMessages(msgCount) := l_end_event_full_name;
8703                                END IF;
8704                            ELSE
8705                                    --- increment the count first
8706                                    msgCount := msgCount + 1;
8707 
8708                                    --- set the QA message
8709                                    qaMessages(msgCount) := l_end_event_full_name;
8710 
8711                            END IF;
8712 
8713                         END IF; -- is end date is null
8714                     END IF; -- if end date is relative
8715 
8716                 ELSE -- deliverables is one time and relative
8717 
8718                     -- check start date, if it is relative to an event
8719                     IF del_rec.relative_st_date_event_id is not NULL THEN
8720 
8721                         -- in itialize start date
8722                         l_start_date := NULL;
8723 
8724                         -- get start date
8725                         l_start_date := resolveRelativeDueEvents (
8726                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8727                                         p_event_id => del_rec.relative_st_date_event_id,
8728                                         p_end_event_yn => 'N',
8729                                         px_event_full_name => l_start_event_full_name,
8730                                         px_not_matched_flag => l_start_not_matched_flag,
8731                                         px_event_code => l_st_event_code);
8732 
8733                         -- start date is null on the business document
8734                         IF  l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
8735 
8736                             -- increment the count first
8737                             msgCount := msgCount + 1;
8738 
8739                             --- set the QA message
8740                             qaMessages(msgCount) := l_start_event_full_name;
8741                         END IF; -- is start date is null
8742                     END IF; -- if start date is relative for one time deliverable
8743 
8744                 END IF; -- if deliverable is recurring
8745 
8746                   --- set qa results.
8747                   -- if one date is missing
8748                   IF qaMessages.count > 0 and qaMessages.count = 1 THEN
8749                     --missing relative date
8750                     l_index := l_index+1;
8751 
8752                     --    Acq Plan Messages Cleanup
8753          l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_RLTV_DATE',del_rec.business_document_type);
8754          l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8755 
8756 
8757                     -- set qa message name
8758                     l_qa_result_tbl(l_index).message_name :=  l_resolved_msg_name;
8759 
8760                     --- set problem long description
8761                     l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8762                                                                 p_app_name => G_OKC,
8763                                                                 p_msg_name => l_resolved_msg_name,
8764                                                                 p_token1 => 'EVT_DATE_NAME',
8765                                                                 p_token1_value => qaMessages(1),
8766                                                                 p_token2 => 'DELIVERABLE_NAME',
8767                                                                 p_token2_value => del_rec.deliverable_name,
8768                                                                 p_token3 => 'DEL_TOKEN',
8769                                                                 p_token3_value => l_resolved_token);
8770 
8771                     l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME' || qaMessages(1);
8772                     l_qa_result_tbl(l_index).reference_column2 := 'DEL_TOKEN~' || l_resolved_token;
8773                     l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8774 
8775                     -- set suggestion for given qa message
8776                     l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8777                                                               p_msg_name => 'OKC_DEL_MISSING_RLTV_DATE_S',
8778                                                               p_token1 => 'EVT_DATE_NAME',
8779                                                               p_token1_value => qaMessages(1) );
8780 
8781                     -- set return status for calling API to know, that there's a QA message
8782                     --l_qa_status := OKC_API.G_RET_STS_ERROR;
8783 
8784                   END IF; -- if one date is missing
8785 
8786                   -- if two dates are missing
8787                   IF qaMessages.count > 0 and qaMessages.count = 2 THEN
8788                       --missing relative dates (two dates)
8789                       l_index := l_index+1;
8790 
8791                      l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_RLTV_DATES',del_rec.business_document_type);
8792                     l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8793 
8794                       -- set qa message name
8795                       l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8796 
8797                       --- set problem long description
8798                       l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8799                                                                   p_app_name => G_OKC,
8800                                                                   p_msg_name => l_resolved_msg_name,
8801                                                                   p_token1 => 'EVT_DATE_NAME1',
8802                                                                   p_token1_value => qaMessages(1),
8803                                                                   p_token2 => 'EVT_DATE_NAME2',
8804                                                                   p_token2_value => qaMessages(2),
8805                                                                   p_token3 => 'DELIVERABLE_NAME',
8806                                                                   p_token3_value => del_rec.deliverable_name,
8807                                                                   p_token4 => 'DEL_TOKEN',
8808                                                                   p_token4_value => l_resolved_token);
8809 
8810                     l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME1' || qaMessages(1);
8811                     l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME2' || qaMessages(2);
8812                     l_qa_result_tbl(l_index).reference_column2 := 'DEL_TOKEN~' || l_resolved_token;
8813                     l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8814 
8815 
8816 
8817                       -- set suggestion for given qa message
8818                       l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8819                                                                 p_msg_name => 'OKC_DEL_MISSING_RLTV_DATES_S',
8820                                                                 p_token1 => 'EVT_DATE_NAME1',
8821                                                                 p_token1_value => qaMessages(1),
8822                                                                 p_token2 => 'EVT_DATE_NAME2',
8823                                                                 p_token2_value => qaMessages(2) );
8824 
8825                       -- set return status for calling API to know, that there's a QA message
8826                       --l_qa_status := OKC_API.G_RET_STS_ERROR;
8827 
8828                   END IF; -- if two dates are missing
8829             END IF; -- if dates table of records is not empty
8830         END IF; --- if deliverables is not fixed due date
8831 
8832     --mass update common attributes
8833    IF(l_index > l_start) THEN
8834    --We have some errors
8835    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8836     FOR i IN (l_start+1)..l_index
8837     LOOP
8838         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8839         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8840         l_qa_result_tbl(i).qa_code := l_qa_code;
8841         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8842         l_qa_result_tbl(i).error_severity := p_severity;
8843 
8844     END LOOP;
8845    END IF;
8846 
8847         -- set out parameters
8848         x_return_status := l_return_status;
8849         px_qa_result_tbl := l_qa_result_tbl;
8850 
8851    EXCEPTION
8852      WHEN FND_API.G_EXC_ERROR THEN
8853        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8854         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with G_EXC_ERROR');
8855        END IF;
8856        x_return_status := G_RET_STS_ERROR;
8857 
8858     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8859        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8860         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with G_EXC_UNEXPECTED_ERROR');
8861        END IF;
8862 
8863        x_return_status := G_RET_STS_UNEXP_ERROR;
8864 
8865 
8866     WHEN OTHERS THEN
8867        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8868         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with OTHERS EXCEPTION');
8869        END IF;
8870 
8871       x_return_status := G_RET_STS_UNEXP_ERROR;
8872       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8873       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8874       END IF;
8875 
8876    END check_due_dates;
8877 
8878   /**
8879    * This procedure checks if there is any error related to a given
8880    * deliverable's amendments
8881    * @modifies px_qa_result_tbl  table of records that contains validation
8882    *           errors and warnings
8883    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8884    *                           OKC_API.G_RET_STS_ERROR if failes
8885    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8886    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8887    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8888    */
8889    PROCEDURE check_amendments (
8890     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8891     p_severity         IN VARCHAR2,
8892     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8893     x_return_status    OUT  NOCOPY VARCHAR2
8894    ) IS
8895 
8896     l_api_version                  CONSTANT NUMBER := 1;
8897     l_api_name                     CONSTANT VARCHAR2(30) := 'check_amendments';
8898     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8899     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8900     l_index                         PLS_INTEGER := 0;
8901     l_start                         PLS_INTEGER := 0;
8902     l_message_txt                   VARCHAR2(2000);
8903     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8904     l_contact_exists                BOOLEAN;
8905     l_contact_valid                 BOOLEAN;
8906 
8907     l_qa_code                       VARCHAR2(80) := 'CHECK_AMENDMENT';
8908     l_short_desc                    VARCHAR2(80);
8909 
8910 	--Acq Plan Message Cleanup
8911     l_resolved_msg_name VARCHAR2(30);
8912     l_resolved_token VARCHAR2(100);
8913 
8914    BEGIN
8915 
8916    l_qa_result_tbl := px_qa_result_tbl;
8917    l_index := px_qa_result_tbl.count;
8918    l_start := px_qa_result_tbl.count;
8919 
8920    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8921 
8922 
8923 
8924         IF(del_rec.amendment_operation is not null and del_rec.amendment_notes is null) THEN
8925             l_index := l_index+1;
8926 
8927           	--Acq Plan Message Cleanup
8928 
8929           /*  l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_AMEND_DESC';
8930             l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8931                                                             p_msg_name => 'OKC_DEL_MISSING_AMEND_DESC',
8932                                                             p_token1 => 'DELIVERABLE_NAME',
8933                                                             p_token1_value => del_rec.deliverable_name);*/
8934 
8935             l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_AMEND_DESC',del_rec.business_document_type);
8936             l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8937 
8938 
8939             l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8940             l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8941                                                             p_msg_name => l_resolved_msg_name,
8942                                                             p_token1 => 'DEL_TOKEN',
8943                                                             p_token1_value => l_resolved_token,
8944                                                             p_token2 => 'DELIVERABLE_NAME',
8945                                                             p_token2_value => del_rec.deliverable_name);
8946 
8947             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8948             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8949 
8950             l_qa_result_tbl(l_index).problem_details := l_message_txt;
8951             l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8952                                                             p_msg_name => 'OKC_DEL_REQUIRED_S');
8953             l_qa_result_tbl(l_index).suggestion := l_message_txt;
8954 
8955         END IF;
8956 
8957 
8958 
8959    --mass update common attributes
8960    IF(l_index > l_start) THEN
8961    --We have some errors
8962    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8963     FOR i IN (l_start+1)..l_index
8964     LOOP
8965         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8966         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8967         l_qa_result_tbl(i).qa_code := l_qa_code;
8968         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8969         l_qa_result_tbl(i).error_severity := p_severity;
8970 
8971     END LOOP;
8972    END IF;
8973 
8974    x_return_status := l_return_status;
8975    px_qa_result_tbl := l_qa_result_tbl;
8976 
8977    EXCEPTION
8978      WHEN FND_API.G_EXC_ERROR THEN
8979        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8980         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with G_EXC_ERROR');
8981        END IF;
8982 
8983        x_return_status := G_RET_STS_ERROR;
8984 
8985 
8986     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8987        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8988         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with G_EXC_UNEXPECTED_ERROR');
8989        END IF;
8990 
8991        x_return_status := G_RET_STS_UNEXP_ERROR;
8992 
8993 
8994     WHEN OTHERS THEN
8995        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8996         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with OTHERS EXCEPTION');
8997        END IF;
8998 
8999       x_return_status := G_RET_STS_UNEXP_ERROR;
9000       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9001       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9002       END IF;
9003 
9004 
9005    END check_amendments;
9006 
9007        PROCEDURE update_error_table
9008            (px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9009             p_qa_severity IN VARCHAR2,
9010             p_qa_code IN VARCHAR2,
9011             p_error_msg_name IN VARCHAR2,
9012             p_del_variable_name IN VARCHAR2,
9013             p_article_name IN VARCHAR2,
9014             p_article_id IN NUMBER,
9015             p_section_name IN VARCHAR2,
9016             p_suggestion_msg_name IN VARCHAR2,
9017             x_return_status OUT NOCOPY VARCHAR2) IS
9018 
9019    l_msg_txt VARCHAR2(2000);
9020    l_suggestion_txt VARCHAR2(2000);
9021    l_index NUMBER;
9022    l_return_status VARCHAR2(1);
9023    l_short_desc VARCHAR2(80);
9024    l_api_name CONSTANT  VARCHAR2(30) := 'update_error_table';
9025    Begin
9026     l_return_status := G_RET_STS_SUCCESS;
9027     l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',p_qa_code);
9028     l_msg_txt  := OKC_TERMS_UTIL_PVT.get_message
9029                                         (p_app_name => G_OKC,
9030                                          p_msg_name => p_error_msg_name,
9031                                          p_token1 => 'DELIVERABLE_VARIABLE',
9032                                          p_token1_value => p_del_variable_name,
9033                                          p_token2 => 'ARTICLE_NAME',
9034                                          p_token2_value => p_article_name);
9035 
9036     l_suggestion_txt  := OKC_TERMS_UTIL_PVT.get_message
9037                                         (p_app_name => G_OKC,
9038                                          p_msg_name => p_suggestion_msg_name);
9039     l_index := px_qa_result_tbl.count + 1;
9040     px_qa_result_tbl(l_index).error_severity := p_qa_severity;
9041     px_qa_result_tbl(l_index).qa_code := p_qa_code;
9042     px_qa_result_tbl(l_index).message_name := p_error_msg_name;
9043     px_qa_result_tbl(l_index).problem_details := l_msg_txt;
9044     px_qa_result_tbl(l_index).suggestion := l_suggestion_txt;
9045     px_qa_result_tbl(l_index).title := p_article_name;
9046     px_qa_result_tbl(l_index).article_id := p_article_id;
9047     px_qa_result_tbl(l_index).section_name := p_section_name;
9048     px_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
9049     x_return_status := l_return_status;
9050        EXCEPTION
9051          WHEN OTHERS THEN
9052           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9053            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5002: Leaving update_error_table with unexpected error:'||SQLERRM);
9054           END IF;
9055           x_return_status := G_RET_STS_UNEXP_ERROR;
9056 
9057    End update_error_table;
9058 
9059 
9060       /* This procedure gets called from validate_deliverables_for_qa routine to check to see if
9061      there are any variables of type 'D' which don't have deliverables associated
9062      with them.
9063   */
9064      PROCEDURE check_deliverables_var_usage(
9065             p_severity         IN VARCHAR2,
9066             p_bus_doc_type     IN VARCHAR2,
9067             p_bus_doc_id       IN NUMBER,
9068             px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9069             x_return_status    OUT  NOCOPY VARCHAR2) IS
9070 
9071       l_api_version                  CONSTANT NUMBER := 1;
9072       l_api_name                     CONSTANT VARCHAR2(30) := 'check_deliverables_var_usage';
9073       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9074       l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
9075       l_index                         PLS_INTEGER := 0;
9076       l_start                         PLS_INTEGER := 0;
9077       l_message_txt                   VARCHAR2(2000);
9078       l_qa_code                       VARCHAR2(80) := 'CHECK_DELIVERABLES_VAR_USAGE';
9079       l_short_desc                    VARCHAR2(80) ;
9080 
9081       l_old_var_code                okc_k_art_variables.variable_code%TYPE;
9082       l_old_art_id                  okc_k_articles_b.sav_sae_id%TYPE;
9083       l_article_name                VARCHAR2(240);
9084 
9085       --variable codes
9086       l_var_code_int_con            CONSTANT VARCHAR2(40) := 'INTERNAL_CONTRACTUAL_DEL';
9087       l_var_code_ext_con            CONSTANT VARCHAR2(40) := 'EXTERNAL_CONTRACTUAL_DEL';
9088       l_var_code_all_con            CONSTANT VARCHAR2(40) := 'ALL_CONTRACTUAL_DEL';
9089 
9090       l_var_code_ext_sourcing       CONSTANT VARCHAR2(40) := 'EXTERNAL_SOURCING_DEL';
9091       l_var_code_all_sourcing       CONSTANT VARCHAR2(40) := 'ALL_SOURCING_DEL';
9092 
9093       l_contractual                 CONSTANT VARCHAR2(40) := 'CONTRACTUAL';
9094       l_sourcing                    CONSTANT VARCHAR2(40) := 'SOURCING';
9095 
9096       --l_external                    CONSTANT VARCHAR2(40) := 'EXTERNAL';
9097       --l_internal                    CONSTANT VARCHAR2(40) := 'INTERNAL';
9098 
9099       l_internal_org                CONSTANT VARCHAR2(40) := 'INTERNAL_ORG';
9100 
9101 
9102       l_error_exists                VARCHAR2(1) := 'N';
9103 
9104       l_resolved_msg_name VARCHAR2(30);
9105       l_resolved_msg_name2 VARCHAR2(30);
9106 
9107       DEL_NOT_FOUND_EXCEPTION EXCEPTION;
9108 
9109      CURSOR get_variables_CUR IS
9110      select
9111     art.document_id doc_id
9112     ,art.document_type doc_type
9113     ,av.variable_code       variable_code
9114     ,art.sav_sae_id         article_id
9115     ,art.article_version_id version_id
9116     ,art.scn_id             section_id
9117     ,sec.label||' '||sec.heading section_name
9118     ,variables.variable_name variable_name
9119     from
9120     okc_k_art_variables av
9121     ,okc_k_articles_b art
9122     ,okc_sections_b sec
9123     ,okc_bus_variables_v variables
9124      where
9125      art.document_id = p_bus_doc_id and
9126      art.document_type = p_bus_doc_type and
9127      av.variable_type = 'D' and
9128      av.cat_id = art.id and --ArtVariables to Articles
9129      sec.id = art.scn_id and --Sections to Articles
9130      variables.variable_code = av.variable_code and --Variables to ArtVariables
9131      nvl (art.amendment_operation_code,'?') <> 'DELETED' and --fix for bug 3710697
9132      nvl(art.summary_amend_operation_code,'?')<> 'DELETED'
9133      order by av.variable_code, art.sav_sae_id;
9134 
9135 
9136 
9137      get_variables_REC get_variables_CUR%ROWTYPE;
9138 
9139      CURSOR check_int_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9140                                  ,p_bus_doc_id IN NUMBER
9141                    ,p_del_type IN VARCHAR2
9142                ,p_internal_org IN VARCHAR2) IS
9143      select 'x'
9144      from
9145       okc_deliverables del
9146      where
9147          del.business_document_type = p_bus_doc_type
9148      and del.business_document_id = p_bus_doc_id
9149      and del.deliverable_type = p_del_type
9150   and del.responsible_party = p_internal_org;
9151 
9152      check_int_dels_exist_REC check_int_dels_exist_CUR%ROWTYPE;
9153 
9154 
9155      CURSOR check_ext_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9156                                  ,p_bus_doc_id IN NUMBER
9157                    ,p_del_type IN VARCHAR2
9158                ,p_internal_org IN VARCHAR2) IS
9159      select 'x'
9160      from
9161       okc_deliverables del
9162      where
9163          del.business_document_type = p_bus_doc_type
9164      and del.business_document_id = p_bus_doc_id
9165      and del.deliverable_type = p_del_type
9166   and del.responsible_party <> p_internal_org;
9167 
9168      check_ext_dels_exist_REC check_ext_dels_exist_CUR%ROWTYPE;
9169 
9170     CURSOR check_all_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9171                                    ,p_bus_doc_id IN NUMBER
9172               ,p_del_type IN VARCHAR2) IS
9173     select 'x'
9174     from
9175     okc_deliverables del
9176     where
9177     del.business_document_type = p_bus_doc_type
9178     and del.business_document_id = p_bus_doc_id
9179     and del.deliverable_type = p_del_type;
9180 
9181     check_all_dels_exist_REC check_all_dels_exist_CUR%ROWTYPE;
9182 
9183 
9184     --fix bug 3682452
9185     --We only check the variable usage for Negotiation type of deliverables
9186     --on a sourcing document
9187     --If it's a PO document, we do not check this
9188     --and we decide if a document is a sourcing document based on the
9189     --target_response_doc_type
9190     CURSOR response_doc_type_cur(p_bus_doc_type IN VARCHAR2) IS
9191     select target_response_doc_type
9192     from okc_bus_doc_types_b
9193     where document_type = p_bus_doc_type;
9194 
9195     response_doc_type_rec response_doc_type_cur%ROWTYPE;
9196 
9197     Begin
9198 
9199 
9200 
9201 
9202     l_qa_result_tbl := px_qa_result_tbl;
9203     l_index := px_qa_result_tbl.count;
9204     l_start := px_qa_result_tbl.count;
9205     l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
9206 
9207     --initialize l_old_var_code and l_old_art_id
9208     l_old_var_code := 'X';
9209     l_old_art_id := 0;
9210 
9211 
9212     OPEN get_variables_CUR;
9213     LOOP
9214     Begin
9215     Fetch get_variables_CUR into get_variables_REC;
9216     EXIT WHEN get_variables_CUR%NOTFOUND;
9217 
9218     IF (get_variables_REC.variable_code <> l_old_var_code)THEN
9219 
9220         --as we traverse down the records, if we encounter a different variable_code
9221         --we should perform the checks
9222         --if the article_id changes and we already know that the variable_code does not have
9223         --associated deliverables, we just need to insert the error message
9224         --without performing the check
9225 
9226         l_error_exists := 'N';
9227 
9228 
9229 
9230           IF get_variables_REC.variable_code = l_var_code_int_con then
9231 
9232 
9233                     OPEN check_int_dels_exist_CUR(
9234                           p_bus_doc_type => p_bus_doc_type
9235                                      ,p_bus_doc_id => p_bus_doc_id
9236                       ,p_del_type => l_contractual
9237                          ,p_internal_org => l_internal_org);
9238 
9239                     FETCH check_int_dels_exist_CUR into check_int_dels_exist_REC;
9240                     If check_int_dels_exist_CUR%NOTFOUND then
9241                         l_error_exists := 'Y';
9242                         RAISE DEL_NOT_FOUND_EXCEPTION;
9243                     End If;
9244                     CLOSE check_int_dels_exist_CUR;
9245 
9246           Elsif get_variables_REC.variable_code = l_var_code_ext_con then
9247 
9248                     OPEN check_ext_dels_exist_CUR(
9249                           p_bus_doc_type => p_bus_doc_type
9250                                      ,p_bus_doc_id => p_bus_doc_id
9251                       ,p_del_type => l_contractual
9252                          ,p_internal_org => l_internal_org);
9253 
9254                     FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
9255                     If check_ext_dels_exist_CUR%NOTFOUND then
9256                         l_error_exists := 'Y';
9257                         RAISE DEL_NOT_FOUND_EXCEPTION;
9258                     End If;
9259                     CLOSE check_ext_dels_exist_CUR;
9260 
9261           Elsif get_variables_REC.variable_code = l_var_code_all_con then
9262 
9263 
9264                 OPEN check_all_dels_exist_CUR(p_bus_doc_type => p_bus_doc_type
9265                         ,p_bus_doc_id => p_bus_doc_id
9266                      ,p_del_type => l_contractual);
9267 
9268                 FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
9269                 If check_all_dels_exist_CUR%NOTFOUND then
9270                     l_error_exists := 'Y';
9271                     RAISE DEL_NOT_FOUND_EXCEPTION;
9272                 End If;
9273                 CLOSE check_all_dels_exist_CUR;
9274 
9275 
9276           Elsif get_variables_REC.variable_code = l_var_code_ext_sourcing then
9277 
9278             --fix bug 3682452
9279             --We only check the variable usage for Negotiation type of deliverables
9280             --on a sourcing document
9281             OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
9282                 FETCH response_doc_type_cur into response_doc_type_rec;
9283                 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
9284                     OPEN check_ext_dels_exist_CUR(
9285                                       p_bus_doc_type => p_bus_doc_type
9286                                      ,p_bus_doc_id => p_bus_doc_id
9287                       ,p_del_type => l_sourcing
9288                                      ,p_internal_org => l_internal_org);
9289 
9290                     FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
9291                     If check_ext_dels_exist_CUR%NOTFOUND then
9292                         l_error_exists := 'Y';
9293                         RAISE DEL_NOT_FOUND_EXCEPTION;
9294                     End If;
9295                     CLOSE check_ext_dels_exist_CUR;
9296                 END IF;
9297             CLOSE response_doc_type_cur;
9298 
9299 
9300           Elsif get_variables_REC.variable_code = l_var_code_all_sourcing then
9301 
9302             --fix bug 3682452
9303             --We only check the variable usage for Negotiation type of deliverables
9304             --on a sourcing document
9305             OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
9306                 FETCH response_doc_type_cur into response_doc_type_rec;
9307                 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
9308 
9309                     OPEN check_all_dels_exist_CUR(
9310                     p_bus_doc_type => p_bus_doc_type
9311                                      ,p_bus_doc_id => p_bus_doc_id
9312                       ,p_del_type => l_sourcing);
9313                     FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
9314                     If check_all_dels_exist_CUR%NOTFOUND then
9315                         l_error_exists := 'Y';
9316                         RAISE DEL_NOT_FOUND_EXCEPTION;
9317                     End If;
9318                     CLOSE check_all_dels_exist_CUR;
9319                 END IF;
9320             CLOSE response_doc_type_cur;
9321 
9322           End IF; --get_variables_REC.variable_code = l_var_code_int_con
9323 
9324     ELSE --current variable_code = old variable_code
9325 
9326         IF(l_error_exists = 'Y')  THEN
9327             RAISE DEL_NOT_FOUND_EXCEPTION;
9328         END IF;
9329     END IF;
9330 
9331 
9332         EXCEPTION
9333          WHEN DEL_NOT_FOUND_EXCEPTION THEN
9334           IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9335            FND_LOG.STRING(  FND_LOG.LEVEL_EXCEPTION ,g_module||l_api_name,'5000: In check_deliverables_var_usage:DEL_NOT_FOUND :'||SQLERRM);
9336           END IF;
9337 
9338                   l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_VAR_NOT_RESOLVED', p_bus_doc_type);
9339                   l_resolved_msg_name2 := OKC_API.resolve_message('OKC_DEL_VAR_NOT_RESOLVED_S', p_bus_doc_type);
9340 
9341           update_error_table
9342            (px_qa_result_tbl => l_qa_result_tbl,
9343             p_qa_severity => p_severity,
9344             p_qa_code => l_qa_code,
9345             p_error_msg_name =>  l_resolved_msg_name,
9346             p_del_variable_name => get_variables_REC.variable_name, -- get_variables_REC.del_variable_name,
9347             p_article_id => get_variables_REC.article_id,
9348             p_article_name => okc_terms_util_pvt.get_Article_Name( get_variables_REC.article_id ,get_variables_REC.version_id), -- get_variables_REC.article_name,
9349             p_section_name => get_variables_REC.section_name,
9350             p_suggestion_msg_name =>  l_resolved_msg_name2,
9351             x_return_status => l_return_status );
9352 
9353           IF check_int_dels_exist_CUR%ISOPEN THEN
9354             CLOSE check_int_dels_exist_CUR;
9355           END IF;
9356           IF check_ext_dels_exist_CUR%ISOPEN THEN
9357             CLOSE check_ext_dels_exist_CUR;
9358           END IF;
9359 
9360           IF check_all_dels_exist_CUR%ISOPEN THEN
9361             CLOSE check_all_dels_exist_CUR;
9362           END IF;
9363 
9364           IF response_doc_type_cur%ISOPEN THEN
9365             CLOSE response_doc_type_cur;
9366           END IF;
9367 
9368      End ; --end exception DEL_NOT_FOUND_EXCEPTION
9369         --reset the old values
9370         l_old_var_code := get_variables_REC.variable_code;
9371         l_old_art_id := get_variables_REC.article_id;
9372 
9373     END LOOP;
9374 
9375     CLOSE get_variables_CUR;
9376 
9377     x_return_status := l_return_status;
9378     px_qa_result_tbl := l_qa_result_tbl;
9379 
9380        EXCEPTION
9381          WHEN OTHERS THEN
9382           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9383            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5001: Leaving check_deliverables_var_usage with unexpected error:'||SQLERRM);
9384           END IF;
9385 
9386           IF get_variables_CUR%ISOPEN THEN
9387             CLOSE get_variables_CUR;
9388           END IF;
9389 
9390           IF check_int_dels_exist_CUR%ISOPEN THEN
9391             CLOSE check_int_dels_exist_CUR;
9392           END IF;
9393 
9394           IF check_ext_dels_exist_CUR%ISOPEN THEN
9395             CLOSE check_int_dels_exist_CUR;
9396           END IF;
9397 
9398           IF check_all_dels_exist_CUR%ISOPEN THEN
9399             CLOSE check_all_dels_exist_CUR;
9400           END IF;
9401 
9402           IF response_doc_type_cur%ISOPEN THEN
9403             CLOSE response_doc_type_cur;
9404           END IF;
9405           x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
9406 
9407 
9408     End check_deliverables_var_usage;
9409 
9410 /**********************
9411 PROCEDURE check_external_party_exist:
9412 This API will be invoked by validate_deliverables_for_qa routine during QA check on a
9413 Deliverable. This check should only fire for Deliverables on a document where document_class
9414 is 'REPOSITORY'. This check should not fire for Deliverable types whose INTERNAL_FLAG = 'Y'
9415  *  @modifies px_qa_result_tbl  table of records that contains validation errors and warnings
9416  *  @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
9417  *                          OKC_API.G_RET_STS_ERROR if fails
9418  *                          OKC_API.G_RET_STS_UNEXP_ERROR if unexpected error
9419  *          x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
9420  *                          OKC_API.G_RET_STS_ERROR if at least one error/warning is found
9421 ***********************/
9422 PROCEDURE check_external_party_exists (
9423   del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
9424   p_severity         IN VARCHAR2,
9425   px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9426   x_return_status    OUT  NOCOPY VARCHAR2
9427   ) IS
9428 
9429   l_api_version          CONSTANT NUMBER := 1;
9430   l_api_name             CONSTANT VARCHAR2(30) := 'check_external_party_exists';
9431   l_return_status        VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9432   l_qa_result_tbl        OKC_TERMS_QA_PVT.qa_result_tbl_type;
9433   l_index                PLS_INTEGER := 0;
9434   l_start                PLS_INTEGER := 0;
9435 
9436   l_qa_code               VARCHAR2(80) := 'CHECK_EXTERNAL_PARTY_EXISTS';
9437   l_short_desc            VARCHAR2(80);
9438   --Acq Plan Message Cleanup
9439   --l_error_msg_name        FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS';
9440   l_error_msg_name        FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS';
9441   --l_suggestion_msg_name   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS_S';
9442   l_suggestion_msg_name   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS_S';
9443 
9444   l_deliverable_name_token VARCHAR2(30) := 'DELIVERABLE_NAME';
9445 
9446   l_error_msg_text        FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
9447   l_suggestion_msg_text   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
9448 
9449   l_doc_type_class OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE;
9450   l_del_type_int_flag     OKC_DELIVERABLE_TYPES_B.INTERNAL_FLAG%TYPE;
9451 
9452 	--Acq Plan Message Cleanup
9453     l_resolved_msg_name VARCHAR2(30);
9454     l_resolved_token VARCHAR2(100);
9455 
9456  BEGIN
9457 
9458   l_qa_result_tbl := px_qa_result_tbl;
9459   l_index := px_qa_result_tbl.count;
9460   l_start := px_qa_result_tbl.count;
9461 
9462   l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
9463 
9464   l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
9465   If (l_doc_type_class IS NULL) then
9466     RAISE FND_API.G_EXC_ERROR;
9467   End If;
9468   l_del_type_int_flag := getDelTypeIntFlag(p_document_type_class => l_doc_type_class
9469                                           ,p_deliverable_type => del_rec.deliverable_type);
9470   If (l_del_type_int_flag IS NULL) then
9471     RAISE FND_API.G_EXC_ERROR;
9472   End If;
9473 
9474   If (l_doc_type_class = 'REPOSITORY'
9475      AND l_del_type_int_flag = 'N'
9476      AND del_rec.external_party_id is NULL) then
9477 
9478      l_index := l_index+1;
9479   l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
9480 
9481 				  --Acq Plan Message Cleanup
9482                   l_resolved_msg_name := OKC_API.resolve_message(l_error_msg_name,del_rec.business_document_type);
9483                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
9484 
9485   l_error_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
9486                          p_msg_name => l_resolved_msg_name,
9487 																                       p_token1 => 'DEL_TOKEN',
9488                                                        p_token1_value => l_resolved_token,
9489                                                        p_token2 => l_deliverable_name_token,
9490                                                        p_token2_value => del_rec.deliverable_name);
9491             l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
9492             l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
9493 
9494   l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
9495   l_qa_result_tbl(l_index).problem_details := l_error_msg_text;
9496 
9497 				  --Acq Plan Message Cleanup
9498                   l_resolved_msg_name := OKC_API.resolve_message(l_suggestion_msg_name,del_rec.business_document_type);
9499                   l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
9500 
9501      l_suggestion_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
9502                            p_msg_name => l_resolved_msg_name,
9503 													 p_token1 => 'DEL_TOKEN',
9504                            p_token1_value => l_resolved_token
9505                            );
9506 
9507      l_qa_result_tbl(l_index).suggestion := l_suggestion_msg_text;
9508   l_qa_result_tbl(l_index).title := del_rec.deliverable_name;
9509   l_qa_result_tbl(l_index).deliverable_id := del_rec.deliverable_id;
9510   l_qa_result_tbl(l_index).qa_code := l_qa_code;
9511   l_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
9512   l_qa_result_tbl(l_index).error_severity := p_severity;
9513 
9514   End If;
9515       x_return_status := l_return_status;
9516    px_qa_result_tbl := l_qa_result_tbl;
9517 
9518 
9519     EXCEPTION
9520        WHEN FND_API.G_EXC_ERROR THEN
9521        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9522          FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module
9523         ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_ERROR');
9524     END IF;
9525       x_return_status := G_RET_STS_ERROR;
9526 
9527 
9528        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9529        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9530             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
9531       ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_UNEXPECTED_ERROR');
9532     END IF;
9533 
9534         x_return_status := G_RET_STS_UNEXP_ERROR;
9535 
9536 
9537        WHEN OTHERS THEN
9538        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9539             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
9540       ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with OTHERS EXCEPTION');
9541        END IF;
9542        x_return_status := G_RET_STS_UNEXP_ERROR;
9543 
9544        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9545           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9546        END IF;
9547 
9548 
9549 End check_external_party_exists;
9550 
9551 
9552    /* This procedure is called from terms QA check API.
9553    * @requires p_qa_result_tbl  has been initialized
9554    *           p_doc_type not null
9555    *           p_doc_id not null
9556    * @modifies p_qa_result_tbl  table of records that contains validation
9557    *           errors and warnings
9558    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
9559    *                           OKC_API.G_RET_STS_ERROR if failes
9560    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
9561    */
9562 PROCEDURE validate_deliverable_for_qa (
9563                         p_api_version   IN    NUMBER,
9564                         p_init_msg_list IN   VARCHAR2 := FND_API.G_FALSE,
9565                         p_doc_type    IN   VARCHAR2,
9566                         p_doc_id    IN    NUMBER,
9567                         p_mode    IN     VARCHAR2,
9568                         p_bus_doc_date_events_tbl   IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
9569                         p_qa_result_tbl IN OUT NOCOPY    OKC_TERMS_QA_PVT.qa_result_tbl_type,
9570                         x_msg_data  OUT NOCOPY VARCHAR2,
9571                         x_msg_count   OUT NOCOPY NUMBER,
9572                         x_return_status   OUT NOCOPY VARCHAR2,
9573                         x_qa_return_status  IN OUT NOCOPY VARCHAR2)
9574   IS
9575 
9576     l_api_version                  CONSTANT NUMBER := 1;
9577     l_api_name                     CONSTANT VARCHAR2(30) := 'validate_deliverable';
9578     l_qa_severity_warning          CONSTANT VARCHAR2(1) := 'W';
9579     l_qa_severity_error            CONSTANT VARCHAR2(1) := 'E';
9580 
9581     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9582     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
9583 
9584     l_start                         PLS_INTEGER := 0;
9585     l_end                           PLS_INTEGER := 0;
9586     del_cur   del_cur_type;
9587     del_rec   okc_deliverables%ROWTYPE;
9588     l_qa_return_status              VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9589 
9590   --  l_due_date_msg                  VARCHAR2(2000) := '';
9591     l_check_int_contact VARCHAR2(19)  := 'CHECK_BUYER_CONTACT';
9592     l_check_ext_contact VARCHAR2(22)  := 'CHECK_SUPPLIER_CONTACT';
9593     l_check_due_dates VARCHAR2(15) := 'CHECK_DUE_DATES';
9594     l_check_amendments VARCHAR2(20) := 'CHECK_AMENDMENT';
9595     l_check_var_usage VARCHAR2(40)  := 'CHECK_DELIVERABLES_VAR_USAGE';
9596     l_check_notifications VARCHAR2(40) := 'CHECK_NOTIFICATIONS';
9597     --bug 3686334, added CHECK_INTERNAL_CONTACT_VALID
9598     l_check_int_contact_valid VARCHAR2(30) := 'CHECK_INTERNAL_CONTACT_VALID';
9599     --bug 3814702, add a variable for Lookup type
9600 
9601     l_check_external_party_exists VARCHAR2(30) := 'CHECK_EXTERNAL_PARTY_EXISTS';
9602 
9603     l_lookup_type FND_LOOKUPS.LOOKUP_TYPE%TYPE :='OKC_TERM_QA_LIST';
9604 
9605     CURSOR check_qa_csr(p_qa_code IN VARCHAR2) IS
9606     select qa_code, severity_flag,enable_qa_yn
9607     from okc_doc_qa_lists
9608     where document_type = p_doc_type
9609     and qa_code = p_qa_code;
9610 
9611     CURSOR check_lookup_code_csr(p_lookup_code IN VARCHAR2) IS
9612     select enabled_flag
9613     from fnd_lookups
9614     where lookup_type = l_lookup_type --bug 3814702, use variable for lookup_type
9615     and lookup_code = p_lookup_code;
9616 
9617 
9618     l_int_contact_rec check_qa_csr%ROWTYPE;
9619     l_ext_contact_rec check_qa_csr%ROWTYPE;
9620     l_due_dates_rec check_qa_csr%ROWTYPE;
9621     l_amendments_rec check_qa_csr%ROWTYPE;
9622     l_var_usage_rec check_qa_csr%ROWTYPE;
9623     l_notifications_rec check_qa_csr%ROWTYPE;
9624     l_int_contact_valid_rec check_qa_csr%ROWTYPE;
9625     l_chk_extparty_exists_rec check_qa_csr%ROWTYPE; --ExternalPartyExists check
9626 
9627 
9628     l_int_contact_code_rec check_lookup_code_csr%ROWTYPE;
9629     l_ext_contact_code_rec check_lookup_code_csr%ROWTYPE;
9630     l_due_dates_code_rec check_lookup_code_csr%ROWTYPE;
9631     l_amendments_code_rec check_lookup_code_csr%ROWTYPE;
9632     l_var_usage_code_rec check_lookup_code_csr%ROWTYPE;
9633     l_notifications_code_rec check_lookup_code_csr%ROWTYPE;
9634     l_int_contact_valid_code_rec check_lookup_code_csr%ROWTYPE;
9635     l_chk_extparty_exists_code_rec check_lookup_code_csr%ROWTYPE; --ExternalPartyExists check
9636 
9637 
9638     l_check_int_contact_yn VARCHAR2(1);
9639     l_check_ext_contact_yn VARCHAR2(1);
9640     l_check_due_dates_yn VARCHAR2(1);
9641     l_check_amendments_yn VARCHAR2(1);
9642     l_check_var_usage_yn VARCHAR2(1);
9643     l_check_notifications_yn VARCHAR2(1);
9644     l_check_int_contact_valid_yn VARCHAR2(1);
9645     l_chk_extparty_exists_yn VARCHAR2(1); --ExternalPartyExists check
9646 
9647     l_int_contact_severity VARCHAR2(1);
9648     l_ext_contact_severity VARCHAR2(1);
9649     l_due_dates_severity VARCHAR2(1);
9650     l_amendments_severity VARCHAR2(1);
9651     l_var_usage_severity VARCHAR2(1);
9652     l_notifications_severity VARCHAR2(1);
9653     l_int_contact_valid_severity VARCHAR2(1);
9654     l_chk_extparty_exists_severity VARCHAR2(1); --ExternalPartyExists check
9655 
9656     l_error_found      VARCHAR2(1) := 'N';
9657     l_warning_found    VARCHAR2(1) := 'N';
9658     l_contract_source OKC_TEMPLATE_USAGES.CONTRACT_SOURCE_CODE%TYPE;
9659 
9660 
9661 
9662   BEGIN
9663 
9664     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9665        okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
9666        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
9667     END IF;
9668 
9669     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
9670                                               p_init_msg_list,
9671                                               '_PVT',
9672                                              x_return_status);
9673     IF p_doc_id = NULL THEN
9674        Okc_Api.Set_Message(G_APP_NAME
9675                        ,'OKC_DEL_NO_PARAMS');
9676        RAISE FND_API.G_EXC_ERROR;
9677     END IF;
9678     IF p_doc_type = NULL THEN
9679        Okc_Api.Set_Message(G_APP_NAME
9680                        ,'OKC_DEL_NO_PARAMS');
9681        RAISE FND_API.G_EXC_ERROR;
9682     END IF;
9683     IF p_mode = NULL THEN
9684        Okc_Api.Set_Message(G_APP_NAME
9685                        ,'OKC_DEL_NO_PARAMS');
9686        RAISE FND_API.G_EXC_ERROR;
9687     END IF;
9688 
9689 
9690 
9691     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
9692       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
9693     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
9694       RAISE OKC_API.G_EXCEPTION_ERROR;
9695     END IF;
9696 
9697     -- Initialize message list if p_init_msg_list is set to TRUE.
9698     IF FND_API.to_Boolean( p_init_msg_list ) THEN
9699       FND_MSG_PUB.initialize;
9700     END IF;
9701 
9702     --initialize l_qa_result_tbl
9703     l_qa_result_tbl := p_qa_result_tbl;
9704 
9705     l_start := l_qa_result_tbl.count;
9706 
9707 
9708     --first we check if the lookup_code is enabled in fnd_lookups
9709     --(1)if the lookup_code is disabled we do not perform the QA check
9710     --(2)if the lookup_code is enabled we query okc_qa_doc_lists
9711     --if the enable_qa_yn = 'N' we do not perform the QA check
9712     --otherwise (including when enable_qa_yn='Y' and when there is no row returned) we perform QA check
9713     OPEN check_lookup_code_csr(l_check_amendments);
9714     FETCH check_lookup_code_csr into l_amendments_code_rec;
9715     IF(check_lookup_code_csr%NOTFOUND OR l_amendments_code_rec.enabled_flag = 'N') THEN
9716         l_check_amendments_yn := 'N';
9717     ELSE
9718         OPEN check_qa_csr(l_check_amendments);
9719         FETCH check_qa_csr into l_amendments_rec;
9720         IF(check_qa_csr%NOTFOUND) THEN
9721             l_check_amendments_yn := 'Y';
9722             --since there is no row, we cannot get the severity_flag
9723             --default it to warning
9724             l_amendments_severity := l_qa_severity_warning;
9725         ELSE
9726             IF(l_amendments_rec.enable_qa_yn = 'N') THEN
9727                 l_check_amendments_yn := 'N';
9728             ELSE
9729                 l_check_amendments_yn := 'Y';
9730                 l_amendments_severity := l_amendments_rec.severity_flag;
9731             END IF;
9732         END IF;
9733         CLOSE check_qa_csr;
9734     END IF;
9735     CLOSE check_lookup_code_csr;
9736 
9737     OPEN check_lookup_code_csr(l_check_notifications);
9738     FETCH check_lookup_code_csr into l_notifications_code_rec;
9739     IF(check_lookup_code_csr%NOTFOUND OR l_notifications_code_rec.enabled_flag = 'N') THEN
9740         l_check_notifications_yn := 'N';
9741     ELSE
9742         OPEN check_qa_csr(l_check_notifications);
9743         FETCH check_qa_csr into l_notifications_rec;
9744         IF(check_qa_csr%NOTFOUND) THEN
9745             l_check_notifications_yn := 'Y';
9746             --since there is no row, we cannot get the severity_flag
9747             --default it to warning
9748             l_notifications_severity := l_qa_severity_warning;
9749         ELSE
9750             IF(l_notifications_rec.enable_qa_yn = 'N') THEN
9751                 l_check_notifications_yn := 'N';
9752             ELSE
9753                 l_check_notifications_yn := 'Y';
9754                 l_notifications_severity := l_notifications_rec.severity_flag;
9755             END IF;
9756         END IF;
9757         CLOSE check_qa_csr;
9758     END IF;
9759     CLOSE check_lookup_code_csr;
9760 
9761     OPEN check_lookup_code_csr(l_check_int_contact);
9762     FETCH check_lookup_code_csr into l_int_contact_code_rec;
9763     IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_code_rec.enabled_flag = 'N') THEN
9764         l_check_int_contact_yn := 'N';
9765     ELSE
9766         OPEN check_qa_csr(l_check_int_contact);
9767         FETCH check_qa_csr into l_int_contact_rec;
9768         IF(check_qa_csr%NOTFOUND) THEN
9769             l_check_int_contact_yn := 'Y';
9770             --since there is no row, we cannot get the severity_flag
9771             --default it to warning
9772             l_int_contact_severity := l_qa_severity_warning;
9773         ELSE
9774             IF(l_int_contact_rec.enable_qa_yn = 'N') THEN
9775                 l_check_int_contact_yn := 'N';
9776             ELSE
9777                 l_check_int_contact_yn := 'Y';
9778                 l_int_contact_severity := l_int_contact_rec.severity_flag;
9779             END IF;
9780         END IF;
9781         CLOSE check_qa_csr;
9782     END IF;
9783     CLOSE check_lookup_code_csr;
9784 
9785 
9786     OPEN check_lookup_code_csr(l_check_int_contact_valid);
9787     FETCH check_lookup_code_csr into l_int_contact_valid_code_rec;
9788     IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_valid_code_rec.enabled_flag = 'N') THEN
9789         l_check_int_contact_valid_yn := 'N';
9790     ELSE
9791         OPEN check_qa_csr(l_check_int_contact_valid);
9792         FETCH check_qa_csr into l_int_contact_valid_rec;
9793         IF(check_qa_csr%NOTFOUND) THEN
9794             l_check_int_contact_valid_yn := 'Y';
9795             --since there is no row, we cannot get the severity_flag
9796             --default it to warning
9797             l_int_contact_valid_severity := l_qa_severity_warning;
9798         ELSE
9799             IF(l_int_contact_valid_rec.enable_qa_yn = 'N') THEN
9800                 l_check_int_contact_valid_yn := 'N';
9801             ELSE
9802                 l_check_int_contact_valid_yn := 'Y';
9803                 l_int_contact_valid_severity := l_int_contact_valid_rec.severity_flag;
9804             END IF;
9805         END IF;
9806         CLOSE check_qa_csr;
9807     END IF;
9808     CLOSE check_lookup_code_csr;
9809 
9810 
9811     OPEN check_lookup_code_csr(l_check_ext_contact);
9812     FETCH check_lookup_code_csr into l_ext_contact_code_rec;
9813     IF(check_lookup_code_csr%NOTFOUND OR l_ext_contact_code_rec.enabled_flag = 'N') THEN
9814         l_check_ext_contact_yn := 'N';
9815     ELSE
9816         OPEN check_qa_csr(l_check_ext_contact);
9817         FETCH check_qa_csr into l_ext_contact_rec;
9818         IF(check_qa_csr%NOTFOUND) THEN
9819             l_check_ext_contact_yn := 'Y';
9820             --since there is no row, we cannot get the severity_flag
9821             --default it to warning
9822             l_ext_contact_severity := l_qa_severity_warning;
9823         ELSE
9824             IF(l_ext_contact_rec.enable_qa_yn = 'N') THEN
9825                 l_check_ext_contact_yn := 'N';
9826             ELSE
9827                 l_check_ext_contact_yn := 'Y';
9828                 l_ext_contact_severity := l_ext_contact_rec.severity_flag;
9829             END IF;
9830         END IF;
9831         CLOSE check_qa_csr;
9832     END IF;
9833     CLOSE check_lookup_code_csr;
9834 
9835     OPEN check_lookup_code_csr(l_check_due_dates);
9836     FETCH check_lookup_code_csr into l_due_dates_code_rec;
9837     IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
9838         l_check_due_dates_yn := 'N';
9839     ELSE
9840         OPEN check_qa_csr(l_check_due_dates);
9841         FETCH check_qa_csr into l_due_dates_rec;
9842         IF(check_qa_csr%NOTFOUND) THEN
9843             l_check_due_dates_yn := 'Y';
9844             --since there is no row, we cannot get the severity_flag
9845             --default it to warning
9846             l_due_dates_severity := l_qa_severity_warning;
9847         ELSE
9848             IF(l_due_dates_rec.enable_qa_yn = 'N') THEN
9849                 l_check_due_dates_yn := 'N';
9850             ELSE
9851                 l_check_due_dates_yn := 'Y';
9852                 l_due_dates_severity := l_due_dates_rec.severity_flag;
9853             END IF;
9854         END IF;
9855         CLOSE check_qa_csr;
9856     END IF;
9857     CLOSE check_lookup_code_csr;
9858 
9859 --Begin ExternalPartyExists cursors---
9860     OPEN check_lookup_code_csr(l_check_external_party_exists);
9861     FETCH check_lookup_code_csr into l_chk_extparty_exists_code_rec;
9862     IF(check_lookup_code_csr%NOTFOUND
9863      OR l_chk_extparty_exists_code_rec.enabled_flag = 'N') THEN
9864         l_chk_extparty_exists_yn := 'N';
9865     ELSE
9866         OPEN check_qa_csr(l_check_external_party_exists);
9867         FETCH check_qa_csr into l_chk_extparty_exists_rec;
9868         IF(check_qa_csr%NOTFOUND) THEN
9869             l_chk_extparty_exists_yn := 'Y';
9870             --since there is no row, we cannot get the severity_flag
9871             --default it to warning
9872             l_chk_extparty_exists_severity := l_qa_severity_warning;
9873         ELSE
9874             IF(l_chk_extparty_exists_rec.enable_qa_yn = 'N') THEN
9875                 l_chk_extparty_exists_yn  := 'N';
9876             ELSE
9877                 l_chk_extparty_exists_yn := 'Y';
9878                 l_chk_extparty_exists_severity := l_chk_extparty_exists_rec.severity_flag;
9879             END IF;
9880         END IF;
9881         CLOSE check_qa_csr;
9882     END IF;
9883     CLOSE check_lookup_code_csr;
9884 
9885 --End ExternalPartyExists cursors--
9886      /*   IF(p_mode = G_AMEND_QA) THEN
9887         OPEN del_cur FOR
9888       select *
9889             from okc_deliverables
9890             where business_document_type = p_doc_type
9891             and business_document_id = p_doc_id
9892             and business_document_version = -99
9893             and deliverable_type in (select deltypes.deliverable_type_code from okc_bus_doc_types_b doctypes,
9894                                         --okc_del_bus_doc_combxns deltypes
9895                 okc_deliverable_types_b deltypes
9896                                         where doctypes.document_type=p_doc_type
9897                                         and doctypes.document_type_class = deltypes.document_type_class)
9898             and amendment_operation is not null;
9899 
9900 
9901 
9902         ELSE
9903 */
9904         --to fix bug 3236092
9905         --I am commenting out the dynamic query
9906         --so even in Amend mode we check all the deliverables belong to that bus doc
9907         --this is because even if the deliverable is untouched the bus doc's data might be
9908         --changed so the deliverable could still fail the QA check
9909 
9910 --Repository Change: changed cursor to look at okc_deliverable_types_b
9911     -- updated cursor for bug#4069955
9912 
9913 
9914 
9915             OPEN del_cur FOR
9916             select *
9917             from okc_deliverables
9918             where business_document_type = p_doc_type
9919             and business_document_id = p_doc_id
9920             and business_document_version = -99
9921             and (amendment_operation is NULL OR amendment_operation <> 'DELETED')
9922             and (summary_amend_operation_code is NULL OR summary_amend_operation_code <> 'DELETED')
9923             and deliverable_type in (select deltypes.deliverable_type_code
9924                                      from okc_bus_doc_types_b doctypes,
9925                                      okc_del_bus_doc_combxns deltypes
9926                                      where doctypes.document_type=p_doc_type
9927                                      and doctypes.document_type_class = deltypes.document_type_class);
9928 
9929 
9930    -- END IF;
9931 
9932 
9933 
9934     LOOP
9935         FETCH del_cur INTO del_rec;
9936 
9937 
9938         EXIT WHEN del_cur%NOTFOUND;
9939 
9940 
9941 
9942 
9943         IF(l_check_amendments_yn='Y' and p_mode = G_AMEND_QA) THEN
9944             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9945                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking amendments');
9946             END IF;
9947             check_amendments( del_rec  => del_rec,
9948                                     p_severity => l_amendments_severity,
9949                                     px_qa_result_tbl  => l_qa_result_tbl,
9950                                     x_return_status   => l_return_status);
9951             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9952                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9953             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9954                 RAISE FND_API.G_EXC_ERROR ;
9955             END IF;
9956 
9957             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9958                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking amendments');
9959             END IF;
9960         END IF;
9961 
9962         IF(l_check_notifications_yn='Y') THEN
9963             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9964                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking notifications');
9965             END IF;
9966             check_notifications( del_rec  => del_rec,
9967                                     p_severity => l_notifications_severity,
9968                                     px_qa_result_tbl  => l_qa_result_tbl,
9969                                     x_return_status   => l_return_status);
9970             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9971                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9972             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9973                 RAISE FND_API.G_EXC_ERROR ;
9974             END IF;
9975 
9976             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9977                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking notifications');
9978             END IF;
9979         END IF;
9980 
9981         IF(l_check_int_contact_yn='Y') THEN
9982             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9983                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts');
9984             END IF;
9985             check_internal_contacts( del_rec  => del_rec,
9986                                     p_severity => l_int_contact_severity,
9987                                     px_qa_result_tbl  => l_qa_result_tbl,
9988                                     x_return_status   => l_return_status);
9989             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9990                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9991             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9992                 RAISE FND_API.G_EXC_ERROR ;
9993             END IF;
9994 
9995             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9996                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts');
9997             END IF;
9998         END IF;
9999 
10000         --bug 3686334
10001         --added call to check_internal_contact_valid
10002         IF(l_check_int_contact_valid_yn='Y') THEN
10003             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10004                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts valid');
10005             END IF;
10006             check_internal_contacts_valid( del_rec  => del_rec,
10007                                     p_severity => l_int_contact_valid_severity,
10008                                     px_qa_result_tbl  => l_qa_result_tbl,
10009                                     x_return_status   => l_return_status);
10010             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10011                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10012             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10013                 RAISE FND_API.G_EXC_ERROR ;
10014             END IF;
10015 
10016             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10017                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts valid');
10018             END IF;
10019         END IF;
10020 
10021 
10022 ------------External Party Exists check---------------
10023         IF (l_chk_extparty_exists_yn = 'Y') THEN
10024       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10025            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
10026         ||l_api_name,'start checking external party exists');
10027       END IF;
10028       check_external_party_exists(del_rec => del_rec,
10029                                 p_severity => l_chk_extparty_exists_severity,
10030               px_qa_result_tbl => l_qa_result_tbl,
10031               x_return_status => l_return_status);
10032 
10033          IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10034              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10035          ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10036              RAISE FND_API.G_EXC_ERROR ;
10037          END IF;
10038 
10039          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10040              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
10041        ||l_api_name,'finished checking external party exists');
10042          END IF;
10043         END IF;
10044 
10045 ------------End External Party Exists check------------
10046 
10047         IF(l_check_ext_contact_yn='Y') THEN
10048             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10049                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking external contacts');
10050             END IF;
10051             check_external_contacts( del_rec  => del_rec,
10052                                     p_severity =>l_ext_contact_severity,
10053                                     px_qa_result_tbl  => l_qa_result_tbl,
10054                                     x_return_status   => l_return_status);
10055             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10056                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10057             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10058                 RAISE FND_API.G_EXC_ERROR ;
10059             END IF;
10060             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10061                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking external contacts');
10062             END IF;
10063         END IF;
10064 
10065         IF(l_check_due_dates_yn='Y') THEN
10066             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10067                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking due dates');
10068                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'schedule_type = '||del_rec.schedule_type);
10069             END IF;
10070             --Acq Plan Message Cleanup
10071             IF (nvl(del_rec.schedule_type, 'SYSTEM') = 'SYSTEM') THEN --if schedule_type is SYSTEM then only validations are required.
10072                 check_due_dates( del_rec  => del_rec,
10073                                     p_severity => l_due_dates_severity,
10074                                     p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
10075                                     p_doc_type => p_doc_type,
10076                                     px_qa_result_tbl  => l_qa_result_tbl,
10077                                     x_return_status   => l_return_status);
10078                 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10079                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10080                 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10081                     RAISE FND_API.G_EXC_ERROR ;
10082                 END IF;
10083             ELSE --schedule_type <> SYSTEM
10084                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10085                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name, 'For schedule type NOT IN (system or null), checking due dates is not required');
10086                 END IF;
10087             END IF; --end of schedule_type check
10088 
10089 
10090 
10091             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10092                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking due dates');
10093             END IF;
10094         END IF;
10095 
10096 
10097 
10098 END LOOP;
10099 
10100 
10101            IF ( p_doc_type NOT IN ('TEMPLATE', 'PA_CONTRACT', 'PA_CONTRACT_MOD') -- for template and idv without lines document type, exhibit validation is not needed
10102                 AND is_cdrl_check_required = 'Y'
10103                 )
10104            THEN
10105 
10106 
10107             OPEN del_cur FOR
10108             select *
10109             from okc_deliverables
10110             where business_document_type = p_doc_type
10111             and business_document_id = p_doc_id
10112             and business_document_version = -99
10113             and (amendment_operation is NULL OR amendment_operation <> 'DELETED')
10114             and (summary_amend_operation_code is NULL OR summary_amend_operation_code <> 'DELETED')
10115             AND del_category_code='CDRL';
10116 
10117 
10118 
10119 
10120              LOOP
10121               FETCH del_cur INTO del_rec;
10122               EXIT WHEN del_cur%NOTFOUND;
10123                check_exhibit_details(del_rec  => del_rec,
10124                                      p_severity => 'E',
10125                                      px_qa_result_tbl  => l_qa_result_tbl,
10126                                      x_return_status   => l_return_status);
10127 
10128 
10129               IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10130                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10131               ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10132                   RAISE FND_API.G_EXC_ERROR ;
10133               END IF;
10134             END LOOP;
10135 
10136             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10137                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking Exhibit Details');
10138             END IF;
10139 
10140      END IF;
10141 
10142 
10143     -- bug# 4118095 check the doc source
10144     l_contract_source := OKC_TERMS_UTIL_GRP.Get_Contract_Source_Code
10145                                 (p_document_type => p_doc_type,
10146                                  p_document_id => p_doc_id );
10147 
10148     IF l_contract_source = 'STRUCTURED' THEN
10149 
10150     --Bug Fix for 3249177
10151     --add an additional check to see if any article has variables defined for deliverables
10152     OPEN check_lookup_code_csr(l_check_var_usage);
10153     FETCH check_lookup_code_csr into l_var_usage_code_rec;
10154     IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
10155         l_check_var_usage_yn := 'N';
10156     ELSE
10157         OPEN check_qa_csr(l_check_var_usage);
10158         FETCH check_qa_csr into l_var_usage_rec;
10159         IF(check_qa_csr%NOTFOUND) THEN
10160             l_check_var_usage_yn := 'Y';
10161             --since there is no row, we cannot get the severity_flag
10162             --default it to warning
10163             l_var_usage_severity := l_qa_severity_warning;
10164         ELSE
10165             IF(l_var_usage_rec.enable_qa_yn = 'N') THEN
10166                 l_check_var_usage_yn := 'N';
10167             ELSE
10168                 l_check_var_usage_yn := 'Y';
10169                 l_var_usage_severity := l_var_usage_rec.severity_flag;
10170             END IF;
10171         END IF;
10172         CLOSE check_qa_csr;
10173     END IF;
10174     CLOSE check_lookup_code_csr;
10175 
10176     IF(l_check_var_usage_yn = 'Y') THEN
10177 
10178         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10179                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking variable usage');
10180         END IF;
10181 
10182             check_deliverables_var_usage(p_severity => l_var_usage_severity,
10183                                     p_bus_doc_id => p_doc_id,
10184                                     p_bus_doc_type => p_doc_type,
10185                                     px_qa_result_tbl  => l_qa_result_tbl,
10186                                     x_return_status   => l_return_status);
10187 
10188             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10189                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10190             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10191                 RAISE FND_API.G_EXC_ERROR ;
10192             END IF;
10193             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10194                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking variable usage');
10195             END IF;
10196 
10197     END IF;
10198     END IF; -- l_contract_source = 'STRUCTURED' THEN
10199 
10200     --mass update common attributes
10201     l_end := l_qa_result_tbl.count;
10202 
10203     IF (l_end > l_start) THEN
10204         --We found some error or warning
10205         FOR i IN (l_start+1)..l_end
10206         LOOP
10207             l_qa_result_tbl(i).document_type := p_doc_type;
10208             l_qa_result_tbl(i).document_id := p_doc_id;
10209             l_qa_result_tbl(i).error_record_type := G_DLV_QA_TYPE;
10210 
10211             l_qa_result_tbl(i).creation_date := sysdate;
10212 
10213             --if the error is due to check_deliverable_var_usage
10214             --the section_name should be the article's section name
10215             --otherwise it should be 'DELIVERABLE'
10216             IF l_qa_result_tbl(i).article_id IS NULL THEN
10217                 l_qa_result_tbl(i).section_name := G_DLV_QA_TYPE;
10218             END IF;
10219             --- check if any errors are there.
10220             IF l_qa_result_tbl(i).error_severity = G_QA_STS_ERROR THEN
10221                 l_error_found := 'Y';
10222             END IF;
10223             --- check if any errors are there.
10224             IF l_qa_result_tbl(i).error_severity = G_QA_STS_WARNING THEN
10225                 l_warning_found := 'Y';
10226             END IF;
10227 
10228         END LOOP;
10229 
10230         --now get the qa_return_status
10231         --if there is a record of type "error" found, return "E"
10232         --otherwise if there is a record of type "warning" found, return "W"
10233         --else return "S"
10234         l_qa_return_status := G_QA_STS_SUCCESS;
10235         IF l_error_found = 'Y' THEN
10236            l_qa_return_status := G_QA_STS_ERROR;
10237         ELSIF l_warning_found ='Y' THEN
10238            l_qa_return_status := G_QA_STS_WARNING;
10239         END IF;
10240 
10241     END IF;
10242 
10243      IF del_cur%ISOPEN THEN
10244        CLOSE del_cur;
10245      END IF;
10246 
10247 
10248 
10249     p_qa_result_tbl := l_qa_result_tbl;
10250     x_return_status := l_return_status;
10251     x_qa_return_status := l_qa_return_status;
10252 
10253 
10254     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10255         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa');
10256     END IF;
10257 
10258      EXCEPTION
10259      WHEN FND_API.G_EXC_ERROR THEN
10260 
10261        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10262         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with G_EXC_ERROR');
10263        END IF;
10264        --close cursors
10265        IF (del_cur%ISOPEN) THEN
10266           CLOSE del_cur ;
10267        END IF;
10268 
10269        IF (check_qa_csr%ISOPEN) THEN
10270         CLOSE check_qa_csr;
10271        END IF;
10272 
10273        IF (check_lookup_code_csr%ISOPEN) THEN
10274         CLOSE check_lookup_code_csr;
10275        END IF;
10276 
10277        x_return_status := G_RET_STS_ERROR;
10278        FND_MSG_PUB.Count_And_Get(
10279         p_count =>  x_msg_count,
10280         p_data  =>  x_msg_data
10281         );
10282 
10283     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10284 
10285        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10286         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with G_EXC_UNEXPECTED_ERROR');
10287        END IF;
10288        --close cursors
10289        IF (del_cur%ISOPEN) THEN
10290           CLOSE del_cur ;
10291        END IF;
10292 
10293        IF (check_qa_csr%ISOPEN) THEN
10294         CLOSE check_qa_csr;
10295        END IF;
10296 
10297        IF (check_lookup_code_csr%ISOPEN) THEN
10298         CLOSE check_lookup_code_csr;
10299        END IF;
10300 
10301 
10302        x_return_status := G_RET_STS_UNEXP_ERROR;
10303        FND_MSG_PUB.Count_And_Get(
10304         p_count =>  x_msg_count,
10305         p_data  =>  x_msg_data
10306         );
10307 
10308     WHEN OTHERS THEN
10309        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10310         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with OTHERS EXCEPTION');
10311        END IF;
10312        --close cursors
10313        IF (del_cur%ISOPEN) THEN
10314           CLOSE del_cur ;
10315        END IF;
10316 
10317        IF (check_qa_csr%ISOPEN) THEN
10318         CLOSE check_qa_csr;
10319        END IF;
10320 
10321        IF (check_lookup_code_csr%ISOPEN) THEN
10322         CLOSE check_lookup_code_csr;
10323        END IF;
10324 
10325       x_return_status := G_RET_STS_UNEXP_ERROR;
10326       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10327       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10328       END IF;
10329       FND_MSG_PUB.Count_And_Get(
10330         p_count =>  x_msg_count,
10331         p_data  =>  x_msg_data
10332         );
10333 
10334   END validate_deliverable_for_qa;
10335 
10336 
10337 
10338 
10339 
10340   PROCEDURE delete_del_status_hist_attach(
10341     p_api_version  IN NUMBER,
10342     p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
10343     p_deliverable_id IN NUMBER,
10344     p_bus_doc_id IN NUMBER,
10345     p_bus_doc_version IN NUMBER,
10346     p_bus_doc_type IN VARCHAR2,
10347     x_msg_data   OUT NOCOPY  VARCHAR2,
10348     x_msg_count  OUT NOCOPY  NUMBER,
10349     x_return_status  OUT NOCOPY  VARCHAR2)
10350   IS
10351 
10352   l_api_version                  CONSTANT NUMBER := 1;
10353   l_api_name                     CONSTANT VARCHAR2(30) := 'validate_deliverable';
10354   l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
10355 
10356 
10357 
10358   BEGIN
10359 
10360     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10361        okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
10362        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
10363     END IF;
10364 
10365     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
10366                                               p_init_msg_list,
10367                                               '_PVT',
10368                                              x_return_status);
10369 
10370 
10371     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
10372       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
10373     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
10374       RAISE OKC_API.G_EXCEPTION_ERROR;
10375     END IF;
10376 
10377 
10378 
10379     -- delete deliverables status history
10380     DELETE FROM okc_del_status_history
10381     WHERE deliverable_id = p_deliverable_id;
10382     -- delete attachments if any
10383     delete_attachments (
10384                     p_entity_name => G_ENTITY_NAME
10385                     ,p_pk1_value    =>  p_deliverable_id
10386                     ,x_result       =>  l_return_status);
10387 
10388     x_return_status := l_return_status;
10389 
10390     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10391         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach');
10392     END IF;
10393 
10394   EXCEPTION
10395      WHEN FND_API.G_EXC_ERROR THEN
10396        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10397         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with G_EXC_ERROR');
10398        END IF;
10399 
10400        x_return_status := G_RET_STS_ERROR;
10401        FND_MSG_PUB.Count_And_Get(
10402         p_count =>  x_msg_count,
10403         p_data  =>  x_msg_data
10404         );
10405 
10406     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10407        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10408         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with G_EXC_UNEXPECTED_ERROR');
10409        END IF;
10410 
10411        x_return_status := G_RET_STS_UNEXP_ERROR;
10412        FND_MSG_PUB.Count_And_Get(
10413         p_count =>  x_msg_count,
10414         p_data  =>  x_msg_data
10415         );
10416 
10417     WHEN OTHERS THEN
10418        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10419         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with OTHERS EXCEPTION');
10420        END IF;
10421 
10422       x_return_status := G_RET_STS_UNEXP_ERROR;
10423       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10424       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10425       END IF;
10426       FND_MSG_PUB.Count_And_Get(
10427         p_count =>  x_msg_count,
10428         p_data  =>  x_msg_data
10429         );
10430   END delete_del_status_hist_attach;
10431 
10432 FUNCTION get_ui_bus_doc_event_text(p_event_name IN VARCHAR2,
10433                                     p_before_after IN VARCHAR2) RETURN VARCHAR2 IS
10434 BEGIN
10435   fnd_message.clear;
10436   if p_before_after = 'B' then
10437     fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_BEFORE_BUS_DOC_EVENT');
10438   else
10439     fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_AFTER_BUS_DOC_EVENT');
10440   end if;
10441   fnd_message.set_token(TOKEN => 'EVENT',VALUE => p_event_name);
10442   return fnd_message.get;
10443 END get_ui_bus_doc_event_text;
10444 
10445 /*
10446 Add as part of fix for bug#3458149
10447 Checks Deliverable_Status_History table and returns 'Y' if the Status of a Deliverable was NOT changed by
10448 user since the Deliverable was first resolved, else returns 'N'
10449 */
10450 Function delStatusUnchanged(p_del_ID IN OKC_DELIVERABLES.deliverable_id%TYPE) RETURN VARCHAR2 IS
10451  l_open_count NUMBER ;
10452  l_inactive_count NUMBER ;
10453  l_others_count NUMBER ;
10454 
10455  CURSOR hist_cur (delid NUMBER) IS
10456  SELECT deliverable_status
10457  FROM okc_del_status_history
10458  where deliverable_id = delid;
10459 
10460  hist_rec   hist_cur%ROWTYPE;
10461  l_api_name      CONSTANT VARCHAR2(30) :='delStatusUnchanged';
10462 
10463 Begin
10464 
10465 
10466     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10467         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside delStatusUnchanged.');
10468     END IF;
10469 
10470   -- bug#4137831 initialize variables outside the loop
10471    l_open_count := 0;
10472    l_inactive_count := 0;
10473    l_others_count :=0;
10474   FOR hist_rec IN hist_cur(p_del_id) LOOP
10475 
10476    IF hist_rec.deliverable_status = 'OPEN' THEN
10477     l_open_count := l_open_count+1;
10478    ELSIF hist_rec.deliverable_status = 'INACTIVE' THEN
10479     l_inactive_count := l_inactive_count+1;
10480    ELSIF (hist_rec.deliverable_status <> 'OPEN' OR
10481           hist_rec.deliverable_status <> 'INACTIVE') THEN
10482     l_others_count := l_others_count+1;
10483    END IF;
10484   END LOOP;
10485 
10486   If hist_cur%ISOPEN then
10487     CLOSE hist_cur;
10488   End If;
10489     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10490         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Open status count: '||to_char(l_open_count));
10491         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inactive status count: '||to_char(l_inactive_count));
10492         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Others status count: '||to_char(l_others_count));
10493     END IF;
10494 
10495   IF (l_open_count < 1 OR l_open_count = 1   ) AND
10496      (l_inactive_count < 1 OR l_inactive_count = 1) AND
10497      (l_others_count = 0) THEN
10498     RETURN 'Y';
10499   Else
10500     RETURN 'N';
10501   End If;
10502 
10503   EXCEPTION
10504    WHEN OTHERS THEN
10505     IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10506        FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'delStatusUnchanged','102:Leaving delStatusUnchanged with Exception');
10507     END IF;
10508     If hist_cur%ISOPEN then
10509      CLOSE hist_cur;
10510     End If;
10511 RETURN 'N';
10512 
10513 End delStatusUnchanged;
10514 
10515 
10516 
10517    /*** This API deletes a given set of deliverables, attachments
10518    and status change history for a busdoc. Used to delete only the instances
10519    leaving the definition as it is. Called from update_deliverables group API ***/
10520     PROCEDURE delete_del_instances(
10521     p_api_version  IN NUMBER,
10522     p_init_msg_list IN VARCHAR2,
10523     p_doc_id    IN NUMBER,
10524     p_doc_type  IN  VARCHAR2,
10525     p_doc_version IN NUMBER DEFAULT NULL,
10526     p_Conditional_Delete_Flag IN VARCHAR2 DEFAULT 'N',
10527     p_delid_tab    IN OKC_DELIVERABLE_PROCESS_PVT.delIdTabType,
10528     x_msg_data   OUT NOCOPY  VARCHAR2,
10529     x_msg_count  OUT NOCOPY  NUMBER,
10530     x_return_status  OUT NOCOPY  VARCHAR2)
10531     IS
10532     l_del_id   NUMBER;
10533     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
10534     l_result VARCHAR2(1);
10535     l_api_name      CONSTANT VARCHAR2(30) :='delete_del_instances';
10536 
10537     l_deleteInstances VARCHAR2(1) := 'Y';
10538 
10539     BEGIN
10540 
10541        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10542         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
10543        END IF;
10544         FOR i IN p_delid_tab.FIRST..p_delid_tab.LAST LOOP
10545             l_del_id := p_delid_tab(i);
10546 
10547             -- fix for bug#3458149 do not delete history if deliverables
10548             -- changed status from OPEN status
10549             IF (p_Conditional_Delete_Flag = 'Y') then
10550                If (delStatusUnchanged(p_Del_id => l_del_id) = 'Y') then
10551                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10552                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delStatusUnchanged is Y');
10553                     END IF;
10554            l_deleteInstances := 'Y';
10555          Else
10556            l_deleteInstances := 'N';
10557          End If;
10558       Else
10559            l_deleteInstances := 'Y';
10560       End If;
10561 
10562 
10563        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10564         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_deleteInstances:'||l_deleteInstances);
10565        END IF;
10566             IF (l_deleteInstances = 'Y') then
10567                 -- delete deliverables status history
10568                 DELETE FROM okc_del_status_history
10569                 WHERE deliverable_id = l_del_id;
10570                 -- delete attachments if any
10571                 delete_attachments (
10572                     p_entity_name => G_ENTITY_NAME
10573                     ,p_pk1_value    =>  l_del_id
10574                     ,x_result       =>  l_result);
10575                     IF l_result = 'S' THEN
10576                         -- delete deliverables
10577                         DELETE FROM okc_deliverables
10578                         WHERE deliverable_id = l_del_id;
10579                         DELETE FROM OKC_DELIVERABLES_EXT_B
10580                         WHERE  deliverable_id = l_del_id;
10581                         DELETE FROM OKC_DELIVERABLES_EXT_TL
10582                         WHERE  deliverable_id = l_del_id;
10583                     END IF;
10584                 x_return_status := l_return_status;
10585        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10586         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deleting status history for deliverable id:'||to_char(l_del_id));
10587        END IF;
10588             END IF;
10589 
10590 
10591         END LOOP;
10592 
10593        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10594         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
10595        END IF;
10596 
10597     EXCEPTION
10598     WHEN OTHERS THEN
10599         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10600           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102:Leaving delete_del_instances with Exception');
10601         END IF;
10602         x_return_status := G_RET_STS_UNEXP_ERROR;
10603         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10604        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10605         END IF;
10606         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
10607                                   p_data  =>  x_msg_data);
10608     END delete_del_instances;
10609 
10610 
10611     /**Invoked From: OKC_TERMS_UTIL_GRP.get_document_deviations
10612     1.  This function returns type of deliverables existing on a Business Document
10613         for a given version. Invoked by OKC_TERMS_UTIL_GRP.get_document_deviations.
10614     2.  Select all deliverables for the Business Document. If deliverables exist then
10615     a.  Check each deliverable type
10616         i.  If only contractual deliverables exist then return CONTRACTUAL
10617         ii. If only internal deliverables exist then return INTERNAL
10618         iii.If both contractual and internal deliverables exist then return
10619             CONTRACTUAL_AND_INTERNAL
10620     3.  If no deliverables exist then return NONE**/
10621 
10622 /*** added new signature bug#3192512**/
10623 
10624     FUNCTION deliverables_exist(
10625         p_api_version      IN  NUMBER,
10626         p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE,
10627         x_return_status    OUT NOCOPY VARCHAR2,
10628         x_msg_data         OUT NOCOPY VARCHAR2,
10629         x_msg_count        OUT NOCOPY NUMBER,
10630         p_doctype         IN  VARCHAR2,
10631         p_docid           IN  NUMBER
10632         ) RETURN VARCHAR2
10633     IS
10634     -- updated cursor for bug#4069955
10635     CURSOR del_cur IS
10636     SELECT
10637      del.deliverable_type
10638     ,delType.internal_flag
10639     FROM
10640      okc_deliverables del
10641     ,okc_deliverable_types_b delType
10642     WHERE del.business_document_id = p_docid
10643     AND   del.business_document_type = p_doctype
10644     AND   del.business_document_version = -99
10645     AND   NVL(del.amendment_operation,'NONE') <> 'DELETED'
10646     AND   NVL(del.summary_amend_operation_code,'NONE') <> 'DELETED'
10647     AND   delType.deliverable_type_code = del.deliverable_type;
10648 
10649     l_del_rec  del_cur%ROWTYPE;
10650     l_api_name         CONSTANT VARCHAR2(30) := 'deliverables_exist';
10651     l_exists    VARCHAR2(60):= 'NONE';
10652     l_contractual   okc_deliverables.deliverable_type%TYPE;
10653     l_internal      okc_deliverables.deliverable_type%TYPE;
10654     l_sourcing      okc_deliverables.deliverable_type%TYPE;
10655 
10656     BEGIN
10657 
10658     --  Initialize API return status to success
10659     x_return_status := OKC_API.G_RET_STS_SUCCESS;
10660 
10661     FOR del_rec IN del_cur LOOP
10662        If del_rec.internal_flag = 'Y' then
10663       l_internal := del_rec.deliverable_type;
10664     Else
10665          IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
10666            l_contractual := del_rec.deliverable_type;
10667          ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
10668            l_sourcing := del_rec.deliverable_type;
10669          END IF;
10670     End If;
10671     END LOOP;
10672 
10673         IF l_contractual is not null THEN
10674            l_exists := 'CONTRACTUAL';
10675            IF l_internal is not null THEN
10676              l_exists := 'CONTRACTUAL_AND_INTERNAL';
10677                IF l_sourcing is not null THEN
10678                  l_exists:= 'ALL';
10679                END IF;
10680            ELSE
10681                IF l_sourcing is not null THEN
10682                  l_exists:= 'CONTRACTUAL_AND_SOURCING';
10683                END IF;
10684 
10685            END IF;
10686         ELSE
10687            IF l_internal is not null THEN
10688              l_exists := 'INTERNAL';
10689                IF l_sourcing is not null THEN
10690                  l_exists:= 'SOURCING_AND_INTERNAL';
10691                END IF;
10692            ELSE
10693                IF l_sourcing is not null THEN
10694                  l_exists:= 'SOURCING';
10695                ELSE
10696                  l_exists := 'NONE';
10697                END IF;
10698            END IF;
10699         END IF;
10700 
10701         RETURN(l_exists);
10702    EXCEPTION
10703       WHEN OTHERS THEN
10704          IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10705            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_exist because of EXCEPTION: '||sqlerrm);
10706          END IF;
10707 
10708          IF del_cur%ISOPEN THEN
10709            CLOSE del_cur;
10710          END IF;
10711          x_return_status := G_RET_STS_UNEXP_ERROR ;
10712          IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
10713            FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
10714          END IF;
10715          FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
10716          , p_count => x_msg_count
10717          , p_data => x_msg_data );
10718 
10719          RETURN null;
10720    END; -- deliverables_exist
10721 
10722 
10723 
10724 
10725     PROCEDURE delete_deliverable (
10726     p_api_version  IN NUMBER,
10727     p_init_msg_list IN VARCHAR2,
10728     p_del_id    IN NUMBER,
10729     x_msg_data   OUT NOCOPY  VARCHAR2,
10730     x_msg_count  OUT NOCOPY  NUMBER,
10731     x_return_status  OUT NOCOPY  VARCHAR2)
10732     IS
10733 
10734     l_result   VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
10735     l_api_name VARCHAR2(30) :='delete_deliverable';
10736 
10737     BEGIN
10738 
10739        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10740         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable'||to_char(p_del_id));
10741        END IF;
10742                 -- delete deliverables status history
10743                 DELETE FROM okc_del_status_history
10744                 WHERE deliverable_id = p_del_id;
10745                 -- delete attachments if any
10746                 delete_attachments (
10747                     p_entity_name => G_ENTITY_NAME
10748                     ,p_pk1_value    =>  p_del_id
10749                     ,x_result       =>  l_result);
10750                     IF l_result = 'S' THEN
10751                         -- delete deliverables
10752                         DELETE FROM okc_deliverables
10753                         WHERE deliverable_id = p_del_id;
10754                         DELETE FROM OKC_DELIVERABLES_EXT_B
10755                         WHERE  deliverable_id = p_del_id;
10756                         DELETE FROM OKC_DELIVERABLES_EXT_TL
10757                         WHERE  deliverable_id = p_del_id;
10758                     END IF;
10759             x_return_status := l_result;
10760        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10761         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable');
10762        END IF;
10763 
10764     EXCEPTION
10765     WHEN FND_API.G_EXC_ERROR THEN
10766        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10767         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_ERROR');
10768        END IF;
10769     x_return_status := G_RET_STS_ERROR;
10770       FND_MSG_PUB.Count_And_Get(
10771         p_count =>  x_msg_count,
10772         p_data  =>  x_msg_data
10773         );
10774 
10775     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10776        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10777         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_UNEXPECTED_ERROR');
10778        END IF;
10779     x_return_status := G_RET_STS_UNEXP_ERROR;
10780       FND_MSG_PUB.Count_And_Get(
10781         p_count =>  x_msg_count,
10782         p_data  =>  x_msg_data
10783         );
10784 
10785     WHEN OTHERS THEN
10786        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10787         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_UNEXPECTED_ERROR');
10788        END IF;
10789     x_return_status := G_RET_STS_UNEXP_ERROR;
10790       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10791       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10792       END IF;
10793       FND_MSG_PUB.Count_And_Get(
10794         p_count =>  x_msg_count,
10795         p_data  =>  x_msg_data
10796         );
10797 
10798     END delete_deliverable;
10799 
10800     /*** This procedure will delete all deliverables that have been
10801     created by applying a particular template on a busdoc.
10802     It selects all deliverables which have original_deliverable_id
10803     belonging to the p_template_id and deletes them from the busdoc.
10804     Parameter Details:
10805     p_doc_id :       Business document Id
10806     p_doc_type :     Business document type
10807     ***/
10808     PROCEDURE delete_template_deliverables (
10809     p_api_version       IN  NUMBER,
10810     p_init_msg_list     IN VARCHAR2,
10811     p_doc_id            IN  NUMBER,
10812     p_doc_type          IN VARCHAR2,
10813     x_msg_data      OUT NOCOPY  VARCHAR2,
10814     x_msg_count     OUT NOCOPY  NUMBER,
10815     x_return_status OUT NOCOPY  VARCHAR2)
10816     IS
10817 
10818 -- bug#4075168 changed the select "and original_deliverable_id IN ( select original_deliverable_id"
10819     CURSOR del_cur IS
10820     select deliverable_id
10821     from okc_deliverables
10822     where business_document_id = p_doc_id
10823     and business_document_type = p_doc_type
10824     and business_document_version = -99
10825     and original_deliverable_id IN (
10826     select original_deliverable_id
10827     from okc_deliverables
10828     where business_document_type = 'TEMPLATE');
10829 
10830     CURSOR exb_cur IS
10831     select DISTINCT exhibit_code
10832     from okc_deliverables
10833     where business_document_id = p_doc_id
10834     and business_document_type = p_doc_type
10835     and business_document_version = -99
10836     and original_deliverable_id IN (
10837     select original_deliverable_id
10838     from okc_deliverables
10839     where business_document_type = 'TEMPLATE')
10840     AND DEL_CATEGORY_CODE = 'CDRL'
10841     AND exhibit_code IS NOT NULL;
10842 
10843 
10844     TYPE delIdTabType IS TABLE OF NUMBER;
10845     delIdTab    delIdTabType;
10846     l_result  VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
10847     l_api_name      CONSTANT VARCHAR2(30) :='delete_template_deliverables';
10848 
10849     exhibit_code_tbl okc_cdrl_pvt.exhibit_tbl_type;
10850     BEGIN
10851        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10852           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
10853        END IF;
10854 
10855         -- Get the exhibit details first before we delete deliverables.
10856         OPEN exb_cur;
10857         FETCH exb_cur BULK COLLECT INTO  exhibit_code_tbl;
10858         CLOSE exb_cur;
10859 
10860         OPEN del_cur;
10861         FETCH del_cur BULK COLLECT INTO delIdTab;
10862         -- bug#3188413 check count before loop
10863         IF delIdTab.COUNT > 0 THEN
10864         FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
10865             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10866                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delId is:'||to_char(delIdTab(i)));
10867             END IF;
10868                 -- delete attachments if any
10869                 delete_attachments (
10870                     p_entity_name => G_ENTITY_NAME
10871                     ,p_pk1_value    =>  delIdTab(i)
10872                     ,x_result       =>  l_result);
10873 
10874                     IF l_result <> 'S' THEN
10875                         EXIT;
10876                     END IF;
10877         END LOOP;
10878         IF l_result = 'S' THEN
10879                 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
10880                 DELETE FROM okc_deliverables
10881                 WHERE deliverable_id = delIdTab(i);
10882                   DELETE FROM OKC_DELIVERABLES_EXT_B
10883                   WHERE  deliverable_id = delIdTab(i);
10884                   DELETE FROM OKC_DELIVERABLES_EXT_TL
10885                   WHERE  deliverable_id = delIdTab(i);
10886                 END LOOP;
10887         END IF;
10888         END IF;-- delIdTab.COUNT
10889         IF del_cur %ISOPEN THEN
10890           CLOSE del_cur ;
10891         END IF;
10892 
10893 
10894         -- Call the CDRL API to delete exhibits.
10895         IF exhibit_code_tbl.Count > 0 THEN
10896            FOR   i IN 1..exhibit_code_tbl.Count LOOP
10897             OKC_CDRL_PVT.delete_exhibit_for_cdrl (
10898             p_api_version           => 1.0,
10899             p_init_msg_list         => FND_API.G_FALSE,
10900             p_commit                => FND_API.G_FALSE,
10901             p_doc_class             =>  NULL,         -- Value will be Derived in the API
10902             p_doc_type       => p_doc_type,
10903             p_doc_id         => p_doc_id,
10904             p_doc_version    => -99,
10905             p_mode           => NULL,
10906             p_exhibit_code   => exhibit_code_tbl(i),
10907             x_msg_data              => x_msg_data,
10908             x_msg_count             => x_msg_count,
10909             x_return_status         => x_return_status,
10910             p_validate_before_delete => 'Y'
10911             ) ;
10912           --------------------------------------------
10913           IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
10914             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10915           ELSIF (x_return_status = G_RET_STS_ERROR) THEN
10916             RAISE FND_API.G_EXC_ERROR ;
10917           END IF;
10918           --------------------------------------------
10919          END LOOP;
10920          END IF;
10921 
10922 
10923         x_return_status := x_return_status;
10924        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10925           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
10926        END IF;
10927 
10928     EXCEPTION
10929     WHEN OTHERS THEN
10930         IF del_cur %ISOPEN THEN
10931           CLOSE del_cur ;
10932         END IF;
10933        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10934         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables with G_EXC_UNEXPECTED_ERROR');
10935        END IF;
10936     x_return_status := G_RET_STS_UNEXP_ERROR;
10937       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10938       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10939       END IF;
10940       FND_MSG_PUB.Count_And_Get(
10941         p_count =>  x_msg_count,
10942         p_data  =>  x_msg_data
10943         );
10944 
10945     END delete_template_deliverables;
10946 
10947 
10948 
10949     /**Invoked From: OKC_TERMS_UTIL_GRP.is_deliverable_amended
10950     1.  This function returns type of deliverables amended on a Business Document
10951     2.  Select all deliverables definitions (-99 version) for the Business Document.
10952     If deliverables exist then
10953     a.  Check each deliverable type
10954         i.  If only contractual deliverables amended then return CONTRACTUAL
10955         ii. If only internal deliverables amended then return INTERNAL
10956         iii.If both contractual and internal deliverables amended then return
10957             CONTRACTUAL_AND_INTERNAL
10958         iv.If both contractual and sourcing deliverables amended then return
10959             CONTRACTUAL_AND_SOURCING
10960         v.If both sourcing and internal deliverables amended then return
10961             SOURCING_AND_INTERNAL
10962         vi.  If sourcing deliverables are amended then return SOURCING
10963         vii.  If all deliverables are amended then return ALL
10964     3.  If no deliverables amended then return NONE
10965     4.  If error return null**/
10966 
10967 /*** added new signature bug#3192512**/
10968 
10969     FUNCTION deliverables_amended(
10970         p_api_version      IN  NUMBER,
10971         p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE,
10972 
10973         x_return_status    OUT NOCOPY VARCHAR2,
10974         x_msg_data         OUT NOCOPY VARCHAR2,
10975         x_msg_count        OUT NOCOPY NUMBER,
10976 
10977         p_doctype  IN  VARCHAR2,
10978         p_docid IN NUMBER
10979         )
10980     RETURN VARCHAR2 IS
10981     --do not consider internal deliverables inamendments.
10982     -- updated the cursor to filter internal deliverables
10983     -- updated cursor for bug#4069955
10984     CURSOR del_cur IS
10985     SELECT
10986      del.amendment_operation
10987     ,del.deliverable_type
10988     ,delType.internal_flag
10989     FROM
10990      okc_deliverables del
10991     ,okc_deliverable_types_b delType
10992     WHERE del.business_document_id = p_docid
10993     AND   del.business_document_type = p_doctype
10994     AND   del.business_document_version = -99
10995     AND   del.summary_amend_operation_code is not null
10996     --AND   deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
10997     AND   del.deliverable_type       = delType.deliverable_type_code
10998     AND   delType.internal_flag = 'N';
10999 
11000     l_del_rec  del_cur%ROWTYPE;
11001     l_amended    VARCHAR2(30):= 'NONE';
11002     l_contractual   okc_deliverables.deliverable_type%TYPE;
11003     l_internal      okc_deliverables.deliverable_type%TYPE;
11004     l_sourcing      okc_deliverables.deliverable_type%TYPE;
11005     l_api_name         CONSTANT VARCHAR2(30) := 'deliverables_amended';
11006 
11007     BEGIN
11008 
11009      --  Initialize API return status to success
11010      x_return_status := OKC_API.G_RET_STS_SUCCESS;
11011 
11012 
11013            FOR del_rec IN del_cur LOOP
11014               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11015                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.deliverables_amended :'||del_rec.deliverable_type);
11016               END IF;
11017 
11018          --Repository change to look at internal_flag in okc_deliverable_types_b
11019         If (del_rec.internal_flag = 'Y') then
11020           l_internal := del_rec.deliverable_type;
11021         Else
11022                IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
11023                  l_contractual := del_rec.deliverable_type;
11024                ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
11025                  l_sourcing := del_rec.deliverable_type;
11026       END IF;
11027               END IF;
11028 
11029            END LOOP;
11030 
11031            IF l_contractual is not null THEN
11032               l_amended := 'CONTRACTUAL';
11033                 IF l_internal is not null THEN
11034                     l_amended:= 'CONTRACTUAL_AND_INTERNAL';
11035                         IF l_sourcing is not null THEN
11036                            l_amended:= 'ALL';
11037                         END IF;
11038                 ELSIF l_internal is null THEN
11039                     IF l_sourcing is not null THEN
11040                        l_amended:= 'SOURCING_AND_CONTRACTUAL';
11041                     END IF;
11042                 END IF;
11043             ELSE
11044                 IF l_internal is not null THEN
11045                    l_amended:= 'INTERNAL';
11046                        IF l_sourcing is not null THEN
11047                           l_amended:= 'SOURCING_AND_INTERNAL';
11048                        END IF;
11049                 ELSE
11050                    IF l_sourcing is not null THEN
11051                       l_amended:= 'SOURCING';
11052                    ELSE
11053                       l_amended:= 'NONE';
11054                    END IF;
11055                 END IF;
11056             END IF;
11057 
11058 
11059             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11060                FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_amended is :'||l_amended);
11061             END IF;
11062             RETURN(l_amended);
11063 
11064    EXCEPTION
11065     WHEN OTHERS THEN
11066            IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11067                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_amended because of EXCEPTION: '||sqlerrm);
11068            END IF;
11069 
11070               IF del_cur%ISOPEN THEN
11071                  CLOSE del_cur;
11072               END IF;
11073 
11074               x_return_status := G_RET_STS_UNEXP_ERROR ;
11075 
11076               IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
11077                    FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
11078               END IF;
11079               FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
11080                  , p_count => x_msg_count
11081                  , p_data => x_msg_data );
11082 
11083               RETURN null;
11084 
11085     END; -- deliverables_amended
11086 
11087 -- This function returns the message text for the print due date message name
11088 -- bug#3272824 resolves tranlation issues with due date messages.
11089 FUNCTION getDueDateMsgText(
11090 p_relative_st_date_event_id    NUMBER
11091 ,p_relative_end_date_event_id   NUMBER
11092 ,p_relative_st_date_duration    NUMBER
11093 ,p_relative_end_date_duration    NUMBER
11094 ,p_repeating_day_of_week        VARCHAR2
11095 ,p_repeating_day_of_month       VARCHAR2
11096 ,p_repeating_duration           NUMBER
11097 ,p_print_due_date_msg_name      VARCHAR2
11098 ,p_fixed_start_date             DATE
11099 ,p_fixed_end_date                DATE
11100 )
11101 RETURN VARCHAR2 IS
11102 
11103 l_msg  varchar2(250);
11104 l_st_event                        VARCHAR2(80);
11105 l_end_event                       VARCHAR2(80);
11106 l_day_of_week                       VARCHAR2(80);
11107 l_day_of_month                       VARCHAR2(80);
11108 l_repeating_duration   number;
11109 l_api_name CONSTANT VARCHAR2(30) := 'getDueDateMsgText';
11110 
11111 
11112 
11113 cursor event_cur(x number) is
11114 select TL.meaning
11115 from okc_bus_doc_events_tl TL
11116 where TL.bus_doc_event_id = X
11117 and TL.LANGUAGE = userenv('LANG');
11118 event_rec event_cur%ROWTYPE;
11119 
11120 
11121 
11122 begin
11123 
11124 -- get event name
11125 IF p_relative_st_date_event_id is not null THEN
11126     OPEN event_cur(p_relative_st_date_event_id);
11127     FETCH event_cur INTO l_st_event;
11128     CLOSE event_cur;
11129 END IF;
11130 IF p_relative_end_date_event_id is not null THEN
11131     OPEN event_cur(p_relative_end_date_event_id);
11132     FETCH event_cur INTO l_end_event;
11133     CLOSE event_cur;
11134 END IF;
11135 
11136 -- get lookup meanings
11137 IF p_repeating_day_of_week is not null THEN
11138 select meaning into l_day_of_week
11139 from fnd_lookups
11140 where lookup_type = 'DAY_OF_WEEK'
11141 and lookup_code = p_repeating_day_of_week;
11142 END IF;
11143 
11144 IF p_repeating_day_of_month is not null THEN
11145 select meaning into l_day_of_month
11146 from fnd_lookups
11147 where lookup_type = 'OKC_DAY_OF_MONTH'
11148 and lookup_code = p_repeating_day_of_month;
11149 END IF;
11150 
11151 -- If duration is less than or equal to 1 then don't pass the token value
11152 if p_repeating_duration = 1  THEN
11153     l_repeating_duration := null;
11154 elsif p_repeating_duration = 0  THEN
11155     l_repeating_duration := null;
11156 else
11157     l_repeating_duration := p_repeating_duration;
11158 end if;
11159 
11160   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11161     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message name is : '||p_print_due_date_msg_name);
11162     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_WEEK is : '||p_repeating_day_of_week);
11163     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_MONTH is : '||p_repeating_day_of_month);
11164     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_NUM is : '||p_relative_st_date_duration);
11165     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_NUM is : '||p_relative_end_date_duration);
11166     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_EVENT is : '||l_st_event);
11167     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_EVENT is : '||l_end_event);
11168     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FREQ_NUM is : '|| l_repeating_duration);
11169     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_DATE_FIXED is : '|| p_fixed_start_date);
11170     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FIXED_END_DATE is : '|| p_fixed_end_date);
11171  END IF;
11172 -- bug#3465662 call this API if print due date msg name is not null
11173 IF p_print_due_date_msg_name IS NOT NULL THEN
11174     l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
11175                     p_app_name      =>  'OKC'
11176                     ,p_msg_name     =>  p_print_due_date_msg_name
11177                     ,p_token1       =>  'DAY_OF_WEEK'
11178                     ,p_token1_value =>  l_day_of_week
11179                     ,p_token2       =>  'DAY_OF_MONTH'
11180                     ,p_token2_value =>  l_day_of_month
11181                     ,p_token3       =>   'START_NUM'
11182                     ,p_token3_value =>  p_relative_st_date_duration
11183                     ,p_token4       =>  'END_NUM'
11184                     ,p_token4_value =>  p_relative_end_date_duration
11185                     ,p_token5       =>  'START_EVENT'
11186                     ,p_token5_value =>  l_st_event
11187                     ,p_token6       =>  'END_EVENT'
11188                     ,p_token6_value =>  l_end_event
11189                     ,p_token7       =>  'FREQ_NUM'
11190                     ,p_token7_value =>  l_repeating_duration
11191                     ,p_token8       =>  'START_DATE_FIXED'
11192                     ,p_token8_value =>  p_fixed_start_date
11193                     ,p_token9       =>  'FIXED_END_DATE'
11194                     ,p_token9_value =>  p_fixed_end_date);
11195 
11196   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11197     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message is : '|| l_msg);
11198   END IF;
11199 
11200 END IF;
11201         return(l_msg);
11202 
11203 EXCEPTION
11204 
11205 WHEN OTHERS THEN
11206 
11207   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11208     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving getDueDateMsgText with EXCEPTION: '||sqlerrm);
11209   END IF;
11210 
11211   IF event_cur%ISOPEN THEN
11212    CLOSE event_cur;
11213   END IF;
11214 
11215               RETURN ' ';
11216 end getDueDateMsgText;
11217 
11218 /***
11219 07-APR-2004 pnayani -- bug#3524864 added copy_response_deliverables API
11220 This API is invoked from OKC_TERMS_COPY_GRP.COPY_RESPONSE_DOC.
11221 Initially coded to support proxy bidding functionality in Sourcing.
11222 Copies deliverables from source response doc to target response documents (bid to bid)
11223 The procedure will query deliverables from source response
11224 document.Copies all deliverables and attachments as is on to a new response document.
11225 Parameter Details:
11226 p_source_doc_id :       Source document Id
11227 p_source_doc_type :     Source document type
11228 p_target_doc_id   :     Target document Id
11229 p_target_doc_type :     Target document Type
11230 p_target_doc_number :   Target document Number
11231 ***/
11232 
11233     PROCEDURE copy_response_deliverables (
11234         p_api_version           IN NUMBER,
11235         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
11236         p_source_doc_id             IN NUMBER,
11237         p_source_doc_type           IN VARCHAR2,
11238         p_target_doc_id             IN NUMBER,
11239         p_target_doc_type           IN VARCHAR2,
11240         p_target_doc_number         IN VARCHAR2,
11241         x_msg_data              OUT NOCOPY VARCHAR2,
11242         x_msg_count                 OUT NOCOPY NUMBER,
11243         x_return_status             OUT NOCOPY VARCHAR2)
11244     IS
11245     CURSOR del_cur IS
11246     SELECT *
11247     FROM OKC_DELIVERABLES
11248     WHERE business_document_id = p_source_doc_id
11249     AND   business_document_type = p_source_doc_type
11250     AND   recurring_del_parent_id is null;
11251     del_rec  del_cur%ROWTYPE;
11252 
11253     CURSOR del_ins_cur (X number) IS
11254     SELECT *
11255     FROM okc_deliverables
11256     WHERE business_document_id = p_source_doc_id
11257     AND   business_document_type = p_source_doc_type
11258     AND   recurring_del_parent_id = X;
11259     del_ins_rec  del_ins_cur%ROWTYPE;
11260 
11261     delRecTab           delRecTabType;
11262     delNewTab           delRecTabType;
11263     delInsTab           delRecTabType;
11264     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
11265     TYPE delIdTabType IS TABLE OF delIdRecType;
11266 
11267     CURSOR delStsHist(Y NUMBER) IS
11268     SELECT *
11269     FROM okc_del_status_history
11270     WHERE deliverable_id = Y;
11271     delStsHist_rec delStsHist%ROWTYPE;
11272     delHistTab    delHistTabType;
11273 
11274     delIdTab    delIdTabType;
11275     j PLS_INTEGER := 0;
11276     k PLS_INTEGER := 0;
11277     m PLS_INTEGER := 0;
11278     l_api_name      CONSTANT VARCHAR2(30) :='copy_response_deliverables';
11279     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
11280     l_recur_del_parent_id  NUMBER;
11281     x_errorcode NUMBER;
11282     BEGIN
11283             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11284                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11285                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_response_deliverables');
11286                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11287                 ,'100: target budoc id is:'||to_char(p_target_doc_id));
11288                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11289                 ,'100: target budoc id type:'||p_target_doc_type);
11290             END IF;
11291                 -- initialize the table type variable to strore source and target deliverble
11292                 -- ids to copy attachments.
11293                 delIdTab := delIdTabType();
11294             -- Build the deliverable definition records
11295         FOR del_rec IN del_cur LOOP
11296 
11297       k := k+1;
11298       delRecTab(k).deliverable_id := del_rec.deliverable_id;
11299       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
11300       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
11301       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
11302       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
11303       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
11304       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
11305       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
11306       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
11307       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
11308       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
11309       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
11310       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
11311       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
11312       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
11313       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
11314       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
11315       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
11316       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
11317       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
11318       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
11319       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
11320       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
11321       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
11322       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
11323       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
11324       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
11325       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
11326       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
11327       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
11328       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
11329       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
11330       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
11331       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
11332       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
11333       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
11334       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
11335       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
11336       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
11337       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
11338       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
11339       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
11340       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
11341       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
11342       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
11343       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
11344       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
11345       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
11346       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
11347       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
11348       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
11349       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
11350       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
11351       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
11352       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
11353       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
11354       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
11355       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
11356       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
11357       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
11358       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
11359       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
11360       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
11361       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
11362       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
11363       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
11364       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
11365       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
11366       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
11367       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
11368       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
11369       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
11370       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
11371       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
11372       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
11373       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
11374       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
11375       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
11376       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
11377       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
11378       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
11379       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
11380       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
11381       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
11382       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
11383       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
11384       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
11385       delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
11386              delRecTab(k).orig_system_reference_code :='COPY';
11387              delRecTab(k).orig_system_reference_id1 :=del_rec.deliverable_id;
11388              delRecTab(k).orig_system_reference_id2 :=null;
11389           -- CDRL Project
11390           delRecTab(k).del_category_code := del_rec.del_category_code;
11391           delRecTab(k).exhibit_code := del_rec.exhibit_code;
11392           delRecTab(k).data_item_number:= del_rec.data_item_number;
11393           delRecTab(k).price_group:= del_rec.price_group;
11394           delRecTab(k).estimated_price:= del_rec.estimated_price;
11395           delRecTab(k).uda_template_id:= del_rec.uda_template_id;
11396           delRecTab(k).schedule_type:= del_rec.schedule_type;
11397           -- CDRL Project
11398 
11399             END LOOP;
11400         IF del_cur %ISOPEN THEN
11401           CLOSE del_cur ;
11402         END IF;
11403                 IF delRecTab.COUNT <> 0 THEN
11404                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11405                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
11406                     END IF;
11407                     -- Build the new deliverable definition table
11408                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
11409                   j := j+1;
11410                   -- extend table type
11411                   delIdTab.extend;
11412                   delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
11413                   delNewTab(j) := delRecTab(i);
11414                   select okc_deliverable_id_s.nextval
11415                   INTO delNewTab(j).deliverable_id from dual;
11416                   delIdTab(j).del_id := delNewTab(j).deliverable_id;
11417                   -- store current_del_parent_id in local variable
11418                   --to assign it to the instances
11419                   l_recur_del_parent_id := delNewTab(j).deliverable_id;
11420                   -- assign common attributes
11421                   delNewTab(j).business_document_id := p_target_doc_id;
11422                   delNewTab(j).business_document_type := p_target_doc_type;
11423                   delNewTab(j).business_document_number := p_target_doc_number;
11424                   delNewTab(j).created_by:= Fnd_Global.User_Id;
11425                   delNewTab(j).creation_date := sysdate;
11426                   delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
11427                   delNewTab(j).last_update_date := sysdate;
11428                   delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
11429                   -- Check for instances on deliverable definition
11430                   IF delRecTab(i).recurring_yn = 'Y' THEN
11431 
11432                    --Initialize the table with 0 rows
11433                    delInsTab.DELETE;
11434              m := 0;
11435                    -- Build instances table
11436                FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
11437                m := m+1;
11438                delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
11439                delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
11440                delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
11441                delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
11442                delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
11443                delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
11444                delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
11445                delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
11446                delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
11447                delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
11448                delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
11449                delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
11450                delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
11451                delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
11452                delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
11453                delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
11454                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
11455                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
11456                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
11457                delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
11458                delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
11459                delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
11460                delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
11461                delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
11462                delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
11463                delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
11464                delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
11465                delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
11466                delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
11467                delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
11468                delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
11469                delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
11470                delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
11471                delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
11472                delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
11473                delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
11474                delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
11475                delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
11476                delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
11477                delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
11478                delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
11479                delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
11480                delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
11481                delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
11482                delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
11483                delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
11484                delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
11485                delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
11486                delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
11487                delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
11488                delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
11489                delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
11490                delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
11491                delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
11492                delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
11493                delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
11494                delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
11495                delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
11496                delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
11497                delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
11498                delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
11499                delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
11500                delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
11501                delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
11502                delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
11503                delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
11504                delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
11505                delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
11506                delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
11507                delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
11508                delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
11509                delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
11510                delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
11511                delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
11512                delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
11513                delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
11514                delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
11515                delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
11516                delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
11517                delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
11518                delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
11519                delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
11520                delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
11521                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
11522                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
11523                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
11524                delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
11525                delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
11526 
11527                delInsTab(m).orig_system_reference_code := 'COPY';
11528                delInsTab(m).orig_system_reference_id1 :=del_ins_rec.deliverable_id;
11529                delInsTab(m).orig_system_reference_id2 :=null;
11530                -- CDR PROJECT
11531                delInsTab(m).del_category_code := del_ins_rec.del_category_code;
11532                delInsTab(m).exhibit_code := del_ins_rec.exhibit_code;
11533                delInsTab(m).data_item_number:= del_ins_rec.data_item_number;
11534                delInsTab(m).price_group:= del_ins_rec.price_group;
11535                delInsTab(m).estimated_price:= del_ins_rec.estimated_price;
11536                delInsTab(m).uda_template_id:= del_ins_rec.uda_template_id;
11537                delInsTab(m).schedule_type:= del_ins_rec.schedule_type;
11538 
11539                END LOOP; --  del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id)
11540                     IF del_ins_cur %ISOPEN THEN
11541                         CLOSE del_ins_cur ;
11542                     END IF;
11543                 -- If instances exist then add them to the new deliverables table
11544                 IF delInsTab.COUNT <> 0 THEN
11545                    FOR n IN delInsTab.FIRST..delInsTab.LAST LOOP
11546                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11547                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
11548                     END IF;
11549                         j:=j+1;
11550                         -- extend table type
11551                         delIdTab.extend;
11552                         -- build the id table to copy attachments
11553                         delIdTab(j).orig_del_id := delInsTab(n).deliverable_id;
11554                         -- build new version deliverables table
11555                         delNewTab(j):= delInsTab(n);
11556                         select okc_deliverable_id_s.nextval
11557                         INTO delNewTab(j).deliverable_id from dual;
11558                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
11559                         delNewTab(j).recurring_del_parent_id :=  l_recur_del_parent_id;
11560                         -- assign common attributes
11561                         delNewTab(j).business_document_id := p_target_doc_id;
11562                         delNewTab(j).business_document_type := p_target_doc_type;
11563                         delNewTab(j).business_document_number := p_target_doc_number;
11564                         delNewTab(j).created_by:= Fnd_Global.User_Id;
11565                         delNewTab(j).creation_date := sysdate;
11566                         delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
11567                         delNewTab(j).last_update_date := sysdate;
11568                         delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
11569 
11570                     END LOOP; -- delInsTab.FIRST..delInsTab.LAST
11571                   END IF;--delInsTab.COUNT
11572 
11573 
11574                   END IF; --recurring_yn = 'Y'
11575                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11576                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab.COUNT));
11577                     END IF;
11578                 END LOOP; -- delRecTab.FIRST..delRecTab.LAST
11579                 END IF; -- delRecTab.COUNT
11580 
11581         -- loop through new table and create deliverables for the target document
11582         IF delNewTab.COUNT <> 0 THEN
11583                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
11584                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11585                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
11586                     END IF;
11587                 INSERT INTO okc_deliverables
11588                 (DELIVERABLE_ID,
11589                 BUSINESS_DOCUMENT_TYPE      ,
11590                 BUSINESS_DOCUMENT_ID        ,
11591                 BUSINESS_DOCUMENT_NUMBER    ,
11592                 DELIVERABLE_TYPE            ,
11593                 RESPONSIBLE_PARTY           ,
11594                 INTERNAL_PARTY_CONTACT_ID   ,
11595                 EXTERNAL_PARTY_CONTACT_ID   ,
11596                 DELIVERABLE_NAME            ,
11597                 DESCRIPTION                 ,
11598                 COMMENTS                    ,
11599                 DISPLAY_SEQUENCE            ,
11600                 FIXED_DUE_DATE_YN           ,
11601                 ACTUAL_DUE_DATE             ,
11602                 PRINT_DUE_DATE_MSG_NAME     ,
11603                 RECURRING_YN                ,
11604                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
11605                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
11606                 NOTIFY_PRIOR_DUE_DATE_YN    ,
11607                 NOTIFY_COMPLETED_YN         ,
11608                 NOTIFY_OVERDUE_YN           ,
11609                 NOTIFY_ESCALATION_YN        ,
11610                 NOTIFY_ESCALATION_VALUE     ,
11611                 NOTIFY_ESCALATION_UOM       ,
11612                 ESCALATION_ASSIGNEE         ,
11613                 AMENDMENT_OPERATION         ,
11614                 PRIOR_NOTIFICATION_ID       ,
11615                 AMENDMENT_NOTES             ,
11616                 COMPLETED_NOTIFICATION_ID   ,
11617                 OVERDUE_NOTIFICATION_ID     ,
11618                 ESCALATION_NOTIFICATION_ID  ,
11619                 LANGUAGE                    ,
11620                 ORIGINAL_DELIVERABLE_ID     ,
11621                 REQUESTER_ID                ,
11622                 EXTERNAL_PARTY_ID           ,
11623                 EXTERNAL_PARTY_ROLE           ,
11624                 RECURRING_DEL_PARENT_ID      ,
11625                 BUSINESS_DOCUMENT_VERSION   ,
11626                 RELATIVE_ST_DATE_DURATION   ,
11627                 RELATIVE_ST_DATE_UOM        ,
11628                 RELATIVE_ST_DATE_EVENT_ID   ,
11629                 RELATIVE_END_DATE_DURATION  ,
11630                 RELATIVE_END_DATE_UOM       ,
11631                 RELATIVE_END_DATE_EVENT_ID  ,
11632                 REPEATING_DAY_OF_MONTH      ,
11633                 REPEATING_DAY_OF_WEEK       ,
11634                 REPEATING_FREQUENCY_UOM     ,
11635                 REPEATING_DURATION          ,
11636                 FIXED_START_DATE            ,
11637                 FIXED_END_DATE              ,
11638                 MANAGE_YN                   ,
11639                 INTERNAL_PARTY_ID           ,
11640                 DELIVERABLE_STATUS          ,
11641                 STATUS_CHANGE_NOTES         ,
11642                 CREATED_BY                  ,
11643                 CREATION_DATE               ,
11644                 LAST_UPDATED_BY             ,
11645                 LAST_UPDATE_DATE            ,
11646                 LAST_UPDATE_LOGIN           ,
11647                 OBJECT_VERSION_NUMBER       ,
11648                 ATTRIBUTE_CATEGORY          ,
11649                 ATTRIBUTE1                  ,
11650                 ATTRIBUTE2                  ,
11651                 ATTRIBUTE3                  ,
11652                 ATTRIBUTE4                  ,
11653                 ATTRIBUTE5                  ,
11654                 ATTRIBUTE6                  ,
11655                 ATTRIBUTE7                  ,
11656                 ATTRIBUTE8                  ,
11657                 ATTRIBUTE9                  ,
11658                 ATTRIBUTE10                 ,
11659                 ATTRIBUTE11                 ,
11660                 ATTRIBUTE12                 ,
11661                 ATTRIBUTE13                 ,
11662                 ATTRIBUTE14                 ,
11663                 ATTRIBUTE15                 ,
11664                 DISABLE_NOTIFICATIONS_YN    ,
11665                 LAST_AMENDMENT_DATE         ,
11666                 BUSINESS_DOCUMENT_LINE_ID   ,
11667                 EXTERNAL_PARTY_SITE_ID      ,
11668                 START_EVENT_DATE            ,
11669                 END_EVENT_DATE              ,
11670                 SUMMARY_AMEND_OPERATION_CODE,
11671                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11672                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
11673                 PAY_HOLD_PRIOR_DUE_DATE_YN,
11674                 PAY_HOLD_OVERDUE_YN,
11675                 RAISE_COMPLETION_EVENT_YN,
11676                 orig_system_reference_code,
11677                 orig_system_reference_id1,
11678                 orig_system_reference_id2,
11679                 del_category_code,
11680                 exhibit_code,
11681                 data_item_number,
11682                 price_group,
11683                 estimated_price,
11684                 uda_template_id,
11685                 schedule_type
11686                 )
11687                 VALUES (
11688                 delNewTab(i).DELIVERABLE_ID,
11689                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
11690                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
11691                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
11692                 delNewTab(i).DELIVERABLE_TYPE            ,
11693                 delNewTab(i).RESPONSIBLE_PARTY           ,
11694                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
11695                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
11696                 delNewTab(i).DELIVERABLE_NAME            ,
11697                 delNewTab(i).DESCRIPTION                 ,
11698                 delNewTab(i).COMMENTS                    ,
11699                 delNewTab(i).DISPLAY_SEQUENCE            ,
11700                 delNewTab(i).FIXED_DUE_DATE_YN           ,
11701                 delNewTab(i).ACTUAL_DUE_DATE             ,
11702                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
11703                 delNewTab(i).RECURRING_YN                ,
11704                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
11705                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
11706                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
11707                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
11708                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
11709                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
11710                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
11711                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
11712                 delNewTab(i).ESCALATION_ASSIGNEE         ,
11713                 delNewTab(i).AMENDMENT_OPERATION         ,
11714                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
11715                 delNewTab(i).AMENDMENT_NOTES             ,
11716                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
11717                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
11718                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
11719                 delNewTab(i).LANGUAGE                    ,
11720                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
11721                 delNewTab(i).REQUESTER_ID                ,
11722                 delNewTab(i).EXTERNAL_PARTY_ID           ,
11723                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
11724                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
11725                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
11726                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
11727                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
11728                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
11729                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
11730                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
11731                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
11732                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
11733                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
11734                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
11735                 delNewTab(i).REPEATING_DURATION          ,
11736                 delNewTab(i).FIXED_START_DATE            ,
11737                 delNewTab(i).FIXED_END_DATE              ,
11738                 delNewTab(i).MANAGE_YN                   ,
11739                 delNewTab(i).INTERNAL_PARTY_ID           ,
11740                 delNewTab(i).DELIVERABLE_STATUS          ,
11741                 delNewTab(i).STATUS_CHANGE_NOTES         ,
11742                 delNewTab(i).CREATED_BY                  ,
11743                 delNewTab(i).CREATION_DATE               ,
11744                 delNewTab(i).LAST_UPDATED_BY             ,
11745                 delNewTab(i).LAST_UPDATE_DATE            ,
11746                 delNewTab(i).LAST_UPDATE_LOGIN           ,
11747                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
11748                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
11749                 delNewTab(i).ATTRIBUTE1                  ,
11750                 delNewTab(i).ATTRIBUTE2                  ,
11751                 delNewTab(i).ATTRIBUTE3                  ,
11752                 delNewTab(i).ATTRIBUTE4                  ,
11753                 delNewTab(i).ATTRIBUTE5                  ,
11754                 delNewTab(i).ATTRIBUTE6                  ,
11755                 delNewTab(i).ATTRIBUTE7                  ,
11756                 delNewTab(i).ATTRIBUTE8                  ,
11757                 delNewTab(i).ATTRIBUTE9                  ,
11758                 delNewTab(i).ATTRIBUTE10                 ,
11759                 delNewTab(i).ATTRIBUTE11                 ,
11760                 delNewTab(i).ATTRIBUTE12                 ,
11761                 delNewTab(i).ATTRIBUTE13                 ,
11762                 delNewTab(i).ATTRIBUTE14                 ,
11763                 delNewTab(i).ATTRIBUTE15                 ,
11764                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
11765                 delNewTab(i).LAST_AMENDMENT_DATE         ,
11766                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
11767                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
11768                 delNewTab(i).START_EVENT_DATE            ,
11769                 delNewTab(i).END_EVENT_DATE              ,
11770                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
11771                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11772                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
11773                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
11774                 delNewTab(i).PAY_HOLD_OVERDUE_YN,
11775                 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
11776                 delNewTab(i).orig_system_reference_code,
11777                 delNewTab(i).orig_system_reference_id1,
11778                 delNewTab(i).orig_system_reference_id2,
11779                 delNewTab(i).del_category_code,
11780                 delNewTab(i).exhibit_code,
11781                 delNewTab(i).data_item_number,
11782                 delNewTab(i).price_group,
11783                 delNewTab(i).estimated_price,
11784                 delNewTab(i).uda_template_id,
11785                 delNewTab(i).schedule_type
11786                 );
11787                 copy_deliverable_udas(
11788                       delNewTab(i).orig_system_reference_id1,
11789                       delNewTab(i).DELIVERABLE_ID,
11790                       x_return_status,
11791                       x_msg_count,
11792                       x_msg_data,
11793                       x_errorcode
11794                       );
11795                 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11796 	                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11797                 END IF;
11798                 END LOOP;
11799                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11800                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Creating Deliverables ');
11801                END IF;
11802         END IF; -- delNewTab.COUNT <> 0
11803                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11804                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
11805                END IF;
11806 
11807         -- loop through deliverable ids table and copy existing attachments and status history
11808         -- from old deliverable to new deliverable
11809           IF delIdTab.COUNT <> 0 THEN
11810           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
11811 
11812                 FOR delStsHist_rec in delStsHist(delIdTab(i).orig_del_id) LOOP
11813                 --insert into status history
11814                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11815                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: status history for Deliverable Id :'||to_char(delIdTab(i).del_id));
11816                 END IF;
11817                 INSERT INTO okc_del_status_history (
11818                 deliverable_id,
11819                 deliverable_status,
11820                 status_changed_by,
11821                 status_change_date,
11822                 status_change_notes,
11823                 object_version_number,
11824                 created_by,
11825                 creation_date,
11826                 last_updated_by,
11827                 last_update_date,
11828                 last_update_login)
11829                 VALUES(
11830                 delIdTab(i).del_id,
11831                 delStsHist_rec.DELIVERABLE_STATUS,
11832                 delStsHist_rec.STATUS_CHANGED_BY,
11833                 delStsHist_rec.STATUS_CHANGE_DATE,
11834                 delStsHist_rec.STATUS_CHANGE_NOTES,
11835                 delStsHist_rec.OBJECT_VERSION_NUMBER,
11836                 FND_GLOBAL.User_id,
11837                 sysdate,
11838                 FND_GLOBAL.User_id,
11839                 sysdate,
11840                 Fnd_Global.Login_Id);
11841                 END LOOP; -- delStsHist                                                                                                          END LOOP;
11842                 IF delStsHist%ISOPEN THEN
11843                 CLOSE  delStsHist;
11844                 END IF;
11845 
11846 
11847             -- check if attachments exists
11848             IF attachment_exists(p_entity_name => G_ENTITY_NAME
11849                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
11850 
11851                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11852                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
11853                     END IF;
11854                     -- copy attachments
11855                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
11856                     fnd_attached_documents2_pkg.copy_attachments(
11857                         X_from_entity_name =>  G_ENTITY_NAME,
11858                         X_from_pk1_value   =>  delIdTab(i).orig_del_id,
11859                         X_to_entity_name   =>  G_ENTITY_NAME,
11860                         X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
11861                         X_CREATED_BY       =>  FND_GLOBAL.User_id,
11862                         X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
11863                         );
11864                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11865                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Copy Deliverable Attachments ');
11866                     END IF;
11867             END IF; --attachment_exists
11868           END LOOP; -- delIdTab.FIRST..delIdTab.LAST
11869           END IF; -- delIdTab.COUNT
11870 
11871         IF del_cur %ISOPEN THEN
11872           CLOSE del_cur ;
11873         END IF;
11874         x_return_status := l_return_status;
11875             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11876                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':leaving ');
11877             END IF;
11878     EXCEPTION
11879     WHEN FND_API.G_EXC_ERROR THEN
11880             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11881                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR: '||
11882                 substr(sqlerrm,1,200));
11883             END IF;
11884         IF del_cur %ISOPEN THEN
11885           CLOSE del_cur ;
11886         END IF;
11887         IF delStsHist%ISOPEN THEN
11888             CLOSE  delStsHist;
11889         END IF;
11890         IF del_ins_cur %ISOPEN THEN
11891            CLOSE del_ins_cur ;
11892         END IF;
11893     x_return_status := G_RET_STS_ERROR;
11894       FND_MSG_PUB.Count_And_Get(
11895         p_count =>  x_msg_count,
11896         p_data  =>  x_msg_data
11897         );
11898 
11899     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11900             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11901                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
11902                 ,'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
11903             END IF;
11904         IF del_cur %ISOPEN THEN
11905           CLOSE del_cur ;
11906         END IF;
11907         IF delStsHist%ISOPEN THEN
11908           CLOSE  delStsHist;
11909         END IF;
11910         IF del_ins_cur %ISOPEN THEN
11911           CLOSE del_ins_cur ;
11912         END IF;
11913       x_return_status := G_RET_STS_UNEXP_ERROR;
11914       FND_MSG_PUB.Count_And_Get(
11915         p_count =>  x_msg_count,
11916         p_data  =>  x_msg_data
11917         );
11918 
11919     WHEN OTHERS THEN
11920             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11921                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,
11922                 'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
11923             END IF;
11924         IF del_cur %ISOPEN THEN
11925           CLOSE del_cur ;
11926         END IF;
11927         IF delStsHist%ISOPEN THEN
11928           CLOSE  delStsHist;
11929         END IF;
11930         IF del_ins_cur %ISOPEN THEN
11931           CLOSE del_ins_cur ;
11932         END IF;
11933     x_return_status := G_RET_STS_UNEXP_ERROR;
11934       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11935          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
11936       END IF;
11937       FND_MSG_PUB.Count_And_Get(
11938         p_count =>  x_msg_count,
11939         p_data  =>  x_msg_data
11940         );
11941 
11942     END copy_response_deliverables;
11943 
11944 
11945     -- Creates status history for a given deliverable status history table
11946     PROCEDURE create_del_status_history(
11947         p_api_version       IN NUMBER,
11948         p_init_msg_list     IN VARCHAR2,
11949         p_del_st_hist_tab   IN delHistTabType,
11950         x_msg_data      OUT NOCOPY  VARCHAR2,
11951         x_msg_count     OUT NOCOPY  NUMBER,
11952         x_return_status OUT NOCOPY  VARCHAR2)
11953     IS
11954 
11955     l_api_name      CONSTANT VARCHAR2(30) :='create_del_status_history';
11956     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
11957     l_msg_count       NUMBER;
11958     l_msg_data        VARCHAR2(1000);
11959     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
11960     j PLS_INTEGER := 0;
11961 
11962     BEGIN
11963 
11964           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11965             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
11966           END IF;
11967 
11968           IF p_del_st_hist_tab.count > 0 THEN
11969               FOR i IN p_del_st_hist_tab.FIRST..p_del_st_hist_tab.LAST LOOP
11970                         INSERT INTO okc_del_status_history
11971                         (deliverable_id,
11972                         deliverable_status,
11973                         STATUS_CHANGED_BY,
11974                         status_change_date,
11975                         status_change_notes,
11976                         object_version_number,
11977                         created_by,
11978                         creation_date,
11979                         last_updated_by,
11980                         last_update_date,
11981                         last_update_login)
11982                         VALUES (p_del_st_hist_tab(i).DELIVERABLE_ID
11983                         ,p_del_st_hist_tab(i).DELIVERABLE_STATUS
11984                         ,p_del_st_hist_tab(i).STATUS_CHANGED_BY
11985                         ,p_del_st_hist_tab(i).STATUS_CHANGE_DATE
11986                         ,p_del_st_hist_tab(i).STATUS_CHANGE_NOTES
11987                         ,p_del_st_hist_tab(i).OBJECT_VERSION_NUMBER
11988                         ,p_del_st_hist_tab(i).CREATED_BY
11989                         ,p_del_st_hist_tab(i).CREATION_DATE
11990                         ,p_del_st_hist_tab(i).LAST_UPDATED_BY
11991                         ,p_del_st_hist_tab(i).LAST_UPDATE_DATE
11992                         ,p_del_st_hist_tab(i).LAST_UPDATE_LOGIN
11993                         );
11994               END LOOP;
11995           END IF;
11996 
11997           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11998             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
11999           END IF;
12000           x_return_status := l_return_status;
12001     EXCEPTION
12002     WHEN FND_API.G_EXC_ERROR THEN
12003           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12004             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
12005           END IF;
12006     x_return_status := G_RET_STS_ERROR;
12007       FND_MSG_PUB.Count_And_Get(
12008         p_count =>  x_msg_count,
12009         p_data  =>  x_msg_data
12010         );
12011 
12012     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12013           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12014             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
12015           END IF;
12016     x_return_status := G_RET_STS_UNEXP_ERROR;
12017       FND_MSG_PUB.Count_And_Get(
12018         p_count =>  x_msg_count,
12019         p_data  =>  x_msg_data
12020         );
12021 
12022     WHEN OTHERS THEN
12023           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12024             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
12025           END IF;
12026     x_return_status := G_RET_STS_UNEXP_ERROR;
12027       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN                                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12028       END IF;
12029       FND_MSG_PUB.Count_And_Get(
12030         p_count =>  x_msg_count,
12031         p_data  =>  x_msg_data
12032         );
12033     END create_del_status_history;
12034 
12035 
12036 
12037 /**
12038 3635916 MODIFYING DELIVERABLE DOES NOT REMOVE RELATED CLAUSE
12039 FROM AMENDMENT SUMMARY
12040 This API will be invoked by
12041 OKC_TERMS_UTIL_PVT.deliverable_amendment_exists()
12042 Parameter Details:
12043 p_bus_doc_id :       document Id
12044 p_bus_doc_type :     document type
12045 p_variable_code:     deliverable variable code
12046 return value is Y or N based on the matching of deliverable
12047 to the variable.
12048 ***/
12049 FUNCTION deliverable_amendment_exists (
12050 p_api_version           IN NUMBER,
12051 p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
12052 p_bus_doc_type          IN VARCHAR2,
12053 p_bus_doc_id            IN NUMBER,
12054 p_variable_code         IN VARCHAR2,
12055 x_msg_data              OUT NOCOPY VARCHAR2,
12056 x_msg_count             OUT NOCOPY NUMBER,
12057 x_return_status         OUT NOCOPY VARCHAR2
12058 )
12059 RETURN VARCHAR2
12060 IS
12061 
12062 l_api_version   CONSTANT NUMBER := 1;
12063 l_api_name      CONSTANT VARCHAR2(30) := 'deliverable_amendment_exists ';
12064 -- removed reference to docClass in the query bug#4069955
12065 CURSOR del_cur
12066 IS
12067 SELECT
12068  del.deliverable_type deliverable_type
12069 ,del.responsible_party responsible_party
12070 from
12071  okc_deliverables del
12072 ,okc_deliverable_types_b delType
12073 where del.business_document_type = p_bus_doc_type
12074 and   del.business_document_id = p_bus_doc_id
12075 and   del.business_document_version = -99
12076 and   del.summary_amend_operation_code is not null
12077 and   del.deliverable_type = delType.deliverable_type_code
12078 and   delType.internal_flag = 'N';
12079 
12080 del_rec  del_cur%ROWTYPE;
12081 
12082 l_return_val  VARCHAR2(1);
12083 
12084 
12085 
12086 
12087 BEGIN
12088 
12089     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12090       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
12091     END IF;
12092 
12093     -- Standard call to check for call compatibility.
12094     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
12095        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12096     END IF;
12097 
12098     -- Initialize message list if p_init_msg_list is set to TRUE.
12099     IF FND_API.to_Boolean( p_init_msg_list ) THEN
12100        FND_MSG_PUB.initialize;
12101     END IF;
12102 
12103     --  Initialize API return status to success
12104     x_return_status := G_RET_STS_SUCCESS;
12105 
12106 
12107     l_return_val := 'N';
12108     -- loop through the amended deliverables and check if they match
12109     -- the variable_code. Return Y if they match else return N.
12110     FOR del_rec IN del_cur LOOP
12111         IF p_variable_code = 'EXTERNAL_SOURCING_DEL' OR
12112            p_variable_code = 'ALL_SOURCING_DEL' THEN
12113 
12114            IF del_rec.deliverable_type = 'SOURCING' THEN
12115                l_return_val := 'Y';
12116            END IF;
12117 
12118         END IF;
12119 
12120         IF p_variable_code = 'EXTERNAL_CONTRACTUAL_DEL' THEN
12121            IF del_rec.responsible_party = 'SUPPLIER_ORG' AND
12122               del_rec.deliverable_type = 'CONTRACTUAL' THEN
12123                 l_return_val := 'Y';
12124            END IF;
12125         ELSIF p_variable_code = 'INTERNAL_CONTRACTUAL_DEL' THEN
12126            IF del_rec.responsible_party = 'INTERNAL_ORG' AND
12127               del_rec.deliverable_type = 'CONTRACTUAL' THEN
12128                 l_return_val := 'Y';
12129            END IF;
12130         ELSIF p_variable_code = 'ALL_CONTRACTUAL_DEL' THEN
12131 
12132            IF del_rec.deliverable_type = 'CONTRACTUAL' THEN
12133 
12134                l_return_val := 'Y';
12135 
12136            END IF;
12137 
12138         END IF;
12139 
12140         IF l_return_val = 'Y' THEN
12141           RETURN(l_return_val);
12142         END IF;
12143 
12144     END LOOP;
12145   IF del_cur%ISOPEN THEN
12146      CLOSE del_cur;
12147   END IF;
12148 
12149         RETURN(l_return_val);
12150 
12151 EXCEPTION
12152 
12153 WHEN OTHERS THEN
12154   IF del_cur%ISOPEN THEN
12155      CLOSE del_cur;
12156   END IF;
12157 
12158   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12159     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
12160     G_PKG_NAME ||'.'||l_api_name);
12161   END IF;
12162   x_return_status := G_RET_STS_UNEXP_ERROR;
12163   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12164      FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12165   END IF;
12166   FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
12167                             p_data  =>  x_msg_data);
12168 
12169         RETURN(l_return_val);
12170 END deliverable_amendment_exists;
12171 
12172 
12173 
12174 /***
12175 Function get_party_name
12176 This API will be invoked by the Create/Update/ViewOnly Deliverable pages to display the
12177 name for an External Party. The External Party could be VENDOR_ID from PO_VENDORS or
12178 PARTY_ID from HZ_PARTIES
12179 Parameter Details:
12180 p_external_party_id: Unique Identifier from PO_VENDORS or HZ_PARTIES
12181 p_external_party_role: Resp_Party_Code from OKC_RESP_PARTIES
12182 24-FEB-2005  pnayani -- bug#4201738 updated get_party_name to return null
12183 ***/
12184 FUNCTION get_party_name(
12185 p_external_party_id          IN  NUMBER,
12186 p_external_party_role        IN  VARCHAR2) RETURN VARCHAR2 IS
12187 
12188 CURSOR get_vendor_name IS
12189 SELECT vendor_name
12190 from po_vendors
12191 where vendor_id = p_external_party_id;
12192 
12193 CURSOR get_party_name IS
12194 SELECT party_name
12195 from hz_parties
12196 where party_id = p_external_party_id;
12197 
12198 l_api_name      CONSTANT VARCHAR2(30) := 'get_party_name';
12199 l_party_name VARCHAR2(360);
12200 
12201 Begin
12202 
12203     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12204       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
12205     END IF;
12206 
12207  l_party_name := NULL;
12208 IF p_external_party_id is not null AND p_external_party_role is not null THEN
12209     If p_external_party_role = 'SUPPLIER_ORG' then
12210         OPEN get_vendor_name;
12211         FETCH get_vendor_name INTO l_party_name;
12212         CLOSE get_vendor_name;
12213     Else
12214         OPEN get_party_name;
12215         FETCH get_party_name INTO l_party_name;
12216         CLOSE get_party_name;
12217     End If;
12218 
12219 END IF; -- p_external_party_id is not null
12220     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12221       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: party name is :'||l_party_name);
12222     END IF;
12223 
12224 RETURN l_party_name;
12225 
12226 EXCEPTION
12227  WHEN OTHERS THEN
12228  IF get_vendor_name%ISOPEN THEN
12229      CLOSE get_vendor_name;
12230  END IF;
12231  IF get_party_name%ISOPEN THEN
12232      CLOSE get_party_name;
12233  END IF;
12234  l_party_name := NULL;
12235   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12236     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
12237     G_PKG_NAME ||'.'||l_api_name);
12238   END IF;
12239 
12240  RETURN l_party_name;
12241 
12242 End get_party_name;
12243 
12244 /**************************/
12245 
12246 
12247     -- bug#4075168 New API for Template Revision
12248     -- bug#4083525 New param p_copy_deliverables
12249     PROCEDURE CopyDelForTemplateRevision(
12250         p_api_version           IN NUMBER,
12251         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
12252         p_source_doc_id             IN NUMBER,
12253         p_source_doc_type           IN VARCHAR2,
12254         p_target_doc_id             IN NUMBER,
12255         p_target_doc_type           IN VARCHAR2,
12256         p_target_doc_number         IN VARCHAR2,
12257         p_copy_del_attachments_yn   IN VARCHAR2 default 'Y',
12258         x_msg_data              OUT NOCOPY VARCHAR2,
12259         x_msg_count                 OUT NOCOPY NUMBER,
12260         x_return_status             OUT NOCOPY VARCHAR2) IS
12261 
12262     CURSOR del_cur IS
12263     SELECT *
12264     FROM OKC_DELIVERABLES
12265     WHERE business_document_id = p_source_doc_id
12266     AND   business_document_version = -99
12267     AND   business_document_type = p_source_doc_type
12268     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
12269     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
12270     AND   recurring_del_parent_id is null;
12271     delRecTab           delRecTabType;
12272     delNewTab           delRecTabType;
12273     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
12274     TYPE delIdTabType IS TABLE OF delIdRecType;
12275     delIdTab    delIdTabType;
12276     j PLS_INTEGER := 0;
12277     k PLS_INTEGER := 0;
12278     l_api_name      CONSTANT VARCHAR2(30) :='CopyDelForTemplateRevision';
12279     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
12280     l_deliverable_id    NUMBER;
12281     l_from_pk1_value    VARCHAR2(100);
12282     l_result            BOOLEAN;
12283     l_copy              VARCHAR2(1) := 'N';
12284     l_copy_attachments  VARCHAR2(1) := 'N';
12285     x_errorcode NUMBER;
12286 
12287     BEGIN
12288 
12289             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12290                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
12291                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
12292                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
12293             END IF;
12294                -- initialize the table type variable
12295                 delIdTab := delIdTabType();
12296 
12297             FOR del_rec IN del_cur LOOP
12298 
12299             k := k+1;
12300             delRecTab(k).deliverable_id := del_rec.deliverable_id;
12301             delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
12302             delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
12303             delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
12304             delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
12305             delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
12306             delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
12307             delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
12308             delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
12309             delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
12310             delRecTab(k).COMMENTS:= del_rec.COMMENTS;
12311             delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
12312             delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
12313             delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
12314             delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
12315             delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
12316             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
12317             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
12318             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
12319             delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
12320             delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
12321             delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
12322             delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
12323             delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
12324             delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
12325             delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
12326             delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
12327             delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
12328             delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
12329             delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
12330             delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
12331             delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
12332             delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
12333             delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
12334             delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
12335       delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
12336             delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
12337             delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
12338             delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
12339             delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
12340             delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
12341             delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
12342             delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
12343             delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
12344             delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
12345             delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
12346             delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
12347             delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
12348             delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
12349             delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
12350             delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
12351             delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
12352             delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
12353             delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
12354             delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
12355             delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
12356             delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
12357             delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
12358             delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
12359             delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
12360             delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
12361             delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
12362             delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
12363             delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
12364             delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
12365             delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
12366             delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
12367             delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
12368             delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
12369             delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
12370             delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
12371             delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
12372             delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
12373             delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
12374             delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
12375             delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
12376             delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
12377             delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
12378             delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
12379             delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
12380             delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
12381             delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
12382             delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
12383             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
12384             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
12385             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
12386             delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
12387             delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
12388             delRecTab(k).del_category_code := del_rec.del_category_code;
12389                          /*exhibit_code,
12390                          data_item_number,
12391                          price_group,
12392                          estimated_price
12393                          Not required as these attribute does not appear on the template
12394                          */
12395             delRecTab(k).uda_template_id := del_rec.uda_template_id;
12396             delRecTab(k).schedule_type := del_rec.schedule_type;
12397             END LOOP;
12398         IF del_cur %ISOPEN THEN
12399           CLOSE del_cur ;
12400         END IF;
12401         IF p_source_doc_type = 'TEMPLATE' THEN
12402             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12403                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
12404             END IF;
12405             -- copy from template to template
12406             IF p_target_doc_type = 'TEMPLATE' THEN
12407             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12408                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
12409             END IF;
12410 
12411             IF delRecTab.COUNT <> 0 THEN
12412               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12413                    FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab Count :'||to_char(delRecTab.COUNT));
12414               END IF;
12415                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
12416                     j := j+1;
12417                     -- extend table type
12418                     delIdTab.extend;
12419                     delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
12420                     delNewTab(j) := delRecTab(i);
12421                     select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
12422                     delIdTab(j).del_id := delNewTab(j).deliverable_id;
12423                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12424                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
12425                     END IF;
12426                     delNewTab(j).business_document_id := p_target_doc_id;
12427                     delNewTab(j).business_document_type := p_target_doc_type;
12428                     delNewTab(j).business_document_number := p_target_doc_number;
12429                     delNewTab(j).business_document_version := -99;
12430                     delNewTab(j).created_by:= Fnd_Global.User_Id;
12431                     delNewTab(j).creation_date := sysdate;
12432                     delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
12433                     delNewTab(j).last_update_date := sysdate;
12434                     delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
12435 
12436                 END LOOP;
12437         -- bug#4083525 CopyDelForTemplateRevision
12438         IF delNewTab.COUNT <> 0 THEN
12439                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
12440                 INSERT INTO okc_deliverables
12441                 (DELIVERABLE_ID,
12442                 BUSINESS_DOCUMENT_TYPE      ,
12443                 BUSINESS_DOCUMENT_ID        ,
12444                 BUSINESS_DOCUMENT_NUMBER    ,
12445                 DELIVERABLE_TYPE            ,
12446                 RESPONSIBLE_PARTY           ,
12447                 INTERNAL_PARTY_CONTACT_ID   ,
12448                 EXTERNAL_PARTY_CONTACT_ID   ,
12449                 DELIVERABLE_NAME            ,
12450                 DESCRIPTION                 ,
12451                 COMMENTS                    ,
12452                 DISPLAY_SEQUENCE            ,
12453                 FIXED_DUE_DATE_YN           ,
12454                 ACTUAL_DUE_DATE             ,
12455                 PRINT_DUE_DATE_MSG_NAME     ,
12456                 RECURRING_YN                ,
12457                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
12458                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
12459                 NOTIFY_PRIOR_DUE_DATE_YN    ,
12460                 NOTIFY_COMPLETED_YN         ,
12461                 NOTIFY_OVERDUE_YN           ,
12462                 NOTIFY_ESCALATION_YN        ,
12463                 NOTIFY_ESCALATION_VALUE     ,
12464                 NOTIFY_ESCALATION_UOM       ,
12465                 ESCALATION_ASSIGNEE         ,
12466                 AMENDMENT_OPERATION         ,
12467                 PRIOR_NOTIFICATION_ID       ,
12468                 AMENDMENT_NOTES             ,
12469                 COMPLETED_NOTIFICATION_ID   ,
12470                 OVERDUE_NOTIFICATION_ID     ,
12471                 ESCALATION_NOTIFICATION_ID  ,
12472                 LANGUAGE                    ,
12473                 ORIGINAL_DELIVERABLE_ID     ,
12474                 REQUESTER_ID                ,
12475                 EXTERNAL_PARTY_ID           ,
12476                 EXTERNAL_PARTY_ROLE         ,
12477                 RECURRING_DEL_PARENT_ID     ,
12478                 BUSINESS_DOCUMENT_VERSION   ,
12479                 RELATIVE_ST_DATE_DURATION   ,
12480                 RELATIVE_ST_DATE_UOM        ,
12481                 RELATIVE_ST_DATE_EVENT_ID   ,
12482                 RELATIVE_END_DATE_DURATION  ,
12483                 RELATIVE_END_DATE_UOM       ,
12484                 RELATIVE_END_DATE_EVENT_ID  ,
12485                 REPEATING_DAY_OF_MONTH      ,
12486                 REPEATING_DAY_OF_WEEK       ,
12487                 REPEATING_FREQUENCY_UOM     ,
12488                 REPEATING_DURATION          ,
12489                 FIXED_START_DATE            ,
12490                 FIXED_END_DATE              ,
12491                 MANAGE_YN                   ,
12492                 INTERNAL_PARTY_ID           ,
12493                 DELIVERABLE_STATUS          ,
12494                 STATUS_CHANGE_NOTES         ,
12495                 CREATED_BY                  ,
12496                 CREATION_DATE               ,
12497                 LAST_UPDATED_BY             ,
12498                 LAST_UPDATE_DATE            ,
12499                 LAST_UPDATE_LOGIN           ,
12500                 OBJECT_VERSION_NUMBER       ,
12501                 ATTRIBUTE_CATEGORY          ,
12502                 ATTRIBUTE1                  ,
12503                 ATTRIBUTE2                  ,
12504                 ATTRIBUTE3                  ,
12505                 ATTRIBUTE4                  ,
12506                 ATTRIBUTE5                  ,
12507                 ATTRIBUTE6                  ,
12508                 ATTRIBUTE7                  ,
12509                 ATTRIBUTE8                  ,
12510                 ATTRIBUTE9                  ,
12511                 ATTRIBUTE10                 ,
12512                 ATTRIBUTE11                 ,
12513                 ATTRIBUTE12                 ,
12514                 ATTRIBUTE13                 ,
12515                ATTRIBUTE14                 ,
12516                 ATTRIBUTE15                 ,
12517                 DISABLE_NOTIFICATIONS_YN    ,
12518                 LAST_AMENDMENT_DATE         ,
12519                 BUSINESS_DOCUMENT_LINE_ID   ,
12520                 EXTERNAL_PARTY_SITE_ID      ,
12521                 START_EVENT_DATE            ,
12522                 END_EVENT_DATE              ,
12523                 SUMMARY_AMEND_OPERATION_CODE,
12524                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
12525                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
12526                 PAY_HOLD_PRIOR_DUE_DATE_YN,
12527                 PAY_HOLD_OVERDUE_YN,
12528                 RAISE_COMPLETION_EVENT_YN,
12529                 del_category_code,
12530                 uda_template_id,
12531                 schedule_type
12532                 )
12533                 VALUES (
12534                 delNewTab(i).DELIVERABLE_ID,
12535                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
12536                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
12537                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
12538                 delNewTab(i).DELIVERABLE_TYPE            ,
12539                 delNewTab(i).RESPONSIBLE_PARTY           ,
12540                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
12541                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
12542                 delNewTab(i).DELIVERABLE_NAME            ,
12543                 delNewTab(i).DESCRIPTION                 ,
12544                 delNewTab(i).COMMENTS                    ,
12545                 delNewTab(i).DISPLAY_SEQUENCE            ,
12546                 delNewTab(i).FIXED_DUE_DATE_YN           ,
12547                 delNewTab(i).ACTUAL_DUE_DATE             ,
12548                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
12549                 delNewTab(i).RECURRING_YN                ,
12550                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
12551                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
12552                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
12553                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
12554                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
12555                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
12556                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
12557                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
12558                 delNewTab(i).ESCALATION_ASSIGNEE         ,
12559                 delNewTab(i).AMENDMENT_OPERATION         ,
12560                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
12561                 delNewTab(i).AMENDMENT_NOTES             ,
12562                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
12563                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
12564                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
12565                 delNewTab(i).LANGUAGE                    ,
12566                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
12567                 delNewTab(i).REQUESTER_ID                ,
12568                 delNewTab(i).EXTERNAL_PARTY_ID           ,
12569                 delNewTab(i).EXTERNAL_PARTY_ROLE         ,
12570                 delNewTab(i).RECURRING_DEL_PARENT_ID     ,
12571                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
12572                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
12573                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
12574                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
12575                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
12576                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
12577                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
12578                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
12579                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
12580                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
12581                 delNewTab(i).REPEATING_DURATION          ,
12582                 delNewTab(i).FIXED_START_DATE            ,
12583                 delNewTab(i).FIXED_END_DATE              ,
12584                 delNewTab(i).MANAGE_YN                   ,
12585                 delNewTab(i).INTERNAL_PARTY_ID           ,
12586                 delNewTab(i).DELIVERABLE_STATUS          ,
12587                 delNewTab(i).STATUS_CHANGE_NOTES         ,
12588                 delNewTab(i).CREATED_BY                  ,
12589                 delNewTab(i).CREATION_DATE               ,
12590                 delNewTab(i).LAST_UPDATED_BY             ,
12591                 delNewTab(i).LAST_UPDATE_DATE            ,
12592                 delNewTab(i).LAST_UPDATE_LOGIN           ,
12593                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
12594                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
12595                 delNewTab(i).ATTRIBUTE1                  ,
12596                 delNewTab(i).ATTRIBUTE2                  ,
12597                 delNewTab(i).ATTRIBUTE3                  ,
12598                 delNewTab(i).ATTRIBUTE4                  ,
12599                 delNewTab(i).ATTRIBUTE5                  ,
12600                 delNewTab(i).ATTRIBUTE6                  ,
12601                 delNewTab(i).ATTRIBUTE7                  ,
12602                 delNewTab(i).ATTRIBUTE8                  ,
12603                 delNewTab(i).ATTRIBUTE9                  ,
12604                 delNewTab(i).ATTRIBUTE10                 ,
12605                 delNewTab(i).ATTRIBUTE11                 ,
12606                 delNewTab(i).ATTRIBUTE12                 ,
12607                 delNewTab(i).ATTRIBUTE13                 ,
12608                 delNewTab(i).ATTRIBUTE14                 ,
12609                 delNewTab(i).ATTRIBUTE15                 ,
12610                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
12611                 delNewTab(i).LAST_AMENDMENT_DATE         ,
12612                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
12613                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
12614                 delNewTab(i).START_EVENT_DATE            ,
12615                 delNewTab(i).END_EVENT_DATE              ,
12616                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
12617                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
12618                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
12619                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
12620                 delNewTab(i).PAY_HOLD_OVERDUE_YN,
12621                 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
12622                 delNewTab(i).del_category_code,
12623                 delNewTab(i).uda_template_id,
12624                 delNewTab(i).schedule_type
12625                 );
12626                   copy_deliverable_udas(
12627                         delNewTab(i).ORIGINAL_DELIVERABLE_ID,
12628                         delNewTab(i).DELIVERABLE_ID,
12629                         x_return_status,
12630                         x_msg_count,
12631                         x_msg_data,
12632                         x_errorcode
12633                         );
12634                   if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12635 	                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12636                   END IF;
12637                 END LOOP;
12638                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12639                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12640                  '100: Done Creating Deliverables ');
12641                END IF;
12642                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12643                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12644                  '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
12645                END IF;
12646 
12647         -- copy any existing attachments if allowed
12648         IF p_copy_del_attachments_yn = 'Y' THEN
12649 
12650           IF delIdTab.COUNT <> 0 THEN
12651           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
12652             -- check if attachments exists
12653             IF attachment_exists(p_entity_name => G_ENTITY_NAME
12654                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
12655 
12656                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12657                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12658                  '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
12659                END IF;
12660               -- copy attachments
12661               -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
12662               fnd_attached_documents2_pkg.copy_attachments(
12663                   X_from_entity_name =>  G_ENTITY_NAME,
12664                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
12665                   X_to_entity_name   =>  G_ENTITY_NAME,
12666                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
12667                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
12668                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
12669                   );
12670                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12671                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12672                  '100: Done Copy Deliverable Attachments ');
12673                END IF;
12674             END IF;
12675           END LOOP;
12676           END IF;-- delIdTab.COUNT <> 0 THEN
12677         END IF; -- p_copy_del_attachments_yn = 'Y'
12678         END IF; -- delNewTab.COUNT <> 0 THEN
12679         -- bug#4083525 CopyDelForTemplateRevision
12680        END IF;-- delRecTab.count
12681        END IF; -- p_target_doc_type = 'TEMPLATE'
12682      END IF; -- p_source_doc_type = 'TEMPLATE'
12683 
12684         IF del_cur %ISOPEN THEN
12685           CLOSE del_cur ;
12686         END IF;
12687         x_return_status := l_return_status;
12688             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12689                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12690                 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
12691             END IF;
12692 
12693 
12694     EXCEPTION
12695     WHEN OTHERS THEN
12696         IF del_cur %ISOPEN THEN
12697           CLOSE del_cur ;
12698         END IF;
12699        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12700         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision with G_EXC_UNEXPECTED_ERROR');
12701        END IF;
12702     x_return_status := G_RET_STS_UNEXP_ERROR;
12703       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12704       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12705       END IF;
12706       FND_MSG_PUB.Count_And_Get(
12707         p_count =>  x_msg_count,
12708         p_data  =>  x_msg_data
12709         );
12710 
12711     END CopyDelForTemplateRevision;
12712 
12713 
12714 -- Start of comments
12715 --API name      : deleteDeliverables
12716 --Type          : Private.
12717 --Function      : 1.  Deletes deliverables of the current version of the bus doc (-99).
12718 --              : 2.  If p_revert_dels = 'Y",  re-creating deliverables with -99 version
12719 --              :     from the deliverable definitions of the previous bus doc version.
12720 --Usage         : This API is called from Repository while deleting a contract.
12721 --Pre-reqs      : None.
12722 --Parameters    :
12723 --IN            : p_api_version         IN NUMBER       Required
12724 --              : p_init_msg_list       IN VARCHAR2     Optional
12725 --                   Default = FND_API.G_FALSE
12726 --              : p_commit              IN VARCHAR2     Optional
12727 --                   Default = FND_API.G_FALSE
12728 --              : p_bus_doc_id          IN NUMBER       Required
12729 --                   Contract ID of the contract to be deleted
12730 --              : p_bus_doc_type        IN VARCHAR2     Required
12731 --                   Type of the contract to be deleted
12732 --              : p_bus_doc_version     IN NUMBER       Required
12733 --                   Version number of the contract to be deleted
12734 --              : p_prev_del_active     IN VARCHAR2     Optional
12735 --                   Flag which tells whether deliverables of the previous business
12736 --                   document version are activated or not
12737 --                   Default = 'N'
12738 --              : p_revert_dels         IN VARCHAR2     Optional
12739 --                   Flag which tells whether to recreate the -99 deliverables from
12740 --                   the previous document version's deliverables. This will be "N" if
12741 --                   the first version of the business document is being deleted
12742 --                   Default = 'N'
12743 --OUT           : x_return_status       OUT  VARCHAR2(1)
12744 --              : x_msg_count           OUT  NUMBER
12745 --              : x_msg_data            OUT  VARCHAR2(2000)
12746 --Note          :
12747 -- End of comments
12748 PROCEDURE deleteDeliverables(
12749         p_api_version           IN NUMBER,
12750         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
12751         p_commit                IN VARCHAR2:=FND_API.G_FALSE,
12752         p_bus_doc_id            IN NUMBER,
12753         p_bus_doc_type          IN VARCHAR2,
12754         p_bus_doc_version       IN NUMBER,
12755         p_prev_del_active       IN VARCHAR2 := 'N',
12756         p_revert_dels           IN VARCHAR2 := 'N',
12757         x_msg_data              OUT NOCOPY VARCHAR2,
12758         x_msg_count             OUT NOCOPY NUMBER,
12759         x_return_status         OUT NOCOPY VARCHAR2)
12760 IS
12761 
12762   -- Cursor to get deliverable id and original deliverable ids of deliverables of
12763   -- the current version of a business document
12764   CURSOR cur_vers_del_csr IS
12765     SELECT deliverable_id,
12766            original_deliverable_id
12767     FROM   okc_deliverables
12768     WHERE  business_document_id = p_bus_doc_id
12769     AND    business_document_version = -99
12770     AND    business_document_type = p_bus_doc_type;
12771 
12772   -- Cursor to get deliverables of the previous version of a business document
12773   CURSOR prev_vers_del_csr IS
12774     SELECT  deliverable_id,
12775             business_document_type,
12776             business_document_id,
12777             business_document_number,
12778             deliverable_type,
12779             responsible_party,
12780             internal_party_contact_id,
12781             external_party_contact_id,
12782             deliverable_name,
12783             description,
12784             comments,
12785             display_sequence,
12786             fixed_due_date_yn,
12787             actual_due_date,
12788             print_due_date_msg_name,
12789             recurring_yn,
12790             notify_prior_due_date_value,
12791             notify_prior_due_date_uom,
12792             notify_prior_due_date_yn,
12793             notify_completed_yn,
12794             notify_overdue_yn,
12795             notify_escalation_yn,
12796             notify_escalation_value,
12797             notify_escalation_uom,
12798             escalation_assignee,
12799             amendment_operation,
12800             prior_notification_id,
12801             amendment_notes,
12802             completed_notification_id,
12803             overdue_notification_id,
12804             escalation_notification_id,
12805             language,
12806             original_deliverable_id,
12807             requester_id,
12808             external_party_id,
12809             recurring_del_parent_id,
12810             business_document_version,
12811             relative_st_date_duration,
12812             relative_st_date_uom,
12813             relative_st_date_event_id,
12814             relative_end_date_duration,
12815             relative_end_date_uom,
12816             relative_end_date_event_id,
12817             repeating_day_of_month,
12818             repeating_day_of_week,
12819             repeating_frequency_uom,
12820             repeating_duration,
12821             fixed_start_date,
12822             fixed_end_date,
12823             manage_yn,
12824             internal_party_id,
12825             deliverable_status,
12826             status_change_notes,
12827             created_by,
12828             creation_date,
12829             last_updated_by,
12830             last_update_date,
12831             last_update_login,
12832             object_version_number,
12833             attribute_category,
12834             attribute1,
12835             attribute2,
12836             attribute3,
12837             attribute4,
12838             attribute5,
12839             attribute6,
12840             attribute7,
12841             attribute8,
12842             attribute9,
12843             attribute10,
12844             attribute11,
12845             attribute12,
12846             attribute13,
12847             attribute14,
12848             attribute15,
12849             disable_notifications_yn,
12850             last_amendment_date,
12851             business_document_line_id,
12852             external_party_site_id,
12853             start_event_date,
12854             end_event_date,
12855             summary_amend_operation_code,
12856             external_party_role,
12857             pay_hold_prior_due_date_value,
12858             pay_hold_prior_due_date_uom,
12859             pay_hold_prior_due_date_yn,
12860             pay_hold_overdue_yn,
12861             raise_completion_event_yn,
12862             orig_system_reference_code,
12863             orig_system_reference_id1,
12864             orig_system_reference_id2,
12865             del_category_code,
12866             uda_template_id,
12867             schedule_type
12868     FROM   okc_deliverables
12869     WHERE  business_document_id = p_bus_doc_id
12870     AND    business_document_version = p_bus_doc_version - 1
12871     AND    business_document_type = p_bus_doc_type
12872     AND    recurring_del_parent_id IS NULL
12873     AND    NVL(amendment_operation, ' ') <> 'DELETED';
12874 
12875 
12876  --  Fix for bug 13518546 start
12877   CURSOR cur_del_doc_type(delid NUMBER) IS
12878     SELECT BUSINESS_DOCUMENT_TYPE FROM okc_deliverables
12879     WHERE deliverable_id=delid;
12880 
12881     l_business_document_type   okc_deliverables.business_document_type%TYPE;
12882 
12883 	 --  Fix for bug 13518546 end
12884 
12885   TYPE cur_vers_del_tbl IS TABLE OF cur_vers_del_csr%ROWTYPE;
12886   TYPE prev_vers_del_tbl IS TABLE OF prev_vers_del_csr%ROWTYPE;
12887 
12888   cur_vers_del cur_vers_del_tbl;
12889   prev_vers_del prev_vers_del_tbl;
12890 
12891   l_api_name      CONSTANT VARCHAR2(30) :='deleteDeliverables';
12892   l_api_version   CONSTANT NUMBER := 1.0;
12893   l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
12894 
12895   l_deliverable_id okc_deliverables.deliverable_id%TYPE;
12896   x_errorcode NUMBER;
12897 
12898 BEGIN
12899 
12900   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12901     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Enterred OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
12902     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_id: '|| to_char(p_bus_doc_id));
12903     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_version: '|| to_char(p_bus_doc_version));
12904     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_type: '|| p_bus_doc_type);
12905     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_prev_del_active: '|| p_prev_del_active);
12906     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_revert_dels: '|| p_revert_dels);
12907   END IF;
12908 
12909   -- Standard call to check for call compatibility.
12910   IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
12911     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12912   END IF;
12913 
12914   -- Initialize message list if p_init_msg_list is set to TRUE.
12915   IF FND_API.to_Boolean( p_init_msg_list ) THEN
12916     FND_MSG_PUB.initialize;
12917   END IF;
12918 
12919   -- If the flag p_revert_dels is "N" then this API is called to delete
12920   -- deliverables with business document version of -99
12921   IF (p_revert_dels = 'N') THEN
12922 
12923     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12924         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12925           'Deleting deliverables with document version equal to -99');
12926     END IF;
12927 
12928     delete_deliverables(p_api_version     => 1.0,
12929                         p_init_msg_list   => FND_API.G_FALSE,
12930                         p_doc_id          => p_bus_doc_id,
12931                         p_doc_type        => p_bus_doc_type,
12932                         p_doc_version     => -99,
12933                         x_return_status   => x_return_status,
12934                         x_msg_count       => x_msg_count,
12935                         x_msg_data        => x_msg_data);
12936 
12937     -----------------------------------------------------
12938     IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
12939         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
12940     ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
12941         RAISE OKC_API.G_EXCEPTION_ERROR;
12942     END IF;
12943     --------------------------------------------------------
12944 
12945   ELSE
12946     -- If the flag p_revert_dels is not "N" then this API is called to delete
12947     -- the -99 deliverables and then recreate those deliverables using previous
12948     -- business document version's deliverables.
12949     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12950       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12951            'Getting ids of the deliverables with document version number equal to -99');
12952     END IF;
12953 
12954     OPEN cur_vers_del_csr;
12955     FETCH cur_vers_del_csr BULK COLLECT INTO cur_vers_del;
12956     CLOSE cur_vers_del_csr;
12957 
12958     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12959       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12960          'Deleting deliverables with document version equal to -99');
12961     END IF;
12962 
12963     delete_deliverables(p_api_version     => 1.0,
12964                         p_init_msg_list   => FND_API.G_FALSE,
12965                         p_doc_id          => p_bus_doc_id,
12966                         p_doc_type        => p_bus_doc_type,
12967                         p_doc_version     => -99,
12968                         x_return_status   => x_return_status,
12969                         x_msg_count       => x_msg_count,
12970                         x_msg_data        => x_msg_data);
12971 
12972     -----------------------------------------------------
12973     IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
12974         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
12975     ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
12976         RAISE OKC_API.G_EXCEPTION_ERROR;
12977     END IF;
12978     --------------------------------------------------------
12979 
12980     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12981         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12982              'Getting deliverables of the previous version');
12983     END IF;
12984 
12985     OPEN  prev_vers_del_csr;
12986     FETCH prev_vers_del_csr BULK COLLECT INTO prev_vers_del;
12987     CLOSE prev_vers_del_csr;
12988 
12989     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12990       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12991               'prev_vers_del.COUNT ' || prev_vers_del.COUNT);
12992       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12993               'cur_vers_del.COUNT ' || cur_vers_del.COUNT);
12994     END IF;
12995 
12996     IF (prev_vers_del.COUNT > 0) THEN
12997 
12998       -- Iterate through the the array of previous business document version deliverables
12999       -- and clone each row in the array by inserting one deliverable with -99
13000       -- business document version. So that the state of the deliverables will
13001       -- be reverted back to that state before creating the new version of the business document
13002       FOR i IN prev_vers_del.FIRST..NVL(prev_vers_del.LAST, -1) LOOP
13003 
13004         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13005             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13006                     'prev_vers_del(' || i || ').original_deliverable_id ' || prev_vers_del(i).original_deliverable_id);
13007         END IF;
13008 
13009         -- Iterate through the array of -99 deliverables to get corresponding deliverable id of the
13010         -- deliverable in the context using their original deliverable id
13011         -- This deliverable id will be used as id for the deliverable being inserted, so that we don't
13012         -- loose the deliverable id and also to ensure data integrity
13013     IF (cur_vers_del.COUNT > 0) THEN
13014 
13015         FOR j IN cur_vers_del.FIRST..NVL(cur_vers_del.LAST, -1) LOOP
13016 
13017             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13018                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13019                    'cur_vers_del(' || j || ').original_deliverable_id ' || cur_vers_del(j).original_deliverable_id);
13020             END IF;
13021 
13022             -- Original deliverable id is used to find corresponding deliverable with -99 version of
13023             -- the deliverable in the context
13024             IF (cur_vers_del(j).original_deliverable_id = prev_vers_del(i).original_deliverable_id) THEN
13025               l_deliverable_id := cur_vers_del(j).deliverable_id;
13026 
13027               IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13028                   FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13029                      'l_deliverable_id ' || l_deliverable_id);
13030               END IF;
13031 
13032               EXIT;
13033             END IF;
13034 
13035         END LOOP;
13036 	END IF;
13037 
13038         -- Fix for bug 13518546 start
13039         IF(l_deliverable_id IS NULL) THEN
13040           OPEN cur_del_doc_type(prev_vers_del(i).original_deliverable_id);
13041             FETCH cur_del_doc_type INTO l_business_document_type;
13042           CLOSE cur_del_doc_type;
13043             IF(l_business_document_type='TEMPLATE') THEN
13044                 select okc_deliverable_id_s.nextval INTO l_deliverable_id from dual;
13045              ELSE
13046               l_deliverable_id:=prev_vers_del(i).original_deliverable_id;
13047              END IF;
13048         END IF ;
13049         -- Fix for bug 13518546 end
13050 
13051         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13052             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13053               'Setting default values for some of the columns');
13054         END IF;
13055 
13056         -- Set default value for some of the columns, which are resolved during amendment process
13057         -- and whose values are supposed to be NULL or some default value for the current
13058         -- business document version deliverables i.e. -99 version deliverables
13059         prev_vers_del(i).actual_due_date := NULL;
13060         prev_vers_del(i).object_version_number := 0;
13061         prev_vers_del(i).start_event_date := NULL;
13062         prev_vers_del(i).end_event_date := NULL;
13063 
13064         IF (p_prev_del_active = 'Y') THEN
13065 
13066         -- Set default value for some more columns as we're using deliverable definitions
13067         -- of the previous business document version which might have activated and some of
13068         -- the columns are populated, which are supposed to be either NULL or some default
13069         -- value for the current business document version deliverables i.e. -99 version deliverables
13070           prev_vers_del(i).prior_notification_id := NULL;
13071           prev_vers_del(i).amendment_operation := NULL;
13072           prev_vers_del(i).completed_notification_id := NULL;
13073           prev_vers_del(i).overdue_notification_id := NULL;
13074           prev_vers_del(i).escalation_notification_id := NULL;
13075           prev_vers_del(i).manage_yn := 'N';
13076           prev_vers_del(i).deliverable_status := 'INACTIVE';
13077           prev_vers_del(i).summary_amend_operation_code := NULL;
13078           prev_vers_del(i).last_amendment_date := NULL;
13079 
13080         END IF;
13081 
13082 
13083         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13084               FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13085                 'Inserting a Deliverable with deliverable id ' || l_deliverable_id);
13086         END IF;
13087 
13088         -- Insert a row into okc_deliverables with id of the deleted deliverable
13089         -- and with other values with its corresponding previous version deliverable
13090         INSERT INTO okc_deliverables (
13091                   deliverable_id,
13092                   business_document_type,
13093                   business_document_id,
13094                   business_document_number,
13095                   deliverable_type,
13096                   responsible_party,
13097                   internal_party_contact_id,
13098                   external_party_contact_id,
13099                   deliverable_name,
13100                   description,
13101                   comments,
13102                   display_sequence,
13103                   fixed_due_date_yn,
13104                   actual_due_date,
13105                   print_due_date_msg_name,
13106                   recurring_yn,
13107                   notify_prior_due_date_value,
13108                   notify_prior_due_date_uom,
13109                   notify_prior_due_date_yn,
13110                   notify_completed_yn,
13111                   notify_overdue_yn,
13112                   notify_escalation_yn,
13113                   notify_escalation_value,
13114                   notify_escalation_uom,
13115                   escalation_assignee,
13116                   amendment_operation,
13117                   prior_notification_id,
13118                   amendment_notes,
13119                   completed_notification_id,
13120                   overdue_notification_id,
13121                   escalation_notification_id,
13122                   language,
13123                   original_deliverable_id,
13124                   requester_id,
13125                   external_party_id,
13126                   recurring_del_parent_id,
13127                   business_document_version,
13128                   relative_st_date_duration,
13129                   relative_st_date_uom,
13130                   relative_st_date_event_id,
13131                   relative_end_date_duration,
13132                   relative_end_date_uom,
13133                   relative_end_date_event_id,
13134                   repeating_day_of_month,
13135                   repeating_day_of_week,
13136                   repeating_frequency_uom,
13137                   repeating_duration,
13138                   fixed_start_date,
13139                   fixed_end_date,
13140                   manage_yn,
13141                   internal_party_id,
13142                   deliverable_status,
13143                   status_change_notes,
13144                   created_by,
13145                   creation_date,
13146                   last_updated_by,
13147                   last_update_date,
13148                   last_update_login,
13149                   object_version_number,
13150                   attribute_category,
13151                   attribute1,
13152                   attribute2,
13153                   attribute3,
13154                   attribute4,
13155                   attribute5,
13156                   attribute6,
13157                   attribute7,
13158                   attribute8,
13159                   attribute9,
13160                   attribute10,
13161                   attribute11,
13162                   attribute12,
13163                   attribute13,
13164                   attribute14,
13165                   attribute15,
13166                   disable_notifications_yn,
13167                   last_amendment_date,
13168                   business_document_line_id,
13169                   external_party_site_id,
13170                   start_event_date,
13171                   end_event_date,
13172                   summary_amend_operation_code,
13173                   external_party_role,
13174                   pay_hold_prior_due_date_value,
13175                   pay_hold_prior_due_date_uom,
13176                   pay_hold_prior_due_date_yn,
13177                   pay_hold_overdue_yn,
13178                   raise_completion_event_yn,
13179                   orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2, del_category_code,
13180                   uda_template_id ,schedule_type
13181                   )
13182         VALUES( l_deliverable_id,
13183                 prev_vers_del(i).business_document_type,
13184                 prev_vers_del(i).business_document_id,
13185                 prev_vers_del(i).business_document_number,
13186                 prev_vers_del(i).deliverable_type,
13187                 prev_vers_del(i).responsible_party,
13188                 prev_vers_del(i).internal_party_contact_id,
13189                 prev_vers_del(i).external_party_contact_id,
13190                 prev_vers_del(i).deliverable_name,
13191                 prev_vers_del(i).description,
13192                 prev_vers_del(i).comments,
13193                 prev_vers_del(i).display_sequence,
13194                 prev_vers_del(i).fixed_due_date_yn,
13195                 prev_vers_del(i).actual_due_date,
13196                 prev_vers_del(i).print_due_date_msg_name,
13197                 prev_vers_del(i).recurring_yn,
13198                 prev_vers_del(i).notify_prior_due_date_value,
13199                 prev_vers_del(i).notify_prior_due_date_uom,
13200                 prev_vers_del(i).notify_prior_due_date_yn,
13201                 prev_vers_del(i).notify_completed_yn,
13202                 prev_vers_del(i).notify_overdue_yn,
13203                 prev_vers_del(i).notify_escalation_yn,
13204                 prev_vers_del(i).notify_escalation_value,
13205                 prev_vers_del(i).notify_escalation_uom,
13206                 prev_vers_del(i).escalation_assignee,
13207                 prev_vers_del(i).amendment_operation,
13208                 prev_vers_del(i).prior_notification_id,
13209                 prev_vers_del(i).amendment_notes,
13210                 prev_vers_del(i).completed_notification_id,
13211                 prev_vers_del(i).overdue_notification_id,
13212                 prev_vers_del(i).escalation_notification_id,
13213                 prev_vers_del(i).language,
13214                 prev_vers_del(i).original_deliverable_id,
13215                 prev_vers_del(i).requester_id,
13216                 prev_vers_del(i).external_party_id,
13217                 prev_vers_del(i).recurring_del_parent_id,
13218                 -99,
13219                 prev_vers_del(i).relative_st_date_duration,
13220                 prev_vers_del(i).relative_st_date_uom,
13221                 prev_vers_del(i).relative_st_date_event_id,
13222                 prev_vers_del(i).relative_end_date_duration,
13223                 prev_vers_del(i).relative_end_date_uom,
13224                 prev_vers_del(i).relative_end_date_event_id,
13225                 prev_vers_del(i).repeating_day_of_month,
13226                 prev_vers_del(i).repeating_day_of_week,
13227                 prev_vers_del(i).repeating_frequency_uom,
13228                 prev_vers_del(i).repeating_duration,
13229                 prev_vers_del(i).fixed_start_date,
13230                 prev_vers_del(i).fixed_end_date,
13231                 prev_vers_del(i).manage_yn,
13232                 prev_vers_del(i).internal_party_id,
13233                 prev_vers_del(i).deliverable_status,
13234                 prev_vers_del(i).status_change_notes,
13235                 prev_vers_del(i).created_by,
13236                 prev_vers_del(i).creation_date,
13237                 prev_vers_del(i).last_updated_by,
13238                 prev_vers_del(i).last_update_date,
13239                 prev_vers_del(i).last_update_login,
13240                 prev_vers_del(i).object_version_number,
13241                 prev_vers_del(i).attribute_category,
13242                 prev_vers_del(i).attribute1,
13243                 prev_vers_del(i).attribute2,
13244                 prev_vers_del(i).attribute3,
13245                 prev_vers_del(i).attribute4,
13246                 prev_vers_del(i).attribute5,
13247                 prev_vers_del(i).attribute6,
13248                 prev_vers_del(i).attribute7,
13249                 prev_vers_del(i).attribute8,
13250                 prev_vers_del(i).attribute9,
13251                 prev_vers_del(i).attribute10,
13252                 prev_vers_del(i).attribute11,
13253                 prev_vers_del(i).attribute12,
13254                 prev_vers_del(i).attribute13,
13255                 prev_vers_del(i).attribute14,
13256                 prev_vers_del(i).attribute15,
13257                 prev_vers_del(i).disable_notifications_yn,
13258                 prev_vers_del(i).last_amendment_date,
13259                 prev_vers_del(i).business_document_line_id,
13260                 prev_vers_del(i).external_party_site_id,
13261                 prev_vers_del(i).start_event_date,
13262                 prev_vers_del(i).end_event_date,
13263                 prev_vers_del(i).summary_amend_operation_code,
13264                 prev_vers_del(i).external_party_role,
13265                 prev_vers_del(i).pay_hold_prior_due_date_value,
13266                 prev_vers_del(i).pay_hold_prior_due_date_uom,
13267                 prev_vers_del(i).pay_hold_prior_due_date_yn,
13268                 prev_vers_del(i).pay_hold_overdue_yn,
13269                 prev_vers_del(i).raise_completion_event_yn,
13270                 prev_vers_del(i).orig_system_reference_code,
13271                 prev_vers_del(i).orig_system_reference_id1,
13272                 prev_vers_del(i).orig_system_reference_id2,
13273                 prev_vers_del(i).del_category_code,
13274                 prev_vers_del(i).uda_template_id,
13275                 prev_vers_del(i).schedule_type);
13276                 copy_deliverable_udas(
13277                       prev_vers_del(i).orig_system_reference_id1,
13278                       l_deliverable_id,
13279                       x_return_status,
13280                       x_msg_count,
13281                       x_msg_data,
13282                       x_errorcode
13283                       );
13284                 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13285 	                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13286                 END IF;
13287 
13288 
13289         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13290           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13291                 'Copying attachments from deliverable with id ' || to_char(prev_vers_del(i).deliverable_id) || ' to ' || to_char(l_deliverable_id));
13292         END IF;
13293 
13294         -- Copy attachments from prev version deliverable to current version deliverable
13295         fnd_attached_documents2_pkg.copy_attachments(
13296                           X_from_entity_name  =>  G_ENTITY_NAME,
13297                           X_from_pk1_value    =>  to_char(prev_vers_del(i).deliverable_id),
13298                           X_to_entity_name    =>  G_ENTITY_NAME,
13299                           X_to_pk1_value      =>  to_char(l_deliverable_id),
13300                           X_CREATED_BY        =>  FND_GLOBAL.User_id,
13301                           X_LAST_UPDATE_LOGIN =>  Fnd_Global.Login_Id);
13302 
13303       -- Fix for bug 13518546 start
13304         l_deliverable_id := NULL;
13305       -- Fix for bug 13518546 end
13306 
13307       END LOOP;
13308 
13309     END IF;
13310 
13311     IF (p_prev_del_active = 'N') THEN
13312 
13313       -- Since the deliverables of the current contract are not yet activated
13314       --we can safely delete those deliverables with previous business document version number
13315       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13316           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13317                 'Deliverables of the current contract are not activated yet');
13318       END IF;
13319 
13320       -- Delete the deliverables created with previous business document version number
13321       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13322         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13323              'Deleting deliverables with document version equal to' || to_char(p_bus_doc_version - 1));
13324       END IF;
13325 
13326       delete_deliverables(p_api_version     => 1.0,
13327                           p_init_msg_list   => FND_API.G_FALSE,
13328                           p_doc_id          => p_bus_doc_id,
13329                           p_doc_type        => p_bus_doc_type,
13330                           p_doc_version     => p_bus_doc_version - 1,
13331                           x_return_status   => x_return_status,
13332                           x_msg_count       => x_msg_count,
13333                           x_msg_data        => x_msg_data);
13334 
13335       -----------------------------------------------------
13336       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
13337           RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
13338       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
13339           RAISE OKC_API.G_EXCEPTION_ERROR;
13340       END IF;
13341     --------------------------------------------------------
13342 
13343     END IF; -- End of (p_prev_del_active = 'N')
13344 
13345   END IF; -- End of (p_revert_dels = 'N')
13346 
13347 
13348 
13349   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13350     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
13351   END IF;
13352 
13353 
13354 EXCEPTION
13355 
13356   WHEN OTHERS THEN
13357 
13358     IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13359       FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers with G_EXC_UNEXPECTED_ERROR');
13360     END IF;
13361 
13362     IF prev_vers_del_csr %ISOPEN THEN
13363       CLOSE prev_vers_del_csr;
13364     END IF;
13365 
13366     IF cur_vers_del_csr %ISOPEN THEN
13367       CLOSE cur_vers_del_csr;
13368     END IF;
13369 
13370     x_return_status := G_RET_STS_UNEXP_ERROR;
13371 
13372     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13373       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
13374     END IF;
13375 
13376     FND_MSG_PUB.Count_And_Get(
13377       p_count =>  x_msg_count,
13378       p_data  =>  x_msg_data
13379     );
13380 
13381 
13382 END deleteDeliverables;
13383 
13384 /** This procedure will delete the deliverable attachments and deliverbale status history.
13385 This will be claled from DeliverableEOImpl.java remove method() where the deliverbale gets deleted in the remoev method
13386 and thsi method will be called to remove its corresponding attachments and history
13387 */
13388 
13389 PROCEDURE delete_del_attach_and_history (
13390     p_api_version  IN NUMBER,
13391     p_init_msg_list IN VARCHAR2,
13392     p_del_id    IN NUMBER,
13393     x_msg_data   OUT NOCOPY  VARCHAR2,
13394     x_msg_count  OUT NOCOPY  NUMBER,
13395     x_return_status  OUT NOCOPY  VARCHAR2
13396     )
13397     IS
13398 
13399     l_result   VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
13400     l_api_name VARCHAR2(30) :='delete_del_attach_and_history';
13401 
13402 BEGIN
13403 
13404        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13405         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history'||to_char(p_del_id));
13406        END IF;
13407                 -- delete deliverables status history
13408                 DELETE FROM okc_del_status_history
13409                 WHERE deliverable_id = p_del_id;
13410                 -- delete attachments if any
13411                 delete_attachments (
13412                     p_entity_name => G_ENTITY_NAME
13413                     ,p_pk1_value    =>  p_del_id
13414                     ,x_result       =>  l_result);
13415             x_return_status := l_result;
13416        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13417         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history');
13418        END IF;
13419 
13420 EXCEPTION
13421     WHEN FND_API.G_EXC_ERROR THEN
13422        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13423         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_ERROR');
13424        END IF;
13425     x_return_status := G_RET_STS_ERROR;
13426       FND_MSG_PUB.Count_And_Get(
13427         p_count =>  x_msg_count,
13428         p_data  =>  x_msg_data
13429         );
13430 
13431     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13432        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13433         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_UNEXPECTED_ERROR');
13434        END IF;
13435     x_return_status := G_RET_STS_UNEXP_ERROR;
13436       FND_MSG_PUB.Count_And_Get(
13437         p_count =>  x_msg_count,
13438         p_data  =>  x_msg_data
13439         );
13440 
13441     WHEN OTHERS THEN
13442        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13443         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_UNEXPECTED_ERROR');
13444        END IF;
13445     x_return_status := G_RET_STS_UNEXP_ERROR;
13446       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13447       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
13448       END IF;
13449       FND_MSG_PUB.Count_And_Get(
13450         p_count =>  x_msg_count,
13451         p_data  =>  x_msg_data
13452         );
13453 
13454 END delete_del_attach_and_history;
13455 
13456 /*
13457   params: p_source_id: source deliverable id from which uda data is copied.
13458           p_target_id: target deliverable id to which uda data is copied to.
13459 */
13460 PROCEDURE copy_deliverable_udas(
13461       p_source_id           IN      NUMBER,
13462       p_target_id           IN      NUMBER,
13463       x_return_status       OUT NOCOPY    VARCHAR2,
13464       x_msg_count           OUT NOCOPY    NUMBER,
13465       x_msg_data            OUT NOCOPY    VARCHAR2,
13466       x_errorcode           OUT NOCOPY    NUMBER
13467       ) IS
13468 from_pk_col_value_pairs       EGO_COL_NAME_VALUE_PAIR_ARRAY;
13469 to_pk_col_value_pairs         EGO_COL_NAME_VALUE_PAIR_ARRAY;
13470 l_api_name                    VARCHAR2(30) :='copy_deliverable_udas';
13471 l_object_id                   fnd_objects.object_id%TYPE;
13472 l_dtlevel_col_value_pairs     ego_col_name_value_pair_array;
13473 l_main_data_level_id          ego_data_level_b.data_level_id%TYPE;
13474 
13475 BEGIN
13476 
13477    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13478      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside copy_deliverable_udas with params source id:'||
13479                p_source_id || ' and target id: ' || p_target_id );
13480    END IF;
13481    from_pk_col_value_pairs := ego_col_name_value_pair_array(ego_col_name_value_pair_obj ('DELIVERABLE_ID',p_source_id));
13482    to_pk_col_value_pairs := ego_col_name_value_pair_array(ego_col_name_value_pair_obj ('DELIVERABLE_ID',p_target_id));
13483 
13484    BEGIN
13485       SELECT object_id
13486         INTO l_object_id
13487         FROM fnd_objects
13488        WHERE obj_name = 'OKC_DELIVERABLE';
13489 
13490       SELECT data_level_id
13491         INTO l_main_data_level_id
13492         FROM ego_data_level_b
13493        WHERE attr_group_type = 'OKC_DELIVERABLES_EXT_ATTRS';
13494    EXCEPTION
13495       WHEN OTHERS
13496       THEN
13497          RAISE;
13498    END;
13499 
13500    l_dtlevel_col_value_pairs :=
13501       ego_col_name_value_pair_array (ego_col_name_value_pair_obj ('PK1_VALUE',NULL));
13502 
13503 
13504    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13505      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'110: Calling ego_user_attrs_data_pvt.copy_user_attrs_data');
13506    END IF;
13507 
13508    ego_user_attrs_data_pvt.copy_user_attrs_data
13509                   (p_api_version                      => 1.0,
13510                    p_application_id                   => 510,
13511                    p_object_id                        => l_object_id,
13512                    p_object_name                      => 'OKC_DELIVERABLE',
13513                    p_old_pk_col_value_pairs           => from_pk_col_value_pairs,
13514                    p_old_data_level_id                => l_main_data_level_id,
13515                    p_old_dtlevel_col_value_pairs      => l_dtlevel_col_value_pairs,
13516                    p_new_pk_col_value_pairs           => to_pk_col_value_pairs,
13517                    p_new_data_level_id                => l_main_data_level_id,
13518                    p_new_dtlevel_col_value_pairs      => l_dtlevel_col_value_pairs,
13519                    p_commit                           => fnd_api.g_false,
13520                    x_return_status                    => x_return_status,
13521                    x_errorcode                        => x_errorcode,
13522                    x_msg_count                        => x_msg_count,
13523                    x_msg_data                         => x_msg_data
13524                   );
13525 
13526    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13527      FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Completed ego_user_attrs_data_pvt.copy_user_attrs_data with status'
13528               || x_return_status);
13529    END IF;
13530 
13531 
13532 END copy_deliverable_udas;
13533 
13534 FUNCTION  getDaysDueDateMsgText(
13535  p_relative_st_date_event_id    NUMBER
13536 ,p_relative_end_date_event_id  NUMBER
13537 ,p_relative_st_date_duration   NUMBER  --&START_NUM
13538 ,p_relative_st_date_uom        VARCHAR2  -- &START_D_W_M
13539 ,p_relative_end_date_uom       VARCHAR2 -- &END_D_W_M
13540 ,p_relative_end_date_duration  NUMBER  -- &END_NUM
13541 ,p_repeating_duration          NUMBER -- &NUM_DAYS
13542 ,p_print_due_date_msg_name     VARCHAR2
13543 ,p_fixed_start_date            DATE  -- &FIXED_START_DATE
13544 ,p_fixed_end_date              DATE  -- &FIXED_END_DATE
13545 )  RETURN VARCHAR2
13546 is
13547 
13548 CURSOR event_cur(x number) is
13549 select before_after,event_name
13550 from okc_bus_doc_events_v
13551 where bus_doc_event_id = x;
13552 l_st_event_rec event_cur%ROWTYPE;
13553 l_end_event_rec  event_cur%ROWTYPE;
13554 
13555 l_st_ba VARCHAR2(100);
13556 l_end_ba VARCHAR2(100);
13557 
13558 l_st_date_uom VARCHAR2(100);
13559 l_end_date_uom VARCHAR2(100);
13560 
13561 l_st_event                        VARCHAR2(80);
13562 l_end_event                       VARCHAR2(80);
13563 
13564 
13565 l_msg  varchar2(500);
13566 l_repeating_duration   number;
13567 
13568 BEGIN
13569 
13570 IF p_relative_st_date_event_id is not null THEN
13571     OPEN event_cur(p_relative_st_date_event_id);
13572     FETCH event_cur INTO l_st_event_rec;
13573     CLOSE event_cur;
13574 
13575 
13576     l_st_event :=   l_st_event_rec.event_name;
13577 
13578     IF (l_st_event_rec.before_after='B') THEN
13579     l_st_ba :=   OKC_TERMS_UTIL_PVT.Get_Message(
13580                   p_app_name      =>  'OKC'
13581                   ,p_msg_name     =>  'OKC_DEL_BEFORE_TOKEN'
13582                   );
13583 
13584     ELSIF  (l_st_event_rec.before_after='A') THEN
13585     l_st_ba :=   OKC_TERMS_UTIL_PVT.Get_Message(
13586                   p_app_name      =>  'OKC'
13587                   ,p_msg_name     =>  'OKC_DEL_AFTER_TOKEN'
13588                   );
13589     END IF;
13590 END IF;
13591 
13592 IF p_relative_end_date_event_id is not null THEN
13593     OPEN event_cur(p_relative_end_date_event_id);
13594     FETCH event_cur INTO l_end_event_rec;
13595     CLOSE event_cur;
13596 
13597     l_end_event :=   l_end_event_rec.event_name;
13598 
13599 
13600     IF (l_end_event_rec.before_after='B') THEN
13601     l_end_ba :=   OKC_TERMS_UTIL_PVT.Get_Message(
13602                   p_app_name      =>  'OKC'
13603                   ,p_msg_name     =>  'OKC_DEL_BEFORE_TOKEN'
13604                   );
13605     ELSIF  (l_end_event_rec.before_after='A') THEN
13606     l_end_ba :=   OKC_TERMS_UTIL_PVT.Get_Message(
13607                   p_app_name      =>  'OKC'
13608                   ,p_msg_name     =>  'OKC_DEL_AFTER_TOKEN'
13609                   );
13610     END IF;
13611 END IF;
13612 
13613 IF p_relative_st_date_uom IS NOT NULL THEN
13614 
13615      IF (p_relative_st_date_uom like 'MTH%')  THEN
13616      l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13617                   p_app_name      =>  'OKC'
13618                   ,p_msg_name     =>  'OKC_DEL_MONTHS_TOKEN'
13619                   );
13620      ELSIF (p_relative_st_date_uom like 'WK%') THEN
13621      l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13622                   p_app_name      =>  'OKC'
13623                   ,p_msg_name     =>  'OKC_DEL_WEEKS_TOKEN'
13624                   );
13625      ELSIF (p_relative_st_date_uom like 'DAY%') THEN
13626           l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13627                   p_app_name      =>  'OKC'
13628                   ,p_msg_name     =>  'OKC_DEL_DAYS_TOKEN'
13629                   );
13630     END IF;
13631 END IF;
13632 
13633 IF p_relative_end_date_uom IS NOT NULL THEN
13634 
13635      IF (p_relative_end_date_uom like 'MTH%')  THEN
13636      l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13637                   p_app_name      =>  'OKC'
13638                   ,p_msg_name     =>  'OKC_DEL_MONTH_TOKEN'
13639                   );
13640      ELSIF (p_relative_end_date_uom like 'WK%') THEN
13641      l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13642                   p_app_name      =>  'OKC'
13643                   ,p_msg_name     =>  'OKC_DEL_WEEK_TOKEN'
13644                   );
13645      ELSIF (p_relative_end_date_uom like 'DAY%') THEN
13646           l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13647                   p_app_name      =>  'OKC'
13648                   ,p_msg_name     =>  'OKC_DEL_DAY_TOKEN'
13649                   );
13650     END IF;
13651 END IF;
13652 
13653 -- If duration is less than or equal to 1 then don't pass the token value
13654 if p_repeating_duration = 1  THEN
13655     l_repeating_duration := null;
13656 elsif p_repeating_duration = 0  THEN
13657     l_repeating_duration := null;
13658 else
13659     l_repeating_duration := p_repeating_duration;
13660 end if;
13661 
13662 -- Case 1, both start and end dates  are fixed
13663  IF p_relative_st_date_event_id IS NULL AND p_relative_end_date_event_id IS NULL  THEN
13664     l_msg :=  OKC_TERMS_UTIL_PVT.Get_Message(
13665                    p_app_name      =>  'OKC'
13666                   ,p_msg_name     =>  'OKC_DEL_RD_FS_FE'
13667                   ,p_token1   => 'FREQ_NUM'
13668                   ,p_token1_value => l_repeating_duration
13669                   ,p_token2 =>   'FIXED_START_DATE'
13670                   ,p_token2_value => p_fixed_start_date
13671                   ,p_token3 => 'FIXED_END_DATE'
13672                   ,p_token3_value => p_fixed_end_date
13673                   );
13674  ELSIF p_relative_st_date_event_id IS NULL AND p_relative_end_date_event_id IS NOT NULL
13675  THEN
13676     l_msg :=  OKC_TERMS_UTIL_PVT.Get_Message(
13677                    p_app_name      =>  'OKC'
13678                   ,p_msg_name     =>  'OKC_DEL_RD_FS_RE'
13679                   ,p_token1   => 'FREQ_NUM'
13680                   ,p_token1_value => l_repeating_duration
13681                   ,p_token2 =>   'FIXED_START_DATE'
13682                   ,p_token2_value => p_fixed_start_date
13683                   ,p_token3 => 'END_NUM'
13684                   ,p_token3_value => p_relative_end_date_duration
13685                   ,p_token4 => 'END_D_W_M'
13686                   ,p_token4_value => l_end_date_uom
13687                   ,p_token5 => 'END_BA'
13688                   ,p_token5_value => l_end_ba
13689                   ,p_token6 =>  'END_EVENT'
13690                   ,p_token6_value => l_end_event
13691                   );
13692  ELSIF   p_relative_st_date_event_id IS NOT NULL AND p_relative_end_date_event_id IS NULL
13693  THEN
13694 
13695  l_msg  :=  OKC_TERMS_UTIL_PVT.Get_Message(
13696                    p_app_name      =>  'OKC'
13697                   ,p_msg_name     =>  'OKC_DEL_RD_FS_RE'
13698                   ,p_token1   => 'FREQ_NUM'
13699                   ,p_token1_value => l_repeating_duration
13700                   ,p_token2 =>   'START_NUM'
13701                   ,p_token2_value => p_relative_st_date_duration
13702                   ,p_token3 => 'START_D_W_M'
13703                   ,p_token3_value => l_st_date_uom
13704                   ,p_token4 => 'START_BA'
13705                   ,p_token4_value => l_st_ba
13706                   ,p_token5 =>  'START_EVENT'
13707                   ,p_token5_value => l_st_event
13708                   ,p_token6 => 'FIXED_END_DATE'
13709                   ,p_token7 => p_fixed_end_date
13710                   );
13711 
13712 
13713  ELSIF  p_relative_st_date_event_id IS NOT NULL AND p_relative_end_date_event_id IS NOT NULL  THEN
13714 
13715   l_msg  :=  OKC_TERMS_UTIL_PVT.Get_Message(
13716                    p_app_name      =>  'OKC'
13717                   ,p_msg_name     =>  'OKC_DEL_RD_RS_RE'
13718                   ,p_token1   => 'FREQ_NUM'
13719                   ,p_token1_value => l_repeating_duration
13720                   ,p_token2 =>   'START_NUM'
13721                   ,p_token2_value => p_relative_st_date_duration
13722                   ,p_token3 => 'START_D_W_M'
13723                   ,p_token3_value => l_st_date_uom
13724                   ,p_token4 => 'START_BA'
13725                   ,p_token4_value => l_st_ba
13726                   ,p_token5 =>  'START_EVENT'
13727                   ,p_token5_value => l_st_event
13728                   ,p_token6 => 'END_NUM'
13729                   ,p_token6_value => p_relative_end_date_duration
13730                   ,p_token7 => 'END_D_W_M'
13731                   ,p_token7_value => l_end_date_uom
13732                   ,p_token8 => 'END_BA'
13733                   ,p_token8_value => l_end_ba
13734                   ,p_token9 =>  'END_EVENT'
13735                   ,p_token9_value => l_end_event
13736                   );
13737 
13738  END IF;
13739 
13740 
13741  -- Repeats every &NUM_DAYS days starting &FIXED_START_DATE until &FIXED_END_DATE
13742     -- OKC_DEL_RD_FS_FE
13743 
13744  -- Repeats every &NUM_DAYS days starting &FIXED_START_DATE until &END_NUM &END_D_W_M &END_BA &END_EVENT
13745     -- OKC_DEL_RD_FS_RE
13746 
13747  -- Repeats every &NUM_DAYS days starting &START_NUM &START_D_W_M &START_BA &STRT_EVENT until &FIXED_END_DATE
13748     -- OKC_DEL_RD_RS_FE
13749 
13750  -- Repeats every &NUM_DAYS days starting &START_NUM &START_D_W_M &START_BA &STRT_EVENT until &END_NUM &D_W_M &BA &END_EVENT
13751     -- OKC_DEL_RD_RS_RE
13752 
13753 RETURN l_msg;
13754 END getDaysDueDateMsgText;
13755 
13756 
13757 
13758 /**************************/
13759 END OKC_DELIVERABLE_PROCESS_PVT;