DBA Data[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;