[Home] [Help]
PACKAGE BODY: APPS.OKC_DELIVERABLE_PROCESS_PVT
Source
1 PACKAGE BODY OKC_DELIVERABLE_PROCESS_PVT AS
2 /* $Header: OKCVDPRB.pls 120.16.12020000.22 2013/05/31 10:01:10 nbingi ship $ */
3
4 ---------------------------------------------------------------------------
5 -- package variables
6 ---------------------------------------------------------------------------
7 g_module CONSTANT VARCHAR2(250) := 'okc.plsql.'||g_pkg_name||'.';
8 ---------------------------------------------------------------------------
9 -- Procedures and Functions
10 ---------------------------------------------------------------------------
11
12 TYPE VerifiedEventsTbl IS TABLE OF OKC_BUS_DOC_EVENTS_B.bus_doc_event_id%TYPE
13 INDEX BY BINARY_INTEGER;
14
15 verifiedListOfEvents VerifiedEventsTbl;
16 evtCount PLS_INTEGER := 0;
17
18 /**
19 * Bug 5143307, Helper function to check if deliverable copy allowed on the target doc type
20 */
21 FUNCTION copy_allowed(p_deliverable_type IN VARCHAR2,
22 p_target_doc_type IN VARCHAR2,
23 p_target_contractual_doc_type IN VARCHAR2)
24 RETURN BOOLEAN
25 IS
26
27 CURSOR C_delTypeExists (x_deliverable_type VARCHAR2,
28 x_doc_type VARCHAR2) is
29 SELECT 'X'
30 FROM
31 okc_bus_doc_types_b doctyp,
32 okc_del_bus_doc_combxns deltypcomb
33 WHERE
34 doctyp.document_type_class = deltypcomb.document_type_class
35 AND doctyp.document_type = x_doc_type
36 AND deltypcomb.deliverable_type_code = x_deliverable_type;
37
38 l_api_name CONSTANT VARCHAR2(30) :='copy_allowed';
39 l_return_value BOOLEAN := FALSE;
40
41 C_delTypeExists_rec C_delTypeExists%ROWTYPE;
42 BEGIN
43
44 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
45 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_allowed (OVERLOADED) ');
46 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
47 ,'101: p_deliverable_type = '||p_deliverable_type);
48 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
49 ,'102: p_target_doc_type = '||p_target_doc_type);
50 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
51 ,'103: p_target_contractual_doc_type = '||p_target_contractual_doc_type);
52 END IF;
53
54 IF p_deliverable_type is null OR p_target_doc_type is null THEN
55 return l_return_value;
56 END IF;
57
58 -- first check if deliverable type is valid for the target document type
59 OPEN C_delTypeExists (p_deliverable_type, p_target_doc_type);
60 FETCH C_delTypeExists into C_delTypeExists_rec;
61
62 IF C_delTypeExists%FOUND THEN
63 l_return_value := TRUE;
64 ELSE
65 IF C_delTypeExists%ISOPEN THEN
66 CLOSE C_delTypeExists;
67 END IF;
68
69 -- check if deliverable type is valid for the target contractual document type
70 OPEN C_delTypeExists (p_deliverable_type, p_target_contractual_doc_type);
71 FETCH C_delTypeExists into C_delTypeExists_rec;
72
73 IF C_delTypeExists%FOUND THEN
74 l_return_value := TRUE;
75 ELSE
76 l_return_value := FALSE;
77 END IF;
78 END IF; -- IF C_delTypeExists%FOUND
79
80 IF C_delTypeExists%ISOPEN THEN
81 CLOSE C_delTypeExists;
82 END IF;
83
84 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
85 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
86 ,'104: Returning l_return_value = ');
87 END IF;
88 return l_return_value;
89
90 EXCEPTION
91 WHEN OTHERS THEN
92 IF C_delTypeExists%ISOPEN THEN
93 CLOSE C_delTypeExists;
94 END IF;
95 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
96 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
97 ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
98 END IF;
99
100 return l_return_value;
101
102 END copy_allowed;
103
104 /**
105 * Bug 5143307, Helper function to check if mapping of events required for the given deliverable
106 * type and on the target doc type
107 */
108 FUNCTION event_mapping_allowed(p_deliverable_type IN VARCHAR2,
109 p_target_doc_type IN VARCHAR2)
110 RETURN BOOLEAN
111 IS
112
113 CURSOR C_delTypeExists (x_deliverable_type VARCHAR2,
114 x_doc_type VARCHAR2) is
115 SELECT 'X'
116 FROM
117 okc_bus_doc_types_b doctyp,
118 okc_del_bus_doc_combxns deltypcomb
119 WHERE
120 doctyp.document_type_class = deltypcomb.document_type_class
121 AND doctyp.document_type = x_doc_type
122 AND deltypcomb.deliverable_type_code = x_deliverable_type;
123
124 l_api_name CONSTANT VARCHAR2(30) :='event_mapping_allowed';
125 l_return_value BOOLEAN := FALSE;
126
127 C_delTypeExists_rec C_delTypeExists%ROWTYPE;
128 BEGIN
129
130 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
131 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.event_mapping_allowed ');
132 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
133 ,'101: p_deliverable_type = '||p_deliverable_type);
134 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
135 ,'102: p_target_doc_type = '||p_target_doc_type);
136 END IF;
137
138 IF p_deliverable_type is null OR p_target_doc_type is null THEN
139 return l_return_value;
140 END IF;
141
142 -- check if deliverable type exists for the target document type
143 OPEN C_delTypeExists (p_deliverable_type, p_target_doc_type);
144 FETCH C_delTypeExists into C_delTypeExists_rec;
145
146 IF C_delTypeExists%FOUND THEN
147 l_return_value := TRUE;
148 ELSE
149 l_return_value := FALSE;
150 END IF; -- IF C_delTypeExists%FOUND
151
152 IF C_delTypeExists%ISOPEN THEN
153 CLOSE C_delTypeExists;
154 END IF;
155
156 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
157 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
158 ,'104: Returning l_return_value = ');
159 END IF;
160 return l_return_value;
161
162 EXCEPTION
163 WHEN OTHERS THEN
164 IF C_delTypeExists%ISOPEN THEN
165 CLOSE C_delTypeExists;
166 END IF;
167 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
168 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
169 ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
170 END IF;
171
172 return l_return_value;
173
174 END event_mapping_allowed;
175
176 /**
177 * Bug 5143307, Helper function to resolve target doc event id (start or end)
178 * for the given source doc event id
179 */
180 FUNCTION resolveTargetDocEvent(p_source_event_id IN NUMBER,
181 p_target_doc_type IN VARCHAR2) return NUMBER IS
182
183 CURSOR C_sourceEventCode (x_sourceEventId NUMBER) is
184 select business_event_code, before_after
185 from okc_bus_doc_events_b
186 where bus_doc_event_id = x_sourceEventId;
187
188 CURSOR C_targetEventId (x_sourceEventCode VARCHAR2,
189 x_targetBusDocType VARCHAR2,
190 x_sourceBeforeAfter VARCHAR2) is
191 select bus_doc_event_id
192 from okc_bus_doc_events_b
193 where business_event_code = x_sourceEventCode
194 and bus_doc_type = x_targetBusDocType
195 and before_after = x_sourceBeforeAfter;
196
197 CURSOR C_targetEventId2 (x_sourceEventCode VARCHAR2,
198 x_targetBusDocType VARCHAR2,
199 x_sourceBeforeAfter VARCHAR2) is
200 select bus_doc_event_id
201 from okc_bus_doc_events_b
202 where business_event_code = x_sourceEventCode
203 and before_after = x_sourceBeforeAfter
204 and bus_doc_type in (select target_response_doc_type from okc_bus_doc_types_b
205 where document_type = x_targetBusDocType);
206
207 l_api_name CONSTANT VARCHAR2(30) :='resolveTargetDocEvent';
208 l_source_event_code okc_bus_doc_events_b.business_event_code%TYPE:=null;
209 l_source_before_after okc_bus_doc_events_b.before_after%TYPE:=null;
210 l_target_event_id okc_bus_doc_events_b.bus_doc_event_id%TYPE:=null;
211
212 Begin
213 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
214 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
215 ,'100: Inside FUNCTION: resolveTargetDocEvent');
216 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
217 ,'101: p_source_event_id = '||p_source_event_id);
218 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
219 ,'102: p_target_doc_type = '||p_target_doc_type);
220 END IF;
221
222 IF p_source_event_id is null OR p_target_doc_type is null THEN
223 return null;
224 END IF;
225
226 -- get current source event code for the given event id
227 OPEN C_sourceEventCode (p_source_event_id);
228 FETCH C_sourceEventCode into l_source_event_code,l_source_before_after;
229 CLOSE C_sourceEventCode;
230
231 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
232 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
233 ,'103: Found l_source_event_code = '||l_source_event_code);
234 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
235 ,'103a: Found l_source_before_after = '||l_source_before_after);
236 END IF;
237
238 IF l_source_event_code is not null AND l_source_before_after is not null THEN
239 -- get target event id for the given source event code and target bus doc type
240 OPEN C_targetEventId (l_source_event_code, p_target_doc_type, l_source_before_after);
241 FETCH C_targetEventId into l_target_event_id;
242 CLOSE C_targetEventId;
243
244 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
245 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
246 ,'104: Found l_target_event_id = '||l_target_event_id);
247 END IF;
248
249 -- l_target_event_id is not resolved, it may be the case, p_target_doc_type
250 -- is a response doc type (AUCTION_RESPONSE, RFQ_RESPONSE, RFI_RESPONSE)
251 IF l_target_event_id is null THEN
252 -- get target event id for the given source event code and target
253 -- response doc type fetched from okc_bus_doc_types_b where doc_type
254 -- is p_target_doc_type
255 OPEN C_targetEventId2 (l_source_event_code, p_target_doc_type, l_source_before_after);
256 FETCH C_targetEventId2 into l_target_event_id;
257 CLOSE C_targetEventId2;
258
259 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
260 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
261 ,'105: Found l_target_event_id (RESPONSE DOC) = '||l_target_event_id);
262 END IF;
263 END IF; -- IF l_target_event_id is null
264 END IF; -- IF l_source_event_code is not null
265
266 return l_target_event_id;
267 EXCEPTION
268 WHEN OTHERS THEN
269 IF C_sourceEventCode%ISOPEN THEN
270 CLOSE C_sourceEventCode;
271 END IF;
272 IF C_targetEventId%ISOPEN THEN
273 CLOSE C_targetEventId;
274 END IF;
275 IF C_targetEventId2%ISOPEN THEN
276 CLOSE C_targetEventId2;
277 END IF;
278 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
279 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
280 ,'106: IN EXCEPTION '||substr(sqlerrm,1,200));
281 END IF;
282
283 return l_target_event_id;
284 END resolveTargetDocEvent;
285
286 /**
287 * Helper method to return the Document Type Class for a given Business Document Type
288 *
289 */
290
291 Function getDocTypeClass(p_bus_doctype IN VARCHAR2) return VARCHAR2 IS
292 cursor getDocClass is
293 select document_type_class
294 from okc_bus_doc_types_b
295 where document_type = p_bus_doctype;
296
297 l_doc_type_class OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE;
298
299 Begin
300 OPEN getDocClass;
301 FETCH getDocClass into l_doc_type_class;
302 If getDocClass%NOTFOUND then
303 l_doc_type_class := NULL;
304 End If;
305 CLOSE getDocClass;
306 return l_doc_type_class;
307 EXCEPTION
308 WHEN OTHERS THEN
309 If getDocClass%ISOPEN then
310 CLOSE getDocClass;
311 End If;
312 l_doc_type_class := NULL;
313 return l_doc_type_class;
314
315 End getDocTypeClass;
316
317 /**
318 * Helper Function to return all the attributes of a given Business Document Type
319 *
320 */
321 Function getBusDocTypeInfo(p_bus_doc_type IN VARCHAR2) RETURN BUSDOCTYPE_REC_TYPE IS
322
323 l_bus_doc_type_rec BUSDOCTYPE_REC_TYPE;
324 CURSOR getBusDocTypeInfo IS
325 select
326 document_type_class
327 ,intent
328 from
329 okc_bus_doc_types_b
330 where document_type = p_bus_doc_type;
331
332 Begin
333 OPEN getBusDocTypeInfo;
334 FETCH getBusDocTypeInfo into
335 l_bus_doc_type_rec.document_type_class
336 ,l_bus_doc_type_rec.document_type_intent;
337 If getBusDocTypeInfo%NOTFOUND then
338 l_bus_doc_type_rec.document_type_class := NULL;
339 l_bus_doc_type_rec.document_type_intent := NULL;
340 End If;
341 CLOSE getBusDocTypeInfo;
342
343 RETURN l_bus_doc_type_rec;
344
345 EXCEPTION
346 WHEN OTHERS THEN
347 If getBusDocTypeInfo%ISOPEN then
348 CLOSE getBusDocTypeInfo;
349 End If;
350 RETURN l_bus_doc_type_rec;
351
352 End getBusDocTypeInfo;
353
354 /**
355 * Helper method to return the Internal_flag for a given Deliverable_type and a given document type class
356 */
357 Function getDelTypeIntFlag(p_document_type_class IN VARCHAR2,
358 p_deliverable_type IN VARCHAR2) RETURN VARCHAR2 IS
359 -- updated cursor for bug#4069955
360 CURSOR getDelTypeIntFlag IS
361 select delTyp.internal_flag
362 from okc_deliverable_types_b delTyp,
363 okc_del_bus_doc_combxns delComb
364 where delTyp.deliverable_type_code = p_deliverable_type
365 and delComb.deliverable_type_code = delTyp.deliverable_type_code
366 and delComb.document_type_class = p_document_type_class;
367
368
369 l_del_type_int_flag OKC_DELIVERABLE_TYPES_B.INTERNAL_FLAG%TYPE;
370
371 Begin
372 OPEN getDelTypeIntFlag;
373 FETCH getDelTypeIntFlag into l_del_type_int_flag;
374 If getDelTypeIntFlag%NOTFOUND then
375 l_del_type_int_flag := NULL;
376 End If;
377 CLOSE getDelTypeIntFlag;
378 return l_del_type_int_flag;
379 EXCEPTION
380 WHEN OTHERS THEN
381 If getDelTypeIntFlag%ISOPEN then
382 close getDelTypeIntFlag;
383 End If;
384 l_del_type_int_flag := NULL;
385 return l_del_type_int_flag;
386 End getDelTypeIntFlag;
387
388 /**
389 * Helper method to return Event Code and Before After value for given
390 * event id, stored in OKC_DELIVERABLES
391 */
392 PROCEDURE getDelEventDetails(
393 p_event_id IN NUMBER,
394 p_end_event_yn IN varchar2,
395 x_event_name OUT NOCOPY VARCHAR2,
396 x_event_full_name OUT NOCOPY VARCHAR2)
397 IS
398 l_api_name CONSTANT VARCHAR2(30) := 'getDelEventDetails';
399
400 BEGIN
401 SELECT business_event_code, event_name into x_event_name, x_event_full_name
402 FROM OKC_BUS_DOC_EVENTS_V
403 WHERE bus_doc_event_id = p_event_id;
404 EXCEPTION
405 WHEN OTHERS THEN
406 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
407 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
408 END IF;
409 Okc_Api.Set_Message(G_APP_NAME,
410 'OKC_DEL_ERR_EVT_DTLS');
411 RAISE FND_API.G_EXC_ERROR;
412
413 END;
414
415 /* FUNCTION isQaMessageAlreadyExist(p_event_id NUMBER,
416 p_list_events_tbl VerifiedEventsTbl)
417 RETURN VARCHAR2
418 IS
419 BEGIN
420
421 IF p_list_events_tbl.count > 0 THEN
422 FOR k IN
423 p_list_events_tbl.FIRST..p_list_events_tbl.LAST LOOP
424
425 IF p_event_id = p_list_events_tbl(k) THEN
426 return 'Y';
427 END IF;
428 END LOOP;
429 END IF;
430
431 return 'N';
432 END isQaMessageAlreadyExist; */
433
434 /**
435 * Resolve date, for given event id and event codes/dates from table of records
436 */
437 FUNCTION resolveRelativeDueEvents(
438 p_bus_doc_date_events_tbl IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
439 p_event_id IN NUMBER,
440 p_end_event_yn IN VARCHAR2,
441 px_event_full_name OUT NOCOPY VARCHAR2,
442 px_not_matched_flag OUT NOCOPY VARCHAR2,
443 px_event_code OUT NOCOPY VARCHAR2)
444 return DATE
445 IS
446 l_api_name CONSTANT VARCHAR2(30) := 'resolveRelativeDueEvents';
447 l_del_event_name OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
448 l_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE := null;
449 l_actual_date DATE := NULL;
450 l_not_matched_flag varchar2(1) := 'Y';
451
452 BEGIN
453
454 -- start procedure
455 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
456 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered '||G_PKG_NAME ||'.'||l_api_name);
457 END IF;
458 IF p_event_id is NULL THEN
459 Okc_Api.Set_Message(G_APP_NAME,
460 'OKC_DEL_NOT_RSLV_EVTS');
461 RAISE FND_API.G_EXC_ERROR;
462
463 END IF;
464
465 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
466 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Calling getDelEventDetails');
467 END IF;
468
469 --- get current deliverable's end event details
470 getDelEventDetails(
471 p_event_id => p_event_id,
472 p_end_event_yn => p_end_event_yn,
473 x_event_name => l_del_event_name,
474 x_event_full_name => l_event_full_name);
475
476 px_event_full_name := l_event_full_name;
477 px_event_code := l_del_event_name;
478
479 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
480 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Finished getDelEventDetails - Event Name'||l_del_event_name);
481 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'102: Finished getDelEventDetails - Before After'||l_event_full_name);
482 END IF;
483
484 --- if relative, check for event name with the given event names
485 --- in table of records.
486 IF p_bus_doc_date_events_tbl.count <> 0 THEN
487 FOR k IN
488 p_bus_doc_date_events_tbl.FIRST..p_bus_doc_date_events_tbl.LAST LOOP
489 IF p_bus_doc_date_events_tbl(k).event_code = l_del_event_name THEN
490
491 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
492 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'103: Event Matched '||l_del_event_name);
493 END IF;
494
495 --- set the flag, that event is matched
496 l_not_matched_flag := 'N';
497
498 --- Calculate actual date
499 l_actual_date := p_bus_doc_date_events_tbl(k).event_date;
500 END IF;
501 END LOOP;
502 END IF;
503
504 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
505 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'104: Returning Resolved Date as '||l_actual_date);
506 END IF;
507 px_not_matched_flag := l_not_matched_flag;
508 return l_actual_date;
509
510 END; --- resolveRelativeDueEvents
511
512
513 -- This function checks if the given deliverable has an attachment
514 FUNCTION attachment_exists(
515 p_entity_name IN VARCHAR2
516 ,p_pk1_value IN VARCHAR2
517 ) RETURN BOOLEAN
518 IS
519 CURSOR att_cur IS
520 SELECT 'X'
521 FROM fnd_attached_documents
522 WHERE entity_name = p_entity_name
523 AND pk1_value = p_pk1_value;
524
525 att_rec att_cur%ROWTYPE;
526 l_return_value BOOLEAN := FALSE;
527 l_api_name VARCHAR2(30) := 'attachment_exists';
528
529 BEGIN
530
531 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
532 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.attachment_exists ');
533 END IF;
534 OPEN att_cur;
535 FETCH att_cur INTO att_rec;
536 IF att_cur%FOUND THEN
537 l_return_value := TRUE;
538 ELSE
539 l_return_value := FALSE;
540 END IF;
541 CLOSE att_cur;
542
543 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
544 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Leaving attachment_exists ');
545 END IF;
546
547 RETURN l_return_value;
548
549 EXCEPTION
550 WHEN OTHERS THEN
551 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
552 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving attachment_exists with Exception');
553 END IF;
554 IF att_cur %ISOPEN THEN
555 CLOSE att_cur ;
556 END IF;
557 RETURN l_return_value;
558 END attachment_exists;
559
560 /*** This API is invoked from OKC_TERMS_PVT.COPY_TC.
561 This API copies deliverables from one busdoc to another
562 of same type. Used in Sourcing amendment process.
563 1. Verify if the source and target business documents
564 are of same Class. If Not, raise error.
565 2. The procedure will query deliverables from source
566 business document WHERE amendment_operation is NOT 'DELETE'.
567 (The reson of this check: In case of RFQ, amendments operation
568 and descriptions are maintained in the current copy,
569 hence all deletes are just soft deletes.
570 So the copy procedure should not copy deliverables which
571 were deleted from the RFQ during amendment).
572 3. Create instances of deliverables for p_target_doc_id
573 and p_target_doc_type, definition copied from
574 p_source_doc_id and p_source_doc_type.
575 Carry forward original deliverable id. Copy attachments.
576 ***/
577 PROCEDURE copy_del_for_amendment (
578 p_api_version IN NUMBER,
579 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
580 p_source_doc_id IN NUMBER,
581 p_source_doc_type IN VARCHAR2,
582 p_target_doc_id IN NUMBER,
583 p_target_doc_type IN VARCHAR2,
584 p_target_doc_number IN VARCHAR2,
585 p_reset_fixed_date_yn IN VARCHAR2 ,
586 x_msg_data OUT NOCOPY VARCHAR2,
587 x_msg_count OUT NOCOPY NUMBER,
588 x_return_status OUT NOCOPY VARCHAR2,
589 p_copy_del_attachments_yn IN VARCHAR2 default 'Y',
590 p_target_contractual_doctype IN Varchar2 default null)
591 IS
592
593 -- used '*' in place of column list because the datastructure
594 -- declared as table%ROWTYPE is structured based on column positions
595 -- in the database. When the cursor is selected into the datastructure
596 -- there is a mismatch.
597 CURSOR del_cur IS
598 SELECT *
599 FROM OKC_DELIVERABLES
600 WHERE business_document_id = p_source_doc_id
601 AND business_document_type = p_source_doc_type
602 AND NVL(amendment_operation,'NONE') <> 'DELETED'
603 AND manage_yn = 'N'
604 AND recurring_del_parent_id is null;
605 del_rec del_cur%ROWTYPE;
606
607
608 CURSOR del_ins_cur(x NUMBER) IS
609 SELECT *
610 FROM okc_deliverables a
611 WHERE business_document_id = p_source_doc_id
612 AND business_document_type = p_source_doc_type
613 AND recurring_del_parent_id = x;
614 del_ins_rec del_ins_cur%ROWTYPE;
615
616 delRecTab delRecTabType;
617 delInsTab delRecTabType;
618 delNewTab delRecTabType;
619 l_api_name CONSTANT VARCHAR2(30) :='copy_del_for_amendment';
620 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
621 l_deliverable_id NUMBER;
622 l_from_pk1_value VARCHAR2(100);
623 l_result BOOLEAN;
624 l_copy_attachments VARCHAR2(1);
625 k PLS_INTEGER := 0;
626 m PLS_INTEGER := 0;
627 j PLS_INTEGER := 0;
628 q PLS_INTEGER := 0;
629 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
630 TYPE delIdTabType IS TABLE OF delIdRecType;
631 delIdTab delIdTabType;
632 l_recurring_del_parent_id NUMBER;
633
634 l_target_start_event_id okc_deliverables.relative_st_date_event_id%TYPE:=null;
635 l_target_end_event_id okc_deliverables.relative_end_date_event_id%TYPE:=null;
636
637 --Acq Plan Message Cleanup
638 l_resolved_msg_name VARCHAR2(30);
639 l_resolved_token VARCHAR2(100);
640 x_errorcode NUMBER;
641 BEGIN
642
643 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
644 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
645 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment'||
646 'p_source_doc_id = '||p_source_doc_id||
647 'p_source_doc_type = '||p_source_doc_type||
648 'p_target_doc_type = '||p_target_doc_type||
649 'p_target_doc_number = '||p_target_doc_number||
650 'p_reset_fixed_date_yn = '||p_reset_fixed_date_yn||
651 'p_copy_del_attachments_yn = '||p_copy_del_attachments_yn);
652 END IF;
653
654 -- initialize the table type variable
655 delIdTab := delIdTabType();
656
657 FOR del_rec IN del_cur LOOP
658 k := k+1;
659 delRecTab(k).deliverable_id := del_rec.deliverable_id;
660 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
661 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
662 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
663 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
664 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
665 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
666 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
667 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
668 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
669 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
670 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
671 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
672 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
673 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
674 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
675 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
676 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
677 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
678 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
679 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
680 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
681 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
682 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
683 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
684 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
685 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
686 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
687 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
688 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
689 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
690 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
691 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
692 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
693 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
694 delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
695 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
696 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
697 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
698 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
699 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
700 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
701 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
702 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
703 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
704 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
705 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
706 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
707 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
708 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
709 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
710 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
711 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
712 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
713 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
714 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
715 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
716 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
717 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
718 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
719 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
720 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
721 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
722 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
723 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
724 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
725 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
726 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
727 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
728 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
729 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
730 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
731 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
732 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
733 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
734 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
735 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
736 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
737 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
738 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
739 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
740 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
741 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
742 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
743 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
744 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
745 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
746
747 -- Support for Concurrent updates to deliverables
748 delRecTab(k).orig_system_reference_code:='COPY';
749 delRecTab(k).orig_system_reference_id1:= del_rec.deliverable_id;
750 delRecTab(k).orig_system_reference_id2:= null;
751 -- Support for Concurrent updates to deliverables
752 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
753
754 delRecTab(k).del_category_code := del_rec.del_category_code;
755 delRecTab(k).exhibit_code := del_rec.exhibit_code;
756 delRecTab(k).data_item_number:= del_rec.data_item_number;
757 delRecTab(k).price_group:= del_rec.price_group;
758 delRecTab(k).estimated_price:= del_rec.estimated_price;
759 delRecTab(k).uda_template_id:= del_rec.uda_template_id;
760 delRecTab(k).schedule_type:= del_rec.schedule_type;
761
762 END LOOP;
763
764 -- commented as this is not supported by 8i PL/SQL Bug#3307941
765 /*OPEN del_cur;
766 FETCH del_cur BULK COLLECT INTO delRecTab;*/
767 IF delRecTab.COUNT <> 0 THEN
768 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
769 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
770 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Inside loop'||to_char(delRecTab(i).deliverable_id));
771 END IF;
772
773 IF copy_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
774 p_target_doc_type => p_target_doc_type,
775 p_target_contractual_doc_type => p_target_contractual_doctype) THEN
776
777 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
778 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101a: Copy ALLOWED');
779 END IF;
780
781 j := j+1;
782 q := q+1;
783
784 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
785 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'102: deliverable table record = '||q);
786 END IF;
787
788 delNewTab(q) := delRecTab(i);
789
790 -- extend table type
791 delIdTab.extend;
792 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
793
794 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
795 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'103: deliverable IDs table record = '||j);
796 END IF;
797
798 select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
799
800 delNewTab(q).business_document_id := p_target_doc_id;
801 delNewTab(q).business_document_type := p_target_doc_type;
802 delNewTab(q).business_document_number := p_target_doc_number;
803
804 -- Bug 5143307, check if source and target do are not same
805 -- resolve source document relative due date events to target
806 -- document relative due date event
807 -- first initialize
808 l_target_start_event_id := null;
809 l_target_end_event_id := null;
810 IF p_source_doc_type <> p_target_doc_type
811 AND
812 event_mapping_allowed (p_deliverable_type => delRecTab(i).deliverable_type,
813 p_target_doc_type => p_target_doc_type) THEN
814
815 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
816 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'104: Source and Target docs are NOT SAME ');
817 END IF;
818
819 IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null THEN
820
821 -- resolve target start event id
822 l_target_start_event_id := resolveTargetDocEvent(
823 p_source_event_id => delRecTab(i).RELATIVE_ST_DATE_EVENT_ID,
824 p_target_doc_type => p_target_doc_type);
825 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
826 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'105: Found l_target_start_event_id = '||l_target_start_event_id);
827 END IF;
828
829 -- raise error if could not resolve target event id
830 IF l_target_start_event_id is null THEN
831 --Acq Plan Message Cleanup
832 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_COULD_NT_RESOLVE_EVT',del_rec.business_document_type);
833 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
834
835 /* Okc_Api.Set_Message(G_APP_NAME
836 ,'OKC_DEL_COULD_NT_RESOLVE_EVT');*/
837
838 Okc_Api.Set_Message(G_APP_NAME
839 ,l_resolved_msg_name,
840 p_token1 => 'DEL_TOKEN',
841 p_token1_value => l_resolved_token);
842 RAISE FND_API.G_EXC_ERROR;
843 END IF;
844 END IF; -- IF delRecTab(i).RELATIVE_ST_DATE_EVENT_ID is not null
845
846 IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null THEN
847 -- resolve target end event id
848 l_target_end_event_id := resolveTargetDocEvent(
849 p_source_event_id => delRecTab(i).RELATIVE_END_DATE_EVENT_ID,
850 p_target_doc_type => p_target_doc_type);
851
852 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
853 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'106: Found l_target_end_event_id = '||l_target_end_event_id);
854 END IF;
855
856 -- raise error if could not resolve target event id
857 IF l_target_end_event_id is null THEN
858
859 --Acq Plan Message Cleanup
860 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_COULD_NT_RESOLVE_EVT',del_rec.business_document_type);
861 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
862
863 /* Okc_Api.Set_Message(G_APP_NAME
864 ,'OKC_DEL_COULD_NT_RESOLVE_EVT');*/
865
866 Okc_Api.Set_Message(G_APP_NAME
867 ,l_resolved_msg_name,
868 p_token1 => 'DEL_TOKEN',
869 p_token1_value => l_resolved_token);
870
871 RAISE FND_API.G_EXC_ERROR;
872 END IF;
873 END IF; -- IF delRecTab(i).RELATIVE_END_DATE_EVENT_ID is not null
874
875 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
876 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'107: Setting NEW resolved Start Event and End Event Ids');
877 END IF;
878
879 -- set resolved start and event ids on new delRecTab
880 delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
881 delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
882 END IF; -- IF p_source_doc_type <> p_target_doc_type
883
884 -- bug#3489625 POCST: DELIVERABLE ATTACHMENTS ARE NOT COPIED TO AMENDMENT
885 delIdTab(j).del_id := delNewTab(q).deliverable_id;
886
887 -- store the deliverable_id to assign to the instances
888 l_recurring_del_parent_id := delNewTab(q).deliverable_id;
889
890 -- flush amendment operation attributes
891 delNewTab(q).amendment_operation:= null;
892 delNewTab(q).amendment_notes:= null;
893 delNewTab(q).summary_amend_operation_code:= null;
894
895 -- fix bug 3667895, carrying forward last amendment date during amendments
896 --delNewTab(q).last_amendment_date:= null;
897
898 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
899 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'108: Inside loop1'||to_char(delNewTab(q).deliverable_id));
900 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'109: q in def loop'||to_char(q));
901 END IF;
902
903 IF delRecTab(i).recurring_yn = 'N' THEN
904 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
905 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'110: Recurring?'||delRecTab(i).recurring_yn);
906 END IF;
907
908 -- initialize all resolved dates to null
909 delNewTab(q).start_event_date:= null;
910 delNewTab(q).end_event_date:= null;
911 delNewTab(q).actual_due_date:= null;
912
913 ELSIF delRecTab(i).recurring_yn = 'Y' THEN
914 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
915 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'111: Recurring?'||delRecTab(i).recurring_yn);
916 END IF;
917
918 --OPEN del_ins_cur(delRecTab(i).deliverable_id);
919 --Initialize the table with 0 rows
920 delInsTab.DELETE;
921 m := 0;
922 FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
923 m := m+1;
924 delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
925 delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
926 delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
927 delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
928 delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
929 delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
930 delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
931 delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
932 delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
933 delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
934 delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
935 delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
936 delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
937 delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
938 delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
939 delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
940 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
941 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
942 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
943 delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
944 delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
945 delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
946 delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
947 delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
948 delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
949 delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
950 delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
951 delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
952 delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
953 delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
954 delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
955 delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
956 delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
957 delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
958 delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
959 delInsTab(m).EXTERNAL_PARTY_ROLE := del_ins_rec.EXTERNAL_PARTY_ROLE;
960 delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
961 delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
962 delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
963 delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
964 delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
965 delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
966 delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
967 delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
968 delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
969 delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
970 delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
971 delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
972 delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
973 delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
974 delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
975 delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
976 delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
977 delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
978 delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
979 delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
980 delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
981 delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
982 delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
983 delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
984 delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
985 delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
986 delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
987 delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
988 delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
989 delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
990 delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
991 delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
992 delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
993 delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
994 delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
995 delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
996 delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
997 delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
998 delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
999 delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
1000 delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
1001 delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
1002 delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
1003 delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
1004 delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
1005 delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
1006 delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
1007 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
1008 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
1009 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
1010 delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
1011 delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
1012
1013 delInsTab(m).orig_system_reference_code :='COPY';
1014 delInsTab(m).orig_system_reference_id1 :=del_ins_rec.deliverable_id;
1015 delInsTab(m).orig_system_reference_id2 :=null;
1016
1017 delInsTab(m).del_category_code := del_ins_rec.del_category_code;
1018 delInsTab(m).exhibit_code := del_ins_rec.exhibit_code;
1019 delInsTab(m).data_item_number:= del_ins_rec.data_item_number;
1020 delInsTab(m).price_group:= del_ins_rec.price_group;
1021 delInsTab(m).estimated_price:= del_ins_rec.estimated_price;
1022
1023 delInsTab(m).uda_template_id:= del_ins_rec.uda_template_id;
1024 delInsTab(m).schedule_type:= del_ins_rec.schedule_type;
1025
1026 END LOOP;
1027 IF del_ins_cur %ISOPEN THEN
1028 CLOSE del_ins_cur ;
1029 END IF;
1030
1031 /****
1032 commented as this is not supported by 8i PL/SQL Bug#3307941
1033 OPEN del_ins_cur(delRecTab(i).deliverable_id);
1034 FETCH del_ins_cur BULK COLLECT INTO delInsTab;****/
1035
1036 IF delInsTab.COUNT <> 0 THEN
1037 FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
1038 j := j+1;
1039 q := q+1;
1040 delNewTab(q) := delInsTab(s);
1041
1042 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1043 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'112: Deliverable Instance record = '||q);
1044 END IF;
1045
1046 -- extend table type
1047 delIdTab.extend;
1048
1049 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
1050
1051 select okc_deliverable_id_s.nextval INTO delNewTab(q).deliverable_id from dual;
1052
1053 delNewTab(q).business_document_id := p_target_doc_id;
1054 delNewTab(q).business_document_type := p_target_doc_type;
1055 delNewTab(q).business_document_number := p_target_doc_number;
1056
1057 -- Bug 5143307, resolve target start and end events for
1058 -- recurring instances, assuming these events are already
1059 -- resolved above for recurring deliverable definition
1060 IF p_source_doc_type <> p_target_doc_type THEN
1061 IF l_target_start_event_id is not null THEN
1062 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1063 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'113: Setting Start Event Id on this instance = '||l_target_start_event_id);
1064 END IF;
1065
1066 delNewTab(q).RELATIVE_ST_DATE_EVENT_ID := l_target_start_event_id;
1067 END IF;
1068 IF l_target_end_event_id is not null THEN
1069 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1070 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'114: Setting End Event Id on this instance = '||l_target_end_event_id);
1071 END IF;
1072
1073 delNewTab(q).RELATIVE_END_DATE_EVENT_ID := l_target_end_event_id;
1074 END IF;
1075 END IF; -- IF p_source_doc_type <> p_target_doc_type
1076
1077 -- instantiate parent del id for the instances
1078 delNewTab(q).recurring_del_parent_id := l_recurring_del_parent_id;
1079 delIdTab(j).del_id := delNewTab(q).deliverable_id;
1080
1081 -- flush amendment operation attributes
1082 delNewTab(q).amendment_operation:= null;
1083 delNewTab(q).amendment_notes:= null;
1084 delNewTab(q).summary_amend_operation_code:= null;
1085 delNewTab(q).last_amendment_date:= null;
1086 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1087 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'115: Inside loop2'||to_char(delNewTab(q).deliverable_id));
1088 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'116: q in ins loop'||to_char(q));
1089 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'117: s in ins loop'||to_char(s));
1090 END IF;
1091 END LOOP;-- FOR s IN delInsTab.FIRST..delInsTab.LAST LOOP
1092 END IF; -- IF delInsTab.COUNT <> 0
1093 IF del_ins_cur %ISOPEN THEN
1094 CLOSE del_ins_cur ;
1095 END IF;
1096 END IF; -- ELSIF delRecTab(i).recurring_yn = 'Y'
1097 END IF; -- IF copy_allowed ()
1098 END LOOP; -- FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
1099 END IF;-- IF delRecTab.COUNT <> 0
1100 IF del_cur %ISOPEN THEN
1101 CLOSE del_cur ;
1102 END IF;
1103
1104 IF delNewTab.COUNT <> 0 THEN
1105 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1106 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'118: Before insert');
1107 END IF;
1108 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
1109 INSERT INTO okc_deliverables
1110 (DELIVERABLE_ID,
1111 BUSINESS_DOCUMENT_TYPE ,
1112 BUSINESS_DOCUMENT_ID ,
1113 BUSINESS_DOCUMENT_NUMBER ,
1114 DELIVERABLE_TYPE ,
1115 RESPONSIBLE_PARTY ,
1116 INTERNAL_PARTY_CONTACT_ID ,
1117 EXTERNAL_PARTY_CONTACT_ID ,
1118 DELIVERABLE_NAME ,
1119 DESCRIPTION ,
1120 COMMENTS ,
1121 DISPLAY_SEQUENCE ,
1122 FIXED_DUE_DATE_YN ,
1123 ACTUAL_DUE_DATE ,
1124 PRINT_DUE_DATE_MSG_NAME ,
1125 RECURRING_YN ,
1126 NOTIFY_PRIOR_DUE_DATE_VALUE ,
1127 NOTIFY_PRIOR_DUE_DATE_UOM ,
1128 NOTIFY_PRIOR_DUE_DATE_YN ,
1129 NOTIFY_COMPLETED_YN ,
1130 NOTIFY_OVERDUE_YN ,
1131 NOTIFY_ESCALATION_YN ,
1132 NOTIFY_ESCALATION_VALUE ,
1133 NOTIFY_ESCALATION_UOM ,
1134 ESCALATION_ASSIGNEE ,
1135 AMENDMENT_OPERATION ,
1136 PRIOR_NOTIFICATION_ID ,
1137 AMENDMENT_NOTES ,
1138 COMPLETED_NOTIFICATION_ID ,
1139 OVERDUE_NOTIFICATION_ID ,
1140 ESCALATION_NOTIFICATION_ID ,
1141 LANGUAGE ,
1142 ORIGINAL_DELIVERABLE_ID ,
1143 REQUESTER_ID ,
1144 EXTERNAL_PARTY_ID ,
1145 EXTERNAL_PARTY_ROLE ,
1146 RECURRING_DEL_PARENT_ID ,
1147 BUSINESS_DOCUMENT_VERSION ,
1148 RELATIVE_ST_DATE_DURATION ,
1149 RELATIVE_ST_DATE_UOM ,
1150 RELATIVE_ST_DATE_EVENT_ID ,
1151 RELATIVE_END_DATE_DURATION ,
1152 RELATIVE_END_DATE_UOM ,
1153 RELATIVE_END_DATE_EVENT_ID ,
1154 REPEATING_DAY_OF_MONTH ,
1155 REPEATING_DAY_OF_WEEK ,
1156 REPEATING_FREQUENCY_UOM ,
1157 REPEATING_DURATION ,
1158 FIXED_START_DATE ,
1159 FIXED_END_DATE ,
1160 MANAGE_YN ,
1161 INTERNAL_PARTY_ID ,
1162 DELIVERABLE_STATUS ,
1163 STATUS_CHANGE_NOTES ,
1164 CREATED_BY ,
1165 CREATION_DATE ,
1166 LAST_UPDATED_BY ,
1167 LAST_UPDATE_DATE ,
1168 LAST_UPDATE_LOGIN ,
1169 OBJECT_VERSION_NUMBER ,
1170 ATTRIBUTE_CATEGORY ,
1171 ATTRIBUTE1 ,
1172 ATTRIBUTE2 ,
1173 ATTRIBUTE3 ,
1174 ATTRIBUTE4 ,
1175 ATTRIBUTE5 ,
1176 ATTRIBUTE6 ,
1177 ATTRIBUTE7 ,
1178 ATTRIBUTE8 ,
1179 ATTRIBUTE9 ,
1180 ATTRIBUTE10 ,
1181 ATTRIBUTE11 ,
1182 ATTRIBUTE12 ,
1183 ATTRIBUTE13 ,
1184 ATTRIBUTE14 ,
1185 ATTRIBUTE15 ,
1186 DISABLE_NOTIFICATIONS_YN ,
1187 LAST_AMENDMENT_DATE ,
1188 BUSINESS_DOCUMENT_LINE_ID ,
1189 EXTERNAL_PARTY_SITE_ID ,
1190 START_EVENT_DATE ,
1191 END_EVENT_DATE ,
1192 SUMMARY_AMEND_OPERATION_CODE,
1193 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1194 PAY_HOLD_PRIOR_DUE_DATE_UOM,
1195 PAY_HOLD_PRIOR_DUE_DATE_YN,
1196 PAY_HOLD_OVERDUE_YN
1197 ,orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2,
1198 RAISE_COMPLETION_EVENT_YN,
1199 del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
1200 uda_template_id ,
1201 schedule_type
1202 )
1203 VALUES (
1204 delNewTab(i).DELIVERABLE_ID,
1205 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
1206 delNewTab(i).BUSINESS_DOCUMENT_ID ,
1207 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
1208 delNewTab(i).DELIVERABLE_TYPE ,
1209 delNewTab(i).RESPONSIBLE_PARTY ,
1210 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
1211 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
1212 delNewTab(i).DELIVERABLE_NAME ,
1213 delNewTab(i).DESCRIPTION ,
1214 delNewTab(i).COMMENTS ,
1215 delNewTab(i).DISPLAY_SEQUENCE ,
1216 delNewTab(i).FIXED_DUE_DATE_YN ,
1217 delNewTab(i).ACTUAL_DUE_DATE ,
1218 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
1219 delNewTab(i).RECURRING_YN ,
1220 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
1221 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
1222 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
1223 delNewTab(i).NOTIFY_COMPLETED_YN ,
1224 delNewTab(i).NOTIFY_OVERDUE_YN ,
1225 delNewTab(i).NOTIFY_ESCALATION_YN ,
1226 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
1227 delNewTab(i).NOTIFY_ESCALATION_UOM ,
1228 delNewTab(i).ESCALATION_ASSIGNEE ,
1229 delNewTab(i).AMENDMENT_OPERATION ,
1230 delNewTab(i).PRIOR_NOTIFICATION_ID ,
1231 delNewTab(i).AMENDMENT_NOTES ,
1232 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
1233 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
1234 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
1235 delNewTab(i).LANGUAGE ,
1236 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
1237 delNewTab(i).REQUESTER_ID ,
1238 delNewTab(i).EXTERNAL_PARTY_ID ,
1239 delNewTab(i).EXTERNAL_PARTY_ROLE ,
1240 delNewTab(i).RECURRING_DEL_PARENT_ID ,
1241 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
1242 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
1243 delNewTab(i).RELATIVE_ST_DATE_UOM ,
1244 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
1245 delNewTab(i).RELATIVE_END_DATE_DURATION ,
1246 delNewTab(i).RELATIVE_END_DATE_UOM ,
1247 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
1248 delNewTab(i).REPEATING_DAY_OF_MONTH ,
1249 delNewTab(i).REPEATING_DAY_OF_WEEK ,
1250 delNewTab(i).REPEATING_FREQUENCY_UOM ,
1251 delNewTab(i).REPEATING_DURATION ,
1252 delNewTab(i).FIXED_START_DATE ,
1253 delNewTab(i).FIXED_END_DATE ,
1254 delNewTab(i).MANAGE_YN ,
1255 delNewTab(i).INTERNAL_PARTY_ID ,
1256 delNewTab(i).DELIVERABLE_STATUS ,
1257 delNewTab(i).STATUS_CHANGE_NOTES ,
1258 delNewTab(i).CREATED_BY ,
1259 delNewTab(i).CREATION_DATE ,
1260 delNewTab(i).LAST_UPDATED_BY ,
1261 delNewTab(i).LAST_UPDATE_DATE ,
1262 delNewTab(i).LAST_UPDATE_LOGIN ,
1263 delNewTab(i).OBJECT_VERSION_NUMBER ,
1264 delNewTab(i).ATTRIBUTE_CATEGORY ,
1265 delNewTab(i).ATTRIBUTE1 ,
1266 delNewTab(i).ATTRIBUTE2 ,
1267 delNewTab(i).ATTRIBUTE3 ,
1268 delNewTab(i).ATTRIBUTE4 ,
1269 delNewTab(i).ATTRIBUTE5 ,
1270 delNewTab(i).ATTRIBUTE6 ,
1271 delNewTab(i).ATTRIBUTE7 ,
1272 delNewTab(i).ATTRIBUTE8 ,
1273 delNewTab(i).ATTRIBUTE9 ,
1274 delNewTab(i).ATTRIBUTE10 ,
1275 delNewTab(i).ATTRIBUTE11 ,
1276 delNewTab(i).ATTRIBUTE12 ,
1277 delNewTab(i).ATTRIBUTE13 ,
1278 delNewTab(i).ATTRIBUTE14 ,
1279 delNewTab(i).ATTRIBUTE15 ,
1280 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
1281 delNewTab(i).LAST_AMENDMENT_DATE ,
1282 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
1283 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
1284 delNewTab(i).START_EVENT_DATE ,
1285 delNewTab(i).END_EVENT_DATE ,
1286 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
1287 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
1288 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
1289 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
1290 delNewTab(i).PAY_HOLD_OVERDUE_YN
1291 ,delNewTab(i).orig_system_reference_code
1292 , delNewTab(i).orig_system_reference_id1
1293 , delNewTab(i).orig_system_reference_id2,
1294 delNewTab(i).RAISE_COMPLETION_EVENT_YN
1295 , delNewTab(i).del_category_code
1296 , delNewTab(i).exhibit_code
1297 , delNewTab(i).data_item_number
1298 , delNewTab(i).price_group
1299 , delNewTab(i).estimated_price
1300 , delNewTab(i).uda_template_id
1301 , delNewTab(i).schedule_type
1302 );
1303
1304 copy_deliverable_udas(
1305 delNewTab(i).orig_system_reference_id1,
1306 delNewTab(i).DELIVERABLE_ID,
1307 x_return_status,
1308 x_msg_count,
1309 x_msg_data,
1310 x_errorcode
1311 );
1312 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1313 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1314 END IF;
1315 END LOOP;
1316 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1317 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'119: New deliverables inserted');
1318 END IF;
1319 END IF; -- IF delNewTab.COUNT <> 0
1320
1321 -- copy any existing attachments if allowed
1322 IF p_copy_del_attachments_yn = 'Y' THEN
1323
1324 -- copy any existing attachments
1325 IF delIdTab.COUNT <> 0 THEN
1326 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1327 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1328 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Inside loop'||to_char(delIdTab(i).del_id));
1329 END IF;
1330 -- check if attachments exists
1331 IF attachment_exists(p_entity_name => G_ENTITY_NAME
1332 ,p_pk1_value => delIdTab(i).orig_del_id) THEN
1333
1334 -- copy attachments
1335 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
1336 fnd_attached_documents2_pkg.copy_attachments(
1337 X_from_entity_name => G_ENTITY_NAME,
1338 X_from_pk1_value => delIdTab(i).orig_del_id,
1339 X_to_entity_name => G_ENTITY_NAME,
1340 X_to_pk1_value => to_char(delIdTab(i).del_id),
1341 X_CREATED_BY => FND_GLOBAL.User_id,
1342 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
1343 );
1344 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1345 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'121: Attachments copied for delId: '||to_char(delIdTab(i).del_id));
1346 END IF;
1347 END IF; -- IF attachment_exists()
1348 END LOOP; -- FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
1349 END IF;--delRecTab.COUNT
1350 END IF; -- IF p_copy_del_attachments_yn = 'Y'
1351
1352 x_return_status := l_return_status;
1353 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1354 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'122: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment' );
1355 END IF;
1356
1357 EXCEPTION
1358 WHEN FND_API.G_EXC_ERROR THEN
1359 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1360 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_ERROR');
1361 END IF;
1362 IF del_cur %ISOPEN THEN
1363 CLOSE del_cur ;
1364 END IF;
1365 x_return_status := G_RET_STS_ERROR;
1366 FND_MSG_PUB.Count_And_Get(
1367 p_count => x_msg_count,
1368 p_data => x_msg_data
1369 );
1370 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1371 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1372 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
1373 END IF;
1374 IF del_cur %ISOPEN THEN
1375 CLOSE del_cur ;
1376 END IF;
1377 x_return_status := G_RET_STS_UNEXP_ERROR;
1378 FND_MSG_PUB.Count_And_Get(
1379 p_count => x_msg_count,
1380 p_data => x_msg_data
1381 );
1382
1383 WHEN OTHERS THEN
1384 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1385 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_del_for_amendment with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
1386 END IF;
1387 IF del_cur %ISOPEN THEN
1388 CLOSE del_cur ;
1389 END IF;
1390 x_return_status := G_RET_STS_UNEXP_ERROR;
1391 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1392 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1393 END IF;
1394 FND_MSG_PUB.Count_And_Get(
1395 p_count => x_msg_count,
1396 p_data => x_msg_data
1397 );
1398 END copy_del_for_amendment;
1399
1400
1401 -- this function checks if the a bus_doc_event exists
1402 -- for a given combination of busdoc_type and event_id
1403 FUNCTION event_matches(
1404 p_bus_doc_type IN VARCHAR2
1405 ,p_event_id IN NUMBER)
1406 RETURN BOOLEAN
1407 IS
1408
1409 CURSOR event_cur
1410 IS
1411 SELECT 'X'
1412 FROM okc_bus_doc_events_b
1413 WHERE bus_doc_type = p_bus_doc_type
1414 AND bus_doc_event_id = p_event_id;
1415
1416 event_rec event_cur%ROWTYPE;
1417 l_api_name CONSTANT VARCHAR2(30) := 'event_matches';
1418 l_return_value BOOLEAN := FALSE;
1419
1420 BEGIN
1421
1422 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1423 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.event_matches');
1424 END IF;
1425 OPEN event_cur;
1426 FETCH event_cur INTO event_rec;
1427 IF event_cur%FOUND THEN
1428 l_return_value := TRUE;
1429 ELSE
1430 l_return_value := FALSE;
1431 END IF;
1432 CLOSE event_cur;
1433 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1434 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: Leaving event_matches');
1435 END IF;
1436 RETURN l_return_value;
1437 EXCEPTION
1438 WHEN OTHERS THEN
1439 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1440 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving event_matches with Exception');
1441 END IF;
1442 IF event_cur %ISOPEN THEN
1443 CLOSE event_cur ;
1444 END IF;
1445 RETURN l_return_value;
1446 END event_matches;
1447
1448
1449 -- function returns Y if the busdoc type and
1450 -- deliverable type belong to the same class
1451 FUNCTION deltype_matches(p_del_type IN VARCHAR2
1452 ,p_busdoc_type IN VARCHAR2)
1453 RETURN VARCHAR2
1454 IS
1455
1456 /*
1457 CURSOR delType_cur IS
1458 select 'Y'
1459 FROM okc_bus_doc_types_b docType,
1460 okc_del_bus_doc_combxns bdc
1461 WHERE docType.document_type_class = bdc.document_type_class
1462 AND docType.document_type = p_busdoc_type
1463 and bdc.deliverable_type = p_del_type;
1464 */
1465 --Repository change: Changed cursor to look at okc_deliverable_types_b
1466 -- updated cursor for bug#4069955
1467 CURSOR delType_cur IS
1468 select 'Y'
1469 FROM
1470 okc_bus_doc_types_b doctyp
1471 ,okc_del_bus_doc_combxns deltyp
1472 where
1473 doctyp.document_type_class = deltyp.document_type_class
1474 AND doctyp.document_type = p_busdoc_type
1475 AND deltyp.deliverable_type_code = p_del_type;
1476
1477 l_deltype_matches VARCHAR2(1);
1478 l_api_name CONSTANT VARCHAR2(30) := 'deltype_matches';
1479
1480 BEGIN
1481
1482 OPEN delType_cur;
1483 FETCH delType_cur INTO l_deltype_matches;
1484 CLOSE delType_cur;
1485 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1486 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: DelType Matches is :'||l_deltype_matches);
1487 END IF;
1488 RETURN(l_deltype_matches);
1489
1490 EXCEPTION
1491 WHEN OTHERS THEN
1492 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1493 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving Deltype_Matches with Exception');
1494 END IF;
1495 IF delType_cur %ISOPEN THEN
1496 CLOSE delType_cur ;
1497 END IF;
1498 RETURN(l_deltype_matches);
1499
1500 END deltype_matches;
1501
1502
1503 /* Checks if the relative deliverable can be copied over to target document
1504 based on start or end date event matching the target response document type.
1505 Fixed date deliverables are copied over even if the dates are null.
1506 */
1507 ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1508 -- where fixed dates are nulled out
1509 -- bug#3675608 added new param p_target_doctype to check if recurring del end event
1510 -- matches target_doctype.
1511
1512 FUNCTION copy_response_allowed (p_delrec IN okc_deliverables%ROWTYPE
1513 ,p_target_response_doctype IN VARCHAR2
1514 ,p_target_doctype IN VARCHAR2
1515 ) RETURN VARCHAR2
1516 IS
1517 l_copy VARCHAR2(1);
1518 l_start_copy VARCHAR2(1);
1519 l_end_copy VARCHAR2(1);
1520 l_api_name CONSTANT VARCHAR2(30) := 'copy_response_allowed';
1521
1522 BEGIN
1523
1524 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1525 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' 100: Inside copy_response_allowed ');
1526 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1527 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn is :'||p_delrec.fixed_due_date_yn);
1528 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_response_doctype is :'||p_target_response_doctype);
1529 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name is :'||p_delrec.deliverable_name);
1530 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id is :'||p_delrec.deliverable_id);
1531 END IF;
1532 --If not a recurring deliverable
1533 IF p_delrec.recurring_yn = 'N' THEN
1534 IF p_delrec.fixed_due_date_yn = 'Y' THEN
1535 -- copy deliverable as is
1536 l_copy := 'Y';
1537 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1538 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1539 END IF;
1540 ELSE -- p_delrec.fixed_due_date_yn = 'N'
1541 IF p_delrec.relative_st_date_event_id is not null THEN
1542 -- match the event doctype to target doctype
1543 IF p_target_response_doctype is not null THEN
1544 -- match the event doctype to p_target_response_doctype
1545 IF event_matches(p_target_response_doctype
1546 ,p_delrec.relative_st_date_event_id) THEN
1547 --copy deliverable
1548 l_copy := 'Y';
1549 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1550 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1551 '100: msg3 :'||l_copy);
1552 END IF;
1553 END IF; -- event_matches
1554 ELSE
1555 l_copy :='N';
1556 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1557 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1558 '100: msg4 :'||l_copy);
1559 END IF;
1560 END IF; -- event_matches
1561 ELSE -- start event id is null
1562 l_copy := 'Y';
1563 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1564 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1565 '100: msg5 :'||l_copy);
1566 END IF;
1567 END IF; -- p_delrec.relative_st_date_event_id is not null
1568
1569 END IF; -- fixed_due_date_yn = 'Y'
1570 --------------------------------------------------------
1571 --If recurring deliverable
1572 ELSIF p_delrec.recurring_yn = 'Y' THEN
1573 l_end_copy := null;
1574 l_start_copy := null;
1575 -- check if the recurring del has a fixed start or end date
1576 IF p_delrec.fixed_start_date is not null THEN
1577 IF p_delrec.fixed_end_date is not null THEN
1578 --copy deliverables
1579 l_end_copy := 'Y';
1580 l_start_copy := 'Y';
1581 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1582 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1583 '100: msg6 : both are Y');
1584 END IF;
1585 ELSE -- fixed end date is null
1586 IF p_delrec.relative_end_date_event_id is not null THEN
1587 IF p_target_response_doctype is not null THEN
1588 -- match the event doctype to p_target_response_doctype
1589 IF event_matches(p_target_response_doctype
1590 ,p_delrec.relative_end_date_event_id) THEN
1591 --copy deliverable
1592 l_end_copy := 'Y';
1593 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1594 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1595 '100: end msg2 :'||l_end_copy);
1596 END IF;
1597 END IF;
1598 ELSE
1599 l_end_copy := 'N';
1600 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1601 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1602 '100: end msg3 :'||l_end_copy);
1603 END IF;
1604 END IF; -- event matches
1605 ELSE -- end date event is null
1606 l_end_copy := 'Y';
1607 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1608 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1609 '100: end msg4 :'||l_end_copy);
1610 END IF;
1611 END IF; -- end_date event is not null
1612 END IF; -- fixed_end_date is not null
1613 l_start_copy := 'Y';
1614 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1615 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1616 '100: start msg5 :'||l_start_copy);
1617 END IF;
1618 ELSE -- fixed start date is null
1619 IF p_delrec.relative_st_date_event_id is not null THEN
1620 IF p_target_response_doctype is not null THEN
1621 IF event_matches(p_target_response_doctype
1622 ,p_delrec.relative_st_date_event_id) THEN
1623 --copy deliverable
1624 l_start_copy := 'Y';
1625 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1626 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1627 '100: start msg2 :'||l_start_copy);
1628 END IF;
1629 END IF;
1630 ELSE
1631 l_start_copy := 'N';
1632 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1633 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1634 '100: start msg3 :'||l_start_copy);
1635 END IF;
1636 END IF;
1637 ELSE -- start date event id is null
1638 l_start_copy := 'Y';
1639 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1640 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1641 '100: start msg4 :'||l_start_copy);
1642 END IF;
1643 END IF; -- st event id is not null
1644 IF p_delrec.fixed_end_date is null THEN
1645 IF p_delrec.relative_end_date_event_id is not null THEN
1646 IF p_target_response_doctype is not null THEN
1647 -- match the event doctype to p__doctype
1648 IF event_matches(p_target_response_doctype
1649 ,p_delrec.relative_end_date_event_id) THEN
1650 --copy deliverable
1651 l_end_copy := 'Y';
1652 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1653 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1654 '100: start end msg2 :'||l_end_copy);
1655 END IF;
1656 ELSE -- event_matches is not true
1657 --check for target_contractual bug#3675608
1658 IF event_matches(p_target_doctype
1659 ,p_delrec.relative_end_date_event_id) THEN
1660 --copy deliverable
1661 l_end_copy := 'Y';
1662 END IF;
1663 END IF; -- event_matches
1664
1665 ELSE
1666 l_end_copy := 'N';
1667 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1668 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1669 '100: start end msg3 :'||l_end_copy);
1670 END IF;
1671 END IF; -- event matches
1672 ELSE -- end event id is null
1673 l_end_copy := 'Y';
1674 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1675 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1676 '100: start end msg4 :'||l_end_copy);
1677 END IF;
1678 END IF; -- end event id is not null
1679 ELSE -- fixed end date is not null
1680 l_end_copy := 'Y';
1681 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1682 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1683 '100: start end msg5 :'||l_end_copy);
1684 END IF;
1685 END IF; -- fixed end date is null
1686
1687 END IF; -- fixed st date is null
1688 IF l_end_copy = 'Y' AND
1689 l_start_copy = 'Y' THEN
1690 l_copy := 'Y';
1691 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1692 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1693 '100: final msg1 :'||l_copy);
1694 END IF;
1695 ELSE
1696 l_copy := 'N';
1697 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1698 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1699 '100: final msg2 :'||l_copy);
1700 END IF;
1701 END IF;
1702 END IF; -- recurring yn
1703 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1704 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1705 END IF;
1706 RETURN(l_copy);
1707 END copy_response_allowed;
1708
1709 ------------------
1710 /* Checks if the relative deliverable can be copied over to target document
1711 based on start or end date event matching the target document type or
1712 target contractual document type. Fixed date deliverables are copied over
1713 even if the dates are null.
1714 */
1715 ---bug#3594008 redid copy allowed to handle recurring contractual deliverables
1716 -- where fixed dates are nulled out
1717 FUNCTION copy_allowed (p_delrec IN okc_deliverables%ROWTYPE,
1718 p_target_doc_type IN VARCHAR2,
1719 p_target_contractual_doctype IN VARCHAR2
1720 ) RETURN VARCHAR2
1721 IS
1722 l_copy VARCHAR2(1);
1723 l_start_copy VARCHAR2(1);
1724 l_end_copy VARCHAR2(1);
1725 l_api_name CONSTANT VARCHAR2(30) := 'copy_allowed';
1726
1727 BEGIN
1728
1729 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1730 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Inside copy_allowed' );
1731 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' recurring_yn is :'||p_delrec.recurring_yn);
1732 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' fixed_due_date_yn :'||p_delrec.fixed_due_date_yn);
1733 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' target doc type :'||p_target_doc_type);
1734 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' p_target_contractual_doctype :'||p_target_contractual_doctype);
1735 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable name :'||p_delrec.deliverable_name);
1736 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,' deliverable id :'||p_delrec.deliverable_id);
1737 END IF;
1738 --If not a recurring deliverable
1739 IF p_delrec.recurring_yn = 'N' THEN
1740 IF p_delrec.fixed_due_date_yn = 'Y' THEN
1741 -- copy deliverable as is
1742 l_copy := 'Y';
1743 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1744 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: msg1 :'||l_copy);
1745 END IF;
1746 ELSE -- p_delrec.fixed_due_date_yn = 'N'
1747 IF p_delrec.relative_st_date_event_id is not null THEN
1748 -- match the event doctype to target doctype
1749 IF event_matches(p_target_doc_type
1750 ,p_delrec.relative_st_date_event_id) THEN
1751 --copy deliverable
1752 l_copy := 'Y';
1753 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1754 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1755 '100: msg2 :'||l_copy);
1756 END IF;
1757 ELSE
1758 l_copy :='N';
1759 IF p_target_contractual_doctype is not null THEN
1760 -- match the event doctype to p_target_contractual_doctype
1761 IF event_matches(p_target_contractual_doctype
1762 ,p_delrec.relative_st_date_event_id) THEN
1763 --copy deliverable
1764 l_copy := 'Y';
1765 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1766 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1767 '100: msg3 :'||l_copy);
1768 END IF;
1769 END IF; -- event_matches
1770 END IF; -- p_target_contractual_doctype is not null
1771 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1772 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1773 '100: msg4 :'||l_copy);
1774 END IF;
1775 END IF; -- event_matches
1776 ELSE -- start event id is null
1777 l_copy := 'Y';
1778 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1779 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1780 '100: msg5 :'||l_copy);
1781 END IF;
1782 END IF; -- p_delrec.relative_st_date_event_id is not null
1783
1784 END IF; -- fixed_due_date_yn = 'Y'
1785 --------------------------------------------------------
1786 --If recurring deliverable
1787 ELSIF p_delrec.recurring_yn = 'Y' THEN
1788 l_end_copy := null;
1789 l_start_copy := null;
1790 -- check if the recurring del has a fixed start or end date
1791 IF p_delrec.fixed_start_date is not null THEN
1792 IF p_delrec.fixed_end_date is not null THEN
1793 --copy deliverables
1794 l_end_copy := 'Y';
1795 l_start_copy := 'Y';
1796 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1797 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1798 '100: msg6 : both are Y');
1799 END IF;
1800 ELSE -- fixed end date is null
1801 IF p_delrec.relative_end_date_event_id is not null THEN
1802 IF event_matches(p_target_doc_type
1803 ,p_delrec.relative_end_date_event_id) THEN
1804 --copy deliverable
1805 l_end_copy := 'Y';
1806 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1807 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1808 '100: end msg1 :'||l_end_copy);
1809 END IF;
1810 ELSE
1811 l_end_copy := 'N';
1812 IF p_target_contractual_doctype is not null THEN
1813 -- match the event doctype to p_target_contractual_doctype
1814 IF event_matches(p_target_contractual_doctype
1815 ,p_delrec.relative_end_date_event_id) THEN
1816 --copy deliverable
1817 l_end_copy := 'Y';
1818 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1819 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1820 '100: end msg2 :'||l_end_copy);
1821 END IF;
1822 END IF;
1823 END IF;
1824 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1825 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1826 '100: end msg3 :'||l_end_copy);
1827 END IF;
1828 END IF; -- event matches
1829 ELSE -- end date event is null
1830 l_end_copy := 'Y';
1831 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1832 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1833 '100: end msg4 :'||l_end_copy);
1834 END IF;
1835 END IF; -- end_date event is not null
1836 END IF; -- fixed_end_date is not null
1837 l_start_copy := 'Y';
1838 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1839 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1840 '100: start msg5 :'||l_start_copy);
1841 END IF;
1842 ELSE -- fixed start date is null
1843 IF p_delrec.relative_st_date_event_id is not null THEN
1844 IF event_matches(p_target_doc_type
1845 ,p_delrec.relative_st_date_event_id) THEN
1846 --copy deliverable
1847 l_start_copy := 'Y';
1848 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1849 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1850 '100: start msg1 :'||l_start_copy);
1851 END IF;
1852 ELSE
1853 l_start_copy := 'N';
1854 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1855 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1856 '100: start msg2 :'||l_start_copy);
1857 END IF;
1858 IF p_target_contractual_doctype is not null THEN
1859 IF event_matches(p_target_contractual_doctype
1860 ,p_delrec.relative_st_date_event_id) THEN
1861 --copy deliverable
1862 l_start_copy := 'Y';
1863 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1864 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1865 '100: start msg3 :'||l_start_copy);
1866 END IF;
1867 END IF; -- event matches
1868 END IF; -- target contractual not null
1869 END IF; -- event matches
1870 ELSE -- start date event id is null
1871 l_start_copy := 'Y';
1872 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1873 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1874 '100: start msg4 :'||l_start_copy);
1875 END IF;
1876 END IF; -- st event id is not null
1877 IF p_delrec.fixed_end_date is null THEN
1878 IF p_delrec.relative_end_date_event_id is not null THEN
1879 IF event_matches(p_target_doc_type
1880 ,p_delrec.relative_end_date_event_id) THEN
1881 --copy deliverable
1882 l_end_copy := 'Y';
1883 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1884 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1885 '100: start end msg1 :'||l_end_copy);
1886 END IF;
1887 ELSE
1888 l_end_copy := 'N';
1889 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1890 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1891 '100: start end msg2 :'||l_end_copy);
1892 END IF;
1893 IF p_target_contractual_doctype is not null THEN
1894 -- match the event doctype to p_target_contractual_doctype
1895 IF event_matches(p_target_contractual_doctype
1896 ,p_delrec.relative_end_date_event_id) THEN
1897 --copy deliverable
1898 l_end_copy := 'Y';
1899 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1900 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1901 '100: start end msg3 :'||l_end_copy);
1902 END IF;
1903 END IF; -- event matches
1904 END IF; -- target contractual not null
1905 END IF; -- event matches
1906 ELSE -- end event id is null
1907 l_end_copy := 'Y';
1908 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1909 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1910 '100: start end msg4 :'||l_end_copy);
1911 END IF;
1912 END IF; -- end event id is not null
1913 ELSE -- fixed end date is not null
1914 l_end_copy := 'Y';
1915 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1916 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1917 '100: start end msg5 :'||l_end_copy);
1918 END IF;
1919 END IF; -- fixed end date is null
1920
1921 END IF; -- fixed st date is null
1922 IF l_end_copy = 'Y' AND
1923 l_start_copy = 'Y' THEN
1924 l_copy := 'Y';
1925 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1926 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1927 '100: final msg1 :'||l_copy);
1928 END IF;
1929 ELSE
1930 l_copy := 'N';
1931 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1932 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
1933 '100: final msg2 :'||l_copy);
1934 END IF;
1935 END IF;
1936 END IF; -- recurring yn
1937 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1938 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: final msg3 :'||l_copy);
1939 END IF;
1940 RETURN(l_copy);
1941 END copy_allowed;
1942 ----------------------------------------------------------
1943
1944 /*** This API is invoked from OKC_TERMS_PVT.COPY_TC.
1945 Copies deliverables from source to target documents
1946 Template to template, Template to Business document
1947 Busdoc to busdoc of same or different types.
1948 The procedure will query deliverables from source
1949 business document WHERE amendment_operation is NOT 'DELETE'.
1950 (The reason of this check: In case of RFQ, amendments operation
1951 and descriptions are maintained in the current copy,
1952 hence all deletes are just soft deletes.
1953 So the copy procedure should not copy deliverables which
1954 were deleted from the RFQ during amendment).
1955 Bug#4126344
1956 p_carry_forward_ext_party_yn: If set to Y carry forward following attributes
1957 from source doc in busdoc to busdoc copy
1958 external_party_contact_id,
1959 external_party_id,
1960 external_party_site_id,
1961 external_party_role
1962 Else reset from parameters
1963 p_carry_forward_int_contact_yn: If set to Y carry forward following attributes from source doc in busdoc to busdoc copy
1964 internal_party_contact_id,
1965 ***/
1966
1967 PROCEDURE copy_deliverables (
1968 p_api_version IN NUMBER,
1969 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
1970 p_source_doc_id IN NUMBER,
1971 p_source_doc_type IN VARCHAR2,
1972 p_target_doc_id IN NUMBER,
1973 p_target_doc_type IN VARCHAR2,
1974 p_target_doc_number IN VARCHAR2,
1975 p_target_contractual_doctype IN VARCHAR2 default null,
1976 p_target_response_doctype IN VARCHAR2 default null,
1977 p_initialize_status_yn IN VARCHAR2 default 'Y',
1978 p_copy_del_attachments_yn IN VARCHAR2 default 'Y',
1979 p_internal_party_id IN NUMBER default null,
1980 p_reset_fixed_date_yn IN VARCHAR2 default 'N',
1981 p_internal_contact_id IN NUMBER default null,
1982 p_external_party_id IN NUMBER default null,
1983 p_external_party_site_id IN NUMBER default null,
1984 p_external_contact_id IN NUMBER default null,
1985 x_msg_data OUT NOCOPY VARCHAR2,
1986 x_msg_count OUT NOCOPY NUMBER,
1987 x_return_status OUT NOCOPY VARCHAR2,
1988 p_carry_forward_ext_party_yn IN VARCHAR2 default 'N',
1989 p_carry_forward_int_contact_yn IN VARCHAR2 default 'Y'
1990 --,p_add_only_amend_deliverables IN VARCHAR2 := 'N'
1991 ,P_RETAIN_LOCK_DELIVERABLES_YN IN VARCHAR2 DEFAULT 'N'
1992 )
1993 IS
1994 CURSOR del_cur IS
1995 SELECT *
1996 FROM OKC_DELIVERABLES s
1997 WHERE business_document_id = p_source_doc_id
1998 AND business_document_version = -99
1999 AND business_document_type = p_source_doc_type
2000 AND NVL(amendment_operation,'NONE')<> 'DELETED'
2001 AND NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
2002 AND recurring_del_parent_id is null
2003 /* AND (( p_add_only_amend_deliverables = 'N')
2004 OR
2005 ( p_add_only_amend_deliverables = 'Y'
2006 AND amendment_operation IS NOT NULL
2007 )) */
2008 AND ( (p_source_doc_type <> 'TEMPLATE')
2009 OR
2010 ( p_source_doc_type = 'TEMPLATE'
2011 AND NOT EXISTS ( SELECT 'Y'
2012 FROM okc_deliverables t
2013 WHERE t.original_deliverable_id = s.original_deliverable_id
2014 AND t.business_document_type = p_target_doc_type
2015 AND t.business_document_id = p_target_doc_id
2016 AND t.business_document_version = -99
2017 )
2018 )
2019 )
2020 AND (
2021 (P_RETAIN_LOCK_DELIVERABLES_YN = 'N')
2022 OR
2023 ( P_RETAIN_LOCK_DELIVERABLES_YN = 'Y'
2024 AND NOT EXISTS ( SELECT 'LOCKEXISTS'
2025 FROM okc_k_entity_locks
2026 WHERE entity_name='DELIVERABLE'
2027 AND entity_pk1 = To_Char(s.deliverable_id)
2028 AND lock_by_document_type=p_target_doc_type
2029 AND lock_by_document_id=p_target_doc_id
2030 )
2031 )
2032 )
2033 ;
2034
2035 delRecTab delRecTabType;
2036 delNewTab delRecTabType;
2037 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
2038 TYPE delIdTabType IS TABLE OF delIdRecType;
2039 delIdTab delIdTabType;
2040 j PLS_INTEGER := 0;
2041 k PLS_INTEGER := 0;
2042 l_api_name CONSTANT VARCHAR2(30) :='copy_deliverables';
2043 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
2044 l_deliverable_id NUMBER;
2045 l_from_pk1_value VARCHAR2(100);
2046 l_result BOOLEAN;
2047 l_copy VARCHAR2(1) := 'N';
2048 l_copy_attachments VARCHAR2(1) := 'N';
2049 --ER strivedi
2050 l_doc_type_class okc_bus_doc_types_b.document_type_class%TYPE;
2051 l_ccc_event_id number;
2052
2053 -- 11.5.10+ code bug#4148082
2054 cursor getExtPartyRole is
2055 select resp.resp_party_code
2056 from okc_resp_parties_b resp, okc_bus_doc_types_b busdoc
2057 where resp.document_type_class = busdoc.document_type_class
2058 and resp.intent = busdoc.intent
2059 and resp.internal_external_flag = 'EXTERNAL'
2060 and busdoc.document_type = p_target_doc_type;
2061 l_ext_party_role okc_resp_parties_b.resp_party_code%TYPE;
2062
2063 --ER Structured Terms Authoring in Repository strivedi
2064 CURSOR getRepDefaultInternalContactId IS
2065 SELECT pf.person_id contact_id
2066 FROM per_all_workforce_v pf,fnd_user fu
2067 WHERE fu.user_id = fnd_global.user_id
2068 AND pf.person_id = fu.employee_id;
2069 l_rep_dflt_int_contact_id okc_deliverables.INTERNAL_PARTY_CONTACT_ID%TYPE;
2070 --End of ER Code Modifications
2071 x_errorcode NUMBER;
2072 BEGIN
2073 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2074 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
2075 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
2076 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
2077 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target contractual doctype:'||p_target_contractual_doctype);
2078 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: target response doctype:'||p_target_response_doctype);
2079 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: P_RETAIN_LOCK_DELIVERABLES_YN :'||P_RETAIN_LOCK_DELIVERABLES_YN);
2080
2081 END IF;
2082 -- initialize the table type variable
2083 delIdTab := delIdTabType();
2084
2085 FOR del_rec IN del_cur LOOP
2086
2087 k := k+1;
2088 delRecTab(k).deliverable_id := del_rec.deliverable_id;
2089 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
2090 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
2091 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
2092 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
2093 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
2094 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
2095 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
2096 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
2097 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
2098 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
2099 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
2100 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
2101 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
2102 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
2103 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
2104 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
2105 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
2106 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
2107 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
2108 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
2109 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
2110 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
2111 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
2112 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
2113 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
2114 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
2115 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
2116 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
2117 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
2118 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
2119 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
2120 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
2121 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
2122 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
2123 delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
2124 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
2125 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
2126 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
2127 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
2128 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
2129 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
2130 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
2131 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
2132 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
2133 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
2134 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
2135 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
2136 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
2137 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
2138 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
2139 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
2140 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
2141 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
2142 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
2143 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
2144 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
2145 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
2146 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
2147 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
2148 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
2149 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
2150 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
2151 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
2152 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
2153 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
2154 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
2155 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
2156 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
2157 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
2158 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
2159 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
2160 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
2161 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
2162 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
2163 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
2164 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
2165 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
2166 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
2167 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
2168 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
2169 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
2170 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
2171 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
2172 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
2173 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
2174 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
2175 -- Support for Concurrent updates to deliverables
2176 delRecTab(k).orig_system_reference_code:='COPY';
2177 delRecTab(k).orig_system_reference_id1:= del_rec.deliverable_id;
2178 delRecTab(k).orig_system_reference_id2:= null;
2179 -- Support for Concurrent updates to deliverables
2180 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
2181
2182 -- CDRL Project Start
2183 delRecTab(k).del_category_code := del_rec.del_category_code;
2184 delRecTab(k).exhibit_code := del_rec.exhibit_code;
2185 delRecTab(k).data_item_number:= del_rec.data_item_number;
2186 delRecTab(k).price_group:= del_rec.price_group;
2187 delRecTab(k).estimated_price:= del_rec.estimated_price;
2188 -- CDRL Project End
2189 delRecTab(k).uda_template_id := del_rec.uda_template_id;
2190 delRecTab(k).schedule_type := del_rec.schedule_type;
2191
2192 END LOOP;
2193 IF del_cur %ISOPEN THEN
2194 CLOSE del_cur ;
2195 END IF;
2196 -- commented as this is not supported by 8i PL/SQL Bug#3307941
2197 /*OPEN del_cur;
2198 FETCH del_cur BULK COLLECT INTO delRecTab;*/
2199
2200
2201
2202 IF p_source_doc_type = 'TEMPLATE' THEN
2203 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2204 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
2205 END IF;
2206 -- copy from template to template
2207 IF p_target_doc_type = 'TEMPLATE' THEN
2208 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2209 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
2210 END IF;
2211
2212 /*** OPEN del_cur;
2213 FETCH del_cur BULK COLLECT INTO delRecTab;**/
2214 IF delRecTab.COUNT <> 0 THEN
2215 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2216 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2217 END IF;
2218 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2219 j := j+1;
2220 -- extend table type
2221 delIdTab.extend;
2222 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2223 delNewTab(j) := delRecTab(i);
2224 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
2225 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2226 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2227 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2228 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2229 END IF;
2230 -- bug# 4335441 If p_internal_party_id is not null then assign it to new Template
2231 IF p_internal_party_id is not null THEN
2232 delNewTab(j).internal_party_id := p_internal_party_id;
2233 END IF;
2234
2235 END LOOP;
2236 END IF;-- cur_del%notfound
2237 ---------------------------------------------------------------------------------
2238 -- copy from template to business document
2239 -- example template to RFQ
2240 ELSIF p_target_doc_type <> 'TEMPLATE' THEN
2241 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2242 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is not template');
2243 END IF;
2244
2245 IF p_target_contractual_doctype is not null THEN
2246 /*** OPEN del_cur;
2247 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2248 IF delRecTab.COUNT <> 0 THEN
2249 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2250 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2251 ,'100: target_contractual_doctype is not null and '||
2252 'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2253 END IF;
2254 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2255 -- initialize
2256 l_copy := 'N';
2257 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2258 p_target_contractual_doctype);
2259 IF l_copy = 'Y' THEN
2260 j := j+1;
2261 -- extend table type
2262 delIdTab.extend;
2263 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2264 delNewTab(j) := delRecTab(i);
2265 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2266 from dual;
2267 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2268 -- If party and contact info is null then assign the parameter values
2269 delNewTab(j).internal_party_id :=
2270 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2271 delNewTab(j).internal_party_contact_id :=
2272 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2273 -- Nullout external party attributes as there are no external
2274 -- parties on Negotiation document
2275 delNewTab(j).external_party_contact_id := null;
2276 delNewTab(j).external_party_id := null;
2277 delNewTab(j).external_party_role := null;
2278 delNewTab(j).external_party_site_id := null;
2279 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2280 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2281 '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2282 END IF;
2283 ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2284 l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2285 IF l_copy = 'Y' THEN
2286 j := j+1;
2287 -- extend table type
2288 delIdTab.extend;
2289 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2290 delNewTab(j) := delRecTab(i);
2291 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2292 from dual;
2293 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2294 -- If party and contact info is null then assign the parameter values
2295 delNewTab(j).internal_party_id :=
2296 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2297 delNewTab(j).internal_party_contact_id :=
2298 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2299 -- Nullout external party attributes as there are no external
2300 -- parties on Negotiation document
2301 delNewTab(j).external_party_contact_id := null;
2302 delNewTab(j).external_party_id := null;
2303 delNewTab(j).external_party_role := null;
2304 delNewTab(j).external_party_site_id := null;
2305 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2306 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2307 ,'100: New Deliverable Id from copy_response_allowed :'||
2308 to_char(delNewTab(j).deliverable_id));
2309 END IF;
2310 END IF;
2311 END IF;-- l_copy is 'Y'
2312 END LOOP;
2313 END IF; -- del_cur%NOTFOUND
2314
2315 /*** This copy is from template to contract.
2316 Only contractual, internal purchasing deliverables are copied
2317 Template to SPO or RFI ****/
2318 ELSIF p_target_contractual_doctype is null THEN
2319
2320 -- bug#4148082 set ext party role during template to PO copy
2321 OPEN getExtPartyRole;
2322 FETCH getExtPartyRole INTO l_ext_party_role;
2323 CLOSE getExtPartyRole;
2324
2325 -- ER Structured Terms Authoring in Repository strivedi
2326 OPEN getRepDefaultInternalContactId;
2327 FETCH getRepDefaultInternalContactId INTO l_rep_dflt_int_contact_id;
2328 CLOSE getRepDefaultInternalContactId;
2329 /***OPEN del_cur;
2330 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2331 IF delRecTab.COUNT <> 0 THEN
2332 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2333 -- initialize
2334 l_copy := 'N';
2335 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2336 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2337 '100: Old Deliverable Id :'||to_char(delRecTab(i).deliverable_id));
2338 END IF;
2339
2340
2341 --ER Repository Structured Terms Authoring
2342 -- if the target document type is a repository contract type, then Change the deliverable type
2343 -- from INTERNAL_PURCHASING to INTERNAL as INTERNAL_PURCHASING is not supported by repository.
2344 l_doc_type_class := getDocTypeClass(p_target_doc_type);
2345
2346 IF l_doc_type_class = 'REPOSITORY' THEN
2347 IF delRecTab(i).deliverable_type = 'INTERNAL_PURCHASING' THEN
2348 delRecTab(i).deliverable_type := 'INTERNAL';
2349 END IF;
2350
2351 IF delRecTab(i).internal_party_contact_id IS NULL THEN
2352 delRecTab(i).internal_party_contact_id := l_rep_dflt_int_contact_id;
2353 END IF;
2354 --No need of setting the External Party Role as this is done only for PO flow.
2355 l_ext_party_role:=NULL;
2356 END IF;
2357 -- End of ER code modifications
2358
2359 --check if the deliverable is of contractual type
2360 IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2361 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2362 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Contractual is :Y');
2363 END IF;
2364 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2365 p_target_contractual_doctype);
2366 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2367 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2368 '100: Copy allowed is :'||l_copy);
2369 END IF;
2370 END IF; -- deltype_matches
2371 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2372 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2373 '100: Copy allowed is :'||l_copy);
2374 END IF;
2375
2376 IF l_copy = 'Y' THEN
2377 j := j+1;
2378 -- extend table type
2379 delIdTab.extend;
2380 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2381 delNewTab(j) := delRecTab(i);
2382 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2383 from dual;
2384 -- If party and contact info is null then assign the parameter values
2385 delNewTab(j).internal_party_id :=
2386 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2387 delNewTab(j).external_party_id :=
2388 NVL(delNewTab(j).external_party_id,p_external_party_id);
2389
2390
2391 delNewTab(j).external_party_site_id :=
2392 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2393 delNewTab(j).internal_party_contact_id :=
2394 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2395 -- bug#4148082 set ext party role during template to PO copy
2396 delNewTab(j).external_party_role := l_ext_party_role;
2397
2398
2399
2400 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2401 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2402 '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2403 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2404 '100: External Party Role :'||delNewTab(j).external_party_role);
2405 END IF;
2406 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2407 ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2408 --do not copy contractual type deliverables on to RFI bug#3641673
2409 IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2410 l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2411 IF l_copy = 'Y' THEN
2412 j := j+1;
2413 -- extend table type
2414 delIdTab.extend;
2415 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2416 delNewTab(j) := delRecTab(i);
2417 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2418 from dual;
2419 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2420 -- If party and contact info is null then assign the parameter values
2421 delNewTab(j).internal_party_id :=
2422 NVL(delNewTab(j).internal_party_id,p_internal_party_id);
2423 delNewTab(j).internal_party_contact_id :=
2424 NVL(delNewTab(j).internal_party_contact_id,p_internal_contact_id);
2425 delNewTab(j).external_party_id :=
2426 NVL(delNewTab(j).external_party_id,p_external_party_id);
2427
2428 delNewTab(j).external_party_site_id :=
2429 NVL(delNewTab(j).external_party_site_id,p_external_party_site_id);
2430
2431 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2432 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2433 ,'100: New Deliverable Id from copy_response_allowed :'||
2434 to_char(delNewTab(j).deliverable_id));
2435 END IF;
2436 END IF; -- l_copy is Y
2437 END IF; -- deltype_matches
2438 END IF;-- l_copy is 'Y'
2439 END LOOP;
2440 END IF; -- del_cur%NOTFOUND
2441
2442 END IF; -- p_target_contractual_doctype
2443 IF del_cur %ISOPEN THEN
2444 CLOSE del_cur ;
2445 END IF;
2446
2447 END IF;
2448 IF del_cur %ISOPEN THEN
2449 CLOSE del_cur ;
2450 END IF;
2451 ---------------------------------------------------------------------------------
2452 -- Busdoc to Busdoc copy
2453 ELSIF p_source_doc_type <> 'TEMPLATE' THEN
2454 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2455 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2456 '100: Source doc is not template');
2457 END IF;
2458 ---------------------------------------------------------------------------------
2459 -- copy from business document to business document of different type
2460 -- for example RFI to RFQ
2461 IF p_source_doc_type <> p_target_doc_type THEN
2462 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2463 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2464 '100: Source doc and target doc are different type');
2465 END IF;
2466 IF p_target_contractual_doctype is not null THEN
2467
2468 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2469 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2470 '100: p_target_contractual_doctype:'||p_target_contractual_doctype);
2471 END IF;
2472 /***OPEN del_cur;
2473 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2474 IF delRecTab.COUNT <> 0 THEN
2475 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2476 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2477 ,'100: target_contractual_doctype is not null and '||
2478 'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2479 END IF;
2480 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2481 -- initialize
2482 l_copy := 'N';
2483 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2484 p_target_contractual_doctype);
2485 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2486 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_copy is :'||l_copy);
2487 END IF;
2488 IF l_copy = 'Y' THEN
2489 j := j+1;
2490 -- extend table type
2491 delIdTab.extend;
2492 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2493 delNewTab(j) := delRecTab(i);
2494 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2495 from dual;
2496 -- 11.5.10+ bug#3670582 fix reset original del id
2497 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2498
2499
2500 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2501 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2502 '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2503 END IF;
2504 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2505 /* Nullout all external party attributes on deliverables.
2506 Because external party is not assigned on Negociation
2507 documents (RFQ, Auction). */
2508 --Bug#4126344
2509 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2510 delNewTab(j).external_party_contact_id := null;
2511 delNewTab(j).external_party_id := null;
2512 delNewTab(j).external_party_site_id := null;
2513 END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2514
2515 --Bug#4126344 set the param value if the flag says N
2516 IF p_carry_forward_int_contact_yn = 'N' THEN
2517 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2518 END IF; -- p_carry_forward_int_contact_yn = 'N'
2519
2520 /* Nullout actual due date,start_event_date, end event_date
2521 bug#3369934*/
2522 delNewTab(j).actual_due_date:= null;
2523 delNewTab(j).start_event_date:= null;
2524 delNewTab(j).end_event_date:= null;
2525
2526 END IF;-- l_copy is 'Y'
2527 END LOOP;
2528 END IF; -- del_cur%NOTFOUND
2529 ---------------------------------------------------
2530 -- busdoc to busdoc of different types
2531 -- for example RFQ to SPO or BPA
2532 ELSIF p_target_contractual_doctype is null THEN
2533 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2534 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2535 '100: p_target_contractual_doctype is null');
2536 END IF;
2537 /***OPEN del_cur;
2538 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2539 IF delRecTab.COUNT <> 0 THEN
2540 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2541 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2542 ,'100: target_contractual_doctype is null and '||
2543 'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2544 END IF;
2545 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2546 -- initialize
2547 l_copy := 'N';
2548 --check if the deliverable belongs to target document type
2549 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2550 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2551 '100: deltype :'||delRecTab(i).deliverable_type);
2552 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2553 '100: doctype :'||p_target_doc_type);
2554 END IF;
2555 IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2556
2557 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2558 p_target_contractual_doctype);
2559 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2560 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2561 '100: l_copy is :'||l_copy);
2562 END IF;
2563 END IF; -- deltype_matches
2564
2565 --Contract Type specific code for 'Closeout'
2566 --If Source Contract Type is Checklist Template - 'REP_CCT' and target is 'REP_CCC'
2567 --Copy allowed should return 'Y' even if event_id does not match.
2568 IF (p_target_doc_type = 'REP_CCC' AND delRecTab(i).BUSINESS_DOCUMENT_TYPE = 'REP_CCT') THEN
2569 l_copy := 'Y';
2570 END IF;
2571
2572 IF l_copy = 'Y' THEN
2573 j := j+1;
2574 -- extend table type
2575 delIdTab.extend;
2576 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2577 delNewTab(j) := delRecTab(i);
2578 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2579 from dual;
2580 -- 11.5.10+ bug#3670582 fix reset original del id
2581 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2582
2583 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2584 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2585 '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2586 END IF;
2587 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2588 -- Bug#3308804 assign param values if they are not null
2589 --Bug#4126344
2590 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2591 delNewTab(j).external_party_id := NVL(p_external_party_id,delNewTab(j).external_party_id);
2592 delNewTab(j).external_party_site_id := NVL(p_external_party_site_id,delNewTab(j).external_party_site_id);
2593 END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2594
2595 --Bug#4126344 set the param value if the flag says N
2596 IF p_carry_forward_int_contact_yn = 'N' THEN
2597 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2598 END IF; -- p_carry_forward_int_contact_yn = 'N'
2599 /* Nullout actual due date,start_event_date, end event_date
2600 bug#3369934*/
2601 delNewTab(j).actual_due_date:= null;
2602 delNewTab(j).start_event_date:= null;
2603 delNewTab(j).end_event_date:= null;
2604 --Contract Type specific code for 'Closeout'
2605 --If Source Contract Type is Checklist Template - 'REP_CCT' and target is 'REP_CCC'
2606
2607 IF(p_target_doc_type = 'REP_CCC') THEN
2608
2609 SELECT bus_doc_event_id INTO l_ccc_event_id FROM okc_bus_doc_events_b
2610 WHERE bus_doc_type = 'REP_CCC';
2611
2612 delNewTab(j).RELATIVE_ST_DATE_EVENT_ID:= l_ccc_event_id;
2613 END IF;
2614
2615 END IF;-- l_copy is 'Y'
2616 END LOOP;
2617 END IF; -- del_cur%NOTFOUND
2618 END IF; -- p_target_contractual_doctype
2619 ---------------------------------------------------------------------------------
2620 -- copy from business document to business document of same type
2621 -- for example RFQ to RFQ
2622 ELSIF p_source_doc_type = p_target_doc_type THEN
2623 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2624 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2625 '100: Source doc and target doc are same type');
2626 END IF;
2627 IF p_target_contractual_doctype is not null THEN
2628
2629 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2630 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2631 '100: p_target_contractual_doctype is not null');
2632 END IF;
2633 /***OPEN del_cur;
2634 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2635 IF delRecTab.COUNT <> 0 THEN
2636 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2637 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2638 ,'100: target_contractual_doctype is not null and '||
2639 'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2640 END IF;
2641 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2642 -- initialize
2643 l_copy := 'N';
2644 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2645 p_target_contractual_doctype);
2646 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2647 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2648 '100: l_copy is :'||l_copy);
2649 END IF;
2650 IF l_copy = 'Y' THEN
2651 j := j+1;
2652 -- extend table type
2653 delIdTab.extend;
2654 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2655 delNewTab(j) := delRecTab(i);
2656 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2657 from dual;
2658 -- 11.5.10+ bug#3670582 fix reset original del id
2659 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2660
2661 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2662 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2663 '100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2664 END IF;
2665 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2666 /* Nullout all external party attributes on deliverables.
2667 Because external party is not assigned on Negotiation
2668 documents (RFQ, Auction). */
2669 --Bug#4126344
2670 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2671 delNewTab(j).external_party_contact_id := null;
2672 delNewTab(j).external_party_id := null;
2673 delNewTab(j).external_party_site_id := null;
2674 END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2675
2676 --Bug#4126344 set the param value if the flag says N
2677 IF p_carry_forward_int_contact_yn = 'N' THEN
2678 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2679 END IF; -- p_carry_forward_int_contact_yn = 'N'
2680
2681 /*bug#3455441 reset buyer contact while creating new busdoc
2682 by copying from another busdoc of same type*/
2683 delNewTab(j).internal_party_id := p_internal_party_id;
2684 --commented the below line as bug#4126344 superceeds bug#3455441
2685 --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2686 /* Nullout actual due date,start_event_date, end event_date
2687 bug#3369934*/
2688 delNewTab(j).actual_due_date:= null;
2689 delNewTab(j).start_event_date:= null;
2690 delNewTab(j).end_event_date:= null;
2691
2692 /**bug#3262940 added copy target_response_doctype deliverables logic
2693 to support RFQ to RFQ copy case ********/
2694
2695 ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2696 l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2697 IF l_copy = 'Y' THEN
2698 j := j+1;
2699 -- extend table type
2700 delIdTab.extend;
2701 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2702 delNewTab(j) := delRecTab(i);
2703 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2704 from dual;
2705 -- 11.5.10+ bug#3670582 fix reset original del id
2706 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2707
2708 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2709 /* Nullout all external party attributes on deliverables.
2710 Because external party is not assigned on Negotiation
2711 documents (RFQ, Auction). */
2712 --Bug#4126344
2713 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2714 delNewTab(j).external_party_contact_id := null;
2715 delNewTab(j).external_party_id := null;
2716 delNewTab(j).external_party_site_id := null;
2717 END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2718
2719 --Bug#4126344 set the param value if the flag says N
2720 IF p_carry_forward_int_contact_yn = 'N' THEN
2721 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2722 END IF; -- p_carry_forward_int_contact_yn = 'N'
2723
2724 /*bug#3455441 reset buyer contact while creating new busdoc
2725 by copying from another busdoc of same type*/
2726 delNewTab(j).internal_party_id := p_internal_party_id;
2727 --commented the below line as bug#4126344 superceeds bug#3455441
2728 --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2729 /* Nullout actual due date,start_event_date, end event_date
2730 bug#3369934*/
2731 delNewTab(j).actual_due_date:= null;
2732 delNewTab(j).start_event_date:= null;
2733 delNewTab(j).end_event_date:= null;
2734
2735 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2736 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2737 ,'100: New Deliverable Id from copy_response_allowed :'||
2738 to_char(delNewTab(j).deliverable_id));
2739 END IF;
2740 END IF;
2741
2742 END IF;-- l_copy is 'Y'
2743 END LOOP;
2744 END IF; -- del_cur%NOTFOUND
2745 -- this is applicable to purchasing documents and RFIs
2746 ELSIF p_target_contractual_doctype is null THEN
2747 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2748 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2749 ,'100: p_target_contractual_doctype is null');
2750 END IF;
2751 /***OPEN del_cur;
2752 FETCH del_cur BULK COLLECT INTO delRecTab;***/
2753 IF delRecTab.COUNT <> 0 THEN
2754 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2755 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2756 ,'100: target_contractual_doctype is null and '||
2757 'Number of records in delRecTab :'||to_char(delRecTab.COUNT));
2758 END IF;
2759 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
2760 -- initialize
2761 l_copy := 'N';
2762 --check if the deliverable belongs to target document type
2763 IF deltype_matches(delRecTab(i).deliverable_type,p_target_doc_type) = 'Y' THEN
2764
2765 l_copy := copy_allowed (delRecTab(i),p_target_doc_type,
2766 p_target_contractual_doctype);
2767 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2768 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
2769 '100: l_copy is :'||l_copy);
2770 END IF;
2771 END IF; -- deltype_matches
2772
2773 IF l_copy = 'Y' THEN
2774 j := j+1;
2775 -- extend table type
2776 delIdTab.extend;
2777 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2778 delNewTab(j) := delRecTab(i);
2779 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2780 from dual;
2781 -- 11.5.10+ bug#3670582 fix reset original del id
2782 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2783
2784 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2785 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2786 ,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
2787 END IF;
2788 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2789 --Bug#4126344
2790 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2791 delNewTab(j).external_party_id := p_external_party_id;
2792 delNewTab(j).external_party_site_id := p_external_party_site_id;
2793 END IF; -- p_carry_forward_ext_party_yn <> 'Y' THEN
2794
2795 --Bug#4126344 set the param value if the flag says N
2796 IF p_carry_forward_int_contact_yn = 'N' THEN
2797 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2798 END IF; -- p_carry_forward_int_contact_yn = 'N'
2799
2800 /*bug#3455441 reset buyer contact while creating new busdoc
2801 by copying from another busdoc of same type*/
2802 delNewTab(j).internal_party_id := p_internal_party_id;
2803 --commented the below line as bug#4126344 superceeds bug#3455441
2804 --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2805 /* Nullout actual due date,start_event_date, end event_date
2806 bug#3369934*/
2807 delNewTab(j).actual_due_date:= null;
2808 delNewTab(j).start_event_date:= null;
2809 delNewTab(j).end_event_date:= null;
2810 /*then check if response document event matches. this check is for RFI**/
2811 ELSIF l_copy = 'N' AND p_target_response_doctype is not null THEN
2812 l_copy := copy_response_allowed (delRecTab(i),p_target_response_doctype,p_target_doc_type);
2813 IF l_copy = 'Y' THEN
2814 j := j+1;
2815 -- extend table type
2816 delIdTab.extend;
2817 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
2818 delNewTab(j) := delRecTab(i);
2819 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id
2820 from dual;
2821 -- 11.5.10+ bug#3670582 fix reset original del id
2822 delNewTab(j).original_deliverable_id := delNewTab(j).deliverable_id;
2823
2824 delIdTab(j).del_id := delNewTab(j).deliverable_id;
2825 /* Nullout all external party attributes on deliverables.
2826 Because external party is not assigned on Negotiation
2827 documents (RFQ, Auction,RFI). */
2828 --Bug#4126344
2829 IF p_carry_forward_ext_party_yn <> 'Y' THEN
2830 delNewTab(j).external_party_contact_id := null;
2831 delNewTab(j).external_party_id := null;
2832 delNewTab(j).external_party_site_id := null;
2833 END IF; -- p_carry_forward_ext_party_yn <> 'Y'
2834
2835 --Bug#4126344 set the param value if the flag says N
2836 IF p_carry_forward_int_contact_yn = 'N' THEN
2837 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := p_internal_contact_id;
2838 END IF; -- p_carry_forward_int_contact_yn = 'N'
2839
2840 /*bug#3455441 reset buyer contact while creating new busdoc
2841 by copying from another busdoc of same type*/
2842 delNewTab(j).internal_party_id := p_internal_party_id;
2843 --commented the below line as bug#4126344 superceeds bug#3455441
2844 --delNewTab(j).internal_party_contact_id := p_internal_contact_id;
2845 /* Nullout actual due date,start_event_date, end event_date
2846 bug#3369934*/
2847 delNewTab(j).actual_due_date:= null;
2848 delNewTab(j).start_event_date:= null;
2849 delNewTab(j).end_event_date:= null;
2850
2851 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2852 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2853 ,'100: New Deliverable Id from copy_response_allowed :'||
2854 to_char(delNewTab(j).deliverable_id));
2855 END IF;
2856 END IF;
2857
2858 END IF;-- l_copy is 'Y'
2859 END LOOP;
2860 END IF; -- del_cur%NOTFOUND
2861 END IF; -- p_target_contractual_doctype
2862
2863 END IF;
2864 END IF;
2865
2866 -- create deliverables for the target document
2867 IF delNewTab.COUNT <> 0 THEN
2868 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2869 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2870 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
2871 ,'100: Create new Deliverables :'||to_char(delNewTab(i).deliverable_id));
2872 END IF;
2873 delNewTab(i).business_document_id := p_target_doc_id;
2874 delNewTab(i).business_document_type := p_target_doc_type;
2875 delNewTab(i).business_document_number := p_target_doc_number;
2876 delNewTab(i).business_document_version := -99;
2877 delNewTab(i).created_by:= Fnd_Global.User_Id;
2878 delNewTab(i).creation_date := sysdate;
2879 delNewTab(i).last_updated_by:= Fnd_Global.User_Id;
2880 delNewTab(i).last_update_date := sysdate;
2881 delNewTab(i).last_update_login:=Fnd_Global.Login_Id;
2882 /*bug#3631944 flush amendment attributes at the time of copy.
2883 Since the target document will be a new document.*/
2884 delNewTab(i).amendment_operation := null;
2885 delNewTab(i).summary_amend_operation_code := null;
2886 delNewTab(i).amendment_notes := null;
2887 delNewTab(i).last_amendment_date := null;
2888
2889 IF p_reset_fixed_date_yn = 'Y' THEN
2890 --delNewTab(i).fixed_due_date_yn = 'Y' THEN -- Bug#3369934 reset recurring dels also
2891 delNewTab(i).fixed_start_date:= null;
2892 delNewTab(i).fixed_end_date:= null;
2893 -- bug#3465662 clear print due date msg name only for recurring deliverables
2894 -- with fixed start or end dates
2895 IF delNewTab(i).recurring_yn = 'Y' AND
2896 (delNewTab(i).relative_st_date_event_id is null OR
2897 delNewTab(i).relative_end_date_event_id is null) THEN
2898 delNewTab(i).print_due_date_msg_name:= null;
2899 END IF;
2900 END IF;
2901 IF p_initialize_status_yn = 'Y' THEN
2902 delNewTab(i).deliverable_status := 'INACTIVE';
2903 END IF;
2904 END LOOP;
2905 /*FORALL i IN delNewTab.FIRST..delNewTab.LAST
2906 INSERT INTO okc_deliverables VALUES delNewTab(i);*/
2907 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
2908 INSERT INTO okc_deliverables
2909 (DELIVERABLE_ID,
2910 BUSINESS_DOCUMENT_TYPE ,
2911 BUSINESS_DOCUMENT_ID ,
2912 BUSINESS_DOCUMENT_NUMBER ,
2913 DELIVERABLE_TYPE ,
2914 RESPONSIBLE_PARTY ,
2915 INTERNAL_PARTY_CONTACT_ID ,
2916 EXTERNAL_PARTY_CONTACT_ID ,
2917 DELIVERABLE_NAME ,
2918 DESCRIPTION ,
2919 COMMENTS ,
2920 DISPLAY_SEQUENCE ,
2921 FIXED_DUE_DATE_YN ,
2922 ACTUAL_DUE_DATE ,
2923 PRINT_DUE_DATE_MSG_NAME ,
2924 RECURRING_YN ,
2925 NOTIFY_PRIOR_DUE_DATE_VALUE ,
2926 NOTIFY_PRIOR_DUE_DATE_UOM ,
2927 NOTIFY_PRIOR_DUE_DATE_YN ,
2928 NOTIFY_COMPLETED_YN ,
2929 NOTIFY_OVERDUE_YN ,
2930 NOTIFY_ESCALATION_YN ,
2931 NOTIFY_ESCALATION_VALUE ,
2932 NOTIFY_ESCALATION_UOM ,
2933 ESCALATION_ASSIGNEE ,
2934 AMENDMENT_OPERATION ,
2935 PRIOR_NOTIFICATION_ID ,
2936 AMENDMENT_NOTES ,
2937 COMPLETED_NOTIFICATION_ID ,
2938 OVERDUE_NOTIFICATION_ID ,
2939 ESCALATION_NOTIFICATION_ID ,
2940 LANGUAGE ,
2941 ORIGINAL_DELIVERABLE_ID ,
2942 REQUESTER_ID ,
2943 EXTERNAL_PARTY_ID ,
2944 EXTERNAL_PARTY_ROLE ,
2945 RECURRING_DEL_PARENT_ID ,
2946 BUSINESS_DOCUMENT_VERSION ,
2947 RELATIVE_ST_DATE_DURATION ,
2948 RELATIVE_ST_DATE_UOM ,
2949 RELATIVE_ST_DATE_EVENT_ID ,
2950 RELATIVE_END_DATE_DURATION ,
2951 RELATIVE_END_DATE_UOM ,
2952 RELATIVE_END_DATE_EVENT_ID ,
2953 REPEATING_DAY_OF_MONTH ,
2954 REPEATING_DAY_OF_WEEK ,
2955 REPEATING_FREQUENCY_UOM ,
2956 REPEATING_DURATION ,
2957 FIXED_START_DATE ,
2958 FIXED_END_DATE ,
2959 MANAGE_YN ,
2960 INTERNAL_PARTY_ID ,
2961 DELIVERABLE_STATUS ,
2962 STATUS_CHANGE_NOTES ,
2963 CREATED_BY ,
2964 CREATION_DATE ,
2965 LAST_UPDATED_BY ,
2966 LAST_UPDATE_DATE ,
2967 LAST_UPDATE_LOGIN ,
2968 OBJECT_VERSION_NUMBER ,
2969 ATTRIBUTE_CATEGORY ,
2970 ATTRIBUTE1 ,
2971 ATTRIBUTE2 ,
2972 ATTRIBUTE3 ,
2973 ATTRIBUTE4 ,
2974 ATTRIBUTE5 ,
2975 ATTRIBUTE6 ,
2976 ATTRIBUTE7 ,
2977 ATTRIBUTE8 ,
2978 ATTRIBUTE9 ,
2979 ATTRIBUTE10 ,
2980 ATTRIBUTE11 ,
2981 ATTRIBUTE12 ,
2982 ATTRIBUTE13 ,
2983 ATTRIBUTE14 ,
2984 ATTRIBUTE15 ,
2985 DISABLE_NOTIFICATIONS_YN ,
2986 LAST_AMENDMENT_DATE ,
2987 BUSINESS_DOCUMENT_LINE_ID ,
2988 EXTERNAL_PARTY_SITE_ID ,
2989 START_EVENT_DATE ,
2990 END_EVENT_DATE ,
2991 SUMMARY_AMEND_OPERATION_CODE,
2992 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
2993 PAY_HOLD_PRIOR_DUE_DATE_UOM,
2994 PAY_HOLD_PRIOR_DUE_DATE_YN,
2995 PAY_HOLD_OVERDUE_YN
2996 ,orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2,
2997 RAISE_COMPLETION_EVENT_YN
2998 ,del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
2999 uda_template_id ,schedule_type
3000 )
3001 VALUES (
3002 delNewTab(i).DELIVERABLE_ID,
3003 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
3004 delNewTab(i).BUSINESS_DOCUMENT_ID ,
3005 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
3006 delNewTab(i).DELIVERABLE_TYPE ,
3007 delNewTab(i).RESPONSIBLE_PARTY ,
3008 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
3009 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
3010 delNewTab(i).DELIVERABLE_NAME ,
3011 delNewTab(i).DESCRIPTION ,
3012 delNewTab(i).COMMENTS ,
3013 delNewTab(i).DISPLAY_SEQUENCE ,
3014 delNewTab(i).FIXED_DUE_DATE_YN ,
3015 delNewTab(i).ACTUAL_DUE_DATE ,
3016 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
3017 delNewTab(i).RECURRING_YN ,
3018 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
3019 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
3020 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
3021 delNewTab(i).NOTIFY_COMPLETED_YN ,
3022 delNewTab(i).NOTIFY_OVERDUE_YN ,
3023 delNewTab(i).NOTIFY_ESCALATION_YN ,
3024 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
3025 delNewTab(i).NOTIFY_ESCALATION_UOM ,
3026 delNewTab(i).ESCALATION_ASSIGNEE ,
3027 delNewTab(i).AMENDMENT_OPERATION ,
3028 delNewTab(i).PRIOR_NOTIFICATION_ID ,
3029 delNewTab(i).AMENDMENT_NOTES ,
3030 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
3031 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
3032 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
3033 delNewTab(i).LANGUAGE ,
3034 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
3035 delNewTab(i).REQUESTER_ID ,
3036 delNewTab(i).EXTERNAL_PARTY_ID ,
3037 delNewTab(i).EXTERNAL_PARTY_ROLE ,
3038 delNewTab(i).RECURRING_DEL_PARENT_ID ,
3039 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
3040 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
3041 delNewTab(i).RELATIVE_ST_DATE_UOM ,
3042 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
3043 delNewTab(i).RELATIVE_END_DATE_DURATION ,
3044 delNewTab(i).RELATIVE_END_DATE_UOM ,
3045 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
3046 delNewTab(i).REPEATING_DAY_OF_MONTH ,
3047 delNewTab(i).REPEATING_DAY_OF_WEEK ,
3048 delNewTab(i).REPEATING_FREQUENCY_UOM ,
3049 delNewTab(i).REPEATING_DURATION ,
3050 delNewTab(i).FIXED_START_DATE ,
3051 delNewTab(i).FIXED_END_DATE ,
3052 delNewTab(i).MANAGE_YN ,
3053 delNewTab(i).INTERNAL_PARTY_ID ,
3054 delNewTab(i).DELIVERABLE_STATUS ,
3055 delNewTab(i).STATUS_CHANGE_NOTES ,
3056 delNewTab(i).CREATED_BY ,
3057 delNewTab(i).CREATION_DATE ,
3058 delNewTab(i).LAST_UPDATED_BY ,
3059 delNewTab(i).LAST_UPDATE_DATE ,
3060 delNewTab(i).LAST_UPDATE_LOGIN ,
3061 delNewTab(i).OBJECT_VERSION_NUMBER ,
3062 delNewTab(i).ATTRIBUTE_CATEGORY ,
3063 delNewTab(i).ATTRIBUTE1 ,
3064 delNewTab(i).ATTRIBUTE2 ,
3065 delNewTab(i).ATTRIBUTE3 ,
3066 delNewTab(i).ATTRIBUTE4 ,
3067 delNewTab(i).ATTRIBUTE5 ,
3068 delNewTab(i).ATTRIBUTE6 ,
3069 delNewTab(i).ATTRIBUTE7 ,
3070 delNewTab(i).ATTRIBUTE8 ,
3071 delNewTab(i).ATTRIBUTE9 ,
3072 delNewTab(i).ATTRIBUTE10 ,
3073 delNewTab(i).ATTRIBUTE11 ,
3074 delNewTab(i).ATTRIBUTE12 ,
3075 delNewTab(i).ATTRIBUTE13 ,
3076 delNewTab(i).ATTRIBUTE14 ,
3077 delNewTab(i).ATTRIBUTE15 ,
3078 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
3079 delNewTab(i).LAST_AMENDMENT_DATE ,
3080 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
3081 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
3082 delNewTab(i).START_EVENT_DATE ,
3083 delNewTab(i).END_EVENT_DATE ,
3084 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
3085 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
3086 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
3087 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
3088 delNewTab(i).PAY_HOLD_OVERDUE_YN,
3089 delNewTab(i).orig_system_reference_code,
3090 delNewTab(i).orig_system_reference_id1,
3091 delNewTab(i).orig_system_reference_id2,
3092 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
3093 delNewTab(i).del_category_code,
3094 delNewTab(i).exhibit_code,
3095 delNewTab(i).data_item_number,
3096 delNewTab(i).price_group,
3097 delNewTab(i).estimated_price,
3098 delNewTab(i).uda_template_id,
3099 delNewTab(i).schedule_type
3100 );
3101
3102 copy_deliverable_udas(
3103 delNewTab(i).orig_system_reference_id1,
3104 delNewTab(i).DELIVERABLE_ID,
3105 x_return_status,
3106 x_msg_count,
3107 x_msg_data,
3108 x_errorcode
3109 );
3110 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3111 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3112 END IF;
3113 END LOOP;
3114 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3115 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3116 '100: Done Creating Deliverables ');
3117 END IF;
3118 END IF; -- delNewTab.COUNT <> 0
3119 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3120 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3121 '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
3122 END IF;
3123
3124 -- copy any existing attachments if allowed
3125 IF p_copy_del_attachments_yn = 'Y' THEN
3126
3127 IF delIdTab.COUNT <> 0 THEN
3128 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
3129 -- check if attachments exists
3130 IF attachment_exists(p_entity_name => G_ENTITY_NAME
3131 ,p_pk1_value => delIdTab(i).orig_del_id) THEN
3132
3133 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3134 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3135 '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
3136 END IF;
3137 -- copy attachments
3138 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
3139 fnd_attached_documents2_pkg.copy_attachments(
3140 X_from_entity_name => G_ENTITY_NAME,
3141 X_from_pk1_value => delIdTab(i).orig_del_id,
3142 X_to_entity_name => G_ENTITY_NAME,
3143 X_to_pk1_value => to_char(delIdTab(i).del_id),
3144 X_CREATED_BY => FND_GLOBAL.User_id,
3145 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
3146 );
3147 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3148 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3149 '100: Done Copy Deliverable Attachments ');
3150 END IF;
3151 END IF;
3152 END LOOP;
3153 END IF;
3154 END IF; -- p_copy_del_attachments_yn = 'Y'
3155
3156 IF del_cur %ISOPEN THEN
3157 CLOSE del_cur ;
3158 END IF;
3159 x_return_status := l_return_status;
3160 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3161 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
3162 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables');
3163 END IF;
3164 EXCEPTION
3165 WHEN FND_API.G_EXC_ERROR THEN
3166 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3167 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
3168 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with G_EXC_ERROR: '||
3169 substr(sqlerrm,1,200));
3170 END IF;
3171 IF del_cur %ISOPEN THEN
3172 CLOSE del_cur ;
3173 END IF;
3174 x_return_status := G_RET_STS_ERROR;
3175 FND_MSG_PUB.Count_And_Get(
3176 p_count => x_msg_count,
3177 p_data => x_msg_data
3178 );
3179
3180 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3181 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3182 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3183 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3184 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3185 END IF;
3186 IF del_cur %ISOPEN THEN
3187 CLOSE del_cur ;
3188 END IF;
3189 x_return_status := G_RET_STS_UNEXP_ERROR;
3190 FND_MSG_PUB.Count_And_Get(
3191 p_count => x_msg_count,
3192 p_data => x_msg_data
3193 );
3194
3195 WHEN OTHERS THEN
3196 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3197 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
3198 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables with '||
3199 'G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
3200 END IF;
3201 IF del_cur %ISOPEN THEN
3202 CLOSE del_cur ;
3203 END IF;
3204 x_return_status := G_RET_STS_UNEXP_ERROR;
3205 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3206 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3207 END IF;
3208 FND_MSG_PUB.Count_And_Get(
3209 p_count => x_msg_count,
3210 p_data => x_msg_data
3211 );
3212
3213 END copy_deliverables;
3214
3215
3216
3217
3218 /** Invoked by activate_deliverables group API
3219 1.Copies recurring instances from previous signed document.
3220 2.Copies instance of onetime deliverable from previous signed
3221 document and deletes the definition on the current document.
3222 3. Copies status history, attachments from the instance.
3223 4. creation_date will be reset for recurring instances of deliverables
3224 copied from currently managed version of document. The deliverable definitions and
3225 onetime deliverable instances will carry forwad the creation_date from the definition.
3226 bug#3702020 added following clauses to filter deleted deliverable
3227 AND NVL(amendment_operation,'NONE')<> 'DELETED'
3228 AND NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3229 **/
3230 PROCEDURE sync_deliverables (
3231 p_api_version IN NUMBER,
3232 p_init_msg_list IN VARCHAR2,
3233 p_current_docid IN NUMBER,
3234 p_current_doctype IN VARCHAR2,
3235 p_current_doc_version IN NUMBER,
3236 x_msg_data OUT NOCOPY VARCHAR2,
3237 x_msg_count OUT NOCOPY NUMBER,
3238 x_return_status OUT NOCOPY VARCHAR2)
3239 IS
3240
3241 CURSOR del_cur IS
3242 SELECT *
3243 FROM okc_deliverables
3244 WHERE business_document_id = p_current_docid
3245 AND business_document_version = p_current_doc_version
3246 AND business_document_type = p_current_doctype
3247 AND NVL(amendment_operation,'NONE')<> 'DELETED'
3248 AND NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
3249 AND manage_yn = 'N'
3250 AND Nvl(schedule_type,'SYSTEM')='SYSTEM';
3251 del_rec del_cur%ROWTYPE;
3252
3253
3254 CURSOR del_ins_cur(x NUMBER) IS
3255 SELECT *
3256 FROM okc_deliverables a
3257 WHERE a.business_document_id = p_current_docid
3258 AND a.business_document_type = p_current_doctype
3259 AND a.business_document_version <> -99
3260 AND a.original_deliverable_id = x
3261 AND a.manage_yn = 'Y';
3262 del_ins_rec del_ins_cur%ROWTYPE;
3263
3264 CURSOR delStsHist(X NUMBER) IS
3265 SELECT *
3266 FROM okc_del_status_history
3267 WHERE deliverable_id = X;
3268 delStsHist_rec delStsHist%ROWTYPE;
3269 delHistTab delHistTabType;
3270
3271 CURSOR event_date_cursor(X NUMBER) IS
3272 select start_event_date, end_event_date
3273 from okc_deliverables
3274 where deliverable_id = X;
3275 event_date_rec event_date_cursor%ROWTYPE;
3276
3277 l_api_name CONSTANT VARCHAR2(30) :='sync_deliverables';
3278 delRecTab delRecTabType;
3279 delNewTab delRecTabType;
3280 delInsTab delRecTabType;
3281 l_deliverable_id NUMBER;
3282 j PLS_INTEGER := 0;
3283 q PLS_INTEGER := 0;
3284 k PLS_INTEGER := 0;
3285 m PLS_INTEGER := 0;
3286 p PLS_INTEGER := 0;
3287 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
3288 TYPE delIdTabType IS TABLE OF delIdRecType;
3289 delIdTab delIdTabType;
3290 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
3291 l_msg_count NUMBER;
3292 l_msg_data VARCHAR2(1000);
3293 l_api_version CONSTANT VARCHAR2(30) := 1.0;
3294 l_recur_parent_id NUMBER;
3295 x_errorcode NUMBER;
3296 BEGIN
3297
3298 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3299 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3300 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
3301 END IF;
3302
3303
3304 /*****
3305 8i compatability bug#3307941
3306 ***/
3307
3308
3309 FOR del_rec IN del_cur LOOP
3310 k := k+1;
3311 delRecTab(k).deliverable_id := del_rec.deliverable_id;
3312 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
3313 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
3314 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
3315 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
3316 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
3317 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
3318 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
3319 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
3320 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
3321 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
3322 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
3323 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
3324 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
3325 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
3326 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
3327 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3328 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3329 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3330 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
3331 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
3332 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
3333 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
3334 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
3335 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
3336 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
3337 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
3338 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
3339 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
3340 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
3341 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
3342 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
3343 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
3344 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
3345 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
3346 delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
3347 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
3348 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
3349 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
3350 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
3351 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
3352 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
3353 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
3354 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
3355 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
3356 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
3357 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
3358 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
3359 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
3360 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
3361 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
3362 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
3363 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
3364 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
3365 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
3366 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
3367 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
3368 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
3369 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
3370 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
3371 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
3372 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
3373 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
3374 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
3375 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
3376 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
3377 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
3378 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
3379 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
3380 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
3381 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
3382 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
3383 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
3384 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
3385 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
3386 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
3387 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
3388 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
3389 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
3390 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
3391 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
3392 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
3393 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
3394 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3395 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3396 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3397 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
3398 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
3399 delRecTab(k).orig_system_reference_code := 'COPY';
3400 delRecTab(k).orig_system_reference_id1 := del_rec.deliverable_id;
3401 delRecTab(k).orig_system_reference_id2 := NULL;
3402 delRecTab(k).del_category_code := del_rec.del_category_code;
3403 delRecTab(k).exhibit_code := del_rec. exhibit_code;
3404 delRecTab(k).data_item_number := del_rec.data_item_number;
3405 delRecTab(k).price_group := del_rec. price_group;
3406 delRecTab(k).estimated_price := del_rec.estimated_price ;
3407 delRecTab(k).uda_template_id := del_rec.uda_template_id ;
3408 delRecTab(k).schedule_type := del_rec.schedule_type ;
3409
3410 END LOOP;
3411 IF del_cur%ISOPEN THEN
3412 CLOSE del_cur ;
3413 END IF;
3414
3415
3416
3417 /**commented as this is not supported by 8i PL/SQL Bug#3307941
3418 OPEN del_cur;
3419 FETCH del_cur BULK COLLECT INTO delDefRecTab;**/
3420 IF delRecTab.COUNT <> 0 THEN
3421 -- initialize the table type variable
3422 delIdTab := delIdTabType();
3423 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
3424 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3425 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3426 ,'100: Inside def cursor loop'||to_char(delRecTab(i).deliverable_id));
3427 END IF;
3428
3429
3430 -- if it is a recurrying deliverable
3431 IF delRecTab(i).recurring_yn = 'Y' THEN
3432 ----------------------------------
3433 --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3434 --Initialize the table with 0 rows
3435 delInsTab.DELETE;
3436 m := 0;
3437 -- if deliverable is updated from onetime to recurring due to amendment
3438 -- don't copy the instance
3439 FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3440 IF del_ins_rec.recurring_yn = 'N' AND
3441 del_ins_rec.recurring_del_parent_id is null THEN
3442 null;
3443 ELSE
3444 m := m+1;
3445 delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3446 delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3447 delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3448 delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3449 delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3450 delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3451 delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3452 delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3453 delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3454 delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3455 delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3456 delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3457 delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3458 delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3459 delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3460 delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3461 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3462 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3463 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3464 delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3465 delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3466 delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3467 delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3468 delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3469 delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3470 delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3471 delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3472 delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3473 delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3474 delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3475 delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3476 delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3477 delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3478 delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3479 delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3480 delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3481 delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3482 delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3483 delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3484 delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3485 delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3486 delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3487 delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3488 delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3489 delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3490 delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3491 delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3492 delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3493 delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3494 delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3495 delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3496 delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3497 delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3498 delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3499 delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3500 delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3501 delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3502 delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3503 delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3504 delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3505 delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3506 delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3507 delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3508 delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3509 delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3510 delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3511 delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3512 delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3513 delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3514 delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3515 delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3516 delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3517 delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3518 delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3519 delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3520 delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3521 delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3522 delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3523 delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3524 delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3525 delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3526 delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3527 delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3528 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3529 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3530 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3531 delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3532 delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
3533 delInsTab(m).orig_system_reference_code := 'COPY';
3534 delInsTab(m).orig_system_reference_id1 := del_ins_rec.deliverable_id;
3535 delInsTab(m).orig_system_reference_id2 := null;
3536
3537 delInsTab(m).del_category_code := del_ins_rec.del_category_code;
3538 delInsTab(m). exhibit_code := del_ins_rec.exhibit_code;
3539 delInsTab(m). data_item_number := del_ins_rec.data_item_number;
3540 delInsTab(m). price_group := del_ins_rec.price_group;
3541 delInsTab(m). estimated_price := del_ins_rec.estimated_price;
3542 delInsTab(m). uda_template_id := del_ins_rec.uda_template_id;
3543 delInsTab(m). schedule_type := del_ins_rec.schedule_type;
3544 END IF;
3545 END LOOP;
3546 IF del_ins_cur %ISOPEN THEN
3547 CLOSE del_ins_cur ;
3548 END IF;
3549
3550
3551
3552 --------------------------------------
3553 -- check for instances and copy instances from managing version
3554 /****
3555 commented as this is not supported by 8i PL/SQL Bug#3307941
3556 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3557 FETCH del_ins_cur BULK COLLECT INTO delInsTab;*/
3558 IF delInsTab.COUNT <> 0 THEN
3559 FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3560 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3561 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3562 END IF;
3563 j:=j+1;
3564 q:=q+1;
3565 -- extend table type
3566 delIdTab.extend;
3567 -- build the id table to copy attachments
3568 delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3569 -- build new version deliverables table
3570 delNewTab(j):= delInsTab(k);
3571 --store the recurring_del_parent_id in local variable
3572 l_recur_parent_id := delInsTab(k).recurring_del_parent_id;
3573 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3574 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Recur Id'||l_recur_parent_id);
3575 END IF;
3576 delNewTab(j).business_document_version := p_current_doc_version;
3577 delNewTab(j).recurring_del_parent_id := delRecTab(i).deliverable_id;
3578 select okc_deliverable_id_s.nextval
3579 INTO delNewTab(j).deliverable_id from dual;
3580 delIdTab(q).del_id := delNewTab(j).deliverable_id;
3581 -- reset end date definition to new definition
3582 delNewTab(j).RELATIVE_END_DATE_DURATION:=
3583 delRecTab(i).RELATIVE_END_DATE_DURATION;
3584 delNewTab(j).RELATIVE_END_DATE_UOM:= delRecTab(i).RELATIVE_END_DATE_UOM;
3585 delNewTab(j).RELATIVE_END_DATE_EVENT_ID:=
3586 delRecTab(i).RELATIVE_END_DATE_EVENT_ID;
3587 delNewTab(j).FIXED_END_DATE:= delRecTab(i).FIXED_END_DATE;
3588 -- Start 3711754 reset the contact ids and notification attributes from the definition
3589 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3590 delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3591 delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3592 delNewTab(j).comments:= delRecTab(i).comments;
3593 delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3594 delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3595 -- Prior due date notification attributes
3596 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3597 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3598 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3599 -- Escalation notification attributes
3600 delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3601 delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3602 delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3603 delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3604 -- Reset the notification ids to null if deliverables are not fulfilled.
3605 IF delNewTab(j).deliverable_status = 'OPEN' OR
3606 delNewTab(j).deliverable_status = 'REJECTED' THEN
3607 delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3608 delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3609 delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3610 END IF;
3611 -- End 3711754 reset the contact ids and notification attributes from the definition
3612
3613 -- 3667445 Reset the creation_date and created_by for instances. 03-Jun-2004
3614 delNewTab(j).creation_date := sysdate;
3615 delNewTab(j).created_by := FND_GLOBAL.User_id;
3616
3617 --bug 6055520
3618 delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3619 delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3620 delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3621 delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3622 delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3623 delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3624 delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3625 delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3626 delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3627 delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3628 delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3629 delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3630 delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3631 delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3632 delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3633 delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3634 --bug 6055520
3635
3636 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3637 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3638 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3639 delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3640 delNewTab(j).RAISE_COMPLETION_EVENT_YN := delRecTab(i).RAISE_COMPLETION_EVENT_YN;
3641
3642
3643 END LOOP;
3644 END IF;
3645 IF del_ins_cur %ISOPEN THEN
3646 CLOSE del_ins_cur ;
3647 END IF;
3648
3649 --Assign start and end eventdates to the new definition from instance
3650 open event_date_cursor(l_recur_parent_id);
3651 fetch event_date_cursor INTO event_date_rec;
3652 IF event_date_cursor%FOUND THEN
3653 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3654 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
3655 ,'Def Id'||delRecTab(i).deliverable_id);
3656 END IF;
3657
3658 Update okc_deliverables set start_event_date = event_date_rec.start_event_date,
3659 end_event_date = event_date_rec.end_event_date
3660 where deliverable_id = delRecTab(i).deliverable_id;
3661
3662
3663 END IF;
3664 close event_date_cursor;
3665
3666 ELSIF delRecTab(i).recurring_yn = 'N' THEN
3667
3668 --If the amendment_action on the deliverable definition
3669 --is null then open deliverable instance for the definition.
3670 --Add this deliverable record to delNewVersion Table.
3671
3672 IF delRecTab(i).amendment_operation is null AND
3673 delRecTab(i).summary_amend_operation_code is null THEN -- bug#3656679
3674 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3675 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: amendment_operation is null');
3676 END IF;
3677 -- Always copy instance from managing version
3678 -- do not copy definition
3679 ----------------------------------
3680 --OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3681 -- 02-FEB-2004 pnayani -- Fix for bug 3407758
3682 --Initialize the table with 0 rows
3683 delInsTab.DELETE;
3684 m := 0;
3685 FOR del_ins_rec IN del_ins_cur(delRecTab(i).original_deliverable_id) LOOP
3686 m := m+1;
3687 delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
3688 delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
3689 delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
3690 delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
3691 delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
3692 delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
3693 delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
3694 delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
3695 delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
3696 delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
3697 delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
3698 delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
3699 delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
3700 delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
3701 delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
3702 delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
3703 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
3704 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
3705 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
3706 delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
3707 delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
3708 delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
3709 delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
3710 delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
3711 delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
3712 delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
3713 delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
3714 delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
3715 delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
3716 delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
3717 delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
3718 delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
3719 delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
3720 delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
3721 delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
3722 delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
3723 delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
3724 delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
3725 delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
3726 delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
3727 delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
3728 delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
3729 delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
3730 delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
3731 delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
3732 delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
3733 delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
3734 delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
3735 delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
3736 delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
3737 delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
3738 delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
3739 delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
3740 delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
3741 delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
3742 delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
3743 delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
3744 delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
3745 delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
3746 delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
3747 delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
3748 delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
3749 delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
3750 delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
3751 delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
3752 delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
3753 delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
3754 delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
3755 delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
3756 delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
3757 delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
3758 delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
3759 delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
3760 delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
3761 delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
3762 delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
3763 delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
3764 delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
3765 delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
3766 delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
3767 delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
3768 delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
3769 delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
3770 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3771 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
3772 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
3773 delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
3774 delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
3775
3776 delInsTab(m).orig_system_reference_code := 'COPY';
3777 delInsTab(m).orig_system_reference_id1 := del_ins_rec.deliverable_id;
3778 delInsTab(m).orig_system_reference_id2 := NULL;
3779
3780
3781 delInsTab(m).del_category_code := del_ins_rec.del_category_code;
3782 delInsTab(m).exhibit_code := del_ins_rec.exhibit_code ;
3783 delInsTab(m).data_item_number := del_ins_rec.data_item_number ;
3784 delInsTab(m).price_group := del_ins_rec.price_group ;
3785 delInsTab(m).estimated_price := del_ins_rec.estimated_price;
3786
3787
3788
3789 END LOOP;
3790 IF del_ins_cur %ISOPEN THEN
3791 CLOSE del_ins_cur ;
3792 END IF;
3793 ----------------------------------
3794 /****
3795 commented as this is not supported by 8i PL/SQL Bug#3307941
3796 OPEN del_ins_cur(delRecTab(i).original_deliverable_id);
3797 FETCH del_ins_cur BULK COLLECT INTO delInsTab;**/
3798 IF delInsTab.COUNT <> 0 THEN
3799 FOR k IN delInsTab.FIRST..delInsTab.LAST LOOP
3800 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3801 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
3802 END IF;
3803 j:=j+1;
3804 q:=q+1;
3805 -- extend table type
3806 delIdTab.extend;
3807 -- build the id table to copy attachments
3808 delIdTab(q).orig_del_id := delInsTab(k).deliverable_id;
3809 -- build new version deliverables table
3810 delNewTab(j):= delInsTab(k);
3811 select okc_deliverable_id_s.nextval
3812 INTO delNewTab(j).deliverable_id from dual;
3813 delNewTab(j).business_document_version := p_current_doc_version;
3814 delIdTab(q).del_id := delNewTab(j).deliverable_id;
3815 -- Resetting the amendment attributes to the definition values bug#3293314
3816 delNewTab(j).AMENDMENT_OPERATION := delRecTab(i).amendment_operation;
3817 delNewTab(j).SUMMARY_AMEND_OPERATION_CODE := delRecTab(i).summary_amend_operation_code;
3818 delNewTab(j).LAST_AMENDMENT_DATE:= delRecTab(i).LAST_AMENDMENT_DATE;
3819 delNewTab(j).AMENDMENT_NOTES:= delRecTab(i).AMENDMENT_NOTES;
3820 -- Start 3711754 reset the contact ids and notification attributes from the definition
3821 delNewTab(j).INTERNAL_PARTY_CONTACT_ID := delRecTab(i).INTERNAL_PARTY_CONTACT_ID;
3822 delNewTab(j).EXTERNAL_PARTY_CONTACT_ID := delRecTab(i).EXTERNAL_PARTY_CONTACT_ID;
3823 delNewTab(j).REQUESTER_ID := delRecTab(i).REQUESTER_ID;
3824 delNewTab(j).comments:= delRecTab(i).comments;
3825 delNewTab(j).NOTIFY_OVERDUE_YN := delRecTab(i).NOTIFY_OVERDUE_YN;
3826 delNewTab(j).NOTIFY_COMPLETED_YN := delRecTab(i).NOTIFY_COMPLETED_YN;
3827 -- Prior due date notification attributes
3828 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_YN := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_YN;
3829 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_UOM := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM;
3830 delNewTab(j).NOTIFY_PRIOR_DUE_DATE_VALUE := delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
3831 -- Escalation notification attributes
3832 delNewTab(j).NOTIFY_ESCALATION_YN := delRecTab(i).NOTIFY_ESCALATION_YN;
3833 delNewTab(j).NOTIFY_ESCALATION_UOM := delRecTab(i).NOTIFY_ESCALATION_UOM;
3834 delNewTab(j).NOTIFY_ESCALATION_VALUE := delRecTab(i).NOTIFY_ESCALATION_VALUE;
3835 delNewTab(j).ESCALATION_ASSIGNEE := delRecTab(i).ESCALATION_ASSIGNEE;
3836 -- Reset the notification ids to null if deliverables are not fulfilled.
3837 IF delNewTab(j).deliverable_status = 'OPEN' OR
3838 delNewTab(j).deliverable_status = 'REJECTED' THEN
3839 delNewTab(j).OVERDUE_NOTIFICATION_ID := null;
3840 delNewTab(j).PRIOR_NOTIFICATION_ID := null;
3841 delNewTab(j).ESCALATION_NOTIFICATION_ID := null;
3842 END IF;
3843 -- End 3711754 reset the contact ids and notification attributes from the definition
3844
3845 -- Bug 5911527. Reset the DFF values
3846 delNewTab(j).ATTRIBUTE_CATEGORY := delRecTab(i).ATTRIBUTE_CATEGORY;
3847 delNewTab(j).ATTRIBUTE1 := delRecTab(i).ATTRIBUTE1;
3848 delNewTab(j).ATTRIBUTE2 := delRecTab(i).ATTRIBUTE2;
3849 delNewTab(j).ATTRIBUTE3 := delRecTab(i).ATTRIBUTE3;
3850 delNewTab(j).ATTRIBUTE4 := delRecTab(i).ATTRIBUTE4;
3851 delNewTab(j).ATTRIBUTE5 := delRecTab(i).ATTRIBUTE5;
3852 delNewTab(j).ATTRIBUTE6 := delRecTab(i).ATTRIBUTE6;
3853 delNewTab(j).ATTRIBUTE7 := delRecTab(i).ATTRIBUTE7;
3854 delNewTab(j).ATTRIBUTE8 := delRecTab(i).ATTRIBUTE8;
3855 delNewTab(j).ATTRIBUTE9 := delRecTab(i).ATTRIBUTE9;
3856 delNewTab(j).ATTRIBUTE10 := delRecTab(i).ATTRIBUTE10;
3857 delNewTab(j).ATTRIBUTE11 := delRecTab(i).ATTRIBUTE11;
3858 delNewTab(j).ATTRIBUTE12 := delRecTab(i).ATTRIBUTE12;
3859 delNewTab(j).ATTRIBUTE13 := delRecTab(i).ATTRIBUTE13;
3860 delNewTab(j).ATTRIBUTE14 := delRecTab(i).ATTRIBUTE14;
3861 delNewTab(j).ATTRIBUTE15 := delRecTab(i).ATTRIBUTE15;
3862
3863 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_VALUE := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE;
3864 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_UOM := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM;
3865 delNewTab(j).PAY_HOLD_PRIOR_DUE_DATE_YN := delRecTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN;
3866 delNewTab(j).PAY_HOLD_OVERDUE_YN := delRecTab(i).PAY_HOLD_OVERDUE_YN;
3867 delNewTab(j).RAISE_COMPLETION_EVENT_YN := delRecTab(i).RAISE_COMPLETION_EVENT_YN;
3868
3869 END LOOP;
3870 -- delete the deliverable definition
3871 delete_deliverable (
3872 p_api_version => l_api_version,
3873 p_init_msg_list => OKC_API.G_FALSE,
3874 p_del_id => delRecTab(i).deliverable_id,
3875 x_msg_data => l_msg_data ,
3876 x_msg_count => l_msg_count,
3877 x_return_status => l_return_status);
3878
3879 IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
3880 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3881 END IF;
3882
3883 END IF;
3884 IF del_ins_cur %ISOPEN THEN
3885 CLOSE del_ins_cur ;
3886 END IF;
3887 END IF;-- amendment_operation is null
3888 END IF; -- recurring_yn = 'Y'
3889
3890 END LOOP;-- delRecTab(i)
3891 END IF; --delRecTab.COUNT <> 0
3892 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3893 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'outside def cursor loop');
3894 END IF;
3895
3896 --BULK INSERT into okc_deliverables the new version of deliverables.
3897 IF delNewTab.COUNT <> 0 THEN
3898 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3899 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
3900 END IF;
3901 -- update the who columns
3902 FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
3903 --3667445 do not reset creation date for definitions, reset only for instances
3904 -- of recurring deliverables
3905 -- delNewTab(j).creation_date := sysdate;
3906 -- delNewTab(j).created_by := FND_GLOBAL.User_id;
3907 delNewTab(j).last_update_date := sysdate;
3908 delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
3909 delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
3910 --copy status history not done as status is not being changed here
3911 --OPEN delStsHist(delNewTab(j).deliverable_id);
3912 /*FOR delStsHist_rec in delStsHist(delNewTab(j).deliverable_id) LOOP
3913 p := p+1;
3914 delHistTab(p).DELIVERABLE_ID := delStsHist_rec.DELIVERABLE_ID;
3915 delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
3916 delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
3917 delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
3918 delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
3919 delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
3920 delHistTab(p).CREATED_BY := delStsHist_rec.CREATED_BY;
3921 delHistTab(p).CREATION_DATE := delStsHist_rec.CREATION_DATE;
3922 delHistTab(p).LAST_UPDATED_BY := delStsHist_rec.LAST_UPDATED_BY;
3923 delHistTab(p).LAST_UPDATE_DATE := delStsHist_rec.LAST_UPDATE_DATE;
3924 delHistTab(p).LAST_UPDATE_LOGIN := delStsHist_rec.LAST_UPDATE_LOGIN;
3925
3926 END LOOP;
3927 IF delStsHist%ISOPEN THEN
3928 CLOSE delStsHist;
3929 END IF;*/
3930 /* commented for 8i compatability bug#330794 major code change
3931 OPEN delStsHist(delNewTab(j).deliverable_id);
3932 FETCH delStsHist BULK COLLECT INTO delHistTab;*/
3933 /*IF delHistTab.COUNT <> 0 THEN
3934 FOR j IN delHistTab.FIRST..delHistTab.LAST LOOP
3935 delHistTab(j).deliverable_id := delNewTab(j).deliverable_id;
3936 delHistTab(j).creation_date := sysdate;
3937 delHistTab(j).created_by := FND_GLOBAL.User_id;
3938 delHistTab(j).last_update_date := sysdate;
3939 delHistTab(j).last_updated_by := FND_GLOBAL.User_id;
3940 delHistTab(j).last_update_login:= Fnd_Global.Login_Id;
3941 END LOOP;
3942 END IF;
3943 IF delStsHist%ISOPEN THEN
3944 CLOSE delStsHist;
3945 END IF;*/
3946 END LOOP;
3947 -- insert records code changed for 8i compatability bug#3307941
3948 /* commented for 8i compatability bug#330794 major code change
3949 FORALL j IN delNewTab.FIRST..delNewTab.LAST
3950 INSERT INTO okc_deliverables VALUES delNewTab(j);*/
3951
3952 --------------------------------------------
3953
3954 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3955 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
3956 END IF;
3957 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
3958 INSERT INTO okc_deliverables
3959 (DELIVERABLE_ID,
3960 BUSINESS_DOCUMENT_TYPE ,
3961 BUSINESS_DOCUMENT_ID ,
3962 BUSINESS_DOCUMENT_NUMBER ,
3963 DELIVERABLE_TYPE ,
3964 RESPONSIBLE_PARTY ,
3965 INTERNAL_PARTY_CONTACT_ID ,
3966 EXTERNAL_PARTY_CONTACT_ID ,
3967 DELIVERABLE_NAME ,
3968 DESCRIPTION ,
3969 COMMENTS ,
3970 DISPLAY_SEQUENCE ,
3971 FIXED_DUE_DATE_YN ,
3972 ACTUAL_DUE_DATE ,
3973 PRINT_DUE_DATE_MSG_NAME ,
3974 RECURRING_YN ,
3975 NOTIFY_PRIOR_DUE_DATE_VALUE ,
3976 NOTIFY_PRIOR_DUE_DATE_UOM ,
3977 NOTIFY_PRIOR_DUE_DATE_YN ,
3978 NOTIFY_COMPLETED_YN ,
3979 NOTIFY_OVERDUE_YN ,
3980 NOTIFY_ESCALATION_YN ,
3981 NOTIFY_ESCALATION_VALUE ,
3982 NOTIFY_ESCALATION_UOM ,
3983 ESCALATION_ASSIGNEE ,
3984 AMENDMENT_OPERATION ,
3985 PRIOR_NOTIFICATION_ID ,
3986 AMENDMENT_NOTES ,
3987 COMPLETED_NOTIFICATION_ID ,
3988 OVERDUE_NOTIFICATION_ID ,
3989 ESCALATION_NOTIFICATION_ID ,
3990 LANGUAGE ,
3991 ORIGINAL_DELIVERABLE_ID ,
3992 REQUESTER_ID ,
3993 EXTERNAL_PARTY_ID ,
3994 EXTERNAL_PARTY_ROLE ,
3995 RECURRING_DEL_PARENT_ID ,
3996 BUSINESS_DOCUMENT_VERSION ,
3997 RELATIVE_ST_DATE_DURATION ,
3998 RELATIVE_ST_DATE_UOM ,
3999 RELATIVE_ST_DATE_EVENT_ID ,
4000 RELATIVE_END_DATE_DURATION ,
4001 RELATIVE_END_DATE_UOM ,
4002 RELATIVE_END_DATE_EVENT_ID ,
4003 REPEATING_DAY_OF_MONTH ,
4004 REPEATING_DAY_OF_WEEK ,
4005 REPEATING_FREQUENCY_UOM ,
4006 REPEATING_DURATION ,
4007 FIXED_START_DATE ,
4008 FIXED_END_DATE ,
4009 MANAGE_YN ,
4010 INTERNAL_PARTY_ID ,
4011 DELIVERABLE_STATUS ,
4012 STATUS_CHANGE_NOTES ,
4013 CREATED_BY ,
4014 CREATION_DATE ,
4015 LAST_UPDATED_BY ,
4016 LAST_UPDATE_DATE ,
4017 LAST_UPDATE_LOGIN ,
4018 OBJECT_VERSION_NUMBER ,
4019 ATTRIBUTE_CATEGORY ,
4020 ATTRIBUTE1 ,
4021 ATTRIBUTE2 ,
4022 ATTRIBUTE3 ,
4023 ATTRIBUTE4 ,
4024 ATTRIBUTE5 ,
4025 ATTRIBUTE6 ,
4026 ATTRIBUTE7 ,
4027 ATTRIBUTE8 ,
4028 ATTRIBUTE9 ,
4029 ATTRIBUTE10 ,
4030 ATTRIBUTE11 ,
4031 ATTRIBUTE12 ,
4032 ATTRIBUTE13 ,
4033 ATTRIBUTE14 ,
4034 ATTRIBUTE15 ,
4035 DISABLE_NOTIFICATIONS_YN ,
4036 LAST_AMENDMENT_DATE ,
4037 BUSINESS_DOCUMENT_LINE_ID ,
4038 EXTERNAL_PARTY_SITE_ID ,
4039 START_EVENT_DATE ,
4040 END_EVENT_DATE ,
4041 SUMMARY_AMEND_OPERATION_CODE,
4042 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4043 PAY_HOLD_PRIOR_DUE_DATE_UOM,
4044 PAY_HOLD_PRIOR_DUE_DATE_YN,
4045 PAY_HOLD_OVERDUE_YN,
4046 RAISE_COMPLETION_EVENT_YN,
4047 orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2, del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
4048 uda_template_id ,schedule_type
4049 )
4050 VALUES (
4051 delNewTab(i).DELIVERABLE_ID,
4052 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
4053 delNewTab(i).BUSINESS_DOCUMENT_ID ,
4054 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
4055 delNewTab(i).DELIVERABLE_TYPE ,
4056 delNewTab(i).RESPONSIBLE_PARTY ,
4057 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
4058 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
4059 delNewTab(i).DELIVERABLE_NAME ,
4060 delNewTab(i).DESCRIPTION ,
4061 delNewTab(i).COMMENTS ,
4062 delNewTab(i).DISPLAY_SEQUENCE ,
4063 delNewTab(i).FIXED_DUE_DATE_YN ,
4064 delNewTab(i).ACTUAL_DUE_DATE ,
4065 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
4066 delNewTab(i).RECURRING_YN ,
4067 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
4068 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
4069 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
4070 delNewTab(i).NOTIFY_COMPLETED_YN ,
4071 delNewTab(i).NOTIFY_OVERDUE_YN ,
4072 delNewTab(i).NOTIFY_ESCALATION_YN ,
4073 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
4074 delNewTab(i).NOTIFY_ESCALATION_UOM ,
4075 delNewTab(i).ESCALATION_ASSIGNEE ,
4076 delNewTab(i).AMENDMENT_OPERATION ,
4077 delNewTab(i).PRIOR_NOTIFICATION_ID ,
4078 delNewTab(i).AMENDMENT_NOTES ,
4079 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
4080 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
4081 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
4082 delNewTab(i).LANGUAGE ,
4083 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
4084 delNewTab(i).REQUESTER_ID ,
4085 delNewTab(i).EXTERNAL_PARTY_ID ,
4086 delNewTab(i).EXTERNAL_PARTY_ROLE ,
4087 delNewTab(i).RECURRING_DEL_PARENT_ID ,
4088 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
4089 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
4090 delNewTab(i).RELATIVE_ST_DATE_UOM ,
4091 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
4092 delNewTab(i).RELATIVE_END_DATE_DURATION ,
4093 delNewTab(i).RELATIVE_END_DATE_UOM ,
4094 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
4095 delNewTab(i).REPEATING_DAY_OF_MONTH ,
4096 delNewTab(i).REPEATING_DAY_OF_WEEK ,
4097 delNewTab(i).REPEATING_FREQUENCY_UOM ,
4098 delNewTab(i).REPEATING_DURATION ,
4099 delNewTab(i).FIXED_START_DATE ,
4100 delNewTab(i).FIXED_END_DATE ,
4101 delNewTab(i).MANAGE_YN ,
4102 delNewTab(i).INTERNAL_PARTY_ID ,
4103 delNewTab(i).DELIVERABLE_STATUS ,
4104 delNewTab(i).STATUS_CHANGE_NOTES ,
4105 delNewTab(i).CREATED_BY ,
4106 delNewTab(i).CREATION_DATE ,
4107 delNewTab(i).LAST_UPDATED_BY ,
4108 delNewTab(i).LAST_UPDATE_DATE ,
4109 delNewTab(i).LAST_UPDATE_LOGIN ,
4110 delNewTab(i).OBJECT_VERSION_NUMBER ,
4111 delNewTab(i).ATTRIBUTE_CATEGORY ,
4112 delNewTab(i).ATTRIBUTE1 ,
4113 delNewTab(i).ATTRIBUTE2 ,
4114 delNewTab(i).ATTRIBUTE3 ,
4115 delNewTab(i).ATTRIBUTE4 ,
4116 delNewTab(i).ATTRIBUTE5 ,
4117 delNewTab(i).ATTRIBUTE6 ,
4118 delNewTab(i).ATTRIBUTE7 ,
4119 delNewTab(i).ATTRIBUTE8 ,
4120 delNewTab(i).ATTRIBUTE9 ,
4121 delNewTab(i).ATTRIBUTE10 ,
4122 delNewTab(i).ATTRIBUTE11 ,
4123 delNewTab(i).ATTRIBUTE12 ,
4124 delNewTab(i).ATTRIBUTE13 ,
4125 delNewTab(i).ATTRIBUTE14 ,
4126 delNewTab(i).ATTRIBUTE15 ,
4127 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
4128 delNewTab(i).LAST_AMENDMENT_DATE ,
4129 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
4130 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
4131 delNewTab(i).START_EVENT_DATE ,
4132 delNewTab(i).END_EVENT_DATE ,
4133 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
4134 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4135 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
4136 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
4137 delNewTab(i).PAY_HOLD_OVERDUE_YN,
4138 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
4139 delNewTab(i).orig_system_reference_code,
4140 delNewTab(i).orig_system_reference_id1,
4141 delNewTab(i).orig_system_reference_id2,
4142 delNewTab(i).del_category_code,
4143 delNewTab(i).exhibit_code,
4144 delNewTab(i).data_item_number,
4145 delNewTab(i).price_group,
4146 delNewTab(i).estimated_price,
4147 delNewTab(i).uda_template_id,
4148 delNewTab(i).schedule_type
4149 );
4150 copy_deliverable_udas(
4151 delNewTab(i).orig_system_reference_id1,
4152 delNewTab(i).DELIVERABLE_ID,
4153 x_return_status,
4154 x_msg_count,
4155 x_msg_data,
4156 x_errorcode
4157 );
4158 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4159 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4160 END IF;
4161 END LOOP;
4162
4163
4164
4165 -------------------------------------------------
4166
4167 FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
4168
4169 --copy status history not done as status is not being changed here
4170 --OPEN delStsHist(delNewTab(j).deliverable_id);
4171 /* commented for 8i compatability bug#330794 major code change
4172 OPEN delStsHist(delNewTab(j).deliverable_id);
4173 FETCH delStsHist BULK COLLECT INTO delHistTab;*/
4174 FOR delStsHist_rec in delStsHist(delIdTab(j).orig_del_id) LOOP
4175 /*p := p+1;
4176 delHistTab(p).DELIVERABLE_ID := delIdTab(j).del_id;
4177 delHistTab(p).DELIVERABLE_STATUS := delStsHist_rec.DELIVERABLE_STATUS;
4178 delHistTab(p).STATUS_CHANGED_BY := delStsHist_rec.STATUS_CHANGED_BY;
4179 delHistTab(p).STATUS_CHANGE_DATE := delStsHist_rec.STATUS_CHANGE_DATE;
4180 delHistTab(p).STATUS_CHANGE_NOTES := delStsHist_rec.STATUS_CHANGE_NOTES;
4181 delHistTab(p).OBJECT_VERSION_NUMBER := delStsHist_rec.OBJECT_VERSION_NUMBER;
4182 delHistTab(p).CREATED_BY := FND_GLOBAL.User_id;
4183 delHistTab(p).CREATION_DATE := sysdate;
4184 delHistTab(p).LAST_UPDATED_BY := FND_GLOBAL.User_id;
4185 delHistTab(p).LAST_UPDATE_DATE := sysdate;
4186 delHistTab(p).LAST_UPDATE_LOGIN := Fnd_Global.Login_Id;*/
4187
4188 --insert into status history
4189 INSERT INTO okc_del_status_history (
4190 deliverable_id,
4191 deliverable_status,
4192 status_changed_by,
4193 status_change_date,
4194 status_change_notes,
4195 object_version_number,
4196 created_by,
4197 creation_date,
4198 last_updated_by,
4199 last_update_date,
4200 last_update_login)
4201 VALUES(
4202 delIdTab(j).del_id,
4203 delStsHist_rec.DELIVERABLE_STATUS,
4204 delStsHist_rec.STATUS_CHANGED_BY,
4205 delStsHist_rec.STATUS_CHANGE_DATE,
4206 delStsHist_rec.STATUS_CHANGE_NOTES,
4207 delStsHist_rec.OBJECT_VERSION_NUMBER,
4208 FND_GLOBAL.User_id,
4209 sysdate,
4210 FND_GLOBAL.User_id,
4211 sysdate,
4212 Fnd_Global.Login_Id);
4213 END LOOP;
4214 IF delStsHist%ISOPEN THEN
4215 CLOSE delStsHist;
4216 END IF;
4217
4218
4219 -------------------------------------------------
4220 IF attachment_exists(p_entity_name => G_ENTITY_NAME
4221 ,p_pk1_value => delIdTab(j).orig_del_id) THEN
4222 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4223 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
4224 END IF;
4225 -- copy attachments
4226 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
4227 fnd_attached_documents2_pkg.copy_attachments(
4228 X_from_entity_name => G_ENTITY_NAME,
4229 X_from_pk1_value => delIdTab(j).orig_del_id,
4230 X_to_entity_name => G_ENTITY_NAME,
4231 X_to_pk1_value => to_char(delIdTab(j).del_id),
4232 X_CREATED_BY => FND_GLOBAL.User_id,
4233 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
4234 );
4235 END IF;
4236 END LOOP;
4237 END IF; -- delNewTab.COUNT
4238
4239 IF del_cur%ISOPEN THEN
4240 CLOSE del_cur ;
4241 END IF;
4242
4243
4244 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4245 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4246 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables');
4247 END IF;
4248
4249 x_return_status := l_return_status;
4250 EXCEPTION
4251 WHEN FND_API.G_EXC_ERROR THEN
4252 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4253 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4254 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_ERROR'||
4255 substr(sqlerrm,1,200));
4256 END IF;
4257 IF del_cur %ISOPEN THEN
4258 CLOSE del_cur ;
4259 END IF;
4260 IF delStsHist%ISOPEN THEN
4261 CLOSE delStsHist;
4262 END IF;
4263 IF del_ins_cur %ISOPEN THEN
4264 CLOSE del_ins_cur ;
4265 END IF;
4266 x_return_status := G_RET_STS_ERROR;
4267 FND_MSG_PUB.Count_And_Get(
4268 p_count => x_msg_count,
4269 p_data => x_msg_data
4270 );
4271 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4272 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4273 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4274 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||
4275 substr(sqlerrm,1,200));
4276 END IF;
4277 IF del_cur %ISOPEN THEN
4278 CLOSE del_cur ;
4279 END IF;
4280 IF del_ins_cur %ISOPEN THEN
4281 CLOSE del_ins_cur ;
4282 END IF;
4283 IF delStsHist%ISOPEN THEN
4284 CLOSE delStsHist;
4285 END IF;
4286 x_return_status := G_RET_STS_UNEXP_ERROR;
4287 FND_MSG_PUB.Count_And_Get(
4288 p_count => x_msg_count,
4289 p_data => x_msg_data
4290 );
4291
4292 WHEN OTHERS THEN
4293 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4294 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4295 ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.sync_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4296 END IF;
4297 IF del_cur %ISOPEN THEN
4298 CLOSE del_cur ;
4299 END IF;
4300 IF del_ins_cur %ISOPEN THEN
4301 CLOSE del_ins_cur ;
4302 END IF;
4303 IF delStsHist%ISOPEN THEN
4304 CLOSE delStsHist;
4305 END IF;
4306 x_return_status := G_RET_STS_UNEXP_ERROR;
4307 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4308 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4309 END IF;
4310 FND_MSG_PUB.Count_And_Get(
4311 p_count => x_msg_count,
4312 p_data => x_msg_data
4313 );
4314 END sync_deliverables;
4315
4316
4317
4318
4319 /***This API is invoked from OKC_TERMS_PVT.VERSION_DOC.
4320 This API creates new set of deliverables for a given
4321 version of document.
4322 1.Gets all dliverable definitions for a given busdoc version
4323 2.Check if amendment operation code is null
4324 i.check if recurring deliverable
4325 a.copy definition
4326 b.open instances cursor and copy instances
4327 ii.if not recurring del
4328 a.copy instance of one time deliverable
4329 3.If amendment operation is not null
4330 i.amendment operation is DELETE and summary amendment operation
4331 is not null
4332 a.Recurring del then copy both def and instances
4333 b.One time del then copy only definition
4334 ii.amendment operation is UPDATE or ADDED
4335 a.Recurring del then copy both def and instances
4336 b.One time del then copy only definition
4337 4.Copy attachments
4338 ***/
4339
4340
4341
4342
4343 PROCEDURE version_deliverables (
4344 p_api_version IN NUMBER,
4345 p_init_msg_list IN VARCHAR2,
4346 p_doc_id IN NUMBER,
4347 p_doc_version IN NUMBER,
4348 p_doc_type IN VARCHAR2,
4349 x_msg_data OUT NOCOPY VARCHAR2,
4350 x_msg_count OUT NOCOPY NUMBER,
4351 x_return_status OUT NOCOPY VARCHAR2)
4352 IS
4353
4354 CURSOR del_cur IS
4355 SELECT *
4356 FROM okc_deliverables
4357 WHERE business_document_id = p_doc_id
4358 AND business_document_version = -99
4359 AND business_document_type = p_doc_type
4360 AND manage_yn = 'N';
4361 del_rec del_cur%ROWTYPE;
4362
4363
4364 l_api_name CONSTANT VARCHAR2(30) :='version_deliverables';
4365 delRecTab delRecTabType;
4366 delNewTab delRecTabType;
4367 --delInsTab delRecTabType;
4368 l_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
4369 l_deliverable_id NUMBER;
4370 j PLS_INTEGER := 0;
4371 k PLS_INTEGER := 0;
4372 q PLS_INTEGER := 0;
4373 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
4374 TYPE delIdTabType IS TABLE OF delIdRecType;
4375 delIdTab delIdTabType;
4376 delCount NUMBER;
4377 x_errorcode NUMBER;
4378 BEGIN
4379
4380 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4381 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4382 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4383 END IF;
4384 ----------------------------------------
4385 /*****
4386 8i compatability bug#3307941
4387 ***/
4388 SELECT count(deliverable_id) INTO delCount
4389 FROM OKC_DELIVERABLES
4390 WHERE business_document_id = p_doc_id
4391 AND business_document_type = p_doc_type
4392 AND business_document_version = p_doc_version;
4393 --If already deliverables are created for the new version, then we wont create it.
4394 IF delCount = 0 THEN
4395 FOR del_rec IN del_cur LOOP
4396 k := k+1;
4397 delRecTab(k).deliverable_id := del_rec.deliverable_id;
4398 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
4399 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
4400 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
4401 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
4402 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
4403 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
4404 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
4405 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
4406 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
4407 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
4408 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
4409 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
4410 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
4411 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
4412 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
4413 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
4414 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
4415 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
4416 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
4417 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
4418 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
4419 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
4420 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
4421 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
4422 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
4423 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
4424 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
4425 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
4426 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
4427 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
4428 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
4429 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
4430 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
4431 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
4432 delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
4433 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
4434 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
4435 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
4436 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
4437 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
4438 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
4439 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
4440 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
4441 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
4442 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
4443 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
4444 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
4445 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
4446 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
4447 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
4448 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
4449 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
4450 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
4451 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
4452 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
4453 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
4454 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
4455 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
4456 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
4457 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
4458 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
4459 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
4460 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
4461 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
4462 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
4463 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
4464 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
4465 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
4466 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
4467 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
4468 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
4469 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
4470 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
4471 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
4472 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
4473 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
4474 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
4475 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
4476 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
4477 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
4478 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
4479 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
4480 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
4481 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
4482 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
4483 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
4484 -- serukull for conc mod impact changes
4485 delRecTab(k).orig_system_reference_code := 'COPY';
4486 delRecTab(k).orig_system_reference_id1 := del_rec.deliverable_id;
4487 delRecTab(k).orig_system_reference_id2 := null;
4488 -- serukull for conc mod impact changes
4489 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
4490
4491
4492 delRecTab(k).del_category_code := del_rec.del_category_code;
4493 delRecTab(k).exhibit_code := del_rec.exhibit_code;
4494 delRecTab(k).data_item_number:= del_rec.data_item_number;
4495 delRecTab(k).price_group:= del_rec.price_group;
4496 delRecTab(k).estimated_price:= del_rec.estimated_price;
4497 delRecTab(k).uda_template_id:= del_rec.uda_template_id;
4498 delRecTab(k).schedule_type:= del_rec.schedule_type;
4499
4500 END LOOP;
4501 IF del_cur%ISOPEN THEN
4502 CLOSE del_cur ;
4503 END IF;
4504
4505
4506 /* commented for 8i compatability bug#330794 major code change
4507 OPEN del_cur;
4508 FETCH del_cur BULK COLLECT INTO delRecTab;**/
4509 IF delRecTab.COUNT <> 0 THEN
4510 -- initialize the table type variable
4511 delIdTab := delIdTabType();
4512 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
4513 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4514 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside def cursor loop'||
4515 to_char(delRecTab(i).deliverable_id));
4516 END IF;
4517
4518 /* bug#3630770 commented this code and moved to clear_amendment_operation
4519 IF delRecTab(i).amendment_operation = 'DELETED' AND
4520 delRecTab(i).summary_amend_operation_code is null THEN
4521 -- Since the summary_amend_operation_code is null, the deliverable is not
4522 -- existing in the signed contract, it was added and deleted in the intermediate
4523 -- versions. So hard delete the record.
4524 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4525 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4526 ,'100: Amendment_operation_summary_code is null hard delete this deliverable'||
4527 to_char(delRecTab(i).deliverable_id));
4528 END IF;
4529 delete from okc_deliverables where deliverable_id = delRecTab(i).deliverable_id;*/
4530
4531
4532 j:=j+1;
4533 q:=q+1;
4534 -- extend table type
4535 delIdTab.extend;
4536 -- build the id table to copy attachments
4537 delIdTab(q).orig_del_id := delRecTab(i).deliverable_id;
4538 -- build new version deliverables table
4539 delNewTab(j):= delRecTab(i);
4540 --bug#3293314 update last amendment date only
4541 --if they is an amendment on the deliverable
4542 IF delRecTab(i).amendment_operation IS NOT NULL THEN
4543 delNewTab(j).last_amendment_date := delRecTab(i).last_amendment_date;
4544 END IF;
4545 select okc_deliverable_id_s.nextval
4546 INTO delNewTab(j).deliverable_id from dual;
4547 delNewTab(j).business_document_version := p_doc_version;
4548 delIdTab(q).del_id := delNewTab(j).deliverable_id;
4549
4550 END LOOP;-- delRecTab(i)
4551 END IF; --delRecTab.COUNT <> 0
4552
4553 /***
4554 BULK INSERT into okc_deliverables the new version of deliverables.
4555 ***/
4556 IF delNewTab.COUNT <> 0 THEN
4557 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4558 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Insert new version records');
4559 END IF;
4560 -- update the who columns
4561 FOR j IN delNewTab.FIRST..delNewTab.LAST LOOP
4562 -- do not reset the creation date bug#3641366
4563 -- delNewTab(j).creation_date := sysdate;
4564 -- delNewTab(j).created_by := FND_GLOBAL.User_id;
4565 delNewTab(j).last_update_date := sysdate;
4566 delNewTab(j).last_updated_by := FND_GLOBAL.User_id;
4567 delNewTab(j).last_update_login:= Fnd_Global.Login_Id;
4568 END LOOP;
4569 ------------------------------------------
4570
4571
4572 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4573 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Before insert');
4574 END IF;
4575 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
4576 INSERT INTO okc_deliverables
4577 (DELIVERABLE_ID,
4578 BUSINESS_DOCUMENT_TYPE ,
4579 BUSINESS_DOCUMENT_ID ,
4580 BUSINESS_DOCUMENT_NUMBER ,
4581 DELIVERABLE_TYPE ,
4582 RESPONSIBLE_PARTY ,
4583 INTERNAL_PARTY_CONTACT_ID ,
4584 EXTERNAL_PARTY_CONTACT_ID ,
4585 DELIVERABLE_NAME ,
4586 DESCRIPTION ,
4587 COMMENTS ,
4588 DISPLAY_SEQUENCE ,
4589 FIXED_DUE_DATE_YN ,
4590 ACTUAL_DUE_DATE ,
4591 PRINT_DUE_DATE_MSG_NAME ,
4592 RECURRING_YN ,
4593 NOTIFY_PRIOR_DUE_DATE_VALUE ,
4594 NOTIFY_PRIOR_DUE_DATE_UOM ,
4595 NOTIFY_PRIOR_DUE_DATE_YN ,
4596 NOTIFY_COMPLETED_YN ,
4597 NOTIFY_OVERDUE_YN ,
4598 NOTIFY_ESCALATION_YN ,
4599 NOTIFY_ESCALATION_VALUE ,
4600 NOTIFY_ESCALATION_UOM ,
4601 ESCALATION_ASSIGNEE ,
4602 AMENDMENT_OPERATION ,
4603 PRIOR_NOTIFICATION_ID ,
4604 AMENDMENT_NOTES ,
4605 COMPLETED_NOTIFICATION_ID ,
4606 OVERDUE_NOTIFICATION_ID ,
4607 ESCALATION_NOTIFICATION_ID ,
4608 LANGUAGE ,
4609 ORIGINAL_DELIVERABLE_ID ,
4610 REQUESTER_ID ,
4611 EXTERNAL_PARTY_ID ,
4612 EXTERNAL_PARTY_ROLE ,
4613 RECURRING_DEL_PARENT_ID ,
4614 BUSINESS_DOCUMENT_VERSION ,
4615 RELATIVE_ST_DATE_DURATION ,
4616 RELATIVE_ST_DATE_UOM ,
4617 RELATIVE_ST_DATE_EVENT_ID ,
4618 RELATIVE_END_DATE_DURATION ,
4619 RELATIVE_END_DATE_UOM ,
4620 RELATIVE_END_DATE_EVENT_ID ,
4621 REPEATING_DAY_OF_MONTH ,
4622 REPEATING_DAY_OF_WEEK ,
4623 REPEATING_FREQUENCY_UOM ,
4624 REPEATING_DURATION ,
4625 FIXED_START_DATE ,
4626 FIXED_END_DATE ,
4627 MANAGE_YN ,
4628 INTERNAL_PARTY_ID ,
4629 DELIVERABLE_STATUS ,
4630 STATUS_CHANGE_NOTES ,
4631 CREATED_BY ,
4632 CREATION_DATE ,
4633 LAST_UPDATED_BY ,
4634 LAST_UPDATE_DATE ,
4635 LAST_UPDATE_LOGIN ,
4636 OBJECT_VERSION_NUMBER ,
4637 ATTRIBUTE_CATEGORY ,
4638 ATTRIBUTE1 ,
4639 ATTRIBUTE2 ,
4640 ATTRIBUTE3 ,
4641 ATTRIBUTE4 ,
4642 ATTRIBUTE5 ,
4643 ATTRIBUTE6 ,
4644 ATTRIBUTE7 ,
4645 ATTRIBUTE8 ,
4646 ATTRIBUTE9 ,
4647 ATTRIBUTE10 ,
4648 ATTRIBUTE11 ,
4649 ATTRIBUTE12 ,
4650 ATTRIBUTE13 ,
4651 ATTRIBUTE14 ,
4652 ATTRIBUTE15 ,
4653 DISABLE_NOTIFICATIONS_YN ,
4654 LAST_AMENDMENT_DATE ,
4655 BUSINESS_DOCUMENT_LINE_ID ,
4656 EXTERNAL_PARTY_SITE_ID ,
4657 START_EVENT_DATE ,
4658 END_EVENT_DATE ,
4659 SUMMARY_AMEND_OPERATION_CODE,
4660 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4661 PAY_HOLD_PRIOR_DUE_DATE_UOM,
4662 PAY_HOLD_PRIOR_DUE_DATE_YN,
4663 PAY_HOLD_OVERDUE_YN
4664 , orig_system_reference_code
4665 , orig_system_reference_id1
4666 , orig_system_reference_id2,
4667 RAISE_COMPLETION_EVENT_YN
4668 ,del_category_code, exhibit_code, data_item_number, price_group, estimated_price,
4669 uda_template_id ,schedule_type
4670 )
4671 VALUES (
4672 delNewTab(i).DELIVERABLE_ID,
4673 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
4674 delNewTab(i).BUSINESS_DOCUMENT_ID ,
4675 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
4676 delNewTab(i).DELIVERABLE_TYPE ,
4677 delNewTab(i).RESPONSIBLE_PARTY ,
4678 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
4679 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
4680 delNewTab(i).DELIVERABLE_NAME ,
4681 delNewTab(i).DESCRIPTION ,
4682 delNewTab(i).COMMENTS ,
4683 delNewTab(i).DISPLAY_SEQUENCE ,
4684 delNewTab(i).FIXED_DUE_DATE_YN ,
4685 delNewTab(i).ACTUAL_DUE_DATE ,
4686 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
4687 delNewTab(i).RECURRING_YN ,
4688 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
4689 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
4690 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
4691 delNewTab(i).NOTIFY_COMPLETED_YN ,
4692 delNewTab(i).NOTIFY_OVERDUE_YN ,
4693 delNewTab(i).NOTIFY_ESCALATION_YN ,
4694 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
4695 delNewTab(i).NOTIFY_ESCALATION_UOM ,
4696 delNewTab(i).ESCALATION_ASSIGNEE ,
4697 delNewTab(i).AMENDMENT_OPERATION ,
4698 delNewTab(i).PRIOR_NOTIFICATION_ID ,
4699 delNewTab(i).AMENDMENT_NOTES ,
4700 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
4701 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
4702 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
4703 delNewTab(i).LANGUAGE ,
4704 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
4705 delNewTab(i).REQUESTER_ID ,
4706 delNewTab(i).EXTERNAL_PARTY_ID ,
4707 delNewTab(i).EXTERNAL_PARTY_ROLE ,
4708 delNewTab(i).RECURRING_DEL_PARENT_ID ,
4709 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
4710 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
4711 delNewTab(i).RELATIVE_ST_DATE_UOM ,
4712 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
4713 delNewTab(i).RELATIVE_END_DATE_DURATION ,
4714 delNewTab(i).RELATIVE_END_DATE_UOM ,
4715 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
4716 delNewTab(i).REPEATING_DAY_OF_MONTH ,
4717 delNewTab(i).REPEATING_DAY_OF_WEEK ,
4718 delNewTab(i).REPEATING_FREQUENCY_UOM ,
4719 delNewTab(i).REPEATING_DURATION ,
4720 delNewTab(i).FIXED_START_DATE ,
4721 delNewTab(i).FIXED_END_DATE ,
4722 delNewTab(i).MANAGE_YN ,
4723 delNewTab(i).INTERNAL_PARTY_ID ,
4724 delNewTab(i).DELIVERABLE_STATUS ,
4725 delNewTab(i).STATUS_CHANGE_NOTES ,
4726 delNewTab(i).CREATED_BY ,
4727 delNewTab(i).CREATION_DATE ,
4728 delNewTab(i).LAST_UPDATED_BY ,
4729 delNewTab(i).LAST_UPDATE_DATE ,
4730 delNewTab(i).LAST_UPDATE_LOGIN ,
4731 delNewTab(i).OBJECT_VERSION_NUMBER ,
4732 delNewTab(i).ATTRIBUTE_CATEGORY ,
4733 delNewTab(i).ATTRIBUTE1 ,
4734 delNewTab(i).ATTRIBUTE2 ,
4735 delNewTab(i).ATTRIBUTE3 ,
4736 delNewTab(i).ATTRIBUTE4 ,
4737 delNewTab(i).ATTRIBUTE5 ,
4738 delNewTab(i).ATTRIBUTE6 ,
4739 delNewTab(i).ATTRIBUTE7 ,
4740 delNewTab(i).ATTRIBUTE8 ,
4741 delNewTab(i).ATTRIBUTE9 ,
4742 delNewTab(i).ATTRIBUTE10 ,
4743 delNewTab(i).ATTRIBUTE11 ,
4744 delNewTab(i).ATTRIBUTE12 ,
4745 delNewTab(i).ATTRIBUTE13 ,
4746 delNewTab(i).ATTRIBUTE14 ,
4747 delNewTab(i).ATTRIBUTE15 ,
4748 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
4749 delNewTab(i).LAST_AMENDMENT_DATE ,
4750 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
4751 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
4752 delNewTab(i).START_EVENT_DATE ,
4753 delNewTab(i).END_EVENT_DATE ,
4754 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
4755 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
4756 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
4757 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
4758 delNewTab(i).PAY_HOLD_OVERDUE_YN
4759 ,delNewTab(i).orig_system_reference_code
4760 ,delNewTab(i).orig_system_reference_id1
4761 ,delNewTab(i).orig_system_reference_id2
4762 ,delNewTab(i).RAISE_COMPLETION_EVENT_YN
4763 ,delNewTab(i).del_category_code
4764 , delNewTab(i).exhibit_code
4765 , delNewTab(i).data_item_number
4766 , delNewTab(i).price_group
4767 , delNewTab(i).estimated_price
4768 , delNewTab(i).uda_template_id
4769 , delNewTab(i).schedule_type
4770 );
4771 copy_deliverable_udas(
4772 delNewTab(i).orig_system_reference_id1,
4773 delNewTab(i).DELIVERABLE_ID,
4774 x_return_status,
4775 x_msg_count,
4776 x_msg_data,
4777 x_errorcode
4778 );
4779 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4780 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4781 END IF;
4782 END LOOP;
4783
4784 -- insert records code changed for 8i compatability bug#3307941
4785 /* commented for 8i compatability bug#330794 major code change
4786 FORALL j IN delNewTab.FIRST..delNewTab.LAST
4787 INSERT INTO okc_deliverables VALUES delNewTab(j);*/
4788
4789 FOR j IN delIdTab.FIRST..delIdTab.LAST LOOP
4790 IF attachment_exists(p_entity_name => G_ENTITY_NAME
4791 ,p_pk1_value => delIdTab(j).orig_del_id) THEN
4792 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4793 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: create attachments');
4794 END IF;
4795 -- copy attachments
4796 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
4797 fnd_attached_documents2_pkg.copy_attachments(
4798 X_from_entity_name => G_ENTITY_NAME,
4799 X_from_pk1_value => delIdTab(j).orig_del_id,
4800 X_to_entity_name => G_ENTITY_NAME,
4801 X_to_pk1_value => to_char(delIdTab(j).del_id),
4802 X_CREATED_BY => FND_GLOBAL.User_id,
4803 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
4804 );
4805 END IF;
4806 END LOOP;
4807
4808 END IF;
4809 IF del_cur %ISOPEN THEN
4810 CLOSE del_cur ;
4811 END IF;
4812
4813
4814 /*** start bug#3618448 do not flush amendment operations during versioning. PO will call
4815 clear amendment to flush amendment operation code.
4816 FOR del_rec IN del_cur LOOP
4817 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4818 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4819 ,'100: Flush Amendment operation:'
4820 ||to_char(del_rec.deliverable_id));
4821 END IF;
4822 UPDATE okc_deliverables SET amendment_operation = null,
4823 --amendment_notes = null,
4824 --last_amendment_date = null,
4825 last_updated_by= Fnd_Global.User_Id,
4826 last_update_date = sysdate,
4827 last_update_login=Fnd_Global.Login_Id
4828 WHERE deliverable_id = del_rec.deliverable_id;
4829
4830 END LOOP;
4831 IF del_cur %ISOPEN THEN
4832 CLOSE del_cur ;
4833 END IF;*** end bug#3618448 **/
4834
4835 END IF; -- IF delCount = 0
4836 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4837 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4838 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables');
4839 END IF;
4840
4841 x_return_status := l_return_status;
4842 EXCEPTION
4843 WHEN FND_API.G_EXC_ERROR THEN
4844 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4845 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name
4846 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_ERROR'||
4847 substr(sqlerrm,1,200));
4848 END IF;
4849 IF del_cur %ISOPEN THEN
4850 CLOSE del_cur ;
4851 END IF;
4852 x_return_status := G_RET_STS_ERROR;
4853 FND_MSG_PUB.Count_And_Get(
4854 p_count => x_msg_count,
4855 p_data => x_msg_data
4856 );
4857
4858 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4859 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4860 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4861 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||
4862 substr(sqlerrm,1,200));
4863 END IF;
4864 IF del_cur %ISOPEN THEN
4865 CLOSE del_cur ;
4866 END IF;
4867 x_return_status := G_RET_STS_UNEXP_ERROR;
4868 FND_MSG_PUB.Count_And_Get(
4869 p_count => x_msg_count,
4870 p_data => x_msg_data
4871 );
4872
4873 WHEN OTHERS THEN
4874 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4875 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
4876 ,'100: In when others leaving OKC_DELIVERABLE_PROCESS_PVT.version_deliverables with G_EXC_UNEXPECTED_ERROR'||substr(sqlerrm,1,200));
4877 END IF;
4878 IF del_cur %ISOPEN THEN
4879 CLOSE del_cur ;
4880 END IF;
4881 x_return_status := G_RET_STS_UNEXP_ERROR;
4882 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4883 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4884 END IF;
4885 FND_MSG_PUB.Count_And_Get(
4886 p_count => x_msg_count,
4887 p_data => x_msg_data
4888 );
4889 END version_deliverables;
4890
4891 /***Invoked From: OKC_TERMS_VERSION_GRP.clear_amendment
4892 This API is invoked to clear amendment operation,
4893 summary amend operation code and amendment notes
4894 on deliverables for a given busdoc.
4895 Parameter Details:
4896 p_doc_id : Business document Id
4897 p_doc_type : Business document type
4898 bug#3618448 new param added
4899 p_keep_summary: If set to 'N' all amendment attributes should be cleared.
4900 If 'Y' then only amendment_operation will be cleared, default is 'N'.
4901 ***/
4902 PROCEDURE clear_amendment_operation (
4903 p_api_version IN NUMBER,
4904 p_init_msg_list IN VARCHAR2,
4905 p_doc_id IN NUMBER,
4906 p_doc_type IN VARCHAR2,
4907 x_msg_data OUT NOCOPY VARCHAR2,
4908 x_msg_count OUT NOCOPY NUMBER,
4909 x_return_status OUT NOCOPY VARCHAR2,
4910 p_keep_summary IN VARCHAR2 )
4911
4912 IS
4913 CURSOR def_cur IS
4914 SELECT deliverable_id
4915 ,amendment_operation
4916 ,summary_amend_operation_code
4917 FROM okc_deliverables
4918 WHERE business_document_id = p_doc_id
4919 AND business_document_version = -99
4920 AND business_document_type = p_doc_type
4921 AND manage_yn = 'N';
4922
4923 def_rec def_cur%ROWTYPE;
4924 --TYPE delIdTabType IS TABLE OF NUMBER;
4925 --delIdTab delIdTabType;
4926 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
4927 l_api_name CONSTANT VARCHAR2(30) :='clear_amendment_operation';
4928
4929 BEGIN
4930
4931 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4932 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': inside the API');
4933 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_id :'||p_doc_id);
4934 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,': p_doc_type :'||p_doc_type);
4935 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':p_keep_summary:'||p_keep_summary);
4936 END IF;
4937 -- Flush amendment attributes on the definition
4938 FOR def_rec IN def_cur LOOP
4939 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4940 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '
4941 ||to_char(def_rec.deliverable_id));
4942 END IF;
4943 IF p_keep_summary = 'N' THEN
4944 --bug#3630770,3639432 As per the new changes to amendments we hard delete deliverable
4945 -- if either amendment_operation or summary code is 'DELETED' 20th May 2004
4946 IF def_rec.amendment_operation = 'DELETED' OR
4947 def_rec.summary_amend_operation_code = 'DELETED' THEN
4948 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4949 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4950 '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4951 END IF;
4952 -- delete deleverable definitions which are removed from approved business doc
4953 delete from okc_deliverables
4954 where deliverable_id = def_rec.deliverable_id;
4955 DELETE FROM OKC_DELIVERABLES_EXT_B
4956 WHERE deliverable_id = def_rec.deliverable_id;
4957 DELETE FROM OKC_DELIVERABLES_EXT_TL
4958 WHERE deliverable_id = def_rec.deliverable_id;
4959 ELSE
4960 -- clear all amendment attributes but
4961 -- don't clear last_amendment_date this is needed for PO change History
4962 -- to enable or disable deliverables link
4963 UPDATE okc_deliverables SET amendment_operation = null,
4964 summary_amend_operation_code = null,
4965 amendment_notes = null,
4966 last_updated_by= Fnd_Global.User_Id,
4967 last_update_date = sysdate,
4968 last_update_login=Fnd_Global.Login_Id
4969 WHERE deliverable_id = def_rec.deliverable_id;
4970 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4971 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
4972 ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
4973 END IF;
4974 END IF;
4975
4976 ELSE -- p_keep_summary = 'Y'
4977 --bug#3630770, 3639432 As per the new changes to amendments we hard delete deliverable
4978 -- if either amendment_operation is DELETED or summary code is null
4979 IF def_rec.amendment_operation = 'DELETED' AND
4980 def_rec.summary_amend_operation_code is null THEN
4981 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4982 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
4983 '100: deleted deliverable: '||to_char(def_rec.deliverable_id));
4984 END IF;
4985 -- delete deleverable definitions which are removed from approved business doc
4986 delete from okc_deliverables
4987 where deliverable_id = def_rec.deliverable_id;
4988 DELETE FROM OKC_DELIVERABLES_EXT_B
4989 WHERE deliverable_id = def_rec.deliverable_id;
4990 DELETE FROM OKC_DELIVERABLES_EXT_TL
4991 WHERE deliverable_id = def_rec.deliverable_id;
4992 ELSE
4993 -- clear only amendment_operation
4994 UPDATE okc_deliverables SET amendment_operation = null,
4995 last_updated_by= Fnd_Global.User_Id,
4996 last_update_date = sysdate,
4997 last_update_login=Fnd_Global.Login_Id
4998 WHERE deliverable_id = def_rec.deliverable_id;
4999 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5000 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
5001 ,'100: updated deliverable: '||to_char(def_rec.deliverable_id));
5002 END IF;
5003 END IF;
5004
5005 END IF; -- p_keep_summary
5006 END LOOP; -- del_cur loop
5007 -- close any open cursors
5008 IF def_cur %ISOPEN THEN
5009 CLOSE def_cur ;
5010 END IF;
5011 x_return_status := l_return_status;
5012
5013 EXCEPTION
5014 WHEN OTHERS THEN
5015 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5016 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
5017 ,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.clear_amendments with G_EXC_UNEXPECTED_ERROR'||
5018 substr(sqlerrm,1,200));
5019 END IF;
5020 -- close any open cursors
5021 IF def_cur %ISOPEN THEN
5022 CLOSE def_cur ;
5023 END IF;
5024 x_return_status := G_RET_STS_UNEXP_ERROR;
5025 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5026 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5027 END IF;
5028 FND_MSG_PUB.Count_And_Get(
5029 p_count => x_msg_count,
5030 p_data => x_msg_data
5031 );
5032
5033 END clear_amendment_operation;
5034
5035
5036
5037 /*** This procedure will disable or turn manage_yn to 'N'
5038 for a given document type and version ***/
5039 PROCEDURE disable_deliverables (
5040 p_api_version IN NUMBER,
5041 p_init_msg_list IN VARCHAR2,
5042 p_doc_id IN NUMBER,
5043 p_doc_version IN NUMBER,
5044 p_doc_type IN VARCHAR2,
5045 x_msg_data OUT NOCOPY VARCHAR2,
5046 x_msg_count OUT NOCOPY NUMBER,
5047 x_return_status OUT NOCOPY VARCHAR2)
5048 IS
5049 l_api_name CONSTANT VARCHAR2(30) :='disable_deliverable';
5050 CURSOR del_cur IS
5051 SELECT deliverable_id
5052 FROM okc_deliverables
5053 WHERE business_document_id = p_doc_id
5054 AND business_document_version =p_doc_version
5055 AND business_document_type = p_doc_type
5056 AND manage_yn = 'Y';
5057 TYPE delIdTabType IS TABLE OF NUMBER;
5058 delIdTab delIdTabType;
5059 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5060
5061 BEGIN
5062 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5063 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
5064 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES');
5065 END IF;
5066 OPEN del_cur;
5067 FETCH del_cur BULK COLLECT INTO delIdTab;
5068 IF delIdTab.COUNT <> 0 THEN
5069 FORALL i IN delIdTab.FIRST..delIdTab.LAST
5070 UPDATE okc_deliverables SET manage_yn = 'N',
5071 last_updated_by= Fnd_Global.User_Id,
5072 last_update_date = sysdate,
5073 last_update_login=Fnd_Global.Login_Id
5074 WHERE deliverable_id = delIdTab(i);
5075 END IF;
5076 IF del_cur %ISOPEN THEN
5077 CLOSE del_cur ;
5078 END IF;
5079 x_return_status := l_return_status;
5080
5081 EXCEPTION
5082 WHEN FND_API.G_EXC_ERROR THEN
5083 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5084 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_ERROR');
5085 END IF;
5086 IF del_cur %ISOPEN THEN
5087 CLOSE del_cur ;
5088 END IF;
5089 x_return_status := G_RET_STS_ERROR;
5090 FND_MSG_PUB.Count_And_Get(
5091 p_count => x_msg_count,
5092 p_data => x_msg_data
5093 );
5094 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5095 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5096 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_UNEXPECTED_ERROR');
5097 END IF;
5098 IF del_cur %ISOPEN THEN
5099 CLOSE del_cur ;
5100 END IF;
5101 x_return_status := G_RET_STS_UNEXP_ERROR;
5102 FND_MSG_PUB.Count_And_Get(
5103 p_count => x_msg_count,
5104 p_data => x_msg_data
5105 );
5106
5107 WHEN OTHERS THEN
5108 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5109 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.DISABLE_DELIVERABLES with G_EXC_UNEXPECTED_ERROR');
5110 END IF;
5111 IF del_cur %ISOPEN THEN
5112 CLOSE del_cur ;
5113 END IF;
5114 x_return_status := G_RET_STS_UNEXP_ERROR;
5115 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5116 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5117 END IF;
5118 FND_MSG_PUB.Count_And_Get(
5119 p_count => x_msg_count,
5120 p_data => x_msg_data
5121 );
5122
5123 END disable_deliverables;
5124
5125 -- Creates status history for a given deliverable
5126 PROCEDURE create_del_status_history(
5127 p_api_version IN NUMBER,
5128 p_init_msg_list IN VARCHAR2,
5129 p_del_id IN NUMBER,
5130 p_deliverable_status IN VARCHAR2,
5131 x_msg_data OUT NOCOPY VARCHAR2,
5132 x_msg_count OUT NOCOPY NUMBER,
5133 x_return_status OUT NOCOPY VARCHAR2)
5134 IS
5135
5136 l_api_name CONSTANT VARCHAR2(30) :='create_del_status_history';
5137 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
5138 l_msg_count NUMBER;
5139 l_msg_data VARCHAR2(1000);
5140 l_api_version CONSTANT VARCHAR2(30) := 1.0;
5141 j PLS_INTEGER := 0;
5142
5143
5144 BEGIN
5145
5146 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5147 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
5148 END IF;
5149
5150
5151 --insert into status history
5152 INSERT INTO okc_del_status_history (
5153 deliverable_id,
5154 deliverable_status,
5155 status_changed_by,
5156 status_change_date,
5157 status_change_notes,
5158 object_version_number,
5159 created_by,
5160 creation_date,
5161 last_updated_by,
5162 last_update_date,
5163 last_update_login)
5164 VALUES(
5165 p_del_id,
5166 p_deliverable_status,
5167 null,
5168 sysdate,
5169 null,
5170 1,
5171 Fnd_Global.User_Id,
5172 sysdate,
5173 Fnd_Global.User_Id,
5174 sysdate,
5175 Fnd_Global.Login_Id);
5176
5177 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5178 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
5179 END IF;
5180 x_return_status := l_return_status;
5181 EXCEPTION
5182 WHEN FND_API.G_EXC_ERROR THEN
5183 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5184 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
5185 END IF;
5186 x_return_status := G_RET_STS_ERROR;
5187 FND_MSG_PUB.Count_And_Get(
5188 p_count => x_msg_count,
5189 p_data => x_msg_data
5190 );
5191
5192 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5193 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5194 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
5195 END IF;
5196 x_return_status := G_RET_STS_UNEXP_ERROR;
5197 FND_MSG_PUB.Count_And_Get(
5198 p_count => x_msg_count,
5199 p_data => x_msg_data
5200 );
5201
5202 WHEN OTHERS THEN
5203 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5204 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
5205 END IF;
5206 x_return_status := G_RET_STS_UNEXP_ERROR;
5207 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5208 END IF;
5209 FND_MSG_PUB.Count_And_Get(
5210 p_count => x_msg_count,
5211 p_data => x_msg_data
5212 );
5213 END create_del_status_history;
5214
5215 /***
5216 This API is invoked from OKC_MANAGE_DELIVERABLES_GRP.activate_deliverables
5217 and close_deliverables. It changes the status to a given status for a busdoc.
5218 Creates status history for deliverable.
5219 ***/
5220 PROCEDURE change_deliverable_status (
5221 p_api_version IN NUMBER,
5222 p_init_msg_list IN VARCHAR2,
5223 p_doc_id IN NUMBER,
5224 p_doc_version IN NUMBER,
5225 p_doc_type IN VARCHAR2,
5226 p_cancel_yn IN VARCHAR2,
5227 p_cancel_event_code IN VARCHAR2,
5228 p_current_status IN VARCHAR2,
5229 p_new_status IN VARCHAR2,
5230 p_manage_yn IN VARCHAR2,
5231 x_msg_data OUT NOCOPY VARCHAR2,
5232 x_msg_count OUT NOCOPY NUMBER,
5233 x_return_status OUT NOCOPY VARCHAR2)
5234 IS
5235 l_api_name CONSTANT VARCHAR2(30) :='change_deliverable_status';
5236 CURSOR del_activate_cur IS
5237 SELECT deliverable_id
5238 FROM okc_deliverables
5239 WHERE business_document_id = p_doc_id
5240 AND business_document_version =p_doc_version
5241 AND business_document_type = p_doc_type
5242 AND deliverable_status = p_current_status
5243 AND actual_due_date is not null;
5244
5245 /* CURSOR del_cancel_cur IS
5246 SELECT deliverable_id
5247 FROM okc_deliverables
5248 WHERE business_document_id = p_doc_id
5249 AND business_document_version =p_doc_version
5250 AND business_document_type = p_doc_type
5251 AND NVL(relative_st_date_event_id,0) NOT IN (
5252 select bus_doc_event_id
5253 from okc_bus_doc_events_v
5254 where business_event_code = p_cancel_event_code);
5255 */
5256 TYPE delIdTabType IS TABLE OF NUMBER;
5257 delIdTab delIdTabType;
5258
5259 TYPE delStsTabType IS TABLE OF okc_del_status_history%ROWTYPE;
5260 delStsTab delStsTabType;
5261
5262 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
5263 l_msg_count NUMBER;
5264 l_msg_data VARCHAR2(1000);
5265 l_api_version CONSTANT VARCHAR2(30) := 1.0;
5266 j PLS_INTEGER := 0;
5267
5268
5269 BEGIN
5270
5271 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5272 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
5273 END IF;
5274 IF p_cancel_yn = 'N' THEN
5275 OPEN del_activate_cur;
5276 FETCH del_activate_cur BULK COLLECT INTO delIdTab;
5277 IF delIdTab.COUNT <> 0 THEN
5278 delStsTab := delStsTabType();
5279 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
5280
5281 j := j+1;
5282 delStsTab.extend;
5283 delStsTab(j).deliverable_id := delIdTab(i);
5284 delStsTab(j).deliverable_status:= p_new_status;
5285 delStsTab(j).status_change_date:= sysdate;
5286 delStsTab(j).status_change_notes:= null;
5287 delStsTab(j).object_version_number:= 1;
5288 delStsTab(j).created_by:= Fnd_Global.User_Id;
5289 delStsTab(j).creation_date := sysdate;
5290 delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
5291 delStsTab(j).last_update_date := sysdate;
5292 delStsTab(j).last_update_login := Fnd_Global.Login_Id;
5293 END LOOP;
5294
5295 --Bulk update of status in okc_deliverables
5296 FORALL i IN delIdTab.FIRST..delIdTab.LAST
5297 UPDATE okc_deliverables
5298 SET
5299 deliverable_status = p_new_status,
5300 manage_yn = p_manage_yn,
5301 last_updated_by= Fnd_Global.User_Id,
5302 last_update_date = sysdate,
5303 last_update_login = Fnd_Global.Login_Id
5304 WHERE deliverable_id = delIdTab(i);
5305 --Bulk insert into status history
5306 FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5307 /*code changed for 8i compatability bug#3307941
5308 INSERT INTO okc_del_status_history VALUES delStsTab(i); */
5309 INSERT INTO okc_del_status_history
5310 (deliverable_id,
5311 deliverable_status,
5312 STATUS_CHANGED_BY,
5313 status_change_date,
5314 status_change_notes,
5315 object_version_number,
5316 created_by,
5317 creation_date,
5318 last_updated_by,
5319 last_update_date,
5320 last_update_login)
5321 VALUES (delStsTab(i).DELIVERABLE_ID
5322 ,delStsTab(i).DELIVERABLE_STATUS
5323 ,delStsTab(i).STATUS_CHANGED_BY
5324 ,delStsTab(i).STATUS_CHANGE_DATE
5325 ,delStsTab(i).STATUS_CHANGE_NOTES
5326 ,delStsTab(i).OBJECT_VERSION_NUMBER
5327 ,delStsTab(i).CREATED_BY
5328 ,delStsTab(i).CREATION_DATE
5329 ,delStsTab(i).LAST_UPDATED_BY
5330 ,delStsTab(i).LAST_UPDATE_DATE
5331 ,delStsTab(i).LAST_UPDATE_LOGIN
5332 );
5333 END LOOP;
5334 END IF;
5335 CLOSE del_activate_cur;
5336
5337 -- If status change is called when any business document is cancelled
5338 ELSIF p_cancel_yn = 'Y' THEN
5339
5340 /** Updated this procedure - 01/20/2004 by SASETHI
5341 Commendted out code for changing deliverable status to CANCELLED when canceled
5342 operation is called from Mng Deliverables GRP.
5343 **/
5344 -- disable deliverables that are currently being managed.
5345 -- before activating deliverables on new version
5346 disable_deliverables (
5347 p_api_version => l_api_version ,
5348 p_init_msg_list => FND_API.G_FALSE ,
5349 p_doc_id => p_doc_id ,
5350 p_doc_version => p_doc_version ,
5351 p_doc_type => p_doc_type ,
5352 x_msg_data => l_msg_data ,
5353 x_msg_count => l_msg_count ,
5354 x_return_status => l_return_status );
5355
5356 /** Status change is not required as per bug # 3369337
5357
5358 OPEN del_cancel_cur;
5359 FETCH del_cancel_cur BULK COLLECT INTO delIdTab;
5360
5361 IF delIdTab.COUNT <> 0 THEN
5362 delStsTab := delStsTabType();
5363 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
5364
5365 j := j+1;
5366 delStsTab.extend;
5367 --delStsTab(j).deliverable_id := delIdTab(i).deliverable_id;
5368 delStsTab(j).deliverable_id := delIdTab(i);
5369 delStsTab(j).deliverable_status:= p_new_status;
5370 delStsTab(j).status_change_date:= sysdate;
5371 delStsTab(j).status_change_notes:= null;
5372 delStsTab(j).object_version_number:= 1;
5373 delStsTab(j).created_by:= Fnd_Global.User_Id;
5374 delStsTab(j).creation_date := sysdate;
5375 delStsTab(j).last_updated_by:= Fnd_Global.User_Id;
5376 delStsTab(j).last_update_date := sysdate;
5377 delStsTab(j).last_update_login := Fnd_Global.Login_Id;
5378 END LOOP;
5379
5380 IF l_return_status = OKC_API.G_RET_STS_SUCCESS THEN
5381 -- BULK UPDATE of status
5382 FORALL i IN delIdTab.FIRST..delIdTab.LAST
5383 UPDATE okc_deliverables
5384 SET
5385 deliverable_status = p_new_status,
5386 manage_yn = 'N',
5387 last_updated_by= Fnd_Global.User_Id,
5388 last_update_date = sysdate,
5389 last_update_login = Fnd_Global.Login_Id
5390 WHERE deliverable_id = delIdTab(i);
5391
5392 -- BULK INSERT into status history
5393 FOR i IN delStsTab.FIRST..delStsTab.LAST LOOP
5394 --code changed for 8i compatability bug#3307941
5395 --INSERT INTO okc_del_status_history VALUES delStsTab(i);
5396 INSERT INTO okc_del_status_history
5397 (deliverable_id,
5398 deliverable_status,
5399 STATUS_CHANGED_BY,
5400 status_change_date,
5401 status_change_notes,
5402 object_version_number,
5403 created_by,
5404 creation_date,
5405 last_updated_by,
5406 last_update_date,
5407 last_update_login)
5408 VALUES (delStsTab(i).DELIVERABLE_ID
5409 ,delStsTab(i).DELIVERABLE_STATUS
5410 ,delStsTab(i).STATUS_CHANGED_BY
5411 ,delStsTab(i).STATUS_CHANGE_DATE
5412 ,delStsTab(i).STATUS_CHANGE_NOTES
5413 ,delStsTab(i).OBJECT_VERSION_NUMBER
5414 ,delStsTab(i).CREATED_BY
5415 ,delStsTab(i).CREATION_DATE
5416 ,delStsTab(i).LAST_UPDATED_BY
5417 ,delStsTab(i).LAST_UPDATE_DATE
5418 ,delStsTab(i).LAST_UPDATE_LOGIN
5419 );
5420 END LOOP;
5421 ELSE
5422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5423 END IF;
5424 END IF;
5425 CLOSE del_cancel_cur;
5426 **/
5427 END IF; -- if operation is for CANCELLED
5428
5429 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5430 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS');
5431 END IF;
5432 x_return_status := l_return_status;
5433 EXCEPTION
5434 WHEN FND_API.G_EXC_ERROR THEN
5435 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5436 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_ERROR');
5437 END IF;
5438 IF del_activate_cur %ISOPEN THEN
5439 CLOSE del_activate_cur ;
5440 END IF;
5441 x_return_status := G_RET_STS_ERROR;
5442 FND_MSG_PUB.Count_And_Get(
5443 p_count => x_msg_count,
5444 p_data => x_msg_data
5445 );
5446
5447 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5448 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5449 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_UNEXPECTED_ERROR');
5450 END IF;
5451 IF del_activate_cur %ISOPEN THEN
5452 CLOSE del_activate_cur ;
5453 END IF;
5454 x_return_status := G_RET_STS_UNEXP_ERROR;
5455 FND_MSG_PUB.Count_And_Get(
5456 p_count => x_msg_count,
5457 p_data => x_msg_data
5458 );
5459
5460 WHEN OTHERS THEN
5461 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5462 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CHANGE_DELIVERABLE_STATUS with G_EXC_UNEXPECTED_ERROR');
5463 END IF;
5464 IF del_activate_cur %ISOPEN THEN
5465 CLOSE del_activate_cur ;
5466 END IF;
5467 x_return_status := G_RET_STS_UNEXP_ERROR;
5468 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5469 END IF;
5470 FND_MSG_PUB.Count_And_Get(
5471 p_count => x_msg_count,
5472 p_data => x_msg_data
5473 );
5474
5475 END change_deliverable_status;
5476
5477
5478
5479 /***
5480 This is the Concurrent Program scheduled to run every day
5481 to send out notifications about overdue deliverables.
5482 It internally calls API overdue_del_notifier
5483 to check for overdue deliverabls and send out notifications
5484 ***/
5485 PROCEDURE overdue_deliverable_manager (
5486 errbuf OUT NOCOPY VARCHAR2,
5487 retcode OUT NOCOPY VARCHAR2)
5488 IS
5489 l_api_name CONSTANT VARCHAR2(30) :='overdue_deliverable_manager';
5490 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5491 l_msg_count NUMBER;
5492 l_msg_data VARCHAR2(1000);
5493 l_api_version CONSTANT VARCHAR2(30) := 1.0;
5494 l_init_msg_list VARCHAR2(3) := 'T';
5495 E_Resource_Busy EXCEPTION;
5496 PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
5497
5498 BEGIN
5499 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5500 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5501 END IF;
5502 --Initialize the return code
5503 retcode := 0;
5504 --Invoke overdue_del_notifier
5505 overdue_del_notifier(
5506 p_api_version => l_api_version ,
5507 p_init_msg_list => l_init_msg_list,
5508 x_return_status => l_return_status,
5509 x_msg_count => l_msg_count,
5510 x_msg_data => l_msg_data);
5511 --check return status
5512 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5513 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5514 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5515 RAISE OKC_API.G_EXCEPTION_ERROR;
5516 END IF;
5517 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5518 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager');
5519 END IF;
5520 EXCEPTION
5521 WHEN E_Resource_Busy THEN
5522 IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5523 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager with resource busy state');
5524 END IF;
5525 l_return_status := okc_api.g_ret_sts_error;
5526 RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5527 WHEN OTHERS THEN
5528 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5529 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_deliverable_manager with G_EXC_UNEXPECTED_ERROR');
5530 END IF;
5531 retcode := 2;
5532 errbuf := substr(sqlerrm,1,200);
5533 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5534 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5535 END IF;
5536 IF FND_MSG_PUB.Count_Msg > 0 Then
5537 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5538 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5539 END LOOP;
5540 END IF;
5541 FND_MSG_PUB.initialize;
5542
5543 END overdue_deliverable_manager;
5544
5545 /***
5546 Invoked by Concurrent Program "overdue_deliverable_manager"
5547 Picks all deliverables that are overdue
5548 Invokes Deliverable Notifier to send out notifications
5549 Update deliverables with overdue_notification_id
5550 ***/
5551 PROCEDURE overdue_del_notifier(
5552 p_api_version IN NUMBER ,
5553 p_init_msg_list IN VARCHAR2 ,
5554 x_return_status OUT NOCOPY VARCHAR2,
5555 x_msg_count OUT NOCOPY NUMBER,
5556 x_msg_data OUT NOCOPY VARCHAR2) IS
5557
5558 l_api_name CONSTANT VARCHAR2(30) :='overdue_del_notifier';
5559
5560 CURSOR del_cur IS
5561 SELECT deliverable_id,
5562 deliverable_name,
5563 deliverable_type,
5564 business_document_id,
5565 business_document_version,
5566 business_document_type,
5567 business_document_number,
5568 responsible_party,
5569 external_party_contact_id,
5570 internal_party_contact_id,
5571 requester_id
5572 FROM okc_deliverables
5573 WHERE manage_yn = 'Y'
5574 AND disable_notifications_yn = 'N'
5575 AND notify_overdue_yn = 'Y'
5576 AND overdue_notification_id is null
5577 AND business_document_type <> 'TEMPLATE'
5578 AND deliverable_status IN ('OPEN','REJECTED')
5579 AND actual_due_date < trunc(sysdate); -- bug#3617906 removed trunc on actual due date
5580
5581 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5582 l_msg_count NUMBER;
5583 l_msg_data VARCHAR2(1000);
5584 l_notification_id NUMBER;
5585 j PLS_INTEGER := 0;
5586
5587 TYPE del_cur_tbl IS TABLE OF del_cur%ROWTYPE;
5588 selected_dels del_cur_tbl;
5589
5590 TYPE OverdueNtfIdList IS TABLE OF okc_deliverables.overdue_notification_id%TYPE NOT NULL
5591 INDEX BY PLS_INTEGER;
5592 TYPE DeliverableIdList IS TABLE OF okc_deliverables.deliverable_id%TYPE NOT NULL
5593 INDEX BY PLS_INTEGER;
5594 overdue_ntf_ids OverdueNtfIdList;
5595 deliverable_ids DeliverableIdList;
5596
5597 l_batch_size number(4) := 1000;
5598
5599 --Acq Plan Message Cleanup
5600 l_resolved_msg_name VARCHAR2(30);
5601
5602
5603 BEGIN
5604 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5605 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5606 END IF;
5607
5608 -- call start_activity to create savepoint, check comptability
5609 -- and initialize message list
5610 l_return_status := OKC_API.START_ACTIVITY(l_api_name
5611 ,p_init_msg_list
5612 ,'_PROCESS'
5613 ,x_return_status);
5614
5615 -- check if activity started successfully
5616 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5617 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5618 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5619 RAISE OKC_API.G_EXCEPTION_ERROR;
5620 END IF;
5621
5622
5623 OPEN del_cur;
5624 LOOP -- the following statement fetches 1000 rows or less in each iteration
5625
5626 FETCH del_cur BULK COLLECT INTO selected_dels
5627 LIMIT l_batch_size;
5628
5629 EXIT WHEN selected_dels.COUNT = 0;
5630
5631 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5632 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: selected_dels.COUNT is :'||to_char(selected_dels.COUNT));
5633 END IF;
5634
5635
5636 FOR i IN selected_dels.FIRST..NVL(selected_dels.LAST, -1) LOOP
5637
5638 -- log messages in concurrent program log file
5639 FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5640 selected_dels(i).business_document_type||'-'||selected_dels(i).business_document_number);
5641 FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5642 to_char(selected_dels(i).deliverable_id));
5643
5644 --Acq Plan Message Cleanup
5645 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_OVERDUE_NTF_SUBJECT',selected_dels(i).business_document_type);
5646
5647 okc_deliverable_wf_pvt.deliverables_notifier(
5648 p_api_version => 1.0,
5649 p_init_msg_list => FND_API.G_TRUE,
5650 p_deliverable_id => selected_dels(i).deliverable_id,
5651 p_deliverable_name => selected_dels(i).deliverable_name,
5652 p_deliverable_type => selected_dels(i).deliverable_type,
5653 p_business_document_id => selected_dels(i).business_document_id,
5654 p_business_document_version => selected_dels(i).business_document_version,
5655 p_business_document_type => selected_dels(i).business_document_type,
5656 p_business_document_number => selected_dels(i).business_document_number,
5657 p_resp_party => selected_dels(i).responsible_party,
5658 p_external_contact => selected_dels(i).external_party_contact_id,
5659 p_internal_contact => selected_dels(i).internal_party_contact_id,
5660 p_requester_id => selected_dels(i).requester_id,
5661 --p_msg_code => 'OKC_DEL_OVERDUE_NTF_SUBJECT',
5662 p_msg_code => l_resolved_msg_name,
5663 x_notification_id => l_notification_id,
5664 x_msg_data => l_msg_data,
5665 x_msg_count => l_msg_count,
5666 x_return_status => l_return_status);
5667
5668 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5669 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
5670 END IF;
5671
5672 --If notification id is not null then the deliverables_notifier is success
5673 IF l_notification_id is not null THEN
5674 -- if return status is success then notification is sent to
5675 -- internal or external contact so update table with ntf id
5676 IF l_return_status = 'S' THEN
5677 j := j+1;
5678 deliverable_ids(j) := selected_dels(i).deliverable_id;
5679 overdue_ntf_ids(j) := l_notification_id;
5680 ELSIF l_return_status <> 'S' THEN
5681 -- The return status is success because error notification has been
5682 -- sent to person who launched the concurrent request.
5683 l_return_status := 'S';
5684 END IF;
5685 ELSE
5686 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5687 END IF;
5688
5689 END LOOP;
5690
5691 END LOOP;
5692
5693 CLOSE del_cur;
5694
5695 IF deliverable_ids.COUNT > 0 THEN
5696 FORALL i IN deliverable_ids.FIRST..NVL(deliverable_ids.LAST, -1)
5697
5698 UPDATE okc_deliverables
5699 SET overdue_notification_id = overdue_ntf_ids(i),
5700 last_update_date = sysdate,
5701 last_updated_by = FND_GLOBAL.User_id,
5702 last_update_login =Fnd_Global.Login_Id
5703 WHERE deliverable_id = deliverable_ids(i);
5704
5705 COMMIT;
5706
5707 END IF;
5708
5709 OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
5710
5711 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5712 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier');
5713 END IF;
5714
5715 EXCEPTION
5716 WHEN FND_API.G_EXC_ERROR THEN
5717 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5718 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
5719 END IF;
5720
5721 IF del_cur %ISOPEN THEN
5722 CLOSE del_cur ;
5723 END IF;
5724
5725 x_return_status := G_RET_STS_ERROR;
5726 FND_MSG_PUB.Count_And_Get(
5727 p_count => x_msg_count,
5728 p_data => x_msg_data);
5729
5730 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5731 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5732 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
5733 END IF;
5734
5735 IF del_cur %ISOPEN THEN
5736 CLOSE del_cur ;
5737 END IF;
5738
5739 x_return_status := G_RET_STS_UNEXP_ERROR;
5740 FND_MSG_PUB.Count_And_Get(
5741 p_count => x_msg_count,
5742 p_data => x_msg_data);
5743
5744 WHEN OTHERS THEN
5745 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5746 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.overdue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
5747 END IF;
5748
5749 IF del_cur %ISOPEN THEN
5750 CLOSE del_cur ;
5751 END IF;
5752
5753 x_return_status := G_RET_STS_UNEXP_ERROR;
5754
5755 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5756 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5757 END IF;
5758
5759 FND_MSG_PUB.Count_And_Get(
5760 p_count => x_msg_count,
5761 p_data => x_msg_data);
5762 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
5763
5764 END overdue_del_notifier;
5765
5766
5767 /***
5768 This is the Concurrent Program scheduled to run every day
5769 to send out notifications about beforedue deliverables.
5770 It internally calls API beforedue_del_notifier
5771 ***/
5772 PROCEDURE beforedue_deliverable_manager (
5773 errbuf OUT NOCOPY VARCHAR2,
5774 retcode OUT NOCOPY VARCHAR2)
5775 IS
5776 l_api_name CONSTANT VARCHAR2(30) :='beforedue_deliverable_manager';
5777 l_api_version CONSTANT VARCHAR2(30) := 1.0;
5778 l_init_msg_list VARCHAR2(3) := 'T';
5779 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5780 l_msg_count NUMBER;
5781 l_msg_data VARCHAR2(1000);
5782 E_Resource_Busy EXCEPTION;
5783 PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
5784
5785 BEGIN
5786 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5787 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5788 END IF;
5789 --Initialize the return code
5790 retcode := 0;
5791 --Invoke beforedue_del_notifier
5792 beforedue_del_notifier (
5793 p_api_version => l_api_version ,
5794 p_init_msg_list => l_init_msg_list,
5795 x_return_status => l_return_status,
5796 x_msg_count => l_msg_count,
5797 x_msg_data => l_msg_data);
5798
5799 --check return status
5800 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5801 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5802 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5803 RAISE OKC_API.G_EXCEPTION_ERROR;
5804 END IF;
5805
5806 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5807 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_deliverable_manager');
5808 END IF;
5809 EXCEPTION
5810 WHEN E_Resource_Busy THEN
5811 l_return_status := okc_api.g_ret_sts_error;
5812 RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
5813 IF FND_MSG_PUB.Count_Msg > 0 Then
5814 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5815 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5816 END LOOP;
5817 END IF;
5818 FND_MSG_PUB.initialize;
5819 WHEN OTHERS THEN
5820 retcode := 2;
5821 errbuf := substr(sqlerrm,1,200);
5822 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5823 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5824 END IF;
5825 IF FND_MSG_PUB.Count_Msg > 0 Then
5826 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
5827 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
5828 END LOOP;
5829 END IF;
5830 FND_MSG_PUB.initialize;
5831
5832 END beforedue_deliverable_manager;
5833
5834
5835 /***
5836 Invoked by Concurrent Program "beforedue_deliverable_manager"
5837 Picks all deliverables eligible for before due date notifications
5838 Invokes Deliverable Notifier to send out notifications
5839 Update deliverables with prior_notification_id
5840 ***/
5841 PROCEDURE beforedue_del_notifier (
5842 p_api_version IN NUMBER ,
5843 p_init_msg_list IN VARCHAR2 ,
5844 x_return_status OUT NOCOPY VARCHAR2,
5845 x_msg_count OUT NOCOPY NUMBER,
5846 x_msg_data OUT NOCOPY VARCHAR2)
5847 IS
5848 CURSOR del_cur IS
5849 SELECT *
5850 FROM okc_deliverables
5851 WHERE manage_yn = 'Y'
5852 AND disable_notifications_yn = 'N'
5853 AND notify_prior_due_date_yn = 'Y'
5854 AND prior_notification_id is null
5855 AND business_document_type <> 'TEMPLATE'
5856 AND deliverable_status IN ('OPEN','REJECTED')
5857 AND trunc(actual_due_date) > trunc(sysdate);
5858
5859 l_api_name CONSTANT VARCHAR2(30) :='beforedue_del_notifier';
5860 l_notification_date DATE;
5861 delRecTab delRecTabType;
5862 delNtfTab delRecTabType;
5863 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5864 l_msg_count NUMBER;
5865 l_msg_data VARCHAR2(1000);
5866 l_notification_id NUMBER;
5867 l_deliverable_id NUMBER;
5868 j PLS_INTEGER := 0;
5869 k PLS_INTEGER := 0;
5870
5871 --Acq Plan Message Cleanup
5872 l_resolved_msg_name VARCHAR2(30);
5873 BEGIN
5874
5875 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5876 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
5877 END IF;
5878 -- call start_activity to create savepoint, check comptability
5879 -- and initialize message list
5880 l_return_status := OKC_API.START_ACTIVITY(l_api_name
5881 ,p_init_msg_list
5882 ,'_PROCESS'
5883 ,x_return_status
5884 );
5885 -- check if activity started successfully
5886 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
5887 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5888 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
5889 RAISE OKC_API.G_EXCEPTION_ERROR;
5890 END IF;
5891 ---------------------------------------------------
5892 FOR del_rec IN del_cur LOOP
5893 k := k+1;
5894 delRecTab(k).deliverable_id := del_rec.deliverable_id;
5895 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
5896 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
5897 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
5898 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
5899 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
5900 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
5901 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
5902 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
5903 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
5904 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
5905 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
5906 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
5907 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
5908 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
5909 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
5910 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
5911 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
5912 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
5913 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
5914 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
5915 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
5916 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
5917 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
5918 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
5919 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
5920 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
5921 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
5922 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
5923 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
5924 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
5925 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
5926 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
5927 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
5928 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
5929 delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
5930 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
5931 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
5932 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
5933 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
5934 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
5935 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
5936 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
5937 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
5938 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
5939 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
5940 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
5941 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
5942 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
5943 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
5944 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
5945 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
5946 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
5947 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
5948 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
5949 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
5950 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
5951 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
5952 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
5953 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
5954 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
5955 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
5956 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
5957 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
5958 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
5959 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
5960 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
5961 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
5962 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
5963 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
5964 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
5965 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
5966 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
5967 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
5968 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
5969 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
5970 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
5971 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
5972 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
5973 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
5974 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
5975 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
5976 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
5977 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
5978 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
5979 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
5980 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
5981 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
5982
5983 END LOOP;
5984
5985
5986 -- commented as this is not supported by 8i PL/SQL Bug#3307941
5987 /*OPEN del_cur;
5988 FETCH del_cur BULK COLLECT INTO delRecTab;*/
5989 IF delRecTab.COUNT > 0 THEN
5990 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5991 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
5992 END IF;
5993 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
5994
5995 -- log messages in concurrent program log file
5996 FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
5997 delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
5998 FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
5999 to_char(delRecTab(i).deliverable_id));
6000 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6001 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
6002 END IF;
6003 IF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'DAY' THEN
6004 l_notification_date := trunc(delRecTab(i).actual_due_date)-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
6005 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'WK' THEN
6006 l_notification_date :=trunc(delRecTab(i).actual_due_date)-7*delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE;
6007 ELSIF UPPER(delRecTab(i).NOTIFY_PRIOR_DUE_DATE_UOM) = 'MTH' THEN
6008 select add_months(delRecTab(i).actual_due_date,-delRecTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE)
6009 INTO l_notification_date from dual;
6010 END IF;
6011
6012 IF trunc(l_notification_date) = trunc(sysdate) OR
6013 trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
6014 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6015 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100:Del Id :'||to_char(delRecTab(i).deliverable_id));
6016 END IF;
6017
6018 --Acq Plan Message Cleanup
6019 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_BEFOREDUE_NTF_SUBJECT',delRecTab(i).business_document_type);
6020
6021 okc_deliverable_wf_pvt.deliverables_notifier(
6022 p_api_version => 1.0,
6023 p_init_msg_list => FND_API.G_TRUE,
6024 p_deliverable_id => delRecTab(i).deliverable_id,
6025 p_deliverable_name => delRecTab(i).deliverable_name,
6026 p_deliverable_type => delRecTab(i).deliverable_type,
6027 p_business_document_id => delRecTab(i).business_document_id,
6028 p_business_document_version => delRecTab(i).business_document_version,
6029 p_business_document_type => delRecTab(i).business_document_type,
6030 p_business_document_number => delRecTab(i).business_document_number,
6031 p_resp_party => delRecTab(i).responsible_party,
6032 p_external_contact => delRecTab(i).external_party_contact_id,
6033 p_internal_contact => delRecTab(i).internal_party_contact_id,
6034 p_notify_prior_due_date_value => delRecTab(i).notify_prior_due_date_value,
6035 p_notify_prior_due_date_uom => delRecTab(i).notify_prior_due_date_uom,
6036 --p_msg_code => 'OKC_DEL_BEFOREDUE_NTF_SUBJECT',
6037 p_msg_code => l_resolved_msg_name,
6038 x_notification_id => l_notification_id,
6039 x_msg_data => l_msg_data,
6040 x_msg_count => l_msg_count,
6041 x_return_status => l_return_status);
6042 --check return status
6043 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6044 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
6045 END IF;
6046 IF l_notification_id is not null THEN
6047 -- if return status is success then notification is sent to
6048 -- internal or external contact so update table with ntf id
6049 IF l_return_status = 'S' THEN
6050 j := j+1;
6051 delNtfTab(j) := delRecTab(i);
6052 delNtfTab(j).prior_notification_id := l_notification_id;
6053 delNtfTab(j).last_update_date := sysdate;
6054 delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
6055 delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
6056 ELSIF l_return_status <> 'S' THEN
6057 -- The return status is success because error notification has been
6058 -- sent to person who launched the concurrent request.
6059 l_return_status := 'S';
6060 END IF;
6061 ELSE
6062 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6063 END IF;
6064 END IF; -- call to notifier
6065 END LOOP;
6066 END IF;
6067 IF delNtfTab.COUNT > 0 THEN
6068 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
6069 /** commented as this is not supported by 8i PL/SQL Bug#3307941
6070 UPDATE okc_deliverables SET ROW = delNtfTab(i)
6071 where deliverable_id = l_deliverable_id;
6072 l_deliverable_id := delNtfTab(i).deliverable_id;*/
6073 UPDATE okc_deliverables
6074 SET prior_notification_id = delNtfTab(i).prior_notification_id,
6075 last_update_date = sysdate,
6076 last_updated_by = FND_GLOBAL.User_id,
6077 last_update_login =Fnd_Global.Login_Id
6078 where deliverable_id = delNtfTab(i).deliverable_id;
6079 END LOOP;
6080 COMMIT;
6081 END IF;
6082 IF del_cur %ISOPEN THEN
6083 CLOSE del_cur ;
6084 END IF;
6085 x_return_status := l_return_status;
6086 OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
6087 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6088 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier');
6089 END IF;
6090 EXCEPTION
6091 WHEN FND_API.G_EXC_ERROR THEN
6092 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6093 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
6094 END IF;
6095 IF del_cur %ISOPEN THEN
6096 CLOSE del_cur ;
6097 END IF;
6098 x_return_status := G_RET_STS_ERROR;
6099 FND_MSG_PUB.Count_And_Get(
6100 p_count => x_msg_count,
6101 p_data => x_msg_data
6102 );
6103
6104 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6105 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6106 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6107 END IF;
6108 IF del_cur %ISOPEN THEN
6109 CLOSE del_cur ;
6110 END IF;
6111 x_return_status := G_RET_STS_UNEXP_ERROR;
6112 FND_MSG_PUB.Count_And_Get(
6113 p_count => x_msg_count,
6114 p_data => x_msg_data
6115 );
6116
6117 WHEN OTHERS THEN
6118 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6119 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.beforedue_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6120 END IF;
6121 IF del_cur %ISOPEN THEN
6122 CLOSE del_cur ;
6123 END IF;
6124 x_return_status := G_RET_STS_UNEXP_ERROR;
6125 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6126 END IF;
6127 FND_MSG_PUB.Count_And_Get(
6128 p_count => x_msg_count,
6129 p_data => x_msg_data
6130 );
6131 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
6132
6133 END beforedue_del_notifier;
6134
6135 /***
6136 This is the Concurrent Program scheduled to run every day
6137 to send out escalated notifications about deliverables.
6138 It internally calls API escalation_deliverable_notifier
6139 ***/
6140 PROCEDURE escalation_deliverable_manager (
6141 errbuf OUT NOCOPY VARCHAR2,
6142 retcode OUT NOCOPY VARCHAR2)
6143 IS
6144 l_api_name CONSTANT VARCHAR2(30) :='escalation_deliverable_manager';
6145 l_api_version CONSTANT VARCHAR2(30) := 1.0;
6146 l_init_msg_list VARCHAR2(3) := 'T';
6147 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6148 l_msg_count NUMBER;
6149 l_msg_data VARCHAR2(1000);
6150 E_Resource_Busy EXCEPTION;
6151 PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
6152
6153 BEGIN
6154 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6155 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
6156 END IF;
6157 --Initialize the return code
6158 retcode := 0;
6159 --Invoke escalation_deliverable_notifier
6160 esc_del_notifier(
6161 p_api_version => l_api_version ,
6162 p_init_msg_list => l_init_msg_list,
6163 x_return_status => l_return_status,
6164 x_msg_count => l_msg_count,
6165 x_msg_data => l_msg_data);
6166
6167 --check return status
6168 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
6169 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6170 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
6171 RAISE OKC_API.G_EXCEPTION_ERROR;
6172 END IF;
6173
6174 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6175 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.escalation_deliverable_manager');
6176 END IF;
6177 EXCEPTION
6178 WHEN E_Resource_Busy THEN
6179 l_return_status := okc_api.g_ret_sts_error;
6180 RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
6181 IF FND_MSG_PUB.Count_Msg > 0 Then
6182 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
6183 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
6184 END LOOP;
6185 END IF;
6186 FND_MSG_PUB.initialize;
6187 WHEN OTHERS THEN
6188 retcode := 2;
6189 errbuf := substr(sqlerrm,1,200);
6190 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6191 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6192 END IF;
6193 IF FND_MSG_PUB.Count_Msg > 0 Then
6194 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
6195 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
6196 END LOOP;
6197 END IF;
6198 FND_MSG_PUB.initialize;
6199
6200 END escalation_deliverable_manager;
6201
6202
6203 /***
6204 Invoked by Concurrent Program "escalation_deliverable_manager"
6205 Picks all deliverables eligible for escalation
6206 Invokes Deliverable Notifier to send out notifications only to escalation assignee
6207 Update deliverables with escalation_notification_id
6208 ***/
6209 PROCEDURE esc_del_notifier (
6210 p_api_version IN NUMBER ,
6211 p_init_msg_list IN VARCHAR2 ,
6212 x_return_status OUT NOCOPY VARCHAR2,
6213 x_msg_count OUT NOCOPY NUMBER,
6214 x_msg_data OUT NOCOPY VARCHAR2)
6215 IS
6216 l_api_name CONSTANT VARCHAR2(30) :='esc_del_notifier';
6217 CURSOR del_cur IS
6218 SELECT *
6219 FROM okc_deliverables
6220 WHERE manage_yn = 'Y'
6221 AND disable_notifications_yn = 'N'
6222 AND notify_escalation_yn = 'Y'
6223 AND escalation_assignee is not null
6224 AND escalation_notification_id is null
6225 AND business_document_type <> 'TEMPLATE'
6226 AND deliverable_status IN ('OPEN','REJECTED')
6227 AND actual_due_date < trunc(sysdate);
6228 -- OR actual_due_date = sysdate); bug#3722423
6229 l_notification_date DATE;
6230 delRecTab delRecTabType;
6231 delNtfTab delRecTabType;
6232 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6233 l_msg_count NUMBER;
6234 l_msg_data VARCHAR2(1000);
6235 l_notification_id NUMBER;
6236 l_deliverable_id NUMBER;
6237 j PLS_INTEGER := 0;
6238 k PLS_INTEGER := 0;
6239
6240 --Acq Plan Message Cleanup
6241 l_resolved_msg_name VARCHAR2(30);
6242 BEGIN
6243
6244 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6245 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
6246 END IF;
6247 -- call start_activity to create savepoint, check comptability
6248 -- and initialize message list
6249 l_return_status := OKC_API.START_ACTIVITY(l_api_name
6250 ,p_init_msg_list
6251 ,'_PROCESS'
6252 ,x_return_status
6253 );
6254 -- check if activity started successfully
6255 IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
6256 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6257 ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
6258 RAISE OKC_API.G_EXCEPTION_ERROR;
6259 END IF;
6260 ---------------------------------------------------
6261 FOR del_rec IN del_cur LOOP
6262 k := k+1;
6263 delRecTab(k).deliverable_id := del_rec.deliverable_id;
6264 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
6265 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
6266 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
6267 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
6268 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
6269 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
6270 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
6271 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
6272 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
6273 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
6274 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
6275 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
6276 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
6277 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
6278 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
6279 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
6280 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
6281 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
6282 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
6283 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
6284 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
6285 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
6286 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
6287 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
6288 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
6289 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
6290 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
6291 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
6292 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
6293 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
6294 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
6295 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
6296 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
6297 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
6298 delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
6299 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
6300 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
6301 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
6302 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
6303 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
6304 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
6305 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
6306 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
6307 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
6308 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
6309 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
6310 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
6311 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
6312 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
6313 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
6314 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
6315 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
6316 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
6317 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
6318 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
6319 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
6320 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
6321 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
6322 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
6323 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
6324 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
6325 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
6326 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
6327 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
6328 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
6329 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
6330 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
6331 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
6332 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
6333 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
6334 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
6335 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
6336 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
6337 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
6338 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
6339 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
6340 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
6341 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
6342 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
6343 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
6344 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
6345 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
6346 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
6347 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
6348 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
6349 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
6350 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
6351 END LOOP;
6352
6353
6354 -- commented as this is not supported by 8i PL/SQL Bug#3307941
6355 /*OPEN del_cur;
6356 FETCH del_cur BULK COLLECT INTO delRecTab;*/
6357 IF delRecTab.COUNT > 0 THEN
6358 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6359 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab.COUNT is :'||to_char(delRecTab.COUNT));
6360 END IF;
6361 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
6362 -- log messages in concurrent program log file
6363 FND_FILE.PUT_LINE(FND_FILE.LOG,'Business Document: '||
6364 delRecTab(i).business_document_type||'-'||delRecTab(i).business_document_number);
6365 FND_FILE.PUT_LINE(FND_FILE.LOG,'Deliverable Id: '||
6366 to_char(delRecTab(i).deliverable_id));
6367 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6368 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: del id is :'||to_char(delRecTab(i).deliverable_id));
6369 END IF;
6370
6371 IF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'DAY' THEN
6372 l_notification_date := trunc(delRecTab(i).actual_due_date)+delRecTab(i).NOTIFY_ESCALATION_VALUE;
6373 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'WK' THEN
6374 l_notification_date :=trunc(delRecTab(i).actual_due_date)+7*delRecTab(i).NOTIFY_ESCALATION_VALUE;
6375 ELSIF UPPER(delRecTab(i).NOTIFY_ESCALATION_UOM) = 'MTH' THEN
6376 select add_months(delRecTab(i).actual_due_date,delRecTab(i).NOTIFY_ESCALATION_VALUE)
6377 INTO l_notification_date from dual;
6378 END IF;
6379
6380 IF trunc(l_notification_date) = trunc(sysdate) OR
6381 trunc(l_notification_date) < trunc(sysdate) THEN -- call to notifier
6382
6383 --Acq Plan Messages Cleanup
6384 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_ESCALATE_NTF_SUBJECT',delRecTab(i).business_document_type);
6385
6386 okc_deliverable_wf_pvt.deliverables_notifier(
6387 p_api_version => 1.0,
6388 p_init_msg_list => FND_API.G_TRUE,
6389 p_deliverable_id => delRecTab(i).deliverable_id,
6390 p_deliverable_name => delRecTab(i).deliverable_name,
6391 p_deliverable_type => delRecTab(i).deliverable_type,
6392 p_business_document_id => delRecTab(i).business_document_id,
6393 p_business_document_version => delRecTab(i).business_document_version,
6394 p_business_document_type => delRecTab(i).business_document_type,
6395 p_business_document_number => delRecTab(i).business_document_number,
6396 p_resp_party => delRecTab(i).responsible_party,
6397 p_external_contact => delRecTab(i).external_party_contact_id,
6398 p_internal_contact => delRecTab(i).escalation_assignee,
6399 p_requester_id => delRecTab(i).requester_id,
6400 --p_msg_code => 'OKC_DEL_ESCALATE_NTF_SUBJECT',
6401 p_msg_code => l_resolved_msg_name,
6402 x_notification_id => l_notification_id,
6403 x_msg_data => l_msg_data,
6404 x_msg_count => l_msg_count,
6405 x_return_status => l_return_status);
6406 --check return status
6407 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6408 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: ntf id is :'||to_char(l_notification_id));
6409 END IF;
6410 IF l_notification_id is not null THEN
6411 -- if return status is success then notification is sent to
6412 -- internal or external contact so update table with ntf id
6413 IF l_return_status = 'S' THEN
6414 j := j+1;
6415 delNtfTab(j) := delRecTab(i);
6416 delNtfTab(j).escalation_notification_id := l_notification_id;
6417 delNtfTab(j).last_update_date := sysdate;
6418 delNtfTab(j).last_updated_by := FND_GLOBAL.User_id;
6419 delNtfTab(j).last_update_login:=Fnd_Global.Login_Id;
6420 ELSIF l_return_status <> 'S' THEN
6421 -- The return status is success because error notification has been
6422 -- sent to person who launched the concurrent request.
6423 l_return_status := 'S';
6424 END IF;
6425 ELSE
6426 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6427 END IF;
6428 END IF; -- call to notifier
6429 END LOOP;
6430 END IF;
6431 IF delNtfTab.COUNT > 0 THEN
6432 FOR i IN delNtfTab.FIRST..delNtfTab.LAST LOOP
6433 /** commented as this is not supported by 8i PL/SQL Bug#3307941
6434 UPDATE okc_deliverables SET ROW = delNtfTab(i)
6435 where deliverable_id = l_deliverable_id;
6436 l_deliverable_id := delNtfTab(i).deliverable_id;*/
6437 UPDATE okc_deliverables
6438 SET escalation_notification_id = delNtfTab(i).escalation_notification_id,
6439 last_update_date = sysdate,
6440 last_updated_by = FND_GLOBAL.User_id,
6441 last_update_login =Fnd_Global.Login_Id
6442 where deliverable_id = delNtfTab(i).deliverable_id;
6443 END LOOP;
6444 COMMIT;
6445 END IF;
6446 IF del_cur %ISOPEN THEN
6447 CLOSE del_cur ;
6448 END IF;
6449 x_return_status := l_return_status;
6450 OKC_API.END_ACTIVITY(l_msg_count, l_msg_data);
6451 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6452 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier');
6453 END IF;
6454
6455 EXCEPTION
6456 WHEN FND_API.G_EXC_ERROR THEN
6457 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6458 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_ERROR:'||substr(sqlerrm,1,200));
6459 END IF;
6460 IF del_cur %ISOPEN THEN
6461 CLOSE del_cur ;
6462 END IF;
6463 x_return_status := G_RET_STS_ERROR;
6464 FND_MSG_PUB.Count_And_Get(
6465 p_count => x_msg_count,
6466 p_data => x_msg_data
6467 );
6468
6469 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6470 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6471 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6472 END IF;
6473 IF del_cur %ISOPEN THEN
6474 CLOSE del_cur ;
6475 END IF;
6476 x_return_status := G_RET_STS_UNEXP_ERROR;
6477 FND_MSG_PUB.Count_And_Get(
6478 p_count => x_msg_count,
6479 p_data => x_msg_data
6480 );
6481
6482 WHEN OTHERS THEN
6483 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6484 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.esc_del_notifier with G_EXC_UNEXPECTED_ERROR:'||substr(sqlerrm,1,200));
6485 END IF;
6486 IF del_cur %ISOPEN THEN
6487 CLOSE del_cur ;
6488 END IF;
6489 x_return_status := G_RET_STS_UNEXP_ERROR;
6490 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6491 END IF;
6492 FND_MSG_PUB.Count_And_Get(
6493 p_count => x_msg_count,
6494 p_data => x_msg_data
6495 );
6496 FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
6497 END esc_del_notifier;
6498
6499 -- checks for attachments and deletes them
6500 PROCEDURE delete_attachments (
6501 p_entity_name IN VARCHAR2
6502 ,p_pk1_value IN VARCHAR2
6503 ,x_result OUT NOCOPY VARCHAR2
6504 )
6505 IS
6506 l_api_name CONSTANT VARCHAR2(30) :='delete_attachments';
6507 l_att_exists BOOLEAN;
6508 l_result VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6509
6510 CURSOR att_cur IS
6511 SELECT att.attached_document_id
6512 ,doc.datatype_id
6513 FROM fnd_attached_documents att
6514 ,fnd_documents doc
6515 WHERE att.document_id = doc.document_id
6516 AND att.entity_name = p_entity_name
6517 AND att.pk1_value = p_pk1_value;
6518 att_rec att_cur%ROWTYPE;
6519 x_return_status VARCHAR2(1);
6520 x_msg_count NUMBER;
6521 x_msg_data VARCHAR2(200);
6522
6523 BEGIN
6524
6525 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6526 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6527 END IF;
6528 l_att_exists := attachment_exists(
6529 p_entity_name => p_entity_name
6530 ,p_pk1_value => p_pk1_value );
6531
6532 IF l_att_exists THEN
6533 --delete attachments
6534 FOR att_rec IN att_cur
6535 LOOP
6536 BEGIN
6537 fnd_attached_documents3_pkg.delete_row (
6538 X_attached_document_id => att_rec.attached_document_id,
6539 X_datatype_id => att_rec.datatype_id,
6540 delete_document_flag => 'Y' );
6541 EXCEPTION
6542 WHEN OTHERS THEN
6543 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6544 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'90: Exception when deleting attachment ' || SQLERRM);
6545 END IF;
6546 END;
6547 END LOOP;
6548 END IF;
6549 x_result := l_result;
6550 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6551 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments');
6552 END IF;
6553 EXCEPTION
6554 WHEN OTHERS THEN
6555 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6556 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_attachments in OTHERS');
6557 END IF;
6558 IF att_cur %ISOPEN THEN
6559 CLOSE att_cur ;
6560 END IF;
6561 x_result := G_RET_STS_UNEXP_ERROR;
6562 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6563 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6564 END IF;
6565 FND_MSG_PUB.Count_And_Get(
6566 p_count => x_msg_count,
6567 p_data => x_msg_data
6568 );
6569
6570 END delete_attachments;
6571
6572 /***
6573 1. This API performs bulk delete of deliverables for business documents.
6574 Invoked by OKC_TERMS_UTIL_GRP.purge_documents
6575 2. For each doc_type and doc_id in p_doc_table,
6576 find the deliverables that belong to the business document,
6577 delete the deliverable, status history and attachments.
6578 ***/
6579 PROCEDURE purge_doc_deliverables (
6580 p_api_version IN NUMBER,
6581 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
6582 p_doc_table IN OKC_TERMS_UTIL_GRP.doc_tbl_type,
6583 x_msg_data OUT NOCOPY VARCHAR2,
6584 x_msg_count OUT NOCOPY NUMBER,
6585 x_return_status OUT NOCOPY VARCHAR2)
6586 IS
6587 l_api_name CONSTANT VARCHAR2(30) :='purge_doc_deliverables';
6588 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
6589 l_msg_count NUMBER;
6590 l_msg_data VARCHAR2(1000);
6591 l_api_version CONSTANT VARCHAR2(30) := 1.0;
6592 l_deliverable_id NUMBER;
6593 BEGIN
6594
6595 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6596 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6597 END IF;
6598 IF p_doc_table.COUNT <> 0 THEN
6599 FOR i in 1.. p_doc_table.COUNT LOOP
6600 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6601 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Id:'||to_char(p_doc_table(i).doc_id));
6602 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Business document Type:'||p_doc_table(i).doc_type);
6603 END IF;
6604 delete_deliverables (
6605 p_api_version => l_api_version,
6606 p_init_msg_list => OKC_API.G_FALSE,
6607 p_doc_id => p_doc_table(i).doc_id,
6608 p_doc_type => p_doc_table(i).doc_type,
6609 x_msg_data => l_msg_data,
6610 x_msg_count => l_msg_count,
6611 x_return_status => l_return_status);
6612 END LOOP;
6613 END IF;
6614 x_return_status := l_return_status;
6615 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6616 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables');
6617 END IF;
6618
6619 EXCEPTION
6620 WHEN FND_API.G_EXC_ERROR THEN
6621 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6622 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_ERROR');
6623 END IF;
6624 x_return_status := G_RET_STS_ERROR;
6625 FND_MSG_PUB.Count_And_Get(
6626 p_count => x_msg_count,
6627 p_data => x_msg_data
6628 );
6629
6630 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6631 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6632 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_UNEXPECTED_ERROR');
6633 END IF;
6634 x_return_status := G_RET_STS_UNEXP_ERROR;
6635 FND_MSG_PUB.Count_And_Get(
6636 p_count => x_msg_count,
6637 p_data => x_msg_data
6638 );
6639
6640 WHEN OTHERS THEN
6641 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6642 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.purge_doc_deliverables with G_EXC_UNEXPECTED_ERROR');
6643 END IF;
6644 x_return_status := G_RET_STS_UNEXP_ERROR;
6645 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6646 END IF;
6647 FND_MSG_PUB.Count_And_Get(
6648 p_count => x_msg_count,
6649 p_data => x_msg_data
6650 );
6651
6652 END purge_doc_deliverables;
6653
6654 /***
6655 1. This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6656 2. This API will select all deliverables for a given
6657 business document type and version
6658 3. Delete all deliverables along with the attachments and status history
6659 ***/
6660 PROCEDURE delete_deliverables (
6661 p_api_version IN NUMBER,
6662 p_init_msg_list IN VARCHAR2,
6663 p_doc_id IN NUMBER,
6664 p_doc_type IN VARCHAR2,
6665 p_doc_version IN NUMBER DEFAULT NULL,
6666 x_msg_data OUT NOCOPY VARCHAR2,
6667 x_msg_count OUT NOCOPY NUMBER,
6668 x_return_status OUT NOCOPY VARCHAR2
6669 ,p_retain_lock_deliverables_yn IN VARCHAR2
6670 ,p_retain_exhibits IN VARCHAR2 := 'N')
6671 IS
6672 CURSOR del_cur IS
6673 SELECT deliverable_id
6674 FROM okc_deliverables
6675 WHERE business_document_id = p_doc_id
6676 AND business_document_type = p_doc_type
6677 AND ( p_retain_lock_deliverables_yn = 'N'
6678 OR
6679 (p_retain_lock_deliverables_yn = 'Y'
6680 AND amendment_operation IS NULL)
6681 );
6682
6683 CURSOR del_version_cur IS
6684 SELECT deliverable_id
6685 FROM okc_deliverables
6686 WHERE business_document_id = p_doc_id
6687 AND business_document_type = p_doc_type
6688 AND business_document_version = p_doc_version
6689 AND ( p_retain_lock_deliverables_yn = 'N'
6690 OR
6691 (p_retain_lock_deliverables_yn = 'Y'
6692 AND amendment_operation IS NULL)
6693 );
6694
6695
6696 l_result VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6697 l_api_name VARCHAR2(30) :='delete_deliverables';
6698 TYPE delIdTabType IS TABLE OF NUMBER;
6699 delIdTab delIdTabType;
6700 BEGIN
6701
6702 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6703 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6704 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_retain_lock_deliverables_yn : ' || p_retain_lock_deliverables_yn);
6705 END IF;
6706
6707 -- Call the CDRL API.
6708 IF (p_retain_exhibits = 'N') THEN
6709 OKC_CDRL_PVT.delete_doc_exhibits (
6710 p_api_version => 1.0,
6711 p_init_msg_list => FND_API.G_FALSE,
6712 p_commit => FND_API.G_FALSE,
6713 p_doc_class => NULL, -- Value will be Derived in the API
6714 p_doc_type => p_doc_type,
6715 p_doc_id => p_doc_id,
6716 p_doc_version => p_doc_version,
6717 p_mode => NULL,
6718 p_retain_lock_deliverables_yn => p_retain_lock_deliverables_yn,
6719 x_msg_data => x_msg_data,
6720 x_msg_count => x_msg_count,
6721 x_return_status => x_return_status
6722 ) ;
6723 END IF;
6724
6725 --------------------------------------------
6726 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6727 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6728 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6729 RAISE FND_API.G_EXC_ERROR ;
6730 END IF;
6731 --------------------------------------------
6732
6733
6734 -- Delete specific version of deliverables or all deliverables
6735 -- based on p_doc_version
6736 IF p_doc_version IS NULL THEN
6737 OPEN del_cur;
6738 FETCH del_cur BULK COLLECT INTO delIdTab;
6739 ELSIF p_doc_version IS NOT NULL THEN
6740 OPEN del_version_cur;
6741 FETCH del_version_cur BULK COLLECT INTO delIdTab;
6742 END IF;
6743 IF delIdTab.COUNT <> 0 THEN
6744 FOR i in delIdTab.FIRST..delIdTab.LAST LOOP
6745 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6746 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Deleting Deliverable Id :'||to_char(delIdTab(i)));
6747 END IF;
6748 -- delete deliverables status history
6749 DELETE FROM okc_del_status_history
6750 WHERE deliverable_id = delIdTab(i);
6751 -- delete attachments if any
6752 delete_attachments (
6753 p_entity_name => G_ENTITY_NAME
6754 ,p_pk1_value => delIdTab(i)
6755 ,x_result => l_result);
6756 IF l_result = 'S' THEN
6757 -- delete deliverables
6758 DELETE FROM okc_deliverables
6759 WHERE deliverable_id = delIdTab(i);
6760 DELETE FROM OKC_DELIVERABLES_EXT_B
6761 WHERE deliverable_id = delIdTab(i);
6762 DELETE FROM OKC_DELIVERABLES_EXT_TL
6763 WHERE deliverable_id = delIdTab(i);
6764 END IF;
6765
6766
6767 END LOOP;
6768 END IF; -- delIdTab.COUNT <> 0
6769 IF del_cur %ISOPEN THEN
6770 CLOSE del_cur ;
6771 END IF;
6772 IF del_version_cur %ISOPEN THEN
6773 CLOSE del_version_cur ;
6774 END IF;
6775 x_return_status := l_result;
6776 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6777 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables');
6778 END IF;
6779
6780 EXCEPTION
6781 WHEN FND_API.G_EXC_ERROR THEN
6782 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6783 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_ERROR');
6784 END IF;
6785 IF del_cur %ISOPEN THEN
6786 CLOSE del_cur ;
6787 END IF;
6788 IF del_version_cur %ISOPEN THEN
6789 CLOSE del_version_cur ;
6790 END IF;
6791 x_return_status := G_RET_STS_ERROR;
6792 FND_MSG_PUB.Count_And_Get(
6793 p_count => x_msg_count,
6794 p_data => x_msg_data
6795 );
6796
6797 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6798 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6799 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_UNEXPECTED_ERROR');
6800 END IF;
6801 IF del_cur %ISOPEN THEN
6802 CLOSE del_cur ;
6803 END IF;
6804 IF del_version_cur %ISOPEN THEN
6805 CLOSE del_version_cur ;
6806 END IF;
6807 x_return_status := G_RET_STS_UNEXP_ERROR;
6808 FND_MSG_PUB.Count_And_Get(
6809 p_count => x_msg_count,
6810 p_data => x_msg_data
6811 );
6812
6813 WHEN OTHERS THEN
6814 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6815 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverables with G_EXC_UNEXPECTED_ERROR');
6816 END IF;
6817 IF del_cur %ISOPEN THEN
6818 CLOSE del_cur ;
6819 END IF;
6820 IF del_version_cur %ISOPEN THEN
6821 CLOSE del_version_cur ;
6822 END IF;
6823 x_return_status := G_RET_STS_UNEXP_ERROR;
6824 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6825 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6826 END IF;
6827 FND_MSG_PUB.Count_And_Get(
6828 p_count => x_msg_count,
6829 p_data => x_msg_data
6830 );
6831
6832 END delete_deliverables;
6833
6834 /***
6835 1. This API is invoked by OKC_TERMS_UTIL_PVT.merge_template_working_copy
6836 2. This API will select all deliverables for a given source template id
6837 3. Update all deliverables on the target template Id
6838 set the business_document_id = source template id
6839 ***/
6840 PROCEDURE update_del_for_template_merge (
6841 p_api_version IN NUMBER,
6842 p_init_msg_list IN VARCHAR2,
6843 p_base_template_id IN NUMBER,
6844 p_working_template_id IN NUMBER,
6845 x_msg_data OUT NOCOPY VARCHAR2,
6846 x_msg_count OUT NOCOPY NUMBER,
6847 x_return_status OUT NOCOPY VARCHAR2)
6848 IS
6849 CURSOR del_cur IS
6850 SELECT deliverable_id
6851 FROM okc_deliverables
6852 WHERE business_document_id = p_working_template_id
6853 AND business_document_type = 'TEMPLATE';
6854 TYPE delIdRecTabType IS TABLE OF NUMBER;
6855 delIdTab delIdRecTabType;
6856 l_api_name CONSTANT VARCHAR2(30) :='update_del_for_template_merge';
6857 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6858 BEGIN
6859
6860 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6861 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6862 END IF;
6863 OPEN del_cur;
6864 FETCH del_cur BULK COLLECT INTO delIdTab;
6865 IF delIdTab.COUNT <> 0 THEN
6866 FORALL j IN delIdTab.FIRST..delIdTab.LAST
6867 UPDATE okc_deliverables
6868 SET business_document_id = p_base_template_id,
6869 last_updated_by= Fnd_Global.User_Id,
6870 last_update_date = sysdate,
6871 last_update_login=Fnd_Global.Login_Id
6872 WHERE deliverable_id = delIdTab(j);
6873 END IF;
6874 IF del_cur %ISOPEN THEN
6875 CLOSE del_cur ;
6876 END IF;
6877 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6878 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge');
6879 END IF;
6880 x_return_status := l_return_status;
6881 EXCEPTION
6882 WHEN FND_API.G_EXC_ERROR THEN
6883 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6884 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_ERROR');
6885 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6886 END IF;
6887 IF del_cur %ISOPEN THEN
6888 CLOSE del_cur ;
6889 END IF;
6890 x_return_status := G_RET_STS_ERROR;
6891 FND_MSG_PUB.Count_And_Get(
6892 p_count => x_msg_count,
6893 p_data => x_msg_data
6894 );
6895
6896 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6897 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6898 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_UNEXPECTED_ERROR');
6899 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6900 END IF;
6901 IF del_cur %ISOPEN THEN
6902 CLOSE del_cur ;
6903 END IF;
6904 x_return_status := G_RET_STS_UNEXP_ERROR;
6905 FND_MSG_PUB.Count_And_Get(
6906 p_count => x_msg_count,
6907 p_data => x_msg_data
6908 );
6909
6910 WHEN OTHERS THEN
6911 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6912 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.update_del_for_template_merge with G_EXC_UNEXPECTED_ERROR');
6913 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: error is:'||substr(sqlerrm,1,200));
6914 END IF;
6915 IF del_cur %ISOPEN THEN
6916 CLOSE del_cur ;
6917 END IF;
6918 x_return_status := G_RET_STS_UNEXP_ERROR;
6919 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
6920 END IF;
6921 FND_MSG_PUB.Count_And_Get(
6922 p_count => x_msg_count,
6923 p_data => x_msg_data
6924 );
6925
6926 END update_del_for_template_merge;
6927
6928 -- Returns the max date of the last_amendment_date for a busdoc
6929 -- if the deliverables did not get amended then returns the
6930 --max last update date
6931 /*** added new signature bug#3192512**/
6932
6933 FUNCTION get_last_amendment_date (
6934 p_api_version IN NUMBER
6935 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6936
6937 ,x_return_status OUT NOCOPY VARCHAR2
6938 ,x_msg_data OUT NOCOPY VARCHAR2
6939 ,x_msg_count OUT NOCOPY NUMBER
6940
6941 ,p_busdoc_id IN NUMBER
6942 ,p_busdoc_type IN VARCHAR2
6943 ,p_busdoc_version IN NUMBER)
6944 RETURN DATE
6945 IS
6946 -- always go by the -99 version as amendments happen only on -99
6947 -- bug#3293314
6948 -- Filter internal deliverables as they are not considered in amendments 20th May 2004.
6949 -- bug#3641366 get max last amend date from across the versions if it is null then get
6950 -- max creation date from across versions
6951 -- updated cursor for bug#4069955
6952 CURSOR del_cur IS
6953 SELECT NVL(MAX(del.last_amendment_date),MAX(del.creation_date))
6954 FROM
6955 okc_deliverables del
6956 ,okc_deliverable_types_b delType
6957 WHERE del.business_document_id = p_busdoc_id
6958 AND del.business_document_type = p_busdoc_type
6959 AND del.recurring_del_parent_id is null
6960 --AND manage_yn = 'N' commented to reproduce the bug#3667445
6961 --AND business_document_version = -99 commented for bug#3641366
6962 --AND deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
6963 AND del.deliverable_type = delType.deliverable_type_code
6964 AND delType.internal_flag = 'N';
6965
6966 /*CURSOR create_date_cur IS
6967 SELECT MAX(last_amendment_date)
6968 FROM okc_deliverables
6969 WHERE business_document_id = p_busdoc_id
6970 AND business_document_type = p_busdoc_type
6971 AND business_document_version = -99
6972 AND deliverable_type not like '%INTERNAL%';*/
6973 l_api_name CONSTANT VARCHAR2(30) :='get_last_amendment_date';
6974 l_date DATE;
6975
6976 BEGIN
6977
6978
6979 -- Initialize API return status to success
6980 x_return_status := OKC_API.G_RET_STS_SUCCESS;
6981
6982
6983 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6984 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6985 END IF;
6986 OPEN del_cur;
6987 FETCH del_cur INTO l_date;
6988 /*bug# 3641366 IF l_date is null THEN
6989 OPEN create_date_cur;
6990 FETCH create_date_cur INTO l_date;
6991 CLOSE create_date_cur;
6992 END IF;*/
6993 IF del_cur %ISOPEN THEN
6994 CLOSE del_cur ;
6995 END IF;
6996
6997 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6998 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_last_amendment_date');
6999 END IF;
7000 RETURN l_date;
7001
7002 EXCEPTION
7003 WHEN OTHERS THEN
7004 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7005 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving get_last_amendment_date because of EXCEPTION: '||sqlerrm);
7006 END IF;
7007
7008 IF del_cur%ISOPEN THEN
7009 CLOSE del_cur;
7010 END IF;
7011
7012 /*bug# 3641366 IF create_date_cur%ISOPEN THEN
7013 CLOSE create_date_cur;
7014 END IF;*/
7015 x_return_status := G_RET_STS_UNEXP_ERROR ;
7016 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7017 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7018 END IF;
7019 FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
7020 , p_count => x_msg_count
7021 , p_data => x_msg_data );
7022
7023 RETURN null;
7024 END get_last_amendment_date;
7025
7026
7027 /**
7028 * This helper function returns valid day of week for the given date.
7029 * It makes sure that days sequence is matching the seeded days sequence in
7030 * DAY_OF_WEEK lookup type, which is standard as per AMERICA territory.
7031 */
7032 FUNCTION getStartDayOfWeek(
7033 p_start_date in date)
7034 return number is
7035
7036 l_day_of_week number;
7037 l_api_name CONSTANT VARCHAR2(30) :='getStartDayOfWeek';
7038 BEGIN
7039 IF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SUN' THEN
7040 return 1;
7041 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='MON' THEN
7042 return 2;
7043 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='TUE' THEN
7044 return 3;
7045 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='WED' THEN
7046 return 4;
7047 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='THU' THEN
7048 return 5;
7049 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='FRI' THEN
7050 return 6;
7051 ELSIF TO_CHAR(p_start_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') ='SAT' THEN
7052 return 7;
7053 END IF;
7054
7055 EXCEPTION
7056 WHEN OTHERS THEN
7057 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7058 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
7059 END IF;
7060 END getStartDayOfWeek;
7061
7062
7063 /**
7064 * This function Returns end date as actual date for given Start date,
7065 * time unit(DAYS, WEEKS, MONTHS), duration and (B)efore/(A)fter.
7066 */
7067 FUNCTION get_actual_date(
7068 p_start_date in date,
7069 p_timeunit varchar2,
7070 p_duration number,
7071 p_before_after varchar2)
7072 return date is
7073
7074 l_end_date date := NULL;
7075 l_timeunit varchar2(30);
7076 l_duration number := 0;
7077 x_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7078 l_api_name CONSTANT VARCHAR2(30) :='get_actual_date';
7079
7080 begin
7081 --- check if time unit and duration values are set
7082 if p_timeunit is NULL and
7083 p_duration is NULL Then
7084 return (NULL);
7085 end if;
7086
7087 --- if before
7088 if p_before_after = 'B' then
7089 l_duration := -1 * p_duration;
7090 else --- if after
7091 l_duration := p_duration;
7092 end if;
7093
7094 --- If time unit is MONTHS
7095 if p_timeunit = 'MTH' then
7096 if l_duration > 0 then
7097 l_end_date := add_months(p_start_date,l_duration);
7098 elsif l_duration < 0 then
7099 l_end_date := add_months(p_start_date,l_duration);
7100 elsif l_duration = 0 then
7101 l_end_date := p_start_date;
7102 end if;
7103 return(l_end_date);
7104
7105 --- If time unit is DAYS
7106 elsif p_timeunit = 'DAY' then
7107 if l_duration > 0 then
7108 l_end_date := p_start_date + l_duration;
7109 elsif l_duration < 0 then
7110 l_end_date := p_start_date + l_duration;
7111 elsif l_duration = 0 then
7112 l_end_date := p_start_date;
7113 end if;
7114 return(l_end_date);
7115
7116 --- If time unit is WEEKS
7117 elsif p_timeunit = 'WK' then
7118 if l_duration > 0 then
7119 l_end_date := p_start_date + ((l_duration*7));
7120 elsif l_duration < 0 then
7121 l_end_date := p_start_date + ((l_duration*7));
7122 elsif l_duration = 0 then
7123 l_end_date := p_start_date;
7124 end if;
7125 return(l_end_date);
7126 else
7127 return(NULL);
7128 end if;
7129 EXCEPTION
7130 WHEN OTHERS THEN
7131 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7132 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: End Date Not Found');
7133 END IF;
7134 RETURN(null);
7135 END get_actual_date;
7136
7137 /**
7138 * Resolve recurring dates for given start date, end date and repeat
7139 * frequency, day of month, day of week. Returns Table of dates resolved.
7140 */
7141 PROCEDURE get_recurring_dates (
7142 p_api_version IN NUMBER,
7143 p_init_msg_list IN VARCHAR2,
7144 p_start_date in date,
7145 p_end_date in date,
7146 p_frequency in number,
7147 p_recurr_day_of_month number,
7148 p_recurr_day_of_week number,
7149 x_recurr_dates OUT NOCOPY recurring_dates_tab_type,
7150 x_msg_data OUT NOCOPY VARCHAR2,
7151 x_msg_count OUT NOCOPY NUMBER,
7152 x_return_status OUT NOCOPY VARCHAR2)
7153 IS
7154 --- User defined Exception for handling invalid start date
7155 INVALID_START_DATE EXCEPTION;
7156 PRAGMA EXCEPTION_INIT(INVALID_START_DATE, -01839);
7157
7158 l_daynum_of_week number := 0;
7159 l_daynum_offset number := 0;
7160 l_day number := 0;
7161 l_frequency number := 0;
7162 l_date date := NULL;
7163 dates_count number := 0;
7164 l_api_name CONSTANT VARCHAR2(30) :='get_recurring_dates';
7165
7166 BEGIN
7167 -- check the frequency, if 0 or null, reset to 1
7168 if p_frequency = 0 OR null THEN
7169 l_frequency := 1;
7170 else
7171 l_frequency := p_frequency;
7172 end if;
7173
7174 -- Check if p_recurr_day_of_month and p_recurr_day_of_week are null, if both are null that means
7175 -- deliverable repeats daily.
7176
7177 IF p_recurr_day_of_month IS NULL AND p_recurr_day_of_week IS NULL
7178 THEN
7179
7180 -- Calculate the end date
7181 l_date := p_start_date;
7182 IF (TRUNC(l_date) > TRUNC(p_end_date) ) THEN
7183 x_return_status := OKC_API.G_RET_STS_SUCCESS;
7184 return;
7185 end if;
7186
7187 -- initialize the count to add into table of records
7188 dates_count := dates_count +1;
7189
7190 ---
7191 while (TRUNC(l_date) <= TRUNC(p_end_date)) loop
7192 x_recurr_dates(dates_count) := l_date;
7193 l_date := l_date + l_frequency;
7194 dates_count := dates_count +1;
7195 end loop;
7196 RETURN;
7197 END IF;
7198
7199
7200 ---- repeat every WEEK
7201 if p_recurr_day_of_month is NULL then
7202
7203 -- find the offset between given day of week and calculated day based on
7204 -- start date
7205 -- Fix for bug # 3438381
7206 l_daynum_of_week := getStartDayOfWeek(p_start_date); -- to_char(p_start_date,'D');
7207 l_daynum_offset := p_recurr_day_of_week - l_daynum_of_week ;
7208
7209 --- if offset is less than 0, subtract from 7 (for the week)
7210 if l_daynum_offset < 0 then
7211 l_daynum_offset := 7 + l_daynum_offset;
7212 end if;
7213
7214 --- Calculate the end date
7215 l_date := p_start_date + l_daynum_offset;
7216 if TRUNC(l_date) > TRUNC(p_end_date) then
7217 x_return_status := OKC_API.G_RET_STS_SUCCESS;
7218 return;
7219 end if;
7220
7221 -- initialize the count to add into table of records
7222 dates_count := dates_count +1;
7223
7224 ---
7225 while (TRUNC(l_date) <= TRUNC(p_end_date)) loop
7226 x_recurr_dates(dates_count) := l_date;
7227 l_date := l_date + (7*l_frequency);
7228 dates_count := dates_count +1;
7229 end loop;
7230 else ---- repeat every MONTH
7231
7232 -- set the given day of month
7233 l_day := p_recurr_day_of_month;
7234
7235 --- if l_day is 99 repeat every last day of month
7236 if l_day = 99 THEN
7237
7238 --- get last day of given start date month
7239 l_date := last_day(p_start_date);
7240
7241 -- initialize the count to add into table of records
7242 dates_count := dates_count +1;
7243
7244 --- Loop through, unles meet end date
7245 while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
7246 x_recurr_dates(dates_count) := l_date;
7247 l_date := last_day(add_months(l_date, l_frequency));
7248 dates_count := dates_count +1;
7249 END LOOP;
7250 else --- repeat every given day of month
7251 begin
7252 --- The first date based on given day of month
7253 l_date := to_date(lpad(l_day,2,'0') ||
7254 SUBSTR(to_char(p_start_date,'ddmmyyyy'), 3),
7255 'ddmmyyyy');
7256 --- If date is not valid (for e.g. 30 or 29th Feb)
7257 EXCEPTION
7258 WHEN INVALID_START_DATE THEN
7259 --- set l_Date to the last day of month
7260 l_date := last_day(p_start_date);
7261 end;
7262 end if;
7263
7264 --- if calculated day comes out to be less than start date, calulate
7265 --- the first date here itself
7266 if TRUNC(l_date) < TRUNC(p_start_date) THEN
7267 l_date := add_months(l_date, l_frequency);
7268 end if;
7269
7270 -- initialize the count to add into table of records
7271 dates_count := dates_count +1;
7272
7273 --- Loop through, unles meet end date
7274 while (TRUNC(l_date) <= TRUNC(p_end_date)) LOOP
7275 x_recurr_dates(dates_count) := l_date;
7276 l_date := add_months(l_date, l_frequency);
7277 dates_count := dates_count +1;
7278 END LOOP;
7279 end if;
7280 EXCEPTION
7281 WHEN OTHERS THEN
7282 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7283 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.get_recurring_dates with OTHER ERROR');
7284 END IF;
7285 x_return_status := OKC_API.G_RET_STS_ERROR;
7286 FND_MSG_PUB.Count_And_Get(
7287 p_count => x_msg_count,
7288 p_data => x_msg_data
7289 );
7290 END get_recurring_dates;
7291
7292 FUNCTION internal_contact_valid(
7293 p_contact_id NUMBER
7294 ) RETURN VARCHAR2
7295 IS
7296
7297 CURSOR fnd_user_cur IS
7298 select employee_id from fnd_user
7299 where employee_id = p_contact_id;
7300
7301 fnd_user_rec fnd_user_cur%ROWTYPE;
7302
7303 CURSOR contact_cur IS
7304 select email_address
7305 from per_all_people_f
7306 where person_id = p_contact_id
7307 --and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
7308 and trunc(sysdate) between effective_start_date and effective_end_date;
7309
7310
7311 contact_rec contact_cur%ROWTYPE;
7312 l_api_name CONSTANT VARCHAR2(30) :='internal_contact_valid';
7313
7314
7315 BEGIN
7316 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7317 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid ');
7318 END IF;
7319 OPEN fnd_user_cur;
7320 FETCH fnd_user_cur INTO fnd_user_rec;
7321 IF fnd_user_cur%FOUND THEN
7322 --contact person is a fnd user, so it's ok
7323 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7324 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is a fnd user, thus returning Y');
7325 END IF;
7326 RETURN('Y');
7327 ELSE
7328 OPEN contact_cur;
7329 FETCH contact_cur INTO contact_rec;
7330 IF contact_cur%FOUND THEN
7331 IF(contact_rec.email_address is not null) THEN
7332 --contact person is not fnd user, but it has an email address in per_people_all
7333 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7334 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not a fnd user, but has an email address, thus returning Y');
7335 END IF;
7336 RETURN('Y');
7337 ELSE
7338 --not a fnd user, no email address either
7339 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7340 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not a fnd user, does not have an email address, thus returning N');
7341 END IF;
7342 RETURN('N');
7343 END IF;
7344 ELSE
7345 --not a fnd user, not in per_people_all
7346 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7347 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'contact is not in per_people_f also not a fnd user, thus returning N');
7348 END IF;
7349 RETURN('N');
7350 END IF;
7351 END IF;
7352 CLOSE fnd_user_cur;
7353 CLOSE contact_cur;
7354 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7355 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid');
7356 END IF;
7357
7358 EXCEPTION
7359 WHEN OTHERS THEN
7360 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7361 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_valid with Exception');
7362 END IF;
7363 IF fnd_user_cur %ISOPEN THEN
7364 CLOSE fnd_user_cur ;
7365 END IF;
7366 IF contact_cur %ISOPEN THEN
7367 CLOSE contact_cur ;
7368 END IF;
7369 RETURN('N');
7370 END internal_contact_valid;
7371
7372
7373 /**
7374 * This function takes a contact_id
7375 * and check in table per_people_f
7376 * to see if that contact exists
7377 * @return true if the contact is found
7378 * false otherwise
7379 */
7380 FUNCTION internal_contact_exists(
7381 p_contact_id NUMBER
7382 ) RETURN VARCHAR2
7383 IS
7384 CURSOR contact_cur IS
7385 select 'X'
7386 from per_all_people_f
7387 where person_id = p_contact_id
7388 and trunc(sysdate) < nvl(effective_end_date, trunc(sysdate + 1));
7389
7390
7391 contact_rec contact_cur%ROWTYPE;
7392 l_api_name CONSTANT VARCHAR2(30) :='internal_contact_exists';
7393
7394 BEGIN
7395
7396 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7397 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists ');
7398 END IF;
7399 OPEN contact_cur;
7400 FETCH contact_cur INTO contact_rec;
7401 IF contact_cur%FOUND THEN
7402 RETURN('Y');
7403 ELSE
7404 RETURN('N');
7405 END IF;
7406 CLOSE contact_cur;
7407 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7408 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists');
7409 END IF;
7410 EXCEPTION
7411 WHEN OTHERS THEN
7412 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7413 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.internal_contact_exists with Exception');
7414 END IF;
7415 IF contact_cur %ISOPEN THEN
7416 CLOSE contact_cur ;
7417 END IF;
7418 RETURN('N');
7419 END internal_contact_exists;
7420
7421
7422 /**
7423 * This function checks if a given contact_id
7424 * exists in po_supplier_contacts_val_v
7425 * @return true if a record is found with the given contact_id
7426 * false otherwise
7427 */
7428 FUNCTION external_contact_valid(
7429 p_party_id IN NUMBER
7430 ,p_party_role IN VARCHAR2
7431 ,p_contact_id IN NUMBER
7432 ) RETURN VARCHAR2 IS
7433
7434
7435 -- 4145213 changed hz_parties select to synch up with ExternalPartyContact LOV query
7436 -- 4208420 changed hz_parties select to synch up with ExternalPartyContact LOV query
7437
7438 CURSOR contact_cur IS
7439 select 'X'
7440 from
7441 po_supplier_users_v
7442 where user_party_id = p_contact_id
7443 and po_vendor_id = p_party_id
7444 and 'SUPPLIER_ORG' = p_party_role
7445 UNION
7446 SELECT 'X'
7447 FROM hz_parties contact,
7448 hz_relationships hr
7449 WHERE hr.subject_id = contact.party_id
7450 AND 'SUPPLIER_ORG' <> p_party_role
7451 And hr.object_id = p_party_id
7452 And contact.party_id = p_contact_id
7453 AND hr.relationship_type = 'CONTACT'
7454 AND hr.relationship_code = 'CONTACT_OF'
7455 and hr.subject_type = 'PERSON'
7456 and hr.object_type = 'ORGANIZATION'
7457 and hr.subject_table_name ='HZ_PARTIES'
7458 and hr.object_table_name ='HZ_PARTIES'
7459 AND hr.status = 'A'
7460 AND hr.start_date <= sysdate
7461 AND nvl(hr.end_date, sysdate + 1) > sysdate;
7462
7463
7464 contact_rec contact_cur%ROWTYPE;
7465 l_api_name CONSTANT VARCHAR2(30) :='external_contact_valid';
7466
7467 BEGIN
7468
7469 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7470 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7471 ||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid ');
7472 END IF;
7473 OPEN contact_cur;
7474 FETCH contact_cur INTO contact_rec;
7475 IF contact_cur%FOUND THEN
7476 RETURN('Y');
7477 ELSE
7478 RETURN('N');
7479 END IF;
7480 CLOSE contact_cur;
7481
7482 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7483 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
7484 ||l_api_name,'101: OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid');
7485 END IF;
7486 EXCEPTION
7487 WHEN OTHERS THEN
7488 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7489 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.external_contact_valid with Exception');
7490 END IF;
7491 IF contact_cur %ISOPEN THEN
7492 CLOSE contact_cur ;
7493 END IF;
7494 RETURN('N');
7495 END external_contact_valid;
7496
7497 /**
7498 * This function returns the meaning of a given
7499 * fnd lookup type and code
7500 */
7501 FUNCTION get_lookup_meaning(
7502 p_lookup_type IN VARCHAR2,
7503 p_lookup_code IN VARCHAR2
7504 ) RETURN VARCHAR2
7505
7506 IS
7507
7508
7509 l_meaning VARCHAR2(80);
7510 l_api_name CONSTANT VARCHAR2(30) :='get_lookup_meaning';
7511
7512 BEGIN
7513 select meaning into l_meaning
7514 from fnd_lookups
7515 where lookup_type = p_lookup_type
7516 and lookup_code = p_lookup_code;
7517
7518 return l_meaning;
7519
7520 EXCEPTION
7521 WHEN OTHERS THEN
7522 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7523 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102: Leaving OKC_DELIVERABLE_PROCESS_PVT.get_lookup_meaning with exception');
7524 END IF;
7525
7526 RETURN '';
7527 END get_lookup_meaning;
7528
7529
7530 /**
7531 * This procedure checks if there is any error related to a given
7532 * deliverable's notification details
7533 * @modifies px_qa_result_tbl table of records that contains validation
7534 * errors and warnings
7535 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7536 * OKC_API.G_RET_STS_ERROR if failes
7537 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7538 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7539 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7540 */
7541 PROCEDURE check_notifications (
7542 del_rec IN OKC_DELIVERABLES%ROWTYPE,
7543 p_severity IN VARCHAR2,
7544 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7545 x_return_status OUT NOCOPY VARCHAR2
7546 ) IS
7547
7548 l_api_version CONSTANT NUMBER := 1;
7549 l_api_name CONSTANT VARCHAR2(30) := 'check_notifications';
7550 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7551 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
7552 l_index PLS_INTEGER := 0;
7553 l_start PLS_INTEGER := 0;
7554 l_message_txt VARCHAR2(2000);
7555 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7556 l_qa_code VARCHAR2(80) := 'CHECK_NOTIFICATIONS';
7557 l_short_desc VARCHAR2(80);
7558
7559 --Acq Plan Message Cleanup
7560 l_resolved_msg_name VARCHAR2(30);
7561 l_resolved_token VARCHAR2(100);
7562
7563
7564
7565 BEGIN
7566
7567 l_qa_result_tbl := px_qa_result_tbl;
7568 l_index := px_qa_result_tbl.count;
7569 l_start := px_qa_result_tbl.count;
7570 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7571
7572 --if business_document_type is not TEMPLATE, we need to perform the checks
7573 IF (del_rec.business_document_type <> 'TEMPLATE') THEN
7574
7575 --check notification
7576 /*IF(del_rec.notify_prior_due_date_yn = 'Y') THEN
7577 IF(del_rec.notify_prior_due_date_value is null OR del_rec.notify_prior_due_date_uom is null) THEN
7578 l_index := l_index+1;
7579 l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7580 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_NTF_DETAILS_REQUIRED';
7581 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7582 p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED',
7583 p_token1 => 'NOTIFICATION_TYPE',
7584 p_token1_value => 'prior due',
7585 p_token2 => 'DELIVERABLE_NAME',
7586 p_token2_value => del_rec.deliverable_name);
7587 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7588 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7589 p_msg_name => 'OKC_DEL_NTF_DETAILS_REQUIRED_S');
7590 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7591
7592 END IF;
7593 END IF;
7594 */
7595
7596 IF(del_rec.notify_escalation_yn = 'Y') THEN
7597 IF(del_rec.notify_escalation_value is null OR del_rec.notify_escalation_uom is null OR del_rec.escalation_assignee is null) THEN
7598 l_index := l_index+1;
7599 l_qa_result_tbl(l_index).error_severity := p_severity;
7600 --Acq Plan Message Cleanup
7601 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_ESCALATE_REQUIRED',del_rec.business_document_type);
7602 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7603
7604 /*l_qa_result_tbl(l_index).message_name := 'OKC_DEL_ESCALATE_REQUIRED';
7605 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7606 p_msg_name => 'OKC_DEL_ESCALATE_REQUIRED',
7607 p_token1 => 'DELIVERABLE_NAME',
7608 p_token1_value => del_rec.deliverable_name);*/
7609
7610 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7611 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7612 p_msg_name => l_resolved_msg_name,
7613 p_token1 => 'DEL_TOKEN',
7614 p_token1_value => l_resolved_token,
7615 p_token2 => 'DELIVERABLE_NAME',
7616 p_token2_value => del_rec.deliverable_name);
7617
7618 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7619 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
7620
7621 l_qa_result_tbl(l_index).problem_details := l_message_txt;
7622 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7623 p_msg_name => 'OKC_DEL_REQUIRED_S');
7624 l_qa_result_tbl(l_index).suggestion := l_message_txt;
7625
7626 END IF;
7627 END IF;
7628 END IF;
7629 --mass update common attributes
7630 IF(l_index > l_start) THEN
7631 --We have some errors
7632 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7633 FOR i IN (l_start+1)..l_index
7634 LOOP
7635 l_qa_result_tbl(i).title := del_rec.deliverable_name;
7636 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7637 l_qa_result_tbl(i).qa_code := l_qa_code;
7638 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7639
7640 END LOOP;
7641 END IF;
7642
7643 x_return_status := l_return_status;
7644 px_qa_result_tbl := l_qa_result_tbl;
7645
7646 EXCEPTION
7647 WHEN FND_API.G_EXC_ERROR THEN
7648 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7649 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with G_EXC_ERROR');
7650 END IF;
7651
7652 x_return_status := G_RET_STS_ERROR;
7653
7654
7655 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7656 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7657 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with G_EXC_UNEXPECTED_ERROR');
7658 END IF;
7659
7660 x_return_status := G_RET_STS_UNEXP_ERROR;
7661
7662
7663 WHEN OTHERS THEN
7664 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7665 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_notifications with OTHERS EXCEPTION');
7666 END IF;
7667
7668 x_return_status := G_RET_STS_UNEXP_ERROR;
7669 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7670 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7671 END IF;
7672
7673
7674 END check_notifications;
7675
7676 /**
7677 * This procedure checks if there is any error related to a given
7678 * deliverable's internal contacts
7679 * @modifies px_qa_result_tbl table of records that contains validation
7680 * errors and warnings
7681 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
7682 * OKC_API.G_RET_STS_ERROR if failes
7683 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
7684 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
7685 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
7686 */
7687 PROCEDURE check_internal_contacts (
7688 del_rec IN OKC_DELIVERABLES%ROWTYPE,
7689 p_severity IN VARCHAR2,
7690 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7691 x_return_status OUT NOCOPY VARCHAR2
7692 ) IS
7693
7694 l_api_version CONSTANT NUMBER := 1;
7695 l_api_name CONSTANT VARCHAR2(30) := 'check_internal_contacts';
7696 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7697 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
7698 l_index PLS_INTEGER := 0;
7699 l_start PLS_INTEGER := 0;
7700 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7701 l_contact_exists VARCHAR2(1);
7702 l_qa_code VARCHAR2(80) := 'CHECK_BUYER_CONTACT';
7703 l_short_desc VARCHAR2(80);
7704
7705 l_err_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7706 l_sugg_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7707
7708 --Acq Plan Message Cleanup
7709 -- l_IntContactMissing_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_INT_CONTACT';
7710 l_IntContactMissing_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_INT_CONTACT';
7711 -- l_IntContactInvalid_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT';
7712 l_IntContactInvalid_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT';
7713 l_IntContactInvalid_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_INT_CONTACT_S';
7714
7715 l_ContactMissing_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_REQUIRED_S';
7716 l_InvalidRequestor_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER';
7717 l_InvalidRequestor_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_REQUESTER_S';
7718 --Acq Plan Message Cleanup
7719 --l_InvalidEscAssgn_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_ASSIGNEE';
7720 l_InvalidEscAssgn_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_ASSIGNEE';
7721 l_InvalidEscAssgn_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_ESCA_S';
7722
7723 l_resolved_msg_name VARCHAR2(30);
7724 l_resolved_token VARCHAR2(100);
7725
7726
7727 BEGIN
7728
7729 l_qa_result_tbl := px_qa_result_tbl;
7730 l_index := px_qa_result_tbl.count;
7731 l_start := px_qa_result_tbl.count;
7732
7733 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7734
7735 l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7736
7737 --if bus doc is not template, then internal contact is required
7738 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is null) THEN
7739 l_index := l_index+1;
7740
7741 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7742 --Acq Plan Message Cleanup
7743 l_resolved_msg_name := OKC_API.resolve_message(l_IntContactMissing_err_msg,del_rec.business_document_type);
7744 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7745
7746 /* l_qa_result_tbl(l_index).message_name := l_IntContactMissing_err_msg;
7747 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7748 p_msg_name => l_IntContactMissing_err_msg,
7749 p_token1 => 'DELIVERABLE_NAME',
7750 p_token1_value => del_rec.deliverable_name); */
7751
7752 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7753 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7754 p_msg_name => l_resolved_msg_name,
7755 p_token1 => 'DEL_TOKEN',
7756 p_token1_value => l_resolved_token,
7757 p_token2 => 'DELIVERABLE_NAME',
7758 p_token2_value => del_rec.deliverable_name);
7759
7760 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7761 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
7762
7763 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7764 p_msg_name => l_ContactMissing_sugg_msg);
7765
7766 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7767 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7768 END IF;
7769
7770
7771 --check if internal contact exists on a bus doc
7772 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
7773 l_contact_exists := internal_contact_exists(p_contact_id => del_rec.internal_party_contact_id);
7774
7775 IF l_contact_exists = 'N' THEN
7776 l_index := l_index+1;
7777 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7778
7779 --Acq Plan Message Cleanup
7780 l_resolved_msg_name := OKC_API.resolve_message(l_IntContactInvalid_err_msg,del_rec.business_document_type);
7781 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7782
7783 /* l_qa_result_tbl(l_index).message_name := l_IntContactInvalid_err_msg;
7784 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7785 p_msg_name => l_IntContactInvalid_err_msg);*/
7786
7787 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7788 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7789 p_msg_name => l_resolved_msg_name,
7790 p_token1 => 'DEL_TOKEN',
7791 p_token1_value => l_resolved_token
7792 );
7793
7794 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7795
7796 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7797 p_msg_name => l_IntContactInvalid_sugg_msg);
7798
7799 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7800 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7801
7802 END IF;
7803
7804 END IF;
7805
7806
7807
7808 --check if requestor exists on a bus doc
7809 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
7810 l_contact_exists := internal_contact_exists(p_contact_id => del_rec.requester_id);
7811 IF(l_contact_exists = 'N') THEN
7812
7813 l_index := l_index+1;
7814 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_WARNING;
7815 --Acq Plan Message Cleanup
7816
7817 l_resolved_msg_name := OKC_API.resolve_message(l_InvalidRequestor_err_msg,del_rec.business_document_type);
7818 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7819
7820 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
7821 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7822 p_msg_name => l_resolved_msg_name,
7823 p_token1 => 'DEL_TOKEN',
7824 p_token1_value => l_resolved_token);
7825
7826 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7827
7828 /*l_qa_result_tbl(l_index).message_name := l_InvalidRequestor_err_msg;
7829 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7830 p_msg_name => l_InvalidRequestor_err_msg);*/
7831 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7832 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7833 p_msg_name => l_InvalidRequestor_sugg_msg);
7834 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7835
7836 END IF;
7837 END IF;
7838
7839 --check if escalation assignee exists on a bus doc
7840 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
7841 l_contact_exists := internal_contact_exists(p_contact_id => del_rec.escalation_assignee);
7842 IF (l_contact_exists = 'N') THEN
7843
7844 l_index := l_index+1;
7845 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
7846 --Acq Plan Message Cleanup
7847 /*l_qa_result_tbl(l_index).message_name := l_InvalidEscAssgn_err_msg;
7848 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7849 p_msg_name => l_InvalidEscAssgn_err_msg);*/
7850
7851 l_resolved_msg_name := OKC_API.resolve_message(l_InvalidEscAssgn_err_msg,del_rec.business_document_type);
7852 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7853
7854
7855 l_qa_result_tbl(l_index).message_name := l_InvalidEscAssgn_err_msg;
7856 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7857 p_msg_name => l_resolved_msg_name,
7858 p_token1 => 'DEL_TOKEN',
7859 p_token1_value => l_resolved_token);
7860 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
7861
7862 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
7863
7864 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
7865 p_msg_name => l_InvalidEscAssgn_sugg_msg);
7866 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
7867
7868 END IF;
7869 END IF;
7870
7871 --mass update common attributes
7872 IF(l_index > l_start) THEN
7873 --We have some errors
7874 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
7875 FOR i IN (l_start+1)..l_index
7876 LOOP
7877 l_qa_result_tbl(i).title := del_rec.deliverable_name;
7878 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
7879 l_qa_result_tbl(i).qa_code := l_qa_code;
7880 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
7881 l_qa_result_tbl(i).error_severity := p_severity;
7882
7883 END LOOP;
7884 END IF;
7885
7886 x_return_status := l_return_status;
7887 px_qa_result_tbl := l_qa_result_tbl;
7888
7889 EXCEPTION
7890 WHEN FND_API.G_EXC_ERROR THEN
7891 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7892 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_ERROR');
7893 END IF;
7894
7895 x_return_status := G_RET_STS_ERROR;
7896
7897
7898 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7899 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7900 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_UNEXPECTED_ERROR');
7901 END IF;
7902
7903 x_return_status := G_RET_STS_UNEXP_ERROR;
7904
7905
7906 WHEN OTHERS THEN
7907 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7908 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with OTHERS EXCEPTION');
7909 END IF;
7910
7911 x_return_status := G_RET_STS_UNEXP_ERROR;
7912 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7913 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
7914 END IF;
7915
7916
7917 END check_internal_contacts;
7918
7919 FUNCTION is_cdrl_check_required
7920 RETURN VARCHAR2
7921 IS
7922
7923 l_cdrl_enabled VARCHAR2(1) :='N';
7924 BEGIN
7925
7926 -- Check clm installed.
7927 IF NVL(FND_PROFILE.VALUE('PO_CLM_INSTALLED'),'N') = 'Y' and
7928 NVL(FND_PROFILE.VALUE('PO_CLM_ENABLED'),'N') = 'Y' THEN
7929
7930 -- Check po system parameters
7931 BEGIN
7932 EXECUTE IMMEDIATE 'SELECT enable_cdrl FROM po_system_parameters_all WHERE org_id=fnd_global.org_id ' INTO l_cdrl_enabled;
7933 EXCEPTION
7934 WHEN OTHERS THEN
7935 l_cdrl_enabled := 'N';
7936 END;
7937 END IF;
7938 RETURN l_cdrl_enabled;
7939
7940 END is_cdrl_check_required;
7941
7942 PROCEDURE check_exhibit_details (
7943 del_rec IN OKC_DELIVERABLES%ROWTYPE,
7944 p_severity IN VARCHAR2,
7945 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
7946 x_return_status OUT NOCOPY VARCHAR2
7947 )
7948 IS
7949 l_api_version CONSTANT NUMBER := 1;
7950 l_api_name CONSTANT VARCHAR2(30) := 'check_exhibit_details';
7951 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
7952 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
7953 l_index PLS_INTEGER := 0;
7954 l_start PLS_INTEGER := 0;
7955 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
7956 l_contact_exists VARCHAR2(1);
7957 l_qa_code VARCHAR2(80) := 'CHECK_DELIVERABLE_EXHIBIT';
7958 l_short_desc VARCHAR2(80);
7959
7960 l_err_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7961 l_sugg_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
7962
7963 l_exhibitMissing_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_EXHIBIT';
7964 l_exhibitMissing_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_MISSING_EXHIBIT_S';
7965
7966 --Acq Plan Message Cleanup
7967 l_resolved_msg_name VARCHAR2(30);
7968 l_resolved_token VARCHAR2(100);
7969
7970
7971 BEGIN
7972
7973 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7974 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_exhibit_details');
7975 END IF;
7976
7977
7978
7979 l_qa_result_tbl := px_qa_result_tbl;
7980 l_index := px_qa_result_tbl.count;
7981 l_start := px_qa_result_tbl.count;
7982
7983
7984 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
7985 l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
7986
7987
7988
7989
7990
7991 IF (del_rec.del_category_code='CDRL' AND del_rec.exhibit_code IS NULL )
7992 THEN
7993
7994 l_index := l_index+1;
7995
7996 l_resolved_msg_name := OKC_API.resolve_message(l_exhibitMissing_err_msg,del_rec.business_document_type);
7997 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
7998
7999 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8000 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8001 p_msg_name => l_resolved_msg_name,
8002 p_token1 => 'DEL_TOKEN',
8003 p_token1_value => l_resolved_token,
8004 p_token2 => 'DELIVERABLE_NAME',
8005 p_token2_value => del_rec.deliverable_name
8006 );
8007
8008 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8009 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8010
8011
8012
8013 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8014 p_msg_name => l_exhibitMissing_sugg_msg);
8015
8016 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8017 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8018
8019 END IF;
8020
8021 --mass update common attributes
8022 IF(l_index > l_start) THEN
8023 --We have some errors
8024 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8025 FOR i IN (l_start+1)..l_index
8026 LOOP
8027 l_qa_result_tbl(i).title := del_rec.deliverable_name;
8028 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8029 l_qa_result_tbl(i).qa_code := l_qa_code;
8030 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8031 l_qa_result_tbl(i).error_severity := p_severity;
8032
8033 END LOOP;
8034 END IF;
8035
8036 x_return_status := l_return_status;
8037 px_qa_result_tbl := l_qa_result_tbl;
8038
8039 EXCEPTION
8040 WHEN FND_API.G_EXC_ERROR THEN
8041 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8042 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with G_EXC_ERROR');
8043 END IF;
8044
8045 x_return_status := G_RET_STS_ERROR;
8046
8047
8048 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8049 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8050 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with G_EXC_UNEXPECTED_ERROR');
8051 END IF;
8052
8053 x_return_status := G_RET_STS_UNEXP_ERROR;
8054
8055
8056 WHEN OTHERS THEN
8057 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8058 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_exhibits with OTHERS EXCEPTION');
8059 END IF;
8060
8061 x_return_status := G_RET_STS_UNEXP_ERROR;
8062 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8063 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8064 END IF;
8065
8066 END check_exhibit_details;
8067
8068
8069 /**
8070 * This procedure checks if there is any error related to a given
8071 * deliverable's internal contacts
8072 * @modifies px_qa_result_tbl table of records that contains validation
8073 * errors and warnings
8074 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8075 * OKC_API.G_RET_STS_ERROR if failes
8076 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8077 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8078 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8079 */
8080 PROCEDURE check_internal_contacts_valid (
8081 del_rec IN OKC_DELIVERABLES%ROWTYPE,
8082 p_severity IN VARCHAR2,
8083 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8084 x_return_status OUT NOCOPY VARCHAR2
8085 ) IS
8086
8087 l_api_version CONSTANT NUMBER := 1;
8088 l_api_name CONSTANT VARCHAR2(30) := 'check_internal_contacts_valid';
8089 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8090 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
8091 l_index PLS_INTEGER := 0;
8092 l_start PLS_INTEGER := 0;
8093 l_message_txt VARCHAR2(2000);
8094 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8095 l_contact_valid VARCHAR2(1);
8096
8097 l_qa_code VARCHAR2(80) := 'CHECK_INTERNAL_CONTACT_VALID';
8098 l_short_desc VARCHAR2(80);
8099
8100 l_err_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8101 l_sugg_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8102
8103 --Acq Plan Message Cleanup
8104 l_resolved_msg_name VARCHAR2(30);
8105 l_resolved_token VARCHAR2(100);
8106
8107 BEGIN
8108 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8109 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts_valid');
8110 END IF;
8111 l_qa_result_tbl := px_qa_result_tbl;
8112 l_index := px_qa_result_tbl.count;
8113 l_start := px_qa_result_tbl.count;
8114
8115 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8116
8117 l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
8118
8119 --check if internal contact is a valid fnd user or if it has an email address
8120 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.internal_party_contact_id is not null) THEN
8121 l_contact_valid := internal_contact_valid(p_contact_id => del_rec.internal_party_contact_id);
8122 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8123 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'internal contact valid (l_contact_valid): '||l_contact_valid);
8124 END IF;
8125 IF l_contact_valid = 'N' THEN
8126 l_index := l_index+1;
8127
8128 --Acq Plan Message Cleanup
8129 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_INV_INT_CONT_EMAIL',del_rec.business_document_type);
8130 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8131
8132 /* l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_INT_CONT_EMAIL';
8133 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8134 p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL');*/
8135
8136 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8137 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8138 p_msg_name => l_resolved_msg_name,
8139 p_token1 => 'DEL_TOKEN',
8140 p_token1_value => l_resolved_token
8141 );
8142 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8143 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8144 p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8145
8146 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8147 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8148
8149 END IF;
8150
8151 END IF;
8152
8153 --check if requester is a valid fnd user or if it has an email address
8154 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.requester_id is not null) THEN
8155 l_contact_valid := internal_contact_valid(p_contact_id => del_rec.requester_id);
8156 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8157 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'requester valid (l_contact_valid): '||l_contact_valid);
8158 END IF;
8159 IF l_contact_valid = 'N' THEN
8160
8161 l_index := l_index+1;
8162
8163 --Acq Plan Message Cleanup
8164 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_INV_REQ_CONT_EMAIL',del_rec.business_document_type);
8165 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8166
8167 /* l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_REQ_CONT_EMAIL';
8168 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8169 p_msg_name => 'OKC_DEL_INV_REQ_CONT_EMAIL');*/
8170
8171 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8172 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8173 p_msg_name => l_resolved_msg_name,
8174 p_token1 => 'DEL_TOKEN',
8175 p_token1_value => l_resolved_token
8176 );
8177 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8178 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8179 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8180 p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8181 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8182
8183 END IF;
8184 END IF;
8185
8186 --check if escalation assignee is a valid fnd user or if it has an email address
8187 IF(l_doc_type_class <> 'TEMPLATE' and del_rec.notify_escalation_yn = 'Y' and del_rec.escalation_assignee is not null) THEN
8188 l_contact_valid := internal_contact_valid(p_contact_id => del_rec.escalation_assignee);
8189 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8190 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'escalation assignee valid (l_contact_valid): '||l_contact_valid);
8191 END IF;
8192 IF l_contact_valid = 'N' THEN
8193
8194 l_index := l_index+1;
8195 l_qa_result_tbl(l_index).message_name := 'OKC_DEL_INV_ESC_CONT_EMAIL';
8196 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8197 p_msg_name => 'OKC_DEL_INV_ESC_CONT_EMAIL');
8198 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8199 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8200 p_msg_name => 'OKC_DEL_INV_INT_CONT_EMAIL_S');
8201 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8202
8203 END IF;
8204 END IF;
8205
8206
8207
8208 --mass update common attributes
8209 IF(l_index > l_start) THEN
8210 --We have some errors
8211 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8212 FOR i IN (l_start+1)..l_index
8213 LOOP
8214 l_qa_result_tbl(i).title := del_rec.deliverable_name;
8215 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8216 l_qa_result_tbl(i).qa_code := l_qa_code;
8217 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8218 l_qa_result_tbl(i).error_severity := p_severity;
8219
8220 END LOOP;
8221 END IF;
8222
8223 x_return_status := l_return_status;
8224 px_qa_result_tbl := l_qa_result_tbl;
8225
8226 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8227 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'leaving check_internal_contacts_valid without error');
8228 END IF;
8229 EXCEPTION
8230 WHEN FND_API.G_EXC_ERROR THEN
8231 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8232 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving check_internal_contacts_valid with G_EXC_ERROR');
8233 END IF;
8234
8235 x_return_status := G_RET_STS_ERROR;
8236
8237
8238 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8239 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8240 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts with G_EXC_UNEXPECTED_ERROR');
8241 END IF;
8242
8243 x_return_status := G_RET_STS_UNEXP_ERROR;
8244
8245
8246 WHEN OTHERS THEN
8247 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8248 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_internal_contacts_valid with OTHERS EXCEPTION');
8249 END IF;
8250
8251 x_return_status := G_RET_STS_UNEXP_ERROR;
8252 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8253 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8254 END IF;
8255
8256
8257 END check_internal_contacts_valid;
8258
8259
8260
8261
8262
8263 /**
8264 * This procedure checks if there is any error related to a given
8265 * deliverable's external contacts
8266 * @modifies px_qa_result_tbl table of records that contains validation
8267 * errors and warnings
8268 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8269 * OKC_API.G_RET_STS_ERROR if failes
8270 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8271 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8272 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8273 */
8274 PROCEDURE check_external_contacts (
8275 del_rec IN OKC_DELIVERABLES%ROWTYPE,
8276 p_severity IN VARCHAR2,
8277 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8278 x_return_status OUT NOCOPY VARCHAR2
8279 ) IS
8280
8281 l_api_version CONSTANT NUMBER := 1;
8282 l_api_name CONSTANT VARCHAR2(30) := 'check_external_contacts';
8283 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8284 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
8285 l_index PLS_INTEGER := 0;
8286 l_start PLS_INTEGER := 0;
8287 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8288 l_contact_exists VARCHAR2(1);
8289 l_contact_valid VARCHAR2(1);
8290
8291 l_qa_code VARCHAR2(80) := 'CHECK_SUPPLIER_CONTACT';
8292 l_short_desc VARCHAR2(80);
8293
8294 --Messages for Repository
8295 -- Acq Plan Messages Cleanup
8296 --l_ExtContact_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT';
8297 l_ExtContact_err_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT';
8298 l_ExtContact_sugg_msg FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_DEL_INVALID_EXT_CONTACT_S';
8299
8300 --Messages for PO
8301 --l_SupplierContact_err_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT';
8302 l_SupplierContact_err_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT';
8303 l_SupplierContact_sugg_msg VARCHAR2(30) := 'OKC_DEL_INVALID_SUPP_CONTACT_S';
8304
8305 l_err_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8306 l_sugg_message_txt FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
8307
8308 --Acq Plan Message Cleanup
8309 l_resolved_msg_name VARCHAR2(30);
8310 l_resolved_token VARCHAR2(100);
8311
8312
8313 BEGIN
8314
8315 l_qa_result_tbl := px_qa_result_tbl;
8316 l_index := px_qa_result_tbl.count;
8317 l_start := px_qa_result_tbl.count;
8318
8319 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8320
8321 --get the document type class based on deliverable's business document type
8322 l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
8323
8324 --check if specified external contact exists on a bus doc
8325 IF(l_doc_type_class <> 'TEMPLATE' and
8326 del_rec.external_party_id is not null and
8327 del_rec.external_party_contact_id is not null) THEN
8328 l_contact_exists := external_contact_valid(p_party_id => del_rec.external_party_id
8329 ,p_party_role => del_rec.external_party_role
8330 ,p_contact_id => del_rec.external_party_contact_id);
8331 IF (l_contact_exists = 'N') THEN
8332
8333 l_index := l_index+1;
8334 --l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
8335
8336 If (l_doc_type_class = 'REPOSITORY') THEN
8337 --Acq Plan Messages Cleanup
8338 /*l_qa_result_tbl(l_index).message_name := l_ExtContact_err_msg;
8339 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8340 p_msg_name => l_ExtContact_err_msg,
8341 p_token1 => 'DELIVERABLE_NAME',
8342 p_token1_value => del_rec.deliverable_name);*/
8343
8344 l_resolved_msg_name := OKC_API.resolve_message(l_ExtContact_err_msg,del_rec.business_document_type);
8345 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8346
8347 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8348 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8349 p_msg_name => l_resolved_msg_name,
8350 p_token1 => 'DEL_TOKEN',
8351 p_token1_value => l_resolved_token,
8352 p_token2 => 'DELIVERABLE_NAME',
8353 p_token2_value => del_rec.deliverable_name);
8354
8355 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8356 p_msg_name => l_ExtContact_sugg_msg);
8357 ELSE
8358 --Acq Plan Messages Cleanup
8359
8360 /* l_qa_result_tbl(l_index).message_name := l_SupplierContact_err_msg;
8361 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8362 p_msg_name => l_SupplierContact_err_msg,
8363 p_token1 => 'DELIVERABLE_NAME',
8364 p_token1_value => del_rec.deliverable_name);*/
8365 l_resolved_msg_name := OKC_API.resolve_message(l_SupplierContact_err_msg,del_rec.business_document_type);
8366 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8367
8368 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8369 l_err_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8370 p_msg_name => l_resolved_msg_name,
8371 p_token1 => 'DEL_TOKEN',
8372 p_token1_value => l_resolved_token,
8373 p_token2 => 'DELIVERABLE_NAME',
8374 p_token2_value => del_rec.deliverable_name);
8375
8376 l_sugg_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8377 p_msg_name => l_SupplierContact_sugg_msg);
8378 End If;
8379
8380 l_qa_result_tbl(l_index).problem_details := l_err_message_txt;
8381 l_qa_result_tbl(l_index).suggestion := l_sugg_message_txt;
8382
8383 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8384 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8385
8386 END IF;
8387 END IF;
8388
8389
8390
8391
8392 --mass update common attributes
8393 IF(l_index > l_start) THEN
8394 --We have some errors
8395 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8396 FOR i IN (l_start+1)..l_index
8397 LOOP
8398 l_qa_result_tbl(i).title := del_rec.deliverable_name;
8399 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8400 l_qa_result_tbl(i).qa_code := l_qa_code;
8401 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8402 l_qa_result_tbl(i).error_severity := p_severity;
8403
8404 END LOOP;
8405 END IF;
8406
8407 x_return_status := l_return_status;
8408 px_qa_result_tbl := l_qa_result_tbl;
8409
8410 EXCEPTION
8411 WHEN FND_API.G_EXC_ERROR THEN
8412 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8413 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with G_EXC_ERROR');
8414 END IF;
8415
8416 x_return_status := G_RET_STS_ERROR;
8417
8418
8419 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8420 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8421 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with G_EXC_UNEXPECTED_ERROR');
8422 END IF;
8423
8424 x_return_status := G_RET_STS_UNEXP_ERROR;
8425
8426
8427 WHEN OTHERS THEN
8428 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8429 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_contacts with OTHERS EXCEPTION');
8430 END IF;
8431
8432 x_return_status := G_RET_STS_UNEXP_ERROR;
8433 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8434 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8435 END IF;
8436
8437
8438 END check_external_contacts;
8439
8440 /**
8441 * This procedure checks if there is any error related to a given
8442 * deliverable's due date details
8443 * @modifies px_qa_result_tbl table of records that contains validation
8444 * errors and warnings
8445 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8446 * OKC_API.G_RET_STS_ERROR if failes
8447 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8448 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8449 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8450 */
8451 PROCEDURE check_due_dates (
8452 del_rec IN OKC_DELIVERABLES%ROWTYPE,
8453 p_severity IN VARCHAR2,
8454 p_bus_doc_date_events_tbl IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
8455 p_doc_type IN VARCHAR2, --Acq plan Messages Cleanup
8456 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8457 x_return_status OUT NOCOPY VARCHAR2
8458 ) IS
8459
8460 l_api_version CONSTANT NUMBER := 1;
8461 l_api_name CONSTANT VARCHAR2(30) := 'check_due_dates';
8462 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8463 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
8464 l_index PLS_INTEGER := 0;
8465 l_start PLS_INTEGER := 0;
8466 l_message_txt VARCHAR2(2000);
8467 l_qa_code VARCHAR2(80) := 'CHECK_DUE_DATES';
8468 l_short_desc VARCHAR2(80);
8469
8470 l_start_date Date;
8471 l_end_date Date;
8472
8473 l_has_rltv_end_date VARCHAR2(1);
8474 l_has_rltv_start_date VARCHAR2(1);
8475
8476 l_start_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
8477 l_end_event_full_name OKC_BUS_DOC_EVENTS_TL.meaning%TYPE;
8478 msgCount PLS_INTEGER := 0;
8479 l_start_not_matched_flag varchar2(1) := 'Y';
8480 l_end_not_matched_flag varchar2(1) := 'Y';
8481 l_st_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
8482 l_end_event_code OKC_BUS_DOC_EVENTS_B.business_event_code%TYPE;
8483
8484 TYPE QaMessagesTbl IS TABLE OF OKC_BUS_DOC_EVENTS_TL.meaning%TYPE
8485 INDEX BY BINARY_INTEGER;
8486
8487 qaMessages QaMessagesTbl;
8488
8489 --Acq Plan Message Cleanup
8490 l_resolved_msg_name VARCHAR2(30);
8491 l_resolved_token VARCHAR2(100);
8492
8493
8494 BEGIN
8495 l_qa_result_tbl := px_qa_result_tbl;
8496 l_index := px_qa_result_tbl.count;
8497 l_start := px_qa_result_tbl.count;
8498 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8499 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8500 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.check_due_dates ');
8501 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_id: '||to_char(del_rec.deliverable_id));
8502 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.deliverable_name);
8503 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deliverable_name: '||del_rec.recurring_yn);
8504 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_start_date: '||del_rec.fixed_start_date);
8505 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: fixed_end_date: '||del_rec.fixed_end_date);
8506 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: start_event_date: '||del_rec.start_event_date);
8507 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: end_event_date: '||del_rec.end_event_date);
8508 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: relative_st_date_event_id: '||to_char(del_rec.relative_st_date_event_id));
8509 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: relative_end_date_event_id: '||to_char(del_rec.relative_end_date_event_id));
8510 END IF;
8511
8512 --single due date field validation
8513 --check if due date fields are populated
8514 IF del_rec.fixed_due_date_yn = 'Y' THEN
8515
8516 IF del_rec.fixed_start_date is null THEN
8517 --missing fixed_start_date
8518 l_index := l_index+1;
8519
8520 --Acq Plan Message Cleanup
8521
8522 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_FIXED_ST_DATE',p_doc_type);
8523 l_resolved_token := OKC_API.resolve_del_token(p_doc_type);
8524
8525 -- set qa message name
8526 -- l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_FIXED_ST_DATE';
8527 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8528
8529 --- set problem long description
8530 l_qa_result_tbl(l_index).problem_details :=
8531 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8532 --p_msg_name => 'OKC_DEL_MISSING_FIXED_ST_DATE',
8533 p_msg_name => l_resolved_msg_name,
8534 p_token1 => 'DEL_TOKEN',
8535 -- p_token1_value => del_rec.deliverable_name,
8536 p_token1_value => l_resolved_token,
8537 p_token2 => 'DELIVERABLE_NAME',
8538 p_token2_value => del_rec.deliverable_name);
8539
8540 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8541 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8542 -- set suggestion for given qa message
8543 l_qa_result_tbl(l_index).suggestion :=
8544 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8545 p_msg_name => 'OKC_DEL_REQUIRED_S');
8546
8547 -- set return status for calling API to know, that there's a QA message
8548 --l_qa_status := OKC_API.G_RET_STS_ERROR;
8549 END IF;
8550 ELSE
8551
8552 --06-FEB-2004 pnayani -- Fix for bug 3369934 Resetting due date attributes during copy
8553 IF del_rec.recurring_yn = 'Y' THEN
8554 IF del_rec.fixed_start_date is null THEN
8555 IF del_rec.relative_st_date_event_id is null THEN
8556 --missing fixed_start_date
8557 l_index := l_index+1;
8558 -- set qa message name
8559 --Acq Plan Message Cleanup
8560 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_DUE_DATE_ST_INCOMPLETE',del_rec.business_document_type);
8561 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8562
8563 /* l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_ST_INCOMPLETE';
8564
8565 --- set problem long description
8566 l_qa_result_tbl(l_index).problem_details :=
8567 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8568 p_msg_name => 'OKC_DEL_DUE_DATE_ST_INCOMPLETE',
8569 p_token1 => 'DELIVERABLE_NAME',
8570 p_token1_value => del_rec.deliverable_name);*/
8571
8572 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8573
8574 --- set problem long description
8575 l_qa_result_tbl(l_index).problem_details :=
8576 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8577 p_msg_name => l_resolved_msg_name,
8578 p_token1 => 'DEL_TOKEN',
8579 p_token1_value => l_resolved_token,
8580 p_token2 => 'DELIVERABLE_NAME',
8581 p_token2_value => del_rec.deliverable_name);
8582
8583 -- set suggestion for given qa message
8584 l_qa_result_tbl(l_index).suggestion :=
8585 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8586 p_msg_name => 'OKC_DEL_REQUIRED_S');
8587
8588 END IF; -- relative_st_event_id is null
8589 END IF; -- del_rec.fixed_start_date is null THEN
8590
8591 IF del_rec.fixed_end_date is null THEN
8592
8593 IF del_rec.relative_end_date_event_id is null THEN
8594 --missing fixed_start_date
8595 l_index := l_index+1;
8596
8597 -- set qa message name
8598 --Acq Plan Message Cleanup
8599 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_DUE_DATE_EN_INCOMPLETE',del_rec.business_document_type);
8600 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8601
8602 /* l_qa_result_tbl(l_index).message_name := 'OKC_DEL_DUE_DATE_EN_INCOMPLETE';
8603
8604 --- set problem long description
8605 l_qa_result_tbl(l_index).problem_details :=
8606 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8607 p_msg_name => 'OKC_DEL_DUE_DATE_EN_INCOMPLETE',
8608 p_token1 => 'DELIVERABLE_NAME',
8609 p_token1_value => del_rec.deliverable_name);*/
8610
8611 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8612
8613 --- set problem long description
8614 l_qa_result_tbl(l_index).problem_details :=
8615 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8616 p_msg_name => l_resolved_msg_name,
8617 p_token1 => 'DEL_TOKEN',
8618 p_token1_value => l_resolved_token,
8619 p_token2 => 'DELIVERABLE_NAME',
8620 p_token2_value => del_rec.deliverable_name);
8621 -- set suggestion for given qa message
8622 l_qa_result_tbl(l_index).suggestion :=
8623 OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8624 p_msg_name => 'OKC_DEL_REQUIRED_S');
8625
8626
8627 END IF;
8628 END IF; --del_rec.fixed_end_date is null THEN
8629 END IF; -- del_rec.recurring_yn = 'Y' THEN
8630
8631 IF p_bus_doc_date_events_tbl.count > 0 THEN
8632
8633 -- if deliverable definition is recurring
8634 IF del_rec.recurring_yn = 'Y' THEN
8635
8636 -- in itialize start date
8637 l_start_date := NULL;
8638 l_end_date := NULL;
8639
8640 -- initialize boolean value which indicates if start date is
8641 -- relative or fixed
8642 l_has_rltv_start_date := 'N';
8643 l_has_rltv_end_date := 'N';
8644
8645 -- check start date, if it is relative to an event, and not fixed
8646 IF del_rec.relative_st_date_event_id is not NULL THEN
8647 -- set boolean value to Y, indicating that start date is relative
8648 l_has_rltv_start_date := 'Y';
8649 l_start_date := resolveRelativeDueEvents (
8650 p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8651 p_event_id => del_rec.relative_st_date_event_id,
8652 p_end_event_yn => 'N',
8653 px_event_full_name => l_start_event_full_name,
8654 px_not_matched_flag => l_start_not_matched_flag,
8655 px_event_code => l_st_event_code);
8656
8657 END IF; -- if start date is relative
8658
8659 -- check end date, if it is relative to an event, and not fixed
8660 IF del_rec.relative_end_date_event_id is not NULL THEN
8661 -- set boolean value to Y, indicating that start date is relative
8662 l_has_rltv_end_date := 'Y';
8663 l_end_date := resolveRelativeDueEvents (
8664 p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8665 p_event_id => del_rec.relative_end_date_event_id,
8666 p_end_event_yn => 'Y',
8667 px_event_full_name => l_end_event_full_name,
8668 px_not_matched_flag => l_end_not_matched_flag,
8669 px_event_code => l_end_event_code);
8670 END IF; -- if end date is relative
8671
8672 --- if start date is relative
8673 IF l_has_rltv_start_date = 'Y' THEN
8674
8675 -- start date is null on the business document
8676 IF l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
8677
8678 -- increment the count first
8679 msgCount := msgCount + 1;
8680
8681 --- set the QA message
8682 qaMessages(msgCount) := l_start_event_full_name;
8683 END IF; -- is start date is null
8684 END IF; -- if start date is relative
8685
8686 --- if end date is relative
8687 IF l_has_rltv_end_date = 'Y' THEN
8688
8689 -- end date is null on the business document
8690 IF l_end_not_matched_flag = 'N' and l_end_date is NULL THEN
8691
8692 IF l_has_rltv_start_date = 'Y' THEN
8693
8694 -- add this meesage only if start and end events are not same,
8695 -- other wise start qa message has lready been added.
8696
8697 IF l_st_event_code <> l_end_event_code THEN
8698 --- increment the count first
8699 msgCount := msgCount + 1;
8700
8701 --- set the QA message
8702 qaMessages(msgCount) := l_end_event_full_name;
8703 END IF;
8704 ELSE
8705 --- increment the count first
8706 msgCount := msgCount + 1;
8707
8708 --- set the QA message
8709 qaMessages(msgCount) := l_end_event_full_name;
8710
8711 END IF;
8712
8713 END IF; -- is end date is null
8714 END IF; -- if end date is relative
8715
8716 ELSE -- deliverables is one time and relative
8717
8718 -- check start date, if it is relative to an event
8719 IF del_rec.relative_st_date_event_id is not NULL THEN
8720
8721 -- in itialize start date
8722 l_start_date := NULL;
8723
8724 -- get start date
8725 l_start_date := resolveRelativeDueEvents (
8726 p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
8727 p_event_id => del_rec.relative_st_date_event_id,
8728 p_end_event_yn => 'N',
8729 px_event_full_name => l_start_event_full_name,
8730 px_not_matched_flag => l_start_not_matched_flag,
8731 px_event_code => l_st_event_code);
8732
8733 -- start date is null on the business document
8734 IF l_start_not_matched_flag = 'N' and l_start_date is NULL THEN
8735
8736 -- increment the count first
8737 msgCount := msgCount + 1;
8738
8739 --- set the QA message
8740 qaMessages(msgCount) := l_start_event_full_name;
8741 END IF; -- is start date is null
8742 END IF; -- if start date is relative for one time deliverable
8743
8744 END IF; -- if deliverable is recurring
8745
8746 --- set qa results.
8747 -- if one date is missing
8748 IF qaMessages.count > 0 and qaMessages.count = 1 THEN
8749 --missing relative date
8750 l_index := l_index+1;
8751
8752 -- Acq Plan Messages Cleanup
8753 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_RLTV_DATE',del_rec.business_document_type);
8754 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8755
8756
8757 -- set qa message name
8758 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8759
8760 --- set problem long description
8761 l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8762 p_app_name => G_OKC,
8763 p_msg_name => l_resolved_msg_name,
8764 p_token1 => 'EVT_DATE_NAME',
8765 p_token1_value => qaMessages(1),
8766 p_token2 => 'DELIVERABLE_NAME',
8767 p_token2_value => del_rec.deliverable_name,
8768 p_token3 => 'DEL_TOKEN',
8769 p_token3_value => l_resolved_token);
8770
8771 l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME' || qaMessages(1);
8772 l_qa_result_tbl(l_index).reference_column2 := 'DEL_TOKEN~' || l_resolved_token;
8773 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8774
8775 -- set suggestion for given qa message
8776 l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8777 p_msg_name => 'OKC_DEL_MISSING_RLTV_DATE_S',
8778 p_token1 => 'EVT_DATE_NAME',
8779 p_token1_value => qaMessages(1) );
8780
8781 -- set return status for calling API to know, that there's a QA message
8782 --l_qa_status := OKC_API.G_RET_STS_ERROR;
8783
8784 END IF; -- if one date is missing
8785
8786 -- if two dates are missing
8787 IF qaMessages.count > 0 and qaMessages.count = 2 THEN
8788 --missing relative dates (two dates)
8789 l_index := l_index+1;
8790
8791 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_RLTV_DATES',del_rec.business_document_type);
8792 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8793
8794 -- set qa message name
8795 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8796
8797 --- set problem long description
8798 l_qa_result_tbl(l_index).problem_details := OKC_TERMS_UTIL_PVT.get_message(
8799 p_app_name => G_OKC,
8800 p_msg_name => l_resolved_msg_name,
8801 p_token1 => 'EVT_DATE_NAME1',
8802 p_token1_value => qaMessages(1),
8803 p_token2 => 'EVT_DATE_NAME2',
8804 p_token2_value => qaMessages(2),
8805 p_token3 => 'DELIVERABLE_NAME',
8806 p_token3_value => del_rec.deliverable_name,
8807 p_token4 => 'DEL_TOKEN',
8808 p_token4_value => l_resolved_token);
8809
8810 l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME1' || qaMessages(1);
8811 l_qa_result_tbl(l_index).reference_column2 := 'EVT_DATE_NAME2' || qaMessages(2);
8812 l_qa_result_tbl(l_index).reference_column2 := 'DEL_TOKEN~' || l_resolved_token;
8813 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8814
8815
8816
8817 -- set suggestion for given qa message
8818 l_qa_result_tbl(l_index).suggestion := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8819 p_msg_name => 'OKC_DEL_MISSING_RLTV_DATES_S',
8820 p_token1 => 'EVT_DATE_NAME1',
8821 p_token1_value => qaMessages(1),
8822 p_token2 => 'EVT_DATE_NAME2',
8823 p_token2_value => qaMessages(2) );
8824
8825 -- set return status for calling API to know, that there's a QA message
8826 --l_qa_status := OKC_API.G_RET_STS_ERROR;
8827
8828 END IF; -- if two dates are missing
8829 END IF; -- if dates table of records is not empty
8830 END IF; --- if deliverables is not fixed due date
8831
8832 --mass update common attributes
8833 IF(l_index > l_start) THEN
8834 --We have some errors
8835 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8836 FOR i IN (l_start+1)..l_index
8837 LOOP
8838 l_qa_result_tbl(i).title := del_rec.deliverable_name;
8839 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8840 l_qa_result_tbl(i).qa_code := l_qa_code;
8841 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8842 l_qa_result_tbl(i).error_severity := p_severity;
8843
8844 END LOOP;
8845 END IF;
8846
8847 -- set out parameters
8848 x_return_status := l_return_status;
8849 px_qa_result_tbl := l_qa_result_tbl;
8850
8851 EXCEPTION
8852 WHEN FND_API.G_EXC_ERROR THEN
8853 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8854 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with G_EXC_ERROR');
8855 END IF;
8856 x_return_status := G_RET_STS_ERROR;
8857
8858 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8859 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8860 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with G_EXC_UNEXPECTED_ERROR');
8861 END IF;
8862
8863 x_return_status := G_RET_STS_UNEXP_ERROR;
8864
8865
8866 WHEN OTHERS THEN
8867 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8868 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_due_dates with OTHERS EXCEPTION');
8869 END IF;
8870
8871 x_return_status := G_RET_STS_UNEXP_ERROR;
8872 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8873 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
8874 END IF;
8875
8876 END check_due_dates;
8877
8878 /**
8879 * This procedure checks if there is any error related to a given
8880 * deliverable's amendments
8881 * @modifies px_qa_result_tbl table of records that contains validation
8882 * errors and warnings
8883 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
8884 * OKC_API.G_RET_STS_ERROR if failes
8885 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
8886 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
8887 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
8888 */
8889 PROCEDURE check_amendments (
8890 del_rec IN OKC_DELIVERABLES%ROWTYPE,
8891 p_severity IN VARCHAR2,
8892 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
8893 x_return_status OUT NOCOPY VARCHAR2
8894 ) IS
8895
8896 l_api_version CONSTANT NUMBER := 1;
8897 l_api_name CONSTANT VARCHAR2(30) := 'check_amendments';
8898 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
8899 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
8900 l_index PLS_INTEGER := 0;
8901 l_start PLS_INTEGER := 0;
8902 l_message_txt VARCHAR2(2000);
8903 l_doc_type_class OKC_BUS_DOC_TYPES_B.document_type_class%TYPE;
8904 l_contact_exists BOOLEAN;
8905 l_contact_valid BOOLEAN;
8906
8907 l_qa_code VARCHAR2(80) := 'CHECK_AMENDMENT';
8908 l_short_desc VARCHAR2(80);
8909
8910 --Acq Plan Message Cleanup
8911 l_resolved_msg_name VARCHAR2(30);
8912 l_resolved_token VARCHAR2(100);
8913
8914 BEGIN
8915
8916 l_qa_result_tbl := px_qa_result_tbl;
8917 l_index := px_qa_result_tbl.count;
8918 l_start := px_qa_result_tbl.count;
8919
8920 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
8921
8922
8923
8924 IF(del_rec.amendment_operation is not null and del_rec.amendment_notes is null) THEN
8925 l_index := l_index+1;
8926
8927 --Acq Plan Message Cleanup
8928
8929 /* l_qa_result_tbl(l_index).message_name := 'OKC_DEL_MISSING_AMEND_DESC';
8930 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8931 p_msg_name => 'OKC_DEL_MISSING_AMEND_DESC',
8932 p_token1 => 'DELIVERABLE_NAME',
8933 p_token1_value => del_rec.deliverable_name);*/
8934
8935 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_MISSING_AMEND_DESC',del_rec.business_document_type);
8936 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
8937
8938
8939 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
8940 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8941 p_msg_name => l_resolved_msg_name,
8942 p_token1 => 'DEL_TOKEN',
8943 p_token1_value => l_resolved_token,
8944 p_token2 => 'DELIVERABLE_NAME',
8945 p_token2_value => del_rec.deliverable_name);
8946
8947 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
8948 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
8949
8950 l_qa_result_tbl(l_index).problem_details := l_message_txt;
8951 l_message_txt := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
8952 p_msg_name => 'OKC_DEL_REQUIRED_S');
8953 l_qa_result_tbl(l_index).suggestion := l_message_txt;
8954
8955 END IF;
8956
8957
8958
8959 --mass update common attributes
8960 IF(l_index > l_start) THEN
8961 --We have some errors
8962 -- Bug#3369934 changed the l_start to l_start+1 to handle multiple messages
8963 FOR i IN (l_start+1)..l_index
8964 LOOP
8965 l_qa_result_tbl(i).title := del_rec.deliverable_name;
8966 l_qa_result_tbl(i).deliverable_id := del_rec.deliverable_id;
8967 l_qa_result_tbl(i).qa_code := l_qa_code;
8968 l_qa_result_tbl(i).problem_short_desc := l_short_desc;
8969 l_qa_result_tbl(i).error_severity := p_severity;
8970
8971 END LOOP;
8972 END IF;
8973
8974 x_return_status := l_return_status;
8975 px_qa_result_tbl := l_qa_result_tbl;
8976
8977 EXCEPTION
8978 WHEN FND_API.G_EXC_ERROR THEN
8979 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8980 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with G_EXC_ERROR');
8981 END IF;
8982
8983 x_return_status := G_RET_STS_ERROR;
8984
8985
8986 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8987 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8988 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with G_EXC_UNEXPECTED_ERROR');
8989 END IF;
8990
8991 x_return_status := G_RET_STS_UNEXP_ERROR;
8992
8993
8994 WHEN OTHERS THEN
8995 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8996 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_amendments with OTHERS EXCEPTION');
8997 END IF;
8998
8999 x_return_status := G_RET_STS_UNEXP_ERROR;
9000 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9001 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9002 END IF;
9003
9004
9005 END check_amendments;
9006
9007 PROCEDURE update_error_table
9008 (px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9009 p_qa_severity IN VARCHAR2,
9010 p_qa_code IN VARCHAR2,
9011 p_error_msg_name IN VARCHAR2,
9012 p_del_variable_name IN VARCHAR2,
9013 p_article_name IN VARCHAR2,
9014 p_article_id IN NUMBER,
9015 p_section_name IN VARCHAR2,
9016 p_suggestion_msg_name IN VARCHAR2,
9017 x_return_status OUT NOCOPY VARCHAR2) IS
9018
9019 l_msg_txt VARCHAR2(2000);
9020 l_suggestion_txt VARCHAR2(2000);
9021 l_index NUMBER;
9022 l_return_status VARCHAR2(1);
9023 l_short_desc VARCHAR2(80);
9024 l_api_name CONSTANT VARCHAR2(30) := 'update_error_table';
9025 Begin
9026 l_return_status := G_RET_STS_SUCCESS;
9027 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',p_qa_code);
9028 l_msg_txt := OKC_TERMS_UTIL_PVT.get_message
9029 (p_app_name => G_OKC,
9030 p_msg_name => p_error_msg_name,
9031 p_token1 => 'DELIVERABLE_VARIABLE',
9032 p_token1_value => p_del_variable_name,
9033 p_token2 => 'ARTICLE_NAME',
9034 p_token2_value => p_article_name);
9035
9036 l_suggestion_txt := OKC_TERMS_UTIL_PVT.get_message
9037 (p_app_name => G_OKC,
9038 p_msg_name => p_suggestion_msg_name);
9039 l_index := px_qa_result_tbl.count + 1;
9040 px_qa_result_tbl(l_index).error_severity := p_qa_severity;
9041 px_qa_result_tbl(l_index).qa_code := p_qa_code;
9042 px_qa_result_tbl(l_index).message_name := p_error_msg_name;
9043 px_qa_result_tbl(l_index).problem_details := l_msg_txt;
9044 px_qa_result_tbl(l_index).suggestion := l_suggestion_txt;
9045 px_qa_result_tbl(l_index).title := p_article_name;
9046 px_qa_result_tbl(l_index).article_id := p_article_id;
9047 px_qa_result_tbl(l_index).section_name := p_section_name;
9048 px_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
9049 x_return_status := l_return_status;
9050 EXCEPTION
9051 WHEN OTHERS THEN
9052 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9053 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5002: Leaving update_error_table with unexpected error:'||SQLERRM);
9054 END IF;
9055 x_return_status := G_RET_STS_UNEXP_ERROR;
9056
9057 End update_error_table;
9058
9059
9060 /* This procedure gets called from validate_deliverables_for_qa routine to check to see if
9061 there are any variables of type 'D' which don't have deliverables associated
9062 with them.
9063 */
9064 PROCEDURE check_deliverables_var_usage(
9065 p_severity IN VARCHAR2,
9066 p_bus_doc_type IN VARCHAR2,
9067 p_bus_doc_id IN NUMBER,
9068 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9069 x_return_status OUT NOCOPY VARCHAR2) IS
9070
9071 l_api_version CONSTANT NUMBER := 1;
9072 l_api_name CONSTANT VARCHAR2(30) := 'check_deliverables_var_usage';
9073 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9074 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
9075 l_index PLS_INTEGER := 0;
9076 l_start PLS_INTEGER := 0;
9077 l_message_txt VARCHAR2(2000);
9078 l_qa_code VARCHAR2(80) := 'CHECK_DELIVERABLES_VAR_USAGE';
9079 l_short_desc VARCHAR2(80) ;
9080
9081 l_old_var_code okc_k_art_variables.variable_code%TYPE;
9082 l_old_art_id okc_k_articles_b.sav_sae_id%TYPE;
9083 l_article_name VARCHAR2(240);
9084
9085 --variable codes
9086 l_var_code_int_con CONSTANT VARCHAR2(40) := 'INTERNAL_CONTRACTUAL_DEL';
9087 l_var_code_ext_con CONSTANT VARCHAR2(40) := 'EXTERNAL_CONTRACTUAL_DEL';
9088 l_var_code_all_con CONSTANT VARCHAR2(40) := 'ALL_CONTRACTUAL_DEL';
9089
9090 l_var_code_ext_sourcing CONSTANT VARCHAR2(40) := 'EXTERNAL_SOURCING_DEL';
9091 l_var_code_all_sourcing CONSTANT VARCHAR2(40) := 'ALL_SOURCING_DEL';
9092
9093 l_contractual CONSTANT VARCHAR2(40) := 'CONTRACTUAL';
9094 l_sourcing CONSTANT VARCHAR2(40) := 'SOURCING';
9095
9096 --l_external CONSTANT VARCHAR2(40) := 'EXTERNAL';
9097 --l_internal CONSTANT VARCHAR2(40) := 'INTERNAL';
9098
9099 l_internal_org CONSTANT VARCHAR2(40) := 'INTERNAL_ORG';
9100
9101
9102 l_error_exists VARCHAR2(1) := 'N';
9103
9104 l_resolved_msg_name VARCHAR2(30);
9105 l_resolved_msg_name2 VARCHAR2(30);
9106
9107 DEL_NOT_FOUND_EXCEPTION EXCEPTION;
9108
9109 CURSOR get_variables_CUR IS
9110 select
9111 art.document_id doc_id
9112 ,art.document_type doc_type
9113 ,av.variable_code variable_code
9114 ,art.sav_sae_id article_id
9115 ,art.article_version_id version_id
9116 ,art.scn_id section_id
9117 ,sec.label||' '||sec.heading section_name
9118 ,variables.variable_name variable_name
9119 from
9120 okc_k_art_variables av
9121 ,okc_k_articles_b art
9122 ,okc_sections_b sec
9123 ,okc_bus_variables_v variables
9124 where
9125 art.document_id = p_bus_doc_id and
9126 art.document_type = p_bus_doc_type and
9127 av.variable_type = 'D' and
9128 av.cat_id = art.id and --ArtVariables to Articles
9129 sec.id = art.scn_id and --Sections to Articles
9130 variables.variable_code = av.variable_code and --Variables to ArtVariables
9131 nvl (art.amendment_operation_code,'?') <> 'DELETED' and --fix for bug 3710697
9132 nvl(art.summary_amend_operation_code,'?')<> 'DELETED'
9133 order by av.variable_code, art.sav_sae_id;
9134
9135
9136
9137 get_variables_REC get_variables_CUR%ROWTYPE;
9138
9139 CURSOR check_int_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9140 ,p_bus_doc_id IN NUMBER
9141 ,p_del_type IN VARCHAR2
9142 ,p_internal_org IN VARCHAR2) IS
9143 select 'x'
9144 from
9145 okc_deliverables del
9146 where
9147 del.business_document_type = p_bus_doc_type
9148 and del.business_document_id = p_bus_doc_id
9149 and del.deliverable_type = p_del_type
9150 and del.responsible_party = p_internal_org;
9151
9152 check_int_dels_exist_REC check_int_dels_exist_CUR%ROWTYPE;
9153
9154
9155 CURSOR check_ext_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9156 ,p_bus_doc_id IN NUMBER
9157 ,p_del_type IN VARCHAR2
9158 ,p_internal_org IN VARCHAR2) IS
9159 select 'x'
9160 from
9161 okc_deliverables del
9162 where
9163 del.business_document_type = p_bus_doc_type
9164 and del.business_document_id = p_bus_doc_id
9165 and del.deliverable_type = p_del_type
9166 and del.responsible_party <> p_internal_org;
9167
9168 check_ext_dels_exist_REC check_ext_dels_exist_CUR%ROWTYPE;
9169
9170 CURSOR check_all_dels_exist_CUR(p_bus_doc_type IN VARCHAR2
9171 ,p_bus_doc_id IN NUMBER
9172 ,p_del_type IN VARCHAR2) IS
9173 select 'x'
9174 from
9175 okc_deliverables del
9176 where
9177 del.business_document_type = p_bus_doc_type
9178 and del.business_document_id = p_bus_doc_id
9179 and del.deliverable_type = p_del_type;
9180
9181 check_all_dels_exist_REC check_all_dels_exist_CUR%ROWTYPE;
9182
9183
9184 --fix bug 3682452
9185 --We only check the variable usage for Negotiation type of deliverables
9186 --on a sourcing document
9187 --If it's a PO document, we do not check this
9188 --and we decide if a document is a sourcing document based on the
9189 --target_response_doc_type
9190 CURSOR response_doc_type_cur(p_bus_doc_type IN VARCHAR2) IS
9191 select target_response_doc_type
9192 from okc_bus_doc_types_b
9193 where document_type = p_bus_doc_type;
9194
9195 response_doc_type_rec response_doc_type_cur%ROWTYPE;
9196
9197 Begin
9198
9199
9200
9201
9202 l_qa_result_tbl := px_qa_result_tbl;
9203 l_index := px_qa_result_tbl.count;
9204 l_start := px_qa_result_tbl.count;
9205 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
9206
9207 --initialize l_old_var_code and l_old_art_id
9208 l_old_var_code := 'X';
9209 l_old_art_id := 0;
9210
9211
9212 OPEN get_variables_CUR;
9213 LOOP
9214 Begin
9215 Fetch get_variables_CUR into get_variables_REC;
9216 EXIT WHEN get_variables_CUR%NOTFOUND;
9217
9218 IF (get_variables_REC.variable_code <> l_old_var_code)THEN
9219
9220 --as we traverse down the records, if we encounter a different variable_code
9221 --we should perform the checks
9222 --if the article_id changes and we already know that the variable_code does not have
9223 --associated deliverables, we just need to insert the error message
9224 --without performing the check
9225
9226 l_error_exists := 'N';
9227
9228
9229
9230 IF get_variables_REC.variable_code = l_var_code_int_con then
9231
9232
9233 OPEN check_int_dels_exist_CUR(
9234 p_bus_doc_type => p_bus_doc_type
9235 ,p_bus_doc_id => p_bus_doc_id
9236 ,p_del_type => l_contractual
9237 ,p_internal_org => l_internal_org);
9238
9239 FETCH check_int_dels_exist_CUR into check_int_dels_exist_REC;
9240 If check_int_dels_exist_CUR%NOTFOUND then
9241 l_error_exists := 'Y';
9242 RAISE DEL_NOT_FOUND_EXCEPTION;
9243 End If;
9244 CLOSE check_int_dels_exist_CUR;
9245
9246 Elsif get_variables_REC.variable_code = l_var_code_ext_con then
9247
9248 OPEN check_ext_dels_exist_CUR(
9249 p_bus_doc_type => p_bus_doc_type
9250 ,p_bus_doc_id => p_bus_doc_id
9251 ,p_del_type => l_contractual
9252 ,p_internal_org => l_internal_org);
9253
9254 FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
9255 If check_ext_dels_exist_CUR%NOTFOUND then
9256 l_error_exists := 'Y';
9257 RAISE DEL_NOT_FOUND_EXCEPTION;
9258 End If;
9259 CLOSE check_ext_dels_exist_CUR;
9260
9261 Elsif get_variables_REC.variable_code = l_var_code_all_con then
9262
9263
9264 OPEN check_all_dels_exist_CUR(p_bus_doc_type => p_bus_doc_type
9265 ,p_bus_doc_id => p_bus_doc_id
9266 ,p_del_type => l_contractual);
9267
9268 FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
9269 If check_all_dels_exist_CUR%NOTFOUND then
9270 l_error_exists := 'Y';
9271 RAISE DEL_NOT_FOUND_EXCEPTION;
9272 End If;
9273 CLOSE check_all_dels_exist_CUR;
9274
9275
9276 Elsif get_variables_REC.variable_code = l_var_code_ext_sourcing then
9277
9278 --fix bug 3682452
9279 --We only check the variable usage for Negotiation type of deliverables
9280 --on a sourcing document
9281 OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
9282 FETCH response_doc_type_cur into response_doc_type_rec;
9283 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
9284 OPEN check_ext_dels_exist_CUR(
9285 p_bus_doc_type => p_bus_doc_type
9286 ,p_bus_doc_id => p_bus_doc_id
9287 ,p_del_type => l_sourcing
9288 ,p_internal_org => l_internal_org);
9289
9290 FETCH check_ext_dels_exist_CUR into check_ext_dels_exist_REC;
9291 If check_ext_dels_exist_CUR%NOTFOUND then
9292 l_error_exists := 'Y';
9293 RAISE DEL_NOT_FOUND_EXCEPTION;
9294 End If;
9295 CLOSE check_ext_dels_exist_CUR;
9296 END IF;
9297 CLOSE response_doc_type_cur;
9298
9299
9300 Elsif get_variables_REC.variable_code = l_var_code_all_sourcing then
9301
9302 --fix bug 3682452
9303 --We only check the variable usage for Negotiation type of deliverables
9304 --on a sourcing document
9305 OPEN response_doc_type_cur(p_bus_doc_type => p_bus_doc_type);
9306 FETCH response_doc_type_cur into response_doc_type_rec;
9307 IF response_doc_type_rec.target_response_doc_type IS NOT NULL THEN
9308
9309 OPEN check_all_dels_exist_CUR(
9310 p_bus_doc_type => p_bus_doc_type
9311 ,p_bus_doc_id => p_bus_doc_id
9312 ,p_del_type => l_sourcing);
9313 FETCH check_all_dels_exist_CUR into check_all_dels_exist_REC;
9314 If check_all_dels_exist_CUR%NOTFOUND then
9315 l_error_exists := 'Y';
9316 RAISE DEL_NOT_FOUND_EXCEPTION;
9317 End If;
9318 CLOSE check_all_dels_exist_CUR;
9319 END IF;
9320 CLOSE response_doc_type_cur;
9321
9322 End IF; --get_variables_REC.variable_code = l_var_code_int_con
9323
9324 ELSE --current variable_code = old variable_code
9325
9326 IF(l_error_exists = 'Y') THEN
9327 RAISE DEL_NOT_FOUND_EXCEPTION;
9328 END IF;
9329 END IF;
9330
9331
9332 EXCEPTION
9333 WHEN DEL_NOT_FOUND_EXCEPTION THEN
9334 IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9335 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,g_module||l_api_name,'5000: In check_deliverables_var_usage:DEL_NOT_FOUND :'||SQLERRM);
9336 END IF;
9337
9338 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_VAR_NOT_RESOLVED', p_bus_doc_type);
9339 l_resolved_msg_name2 := OKC_API.resolve_message('OKC_DEL_VAR_NOT_RESOLVED_S', p_bus_doc_type);
9340
9341 update_error_table
9342 (px_qa_result_tbl => l_qa_result_tbl,
9343 p_qa_severity => p_severity,
9344 p_qa_code => l_qa_code,
9345 p_error_msg_name => l_resolved_msg_name,
9346 p_del_variable_name => get_variables_REC.variable_name, -- get_variables_REC.del_variable_name,
9347 p_article_id => get_variables_REC.article_id,
9348 p_article_name => okc_terms_util_pvt.get_Article_Name( get_variables_REC.article_id ,get_variables_REC.version_id), -- get_variables_REC.article_name,
9349 p_section_name => get_variables_REC.section_name,
9350 p_suggestion_msg_name => l_resolved_msg_name2,
9351 x_return_status => l_return_status );
9352
9353 IF check_int_dels_exist_CUR%ISOPEN THEN
9354 CLOSE check_int_dels_exist_CUR;
9355 END IF;
9356 IF check_ext_dels_exist_CUR%ISOPEN THEN
9357 CLOSE check_ext_dels_exist_CUR;
9358 END IF;
9359
9360 IF check_all_dels_exist_CUR%ISOPEN THEN
9361 CLOSE check_all_dels_exist_CUR;
9362 END IF;
9363
9364 IF response_doc_type_cur%ISOPEN THEN
9365 CLOSE response_doc_type_cur;
9366 END IF;
9367
9368 End ; --end exception DEL_NOT_FOUND_EXCEPTION
9369 --reset the old values
9370 l_old_var_code := get_variables_REC.variable_code;
9371 l_old_art_id := get_variables_REC.article_id;
9372
9373 END LOOP;
9374
9375 CLOSE get_variables_CUR;
9376
9377 x_return_status := l_return_status;
9378 px_qa_result_tbl := l_qa_result_tbl;
9379
9380 EXCEPTION
9381 WHEN OTHERS THEN
9382 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9383 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'5001: Leaving check_deliverables_var_usage with unexpected error:'||SQLERRM);
9384 END IF;
9385
9386 IF get_variables_CUR%ISOPEN THEN
9387 CLOSE get_variables_CUR;
9388 END IF;
9389
9390 IF check_int_dels_exist_CUR%ISOPEN THEN
9391 CLOSE check_int_dels_exist_CUR;
9392 END IF;
9393
9394 IF check_ext_dels_exist_CUR%ISOPEN THEN
9395 CLOSE check_int_dels_exist_CUR;
9396 END IF;
9397
9398 IF check_all_dels_exist_CUR%ISOPEN THEN
9399 CLOSE check_all_dels_exist_CUR;
9400 END IF;
9401
9402 IF response_doc_type_cur%ISOPEN THEN
9403 CLOSE response_doc_type_cur;
9404 END IF;
9405 x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
9406
9407
9408 End check_deliverables_var_usage;
9409
9410 /**********************
9411 PROCEDURE check_external_party_exist:
9412 This API will be invoked by validate_deliverables_for_qa routine during QA check on a
9413 Deliverable. This check should only fire for Deliverables on a document where document_class
9414 is 'REPOSITORY'. This check should not fire for Deliverable types whose INTERNAL_FLAG = 'Y'
9415 * @modifies px_qa_result_tbl table of records that contains validation errors and warnings
9416 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
9417 * OKC_API.G_RET_STS_ERROR if fails
9418 * OKC_API.G_RET_STS_UNEXP_ERROR if unexpected error
9419 * x_qa_status OKC_API.G_RET_STS_SUCCESS if no error/warning is found
9420 * OKC_API.G_RET_STS_ERROR if at least one error/warning is found
9421 ***********************/
9422 PROCEDURE check_external_party_exists (
9423 del_rec IN OKC_DELIVERABLES%ROWTYPE,
9424 p_severity IN VARCHAR2,
9425 px_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9426 x_return_status OUT NOCOPY VARCHAR2
9427 ) IS
9428
9429 l_api_version CONSTANT NUMBER := 1;
9430 l_api_name CONSTANT VARCHAR2(30) := 'check_external_party_exists';
9431 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9432 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
9433 l_index PLS_INTEGER := 0;
9434 l_start PLS_INTEGER := 0;
9435
9436 l_qa_code VARCHAR2(80) := 'CHECK_EXTERNAL_PARTY_EXISTS';
9437 l_short_desc VARCHAR2(80);
9438 --Acq Plan Message Cleanup
9439 --l_error_msg_name FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS';
9440 l_error_msg_name FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS';
9441 --l_suggestion_msg_name FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS_S';
9442 l_suggestion_msg_name FND_NEW_MESSAGES.MESSAGE_NAME%TYPE := 'OKC_CHECK_EXT_PARTY_EXISTS_S';
9443
9444 l_deliverable_name_token VARCHAR2(30) := 'DELIVERABLE_NAME';
9445
9446 l_error_msg_text FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
9447 l_suggestion_msg_text FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
9448
9449 l_doc_type_class OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE;
9450 l_del_type_int_flag OKC_DELIVERABLE_TYPES_B.INTERNAL_FLAG%TYPE;
9451
9452 --Acq Plan Message Cleanup
9453 l_resolved_msg_name VARCHAR2(30);
9454 l_resolved_token VARCHAR2(100);
9455
9456 BEGIN
9457
9458 l_qa_result_tbl := px_qa_result_tbl;
9459 l_index := px_qa_result_tbl.count;
9460 l_start := px_qa_result_tbl.count;
9461
9462 l_short_desc := get_lookup_meaning('OKC_TERM_QA_LIST',l_qa_code);
9463
9464 l_doc_type_class := getDocTypeClass(p_bus_doctype => del_rec.business_document_type);
9465 If (l_doc_type_class IS NULL) then
9466 RAISE FND_API.G_EXC_ERROR;
9467 End If;
9468 l_del_type_int_flag := getDelTypeIntFlag(p_document_type_class => l_doc_type_class
9469 ,p_deliverable_type => del_rec.deliverable_type);
9470 If (l_del_type_int_flag IS NULL) then
9471 RAISE FND_API.G_EXC_ERROR;
9472 End If;
9473
9474 If (l_doc_type_class = 'REPOSITORY'
9475 AND l_del_type_int_flag = 'N'
9476 AND del_rec.external_party_id is NULL) then
9477
9478 l_index := l_index+1;
9479 l_qa_result_tbl(l_index).error_severity := G_QA_STS_ERROR;
9480
9481 --Acq Plan Message Cleanup
9482 l_resolved_msg_name := OKC_API.resolve_message(l_error_msg_name,del_rec.business_document_type);
9483 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
9484
9485 l_error_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
9486 p_msg_name => l_resolved_msg_name,
9487 p_token1 => 'DEL_TOKEN',
9488 p_token1_value => l_resolved_token,
9489 p_token2 => l_deliverable_name_token,
9490 p_token2_value => del_rec.deliverable_name);
9491 l_qa_result_tbl(l_index).reference_column1 := 'DEL_TOKEN~' || l_resolved_token;
9492 l_qa_result_tbl(l_index).reference_column2 := 'DELIVERABLE_NAME~'||del_rec.deliverable_name;
9493
9494 l_qa_result_tbl(l_index).message_name := l_resolved_msg_name;
9495 l_qa_result_tbl(l_index).problem_details := l_error_msg_text;
9496
9497 --Acq Plan Message Cleanup
9498 l_resolved_msg_name := OKC_API.resolve_message(l_suggestion_msg_name,del_rec.business_document_type);
9499 l_resolved_token := OKC_API.resolve_del_token(del_rec.business_document_type);
9500
9501 l_suggestion_msg_text := OKC_TERMS_UTIL_PVT.get_message(p_app_name => G_OKC,
9502 p_msg_name => l_resolved_msg_name,
9503 p_token1 => 'DEL_TOKEN',
9504 p_token1_value => l_resolved_token
9505 );
9506
9507 l_qa_result_tbl(l_index).suggestion := l_suggestion_msg_text;
9508 l_qa_result_tbl(l_index).title := del_rec.deliverable_name;
9509 l_qa_result_tbl(l_index).deliverable_id := del_rec.deliverable_id;
9510 l_qa_result_tbl(l_index).qa_code := l_qa_code;
9511 l_qa_result_tbl(l_index).problem_short_desc := l_short_desc;
9512 l_qa_result_tbl(l_index).error_severity := p_severity;
9513
9514 End If;
9515 x_return_status := l_return_status;
9516 px_qa_result_tbl := l_qa_result_tbl;
9517
9518
9519 EXCEPTION
9520 WHEN FND_API.G_EXC_ERROR THEN
9521 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9522 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module
9523 ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_ERROR');
9524 END IF;
9525 x_return_status := G_RET_STS_ERROR;
9526
9527
9528 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9529 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9530 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
9531 ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with G_EXC_UNEXPECTED_ERROR');
9532 END IF;
9533
9534 x_return_status := G_RET_STS_UNEXP_ERROR;
9535
9536
9537 WHEN OTHERS THEN
9538 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9539 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module
9540 ||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.check_external_party_exists with OTHERS EXCEPTION');
9541 END IF;
9542 x_return_status := G_RET_STS_UNEXP_ERROR;
9543
9544 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9545 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
9546 END IF;
9547
9548
9549 End check_external_party_exists;
9550
9551
9552 /* This procedure is called from terms QA check API.
9553 * @requires p_qa_result_tbl has been initialized
9554 * p_doc_type not null
9555 * p_doc_id not null
9556 * @modifies p_qa_result_tbl table of records that contains validation
9557 * errors and warnings
9558 * @returns x_return_status OKC_API.G_RET_STS_SUCCESS if succeeds
9559 * OKC_API.G_RET_STS_ERROR if failes
9560 * OKC_API.G_RET_STS_UNEXP_ERROR is unexpected error
9561 */
9562 PROCEDURE validate_deliverable_for_qa (
9563 p_api_version IN NUMBER,
9564 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
9565 p_doc_type IN VARCHAR2,
9566 p_doc_id IN NUMBER,
9567 p_mode IN VARCHAR2,
9568 p_bus_doc_date_events_tbl IN OKC_TERMS_QA_GRP.BUSDOCDATES_TBL_TYPE,
9569 p_qa_result_tbl IN OUT NOCOPY OKC_TERMS_QA_PVT.qa_result_tbl_type,
9570 x_msg_data OUT NOCOPY VARCHAR2,
9571 x_msg_count OUT NOCOPY NUMBER,
9572 x_return_status OUT NOCOPY VARCHAR2,
9573 x_qa_return_status IN OUT NOCOPY VARCHAR2)
9574 IS
9575
9576 l_api_version CONSTANT NUMBER := 1;
9577 l_api_name CONSTANT VARCHAR2(30) := 'validate_deliverable';
9578 l_qa_severity_warning CONSTANT VARCHAR2(1) := 'W';
9579 l_qa_severity_error CONSTANT VARCHAR2(1) := 'E';
9580
9581 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9582 l_qa_result_tbl OKC_TERMS_QA_PVT.qa_result_tbl_type;
9583
9584 l_start PLS_INTEGER := 0;
9585 l_end PLS_INTEGER := 0;
9586 del_cur del_cur_type;
9587 del_rec okc_deliverables%ROWTYPE;
9588 l_qa_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
9589
9590 -- l_due_date_msg VARCHAR2(2000) := '';
9591 l_check_int_contact VARCHAR2(19) := 'CHECK_BUYER_CONTACT';
9592 l_check_ext_contact VARCHAR2(22) := 'CHECK_SUPPLIER_CONTACT';
9593 l_check_due_dates VARCHAR2(15) := 'CHECK_DUE_DATES';
9594 l_check_amendments VARCHAR2(20) := 'CHECK_AMENDMENT';
9595 l_check_var_usage VARCHAR2(40) := 'CHECK_DELIVERABLES_VAR_USAGE';
9596 l_check_notifications VARCHAR2(40) := 'CHECK_NOTIFICATIONS';
9597 --bug 3686334, added CHECK_INTERNAL_CONTACT_VALID
9598 l_check_int_contact_valid VARCHAR2(30) := 'CHECK_INTERNAL_CONTACT_VALID';
9599 --bug 3814702, add a variable for Lookup type
9600
9601 l_check_external_party_exists VARCHAR2(30) := 'CHECK_EXTERNAL_PARTY_EXISTS';
9602
9603 l_lookup_type FND_LOOKUPS.LOOKUP_TYPE%TYPE :='OKC_TERM_QA_LIST';
9604
9605 CURSOR check_qa_csr(p_qa_code IN VARCHAR2) IS
9606 select qa_code, severity_flag,enable_qa_yn
9607 from okc_doc_qa_lists
9608 where document_type = p_doc_type
9609 and qa_code = p_qa_code;
9610
9611 CURSOR check_lookup_code_csr(p_lookup_code IN VARCHAR2) IS
9612 select enabled_flag
9613 from fnd_lookups
9614 where lookup_type = l_lookup_type --bug 3814702, use variable for lookup_type
9615 and lookup_code = p_lookup_code;
9616
9617
9618 l_int_contact_rec check_qa_csr%ROWTYPE;
9619 l_ext_contact_rec check_qa_csr%ROWTYPE;
9620 l_due_dates_rec check_qa_csr%ROWTYPE;
9621 l_amendments_rec check_qa_csr%ROWTYPE;
9622 l_var_usage_rec check_qa_csr%ROWTYPE;
9623 l_notifications_rec check_qa_csr%ROWTYPE;
9624 l_int_contact_valid_rec check_qa_csr%ROWTYPE;
9625 l_chk_extparty_exists_rec check_qa_csr%ROWTYPE; --ExternalPartyExists check
9626
9627
9628 l_int_contact_code_rec check_lookup_code_csr%ROWTYPE;
9629 l_ext_contact_code_rec check_lookup_code_csr%ROWTYPE;
9630 l_due_dates_code_rec check_lookup_code_csr%ROWTYPE;
9631 l_amendments_code_rec check_lookup_code_csr%ROWTYPE;
9632 l_var_usage_code_rec check_lookup_code_csr%ROWTYPE;
9633 l_notifications_code_rec check_lookup_code_csr%ROWTYPE;
9634 l_int_contact_valid_code_rec check_lookup_code_csr%ROWTYPE;
9635 l_chk_extparty_exists_code_rec check_lookup_code_csr%ROWTYPE; --ExternalPartyExists check
9636
9637
9638 l_check_int_contact_yn VARCHAR2(1);
9639 l_check_ext_contact_yn VARCHAR2(1);
9640 l_check_due_dates_yn VARCHAR2(1);
9641 l_check_amendments_yn VARCHAR2(1);
9642 l_check_var_usage_yn VARCHAR2(1);
9643 l_check_notifications_yn VARCHAR2(1);
9644 l_check_int_contact_valid_yn VARCHAR2(1);
9645 l_chk_extparty_exists_yn VARCHAR2(1); --ExternalPartyExists check
9646
9647 l_int_contact_severity VARCHAR2(1);
9648 l_ext_contact_severity VARCHAR2(1);
9649 l_due_dates_severity VARCHAR2(1);
9650 l_amendments_severity VARCHAR2(1);
9651 l_var_usage_severity VARCHAR2(1);
9652 l_notifications_severity VARCHAR2(1);
9653 l_int_contact_valid_severity VARCHAR2(1);
9654 l_chk_extparty_exists_severity VARCHAR2(1); --ExternalPartyExists check
9655
9656 l_error_found VARCHAR2(1) := 'N';
9657 l_warning_found VARCHAR2(1) := 'N';
9658 l_contract_source OKC_TEMPLATE_USAGES.CONTRACT_SOURCE_CODE%TYPE;
9659
9660
9661
9662 BEGIN
9663
9664 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9665 okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
9666 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
9667 END IF;
9668
9669 l_return_status := OKC_API.START_ACTIVITY(l_api_name,
9670 p_init_msg_list,
9671 '_PVT',
9672 x_return_status);
9673 IF p_doc_id = NULL THEN
9674 Okc_Api.Set_Message(G_APP_NAME
9675 ,'OKC_DEL_NO_PARAMS');
9676 RAISE FND_API.G_EXC_ERROR;
9677 END IF;
9678 IF p_doc_type = NULL THEN
9679 Okc_Api.Set_Message(G_APP_NAME
9680 ,'OKC_DEL_NO_PARAMS');
9681 RAISE FND_API.G_EXC_ERROR;
9682 END IF;
9683 IF p_mode = NULL THEN
9684 Okc_Api.Set_Message(G_APP_NAME
9685 ,'OKC_DEL_NO_PARAMS');
9686 RAISE FND_API.G_EXC_ERROR;
9687 END IF;
9688
9689
9690
9691 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
9692 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
9693 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
9694 RAISE OKC_API.G_EXCEPTION_ERROR;
9695 END IF;
9696
9697 -- Initialize message list if p_init_msg_list is set to TRUE.
9698 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9699 FND_MSG_PUB.initialize;
9700 END IF;
9701
9702 --initialize l_qa_result_tbl
9703 l_qa_result_tbl := p_qa_result_tbl;
9704
9705 l_start := l_qa_result_tbl.count;
9706
9707
9708 --first we check if the lookup_code is enabled in fnd_lookups
9709 --(1)if the lookup_code is disabled we do not perform the QA check
9710 --(2)if the lookup_code is enabled we query okc_qa_doc_lists
9711 --if the enable_qa_yn = 'N' we do not perform the QA check
9712 --otherwise (including when enable_qa_yn='Y' and when there is no row returned) we perform QA check
9713 OPEN check_lookup_code_csr(l_check_amendments);
9714 FETCH check_lookup_code_csr into l_amendments_code_rec;
9715 IF(check_lookup_code_csr%NOTFOUND OR l_amendments_code_rec.enabled_flag = 'N') THEN
9716 l_check_amendments_yn := 'N';
9717 ELSE
9718 OPEN check_qa_csr(l_check_amendments);
9719 FETCH check_qa_csr into l_amendments_rec;
9720 IF(check_qa_csr%NOTFOUND) THEN
9721 l_check_amendments_yn := 'Y';
9722 --since there is no row, we cannot get the severity_flag
9723 --default it to warning
9724 l_amendments_severity := l_qa_severity_warning;
9725 ELSE
9726 IF(l_amendments_rec.enable_qa_yn = 'N') THEN
9727 l_check_amendments_yn := 'N';
9728 ELSE
9729 l_check_amendments_yn := 'Y';
9730 l_amendments_severity := l_amendments_rec.severity_flag;
9731 END IF;
9732 END IF;
9733 CLOSE check_qa_csr;
9734 END IF;
9735 CLOSE check_lookup_code_csr;
9736
9737 OPEN check_lookup_code_csr(l_check_notifications);
9738 FETCH check_lookup_code_csr into l_notifications_code_rec;
9739 IF(check_lookup_code_csr%NOTFOUND OR l_notifications_code_rec.enabled_flag = 'N') THEN
9740 l_check_notifications_yn := 'N';
9741 ELSE
9742 OPEN check_qa_csr(l_check_notifications);
9743 FETCH check_qa_csr into l_notifications_rec;
9744 IF(check_qa_csr%NOTFOUND) THEN
9745 l_check_notifications_yn := 'Y';
9746 --since there is no row, we cannot get the severity_flag
9747 --default it to warning
9748 l_notifications_severity := l_qa_severity_warning;
9749 ELSE
9750 IF(l_notifications_rec.enable_qa_yn = 'N') THEN
9751 l_check_notifications_yn := 'N';
9752 ELSE
9753 l_check_notifications_yn := 'Y';
9754 l_notifications_severity := l_notifications_rec.severity_flag;
9755 END IF;
9756 END IF;
9757 CLOSE check_qa_csr;
9758 END IF;
9759 CLOSE check_lookup_code_csr;
9760
9761 OPEN check_lookup_code_csr(l_check_int_contact);
9762 FETCH check_lookup_code_csr into l_int_contact_code_rec;
9763 IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_code_rec.enabled_flag = 'N') THEN
9764 l_check_int_contact_yn := 'N';
9765 ELSE
9766 OPEN check_qa_csr(l_check_int_contact);
9767 FETCH check_qa_csr into l_int_contact_rec;
9768 IF(check_qa_csr%NOTFOUND) THEN
9769 l_check_int_contact_yn := 'Y';
9770 --since there is no row, we cannot get the severity_flag
9771 --default it to warning
9772 l_int_contact_severity := l_qa_severity_warning;
9773 ELSE
9774 IF(l_int_contact_rec.enable_qa_yn = 'N') THEN
9775 l_check_int_contact_yn := 'N';
9776 ELSE
9777 l_check_int_contact_yn := 'Y';
9778 l_int_contact_severity := l_int_contact_rec.severity_flag;
9779 END IF;
9780 END IF;
9781 CLOSE check_qa_csr;
9782 END IF;
9783 CLOSE check_lookup_code_csr;
9784
9785
9786 OPEN check_lookup_code_csr(l_check_int_contact_valid);
9787 FETCH check_lookup_code_csr into l_int_contact_valid_code_rec;
9788 IF(check_lookup_code_csr%NOTFOUND OR l_int_contact_valid_code_rec.enabled_flag = 'N') THEN
9789 l_check_int_contact_valid_yn := 'N';
9790 ELSE
9791 OPEN check_qa_csr(l_check_int_contact_valid);
9792 FETCH check_qa_csr into l_int_contact_valid_rec;
9793 IF(check_qa_csr%NOTFOUND) THEN
9794 l_check_int_contact_valid_yn := 'Y';
9795 --since there is no row, we cannot get the severity_flag
9796 --default it to warning
9797 l_int_contact_valid_severity := l_qa_severity_warning;
9798 ELSE
9799 IF(l_int_contact_valid_rec.enable_qa_yn = 'N') THEN
9800 l_check_int_contact_valid_yn := 'N';
9801 ELSE
9802 l_check_int_contact_valid_yn := 'Y';
9803 l_int_contact_valid_severity := l_int_contact_valid_rec.severity_flag;
9804 END IF;
9805 END IF;
9806 CLOSE check_qa_csr;
9807 END IF;
9808 CLOSE check_lookup_code_csr;
9809
9810
9811 OPEN check_lookup_code_csr(l_check_ext_contact);
9812 FETCH check_lookup_code_csr into l_ext_contact_code_rec;
9813 IF(check_lookup_code_csr%NOTFOUND OR l_ext_contact_code_rec.enabled_flag = 'N') THEN
9814 l_check_ext_contact_yn := 'N';
9815 ELSE
9816 OPEN check_qa_csr(l_check_ext_contact);
9817 FETCH check_qa_csr into l_ext_contact_rec;
9818 IF(check_qa_csr%NOTFOUND) THEN
9819 l_check_ext_contact_yn := 'Y';
9820 --since there is no row, we cannot get the severity_flag
9821 --default it to warning
9822 l_ext_contact_severity := l_qa_severity_warning;
9823 ELSE
9824 IF(l_ext_contact_rec.enable_qa_yn = 'N') THEN
9825 l_check_ext_contact_yn := 'N';
9826 ELSE
9827 l_check_ext_contact_yn := 'Y';
9828 l_ext_contact_severity := l_ext_contact_rec.severity_flag;
9829 END IF;
9830 END IF;
9831 CLOSE check_qa_csr;
9832 END IF;
9833 CLOSE check_lookup_code_csr;
9834
9835 OPEN check_lookup_code_csr(l_check_due_dates);
9836 FETCH check_lookup_code_csr into l_due_dates_code_rec;
9837 IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
9838 l_check_due_dates_yn := 'N';
9839 ELSE
9840 OPEN check_qa_csr(l_check_due_dates);
9841 FETCH check_qa_csr into l_due_dates_rec;
9842 IF(check_qa_csr%NOTFOUND) THEN
9843 l_check_due_dates_yn := 'Y';
9844 --since there is no row, we cannot get the severity_flag
9845 --default it to warning
9846 l_due_dates_severity := l_qa_severity_warning;
9847 ELSE
9848 IF(l_due_dates_rec.enable_qa_yn = 'N') THEN
9849 l_check_due_dates_yn := 'N';
9850 ELSE
9851 l_check_due_dates_yn := 'Y';
9852 l_due_dates_severity := l_due_dates_rec.severity_flag;
9853 END IF;
9854 END IF;
9855 CLOSE check_qa_csr;
9856 END IF;
9857 CLOSE check_lookup_code_csr;
9858
9859 --Begin ExternalPartyExists cursors---
9860 OPEN check_lookup_code_csr(l_check_external_party_exists);
9861 FETCH check_lookup_code_csr into l_chk_extparty_exists_code_rec;
9862 IF(check_lookup_code_csr%NOTFOUND
9863 OR l_chk_extparty_exists_code_rec.enabled_flag = 'N') THEN
9864 l_chk_extparty_exists_yn := 'N';
9865 ELSE
9866 OPEN check_qa_csr(l_check_external_party_exists);
9867 FETCH check_qa_csr into l_chk_extparty_exists_rec;
9868 IF(check_qa_csr%NOTFOUND) THEN
9869 l_chk_extparty_exists_yn := 'Y';
9870 --since there is no row, we cannot get the severity_flag
9871 --default it to warning
9872 l_chk_extparty_exists_severity := l_qa_severity_warning;
9873 ELSE
9874 IF(l_chk_extparty_exists_rec.enable_qa_yn = 'N') THEN
9875 l_chk_extparty_exists_yn := 'N';
9876 ELSE
9877 l_chk_extparty_exists_yn := 'Y';
9878 l_chk_extparty_exists_severity := l_chk_extparty_exists_rec.severity_flag;
9879 END IF;
9880 END IF;
9881 CLOSE check_qa_csr;
9882 END IF;
9883 CLOSE check_lookup_code_csr;
9884
9885 --End ExternalPartyExists cursors--
9886 /* IF(p_mode = G_AMEND_QA) THEN
9887 OPEN del_cur FOR
9888 select *
9889 from okc_deliverables
9890 where business_document_type = p_doc_type
9891 and business_document_id = p_doc_id
9892 and business_document_version = -99
9893 and deliverable_type in (select deltypes.deliverable_type_code from okc_bus_doc_types_b doctypes,
9894 --okc_del_bus_doc_combxns deltypes
9895 okc_deliverable_types_b deltypes
9896 where doctypes.document_type=p_doc_type
9897 and doctypes.document_type_class = deltypes.document_type_class)
9898 and amendment_operation is not null;
9899
9900
9901
9902 ELSE
9903 */
9904 --to fix bug 3236092
9905 --I am commenting out the dynamic query
9906 --so even in Amend mode we check all the deliverables belong to that bus doc
9907 --this is because even if the deliverable is untouched the bus doc's data might be
9908 --changed so the deliverable could still fail the QA check
9909
9910 --Repository Change: changed cursor to look at okc_deliverable_types_b
9911 -- updated cursor for bug#4069955
9912
9913
9914
9915 OPEN del_cur FOR
9916 select *
9917 from okc_deliverables
9918 where business_document_type = p_doc_type
9919 and business_document_id = p_doc_id
9920 and business_document_version = -99
9921 and (amendment_operation is NULL OR amendment_operation <> 'DELETED')
9922 and (summary_amend_operation_code is NULL OR summary_amend_operation_code <> 'DELETED')
9923 and deliverable_type in (select deltypes.deliverable_type_code
9924 from okc_bus_doc_types_b doctypes,
9925 okc_del_bus_doc_combxns deltypes
9926 where doctypes.document_type=p_doc_type
9927 and doctypes.document_type_class = deltypes.document_type_class);
9928
9929
9930 -- END IF;
9931
9932
9933
9934 LOOP
9935 FETCH del_cur INTO del_rec;
9936
9937
9938 EXIT WHEN del_cur%NOTFOUND;
9939
9940
9941
9942
9943 IF(l_check_amendments_yn='Y' and p_mode = G_AMEND_QA) THEN
9944 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9945 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking amendments');
9946 END IF;
9947 check_amendments( del_rec => del_rec,
9948 p_severity => l_amendments_severity,
9949 px_qa_result_tbl => l_qa_result_tbl,
9950 x_return_status => l_return_status);
9951 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9952 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9953 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9954 RAISE FND_API.G_EXC_ERROR ;
9955 END IF;
9956
9957 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9958 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking amendments');
9959 END IF;
9960 END IF;
9961
9962 IF(l_check_notifications_yn='Y') THEN
9963 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9964 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking notifications');
9965 END IF;
9966 check_notifications( del_rec => del_rec,
9967 p_severity => l_notifications_severity,
9968 px_qa_result_tbl => l_qa_result_tbl,
9969 x_return_status => l_return_status);
9970 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9971 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9972 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9973 RAISE FND_API.G_EXC_ERROR ;
9974 END IF;
9975
9976 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9977 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking notifications');
9978 END IF;
9979 END IF;
9980
9981 IF(l_check_int_contact_yn='Y') THEN
9982 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9983 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts');
9984 END IF;
9985 check_internal_contacts( del_rec => del_rec,
9986 p_severity => l_int_contact_severity,
9987 px_qa_result_tbl => l_qa_result_tbl,
9988 x_return_status => l_return_status);
9989 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
9990 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
9991 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
9992 RAISE FND_API.G_EXC_ERROR ;
9993 END IF;
9994
9995 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9996 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts');
9997 END IF;
9998 END IF;
9999
10000 --bug 3686334
10001 --added call to check_internal_contact_valid
10002 IF(l_check_int_contact_valid_yn='Y') THEN
10003 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10004 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking internal contacts valid');
10005 END IF;
10006 check_internal_contacts_valid( del_rec => del_rec,
10007 p_severity => l_int_contact_valid_severity,
10008 px_qa_result_tbl => l_qa_result_tbl,
10009 x_return_status => l_return_status);
10010 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10011 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10012 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10013 RAISE FND_API.G_EXC_ERROR ;
10014 END IF;
10015
10016 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10017 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking internal contacts valid');
10018 END IF;
10019 END IF;
10020
10021
10022 ------------External Party Exists check---------------
10023 IF (l_chk_extparty_exists_yn = 'Y') THEN
10024 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10025 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
10026 ||l_api_name,'start checking external party exists');
10027 END IF;
10028 check_external_party_exists(del_rec => del_rec,
10029 p_severity => l_chk_extparty_exists_severity,
10030 px_qa_result_tbl => l_qa_result_tbl,
10031 x_return_status => l_return_status);
10032
10033 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10034 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10035 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10036 RAISE FND_API.G_EXC_ERROR ;
10037 END IF;
10038
10039 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10040 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module
10041 ||l_api_name,'finished checking external party exists');
10042 END IF;
10043 END IF;
10044
10045 ------------End External Party Exists check------------
10046
10047 IF(l_check_ext_contact_yn='Y') THEN
10048 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10049 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking external contacts');
10050 END IF;
10051 check_external_contacts( del_rec => del_rec,
10052 p_severity =>l_ext_contact_severity,
10053 px_qa_result_tbl => l_qa_result_tbl,
10054 x_return_status => l_return_status);
10055 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10056 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10057 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10058 RAISE FND_API.G_EXC_ERROR ;
10059 END IF;
10060 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10061 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking external contacts');
10062 END IF;
10063 END IF;
10064
10065 IF(l_check_due_dates_yn='Y') THEN
10066 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10067 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking due dates');
10068 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'schedule_type = '||del_rec.schedule_type);
10069 END IF;
10070 --Acq Plan Message Cleanup
10071 IF (nvl(del_rec.schedule_type, 'SYSTEM') = 'SYSTEM') THEN --if schedule_type is SYSTEM then only validations are required.
10072 check_due_dates( del_rec => del_rec,
10073 p_severity => l_due_dates_severity,
10074 p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
10075 p_doc_type => p_doc_type,
10076 px_qa_result_tbl => l_qa_result_tbl,
10077 x_return_status => l_return_status);
10078 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10079 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10080 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10081 RAISE FND_API.G_EXC_ERROR ;
10082 END IF;
10083 ELSE --schedule_type <> SYSTEM
10084 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10085 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name, 'For schedule type NOT IN (system or null), checking due dates is not required');
10086 END IF;
10087 END IF; --end of schedule_type check
10088
10089
10090
10091 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10092 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking due dates');
10093 END IF;
10094 END IF;
10095
10096
10097
10098 END LOOP;
10099
10100
10101 IF ( p_doc_type NOT IN ('TEMPLATE', 'PA_CONTRACT', 'PA_CONTRACT_MOD') -- for template and idv without lines document type, exhibit validation is not needed
10102 AND is_cdrl_check_required = 'Y'
10103 )
10104 THEN
10105
10106
10107 OPEN del_cur FOR
10108 select *
10109 from okc_deliverables
10110 where business_document_type = p_doc_type
10111 and business_document_id = p_doc_id
10112 and business_document_version = -99
10113 and (amendment_operation is NULL OR amendment_operation <> 'DELETED')
10114 and (summary_amend_operation_code is NULL OR summary_amend_operation_code <> 'DELETED')
10115 AND del_category_code='CDRL';
10116
10117
10118
10119
10120 LOOP
10121 FETCH del_cur INTO del_rec;
10122 EXIT WHEN del_cur%NOTFOUND;
10123 check_exhibit_details(del_rec => del_rec,
10124 p_severity => 'E',
10125 px_qa_result_tbl => l_qa_result_tbl,
10126 x_return_status => l_return_status);
10127
10128
10129 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10130 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10131 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10132 RAISE FND_API.G_EXC_ERROR ;
10133 END IF;
10134 END LOOP;
10135
10136 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10137 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking Exhibit Details');
10138 END IF;
10139
10140 END IF;
10141
10142
10143 -- bug# 4118095 check the doc source
10144 l_contract_source := OKC_TERMS_UTIL_GRP.Get_Contract_Source_Code
10145 (p_document_type => p_doc_type,
10146 p_document_id => p_doc_id );
10147
10148 IF l_contract_source = 'STRUCTURED' THEN
10149
10150 --Bug Fix for 3249177
10151 --add an additional check to see if any article has variables defined for deliverables
10152 OPEN check_lookup_code_csr(l_check_var_usage);
10153 FETCH check_lookup_code_csr into l_var_usage_code_rec;
10154 IF(check_lookup_code_csr%NOTFOUND OR l_due_dates_code_rec.enabled_flag = 'N') THEN
10155 l_check_var_usage_yn := 'N';
10156 ELSE
10157 OPEN check_qa_csr(l_check_var_usage);
10158 FETCH check_qa_csr into l_var_usage_rec;
10159 IF(check_qa_csr%NOTFOUND) THEN
10160 l_check_var_usage_yn := 'Y';
10161 --since there is no row, we cannot get the severity_flag
10162 --default it to warning
10163 l_var_usage_severity := l_qa_severity_warning;
10164 ELSE
10165 IF(l_var_usage_rec.enable_qa_yn = 'N') THEN
10166 l_check_var_usage_yn := 'N';
10167 ELSE
10168 l_check_var_usage_yn := 'Y';
10169 l_var_usage_severity := l_var_usage_rec.severity_flag;
10170 END IF;
10171 END IF;
10172 CLOSE check_qa_csr;
10173 END IF;
10174 CLOSE check_lookup_code_csr;
10175
10176 IF(l_check_var_usage_yn = 'Y') THEN
10177
10178 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10179 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'start checking variable usage');
10180 END IF;
10181
10182 check_deliverables_var_usage(p_severity => l_var_usage_severity,
10183 p_bus_doc_id => p_doc_id,
10184 p_bus_doc_type => p_doc_type,
10185 px_qa_result_tbl => l_qa_result_tbl,
10186 x_return_status => l_return_status);
10187
10188 IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
10189 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10190 ELSIF (l_return_status = G_RET_STS_ERROR) THEN
10191 RAISE FND_API.G_EXC_ERROR ;
10192 END IF;
10193 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10194 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'finished checking variable usage');
10195 END IF;
10196
10197 END IF;
10198 END IF; -- l_contract_source = 'STRUCTURED' THEN
10199
10200 --mass update common attributes
10201 l_end := l_qa_result_tbl.count;
10202
10203 IF (l_end > l_start) THEN
10204 --We found some error or warning
10205 FOR i IN (l_start+1)..l_end
10206 LOOP
10207 l_qa_result_tbl(i).document_type := p_doc_type;
10208 l_qa_result_tbl(i).document_id := p_doc_id;
10209 l_qa_result_tbl(i).error_record_type := G_DLV_QA_TYPE;
10210
10211 l_qa_result_tbl(i).creation_date := sysdate;
10212
10213 --if the error is due to check_deliverable_var_usage
10214 --the section_name should be the article's section name
10215 --otherwise it should be 'DELIVERABLE'
10216 IF l_qa_result_tbl(i).article_id IS NULL THEN
10217 l_qa_result_tbl(i).section_name := G_DLV_QA_TYPE;
10218 END IF;
10219 --- check if any errors are there.
10220 IF l_qa_result_tbl(i).error_severity = G_QA_STS_ERROR THEN
10221 l_error_found := 'Y';
10222 END IF;
10223 --- check if any errors are there.
10224 IF l_qa_result_tbl(i).error_severity = G_QA_STS_WARNING THEN
10225 l_warning_found := 'Y';
10226 END IF;
10227
10228 END LOOP;
10229
10230 --now get the qa_return_status
10231 --if there is a record of type "error" found, return "E"
10232 --otherwise if there is a record of type "warning" found, return "W"
10233 --else return "S"
10234 l_qa_return_status := G_QA_STS_SUCCESS;
10235 IF l_error_found = 'Y' THEN
10236 l_qa_return_status := G_QA_STS_ERROR;
10237 ELSIF l_warning_found ='Y' THEN
10238 l_qa_return_status := G_QA_STS_WARNING;
10239 END IF;
10240
10241 END IF;
10242
10243 IF del_cur%ISOPEN THEN
10244 CLOSE del_cur;
10245 END IF;
10246
10247
10248
10249 p_qa_result_tbl := l_qa_result_tbl;
10250 x_return_status := l_return_status;
10251 x_qa_return_status := l_qa_return_status;
10252
10253
10254 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10255 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa');
10256 END IF;
10257
10258 EXCEPTION
10259 WHEN FND_API.G_EXC_ERROR THEN
10260
10261 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10262 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with G_EXC_ERROR');
10263 END IF;
10264 --close cursors
10265 IF (del_cur%ISOPEN) THEN
10266 CLOSE del_cur ;
10267 END IF;
10268
10269 IF (check_qa_csr%ISOPEN) THEN
10270 CLOSE check_qa_csr;
10271 END IF;
10272
10273 IF (check_lookup_code_csr%ISOPEN) THEN
10274 CLOSE check_lookup_code_csr;
10275 END IF;
10276
10277 x_return_status := G_RET_STS_ERROR;
10278 FND_MSG_PUB.Count_And_Get(
10279 p_count => x_msg_count,
10280 p_data => x_msg_data
10281 );
10282
10283 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10284
10285 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10286 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with G_EXC_UNEXPECTED_ERROR');
10287 END IF;
10288 --close cursors
10289 IF (del_cur%ISOPEN) THEN
10290 CLOSE del_cur ;
10291 END IF;
10292
10293 IF (check_qa_csr%ISOPEN) THEN
10294 CLOSE check_qa_csr;
10295 END IF;
10296
10297 IF (check_lookup_code_csr%ISOPEN) THEN
10298 CLOSE check_lookup_code_csr;
10299 END IF;
10300
10301
10302 x_return_status := G_RET_STS_UNEXP_ERROR;
10303 FND_MSG_PUB.Count_And_Get(
10304 p_count => x_msg_count,
10305 p_data => x_msg_data
10306 );
10307
10308 WHEN OTHERS THEN
10309 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10310 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa with OTHERS EXCEPTION');
10311 END IF;
10312 --close cursors
10313 IF (del_cur%ISOPEN) THEN
10314 CLOSE del_cur ;
10315 END IF;
10316
10317 IF (check_qa_csr%ISOPEN) THEN
10318 CLOSE check_qa_csr;
10319 END IF;
10320
10321 IF (check_lookup_code_csr%ISOPEN) THEN
10322 CLOSE check_lookup_code_csr;
10323 END IF;
10324
10325 x_return_status := G_RET_STS_UNEXP_ERROR;
10326 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10327 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10328 END IF;
10329 FND_MSG_PUB.Count_And_Get(
10330 p_count => x_msg_count,
10331 p_data => x_msg_data
10332 );
10333
10334 END validate_deliverable_for_qa;
10335
10336
10337
10338
10339
10340 PROCEDURE delete_del_status_hist_attach(
10341 p_api_version IN NUMBER,
10342 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
10343 p_deliverable_id IN NUMBER,
10344 p_bus_doc_id IN NUMBER,
10345 p_bus_doc_version IN NUMBER,
10346 p_bus_doc_type IN VARCHAR2,
10347 x_msg_data OUT NOCOPY VARCHAR2,
10348 x_msg_count OUT NOCOPY NUMBER,
10349 x_return_status OUT NOCOPY VARCHAR2)
10350 IS
10351
10352 l_api_version CONSTANT NUMBER := 1;
10353 l_api_name CONSTANT VARCHAR2(30) := 'validate_deliverable';
10354 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
10355
10356
10357
10358 BEGIN
10359
10360 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10361 okc_debug.Set_Indentation('OKC_DELIVERABLE_PROCESS_PVT');
10362 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'21300: Entered validate_deliverable_for_qa');
10363 END IF;
10364
10365 l_return_status := OKC_API.START_ACTIVITY(l_api_name,
10366 p_init_msg_list,
10367 '_PVT',
10368 x_return_status);
10369
10370
10371 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
10372 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
10373 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
10374 RAISE OKC_API.G_EXCEPTION_ERROR;
10375 END IF;
10376
10377
10378
10379 -- delete deliverables status history
10380 DELETE FROM okc_del_status_history
10381 WHERE deliverable_id = p_deliverable_id;
10382 -- delete attachments if any
10383 delete_attachments (
10384 p_entity_name => G_ENTITY_NAME
10385 ,p_pk1_value => p_deliverable_id
10386 ,x_result => l_return_status);
10387
10388 x_return_status := l_return_status;
10389
10390 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10391 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach');
10392 END IF;
10393
10394 EXCEPTION
10395 WHEN FND_API.G_EXC_ERROR THEN
10396 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10397 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with G_EXC_ERROR');
10398 END IF;
10399
10400 x_return_status := G_RET_STS_ERROR;
10401 FND_MSG_PUB.Count_And_Get(
10402 p_count => x_msg_count,
10403 p_data => x_msg_data
10404 );
10405
10406 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10407 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10408 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with G_EXC_UNEXPECTED_ERROR');
10409 END IF;
10410
10411 x_return_status := G_RET_STS_UNEXP_ERROR;
10412 FND_MSG_PUB.Count_And_Get(
10413 p_count => x_msg_count,
10414 p_data => x_msg_data
10415 );
10416
10417 WHEN OTHERS THEN
10418 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10419 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_status_hist_attach with OTHERS EXCEPTION');
10420 END IF;
10421
10422 x_return_status := G_RET_STS_UNEXP_ERROR;
10423 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10424 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10425 END IF;
10426 FND_MSG_PUB.Count_And_Get(
10427 p_count => x_msg_count,
10428 p_data => x_msg_data
10429 );
10430 END delete_del_status_hist_attach;
10431
10432 FUNCTION get_ui_bus_doc_event_text(p_event_name IN VARCHAR2,
10433 p_before_after IN VARCHAR2) RETURN VARCHAR2 IS
10434 BEGIN
10435 fnd_message.clear;
10436 if p_before_after = 'B' then
10437 fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_BEFORE_BUS_DOC_EVENT');
10438 else
10439 fnd_message.set_name(APPLICATION=>G_OKC,NAME=>'OKC_DEL_AFTER_BUS_DOC_EVENT');
10440 end if;
10441 fnd_message.set_token(TOKEN => 'EVENT',VALUE => p_event_name);
10442 return fnd_message.get;
10443 END get_ui_bus_doc_event_text;
10444
10445 /*
10446 Add as part of fix for bug#3458149
10447 Checks Deliverable_Status_History table and returns 'Y' if the Status of a Deliverable was NOT changed by
10448 user since the Deliverable was first resolved, else returns 'N'
10449 */
10450 Function delStatusUnchanged(p_del_ID IN OKC_DELIVERABLES.deliverable_id%TYPE) RETURN VARCHAR2 IS
10451 l_open_count NUMBER ;
10452 l_inactive_count NUMBER ;
10453 l_others_count NUMBER ;
10454
10455 CURSOR hist_cur (delid NUMBER) IS
10456 SELECT deliverable_status
10457 FROM okc_del_status_history
10458 where deliverable_id = delid;
10459
10460 hist_rec hist_cur%ROWTYPE;
10461 l_api_name CONSTANT VARCHAR2(30) :='delStatusUnchanged';
10462
10463 Begin
10464
10465
10466 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10467 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside delStatusUnchanged.');
10468 END IF;
10469
10470 -- bug#4137831 initialize variables outside the loop
10471 l_open_count := 0;
10472 l_inactive_count := 0;
10473 l_others_count :=0;
10474 FOR hist_rec IN hist_cur(p_del_id) LOOP
10475
10476 IF hist_rec.deliverable_status = 'OPEN' THEN
10477 l_open_count := l_open_count+1;
10478 ELSIF hist_rec.deliverable_status = 'INACTIVE' THEN
10479 l_inactive_count := l_inactive_count+1;
10480 ELSIF (hist_rec.deliverable_status <> 'OPEN' OR
10481 hist_rec.deliverable_status <> 'INACTIVE') THEN
10482 l_others_count := l_others_count+1;
10483 END IF;
10484 END LOOP;
10485
10486 If hist_cur%ISOPEN then
10487 CLOSE hist_cur;
10488 End If;
10489 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10490 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Open status count: '||to_char(l_open_count));
10491 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inactive status count: '||to_char(l_inactive_count));
10492 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Others status count: '||to_char(l_others_count));
10493 END IF;
10494
10495 IF (l_open_count < 1 OR l_open_count = 1 ) AND
10496 (l_inactive_count < 1 OR l_inactive_count = 1) AND
10497 (l_others_count = 0) THEN
10498 RETURN 'Y';
10499 Else
10500 RETURN 'N';
10501 End If;
10502
10503 EXCEPTION
10504 WHEN OTHERS THEN
10505 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10506 FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,'delStatusUnchanged','102:Leaving delStatusUnchanged with Exception');
10507 END IF;
10508 If hist_cur%ISOPEN then
10509 CLOSE hist_cur;
10510 End If;
10511 RETURN 'N';
10512
10513 End delStatusUnchanged;
10514
10515
10516
10517 /*** This API deletes a given set of deliverables, attachments
10518 and status change history for a busdoc. Used to delete only the instances
10519 leaving the definition as it is. Called from update_deliverables group API ***/
10520 PROCEDURE delete_del_instances(
10521 p_api_version IN NUMBER,
10522 p_init_msg_list IN VARCHAR2,
10523 p_doc_id IN NUMBER,
10524 p_doc_type IN VARCHAR2,
10525 p_doc_version IN NUMBER DEFAULT NULL,
10526 p_Conditional_Delete_Flag IN VARCHAR2 DEFAULT 'N',
10527 p_delid_tab IN OKC_DELIVERABLE_PROCESS_PVT.delIdTabType,
10528 x_msg_data OUT NOCOPY VARCHAR2,
10529 x_msg_count OUT NOCOPY NUMBER,
10530 x_return_status OUT NOCOPY VARCHAR2)
10531 IS
10532 l_del_id NUMBER;
10533 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
10534 l_result VARCHAR2(1);
10535 l_api_name CONSTANT VARCHAR2(30) :='delete_del_instances';
10536
10537 l_deleteInstances VARCHAR2(1) := 'Y';
10538
10539 BEGIN
10540
10541 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10542 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
10543 END IF;
10544 FOR i IN p_delid_tab.FIRST..p_delid_tab.LAST LOOP
10545 l_del_id := p_delid_tab(i);
10546
10547 -- fix for bug#3458149 do not delete history if deliverables
10548 -- changed status from OPEN status
10549 IF (p_Conditional_Delete_Flag = 'Y') then
10550 If (delStatusUnchanged(p_Del_id => l_del_id) = 'Y') then
10551 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10552 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delStatusUnchanged is Y');
10553 END IF;
10554 l_deleteInstances := 'Y';
10555 Else
10556 l_deleteInstances := 'N';
10557 End If;
10558 Else
10559 l_deleteInstances := 'Y';
10560 End If;
10561
10562
10563 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10564 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_deleteInstances:'||l_deleteInstances);
10565 END IF;
10566 IF (l_deleteInstances = 'Y') then
10567 -- delete deliverables status history
10568 DELETE FROM okc_del_status_history
10569 WHERE deliverable_id = l_del_id;
10570 -- delete attachments if any
10571 delete_attachments (
10572 p_entity_name => G_ENTITY_NAME
10573 ,p_pk1_value => l_del_id
10574 ,x_result => l_result);
10575 IF l_result = 'S' THEN
10576 -- delete deliverables
10577 DELETE FROM okc_deliverables
10578 WHERE deliverable_id = l_del_id;
10579 DELETE FROM OKC_DELIVERABLES_EXT_B
10580 WHERE deliverable_id = l_del_id;
10581 DELETE FROM OKC_DELIVERABLES_EXT_TL
10582 WHERE deliverable_id = l_del_id;
10583 END IF;
10584 x_return_status := l_return_status;
10585 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10586 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: deleting status history for deliverable id:'||to_char(l_del_id));
10587 END IF;
10588 END IF;
10589
10590
10591 END LOOP;
10592
10593 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10594 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_instances');
10595 END IF;
10596
10597 EXCEPTION
10598 WHEN OTHERS THEN
10599 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10600 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'102:Leaving delete_del_instances with Exception');
10601 END IF;
10602 x_return_status := G_RET_STS_UNEXP_ERROR;
10603 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10604 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10605 END IF;
10606 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
10607 p_data => x_msg_data);
10608 END delete_del_instances;
10609
10610
10611 /**Invoked From: OKC_TERMS_UTIL_GRP.get_document_deviations
10612 1. This function returns type of deliverables existing on a Business Document
10613 for a given version. Invoked by OKC_TERMS_UTIL_GRP.get_document_deviations.
10614 2. Select all deliverables for the Business Document. If deliverables exist then
10615 a. Check each deliverable type
10616 i. If only contractual deliverables exist then return CONTRACTUAL
10617 ii. If only internal deliverables exist then return INTERNAL
10618 iii.If both contractual and internal deliverables exist then return
10619 CONTRACTUAL_AND_INTERNAL
10620 3. If no deliverables exist then return NONE**/
10621
10622 /*** added new signature bug#3192512**/
10623
10624 FUNCTION deliverables_exist(
10625 p_api_version IN NUMBER,
10626 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
10627 x_return_status OUT NOCOPY VARCHAR2,
10628 x_msg_data OUT NOCOPY VARCHAR2,
10629 x_msg_count OUT NOCOPY NUMBER,
10630 p_doctype IN VARCHAR2,
10631 p_docid IN NUMBER
10632 ) RETURN VARCHAR2
10633 IS
10634 -- updated cursor for bug#4069955
10635 CURSOR del_cur IS
10636 SELECT
10637 del.deliverable_type
10638 ,delType.internal_flag
10639 FROM
10640 okc_deliverables del
10641 ,okc_deliverable_types_b delType
10642 WHERE del.business_document_id = p_docid
10643 AND del.business_document_type = p_doctype
10644 AND del.business_document_version = -99
10645 AND NVL(del.amendment_operation,'NONE') <> 'DELETED'
10646 AND NVL(del.summary_amend_operation_code,'NONE') <> 'DELETED'
10647 AND delType.deliverable_type_code = del.deliverable_type;
10648
10649 l_del_rec del_cur%ROWTYPE;
10650 l_api_name CONSTANT VARCHAR2(30) := 'deliverables_exist';
10651 l_exists VARCHAR2(60):= 'NONE';
10652 l_contractual okc_deliverables.deliverable_type%TYPE;
10653 l_internal okc_deliverables.deliverable_type%TYPE;
10654 l_sourcing okc_deliverables.deliverable_type%TYPE;
10655
10656 BEGIN
10657
10658 -- Initialize API return status to success
10659 x_return_status := OKC_API.G_RET_STS_SUCCESS;
10660
10661 FOR del_rec IN del_cur LOOP
10662 If del_rec.internal_flag = 'Y' then
10663 l_internal := del_rec.deliverable_type;
10664 Else
10665 IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
10666 l_contractual := del_rec.deliverable_type;
10667 ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
10668 l_sourcing := del_rec.deliverable_type;
10669 END IF;
10670 End If;
10671 END LOOP;
10672
10673 IF l_contractual is not null THEN
10674 l_exists := 'CONTRACTUAL';
10675 IF l_internal is not null THEN
10676 l_exists := 'CONTRACTUAL_AND_INTERNAL';
10677 IF l_sourcing is not null THEN
10678 l_exists:= 'ALL';
10679 END IF;
10680 ELSE
10681 IF l_sourcing is not null THEN
10682 l_exists:= 'CONTRACTUAL_AND_SOURCING';
10683 END IF;
10684
10685 END IF;
10686 ELSE
10687 IF l_internal is not null THEN
10688 l_exists := 'INTERNAL';
10689 IF l_sourcing is not null THEN
10690 l_exists:= 'SOURCING_AND_INTERNAL';
10691 END IF;
10692 ELSE
10693 IF l_sourcing is not null THEN
10694 l_exists:= 'SOURCING';
10695 ELSE
10696 l_exists := 'NONE';
10697 END IF;
10698 END IF;
10699 END IF;
10700
10701 RETURN(l_exists);
10702 EXCEPTION
10703 WHEN OTHERS THEN
10704 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10705 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_exist because of EXCEPTION: '||sqlerrm);
10706 END IF;
10707
10708 IF del_cur%ISOPEN THEN
10709 CLOSE del_cur;
10710 END IF;
10711 x_return_status := G_RET_STS_UNEXP_ERROR ;
10712 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
10713 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
10714 END IF;
10715 FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
10716 , p_count => x_msg_count
10717 , p_data => x_msg_data );
10718
10719 RETURN null;
10720 END; -- deliverables_exist
10721
10722
10723
10724
10725 PROCEDURE delete_deliverable (
10726 p_api_version IN NUMBER,
10727 p_init_msg_list IN VARCHAR2,
10728 p_del_id IN NUMBER,
10729 x_msg_data OUT NOCOPY VARCHAR2,
10730 x_msg_count OUT NOCOPY NUMBER,
10731 x_return_status OUT NOCOPY VARCHAR2)
10732 IS
10733
10734 l_result VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
10735 l_api_name VARCHAR2(30) :='delete_deliverable';
10736
10737 BEGIN
10738
10739 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10740 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable'||to_char(p_del_id));
10741 END IF;
10742 -- delete deliverables status history
10743 DELETE FROM okc_del_status_history
10744 WHERE deliverable_id = p_del_id;
10745 -- delete attachments if any
10746 delete_attachments (
10747 p_entity_name => G_ENTITY_NAME
10748 ,p_pk1_value => p_del_id
10749 ,x_result => l_result);
10750 IF l_result = 'S' THEN
10751 -- delete deliverables
10752 DELETE FROM okc_deliverables
10753 WHERE deliverable_id = p_del_id;
10754 DELETE FROM OKC_DELIVERABLES_EXT_B
10755 WHERE deliverable_id = p_del_id;
10756 DELETE FROM OKC_DELIVERABLES_EXT_TL
10757 WHERE deliverable_id = p_del_id;
10758 END IF;
10759 x_return_status := l_result;
10760 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10761 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable');
10762 END IF;
10763
10764 EXCEPTION
10765 WHEN FND_API.G_EXC_ERROR THEN
10766 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10767 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_ERROR');
10768 END IF;
10769 x_return_status := G_RET_STS_ERROR;
10770 FND_MSG_PUB.Count_And_Get(
10771 p_count => x_msg_count,
10772 p_data => x_msg_data
10773 );
10774
10775 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10776 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10777 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_UNEXPECTED_ERROR');
10778 END IF;
10779 x_return_status := G_RET_STS_UNEXP_ERROR;
10780 FND_MSG_PUB.Count_And_Get(
10781 p_count => x_msg_count,
10782 p_data => x_msg_data
10783 );
10784
10785 WHEN OTHERS THEN
10786 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10787 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_deliverable with G_EXC_UNEXPECTED_ERROR');
10788 END IF;
10789 x_return_status := G_RET_STS_UNEXP_ERROR;
10790 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10791 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10792 END IF;
10793 FND_MSG_PUB.Count_And_Get(
10794 p_count => x_msg_count,
10795 p_data => x_msg_data
10796 );
10797
10798 END delete_deliverable;
10799
10800 /*** This procedure will delete all deliverables that have been
10801 created by applying a particular template on a busdoc.
10802 It selects all deliverables which have original_deliverable_id
10803 belonging to the p_template_id and deletes them from the busdoc.
10804 Parameter Details:
10805 p_doc_id : Business document Id
10806 p_doc_type : Business document type
10807 ***/
10808 PROCEDURE delete_template_deliverables (
10809 p_api_version IN NUMBER,
10810 p_init_msg_list IN VARCHAR2,
10811 p_doc_id IN NUMBER,
10812 p_doc_type IN VARCHAR2,
10813 x_msg_data OUT NOCOPY VARCHAR2,
10814 x_msg_count OUT NOCOPY NUMBER,
10815 x_return_status OUT NOCOPY VARCHAR2)
10816 IS
10817
10818 -- bug#4075168 changed the select "and original_deliverable_id IN ( select original_deliverable_id"
10819 CURSOR del_cur IS
10820 select deliverable_id
10821 from okc_deliverables
10822 where business_document_id = p_doc_id
10823 and business_document_type = p_doc_type
10824 and business_document_version = -99
10825 and original_deliverable_id IN (
10826 select original_deliverable_id
10827 from okc_deliverables
10828 where business_document_type = 'TEMPLATE');
10829
10830 CURSOR exb_cur IS
10831 select DISTINCT exhibit_code
10832 from okc_deliverables
10833 where business_document_id = p_doc_id
10834 and business_document_type = p_doc_type
10835 and business_document_version = -99
10836 and original_deliverable_id IN (
10837 select original_deliverable_id
10838 from okc_deliverables
10839 where business_document_type = 'TEMPLATE')
10840 AND DEL_CATEGORY_CODE = 'CDRL'
10841 AND exhibit_code IS NOT NULL;
10842
10843
10844 TYPE delIdTabType IS TABLE OF NUMBER;
10845 delIdTab delIdTabType;
10846 l_result VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
10847 l_api_name CONSTANT VARCHAR2(30) :='delete_template_deliverables';
10848
10849 exhibit_code_tbl okc_cdrl_pvt.exhibit_tbl_type;
10850 BEGIN
10851 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10852 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
10853 END IF;
10854
10855 -- Get the exhibit details first before we delete deliverables.
10856 OPEN exb_cur;
10857 FETCH exb_cur BULK COLLECT INTO exhibit_code_tbl;
10858 CLOSE exb_cur;
10859
10860 OPEN del_cur;
10861 FETCH del_cur BULK COLLECT INTO delIdTab;
10862 -- bug#3188413 check count before loop
10863 IF delIdTab.COUNT > 0 THEN
10864 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
10865 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10866 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delId is:'||to_char(delIdTab(i)));
10867 END IF;
10868 -- delete attachments if any
10869 delete_attachments (
10870 p_entity_name => G_ENTITY_NAME
10871 ,p_pk1_value => delIdTab(i)
10872 ,x_result => l_result);
10873
10874 IF l_result <> 'S' THEN
10875 EXIT;
10876 END IF;
10877 END LOOP;
10878 IF l_result = 'S' THEN
10879 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
10880 DELETE FROM okc_deliverables
10881 WHERE deliverable_id = delIdTab(i);
10882 DELETE FROM OKC_DELIVERABLES_EXT_B
10883 WHERE deliverable_id = delIdTab(i);
10884 DELETE FROM OKC_DELIVERABLES_EXT_TL
10885 WHERE deliverable_id = delIdTab(i);
10886 END LOOP;
10887 END IF;
10888 END IF;-- delIdTab.COUNT
10889 IF del_cur %ISOPEN THEN
10890 CLOSE del_cur ;
10891 END IF;
10892
10893
10894 -- Call the CDRL API to delete exhibits.
10895 IF exhibit_code_tbl.Count > 0 THEN
10896 FOR i IN 1..exhibit_code_tbl.Count LOOP
10897 OKC_CDRL_PVT.delete_exhibit_for_cdrl (
10898 p_api_version => 1.0,
10899 p_init_msg_list => FND_API.G_FALSE,
10900 p_commit => FND_API.G_FALSE,
10901 p_doc_class => NULL, -- Value will be Derived in the API
10902 p_doc_type => p_doc_type,
10903 p_doc_id => p_doc_id,
10904 p_doc_version => -99,
10905 p_mode => NULL,
10906 p_exhibit_code => exhibit_code_tbl(i),
10907 x_msg_data => x_msg_data,
10908 x_msg_count => x_msg_count,
10909 x_return_status => x_return_status,
10910 p_validate_before_delete => 'Y'
10911 ) ;
10912 --------------------------------------------
10913 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
10914 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
10915 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
10916 RAISE FND_API.G_EXC_ERROR ;
10917 END IF;
10918 --------------------------------------------
10919 END LOOP;
10920 END IF;
10921
10922
10923 x_return_status := x_return_status;
10924 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10925 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables');
10926 END IF;
10927
10928 EXCEPTION
10929 WHEN OTHERS THEN
10930 IF del_cur %ISOPEN THEN
10931 CLOSE del_cur ;
10932 END IF;
10933 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
10934 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_template_deliverables with G_EXC_UNEXPECTED_ERROR');
10935 END IF;
10936 x_return_status := G_RET_STS_UNEXP_ERROR;
10937 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10938 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
10939 END IF;
10940 FND_MSG_PUB.Count_And_Get(
10941 p_count => x_msg_count,
10942 p_data => x_msg_data
10943 );
10944
10945 END delete_template_deliverables;
10946
10947
10948
10949 /**Invoked From: OKC_TERMS_UTIL_GRP.is_deliverable_amended
10950 1. This function returns type of deliverables amended on a Business Document
10951 2. Select all deliverables definitions (-99 version) for the Business Document.
10952 If deliverables exist then
10953 a. Check each deliverable type
10954 i. If only contractual deliverables amended then return CONTRACTUAL
10955 ii. If only internal deliverables amended then return INTERNAL
10956 iii.If both contractual and internal deliverables amended then return
10957 CONTRACTUAL_AND_INTERNAL
10958 iv.If both contractual and sourcing deliverables amended then return
10959 CONTRACTUAL_AND_SOURCING
10960 v.If both sourcing and internal deliverables amended then return
10961 SOURCING_AND_INTERNAL
10962 vi. If sourcing deliverables are amended then return SOURCING
10963 vii. If all deliverables are amended then return ALL
10964 3. If no deliverables amended then return NONE
10965 4. If error return null**/
10966
10967 /*** added new signature bug#3192512**/
10968
10969 FUNCTION deliverables_amended(
10970 p_api_version IN NUMBER,
10971 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
10972
10973 x_return_status OUT NOCOPY VARCHAR2,
10974 x_msg_data OUT NOCOPY VARCHAR2,
10975 x_msg_count OUT NOCOPY NUMBER,
10976
10977 p_doctype IN VARCHAR2,
10978 p_docid IN NUMBER
10979 )
10980 RETURN VARCHAR2 IS
10981 --do not consider internal deliverables inamendments.
10982 -- updated the cursor to filter internal deliverables
10983 -- updated cursor for bug#4069955
10984 CURSOR del_cur IS
10985 SELECT
10986 del.amendment_operation
10987 ,del.deliverable_type
10988 ,delType.internal_flag
10989 FROM
10990 okc_deliverables del
10991 ,okc_deliverable_types_b delType
10992 WHERE del.business_document_id = p_docid
10993 AND del.business_document_type = p_doctype
10994 AND del.business_document_version = -99
10995 AND del.summary_amend_operation_code is not null
10996 --AND deliverable_type not like '%INTERNAL%'; --Commented as part of changes for new table okc_deliverable_types_b
10997 AND del.deliverable_type = delType.deliverable_type_code
10998 AND delType.internal_flag = 'N';
10999
11000 l_del_rec del_cur%ROWTYPE;
11001 l_amended VARCHAR2(30):= 'NONE';
11002 l_contractual okc_deliverables.deliverable_type%TYPE;
11003 l_internal okc_deliverables.deliverable_type%TYPE;
11004 l_sourcing okc_deliverables.deliverable_type%TYPE;
11005 l_api_name CONSTANT VARCHAR2(30) := 'deliverables_amended';
11006
11007 BEGIN
11008
11009 -- Initialize API return status to success
11010 x_return_status := OKC_API.G_RET_STS_SUCCESS;
11011
11012
11013 FOR del_rec IN del_cur LOOP
11014 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11015 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: inside OKC_DELIVERABLE_PROCESS_PVT.deliverables_amended :'||del_rec.deliverable_type);
11016 END IF;
11017
11018 --Repository change to look at internal_flag in okc_deliverable_types_b
11019 If (del_rec.internal_flag = 'Y') then
11020 l_internal := del_rec.deliverable_type;
11021 Else
11022 IF UPPER(del_rec.deliverable_type) = 'CONTRACTUAL' THEN
11023 l_contractual := del_rec.deliverable_type;
11024 ELSIF UPPER(del_rec.deliverable_type) = 'SOURCING' THEN
11025 l_sourcing := del_rec.deliverable_type;
11026 END IF;
11027 END IF;
11028
11029 END LOOP;
11030
11031 IF l_contractual is not null THEN
11032 l_amended := 'CONTRACTUAL';
11033 IF l_internal is not null THEN
11034 l_amended:= 'CONTRACTUAL_AND_INTERNAL';
11035 IF l_sourcing is not null THEN
11036 l_amended:= 'ALL';
11037 END IF;
11038 ELSIF l_internal is null THEN
11039 IF l_sourcing is not null THEN
11040 l_amended:= 'SOURCING_AND_CONTRACTUAL';
11041 END IF;
11042 END IF;
11043 ELSE
11044 IF l_internal is not null THEN
11045 l_amended:= 'INTERNAL';
11046 IF l_sourcing is not null THEN
11047 l_amended:= 'SOURCING_AND_INTERNAL';
11048 END IF;
11049 ELSE
11050 IF l_sourcing is not null THEN
11051 l_amended:= 'SOURCING';
11052 ELSE
11053 l_amended:= 'NONE';
11054 END IF;
11055 END IF;
11056 END IF;
11057
11058
11059 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11060 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: l_amended is :'||l_amended);
11061 END IF;
11062 RETURN(l_amended);
11063
11064 EXCEPTION
11065 WHEN OTHERS THEN
11066 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11067 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving deliverables_amended because of EXCEPTION: '||sqlerrm);
11068 END IF;
11069
11070 IF del_cur%ISOPEN THEN
11071 CLOSE del_cur;
11072 END IF;
11073
11074 x_return_status := G_RET_STS_UNEXP_ERROR ;
11075
11076 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
11077 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
11078 END IF;
11079 FND_MSG_PUB.Count_And_Get(p_encoded=>'F'
11080 , p_count => x_msg_count
11081 , p_data => x_msg_data );
11082
11083 RETURN null;
11084
11085 END; -- deliverables_amended
11086
11087 -- This function returns the message text for the print due date message name
11088 -- bug#3272824 resolves tranlation issues with due date messages.
11089 FUNCTION getDueDateMsgText(
11090 p_relative_st_date_event_id NUMBER
11091 ,p_relative_end_date_event_id NUMBER
11092 ,p_relative_st_date_duration NUMBER
11093 ,p_relative_end_date_duration NUMBER
11094 ,p_repeating_day_of_week VARCHAR2
11095 ,p_repeating_day_of_month VARCHAR2
11096 ,p_repeating_duration NUMBER
11097 ,p_print_due_date_msg_name VARCHAR2
11098 ,p_fixed_start_date DATE
11099 ,p_fixed_end_date DATE
11100 )
11101 RETURN VARCHAR2 IS
11102
11103 l_msg varchar2(250);
11104 l_st_event VARCHAR2(80);
11105 l_end_event VARCHAR2(80);
11106 l_day_of_week VARCHAR2(80);
11107 l_day_of_month VARCHAR2(80);
11108 l_repeating_duration number;
11109 l_api_name CONSTANT VARCHAR2(30) := 'getDueDateMsgText';
11110
11111
11112
11113 cursor event_cur(x number) is
11114 select TL.meaning
11115 from okc_bus_doc_events_tl TL
11116 where TL.bus_doc_event_id = X
11117 and TL.LANGUAGE = userenv('LANG');
11118 event_rec event_cur%ROWTYPE;
11119
11120
11121
11122 begin
11123
11124 -- get event name
11125 IF p_relative_st_date_event_id is not null THEN
11126 OPEN event_cur(p_relative_st_date_event_id);
11127 FETCH event_cur INTO l_st_event;
11128 CLOSE event_cur;
11129 END IF;
11130 IF p_relative_end_date_event_id is not null THEN
11131 OPEN event_cur(p_relative_end_date_event_id);
11132 FETCH event_cur INTO l_end_event;
11133 CLOSE event_cur;
11134 END IF;
11135
11136 -- get lookup meanings
11137 IF p_repeating_day_of_week is not null THEN
11138 select meaning into l_day_of_week
11139 from fnd_lookups
11140 where lookup_type = 'DAY_OF_WEEK'
11141 and lookup_code = p_repeating_day_of_week;
11142 END IF;
11143
11144 IF p_repeating_day_of_month is not null THEN
11145 select meaning into l_day_of_month
11146 from fnd_lookups
11147 where lookup_type = 'OKC_DAY_OF_MONTH'
11148 and lookup_code = p_repeating_day_of_month;
11149 END IF;
11150
11151 -- If duration is less than or equal to 1 then don't pass the token value
11152 if p_repeating_duration = 1 THEN
11153 l_repeating_duration := null;
11154 elsif p_repeating_duration = 0 THEN
11155 l_repeating_duration := null;
11156 else
11157 l_repeating_duration := p_repeating_duration;
11158 end if;
11159
11160 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11161 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message name is : '||p_print_due_date_msg_name);
11162 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_WEEK is : '||p_repeating_day_of_week);
11163 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'DAY_OF_MONTH is : '||p_repeating_day_of_month);
11164 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_NUM is : '||p_relative_st_date_duration);
11165 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_NUM is : '||p_relative_end_date_duration);
11166 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_EVENT is : '||l_st_event);
11167 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'END_EVENT is : '||l_end_event);
11168 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FREQ_NUM is : '|| l_repeating_duration);
11169 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'START_DATE_FIXED is : '|| p_fixed_start_date);
11170 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'FIXED_END_DATE is : '|| p_fixed_end_date);
11171 END IF;
11172 -- bug#3465662 call this API if print due date msg name is not null
11173 IF p_print_due_date_msg_name IS NOT NULL THEN
11174 l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
11175 p_app_name => 'OKC'
11176 ,p_msg_name => p_print_due_date_msg_name
11177 ,p_token1 => 'DAY_OF_WEEK'
11178 ,p_token1_value => l_day_of_week
11179 ,p_token2 => 'DAY_OF_MONTH'
11180 ,p_token2_value => l_day_of_month
11181 ,p_token3 => 'START_NUM'
11182 ,p_token3_value => p_relative_st_date_duration
11183 ,p_token4 => 'END_NUM'
11184 ,p_token4_value => p_relative_end_date_duration
11185 ,p_token5 => 'START_EVENT'
11186 ,p_token5_value => l_st_event
11187 ,p_token6 => 'END_EVENT'
11188 ,p_token6_value => l_end_event
11189 ,p_token7 => 'FREQ_NUM'
11190 ,p_token7_value => l_repeating_duration
11191 ,p_token8 => 'START_DATE_FIXED'
11192 ,p_token8_value => p_fixed_start_date
11193 ,p_token9 => 'FIXED_END_DATE'
11194 ,p_token9_value => p_fixed_end_date);
11195
11196 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11197 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'message is : '|| l_msg);
11198 END IF;
11199
11200 END IF;
11201 return(l_msg);
11202
11203 EXCEPTION
11204
11205 WHEN OTHERS THEN
11206
11207 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11208 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'4300: Leaving getDueDateMsgText with EXCEPTION: '||sqlerrm);
11209 END IF;
11210
11211 IF event_cur%ISOPEN THEN
11212 CLOSE event_cur;
11213 END IF;
11214
11215 RETURN ' ';
11216 end getDueDateMsgText;
11217
11218 /***
11219 07-APR-2004 pnayani -- bug#3524864 added copy_response_deliverables API
11220 This API is invoked from OKC_TERMS_COPY_GRP.COPY_RESPONSE_DOC.
11221 Initially coded to support proxy bidding functionality in Sourcing.
11222 Copies deliverables from source response doc to target response documents (bid to bid)
11223 The procedure will query deliverables from source response
11224 document.Copies all deliverables and attachments as is on to a new response document.
11225 Parameter Details:
11226 p_source_doc_id : Source document Id
11227 p_source_doc_type : Source document type
11228 p_target_doc_id : Target document Id
11229 p_target_doc_type : Target document Type
11230 p_target_doc_number : Target document Number
11231 ***/
11232
11233 PROCEDURE copy_response_deliverables (
11234 p_api_version IN NUMBER,
11235 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
11236 p_source_doc_id IN NUMBER,
11237 p_source_doc_type IN VARCHAR2,
11238 p_target_doc_id IN NUMBER,
11239 p_target_doc_type IN VARCHAR2,
11240 p_target_doc_number IN VARCHAR2,
11241 x_msg_data OUT NOCOPY VARCHAR2,
11242 x_msg_count OUT NOCOPY NUMBER,
11243 x_return_status OUT NOCOPY VARCHAR2)
11244 IS
11245 CURSOR del_cur IS
11246 SELECT *
11247 FROM OKC_DELIVERABLES
11248 WHERE business_document_id = p_source_doc_id
11249 AND business_document_type = p_source_doc_type
11250 AND recurring_del_parent_id is null;
11251 del_rec del_cur%ROWTYPE;
11252
11253 CURSOR del_ins_cur (X number) IS
11254 SELECT *
11255 FROM okc_deliverables
11256 WHERE business_document_id = p_source_doc_id
11257 AND business_document_type = p_source_doc_type
11258 AND recurring_del_parent_id = X;
11259 del_ins_rec del_ins_cur%ROWTYPE;
11260
11261 delRecTab delRecTabType;
11262 delNewTab delRecTabType;
11263 delInsTab delRecTabType;
11264 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
11265 TYPE delIdTabType IS TABLE OF delIdRecType;
11266
11267 CURSOR delStsHist(Y NUMBER) IS
11268 SELECT *
11269 FROM okc_del_status_history
11270 WHERE deliverable_id = Y;
11271 delStsHist_rec delStsHist%ROWTYPE;
11272 delHistTab delHistTabType;
11273
11274 delIdTab delIdTabType;
11275 j PLS_INTEGER := 0;
11276 k PLS_INTEGER := 0;
11277 m PLS_INTEGER := 0;
11278 l_api_name CONSTANT VARCHAR2(30) :='copy_response_deliverables';
11279 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
11280 l_recur_del_parent_id NUMBER;
11281 x_errorcode NUMBER;
11282 BEGIN
11283 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11284 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11285 ,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.copy_response_deliverables');
11286 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11287 ,'100: target budoc id is:'||to_char(p_target_doc_id));
11288 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name
11289 ,'100: target budoc id type:'||p_target_doc_type);
11290 END IF;
11291 -- initialize the table type variable to strore source and target deliverble
11292 -- ids to copy attachments.
11293 delIdTab := delIdTabType();
11294 -- Build the deliverable definition records
11295 FOR del_rec IN del_cur LOOP
11296
11297 k := k+1;
11298 delRecTab(k).deliverable_id := del_rec.deliverable_id;
11299 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
11300 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
11301 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
11302 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
11303 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
11304 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
11305 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
11306 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
11307 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
11308 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
11309 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
11310 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
11311 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
11312 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
11313 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
11314 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
11315 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
11316 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
11317 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
11318 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
11319 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
11320 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
11321 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
11322 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
11323 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
11324 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
11325 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
11326 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
11327 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
11328 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
11329 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
11330 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
11331 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
11332 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
11333 delRecTab(k).EXTERNAL_PARTY_ROLE:= del_rec.EXTERNAL_PARTY_ROLE;
11334 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
11335 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
11336 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
11337 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
11338 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
11339 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
11340 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
11341 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
11342 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
11343 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
11344 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
11345 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
11346 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
11347 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
11348 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
11349 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
11350 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
11351 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
11352 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
11353 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
11354 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
11355 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
11356 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
11357 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
11358 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
11359 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
11360 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
11361 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
11362 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
11363 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
11364 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
11365 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
11366 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
11367 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
11368 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
11369 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
11370 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
11371 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
11372 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
11373 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
11374 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
11375 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
11376 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
11377 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
11378 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
11379 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
11380 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
11381 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
11382 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
11383 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
11384 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
11385 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
11386 delRecTab(k).orig_system_reference_code :='COPY';
11387 delRecTab(k).orig_system_reference_id1 :=del_rec.deliverable_id;
11388 delRecTab(k).orig_system_reference_id2 :=null;
11389 -- CDRL Project
11390 delRecTab(k).del_category_code := del_rec.del_category_code;
11391 delRecTab(k).exhibit_code := del_rec.exhibit_code;
11392 delRecTab(k).data_item_number:= del_rec.data_item_number;
11393 delRecTab(k).price_group:= del_rec.price_group;
11394 delRecTab(k).estimated_price:= del_rec.estimated_price;
11395 delRecTab(k).uda_template_id:= del_rec.uda_template_id;
11396 delRecTab(k).schedule_type:= del_rec.schedule_type;
11397 -- CDRL Project
11398
11399 END LOOP;
11400 IF del_cur %ISOPEN THEN
11401 CLOSE del_cur ;
11402 END IF;
11403 IF delRecTab.COUNT <> 0 THEN
11404 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11405 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Number of records in delRecTab :'||to_char(delRecTab.COUNT));
11406 END IF;
11407 -- Build the new deliverable definition table
11408 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
11409 j := j+1;
11410 -- extend table type
11411 delIdTab.extend;
11412 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
11413 delNewTab(j) := delRecTab(i);
11414 select okc_deliverable_id_s.nextval
11415 INTO delNewTab(j).deliverable_id from dual;
11416 delIdTab(j).del_id := delNewTab(j).deliverable_id;
11417 -- store current_del_parent_id in local variable
11418 --to assign it to the instances
11419 l_recur_del_parent_id := delNewTab(j).deliverable_id;
11420 -- assign common attributes
11421 delNewTab(j).business_document_id := p_target_doc_id;
11422 delNewTab(j).business_document_type := p_target_doc_type;
11423 delNewTab(j).business_document_number := p_target_doc_number;
11424 delNewTab(j).created_by:= Fnd_Global.User_Id;
11425 delNewTab(j).creation_date := sysdate;
11426 delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
11427 delNewTab(j).last_update_date := sysdate;
11428 delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
11429 -- Check for instances on deliverable definition
11430 IF delRecTab(i).recurring_yn = 'Y' THEN
11431
11432 --Initialize the table with 0 rows
11433 delInsTab.DELETE;
11434 m := 0;
11435 -- Build instances table
11436 FOR del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id) LOOP
11437 m := m+1;
11438 delInsTab(m).deliverable_id := del_ins_rec.deliverable_id;
11439 delInsTab(m).BUSINESS_DOCUMENT_TYPE:= del_ins_rec.BUSINESS_DOCUMENT_TYPE;
11440 delInsTab(m).BUSINESS_DOCUMENT_ID:= del_ins_rec.BUSINESS_DOCUMENT_ID;
11441 delInsTab(m).BUSINESS_DOCUMENT_NUMBER:= del_ins_rec.BUSINESS_DOCUMENT_NUMBER;
11442 delInsTab(m).DELIVERABLE_TYPE:= del_ins_rec.DELIVERABLE_TYPE;
11443 delInsTab(m).RESPONSIBLE_PARTY:= del_ins_rec.RESPONSIBLE_PARTY;
11444 delInsTab(m).INTERNAL_PARTY_CONTACT_ID:= del_ins_rec.INTERNAL_PARTY_CONTACT_ID;
11445 delInsTab(m).EXTERNAL_PARTY_CONTACT_ID:= del_ins_rec.EXTERNAL_PARTY_CONTACT_ID;
11446 delInsTab(m).DELIVERABLE_NAME:= del_ins_rec.DELIVERABLE_NAME;
11447 delInsTab(m).DESCRIPTION:= del_ins_rec.DESCRIPTION;
11448 delInsTab(m).COMMENTS:= del_ins_rec.COMMENTS;
11449 delInsTab(m).DISPLAY_SEQUENCE:= del_ins_rec.DISPLAY_SEQUENCE;
11450 delInsTab(m).FIXED_DUE_DATE_YN:= del_ins_rec.FIXED_DUE_DATE_YN;
11451 delInsTab(m).ACTUAL_DUE_DATE:= del_ins_rec.ACTUAL_DUE_DATE;
11452 delInsTab(m).PRINT_DUE_DATE_MSG_NAME:= del_ins_rec.PRINT_DUE_DATE_MSG_NAME;
11453 delInsTab(m).RECURRING_YN:= del_ins_rec.RECURRING_YN;
11454 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
11455 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_UOM:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
11456 delInsTab(m).NOTIFY_PRIOR_DUE_DATE_YN:= del_ins_rec.NOTIFY_PRIOR_DUE_DATE_YN;
11457 delInsTab(m).NOTIFY_COMPLETED_YN:= del_ins_rec.NOTIFY_COMPLETED_YN;
11458 delInsTab(m).NOTIFY_OVERDUE_YN:= del_ins_rec.NOTIFY_OVERDUE_YN;
11459 delInsTab(m).NOTIFY_ESCALATION_YN:= del_ins_rec.NOTIFY_ESCALATION_YN;
11460 delInsTab(m).NOTIFY_ESCALATION_VALUE:= del_ins_rec.NOTIFY_ESCALATION_VALUE;
11461 delInsTab(m).NOTIFY_ESCALATION_UOM:= del_ins_rec.NOTIFY_ESCALATION_UOM;
11462 delInsTab(m).ESCALATION_ASSIGNEE:= del_ins_rec.ESCALATION_ASSIGNEE;
11463 delInsTab(m).AMENDMENT_OPERATION:= del_ins_rec.AMENDMENT_OPERATION;
11464 delInsTab(m).PRIOR_NOTIFICATION_ID:= del_ins_rec.PRIOR_NOTIFICATION_ID;
11465 delInsTab(m).AMENDMENT_NOTES:= del_ins_rec.AMENDMENT_NOTES;
11466 delInsTab(m).COMPLETED_NOTIFICATION_ID:= del_ins_rec.COMPLETED_NOTIFICATION_ID;
11467 delInsTab(m).OVERDUE_NOTIFICATION_ID:= del_ins_rec.OVERDUE_NOTIFICATION_ID;
11468 delInsTab(m).ESCALATION_NOTIFICATION_ID:= del_ins_rec.ESCALATION_NOTIFICATION_ID;
11469 delInsTab(m).LANGUAGE:= del_ins_rec.LANGUAGE;
11470 delInsTab(m).ORIGINAL_DELIVERABLE_ID:= del_ins_rec.ORIGINAL_DELIVERABLE_ID;
11471 delInsTab(m).REQUESTER_ID:= del_ins_rec.REQUESTER_ID;
11472 delInsTab(m).EXTERNAL_PARTY_ID:= del_ins_rec.EXTERNAL_PARTY_ID;
11473 delInsTab(m).EXTERNAL_PARTY_ROLE:= del_ins_rec.EXTERNAL_PARTY_ROLE;
11474 delInsTab(m).RECURRING_DEL_PARENT_ID:= del_ins_rec.RECURRING_DEL_PARENT_ID;
11475 delInsTab(m).BUSINESS_DOCUMENT_VERSION:= del_ins_rec.BUSINESS_DOCUMENT_VERSION;
11476 delInsTab(m).RELATIVE_ST_DATE_DURATION:= del_ins_rec.RELATIVE_ST_DATE_DURATION;
11477 delInsTab(m).RELATIVE_ST_DATE_UOM:= del_ins_rec.RELATIVE_ST_DATE_UOM;
11478 delInsTab(m).RELATIVE_ST_DATE_EVENT_ID:= del_ins_rec.RELATIVE_ST_DATE_EVENT_ID;
11479 delInsTab(m).RELATIVE_END_DATE_DURATION:= del_ins_rec.RELATIVE_END_DATE_DURATION;
11480 delInsTab(m).RELATIVE_END_DATE_UOM:= del_ins_rec.RELATIVE_END_DATE_UOM;
11481 delInsTab(m).RELATIVE_END_DATE_EVENT_ID:= del_ins_rec.RELATIVE_END_DATE_EVENT_ID;
11482 delInsTab(m).REPEATING_DAY_OF_MONTH:= del_ins_rec.REPEATING_DAY_OF_MONTH;
11483 delInsTab(m).REPEATING_DAY_OF_WEEK:= del_ins_rec.REPEATING_DAY_OF_WEEK;
11484 delInsTab(m).REPEATING_FREQUENCY_UOM:= del_ins_rec.REPEATING_FREQUENCY_UOM;
11485 delInsTab(m).REPEATING_DURATION:= del_ins_rec.REPEATING_DURATION;
11486 delInsTab(m).FIXED_START_DATE:= del_ins_rec.FIXED_START_DATE;
11487 delInsTab(m).FIXED_END_DATE:= del_ins_rec.FIXED_END_DATE;
11488 delInsTab(m).MANAGE_YN:= del_ins_rec.MANAGE_YN;
11489 delInsTab(m).INTERNAL_PARTY_ID:= del_ins_rec.INTERNAL_PARTY_ID;
11490 delInsTab(m).DELIVERABLE_STATUS:= del_ins_rec.DELIVERABLE_STATUS;
11491 delInsTab(m).STATUS_CHANGE_NOTES:= del_ins_rec.STATUS_CHANGE_NOTES;
11492 delInsTab(m).CREATED_BY:= del_ins_rec.CREATED_BY;
11493 delInsTab(m).CREATION_DATE:= del_ins_rec.CREATION_DATE;
11494 delInsTab(m).LAST_UPDATED_BY:= del_ins_rec.LAST_UPDATED_BY;
11495 delInsTab(m).LAST_UPDATE_DATE:= del_ins_rec.LAST_UPDATE_DATE;
11496 delInsTab(m).LAST_UPDATE_LOGIN:= del_ins_rec.LAST_UPDATE_LOGIN;
11497 delInsTab(m).OBJECT_VERSION_NUMBER:= del_ins_rec.OBJECT_VERSION_NUMBER;
11498 delInsTab(m).ATTRIBUTE_CATEGORY:= del_ins_rec.ATTRIBUTE_CATEGORY;
11499 delInsTab(m).ATTRIBUTE1:= del_ins_rec.ATTRIBUTE1;
11500 delInsTab(m).ATTRIBUTE2:= del_ins_rec.ATTRIBUTE2;
11501 delInsTab(m).ATTRIBUTE3:= del_ins_rec.ATTRIBUTE3;
11502 delInsTab(m).ATTRIBUTE4:= del_ins_rec.ATTRIBUTE4;
11503 delInsTab(m).ATTRIBUTE5:= del_ins_rec.ATTRIBUTE5;
11504 delInsTab(m).ATTRIBUTE6:= del_ins_rec.ATTRIBUTE6;
11505 delInsTab(m).ATTRIBUTE7:= del_ins_rec.ATTRIBUTE7;
11506 delInsTab(m).ATTRIBUTE8:= del_ins_rec.ATTRIBUTE8;
11507 delInsTab(m).ATTRIBUTE9:= del_ins_rec.ATTRIBUTE9;
11508 delInsTab(m).ATTRIBUTE10:= del_ins_rec.ATTRIBUTE10;
11509 delInsTab(m).ATTRIBUTE11:= del_ins_rec.ATTRIBUTE11;
11510 delInsTab(m).ATTRIBUTE12:= del_ins_rec.ATTRIBUTE12;
11511 delInsTab(m).ATTRIBUTE13:= del_ins_rec.ATTRIBUTE13;
11512 delInsTab(m).ATTRIBUTE14:= del_ins_rec.ATTRIBUTE14;
11513 delInsTab(m).ATTRIBUTE15:= del_ins_rec.ATTRIBUTE15;
11514 delInsTab(m).DISABLE_NOTIFICATIONS_YN:= del_ins_rec.DISABLE_NOTIFICATIONS_YN;
11515 delInsTab(m).LAST_AMENDMENT_DATE:= del_ins_rec.LAST_AMENDMENT_DATE;
11516 delInsTab(m).BUSINESS_DOCUMENT_LINE_ID:= del_ins_rec.BUSINESS_DOCUMENT_LINE_ID;
11517 delInsTab(m).EXTERNAL_PARTY_SITE_ID:= del_ins_rec.EXTERNAL_PARTY_SITE_ID;
11518 delInsTab(m).START_EVENT_DATE:= del_ins_rec.START_EVENT_DATE;
11519 delInsTab(m).END_EVENT_DATE:= del_ins_rec.END_EVENT_DATE;
11520 delInsTab(m).SUMMARY_AMEND_OPERATION_CODE:= del_ins_rec.SUMMARY_AMEND_OPERATION_CODE;
11521 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
11522 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
11523 delInsTab(m).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_ins_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
11524 delInsTab(m).PAY_HOLD_OVERDUE_YN:=del_ins_rec.PAY_HOLD_OVERDUE_YN;
11525 delInsTab(m).RAISE_COMPLETION_EVENT_YN:=del_ins_rec.RAISE_COMPLETION_EVENT_YN;
11526
11527 delInsTab(m).orig_system_reference_code := 'COPY';
11528 delInsTab(m).orig_system_reference_id1 :=del_ins_rec.deliverable_id;
11529 delInsTab(m).orig_system_reference_id2 :=null;
11530 -- CDR PROJECT
11531 delInsTab(m).del_category_code := del_ins_rec.del_category_code;
11532 delInsTab(m).exhibit_code := del_ins_rec.exhibit_code;
11533 delInsTab(m).data_item_number:= del_ins_rec.data_item_number;
11534 delInsTab(m).price_group:= del_ins_rec.price_group;
11535 delInsTab(m).estimated_price:= del_ins_rec.estimated_price;
11536 delInsTab(m).uda_template_id:= del_ins_rec.uda_template_id;
11537 delInsTab(m).schedule_type:= del_ins_rec.schedule_type;
11538
11539 END LOOP; -- del_ins_rec IN del_ins_cur(delRecTab(i).deliverable_id)
11540 IF del_ins_cur %ISOPEN THEN
11541 CLOSE del_ins_cur ;
11542 END IF;
11543 -- If instances exist then add them to the new deliverables table
11544 IF delInsTab.COUNT <> 0 THEN
11545 FOR n IN delInsTab.FIRST..delInsTab.LAST LOOP
11546 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11547 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside Instance cursor loop');
11548 END IF;
11549 j:=j+1;
11550 -- extend table type
11551 delIdTab.extend;
11552 -- build the id table to copy attachments
11553 delIdTab(j).orig_del_id := delInsTab(n).deliverable_id;
11554 -- build new version deliverables table
11555 delNewTab(j):= delInsTab(n);
11556 select okc_deliverable_id_s.nextval
11557 INTO delNewTab(j).deliverable_id from dual;
11558 delIdTab(j).del_id := delNewTab(j).deliverable_id;
11559 delNewTab(j).recurring_del_parent_id := l_recur_del_parent_id;
11560 -- assign common attributes
11561 delNewTab(j).business_document_id := p_target_doc_id;
11562 delNewTab(j).business_document_type := p_target_doc_type;
11563 delNewTab(j).business_document_number := p_target_doc_number;
11564 delNewTab(j).created_by:= Fnd_Global.User_Id;
11565 delNewTab(j).creation_date := sysdate;
11566 delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
11567 delNewTab(j).last_update_date := sysdate;
11568 delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
11569
11570 END LOOP; -- delInsTab.FIRST..delInsTab.LAST
11571 END IF;--delInsTab.COUNT
11572
11573
11574 END IF; --recurring_yn = 'Y'
11575 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11576 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab.COUNT));
11577 END IF;
11578 END LOOP; -- delRecTab.FIRST..delRecTab.LAST
11579 END IF; -- delRecTab.COUNT
11580
11581 -- loop through new table and create deliverables for the target document
11582 IF delNewTab.COUNT <> 0 THEN
11583 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
11584 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11585 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
11586 END IF;
11587 INSERT INTO okc_deliverables
11588 (DELIVERABLE_ID,
11589 BUSINESS_DOCUMENT_TYPE ,
11590 BUSINESS_DOCUMENT_ID ,
11591 BUSINESS_DOCUMENT_NUMBER ,
11592 DELIVERABLE_TYPE ,
11593 RESPONSIBLE_PARTY ,
11594 INTERNAL_PARTY_CONTACT_ID ,
11595 EXTERNAL_PARTY_CONTACT_ID ,
11596 DELIVERABLE_NAME ,
11597 DESCRIPTION ,
11598 COMMENTS ,
11599 DISPLAY_SEQUENCE ,
11600 FIXED_DUE_DATE_YN ,
11601 ACTUAL_DUE_DATE ,
11602 PRINT_DUE_DATE_MSG_NAME ,
11603 RECURRING_YN ,
11604 NOTIFY_PRIOR_DUE_DATE_VALUE ,
11605 NOTIFY_PRIOR_DUE_DATE_UOM ,
11606 NOTIFY_PRIOR_DUE_DATE_YN ,
11607 NOTIFY_COMPLETED_YN ,
11608 NOTIFY_OVERDUE_YN ,
11609 NOTIFY_ESCALATION_YN ,
11610 NOTIFY_ESCALATION_VALUE ,
11611 NOTIFY_ESCALATION_UOM ,
11612 ESCALATION_ASSIGNEE ,
11613 AMENDMENT_OPERATION ,
11614 PRIOR_NOTIFICATION_ID ,
11615 AMENDMENT_NOTES ,
11616 COMPLETED_NOTIFICATION_ID ,
11617 OVERDUE_NOTIFICATION_ID ,
11618 ESCALATION_NOTIFICATION_ID ,
11619 LANGUAGE ,
11620 ORIGINAL_DELIVERABLE_ID ,
11621 REQUESTER_ID ,
11622 EXTERNAL_PARTY_ID ,
11623 EXTERNAL_PARTY_ROLE ,
11624 RECURRING_DEL_PARENT_ID ,
11625 BUSINESS_DOCUMENT_VERSION ,
11626 RELATIVE_ST_DATE_DURATION ,
11627 RELATIVE_ST_DATE_UOM ,
11628 RELATIVE_ST_DATE_EVENT_ID ,
11629 RELATIVE_END_DATE_DURATION ,
11630 RELATIVE_END_DATE_UOM ,
11631 RELATIVE_END_DATE_EVENT_ID ,
11632 REPEATING_DAY_OF_MONTH ,
11633 REPEATING_DAY_OF_WEEK ,
11634 REPEATING_FREQUENCY_UOM ,
11635 REPEATING_DURATION ,
11636 FIXED_START_DATE ,
11637 FIXED_END_DATE ,
11638 MANAGE_YN ,
11639 INTERNAL_PARTY_ID ,
11640 DELIVERABLE_STATUS ,
11641 STATUS_CHANGE_NOTES ,
11642 CREATED_BY ,
11643 CREATION_DATE ,
11644 LAST_UPDATED_BY ,
11645 LAST_UPDATE_DATE ,
11646 LAST_UPDATE_LOGIN ,
11647 OBJECT_VERSION_NUMBER ,
11648 ATTRIBUTE_CATEGORY ,
11649 ATTRIBUTE1 ,
11650 ATTRIBUTE2 ,
11651 ATTRIBUTE3 ,
11652 ATTRIBUTE4 ,
11653 ATTRIBUTE5 ,
11654 ATTRIBUTE6 ,
11655 ATTRIBUTE7 ,
11656 ATTRIBUTE8 ,
11657 ATTRIBUTE9 ,
11658 ATTRIBUTE10 ,
11659 ATTRIBUTE11 ,
11660 ATTRIBUTE12 ,
11661 ATTRIBUTE13 ,
11662 ATTRIBUTE14 ,
11663 ATTRIBUTE15 ,
11664 DISABLE_NOTIFICATIONS_YN ,
11665 LAST_AMENDMENT_DATE ,
11666 BUSINESS_DOCUMENT_LINE_ID ,
11667 EXTERNAL_PARTY_SITE_ID ,
11668 START_EVENT_DATE ,
11669 END_EVENT_DATE ,
11670 SUMMARY_AMEND_OPERATION_CODE,
11671 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11672 PAY_HOLD_PRIOR_DUE_DATE_UOM,
11673 PAY_HOLD_PRIOR_DUE_DATE_YN,
11674 PAY_HOLD_OVERDUE_YN,
11675 RAISE_COMPLETION_EVENT_YN,
11676 orig_system_reference_code,
11677 orig_system_reference_id1,
11678 orig_system_reference_id2,
11679 del_category_code,
11680 exhibit_code,
11681 data_item_number,
11682 price_group,
11683 estimated_price,
11684 uda_template_id,
11685 schedule_type
11686 )
11687 VALUES (
11688 delNewTab(i).DELIVERABLE_ID,
11689 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
11690 delNewTab(i).BUSINESS_DOCUMENT_ID ,
11691 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
11692 delNewTab(i).DELIVERABLE_TYPE ,
11693 delNewTab(i).RESPONSIBLE_PARTY ,
11694 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
11695 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
11696 delNewTab(i).DELIVERABLE_NAME ,
11697 delNewTab(i).DESCRIPTION ,
11698 delNewTab(i).COMMENTS ,
11699 delNewTab(i).DISPLAY_SEQUENCE ,
11700 delNewTab(i).FIXED_DUE_DATE_YN ,
11701 delNewTab(i).ACTUAL_DUE_DATE ,
11702 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
11703 delNewTab(i).RECURRING_YN ,
11704 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
11705 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
11706 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
11707 delNewTab(i).NOTIFY_COMPLETED_YN ,
11708 delNewTab(i).NOTIFY_OVERDUE_YN ,
11709 delNewTab(i).NOTIFY_ESCALATION_YN ,
11710 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
11711 delNewTab(i).NOTIFY_ESCALATION_UOM ,
11712 delNewTab(i).ESCALATION_ASSIGNEE ,
11713 delNewTab(i).AMENDMENT_OPERATION ,
11714 delNewTab(i).PRIOR_NOTIFICATION_ID ,
11715 delNewTab(i).AMENDMENT_NOTES ,
11716 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
11717 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
11718 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
11719 delNewTab(i).LANGUAGE ,
11720 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
11721 delNewTab(i).REQUESTER_ID ,
11722 delNewTab(i).EXTERNAL_PARTY_ID ,
11723 delNewTab(i).EXTERNAL_PARTY_ROLE ,
11724 delNewTab(i).RECURRING_DEL_PARENT_ID ,
11725 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
11726 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
11727 delNewTab(i).RELATIVE_ST_DATE_UOM ,
11728 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
11729 delNewTab(i).RELATIVE_END_DATE_DURATION ,
11730 delNewTab(i).RELATIVE_END_DATE_UOM ,
11731 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
11732 delNewTab(i).REPEATING_DAY_OF_MONTH ,
11733 delNewTab(i).REPEATING_DAY_OF_WEEK ,
11734 delNewTab(i).REPEATING_FREQUENCY_UOM ,
11735 delNewTab(i).REPEATING_DURATION ,
11736 delNewTab(i).FIXED_START_DATE ,
11737 delNewTab(i).FIXED_END_DATE ,
11738 delNewTab(i).MANAGE_YN ,
11739 delNewTab(i).INTERNAL_PARTY_ID ,
11740 delNewTab(i).DELIVERABLE_STATUS ,
11741 delNewTab(i).STATUS_CHANGE_NOTES ,
11742 delNewTab(i).CREATED_BY ,
11743 delNewTab(i).CREATION_DATE ,
11744 delNewTab(i).LAST_UPDATED_BY ,
11745 delNewTab(i).LAST_UPDATE_DATE ,
11746 delNewTab(i).LAST_UPDATE_LOGIN ,
11747 delNewTab(i).OBJECT_VERSION_NUMBER ,
11748 delNewTab(i).ATTRIBUTE_CATEGORY ,
11749 delNewTab(i).ATTRIBUTE1 ,
11750 delNewTab(i).ATTRIBUTE2 ,
11751 delNewTab(i).ATTRIBUTE3 ,
11752 delNewTab(i).ATTRIBUTE4 ,
11753 delNewTab(i).ATTRIBUTE5 ,
11754 delNewTab(i).ATTRIBUTE6 ,
11755 delNewTab(i).ATTRIBUTE7 ,
11756 delNewTab(i).ATTRIBUTE8 ,
11757 delNewTab(i).ATTRIBUTE9 ,
11758 delNewTab(i).ATTRIBUTE10 ,
11759 delNewTab(i).ATTRIBUTE11 ,
11760 delNewTab(i).ATTRIBUTE12 ,
11761 delNewTab(i).ATTRIBUTE13 ,
11762 delNewTab(i).ATTRIBUTE14 ,
11763 delNewTab(i).ATTRIBUTE15 ,
11764 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
11765 delNewTab(i).LAST_AMENDMENT_DATE ,
11766 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
11767 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
11768 delNewTab(i).START_EVENT_DATE ,
11769 delNewTab(i).END_EVENT_DATE ,
11770 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
11771 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
11772 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
11773 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
11774 delNewTab(i).PAY_HOLD_OVERDUE_YN,
11775 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
11776 delNewTab(i).orig_system_reference_code,
11777 delNewTab(i).orig_system_reference_id1,
11778 delNewTab(i).orig_system_reference_id2,
11779 delNewTab(i).del_category_code,
11780 delNewTab(i).exhibit_code,
11781 delNewTab(i).data_item_number,
11782 delNewTab(i).price_group,
11783 delNewTab(i).estimated_price,
11784 delNewTab(i).uda_template_id,
11785 delNewTab(i).schedule_type
11786 );
11787 copy_deliverable_udas(
11788 delNewTab(i).orig_system_reference_id1,
11789 delNewTab(i).DELIVERABLE_ID,
11790 x_return_status,
11791 x_msg_count,
11792 x_msg_data,
11793 x_errorcode
11794 );
11795 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11796 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11797 END IF;
11798 END LOOP;
11799 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11800 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Creating Deliverables ');
11801 END IF;
11802 END IF; -- delNewTab.COUNT <> 0
11803 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11804 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
11805 END IF;
11806
11807 -- loop through deliverable ids table and copy existing attachments and status history
11808 -- from old deliverable to new deliverable
11809 IF delIdTab.COUNT <> 0 THEN
11810 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
11811
11812 FOR delStsHist_rec in delStsHist(delIdTab(i).orig_del_id) LOOP
11813 --insert into status history
11814 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11815 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: status history for Deliverable Id :'||to_char(delIdTab(i).del_id));
11816 END IF;
11817 INSERT INTO okc_del_status_history (
11818 deliverable_id,
11819 deliverable_status,
11820 status_changed_by,
11821 status_change_date,
11822 status_change_notes,
11823 object_version_number,
11824 created_by,
11825 creation_date,
11826 last_updated_by,
11827 last_update_date,
11828 last_update_login)
11829 VALUES(
11830 delIdTab(i).del_id,
11831 delStsHist_rec.DELIVERABLE_STATUS,
11832 delStsHist_rec.STATUS_CHANGED_BY,
11833 delStsHist_rec.STATUS_CHANGE_DATE,
11834 delStsHist_rec.STATUS_CHANGE_NOTES,
11835 delStsHist_rec.OBJECT_VERSION_NUMBER,
11836 FND_GLOBAL.User_id,
11837 sysdate,
11838 FND_GLOBAL.User_id,
11839 sysdate,
11840 Fnd_Global.Login_Id);
11841 END LOOP; -- delStsHist END LOOP;
11842 IF delStsHist%ISOPEN THEN
11843 CLOSE delStsHist;
11844 END IF;
11845
11846
11847 -- check if attachments exists
11848 IF attachment_exists(p_entity_name => G_ENTITY_NAME
11849 ,p_pk1_value => delIdTab(i).orig_del_id) THEN
11850
11851 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11852 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
11853 END IF;
11854 -- copy attachments
11855 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
11856 fnd_attached_documents2_pkg.copy_attachments(
11857 X_from_entity_name => G_ENTITY_NAME,
11858 X_from_pk1_value => delIdTab(i).orig_del_id,
11859 X_to_entity_name => G_ENTITY_NAME,
11860 X_to_pk1_value => to_char(delIdTab(i).del_id),
11861 X_CREATED_BY => FND_GLOBAL.User_id,
11862 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
11863 );
11864 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11865 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Done Copy Deliverable Attachments ');
11866 END IF;
11867 END IF; --attachment_exists
11868 END LOOP; -- delIdTab.FIRST..delIdTab.LAST
11869 END IF; -- delIdTab.COUNT
11870
11871 IF del_cur %ISOPEN THEN
11872 CLOSE del_cur ;
11873 END IF;
11874 x_return_status := l_return_status;
11875 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11876 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,':leaving ');
11877 END IF;
11878 EXCEPTION
11879 WHEN FND_API.G_EXC_ERROR THEN
11880 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11881 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR: '||
11882 substr(sqlerrm,1,200));
11883 END IF;
11884 IF del_cur %ISOPEN THEN
11885 CLOSE del_cur ;
11886 END IF;
11887 IF delStsHist%ISOPEN THEN
11888 CLOSE delStsHist;
11889 END IF;
11890 IF del_ins_cur %ISOPEN THEN
11891 CLOSE del_ins_cur ;
11892 END IF;
11893 x_return_status := G_RET_STS_ERROR;
11894 FND_MSG_PUB.Count_And_Get(
11895 p_count => x_msg_count,
11896 p_data => x_msg_data
11897 );
11898
11899 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11900 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11901 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name
11902 ,'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
11903 END IF;
11904 IF del_cur %ISOPEN THEN
11905 CLOSE del_cur ;
11906 END IF;
11907 IF delStsHist%ISOPEN THEN
11908 CLOSE delStsHist;
11909 END IF;
11910 IF del_ins_cur %ISOPEN THEN
11911 CLOSE del_ins_cur ;
11912 END IF;
11913 x_return_status := G_RET_STS_UNEXP_ERROR;
11914 FND_MSG_PUB.Count_And_Get(
11915 p_count => x_msg_count,
11916 p_data => x_msg_data
11917 );
11918
11919 WHEN OTHERS THEN
11920 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11921 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,
11922 'leaving with G_EXC_UNEXPECTED_ERROR :'||substr(sqlerrm,1,200));
11923 END IF;
11924 IF del_cur %ISOPEN THEN
11925 CLOSE del_cur ;
11926 END IF;
11927 IF delStsHist%ISOPEN THEN
11928 CLOSE delStsHist;
11929 END IF;
11930 IF del_ins_cur %ISOPEN THEN
11931 CLOSE del_ins_cur ;
11932 END IF;
11933 x_return_status := G_RET_STS_UNEXP_ERROR;
11934 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11935 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
11936 END IF;
11937 FND_MSG_PUB.Count_And_Get(
11938 p_count => x_msg_count,
11939 p_data => x_msg_data
11940 );
11941
11942 END copy_response_deliverables;
11943
11944
11945 -- Creates status history for a given deliverable status history table
11946 PROCEDURE create_del_status_history(
11947 p_api_version IN NUMBER,
11948 p_init_msg_list IN VARCHAR2,
11949 p_del_st_hist_tab IN delHistTabType,
11950 x_msg_data OUT NOCOPY VARCHAR2,
11951 x_msg_count OUT NOCOPY NUMBER,
11952 x_return_status OUT NOCOPY VARCHAR2)
11953 IS
11954
11955 l_api_name CONSTANT VARCHAR2(30) :='create_del_status_history';
11956 l_return_status VARCHAR2(1):= OKC_API.G_RET_STS_SUCCESS;
11957 l_msg_count NUMBER;
11958 l_msg_data VARCHAR2(1000);
11959 l_api_version CONSTANT VARCHAR2(30) := 1.0;
11960 j PLS_INTEGER := 0;
11961
11962 BEGIN
11963
11964 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11965 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
11966 END IF;
11967
11968 IF p_del_st_hist_tab.count > 0 THEN
11969 FOR i IN p_del_st_hist_tab.FIRST..p_del_st_hist_tab.LAST LOOP
11970 INSERT INTO okc_del_status_history
11971 (deliverable_id,
11972 deliverable_status,
11973 STATUS_CHANGED_BY,
11974 status_change_date,
11975 status_change_notes,
11976 object_version_number,
11977 created_by,
11978 creation_date,
11979 last_updated_by,
11980 last_update_date,
11981 last_update_login)
11982 VALUES (p_del_st_hist_tab(i).DELIVERABLE_ID
11983 ,p_del_st_hist_tab(i).DELIVERABLE_STATUS
11984 ,p_del_st_hist_tab(i).STATUS_CHANGED_BY
11985 ,p_del_st_hist_tab(i).STATUS_CHANGE_DATE
11986 ,p_del_st_hist_tab(i).STATUS_CHANGE_NOTES
11987 ,p_del_st_hist_tab(i).OBJECT_VERSION_NUMBER
11988 ,p_del_st_hist_tab(i).CREATED_BY
11989 ,p_del_st_hist_tab(i).CREATION_DATE
11990 ,p_del_st_hist_tab(i).LAST_UPDATED_BY
11991 ,p_del_st_hist_tab(i).LAST_UPDATE_DATE
11992 ,p_del_st_hist_tab(i).LAST_UPDATE_LOGIN
11993 );
11994 END LOOP;
11995 END IF;
11996
11997 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
11998 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving ');
11999 END IF;
12000 x_return_status := l_return_status;
12001 EXCEPTION
12002 WHEN FND_API.G_EXC_ERROR THEN
12003 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12004 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving with G_EXC_ERROR');
12005 END IF;
12006 x_return_status := G_RET_STS_ERROR;
12007 FND_MSG_PUB.Count_And_Get(
12008 p_count => x_msg_count,
12009 p_data => x_msg_data
12010 );
12011
12012 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12013 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12014 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
12015 END IF;
12016 x_return_status := G_RET_STS_UNEXP_ERROR;
12017 FND_MSG_PUB.Count_And_Get(
12018 p_count => x_msg_count,
12019 p_data => x_msg_data
12020 );
12021
12022 WHEN OTHERS THEN
12023 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12024 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving with G_EXC_UNEXPECTED_ERROR');
12025 END IF;
12026 x_return_status := G_RET_STS_UNEXP_ERROR;
12027 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12028 END IF;
12029 FND_MSG_PUB.Count_And_Get(
12030 p_count => x_msg_count,
12031 p_data => x_msg_data
12032 );
12033 END create_del_status_history;
12034
12035
12036
12037 /**
12038 3635916 MODIFYING DELIVERABLE DOES NOT REMOVE RELATED CLAUSE
12039 FROM AMENDMENT SUMMARY
12040 This API will be invoked by
12041 OKC_TERMS_UTIL_PVT.deliverable_amendment_exists()
12042 Parameter Details:
12043 p_bus_doc_id : document Id
12044 p_bus_doc_type : document type
12045 p_variable_code: deliverable variable code
12046 return value is Y or N based on the matching of deliverable
12047 to the variable.
12048 ***/
12049 FUNCTION deliverable_amendment_exists (
12050 p_api_version IN NUMBER,
12051 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
12052 p_bus_doc_type IN VARCHAR2,
12053 p_bus_doc_id IN NUMBER,
12054 p_variable_code IN VARCHAR2,
12055 x_msg_data OUT NOCOPY VARCHAR2,
12056 x_msg_count OUT NOCOPY NUMBER,
12057 x_return_status OUT NOCOPY VARCHAR2
12058 )
12059 RETURN VARCHAR2
12060 IS
12061
12062 l_api_version CONSTANT NUMBER := 1;
12063 l_api_name CONSTANT VARCHAR2(30) := 'deliverable_amendment_exists ';
12064 -- removed reference to docClass in the query bug#4069955
12065 CURSOR del_cur
12066 IS
12067 SELECT
12068 del.deliverable_type deliverable_type
12069 ,del.responsible_party responsible_party
12070 from
12071 okc_deliverables del
12072 ,okc_deliverable_types_b delType
12073 where del.business_document_type = p_bus_doc_type
12074 and del.business_document_id = p_bus_doc_id
12075 and del.business_document_version = -99
12076 and del.summary_amend_operation_code is not null
12077 and del.deliverable_type = delType.deliverable_type_code
12078 and delType.internal_flag = 'N';
12079
12080 del_rec del_cur%ROWTYPE;
12081
12082 l_return_val VARCHAR2(1);
12083
12084
12085
12086
12087 BEGIN
12088
12089 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12090 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
12091 END IF;
12092
12093 -- Standard call to check for call compatibility.
12094 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
12095 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12096 END IF;
12097
12098 -- Initialize message list if p_init_msg_list is set to TRUE.
12099 IF FND_API.to_Boolean( p_init_msg_list ) THEN
12100 FND_MSG_PUB.initialize;
12101 END IF;
12102
12103 -- Initialize API return status to success
12104 x_return_status := G_RET_STS_SUCCESS;
12105
12106
12107 l_return_val := 'N';
12108 -- loop through the amended deliverables and check if they match
12109 -- the variable_code. Return Y if they match else return N.
12110 FOR del_rec IN del_cur LOOP
12111 IF p_variable_code = 'EXTERNAL_SOURCING_DEL' OR
12112 p_variable_code = 'ALL_SOURCING_DEL' THEN
12113
12114 IF del_rec.deliverable_type = 'SOURCING' THEN
12115 l_return_val := 'Y';
12116 END IF;
12117
12118 END IF;
12119
12120 IF p_variable_code = 'EXTERNAL_CONTRACTUAL_DEL' THEN
12121 IF del_rec.responsible_party = 'SUPPLIER_ORG' AND
12122 del_rec.deliverable_type = 'CONTRACTUAL' THEN
12123 l_return_val := 'Y';
12124 END IF;
12125 ELSIF p_variable_code = 'INTERNAL_CONTRACTUAL_DEL' THEN
12126 IF del_rec.responsible_party = 'INTERNAL_ORG' AND
12127 del_rec.deliverable_type = 'CONTRACTUAL' THEN
12128 l_return_val := 'Y';
12129 END IF;
12130 ELSIF p_variable_code = 'ALL_CONTRACTUAL_DEL' THEN
12131
12132 IF del_rec.deliverable_type = 'CONTRACTUAL' THEN
12133
12134 l_return_val := 'Y';
12135
12136 END IF;
12137
12138 END IF;
12139
12140 IF l_return_val = 'Y' THEN
12141 RETURN(l_return_val);
12142 END IF;
12143
12144 END LOOP;
12145 IF del_cur%ISOPEN THEN
12146 CLOSE del_cur;
12147 END IF;
12148
12149 RETURN(l_return_val);
12150
12151 EXCEPTION
12152
12153 WHEN OTHERS THEN
12154 IF del_cur%ISOPEN THEN
12155 CLOSE del_cur;
12156 END IF;
12157
12158 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12159 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
12160 G_PKG_NAME ||'.'||l_api_name);
12161 END IF;
12162 x_return_status := G_RET_STS_UNEXP_ERROR;
12163 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12164 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12165 END IF;
12166 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
12167 p_data => x_msg_data);
12168
12169 RETURN(l_return_val);
12170 END deliverable_amendment_exists;
12171
12172
12173
12174 /***
12175 Function get_party_name
12176 This API will be invoked by the Create/Update/ViewOnly Deliverable pages to display the
12177 name for an External Party. The External Party could be VENDOR_ID from PO_VENDORS or
12178 PARTY_ID from HZ_PARTIES
12179 Parameter Details:
12180 p_external_party_id: Unique Identifier from PO_VENDORS or HZ_PARTIES
12181 p_external_party_role: Resp_Party_Code from OKC_RESP_PARTIES
12182 24-FEB-2005 pnayani -- bug#4201738 updated get_party_name to return null
12183 ***/
12184 FUNCTION get_party_name(
12185 p_external_party_id IN NUMBER,
12186 p_external_party_role IN VARCHAR2) RETURN VARCHAR2 IS
12187
12188 CURSOR get_vendor_name IS
12189 SELECT vendor_name
12190 from po_vendors
12191 where vendor_id = p_external_party_id;
12192
12193 CURSOR get_party_name IS
12194 SELECT party_name
12195 from hz_parties
12196 where party_id = p_external_party_id;
12197
12198 l_api_name CONSTANT VARCHAR2(30) := 'get_party_name';
12199 l_party_name VARCHAR2(360);
12200
12201 Begin
12202
12203 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12204 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside the API');
12205 END IF;
12206
12207 l_party_name := NULL;
12208 IF p_external_party_id is not null AND p_external_party_role is not null THEN
12209 If p_external_party_role = 'SUPPLIER_ORG' then
12210 OPEN get_vendor_name;
12211 FETCH get_vendor_name INTO l_party_name;
12212 CLOSE get_vendor_name;
12213 Else
12214 OPEN get_party_name;
12215 FETCH get_party_name INTO l_party_name;
12216 CLOSE get_party_name;
12217 End If;
12218
12219 END IF; -- p_external_party_id is not null
12220 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12221 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'101: party name is :'||l_party_name);
12222 END IF;
12223
12224 RETURN l_party_name;
12225
12226 EXCEPTION
12227 WHEN OTHERS THEN
12228 IF get_vendor_name%ISOPEN THEN
12229 CLOSE get_vendor_name;
12230 END IF;
12231 IF get_party_name%ISOPEN THEN
12232 CLOSE get_party_name;
12233 END IF;
12234 l_party_name := NULL;
12235 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12236 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Unexpected error leaving '||
12237 G_PKG_NAME ||'.'||l_api_name);
12238 END IF;
12239
12240 RETURN l_party_name;
12241
12242 End get_party_name;
12243
12244 /**************************/
12245
12246
12247 -- bug#4075168 New API for Template Revision
12248 -- bug#4083525 New param p_copy_deliverables
12249 PROCEDURE CopyDelForTemplateRevision(
12250 p_api_version IN NUMBER,
12251 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
12252 p_source_doc_id IN NUMBER,
12253 p_source_doc_type IN VARCHAR2,
12254 p_target_doc_id IN NUMBER,
12255 p_target_doc_type IN VARCHAR2,
12256 p_target_doc_number IN VARCHAR2,
12257 p_copy_del_attachments_yn IN VARCHAR2 default 'Y',
12258 x_msg_data OUT NOCOPY VARCHAR2,
12259 x_msg_count OUT NOCOPY NUMBER,
12260 x_return_status OUT NOCOPY VARCHAR2) IS
12261
12262 CURSOR del_cur IS
12263 SELECT *
12264 FROM OKC_DELIVERABLES
12265 WHERE business_document_id = p_source_doc_id
12266 AND business_document_version = -99
12267 AND business_document_type = p_source_doc_type
12268 AND NVL(amendment_operation,'NONE')<> 'DELETED'
12269 AND NVL(summary_amend_operation_code,'NONE')<> 'DELETED'
12270 AND recurring_del_parent_id is null;
12271 delRecTab delRecTabType;
12272 delNewTab delRecTabType;
12273 TYPE delIdRecType IS RECORD (del_id NUMBER,orig_del_id NUMBER);
12274 TYPE delIdTabType IS TABLE OF delIdRecType;
12275 delIdTab delIdTabType;
12276 j PLS_INTEGER := 0;
12277 k PLS_INTEGER := 0;
12278 l_api_name CONSTANT VARCHAR2(30) :='CopyDelForTemplateRevision';
12279 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
12280 l_deliverable_id NUMBER;
12281 l_from_pk1_value VARCHAR2(100);
12282 l_result BOOLEAN;
12283 l_copy VARCHAR2(1) := 'N';
12284 l_copy_attachments VARCHAR2(1) := 'N';
12285 x_errorcode NUMBER;
12286
12287 BEGIN
12288
12289 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12290 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
12291 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc id is:'||to_char(p_target_doc_id));
12292 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: budoc type:'||p_target_doc_type);
12293 END IF;
12294 -- initialize the table type variable
12295 delIdTab := delIdTabType();
12296
12297 FOR del_rec IN del_cur LOOP
12298
12299 k := k+1;
12300 delRecTab(k).deliverable_id := del_rec.deliverable_id;
12301 delRecTab(k).BUSINESS_DOCUMENT_TYPE:= del_rec.BUSINESS_DOCUMENT_TYPE;
12302 delRecTab(k).BUSINESS_DOCUMENT_ID:= del_rec.BUSINESS_DOCUMENT_ID;
12303 delRecTab(k).BUSINESS_DOCUMENT_NUMBER:= del_rec.BUSINESS_DOCUMENT_NUMBER;
12304 delRecTab(k).DELIVERABLE_TYPE:= del_rec.DELIVERABLE_TYPE;
12305 delRecTab(k).RESPONSIBLE_PARTY:= del_rec.RESPONSIBLE_PARTY;
12306 delRecTab(k).INTERNAL_PARTY_CONTACT_ID:= del_rec.INTERNAL_PARTY_CONTACT_ID;
12307 delRecTab(k).EXTERNAL_PARTY_CONTACT_ID:= del_rec.EXTERNAL_PARTY_CONTACT_ID;
12308 delRecTab(k).DELIVERABLE_NAME:= del_rec.DELIVERABLE_NAME;
12309 delRecTab(k).DESCRIPTION:= del_rec.DESCRIPTION;
12310 delRecTab(k).COMMENTS:= del_rec.COMMENTS;
12311 delRecTab(k).DISPLAY_SEQUENCE:= del_rec.DISPLAY_SEQUENCE;
12312 delRecTab(k).FIXED_DUE_DATE_YN:= del_rec.FIXED_DUE_DATE_YN;
12313 delRecTab(k).ACTUAL_DUE_DATE:= del_rec.ACTUAL_DUE_DATE;
12314 delRecTab(k).PRINT_DUE_DATE_MSG_NAME:= del_rec.PRINT_DUE_DATE_MSG_NAME;
12315 delRecTab(k).RECURRING_YN:= del_rec.RECURRING_YN;
12316 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_VALUE:= del_rec.NOTIFY_PRIOR_DUE_DATE_VALUE;
12317 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_UOM:= del_rec.NOTIFY_PRIOR_DUE_DATE_UOM;
12318 delRecTab(k).NOTIFY_PRIOR_DUE_DATE_YN:= del_rec.NOTIFY_PRIOR_DUE_DATE_YN;
12319 delRecTab(k).NOTIFY_COMPLETED_YN:= del_rec.NOTIFY_COMPLETED_YN;
12320 delRecTab(k).NOTIFY_OVERDUE_YN:= del_rec.NOTIFY_OVERDUE_YN;
12321 delRecTab(k).NOTIFY_ESCALATION_YN:= del_rec.NOTIFY_ESCALATION_YN;
12322 delRecTab(k).NOTIFY_ESCALATION_VALUE:= del_rec.NOTIFY_ESCALATION_VALUE;
12323 delRecTab(k).NOTIFY_ESCALATION_UOM:= del_rec.NOTIFY_ESCALATION_UOM;
12324 delRecTab(k).ESCALATION_ASSIGNEE:= del_rec.ESCALATION_ASSIGNEE;
12325 delRecTab(k).AMENDMENT_OPERATION:= del_rec.AMENDMENT_OPERATION;
12326 delRecTab(k).PRIOR_NOTIFICATION_ID:= del_rec.PRIOR_NOTIFICATION_ID;
12327 delRecTab(k).AMENDMENT_NOTES:= del_rec.AMENDMENT_NOTES;
12328 delRecTab(k).COMPLETED_NOTIFICATION_ID:= del_rec.COMPLETED_NOTIFICATION_ID;
12329 delRecTab(k).OVERDUE_NOTIFICATION_ID:= del_rec.OVERDUE_NOTIFICATION_ID;
12330 delRecTab(k).ESCALATION_NOTIFICATION_ID:= del_rec.ESCALATION_NOTIFICATION_ID;
12331 delRecTab(k).LANGUAGE:= del_rec.LANGUAGE;
12332 delRecTab(k).ORIGINAL_DELIVERABLE_ID:= del_rec.ORIGINAL_DELIVERABLE_ID;
12333 delRecTab(k).REQUESTER_ID:= del_rec.REQUESTER_ID;
12334 delRecTab(k).EXTERNAL_PARTY_ID:= del_rec.EXTERNAL_PARTY_ID;
12335 delRecTab(k).EXTERNAL_PARTY_ROLE := del_rec.EXTERNAL_PARTY_ROLE;
12336 delRecTab(k).RECURRING_DEL_PARENT_ID:= del_rec.RECURRING_DEL_PARENT_ID;
12337 delRecTab(k).BUSINESS_DOCUMENT_VERSION:= del_rec.BUSINESS_DOCUMENT_VERSION;
12338 delRecTab(k).RELATIVE_ST_DATE_DURATION:= del_rec.RELATIVE_ST_DATE_DURATION;
12339 delRecTab(k).RELATIVE_ST_DATE_UOM:= del_rec.RELATIVE_ST_DATE_UOM;
12340 delRecTab(k).RELATIVE_ST_DATE_EVENT_ID:= del_rec.RELATIVE_ST_DATE_EVENT_ID;
12341 delRecTab(k).RELATIVE_END_DATE_DURATION:= del_rec.RELATIVE_END_DATE_DURATION;
12342 delRecTab(k).RELATIVE_END_DATE_UOM:= del_rec.RELATIVE_END_DATE_UOM;
12343 delRecTab(k).RELATIVE_END_DATE_EVENT_ID:= del_rec.RELATIVE_END_DATE_EVENT_ID;
12344 delRecTab(k).REPEATING_DAY_OF_MONTH:= del_rec.REPEATING_DAY_OF_MONTH;
12345 delRecTab(k).REPEATING_DAY_OF_WEEK:= del_rec.REPEATING_DAY_OF_WEEK;
12346 delRecTab(k).REPEATING_FREQUENCY_UOM:= del_rec.REPEATING_FREQUENCY_UOM;
12347 delRecTab(k).REPEATING_DURATION:= del_rec.REPEATING_DURATION;
12348 delRecTab(k).FIXED_START_DATE:= del_rec.FIXED_START_DATE;
12349 delRecTab(k).FIXED_END_DATE:= del_rec.FIXED_END_DATE;
12350 delRecTab(k).MANAGE_YN:= del_rec.MANAGE_YN;
12351 delRecTab(k).INTERNAL_PARTY_ID:= del_rec.INTERNAL_PARTY_ID;
12352 delRecTab(k).DELIVERABLE_STATUS:= del_rec.DELIVERABLE_STATUS;
12353 delRecTab(k).STATUS_CHANGE_NOTES:= del_rec.STATUS_CHANGE_NOTES;
12354 delRecTab(k).CREATED_BY:= del_rec.CREATED_BY;
12355 delRecTab(k).CREATION_DATE:= del_rec.CREATION_DATE;
12356 delRecTab(k).LAST_UPDATED_BY:= del_rec.LAST_UPDATED_BY;
12357 delRecTab(k).LAST_UPDATE_DATE:= del_rec.LAST_UPDATE_DATE;
12358 delRecTab(k).LAST_UPDATE_LOGIN:= del_rec.LAST_UPDATE_LOGIN;
12359 delRecTab(k).OBJECT_VERSION_NUMBER:= del_rec.OBJECT_VERSION_NUMBER;
12360 delRecTab(k).ATTRIBUTE_CATEGORY:= del_rec.ATTRIBUTE_CATEGORY;
12361 delRecTab(k).ATTRIBUTE1:= del_rec.ATTRIBUTE1;
12362 delRecTab(k).ATTRIBUTE2:= del_rec.ATTRIBUTE2;
12363 delRecTab(k).ATTRIBUTE3:= del_rec.ATTRIBUTE3;
12364 delRecTab(k).ATTRIBUTE4:= del_rec.ATTRIBUTE4;
12365 delRecTab(k).ATTRIBUTE5:= del_rec.ATTRIBUTE5;
12366 delRecTab(k).ATTRIBUTE6:= del_rec.ATTRIBUTE6;
12367 delRecTab(k).ATTRIBUTE7:= del_rec.ATTRIBUTE7;
12368 delRecTab(k).ATTRIBUTE8:= del_rec.ATTRIBUTE8;
12369 delRecTab(k).ATTRIBUTE9:= del_rec.ATTRIBUTE9;
12370 delRecTab(k).ATTRIBUTE10:= del_rec.ATTRIBUTE10;
12371 delRecTab(k).ATTRIBUTE11:= del_rec.ATTRIBUTE11;
12372 delRecTab(k).ATTRIBUTE12:= del_rec.ATTRIBUTE12;
12373 delRecTab(k).ATTRIBUTE13:= del_rec.ATTRIBUTE13;
12374 delRecTab(k).ATTRIBUTE14:= del_rec.ATTRIBUTE14;
12375 delRecTab(k).ATTRIBUTE15:= del_rec.ATTRIBUTE15;
12376 delRecTab(k).DISABLE_NOTIFICATIONS_YN:= del_rec.DISABLE_NOTIFICATIONS_YN;
12377 delRecTab(k).LAST_AMENDMENT_DATE:= del_rec.LAST_AMENDMENT_DATE;
12378 delRecTab(k).BUSINESS_DOCUMENT_LINE_ID:= del_rec.BUSINESS_DOCUMENT_LINE_ID;
12379 delRecTab(k).EXTERNAL_PARTY_SITE_ID:= del_rec.EXTERNAL_PARTY_SITE_ID;
12380 delRecTab(k).START_EVENT_DATE:= del_rec.START_EVENT_DATE;
12381 delRecTab(k).END_EVENT_DATE:= del_rec.END_EVENT_DATE;
12382 delRecTab(k).SUMMARY_AMEND_OPERATION_CODE:= del_rec.SUMMARY_AMEND_OPERATION_CODE;
12383 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_VALUE:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_VALUE;
12384 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_UOM:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_UOM;
12385 delRecTab(k).PAY_HOLD_PRIOR_DUE_DATE_YN:=del_rec.PAY_HOLD_PRIOR_DUE_DATE_YN;
12386 delRecTab(k).PAY_HOLD_OVERDUE_YN:=del_rec.PAY_HOLD_OVERDUE_YN;
12387 delRecTab(k).RAISE_COMPLETION_EVENT_YN:=del_rec.RAISE_COMPLETION_EVENT_YN;
12388 delRecTab(k).del_category_code := del_rec.del_category_code;
12389 /*exhibit_code,
12390 data_item_number,
12391 price_group,
12392 estimated_price
12393 Not required as these attribute does not appear on the template
12394 */
12395 delRecTab(k).uda_template_id := del_rec.uda_template_id;
12396 delRecTab(k).schedule_type := del_rec.schedule_type;
12397 END LOOP;
12398 IF del_cur %ISOPEN THEN
12399 CLOSE del_cur ;
12400 END IF;
12401 IF p_source_doc_type = 'TEMPLATE' THEN
12402 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12403 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Source doc is template');
12404 END IF;
12405 -- copy from template to template
12406 IF p_target_doc_type = 'TEMPLATE' THEN
12407 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12408 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Target doc is template');
12409 END IF;
12410
12411 IF delRecTab.COUNT <> 0 THEN
12412 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12413 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: delRecTab Count :'||to_char(delRecTab.COUNT));
12414 END IF;
12415 FOR i IN delRecTab.FIRST..delRecTab.LAST LOOP
12416 j := j+1;
12417 -- extend table type
12418 delIdTab.extend;
12419 delIdTab(j).orig_del_id := delRecTab(i).deliverable_id;
12420 delNewTab(j) := delRecTab(i);
12421 select okc_deliverable_id_s.nextval INTO delNewTab(j).deliverable_id from dual;
12422 delIdTab(j).del_id := delNewTab(j).deliverable_id;
12423 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12424 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: New Deliverable Id :'||to_char(delNewTab(j).deliverable_id));
12425 END IF;
12426 delNewTab(j).business_document_id := p_target_doc_id;
12427 delNewTab(j).business_document_type := p_target_doc_type;
12428 delNewTab(j).business_document_number := p_target_doc_number;
12429 delNewTab(j).business_document_version := -99;
12430 delNewTab(j).created_by:= Fnd_Global.User_Id;
12431 delNewTab(j).creation_date := sysdate;
12432 delNewTab(j).last_updated_by:= Fnd_Global.User_Id;
12433 delNewTab(j).last_update_date := sysdate;
12434 delNewTab(j).last_update_login:=Fnd_Global.Login_Id;
12435
12436 END LOOP;
12437 -- bug#4083525 CopyDelForTemplateRevision
12438 IF delNewTab.COUNT <> 0 THEN
12439 FOR i IN delNewTab.FIRST..delNewTab.LAST LOOP
12440 INSERT INTO okc_deliverables
12441 (DELIVERABLE_ID,
12442 BUSINESS_DOCUMENT_TYPE ,
12443 BUSINESS_DOCUMENT_ID ,
12444 BUSINESS_DOCUMENT_NUMBER ,
12445 DELIVERABLE_TYPE ,
12446 RESPONSIBLE_PARTY ,
12447 INTERNAL_PARTY_CONTACT_ID ,
12448 EXTERNAL_PARTY_CONTACT_ID ,
12449 DELIVERABLE_NAME ,
12450 DESCRIPTION ,
12451 COMMENTS ,
12452 DISPLAY_SEQUENCE ,
12453 FIXED_DUE_DATE_YN ,
12454 ACTUAL_DUE_DATE ,
12455 PRINT_DUE_DATE_MSG_NAME ,
12456 RECURRING_YN ,
12457 NOTIFY_PRIOR_DUE_DATE_VALUE ,
12458 NOTIFY_PRIOR_DUE_DATE_UOM ,
12459 NOTIFY_PRIOR_DUE_DATE_YN ,
12460 NOTIFY_COMPLETED_YN ,
12461 NOTIFY_OVERDUE_YN ,
12462 NOTIFY_ESCALATION_YN ,
12463 NOTIFY_ESCALATION_VALUE ,
12464 NOTIFY_ESCALATION_UOM ,
12465 ESCALATION_ASSIGNEE ,
12466 AMENDMENT_OPERATION ,
12467 PRIOR_NOTIFICATION_ID ,
12468 AMENDMENT_NOTES ,
12469 COMPLETED_NOTIFICATION_ID ,
12470 OVERDUE_NOTIFICATION_ID ,
12471 ESCALATION_NOTIFICATION_ID ,
12472 LANGUAGE ,
12473 ORIGINAL_DELIVERABLE_ID ,
12474 REQUESTER_ID ,
12475 EXTERNAL_PARTY_ID ,
12476 EXTERNAL_PARTY_ROLE ,
12477 RECURRING_DEL_PARENT_ID ,
12478 BUSINESS_DOCUMENT_VERSION ,
12479 RELATIVE_ST_DATE_DURATION ,
12480 RELATIVE_ST_DATE_UOM ,
12481 RELATIVE_ST_DATE_EVENT_ID ,
12482 RELATIVE_END_DATE_DURATION ,
12483 RELATIVE_END_DATE_UOM ,
12484 RELATIVE_END_DATE_EVENT_ID ,
12485 REPEATING_DAY_OF_MONTH ,
12486 REPEATING_DAY_OF_WEEK ,
12487 REPEATING_FREQUENCY_UOM ,
12488 REPEATING_DURATION ,
12489 FIXED_START_DATE ,
12490 FIXED_END_DATE ,
12491 MANAGE_YN ,
12492 INTERNAL_PARTY_ID ,
12493 DELIVERABLE_STATUS ,
12494 STATUS_CHANGE_NOTES ,
12495 CREATED_BY ,
12496 CREATION_DATE ,
12497 LAST_UPDATED_BY ,
12498 LAST_UPDATE_DATE ,
12499 LAST_UPDATE_LOGIN ,
12500 OBJECT_VERSION_NUMBER ,
12501 ATTRIBUTE_CATEGORY ,
12502 ATTRIBUTE1 ,
12503 ATTRIBUTE2 ,
12504 ATTRIBUTE3 ,
12505 ATTRIBUTE4 ,
12506 ATTRIBUTE5 ,
12507 ATTRIBUTE6 ,
12508 ATTRIBUTE7 ,
12509 ATTRIBUTE8 ,
12510 ATTRIBUTE9 ,
12511 ATTRIBUTE10 ,
12512 ATTRIBUTE11 ,
12513 ATTRIBUTE12 ,
12514 ATTRIBUTE13 ,
12515 ATTRIBUTE14 ,
12516 ATTRIBUTE15 ,
12517 DISABLE_NOTIFICATIONS_YN ,
12518 LAST_AMENDMENT_DATE ,
12519 BUSINESS_DOCUMENT_LINE_ID ,
12520 EXTERNAL_PARTY_SITE_ID ,
12521 START_EVENT_DATE ,
12522 END_EVENT_DATE ,
12523 SUMMARY_AMEND_OPERATION_CODE,
12524 PAY_HOLD_PRIOR_DUE_DATE_VALUE,
12525 PAY_HOLD_PRIOR_DUE_DATE_UOM,
12526 PAY_HOLD_PRIOR_DUE_DATE_YN,
12527 PAY_HOLD_OVERDUE_YN,
12528 RAISE_COMPLETION_EVENT_YN,
12529 del_category_code,
12530 uda_template_id,
12531 schedule_type
12532 )
12533 VALUES (
12534 delNewTab(i).DELIVERABLE_ID,
12535 delNewTab(i).BUSINESS_DOCUMENT_TYPE ,
12536 delNewTab(i).BUSINESS_DOCUMENT_ID ,
12537 delNewTab(i).BUSINESS_DOCUMENT_NUMBER ,
12538 delNewTab(i).DELIVERABLE_TYPE ,
12539 delNewTab(i).RESPONSIBLE_PARTY ,
12540 delNewTab(i).INTERNAL_PARTY_CONTACT_ID ,
12541 delNewTab(i).EXTERNAL_PARTY_CONTACT_ID ,
12542 delNewTab(i).DELIVERABLE_NAME ,
12543 delNewTab(i).DESCRIPTION ,
12544 delNewTab(i).COMMENTS ,
12545 delNewTab(i).DISPLAY_SEQUENCE ,
12546 delNewTab(i).FIXED_DUE_DATE_YN ,
12547 delNewTab(i).ACTUAL_DUE_DATE ,
12548 delNewTab(i).PRINT_DUE_DATE_MSG_NAME ,
12549 delNewTab(i).RECURRING_YN ,
12550 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_VALUE ,
12551 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_UOM ,
12552 delNewTab(i).NOTIFY_PRIOR_DUE_DATE_YN ,
12553 delNewTab(i).NOTIFY_COMPLETED_YN ,
12554 delNewTab(i).NOTIFY_OVERDUE_YN ,
12555 delNewTab(i).NOTIFY_ESCALATION_YN ,
12556 delNewTab(i).NOTIFY_ESCALATION_VALUE ,
12557 delNewTab(i).NOTIFY_ESCALATION_UOM ,
12558 delNewTab(i).ESCALATION_ASSIGNEE ,
12559 delNewTab(i).AMENDMENT_OPERATION ,
12560 delNewTab(i).PRIOR_NOTIFICATION_ID ,
12561 delNewTab(i).AMENDMENT_NOTES ,
12562 delNewTab(i).COMPLETED_NOTIFICATION_ID ,
12563 delNewTab(i).OVERDUE_NOTIFICATION_ID ,
12564 delNewTab(i).ESCALATION_NOTIFICATION_ID ,
12565 delNewTab(i).LANGUAGE ,
12566 delNewTab(i).ORIGINAL_DELIVERABLE_ID ,
12567 delNewTab(i).REQUESTER_ID ,
12568 delNewTab(i).EXTERNAL_PARTY_ID ,
12569 delNewTab(i).EXTERNAL_PARTY_ROLE ,
12570 delNewTab(i).RECURRING_DEL_PARENT_ID ,
12571 delNewTab(i).BUSINESS_DOCUMENT_VERSION ,
12572 delNewTab(i).RELATIVE_ST_DATE_DURATION ,
12573 delNewTab(i).RELATIVE_ST_DATE_UOM ,
12574 delNewTab(i).RELATIVE_ST_DATE_EVENT_ID ,
12575 delNewTab(i).RELATIVE_END_DATE_DURATION ,
12576 delNewTab(i).RELATIVE_END_DATE_UOM ,
12577 delNewTab(i).RELATIVE_END_DATE_EVENT_ID ,
12578 delNewTab(i).REPEATING_DAY_OF_MONTH ,
12579 delNewTab(i).REPEATING_DAY_OF_WEEK ,
12580 delNewTab(i).REPEATING_FREQUENCY_UOM ,
12581 delNewTab(i).REPEATING_DURATION ,
12582 delNewTab(i).FIXED_START_DATE ,
12583 delNewTab(i).FIXED_END_DATE ,
12584 delNewTab(i).MANAGE_YN ,
12585 delNewTab(i).INTERNAL_PARTY_ID ,
12586 delNewTab(i).DELIVERABLE_STATUS ,
12587 delNewTab(i).STATUS_CHANGE_NOTES ,
12588 delNewTab(i).CREATED_BY ,
12589 delNewTab(i).CREATION_DATE ,
12590 delNewTab(i).LAST_UPDATED_BY ,
12591 delNewTab(i).LAST_UPDATE_DATE ,
12592 delNewTab(i).LAST_UPDATE_LOGIN ,
12593 delNewTab(i).OBJECT_VERSION_NUMBER ,
12594 delNewTab(i).ATTRIBUTE_CATEGORY ,
12595 delNewTab(i).ATTRIBUTE1 ,
12596 delNewTab(i).ATTRIBUTE2 ,
12597 delNewTab(i).ATTRIBUTE3 ,
12598 delNewTab(i).ATTRIBUTE4 ,
12599 delNewTab(i).ATTRIBUTE5 ,
12600 delNewTab(i).ATTRIBUTE6 ,
12601 delNewTab(i).ATTRIBUTE7 ,
12602 delNewTab(i).ATTRIBUTE8 ,
12603 delNewTab(i).ATTRIBUTE9 ,
12604 delNewTab(i).ATTRIBUTE10 ,
12605 delNewTab(i).ATTRIBUTE11 ,
12606 delNewTab(i).ATTRIBUTE12 ,
12607 delNewTab(i).ATTRIBUTE13 ,
12608 delNewTab(i).ATTRIBUTE14 ,
12609 delNewTab(i).ATTRIBUTE15 ,
12610 delNewTab(i).DISABLE_NOTIFICATIONS_YN ,
12611 delNewTab(i).LAST_AMENDMENT_DATE ,
12612 delNewTab(i).BUSINESS_DOCUMENT_LINE_ID ,
12613 delNewTab(i).EXTERNAL_PARTY_SITE_ID ,
12614 delNewTab(i).START_EVENT_DATE ,
12615 delNewTab(i).END_EVENT_DATE ,
12616 delNewTab(i).SUMMARY_AMEND_OPERATION_CODE,
12617 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_VALUE,
12618 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_UOM,
12619 delNewTab(i).PAY_HOLD_PRIOR_DUE_DATE_YN,
12620 delNewTab(i).PAY_HOLD_OVERDUE_YN,
12621 delNewTab(i).RAISE_COMPLETION_EVENT_YN,
12622 delNewTab(i).del_category_code,
12623 delNewTab(i).uda_template_id,
12624 delNewTab(i).schedule_type
12625 );
12626 copy_deliverable_udas(
12627 delNewTab(i).ORIGINAL_DELIVERABLE_ID,
12628 delNewTab(i).DELIVERABLE_ID,
12629 x_return_status,
12630 x_msg_count,
12631 x_msg_data,
12632 x_errorcode
12633 );
12634 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12635 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12636 END IF;
12637 END LOOP;
12638 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12639 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12640 '100: Done Creating Deliverables ');
12641 END IF;
12642 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12643 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12644 '100: New Deliverables COUNT :'||to_char(delIdTab.COUNT));
12645 END IF;
12646
12647 -- copy any existing attachments if allowed
12648 IF p_copy_del_attachments_yn = 'Y' THEN
12649
12650 IF delIdTab.COUNT <> 0 THEN
12651 FOR i IN delIdTab.FIRST..delIdTab.LAST LOOP
12652 -- check if attachments exists
12653 IF attachment_exists(p_entity_name => G_ENTITY_NAME
12654 ,p_pk1_value => delIdTab(i).orig_del_id) THEN
12655
12656 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12657 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12658 '100: Copy Deliverable Attachments :'||to_char(delIdTab(i).del_id));
12659 END IF;
12660 -- copy attachments
12661 -- bug#3667712 added X_CREATED_BY,X_LAST_UPDATE_LOGIN params
12662 fnd_attached_documents2_pkg.copy_attachments(
12663 X_from_entity_name => G_ENTITY_NAME,
12664 X_from_pk1_value => delIdTab(i).orig_del_id,
12665 X_to_entity_name => G_ENTITY_NAME,
12666 X_to_pk1_value => to_char(delIdTab(i).del_id),
12667 X_CREATED_BY => FND_GLOBAL.User_id,
12668 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id
12669 );
12670 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12671 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12672 '100: Done Copy Deliverable Attachments ');
12673 END IF;
12674 END IF;
12675 END LOOP;
12676 END IF;-- delIdTab.COUNT <> 0 THEN
12677 END IF; -- p_copy_del_attachments_yn = 'Y'
12678 END IF; -- delNewTab.COUNT <> 0 THEN
12679 -- bug#4083525 CopyDelForTemplateRevision
12680 END IF;-- delRecTab.count
12681 END IF; -- p_target_doc_type = 'TEMPLATE'
12682 END IF; -- p_source_doc_type = 'TEMPLATE'
12683
12684 IF del_cur %ISOPEN THEN
12685 CLOSE del_cur ;
12686 END IF;
12687 x_return_status := l_return_status;
12688 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12689 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,
12690 '100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision');
12691 END IF;
12692
12693
12694 EXCEPTION
12695 WHEN OTHERS THEN
12696 IF del_cur %ISOPEN THEN
12697 CLOSE del_cur ;
12698 END IF;
12699 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12700 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.CopyDelForTemplateRevision with G_EXC_UNEXPECTED_ERROR');
12701 END IF;
12702 x_return_status := G_RET_STS_UNEXP_ERROR;
12703 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12704 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
12705 END IF;
12706 FND_MSG_PUB.Count_And_Get(
12707 p_count => x_msg_count,
12708 p_data => x_msg_data
12709 );
12710
12711 END CopyDelForTemplateRevision;
12712
12713
12714 -- Start of comments
12715 --API name : deleteDeliverables
12716 --Type : Private.
12717 --Function : 1. Deletes deliverables of the current version of the bus doc (-99).
12718 -- : 2. If p_revert_dels = 'Y", re-creating deliverables with -99 version
12719 -- : from the deliverable definitions of the previous bus doc version.
12720 --Usage : This API is called from Repository while deleting a contract.
12721 --Pre-reqs : None.
12722 --Parameters :
12723 --IN : p_api_version IN NUMBER Required
12724 -- : p_init_msg_list IN VARCHAR2 Optional
12725 -- Default = FND_API.G_FALSE
12726 -- : p_commit IN VARCHAR2 Optional
12727 -- Default = FND_API.G_FALSE
12728 -- : p_bus_doc_id IN NUMBER Required
12729 -- Contract ID of the contract to be deleted
12730 -- : p_bus_doc_type IN VARCHAR2 Required
12731 -- Type of the contract to be deleted
12732 -- : p_bus_doc_version IN NUMBER Required
12733 -- Version number of the contract to be deleted
12734 -- : p_prev_del_active IN VARCHAR2 Optional
12735 -- Flag which tells whether deliverables of the previous business
12736 -- document version are activated or not
12737 -- Default = 'N'
12738 -- : p_revert_dels IN VARCHAR2 Optional
12739 -- Flag which tells whether to recreate the -99 deliverables from
12740 -- the previous document version's deliverables. This will be "N" if
12741 -- the first version of the business document is being deleted
12742 -- Default = 'N'
12743 --OUT : x_return_status OUT VARCHAR2(1)
12744 -- : x_msg_count OUT NUMBER
12745 -- : x_msg_data OUT VARCHAR2(2000)
12746 --Note :
12747 -- End of comments
12748 PROCEDURE deleteDeliverables(
12749 p_api_version IN NUMBER,
12750 p_init_msg_list IN VARCHAR2:=FND_API.G_FALSE,
12751 p_commit IN VARCHAR2:=FND_API.G_FALSE,
12752 p_bus_doc_id IN NUMBER,
12753 p_bus_doc_type IN VARCHAR2,
12754 p_bus_doc_version IN NUMBER,
12755 p_prev_del_active IN VARCHAR2 := 'N',
12756 p_revert_dels IN VARCHAR2 := 'N',
12757 x_msg_data OUT NOCOPY VARCHAR2,
12758 x_msg_count OUT NOCOPY NUMBER,
12759 x_return_status OUT NOCOPY VARCHAR2)
12760 IS
12761
12762 -- Cursor to get deliverable id and original deliverable ids of deliverables of
12763 -- the current version of a business document
12764 CURSOR cur_vers_del_csr IS
12765 SELECT deliverable_id,
12766 original_deliverable_id
12767 FROM okc_deliverables
12768 WHERE business_document_id = p_bus_doc_id
12769 AND business_document_version = -99
12770 AND business_document_type = p_bus_doc_type;
12771
12772 -- Cursor to get deliverables of the previous version of a business document
12773 CURSOR prev_vers_del_csr IS
12774 SELECT deliverable_id,
12775 business_document_type,
12776 business_document_id,
12777 business_document_number,
12778 deliverable_type,
12779 responsible_party,
12780 internal_party_contact_id,
12781 external_party_contact_id,
12782 deliverable_name,
12783 description,
12784 comments,
12785 display_sequence,
12786 fixed_due_date_yn,
12787 actual_due_date,
12788 print_due_date_msg_name,
12789 recurring_yn,
12790 notify_prior_due_date_value,
12791 notify_prior_due_date_uom,
12792 notify_prior_due_date_yn,
12793 notify_completed_yn,
12794 notify_overdue_yn,
12795 notify_escalation_yn,
12796 notify_escalation_value,
12797 notify_escalation_uom,
12798 escalation_assignee,
12799 amendment_operation,
12800 prior_notification_id,
12801 amendment_notes,
12802 completed_notification_id,
12803 overdue_notification_id,
12804 escalation_notification_id,
12805 language,
12806 original_deliverable_id,
12807 requester_id,
12808 external_party_id,
12809 recurring_del_parent_id,
12810 business_document_version,
12811 relative_st_date_duration,
12812 relative_st_date_uom,
12813 relative_st_date_event_id,
12814 relative_end_date_duration,
12815 relative_end_date_uom,
12816 relative_end_date_event_id,
12817 repeating_day_of_month,
12818 repeating_day_of_week,
12819 repeating_frequency_uom,
12820 repeating_duration,
12821 fixed_start_date,
12822 fixed_end_date,
12823 manage_yn,
12824 internal_party_id,
12825 deliverable_status,
12826 status_change_notes,
12827 created_by,
12828 creation_date,
12829 last_updated_by,
12830 last_update_date,
12831 last_update_login,
12832 object_version_number,
12833 attribute_category,
12834 attribute1,
12835 attribute2,
12836 attribute3,
12837 attribute4,
12838 attribute5,
12839 attribute6,
12840 attribute7,
12841 attribute8,
12842 attribute9,
12843 attribute10,
12844 attribute11,
12845 attribute12,
12846 attribute13,
12847 attribute14,
12848 attribute15,
12849 disable_notifications_yn,
12850 last_amendment_date,
12851 business_document_line_id,
12852 external_party_site_id,
12853 start_event_date,
12854 end_event_date,
12855 summary_amend_operation_code,
12856 external_party_role,
12857 pay_hold_prior_due_date_value,
12858 pay_hold_prior_due_date_uom,
12859 pay_hold_prior_due_date_yn,
12860 pay_hold_overdue_yn,
12861 raise_completion_event_yn,
12862 orig_system_reference_code,
12863 orig_system_reference_id1,
12864 orig_system_reference_id2,
12865 del_category_code,
12866 uda_template_id,
12867 schedule_type
12868 FROM okc_deliverables
12869 WHERE business_document_id = p_bus_doc_id
12870 AND business_document_version = p_bus_doc_version - 1
12871 AND business_document_type = p_bus_doc_type
12872 AND recurring_del_parent_id IS NULL
12873 AND NVL(amendment_operation, ' ') <> 'DELETED';
12874
12875
12876 -- Fix for bug 13518546 start
12877 CURSOR cur_del_doc_type(delid NUMBER) IS
12878 SELECT BUSINESS_DOCUMENT_TYPE FROM okc_deliverables
12879 WHERE deliverable_id=delid;
12880
12881 l_business_document_type okc_deliverables.business_document_type%TYPE;
12882
12883 -- Fix for bug 13518546 end
12884
12885 TYPE cur_vers_del_tbl IS TABLE OF cur_vers_del_csr%ROWTYPE;
12886 TYPE prev_vers_del_tbl IS TABLE OF prev_vers_del_csr%ROWTYPE;
12887
12888 cur_vers_del cur_vers_del_tbl;
12889 prev_vers_del prev_vers_del_tbl;
12890
12891 l_api_name CONSTANT VARCHAR2(30) :='deleteDeliverables';
12892 l_api_version CONSTANT NUMBER := 1.0;
12893 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
12894
12895 l_deliverable_id okc_deliverables.deliverable_id%TYPE;
12896 x_errorcode NUMBER;
12897
12898 BEGIN
12899
12900 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12901 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Enterred OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
12902 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_id: '|| to_char(p_bus_doc_id));
12903 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_version: '|| to_char(p_bus_doc_version));
12904 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_bus_doc_type: '|| p_bus_doc_type);
12905 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_prev_del_active: '|| p_prev_del_active);
12906 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'p_revert_dels: '|| p_revert_dels);
12907 END IF;
12908
12909 -- Standard call to check for call compatibility.
12910 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
12911 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12912 END IF;
12913
12914 -- Initialize message list if p_init_msg_list is set to TRUE.
12915 IF FND_API.to_Boolean( p_init_msg_list ) THEN
12916 FND_MSG_PUB.initialize;
12917 END IF;
12918
12919 -- If the flag p_revert_dels is "N" then this API is called to delete
12920 -- deliverables with business document version of -99
12921 IF (p_revert_dels = 'N') THEN
12922
12923 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12924 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12925 'Deleting deliverables with document version equal to -99');
12926 END IF;
12927
12928 delete_deliverables(p_api_version => 1.0,
12929 p_init_msg_list => FND_API.G_FALSE,
12930 p_doc_id => p_bus_doc_id,
12931 p_doc_type => p_bus_doc_type,
12932 p_doc_version => -99,
12933 x_return_status => x_return_status,
12934 x_msg_count => x_msg_count,
12935 x_msg_data => x_msg_data);
12936
12937 -----------------------------------------------------
12938 IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
12939 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
12940 ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
12941 RAISE OKC_API.G_EXCEPTION_ERROR;
12942 END IF;
12943 --------------------------------------------------------
12944
12945 ELSE
12946 -- If the flag p_revert_dels is not "N" then this API is called to delete
12947 -- the -99 deliverables and then recreate those deliverables using previous
12948 -- business document version's deliverables.
12949 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12950 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12951 'Getting ids of the deliverables with document version number equal to -99');
12952 END IF;
12953
12954 OPEN cur_vers_del_csr;
12955 FETCH cur_vers_del_csr BULK COLLECT INTO cur_vers_del;
12956 CLOSE cur_vers_del_csr;
12957
12958 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12959 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12960 'Deleting deliverables with document version equal to -99');
12961 END IF;
12962
12963 delete_deliverables(p_api_version => 1.0,
12964 p_init_msg_list => FND_API.G_FALSE,
12965 p_doc_id => p_bus_doc_id,
12966 p_doc_type => p_bus_doc_type,
12967 p_doc_version => -99,
12968 x_return_status => x_return_status,
12969 x_msg_count => x_msg_count,
12970 x_msg_data => x_msg_data);
12971
12972 -----------------------------------------------------
12973 IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
12974 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
12975 ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
12976 RAISE OKC_API.G_EXCEPTION_ERROR;
12977 END IF;
12978 --------------------------------------------------------
12979
12980 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12981 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12982 'Getting deliverables of the previous version');
12983 END IF;
12984
12985 OPEN prev_vers_del_csr;
12986 FETCH prev_vers_del_csr BULK COLLECT INTO prev_vers_del;
12987 CLOSE prev_vers_del_csr;
12988
12989 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
12990 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12991 'prev_vers_del.COUNT ' || prev_vers_del.COUNT);
12992 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
12993 'cur_vers_del.COUNT ' || cur_vers_del.COUNT);
12994 END IF;
12995
12996 IF (prev_vers_del.COUNT > 0) THEN
12997
12998 -- Iterate through the the array of previous business document version deliverables
12999 -- and clone each row in the array by inserting one deliverable with -99
13000 -- business document version. So that the state of the deliverables will
13001 -- be reverted back to that state before creating the new version of the business document
13002 FOR i IN prev_vers_del.FIRST..NVL(prev_vers_del.LAST, -1) LOOP
13003
13004 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13005 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13006 'prev_vers_del(' || i || ').original_deliverable_id ' || prev_vers_del(i).original_deliverable_id);
13007 END IF;
13008
13009 -- Iterate through the array of -99 deliverables to get corresponding deliverable id of the
13010 -- deliverable in the context using their original deliverable id
13011 -- This deliverable id will be used as id for the deliverable being inserted, so that we don't
13012 -- loose the deliverable id and also to ensure data integrity
13013 IF (cur_vers_del.COUNT > 0) THEN
13014
13015 FOR j IN cur_vers_del.FIRST..NVL(cur_vers_del.LAST, -1) LOOP
13016
13017 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13018 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13019 'cur_vers_del(' || j || ').original_deliverable_id ' || cur_vers_del(j).original_deliverable_id);
13020 END IF;
13021
13022 -- Original deliverable id is used to find corresponding deliverable with -99 version of
13023 -- the deliverable in the context
13024 IF (cur_vers_del(j).original_deliverable_id = prev_vers_del(i).original_deliverable_id) THEN
13025 l_deliverable_id := cur_vers_del(j).deliverable_id;
13026
13027 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13028 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13029 'l_deliverable_id ' || l_deliverable_id);
13030 END IF;
13031
13032 EXIT;
13033 END IF;
13034
13035 END LOOP;
13036 END IF;
13037
13038 -- Fix for bug 13518546 start
13039 IF(l_deliverable_id IS NULL) THEN
13040 OPEN cur_del_doc_type(prev_vers_del(i).original_deliverable_id);
13041 FETCH cur_del_doc_type INTO l_business_document_type;
13042 CLOSE cur_del_doc_type;
13043 IF(l_business_document_type='TEMPLATE') THEN
13044 select okc_deliverable_id_s.nextval INTO l_deliverable_id from dual;
13045 ELSE
13046 l_deliverable_id:=prev_vers_del(i).original_deliverable_id;
13047 END IF;
13048 END IF ;
13049 -- Fix for bug 13518546 end
13050
13051 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13052 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13053 'Setting default values for some of the columns');
13054 END IF;
13055
13056 -- Set default value for some of the columns, which are resolved during amendment process
13057 -- and whose values are supposed to be NULL or some default value for the current
13058 -- business document version deliverables i.e. -99 version deliverables
13059 prev_vers_del(i).actual_due_date := NULL;
13060 prev_vers_del(i).object_version_number := 0;
13061 prev_vers_del(i).start_event_date := NULL;
13062 prev_vers_del(i).end_event_date := NULL;
13063
13064 IF (p_prev_del_active = 'Y') THEN
13065
13066 -- Set default value for some more columns as we're using deliverable definitions
13067 -- of the previous business document version which might have activated and some of
13068 -- the columns are populated, which are supposed to be either NULL or some default
13069 -- value for the current business document version deliverables i.e. -99 version deliverables
13070 prev_vers_del(i).prior_notification_id := NULL;
13071 prev_vers_del(i).amendment_operation := NULL;
13072 prev_vers_del(i).completed_notification_id := NULL;
13073 prev_vers_del(i).overdue_notification_id := NULL;
13074 prev_vers_del(i).escalation_notification_id := NULL;
13075 prev_vers_del(i).manage_yn := 'N';
13076 prev_vers_del(i).deliverable_status := 'INACTIVE';
13077 prev_vers_del(i).summary_amend_operation_code := NULL;
13078 prev_vers_del(i).last_amendment_date := NULL;
13079
13080 END IF;
13081
13082
13083 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13084 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13085 'Inserting a Deliverable with deliverable id ' || l_deliverable_id);
13086 END IF;
13087
13088 -- Insert a row into okc_deliverables with id of the deleted deliverable
13089 -- and with other values with its corresponding previous version deliverable
13090 INSERT INTO okc_deliverables (
13091 deliverable_id,
13092 business_document_type,
13093 business_document_id,
13094 business_document_number,
13095 deliverable_type,
13096 responsible_party,
13097 internal_party_contact_id,
13098 external_party_contact_id,
13099 deliverable_name,
13100 description,
13101 comments,
13102 display_sequence,
13103 fixed_due_date_yn,
13104 actual_due_date,
13105 print_due_date_msg_name,
13106 recurring_yn,
13107 notify_prior_due_date_value,
13108 notify_prior_due_date_uom,
13109 notify_prior_due_date_yn,
13110 notify_completed_yn,
13111 notify_overdue_yn,
13112 notify_escalation_yn,
13113 notify_escalation_value,
13114 notify_escalation_uom,
13115 escalation_assignee,
13116 amendment_operation,
13117 prior_notification_id,
13118 amendment_notes,
13119 completed_notification_id,
13120 overdue_notification_id,
13121 escalation_notification_id,
13122 language,
13123 original_deliverable_id,
13124 requester_id,
13125 external_party_id,
13126 recurring_del_parent_id,
13127 business_document_version,
13128 relative_st_date_duration,
13129 relative_st_date_uom,
13130 relative_st_date_event_id,
13131 relative_end_date_duration,
13132 relative_end_date_uom,
13133 relative_end_date_event_id,
13134 repeating_day_of_month,
13135 repeating_day_of_week,
13136 repeating_frequency_uom,
13137 repeating_duration,
13138 fixed_start_date,
13139 fixed_end_date,
13140 manage_yn,
13141 internal_party_id,
13142 deliverable_status,
13143 status_change_notes,
13144 created_by,
13145 creation_date,
13146 last_updated_by,
13147 last_update_date,
13148 last_update_login,
13149 object_version_number,
13150 attribute_category,
13151 attribute1,
13152 attribute2,
13153 attribute3,
13154 attribute4,
13155 attribute5,
13156 attribute6,
13157 attribute7,
13158 attribute8,
13159 attribute9,
13160 attribute10,
13161 attribute11,
13162 attribute12,
13163 attribute13,
13164 attribute14,
13165 attribute15,
13166 disable_notifications_yn,
13167 last_amendment_date,
13168 business_document_line_id,
13169 external_party_site_id,
13170 start_event_date,
13171 end_event_date,
13172 summary_amend_operation_code,
13173 external_party_role,
13174 pay_hold_prior_due_date_value,
13175 pay_hold_prior_due_date_uom,
13176 pay_hold_prior_due_date_yn,
13177 pay_hold_overdue_yn,
13178 raise_completion_event_yn,
13179 orig_system_reference_code, orig_system_reference_id1, orig_system_reference_id2, del_category_code,
13180 uda_template_id ,schedule_type
13181 )
13182 VALUES( l_deliverable_id,
13183 prev_vers_del(i).business_document_type,
13184 prev_vers_del(i).business_document_id,
13185 prev_vers_del(i).business_document_number,
13186 prev_vers_del(i).deliverable_type,
13187 prev_vers_del(i).responsible_party,
13188 prev_vers_del(i).internal_party_contact_id,
13189 prev_vers_del(i).external_party_contact_id,
13190 prev_vers_del(i).deliverable_name,
13191 prev_vers_del(i).description,
13192 prev_vers_del(i).comments,
13193 prev_vers_del(i).display_sequence,
13194 prev_vers_del(i).fixed_due_date_yn,
13195 prev_vers_del(i).actual_due_date,
13196 prev_vers_del(i).print_due_date_msg_name,
13197 prev_vers_del(i).recurring_yn,
13198 prev_vers_del(i).notify_prior_due_date_value,
13199 prev_vers_del(i).notify_prior_due_date_uom,
13200 prev_vers_del(i).notify_prior_due_date_yn,
13201 prev_vers_del(i).notify_completed_yn,
13202 prev_vers_del(i).notify_overdue_yn,
13203 prev_vers_del(i).notify_escalation_yn,
13204 prev_vers_del(i).notify_escalation_value,
13205 prev_vers_del(i).notify_escalation_uom,
13206 prev_vers_del(i).escalation_assignee,
13207 prev_vers_del(i).amendment_operation,
13208 prev_vers_del(i).prior_notification_id,
13209 prev_vers_del(i).amendment_notes,
13210 prev_vers_del(i).completed_notification_id,
13211 prev_vers_del(i).overdue_notification_id,
13212 prev_vers_del(i).escalation_notification_id,
13213 prev_vers_del(i).language,
13214 prev_vers_del(i).original_deliverable_id,
13215 prev_vers_del(i).requester_id,
13216 prev_vers_del(i).external_party_id,
13217 prev_vers_del(i).recurring_del_parent_id,
13218 -99,
13219 prev_vers_del(i).relative_st_date_duration,
13220 prev_vers_del(i).relative_st_date_uom,
13221 prev_vers_del(i).relative_st_date_event_id,
13222 prev_vers_del(i).relative_end_date_duration,
13223 prev_vers_del(i).relative_end_date_uom,
13224 prev_vers_del(i).relative_end_date_event_id,
13225 prev_vers_del(i).repeating_day_of_month,
13226 prev_vers_del(i).repeating_day_of_week,
13227 prev_vers_del(i).repeating_frequency_uom,
13228 prev_vers_del(i).repeating_duration,
13229 prev_vers_del(i).fixed_start_date,
13230 prev_vers_del(i).fixed_end_date,
13231 prev_vers_del(i).manage_yn,
13232 prev_vers_del(i).internal_party_id,
13233 prev_vers_del(i).deliverable_status,
13234 prev_vers_del(i).status_change_notes,
13235 prev_vers_del(i).created_by,
13236 prev_vers_del(i).creation_date,
13237 prev_vers_del(i).last_updated_by,
13238 prev_vers_del(i).last_update_date,
13239 prev_vers_del(i).last_update_login,
13240 prev_vers_del(i).object_version_number,
13241 prev_vers_del(i).attribute_category,
13242 prev_vers_del(i).attribute1,
13243 prev_vers_del(i).attribute2,
13244 prev_vers_del(i).attribute3,
13245 prev_vers_del(i).attribute4,
13246 prev_vers_del(i).attribute5,
13247 prev_vers_del(i).attribute6,
13248 prev_vers_del(i).attribute7,
13249 prev_vers_del(i).attribute8,
13250 prev_vers_del(i).attribute9,
13251 prev_vers_del(i).attribute10,
13252 prev_vers_del(i).attribute11,
13253 prev_vers_del(i).attribute12,
13254 prev_vers_del(i).attribute13,
13255 prev_vers_del(i).attribute14,
13256 prev_vers_del(i).attribute15,
13257 prev_vers_del(i).disable_notifications_yn,
13258 prev_vers_del(i).last_amendment_date,
13259 prev_vers_del(i).business_document_line_id,
13260 prev_vers_del(i).external_party_site_id,
13261 prev_vers_del(i).start_event_date,
13262 prev_vers_del(i).end_event_date,
13263 prev_vers_del(i).summary_amend_operation_code,
13264 prev_vers_del(i).external_party_role,
13265 prev_vers_del(i).pay_hold_prior_due_date_value,
13266 prev_vers_del(i).pay_hold_prior_due_date_uom,
13267 prev_vers_del(i).pay_hold_prior_due_date_yn,
13268 prev_vers_del(i).pay_hold_overdue_yn,
13269 prev_vers_del(i).raise_completion_event_yn,
13270 prev_vers_del(i).orig_system_reference_code,
13271 prev_vers_del(i).orig_system_reference_id1,
13272 prev_vers_del(i).orig_system_reference_id2,
13273 prev_vers_del(i).del_category_code,
13274 prev_vers_del(i).uda_template_id,
13275 prev_vers_del(i).schedule_type);
13276 copy_deliverable_udas(
13277 prev_vers_del(i).orig_system_reference_id1,
13278 l_deliverable_id,
13279 x_return_status,
13280 x_msg_count,
13281 x_msg_data,
13282 x_errorcode
13283 );
13284 if x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13285 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13286 END IF;
13287
13288
13289 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13290 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13291 'Copying attachments from deliverable with id ' || to_char(prev_vers_del(i).deliverable_id) || ' to ' || to_char(l_deliverable_id));
13292 END IF;
13293
13294 -- Copy attachments from prev version deliverable to current version deliverable
13295 fnd_attached_documents2_pkg.copy_attachments(
13296 X_from_entity_name => G_ENTITY_NAME,
13297 X_from_pk1_value => to_char(prev_vers_del(i).deliverable_id),
13298 X_to_entity_name => G_ENTITY_NAME,
13299 X_to_pk1_value => to_char(l_deliverable_id),
13300 X_CREATED_BY => FND_GLOBAL.User_id,
13301 X_LAST_UPDATE_LOGIN => Fnd_Global.Login_Id);
13302
13303 -- Fix for bug 13518546 start
13304 l_deliverable_id := NULL;
13305 -- Fix for bug 13518546 end
13306
13307 END LOOP;
13308
13309 END IF;
13310
13311 IF (p_prev_del_active = 'N') THEN
13312
13313 -- Since the deliverables of the current contract are not yet activated
13314 --we can safely delete those deliverables with previous business document version number
13315 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13316 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13317 'Deliverables of the current contract are not activated yet');
13318 END IF;
13319
13320 -- Delete the deliverables created with previous business document version number
13321 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13322 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
13323 'Deleting deliverables with document version equal to' || to_char(p_bus_doc_version - 1));
13324 END IF;
13325
13326 delete_deliverables(p_api_version => 1.0,
13327 p_init_msg_list => FND_API.G_FALSE,
13328 p_doc_id => p_bus_doc_id,
13329 p_doc_type => p_bus_doc_type,
13330 p_doc_version => p_bus_doc_version - 1,
13331 x_return_status => x_return_status,
13332 x_msg_count => x_msg_count,
13333 x_msg_data => x_msg_data);
13334
13335 -----------------------------------------------------
13336 IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
13337 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
13338 ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
13339 RAISE OKC_API.G_EXCEPTION_ERROR;
13340 END IF;
13341 --------------------------------------------------------
13342
13343 END IF; -- End of (p_prev_del_active = 'N')
13344
13345 END IF; -- End of (p_revert_dels = 'N')
13346
13347
13348
13349 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13350 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers');
13351 END IF;
13352
13353
13354 EXCEPTION
13355
13356 WHEN OTHERS THEN
13357
13358 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13359 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'Leaving OKC_DELIVERABLE_PROCESS_PVT.RestoreDelsToPrevDocVers with G_EXC_UNEXPECTED_ERROR');
13360 END IF;
13361
13362 IF prev_vers_del_csr %ISOPEN THEN
13363 CLOSE prev_vers_del_csr;
13364 END IF;
13365
13366 IF cur_vers_del_csr %ISOPEN THEN
13367 CLOSE cur_vers_del_csr;
13368 END IF;
13369
13370 x_return_status := G_RET_STS_UNEXP_ERROR;
13371
13372 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13373 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
13374 END IF;
13375
13376 FND_MSG_PUB.Count_And_Get(
13377 p_count => x_msg_count,
13378 p_data => x_msg_data
13379 );
13380
13381
13382 END deleteDeliverables;
13383
13384 /** This procedure will delete the deliverable attachments and deliverbale status history.
13385 This will be claled from DeliverableEOImpl.java remove method() where the deliverbale gets deleted in the remoev method
13386 and thsi method will be called to remove its corresponding attachments and history
13387 */
13388
13389 PROCEDURE delete_del_attach_and_history (
13390 p_api_version IN NUMBER,
13391 p_init_msg_list IN VARCHAR2,
13392 p_del_id IN NUMBER,
13393 x_msg_data OUT NOCOPY VARCHAR2,
13394 x_msg_count OUT NOCOPY NUMBER,
13395 x_return_status OUT NOCOPY VARCHAR2
13396 )
13397 IS
13398
13399 l_result VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
13400 l_api_name VARCHAR2(30) :='delete_del_attach_and_history';
13401
13402 BEGIN
13403
13404 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13405 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history'||to_char(p_del_id));
13406 END IF;
13407 -- delete deliverables status history
13408 DELETE FROM okc_del_status_history
13409 WHERE deliverable_id = p_del_id;
13410 -- delete attachments if any
13411 delete_attachments (
13412 p_entity_name => G_ENTITY_NAME
13413 ,p_pk1_value => p_del_id
13414 ,x_result => l_result);
13415 x_return_status := l_result;
13416 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13417 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history');
13418 END IF;
13419
13420 EXCEPTION
13421 WHEN FND_API.G_EXC_ERROR THEN
13422 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13423 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_ERROR');
13424 END IF;
13425 x_return_status := G_RET_STS_ERROR;
13426 FND_MSG_PUB.Count_And_Get(
13427 p_count => x_msg_count,
13428 p_data => x_msg_data
13429 );
13430
13431 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13432 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13433 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_UNEXPECTED_ERROR');
13434 END IF;
13435 x_return_status := G_RET_STS_UNEXP_ERROR;
13436 FND_MSG_PUB.Count_And_Get(
13437 p_count => x_msg_count,
13438 p_data => x_msg_data
13439 );
13440
13441 WHEN OTHERS THEN
13442 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13443 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'100: leaving OKC_DELIVERABLE_PROCESS_PVT.delete_del_attach_and_history with G_EXC_UNEXPECTED_ERROR');
13444 END IF;
13445 x_return_status := G_RET_STS_UNEXP_ERROR;
13446 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13447 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
13448 END IF;
13449 FND_MSG_PUB.Count_And_Get(
13450 p_count => x_msg_count,
13451 p_data => x_msg_data
13452 );
13453
13454 END delete_del_attach_and_history;
13455
13456 /*
13457 params: p_source_id: source deliverable id from which uda data is copied.
13458 p_target_id: target deliverable id to which uda data is copied to.
13459 */
13460 PROCEDURE copy_deliverable_udas(
13461 p_source_id IN NUMBER,
13462 p_target_id IN NUMBER,
13463 x_return_status OUT NOCOPY VARCHAR2,
13464 x_msg_count OUT NOCOPY NUMBER,
13465 x_msg_data OUT NOCOPY VARCHAR2,
13466 x_errorcode OUT NOCOPY NUMBER
13467 ) IS
13468 from_pk_col_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
13469 to_pk_col_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
13470 l_api_name VARCHAR2(30) :='copy_deliverable_udas';
13471 l_object_id fnd_objects.object_id%TYPE;
13472 l_dtlevel_col_value_pairs ego_col_name_value_pair_array;
13473 l_main_data_level_id ego_data_level_b.data_level_id%TYPE;
13474
13475 BEGIN
13476
13477 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13478 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Inside copy_deliverable_udas with params source id:'||
13479 p_source_id || ' and target id: ' || p_target_id );
13480 END IF;
13481 from_pk_col_value_pairs := ego_col_name_value_pair_array(ego_col_name_value_pair_obj ('DELIVERABLE_ID',p_source_id));
13482 to_pk_col_value_pairs := ego_col_name_value_pair_array(ego_col_name_value_pair_obj ('DELIVERABLE_ID',p_target_id));
13483
13484 BEGIN
13485 SELECT object_id
13486 INTO l_object_id
13487 FROM fnd_objects
13488 WHERE obj_name = 'OKC_DELIVERABLE';
13489
13490 SELECT data_level_id
13491 INTO l_main_data_level_id
13492 FROM ego_data_level_b
13493 WHERE attr_group_type = 'OKC_DELIVERABLES_EXT_ATTRS';
13494 EXCEPTION
13495 WHEN OTHERS
13496 THEN
13497 RAISE;
13498 END;
13499
13500 l_dtlevel_col_value_pairs :=
13501 ego_col_name_value_pair_array (ego_col_name_value_pair_obj ('PK1_VALUE',NULL));
13502
13503
13504 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13505 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'110: Calling ego_user_attrs_data_pvt.copy_user_attrs_data');
13506 END IF;
13507
13508 ego_user_attrs_data_pvt.copy_user_attrs_data
13509 (p_api_version => 1.0,
13510 p_application_id => 510,
13511 p_object_id => l_object_id,
13512 p_object_name => 'OKC_DELIVERABLE',
13513 p_old_pk_col_value_pairs => from_pk_col_value_pairs,
13514 p_old_data_level_id => l_main_data_level_id,
13515 p_old_dtlevel_col_value_pairs => l_dtlevel_col_value_pairs,
13516 p_new_pk_col_value_pairs => to_pk_col_value_pairs,
13517 p_new_data_level_id => l_main_data_level_id,
13518 p_new_dtlevel_col_value_pairs => l_dtlevel_col_value_pairs,
13519 p_commit => fnd_api.g_false,
13520 x_return_status => x_return_status,
13521 x_errorcode => x_errorcode,
13522 x_msg_count => x_msg_count,
13523 x_msg_data => x_msg_data
13524 );
13525
13526 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
13527 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'120: Completed ego_user_attrs_data_pvt.copy_user_attrs_data with status'
13528 || x_return_status);
13529 END IF;
13530
13531
13532 END copy_deliverable_udas;
13533
13534 FUNCTION getDaysDueDateMsgText(
13535 p_relative_st_date_event_id NUMBER
13536 ,p_relative_end_date_event_id NUMBER
13537 ,p_relative_st_date_duration NUMBER --&START_NUM
13538 ,p_relative_st_date_uom VARCHAR2 -- &START_D_W_M
13539 ,p_relative_end_date_uom VARCHAR2 -- &END_D_W_M
13540 ,p_relative_end_date_duration NUMBER -- &END_NUM
13541 ,p_repeating_duration NUMBER -- &NUM_DAYS
13542 ,p_print_due_date_msg_name VARCHAR2
13543 ,p_fixed_start_date DATE -- &FIXED_START_DATE
13544 ,p_fixed_end_date DATE -- &FIXED_END_DATE
13545 ) RETURN VARCHAR2
13546 is
13547
13548 CURSOR event_cur(x number) is
13549 select before_after,event_name
13550 from okc_bus_doc_events_v
13551 where bus_doc_event_id = x;
13552 l_st_event_rec event_cur%ROWTYPE;
13553 l_end_event_rec event_cur%ROWTYPE;
13554
13555 l_st_ba VARCHAR2(100);
13556 l_end_ba VARCHAR2(100);
13557
13558 l_st_date_uom VARCHAR2(100);
13559 l_end_date_uom VARCHAR2(100);
13560
13561 l_st_event VARCHAR2(80);
13562 l_end_event VARCHAR2(80);
13563
13564
13565 l_msg varchar2(500);
13566 l_repeating_duration number;
13567
13568 BEGIN
13569
13570 IF p_relative_st_date_event_id is not null THEN
13571 OPEN event_cur(p_relative_st_date_event_id);
13572 FETCH event_cur INTO l_st_event_rec;
13573 CLOSE event_cur;
13574
13575
13576 l_st_event := l_st_event_rec.event_name;
13577
13578 IF (l_st_event_rec.before_after='B') THEN
13579 l_st_ba := OKC_TERMS_UTIL_PVT.Get_Message(
13580 p_app_name => 'OKC'
13581 ,p_msg_name => 'OKC_DEL_BEFORE_TOKEN'
13582 );
13583
13584 ELSIF (l_st_event_rec.before_after='A') THEN
13585 l_st_ba := OKC_TERMS_UTIL_PVT.Get_Message(
13586 p_app_name => 'OKC'
13587 ,p_msg_name => 'OKC_DEL_AFTER_TOKEN'
13588 );
13589 END IF;
13590 END IF;
13591
13592 IF p_relative_end_date_event_id is not null THEN
13593 OPEN event_cur(p_relative_end_date_event_id);
13594 FETCH event_cur INTO l_end_event_rec;
13595 CLOSE event_cur;
13596
13597 l_end_event := l_end_event_rec.event_name;
13598
13599
13600 IF (l_end_event_rec.before_after='B') THEN
13601 l_end_ba := OKC_TERMS_UTIL_PVT.Get_Message(
13602 p_app_name => 'OKC'
13603 ,p_msg_name => 'OKC_DEL_BEFORE_TOKEN'
13604 );
13605 ELSIF (l_end_event_rec.before_after='A') THEN
13606 l_end_ba := OKC_TERMS_UTIL_PVT.Get_Message(
13607 p_app_name => 'OKC'
13608 ,p_msg_name => 'OKC_DEL_AFTER_TOKEN'
13609 );
13610 END IF;
13611 END IF;
13612
13613 IF p_relative_st_date_uom IS NOT NULL THEN
13614
13615 IF (p_relative_st_date_uom like 'MTH%') THEN
13616 l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13617 p_app_name => 'OKC'
13618 ,p_msg_name => 'OKC_DEL_MONTHS_TOKEN'
13619 );
13620 ELSIF (p_relative_st_date_uom like 'WK%') THEN
13621 l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13622 p_app_name => 'OKC'
13623 ,p_msg_name => 'OKC_DEL_WEEKS_TOKEN'
13624 );
13625 ELSIF (p_relative_st_date_uom like 'DAY%') THEN
13626 l_st_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13627 p_app_name => 'OKC'
13628 ,p_msg_name => 'OKC_DEL_DAYS_TOKEN'
13629 );
13630 END IF;
13631 END IF;
13632
13633 IF p_relative_end_date_uom IS NOT NULL THEN
13634
13635 IF (p_relative_end_date_uom like 'MTH%') THEN
13636 l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13637 p_app_name => 'OKC'
13638 ,p_msg_name => 'OKC_DEL_MONTH_TOKEN'
13639 );
13640 ELSIF (p_relative_end_date_uom like 'WK%') THEN
13641 l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13642 p_app_name => 'OKC'
13643 ,p_msg_name => 'OKC_DEL_WEEK_TOKEN'
13644 );
13645 ELSIF (p_relative_end_date_uom like 'DAY%') THEN
13646 l_end_date_uom := OKC_TERMS_UTIL_PVT.Get_Message(
13647 p_app_name => 'OKC'
13648 ,p_msg_name => 'OKC_DEL_DAY_TOKEN'
13649 );
13650 END IF;
13651 END IF;
13652
13653 -- If duration is less than or equal to 1 then don't pass the token value
13654 if p_repeating_duration = 1 THEN
13655 l_repeating_duration := null;
13656 elsif p_repeating_duration = 0 THEN
13657 l_repeating_duration := null;
13658 else
13659 l_repeating_duration := p_repeating_duration;
13660 end if;
13661
13662 -- Case 1, both start and end dates are fixed
13663 IF p_relative_st_date_event_id IS NULL AND p_relative_end_date_event_id IS NULL THEN
13664 l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
13665 p_app_name => 'OKC'
13666 ,p_msg_name => 'OKC_DEL_RD_FS_FE'
13667 ,p_token1 => 'FREQ_NUM'
13668 ,p_token1_value => l_repeating_duration
13669 ,p_token2 => 'FIXED_START_DATE'
13670 ,p_token2_value => p_fixed_start_date
13671 ,p_token3 => 'FIXED_END_DATE'
13672 ,p_token3_value => p_fixed_end_date
13673 );
13674 ELSIF p_relative_st_date_event_id IS NULL AND p_relative_end_date_event_id IS NOT NULL
13675 THEN
13676 l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
13677 p_app_name => 'OKC'
13678 ,p_msg_name => 'OKC_DEL_RD_FS_RE'
13679 ,p_token1 => 'FREQ_NUM'
13680 ,p_token1_value => l_repeating_duration
13681 ,p_token2 => 'FIXED_START_DATE'
13682 ,p_token2_value => p_fixed_start_date
13683 ,p_token3 => 'END_NUM'
13684 ,p_token3_value => p_relative_end_date_duration
13685 ,p_token4 => 'END_D_W_M'
13686 ,p_token4_value => l_end_date_uom
13687 ,p_token5 => 'END_BA'
13688 ,p_token5_value => l_end_ba
13689 ,p_token6 => 'END_EVENT'
13690 ,p_token6_value => l_end_event
13691 );
13692 ELSIF p_relative_st_date_event_id IS NOT NULL AND p_relative_end_date_event_id IS NULL
13693 THEN
13694
13695 l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
13696 p_app_name => 'OKC'
13697 ,p_msg_name => 'OKC_DEL_RD_FS_RE'
13698 ,p_token1 => 'FREQ_NUM'
13699 ,p_token1_value => l_repeating_duration
13700 ,p_token2 => 'START_NUM'
13701 ,p_token2_value => p_relative_st_date_duration
13702 ,p_token3 => 'START_D_W_M'
13703 ,p_token3_value => l_st_date_uom
13704 ,p_token4 => 'START_BA'
13705 ,p_token4_value => l_st_ba
13706 ,p_token5 => 'START_EVENT'
13707 ,p_token5_value => l_st_event
13708 ,p_token6 => 'FIXED_END_DATE'
13709 ,p_token7 => p_fixed_end_date
13710 );
13711
13712
13713 ELSIF p_relative_st_date_event_id IS NOT NULL AND p_relative_end_date_event_id IS NOT NULL THEN
13714
13715 l_msg := OKC_TERMS_UTIL_PVT.Get_Message(
13716 p_app_name => 'OKC'
13717 ,p_msg_name => 'OKC_DEL_RD_RS_RE'
13718 ,p_token1 => 'FREQ_NUM'
13719 ,p_token1_value => l_repeating_duration
13720 ,p_token2 => 'START_NUM'
13721 ,p_token2_value => p_relative_st_date_duration
13722 ,p_token3 => 'START_D_W_M'
13723 ,p_token3_value => l_st_date_uom
13724 ,p_token4 => 'START_BA'
13725 ,p_token4_value => l_st_ba
13726 ,p_token5 => 'START_EVENT'
13727 ,p_token5_value => l_st_event
13728 ,p_token6 => 'END_NUM'
13729 ,p_token6_value => p_relative_end_date_duration
13730 ,p_token7 => 'END_D_W_M'
13731 ,p_token7_value => l_end_date_uom
13732 ,p_token8 => 'END_BA'
13733 ,p_token8_value => l_end_ba
13734 ,p_token9 => 'END_EVENT'
13735 ,p_token9_value => l_end_event
13736 );
13737
13738 END IF;
13739
13740
13741 -- Repeats every &NUM_DAYS days starting &FIXED_START_DATE until &FIXED_END_DATE
13742 -- OKC_DEL_RD_FS_FE
13743
13744 -- Repeats every &NUM_DAYS days starting &FIXED_START_DATE until &END_NUM &END_D_W_M &END_BA &END_EVENT
13745 -- OKC_DEL_RD_FS_RE
13746
13747 -- Repeats every &NUM_DAYS days starting &START_NUM &START_D_W_M &START_BA &STRT_EVENT until &FIXED_END_DATE
13748 -- OKC_DEL_RD_RS_FE
13749
13750 -- Repeats every &NUM_DAYS days starting &START_NUM &START_D_W_M &START_BA &STRT_EVENT until &END_NUM &D_W_M &BA &END_EVENT
13751 -- OKC_DEL_RD_RS_RE
13752
13753 RETURN l_msg;
13754 END getDaysDueDateMsgText;
13755
13756
13757
13758 /**************************/
13759 END OKC_DELIVERABLE_PROCESS_PVT;