[Home] [Help]
PACKAGE BODY: APPS.OKC_TERMS_MIGRATE_GRP
Source
1 PACKAGE BODY okc_terms_migrate_grp AS
2 /* $Header: OKCGTMGB.pls 120.8.12020000.11 2013/02/26 12:42:10 aksgoyal ship $ */
3
4 ---------------------------------------------------------------------------
5 -- GLOBAL MESSAGE CONSTANTS
6 ---------------------------------------------------------------------------
7 G_FND_APP CONSTANT VARCHAR2(200) := OKC_API.G_FND_APP;
8 ---------------------------------------------------------------------------
9 -- GLOBAL VARIABLES
10 ---------------------------------------------------------------------------
11 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKC_TERMS_COPY_GRP';
12 G_APP_NAME CONSTANT VARCHAR2(3) := OKC_API.G_APP_NAME;
13
14 ------------------------------------------------------------------------------
15 -- GLOBAL CONSTANTS
16 ------------------------------------------------------------------------------
17 G_MODULE CONSTANT VARCHAR2(250) := 'okc.plsql.'||g_pkg_name||'.';
18 G_FALSE CONSTANT VARCHAR2(1) := FND_API.G_FALSE;
19 G_TRUE CONSTANT VARCHAR2(1) := FND_API.G_TRUE;
20
21 G_RET_STS_SUCCESS CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
22 G_RET_STS_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_ERROR;
23 G_RET_STS_UNEXP_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
24
25 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKC_UNEXPECTED_ERROR';
26 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'ERROR_MESSAGE';
27 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'ERROR_CODE';
28 G_UNABLE_TO_RESERVE_REC CONSTANT VARCHAR2(200) := OKC_API.G_UNABLE_TO_RESERVE_REC;
29 G_CURRENT_ORG_ID NUMBER := -99;
30 G_ORG_ID NUMBER ;
31 G_PO_STATUS_CODE PO_HEADERS_ALL.STATUS_LOOKUP_CODE%TYPE;
32 G_DIR_NAME VARCHAR2(2000);
33
34 G_ENABLE_DELIVERABLES VARCHAR2(1) := 'N';
35 G_COPY_DELIVERABLES VARCHAR2(1) := 'N';
36 G_TEMPLATE_MISS_REC OKC_TERMS_TEMPLATES_PVT.template_rec_type;
37 G_DOCUMENT_NUMBER OKC_TEMPLATE_USAGES.DOCUMENT_NUMBER%TYPE;
38 G_TARGET_DOC_TYPE VARCHAR2(240):= NULL;
39 G_TARGET_RESP_DOC_TYPE VARCHAR2(240);
40
41 -- One Time fetch and cache the current Org.
42 CURSOR CUR_ORG_CSR IS
43 SELECT NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV('CLIENT_INFO'),1,1), ' ',
44 NULL, SUBSTRB(USERENV('CLIENT_INFO'),1,10))),-99)
45 FROM DUAL;
46
47
48 TYPE g_doc_type IS RECORD (
49 DOCUMENT_TYPE OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE%TYPE,
50 DOCUMENT_TYPE_CLASS OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE_CLASS%TYPE,
51 NAME OKC_BUS_DOC_TYPES_TL.NAME%TYPE,
52 INTENT OKC_BUS_DOC_TYPES_B.INTENT%TYPE,
53 PROVISION_ALLOWED_YN OKC_BUS_DOC_TYPES_B.PROVISION_ALLOWED_YN%TYPE,
54 ENABLE_DELIVERABLES_YN OKC_BUS_DOC_TYPES_B.ENABLE_DELIVERABLES_YN%TYPE,
55 ENABLE_ATTACHMENTS_YN OKC_BUS_DOC_TYPES_B.ENABLE_ATTACHMENTS_YN%TYPE,
56 TARGET_RESPONSE_DOC_TYPE OKC_BUS_DOC_TYPES_B.TARGET_RESPONSE_DOC_TYPE%TYPE);
57
58 G_DOC_TYPE_REC g_doc_type;
59
60 Procedure apply_numbering_scheme
61 ( p_document_type IN Varchar2,
62 p_document_id IN Number,
63 x_return_status OUT NOCOPY Varchar2,
64 x_msg_data OUT NOCOPY Varchar2,
65 x_msg_count OUT NOCOPY Number)
66 IS
67 l_api_name CONSTANT VARCHAR2(30) := 'Apply_Numbering_Scheme';
68 l_numbering_scheme OKC_TEMPLATE_USAGES.DOC_NUMBERING_SCHEME%TYPE;
69
70 CURSOR l_numbering_scheme_csr IS
71 SELECT doc_numbering_scheme
72 FROM
73 OKC_TEMPLATE_USAGES
74 WHERE document_type = p_document_type
75 AND document_id = p_document_id;
76
77 BEGIN
78 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
79 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: Entered OKC_TERMS_MIGRATE_GRP.Apply_Numbering_Scheme');
80 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: Parameter List ');
81 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: p_document_type : '||p_document_type);
82 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: p_document_id : '||p_document_id);
83 END IF;
84
85 OPEN l_numbering_scheme_csr;
86 FETCH l_numbering_scheme_csr INTO l_numbering_scheme;
87 CLOSE l_numbering_scheme_csr;
88
89 IF l_numbering_scheme IS NOT NULL THEN
90
91 OKC_NUMBER_SCHEME_GRP.apply_numbering_scheme(
92 p_api_version => 1,
93 p_init_msg_list => FND_API.G_FALSE,
94 x_return_status => x_return_status,
95 x_msg_count => x_msg_count,
96 x_msg_data => x_msg_data,
97 p_validate_commit => FND_API.G_FALSE,
98 p_validation_string => 'OKC_TEST_UI',
99 p_commit => FND_API.G_FALSE,
100 p_doc_type => p_document_type,
101 p_doc_id => p_document_id,
102 p_num_scheme_id => l_numbering_scheme
103 );
104 END IF ;
105
106 END apply_numbering_scheme;
107
108
109 Procedure validate_document
110 ( p_document_type IN Varchar2,
111 p_document_id IN Number,
112 x_return_status OUT NOCOPY Varchar2,
113 x_msg_data OUT NOCOPY Varchar2,
114 x_msg_count OUT NOCOPY Number)
115 IS
116 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Document';
117 l_po_status_code PO_HEADERS_ALL.STATUS_LOOKUP_CODE%TYPE;
118 l_po_type_code PO_HEADERS_ALL.TYPE_LOOKUP_CODE%TYPE;
119
120
121
122 CURSOR l_doc_type_csr IS
123 SELECT DOCUMENT_TYPE,
124 DOCUMENT_TYPE_CLASS,
125 NAME,
126 INTENT,
127 PROVISION_ALLOWED_YN,
128 ENABLE_DELIVERABLES_YN,
129 ENABLE_ATTACHMENTS_YN,
130 TARGET_RESPONSE_DOC_TYPE
131 FROM okc_bus_doc_types_vl
132 WHERE document_type = p_document_type;
133
134 CURSOR l_po_doc_csr IS
135 SELECT TYPE_LOOKUP_CODE,
136 STATUS_LOOKUP_CODE,
137 ORG_ID,
138 SEGMENT1
139 FROM PO_HEADERS_ALL
140 WHERE po_header_id = p_document_id;
141
142 CURSOR l_so_doc_csr IS
143 SELECT org_id,
144 order_number
145 FROM oe_order_headers_all
146 WHERE header_id = p_document_id;
147
148 CURSOR l_sa_doc_csr IS
149 SELECT org_id,
150 order_number
151 FROM oe_blanket_headers_all
152 WHERE header_id = p_document_id;
153
154 CURSOR l_rep_doc_csr IS
155 SELECT org_id,
156 contract_number
157 FROM okc_rep_contracts_all
158 WHERE contract_id = p_document_id;
159
160 CURSOR l_sourcing_doc_csr
161 is
162 SELECT org_id, Decode (contract_type, 'BLANKET', 'PA_BLANKET', 'CONTRACT' , 'PA_CONTRACT', 'BLANKET', 'PO_STANDARD',NULL) target_doc_type
163 FROM pon_auction_headers_all
164 WHERE auction_header_id = p_document_id;
165
166
167 BEGIN
168 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
169 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: Entered OKC_TERMS_MIGRATE_GRP.Validate_Document');
170 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: Parameter List ');
171 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: p_document_type : '||p_document_type);
172 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'200: p_document_id : '||p_document_id);
173 END IF;
174
175 OPEN l_doc_type_csr;
176 FETCH l_doc_type_csr INTO G_DOC_TYPE_REC;
177 IF l_doc_type_csr%NOTFOUND THEN
178 --Invalid document type
179 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
180 p_msg_name => 'OKC_TERMS_INVALID_DOC_TYPE',
181 p_token1 => 'P_DOCUMENT_TYPE',
182 p_token1_value => p_document_type);
183
184 x_return_status := G_RET_STS_ERROR;
185 END IF;
186 CLOSE l_doc_type_csr;
187
188 IF p_document_type IN ('PA_BLANKET', 'PA_CONTRACT','PO_STANDARD') THEN
189
190 OPEN l_po_doc_csr;
191 FETCH l_po_doc_csr INTO l_po_type_code,l_po_status_code,g_org_id,g_document_number;
192 IF l_po_doc_csr%NOTFOUND THEN
193 --Invalid document ID
194 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
195 p_msg_name => 'OKC_TERMS_INVALID_DOC_ID',
196 p_token1 => 'P_DOCUMENT_ID',
197 p_token1_value => p_document_id);
198 x_return_status := G_RET_STS_ERROR;
199 END IF;
200 CLOSE l_po_doc_csr;
201
202 IF substr(p_document_type,4,length(p_document_type)-3) <> l_po_type_code THEN
203 --Invalid document
204 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
205 p_msg_name => 'OKC_TERMS_INVALID_DOC_TYPE',
206 p_token1 => 'P_DOCUMENT_TYPE',
207 p_token1_value => p_document_type);
208 x_return_status := G_RET_STS_ERROR;
209 END IF;
210
211
212 -- Add check for PO_ STATUS and make G_ENABLE_DELIVERABLES = 'Y'
213 IF l_po_status_code is NULL and G_DOC_TYPE_REC.ENABLE_DELIVERABLES_YN = 'Y' THEN
214 G_COPY_DELIVERABLES := 'Y' ;
215 ELSE
216 G_COPY_DELIVERABLES := 'N' ;
217 END IF;
218
219 ELSIF p_document_type = 'B' THEN
220
221 OPEN l_sa_doc_csr;
222 FETCH l_sa_doc_csr INTO g_org_id,g_document_number;
223 IF l_sa_doc_csr%NOTFOUND THEN
224 --Invalid document ID
225 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
226 p_msg_name => 'OKC_TERMS_INVALID_DOC_ID',
227 p_token1 => 'P_DOCUMENT_ID',
228 p_token1_value => p_document_id);
229 x_return_status := G_RET_STS_ERROR;
230 END IF;
231 CLOSE l_sa_doc_csr;
232
233 ELSIF p_document_type = 'O' THEN
234 OPEN l_so_doc_csr;
235 FETCH l_so_doc_csr INTO g_org_id,g_document_number;
236 IF l_so_doc_csr%NOTFOUND THEN
237 --Invalid document ID
238 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
239 p_msg_name => 'OKC_TERMS_INVALID_DOC_ID',
240 p_token1 => 'P_DOCUMENT_ID',
241 p_token1_value => p_document_id);
242 x_return_status := G_RET_STS_ERROR;
243 END IF;
244 CLOSE l_so_doc_csr;
245
246 ELSIF p_document_type LIKE 'REP%' THEN
247 OPEN l_rep_doc_csr;
248 FETCH l_rep_doc_csr INTO g_org_id, g_document_number;
249 IF l_rep_doc_csr%NOTFOUND THEN
250 --Invalid document ID
251 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
252 p_msg_name => 'OKC_TERMS_INVALID_DOC_ID',
253 p_token1 => 'P_DOCUMENT_ID',
254 p_token1_value => p_document_id);
255 x_return_status := G_RET_STS_ERROR;
256
257 END IF;
258 CLOSE l_rep_doc_csr;
259
260 ELSIF p_document_type IN ('AUCTION','RFI','RFQ','SOLICITATION')
261 THEN
262 OPEN l_sourcing_doc_csr;
263 FETCH l_sourcing_doc_csr INTO g_org_id, G_TARGET_DOC_TYPE;
264 IF l_sourcing_doc_csr%NOTFOUND THEN
265 okc_Api.Set_Message(p_app_name => G_APP_NAME,
266 p_msg_name => 'OKC_TERMS_INVALID_DOC_ID',
267 p_token1 => 'P_DOCUMENT_ID',
268 p_token1_value => p_document_id);
269 x_return_status := G_RET_STS_ERROR;
270
271 END IF;
272 CLOSE l_sourcing_doc_csr;
273 END IF;
274
275 END validate_document;
276
277
278 FUNCTION get_blob_from_file(p_dir_name in varchar2,
279 p_file_name in varchar2,
280 x_return_status out nocopy varchar2)
281 RETURN blob IS
282 pragma autonomous_transaction;
283 l_temp_blob blob := NULL;
284 l_from_file bfile;
285 l_blob_length number;
286 l_ddl_string varchar2(2000);
287 l_file_exists integer;
288
289 BEGIN
290 x_return_status := G_RET_STS_SUCCESS;
291 IF (g_dir_name IS NULL OR g_dir_name <> p_dir_name) THEN
292 l_ddl_string := 'create or replace directory OKC_LEG_DOC_DIR as '''||p_dir_name||'''';
293 APPS_DDL.APPS_DDL(l_ddl_string);
294 g_dir_name := p_dir_name;
295 END IF;
296
297 l_from_file := bfilename('OKC_LEG_DOC_DIR', p_file_name);
298
299 BEGIN
300 l_file_exists := dbms_lob.fileexists(l_from_file);
301 IF l_file_exists = 0 THEN
302 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
303 p_msg_name => 'OKC_TERMS_INV_FILE');
304 x_return_status := G_RET_STS_ERROR;
305 ELSIF l_file_exists = 1 THEN
306 x_return_status := G_RET_STS_SUCCESS;
307 ELSE
308 l_file_exists := 0;
309 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
310 p_msg_name => 'OKC_TERMS_INV_FILE');
311 x_return_status := G_RET_STS_ERROR;
312 END IF;
313 EXCEPTION
314 WHEN DBMS_LOB.NOEXIST_DIRECTORY THEN
315 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
316 p_msg_name => 'OKC_TERMS_INV_DIR');
317 l_file_exists := 0;
318 x_return_status := G_RET_STS_ERROR;
319 WHEN DBMS_LOB.NOPRIV_DIRECTORY THEN
320 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
321 p_msg_name => 'OKC_TERMS_INV_DIR');
322 l_file_exists := 0;
323 x_return_status := G_RET_STS_ERROR;
324 WHEN DBMS_LOB.INVALID_DIRECTORY THEN
325 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
326 p_msg_name => 'OKC_TERMS_INV_DIR');
327 l_file_exists := 0;
328 x_return_status := G_RET_STS_ERROR;
329 END ;
330
331
332
333 IF l_file_exists = 1 THEn
334 -- read file length
335 dbms_lob.fileopen(l_from_file, dbms_lob.file_readonly);
336 l_blob_length := dbms_lob.getlength(l_from_file);
337 dbms_lob.fileclose(l_from_file);
338 -- create blob locator
339 dbms_lob.createtemporary(l_temp_blob, false, dbms_lob.call);
340 -- load the blob
341 dbms_lob.open(l_from_file, dbms_lob.lob_readonly);
342 dbms_lob.open(l_temp_blob, dbms_lob.lob_readwrite);
343 dbms_lob.loadfromfile(l_temp_blob, l_from_file, l_blob_length);
344 -- close handles to blob and file
345 dbms_lob.close(l_temp_blob);
346 dbms_lob.close(l_from_file);
347 END IF;
348 return l_temp_blob;
349 EXCEPTION
350 WHEN OTHERS THEN
351 x_return_status := G_RET_STS_ERROR;
352 END get_blob_from_file;
353
354 FUNCTION get_content_type(p_file_name varchar2)
355 RETURN varchar2 IS
356 l_content_type FND_LOBS.file_content_type%TYPE := 'text/plain';
357 l_file_name varchar2(2000);
358 BEGIN
359 l_file_name := lower(p_file_name);
360 IF l_file_name LIKE '%.avi' THEN
361 l_content_type := 'video/avi';
362 ELSIF l_file_name LIKE '%.bmp' THEN
363 l_content_type := 'image/x-ms-bmpa';
364 ELSIF l_file_name LIKE '%.css' THEN
365 l_content_type := 'text/css';
366 ELSIF l_file_name LIKE '%.doc' THEN
367 l_content_type := 'application/vnd.msword';
368 ELSIF l_file_name LIKE '%.gif' THEN
369 l_content_type := 'image/gif';
370 ELSIF l_file_name LIKE '%.gz' THEN
371 l_content_type := 'application/x-gzip';
372 ELSIF l_file_name LIKE '%.hqx' THEN
373 l_content_type := 'application/mac-binhex40';
374 ELSIF l_file_name LIKE '%.htm' THEN
375 l_content_type := 'text/html';
376 ELSIF l_file_name LIKE '%.html' THEN
377 l_content_type := 'text/html';
378 ELSIF l_file_name LIKE '%.jpeg' THEN
379 l_content_type := 'image/jpeg';
380 ELSIF l_file_name LIKE '%.jpg' THEN
381 l_content_type := 'image/jpeg';
382 ELSIF l_file_name LIKE '%.mid' THEN
383 l_content_type :='audio/mid';
384 ELSIF l_file_name LIKE '%.mov' THEN
385 l_content_type :='video/quicktime';
386 ELSIF l_file_name LIKE '%.mp2' THEN
387 l_content_type :='audio/x-mpeg';
388 ELSIF l_file_name LIKE '%.mp3' THEN
389 l_content_type :='audio/mpeg';
390 ELSIF l_file_name LIKE '%.mpeg' THEN
391 l_content_type := 'video/mpeg';
392 ELSIF l_file_name LIKE '%.mpg' THEN
393 l_content_type := 'video/mpeg';
394 ELSIF l_file_name LIKE '%.mpv2' THEN
395 l_content_type := 'video/x-mpeg2';
396 ELSIF l_file_name LIKE '%.pdf' THEN
397 l_content_type := 'application/pdf';
398 ELSIF l_file_name LIKE '%.ppt' THEN
399 l_content_type := 'application/vnd.ms-powerpoint';
400 ELSIF l_file_name LIKE '%.ps' THEN
401 l_content_type :='application/postscript';
402 ELSIF l_file_name LIKE '%.rtf' THEN
403 l_content_type := 'application/rtf';
404 ELSIF l_file_name LIKE '%.scd' THEN
405 l_content_type := 'application/vnd.ms-schedule';
406 ELSIF l_file_name LIKE '%.sgml' THEN
407 l_content_type := 'text/sgml';
408 ELSIF l_file_name LIKE '%.tar' THEN
409 l_content_type := 'application/x-tar';
410 ELSIF l_file_name LIKE '%.tif' THEN
411 l_content_type := 'image/tiff';
412 ELSIF l_file_name LIKE '%.tiff' THEN
413 l_content_type := 'image/tiff';
414 ELSIF l_file_name LIKE '%.tsv' THEN
415 l_content_type := 'text/tab-separated-values';
416 ELSIF l_file_name LIKE '%.txt' THEN
417 l_content_type := 'text/plain';
418 ELSIF l_file_name LIKE '%.vrml' THEN
419 l_content_type := 'model/vrml';
420 ELSIF l_file_name LIKE '%.wav' THEN
421 l_content_type := 'audio/wav';
422 ELSIF l_file_name LIKE '%.xbm' THEN
423 l_content_type := 'image/x-xbitmap';
424 ELSIF l_file_name LIKE '%.xls' THEN
425 l_content_type := 'application/vnd.ms-excel';
426 ELSIF l_file_name LIKE '%.xml' THEN
427 l_content_type := 'text/xml';
428 ELSIF l_file_name LIKE '%.Z' THEN
429 l_content_type := 'application/x-compress';
430 ELSIF l_file_name LIKE '%.zip' THEN
431 l_content_type := 'application/x-zip-compressed';
432 END IF;
433 RETURN l_content_type;
434 END get_content_type;
435
436
437 Procedure Create_Contract_Terms
438 ( p_api_version IN Number,
439 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
440 p_commit IN Varchar2 default FND_API.G_FALSE,
441 x_return_status OUT NOCOPY Varchar2,
442 x_msg_data OUT NOCOPY Varchar2,
443 x_msg_count OUT NOCOPY Number,
444 p_document_type IN Varchar2,
445 p_document_id IN Number,
446 p_contract_source IN Varchar2,
447 p_contract_tmpl_id IN Number default NULL,
448 p_contract_tmpl_name IN Varchar2 default NULL,
449 p_attachment_file_loc IN Varchar2 default NULL,
450 p_attachment_file_name IN Varchar2 default NULL,
451 p_attachment_file_desc IN Varchar2 default NULL
452 )
453 IS
454
455 l_api_version CONSTANT NUMBER := 1;
456 l_api_name CONSTANT VARCHAR2(30) := 'Create_Contract_Terms';
457 l_conterms_deliv_upd_date DATE := NULL;
458 l_document_type OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE%TYPE;
459 l_document_id NUMBER;
460 lc_document_type OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE%TYPE := p_document_type;
461 lc_document_id OKC_TEMPLATE_USAGES.DOCUMENT_ID%TYPE := p_document_id;
462 l_dummy VARCHAR2(1) := NULL;
463 l_blob BLOB := null;
464 l_fid NUMBER;
465 l_content_type FND_LOBS.file_content_type%TYPE;
466 l_attachment_file_name FND_LOBS.file_name%TYPE;
467 l_attachment_file_loc VARCHAR2(2000);
468 l_attachment_file_desc FND_DOCUMENTS_TL.description%TYPE;
469 l_rowid VARCHAR2(120);
470 l_created_by OKC_CONTRACT_DOCS.CREATED_BY%TYPE;
471 l_creation_date OKC_CONTRACT_DOCS.CREATION_DATE%TYPE;
472 l_last_updated_by OKC_CONTRACT_DOCS.LAST_UPDATED_BY%TYPE;
473 l_last_update_login OKC_CONTRACT_DOCS.LAST_UPDATE_LOGIN%TYPE;
474 l_last_update_date OKC_CONTRACT_DOCS.LAST_UPDATE_DATE%TYPE;
475 l_seq_num FND_ATTACHED_DOCUMENTS.SEQ_NUM%TYPE := 1;
476 l_business_document_version NUMBER := -99;
477 lf_document_id FND_DOCUMENTS.DOCUMENT_ID%TYPE;
478
479 l_new_attachment_id FND_ATTACHED_DOCUMENTS.ATTACHED_DOCUMENT_ID%TYPE;
480
481 lc_business_document_type OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_TYPE%TYPE;
482 lc_business_document_id OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_ID%TYPE;
483 lc_business_document_version OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_VERSION%TYPE;
484 lc_attached_document_id OKC_CONTRACT_DOCS.ATTACHED_DOCUMENT_ID%TYPE;
485
486 l_attached_document_id OKC_CONTRACT_DOCS.ATTACHED_DOCUMENT_ID%TYPE;
487 l_media_id FND_DOCUMENTS_TL.MEDIA_ID%TYPE;
488 L_primary_contract_doc_flag VARCHAR2(1) := 'N';
489 l_category_id FND_DOCUMENT_CATEGORIES.CATEGORY_ID%TYPE;
490
491 l_doc_intent VARCHAR2(1);
492
493 TYPE l_tmpl_type IS RECORD (
494 template_id OKC_TERMS_TEMPLATES_ALL.TEMPLATE_ID%TYPE,
495 template_name OKC_TERMS_TEMPLATES_ALL.TEMPLATE_NAME%TYPE,
496 status_code OKC_TERMS_TEMPLATES_ALL.STATUS_CODE%TYPE,
497 start_date OKC_TERMS_TEMPLATES_ALL.START_DATE%TYPE,
498 end_date OKC_TERMS_TEMPLATES_ALL.END_DATE%TYPE,
499 intent OKC_TERMS_TEMPLATES_ALL.INTENT%TYPE,
500 org_id OKC_TERMS_TEMPLATES_ALL.ORG_ID%TYPE,
501 tmpl_numbering_scheme OKC_TERMS_TEMPLATES_ALL.TMPL_NUMBERING_SCHEME%TYPE);
502
503 l_tmpl_type_rec l_tmpl_type;
504
505
506 CURSOR l_tmpl_id_validate_csr IS
507 SELECT template_id,
508 template_name,
509 status_code,
510 start_date,
511 end_date,
512 intent,
513 org_id,
514 tmpl_numbering_scheme
515 FROM
516 OKC_TERMS_TEMPLATES_ALL TMP
517 WHERE
518 TMP.template_id = p_contract_tmpl_id;
519
520 CURSOR l_tmpl_name_validate_csr(l_org_id IN NUMBER) IS
521 SELECT template_id,
522 template_name,
523 status_code,
524 start_date,
525 end_date,
526 intent,
527 org_id,
528 tmpl_numbering_scheme
529 FROM
530 OKC_TERMS_TEMPLATES_ALL TMP
531 WHERE TMP.template_name = p_contract_tmpl_name
532 AND TMP.org_id = l_org_id;
533
534
535 CURSOR l_tmpl_doc_exist_csr IS
536 SELECT 1
537 FROM
538 OKC_TEMPLATE_USAGES
539 WHERE document_type = p_document_type
540 AND document_id = p_document_id;
541
542
543 CURSOR l_alwd_usgs_csr(l_template_id IN NUMBER) IS
544 SELECT 1
545 FROM
546 OKC_ALLOWED_TMPL_USAGES
547 WHERE document_type = p_document_type
548 AND template_id = l_template_id;
549
550 CURSOR l_fnd_lobs_nextval_csr IS
551 SELECT fnd_lobs_s.nextval
552 FROM
553 DUAL;
554
555 CURSOR l_fnd_att_doc_nextval_csr IS
556 SELECT fnd_attached_documents_s.nextval
557 FROM
558 DUAL;
559
560 CURSOR l_cat_id_csr IS
561 SELECT category_id
562 FROM
563 FND_DOCUMENT_CATEGORIES
564 WHERE application_id = 510 AND name = 'OKC_REPO_CONTRACT' ;
565
566
567 CURSOR l_bus_doc_ver_csr IS
568 SELECT nvl(poh.revision_num,-99)
569 FROM
570 po_headers_archive_all poa,
571 po_headers_all poh
572 WHERE poh.po_header_id = poa.po_header_id
573 AND poh.revision_num = poa.revision_num
574 AND poh.po_header_id = p_document_id;
575
576 CURSOR c_get_intent_csr IS
577 SELECT intent FROM okc_bus_doc_types_b
578 WHERE document_type = p_document_type;
579
580 BEGIN
581 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
582 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.Create_Contract_Terms');
583 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
584 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
585 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
586 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
587 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
588 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
589 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_source : '||p_contract_source);
590 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_tmpl_id : '||p_contract_tmpl_id);
591 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_tmpl_name : '||p_contract_tmpl_name);
592 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_attachment_file_loc : '||p_attachment_file_loc);
593 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_attachment_file_name : '||p_attachment_file_name);
594 END IF;
595
596 -- Standard Start of API savepoint
597 SAVEPOINT G_CREATE_CONTRACT_TERMS_GRP;
598
599 -- Standard call to check for call compatibility.
600 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
601 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
602 END IF;
603
604 -- Initialize message list if p_init_msg_list is set to TRUE.
605 IF FND_API.to_Boolean( p_init_msg_list ) THEN
606 FND_MSG_PUB.initialize;
607 END IF;
608
609 -- Initialize API return status to success
610 x_return_status := FND_API.G_RET_STS_SUCCESS;
611
612
613 OPEN cur_org_csr;
614 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
615 CLOSE cur_org_csr;
616
617 validate_document(
618 p_document_type => p_document_type,
619 p_document_id => p_document_id,
620 x_return_status => x_return_status,
621 x_msg_data => x_msg_data,
622 x_msg_count => x_msg_count);
623
624
625 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
626 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
627 END IF;
628
629 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
630 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
631 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
632 RAISE FND_API.G_EXC_ERROR ;
633 END IF;
634
635 -- Check that Contract source is Structured or Attached
636 IF p_contract_source not in ('STRUCTURED','ATTACHED') THEN
637 -- invalid contract source
638 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
639 p_msg_name => 'OKC_TERMS_INVALID_SOURCE',
640 p_token1 => 'P_CONTRACT_SOURCE',
641 p_token1_value => p_contract_source);
642 x_return_status := G_RET_STS_ERROR;
643 RAISE FND_API.G_EXC_ERROR ;
644 END IF;
645
646 l_attachment_file_name := RTRIM(LTRIM(p_attachment_file_name));
647 l_attachment_file_loc := RTRIM(LTRIM(p_attachment_file_loc));
648 IF p_attachment_file_desc IS NULL THEN
649 l_attachment_file_desc := l_attachment_file_name;
650 ELSE
651 l_attachment_file_desc := RTRIM(LTRIM(p_attachment_file_desc));
652 END IF;
653
654 IF p_contract_source ='STRUCTURED' THEN
655 IF p_contract_tmpl_name is NULL AND p_contract_tmpl_id is NULL THEN
656 -- no template is provided
657 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
658 p_msg_name => 'OKC_TERMS_NO_TMPL_PROVIDED');
659 x_return_status := G_RET_STS_ERROR;
660 RAISE FND_API.G_EXC_ERROR ;
661 END IF;
662
663 ELSIF p_contract_source='ATTACHED' THEN
664 IF l_attachment_file_loc is NULL OR l_attachment_file_name is NULL THEN
665 -- either attachment file location is not provided or file name is not provided
666 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
667 p_msg_name => 'OKC_TERMS_NO_ATTACH_PROVIDED');
668 x_return_status := G_RET_STS_ERROR;
669 RAISE FND_API.G_EXC_ERROR ;
670 END IF;
671
672 END IF;
673
674 IF p_contract_source ='STRUCTURED' THEN
675 IF p_contract_tmpl_id is not NULL THEN
676 OPEN l_tmpl_id_validate_csr;
677 FETCH l_tmpl_id_validate_csr INTO l_tmpl_type_rec ;
678 IF l_tmpl_id_validate_csr%NOTFOUND THEN
679 --Invalid Template ID
680 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
681 p_msg_name => 'OKC_TERMS_INVALID_TMPL_ID',
682 p_token1 => 'P_TMPL_ID',
683 p_token1_value => p_contract_tmpl_id);
684 x_return_status := G_RET_STS_ERROR;
685 RAISE FND_API.G_EXC_ERROR ;
686 END IF;
687 CLOSE l_tmpl_id_validate_csr;
688
689 ELSE
690 OPEN l_tmpl_name_validate_csr(G_CURRENT_ORG_ID);
691 FETCH l_tmpl_name_validate_csr INTO l_tmpl_type_rec ;
692 IF l_tmpl_name_validate_csr%NOTFOUND THEN
693 --Invalid Template Name
694 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
695 p_msg_name => 'OKC_TERMS_INVALID_TMPL_NAME',
696 p_token1 => 'P_TMPL_NAME',
697 p_token1_value => p_contract_tmpl_name);
698 x_return_status := G_RET_STS_ERROR;
699 RAISE FND_API.G_EXC_ERROR ;
700 END IF;
701 CLOSE l_tmpl_name_validate_csr;
702
703 END IF;
704
705 /*IF p_document_type IN ('PA_BLANKET', 'PA_CONTRACT','PO_STANDARD') AND
706 l_tmpl_type_rec.intent = 'S' THEN
707 --Template is of Sell Intent
708 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
709 p_msg_name => 'OKC_TERMS_INV_TMPL_INTENT',
710 p_token1 => 'P_TEMPLATE_NAME',
711 p_token1_value => l_tmpl_type_rec.template_name,
712 p_token2 => 'P_TEMPLATE_INTENT',
713 p_token2_value => l_tmpl_type_rec.intent,
714 p_token3 => 'P_DOC_INTENT',
715 p_token3_value => 'BUY');
716 x_return_status := G_RET_STS_ERROR;
717 RAISE FND_API.G_EXC_ERROR ;
718 END IF;
719
720 IF p_document_type IN ('B', 'O') AND
721 l_tmpl_type_rec.intent = 'B' THEN
722 --Template is of Buy Intent
723 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
724 p_msg_name => 'OKC_TERMS_INV_TMPL_INTENT',
725 p_token1 => 'P_TEMPLATE_NAME',
726 p_token1_value => l_tmpl_type_rec.template_name,
727 p_token2 => 'P_TEMPLATE_INTENT',
728 p_token2_value => l_tmpl_type_rec.intent,
729 p_token3 => 'P_DOC_INTENT',
730 p_token3_value => 'SELL');
731 x_return_status := G_RET_STS_ERROR;
732 RAISE FND_API.G_EXC_ERROR ;
733 END IF; */
734
735 OPEN c_get_intent_csr;
736 FETCH c_get_intent_csr INTO l_doc_intent;
737 CLOSE c_get_intent_csr;
738
739 IF l_doc_intent <> l_tmpl_type_rec.intent THEN
740
741 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
742 p_msg_name => 'OKC_TERMS_INV_TMPL_INTENT',
743 p_token1 => 'P_TEMPLATE_NAME',
744 p_token1_value => l_tmpl_type_rec.template_name,
745 p_token2 => 'P_TEMPLATE_INTENT',
746 p_token2_value => l_tmpl_type_rec.intent,
747 p_token3 => 'P_DOC_INTENT',
748 p_token3_value => l_doc_intent);
749
750 x_return_status := G_RET_STS_ERROR;
751 RAISE FND_API.G_EXC_ERROR ;
752 END IF;
753
754
755
756
757 IF l_tmpl_type_rec.status_code <> 'APPROVED' THEN
758 --Invalid Template Status
759 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
760 p_msg_name => 'OKC_TERMS_INV_TMPL_STS',
761 p_token1 => 'P_TEMPLATE_NAME',
762 p_token1_value => l_tmpl_type_rec.template_name);
763 x_return_status := G_RET_STS_ERROR;
764 RAISE FND_API.G_EXC_ERROR ;
765 END IF;
766
767 IF SYSDATE NOT BETWEEN l_tmpl_type_rec.start_date AND nvl(l_tmpl_type_rec.end_date,SYSDATE) THEN
768 --Template is not Active
769 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
770 p_msg_name => 'OKC_TERMS_INACTIVE_TMPL',
771 p_token1 => 'P_TEMPLATE_NAME',
772 p_token1_value => l_tmpl_type_rec.template_name);
773 x_return_status := G_RET_STS_ERROR;
774 RAISE FND_API.G_EXC_ERROR ;
775 END IF;
776
777 OPEN l_alwd_usgs_csr(l_tmpl_type_rec.template_id);
778 FETCH l_alwd_usgs_csr INTO l_dummy ;
779 IF l_alwd_usgs_csr%NOTFOUND THEN
780 --Template is not assigned to Document
781 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
782 p_msg_name => 'OKC_TERMS_TMPL_USG_ASSOC',
783 p_token1 => 'P_CONTRACT_TEMPLATE',
784 p_token1_value => l_tmpl_type_rec.template_id,
785 p_token2 => 'P_DOCUMENT_TYPE',
786 p_token2_value => p_document_type);
787 x_return_status := G_RET_STS_ERROR;
788 RAISE FND_API.G_EXC_ERROR ;
789 END IF;
790 CLOSE l_alwd_usgs_csr;
791
792 END IF; -- IF p_contract_source ='STRUCTURED' THEN
793
794 OPEN l_tmpl_doc_exist_csr;
795 FETCH l_tmpl_doc_exist_csr INTO l_dummy ;
796 IF l_tmpl_doc_exist_csr%FOUND THEN
797 --Document already has Template
798 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
799 p_msg_name => 'OKC_TERMS_EXIST');
800 x_return_status := G_RET_STS_ERROR;
801 RAISE FND_API.G_EXC_ERROR ;
802 END IF;
803 CLOSE l_tmpl_doc_exist_csr;
804
805 IF (p_contract_source = 'STRUCTURED') THEN
806
807 -- Instantiate Template
808 OKC_TERMS_COPY_PVT.copy_tc(
809 p_api_version => l_api_version,
810 p_init_msg_list => FND_API.G_FALSE,
811 p_commit => FND_API.G_FALSE,
812 p_source_doc_type => OKC_TERMS_UTIL_GRP.G_TMPL_DOC_TYPE,
813 p_source_doc_id => l_tmpl_type_rec.template_id,
814 p_target_doc_type => lc_document_type, --p_document_type,
815 p_target_doc_id => lc_document_id, --p_document_id,
816 p_document_number => g_document_number, -- need to pass the Doc Number
817 p_keep_version => 'N',
818 p_article_effective_date => SYSDATE,
819 p_target_template_rec => G_TEMPLATE_MISS_REC,
820 p_retain_deliverable => 'Y',
821 --p_allow_duplicates => 'N',
822 --p_keep_orig_ref => 'N',
823 x_return_status => x_return_status,
824 x_msg_data => x_msg_data,
825 x_msg_count => x_msg_count
826 --p_copy_abstract_yn => NULL,
827 --p_copy_for_amendment => NULL
828 );
829
830
831 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
832 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_TERMS_COPY_PVT.copy_tc, return status'||x_return_status);
833 END IF;
834
835 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
836 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
837 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
838 RAISE FND_API.G_EXC_ERROR ;
839 END IF;
840 -----------------------------------------------------
841
842 IF G_COPY_DELIVERABLES = 'Y' THEN
843 l_conterms_deliv_upd_date := sysdate;
844
845 -- External Party Related fields should be passed otherwsie it may pose some issues
846 OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables (
847 p_api_version => 1,
848 p_init_msg_list => FND_API.G_FALSE,
849 p_source_doc_type => OKC_TERMS_UTIL_GRP.G_TMPL_DOC_TYPE,
850 p_source_doc_id => l_tmpl_type_rec.template_id,
851 p_target_doc_type => p_document_type,
852 p_target_doc_id => p_document_id,
853 p_target_doc_number => g_document_number,
854 p_internal_party_id => NULL,
855 p_internal_contact_id => NULL,
856 p_external_party_id => NULL,
857 p_external_party_site_id => NULL,
858 p_external_contact_id => NULL,
859 p_target_contractual_doctype => NULL,
860 p_target_response_doctype => NULL,
861 p_copy_del_attachments_yn => 'Y',
862 x_msg_data => x_msg_data,
863 x_msg_count => x_msg_count,
864 x_return_status => x_return_status );
865
866 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
867 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_DELIVERABLE_PROCESS_PVT.copy_deliverables, return status'||x_return_status);
868 END IF;
869
870 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
871 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
872 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
873 RAISE FND_API.G_EXC_ERROR ;
874 END IF;
875 END IF;
876
877 apply_numbering_scheme(
878 p_document_type => p_document_type,
879 p_document_id => p_document_id,
880 x_return_status => x_return_status,
881 x_msg_count => x_msg_count,
882 x_msg_data => x_msg_data
883 );
884
885 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
886 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: apply_numbering_scheme, return status'||x_return_status);
887 END IF;
888
889 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
890 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
891 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
892 RAISE FND_API.G_EXC_ERROR ;
893 END IF;
894
895
896 ELSE --(it is ATTACHED) -- IF (p_contract_source = 'STRUCTURED') THEN
897 OKC_TEMPLATE_USAGES_GRP.create_template_usages(
898 p_api_version => l_api_version,
899 p_init_msg_list => FND_API.G_FALSE ,
900 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
901 p_commit => FND_API.G_FALSE,
902
903 x_return_status => x_return_status,
904 x_msg_count => x_msg_count,
905 x_msg_data => x_msg_data,
906
907 p_document_type => p_document_type ,
908 p_document_id => p_document_id,
909 p_template_id => NULL,
910 p_doc_numbering_scheme => NULL,
911 p_document_number => NULL,
912 p_article_effective_date => SYSDATE,
913 p_config_header_id => NULL,
914 p_config_revision_number => NULL,
915 p_valid_config_yn => NULL,
916 p_orig_system_reference_code => NULL,
917 p_orig_system_reference_id1 => NULL,
918 p_orig_system_reference_id2 => NULL,
919
920 p_approval_abstract_text => NULL,
921 p_contract_source_code =>'ATTACHED',
922 p_authoring_party_code => NULL,
923 p_autogen_deviations_flag => NULL,
924 p_source_change_allowed_flag => 'Y',
925
926 x_document_type => l_document_type,
927 x_document_id => l_document_id
928 );
929 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
930 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_TEMPLATE_USAGESE_GRP.create_template_usages, return status'||x_return_status);
931 END IF;
932
933 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
934 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
935 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
936 RAISE FND_API.G_EXC_ERROR ;
937 END IF;
938
939
940 END IF; -- IF (p_contract_source = 'STRUCTURED') THEN
941
942 IF (l_attachment_file_loc IS NOT NULL AND l_attachment_file_name IS NOT NULL) THEN
943
944 IF (p_contract_source = 'ATTACHED') THEN
945 l_primary_contract_doc_flag := 'Y';
946 END IF;
947
948 -- Read the lob from the directory using DBMS_LOBS.
949 l_blob := get_blob_from_file(p_dir_name => l_attachment_file_loc,
950 p_file_name => l_attachment_file_name,
951 x_return_status => x_return_status);
952
953 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
954 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished get_blob_from_file, return status'||x_return_status);
955 END IF;
956
957 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
958 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
959 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
960 RAISE FND_API.G_EXC_ERROR ;
961 END IF;
962
963
964 OPEN l_fnd_lobs_nextval_csr;
965 FETCH l_fnd_lobs_nextval_csr INTO l_fid ;
966 IF l_fnd_lobs_nextval_csr%NOTFOUND THEN
967 RAISE NO_DATA_FOUND;
968 END IF;
969 CLOSE l_fnd_lobs_nextval_csr;
970
971 l_content_type := get_content_type(p_file_name => l_attachment_file_name);
972
973 BEGIN
974 INSERT INTO fnd_lobs (
975 file_id,
976 file_name,
977 file_content_type,
978 upload_date,
979 expiration_date,
980 program_name,
981 program_tag,
982 file_data,
983 language,
984 oracle_charset,
985 file_format )
986 VALUES (
987 l_fid,
988 l_attachment_file_name,
989 l_content_type,
990 sysdate,
991 null,
992 'OKCGTMGB',
993 null,
994 l_blob,
995 userenv('LANG'),
996 fnd_gfm.iana_to_oracle(fnd_gfm.get_iso_charset),
997 fnd_gfm.set_file_format(l_content_type));
998 EXCEPTION
999 WHEN OTHERS THEN
1000 X_RETURN_STATUS := G_RET_STS_UNEXP_ERROR;
1001 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1002 END;
1003
1004 OPEN l_fnd_att_doc_nextval_csr;
1005 FETCH l_fnd_att_doc_nextval_csr INTO l_new_attachment_id ;
1006 IF l_fnd_att_doc_nextval_csr%NOTFOUND THEN
1007 RAISE NO_DATA_FOUND;
1008 END IF;
1009 CLOSE l_fnd_att_doc_nextval_csr;
1010
1011
1012 OPEN l_cat_id_csr;
1013 FETCH l_cat_id_csr INTO l_category_id;
1014 IF l_cat_id_csr%NOTFOUND THEN
1015 RAISE NO_DATA_FOUND;
1016 END IF;
1017 CLOSE l_cat_id_csr;
1018
1019 IF p_document_type IN ('PA_BLANKET', 'PA_CONTRACT','PO_STANDARD') THEN
1020 OPEN l_bus_doc_ver_csr;
1021 FETCH l_bus_doc_ver_csr INTO l_business_document_version;
1022 IF l_bus_doc_ver_csr%NOTFOUND THEN
1023 l_business_document_version := -99;
1024 END IF;
1025 CLOSE l_bus_doc_ver_csr;
1026 END IF;
1027
1028 l_creation_date := Sysdate;
1029 l_created_by := Fnd_Global.User_Id;
1030 l_last_update_date := l_creation_date;
1031 l_last_updated_by := l_created_by;
1032 l_last_update_login := Fnd_Global.Login_Id;
1033
1034
1035 fnd_attached_documents_pkg.insert_row(
1036 x_rowid => l_rowid,
1037 x_attached_document_id => l_new_attachment_id,
1038 x_document_id => lf_document_id,
1039 x_creation_date => sysdate,
1040 x_created_by => fnd_global.user_id,
1041 x_last_update_date => sysdate,
1042 x_last_updated_by => fnd_global.user_id,
1043 x_last_update_login => fnd_global.login_id,
1044 x_seq_num => l_seq_num,
1045 x_entity_name => 'OKC_CONTRACT_DOCS',
1046 x_column1 => NULL,
1047 x_pk1_value => p_document_type,
1048 x_pk2_value => to_char(p_document_id),
1049 x_pk3_value => to_char(l_business_document_version),
1050 x_pk4_value => NULL,
1051 x_pk5_value => NULL,
1052 x_automatically_added_flag => 'N',
1053 x_datatype_id => 6,
1054 x_category_id => l_category_id,
1055 x_security_type => 4,
1056 x_publish_flag => 'N',
1057 x_usage_type => NULL,
1058 x_language => NULL,
1059 x_description => l_attachment_file_desc,
1060 x_file_name => l_attachment_file_name,
1061 x_media_id => l_fid,
1062 x_doc_attribute_category => NULL,
1063 x_doc_attribute1 => NULL,
1064 x_doc_attribute2 => NULL,
1065 x_doc_attribute3 => NULL,
1066 x_doc_attribute4 => NULL,
1067 x_doc_attribute5 => NULL,
1068 x_doc_attribute6 => NULL,
1069 x_doc_attribute7 => NULL,
1070 x_doc_attribute8 => NULL,
1071 x_doc_attribute9 => NULL,
1072 x_doc_attribute10 => NULL,
1073 x_doc_attribute11 => NULL,
1074 x_doc_attribute12 => NULL,
1075 x_doc_attribute13 => NULL,
1076 x_doc_attribute14 => NULL,
1077 x_doc_attribute15 => NULL,
1078 X_create_doc => 'Y'
1079 );
1080
1081 l_attached_document_id := l_new_attachment_id;
1082
1083 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1084 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished FND_ATTACHED_DOCUMENTS_PKG.insert_row ');
1085 END IF;
1086
1087
1088 okc_contract_docs_grp.Insert_Contract_Doc(
1089 p_api_version => l_api_version,
1090 p_init_msg_list => FND_API.G_FALSE ,
1091 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1092 p_commit => FND_API.G_FALSE,
1093
1094 x_return_status => x_return_status,
1095 x_msg_count => x_msg_count,
1096 x_msg_data => x_msg_data,
1097
1098 p_business_document_type => p_document_type,
1099 p_business_document_id => p_document_id,
1100 p_business_document_version => l_business_document_version,
1101 p_attached_document_id => l_attached_document_id,
1102 p_external_visibility_flag => 'Y',
1103 p_effective_from_type => p_document_type,
1104 p_effective_from_id => p_document_id,
1105 p_effective_from_version => l_business_document_version,
1106 p_include_for_approval_flag => 'N',
1107 p_create_fnd_attach => 'N',
1108 p_program_id => NULL,
1109 p_program_application_id => NULL,
1110 p_request_id => NULL,
1111 p_program_update_date => NULL,
1112 p_parent_attached_doc_id => NULL,
1113 p_generated_flag => 'N',
1114 p_delete_flag => 'N',
1115
1116 p_primary_contract_doc_flag => l_primary_contract_doc_flag,
1117 p_mergeable_doc_flag => 'N',
1118 p_versioning_flag => 'N',
1119
1120 x_business_document_type => lc_business_document_type,
1121 x_business_document_id => lc_business_document_id,
1122 x_business_document_version => lc_business_document_version,
1123 x_attached_document_id => lc_attached_document_id
1124 );
1125
1126
1127 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1128 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_CONTRACT_DOCS_GRP.insert_contract_doc, return status'||x_return_status);
1129 END IF;
1130
1131 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1132 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1133 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1134 RAISE FND_API.G_EXC_ERROR ;
1135 END IF;
1136
1137 END IF;
1138
1139 /*User will need this if they want to update th ePO terms columns*/
1140 /*IF G_DOC_TYPE_REC.DOCUMENT_TYPE_CLASS = 'PO' THEN
1141 PO_CONTERMS_UPGRADE_GRP. apply_template_change
1142 ( p_api_version => 1,
1143 p_po_header_id => p_document_id,
1144 p_conterms_articles_upd_date => sysdate,
1145 p_conterms_deliv_upd_date => l_conterms_deliv_upd_date,
1146 x_return_status => x_return_status);
1147
1148 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1149 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished PO_CONTERMS_UPGRAD_GRP.apply_template_usages, return status'||x_return_status);
1150 END IF;
1151
1152 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1153 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1154 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1155 RAISE FND_API.G_EXC_ERROR ;
1156 END IF;
1157
1158 END IF;*/
1159 IF FND_API.To_Boolean( p_commit ) THEN
1160 COMMIT WORK;
1161 END IF;
1162
1163 -- Standard call to get message count and if count is 1, get message info.
1164 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1165
1166 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1167 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving create_contract_terms');
1168 END IF;
1169
1170 EXCEPTION
1171
1172 WHEN FND_API.G_EXC_ERROR THEN
1173
1174 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1175 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving create_contract_terms: OKC_API.G_EXCEPTION_ERROR Exception');
1176 END IF;
1177 IF l_tmpl_id_validate_csr%ISOPEN THEN
1178 CLOSE l_tmpl_id_validate_csr;
1179 END IF;
1180 IF l_tmpl_name_validate_csr%ISOPEN THEN
1181 CLOSE l_tmpl_name_validate_csr;
1182 END IF;
1183 IF l_alwd_usgs_csr%ISOPEN THEN
1184 CLOSE l_alwd_usgs_csr;
1185 END IF;
1186 IF l_tmpl_doc_exist_csr%ISOPEN THEN
1187 CLOSE l_tmpl_doc_exist_csr;
1188 END IF;
1189
1190 ROLLBACK TO g_create_contract_terms_grp;
1191 x_return_status := G_RET_STS_ERROR ;
1192 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1193
1194 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1195 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1196 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving create_contract_terms: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
1197 END IF;
1198
1199 ROLLBACK TO g_create_contract_terms_grp;
1200 x_return_status := G_RET_STS_UNEXP_ERROR ;
1201 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1202
1203 WHEN OTHERS THEN
1204 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1205 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving create_contract_terms because of EXCEPTION: '||sqlerrm);
1206 END IF;
1207
1208 ROLLBACK TO g_create_contract_terms_grp;
1209 x_return_status := G_RET_STS_UNEXP_ERROR ;
1210 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
1211 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
1212 END IF;
1213 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1214
1215 END Create_Contract_Terms;
1216
1217 Procedure Add_Contract_Doc
1218 ( p_api_version IN Number,
1219 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
1220 p_commit IN Varchar2 default FND_API.G_FALSE,
1221 x_return_status OUT NOCOPY Varchar2,
1222 x_msg_data OUT NOCOPY Varchar2,
1223 x_msg_count OUT NOCOPY Number,
1224 p_document_type IN Varchar2,
1225 p_document_id IN Number,
1226 p_contract_category IN Varchar2, -- C for Contract and S for Supporting Doc
1227 p_contract_doc_type IN Varchar2, -- U for URL and F for File
1228 p_url IN Varchar2,
1229 p_attachment_file_loc IN Varchar2,
1230 p_attachment_file_name IN Varchar2,
1231 p_description IN Varchar2
1232 )
1233 IS
1234 l_api_version CONSTANT NUMBER := 1;
1235 l_api_name CONSTANT VARCHAR2(30) := 'Add_Contract_Doc';
1236 l_attachment_file_name FND_LOBS.file_name%TYPE;
1237 l_attachment_file_loc VARCHAR2(2000);
1238 l_description FND_DOCUMENTS_TL.description%TYPE;
1239 l_content_type FND_LOBS.file_content_type%TYPE;
1240 l_blob BLOB := null;
1241 l_fid NUMBER;
1242 l_new_attachment_id FND_ATTACHED_DOCUMENTS.ATTACHED_DOCUMENT_ID%TYPE;
1243 l_business_document_version NUMBER := -99;
1244 lf_document_id FND_DOCUMENTS.DOCUMENT_ID%TYPE;
1245 l_datatype_id FND_DOCUMENTS.DATATYPE_ID%TYPE;
1246 l_seq_num FND_ATTACHED_DOCUMENTS.SEQ_NUM%TYPE := 1;
1247
1248 lc_business_document_type OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_TYPE%TYPE;
1249 lc_business_document_id OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_ID%TYPE;
1250 lc_business_document_version OKC_CONTRACT_DOCS.BUSINESS_DOCUMENT_VERSION%TYPE;
1251 lc_attached_document_id OKC_CONTRACT_DOCS.ATTACHED_DOCUMENT_ID%TYPE;
1252
1253 l_attached_document_id OKC_CONTRACT_DOCS.ATTACHED_DOCUMENT_ID%TYPE;
1254 l_dummy VARCHAR2(1) := NULL;
1255 l_contract_category VARCHAR2(240);
1256
1257 l_rowid VARCHAR2(120);
1258 l_created_by OKC_CONTRACT_DOCS.CREATED_BY%TYPE;
1259 l_creation_date OKC_CONTRACT_DOCS.CREATION_DATE%TYPE;
1260 l_last_updated_by OKC_CONTRACT_DOCS.LAST_UPDATED_BY%TYPE;
1261 l_last_update_login OKC_CONTRACT_DOCS.LAST_UPDATE_LOGIN%TYPE;
1262 l_last_update_date OKC_CONTRACT_DOCS.LAST_UPDATE_DATE%TYPE;
1263
1264 l_media_id FND_DOCUMENTS_TL.MEDIA_ID%TYPE;
1265 L_primary_contract_doc_flag VARCHAR2(1) := 'N';
1266 l_category_id FND_DOCUMENT_CATEGORIES.CATEGORY_ID%TYPE;
1267
1268 CURSOR l_tmpl_doc_exist_csr IS
1269 SELECT 1
1270 FROM
1271 OKC_TEMPLATE_USAGES
1272 WHERE document_type = p_document_type
1273 AND document_id = p_document_id;
1274
1275 CURSOR l_fnd_lobs_nextval_csr IS
1276 SELECT fnd_lobs_s.nextval
1277 FROM
1278 DUAL;
1279
1280 CURSOR l_fnd_att_doc_nextval_csr IS
1281 SELECT fnd_attached_documents_s.nextval
1282 FROM
1283 DUAL;
1284
1285 CURSOR l_cat_id_csr(l_category IN VARCHAR2) IS
1286 SELECT category_id
1287 FROM
1288 FND_DOCUMENT_CATEGORIES
1289 WHERE application_id = 510
1290 AND name = l_category;
1291
1292 CURSOR l_bus_doc_ver_csr IS
1293 SELECT nvl(poh.revision_num,-99)
1294 FROM
1295 po_headers_archive_all poa,
1296 po_headers_all poh
1297 WHERE poh.po_header_id = poa.po_header_id
1298 AND poh.revision_num = poa.revision_num
1299 AND poh.po_header_id = p_document_id;
1300
1301 BEGIN
1302
1303 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1304 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.Add_Contract_Doc');
1305 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
1306 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
1307 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
1308 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
1309 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
1310 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
1311 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_category : '||p_contract_category);
1312 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_attachment_file_loc : '||p_attachment_file_loc);
1313 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_attachment_file_name : '||p_attachment_file_name);
1314 END IF;
1315
1316 -- Standard Start of API savepoint
1317 SAVEPOINT G_ADD_CONTRACT_DOC_GRP;
1318
1319 -- Standard call to check for call compatibility.
1320 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1321 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1322 END IF;
1323
1324 -- Initialize message list if p_init_msg_list is set to TRUE.
1325 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1326 FND_MSG_PUB.initialize;
1327 END IF;
1328
1329 -- Initialize API return status to success
1330 x_return_status := FND_API.G_RET_STS_SUCCESS;
1331
1332 validate_document(
1333 p_document_type => p_document_type,
1334 p_document_id => p_document_id,
1335 x_return_status => x_return_status,
1336 x_msg_data => x_msg_data,
1337 x_msg_count => x_msg_count);
1338
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,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
1342 END IF;
1343
1344 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1345 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1346 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1347 RAISE FND_API.G_EXC_ERROR ;
1348 END IF;
1349
1350
1351 IF G_DOC_TYPE_REC.enable_attachments_yn = 'N' THEN
1352 --Attachment functionality is not supported
1353 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1354 p_msg_name => 'OKC_TERMS_NO_ATTACH',
1355 p_token1 => 'P_DOC_NAME',
1356 p_token1_value => G_DOC_TYPE_REC.name);
1357 x_return_status := G_RET_STS_ERROR;
1358 RAISE FND_API.G_EXC_ERROR ;
1359 END IF;
1360
1361 OPEN l_tmpl_doc_exist_csr;
1362 FETCH l_tmpl_doc_exist_csr INTO l_dummy ;
1363 IF l_tmpl_doc_exist_csr%NOTFOUND THEN
1364 --Document does not have Template
1365 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1366 p_msg_name => 'OKC_TERMS_NOT_EXIST',
1367 p_token1 => 'P_DOC_NAME',
1368 p_token1_value => G_DOC_TYPE_REC.name);
1369 x_return_status := G_RET_STS_ERROR;
1370 RAISE FND_API.G_EXC_ERROR ;
1371 END IF;
1372 CLOSE l_tmpl_doc_exist_csr;
1373
1374 IF p_contract_category NOT IN ('C','S') THEN
1375 -- Contract Category is not correct
1376 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1377 p_msg_name => 'OKC_INVALID_CON_CAT');
1378 x_return_status := G_RET_STS_ERROR;
1379 RAISE FND_API.G_EXC_ERROR ;
1380 ELSE
1381 IF p_contract_category = 'S' THEN
1382 l_contract_category := 'OKC_REPO_SUPPORTING_DOC';
1383 ELSE
1384 l_contract_category := 'OKC_REPO_CONTRACT';
1385 END IF;
1386 END IF;
1387
1388 IF p_contract_doc_type NOT IN ('U','F') THEN
1389 -- Contract Doc Type is not correct
1390 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1391 p_msg_name => 'OKC_INVALID_CON_DOC_TYPE');
1392 x_return_status := G_RET_STS_ERROR;
1393 RAISE FND_API.G_EXC_ERROR ;
1394 ELSE
1395 IF p_contract_doc_type = 'U' THEN
1396 l_datatype_id := 5;
1397 ELSE
1398 l_datatype_id := 6;
1399 END IF;
1400 END IF;
1401
1402 IF l_datatype_id = 5 AND p_url IS NULL THEN
1403 -- URL is not provided
1404 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1405 p_msg_name => 'OKC_INVALID_URL');
1406 x_return_status := G_RET_STS_ERROR;
1407 RAISE FND_API.G_EXC_ERROR ;
1408 END IF;
1409
1410 IF l_datatype_id = 6 AND
1411 (p_attachment_file_name IS NULL OR p_attachment_file_loc IS NULL) THEN
1412 -- file info is not provided
1413 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1414 p_msg_name => 'OKC_INVALID_FILE_INFO');
1415 x_return_status := G_RET_STS_ERROR;
1416 RAISE FND_API.G_EXC_ERROR ;
1417 END IF;
1418
1419 IF l_datatype_id = 6 THEN
1420 l_attachment_file_name := RTRIM(LTRIM(p_attachment_file_name));
1421 l_attachment_file_loc := RTRIM(LTRIM(p_attachment_file_loc));
1422 IF p_description IS NULL THEN
1423 l_description := l_attachment_file_name;
1424 ELSE
1425 l_description := RTRIM(LTRIM(p_description));
1426 END IF;
1427 -- Read the lob from the directory using DBMS_LOBS.
1428 l_blob := get_blob_from_file(p_dir_name => l_attachment_file_loc,
1429 p_file_name => l_attachment_file_name,
1430 x_return_status => x_return_status);
1431
1432 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1433 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished get_blob_from_file, return status'||x_return_status);
1434 END IF;
1435
1436 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1437 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1438 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1439 RAISE FND_API.G_EXC_ERROR ;
1440 END IF;
1441
1442 OPEN l_fnd_lobs_nextval_csr;
1443 FETCH l_fnd_lobs_nextval_csr INTO l_fid ;
1444 IF l_fnd_lobs_nextval_csr%NOTFOUND THEN
1445 RAISE NO_DATA_FOUND;
1446 END IF;
1447 CLOSE l_fnd_lobs_nextval_csr;
1448
1449 l_content_type := get_content_type(p_file_name => l_attachment_file_name);
1450
1451 BEGIN
1452 INSERT INTO fnd_lobs (
1453 file_id,
1454 file_name,
1455 file_content_type,
1456 upload_date,
1457 expiration_date,
1458 program_name,
1459 program_tag,
1460 file_data,
1461 language,
1462 oracle_charset,
1463 file_format )
1464 VALUES (
1465 l_fid,
1466 l_attachment_file_name,
1467 l_content_type,
1468 sysdate,
1469 null,
1470 'OKCGTMGB',
1471 null,
1472 l_blob,
1473 userenv('LANG'),
1474 fnd_gfm.iana_to_oracle(fnd_gfm.get_iso_charset),
1475 fnd_gfm.set_file_format(l_content_type));
1476 EXCEPTION
1477 WHEN OTHERS THEN
1478 X_RETURN_STATUS := G_RET_STS_UNEXP_ERROR;
1479 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1480 END;
1481 END IF ; --IF l_datatype_id = 6 THEN
1482
1483 IF l_datatype_id = 5 THEN
1484 l_fid :=NULL;
1485 l_attachment_file_name := p_url;
1486 IF p_description IS NULL THEN
1487 l_description := p_url;
1488 ELSE
1489 l_description := RTRIM(LTRIM(p_description));
1490 END IF;
1491 END IF ; --IF l_datatype_id = 5 THEN
1492
1493 OPEN l_fnd_att_doc_nextval_csr;
1494 FETCH l_fnd_att_doc_nextval_csr INTO l_new_attachment_id ;
1495 IF l_fnd_att_doc_nextval_csr%NOTFOUND THEN
1496 RAISE NO_DATA_FOUND;
1497 END IF;
1498 CLOSE l_fnd_att_doc_nextval_csr;
1499
1500
1501 OPEN l_cat_id_csr(l_contract_category);
1502 FETCH l_cat_id_csr INTO l_category_id;
1503 IF l_cat_id_csr%NOTFOUND THEN
1504 RAISE NO_DATA_FOUND;
1505 END IF;
1506 CLOSE l_cat_id_csr;
1507
1508
1509 IF p_document_type IN ('PA_BLANKET', 'PA_CONTRACT','PO_STANDARD') THEN
1510 OPEN l_bus_doc_ver_csr;
1511 FETCH l_bus_doc_ver_csr INTO l_business_document_version;
1512 IF l_bus_doc_ver_csr%NOTFOUND THEN
1513 l_business_document_version := -99;
1514 END IF;
1515 CLOSE l_bus_doc_ver_csr;
1516 END IF;
1517
1518 l_creation_date := Sysdate;
1519 l_created_by := Fnd_Global.User_Id;
1520 l_last_update_date := l_creation_date;
1521 l_last_updated_by := l_created_by;
1522 l_last_update_login := Fnd_Global.Login_Id;
1523
1524
1525 fnd_attached_documents_pkg.insert_row(
1526 x_rowid => l_rowid,
1527 x_attached_document_id => l_new_attachment_id,
1528 x_document_id => lf_document_id,
1529 x_creation_date => sysdate,
1530 x_created_by => fnd_global.user_id,
1531 x_last_update_date => sysdate,
1532 x_last_updated_by => fnd_global.user_id,
1533 x_last_update_login => fnd_global.login_id,
1534 x_seq_num => l_seq_num,
1535 x_entity_name => 'OKC_CONTRACT_DOCS',
1536 x_column1 => NULL,
1537 x_pk1_value => p_document_type,
1538 x_pk2_value => to_char(p_document_id),
1539 x_pk3_value => to_char(l_business_document_version),
1540 x_pk4_value => NULL,
1541 x_pk5_value => NULL,
1542 x_automatically_added_flag => 'N',
1543 x_datatype_id => l_datatype_id,
1544 x_category_id => l_category_id,
1545 x_security_type => 4,
1546 x_publish_flag => 'N',
1547 x_usage_type => NULL,
1548 x_language => NULL,
1549 x_description => l_description,
1550 x_file_name => l_attachment_file_name,
1551 x_media_id => l_fid,
1552 x_doc_attribute_category => NULL,
1553 x_doc_attribute1 => NULL,
1554 x_doc_attribute2 => NULL,
1555 x_doc_attribute3 => NULL,
1556 x_doc_attribute4 => NULL,
1557 x_doc_attribute5 => NULL,
1558 x_doc_attribute6 => NULL,
1559 x_doc_attribute7 => NULL,
1560 x_doc_attribute8 => NULL,
1561 x_doc_attribute9 => NULL,
1562 x_doc_attribute10 => NULL,
1563 x_doc_attribute11 => NULL,
1564 x_doc_attribute12 => NULL,
1565 x_doc_attribute13 => NULL,
1566 x_doc_attribute14 => NULL,
1567 x_doc_attribute15 => NULL,
1568 X_create_doc => 'Y'
1569 );
1570
1571 l_attached_document_id := l_new_attachment_id;
1572
1573 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1574 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished FND_ATTACHED_DOCUMENTS_PKG.insert_row ');
1575 END IF;
1576
1577
1578 okc_contract_docs_grp.Insert_Contract_Doc(
1579 p_api_version => l_api_version,
1580 p_init_msg_list => FND_API.G_FALSE ,
1581 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1582 p_commit => FND_API.G_FALSE,
1583
1584 x_return_status => x_return_status,
1585 x_msg_count => x_msg_count,
1586 x_msg_data => x_msg_data,
1587
1588 p_business_document_type => p_document_type,
1589 p_business_document_id => p_document_id,
1590 p_business_document_version => l_business_document_version,
1591 p_attached_document_id => l_attached_document_id,
1592 p_external_visibility_flag => 'Y',
1593 p_effective_from_type => p_document_type,
1594 p_effective_from_id => p_document_id,
1595 p_effective_from_version => l_business_document_version,
1596 p_include_for_approval_flag => 'N',
1597 p_create_fnd_attach => 'N',
1598 p_program_id => NULL,
1599 p_program_application_id => NULL,
1600 p_request_id => NULL,
1601 p_program_update_date => NULL,
1602 p_parent_attached_doc_id => NULL,
1603 p_generated_flag => 'N',
1604 p_delete_flag => 'N',
1605
1606 p_primary_contract_doc_flag => l_primary_contract_doc_flag,
1607 p_mergeable_doc_flag => 'N',
1608 p_versioning_flag => 'N',
1609
1610 x_business_document_type => lc_business_document_type,
1611 x_business_document_id => lc_business_document_id,
1612 x_business_document_version => lc_business_document_version,
1613 x_attached_document_id => lc_attached_document_id
1614 );
1615
1616
1617 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1618 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_CONTRACT_DOCS_GRP.insert_contract_doc, return status'||x_return_status);
1619 END IF;
1620
1621 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1622 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1623 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1624 RAISE FND_API.G_EXC_ERROR ;
1625 END IF;
1626
1627 IF FND_API.To_Boolean( p_commit ) THEN
1628 COMMIT WORK;
1629 END IF;
1630
1631 -- Standard call to get message count and if count is 1, get message info.
1632 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1633
1634 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1635 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_contract_doc');
1636 END IF;
1637
1638
1639 EXCEPTION
1640
1641 WHEN FND_API.G_EXC_ERROR THEN
1642
1643 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1644 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_contract_doc: OKC_API.G_EXCEPTION_ERROR Exception');
1645 END IF;
1646 IF l_tmpl_doc_exist_csr%ISOPEN THEN
1647 CLOSE l_tmpl_doc_exist_csr;
1648 END IF;
1649
1650 ROLLBACK TO g_add_contract_doc_grp;
1651 x_return_status := G_RET_STS_ERROR ;
1652 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1653
1654 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1655 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1656 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_contract_doc: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
1657 END IF;
1658
1659 ROLLBACK TO g_add_contract_doc_grp;
1660 x_return_status := G_RET_STS_UNEXP_ERROR ;
1661 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1662
1663 WHEN OTHERS THEN
1664 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1665 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_contract_doc because of EXCEPTION: '||sqlerrm);
1666 END IF;
1667
1668 ROLLBACK TO g_add_contract_doc_grp;
1669 x_return_status := G_RET_STS_UNEXP_ERROR ;
1670 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
1671 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
1672 END IF;
1673 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
1674
1675 END Add_Contract_Doc;
1676
1677 Procedure Add_Standard_Clause
1678 ( p_api_version IN Number,
1679 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
1680 p_commit IN Varchar2 default FND_API.G_FALSE,
1681 x_return_status OUT NOCOPY Varchar2,
1682 x_msg_data OUT NOCOPY Varchar2,
1683 x_msg_count OUT NOCOPY Number,
1684 p_document_type IN Varchar2,
1685 p_document_id IN NUMBER,
1686 p_section_id IN NUMBER DEFAULT null,
1687 p_section_name IN Varchar2 default null,
1688 p_clause_version_id IN Number default null,
1689 p_clause_title IN Varchar2 default null,
1690 p_clause_version_num IN Number default null,
1691 p_renumber_terms IN Varchar2 default FND_API.G_FALSE,
1692 x_contract_clause_id OUT NOCOPY Number,
1693 p_display_sequence IN NUMBER DEFAULT NULL,
1694 p_mode IN VARCHAR2 := 'NORMAL' -- Other value 'AMEND'
1695 )
1696 IS
1697 l_api_version CONSTANT NUMBER := 1;
1698 l_api_name CONSTANT VARCHAR2(30) := 'Add_Standard_Clause';
1699 l_scn_id OKC_SECTIONS_B.ID%TYPE;
1700 l_id NUMBER;
1701 l_ref_sequence NUMBER := 0;
1702 la_ref_sequence NUMBER := 0;
1703 ls_ref_sequence NUMBER := 0;
1704 l_doc_intent VARCHAR2(1);
1705
1706 TYPE l_cls_type IS RECORD (
1707 article_id OKC_ARTICLE_VERSIONS.ARTICLE_ID%TYPE,
1708 article_title OKC_ARTICLES_ALL.ARTICLE_TITLE%TYPE,
1709 article_version_id OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE,
1710 article_version_number OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE,
1711 article_intent OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE,
1712 provision_yn OKC_ARTICLE_VERSIONS.PROVISION_YN%TYPE,
1713 article_status OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE,
1714 start_date OKC_ARTICLE_VERSIONS.START_DATE%TYPE,
1715 end_date OKC_ARTICLE_VERSIONS.END_DATE%TYPE);
1716
1717 l_cls_type_rec l_cls_type;
1718
1719 CURSOR l_sec_id_validate_csr IS
1720 SELECT id
1721 FROM
1722 OKC_SECTIONS_B SEC
1723 WHERE SEC.ID = p_section_id
1724 AND DOCUMENT_TYPE = p_document_type
1725 AND DOCUMENT_ID = p_document_id;
1726
1727 CURSOR l_sec_name_validate_csr IS
1728 SELECT id
1729 FROM
1730 OKC_SECTIONS_B SEC
1731 WHERE SEC.heading = p_section_name
1732 AND DOCUMENT_TYPE = p_document_type
1733 AND DOCUMENT_ID = p_document_id;
1734
1735
1736 CURSOR l_cls_id_validate_csr IS
1737 SELECT
1738 article_id,
1739 article_title,
1740 article_version_id,
1741 article_version_number,
1742 article_intent,
1743 provision_yn,
1744 article_status,
1745 start_date,
1746 end_date
1747 FROM
1748 OKC_ARTICLES_V ART
1749 WHERE ART.article_version_id = p_clause_version_id;
1750
1751 CURSOR l_cls_name_validate_csr(l_org_id IN NUMBER) IS
1752 SELECT
1753 article_id,
1754 article_title,
1755 article_version_id,
1756 article_version_number,
1757 article_intent,
1758 provision_yn,
1759 article_status,
1760 start_date,
1761 end_date
1762 FROM
1763 okc_articles_local_v ART
1764 WHERE ART.article_title = p_clause_title
1765 AND ART.org_id = l_org_id
1766 UNION ALL
1767 SELECT
1768 article_id,
1769 article_title,
1770 article_version_id,
1771 article_version_number,
1772 article_intent,
1773 provision_yn,
1774 article_status,
1775 start_date,
1776 end_date
1777 FROM
1778 okc_articles_global_v ART
1779 WHERE ART.article_title = p_clause_title
1780 AND ART.org_id = l_org_id;
1781
1782 CURSOR ls_ref_seq_csr(lc_scn_id IN NUMBER) is
1783 SELECT nvl(max(section_sequence),0)
1784 FROM OKC_SECTIONS_B
1785 WHERE document_type = p_document_type
1786 AND document_id = p_document_id
1787 AND scn_id=lc_scn_id;
1788
1789 CURSOR la_ref_seq_csr(lc_scn_id IN NUMBER) is
1790 SELECT nvl(max(display_sequence),0)
1791 FROM OKC_K_ARTICLES_B
1792 WHERE document_type = p_document_type
1793 AND document_id = p_document_id
1794 AND scn_id=lc_scn_id;
1795
1796 CURSOR c_get_intent_csr IS
1797 SELECT intent FROM okc_bus_doc_types_b
1798 WHERE document_type = p_document_type;
1799
1800 BEGIN
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,'100: Entered OKC_TERMS_MIGRATE_GRP.Add_Standard_Clause');
1803 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
1804 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
1805 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
1806 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
1807 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
1808 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
1809 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_id : '||p_section_id);
1810 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_name : '||p_section_name);
1811 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_version_id : '||p_clause_version_id);
1812 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_title : '||p_clause_title);
1813 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_version_num : '||p_clause_version_num);
1814 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_renumber_terms : '||p_renumber_terms);
1815 END IF;
1816
1817 -- Standard Start of API savepoint
1818 SAVEPOINT g_add_standard_clause_GRP;
1819
1820 -- Standard call to check for call compatibility.
1821 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1822 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1823 END IF;
1824
1825 -- Initialize message list if p_init_msg_list is set to TRUE.
1826 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1827 FND_MSG_PUB.initialize;
1828 END IF;
1829
1830 -- Initialize API return status to success
1831 x_return_status := FND_API.G_RET_STS_SUCCESS;
1832
1833
1834 OPEN cur_org_csr;
1835 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
1836 CLOSE cur_org_csr;
1837
1838 validate_document(
1839 p_document_type => p_document_type,
1840 p_document_id => p_document_id,
1841 x_return_status => x_return_status,
1842 x_msg_data => x_msg_data,
1843 x_msg_count => x_msg_count);
1844
1845
1846 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1847 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
1848 END IF;
1849
1850 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
1851 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
1852 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
1853 RAISE FND_API.G_EXC_ERROR ;
1854 END IF;
1855
1856 IF p_section_id is NULL and p_section_name is NULL THEN
1857 -- no section is provided
1858 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1859 p_msg_name => 'OKC_TERMS_NO_SCN');
1860 x_return_status := G_RET_STS_ERROR;
1861 RAISE FND_API.G_EXC_ERROR ;
1862 END IF;
1863
1864 IF p_section_id is NOT NULL THEN
1865 OPEN l_sec_id_validate_csr;
1866 FETCH l_sec_id_validate_csr INTO l_scn_id;
1867 IF l_sec_id_validate_csr%NOTFOUND THEN
1868 --Invalid Section
1869 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1870 p_msg_name => 'OKC_TERMS_NO_SCN_ID',
1871 p_token1 => 'P_SCN_ID',
1872 p_token1_value => p_section_id);
1873 x_return_status := G_RET_STS_ERROR;
1874 RAISE FND_API.G_EXC_ERROR ;
1875 END IF;
1876 CLOSE l_sec_id_validate_csr;
1877 ELSE
1878 OPEN l_sec_name_validate_csr;
1879 FETCH l_sec_name_validate_csr INTO l_scn_id;
1880 IF l_sec_name_validate_csr%NOTFOUND THEN
1881 --Invalid Section
1882 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1883 p_msg_name => 'OKC_TERMS_NO_SCN_NAME',
1884 p_token1 => 'P_SCN_NAME',
1885 p_token1_value => p_section_name);
1886 x_return_status := G_RET_STS_ERROR;
1887 RAISE FND_API.G_EXC_ERROR ;
1888 END IF;
1889 CLOSE l_sec_name_validate_csr;
1890 END IF;
1891
1892 OPEN ls_ref_seq_csr(l_scn_id);
1893 FETCH ls_ref_seq_csr INTO ls_ref_sequence;
1894 CLOSE ls_ref_seq_csr;
1895
1896 OPEN la_ref_seq_csr(l_scn_id);
1897 FETCH la_ref_seq_csr INTO ls_ref_sequence;
1898 CLOSE la_ref_seq_csr;
1899
1900 /*If display sequence is passed then insert the clause at that position only.
1901 Else add it at the end*/
1902 IF p_display_sequence IS NULL THEN
1903 IF ls_ref_sequence >= la_ref_sequence THEN
1904 l_ref_sequence := ls_ref_sequence + 10;
1905 ELSE
1906 l_ref_sequence := la_ref_sequence + 10;
1907 END IF;
1908 ELSE
1909 l_ref_sequence := p_display_sequence;
1910 END IF;
1911
1912 -- Check that Clause info is provided
1913 IF p_clause_version_id is NULL and p_clause_title is NULL THEN
1914 -- no clause is provided
1915 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1916 p_msg_name => 'OKC_TERMS_INV_CLS');
1917 x_return_status := G_RET_STS_ERROR;
1918 RAISE FND_API.G_EXC_ERROR ;
1919 END IF;
1920
1921 IF p_clause_version_id is not NULL THEN
1922 OPEN l_cls_id_validate_csr;
1923 FETCH l_cls_id_validate_csr INTO l_cls_type_rec ;
1924 IF l_cls_id_validate_csr%NOTFOUND THEN
1925 --Invalid Clause
1926 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1927 p_msg_name => 'OKC_TERMS_INV_CLS_ID',
1928 p_token1 => 'P_CLS_VER_ID',
1929 p_token1_value => p_clause_version_id);
1930 x_return_status := G_RET_STS_ERROR;
1931 RAISE FND_API.G_EXC_ERROR ;
1932 END IF;
1933 CLOSE l_cls_id_validate_csr;
1934
1935 ELSE
1936 OPEN l_cls_name_validate_csr(G_CURRENT_ORG_ID);
1937 FETCH l_cls_name_validate_csr INTO l_cls_type_rec ;
1938 IF l_cls_name_validate_csr%NOTFOUND THEN
1939 --Invalid Clause Name
1940 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1941 p_msg_name => 'OKC_TERMS_INV_CLS_NAME',
1942 p_token1 => 'P_CLS_TITLE',
1943 p_token1_value => p_clause_title);
1944 x_return_status := G_RET_STS_ERROR;
1945 RAISE FND_API.G_EXC_ERROR ;
1946 END IF;
1947 CLOSE l_cls_name_validate_csr;
1948
1949 END IF;
1950
1951 IF l_cls_type_rec.article_status <> 'APPROVED' THEN
1952 --Invalid Clause Status
1953 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1954 p_msg_name => 'OKC_TERMS_INV_CLS_STS',
1955 p_token1 => 'P_CLAUSE_TITLE',
1956 p_token1_value => l_cls_type_rec.article_title);
1957 x_return_status := G_RET_STS_ERROR;
1958 RAISE FND_API.G_EXC_ERROR ;
1959 END IF;
1960
1961 /*IF p_document_type IN ('PA_BLANKET', 'PA_CONTRACT','PO_STANDARD', 'AUCTION', 'RFI', 'RFQ') AND
1962 l_cls_type_rec.article_intent = 'S' THEN
1963 --Clause is of Sell Intent
1964 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1965 p_msg_name => 'OKC_TERMS_INV_CLS_INTENT',
1966 p_token1 => 'P_CLAUSE_TITLE',
1967 p_token1_value => l_cls_type_rec.article_title,
1968 p_token2 => 'P_CLAUSE_INTENT',
1969 p_token2_value => l_cls_type_rec.article_intent,
1970 p_token3 => 'P_DOC_INTENT',
1971 p_token3_value => 'BUY');
1972 x_return_status := G_RET_STS_ERROR;
1973 RAISE FND_API.G_EXC_ERROR ;
1974 END IF;
1975
1976 IF p_document_type IN ('B', 'O', 'QUOTE', 'OKS') AND
1977 l_cls_type_rec.article_intent = 'B' THEN
1978 --Clause is of Buy Intent
1979 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1980 p_msg_name => 'OKC_TERMS_INV_CLS_INTENT',
1981 p_token1 => 'P_CLAUSE_TITLE',
1982 p_token1_value => l_cls_type_rec.article_title,
1983 p_token2 => 'P_CLAUSE_INTENT',
1984 p_token2_value => l_cls_type_rec.article_intent,
1985 p_token3 => 'P_DOC_INTENT',
1986 p_token3_value => 'SELL');
1987 x_return_status := G_RET_STS_ERROR;
1988 RAISE FND_API.G_EXC_ERROR ;
1989 END IF; */
1990
1991 OPEN c_get_intent_csr;
1992 FETCH c_get_intent_csr INTO l_doc_intent;
1993 CLOSE c_get_intent_csr;
1994
1995 IF l_doc_intent <> l_cls_type_rec.article_intent THEN
1996
1997 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
1998 p_msg_name => 'OKC_TERMS_INV_CLS_INTENT',
1999 p_token1 => 'P_CLAUSE_TITLE',
2000 p_token1_value => l_cls_type_rec.article_title,
2001 p_token2 => 'P_CLAUSE_INTENT',
2002 p_token2_value => l_cls_type_rec.article_intent,
2003 p_token3 => 'P_DOC_INTENT',
2004 p_token3_value => l_doc_intent);
2005 x_return_status := G_RET_STS_ERROR;
2006 RAISE FND_API.G_EXC_ERROR ;
2007 END IF;
2008
2009
2010 -- if template has provision_yn = 'y' then any clause can be added
2011 -- otherwise check clause is of not provision = 'y'
2012 IF G_DOC_TYPE_REC.provision_allowed_yn = 'N' AND
2013 l_cls_type_rec.provision_yn = 'Y' THEN
2014 --Clause is of Provision Type 'Y' not allowed
2015 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2016 p_msg_name => 'OKC_TERMS_INV_CLS_PROV',
2017 p_token1 => 'P_CLAUSE_TITLE',
2018 p_token1_value => l_cls_type_rec.article_title,
2019 p_token2 => 'P_DOCUMENT_TYPE',
2020 p_token2_value => p_document_type);
2021 x_return_status := G_RET_STS_ERROR;
2022 RAISE FND_API.G_EXC_ERROR ;
2023 END IF;
2024
2025
2026 OKC_K_ARTICLES_GRP.create_article(
2027 p_api_version => 1,
2028 p_init_msg_list => FND_API.G_FALSE,
2029 p_validation_level => NULL,
2030 p_mode => 'NORMAL',
2031 x_return_status => x_return_status,
2032 x_msg_count => x_msg_count,
2033 x_msg_data => x_msg_data,
2034 p_id => NULL,
2035 p_sav_sae_id => l_cls_type_rec.article_id,
2036 p_document_type => p_document_type,
2037 p_document_id => p_document_id,
2038 p_scn_id => l_scn_id,
2039 p_article_version_id => l_cls_type_rec.article_version_id,
2040 p_display_sequence => l_ref_sequence,
2041 p_amendment_description => NULL,
2042 p_print_text_yn => NULL,
2043 p_ref_article_version_id=> NULL,
2044 p_ref_article_id => NULL,
2045 x_id => l_id
2046 );
2047
2048
2049 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2050 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_K_ARTICLES_GRP.create_article, return status'||x_return_status);
2051 END IF;
2052
2053 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2054 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2055 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2056 RAISE FND_API.G_EXC_ERROR ;
2057 ELSE -- in case of success retrun the OUT param
2058 x_contract_clause_id := l_id;
2059 END IF;
2060 -----------------------------------------------------
2061
2062 IF p_renumber_terms = 'Y' THEN
2063 apply_numbering_scheme(
2064 p_document_type => p_document_type,
2065 p_document_id => p_document_id,
2066 x_return_status => x_return_status,
2067 x_msg_count => x_msg_count,
2068 x_msg_data => x_msg_data
2069 );
2070
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,'600: apply_numbering_scheme, return status'||x_return_status);
2073 END IF;
2074
2075 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2076 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2077 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2078 RAISE FND_API.G_EXC_ERROR ;
2079 END IF;
2080 END IF;
2081
2082
2083 IF FND_API.To_Boolean( p_commit ) THEN
2084 COMMIT WORK;
2085 END IF;
2086
2087 -- Standard call to get message count and if count is 1, get message info.
2088 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2089
2090 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2091 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_standard_clause');
2092 END IF;
2093
2094 EXCEPTION
2095
2096 WHEN FND_API.G_EXC_ERROR THEN
2097
2098 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2099 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_standard_clause: OKC_API.G_EXCEPTION_ERROR Exception');
2100 END IF;
2101
2102 IF l_sec_id_validate_csr%ISOPEN THEN
2103 CLOSE l_sec_id_validate_csr;
2104 END IF;
2105 IF l_sec_name_validate_csr%ISOPEN THEN
2106 CLOSE l_sec_name_validate_csr;
2107 END IF;
2108 IF l_cls_id_validate_csr%ISOPEN THEN
2109 CLOSE l_cls_id_validate_csr;
2110 END IF;
2111 IF l_cls_name_validate_csr%ISOPEN THEN
2112 CLOSE l_cls_name_validate_csr;
2113 END IF;
2114
2115 ROLLBACK TO g_add_standard_clause_grp;
2116 x_return_status := G_RET_STS_ERROR ;
2117 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2118
2119 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2120 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2121 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_standard_clause: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
2122 END IF;
2123
2124 ROLLBACK TO g_add_standard_clause_grp;
2125 x_return_status := G_RET_STS_UNEXP_ERROR ;
2126 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2127
2128 WHEN OTHERS THEN
2129 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2130 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_standard_clause because of EXCEPTION: '||sqlerrm);
2131 END IF;
2132
2133 ROLLBACK TO g_add_standard_clause_grp;
2134 x_return_status := G_RET_STS_UNEXP_ERROR ;
2135 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
2136 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
2137 END IF;
2138 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2139
2140
2141 END Add_Standard_Clause;
2142
2143 Procedure Add_Non_Standard_Clause
2144 ( p_api_version IN Number,
2145 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
2146 p_commit IN Varchar2 default FND_API.G_FALSE,
2147 x_return_status OUT NOCOPY Varchar2,
2148 x_msg_data OUT NOCOPY Varchar2,
2149 x_msg_count OUT NOCOPY Number,
2150 p_document_type IN Varchar2,
2151 p_document_id IN Number,
2152 p_section_id IN NUMBER DEFAULT null,
2153 p_section_name IN Varchar2 default null,
2154 p_clause_title IN Varchar2,
2155 p_clause_text IN CLOB DEFAULT NULL,
2156 p_clause_type IN Varchar2 default 'OTHER',
2157 p_clause_disp_name IN Varchar2 default null,
2158 p_clause_description IN Varchar2 default null,
2159 p_renumber_terms IN Varchar2 default FND_API.G_FALSE,
2160 p_edited_in_word IN VARCHAR2 DEFAULT 'N',
2161 p_clause_text_in_word IN BLOB DEFAULT NULL,
2162 x_contract_clause_id OUT NOCOPY Number,
2163 x_clause_version_id OUT NOCOPY Number
2164 )
2165 IS
2166 l_api_version CONSTANT NUMBER := 1;
2167 l_api_name CONSTANT VARCHAR2(30) := 'Add_Non_Standard_Clause';
2168 l_cat_id NUMBER;
2169 l_article_version_id NUMBER;
2170 l_scn_id OKC_SECTIONS_B.ID%TYPE;
2171
2172
2173 CURSOR l_sec_id_validate_csr IS
2174 SELECT id
2175 FROM
2176 OKC_SECTIONS_B SEC
2177 WHERE SEC.ID = p_section_id
2178 AND DOCUMENT_TYPE = p_document_type
2179 AND DOCUMENT_ID = p_document_id;
2180
2181 CURSOR l_sec_name_validate_csr IS
2182 SELECT id
2183 FROM
2184 OKC_SECTIONS_B SEC
2185 WHERE SEC.heading = p_section_name
2186 AND DOCUMENT_TYPE = p_document_type
2187 AND DOCUMENT_ID = p_document_id;
2188
2189 BEGIN
2190 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2191 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.Add_Non_Standard_Clause');
2192 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
2193 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
2194 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
2195 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
2196 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
2197 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
2198 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_id : '||p_section_id);
2199 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_name : '||p_section_name);
2200 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_title : '||p_clause_title);
2201 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_text : '||p_clause_text);
2202 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_type : '||p_clause_type);
2203 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_disp_name : '||p_clause_disp_name);
2204 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_description : '||p_clause_description);
2205 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_renumber_terms : '||p_renumber_terms);
2206 END IF;
2207
2208 -- Standard Start of API savepoint
2209 SAVEPOINT g_add_non_standrad_clause_grp;
2210
2211 -- Standard call to check for call compatibility.
2212 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2213 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2214 END IF;
2215
2216 -- Initialize message list if p_init_msg_list is set to TRUE.
2217 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2218 FND_MSG_PUB.initialize;
2219 END IF;
2220
2221 -- Initialize API return status to success
2222 x_return_status := FND_API.G_RET_STS_SUCCESS;
2223
2224 validate_document(
2225 p_document_type => p_document_type,
2226 p_document_id => p_document_id,
2227 x_return_status => x_return_status,
2228 x_msg_data => x_msg_data,
2229 x_msg_count => x_msg_count);
2230
2231
2232 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2233 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
2234 END IF;
2235
2236 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2237 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2238 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2239 RAISE FND_API.G_EXC_ERROR ;
2240 END IF;
2241
2242 IF p_section_id is NULL and p_section_name is NULL THEN
2243 -- no section is provided
2244 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2245 p_msg_name => 'OKC_TERMS_NO_SCN');
2246 x_return_status := G_RET_STS_ERROR;
2247 RAISE FND_API.G_EXC_ERROR ;
2248 END IF;
2249
2250 IF p_section_id is NOT NULL THEN
2251 OPEN l_sec_id_validate_csr;
2252 FETCH l_sec_id_validate_csr INTO l_scn_id;
2253 IF l_sec_id_validate_csr%NOTFOUND THEN
2254 --Invalid Section
2255 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2256 p_msg_name => 'OKC_TERMS_NO_SCN_ID',
2257 p_token1 => 'P_SCN_ID',
2258 p_token1_value => p_section_id);
2259 x_return_status := G_RET_STS_ERROR;
2260 RAISE FND_API.G_EXC_ERROR ;
2261 END IF;
2262 CLOSE l_sec_id_validate_csr;
2263 ELSE
2264 OPEN l_sec_name_validate_csr;
2265 FETCH l_sec_name_validate_csr INTO l_scn_id;
2266 IF l_sec_name_validate_csr%NOTFOUND THEN
2267 --Invalid Section
2268 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2269 p_msg_name => 'OKC_TERMS_NO_SCN_NAME',
2270 p_token1 => 'P_SCN_NAME',
2271 p_token1_value => p_section_name);
2272 x_return_status := G_RET_STS_ERROR;
2273 RAISE FND_API.G_EXC_ERROR ;
2274 END IF;
2275 CLOSE l_sec_name_validate_csr;
2276 END IF;
2277
2278 /*If article_text is null and article_text in word is also null throw error*/
2279
2280 IF p_clause_text is NULL and p_clause_text_in_word is NULL THEN
2281 -- no clause text is provided
2282 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2283 p_msg_name => 'OKC_TERMS_NO_CLS_TEXT');
2284 x_return_status := G_RET_STS_ERROR;
2285 RAISE FND_API.G_EXC_ERROR ;
2286 END IF;
2287
2288 /*If edited in word is 'Y' then clause text is word is mandatory*/
2289 IF p_edited_in_word = 'Y' AND p_clause_text_in_word IS NULL THEN
2290 -- no wml clause text is provided
2291 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2292 p_msg_name => 'OKC_TERMS_INV_CLS_text');
2293 x_return_status := G_RET_STS_ERROR;
2294 RAISE FND_API.G_EXC_ERROR ;
2295 END IF;
2296
2297
2298 OKC_K_NON_STD_ART_GRP.create_non_std_article(
2299 p_api_version => 1,
2300 p_init_msg_list => FND_API.G_FALSE,
2301 p_validate_commit => FND_API.G_FALSE,
2302 p_validation_string => 'OKC_TEST_UI',
2303 p_commit => FND_API.G_FALSE,
2304 p_mode =>'NORMAL', -- Other value 'AMEND'
2305 x_return_status => x_return_status,
2306 x_msg_count => x_msg_count,
2307 x_msg_data => x_msg_data,
2308 p_article_title => p_clause_title,
2309 p_article_type => p_clause_type,
2310 p_article_text => p_clause_text,
2311 p_provision_yn => 'N',
2312 p_std_article_version_id => NULL,
2313 p_display_name => p_clause_disp_name,
2314 p_article_description => p_clause_description,
2315 p_ref_type => 'SECTION', -- 'ARTICLE' or 'SECTION'
2316 p_ref_id => l_scn_id ,-- Id of okc_sections_b or okc_articles_b depending upon ref type
2317 p_doc_type => p_document_type,
2318 p_doc_id => p_document_id,
2319 p_cat_id => NULL, -- Should be passed when exsisitng std is modified to make non-std.If it is passed then ref_type and ref_id doesnt need to be passed.
2320 p_amendment_description => NULL,
2321 p_print_text_yn => NULL,
2322 x_cat_id => l_cat_id,
2323 x_article_version_id => l_article_version_id
2324 );
2325
2326
2327 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2328 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_K_NON_STD_ART_GRP.create_non_std_article, return status'||x_return_status);
2329 END IF;
2330
2331 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2332 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2333 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2334 RAISE FND_API.G_EXC_ERROR ;
2335 ELSE -- in case of success retrun OUT params
2336 x_contract_clause_id := l_cat_id;
2337 x_clause_version_id := l_article_version_id;
2338 END IF;
2339 -----------------------------------------------------
2340
2341 IF p_renumber_terms = 'Y' THEN
2342 apply_numbering_scheme(
2343 p_document_type => p_document_type,
2344 p_document_id => p_document_id,
2345 x_return_status => x_return_status,
2346 x_msg_count => x_msg_count,
2347 x_msg_data => x_msg_data
2348 );
2349
2350 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2351 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: apply_numbering_scheme, return status'||x_return_status);
2352 END IF;
2353
2354 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2355 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2356 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2357 RAISE FND_API.G_EXC_ERROR ;
2358 END IF;
2359 END IF;
2360
2361
2362 IF FND_API.To_Boolean( p_commit ) THEN
2363 COMMIT WORK;
2364 END IF;
2365
2366 -- Standard call to get message count and if count is 1, get message info.
2367 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2368
2369 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2370 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_non_standard_clause');
2371 END IF;
2372
2373 EXCEPTION
2374
2375 WHEN FND_API.G_EXC_ERROR THEN
2376
2377 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2378 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_non_standard_clause: OKC_API.G_EXCEPTION_ERROR Exception');
2379 END IF;
2380 IF l_sec_id_validate_csr%ISOPEN THEN
2381 CLOSE l_sec_id_validate_csr;
2382 END IF;
2383 IF l_sec_name_validate_csr%ISOPEN THEN
2384 CLOSE l_sec_name_validate_csr;
2385 END IF;
2386
2387 ROLLBACK TO g_add_non_standrad_clause_grp;
2388 x_return_status := G_RET_STS_ERROR ;
2389 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2390
2391 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2392 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2393 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_non_standard_clause: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
2394 END IF;
2395
2396 ROLLBACK TO g_add_non_standrad_clause_grp;
2397 x_return_status := G_RET_STS_UNEXP_ERROR ;
2398 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2399
2400 WHEN OTHERS THEN
2401 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2402 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_non_standard_clause because of EXCEPTION: '||sqlerrm);
2403 END IF;
2404
2405 ROLLBACK TO g_add_non_standrad_clause_grp;
2406 x_return_status := G_RET_STS_UNEXP_ERROR ;
2407 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
2408 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
2409 END IF;
2410 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2411
2412 END Add_Non_Standard_Clause;
2413
2414 Procedure Add_Section
2415 ( p_api_version IN Number,
2416 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
2417 p_commit IN Varchar2 default FND_API.G_FALSE,
2418 x_return_status OUT NOCOPY Varchar2,
2419 x_msg_data OUT NOCOPY Varchar2,
2420 x_msg_count OUT NOCOPY Number,
2421 p_document_type IN Varchar2,
2422 p_document_id IN Number,
2423 p_section_source IN Varchar2,
2424 p_section_name IN Varchar2,
2425 p_section_description IN Varchar2 default null,
2426 p_renumber_terms IN Varchar2 default FND_API.G_FALSE,
2427 p_orig_system_reference_code IN VARCHAR2 default NULL,
2428 p_orig_system_reference_id1 IN NUMBER default NULL,
2429 p_orig_system_reference_id2 IN NUMBER default NULL,
2430 x_section_id OUT NOCOPY Number
2431 )
2432 IS
2433 l_api_version CONSTANT NUMBER := 1;
2434 l_api_name CONSTANT VARCHAR2(30) := 'add_section';
2435 l_scn_id NUMBER;
2436 l_dummy VARCHAR2(1) := NULL;
2437 l_section_sequence OKC_SECTIONS_B.section_sequence%TYPE;
2438 l_scn_code OKC_SECTIONS_B.scn_code%TYPE;
2439 l_scn_heading OKC_SECTIONS_B.heading%TYPE;
2440 l_scn_desc OKC_SECTIONS_B.description%TYPE;
2441 l_section_name OKC_SECTIONS_B.heading%TYPE;
2442 l_section_description OKC_SECTIONS_B.description%TYPE;
2443
2444
2445 CURSOR l_sec_validate_csr IS
2446 SELECT lookup_code,meaning,description
2447 FROM
2448 FND_LOOKUPS
2449 WHERE lookup_type = 'OKC_ARTICLE_SECTION'
2450 AND lookup_code = p_section_name;
2451
2452 CURSOR l_sec_seq_csr IS
2453 SELECT max(section_sequence)
2454 FROM
2455 OKC_SECTIONS_B
2456 WHERE document_id = p_document_id
2457 AND document_type = p_document_type
2458 AND scn_id IS NULL;
2459
2460 CURSOR l_tmpl_doc_exist_csr IS
2461 SELECT 1
2462 FROM
2463 OKC_TEMPLATE_USAGES
2464 WHERE document_type = p_document_type
2465 AND document_id = p_document_id;
2466
2467
2468 BEGIN
2469 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2470 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.add_section');
2471 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
2472 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
2473 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
2474 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
2475 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
2476 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
2477 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_source : '||p_section_source);
2478 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_name : '||p_section_name);
2479 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_section_description : '||p_section_description);
2480 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_renumber_terms : '||p_renumber_terms);
2481 END IF;
2482
2483 -- Standard Start of API savepoint
2484 SAVEPOINT g_add_section_GRP;
2485
2486 -- Standard call to check for call compatibility.
2487 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2488 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2489 END IF;
2490
2491 -- Initialize message list if p_init_msg_list is set to TRUE.
2492 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2493 FND_MSG_PUB.initialize;
2494 END IF;
2495
2496 -- Initialize API return status to success
2497 x_return_status := FND_API.G_RET_STS_SUCCESS;
2498
2499 validate_document(
2500 p_document_type => p_document_type,
2501 p_document_id => p_document_id,
2502 x_return_status => x_return_status,
2503 x_msg_data => x_msg_data,
2504 x_msg_count => x_msg_count);
2505
2506
2507 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2508 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
2509 END IF;
2510
2511 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2512 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2513 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2514 RAISE FND_API.G_EXC_ERROR ;
2515 END IF;
2516
2517 OPEN l_tmpl_doc_exist_csr;
2518 FETCH l_tmpl_doc_exist_csr INTO l_dummy ;
2519 IF l_tmpl_doc_exist_csr%NOTFOUND THEN
2520 --Document already has Template
2521 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2522 p_msg_name => 'OKC_TERMS_DOES_NOT_EXIST');
2523 x_return_status := G_RET_STS_ERROR;
2524 RAISE FND_API.G_EXC_ERROR ;
2525 END IF;
2526 CLOSE l_tmpl_doc_exist_csr;
2527
2528
2529 IF p_section_source NOT IN ('LIBRARY','NEW') THEN
2530 --Invalid Source
2531 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2532 p_msg_name => 'OKC_TERMS_INV_SEC_SRC',
2533 p_token1 => 'P_SECTION_SOURCE',
2534 p_token1_value => p_section_source);
2535 x_return_status := G_RET_STS_ERROR;
2536 RAISE FND_API.G_EXC_ERROR ;
2537 END IF;
2538
2539 IF p_section_source = 'LIBRARY' THEN
2540 OPEN l_sec_validate_csr;
2541 FETCH l_sec_validate_csr INTO l_scn_code,l_scn_heading,l_scn_desc ;
2542 IF l_sec_validate_csr%NOTFOUND THEN
2543 -- Section does not exist in Contract Library
2544 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2545 p_msg_name => 'OKC_TERMS_INV_LIB_SCN',
2546 p_token1 => 'P_SECTION_NAME',
2547 p_token1_value => p_section_name);
2548 x_return_status := G_RET_STS_ERROR;
2549 RAISE FND_API.G_EXC_ERROR ;
2550 END IF;
2551 CLOSE l_sec_validate_csr;
2552 END IF;
2553
2554 OPEN l_sec_seq_csr;
2555 FETCH l_sec_seq_csr INTO l_section_sequence;
2556 CLOSE l_sec_seq_csr;
2557
2558 l_section_sequence := l_section_sequence+10;
2559
2560 IF p_section_source = 'LIBRARY' THEN
2561 l_section_name := l_scn_heading;
2562 l_section_description := l_scn_desc;
2563 ELSIF p_section_source = 'NEW' THEN
2564 l_section_name := p_section_name;
2565 l_section_description := p_section_description;
2566 l_scn_code := NULL;
2567 END IF;
2568
2569
2570 OKC_TERMS_SECTIONS_GRP.create_section(
2571 p_api_version => l_api_version,
2572 p_init_msg_list => FND_API.G_FALSE,
2573 p_commit => FND_API.G_FALSE,
2574 x_return_status => x_return_status,
2575 x_msg_count => x_msg_count,
2576 x_msg_data => x_msg_data,
2577 p_id => NULL,
2578 p_section_sequence => l_section_sequence,
2579 p_scn_id => NULL,
2580 p_heading => l_section_name,
2581 p_description => l_section_description,
2582 p_document_type => p_document_type,
2583 p_document_id => p_document_id,
2584 p_scn_code => l_scn_code,
2585 p_mode => 'NORMAL',
2586 x_id => x_section_id,
2587 p_orig_system_reference_code => p_orig_system_reference_code,
2588 p_orig_system_reference_id1 => p_orig_system_reference_id1,
2589 p_orig_system_reference_id2 => p_orig_system_reference_id2
2590 );
2591
2592 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2593 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_TERMS_SECTIONS.create_section, return status'||x_return_status);
2594 END IF;
2595
2596 --------------------------------------------
2597 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2598 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2599 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2600 RAISE FND_API.G_EXC_ERROR ;
2601 END IF;
2602 --------------------------------------------
2603
2604 IF p_renumber_terms = 'Y' THEN
2605 apply_numbering_scheme(
2606 p_document_type => p_document_type,
2607 p_document_id => p_document_id,
2608 x_return_status => x_return_status,
2609 x_msg_count => x_msg_count,
2610 x_msg_data => x_msg_data
2611 );
2612
2613 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2614 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: apply_numbering_scheme, return status'||x_return_status);
2615 END IF;
2616
2617 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
2618 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2619 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
2620 RAISE FND_API.G_EXC_ERROR ;
2621 END IF;
2622 END IF;
2623
2624 IF FND_API.To_Boolean( p_commit ) THEN
2625 COMMIT WORK;
2626 END IF;
2627
2628 -- Standard call to get message count and if count is 1, get message info.
2629 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2630
2631 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2632 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_section');
2633 END IF;
2634
2635 EXCEPTION
2636
2637 WHEN FND_API.G_EXC_ERROR THEN
2638
2639 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2640 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_section: OKC_API.G_EXCEPTION_ERROR Exception');
2641 END IF;
2642 IF l_sec_validate_csr%ISOPEN THEN
2643 CLOSE l_sec_validate_csr;
2644 END IF;
2645
2646 ROLLBACK TO g_add_section_grp;
2647 x_return_status := G_RET_STS_ERROR ;
2648 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2649
2650 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2651 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2652 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_section: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
2653 END IF;
2654
2655 ROLLBACK TO g_add_section_grp;
2656 x_return_status := G_RET_STS_UNEXP_ERROR ;
2657 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2658
2659 WHEN OTHERS THEN
2660 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2661 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_section because of EXCEPTION: '||sqlerrm);
2662 END IF;
2663
2664 ROLLBACK TO g_add_section_grp;
2665 x_return_status := G_RET_STS_UNEXP_ERROR ;
2666 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
2667 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
2668 END IF;
2669 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
2670
2671 END Add_Section;
2672
2673 /*Delete Doc will delete all the template associated to the document, the sections
2674 and clauses associated, the deliverables and the contract documents. */
2675 /*
2676 PROCEDURE Delete_Doc (
2677 p_api_version IN NUMBER,
2678 p_doc_type IN VARCHAR2,
2679 p_doc_id IN NUMBER,
2680 x_return_status OUT NOCOPY VARCHAR2,
2681 x_msg_data OUT NOCOPY VARCHAR2,
2682 x_msg_count OUT NOCOPY NUMBER )
2683 IS
2684
2685 CURSOR c_tmpl_usgs_exists IS
2686 SELECT '!' FROM okc_template_usages
2687 WHERE document_type = p_doc_type
2688 AND document_id = p_doc_id;
2689
2690 l_tmpl_exists VARCHAR2(1);
2691
2692 BEGIN
2693
2694 OPEN c_tmpl_usgs_exists;
2695 FETCH c_tmpl_usgs_exists INTO l_tmpl_exists;
2696 IF c_tmpl_usgs_exists%FOUND THEN
2697 okc_terms_util_grp.delete_doc(p_api_version => 1.0,
2698 x_return_status => x_return_status,
2699 x_msg_data => x_msg_data,
2700 x_msg_count => x_msg_count,
2701 p_doc_type => p_doc_type,
2702 p_doc_id => p_doc_id);
2703
2704 END IF;
2705
2706 CLOSE c_tmpl_usgs_exists;
2707
2708 END Delete_Doc;
2709 */
2710
2711 PROCEDURE Apps_initialize(p_api_version IN NUMBER,
2712 p_user_name IN VARCHAR2,
2713 p_resp_name IN VARCHAR2,
2714 p_org_id IN number)
2715 IS
2716
2717
2718 l_user_id NUMBER;
2719 l_resp_id NUMBER;
2720 l_resp_appl_id NUMBER;
2721
2722 BEGIN
2723
2724
2725 -- Apps Initialization
2726 SELECT user_id
2727 INTO l_user_id
2728 FROM fnd_user
2729 WHERE user_name =p_user_name;
2730
2731 SELECT b.RESPONSIBILITY_ID,b.APPLICATION_ID
2732 INTO l_resp_id,l_resp_appl_id
2733 FROM fnd_responsibility_tl tl, fnd_responsibility b
2734 WHERE tl.responsibility_name = p_resp_name
2735 AND LANGUAGE = UserEnv('LANG')
2736 AND tl.RESPONSIBILITY_ID = b.RESPONSIBILITY_ID;
2737
2738 fnd_global.apps_initialize
2739 ( user_id => l_user_id
2740 ,resp_id => l_resp_id
2741 ,resp_appl_id => l_resp_appl_id
2742 );
2743
2744 -- MO init
2745 mo_global.init('OKC');
2746
2747 -- MO Set policy Context
2748 mo_global.set_policy_context('S', p_org_id);
2749
2750 END Apps_initialize;
2751
2752
2753 FUNCTION get_valueset_id (
2754 p_value_set_id IN NUMBER,
2755 p_var_value IN VARCHAR2,
2756 p_validation_type IN VARCHAR2)
2757
2758 RETURN number IS
2759
2760 -- I already have a value
2761 CURSOR c1 IS
2762 select value.flex_value_id
2763 --,value.description
2764 from fnd_flex_values_vl value
2765 where value.FLEX_VALUE_SET_ID = p_value_set_id
2766 and value.flex_value = p_var_value;
2767
2768 CURSOR c2 IS
2769
2770 select
2771 val_tab.application_table_name,
2772 val_tab.value_column_name,
2773 val_tab.id_column_name,
2774 val_tab.additional_where_clause,
2775 val_tab.meaning_column_name
2776 from fnd_flex_validation_tables val_tab
2777 where val_tab.FLEX_VALUE_SET_ID = p_value_set_id ;
2778
2779 l_value_id NUMBER := null;
2780
2781 c2rec c2%rowtype;
2782
2783 l_select_stmt VARCHAR2(2000);
2784
2785 value_cursor_id INTEGER;
2786 ret_val INTEGER;
2787 BEGIN
2788
2789 --if value set type is 'I' independent or 'X' - independent translatable
2790 --or 'D' dependent or 'Y' dependent translatable
2791
2792 IF (p_validation_type = 'I' OR p_validation_type = 'X' OR p_validation_type = 'D' OR p_validation_type = 'Y') THEN
2793
2794 OPEN c1;
2795 FETCH c1 INTO l_value_id;
2796 CLOSE c1;
2797 ELSIF (p_validation_type = 'F')THEN
2798
2799 --set the sql statement for valueset
2800 OPEN c2;
2801 FETCH c2 INTO c2rec;
2802 CLOSE c2;
2803
2804 IF c2rec.id_column_name IS NULL THEN
2805 RETURN null;
2806 END IF;
2807
2808 l_select_stmt := ' SELECT ' || NVL(c2rec.id_column_name,null) ||' as Flex_value_id,'||
2809 NVL(c2rec.value_column_name,'null') ||' as Flex_value,'||
2810 NVL(c2rec.meaning_column_name,'null') ||' as Flex_meaning FROM '||
2811 c2rec.application_table_name ;
2812
2813
2814 If c2rec.additional_where_clause is not null THEN
2815 -- If no WHERE keyword, add it
2816 IF (UPPER(substr(ltrim(c2rec.additional_where_clause),1,5)) <> 'WHERE') AND
2817 (UPPER(substr(ltrim(c2rec.additional_where_clause),1,8)) <> 'ORDER BY') THEN
2818
2819 l_select_stmt := l_select_stmt||' WHERE';
2820 END IF;
2821 -- add where clause
2822 l_select_stmt :=l_select_stmt||' '|| c2rec.additional_where_clause;
2823 END IF;
2824 --doing this becuase order by may exist in where clause
2825 l_select_stmt := 'SELECT FLEX_VALUE_ID FROM ('||l_select_stmt||') WHERE FLEX_VALUE = :1';
2826
2827 EXECUTE IMMEDIATE(l_select_stmt) INTO l_value_id USING p_var_value;
2828
2829 END IF;
2830 return l_value_id;
2831 EXCEPTION
2832 WHEN OTHERS THEN
2833 --close cursors
2834 IF c1%ISOPEN THEN
2835 CLOSE c1;
2836 END IF;
2837
2838 IF c2%ISOPEN THEN
2839 CLOSE c2;
2840 END IF;
2841
2842 RETURN NULL;
2843 END get_valueset_id;
2844
2845
2846 /*This API migrates variable values from external system to Contracts.
2847 1. p_doc_type is the document type in the target system
2848 2. p_doc_id is the document id in the target system.
2849 3. p_k_clause_id or (p_clause_title and p_clause_version) are mandatory.
2850 4. p_k_clause_id should be the id of the clause in the table OKC_K_ARTICLES_B in target system.
2851 We can pass this value if we are calling this API along with ADD Clause API.
2852 The clause_id o/p can be provided to this API directly.
2853
2854 */
2855 PROCEDURE update_variable_values(p_api_version IN NUMBER,
2856 p_doc_type IN VARCHAR2,
2857 p_doc_id IN NUMBER,
2858 p_k_clause_id IN NUMBER DEFAULT NULL,
2859 p_clause_title IN VARCHAR2 DEFAULT NULL,
2860 p_clause_version IN NUMBER DEFAULT NULL,
2861 p_variable_name IN VARCHAR2,
2862 p_variable_value IN VARCHAR2,
2863 p_override_global_yn IN VARCHAR2,
2864 p_global_variable_value IN VARCHAR2 := NULL,
2865 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
2866 p_commit IN Varchar2 default FND_API.G_FALSE,
2867 x_return_status OUT NOCOPY Varchar2,
2868 x_msg_data OUT NOCOPY Varchar2,
2869 x_msg_count OUT NOCOPY Number
2870 )
2871 IS
2872
2873 l_api_version CONSTANT NUMBER := 1;
2874 l_api_name CONSTANT VARCHAR2(30) := 'add_section';
2875 l_variable_value_id NUMBER;
2876 l_variable_value VARCHAR2(240);
2877 l_x_cat_id NUMBER;
2878 l_x_variable_code VARCHAR2(240);
2879 l_values_exists VARCHAR2(2);
2880 l_variable_code VARCHAR2(240);
2881 l_attr_value_set_id NUMBER;
2882 l_variable_type VARCHAR2(1);
2883 l_external_yn VARCHAR2(1);
2884 l_k_art_id NUMBER;
2885 l_article_id NUMBER;
2886 l_article_version_id NUMBER;
2887 l_validation_type VARCHAR2(1);
2888 l_var_intent VARCHAR2(1);
2889 l_var_exists VARCHAR2(1);
2890 l_global_var_value_id NUMBER;
2891
2892 CURSOR c_get_variable_code(p_var_intent VARCHAR2) IS
2893 SELECT b.variable_code, b.variable_type, b.external_yn, b.value_set_id
2894 FROM okc_bus_variables_tl tl, okc_bus_variables_b b
2895 WHERE tl.variable_name = p_variable_name
2896 AND b.variable_code = tl.variable_code
2897 AND b.variable_intent = p_var_intent
2898 AND LANGUAGE = UserEnv('LANG');
2899
2900 CURSOR c_get_value_set_id(p_variable_code VARCHAR2) IS
2901 SELECT value_set_id
2902 FROM okc_bus_variables_b
2903 WHERE variable_code = p_variable_code;
2904
2905 CURSOR c_get_var_value_id(p_attr_value_set_id NUMBER) IS
2906 SELECT flex_value_id
2907 FROM fnd_flex_values
2908 WHERE flex_value = p_variable_value
2909 AND FLEX_VALUE_SET_ID = p_attr_value_set_id;
2910
2911 CURSOR c_get_intent_csr IS
2912 SELECT intent FROM okc_bus_doc_types_b
2913 WHERE document_type = p_doc_type;
2914
2915 BEGIN
2916
2917 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2918 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.update_variable_values');
2919 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
2920 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
2921 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
2922 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
2923 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_doc_type);
2924 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_doc_id);
2925 END IF;
2926
2927 -- Standard Start of API savepoint
2928 SAVEPOINT g_update_variable_values_GRP;
2929
2930 -- Standard call to check for call compatibility.
2931 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2932 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2933 END IF;
2934
2935 -- Initialize message list if p_init_msg_list is set to TRUE.
2936 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2937 FND_MSG_PUB.initialize;
2938 END IF;
2939
2940 -- Initialize API return status to success
2941 x_return_status := FND_API.G_RET_STS_SUCCESS;
2942
2943
2944 OPEN cur_org_csr;
2945 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
2946 CLOSE cur_org_csr;
2947
2948 validate_document(
2949 p_document_type => p_doc_type,
2950 p_document_id => p_doc_id,
2951 x_return_status => x_return_status,
2952 x_msg_data => x_msg_data,
2953 x_msg_count => x_msg_count);
2954
2955
2956 --validate intent for a document / variable
2957 OPEN c_get_intent_csr;
2958 FETCH c_get_intent_csr INTO l_var_intent;
2959 CLOSE c_get_intent_csr;
2960
2961 --Fetch variable_code for the variable_name
2962 --validate if variable exists in the system
2963 OPEN c_get_variable_code(l_var_intent);
2964 FETCH c_get_variable_code INTO l_variable_code, l_variable_type, l_external_yn, l_attr_value_set_id;
2965 IF c_get_variable_code%NOTFOUND THEN
2966 -- Variable does not exist in Contract Library
2967 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2968 p_msg_name => 'OKC_TERMS_INV_LIB_VAR',
2969 p_token1 => 'P_VARIABLE_NAME',
2970 p_token1_value => p_variable_name);
2971 x_return_status := G_RET_STS_ERROR;
2972 RAISE FND_API.G_EXC_ERROR ;
2973 END IF;
2974 CLOSE c_get_variable_code;
2975
2976 --validate if variable value exists in the system and fetch the id
2977
2978 SELECT validation_type INTO l_validation_type
2979 FROM fnd_flex_value_sets WHERE flex_value_set_id = l_attr_value_set_id;
2980
2981 /* Fetch the variable value Id's of local and global values form variable values*/
2982 IF p_variable_value IS NOT NULL THEN
2983 l_variable_value_id := get_valueset_id
2984 (p_value_set_id => l_attr_value_set_id,
2985 p_var_value => p_variable_value,
2986 p_validation_type => l_validation_type
2987 );
2988 END IF;
2989
2990 IF (p_global_variable_value IS NOT NULL ) THEN
2991 l_global_var_value_id := get_valueset_id
2992 (p_value_set_id => l_attr_value_set_id,
2993 p_var_value => p_global_variable_value,
2994 p_validation_type => l_validation_type
2995 );
2996 END IF;
2997
2998 IF p_k_clause_id IS NOT NULL THEN
2999 l_k_art_id := p_k_clause_id;
3000 ELSIF p_clause_title IS NOT NULL AND p_clause_version IS NOT NULL THEN
3001
3002 SELECT kb.id INTO l_k_art_id
3003 FROM okc_k_articles_b kb, okc_articles_all a , okc_article_versions v
3004 WHERE a.article_title = p_clause_title AND a.org_id = G_CURRENT_ORG_ID
3005 AND kb.document_type = p_doc_type AND kb.document_id = p_doc_id
3006 AND v.article_version_number = p_clause_version AND a.article_id = v.article_id
3007 AND kb.sav_sae_id = a.article_id AND kb.article_version_id = v.article_version_id;
3008
3009 ELSE
3010 -- Clause ID/clause name, version combination is null
3011 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3012 p_msg_name => 'OKC_TERMS_NO_CLS_VALUE',
3013 p_token1 => 'P_VARIABLE_NAME',
3014 p_token1_value => p_variable_name,
3015 p_token2 => 'P_VAR_VALUE_SET_ID',
3016 p_token2_value => l_attr_value_set_id);
3017 x_return_status := G_RET_STS_ERROR;
3018 RAISE FND_API.G_EXC_ERROR ;
3019
3020 END IF;
3021
3022 /*There can exist only 1 row for a given id and variable code combination.
3023 So we will copy it only once and if another time user re-enters throw error'*/
3024
3025 SELECT 'Y' INTO l_var_exists
3026 FROM okc_k_art_variables
3027 WHERE cat_id = l_k_art_id
3028 AND variable_code = l_variable_code;
3029
3030 IF l_var_exists <> 'Y' THEN
3031
3032 OKC_K_ART_VARIABLES_PVT.insert_row(
3033 x_return_status => x_return_status,
3034 p_cat_id => l_k_art_id,
3035 p_variable_code => l_variable_code,
3036 p_variable_type => l_variable_type,
3037 p_external_yn => l_external_yn,
3038 p_variable_value_id => l_variable_value_id,
3039 p_variable_value => p_variable_value,
3040 p_attribute_value_set_id => l_attr_value_set_id,
3041 p_override_global_yn => p_override_global_yn,
3042 p_global_variable_value => p_global_variable_value,
3043 p_global_var_value_id => l_global_var_value_id,
3044 x_cat_id => l_x_cat_id,
3045 x_variable_code => l_x_variable_code);
3046
3047 ELSE
3048 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3049 p_msg_name => 'OKC_ARTID_VAR_ALREADY_EXISTS',
3050 p_token1 => 'P_VARIABLE_NAME',
3051 p_token1_value => p_variable_name,
3052 p_token2 => 'P_K_ART_ID',
3053 p_token2_value => l_k_art_id);
3054 x_return_status := G_RET_STS_ERROR;
3055 RAISE FND_API.G_EXC_ERROR ;
3056
3057 END IF;
3058
3059 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3060 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.update_variable_values, return status'||x_return_status);
3061 END IF;
3062
3063 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
3064 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3065 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
3066 RAISE FND_API.G_EXC_ERROR ;
3067 END IF;
3068
3069
3070 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3071 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving update_variable_values');
3072 END IF;
3073
3074 EXCEPTION
3075
3076 WHEN FND_API.G_EXC_ERROR THEN
3077
3078 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3079 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving update_variable_values: OKC_API.G_EXCEPTION_ERROR Exception');
3080 END IF;
3081 -- IF l_sec_validate_csr%ISOPEN THEN
3082 -- CLOSE l_sec_validate_csr;
3083 --END IF;
3084
3085 ROLLBACK TO g_update_variable_values_GRP;
3086 x_return_status := G_RET_STS_ERROR ;
3087 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3088
3089 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3090 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3091 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving update_variable_values: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
3092 END IF;
3093
3094 ROLLBACK TO g_update_variable_values_GRP;
3095 x_return_status := G_RET_STS_UNEXP_ERROR ;
3096 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3097
3098 WHEN OTHERS THEN
3099 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3100 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving update_variable_values because of EXCEPTION: '||sqlerrm);
3101 END IF;
3102
3103 ROLLBACK TO g_update_variable_values_GRP;
3104 x_return_status := G_RET_STS_UNEXP_ERROR ;
3105 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3106 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
3107 END IF;
3108 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3109
3110
3111 END update_variable_values;
3112
3113 PROCEDURE Create_template_usages(p_api_version IN NUMBER,
3114 p_document_type IN VARCHAR2,
3115 p_document_id IN NUMBER,
3116 p_contract_source IN VARCHAR2,
3117 p_contract_tmpl_id IN Number := NULL,
3118 p_contract_tmpl_name IN Varchar2 default NULL,
3119 p_authoring_party_code IN VARCHAR2 := NULL,
3120 p_autogen_deviations_flag IN VARCHAR2 := NULL,
3121 p_lock_terms_flag IN VARCHAR2 := NULL,
3122 p_enable_reporting_flag IN VARCHAR2 := NULL,
3123 p_approval_abstract_text IN CLOB := NULL,
3124 p_locked_by_user_name IN VARCHAR2 DEFAULT NULL,
3125 p_legal_contact_name IN VARCHAR2 DEFAULT NULL,
3126 p_contract_admin_name IN VARCHAR2 DEFAULT NULL,
3127 p_primary_template IN VARCHAR2 DEFAULT 'Y',
3128 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
3129 p_commit IN Varchar2 default FND_API.G_FALSE,
3130 x_return_status OUT NOCOPY Varchar2,
3131 x_msg_data OUT NOCOPY Varchar2,
3132 x_msg_count OUT NOCOPY NUMBER)
3133 IS
3134
3135 l_api_version CONSTANT NUMBER := 1;
3136 l_api_name CONSTANT VARCHAR2(30) := 'Create_template_usages';
3137 l_doc_intent VARCHAR2(2);
3138 l_dummy VARCHAR2(1) := NULL;
3139 l_dummy_n NUMBER;
3140
3141 l_contract_admin_id OKC_TEMPLATE_USAGES.CONTRACT_ADMIN_ID%TYPE;
3142 l_legal_contact_id OKC_TEMPLATE_USAGES.LEGAL_CONTACT_ID%TYPE;
3143 l_locked_by_user_id OKC_TEMPLATE_USAGES.LOCKED_BY_USER_ID%TYPE;
3144 l_document_type VARCHAR2(240);
3145 l_document_id NUMBER;
3146
3147 TYPE l_tmpl_type IS RECORD (
3148 template_id OKC_TERMS_TEMPLATES_ALL.TEMPLATE_ID%TYPE,
3149 template_name OKC_TERMS_TEMPLATES_ALL.TEMPLATE_NAME%TYPE,
3150 status_code OKC_TERMS_TEMPLATES_ALL.STATUS_CODE%TYPE,
3151 start_date OKC_TERMS_TEMPLATES_ALL.START_DATE%TYPE,
3152 end_date OKC_TERMS_TEMPLATES_ALL.END_DATE%TYPE,
3153 intent OKC_TERMS_TEMPLATES_ALL.INTENT%TYPE,
3154 org_id OKC_TERMS_TEMPLATES_ALL.ORG_ID%TYPE,
3155 tmpl_numbering_scheme OKC_TERMS_TEMPLATES_ALL.TMPL_NUMBERING_SCHEME%TYPE);
3156
3157 l_tmpl_type_rec l_tmpl_type;
3158
3159 CURSOR l_tmpl_id_validate_csr IS
3160 SELECT template_id,
3161 template_name,
3162 status_code,
3163 start_date,
3164 end_date,
3165 intent,
3166 org_id,
3167 tmpl_numbering_scheme
3168 FROM
3169 OKC_TERMS_TEMPLATES_ALL TMP
3170 WHERE
3171 TMP.template_id = p_contract_tmpl_id;
3172
3173 CURSOR l_tmpl_name_validate_csr(l_org_id IN NUMBER) IS
3174 SELECT template_id,
3175 template_name,
3176 status_code,
3177 start_date,
3178 end_date,
3179 intent,
3180 org_id,
3181 tmpl_numbering_scheme
3182 FROM
3183 OKC_TERMS_TEMPLATES_ALL TMP
3184 WHERE TMP.template_name = p_contract_tmpl_name
3185 AND TMP.org_id = l_org_id;
3186
3187 CURSOR l_tmpl_doc_exist_csr IS
3188 SELECT 1
3189 FROM
3190 OKC_TEMPLATE_USAGES
3191 WHERE document_type = p_document_type
3192 AND document_id = p_document_id;
3193
3194 CURSOR l_mlp_tmpl_doc_exist_csr IS
3195 SELECT template_id
3196 FROM
3197 OKC_TEMPLATE_USAGES
3198 WHERE document_type = p_document_type
3199 AND document_id = p_document_id
3200 UNION ALL
3201 SELECT template_id
3202 FROM
3203 OKC_MLP_TEMPLATE_USAGES
3204 WHERE document_type = p_document_type
3205 AND document_id = p_document_id;
3206
3207
3208 CURSOR l_alwd_usgs_csr(l_template_id IN NUMBER) IS
3209 SELECT 1
3210 FROM
3211 OKC_ALLOWED_TMPL_USAGES
3212 WHERE document_type = p_document_type
3213 AND template_id = l_template_id;
3214
3215 CURSOR c_get_intent_csr IS
3216 SELECT intent FROM okc_bus_doc_types_b
3217 WHERE document_type = p_document_type;
3218
3219 CURSOR c_get_user_id_csr(p_user_name IN VARCHAR2) IS
3220 SELECT user_id FROM fnd_user WHERE user_name LIKE p_user_name;
3221
3222 CURSOR c_get_person_id(p_person_name IN VARCHAR2) IS
3223 SELECT person_id FROM PER_ALL_PEOPLE_F
3224 WHERE full_name = p_person_name;
3225
3226
3227
3228 BEGIN
3229
3230 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3231 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.Create_Contract_Terms');
3232 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
3233 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
3234 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
3235 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
3236 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
3237 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
3238 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_source : '||p_contract_source);
3239 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_tmpl_id : '||p_contract_tmpl_id);
3240 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_contract_tmpl_name : '||p_contract_tmpl_name);
3241
3242 END IF;
3243
3244 -- Standard Start of API savepoint
3245 SAVEPOINT G_CREATE_CONTRACT_TERMS_GRP;
3246
3247 -- Standard call to check for call compatibility.
3248 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3249 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3250 END IF;
3251
3252 -- Initialize message list if p_init_msg_list is set to TRUE.
3253 IF FND_API.to_Boolean( p_init_msg_list ) THEN
3254 FND_MSG_PUB.initialize;
3255 END IF;
3256
3257 -- Initialize API return status to success
3258 x_return_status := FND_API.G_RET_STS_SUCCESS;
3259
3260
3261 OPEN cur_org_csr;
3262 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
3263 CLOSE cur_org_csr;
3264
3265 validate_document(
3266 p_document_type => p_document_type,
3267 p_document_id => p_document_id,
3268 x_return_status => x_return_status,
3269 x_msg_data => x_msg_data,
3270 x_msg_count => x_msg_count);
3271
3272
3273 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3274 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
3275 END IF;
3276
3277 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
3278 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3279 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
3280 RAISE FND_API.G_EXC_ERROR ;
3281 END IF;
3282
3283 -- Check that Contract source is Structured or Attached
3284 IF p_contract_source not in ('STRUCTURED','ATTACHED') THEN
3285 -- invalid contract source
3286 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3287 p_msg_name => 'OKC_TERMS_INVALID_SOURCE',
3288 p_token1 => 'P_CONTRACT_SOURCE',
3289 p_token1_value => p_contract_source);
3290 x_return_status := G_RET_STS_ERROR;
3291 RAISE FND_API.G_EXC_ERROR ;
3292 END IF;
3293
3294 IF p_contract_source ='STRUCTURED' THEN
3295 IF p_contract_tmpl_name is NULL AND p_contract_tmpl_id is NULL THEN
3296 -- no template is provided
3297 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3298 p_msg_name => 'OKC_TERMS_NO_TMPL_PROVIDED');
3299 x_return_status := G_RET_STS_ERROR;
3300 RAISE FND_API.G_EXC_ERROR ;
3301 END IF;
3302
3303 END IF;
3304
3305 IF p_contract_source ='STRUCTURED' THEN
3306 IF p_contract_tmpl_id is not NULL THEN
3307 OPEN l_tmpl_id_validate_csr;
3308 FETCH l_tmpl_id_validate_csr INTO l_tmpl_type_rec ;
3309 IF l_tmpl_id_validate_csr%NOTFOUND THEN
3310 --Invalid Template ID
3311 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3312 p_msg_name => 'OKC_TERMS_INVALID_TMPL_ID',
3313 p_token1 => 'P_TMPL_ID',
3314 p_token1_value => p_contract_tmpl_id);
3315 x_return_status := G_RET_STS_ERROR;
3316 RAISE FND_API.G_EXC_ERROR ;
3317 END IF;
3318 CLOSE l_tmpl_id_validate_csr;
3319
3320 ELSE
3321 OPEN l_tmpl_name_validate_csr(G_CURRENT_ORG_ID);
3322 FETCH l_tmpl_name_validate_csr INTO l_tmpl_type_rec ;
3323 IF l_tmpl_name_validate_csr%NOTFOUND THEN
3324 --Invalid Template Name
3325 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3326 p_msg_name => 'OKC_TERMS_INVALID_TMPL_NAME',
3327 p_token1 => 'P_TMPL_NAME',
3328 p_token1_value => p_contract_tmpl_name);
3329 x_return_status := G_RET_STS_ERROR;
3330 RAISE FND_API.G_EXC_ERROR ;
3331 END IF;
3332 CLOSE l_tmpl_name_validate_csr;
3333
3334 END IF;
3335
3336
3337 OPEN c_get_intent_csr;
3338 FETCH c_get_intent_csr INTO l_doc_intent;
3339 CLOSE c_get_intent_csr;
3340
3341 IF l_doc_intent <> l_tmpl_type_rec.intent THEN
3342
3343 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3344 p_msg_name => 'OKC_TERMS_INV_TMPL_INTENT',
3345 p_token1 => 'P_TEMPLATE_NAME',
3346 p_token1_value => l_tmpl_type_rec.template_name,
3347 p_token2 => 'P_TEMPLATE_INTENT',
3348 p_token2_value => l_tmpl_type_rec.intent,
3349 p_token3 => 'P_DOC_INTENT',
3350 p_token3_value => l_doc_intent);
3351
3352 x_return_status := G_RET_STS_ERROR;
3353 RAISE FND_API.G_EXC_ERROR ;
3354 END IF;
3355
3356 IF l_tmpl_type_rec.status_code <> 'APPROVED' THEN
3357 --Invalid Template Status
3358 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3359 p_msg_name => 'OKC_TERMS_INV_TMPL_STS',
3360 p_token1 => 'P_TEMPLATE_NAME',
3361 p_token1_value => l_tmpl_type_rec.template_name);
3362 x_return_status := G_RET_STS_ERROR;
3363 RAISE FND_API.G_EXC_ERROR ;
3364 END IF;
3365
3366 IF SYSDATE NOT BETWEEN l_tmpl_type_rec.start_date AND nvl(l_tmpl_type_rec.end_date,SYSDATE) THEN
3367 --Template is not Active
3368 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3369 p_msg_name => 'OKC_TERMS_INACTIVE_TMPL',
3370 p_token1 => 'P_TEMPLATE_NAME',
3371 p_token1_value => l_tmpl_type_rec.template_name);
3372 x_return_status := G_RET_STS_ERROR;
3373 RAISE FND_API.G_EXC_ERROR ;
3374 END IF;
3375
3376 OPEN l_alwd_usgs_csr(l_tmpl_type_rec.template_id);
3377 FETCH l_alwd_usgs_csr INTO l_dummy ;
3378 IF l_alwd_usgs_csr%NOTFOUND THEN
3379 --Template is not assigned to Document
3380 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3381 p_msg_name => 'OKC_TERMS_TMPL_USG_ASSOC',
3382 p_token1 => 'P_CONTRACT_TEMPLATE',
3383 p_token1_value => l_tmpl_type_rec.template_id,
3384 p_token2 => 'P_DOCUMENT_TYPE',
3385 p_token2_value => p_document_type);
3386 x_return_status := G_RET_STS_ERROR;
3387 RAISE FND_API.G_EXC_ERROR ;
3388 END IF;
3389 CLOSE l_alwd_usgs_csr;
3390
3391 END IF; -- IF p_contract_source ='STRUCTURED' THEN
3392
3393 OPEN l_tmpl_doc_exist_csr;
3394 FETCH l_tmpl_doc_exist_csr INTO l_dummy ;
3395 IF l_tmpl_doc_exist_csr%FOUND AND p_primary_template = 'Y' THEN
3396 --Document already has a primary Template
3397 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3398 p_msg_name => 'OKC_TERMS_EXIST');
3399 x_return_status := G_RET_STS_ERROR;
3400 RAISE FND_API.G_EXC_ERROR ;
3401 END IF;
3402 CLOSE l_tmpl_doc_exist_csr;
3403
3404 OPEN l_mlp_tmpl_doc_exist_csr;
3405 FETCH l_mlp_tmpl_doc_exist_csr INTO l_dummy_n;
3406 IF l_mlp_tmpl_doc_exist_csr%FOUND AND l_dummy = l_tmpl_type_rec.template_id THEN
3407 --Document already has this Template applied
3408 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
3409 p_msg_name => 'OKC_TERMS_EXIST');
3410 x_return_status := G_RET_STS_ERROR;
3411 RAISE FND_API.G_EXC_ERROR ;
3412 END IF;
3413 CLOSE l_mlp_tmpl_doc_exist_csr;
3414
3415
3416 --Fetch legal contact id from legal contact name
3417 IF p_legal_contact_name IS NOT NULL THEN
3418 OPEN c_get_user_id_csr(p_legal_contact_name);
3419 FETCH c_get_user_id_csr INTO l_legal_contact_id;
3420 CLOSE c_get_user_id_csr;
3421 END IF;
3422
3423 --Fetch contract_admin_id from p_contract_admin_name
3424 IF p_contract_admin_name IS NOT NULL THEN
3425 OPEN c_get_user_id_csr(p_contract_admin_name);
3426 FETCH c_get_user_id_csr INTO l_contract_admin_id;
3427 CLOSE c_get_user_id_csr;
3428 END IF;
3429
3430 --Fetch locked_by_user_id from p_locked_by_user_name
3431 IF p_locked_by_user_name IS NOT NULL THEN
3432 OPEN c_get_user_id_csr(p_locked_by_user_name);
3433 FETCH c_get_user_id_csr INTO l_locked_by_user_id;
3434 CLOSE c_get_user_id_csr;
3435 END IF;
3436
3437 IF p_primary_template = 'Y' THEN
3438
3439 OKC_TEMPLATE_USAGES_GRP.create_template_usages(
3440 p_api_version => 1,
3441 p_init_msg_list => p_init_msg_list,
3442 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3443 p_commit => p_commit,
3444 x_return_status => x_return_status,
3445 x_msg_data => x_msg_data,
3446 x_msg_count => x_msg_count,
3447 p_document_type => p_document_type,
3448 p_document_id => p_document_id,
3449 p_template_id => l_tmpl_type_rec.template_id,
3450 p_doc_numbering_scheme => l_tmpl_type_rec.tmpl_numbering_scheme,
3451 p_document_number => g_document_number,
3452 p_article_effective_date => SYSDATE,
3453 p_config_header_id => Null,
3454 p_config_revision_number => Null,
3455 p_valid_config_yn => Null,
3456 p_approval_abstract_text => p_approval_abstract_text,
3457 p_contract_source_code => p_contract_source,
3458 p_authoring_party_code => p_authoring_party_code,
3459 p_autogen_deviations_flag => p_autogen_deviations_flag,
3460 p_source_change_allowed_flag => 'Y',
3461 x_document_type => l_document_type,
3462 x_document_id => l_document_id,
3463 p_lock_terms_flag => p_lock_terms_flag,
3464 p_enable_reporting_flag => p_enable_reporting_flag,
3465 p_contract_admin_id => l_contract_admin_id,
3466 p_legal_contact_id => l_legal_contact_id,
3467 p_locked_by_user_id => l_locked_by_user_id
3468 );
3469
3470 ELSE
3471
3472 okc_clm_pkg.insert_usages_row(p_document_type => p_document_type,
3473 p_document_id => p_document_id,
3474 p_template_id => l_tmpl_type_rec.template_id,
3475 p_doc_numbering_scheme => l_tmpl_type_rec.tmpl_numbering_scheme,
3476 p_document_number => g_document_number,
3477 p_article_effective_date => SYSDATE,
3478 p_config_header_id => Null,
3479 p_config_revision_number => Null,
3480 p_valid_config_yn => Null,
3481 x_return_status => x_return_status,
3482 x_msg_count => x_msg_count,
3483 x_msg_data => x_msg_data);
3484
3485
3486 END IF;
3487
3488 EXCEPTION
3489
3490 WHEN FND_API.G_EXC_ERROR THEN
3491
3492 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3493 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving create_template_usages: OKC_API.G_EXCEPTION_ERROR Exception');
3494 END IF;
3495 IF l_tmpl_id_validate_csr%ISOPEN THEN
3496 CLOSE l_tmpl_id_validate_csr;
3497 END IF;
3498 IF l_tmpl_name_validate_csr%ISOPEN THEN
3499 CLOSE l_tmpl_name_validate_csr;
3500 END IF;
3501 IF l_alwd_usgs_csr%ISOPEN THEN
3502 CLOSE l_alwd_usgs_csr;
3503 END IF;
3504 IF l_tmpl_doc_exist_csr%ISOPEN THEN
3505 CLOSE l_tmpl_doc_exist_csr;
3506 END IF;
3507
3508 ROLLBACK TO g_create_contract_terms_grp;
3509 x_return_status := G_RET_STS_ERROR ;
3510 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3511
3512 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3513 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3514 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving create_template_usages: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
3515 END IF;
3516
3517 ROLLBACK TO g_create_contract_terms_grp;
3518 x_return_status := G_RET_STS_UNEXP_ERROR ;
3519 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3520
3521 WHEN OTHERS THEN
3522 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3523 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving create_template_usages because of EXCEPTION: '||sqlerrm);
3524 END IF;
3525
3526 ROLLBACK TO g_create_contract_terms_grp;
3527 x_return_status := G_RET_STS_UNEXP_ERROR ;
3528 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
3529 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
3530 END IF;
3531 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
3532
3533 END Create_template_usages;
3534
3535
3536 PROCEDURE get_event_details (
3537 p_event_id IN NUMBER,
3538 x_before_after OUT NOCOPY VARCHAR2
3539 )
3540 IS
3541 BEGIN
3542 SELECT before_after
3543 INTO x_before_after
3544 FROM okc_bus_doc_events_b
3545 WHERE bus_doc_event_id = p_event_id;
3546 EXCEPTION
3547 WHEN OTHERS
3548 THEN
3549 NULL;
3550 END get_event_details;
3551
3552 FUNCTION getprintduedatemsgname (
3553 p_recurring_flag IN VARCHAR2,
3554 p_start_fixed_flag IN VARCHAR2,
3555 p_end_fixed_flag IN VARCHAR2,
3556 p_repeating_frequency_uom IN VARCHAR2,
3557 p_relative_st_date_uom IN VARCHAR2,
3558 p_relative_end_date_uom IN VARCHAR2,
3559 p_start_evt_before_after IN VARCHAR2,
3560 p_end_evt_before_after IN VARCHAR2
3561 )
3562 RETURN VARCHAR2
3563 IS
3564 CURSOR cur_print_due_dt_msg_name
3565 IS
3566 SELECT message_name
3567 FROM okc_del_messages
3568 WHERE 1 = 1
3569 AND recurring_flag = p_recurring_flag
3570 AND start_fixed_flag = p_start_fixed_flag
3571 AND end_fixed_flag = p_end_fixed_flag
3572 AND Nvl(repeating_frequency_uom,'a') = Nvl(p_repeating_frequency_uom, 'a')
3573 AND Nvl(relative_st_date_uom,'a') = Nvl(p_relative_st_date_uom ,'a')
3574 AND Nvl(relative_end_date_uom,'a') = Nvl(p_relative_end_date_uom,'a')
3575 AND Nvl(start_evt_before_after,'a') = Nvl(p_start_evt_before_after,'a')
3576 AND Nvl(end_evt_before_after,'a') = Nvl(p_end_evt_before_after,'a');
3577
3578 l_msg_name VARCHAR2 (60);
3579 BEGIN
3580 OPEN cur_print_due_dt_msg_name;
3581
3582 FETCH cur_print_due_dt_msg_name
3583 INTO l_msg_name;
3584
3585 CLOSE cur_print_due_dt_msg_name;
3586
3587 RETURN l_msg_name;
3588 EXCEPTION
3589 WHEN OTHERS
3590 THEN
3591 RETURN NULL;
3592 END getprintduedatemsgname;
3593
3594 -- Deliverable Helper procedures/functions
3595 FUNCTION getuomvalue (p_duration IN NUMBER, p_uom IN VARCHAR2)
3596 RETURN VARCHAR2
3597 IS
3598 BEGIN
3599 IF p_duration IS NOT NULL AND p_duration > 1 AND 'MTH' = p_uom
3600 THEN
3601 RETURN 'MTHS';
3602 ELSE
3603 IF p_duration IS NOT NULL AND p_duration <= 1 AND 'MTH' = p_uom
3604 THEN
3605 RETURN 'MTH';
3606 END IF;
3607 END IF;
3608
3609 IF p_duration IS NOT NULL AND p_duration > 1 AND 'WK' = p_uom
3610 THEN
3611 RETURN 'WKS';
3612 ELSE
3613 IF p_duration IS NOT NULL AND p_duration <= 1 AND 'WK' = p_uom
3614 THEN
3615 RETURN 'WK';
3616 END IF;
3617 END IF;
3618
3619 IF p_duration IS NOT NULL AND p_duration > 1 AND 'DAY' = p_uom
3620 THEN
3621 RETURN 'DAYS';
3622 ELSE
3623 IF p_duration IS NOT NULL AND p_duration <= 1 AND 'DAY' = p_uom
3624 THEN
3625 RETURN 'DAY';
3626 END IF;
3627 END IF;
3628
3629 RETURN p_uom;
3630 EXCEPTION
3631 WHEN OTHERS
3632 THEN
3633 RAISE;
3634 END getuomvalue;
3635
3636 FUNCTION getdeldisplaysequence (p_deliverable_id IN NUMBER)
3637 RETURN NUMBER
3638 IS
3639 l_disp_sequence NUMBER;
3640 BEGIN
3641 l_disp_sequence := REMAINDER (p_deliverable_id, 1000);
3642
3643 IF l_disp_sequence < 0
3644 THEN
3645 RETURN l_disp_sequence + 1000;
3646 ELSE
3647 RETURN l_disp_sequence;
3648 END IF;
3649 END getdeldisplaysequence;
3650
3651 FUNCTION isvalidcontact (p_contact_id IN NUMBER)
3652 RETURN VARCHAR2
3653 IS
3654 CURSOR cur_val_contact
3655 IS
3656 SELECT 'Y'
3657 FROM per_all_people_f e
3658 WHERE e.current_employee_flag = 'Y'
3659 AND TRUNC (SYSDATE) BETWEEN NVL (e.effective_start_date,
3660 SYSDATE - 1
3661 )
3662 AND NVL (e.effective_end_date,
3663 SYSDATE + 1)
3664 AND person_id = p_contact_id;
3665
3666 -- CWK contract worket
3667 CURSOR cur_val_contact2
3668 IS
3669 SELECT 'Y'
3670 FROM per_all_people_f e
3671 WHERE e.current_npw_flag = 'Y'
3672 AND TRUNC (SYSDATE) BETWEEN NVL (e.effective_start_date,
3673 SYSDATE - 1
3674 )
3675 AND NVL (e.effective_end_date,
3676 SYSDATE + 1)
3677 AND person_id = p_contact_id;
3678
3679 l_valid_contact VARCHAR2 (1) := 'N';
3680 BEGIN
3681
3682 OPEN cur_val_contact;
3683 FETCH cur_val_contact
3684 INTO l_valid_contact;
3685 IF cur_val_contact%FOUND THEN
3686 CLOSE cur_val_contact;
3687 RETURN 'Y';
3688 END IF;
3689 CLOSE cur_val_contact;
3690
3691
3692 IF NVL (fnd_profile.VALUE ('HR_TREAT_CWK_AS_EMP'), 'N') = 'Y'
3693 THEN
3694
3695
3696
3697 OPEN cur_val_contact;
3698 FETCH cur_val_contact
3699 INTO l_valid_contact;
3700
3701 IF cur_val_contact%FOUND THEN
3702 CLOSE cur_val_contact;
3703 RETURN 'Y';
3704 END IF;
3705
3706 CLOSE cur_val_contact;
3707
3708 END IF;
3709
3710
3711 RETURN 'N';
3712 EXCEPTION
3713 WHEN OTHERS
3714 THEN
3715 RETURN 'N';
3716 END isvalidcontact;
3717
3718
3719 FUNCTION isvalidstendeventsmatch (
3720 p_st_event_id IN NUMBER,
3721 p_end_event_id IN NUMBER
3722 )
3723 RETURN VARCHAR2
3724 IS
3725 CURSOR cur_val_event
3726 IS
3727 SELECT 'Y'
3728 FROM okc_bus_doc_events_b start_event,
3729 okc_bus_doc_events_b end_event
3730 WHERE start_event.bus_doc_event_id = p_st_event_id --start event id
3731 AND end_event.bus_doc_event_id = p_end_event_id --end event id
3732 AND start_event.bus_doc_type = end_event.bus_doc_type
3733 UNION
3734 SELECT 'Y'
3735 FROM okc_bus_doc_events_b start_event,
3736 okc_bus_doc_events_b end_event,
3737 okc_bus_doc_types_b end_type
3738 WHERE start_event.bus_doc_event_id = p_st_event_id --start event id
3739 AND end_event.bus_doc_event_id = p_end_event_id --end event id
3740 AND end_type.document_type = end_event.bus_doc_type
3741 AND start_event.bus_doc_type = end_type.target_response_doc_type
3742 UNION
3743 SELECT 'Y'
3744 FROM okc_bus_doc_events_b start_event,
3745 okc_bus_doc_events_b end_event,
3746 okc_bus_doc_types_b start_type
3747 WHERE start_event.bus_doc_event_id = p_st_event_id --start event id
3748 AND end_event.bus_doc_event_id = p_end_event_id --end event id
3749 AND start_type.document_type = start_event.bus_doc_type
3750 AND end_event.bus_doc_type = start_type.target_response_doc_type;
3751
3752 l_val_flag VARCHAR2 (1);
3753 BEGIN
3754 OPEN cur_val_event;
3755
3756 FETCH cur_val_event
3757 INTO l_val_flag;
3758
3759 CLOSE cur_val_event;
3760
3761 RETURN NVL (l_val_flag, 'N');
3762 EXCEPTION
3763 WHEN OTHERS
3764 THEN
3765 RETURN 'N';
3766 END isvalidstendeventsmatch;
3767
3768 FUNCTION isvalidlookup (p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
3769 RETURN VARCHAR2
3770 IS
3771 l_flag VARCHAR2 (1);
3772
3773 CURSOR cur_val_lookup (p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
3774 IS
3775 SELECT 'Y'
3776 FROM fnd_lookups
3777 WHERE lookup_type = p_lookup_type
3778 AND lookup_code = p_lookup_code
3779 AND enabled_flag = 'Y'
3780 AND TRUNC (SYSDATE) BETWEEN NVL (start_date_active, SYSDATE - 1)
3781 AND NVL (TRUNC (end_date_active),
3782 TRUNC (SYSDATE)
3783 );
3784
3785 CURSOR cur_lookup_meaning (
3786 p_lookup_type IN VARCHAR2,
3787 p_lookup_code IN VARCHAR2
3788 )
3789 IS
3790 SELECT 'Y', meaning
3791 FROM fnd_lookups
3792 WHERE lookup_type = p_lookup_type
3793 AND lookup_code = p_lookup_code
3794 AND enabled_flag = 'Y'
3795 AND TRUNC (SYSDATE) BETWEEN NVL (start_date_active, SYSDATE - 1)
3796 AND NVL (TRUNC (end_date_active),
3797 TRUNC (SYSDATE)
3798 );
3799 BEGIN
3800 OPEN cur_val_lookup (p_lookup_type, p_lookup_code);
3801
3802 FETCH cur_val_lookup
3803 INTO l_flag;
3804
3805 CLOSE cur_val_lookup;
3806
3807 RETURN NVL (l_flag, 'N');
3808 EXCEPTION
3809 WHEN OTHERS
3810 THEN
3811 RETURN 'N';
3812 END isvalidlookup;
3813
3814 FUNCTION isvalidlookup (
3815 p_lookup_type IN VARCHAR2,
3816 p_lookup_code IN VARCHAR2,
3817 x_meaning OUT NOCOPY VARCHAR2
3818 )
3819 RETURN VARCHAR2
3820 is
3821
3822 CURSOR cur_val_lookup (p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
3823 IS
3824 SELECT 'Y'
3825 FROM fnd_lookups
3826 WHERE lookup_type = p_lookup_type
3827 AND lookup_code = p_lookup_code
3828 AND enabled_flag = 'Y'
3829 AND TRUNC (SYSDATE) BETWEEN NVL (start_date_active, SYSDATE - 1)
3830 AND NVL (TRUNC (end_date_active),
3831 TRUNC (SYSDATE)
3832 );
3833
3834 CURSOR cur_lookup_meaning (
3835 p_lookup_type IN VARCHAR2,
3836 p_lookup_code IN VARCHAR2
3837 )
3838 IS
3839 SELECT 'Y', meaning
3840 FROM fnd_lookups
3841 WHERE lookup_type = p_lookup_type
3842 AND lookup_code = p_lookup_code
3843 AND enabled_flag = 'Y'
3844 AND TRUNC (SYSDATE) BETWEEN NVL (start_date_active, SYSDATE - 1)
3845 AND NVL (TRUNC (end_date_active),
3846 TRUNC (SYSDATE)
3847 );
3848
3849 l_flag VARCHAR2 (1);
3850 --l_lookup_meaning VARCHAR2(80);
3851 BEGIN
3852 OPEN cur_lookup_meaning (p_lookup_type, p_lookup_code);
3853
3854 FETCH cur_lookup_meaning
3855 INTO l_flag, x_meaning;
3856
3857 CLOSE cur_lookup_meaning;
3858
3859 RETURN NVL (l_flag, 'N');
3860 EXCEPTION
3861 WHEN OTHERS
3862 THEN
3863 RETURN 'N';
3864 END isvalidlookup;
3865
3866 FUNCTION isvalidstartbusdocevent (
3867 p_document_type IN VARCHAR2,
3868 p_deliverable_type IN VARCHAR2,
3869 p_bus_doc_event_id IN NUMBER
3870 )
3871 RETURN VARCHAR2
3872 IS
3873 CURSOR cur_val_event
3874 IS
3875 SELECT 'Y'
3876 FROM okc_bus_doc_events_v evts,
3877 okc_bus_doc_types_b doctypes,
3878 okc_del_bus_doc_combxns delcomb,
3879 okc_deliverable_types_b deltypes
3880 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
3881 AND deltypes.deliverable_type_code = p_deliverable_type
3882 AND doctypes.document_type_class = delcomb.document_type_class
3883 AND deltypes.deliverable_type_code = delcomb.deliverable_type_code
3884 AND docTypes.document_type = p_document_type
3885 AND doctypes.document_type = evts.bus_doc_type
3886 AND ( evts.start_end_qualifier = 'BOTH'
3887 OR evts.start_end_qualifier = 'START'
3888 )
3889 UNION
3890 SELECT 'Y'
3891 FROM okc_bus_doc_events_v evts,
3892 okc_bus_doc_types_b doctypes,
3893 okc_del_bus_doc_combxns delcomb,
3894 okc_deliverable_types_b deltypes
3895 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
3896 AND deltypes.deliverable_type_code = p_deliverable_type
3897 AND doctypes.document_type_class = delcomb.document_type_class
3898 AND deltypes.deliverable_type_code = delcomb.deliverable_type_code
3899 AND docTypes.document_type = G_DOC_TYPE_REC.TARGET_RESPONSE_DOC_TYPE
3900 AND doctypes.document_type = evts.bus_doc_type
3901 AND ( evts.start_end_qualifier = 'BOTH'
3902 OR evts.start_end_qualifier = 'START'
3903 )
3904 UNION
3905 SELECT 'Y'
3906 FROM okc_bus_doc_events_v evts,
3907 okc_bus_doc_types_b doctypes,
3908 okc_del_bus_doc_combxns delcomb,
3909 okc_deliverable_types_b deltypes
3910 WHERE 1=1
3911 AND evts.bus_doc_event_id = p_bus_doc_event_id
3912 AND deltypes.deliverable_type_code = p_deliverable_type
3913 AND doctypes.document_type_class = delcomb.document_type_class
3914 AND deltypes.deliverable_type_code = delcomb.deliverable_type_code
3915 AND doctypes.document_type = G_TARGET_DOC_TYPE
3916 AND doctypes.document_type = evts.bus_doc_type
3917 AND ( evts.start_end_qualifier = 'BOTH'
3918 OR evts.start_end_qualifier = 'START')
3919
3920 ;
3921
3922 l_valid_flag VARCHAR2 (1);
3923 BEGIN
3924 OPEN cur_val_event;
3925
3926 FETCH cur_val_event
3927 INTO l_valid_flag;
3928
3929 CLOSE cur_val_event;
3930
3931 RETURN NVL (l_valid_flag, 'N');
3932 EXCEPTION
3933 WHEN OTHERS
3934 THEN
3935 RETURN 'N';
3936 END isvalidstartbusdocevent;
3937
3938 FUNCTION isvalidendbusdocevent (
3939 p_document_type IN VARCHAR2,
3940 p_deliverable_type IN VARCHAR2,
3941 p_bus_doc_event_id IN NUMBER
3942 )
3943 RETURN VARCHAR2
3944 IS
3945
3946 -- Validation should be similar to DeliverableEndEventListExpVO.xml
3947 -- Mimicking the UI Validation
3948
3949 CURSOR cur_val_event
3950 IS
3951 select 'Y'
3952 from okc_bus_doc_events_v evts, okc_bus_doc_types_b docTypes,
3953 okc_del_bus_doc_combxns delComb,
3954 okc_deliverable_types_b delTypes
3955 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
3956 AND delTypes.deliverable_type_code = p_deliverable_type
3957 AND docTypes.document_type_class = delComb.document_type_class
3958 AND delTypes.deliverable_type_code = delComb.deliverable_type_code
3959 AND docTypes.document_type = p_document_type
3960 AND docTypes.document_type = evts.bus_doc_type
3961 AND (evts.start_end_qualifier = 'BOTH' or evts.start_end_qualifier = 'END')
3962
3963 UNION
3964
3965 select 'Y'
3966 from okc_bus_doc_events_v evts, okc_bus_doc_types_b docTypes,
3967 okc_del_bus_doc_combxns delComb,
3968 okc_deliverable_types_b delTypes
3969 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
3970 AND delTypes.deliverable_type_code = p_deliverable_type --- :selectedDeliverableType
3971 AND docTypes.document_type_class = delComb.document_type_class
3972 AND delTypes.deliverable_type_code = delComb.deliverable_type_code
3973 AND docTypes.document_type = G_TARGET_DOC_TYPE --- :targetDocumentType
3974 AND docTypes.document_type = evts.bus_doc_type
3975 AND (evts.start_end_qualifier = 'BOTH' or evts.start_end_qualifier = 'END')
3976
3977 UNION
3978
3979 select 'Y'
3980 from okc_bus_doc_events_v evts, okc_bus_doc_types_b docTypes,
3981 okc_del_bus_doc_combxns delComb,
3982 okc_deliverable_types_b delTypes
3983 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
3984 AND delTypes.deliverable_type_code = p_deliverable_type --- :selectedDeliverableType
3985 AND docTypes.document_type_class = delComb.document_type_class
3986 AND delTypes.deliverable_type_code = delComb.deliverable_type_code
3987 AND docTypes.document_type = G_DOC_TYPE_REC.TARGET_RESPONSE_DOC_TYPE --- :targetResponseDocumentType
3988 AND docTypes.document_type = evts.bus_doc_type
3989 AND (evts.start_end_qualifier = 'BOTH' or evts.start_end_qualifier = 'END')
3990
3991 UNION
3992
3993 select 'Y'
3994 from okc_bus_doc_events_v evts,
3995 okc_bus_doc_types_b doc_types,
3996 okc_del_bus_doc_combxns delComb,
3997 okc_deliverable_types_b del_types
3998
3999 WHERE
4000 evts.bus_doc_event_id = p_bus_doc_event_id --:start event id
4001 and start_end_qualifier = 'START'
4002 and doc_types.document_type = evts.bus_doc_type
4003 and del_types.deliverable_type_code = p_deliverable_type --:deliverable type
4004 AND doc_types.document_type_class = delComb.document_type_class
4005 AND del_types.deliverable_type_code = delComb.deliverable_type_code
4006
4007 UNION
4008
4009 select 'Y'
4010 FROM okc_bus_doc_events_v evts, okc_bus_doc_types_b docTypes,
4011 okc_del_bus_doc_combxns delComb,
4012 okc_deliverable_types_b delTypes
4013 WHERE evts.bus_doc_event_id = p_bus_doc_event_id
4014 AND delTypes.deliverable_type_code = p_deliverable_type --- :selectedDeliverableType
4015 AND docTypes.document_type_class = delComb.document_type_class
4016 AND delTypes.deliverable_type_code = delComb.deliverable_type_code
4017 AND docTypes.TARGET_RESPONSE_doc_type = p_document_type --- :currentDocumentType
4018 AND docTypes.document_type = evts.bus_doc_type
4019 AND (evts.start_end_qualifier = 'BOTH' or evts.start_end_qualifier = 'END')
4020
4021 ;
4022
4023 l_valid_flag VARCHAR2 (1);
4024 BEGIN
4025 OPEN cur_val_event;
4026
4027 FETCH cur_val_event
4028 INTO l_valid_flag;
4029
4030 CLOSE cur_val_event;
4031
4032 RETURN NVL (l_valid_flag, 'N');
4033 EXCEPTION
4034 WHEN OTHERS
4035 THEN
4036 RETURN 'N';
4037 END isvalidendbusdocevent;
4038
4039 PROCEDURE validate_deliverables(p_deliverable_rec IN OUT NOCOPY deliverable_rec_type
4040 )
4041 IS
4042
4043 l_fixedstartdateyn VARCHAR2 (30);
4044 l_starteventcode VARCHAR2 (240);
4045 l_startba VARCHAR2 (240);
4046 l_endeventcode VARCHAR2 (240);
4047 l_endba VARCHAR2 (240);
4048 l_continue VARCHAR2 (1);
4049 l_startduration NUMBER;
4050 l_endduration NUMBER;
4051 l_uom VARCHAR2 (120);
4052 l_column_name VARCHAR2 (240);
4053
4054 l_intent VARCHAR2(1);
4055 l_bus_doc_class VARCHAR2(240);
4056
4057 CURSOR cur_val_bus_doc (p_doc_type VARCHAR2)
4058 IS
4059 SELECT DOCUMENT_TYPE_CLASS, intent
4060 FROM OKC_BUS_DOC_TYPES_B
4061 WHERE document_type = p_doc_type;
4062
4063 CURSOR cur_val_del_type (p_del_type VARCHAR2)
4064 IS
4065 SELECT 'Y' FROM okc_deliverable_types_b
4066 WHERE deliverable_type_code = p_del_type;
4067
4068 CURSOR cur_val_resp_party (p_intent VARCHAR2,p_bus_doc_class VARCHAR2)
4069 IS
4070 SELECT 'Y'
4071 FROM okc_resp_parties_b
4072 WHERE intent = p_intent
4073 AND document_type_class = p_bus_doc_class;
4074
4075 CURSOR cur_val_internal_party (p_party_id NUMBER)
4076 IS
4077 SELECT 'Y' FROM
4078 hr_all_organization_units
4079 WHERE organization_id = p_party_id;
4080
4081 CURSOR cur_val_ext_party_contact_id (p_party_contact_id number)
4082 IS
4083 SELECT 'Y' FROM hz_parties WHERE party_id = p_party_contact_id;
4084
4085 l_val_flag VARCHAR2(1);
4086
4087 l_party_name VARCHAR2(240);
4088
4089 --Acq Plan Message Cleanup
4090 l_resolved_msg_name VARCHAR2(30);
4091 l_resolved_token VARCHAR2(100);
4092
4093 BEGIN
4094
4095 -- Validate business document type.
4096 OPEN cur_val_bus_doc (p_deliverable_rec.BUSINESS_DOCUMENT_TYPE);
4097 FETCH cur_val_bus_doc INTO l_bus_doc_class,l_intent;
4098 IF cur_val_bus_doc%NOTFOUND THEN
4099 CLOSE cur_val_bus_doc;
4100 okc_api.set_message (p_app_name => g_app_name,
4101 p_msg_name => 'OKC_I_INVALID_VALUE',
4102 p_token1 => 'FIELD',
4103 p_token1_value => 'BUSINESS_DOCUMENT_TYPE'
4104 );
4105 RAISE fnd_api.g_exc_error;
4106 END IF;
4107 CLOSE cur_val_bus_doc;
4108
4109 -- Validate Deliverable Type
4110 -- As of now validating the deliverable type
4111 -- Not validating the deliverable type and document type combination.
4112 -- In future we should add this check also.
4113 OPEN cur_val_del_type (p_deliverable_rec.DELIVERABLE_TYPE);
4114 FETCH cur_val_del_type INTO l_val_flag;
4115 IF cur_val_del_type%NOTFOUND THEN
4116 CLOSE cur_val_del_type;
4117 okc_api.set_message (p_app_name => g_app_name,
4118 p_msg_name => 'OKC_I_INVALID_VALUE',
4119 p_token1 => 'FIELD',
4120 p_token1_value => 'DELIVERABLE_TYPE'
4121 );
4122 RAISE fnd_api.g_exc_error;
4123 END IF;
4124 CLOSE cur_val_del_type;
4125
4126 -- Validate the responsible_party type
4127 OPEN cur_val_resp_party(l_intent,l_bus_doc_class);
4128 FETCH cur_val_resp_party INTO l_val_flag;
4129 IF cur_val_resp_party%NOTFOUND THEN
4130 CLOSE cur_val_resp_party;
4131 okc_api.set_message (p_app_name => g_app_name,
4132 p_msg_name => 'OKC_I_INVALID_VALUE',
4133 p_token1 => 'FIELD',
4134 p_token1_value => 'RESPONSIBLE_PARTY'
4135 );
4136 RAISE fnd_api.g_exc_error;
4137 END IF;
4138 CLOSE cur_val_resp_party;
4139
4140
4141 /*IF ( ( p_deliverable_rec.deliverable_type = 'CONTRACTUAL'
4142 AND p_deliverable_rec.responsible_party NOT IN
4143 ('SUPPLIER_ORG', 'BUYER_ORG', 'INTERNAL_ORG')
4144 )
4145 OR ( p_deliverable_rec.deliverable_type IN
4146 ('INTERNAL_PURCHASING', 'SOURCING')
4147 AND p_deliverable_rec.responsible_party <> 'BUYER_ORG'
4148 )
4149 OR (p_deliverable_rec.deliverable_type = 'INTERNAL'
4150 AND p_deliverable_rec.responsible_party <> 'INTERNAL_ORG'
4151 )
4152
4153 )
4154 THEN
4155 okc_api.set_message (p_app_name => g_app_name,
4156 p_msg_name => 'OKC_I_INVALID_VALUE',
4157 p_token1 => 'FIELD',
4158 p_token1_value => 'RESPONSIBLE_PARTY'
4159 );
4160 RAISE fnd_api.g_exc_error;
4161 END IF; */
4162
4163 -- Validate Internal Party ID
4164 IF p_deliverable_rec.internal_party_id IS NULL THEN
4165 okc_api.set_message (p_app_name => g_app_name,
4166 p_msg_name => 'OKC_I_NOT_NULL',
4167 p_token1 => 'FIELD',
4168 p_token1_value => 'INTERNAL_PARTY_ID'
4169 );
4170 RAISE fnd_api.g_exc_error;
4171 END IF;
4172
4173 -- Validate Internal Party ID
4174 OPEN cur_val_internal_party(p_deliverable_rec.internal_party_id);
4175 FETCH cur_val_internal_party INTO l_val_flag;
4176 IF cur_val_internal_party%NOTFOUND THEN
4177 CLOSE cur_val_internal_party;
4178 okc_api.set_message (p_app_name => g_app_name,
4179 p_msg_name => 'OKC_I_INVALID_VALUE',
4180 p_token1 => 'FIELD',
4181 p_token1_value => 'INTERNAL_PARTY_ID'
4182 );
4183 RAISE fnd_api.g_exc_error;
4184 END IF;
4185 CLOSE cur_val_internal_party;
4186
4187
4188 IF p_deliverable_rec.INTERNAL_PARTY_CONTACT_ID IS NULL THEN
4189 okc_api.set_message (p_app_name => g_app_name,
4190 p_msg_name => 'OKC_I_NOT_NULL',
4191 p_token1 => 'FIELD',
4192 p_token1_value => 'INTERNAL_PARTY_CONTACT_ID'
4193 );
4194 RAISE fnd_api.g_exc_error;
4195 END IF;
4196
4197
4198 IF p_deliverable_rec.internal_party_contact_id IS NOT NULL
4199 AND isvalidcontact (p_deliverable_rec.internal_party_contact_id) <>
4200 'Y'
4201 THEN
4202 okc_api.set_message (p_app_name => g_app_name,
4203 p_msg_name => 'OKC_I_INVALID_VALUE',
4204 p_token1 => 'FIELD',
4205 p_token1_value => 'INTERNAL_PARTY_CONTACT_ID'
4206 );
4207 RAISE fnd_api.g_exc_error;
4208 END IF;
4209
4210
4211
4212 IF p_deliverable_rec.external_party_contact_id IS NOT NULL
4213 THEN
4214 OPEN cur_val_ext_party_contact_id(p_deliverable_rec.external_party_contact_id);
4215 FETCH cur_val_ext_party_contact_id INTO l_val_flag;
4216
4217 IF cur_val_ext_party_contact_id%NOTFOUND THEN
4218 CLOSE cur_val_ext_party_contact_id;
4219 okc_api.set_message (p_app_name => g_app_name,
4220 p_msg_name => 'OKC_I_INVALID_VALUE',
4221 p_token1 => 'FIELD',
4222 p_token1_value => 'EXTERNAL_PARTY_CONTACT_ID'
4223 );
4224 RAISE fnd_api.g_exc_error;
4225 END IF;
4226 CLOSE cur_val_ext_party_contact_id;
4227 END IF;
4228
4229
4230 IF p_deliverable_rec.requester_id IS NOT NULL
4231 AND isvalidcontact (p_deliverable_rec.requester_id) <> 'Y'
4232 THEN
4233 okc_api.set_message (p_app_name => g_app_name,
4234 p_msg_name => 'OKC_I_INVALID_VALUE',
4235 p_token1 => 'FIELD',
4236 p_token1_value => 'REQUESTER_ID'
4237 );
4238 RAISE fnd_api.g_exc_error;
4239 END IF;
4240
4241 IF p_deliverable_rec.deliverable_name IS NULL
4242 THEN
4243 okc_api.set_message (p_app_name => g_app_name,
4244 p_msg_name => 'OKC_I_NOT_NULL',
4245 p_token1 => 'FIELD',
4246 p_token1_value => 'DELIVERABLE_NAME'
4247 );
4248 RAISE fnd_api.g_exc_error;
4249 END IF;
4250
4251 -- This is required for 11i to R12 Data migration.
4252 -- Refer bug 4228090
4253 IF p_deliverable_rec.external_party_id IS NOT NULL
4254 AND p_deliverable_rec.external_party_role IS NULL
4255 AND ((G_DOC_TYPE_REC.DOCUMENT_TYPE_CLASS = 'PO')
4256 OR (G_DOC_TYPE_REC.DOCUMENT_TYPE_CLASS = 'SOURCING' and G_DOC_TYPE_REC.target_response_doc_type is NULL) )
4257 THEN
4258 p_deliverable_rec.external_party_role := 'SUPPLIER_ORG';
4259 END IF;
4260
4261 -- Validate the party role id:
4262 IF p_deliverable_rec.external_party_id IS NOT NULL
4263 AND p_deliverable_rec.external_party_role IS NOT NULL
4264 AND okc_deliverable_process_pvt.get_party_name(p_deliverable_rec.external_party_id,p_deliverable_rec.external_party_role) IS NULL
4265 THEN
4266
4267 okc_api.set_message (p_app_name => g_app_name,
4268 p_msg_name => 'OKC_I_INVALID_VALUE',
4269 p_token1 => 'FIELD',
4270 p_token1_value => 'EXTERNAL_PARTY_ID'
4271 );
4272 RAISE fnd_api.g_exc_error;
4273
4274 END IF;
4275
4276 IF p_deliverable_rec.NOTIFY_ESCALATION_YN = 'Y'
4277 THEN
4278 BEGIN
4279 SELECT col_name INTO l_column_name from
4280 (SELECT 'NOTIFY_ESCALATION_VALUE' col_name FROM dual WHERE p_deliverable_rec.NOTIFY_ESCALATION_VALUE IS NULL
4281 UNION
4282 SELECT 'NOTIFY_ESCALATION_UOM' col_name FROM dual WHERE p_deliverable_rec.NOTIFY_ESCALATION_UOM IS NULL
4283 UNION
4284 SELECT 'ESCALATION_ASSIGNEE' col_name FROM dual WHERE p_deliverable_rec.ESCALATION_ASSIGNEE IS NULL);
4285 okc_api.set_message (p_app_name => g_app_name,
4286 p_msg_name => 'OKC_I_NOT_NULL',
4287 p_token1 => 'FIELD',
4288 p_token1_value => l_column_name
4289 );
4290 RAISE fnd_api.g_exc_error;
4291
4292 EXCEPTION
4293 WHEN No_Data_Found THEN
4294 NULL;
4295 END;
4296 END IF;
4297
4298 IF p_deliverable_rec.NOTIFY_PRIOR_DUE_DATE_YN = 'Y'
4299 THEN
4300 BEGIN
4301 SELECT col_name INTO l_column_name from
4302 (SELECT 'NOTIFY_PRIOR_DUE_DATE_UOM' col_name FROM dual WHERE p_deliverable_rec.NOTIFY_PRIOR_DUE_DATE_UOM IS NULL
4303 UNION
4304 SELECT 'NOTIFY_PRIOR_DUE_DATE_VALUE' col_name FROM dual WHERE p_deliverable_rec.NOTIFY_PRIOR_DUE_DATE_VALUE IS NULL
4305 );
4306 okc_api.set_message (p_app_name => g_app_name,
4307 p_msg_name => 'OKC_I_NOT_NULL',
4308 p_token1 => 'FIELD',
4309 p_token1_value => l_column_name
4310 );
4311 RAISE fnd_api.g_exc_error;
4312
4313 EXCEPTION
4314 WHEN No_Data_Found THEN
4315 NULL;
4316 END;
4317 END IF;
4318
4319
4320 IF p_deliverable_rec.escalation_assignee IS NOT NULL
4321 THEN
4322 IF isvalidcontact (p_deliverable_rec.escalation_assignee) <> 'Y'
4323 THEN
4324 okc_api.set_message (p_app_name => g_app_name,
4325 p_msg_name => 'OKC_I_INVALID_VALUE',
4326 p_token1 => 'FIELD',
4327 p_token1_value => 'ESCALATION_ASSIGNEE'
4328 );
4329 RAISE fnd_api.g_exc_error;
4330 END IF;
4331 END IF;
4332
4333
4334 /* Need to add validation for UOM
4335 */
4336 IF p_deliverable_rec.notify_prior_due_date_uom IS NOT NULL
4337 AND p_deliverable_rec.notify_prior_due_date_uom NOT IN
4338 ('MTH', 'DAY', 'WK')
4339 THEN
4340 okc_api.set_message
4341 (p_app_name => g_app_name,
4342 p_msg_name => 'OKC_I_INVALID_VALUE',
4343 p_token1 => 'FIELD',
4344 p_token1_value => 'NOTIFY_PRIOR_DUE_DATE_UOM'
4345 );
4346 END IF;
4347
4348 IF p_deliverable_rec.notify_escalation_uom IS NOT NULL
4349 AND p_deliverable_rec.notify_escalation_uom NOT IN
4350 ('MTH', 'DAY', 'WK')
4351 THEN
4352 okc_api.set_message (p_app_name => g_app_name,
4353 p_msg_name => 'OKC_I_INVALID_VALUE',
4354 p_token1 => 'FIELD',
4355 p_token1_value => 'NOTIFY_ESCALATION_UOM'
4356 );
4357 END IF;
4358
4359 IF p_deliverable_rec.relative_st_date_uom IS NOT NULL
4360 AND p_deliverable_rec.relative_st_date_uom NOT IN
4361 ('MTH', 'DAY', 'WK')
4362 THEN
4363 okc_api.set_message (p_app_name => g_app_name,
4364 p_msg_name => 'OKC_I_INVALID_VALUE',
4365 p_token1 => 'FIELD',
4366 p_token1_value => 'RELATIVE_ST_DATE_UOM'
4367 );
4368 END IF;
4369
4370 IF p_deliverable_rec.relative_end_date_uom IS NOT NULL
4371 AND p_deliverable_rec.relative_end_date_uom NOT IN
4372 ('MTH', 'DAY', 'WK')
4373 THEN
4374 okc_api.set_message (p_app_name => g_app_name,
4375 p_msg_name => 'OKC_I_INVALID_VALUE',
4376 p_token1 => 'FIELD',
4377 p_token1_value => 'RELATIVE_END_DATE_UOM'
4378 );
4379 END IF;
4380
4381 IF p_deliverable_rec.repeating_frequency_uom IS NOT NULL
4382 AND isvalidlookup ('OKC_DEL_REPEAT_FREQ',
4383 p_deliverable_rec.repeating_frequency_uom
4384 ) <> 'Y'
4385 THEN
4386 okc_api.set_message (p_app_name => g_app_name,
4387 p_msg_name => 'OKC_I_INVALID_VALUE',
4388 p_token1 => 'FIELD',
4389 p_token1_value => 'REPEATING_FREQUENCY_UOM'
4390 );
4391 END IF;
4392
4393 IF p_deliverable_rec.pay_hold_prior_due_date_uom IS NOT NULL
4394 AND p_deliverable_rec.pay_hold_prior_due_date_uom NOT IN
4395 ('MTH', 'DAY', 'WK')
4396 THEN
4397 okc_api.set_message
4398 (p_app_name => g_app_name,
4399 p_msg_name => 'OKC_I_INVALID_VALUE',
4400 p_token1 => 'FIELD',
4401 p_token1_value => 'PAY_HOLD_PRIOR_DUE_DATE_UOM'
4402 );
4403 END IF;
4404
4405 -- CASE : 1 One Time deliverable and Fixed Due date, then fixed_due_date _yn will be 'Y'.
4406 IF p_deliverable_rec.fixed_due_date_yn = 'Y' THEN
4407 -- PRINT_DUE_DATE_MSG_NAME is null in this case
4408 p_deliverable_rec.PRINT_DUE_DATE_MSG_NAME := NULL;
4409
4410 -- Fixed start date is required for this kind of deliverable.
4411 IF p_deliverable_rec.fixed_start_date IS NULL THEN
4412 okc_api.set_message
4413 (p_app_name => g_app_name,
4414 p_msg_name => 'OKC_I_NOT_NULL',
4415 p_token1 => 'FIELD',
4416 p_token1_value => 'FIXED_START_DATE'
4417 );
4418 RAISE fnd_api.g_exc_error;
4419 END IF;
4420
4421
4422
4423 BEGIN
4424
4425 SELECT column_name
4426 INTO l_column_name
4427 FROM (SELECT 'RECURRING_YN' column_name
4428 FROM DUAL
4429 WHERE p_deliverable_rec.recurring_yn = 'Y'
4430 UNION
4431 SELECT 'RELATIVE_ST_DATE_DURATION' column_name
4432 FROM DUAL
4433 WHERE p_deliverable_rec.relative_st_date_duration IS NOT NULL
4434 UNION
4435 SELECT 'RELATIVE_ST_DATE_UOM' column_name
4436 FROM DUAL
4437 WHERE p_deliverable_rec.relative_st_date_uom IS NOT NULL
4438 UNION
4439 SELECT 'RELATIVE_ST_DATE_EVENT_ID' column_name
4440 FROM DUAL
4441 WHERE p_deliverable_rec.relative_st_date_event_id IS NOT NULL
4442 UNION
4443 SELECT 'RELATIVE_END_DATE_DURATION' column_name
4444 FROM DUAL
4445 WHERE p_deliverable_rec.relative_end_date_duration IS NOT NULL
4446 UNION
4447 SELECT 'RELATIVE_END_DATE_UOM' column_name
4448 FROM DUAL
4449 WHERE p_deliverable_rec.relative_end_date_uom IS NOT NULL
4450 UNION
4451 SELECT 'RELATIVE_END_DATE_EVENT_ID' column_name
4452 FROM DUAL
4453 WHERE p_deliverable_rec.relative_end_date_event_id IS NOT NULL
4454 UNION
4455 SELECT 'REPEATING_DAY_OF_MONTH' column_name
4456 FROM DUAL
4457 WHERE p_deliverable_rec.repeating_day_of_month IS NOT NULL
4458 UNION
4459 SELECT 'REPEATING_DAY_OF_WEEK' column_name
4460 FROM DUAL
4461 WHERE p_deliverable_rec.repeating_day_of_week IS NOT NULL
4462 UNION
4463 SELECT 'REPEATING_FREQUENCY_UOM' column_name
4464 FROM DUAL
4465 WHERE p_deliverable_rec.repeating_frequency_uom IS NOT NULL
4466 UNION
4467 SELECT 'REPEATING_DURATION' column_name
4468 FROM DUAL
4469 WHERE p_deliverable_rec.repeating_duration IS NOT NULL
4470 UNION
4471 SELECT 'FIXED_END_DATE' column_name
4472 FROM DUAL
4473 WHERE p_deliverable_rec.fixed_end_date IS NOT NULL)
4474 WHERE ROWNUM = 1;
4475
4476 okc_api.set_message
4477 (p_app_name => g_app_name,
4478 p_msg_name => 'OKC_I_INVALID_VALUE',
4479 p_token1 => 'FIELD',
4480 p_token1_value => l_column_name
4481 );
4482
4483 okc_api.set_message
4484 (p_app_name => g_app_name,
4485 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4486 );
4487
4488
4489
4490 RAISE fnd_api.g_exc_error;
4491
4492
4493 EXCEPTION
4494 WHEN No_Data_Found THEN
4495 NULL;
4496 END;
4497 END IF;
4498
4499 -- CASE : 2 : One time deliverable but it is event based (Relative)
4500 -- In this case fixed_due_date_yn and RECURRING_YN both will be 'N'.
4501 IF p_deliverable_rec.fixed_due_date_yn = 'N'
4502 AND p_deliverable_rec.RECURRING_YN = 'N'
4503 THEN
4504 IF p_deliverable_rec.relative_st_date_event_id IS NULL
4505 THEN
4506 okc_api.set_message
4507 (p_app_name => g_app_name,
4508 p_msg_name => 'OKC_I_NOT_NULL',
4509 p_token1 => 'FIELD',
4510 p_token1_value => 'RELATIVE_ST_DATE_EVENT_ID'
4511 );
4512 RAISE fnd_api.g_exc_error;
4513 END IF;
4514
4515 IF p_deliverable_rec.relative_st_date_duration IS NULL
4516 THEN
4517 okc_api.set_message
4518 (p_app_name => g_app_name,
4519 p_msg_name => 'OKC_I_NOT_NULL',
4520 p_token1 => 'FIELD',
4521 p_token1_value => 'RELATIVE_ST_DATE_DURATION'
4522 );
4523 RAISE fnd_api.g_exc_error;
4524 END IF;
4525
4526 IF p_deliverable_rec.relative_st_date_uom IS NULL
4527 THEN
4528 okc_api.set_message (p_app_name => g_app_name,
4529 p_msg_name => 'OKC_I_NOT_NULL',
4530 p_token1 => 'FIELD',
4531 p_token1_value => 'RELATIVE_ST_DATE_UOM'
4532 );
4533 RAISE fnd_api.g_exc_error;
4534 END IF;
4535
4536
4537
4538 IF isvalidstartbusdocevent
4539 (p_document_type => p_deliverable_rec.business_document_type,
4540 p_deliverable_type => p_deliverable_rec.deliverable_type,
4541 p_bus_doc_event_id => p_deliverable_rec.relative_st_date_event_id
4542 ) <> 'Y'
4543 THEN
4544 okc_api.set_message
4545 (p_app_name => g_app_name,
4546 p_msg_name => 'OKC_I_INVALID_VALUE',
4547 p_token1 => 'FIELD',
4548 p_token1_value => 'RELATIVE_ST_DATE_EVENT_ID'
4549 );
4550 RAISE fnd_api.g_exc_error;
4551 END IF;
4552
4553
4554 BEGIN
4555 SELECT column_name
4556 INTO l_column_name
4557 FROM (SELECT 'RELATIVE_END_DATE_DURATION' column_name
4558 FROM DUAL
4559 WHERE p_deliverable_rec.relative_end_date_duration IS NOT NULL
4560 UNION
4561 SELECT 'RELATIVE_END_DATE_UOM' column_name
4562 FROM DUAL
4563 WHERE p_deliverable_rec.relative_end_date_uom IS NOT NULL
4564 UNION
4565 SELECT 'RELATIVE_END_DATE_EVENT_ID' column_name
4566 FROM DUAL
4567 WHERE p_deliverable_rec.relative_end_date_event_id IS NOT NULL
4568 UNION
4569 SELECT 'REPEATING_DAY_OF_MONTH' column_name
4570 FROM DUAL
4571 WHERE p_deliverable_rec.repeating_day_of_month IS NOT NULL
4572 UNION
4573 SELECT 'REPEATING_DAY_OF_WEEK' column_name
4574 FROM DUAL
4575 WHERE p_deliverable_rec.repeating_day_of_week IS NOT NULL
4576 UNION
4577 SELECT 'REPEATING_FREQUENCY_UOM' column_name
4578 FROM DUAL
4579 WHERE p_deliverable_rec.repeating_frequency_uom IS NOT NULL
4580 UNION
4581 SELECT 'REPEATING_DURATION' column_name
4582 FROM DUAL
4583 WHERE p_deliverable_rec.repeating_duration IS NOT NULL
4584 UNION
4585 SELECT 'FIXED_END_DATE' column_name
4586 FROM DUAL
4587 WHERE p_deliverable_rec.fixed_end_date IS NOT NULL
4588 UNION
4589 SELECT 'FIXED_START_DATE' column_name
4590 FROM DUAL
4591 WHERE p_deliverable_rec.fixed_start_date IS NOT NULL)
4592 WHERE ROWNUM = 1;
4593
4594 okc_api.set_message
4595 (p_app_name => g_app_name,
4596 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4597 );
4598
4599 okc_api.set_message
4600 (p_app_name => g_app_name,
4601 p_msg_name => 'OKC_I_INVALID_VALUE',
4602 p_token1 => 'FIELD',
4603 p_token1_value => l_column_name
4604 );
4605
4606 RAISE fnd_api.g_exc_error;
4607 EXCEPTION
4608 WHEN No_Data_Found THEN
4609 NULL;
4610 END;
4611 END IF; -- IF p_deliverable_rec.fixed_due_date_yn = 'N' AND p_deliverable_rec.RECURRING_YN = 'N'
4612
4613
4614 -- CASE 3 : Repeating deliverable and non-event based deliverable.
4615 -- Here the following four sub-cases can exist:
4616 -- 3.a Both Start and end dates are fixed.
4617 -- 3.b Start date is fixed but end date is event based/relative
4618 -- 3.c Start date is event based(Relative) and end date is fixed.
4619 -- 3.d Both Start date and end dates are event based(Relative).
4620
4621 IF p_deliverable_rec.RECURRING_YN = 'Y'
4622 THEN
4623 -- In all 3.a..3.d cases Repeating information can not be null.
4624 BEGIN
4625 select column_name INTO l_column_name from
4626 (
4627 select 'REPEATING_DURATION' column_name from dual where p_deliverable_rec.REPEATING_DURATION is null
4628 union
4629 select 'REPEATING_FREQUENCY_UOM' column_name from dual where p_deliverable_rec.REPEATING_FREQUENCY_UOM is null
4630 union
4631 select 'REPEATING_DAY_OF_WEEK' column_name from dual where p_deliverable_rec.REPEATING_FREQUENCY_UOM = 'WK' and p_deliverable_rec.REPEATING_DAY_OF_WEEK is null
4632 union
4633 select 'REPEATING_DAY_OF_MONTH' column_name from dual where p_deliverable_rec.REPEATING_FREQUENCY_UOM = 'MTH' and p_deliverable_rec.REPEATING_DAY_OF_MONTH is null
4634 )
4635 where rownum =1;
4636
4637 okc_api.set_message
4638 (p_app_name => g_app_name,
4639 p_msg_name => 'OKC_I_NOT_NULL',
4640 p_token1 => 'FIELD',
4641 p_token1_value => l_column_name
4642 );
4643 okc_api.set_message
4644 (p_app_name => g_app_name,
4645 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4646 );
4647
4648
4649 RAISE fnd_api.g_exc_error;
4650 EXCEPTION
4651 WHEN No_Data_Found THEN NULL;
4652 END;
4653
4654
4655 -- If we check for following thnings then we will cover all of 3.a to 3.d cases
4656 -- Either Fixed Start date must exist or Start Event info must exist.
4657 -- Either Fixed end date must exist or End Event info must exist.
4658 IF p_deliverable_rec.fixed_start_date IS NULL
4659 AND p_deliverable_rec.relative_st_date_event_id IS NULL
4660 THEN
4661 okc_api.set_message
4662 (p_app_name => g_app_name,
4663 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4664 );
4665 okc_api.set_message
4666 (p_app_name => g_app_name,
4667 p_msg_name => 'OKC_I_NOT_NULL',
4668 p_token1 => 'FIELD',
4669 p_token1_value => 'FIXED_START_DATE'
4670 );
4671 RAISE fnd_api.g_exc_error;
4672 END IF;
4673
4674 IF p_deliverable_rec.fixed_end_date IS NULL
4675 AND p_deliverable_rec.relative_end_date_event_id IS NULL
4676 THEN
4677 okc_api.set_message
4678 (p_app_name => g_app_name,
4679 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4680 );
4681 okc_api.set_message
4682 (p_app_name => g_app_name,
4683 p_msg_name => 'OKC_I_NOT_NULL',
4684 p_token1 => 'FIELD',
4685 p_token1_value => 'FIXED_END_DATE'
4686 );
4687 RAISE fnd_api.g_exc_error;
4688 END IF;
4689
4690 -- When Fixed Start date is entered, then Relative St event information must not be entered.
4691 IF p_deliverable_rec.fixed_start_date IS NOT NULL THEN
4692 begin
4693 select column_name into l_column_name from
4694 (
4695 select 'RELATIVE_ST_DATE_DURATION' column_name from dual where p_deliverable_rec.RELATIVE_ST_DATE_DURATION IS NOT NULL
4696 union
4697 select 'RELATIVE_ST_DATE_UOM' column_name from dual where p_deliverable_rec.RELATIVE_ST_DATE_UOM is not null
4698 union
4699 select 'RELATIVE_ST_DATE_EVENT_ID' column_name from dual where p_deliverable_rec.RELATIVE_ST_DATE_EVENT_ID is not null
4700 )
4701 where rownum =1;
4702
4703
4704
4705 okc_api.set_message
4706 (p_app_name => g_app_name,
4707 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4708 );
4709
4710 okc_api.set_message
4711 (p_app_name => g_app_name,
4712 p_msg_name => 'OKC_I_INVALID_VALUE',
4713 p_token1 => 'FIELD',
4714 p_token1_value => l_column_name
4715 );
4716
4717 RAISE fnd_api.g_exc_error;
4718 exception
4719 when no_data_found then
4720 null;
4721 end;
4722 END IF;
4723
4724 -- When Relative st event is entered, then verify if the min info required for this is entered.
4725 IF p_deliverable_rec.RELATIVE_ST_DATE_EVENT_ID is not NULL THEN
4726 begin
4727 select column_name into l_column_name from
4728 (
4729 select 'RELATIVE_ST_DATE_DURATION' column_name from dual where p_deliverable_rec.RELATIVE_ST_DATE_DURATION IS NULL
4730 union
4731 select 'RELATIVE_ST_DATE_UOM' column_name from dual where p_deliverable_rec.RELATIVE_ST_DATE_UOM is NULL
4732 )
4733 where rownum =1;
4734
4735
4736
4737 okc_api.set_message
4738 (p_app_name => g_app_name,
4739 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4740 );
4741
4742 okc_api.set_message
4743 (p_app_name => g_app_name,
4744 p_msg_name => 'OKC_I_NOT_NULL',
4745 p_token1 => 'FIELD',
4746 p_token1_value => l_column_name
4747 );
4748
4749 RAISE fnd_api.g_exc_error;
4750 exception
4751 when no_data_found then
4752 null;
4753 end;
4754
4755 END IF;
4756
4757 -- When Fixed end date is entered, then Relative End event information must not be entered.
4758 IF p_deliverable_rec.fixed_end_date IS NOT NULL THEN
4759 begin
4760 select column_name into l_column_name from
4761 (
4762 select 'RELATIVE_END_DATE_DURATION' column_name from dual where p_deliverable_rec.RELATIVE_END_DATE_DURATION IS NOT NULL
4763 union
4764 select 'RELATIVE_END_DATE_UOM' column_name from dual where p_deliverable_rec.RELATIVE_END_DATE_UOM is not null
4765 union
4766 select 'RELATIVE_END_DATE_EVENT_ID' column_name from dual where p_deliverable_rec.RELATIVE_END_DATE_EVENT_ID is not null
4767 )
4768 where rownum =1;
4769
4770
4771
4772 okc_api.set_message
4773 (p_app_name => g_app_name,
4774 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4775 );
4776
4777 okc_api.set_message
4778 (p_app_name => g_app_name,
4779 p_msg_name => 'OKC_I_INVALID_VALUE',
4780 p_token1 => 'FIELD',
4781 p_token1_value => l_column_name
4782 );
4783
4784 RAISE fnd_api.g_exc_error;
4785 exception
4786 when no_data_found then
4787 null;
4788 end;
4789 END IF;
4790
4791 -- When Relative End event is entered, then verify if the min info required for this is entered.
4792 IF p_deliverable_rec.RELATIVE_END_DATE_EVENT_ID is not NULL THEN
4793 begin
4794 select column_name into l_column_name from
4795 (
4796 select 'RELATIVE_END_DATE_DURATION' column_name from dual where p_deliverable_rec.RELATIVE_END_DATE_DURATION IS NULL
4797 union
4798 select 'RELATIVE_END_DATE_UOM' column_name from dual where p_deliverable_rec.RELATIVE_END_DATE_UOM is NULL
4799 )
4800 where rownum =1;
4801
4802
4803
4804 okc_api.set_message
4805 (p_app_name => g_app_name,
4806 p_msg_name => 'OKC_DEL_INCONSISTENT_DUE_DATES'
4807 );
4808
4809 okc_api.set_message
4810 (p_app_name => g_app_name,
4811 p_msg_name => 'OKC_I_NOT_NULL',
4812 p_token1 => 'FIELD',
4813 p_token1_value => l_column_name
4814 );
4815
4816 RAISE fnd_api.g_exc_error;
4817 exception
4818 when no_data_found then
4819 null;
4820 end;
4821
4822 END IF;
4823
4824 IF ( p_deliverable_rec.relative_st_date_duration < 0
4825 OR (InStr
4826 (
4827 To_Char(p_deliverable_rec.relative_st_date_duration)
4828 ,'.'
4829 )
4830 <>0
4831 )
4832 )
4833 THEN
4834 --Acq Plan Message Cleanup
4835 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_NEG_REL_ST_DUR_UI',p_deliverable_rec.business_document_type);
4836 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
4837
4838 okc_api.set_message (p_app_name => g_app_name,
4839 p_msg_name => l_resolved_msg_name,
4840 p_token1 => 'DEL_TOKEN',
4841 p_token1_value => l_resolved_token
4842 );
4843
4844 RAISE fnd_api.g_exc_error;
4845 END IF;
4846
4847
4848 IF p_deliverable_rec.relative_st_date_event_id IS NOT NULL
4849 THEN
4850 IF isvalidstartbusdocevent
4851 (p_document_type => p_deliverable_rec.business_document_type,
4852 p_deliverable_type => p_deliverable_rec.deliverable_type,
4853 p_bus_doc_event_id => p_deliverable_rec.relative_st_date_event_id
4854 ) <> 'Y'
4855 THEN
4856 okc_api.set_message
4857 (p_app_name => g_app_name,
4858 p_msg_name => 'OKC_I_INVALID_VALUE',
4859 p_token1 => 'FIELD',
4860 p_token1_value => 'RELATIVE_ST_DATE_EVENT_ID'
4861 );
4862 RAISE fnd_api.g_exc_error;
4863 END IF;
4864 END IF;
4865
4866 IF p_deliverable_rec.relative_end_date_event_id IS NOT NULL
4867 THEN
4868 IF isvalidendbusdocevent
4869 (p_document_type => p_deliverable_rec.business_document_type,
4870 p_deliverable_type => p_deliverable_rec.deliverable_type,
4871 p_bus_doc_event_id => p_deliverable_rec.relative_end_date_event_id
4872 ) <> 'Y'
4873 THEN
4874 okc_api.set_message
4875 (p_app_name => g_app_name,
4876 p_msg_name => 'OKC_I_INVALID_VALUE',
4877 p_token1 => 'FIELD',
4878 p_token1_value => 'RELATIVE_END_DATE_EVENT_ID'
4879 );
4880 RAISE fnd_api.g_exc_error;
4881 END IF;
4882 END IF;
4883
4884 IF p_deliverable_rec.relative_st_date_event_id IS NOT NULL AND
4885 p_deliverable_rec.relative_end_date_event_id IS NOT NULL
4886 AND isvalidstendeventsmatch
4887 (p_deliverable_rec.relative_st_date_event_id,
4888 p_deliverable_rec.relative_end_date_event_id
4889 ) <> 'Y'
4890 THEN
4891 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_INVLD_EVENT_DOCTYPE_UI',p_deliverable_rec.business_document_type);
4892 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
4893 /* okc_api.set_message
4894 (p_app_name => g_app_name,
4895 p_msg_name => 'OKC_DEL_INVLD_EVENT_DOCTYPE_UI'
4896 );*/
4897 okc_api.set_message (p_app_name => g_app_name,
4898 p_msg_name => l_resolved_msg_name,
4899 p_token1 => 'DEL_TOKEN',
4900 p_token1_value => l_resolved_token
4901 );
4902
4903 RAISE fnd_api.g_exc_error;
4904 END IF;
4905
4906 IF (p_deliverable_rec.fixed_start_date IS NOT NULL AND
4907 p_deliverable_rec.fixed_end_date IS NOT NULL AND
4908 (p_deliverable_rec.fixed_start_date >
4909 p_deliverable_rec.fixed_end_date))
4910 THEN
4911 --Acq Plan Message Cleanup
4912 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_END_BEFORE_START_UI',p_deliverable_rec.business_document_type);
4913
4914 /* okc_api.set_message
4915 (p_app_name => g_app_name,
4916 p_msg_name => 'OKC_I_INVALID_VALUE',
4917 p_token1 => 'FIELD',
4918 p_token1_value => 'OKC_DEL_END_BEFORE_START_UI'
4919 );*/
4920 okc_api.set_message
4921 (p_app_name => g_app_name,
4922 p_msg_name => l_resolved_msg_name
4923 );
4924
4925 RAISE fnd_api.g_exc_error;
4926 END IF;
4927
4928 IF ( p_deliverable_rec.repeating_duration < 0
4929 OR (InStr(To_Char(p_deliverable_rec.repeating_duration),'.')<>0)
4930 )
4931 THEN
4932 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_NEG_REPEAT_WEEK_UI',p_deliverable_rec.business_document_type);
4933 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
4934
4935 okc_api.set_message (p_app_name => g_app_name,
4936 p_msg_name => l_resolved_msg_name,
4937 p_token1 => 'DEL_TOKEN',
4938 p_token1_value => l_resolved_token
4939 );
4940
4941
4942 RAISE fnd_api.g_exc_error;
4943 END IF;
4944 IF p_deliverable_rec.repeating_frequency_uom = 'WK'
4945 THEN
4946
4947
4948
4949 IF isvalidlookup
4950 (p_lookup_type => 'DAY_OF_WEEK',
4951 p_lookup_code => TO_CHAR
4952 (p_deliverable_rec.repeating_day_of_week
4953 )
4954 ) <> 'Y'
4955 THEN
4956 okc_api.set_message
4957 (p_app_name => g_app_name,
4958 p_msg_name => 'OKC_DEL_INVALID_DAY_OF_WEEK'
4959 );
4960 RAISE fnd_api.g_exc_error;
4961 END IF;
4962 END IF;
4963
4964 IF p_deliverable_rec.recurring_yn = 'Y'
4965 AND p_deliverable_rec.repeating_frequency_uom = 'MTH'
4966 THEN
4967 IF isvalidlookup
4968 (p_lookup_type => 'OKC_DAY_OF_MONTH',
4969 p_lookup_code => TO_CHAR
4970 (p_deliverable_rec.repeating_day_of_month
4971 )
4972 ) <> 'Y'
4973 THEN
4974 okc_api.set_message
4975 (p_app_name => g_app_name,
4976 p_msg_name => 'OKC_DEL_INVALID_DAY_OF_MONTH'
4977 );
4978 RAISE fnd_api.g_exc_error;
4979 END IF;
4980 END IF;
4981
4982
4983
4984 -- ALL 3 CASES Basic check is completed.
4985 ----------------------------------
4986 /*
4987 //if deliverable is recurring and the start event and the end event are the same
4988 //we should do the following checks:
4989 //(1) If both the dates are before the event then
4990 //Validation: Start duration > End duration
4991 //(e.g. 10 days should be greater than 1 week)
4992 //
4993 //(2) If Start date is before the event and End date is after the event then
4994 //Validation: No problem
4995 //
4996 //(3) If Start date is after the event and End date is before the event then
4997 //Validation: Error Start date should be before the End date
4998 //
4999 //(4) If both the dates are after the event then
5000 //Validation: Start duration < End duration
5001 */
5002 IF
5003 p_deliverable_rec.relative_st_date_event_id IS NOT NULL
5004 AND p_deliverable_rec.relative_end_date_event_id IS NOT NULL
5005 AND p_deliverable_rec.relative_st_date_duration IS NOT NULL
5006 AND p_deliverable_rec.relative_end_date_duration IS NOT NULL
5007 AND p_deliverable_rec.relative_st_date_uom IS NOT NULL
5008 AND p_deliverable_rec.relative_end_date_uom IS NOT NULL
5009 THEN
5010 BEGIN
5011 SELECT business_event_code, before_after, 'Y'
5012 INTO l_starteventcode, l_startba, l_continue
5013 FROM okc_bus_doc_events_b
5014 WHERE bus_doc_event_id =
5015 p_deliverable_rec.relative_st_date_event_id;
5016 EXCEPTION
5017 WHEN NO_DATA_FOUND
5018 THEN
5019 l_continue := 'N';
5020 END;
5021
5022 IF l_continue = 'Y'
5023 THEN
5024 BEGIN
5025 SELECT business_event_code, before_after, 'Y'
5026 INTO l_endeventcode, l_endba, l_continue
5027 FROM okc_bus_doc_events_b
5028 WHERE bus_doc_event_id =
5029 p_deliverable_rec.relative_end_date_event_id;
5030 EXCEPTION
5031 WHEN NO_DATA_FOUND
5032 THEN
5033 l_continue := 'N';
5034 END;
5035
5036 IF l_continue = 'Y'
5037 THEN
5038 IF l_starteventcode IS NOT NULL
5039 AND l_starteventcode = l_endeventcode
5040 THEN
5041 /*
5042 //if the getDays method cannot find a match, it will return -1
5043 //so if startDuration or endDuration is less than 0, we know that we didn't find a match
5044 //in this case we won't compare, because we can't
5045 */
5046 l_uom := p_deliverable_rec.relative_st_date_uom;
5047 l_startduration :=
5048 TO_NUMBER
5049 (p_deliverable_rec.relative_st_date_duration)
5050 * (CASE l_uom
5051 WHEN 'DAY'
5052 THEN 1
5053 WHEN 'WK'
5054 THEN 7
5055 WHEN 'MTH'
5056 THEN 30
5057 ELSE -1
5058 END
5059 );
5060 l_endduration :=
5061 TO_NUMBER
5062 (p_deliverable_rec.relative_end_date_duration)
5063 * (CASE p_deliverable_rec.relative_end_date_uom
5064 WHEN 'DAY'
5065 THEN 1
5066 WHEN 'WK'
5067 THEN 7
5068 WHEN 'MTH'
5069 THEN 30
5070 ELSE -1
5071 END
5072 );
5073
5074 IF l_startduration >= 0 AND l_endduration >= 0
5075 THEN
5076 -- Scenario 1
5077 IF ( 'B' = l_startba
5078 AND 'B' = 'l_endBA'
5079 AND (l_startduration < l_endduration)
5080 )
5081 THEN
5082 --Acq Plan Message Cleanup
5083 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_END_BEFORE_START_UI',p_deliverable_rec.business_document_type);
5084 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
5085
5086 /* okc_api.set_message
5087 (p_app_name => g_app_name,
5088 p_msg_name => 'OKC_DEL_END_BEFORE_START_UI'
5089 );*/
5090 okc_api.set_message
5091 (p_app_name => g_app_name,
5092 p_msg_name => l_resolved_msg_name,
5093 p_token1 => 'DEL_TOKEN',
5094 p_token1_value => l_resolved_token
5095 );
5096
5097 RAISE fnd_api.g_exc_error;
5098 END IF;
5099
5100 -- Scenario 2 is always valid no need to check
5101
5102 -- Scenario 3
5103 IF ('A' = l_startba AND 'B' = l_endba)
5104 THEN
5105 --Acq Plan Message Cleanup
5106 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_END_BEFORE_START_UI',p_deliverable_rec.business_document_type);
5107 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
5108
5109 /* okc_api.set_message
5110 (p_app_name => g_app_name,
5111 p_msg_name => 'OKC_DEL_END_BEFORE_START_UI'
5112 );*/
5113 okc_api.set_message
5114 (p_app_name => g_app_name,
5115 p_msg_name => l_resolved_msg_name,
5116 p_token1 => 'DEL_TOKEN',
5117 p_token1_value => l_resolved_token
5118 );
5119
5120
5121 RAISE fnd_api.g_exc_error;
5122 END IF;
5123
5124 IF ( 'A' = l_startba
5125 AND 'A' = l_endba
5126 AND l_startduration > l_endduration
5127 )
5128 THEN
5129 --Acq Plan Message Cleanup
5130 l_resolved_msg_name := OKC_API.resolve_message('OKC_DEL_END_BEFORE_START_UI',p_deliverable_rec.business_document_type);
5131 l_resolved_token := OKC_API.resolve_del_token(p_deliverable_rec.business_document_type);
5132
5133 /* okc_api.set_message
5134 (p_app_name => g_app_name,
5135 p_msg_name => 'OKC_DEL_END_BEFORE_START_UI'
5136 );*/
5137 okc_api.set_message
5138 (p_app_name => g_app_name,
5139 p_msg_name => l_resolved_msg_name,
5140 p_token1 => 'DEL_TOKEN',
5141 p_token1_value => l_resolved_token
5142 );
5143
5144
5145 RAISE fnd_api.g_exc_error;
5146 END IF;
5147 END IF;
5148 END IF;
5149 END IF;
5150 END IF;
5151 END IF;
5152 END IF; --IF p_deliverable_rec.RECURRING_YN = 'Y'
5153
5154
5155
5156
5157
5158
5159
5160 END validate_deliverables;
5161
5162
5163
5164 PROCEDURE create_deliverables(p_api_version IN NUMBER,
5165 p_document_type IN VARCHAR2,
5166 p_document_id IN NUMBER,
5167 p_deliverable_rec IN deliverable_rec_type,
5168 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
5169 p_commit IN Varchar2 default FND_API.G_FALSE,
5170 x_return_status OUT NOCOPY Varchar2,
5171 x_msg_data OUT NOCOPY Varchar2,
5172 x_msg_count OUT NOCOPY Number
5173 )
5174 IS
5175 l_api_version CONSTANT NUMBER := 1;
5176 l_api_name CONSTANT VARCHAR2(30) := 'create_deliverables';
5177
5178 l_start_date_fixed VARCHAR2 (1);
5179 l_end_date_fixed VARCHAR2 (1);
5180 l_start_evt_before_after VARCHAR2 (1);
5181 l_end_evt_before_after VARCHAR2 (1);
5182 l_repeating_frequency_uom VARCHAR2 (30);
5183 l_relative_st_date_uom VARCHAR2 (30);
5184 l_relative_end_date_uom VARCHAR2 (30);
5185
5186 CURSOR C_delTypeExists is
5187 SELECT 'X'
5188 FROM
5189 okc_bus_doc_types_b doctyp,
5190 okc_del_bus_doc_combxns deltypcomb
5191 WHERE
5192 doctyp.document_type_class = deltypcomb.document_type_class
5193 AND doctyp.document_type = p_document_type
5194 AND deltypcomb.deliverable_type_code = p_deliverable_rec.deliverable_type;
5195
5196 C_delTypeExists_rec C_delTypeExists%ROWTYPE;
5197
5198 delRecTab deliverable_rec_type;
5199
5200 PROCEDURE default_row (
5201 p_deliverable_rec IN OUT NOCOPY deliverable_rec_type
5202 )
5203 IS
5204 BEGIN
5205 IF p_deliverable_rec.deliverable_id = okc_api.g_miss_num
5206 THEN
5207 SELECT okc_deliverable_id_s.NEXTVAL
5208 INTO p_deliverable_rec.deliverable_id
5209 FROM DUAL;
5210 END IF;
5211
5212 IF p_deliverable_rec.business_document_type = okc_api.g_miss_char
5213 THEN
5214 p_deliverable_rec.business_document_type := 'TEMPLATE';
5215 END IF;
5216
5217 IF p_deliverable_rec.business_document_id = okc_api.g_miss_num
5218 THEN
5219 p_deliverable_rec.business_document_id := NULL;
5220 END IF;
5221
5222 IF p_deliverable_rec.business_document_number = okc_api.g_miss_char
5223 THEN
5224 p_deliverable_rec.business_document_number := NULL;
5225 END IF;
5226
5227 IF p_deliverable_rec.deliverable_type = okc_api.g_miss_char
5228 THEN
5229 p_deliverable_rec.deliverable_type := NULL;
5230 END IF;
5231
5232 IF p_deliverable_rec.responsible_party = okc_api.g_miss_char
5233 THEN
5234 p_deliverable_rec.responsible_party := NULL;
5235 END IF;
5236
5237 -- Pre-11iCU2 -- Bug 4228090
5238 IF p_deliverable_rec.responsible_party = 'BUYER_ORG' THEN
5239 p_deliverable_rec.responsible_party := 'INTERNAL_ORG';
5240 END IF;
5241
5242 IF p_deliverable_rec.internal_party_contact_id = okc_api.g_miss_num
5243 THEN
5244 p_deliverable_rec.internal_party_contact_id := NULL;
5245 END IF;
5246
5247 IF p_deliverable_rec.external_party_contact_id = okc_api.g_miss_num
5248 THEN
5249 p_deliverable_rec.external_party_contact_id := NULL;
5250 END IF;
5251
5252 IF p_deliverable_rec.deliverable_name = okc_api.g_miss_char
5253 THEN
5254 p_deliverable_rec.deliverable_name := NULL;
5255 END IF;
5256
5257 IF p_deliverable_rec.description = okc_api.g_miss_char
5258 THEN
5259 p_deliverable_rec.description := NULL;
5260 END IF;
5261
5262 IF p_deliverable_rec.comments = okc_api.g_miss_char
5263 THEN
5264 p_deliverable_rec.comments := NULL;
5265 END IF;
5266
5267 IF p_deliverable_rec.display_sequence = okc_api.g_miss_num
5268 THEN
5269 p_deliverable_rec.display_sequence :=
5270 getdeldisplaysequence (p_deliverable_rec.deliverable_id);
5271 END IF;
5272
5273 IF p_deliverable_rec.fixed_due_date_yn = okc_api.g_miss_char
5274 THEN
5275 p_deliverable_rec.fixed_due_date_yn := 'Y';
5276 END IF;
5277
5278 IF p_deliverable_rec.actual_due_date = okc_api.g_miss_date
5279 THEN
5280 p_deliverable_rec.actual_due_date := NULL;
5281 END IF;
5282
5283 IF p_deliverable_rec.print_due_date_msg_name = okc_api.g_miss_char
5284 THEN
5285 p_deliverable_rec.print_due_date_msg_name := NULL;
5286 END IF;
5287
5288 IF p_deliverable_rec.recurring_yn = okc_api.g_miss_char
5289 THEN
5290 p_deliverable_rec.recurring_yn := 'N';
5291 END IF;
5292
5293 IF p_deliverable_rec.notify_prior_due_date_value = okc_api.g_miss_num
5294 THEN
5295 p_deliverable_rec.notify_prior_due_date_value := NULL;
5296 END IF;
5297
5298 IF p_deliverable_rec.notify_prior_due_date_uom = okc_api.g_miss_char
5299 THEN
5300 p_deliverable_rec.notify_prior_due_date_uom := NULL;
5301 END IF;
5302
5303 IF p_deliverable_rec.notify_prior_due_date_yn = okc_api.g_miss_char
5304 THEN
5305 p_deliverable_rec.notify_prior_due_date_yn := 'N';
5306 END IF;
5307
5308 IF p_deliverable_rec.notify_completed_yn = okc_api.g_miss_char
5309 THEN
5310 p_deliverable_rec.notify_completed_yn := 'N';
5311 END IF;
5312
5313 IF p_deliverable_rec.notify_overdue_yn = okc_api.g_miss_char
5314 THEN
5315 p_deliverable_rec.notify_overdue_yn := 'N';
5316 END IF;
5317
5318 IF p_deliverable_rec.notify_escalation_yn = okc_api.g_miss_char
5319 THEN
5320 p_deliverable_rec.notify_escalation_yn := 'N';
5321 END IF;
5322
5323 IF p_deliverable_rec.notify_escalation_value = okc_api.g_miss_num
5324 THEN
5325 p_deliverable_rec.notify_escalation_value := NULL;
5326 END IF;
5327
5328 IF p_deliverable_rec.notify_escalation_uom = okc_api.g_miss_char
5329 THEN
5330 p_deliverable_rec.notify_escalation_uom := NULL;
5331 END IF;
5332
5333 IF p_deliverable_rec.escalation_assignee = okc_api.g_miss_num
5334 THEN
5335 p_deliverable_rec.escalation_assignee := NULL;
5336 END IF;
5337
5338 IF p_deliverable_rec.amendment_operation = okc_api.g_miss_char
5339 THEN
5340 p_deliverable_rec.amendment_operation := NULL;
5341 END IF;
5342
5343 IF p_deliverable_rec.prior_notification_id = okc_api.g_miss_num
5344 THEN
5345 p_deliverable_rec.prior_notification_id := NULL;
5346 END IF;
5347
5348 IF p_deliverable_rec.amendment_notes = okc_api.g_miss_char
5349 THEN
5350 p_deliverable_rec.amendment_notes := NULL;
5351 END IF;
5352
5353 IF p_deliverable_rec.completed_notification_id = okc_api.g_miss_num
5354 THEN
5355 p_deliverable_rec.completed_notification_id := NULL;
5356 END IF;
5357
5358 IF p_deliverable_rec.overdue_notification_id = okc_api.g_miss_num
5359 THEN
5360 p_deliverable_rec.overdue_notification_id := NULL;
5361 END IF;
5362
5363 IF p_deliverable_rec.escalation_notification_id = okc_api.g_miss_num
5364 THEN
5365 p_deliverable_rec.escalation_notification_id := NULL;
5366 END IF;
5367
5368 IF p_deliverable_rec.LANGUAGE = okc_api.g_miss_char
5369 THEN
5370 p_deliverable_rec.LANGUAGE := USERENV ('Lang');
5371 END IF;
5372
5373 IF p_deliverable_rec.original_deliverable_id = okc_api.g_miss_num
5374 THEN
5375 p_deliverable_rec.original_deliverable_id :=
5376 p_deliverable_rec.deliverable_id;
5377 END IF;
5378
5379 IF p_deliverable_rec.requester_id = okc_api.g_miss_num
5380 THEN
5381 p_deliverable_rec.requester_id := NULL;
5382 END IF;
5383
5384 IF p_deliverable_rec.external_party_id = okc_api.g_miss_num
5385 THEN
5386 p_deliverable_rec.external_party_id := NULL;
5387 END IF;
5388
5389 IF p_deliverable_rec.recurring_del_parent_id = okc_api.g_miss_num
5390 THEN
5391 p_deliverable_rec.recurring_del_parent_id := NULL;
5392 END IF;
5393
5394 --IF p_deliverable_rec.business_document_version = okc_api.g_miss_num
5395 --THEN
5396 p_deliverable_rec.business_document_version := -99;
5397 --END IF;
5398
5399 IF p_deliverable_rec.relative_st_date_duration = okc_api.g_miss_num
5400 THEN
5401 p_deliverable_rec.relative_st_date_duration := NULL;
5402 END IF;
5403
5404 IF p_deliverable_rec.relative_st_date_uom = okc_api.g_miss_char
5405 THEN
5406 p_deliverable_rec.relative_st_date_uom := NULL;
5407 END IF;
5408
5409 IF p_deliverable_rec.relative_st_date_event_id = okc_api.g_miss_num
5410 THEN
5411 p_deliverable_rec.relative_st_date_event_id := NULL;
5412 END IF;
5413
5414 IF p_deliverable_rec.relative_end_date_duration = okc_api.g_miss_num
5415 THEN
5416 p_deliverable_rec.relative_end_date_duration := NULL;
5417 END IF;
5418
5419 IF p_deliverable_rec.relative_end_date_uom = okc_api.g_miss_char
5420 THEN
5421 p_deliverable_rec.relative_end_date_uom := NULL;
5422 END IF;
5423
5424 IF p_deliverable_rec.relative_end_date_event_id = okc_api.g_miss_num
5425 THEN
5426 p_deliverable_rec.relative_end_date_event_id := NULL;
5427 END IF;
5428
5429 IF p_deliverable_rec.repeating_day_of_month = okc_api.g_miss_char
5430 THEN
5431 p_deliverable_rec.repeating_day_of_month := NULL;
5432 END IF;
5433
5434 IF p_deliverable_rec.repeating_day_of_week = okc_api.g_miss_char
5435 THEN
5436 p_deliverable_rec.repeating_day_of_week := NULL;
5437 END IF;
5438
5439 IF p_deliverable_rec.repeating_frequency_uom = okc_api.g_miss_char
5440 THEN
5441 p_deliverable_rec.repeating_frequency_uom := NULL;
5442 END IF;
5443
5444 IF p_deliverable_rec.repeating_duration = okc_api.g_miss_num
5445 THEN
5446 p_deliverable_rec.repeating_duration := NULL;
5447 END IF;
5448
5449 IF p_deliverable_rec.fixed_start_date = okc_api.g_miss_date
5450 THEN
5451 p_deliverable_rec.fixed_start_date := NULL;
5452 END IF;
5453
5454 IF p_deliverable_rec.fixed_end_date = okc_api.g_miss_date
5455 THEN
5456 p_deliverable_rec.fixed_end_date := NULL;
5457 END IF;
5458
5459 IF p_deliverable_rec.manage_yn = okc_api.g_miss_char
5460 THEN
5461 p_deliverable_rec.manage_yn := 'N';
5462 END IF;
5463
5464 IF p_deliverable_rec.internal_party_id = okc_api.g_miss_num
5465 THEN
5466 p_deliverable_rec.internal_party_id := NULL;
5467 END IF;
5468
5469 --IF p_deliverable_rec.deliverable_status = okc_api.g_miss_char
5470 --THEN
5471 p_deliverable_rec.deliverable_status := 'INACTIVE';
5472 --END IF;
5473
5474 IF p_deliverable_rec.status_change_notes = okc_api.g_miss_char
5475 THEN
5476 p_deliverable_rec.status_change_notes := NULL;
5477 END IF;
5478
5479 --IF p_deliverable_rec.created_by = okc_api.g_miss_num
5480 --THEN
5481 p_deliverable_rec.created_by := fnd_global.user_id;
5482 -- END IF;
5483
5484 --IF p_deliverable_rec.creation_date = okc_api.g_miss_date
5485 --THEN
5486 p_deliverable_rec.creation_date := SYSDATE;
5487 --END IF;
5488
5489 --IF p_deliverable_rec.last_updated_by = okc_api.g_miss_num
5490 --THEN
5491 p_deliverable_rec.last_updated_by := fnd_global.user_id;
5492 --END IF;
5493
5494 --IF p_deliverable_rec.last_update_date = okc_api.g_miss_date
5495 --THEN
5496 p_deliverable_rec.last_update_date := SYSDATE;
5497 --END IF;
5498
5499 --IF p_deliverable_rec.last_update_login = okc_api.g_miss_num
5500 --THEN
5501 p_deliverable_rec.last_update_login := fnd_global.login_id;
5502 --END IF;
5503
5504 --IF p_deliverable_rec.object_version_number = okc_api.g_miss_num
5505 --THEN
5506 p_deliverable_rec.object_version_number := 1;
5507 --END IF;
5508
5509 IF p_deliverable_rec.attribute_category = okc_api.g_miss_char
5510 THEN
5511 p_deliverable_rec.attribute_category := NULL;
5512 END IF;
5513
5514 IF p_deliverable_rec.attribute1 = okc_api.g_miss_char
5515 THEN
5516 p_deliverable_rec.attribute1 := NULL;
5517 END IF;
5518
5519 IF p_deliverable_rec.attribute2 = okc_api.g_miss_char
5520 THEN
5521 p_deliverable_rec.attribute2 := NULL;
5522 END IF;
5523
5524 IF p_deliverable_rec.attribute3 = okc_api.g_miss_char
5525 THEN
5526 p_deliverable_rec.attribute3 := NULL;
5527 END IF;
5528
5529 IF p_deliverable_rec.attribute4 = okc_api.g_miss_char
5530 THEN
5531 p_deliverable_rec.attribute4 := NULL;
5532 END IF;
5533
5534 IF p_deliverable_rec.attribute5 = okc_api.g_miss_char
5535 THEN
5536 p_deliverable_rec.attribute5 := NULL;
5537 END IF;
5538
5539 IF p_deliverable_rec.attribute6 = okc_api.g_miss_char
5540 THEN
5541 p_deliverable_rec.attribute6 := NULL;
5542 END IF;
5543
5544 IF p_deliverable_rec.attribute7 = okc_api.g_miss_char
5545 THEN
5546 p_deliverable_rec.attribute7 := NULL;
5547 END IF;
5548
5549 IF p_deliverable_rec.attribute8 = okc_api.g_miss_char
5550 THEN
5551 p_deliverable_rec.attribute8 := NULL;
5552 END IF;
5553
5554 IF p_deliverable_rec.attribute9 = okc_api.g_miss_char
5555 THEN
5556 p_deliverable_rec.attribute9 := NULL;
5557 END IF;
5558
5559 IF p_deliverable_rec.attribute10 = okc_api.g_miss_char
5560 THEN
5561 p_deliverable_rec.attribute10 := NULL;
5562 END IF;
5563
5564 IF p_deliverable_rec.attribute11 = okc_api.g_miss_char
5565 THEN
5566 p_deliverable_rec.attribute11 := NULL;
5567 END IF;
5568
5569 IF p_deliverable_rec.attribute12 = okc_api.g_miss_char
5570 THEN
5571 p_deliverable_rec.attribute12 := NULL;
5572 END IF;
5573
5574 IF p_deliverable_rec.attribute13 = okc_api.g_miss_char
5575 THEN
5576 p_deliverable_rec.attribute13 := NULL;
5577 END IF;
5578
5579 IF p_deliverable_rec.attribute14 = okc_api.g_miss_char
5580 THEN
5581 p_deliverable_rec.attribute14 := NULL;
5582 END IF;
5583
5584 IF p_deliverable_rec.attribute15 = okc_api.g_miss_char
5585 THEN
5586 p_deliverable_rec.attribute15 := NULL;
5587 END IF;
5588
5589 IF p_deliverable_rec.disable_notifications_yn = okc_api.g_miss_char
5590 THEN
5591 p_deliverable_rec.disable_notifications_yn := 'N';
5592 END IF;
5593
5594 IF p_deliverable_rec.last_amendment_date = okc_api.g_miss_date
5595 THEN
5596 p_deliverable_rec.last_amendment_date := NULL;
5597 END IF;
5598
5599 IF p_deliverable_rec.business_document_line_id = okc_api.g_miss_num
5600 THEN
5601 p_deliverable_rec.business_document_line_id := NULL;
5602 END IF;
5603
5604 IF p_deliverable_rec.external_party_site_id = okc_api.g_miss_num
5605 THEN
5606 p_deliverable_rec.external_party_site_id := NULL;
5607 END IF;
5608
5609 IF p_deliverable_rec.start_event_date = okc_api.g_miss_date
5610 THEN
5611 p_deliverable_rec.start_event_date := NULL;
5612 END IF;
5613
5614 IF p_deliverable_rec.end_event_date = okc_api.g_miss_date
5615 THEN
5616 p_deliverable_rec.end_event_date := NULL;
5617 END IF;
5618
5619 IF p_deliverable_rec.summary_amend_operation_code =
5620 okc_api.g_miss_char
5621 THEN
5622 p_deliverable_rec.summary_amend_operation_code := NULL;
5623 END IF;
5624
5625 IF p_deliverable_rec.external_party_role = okc_api.g_miss_char
5626 THEN
5627 p_deliverable_rec.external_party_role := NULL;
5628 END IF;
5629
5630 IF p_deliverable_rec.pay_hold_prior_due_date_yn = okc_api.g_miss_char
5631 THEN
5632 p_deliverable_rec.pay_hold_prior_due_date_yn := NULL;
5633 END IF;
5634
5635 IF p_deliverable_rec.pay_hold_prior_due_date_value =
5636 okc_api.g_miss_num
5637 THEN
5638 p_deliverable_rec.pay_hold_prior_due_date_value := NULL;
5639 END IF;
5640
5641 IF p_deliverable_rec.pay_hold_prior_due_date_uom =
5642 okc_api.g_miss_char
5643 THEN
5644 p_deliverable_rec.pay_hold_prior_due_date_uom := NULL;
5645 END IF;
5646
5647 IF p_deliverable_rec.pay_hold_overdue_yn = okc_api.g_miss_char
5648 THEN
5649 p_deliverable_rec.pay_hold_overdue_yn := NULL;
5650 END IF;
5651
5652 -- serukull changes
5653 IF p_deliverable_rec.orig_system_reference_code = okc_api.g_miss_char
5654 THEN
5655 p_deliverable_rec.orig_system_reference_code := NULL;
5656 END IF;
5657
5658 IF p_deliverable_rec.orig_system_reference_id1 = okc_api.g_miss_num
5659 THEN
5660 p_deliverable_rec.orig_system_reference_id1 := NULL;
5661 END IF;
5662
5663
5664 IF p_deliverable_rec.orig_system_reference_id2 = okc_api.g_miss_num
5665 THEN
5666 p_deliverable_rec.orig_system_reference_id2 := NULL;
5667 END IF;
5668
5669 IF p_deliverable_rec.raise_completion_event_yn = okc_api.g_miss_char
5670 THEN
5671 p_deliverable_rec.raise_completion_event_yn := NULL;
5672 END IF;
5673
5674 -- serukull changes
5675
5676 END default_row;
5677
5678 BEGIN
5679
5680 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5681 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.create_deliverables');
5682 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
5683 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
5684 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
5685 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
5686 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
5687 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
5688 END IF;
5689
5690 -- Standard Start of API savepoint
5691 SAVEPOINT g_create_deliverables_GRP;
5692
5693 -- Standard call to check for call compatibility.
5694 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
5695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5696 END IF;
5697
5698 -- Initialize message list if p_init_msg_list is set to TRUE.
5699 IF FND_API.to_Boolean( p_init_msg_list ) THEN
5700 FND_MSG_PUB.initialize;
5701 END IF;
5702
5703 -- Initialize API return status to success
5704 x_return_status := FND_API.G_RET_STS_SUCCESS;
5705
5706
5707
5708 validate_document(
5709 p_document_type => p_document_type,
5710 p_document_id => p_document_id,
5711 x_return_status => x_return_status,
5712 x_msg_data => x_msg_data,
5713 x_msg_count => x_msg_count);
5714
5715 delRecTab := p_deliverable_rec;
5716
5717 default_row(delRecTab);
5718
5719 OPEN C_delTypeExists ;
5720 FETCH C_delTypeExists into C_delTypeExists_rec;
5721
5722 IF C_delTypeExists%NOTFOUND THEN
5723 --Incorrect Deliverable type for the DOcument
5724 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
5725 p_msg_name => 'OKC_DEL_TYPE_MISMATCH',
5726 p_token1 => 'p_deliverable_type',
5727 p_token1_value => delRecTab.deliverable_type,
5728 p_token2 => 'P_DOCUMENT_TYPE',
5729 p_token2_value => p_document_type);
5730 x_return_status := G_RET_STS_ERROR;
5731 RAISE FND_API.G_EXC_ERROR;
5732
5733 END IF;
5734 CLOSE C_delTypeExists;
5735
5736 /*Other validations for Deliverable*/
5737 validate_deliverables(p_deliverable_rec => delRecTab);
5738
5739 -- Get the print msg info
5740 IF delRecTab.print_due_date_msg_name IS NULL OR delRecTab.print_due_date_msg_name = OKC_API.G_MISS_CHAR
5741 THEN
5742
5743 IF delRecTab.relative_st_date_event_id IS NOT NULL
5744 THEN
5745 l_start_date_fixed := 'N';
5746 get_event_details (delRecTab.relative_st_date_event_id,
5747 l_start_evt_before_after
5748 );
5749 ELSE
5750 l_start_date_fixed := 'Y';
5751 END IF;
5752
5753 IF delRecTab.recurring_yn = 'Y' THEN
5754 IF delRecTab.relative_end_date_event_id IS NULL THEN
5755 l_end_date_fixed := 'Y';
5756 ELSE
5757 l_end_date_fixed := 'N';
5758 get_event_details (delRecTab.relative_end_date_event_id,
5759 l_end_evt_before_after
5760 );
5761 END IF;
5762 ELSE
5763 l_end_date_fixed := 'N';
5764 get_event_details (delRecTab.relative_end_date_event_id,
5765 l_end_evt_before_after
5766 );
5767 END IF;
5768
5769
5770
5771 IF delRecTab.repeating_duration IS NOT NULL
5772 AND delRecTab.repeating_frequency_uom IS NOT NULL THEN
5773
5774 l_repeating_frequency_uom :=
5775 getuomvalue (p_duration => delRecTab.repeating_duration,
5776 p_uom => delRecTab.repeating_frequency_uom
5777 );
5778 ELSE
5779 l_repeating_frequency_uom := NULL;
5780 END IF;
5781
5782 IF delRecTab.relative_st_date_duration IS not NULL AND
5783 delRecTab.relative_st_date_uom IS NOT NULL
5784 THEN
5785 l_relative_st_date_uom :=
5786 getuomvalue
5787 (p_duration => delRecTab.relative_st_date_duration,
5788 p_uom => delRecTab.relative_st_date_uom
5789 );
5790 ELSE
5791 l_relative_st_date_uom := NULL;
5792 END IF;
5793
5794 IF delRecTab.relative_end_date_duration IS NOT NULL AND
5795 delRecTab.relative_end_date_uom IS NOT NULL THEN
5796
5797 l_relative_end_date_uom :=
5798 getuomvalue
5799 (p_duration => delRecTab.relative_end_date_duration,
5800 p_uom => delRecTab.relative_end_date_uom
5801 );
5802 ELSE
5803 l_relative_end_date_uom := NULL;
5804 END IF;
5805
5806 delRecTab.print_due_date_msg_name :=
5807 getprintduedatemsgname
5808 (p_recurring_flag => delRecTab.recurring_yn,
5809 p_start_fixed_flag => l_start_date_fixed,
5810 p_end_fixed_flag => l_end_date_fixed,
5811 p_repeating_frequency_uom => l_repeating_frequency_uom,
5812 p_relative_st_date_uom => l_relative_st_date_uom,
5813 p_relative_end_date_uom => l_relative_end_date_uom,
5814 p_start_evt_before_after => l_start_evt_before_after,
5815 p_end_evt_before_after => l_end_evt_before_after
5816 );
5817
5818 END IF;
5819
5820 IF delRecTab.deliverable_id IS NULL OR delRecTab.deliverable_id = OKC_API.g_MISS_NUM THEN
5821 select okc_deliverable_id_s.nextval INTO delRecTab.deliverable_id from dual;
5822 delRecTab.original_deliverable_id := delRecTab.deliverable_id;
5823 END IF;
5824
5825 INSERT INTO okc_deliverables
5826 (deliverable_id,
5827 business_document_type,
5828 business_document_id,
5829 business_document_number,
5830 deliverable_type,
5831 responsible_party,
5832 internal_party_contact_id,
5833 external_party_contact_id,
5834 deliverable_name,
5835 description, comments,
5836 display_sequence,
5837 fixed_due_date_yn,
5838 actual_due_date,
5839 print_due_date_msg_name,
5840 recurring_yn,
5841 notify_prior_due_date_value,
5842 notify_prior_due_date_uom,
5843 notify_prior_due_date_yn,
5844 notify_completed_yn,
5845 notify_overdue_yn,
5846 notify_escalation_yn,
5847 notify_escalation_value,
5848 notify_escalation_uom,
5849 escalation_assignee,
5850 amendment_operation,
5851 prior_notification_id,
5852 amendment_notes,
5853 completed_notification_id,
5854 overdue_notification_id,
5855 escalation_notification_id,
5856 LANGUAGE,
5857 original_deliverable_id,
5858 requester_id,
5859 external_party_id,
5860 recurring_del_parent_id,
5861 business_document_version,
5862 relative_st_date_duration,
5863 relative_st_date_uom,
5864 relative_st_date_event_id,
5865 relative_end_date_duration,
5866 relative_end_date_uom,
5867 relative_end_date_event_id,
5868 repeating_day_of_month,
5869 repeating_day_of_week,
5870 repeating_frequency_uom,
5871 repeating_duration,
5872 fixed_start_date,
5873 fixed_end_date,
5874 manage_yn,
5875 internal_party_id,
5876 deliverable_status,
5877 status_change_notes,
5878 created_by,
5879 creation_date,
5880 last_updated_by,
5881 last_update_date,
5882 last_update_login,
5883 object_version_number,
5884 attribute_category,
5885 attribute1,
5886 attribute2,
5887 attribute3,
5888 attribute4,
5889 attribute5,
5890 attribute6,
5891 attribute7,
5892 attribute8,
5893 attribute9,
5894 attribute10,
5895 attribute11,
5896 attribute12,
5897 attribute13,
5898 attribute14,
5899 attribute15,
5900 disable_notifications_yn,
5901 last_amendment_date,
5902 business_document_line_id,
5903 external_party_site_id,
5904 start_event_date,
5905 end_event_date,
5906 summary_amend_operation_code,
5907 external_party_role,
5908 pay_hold_prior_due_date_yn,
5909 pay_hold_prior_due_date_value,
5910 pay_hold_prior_due_date_uom,
5911 pay_hold_overdue_yn
5912 -- serukull changes
5913 ,orig_system_reference_code,
5914 orig_system_reference_id1,
5915 orig_system_reference_id2
5916 -- serukull changes
5917 ,raise_completion_event_yn
5918 )
5919 VALUES (delRecTab.deliverable_id,
5920 delRecTab.business_document_type,
5921 delRecTab.business_document_id,
5922 g_document_number,
5923 delRecTab.deliverable_type,
5924 delRecTab.responsible_party,
5925 delRecTab.internal_party_contact_id,
5926 delRecTab.external_party_contact_id,
5927 delRecTab.deliverable_name,
5928 delRecTab.description, p_deliverable_rec.comments,
5929 delRecTab.display_sequence,
5930 delRecTab.fixed_due_date_yn,
5931 delRecTab.actual_due_date,
5932 delRecTab.print_due_date_msg_name,
5933 delRecTab.recurring_yn,
5934 delRecTab.notify_prior_due_date_value,
5935 delRecTab.notify_prior_due_date_uom,
5936 delRecTab.notify_prior_due_date_yn,
5937 delRecTab.notify_completed_yn,
5938 delRecTab.notify_overdue_yn,
5939 delRecTab.notify_escalation_yn,
5940 delRecTab.notify_escalation_value,
5941 delRecTab.notify_escalation_uom,
5942 delRecTab.escalation_assignee,
5943 delRecTab.amendment_operation,
5944 delRecTab.prior_notification_id,
5945 delRecTab.amendment_notes,
5946 delRecTab.completed_notification_id,
5947 delRecTab.overdue_notification_id,
5948 delRecTab.escalation_notification_id,
5949 delRecTab.LANGUAGE,
5950 delRecTab.original_deliverable_id,
5951 delRecTab.requester_id,
5952 delRecTab.external_party_id,
5953 delRecTab.recurring_del_parent_id,
5954 delRecTab.business_document_version,
5955 delRecTab.relative_st_date_duration,
5956 delRecTab.relative_st_date_uom,
5957 delRecTab.relative_st_date_event_id,
5958 delRecTab.relative_end_date_duration,
5959 delRecTab.relative_end_date_uom,
5960 delRecTab.relative_end_date_event_id,
5961 delRecTab.repeating_day_of_month,
5962 delRecTab.repeating_day_of_week,
5963 delRecTab.repeating_frequency_uom,
5964 delRecTab.repeating_duration,
5965 delRecTab.fixed_start_date,
5966 delRecTab.fixed_end_date,
5967 delRecTab.manage_yn,
5968 delRecTab.internal_party_id,
5969 delRecTab.deliverable_status,
5970 delRecTab.status_change_notes,
5971 delRecTab.created_by,
5972 delRecTab.creation_date,
5973 delRecTab.last_updated_by,
5974 delRecTab.last_update_date,
5975 delRecTab.last_update_login,
5976 delRecTab.object_version_number,
5977 delRecTab.attribute_category,
5978 delRecTab.attribute1,
5979 delRecTab.attribute2,
5980 delRecTab.attribute3,
5981 delRecTab.attribute4,
5982 delRecTab.attribute5,
5983 delRecTab.attribute6,
5984 delRecTab.attribute7,
5985 delRecTab.attribute8,
5986 delRecTab.attribute9,
5987 delRecTab.attribute10,
5988 delRecTab.attribute11,
5989 delRecTab.attribute12,
5990 delRecTab.attribute13,
5991 delRecTab.attribute14,
5992 delRecTab.attribute15,
5993 delRecTab.disable_notifications_yn,
5994 delRecTab.last_amendment_date,
5995 delRecTab.business_document_line_id,
5996 delRecTab.external_party_site_id,
5997 delRecTab.start_event_date,
5998 delRecTab.end_event_date,
5999 delRecTab.summary_amend_operation_code,
6000 delRecTab.external_party_role,
6001 delRecTab.pay_hold_prior_due_date_yn,
6002 delRecTab.pay_hold_prior_due_date_value,
6003 delRecTab.pay_hold_prior_due_date_uom,
6004 delRecTab.pay_hold_overdue_yn
6005 -- serukull changes
6006 ,delRecTab.orig_system_reference_code,
6007 delRecTab.orig_system_reference_id1,
6008 delRecTab.orig_system_reference_id2
6009 -- serukull changes
6010 ,delRecTab.raise_completion_event_yn
6011 );
6012
6013 delRecTab.status := g_ret_sts_success;
6014
6015 IF fnd_api.to_boolean (p_commit)
6016 THEN
6017 COMMIT;
6018 END IF;
6019
6020
6021
6022 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6023 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.create_deliverables, return status'||x_return_status);
6024 END IF;
6025
6026 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6027 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6028 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6029 RAISE FND_API.G_EXC_ERROR ;
6030 END IF;
6031
6032
6033 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6034 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving create_deliverables');
6035 END IF;
6036
6037 EXCEPTION
6038
6039 WHEN FND_API.G_EXC_ERROR THEN
6040
6041 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6042 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving create_deliverables: OKC_API.G_EXCEPTION_ERROR Exception');
6043 END IF;
6044 IF C_delTypeExists%ISOPEN THEN
6045 CLOSE C_delTypeExists;
6046 END IF;
6047
6048 ROLLBACK TO g_create_deliverables_GRP;
6049 x_return_status := G_RET_STS_ERROR ;
6050 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6051
6052 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6053 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6054 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving create_deliverables: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
6055 END IF;
6056
6057 IF C_delTypeExists%ISOPEN THEN
6058 CLOSE C_delTypeExists;
6059 END IF;
6060
6061 ROLLBACK TO g_create_deliverables_GRP;
6062 x_return_status := G_RET_STS_UNEXP_ERROR ;
6063 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6064
6065 WHEN OTHERS THEN
6066 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6067 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving create_deliverables because of EXCEPTION: '||sqlerrm);
6068 END IF;
6069
6070 IF C_delTypeExists%ISOPEN THEN
6071 CLOSE C_delTypeExists;
6072 END IF;
6073
6074 ROLLBACK TO g_create_deliverables_GRP;
6075 x_return_status := G_RET_STS_UNEXP_ERROR ;
6076 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6077 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6078 END IF;
6079 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6080
6081 END create_deliverables;
6082
6083
6084 PROCEDURE remove_std_clause_from_doc(p_api_version IN Number,
6085 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
6086 p_commit IN Varchar2 default FND_API.G_FALSE,
6087 p_mode IN VARCHAR2 default'NORMAL',
6088 p_document_type IN Varchar2,
6089 p_document_id IN Number,
6090 p_clause_version_id IN Number default null,
6091 p_clause_title IN Varchar2 default null,
6092 p_clause_version_num IN Number default null,
6093 p_renumber_terms IN Varchar2 default FND_API.G_FALSE,
6094 x_return_status OUT NOCOPY Varchar2,
6095 x_msg_data OUT NOCOPY Varchar2,
6096 x_msg_count OUT NOCOPY Number)
6097 IS
6098
6099 l_api_version CONSTANT NUMBER := 1;
6100 l_api_name CONSTANT VARCHAR2(30) := 'remove_std_art_from_doc';
6101
6102
6103
6104 TYPE l_cls_type IS RECORD (
6105 article_id OKC_ARTICLE_VERSIONS.ARTICLE_ID%TYPE,
6106 article_title OKC_ARTICLES_ALL.ARTICLE_TITLE%TYPE,
6107 article_version_id OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE,
6108 article_version_number OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE,
6109 article_intent OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE,
6110 provision_yn OKC_ARTICLE_VERSIONS.PROVISION_YN%TYPE,
6111 article_status OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE,
6112 start_date OKC_ARTICLE_VERSIONS.START_DATE%TYPE,
6113 end_date OKC_ARTICLE_VERSIONS.END_DATE%TYPE);
6114
6115 l_cls_type_rec l_cls_type;
6116
6117 CURSOR l_cls_id_validate_csr IS
6118 SELECT
6119 article_id,
6120 article_title,
6121 article_version_id,
6122 article_version_number,
6123 article_intent,
6124 provision_yn,
6125 article_status,
6126 start_date,
6127 end_date
6128 FROM
6129 OKC_ARTICLES_V ART
6130 WHERE ART.article_version_id = p_clause_version_id;
6131
6132
6133 CURSOR l_cls_name_validate_csr(l_org_id IN NUMBER) IS
6134 SELECT
6135 article_id,
6136 article_title,
6137 article_version_id,
6138 article_version_number,
6139 article_intent,
6140 provision_yn,
6141 article_status,
6142 start_date,
6143 end_date
6144 FROM
6145 okc_articles_local_v ART
6146 WHERE ART.article_title = p_clause_title
6147 AND ART.org_id = l_org_id
6148 UNION ALL
6149 SELECT
6150 article_id,
6151 article_title,
6152 article_version_id,
6153 article_version_number,
6154 article_intent,
6155 provision_yn,
6156 article_status,
6157 start_date,
6158 end_date
6159 FROM
6160 okc_articles_global_v ART
6161 WHERE ART.article_title = p_clause_title
6162 AND ART.org_id = l_org_id;
6163
6164 CURSOR c_get_doc_art_id_csr(p_article_id NUMBER) IS
6165 SELECT id, object_version_number
6166 FROM okc_k_articles_b
6167 WHERE p_document_type = p_document_type
6168 AND document_id = p_document_id
6169 AND sav_sae_id = p_article_id;
6170
6171 BEGIN
6172
6173 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6174 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.remove_std_art_from_doc');
6175 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
6176 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
6177 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
6178 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
6179 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
6180 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
6181 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_version_id : '||p_clause_version_id);
6182 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_title : '||p_clause_title);
6183 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_version_num : '||p_clause_version_num);
6184 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_renumber_terms : '||p_renumber_terms);
6185 END IF;
6186
6187 -- Standard Start of API savepoint
6188 SAVEPOINT g_remove_std_clause_grp;
6189
6190 -- Standard call to check for call compatibility.
6191 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
6192 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6193 END IF;
6194
6195 -- Initialize message list if p_init_msg_list is set to TRUE.
6196 IF FND_API.to_Boolean( p_init_msg_list ) THEN
6197 FND_MSG_PUB.initialize;
6198 END IF;
6199
6200 -- Initialize API return status to success
6201 x_return_status := FND_API.G_RET_STS_SUCCESS;
6202
6203
6204 OPEN cur_org_csr;
6205 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
6206 CLOSE cur_org_csr;
6207
6208 validate_document(
6209 p_document_type => p_document_type,
6210 p_document_id => p_document_id,
6211 x_return_status => x_return_status,
6212 x_msg_data => x_msg_data,
6213 x_msg_count => x_msg_count);
6214
6215
6216 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6217 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
6218 END IF;
6219
6220 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6221 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6222 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6223 RAISE FND_API.G_EXC_ERROR ;
6224 END IF;
6225
6226 -- Check that Clause info is provided
6227 IF p_clause_version_id is NULL and p_clause_title is NULL THEN
6228 -- no clause is provided
6229 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6230 p_msg_name => 'OKC_TERMS_INV_CLS');
6231 x_return_status := G_RET_STS_ERROR;
6232 RAISE FND_API.G_EXC_ERROR ;
6233 END IF;
6234
6235 IF p_clause_version_id is not NULL THEN
6236 OPEN l_cls_id_validate_csr;
6237 FETCH l_cls_id_validate_csr INTO l_cls_type_rec ;
6238 IF l_cls_id_validate_csr%NOTFOUND THEN
6239 --Invalid Clause
6240 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6241 p_msg_name => 'OKC_TERMS_INV_CLS_ID',
6242 p_token1 => 'P_CLS_VER_ID',
6243 p_token1_value => p_clause_version_id);
6244 x_return_status := G_RET_STS_ERROR;
6245 RAISE FND_API.G_EXC_ERROR ;
6246 END IF;
6247 CLOSE l_cls_id_validate_csr;
6248
6249 ELSE
6250 OPEN l_cls_name_validate_csr(G_CURRENT_ORG_ID);
6251 FETCH l_cls_name_validate_csr INTO l_cls_type_rec ;
6252 IF l_cls_name_validate_csr%NOTFOUND THEN
6253 --Invalid Clause Name
6254 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6255 p_msg_name => 'OKC_TERMS_INV_CLS_NAME',
6256 p_token1 => 'P_CLS_TITLE',
6257 p_token1_value => p_clause_title);
6258 x_return_status := G_RET_STS_ERROR;
6259 RAISE FND_API.G_EXC_ERROR ;
6260 END IF;
6261 CLOSE l_cls_name_validate_csr;
6262
6263 END IF;
6264
6265 /*Make x_return_status as null. So if any clauses get deleted it will change to 'S' and if any errors it will change to 'E' or 'U'.
6266 If its null then no clauses got updated.*/
6267
6268 FOR c_get_doc_art_id_csr_rec IN c_get_doc_art_id_csr(l_cls_type_rec.article_id) LOOP
6269
6270 remove_clause_id_from_doc(
6271 p_api_version => 1.0,
6272 p_init_msg_list => FND_API.G_FALSE,
6273 p_commit => FND_API.G_FALSE,
6274 p_mode => p_mode,
6275 p_document_type => p_document_type,
6276 p_document_id => p_document_id,
6277 p_clause_id => c_get_doc_art_id_csr_rec.id,
6278 x_return_status => x_return_status,
6279 x_msg_count => x_msg_count,
6280 x_msg_data => x_msg_data);
6281 END LOOP;
6282
6283 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6284 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_K_ARTICLES_GRP.create_article, return status'||x_return_status);
6285 END IF;
6286
6287 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6288 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6289 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6290 RAISE FND_API.G_EXC_ERROR ;
6291 END IF;
6292 -----------------------------------------------------
6293
6294 IF p_renumber_terms = 'Y' THEN
6295 apply_numbering_scheme(
6296 p_document_type => p_document_type,
6297 p_document_id => p_document_id,
6298 x_return_status => x_return_status,
6299 x_msg_count => x_msg_count,
6300 x_msg_data => x_msg_data
6301 );
6302
6303 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6304 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: apply_numbering_scheme, return status'||x_return_status);
6305 END IF;
6306
6307 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6308 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6309 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6310 RAISE FND_API.G_EXC_ERROR ;
6311 END IF;
6312 END IF;
6313
6314
6315 IF FND_API.To_Boolean( p_commit ) THEN
6316 COMMIT WORK;
6317 END IF;
6318
6319 -- Standard call to get message count and if count is 1, get message info.
6320 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6321
6322 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6323 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_standard_clause');
6324 END IF;
6325
6326 EXCEPTION
6327
6328 WHEN FND_API.G_EXC_ERROR THEN
6329
6330 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6331 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_standard_clause: OKC_API.G_EXCEPTION_ERROR Exception');
6332 END IF;
6333
6334 IF c_get_doc_art_id_csr%ISOPEN THEN
6335 CLOSE c_get_doc_art_id_csr;
6336 END IF;
6337 IF l_cls_id_validate_csr%ISOPEN THEN
6338 CLOSE l_cls_id_validate_csr;
6339 END IF;
6340 IF l_cls_name_validate_csr%ISOPEN THEN
6341 CLOSE l_cls_name_validate_csr;
6342 END IF;
6343
6344 ROLLBACK TO g_remove_std_clause_grp;
6345 x_return_status := G_RET_STS_ERROR ;
6346 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6347
6348 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6349 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6350 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_standard_clause: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
6351 END IF;
6352
6353 ROLLBACK TO g_remove_std_clause_grp;
6354 x_return_status := G_RET_STS_UNEXP_ERROR ;
6355 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6356
6357 WHEN OTHERS THEN
6358 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6359 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_standard_clause because of EXCEPTION: '||sqlerrm);
6360 END IF;
6361
6362 ROLLBACK TO g_remove_std_clause_grp;
6363 x_return_status := G_RET_STS_UNEXP_ERROR ;
6364 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6365 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6366 END IF;
6367 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6368
6369 END remove_std_clause_from_doc;
6370
6371 PROCEDURE remove_clause_id_from_doc(p_api_version IN Number,
6372 p_init_msg_list IN Varchar2 default FND_API.G_FALSE,
6373 p_commit IN Varchar2 default FND_API.G_FALSE,
6374 p_mode IN VARCHAR2 default'NORMAL',
6375 p_document_type IN Varchar2,
6376 p_document_id IN Number,
6377 p_clause_id IN Number default null,
6378 p_renumber_terms IN Varchar2 default FND_API.G_FALSE,
6379 x_return_status OUT NOCOPY Varchar2,
6380 x_msg_data OUT NOCOPY Varchar2,
6381 x_msg_count OUT NOCOPY NUMBER
6382 ,p_locking_enabled_yn IN VARCHAR2 DEFAULT 'N'
6383 )
6384 IS
6385
6386 l_api_version CONSTANT NUMBER := 1;
6387 l_api_name CONSTANT VARCHAR2(30) := 'remove_clause_from_doc';
6388 l_object_version_number NUMBER;
6389
6390 CURSOR c_get_doc_art_id_csr IS
6391 SELECT object_version_number
6392 FROM okc_k_articles_b
6393 WHERE p_document_type = p_document_type
6394 AND document_id = p_document_id
6395 AND id = p_clause_id;
6396
6397 BEGIN
6398
6399 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6400 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Entered OKC_TERMS_MIGRATE_GRP.remove_std_art_from_doc');
6401 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: Parameter List ');
6402 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_api_version : '||p_api_version);
6403 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_init_msg_list : '||p_init_msg_list);
6404 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_commit : '||p_commit);
6405 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_type : '||p_document_type);
6406 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_document_id : '||p_document_id);
6407 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_clause_version_id : '||p_clause_id);
6408 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'100: p_renumber_terms : '||p_renumber_terms);
6409 END IF;
6410
6411 -- Standard Start of API savepoint
6412 SAVEPOINT g_remove_clause_from_doc_GRP;
6413
6414 -- Standard call to check for call compatibility.
6415 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
6416 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6417 END IF;
6418
6419 -- Initialize message list if p_init_msg_list is set to TRUE.
6420 IF FND_API.to_Boolean( p_init_msg_list ) THEN
6421 FND_MSG_PUB.initialize;
6422 END IF;
6423
6424 -- Initialize API return status to success
6425 x_return_status := FND_API.G_RET_STS_SUCCESS;
6426
6427
6428 OPEN cur_org_csr;
6429 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
6430 CLOSE cur_org_csr;
6431
6432 validate_document(
6433 p_document_type => p_document_type,
6434 p_document_id => p_document_id,
6435 x_return_status => x_return_status,
6436 x_msg_data => x_msg_data,
6437 x_msg_count => x_msg_count);
6438
6439
6440 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6441 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'300: Finished OKC_TERMS_MIGRATE_GRP.validate_document, return status'||x_return_status);
6442 END IF;
6443
6444 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6445 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6446 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6447 RAISE FND_API.G_EXC_ERROR ;
6448 END IF;
6449
6450 -- Check that Clause info is provided
6451 IF p_clause_id is NULL THEN
6452 -- no clause is provided
6453 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6454 p_msg_name => 'OKC_TERMS_INV_CLS');
6455 x_return_status := G_RET_STS_ERROR;
6456 RAISE FND_API.G_EXC_ERROR ;
6457 END IF;
6458
6459 IF p_clause_id is not NULL THEN
6460 OPEN c_get_doc_art_id_csr;
6461 FETCH c_get_doc_art_id_csr INTO l_object_version_number;
6462 IF c_get_doc_art_id_csr%NOTFOUND THEN
6463 --Invalid Clause
6464 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6465 p_msg_name => 'OKC_TERMS_INV_CLS_ID',
6466 p_token1 => 'P_CLS_ID',
6467 p_token1_value => p_clause_id);
6468 x_return_status := G_RET_STS_ERROR;
6469 RAISE FND_API.G_EXC_ERROR ;
6470 END IF;
6471 CLOSE c_get_doc_art_id_csr;
6472
6473 END IF;
6474
6475 OKC_K_ARTICLES_GRP.delete_article(
6476 p_api_version => 1.0,
6477 p_init_msg_list => FND_API.G_FALSE,
6478 p_validate_commit => FND_API.G_FALSE,
6479 p_validation_string => Null,
6480 p_commit => FND_API.G_FALSE,
6481 p_mode => p_mode,
6482 p_id => p_clause_id,
6483 p_object_version_number => l_object_version_number,
6484 p_mandatory_clause_delete => 'Y',
6485 p_super_user_yn => 'N',
6486 x_return_status => x_return_status,
6487 x_msg_count => x_msg_count,
6488 x_msg_data => x_msg_data
6489 ,p_lock_terms_yn => p_locking_enabled_yn
6490 );
6491
6492 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6493 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: Finished OKC_K_ARTICLES_GRP.create_article, return status'||x_return_status);
6494 END IF;
6495
6496 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6497 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6498 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6499 RAISE FND_API.G_EXC_ERROR ;
6500 END IF;
6501 -----------------------------------------------------
6502
6503 IF p_renumber_terms = 'Y' THEN
6504 apply_numbering_scheme(
6505 p_document_type => p_document_type,
6506 p_document_id => p_document_id,
6507 x_return_status => x_return_status,
6508 x_msg_count => x_msg_count,
6509 x_msg_data => x_msg_data
6510 );
6511
6512 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6513 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'600: apply_numbering_scheme, return status'||x_return_status);
6514 END IF;
6515
6516 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
6517 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6518 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
6519 RAISE FND_API.G_EXC_ERROR ;
6520 END IF;
6521 END IF;
6522
6523
6524 IF FND_API.To_Boolean( p_commit ) THEN
6525 COMMIT WORK;
6526 END IF;
6527
6528 -- Standard call to get message count and if count is 1, get message info.
6529 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6530
6531 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6532 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,g_module||l_api_name,'1000: Leaving add_standard_clause');
6533 END IF;
6534
6535 EXCEPTION
6536
6537 WHEN FND_API.G_EXC_ERROR THEN
6538
6539 IF ( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6540 FND_LOG.STRING( FND_LOG.LEVEL_ERROR ,g_module||l_api_name,'800: Leaving add_standard_clause: OKC_API.G_EXCEPTION_ERROR Exception');
6541 END IF;
6542
6543 IF c_get_doc_art_id_csr%ISOPEN THEN
6544 CLOSE c_get_doc_art_id_csr;
6545 END IF;
6546
6547 ROLLBACK TO g_remove_clause_from_doc_GRP;
6548 x_return_status := G_RET_STS_ERROR ;
6549 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6550
6551 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6552 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6553 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'900: Leaving add_standard_clause: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
6554 END IF;
6555
6556 ROLLBACK TO g_remove_clause_from_doc_GRP;
6557 x_return_status := G_RET_STS_UNEXP_ERROR ;
6558 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6559
6560 WHEN OTHERS THEN
6561 IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6562 FND_LOG.STRING( FND_LOG.LEVEL_UNEXPECTED ,g_module||l_api_name,'1000: Leaving add_standard_clause because of EXCEPTION: '||sqlerrm);
6563 END IF;
6564
6565 ROLLBACK TO g_remove_clause_from_doc_GRP;
6566 x_return_status := G_RET_STS_UNEXP_ERROR ;
6567 IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6568 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6569 END IF;
6570 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
6571
6572 END remove_clause_id_from_doc;
6573
6574 END OKC_TERMS_MIGRATE_GRP;