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