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.11.12010000.3 2009/01/19 06:28:23 strivedi 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     BEGIN
638 
639       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
640               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
641                                         ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment'||
642                                         'p_source_doc_id = '||p_source_doc_id||
643                                         'p_source_doc_type = '||p_source_doc_type||
644                                         'p_target_doc_type = '||p_target_doc_type||
645                                         'p_target_doc_number = '||p_target_doc_number||
646                                         'p_reset_fixed_date_yn = '||p_reset_fixed_date_yn||
647                                         'p_copy_del_attachments_yn = '||p_copy_del_attachments_yn);
648       END IF;
649 
650       -- initialize the table type variable
651       delIdTab := delIdTabType();
652 
653       FOR del_rec IN del_cur LOOP
654           k := k+1;
655           delRecTab(k).deliverable_id := del_rec.deliverable_id;
656           delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
657           delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
658           delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
659           delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
660           delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
661           delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
662           delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
663           delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
664           delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
665           delRecTab(k).COMMENTS:= del_rec.COMMENTS;
666           delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
667           delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
668           delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
669           delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
670           delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
671           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
672           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
673           delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
674           delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
675           delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
676           delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
677           delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
678           delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
679           delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
680           delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
681           delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
682           delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
683           delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
684           delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
685           delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
686           delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
687           delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
688           delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
689           delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
690           delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
691           delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
692           delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
693           delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
694           delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
695           delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
696           delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
697           delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
698           delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
699           delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
700           delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
701           delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
702           delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
703           delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
704           delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
705           delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
706           delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
707           delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
708           delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
709           delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
710           delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
711           delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
712           delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
713           delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
714           delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
715           delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
716           delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
717           delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
718           delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
719           delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
720           delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
721           delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
722           delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
723           delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
724           delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
725           delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
726           delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
727           delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
728           delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
729           delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
730           delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
731           delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
732           delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
733           delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
734           delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
735           delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
736           delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
737           delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
738           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
739           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
740           delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
741           delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
742       END LOOP;
743 
744       -- commented as this is not supported by 8i PL/SQL Bug#3307941
745       /*OPEN del_cur;
746       FETCH del_cur BULK COLLECT INTO delRecTab;*/
747       IF delRecTab.COUNT <> 0 THEN
748           FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
749               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
750                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Inside loop'||to_char(delRecTab(i).deliverable_id));
751               END IF;
752 
753               IF copy_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
754                                p_target_doc_type => p_target_doc_type,
755                                p_target_contractual_doc_type => p_target_contractual_doctype) THEN
756 
757                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
758                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101a: Copy ALLOWED');
759                   END IF;
760 
761                   j := j+1;
762                   q := q+1;
763 
764                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
765                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'102: deliverable table record = '||q);
766                   END IF;
767 
768                   delNewTab(q) := delRecTab(i);
769 
770                   -- extend table type
771                   delIdTab.extend;
772                   delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
773 
774                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
775                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'103: deliverable IDs table record = '||j);
776                   END IF;
777 
778                   select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
779 
780                   delNewTab(q).business_document_id := p_target_doc_id;
781                   delNewTab(q).business_document_type := p_target_doc_type;
782                   delNewTab(q).business_document_number := p_target_doc_number;
783 
784                   -- Bug 5143307, check if source and target do are not same
785                   -- resolve source document relative due date events to target
786                   -- document relative due date event
787                   -- first initialize
788                   l_target_start_event_id := null;
789                   l_target_end_event_id := null;
790                   IF p_source_doc_type <> p_target_doc_type
791                      AND
792                      event_mapping_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
793                                                             p_target_doc_type => p_target_doc_type) THEN
794 
795                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
796                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'104: Source and Target docs are NOT SAME ');
797                           END IF;
798 
799                           IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null THEN
800 
801                                   -- resolve target start event id
802                                   l_target_start_event_id := resolveTargetDocEvent(
803                                   p_source_event_id => delRecTab(i).RELATIVE_ST_DATE_EVENT_ID,
804                                   p_target_doc_type => p_target_doc_type);
805                                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
806                                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'105: Found l_target_start_event_id = '||l_target_start_event_id);
807                                   END IF;
808 
809                                   -- raise error if could not resolve target event id
810                                   IF l_target_start_event_id is null THEN
811                                           Okc_Api.Set_Message(G_APP_NAME
812                                                     ,'OKC_DEL_COULD_NT_RESOLVE_EVT');
813                                           RAISE FND_API.G_EXC_ERROR;
814                                   END IF;
815                           END IF; -- IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null
816 
817                           IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null THEN
818                                   -- resolve target end event id
819                                   l_target_end_event_id := resolveTargetDocEvent(
820                                   p_source_event_id => delRecTab(i).RELATIVE_END_DATE_EVENT_ID,
821                                   p_target_doc_type => p_target_doc_type);
822 
823                                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
824                                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'106: Found l_target_end_event_id = '||l_target_end_event_id);
825                                   END IF;
826 
827                                   -- raise error if could not resolve target event id
828                                   IF l_target_end_event_id is null THEN
829                                           Okc_Api.Set_Message(G_APP_NAME
830                                                             ,'OKC_DEL_COULD_NT_RESOLVE_EVT');
831                                           RAISE FND_API.G_EXC_ERROR;
832                                   END IF;
833                           END IF; -- IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null
834 
835                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
836                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'107: Setting NEW resolved Start Event and End Event Ids');
837                           END IF;
838 
839                           -- set resolved start and event ids on new delRecTab
840                           delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
841                           delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
842                   END IF; -- IF p_source_doc_type <> p_target_doc_type
843 
844                   -- bug#3489625 POCST: DELIVERABLE ATTACHMENTS ARE NOT COPIED TO AMENDMENT
845                   delIdTab(j).del_id := delNewTab(q).deliverable_id;
846 
847                   -- store the deliverable_id to assign to the instances
848                   l_recurring_del_parent_id := delNewTab(q).deliverable_id;
849 
850                   -- flush amendment operation attributes
851                   delNewTab(q).amendment_operation:= null;
852                   delNewTab(q).amendment_notes:= null;
853                   delNewTab(q).summary_amend_operation_code:= null;
854 
855                   -- fix bug 3667895, carrying forward last amendment date during amendments
856                   --delNewTab(q).last_amendment_date:= null;
857 
858                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
859                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'108: Inside loop1'||to_char(delNewTab(q).deliverable_id));
860                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'109: q in def loop'||to_char(q));
861                   END IF;
862 
863                 IF delRecTab(i).recurring_yn = 'N' THEN
864           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
865             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'110: Recurring?'||delRecTab(i).recurring_yn);
866           END IF;
867 
868                     -- initialize all resolved dates to null
869                     delNewTab(q).start_event_date:= null;
870                     delNewTab(q).end_event_date:= null;
871                     delNewTab(q).actual_due_date:= null;
872 
873                 ELSIF delRecTab(i).recurring_yn = 'Y' THEN
874                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
875                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'111: Recurring?'||delRecTab(i).recurring_yn);
876                     END IF;
877 
878                     --OPEN del_ins_cur(delRecTab(i).deliverable_id);
879                     --Initialize the table with 0 rows
880                     delInsTab.DELETE;
881                     m := 0;
882         FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
883       m := m+1;
884       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
885       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
886       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
887       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
888       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
889       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
890       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
891       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
892       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
893       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
894       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
895       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
896       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
897       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
898       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
899       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
900       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
901       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
902       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
903       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
904       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
905       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
906       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
907       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
908       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
909       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
910       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
911       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
912       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
913       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
914       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
915       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
916       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
917       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
918       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
919       delInsTab(m).EXTERNAL_PARTY_ROLE := del_ins_rec.EXTERNAL_PARTY_ROLE;
920       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
921       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
922       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
923       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
924       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
925       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
926       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
927       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
928       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
929       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
930       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
931       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
932       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
933       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
934       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
935       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
936       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
937       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
938       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
939       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
940       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
941       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
942       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
943       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
944       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
945       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
946       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
947       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
948       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
949       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
950       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
951       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
952       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
953       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
954       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
955       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
956       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
957       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
958       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
959       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
960       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
961       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
962       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
963       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
964       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
965       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
966       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
967       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
968       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
969       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
970       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
971 
972                     END LOOP;
973                     IF del_ins_cur %ISOPEN THEN
974                       CLOSE del_ins_cur ;
975                     END IF;
976 
977                     /****
978                     commented as this is not supported by 8i PL/SQL Bug#3307941
979               OPEN del_ins_cur(delRecTab(i).deliverable_id);
980                     FETCH del_ins_cur BULK COLLECT INTO delInsTab;****/
981 
982                     IF delInsTab.COUNT <> 0 THEN
983                       FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
984                           j := j+1;
985                           q := q+1;
986                           delNewTab(q) := delInsTab(s);
987 
988                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
989                               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'112: Deliverable Instance record = '||q);
990                           END IF;
991 
992                           -- extend table type
993                           delIdTab.extend;
994 
995                           delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
996 
997                           select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
998 
999                           delNewTab(q).business_document_id := p_target_doc_id;
1000                           delNewTab(q).business_document_type := p_target_doc_type;
1001                           delNewTab(q).business_document_number := p_target_doc_number;
1002 
1003                           -- Bug 5143307, resolve target start and end events for
1004                           -- recurring instances, assuming these events are already
1005                           -- resolved above for recurring deliverable definition
1006                           IF p_source_doc_type <> p_target_doc_type THEN
1007                              IF l_target_start_event_id is not null THEN
1008                                      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1009                                              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);
1010                                      END IF;
1011 
1012                                      delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
1013                              END IF;
1014                              IF l_target_end_event_id is not null THEN
1015                                      IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1016                                              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);
1017                                      END IF;
1018 
1019                                     delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
1020                              END IF;
1021                           END IF; -- IF p_source_doc_type <> p_target_doc_type
1022 
1023                           -- instantiate parent del id for the instances
1024                           delNewTab(q).recurring_del_parent_id := l_recurring_del_parent_id;
1025                           delIdTab(j).del_id := delNewTab(q).deliverable_id;
1026 
1027                           -- flush amendment operation attributes
1028                           delNewTab(q).amendment_operation:= null;
1029                           delNewTab(q).amendment_notes:= null;
1030                           delNewTab(q).summary_amend_operation_code:= null;
1031                           delNewTab(q).last_amendment_date:= null;
1032                           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1033                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'115: Inside loop2'||to_char(delNewTab(q).deliverable_id));
1034                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'116: q in ins loop'||to_char(q));
1035                                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'117: s in ins loop'||to_char(s));
1036                           END IF;
1037             END LOOP;-- FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
1038           END IF; -- IF delInsTab.COUNT <> 0
1039                     IF del_ins_cur %ISOPEN THEN
1040                         CLOSE del_ins_cur ;
1041                     END IF;
1042                 END IF; -- ELSIF delRecTab(i).recurring_yn = 'Y'
1043               END IF; -- IF copy_allowed ()
1044             END LOOP; -- FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
1045       END IF;-- IF delRecTab.COUNT <> 0
1046       IF del_cur %ISOPEN THEN
1047         CLOSE del_cur ;
1048       END IF;
1049 
1050       IF delNewTab.COUNT <> 0 THEN
1051           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1052               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'118: Before insert');
1053           END IF;
1054           FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
1055               INSERT INTO okc_deliverables
1056                           (DELIVERABLE_ID,
1057                           BUSINESS_DOCUMENT_TYPE      ,
1058                           BUSINESS_DOCUMENT_ID        ,
1059                           BUSINESS_DOCUMENT_NUMBER    ,
1060                           DELIVERABLE_TYPE            ,
1061                           RESPONSIBLE_PARTY           ,
1062                           INTERNAL_PARTY_CONTACT_ID   ,
1063                           EXTERNAL_PARTY_CONTACT_ID   ,
1064                           DELIVERABLE_NAME            ,
1065                           DESCRIPTION                 ,
1066                           COMMENTS                    ,
1067                           DISPLAY_SEQUENCE            ,
1068                           FIXED_DUE_DATE_YN           ,
1069                           ACTUAL_DUE_DATE             ,
1070                           PRINT_DUE_DATE_MSG_NAME     ,
1071                           RECURRING_YN                ,
1072                           NOTIFY_PRIOR_DUE_DATE_VALUE ,
1073                           NOTIFY_PRIOR_DUE_DATE_UOM   ,
1074                           NOTIFY_PRIOR_DUE_DATE_YN    ,
1075                           NOTIFY_COMPLETED_YN         ,
1076                           NOTIFY_OVERDUE_YN           ,
1077                           NOTIFY_ESCALATION_YN        ,
1078                           NOTIFY_ESCALATION_VALUE     ,
1079                           NOTIFY_ESCALATION_UOM       ,
1080                           ESCALATION_ASSIGNEE         ,
1081                           AMENDMENT_OPERATION         ,
1082                           PRIOR_NOTIFICATION_ID       ,
1083                           AMENDMENT_NOTES             ,
1084                           COMPLETED_NOTIFICATION_ID   ,
1085                           OVERDUE_NOTIFICATION_ID     ,
1086                           ESCALATION_NOTIFICATION_ID  ,
1087                           LANGUAGE                    ,
1088                           ORIGINAL_DELIVERABLE_ID     ,
1089                           REQUESTER_ID                ,
1090                           EXTERNAL_PARTY_ID           ,
1091                           EXTERNAL_PARTY_ROLE         ,
1092                           RECURRING_DEL_PARENT_ID     ,
1093                           BUSINESS_DOCUMENT_VERSION   ,
1094                           RELATIVE_ST_DATE_DURATION   ,
1095                           RELATIVE_ST_DATE_UOM        ,
1096                           RELATIVE_ST_DATE_EVENT_ID   ,
1097                           RELATIVE_END_DATE_DURATION  ,
1098                           RELATIVE_END_DATE_UOM       ,
1099                           RELATIVE_END_DATE_EVENT_ID  ,
1100                           REPEATING_DAY_OF_MONTH      ,
1101                           REPEATING_DAY_OF_WEEK       ,
1102                           REPEATING_FREQUENCY_UOM     ,
1103                           REPEATING_DURATION          ,
1104                           FIXED_START_DATE            ,
1105                           FIXED_END_DATE              ,
1106                           MANAGE_YN                   ,
1107                           INTERNAL_PARTY_ID           ,
1108                           DELIVERABLE_STATUS          ,
1109                           STATUS_CHANGE_NOTES         ,
1110                           CREATED_BY                  ,
1111                           CREATION_DATE               ,
1112                           LAST_UPDATED_BY             ,
1113                           LAST_UPDATE_DATE            ,
1114                           LAST_UPDATE_LOGIN           ,
1115                           OBJECT_VERSION_NUMBER       ,
1116                           ATTRIBUTE_CATEGORY          ,
1117                           ATTRIBUTE1                  ,
1118                           ATTRIBUTE2                  ,
1119                           ATTRIBUTE3                  ,
1120                           ATTRIBUTE4                  ,
1121                           ATTRIBUTE5                  ,
1122                           ATTRIBUTE6                  ,
1123                           ATTRIBUTE7                  ,
1124                           ATTRIBUTE8                  ,
1125                           ATTRIBUTE9                  ,
1126                           ATTRIBUTE10                 ,
1127                           ATTRIBUTE11                 ,
1128                           ATTRIBUTE12                 ,
1129                           ATTRIBUTE13                 ,
1130                           ATTRIBUTE14                 ,
1131                           ATTRIBUTE15                 ,
1132                           DISABLE_NOTIFICATIONS_YN    ,
1133                           LAST_AMENDMENT_DATE         ,
1134                           BUSINESS_DOCUMENT_LINE_ID   ,
1135                           EXTERNAL_PARTY_SITE_ID      ,
1136                           START_EVENT_DATE            ,
1137                           END_EVENT_DATE              ,
1138                           SUMMARY_AMEND_OPERATION_CODE,
1139                           PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1140                           PAY_HOLD_PRIOR_DUE_DATE_UOM,
1141                           PAY_HOLD_PRIOR_DUE_DATE_YN,
1142                           PAY_HOLD_OVERDUE_YN
1143                           )
1144                           VALUES (
1145                           delNewTab(i).DELIVERABLE_ID,
1146                           delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
1147                           delNewTab(i).BUSINESS_DOCUMENT_ID        ,
1148                           delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
1149                           delNewTab(i).DELIVERABLE_TYPE            ,
1150                           delNewTab(i).RESPONSIBLE_PARTY           ,
1151                           delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
1152                           delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
1153                           delNewTab(i).DELIVERABLE_NAME            ,
1154                           delNewTab(i).DESCRIPTION                 ,
1155                           delNewTab(i).COMMENTS                    ,
1156                           delNewTab(i).DISPLAY_SEQUENCE            ,
1157                           delNewTab(i).FIXED_DUE_DATE_YN           ,
1158                           delNewTab(i).ACTUAL_DUE_DATE             ,
1159                           delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
1160                           delNewTab(i).RECURRING_YN                ,
1161                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
1162                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
1163                           delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
1164                           delNewTab(i).NOTIFY_COMPLETED_YN         ,
1165                           delNewTab(i).NOTIFY_OVERDUE_YN           ,
1166                           delNewTab(i).NOTIFY_ESCALATION_YN        ,
1167                           delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
1168                           delNewTab(i).NOTIFY_ESCALATION_UOM       ,
1169                           delNewTab(i).ESCALATION_ASSIGNEE         ,
1170                           delNewTab(i).AMENDMENT_OPERATION         ,
1171                           delNewTab(i).PRIOR_NOTIFICATION_ID       ,
1172                           delNewTab(i).AMENDMENT_NOTES             ,
1173                           delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
1174                           delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
1175                           delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
1176                           delNewTab(i).LANGUAGE                    ,
1177                           delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
1178                           delNewTab(i).REQUESTER_ID                ,
1179                           delNewTab(i).EXTERNAL_PARTY_ID           ,
1180                           delNewTab(i).EXTERNAL_PARTY_ROLE         ,
1181                           delNewTab(i).RECURRING_DEL_PARENT_ID     ,
1182                           delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
1183                           delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
1184                           delNewTab(i).RELATIVE_ST_DATE_UOM        ,
1185                           delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
1186                           delNewTab(i).RELATIVE_END_DATE_DURATION  ,
1187                           delNewTab(i).RELATIVE_END_DATE_UOM       ,
1188                           delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
1189                           delNewTab(i).REPEATING_DAY_OF_MONTH      ,
1190                           delNewTab(i).REPEATING_DAY_OF_WEEK       ,
1191                           delNewTab(i).REPEATING_FREQUENCY_UOM     ,
1192                           delNewTab(i).REPEATING_DURATION          ,
1193                           delNewTab(i).FIXED_START_DATE            ,
1194                           delNewTab(i).FIXED_END_DATE              ,
1195                           delNewTab(i).MANAGE_YN                   ,
1196                           delNewTab(i).INTERNAL_PARTY_ID           ,
1197                           delNewTab(i).DELIVERABLE_STATUS          ,
1198                           delNewTab(i).STATUS_CHANGE_NOTES         ,
1199                           delNewTab(i).CREATED_BY                  ,
1200                           delNewTab(i).CREATION_DATE               ,
1201                           delNewTab(i).LAST_UPDATED_BY             ,
1202                           delNewTab(i).LAST_UPDATE_DATE            ,
1203                           delNewTab(i).LAST_UPDATE_LOGIN           ,
1204                           delNewTab(i).OBJECT_VERSION_NUMBER       ,
1205                           delNewTab(i).ATTRIBUTE_CATEGORY          ,
1206                           delNewTab(i).ATTRIBUTE1                  ,
1207                           delNewTab(i).ATTRIBUTE2                  ,
1208                           delNewTab(i).ATTRIBUTE3                  ,
1209                           delNewTab(i).ATTRIBUTE4                  ,
1210                           delNewTab(i).ATTRIBUTE5                  ,
1211                           delNewTab(i).ATTRIBUTE6                  ,
1212                           delNewTab(i).ATTRIBUTE7                  ,
1213                           delNewTab(i).ATTRIBUTE8                  ,
1214                           delNewTab(i).ATTRIBUTE9                  ,
1215                           delNewTab(i).ATTRIBUTE10                 ,
1216                           delNewTab(i).ATTRIBUTE11                 ,
1217                           delNewTab(i).ATTRIBUTE12                 ,
1218                           delNewTab(i).ATTRIBUTE13                 ,
1219                           delNewTab(i).ATTRIBUTE14                 ,
1220                           delNewTab(i).ATTRIBUTE15                 ,
1221                           delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
1222                           delNewTab(i).LAST_AMENDMENT_DATE         ,
1223                           delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
1224                           delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
1225                           delNewTab(i).START_EVENT_DATE            ,
1226                           delNewTab(i).END_EVENT_DATE              ,
1227                           delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
1228                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1229                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
1230                           delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
1231                           delNewTab(i).PAY_HOLD_OVERDUE_YN
1232                           );
1233           END LOOP;
1234           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1235               FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'119: New deliverables inserted');
1236           END IF;
1237       END IF; -- IF delNewTab.COUNT <> 0
1238 
1239       -- copy any existing attachments if allowed
1240       IF p_copy_del_attachments_yn = 'Y' THEN
1241 
1242           -- copy any existing attachments
1243           IF delIdTab.COUNT <> 0 THEN
1244               FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1245                   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1246                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Inside loop'||to_char(delIdTab(i).del_id));
1247                   END IF;
1248                   -- check if attachments exists
1249                   IF attachment_exists(p_entity_name => G_ENTITY_NAME
1250                                       ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
1251 
1252                       -- copy attachments
1253                       -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
1254                       fnd_attached_documents2_pkg.copy_attachments(
1255                                   X_from_entity_name =>  G_ENTITY_NAME,
1256                                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
1257                                   X_to_entity_name   =>  G_ENTITY_NAME,
1258                                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
1259                                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
1260                                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
1261                                   );
1262                       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1263                           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'121: Attachments copied for delId: '||to_char(delIdTab(i).del_id));
1264                       END IF;
1265                   END IF; -- IF attachment_exists()
1266               END LOOP; -- FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1267           END IF;--delRecTab.COUNT
1268       END IF; -- IF p_copy_del_attachments_yn = 'Y'
1269 
1270       x_return_status := l_return_status;
1271       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1272           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'122: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment' );
1273       END IF;
1274 
1275     EXCEPTION
1276     WHEN FND_API.G_EXC_ERROR THEN
1277             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1278                 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');
1279             END IF;
1280         IF del_cur %ISOPEN THEN
1281           CLOSE del_cur ;
1282         END IF;
1283     x_return_status := G_RET_STS_ERROR;
1284       FND_MSG_PUB.Count_And_Get(
1285         p_count =>  x_msg_count,
1286         p_data  =>  x_msg_data
1287         );
1288     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1289             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1290                 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));
1291             END IF;
1292         IF del_cur %ISOPEN THEN
1293           CLOSE del_cur ;
1294         END IF;
1295     x_return_status := G_RET_STS_UNEXP_ERROR;
1296       FND_MSG_PUB.Count_And_Get(
1297         p_count =>  x_msg_count,
1298         p_data  =>  x_msg_data
1299         );
1300 
1301     WHEN OTHERS THEN
1302             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1303                 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));
1304             END IF;
1305         IF del_cur %ISOPEN THEN
1306           CLOSE del_cur ;
1307         END IF;
1308         x_return_status := G_RET_STS_UNEXP_ERROR;
1309       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1310       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1311       END IF;
1312       FND_MSG_PUB.Count_And_Get(
1313         p_count =>  x_msg_count,
1314         p_data  =>  x_msg_data
1315         );
1316     END copy_del_for_amendment;
1317 
1318 
1319     -- this function checks if the a bus_doc_event exists
1320     -- for a given combination of busdoc_type and event_id
1321     FUNCTION event_matches(
1322     p_bus_doc_type  IN VARCHAR2
1323     ,p_event_id     IN NUMBER)
1324     RETURN BOOLEAN
1325     IS
1326 
1327     CURSOR event_cur
1328     IS
1329     SELECT 'X'
1330     FROM okc_bus_doc_events_b
1331     WHERE bus_doc_type = p_bus_doc_type
1332     AND   bus_doc_event_id = p_event_id;
1333 
1334     event_rec  event_cur%ROWTYPE;
1335     l_api_name        CONSTANT VARCHAR2(30) := 'event_matches';
1336     l_return_value BOOLEAN := FALSE;
1337 
1338     BEGIN
1339 
1340             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1341                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.event_matches');
1342             END IF;
1343             OPEN event_cur;
1344             FETCH event_cur INTO event_rec;
1345             IF event_cur%FOUND THEN
1346           l_return_value := TRUE;
1347             ELSE
1348           l_return_value := FALSE;
1349             END IF;
1350             CLOSE event_cur;
1351             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1352                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Leaving event_matches');
1353             END IF;
1354       RETURN l_return_value;
1355     EXCEPTION
1356     WHEN OTHERS THEN
1357         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1358           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving event_matches with Exception');
1359         END IF;
1360         IF event_cur %ISOPEN THEN
1361           CLOSE event_cur ;
1362         END IF;
1363           RETURN l_return_value;
1364     END event_matches;
1365 
1366 
1367     -- function returns Y if the busdoc type and
1368     -- deliverable type belong to the same class
1369     FUNCTION deltype_matches(p_del_type IN VARCHAR2
1370                           ,p_busdoc_type IN VARCHAR2)
1371     RETURN VARCHAR2
1372     IS
1373 
1374    /*
1375     CURSOR delType_cur IS
1376     select 'Y'
1377     FROM okc_bus_doc_types_b docType,
1378     okc_del_bus_doc_combxns bdc
1379     WHERE docType.document_type_class = bdc.document_type_class
1380     AND docType.document_type = p_busdoc_type
1381     and bdc.deliverable_type = p_del_type;
1382     */
1383    --Repository change: Changed cursor to look at okc_deliverable_types_b
1384     -- updated cursor for bug#4069955
1385     CURSOR delType_cur IS
1386     select 'Y'
1387     FROM
1388     okc_bus_doc_types_b doctyp
1389     ,okc_del_bus_doc_combxns deltyp
1390     where
1391     doctyp.document_type_class = deltyp.document_type_class
1392     AND doctyp.document_type = p_busdoc_type
1393     AND deltyp.deliverable_type_code = p_del_type;
1394 
1395     l_deltype_matches    VARCHAR2(1);
1396     l_api_name        CONSTANT VARCHAR2(30) := 'deltype_matches';
1397 
1398     BEGIN
1399 
1400     OPEN delType_cur;
1401     FETCH delType_cur INTO l_deltype_matches;
1402     CLOSE delType_cur;
1403         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1404           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: DelType Matches is :'||l_deltype_matches);
1405         END IF;
1406     RETURN(l_deltype_matches);
1407 
1408     EXCEPTION
1409     WHEN OTHERS THEN
1410         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1411           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving Deltype_Matches with Exception');
1412         END IF;
1413         IF delType_cur %ISOPEN THEN
1414           CLOSE delType_cur ;
1415         END IF;
1416             RETURN(l_deltype_matches);
1417 
1418     END deltype_matches;
1419 
1420 
1421     /* Checks if the relative deliverable can be copied over to target document
1422     based on start or end date event matching the target response document type.
1423     Fixed date deliverables are copied over even if the dates are null.
1424     */
1425     ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1426     -- where fixed dates are nulled out
1427     -- bug#3675608 added new param p_target_doctype to check if recurring del end event
1428     -- matches target_doctype.
1429 
1430     FUNCTION copy_response_allowed (p_delrec  IN   okc_deliverables%ROWTYPE
1431     ,p_target_response_doctype  IN VARCHAR2
1432     ,p_target_doctype  IN VARCHAR2
1433     ) RETURN VARCHAR2
1434     IS
1435     l_copy   VARCHAR2(1);
1436     l_start_copy   VARCHAR2(1);
1437     l_end_copy   VARCHAR2(1);
1438     l_api_name        CONSTANT VARCHAR2(30) := 'copy_response_allowed';
1439 
1440     BEGIN
1441 
1442       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1443         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' 100: Inside copy_response_allowed ');
1444         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1445         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn is :'||p_delrec.fixed_due_date_yn);
1446         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_response_doctype is :'||p_target_response_doctype);
1447         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name is :'||p_delrec.deliverable_name);
1448         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id is :'||p_delrec.deliverable_id);
1449         END IF;
1450                     --If not a recurring deliverable
1451                     IF p_delrec.recurring_yn = 'N' THEN
1452                         IF p_delrec.fixed_due_date_yn = 'Y' THEN
1453                         -- copy deliverable as is
1454                         l_copy := 'Y';
1455                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1456                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1457                             END IF;
1458                         ELSE  --  p_delrec.fixed_due_date_yn = 'N'
1459                             IF p_delrec.relative_st_date_event_id is not null THEN
1460                                 -- match the event doctype to target doctype
1461                                 IF p_target_response_doctype is not null THEN
1462                                     -- match the event doctype to p_target_response_doctype
1463                                         IF event_matches(p_target_response_doctype
1464                                             ,p_delrec.relative_st_date_event_id) THEN
1465                                             --copy deliverable
1466                                             l_copy := 'Y';
1467                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1468                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1469                                                 '100: msg3 :'||l_copy);
1470                                             END IF;
1471                                         END IF; -- event_matches
1472                                 ELSE
1473                                     l_copy :='N';
1474                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1475                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1476                                         '100: msg4 :'||l_copy);
1477                                     END IF;
1478                                 END IF; -- event_matches
1479                             ELSE -- start event id is null
1480                                 l_copy := 'Y';
1481                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1482                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1483                                     '100: msg5 :'||l_copy);
1484                                 END IF;
1485                             END IF; -- p_delrec.relative_st_date_event_id is not null
1486 
1487                         END IF; -- fixed_due_date_yn = 'Y'
1488                         --------------------------------------------------------
1489                     --If recurring deliverable
1490                     ELSIF p_delrec.recurring_yn = 'Y' THEN
1491                         l_end_copy := null;
1492                         l_start_copy := null;
1493                         -- check if the recurring del has a fixed start or end date
1494                         IF p_delrec.fixed_start_date is not null THEN
1495                             IF p_delrec.fixed_end_date is not null THEN
1496                                 --copy deliverables
1497                                 l_end_copy := 'Y';
1498                                 l_start_copy := 'Y';
1499                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1500                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1501                                     '100: msg6 : both are Y');
1502                                 END IF;
1503                             ELSE -- fixed end date is null
1504                             IF p_delrec.relative_end_date_event_id is not null THEN
1505                                  IF p_target_response_doctype is not null THEN
1506                                     -- match the event doctype to p_target_response_doctype
1507                                         IF event_matches(p_target_response_doctype
1508                                         ,p_delrec.relative_end_date_event_id) THEN
1509                                         --copy deliverable
1510                                         l_end_copy := 'Y';
1511                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1512                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1513                                                 '100: end msg2 :'||l_end_copy);
1514                                             END IF;
1515                                         END IF;
1516                                  ELSE
1517                                     l_end_copy := 'N';
1518                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1519                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1520                                         '100: end msg3 :'||l_end_copy);
1521                                     END IF;
1522                                 END IF;  -- event matches
1523                             ELSE -- end date event is null
1524                                 l_end_copy := 'Y';
1525                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1526                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1527                                     '100: end msg4 :'||l_end_copy);
1528                                 END IF;
1529                             END IF; -- end_date event is not null
1530                             END IF; -- fixed_end_date is not null
1531                                 l_start_copy := 'Y';
1532                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1533                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1534                                     '100: start msg5 :'||l_start_copy);
1535                                 END IF;
1536                         ELSE  -- fixed start date is null
1537                           IF p_delrec.relative_st_date_event_id is not null THEN
1538                                 IF p_target_response_doctype is not null THEN
1539                                     IF event_matches(p_target_response_doctype
1540                                     ,p_delrec.relative_st_date_event_id) THEN
1541                                     --copy deliverable
1542                                     l_start_copy := 'Y';
1543                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1544                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1545                                             '100: start msg2 :'||l_start_copy);
1546                                         END IF;
1547                                     END IF;
1548                                 ELSE
1549                                     l_start_copy := 'N';
1550                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1551                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1552                                         '100: start msg3 :'||l_start_copy);
1553                                     END IF;
1554                                 END IF;
1555                           ELSE -- start date event id is null
1556                             l_start_copy := 'Y';
1557                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1558                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1559                                 '100: start msg4 :'||l_start_copy);
1560                             END IF;
1561                           END IF; -- st event id is not null
1562                             IF p_delrec.fixed_end_date is null THEN
1563                               IF p_delrec.relative_end_date_event_id is not null THEN
1564                                 IF p_target_response_doctype is not null THEN
1565                                     -- match the event doctype to p__doctype
1566                                         IF event_matches(p_target_response_doctype
1567                                         ,p_delrec.relative_end_date_event_id) THEN
1568                                         --copy deliverable
1569                                         l_end_copy := 'Y';
1570                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1571                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1572                                                 '100: start end msg2 :'||l_end_copy);
1573                                             END IF;
1574                                         ELSE  -- event_matches is not true
1575                                         --check for target_contractual bug#3675608
1576                                         IF event_matches(p_target_doctype
1577                                            ,p_delrec.relative_end_date_event_id) THEN
1578                                                 --copy deliverable
1579                                                 l_end_copy := 'Y';
1580                                         END IF;
1581                                         END IF; -- event_matches
1582 
1583                                 ELSE
1584                                    l_end_copy := 'N';
1585                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1586                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1587                                         '100: start end msg3 :'||l_end_copy);
1588                                     END IF;
1589                                 END IF; -- event matches
1590                               ELSE -- end event id is null
1591                                 l_end_copy := 'Y';
1592                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1593                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1594                                         '100: start end msg4 :'||l_end_copy);
1595                                     END IF;
1596                               END IF; -- end event id is not null
1597                              ELSE -- fixed end date is not null
1598                                l_end_copy := 'Y';
1599                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1600                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1601                                     '100: start end msg5 :'||l_end_copy);
1602                                 END IF;
1603                              END IF; -- fixed end date is null
1604 
1605                         END IF; -- fixed st date is null
1606                         IF l_end_copy = 'Y' AND
1607                            l_start_copy = 'Y' THEN
1608                            l_copy := 'Y';
1609                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1610                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1611                                 '100: final msg1 :'||l_copy);
1612                             END IF;
1613                         ELSE
1614                             l_copy := 'N';
1615                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1616                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1617                                 '100: final msg2 :'||l_copy);
1618                             END IF;
1619                         END IF;
1620                     END IF; -- recurring yn
1621       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1622         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1623       END IF;
1624     RETURN(l_copy);
1625     END copy_response_allowed;
1626 
1627 ------------------
1628     /* Checks if the relative deliverable can be copied over to target document
1629     based on start or end date event matching the target document type or
1630     target contractual document type. Fixed date deliverables are copied over
1631     even if the dates are null.
1632     */
1633     ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1634     -- where fixed dates are nulled out
1635     FUNCTION copy_allowed (p_delrec  IN   okc_deliverables%ROWTYPE,
1636     p_target_doc_type              IN VARCHAR2,
1637     p_target_contractual_doctype  IN VARCHAR2
1638     ) RETURN VARCHAR2
1639     IS
1640     l_copy   VARCHAR2(1);
1641     l_start_copy   VARCHAR2(1);
1642     l_end_copy   VARCHAR2(1);
1643     l_api_name        CONSTANT VARCHAR2(30) := 'copy_allowed';
1644 
1645     BEGIN
1646 
1647       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1648         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Inside copy_allowed' );
1649         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1650         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn :'||p_delrec.fixed_due_date_yn);
1651         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' target doc type :'||p_target_doc_type);
1652         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_contractual_doctype :'||p_target_contractual_doctype);
1653         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name :'||p_delrec.deliverable_name);
1654         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id :'||p_delrec.deliverable_id);
1655       END IF;
1656                     --If not a recurring deliverable
1657                     IF p_delrec.recurring_yn = 'N' THEN
1658                         IF p_delrec.fixed_due_date_yn = 'Y' THEN
1659                         -- copy deliverable as is
1660                         l_copy := 'Y';
1661                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1662                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1663                             END IF;
1664                         ELSE -- p_delrec.fixed_due_date_yn = 'N'
1665                             IF p_delrec.relative_st_date_event_id is not null THEN
1666                                 -- match the event doctype to target doctype
1667                                 IF event_matches(p_target_doc_type
1668                                 ,p_delrec.relative_st_date_event_id) THEN
1669                                 --copy deliverable
1670                                 l_copy := 'Y';
1671                                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1672                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1673                                         '100: msg2 :'||l_copy);
1674                                     END IF;
1675                                 ELSE
1676                                     l_copy :='N';
1677                                     IF p_target_contractual_doctype is not null THEN
1678                                     -- match the event doctype to p_target_contractual_doctype
1679                                         IF event_matches(p_target_contractual_doctype
1680                                             ,p_delrec.relative_st_date_event_id) THEN
1681                                             --copy deliverable
1682                                             l_copy := 'Y';
1683                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1684                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1685                                                 '100: msg3 :'||l_copy);
1686                                             END IF;
1687                                         END IF; -- event_matches
1688                                     END IF; -- p_target_contractual_doctype is not null
1689                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1690                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1691                                             '100: msg4 :'||l_copy);
1692                                         END IF;
1693                                 END IF; -- event_matches
1694                             ELSE -- start event id is null
1695                                 l_copy := 'Y';
1696                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1697                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1698                                     '100: msg5 :'||l_copy);
1699                                 END IF;
1700                             END IF; -- p_delrec.relative_st_date_event_id is not null
1701 
1702                         END IF; -- fixed_due_date_yn = 'Y'
1703                         --------------------------------------------------------
1704                     --If recurring deliverable
1705                     ELSIF p_delrec.recurring_yn = 'Y' THEN
1706                         l_end_copy := null;
1707                         l_start_copy := null;
1708                         -- check if the recurring del has a fixed start or end date
1709                         IF p_delrec.fixed_start_date is not null THEN
1710                             IF p_delrec.fixed_end_date is not null THEN
1711                                 --copy deliverables
1712                                 l_end_copy := 'Y';
1713                                 l_start_copy := 'Y';
1714                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1715                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1716                                     '100: msg6 : both are Y');
1717                                 END IF;
1718                             ELSE -- fixed end date is null
1719                             IF p_delrec.relative_end_date_event_id is not null THEN
1720                                 IF event_matches(p_target_doc_type
1721                                    ,p_delrec.relative_end_date_event_id) THEN
1722                                     --copy deliverable
1723                                     l_end_copy := 'Y';
1724                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1725                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1726                                         '100: end msg1 :'||l_end_copy);
1727                                     END IF;
1728                                 ELSE
1729                                     l_end_copy := 'N';
1730                                     IF p_target_contractual_doctype is not null THEN
1731                                     -- match the event doctype to p_target_contractual_doctype
1732                                         IF event_matches(p_target_contractual_doctype
1733                                         ,p_delrec.relative_end_date_event_id) THEN
1734                                         --copy deliverable
1735                                         l_end_copy := 'Y';
1736                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1737                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1738                                                 '100: end msg2 :'||l_end_copy);
1739                                             END IF;
1740                                         END IF;
1741                                      END IF;
1742                                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1743                                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1744                                             '100: end msg3 :'||l_end_copy);
1745                                         END IF;
1746                                 END IF;  -- event matches
1747                             ELSE -- end date event is null
1748                                 l_end_copy := 'Y';
1749                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1750                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1751                                     '100: end msg4 :'||l_end_copy);
1752                                 END IF;
1753                             END IF; -- end_date event is not null
1754                             END IF; -- fixed_end_date is not null
1755                                 l_start_copy := 'Y';
1756                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1757                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1758                                     '100: start msg5 :'||l_start_copy);
1759                                 END IF;
1760                         ELSE  -- fixed start date is null
1761                           IF p_delrec.relative_st_date_event_id is not null THEN
1762                                 IF event_matches(p_target_doc_type
1763                                    ,p_delrec.relative_st_date_event_id) THEN
1764                                     --copy deliverable
1765                                     l_start_copy := 'Y';
1766                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1767                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1768                                         '100: start msg1 :'||l_start_copy);
1769                                     END IF;
1770                                 ELSE
1771                                     l_start_copy := 'N';
1772                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1773                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1774                                         '100: start msg2 :'||l_start_copy);
1775                                     END IF;
1776                                     IF p_target_contractual_doctype is not null THEN
1777                                         IF event_matches(p_target_contractual_doctype
1778                                             ,p_delrec.relative_st_date_event_id) THEN
1779                                             --copy deliverable
1780                                             l_start_copy := 'Y';
1781                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1782                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1783                                                 '100: start msg3 :'||l_start_copy);
1784                                             END IF;
1785                                         END IF; -- event matches
1786                                     END IF; -- target contractual not null
1787                                  END IF; -- event matches
1788                           ELSE -- start date event id is null
1789                             l_start_copy := 'Y';
1790                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1791                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1792                                     '100: start msg4 :'||l_start_copy);
1793                                 END IF;
1794                           END IF; -- st event id is not null
1795                             IF p_delrec.fixed_end_date is null THEN
1796                               IF p_delrec.relative_end_date_event_id is not null THEN
1797                                 IF event_matches(p_target_doc_type
1798                                 ,p_delrec.relative_end_date_event_id) THEN
1799                                     --copy deliverable
1800                                     l_end_copy := 'Y';
1801                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1802                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1803                                         '100: start end msg1 :'||l_end_copy);
1804                                     END IF;
1805                                 ELSE
1806                                    l_end_copy := 'N';
1807                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1808                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1809                                         '100: start end msg2 :'||l_end_copy);
1810                                     END IF;
1811                                     IF p_target_contractual_doctype is not null THEN
1812                                     -- match the event doctype to p_target_contractual_doctype
1813                                         IF event_matches(p_target_contractual_doctype
1814                                         ,p_delrec.relative_end_date_event_id) THEN
1815                                         --copy deliverable
1816                                         l_end_copy := 'Y';
1817                                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1818                                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1819                                                 '100: start end msg3 :'||l_end_copy);
1820                                             END IF;
1821                                         END IF; -- event matches
1822                                      END IF; -- target contractual not null
1823                                 END IF; -- event matches
1824                               ELSE -- end event id is null
1825                                 l_end_copy := 'Y';
1826                                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1827                                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1828                                         '100: start end msg4 :'||l_end_copy);
1829                                     END IF;
1830                               END IF; -- end event id is not null
1831                              ELSE -- fixed end date is not null
1832                                l_end_copy := 'Y';
1833                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1834                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1835                                     '100: start end msg5 :'||l_end_copy);
1836                                 END IF;
1837                              END IF; -- fixed end date is null
1838 
1839                         END IF; -- fixed st date is null
1840                         IF l_end_copy = 'Y' AND
1841                            l_start_copy = 'Y' THEN
1842                            l_copy := 'Y';
1843                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1844                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1845                                 '100: final msg1 :'||l_copy);
1846                             END IF;
1847                         ELSE
1848                             l_copy := 'N';
1849                             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1850                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1851                                 '100: final msg2 :'||l_copy);
1852                             END IF;
1853                         END IF;
1854                     END IF; -- recurring yn
1855       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1856         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1857       END IF;
1858     RETURN(l_copy);
1859     END copy_allowed;
1860 ----------------------------------------------------------
1861 
1862     /*** This API is invoked from OKC_TERMS_PVT.COPY_TC.
1863     Copies deliverables from source to target documents
1864     Template to template, Template to Business document
1865     Busdoc to busdoc of same or different types.
1866     The procedure will query deliverables from source
1867     business document WHERE amendment_operation is NOT 'DELETE'.
1868     (The reason of this check: In case of RFQ, amendments operation
1869     and descriptions are maintained in the current copy,
1870     hence all deletes are just soft deletes.
1871     So the copy procedure should not copy deliverables which
1872     were deleted from the RFQ during amendment).
1873     Bug#4126344
1874     p_carry_forward_ext_party_yn: If set to Y carry forward following attributes
1875     from source doc in busdoc to busdoc copy
1876      external_party_contact_id,
1877      external_party_id,
1878      external_party_site_id,
1879      external_party_role
1880     Else reset from parameters
1881     p_carry_forward_int_contact_yn: If set to Y carry forward following attributes from source doc in busdoc to busdoc copy
1882      internal_party_contact_id,
1883     ***/
1884 
1885     PROCEDURE copy_deliverables (
1886         p_api_version           IN NUMBER,
1887         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
1888         p_source_doc_id             IN NUMBER,
1889         p_source_doc_type           IN VARCHAR2,
1890         p_target_doc_id             IN NUMBER,
1891         p_target_doc_type           IN VARCHAR2,
1892         p_target_doc_number         IN VARCHAR2,
1893         p_target_contractual_doctype IN VARCHAR2 default null,
1894         p_target_response_doctype    IN VARCHAR2 default null,
1895         p_initialize_status_yn      IN VARCHAR2 default 'Y',
1896         p_copy_del_attachments_yn   IN VARCHAR2 default 'Y',
1897         p_internal_party_id         IN NUMBER default null,
1898         p_reset_fixed_date_yn       IN VARCHAR2 default 'N',
1899         p_internal_contact_id       IN NUMBER default null,
1900         p_external_party_id         IN NUMBER default null,
1901         p_external_party_site_id    IN NUMBER default null,
1902         p_external_contact_id       IN NUMBER default null,
1903         x_msg_data              OUT NOCOPY VARCHAR2,
1904         x_msg_count                 OUT NOCOPY NUMBER,
1905         x_return_status             OUT NOCOPY VARCHAR2,
1906         p_carry_forward_ext_party_yn  IN  VARCHAR2 default 'N',
1907         p_carry_forward_int_contact_yn IN  VARCHAR2 default 'Y'
1908         )
1909     IS
1910     CURSOR del_cur IS
1911     SELECT *
1912     FROM OKC_DELIVERABLES
1913     WHERE business_document_id = p_source_doc_id
1914     AND   business_document_version = -99
1915     AND   business_document_type = p_source_doc_type
1916     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
1917     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
1918     AND   recurring_del_parent_id is null;
1919 
1920     delRecTab           delRecTabType;
1921     delNewTab           delRecTabType;
1922     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
1923     TYPE delIdTabType IS TABLE OF delIdRecType;
1924     delIdTab    delIdTabType;
1925     j PLS_INTEGER := 0;
1926     k PLS_INTEGER := 0;
1927     l_api_name      CONSTANT VARCHAR2(30) :='copy_deliverables';
1928     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1929     l_deliverable_id    NUMBER;
1930     l_from_pk1_value    VARCHAR2(100);
1931     l_result            BOOLEAN;
1932     l_copy              VARCHAR2(1) := 'N';
1933     l_copy_attachments  VARCHAR2(1) := 'N';
1934         --ER strivedi
1935     l_doc_type_class okc_bus_doc_types_b.document_type_class%TYPE;
1936 
1937     -- 11.5.10+ code bug#4148082
1938     cursor getExtPartyRole is
1939     select resp.resp_party_code
1940     from okc_resp_parties_b resp, okc_bus_doc_types_b busdoc
1941     where resp.document_type_class = busdoc.document_type_class
1942     and resp.intent = busdoc.intent
1943     and resp.internal_external_flag = 'EXTERNAL'
1944     and busdoc.document_type = p_target_doc_type;
1945     l_ext_party_role  okc_resp_parties_b.resp_party_code%TYPE;
1946 
1947     --ER Structured Terms Authoring in Repository strivedi
1948     CURSOR getRepDefaultInternalContactId IS
1949     SELECT pf.person_id contact_id
1950     FROM  per_all_workforce_v  pf,fnd_user fu
1951     WHERE fu.user_id = fnd_global.user_id
1952     AND   pf.person_id = fu.employee_id;
1953     l_rep_dflt_int_contact_id okc_deliverables.INTERNAL_PARTY_CONTACT_ID%TYPE;
1954     --End of ER Code Modifications
1955 
1956     BEGIN
1957             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1958                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
1959                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
1960                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
1961                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target contractual doctype:'||p_target_contractual_doctype);
1962                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target response doctype:'||p_target_response_doctype);
1963             END IF;
1964                 -- initialize the table type variable
1965                 delIdTab := delIdTabType();
1966 
1967         FOR del_rec IN del_cur LOOP
1968 
1969       k := k+1;
1970       delRecTab(k).deliverable_id := del_rec.deliverable_id;
1971       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
1972       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
1973       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
1974       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
1975       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
1976       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
1977       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
1978       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
1979       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
1980       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
1981       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
1982       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
1983       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
1984       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
1985       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
1986       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
1987       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
1988       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
1989       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
1990       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
1991       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
1992       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
1993       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
1994       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
1995       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
1996       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
1997       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
1998       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
1999       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
2000       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
2001       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
2002       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
2003       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
2004       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
2005       delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
2006       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
2007       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
2008       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
2009       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
2010       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
2011       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
2012       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
2013       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
2014       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
2015       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
2016       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
2017       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
2018       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
2019       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
2020       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
2021       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
2022       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
2023       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
2024       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
2025       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
2026       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
2027       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
2028       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
2029       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
2030       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
2031       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
2032       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
2033       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
2034       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
2035       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
2036       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
2037       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
2038       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
2039       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
2040       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
2041       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
2042       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
2043       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
2044       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
2045       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
2046       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
2047       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
2048       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
2049       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
2050       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
2051       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
2052       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
2053       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
2054       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
2055       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
2056       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
2057 
2058 
2059 
2060             END LOOP;
2061         IF del_cur %ISOPEN THEN
2062           CLOSE del_cur ;
2063         END IF;
2064             -- commented as this is not supported by 8i PL/SQL Bug#3307941
2065             /*OPEN del_cur;
2066             FETCH del_cur BULK COLLECT INTO delRecTab;*/
2067 
2068 
2069 
2070         IF p_source_doc_type = 'TEMPLATE' THEN
2071             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2072                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
2073             END IF;
2074             -- copy from template to template
2075             IF p_target_doc_type = 'TEMPLATE' THEN
2076             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2077                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
2078             END IF;
2079 
2080                /*** OPEN del_cur;
2081                 FETCH del_cur BULK COLLECT INTO delRecTab;**/
2082                 IF delRecTab.COUNT <> 0 THEN
2083                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2084                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2085                     END IF;
2086                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2087                     j := j+1;
2088                     -- extend table type
2089                     delIdTab.extend;
2090                     delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2091                     delNewTab(j) := delRecTab(i);
2092                     select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
2093                     delIdTab(j).del_id := delNewTab(j).deliverable_id;
2094                     delNewTab(j).original_deliverable_id :=  delNewTab(j).deliverable_id;
2095                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2096                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2097                     END IF;
2098                     -- bug# 4335441 If p_internal_party_id is not null then assign it to new Template
2099                     IF p_internal_party_id is not null THEN
2100                         delNewTab(j).internal_party_id := p_internal_party_id;
2101                     END IF;
2102 
2103                 END LOOP;
2104                 END IF;-- cur_del%notfound
2105 ---------------------------------------------------------------------------------
2106             -- copy from template to business document
2107             -- example template to RFQ
2108             ELSIF p_target_doc_type <> 'TEMPLATE' THEN
2109             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2110                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is not template');
2111             END IF;
2112 
2113                 IF p_target_contractual_doctype is not null THEN
2114                /*** OPEN del_cur;
2115                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2116                 IF delRecTab.COUNT <> 0 THEN
2117                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2118                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2119                         ,'100: target_contractual_doctype is not null and '||
2120                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2121                     END IF;
2122                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2123                     -- initialize
2124                     l_copy := 'N';
2125                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2126                     p_target_contractual_doctype);
2127                     IF l_copy = 'Y' THEN
2128                         j := j+1;
2129                         -- extend table type
2130                         delIdTab.extend;
2131                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2132                         delNewTab(j) := delRecTab(i);
2133                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2134                         from dual;
2135                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2136                         -- If party and contact info is null then assign the parameter values
2137                         delNewTab(j).internal_party_id :=
2138                         NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2139                         delNewTab(j).internal_party_contact_id :=
2140                         NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2141                         -- Nullout external party attributes as there are no external
2142                         -- parties on Negotiation document
2143                         delNewTab(j).external_party_contact_id := null;
2144                         delNewTab(j).external_party_id := null;
2145             delNewTab(j).external_party_role := null;
2146                         delNewTab(j).external_party_site_id := null;
2147                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2148                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2149                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2150                         END IF;
2151                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2152                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2153                             IF l_copy = 'Y' THEN
2154                                 j := j+1;
2155                                 -- extend table type
2156                                 delIdTab.extend;
2157                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2158                                 delNewTab(j) := delRecTab(i);
2159                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2160                                 from dual;
2161                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2162                                 -- If party and contact info is null then assign the parameter values
2163                                 delNewTab(j).internal_party_id :=
2164                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2165                                 delNewTab(j).internal_party_contact_id :=
2166                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2167                                 -- Nullout external party attributes as there are no external
2168                                 -- parties on Negotiation document
2169                                 delNewTab(j).external_party_contact_id := null;
2170                                 delNewTab(j).external_party_id := null;
2171               delNewTab(j).external_party_role := null;
2172                                 delNewTab(j).external_party_site_id := null;
2173                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2174                                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2175                                 ,'100: New Deliverable Id from copy_response_allowed :'||
2176                                 to_char(delNewTab(j).deliverable_id));
2177                                 END IF;
2178                             END IF;
2179                     END IF;-- l_copy is 'Y'
2180                 END LOOP;
2181                 END IF; -- del_cur%NOTFOUND
2182 
2183                 /*** This copy is from template to contract.
2184                 Only contractual, internal purchasing deliverables are copied
2185                 Template to SPO or RFI ****/
2186                ELSIF p_target_contractual_doctype is null THEN
2187 
2188                                 -- bug#4148082 set ext party role during template to PO copy
2189                                 OPEN getExtPartyRole;
2190                                 FETCH getExtPartyRole INTO l_ext_party_role;
2191                                 CLOSE getExtPartyRole;
2192 
2193 				-- ER Structured Terms Authoring in Repository strivedi
2194                                 OPEN getRepDefaultInternalContactId;
2195                                 FETCH getRepDefaultInternalContactId INTO l_rep_dflt_int_contact_id;
2196                                 CLOSE getRepDefaultInternalContactId;
2197                 /***OPEN del_cur;
2198                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2199                 IF delRecTab.COUNT <> 0 THEN
2200                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2201                     -- initialize
2202                     l_copy := 'N';
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,
2205                       '100: Old Deliverable Id :'||to_char(delRecTab(i).deliverable_id));
2206                    END IF;
2207 
2208 
2209                   --ER Repository Structured Terms Authoring
2210                   --  if the target document type is a repository contract type, then Change the deliverable type
2211                   --  from INTERNAL_PURCHASING to INTERNAL as  INTERNAL_PURCHASING is not supported by repository.
2212                   l_doc_type_class := getDocTypeClass(p_target_doc_type);
2213 
2214                   IF l_doc_type_class = 'REPOSITORY' THEN
2215                     IF delRecTab(i).deliverable_type = 'INTERNAL_PURCHASING' THEN
2216                       delRecTab(i).deliverable_type := 'INTERNAL';
2217                     END IF;
2218 
2219                     IF delRecTab(i).internal_party_contact_id IS NULL THEN
2220                        delRecTab(i).internal_party_contact_id := l_rep_dflt_int_contact_id;
2221                     END IF;
2222                     --No need of setting the External Party Role as this is done only for PO flow.
2223                     l_ext_party_role:=NULL;
2224                   END IF;
2225                   -- End of ER code modifications
2226 
2227                   --check if the deliverable is of contractual type
2228                   IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2229                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2230                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Contractual is :Y');
2231                     END IF;
2232                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2233                     p_target_contractual_doctype);
2234                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2235                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2236                       '100: Copy allowed is :'||l_copy);
2237                     END IF;
2238                   END IF; -- deltype_matches
2239                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2240                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2241                       '100: Copy allowed is :'||l_copy);
2242                     END IF;
2243 
2244                     IF l_copy = 'Y' THEN
2245                         j := j+1;
2246                         -- extend table type
2247                         delIdTab.extend;
2248                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2249                         delNewTab(j) := delRecTab(i);
2250                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2251                         from dual;
2252                                 -- If party and contact info is null then assign the parameter values
2253                                 delNewTab(j).internal_party_id :=
2254                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2255                                 delNewTab(j).external_party_id :=
2256                                 NVL(delNewTab(j).external_party_id,p_external_party_id);
2257 
2258 
2259                                 delNewTab(j).external_party_site_id :=
2260                                 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2261                                 delNewTab(j).internal_party_contact_id :=
2262                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2263                                 -- bug#4148082 set ext party role during template to PO copy
2264                                 delNewTab(j).external_party_role := l_ext_party_role;
2265 
2266 
2267 
2268                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2269                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2270                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2271                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2272                             '100: External Party Role :'||delNewTab(j).external_party_role);
2273                         END IF;
2274                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2275                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2276                       --do not copy contractual type deliverables on to RFI bug#3641673
2277                       IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2278                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2279                             IF l_copy = 'Y' THEN
2280                                 j := j+1;
2281                                 -- extend table type
2282                                 delIdTab.extend;
2283                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2284                                 delNewTab(j) := delRecTab(i);
2285                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2286                                 from dual;
2287                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2288                                 -- If party and contact info is null then assign the parameter values
2289                                 delNewTab(j).internal_party_id :=
2290                                 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2291                                 delNewTab(j).internal_party_contact_id :=
2292                                 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2293                                 delNewTab(j).external_party_id :=
2294                                 NVL(delNewTab(j).external_party_id,p_external_party_id);
2295 
2296                                 delNewTab(j).external_party_site_id :=
2297                                 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2298 
2299                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2300                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2301                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2302                                     to_char(delNewTab(j).deliverable_id));
2303                                 END IF;
2304                             END IF; -- l_copy is Y
2305                       END IF; -- deltype_matches
2306                     END IF;-- l_copy is 'Y'
2307                 END LOOP;
2308                 END IF; -- del_cur%NOTFOUND
2309 
2310                END IF; -- p_target_contractual_doctype
2311         IF del_cur %ISOPEN THEN
2312           CLOSE del_cur ;
2313         END IF;
2314 
2315             END IF;
2316         IF del_cur %ISOPEN THEN
2317           CLOSE del_cur ;
2318         END IF;
2319 ---------------------------------------------------------------------------------
2320         -- Busdoc to Busdoc copy
2321         ELSIF p_source_doc_type <> 'TEMPLATE' THEN
2322                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2323                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2324                       '100: Source doc is not template');
2325                    END IF;
2326 ---------------------------------------------------------------------------------
2327             -- copy from business document to business document of different type
2328             -- for example RFI to RFQ
2329             IF p_source_doc_type <> p_target_doc_type THEN
2330                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2331                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2332                       '100: Source doc and target doc are different type');
2333                    END IF;
2334             IF p_target_contractual_doctype is not null THEN
2335 
2336                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2337                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2338                       '100: p_target_contractual_doctype:'||p_target_contractual_doctype);
2339                    END IF;
2340                 /***OPEN del_cur;
2341                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2342                 IF delRecTab.COUNT <> 0 THEN
2343                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2344                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2345                         ,'100: target_contractual_doctype is not null and '||
2346                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2347                     END IF;
2348                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2349                     -- initialize
2350                     l_copy := 'N';
2351                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2352                     p_target_contractual_doctype);
2353                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2354                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_copy is :'||l_copy);
2355                         END IF;
2356                     IF l_copy = 'Y' THEN
2357                         j := j+1;
2358                         -- extend table type
2359                         delIdTab.extend;
2360                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2361                         delNewTab(j) := delRecTab(i);
2362                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2363                         from dual;
2364                         -- 11.5.10+ bug#3670582 fix reset original del id
2365                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2366 
2367 
2368                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2369                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2370                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2371                         END IF;
2372                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2373                         /* Nullout all external party attributes on deliverables.
2374                         Because external party is not assigned on Negociation
2375                         documents (RFQ, Auction). */
2376                         --Bug#4126344
2377                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2378                             delNewTab(j).external_party_contact_id := null;
2379                             delNewTab(j).external_party_id := null;
2380                             delNewTab(j).external_party_site_id := null;
2381                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2382 
2383                         --Bug#4126344 set the param value if the flag says N
2384                         IF p_carry_forward_int_contact_yn = 'N' THEN
2385                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2386                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2387 
2388                         /* Nullout actual due date,start_event_date, end event_date
2389                         bug#3369934*/
2390                             delNewTab(j).actual_due_date:= null;
2391                             delNewTab(j).start_event_date:= null;
2392                             delNewTab(j).end_event_date:= null;
2393 
2394                     END IF;-- l_copy is 'Y'
2395                 END LOOP;
2396                END IF; -- del_cur%NOTFOUND
2397 ---------------------------------------------------
2398             -- busdoc to busdoc of different types
2399             -- for example RFQ to SPO or BPA
2400                 ELSIF p_target_contractual_doctype is null THEN
2401                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2402                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2403                       '100: p_target_contractual_doctype is null');
2404                    END IF;
2405                 /***OPEN del_cur;
2406                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2407                 IF delRecTab.COUNT <> 0 THEN
2408                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2409                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2410                         ,'100: target_contractual_doctype is null and '||
2411                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2412                     END IF;
2413                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2414                     -- initialize
2415                     l_copy := 'N';
2416                     --check if the deliverable belongs to target document type
2417                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2418                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2419                             '100: deltype :'||delRecTab(i).deliverable_type);
2420                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2421                             '100: doctype :'||p_target_doc_type);
2422                         END IF;
2423                     IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2424 
2425                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2426                     p_target_contractual_doctype);
2427                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2428                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2429                             '100: l_copy is :'||l_copy);
2430                         END IF;
2431                     END IF; -- deltype_matches
2432 
2433                     IF l_copy = 'Y' THEN
2434                         j := j+1;
2435                         -- extend table type
2436                         delIdTab.extend;
2437                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2438                         delNewTab(j) := delRecTab(i);
2439                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2440                         from dual;
2441                         -- 11.5.10+ bug#3670582 fix reset original del id
2442                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2443 
2444                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2445                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2446                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2447                         END IF;
2448                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2449                         -- Bug#3308804 assign param values if they are not null
2450                         --Bug#4126344
2451                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2452                         delNewTab(j).external_party_id := NVL(p_external_party_id,delNewTab(j).external_party_id);
2453                         delNewTab(j).external_party_site_id := NVL(p_external_party_site_id,delNewTab(j).external_party_site_id);
2454                         END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2455 
2456                         --Bug#4126344 set the param value if the flag says N
2457                         IF p_carry_forward_int_contact_yn = 'N' THEN
2458                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2459                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2460                         /* Nullout actual due date,start_event_date, end event_date
2461                         bug#3369934*/
2462                             delNewTab(j).actual_due_date:= null;
2463                             delNewTab(j).start_event_date:= null;
2464                             delNewTab(j).end_event_date:= null;
2465 
2466                     END IF;-- l_copy is 'Y'
2467                 END LOOP;
2468                 END IF; -- del_cur%NOTFOUND
2469                 END IF; -- p_target_contractual_doctype
2470 ---------------------------------------------------------------------------------
2471             -- copy from business document to business document of same type
2472             -- for example RFQ to RFQ
2473             ELSIF p_source_doc_type = p_target_doc_type THEN
2474                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2475                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2476                       '100: Source doc and target doc are same type');
2477                    END IF;
2478                IF p_target_contractual_doctype is not null THEN
2479 
2480                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2481                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2482                       '100: p_target_contractual_doctype is not null');
2483                    END IF;
2484                 /***OPEN del_cur;
2485                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2486                 IF delRecTab.COUNT <> 0 THEN
2487                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2488                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2489                         ,'100: target_contractual_doctype is not null and '||
2490                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2491                     END IF;
2492                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2493                     -- initialize
2494                     l_copy := 'N';
2495                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2496                     p_target_contractual_doctype);
2497                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2498                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2499                             '100: l_copy is :'||l_copy);
2500                         END IF;
2501                     IF l_copy = 'Y' THEN
2502                         j := j+1;
2503                         -- extend table type
2504                         delIdTab.extend;
2505                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2506                         delNewTab(j) := delRecTab(i);
2507                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2508                         from dual;
2509                         -- 11.5.10+ bug#3670582 fix reset original del id
2510                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2511 
2512                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2513                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2514                             '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2515                         END IF;
2516                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2517                         /* Nullout all external party attributes on deliverables.
2518                         Because external party is not assigned on Negotiation
2519                         documents (RFQ, Auction). */
2520                         --Bug#4126344
2521                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2522                             delNewTab(j).external_party_contact_id := null;
2523                             delNewTab(j).external_party_id := null;
2524                             delNewTab(j).external_party_site_id := null;
2525                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2526 
2527                         --Bug#4126344 set the param value if the flag says N
2528                         IF p_carry_forward_int_contact_yn = 'N' THEN
2529                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2530                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2531 
2532                             /*bug#3455441 reset buyer contact while creating new busdoc
2533                             by copying from another busdoc of same type*/
2534                             delNewTab(j).internal_party_id := p_internal_party_id;
2535                             --commented the below line as bug#4126344 superceeds bug#3455441
2536                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2537                         /* Nullout actual due date,start_event_date, end event_date
2538                         bug#3369934*/
2539                             delNewTab(j).actual_due_date:= null;
2540                             delNewTab(j).start_event_date:= null;
2541                             delNewTab(j).end_event_date:= null;
2542 
2543                             /**bug#3262940 added copy target_response_doctype deliverables logic
2544                             to support RFQ to RFQ copy case ********/
2545 
2546                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2547                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2548                             IF l_copy = 'Y' THEN
2549                                 j := j+1;
2550                                 -- extend table type
2551                                 delIdTab.extend;
2552                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2553                                 delNewTab(j) := delRecTab(i);
2554                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2555                                 from dual;
2556                                 -- 11.5.10+ bug#3670582 fix reset original del id
2557                                 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2558 
2559                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2560                                 /* Nullout all external party attributes on deliverables.
2561                                 Because external party is not assigned on Negotiation
2562                                 documents (RFQ, Auction). */
2563                         --Bug#4126344
2564                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2565                                 delNewTab(j).external_party_contact_id := null;
2566                                 delNewTab(j).external_party_id := null;
2567                                 delNewTab(j).external_party_site_id := null;
2568                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2569 
2570                         --Bug#4126344 set the param value if the flag says N
2571                         IF p_carry_forward_int_contact_yn = 'N' THEN
2572                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2573                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2574 
2575                                 /*bug#3455441 reset buyer contact while creating new busdoc
2576                                 by copying from another busdoc of same type*/
2577                                 delNewTab(j).internal_party_id := p_internal_party_id;
2578                             --commented the below line as bug#4126344 superceeds bug#3455441
2579                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2580                                 /* Nullout actual due date,start_event_date, end event_date
2581                                 bug#3369934*/
2582                                 delNewTab(j).actual_due_date:= null;
2583                                 delNewTab(j).start_event_date:= null;
2584                                 delNewTab(j).end_event_date:= null;
2585 
2586                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2587                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2588                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2589                                     to_char(delNewTab(j).deliverable_id));
2590                                 END IF;
2591                             END IF;
2592 
2593                     END IF;-- l_copy is 'Y'
2594                 END LOOP;
2595                 END IF; -- del_cur%NOTFOUND
2596              -- this is applicable to purchasing documents and RFIs
2597              ELSIF p_target_contractual_doctype is null THEN
2598                    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2599                       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2600                       ,'100: p_target_contractual_doctype is null');
2601                    END IF;
2602                 /***OPEN del_cur;
2603                 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2604                 IF delRecTab.COUNT <> 0 THEN
2605                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2606                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2607                         ,'100: target_contractual_doctype is null and '||
2608                         'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2609                     END IF;
2610                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2611                     -- initialize
2612                     l_copy := 'N';
2613                     --check if the deliverable belongs to target document type
2614                     IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2615 
2616                     l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2617                     p_target_contractual_doctype);
2618                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2619                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2620                             '100: l_copy is :'||l_copy);
2621                         END IF;
2622                     END IF; -- deltype_matches
2623 
2624                     IF l_copy = 'Y' THEN
2625                         j := j+1;
2626                         -- extend table type
2627                         delIdTab.extend;
2628                         delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2629                         delNewTab(j) := delRecTab(i);
2630                         select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2631                         from dual;
2632                         -- 11.5.10+ bug#3670582 fix reset original del id
2633                         delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2634 
2635                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2636                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2637                             ,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2638                         END IF;
2639                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
2640                         --Bug#4126344
2641                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2642                         delNewTab(j).external_party_id := p_external_party_id;
2643                         delNewTab(j).external_party_site_id := p_external_party_site_id;
2644                         END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2645 
2646                         --Bug#4126344 set the param value if the flag says N
2647                         IF p_carry_forward_int_contact_yn = 'N' THEN
2648                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2649                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2650 
2651                             /*bug#3455441 reset buyer contact while creating new busdoc
2652                             by copying from another busdoc of same type*/
2653                             delNewTab(j).internal_party_id := p_internal_party_id;
2654                             --commented the below line as bug#4126344 superceeds bug#3455441
2655                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2656                         /* Nullout actual due date,start_event_date, end event_date
2657                         bug#3369934*/
2658                             delNewTab(j).actual_due_date:= null;
2659                             delNewTab(j).start_event_date:= null;
2660                             delNewTab(j).end_event_date:= null;
2661                     /*then check if response document event matches. this check is for RFI**/
2662                     ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2663                         l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2664                             IF l_copy = 'Y' THEN
2665                                 j := j+1;
2666                                 -- extend table type
2667                                 delIdTab.extend;
2668                                 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2669                                 delNewTab(j) := delRecTab(i);
2670                                 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2671                                 from dual;
2672                                 -- 11.5.10+ bug#3670582 fix reset original del id
2673                                 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2674 
2675                                 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2676                                 /* Nullout all external party attributes on deliverables.
2677                                 Because external party is not assigned on Negotiation
2678                                 documents (RFQ, Auction,RFI). */
2679                         --Bug#4126344
2680                         IF p_carry_forward_ext_party_yn <> 'Y' THEN
2681                                 delNewTab(j).external_party_contact_id := null;
2682                                 delNewTab(j).external_party_id := null;
2683                                 delNewTab(j).external_party_site_id := null;
2684                         END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2685 
2686                         --Bug#4126344 set the param value if the flag says N
2687                         IF p_carry_forward_int_contact_yn = 'N' THEN
2688                             delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2689                         END IF; -- p_carry_forward_int_contact_yn = 'N'
2690 
2691                                 /*bug#3455441 reset buyer contact while creating new busdoc
2692                                 by copying from another busdoc of same type*/
2693                                 delNewTab(j).internal_party_id := p_internal_party_id;
2694                             --commented the below line as bug#4126344 superceeds bug#3455441
2695                             --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2696                                 /* Nullout actual due date,start_event_date, end event_date
2697                                 bug#3369934*/
2698                                 delNewTab(j).actual_due_date:= null;
2699                                 delNewTab(j).start_event_date:= null;
2700                                 delNewTab(j).end_event_date:= null;
2701 
2702                                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2703                                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2704                                     ,'100: New Deliverable Id from copy_response_allowed :'||
2705                                     to_char(delNewTab(j).deliverable_id));
2706                                 END IF;
2707                             END IF;
2708 
2709                     END IF;-- l_copy is 'Y'
2710                 END LOOP;
2711                 END IF; -- del_cur%NOTFOUND
2712                 END IF; -- p_target_contractual_doctype
2713 
2714             END IF;
2715         END IF;
2716 
2717         -- create deliverables for the target document
2718         IF delNewTab.COUNT <> 0 THEN
2719           FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2720                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2721                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2722                  ,'100: Create new Deliverables  :'||to_char(delNewTab(i).deliverable_id));
2723                END IF;
2724             delNewTab(i).business_document_id := p_target_doc_id;
2725             delNewTab(i).business_document_type := p_target_doc_type;
2726             delNewTab(i).business_document_number := p_target_doc_number;
2727             delNewTab(i).business_document_version := -99;
2728             delNewTab(i).created_by:= Fnd_Global.User_Id;
2729             delNewTab(i).creation_date := sysdate;
2730             delNewTab(i).last_updated_by:= Fnd_Global.User_Id;
2731             delNewTab(i).last_update_date := sysdate;
2732             delNewTab(i).last_update_login:=Fnd_Global.Login_Id;
2733             /*bug#3631944 flush amendment attributes at the time of copy.
2734             Since the target document will be a new document.*/
2735             delNewTab(i).amendment_operation := null;
2736             delNewTab(i).summary_amend_operation_code := null;
2737             delNewTab(i).amendment_notes := null;
2738             delNewTab(i).last_amendment_date := null;
2739 
2740                 IF p_reset_fixed_date_yn = 'Y' THEN
2741                     --delNewTab(i).fixed_due_date_yn = 'Y' THEN  -- Bug#3369934 reset recurring dels also
2742                     delNewTab(i).fixed_start_date:= null;
2743                     delNewTab(i).fixed_end_date:= null;
2744                     -- bug#3465662 clear print due date msg name only for recurring deliverables
2745                     -- with fixed start or end dates
2746                     IF delNewTab(i).recurring_yn = 'Y' AND
2747                         (delNewTab(i).relative_st_date_event_id is null OR
2748                         delNewTab(i).relative_end_date_event_id is null) THEN
2749                         delNewTab(i).print_due_date_msg_name:= null;
2750                     END IF;
2751                 END IF;
2752                 IF p_initialize_status_yn = 'Y' THEN
2753                     delNewTab(i).deliverable_status := 'INACTIVE';
2754                 END IF;
2755           END LOOP;
2756             /*FORALL i IN delNewTab.FIRST..delNewTab.LAST
2757             INSERT INTO okc_deliverables VALUES delNewTab(i);*/
2758                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2759                 INSERT INTO okc_deliverables
2760                 (DELIVERABLE_ID,
2761                 BUSINESS_DOCUMENT_TYPE      ,
2762                 BUSINESS_DOCUMENT_ID        ,
2763                 BUSINESS_DOCUMENT_NUMBER    ,
2764                 DELIVERABLE_TYPE            ,
2765                 RESPONSIBLE_PARTY           ,
2766                 INTERNAL_PARTY_CONTACT_ID   ,
2767                 EXTERNAL_PARTY_CONTACT_ID   ,
2768                 DELIVERABLE_NAME            ,
2769                 DESCRIPTION                 ,
2770                 COMMENTS                    ,
2771                 DISPLAY_SEQUENCE            ,
2772                 FIXED_DUE_DATE_YN           ,
2773                 ACTUAL_DUE_DATE             ,
2774                 PRINT_DUE_DATE_MSG_NAME     ,
2775                 RECURRING_YN                ,
2776                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
2777                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
2778                 NOTIFY_PRIOR_DUE_DATE_YN    ,
2779                 NOTIFY_COMPLETED_YN         ,
2780                 NOTIFY_OVERDUE_YN           ,
2781                 NOTIFY_ESCALATION_YN        ,
2782                 NOTIFY_ESCALATION_VALUE     ,
2783                 NOTIFY_ESCALATION_UOM       ,
2784                 ESCALATION_ASSIGNEE         ,
2785                 AMENDMENT_OPERATION         ,
2786                 PRIOR_NOTIFICATION_ID       ,
2787                 AMENDMENT_NOTES             ,
2788                 COMPLETED_NOTIFICATION_ID   ,
2789                 OVERDUE_NOTIFICATION_ID     ,
2790                 ESCALATION_NOTIFICATION_ID  ,
2791                 LANGUAGE                    ,
2792                 ORIGINAL_DELIVERABLE_ID     ,
2793                 REQUESTER_ID                ,
2794                 EXTERNAL_PARTY_ID           ,
2795                 EXTERNAL_PARTY_ROLE           ,
2796                 RECURRING_DEL_PARENT_ID      ,
2797                 BUSINESS_DOCUMENT_VERSION   ,
2798                 RELATIVE_ST_DATE_DURATION   ,
2799                 RELATIVE_ST_DATE_UOM        ,
2800                 RELATIVE_ST_DATE_EVENT_ID   ,
2801                 RELATIVE_END_DATE_DURATION  ,
2802                 RELATIVE_END_DATE_UOM       ,
2803                 RELATIVE_END_DATE_EVENT_ID  ,
2804                 REPEATING_DAY_OF_MONTH      ,
2805                 REPEATING_DAY_OF_WEEK       ,
2806                 REPEATING_FREQUENCY_UOM     ,
2807                 REPEATING_DURATION          ,
2808                 FIXED_START_DATE            ,
2809                 FIXED_END_DATE              ,
2810                 MANAGE_YN                   ,
2811                 INTERNAL_PARTY_ID           ,
2812                 DELIVERABLE_STATUS          ,
2813                 STATUS_CHANGE_NOTES         ,
2814                 CREATED_BY                  ,
2815                 CREATION_DATE               ,
2816                 LAST_UPDATED_BY             ,
2817                 LAST_UPDATE_DATE            ,
2818                 LAST_UPDATE_LOGIN           ,
2819                 OBJECT_VERSION_NUMBER       ,
2820                 ATTRIBUTE_CATEGORY          ,
2821                 ATTRIBUTE1                  ,
2822                 ATTRIBUTE2                  ,
2823                 ATTRIBUTE3                  ,
2824                 ATTRIBUTE4                  ,
2825                 ATTRIBUTE5                  ,
2826                 ATTRIBUTE6                  ,
2827                 ATTRIBUTE7                  ,
2828                 ATTRIBUTE8                  ,
2829                 ATTRIBUTE9                  ,
2830                 ATTRIBUTE10                 ,
2831                 ATTRIBUTE11                 ,
2832                 ATTRIBUTE12                 ,
2833                 ATTRIBUTE13                 ,
2834                 ATTRIBUTE14                 ,
2835                 ATTRIBUTE15                 ,
2836                 DISABLE_NOTIFICATIONS_YN    ,
2837                 LAST_AMENDMENT_DATE         ,
2838                 BUSINESS_DOCUMENT_LINE_ID   ,
2839                 EXTERNAL_PARTY_SITE_ID      ,
2840                 START_EVENT_DATE            ,
2841                 END_EVENT_DATE              ,
2842                 SUMMARY_AMEND_OPERATION_CODE,
2843                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
2844                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
2845                 PAY_HOLD_PRIOR_DUE_DATE_YN,
2846                 PAY_HOLD_OVERDUE_YN
2847                 )
2848                 VALUES (
2849                 delNewTab(i).DELIVERABLE_ID,
2850                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
2851                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
2852                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
2853                 delNewTab(i).DELIVERABLE_TYPE            ,
2854                 delNewTab(i).RESPONSIBLE_PARTY           ,
2855                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
2856                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
2857                 delNewTab(i).DELIVERABLE_NAME            ,
2858                 delNewTab(i).DESCRIPTION                 ,
2859                 delNewTab(i).COMMENTS                    ,
2860                 delNewTab(i).DISPLAY_SEQUENCE            ,
2861                 delNewTab(i).FIXED_DUE_DATE_YN           ,
2862                 delNewTab(i).ACTUAL_DUE_DATE             ,
2863                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
2864                 delNewTab(i).RECURRING_YN                ,
2865                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
2866                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
2867                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
2868                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
2869                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
2870                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
2871                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
2872                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
2873                 delNewTab(i).ESCALATION_ASSIGNEE         ,
2874                 delNewTab(i).AMENDMENT_OPERATION         ,
2875                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
2876                 delNewTab(i).AMENDMENT_NOTES             ,
2877                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
2878                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
2879                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
2880                 delNewTab(i).LANGUAGE                    ,
2881                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
2882                 delNewTab(i).REQUESTER_ID                ,
2883                 delNewTab(i).EXTERNAL_PARTY_ID           ,
2884                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
2885                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
2886                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
2887                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
2888                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
2889                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
2890                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
2891                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
2892                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
2893                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
2894                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
2895                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
2896                 delNewTab(i).REPEATING_DURATION          ,
2897                 delNewTab(i).FIXED_START_DATE            ,
2898                 delNewTab(i).FIXED_END_DATE              ,
2899                 delNewTab(i).MANAGE_YN                   ,
2900                 delNewTab(i).INTERNAL_PARTY_ID           ,
2901                 delNewTab(i).DELIVERABLE_STATUS          ,
2902                 delNewTab(i).STATUS_CHANGE_NOTES         ,
2903                 delNewTab(i).CREATED_BY                  ,
2904                 delNewTab(i).CREATION_DATE               ,
2905                 delNewTab(i).LAST_UPDATED_BY             ,
2906                 delNewTab(i).LAST_UPDATE_DATE            ,
2907                 delNewTab(i).LAST_UPDATE_LOGIN           ,
2908                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
2909                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
2910                 delNewTab(i).ATTRIBUTE1                  ,
2911                 delNewTab(i).ATTRIBUTE2                  ,
2912                 delNewTab(i).ATTRIBUTE3                  ,
2913                 delNewTab(i).ATTRIBUTE4                  ,
2914                 delNewTab(i).ATTRIBUTE5                  ,
2915                 delNewTab(i).ATTRIBUTE6                  ,
2916                 delNewTab(i).ATTRIBUTE7                  ,
2917                 delNewTab(i).ATTRIBUTE8                  ,
2918                 delNewTab(i).ATTRIBUTE9                  ,
2919                 delNewTab(i).ATTRIBUTE10                 ,
2920                 delNewTab(i).ATTRIBUTE11                 ,
2921                 delNewTab(i).ATTRIBUTE12                 ,
2922                 delNewTab(i).ATTRIBUTE13                 ,
2923                 delNewTab(i).ATTRIBUTE14                 ,
2924                 delNewTab(i).ATTRIBUTE15                 ,
2925                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
2926                 delNewTab(i).LAST_AMENDMENT_DATE         ,
2927                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
2928                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
2929                 delNewTab(i).START_EVENT_DATE            ,
2930                 delNewTab(i).END_EVENT_DATE              ,
2931                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
2932                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
2933                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
2934                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
2935                 delNewTab(i).PAY_HOLD_OVERDUE_YN
2936                 );
2937                 END LOOP;
2938                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2939                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2940                  '100: Done Creating Deliverables ');
2941                END IF;
2942         END IF; -- delNewTab.COUNT <> 0
2943                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2944                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2945                  '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
2946                END IF;
2947 
2948         -- copy any existing attachments if allowed
2949         IF p_copy_del_attachments_yn = 'Y' THEN
2950 
2951           IF delIdTab.COUNT <> 0 THEN
2952           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
2953             -- check if attachments exists
2954             IF attachment_exists(p_entity_name => G_ENTITY_NAME
2955                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
2956 
2957                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2958                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2959                  '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
2960                END IF;
2961               -- copy attachments
2962               -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
2963               fnd_attached_documents2_pkg.copy_attachments(
2964                   X_from_entity_name =>  G_ENTITY_NAME,
2965                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
2966                   X_to_entity_name   =>  G_ENTITY_NAME,
2967                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
2968                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
2969                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
2970                   );
2971                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2972                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2973                  '100: Done Copy Deliverable Attachments ');
2974                END IF;
2975             END IF;
2976           END LOOP;
2977           END IF;
2978         END IF; -- p_copy_del_attachments_yn = 'Y'
2979 
2980         IF del_cur %ISOPEN THEN
2981           CLOSE del_cur ;
2982         END IF;
2983         x_return_status := l_return_status;
2984             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2985                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2986                 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
2987             END IF;
2988     EXCEPTION
2989     WHEN FND_API.G_EXC_ERROR THEN
2990             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2991                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
2992                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with G_EXC_ERROR: '||
2993                 substr(sqlerrm,1,200));
2994             END IF;
2995         IF del_cur %ISOPEN THEN
2996           CLOSE del_cur ;
2997         END IF;
2998     x_return_status := G_RET_STS_ERROR;
2999       FND_MSG_PUB.Count_And_Get(
3000         p_count =>  x_msg_count,
3001         p_data  =>  x_msg_data
3002         );
3003 
3004     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3005             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3006                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3007                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3008                 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3009             END IF;
3010         IF del_cur %ISOPEN THEN
3011           CLOSE del_cur ;
3012         END IF;
3013     x_return_status := G_RET_STS_UNEXP_ERROR;
3014       FND_MSG_PUB.Count_And_Get(
3015         p_count =>  x_msg_count,
3016         p_data  =>  x_msg_data
3017         );
3018 
3019     WHEN OTHERS THEN
3020             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3021                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3022                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3023                 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3024             END IF;
3025         IF del_cur %ISOPEN THEN
3026           CLOSE del_cur ;
3027         END IF;
3028       x_return_status := G_RET_STS_UNEXP_ERROR;
3029       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3030        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3031       END IF;
3032       FND_MSG_PUB.Count_And_Get(
3033         p_count =>  x_msg_count,
3034         p_data  =>  x_msg_data
3035         );
3036 
3037     END copy_deliverables;
3038 
3039 
3040 
3041 
3042 /** Invoked by activate_deliverables group API
3043 1.Copies recurring instances from previous signed document.
3044 2.Copies instance of onetime deliverable from previous signed
3045 document and deletes the definition on the current document.
3046 3. Copies status history, attachments from the instance.
3047 4. creation_date will be reset for recurring instances of deliverables
3048 copied from currently managed version of document. The deliverable definitions and
3049 onetime deliverable instances will carry forwad the creation_date from the definition.
3050 bug#3702020 added following  clauses to filter deleted deliverable
3051     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
3052     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3053 **/
3054 PROCEDURE sync_deliverables (
3055         p_api_version   IN NUMBER,
3056         p_init_msg_list IN VARCHAR2,
3057         p_current_docid        IN NUMBER,
3058         p_current_doctype      IN  VARCHAR2,
3059         p_current_doc_version        IN NUMBER,
3060         x_msg_data      OUT NOCOPY  VARCHAR2,
3061         x_msg_count     OUT NOCOPY  NUMBER,
3062         x_return_status OUT NOCOPY  VARCHAR2)
3063     IS
3064 
3065     CURSOR del_cur IS
3066     SELECT *
3067     FROM okc_deliverables
3068     WHERE business_document_id = p_current_docid
3069     AND   business_document_version = p_current_doc_version
3070     AND   business_document_type = p_current_doctype
3071     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
3072     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3073     AND   manage_yn = 'N';
3074     del_rec del_cur%ROWTYPE;
3075 
3076 
3077     CURSOR del_ins_cur(x NUMBER) IS
3078     SELECT *
3079     FROM okc_deliverables a
3080     WHERE a.business_document_id = p_current_docid
3081     AND   a.business_document_type = p_current_doctype
3082     AND   a.business_document_version <> -99
3083     AND   a.original_deliverable_id = x
3084     AND   a.manage_yn = 'Y';
3085     del_ins_rec  del_ins_cur%ROWTYPE;
3086 
3087     CURSOR delStsHist(X NUMBER) IS
3088     SELECT *
3089     FROM okc_del_status_history
3090     WHERE deliverable_id = X;
3091     delStsHist_rec delStsHist%ROWTYPE;
3092     delHistTab    delHistTabType;
3093 
3094     CURSOR event_date_cursor(X NUMBER) IS
3095     select start_event_date, end_event_date
3096     from okc_deliverables
3097     where deliverable_id = X;
3098     event_date_rec   event_date_cursor%ROWTYPE;
3099 
3100     l_api_name      CONSTANT VARCHAR2(30) :='sync_deliverables';
3101     delRecTab       delRecTabType;
3102     delNewTab       delRecTabType;
3103     delInsTab       delRecTabType;
3104     l_deliverable_id NUMBER;
3105     j PLS_INTEGER := 0;
3106     q PLS_INTEGER := 0;
3107     k PLS_INTEGER := 0;
3108     m PLS_INTEGER := 0;
3109     p PLS_INTEGER := 0;
3110     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
3111     TYPE delIdTabType IS TABLE OF delIdRecType;
3112     delIdTab    delIdTabType;
3113     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
3114     l_msg_count       NUMBER;
3115     l_msg_data        VARCHAR2(1000);
3116     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
3117     l_recur_parent_id  NUMBER;
3118 
3119     BEGIN
3120 
3121             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3122                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3123                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
3124             END IF;
3125 
3126 
3127 /*****
3128 8i compatability bug#3307941
3129 ***/
3130 
3131 
3132     FOR del_rec IN del_cur LOOP
3133       k := k+1;
3134       delRecTab(k).deliverable_id := del_rec.deliverable_id;
3135       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
3136       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
3137       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
3138       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
3139       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
3140       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
3141       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
3142       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
3143       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
3144       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
3145       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
3146       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
3147       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
3148       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
3149       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
3150       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3151       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3152       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3153       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
3154       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
3155       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
3156       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
3157       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
3158       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
3159       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
3160       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
3161       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
3162       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
3163       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
3164       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
3165       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
3166       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
3167       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
3168       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
3169       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
3170       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
3171       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
3172       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
3173       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
3174       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
3175       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
3176       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
3177       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
3178       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
3179       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
3180       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
3181       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
3182       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
3183       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
3184       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
3185       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
3186       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
3187       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
3188       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
3189       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
3190       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
3191       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
3192       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
3193       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
3194       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
3195       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
3196       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
3197       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
3198       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
3199       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
3200       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
3201       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
3202       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
3203       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
3204       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
3205       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
3206       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
3207       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
3208       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
3209       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
3210       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
3211       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
3212       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
3213       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
3214       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
3215       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
3216       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
3217       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3218       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3219       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3220       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
3221 
3222             END LOOP;
3223         IF del_cur%ISOPEN THEN
3224           CLOSE del_cur ;
3225         END IF;
3226 
3227 
3228 
3229         /**commented as this is not supported by 8i PL/SQL Bug#3307941
3230         OPEN del_cur;
3231         FETCH del_cur BULK COLLECT INTO delDefRecTab;**/
3232         IF delRecTab.COUNT <> 0 THEN
3233            -- initialize the table type variable
3234            delIdTab := delIdTabType();
3235         FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
3236             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3237                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3238                 ,'100: Inside def cursor loop'||to_char(delRecTab(i).deliverable_id));
3239             END IF;
3240 
3241 
3242              -- if it is a recurrying deliverable
3243              IF delRecTab(i).recurring_yn = 'Y' THEN
3244 ----------------------------------
3245             --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3246             --Initialize the table with 0 rows
3247             delInsTab.DELETE;
3248       m := 0;
3249             -- if deliverable is updated from onetime to recurring due to amendment
3250             -- don't copy the instance
3251         FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3252             IF del_ins_rec.recurring_yn = 'N' AND
3253                   del_ins_rec.recurring_del_parent_id is null THEN
3254                   null;
3255             ELSE
3256       m := m+1;
3257       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3258       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3259       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3260       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3261       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3262       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3263       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3264       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3265       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3266       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3267       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3268       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3269       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3270       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3271       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3272       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3273       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3274       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3275       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3276       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3277       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3278       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3279       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3280       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3281       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3282       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3283       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3284       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3285       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3286       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3287       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3288       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3289       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3290       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3291       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3292       delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3293       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3294       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3295       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3296       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3297       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3298       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3299       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3300       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3301       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3302       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3303       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3304       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3305       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3306       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3307       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3308       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3309       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3310       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3311       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3312       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3313       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3314       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3315       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3316       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3317       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3318       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3319       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3320       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3321       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3322       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3323       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3324       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3325       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3326       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3327       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3328       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3329       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3330       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3331       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3332       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3333       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3334       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3335       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3336       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3337       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3338       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3339       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3340       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3341       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3342       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3343       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3344 
3345             END IF;
3346      END LOOP;
3347         IF del_ins_cur %ISOPEN THEN
3348           CLOSE del_ins_cur ;
3349         END IF;
3350 
3351 
3352 
3353 --------------------------------------
3354                 -- check for instances and copy instances from managing version
3355                 /****
3356                 commented as this is not supported by 8i PL/SQL Bug#3307941
3357                 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3358                 FETCH del_ins_cur BULK COLLECT INTO delInsTab;*/
3359                 IF delInsTab.COUNT <> 0 THEN
3360                    FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3361                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3362                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3363                     END IF;
3364                         j:=j+1;
3365                         q:=q+1;
3366                         -- extend table type
3367                         delIdTab.extend;
3368                         -- build the id table to copy attachments
3369                         delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3370                         -- build new version deliverables table
3371                         delNewTab(j):= delInsTab(k);
3372                         --store the recurring_del_parent_id in local variable
3373                         l_recur_parent_id := delInsTab(k).recurring_del_parent_id;
3374                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3375                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Recur Id'||l_recur_parent_id);
3376                     END IF;
3377                         delNewTab(j).business_document_version := p_current_doc_version;
3378                         delNewTab(j).recurring_del_parent_id := delRecTab(i).deliverable_id;
3379                         select okc_deliverable_id_s.nextval
3380                         INTO delNewTab(j).deliverable_id from dual;
3381                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
3382                         -- reset end date definition to new definition
3383                         delNewTab(j).RELATIVE_END_DATE_DURATION:=
3384                                             delRecTab(i).RELATIVE_END_DATE_DURATION;
3385                         delNewTab(j).RELATIVE_END_DATE_UOM:= delRecTab(i).RELATIVE_END_DATE_UOM;
3386                         delNewTab(j).RELATIVE_END_DATE_EVENT_ID:=
3387                                             delRecTab(i).RELATIVE_END_DATE_EVENT_ID;
3388                         delNewTab(j).FIXED_END_DATE:= delRecTab(i).FIXED_END_DATE;
3389                         -- Start 3711754 reset the contact ids and notification attributes from the definition
3390                         delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3391                         delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3392                         delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3393                         delNewTab(j).comments:= delRecTab(i).comments;
3394                         delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3395                         delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3396                         -- Prior due date notification attributes
3397                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3398                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3399                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3400                         -- Escalation notification attributes
3401                         delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3402                         delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3403                         delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3404                         delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3405                         -- Reset the notification ids to null if deliverables are not fulfilled.
3406                         IF delNewTab(j).deliverable_status  = 'OPEN' OR
3407                            delNewTab(j).deliverable_status  = 'REJECTED' THEN
3408                            delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3409                            delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3410                            delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3411                         END IF;
3412                         -- End 3711754 reset the contact ids and notification attributes from the definition
3413 
3414                         -- 3667445 Reset the creation_date and created_by for instances. 03-Jun-2004
3415                         delNewTab(j).creation_date := sysdate;
3416                         delNewTab(j).created_by := FND_GLOBAL.User_id;
3417 
3418 			--bug 6055520
3419                         delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3420                         delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3421                         delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3422                         delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3423                         delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3424                         delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3425                         delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3426                         delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3427                         delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3428                         delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3429                         delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3430                         delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3431                         delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3432                         delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3433                         delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3434                         delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3435 			--bug 6055520
3436 
3437                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3438                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3439                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3440                         delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3441 
3442 
3443 
3444                     END LOOP;
3445                 END IF;
3446         IF del_ins_cur %ISOPEN THEN
3447           CLOSE del_ins_cur ;
3448         END IF;
3449 
3450                 --Assign start and end eventdates to the new definition from instance
3451                 open event_date_cursor(l_recur_parent_id);
3452                 fetch event_date_cursor INTO event_date_rec;
3453                 IF event_date_cursor%FOUND THEN
3454                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3455                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3456                         ,'Def Id'||delRecTab(i).deliverable_id);
3457                     END IF;
3458 
3459                     Update okc_deliverables set start_event_date = event_date_rec.start_event_date,
3460                     end_event_date = event_date_rec.end_event_date
3461                     where deliverable_id = delRecTab(i).deliverable_id;
3462 
3463 
3464                 END IF;
3465                 close event_date_cursor;
3466 
3467              ELSIF delRecTab(i).recurring_yn = 'N' THEN
3468 
3469             --If the amendment_action on the deliverable definition
3470             --is null then open deliverable instance for the definition.
3471             --Add this deliverable record to delNewVersion Table.
3472 
3473             IF delRecTab(i).amendment_operation is null AND
3474                delRecTab(i).summary_amend_operation_code is null THEN -- bug#3656679
3475                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3476                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: amendment_operation is null');
3477                 END IF;
3478                 -- Always copy instance from managing version
3479                 -- do not copy definition
3480  ----------------------------------
3481             --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3482             -- 02-FEB-2004 pnayani -- Fix for bug 3407758
3483             --Initialize the table with 0 rows
3484             delInsTab.DELETE;
3485       m := 0;
3486         FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3487       m := m+1;
3488       delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3489       delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3490       delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3491       delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3492       delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3493       delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3494       delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3495       delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3496       delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3497       delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3498       delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3499       delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3500       delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3501       delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3502       delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3503       delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3504       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3505       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3506       delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3507       delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3508       delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3509       delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3510       delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3511       delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3512       delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3513       delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3514       delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3515       delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3516       delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3517       delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3518       delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3519       delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3520       delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3521       delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3522       delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3523       delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3524       delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3525       delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3526       delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3527       delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3528       delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3529       delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3530       delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3531       delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3532       delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3533       delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3534       delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3535       delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3536       delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3537       delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3538       delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3539       delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3540       delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3541       delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3542       delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3543       delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3544       delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3545       delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3546       delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3547       delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3548       delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3549       delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3550       delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3551       delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3552       delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3553       delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3554       delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3555       delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3556       delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3557       delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3558       delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3559       delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3560       delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3561       delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3562       delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3563       delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3564       delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3565       delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3566       delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3567       delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3568       delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3569       delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3570       delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3571       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3572       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3573       delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3574       delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3575 
3576      END LOOP;
3577         IF del_ins_cur %ISOPEN THEN
3578           CLOSE del_ins_cur ;
3579         END IF;
3580  ----------------------------------
3581                 /****
3582                 commented as this is not supported by 8i PL/SQL Bug#3307941
3583                 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3584                 FETCH del_ins_cur BULK COLLECT INTO delInsTab;**/
3585                 IF delInsTab.COUNT <> 0 THEN
3586                    FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3587                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3588                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3589                     END IF;
3590                         j:=j+1;
3591                         q:=q+1;
3592                         -- extend table type
3593                         delIdTab.extend;
3594                         -- build the id table to copy attachments
3595                         delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3596                         -- build new version deliverables table
3597                         delNewTab(j):= delInsTab(k);
3598                         select okc_deliverable_id_s.nextval
3599                         INTO delNewTab(j).deliverable_id from dual;
3600                         delNewTab(j).business_document_version := p_current_doc_version;
3601                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
3602                         -- Resetting the amendment attributes to the definition values bug#3293314
3603                         delNewTab(j).AMENDMENT_OPERATION := delRecTab(i).amendment_operation;
3604                         delNewTab(j).SUMMARY_AMEND_OPERATION_CODE := delRecTab(i).summary_amend_operation_code;
3605                         delNewTab(j).LAST_AMENDMENT_DATE:= delRecTab(i).LAST_AMENDMENT_DATE;
3606                         delNewTab(j).AMENDMENT_NOTES:= delRecTab(i).AMENDMENT_NOTES;
3607                         -- Start 3711754 reset the contact ids and notification attributes from the definition
3608                         delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3609                         delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3610                         delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3611                         delNewTab(j).comments:= delRecTab(i).comments;
3612                         delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3613                         delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3614                         -- Prior due date notification attributes
3615                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3616                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3617                         delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3618                         -- Escalation notification attributes
3619                         delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3620                         delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3621                         delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3622                         delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3623                         -- Reset the notification ids to null if deliverables are not fulfilled.
3624                         IF delNewTab(j).deliverable_status  = 'OPEN' OR
3625                            delNewTab(j).deliverable_status  = 'REJECTED' THEN
3626                            delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3627                            delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3628                            delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3629                         END IF;
3630                         -- End 3711754 reset the contact ids and notification attributes from the definition
3631 
3632                         -- Bug 5911527. Reset the DFF values
3633                         delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3634                         delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3635                         delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3636                         delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3637                         delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3638                         delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3639                         delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3640                         delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3641                         delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3642                         delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3643                         delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3644                         delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3645                         delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3646                         delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3647                         delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3648                         delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3649 
3650                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3651                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3652                         delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3653                         delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3654 
3655 
3656                     END LOOP;
3657                     -- delete the deliverable definition
3658                     delete_deliverable (
3659                     p_api_version  => l_api_version,
3660                     p_init_msg_list => OKC_API.G_FALSE,
3661                     p_del_id    => delRecTab(i).deliverable_id,
3662                     x_msg_data  => l_msg_data ,
3663                     x_msg_count => l_msg_count,
3664                     x_return_status  => l_return_status);
3665 
3666                     IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
3667                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3668                     END IF;
3669 
3670                 END IF;
3671         IF del_ins_cur %ISOPEN THEN
3672           CLOSE del_ins_cur ;
3673         END IF;
3674              END IF;-- amendment_operation is null
3675              END IF; -- recurring_yn = 'Y'
3676 
3677         END  LOOP;-- delRecTab(i)
3678         END IF; --delRecTab.COUNT <> 0
3679                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3680                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'outside def cursor loop');
3681                     END IF;
3682 
3683         --BULK INSERT into okc_deliverables the new version of deliverables.
3684         IF delNewTab.COUNT <> 0 THEN
3685                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3686                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
3687                     END IF;
3688         -- update the who columns
3689         FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
3690         --3667445 do not reset creation date for definitions, reset only for instances
3691         -- of recurring deliverables
3692           -- delNewTab(j).creation_date := sysdate;
3693           -- delNewTab(j).created_by := FND_GLOBAL.User_id;
3694            delNewTab(j).last_update_date := sysdate;
3695            delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
3696            delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
3697            --copy status history not done as status is not being changed here
3698            --OPEN delStsHist(delNewTab(j).deliverable_id);
3699            /*FOR delStsHist_rec in delStsHist(delNewTab(j).deliverable_id) LOOP
3700            p := p+1;
3701            delHistTab(p).DELIVERABLE_ID := delStsHist_rec.DELIVERABLE_ID;
3702            delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
3703            delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
3704            delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
3705            delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
3706            delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
3707            delHistTab(p).CREATED_BY := delStsHist_rec.CREATED_BY;
3708            delHistTab(p).CREATION_DATE := delStsHist_rec.CREATION_DATE;
3709            delHistTab(p).LAST_UPDATED_BY := delStsHist_rec.LAST_UPDATED_BY;
3710            delHistTab(p).LAST_UPDATE_DATE := delStsHist_rec.LAST_UPDATE_DATE;
3711            delHistTab(p).LAST_UPDATE_LOGIN := delStsHist_rec.LAST_UPDATE_LOGIN;
3712 
3713            END LOOP;
3714            IF delStsHist%ISOPEN THEN
3715             CLOSE  delStsHist;
3716            END IF;*/
3717            /* commented for 8i compatability bug#330794 major code change
3718            OPEN delStsHist(delNewTab(j).deliverable_id);
3719            FETCH delStsHist BULK COLLECT INTO delHistTab;*/
3720            /*IF delHistTab.COUNT <> 0 THEN
3721             FOR j IN delHistTab.FIRST..delHistTab.LAST LOOP
3722                 delHistTab(j).deliverable_id := delNewTab(j).deliverable_id;
3723                 delHistTab(j).creation_date := sysdate;
3724                 delHistTab(j).created_by := FND_GLOBAL.User_id;
3725                 delHistTab(j).last_update_date := sysdate;
3726                 delHistTab(j).last_updated_by := FND_GLOBAL.User_id;
3727                 delHistTab(j).last_update_login:= Fnd_Global.Login_Id;
3728             END LOOP;
3729            END IF;
3730            IF delStsHist%ISOPEN THEN
3731             CLOSE  delStsHist;
3732            END IF;*/
3733         END  LOOP;
3734         -- insert records code changed for 8i compatability bug#3307941
3735        /* commented for 8i compatability bug#330794 major code change
3736         FORALL j IN delNewTab.FIRST..delNewTab.LAST
3737         INSERT INTO okc_deliverables VALUES delNewTab(j);*/
3738 
3739         --------------------------------------------
3740 
3741                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3742                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
3743                 END IF;
3744                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
3745                 INSERT INTO okc_deliverables
3746                 (DELIVERABLE_ID,
3747                 BUSINESS_DOCUMENT_TYPE      ,
3748                 BUSINESS_DOCUMENT_ID        ,
3749                 BUSINESS_DOCUMENT_NUMBER    ,
3750                 DELIVERABLE_TYPE            ,
3751                 RESPONSIBLE_PARTY           ,
3752                 INTERNAL_PARTY_CONTACT_ID   ,
3753                 EXTERNAL_PARTY_CONTACT_ID   ,
3754                 DELIVERABLE_NAME            ,
3755                 DESCRIPTION                 ,
3756                 COMMENTS                    ,
3757                 DISPLAY_SEQUENCE            ,
3758                 FIXED_DUE_DATE_YN           ,
3759                 ACTUAL_DUE_DATE             ,
3760                 PRINT_DUE_DATE_MSG_NAME     ,
3761                 RECURRING_YN                ,
3762                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
3763                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
3764                 NOTIFY_PRIOR_DUE_DATE_YN    ,
3765                 NOTIFY_COMPLETED_YN         ,
3766                 NOTIFY_OVERDUE_YN           ,
3767                 NOTIFY_ESCALATION_YN        ,
3768                 NOTIFY_ESCALATION_VALUE     ,
3769                 NOTIFY_ESCALATION_UOM       ,
3770                 ESCALATION_ASSIGNEE         ,
3771                 AMENDMENT_OPERATION         ,
3772                 PRIOR_NOTIFICATION_ID       ,
3773                 AMENDMENT_NOTES             ,
3774                 COMPLETED_NOTIFICATION_ID   ,
3775                 OVERDUE_NOTIFICATION_ID     ,
3776                 ESCALATION_NOTIFICATION_ID  ,
3777                 LANGUAGE                    ,
3778                 ORIGINAL_DELIVERABLE_ID     ,
3779                 REQUESTER_ID                ,
3780                 EXTERNAL_PARTY_ID           ,
3781                 EXTERNAL_PARTY_ROLE           ,
3782                 RECURRING_DEL_PARENT_ID      ,
3783                 BUSINESS_DOCUMENT_VERSION   ,
3784                 RELATIVE_ST_DATE_DURATION   ,
3785                 RELATIVE_ST_DATE_UOM        ,
3786                 RELATIVE_ST_DATE_EVENT_ID   ,
3787                 RELATIVE_END_DATE_DURATION  ,
3788                 RELATIVE_END_DATE_UOM       ,
3789                 RELATIVE_END_DATE_EVENT_ID  ,
3790                 REPEATING_DAY_OF_MONTH      ,
3791                 REPEATING_DAY_OF_WEEK       ,
3792                 REPEATING_FREQUENCY_UOM     ,
3793                 REPEATING_DURATION          ,
3794                 FIXED_START_DATE            ,
3795                 FIXED_END_DATE              ,
3796                 MANAGE_YN                   ,
3797                 INTERNAL_PARTY_ID           ,
3798                 DELIVERABLE_STATUS          ,
3799                 STATUS_CHANGE_NOTES         ,
3800                 CREATED_BY                  ,
3801                 CREATION_DATE               ,
3802                 LAST_UPDATED_BY             ,
3803                 LAST_UPDATE_DATE            ,
3804                 LAST_UPDATE_LOGIN           ,
3805                 OBJECT_VERSION_NUMBER       ,
3806                 ATTRIBUTE_CATEGORY          ,
3807                 ATTRIBUTE1                  ,
3808                 ATTRIBUTE2                  ,
3809                 ATTRIBUTE3                  ,
3810                 ATTRIBUTE4                  ,
3811                 ATTRIBUTE5                  ,
3812                 ATTRIBUTE6                  ,
3813                 ATTRIBUTE7                  ,
3814                 ATTRIBUTE8                  ,
3815                 ATTRIBUTE9                  ,
3816                 ATTRIBUTE10                 ,
3817                 ATTRIBUTE11                 ,
3818                 ATTRIBUTE12                 ,
3819                 ATTRIBUTE13                 ,
3820                 ATTRIBUTE14                 ,
3821                 ATTRIBUTE15                 ,
3822                 DISABLE_NOTIFICATIONS_YN    ,
3823                 LAST_AMENDMENT_DATE         ,
3824                 BUSINESS_DOCUMENT_LINE_ID   ,
3825                 EXTERNAL_PARTY_SITE_ID      ,
3826                 START_EVENT_DATE            ,
3827                 END_EVENT_DATE              ,
3828                 SUMMARY_AMEND_OPERATION_CODE,
3829                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
3830                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
3831                 PAY_HOLD_PRIOR_DUE_DATE_YN,
3832                 PAY_HOLD_OVERDUE_YN
3833                 )
3834                 VALUES (
3835                 delNewTab(i).DELIVERABLE_ID,
3836                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
3837                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
3838                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
3839                 delNewTab(i).DELIVERABLE_TYPE            ,
3840                 delNewTab(i).RESPONSIBLE_PARTY           ,
3841                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
3842                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
3843                 delNewTab(i).DELIVERABLE_NAME            ,
3844                 delNewTab(i).DESCRIPTION                 ,
3845                 delNewTab(i).COMMENTS                    ,
3846                 delNewTab(i).DISPLAY_SEQUENCE            ,
3847                 delNewTab(i).FIXED_DUE_DATE_YN           ,
3848                 delNewTab(i).ACTUAL_DUE_DATE             ,
3849                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
3850                 delNewTab(i).RECURRING_YN                ,
3851                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
3852                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
3853                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
3854                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
3855                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
3856                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
3857                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
3858                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
3859                 delNewTab(i).ESCALATION_ASSIGNEE         ,
3860                 delNewTab(i).AMENDMENT_OPERATION         ,
3861                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
3862                 delNewTab(i).AMENDMENT_NOTES             ,
3863                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
3864                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
3865                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
3866                 delNewTab(i).LANGUAGE                    ,
3867                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
3868                 delNewTab(i).REQUESTER_ID                ,
3869                 delNewTab(i).EXTERNAL_PARTY_ID           ,
3870                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
3871                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
3872                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
3873                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
3874                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
3875                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
3876                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
3877                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
3878                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
3879                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
3880                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
3881                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
3882                 delNewTab(i).REPEATING_DURATION          ,
3883                 delNewTab(i).FIXED_START_DATE            ,
3884                 delNewTab(i).FIXED_END_DATE              ,
3885                 delNewTab(i).MANAGE_YN                   ,
3886                 delNewTab(i).INTERNAL_PARTY_ID           ,
3887                 delNewTab(i).DELIVERABLE_STATUS          ,
3888                 delNewTab(i).STATUS_CHANGE_NOTES         ,
3889                 delNewTab(i).CREATED_BY                  ,
3890                 delNewTab(i).CREATION_DATE               ,
3891                 delNewTab(i).LAST_UPDATED_BY             ,
3892                 delNewTab(i).LAST_UPDATE_DATE            ,
3893                 delNewTab(i).LAST_UPDATE_LOGIN           ,
3894                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
3895                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
3896                 delNewTab(i).ATTRIBUTE1                  ,
3897                 delNewTab(i).ATTRIBUTE2                  ,
3898                 delNewTab(i).ATTRIBUTE3                  ,
3899                 delNewTab(i).ATTRIBUTE4                  ,
3900                 delNewTab(i).ATTRIBUTE5                  ,
3901                 delNewTab(i).ATTRIBUTE6                  ,
3902                 delNewTab(i).ATTRIBUTE7                  ,
3903                 delNewTab(i).ATTRIBUTE8                  ,
3904                 delNewTab(i).ATTRIBUTE9                  ,
3905                 delNewTab(i).ATTRIBUTE10                 ,
3906                 delNewTab(i).ATTRIBUTE11                 ,
3907                 delNewTab(i).ATTRIBUTE12                 ,
3908                 delNewTab(i).ATTRIBUTE13                 ,
3909                 delNewTab(i).ATTRIBUTE14                 ,
3910                 delNewTab(i).ATTRIBUTE15                 ,
3911                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
3912                 delNewTab(i).LAST_AMENDMENT_DATE         ,
3913                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
3914                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
3915                 delNewTab(i).START_EVENT_DATE            ,
3916                 delNewTab(i).END_EVENT_DATE              ,
3917                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
3918                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
3919                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
3920                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
3921                 delNewTab(i).PAY_HOLD_OVERDUE_YN
3922                 );
3923                 END LOOP;
3924 
3925 
3926 
3927         -------------------------------------------------
3928 
3929             FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
3930 
3931             --copy status history not done as status is not being changed here
3932             --OPEN delStsHist(delNewTab(j).deliverable_id);
3933             /* commented for 8i compatability bug#330794 major code change
3934             OPEN delStsHist(delNewTab(j).deliverable_id);
3935             FETCH delStsHist BULK COLLECT INTO delHistTab;*/
3936             FOR delStsHist_rec in delStsHist(delIdTab(j).orig_del_id) LOOP
3937             /*p := p+1;
3938             delHistTab(p).DELIVERABLE_ID := delIdTab(j).del_id;
3939             delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
3940             delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
3941             delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
3942             delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
3943             delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
3944             delHistTab(p).CREATED_BY := FND_GLOBAL.User_id;
3945             delHistTab(p).CREATION_DATE := sysdate;
3946             delHistTab(p).LAST_UPDATED_BY := FND_GLOBAL.User_id;
3947             delHistTab(p).LAST_UPDATE_DATE := sysdate;
3948             delHistTab(p).LAST_UPDATE_LOGIN := Fnd_Global.Login_Id;*/
3949 
3950             --insert into status history
3951             INSERT INTO okc_del_status_history (
3952             deliverable_id,
3953             deliverable_status,
3954             status_changed_by,
3955             status_change_date,
3956             status_change_notes,
3957             object_version_number,
3958             created_by,
3959             creation_date,
3960             last_updated_by,
3961             last_update_date,
3962             last_update_login)
3963             VALUES(
3964             delIdTab(j).del_id,
3965             delStsHist_rec.DELIVERABLE_STATUS,
3966             delStsHist_rec.STATUS_CHANGED_BY,
3967             delStsHist_rec.STATUS_CHANGE_DATE,
3968             delStsHist_rec.STATUS_CHANGE_NOTES,
3969             delStsHist_rec.OBJECT_VERSION_NUMBER,
3970             FND_GLOBAL.User_id,
3971             sysdate,
3972             FND_GLOBAL.User_id,
3973             sysdate,
3974             Fnd_Global.Login_Id);
3975                                                                                                                           END LOOP;
3976                                                                                                                             IF delStsHist%ISOPEN THEN
3977                   CLOSE  delStsHist;
3978               END IF;
3979 
3980 
3981         -------------------------------------------------
3982                 IF attachment_exists(p_entity_name => G_ENTITY_NAME
3983                       ,p_pk1_value    =>  delIdTab(j).orig_del_id) THEN
3984                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3985                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
3986                     END IF;
3987                     -- copy attachments
3988                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
3989                     fnd_attached_documents2_pkg.copy_attachments(
3990                     X_from_entity_name =>  G_ENTITY_NAME,
3991                     X_from_pk1_value   =>  delIdTab(j).orig_del_id,
3992                     X_to_entity_name   =>  G_ENTITY_NAME,
3993                     X_to_pk1_value     =>  to_char(delIdTab(j).del_id),
3994                     X_CREATED_BY       =>  FND_GLOBAL.User_id,
3995                     X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
3996                     );
3997                 END IF;
3998             END LOOP;
3999         END IF; -- delNewTab.COUNT
4000 
4001         IF del_cur%ISOPEN THEN
4002           CLOSE del_cur ;
4003         END IF;
4004 
4005 
4006             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4007                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4008                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
4009             END IF;
4010 
4011             x_return_status := l_return_status;
4012     EXCEPTION
4013     WHEN FND_API.G_EXC_ERROR THEN
4014             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4015                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4016                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_ERROR'||
4017                 substr(sqlerrm,1,200));
4018             END IF;
4019         IF del_cur %ISOPEN THEN
4020           CLOSE del_cur ;
4021         END IF;
4022         IF delStsHist%ISOPEN THEN
4023           CLOSE delStsHist;
4024         END IF;
4025         IF del_ins_cur %ISOPEN THEN
4026           CLOSE del_ins_cur ;
4027         END IF;
4028     x_return_status := G_RET_STS_ERROR;
4029       FND_MSG_PUB.Count_And_Get(
4030         p_count =>  x_msg_count,
4031         p_data  =>  x_msg_data
4032         );
4033     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4034             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4035                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4036                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||
4037                 substr(sqlerrm,1,200));
4038             END IF;
4039         IF del_cur %ISOPEN THEN
4040           CLOSE del_cur ;
4041         END IF;
4042         IF del_ins_cur %ISOPEN THEN
4043           CLOSE del_ins_cur ;
4044         END IF;
4045         IF delStsHist%ISOPEN THEN
4046           CLOSE delStsHist;
4047         END IF;
4048     x_return_status := G_RET_STS_UNEXP_ERROR;
4049       FND_MSG_PUB.Count_And_Get(
4050         p_count =>  x_msg_count,
4051         p_data  =>  x_msg_data
4052         );
4053 
4054     WHEN OTHERS THEN
4055         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4056           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4057           ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4058         END IF;
4059         IF del_cur %ISOPEN THEN
4060           CLOSE del_cur ;
4061         END IF;
4062         IF del_ins_cur %ISOPEN THEN
4063           CLOSE del_ins_cur ;
4064         END IF;
4065         IF delStsHist%ISOPEN THEN
4066           CLOSE delStsHist;
4067         END IF;
4068     x_return_status := G_RET_STS_UNEXP_ERROR;
4069       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4070          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4071       END IF;
4072       FND_MSG_PUB.Count_And_Get(
4073         p_count =>  x_msg_count,
4074         p_data  =>  x_msg_data
4075         );
4076     END sync_deliverables;
4077 
4078 
4079 
4080 
4081     /***This API is invoked from OKC_TERMS_PVT.VERSION_DOC.
4082     This API creates new set of deliverables for a given
4083     version of document.
4084     1.Gets all dliverable definitions for a given busdoc version
4085     2.Check if amendment operation code is null
4086         i.check if recurring deliverable
4087             a.copy definition
4088             b.open instances cursor and copy instances
4089         ii.if not recurring del
4090             a.copy instance of one time deliverable
4091     3.If amendment operation is not null
4092         i.amendment operation is DELETE and summary amendment operation
4093         is not null
4094             a.Recurring del then copy both def and instances
4095             b.One time del then copy only definition
4096         ii.amendment operation is UPDATE or ADDED
4097             a.Recurring del then copy both def and instances
4098             b.One time del then copy only definition
4099     4.Copy attachments
4100     ***/
4101 
4102 
4103 
4104 
4105     PROCEDURE version_deliverables (
4106         p_api_version   IN NUMBER,
4107         p_init_msg_list IN VARCHAR2,
4108         p_doc_id        IN NUMBER,
4109         p_doc_version   IN NUMBER,
4110         p_doc_type      IN  VARCHAR2,
4111         x_msg_data      OUT NOCOPY  VARCHAR2,
4112         x_msg_count     OUT NOCOPY  NUMBER,
4113         x_return_status OUT NOCOPY  VARCHAR2)
4114     IS
4115 
4116     CURSOR del_cur IS
4117     SELECT *
4118     FROM okc_deliverables
4119     WHERE business_document_id = p_doc_id
4120     AND   business_document_version = -99
4121     AND   business_document_type = p_doc_type
4122     AND   manage_yn = 'N';
4123     del_rec del_cur%ROWTYPE;
4124 
4125 
4126     l_api_name      CONSTANT VARCHAR2(30) :='version_deliverables';
4127     delRecTab       delRecTabType;
4128     delNewTab       delRecTabType;
4129     --delInsTab       delRecTabType;
4130     l_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
4131     l_deliverable_id NUMBER;
4132     j PLS_INTEGER := 0;
4133     k PLS_INTEGER := 0;
4134     q PLS_INTEGER := 0;
4135     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
4136     TYPE delIdTabType IS TABLE OF delIdRecType;
4137     delIdTab    delIdTabType;
4138 
4139     BEGIN
4140 
4141             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4142                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4143                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4144             END IF;
4145 ----------------------------------------
4146 /*****
4147 8i compatability bug#3307941
4148 ***/
4149 
4150 
4151     FOR del_rec IN del_cur LOOP
4152       k := k+1;
4153       delRecTab(k).deliverable_id := del_rec.deliverable_id;
4154       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
4155       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
4156       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
4157       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
4158       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
4159       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
4160       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
4161       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
4162       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
4163       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
4164       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
4165       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
4166       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
4167       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
4168       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
4169       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
4170       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
4171       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
4172       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
4173       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
4174       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
4175       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
4176       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
4177       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
4178       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
4179       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
4180       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
4181       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
4182       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
4183       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
4184       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
4185       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
4186       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
4187       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
4188       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
4189       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
4190       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
4191       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
4192       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
4193       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
4194       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
4195       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
4196       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
4197       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
4198       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
4199       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
4200       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
4201       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
4202       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
4203       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
4204       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
4205       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
4206       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
4207       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
4208       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
4209       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
4210       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
4211       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
4212       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
4213       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
4214       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
4215       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
4216       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
4217       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
4218       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
4219       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
4220       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
4221       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
4222       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
4223       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
4224       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
4225       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
4226       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
4227       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
4228       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
4229       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
4230       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
4231       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
4232       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
4233       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
4234       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
4235       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
4236       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
4237       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
4238       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
4239       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
4240 
4241             END LOOP;
4242         IF del_cur%ISOPEN THEN
4243           CLOSE del_cur ;
4244         END IF;
4245 
4246 
4247         /* commented for 8i compatability bug#330794 major code change
4248         OPEN del_cur;
4249         FETCH del_cur BULK COLLECT INTO delRecTab;**/
4250         IF delRecTab.COUNT <> 0 THEN
4251            -- initialize the table type variable
4252            delIdTab := delIdTabType();
4253         FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
4254             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4255                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside def cursor loop'||
4256                 to_char(delRecTab(i).deliverable_id));
4257             END IF;
4258 
4259                 /* bug#3630770 commented this code and moved to clear_amendment_operation
4260                    IF delRecTab(i).amendment_operation = 'DELETED' AND
4261                    delRecTab(i).summary_amend_operation_code is null THEN
4262                    -- Since the summary_amend_operation_code is null, the deliverable is not
4263                    -- existing in the signed contract, it was added and deleted in the intermediate
4264                    -- versions. So hard delete the record.
4265                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4266                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4267                         ,'100: Amendment_operation_summary_code is null hard delete this deliverable'||
4268                         to_char(delRecTab(i).deliverable_id));
4269                     END IF;
4270                      delete from okc_deliverables where deliverable_id = delRecTab(i).deliverable_id;*/
4271 
4272 
4273                         j:=j+1;
4274                         q:=q+1;
4275                         -- extend table type
4276                         delIdTab.extend;
4277                         -- build the id table to copy attachments
4278                         delIdTab(q).orig_del_id := delRecTab(i).deliverable_id;
4279                         -- build new version deliverables table
4280                         delNewTab(j):= delRecTab(i);
4281                         --bug#3293314 update last amendment date only
4282                         --if they is an amendment on the deliverable
4283                         IF delRecTab(i).amendment_operation IS NOT NULL THEN
4284                             delNewTab(j).last_amendment_date :=  delRecTab(i).last_amendment_date;
4285                         END IF;
4286                         select okc_deliverable_id_s.nextval
4287                         INTO delNewTab(j).deliverable_id from dual;
4288                         delNewTab(j).business_document_version := p_doc_version;
4289                         delIdTab(q).del_id := delNewTab(j).deliverable_id;
4290 
4291         END  LOOP;-- delRecTab(i)
4292         END IF; --delRecTab.COUNT <> 0
4293 
4294         /***
4295         BULK INSERT into okc_deliverables the new version of deliverables.
4296         ***/
4297         IF delNewTab.COUNT <> 0 THEN
4298                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4299                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
4300                     END IF;
4301         -- update the who columns
4302         FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
4303           -- do not reset the creation date bug#3641366
4304           -- delNewTab(j).creation_date := sysdate;
4305           -- delNewTab(j).created_by := FND_GLOBAL.User_id;
4306            delNewTab(j).last_update_date := sysdate;
4307            delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
4308            delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
4309         END  LOOP;
4310         ------------------------------------------
4311 
4312 
4313                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4314                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
4315                 END IF;
4316                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
4317                 INSERT INTO okc_deliverables
4318                 (DELIVERABLE_ID,
4319                 BUSINESS_DOCUMENT_TYPE      ,
4320                 BUSINESS_DOCUMENT_ID        ,
4321                 BUSINESS_DOCUMENT_NUMBER    ,
4322                 DELIVERABLE_TYPE            ,
4323                 RESPONSIBLE_PARTY           ,
4324                 INTERNAL_PARTY_CONTACT_ID   ,
4325                 EXTERNAL_PARTY_CONTACT_ID   ,
4326                 DELIVERABLE_NAME            ,
4327                 DESCRIPTION                 ,
4328                 COMMENTS                    ,
4329                 DISPLAY_SEQUENCE            ,
4330                 FIXED_DUE_DATE_YN           ,
4331                 ACTUAL_DUE_DATE             ,
4332                 PRINT_DUE_DATE_MSG_NAME     ,
4333                 RECURRING_YN                ,
4334                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
4335                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
4336                 NOTIFY_PRIOR_DUE_DATE_YN    ,
4337                 NOTIFY_COMPLETED_YN         ,
4338                 NOTIFY_OVERDUE_YN           ,
4339                 NOTIFY_ESCALATION_YN        ,
4340                 NOTIFY_ESCALATION_VALUE     ,
4341                 NOTIFY_ESCALATION_UOM       ,
4342                 ESCALATION_ASSIGNEE         ,
4343                 AMENDMENT_OPERATION         ,
4344                 PRIOR_NOTIFICATION_ID       ,
4345                 AMENDMENT_NOTES             ,
4346                 COMPLETED_NOTIFICATION_ID   ,
4347                 OVERDUE_NOTIFICATION_ID     ,
4348                 ESCALATION_NOTIFICATION_ID  ,
4349                 LANGUAGE                    ,
4350                 ORIGINAL_DELIVERABLE_ID     ,
4351                 REQUESTER_ID                ,
4352                 EXTERNAL_PARTY_ID           ,
4353                 EXTERNAL_PARTY_ROLE           ,
4354                 RECURRING_DEL_PARENT_ID      ,
4355                 BUSINESS_DOCUMENT_VERSION   ,
4356                 RELATIVE_ST_DATE_DURATION   ,
4357                 RELATIVE_ST_DATE_UOM        ,
4358                 RELATIVE_ST_DATE_EVENT_ID   ,
4359                 RELATIVE_END_DATE_DURATION  ,
4360                 RELATIVE_END_DATE_UOM       ,
4361                 RELATIVE_END_DATE_EVENT_ID  ,
4362                 REPEATING_DAY_OF_MONTH      ,
4363                 REPEATING_DAY_OF_WEEK       ,
4364                 REPEATING_FREQUENCY_UOM     ,
4365                 REPEATING_DURATION          ,
4366                 FIXED_START_DATE            ,
4367                 FIXED_END_DATE              ,
4368                 MANAGE_YN                   ,
4369                 INTERNAL_PARTY_ID           ,
4370                 DELIVERABLE_STATUS          ,
4371                 STATUS_CHANGE_NOTES         ,
4372                 CREATED_BY                  ,
4373                 CREATION_DATE               ,
4374                 LAST_UPDATED_BY             ,
4375                 LAST_UPDATE_DATE            ,
4376                 LAST_UPDATE_LOGIN           ,
4377                 OBJECT_VERSION_NUMBER       ,
4378                 ATTRIBUTE_CATEGORY          ,
4379                 ATTRIBUTE1                  ,
4380                 ATTRIBUTE2                  ,
4381                 ATTRIBUTE3                  ,
4382                 ATTRIBUTE4                  ,
4383                 ATTRIBUTE5                  ,
4384                 ATTRIBUTE6                  ,
4385                 ATTRIBUTE7                  ,
4386                 ATTRIBUTE8                  ,
4387                 ATTRIBUTE9                  ,
4388                 ATTRIBUTE10                 ,
4389                 ATTRIBUTE11                 ,
4390                 ATTRIBUTE12                 ,
4391                 ATTRIBUTE13                 ,
4392                 ATTRIBUTE14                 ,
4393                 ATTRIBUTE15                 ,
4394                 DISABLE_NOTIFICATIONS_YN    ,
4395                 LAST_AMENDMENT_DATE         ,
4396                 BUSINESS_DOCUMENT_LINE_ID   ,
4397                 EXTERNAL_PARTY_SITE_ID      ,
4398                 START_EVENT_DATE            ,
4399                 END_EVENT_DATE              ,
4400                 SUMMARY_AMEND_OPERATION_CODE,
4401                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4402                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
4403                 PAY_HOLD_PRIOR_DUE_DATE_YN,
4404                 PAY_HOLD_OVERDUE_YN
4405                 )
4406                 VALUES (
4407                 delNewTab(i).DELIVERABLE_ID,
4408                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
4409                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
4410                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
4411                 delNewTab(i).DELIVERABLE_TYPE            ,
4412                 delNewTab(i).RESPONSIBLE_PARTY           ,
4413                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
4414                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
4415                 delNewTab(i).DELIVERABLE_NAME            ,
4416                 delNewTab(i).DESCRIPTION                 ,
4417                 delNewTab(i).COMMENTS                    ,
4418                 delNewTab(i).DISPLAY_SEQUENCE            ,
4419                 delNewTab(i).FIXED_DUE_DATE_YN           ,
4420                 delNewTab(i).ACTUAL_DUE_DATE             ,
4421                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
4422                 delNewTab(i).RECURRING_YN                ,
4423                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
4424                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
4425                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
4426                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
4427                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
4428                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
4429                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
4430                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
4431                 delNewTab(i).ESCALATION_ASSIGNEE         ,
4432                 delNewTab(i).AMENDMENT_OPERATION         ,
4433                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
4434                 delNewTab(i).AMENDMENT_NOTES             ,
4435                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
4436                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
4437                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
4438                 delNewTab(i).LANGUAGE                    ,
4439                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
4440                 delNewTab(i).REQUESTER_ID                ,
4441                 delNewTab(i).EXTERNAL_PARTY_ID           ,
4442                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
4443                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
4444                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
4445                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
4446                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
4447                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
4448                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
4449                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
4450                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
4451                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
4452                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
4453                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
4454                 delNewTab(i).REPEATING_DURATION          ,
4455                 delNewTab(i).FIXED_START_DATE            ,
4456                 delNewTab(i).FIXED_END_DATE              ,
4457                 delNewTab(i).MANAGE_YN                   ,
4458                 delNewTab(i).INTERNAL_PARTY_ID           ,
4459                 delNewTab(i).DELIVERABLE_STATUS          ,
4460                 delNewTab(i).STATUS_CHANGE_NOTES         ,
4461                 delNewTab(i).CREATED_BY                  ,
4462                 delNewTab(i).CREATION_DATE               ,
4463                 delNewTab(i).LAST_UPDATED_BY             ,
4464                 delNewTab(i).LAST_UPDATE_DATE            ,
4465                 delNewTab(i).LAST_UPDATE_LOGIN           ,
4466                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
4467                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
4468                 delNewTab(i).ATTRIBUTE1                  ,
4469                 delNewTab(i).ATTRIBUTE2                  ,
4470                 delNewTab(i).ATTRIBUTE3                  ,
4471                 delNewTab(i).ATTRIBUTE4                  ,
4472                 delNewTab(i).ATTRIBUTE5                  ,
4473                 delNewTab(i).ATTRIBUTE6                  ,
4474                 delNewTab(i).ATTRIBUTE7                  ,
4475                 delNewTab(i).ATTRIBUTE8                  ,
4476                 delNewTab(i).ATTRIBUTE9                  ,
4477                 delNewTab(i).ATTRIBUTE10                 ,
4478                 delNewTab(i).ATTRIBUTE11                 ,
4479                 delNewTab(i).ATTRIBUTE12                 ,
4480                 delNewTab(i).ATTRIBUTE13                 ,
4481                 delNewTab(i).ATTRIBUTE14                 ,
4482                 delNewTab(i).ATTRIBUTE15                 ,
4483                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
4484                 delNewTab(i).LAST_AMENDMENT_DATE         ,
4485                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
4486                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
4487                 delNewTab(i).START_EVENT_DATE            ,
4488                 delNewTab(i).END_EVENT_DATE              ,
4489                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
4490                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4491                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
4492                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
4493                 delNewTab(i).PAY_HOLD_OVERDUE_YN
4494                 );
4495                 END LOOP;
4496 
4497         -- insert records code changed for 8i compatability bug#3307941
4498         /* commented for 8i compatability bug#330794 major code change
4499         FORALL j IN delNewTab.FIRST..delNewTab.LAST
4500         INSERT INTO okc_deliverables VALUES delNewTab(j);*/
4501 
4502             FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
4503                 IF attachment_exists(p_entity_name => G_ENTITY_NAME
4504                       ,p_pk1_value    =>  delIdTab(j).orig_del_id) THEN
4505                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4506                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
4507                     END IF;
4508                     -- copy attachments
4509                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
4510                     fnd_attached_documents2_pkg.copy_attachments(
4511                     X_from_entity_name =>  G_ENTITY_NAME,
4512                     X_from_pk1_value   =>  delIdTab(j).orig_del_id,
4513                     X_to_entity_name   =>  G_ENTITY_NAME,
4514                     X_to_pk1_value     =>  to_char(delIdTab(j).del_id),
4515                     X_CREATED_BY       =>  FND_GLOBAL.User_id,
4516                     X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
4517                     );
4518                 END IF;
4519             END LOOP;
4520 
4521         END IF;
4522         IF del_cur %ISOPEN THEN
4523           CLOSE del_cur ;
4524         END IF;
4525 
4526 
4527         /*** start bug#3618448 do not flush amendment operations during versioning. PO will call
4528         clear amendment to flush amendment operation code.
4529             FOR del_rec IN del_cur LOOP
4530                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4531                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4532                     ,'100: Flush Amendment operation:'
4533                     ||to_char(del_rec.deliverable_id));
4534                 END IF;
4535                 UPDATE okc_deliverables SET amendment_operation = null,
4536                 --amendment_notes = null,
4537                 --last_amendment_date = null,
4538                 last_updated_by= Fnd_Global.User_Id,
4539                 last_update_date = sysdate,
4540                 last_update_login=Fnd_Global.Login_Id
4541                 WHERE deliverable_id = del_rec.deliverable_id;
4542 
4543             END LOOP;
4544         IF del_cur %ISOPEN THEN
4545           CLOSE del_cur ;
4546         END IF;*** end bug#3618448 **/
4547             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4548                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4549                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4550             END IF;
4551 
4552             x_return_status := l_return_status;
4553     EXCEPTION
4554     WHEN FND_API.G_EXC_ERROR THEN
4555             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4556                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4557                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_ERROR'||
4558                 substr(sqlerrm,1,200));
4559             END IF;
4560         IF del_cur %ISOPEN THEN
4561           CLOSE del_cur ;
4562         END IF;
4563     x_return_status := G_RET_STS_ERROR;
4564       FND_MSG_PUB.Count_And_Get(
4565         p_count =>  x_msg_count,
4566         p_data  =>  x_msg_data
4567        );
4568 
4569     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4570             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4571                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4572                 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||
4573                 substr(sqlerrm,1,200));
4574             END IF;
4575         IF del_cur %ISOPEN THEN
4576           CLOSE del_cur ;
4577         END IF;
4578     x_return_status := G_RET_STS_UNEXP_ERROR;
4579       FND_MSG_PUB.Count_And_Get(
4580         p_count =>  x_msg_count,
4581         p_data  =>  x_msg_data
4582         );
4583 
4584     WHEN OTHERS THEN
4585         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4586            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4587            ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4588         END IF;
4589         IF del_cur %ISOPEN THEN
4590           CLOSE del_cur ;
4591         END IF;
4592     x_return_status := G_RET_STS_UNEXP_ERROR;
4593       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4594          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4595       END IF;
4596       FND_MSG_PUB.Count_And_Get(
4597         p_count =>  x_msg_count,
4598         p_data  =>  x_msg_data
4599         );
4600     END version_deliverables;
4601 
4602     /***Invoked From: OKC_TERMS_VERSION_GRP.clear_amendment
4603     This API is invoked to clear amendment operation,
4604     summary amend operation code and amendment notes
4605     on deliverables for a given busdoc.
4606     Parameter Details:
4607     p_doc_id :       Business document Id
4608     p_doc_type :     Business document type
4609     bug#3618448 new param added
4610     p_keep_summary:  If set to 'N' all amendment attributes should be cleared.
4611     If 'Y' then only amendment_operation will be cleared, default is 'N'.
4612     ***/
4613     PROCEDURE clear_amendment_operation (
4614         p_api_version   IN NUMBER,
4615         p_init_msg_list IN VARCHAR2,
4616         p_doc_id        IN NUMBER,
4617         p_doc_type      IN VARCHAR2,
4618         x_msg_data      OUT NOCOPY  VARCHAR2,
4619         x_msg_count     OUT NOCOPY  NUMBER,
4620         x_return_status OUT NOCOPY  VARCHAR2,
4621         p_keep_summary  IN VARCHAR2 )
4622 
4623     IS
4624     CURSOR def_cur IS
4625     SELECT deliverable_id
4626     ,amendment_operation
4627     ,summary_amend_operation_code
4628     FROM okc_deliverables
4629     WHERE business_document_id = p_doc_id
4630     AND   business_document_version = -99
4631     AND   business_document_type = p_doc_type
4632     AND   manage_yn = 'N';
4633 
4634     def_rec def_cur%ROWTYPE;
4635     --TYPE delIdTabType IS TABLE OF NUMBER;
4636     --delIdTab    delIdTabType;
4637     l_return_status  VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
4638     l_api_name      CONSTANT VARCHAR2(30) :='clear_amendment_operation';
4639 
4640     BEGIN
4641 
4642          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4643            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': inside the API');
4644            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_id :'||p_doc_id);
4645            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_type :'||p_doc_type);
4646            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':p_keep_summary:'||p_keep_summary);
4647          END IF;
4648         -- Flush amendment attributes on the definition
4649         FOR def_rec IN def_cur LOOP
4650             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4651                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '
4652                 ||to_char(def_rec.deliverable_id));
4653             END IF;
4654             IF p_keep_summary = 'N' THEN
4655                 --bug#3630770,3639432 As per the new changes to amendments we hard delete deliverable
4656                 -- if either amendment_operation or summary code is 'DELETED' 20th May 2004
4657                 IF def_rec.amendment_operation = 'DELETED' OR
4658                     def_rec.summary_amend_operation_code = 'DELETED' THEN
4659                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4660                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4661                         '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4662                     END IF;
4663                     -- delete deleverable definitions which are removed from approved business doc
4664                     delete from okc_deliverables
4665                     where   deliverable_id = def_rec.deliverable_id;
4666                 ELSE
4667                     -- clear all amendment attributes but
4668                     -- don't clear last_amendment_date this is needed for PO change History
4669                     -- to enable or disable deliverables link
4670                     UPDATE okc_deliverables SET amendment_operation = null,
4671                     summary_amend_operation_code = null,
4672                     amendment_notes = null,
4673                     last_updated_by= Fnd_Global.User_Id,
4674                     last_update_date = sysdate,
4675                     last_update_login=Fnd_Global.Login_Id
4676                     WHERE deliverable_id = def_rec.deliverable_id;
4677                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4678                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4679                         ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
4680                     END IF;
4681                 END IF;
4682 
4683             ELSE -- p_keep_summary = 'Y'
4684                 --bug#3630770, 3639432 As per the new changes to amendments we hard delete deliverable
4685                 -- if either amendment_operation is DELETED or summary code is null
4686                 IF def_rec.amendment_operation = 'DELETED' AND
4687                     def_rec.summary_amend_operation_code is null THEN
4688                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4689                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4690                         '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4691                     END IF;
4692                     -- delete deleverable definitions which are removed from approved business doc
4693                     delete from okc_deliverables
4694                     where   deliverable_id = def_rec.deliverable_id;
4695                 ELSE
4696                     -- clear only amendment_operation
4697                     UPDATE okc_deliverables SET amendment_operation = null,
4698                     last_updated_by= Fnd_Global.User_Id,
4699                     last_update_date = sysdate,
4700                     last_update_login=Fnd_Global.Login_Id
4701                     WHERE deliverable_id = def_rec.deliverable_id;
4702                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4703                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4704                         ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
4705                     END IF;
4706                 END IF;
4707 
4708             END IF; -- p_keep_summary
4709         END LOOP; -- del_cur loop
4710         -- close any open cursors
4711         IF def_cur %ISOPEN THEN
4712           CLOSE def_cur ;
4713         END IF;
4714         x_return_status := l_return_status;
4715 
4716     EXCEPTION
4717     WHEN OTHERS THEN
4718        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4719           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4720           ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.clear_amendments with G_EXC_UNEXPECTED_ERROR'||
4721           substr(sqlerrm,1,200));
4722        END IF;
4723         -- close any open cursors
4724         IF def_cur %ISOPEN THEN
4725           CLOSE def_cur ;
4726         END IF;
4727         x_return_status := G_RET_STS_UNEXP_ERROR;
4728       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4729          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4730       END IF;
4731       FND_MSG_PUB.Count_And_Get(
4732         p_count =>  x_msg_count,
4733         p_data  =>  x_msg_data
4734         );
4735 
4736     END clear_amendment_operation;
4737 
4738 
4739 
4740     /*** This procedure will disable or turn manage_yn to 'N'
4741     for a given document type and version ***/
4742     PROCEDURE disable_deliverables (
4743         p_api_version       IN  NUMBER,
4744         p_init_msg_list     IN VARCHAR2,
4745         p_doc_id            IN  NUMBER,
4746         p_doc_version       IN  NUMBER,
4747         p_doc_type          IN VARCHAR2,
4748         x_msg_data      OUT NOCOPY  VARCHAR2,
4749         x_msg_count     OUT NOCOPY  NUMBER,
4750         x_return_status OUT NOCOPY  VARCHAR2)
4751     IS
4752     l_api_name      CONSTANT VARCHAR2(30) :='disable_deliverable';
4753     CURSOR del_cur IS
4754     SELECT deliverable_id
4755     FROM okc_deliverables
4756     WHERE business_document_id = p_doc_id
4757     AND   business_document_version =p_doc_version
4758     AND   business_document_type = p_doc_type
4759     AND   manage_yn = 'Y';
4760     TYPE delIdTabType IS TABLE OF NUMBER;
4761     delIdTab    delIdTabType;
4762     l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4763 
4764     BEGIN
4765           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4766             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4767             ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES');
4768           END IF;
4769             OPEN del_cur;
4770             FETCH del_cur BULK COLLECT INTO delIdTab;
4771             IF delIdTab.COUNT <> 0 THEN
4772                 FORALL i IN delIdTab.FIRST..delIdTab.LAST
4773                 UPDATE okc_deliverables SET manage_yn = 'N',
4774                 last_updated_by= Fnd_Global.User_Id,
4775                 last_update_date = sysdate,
4776                 last_update_login=Fnd_Global.Login_Id
4777                 WHERE deliverable_id = delIdTab(i);
4778             END IF;
4779         IF del_cur %ISOPEN THEN
4780           CLOSE del_cur ;
4781         END IF;
4782             x_return_status := l_return_status;
4783 
4784     EXCEPTION
4785     WHEN FND_API.G_EXC_ERROR THEN
4786         IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4787             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_ERROR');
4788         END IF;
4789         IF del_cur %ISOPEN THEN
4790           CLOSE del_cur ;
4791         END IF;
4792       x_return_status := G_RET_STS_ERROR;
4793       FND_MSG_PUB.Count_And_Get(
4794         p_count =>  x_msg_count,
4795         p_data  =>  x_msg_data
4796         );
4797     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4798         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4799             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');
4800         END IF;
4801         IF del_cur %ISOPEN THEN
4802           CLOSE del_cur ;
4803         END IF;
4804       x_return_status := G_RET_STS_UNEXP_ERROR;
4805       FND_MSG_PUB.Count_And_Get(
4806         p_count =>  x_msg_count,
4807         p_data  =>  x_msg_data
4808         );
4809 
4810     WHEN OTHERS THEN
4811         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4812             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');
4813         END IF;
4814         IF del_cur %ISOPEN THEN
4815           CLOSE del_cur ;
4816         END IF;
4817       x_return_status := G_RET_STS_UNEXP_ERROR;
4818       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4819         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4820       END IF;
4821       FND_MSG_PUB.Count_And_Get(
4822         p_count =>  x_msg_count,
4823         p_data  =>  x_msg_data
4824         );
4825 
4826     END disable_deliverables;
4827 
4828     -- Creates status history for a given deliverable
4829     PROCEDURE create_del_status_history(
4830         p_api_version       IN NUMBER,
4831         p_init_msg_list     IN VARCHAR2,
4832         p_del_id            IN NUMBER,
4833         p_deliverable_status    IN VARCHAR2,
4834         x_msg_data      OUT NOCOPY  VARCHAR2,
4835         x_msg_count     OUT NOCOPY  NUMBER,
4836         x_return_status OUT NOCOPY  VARCHAR2)
4837     IS
4838 
4839     l_api_name      CONSTANT VARCHAR2(30) :='create_del_status_history';
4840     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
4841     l_msg_count       NUMBER;
4842     l_msg_data        VARCHAR2(1000);
4843     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
4844     j PLS_INTEGER := 0;
4845 
4846 
4847     BEGIN
4848 
4849           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4850             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
4851           END IF;
4852 
4853 
4854                     --insert into status history
4855                     INSERT INTO okc_del_status_history (
4856                     deliverable_id,
4857                     deliverable_status,
4858                     status_changed_by,
4859                     status_change_date,
4860                     status_change_notes,
4861                     object_version_number,
4862                     created_by,
4863                     creation_date,
4864                     last_updated_by,
4865                     last_update_date,
4866                     last_update_login)
4867                     VALUES(
4868                      p_del_id,
4869                      p_deliverable_status,
4870                      null,
4871                      sysdate,
4872                      null,
4873                      1,
4874                      Fnd_Global.User_Id,
4875                      sysdate,
4876                      Fnd_Global.User_Id,
4877                      sysdate,
4878                      Fnd_Global.Login_Id);
4879 
4880           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4881             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
4882           END IF;
4883           x_return_status := l_return_status;
4884     EXCEPTION
4885     WHEN FND_API.G_EXC_ERROR THEN
4886           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4887             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
4888           END IF;
4889     x_return_status := G_RET_STS_ERROR;
4890       FND_MSG_PUB.Count_And_Get(
4891         p_count =>  x_msg_count,
4892         p_data  =>  x_msg_data
4893         );
4894 
4895     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4896           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4897             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
4898           END IF;
4899     x_return_status := G_RET_STS_UNEXP_ERROR;
4900       FND_MSG_PUB.Count_And_Get(
4901         p_count =>  x_msg_count,
4902         p_data  =>  x_msg_data
4903         );
4904 
4905     WHEN OTHERS THEN
4906           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4907             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
4908           END IF;
4909     x_return_status := G_RET_STS_UNEXP_ERROR;
4910       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);
4911       END IF;
4912       FND_MSG_PUB.Count_And_Get(
4913         p_count =>  x_msg_count,
4914         p_data  =>  x_msg_data
4915         );
4916     END create_del_status_history;
4917 
4918     /***
4919     This API is invoked from OKC_MANAGE_DELIVERABLES_GRP.activate_deliverables
4920     and close_deliverables. It changes the status to a given status for a busdoc.
4921     Creates status history for deliverable.
4922     ***/
4923     PROCEDURE change_deliverable_status (
4924         p_api_version       IN NUMBER,
4925         p_init_msg_list     IN VARCHAR2,
4926         p_doc_id            IN NUMBER,
4927         p_doc_version       IN NUMBER,
4928         p_doc_type          IN VARCHAR2,
4929         p_cancel_yn         IN VARCHAR2,
4930         p_cancel_event_code IN VARCHAR2,
4931         p_current_status    IN VARCHAR2,
4932         p_new_status        IN VARCHAR2,
4933         p_manage_yn         IN VARCHAR2,
4934         x_msg_data      OUT NOCOPY  VARCHAR2,
4935         x_msg_count     OUT NOCOPY  NUMBER,
4936         x_return_status OUT NOCOPY  VARCHAR2)
4937     IS
4938     l_api_name      CONSTANT VARCHAR2(30) :='change_deliverable_status';
4939     CURSOR del_activate_cur IS
4940     SELECT deliverable_id
4941     FROM okc_deliverables
4942     WHERE business_document_id = p_doc_id
4943     AND   business_document_version =p_doc_version
4944     AND   business_document_type = p_doc_type
4945     AND   deliverable_status = p_current_status
4946     AND   actual_due_date is not null;
4947 
4948  /*   CURSOR del_cancel_cur IS
4949     SELECT deliverable_id
4950     FROM okc_deliverables
4951     WHERE business_document_id = p_doc_id
4952     AND   business_document_version =p_doc_version
4953     AND   business_document_type = p_doc_type
4954     AND   NVL(relative_st_date_event_id,0) NOT IN (
4955     select bus_doc_event_id
4956     from okc_bus_doc_events_v
4957     where business_event_code = p_cancel_event_code);
4958 */
4959     TYPE delIdTabType IS TABLE OF NUMBER;
4960     delIdTab    delIdTabType;
4961 
4962     TYPE delStsTabType IS TABLE OF okc_del_status_history%ROWTYPE;
4963     delStsTab   delStsTabType;
4964 
4965     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
4966     l_msg_count       NUMBER;
4967     l_msg_data        VARCHAR2(1000);
4968     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
4969     j PLS_INTEGER := 0;
4970 
4971 
4972     BEGIN
4973 
4974           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4975             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
4976           END IF;
4977         IF p_cancel_yn = 'N' THEN
4978             OPEN del_activate_cur;
4979             FETCH del_activate_cur BULK COLLECT INTO delIdTab;
4980             IF delIdTab.COUNT <> 0 THEN
4981                     delStsTab   := delStsTabType();
4982             FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
4983 
4984                     j := j+1;
4985                     delStsTab.extend;
4986                     delStsTab(j).deliverable_id := delIdTab(i);
4987                     delStsTab(j).deliverable_status:= p_new_status;
4988                     delStsTab(j).status_change_date:= sysdate;
4989                     delStsTab(j).status_change_notes:= null;
4990                     delStsTab(j).object_version_number:= 1;
4991                     delStsTab(j).created_by:= Fnd_Global.User_Id;
4992                     delStsTab(j).creation_date := sysdate;
4993                     delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
4994                     delStsTab(j).last_update_date := sysdate;
4995                     delStsTab(j).last_update_login := Fnd_Global.Login_Id;
4996             END LOOP;
4997 
4998                     --Bulk update of status in okc_deliverables
4999                     FORALL i IN delIdTab.FIRST..delIdTab.LAST
5000                     UPDATE okc_deliverables
5001                     SET
5002                     deliverable_status = p_new_status,
5003                     manage_yn   = p_manage_yn,
5004                     last_updated_by= Fnd_Global.User_Id,
5005                     last_update_date = sysdate,
5006                     last_update_login = Fnd_Global.Login_Id
5007                     WHERE deliverable_id = delIdTab(i);
5008                     --Bulk insert into status history
5009                         FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5010                 /*code changed for 8i compatability bug#3307941
5011                 INSERT INTO okc_del_status_history VALUES delStsTab(i); */
5012                         INSERT INTO okc_del_status_history
5013                         (deliverable_id,
5014                         deliverable_status,
5015                         STATUS_CHANGED_BY,
5016                         status_change_date,
5017                         status_change_notes,
5018                         object_version_number,
5019                         created_by,
5020                         creation_date,
5021                         last_updated_by,
5022                         last_update_date,
5023                         last_update_login)
5024                         VALUES (delStsTab(i).DELIVERABLE_ID
5025                         ,delStsTab(i).DELIVERABLE_STATUS
5026                         ,delStsTab(i).STATUS_CHANGED_BY
5027                         ,delStsTab(i).STATUS_CHANGE_DATE
5028                         ,delStsTab(i).STATUS_CHANGE_NOTES
5029                         ,delStsTab(i).OBJECT_VERSION_NUMBER
5030                         ,delStsTab(i).CREATED_BY
5031                         ,delStsTab(i).CREATION_DATE
5032                         ,delStsTab(i).LAST_UPDATED_BY
5033                         ,delStsTab(i).LAST_UPDATE_DATE
5034                         ,delStsTab(i).LAST_UPDATE_LOGIN
5035                         );
5036                         END LOOP;
5037             END IF;
5038             CLOSE del_activate_cur;
5039 
5040         -- If status change is called when any business document is cancelled
5041         ELSIF p_cancel_yn = 'Y' THEN
5042 
5043 /** Updated this procedure - 01/20/2004 by SASETHI
5044     Commendted out code for changing deliverable status to CANCELLED when canceled
5045     operation is called from Mng Deliverables GRP.
5046 **/
5047            -- disable deliverables that are currently being managed.
5048             -- before activating deliverables on new version
5049             disable_deliverables (
5050                  p_api_version      => l_api_version ,
5051                  p_init_msg_list    => FND_API.G_FALSE ,
5052                  p_doc_id           => p_doc_id ,
5053                  p_doc_version      => p_doc_version ,
5054                  p_doc_type         => p_doc_type ,
5055                  x_msg_data         => l_msg_data ,
5056                  x_msg_count        => l_msg_count ,
5057                  x_return_status    => l_return_status );
5058 
5059 /** Status change is not required as per bug # 3369337
5060 
5061             OPEN del_cancel_cur;
5062             FETCH del_cancel_cur BULK COLLECT INTO delIdTab;
5063 
5064             IF delIdTab.COUNT <> 0 THEN
5065                 delStsTab   := delStsTabType();
5066                 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
5067 
5068                     j := j+1;
5069                     delStsTab.extend;
5070                     --delStsTab(j).deliverable_id := delIdTab(i).deliverable_id;
5071                     delStsTab(j).deliverable_id := delIdTab(i);
5072                     delStsTab(j).deliverable_status:= p_new_status;
5073                     delStsTab(j).status_change_date:= sysdate;
5074                     delStsTab(j).status_change_notes:= null;
5075                     delStsTab(j).object_version_number:= 1;
5076                     delStsTab(j).created_by:= Fnd_Global.User_Id;
5077                     delStsTab(j).creation_date := sysdate;
5078                     delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
5079                     delStsTab(j).last_update_date := sysdate;
5080                     delStsTab(j).last_update_login := Fnd_Global.Login_Id;
5081                 END LOOP;
5082 
5083                 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
5084                     -- BULK UPDATE of status
5085                     FORALL i IN delIdTab.FIRST..delIdTab.LAST
5086                     UPDATE okc_deliverables
5087                     SET
5088                     deliverable_status = p_new_status,
5089                     manage_yn   = 'N',
5090                     last_updated_by= Fnd_Global.User_Id,
5091                     last_update_date = sysdate,
5092                     last_update_login = Fnd_Global.Login_Id
5093                     WHERE deliverable_id = delIdTab(i);
5094 
5095                 -- BULK INSERT into status history
5096                 FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5097                 --code changed for 8i compatability bug#3307941
5098                 --INSERT INTO okc_del_status_history VALUES delStsTab(i);
5099                 INSERT INTO okc_del_status_history
5100                 (deliverable_id,
5101                 deliverable_status,
5102                 STATUS_CHANGED_BY,
5103                 status_change_date,
5104                 status_change_notes,
5105                 object_version_number,
5106                 created_by,
5107                 creation_date,
5108                 last_updated_by,
5109                 last_update_date,
5110                 last_update_login)
5111                 VALUES (delStsTab(i).DELIVERABLE_ID
5112                 ,delStsTab(i).DELIVERABLE_STATUS
5113                 ,delStsTab(i).STATUS_CHANGED_BY
5114                 ,delStsTab(i).STATUS_CHANGE_DATE
5115                 ,delStsTab(i).STATUS_CHANGE_NOTES
5116                 ,delStsTab(i).OBJECT_VERSION_NUMBER
5117                 ,delStsTab(i).CREATED_BY
5118                 ,delStsTab(i).CREATION_DATE
5119                 ,delStsTab(i).LAST_UPDATED_BY
5120                 ,delStsTab(i).LAST_UPDATE_DATE
5121                 ,delStsTab(i).LAST_UPDATE_LOGIN
5122                 );
5123                 END LOOP;
5124                 ELSE
5125                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5126                 END IF;
5127             END IF;
5128             CLOSE del_cancel_cur;
5129 **/
5130         END IF; -- if operation is for CANCELLED
5131 
5132           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5133             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
5134           END IF;
5135           x_return_status := l_return_status;
5136     EXCEPTION
5137     WHEN FND_API.G_EXC_ERROR THEN
5138           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5139             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');
5140           END IF;
5141         IF del_activate_cur %ISOPEN THEN
5142           CLOSE del_activate_cur ;
5143         END IF;
5144     x_return_status := G_RET_STS_ERROR;
5145       FND_MSG_PUB.Count_And_Get(
5146         p_count =>  x_msg_count,
5147         p_data  =>  x_msg_data
5148         );
5149 
5150     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5151           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5152             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');
5153           END IF;
5154         IF del_activate_cur %ISOPEN THEN
5155           CLOSE del_activate_cur ;
5156         END IF;
5157     x_return_status := G_RET_STS_UNEXP_ERROR;
5158       FND_MSG_PUB.Count_And_Get(
5159         p_count =>  x_msg_count,
5160         p_data  =>  x_msg_data
5161         );
5162 
5163     WHEN OTHERS THEN
5164           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5165             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');
5166           END IF;
5167         IF del_activate_cur %ISOPEN THEN
5168           CLOSE del_activate_cur ;
5169         END IF;
5170     x_return_status := G_RET_STS_UNEXP_ERROR;
5171       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);
5172       END IF;
5173       FND_MSG_PUB.Count_And_Get(
5174         p_count =>  x_msg_count,
5175         p_data  =>  x_msg_data
5176         );
5177 
5178     END change_deliverable_status;
5179 
5180 
5181 
5182     /***
5183     This is the Concurrent Program scheduled to run every day
5184     to send out notifications about overdue deliverables.
5185     It internally calls API overdue_del_notifier
5186     to check for overdue deliverabls and send out notifications
5187     ***/
5188     PROCEDURE overdue_deliverable_manager (
5189     errbuf  OUT NOCOPY VARCHAR2,
5190     retcode OUT NOCOPY VARCHAR2)
5191     IS
5192     l_api_name      CONSTANT VARCHAR2(30) :='overdue_deliverable_manager';
5193     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5194     l_msg_count       NUMBER;
5195     l_msg_data        VARCHAR2(1000);
5196     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5197     l_init_msg_list   VARCHAR2(3) := 'T';
5198     E_Resource_Busy   EXCEPTION;
5199     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
5200 
5201     BEGIN
5202           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5203             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5204           END IF;
5205     --Initialize the return code
5206         retcode := 0;
5207     --Invoke overdue_del_notifier
5208         overdue_del_notifier(
5209         p_api_version          => l_api_version ,
5210         p_init_msg_list        => l_init_msg_list,
5211         x_return_status        => l_return_status,
5212         x_msg_count            => l_msg_count,
5213         x_msg_data             => l_msg_data);
5214            --check return status
5215             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5216                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5217             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5218                 RAISE OKC_API.G_EXCEPTION_ERROR;
5219             END IF;
5220           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5221             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5222           END IF;
5223     EXCEPTION
5224     WHEN E_Resource_Busy THEN
5225           IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5226             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');
5227           END IF;
5228       l_return_status := okc_api.g_ret_sts_error;
5229       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5230     WHEN OTHERS THEN
5231           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5232             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');
5233           END IF;
5234       retcode := 2;
5235       errbuf  := substr(sqlerrm,1,200);
5236       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5237        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5238       END IF;
5239       IF FND_MSG_PUB.Count_Msg > 0 Then
5240         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5241           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5242         END LOOP;
5243       END IF;
5244       FND_MSG_PUB.initialize;
5245 
5246     END overdue_deliverable_manager;
5247 
5248     /***
5249     Invoked by Concurrent Program "overdue_deliverable_manager"
5250     Picks all deliverables that are overdue
5251     Invokes Deliverable Notifier to send out notifications
5252     Update deliverables with overdue_notification_id
5253     ***/
5254     PROCEDURE overdue_del_notifier(
5255     p_api_version                  IN NUMBER ,
5256     p_init_msg_list                IN VARCHAR2 ,
5257     x_return_status                OUT NOCOPY VARCHAR2,
5258     x_msg_count                    OUT NOCOPY NUMBER,
5259     x_msg_data                     OUT NOCOPY VARCHAR2) IS
5260 
5261     l_api_name      CONSTANT VARCHAR2(30) :='overdue_del_notifier';
5262 
5263     CURSOR del_cur IS
5264       SELECT deliverable_id,
5265              deliverable_name,
5266              deliverable_type,
5267              business_document_id,
5268              business_document_version,
5269              business_document_type,
5270              business_document_number,
5271              responsible_party,
5272              external_party_contact_id,
5273              internal_party_contact_id,
5274              requester_id
5275       FROM okc_deliverables
5276       WHERE manage_yn = 'Y'
5277       AND   disable_notifications_yn = 'N'
5278       AND   notify_overdue_yn = 'Y'
5279       AND   overdue_notification_id is null
5280       AND   business_document_type <> 'TEMPLATE'
5281       AND   deliverable_status IN ('OPEN','REJECTED')
5282       AND   actual_due_date < trunc(sysdate); --  bug#3617906 removed trunc on actual due date
5283 
5284     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5285     l_msg_count       NUMBER;
5286     l_msg_data        VARCHAR2(1000);
5287     l_notification_id NUMBER;
5288     j  PLS_INTEGER := 0;
5289 
5290     TYPE del_cur_tbl IS TABLE OF del_cur%ROWTYPE;
5291     selected_dels del_cur_tbl;
5292 
5293     TYPE OverdueNtfIdList IS TABLE OF okc_deliverables.overdue_notification_id%TYPE NOT NULL
5294         INDEX BY PLS_INTEGER;
5295     TYPE DeliverableIdList IS TABLE OF okc_deliverables.deliverable_id%TYPE NOT NULL
5296         INDEX BY PLS_INTEGER;
5297     overdue_ntf_ids OverdueNtfIdList;
5298     deliverable_ids DeliverableIdList;
5299 
5300     l_batch_size number(4) := 1000;
5301 
5302 
5303     BEGIN
5304       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5305         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5306       END IF;
5307 
5308       -- call start_activity to create savepoint, check comptability
5309       -- and initialize message list
5310       l_return_status := OKC_API.START_ACTIVITY(l_api_name
5311                                                 ,p_init_msg_list
5312                                                 ,'_PROCESS'
5313                                                 ,x_return_status);
5314 
5315       -- check if activity started successfully
5316       IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5317         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5318       ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5319         RAISE OKC_API.G_EXCEPTION_ERROR;
5320       END IF;
5321 
5322 
5323       OPEN del_cur;
5324       LOOP -- the following statement fetches 1000 rows or less in each iteration
5325 
5326         FETCH del_cur BULK COLLECT INTO selected_dels
5327         LIMIT l_batch_size;
5328 
5329         EXIT WHEN selected_dels.COUNT = 0;
5330 
5331         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5332           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: selected_dels.COUNT is :'||to_char(selected_dels.COUNT));
5333         END IF;
5334 
5335 
5336         FOR i IN selected_dels.FIRST..NVL(selected_dels.LAST, -1) LOOP
5337 
5338           -- log messages in concurrent program log file
5339           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5340                       selected_dels(i).business_document_type||'-'||selected_dels(i).business_document_number);
5341           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5342                       to_char(selected_dels(i).deliverable_id));
5343 
5344           okc_deliverable_wf_pvt.deliverables_notifier(
5345                       p_api_version               => 1.0,
5346                       p_init_msg_list             => FND_API.G_TRUE,
5347                       p_deliverable_id            => selected_dels(i).deliverable_id,
5348                       p_deliverable_name          => selected_dels(i).deliverable_name,
5349                       p_deliverable_type          => selected_dels(i).deliverable_type,
5350                       p_business_document_id      => selected_dels(i).business_document_id,
5351                       p_business_document_version => selected_dels(i).business_document_version,
5352                       p_business_document_type    => selected_dels(i).business_document_type,
5353                       p_business_document_number  => selected_dels(i).business_document_number,
5354                       p_resp_party                => selected_dels(i).responsible_party,
5355                       p_external_contact          => selected_dels(i).external_party_contact_id,
5356                       p_internal_contact          => selected_dels(i).internal_party_contact_id,
5357                       p_requester_id              => selected_dels(i).requester_id,
5358                       p_msg_code                  => 'OKC_DEL_OVERDUE_NTF_SUBJECT',
5359                       x_notification_id           => l_notification_id,
5360                       x_msg_data                  => l_msg_data,
5361                       x_msg_count                 => l_msg_count,
5362                       x_return_status             => l_return_status);
5363 
5364           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5365             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
5366           END IF;
5367 
5368           --If notification id is not null then the deliverables_notifier is success
5369           IF l_notification_id is not null THEN
5370             -- if return status is success then notification is sent to
5371             -- internal or external contact so update table with ntf id
5372             IF l_return_status = 'S' THEN
5373               j := j+1;
5374               deliverable_ids(j) := selected_dels(i).deliverable_id;
5375               overdue_ntf_ids(j) := l_notification_id;
5376             ELSIF l_return_status <> 'S' THEN
5377               -- The return status is success because error notification has been
5378               -- sent to person who launched the concurrent request.
5379               l_return_status := 'S';
5380             END IF;
5381           ELSE
5382             RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5383           END IF;
5384 
5385         END LOOP;
5386 
5387       END LOOP;
5388 
5389       CLOSE del_cur;
5390 
5391       IF deliverable_ids.COUNT > 0 THEN
5392         FORALL i IN deliverable_ids.FIRST..NVL(deliverable_ids.LAST, -1)
5393 
5394           UPDATE okc_deliverables
5395           SET overdue_notification_id = overdue_ntf_ids(i),
5396               last_update_date = sysdate,
5397               last_updated_by = FND_GLOBAL.User_id,
5398               last_update_login =Fnd_Global.Login_Id
5399           WHERE deliverable_id = deliverable_ids(i);
5400 
5401         COMMIT;
5402 
5403       END IF;
5404 
5405       OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
5406 
5407       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5408         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5409       END IF;
5410 
5411     EXCEPTION
5412       WHEN FND_API.G_EXC_ERROR THEN
5413         IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5414           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));
5415         END IF;
5416 
5417         IF del_cur %ISOPEN THEN
5418           CLOSE del_cur ;
5419         END IF;
5420 
5421         x_return_status := G_RET_STS_ERROR;
5422         FND_MSG_PUB.Count_And_Get(
5423           p_count =>  x_msg_count,
5424           p_data  =>  x_msg_data);
5425 
5426       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5427         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5428           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));
5429         END IF;
5430 
5431         IF del_cur %ISOPEN THEN
5432           CLOSE del_cur ;
5433         END IF;
5434 
5435         x_return_status := G_RET_STS_UNEXP_ERROR;
5436         FND_MSG_PUB.Count_And_Get(
5437           p_count =>  x_msg_count,
5438           p_data  =>  x_msg_data);
5439 
5440       WHEN OTHERS THEN
5441         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5442           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));
5443         END IF;
5444 
5445         IF del_cur %ISOPEN THEN
5446           CLOSE del_cur ;
5447         END IF;
5448 
5449         x_return_status := G_RET_STS_UNEXP_ERROR;
5450 
5451         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5452           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5453         END IF;
5454 
5455         FND_MSG_PUB.Count_And_Get(
5456           p_count =>  x_msg_count,
5457           p_data  =>  x_msg_data);
5458         FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
5459 
5460     END overdue_del_notifier;
5461 
5462 
5463     /***
5464     This is the Concurrent Program scheduled to run every day
5465     to send out notifications about beforedue deliverables.
5466     It internally calls API beforedue_del_notifier
5467     ***/
5468     PROCEDURE beforedue_deliverable_manager (
5469     errbuf  OUT NOCOPY VARCHAR2,
5470     retcode OUT NOCOPY VARCHAR2)
5471     IS
5472     l_api_name      CONSTANT VARCHAR2(30) :='beforedue_deliverable_manager';
5473     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5474     l_init_msg_list   VARCHAR2(3) := 'T';
5475     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5476     l_msg_count       NUMBER;
5477     l_msg_data        VARCHAR2(1000);
5478     E_Resource_Busy   EXCEPTION;
5479     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
5480 
5481     BEGIN
5482          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5483           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5484          END IF;
5485     --Initialize the return code
5486         retcode := 0;
5487     --Invoke beforedue_del_notifier
5488            beforedue_del_notifier (
5489         p_api_version          => l_api_version ,
5490         p_init_msg_list        => l_init_msg_list,
5491         x_return_status        => l_return_status,
5492         x_msg_count            => l_msg_count,
5493         x_msg_data             => l_msg_data);
5494 
5495            --check return status
5496             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5497                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5498             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5499                 RAISE OKC_API.G_EXCEPTION_ERROR;
5500             END IF;
5501 
5502          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5503           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5504          END IF;
5505     EXCEPTION
5506     WHEN E_Resource_Busy THEN
5507       l_return_status := okc_api.g_ret_sts_error;
5508       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5509       IF FND_MSG_PUB.Count_Msg > 0 Then
5510         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5511           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5512         END LOOP;
5513       END IF;
5514       FND_MSG_PUB.initialize;
5515     WHEN OTHERS THEN
5516       retcode := 2;
5517       errbuf  := substr(sqlerrm,1,200);
5518       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5519         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5520       END IF;
5521       IF FND_MSG_PUB.Count_Msg > 0 Then
5522         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5523           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5524         END LOOP;
5525       END IF;
5526       FND_MSG_PUB.initialize;
5527 
5528     END beforedue_deliverable_manager;
5529 
5530 
5531     /***
5532     Invoked by Concurrent Program "beforedue_deliverable_manager"
5533     Picks all deliverables eligible for before due date notifications
5534     Invokes Deliverable Notifier to send out notifications
5535     Update deliverables with prior_notification_id
5536     ***/
5537     PROCEDURE beforedue_del_notifier (
5538     p_api_version                  IN NUMBER ,
5539     p_init_msg_list                IN VARCHAR2 ,
5540     x_return_status                OUT NOCOPY VARCHAR2,
5541     x_msg_count                    OUT NOCOPY NUMBER,
5542     x_msg_data                     OUT NOCOPY VARCHAR2)
5543     IS
5544     CURSOR del_cur IS
5545     SELECT *
5546     FROM okc_deliverables
5547     WHERE manage_yn = 'Y'
5548     AND   disable_notifications_yn = 'N'
5549     AND   notify_prior_due_date_yn = 'Y'
5550     AND   prior_notification_id is null
5551     AND   business_document_type <> 'TEMPLATE'
5552     AND   deliverable_status IN ('OPEN','REJECTED')
5553     AND   trunc(actual_due_date) > trunc(sysdate);
5554 
5555     l_api_name      CONSTANT VARCHAR2(30) :='beforedue_del_notifier';
5556     l_notification_date DATE;
5557     delRecTab   delRecTabType;
5558     delNtfTab   delRecTabType;
5559     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5560     l_msg_count       NUMBER;
5561     l_msg_data        VARCHAR2(1000);
5562     l_notification_id NUMBER;
5563     l_deliverable_id NUMBER;
5564     j  PLS_INTEGER := 0;
5565     k  PLS_INTEGER := 0;
5566     BEGIN
5567 
5568        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5569         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
5570        END IF;
5571        -- call start_activity to create savepoint, check comptability
5572        -- and initialize message list
5573            l_return_status := OKC_API.START_ACTIVITY(l_api_name
5574                  ,p_init_msg_list
5575                  ,'_PROCESS'
5576                  ,x_return_status
5577                  );
5578                  -- check if activity started successfully
5579                  IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5580                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5581                  ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5582                     RAISE OKC_API.G_EXCEPTION_ERROR;
5583                  END IF;
5584 ---------------------------------------------------
5585         FOR del_rec IN del_cur LOOP
5586       k := k+1;
5587       delRecTab(k).deliverable_id := del_rec.deliverable_id;
5588       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
5589       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
5590       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
5591       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
5592       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
5593       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
5594       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
5595       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
5596       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
5597       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
5598       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
5599       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
5600       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
5601       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
5602       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
5603       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
5604       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
5605       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
5606       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
5607       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
5608       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
5609       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
5610       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
5611       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
5612       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
5613       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
5614       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
5615       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
5616       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
5617       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
5618       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
5619       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
5620       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
5621       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
5622       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
5623       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
5624       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
5625       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
5626       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
5627       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
5628       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
5629       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
5630       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
5631       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
5632       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
5633       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
5634       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
5635       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
5636       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
5637       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
5638       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
5639       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
5640       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
5641       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
5642       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
5643       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
5644       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
5645       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
5646       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
5647       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
5648       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
5649       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
5650       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
5651       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
5652       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
5653       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
5654       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
5655       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
5656       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
5657       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
5658       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
5659       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
5660       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
5661       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
5662       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
5663       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
5664       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
5665       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
5666       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
5667       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
5668       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
5669       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
5670       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
5671       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
5672       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
5673       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
5674 
5675     END LOOP;
5676 
5677 
5678          -- commented as this is not supported by 8i PL/SQL Bug#3307941
5679           /*OPEN del_cur;
5680             FETCH del_cur BULK COLLECT INTO delRecTab;*/
5681             IF delRecTab.COUNT > 0 THEN
5682          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5683            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
5684          END IF;
5685             FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
5686 
5687             -- log messages in concurrent program log file
5688           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5689             delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
5690           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5691             to_char(delRecTab(i).deliverable_id));
5692          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5693            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
5694          END IF;
5695                 IF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'DAY' THEN
5696                     l_notification_date := trunc(delRecTab(i).actual_due_date)-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
5697                 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'WK' THEN
5698                     l_notification_date :=trunc(delRecTab(i).actual_due_date)-7*delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
5699                 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'MTH' THEN
5700                     select add_months(delRecTab(i).actual_due_date,-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE)
5701                     INTO l_notification_date from dual;
5702                 END IF;
5703 
5704                 IF trunc(l_notification_date) = trunc(sysdate) OR
5705                    trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
5706                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5707                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100:Del Id  :'||to_char(delRecTab(i).deliverable_id));
5708                     END IF;
5709                     okc_deliverable_wf_pvt.deliverables_notifier(
5710                     p_api_version               => 1.0,
5711                     p_init_msg_list             => FND_API.G_TRUE,
5712                     p_deliverable_id            => delRecTab(i).deliverable_id,
5713                     p_deliverable_name          => delRecTab(i).deliverable_name,
5714                     p_deliverable_type          => delRecTab(i).deliverable_type,
5715                     p_business_document_id      => delRecTab(i).business_document_id,
5716                     p_business_document_version => delRecTab(i).business_document_version,
5717                     p_business_document_type    => delRecTab(i).business_document_type,
5718                     p_business_document_number  => delRecTab(i).business_document_number,
5719                     p_resp_party                => delRecTab(i).responsible_party,
5720                     p_external_contact          => delRecTab(i).external_party_contact_id,
5721                     p_internal_contact          => delRecTab(i).internal_party_contact_id,
5722                     p_notify_prior_due_date_value => delRecTab(i).notify_prior_due_date_value,
5723                     p_notify_prior_due_date_uom => delRecTab(i).notify_prior_due_date_uom,
5724                     p_msg_code                  => 'OKC_DEL_BEFOREDUE_NTF_SUBJECT',
5725                     x_notification_id           => l_notification_id,
5726                     x_msg_data                  => l_msg_data,
5727                     x_msg_count                 => l_msg_count,
5728                     x_return_status             => l_return_status);
5729                     --check return status
5730                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5731                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
5732                     END IF;
5733                     IF l_notification_id is not null THEN
5734                         -- if return status is success then notification is sent to
5735                         -- internal or external contact so update table with ntf id
5736                         IF l_return_status = 'S' THEN
5737                             j := j+1;
5738                             delNtfTab(j) := delRecTab(i);
5739                             delNtfTab(j).prior_notification_id := l_notification_id;
5740                             delNtfTab(j).last_update_date := sysdate;
5741                             delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
5742                             delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
5743                         ELSIF l_return_status <> 'S' THEN
5744                         -- The return status is success because error notification has been
5745                         -- sent to person who launched the concurrent request.
5746                             l_return_status := 'S';
5747                         END IF;
5748                     ELSE
5749                         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5750                     END IF;
5751                 END IF; -- call to notifier
5752             END LOOP;
5753             END IF;
5754             IF delNtfTab.COUNT > 0 THEN
5755                 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
5756                 /** commented as this is not supported by 8i PL/SQL Bug#3307941
5757                 UPDATE okc_deliverables SET ROW = delNtfTab(i)
5758                 where deliverable_id = l_deliverable_id;
5759                 l_deliverable_id := delNtfTab(i).deliverable_id;*/
5760                 UPDATE okc_deliverables
5761                 SET prior_notification_id = delNtfTab(i).prior_notification_id,
5762                 last_update_date = sysdate,
5763                 last_updated_by = FND_GLOBAL.User_id,
5764                 last_update_login =Fnd_Global.Login_Id
5765                 where deliverable_id = delNtfTab(i).deliverable_id;
5766                 END LOOP;
5767           COMMIT;
5768             END IF;
5769         IF del_cur %ISOPEN THEN
5770           CLOSE del_cur ;
5771         END IF;
5772             x_return_status := l_return_status;
5773     OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
5774        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5775         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
5776        END IF;
5777     EXCEPTION
5778     WHEN FND_API.G_EXC_ERROR THEN
5779        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5780         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));
5781        END IF;
5782         IF del_cur %ISOPEN THEN
5783           CLOSE del_cur ;
5784         END IF;
5785     x_return_status := G_RET_STS_ERROR;
5786       FND_MSG_PUB.Count_And_Get(
5787         p_count =>  x_msg_count,
5788         p_data  =>  x_msg_data
5789         );
5790 
5791     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5792        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5793         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));
5794        END IF;
5795         IF del_cur %ISOPEN THEN
5796           CLOSE del_cur ;
5797         END IF;
5798     x_return_status := G_RET_STS_UNEXP_ERROR;
5799       FND_MSG_PUB.Count_And_Get(
5800         p_count =>  x_msg_count,
5801         p_data  =>  x_msg_data
5802         );
5803 
5804     WHEN OTHERS THEN
5805        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5806         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));
5807        END IF;
5808         IF del_cur %ISOPEN THEN
5809           CLOSE del_cur ;
5810         END IF;
5811     x_return_status := G_RET_STS_UNEXP_ERROR;
5812       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);
5813       END IF;
5814       FND_MSG_PUB.Count_And_Get(
5815         p_count =>  x_msg_count,
5816         p_data  =>  x_msg_data
5817         );
5818        FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
5819 
5820     END beforedue_del_notifier;
5821 
5822     /***
5823     This is the Concurrent Program scheduled to run every day
5824     to send out escalated notifications about deliverables.
5825     It internally calls API escalation_deliverable_notifier
5826     ***/
5827     PROCEDURE escalation_deliverable_manager (
5828     errbuf  OUT NOCOPY VARCHAR2,
5829     retcode OUT NOCOPY VARCHAR2)
5830     IS
5831     l_api_name      CONSTANT VARCHAR2(30) :='escalation_deliverable_manager';
5832     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
5833     l_init_msg_list   VARCHAR2(3) := 'T';
5834     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5835     l_msg_count       NUMBER;
5836     l_msg_data        VARCHAR2(1000);
5837     E_Resource_Busy   EXCEPTION;
5838     PRAGMA EXCEPTION_INIT(E_Resource_Busy,  -00054);
5839 
5840     BEGIN
5841        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5842         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
5843        END IF;
5844     --Initialize the return code
5845         retcode := 0;
5846     --Invoke escalation_deliverable_notifier
5847            esc_del_notifier(
5848         p_api_version          => l_api_version ,
5849         p_init_msg_list        => l_init_msg_list,
5850         x_return_status        => l_return_status,
5851         x_msg_count            => l_msg_count,
5852         x_msg_data             => l_msg_data);
5853 
5854            --check return status
5855             IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5856                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5857             ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5858                 RAISE OKC_API.G_EXCEPTION_ERROR;
5859             END IF;
5860 
5861        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5862         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
5863        END IF;
5864     EXCEPTION
5865     WHEN E_Resource_Busy THEN
5866       l_return_status := okc_api.g_ret_sts_error;
5867       RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5868       IF FND_MSG_PUB.Count_Msg > 0 Then
5869         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5870           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5871         END LOOP;
5872       END IF;
5873       FND_MSG_PUB.initialize;
5874     WHEN OTHERS THEN
5875       retcode := 2;
5876       errbuf  := substr(sqlerrm,1,200);
5877       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5878         FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5879       END IF;
5880       IF FND_MSG_PUB.Count_Msg > 0 Then
5881         FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5882           FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5883         END LOOP;
5884       END IF;
5885       FND_MSG_PUB.initialize;
5886 
5887     END escalation_deliverable_manager;
5888 
5889 
5890     /***
5891     Invoked by Concurrent Program "escalation_deliverable_manager"
5892     Picks all deliverables eligible for escalation
5893     Invokes Deliverable Notifier to send out notifications only to escalation assignee
5894     Update deliverables with escalation_notification_id
5895     ***/
5896     PROCEDURE esc_del_notifier  (
5897     p_api_version                  IN NUMBER ,
5898     p_init_msg_list                IN VARCHAR2 ,
5899     x_return_status                OUT NOCOPY VARCHAR2,
5900     x_msg_count                    OUT NOCOPY NUMBER,
5901     x_msg_data                     OUT NOCOPY VARCHAR2)
5902     IS
5903     l_api_name      CONSTANT VARCHAR2(30) :='esc_del_notifier';
5904     CURSOR del_cur IS
5905     SELECT *
5906     FROM okc_deliverables
5907     WHERE manage_yn = 'Y'
5908     AND   disable_notifications_yn = 'N'
5909     AND   notify_escalation_yn = 'Y'
5910     AND   escalation_assignee is not null
5911     AND   escalation_notification_id is null
5912     AND   business_document_type <> 'TEMPLATE'
5913     AND   deliverable_status IN ('OPEN','REJECTED')
5914     AND   actual_due_date < trunc(sysdate);
5915     -- OR     actual_due_date = sysdate); bug#3722423
5916     l_notification_date DATE;
5917     delRecTab   delRecTabType;
5918     delNtfTab   delRecTabType;
5919     l_return_status   VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
5920     l_msg_count       NUMBER;
5921     l_msg_data        VARCHAR2(1000);
5922     l_notification_id NUMBER;
5923     l_deliverable_id NUMBER;
5924     j  PLS_INTEGER := 0;
5925     k  PLS_INTEGER := 0;
5926     BEGIN
5927 
5928        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5929         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
5930        END IF;
5931        -- call start_activity to create savepoint, check comptability
5932        -- and initialize message list
5933            l_return_status := OKC_API.START_ACTIVITY(l_api_name
5934                  ,p_init_msg_list
5935                  ,'_PROCESS'
5936                  ,x_return_status
5937                  );
5938                  -- check if activity started successfully
5939                  IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5940                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5941                  ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5942                     RAISE OKC_API.G_EXCEPTION_ERROR;
5943                  END IF;
5944 ---------------------------------------------------
5945         FOR del_rec IN del_cur LOOP
5946       k := k+1;
5947       delRecTab(k).deliverable_id := del_rec.deliverable_id;
5948       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
5949       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
5950       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
5951       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
5952       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
5953       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
5954       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
5955       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
5956       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
5957       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
5958       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
5959       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
5960       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
5961       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
5962       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
5963       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
5964       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
5965       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
5966       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
5967       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
5968       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
5969       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
5970       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
5971       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
5972       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
5973       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
5974       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
5975       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
5976       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
5977       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
5978       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
5979       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
5980       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
5981       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
5982       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
5983       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
5984       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
5985       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
5986       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
5987       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
5988       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
5989       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
5990       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
5991       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
5992       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
5993       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
5994       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
5995       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
5996       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
5997       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
5998       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
5999       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
6000       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
6001       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
6002       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
6003       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
6004       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
6005       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
6006       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
6007       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
6008       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
6009       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
6010       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
6011       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
6012       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
6013       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
6014       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
6015       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
6016       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
6017       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
6018       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
6019       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
6020       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
6021       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
6022       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
6023       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
6024       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
6025       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
6026       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
6027       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
6028       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
6029       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
6030       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
6031       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
6032       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
6033       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
6034 
6035     END LOOP;
6036 
6037 
6038             -- commented as this is not supported by 8i PL/SQL Bug#3307941
6039             /*OPEN del_cur;
6040             FETCH del_cur BULK COLLECT INTO delRecTab;*/
6041             IF delRecTab.COUNT > 0 THEN
6042          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6043            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
6044          END IF;
6045             FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
6046             -- log messages in concurrent program log file
6047           FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
6048             delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
6049           FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
6050             to_char(delRecTab(i).deliverable_id));
6051          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6052            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
6053          END IF;
6054 
6055                 IF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'DAY' THEN
6056                     l_notification_date := trunc(delRecTab(i).actual_due_date)+delRecTab(i).NOTIFY_ESCALATION_VALUE;
6057                 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'WK' THEN
6058                     l_notification_date :=trunc(delRecTab(i).actual_due_date)+7*delRecTab(i).NOTIFY_ESCALATION_VALUE;
6059                 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'MTH' THEN
6060                     select add_months(delRecTab(i).actual_due_date,delRecTab(i).NOTIFY_ESCALATION_VALUE)
6061                     INTO l_notification_date from dual;
6062                 END IF;
6063 
6064                 IF trunc(l_notification_date) = trunc(sysdate) OR
6065                    trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
6066                     okc_deliverable_wf_pvt.deliverables_notifier(
6067                     p_api_version               => 1.0,
6068                     p_init_msg_list             => FND_API.G_TRUE,
6069                     p_deliverable_id            => delRecTab(i).deliverable_id,
6070                     p_deliverable_name          => delRecTab(i).deliverable_name,
6071                     p_deliverable_type          => delRecTab(i).deliverable_type,
6072                     p_business_document_id      => delRecTab(i).business_document_id,
6073                     p_business_document_version => delRecTab(i).business_document_version,
6074                     p_business_document_type    => delRecTab(i).business_document_type,
6075                     p_business_document_number  => delRecTab(i).business_document_number,
6076                     p_resp_party                => delRecTab(i).responsible_party,
6077                     p_external_contact          => delRecTab(i).external_party_contact_id,
6078                     p_internal_contact          => delRecTab(i).escalation_assignee,
6079                     p_requester_id              => delRecTab(i).requester_id,
6080                     p_msg_code                  => 'OKC_DEL_ESCALATE_NTF_SUBJECT',
6081                     x_notification_id           => l_notification_id,
6082                     x_msg_data                  => l_msg_data,
6083                     x_msg_count                 => l_msg_count,
6084                     x_return_status             => l_return_status);
6085            --check return status
6086          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6087            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
6088          END IF;
6089                 IF l_notification_id is not null THEN
6090                     -- if return status is success then notification is sent to
6091                     -- internal or external contact so update table with ntf id
6092                     IF l_return_status = 'S' THEN
6093                         j := j+1;
6094                         delNtfTab(j) := delRecTab(i);
6095                         delNtfTab(j).escalation_notification_id := l_notification_id;
6096                         delNtfTab(j).last_update_date := sysdate;
6097                         delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
6098                         delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
6099                     ELSIF l_return_status <> 'S' THEN
6100                         -- The return status is success because error notification has been
6101                         -- sent to person who launched the concurrent request.
6102                         l_return_status := 'S';
6103                     END IF;
6104                 ELSE
6105                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6106                 END IF;
6107                 END IF; -- call to notifier
6108             END LOOP;
6109             END IF;
6110             IF delNtfTab.COUNT > 0 THEN
6111                 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
6112                 /** commented as this is not supported by 8i PL/SQL Bug#3307941
6113                 UPDATE okc_deliverables SET ROW = delNtfTab(i)
6114                 where deliverable_id = l_deliverable_id;
6115                 l_deliverable_id := delNtfTab(i).deliverable_id;*/
6116                 UPDATE okc_deliverables
6117                 SET escalation_notification_id = delNtfTab(i).escalation_notification_id,
6118                 last_update_date = sysdate,
6119                 last_updated_by = FND_GLOBAL.User_id,
6120                 last_update_login =Fnd_Global.Login_Id
6121                 where deliverable_id = delNtfTab(i).deliverable_id;
6122                 END LOOP;
6123           COMMIT;
6124             END IF;
6125         IF del_cur %ISOPEN THEN
6126           CLOSE del_cur ;
6127         END IF;
6128             x_return_status := l_return_status;
6129     OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
6130        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6131         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
6132        END IF;
6133 
6134     EXCEPTION
6135     WHEN FND_API.G_EXC_ERROR THEN
6136        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6137         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));
6138        END IF;
6139         IF del_cur %ISOPEN THEN
6140           CLOSE del_cur ;
6141         END IF;
6142     x_return_status := G_RET_STS_ERROR;
6143       FND_MSG_PUB.Count_And_Get(
6144         p_count =>  x_msg_count,
6145         p_data  =>  x_msg_data
6146         );
6147 
6148     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6149        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6150         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));
6151        END IF;
6152         IF del_cur %ISOPEN THEN
6153           CLOSE del_cur ;
6154         END IF;
6155     x_return_status := G_RET_STS_UNEXP_ERROR;
6156       FND_MSG_PUB.Count_And_Get(
6157         p_count =>  x_msg_count,
6158         p_data  =>  x_msg_data
6159         );
6160 
6161     WHEN OTHERS THEN
6162        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6163         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));
6164        END IF;
6165         IF del_cur %ISOPEN THEN
6166           CLOSE del_cur ;
6167         END IF;
6168     x_return_status := G_RET_STS_UNEXP_ERROR;
6169       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);
6170       END IF;
6171       FND_MSG_PUB.Count_And_Get(
6172         p_count =>  x_msg_count,
6173         p_data  =>  x_msg_data
6174         );
6175        FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
6176     END esc_del_notifier;
6177 
6178     -- checks for attachments and deletes them
6179     PROCEDURE delete_attachments (
6180     p_entity_name   IN VARCHAR2
6181     ,p_pk1_value    IN VARCHAR2
6182     ,x_result       OUT NOCOPY VARCHAR2
6183     )
6184     IS
6185     l_api_name      CONSTANT VARCHAR2(30) :='delete_attachments';
6186     l_att_exists    BOOLEAN;
6187     l_result    VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6188 
6189     CURSOR att_cur IS
6190     SELECT att.attached_document_id
6191     ,doc.datatype_id
6192     FROM fnd_attached_documents att
6193     ,fnd_documents doc
6194     WHERE att.document_id = doc.document_id
6195     AND   att.entity_name = p_entity_name
6196     AND   att.pk1_value   = p_pk1_value;
6197     att_rec   att_cur%ROWTYPE;
6198     x_return_status  VARCHAR2(1);
6199     x_msg_count   NUMBER;
6200     x_msg_data    VARCHAR2(200);
6201 
6202     BEGIN
6203 
6204        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6205         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6206        END IF;
6207                 l_att_exists :=  attachment_exists(
6208                     p_entity_name => p_entity_name
6209                     ,p_pk1_value    => p_pk1_value );
6210 
6211                 IF l_att_exists THEN
6212                     OPEN att_cur;
6213                     FETCH att_cur INTO att_rec;
6214 
6215                     --delete attachments
6216                     fnd_attached_documents3_pkg.delete_row (
6217                         X_attached_document_id  => att_rec.attached_document_id,
6218                         X_datatype_id           => att_rec.datatype_id,
6219                         delete_document_flag    => 'Y' );
6220                     CLOSE att_cur;
6221                 END IF;
6222                         x_result := l_result;
6223        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6224         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6225        END IF;
6226     EXCEPTION
6227     WHEN OTHERS THEN
6228        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6229         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments in OTHERS');
6230        END IF;
6231         IF att_cur %ISOPEN THEN
6232           CLOSE att_cur ;
6233         END IF;
6234         x_result := G_RET_STS_UNEXP_ERROR;
6235         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6236             FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6237         END IF;
6238         FND_MSG_PUB.Count_And_Get(
6239         p_count =>  x_msg_count,
6240         p_data  =>  x_msg_data
6241         );
6242 
6243     END delete_attachments;
6244 
6245     /***
6246     1.  This API performs bulk delete of deliverables for business documents.
6247         Invoked by OKC_TERMS_UTIL_GRP.purge_documents
6248     2.  For each doc_type and doc_id in p_doc_table,
6249         find the deliverables that belong to the business document,
6250         delete the deliverable, status history and attachments.
6251     ***/
6252     PROCEDURE purge_doc_deliverables (
6253     p_api_version  IN NUMBER,
6254     p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
6255     p_doc_table IN OKC_TERMS_UTIL_GRP.doc_tbl_type,
6256     x_msg_data  OUT NOCOPY  VARCHAR2,
6257     x_msg_count OUT NOCOPY  NUMBER,
6258     x_return_status OUT NOCOPY  VARCHAR2)
6259     IS
6260     l_api_name      CONSTANT VARCHAR2(30) :='purge_doc_deliverables';
6261     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6262     l_msg_count       NUMBER;
6263     l_msg_data        VARCHAR2(1000);
6264     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
6265     l_deliverable_id    NUMBER;
6266     BEGIN
6267 
6268        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6269         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6270        END IF;
6271         IF p_doc_table.COUNT <> 0 THEN
6272         FOR i in 1.. p_doc_table.COUNT LOOP
6273             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6274                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Id:'||to_char(p_doc_table(i).doc_id));
6275                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Type:'||p_doc_table(i).doc_type);
6276             END IF;
6277                 delete_deliverables (
6278                 p_api_version  => l_api_version,
6279                 p_init_msg_list => OKC_API.G_FALSE,
6280                 p_doc_id    => p_doc_table(i).doc_id,
6281                 p_doc_type  => p_doc_table(i).doc_type,
6282                 x_msg_data   => l_msg_data,
6283                 x_msg_count  => l_msg_count,
6284                 x_return_status  => l_return_status);
6285         END LOOP;
6286         END IF;
6287             x_return_status := l_return_status;
6288        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6289         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6290        END IF;
6291 
6292     EXCEPTION
6293     WHEN FND_API.G_EXC_ERROR THEN
6294        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6295         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');
6296        END IF;
6297     x_return_status := G_RET_STS_ERROR;
6298       FND_MSG_PUB.Count_And_Get(
6299         p_count =>  x_msg_count,
6300         p_data  =>  x_msg_data
6301         );
6302 
6303     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6304        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6305         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');
6306        END IF;
6307     x_return_status := G_RET_STS_UNEXP_ERROR;
6308       FND_MSG_PUB.Count_And_Get(
6309         p_count =>  x_msg_count,
6310         p_data  =>  x_msg_data
6311         );
6312 
6313     WHEN OTHERS THEN
6314        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6315         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');
6316        END IF;
6317     x_return_status := G_RET_STS_UNEXP_ERROR;
6318       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);
6319       END IF;
6320       FND_MSG_PUB.Count_And_Get(
6321         p_count =>  x_msg_count,
6322         p_data  =>  x_msg_data
6323         );
6324 
6325     END purge_doc_deliverables;
6326 
6327     /***
6328     1.  This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6329     2.  This API will select all deliverables for a given
6330         business document type and version
6331     3.  Delete all deliverables along with the attachments and status history
6332     ***/
6333     PROCEDURE delete_deliverables (
6334     p_api_version  IN NUMBER,
6335     p_init_msg_list IN VARCHAR2,
6336     p_doc_id    IN NUMBER,
6337     p_doc_type  IN  VARCHAR2,
6338     p_doc_version IN NUMBER DEFAULT NULL,
6339     x_msg_data   OUT NOCOPY  VARCHAR2,
6340     x_msg_count  OUT NOCOPY  NUMBER,
6341     x_return_status  OUT NOCOPY  VARCHAR2)
6342     IS
6343     CURSOR del_cur IS
6344     SELECT deliverable_id
6345     FROM okc_deliverables
6346     WHERE business_document_id = p_doc_id
6347     AND   business_document_type = p_doc_type;
6348 
6349     CURSOR del_version_cur IS
6350     SELECT deliverable_id
6351     FROM okc_deliverables
6352     WHERE business_document_id = p_doc_id
6353     AND   business_document_type = p_doc_type
6354     AND   business_document_version = p_doc_version;
6355 
6356     l_result   VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6357     l_api_name VARCHAR2(30) :='delete_deliverables';
6358     TYPE delIdTabType IS TABLE OF NUMBER;
6359     delIdTab    delIdTabType;
6360     BEGIN
6361 
6362        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6363         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6364        END IF;
6365        -- Delete specific version of deliverables or all deliverables
6366        -- based on p_doc_version
6367        IF p_doc_version IS NULL THEN
6368         OPEN del_cur;
6369         FETCH del_cur BULK COLLECT INTO delIdTab;
6370        ELSIF p_doc_version IS NOT NULL THEN
6371         OPEN del_version_cur;
6372         FETCH del_version_cur BULK COLLECT INTO delIdTab;
6373        END IF;
6374         IF delIdTab.COUNT <> 0 THEN
6375         FOR i in delIdTab.FIRST..delIdTab.LAST LOOP
6376             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6377                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Deleting Deliverable Id :'||to_char(delIdTab(i)));
6378             END IF;
6379                 -- delete deliverables status history
6380                 DELETE FROM okc_del_status_history
6381                 WHERE deliverable_id = delIdTab(i);
6382                 -- delete attachments if any
6383                 delete_attachments (
6384                     p_entity_name => G_ENTITY_NAME
6385                     ,p_pk1_value    =>  delIdTab(i)
6386                     ,x_result       =>  l_result);
6387                     IF l_result = 'S' THEN
6388                         -- delete deliverables
6389                         DELETE FROM okc_deliverables
6390                         WHERE deliverable_id = delIdTab(i);
6391                     END IF;
6392         END LOOP;
6393         END IF; -- delIdTab.COUNT <> 0
6394         IF del_cur %ISOPEN THEN
6395           CLOSE del_cur ;
6396         END IF;
6397         IF del_version_cur %ISOPEN THEN
6398           CLOSE del_version_cur ;
6399         END IF;
6400             x_return_status := l_result;
6401        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6402         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6403        END IF;
6404 
6405     EXCEPTION
6406     WHEN FND_API.G_EXC_ERROR THEN
6407        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6408         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_ERROR');
6409        END IF;
6410         IF del_cur %ISOPEN THEN
6411           CLOSE del_cur ;
6412         END IF;
6413         IF del_version_cur %ISOPEN THEN
6414           CLOSE del_version_cur ;
6415         END IF;
6416     x_return_status := G_RET_STS_ERROR;
6417       FND_MSG_PUB.Count_And_Get(
6418         p_count =>  x_msg_count,
6419         p_data  =>  x_msg_data
6420         );
6421 
6422     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6423        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6424         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');
6425        END IF;
6426         IF del_cur %ISOPEN THEN
6427           CLOSE del_cur ;
6428         END IF;
6429         IF del_version_cur %ISOPEN THEN
6430           CLOSE del_version_cur ;
6431         END IF;
6432     x_return_status := G_RET_STS_UNEXP_ERROR;
6433       FND_MSG_PUB.Count_And_Get(
6434         p_count =>  x_msg_count,
6435         p_data  =>  x_msg_data
6436         );
6437 
6438     WHEN OTHERS THEN
6439        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6440         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');
6441        END IF;
6442         IF del_cur %ISOPEN THEN
6443           CLOSE del_cur ;
6444         END IF;
6445         IF del_version_cur %ISOPEN THEN
6446           CLOSE del_version_cur ;
6447         END IF;
6448     x_return_status := G_RET_STS_UNEXP_ERROR;
6449       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6450       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6451       END IF;
6452       FND_MSG_PUB.Count_And_Get(
6453         p_count =>  x_msg_count,
6454         p_data  =>  x_msg_data
6455         );
6456 
6457     END delete_deliverables;
6458 
6459     /***
6460     1.  This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6461     2.  This API will select all deliverables for a given source template id
6462     3.  Update all deliverables on the target template Id
6463         set the business_document_id = source template id
6464     ***/
6465     PROCEDURE update_del_for_template_merge (
6466     p_api_version  IN NUMBER,
6467     p_init_msg_list IN VARCHAR2,
6468     p_base_template_id  IN NUMBER,
6469     p_working_template_id   IN NUMBER,
6470     x_msg_data   OUT NOCOPY  VARCHAR2,
6471     x_msg_count  OUT NOCOPY  NUMBER,
6472     x_return_status  OUT NOCOPY  VARCHAR2)
6473     IS
6474     CURSOR del_cur IS
6475     SELECT deliverable_id
6476     FROM okc_deliverables
6477     WHERE business_document_id = p_working_template_id
6478     AND   business_document_type = 'TEMPLATE';
6479     TYPE delIdRecTabType IS TABLE OF NUMBER;
6480     delIdTab  delIdRecTabType;
6481     l_api_name      CONSTANT VARCHAR2(30) :='update_del_for_template_merge';
6482     l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6483     BEGIN
6484 
6485        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6486         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6487        END IF;
6488             OPEN del_cur;
6489             FETCH del_cur BULK COLLECT INTO delIdTab;
6490             IF delIdTab.COUNT <> 0 THEN
6491                 FORALL j IN delIdTab.FIRST..delIdTab.LAST
6492                 UPDATE okc_deliverables
6493                 SET business_document_id = p_base_template_id,
6494                 last_updated_by= Fnd_Global.User_Id,
6495                 last_update_date = sysdate,
6496                 last_update_login=Fnd_Global.Login_Id
6497                 WHERE deliverable_id = delIdTab(j);
6498             END IF;
6499         IF del_cur %ISOPEN THEN
6500           CLOSE del_cur ;
6501         END IF;
6502        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6503         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6504        END IF;
6505        x_return_status := l_return_status;
6506     EXCEPTION
6507     WHEN FND_API.G_EXC_ERROR THEN
6508        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6509         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');
6510         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6511        END IF;
6512         IF del_cur %ISOPEN THEN
6513           CLOSE del_cur ;
6514         END IF;
6515     x_return_status := G_RET_STS_ERROR;
6516       FND_MSG_PUB.Count_And_Get(
6517         p_count =>  x_msg_count,
6518         p_data  =>  x_msg_data
6519         );
6520 
6521     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6522        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6523         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');
6524         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6525        END IF;
6526         IF del_cur %ISOPEN THEN
6527           CLOSE del_cur ;
6528         END IF;
6529     x_return_status := G_RET_STS_UNEXP_ERROR;
6530       FND_MSG_PUB.Count_And_Get(
6531         p_count =>  x_msg_count,
6532         p_data  =>  x_msg_data
6533         );
6534 
6535     WHEN OTHERS THEN
6536        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6537         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');
6538         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6539        END IF;
6540         IF del_cur %ISOPEN THEN
6541           CLOSE del_cur ;
6542         END IF;
6543     x_return_status := G_RET_STS_UNEXP_ERROR;
6544       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);
6545       END IF;
6546       FND_MSG_PUB.Count_And_Get(
6547         p_count =>  x_msg_count,
6548         p_data  =>  x_msg_data
6549         );
6550 
6551     END update_del_for_template_merge;
6552 
6553     -- Returns the max date of the last_amendment_date for a busdoc
6554     -- if the deliverables did not get amended then returns the
6555     --max last update date
6556 /*** added new signature bug#3192512**/
6557 
6558 FUNCTION get_last_amendment_date (
6559 p_api_version      IN  NUMBER
6560 ,p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE
6561 
6562 ,x_return_status    OUT NOCOPY VARCHAR2
6563 ,x_msg_data         OUT NOCOPY VARCHAR2
6564 ,x_msg_count        OUT NOCOPY NUMBER
6565 
6566 ,p_busdoc_id        IN    NUMBER
6567 ,p_busdoc_type     IN    VARCHAR2
6568 ,p_busdoc_version  IN    NUMBER)
6569 RETURN DATE
6570 IS
6571 -- always go by the -99 version as amendments happen only on -99
6572 -- bug#3293314
6573 -- Filter internal deliverables as they are not considered in amendments 20th May 2004.
6574 -- bug#3641366 get max last amend date from across the versions if it is null then get
6575 -- max creation date from across versions
6576 -- updated cursor for bug#4069955
6577 CURSOR del_cur IS
6578 SELECT NVL(MAX(del.last_amendment_date),MAX(del.creation_date))
6579 FROM
6580  okc_deliverables del
6581 ,okc_deliverable_types_b delType
6582 WHERE del.business_document_id = p_busdoc_id
6583 AND   del.business_document_type = p_busdoc_type
6584 AND   del.recurring_del_parent_id is null
6585 --AND   manage_yn = 'N' commented to reproduce the bug#3667445
6586 --AND   business_document_version = -99 commented for bug#3641366
6587 --AND  deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
6588 AND   del.deliverable_type = delType.deliverable_type_code
6589 AND   delType.internal_flag = 'N';
6590 
6591 /*CURSOR create_date_cur IS
6592 SELECT MAX(last_amendment_date)
6593 FROM okc_deliverables
6594 WHERE business_document_id = p_busdoc_id
6595 AND   business_document_type = p_busdoc_type
6596 AND   business_document_version = -99
6597 AND   deliverable_type not like '%INTERNAL%';*/
6598 l_api_name      CONSTANT VARCHAR2(30) :='get_last_amendment_date';
6599 l_date  DATE;
6600 
6601 BEGIN
6602 
6603 
6604   --  Initialize API return status to success
6605   x_return_status := OKC_API.G_RET_STS_SUCCESS;
6606 
6607 
6608   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6609     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6610   END IF;
6611   OPEN del_cur;
6612   FETCH del_cur INTO l_date;
6613     /*bug# 3641366 IF l_date is null THEN
6614         OPEN create_date_cur;
6615         FETCH create_date_cur INTO l_date;
6616         CLOSE create_date_cur;
6617     END IF;*/
6618   IF del_cur %ISOPEN THEN
6619      CLOSE del_cur ;
6620   END IF;
6621 
6622   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6623       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6624   END IF;
6625     RETURN l_date;
6626 
6627 EXCEPTION
6628 WHEN OTHERS THEN
6629 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6630          FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving get_last_amendment_date because of EXCEPTION: '||sqlerrm);
6631 END IF;
6632 
6633      IF del_cur%ISOPEN THEN
6634        CLOSE del_cur;
6635      END IF;
6636 
6637     /*bug# 3641366 IF create_date_cur%ISOPEN THEN
6638         CLOSE create_date_cur;
6639     END IF;*/
6640      x_return_status := G_RET_STS_UNEXP_ERROR ;
6641      IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6642      FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6643      END IF;
6644      FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
6645      , p_count => x_msg_count
6646      , p_data => x_msg_data );
6647 
6648      RETURN null;
6649 END get_last_amendment_date;
6650 
6651 
6652   /**
6653    * This helper function returns valid day of week for the given date.
6654    * It makes sure that days sequence is matching the seeded days sequence in
6655    * DAY_OF_WEEK lookup type, which is standard as per AMERICA territory.
6656    */
6657   FUNCTION getStartDayOfWeek(
6658            p_start_date in date)
6659   return number is
6660 
6661     l_day_of_week number;
6662   l_api_name      CONSTANT VARCHAR2(30) :='getStartDayOfWeek';
6663     BEGIN
6664         IF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SUN' THEN
6665         return 1;
6666         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='MON' THEN
6667         return 2;
6668         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='TUE' THEN
6669         return 3;
6670         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='WED' THEN
6671         return 4;
6672         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='THU' THEN
6673         return 5;
6674         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='FRI' THEN
6675         return 6;
6676         ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SAT' THEN
6677         return 7;
6678         END IF;
6679 
6680     EXCEPTION
6681     WHEN OTHERS THEN
6682         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6683           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
6684         END IF;
6685     END getStartDayOfWeek;
6686 
6687 
6688   /**
6689    * This function Returns end date as actual date for given Start date,
6690    * time unit(DAYS, WEEKS, MONTHS), duration and (B)efore/(A)fter.
6691    */
6692   FUNCTION get_actual_date(
6693     p_start_date in date,
6694     p_timeunit varchar2,
6695     p_duration number,
6696     p_before_after varchar2)
6697   return date is
6698 
6699   l_end_date date := NULL;
6700   l_timeunit varchar2(30);
6701   l_duration number := 0;
6702   x_return_status     VARCHAR2(1)           := OKC_API.G_RET_STS_SUCCESS;
6703   l_api_name      CONSTANT VARCHAR2(30) :='get_actual_date';
6704 
6705   begin
6706    --- check if time unit and duration values are set
6707    if p_timeunit is NULL and
6708    p_duration is NULL Then
6709    return (NULL);
6710    end if;
6711 
6712    --- if before
6713    if p_before_after = 'B' then
6714     l_duration := -1 * p_duration;
6715    else  --- if after
6716       l_duration := p_duration;
6717    end if;
6718 
6719    --- If time unit is MONTHS
6720    if p_timeunit = 'MTH' then
6721      if l_duration > 0 then
6722        l_end_date := add_months(p_start_date,l_duration);
6723      elsif l_duration < 0 then
6724        l_end_date := add_months(p_start_date,l_duration);
6725      elsif l_duration = 0 then
6726        l_end_date := p_start_date;
6727      end if;
6728      return(l_end_date);
6729 
6730    --- If time unit is DAYS
6731    elsif p_timeunit = 'DAY' then
6732      if l_duration > 0 then
6733        l_end_date := p_start_date + l_duration;
6734      elsif l_duration < 0 then
6735        l_end_date := p_start_date + l_duration;
6736      elsif l_duration = 0 then
6737        l_end_date := p_start_date;
6738      end if;
6739      return(l_end_date);
6740 
6741    --- If time unit is WEEKS
6742    elsif p_timeunit = 'WK' then
6743      if l_duration > 0 then
6744        l_end_date := p_start_date + ((l_duration*7));
6745      elsif l_duration < 0 then
6746        l_end_date := p_start_date + ((l_duration*7));
6747      elsif l_duration = 0 then
6748        l_end_date := p_start_date;
6749      end if;
6750      return(l_end_date);
6751    else
6752     return(NULL);
6753    end if;
6754    EXCEPTION
6755    WHEN OTHERS THEN
6756         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6757           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
6758         END IF;
6759           RETURN(null);
6760   END get_actual_date;
6761 
6762   /**
6763    * Resolve recurring dates for given start date, end date and repeat
6764    * frequency, day of month, day of week. Returns Table of dates resolved.
6765    */
6766   PROCEDURE get_recurring_dates (
6767     p_api_version  IN NUMBER,
6768     p_init_msg_list IN VARCHAR2,
6769     p_start_date in date,
6770     p_end_date in date,
6771     p_frequency in number,
6772     p_recurr_day_of_month number,
6773     p_recurr_day_of_week number,
6774     x_recurr_dates   OUT NOCOPY recurring_dates_tab_type,
6775     x_msg_data   OUT NOCOPY  VARCHAR2,
6776     x_msg_count  OUT NOCOPY  NUMBER,
6777     x_return_status  OUT NOCOPY  VARCHAR2)
6778     IS
6779        --- User defined Exception for handling invalid start date
6780        INVALID_START_DATE EXCEPTION;
6781        PRAGMA EXCEPTION_INIT(INVALID_START_DATE, -01839);
6782 
6783        l_daynum_of_week number := 0;
6784        l_daynum_offset number := 0;
6785        l_day number := 0;
6786        l_frequency number := 0;
6787        l_date date := NULL;
6788        dates_count number := 0;
6789        l_api_name      CONSTANT VARCHAR2(30) :='get_recurring_dates';
6790 
6791     BEGIN
6792      -- check the frequency, if 0 or null, reset to 1
6793      if p_frequency = 0 OR null THEN
6794        l_frequency := 1;
6795      else
6796        l_frequency := p_frequency;
6797      end if;
6798 
6799      ---- repeat every WEEK
6800    if p_recurr_day_of_month is NULL then
6801 
6802        -- find the offset between given day of week and calculated day based on
6803        -- start date
6804        -- Fix for bug # 3438381
6805        l_daynum_of_week := getStartDayOfWeek(p_start_date); -- to_char(p_start_date,'D');
6806      l_daynum_offset := p_recurr_day_of_week - l_daynum_of_week ;
6807 
6808        --- if offset is less than 0, subtract from 7 (for the week)
6809      if l_daynum_offset < 0 then
6810         l_daynum_offset := 7 + l_daynum_offset;
6811      end if;
6812 
6813      --- Calculate the end date
6814      l_date := p_start_date + l_daynum_offset;
6815      if TRUNC(l_date) > TRUNC(p_end_date) then
6816           x_return_status                := OKC_API.G_RET_STS_SUCCESS;
6817     return;
6818      end if;
6819 
6820        -- initialize the count to add into table of records
6821        dates_count := dates_count +1;
6822 
6823        ---
6824      while (TRUNC(l_date) <= TRUNC(p_end_date)) loop
6825          x_recurr_dates(dates_count) := l_date;
6826        l_date := l_date + (7*l_frequency);
6827          dates_count := dates_count +1;
6828      end loop;
6829      else ---- repeat every MONTH
6830 
6831          -- set the given day of month
6832          l_day := p_recurr_day_of_month;
6833 
6834          --- if l_day is 99 repeat every last day of month
6835          if l_day = 99 THEN
6836 
6837             --- get last day of given start date month
6838             l_date := last_day(p_start_date);
6839 
6840             -- initialize the count to add into table of records
6841             dates_count := dates_count +1;
6842 
6843             --- Loop through, unles meet end date
6844             while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
6845                x_recurr_dates(dates_count) := l_date;
6846                l_date := last_day(add_months(l_date, l_frequency));
6847                dates_count := dates_count +1;
6848             END LOOP;
6849          else --- repeat every given day of month
6850             begin
6851         --- The first date based on given day of month
6852             l_date := to_date(lpad(l_day,2,'0') ||
6853                        SUBSTR(to_char(p_start_date,'ddmmyyyy'), 3),
6854                        'ddmmyyyy');
6855             --- If date is not valid (for e.g. 30 or 29th Feb)
6856             EXCEPTION
6857             WHEN INVALID_START_DATE THEN
6858                  --- set l_Date to the last day of month
6859                  l_date := last_day(p_start_date);
6860             end;
6861           end if;
6862 
6863           --- if calculated day comes out to be less than start date, calulate
6864           --- the first date here itself
6865           if TRUNC(l_date) < TRUNC(p_start_date) THEN
6866                l_date := add_months(l_date, l_frequency);
6867           end if;
6868 
6869           -- initialize the count to add into table of records
6870           dates_count := dates_count +1;
6871 
6872           --- Loop through, unles meet end date
6873           while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
6874                x_recurr_dates(dates_count) := l_date;
6875                l_date := add_months(l_date, l_frequency);
6876                dates_count := dates_count +1;
6877           END LOOP;
6878      end if;
6879     EXCEPTION
6880     WHEN OTHERS THEN
6881             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6882                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_recurring_dates with OTHER ERROR');
6883             END IF;
6884     x_return_status := OKC_API.G_RET_STS_ERROR;
6885     FND_MSG_PUB.Count_And_Get(
6886         p_count =>  x_msg_count,
6887         p_data  =>  x_msg_data
6888         );
6889     END get_recurring_dates;
6890 
6891 FUNCTION internal_contact_valid(
6892 p_contact_id NUMBER
6893 ) RETURN VARCHAR2
6894 IS
6895 
6896 CURSOR fnd_user_cur IS
6897 select employee_id from fnd_user
6898 where employee_id = p_contact_id;
6899 
6900 fnd_user_rec  fnd_user_cur%ROWTYPE;
6901 
6902     CURSOR contact_cur IS
6903     select email_address
6904     from per_all_people_f
6905     where person_id = p_contact_id
6906     --and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
6907     and trunc(sysdate) between effective_start_date and effective_end_date;
6908 
6909 
6910     contact_rec  contact_cur%ROWTYPE;
6911     l_api_name      CONSTANT VARCHAR2(30) :='internal_contact_valid';
6912 
6913 
6914 BEGIN
6915             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6916                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid ');
6917             END IF;
6918             OPEN fnd_user_cur;
6919             FETCH fnd_user_cur INTO fnd_user_rec;
6920             IF fnd_user_cur%FOUND THEN
6921                 --contact person is a fnd user, so it's ok
6922                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6923                     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is a fnd user, thus returning Y');
6924                 END IF;
6925                 RETURN('Y');
6926             ELSE
6927                 OPEN contact_cur;
6928                 FETCH contact_cur INTO contact_rec;
6929                 IF contact_cur%FOUND THEN
6930                     IF(contact_rec.email_address is not null) THEN
6931                     --contact person is not fnd user, but it has an email address in per_people_all
6932                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6933                             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');
6934                         END IF;
6935                         RETURN('Y');
6936                     ELSE
6937                     --not a fnd user, no email address either
6938                         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6939                             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');
6940                         END IF;
6941                         RETURN('N');
6942                     END IF;
6943                 ELSE
6944                     --not a fnd user, not in per_people_all
6945                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6946                     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');
6947                 END IF;
6948                     RETURN('N');
6949                 END IF;
6950             END IF;
6951             CLOSE fnd_user_cur;
6952             CLOSE contact_cur;
6953             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6954                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid');
6955             END IF;
6956 
6957     EXCEPTION
6958     WHEN OTHERS THEN
6959         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6960           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid with Exception');
6961         END IF;
6962         IF fnd_user_cur %ISOPEN THEN
6963           CLOSE fnd_user_cur ;
6964         END IF;
6965         IF contact_cur %ISOPEN THEN
6966           CLOSE contact_cur ;
6967         END IF;
6968           RETURN('N');
6969     END internal_contact_valid;
6970 
6971 
6972 /**
6973  * This function takes a contact_id
6974  * and check in table per_people_f
6975  * to see if that contact exists
6976  * @return true if the contact is found
6977  *         false  otherwise
6978  */
6979 FUNCTION internal_contact_exists(
6980     p_contact_id  NUMBER
6981     ) RETURN VARCHAR2
6982     IS
6983     CURSOR contact_cur IS
6984     select 'X'
6985     from per_all_people_f
6986     where person_id = p_contact_id
6987     and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
6988 
6989 
6990     contact_rec  contact_cur%ROWTYPE;
6991     l_api_name      CONSTANT VARCHAR2(30) :='internal_contact_exists';
6992 
6993     BEGIN
6994 
6995             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6996                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists ');
6997             END IF;
6998             OPEN contact_cur;
6999             FETCH contact_cur INTO contact_rec;
7000             IF contact_cur%FOUND THEN
7001                 RETURN('Y');
7002             ELSE
7003                 RETURN('N');
7004             END IF;
7005             CLOSE contact_cur;
7006             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7007                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists');
7008             END IF;
7009     EXCEPTION
7010     WHEN OTHERS THEN
7011         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7012           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists with Exception');
7013         END IF;
7014         IF contact_cur %ISOPEN THEN
7015           CLOSE contact_cur ;
7016         END IF;
7017           RETURN('N');
7018     END internal_contact_exists;
7019 
7020 
7021     /**
7022       * This function checks if a given contact_id
7023       * exists in po_supplier_contacts_val_v
7024       * @return true if a record is found with the given contact_id
7025       *         false otherwise
7026       */
7027     FUNCTION external_contact_valid(
7028      p_party_id IN NUMBER
7029     ,p_party_role IN VARCHAR2
7030     ,p_contact_id  IN NUMBER
7031     ) RETURN VARCHAR2 IS
7032 
7033 
7034     -- 4145213 changed hz_parties select to synch up with ExternalPartyContact LOV query
7035     -- 4208420 changed hz_parties select to synch up with ExternalPartyContact LOV query
7036 
7037    CURSOR contact_cur IS
7038    select 'X'
7039    from
7040    po_supplier_users_v
7041    where user_party_id = p_contact_id
7042    and po_vendor_id = p_party_id
7043    and 'SUPPLIER_ORG' = p_party_role
7044    UNION
7045    SELECT 'X'
7046    FROM  hz_parties  contact,
7047    hz_relationships hr
7048    WHERE hr.subject_id = contact.party_id
7049    AND 'SUPPLIER_ORG' <> p_party_role
7050    And hr.object_id = p_party_id
7051    And contact.party_id = p_contact_id
7052    AND hr.relationship_type = 'CONTACT'
7053    AND hr.relationship_code = 'CONTACT_OF'
7054    and hr.subject_type = 'PERSON'
7055    and hr.object_type = 'ORGANIZATION'
7056    and hr.subject_table_name ='HZ_PARTIES'
7057    and hr.object_table_name ='HZ_PARTIES'
7058    AND     hr.status = 'A'
7059    AND     hr.start_date <= sysdate
7060    AND     nvl(hr.end_date, sysdate + 1) > sysdate;
7061 
7062 
7063    contact_rec  contact_cur%ROWTYPE;
7064    l_api_name      CONSTANT VARCHAR2(30) :='external_contact_valid';
7065 
7066    BEGIN
7067 
7068       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7069            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7070               ||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid ');
7071       END IF;
7072       OPEN contact_cur;
7073       FETCH contact_cur INTO contact_rec;
7074       IF contact_cur%FOUND THEN
7075         RETURN('Y');
7076       ELSE
7077         RETURN('N');
7078       END IF;
7079       CLOSE contact_cur;
7080 
7081       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7082            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7083            ||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid');
7084       END IF;
7085     EXCEPTION
7086     WHEN OTHERS THEN
7087         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7088           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid with Exception');
7089         END IF;
7090         IF contact_cur %ISOPEN THEN
7091           CLOSE contact_cur ;
7092         END IF;
7093           RETURN('N');
7094     END external_contact_valid;
7095 
7096   /**
7097    * This function returns the meaning of a given
7098    * fnd lookup type and code
7099    */
7100   FUNCTION get_lookup_meaning(
7101     p_lookup_type   IN VARCHAR2,
7102     p_lookup_code   IN VARCHAR2
7103   ) RETURN VARCHAR2
7104 
7105   IS
7106 
7107 
7108     l_meaning VARCHAR2(80);
7109     l_api_name      CONSTANT VARCHAR2(30) :='get_lookup_meaning';
7110 
7111     BEGIN
7112         select meaning into l_meaning
7113         from fnd_lookups
7114         where lookup_type = p_lookup_type
7115         and lookup_code = p_lookup_code;
7116 
7117         return l_meaning;
7118 
7119     EXCEPTION
7120     WHEN OTHERS THEN
7121         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7122           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.get_lookup_meaning with exception');
7123         END IF;
7124 
7125         RETURN '';
7126     END get_lookup_meaning;
7127 
7128 
7129   /**
7130    * This procedure checks if there is any error related to a given
7131    * deliverable's notification details
7132    * @modifies px_qa_result_tbl  table of records that contains validation
7133    *           errors and warnings
7134    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7135    *                           OKC_API.G_RET_STS_ERROR if failes
7136    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7137    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7138    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7139    */
7140   PROCEDURE check_notifications (
7141     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7142     p_severity          IN VARCHAR2,
7143     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7144     x_return_status    OUT  NOCOPY VARCHAR2
7145    ) IS
7146 
7147     l_api_version                  CONSTANT NUMBER := 1;
7148     l_api_name                     CONSTANT VARCHAR2(30) := 'check_notifications';
7149     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7150     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7151     l_index                         PLS_INTEGER := 0;
7152     l_start                         PLS_INTEGER := 0;
7153     l_message_txt                   VARCHAR2(2000);
7154     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7155     l_qa_code                       VARCHAR2(80) := 'CHECK_NOTIFICATIONS';
7156     l_short_desc                    VARCHAR2(80);
7157 
7158 
7159 
7160    BEGIN
7161 
7162    l_qa_result_tbl := px_qa_result_tbl;
7163    l_index := px_qa_result_tbl.count;
7164    l_start := px_qa_result_tbl.count;
7165    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7166 
7167    --if business_document_type is not TEMPLATE, we need to perform the checks
7168    IF (del_rec.business_document_type <> 'TEMPLATE') THEN
7169 
7170         --check notification
7171         /*IF(del_rec.notify_prior_due_date_yn = 'Y') THEN
7172             IF(del_rec.notify_prior_due_date_value is null OR del_rec.notify_prior_due_date_uom is null) THEN
7173                 l_index := l_index+1;
7174                 l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7175                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_NTF_DETAILS_REQUIRED';
7176                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7177                                                             p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED',
7178                                                             p_token1 => 'NOTIFICATION_TYPE',
7179                                                             p_token1_value => 'prior due',
7180                                                             p_token2 => 'DELIVERABLE_NAME',
7181                                                             p_token2_value => del_rec.deliverable_name);
7182                 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7183                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7184                                                             p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED_S');
7185                 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7186 
7187             END IF;
7188         END IF;
7189         */
7190 
7191         IF(del_rec.notify_escalation_yn = 'Y') THEN
7192             IF(del_rec.notify_escalation_value is null OR del_rec.notify_escalation_uom is null OR del_rec.escalation_assignee is null) THEN
7193                 l_index := l_index+1;
7194                 l_qa_result_tbl(l_index).error_severity := p_severity;
7195                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_ESCALATE_REQUIRED';
7196                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7197                                                             p_msg_name => 'OKC_DEL_ESCALATE_REQUIRED',
7198                                                             p_token1 => 'DELIVERABLE_NAME',
7199                                                             p_token1_value => del_rec.deliverable_name);
7200                 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7201                 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7202                                                             p_msg_name => 'OKC_DEL_REQUIRED_S');
7203                 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7204 
7205             END IF;
7206         END IF;
7207     END IF;
7208    --mass update common attributes
7209    IF(l_index > l_start) THEN
7210    --We have some errors
7211    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7212     FOR i IN (l_start+1)..l_index
7213     LOOP
7214         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7215         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7216         l_qa_result_tbl(i).qa_code := l_qa_code;
7217         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7218 
7219     END LOOP;
7220    END IF;
7221 
7222    x_return_status := l_return_status;
7223    px_qa_result_tbl := l_qa_result_tbl;
7224 
7225    EXCEPTION
7226      WHEN FND_API.G_EXC_ERROR THEN
7227        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7228         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with G_EXC_ERROR');
7229        END IF;
7230 
7231        x_return_status := G_RET_STS_ERROR;
7232 
7233 
7234     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7235        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7236         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');
7237        END IF;
7238 
7239        x_return_status := G_RET_STS_UNEXP_ERROR;
7240 
7241 
7242     WHEN OTHERS THEN
7243        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7244         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with OTHERS EXCEPTION');
7245        END IF;
7246 
7247       x_return_status := G_RET_STS_UNEXP_ERROR;
7248       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7249       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7250       END IF;
7251 
7252 
7253    END check_notifications;
7254 
7255   /**
7256    * This procedure checks if there is any error related to a given
7257    * deliverable's internal contacts
7258    * @modifies px_qa_result_tbl  table of records that contains validation
7259    *           errors and warnings
7260    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7261    *                           OKC_API.G_RET_STS_ERROR if failes
7262    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7263    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7264    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7265    */
7266    PROCEDURE check_internal_contacts (
7267     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7268     p_severity         IN VARCHAR2,
7269     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7270     x_return_status    OUT  NOCOPY VARCHAR2
7271    ) IS
7272 
7273     l_api_version                  CONSTANT NUMBER := 1;
7274     l_api_name                     CONSTANT VARCHAR2(30) := 'check_internal_contacts';
7275     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7276     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7277     l_index                         PLS_INTEGER := 0;
7278     l_start                         PLS_INTEGER := 0;
7279     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7280     l_contact_exists                VARCHAR2(1);
7281     l_qa_code                       VARCHAR2(80) := 'CHECK_BUYER_CONTACT';
7282     l_short_desc                    VARCHAR2(80);
7283 
7284     l_err_message_txt          FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7285     l_sugg_message_txt         FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7286 
7287     l_IntContactMissing_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_INT_CONTACT';
7288     l_IntContactInvalid_err_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT';
7289     l_IntContactInvalid_sugg_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT_S';
7290 
7291     l_ContactMissing_sugg_msg      FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_REQUIRED_S';
7292     l_InvalidRequestor_err_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER';
7293     l_InvalidRequestor_sugg_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER_S';
7294     l_InvalidEscAssgn_err_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_ASSIGNEE';
7295     l_InvalidEscAssgn_sugg_msg       FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_S';
7296 
7297    BEGIN
7298 
7299    l_qa_result_tbl := px_qa_result_tbl;
7300    l_index := px_qa_result_tbl.count;
7301    l_start := px_qa_result_tbl.count;
7302 
7303    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7304 
7305    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7306 
7307         --if bus doc is not template, then internal contact is required
7308         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is null) THEN
7309             l_index := l_index+1;
7310 
7311             --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7312             l_qa_result_tbl(l_index).message_name := l_IntContactMissing_err_msg;
7313             l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7314                                                             p_msg_name => l_IntContactMissing_err_msg,
7315                                                             p_token1 => 'DELIVERABLE_NAME',
7316                                                             p_token1_value => del_rec.deliverable_name);
7317 
7318             l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7319                                                             p_msg_name => l_ContactMissing_sugg_msg);
7320 
7321             l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7322             l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7323         END IF;
7324 
7325 
7326         --check if internal contact exists on a bus doc
7327         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
7328             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.internal_party_contact_id);
7329 
7330             IF l_contact_exists = 'N' THEN
7331                 l_index := l_index+1;
7332                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7333                 l_qa_result_tbl(l_index).message_name := l_IntContactInvalid_err_msg;
7334                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7335                                                             p_msg_name => l_IntContactInvalid_err_msg);
7336                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7337                                                             p_msg_name => l_IntContactInvalid_sugg_msg);
7338 
7339                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7340                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7341 
7342             END IF;
7343 
7344         END IF;
7345 
7346 
7347 
7348         --check if requestor exists on a bus doc
7349         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
7350             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.requester_id);
7351             IF(l_contact_exists = 'N') THEN
7352 
7353                 l_index := l_index+1;
7354                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_WARNING;
7355                 l_qa_result_tbl(l_index).message_name := l_InvalidRequestor_err_msg;
7356                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7357                                                             p_msg_name => l_InvalidRequestor_err_msg);
7358                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7359                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7360                                                             p_msg_name => l_InvalidRequestor_sugg_msg);
7361                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7362 
7363             END IF;
7364         END IF;
7365 
7366         --check if escalation assignee exists on a bus doc
7367         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
7368             l_contact_exists := internal_contact_exists(p_contact_id => del_rec.escalation_assignee);
7369             IF (l_contact_exists = 'N')  THEN
7370 
7371                 l_index := l_index+1;
7372                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7373                 l_qa_result_tbl(l_index).message_name := l_InvalidEscAssgn_err_msg;
7374                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7375                                                             p_msg_name => l_InvalidEscAssgn_err_msg);
7376                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7377                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7378                                                             p_msg_name => l_InvalidEscAssgn_sugg_msg);
7379                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7380 
7381             END IF;
7382         END IF;
7383 
7384    --mass update common attributes
7385    IF(l_index > l_start) THEN
7386    --We have some errors
7387    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7388     FOR i IN (l_start+1)..l_index
7389     LOOP
7390         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7391         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7392         l_qa_result_tbl(i).qa_code := l_qa_code;
7393         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7394         l_qa_result_tbl(i).error_severity := p_severity;
7395 
7396     END LOOP;
7397    END IF;
7398 
7399    x_return_status := l_return_status;
7400    px_qa_result_tbl := l_qa_result_tbl;
7401 
7402    EXCEPTION
7403      WHEN FND_API.G_EXC_ERROR THEN
7404        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7405         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');
7406        END IF;
7407 
7408        x_return_status := G_RET_STS_ERROR;
7409 
7410 
7411     WHEN FND_API.G_EXC_UNEXPECTED_ERROR 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,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_UNEXPECTED_ERROR');
7414        END IF;
7415 
7416        x_return_status := G_RET_STS_UNEXP_ERROR;
7417 
7418 
7419     WHEN OTHERS THEN
7420        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7421         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with OTHERS EXCEPTION');
7422        END IF;
7423 
7424       x_return_status := G_RET_STS_UNEXP_ERROR;
7425       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7426       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7427       END IF;
7428 
7429 
7430    END check_internal_contacts;
7431 
7432 
7433      /**
7434    * This procedure checks if there is any error related to a given
7435    * deliverable's internal contacts
7436    * @modifies px_qa_result_tbl  table of records that contains validation
7437    *           errors and warnings
7438    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7439    *                           OKC_API.G_RET_STS_ERROR if failes
7440    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7441    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7442    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7443    */
7444    PROCEDURE check_internal_contacts_valid (
7445     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7446     p_severity         IN VARCHAR2,
7447     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7448     x_return_status    OUT  NOCOPY VARCHAR2
7449    ) IS
7450 
7451     l_api_version                  CONSTANT NUMBER := 1;
7452     l_api_name                     CONSTANT VARCHAR2(30) := 'check_internal_contacts_valid';
7453     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7454     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7455     l_index                         PLS_INTEGER := 0;
7456     l_start                         PLS_INTEGER := 0;
7457     l_message_txt                   VARCHAR2(2000);
7458     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7459     l_contact_valid                 VARCHAR2(1);
7460 
7461     l_qa_code                       VARCHAR2(80) := 'CHECK_INTERNAL_CONTACT_VALID';
7462     l_short_desc                    VARCHAR2(80);
7463 
7464     l_err_message_txt          FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7465     l_sugg_message_txt         FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7466 
7467    BEGIN
7468       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7469           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts_valid');
7470       END IF;
7471    l_qa_result_tbl := px_qa_result_tbl;
7472    l_index := px_qa_result_tbl.count;
7473    l_start := px_qa_result_tbl.count;
7474 
7475    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7476 
7477    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7478 
7479         --check if internal contact is a valid fnd user or if it has an email address
7480         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
7481             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.internal_party_contact_id);
7482             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7483                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'internal contact valid (l_contact_valid): '||l_contact_valid);
7484             END IF;
7485             IF l_contact_valid = 'N'  THEN
7486               l_index := l_index+1;
7487 
7488                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_INT_CONT_EMAIL';
7489                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7490                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL');
7491                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7492                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
7493 
7494                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7495                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7496 
7497             END IF;
7498 
7499         END IF;
7500 
7501         --check if requester is a valid fnd user or if it has an email address
7502          IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
7503             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.requester_id);
7504             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7505                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'requester valid (l_contact_valid): '||l_contact_valid);
7506             END IF;
7507             IF l_contact_valid = 'N'  THEN
7508 
7509                 l_index := l_index+1;
7510                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_REQ_CONT_EMAIL';
7511                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7512                                                             p_msg_name => 'OKC_DEL_INV_REQ_CONT_EMAIL');
7513                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7514                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7515                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
7516                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7517 
7518             END IF;
7519         END IF;
7520 
7521         --check if escalation assignee is a valid fnd user or if it has an email address
7522         IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
7523             l_contact_valid := internal_contact_valid(p_contact_id => del_rec.escalation_assignee);
7524             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7525                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'escalation assignee valid (l_contact_valid): '||l_contact_valid);
7526             END IF;
7527             IF l_contact_valid = 'N'  THEN
7528 
7529                 l_index := l_index+1;
7530                 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_ESC_CONT_EMAIL';
7531                 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7532                                                             p_msg_name => 'OKC_DEL_INV_ESC_CONT_EMAIL');
7533                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7534                 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7535                                                             p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
7536                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7537 
7538             END IF;
7539         END IF;
7540 
7541 
7542 
7543    --mass update common attributes
7544    IF(l_index > l_start) THEN
7545    --We have some errors
7546    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7547     FOR i IN (l_start+1)..l_index
7548     LOOP
7549         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7550         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7551         l_qa_result_tbl(i).qa_code := l_qa_code;
7552         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7553         l_qa_result_tbl(i).error_severity := p_severity;
7554 
7555     END LOOP;
7556    END IF;
7557 
7558    x_return_status := l_return_status;
7559    px_qa_result_tbl := l_qa_result_tbl;
7560 
7561    IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7562         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'leaving check_internal_contacts_valid without error');
7563    END IF;
7564    EXCEPTION
7565      WHEN FND_API.G_EXC_ERROR THEN
7566        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7567         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving check_internal_contacts_valid with G_EXC_ERROR');
7568        END IF;
7569 
7570        x_return_status := G_RET_STS_ERROR;
7571 
7572 
7573     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7574        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7575         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');
7576        END IF;
7577 
7578        x_return_status := G_RET_STS_UNEXP_ERROR;
7579 
7580 
7581     WHEN OTHERS THEN
7582        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7583         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');
7584        END IF;
7585 
7586       x_return_status := G_RET_STS_UNEXP_ERROR;
7587       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7588       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7589       END IF;
7590 
7591 
7592    END check_internal_contacts_valid;
7593 
7594 
7595 
7596 
7597 
7598   /**
7599    * This procedure checks if there is any error related to a given
7600    * deliverable's external contacts
7601    * @modifies px_qa_result_tbl  table of records that contains validation
7602    *           errors and warnings
7603    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7604    *                           OKC_API.G_RET_STS_ERROR if failes
7605    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7606    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7607    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7608    */
7609    PROCEDURE check_external_contacts (
7610     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7611     p_severity         IN VARCHAR2,
7612     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7613     x_return_status    OUT  NOCOPY VARCHAR2
7614    ) IS
7615 
7616     l_api_version                  CONSTANT NUMBER := 1;
7617     l_api_name                     CONSTANT VARCHAR2(30) := 'check_external_contacts';
7618     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7619     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7620     l_index                         PLS_INTEGER := 0;
7621     l_start                         PLS_INTEGER := 0;
7622     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7623     l_contact_exists                VARCHAR2(1);
7624     l_contact_valid                 VARCHAR2(1);
7625 
7626     l_qa_code                       VARCHAR2(80) := 'CHECK_SUPPLIER_CONTACT';
7627     l_short_desc                    VARCHAR2(80);
7628 
7629 --Messages for Repository
7630     l_ExtContact_err_msg   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT';
7631     l_ExtContact_sugg_msg  FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT_S';
7632 
7633 --Messages for PO
7634     l_SupplierContact_err_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT';
7635     l_SupplierContact_sugg_msg  VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT_S';
7636 
7637     l_err_message_txt   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7638     l_sugg_message_txt   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7639 
7640    BEGIN
7641 
7642    l_qa_result_tbl := px_qa_result_tbl;
7643    l_index := px_qa_result_tbl.count;
7644    l_start := px_qa_result_tbl.count;
7645 
7646    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7647 
7648    --get the document type class based on deliverable's business document type
7649    l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7650 
7651         --check if specified external contact exists on a bus doc
7652         IF(l_doc_type_class <> 'TEMPLATE' and
7653            del_rec.external_party_id is not null and
7654            del_rec.external_party_contact_id is not null) THEN
7655             l_contact_exists := external_contact_valid(p_party_id => del_rec.external_party_id
7656                                                       ,p_party_role => del_rec.external_party_role
7657                                                       ,p_contact_id => del_rec.external_party_contact_id);
7658             IF (l_contact_exists = 'N') THEN
7659 
7660                 l_index := l_index+1;
7661                 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7662 
7663        If (l_doc_type_class = 'REPOSITORY') then
7664                   l_qa_result_tbl(l_index).message_name := l_ExtContact_err_msg;
7665                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7666                                                             p_msg_name => l_ExtContact_err_msg,
7667                                                             p_token1 => 'DELIVERABLE_NAME',
7668                                                             p_token1_value => del_rec.deliverable_name);
7669                   l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7670                                                             p_msg_name => l_ExtContact_sugg_msg);
7671        Else
7672                   l_qa_result_tbl(l_index).message_name := l_SupplierContact_err_msg;
7673                   l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7674                                                             p_msg_name => l_SupplierContact_err_msg,
7675                                                             p_token1 => 'DELIVERABLE_NAME',
7676                                                             p_token1_value => del_rec.deliverable_name);
7677                   l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7678                                                             p_msg_name => l_SupplierContact_sugg_msg);
7679        End If;
7680 
7681                 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7682                 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7683 
7684             END IF;
7685         END IF;
7686 
7687 
7688 
7689 
7690    --mass update common attributes
7691    IF(l_index > l_start) THEN
7692    --We have some errors
7693    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7694     FOR i IN (l_start+1)..l_index
7695     LOOP
7696         l_qa_result_tbl(i).title := del_rec.deliverable_name;
7697         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7698         l_qa_result_tbl(i).qa_code := l_qa_code;
7699         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7700         l_qa_result_tbl(i).error_severity := p_severity;
7701 
7702     END LOOP;
7703    END IF;
7704 
7705    x_return_status := l_return_status;
7706    px_qa_result_tbl := l_qa_result_tbl;
7707 
7708    EXCEPTION
7709      WHEN FND_API.G_EXC_ERROR THEN
7710        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7711         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');
7712        END IF;
7713 
7714        x_return_status := G_RET_STS_ERROR;
7715 
7716 
7717     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7718        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7719         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');
7720        END IF;
7721 
7722        x_return_status := G_RET_STS_UNEXP_ERROR;
7723 
7724 
7725     WHEN OTHERS THEN
7726        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7727         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with OTHERS EXCEPTION');
7728        END IF;
7729 
7730       x_return_status := G_RET_STS_UNEXP_ERROR;
7731       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7732       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7733       END IF;
7734 
7735 
7736    END check_external_contacts;
7737 
7738   /**
7739    * This procedure checks if there is any error related to a given
7740    * deliverable's due date details
7741    * @modifies px_qa_result_tbl  table of records that contains validation
7742    *           errors and warnings
7743    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7744    *                           OKC_API.G_RET_STS_ERROR if failes
7745    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7746    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7747    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7748    */
7749    PROCEDURE check_due_dates (
7750     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
7751     p_severity         IN VARCHAR2,
7752     p_bus_doc_date_events_tbl   IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
7753     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7754     x_return_status    OUT NOCOPY  VARCHAR2
7755    ) IS
7756 
7757     l_api_version                  CONSTANT NUMBER := 1;
7758     l_api_name                     CONSTANT VARCHAR2(30) := 'check_due_dates';
7759     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7760     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
7761     l_index                         PLS_INTEGER := 0;
7762     l_start                         PLS_INTEGER := 0;
7763     l_message_txt                   VARCHAR2(2000);
7764     l_qa_code                       VARCHAR2(80) := 'CHECK_DUE_DATES';
7765     l_short_desc                    VARCHAR2(80);
7766 
7767     l_start_date                    Date;
7768     l_end_date                      Date;
7769 
7770     l_has_rltv_end_date             VARCHAR2(1);
7771     l_has_rltv_start_date           VARCHAR2(1);
7772 
7773     l_start_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
7774     l_end_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
7775     msgCount PLS_INTEGER := 0;
7776     l_start_not_matched_flag varchar2(1) := 'Y';
7777     l_end_not_matched_flag varchar2(1) := 'Y';
7778     l_st_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
7779     l_end_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
7780 
7781     TYPE QaMessagesTbl IS TABLE OF OKC_BUS_DOC_EVENTS_TL.meaning%TYPE
7782     INDEX BY BINARY_INTEGER;
7783 
7784     qaMessages QaMessagesTbl;
7785 
7786 
7787    BEGIN
7788    l_qa_result_tbl := px_qa_result_tbl;
7789    l_index := px_qa_result_tbl.count;
7790    l_start := px_qa_result_tbl.count;
7791    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7792        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7793         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_due_dates ');
7794         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '||to_char(del_rec.deliverable_id));
7795         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.deliverable_name);
7796         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.recurring_yn);
7797         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_start_date: '||del_rec.fixed_start_date);
7798         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_end_date: '||del_rec.fixed_end_date);
7799         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: start_event_date: '||del_rec.start_event_date);
7800         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: end_event_date: '||del_rec.end_event_date);
7801         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));
7802         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));
7803        END IF;
7804 
7805             --single due date field validation
7806             --check if due date fields are populated
7807       IF del_rec.fixed_due_date_yn = 'Y' THEN
7808 
7809             IF del_rec.fixed_start_date is null THEN
7810                   --missing fixed_start_date
7811                   l_index := l_index+1;
7812 
7813                     -- set qa message name
7814                   l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_FIXED_ST_DATE';
7815 
7816                     --- set problem long description
7817                   l_qa_result_tbl(l_index).problem_details :=
7818                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7819                     p_msg_name => 'OKC_DEL_MISSING_FIXED_ST_DATE',
7820                     p_token1 => 'DELIVERABLE_NAME',
7821                     p_token1_value => del_rec.deliverable_name);
7822 
7823                     -- set suggestion for given qa message
7824                   l_qa_result_tbl(l_index).suggestion :=
7825                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7826                     p_msg_name => 'OKC_DEL_REQUIRED_S');
7827 
7828                     -- set return status for calling API to know, that there's a QA message
7829                   --l_qa_status := OKC_API.G_RET_STS_ERROR;
7830             END IF;
7831         ELSE
7832 
7833             --06-FEB-2004 pnayani -- Fix for bug 3369934 Resetting due date attributes during copy
7834             IF del_rec.recurring_yn = 'Y' THEN
7835                 IF del_rec.fixed_start_date is null THEN
7836                     IF del_rec.relative_st_date_event_id is null THEN
7837                   --missing fixed_start_date
7838                   l_index := l_index+1;
7839                     -- set qa message name
7840                   l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_ST_INCOMPLETE';
7841 
7842                     --- set problem long description
7843                   l_qa_result_tbl(l_index).problem_details :=
7844                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7845                     p_msg_name => 'OKC_DEL_DUE_DATE_ST_INCOMPLETE',
7846                     p_token1 => 'DELIVERABLE_NAME',
7847                     p_token1_value => del_rec.deliverable_name);
7848 
7849                     -- set suggestion for given qa message
7850                   l_qa_result_tbl(l_index).suggestion :=
7851                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7852                     p_msg_name => 'OKC_DEL_REQUIRED_S');
7853 
7854                     END IF;  -- relative_st_event_id is null
7855                 END IF; -- del_rec.fixed_start_date is null THEN
7856 
7857                 IF del_rec.fixed_end_date is null THEN
7858 
7859                     IF del_rec.relative_end_date_event_id is null THEN
7860                   --missing fixed_start_date
7861                   l_index := l_index+1;
7862 
7863                     -- set qa message name
7864                   l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_EN_INCOMPLETE';
7865 
7866                     --- set problem long description
7867                   l_qa_result_tbl(l_index).problem_details :=
7868                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7869                     p_msg_name => 'OKC_DEL_DUE_DATE_EN_INCOMPLETE',
7870                     p_token1 => 'DELIVERABLE_NAME',
7871                     p_token1_value => del_rec.deliverable_name);
7872 
7873                     -- set suggestion for given qa message
7874                   l_qa_result_tbl(l_index).suggestion :=
7875                     OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7876                     p_msg_name => 'OKC_DEL_REQUIRED_S');
7877 
7878 
7879                     END IF;
7880                 END IF;  --del_rec.fixed_end_date is null THEN
7881             END IF; -- del_rec.recurring_yn = 'Y' THEN
7882 
7883             IF p_bus_doc_date_events_tbl.count > 0 THEN
7884 
7885                 -- if deliverable definition is recurring
7886                 IF del_rec.recurring_yn = 'Y' THEN
7887 
7888                     -- in itialize start date
7889                     l_start_date := NULL;
7890                     l_end_date   := NULL;
7891 
7892                     -- initialize boolean value which indicates if start date is
7893                     -- relative or fixed
7894                     l_has_rltv_start_date := 'N';
7895                     l_has_rltv_end_date   := 'N';
7896 
7897                     -- check start date, if it is relative to an event, and not fixed
7898                     IF del_rec.relative_st_date_event_id is not NULL THEN
7899                        -- set boolean value to Y, indicating that start date is relative
7900                         l_has_rltv_start_date := 'Y';
7901                         l_start_date := resolveRelativeDueEvents (
7902                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
7903                                         p_event_id => del_rec.relative_st_date_event_id,
7904                                         p_end_event_yn => 'N',
7905                                         px_event_full_name => l_start_event_full_name,
7906                                         px_not_matched_flag => l_start_not_matched_flag,
7907                                         px_event_code => l_st_event_code);
7908 
7909                     END IF; -- if start date is relative
7910 
7911                     -- check end date, if it is relative to an event, and not fixed
7912                     IF del_rec.relative_end_date_event_id is not NULL THEN
7913                         -- set boolean value to Y, indicating that start date is relative
7914                         l_has_rltv_end_date := 'Y';
7915                         l_end_date := resolveRelativeDueEvents (
7916                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
7917                                         p_event_id => del_rec.relative_end_date_event_id,
7918                                         p_end_event_yn => 'Y',
7919                                         px_event_full_name => l_end_event_full_name,
7920                                         px_not_matched_flag => l_end_not_matched_flag,
7921                                         px_event_code => l_end_event_code);
7922                     END IF; -- if end date is relative
7923 
7924                     --- if start date is relative
7925                     IF l_has_rltv_start_date = 'Y' THEN
7926 
7927                         -- start date is null on the business document
7928                         IF l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
7929 
7930                             -- increment the count first
7931                             msgCount := msgCount + 1;
7932 
7933                             --- set the QA message
7934                             qaMessages(msgCount) := l_start_event_full_name;
7935                         END IF; -- is start date is null
7936                     END IF; -- if start date is relative
7937 
7938                     --- if end date is relative
7939                     IF l_has_rltv_end_date = 'Y' THEN
7940 
7941                         -- end date is null on the business document
7942                         IF  l_end_not_matched_flag = 'N' and l_end_date is NULL THEN
7943 
7944                            IF l_has_rltv_start_date = 'Y' THEN
7945 
7946                                -- add this meesage only if start and end events are not same,
7947                                -- other wise start qa message has lready been added.
7948 
7949                                IF  l_st_event_code <> l_end_event_code THEN
7950                                    --- increment the count first
7951                                    msgCount := msgCount + 1;
7952 
7953                                    --- set the QA message
7954                                    qaMessages(msgCount) := l_end_event_full_name;
7955                                END IF;
7956                            ELSE
7957                                    --- increment the count first
7958                                    msgCount := msgCount + 1;
7959 
7960                                    --- set the QA message
7961                                    qaMessages(msgCount) := l_end_event_full_name;
7962 
7963                            END IF;
7964 
7965                         END IF; -- is end date is null
7966                     END IF; -- if end date is relative
7967 
7968                 ELSE -- deliverables is one time and relative
7969 
7970                     -- check start date, if it is relative to an event
7971                     IF del_rec.relative_st_date_event_id is not NULL THEN
7972 
7973                         -- in itialize start date
7974                         l_start_date := NULL;
7975 
7976                         -- get start date
7977                         l_start_date := resolveRelativeDueEvents (
7978                                         p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
7979                                         p_event_id => del_rec.relative_st_date_event_id,
7980                                         p_end_event_yn => 'N',
7981                                         px_event_full_name => l_start_event_full_name,
7982                                         px_not_matched_flag => l_start_not_matched_flag,
7983                                         px_event_code => l_st_event_code);
7984 
7985                         -- start date is null on the business document
7986                         IF  l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
7987 
7988                             -- increment the count first
7989                             msgCount := msgCount + 1;
7990 
7991                             --- set the QA message
7992                             qaMessages(msgCount) := l_start_event_full_name;
7993                         END IF; -- is start date is null
7994                     END IF; -- if start date is relative for one time deliverable
7995 
7996                 END IF; -- if deliverable is recurring
7997 
7998                   --- set qa results.
7999                   -- if one date is missing
8000                   IF qaMessages.count > 0 and qaMessages.count = 1 THEN
8001                     --missing relative date
8002                     l_index := l_index+1;
8003 
8004                     -- set qa message name
8005                     l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_RLTV_DATE';
8006 
8007                     --- set problem long description
8008                     l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8009                                                                 p_app_name => G_OKC,
8010                                                                 p_msg_name => 'OKC_DEL_MISSING_RLTV_DATE',
8011                                                                 p_token1 => 'EVT_DATE_NAME',
8012                                                                 p_token1_value => qaMessages(1),
8013                                                                 p_token2 => 'DELIVERABLE_NAME',
8014                                                                 p_token2_value => del_rec.deliverable_name);
8015 
8016                     -- set suggestion for given qa message
8017                     l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8018                                                               p_msg_name => 'OKC_DEL_MISSING_RLTV_DATE_S',
8019                                                               p_token1 => 'EVT_DATE_NAME',
8020                                                               p_token1_value => qaMessages(1) );
8021 
8022                     -- set return status for calling API to know, that there's a QA message
8023                     --l_qa_status := OKC_API.G_RET_STS_ERROR;
8024 
8025                   END IF; -- if one date is missing
8026 
8027                   -- if two dates are missing
8028                   IF qaMessages.count > 0 and qaMessages.count = 2 THEN
8029                       --missing relative dates (two dates)
8030                       l_index := l_index+1;
8031 
8032                       -- set qa message name
8033                       l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_RLTV_DATES';
8034 
8035                       --- set problem long description
8036                       l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8037                                                                   p_app_name => G_OKC,
8038                                                                   p_msg_name => 'OKC_DEL_MISSING_RLTV_DATES',
8039                                                                   p_token1 => 'EVT_DATE_NAME1',
8040                                                                   p_token1_value => qaMessages(1),
8041                                                                   p_token2 => 'EVT_DATE_NAME2',
8042                                                                   p_token2_value => qaMessages(2),
8043                                                                   p_token3 => 'DELIVERABLE_NAME',
8044                                                                   p_token3_value => del_rec.deliverable_name);
8045 
8046                       -- set suggestion for given qa message
8047                       l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8048                                                                 p_msg_name => 'OKC_DEL_MISSING_RLTV_DATES_S',
8049                                                                 p_token1 => 'EVT_DATE_NAME1',
8050                                                                 p_token1_value => qaMessages(1),
8051                                                                 p_token2 => 'EVT_DATE_NAME2',
8052                                                                 p_token2_value => qaMessages(2) );
8053 
8054                       -- set return status for calling API to know, that there's a QA message
8055                       --l_qa_status := OKC_API.G_RET_STS_ERROR;
8056 
8057                   END IF; -- if two dates are missing
8058             END IF; -- if dates table of records is not empty
8059         END IF; --- if deliverables is not fixed due date
8060 
8061     --mass update common attributes
8062    IF(l_index > l_start) THEN
8063    --We have some errors
8064    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8065     FOR i IN (l_start+1)..l_index
8066     LOOP
8067         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8068         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8069         l_qa_result_tbl(i).qa_code := l_qa_code;
8070         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8071         l_qa_result_tbl(i).error_severity := p_severity;
8072 
8073     END LOOP;
8074    END IF;
8075 
8076         -- set out parameters
8077         x_return_status := l_return_status;
8078         px_qa_result_tbl := l_qa_result_tbl;
8079 
8080    EXCEPTION
8081      WHEN FND_API.G_EXC_ERROR THEN
8082        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8083         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');
8084        END IF;
8085        x_return_status := G_RET_STS_ERROR;
8086 
8087     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8088        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8089         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');
8090        END IF;
8091 
8092        x_return_status := G_RET_STS_UNEXP_ERROR;
8093 
8094 
8095     WHEN OTHERS THEN
8096        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8097         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with OTHERS EXCEPTION');
8098        END IF;
8099 
8100       x_return_status := G_RET_STS_UNEXP_ERROR;
8101       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8102       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8103       END IF;
8104 
8105    END check_due_dates;
8106 
8107   /**
8108    * This procedure checks if there is any error related to a given
8109    * deliverable's amendments
8110    * @modifies px_qa_result_tbl  table of records that contains validation
8111    *           errors and warnings
8112    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8113    *                           OKC_API.G_RET_STS_ERROR if failes
8114    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8115    *           x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8116    *                           OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8117    */
8118    PROCEDURE check_amendments (
8119     del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8120     p_severity         IN VARCHAR2,
8121     px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8122     x_return_status    OUT  NOCOPY VARCHAR2
8123    ) IS
8124 
8125     l_api_version                  CONSTANT NUMBER := 1;
8126     l_api_name                     CONSTANT VARCHAR2(30) := 'check_amendments';
8127     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8128     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8129     l_index                         PLS_INTEGER := 0;
8130     l_start                         PLS_INTEGER := 0;
8131     l_message_txt                   VARCHAR2(2000);
8132     l_doc_type_class                OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8133     l_contact_exists                BOOLEAN;
8134     l_contact_valid                 BOOLEAN;
8135 
8136     l_qa_code                       VARCHAR2(80) := 'CHECK_AMENDMENT';
8137     l_short_desc                    VARCHAR2(80);
8138    BEGIN
8139 
8140    l_qa_result_tbl := px_qa_result_tbl;
8141    l_index := px_qa_result_tbl.count;
8142    l_start := px_qa_result_tbl.count;
8143 
8144    l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8145 
8146 
8147 
8148         IF(del_rec.amendment_operation is not null and del_rec.amendment_notes is null) THEN
8149             l_index := l_index+1;
8150             l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_AMEND_DESC';
8151             l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8152                                                             p_msg_name => 'OKC_DEL_MISSING_AMEND_DESC',
8153                                                             p_token1 => 'DELIVERABLE_NAME',
8154                                                             p_token1_value => del_rec.deliverable_name);
8155             l_qa_result_tbl(l_index).problem_details := l_message_txt;
8156             l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8157                                                             p_msg_name => 'OKC_DEL_REQUIRED_S');
8158             l_qa_result_tbl(l_index).suggestion := l_message_txt;
8159 
8160         END IF;
8161 
8162 
8163 
8164    --mass update common attributes
8165    IF(l_index > l_start) THEN
8166    --We have some errors
8167    -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8168     FOR i IN (l_start+1)..l_index
8169     LOOP
8170         l_qa_result_tbl(i).title := del_rec.deliverable_name;
8171         l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8172         l_qa_result_tbl(i).qa_code := l_qa_code;
8173         l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8174         l_qa_result_tbl(i).error_severity := p_severity;
8175 
8176     END LOOP;
8177    END IF;
8178 
8179    x_return_status := l_return_status;
8180    px_qa_result_tbl := l_qa_result_tbl;
8181 
8182    EXCEPTION
8183      WHEN FND_API.G_EXC_ERROR THEN
8184        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8185         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with G_EXC_ERROR');
8186        END IF;
8187 
8188        x_return_status := G_RET_STS_ERROR;
8189 
8190 
8191     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8192        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8193         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');
8194        END IF;
8195 
8196        x_return_status := G_RET_STS_UNEXP_ERROR;
8197 
8198 
8199     WHEN OTHERS THEN
8200        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8201         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with OTHERS EXCEPTION');
8202        END IF;
8203 
8204       x_return_status := G_RET_STS_UNEXP_ERROR;
8205       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8206       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8207       END IF;
8208 
8209 
8210    END check_amendments;
8211 
8212        PROCEDURE update_error_table
8213            (px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8214             p_qa_severity IN VARCHAR2,
8215             p_qa_code IN VARCHAR2,
8216             p_error_msg_name IN VARCHAR2,
8217             p_del_variable_name IN VARCHAR2,
8218             p_article_name IN VARCHAR2,
8219             p_article_id IN NUMBER,
8220             p_section_name IN VARCHAR2,
8221             p_suggestion_msg_name IN VARCHAR2,
8222             x_return_status OUT NOCOPY VARCHAR2) IS
8223 
8224    l_msg_txt VARCHAR2(2000);
8225    l_suggestion_txt VARCHAR2(2000);
8226    l_index NUMBER;
8227    l_return_status VARCHAR2(1);
8228    l_short_desc VARCHAR2(80);
8229    l_api_name CONSTANT  VARCHAR2(30) := 'update_error_table';
8230    Begin
8231     l_return_status := G_RET_STS_SUCCESS;
8232     l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',p_qa_code);
8233     l_msg_txt  := OKC_TERMS_UTIL_PVT.get_message
8234                                         (p_app_name => G_OKC,
8235                                          p_msg_name => p_error_msg_name,
8236                                          p_token1 => 'DELIVERABLE_VARIABLE',
8237                                          p_token1_value => p_del_variable_name,
8238                                          p_token2 => 'ARTICLE_NAME',
8239                                          p_token2_value => p_article_name);
8240 
8241     l_suggestion_txt  := OKC_TERMS_UTIL_PVT.get_message
8242                                         (p_app_name => G_OKC,
8243                                          p_msg_name => p_suggestion_msg_name);
8244     l_index := px_qa_result_tbl.count + 1;
8245     px_qa_result_tbl(l_index).error_severity := p_qa_severity;
8246     px_qa_result_tbl(l_index).qa_code := p_qa_code;
8247     px_qa_result_tbl(l_index).message_name := p_error_msg_name;
8248     px_qa_result_tbl(l_index).problem_details := l_msg_txt;
8249     px_qa_result_tbl(l_index).suggestion := l_suggestion_txt;
8250     px_qa_result_tbl(l_index).title := p_article_name;
8251     px_qa_result_tbl(l_index).article_id := p_article_id;
8252     px_qa_result_tbl(l_index).section_name := p_section_name;
8253     px_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
8254     x_return_status := l_return_status;
8255        EXCEPTION
8256          WHEN OTHERS THEN
8257           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8258            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5002: Leaving update_error_table with unexpected error:'||SQLERRM);
8259           END IF;
8260           x_return_status := G_RET_STS_UNEXP_ERROR;
8261 
8262    End update_error_table;
8263 
8264 
8265       /* This procedure gets called from validate_deliverables_for_qa routine to check to see if
8266      there are any variables of type 'D' which don't have deliverables associated
8267      with them.
8268   */
8269      PROCEDURE check_deliverables_var_usage(
8270             p_severity         IN VARCHAR2,
8271             p_bus_doc_type     IN VARCHAR2,
8272             p_bus_doc_id       IN NUMBER,
8273             px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8274             x_return_status    OUT  NOCOPY VARCHAR2) IS
8275 
8276       l_api_version                  CONSTANT NUMBER := 1;
8277       l_api_name                     CONSTANT VARCHAR2(30) := 'check_deliverables_var_usage';
8278       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8279       l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8280       l_index                         PLS_INTEGER := 0;
8281       l_start                         PLS_INTEGER := 0;
8282       l_message_txt                   VARCHAR2(2000);
8283       l_qa_code                       VARCHAR2(80) := 'CHECK_DELIVERABLES_VAR_USAGE';
8284       l_short_desc                    VARCHAR2(80) ;
8285 
8286       l_old_var_code                okc_k_art_variables.variable_code%TYPE;
8287       l_old_art_id                  okc_k_articles_b.sav_sae_id%TYPE;
8288       l_article_name                VARCHAR2(240);
8289 
8290       --variable codes
8291       l_var_code_int_con            CONSTANT VARCHAR2(40) := 'INTERNAL_CONTRACTUAL_DEL';
8292       l_var_code_ext_con            CONSTANT VARCHAR2(40) := 'EXTERNAL_CONTRACTUAL_DEL';
8293       l_var_code_all_con            CONSTANT VARCHAR2(40) := 'ALL_CONTRACTUAL_DEL';
8294 
8295       l_var_code_ext_sourcing       CONSTANT VARCHAR2(40) := 'EXTERNAL_SOURCING_DEL';
8296       l_var_code_all_sourcing       CONSTANT VARCHAR2(40) := 'ALL_SOURCING_DEL';
8297 
8298       l_contractual                 CONSTANT VARCHAR2(40) := 'CONTRACTUAL';
8299       l_sourcing                    CONSTANT VARCHAR2(40) := 'SOURCING';
8300 
8301       --l_external                    CONSTANT VARCHAR2(40) := 'EXTERNAL';
8302       --l_internal                    CONSTANT VARCHAR2(40) := 'INTERNAL';
8303 
8304       l_internal_org                CONSTANT VARCHAR2(40) := 'INTERNAL_ORG';
8305 
8306 
8307       l_error_exists                VARCHAR2(1) := 'N';
8308 
8309       DEL_NOT_FOUND_EXCEPTION EXCEPTION;
8310 
8311      CURSOR get_variables_CUR IS
8312      select
8313     art.document_id doc_id
8314     ,art.document_type doc_type
8315     ,av.variable_code       variable_code
8316     ,art.sav_sae_id         article_id
8317     ,art.article_version_id version_id
8318     ,art.scn_id             section_id
8319     ,sec.label||' '||sec.heading section_name
8320     ,variables.variable_name variable_name
8321     from
8322     okc_k_art_variables av
8323     ,okc_k_articles_b art
8324     ,okc_sections_b sec
8325     ,okc_bus_variables_v variables
8326      where
8327      art.document_id = p_bus_doc_id and
8328      art.document_type = p_bus_doc_type and
8329      av.variable_type = 'D' and
8330      av.cat_id = art.id and --ArtVariables to Articles
8331      sec.id = art.scn_id and --Sections to Articles
8332      variables.variable_code = av.variable_code and --Variables to ArtVariables
8333      nvl (art.amendment_operation_code,'?') <> 'DELETED' and --fix for bug 3710697
8334      nvl(art.summary_amend_operation_code,'?')<> 'DELETED'
8335      order by av.variable_code, art.sav_sae_id;
8336 
8337 
8338 
8339      get_variables_REC get_variables_CUR%ROWTYPE;
8340 
8341      CURSOR check_int_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
8342                                  ,p_bus_doc_id IN NUMBER
8343                    ,p_del_type IN VARCHAR2
8344                ,p_internal_org IN VARCHAR2) IS
8345      select 'x'
8346      from
8347       okc_deliverables del
8348      where
8349          del.business_document_type = p_bus_doc_type
8350      and del.business_document_id = p_bus_doc_id
8351      and del.deliverable_type = p_del_type
8352   and del.responsible_party = p_internal_org;
8353 
8354      check_int_dels_exist_REC check_int_dels_exist_CUR%ROWTYPE;
8355 
8356 
8357      CURSOR check_ext_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
8358                                  ,p_bus_doc_id IN NUMBER
8359                    ,p_del_type IN VARCHAR2
8360                ,p_internal_org IN VARCHAR2) IS
8361      select 'x'
8362      from
8363       okc_deliverables del
8364      where
8365          del.business_document_type = p_bus_doc_type
8366      and del.business_document_id = p_bus_doc_id
8367      and del.deliverable_type = p_del_type
8368   and del.responsible_party <> p_internal_org;
8369 
8370      check_ext_dels_exist_REC check_ext_dels_exist_CUR%ROWTYPE;
8371 
8372     CURSOR check_all_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
8373                                    ,p_bus_doc_id IN NUMBER
8374               ,p_del_type IN VARCHAR2) IS
8375     select 'x'
8376     from
8377     okc_deliverables del
8378     where
8379     del.business_document_type = p_bus_doc_type
8380     and del.business_document_id = p_bus_doc_id
8381     and del.deliverable_type = p_del_type;
8382 
8383     check_all_dels_exist_REC check_all_dels_exist_CUR%ROWTYPE;
8384 
8385 
8386     --fix bug 3682452
8387     --We only check the variable usage for Negotiation type of deliverables
8388     --on a sourcing document
8389     --If it's a PO document, we do not check this
8390     --and we decide if a document is a sourcing document based on the
8391     --target_response_doc_type
8392     CURSOR response_doc_type_cur(p_bus_doc_type IN VARCHAR2) IS
8393     select target_response_doc_type
8394     from okc_bus_doc_types_b
8395     where document_type = p_bus_doc_type;
8396 
8397     response_doc_type_rec response_doc_type_cur%ROWTYPE;
8398 
8399     Begin
8400 
8401 
8402 
8403 
8404     l_qa_result_tbl := px_qa_result_tbl;
8405     l_index := px_qa_result_tbl.count;
8406     l_start := px_qa_result_tbl.count;
8407     l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8408 
8409     --initialize l_old_var_code and l_old_art_id
8410     l_old_var_code := 'X';
8411     l_old_art_id := 0;
8412 
8413 
8414     OPEN get_variables_CUR;
8415     LOOP
8416     Begin
8417     Fetch get_variables_CUR into get_variables_REC;
8418     EXIT WHEN get_variables_CUR%NOTFOUND;
8419 
8420     IF (get_variables_REC.variable_code <> l_old_var_code)THEN
8421 
8422         --as we traverse down the records, if we encounter a different variable_code
8423         --we should perform the checks
8424         --if the article_id changes and we already know that the variable_code does not have
8425         --associated deliverables, we just need to insert the error message
8426         --without performing the check
8427 
8428         l_error_exists := 'N';
8429 
8430 
8431 
8432           IF get_variables_REC.variable_code = l_var_code_int_con then
8433 
8434 
8435                     OPEN check_int_dels_exist_CUR(
8436                           p_bus_doc_type => p_bus_doc_type
8437                                      ,p_bus_doc_id => p_bus_doc_id
8438                       ,p_del_type => l_contractual
8439                          ,p_internal_org => l_internal_org);
8440 
8441                     FETCH check_int_dels_exist_CUR into check_int_dels_exist_REC;
8442                     If check_int_dels_exist_CUR%NOTFOUND then
8443                         l_error_exists := 'Y';
8444                         RAISE DEL_NOT_FOUND_EXCEPTION;
8445                     End If;
8446                     CLOSE check_int_dels_exist_CUR;
8447 
8448           Elsif get_variables_REC.variable_code = l_var_code_ext_con then
8449 
8450                     OPEN check_ext_dels_exist_CUR(
8451                           p_bus_doc_type => p_bus_doc_type
8452                                      ,p_bus_doc_id => p_bus_doc_id
8453                       ,p_del_type => l_contractual
8454                          ,p_internal_org => l_internal_org);
8455 
8456                     FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
8457                     If check_ext_dels_exist_CUR%NOTFOUND then
8458                         l_error_exists := 'Y';
8459                         RAISE DEL_NOT_FOUND_EXCEPTION;
8460                     End If;
8461                     CLOSE check_ext_dels_exist_CUR;
8462 
8463           Elsif get_variables_REC.variable_code = l_var_code_all_con then
8464 
8465 
8466                 OPEN check_all_dels_exist_CUR(p_bus_doc_type => p_bus_doc_type
8467                         ,p_bus_doc_id => p_bus_doc_id
8468                      ,p_del_type => l_contractual);
8469 
8470                 FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
8471                 If check_all_dels_exist_CUR%NOTFOUND then
8472                     l_error_exists := 'Y';
8473                     RAISE DEL_NOT_FOUND_EXCEPTION;
8474                 End If;
8475                 CLOSE check_all_dels_exist_CUR;
8476 
8477 
8478           Elsif get_variables_REC.variable_code = l_var_code_ext_sourcing then
8479 
8480             --fix bug 3682452
8481             --We only check the variable usage for Negotiation type of deliverables
8482             --on a sourcing document
8483             OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
8484                 FETCH response_doc_type_cur into response_doc_type_rec;
8485                 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
8486                     OPEN check_ext_dels_exist_CUR(
8487                                       p_bus_doc_type => p_bus_doc_type
8488                                      ,p_bus_doc_id => p_bus_doc_id
8489                       ,p_del_type => l_sourcing
8490                                      ,p_internal_org => l_internal_org);
8491 
8492                     FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
8493                     If check_ext_dels_exist_CUR%NOTFOUND then
8494                         l_error_exists := 'Y';
8495                         RAISE DEL_NOT_FOUND_EXCEPTION;
8496                     End If;
8497                     CLOSE check_ext_dels_exist_CUR;
8498                 END IF;
8499             CLOSE response_doc_type_cur;
8500 
8501 
8502           Elsif get_variables_REC.variable_code = l_var_code_all_sourcing then
8503 
8504             --fix bug 3682452
8505             --We only check the variable usage for Negotiation type of deliverables
8506             --on a sourcing document
8507             OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
8508                 FETCH response_doc_type_cur into response_doc_type_rec;
8509                 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
8510 
8511                     OPEN check_all_dels_exist_CUR(
8512                     p_bus_doc_type => p_bus_doc_type
8513                                      ,p_bus_doc_id => p_bus_doc_id
8514                       ,p_del_type => l_sourcing);
8515                     FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
8516                     If check_all_dels_exist_CUR%NOTFOUND then
8517                         l_error_exists := 'Y';
8518                         RAISE DEL_NOT_FOUND_EXCEPTION;
8519                     End If;
8520                     CLOSE check_all_dels_exist_CUR;
8521                 END IF;
8522             CLOSE response_doc_type_cur;
8523 
8524           End IF; --get_variables_REC.variable_code = l_var_code_int_con
8525 
8526     ELSE --current variable_code = old variable_code
8527 
8528         IF(l_error_exists = 'Y')  THEN
8529             RAISE DEL_NOT_FOUND_EXCEPTION;
8530         END IF;
8531     END IF;
8532 
8533 
8534         EXCEPTION
8535          WHEN DEL_NOT_FOUND_EXCEPTION THEN
8536           IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8537            FND_LOG.STRING(  FND_LOG.LEVEL_EXCEPTION ,g_module||l_api_name,'5000: In check_deliverables_var_usage:DEL_NOT_FOUND :'||SQLERRM);
8538           END IF;
8539 
8540           update_error_table
8541            (px_qa_result_tbl => l_qa_result_tbl,
8542             p_qa_severity => p_severity,
8543             p_qa_code => l_qa_code,
8544             p_error_msg_name => 'OKC_DEL_VAR_NOT_RESOLVED',
8545             p_del_variable_name => get_variables_REC.variable_name, -- get_variables_REC.del_variable_name,
8546             p_article_id => get_variables_REC.article_id,
8547             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,
8548             p_section_name => get_variables_REC.section_name,
8549             p_suggestion_msg_name => 'OKC_DEL_VAR_NOT_RESOLVED_S',
8550             x_return_status => l_return_status );
8551 
8552           IF check_int_dels_exist_CUR%ISOPEN THEN
8553             CLOSE check_int_dels_exist_CUR;
8554           END IF;
8555           IF check_ext_dels_exist_CUR%ISOPEN THEN
8556             CLOSE check_ext_dels_exist_CUR;
8557           END IF;
8558 
8559           IF check_all_dels_exist_CUR%ISOPEN THEN
8560             CLOSE check_all_dels_exist_CUR;
8561           END IF;
8562 
8563           IF response_doc_type_cur%ISOPEN THEN
8564             CLOSE response_doc_type_cur;
8565           END IF;
8566 
8567      End ; --end exception DEL_NOT_FOUND_EXCEPTION
8568         --reset the old values
8569         l_old_var_code := get_variables_REC.variable_code;
8570         l_old_art_id := get_variables_REC.article_id;
8571 
8572     END LOOP;
8573 
8574     CLOSE get_variables_CUR;
8575 
8576     x_return_status := l_return_status;
8577     px_qa_result_tbl := l_qa_result_tbl;
8578 
8579        EXCEPTION
8580          WHEN OTHERS THEN
8581           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8582            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5001: Leaving check_deliverables_var_usage with unexpected error:'||SQLERRM);
8583           END IF;
8584 
8585           IF get_variables_CUR%ISOPEN THEN
8586             CLOSE get_variables_CUR;
8587           END IF;
8588 
8589           IF check_int_dels_exist_CUR%ISOPEN THEN
8590             CLOSE check_int_dels_exist_CUR;
8591           END IF;
8592 
8593           IF check_ext_dels_exist_CUR%ISOPEN THEN
8594             CLOSE check_int_dels_exist_CUR;
8595           END IF;
8596 
8597           IF check_all_dels_exist_CUR%ISOPEN THEN
8598             CLOSE check_all_dels_exist_CUR;
8599           END IF;
8600 
8601           IF response_doc_type_cur%ISOPEN THEN
8602             CLOSE response_doc_type_cur;
8603           END IF;
8604           x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
8605 
8606 
8607     End check_deliverables_var_usage;
8608 
8609 /**********************
8610 PROCEDURE check_external_party_exist:
8611 This API will be invoked by validate_deliverables_for_qa routine during QA check on a
8612 Deliverable. This check should only fire for Deliverables on a document where document_class
8613 is 'REPOSITORY'. This check should not fire for Deliverable types whose INTERNAL_FLAG = 'Y'
8614  *  @modifies px_qa_result_tbl  table of records that contains validation errors and warnings
8615  *  @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8616  *                          OKC_API.G_RET_STS_ERROR if fails
8617  *                          OKC_API.G_RET_STS_UNEXP_ERROR if unexpected error
8618  *          x_qa_status     OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8619  *                          OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8620 ***********************/
8621 PROCEDURE check_external_party_exists (
8622   del_rec          IN  OKC_DELIVERABLES%ROWTYPE,
8623   p_severity         IN VARCHAR2,
8624   px_qa_result_tbl   IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8625   x_return_status    OUT  NOCOPY VARCHAR2
8626   ) IS
8627 
8628   l_api_version          CONSTANT NUMBER := 1;
8629   l_api_name             CONSTANT VARCHAR2(30) := 'check_external_party_exists';
8630   l_return_status        VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8631   l_qa_result_tbl        OKC_TERMS_QA_PVT.qa_result_tbl_type;
8632   l_index                PLS_INTEGER := 0;
8633   l_start                PLS_INTEGER := 0;
8634 
8635   l_qa_code               VARCHAR2(80) := 'CHECK_EXTERNAL_PARTY_EXISTS';
8636   l_short_desc            VARCHAR2(80);
8637   l_error_msg_name        FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS';
8638   l_suggestion_msg_name   FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS_S';
8639 
8640   l_deliverable_name_token VARCHAR2(30) := 'DELIVERABLE_NAME';
8641 
8642   l_error_msg_text        FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8643   l_suggestion_msg_text   FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8644 
8645   l_doc_type_class OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE;
8646   l_del_type_int_flag     OKC_DELIVERABLE_TYPES_B.INTERNAL_FLAG%TYPE;
8647 
8648  BEGIN
8649 
8650   l_qa_result_tbl := px_qa_result_tbl;
8651   l_index := px_qa_result_tbl.count;
8652   l_start := px_qa_result_tbl.count;
8653 
8654   l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8655 
8656   l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
8657   If (l_doc_type_class IS NULL) then
8658     RAISE FND_API.G_EXC_ERROR;
8659   End If;
8660   l_del_type_int_flag := getDelTypeIntFlag(p_document_type_class => l_doc_type_class
8661                                           ,p_deliverable_type => del_rec.deliverable_type);
8662   If (l_del_type_int_flag IS NULL) then
8663     RAISE FND_API.G_EXC_ERROR;
8664   End If;
8665 
8666   If (l_doc_type_class = 'REPOSITORY'
8667      AND l_del_type_int_flag = 'N'
8668      AND del_rec.external_party_id is NULL) then
8669 
8670      l_index := l_index+1;
8671   l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
8672   l_error_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8673                          p_msg_name => l_error_msg_name,
8674                                                        p_token1 => l_deliverable_name_token,
8675                                                        p_token1_value => del_rec.deliverable_name);
8676   l_qa_result_tbl(l_index).problem_details := l_error_msg_text;
8677 
8678      l_suggestion_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8679                            p_msg_name => l_suggestion_msg_name);
8680 
8681      l_qa_result_tbl(l_index).suggestion := l_suggestion_msg_text;
8682   l_qa_result_tbl(l_index).title := del_rec.deliverable_name;
8683   l_qa_result_tbl(l_index).deliverable_id := del_rec.deliverable_id;
8684   l_qa_result_tbl(l_index).qa_code := l_qa_code;
8685   l_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
8686   l_qa_result_tbl(l_index).error_severity := p_severity;
8687 
8688   End If;
8689       x_return_status := l_return_status;
8690    px_qa_result_tbl := l_qa_result_tbl;
8691 
8692 
8693     EXCEPTION
8694        WHEN FND_API.G_EXC_ERROR THEN
8695        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8696          FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module
8697         ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_ERROR');
8698     END IF;
8699       x_return_status := G_RET_STS_ERROR;
8700 
8701 
8702        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8703        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8704             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
8705       ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_UNEXPECTED_ERROR');
8706     END IF;
8707 
8708         x_return_status := G_RET_STS_UNEXP_ERROR;
8709 
8710 
8711        WHEN OTHERS THEN
8712        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8713             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
8714       ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with OTHERS EXCEPTION');
8715        END IF;
8716        x_return_status := G_RET_STS_UNEXP_ERROR;
8717 
8718        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8719           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8720        END IF;
8721 
8722 
8723 End check_external_party_exists;
8724 
8725 
8726    /* This procedure is called from terms QA check API.
8727    * @requires p_qa_result_tbl  has been initialized
8728    *           p_doc_type not null
8729    *           p_doc_id not null
8730    * @modifies p_qa_result_tbl  table of records that contains validation
8731    *           errors and warnings
8732    * @returns  x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8733    *                           OKC_API.G_RET_STS_ERROR if failes
8734    *                           OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8735    */
8736 PROCEDURE validate_deliverable_for_qa (
8737                         p_api_version   IN    NUMBER,
8738                         p_init_msg_list IN   VARCHAR2 := FND_API.G_FALSE,
8739                         p_doc_type    IN   VARCHAR2,
8740                         p_doc_id    IN    NUMBER,
8741                         p_mode    IN     VARCHAR2,
8742                         p_bus_doc_date_events_tbl   IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
8743                         p_qa_result_tbl IN OUT NOCOPY    OKC_TERMS_QA_PVT.qa_result_tbl_type,
8744                         x_msg_data  OUT NOCOPY VARCHAR2,
8745                         x_msg_count   OUT NOCOPY NUMBER,
8746                         x_return_status   OUT NOCOPY VARCHAR2,
8747                         x_qa_return_status  IN OUT NOCOPY VARCHAR2)
8748   IS
8749 
8750     l_api_version                  CONSTANT NUMBER := 1;
8751     l_api_name                     CONSTANT VARCHAR2(30) := 'validate_deliverable';
8752     l_qa_severity_warning          CONSTANT VARCHAR2(1) := 'W';
8753     l_qa_severity_error            CONSTANT VARCHAR2(1) := 'E';
8754 
8755     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8756     l_qa_result_tbl                 OKC_TERMS_QA_PVT.qa_result_tbl_type;
8757 
8758     l_start                         PLS_INTEGER := 0;
8759     l_end                           PLS_INTEGER := 0;
8760     del_cur   del_cur_type;
8761     del_rec   okc_deliverables%ROWTYPE;
8762     l_qa_return_status              VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8763 
8764   --  l_due_date_msg                  VARCHAR2(2000) := '';
8765     l_check_int_contact VARCHAR2(19)  := 'CHECK_BUYER_CONTACT';
8766     l_check_ext_contact VARCHAR2(22)  := 'CHECK_SUPPLIER_CONTACT';
8767     l_check_due_dates VARCHAR2(15) := 'CHECK_DUE_DATES';
8768     l_check_amendments VARCHAR2(20) := 'CHECK_AMENDMENT';
8769     l_check_var_usage VARCHAR2(40)  := 'CHECK_DELIVERABLES_VAR_USAGE';
8770     l_check_notifications VARCHAR2(40) := 'CHECK_NOTIFICATIONS';
8771     --bug 3686334, added CHECK_INTERNAL_CONTACT_VALID
8772     l_check_int_contact_valid VARCHAR2(30) := 'CHECK_INTERNAL_CONTACT_VALID';
8773     --bug 3814702, add a variable for Lookup type
8774 
8775     l_check_external_party_exists VARCHAR2(30) := 'CHECK_EXTERNAL_PARTY_EXISTS';
8776 
8777     l_lookup_type FND_LOOKUPS.LOOKUP_TYPE%TYPE :='OKC_TERM_QA_LIST';
8778 
8779     CURSOR check_qa_csr(p_qa_code IN VARCHAR2) IS
8780     select qa_code, severity_flag,enable_qa_yn
8781     from okc_doc_qa_lists
8782     where document_type = p_doc_type
8783     and qa_code = p_qa_code;
8784 
8785     CURSOR check_lookup_code_csr(p_lookup_code IN VARCHAR2) IS
8786     select enabled_flag
8787     from fnd_lookups
8788     where lookup_type = l_lookup_type --bug 3814702, use variable for lookup_type
8789     and lookup_code = p_lookup_code;
8790 
8791 
8792     l_int_contact_rec check_qa_csr%ROWTYPE;
8793     l_ext_contact_rec check_qa_csr%ROWTYPE;
8794     l_due_dates_rec check_qa_csr%ROWTYPE;
8795     l_amendments_rec check_qa_csr%ROWTYPE;
8796     l_var_usage_rec check_qa_csr%ROWTYPE;
8797     l_notifications_rec check_qa_csr%ROWTYPE;
8798     l_int_contact_valid_rec check_qa_csr%ROWTYPE;
8799     l_chk_extparty_exists_rec check_qa_csr%ROWTYPE; --ExternalPartyExists check
8800 
8801 
8802     l_int_contact_code_rec check_lookup_code_csr%ROWTYPE;
8803     l_ext_contact_code_rec check_lookup_code_csr%ROWTYPE;
8804     l_due_dates_code_rec check_lookup_code_csr%ROWTYPE;
8805     l_amendments_code_rec check_lookup_code_csr%ROWTYPE;
8806     l_var_usage_code_rec check_lookup_code_csr%ROWTYPE;
8807     l_notifications_code_rec check_lookup_code_csr%ROWTYPE;
8808     l_int_contact_valid_code_rec check_lookup_code_csr%ROWTYPE;
8809     l_chk_extparty_exists_code_rec check_lookup_code_csr%ROWTYPE; --ExternalPartyExists check
8810 
8811 
8812     l_check_int_contact_yn VARCHAR2(1);
8813     l_check_ext_contact_yn VARCHAR2(1);
8814     l_check_due_dates_yn VARCHAR2(1);
8815     l_check_amendments_yn VARCHAR2(1);
8816     l_check_var_usage_yn VARCHAR2(1);
8817     l_check_notifications_yn VARCHAR2(1);
8818     l_check_int_contact_valid_yn VARCHAR2(1);
8819     l_chk_extparty_exists_yn VARCHAR2(1); --ExternalPartyExists check
8820 
8821     l_int_contact_severity VARCHAR2(1);
8822     l_ext_contact_severity VARCHAR2(1);
8823     l_due_dates_severity VARCHAR2(1);
8824     l_amendments_severity VARCHAR2(1);
8825     l_var_usage_severity VARCHAR2(1);
8826     l_notifications_severity VARCHAR2(1);
8827     l_int_contact_valid_severity VARCHAR2(1);
8828     l_chk_extparty_exists_severity VARCHAR2(1); --ExternalPartyExists check
8829 
8830     l_error_found      VARCHAR2(1) := 'N';
8831     l_warning_found    VARCHAR2(1) := 'N';
8832     l_contract_source OKC_TEMPLATE_USAGES.CONTRACT_SOURCE_CODE%TYPE;
8833 
8834 
8835 
8836   BEGIN
8837 
8838     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8839        okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
8840        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
8841     END IF;
8842 
8843     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
8844                                               p_init_msg_list,
8845                                               '_PVT',
8846                                              x_return_status);
8847     IF p_doc_id = NULL THEN
8848        Okc_Api.Set_Message(G_APP_NAME
8849                        ,'OKC_DEL_NO_PARAMS');
8850        RAISE FND_API.G_EXC_ERROR;
8851     END IF;
8852     IF p_doc_type = NULL THEN
8853        Okc_Api.Set_Message(G_APP_NAME
8854                        ,'OKC_DEL_NO_PARAMS');
8855        RAISE FND_API.G_EXC_ERROR;
8856     END IF;
8857     IF p_mode = NULL THEN
8858        Okc_Api.Set_Message(G_APP_NAME
8859                        ,'OKC_DEL_NO_PARAMS');
8860        RAISE FND_API.G_EXC_ERROR;
8861     END IF;
8862 
8863 
8864 
8865     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
8866       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
8867     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
8868       RAISE OKC_API.G_EXCEPTION_ERROR;
8869     END IF;
8870 
8871     -- Initialize message list if p_init_msg_list is set to TRUE.
8872     IF FND_API.to_Boolean( p_init_msg_list ) THEN
8873       FND_MSG_PUB.initialize;
8874     END IF;
8875 
8876     --initialize l_qa_result_tbl
8877     l_qa_result_tbl := p_qa_result_tbl;
8878 
8879     l_start := l_qa_result_tbl.count;
8880 
8881 
8882     --first we check if the lookup_code is enabled in fnd_lookups
8883     --(1)if the lookup_code is disabled we do not perform the QA check
8884     --(2)if the lookup_code is enabled we query okc_qa_doc_lists
8885     --if the enable_qa_yn = 'N' we do not perform the QA check
8886     --otherwise (including when enable_qa_yn='Y' and when there is no row returned) we perform QA check
8887     OPEN check_lookup_code_csr(l_check_amendments);
8888     FETCH check_lookup_code_csr into l_amendments_code_rec;
8889     IF(check_lookup_code_csr%NOTFOUND OR l_amendments_code_rec.enabled_flag = 'N') THEN
8890         l_check_amendments_yn := 'N';
8891     ELSE
8892         OPEN check_qa_csr(l_check_amendments);
8893         FETCH check_qa_csr into l_amendments_rec;
8894         IF(check_qa_csr%NOTFOUND) THEN
8895             l_check_amendments_yn := 'Y';
8896             --since there is no row, we cannot get the severity_flag
8897             --default it to warning
8898             l_amendments_severity := l_qa_severity_warning;
8899         ELSE
8900             IF(l_amendments_rec.enable_qa_yn = 'N') THEN
8901                 l_check_amendments_yn := 'N';
8902             ELSE
8903                 l_check_amendments_yn := 'Y';
8904                 l_amendments_severity := l_amendments_rec.severity_flag;
8905             END IF;
8906         END IF;
8907         CLOSE check_qa_csr;
8908     END IF;
8909     CLOSE check_lookup_code_csr;
8910 
8911     OPEN check_lookup_code_csr(l_check_notifications);
8912     FETCH check_lookup_code_csr into l_notifications_code_rec;
8913     IF(check_lookup_code_csr%NOTFOUND OR l_notifications_code_rec.enabled_flag = 'N') THEN
8914         l_check_notifications_yn := 'N';
8915     ELSE
8916         OPEN check_qa_csr(l_check_notifications);
8917         FETCH check_qa_csr into l_notifications_rec;
8918         IF(check_qa_csr%NOTFOUND) THEN
8919             l_check_notifications_yn := 'Y';
8920             --since there is no row, we cannot get the severity_flag
8921             --default it to warning
8922             l_notifications_severity := l_qa_severity_warning;
8923         ELSE
8924             IF(l_notifications_rec.enable_qa_yn = 'N') THEN
8925                 l_check_notifications_yn := 'N';
8926             ELSE
8927                 l_check_notifications_yn := 'Y';
8928                 l_notifications_severity := l_notifications_rec.severity_flag;
8929             END IF;
8930         END IF;
8931         CLOSE check_qa_csr;
8932     END IF;
8933     CLOSE check_lookup_code_csr;
8934 
8935     OPEN check_lookup_code_csr(l_check_int_contact);
8936     FETCH check_lookup_code_csr into l_int_contact_code_rec;
8937     IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_code_rec.enabled_flag = 'N') THEN
8938         l_check_int_contact_yn := 'N';
8939     ELSE
8940         OPEN check_qa_csr(l_check_int_contact);
8941         FETCH check_qa_csr into l_int_contact_rec;
8942         IF(check_qa_csr%NOTFOUND) THEN
8943             l_check_int_contact_yn := 'Y';
8944             --since there is no row, we cannot get the severity_flag
8945             --default it to warning
8946             l_int_contact_severity := l_qa_severity_warning;
8947         ELSE
8948             IF(l_int_contact_rec.enable_qa_yn = 'N') THEN
8949                 l_check_int_contact_yn := 'N';
8950             ELSE
8951                 l_check_int_contact_yn := 'Y';
8952                 l_int_contact_severity := l_int_contact_rec.severity_flag;
8953             END IF;
8954         END IF;
8955         CLOSE check_qa_csr;
8956     END IF;
8957     CLOSE check_lookup_code_csr;
8958 
8959 
8960     OPEN check_lookup_code_csr(l_check_int_contact_valid);
8961     FETCH check_lookup_code_csr into l_int_contact_valid_code_rec;
8962     IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_valid_code_rec.enabled_flag = 'N') THEN
8963         l_check_int_contact_valid_yn := 'N';
8964     ELSE
8965         OPEN check_qa_csr(l_check_int_contact_valid);
8966         FETCH check_qa_csr into l_int_contact_valid_rec;
8967         IF(check_qa_csr%NOTFOUND) THEN
8968             l_check_int_contact_valid_yn := 'Y';
8969             --since there is no row, we cannot get the severity_flag
8970             --default it to warning
8971             l_int_contact_valid_severity := l_qa_severity_warning;
8972         ELSE
8973             IF(l_int_contact_valid_rec.enable_qa_yn = 'N') THEN
8974                 l_check_int_contact_valid_yn := 'N';
8975             ELSE
8976                 l_check_int_contact_valid_yn := 'Y';
8977                 l_int_contact_valid_severity := l_int_contact_valid_rec.severity_flag;
8978             END IF;
8979         END IF;
8980         CLOSE check_qa_csr;
8981     END IF;
8982     CLOSE check_lookup_code_csr;
8983 
8984 
8985     OPEN check_lookup_code_csr(l_check_ext_contact);
8986     FETCH check_lookup_code_csr into l_ext_contact_code_rec;
8987     IF(check_lookup_code_csr%NOTFOUND OR l_ext_contact_code_rec.enabled_flag = 'N') THEN
8988         l_check_ext_contact_yn := 'N';
8989     ELSE
8990         OPEN check_qa_csr(l_check_ext_contact);
8991         FETCH check_qa_csr into l_ext_contact_rec;
8992         IF(check_qa_csr%NOTFOUND) THEN
8993             l_check_ext_contact_yn := 'Y';
8994             --since there is no row, we cannot get the severity_flag
8995             --default it to warning
8996             l_ext_contact_severity := l_qa_severity_warning;
8997         ELSE
8998             IF(l_ext_contact_rec.enable_qa_yn = 'N') THEN
8999                 l_check_ext_contact_yn := 'N';
9000             ELSE
9001                 l_check_ext_contact_yn := 'Y';
9002                 l_ext_contact_severity := l_ext_contact_rec.severity_flag;
9003             END IF;
9004         END IF;
9005         CLOSE check_qa_csr;
9006     END IF;
9007     CLOSE check_lookup_code_csr;
9008 
9009     OPEN check_lookup_code_csr(l_check_due_dates);
9010     FETCH check_lookup_code_csr into l_due_dates_code_rec;
9011     IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
9012         l_check_due_dates_yn := 'N';
9013     ELSE
9014         OPEN check_qa_csr(l_check_due_dates);
9015         FETCH check_qa_csr into l_due_dates_rec;
9016         IF(check_qa_csr%NOTFOUND) THEN
9017             l_check_due_dates_yn := 'Y';
9018             --since there is no row, we cannot get the severity_flag
9019             --default it to warning
9020             l_due_dates_severity := l_qa_severity_warning;
9021         ELSE
9022             IF(l_due_dates_rec.enable_qa_yn = 'N') THEN
9023                 l_check_due_dates_yn := 'N';
9024             ELSE
9025                 l_check_due_dates_yn := 'Y';
9026                 l_due_dates_severity := l_due_dates_rec.severity_flag;
9027             END IF;
9028         END IF;
9029         CLOSE check_qa_csr;
9030     END IF;
9031     CLOSE check_lookup_code_csr;
9032 
9033 --Begin ExternalPartyExists cursors---
9034     OPEN check_lookup_code_csr(l_check_external_party_exists);
9035     FETCH check_lookup_code_csr into l_chk_extparty_exists_code_rec;
9036     IF(check_lookup_code_csr%NOTFOUND
9037      OR l_chk_extparty_exists_code_rec.enabled_flag = 'N') THEN
9038         l_chk_extparty_exists_yn := 'N';
9039     ELSE
9040         OPEN check_qa_csr(l_check_external_party_exists);
9041         FETCH check_qa_csr into l_chk_extparty_exists_rec;
9042         IF(check_qa_csr%NOTFOUND) THEN
9043             l_chk_extparty_exists_yn := 'Y';
9044             --since there is no row, we cannot get the severity_flag
9045             --default it to warning
9046             l_chk_extparty_exists_severity := l_qa_severity_warning;
9047         ELSE
9048             IF(l_chk_extparty_exists_rec.enable_qa_yn = 'N') THEN
9049                 l_chk_extparty_exists_yn  := 'N';
9050             ELSE
9051                 l_chk_extparty_exists_yn := 'Y';
9052                 l_chk_extparty_exists_severity := l_chk_extparty_exists_rec.severity_flag;
9053             END IF;
9054         END IF;
9055         CLOSE check_qa_csr;
9056     END IF;
9057     CLOSE check_lookup_code_csr;
9058 
9059 --End ExternalPartyExists cursors--
9060      /*   IF(p_mode = G_AMEND_QA) THEN
9061         OPEN del_cur FOR
9062       select *
9063             from okc_deliverables
9064             where business_document_type = p_doc_type
9065             and business_document_id = p_doc_id
9066             and business_document_version = -99
9067             and deliverable_type in (select deltypes.deliverable_type_code from okc_bus_doc_types_b doctypes,
9068                                         --okc_del_bus_doc_combxns deltypes
9069                 okc_deliverable_types_b deltypes
9070                                         where doctypes.document_type=p_doc_type
9071                                         and doctypes.document_type_class = deltypes.document_type_class)
9072             and amendment_operation is not null;
9073 
9074 
9075 
9076         ELSE
9077 */
9078         --to fix bug 3236092
9079         --I am commenting out the dynamic query
9080         --so even in Amend mode we check all the deliverables belong to that bus doc
9081         --this is because even if the deliverable is untouched the bus doc's data might be
9082         --changed so the deliverable could still fail the QA check
9083 
9084 --Repository Change: changed cursor to look at okc_deliverable_types_b
9085     -- updated cursor for bug#4069955
9086             OPEN del_cur FOR
9087             select *
9088             from okc_deliverables
9089             where business_document_type = p_doc_type
9090             and business_document_id = p_doc_id
9091             and business_document_version = -99
9092             and (amendment_operation is NULL OR amendment_operation <> 'DELETED')
9093             and (summary_amend_operation_code is NULL OR summary_amend_operation_code <> 'DELETED')
9094             and deliverable_type in (select deltypes.deliverable_type_code
9095                                      from okc_bus_doc_types_b doctypes,
9096                                      okc_del_bus_doc_combxns deltypes
9097                                      where doctypes.document_type=p_doc_type
9098                                      and doctypes.document_type_class = deltypes.document_type_class);
9099 
9100 
9101    -- END IF;
9102 
9103     LOOP
9104         FETCH del_cur INTO del_rec;
9105 
9106 
9107         EXIT WHEN del_cur%NOTFOUND;
9108 
9109         IF(l_check_amendments_yn='Y' and p_mode = G_AMEND_QA) THEN
9110             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9111                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking amendments');
9112             END IF;
9113             check_amendments( del_rec  => del_rec,
9114                                     p_severity => l_amendments_severity,
9115                                     px_qa_result_tbl  => l_qa_result_tbl,
9116                                     x_return_status   => l_return_status);
9117             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9118                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9119             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9120                 RAISE FND_API.G_EXC_ERROR ;
9121             END IF;
9122 
9123             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9124                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking amendments');
9125             END IF;
9126         END IF;
9127 
9128         IF(l_check_notifications_yn='Y') THEN
9129             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9130                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking notifications');
9131             END IF;
9132             check_notifications( del_rec  => del_rec,
9133                                     p_severity => l_notifications_severity,
9134                                     px_qa_result_tbl  => l_qa_result_tbl,
9135                                     x_return_status   => l_return_status);
9136             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9137                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9138             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9139                 RAISE FND_API.G_EXC_ERROR ;
9140             END IF;
9141 
9142             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9143                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking notifications');
9144             END IF;
9145         END IF;
9146 
9147         IF(l_check_int_contact_yn='Y') THEN
9148             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9149                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts');
9150             END IF;
9151             check_internal_contacts( del_rec  => del_rec,
9152                                     p_severity => l_int_contact_severity,
9153                                     px_qa_result_tbl  => l_qa_result_tbl,
9154                                     x_return_status   => l_return_status);
9155             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9156                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9157             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9158                 RAISE FND_API.G_EXC_ERROR ;
9159             END IF;
9160 
9161             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9162                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts');
9163             END IF;
9164         END IF;
9165 
9166         --bug 3686334
9167         --added call to check_internal_contact_valid
9168         IF(l_check_int_contact_valid_yn='Y') THEN
9169             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9170                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts valid');
9171             END IF;
9172             check_internal_contacts_valid( del_rec  => del_rec,
9173                                     p_severity => l_int_contact_valid_severity,
9174                                     px_qa_result_tbl  => l_qa_result_tbl,
9175                                     x_return_status   => l_return_status);
9176             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9177                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9178             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9179                 RAISE FND_API.G_EXC_ERROR ;
9180             END IF;
9181 
9182             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9183                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts valid');
9184             END IF;
9185         END IF;
9186 
9187 
9188 ------------External Party Exists check---------------
9189         IF (l_chk_extparty_exists_yn = 'Y') THEN
9190       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9191            FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
9192         ||l_api_name,'start checking external party exists');
9193       END IF;
9194       check_external_party_exists(del_rec => del_rec,
9195                                 p_severity => l_chk_extparty_exists_severity,
9196               px_qa_result_tbl => l_qa_result_tbl,
9197               x_return_status => l_return_status);
9198 
9199          IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9200              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9201          ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9202              RAISE FND_API.G_EXC_ERROR ;
9203          END IF;
9204 
9205          IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9206              FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
9207        ||l_api_name,'finished checking external party exists');
9208          END IF;
9209         END IF;
9210 
9211 ------------End External Party Exists check------------
9212 
9213         IF(l_check_ext_contact_yn='Y') THEN
9214             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9215                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking external contacts');
9216             END IF;
9217             check_external_contacts( del_rec  => del_rec,
9218                                     p_severity =>l_ext_contact_severity,
9219                                     px_qa_result_tbl  => l_qa_result_tbl,
9220                                     x_return_status   => l_return_status);
9221             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9222                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9223             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9224                 RAISE FND_API.G_EXC_ERROR ;
9225             END IF;
9226             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9227                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking external contacts');
9228             END IF;
9229         END IF;
9230 
9231         IF(l_check_due_dates_yn='Y') THEN
9232             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9233                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking due dates');
9234             END IF;
9235             check_due_dates( del_rec  => del_rec,
9236                                     p_severity => l_due_dates_severity,
9237                                     p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
9238                                     px_qa_result_tbl  => l_qa_result_tbl,
9239                                     x_return_status   => l_return_status);
9240             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9241                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9242             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9243                 RAISE FND_API.G_EXC_ERROR ;
9244             END IF;
9245             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9246                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking due dates');
9247             END IF;
9248         END IF;
9249 
9250     END LOOP;
9251 
9252     -- bug# 4118095 check the doc source
9253     l_contract_source := OKC_TERMS_UTIL_GRP.Get_Contract_Source_Code
9254                                 (p_document_type => p_doc_type,
9255                                  p_document_id => p_doc_id );
9256 
9257     IF l_contract_source = 'STRUCTURED' THEN
9258 
9259     --Bug Fix for 3249177
9260     --add an additional check to see if any article has variables defined for deliverables
9261     OPEN check_lookup_code_csr(l_check_var_usage);
9262     FETCH check_lookup_code_csr into l_var_usage_code_rec;
9263     IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
9264         l_check_var_usage_yn := 'N';
9265     ELSE
9266         OPEN check_qa_csr(l_check_var_usage);
9267         FETCH check_qa_csr into l_var_usage_rec;
9268         IF(check_qa_csr%NOTFOUND) THEN
9269             l_check_var_usage_yn := 'Y';
9270             --since there is no row, we cannot get the severity_flag
9271             --default it to warning
9272             l_var_usage_severity := l_qa_severity_warning;
9273         ELSE
9274             IF(l_var_usage_rec.enable_qa_yn = 'N') THEN
9275                 l_check_var_usage_yn := 'N';
9276             ELSE
9277                 l_check_var_usage_yn := 'Y';
9278                 l_var_usage_severity := l_var_usage_rec.severity_flag;
9279             END IF;
9280         END IF;
9281         CLOSE check_qa_csr;
9282     END IF;
9283     CLOSE check_lookup_code_csr;
9284 
9285     IF(l_check_var_usage_yn = 'Y') THEN
9286 
9287         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9288                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking variable usage');
9289         END IF;
9290 
9291             check_deliverables_var_usage(p_severity => l_var_usage_severity,
9292                                     p_bus_doc_id => p_doc_id,
9293                                     p_bus_doc_type => p_doc_type,
9294                                     px_qa_result_tbl  => l_qa_result_tbl,
9295                                     x_return_status   => l_return_status);
9296 
9297             IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9298                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9299             ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9300                 RAISE FND_API.G_EXC_ERROR ;
9301             END IF;
9302             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9303                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking variable usage');
9304             END IF;
9305 
9306     END IF;
9307     END IF; -- l_contract_source = 'STRUCTURED' THEN
9308 
9309     --mass update common attributes
9310     l_end := l_qa_result_tbl.count;
9311 
9312     IF (l_end > l_start) THEN
9313         --We found some error or warning
9314         FOR i IN (l_start+1)..l_end
9315         LOOP
9316             l_qa_result_tbl(i).document_type := p_doc_type;
9317             l_qa_result_tbl(i).document_id := p_doc_id;
9318             l_qa_result_tbl(i).error_record_type := G_DLV_QA_TYPE;
9319 
9320             l_qa_result_tbl(i).creation_date := sysdate;
9321 
9322             --if the error is due to check_deliverable_var_usage
9323             --the section_name should be the article's section name
9324             --otherwise it should be 'DELIVERABLE'
9325             IF l_qa_result_tbl(i).article_id IS NULL THEN
9326                 l_qa_result_tbl(i).section_name := G_DLV_QA_TYPE;
9327             END IF;
9328             --- check if any errors are there.
9329             IF l_qa_result_tbl(i).error_severity = G_QA_STS_ERROR THEN
9330                 l_error_found := 'Y';
9331             END IF;
9332             --- check if any errors are there.
9333             IF l_qa_result_tbl(i).error_severity = G_QA_STS_WARNING THEN
9334                 l_warning_found := 'Y';
9335             END IF;
9336 
9337         END LOOP;
9338 
9339         --now get the qa_return_status
9340         --if there is a record of type "error" found, return "E"
9341         --otherwise if there is a record of type "warning" found, return "W"
9342         --else return "S"
9343         l_qa_return_status := G_QA_STS_SUCCESS;
9344         IF l_error_found = 'Y' THEN
9345            l_qa_return_status := G_QA_STS_ERROR;
9346         ELSIF l_warning_found ='Y' THEN
9347            l_qa_return_status := G_QA_STS_WARNING;
9348         END IF;
9349 
9350     END IF;
9351 
9352      IF del_cur%ISOPEN THEN
9353        CLOSE del_cur;
9354      END IF;
9355 
9356 
9357 
9358     p_qa_result_tbl := l_qa_result_tbl;
9359     x_return_status := l_return_status;
9360     x_qa_return_status := l_qa_return_status;
9361 
9362 
9363     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9364         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa');
9365     END IF;
9366 
9367      EXCEPTION
9368      WHEN FND_API.G_EXC_ERROR THEN
9369 
9370        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9371         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');
9372        END IF;
9373        --close cursors
9374        IF (del_cur%ISOPEN) THEN
9375           CLOSE del_cur ;
9376        END IF;
9377 
9378        IF (check_qa_csr%ISOPEN) THEN
9379         CLOSE check_qa_csr;
9380        END IF;
9381 
9382        IF (check_lookup_code_csr%ISOPEN) THEN
9383         CLOSE check_lookup_code_csr;
9384        END IF;
9385 
9386        x_return_status := G_RET_STS_ERROR;
9387        FND_MSG_PUB.Count_And_Get(
9388         p_count =>  x_msg_count,
9389         p_data  =>  x_msg_data
9390         );
9391 
9392     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9393 
9394        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9395         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');
9396        END IF;
9397        --close cursors
9398        IF (del_cur%ISOPEN) THEN
9399           CLOSE del_cur ;
9400        END IF;
9401 
9402        IF (check_qa_csr%ISOPEN) THEN
9403         CLOSE check_qa_csr;
9404        END IF;
9405 
9406        IF (check_lookup_code_csr%ISOPEN) THEN
9407         CLOSE check_lookup_code_csr;
9408        END IF;
9409 
9410 
9411        x_return_status := G_RET_STS_UNEXP_ERROR;
9412        FND_MSG_PUB.Count_And_Get(
9413         p_count =>  x_msg_count,
9414         p_data  =>  x_msg_data
9415         );
9416 
9417     WHEN OTHERS THEN
9418        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9419         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');
9420        END IF;
9421        --close cursors
9422        IF (del_cur%ISOPEN) THEN
9423           CLOSE del_cur ;
9424        END IF;
9425 
9426        IF (check_qa_csr%ISOPEN) THEN
9427         CLOSE check_qa_csr;
9428        END IF;
9429 
9430        IF (check_lookup_code_csr%ISOPEN) THEN
9431         CLOSE check_lookup_code_csr;
9432        END IF;
9433 
9434       x_return_status := G_RET_STS_UNEXP_ERROR;
9435       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9436       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9437       END IF;
9438       FND_MSG_PUB.Count_And_Get(
9439         p_count =>  x_msg_count,
9440         p_data  =>  x_msg_data
9441         );
9442 
9443   END validate_deliverable_for_qa;
9444 
9445 
9446 
9447 
9448 
9449   PROCEDURE delete_del_status_hist_attach(
9450     p_api_version  IN NUMBER,
9451     p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
9452     p_deliverable_id IN NUMBER,
9453     p_bus_doc_id IN NUMBER,
9454     p_bus_doc_version IN NUMBER,
9455     p_bus_doc_type IN VARCHAR2,
9456     x_msg_data   OUT NOCOPY  VARCHAR2,
9457     x_msg_count  OUT NOCOPY  NUMBER,
9458     x_return_status  OUT NOCOPY  VARCHAR2)
9459   IS
9460 
9461   l_api_version                  CONSTANT NUMBER := 1;
9462   l_api_name                     CONSTANT VARCHAR2(30) := 'validate_deliverable';
9463   l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9464 
9465 
9466 
9467   BEGIN
9468 
9469     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9470        okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
9471        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
9472     END IF;
9473 
9474     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
9475                                               p_init_msg_list,
9476                                               '_PVT',
9477                                              x_return_status);
9478 
9479 
9480     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
9481       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
9482     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
9483       RAISE OKC_API.G_EXCEPTION_ERROR;
9484     END IF;
9485 
9486 
9487 
9488     -- delete deliverables status history
9489     DELETE FROM okc_del_status_history
9490     WHERE deliverable_id = p_deliverable_id;
9491     -- delete attachments if any
9492     delete_attachments (
9493                     p_entity_name => G_ENTITY_NAME
9494                     ,p_pk1_value    =>  p_deliverable_id
9495                     ,x_result       =>  l_return_status);
9496 
9497     x_return_status := l_return_status;
9498 
9499     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9500         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach');
9501     END IF;
9502 
9503   EXCEPTION
9504      WHEN FND_API.G_EXC_ERROR THEN
9505        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9506         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');
9507        END IF;
9508 
9509        x_return_status := G_RET_STS_ERROR;
9510        FND_MSG_PUB.Count_And_Get(
9511         p_count =>  x_msg_count,
9512         p_data  =>  x_msg_data
9513         );
9514 
9515     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9516        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9517         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');
9518        END IF;
9519 
9520        x_return_status := G_RET_STS_UNEXP_ERROR;
9521        FND_MSG_PUB.Count_And_Get(
9522         p_count =>  x_msg_count,
9523         p_data  =>  x_msg_data
9524         );
9525 
9526     WHEN OTHERS THEN
9527        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9528         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');
9529        END IF;
9530 
9531       x_return_status := G_RET_STS_UNEXP_ERROR;
9532       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9533       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9534       END IF;
9535       FND_MSG_PUB.Count_And_Get(
9536         p_count =>  x_msg_count,
9537         p_data  =>  x_msg_data
9538         );
9539   END delete_del_status_hist_attach;
9540 
9541 FUNCTION get_ui_bus_doc_event_text(p_event_name IN VARCHAR2,
9542                                     p_before_after IN VARCHAR2) RETURN VARCHAR2 IS
9543 BEGIN
9544   fnd_message.clear;
9545   if p_before_after = 'B' then
9546     fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_BEFORE_BUS_DOC_EVENT');
9547   else
9548     fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_AFTER_BUS_DOC_EVENT');
9549   end if;
9550   fnd_message.set_token(TOKEN => 'EVENT',VALUE => p_event_name);
9551   return fnd_message.get;
9552 END get_ui_bus_doc_event_text;
9553 
9554 /*
9555 Add as part of fix for bug#3458149
9556 Checks Deliverable_Status_History table and returns 'Y' if the Status of a Deliverable was NOT changed by
9557 user since the Deliverable was first resolved, else returns 'N'
9558 */
9559 Function delStatusUnchanged(p_del_ID IN OKC_DELIVERABLES.deliverable_id%TYPE) RETURN VARCHAR2 IS
9560  l_open_count NUMBER ;
9561  l_inactive_count NUMBER ;
9562  l_others_count NUMBER ;
9563 
9564  CURSOR hist_cur (delid NUMBER) IS
9565  SELECT deliverable_status
9566  FROM okc_del_status_history
9567  where deliverable_id = delid;
9568 
9569  hist_rec   hist_cur%ROWTYPE;
9570  l_api_name      CONSTANT VARCHAR2(30) :='delStatusUnchanged';
9571 
9572 Begin
9573 
9574 
9575     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9576         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside delStatusUnchanged.');
9577     END IF;
9578 
9579   -- bug#4137831 initialize variables outside the loop
9580    l_open_count := 0;
9581    l_inactive_count := 0;
9582    l_others_count :=0;
9583   FOR hist_rec IN hist_cur(p_del_id) LOOP
9584 
9585    IF hist_rec.deliverable_status = 'OPEN' THEN
9586     l_open_count := l_open_count+1;
9587    ELSIF hist_rec.deliverable_status = 'INACTIVE' THEN
9588     l_inactive_count := l_inactive_count+1;
9589    ELSIF (hist_rec.deliverable_status <> 'OPEN' OR
9590           hist_rec.deliverable_status <> 'INACTIVE') THEN
9591     l_others_count := l_others_count+1;
9592    END IF;
9593   END LOOP;
9594 
9595   If hist_cur%ISOPEN then
9596     CLOSE hist_cur;
9597   End If;
9598     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9599         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Open status count: '||to_char(l_open_count));
9600         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inactive status count: '||to_char(l_inactive_count));
9601         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Others status count: '||to_char(l_others_count));
9602     END IF;
9603 
9604   IF (l_open_count < 1 OR l_open_count = 1   ) AND
9605      (l_inactive_count < 1 OR l_inactive_count = 1) AND
9606      (l_others_count = 0) THEN
9607     RETURN 'Y';
9608   Else
9609     RETURN 'N';
9610   End If;
9611 
9612   EXCEPTION
9613    WHEN OTHERS THEN
9614     IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9615        FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'delStatusUnchanged','102:Leaving delStatusUnchanged with Exception');
9616     END IF;
9617     If hist_cur%ISOPEN then
9618      CLOSE hist_cur;
9619     End If;
9620 RETURN 'N';
9621 
9622 End delStatusUnchanged;
9623 
9624 
9625 
9626    /*** This API deletes a given set of deliverables, attachments
9627    and status change history for a busdoc. Used to delete only the instances
9628    leaving the definition as it is. Called from update_deliverables group API ***/
9629     PROCEDURE delete_del_instances(
9630     p_api_version  IN NUMBER,
9631     p_init_msg_list IN VARCHAR2,
9632     p_doc_id    IN NUMBER,
9633     p_doc_type  IN  VARCHAR2,
9634     p_doc_version IN NUMBER DEFAULT NULL,
9635     p_Conditional_Delete_Flag IN VARCHAR2 DEFAULT 'N',
9636     p_delid_tab    IN OKC_DELIVERABLE_PROCESS_PVT.delIdTabType,
9637     x_msg_data   OUT NOCOPY  VARCHAR2,
9638     x_msg_count  OUT NOCOPY  NUMBER,
9639     x_return_status  OUT NOCOPY  VARCHAR2)
9640     IS
9641     l_del_id   NUMBER;
9642     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
9643     l_result VARCHAR2(1);
9644     l_api_name      CONSTANT VARCHAR2(30) :='delete_del_instances';
9645 
9646     l_deleteInstances VARCHAR2(1) := 'Y';
9647 
9648     BEGIN
9649 
9650        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9651         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
9652        END IF;
9653         FOR i IN p_delid_tab.FIRST..p_delid_tab.LAST LOOP
9654             l_del_id := p_delid_tab(i);
9655 
9656             -- fix for bug#3458149 do not delete history if deliverables
9657             -- changed status from OPEN status
9658             IF (p_Conditional_Delete_Flag = 'Y') then
9659                If (delStatusUnchanged(p_Del_id => l_del_id) = 'Y') then
9660                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9661                             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delStatusUnchanged is Y');
9662                     END IF;
9663            l_deleteInstances := 'Y';
9664          Else
9665            l_deleteInstances := 'N';
9666          End If;
9667       Else
9668            l_deleteInstances := 'Y';
9669       End If;
9670 
9671 
9672        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9673         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_deleteInstances:'||l_deleteInstances);
9674        END IF;
9675             IF (l_deleteInstances = 'Y') then
9676                 -- delete deliverables status history
9677                 DELETE FROM okc_del_status_history
9678                 WHERE deliverable_id = l_del_id;
9679                 -- delete attachments if any
9680                 delete_attachments (
9681                     p_entity_name => G_ENTITY_NAME
9682                     ,p_pk1_value    =>  l_del_id
9683                     ,x_result       =>  l_result);
9684                     IF l_result = 'S' THEN
9685                         -- delete deliverables
9686                         DELETE FROM okc_deliverables
9687                         WHERE deliverable_id = l_del_id;
9688                     END IF;
9689                 x_return_status := l_return_status;
9690        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9691         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deleting status history for deliverable id:'||to_char(l_del_id));
9692        END IF;
9693             END IF;
9694 
9695 
9696         END LOOP;
9697 
9698        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9699         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
9700        END IF;
9701 
9702     EXCEPTION
9703     WHEN OTHERS THEN
9704         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9705           FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102:Leaving delete_del_instances with Exception');
9706         END IF;
9707         x_return_status := G_RET_STS_UNEXP_ERROR;
9708         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9709        FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9710         END IF;
9711         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
9712                                   p_data  =>  x_msg_data);
9713     END delete_del_instances;
9714 
9715 
9716     /**Invoked From: OKC_TERMS_UTIL_GRP.get_document_deviations
9717     1.  This function returns type of deliverables existing on a Business Document
9718         for a given version. Invoked by OKC_TERMS_UTIL_GRP.get_document_deviations.
9719     2.  Select all deliverables for the Business Document. If deliverables exist then
9720     a.  Check each deliverable type
9721         i.  If only contractual deliverables exist then return CONTRACTUAL
9722         ii. If only internal deliverables exist then return INTERNAL
9723         iii.If both contractual and internal deliverables exist then return
9724             CONTRACTUAL_AND_INTERNAL
9725     3.  If no deliverables exist then return NONE**/
9726 
9727 /*** added new signature bug#3192512**/
9728 
9729     FUNCTION deliverables_exist(
9730         p_api_version      IN  NUMBER,
9731         p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE,
9732         x_return_status    OUT NOCOPY VARCHAR2,
9733         x_msg_data         OUT NOCOPY VARCHAR2,
9734         x_msg_count        OUT NOCOPY NUMBER,
9735         p_doctype         IN  VARCHAR2,
9736         p_docid           IN  NUMBER
9737         ) RETURN VARCHAR2
9738     IS
9739     -- updated cursor for bug#4069955
9740     CURSOR del_cur IS
9741     SELECT
9742      del.deliverable_type
9743     ,delType.internal_flag
9744     FROM
9745      okc_deliverables del
9746     ,okc_deliverable_types_b delType
9747     WHERE del.business_document_id = p_docid
9748     AND   del.business_document_type = p_doctype
9749     AND   del.business_document_version = -99
9750     AND   NVL(del.amendment_operation,'NONE') <> 'DELETED'
9751     AND   NVL(del.summary_amend_operation_code,'NONE') <> 'DELETED'
9752     AND   delType.deliverable_type_code = del.deliverable_type;
9753 
9754     l_del_rec  del_cur%ROWTYPE;
9755     l_api_name         CONSTANT VARCHAR2(30) := 'deliverables_exist';
9756     l_exists    VARCHAR2(60):= 'NONE';
9757     l_contractual   okc_deliverables.deliverable_type%TYPE;
9758     l_internal      okc_deliverables.deliverable_type%TYPE;
9759     l_sourcing      okc_deliverables.deliverable_type%TYPE;
9760 
9761     BEGIN
9762 
9763     --  Initialize API return status to success
9764     x_return_status := OKC_API.G_RET_STS_SUCCESS;
9765 
9766     FOR del_rec IN del_cur LOOP
9767        If del_rec.internal_flag = 'Y' then
9768       l_internal := del_rec.deliverable_type;
9769     Else
9770          IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
9771            l_contractual := del_rec.deliverable_type;
9772          ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
9773            l_sourcing := del_rec.deliverable_type;
9774          END IF;
9775     End If;
9776     END LOOP;
9777 
9778         IF l_contractual is not null THEN
9779            l_exists := 'CONTRACTUAL';
9780            IF l_internal is not null THEN
9781              l_exists := 'CONTRACTUAL_AND_INTERNAL';
9782                IF l_sourcing is not null THEN
9783                  l_exists:= 'ALL';
9784                END IF;
9785            ELSE
9786                IF l_sourcing is not null THEN
9787                  l_exists:= 'CONTRACTUAL_AND_SOURCING';
9788                END IF;
9789 
9790            END IF;
9791         ELSE
9792            IF l_internal is not null THEN
9793              l_exists := 'INTERNAL';
9794                IF l_sourcing is not null THEN
9795                  l_exists:= 'SOURCING_AND_INTERNAL';
9796                END IF;
9797            ELSE
9798                IF l_sourcing is not null THEN
9799                  l_exists:= 'SOURCING';
9800                ELSE
9801                  l_exists := 'NONE';
9802                END IF;
9803            END IF;
9804         END IF;
9805 
9806         RETURN(l_exists);
9807    EXCEPTION
9808       WHEN OTHERS THEN
9809          IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9810            FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_exist because of EXCEPTION: '||sqlerrm);
9811          END IF;
9812 
9813          IF del_cur%ISOPEN THEN
9814            CLOSE del_cur;
9815          END IF;
9816          x_return_status := G_RET_STS_UNEXP_ERROR ;
9817          IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9818            FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9819          END IF;
9820          FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
9821          , p_count => x_msg_count
9822          , p_data => x_msg_data );
9823 
9824          RETURN null;
9825    END; -- deliverables_exist
9826 
9827 
9828 
9829 
9830     PROCEDURE delete_deliverable (
9831     p_api_version  IN NUMBER,
9832     p_init_msg_list IN VARCHAR2,
9833     p_del_id    IN NUMBER,
9834     x_msg_data   OUT NOCOPY  VARCHAR2,
9835     x_msg_count  OUT NOCOPY  NUMBER,
9836     x_return_status  OUT NOCOPY  VARCHAR2)
9837     IS
9838 
9839     l_result   VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9840     l_api_name VARCHAR2(30) :='delete_deliverable';
9841 
9842     BEGIN
9843 
9844        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9845         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));
9846        END IF;
9847                 -- delete deliverables status history
9848                 DELETE FROM okc_del_status_history
9849                 WHERE deliverable_id = p_del_id;
9850                 -- delete attachments if any
9851                 delete_attachments (
9852                     p_entity_name => G_ENTITY_NAME
9853                     ,p_pk1_value    =>  p_del_id
9854                     ,x_result       =>  l_result);
9855                     IF l_result = 'S' THEN
9856                         -- delete deliverables
9857                         DELETE FROM okc_deliverables
9858                         WHERE deliverable_id = p_del_id;
9859                     END IF;
9860             x_return_status := l_result;
9861        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9862         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable');
9863        END IF;
9864 
9865     EXCEPTION
9866     WHEN FND_API.G_EXC_ERROR THEN
9867        IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9868         FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_ERROR');
9869        END IF;
9870     x_return_status := G_RET_STS_ERROR;
9871       FND_MSG_PUB.Count_And_Get(
9872         p_count =>  x_msg_count,
9873         p_data  =>  x_msg_data
9874         );
9875 
9876     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9877        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9878         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');
9879        END IF;
9880     x_return_status := G_RET_STS_UNEXP_ERROR;
9881       FND_MSG_PUB.Count_And_Get(
9882         p_count =>  x_msg_count,
9883         p_data  =>  x_msg_data
9884         );
9885 
9886     WHEN OTHERS THEN
9887        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9888         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');
9889        END IF;
9890     x_return_status := G_RET_STS_UNEXP_ERROR;
9891       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9892       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9893       END IF;
9894       FND_MSG_PUB.Count_And_Get(
9895         p_count =>  x_msg_count,
9896         p_data  =>  x_msg_data
9897         );
9898 
9899     END delete_deliverable;
9900 
9901     /*** This procedure will delete all deliverables that have been
9902     created by applying a particular template on a busdoc.
9903     It selects all deliverables which have original_deliverable_id
9904     belonging to the p_template_id and deletes them from the busdoc.
9905     Parameter Details:
9906     p_doc_id :       Business document Id
9907     p_doc_type :     Business document type
9908     ***/
9909     PROCEDURE delete_template_deliverables (
9910     p_api_version       IN  NUMBER,
9911     p_init_msg_list     IN VARCHAR2,
9912     p_doc_id            IN  NUMBER,
9913     p_doc_type          IN VARCHAR2,
9914     x_msg_data      OUT NOCOPY  VARCHAR2,
9915     x_msg_count     OUT NOCOPY  NUMBER,
9916     x_return_status OUT NOCOPY  VARCHAR2)
9917     IS
9918 -- bug#4075168 changed the select "and original_deliverable_id IN ( select original_deliverable_id"
9919     CURSOR del_cur IS
9920     select deliverable_id
9921     from okc_deliverables
9922     where business_document_id = p_doc_id
9923     and business_document_type = p_doc_type
9924     and business_document_version = -99
9925     and original_deliverable_id IN (
9926     select original_deliverable_id
9927     from okc_deliverables
9928     where business_document_type = 'TEMPLATE');
9929 
9930     TYPE delIdTabType IS TABLE OF NUMBER;
9931     delIdTab    delIdTabType;
9932     l_result  VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
9933     l_api_name      CONSTANT VARCHAR2(30) :='delete_template_deliverables';
9934     BEGIN
9935        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9936           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
9937        END IF;
9938         OPEN del_cur;
9939         FETCH del_cur BULK COLLECT INTO delIdTab;
9940         -- bug#3188413 check count before loop
9941         IF delIdTab.COUNT > 0 THEN
9942         FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
9943             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9944                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delId is:'||to_char(delIdTab(i)));
9945             END IF;
9946                 -- delete attachments if any
9947                 delete_attachments (
9948                     p_entity_name => G_ENTITY_NAME
9949                     ,p_pk1_value    =>  delIdTab(i)
9950                     ,x_result       =>  l_result);
9951                     IF l_result <> 'S' THEN
9952                         EXIT;
9953                     END IF;
9954         END LOOP;
9955         IF l_result = 'S' THEN
9956                 FORALL i IN delIdTab.FIRST..delIdTab.LAST
9957                 DELETE FROM okc_deliverables
9958                 WHERE deliverable_id = delIdTab(i);
9959         END IF;
9960         END IF;-- delIdTab.COUNT
9961         IF del_cur %ISOPEN THEN
9962           CLOSE del_cur ;
9963         END IF;
9964         x_return_status := l_result;
9965        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9966           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
9967        END IF;
9968 
9969     EXCEPTION
9970     WHEN OTHERS THEN
9971         IF del_cur %ISOPEN THEN
9972           CLOSE del_cur ;
9973         END IF;
9974        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9975         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');
9976        END IF;
9977     x_return_status := G_RET_STS_UNEXP_ERROR;
9978       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9979       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9980       END IF;
9981       FND_MSG_PUB.Count_And_Get(
9982         p_count =>  x_msg_count,
9983         p_data  =>  x_msg_data
9984         );
9985 
9986     END delete_template_deliverables;
9987 
9988 
9989 
9990     /**Invoked From: OKC_TERMS_UTIL_GRP.is_deliverable_amended
9991     1.  This function returns type of deliverables amended on a Business Document
9992     2.  Select all deliverables definitions (-99 version) for the Business Document.
9993     If deliverables exist then
9994     a.  Check each deliverable type
9995         i.  If only contractual deliverables amended then return CONTRACTUAL
9996         ii. If only internal deliverables amended then return INTERNAL
9997         iii.If both contractual and internal deliverables amended then return
9998             CONTRACTUAL_AND_INTERNAL
9999         iv.If both contractual and sourcing deliverables amended then return
10000             CONTRACTUAL_AND_SOURCING
10001         v.If both sourcing and internal deliverables amended then return
10002             SOURCING_AND_INTERNAL
10003         vi.  If sourcing deliverables are amended then return SOURCING
10004         vii.  If all deliverables are amended then return ALL
10005     3.  If no deliverables amended then return NONE
10006     4.  If error return null**/
10007 
10008 /*** added new signature bug#3192512**/
10009 
10010     FUNCTION deliverables_amended(
10011         p_api_version      IN  NUMBER,
10012         p_init_msg_list    IN  VARCHAR2 :=  FND_API.G_FALSE,
10013 
10014         x_return_status    OUT NOCOPY VARCHAR2,
10015         x_msg_data         OUT NOCOPY VARCHAR2,
10016         x_msg_count        OUT NOCOPY NUMBER,
10017 
10018         p_doctype  IN  VARCHAR2,
10019         p_docid IN NUMBER
10020         )
10021     RETURN VARCHAR2 IS
10022     --do not consider internal deliverables inamendments.
10023     -- updated the cursor to filter internal deliverables
10024     -- updated cursor for bug#4069955
10025     CURSOR del_cur IS
10026     SELECT
10027      del.amendment_operation
10028     ,del.deliverable_type
10029     ,delType.internal_flag
10030     FROM
10031      okc_deliverables del
10032     ,okc_deliverable_types_b delType
10033     WHERE del.business_document_id = p_docid
10034     AND   del.business_document_type = p_doctype
10035     AND   del.business_document_version = -99
10036     AND   del.summary_amend_operation_code is not null
10037     --AND   deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
10038     AND   del.deliverable_type       = delType.deliverable_type_code
10039     AND   delType.internal_flag = 'N';
10040 
10041     l_del_rec  del_cur%ROWTYPE;
10042     l_amended    VARCHAR2(30):= 'NONE';
10043     l_contractual   okc_deliverables.deliverable_type%TYPE;
10044     l_internal      okc_deliverables.deliverable_type%TYPE;
10045     l_sourcing      okc_deliverables.deliverable_type%TYPE;
10046     l_api_name         CONSTANT VARCHAR2(30) := 'deliverables_amended';
10047 
10048     BEGIN
10049 
10050      --  Initialize API return status to success
10051      x_return_status := OKC_API.G_RET_STS_SUCCESS;
10052 
10053 
10054            FOR del_rec IN del_cur LOOP
10055               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10056                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.deliverables_amended :'||del_rec.deliverable_type);
10057               END IF;
10058 
10059          --Repository change to look at internal_flag in okc_deliverable_types_b
10060         If (del_rec.internal_flag = 'Y') then
10061           l_internal := del_rec.deliverable_type;
10062         Else
10063                IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
10064                  l_contractual := del_rec.deliverable_type;
10065                ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
10066                  l_sourcing := del_rec.deliverable_type;
10067       END IF;
10068               END IF;
10069 
10070            END LOOP;
10071 
10072            IF l_contractual is not null THEN
10073               l_amended := 'CONTRACTUAL';
10074                 IF l_internal is not null THEN
10075                     l_amended:= 'CONTRACTUAL_AND_INTERNAL';
10076                         IF l_sourcing is not null THEN
10077                            l_amended:= 'ALL';
10078                         END IF;
10079                 ELSIF l_internal is null THEN
10080                     IF l_sourcing is not null THEN
10081                        l_amended:= 'SOURCING_AND_CONTRACTUAL';
10082                     END IF;
10083                 END IF;
10084             ELSE
10085                 IF l_internal is not null THEN
10086                    l_amended:= 'INTERNAL';
10087                        IF l_sourcing is not null THEN
10088                           l_amended:= 'SOURCING_AND_INTERNAL';
10089                        END IF;
10090                 ELSE
10091                    IF l_sourcing is not null THEN
10092                       l_amended:= 'SOURCING';
10093                    ELSE
10094                       l_amended:= 'NONE';
10095                    END IF;
10096                 END IF;
10097             END IF;
10098 
10099 
10100             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10101                FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_amended is :'||l_amended);
10102             END IF;
10103             RETURN(l_amended);
10104 
10105    EXCEPTION
10106     WHEN OTHERS THEN
10107            IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10108                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_amended because of EXCEPTION: '||sqlerrm);
10109            END IF;
10110 
10111               IF del_cur%ISOPEN THEN
10112                  CLOSE del_cur;
10113               END IF;
10114 
10115               x_return_status := G_RET_STS_UNEXP_ERROR ;
10116 
10117               IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
10118                    FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
10119               END IF;
10120               FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
10121                  , p_count => x_msg_count
10122                  , p_data => x_msg_data );
10123 
10124               RETURN null;
10125 
10126     END; -- deliverables_amended
10127 
10128 -- This function returns the message text for the print due date message name
10129 -- bug#3272824 resolves tranlation issues with due date messages.
10130 FUNCTION getDueDateMsgText(
10131 p_relative_st_date_event_id    NUMBER
10132 ,p_relative_end_date_event_id   NUMBER
10133 ,p_relative_st_date_duration    NUMBER
10134 ,p_relative_end_date_duration    NUMBER
10135 ,p_repeating_day_of_week        VARCHAR2
10136 ,p_repeating_day_of_month       VARCHAR2
10137 ,p_repeating_duration           NUMBER
10138 ,p_print_due_date_msg_name      VARCHAR2
10139 ,p_fixed_start_date             DATE
10140 ,p_fixed_end_date                DATE
10141 )
10142 RETURN VARCHAR2 IS
10143 
10144 l_msg  varchar2(250);
10145 l_st_event                        VARCHAR2(80);
10146 l_end_event                       VARCHAR2(80);
10147 l_day_of_week                       VARCHAR2(80);
10148 l_day_of_month                       VARCHAR2(80);
10149 l_repeating_duration   number;
10150 l_api_name CONSTANT VARCHAR2(30) := 'getDueDateMsgText';
10151 
10152 
10153 
10154 cursor event_cur(x number) is
10155 select TL.meaning
10156 from okc_bus_doc_events_tl TL
10157 where TL.bus_doc_event_id = X
10158 and TL.LANGUAGE = userenv('LANG');
10159 event_rec event_cur%ROWTYPE;
10160 
10161 
10162 
10163 begin
10164 
10165 -- get event name
10166 IF p_relative_st_date_event_id is not null THEN
10167     OPEN event_cur(p_relative_st_date_event_id);
10168     FETCH event_cur INTO l_st_event;
10169     CLOSE event_cur;
10170 END IF;
10171 IF p_relative_end_date_event_id is not null THEN
10172     OPEN event_cur(p_relative_end_date_event_id);
10173     FETCH event_cur INTO l_end_event;
10174     CLOSE event_cur;
10175 END IF;
10176 
10177 -- get lookup meanings
10178 IF p_repeating_day_of_week is not null THEN
10179 select meaning into l_day_of_week
10180 from fnd_lookups
10181 where lookup_type = 'DAY_OF_WEEK'
10182 and lookup_code = p_repeating_day_of_week;
10183 END IF;
10184 
10185 IF p_repeating_day_of_month is not null THEN
10186 select meaning into l_day_of_month
10187 from fnd_lookups
10188 where lookup_type = 'OKC_DAY_OF_MONTH'
10189 and lookup_code = p_repeating_day_of_month;
10190 END IF;
10191 
10192 -- If duration is less than or equal to 1 then don't pass the token value
10193 if p_repeating_duration = 1  THEN
10194     l_repeating_duration := null;
10195 elsif p_repeating_duration = 0  THEN
10196     l_repeating_duration := null;
10197 else
10198     l_repeating_duration := p_repeating_duration;
10199 end if;
10200 
10201   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10202     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message name is : '||p_print_due_date_msg_name);
10203     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_WEEK is : '||p_repeating_day_of_week);
10204     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_MONTH is : '||p_repeating_day_of_month);
10205     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_NUM is : '||p_relative_st_date_duration);
10206     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_NUM is : '||p_relative_end_date_duration);
10207     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_EVENT is : '||l_st_event);
10208     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_EVENT is : '||l_end_event);
10209     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FREQ_NUM is : '|| l_repeating_duration);
10210     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_DATE_FIXED is : '|| p_fixed_start_date);
10211     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FIXED_END_DATE is : '|| p_fixed_end_date);
10212  END IF;
10213 -- bug#3465662 call this API if print due date msg name is not null
10214 IF p_print_due_date_msg_name IS NOT NULL THEN
10215     l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
10216                     p_app_name      =>  'OKC'
10217                     ,p_msg_name     =>  p_print_due_date_msg_name
10218                     ,p_token1       =>  'DAY_OF_WEEK'
10219                     ,p_token1_value =>  l_day_of_week
10220                     ,p_token2       =>  'DAY_OF_MONTH'
10221                     ,p_token2_value =>  l_day_of_month
10222                     ,p_token3       =>   'START_NUM'
10223                     ,p_token3_value =>  p_relative_st_date_duration
10224                     ,p_token4       =>  'END_NUM'
10225                     ,p_token4_value =>  p_relative_end_date_duration
10226                     ,p_token5       =>  'START_EVENT'
10227                     ,p_token5_value =>  l_st_event
10228                     ,p_token6       =>  'END_EVENT'
10229                     ,p_token6_value =>  l_end_event
10230                     ,p_token7       =>  'FREQ_NUM'
10231                     ,p_token7_value =>  l_repeating_duration
10232                     ,p_token8       =>  'START_DATE_FIXED'
10233                     ,p_token8_value =>  p_fixed_start_date
10234                     ,p_token9       =>  'FIXED_END_DATE'
10235                     ,p_token9_value =>  p_fixed_end_date);
10236 
10237   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10238     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message is : '|| l_msg);
10239   END IF;
10240 
10241 END IF;
10242         return(l_msg);
10243 
10244 EXCEPTION
10245 
10246 WHEN OTHERS THEN
10247 
10248   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10249     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving getDueDateMsgText with EXCEPTION: '||sqlerrm);
10250   END IF;
10251 
10252   IF event_cur%ISOPEN THEN
10253    CLOSE event_cur;
10254   END IF;
10255 
10256               RETURN ' ';
10257 end getDueDateMsgText;
10258 
10259 /***
10260 07-APR-2004 pnayani -- bug#3524864 added copy_response_deliverables API
10261 This API is invoked from OKC_TERMS_COPY_GRP.COPY_RESPONSE_DOC.
10262 Initially coded to support proxy bidding functionality in Sourcing.
10263 Copies deliverables from source response doc to target response documents (bid to bid)
10264 The procedure will query deliverables from source response
10265 document.Copies all deliverables and attachments as is on to a new response document.
10266 Parameter Details:
10267 p_source_doc_id :       Source document Id
10268 p_source_doc_type :     Source document type
10269 p_target_doc_id   :     Target document Id
10270 p_target_doc_type :     Target document Type
10271 p_target_doc_number :   Target document Number
10272 ***/
10273 
10274     PROCEDURE copy_response_deliverables (
10275         p_api_version           IN NUMBER,
10276         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
10277         p_source_doc_id             IN NUMBER,
10278         p_source_doc_type           IN VARCHAR2,
10279         p_target_doc_id             IN NUMBER,
10280         p_target_doc_type           IN VARCHAR2,
10281         p_target_doc_number         IN VARCHAR2,
10282         x_msg_data              OUT NOCOPY VARCHAR2,
10283         x_msg_count                 OUT NOCOPY NUMBER,
10284         x_return_status             OUT NOCOPY VARCHAR2)
10285     IS
10286     CURSOR del_cur IS
10287     SELECT *
10288     FROM OKC_DELIVERABLES
10289     WHERE business_document_id = p_source_doc_id
10290     AND   business_document_type = p_source_doc_type
10291     AND   recurring_del_parent_id is null;
10292     del_rec  del_cur%ROWTYPE;
10293 
10294     CURSOR del_ins_cur (X number) IS
10295     SELECT *
10296     FROM okc_deliverables
10297     WHERE business_document_id = p_source_doc_id
10298     AND   business_document_type = p_source_doc_type
10299     AND   recurring_del_parent_id = X;
10300     del_ins_rec  del_ins_cur%ROWTYPE;
10301 
10302     delRecTab           delRecTabType;
10303     delNewTab           delRecTabType;
10304     delInsTab           delRecTabType;
10305     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
10306     TYPE delIdTabType IS TABLE OF delIdRecType;
10307 
10308     CURSOR delStsHist(Y NUMBER) IS
10309     SELECT *
10310     FROM okc_del_status_history
10311     WHERE deliverable_id = Y;
10312     delStsHist_rec delStsHist%ROWTYPE;
10313     delHistTab    delHistTabType;
10314 
10315     delIdTab    delIdTabType;
10316     j PLS_INTEGER := 0;
10317     k PLS_INTEGER := 0;
10318     m PLS_INTEGER := 0;
10319     l_api_name      CONSTANT VARCHAR2(30) :='copy_response_deliverables';
10320     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
10321     l_recur_del_parent_id  NUMBER;
10322 
10323     BEGIN
10324             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10325                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
10326                 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_response_deliverables');
10327                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
10328                 ,'100: target budoc id is:'||to_char(p_target_doc_id));
10329                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
10330                 ,'100: target budoc id type:'||p_target_doc_type);
10331             END IF;
10332                 -- initialize the table type variable to strore source and target deliverble
10333                 -- ids to copy attachments.
10334                 delIdTab := delIdTabType();
10335             -- Build the deliverable definition records
10336         FOR del_rec IN del_cur LOOP
10337 
10338       k := k+1;
10339       delRecTab(k).deliverable_id := del_rec.deliverable_id;
10340       delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
10341       delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
10342       delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
10343       delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
10344       delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
10345       delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
10346       delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
10347       delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
10348       delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
10349       delRecTab(k).COMMENTS:= del_rec.COMMENTS;
10350       delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
10351       delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
10352       delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
10353       delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
10354       delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
10355       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
10356       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
10357       delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
10358       delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
10359       delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
10360       delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
10361       delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
10362       delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
10363       delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
10364       delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
10365       delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
10366       delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
10367       delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
10368       delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
10369       delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
10370       delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
10371       delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
10372       delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
10373       delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
10374       delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
10375       delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
10376       delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
10377       delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
10378       delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
10379       delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
10380       delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
10381       delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
10382       delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
10383       delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
10384       delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
10385       delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
10386       delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
10387       delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
10388       delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
10389       delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
10390       delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
10391       delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
10392       delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
10393       delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
10394       delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
10395       delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
10396       delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
10397       delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
10398       delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
10399       delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
10400       delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
10401       delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
10402       delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
10403       delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
10404       delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
10405       delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
10406       delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
10407       delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
10408       delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
10409       delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
10410       delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
10411       delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
10412       delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
10413       delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
10414       delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
10415       delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
10416       delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
10417       delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
10418       delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
10419       delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
10420       delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
10421       delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
10422       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
10423       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
10424       delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
10425       delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
10426 
10427             END LOOP;
10428         IF del_cur %ISOPEN THEN
10429           CLOSE del_cur ;
10430         END IF;
10431                 IF delRecTab.COUNT <> 0 THEN
10432                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10433                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
10434                     END IF;
10435                     -- Build the new deliverable definition table
10436                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
10437                   j := j+1;
10438                   -- extend table type
10439                   delIdTab.extend;
10440                   delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
10441                   delNewTab(j) := delRecTab(i);
10442                   select okc_deliverable_id_s.nextval
10443                   INTO delNewTab(j).deliverable_id from dual;
10444                   delIdTab(j).del_id := delNewTab(j).deliverable_id;
10445                   -- store current_del_parent_id in local variable
10446                   --to assign it to the instances
10447                   l_recur_del_parent_id := delNewTab(j).deliverable_id;
10448                   -- assign common attributes
10449                   delNewTab(j).business_document_id := p_target_doc_id;
10450                   delNewTab(j).business_document_type := p_target_doc_type;
10451                   delNewTab(j).business_document_number := p_target_doc_number;
10452                   delNewTab(j).created_by:= Fnd_Global.User_Id;
10453                   delNewTab(j).creation_date := sysdate;
10454                   delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
10455                   delNewTab(j).last_update_date := sysdate;
10456                   delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
10457                   -- Check for instances on deliverable definition
10458                   IF delRecTab(i).recurring_yn = 'Y' THEN
10459 
10460                    --Initialize the table with 0 rows
10461                    delInsTab.DELETE;
10462              m := 0;
10463                    -- Build instances table
10464                FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
10465                m := m+1;
10466                delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
10467                delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
10468                delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
10469                delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
10470                delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
10471                delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
10472                delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
10473                delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
10474                delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
10475                delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
10476                delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
10477                delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
10478                delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
10479                delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
10480                delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
10481                delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
10482                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
10483                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
10484                delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
10485                delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
10486                delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
10487                delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
10488                delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
10489                delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
10490                delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
10491                delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
10492                delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
10493                delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
10494                delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
10495                delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
10496                delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
10497                delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
10498                delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
10499                delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
10500                delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
10501                delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
10502                delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
10503                delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
10504                delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
10505                delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
10506                delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
10507                delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
10508                delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
10509                delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
10510                delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
10511                delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
10512                delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
10513                delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
10514                delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
10515                delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
10516                delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
10517                delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
10518                delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
10519                delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
10520                delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
10521                delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
10522                delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
10523                delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
10524                delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
10525                delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
10526                delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
10527                delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
10528                delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
10529                delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
10530                delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
10531                delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
10532                delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
10533                delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
10534                delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
10535                delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
10536                delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
10537                delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
10538                delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
10539                delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
10540                delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
10541                delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
10542                delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
10543                delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
10544                delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
10545                delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
10546                delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
10547                delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
10548                delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
10549                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
10550                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
10551                delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
10552                delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
10553                END LOOP; --  del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id)
10554                     IF del_ins_cur %ISOPEN THEN
10555                         CLOSE del_ins_cur ;
10556                     END IF;
10557                 -- If instances exist then add them to the new deliverables table
10558                 IF delInsTab.COUNT <> 0 THEN
10559                    FOR n IN delInsTab.FIRST..delInsTab.LAST LOOP
10560                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10561                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
10562                     END IF;
10563                         j:=j+1;
10564                         -- extend table type
10565                         delIdTab.extend;
10566                         -- build the id table to copy attachments
10567                         delIdTab(j).orig_del_id := delInsTab(n).deliverable_id;
10568                         -- build new version deliverables table
10569                         delNewTab(j):= delInsTab(n);
10570                         select okc_deliverable_id_s.nextval
10571                         INTO delNewTab(j).deliverable_id from dual;
10572                         delIdTab(j).del_id := delNewTab(j).deliverable_id;
10573                         delNewTab(j).recurring_del_parent_id :=  l_recur_del_parent_id;
10574                         -- assign common attributes
10575                         delNewTab(j).business_document_id := p_target_doc_id;
10576                         delNewTab(j).business_document_type := p_target_doc_type;
10577                         delNewTab(j).business_document_number := p_target_doc_number;
10578                         delNewTab(j).created_by:= Fnd_Global.User_Id;
10579                         delNewTab(j).creation_date := sysdate;
10580                         delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
10581                         delNewTab(j).last_update_date := sysdate;
10582                         delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
10583 
10584                     END LOOP; -- delInsTab.FIRST..delInsTab.LAST
10585                   END IF;--delInsTab.COUNT
10586 
10587 
10588                   END IF; --recurring_yn = 'Y'
10589                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10590                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab.COUNT));
10591                     END IF;
10592                 END LOOP; -- delRecTab.FIRST..delRecTab.LAST
10593                 END IF; -- delRecTab.COUNT
10594 
10595         -- loop through new table and create deliverables for the target document
10596         IF delNewTab.COUNT <> 0 THEN
10597                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
10598                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10599                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
10600                     END IF;
10601                 INSERT INTO okc_deliverables
10602                 (DELIVERABLE_ID,
10603                 BUSINESS_DOCUMENT_TYPE      ,
10604                 BUSINESS_DOCUMENT_ID        ,
10605                 BUSINESS_DOCUMENT_NUMBER    ,
10606                 DELIVERABLE_TYPE            ,
10607                 RESPONSIBLE_PARTY           ,
10608                 INTERNAL_PARTY_CONTACT_ID   ,
10609                 EXTERNAL_PARTY_CONTACT_ID   ,
10610                 DELIVERABLE_NAME            ,
10611                 DESCRIPTION                 ,
10612                 COMMENTS                    ,
10613                 DISPLAY_SEQUENCE            ,
10614                 FIXED_DUE_DATE_YN           ,
10615                 ACTUAL_DUE_DATE             ,
10616                 PRINT_DUE_DATE_MSG_NAME     ,
10617                 RECURRING_YN                ,
10618                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
10619                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
10620                 NOTIFY_PRIOR_DUE_DATE_YN    ,
10621                 NOTIFY_COMPLETED_YN         ,
10622                 NOTIFY_OVERDUE_YN           ,
10623                 NOTIFY_ESCALATION_YN        ,
10624                 NOTIFY_ESCALATION_VALUE     ,
10625                 NOTIFY_ESCALATION_UOM       ,
10626                 ESCALATION_ASSIGNEE         ,
10627                 AMENDMENT_OPERATION         ,
10628                 PRIOR_NOTIFICATION_ID       ,
10629                 AMENDMENT_NOTES             ,
10630                 COMPLETED_NOTIFICATION_ID   ,
10631                 OVERDUE_NOTIFICATION_ID     ,
10632                 ESCALATION_NOTIFICATION_ID  ,
10633                 LANGUAGE                    ,
10634                 ORIGINAL_DELIVERABLE_ID     ,
10635                 REQUESTER_ID                ,
10636                 EXTERNAL_PARTY_ID           ,
10637                 EXTERNAL_PARTY_ROLE           ,
10638                 RECURRING_DEL_PARENT_ID      ,
10639                 BUSINESS_DOCUMENT_VERSION   ,
10640                 RELATIVE_ST_DATE_DURATION   ,
10641                 RELATIVE_ST_DATE_UOM        ,
10642                 RELATIVE_ST_DATE_EVENT_ID   ,
10643                 RELATIVE_END_DATE_DURATION  ,
10644                 RELATIVE_END_DATE_UOM       ,
10645                 RELATIVE_END_DATE_EVENT_ID  ,
10646                 REPEATING_DAY_OF_MONTH      ,
10647                 REPEATING_DAY_OF_WEEK       ,
10648                 REPEATING_FREQUENCY_UOM     ,
10649                 REPEATING_DURATION          ,
10650                 FIXED_START_DATE            ,
10651                 FIXED_END_DATE              ,
10652                 MANAGE_YN                   ,
10653                 INTERNAL_PARTY_ID           ,
10654                 DELIVERABLE_STATUS          ,
10655                 STATUS_CHANGE_NOTES         ,
10656                 CREATED_BY                  ,
10657                 CREATION_DATE               ,
10658                 LAST_UPDATED_BY             ,
10659                 LAST_UPDATE_DATE            ,
10660                 LAST_UPDATE_LOGIN           ,
10661                 OBJECT_VERSION_NUMBER       ,
10662                 ATTRIBUTE_CATEGORY          ,
10663                 ATTRIBUTE1                  ,
10664                 ATTRIBUTE2                  ,
10665                 ATTRIBUTE3                  ,
10666                 ATTRIBUTE4                  ,
10667                 ATTRIBUTE5                  ,
10668                 ATTRIBUTE6                  ,
10669                 ATTRIBUTE7                  ,
10670                 ATTRIBUTE8                  ,
10671                 ATTRIBUTE9                  ,
10672                 ATTRIBUTE10                 ,
10673                 ATTRIBUTE11                 ,
10674                 ATTRIBUTE12                 ,
10675                 ATTRIBUTE13                 ,
10676                 ATTRIBUTE14                 ,
10677                 ATTRIBUTE15                 ,
10678                 DISABLE_NOTIFICATIONS_YN    ,
10679                 LAST_AMENDMENT_DATE         ,
10680                 BUSINESS_DOCUMENT_LINE_ID   ,
10681                 EXTERNAL_PARTY_SITE_ID      ,
10682                 START_EVENT_DATE            ,
10683                 END_EVENT_DATE              ,
10684                 SUMMARY_AMEND_OPERATION_CODE,
10685                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
10686                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
10687                 PAY_HOLD_PRIOR_DUE_DATE_YN,
10688                 PAY_HOLD_OVERDUE_YN
10689                 )
10690                 VALUES (
10691                 delNewTab(i).DELIVERABLE_ID,
10692                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
10693                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
10694                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
10695                 delNewTab(i).DELIVERABLE_TYPE            ,
10696                 delNewTab(i).RESPONSIBLE_PARTY           ,
10697                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
10698                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
10699                 delNewTab(i).DELIVERABLE_NAME            ,
10700                 delNewTab(i).DESCRIPTION                 ,
10701                 delNewTab(i).COMMENTS                    ,
10702                 delNewTab(i).DISPLAY_SEQUENCE            ,
10703                 delNewTab(i).FIXED_DUE_DATE_YN           ,
10704                 delNewTab(i).ACTUAL_DUE_DATE             ,
10705                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
10706                 delNewTab(i).RECURRING_YN                ,
10707                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
10708                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
10709                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
10710                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
10711                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
10712                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
10713                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
10714                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
10715                 delNewTab(i).ESCALATION_ASSIGNEE         ,
10716                 delNewTab(i).AMENDMENT_OPERATION         ,
10717                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
10718                 delNewTab(i).AMENDMENT_NOTES             ,
10719                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
10720                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
10721                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
10722                 delNewTab(i).LANGUAGE                    ,
10723                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
10724                 delNewTab(i).REQUESTER_ID                ,
10725                 delNewTab(i).EXTERNAL_PARTY_ID           ,
10726                 delNewTab(i).EXTERNAL_PARTY_ROLE           ,
10727                 delNewTab(i).RECURRING_DEL_PARENT_ID      ,
10728                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
10729                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
10730                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
10731                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
10732                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
10733                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
10734                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
10735                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
10736                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
10737                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
10738                 delNewTab(i).REPEATING_DURATION          ,
10739                 delNewTab(i).FIXED_START_DATE            ,
10740                 delNewTab(i).FIXED_END_DATE              ,
10741                 delNewTab(i).MANAGE_YN                   ,
10742                 delNewTab(i).INTERNAL_PARTY_ID           ,
10743                 delNewTab(i).DELIVERABLE_STATUS          ,
10744                 delNewTab(i).STATUS_CHANGE_NOTES         ,
10745                 delNewTab(i).CREATED_BY                  ,
10746                 delNewTab(i).CREATION_DATE               ,
10747                 delNewTab(i).LAST_UPDATED_BY             ,
10748                 delNewTab(i).LAST_UPDATE_DATE            ,
10749                 delNewTab(i).LAST_UPDATE_LOGIN           ,
10750                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
10751                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
10752                 delNewTab(i).ATTRIBUTE1                  ,
10753                 delNewTab(i).ATTRIBUTE2                  ,
10754                 delNewTab(i).ATTRIBUTE3                  ,
10755                 delNewTab(i).ATTRIBUTE4                  ,
10756                 delNewTab(i).ATTRIBUTE5                  ,
10757                 delNewTab(i).ATTRIBUTE6                  ,
10758                 delNewTab(i).ATTRIBUTE7                  ,
10759                 delNewTab(i).ATTRIBUTE8                  ,
10760                 delNewTab(i).ATTRIBUTE9                  ,
10761                 delNewTab(i).ATTRIBUTE10                 ,
10762                 delNewTab(i).ATTRIBUTE11                 ,
10763                 delNewTab(i).ATTRIBUTE12                 ,
10764                 delNewTab(i).ATTRIBUTE13                 ,
10765                 delNewTab(i).ATTRIBUTE14                 ,
10766                 delNewTab(i).ATTRIBUTE15                 ,
10767                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
10768                 delNewTab(i).LAST_AMENDMENT_DATE         ,
10769                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
10770                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
10771                 delNewTab(i).START_EVENT_DATE            ,
10772                 delNewTab(i).END_EVENT_DATE              ,
10773                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
10774                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
10775                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
10776                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
10777                 delNewTab(i).PAY_HOLD_OVERDUE_YN
10778                 );
10779                 END LOOP;
10780                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10781                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Creating Deliverables ');
10782                END IF;
10783         END IF; -- delNewTab.COUNT <> 0
10784                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10785                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
10786                END IF;
10787 
10788         -- loop through deliverable ids table and copy existing attachments and status history
10789         -- from old deliverable to new deliverable
10790           IF delIdTab.COUNT <> 0 THEN
10791           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
10792 
10793                 FOR delStsHist_rec in delStsHist(delIdTab(i).orig_del_id) LOOP
10794                 --insert into status history
10795                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10796                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: status history for Deliverable Id :'||to_char(delIdTab(i).del_id));
10797                 END IF;
10798                 INSERT INTO okc_del_status_history (
10799                 deliverable_id,
10800                 deliverable_status,
10801                 status_changed_by,
10802                 status_change_date,
10803                 status_change_notes,
10804                 object_version_number,
10805                 created_by,
10806                 creation_date,
10807                 last_updated_by,
10808                 last_update_date,
10809                 last_update_login)
10810                 VALUES(
10811                 delIdTab(i).del_id,
10812                 delStsHist_rec.DELIVERABLE_STATUS,
10813                 delStsHist_rec.STATUS_CHANGED_BY,
10814                 delStsHist_rec.STATUS_CHANGE_DATE,
10815                 delStsHist_rec.STATUS_CHANGE_NOTES,
10816                 delStsHist_rec.OBJECT_VERSION_NUMBER,
10817                 FND_GLOBAL.User_id,
10818                 sysdate,
10819                 FND_GLOBAL.User_id,
10820                 sysdate,
10821                 Fnd_Global.Login_Id);
10822                 END LOOP; -- delStsHist                                                                                                          END LOOP;
10823                 IF delStsHist%ISOPEN THEN
10824                 CLOSE  delStsHist;
10825                 END IF;
10826 
10827 
10828             -- check if attachments exists
10829             IF attachment_exists(p_entity_name => G_ENTITY_NAME
10830                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
10831 
10832                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10833                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
10834                     END IF;
10835                     -- copy attachments
10836                     -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
10837                     fnd_attached_documents2_pkg.copy_attachments(
10838                         X_from_entity_name =>  G_ENTITY_NAME,
10839                         X_from_pk1_value   =>  delIdTab(i).orig_del_id,
10840                         X_to_entity_name   =>  G_ENTITY_NAME,
10841                         X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
10842                         X_CREATED_BY       =>  FND_GLOBAL.User_id,
10843                         X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
10844                         );
10845                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10846                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Copy Deliverable Attachments ');
10847                     END IF;
10848             END IF; --attachment_exists
10849           END LOOP; -- delIdTab.FIRST..delIdTab.LAST
10850           END IF; -- delIdTab.COUNT
10851 
10852         IF del_cur %ISOPEN THEN
10853           CLOSE del_cur ;
10854         END IF;
10855         x_return_status := l_return_status;
10856             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10857                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':leaving ');
10858             END IF;
10859     EXCEPTION
10860     WHEN FND_API.G_EXC_ERROR THEN
10861             IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10862                 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR: '||
10863                 substr(sqlerrm,1,200));
10864             END IF;
10865         IF del_cur %ISOPEN THEN
10866           CLOSE del_cur ;
10867         END IF;
10868         IF delStsHist%ISOPEN THEN
10869             CLOSE  delStsHist;
10870         END IF;
10871         IF del_ins_cur %ISOPEN THEN
10872            CLOSE del_ins_cur ;
10873         END IF;
10874     x_return_status := G_RET_STS_ERROR;
10875       FND_MSG_PUB.Count_And_Get(
10876         p_count =>  x_msg_count,
10877         p_data  =>  x_msg_data
10878         );
10879 
10880     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10881             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10882                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
10883                 ,'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
10884             END IF;
10885         IF del_cur %ISOPEN THEN
10886           CLOSE del_cur ;
10887         END IF;
10888         IF delStsHist%ISOPEN THEN
10889           CLOSE  delStsHist;
10890         END IF;
10891         IF del_ins_cur %ISOPEN THEN
10892           CLOSE del_ins_cur ;
10893         END IF;
10894       x_return_status := G_RET_STS_UNEXP_ERROR;
10895       FND_MSG_PUB.Count_And_Get(
10896         p_count =>  x_msg_count,
10897         p_data  =>  x_msg_data
10898         );
10899 
10900     WHEN OTHERS THEN
10901             IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10902                 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,
10903                 'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
10904             END IF;
10905         IF del_cur %ISOPEN THEN
10906           CLOSE del_cur ;
10907         END IF;
10908         IF delStsHist%ISOPEN THEN
10909           CLOSE  delStsHist;
10910         END IF;
10911         IF del_ins_cur %ISOPEN THEN
10912           CLOSE del_ins_cur ;
10913         END IF;
10914     x_return_status := G_RET_STS_UNEXP_ERROR;
10915       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10916          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10917       END IF;
10918       FND_MSG_PUB.Count_And_Get(
10919         p_count =>  x_msg_count,
10920         p_data  =>  x_msg_data
10921         );
10922 
10923     END copy_response_deliverables;
10924 
10925 
10926     -- Creates status history for a given deliverable status history table
10927     PROCEDURE create_del_status_history(
10928         p_api_version       IN NUMBER,
10929         p_init_msg_list     IN VARCHAR2,
10930         p_del_st_hist_tab   IN delHistTabType,
10931         x_msg_data      OUT NOCOPY  VARCHAR2,
10932         x_msg_count     OUT NOCOPY  NUMBER,
10933         x_return_status OUT NOCOPY  VARCHAR2)
10934     IS
10935 
10936     l_api_name      CONSTANT VARCHAR2(30) :='create_del_status_history';
10937     l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
10938     l_msg_count       NUMBER;
10939     l_msg_data        VARCHAR2(1000);
10940     l_api_version     CONSTANT VARCHAR2(30) := 1.0;
10941     j PLS_INTEGER := 0;
10942 
10943     BEGIN
10944 
10945           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10946             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
10947           END IF;
10948 
10949           IF p_del_st_hist_tab.count > 0 THEN
10950               FOR i IN p_del_st_hist_tab.FIRST..p_del_st_hist_tab.LAST LOOP
10951                         INSERT INTO okc_del_status_history
10952                         (deliverable_id,
10953                         deliverable_status,
10954                         STATUS_CHANGED_BY,
10955                         status_change_date,
10956                         status_change_notes,
10957                         object_version_number,
10958                         created_by,
10959                         creation_date,
10960                         last_updated_by,
10961                         last_update_date,
10962                         last_update_login)
10963                         VALUES (p_del_st_hist_tab(i).DELIVERABLE_ID
10964                         ,p_del_st_hist_tab(i).DELIVERABLE_STATUS
10965                         ,p_del_st_hist_tab(i).STATUS_CHANGED_BY
10966                         ,p_del_st_hist_tab(i).STATUS_CHANGE_DATE
10967                         ,p_del_st_hist_tab(i).STATUS_CHANGE_NOTES
10968                         ,p_del_st_hist_tab(i).OBJECT_VERSION_NUMBER
10969                         ,p_del_st_hist_tab(i).CREATED_BY
10970                         ,p_del_st_hist_tab(i).CREATION_DATE
10971                         ,p_del_st_hist_tab(i).LAST_UPDATED_BY
10972                         ,p_del_st_hist_tab(i).LAST_UPDATE_DATE
10973                         ,p_del_st_hist_tab(i).LAST_UPDATE_LOGIN
10974                         );
10975               END LOOP;
10976           END IF;
10977 
10978           IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10979             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
10980           END IF;
10981           x_return_status := l_return_status;
10982     EXCEPTION
10983     WHEN FND_API.G_EXC_ERROR THEN
10984           IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10985             FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
10986           END IF;
10987     x_return_status := G_RET_STS_ERROR;
10988       FND_MSG_PUB.Count_And_Get(
10989         p_count =>  x_msg_count,
10990         p_data  =>  x_msg_data
10991         );
10992 
10993     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10994           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10995             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
10996           END IF;
10997     x_return_status := G_RET_STS_UNEXP_ERROR;
10998       FND_MSG_PUB.Count_And_Get(
10999         p_count =>  x_msg_count,
11000         p_data  =>  x_msg_data
11001         );
11002 
11003     WHEN OTHERS THEN
11004           IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11005             FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
11006           END IF;
11007     x_return_status := G_RET_STS_UNEXP_ERROR;
11008       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);
11009       END IF;
11010       FND_MSG_PUB.Count_And_Get(
11011         p_count =>  x_msg_count,
11012         p_data  =>  x_msg_data
11013         );
11014     END create_del_status_history;
11015 
11016 
11017 
11018 /**
11019 3635916 MODIFYING DELIVERABLE DOES NOT REMOVE RELATED CLAUSE
11020 FROM AMENDMENT SUMMARY
11021 This API will be invoked by
11022 OKC_TERMS_UTIL_PVT.deliverable_amendment_exists()
11023 Parameter Details:
11024 p_bus_doc_id :       document Id
11025 p_bus_doc_type :     document type
11026 p_variable_code:     deliverable variable code
11027 return value is Y or N based on the matching of deliverable
11028 to the variable.
11029 ***/
11030 FUNCTION deliverable_amendment_exists (
11031 p_api_version           IN NUMBER,
11032 p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
11033 p_bus_doc_type          IN VARCHAR2,
11034 p_bus_doc_id            IN NUMBER,
11035 p_variable_code         IN VARCHAR2,
11036 x_msg_data              OUT NOCOPY VARCHAR2,
11037 x_msg_count             OUT NOCOPY NUMBER,
11038 x_return_status         OUT NOCOPY VARCHAR2
11039 )
11040 RETURN VARCHAR2
11041 IS
11042 
11043 l_api_version   CONSTANT NUMBER := 1;
11044 l_api_name      CONSTANT VARCHAR2(30) := 'deliverable_amendment_exists ';
11045 -- removed reference to docClass in the query bug#4069955
11046 CURSOR del_cur
11047 IS
11048 SELECT
11049  del.deliverable_type deliverable_type
11050 ,del.responsible_party responsible_party
11051 from
11052  okc_deliverables del
11053 ,okc_deliverable_types_b delType
11054 where del.business_document_type = p_bus_doc_type
11055 and   del.business_document_id = p_bus_doc_id
11056 and   del.business_document_version = -99
11057 and   del.summary_amend_operation_code is not null
11058 and   del.deliverable_type = delType.deliverable_type_code
11059 and   delType.internal_flag = 'N';
11060 
11061 del_rec  del_cur%ROWTYPE;
11062 
11063 l_return_val  VARCHAR2(1);
11064 
11065 
11066 
11067 
11068 BEGIN
11069 
11070     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11071       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
11072     END IF;
11073 
11074     -- Standard call to check for call compatibility.
11075     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
11076        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11077     END IF;
11078 
11079     -- Initialize message list if p_init_msg_list is set to TRUE.
11080     IF FND_API.to_Boolean( p_init_msg_list ) THEN
11081        FND_MSG_PUB.initialize;
11082     END IF;
11083 
11084     --  Initialize API return status to success
11085     x_return_status := G_RET_STS_SUCCESS;
11086 
11087 
11088     l_return_val := 'N';
11089     -- loop through the amended deliverables and check if they match
11090     -- the variable_code. Return Y if they match else return N.
11091     FOR del_rec IN del_cur LOOP
11092         IF p_variable_code = 'EXTERNAL_SOURCING_DEL' OR
11093            p_variable_code = 'ALL_SOURCING_DEL' THEN
11094 
11095            IF del_rec.deliverable_type = 'SOURCING' THEN
11096                l_return_val := 'Y';
11097            END IF;
11098 
11099         END IF;
11100 
11101         IF p_variable_code = 'EXTERNAL_CONTRACTUAL_DEL' THEN
11102            IF del_rec.responsible_party = 'SUPPLIER_ORG' AND
11103               del_rec.deliverable_type = 'CONTRACTUAL' THEN
11104                 l_return_val := 'Y';
11105            END IF;
11106         ELSIF p_variable_code = 'INTERNAL_CONTRACTUAL_DEL' THEN
11107            IF del_rec.responsible_party = 'INTERNAL_ORG' AND
11108               del_rec.deliverable_type = 'CONTRACTUAL' THEN
11109                 l_return_val := 'Y';
11110            END IF;
11111         ELSIF p_variable_code = 'ALL_CONTRACTUAL_DEL' THEN
11112 
11113            IF del_rec.deliverable_type = 'CONTRACTUAL' THEN
11114 
11115                l_return_val := 'Y';
11116 
11117            END IF;
11118 
11119         END IF;
11120 
11121         IF l_return_val = 'Y' THEN
11122           RETURN(l_return_val);
11123         END IF;
11124 
11125     END LOOP;
11126   IF del_cur%ISOPEN THEN
11127      CLOSE del_cur;
11128   END IF;
11129 
11130         RETURN(l_return_val);
11131 
11132 EXCEPTION
11133 
11134 WHEN OTHERS THEN
11135   IF del_cur%ISOPEN THEN
11136      CLOSE del_cur;
11137   END IF;
11138 
11139   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11140     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
11141     G_PKG_NAME ||'.'||l_api_name);
11142   END IF;
11143   x_return_status := G_RET_STS_UNEXP_ERROR;
11144   IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11145      FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
11146   END IF;
11147   FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
11148                             p_data  =>  x_msg_data);
11149 
11150         RETURN(l_return_val);
11151 END deliverable_amendment_exists;
11152 
11153 
11154 
11155 /***
11156 Function get_party_name
11157 This API will be invoked by the Create/Update/ViewOnly Deliverable pages to display the
11158 name for an External Party. The External Party could be VENDOR_ID from PO_VENDORS or
11159 PARTY_ID from HZ_PARTIES
11160 Parameter Details:
11161 p_external_party_id: Unique Identifier from PO_VENDORS or HZ_PARTIES
11162 p_external_party_role: Resp_Party_Code from OKC_RESP_PARTIES
11163 24-FEB-2005  pnayani -- bug#4201738 updated get_party_name to return null
11164 ***/
11165 FUNCTION get_party_name(
11166 p_external_party_id          IN  NUMBER,
11167 p_external_party_role        IN  VARCHAR2) RETURN VARCHAR2 IS
11168 
11169 CURSOR get_vendor_name IS
11170 SELECT vendor_name
11171 from po_vendors
11172 where vendor_id = p_external_party_id;
11173 
11174 CURSOR get_party_name IS
11175 SELECT party_name
11176 from hz_parties
11177 where party_id = p_external_party_id;
11178 
11179 l_api_name      CONSTANT VARCHAR2(30) := 'get_party_name';
11180 l_party_name VARCHAR2(360);
11181 
11182 Begin
11183 
11184     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11185       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
11186     END IF;
11187 
11188  l_party_name := NULL;
11189 IF p_external_party_id is not null AND p_external_party_role is not null THEN
11190     If p_external_party_role = 'SUPPLIER_ORG' then
11191         OPEN get_vendor_name;
11192         FETCH get_vendor_name INTO l_party_name;
11193         CLOSE get_vendor_name;
11194     Else
11195         OPEN get_party_name;
11196         FETCH get_party_name INTO l_party_name;
11197         CLOSE get_party_name;
11198     End If;
11199 
11200 END IF; -- p_external_party_id is not null
11201     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11202       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: party name is :'||l_party_name);
11203     END IF;
11204 
11205 RETURN l_party_name;
11206 
11207 EXCEPTION
11208  WHEN OTHERS THEN
11209  IF get_vendor_name%ISOPEN THEN
11210      CLOSE get_vendor_name;
11211  END IF;
11212  IF get_party_name%ISOPEN THEN
11213      CLOSE get_party_name;
11214  END IF;
11215  l_party_name := NULL;
11216   IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11217     FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
11218     G_PKG_NAME ||'.'||l_api_name);
11219   END IF;
11220 
11221  RETURN l_party_name;
11222 
11223 End get_party_name;
11224 
11225 /**************************/
11226 
11227 
11228     -- bug#4075168 New API for Template Revision
11229     -- bug#4083525 New param p_copy_deliverables
11230     PROCEDURE CopyDelForTemplateRevision(
11231         p_api_version           IN NUMBER,
11232         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
11233         p_source_doc_id             IN NUMBER,
11234         p_source_doc_type           IN VARCHAR2,
11235         p_target_doc_id             IN NUMBER,
11236         p_target_doc_type           IN VARCHAR2,
11237         p_target_doc_number         IN VARCHAR2,
11238         p_copy_del_attachments_yn   IN VARCHAR2 default 'Y',
11239         x_msg_data              OUT NOCOPY VARCHAR2,
11240         x_msg_count                 OUT NOCOPY NUMBER,
11241         x_return_status             OUT NOCOPY VARCHAR2) IS
11242 
11243     CURSOR del_cur IS
11244     SELECT *
11245     FROM OKC_DELIVERABLES
11246     WHERE business_document_id = p_source_doc_id
11247     AND   business_document_version = -99
11248     AND   business_document_type = p_source_doc_type
11249     AND   NVL(amendment_operation,'NONE')<> 'DELETED'
11250     AND   NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
11251     AND   recurring_del_parent_id is null;
11252     delRecTab           delRecTabType;
11253     delNewTab           delRecTabType;
11254     TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
11255     TYPE delIdTabType IS TABLE OF delIdRecType;
11256     delIdTab    delIdTabType;
11257     j PLS_INTEGER := 0;
11258     k PLS_INTEGER := 0;
11259     l_api_name      CONSTANT VARCHAR2(30) :='CopyDelForTemplateRevision';
11260     l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
11261     l_deliverable_id    NUMBER;
11262     l_from_pk1_value    VARCHAR2(100);
11263     l_result            BOOLEAN;
11264     l_copy              VARCHAR2(1) := 'N';
11265     l_copy_attachments  VARCHAR2(1) := 'N';
11266 
11267 
11268     BEGIN
11269 
11270             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11271                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
11272                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
11273                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
11274             END IF;
11275                -- initialize the table type variable
11276                 delIdTab := delIdTabType();
11277 
11278             FOR del_rec IN del_cur LOOP
11279 
11280             k := k+1;
11281             delRecTab(k).deliverable_id := del_rec.deliverable_id;
11282             delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
11283             delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
11284             delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
11285             delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
11286             delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
11287             delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
11288             delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
11289             delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
11290             delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
11291             delRecTab(k).COMMENTS:= del_rec.COMMENTS;
11292             delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
11293             delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
11294             delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
11295             delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
11296             delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
11297             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
11298             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
11299             delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
11300             delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
11301             delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
11302             delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
11303             delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
11304             delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
11305             delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
11306             delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
11307             delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
11308             delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
11309             delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
11310             delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
11311             delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
11312             delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
11313             delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
11314             delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
11315             delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
11316       delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
11317             delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
11318             delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
11319             delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
11320             delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
11321             delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
11322             delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
11323             delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
11324             delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
11325             delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
11326             delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
11327             delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
11328             delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
11329             delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
11330             delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
11331             delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
11332             delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
11333             delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
11334             delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
11335             delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
11336             delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
11337             delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
11338             delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
11339             delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
11340             delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
11341             delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
11342             delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
11343             delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
11344             delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
11345             delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
11346             delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
11347             delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
11348             delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
11349             delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
11350             delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
11351             delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
11352             delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
11353             delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
11354             delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
11355             delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
11356             delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
11357             delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
11358             delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
11359             delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
11360             delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
11361             delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
11362             delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
11363             delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
11364             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
11365             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
11366             delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
11367             delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
11368 
11369 
11370             END LOOP;
11371         IF del_cur %ISOPEN THEN
11372           CLOSE del_cur ;
11373         END IF;
11374         IF p_source_doc_type = 'TEMPLATE' THEN
11375             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11376                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
11377             END IF;
11378             -- copy from template to template
11379             IF p_target_doc_type = 'TEMPLATE' THEN
11380             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11381                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
11382             END IF;
11383 
11384             IF delRecTab.COUNT <> 0 THEN
11385               IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11386                    FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab Count :'||to_char(delRecTab.COUNT));
11387               END IF;
11388                 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
11389                     j := j+1;
11390                     -- extend table type
11391                     delIdTab.extend;
11392                     delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
11393                     delNewTab(j) := delRecTab(i);
11394                     select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
11395                     delIdTab(j).del_id := delNewTab(j).deliverable_id;
11396                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11397                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
11398                     END IF;
11399                     delNewTab(j).business_document_id := p_target_doc_id;
11400                     delNewTab(j).business_document_type := p_target_doc_type;
11401                     delNewTab(j).business_document_number := p_target_doc_number;
11402                     delNewTab(j).business_document_version := -99;
11403                     delNewTab(j).created_by:= Fnd_Global.User_Id;
11404                     delNewTab(j).creation_date := sysdate;
11405                     delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
11406                     delNewTab(j).last_update_date := sysdate;
11407                     delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
11408 
11409                 END LOOP;
11410         -- bug#4083525 CopyDelForTemplateRevision
11411         IF delNewTab.COUNT <> 0 THEN
11412                 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
11413                 INSERT INTO okc_deliverables
11414                 (DELIVERABLE_ID,
11415                 BUSINESS_DOCUMENT_TYPE      ,
11416                 BUSINESS_DOCUMENT_ID        ,
11417                 BUSINESS_DOCUMENT_NUMBER    ,
11418                 DELIVERABLE_TYPE            ,
11419                 RESPONSIBLE_PARTY           ,
11420                 INTERNAL_PARTY_CONTACT_ID   ,
11421                 EXTERNAL_PARTY_CONTACT_ID   ,
11422                 DELIVERABLE_NAME            ,
11423                 DESCRIPTION                 ,
11424                 COMMENTS                    ,
11425                 DISPLAY_SEQUENCE            ,
11426                 FIXED_DUE_DATE_YN           ,
11427                 ACTUAL_DUE_DATE             ,
11428                 PRINT_DUE_DATE_MSG_NAME     ,
11429                 RECURRING_YN                ,
11430                 NOTIFY_PRIOR_DUE_DATE_VALUE ,
11431                 NOTIFY_PRIOR_DUE_DATE_UOM   ,
11432                 NOTIFY_PRIOR_DUE_DATE_YN    ,
11433                 NOTIFY_COMPLETED_YN         ,
11434                 NOTIFY_OVERDUE_YN           ,
11435                 NOTIFY_ESCALATION_YN        ,
11436                 NOTIFY_ESCALATION_VALUE     ,
11437                 NOTIFY_ESCALATION_UOM       ,
11438                 ESCALATION_ASSIGNEE         ,
11439                 AMENDMENT_OPERATION         ,
11440                 PRIOR_NOTIFICATION_ID       ,
11441                 AMENDMENT_NOTES             ,
11442                 COMPLETED_NOTIFICATION_ID   ,
11443                 OVERDUE_NOTIFICATION_ID     ,
11444                 ESCALATION_NOTIFICATION_ID  ,
11445                 LANGUAGE                    ,
11446                 ORIGINAL_DELIVERABLE_ID     ,
11447                 REQUESTER_ID                ,
11448                 EXTERNAL_PARTY_ID           ,
11449                 EXTERNAL_PARTY_ROLE         ,
11450                 RECURRING_DEL_PARENT_ID     ,
11451                 BUSINESS_DOCUMENT_VERSION   ,
11452                 RELATIVE_ST_DATE_DURATION   ,
11453                 RELATIVE_ST_DATE_UOM        ,
11454                 RELATIVE_ST_DATE_EVENT_ID   ,
11455                 RELATIVE_END_DATE_DURATION  ,
11456                 RELATIVE_END_DATE_UOM       ,
11457                 RELATIVE_END_DATE_EVENT_ID  ,
11458                 REPEATING_DAY_OF_MONTH      ,
11459                 REPEATING_DAY_OF_WEEK       ,
11460                 REPEATING_FREQUENCY_UOM     ,
11461                 REPEATING_DURATION          ,
11462                 FIXED_START_DATE            ,
11463                 FIXED_END_DATE              ,
11464                 MANAGE_YN                   ,
11465                 INTERNAL_PARTY_ID           ,
11466                 DELIVERABLE_STATUS          ,
11467                 STATUS_CHANGE_NOTES         ,
11468                 CREATED_BY                  ,
11469                 CREATION_DATE               ,
11470                 LAST_UPDATED_BY             ,
11471                 LAST_UPDATE_DATE            ,
11472                 LAST_UPDATE_LOGIN           ,
11473                 OBJECT_VERSION_NUMBER       ,
11474                 ATTRIBUTE_CATEGORY          ,
11475                 ATTRIBUTE1                  ,
11476                 ATTRIBUTE2                  ,
11477                 ATTRIBUTE3                  ,
11478                 ATTRIBUTE4                  ,
11479                 ATTRIBUTE5                  ,
11480                 ATTRIBUTE6                  ,
11481                 ATTRIBUTE7                  ,
11482                 ATTRIBUTE8                  ,
11483                 ATTRIBUTE9                  ,
11484                 ATTRIBUTE10                 ,
11485                 ATTRIBUTE11                 ,
11486                 ATTRIBUTE12                 ,
11487                 ATTRIBUTE13                 ,
11488                ATTRIBUTE14                 ,
11489                 ATTRIBUTE15                 ,
11490                 DISABLE_NOTIFICATIONS_YN    ,
11491                 LAST_AMENDMENT_DATE         ,
11492                 BUSINESS_DOCUMENT_LINE_ID   ,
11493                 EXTERNAL_PARTY_SITE_ID      ,
11494                 START_EVENT_DATE            ,
11495                 END_EVENT_DATE              ,
11496                 SUMMARY_AMEND_OPERATION_CODE,
11497                 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11498                 PAY_HOLD_PRIOR_DUE_DATE_UOM,
11499                 PAY_HOLD_PRIOR_DUE_DATE_YN,
11500                 PAY_HOLD_OVERDUE_YN
11501                 )
11502                 VALUES (
11503                 delNewTab(i).DELIVERABLE_ID,
11504                 delNewTab(i).BUSINESS_DOCUMENT_TYPE      ,
11505                 delNewTab(i).BUSINESS_DOCUMENT_ID        ,
11506                 delNewTab(i).BUSINESS_DOCUMENT_NUMBER    ,
11507                 delNewTab(i).DELIVERABLE_TYPE            ,
11508                 delNewTab(i).RESPONSIBLE_PARTY           ,
11509                 delNewTab(i).INTERNAL_PARTY_CONTACT_ID   ,
11510                 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID   ,
11511                 delNewTab(i).DELIVERABLE_NAME            ,
11512                 delNewTab(i).DESCRIPTION                 ,
11513                 delNewTab(i).COMMENTS                    ,
11514                 delNewTab(i).DISPLAY_SEQUENCE            ,
11515                 delNewTab(i).FIXED_DUE_DATE_YN           ,
11516                 delNewTab(i).ACTUAL_DUE_DATE             ,
11517                 delNewTab(i).PRINT_DUE_DATE_MSG_NAME     ,
11518                 delNewTab(i).RECURRING_YN                ,
11519                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
11520                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM   ,
11521                 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN    ,
11522                 delNewTab(i).NOTIFY_COMPLETED_YN         ,
11523                 delNewTab(i).NOTIFY_OVERDUE_YN           ,
11524                 delNewTab(i).NOTIFY_ESCALATION_YN        ,
11525                 delNewTab(i).NOTIFY_ESCALATION_VALUE     ,
11526                 delNewTab(i).NOTIFY_ESCALATION_UOM       ,
11527                 delNewTab(i).ESCALATION_ASSIGNEE         ,
11528                 delNewTab(i).AMENDMENT_OPERATION         ,
11529                 delNewTab(i).PRIOR_NOTIFICATION_ID       ,
11530                 delNewTab(i).AMENDMENT_NOTES             ,
11531                 delNewTab(i).COMPLETED_NOTIFICATION_ID   ,
11532                 delNewTab(i).OVERDUE_NOTIFICATION_ID     ,
11533                 delNewTab(i).ESCALATION_NOTIFICATION_ID  ,
11534                 delNewTab(i).LANGUAGE                    ,
11535                 delNewTab(i).ORIGINAL_DELIVERABLE_ID     ,
11536                 delNewTab(i).REQUESTER_ID                ,
11537                 delNewTab(i).EXTERNAL_PARTY_ID           ,
11538                 delNewTab(i).EXTERNAL_PARTY_ROLE         ,
11539                 delNewTab(i).RECURRING_DEL_PARENT_ID     ,
11540                 delNewTab(i).BUSINESS_DOCUMENT_VERSION   ,
11541                 delNewTab(i).RELATIVE_ST_DATE_DURATION   ,
11542                 delNewTab(i).RELATIVE_ST_DATE_UOM        ,
11543                 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID   ,
11544                 delNewTab(i).RELATIVE_END_DATE_DURATION  ,
11545                 delNewTab(i).RELATIVE_END_DATE_UOM       ,
11546                 delNewTab(i).RELATIVE_END_DATE_EVENT_ID  ,
11547                 delNewTab(i).REPEATING_DAY_OF_MONTH      ,
11548                 delNewTab(i).REPEATING_DAY_OF_WEEK       ,
11549                 delNewTab(i).REPEATING_FREQUENCY_UOM     ,
11550                 delNewTab(i).REPEATING_DURATION          ,
11551                 delNewTab(i).FIXED_START_DATE            ,
11552                 delNewTab(i).FIXED_END_DATE              ,
11553                 delNewTab(i).MANAGE_YN                   ,
11554                 delNewTab(i).INTERNAL_PARTY_ID           ,
11555                 delNewTab(i).DELIVERABLE_STATUS          ,
11556                 delNewTab(i).STATUS_CHANGE_NOTES         ,
11557                 delNewTab(i).CREATED_BY                  ,
11558                 delNewTab(i).CREATION_DATE               ,
11559                 delNewTab(i).LAST_UPDATED_BY             ,
11560                 delNewTab(i).LAST_UPDATE_DATE            ,
11561                 delNewTab(i).LAST_UPDATE_LOGIN           ,
11562                 delNewTab(i).OBJECT_VERSION_NUMBER       ,
11563                 delNewTab(i).ATTRIBUTE_CATEGORY          ,
11564                 delNewTab(i).ATTRIBUTE1                  ,
11565                 delNewTab(i).ATTRIBUTE2                  ,
11566                 delNewTab(i).ATTRIBUTE3                  ,
11567                 delNewTab(i).ATTRIBUTE4                  ,
11568                 delNewTab(i).ATTRIBUTE5                  ,
11569                 delNewTab(i).ATTRIBUTE6                  ,
11570                 delNewTab(i).ATTRIBUTE7                  ,
11571                 delNewTab(i).ATTRIBUTE8                  ,
11572                 delNewTab(i).ATTRIBUTE9                  ,
11573                 delNewTab(i).ATTRIBUTE10                 ,
11574                 delNewTab(i).ATTRIBUTE11                 ,
11575                 delNewTab(i).ATTRIBUTE12                 ,
11576                 delNewTab(i).ATTRIBUTE13                 ,
11577                 delNewTab(i).ATTRIBUTE14                 ,
11578                 delNewTab(i).ATTRIBUTE15                 ,
11579                 delNewTab(i).DISABLE_NOTIFICATIONS_YN    ,
11580                 delNewTab(i).LAST_AMENDMENT_DATE         ,
11581                 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID   ,
11582                 delNewTab(i).EXTERNAL_PARTY_SITE_ID      ,
11583                 delNewTab(i).START_EVENT_DATE            ,
11584                 delNewTab(i).END_EVENT_DATE              ,
11585                 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
11586                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11587                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
11588                 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
11589                 delNewTab(i).PAY_HOLD_OVERDUE_YN
11590                 );
11591                 END LOOP;
11592                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11593                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
11594                  '100: Done Creating Deliverables ');
11595                END IF;
11596                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11597                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
11598                  '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
11599                END IF;
11600 
11601         -- copy any existing attachments if allowed
11602         IF p_copy_del_attachments_yn = 'Y' THEN
11603 
11604           IF delIdTab.COUNT <> 0 THEN
11605           FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
11606             -- check if attachments exists
11607             IF attachment_exists(p_entity_name => G_ENTITY_NAME
11608                   ,p_pk1_value    =>  delIdTab(i).orig_del_id) THEN
11609 
11610                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11611                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
11612                  '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
11613                END IF;
11614               -- copy attachments
11615               -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
11616               fnd_attached_documents2_pkg.copy_attachments(
11617                   X_from_entity_name =>  G_ENTITY_NAME,
11618                   X_from_pk1_value   =>  delIdTab(i).orig_del_id,
11619                   X_to_entity_name   =>  G_ENTITY_NAME,
11620                   X_to_pk1_value     =>  to_char(delIdTab(i).del_id),
11621                   X_CREATED_BY       =>  FND_GLOBAL.User_id,
11622                   X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
11623                   );
11624                IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11625                  FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
11626                  '100: Done Copy Deliverable Attachments ');
11627                END IF;
11628             END IF;
11629           END LOOP;
11630           END IF;-- delIdTab.COUNT <> 0 THEN
11631         END IF; -- p_copy_del_attachments_yn = 'Y'
11632         END IF; -- delNewTab.COUNT <> 0 THEN
11633         -- bug#4083525 CopyDelForTemplateRevision
11634        END IF;-- delRecTab.count
11635        END IF; -- p_target_doc_type = 'TEMPLATE'
11636      END IF; -- p_source_doc_type = 'TEMPLATE'
11637 
11638         IF del_cur %ISOPEN THEN
11639           CLOSE del_cur ;
11640         END IF;
11641         x_return_status := l_return_status;
11642             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11643                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
11644                 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
11645             END IF;
11646 
11647 
11648     EXCEPTION
11649     WHEN OTHERS THEN
11650         IF del_cur %ISOPEN THEN
11651           CLOSE del_cur ;
11652         END IF;
11653        IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11654         FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision with G_EXC_UNEXPECTED_ERROR');
11655        END IF;
11656     x_return_status := G_RET_STS_UNEXP_ERROR;
11657       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11658       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
11659       END IF;
11660       FND_MSG_PUB.Count_And_Get(
11661         p_count =>  x_msg_count,
11662         p_data  =>  x_msg_data
11663         );
11664 
11665     END CopyDelForTemplateRevision;
11666 
11667 
11668 -- Start of comments
11669 --API name      : deleteDeliverables
11670 --Type          : Private.
11671 --Function      : 1.  Deletes deliverables of the current version of the bus doc (-99).
11672 --              : 2.  If p_revert_dels = 'Y",  re-creating deliverables with -99 version
11673 --              :     from the deliverable definitions of the previous bus doc version.
11674 --Usage         : This API is called from Repository while deleting a contract.
11675 --Pre-reqs      : None.
11676 --Parameters    :
11677 --IN            : p_api_version         IN NUMBER       Required
11678 --              : p_init_msg_list       IN VARCHAR2     Optional
11679 --                   Default = FND_API.G_FALSE
11680 --              : p_commit              IN VARCHAR2     Optional
11681 --                   Default = FND_API.G_FALSE
11682 --              : p_bus_doc_id          IN NUMBER       Required
11683 --                   Contract ID of the contract to be deleted
11684 --              : p_bus_doc_type        IN VARCHAR2     Required
11685 --                   Type of the contract to be deleted
11686 --              : p_bus_doc_version     IN NUMBER       Required
11687 --                   Version number of the contract to be deleted
11688 --              : p_prev_del_active     IN VARCHAR2     Optional
11689 --                   Flag which tells whether deliverables of the previous business
11690 --                   document version are activated or not
11691 --                   Default = 'N'
11692 --              : p_revert_dels         IN VARCHAR2     Optional
11693 --                   Flag which tells whether to recreate the -99 deliverables from
11694 --                   the previous document version's deliverables. This will be "N" if
11695 --                   the first version of the business document is being deleted
11696 --                   Default = 'N'
11697 --OUT           : x_return_status       OUT  VARCHAR2(1)
11698 --              : x_msg_count           OUT  NUMBER
11699 --              : x_msg_data            OUT  VARCHAR2(2000)
11700 --Note          :
11701 -- End of comments
11702 PROCEDURE deleteDeliverables(
11703         p_api_version           IN NUMBER,
11704         p_init_msg_list         IN VARCHAR2:=FND_API.G_FALSE,
11705         p_commit                IN VARCHAR2:=FND_API.G_FALSE,
11706         p_bus_doc_id            IN NUMBER,
11707         p_bus_doc_type          IN VARCHAR2,
11708         p_bus_doc_version       IN NUMBER,
11709         p_prev_del_active       IN VARCHAR2 := 'N',
11710         p_revert_dels           IN VARCHAR2 := 'N',
11711         x_msg_data              OUT NOCOPY VARCHAR2,
11712         x_msg_count             OUT NOCOPY NUMBER,
11713         x_return_status         OUT NOCOPY VARCHAR2)
11714 IS
11715 
11716   -- Cursor to get deliverable id and original deliverable ids of deliverables of
11717   -- the current version of a business document
11718   CURSOR cur_vers_del_csr IS
11719     SELECT deliverable_id,
11720            original_deliverable_id
11721     FROM   okc_deliverables
11722     WHERE  business_document_id = p_bus_doc_id
11723     AND    business_document_version = -99
11724     AND    business_document_type = p_bus_doc_type;
11725 
11726   -- Cursor to get deliverables of the previous version of a business document
11727   CURSOR prev_vers_del_csr IS
11728     SELECT  deliverable_id,
11729             business_document_type,
11730             business_document_id,
11731             business_document_number,
11732             deliverable_type,
11733             responsible_party,
11734             internal_party_contact_id,
11735             external_party_contact_id,
11736             deliverable_name,
11737             description,
11738             comments,
11739             display_sequence,
11740             fixed_due_date_yn,
11741             actual_due_date,
11742             print_due_date_msg_name,
11743             recurring_yn,
11744             notify_prior_due_date_value,
11745             notify_prior_due_date_uom,
11746             notify_prior_due_date_yn,
11747             notify_completed_yn,
11748             notify_overdue_yn,
11749             notify_escalation_yn,
11750             notify_escalation_value,
11751             notify_escalation_uom,
11752             escalation_assignee,
11753             amendment_operation,
11754             prior_notification_id,
11755             amendment_notes,
11756             completed_notification_id,
11757             overdue_notification_id,
11758             escalation_notification_id,
11759             language,
11760             original_deliverable_id,
11761             requester_id,
11762             external_party_id,
11763             recurring_del_parent_id,
11764             business_document_version,
11765             relative_st_date_duration,
11766             relative_st_date_uom,
11767             relative_st_date_event_id,
11768             relative_end_date_duration,
11769             relative_end_date_uom,
11770             relative_end_date_event_id,
11771             repeating_day_of_month,
11772             repeating_day_of_week,
11773             repeating_frequency_uom,
11774             repeating_duration,
11775             fixed_start_date,
11776             fixed_end_date,
11777             manage_yn,
11778             internal_party_id,
11779             deliverable_status,
11780             status_change_notes,
11781             created_by,
11782             creation_date,
11783             last_updated_by,
11784             last_update_date,
11785             last_update_login,
11786             object_version_number,
11787             attribute_category,
11788             attribute1,
11789             attribute2,
11790             attribute3,
11791             attribute4,
11792             attribute5,
11793             attribute6,
11794             attribute7,
11795             attribute8,
11796             attribute9,
11797             attribute10,
11798             attribute11,
11799             attribute12,
11800             attribute13,
11801             attribute14,
11802             attribute15,
11803             disable_notifications_yn,
11804             last_amendment_date,
11805             business_document_line_id,
11806             external_party_site_id,
11807             start_event_date,
11808             end_event_date,
11809             summary_amend_operation_code,
11810             external_party_role,
11811             pay_hold_prior_due_date_value,
11812             pay_hold_prior_due_date_uom,
11813             pay_hold_prior_due_date_yn,
11814             pay_hold_overdue_yn
11815     FROM   okc_deliverables
11816     WHERE  business_document_id = p_bus_doc_id
11817     AND    business_document_version = p_bus_doc_version - 1
11818     AND    business_document_type = p_bus_doc_type
11819     AND    recurring_del_parent_id IS NULL
11820     AND    NVL(amendment_operation, ' ') <> 'DELETED';
11821 
11822 
11823   TYPE cur_vers_del_tbl IS TABLE OF cur_vers_del_csr%ROWTYPE;
11824   TYPE prev_vers_del_tbl IS TABLE OF prev_vers_del_csr%ROWTYPE;
11825 
11826   cur_vers_del cur_vers_del_tbl;
11827   prev_vers_del prev_vers_del_tbl;
11828 
11829   l_api_name      CONSTANT VARCHAR2(30) :='deleteDeliverables';
11830   l_api_version   CONSTANT NUMBER := 1.0;
11831   l_return_status     VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
11832 
11833   l_deliverable_id okc_deliverables.deliverable_id%TYPE;
11834 
11835 
11836 BEGIN
11837 
11838   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11839     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Enterred OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
11840     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_id: '|| to_char(p_bus_doc_id));
11841     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_version: '|| to_char(p_bus_doc_version));
11842     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_type: '|| p_bus_doc_type);
11843     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_prev_del_active: '|| p_prev_del_active);
11844     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_revert_dels: '|| p_revert_dels);
11845   END IF;
11846 
11847   -- Standard call to check for call compatibility.
11848   IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
11849     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11850   END IF;
11851 
11852   -- Initialize message list if p_init_msg_list is set to TRUE.
11853   IF FND_API.to_Boolean( p_init_msg_list ) THEN
11854     FND_MSG_PUB.initialize;
11855   END IF;
11856 
11857   -- If the flag p_revert_dels is "N" then this API is called to delete
11858   -- deliverables with business document version of -99
11859   IF (p_revert_dels = 'N') THEN
11860 
11861     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11862         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11863           'Deleting deliverables with document version equal to -99');
11864     END IF;
11865 
11866     delete_deliverables(p_api_version     => 1.0,
11867                         p_init_msg_list   => FND_API.G_FALSE,
11868                         p_doc_id          => p_bus_doc_id,
11869                         p_doc_type        => p_bus_doc_type,
11870                         p_doc_version     => -99,
11871                         x_return_status   => x_return_status,
11872                         x_msg_count       => x_msg_count,
11873                         x_msg_data        => x_msg_data);
11874 
11875     -----------------------------------------------------
11876     IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
11877         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
11878     ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
11879         RAISE OKC_API.G_EXCEPTION_ERROR;
11880     END IF;
11881     --------------------------------------------------------
11882 
11883   ELSE
11884     -- If the flag p_revert_dels is not "N" then this API is called to delete
11885     -- the -99 deliverables and then recreate those deliverables using previous
11886     -- business document version's deliverables.
11887     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11888       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11889            'Getting ids of the deliverables with document version number equal to -99');
11890     END IF;
11891 
11892     OPEN cur_vers_del_csr;
11893     FETCH cur_vers_del_csr BULK COLLECT INTO cur_vers_del;
11894     CLOSE cur_vers_del_csr;
11895 
11896     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11897       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11898          'Deleting deliverables with document version equal to -99');
11899     END IF;
11900 
11901     delete_deliverables(p_api_version     => 1.0,
11902                         p_init_msg_list   => FND_API.G_FALSE,
11903                         p_doc_id          => p_bus_doc_id,
11904                         p_doc_type        => p_bus_doc_type,
11905                         p_doc_version     => -99,
11906                         x_return_status   => x_return_status,
11907                         x_msg_count       => x_msg_count,
11908                         x_msg_data        => x_msg_data);
11909 
11910     -----------------------------------------------------
11911     IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
11912         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
11913     ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
11914         RAISE OKC_API.G_EXCEPTION_ERROR;
11915     END IF;
11916     --------------------------------------------------------
11917 
11918     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11919         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11920              'Getting deliverables of the previous version');
11921     END IF;
11922 
11923     OPEN  prev_vers_del_csr;
11924     FETCH prev_vers_del_csr BULK COLLECT INTO prev_vers_del;
11925     CLOSE prev_vers_del_csr;
11926 
11927     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11928       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11929               'prev_vers_del.COUNT ' || prev_vers_del.COUNT);
11930       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11931               'cur_vers_del.COUNT ' || cur_vers_del.COUNT);
11932     END IF;
11933 
11934     IF (prev_vers_del.COUNT > 0) THEN
11935 
11936       -- Iterate through the the array of previous business document version deliverables
11937       -- and clone each row in the array by inserting one deliverable with -99
11938       -- business document version. So that the state of the deliverables will
11939       -- be reverted back to that state before creating the new version of the business document
11940       FOR i IN prev_vers_del.FIRST..NVL(prev_vers_del.LAST, -1) LOOP
11941 
11942         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11943             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11944                     'prev_vers_del(' || i || ').original_deliverable_id ' || prev_vers_del(i).original_deliverable_id);
11945         END IF;
11946 
11947         -- Iterate through the array of -99 deliverables to get corresponding deliverable id of the
11948         -- deliverable in the context using their original deliverable id
11949         -- This deliverable id will be used as id for the deliverable being inserted, so that we don't
11950         -- loose the deliverable id and also to ensure data integrity
11951         FOR j IN cur_vers_del.FIRST..NVL(cur_vers_del.LAST, -1) LOOP
11952 
11953             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11954                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11955                    'cur_vers_del(' || j || ').original_deliverable_id ' || cur_vers_del(j).original_deliverable_id);
11956             END IF;
11957 
11958             -- Original deliverable id is used to find corresponding deliverable with -99 version of
11959             -- the deliverable in the context
11960             IF (cur_vers_del(j).original_deliverable_id = prev_vers_del(i).original_deliverable_id) THEN
11961               l_deliverable_id := cur_vers_del(j).deliverable_id;
11962 
11963               IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11964                   FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11965                      'l_deliverable_id ' || l_deliverable_id);
11966               END IF;
11967 
11968               EXIT;
11969             END IF;
11970 
11971         END LOOP;
11972 
11973         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11974             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
11975               'Setting default values for some of the columns');
11976         END IF;
11977 
11978         -- Set default value for some of the columns, which are resolved during amendment process
11979         -- and whose values are supposed to be NULL or some default value for the current
11980         -- business document version deliverables i.e. -99 version deliverables
11981         prev_vers_del(i).actual_due_date := NULL;
11982         prev_vers_del(i).object_version_number := 0;
11983         prev_vers_del(i).start_event_date := NULL;
11984         prev_vers_del(i).end_event_date := NULL;
11985 
11986         IF (p_prev_del_active = 'Y') THEN
11987 
11988         -- Set default value for some more columns as we're using deliverable definitions
11989         -- of the previous business document version which might have activated and some of
11990         -- the columns are populated, which are supposed to be either NULL or some default
11991         -- value for the current business document version deliverables i.e. -99 version deliverables
11992           prev_vers_del(i).prior_notification_id := NULL;
11993           prev_vers_del(i).amendment_operation := NULL;
11994           prev_vers_del(i).completed_notification_id := NULL;
11995           prev_vers_del(i).overdue_notification_id := NULL;
11996           prev_vers_del(i).escalation_notification_id := NULL;
11997           prev_vers_del(i).manage_yn := 'N';
11998           prev_vers_del(i).deliverable_status := 'INACTIVE';
11999           prev_vers_del(i).summary_amend_operation_code := NULL;
12000           prev_vers_del(i).last_amendment_date := NULL;
12001 
12002         END IF;
12003 
12004 
12005         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12006               FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12007                 'Inserting a Deliverable with deliverable id ' || l_deliverable_id);
12008         END IF;
12009 
12010         -- Insert a row into okc_deliverables with id of the deleted deliverable
12011         -- and with other values with its corresponding previous version deliverable
12012         INSERT INTO okc_deliverables (
12013                   deliverable_id,
12014                   business_document_type,
12015                   business_document_id,
12016                   business_document_number,
12017                   deliverable_type,
12018                   responsible_party,
12019                   internal_party_contact_id,
12020                   external_party_contact_id,
12021                   deliverable_name,
12022                   description,
12023                   comments,
12024                   display_sequence,
12025                   fixed_due_date_yn,
12026                   actual_due_date,
12027                   print_due_date_msg_name,
12028                   recurring_yn,
12029                   notify_prior_due_date_value,
12030                   notify_prior_due_date_uom,
12031                   notify_prior_due_date_yn,
12032                   notify_completed_yn,
12033                   notify_overdue_yn,
12034                   notify_escalation_yn,
12035                   notify_escalation_value,
12036                   notify_escalation_uom,
12037                   escalation_assignee,
12038                   amendment_operation,
12039                   prior_notification_id,
12040                   amendment_notes,
12041                   completed_notification_id,
12042                   overdue_notification_id,
12043                   escalation_notification_id,
12044                   language,
12045                   original_deliverable_id,
12046                   requester_id,
12047                   external_party_id,
12048                   recurring_del_parent_id,
12049                   business_document_version,
12050                   relative_st_date_duration,
12051                   relative_st_date_uom,
12052                   relative_st_date_event_id,
12053                   relative_end_date_duration,
12054                   relative_end_date_uom,
12055                   relative_end_date_event_id,
12056                   repeating_day_of_month,
12057                   repeating_day_of_week,
12058                   repeating_frequency_uom,
12059                   repeating_duration,
12060                   fixed_start_date,
12061                   fixed_end_date,
12062                   manage_yn,
12063                   internal_party_id,
12064                   deliverable_status,
12065                   status_change_notes,
12066                   created_by,
12067                   creation_date,
12068                   last_updated_by,
12069                   last_update_date,
12070                   last_update_login,
12071                   object_version_number,
12072                   attribute_category,
12073                   attribute1,
12074                   attribute2,
12075                   attribute3,
12076                   attribute4,
12077                   attribute5,
12078                   attribute6,
12079                   attribute7,
12080                   attribute8,
12081                   attribute9,
12082                   attribute10,
12083                   attribute11,
12084                   attribute12,
12085                   attribute13,
12086                   attribute14,
12087                   attribute15,
12088                   disable_notifications_yn,
12089                   last_amendment_date,
12090                   business_document_line_id,
12091                   external_party_site_id,
12092                   start_event_date,
12093                   end_event_date,
12094                   summary_amend_operation_code,
12095                   external_party_role,
12096                   pay_hold_prior_due_date_value,
12097                   pay_hold_prior_due_date_uom,
12098                   pay_hold_prior_due_date_yn,
12099                   pay_hold_overdue_yn
12100                   )
12101         VALUES( l_deliverable_id,
12102                 prev_vers_del(i).business_document_type,
12103                 prev_vers_del(i).business_document_id,
12104                 prev_vers_del(i).business_document_number,
12105                 prev_vers_del(i).deliverable_type,
12106                 prev_vers_del(i).responsible_party,
12107                 prev_vers_del(i).internal_party_contact_id,
12108                 prev_vers_del(i).external_party_contact_id,
12109                 prev_vers_del(i).deliverable_name,
12110                 prev_vers_del(i).description,
12111                 prev_vers_del(i).comments,
12112                 prev_vers_del(i).display_sequence,
12113                 prev_vers_del(i).fixed_due_date_yn,
12114                 prev_vers_del(i).actual_due_date,
12115                 prev_vers_del(i).print_due_date_msg_name,
12116                 prev_vers_del(i).recurring_yn,
12117                 prev_vers_del(i).notify_prior_due_date_value,
12118                 prev_vers_del(i).notify_prior_due_date_uom,
12119                 prev_vers_del(i).notify_prior_due_date_yn,
12120                 prev_vers_del(i).notify_completed_yn,
12121                 prev_vers_del(i).notify_overdue_yn,
12122                 prev_vers_del(i).notify_escalation_yn,
12123                 prev_vers_del(i).notify_escalation_value,
12124                 prev_vers_del(i).notify_escalation_uom,
12125                 prev_vers_del(i).escalation_assignee,
12126                 prev_vers_del(i).amendment_operation,
12127                 prev_vers_del(i).prior_notification_id,
12128                 prev_vers_del(i).amendment_notes,
12129                 prev_vers_del(i).completed_notification_id,
12130                 prev_vers_del(i).overdue_notification_id,
12131                 prev_vers_del(i).escalation_notification_id,
12132                 prev_vers_del(i).language,
12133                 prev_vers_del(i).original_deliverable_id,
12134                 prev_vers_del(i).requester_id,
12135                 prev_vers_del(i).external_party_id,
12136                 prev_vers_del(i).recurring_del_parent_id,
12137                 -99,
12138                 prev_vers_del(i).relative_st_date_duration,
12139                 prev_vers_del(i).relative_st_date_uom,
12140                 prev_vers_del(i).relative_st_date_event_id,
12141                 prev_vers_del(i).relative_end_date_duration,
12142                 prev_vers_del(i).relative_end_date_uom,
12143                 prev_vers_del(i).relative_end_date_event_id,
12144                 prev_vers_del(i).repeating_day_of_month,
12145                 prev_vers_del(i).repeating_day_of_week,
12146                 prev_vers_del(i).repeating_frequency_uom,
12147                 prev_vers_del(i).repeating_duration,
12148                 prev_vers_del(i).fixed_start_date,
12149                 prev_vers_del(i).fixed_end_date,
12150                 prev_vers_del(i).manage_yn,
12151                 prev_vers_del(i).internal_party_id,
12152                 prev_vers_del(i).deliverable_status,
12153                 prev_vers_del(i).status_change_notes,
12154                 prev_vers_del(i).created_by,
12155                 prev_vers_del(i).creation_date,
12156                 prev_vers_del(i).last_updated_by,
12157                 prev_vers_del(i).last_update_date,
12158                 prev_vers_del(i).last_update_login,
12159                 prev_vers_del(i).object_version_number,
12160                 prev_vers_del(i).attribute_category,
12161                 prev_vers_del(i).attribute1,
12162                 prev_vers_del(i).attribute2,
12163                 prev_vers_del(i).attribute3,
12164                 prev_vers_del(i).attribute4,
12165                 prev_vers_del(i).attribute5,
12166                 prev_vers_del(i).attribute6,
12167                 prev_vers_del(i).attribute7,
12168                 prev_vers_del(i).attribute8,
12169                 prev_vers_del(i).attribute9,
12170                 prev_vers_del(i).attribute10,
12171                 prev_vers_del(i).attribute11,
12172                 prev_vers_del(i).attribute12,
12173                 prev_vers_del(i).attribute13,
12174                 prev_vers_del(i).attribute14,
12175                 prev_vers_del(i).attribute15,
12176                 prev_vers_del(i).disable_notifications_yn,
12177                 prev_vers_del(i).last_amendment_date,
12178                 prev_vers_del(i).business_document_line_id,
12179                 prev_vers_del(i).external_party_site_id,
12180                 prev_vers_del(i).start_event_date,
12181                 prev_vers_del(i).end_event_date,
12182                 prev_vers_del(i).summary_amend_operation_code,
12183                 prev_vers_del(i).external_party_role,
12184                 prev_vers_del(i).pay_hold_prior_due_date_value,
12185                 prev_vers_del(i).pay_hold_prior_due_date_uom,
12186                 prev_vers_del(i).pay_hold_prior_due_date_yn,
12187                 prev_vers_del(i).pay_hold_overdue_yn);
12188 
12189         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12190           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12191                 'Copying attachments from deliverable with id ' || to_char(prev_vers_del(i).deliverable_id) || ' to ' || to_char(l_deliverable_id));
12192         END IF;
12193 
12194         -- Copy attachments from prev version deliverable to current version deliverable
12195         fnd_attached_documents2_pkg.copy_attachments(
12196                           X_from_entity_name  =>  G_ENTITY_NAME,
12197                           X_from_pk1_value    =>  to_char(prev_vers_del(i).deliverable_id),
12198                           X_to_entity_name    =>  G_ENTITY_NAME,
12199                           X_to_pk1_value      =>  to_char(l_deliverable_id),
12200                           X_CREATED_BY        =>  FND_GLOBAL.User_id,
12201                           X_LAST_UPDATE_LOGIN =>  Fnd_Global.Login_Id);
12202 
12203       END LOOP;
12204 
12205     END IF;
12206 
12207     IF (p_prev_del_active = 'N') THEN
12208 
12209       -- Since the deliverables of the current contract are not yet activated
12210       --we can safely delete those deliverables with previous business document version number
12211       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12212           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12213                 'Deliverables of the current contract are not activated yet');
12214       END IF;
12215 
12216       -- Delete the deliverables created with previous business document version number
12217       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12218         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12219              'Deleting deliverables with document version equal to' || to_char(p_bus_doc_version - 1));
12220       END IF;
12221 
12222       delete_deliverables(p_api_version     => 1.0,
12223                           p_init_msg_list   => FND_API.G_FALSE,
12224                           p_doc_id          => p_bus_doc_id,
12225                           p_doc_type        => p_bus_doc_type,
12226                           p_doc_version     => p_bus_doc_version - 1,
12227                           x_return_status   => x_return_status,
12228                           x_msg_count       => x_msg_count,
12229                           x_msg_data        => x_msg_data);
12230 
12231       -----------------------------------------------------
12232       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
12233           RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
12234       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
12235           RAISE OKC_API.G_EXCEPTION_ERROR;
12236       END IF;
12237     --------------------------------------------------------
12238 
12239     END IF; -- End of (p_prev_del_active = 'N')
12240 
12241   END IF; -- End of (p_revert_dels = 'N')
12242 
12243 
12244 
12245   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12246     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
12247   END IF;
12248 
12249 
12250 EXCEPTION
12251 
12252   WHEN OTHERS THEN
12253 
12254     IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12255       FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers with G_EXC_UNEXPECTED_ERROR');
12256     END IF;
12257 
12258     IF prev_vers_del_csr %ISOPEN THEN
12259       CLOSE prev_vers_del_csr;
12260     END IF;
12261 
12262     IF cur_vers_del_csr %ISOPEN THEN
12263       CLOSE cur_vers_del_csr;
12264     END IF;
12265 
12266     x_return_status := G_RET_STS_UNEXP_ERROR;
12267 
12268     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12269       FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12270     END IF;
12271 
12272     FND_MSG_PUB.Count_And_Get(
12273       p_count =>  x_msg_count,
12274       p_data  =>  x_msg_data
12275     );
12276 
12277 
12278 END deleteDeliverables;
12279 
12280 
12281 
12282 /**************************/
12283 
12284 END OKC_DELIVERABLE_PROCESS_PVT;