DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_REP_UTIL_PVT

Source


1 PACKAGE BODY OKC_REP_UTIL_PVT AS
2 /* $Header: OKCVREPUTILB.pls 120.43.12020000.12 2013/05/22 06:27:41 nbingi ship $ */
3 
4 
5   ------------------------------------------------------------------------------
6   -- GLOBAL EXCEPTION
7   ------------------------------------------------------------------------------
8   E_Resource_Busy               EXCEPTION;
9   PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
10 
11   ---------------------------------------------------------------------------
12   -- GLOBAL CONSTANTS
13   ---------------------------------------------------------------------------
14 
15   G_RETURN_CODE_SUCCESS     CONSTANT NUMBER := 0;
16   G_RETURN_CODE_WARNING     CONSTANT NUMBER := 1;
17   G_RETURN_CODE_ERROR       CONSTANT NUMBER := 2;
18   G_APPLICATION_ID          CONSTANT NUMBER := 510;
19 
20 
21 
22   ---------------------------------------------------------------------------
23   -- START: Procedures and Functions
24   ---------------------------------------------------------------------------
25   -- Start of comments
26   --API name      : check_contract_access_external
27   --Type          : Private.
28   --Function      : Checks access to a external contract by the current user.
29   --Pre-reqs      : None.
30   --Parameters    :
31   --IN            : p_api_version         IN NUMBER       Required
32   --              : p_init_msg_list       IN VARCHAR2     Required
33   --              : p_contract_id         IN NUMBER       Required
34   --                   Id of the contract to be checked
35   --              : p_contract_type       IN VARCHAR2       Required
36   --                   Type of the contract to be checked
37   --OUT           : x_has_access          OUT  VARCHAR2(1)
38   --              : x_return_status       OUT  VARCHAR2(1)
39   --              : x_msg_count           OUT  NUMBER
40   --              : x_msg_data            OUT  VARCHAR2(2000)
41   -- End of comments
42   PROCEDURE check_contract_access_external(
43     p_api_version     IN  NUMBER,
44     p_init_msg_list   IN VARCHAR2,
45     p_contract_id     IN  NUMBER,
46     p_contract_type   IN  VARCHAR2,
47     x_has_access      OUT NOCOPY  VARCHAR2,
48     x_msg_data        OUT NOCOPY  VARCHAR2,
49     x_msg_count       OUT NOCOPY  NUMBER,
50     x_return_status   OUT NOCOPY  VARCHAR2)
51   IS
52 
53   l_api_name VARCHAR2(30);
54   l_org_id  OKC_REP_CONTRACTS_ALL.ORG_ID%type;
55   l_result  VARCHAR2(1);
56 
57   CURSOR intents_csr(p_contract_type IN VARCHAR2) IS
58     SELECT NULL
59     FROM okc_bus_doc_types_b
60     WHERE document_type = p_contract_type
61     AND (INSTR( FND_PROFILE.VALUE('OKC_REP_INTENTS'), intent) <> 0
62         OR FND_PROFILE.VALUE('OKC_REP_INTENTS') IS NULL);
63 
64   CURSOR po_contract_csr(p_contract_id IN NUMBER, p_contract_type IN VARCHAR2) IS
65     SELECT
66       h.org_id
67     FROM
68       po_headers_all h
69       ,okc_template_usages t
70     WHERE  h.po_header_id = t.document_id
71     AND  t.document_type IN ('PA_BLANKET','PA_CONTRACT','PO_STANDARD')
72     AND  t.document_type = p_contract_type
73     AND  h.po_header_id = p_contract_id;
74 
75   CURSOR neg_contract_csr(p_contract_id IN NUMBER, p_contract_type IN VARCHAR2) IS
76     SELECT
77       h.org_id
78     FROM
79       pon_auction_headers_all h
80       ,okc_template_usages t
81     WHERE  h.auction_header_id = t.document_id
82     AND  t.document_type IN ('AUCTION','RFI','RFQ')
83     AND  t.document_type = p_contract_type
84     AND  h.auction_header_id = p_contract_id;
85 
86   CURSOR bsa_contract_csr(p_contract_id IN NUMBER, p_contract_type IN VARCHAR2) IS
87     SELECT
88       h.org_id
89     FROM
90       oe_blanket_headers_all h
91       ,okc_template_usages t
92     WHERE  h.header_id = t.document_id
93     AND  t.document_type = 'B'
94     AND  t.document_type = p_contract_type
95     AND  h.header_id = p_contract_id;
96 
97   CURSOR so_contract_csr(p_contract_id IN NUMBER, p_contract_type IN VARCHAR2) IS
98     SELECT
99       h.org_id
100     FROM
101       oe_order_headers_all h
102       ,okc_template_usages t
103     WHERE  h.header_id = t.document_id
104     AND  t.document_type = 'O'
105     AND  t.document_type = p_contract_type
106     AND  h.header_id = p_contract_id;
107 
108   CURSOR quote_contract_csr(p_contract_id IN NUMBER, p_contract_type IN VARCHAR2) IS
109     SELECT
110       h.org_id
111     FROM
112       aso_quote_headers_all h
113       ,okc_template_usages t
114     WHERE  h.quote_header_id = t.document_id
115     AND  t.document_type = 'QUOTE'
116     AND  t.document_type = p_contract_type
117     AND  h.quote_header_id = p_contract_id;
118 
119   CURSOR quote_security_csr(p_contract_id IN NUMBER) IS
120     SELECT
121       NULL
122     FROM
123       aso_quote_headers_all h
124     WHERE  h.quote_header_id = p_contract_id
125     AND  get_quote_access(
126       (SELECT s.resource_id
127       FROM jtf_rs_salesreps s
128       WHERE s.person_id = fnd_global.employee_id()),
129       h.quote_number) <> 'NONE';
130 
131   CURSOR mo_check_csr(p_org_id in number) IS
132      SELECT organization_id
133      FROM   mo_glob_org_access_tmp
134      WHERE  organization_id = p_org_id;
135 
136   BEGIN
137 
138     l_api_name  := 'check_contract_access_external';
139 
140     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
141       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
142                 '100: Entered OKC_REP_UTIL_PVT.check_contract_access');
143         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
144                 '101: Contract Id is: ' || to_char(p_contract_id));
145         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
146                 '102: Contract Type is: ' || p_contract_type);
147     END IF;
148     -- Initialize message list if p_init_msg_list is set to TRUE.
149     IF FND_API.to_Boolean( p_init_msg_list ) THEN
150       FND_MSG_PUB.initialize;
151     END IF;
152 
153     IF     (p_contract_type = 'PA_BLANKET')
154         OR (p_contract_type = 'PA_CONTRACT')
155         OR (p_contract_type = 'PO_STANDARD') THEN
156 
157       OPEN  po_contract_csr(p_contract_id, p_contract_type);
158       FETCH po_contract_csr  INTO  l_org_id;
159       CLOSE po_contract_csr;
160 
161     ELSIF  (p_contract_type = 'AUCTION')
162         OR (p_contract_type = 'RFI')
163         OR (p_contract_type = 'RFQ') THEN
164 
165       OPEN  neg_contract_csr(p_contract_id, p_contract_type);
166       FETCH neg_contract_csr  INTO  l_org_id;
167       CLOSE neg_contract_csr;
168 
169     ELSIF p_contract_type = 'B' THEN
170 
171       OPEN  bsa_contract_csr(p_contract_id, p_contract_type);
172       FETCH bsa_contract_csr  INTO  l_org_id;
173       CLOSE bsa_contract_csr;
174 
175     ELSIF p_contract_type = 'O' THEN
176 
177       OPEN  so_contract_csr(p_contract_id, p_contract_type);
178       FETCH so_contract_csr  INTO  l_org_id;
179       CLOSE so_contract_csr;
180 
181     ELSIF p_contract_type = 'QUOTE' THEN
182 
183       OPEN  quote_contract_csr(p_contract_id, p_contract_type);
184       FETCH quote_contract_csr  INTO  l_org_id;
185       CLOSE quote_contract_csr;
186 
187     END IF;
188 
189     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
190       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
191         'Values from contract_csr: l_org_id = ' || l_org_id );
192     END IF;
193 
194     x_return_status := FND_API.G_RET_STS_SUCCESS;
195     x_has_access := FND_API.G_FALSE;
196 
197     --  Call multi-org API to check access to contract's organization by current user
198     OPEN  mo_check_csr(l_org_id);
199     FETCH mo_check_csr INTO l_org_id;
200 
201     IF (mo_check_csr%FOUND) THEN
202       l_result := 'Y';
203     ELSE
204       l_result := 'N';
205     END IF;
206 
207     CLOSE mo_check_csr;
208 
209     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
210       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
211         'Values after mo_check_csr fetch: l_org_id = ' || l_org_id || ', from mo_check_csr%FOUND: l_result = ' || l_result);
212     END IF;
213 
214     IF (l_result = 'Y') THEN
215 
216       --  Check for allowed intents
217       OPEN  intents_csr(p_contract_type);
218       FETCH intents_csr INTO l_result;
219 
220       IF (intents_csr%FOUND) THEN
221         l_result := 'Y';
222       ELSE
223         l_result := 'N';
224       END IF;
225 
226       CLOSE intents_csr;
227 
228       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
229         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
230           'Values after intents_csr fetch: l_result = ' || l_result);
231       END IF;
232 
233       IF (l_result = 'Y') THEN
234 
235         x_has_access := FND_API.G_TRUE;
236 
237         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
238           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
239             'intents check passed');
240         END IF;
241 
242         IF p_contract_type = 'QUOTE' THEN
243 
244           OPEN  quote_security_csr(p_contract_id);
245           FETCH quote_security_csr  INTO  l_result;
246 
247           IF quote_security_csr%FOUND THEN
248             l_result := 'Y';
249           ELSE
250             l_result := 'N';
251           END IF;
252 
253           CLOSE quote_security_csr;
254 
255           IF l_result = 'Y' THEN
256 
257             x_has_access := FND_API.G_TRUE;
258 
259             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
260               FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
261                 'IF l_result = Y for quoting security');
262             END IF;
263           ELSE
264 
265             x_has_access := FND_API.G_FALSE;
266 
267             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
268               FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
269                 'IF l_result = N for quoting security');
270             END IF;
271           END IF;
272 
273         END IF;
274 
275       END IF; -- End of intent profile check
276 
277     END IF;  -- End of MO_GLOBAL check
278 
279     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
280         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,
281                      '110: Leaving OKC_REP_UTIL_PVT.check_contract_access');
282         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
283                 '111: x_has_access is: ' || x_has_access);
284         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
285                 '112: x_return_status is: ' || x_return_status);
286     END IF;
287 
288     EXCEPTION
289       WHEN FND_API.G_EXC_ERROR THEN
290         --close cursors
291         IF (intents_csr%ISOPEN) THEN
292           CLOSE intents_csr ;
293         END IF;
294         IF (po_contract_csr%ISOPEN) THEN
295           CLOSE po_contract_csr ;
296         END IF;
297         IF (neg_contract_csr%ISOPEN) THEN
298           CLOSE neg_contract_csr ;
299         END IF;
300         IF (bsa_contract_csr%ISOPEN) THEN
301           CLOSE bsa_contract_csr ;
302         END IF;
303         IF (so_contract_csr%ISOPEN) THEN
304           CLOSE so_contract_csr ;
305         END IF;
306         IF (quote_contract_csr%ISOPEN) THEN
307           CLOSE quote_contract_csr ;
308         END IF;
309         IF (quote_security_csr%ISOPEN) THEN
310           CLOSE quote_security_csr ;
311         END IF;
312         IF (mo_check_csr%ISOPEN) THEN
313           CLOSE mo_check_csr ;
314         END IF;
315 
316         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
317           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
318                  g_module || l_api_name || '.exception',
319                  '115: Leaving check_contract_access:FND_API.G_EXC_ERROR Exception');
320         END IF;
321         x_return_status := FND_API.G_RET_STS_ERROR;
322         FND_MSG_PUB.Count_And_Get(
323         p_count =>  x_msg_count,
324         p_data  =>  x_msg_data
325         );
326 
327       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
328         --close cursors
329         IF (intents_csr%ISOPEN) THEN
330           CLOSE intents_csr ;
331         END IF;
332         IF (po_contract_csr%ISOPEN) THEN
333           CLOSE po_contract_csr ;
334         END IF;
335         IF (neg_contract_csr%ISOPEN) THEN
336           CLOSE neg_contract_csr ;
337         END IF;
338         IF (bsa_contract_csr%ISOPEN) THEN
339           CLOSE bsa_contract_csr ;
340         END IF;
341         IF (so_contract_csr%ISOPEN) THEN
342           CLOSE so_contract_csr ;
343         END IF;
344         IF (quote_contract_csr%ISOPEN) THEN
345           CLOSE quote_contract_csr ;
346         END IF;
347         IF (quote_security_csr%ISOPEN) THEN
348           CLOSE quote_security_csr ;
349         END IF;
350         IF (mo_check_csr%ISOPEN) THEN
351           CLOSE mo_check_csr ;
352         END IF;
353 
354         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
355           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
356                  g_module || l_api_name || '.exception',
357                  '116:Leaving check_contract_access:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
358         END IF;
359         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
360         FND_MSG_PUB.Count_And_Get(
361         p_count =>  x_msg_count,
362         p_data  =>  x_msg_data
363         );
364 
365       WHEN OTHERS THEN
366         --close cursors
367         IF (intents_csr%ISOPEN) THEN
368           CLOSE intents_csr ;
369         END IF;
370         IF (po_contract_csr%ISOPEN) THEN
371           CLOSE po_contract_csr ;
372         END IF;
373         IF (neg_contract_csr%ISOPEN) THEN
374           CLOSE neg_contract_csr ;
375         END IF;
376         IF (bsa_contract_csr%ISOPEN) THEN
377           CLOSE bsa_contract_csr ;
378         END IF;
379         IF (so_contract_csr%ISOPEN) THEN
380           CLOSE so_contract_csr ;
381         END IF;
382         IF (quote_contract_csr%ISOPEN) THEN
383           CLOSE quote_contract_csr ;
384         END IF;
385         IF (quote_security_csr%ISOPEN) THEN
386           CLOSE quote_security_csr ;
387         END IF;
388         IF (mo_check_csr%ISOPEN) THEN
389           CLOSE mo_check_csr ;
390         END IF;
391 
392 
393         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
394           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
395                  g_module || l_api_name || '.exception',
396                  '117: Leaving check_contract_access because of EXCEPTION: ' || sqlerrm);
397         END IF;
398         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
399                             p_msg_name     => G_UNEXPECTED_ERROR,
400                             p_token1       => G_SQLCODE_TOKEN,
401                             p_token1_value => sqlcode,
402                             p_token2       => G_SQLERRM_TOKEN,
403                             p_token2_value => sqlerrm);
404         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
405         FND_MSG_PUB.Count_And_Get(
406         p_count =>  x_msg_count,
407         p_data  =>  x_msg_data
408         );
409   END check_contract_access_external;
410 
411   -- Start of comments
412   --API name      : check_contract_access
413   --Type          : Private.
414   --Function      : Checks access to a contract by the current user.
415   --Pre-reqs      : None.
416   --Parameters    :
417   --IN            : p_api_version         IN NUMBER       Required
418   --              : p_init_msg_list       IN VARCHAR2     Required
419   --              : p_contract_id         IN NUMBER       Required
420   --                   Id of the contract whose access to be checked
421   --              : p_function_name       IN VARCHAR2       Required
422   --                   Name of the function whose access to be checked. Possible values OKC_REP_SELECT, OKC_REP_UPDATE
423   --OUT           : x_has_access          OUT  VARCHAR2(1)
424   --              : x_return_status       OUT  VARCHAR2(1)
425   --              : x_msg_count           OUT  NUMBER
426   --              : x_msg_data            OUT  VARCHAR2(2000)
427   -- End of comments
428   PROCEDURE check_contract_access(
429     p_api_version     IN  NUMBER,
430     p_init_msg_list   IN VARCHAR2,
431     p_contract_id     IN  NUMBER,
432     p_function_name   IN  VARCHAR2,
433     x_has_access      OUT NOCOPY  VARCHAR2,
434     x_msg_data        OUT NOCOPY  VARCHAR2,
435     x_msg_count       OUT NOCOPY  NUMBER,
436     x_return_status   OUT NOCOPY  VARCHAR2)
437   IS
438 
439   l_api_name VARCHAR2(30);
440   l_org_id  OKC_REP_CONTRACTS_ALL.ORG_ID%type;
441   l_owner_id  OKC_REP_CONTRACTS_ALL.OWNER_ID%type;
442   l_contract_type  OKC_REP_CONTRACTS_ALL.CONTRACT_TYPE%type;
443   l_use_acl_flag OKC_REP_CONTRACTS_ALL.USE_ACL_FLAG%type;
444   l_result  VARCHAR2(1);
445   l_user_id FND_USER.USER_ID%type;
446   l_user_name FND_USER.USER_NAME%type;
447   l_status_code OKC_REP_CONTRACTS_ALL.CONTRACT_STATUS_CODE%type;
448   l_sign_type OKC_REP_CONTRACTS_ALL.ESIGNATURE_REQUIRED%type;
449   l_approversOut 	    ame_util.approversTable2;
450   l_process_complete_yn varchar2(1);
451   l_item_indexes        ame_util.idList;
452   l_item_classes        ame_util.stringList;
453   l_item_ids            ame_util.stringList;
454   l_item_sources        ame_util.longStringList;
455   l_transaction_type    CONSTANT VARCHAR2(200) := 'OKC_REP_CON_APPROVAL';
456 
457   CURSOR intents_csr(p_contract_type IN VARCHAR2) IS
458     SELECT NULL
459     FROM okc_bus_doc_types_b
460     WHERE document_type = p_contract_type
461     AND   ((is_sales_workbench() = 'N'
462             AND (INSTR( FND_PROFILE.VALUE('OKC_REP_INTENTS'), intent) <> 0
463                  OR FND_PROFILE.VALUE('OKC_REP_INTENTS') IS NULL)
464            )
465         OR (is_sales_workbench() = 'Y'
466             AND intent IN ('S', 'O')
467            )
468           );
469 
470   CURSOR contract_csr(p_contract_id in number) IS
471      SELECT org_id,
472             owner_id,
473             use_acl_flag,
474             contract_type,
475 		  contract_status_code,
476 		  esignature_required
477      FROM   okc_rep_contracts_all
478      WHERE  contract_id = p_contract_id;
479 
480   CURSOR contract_signers_csr(p_contract_id in number) IS
481      SELECT usr.user_id
482 	FROM   okc_rep_party_contacts c, fnd_user usr
483      WHERE  c.contract_id = p_contract_id
484 	AND c.esignature_type = 'SELF'
485 	AND usr.employee_id = c.contact_id;
486 
487   CURSOR grants_csr(p_contract_id1 in number, p_contract_id2 in number, p_grantee_key in FND_GRANTS.grantee_key%TYPE, p_grantee_orig_system in FND_GRANTS.grantee_orig_system%TYPE) IS
488     SELECT
489       NULL
490     FROM
491       jtf_rs_groups_denorm d
492       ,jtf_rs_group_members m
493       ,jtf_rs_resource_extns e
494       ,fnd_grants g
495       ,fnd_objects o
496     WHERE  d.parent_group_id = g.parameter2
497     AND TRUNC(SYSDATE)
498       BETWEEN d.start_date_active
499       AND NVL(d.end_date_active,TRUNC(SYSDATE))
500     and  d.group_id = m.group_id
501     and  m.delete_flag <> 'Y'
502     and  e.resource_id = m.resource_id
503     and  g.object_id = o.object_id
504     AND  o.obj_name = G_OBJECT_NAME
505     AND  g.grantee_type = G_FND_GRANTEE_TYPE_GROUP
506     AND  g.instance_pk1_value = p_contract_id1
507     AND  e.user_id = FND_GLOBAL.user_id()
508     AND  (
509          (g.parameter3 = G_FND_GRANTS_UPDATE_ACCESS AND p_function_name IN (G_SELECT_ACCESS_LEVEL, G_UPDATE_ACCESS_LEVEL))
510       OR (g.parameter3 = G_FND_GRANTS_VIEW_ACCESS   AND p_function_name  =  G_SELECT_ACCESS_LEVEL)
511     )
512      UNION ALL
513     SELECT
514           NULL
515     FROM
516        fnd_grants g
517       ,fnd_objects o
518     WHERE  g.object_id = o.object_id
519     AND  o.obj_name = G_OBJECT_NAME
520     AND  g.grantee_type = G_FND_GRANTEE_TYPE_USER
521     AND  g.instance_pk1_value = p_contract_id2
522     AND  (
523          (g.grantee_key = p_grantee_key AND (g.grantee_orig_system = p_grantee_orig_system OR g.grantee_orig_system = 'JRES_IND')) -- for R12 functionality
524       OR (g.grantee_key = FND_GLOBAL.user_name() AND g.grantee_orig_system = 'PER') -- for 11.5 backward compatibility
525          )
526     AND  (
527          (g.parameter3 = G_FND_GRANTS_UPDATE_ACCESS AND p_function_name IN (G_SELECT_ACCESS_LEVEL, G_UPDATE_ACCESS_LEVEL))
528       OR (g.parameter3 = G_FND_GRANTS_VIEW_ACCESS   AND p_function_name  =  G_SELECT_ACCESS_LEVEL)
529     );
530 
531   -- Cursor to get current user's JTF resource id
532   CURSOR cur_user_jtf_resource_csr IS
533     SELECT resource_id
534     FROM   jtf_rs_resource_extns
535     WHERE  user_id = FND_GLOBAL.user_id();
536 
537   l_resource_id JTF_RS_RESOURCE_EXTNS.resource_id%TYPE;
538   l_grantee_key FND_GRANTS.grantee_key%TYPE;
539   l_grantee_orig_system FND_GRANTS.grantee_orig_system%TYPE;
540   l_grantee_orig_system_id FND_GRANTS.grantee_orig_system_id%TYPE;
541 
542   BEGIN
543 
544     l_api_name  := 'check_contract_access';
545 
546     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
547       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
548                 '100: Entered OKC_REP_UTIL_PVT.check_contract_access');
549         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
550                 '101: Contract Id is: ' || to_char(p_contract_id));
551         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
552                 '102: Fucntion Name is: ' || p_function_name);
553     END IF;
554     -- Initialize message list if p_init_msg_list is set to TRUE.
555     IF FND_API.to_Boolean( p_init_msg_list ) THEN
556       FND_MSG_PUB.initialize;
557     END IF;
558 
559     OPEN  contract_csr(p_contract_id);
560     FETCH contract_csr  INTO  l_org_id, l_owner_id, l_use_acl_flag, l_contract_type, l_status_code, l_sign_type;
561     CLOSE contract_csr;
562 
563     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
564       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
565         'Values from contract_csr: l_org_id = ' || l_org_id || ', l_owner_id = ' || l_owner_id || ',l_use_acl_flag = ' || l_use_acl_flag);
566       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
567         'Values from contract_csr: l_contract_type = ' || l_contract_type || ', l_status_code = ' || l_status_code || ',l_sign_type = ' || l_sign_type);
568       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
569         'Values : FND_GLOBAL.user_id() = ' || FND_GLOBAL.user_id() || ', FND_GLOBAL.user_name() = ' || FND_GLOBAL.user_name());
570     END IF;
571 
572     x_return_status := FND_API.G_RET_STS_SUCCESS;
573     x_has_access := FND_API.G_FALSE;
574     l_user_name := FND_GLOBAL.user_name();
575     l_user_id := FND_GLOBAL.user_id();
576 
577     -- Multi-Org Initialization
578     MO_GLOBAL.init(G_APP_NAME);
579 
580     --  Call multi-org API to check access to contract's organization by current user
581     l_result := MO_GLOBAL.check_access(p_org_id => l_org_id);
582 
583     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
584       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
585         'Values after calling MOAC API l_result = ' || l_result);
586     END IF;
587 
588     IF (l_result = 'Y') THEN -- if the currenct user has org access of the contract in which it is created
589 	     ---for pending approval documents, need to check if user falls in the list of approvers, then give them access to view/update contract details
590 	   	IF (l_status_code = 'PENDING_APPROVAL') THEN
591           	IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
592             		FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name, 'checking whether user is present in approvers list');
593          		END IF;
594 
595           	ame_api2.getallapprovers1(
596       	         applicationIdIn   => G_APPLICATION_ID,
597  	              transactionTypeIn => l_transaction_type,
598  	              transactionIdIn   => fnd_number.number_to_canonical(p_contract_id),
599  	              approvalProcessCompleteYNOut => l_process_complete_yn,
600  	              approversOut      => l_approversOut,
601  	              itemIndexesOut    => l_item_indexes,
602  	              itemClassesOut    => l_item_classes,
603  	              itemIdsOut        => l_item_ids,
604  	              itemSourcesOut    => l_item_sources);
605 
606          		FOR i IN 1 .. l_approversOut.count
607 			LOOP
608             		IF l_approversOut(i).name = l_user_name THEN
609                 	     x_has_access := FND_API.G_TRUE;
610 
611 				     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
612 				          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, '200:Approver is the current user. so user have access.');
613         					FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name, '200:x_has_access is: ' || x_has_access);
614         					FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name, '200:x_return_status is: ' || x_return_status);
615 				          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, '200:Leaving OKC_REP_UTIL_PVT.check_contract_access');
616     					END IF;
617 
618 					RETURN;
619             		END IF;
620           	END LOOP;
621 		END IF;  --l_status_code = 'PENDING_APPROVAL'
622 
623 	     ---for pending signature documents, need to check if user falls in the list of igners, then give them access to view/update contract details
624 	   	IF (l_status_code = 'PENDING_SIGNATURE' and l_sign_type = 'E') THEN
625           	IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
626             		FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name, 'checking whether user is present in signers list');
627          		END IF;
628 
629          		FOR REC IN contract_signers_csr(p_contract_id)
630 			LOOP
631             		IF (REC.user_id = l_user_id) THEN
632                 	     x_has_access := FND_API.G_TRUE;
633 
634 				     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
635 				          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, '210:Signer is the current user. so user have access.');
636         					FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name, '200:x_has_access is: ' || x_has_access);
637         					FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name, '200:x_return_status is: ' || x_return_status);
638 				          FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name, '200:Leaving OKC_REP_UTIL_PVT.check_contract_access');
639     					END IF;
640 
641 					RETURN;
642             		END IF;
643           	END LOOP;
644 		END IF;  --l_status_code = 'PENDING_SIGNATURE'
645     END IF; --l_result ='Y'
646 
647     IF ( p_function_name = G_UPDATE_ACCESS_LEVEL AND NOT( FND_FUNCTION.TEST(G_FUNC_OKC_REP_ADMINISTRATOR,'Y') OR FND_FUNCTION.TEST(G_FUNC_OKC_REP_USER_FUNC,'Y') ) ) THEN
648 
649       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
650         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
651           'returning FALSE, queried for UPDATE access, not an Admin, not a User, must be a Viewer');
652       END IF;
653 
654       x_return_status := FND_API.G_RET_STS_SUCCESS;
655       x_has_access := FND_API.G_FALSE;
656       RETURN;
657     END IF;
658 
659     IF (l_result = 'Y') THEN
660 
661       --  Check for allowed intents
662       OPEN  intents_csr(l_contract_type);
663       FETCH intents_csr INTO l_result;
664 
665       IF (intents_csr%FOUND) THEN
666         l_result := 'Y';
667       ELSE
668         l_result := 'N';
669       END IF;
670 
671       CLOSE intents_csr;
672 
673       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
674         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
675           'Values after intents_csr fetch: l_result = ' || l_result);
676       END IF;
677 
678       IF (l_result = 'Y') THEN
679 
680         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
681           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
682             'Value from FND_GLOBAL.user_id() call: l_user_id = ' || l_user_id);
683         END IF;
684 
685         --   Check if the current user is owner of the contract
686         IF (l_user_id = l_owner_id) THEN
687           x_has_access := FND_API.G_TRUE;
688 
689           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
690             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
691               'IF (l_user_id = l_owner_id) THEN: TRUE: x_has_access = ' || x_has_access);
692           END IF;
693         ELSE
694 
695           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
696             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
697               'checking OKC_REP_ADMINISTRATOR function: ' || G_FUNC_OKC_REP_ADMINISTRATOR);
698           END IF;
699 
700           IF (FND_FUNCTION.TEST(G_FUNC_OKC_REP_ADMINISTRATOR,'Y')) THEN
701 
702             x_has_access := FND_API.G_TRUE;
703 
704             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
705               FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
706                 'IF (FND_FUNCTION.TEST(G_FUNC_OKC_REP_ADMINISTRATOR,''Y'')) THEN: TRUE: x_has_access = ' || x_has_access);
707             END IF;
708           ELSE
709 
710             -- Check if Use ACL flag is enabled for the current contract
711             IF (l_use_acl_flag = 'Y') THEN
712 
713               IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
714                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
715                   'IF (l_use_acl_flag = ''Y'') THEN: TRUE: x_has_access = ' || x_has_access);
716               END IF;
717 
718               -- Get current user's resource_id
719               OPEN cur_user_jtf_resource_csr;
720               FETCH cur_user_jtf_resource_csr INTO l_resource_id;
721               CLOSE cur_user_jtf_resource_csr;
722 
723               -- Get grantee key of the current resource
724               l_grantee_key := JTF_RS_WF_INTEGRATION_PUB.get_wf_role(l_resource_id);
725 
726               -- Get greantee orig system for the current grantee key
727               wf_directory.GetRoleOrigSysInfo(Role => l_grantee_key,
728                                               Orig_System => l_grantee_orig_system,
729                                               Orig_System_Id => l_grantee_orig_system_id);
730 
731               -- Check access of the current user in grants schema
732               OPEN  grants_csr(p_contract_id, p_contract_id, l_grantee_key, l_grantee_orig_system);
733               FETCH grants_csr INTO l_result;
734 
735               IF (grants_csr%FOUND) THEN
736                 x_has_access := FND_API.G_TRUE;
737 
738                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
739                   FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
740                     'IF (grants_csr%FOUND) THEN: TRUE: x_has_access = ' || x_has_access);
741                 END IF;
742               ELSE
743                 x_has_access := FND_API.G_FALSE;
744 
745                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
746                   FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
747                     'IF (grants_csr%FOUND) THEN: FALSE: x_has_access = ' || x_has_access);
748                 END IF;
749               END IF;
750 
751               CLOSE grants_csr;
752             ELSE
753               x_has_access := FND_API.G_FALSE;
754 
755               IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
756                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
757                   'IF (l_use_acl_flag = ''Y'') THEN: FALSE: x_has_access = ' || x_has_access);
758               END IF;
759             END IF; -- End of Use ACL flag check
760 
761           END IF; -- End of FND_FUNCTION.TEST() check
762 
763         END IF; -- End of owner id check
764 
765       END IF; -- End of intent profile check
766 
767     END IF;  -- End of MO_GLOBAL check
768 
769     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
770         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,
771                      '110: Leaving OKC_REP_UTIL_PVT.check_contract_access');
772         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
773                 '111: x_has_access is: ' || x_has_access);
774         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
775                 '112: x_return_status is: ' || x_return_status);
776     END IF;
777 
778     EXCEPTION
779       WHEN FND_API.G_EXC_ERROR THEN
780         --close cursors
781         IF (intents_csr%ISOPEN) THEN
782           CLOSE intents_csr ;
783         END IF;
784         IF (contract_csr%ISOPEN) THEN
785           CLOSE contract_csr ;
786         END IF;
787         IF (grants_csr%ISOPEN) THEN
788           CLOSE grants_csr ;
789         END IF;
790 
791         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
792           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
793                  g_module || l_api_name || '.exception',
794                  '115: Leaving check_contract_access:FND_API.G_EXC_ERROR Exception');
795         END IF;
796         x_return_status := FND_API.G_RET_STS_ERROR;
797         FND_MSG_PUB.Count_And_Get(
798         p_count =>  x_msg_count,
799         p_data  =>  x_msg_data
800         );
801 
802       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
803         --close cursors
804         IF (intents_csr%ISOPEN) THEN
805           CLOSE intents_csr ;
806         END IF;
807         IF (contract_csr%ISOPEN) THEN
808           CLOSE contract_csr ;
809         END IF;
810         IF (grants_csr%ISOPEN) THEN
811           CLOSE grants_csr ;
812         END IF;
813 
814         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
815           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
816                  g_module || l_api_name || '.exception',
817                  '116:Leaving check_contract_access:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
818         END IF;
819         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
820         FND_MSG_PUB.Count_And_Get(
821         p_count =>  x_msg_count,
822         p_data  =>  x_msg_data
823         );
824 
825       WHEN OTHERS THEN
826         --close cursors
827         IF (intents_csr%ISOPEN) THEN
828           CLOSE intents_csr ;
829         END IF;
830         IF (contract_csr%ISOPEN) THEN
831           CLOSE contract_csr ;
832         END IF;
833         IF (grants_csr%ISOPEN) THEN
834           CLOSE grants_csr ;
835         END IF;
836 
837         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
838           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
839                  g_module || l_api_name || '.exception',
840                  '117: Leaving check_contract_access because of EXCEPTION: ' || sqlerrm);
841         END IF;
842         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
843                             p_msg_name     => G_UNEXPECTED_ERROR,
844                             p_token1       => G_SQLCODE_TOKEN,
845                             p_token1_value => sqlcode,
846                             p_token2       => G_SQLERRM_TOKEN,
847                             p_token2_value => sqlerrm);
848         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
849         FND_MSG_PUB.Count_And_Get(
850         p_count =>  x_msg_count,
851         p_data  =>  x_msg_data
852         );
853   END check_contract_access;
854 
855 
856 -- Start of comments
857   --API name      : Function has_contract_access_external
858   --Type          : Private.
859   --Function      : Checks access to a contract by the current user for external contracts.
860   --Pre-reqs      : None.
861   --Parameters    :
862   --IN            : p_contract_id         IN NUMBER       Required
863   --                   Id of the contract that is being checked
864   --              : p_contract_type       IN VARCHAR2       Required
865   --                   Contract type for contract being chacked
866   --OUT           : Return Y if the current user has access to the contracts, else returns N
867   -- End of comments
868   FUNCTION has_contract_access_external(
869       p_contract_id     IN  NUMBER,
870       p_contract_type   IN  VARCHAR2
871     ) RETURN VARCHAR2
872   IS
873     l_api_name                     VARCHAR2(30);
874     l_has_access                   VARCHAR2(1);
875     l_return_status                VARCHAR2(1);
876     l_msg_count                    NUMBER;
877     l_msg_data                     VARCHAR2(2000);
878 
879   BEGIN
880 
881     l_api_name                     := 'check_contract_access_external';
882     l_has_access                   := 'N';
883 
884     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
885         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
886                 'Entered Function OKC_REP_UTIL_PVT.check_contract_access');
887         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
888                 'Contract Id is: ' || p_contract_id);
889         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
890                 'Contract Type is: ' || p_contract_type);
891     END IF;
892     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
893         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
894                 'Calling OKC_REP_UTIL_PVT.has_contract_access');
895     END IF;
896     --- Call check_contract_access procedure.
897     check_contract_access_external(
898         p_api_version     => 1.0,
899         p_init_msg_list       => FND_API.G_FALSE,
900         p_contract_id         => p_contract_id,
901         p_contract_type       => p_contract_type,
902         x_has_access          => l_has_access,
903         x_msg_data            => l_msg_data,
904         x_msg_count           => l_msg_count,
905         x_return_status       => l_return_status
906     );
907     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
908         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
909                 'OKC_REP_UTIL_PVT.check_contract_access return status is: '
910           || l_return_status);
911         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
912                 'OKC_REP_UTIL_PVT.check_contract_access returns has_access as : '
913           || l_has_access);
914         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
915                 'Leaving Function has_contract_access');
916     END IF;
917     RETURN l_has_access ;
918 
919   EXCEPTION
920     WHEN OTHERS THEN
921       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
922         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
923                 'Leaving Function has_contract_access because of EXCEPTION: '||sqlerrm);
924       END IF;
925       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
926                         p_msg_name     => G_UNEXPECTED_ERROR,
927                         p_token1       => G_SQLCODE_TOKEN,
928                         p_token1_value => sqlcode,
929                         p_token2       => G_SQLERRM_TOKEN,
930                         p_token2_value => sqlerrm);
931       RETURN l_has_access ;
932   END has_contract_access_external;
933 
934 
935 
936 
937 -- Start of comments
938   --API name      : Function check_contract_access
939   --Type          : Private.
940   --Function      : Checks access to a contract by the current user.
941   --Pre-reqs      : None.
942   --Parameters    :
943   --IN            : p_api_version         IN NUMBER       Required
944   --              : p_init_msg_list       IN VARCHAR2     Optional
945   --                   Default = FND_API.G_FALSE
946   --              : p_contract_id         IN NUMBER       Required
947   --                   Id of the contract whose access to be checked
948   --              : p_function_name       IN VARCHAR2       Required
949   --                   Name of the function whose access to be checked. Possible values OKC_REP_SELECT, OKC_REP_UPDATE
950   --OUT           : Return Y if the current user has access to the contracts, else returns N
951   -- End of comments
952   FUNCTION has_contract_access(
953       p_contract_id     IN  NUMBER,
954       p_function_name   IN  VARCHAR2
955     ) RETURN VARCHAR2
956   IS
957     l_api_name                     VARCHAR2(30);
958     l_has_access                   VARCHAR2(1);
959     l_return_status                VARCHAR2(1);
960     l_msg_count                    NUMBER;
961     l_msg_data                     VARCHAR2(2000);
962 
963   BEGIN
964 
965     l_api_name                     := 'has_contract_access';
966     l_has_access                   := 'N';
967 
968     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
969         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
970                 'Entered Function OKC_REP_UTIL_PVT.check_contract_access');
971         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
972                 'Contract Id is: ' || p_contract_id);
973         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
974                 'Access Function Name is: ' || p_function_name);
975     END IF;
976     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
977         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
978                 'Calling OKC_REP_UTIL_PVT.has_contract_access');
979     END IF;
980     --- Call check_contract_access procedure.
981     check_contract_access(
982         p_api_version     => 1.0,
983         p_init_msg_list       => FND_API.G_FALSE,
984         p_contract_id         => p_contract_id,
985         p_function_name       => p_function_name,
986         x_has_access          => l_has_access,
987         x_msg_data            => l_msg_data,
988         x_msg_count           => l_msg_count,
989         x_return_status       => l_return_status
990     );
991     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
992         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
993                 'OKC_REP_UTIL_PVT.check_contract_access return status is: '
994           || l_return_status);
995         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
996                 'OKC_REP_UTIL_PVT.check_contract_access returns has_access as : '
997           || l_has_access);
998         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
999                 'Leaving Function has_contract_access');
1000     END IF;
1001     RETURN l_has_access ;
1002 
1003   EXCEPTION
1004     WHEN OTHERS THEN
1005       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1006         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
1007                 'Leaving Function has_contract_access because of EXCEPTION: '||sqlerrm);
1008       END IF;
1009       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1010                         p_msg_name     => G_UNEXPECTED_ERROR,
1011                         p_token1       => G_SQLCODE_TOKEN,
1012                         p_token1_value => sqlcode,
1013                         p_token2       => G_SQLERRM_TOKEN,
1014                         p_token2_value => sqlerrm);
1015       RETURN l_has_access ;
1016   END has_contract_access;
1017 
1018 
1019 
1020   /**
1021    * This procedure changes status of a contract and logs the user action that
1022    * caused this into database tables OKC_REP_CON_STATUS_HIST.
1023    * @param IN p_contract_id  Id of the contract whose status to be changed
1024    * @param IN p_contract_version Version number of the contract whose status to be changed
1025    * @param IN p_status_code New status code to be set on the contract
1026    * @param IN p_user_id Id of the user who caused this change
1027    * @param IN p_note User entered notes in the notification while approving or rejecting the contract
1028    */
1029   PROCEDURE change_contract_status(
1030       p_api_version         IN  NUMBER,
1031       p_init_msg_list   IN VARCHAR2,
1032       p_contract_id         IN NUMBER,
1033       p_contract_version    IN NUMBER,
1034       p_status_code         IN VARCHAR2,
1035       p_user_id             IN NUMBER:=NULL,
1036       p_note                IN VARCHAR2:=NULL,
1037     x_msg_data            OUT NOCOPY  VARCHAR2,
1038       x_msg_count           OUT NOCOPY  NUMBER,
1039       x_return_status       OUT NOCOPY  VARCHAR2)  IS
1040 
1041   l_api_name VARCHAR2(30);
1042   l_user_id  FND_USER.USER_ID%type;
1043 
1044   BEGIN
1045 
1046     l_api_name := 'change_contract_status';
1047 
1048     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1049       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1050                 '200: Entered OKC_REP_UTIL_PVT.change_contract_status');
1051         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1052                 '201: Contract Id is: ' || to_char(p_contract_id));
1053         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1054                 '202: Contract version is: ' || p_contract_version);
1055         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1056                 '203: Status code is: ' || p_status_code);
1057         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1058                 '204: USer Id is: ' || to_char(p_user_id));
1059         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1060                 '205: Note is: ' || p_note);
1061     END IF;
1062 
1063     -- Initialize message list if p_init_msg_list is set to TRUE.
1064     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1065       FND_MSG_PUB.initialize;
1066     END IF;
1067 
1068     x_return_status := FND_API.G_RET_STS_SUCCESS;
1069 
1070 
1071     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1072           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1073         g_module || l_api_name || '.begin',
1074         'Before updating Contract Status');
1075     END IF;
1076 
1077     -- Update the contract status
1078     UPDATE  okc_rep_contracts_all
1079     SET     contract_status_code = p_status_code,
1080             contract_last_update_date = sysdate,
1081             contract_last_updated_by = FND_GLOBAL.user_id()
1082     WHERE   contract_id = p_contract_id
1083     AND     contract_version_num = p_contract_version;
1084 
1085     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1086           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1087         g_module || l_api_name,
1088         'After updating Contract Status');
1089     END IF;
1090 
1091     -- Log this status change into OKC_REP_CON_STATUS_HIST table
1092     IF (p_user_id IS NULL) THEN
1093       l_user_id := FND_GLOBAL.user_id();
1094 
1095       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1096           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1097         g_module || l_api_name || '.begin',
1098         'Current user id' || l_user_id);
1099       END IF;
1100 
1101     ELSE
1102       l_user_id := p_user_id;
1103     END IF;  -- End of p_user_id IS NULL
1104 
1105     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1106           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1107         g_module || l_api_name,
1108         'Before inserting a row into OKC_REP_CON_STATUS_HIST');
1109     END IF;
1110 
1111     -- Insert row into OKC_REP_CON_STATUS_HIST
1112     INSERT INTO OKC_REP_CON_STATUS_HIST(
1113         contract_id,
1114         contract_version_num,
1115         status_code,
1116         status_change_date,
1117         changed_by_user_id,
1118         object_version_number,
1119         created_by,
1120         creation_date,
1121         last_updated_by,
1122         last_update_date,
1123         last_update_login)
1124     VALUES(
1125         p_contract_id,
1126         p_contract_version,
1127         p_status_code,
1128         sysdate,
1129         l_user_id,
1130         1,
1131         l_user_id,
1132         sysdate,
1133         l_user_id,
1134         sysdate,
1135         l_user_id);
1136 
1137     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1138           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1139         g_module || l_api_name,
1140         'After inserting a row into OKC_REP_CON_STATUS_HIST');
1141     END IF;
1142     EXCEPTION
1143       WHEN FND_API.G_EXC_ERROR THEN
1144         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1145           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1146                  g_module || l_api_name || '.exception',
1147                  'Leaving change_contract_status:FND_API.G_EXC_ERROR Exception');
1148         END IF;
1149         x_return_status := FND_API.G_RET_STS_ERROR;
1150         FND_MSG_PUB.Count_And_Get(
1151         p_count =>  x_msg_count,
1152         p_data  =>  x_msg_data
1153         );
1154       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1155         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1156           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1157                  g_module || l_api_name || '.exception',
1158                  'Leaving change_contract_status: FND_API.G_EXC_UNEXPECTED_ERROR Exception');
1159         END IF;
1160         x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
1161         FND_MSG_PUB.Count_And_Get(
1162         p_count =>  x_msg_count,
1163         p_data  =>  x_msg_data
1164         );
1165       WHEN OTHERS THEN
1166         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1167           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1168                  g_module || l_api_name || '.exception',
1169                  'Leaving change_contract_status because of EXCEPTION: ' || sqlerrm);
1170         END IF;
1171         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1172                             p_msg_name     => G_UNEXPECTED_ERROR,
1173                             p_token1       => G_SQLCODE_TOKEN,
1174                             p_token1_value => sqlcode,
1175                             p_token2       => G_SQLERRM_TOKEN,
1176                             p_token2_value => sqlerrm);
1177         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1178         FND_MSG_PUB.Count_And_Get(
1179         p_count =>  x_msg_count,
1180         p_data  =>  x_msg_data
1181         );
1182   END change_contract_status;
1183 
1184 
1185 
1186   -- Start of comments
1187   --API name      : add_approval_hist_record
1188   --Type          : Private.
1189   --Function      : Inserts a record into table OKC_REP_CON_APPROVALS.
1190   --Pre-reqs      : None.
1191   --Parameters    :
1192   --IN            : p_api_version         IN NUMBER       Required
1193   --              : p_init_msg_list       IN VARCHAR2     Optional
1194   --                   Default = FND_API.G_FALSE
1195   --              : p_contract_id         IN NUMBER       Required
1196   --                   Contract ID of the approval history record
1197   --              : p_contract_version    IN VARCHAR2       Required
1198   --                   Contract version of the approval history record
1199   --              : p_action_code    IN OUT VARCHAR2       Optional
1200   --                   New action code to be set on the contract
1201   --              : p_user_id    IN VARCHAR2       Optional
1202   --                   Id of the user who caused this change
1203   --              : p_note    IN OUT VARCHAR2       Optional
1204   --                   User entered notes in the notification while approving or rejecting the contract
1205  --              : p_forward_user_id IN NUMBER Optional
1206  --		 	 ID of the user to whom the notification is forwarded/Delegated
1207   --OUT           : x_return_status       OUT  VARCHAR2(1)
1208   --              : x_msg_count           OUT  NUMBER
1209   --              : x_msg_data            OUT  VARCHAR2(2000)
1210   -- End of comments
1211   PROCEDURE add_approval_hist_record(
1212       p_api_version         IN  NUMBER,
1213       p_init_msg_list   IN VARCHAR2,
1214       p_contract_id         IN NUMBER,
1215       p_contract_version    IN NUMBER,
1216       p_action_code         IN VARCHAR2,
1217       p_user_id             IN NUMBER:=NULL,
1218       p_note                IN VARCHAR2:=NULL,
1219     x_msg_data            OUT NOCOPY  VARCHAR2,
1220       x_msg_count           OUT NOCOPY  NUMBER,
1221       x_return_status       OUT NOCOPY  VARCHAR2,
1222       p_forward_user_id          IN NUMBER:=NULL)  IS
1223 
1224   l_api_name VARCHAR2(30);
1225   l_user_id  FND_USER.USER_ID%type;
1226 
1227   BEGIN
1228 
1229     l_api_name := 'add_approval_hist_record';
1230 
1231     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1232       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1233                 '300: Entered OKC_REP_UTIL_PVT.add_approval_hist_record');
1234         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1235                 '301: Contract Id is: ' || to_char(p_contract_id));
1236         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1237                 '302: Contract version is: ' || p_contract_version);
1238         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1239                 '303: Action code is: ' || p_action_code);
1240         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1241                 '304: USer Id is: ' || to_char(p_user_id));
1242         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1243                 '305: Note is: ' || p_note);
1244         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1245                 '306: Forwarded User Id is: ' || to_char(p_forward_user_id));
1246     END IF;
1247     -- Initialize message list if p_init_msg_list is set to TRUE.
1248     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1249       FND_MSG_PUB.initialize;
1250     END IF;
1251 
1252     x_return_status := FND_API.G_RET_STS_SUCCESS;
1253 
1254     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1255           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1256         g_module || l_api_name,
1257         'Before inserting a row into OKC_REP_CON_APPROVALS');
1258     END IF;
1259 
1260      -- Insert a row into OKC_REP_CON_APPROVALS
1261       INSERT INTO OKC_REP_CON_APPROVALS(
1262           contract_id,
1263           contract_version_num,
1264           action_code,
1265           user_id,
1266           action_date,
1267           notes,
1268           object_version_number,
1269           created_by,
1270           creation_date,
1271           last_updated_by,
1272           last_update_date,
1273           last_update_login,
1274           forward_user_id)
1275       VALUES(
1276           p_contract_id,
1277           p_contract_version,
1278           p_action_code,
1279           p_user_id,
1280           sysdate,
1281           p_note,
1282           1,
1283           p_user_id,
1284           sysdate,
1285           p_user_id,
1286           sysdate,
1287           p_user_id,
1288           p_forward_user_id);
1289 
1290     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1291           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1292         g_module || l_api_name,
1293         'After inserting a row into OKC_REP_CON_APPROVALS');
1294     END IF;
1295     EXCEPTION
1296       WHEN FND_API.G_EXC_ERROR THEN
1297         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1298           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1299                  g_module || l_api_name || '.exception',
1300                  'Leaving add_approval_hist_record:FND_API.G_EXC_ERROR Exception');
1301         END IF;
1302         x_return_status := FND_API.G_RET_STS_ERROR;
1303         FND_MSG_PUB.Count_And_Get(
1304         p_count =>  x_msg_count,
1305         p_data  =>  x_msg_data
1306         );
1307       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1308         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1309           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1310                  g_module || l_api_name || '.exception',
1311                  'Leaving add_approval_hist_record: FND_API.G_EXC_UNEXPECTED_ERROR Exception');
1312         END IF;
1313         x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
1314         FND_MSG_PUB.Count_And_Get(
1315         p_count =>  x_msg_count,
1316         p_data  =>  x_msg_data
1317         );
1318       WHEN OTHERS THEN
1319         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1320           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1321                  g_module || l_api_name || '.exception',
1322                  'Leaving add_approval_hist_record because of EXCEPTION: ' || sqlerrm);
1323         END IF;
1324         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1325                             p_msg_name     => G_UNEXPECTED_ERROR,
1326                             p_token1       => G_SQLCODE_TOKEN,
1327                             p_token1_value => sqlcode,
1328                             p_token2       => G_SQLERRM_TOKEN,
1329                             p_token2_value => sqlerrm);
1330         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1331         FND_MSG_PUB.Count_And_Get(
1332         p_count =>  x_msg_count,
1333         p_data  =>  x_msg_data
1334         );
1335   END add_approval_hist_record;
1336 
1337 
1338   -- Start of comments
1339  --API name      : add_signature_hist_record
1340  --Type          : Private.
1341  --Function      : Inserts a record into table OKC_REP_SIGNATURE_DETAILS.
1342  --Pre-reqs      : None.
1343  --Parameters    :
1344  --IN            : p_api_version         IN NUMBER       Required
1345  --              : p_init_msg_list       IN VARCHAR2     Optional
1346  --                   Default = FND_API.G_FALSE
1347  --              : p_contract_id         IN NUMBER       Required
1348  --                   Contract ID of the approval history record
1349  --              : p_contract_version    IN VARCHAR2       Required
1350  --                   Contract version of the approval history record
1351  --              : p_action_code    IN OUT VARCHAR2       Optional
1352  --                   New action code to be set on the contract
1353  --              : p_user_id    IN VARCHAR2       Optional
1354  --                   Id of the user who caused this change
1355  --              : p_note    IN OUT VARCHAR2       Optional
1356  --                   User entered notes in the notification while approving or rejecting the contract
1357  --              : p_forward_user_id IN NUMBER Optional
1358  --		 : ID of the user to whom the notification is forwarded/Delegated
1359  --OUT           : x_return_status       OUT  VARCHAR2(1)
1360  --              : x_msg_count           OUT  NUMBER
1361  --              : x_msg_data            OUT  VARCHAR2(2000)
1362  -- End of comments
1363 
1364   PROCEDURE add_signature_hist_record(
1365       p_api_version         IN  NUMBER,
1366       p_init_msg_list   IN VARCHAR2,
1367       p_contract_id         IN NUMBER,
1368       p_sequence_id IN NUMBER,
1369       p_contact_id        IN number ,
1370       p_party_id           IN NUMBER ,
1371       p_party_role_code    IN varchar2,
1372       p_contract_version    IN NUMBER,
1373       p_action_code         IN VARCHAR2,
1374       p_user_id             IN NUMBER:=NULL,
1375       p_note                IN VARCHAR2:=NULL,
1376       x_msg_data            OUT NOCOPY  VARCHAR2,
1377       x_msg_count           OUT NOCOPY  NUMBER,
1378       x_return_status       OUT NOCOPY  VARCHAR2,
1379       p_forward_user_id          IN NUMBER:=NULL)  IS
1380 
1381   l_api_name VARCHAR2(30);
1382   l_user_id  FND_USER.USER_ID%type;
1383 
1384   BEGIN
1385 
1386     l_api_name := 'add_signature_hist_record';
1387 
1388     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1389       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1390                 '300: Entered OKC_REP_UTIL_PVT.add_signature_hist_record');
1391         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1392                 '301: Contract Id is: ' || to_char(p_contract_id));
1393         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1394                 '302: Contract version is: ' || p_contract_version);
1395         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1396                 '303: Action code is: ' || p_action_code);
1397         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1398                 '304: USer Id is: ' || to_char(p_user_id));
1399         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1400                 '305: Note is: ' || p_note);
1401         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1402                 '306: Forwarded User Id is: ' || to_char(p_forward_user_id));
1403     END IF;
1404     -- Initialize message list if p_init_msg_list is set to TRUE.
1405     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1406       FND_MSG_PUB.initialize;
1407     END IF;
1408 
1409     x_return_status := FND_API.G_RET_STS_SUCCESS;
1410 
1411     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1412           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1413         g_module || l_api_name,
1414         'Before inserting a row into OKC_REP_SIGNATURE_DETAILS');
1415     END IF;
1416 
1417      -- Insert a row into okc_rep_signature_details
1418       INSERT INTO OKC_REP_SIGNATURE_DETAILS(
1419           contract_id,
1420           sequence_level,
1421           contact_id,
1422           party_id,
1423           party_role_code,
1424           contract_version_num,
1425           action_code,
1426           user_id,
1427           SIGNED_DATE,
1428           notes,
1429           object_version_number,
1430           source,
1431           created_by,
1432           creation_date,
1433           last_updated_by,
1434           last_update_date,
1435           last_update_login,
1436           forward_user_id)
1437       VALUES(
1438           p_contract_id,
1439           p_sequence_id,
1440           p_contact_id,
1441           p_party_id,
1442           p_party_role_code,
1443           p_contract_version,
1444           p_action_code,
1445           p_user_id,
1446           sysdate,
1447           p_note,
1448           1,
1449           'W',
1450           p_user_id,
1451           sysdate,
1452           p_user_id,
1453           sysdate,
1454           p_user_id,
1455           p_forward_user_id);
1456 
1457     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1458           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,
1459         g_module || l_api_name,
1460         'After inserting a row into OKC_REP_SIGNATURE_DETAILS');
1461     END IF;
1462     EXCEPTION
1463       WHEN FND_API.G_EXC_ERROR THEN
1464         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1465           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1466                  g_module || l_api_name || '.exception',
1467                  'Leaving add_signature_hist_record:FND_API.G_EXC_ERROR Exception');
1468         END IF;
1469         x_return_status := FND_API.G_RET_STS_ERROR;
1470         FND_MSG_PUB.Count_And_Get(
1471         p_count =>  x_msg_count,
1472         p_data  =>  x_msg_data
1473         );
1474       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1475         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1476           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1477                  g_module || l_api_name || '.exception',
1478                  'Leaving add_signature_hist_record: FND_API.G_EXC_UNEXPECTED_ERROR Exception');
1479         END IF;
1480         x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
1481         FND_MSG_PUB.Count_And_Get(
1482         p_count =>  x_msg_count,
1483         p_data  =>  x_msg_data
1484         );
1485       WHEN OTHERS THEN
1486         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1487           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
1488                  g_module || l_api_name || '.exception',
1489                  'Leaving add_signature_hist_record because of EXCEPTION: ' || sqlerrm);
1490         END IF;
1491         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1492                             p_msg_name     => G_UNEXPECTED_ERROR,
1493                             p_token1       => G_SQLCODE_TOKEN,
1494                             p_token1_value => sqlcode,
1495                             p_token2       => G_SQLERRM_TOKEN,
1496                             p_token2_value => sqlerrm);
1497         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1498         FND_MSG_PUB.Count_And_Get(
1499         p_count =>  x_msg_count,
1500         p_data  =>  x_msg_data
1501         );
1502   END add_signature_hist_record;
1503 
1504 
1505 
1506 
1507 
1508   -- Start of comments
1509   --API name      : validate_contract_party
1510   --Type          : Private.
1511   --Function      : Validates a contract party
1512   --Pre-reqs      : None.
1513   --Parameters    :
1514   --IN            : p_api_version         IN NUMBER       Required
1515   --              : p_init_msg_list       IN VARCHAR2     Optional
1516   --                   Default = FND_API.G_FALSE
1517   --              : p_contract_id         IN NUMBER       Required
1518   --                   Contract ID of the party to be validated
1519   --              : p_intent    IN VARCHAR2       Required
1520   --                   Intent of the contract
1521   --              : p_party_role_code    IN OUT VARCHAR2       Optional
1522   --                   Role code of the contract party to be validated
1523   --              : p_party_role_txt    IN VARCHAR2       Optional
1524   --                   Role name of the contract party to be validated
1525   --              : p_party_id    IN OUT NUMBER       Optional
1526   --                   Id of the contract party to be validated
1527   --              : p_party_name    IN VARCHAR2       Required
1528   --                   Name of the contract party to be validated
1529   --              : p_location_id    IN NUMBER       Optional
1530   --                   Id of the location of the contract party to be validated
1531   --              : p_mode    IN VARCHAR2       Required
1532   --                   Mode of the validation. Possible values 'IMPORT' or 'AUTHORING'
1533   --OUT           : x_valid_party_flag       OUT  VARCHAR2(1)
1534   --              : x_error_code          OUT  VARCHAR2(100)
1535   --                   Possible error codes are;
1536   --                     ROLE_NOT_EXIST - Party role doesn't exist (Import module)
1537   --                     INV_ROLE_INTENT - Party role and Contract intent combination is invalid (Import module)
1538   --                     PARTY_NOT_EXIST - Party doesn't exist (Import module)
1539   --                     INV_CUST_ACCT - Customer party doesn't have any customer accounts (Import module)
1540   --                     PARTY_NOT_UNIQUE - Party in not unique in the Contract (Import and Authoring modules)
1541   --                     INV_ROLE_PARTY - Role and Party combination is invalid (Authoring module)
1542   --                     INV_ROLE_LOCATION - Role and Party Location combination is invalid (Authoring module)
1543   --              : x_return_status       OUT  VARCHAR2(1)
1544   --              : x_msg_count           OUT  NUMBER
1545   --              : x_msg_data            OUT  VARCHAR2(2000)
1546   -- End of comments
1547 
1548   PROCEDURE validate_contract_party(
1549          p_api_version              IN NUMBER,
1550          p_init_msg_list            IN VARCHAR2,
1551          p_contract_id              IN NUMBER,
1552          p_intent                   IN VARCHAR2 DEFAULT NULL,
1553          p_party_role_code          IN OUT NOCOPY VARCHAR2,
1554          p_party_role_txt           IN VARCHAR2 DEFAULT NULL,
1555          p_party_id                 IN OUT NOCOPY NUMBER,
1556          p_party_name               IN VARCHAR2,
1557          p_location_id              IN NUMBER DEFAULT NULL,
1558          p_mode                     IN VARCHAR2,
1559          x_valid_party_flag         OUT NOCOPY VARCHAR2,
1560          x_error_code           OUT NOCOPY VARCHAR2,
1561          x_return_status            OUT NOCOPY VARCHAR2,
1562          x_msg_count                OUT NOCOPY NUMBER,
1563          x_msg_data                 OUT NOCOPY VARCHAR2)
1564   IS
1565   l_api_name VARCHAR2(30);
1566   l_api_version       CONSTANT NUMBER := 1.0;
1567   l_temp NUMBER;
1568   l_party_role_code2 VARCHAR2(30);
1569 
1570 
1571   CURSOR party_role_exist_csr IS
1572        SELECT  resp_party_code
1573        FROM    okc_resp_parties_tl
1574        WHERE   UPPER(name) = UPPER(p_party_role_txt)
1575        AND     language = USERENV('LANG')
1576        AND     document_type_class = 'REPOSITORY';
1577 
1578   CURSOR party_role_valid_csr IS
1579        SELECT  1
1580        FROM    okc_resp_parties_b
1581        WHERE   resp_party_code = p_party_role_code
1582        AND     intent = p_intent
1583        AND     document_type_class = 'REPOSITORY';
1584 
1585   CURSOR internal_party_exist_csr IS
1586        SELECT  organization_id
1587        FROM    hr_all_organization_units
1588        WHERE   UPPER(name) = UPPER(p_party_name);
1589 
1590   CURSOR tca_party_exist_csr IS
1591        SELECT  party_id
1592        FROM    hz_parties
1593        WHERE   UPPER(party_name) = UPPER(p_party_name)
1594 	AND     party_type IN ('ORGANIZATION', 'PERSON'); 	 /*--10334886: Added person party Type*/
1595 
1596   /*CURSOR vendor_exist_csr IS
1597        SELECT  vendor_id
1598        FROM    po_vendors
1599        WHERE   UPPER(vendor_name) = UPPER(p_party_name);*/
1600 
1601   CURSOR vendor_exist_csr IS
1602        SELECT  ap.vendor_id
1603        FROM    ap_suppliers ap,
1604             hz_parties hp
1605        WHERE ap.party_id = hp.party_id
1606     AND UPPER(hp.party_name) = UPPER(p_party_name);
1607 
1608   CURSOR rep_party_unique_csr(l_party_role_code2 varchar2) IS
1609        SELECT  1
1610        FROM    okc_rep_contract_parties
1611        WHERE   contract_id = p_contract_id
1612        AND     party_id = p_party_id
1613        AND     party_role_code IN (p_party_role_code, l_party_role_code2);
1614 
1615   CURSOR imp_party_unique_csr IS
1616        SELECT  1
1617        FROM    okc_rep_imp_parties_t
1618        WHERE   imp_contract_id = p_contract_id
1619        AND     party_id = p_party_id
1620        AND     party_role_code = p_party_role_code;
1621 
1622   CURSOR internal_party_and_role_csr IS
1623        SELECT  1
1624        FROM    hr_all_organization_units
1625        WHERE   UPPER(name) = UPPER(p_party_name)
1626        AND     organization_id = p_party_id;
1627 
1628   CURSOR tca_party_and_role_csr IS
1629        SELECT  1
1630        FROM    hz_parties
1631        WHERE   UPPER(party_name) = UPPER(p_party_name)
1632        AND     party_id = p_party_id;
1633 
1634   /*CURSOR vendor_and_role_csr IS
1635        SELECT  1
1636        FROM    po_vendors
1637        WHERE   UPPER(vendor_name) = UPPER(p_party_name)
1638        AND     vendor_id = p_party_id;  */
1639 
1640   CURSOR vendor_and_role_csr IS
1641        SELECT  1
1642        FROM    ap_suppliers ap,
1643                hz_parties hp
1644        WHERE   UPPER(ap.vendor_name) = UPPER(p_party_name)
1645        AND     hp.party_id = ap.party_id
1646        AND     ap.vendor_id = p_party_id;
1647 
1648   CURSOR tca_location_valid_csr IS
1649        SELECT  1
1650        FROM    hz_party_sites
1651        WHERE   party_id = p_party_id
1652        AND     party_site_id = p_location_id;
1653 
1654   CURSOR vendor_location_valid_csr IS
1655        SELECT  1
1656        FROM    po_vendor_sites_all
1657        WHERE   vendor_id = p_party_id
1658        AND     vendor_site_id = p_location_id;
1659 
1660   BEGIN
1661 
1662   l_api_name := 'validate_contract_party';
1663 
1664   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1665     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1666             'Entered OKC_REP_WF_PVT.validate_contract_party');
1667     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1668             'p_contract_id = ' || p_contract_id);
1669     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1670             'p_intent = ' || p_intent);
1671     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1672             'p_party_role_code = ' || p_party_role_code);
1673     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1674             'p_party_role_txt = ' || p_party_role_txt);
1675     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1676             'p_party_id = ' || p_party_id);
1677     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1678             'p_party_name = ' || p_party_name);
1679     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1680             'p_location_id = ' || p_location_id);
1681     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1682             'p_mode = ' || p_mode);
1683   END IF;
1684 
1685   -- Standard call to check for call compatibility.
1686   IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1687     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1688   END IF;
1689 
1690   -- Initialize message list if p_init_msg_list is set to TRUE.
1691   IF FND_API.to_Boolean( p_init_msg_list ) THEN
1692     FND_MSG_PUB.initialize;
1693   END IF;
1694 
1695   --  Initialize API return status to success
1696   x_return_status := FND_API.G_RET_STS_SUCCESS;
1697 
1698   x_valid_party_flag := 'Y';
1699 
1700   IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1701     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1702             'Validating Contract Party for ' || p_mode || ' module');
1703   END IF;
1704 
1705   IF(p_mode = G_P_MODE_IMPORT) THEN
1706 
1707     -- Check existence of the party role
1708     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1709       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1710               'Checking existence of the party role');
1711     END IF;
1712 
1713     OPEN  party_role_exist_csr;
1714     FETCH party_role_exist_csr  INTO  p_party_role_code;
1715 
1716     IF party_role_exist_csr%NOTFOUND THEN
1717       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1718         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1719            'Party role not found');
1720       END IF;
1721 
1722       CLOSE party_role_exist_csr;
1723 
1724       x_valid_party_flag := 'N';
1725       x_error_code := 'ROLE_NOT_EXIST';
1726 
1727       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1728         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1729                 'x_valid_party_flag: ' || x_valid_party_flag);
1730         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1731                 'x_error_code: ' || x_error_code);
1732       END IF;
1733 
1734       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1735                                 p_data  =>  x_msg_data);
1736 
1737       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1738         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1739                 'Leaving OKC_REP_WF_PVT.validate_contract_party');
1740       END IF;
1741 
1742       return;
1743     END IF;
1744 
1745     CLOSE party_role_exist_csr;
1746 
1747     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1748       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1749          'Party Role found with code ' || p_party_role_code);
1750     END IF;
1751 
1752 
1753     -- Check validity of the party role and contract intent combination
1754     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1755       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1756          'Checking validity of the party role and contract intent combination');
1757     END IF;
1758 
1759     OPEN  party_role_valid_csr;
1760     FETCH party_role_valid_csr INTO l_temp;
1761 
1762     IF party_role_valid_csr%NOTFOUND THEN
1763       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1764         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1765            'Party role and contract intent combination is invalid');
1766       END IF;
1767 
1768       CLOSE party_role_valid_csr;
1769 
1770       x_valid_party_flag := 'N';
1771       x_error_code := 'INV_ROLE_INTENT';
1772 
1773       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1774         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1775                 'x_valid_party_flag: ' || x_valid_party_flag);
1776         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1777                 'x_error_code: ' || x_error_code);
1778       END IF;
1779 
1780       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1781                                 p_data  =>  x_msg_data);
1782 
1783       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1784         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1785                 'Leaving OKC_REP_WF_PVT.validate_contract_party');
1786       END IF;
1787 
1788       return;
1789     END IF;
1790 
1791     CLOSE party_role_valid_csr;
1792 
1793     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1794       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1795          'Party role and contract intent combination is valid');
1796     END IF;
1797 
1798     -- Check existence of the party
1799     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1800       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1801          'Checking existence of the party');
1802     END IF;
1803 
1804     IF (p_party_role_code = 'INTERNAL_ORG') THEN
1805 
1806       OPEN  internal_party_exist_csr;
1807       FETCH internal_party_exist_csr INTO p_party_id;
1808 
1809       IF internal_party_exist_csr%NOTFOUND THEN
1810         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1811           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1812              'Party not found');
1813         END IF;
1814 
1815         CLOSE internal_party_exist_csr;
1816 
1817         x_valid_party_flag := 'N';
1818         x_error_code := 'PARTY_NOT_EXIST';
1819 
1820         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1821           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1822                   'x_valid_party_flag: ' || x_valid_party_flag);
1823           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1824                   'x_error_code: ' || x_error_code);
1825         END IF;
1826 
1827         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1828                                   p_data  =>  x_msg_data);
1829 
1830         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1831           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1832                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
1833         END IF;
1834 
1835         return;
1836       END IF;
1837 
1838       CLOSE internal_party_exist_csr;
1839 
1840     ELSIF (p_party_role_code = G_PARTY_ROLE_PARTNER OR
1841            p_party_role_code = G_PARTY_ROLE_CUSTOMER) THEN
1842 
1843       OPEN  tca_party_exist_csr;
1844       FETCH tca_party_exist_csr INTO p_party_id;
1845 
1846       IF tca_party_exist_csr%NOTFOUND THEN
1847         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1848           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1849              'Party not found');
1850         END IF;
1851 
1852         CLOSE tca_party_exist_csr;
1853 
1854         x_valid_party_flag := 'N';
1855         x_error_code := 'PARTY_NOT_EXIST';
1856 
1857         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1858           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1859                   'x_valid_party_flag: ' || x_valid_party_flag);
1860           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1861                   'x_error_code: ' || x_error_code);
1862         END IF;
1863 
1864         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1865                                   p_data  =>  x_msg_data);
1866 
1867         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1868           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1869                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
1870         END IF;
1871 
1872         return;
1873       END IF;
1874 
1875       CLOSE tca_party_exist_csr;
1876 
1877     ELSIF (p_party_role_code = G_PARTY_ROLE_SUPPLIER) THEN
1878 
1879       OPEN  vendor_exist_csr;
1880       FETCH vendor_exist_csr INTO p_party_id;
1881 
1882       IF vendor_exist_csr%NOTFOUND THEN
1883         CLOSE vendor_exist_csr;
1884 
1885         x_valid_party_flag := 'N';
1886         x_error_code := 'PARTY_NOT_EXIST';
1887 
1888         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1889           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1890                   'x_valid_party_flag: ' || x_valid_party_flag);
1891           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1892                   'x_error_code: ' || x_error_code);
1893         END IF;
1894 
1895         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1896                                   p_data  =>  x_msg_data);
1897 
1898         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1899           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1900                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
1901         END IF;
1902 
1903         return;
1904       END IF;
1905 
1906       CLOSE vendor_exist_csr;
1907 
1908     END IF;
1909 
1910     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1911       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1912          'Party found with id ' || p_party_id);
1913     END IF;
1914 
1915   END IF; -- End of p_mode = 'IMPORT'
1916 
1917 
1918   -- If p_mode = 'AUTHORING', then check uniqueness of the contract party in the repository table
1919   IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1920     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1921             'Checking uniqueness of the party in contract');
1922   END IF;
1923 
1924   IF (p_mode = G_P_MODE_AUTHORING) THEN
1925 
1926     IF (p_party_role_code = G_PARTY_ROLE_PARTNER OR
1927         p_party_role_code = G_PARTY_ROLE_CUSTOMER) THEN
1928       l_party_role_code2 := G_PARTY_ROLE_CUSTOMER;
1929     END IF;
1930 
1931     OPEN  rep_party_unique_csr(l_party_role_code2);
1932     FETCH rep_party_unique_csr INTO l_temp;
1933 
1934     IF (rep_party_unique_csr%FOUND) THEN
1935 
1936       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1937         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1938                 'Party already exist in the contract');
1939       END IF;
1940 
1941       CLOSE rep_party_unique_csr;
1942 
1943       x_valid_party_flag := 'N';
1944       x_error_code := 'PARTY_NOT_UNIQUE';
1945 
1946       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1947         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1948                 'x_valid_party_flag: ' || x_valid_party_flag);
1949         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1950                 'x_error_code: ' || x_error_code);
1951       END IF;
1952 
1953       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1954                                 p_data  =>  x_msg_data);
1955 
1956       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1957         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1958                 'Leaving OKC_REP_WF_PVT.validate_contract_party');
1959       END IF;
1960 
1961       return;
1962     END IF;
1963 
1964     CLOSE rep_party_unique_csr;
1965 
1966   END IF;
1967 
1968   -- If p_mode = 'IMPORT', then check uniqueness of the contract party in the import table
1969   IF (p_mode = G_P_MODE_IMPORT) THEN
1970 
1971     OPEN  imp_party_unique_csr;
1972     FETCH imp_party_unique_csr INTO p_party_id;
1973 
1974     IF imp_party_unique_csr%FOUND THEN
1975 
1976       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1977         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1978                 'Party already exist in the contract');
1979       END IF;
1980 
1981       CLOSE imp_party_unique_csr;
1982 
1983       x_valid_party_flag := 'N';
1984       x_error_code := 'PARTY_NOT_UNIQUE';
1985 
1986       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1987         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1988                 'x_valid_party_flag: ' || x_valid_party_flag);
1989         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
1990                 'x_error_code: ' || x_error_code);
1991       END IF;
1992 
1993       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
1994                                 p_data  =>  x_msg_data);
1995 
1996       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1997         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
1998                 'Leaving OKC_REP_WF_PVT.validate_contract_party');
1999       END IF;
2000 
2001       return;
2002     END IF;
2003 
2004     CLOSE imp_party_unique_csr;
2005 
2006   END IF;
2007 
2008   IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2009     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2010             'Party is unique in the contract');
2011   END IF;
2012 
2013   IF (p_mode = G_P_MODE_AUTHORING) THEN
2014 
2015     -- Check validity of party role and party combination
2016     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2017       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2018               'Checking validity of party role and party combination');
2019     END IF;
2020 
2021     IF (p_party_role_code = G_PARTY_ROLE_INTERNAL) THEN
2022 
2023       OPEN  internal_party_and_role_csr;
2024       FETCH internal_party_and_role_csr INTO l_temp;
2025 
2026       IF internal_party_and_role_csr%NOTFOUND THEN
2027 
2028         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2029           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2030             'Party with id' || p_party_id || ' and name ' || p_party_name || 'not found in table HR_ALL_ORGANIZATION_UNITS');
2031         END IF;
2032 
2033         CLOSE internal_party_and_role_csr;
2034 
2035         x_valid_party_flag := 'N';
2036         x_error_code := 'INV_ROLE_PARTY';
2037 
2038         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2039           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2040                   'x_valid_party_flag: ' || x_valid_party_flag);
2041           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2042                   'x_error_code: ' || x_error_code);
2043         END IF;
2044 
2045         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2046                                   p_data  =>  x_msg_data);
2047 
2048         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2049           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2050                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
2051         END IF;
2052 
2053         return;
2054       END IF;
2055 
2056       CLOSE internal_party_and_role_csr;
2057 
2058     ELSIF (p_party_role_code = G_PARTY_ROLE_PARTNER OR
2059            p_party_role_code = G_PARTY_ROLE_CUSTOMER) THEN
2060 
2061       OPEN  tca_party_and_role_csr;
2062       FETCH tca_party_and_role_csr INTO l_temp;
2063 
2064       IF tca_party_and_role_csr%NOTFOUND THEN
2065 
2066         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2067           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2068             'Party with id' || p_party_id || ' and name ' || p_party_name || 'not found in table HZ_PARTIES');
2069         END IF;
2070 
2071         CLOSE tca_party_and_role_csr;
2072 
2073         x_valid_party_flag := 'N';
2074         x_error_code := 'INV_ROLE_PARTY';
2075 
2076         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2077           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2078                   'x_valid_party_flag: ' || x_valid_party_flag);
2079           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2080                   'x_error_code: ' || x_error_code);
2081         END IF;
2082 
2083         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2084                                   p_data  =>  x_msg_data);
2085 
2086         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2087           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2088                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
2089         END IF;
2090 
2091         return;
2092       END IF;
2093 
2094       CLOSE tca_party_and_role_csr;
2095 
2096     ELSIF (p_party_role_code = G_PARTY_ROLE_SUPPLIER) THEN
2097 
2098       OPEN  vendor_and_role_csr;
2099       FETCH vendor_and_role_csr INTO l_temp;
2100 
2101       IF vendor_and_role_csr%NOTFOUND THEN
2102 
2103         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2104           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2105             'Party with id' || p_party_id || ' and name ' || p_party_name || 'not found in table PO_VENDORS');
2106         END IF;
2107 
2108         CLOSE vendor_and_role_csr;
2109 
2110         x_valid_party_flag := 'N';
2111         x_error_code := 'INV_ROLE_PARTY';
2112 
2113         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2114           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2115                   'x_valid_party_flag: ' || x_valid_party_flag);
2116           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2117                   'x_error_code: ' || x_error_code);
2118         END IF;
2119 
2120         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2121                                   p_data  =>  x_msg_data);
2122 
2123         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2124           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2125                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
2126         END IF;
2127 
2128         return;
2129       END IF;
2130 
2131       CLOSE vendor_and_role_csr;
2132 
2133     END IF;
2134 
2135     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2136       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2137               'Party role and party combination is valid');
2138     END IF;
2139 
2140     -- Check validity of party and location combination
2141     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2142           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2143              'Checking validity of party role and party address combination');
2144     END IF;
2145 
2146     -- Bug 4247146. Added null check for party location id as the Party
2147     -- Address/Site field in the Add party page became optional
2148     IF ((p_location_id IS NOT NULL) AND
2149         (p_party_role_code = G_PARTY_ROLE_PARTNER OR
2150          p_party_role_code = G_PARTY_ROLE_CUSTOMER)) THEN
2151 
2152       OPEN  tca_location_valid_csr;
2153       FETCH tca_location_valid_csr INTO l_temp;
2154 
2155       IF tca_location_valid_csr%NOTFOUND THEN
2156 
2157         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2158           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2159              'Party role and party address combination is invalid');
2160         END IF;
2161 
2162         CLOSE tca_location_valid_csr;
2163 
2164         x_valid_party_flag := 'N';
2165         x_error_code := 'INV_ROLE_LOCATION';
2166 
2167         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2168           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2169                   'x_valid_party_flag: ' || x_valid_party_flag);
2170           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2171                   'x_error_code: ' || x_error_code);
2172         END IF;
2173 
2174         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2175                                   p_data  =>  x_msg_data);
2176 
2177         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2178           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2179                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
2180         END IF;
2181 
2182         return;
2183       END IF;
2184 
2185       CLOSE tca_location_valid_csr;
2186 
2187     ELSIF (p_location_id IS NOT NULL AND
2188            p_party_role_code = G_PARTY_ROLE_SUPPLIER) THEN
2189 
2190       OPEN  vendor_location_valid_csr;
2191       FETCH vendor_location_valid_csr INTO l_temp;
2192 
2193       IF vendor_location_valid_csr%NOTFOUND THEN
2194 
2195         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2196           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2197              'Party role and party address combination is invalid');
2198         END IF;
2199 
2200         CLOSE vendor_location_valid_csr;
2201 
2202         x_valid_party_flag := 'N';
2203         x_error_code := 'INV_ROLE_LOCATION';
2204 
2205         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2206           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2207                   'x_valid_party_flag: ' || x_valid_party_flag);
2208           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2209                   'x_error_code: ' || x_error_code);
2210         END IF;
2211 
2212         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2213                                   p_data  =>  x_msg_data);
2214 
2215         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2216           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2217                   'Leaving OKC_REP_WF_PVT.validate_contract_party');
2218         END IF;
2219 
2220         return;
2221       END IF;
2222 
2223       CLOSE vendor_location_valid_csr;
2224 
2225     END IF;
2226 
2227     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2228       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2229          'Party role and party address combination is valid');
2230     END IF;
2231 
2232   END IF; -- End of p_mode = 'AUTHORING'
2233 
2234 
2235   EXCEPTION
2236 
2237     WHEN FND_API.G_EXC_ERROR THEN
2238 
2239       --close cursors
2240       IF (party_role_exist_csr%ISOPEN) THEN
2241         CLOSE party_role_exist_csr ;
2242       END IF;
2243       IF (party_role_valid_csr%ISOPEN) THEN
2244         CLOSE party_role_valid_csr ;
2245       END IF;
2246       IF (internal_party_exist_csr%ISOPEN) THEN
2247         CLOSE internal_party_exist_csr ;
2248       END IF;
2249       IF (tca_party_exist_csr%ISOPEN) THEN
2250         CLOSE tca_party_exist_csr ;
2251       END IF;
2252       IF (vendor_exist_csr%ISOPEN) THEN
2253         CLOSE vendor_exist_csr ;
2254       END IF;
2255       IF (rep_party_unique_csr%ISOPEN) THEN
2256         CLOSE rep_party_unique_csr ;
2257       END IF;
2258       IF (imp_party_unique_csr%ISOPEN) THEN
2259         CLOSE imp_party_unique_csr ;
2260       END IF;
2261       IF (internal_party_and_role_csr%ISOPEN) THEN
2262         CLOSE internal_party_and_role_csr ;
2263       END IF;
2264       IF (tca_party_and_role_csr%ISOPEN) THEN
2265         CLOSE tca_party_and_role_csr ;
2266       END IF;
2267       IF (vendor_and_role_csr%ISOPEN) THEN
2268         CLOSE vendor_and_role_csr ;
2269       END IF;
2270       IF (tca_location_valid_csr%ISOPEN) THEN
2271         CLOSE tca_location_valid_csr ;
2272       END IF;
2273       IF (vendor_location_valid_csr%ISOPEN) THEN
2274         CLOSE vendor_location_valid_csr ;
2275       END IF;
2276 
2277       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2278         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2279              'Leaving validate_contract_party:FND_API.G_EXC_ERROR Exception');
2280       END IF;
2281 
2282       x_return_status := FND_API.G_RET_STS_ERROR;
2283       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2284                                 p_data  =>  x_msg_data);
2285 
2286     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2287 
2288       --close cursors
2289       IF (party_role_exist_csr%ISOPEN) THEN
2290         CLOSE party_role_exist_csr ;
2291       END IF;
2292       IF (party_role_valid_csr%ISOPEN) THEN
2293         CLOSE party_role_valid_csr ;
2294       END IF;
2295       IF (internal_party_exist_csr%ISOPEN) THEN
2296         CLOSE internal_party_exist_csr ;
2297       END IF;
2298       IF (tca_party_exist_csr%ISOPEN) THEN
2299         CLOSE tca_party_exist_csr ;
2300       END IF;
2301       IF (vendor_exist_csr%ISOPEN) THEN
2302         CLOSE vendor_exist_csr ;
2303       END IF;
2304       IF (rep_party_unique_csr%ISOPEN) THEN
2305         CLOSE rep_party_unique_csr ;
2306       END IF;
2307       IF (imp_party_unique_csr%ISOPEN) THEN
2308         CLOSE imp_party_unique_csr ;
2309       END IF;
2310       IF (internal_party_and_role_csr%ISOPEN) THEN
2311         CLOSE internal_party_and_role_csr ;
2312       END IF;
2313       IF (tca_party_and_role_csr%ISOPEN) THEN
2314         CLOSE tca_party_and_role_csr ;
2315       END IF;
2316       IF (vendor_and_role_csr%ISOPEN) THEN
2317         CLOSE vendor_and_role_csr ;
2318       END IF;
2319       IF (tca_location_valid_csr%ISOPEN) THEN
2320         CLOSE tca_location_valid_csr ;
2321       END IF;
2322       IF (vendor_location_valid_csr%ISOPEN) THEN
2323         CLOSE vendor_location_valid_csr ;
2324       END IF;
2325 
2326       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2327         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2328              'Leaving validate_contract_party:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
2329       END IF;
2330 
2331       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
2332       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2333                                 p_data  =>  x_msg_data);
2334 
2335     WHEN OTHERS THEN
2336 
2337       --close cursors
2338       IF (party_role_exist_csr%ISOPEN) THEN
2339         CLOSE party_role_exist_csr ;
2340       END IF;
2341       IF (party_role_valid_csr%ISOPEN) THEN
2342         CLOSE party_role_valid_csr ;
2343       END IF;
2344       IF (internal_party_exist_csr%ISOPEN) THEN
2345         CLOSE internal_party_exist_csr ;
2346       END IF;
2347       IF (tca_party_exist_csr%ISOPEN) THEN
2348         CLOSE tca_party_exist_csr ;
2349       END IF;
2350       IF (vendor_exist_csr%ISOPEN) THEN
2351         CLOSE vendor_exist_csr ;
2352       END IF;
2353       IF (rep_party_unique_csr%ISOPEN) THEN
2354         CLOSE rep_party_unique_csr ;
2355       END IF;
2356       IF (imp_party_unique_csr%ISOPEN) THEN
2357         CLOSE imp_party_unique_csr ;
2358       END IF;
2359       IF (internal_party_and_role_csr%ISOPEN) THEN
2360         CLOSE internal_party_and_role_csr ;
2361       END IF;
2362       IF (tca_party_and_role_csr%ISOPEN) THEN
2363         CLOSE tca_party_and_role_csr ;
2364       END IF;
2365       IF (vendor_and_role_csr%ISOPEN) THEN
2366         CLOSE vendor_and_role_csr ;
2367       END IF;
2368       IF (tca_location_valid_csr%ISOPEN) THEN
2369         CLOSE tca_location_valid_csr ;
2370       END IF;
2371       IF (vendor_location_valid_csr%ISOPEN) THEN
2372         CLOSE vendor_location_valid_csr ;
2373       END IF;
2374 
2375       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2376         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2377              'Leaving validate_contract_party because of EXCEPTION: ' || sqlerrm);
2378       END IF;
2379 
2380       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2381                          p_msg_name     => G_UNEXPECTED_ERROR,
2382                          p_token1       => G_SQLCODE_TOKEN,
2383                          p_token1_value => sqlcode,
2384                          p_token2       => G_SQLERRM_TOKEN,
2385                          p_token2_value => sqlerrm);
2386       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2387       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2388                                 p_data  =>  x_msg_data);
2389 
2390   END validate_contract_party;
2391 
2392 
2393   -- Start of comments
2394   --API name      : validate_party_contact
2395   --Type          : Private.
2396   --Function      : Validates a party contact
2397   --Pre-reqs      : None.
2398   --Parameters    :
2399   --IN            : p_api_version         IN NUMBER       Required
2400   --              : p_init_msg_list       IN VARCHAR2     Optional
2401   --                   Default = FND_API.G_FALSE
2402   --              : p_contract_id         IN NUMBER       Required
2403   --                   Contract ID of the party contact to be validated
2404   --              : p_party_role_code    IN VARCHAR2       Required
2405   --                   Role code of the party of the contact to be validated
2406   --              : p_party_id    IN    NUMBER       Required
2407   --                   Id of the contract party to be validated
2408   --              : p_contact_id    IN   NUMBER       Required
2409   --                   Id of the party contact to be validated
2410   --              : p_contact_name    IN   VARCHAR2       Required
2411   --                   Name of the party contact to be validated
2412   --              : p_contact_role_id    IN   NUMBER       Required
2413   --                   Id of the role of the party contact to be validated
2414   --OUT           : x_valid_contact_flag       OUT  VARCHAR2(1)
2415   --              : x_error_code          OUT  VARCHAR2(100)
2416   --                   Possible error codes are;
2417   --                     CONTACT_NOT_UNIQUE - Contact is not unique in the party
2418   --                     CONTACT_NOT_EXIST - Party and contact combination is invalid
2419   --              : x_return_status       OUT  VARCHAR2(1)
2420   --              : x_msg_count           OUT  NUMBER
2421   --              : x_msg_data            OUT  VARCHAR2(2000)
2422   -- End of comments
2423   PROCEDURE validate_party_contact(
2424        p_api_version              IN NUMBER,
2425        p_init_msg_list            IN VARCHAR2,
2426        p_contract_id              IN NUMBER,
2427        p_party_role_code          IN VARCHAR2,
2428        p_party_id                 IN NUMBER,
2429        p_contact_id               IN NUMBER,
2430        p_contact_name             IN VARCHAR2,
2431        p_contact_role_id          IN NUMBER,
2432        x_valid_contact_flag       OUT NOCOPY VARCHAR2,
2433        x_error_code               OUT NOCOPY VARCHAR2,
2434        x_return_status            OUT NOCOPY VARCHAR2,
2435        x_msg_count                OUT NOCOPY NUMBER,
2436        x_msg_data                 OUT NOCOPY VARCHAR2)
2437   IS
2438     l_api_name VARCHAR2(30);
2439     l_api_version       CONSTANT NUMBER := 1.0;
2440     l_temp NUMBER;
2441 
2442 
2443     CURSOR contact_unique_csr IS
2444           SELECT  1
2445           FROM    okc_rep_party_contacts
2446           WHERE   contract_id = p_contract_id
2447           AND     party_id = p_party_id
2448           AND     party_role_code = p_party_role_code
2449           AND     contact_id = p_contact_id
2450           AND     contact_role_id = p_contact_role_id;
2451 
2452 -- Bug 6598261.Changed per_all_workforce_v to per_workforce_v.
2453 
2454     CURSOR internal_party_contact_csr IS
2455           SELECT  1
2456           FROM    per_workforce_v
2457           WHERE   person_id = p_contact_id
2458           AND     full_name = p_contact_name;
2459 
2460     CURSOR tca_party_contact_csr IS
2461           SELECT  1
2462           FROM    hz_relationships  hr,
2463                   hz_parties  hz,
2464                   hz_parties  hz1
2465           WHERE   hr.party_id = p_contact_id
2466           AND     hr.subject_type = 'PERSON'
2467           AND     hr.object_type = 'ORGANIZATION'
2468           AND     hr.object_table_name = 'HZ_PARTIES'
2469           AND     hr.object_id = p_party_id
2470           AND     hr.relationship_code = 'CONTACT_OF'
2471           AND     hz.party_id = p_contact_id
2472           AND     hz1.party_id = hr.subject_id
2473           AND     hz1.party_name = p_contact_name;
2474 
2475     CURSOR vendor_party_contact_csr IS
2476           SELECT   1
2477           FROM     po_vendor_contacts   pvc,
2478                    Po_vendor_sites_all    pvs
2479           WHERE    pvs.vendor_id = p_party_id
2480           AND      pvc.vendor_site_id = pvs.vendor_site_id
2481           AND      pvc.vendor_contact_id = p_contact_id;
2482 
2483 
2484   BEGIN
2485 
2486     l_api_name := 'validate_party_contact';
2487 
2488     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2489       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2490               'Entered OKC_REP_WF_PVT.validate_party_contact');
2491       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2492               'p_contract_id = ' || p_contract_id);
2493       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2494               'p_party_role_code = ' || p_party_role_code);
2495       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2496               'p_party_id = ' || p_party_id);
2497       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2498               'p_contact_id = ' || p_contact_id);
2499       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2500               'p_contact_name = ' || p_contact_name);
2501       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2502               'p_contact_role_id = ' || p_contact_role_id);
2503     END IF;
2504 
2505     -- Standard call to check for call compatibility.
2506     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2507       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2508     END IF;
2509 
2510     -- Initialize message list if p_init_msg_list is set to TRUE.
2511     IF FND_API.to_Boolean( p_init_msg_list ) THEN
2512       FND_MSG_PUB.initialize;
2513     END IF;
2514 
2515     --  Initialize API return status to success
2516     x_return_status := FND_API.G_RET_STS_SUCCESS;
2517 
2518     x_valid_contact_flag := 'Y';
2519 
2520     -- Check uniqueness of the party contact
2521     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2522       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2523               'Checking uniqueness of the party contact');
2524     END IF;
2525 
2526     OPEN  contact_unique_csr;
2527     FETCH contact_unique_csr INTO l_temp;
2528 
2529     IF (contact_unique_csr%FOUND) THEN
2530 
2531       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2532         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2533                 'Contact already exist in the party');
2534       END IF;
2535 
2536       CLOSE contact_unique_csr;
2537 
2538       x_valid_contact_flag := 'N';
2539       x_error_code := 'CONTACT_NOT_UNIQUE';
2540 
2541       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2542         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2543                 'x_valid_contact_flag: ' || x_valid_contact_flag);
2544         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2545                 'x_error_code: ' || x_error_code);
2546       END IF;
2547 
2548       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2549                                 p_data  =>  x_msg_data);
2550 
2551       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2552         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2553                 'Leaving OKC_REP_WF_PVT.validate_party_contact');
2554       END IF;
2555 
2556       return;
2557 
2558     END IF;
2559 
2560     CLOSE contact_unique_csr;
2561 
2562 
2563 
2564     -- Check validity of party and contact combination
2565     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2566       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2567               'Checking validity of party and contact combination');
2568     END IF;
2569 
2570     IF (p_party_role_code = G_PARTY_ROLE_INTERNAL) THEN
2571 
2572       OPEN  internal_party_contact_csr;
2573       FETCH internal_party_contact_csr INTO l_temp;
2574 
2575       IF (internal_party_contact_csr%NOTFOUND) THEN
2576 
2577         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2578           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2579                   'Combination of party and contact is invalid');
2580         END IF;
2581 
2582         CLOSE internal_party_contact_csr;
2583 
2584         x_valid_contact_flag := 'N';
2585         x_error_code := 'CONTACT_NOT_EXIST';
2586 
2587         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2588           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2589                   'x_valid_contact_flag: ' || x_valid_contact_flag);
2590           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2591                   'x_error_code: ' || x_error_code);
2592         END IF;
2593 
2594         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2595                                   p_data  =>  x_msg_data);
2596 
2597         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2598           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2599                   'Leaving OKC_REP_WF_PVT.validate_party_contact');
2600         END IF;
2601 
2602         return;
2603 
2604       END IF;
2605 
2606       CLOSE internal_party_contact_csr;
2607 
2608     ELSIF (p_party_role_code = G_PARTY_ROLE_PARTNER OR
2609            p_party_role_code = G_PARTY_ROLE_CUSTOMER) THEN
2610 
2611       OPEN  tca_party_contact_csr;
2612       FETCH tca_party_contact_csr INTO l_temp;
2613 
2614       IF (tca_party_contact_csr%NOTFOUND) THEN
2615 
2616         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2617           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2618                   'Combination of party and contact is invalid');
2619         END IF;
2620 
2621         CLOSE tca_party_contact_csr;
2622 
2623         x_valid_contact_flag := 'N';
2624         x_error_code := 'CONTACT_NOT_EXIST';
2625 
2626         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2627           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2628                   'x_valid_contact_flag: ' || x_valid_contact_flag);
2629           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2630                   'x_error_code: ' || x_error_code);
2631         END IF;
2632 
2633         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2634                                   p_data  =>  x_msg_data);
2635 
2636         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2637           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2638                   'Leaving OKC_REP_WF_PVT.validate_party_contact');
2639         END IF;
2640 
2641         return;
2642 
2643       END IF;
2644 
2645       CLOSE tca_party_contact_csr;
2646 
2647     ELSIF (p_party_role_code = G_PARTY_ROLE_SUPPLIER) THEN
2648 
2649       OPEN  vendor_party_contact_csr;
2650       FETCH vendor_party_contact_csr INTO l_temp;
2651 
2652       IF (vendor_party_contact_csr%NOTFOUND) THEN
2653 
2654         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2655           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2656                   'Combination of party and contact is invalid');
2657         END IF;
2658 
2659         CLOSE vendor_party_contact_csr;
2660 
2661         x_valid_contact_flag := 'N';
2662         x_error_code := 'CONTACT_NOT_EXIST';
2663 
2664         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2665           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2666                   'x_valid_contact_flag: ' || x_valid_contact_flag);
2667           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2668                   'x_error_code: ' || x_error_code);
2669         END IF;
2670 
2671         FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2672                                   p_data  =>  x_msg_data);
2673 
2674         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2675           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2676                   'Leaving OKC_REP_WF_PVT.validate_party_contact');
2677         END IF;
2678 
2679         return;
2680 
2681       END IF;
2682 
2683       CLOSE vendor_party_contact_csr;
2684 
2685     END IF;
2686 
2687     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2688       FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
2689               'Party and contact combination is valid');
2690     END IF;
2691 
2692 
2693   EXCEPTION
2694 
2695     WHEN FND_API.G_EXC_ERROR THEN
2696 
2697       --close cursors
2698       IF (contact_unique_csr%ISOPEN) THEN
2699         CLOSE contact_unique_csr ;
2700       END IF;
2701       IF (internal_party_contact_csr%ISOPEN) THEN
2702         CLOSE internal_party_contact_csr ;
2703       END IF;
2704       IF (tca_party_contact_csr%ISOPEN) THEN
2705         CLOSE tca_party_contact_csr ;
2706       END IF;
2707       IF (vendor_party_contact_csr%ISOPEN) THEN
2708         CLOSE vendor_party_contact_csr ;
2709       END IF;
2710 
2711       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2712         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2713              'Leaving validate_party_contact:FND_API.G_EXC_ERROR Exception');
2714       END IF;
2715 
2716       x_return_status := FND_API.G_RET_STS_ERROR;
2717       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2718                                 p_data  =>  x_msg_data);
2719 
2720     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2721 
2722       --close cursors
2723       IF (contact_unique_csr%ISOPEN) THEN
2724         CLOSE contact_unique_csr ;
2725       END IF;
2726       IF (internal_party_contact_csr%ISOPEN) THEN
2727         CLOSE internal_party_contact_csr ;
2728       END IF;
2729       IF (tca_party_contact_csr%ISOPEN) THEN
2730         CLOSE tca_party_contact_csr ;
2731       END IF;
2732       IF (vendor_party_contact_csr%ISOPEN) THEN
2733         CLOSE vendor_party_contact_csr ;
2734       END IF;
2735 
2736       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2737         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2738              'Leaving validate_party_contact:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
2739       END IF;
2740 
2741       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
2742       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2743                                 p_data  =>  x_msg_data);
2744 
2745     WHEN OTHERS THEN
2746 
2747       --close cursors
2748       IF (contact_unique_csr%ISOPEN) THEN
2749         CLOSE contact_unique_csr ;
2750       END IF;
2751       IF (internal_party_contact_csr%ISOPEN) THEN
2752         CLOSE internal_party_contact_csr ;
2753       END IF;
2754       IF (tca_party_contact_csr%ISOPEN) THEN
2755         CLOSE tca_party_contact_csr ;
2756       END IF;
2757       IF (vendor_party_contact_csr%ISOPEN) THEN
2758         CLOSE vendor_party_contact_csr ;
2759       END IF;
2760 
2761       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2762         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2763              'Leaving validate_party_contact because of EXCEPTION: ' || sqlerrm);
2764       END IF;
2765 
2766       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2767                           p_msg_name     => G_UNEXPECTED_ERROR,
2768                           p_token1       => G_SQLCODE_TOKEN,
2769                           p_token1_value => sqlcode,
2770                           p_token2       => G_SQLERRM_TOKEN,
2771                           p_token2_value => sqlerrm);
2772       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2773       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2774                                 p_data  =>  x_msg_data);
2775 
2776   END validate_party_contact;
2777 
2778   -- Start of comments
2779   --API name      : populate_import_errors
2780   --Type          : Private.
2781   --Function      : Populate the okc_rep_imp_errors_t table with error messages
2782   --Pre-reqs      : None
2783   --Parameters    :
2784   --IN            : p_api_version         IN NUMBER       Required
2785   --              : p_init_msg_list       IN VARCHAR2     Optional
2786   --                   Default = FND_API.G_FALSE
2787   --              : p_contract_id         IN NUMBER       Required
2788   --                    Contract ID that the error is from
2789   --              : p_error_obj_type    IN    VARCHAR2       Required
2790   --                    Error Object Type: 'CONTRACT', 'PARTY', 'DOCUMENT'
2791   --              : p_error_obj_id     IN NUMBER       Required
2792   --                   Error Object's ID
2793   --              : p_error_msg_txt  IN VARCHAR2       Required
2794   --                   Translated error message text
2795   --              : p_program_id                IN  NUMBER Required
2796   --                    Concurrent program ID
2797   --              : p_program_login_id          IN  NUMBER Required
2798   --                    Concurrent program login ID
2799   --              : p_program_app_id            IN  NUMBER Required
2800   --                    Concurrent program application ID
2801   --              : p_run_id                IN  NUMBER Required
2802   --                    Concurrent program request ID
2803   --OUT           : x_return_status       OUT  VARCHAR2(1)
2804   --              : x_msg_count           OUT  NUMBER
2805   --              : x_msg_data            OUT  VARCHAR2(2000)
2806   -- End of comments
2807   PROCEDURE populate_import_errors(
2808        p_api_version              IN NUMBER,
2809        p_init_msg_list            IN VARCHAR2,
2810        p_contract_id              IN NUMBER,
2811        p_error_obj_type           IN VARCHAR2,
2812        p_error_obj_id             IN NUMBER,
2813        p_error_msg_txt            IN VARCHAR2,
2814        p_program_id               IN NUMBER,
2815        p_program_login_id         IN NUMBER,
2816        p_program_app_id           IN NUMBER,
2817        p_run_id               IN NUMBER,
2818        x_return_status            OUT NOCOPY VARCHAR2,
2819        x_msg_count                OUT NOCOPY NUMBER,
2820        x_msg_data                 OUT NOCOPY VARCHAR2)
2821   IS
2822     l_api_name VARCHAR2(30);
2823     l_api_version       CONSTANT NUMBER := 1.0;
2824 
2825     l_imp_error_id              NUMBER;
2826 
2827     CURSOR ERROR_ID_CSR IS
2828     SELECT OKC_REP_IMP_ERRORS_T_S.NEXTVAL
2829     FROM DUAL;
2830 
2831     BEGIN
2832 
2833     l_api_name := 'populate_import_errors';
2834 
2835     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2836       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2837               'Entered OKC_REP_UTIL_PVT.populate_import_errors');
2838       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2839               'p_contract_id = ' || p_contract_id);
2840       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2841               'p_error_obj_type = ' || p_error_obj_type);
2842       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2843               'p_error_obj_id = ' || p_error_obj_id);
2844       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2845               'p_error_msg_txt = ' || p_error_msg_txt);
2846       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2847               'p_program_id = ' || p_program_id);
2848       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2849               'p_program_login_id = ' || p_program_login_id);
2850       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2851               'p_program_app_id = ' || p_program_app_id);
2852       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2853               'p_run_id = ' || p_run_id);
2854 
2855 
2856     END IF;
2857 
2858     -- Standard call to check for call compatibility.
2859     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2860       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2861     END IF;
2862 
2863     -- Initialize message list if p_init_msg_list is set to TRUE.
2864     IF FND_API.to_Boolean( p_init_msg_list ) THEN
2865       FND_MSG_PUB.initialize;
2866     END IF;
2867 
2868     --  Initialize API return status to success
2869     x_return_status := FND_API.G_RET_STS_SUCCESS;
2870 
2871 
2872 
2873     OPEN ERROR_ID_CSR;
2874     FETCH ERROR_ID_CSR INTO l_imp_error_id;
2875     CLOSE ERROR_ID_CSR;
2876 
2877     IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2878         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2879              'l_imp_error_id: '||l_imp_error_id);
2880     END IF;
2881 
2882     INSERT INTO OKC_REP_IMP_ERRORS_T(
2883     IMP_ERROR_ID,
2884     IMP_CONTRACT_ID,
2885     ERROR_OBJECT_TYPE,
2886     ERROR_OBJECT_ID,
2887     ERROR_MESSAGE,
2888     CREATION_DATE,
2889     PROGRAM_ID,
2890     PROGRAM_LOGIN_ID,
2891     PROGRAM_APPLICATION_ID,
2892     REQUEST_ID,
2893     run_id)
2894     VALUES(
2895     l_imp_error_id,
2896     p_contract_id,
2897     p_error_obj_type,
2898     p_error_obj_id,
2899     p_error_msg_txt,
2900     sysdate,
2901     p_program_id,
2902     p_program_login_id,
2903     p_program_app_id,
2904     null,
2905     p_run_id
2906     );
2907 
2908     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2909         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
2910                 'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
2911     END IF;
2912 
2913   EXCEPTION
2914     WHEN FND_API.G_EXC_ERROR THEN
2915 
2916       --close cursors
2917       IF (ERROR_ID_CSR%ISOPEN) THEN
2918         CLOSE ERROR_ID_CSR ;
2919       END IF;
2920 
2921       IF ERROR_ID_CSR%ISOPEN THEN
2922         CLOSE ERROR_ID_CSR;
2923       END IF;
2924       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2925         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2926              'Leaving populate_import_errors:FND_API.G_EXC_ERROR Exception');
2927       END IF;
2928 
2929       x_return_status := FND_API.G_RET_STS_ERROR;
2930       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2931                                 p_data  =>  x_msg_data);
2932 
2933     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2934 
2935       --close cursors
2936       IF (ERROR_ID_CSR%ISOPEN) THEN
2937         CLOSE ERROR_ID_CSR ;
2938       END IF;
2939 
2940       IF ERROR_ID_CSR%ISOPEN THEN
2941         CLOSE ERROR_ID_CSR;
2942       END IF;
2943 
2944       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2945         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2946              'Leaving populate_import_errors:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
2947       END IF;
2948 
2949       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
2950       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2951                                 p_data  =>  x_msg_data);
2952 
2953     WHEN OTHERS THEN
2954 
2955       --close cursors
2956       IF (ERROR_ID_CSR%ISOPEN) THEN
2957         CLOSE ERROR_ID_CSR ;
2958       END IF;
2959 
2960       IF ERROR_ID_CSR%ISOPEN THEN
2961         CLOSE ERROR_ID_CSR;
2962       END IF;
2963 
2964       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2965         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
2966              'Leaving populate_import_errors because of EXCEPTION: ' || sqlerrm);
2967       END IF;
2968 
2969       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2970                           p_msg_name     => G_UNEXPECTED_ERROR,
2971                           p_token1       => G_SQLCODE_TOKEN,
2972                           p_token1_value => sqlcode,
2973                           p_token2       => G_SQLERRM_TOKEN,
2974                           p_token2_value => sqlerrm);
2975       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2976       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
2977                                 p_data  =>  x_msg_data);
2978 
2979   END populate_import_errors;
2980 
2981 
2982   -- Start of comments
2983   --API name      : validate_import_documents
2984   --Type          : Private.
2985   --Function      : Validates the contract documents stored in the interface table
2986   --                in a concurrent program.
2987   --Pre-reqs      : Currently only called from repository import.
2988   --              : Contract documents should be saved to the OKC_REP_IMP_DOCUMENTS_T table
2989   --Parameters    :
2990   --IN            : p_api_version         IN NUMBER       Required
2991   --              : p_init_msg_list       IN VARCHAR2     Optional
2992   --                   Default = FND_API.G_FALSE
2993   --              : p_run_id         IN NUMBER       Required
2994   --                    Concurrent program request id
2995   --OUT           : x_return_status       OUT  VARCHAR2(1)
2996   --              : x_msg_count           OUT  NUMBER
2997   --              : x_msg_data            OUT  VARCHAR2(2000)
2998   -- End of comments
2999   PROCEDURE validate_import_documents(
3000        p_api_version              IN NUMBER,
3001        p_init_msg_list            IN VARCHAR2,
3002        p_run_id               IN NUMBER,
3003        x_return_status            OUT NOCOPY VARCHAR2,
3004        x_msg_count                OUT NOCOPY NUMBER,
3005        x_msg_data                 OUT NOCOPY VARCHAR2)
3006   IS
3007     l_api_name VARCHAR2(30);
3008     l_api_version       CONSTANT NUMBER := 1.0;
3009 
3010     l_category_code     VARCHAR2(30);
3011     l_valid_flag        VARCHAR2(1);
3012     l_error_msg         VARCHAR2(2000);
3013 
3014     l_file_name_length  CONSTANT NUMBER := 2048;
3015     l_file_desc_length  CONSTANT NUMBER := 255;
3016 
3017     CURSOR IMPORT_DOCUMENTS_CSR IS
3018     SELECT IMP_DOCUMENT_ID,
3019     IMP_CONTRACT_ID,
3020     DOCUMENT_INDEX,
3021     FILE_NAME,
3022     DOCUMENT_DESC,
3023     CATEGORY_NAME_TXT,
3024     PROGRAM_ID,
3025     PROGRAM_LOGIN_ID,
3026     PROGRAM_APPLICATION_ID,
3027     REQUEST_ID
3028     FROM OKC_REP_IMP_DOCUMENTS_T
3029     WHERE run_id = p_run_id
3030     AND VALID_FLAG in ('Y', 'U');
3031 
3032     l_import_documents_rec IMPORT_DOCUMENTS_CSR%ROWTYPE;
3033 
3034     CURSOR document_category_csr (p_category_name VARCHAR2) IS
3035     select cat.name
3036     from fnd_document_categories cat,
3037     fnd_document_categories_tl cattl
3038     where UPPER(cattl.user_name) = UPPER(p_category_name)
3039     and cat.category_id = cattl.category_id
3040     and cat.name like 'OKC_REPO_%'
3041     and (cat.start_date_active is null OR trunc(cat.start_date_active) <= trunc(sysdate))
3042     and (cat.end_date_active is null OR trunc(cat.end_date_active) >= trunc(sysdate))
3043     and language = userenv('LANG');
3044 
3045 
3046     BEGIN
3047 
3048     l_api_name := 'validate_import_documents';
3049 
3050     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3051       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3052               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
3053       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3054               'p_run_id = ' || p_run_id);
3055 
3056     END IF;
3057 
3058     -- Standard call to check for call compatibility.
3059     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3060       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3061     END IF;
3062 
3063     -- Initialize message list if p_init_msg_list is set to TRUE.
3064     IF FND_API.to_Boolean( p_init_msg_list ) THEN
3065       FND_MSG_PUB.initialize;
3066     END IF;
3067 
3068     --  Initialize API return status to success
3069     x_return_status := FND_API.G_RET_STS_SUCCESS;
3070 
3071     OPEN IMPORT_DOCUMENTS_CSR;
3072     LOOP
3073         FETCH IMPORT_DOCUMENTS_CSR INTO l_import_documents_rec;
3074         EXIT WHEN IMPORT_DOCUMENTS_CSR%NOTFOUND;
3075 
3076         --Initialize l_valid_flag for every record
3077         l_valid_flag := 'Y';
3078         --Initialize l_error_msg to be NULL
3079         l_error_msg := NULL;
3080 
3081         --If l_valid_flag is already set to 'N', we do not perform any more checks
3082         --File Name should exist
3083         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3084                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3085                     'Checking if user enters file name');
3086         END IF;
3087         IF l_import_documents_rec.FILE_NAME IS NOT NULL THEN
3088             l_import_documents_rec.FILE_NAME := LTRIM(l_import_documents_rec.FILE_NAME);
3089             l_import_documents_rec.FILE_NAME := RTRIM(l_import_documents_rec.FILE_NAME);
3090         END IF;
3091         IF (l_valid_flag = 'Y' AND (l_import_documents_rec.FILE_NAME IS NULL OR LENGTH(l_import_documents_rec.FILE_NAME)=0)) THEN
3092             l_valid_flag := 'N';
3093 
3094             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_DOC_NAME');
3095             fnd_message.set_token(TOKEN => 'DOC_INDEX',
3096                                   VALUE => l_import_documents_rec.document_index);
3097             l_error_msg := fnd_message.get;
3098             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3099                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3100                 'Document Name is missing');
3101                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3102                 'Contract ID: '||l_import_documents_rec.imp_contract_id);
3103                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3104                 'Document ID: '||l_import_documents_rec.imp_document_id);
3105                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3106                 'l_error_msg: '||l_error_msg);
3107             END IF;
3108 
3109 
3110 
3111        END IF;
3112 
3113        --If l_valid_flag is already set to 'N', we do not perform any more checks
3114        IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3115                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3116                     'Checking if file name is too long');
3117        END IF;
3118        --File Name should be <= 256
3119        IF (l_valid_flag = 'Y' AND LENGTH(l_import_documents_rec.file_name) > l_file_name_length) THEN
3120             l_valid_flag := 'N';
3121 
3122             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_LONG_DOC_NAME');
3123             fnd_message.set_token(TOKEN => 'DOC_INDEX',
3124                                   VALUE => l_import_documents_rec.document_index);
3125             l_error_msg := fnd_message.get;
3126             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3127                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3128                     'Document Name is too long');
3129                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3130                     'Contract ID: '||l_import_documents_rec.imp_contract_id);
3131                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3132                     'Document ID: '||l_import_documents_rec.imp_document_id);
3133                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3134                     'l_error_msg: '||l_error_msg);
3135             END IF;
3136        END IF;
3137 
3138        --If l_valid_flag is already set to 'N', we do not perform any more checks
3139        IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3140                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3141                     'Checking if file description is too long');
3142        END IF;
3143        --File Name should be <= 256
3144        IF (l_valid_flag = 'Y' AND l_import_documents_rec.document_desc IS NOT NULL AND LENGTH(l_import_documents_rec.document_desc) > l_file_desc_length) THEN
3145             l_valid_flag := 'N';
3146 
3147             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_LONG_DOC_DESC');
3148             fnd_message.set_token(TOKEN => 'DOC_INDEX',
3149                                   VALUE => l_import_documents_rec.document_index);
3150             l_error_msg := fnd_message.get;
3151             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3152                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3153                     'Document Description is too long');
3154                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3155                     'Contract ID: '||l_import_documents_rec.imp_contract_id);
3156                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3157                     'Document ID: '||l_import_documents_rec.imp_document_id);
3158                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3159                     'l_error_msg: '||l_error_msg);
3160             END IF;
3161        END IF;
3162 
3163 
3164        --If l_valid_flag is already set to 'N', we do not perform any more checks
3165         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3166                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3167                     'Checking if user enters category name');
3168         END IF;
3169         --Category Name Text should exist
3170         IF l_import_documents_rec.category_name_txt IS NOT NULL THEN
3171             l_import_documents_rec.category_name_txt := LTRIM(l_import_documents_rec.category_name_txt);
3172             l_import_documents_rec.category_name_txt := RTRIM(l_import_documents_rec.category_name_txt);
3173         END IF;
3174         IF (l_valid_flag = 'Y' AND (l_import_documents_rec.category_name_txt IS NULL OR LENGTH(l_import_documents_rec.category_name_txt)=0)) THEN
3175                 l_valid_flag := 'N';
3176                 l_category_code := NULL;
3177 
3178                 fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_DOC_CATEGORY');
3179                 fnd_message.set_token(TOKEN => 'DOC_INDEX',
3180                                   VALUE => l_import_documents_rec.document_index);
3181                 l_error_msg := fnd_message.get;
3182                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3183                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3184                     'Document Category is missing');
3185                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3186                     'Contract ID: '||l_import_documents_rec.imp_contract_id);
3187                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3188                     'Document ID: '||l_import_documents_rec.imp_document_id);
3189                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3190                     'l_error_msg: '||l_error_msg);
3191                 END IF;
3192         END IF;
3193 
3194         --If l_valid_flag is already set to 'N', we do not perform any more checks
3195         IF l_valid_flag = 'Y' THEN
3196             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3197                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3198                     'Checking if category name is valid');
3199             END IF;
3200 
3201             OPEN  document_category_csr(l_import_documents_rec.category_name_txt);
3202             FETCH document_category_csr  INTO  l_category_code;
3203 
3204             IF document_category_csr%NOTFOUND THEN
3205                     l_valid_flag := 'N';
3206                     l_category_code := NULL;
3207 
3208                     fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_DOC_CATEGORY');
3209                     fnd_message.set_token(TOKEN => 'DOC_INDEX',
3210                                   VALUE => l_import_documents_rec.document_index);
3211                     l_error_msg := fnd_message.get;
3212                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3213                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3214                         'Category ID not found with given category name: '||l_import_documents_rec.category_name_txt);
3215                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3216                         'Contract ID: '||l_import_documents_rec.imp_contract_id);
3217                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3218                         'Document ID: '||l_import_documents_rec.imp_document_id);
3219                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3220                         'l_error_msg: '||l_error_msg);
3221                     END IF;
3222             END IF;
3223 
3224             CLOSE document_category_csr;
3225       END IF;
3226 
3227         --Populate the valid_flag and category_code columns in OKC_REP_IMP_DOCUMENTS_T
3228         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3229             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3230             'Updating OKC_REP_IMP_DOCUMENTS_T');
3231             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3232             'DOCUMENT ID: '||l_import_documents_rec.imp_document_id);
3233             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3234             'l_category_code: '||l_category_code);
3235             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3236             'l_valid_flag: '||l_valid_flag);
3237         END IF;
3238 
3239         --Populate the error message table
3240         IF(l_valid_flag = 'N' AND l_error_msg IS NOT NULL) THEN
3241             populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
3242                                    p_api_version => 1.0,
3243                                    p_contract_id => l_import_documents_rec.imp_contract_id,
3244                                 p_error_obj_type => G_IMP_DOCUMENT_ERROR,
3245                                 p_error_obj_id => l_import_documents_rec.imp_document_id,
3246                                 p_error_msg_txt => l_error_msg,
3247                                 p_program_id => l_import_documents_rec.program_id,
3248                                 p_program_login_id => l_import_documents_rec.program_login_id,
3249                                 p_program_app_id => l_import_documents_rec.program_application_id,
3250                                 p_run_id => l_import_documents_rec.request_id,
3251                                 x_return_status => x_return_status,
3252                                 x_msg_count => x_msg_count,
3253                                 x_msg_data => x_msg_data);
3254         END IF;
3255 
3256         IF(l_valid_flag = 'Y') THEN
3257         --Update the record in OKC_REP_IMP_DOCUMENTS_T
3258         UPDATE OKC_REP_IMP_DOCUMENTS_T
3259         SET CATEGORY_CODE = l_category_code,
3260         VALID_FLAG = l_valid_flag
3261         where imp_document_id = l_import_documents_rec.imp_document_id;
3262         END IF;
3263 
3264         IF(l_valid_flag = 'N') THEN
3265         UPDATE OKC_REP_IMP_DOCUMENTS_T
3266         SET VALID_FLAG = l_valid_flag
3267         where imp_document_id = l_import_documents_rec.imp_document_id;
3268         END IF;
3269 
3270     END LOOP;
3271     CLOSE IMPORT_DOCUMENTS_CSR;
3272 
3273     --bug fix for 4209521
3274     --need to commit or the Java layer will not pick up the changes
3275     COMMIT;
3276 
3277     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3278         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3279                 'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
3280     END IF;
3281 
3282   EXCEPTION
3283     WHEN FND_API.G_EXC_ERROR THEN
3284       IF IMPORT_DOCUMENTS_CSR%ISOPEN THEN
3285         CLOSE IMPORT_DOCUMENTS_CSR;
3286       END IF;
3287 
3288       IF document_category_csr%ISOPEN THEN
3289         CLOSE document_category_csr;
3290       END IF;
3291       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3292         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3293              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
3294       END IF;
3295 
3296       x_return_status := FND_API.G_RET_STS_ERROR;
3297       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3298                                 p_data  =>  x_msg_data);
3299 
3300     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3301       IF IMPORT_DOCUMENTS_CSR%ISOPEN THEN
3302         CLOSE IMPORT_DOCUMENTS_CSR;
3303       END IF;
3304 
3305       IF document_category_csr%ISOPEN THEN
3306         CLOSE document_category_csr;
3307       END IF;
3308       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3309         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3310              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
3311       END IF;
3312 
3313       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
3314       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3315                                 p_data  =>  x_msg_data);
3316 
3317     WHEN OTHERS THEN
3318       IF IMPORT_DOCUMENTS_CSR%ISOPEN THEN
3319         CLOSE IMPORT_DOCUMENTS_CSR;
3320       END IF;
3321 
3322       IF document_category_csr%ISOPEN THEN
3323         CLOSE document_category_csr;
3324       END IF;
3325       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3326         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3327              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
3328       END IF;
3329 
3330       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3331                           p_msg_name     => G_UNEXPECTED_ERROR,
3332                           p_token1       => G_SQLCODE_TOKEN,
3333                           p_token1_value => sqlcode,
3334                           p_token2       => G_SQLERRM_TOKEN,
3335                           p_token2_value => sqlerrm);
3336       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3337       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3338                                 p_data  =>  x_msg_data);
3339 
3340   END validate_import_documents;
3341 
3342   -- Start of comments
3343   --API name      : validate_import_parties
3344   --Type          : Private.
3345   --Function      : Validates contract parties during import
3346   --Pre-reqs      : Currently only called from repository import.
3347   --              : Contracts should be saved to the OKC_REP_IMP_PARTIES_T table
3348   --Parameters    :
3349   --IN            : p_api_version         IN NUMBER       Required
3350   --              : p_init_msg_list       IN VARCHAR2     Optional
3351   --                   Default = FND_API.G_FALSE
3352   --              : p_run_id         IN NUMBER       Required
3353   --                    Concurrent Program Request ID
3354   --OUT           : x_return_status       OUT  VARCHAR2(1)
3355   --              : x_msg_count           OUT  NUMBER
3356   --              : x_msg_data            OUT  VARCHAR2(2000)
3357   -- End of comments
3358   PROCEDURE validate_import_parties(
3359        p_api_version              IN NUMBER,
3360        p_init_msg_list            IN VARCHAR2,
3361        p_run_id               IN NUMBER,
3362        x_return_status            OUT NOCOPY VARCHAR2,
3363        x_msg_count                OUT NOCOPY NUMBER,
3364        x_msg_data                 OUT NOCOPY VARCHAR2)
3365   IS
3366     l_api_name VARCHAR2(30);
3367     l_api_version       CONSTANT NUMBER := 1.0;
3368 
3369     l_valid_flag        VARCHAR2(1);
3370     l_error_code        VARCHAR2(20);
3371     l_error_msg         VARCHAR2(2000);
3372 
3373 
3374     l_signed_by_length  CONSTANT NUMBER := 150;
3375 
3376     l_party_role_code   VARCHAR2(240);
3377     l_party_id          NUMBER;
3378     l_contract_intent   VARCHAR2(1);
3379     l_signed_date       DATE;
3380     l_contract_status VARCHAR2(240);
3381 
3382     CURSOR IMPORT_PARTIES_CSR IS
3383     SELECT IMP_PARTY_ID,
3384     IMP_CONTRACT_ID,
3385     PARTY_INDEX,
3386     SIGNED_BY_TXT,
3387     SIGNED_DATE,
3388     PARTY_NAME_TXT,
3389     PARTY_ROLE_TXT,
3390     VALID_FLAG,
3391     PROGRAM_ID,
3392     PROGRAM_LOGIN_ID,
3393     PROGRAM_APPLICATION_ID,
3394     REQUEST_ID
3395     FROM OKC_REP_IMP_PARTIES_T
3396     WHERE run_id = p_run_id
3397     AND Nvl(VALID_FLAG, 'U') IN ('U', 'Y');
3398 
3399     l_import_parties_rec IMPORT_PARTIES_CSR%ROWTYPE;
3400 
3401     CURSOR CONTRACT_INTENT_CSR (p_imp_contract_id NUMBER) IS
3402     SELECT INTENT
3403     FROM OKC_BUS_DOC_TYPES_V bus_doc,
3404     OKC_REP_IMP_CONTRACTS_T temp
3405     WHERE bus_doc.name = temp.contract_type_txt
3406     AND temp.imp_contract_id = p_imp_contract_id
3407     AND bus_doc.document_type_class = 'REPOSITORY';
3408 
3409     CURSOR c_get_contract_status(p_imp_contract_id NUMBER) IS
3410       SELECT LOOKUP_CODE
3411         FROM FND_LOOKUPS fnd, OKC_REP_IMP_CONTRACTS_T con
3412        WHERE con.imp_contract_id = p_imp_contract_id
3413          AND fnd.LOOKUP_TYPE = 'OKC_REP_CONTRACT_STATUSES'
3414          AND fnd.LOOKUP_CODE IN  ('SIGNED', 'APPROVED', 'DRAFT')
3415          AND UPPER(fnd.MEANING) = UPPER(con.CONTRACT_STATUS_TXT);
3416 
3417     BEGIN
3418 
3419     l_api_name := 'validate_import_parties';
3420 
3421     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3422       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3423               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
3424       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3425               'p_run_id = ' || p_run_id);
3426 
3427     END IF;
3428 
3429     -- Standard call to check for call compatibility.
3430     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3431       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3432     END IF;
3433 
3434     -- Initialize message list if p_init_msg_list is set to TRUE.
3435     IF FND_API.to_Boolean( p_init_msg_list ) THEN
3436       FND_MSG_PUB.initialize;
3437     END IF;
3438 
3439     --  Initialize API return status to success
3440     x_return_status := FND_API.G_RET_STS_SUCCESS;
3441 
3442     OPEN IMPORT_PARTIES_CSR;
3443     LOOP
3444         FETCH IMPORT_PARTIES_CSR INTO l_import_parties_rec;
3445         EXIT WHEN IMPORT_PARTIES_CSR%NOTFOUND;
3446 
3447         --Initialize l_valid_flag for every record
3448         l_valid_flag := 'Y';
3449         --Initialize l_error_msg for every record
3450         l_error_msg := NULL;
3451 
3452         --If l_valid_flag is already set to 'N', we do not perform any more checks
3453         --Party Name should exist
3454         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3455                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3456                     'Checking if user enters party name');
3457         END IF;
3458         IF l_import_parties_rec.party_name_txt IS NOT NULL THEN
3459             l_import_parties_rec.party_name_txt := LTRIM(l_import_parties_rec.party_name_txt);
3460             l_import_parties_rec.party_name_txt := RTRIM(l_import_parties_rec.party_name_txt);
3461         END IF;
3462         IF (l_valid_flag = 'Y' AND (l_import_parties_rec.party_name_txt IS NULL OR LENGTH(l_import_parties_rec.party_name_txt)=0)) THEN
3463             l_valid_flag := 'N';
3464 
3465             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_PARTY_NAME');
3466             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3467                                   VALUE => l_import_parties_rec.party_index);
3468             l_error_msg := fnd_message.get;
3469             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3470                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3471                 'Party Name is missing');
3472                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3473                 'Contract ID: '||l_import_parties_rec.imp_contract_id);
3474                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3475                 'Party ID: '||l_import_parties_rec.imp_party_id);
3476                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3477                 'l_error_msg: '||l_error_msg);
3478             END IF;
3479        END IF;
3480 
3481         --If l_valid_flag is already set to 'N', we do not perform any more checks
3482         --Party Role should exist
3483         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3484                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3485                     'Checking if user enters party role');
3486         END IF;
3487         IF l_import_parties_rec.party_role_txt IS NOT NULL THEN
3488             l_import_parties_rec.party_role_txt := LTRIM(l_import_parties_rec.party_role_txt);
3489             l_import_parties_rec.party_role_txt := RTRIM(l_import_parties_rec.party_role_txt);
3490         END IF;
3491         IF (l_valid_flag = 'Y' AND (l_import_parties_rec.party_role_txt IS NULL OR LENGTH(l_import_parties_rec.party_role_txt)=0)) THEN
3492             l_valid_flag := 'N';
3493 
3494             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_PARTY_ROLE');
3495             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3496                                   VALUE => l_import_parties_rec.party_index);
3497             l_error_msg := fnd_message.get;
3498             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3499                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3500                 'Party Role is missing');
3501                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3502                 'Contract ID: '||l_import_parties_rec.imp_contract_id);
3503                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3504                 'Party ID: '||l_import_parties_rec.imp_party_id);
3505                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3506                 'l_error_msg: '||l_error_msg);
3507             END IF;
3508 
3509        END IF;
3510 
3511        OPEN c_get_contract_status(l_import_parties_rec.imp_contract_id);
3512        FETCH c_get_contract_status INTO l_contract_status;
3513        CLOSE c_get_contract_status;
3514 
3515        IF l_contract_status = 'SIGNED' THEN
3516 
3517         --If l_valid_flag is already set to 'N', we do not perform any more checks
3518         --Party Signed By should exist
3519         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3520                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3521                     'Checking if user enters party signed by');
3522         END IF;
3523         IF l_import_parties_rec.signed_by_txt IS NOT NULL THEN
3524             l_import_parties_rec.signed_by_txt := LTRIM(l_import_parties_rec.signed_by_txt);
3525             l_import_parties_rec.signed_by_txt := RTRIM(l_import_parties_rec.signed_by_txt);
3526         END IF;
3527         IF (l_valid_flag = 'Y' AND (l_import_parties_rec.signed_by_txt IS NULL OR LENGTH(l_import_parties_rec.signed_by_txt)=0)) THEN
3528             l_valid_flag := 'N';
3529 
3530             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_SIGNED_BY');
3531             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3532                                   VALUE => l_import_parties_rec.party_index);
3533             l_error_msg := fnd_message.get;
3534             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3535                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3536                 'Party Signed By is missing');
3537                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3538                 'Contract ID: '||l_import_parties_rec.imp_contract_id);
3539                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3540                 'Party ID: '||l_import_parties_rec.imp_party_id);
3541                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3542                 'l_error_msg: '||l_error_msg);
3543             END IF;
3544 
3545        END IF;
3546 
3547         --If l_valid_flag is already set to 'N', we do not perform any more checks
3548         --Party Signed By should be <150
3549         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3550                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3551                     'Checking if party signed by is too long');
3552         END IF;
3553         IF (l_valid_flag = 'Y' AND l_import_parties_rec.signed_by_txt IS NOT NULL
3554             AND LENGTH(l_import_parties_rec.signed_by_txt) > l_signed_by_length) THEN
3555             l_valid_flag := 'N';
3556 
3557             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_LONG_SIGNED_BY');
3558             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3559                                   VALUE => l_import_parties_rec.party_index);
3560             l_error_msg := fnd_message.get;
3561             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3562                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3563                 'Party Signed By is too long');
3564                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3565                 'Contract ID: '||l_import_parties_rec.imp_contract_id);
3566                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3567                 'Party ID: '||l_import_parties_rec.imp_party_id);
3568                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3569                 'l_error_msg: '||l_error_msg);
3570             END IF;
3571 
3572        END IF;
3573 
3574         --If l_valid_flag is already set to 'N', we do not perform any more checks
3575         --Party Signed Date should exist
3576         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3577                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3578                     'Checking if user enters party signed date');
3579         END IF;
3580         IF l_import_parties_rec.signed_date IS NOT NULL THEN
3581             l_import_parties_rec.signed_date := LTRIM(l_import_parties_rec.signed_date);
3582             l_import_parties_rec.signed_date := RTRIM(l_import_parties_rec.signed_date);
3583         END IF;
3584         IF (l_valid_flag = 'Y' AND (l_import_parties_rec.signed_date IS NULL OR LENGTH(l_import_parties_rec.signed_date)=0)) THEN
3585             l_valid_flag := 'N';
3586 
3587             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_SIGNED_DATE');
3588             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3589                                   VALUE => l_import_parties_rec.party_index);
3590             l_error_msg := fnd_message.get;
3591             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3592                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3593                 'Party Signed Date is missing');
3594                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3595                 'Contract ID: '||l_import_parties_rec.imp_contract_id);
3596                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3597                 'Party ID: '||l_import_parties_rec.imp_party_id);
3598                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3599                 'l_error_msg: '||l_error_msg);
3600             END IF;
3601 
3602        END IF;
3603 
3604         --If l_valid_flag is already set to 'N', we do not perform any more checks
3605         --Party Signed Date should be the right format
3606         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3607                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3608                     'Checking if party signed date is in the correct format');
3609         END IF;
3610         IF (l_valid_flag = 'Y' AND l_import_parties_rec.signed_date IS NOT NULL) THEN
3611         BEGIN
3612             l_signed_date := to_date(l_import_parties_rec.signed_date, G_IMP_DATE_FORMAT);
3613             EXCEPTION
3614                 WHEN OTHERS THEN
3615                 l_valid_flag := 'N';
3616                 fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_SIGNED_DATE');
3617                 fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3618                                   VALUE => l_import_parties_rec.party_index);
3619                 l_error_msg := fnd_message.get;
3620 
3621                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3622                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3623                     'Party Signed Date is not valid');
3624                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3625                     'Party ID: '||l_import_parties_rec.imp_contract_id);
3626                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
3627                     'l_error_msg: '||l_error_msg);
3628                 END IF;
3629         END;
3630        END IF;
3631 
3632        END IF;
3633 
3634 
3635         --If l_valid_flag is already set to 'N', we do not perform any more checks
3636         --Now call validate_contract_party API
3637         IF (l_valid_flag = 'Y') THEN
3638             OPEN CONTRACT_INTENT_CSR (l_import_parties_rec.imp_contract_id);
3639                 FETCH CONTRACT_INTENT_CSR INTO l_contract_intent;
3640 
3641                 IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3642                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3643                     'l_contract_intent: '||l_contract_intent);
3644                 END IF;
3645 
3646                 IF (l_contract_intent IS NOT NULL ) THEN
3647 
3648                     validate_contract_party(p_api_version => 1.0,
3649                                     p_init_msg_list => FND_API.G_FALSE,
3650                                     p_contract_id => l_import_parties_rec.imp_contract_id,
3651                                     p_party_role_code => l_party_role_code,
3652                                     p_party_role_txt => l_import_parties_rec.party_role_txt,
3653                                     p_party_id => l_party_id,
3654                                     p_party_name => l_import_parties_rec.party_name_txt,
3655                                     p_mode => G_P_MODE_IMPORT,
3656                                     p_intent => l_contract_intent,
3657                                     x_valid_party_flag => l_valid_flag,
3658                                     x_error_code => l_error_code,
3659                                     x_return_status => x_return_status,
3660                                     x_msg_count => x_msg_count,
3661                                     x_msg_data => x_msg_data);
3662 
3663                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3664                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3665                     'After calling validate_contract_party, l_valid_flag: '||l_valid_flag);
3666                     END IF;
3667 
3668                     IF(l_valid_flag = 'N') THEN
3669 
3670                         --ROLE_NOT_EXIST - Party role doesn't exist
3671                         IF l_error_code = 'ROLE_NOT_EXIST' THEN
3672                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_PARTY_ROLE');
3673                             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3674                                       VALUE => l_import_parties_rec.party_index);
3675                             l_error_msg := fnd_message.get;
3676                         END IF;
3677 
3678                         --INV_ROLE_INTENT - Party role and Contract intent combination is invalid
3679                         IF l_error_code = 'INV_ROLE_INTENT' THEN
3680                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_ROLE_INTENT');
3681                             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3682                                     VALUE => l_import_parties_rec.party_index);
3683                             l_error_msg := fnd_message.get;
3684 
3685                         END IF;
3686 
3687                         --PARTY_NOT_EXIST - Party doesn't exist
3688                         IF l_error_code = 'PARTY_NOT_EXIST' THEN
3689                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_PARTY_NAME');
3690                             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3691                                     VALUE => l_import_parties_rec.party_index);
3692                             l_error_msg := fnd_message.get;
3693                         END IF;
3694 
3695                         --INV_CUST_ACCT - Customer party doesn't have any customer accounts
3696                         IF l_error_code = 'INV_CUST_ACCT' THEN
3697                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_CUST_PARTY');
3698                             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3699                                   VALUE => l_import_parties_rec.party_index);
3700                             l_error_msg := fnd_message.get;
3701                         END IF;
3702 
3703                         --PARTY_NOT_UNIQUE - Party in not unique in the Contract
3704                         IF l_error_code = 'PARTY_NOT_UNIQUE' THEN
3705                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_NONUNIQUE_PARTY');
3706                             fnd_message.set_token(TOKEN => 'PARTY_INDEX',
3707                                     VALUE => l_import_parties_rec.party_index);
3708                             l_error_msg := fnd_message.get;
3709 
3710                         END IF;
3711 
3712                     END IF;
3713 /*                ELSE
3714                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3715                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3716                     'Contract type is invalid in csv file');
3717                     END IF;
3718                     --contract intent does not exist
3719                     --this means that contract_type_txt is invalid
3720                     --we need to flag the contract header as invalid
3721                     UPDATE OKC_REP_IMP_CONTRACTS_T
3722                     SET VALID_FLAG = 'N'
3723                     WHERE IMP_CONTRACT_ID = l_import_parties_rec.imp_contract_id;
3724 
3725                     --Also populate the error table
3726                     --Note that in this case we do not wait until the end to populate the error table
3727                     --because this time the error type is 'CONTRACT' and not 'PARTY'.
3728                     --The party may still be valid by itself.
3729                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_CON_TYPE');
3730                     populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
3731                                    p_api_version => 1.0,
3732                                    p_contract_id => l_import_parties_rec.imp_contract_id,
3733                                    p_error_obj_type => G_IMP_CONTRACT_ERROR,
3734                                    p_error_obj_id => l_import_parties_rec.imp_contract_id,
3735                                    p_error_msg_txt => l_error_msg,
3736                                    p_program_id => l_import_parties_rec.program_id,
3737                                    p_program_login_id => l_import_parties_rec.program_login_id,
3738                                    p_program_app_id => l_import_parties_rec.program_application_id,
3739                                    p_run_id => l_import_parties_rec.request_id,
3740                                    x_return_status => x_return_status,
3741                                    x_msg_count => x_msg_count,
3742                                    x_msg_data => x_msg_data); */
3743                 END IF;
3744 
3745             CLOSE CONTRACT_INTENT_CSR;
3746 
3747         END IF;
3748 
3749 
3750         --Populate the error message table
3751         IF(l_valid_flag = 'N' AND l_error_msg IS NOT NULL) THEN
3752             populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
3753                                    p_api_version => 1.0,
3754                                    p_contract_id => l_import_parties_rec.imp_contract_id,
3755                                    p_error_obj_type => G_IMP_PARTY_ERROR,
3756                                    p_error_obj_id => l_import_parties_rec.imp_party_id,
3757                                    p_error_msg_txt => l_error_msg,
3758                                    p_program_id => l_import_parties_rec.program_id,
3759                                    p_program_login_id => l_import_parties_rec.program_login_id,
3760                                    p_program_app_id => l_import_parties_rec.program_application_id,
3761                                    p_run_id => l_import_parties_rec.request_id,
3762                                    x_return_status => x_return_status,
3763                                    x_msg_count => x_msg_count,
3764                                    x_msg_data => x_msg_data);
3765         END IF;
3766 
3767 
3768         --Update the record
3769         IF (l_valid_flag = 'Y') THEN
3770         UPDATE OKC_REP_IMP_PARTIES_T
3771         SET
3772         PARTY_ID = l_party_id,
3773         PARTY_ROLE_CODE = l_party_role_code,
3774         --SIGNED_DATE = l_signed_date,
3775         VALID_FLAG = l_valid_flag
3776         WHERE IMP_PARTY_ID = l_import_parties_rec.imp_party_id;
3777         END IF;
3778 
3779         IF (l_valid_flag = 'N') THEN
3780         UPDATE OKC_REP_IMP_PARTIES_T
3781         SET
3782         VALID_FLAG = l_valid_flag
3783         WHERE IMP_PARTY_ID = l_import_parties_rec.imp_party_id;
3784         END IF;
3785 
3786     END LOOP;
3787     CLOSE IMPORT_PARTIES_CSR;
3788 
3789     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3790       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
3791               'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
3792    END IF;
3793 
3794   EXCEPTION
3795 
3796     WHEN FND_API.G_EXC_ERROR THEN
3797 
3798       IF CONTRACT_INTENT_CSR%ISOPEN THEN
3799         CLOSE CONTRACT_INTENT_CSR;
3800       END IF;
3801 
3802       IF IMPORT_PARTIES_CSR%ISOPEN THEN
3803         CLOSE IMPORT_PARTIES_CSR;
3804       END IF;
3805 
3806       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3807         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3808              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
3809       END IF;
3810 
3811       x_return_status := FND_API.G_RET_STS_ERROR;
3812       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3813                                 p_data  =>  x_msg_data);
3814 
3815     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3816 
3817       IF CONTRACT_INTENT_CSR%ISOPEN THEN
3818         CLOSE CONTRACT_INTENT_CSR;
3819       END IF;
3820 
3821       IF IMPORT_PARTIES_CSR%ISOPEN THEN
3822         CLOSE IMPORT_PARTIES_CSR;
3823       END IF;
3824 
3825       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3826         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3827              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
3828       END IF;
3829 
3830       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
3831       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3832                                 p_data  =>  x_msg_data);
3833 
3834     WHEN OTHERS THEN
3835 
3836       IF CONTRACT_INTENT_CSR%ISOPEN THEN
3837         CLOSE CONTRACT_INTENT_CSR;
3838       END IF;
3839 
3840       IF IMPORT_PARTIES_CSR%ISOPEN THEN
3841         CLOSE IMPORT_PARTIES_CSR;
3842       END IF;
3843 
3844       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3845         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
3846              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
3847       END IF;
3848 
3849       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3850                           p_msg_name     => G_UNEXPECTED_ERROR,
3851                           p_token1       => G_SQLCODE_TOKEN,
3852                           p_token1_value => sqlcode,
3853                           p_token2       => G_SQLERRM_TOKEN,
3854                           p_token2_value => sqlerrm);
3855       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3856       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
3857                                 p_data  =>  x_msg_data);
3858 
3859   END validate_import_parties;
3860 
3861 
3862 
3863 -- Start of comments
3864   --API name      : validate_import_contracts
3865   --Type          : Private.
3866   --Function      : Validates contracts during import
3867   --Pre-reqs      : Currently only called from repository import.
3868   --              : Contracts should be saved to the OKC_REP_IMP_CONTRACTS_T table
3869   --Parameters    :
3870   --IN            : p_api_version         IN NUMBER       Required
3871   --              : p_init_msg_list       IN VARCHAR2     Optional
3872   --                   Default = FND_API.G_FALSE
3873   --              : p_run_id         IN NUMBER       Required
3874   --                    Concurrent Program Request ID
3875   --OUT           : x_return_status       OUT  VARCHAR2(1)
3876   --              : x_msg_count           OUT  NUMBER
3877   --              : x_msg_data            OUT  VARCHAR2(2000)
3878   -- End of comments
3879 
3880  PROCEDURE validate_import_contracts(
3881        p_api_version              IN NUMBER,
3882        p_init_msg_list            IN VARCHAR2,
3883        p_run_id                   IN NUMBER,
3884        p_call_source              IN VARCHAR2,
3885        x_return_status            OUT NOCOPY VARCHAR2,
3886        x_msg_count                OUT NOCOPY NUMBER,
3887        x_msg_data                 OUT NOCOPY VARCHAR2)
3888   IS
3889     l_api_name VARCHAR2(30);
3890     l_api_version       CONSTANT NUMBER := 1.0;
3891 
3892     l_contract_number_length    CONSTANT NUMBER := 150;
3893     l_contract_name_length      CONSTANT NUMBER := 450;
3894     l_description_length        CONSTANT NUMBER := 2000;
3895     l_version_comments_length   CONSTANT NUMBER := 2000;
3896     l_keywords_length           CONSTANT NUMBER := 2000;
3897     l_location_length           CONSTANT NUMBER := 2000;
3898     l_orig_system_code_length   CONSTANT NUMBER := 30;
3899     l_orig_system_id1_length    CONSTANT NUMBER := 100;
3900     l_orig_system_id2_length    CONSTANT NUMBER := 100;
3901 
3902     --these are used to update the record
3903     l_valid_flag                VARCHAR2(1);
3904     l_status_code               VARCHAR2(30);
3905     l_contract_type             VARCHAR2(30);
3906     l_authoring_party_code      VARCHAR2(30);
3907     l_org_id                    NUMBER;
3908     l_owner_user_id             NUMBER;
3909     l_amount                    NUMBER;
3910     l_effective_date            DATE;
3911     l_expiration_date           DATE;
3912     l_currency_code             VARCHAR2(30);
3913     l_contract_id               NUMBER;
3914     l_contract_number           VARCHAR2(151);
3915     l_unique_contract_number    VARCHAR2(151); --used for checking contract number uniqueness
3916 
3917     l_error_msg                 VARCHAR2(2000);
3918 
3919     l_int_parties_count         NUMBER;
3920     l_ext_parties_count         NUMBER;
3921     -- l_intent                    VARCHAR2(30);
3922 
3923     --Used to check auto contract numbering profile option
3924     l_auto_number_yn            VARCHAR2(1);
3925     l_auto_number_option        CONSTANT VARCHAR2(30):= 'OKC_REP_AUTO_CON_NUMBER';
3926 
3927     -- Used for storing contract intent code
3928     l_contract_intent           VARCHAR2(30);
3929 
3930     --kkolukul: additional fields in import
3931     l_termin_comments_length   CONSTANT NUMBER := 2000;
3932     l_cancel_comments_length   CONSTANT NUMBER := 2000;
3933     l_attr_category_length CONSTANT NUMBER := 90;
3934     l_overall_risk_code VARCHAR2(30);
3935     l_notify_contact_role_id NUMBER;
3936     l_con_num_hook NUMBER;
3937 
3938     CURSOR CONTRACT_ID_CSR IS
3939     SELECT OKC_REP_CONTRACTS_ALL_S1.NEXTVAL
3940     FROM DUAL;
3941 
3942     CURSOR CONTRACT_NUMBER_CSR IS
3943     SELECT OKC_REP_CONTRACTS_ALL_S2.NEXTVAL
3944     FROM DUAL;
3945 
3946     CURSOR CONTRACT_NUMBER_CSR_3 IS
3947     SELECT OKC_REP_CONTRACTS_ALL_S3.NEXTVAL
3948     FROM DUAL;
3949 
3950 CURSOR CONTRACT_NUMBER_CSR_4 IS
3951     SELECT OKC_REP_CONTRACTS_ALL_S4.NEXTVAL
3952     FROM DUAL;
3953 
3954 CURSOR CONTRACT_NUMBER_CSR_5 IS
3955     SELECT OKC_REP_CONTRACTS_ALL_S5.NEXTVAL
3956     FROM DUAL;
3957 
3958     CURSOR CONTRACT_NUMBER_UNIQUE_CSR (p_contract_number VARCHAR2,p_contract_type VARCHAR2,p_org_id NUMBER ,p_contract_type_txt VARCHAR2,p_org_name VARCHAR2 , p_imp_contract_id NUMBER) IS
3959     SELECT CONTRACT_NUMBER
3960     FROM OKC_REP_CONTRACTS_ALL
3961     WHERE UPPER(CONTRACT_NUMBER) = UPPER(p_contract_number)
3962     AND   UPPER(CONTRACT_TYPE) = UPPER(p_contract_type)
3963     AND   org_id= p_org_id
3964     UNION
3965     SELECT CONTRACT_NUMBER
3966     FROM OKC_REP_IMP_CONTRACTS_T
3967     WHERE UPPER(CONTRACT_NUMBER) = UPPER(p_contract_number)
3968     AND   UPPER(CONTRACT_TYPE_TXT) = UPPER(p_contract_type_txt)
3969     AND   Upper(ORG_NAME)= p_org_name
3970     AND IMP_CONTRACT_ID <> p_imp_contract_id
3971     --fix issue#7 in bug 4107212, add the following where clause
3972     AND VALID_FLAG <> 'N';
3973 
3974 
3975     CURSOR IMPORT_CONTRACTS_CSR IS
3976     SELECT IMP_CONTRACT_ID,
3977     CONTRACT_NUMBER,
3978     CONTRACT_NAME,
3979     DESCRIPTION,
3980     VERSION_COMMENTS,
3981     CONTRACT_EFFECTIVE_DATE,
3982     CONTRACT_EXPIRATION_DATE,
3983     CURRENCY_CODE,
3984     CONTRACT_AMOUNT,
3985     ORG_NAME,
3986     OWNER_USER_NAME,
3987     PHYSICAL_LOCATION,
3988     KEYWORDS,
3989     CONTRACT_TYPE_TXT,
3990     AUTHORING_PARTY_TXT,
3991     CONTRACT_STATUS_TXT,
3992     PROGRAM_ID,
3993     PROGRAM_LOGIN_ID,
3994     PROGRAM_APPLICATION_ID,
3995     REQUEST_ID,
3996     ORIG_SYSTEM_REFERENCE_CODE,
3997     ORIG_SYSTEM_REFERENCE_ID1,
3998     ORIG_SYSTEM_REFERENCE_ID2,
3999     overall_risk_code,
4000     overall_risk_txt,
4001     cancellation_comments,
4002     cancellation_date,
4003     termination_comments,
4004     termination_date,
4005     expire_ntf_flag,
4006     expire_ntf_period,
4007     notify_contact_role_id,
4008     notify_contact_role_txt,
4009     attribute_category,
4010     attribute1,
4011     attribute2,
4012     attribute3,
4013     attribute4,
4014     attribute5,
4015     attribute6,
4016     attribute7,
4017     attribute8,
4018     attribute9,
4019     attribute10,
4020     attribute11,
4021     attribute12,
4022     attribute13,
4023     attribute14,
4024     attribute15,
4025     reference_document_type,
4026     reference_document_number,
4027     reference_document_id,
4028     run_id,
4029     source_code
4030     FROM
4031     OKC_REP_IMP_CONTRACTS_T
4032     WHERE
4033     run_id = p_run_id
4034     AND Nvl(VALID_FLAG, 'U') IN ('U', 'Y');
4035 
4036     l_import_contracts_rec IMPORT_CONTRACTS_CSR%ROWTYPE;
4037 
4038     CURSOR CONTRACT_STATUS_CSR (p_status_txt VARCHAR2) IS
4039     SELECT LOOKUP_CODE FROM FND_LOOKUPS
4040     WHERE LOOKUP_TYPE = 'OKC_REP_CONTRACT_STATUSES'
4041     AND LOOKUP_CODE IN  ('SIGNED')
4042     AND UPPER(MEANING) = UPPER(p_status_txt);
4043 
4044     CURSOR CONTRACT_STATUS_CSR_SQL (p_status_txt VARCHAR2) IS
4045     SELECT LOOKUP_CODE FROM FND_LOOKUPS
4046     WHERE LOOKUP_TYPE = 'OKC_REP_CONTRACT_STATUSES'
4047     AND LOOKUP_CODE IN  ('SIGNED', 'DRAFT', 'TERMINATED')
4048     AND UPPER(MEANING) = UPPER(p_status_txt);
4049 
4050     CURSOR CONTRACT_TYPE_CSR (p_type_txt VARCHAR2) IS
4051     SELECT DOCUMENT_TYPE
4052     FROM OKC_BUS_DOC_TYPES_V
4053     WHERE DOCUMENT_TYPE_CLASS = 'REPOSITORY'
4054     AND UPPER(NAME) = UPPER(p_type_txt);
4055 
4056     CURSOR CONTRACT_INTENT_CSR (p_imp_contract_id NUMBER) IS
4057     SELECT INTENT
4058     FROM OKC_BUS_DOC_TYPES_V bus_doc,
4059     OKC_REP_IMP_CONTRACTS_T temp
4060     WHERE bus_doc.name = temp.contract_type_txt
4061     AND temp.imp_contract_id = p_imp_contract_id
4062     AND bus_doc.document_type_class = 'REPOSITORY';
4063 
4064     CURSOR ORG_NAME_CSR (p_org_name VARCHAR2) IS
4065     SELECT ORGANIZATION_ID
4066     FROM HR_ALL_ORGANIZATION_UNITS
4067     WHERE UPPER(NAME) = UPPER(p_org_name)
4068     AND mo_global.check_access(ORGANIZATION_ID) = 'Y';
4069 
4070     CURSOR OWNER_NAME_CSR (p_owner_name VARCHAR2) IS
4071     SELECT FND_USER.USER_ID
4072     FROM FND_USER,
4073     PER_PEOPLE_F
4074     WHERE FND_USER.EMPLOYEE_ID = PER_PEOPLE_F.PERSON_ID
4075     AND UPPER(FND_USER.USER_NAME) = UPPER(p_owner_name)
4076     AND SYSDATE >= EFFECTIVE_START_DATE
4077     AND SYSDATE <= EFFECTIVE_END_DATE;
4078 
4079     CURSOR CURRENCY_CSR (p_currency_code VARCHAR2) IS
4080     SELECT CURRENCY_CODE
4081     FROM FND_CURRENCIES
4082     WHERE UPPER(CURRENCY_CODE) = UPPER(p_currency_code)
4083     AND ENABLED_FLAG = 'Y';
4084 
4085     CURSOR AUTHORING_PARTY_CSR (p_authoring_party_txt VARCHAR2) IS
4086     SELECT LOOKUP_CODE
4087     FROM FND_LOOKUPS
4088     WHERE LOOKUP_TYPE = 'OKC_AUTHORING_PARTY'
4089     AND UPPER(MEANING) = UPPER(p_authoring_party_txt);
4090 
4091     CURSOR CONTRACT_PARTIES_CSR (p_contract_id VARCHAR2) IS
4092     SELECT PARTY_ROLE_CODE, PARTY_NAME_TXT
4093     FROM OKC_REP_IMP_PARTIES_T
4094     WHERE IMP_CONTRACT_ID = p_contract_id;
4095 
4096     l_contract_parties_rec CONTRACT_PARTIES_CSR%ROWTYPE;
4097     l_int_party_name OKC_REP_IMP_PARTIES_T.PARTY_NAME_TXT%TYPE;
4098 
4099     --CURSOR PARTY_INTENT_CSR (p_contract_type VARCHAR2, p_party_role_code VARCHAR2) IS
4100     --SELECT INTERNAL_EXTERNAL_FLAG
4101     --FROM OKC_RESP_PARTIES_B RESP_PARTIES,
4102     --OKC_BUS_DOC_TYPES_B DOC_TYPES
4103     --WHERE RESP_PARTIES.RESP_PARTY_CODE = p_party_role_code
4104     --AND RESP_PARTIES.DOCUMENT_TYPE_CLASS = 'REPOSITORY'
4105     --AND DOC_TYPES.INTENT = RESP_PARTIES.INTENT
4106     --AND DOC_TYPES.DOCUMENT_TYPE = p_contract_type;
4107 
4108     CURSOR VALID_PARTIES_CSR (p_contract_id VARCHAR2) IS
4109     SELECT VALID_FLAG, IMP_PARTY_ID
4110     FROM OKC_REP_IMP_PARTIES_T
4111     WHERE IMP_CONTRACT_ID = p_contract_id;
4112 
4113     l_valid_parties_rec VALID_PARTIES_CSR%ROWTYPE;
4114 
4115 
4116     CURSOR VALID_DOCUMENTS_CSR (p_contract_id VARCHAR2) IS
4117     SELECT VALID_FLAG, IMP_DOCUMENT_ID
4118     FROM OKC_REP_IMP_DOCUMENTS_T
4119     WHERE IMP_CONTRACT_ID = p_contract_id;
4120 
4121     l_valid_documents_rec VALID_DOCUMENTS_CSR%ROWTYPE;
4122 
4123 	--Acq Plan Message Cleanup
4124     l_resolved_msg_name VARCHAR2(30);
4125     l_resolved_token VARCHAR2(100);
4126 
4127   CURSOR OVERALL_RISK_CSR(p_overall_risk_txt VARCHAR2) IS
4128       SELECT LOOKUP_CODE
4129     FROM FND_LOOKUPS
4130     WHERE LOOKUP_TYPE = 'OKC_RISK_LEVELS'
4131     AND UPPER(MEANING) = UPPER(p_overall_risk_txt);
4132 
4133     CURSOR notify_role_csr(p_notify_contact_role_txt VARCHAR2) IS
4134       SELECT contact_role_id
4135       FROM okc_rep_contact_roles_tl
4136       WHERE Upper(name) = Upper(p_notify_contact_role_txt)
4137       AND LANGUAGE = userenv('LANG');
4138 
4139 
4140      CURSOR doc_type_auto_num(p_doc_type IN VARCHAR2) IS
4141          select auto_num_enabled_yn from okc_bus_doc_types_b where document_type = p_doc_type ;
4142 
4143          l_auto_num_doc VARCHAR2(1);
4144          l_auto_num_profile VARCHAR2(1);
4145 
4146     BEGIN
4147 
4148     l_api_name := 'validate_import_contracts';
4149 
4150     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4151       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
4152               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
4153       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
4154               'p_run_id = ' || p_run_id);
4155 
4156     END IF;
4157 
4158     -- Standard call to check for call compatibility.
4159     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
4160       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4161     END IF;
4162 
4163     -- Initialize message list if p_init_msg_list is set to TRUE.
4164     IF FND_API.to_Boolean( p_init_msg_list ) THEN
4165       FND_MSG_PUB.initialize;
4166     END IF;
4167 
4168     --  Initialize API return status to success
4169     x_return_status := FND_API.G_RET_STS_SUCCESS;
4170 
4171     OPEN IMPORT_CONTRACTS_CSR;
4172     LOOP
4173         FETCH IMPORT_CONTRACTS_CSR INTO l_import_contracts_rec;
4174         EXIT WHEN IMPORT_CONTRACTS_CSR%NOTFOUND;
4175 
4176         --Initialize l_valid_flag for every record
4177         l_valid_flag := 'Y';
4178         --Initialize l_error_msg for every record
4179         l_error_msg := NULL;
4180         --Initialize l_int_parties_count and l_ext_parties_count
4181         l_int_parties_count := 0;
4182         l_ext_parties_count := 0;
4183         --Initialize l_intent
4184         -- l_intent := NULL;
4185         --Initialize l_contract_id
4186         l_contract_id := NULL;
4187  --Bug 6603192 Initialize l_amount
4188         l_amount := NULL;
4189 
4190 
4191 
4192         --If l_valid_flag is already set to 'N', we do not perform any more checks
4193         --Contract Name is required
4194         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4195                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4196                     'Checking if user enters contract name');
4197         END IF;
4198         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_name IS NULL) THEN
4199             l_valid_flag := 'N';
4200             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_NAME');
4201             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4202                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4203                 'Contract Name is missing');
4204                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4205                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4206                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4207                 'l_error_msg: '||l_error_msg);
4208             END IF;
4209        END IF;
4210 
4211         --If l_valid_flag is already set to 'N', we do not perform any more checks
4212         --Contract Name should be <450
4213         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4214                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4215                     'Checking if contract name is too long');
4216         END IF;
4217         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.contract_name)>l_contract_name_length) THEN
4218             l_valid_flag := 'N';
4219             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_NAME');
4220             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4221                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4222                 'Contract Name is too long');
4223                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4224                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4225                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4226                 'l_error_msg: '||l_error_msg);
4227             END IF;
4228        END IF;
4229 
4230        -- If l_valid_flag is already set to 'N', we do not perform any more checks
4231        -- Validating to report error if a BUY contract is imported in Sales Workbench
4232        IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4233                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4234                      'Checking if BUY intent contract is being imported in Sales Workbench');
4235        END IF;
4236        IF (l_valid_flag = 'Y') THEN
4237            OPEN CONTRACT_INTENT_CSR (l_import_contracts_rec.imp_contract_id);
4238            FETCH CONTRACT_INTENT_CSR INTO l_contract_intent;
4239            IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4240                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4241               'l_contract_intent: '||l_contract_intent);
4242            END IF;
4243            IF ((is_sales_workbench() = 'Y') AND (l_contract_intent = G_INTENT_BUY)) THEN
4244                l_valid_flag := 'N';
4245                l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_SWB_INV_INTENT');
4246                IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4247                    FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4248                    'Buy Intent Contract can not be imported in Sales Workbench ');
4249                    FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4250                    'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4251                    FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4252                    'l_error_msg: '||l_error_msg);
4253                END IF;
4254             END IF;
4255             CLOSE CONTRACT_INTENT_CSR;
4256        END IF;
4257         --If l_valid_flag is already set to 'N', we do not perform any more checks
4258         --Original System Reference Code should be <30
4259         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4260                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4261                     'Checking if Original System Reference Code is too long');
4262         END IF;
4263         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.orig_system_reference_code)>l_orig_system_code_length) THEN
4264             l_valid_flag := 'N';
4265             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_ORIG_CODE');
4266             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4267                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4268                 'Original System Reference Code is too long');
4269                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4270                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4271                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4272                 'l_error_msg: '||l_error_msg);
4273             END IF;
4274        END IF;
4275 
4276         --If l_valid_flag is already set to 'N', we do not perform any more checks
4277         --Original System ID1 should be <100
4278         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4279                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4280                     'Checking if Original System ID1 is too long');
4281         END IF;
4282         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.orig_system_reference_id1)>l_orig_system_id1_length) THEN
4283             l_valid_flag := 'N';
4284             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_ORIG_ID1');
4285             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4286                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4287                 'Original System ID1 is too long');
4288                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4289                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4290                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4291                 'l_error_msg: '||l_error_msg);
4292             END IF;
4293        END IF;
4294 
4295         --If l_valid_flag is already set to 'N', we do not perform any more checks
4296         --Original System ID2 should be <100
4297         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4298                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4299                     'Checking if Original System ID2 is too long');
4300         END IF;
4301         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.orig_system_reference_id2)>l_orig_system_id2_length) THEN
4302             l_valid_flag := 'N';
4303             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_ORIG_ID2');
4304             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4305                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4306                 'Original System ID2 is too long');
4307                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4308                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4309                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4310                 'l_error_msg: '||l_error_msg);
4311             END IF;
4312        END IF;
4313 
4314         --If l_valid_flag is already set to 'N', we do not perform any more checks
4315         --Contract Status is required
4316         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4317                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4318                     'Checking if user enters contract status');
4319         END IF;
4320         IF l_import_contracts_rec.contract_status_txt IS NOT NULL THEN
4321             l_import_contracts_rec.contract_status_txt := LTRIM(l_import_contracts_rec.contract_status_txt);
4322             l_import_contracts_rec.contract_status_txt := RTRIM(l_import_contracts_rec.contract_status_txt);
4323         END IF;
4324 
4325         IF (l_valid_flag = 'Y' AND (l_import_contracts_rec.contract_status_txt IS NULL OR LENGTH(l_import_contracts_rec.contract_status_txt)=0)) THEN
4326             l_valid_flag := 'N';
4327             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_STATUS');
4328             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4329                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4330                 'Contract Status is missing');
4331                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4332                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4333                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4334                 'l_error_msg: '||l_error_msg);
4335             END IF;
4336        END IF;
4337 
4338         --If l_valid_flag is already set to 'N', we do not perform any more checks
4339         --Contract Status can only be 'SIGNED'
4340         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4341                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4342                     'Checking if status is valid');
4343         END IF;
4344         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_status_txt IS NOT NULL) THEN
4345           IF ( p_call_source = 'CP_EXCEL') THEN
4346             OPEN CONTRACT_STATUS_CSR(l_import_contracts_rec.contract_status_txt);
4347                 FETCH CONTRACT_STATUS_CSR INTO l_status_code;
4348                 IF CONTRACT_STATUS_CSR%NOTFOUND THEN
4349                     l_valid_flag := 'N';
4350                     l_status_code := NULL;
4351                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_STATUS');
4352                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4353                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4354                         'Contract Status is invalid');
4355                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4356                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4357                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4358                         'l_error_msg: '||l_error_msg);
4359                     END IF;
4360                 END IF;
4361             CLOSE CONTRACT_STATUS_CSR;
4362            --kkolukul: Changed for API's. Now draft and terminated can also be imported.
4363           ELSE
4364             OPEN CONTRACT_STATUS_CSR_SQL(l_import_contracts_rec.contract_status_txt);
4365                 FETCH CONTRACT_STATUS_CSR_SQL INTO l_status_code;
4366                 IF CONTRACT_STATUS_CSR_SQL%NOTFOUND THEN
4367                     l_valid_flag := 'N';
4368                     l_status_code := NULL;
4369                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_STATUS');
4370                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4371                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4372                         'Contract Status is invalid');
4373                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4374                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4375                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4376                         'l_error_msg: '||l_error_msg);
4377        END IF;
4378                 END IF;
4379             CLOSE CONTRACT_STATUS_CSR_SQL;
4380           END IF;
4381 
4382        END IF;
4383 
4384         --If l_valid_flag is already set to 'N', we do not perform any more checks
4385         --Contract Type is required
4386         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4387                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4388                     'Checking if user enters contract type');
4389         END IF;
4390         IF l_import_contracts_rec.contract_type_txt IS NOT NULL THEN
4391             l_import_contracts_rec.contract_type_txt := LTRIM(l_import_contracts_rec.contract_type_txt);
4392             l_import_contracts_rec.contract_type_txt := RTRIM(l_import_contracts_rec.contract_type_txt);
4393         END IF;
4394         IF (l_valid_flag = 'Y' AND (l_import_contracts_rec.contract_type_txt IS NULL OR LENGTH(l_import_contracts_rec.contract_type_txt)=0)) THEN
4395             l_valid_flag := 'N';
4396             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_CON_TYPE');
4397             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4398                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4399                 'Contract Type is missing');
4400                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4401                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4402                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4403                 'l_error_msg: '||l_error_msg);
4404             END IF;
4405        END IF;
4406 
4407         --If l_valid_flag is already set to 'N', we do not perform any more checks
4408         --Contract Type should resolve to valid contract type code
4409         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4410                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4411                     'Checking if contract type is valid');
4412         END IF;
4413         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_type_txt IS NOT NULL) THEN
4414             OPEN CONTRACT_TYPE_CSR(l_import_contracts_rec.contract_type_txt);
4415                 FETCH CONTRACT_TYPE_CSR INTO l_contract_type;
4416                 IF CONTRACT_TYPE_CSR%NOTFOUND THEN
4417                     l_valid_flag := 'N';
4418                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_CON_TYPE');
4419                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4420                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4421                         'Contract Type is invalid');
4422                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4423                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4424                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4425                         'l_error_msg: '||l_error_msg);
4426                     END IF;
4427                 END IF;
4428             CLOSE CONTRACT_TYPE_CSR;
4429        END IF;
4430 
4431         --If l_valid_flag is already set to 'N', we do not perform any more checks
4432         --Contract Effective Date is required
4433         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4434                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4435                     'Checking if user enters contract effective date');
4436         END IF;
4437         IF l_import_contracts_rec.contract_effective_date IS NOT NULL THEN
4438             l_import_contracts_rec.contract_effective_date := LTRIM(l_import_contracts_rec.contract_effective_date);
4439             l_import_contracts_rec.contract_effective_date := RTRIM(l_import_contracts_rec.contract_effective_date);
4440         END IF;
4441 
4442         IF (l_valid_flag = 'Y' AND (l_import_contracts_rec.contract_effective_date IS NULL OR LENGTH(l_import_contracts_rec.contract_effective_date)=0)) THEN
4443             l_valid_flag := 'N';
4444             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_EFF_DATE');
4445             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4446                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4447                 'Contract Effective Date is missing');
4448                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4449                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4450                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4451                 'l_error_msg: '||l_error_msg);
4452             END IF;
4453        END IF;
4454 
4455         --If l_valid_flag is already set to 'N', we do not perform any more checks
4456         --Contract Effective Date should be in the format specified by user language preference
4457         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4458                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4459                     'Checking if contract effective date is in the correct format');
4460         END IF;
4461         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_effective_date IS NOT NULL) THEN
4462         BEGIN
4463             l_effective_date := to_date(l_import_contracts_rec.contract_effective_date, G_IMP_DATE_FORMAT);
4464             EXCEPTION
4465                 WHEN OTHERS THEN
4466                 l_valid_flag := 'N';
4467                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_EFF_DATE');
4468                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4469                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4470                     'Contract Effective Date is not valid');
4471                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4472                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4473                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4474                     'l_error_msg: '||l_error_msg);
4475                 END IF;
4476         END;
4477        END IF;
4478 
4479         --If l_valid_flag is already set to 'N', we do not perform any more checks
4480         --Contract Expiration Date should be in the format specified by user language preference
4481         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4482                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4483                     'Checking if contract expriation date is in the correct format');
4484         END IF;
4485         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_expiration_date IS NOT NULL) THEN
4486         BEGIN
4487             l_expiration_date := to_date(l_import_contracts_rec.contract_expiration_date, G_IMP_DATE_FORMAT);
4488             EXCEPTION
4489                 WHEN OTHERS THEN
4490                 l_valid_flag := 'N';
4491                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_EXP_DATE');
4492                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4493                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4494                     'Contract Expiration Date is not valid');
4495                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4496                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4497                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4498                     'l_error_msg: '||l_error_msg);
4499                 END IF;
4500         END;
4501        END IF;
4502 
4503         --If l_valid_flag is already set to 'N', we do not perform any more checks
4504         --Contract Expiration Date should be after Contract Effective Date
4505         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4506                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4507                     'Checking if contract expriation date is in the correct format');
4508         END IF;
4509         IF (l_valid_flag = 'Y'
4510                 AND l_import_contracts_rec.contract_effective_date IS NOT NULL
4511                 AND l_import_contracts_rec.contract_expiration_date IS NOT NULL) THEN
4512             --at this point if there are any errors regarding the date format we should have caught it
4513             --so it is safe to convert the dates
4514             IF TRUNC(to_date(l_import_contracts_rec.contract_effective_date,G_IMP_DATE_FORMAT)) > TRUNC(to_date(l_import_contracts_rec.contract_expiration_date,G_IMP_DATE_FORMAT)) THEN
4515                 l_valid_flag := 'N';
4516             --Acq Plan Message Cleanup
4517                 --l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_EXP_BEFORE_EFF');
4518 
4519                 l_resolved_msg_name := OKC_API.resolve_message('OKC_REP_IMP_EXP_BEFORE_EFF',l_contract_type);
4520                 l_resolved_token := OKC_API.resolve_hdr_token(l_contract_type);
4521 
4522                 --l_error_msg := fnd_message.get_string(G_APP_NAME,l_resolved_msg_name,p_token1=>'HDR_TOKEN',p_token1_value => l_resolved_token);
4523 
4524                 l_error_msg := OKC_TERMS_UTIL_PVT.Get_Message(G_APP_NAME,l_resolved_msg_name,p_token1=>'HDR_TOKEN',p_token1_value => l_resolved_token);
4525                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4526                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4527                     'Contract Expiration Date is before Contract Effective Date');
4528                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4529                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4530                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4531                     'l_error_msg: '||l_error_msg);
4532                 END IF;
4533             END IF;
4534        END IF;
4535 
4536         --If l_valid_flag is already set to 'N', we do not perform any more checks
4537         --Organization Name is required
4538         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4539                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4540                     'Checking if user enters organization name');
4541         END IF;
4542         IF l_import_contracts_rec.org_name IS NOT NULL THEN
4543             l_import_contracts_rec.org_name := LTRIM(l_import_contracts_rec.org_name);
4544             l_import_contracts_rec.org_name := RTRIM(l_import_contracts_rec.org_name);
4545         END IF;
4546         IF (l_valid_flag = 'Y' AND (l_import_contracts_rec.org_name IS NULL OR LENGTH(l_import_contracts_rec.org_name)=0)) THEN
4547             l_valid_flag := 'N';
4548             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_ORG');
4549             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4550                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4551                 'Operating Unit is missing');
4552                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4553                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4554                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4555                 'l_error_msg: '||l_error_msg);
4556             END IF;
4557        END IF;
4558 
4559         --If l_valid_flag is already set to 'N', we do not perform any more checks
4560         --Organization Name should resolve to a valid Org ID
4561         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4562                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4563                     'Checking if organization name is valid');
4564         END IF;
4565         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.org_name IS NOT NULL) THEN
4566             OPEN ORG_NAME_CSR(l_import_contracts_rec.org_name);
4567             FETCH ORG_NAME_CSR INTO l_org_id;
4568             IF ORG_NAME_CSR%NOTFOUND THEN
4569                 l_valid_flag := 'N';
4570                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_ORG');
4571                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4572                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4573                     'Operating Unit is invalid');
4574                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4575                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4576                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4577                     'l_error_msg: '||l_error_msg);
4578                 END IF;
4579             END IF;
4580             CLOSE ORG_NAME_CSR;
4581        END IF;
4582 
4583 
4584         --If l_valid_flag is already set to 'N', we do not perform any more checks
4585         --Contract Number is required, if autonumbering is turned off
4586         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4587                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4588                     'Checking if user enters contract number');
4589         END IF;
4590 
4591 
4592         --Checking profile option value
4593         FND_PROFILE.GET(NAME => l_auto_number_option, VAL => l_auto_num_profile);
4594 
4595 
4596         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4597                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4598                     'Profile OKC_REP_AUTO_CON_NUMBER value is: '||l_auto_number_yn);
4599         END IF;
4600 
4601 
4602 
4603          OPEN  doc_type_auto_num(l_contract_type) ;
4604          FETCH doc_type_auto_num INTO l_auto_num_doc;
4605          CLOSE doc_type_auto_num ;
4606 
4607           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4608                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4609                     'Auto numbering at document level : '||l_auto_num_doc );
4610          END IF;
4611 
4612         /* Check the autonumbering setup at document level */
4613 
4614            IF Nvl(l_auto_num_doc,'N') = 'N' THEN
4615               IF Nvl(l_auto_num_profile , 'N') = 'N' THEN
4616                     l_auto_number_yn := 'N';
4617               ELSE
4618                   l_auto_number_yn := 'Y';
4619               END IF;
4620            ELSE
4621                l_auto_number_yn := 'Y';
4622            END IF;
4623 
4624 
4625             --If l_valid_flag is already set to 'N', we do not perform any more checks
4626         --Contract Number is required, if autonumbering is turned off
4627         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4628                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4629                     'Checking if user enters contract number');
4630         END IF;
4631 
4632 
4633 
4634            IF l_auto_number_yn = 'Y' THEN
4635             --If auto number is on
4636             --contract_number has to be null
4637             --otherwise system should error out
4638             IF(l_import_contracts_rec.contract_number IS NOT NULL) THEN
4639                 l_valid_flag := 'N';
4640                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_NONNULL_NUMBER');
4641                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4642                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4643                     'Auto number is turned on, but contract number is not null');
4644                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4645                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4646                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4647                     'l_error_msg: '||l_error_msg);
4648                 END IF;
4649 
4650             ELSE
4651 
4652             l_con_num_hook:=okc_rep_num_hook.get_rep_contract_number(l_contract_type,l_org_id);
4653             l_contract_number := l_con_num_hook;
4654 
4655                IF l_contract_number IS NULL THEN
4656 
4657                 --Get the contract_number from the sequence
4658                 --if auto number is on
4659                 IF l_contract_type ='REP_ACQ'    THEN
4660 
4661                    OPEN CONTRACT_NUMBER_CSR_3;
4662                 FETCH CONTRACT_NUMBER_CSR INTO l_contract_number;
4663                 CLOSE CONTRACT_NUMBER_CSR;
4664 
4665 
4666                 ELSIF l_contract_type='REP_SBCR' THEN
4667                    OPEN CONTRACT_NUMBER_CSR_4;
4668                 FETCH CONTRACT_NUMBER_CSR INTO l_contract_number;
4669                 CLOSE CONTRACT_NUMBER_CSR;
4670 
4671 
4672                 ELSIF l_contract_type='REP_CCT' THEN
4673                     OPEN CONTRACT_NUMBER_CSR_5;
4674                 FETCH CONTRACT_NUMBER_CSR INTO l_contract_number;
4675                 CLOSE CONTRACT_NUMBER_CSR;
4676 
4677 
4678                 ELSE
4679 
4680                 OPEN CONTRACT_NUMBER_CSR;
4681                 FETCH CONTRACT_NUMBER_CSR INTO l_contract_number;
4682                 CLOSE CONTRACT_NUMBER_CSR;
4683 
4684                 END IF;
4685 
4686                END IF;
4687 
4688             END IF;
4689 
4690 
4691 
4692         ELSE
4693 
4694             l_contract_number := l_import_contracts_rec.contract_number;
4695             --If auto number is off
4696             --contract_number is required
4697             --otherwise system should error out
4698             IF(l_import_contracts_rec.contract_number IS NULL) THEN
4699                --skuchima call contract number hook
4700                l_con_num_hook:=okc_rep_num_hook.get_rep_contract_number(l_contract_type,l_org_id);
4701                l_contract_number := l_con_num_hook;
4702 
4703                  IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4704                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4705                     'after call to okc_rep_num_hook.get_rep_contract_number '||l_con_num_hook);
4706                  END IF;
4707 
4708                 IF (l_con_num_hook IS NULL) THEN
4709                 l_valid_flag := 'N';
4710                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_NUMBER');
4711                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4712                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4713                     'Auto number is turned off, but contract number is missing');
4714                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4715                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4716                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4717                     'l_error_msg: '||l_error_msg);
4718                 END IF;
4719 
4720                END IF;
4721 
4722             ELSE
4723                 --contract number is entered
4724                 --we need to check for length
4725                 IF(LENGTH(l_import_contracts_rec.contract_number) > l_contract_number_length) THEN
4726                     l_valid_flag := 'N';
4727                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_NUMBER');
4728                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4729                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4730                         'Conract number is too long');
4731                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4732                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4733                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4734                         'l_error_msg: '||l_error_msg);
4735                     END IF;
4736 
4737                 END IF;
4738             END IF;
4739         END IF;
4740 
4741 
4742 
4743  --If l_valid_flag is already set to 'N', we do not perform any more checks
4744         --Contract Number has to be unique
4745         IF l_valid_flag = 'Y' THEN
4746             OPEN CONTRACT_NUMBER_UNIQUE_CSR(l_contract_number,l_contract_type,l_org_id,l_import_contracts_rec.contract_type_txt,l_import_contracts_rec.org_name,l_import_contracts_rec.imp_contract_id);
4747 
4748                 FETCH CONTRACT_NUMBER_UNIQUE_CSR INTO l_unique_contract_number;
4749                 IF CONTRACT_NUMBER_UNIQUE_CSR%FOUND THEN
4750                     l_valid_flag := 'N';
4751                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_NONUNIQUE_NUMBER');
4752                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4753                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4754                         'Conract number is not unique for the contract_type '|| l_import_contracts_rec.contract_type_txt || ' and org_name '||l_import_contracts_rec.org_name);
4755                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4756                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4757                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4758                         'l_error_msg: '||l_error_msg);
4759                     END IF;
4760                 END IF;
4761             CLOSE CONTRACT_NUMBER_UNIQUE_CSR;
4762         END IF;
4763 
4764 
4765         --If l_valid_flag is already set to 'N', we do not perform any more checks
4766         --Organization Name is required
4767         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4768                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4769                     'Checking if user enters owner user name');
4770         END IF;
4771         IF l_import_contracts_rec.owner_user_name IS NOT NULL THEN
4772             l_import_contracts_rec.owner_user_name := LTRIM(l_import_contracts_rec.owner_user_name);
4773             l_import_contracts_rec.owner_user_name := RTRIM(l_import_contracts_rec.owner_user_name);
4774         END IF;
4775         IF (l_valid_flag = 'Y' AND (l_import_contracts_rec.owner_user_name IS NULL OR LENGTH(l_import_contracts_rec.owner_user_name)=0)) THEN
4776             l_valid_flag := 'N';
4777             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_OWNER');
4778             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4779                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4780                 'Owner User Name is missing');
4781                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4782                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4783                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4784                 'l_error_msg: '||l_error_msg);
4785             END IF;
4786        END IF;
4787 
4788         --If l_valid_flag is already set to 'N', we do not perform any more checks
4789         --Owner User Name should resolve to a valid FND User ID
4790         --Also, the owner needs to be an employee
4791         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4792                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4793                     'Checking if owner user name is valid');
4794         END IF;
4795         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.owner_user_name IS NOT NULL) THEN
4796             OPEN OWNER_NAME_CSR(l_import_contracts_rec.owner_user_name);
4797             FETCH OWNER_NAME_CSR INTO l_owner_user_id;
4798             IF OWNER_NAME_CSR%NOTFOUND THEN
4799                 l_valid_flag := 'N';
4800                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_OWNER');
4801                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4802                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4803                     'Owner User Name is invalid');
4804                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4805                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4806                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4807                     'l_error_msg: '||l_error_msg);
4808                 END IF;
4809             END IF;
4810             CLOSE OWNER_NAME_CSR;
4811        END IF;
4812 
4813         --If l_valid_flag is already set to 'N', we do not perform any more checks
4814         --Currency Code is required if Amount is entered
4815         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4816                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4817                     'Checking if user enters currency when amount is entered');
4818         END IF;
4819         IF l_import_contracts_rec.currency_code IS NOT NULL THEN
4820             l_import_contracts_rec.currency_code := LTRIM(l_import_contracts_rec.currency_code);
4821             l_import_contracts_rec.currency_code := RTRIM(l_import_contracts_rec.currency_code);
4822         END IF;
4823         IF (l_valid_flag = 'Y'
4824                 AND l_import_contracts_rec.contract_amount IS NOT NULL
4825                 AND (l_import_contracts_rec.currency_code IS NULL OR LENGTH(l_import_contracts_rec.currency_code)=0)) THEN
4826             l_valid_flag := 'N';
4827             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_MISS_CURRENCY');
4828             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4829                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4830                 'Owner User Name is missing');
4831                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4832                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4833                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4834                 'l_error_msg: '||l_error_msg);
4835             END IF;
4836        END IF;
4837 
4838         --If l_valid_flag is already set to 'N', we do not perform any more checks
4839         --Currency should exist in FND_CURRENCIES table
4840         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4841                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4842                     'Checking if currency is valid');
4843         END IF;
4844         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.currency_code IS NOT NULL) THEN
4845             OPEN CURRENCY_CSR(l_import_contracts_rec.currency_code);
4846             FETCH CURRENCY_CSR INTO l_currency_code;
4847             IF CURRENCY_CSR%NOTFOUND THEN
4848                 l_valid_flag := 'N';
4849                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_CURRENCY');
4850                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4851                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4852                     'Currency is invalid');
4853                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4854                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4855                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4856                     'l_error_msg: '||l_error_msg);
4857                 END IF;
4858             END IF;
4859             CLOSE CURRENCY_CSR;
4860        END IF;
4861 
4862         --If l_valid_flag is already set to 'N', we do not perform any more checks
4863         --Amout should be in the format specified by user language preference
4864         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4865                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4866                     'Checking if amount is in the correct format');
4867         END IF;
4868         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.contract_amount IS NOT NULL) THEN
4869         BEGIN
4870             --l_amount := to_number(l_import_contracts_rec.contract_amount, G_IMP_NUMBER_FORMAT);
4871             --validation is changed for fixing the bug 14535644
4872             l_amount := to_number(l_import_contracts_rec.contract_amount);
4873             IF Length(l_amount) > 15 THEN
4874                 RAISE Invalid_Number;
4875             END IF;
4876 
4877             EXCEPTION
4878             WHEN OTHERS THEN
4879             l_valid_flag := 'N';
4880             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_AMOUNT');
4881             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4882                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4883                 'Amount is not valid');
4884                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4885                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4886                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4887                 'l_error_msg: '||l_error_msg);
4888             END IF;
4889         END;
4890 
4891 
4892        END IF;
4893 
4894         --If l_valid_flag is already set to 'N', we do not perform any more checks
4895         --Authoring Party should resolve to valid authoring_party_code
4896         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4897                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4898                     'Checking if authoring party is valid');
4899         END IF;
4900         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.authoring_party_txt IS NOT NULL) THEN
4901             OPEN AUTHORING_PARTY_CSR(l_import_contracts_rec.authoring_party_txt);
4902             FETCH AUTHORING_PARTY_CSR INTO l_authoring_party_code;
4903             IF AUTHORING_PARTY_CSR%NOTFOUND THEN
4904                 l_valid_flag := 'N';
4905                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_AUTH_PARTY');
4906                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4907                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4908                     'Authoring Party is invalid');
4909                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4910                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4911                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4912                     'l_error_msg: '||l_error_msg);
4913                 END IF;
4914             END IF;
4915             CLOSE AUTHORING_PARTY_CSR;
4916        END IF;
4917 
4918         --If l_valid_flag is already set to 'N', we do not perform any more checks
4919         --Physical Location should be <2000
4920         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4921                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4922                     'Checking if Physical Location is too long');
4923         END IF;
4924         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.physical_location)>l_location_length) THEN
4925             l_valid_flag := 'N';
4926             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_LOCATION');
4927             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4928                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4929                 'Physical Location is too long');
4930                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4931                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4932                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4933                 'l_error_msg: '||l_error_msg);
4934             END IF;
4935        END IF;
4936 
4937         --If l_valid_flag is already set to 'N', we do not perform any more checks
4938         --Keywords should be <2000
4939         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4940                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4941                     'Checking if keywords is too long');
4942         END IF;
4943         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.keywords)>l_keywords_length) THEN
4944             l_valid_flag := 'N';
4945             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_KEYWORDS');
4946             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4947                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4948                 'Keywords is too long');
4949                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4950                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4951                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4952                 'l_error_msg: '||l_error_msg);
4953             END IF;
4954        END IF;
4955 
4956         --If l_valid_flag is already set to 'N', we do not perform any more checks
4957         --Description should be <2000
4958         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4959                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4960                     'Checking if description is too long');
4961         END IF;
4962         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.description)>l_description_length) THEN
4963             l_valid_flag := 'N';
4964             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_DESC');
4965             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4966                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4967                 'Description is too long');
4968                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4969                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4970                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4971                 'l_error_msg: '||l_error_msg);
4972             END IF;
4973        END IF;
4974 
4975         --If l_valid_flag is already set to 'N', we do not perform any more checks
4976         --Version Comments should be <2000
4977         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4978                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4979                     'Checking if version comments is too long');
4980         END IF;
4981         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.version_comments)>l_version_comments_length) THEN
4982             l_valid_flag := 'N';
4983             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_COMMENTS');
4984             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4985                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4986                 'Version Comments is too long');
4987                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4988                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
4989                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
4990                 'l_error_msg: '||l_error_msg);
4991             END IF;
4992        END IF;
4993 
4994         --If l_valid_flag is already set to 'N', we do not perform any more checks
4995         --Validate Contract Parties
4996         --1. There should exactly one internal party
4997         --2. There should be at least one external party
4998         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4999                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5000                     'Validating contract parties');
5001         END IF;
5002         IF (l_valid_flag = 'Y') THEN
5003             OPEN CONTRACT_PARTIES_CSR(l_import_contracts_rec.imp_contract_id);
5004             LOOP
5005                 FETCH CONTRACT_PARTIES_CSR INTO l_contract_parties_rec;
5006                 EXIT WHEN CONTRACT_PARTIES_CSR%NOTFOUND;
5007 
5008                 --At this point if the l_valid_flag is still 'Y', it means that l_contract_type is resolved
5009                 IF (l_contract_parties_rec.party_role_code = G_PARTY_ROLE_INTERNAL) THEN
5010                   l_int_parties_count := l_int_parties_count + 1;
5011       l_int_party_name := l_contract_parties_rec.party_name_txt;
5012                 ELSE
5013                   l_ext_parties_count := l_ext_parties_count + 1;
5014                 END IF;
5015             END LOOP;
5016             CLOSE CONTRACT_PARTIES_CSR;
5017 
5018             IF l_int_parties_count <> 1 THEN
5019                 l_valid_flag := 'N';
5020                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_INT_PARTIES');
5021                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5022                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5023                     'There are not exactly one internal party');
5024                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5025                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5026                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5027                     'l_error_msg: '||l_error_msg);
5028                 END IF;
5029           ELSE
5030                 --fix bug 4160416, need to validate internal party name with the org name in the header
5031                 IF l_import_contracts_rec.org_name <> l_int_party_name THEN
5032                     l_valid_flag := 'N';
5033                     l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_INT_PARTY_NAME');
5034                     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5035                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5036                         'Internal party name and org name are not matching');
5037                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5038                         'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5039                         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5040                         'l_error_msg: '||l_error_msg);
5041                     END IF;
5042                 END IF;
5043             END IF;
5044 
5045           --kkolukul: External party not mandatory
5046           /*
5047             IF l_ext_parties_count <1 THEN
5048                 l_valid_flag := 'N';
5049                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_EXT_PARTIES');
5050                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5051                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5052                     'There are less than one external party');
5053                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5054                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5055                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5056                     'l_error_msg: '||l_error_msg);
5057                 END IF;
5058             END IF;  */
5059             END IF;
5060 
5061        --kkolukul
5062        --new validation for create Contract API's
5063        --If l_valid_flag is already set to 'N', we do not perform any more checks
5064         --termination Comments should be <2000
5065         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5066                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5067                     'Checking if version comments is too long');
5068         END IF;
5069         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.termination_comments)>l_termin_comments_length) THEN
5070             l_valid_flag := 'N';
5071             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_COMMENTS');
5072             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5073                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5074                 'Termination comments is too long');
5075                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5076                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5077                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5078                 'l_error_msg: '||l_error_msg);
5079             END IF;
5080        END IF;
5081 
5082         --If l_valid_flag is already set to 'N', we do not perform any more checks
5083         --cancellation Comments should be <2000
5084         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5085                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5086                     'Checking if version comments is too long');
5087         END IF;
5088 
5089 
5090         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.cancellation_comments)>l_cancel_comments_length) THEN
5091             l_valid_flag := 'N';
5092             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_COMMENTS');
5093             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5094                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5095                 'cancellation comments is too long');
5096                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5097                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5098                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5099                 'l_error_msg: '||l_error_msg);
5100             END IF;
5101        END IF;
5102 
5103          --If l_valid_flag is already set to 'N', we do not perform any more checks
5104         --Cancellation Date should be in the format specified by user language preference
5105         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5106                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5107                     'Checking if Cancellation expriation date is in the correct format');
5108         END IF;
5109         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.cancellation_date IS NOT NULL) THEN
5110         BEGIN
5111             l_expiration_date := to_date(l_import_contracts_rec.cancellation_date, G_IMP_DATE_FORMAT);
5112             EXCEPTION
5113                 WHEN OTHERS THEN
5114                 l_valid_flag := 'N';
5115                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_EXP_DATE');
5116                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5117                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5118                     'Contract Expiration Date is not valid');
5119                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5120                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5121                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5122                     'l_error_msg: '||l_error_msg);
5123                 END IF;
5124         END;
5125        END IF;
5126 
5127         --If l_valid_flag is already set to 'N', we do not perform any more checks
5128         --Termination Date should be in the format specified by user language preference
5129         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5130                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5131                     'Checking if Termination expriation date is in the correct format');
5132         END IF;
5133         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.termination_date IS NOT NULL) THEN
5134         BEGIN
5135             l_expiration_date := to_date(l_import_contracts_rec.termination_date, G_IMP_DATE_FORMAT);
5136             EXCEPTION
5137                 WHEN OTHERS THEN
5138                 l_valid_flag := 'N';
5139                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_EXP_DATE');
5140                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5141                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5142                     'Contract Expiration Date is not valid');
5143                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5144                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5145                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5146                     'l_error_msg: '||l_error_msg);
5147                 END IF;
5148         END;
5149        END IF;
5150 
5151          --If l_valid_flag is already set to 'N', we do not perform any more checks
5152         --Overall Risk should resolve to valid overall_risk_code
5153         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5154                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5155                     'Checking if authoring party is valid');
5156         END IF;
5157         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.overall_risk_txt IS NOT NULL) THEN
5158             OPEN OVERALL_RISK_CSR(l_import_contracts_rec.overall_risk_txt);
5159             FETCH OVERALL_RISK_CSR INTO l_overall_risk_code;
5160             IF OVERALL_RISK_CSR%NOTFOUND THEN
5161                 l_valid_flag := 'N';
5162                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_RISK_CODE');
5163                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5164                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5165                     'Overall Risk is invalid');
5166                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5167                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5168                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5169                     'l_error_msg: '||l_error_msg);
5170                 END IF;
5171             END IF;
5172             CLOSE OVERALL_RISK_CSR;
5173        END IF;
5174 
5175         --If l_valid_flag is already set to 'N', we do not perform any more checks
5176         --Attribute Category should be <90
5177         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5178                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5179                     'Checking if Attribute Category is too long');
5180         END IF;
5181         IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.attribute_category) > l_attr_category_length) THEN
5182             l_valid_flag := 'N';
5183             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_COMMENTS');
5184             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5185                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5186                 'cancellation comments is too long');
5187                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5188                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5189                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5190                 'l_error_msg: '||l_error_msg);
5191             END IF;
5192        END IF;
5193 
5194         --If l_valid_flag is already set to 'N', we do not perform any more checks
5195         --Attributes should be <450
5196         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5197                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5198                     'Checking if Attribute 1..15 is too long');
5199         END IF;
5200 
5201        /* FOR i IN 1..15 LOOP
5202            --Need to check if this syntax works.
5203           IF (l_valid_flag = 'Y' AND LENGTH(l_import_contracts_rec.attribute||i) > l_attribute_length) THEN
5204             l_valid_flag := 'N';
5205             l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_LONG_COMMENTS');
5206             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5207                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5208                 'Attribute'||i||' is too long');
5209                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5210                 'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5211                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5212                 'l_error_msg: '||l_error_msg);
5213             END IF;
5214           END IF;
5215         END LOOP;    */
5216 
5217           --If l_valid_flag is already set to 'N', we do not perform any more checks
5218         --notify_contact_role_txt should resolve to valid contact role id
5219         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5220                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5221                     'Checking if notify role is valid');
5222         END IF;
5223         IF (l_valid_flag = 'Y' AND l_import_contracts_rec.notify_contact_role_txt IS NOT NULL) THEN
5224             OPEN notify_role_csr(l_import_contracts_rec.notify_contact_role_txt);
5225             FETCH notify_role_csr INTO l_notify_contact_role_id;
5226             IF notify_role_csr%NOTFOUND THEN
5227                 l_valid_flag := 'N';
5228                 l_error_msg := fnd_message.get_string(G_APP_NAME,'OKC_REP_IMP_INV_NOTIFY_ROLE');
5229                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5230                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5231                     'Overall Risk is invalid');
5232                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5233                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5234                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5235                     'l_error_msg: '||l_error_msg);
5236                 END IF;
5237             END IF;
5238             CLOSE notify_role_csr;
5239        END IF;
5240 
5241 
5242         --If any of the parties and documents belonging to the contract is invalid,
5243         --We should flag the contract as invalid
5244 
5245         IF l_valid_flag = 'Y' THEN
5246             OPEN VALID_PARTIES_CSR(l_import_contracts_rec.imp_contract_id);
5247             LOOP
5248             FETCH VALID_PARTIES_CSR INTO l_valid_parties_rec;
5249             EXIT WHEN VALID_PARTIES_CSR%NOTFOUND;
5250 
5251             IF l_valid_parties_rec.valid_flag = 'N' THEN
5252                 l_valid_flag := 'N';
5253                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5254                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5255                     'One of the contract parties is invalid');
5256                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5257                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5258                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5259                     'Party ID: '||l_valid_parties_rec.imp_party_id);
5260                 END IF;
5261             END IF;
5262             END LOOP;
5263             CLOSE VALID_PARTIES_CSR;
5264         END IF;
5265 
5266         IF l_valid_flag = 'Y' THEN
5267 
5268             OPEN VALID_DOCUMENTS_CSR(l_import_contracts_rec.imp_contract_id);
5269             LOOP
5270             FETCH VALID_DOCUMENTS_CSR INTO l_valid_documents_rec;
5271             EXIT WHEN VALID_DOCUMENTS_CSR%NOTFOUND;
5272 
5273             IF l_valid_documents_rec.valid_flag = 'N' THEN
5274                 l_valid_flag := 'N';
5275                 IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5276                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5277                     'One of the contract documents is invalid');
5278                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5279                     'Contract ID: '||l_import_contracts_rec.imp_contract_id);
5280                     FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
5281                     'Document ID: '||l_valid_documents_rec.imp_document_id);
5282                 END IF;
5283             END IF;
5284             END LOOP;
5285             CLOSE VALID_DOCUMENTS_CSR;
5286         END IF;
5287 
5288 
5289         --Populate the error message table
5290         IF(l_valid_flag = 'N' AND l_error_msg IS NOT NULL) THEN
5291             populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
5292                                    p_api_version => 1.0,
5293                                    p_contract_id => l_import_contracts_rec.imp_contract_id,
5294                                    p_error_obj_type => G_IMP_CONTRACT_ERROR,
5295                                    p_error_obj_id => l_import_contracts_rec.imp_contract_id,
5296                                    p_error_msg_txt => l_error_msg,
5297                                    p_program_id => l_import_contracts_rec.program_id,
5298                                    p_program_login_id => l_import_contracts_rec.program_login_id,
5299                                    p_program_app_id => l_import_contracts_rec.program_application_id,
5300                                    p_run_id => l_import_contracts_rec.run_id,
5301                                    x_return_status => x_return_status,
5302                                    x_msg_count => x_msg_count,
5303                                    x_msg_data => x_msg_data);
5304         END IF;
5305 
5306        -- l_contract_number := l_import_contracts_rec.contract_number;
5307 
5308         --Get the contract_id from the sequence
5309         --We do not waste contract IDs on invalid contracts
5310         IF(l_valid_flag = 'Y') THEN
5311             OPEN CONTRACT_ID_CSR;
5312             FETCH CONTRACT_ID_CSR INTO l_contract_id;
5313             CLOSE CONTRACT_ID_CSR;
5314 
5315             --Also update okc_rep_imp_parties_t and okc_rep_imp_documents_t
5316             --with the new contract_id
5317             UPDATE OKC_REP_IMP_PARTIES_T
5318             SET CONTRACT_ID = l_contract_id
5319             WHERE IMP_CONTRACT_ID = l_import_contracts_rec.imp_contract_id;
5320 
5321             UPDATE OKC_REP_IMP_DOCUMENTS_T
5322             SET CONTRACT_ID = l_contract_id
5323             WHERE IMP_CONTRACT_ID = l_import_contracts_rec.imp_contract_id;
5324 
5325 
5326         END IF;
5327 
5328         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5329             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
5330               'l_contract_id: '||l_contract_id);
5331             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
5332               'l_contract_number: '||l_contract_number);
5333         END IF;
5334 
5335         IF (l_valid_flag = 'Y') THEN
5336         --Update the record
5337         UPDATE OKC_REP_IMP_CONTRACTS_T
5338         SET
5339         CONTRACT_ID = l_contract_id,
5340         CONTRACT_NUMBER = l_contract_number,
5341         CONTRACT_STATUS_CODE = l_status_code,
5342         CONTRACT_TYPE = l_contract_type,
5343         AUTHORING_PARTY_CODE = l_authoring_party_code,
5344         ORG_ID = l_org_id,
5345         OWNER_USER_ID = l_owner_user_id,
5346         --CONTRACT_EFFECTIVE_DATE = l_effective_date,
5347         --CONTRACT_EXPIRATION_DATE = l_expiration_date,
5348         CONTRACT_AMOUNT = l_amount,
5349           notify_contact_role_id = l_notify_contact_role_id,
5350           overall_risk_code = l_overall_risk_code,
5351           latest_signed_ver_number = Decode(l_status_code, 'SIGNED', 1),
5352           VALID_FLAG = l_valid_flag
5353           WHERE IMP_CONTRACT_ID = l_import_contracts_rec.imp_contract_id;
5354 
5355 
5356           --Update risks table with the contract id
5357           UPDATE okc_rep_imp_risks_t
5358           SET
5359           business_document_id = l_contract_id
5360         WHERE IMP_CONTRACT_ID = l_import_contracts_rec.imp_contract_id;
5361 
5362         END IF;
5363 
5364 
5365         IF(l_valid_flag = 'N') THEN
5366         UPDATE OKC_REP_IMP_CONTRACTS_T
5367         SET
5368         VALID_FLAG = l_valid_flag
5369         WHERE IMP_CONTRACT_ID = l_import_contracts_rec.imp_contract_id;
5370         END IF;
5371 
5372     END LOOP;
5373 
5374     CLOSE IMPORT_CONTRACTS_CSR;
5375 
5376     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5377       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
5378               'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
5379    END IF;
5380 
5381 
5382   EXCEPTION
5383 
5384     WHEN FND_API.G_EXC_ERROR THEN
5385 
5386     IF CONTRACT_ID_CSR%ISOPEN THEN
5387         CLOSE CONTRACT_ID_CSR;
5388     END IF;
5389 
5390     IF CONTRACT_NUMBER_CSR%ISOPEN THEN
5391         CLOSE CONTRACT_NUMBER_CSR;
5392     END IF;
5393 
5394     IF CONTRACT_INTENT_CSR%ISOPEN THEN
5395         CLOSE CONTRACT_INTENT_CSR;
5396     END IF;
5397 
5398     IF IMPORT_CONTRACTS_CSR%ISOPEN THEN
5399         CLOSE IMPORT_CONTRACTS_CSR;
5400     END IF;
5401     IF CONTRACT_NUMBER_UNIQUE_CSR%ISOPEN THEN
5402         CLOSE CONTRACT_NUMBER_UNIQUE_CSR;
5403     END IF;
5404     IF CONTRACT_STATUS_CSR%ISOPEN THEN
5405         CLOSE CONTRACT_STATUS_CSR;
5406     END IF;
5407     IF CONTRACT_STATUS_CSR_SQL%ISOPEN THEN
5408         CLOSE CONTRACT_STATUS_CSR_SQL;
5409     END IF;
5410     IF CONTRACT_TYPE_CSR%ISOPEN THEN
5411         CLOSE CONTRACT_TYPE_CSR;
5412     END IF;
5413     IF ORG_NAME_CSR%ISOPEN THEN
5414         CLOSE ORG_NAME_CSR;
5415     END IF;
5416     IF OWNER_NAME_CSR%ISOPEN THEN
5417         CLOSE OWNER_NAME_CSR;
5418     END IF;
5419     IF CURRENCY_CSR%ISOPEN THEN
5420         CLOSE CURRENCY_CSR;
5421     END IF;
5422     IF AUTHORING_PARTY_CSR%ISOPEN THEN
5423         CLOSE AUTHORING_PARTY_CSR;
5424     END IF;
5425     IF CONTRACT_PARTIES_CSR%ISOPEN THEN
5426         CLOSE CONTRACT_PARTIES_CSR;
5427     END IF;
5428     --IF PARTY_INTENT_CSR%ISOPEN THEN
5429     --    CLOSE PARTY_INTENT_CSR;
5430     --END IF;
5431     IF VALID_PARTIES_CSR%ISOPEN THEN
5432         CLOSE VALID_PARTIES_CSR;
5433     END IF;
5434     IF VALID_DOCUMENTS_CSR%ISOPEN THEN
5435         CLOSE VALID_DOCUMENTS_CSR;
5436     END IF;
5437 
5438       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5439         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
5440              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
5441       END IF;
5442 
5443       x_return_status := FND_API.G_RET_STS_ERROR;
5444       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
5445                                 p_data  =>  x_msg_data);
5446 
5447     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5448     IF CONTRACT_ID_CSR%ISOPEN THEN
5449         CLOSE CONTRACT_ID_CSR;
5450     END IF;
5451 
5452     IF CONTRACT_NUMBER_CSR%ISOPEN THEN
5453         CLOSE CONTRACT_NUMBER_CSR;
5454     END IF;
5455     IF CONTRACT_NUMBER_UNIQUE_CSR%ISOPEN THEN
5456         CLOSE CONTRACT_NUMBER_UNIQUE_CSR;
5457     END IF;
5458 
5459     IF CONTRACT_INTENT_CSR%ISOPEN THEN
5460         CLOSE CONTRACT_INTENT_CSR;
5461     END IF;
5462 
5463     IF IMPORT_CONTRACTS_CSR%ISOPEN THEN
5464         CLOSE IMPORT_CONTRACTS_CSR;
5465     END IF;
5466     IF CONTRACT_STATUS_CSR%ISOPEN THEN
5467         CLOSE CONTRACT_STATUS_CSR;
5468     END IF;
5469     IF CONTRACT_STATUS_CSR_SQL%ISOPEN THEN
5470         CLOSE CONTRACT_STATUS_CSR_SQL;
5471     END IF;
5472     IF CONTRACT_TYPE_CSR%ISOPEN THEN
5473         CLOSE CONTRACT_TYPE_CSR;
5474     END IF;
5475     IF ORG_NAME_CSR%ISOPEN THEN
5476         CLOSE ORG_NAME_CSR;
5477     END IF;
5478     IF OWNER_NAME_CSR%ISOPEN THEN
5479         CLOSE OWNER_NAME_CSR;
5480     END IF;
5481     IF CURRENCY_CSR%ISOPEN THEN
5482         CLOSE CURRENCY_CSR;
5483     END IF;
5484     IF AUTHORING_PARTY_CSR%ISOPEN THEN
5485         CLOSE AUTHORING_PARTY_CSR;
5486     END IF;
5487     IF CONTRACT_PARTIES_CSR%ISOPEN THEN
5488         CLOSE CONTRACT_PARTIES_CSR;
5489     END IF;
5490     --IF PARTY_INTENT_CSR%ISOPEN THEN
5491     --    CLOSE PARTY_INTENT_CSR;
5492     --END IF;
5493     IF VALID_PARTIES_CSR%ISOPEN THEN
5494         CLOSE VALID_PARTIES_CSR;
5495     END IF;
5496     IF VALID_DOCUMENTS_CSR%ISOPEN THEN
5497         CLOSE VALID_DOCUMENTS_CSR;
5498     END IF;
5499 
5500       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5501         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
5502              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
5503       END IF;
5504 
5505       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
5506       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
5507                                 p_data  =>  x_msg_data);
5508 
5509     WHEN OTHERS THEN
5510     IF CONTRACT_ID_CSR%ISOPEN THEN
5511         CLOSE CONTRACT_ID_CSR;
5512     END IF;
5513 
5514     IF CONTRACT_NUMBER_CSR%ISOPEN THEN
5515         CLOSE CONTRACT_NUMBER_CSR;
5516     END IF;
5517 
5518     IF CONTRACT_NUMBER_UNIQUE_CSR%ISOPEN THEN
5519         CLOSE CONTRACT_NUMBER_UNIQUE_CSR;
5520     END IF;
5521 
5522     IF CONTRACT_INTENT_CSR%ISOPEN THEN
5523         CLOSE CONTRACT_INTENT_CSR;
5524     END IF;
5525 
5526     IF IMPORT_CONTRACTS_CSR%ISOPEN THEN
5527         CLOSE IMPORT_CONTRACTS_CSR;
5528     END IF;
5529     IF CONTRACT_STATUS_CSR%ISOPEN THEN
5530         CLOSE CONTRACT_STATUS_CSR;
5531     END IF;
5532     IF CONTRACT_STATUS_CSR_SQL%ISOPEN THEN
5533         CLOSE CONTRACT_STATUS_CSR_SQL;
5534     END IF;
5535     IF CONTRACT_TYPE_CSR%ISOPEN THEN
5536         CLOSE CONTRACT_TYPE_CSR;
5537     END IF;
5538     IF ORG_NAME_CSR%ISOPEN THEN
5539         CLOSE ORG_NAME_CSR;
5540     END IF;
5541     IF OWNER_NAME_CSR%ISOPEN THEN
5542         CLOSE OWNER_NAME_CSR;
5543     END IF;
5544     IF CURRENCY_CSR%ISOPEN THEN
5545         CLOSE CURRENCY_CSR;
5546     END IF;
5547     IF AUTHORING_PARTY_CSR%ISOPEN THEN
5548         CLOSE AUTHORING_PARTY_CSR;
5549     END IF;
5550     IF CONTRACT_PARTIES_CSR%ISOPEN THEN
5551         CLOSE CONTRACT_PARTIES_CSR;
5552     END IF;
5553     --IF PARTY_INTENT_CSR%ISOPEN THEN
5554     --    CLOSE PARTY_INTENT_CSR;
5555     --END IF;
5556     IF VALID_PARTIES_CSR%ISOPEN THEN
5557         CLOSE VALID_PARTIES_CSR;
5558     END IF;
5559     IF VALID_DOCUMENTS_CSR%ISOPEN THEN
5560         CLOSE VALID_DOCUMENTS_CSR;
5561     END IF;
5562 
5563 
5564       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5565         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
5566              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
5567       END IF;
5568 
5569       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5570                           p_msg_name     => G_UNEXPECTED_ERROR,
5571                           p_token1       => G_SQLCODE_TOKEN,
5572                           p_token1_value => sqlcode,
5573                           p_token2       => G_SQLERRM_TOKEN,
5574                           p_token2_value => sqlerrm);
5575       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5576       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
5577                                 p_data  =>  x_msg_data);
5578 
5579   END validate_import_contracts;
5580 
5581 
5582 
5583 
5584 
5585   -- Start of comments
5586   --API name      : insert_prod_data
5587   --Type          : Private.
5588   --Function      : Insert validated contracts and parties into production tables
5589   --                i.e., move from OKC_REP_IMP_CONTRACTS_T and OKC_REP_IMP_PARTIES_T
5590   --                to OKC_REP_CONTRACTS_ALL AND OKC_REP_CONTRACT_PARTIES
5591   --                It also insert a record into OKC_REP_CON_STATUS_HIST for every record
5592   --                inserted into OKC_REP_CONTRACTS_ALL.
5593   --Pre-reqs      : Currently only called from repository import.
5594   --                Contracts should be saved to the OKC_REP_IMP_CONTRACTS_T table
5595   --                Date should all be validated in OKC_REP_IMP_CONTRACTS_T,
5596   --              : OKC_REP_IMP_PARTIES_T, and OKC_REP_IMP_DOCUMENTS_T
5597   --Parameters    :
5598   --IN            : p_api_version         IN NUMBER       Required
5599   --              : p_init_msg_list       IN VARCHAR2     Optional
5600   --                   Default = FND_API.G_FALSE
5601   --              : p_commit             IN VARCHAR2  Optional
5602   --                   Default = FND_API.G_FALSE
5603   --              : p_run_id         IN NUMBER       Required
5604   --                    Concurrent Program Request ID
5605   --OUT           : x_return_status       OUT  VARCHAR2(1)
5606   --              : x_msg_count           OUT  NUMBER
5607   --              : x_msg_data            OUT  VARCHAR2(2000)
5608   --              : x_number_inserted     OUT NUMBER
5609   -- End of comments
5610 
5611   PROCEDURE insert_prod_data (
5612     p_api_version       IN  NUMBER,
5613     p_init_msg_list     IN  VARCHAR2,
5614     p_commit            IN  VARCHAR2,
5615     p_run_id        IN  NUMBER,
5616     x_msg_data          OUT NOCOPY VARCHAR2,
5617     x_msg_count         OUT NOCOPY NUMBER,
5618     x_return_status     OUT NOCOPY VARCHAR2,
5619     x_number_inserted   OUT NOCOPY NUMBER)
5620   IS
5621 
5622     l_api_name            CONSTANT VARCHAR2(30):='insert_prod_data';
5623     l_api_version         CONSTANT NUMBER := 1.0;
5624 
5625     l_number_inserted   NUMBER;
5626     l_number_valid      NUMBER;
5627 
5628     l_min_contract_id     NUMBER;
5629     l_max_contract_id     NUMBER;
5630     l_start_contract_id   NUMBER;
5631     l_insert_batch_size   NUMBER;
5632 
5633     CURSOR number_inserted_csr IS
5634     SELECT COUNT(contract_id)
5635     FROM   okc_rep_contracts_all
5636     WHERE  run_id = p_run_id;
5637 
5638     CURSOR contract_id_cur IS
5639     SELECT
5640         MIN(contract_id) AS min_contract_id,
5641         MAX(contract_id) AS max_contract_id,
5642         COUNT(contract_id)
5643     FROM  okc_rep_imp_contracts_t
5644     WHERE run_id = p_run_id
5645     AND   valid_flag = 'Y';
5646 
5647   BEGIN
5648 
5649      FND_FILE.PUT_LINE(FND_FILE.LOG, '**********************************');
5650      FND_FILE.PUT_LINE(FND_FILE.LOG, '***** BEGIN insert_prod_data *****');
5651      FND_FILE.PUT_LINE(FND_FILE.LOG, '**********************************');
5652 
5653      FND_FILE.PUT_LINE(FND_FILE.LOG, 'p_api_version = ' || p_api_version);
5654      FND_FILE.PUT_LINE(FND_FILE.LOG, 'p_run_id = ' || p_run_id);
5655 
5656      l_insert_batch_size := 50;
5657      l_number_inserted := 0;
5658      l_number_valid  := -1;
5659 
5660      FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_insert_batch_size = ' || l_insert_batch_size);
5661 
5662     -- Standard call to check for call compatibility.
5663     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
5664       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5665     END IF;
5666 
5667     -- Initialize message list if p_init_msg_list is set to TRUE.
5668     IF FND_API.to_Boolean( p_init_msg_list ) THEN
5669       FND_MSG_PUB.initialize;
5670     END IF;
5671 
5672     --  Initialize API return status to success
5673     x_return_status := FND_API.G_RET_STS_SUCCESS;
5674 
5675     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5676       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
5677               'Inserting contracts into production table...');
5678     END IF;
5679 
5680     l_min_contract_id := 0;
5681     l_max_contract_id := 0;
5682 
5683     OPEN  contract_id_cur;
5684     FETCH contract_id_cur INTO l_min_contract_id, l_max_contract_id, l_number_valid;
5685     CLOSE contract_id_cur;
5686 
5687     FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_number_valid = ' || l_number_valid);
5688 
5689     IF l_number_valid > 0 THEN
5690 
5691 
5692           FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_min_contract_id = ' || l_min_contract_id);
5693           FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_max_contract_id = ' || l_max_contract_id);
5694 
5695           l_start_contract_id := l_min_contract_id;
5696 
5697           FOR i IN 0..l_number_valid LOOP
5698 
5699             FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_start_contract_id = ' || l_start_contract_id);
5700 
5701             BEGIN
5702 
5703               SAVEPOINT before_insert_contracts;
5704 
5705               FND_FILE.PUT_LINE(FND_FILE.LOG, '***** SAVEPOINT before_insert_contracts *****');
5706 
5707               --Bulk insert contracts
5708               INSERT INTO okc_rep_contracts_all
5709                 (contract_id,
5710                 contract_version_num,
5711                 contract_name,
5712                 contract_number,
5713                 contract_desc,
5714                 contract_type,
5715                 contract_status_code,
5716                 version_comments,
5717                 org_id,
5718                 authoring_party_code,
5719                 owner_id,
5720                 contract_effective_date,
5721                 contract_expiration_date,
5722                 currency_code,
5723                 amount,
5724                 keywords,
5725                 physical_location,
5726                 source_language,
5727                 object_version_number,
5728                 created_by,
5729                 creation_date,
5730                 last_updated_by,
5731                 last_update_date,
5732                 last_update_login,
5733                 program_id,
5734                 program_login_id,
5735                 program_application_id,
5736                 request_id,
5737                 latest_signed_ver_number,
5738                 orig_system_reference_code,
5739                 orig_system_reference_id1,
5740                 orig_system_reference_id2,
5741                 overall_risk_code,
5742                 cancellation_comments,
5743                 cancellation_date,
5744                 termination_comments,
5745                 termination_date,
5746                 expire_ntf_flag,
5747                 expire_ntf_period,
5748                 notify_contact_role_id,
5749                 attribute_category,
5750                 attribute1,
5751                 attribute2,
5752                 attribute3,
5753                 attribute4,
5754                 attribute5,
5755                 attribute6,
5756                 attribute7,
5757                 attribute8,
5758                 attribute9,
5759                 attribute10,
5760                 attribute11,
5761                 attribute12,
5762                 attribute13,
5763                 attribute14,
5764                 attribute15,
5765                 reference_document_type,
5766                 reference_document_number,
5767                 reference_document_id,
5768                 run_id,
5769                 source_code
5770                 )
5771               SELECT
5772                 contract_id,
5773                 1, --contract_version_num,
5774                 contract_name,
5775                 contract_number,
5776                 description,
5777                 contract_type,
5778                 contract_status_code,
5779                 version_comments,
5780                 org_id,
5781                 authoring_party_code,
5782                 owner_user_id,
5783                 TO_DATE(contract_effective_date, G_IMP_DATE_FORMAT),
5784                 TO_DATE(contract_expiration_date, G_IMP_DATE_FORMAT),
5785                 currency_code,
5786                 contract_amount,
5787                 keywords,
5788                 physical_location,
5789                 USERENV('LANG'),--source_language,
5790                 1, --object_version_number,
5791                 FND_GLOBAL.USER_ID, --created_by,
5792                 SYSDATE, --creation_date,
5793                 FND_GLOBAL.USER_ID, --last_updated_by,
5794                 SYSDATE, --last_update_date,
5795                 FND_GLOBAL.USER_ID, --last_update_login,
5796                 program_id,
5797                 program_login_id,
5798                 program_application_id,
5799                 request_id,
5800                 latest_signed_ver_number,
5801                 orig_system_reference_code,
5802                 orig_system_reference_id1,
5803                 orig_system_reference_id2,
5804                 overall_risk_code,
5805                 cancellation_comments,
5806                 cancellation_date,
5807                 termination_comments,
5808                 termination_date,
5809                 expire_ntf_flag,
5810                 expire_ntf_period,
5811                 notify_contact_role_id,
5812                 attribute_category,
5813                 attribute1,
5814                 attribute2,
5815                 attribute3,
5816                 attribute4,
5817                 attribute5,
5818                 attribute6,
5819                 attribute7,
5820                 attribute8,
5821                 attribute9,
5822                 attribute10,
5823                 attribute11,
5824                 attribute12,
5825                 attribute13,
5826                 attribute14,
5827                 attribute15,
5828                 reference_document_type,
5829                 reference_document_number,
5830                 reference_document_id,
5831                 run_id,
5832                 source_code
5833               FROM  okc_rep_imp_contracts_t
5834               WHERE run_id = p_run_id
5835               AND   valid_flag = 'Y'
5836               AND   contract_id >= l_start_contract_id
5837               AND   contract_id <  l_start_contract_id + l_insert_batch_size;
5838 
5839             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO okc_rep_contracts_all *****');
5840 
5841             --insert into contract parties
5842             INSERT INTO okc_rep_contract_parties
5843               (
5844               contract_id,
5845               party_role_code,
5846               party_id,
5847               --signed_by,
5848               --signed_date,
5849               object_version_number,
5850               created_by,
5851               creation_date,
5852               last_updated_by,
5853               last_update_date,
5854               last_update_login,
5855               program_id,
5856               program_login_id,
5857               program_application_id,
5858               request_id
5859               )
5860             SELECT
5861               contract_id,
5862               party_role_code,
5863               party_id,
5864               --signed_by_txt,
5865               --TO_DATE(signed_date, G_IMP_DATE_FORMAT),
5866               1, --object_version_number,
5867               FND_GLOBAL.USER_ID, --CREATED_BY,
5868               SYSDATE, --CREATION_DATE,
5869               FND_GLOBAL.USER_ID, --LAST_UPDATED_BY,
5870               SYSDATE, --LAST_UPDATE_DATE,
5871               FND_GLOBAL.USER_ID, --LAST_UPDATE_LOGIN,
5872               program_id,
5873               program_login_id,
5874               program_application_id,
5875               request_id
5876             FROM okc_rep_imp_parties_t
5877             WHERE valid_flag = 'Y'
5878             AND   run_id = p_run_id
5879             AND   contract_id IS NOT NULL
5880             AND   contract_id >= l_start_contract_id
5881             AND   contract_id <  l_start_contract_id + l_insert_batch_size;
5882 
5883             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO okc_rep_contract_parties *****');
5884 
5885             --insert into okc_rep_signature_details
5886             INSERT INTO OKC_REP_SIGNATURE_DETAILS
5887               (
5888               contract_id,
5889               contract_version_num,
5890               party_role_code,
5891               party_id,
5892               signed_by,
5893               signed_date,
5894               object_version_number,
5895               created_by,
5896               creation_date,
5897               last_updated_by,
5898               last_update_date,
5899               last_update_login,
5900               program_id,
5901               program_login_id,
5902               program_application_id,
5903               request_id
5904               )
5905             SELECT
5906               sig.contract_id,
5907               1, -- contract_version_num
5908               sig.party_role_code,
5909               sig.party_id,
5910               sig.signed_by_txt,
5911               TO_DATE(sig.signed_date, g_imp_date_format),
5912               1, --object_version_number,
5913               FND_GLOBAL.USER_ID, --created_by,
5914               SYSDATE, --creation_date,
5915               FND_GLOBAL.USER_ID, --last_updated_by,
5916               SYSDATE, --last_update_date,
5917               FND_GLOBAL.USER_ID, --last_update_login,
5918               sig.program_id,
5919               sig.program_login_id,
5920               sig.program_application_id,
5921               sig.request_id
5922             FROM  okc_rep_imp_parties_t sig, okc_rep_imp_contracts_t con
5923             WHERE sig.valid_flag = 'Y'
5924             AND   sig.run_id = p_run_id
5925             AND   sig.contract_id IS NOT NULL
5926             AND   con.contract_status_code = 'SIGNED'
5927             AND   sig.contract_id >= l_start_contract_id
5928             AND   sig.contract_id <  l_start_contract_id + l_insert_batch_size
5929             AND sig.contract_id = con.contract_id;
5930 
5931             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO OKC_REP_SIGNATURE_DETAILS *****');
5932 
5933             --insert into status history
5934             INSERT INTO okc_rep_con_status_hist
5935               (
5936               contract_id,
5937               contract_version_num,
5938               status_code,
5939               status_change_date,
5940               changed_by_user_id,
5941               object_version_number,
5942               created_by,
5943               creation_date,
5944               last_updated_by,
5945               last_update_date,
5946               last_update_login
5947               )
5948             SELECT
5949               contract_id,
5950               contract_version_num,
5951               contract_status_code,
5952               SYSDATE,
5953               FND_GLOBAL.USER_ID,
5954               object_version_number,
5955               created_by,
5956               creation_date,
5957               last_updated_by,
5958               last_update_date,
5959               last_update_login
5960             FROM  okc_rep_contracts_all
5961             WHERE run_id = p_run_id
5962             AND   created_by = FND_GLOBAL.USER_ID
5963             AND   contract_id >= l_start_contract_id
5964             AND   contract_id <  l_start_contract_id + l_insert_batch_size;
5965 
5966             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO okc_rep_con_status_hist *****');
5967 
5968             --kkolukul
5969             --insert into party contacts
5970             INSERT INTO okc_rep_party_contacts
5971             ( contract_id,
5972               party_id,
5973               party_role_code,
5974               contact_id,
5975               contact_role_id,
5976               object_version_number,
5977               created_by,
5978               creation_date,
5979               last_updated_by,
5980               last_update_date,
5981               last_update_login,
5982               program_id,
5983               program_login_id,
5984               program_application_id,
5985               request_id
5986 )
5987             SELECT
5988               contract_id,
5989               party_id,
5990               party_role_code,
5991               contact_id,
5992               contact_role_id,
5993               1, --object_version_number,
5994               FND_GLOBAL.USER_ID, --CREATED_BY,
5995               SYSDATE, --CREATION_DATE,
5996               FND_GLOBAL.USER_ID, --LAST_UPDATED_BY,
5997               SYSDATE, --LAST_UPDATE_DATE,
5998               FND_GLOBAL.USER_ID, --LAST_UPDATE_LOGIN,
5999               program_id,
6000               program_login_id,
6001               program_application_id,
6002               request_id
6003              FROM  okc_rep_imp_contacts_t
6004             WHERE run_id = p_run_id
6005             AND valid_flag = 'Y'
6006             --AND   created_by = FND_GLOBAL.USER_ID
6007             AND   contract_id >= l_start_contract_id
6008             AND   contract_id <  l_start_contract_id + l_insert_batch_size;
6009 
6010 
6011             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO okc_rep_party_contacts *****');
6012 
6013             --insert into contract risks
6014             INSERT INTO okc_contract_risks
6015               (business_document_type,
6016               business_document_id,
6017               business_document_version,
6018               risk_event_id,
6019               probability_code,
6020               impact_code,
6021               comments,
6022               risk_occurred_flag,
6023               occurrence_date,
6024               object_version_number,
6025            --   created_by,
6026               creation_date,
6027               last_updated_by,
6028               last_update_date,
6029               last_update_login,
6030               program_id,
6031               program_login_id,
6032               program_application_id,
6033               request_id
6034 )
6035             SELECT
6036               business_document_type,
6037               business_document_id,
6038               business_document_version,
6039               risk_event_id,
6040               probability_code,
6041               risk_impact_code,
6042               risk_comments,
6043               risk_occured_YN,
6044               risk_occurence_date,
6045               1,
6046               --created_by,
6047                SYSDATE, --CREATION_DATE,
6048               FND_GLOBAL.USER_ID, --LAST_UPDATED_BY,
6049               SYSDATE, --LAST_UPDATE_DATE,
6050               FND_GLOBAL.USER_ID, --LAST_UPDATE_LOGIN,
6051               program_id,
6052               program_login_id,
6053               program_application_id,
6054               request_id
6055             FROM  okc_rep_imp_risks_t
6056             WHERE run_id = p_run_id
6057               AND valid_flag = 'Y'
6058             --AND   created_by = FND_GLOBAL.USER_ID
6059             AND   business_document_id >= l_start_contract_id
6060             AND   business_document_id <  l_start_contract_id + l_insert_batch_size;
6061 
6062             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** INSERT INTO okc_contract_risks *****');
6063 
6064             COMMIT;
6065 
6066             FND_FILE.PUT_LINE(FND_FILE.LOG, '***** COMMIT *****');
6067 
6068             l_start_contract_id := l_start_contract_id + l_insert_batch_size;
6069 
6070             FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_start_contract_id = ' || l_start_contract_id);
6071 
6072             EXIT WHEN l_start_contract_id > l_max_contract_id;
6073 
6074           EXCEPTION
6075             WHEN OTHERS THEN
6076 
6077               FND_FILE.PUT_LINE(FND_FILE.LOG, '***** EXCEPTION WHEN OTHERS *****');
6078               FND_FILE.PUT_LINE(FND_FILE.LOG, SQLERRM);
6079 
6080               x_return_status := FND_API.G_RET_STS_ERROR;
6081               x_number_inserted := 0;
6082 
6083               FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6084                                       p_data  =>  x_msg_data);
6085 
6086               --rollback to the
6087               ROLLBACK TO before_insert_contracts;
6088 
6089               FND_FILE.PUT_LINE(FND_FILE.LOG, '***** ROLLBACK TO before_insert_contracts *****');
6090 
6091               --We also need to mark the documents as invalid
6092               --so that in the Java layer we won't add them as attachments
6093 
6094               --Here the assumption is made that exception has happened
6095               --in the INSERT SQL, so l_start_contract_id is from the
6096               --current iteration and we do not adjust it here
6097               UPDATE okc_rep_imp_documents_t
6098               SET    valid_flag = 'N'
6099               WHERE  run_id = p_run_id
6100               AND    contract_id >= l_start_contract_id
6101               AND    contract_id <  l_start_contract_id + l_insert_batch_size;
6102 
6103               FND_FILE.PUT_LINE(FND_FILE.LOG, '***** UPDATE okc_rep_imp_documents_t SET valid_flag = N *****');
6104 
6105               COMMIT;
6106 
6107               FND_FILE.PUT_LINE(FND_FILE.LOG, '***** COMMIT *****');
6108           END;
6109 
6110 
6111         END LOOP;
6112 
6113         FND_FILE.PUT_LINE(FND_FILE.LOG, '***** END LOOP *****');
6114 
6115     END IF;
6116 
6117 
6118     OPEN number_inserted_csr;
6119     FETCH number_inserted_csr INTO l_number_inserted;
6120 
6121     FND_FILE.PUT_LINE(FND_FILE.LOG, 'number_inserted_csr%ROWCOUNT = ' || number_inserted_csr%ROWCOUNT);
6122 
6123     CLOSE number_inserted_csr;
6124 
6125     FND_FILE.PUT_LINE(FND_FILE.LOG, '***** END LOOP *****');
6126 
6127     x_number_inserted := l_number_inserted;
6128 
6129     FND_FILE.PUT_LINE(FND_FILE.LOG, 'x_number_inserted = ' || x_number_inserted);
6130 
6131     FND_FILE.PUT_LINE(FND_FILE.LOG, '********************************');
6132     FND_FILE.PUT_LINE(FND_FILE.LOG, '***** END insert_prod_data *****');
6133     FND_FILE.PUT_LINE(FND_FILE.LOG, '********************************');
6134   EXCEPTION
6135 
6136     WHEN FND_API.G_EXC_ERROR THEN
6137 
6138       FND_FILE.PUT_LINE(FND_FILE.LOG, '***** EXCEPTION WHEN WHEN FND_API.G_EXC_ERROR *****');
6139       FND_FILE.PUT_LINE(FND_FILE.LOG, SQLERRM);
6140 
6141       --close cursors
6142       IF (number_inserted_csr%ISOPEN) THEN
6143         CLOSE number_inserted_csr ;
6144       END IF;
6145       IF (contract_id_cur%ISOPEN) THEN
6146         CLOSE contract_id_cur ;
6147       END IF;
6148 
6149 
6150       x_return_status := FND_API.G_RET_STS_ERROR;
6151       x_number_inserted := 0;
6152 
6153       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6154                                 p_data  =>  x_msg_data);
6155 
6156     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6157 
6158       FND_FILE.PUT_LINE(FND_FILE.LOG, '***** EXCEPTION WHEN FND_API.G_EXC_UNEXPECTED_ERROR *****');
6159       FND_FILE.PUT_LINE(FND_FILE.LOG, SQLERRM);
6160 
6161       --close cursors
6162       IF (number_inserted_csr%ISOPEN) THEN
6163         CLOSE number_inserted_csr ;
6164       END IF;
6165       IF (contract_id_cur%ISOPEN) THEN
6166         CLOSE contract_id_cur ;
6167       END IF;
6168 
6169 
6170       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
6171       x_number_inserted := 0;
6172 
6173       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6174                                 p_data  =>  x_msg_data);
6175 
6176     WHEN OTHERS THEN
6177 
6178       FND_FILE.PUT_LINE(FND_FILE.LOG, '***** EXCEPTION WHEN OTHERS *****');
6179       FND_FILE.PUT_LINE(FND_FILE.LOG, SQLERRM);
6180 
6181       --close cursors
6182       IF (number_inserted_csr%ISOPEN) THEN
6183         CLOSE number_inserted_csr ;
6184       END IF;
6185       IF (contract_id_cur%ISOPEN) THEN
6186         CLOSE contract_id_cur ;
6187       END IF;
6188 
6189 
6190       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6191                           p_msg_name     => G_UNEXPECTED_ERROR,
6192                           p_token1       => G_SQLCODE_TOKEN,
6193                           p_token1_value => sqlcode,
6194                           p_token2       => G_SQLERRM_TOKEN,
6195                           p_token2_value => sqlerrm);
6196       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6197       x_number_inserted := 0;
6198 
6199       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6200                                 p_data  =>  x_msg_data);
6201 
6202   END insert_prod_data;
6203 
6204   -- Start of comments
6205   --API name      : validate_and_insert_contracts
6206   --Type          : Private.
6207   --Function      : Validates contracts in the interface tables, and then insert
6208   --                the valid ones into production tables:
6209   --                okc_rep_contracts_all and okc_rep_contract_parties
6210   --                Note that contract documents are inserted in the Java layer after this
6211   --Pre-reqs      : Currently only called from repository import.
6212   --              : Contracts should be saved to the OKC_REP_IMP_CONTRACTS_T table
6213   --Parameters    :
6214   --IN            : p_api_version         IN NUMBER       Required
6215   --              : p_init_msg_list       IN VARCHAR2     Optional
6216   --                   Default = FND_API.G_FALSE
6217   --              : p_run_id         IN NUMBER       Required
6218   --                    Concurrent Program Request ID
6219   --OUT           : x_return_status       OUT  VARCHAR2(1)
6220   --              : x_msg_count           OUT  NUMBER
6221   --              : x_msg_data            OUT  VARCHAR2(2000)
6222   --              : x_number_inserted     OUT NUMBER
6223   -- End of comments
6224   PROCEDURE validate_and_insert_contracts(
6225     p_api_version   IN  NUMBER,
6226     p_init_msg_list   IN  VARCHAR2,
6227     p_run_id    IN  NUMBER,
6228     p_call_source IN VARCHAR2 DEFAULT NULL,
6229     p_validate_only IN VARCHAR2 DEFAULT 'N',
6230     x_msg_data      OUT NOCOPY VARCHAR2,
6231     x_msg_count   OUT NOCOPY NUMBER,
6232     x_return_status   OUT NOCOPY VARCHAR2,
6233     x_number_inserted   OUT NOCOPY NUMBER)
6234   IS
6235 
6236   l_api_name            CONSTANT VARCHAR2(30):='validate_contracts';
6237   l_api_version         CONSTANT NUMBER := 1.0;
6238 
6239   BEGIN
6240     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6241       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6242               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
6243       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6244               'p_run_id = ' || p_run_id);
6245 
6246     END IF;
6247 
6248     -- Standard call to check for call compatibility.
6249     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
6250       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6251     END IF;
6252 
6253     -- Initialize message list if p_init_msg_list is set to TRUE.
6254     IF FND_API.to_Boolean( p_init_msg_list ) THEN
6255       FND_MSG_PUB.initialize;
6256     END IF;
6257 
6258     --  Initialize API return status to success
6259     x_return_status := FND_API.G_RET_STS_SUCCESS;
6260 
6261     --We need to validate documents and parties before we validate contract headers
6262     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6263       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6264               'Validating Contract Documents...');
6265     END IF;
6266 
6267     validate_import_documents(p_api_version => 1.0,
6268                               p_init_msg_list => FND_API.G_FALSE,
6269                             p_run_id => p_run_id,
6270                             x_return_status => x_return_status,
6271                             x_msg_count => x_msg_count,
6272                             x_msg_data => x_msg_data);
6273 
6274     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6275       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6276               'Validating Contract Parties...');
6277     END IF;
6278 
6279     validate_import_parties(p_api_version => 1.0,
6280           p_init_msg_list => FND_API.G_FALSE,
6281                             p_run_id => p_run_id,
6282                             x_return_status => x_return_status,
6283                             x_msg_count => x_msg_count,
6284                             x_msg_data => x_msg_data);
6285 
6286     --kkolukul:
6287     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6288       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6289               'Validating Party Contacts...');
6290     END IF;
6291 
6292     validate_import_contacts(p_api_version => 1.0,
6293                             p_init_msg_list => FND_API.G_FALSE,
6294                             p_run_id => p_run_id,
6295                             x_return_status => x_return_status,
6296                             x_msg_count => x_msg_count,
6297                             x_msg_data => x_msg_data);
6298 
6299     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6300       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6301               'Validating Contract risks...');
6302     END IF;
6303 
6304     validate_import_risks(p_api_version => 1.0,
6305                             p_init_msg_list => FND_API.G_FALSE,
6306                             p_run_id => p_run_id,
6307                             x_return_status => x_return_status,
6308                             x_msg_count => x_msg_count,
6309                             x_msg_data => x_msg_data);
6310 
6311     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6312       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6313               'Validating Contract Headers...');
6314     END IF;
6315 
6316     validate_import_contracts(p_api_version => 1.0,
6317                             p_init_msg_list => FND_API.G_FALSE,
6318                             p_run_id => p_run_id,
6319                             p_call_source => p_call_source,
6320                             x_return_status => x_return_status,
6321                             x_msg_count => x_msg_count,
6322                             x_msg_data => x_msg_data);
6323 
6324     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6325       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6326               'Finished validating Contracts.  Now we will insert valid headers and parties into production tables.');
6327     END IF;
6328     IF p_validate_only = 'N' THEN
6329 
6330 
6331     insert_prod_data(p_api_version => 1.0,
6332                     p_init_msg_list => FND_API.G_FALSE,
6333                     p_commit => FND_API.G_TRUE,
6334                         p_run_id => p_run_id,
6335                     x_return_status => x_return_status,
6336                     x_msg_count => x_msg_count,
6337                     x_msg_data => x_msg_data,
6338                     x_number_inserted => x_number_inserted);
6339     END IF;
6340 
6341   EXCEPTION
6342     WHEN FND_API.G_EXC_ERROR THEN
6343       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6344         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6345              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
6346       END IF;
6347 
6348       x_return_status := FND_API.G_RET_STS_ERROR;
6349 
6350       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6351                                 p_data  =>  x_msg_data);
6352 
6353     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6354      IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6355         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6356              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
6357       END IF;
6358 
6359       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
6360 
6361       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6362                                 p_data  =>  x_msg_data);
6363 
6364     WHEN OTHERS THEN
6365       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6366         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6367              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
6368       END IF;
6369 
6370       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6371                           p_msg_name     => G_UNEXPECTED_ERROR,
6372                           p_token1       => G_SQLCODE_TOKEN,
6373                           p_token1_value => sqlcode,
6374                           p_token2       => G_SQLERRM_TOKEN,
6375                           p_token2_value => sqlerrm);
6376       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6377 
6378       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6379                                 p_data  =>  x_msg_data);
6380 
6381 
6382   END validate_and_insert_contracts;
6383 
6384 
6385   -- Start of comments
6386   --API name      : delete_import_contract
6387   --Type          : Private.
6388   --Function      : (1) Delete the imported contract and its parties
6389   --                by calling okc_rep_contract_process_pvt.delete_contract
6390   --                (2) Set the contract's valid_flag to 'N' in okc_rep_imp_contracts_t
6391   --                (3) Insert an error message in okc_rep_imp_errors_t
6392   --                This procedure does the cleanup due to an error adding attachments
6393   --                in the Java layer during repository import
6394   --Pre-reqs      : None
6395   --Parameters    :
6396   --IN            : p_api_version         IN NUMBER       Required
6397   --              : p_init_msg_list       IN VARCHAR2     Optional
6398   --                   Default = FND_API.G_FALSE
6399   --              : p_commit               IN VARCHAR2    Optional
6400   --                   Default = FND_API.G_FALSE
6401   --              : p_contract_id         IN NUMBER       Required
6402   --                    Contract ID that the error is from
6403   --              : p_imp_document_id     IN NUMBER       Required
6404   --                   okc_rep_imp_documents_t.imp_document_id
6405   --              : p_error_msg_txt  IN VARCHAR2       Required
6406   --                   Translated error message text
6407   --              : p_program_id                IN  NUMBER Required
6408   --                    Concurrent program ID
6409   --              : p_program_login_id          IN  NUMBER Required
6410   --                    Concurrent program login ID
6411   --              : p_program_app_id            IN  NUMBER Required
6412   --                    Concurrent program application ID
6413   --              : p_run_id                IN  NUMBER Required
6414   --                    Concurrent program request ID
6415   --OUT           : x_return_status       OUT  VARCHAR2(1)
6416   --              : x_msg_count           OUT  NUMBER
6417   --              : x_msg_data            OUT  VARCHAR2(2000)
6418   -- End of comments
6419   PROCEDURE delete_import_contract(
6420        p_api_version              IN NUMBER,
6421        p_init_msg_list            IN VARCHAR2,
6422        p_commit                   IN VARCHAR2,
6423        p_contract_id              IN NUMBER,
6424        p_imp_document_id             IN NUMBER,
6425        p_error_msg_txt            IN VARCHAR2,
6426        p_program_id               IN NUMBER,
6427        p_program_login_id         IN NUMBER,
6428        p_program_app_id           IN NUMBER,
6429        p_run_id               IN NUMBER,
6430        x_return_status            OUT NOCOPY VARCHAR2,
6431        x_msg_count                OUT NOCOPY NUMBER,
6432        x_msg_data                 OUT NOCOPY VARCHAR2)
6433   IS
6434     l_api_name VARCHAR2(30);
6435     l_api_version       CONSTANT NUMBER := 1.0;
6436 
6437 
6438 
6439     BEGIN
6440 
6441     l_api_name := 'delete_import_contract';
6442 
6443     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6444       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6445               'Entered OKC_REP_UTIL_PVT.delete_import_contract');
6446       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6447               'p_contract_id = ' || p_contract_id);
6448       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6449               'p_imp_document_id = ' || p_imp_document_id);
6450       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6451               'p_error_msg_txt = ' || p_error_msg_txt);
6452       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6453               'p_program_id = ' || p_program_id);
6454       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6455               'p_program_login_id = ' || p_program_login_id);
6456       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6457               'p_program_app_id = ' || p_program_app_id);
6458       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6459               'p_run_id = ' || p_run_id);
6460 
6461 
6462     END IF;
6463 
6464     -- Standard call to check for call compatibility.
6465     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
6466       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6467     END IF;
6468 
6469     -- Initialize message list if p_init_msg_list is set to TRUE.
6470     IF FND_API.to_Boolean( p_init_msg_list ) THEN
6471       FND_MSG_PUB.initialize;
6472     END IF;
6473 
6474     --  Initialize API return status to success
6475     x_return_status := FND_API.G_RET_STS_SUCCESS;
6476 
6477     -- Delete contract
6478     okc_rep_contract_process_pvt.delete_contract(
6479       p_api_version  => 1.0,
6480       p_init_msg_list => FND_API.G_FALSE,
6481       p_commit        => FND_API.G_FALSE,
6482       p_contract_id  => p_contract_id,
6483       x_msg_data   => x_msg_data,
6484       x_msg_count  => x_msg_count,
6485       x_return_status  => x_return_status);
6486 
6487 
6488      IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6489         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT,G_MODULE||l_api_name,
6490                 'Called okc_rep_contract_process_pvt.delete_contract');
6491     END IF;
6492 
6493     -- Update valid_flag
6494     UPDATE OKC_REP_IMP_CONTRACTS_T
6495     SET valid_flag = 'N'
6496     WHERE CONTRACT_ID = p_contract_id;
6497 
6498     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6499         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT,G_MODULE||l_api_name,
6500                 'Updated valid_flag to N');
6501     END IF;
6502 
6503     -- Insert error message
6504     populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
6505                                    p_api_version => 1.0,
6506                                    p_contract_id => p_contract_id,
6507                                    p_error_obj_type => G_IMP_DOCUMENT_ERROR,
6508                                    p_error_obj_id => p_imp_document_id,
6509                                    p_error_msg_txt => p_error_msg_txt,
6510                                    p_program_id => p_program_id,
6511                                    p_program_login_id => p_program_login_id,
6512                                    p_program_app_id => p_program_app_id,
6513                                    p_run_id => p_run_id,
6514                                    x_return_status => x_return_status,
6515                                    x_msg_count => x_msg_count,
6516                                    x_msg_data => x_msg_data);
6517 
6518     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6519         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT,G_MODULE||l_api_name,
6520                 'Inserted error into okc_rep_imp_errors_t');
6521     END IF;
6522 
6523 
6524     IF(p_commit = FND_API.G_TRUE) THEN
6525         COMMIT;
6526         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6527             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT,G_MODULE||l_api_name,
6528                 'Committed transaction');
6529         END IF;
6530 
6531     END IF;
6532 
6533 
6534     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6535         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6536                 'Leaving OKC_REP_UTIL_PVT.delete_import_contract');
6537     END IF;
6538 
6539   EXCEPTION
6540 
6541     WHEN FND_API.G_EXC_ERROR THEN
6542       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6543         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6544              'Leaving delete_import_contract:FND_API.G_EXC_ERROR Exception');
6545       END IF;
6546 
6547       x_return_status := FND_API.G_RET_STS_ERROR;
6548       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6549                                 p_data  =>  x_msg_data);
6550 
6551     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6552 
6553       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6554         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6555              'Leaving delete_import_contract:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
6556       END IF;
6557 
6558       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
6559       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6560                                 p_data  =>  x_msg_data);
6561 
6562     WHEN OTHERS THEN
6563 
6564       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6565         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
6566              'Leaving delete_import_contract because of EXCEPTION: ' || sqlerrm);
6567       END IF;
6568 
6569       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6570                           p_msg_name     => G_UNEXPECTED_ERROR,
6571                           p_token1       => G_SQLCODE_TOKEN,
6572                           p_token1_value => sqlcode,
6573                           p_token2       => G_SQLERRM_TOKEN,
6574                           p_token2_value => sqlerrm);
6575       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6576       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
6577                                 p_data  =>  x_msg_data);
6578 
6579   END delete_import_contract;
6580 
6581   -- Start of comments
6582   --API name      : Function add_quotes
6583   --Type          : Private.
6584   --Function      : Add quotes around a string
6585   --                if it contains comma or quotes.
6586   --                This is used for generating error report
6587   --                during repository import
6588   --Pre-reqs      : None.
6589   --Parameters    :
6590   --IN            : p_api_version         IN NUMBER       Required
6591   --              : p_init_msg_list       IN VARCHAR2     Optional
6592   --                   Default = FND_API.G_FALSE
6593   --              : p_string         IN VARCHAR2       Required
6594   --OUT           : if p_string contains comma, return "p_string"
6595   --                otherwise return p_string
6596   -- End of comments
6597   FUNCTION add_quotes(
6598       p_string     IN  VARCHAR2
6599     ) RETURN VARCHAR2
6600   IS
6601     l_api_name          VARCHAR2(30);
6602     l_string            VARCHAR2(2050);
6603     l_unprocessed_string VARCHAR2(2050);
6604 
6605   BEGIN
6606 
6607     l_api_name          := 'add_quotes';
6608 
6609     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6610         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6611                 'Entered Function OKC_REP_UTIL_PVT.'||l_api_name);
6612         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6613                 'p_string is: ' || p_string);
6614     END IF;
6615 
6616     l_string := NULL;
6617     l_unprocessed_string := p_string;
6618 
6619     --if p_string starts and ends with quotes
6620     --we need to surround it with two double quotes
6621     --else if p_string contains comma
6622     --we need to surround it with one double quote
6623     IF (substr(l_unprocessed_string,1,1) = '"' AND substr(l_unprocessed_string, LENGTH(p_string), 1) = '"') THEN
6624         l_string := '""' || p_string || '""';
6625     ELSIF (instr(p_string, ',') > 0) THEN
6626         l_string := '"' || p_string || '"';
6627 
6628     ELSE
6629         l_string := p_string;
6630     END IF;
6631 
6632     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6633         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6634                 'Leaving Function OKC_REP_UTIL_PVT.'||l_api_name);
6635         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6636                 'l_string is: ' || l_string);
6637     END IF;
6638 
6639     return l_string;
6640 
6641   EXCEPTION
6642     WHEN OTHERS THEN
6643       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6644         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
6645                 'Leaving Function '||l_api_name||' because of EXCEPTION: '||sqlerrm);
6646       END IF;
6647       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6648                         p_msg_name     => G_UNEXPECTED_ERROR,
6649                         p_token1       => G_SQLCODE_TOKEN,
6650                         p_token1_value => sqlcode,
6651                         p_token2       => G_SQLERRM_TOKEN,
6652                         p_token2_value => sqlerrm);
6653       RETURN l_string;
6654 
6655   END add_quotes;
6656 
6657   -- Start of comments
6658   --API name      : Function get_csv_error_string
6659   --Type          : Private.
6660   --Function      : Returns one line in the CSV Error Report
6661   --Pre-reqs      : None.
6662   --Parameters    :
6663   --IN            : p_api_version         IN NUMBER       Required
6664   --              : p_init_msg_list       IN VARCHAR2     Optional
6665   --                   Default = FND_API.G_FALSE
6666   --              : p_imp_contract_id         IN NUMBER       Required
6667   --                   okc_rep_imp_contracts_t.imp_contract_id
6668   -- End of comments
6669   FUNCTION get_csv_error_string(
6670       p_api_version              IN NUMBER,
6671        p_init_msg_list            IN VARCHAR2,
6672        p_imp_contract_id     IN  NUMBER
6673     ) RETURN VARCHAR2
6674   IS
6675     l_api_name                     VARCHAR2(30);
6676     l_num_parties                  CONSTANT NUMBER := 3;
6677     l_num_documents                CONSTANT NUMBER := 5;
6678     --there can be max of 9 error messages for each contract
6679     --one for header, three for parties, and five for documents
6680     --since each message has max length of 2000 in fnd_new_messages
6681     --l_csv_error_string should be at least 18000 + original data
6682     l_csv_error_string             VARCHAR2(20000);
6683     l_error_msg                    VARCHAR2(18000);
6684 
6685     l_empty_party_string           CONSTANT VARCHAR2(4) := ',,,,';
6686     l_empty_doc_string             CONSTANT VARCHAR2(3) := ',,,';
6687     l_party_index                  NUMBER;
6688     l_document_index               NUMBER;
6689 
6690 
6691     CURSOR IMP_CONTRACT_CSR IS
6692     SELECT CONTRACT_NUMBER,
6693     CONTRACT_NAME,
6694     CONTRACT_STATUS_TXT,
6695     CONTRACT_TYPE_TXT,
6696     CONTRACT_EFFECTIVE_DATE,
6697     CONTRACT_EXPIRATION_DATE,
6698     ORG_NAME,
6699     OWNER_USER_NAME,
6700     CURRENCY_CODE,
6701     CONTRACT_AMOUNT,
6702     AUTHORING_PARTY_TXT,
6703     PHYSICAL_LOCATION,
6704     KEYWORDS,
6705     DESCRIPTION,
6706     VERSION_COMMENTS,
6707     ORIG_SYSTEM_REFERENCE_CODE,
6708     ORIG_SYSTEM_REFERENCE_ID1,
6709     ORIG_SYSTEM_REFERENCE_ID2
6710     FROM OKC_REP_IMP_CONTRACTS_T
6711     WHERE IMP_CONTRACT_ID = p_imp_contract_id;
6712 
6713     l_imp_contract_rec IMP_CONTRACT_CSR%ROWTYPE;
6714 
6715 
6716     CURSOR IMP_PARTIES_CSR IS
6717     SELECT
6718     PARTY_INDEX,
6719     PARTY_NAME_TXT,
6720     PARTY_ROLE_TXT,
6721     SIGNED_BY_TXT,
6722     SIGNED_DATE
6723     FROM OKC_REP_IMP_PARTIES_T
6724     WHERE IMP_CONTRACT_ID = p_imp_contract_id
6725     ORDER BY PARTY_INDEX;
6726 
6727     l_imp_parties_rec IMP_PARTIES_CSR%ROWTYPE;
6728 
6729 
6730     CURSOR IMP_DOCUMENTS_CSR IS
6731     SELECT
6732     DOCUMENT_INDEX,
6733     FILE_NAME,
6734     CATEGORY_NAME_TXT,
6735     DOCUMENT_DESC
6736     FROM OKC_REP_IMP_DOCUMENTS_T
6737     WHERE IMP_CONTRACT_ID = p_imp_contract_id
6738     ORDER BY DOCUMENT_INDEX;
6739 
6740     l_imp_documents_rec IMP_DOCUMENTS_CSR%ROWTYPE;
6741 
6742 
6743     CURSOR IMP_ERRORS_CSR IS
6744     SELECT
6745     ERROR_MESSAGE
6746     FROM OKC_REP_IMP_ERRORS_T
6747     WHERE IMP_CONTRACT_ID = p_imp_contract_id;
6748 
6749     l_imp_errors_rec IMP_ERRORS_CSR%ROWTYPE;
6750 
6751 
6752   BEGIN
6753 
6754     l_api_name := 'get_csv_error_string';
6755 
6756     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6757         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6758                 'Entered Function OKC_REP_UTIL_PVT.'||l_api_name);
6759         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6760                 'p_imp_contract_id is: ' || p_imp_contract_id);
6761     END IF;
6762 
6763     --initialize l_csv_error_string
6764     l_csv_error_string := NULL;
6765 
6766     OPEN IMP_CONTRACT_CSR;
6767     FETCH IMP_CONTRACT_CSR INTO l_imp_contract_rec;
6768     IF IMP_CONTRACT_CSR%NOTFOUND THEN
6769         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6770             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6771                 'p_imp_contract_id does not exist in okc_rep_imp_contracts_t: '||p_imp_contract_id);
6772             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6773                 'returning null');
6774         END IF;
6775         RETURN l_csv_error_string;
6776     END IF;
6777 
6778     -------------------Important: The order of the following statements matter!----------
6779     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.contract_number) || ',';
6780     --l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.contract_name) || ',';
6781     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.contract_name);
6782 
6783     -- bug 4198537
6784     --the framework does not support opening the concurrent program output file in excel yet
6785     --so I am commenting the following part out
6786     /*
6787     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.contract_status_txt) || ',';
6788     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.contract_type_txt) || ',';
6789     l_csv_error_string := l_csv_error_string || l_imp_contract_rec.contract_effective_date || ',';
6790     l_csv_error_string := l_csv_error_string || l_imp_contract_rec.contract_expiration_date || ',';
6791     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.org_name) || ',';
6792     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.owner_user_name) || ',';
6793     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.currency_code) || ',';
6794     l_csv_error_string := l_csv_error_string || l_imp_contract_rec.contract_amount || ',';
6795     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.authoring_party_txt) || ',';
6796     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.physical_location) || ',';
6797     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.keywords) || ',';
6798     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.description) || ',';
6799     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.version_comments) || ',';
6800 
6801 
6802     l_party_index := 0;
6803     OPEN IMP_PARTIES_CSR;
6804     LOOP
6805         FETCH IMP_PARTIES_CSR INTO l_imp_parties_rec;
6806         EXIT WHEN IMP_PARTIES_CSR%NOTFOUND;
6807         -------------------Important: The order of the following statements matter!----------
6808         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_parties_rec.party_name_txt) || ',';
6809         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_parties_rec.party_role_txt) || ',';
6810         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_parties_rec.signed_by_txt) || ',';
6811         l_csv_error_string := l_csv_error_string || l_imp_parties_rec.signed_date || ',';
6812         l_party_index := l_party_index + 1;
6813     END LOOP;
6814     CLOSE IMP_PARTIES_CSR;
6815 
6816     IF l_party_index < l_num_parties THEN
6817         --we have less than 3 parties, need to fill in the commas
6818         FOR i IN (l_party_index+1)..l_num_parties
6819         LOOP
6820             l_csv_error_string := l_csv_error_string || l_empty_party_string;
6821         END LOOP;
6822     END IF;
6823 
6824     l_document_index := 0;
6825     OPEN IMP_DOCUMENTS_CSR;
6826     LOOP
6827         FETCH IMP_DOCUMENTS_CSR INTO l_imp_documents_rec;
6828         EXIT WHEN IMP_DOCUMENTS_CSR%NOTFOUND;
6829         -------------------Important: The order of the following statements matter!----------
6830         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_documents_rec.file_name) || ',';
6831         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_documents_rec.category_name_txt) || ',';
6832         l_csv_error_string := l_csv_error_string || add_quotes(l_imp_documents_rec.document_desc) || ',';
6833         l_document_index := l_document_index + 1;
6834 
6835     END LOOP;
6836     CLOSE IMP_DOCUMENTS_CSR;
6837 
6838     IF l_document_index < l_num_documents THEN
6839         --we have less than 5 documents, need to fill in the commas
6840         FOR i IN (l_document_index+1)..l_num_documents
6841         LOOP
6842             l_csv_error_string := l_csv_error_string || l_empty_doc_string;
6843         END LOOP;
6844     END IF;
6845 
6846 
6847     --we need to concatenate the last three orig_system* attributes
6848     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.orig_system_reference_code) || ',';
6849     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.orig_system_reference_id1) || ',';
6850     l_csv_error_string := l_csv_error_string || add_quotes(l_imp_contract_rec.orig_system_reference_id2);
6851     --Note that we don't close the IMP_CONTRACT_CSR until last
6852     --because of the orig_system* attributes
6853 */
6854     CLOSE IMP_CONTRACT_CSR;
6855 
6856 
6857     --Concatenate error messages
6858     l_error_msg := NULL;
6859     OPEN IMP_ERRORS_CSR;
6860     LOOP
6861         FETCH IMP_ERRORS_CSR INTO l_imp_errors_rec;
6862         EXIT WHEN IMP_ERRORS_CSR%NOTFOUND;
6863         l_error_msg :=  l_error_msg || FND_GLOBAL.Newline || l_imp_errors_rec.error_message || ' ';
6864     END LOOP;
6865     CLOSE IMP_ERRORS_CSR;
6866 
6867     IF(LENGTH(l_error_msg) > 0) THEN
6868         l_csv_error_string := l_csv_error_string || ',' || add_quotes(l_error_msg);
6869     END IF;
6870 
6871     l_csv_error_string := l_csv_error_string || FND_GLOBAL.Newline;
6872 
6873 
6874     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6875     FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6876                 'Leaving Function '||l_api_name);
6877     END IF;
6878     RETURN l_csv_error_string;
6879 
6880   EXCEPTION
6881     WHEN OTHERS THEN
6882 
6883       --close cursors
6884       IF (IMP_CONTRACT_CSR%ISOPEN) THEN
6885         CLOSE IMP_CONTRACT_CSR ;
6886       END IF;
6887       IF (IMP_PARTIES_CSR%ISOPEN) THEN
6888         CLOSE IMP_PARTIES_CSR ;
6889       END IF;
6890       IF (IMP_DOCUMENTS_CSR%ISOPEN) THEN
6891         CLOSE IMP_DOCUMENTS_CSR ;
6892       END IF;
6893       IF (IMP_ERRORS_CSR%ISOPEN) THEN
6894         CLOSE IMP_ERRORS_CSR ;
6895       END IF;
6896 
6897       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6898         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
6899                 'Leaving Function '||l_api_name||' because of EXCEPTION: '||sqlerrm);
6900       END IF;
6901       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6902                         p_msg_name     => G_UNEXPECTED_ERROR,
6903                         p_token1       => G_SQLCODE_TOKEN,
6904                         p_token1_value => sqlcode,
6905                         p_token2       => G_SQLERRM_TOKEN,
6906                         p_token2_value => sqlerrm);
6907       RETURN l_csv_error_string ;
6908   END get_csv_error_string;
6909 
6910 
6911 
6912   -- Start of comments
6913   --API name      : Function get_csv_header_string
6914   --Type          : Private.
6915   --Function      : Returns the header in the csv file
6916   --Pre-reqs      : None.
6917   --Parameters    :
6918   --IN            : p_api_version         IN NUMBER       Required
6919   --              : p_init_msg_list       IN VARCHAR2     Optional
6920   --                   Default = FND_API.G_FALSE
6921   -- End of comments
6922   FUNCTION get_csv_header_string(
6923       p_api_version              IN NUMBER,
6924        p_init_msg_list            IN VARCHAR2
6925   ) RETURN VARCHAR2
6926   IS
6927     l_api_name                      VARCHAR2(30);
6928     l_csv_header_string             VARCHAR2(10000);
6929 
6930     CURSOR CSV_HEADER_CSR IS
6931     select meaning from fnd_lookup_values
6932     where lookup_type = 'OKC_REP_IMP_TEMPL_ATTRIBUTES'
6933     and LANGUAGE = userenv('LANG')
6934     and VIEW_APPLICATION_ID = 0
6935     and SECURITY_GROUP_ID = fnd_global.lookup_security_group('OKC_REP_IMP_TEMPL_ATTRIBUTES', VIEW_APPLICATION_ID)
6936     and enabled_flag = 'Y'
6937     order by to_number(tag);
6938 
6939     l_csv_header_rec CSV_HEADER_CSR%ROWTYPE;
6940 
6941     BEGIN
6942 
6943     l_api_name := 'get_csv_header_string';
6944 
6945     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6946         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6947                 'Entered Function OKC_REP_UTIL_PVT.'||l_api_name);
6948     END IF;
6949 
6950     l_csv_header_string := NULL;
6951     OPEN CSV_HEADER_CSR;
6952     LOOP
6953         FETCH CSV_HEADER_CSR INTO l_csv_header_rec;
6954         EXIT WHEN CSV_HEADER_CSR%NOTFOUND;
6955         l_csv_header_string := l_csv_header_string || l_csv_header_rec.meaning || ',';
6956     END LOOP;
6957     CLOSE CSV_HEADER_CSR;
6958 
6959     IF(instr(l_csv_header_string, ',') > 0) THEN
6960         --we need to remove the last ','
6961         l_csv_header_string := substr(l_csv_header_string,1, length(l_csv_header_string)-1);
6962     END IF;
6963 
6964     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6965         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6966                 'Entered Function OKC_REP_UTIL_PVT.'||l_api_name);
6967         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
6968                 'l_csv_header_string is: ' || l_csv_header_string);
6969     END IF;
6970 
6971     RETURN l_csv_header_string;
6972 
6973     EXCEPTION
6974     WHEN OTHERS THEN
6975       --close cursors
6976       IF (CSV_HEADER_CSR%ISOPEN) THEN
6977         CLOSE CSV_HEADER_CSR ;
6978       END IF;
6979 
6980       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6981         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
6982                 'Leaving Function '||l_api_name||' because of EXCEPTION: '||sqlerrm);
6983       END IF;
6984       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6985                         p_msg_name     => G_UNEXPECTED_ERROR,
6986                         p_token1       => G_SQLCODE_TOKEN,
6987                         p_token1_value => sqlcode,
6988                         p_token2       => G_SQLERRM_TOKEN,
6989                         p_token2_value => sqlerrm);
6990       RETURN l_csv_header_string;
6991 
6992   END get_csv_header_string;
6993 
6994 
6995 
6996   -- Start of comments
6997   --API name      : get_vendor_userlist
6998   --Type          : Private.
6999   --Function      : Returns the external vendor user email addresses.
7000   --Pre-reqs      : None.
7001   --Parameters    :
7002   --IN            : p_api_version         IN NUMBER       Required
7003   --              : p_init_msg_list       IN VARCHAR2     Optional
7004   --                   Default = FND_API.G_FALSE
7005   --              : p_document_id         IN NUMBER       Required
7006   --                   Id of the contract
7007   --              : p_external_party_id   IN NUMBER       Required
7008   --                   External party ID
7009   --OUT           : x_external_userlist   OUT  VARCHAR2(1)
7010   --                      external contact email addresses
7011   --              : x_return_status       OUT  VARCHAR2(1)
7012   --              : x_msg_count           OUT  NUMBER
7013   --              : x_msg_data            OUT  VARCHAR2(2000)
7014   -- End of comments
7015   PROCEDURE get_vendor_userlist(
7016       p_api_version         IN  NUMBER,
7017       p_init_msg_list       IN VARCHAR2,
7018       p_document_id         IN  NUMBER,
7019       p_external_party_id   IN NUMBER,
7020       x_msg_data            OUT NOCOPY  VARCHAR2,
7021       x_msg_count           OUT NOCOPY  NUMBER,
7022       x_return_status       OUT NOCOPY  VARCHAR2,
7023     x_external_userlist   OUT NOCOPY VARCHAR2) IS
7024 
7025     l_api_name      VARCHAR2(30);
7026     l_api_version       CONSTANT NUMBER := 1.0;
7027     l_contact_email_address VARCHAR2(450);
7028     l_index             NUMBER;
7029 
7030     CURSOR vendor_contact_csr IS
7031       SELECT contact_id
7032       FROM OKC_REP_PARTY_CONTACTS
7033       WHERE contract_id = p_document_id
7034        AND  party_id = p_external_party_id
7035        AND  party_role_code = G_PARTY_ROLE_SUPPLIER;
7036 
7037     CURSOR vendor_email_csr(l_contact_id NUMBER) IS
7038         SELECT email_address
7039         FROM po_vendor_contacts pvc
7040         WHERE pvc.vendor_contact_id = l_contact_id;
7041 
7042   BEGIN
7043 
7044     l_api_name      := 'get_vendor_userlist';
7045 
7046     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7047         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7048                 'Entered OKC_REP_UTIL_PVT.get_external_userlist');
7049         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7050                 'p_document_id is: ' || to_char(p_document_id));
7051         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7052                 'p_external_party_id is: ' || to_char(p_external_party_id));
7053     END IF;
7054 
7055   -- Standard call to check for call compatibility.
7056     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7057       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7058     END IF;
7059     -- Initialize message list if p_init_msg_list is set to TRUE.
7060     IF FND_API.to_Boolean( p_init_msg_list ) THEN
7061       FND_MSG_PUB.initialize;
7062     END IF;
7063 
7064     --  Initialize API return status to success
7065     x_return_status := FND_API.G_RET_STS_SUCCESS;
7066 
7067     -- Get email address of the vendor contacts.
7068     l_index := 1;
7069     FOR vendor_contact_rec IN vendor_contact_csr  LOOP
7070 
7071       -- Added for bug 5230060 fix
7072       l_contact_email_address := NULL;
7073 
7074         OPEN vendor_email_csr(vendor_contact_rec.contact_id);
7075         FETCH vendor_email_csr INTO l_contact_email_address;
7076         CLOSE vendor_email_csr;
7077         IF (l_contact_email_address IS NOT NULL) THEN
7078             IF (l_index = 1) THEN
7079                 x_external_userlist := l_contact_email_address;
7080             ELSE
7081                 x_external_userlist := x_external_userlist || ',' || l_contact_email_address;
7082             END IF;  -- (l_index = 1)
7083         l_index := l_index + 1;
7084         END IF; -- (l_contact_email_address <> NULL)
7085     END LOOP;
7086 
7087     -- Standard call to get message count and if count is 1, get message info.
7088     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data );
7089 
7090   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7091         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7092                 'Leaving OKC_REP_UTIL_PVT.get_vendor_userlist');
7093     END IF;
7094 
7095 
7096     EXCEPTION
7097       WHEN FND_API.G_EXC_ERROR THEN
7098         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7099            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7100                  g_module || l_api_name,
7101                  'Leaving get_vendor_userlist:FND_API.G_EXC_ERROR Exception');
7102         END IF;
7103         --close cursor
7104         IF (vendor_contact_csr%ISOPEN) THEN
7105           CLOSE vendor_contact_csr ;
7106         END IF;
7107         IF (vendor_email_csr%ISOPEN) THEN
7108           CLOSE vendor_email_csr ;
7109         END IF;
7110         x_return_status := FND_API.G_RET_STS_ERROR;
7111         FND_MSG_PUB.Count_And_Get(
7112         p_count =>  x_msg_count,
7113         p_data  =>  x_msg_data
7114         );
7115 
7116       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7117         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7118            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7119                  g_module || l_api_name,
7120                  'Leaving get_vendor_userlist:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
7121         END IF;
7122         --close cursor
7123         IF (vendor_contact_csr%ISOPEN) THEN
7124           CLOSE vendor_contact_csr ;
7125         END IF;
7126         IF (vendor_email_csr%ISOPEN) THEN
7127           CLOSE vendor_email_csr ;
7128         END IF;
7129         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7130         FND_MSG_PUB.Count_And_Get(
7131         p_count =>  x_msg_count,
7132         p_data  =>  x_msg_data
7133         );
7134 
7135       WHEN OTHERS THEN
7136         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7137            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7138                  g_module || l_api_name,
7139                  'Leaving get_vendor_userlist because of EXCEPTION: ' || sqlerrm);
7140         END IF;
7141         --close cursor
7142         IF (vendor_contact_csr%ISOPEN) THEN
7143           CLOSE vendor_contact_csr ;
7144         END IF;
7145         IF (vendor_email_csr%ISOPEN) THEN
7146           CLOSE vendor_email_csr ;
7147         END IF;
7148         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7149                             p_msg_name     => G_UNEXPECTED_ERROR,
7150                             p_token1       => G_SQLCODE_TOKEN,
7151                             p_token1_value => sqlcode,
7152                             p_token2       => G_SQLERRM_TOKEN,
7153                             p_token2_value => sqlerrm);
7154         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7155         FND_MSG_PUB.Count_And_Get(
7156         p_count =>  x_msg_count,
7157         p_data  =>  x_msg_data
7158         );
7159   END get_vendor_userlist;
7160 
7161   -- Start of comments
7162   --API name      : get_customer_userlist
7163   --Type          : Private.
7164   --Function      : Returns the external customer user email addresses.
7165   --Pre-reqs      : None.
7166   --Parameters    :
7167   --IN            : p_api_version         IN NUMBER       Required
7168   --              : p_init_msg_list       IN VARCHAR2     Optional
7169   --                   Default = FND_API.G_FALSE
7170   --              : p_document_id         IN NUMBER       Required
7171   --                   Id of the contract
7172   --              : p_external_party_id   IN NUMBER       Required
7173   --                   External party ID
7174   --              : p_external_party_role IN VARCHAR2     Required
7175   --                   External party role.
7176   --OUT           : x_external_userlist   OUT  VARCHAR2(1)
7177   --                      external contact email addresses
7178   --              : x_return_status       OUT  VARCHAR2(1)
7179   --              : x_msg_count           OUT  NUMBER
7180   --              : x_msg_data            OUT  VARCHAR2(2000)
7181   -- End of comments
7182   PROCEDURE get_customer_userlist(
7183       p_api_version         IN  NUMBER,
7184       p_init_msg_list       IN VARCHAR2,
7185       p_document_id         IN  NUMBER,
7186       p_external_party_id   IN NUMBER,
7187       p_external_party_role IN VARCHAR2,
7188       x_msg_data            OUT NOCOPY  VARCHAR2,
7189       x_msg_count           OUT NOCOPY  NUMBER,
7190       x_return_status       OUT NOCOPY  VARCHAR2,
7191     x_external_userlist   OUT NOCOPY VARCHAR2) IS
7192 
7193     l_api_name      VARCHAR2(30);
7194     l_api_version       CONSTANT NUMBER := 1.0;
7195     l_contact_email_address     VARCHAR2(450);
7196     l_index             NUMBER;
7197 
7198     CURSOR tca_contact_csr IS
7199       SELECT contact_id
7200       FROM OKC_REP_PARTY_CONTACTS
7201       WHERE contract_id = p_document_id
7202        AND  party_id = p_external_party_id
7203        AND  party_role_code = p_external_party_role;
7204 
7205     CURSOR tca_email_csr(l_contact_id NUMBER) IS
7206         SELECT email_address
7207         FROM hz_contact_points cp
7208         WHERE cp.owner_table_id = l_contact_id
7209            AND   cp.owner_table_name='HZ_PARTIES'
7210            AND   cp.contact_point_type = 'EMAIL';
7211   BEGIN
7212     l_api_name := 'get_customer_userlist';
7213 
7214     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7215         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7216                 'Entered OKC_REP_UTIL_PVT.get_customer_userlist');
7217         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7218                 'p_document_id is: ' || to_char(p_document_id));
7219         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7220                 'p_external_party_id is: ' || to_char(p_external_party_id));
7221     END IF;
7222 
7223   -- Standard call to check for call compatibility.
7224     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7225       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7226     END IF;
7227     -- Initialize message list if p_init_msg_list is set to TRUE.
7228     IF FND_API.to_Boolean( p_init_msg_list ) THEN
7229       FND_MSG_PUB.initialize;
7230     END IF;
7231 
7232     --  Initialize API return status to success
7233     x_return_status := FND_API.G_RET_STS_SUCCESS;
7234 
7235     l_index := 1;
7236     FOR tca_contact_rec IN tca_contact_csr LOOP
7237 
7238         -- Added for bug 5230060 fix
7239         l_contact_email_address := NULL;
7240 
7241         OPEN tca_email_csr(tca_contact_rec.contact_id);
7242         FETCH tca_email_csr INTO l_contact_email_address;
7243         CLOSE tca_email_csr;
7244         IF (l_contact_email_address IS NOT NULL) THEN
7245             IF (l_index = 1) THEN
7246                 x_external_userlist := l_contact_email_address;
7247             ELSE
7248                 x_external_userlist := x_external_userlist || ',' || l_contact_email_address;
7249             END IF;  -- (l_index = 1)
7250         l_index := l_index + 1;
7251         END IF; -- (l_contact_email_address <> NULL)
7252     END LOOP;
7253 
7254     -- Standard call to get message count and if count is 1, get message info.
7255     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data );
7256 
7257   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7258         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7259                 'Leaving OKC_REP_UTIL_PVT.get_customer_userlist');
7260     END IF;
7261 
7262 
7263     EXCEPTION
7264       WHEN FND_API.G_EXC_ERROR THEN
7265         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7266            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7267                  g_module || l_api_name,
7268                  'Leaving get_customer_userlist:FND_API.G_EXC_ERROR Exception');
7269         END IF;
7270         IF (tca_contact_csr%ISOPEN) THEN
7271           CLOSE tca_contact_csr ;
7272         END IF;
7273         IF (tca_email_csr%ISOPEN) THEN
7274           CLOSE tca_email_csr ;
7275         END IF;
7276         x_return_status := FND_API.G_RET_STS_ERROR;
7277         FND_MSG_PUB.Count_And_Get(
7278         p_count =>  x_msg_count,
7279         p_data  =>  x_msg_data
7280         );
7281 
7282       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7283         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7284            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7285                  g_module || l_api_name,
7286                  'Leaving get_customer_userlist:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
7287         END IF;
7288         IF (tca_contact_csr%ISOPEN) THEN
7289           CLOSE tca_contact_csr ;
7290         END IF;
7291         IF (tca_email_csr%ISOPEN) THEN
7292           CLOSE tca_email_csr ;
7293         END IF;
7294         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7295         FND_MSG_PUB.Count_And_Get(
7296         p_count =>  x_msg_count,
7297         p_data  =>  x_msg_data
7298         );
7299 
7300       WHEN OTHERS THEN
7301         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7302            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7303                  g_module || l_api_name,
7304                  'Leaving get_customer_userlist because of EXCEPTION: ' || sqlerrm);
7305         END IF;
7306         IF (tca_contact_csr%ISOPEN) THEN
7307           CLOSE tca_contact_csr ;
7308         END IF;
7309         IF (tca_email_csr%ISOPEN) THEN
7310           CLOSE tca_email_csr ;
7311         END IF;
7312         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7313                             p_msg_name     => G_UNEXPECTED_ERROR,
7314                             p_token1       => G_SQLCODE_TOKEN,
7315                             p_token1_value => sqlcode,
7316                             p_token2       => G_SQLERRM_TOKEN,
7317                             p_token2_value => sqlerrm);
7318         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7319         FND_MSG_PUB.Count_And_Get(
7320         p_count =>  x_msg_count,
7321         p_data  =>  x_msg_data
7322         );
7323   END get_customer_userlist;
7324 
7325 
7326   -- Start of comments
7327   --API name      : get_external_userlist
7328   --Type          : Private.
7329   --Function      : Returns the external user email addresses.
7330   --Pre-reqs      : None.
7331   --Parameters    :
7332   --IN            : p_api_version         IN NUMBER       Required
7333   --              : p_init_msg_list       IN VARCHAR2     Optional
7334   --                   Default = FND_API.G_FALSE
7335   --              : p_document_id         IN NUMBER       Required
7336   --                   Id of the contract
7337   --             : p_document_type        IN VARCHAR2     Required
7338   --                   Contract type.
7339   --              : p_external_party_id   IN NUMBER       Required
7340   --                   External party ID
7341   --              : p_external_party_role IN VARCHAR2     Required
7342   --                   External party role.
7343   --OUT           : x_external_userlist   OUT  VARCHAR2(1)
7344   --                      external contact email addresses
7345   --              : x_return_status       OUT  VARCHAR2(1)
7346   --              : x_msg_count           OUT  NUMBER
7347   --              : x_msg_data            OUT  VARCHAR2(2000)
7348   -- End of comments
7349   PROCEDURE get_external_userlist(
7350       p_api_version         IN  NUMBER,
7351       p_init_msg_list       IN VARCHAR2,
7352       p_document_id         IN  NUMBER,
7353       p_document_type       IN VARCHAR2,
7354       p_external_party_id   IN NUMBER,
7355       p_external_party_role IN VARCHAR2,
7356       x_msg_data            OUT NOCOPY  VARCHAR2,
7357       x_msg_count           OUT NOCOPY  NUMBER,
7358       x_return_status       OUT NOCOPY  VARCHAR2,
7359     x_external_userlist   OUT NOCOPY VARCHAR2) IS
7360 
7361     l_api_name      VARCHAR2(30);
7362     l_api_version       CONSTANT NUMBER := 1.0;
7363 
7364   BEGIN
7365 
7366     l_api_name      := 'get_external_userlist';
7367 
7368     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7369         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7370                 'Entered OKC_REP_UTIL_PVT.get_external_userlist');
7371         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7372                 'p_document_id is: ' || to_char(p_document_id));
7373         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7374                 'p_document_type is: ' || to_char(p_document_type));
7375         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7376                 'p_external_party_id is: ' || to_char(p_external_party_id));
7377         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7378                 'p_external_party_role is: ' || to_char(p_external_party_role));
7379     END IF;
7380 
7381     -- Standard call to check for call compatibility.
7382     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7383       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7384     END IF;
7385     -- Initialize message list if p_init_msg_list is set to TRUE.
7386     IF FND_API.to_Boolean( p_init_msg_list ) THEN
7387       FND_MSG_PUB.initialize;
7388     END IF;
7389 
7390     --  Initialize API return status to success
7391     x_return_status := FND_API.G_RET_STS_SUCCESS;
7392     if (p_external_party_role = G_PARTY_ROLE_SUPPLIER) THEN
7393         get_vendor_userlist(
7394           p_api_version         => p_api_version,
7395           p_init_msg_list       => p_init_msg_list,
7396           p_document_id         => p_document_id,
7397           p_external_party_id   => p_external_party_id,
7398           x_msg_data            => x_msg_data,
7399           x_msg_count           => x_msg_count,
7400           x_return_status       => x_return_status,
7401         x_external_userlist   => x_external_userlist);
7402   ELSE
7403       get_customer_userlist(
7404           p_api_version         => p_api_version,
7405           p_init_msg_list       => p_init_msg_list,
7406           p_document_id         => p_document_id,
7407           p_external_party_id   => p_external_party_id,
7408           p_external_party_role => p_external_party_role,
7409           x_msg_data            => x_msg_data,
7410           x_msg_count           => x_msg_count,
7411           x_return_status       => x_return_status,
7412         x_external_userlist   => x_external_userlist);
7413     END IF;
7414 
7415 
7416     -- Standard call to get message count and if count is 1, get message info.
7417     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data );
7418 
7419   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7420         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7421                 'Leaving OKC_REP_UTIL_PVT.get_external_userlist');
7422     END IF;
7423 
7424 
7425     EXCEPTION
7426       WHEN FND_API.G_EXC_ERROR THEN
7427         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7428            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7429                  g_module || l_api_name,
7430                  'Leaving get_external_userlist:FND_API.G_EXC_ERROR Exception');
7431         END IF;
7432         x_return_status := FND_API.G_RET_STS_ERROR;
7433         FND_MSG_PUB.Count_And_Get(
7434         p_count =>  x_msg_count,
7435         p_data  =>  x_msg_data
7436         );
7437 
7438       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7439         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7440            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7441                  g_module || l_api_name,
7442                  'Leaving get_external_userlist:FND_API.G_EXC_UNEXPECTED_ERROR Exception');
7443         END IF;
7444         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7445         FND_MSG_PUB.Count_And_Get(
7446         p_count =>  x_msg_count,
7447         p_data  =>  x_msg_data
7448         );
7449 
7450       WHEN OTHERS THEN
7451         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7452            fnd_log.string(FND_LOG.LEVEL_EXCEPTION,
7453                  g_module || l_api_name,
7454                  'Leaving get_external_userlist because of EXCEPTION: ' || sqlerrm);
7455         END IF;
7456         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7457                             p_msg_name     => G_UNEXPECTED_ERROR,
7458                             p_token1       => G_SQLCODE_TOKEN,
7459                             p_token1_value => sqlcode,
7460                             p_token2       => G_SQLERRM_TOKEN,
7461                             p_token2_value => sqlerrm);
7462         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7463         FND_MSG_PUB.Count_And_Get(
7464         p_count =>  x_msg_count,
7465         p_data  =>  x_msg_data
7466         );
7467   END get_external_userlist;
7468 
7469 
7470   -- Start of comments
7471   --API name      : ok_to_commit
7472   --Type          : Private.
7473   --Function      : Returns the external user email addresses.
7474   --                Bug Fix 4232846 - If p_validation_string is not null (called from
7475   --                Contract Parties or Deliverables) we should check contract status
7476   --                as well.
7477   --Pre-reqs      : None.
7478   --Parameters    :
7479   --IN            : p_api_version         IN NUMBER       Required
7480   --              : p_init_msg_list       IN VARCHAR2     Optional
7481   --                   Default = FND_API.G_FALSE
7482   --              : p_doc_id              IN NUMBER       Required
7483   --                   Id of the contract
7484   --              : p_validation_string   IN VARCHAR2     Optional
7485   --                   Validation string
7486   --OUT           : x_return_status       OUT  VARCHAR2(1)
7487   --              : x_msg_count           OUT  NUMBER
7488   --              : x_msg_data            OUT  VARCHAR2(2000)
7489   -- End of comments
7490   FUNCTION ok_to_commit(
7491       p_api_version       IN  Number,
7492       p_init_msg_list     IN  Varchar2,
7493       p_doc_id            IN  Number,
7494       p_validation_string IN  Varchar2 default NULL,
7495       x_return_status     OUT NOCOPY Varchar2,
7496       x_msg_data          OUT NOCOPY Varchar2,
7497       x_msg_count         OUT NOCOPY Number)
7498   RETURN Varchar2 IS
7499 
7500     l_api_version      NUMBER;
7501     l_api_name         VARCHAR2(30);
7502     l_ok_to_commit     Varchar2(1);
7503     l_temp             NUMBER;
7504 
7505 
7506     CURSOR l_contract_exist_csr IS
7507       SELECT contract_id
7508       FROM okc_rep_contracts_all
7509       WHERE contract_id=p_doc_id;
7510 
7511     CURSOR l_contract_updatable_csr IS
7512       SELECT contract_id
7513       FROM okc_rep_contracts_all
7514       WHERE contract_id=p_doc_id
7515           AND contract_status_code in (G_STATUS_REJECTED, G_STATUS_DRAFT);
7516 
7517 
7518   BEGIN
7519 
7520     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7521       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7522               'Entered OKC_REP_WF_PVT.ok_to_commit');
7523       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7524               'p_doc_id = ' || p_doc_id);
7525       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7526               'p_validation_string = ' || p_validation_string);
7527     END IF;
7528 
7529     l_api_version := 1.0;
7530     l_api_name := 'ok_to_commit';
7531     l_ok_to_commit := FND_API.G_FALSE;
7532 
7533 
7534     -- Standard call to check for call compatibility.
7535     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7536       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7537     END IF;
7538 
7539     -- Initialize message list if p_init_msg_list is set to TRUE.
7540     IF FND_API.to_Boolean( p_init_msg_list ) THEN
7541       FND_MSG_PUB.initialize;
7542     END IF;
7543 
7544     --  Initialize API return status to success
7545     x_return_status := FND_API.G_RET_STS_SUCCESS;
7546 
7547     -- If p_validation_string is NULL, check only the header record. Otherwise check contract
7548     -- status as well.
7549     IF (p_validation_string is NULL) THEN
7550         OPEN  l_contract_exist_csr;
7551         FETCH l_contract_exist_csr INTO l_temp;
7552         IF (l_contract_exist_csr%NOTFOUND) THEN
7553             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7554                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7555                 'Contract not found');
7556             END IF;
7557             l_ok_to_commit := FND_API.G_FALSE;
7558             CLOSE l_contract_exist_csr;
7559         ELSE
7560             -- Update the CONTRACT_LAST_UPDATE_DATE and CONTRACT_LAST_UPDATE_BY columns
7561             -- No need to updated these columns. These are updated upon View Contract.
7562             -- UPDATE  okc_rep_contracts_all
7563             -- SET     CONTRACT_LAST_UPDATE_DATE = sysdate,
7564             --      CONTRACT_LAST_UPDATED_BY = FND_GLOBAL.user_id()
7565             -- WHERE   contract_id = p_doc_id;
7566             l_ok_to_commit := FND_API.G_TRUE;
7567             CLOSE l_contract_exist_csr;
7568         END IF; -- (l_contract_exist_csr%NOTFOUND)
7569     ELSE
7570         OPEN  l_contract_updatable_csr;
7571         FETCH l_contract_updatable_csr INTO l_temp;
7572         IF (l_contract_updatable_csr%NOTFOUND) THEN
7573             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7574                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7575                 'Contract not found');
7576             END IF;
7577             l_ok_to_commit := FND_API.G_FALSE;
7578             CLOSE l_contract_updatable_csr;
7579         ELSE
7580             -- Update the CONTRACT_LAST_UPDATE_DATE and CONTRACT_LAST_UPDATE_BY columns
7581             -- No need to updated these columns. These are updated upon View Contract.
7582             -- UPDATE  okc_rep_contracts_all
7583             -- SET     CONTRACT_LAST_UPDATE_DATE = sysdate,
7584             --      CONTRACT_LAST_UPDATED_BY = FND_GLOBAL.user_id()
7585             -- WHERE   contract_id = p_doc_id;
7586             l_ok_to_commit := FND_API.G_TRUE;
7587             CLOSE l_contract_updatable_csr;
7588         END IF; -- (l_contract_updatable_csr%NOTFOUND)
7589     END IF;   -- (p_validation_string is NULL)
7590     -- Standard call to get message count and if count is 1, get message info.
7591     FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data );
7592     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7593       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,
7594                    '110: Leaving OKC_REP_UTIL_PVT.ok_to_commit');
7595       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7596               '111: Output is: ' || l_ok_to_commit);
7597       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7598               '112: x_return_status is: ' || x_return_status);
7599     END IF;
7600     return l_ok_to_commit;
7601   EXCEPTION
7602 
7603     WHEN OTHERS THEN
7604         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7605           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
7606                   'Leaving Function ok_to_commit because of EXCEPTION: '||sqlerrm);
7607         END IF;
7608 
7609         IF (l_contract_exist_csr%ISOPEN) THEN
7610           CLOSE l_contract_exist_csr ;
7611         END IF;
7612         IF (l_contract_updatable_csr%ISOPEN) THEN
7613           CLOSE l_contract_updatable_csr ;
7614         END IF;
7615         x_return_status := FND_API.G_RET_STS_ERROR;
7616         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7617                             p_msg_name     => G_UNEXPECTED_ERROR,
7618                             p_token1       => G_SQLCODE_TOKEN,
7619                             p_token1_value => sqlcode,
7620                             p_token2       => G_SQLERRM_TOKEN,
7621                             p_token2_value => sqlerrm);
7622     RETURN l_ok_to_commit ;
7623 
7624   END ok_to_commit;
7625 
7626 
7627 -- Start of comments
7628 --API name      : purge_recent_contracts
7629 --Type          : Private.
7630 --Function      : Called from OKC_PURGE_PVT package to purge
7631 --                contracts that are older than p_num_days days
7632 --Pre-reqs      : None.
7633 --Parameters    :
7634 --OUT           : errbuf  OUT NOCOPY VARCHAR2
7635 --              : retcode OUT NOCOPY VARCHAR2
7636 --IN            : p_num_days IN NUMBER
7637 --Note          :
7638 -- End of comments
7639 
7640   PROCEDURE purge_recent_contracts(
7641     errbuf  OUT NOCOPY VARCHAR2,
7642     retcode OUT NOCOPY VARCHAR2,
7643     p_num_days IN NUMBER)
7644 
7645   IS
7646     l_api_name      VARCHAR2(32);
7647   BEGIN
7648     l_api_name := 'purge_recent_contracts';
7649 
7650     retcode := G_RETURN_CODE_ERROR;
7651 
7652     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7653       FND_LOG.STRING(
7654         FND_LOG.LEVEL_PROCEDURE,
7655         G_MODULE||l_api_name,
7656         'Entering OKC_REP_UTIL_PVT.purge_recent_contracts');
7657     END IF;
7658 
7659     DELETE FROM okc_rep_recent_contracts c
7660     WHERE c.last_visited_date < SYSDATE - p_num_days;
7661 
7662     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7663     FND_LOG.STRING(
7664       FND_LOG.LEVEL_PROCEDURE,
7665       G_MODULE||l_api_name,
7666       'Leaving OKC_REP_UTIL_PVT.purge_recent_contracts');
7667     END IF;
7668 
7669     retcode := G_RETURN_CODE_SUCCESS;
7670 
7671     EXCEPTION
7672       WHEN OTHERS THEN
7673         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7674           fnd_log.string(
7675             FND_LOG.LEVEL_EXCEPTION,
7676             G_MODULE || l_api_name,
7677             'Leaving purge_recent_contracts because of EXCEPTION: ' || SQLERRM);
7678           errbuf := substr(SQLERRM, 1, 200);
7679         END IF;
7680 
7681 END purge_recent_contracts;
7682 
7683 -- Start of comments
7684 --API name      : can_update
7685 --Type          : Private.
7686 --Function      : Checks if user can update a contract
7687 --Pre-reqs      : None.
7688 --Parameters    :
7689 --OUT           : Return Y if user is allowed to update contracts, N if not allowed
7690 --Note          :
7691 -- End of comments
7692 
7693   FUNCTION can_update RETURN VARCHAR2
7694     IS
7695         l_api_name   VARCHAR2(10);
7696         l_can_update VARCHAR2(1);
7697   BEGIN
7698 
7699     l_api_name                     := 'can_update';
7700     l_can_update                   := 'N';
7701 
7702     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7703         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7704                 'Entered Function OKC_REP_UTIL_PVT.can_update');
7705     END IF;
7706 
7707     IF FND_FUNCTION.TEST(G_FUNC_OKC_REP_ADMINISTRATOR,'Y') OR FND_FUNCTION.TEST(G_FUNC_OKC_REP_USER_FUNC,'Y') THEN
7708       l_can_update := 'Y';
7709     END IF;
7710 
7711     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7712         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7713                 'OKC_REP_UTIL_PVT.check_contract_access returns l_can_update as : '
7714           || l_can_update);
7715         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7716                 'Leaving Function l_can_update');
7717     END IF;
7718     RETURN l_can_update;
7719 
7720   EXCEPTION
7721     WHEN OTHERS THEN
7722       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7723         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
7724                 'Leaving Function can_update because of EXCEPTION: '||sqlerrm);
7725       END IF;
7726       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7727                         p_msg_name     => G_UNEXPECTED_ERROR,
7728                         p_token1       => G_SQLCODE_TOKEN,
7729                         p_token1_value => sqlcode,
7730                         p_token2       => G_SQLERRM_TOKEN,
7731                         p_token2_value => sqlerrm);
7732       RETURN l_can_update ;
7733   END can_update;
7734 
7735 -- Start of comments
7736 --API name      : is_sales_workbench
7737 --Type          : Private.
7738 --Function      : Checks if the current application is Sales Contracts Workbench or Contract Repository
7739 --Pre-reqs      : None.
7740 --Parameters    :
7741 --OUT           : Return Y if it is Sales Contracts Workbench, otherwise returns N
7742 --Note          :
7743 -- End of comments
7744 
7745   FUNCTION is_sales_workbench RETURN VARCHAR2
7746     IS
7747 
7748       l_api_name   VARCHAR2(20);
7749       l_is_sales_workbench VARCHAR2(1);
7750 
7751     BEGIN
7752 
7753       l_api_name := 'is_sales_workbench';
7754       l_is_sales_workbench := 'N';
7755 
7756       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7757           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7758                   'Entered Function OKC_REP_UTIL_PVT.is_sales_workbench');
7759       END IF;
7760 
7761       IF FND_FUNCTION.TEST(G_FUNC_OKC_REP_SALES_WB_USER,'Y') THEN
7762         l_is_sales_workbench := 'Y';
7763       END IF;
7764 
7765       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7766           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7767                   'OKC_REP_UTIL_PVT.is_sales_workbench returns l_is_sales_workbench as : '
7768             || l_is_sales_workbench);
7769           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7770                   'Leaving Function is_sales_workbench');
7771       END IF;
7772 
7773       RETURN l_is_sales_workbench;
7774 
7775     EXCEPTION
7776       WHEN OTHERS THEN
7777         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7778           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
7779                   'Leaving Function is_sales_workbench because of EXCEPTION: '||sqlerrm);
7780         END IF;
7781         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7782                             p_msg_name     => G_UNEXPECTED_ERROR,
7783                             p_token1       => G_SQLCODE_TOKEN,
7784                             p_token1_value => sqlcode,
7785                             p_token2       => G_SQLERRM_TOKEN,
7786                             p_token2_value => sqlerrm);
7787         RETURN l_is_sales_workbench ;
7788   END is_sales_workbench;
7789 
7790 
7791   -- Start of comments
7792   --API name      : insert_new_vendor_contact
7793   --Type          : Private.
7794   --Function      : Creates a new vendor contact and returns the newly created contact id.
7795   --Pre-reqs      : None.
7796   --Parameters    :
7797   --IN            : p_vendor_site_id         IN NUMBER       Required
7798   --                   Vendor site id of the contact
7799   --              : p_contract_id         IN NUMBER       Required
7800   --                   Id of the contract for which the new contact being created
7801   --              : p_first_name       IN VARCHAR2     Required
7802   --                   First name of the contact
7803   --              : p_last_name         IN NUMBER       Required
7804   --                   Last name of the contact
7805   --              : p_area_code        IN VARCHAR2     Optional
7806   --                   Area code of the contact phone number.
7807   --              : p_phone   IN NUMBER       Optional
7808   --                   Phone number of the contact
7809   --              : p_email_address IN VARCHAR2     Optional
7810   --                   Email address of the contact.
7811   --OUT           : x_vendor_contact_id   OUT  VARCHAR2(1)
7812   --                   Vendor contact id
7813   -- End of comments
7814   PROCEDURE insert_new_vendor_contact(
7815       p_vendor_site_id                IN NUMBER,
7816       p_contract_id                   IN NUMBER,
7817       p_first_name                    IN VARCHAR2,
7818       p_last_name                     IN VARCHAR2,
7819       p_area_code                     IN VARCHAR2,
7820       p_phone                         IN VARCHAR2,
7821       p_email_address                 IN VARCHAR2,
7822       x_vendor_contact_id             OUT NOCOPY NUMBER)
7823   IS
7824       l_api_name      VARCHAR2(32);
7825       l_vendor_contact_rec AP_VENDOR_PUB_PKG.r_vendor_contact_rec_type;
7826 
7827 
7828       l_return_status VARCHAR2(1);
7829       l_msg_count NUMBER;
7830       l_msg_data VARCHAR2(2000);
7831       l_per_party_id NUMBER;
7832       l_rel_party_id NUMBER;
7833       l_rel_id NUMBER;
7834       l_org_contact_id NUMBER;
7835       l_party_site_id NUMBER;
7836       l_org_id okc_rep_contracts_all.org_id%TYPE;
7837 
7838       CURSOR contract_org_csr IS
7839           SELECT org_id
7840           FROM okc_rep_contracts_all
7841           WHERE contract_id = p_contract_id;
7842 
7843 /* Bug 8721411 */
7844       CURSOR get_party_id( okc_contract_id OKC_REP_CONTRACT_PARTIES.contract_id%TYPE ,
7845                        party_rep_location_id OKC_REP_CONTRACT_PARTIES.party_location_id%TYPE)
7846                    IS
7847                    SELECT     party_id
7848                    FROM     OKC_REP_CONTRACT_PARTIES
7849                    WHERE    contract_id=okc_contract_id  AND
7850                             party_location_id=party_rep_location_id;
7851 
7852 /* Bug 8721411 */
7853     BEGIN
7854       l_api_name := 'insert_new_vendor_contact';
7855 
7856       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7857         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,
7858                         'Entering OKC_REP_UTIL_PVT.insert_new_vendor_contact');
7859         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7860                         'p_vendor_site_id: ' || p_vendor_site_id);
7861         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7862                         'p_contract_id: ' || p_contract_id);
7863         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7864                         'p_first_name: ' || p_first_name);
7865         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7866                         'p_last_name: ' || p_last_name);
7867         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7868                         'p_area_code: ' || p_area_code);
7869         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7870                         'p_phone: ' || p_phone);
7871         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
7872                         'p_email_address: ' || p_email_address);
7873       END IF;
7874 
7875       -- Populate the record structure required by AP API
7876       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7877           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7878                   'Populate the record structure required by AP API');
7879       END IF;
7880 
7881       OPEN  contract_org_csr;
7882       FETCH contract_org_csr  INTO  l_org_id;
7883       CLOSE contract_org_csr;
7884 
7885       -- Set single-org policy context
7886       -- Even though in R12 vedor information is migrated to TCA still
7887       -- AP has some legacy code which requires org context
7888       IF (l_org_id IS NOT NULL) THEN
7889         MO_GLOBAL.set_policy_context(p_access_mode => 'S',
7890                                      p_org_id => l_org_id);
7891       END IF;
7892 
7893       l_vendor_contact_rec.VENDOR_SITE_ID := p_vendor_site_id;
7894       l_vendor_contact_rec.ORG_ID := l_org_id;
7895       l_vendor_contact_rec.PERSON_FIRST_NAME := p_first_name;
7896       l_vendor_contact_rec.PERSON_LAST_NAME := p_last_name;
7897       l_vendor_contact_rec.AREA_CODE := p_area_code;
7898       l_vendor_contact_rec.PHONE := p_phone;
7899       l_vendor_contact_rec.EMAIL_ADDRESS := p_email_address;
7900 
7901 /* Bug 8721411 */
7902 
7903        OPEN get_party_id(p_contract_id,p_vendor_site_id);
7904       FETCH get_party_id INTO  l_vendor_contact_rec.VENDOR_ID;
7905       CLOSE get_party_id;
7906 
7907 
7908 /* Bug 8721411 */
7909 
7910       -- Call the API to create a vendor contact
7911       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7912                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7913                         'Before calling AP_VENDOR_PUB_PKG.create_vendor_contact()');
7914       END IF;
7915 
7916       -- Call AP API to create a vendor contact as per user entered information
7917       AP_VENDOR_PUB_PKG.create_vendor_contact(
7918                             p_api_version => 1.0,
7919                             p_vendor_contact_rec => l_vendor_contact_rec,
7920                             p_commit => FND_API.G_FALSE,
7921                             x_vendor_contact_id => x_vendor_contact_id,
7922                             x_return_status => l_return_status,
7923                             x_msg_count => l_msg_count,
7924                             x_msg_data => l_msg_data,
7925                             x_per_party_id => l_per_party_id,
7926                             x_rel_party_id => l_rel_party_id,
7927                             x_rel_id => l_rel_id,
7928                             x_org_contact_id => l_org_contact_id,
7929                             x_party_site_id => l_party_site_id);
7930 
7931       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7932                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
7933                         'After calling AP_VENDOR_PUB_PKG.create_vendor_contact()');
7934       END IF;
7935 
7936       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7937         FND_LOG.STRING(
7938             FND_LOG.LEVEL_PROCEDURE,
7939             G_MODULE||l_api_name,
7940             'Leaving OKC_REP_UTIL_PVT.insert_new_vendor_contact');
7941       END IF;
7942 
7943     EXCEPTION
7944       WHEN OTHERS THEN
7945         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7946           fnd_log.string(
7947             FND_LOG.LEVEL_EXCEPTION,
7948             G_MODULE || l_api_name,
7949             'Leaving insert_new_vendor_contact because of EXCEPTION: ' || SQLERRM);
7950         END IF;
7951 
7952 END insert_new_vendor_contact;
7953 
7954 
7955 
7956   -- Start of comments
7957   --API name      : sync_con_header_attributes
7958   --Type          : Public.
7959   --Function      : Updates the header level attributes of all archived versions when they're modified in the working version
7960   --Pre-reqs      : None.
7961   --Parameters    :
7962   --IN            : p_api_version         IN NUMBER       Required
7963   --              : p_init_msg_list       IN VARCHAR2     Optional
7964   --              : p_contract_id         IN NUMBER       Required
7965   --                   Id of the contact
7966   --OUT           : x_return_status       OUT  VARCHAR2(1)
7967   --              : x_msg_count           OUT  NUMBER
7968   --              : x_msg_data            OUT  VARCHAR2(2000)
7969   -- End of comments
7970   PROCEDURE sync_con_header_attributes(
7971       p_api_version         IN NUMBER,
7972       p_init_msg_list       IN VARCHAR2,
7973       p_contract_id                IN NUMBER,
7974       x_msg_data            OUT NOCOPY  VARCHAR2,
7975       x_msg_count           OUT NOCOPY  NUMBER,
7976       x_return_status       OUT NOCOPY  VARCHAR2)
7977   IS
7978       l_api_name      VARCHAR2(32);
7979       l_api_version       NUMBER;
7980 
7981       l_desc okc_rep_contracts_all.contract_desc%TYPE;
7982       l_use_acl_flag okc_rep_contracts_all.use_acl_flag%TYPE;
7983       l_expire_ntf_flag okc_rep_contracts_all.expire_ntf_flag%TYPE;
7984       l_expire_ntf_period okc_rep_contracts_all.expire_ntf_period%TYPE;
7985       l_ntf_contact_role_id okc_rep_contracts_all.notify_contact_role_id%TYPE;
7986 
7987       CURSOR contract_attribs_csr IS
7988         SELECT contract_desc,
7989                use_acl_flag,
7990                expire_ntf_flag,
7991                expire_ntf_period,
7992                notify_contact_role_id
7993         FROM okc_rep_contracts_all
7994         WHERE contract_id = p_contract_id;
7995 
7996     BEGIN
7997       l_api_name := 'sync_con_header_attributes';
7998       l_api_version := 1.0;
7999 
8000       -- Standard Start of API savepoint
8001       SAVEPOINT sync_con_header_attributes;
8002 
8003       -- Standard call to check for call compatibility.
8004       IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
8005         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8006       END IF;
8007 
8008       -- Initialize message list if p_init_msg_list is set to TRUE.
8009       IF FND_API.to_Boolean( p_init_msg_list ) THEN
8010         FND_MSG_PUB.initialize;
8011       END IF;
8012 
8013       --  Initialize API return status to success
8014       x_return_status := FND_API.G_RET_STS_SUCCESS;
8015 
8016       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8017         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,
8018                         'Entering OKC_REP_UTIL_PVT.sync_con_header_attributes');
8019         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8020                         'p_contract_id: ' || p_contract_id);
8021       END IF;
8022 
8023       OPEN  contract_attribs_csr;
8024       FETCH contract_attribs_csr  INTO  l_desc, l_use_acl_flag, l_expire_ntf_flag, l_expire_ntf_period, l_ntf_contact_role_id;
8025       CLOSE contract_attribs_csr;
8026 
8027       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8028           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8029                           'l_desc : ' || l_desc);
8030           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8031                           'l_use_acl_flag : ' || l_use_acl_flag);
8032           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8033                           'l_expire_ntf_flag : ' || l_expire_ntf_flag);
8034           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8035                           'l_expire_ntf_period : ' || l_expire_ntf_period);
8036           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8037                           'l_ntf_contact_role_id : ' || l_ntf_contact_role_id);
8038       END IF;
8039 
8040       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8041         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8042                         'Updating Archived versions of Contract with new Contract header attribute values');
8043       END IF;
8044 
8045       -- Update all the rows in archived contract versions table with new contract header details
8046       UPDATE okc_rep_contract_vers
8047       SET contract_desc = l_desc,
8048           use_acl_flag = l_use_acl_flag,
8049           expire_ntf_flag = l_expire_ntf_flag,
8050           expire_ntf_period = l_expire_ntf_period,
8051           notify_contact_role_id = l_ntf_contact_role_id
8052       WHERE contract_id = p_contract_id;
8053 
8054       COMMIT WORK;
8055 
8056       -- Standard call to get message count and if count is 1, get message info.
8057       FND_MSG_PUB.Count_And_Get( p_count => x_msg_count, p_data => x_msg_data );
8058 
8059       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8060         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8061                 'Leaving OKC_REP_UTIL_PVT.sync_con_header_attributes');
8062       END IF;
8063 
8064     EXCEPTION
8065       WHEN OTHERS THEN
8066         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8067           fnd_log.string(
8068             FND_LOG.LEVEL_EXCEPTION,
8069             G_MODULE || l_api_name,
8070             'Leaving sync_con_header_attributes because of EXCEPTION: ' || SQLERRM);
8071         END IF;
8072 
8073         IF (contract_attribs_csr%ISOPEN) THEN
8074           CLOSE contract_attribs_csr ;
8075         END IF;
8076 
8077 END sync_con_header_attributes;
8078 
8079 
8080   -- Start of comments
8081   --API name      : check_contract_doc_access
8082   --Type          : Private.
8083   --Function      : Checks access to contract docs by the current user.
8084   --Pre-reqs      : None.
8085   --Parameters    :
8086   --IN            : p_api_version         IN NUMBER       Required
8087   --              : p_init_msg_list       IN VARCHAR2     Optional
8088   --              : p_contract_id         IN NUMBER       Required
8089   --                   Id of the contract whose access to be checked
8090   --              : p_function_name       IN VARCHAR2       Required
8091   --                   Name of the function whose access to be checked. Possible values OKC_REP_SELECT and OKC_REP_UPDATE
8092   --OUT           : x_has_access          OUT  VARCHAR2(1)
8093   --              : x_status_code         OUT  VARCHAR2(30)
8094   --              : x_return_status       OUT  VARCHAR2(1)
8095   --              : x_msg_count           OUT  NUMBER
8096   --              : x_msg_data            OUT  VARCHAR2(2000)
8097   -- End of comments
8098   PROCEDURE check_contract_doc_access(
8099       p_api_version     IN  NUMBER,
8100       p_init_msg_list   IN VARCHAR2,
8101       p_contract_id     IN  NUMBER,
8102       p_version_number  IN  NUMBER,
8103       p_function_name   IN  VARCHAR2,
8104       x_has_access      OUT NOCOPY  VARCHAR2,
8105       x_status_code     OUT NOCOPY  VARCHAR2,
8106       x_archived_yn     OUT NOCOPY  VARCHAR2,
8107       x_msg_data        OUT NOCOPY  VARCHAR2,
8108       x_msg_count       OUT NOCOPY  NUMBER,
8109       x_return_status   OUT NOCOPY  VARCHAR2)
8110   IS
8111 
8112      l_status_code OKC_REP_CONTRACTS_ALL.CONTRACT_STATUS_CODE%TYPE;
8113      l_archived_yn OKC_REP_DOC_VERSIONS_V.ARCHIVED_YN%TYPE;
8114 
8115   BEGIN
8116 
8117      check_contract_access(
8118       p_api_version     => p_api_version,
8119       p_init_msg_list   => p_init_msg_list,
8120       p_contract_id     => p_contract_id,
8121       p_function_name   => p_function_name,
8122       x_has_access      => x_has_access,
8123       x_msg_data        => x_msg_data,
8124       x_msg_count       => x_msg_count,
8125       x_return_status   => x_return_status) ;
8126 
8127       select status, archived_yn into l_status_code, l_archived_yn
8128         from OKC_REP_DOC_VERSIONS_V
8129         where document_id = p_contract_id
8130         and   document_version = p_version_number;
8131 
8132       x_status_code := l_status_code;
8133       x_archived_yn := l_archived_yn;
8134 
8135   EXCEPTION
8136   WHEN OTHERS THEN
8137 
8138         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8139           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,
8140                  g_module || 'check_contract_doc_access.exception',
8141                  '117: Leaving check_contract_access because of EXCEPTION: ' || sqlerrm);
8142         END IF;
8143         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8144                             p_msg_name     => G_UNEXPECTED_ERROR,
8145                             p_token1       => G_SQLCODE_TOKEN,
8146                             p_token1_value => sqlcode,
8147                             p_token2       => G_SQLERRM_TOKEN,
8148                             p_token2_value => sqlerrm);
8149         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8150         FND_MSG_PUB.Count_And_Get(
8151         p_count =>  x_msg_count,
8152         p_data  =>  x_msg_data
8153         );
8154 
8155   END check_contract_doc_access;
8156 
8157   FUNCTION get_accessible_ous RETURN VARCHAR2
8158   IS
8159     l_api_name   VARCHAR2(20);
8160     l_ou_list VARCHAR2(4000);
8161     l_ou_tab MO_GLOBAL.OrgIdTab;
8162 
8163     BEGIN
8164 
8165       l_api_name := 'get_accessible_ous';
8166 
8167 
8168       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8169           FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8170                   'Entered Function OKC_REP_UTIL_PVT.get_accessible_ous');
8171       END IF;
8172 
8173       l_ou_tab := MO_GLOBAL.get_ou_tab;
8174 
8175       IF (l_ou_tab.COUNT > 0) THEN
8176 
8177         FOR i IN l_ou_tab.FIRST .. l_ou_tab.LAST LOOP
8178 
8179           l_ou_list := l_ou_list || ' ' || l_ou_tab(i);
8180 
8181           IF (i <> l_ou_tab.LAST) THEN
8182 
8183             l_ou_list := l_ou_list || ', ';
8184 
8185           END IF;
8186 
8187         END LOOP;
8188 
8189       END IF;
8190 
8191       IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8192           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8193                   'OKC_REP_UTIL_PVT.get_accessible_ous returns l_ou_list as : '
8194             || l_ou_list);
8195           FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8196                   'Leaving Function get_accessible_ous');
8197       END IF;
8198       RETURN l_ou_list;
8199 
8200     EXCEPTION
8201       WHEN OTHERS THEN
8202         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8203           FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
8204                   'Leaving Function get_accessible_ous because of EXCEPTION: '||sqlerrm);
8205         END IF;
8206         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8207                           p_msg_name     => G_UNEXPECTED_ERROR,
8208                           p_token1       => G_SQLCODE_TOKEN,
8209                           p_token1_value => sqlcode,
8210                           p_token2       => G_SQLERRM_TOKEN,
8211                           p_token2_value => sqlerrm);
8212   END get_accessible_ous;
8213 
8214 
8215 -- Start of comments
8216   --API name      : has_contract_access
8217   --Type          : Private.
8218   --Function      : Checks access to a quote by the current user. It first checks the profile
8219   --              : "aso_enable_security_check". If this profile is set to 'No',
8220   --              : the API returns 'UPDATE'. else it calls ASO_SECURITY_INT.get_quote_access
8221   --              : to get the current user access.
8222   --              :
8223   --Pre-reqs      : None.
8224   --Parameters    :
8225   --IN            : p_resource_id         IN NUMBER       Required
8226   --              : p_quote_number        IN NUMBER       Required
8227   --OUT           : Return 'NONE' if the current user does not have access to the quote. Else it
8228   --              : returns 'READ' or 'UPDATE'.
8229   -- End of comments
8230   FUNCTION get_quote_access
8231   (
8232     p_resource_id                IN   NUMBER,
8233     p_quote_number               IN   NUMBER
8234   ) RETURN VARCHAR2
8235   IS
8236     l_api_name                     VARCHAR2(30);
8237     l_access                       VARCHAR2(30);
8238     l_check_security_access        VARCHAR2(15);
8239 
8240   BEGIN
8241 
8242     l_api_name                     := 'get_quote_access';
8243 
8244     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8245         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8246                 'Entered Function OKC_REP_UTIL_PVT.get_quote_access');
8247         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8248                 'Resource Id is: ' || p_resource_id);
8249         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8250                 'Quote Number is: ' || p_quote_number);
8251     END IF;
8252     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8253         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8254                 'checking security profile - ASO_ENABLE_SECURITY_CHECK');
8255     END IF;
8256 
8257     FND_PROFILE.GET(NAME => G_SALES_QUOTE_SEC_PROFILE, VAL => l_check_security_access);
8258     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8259         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8260             'Profile ASO_ENABLE_SECURITY_CHECK value is: '||l_check_security_access);
8261     END IF;
8262     IF (l_check_security_access = 'N') THEN
8263         l_access := G_SALES_QUOTE_UPDATE_ACCESS;
8264     ELSE
8265         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8266             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8267                 'Calling ASO_SECURITY_INT.get_quote_access to get the access');
8268         END IF;
8269         l_access := ASO_SECURITY_INT.get_quote_access(p_resource_id, p_quote_number);
8270     END IF;
8271     IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8272         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8273                 'OKC_REP_UTIL_PVT.get_quote_access returns l_access as : '
8274           || l_access);
8275         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8276                 'Leaving Function get_quote_access');
8277     END IF;
8278     RETURN l_access ;
8279 
8280   EXCEPTION
8281     WHEN OTHERS THEN
8282       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8283         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
8284                 'Leaving Function get_quote_access because of EXCEPTION: '||sqlerrm);
8285       END IF;
8286       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8287                         p_msg_name     => G_UNEXPECTED_ERROR,
8288                         p_token1       => G_SQLCODE_TOKEN,
8289                         p_token1_value => sqlcode,
8290                         p_token2       => G_SQLERRM_TOKEN,
8291                         p_token2_value => sqlerrm);
8292       RETURN l_access ;
8293   END get_quote_access;
8294 
8295  --Start of comments
8296   --API name      : contract_terms_disabled_yn
8297   --Type          : Private.
8298   --Function      : Based on the type of the contract selected for update, this
8299   --              : will return 'Y' if there exist contracts with this contract type
8300   --              : which have structured terms authored.
8301   --              : Otherwise, it will return 'N'.The Enable_Contract_Terms chkbox
8302   --              : will be readonly if 'Y' is returned.It will be updateable otherwise.
8303   --              :
8304   --Pre-reqs      : None.
8305   --Parameters    :
8306   --IN            : p_contract_type               IN  VARCHAR2      Required
8307   --OUT           : x_disable_contract_terms_yn   OUT VARCHAR2
8308   -- End of comments
8309 
8310   PROCEDURE contract_terms_disabled_yn
8311   (p_contract_type              IN VARCHAR2 ,
8312   x_disable_contract_terms_yn   OUT NOCOPY  VARCHAR2
8313 
8314   )
8315   IS
8316   l_api_name                     VARCHAR2(30);
8317 
8318   BEGIN
8319 
8320   l_api_name := 'contract_terms_disabled_yn';
8321 
8322   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8323         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8324                 'Entered Procedure OKC_REP_UTIL_PVT.contract_terms_disabled_yn');
8325         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8326                 'Contract Type is: ' || p_contract_type);
8327 
8328   END IF;
8329 
8330 
8331   SELECT Nvl((SELECT 'Y' FROM okc_template_usages WHERE document_type = p_contract_type AND ROWNUM =1),'N') INTO x_disable_contract_terms_yn FROM dual;
8332 
8333 
8334 
8335   IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8336         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8337                 'OKC_REP_UTIL_PVT.contract_terms_disabled_yn returns x_disable_contract_terms_yn as : '
8338           || x_disable_contract_terms_yn);
8339         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8340                 'Leaving Procedure contract_terms_disabled_yn');
8341   END IF;
8342 
8343   EXCEPTION
8344   WHEN OTHERS THEN
8345 
8346         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8347         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
8348                 'Leaving Function contract_terms_disabled_yn because of EXCEPTION: '||sqlerrm);
8349       END IF;
8350 
8351         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8352                             p_msg_name     => G_UNEXPECTED_ERROR,
8353                             p_token1       => G_SQLCODE_TOKEN,
8354                             p_token1_value => sqlcode,
8355                             p_token2       => G_SQLERRM_TOKEN,
8356                             p_token2_value => sqlerrm);
8357 
8358 
8359 
8360   END contract_terms_disabled_yn;
8361 
8362   PROCEDURE DocTyp_subent_disabled_yn
8363   (p_contract_type              IN VARCHAR2 ,
8364    x_disable_subentities_yn   OUT NOCOPY  VARCHAR2
8365 
8366   )
8367   IS
8368   l_api_name                     VARCHAR2(30);
8369 
8370   BEGIN
8371 
8372   l_api_name := 'DocTyp_subent_disabled_yn';
8373 
8374   IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8375         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8376                 'Entered Procedure OKC_REP_UTIL_PVT.DocTyp_subent_disabled_yn');
8377         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8378                 'Contract Type is: ' || p_contract_type);
8379 
8380   END IF;
8381 
8382 
8383   SELECT Nvl((SELECT 'Y' FROM okc_rep_contracts_all WHERE contract_type = p_contract_type AND ROWNUM =1),'N') INTO x_disable_subentities_yn FROM dual;
8384 
8385   IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8386         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8387                 'OKC_REP_UTIL_PVT.DocTyp_subent_disabled_yn returns x_disable_subentities_yn as : '
8388           || x_disable_subentities_yn);
8389         FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8390                 'Leaving Procedure DocTyp_subent_disabled_yn');
8391   END IF;
8392 
8393   EXCEPTION
8394   WHEN OTHERS THEN
8395 
8396         IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8397         FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION ,G_MODULE||l_api_name,
8398                 'Leaving Function contract_terms_disabled_yn because of EXCEPTION: '||sqlerrm);
8399       END IF;
8400 
8401         Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8402                             p_msg_name     => G_UNEXPECTED_ERROR,
8403                             p_token1       => G_SQLCODE_TOKEN,
8404                             p_token1_value => sqlcode,
8405                             p_token2       => G_SQLERRM_TOKEN,
8406                             p_token2_value => sqlerrm);
8407 
8408 
8409 
8410   END DocTyp_subent_disabled_yn;
8411  -- Start of comments
8412   --API name      : validate_import_party_contact
8413   --Type          : Private.
8414   --Function      : Validates contract party contacts during import
8415   --Pre-reqs      : Currently only called from repository import.
8416   --              : Contacts should be saved to the okc_rep_imp_contacts_t table
8417   --Parameters    :
8418   --IN            : p_api_version         IN NUMBER       Required
8419   --              : p_init_msg_list       IN VARCHAR2     Optional
8420   --                   Default = FND_API.G_FALSE
8421   --              : p_run_id         IN NUMBER       Required
8422   --                    import Run Id
8423   --OUT           : x_return_status       OUT  VARCHAR2(1)
8424   --              : x_msg_count           OUT  NUMBER
8425   --              : x_msg_data            OUT  VARCHAR2(2000)
8426   -- End of comments
8427   PROCEDURE validate_import_contacts(
8428        p_api_version              IN NUMBER,
8429        p_init_msg_list            IN VARCHAR2,
8430        p_run_id               IN NUMBER,
8431        x_return_status            OUT NOCOPY VARCHAR2,
8432        x_msg_count                OUT NOCOPY NUMBER,
8433        x_msg_data                 OUT NOCOPY VARCHAR2)
8434   IS
8435     l_api_name VARCHAR2(30);
8436     l_api_version       CONSTANT NUMBER := 1.0;
8437 
8438     l_valid_flag        VARCHAR2(1);
8439     l_error_code        VARCHAR2(20);
8440     l_error_msg         VARCHAR2(2000);
8441 
8442 
8443     l_signed_by_length  CONSTANT NUMBER := 150;
8444 
8445     l_party_role_code   VARCHAR2(240);
8446     l_party_id          NUMBER;
8447     l_contract_intent   VARCHAR2(1);
8448     l_contact_role_id NUMBER;
8449 
8450     CURSOR IMPORT_CONTACTS_CSR IS
8451     SELECT IMP_CONTACT_ID,
8452     IMP_PARTY_ID,
8453     IMP_CONTRACT_ID,
8454     contact_id,
8455     CONTACT_INDEX,
8456     PARTY_NAME_TXT,
8457     PARTY_ROLE_TXT,
8458     contact_name,
8459     contact_role_txt,
8460     VALID_FLAG,
8461     PROGRAM_ID,
8462     PROGRAM_LOGIN_ID,
8463     PROGRAM_APPLICATION_ID,
8464     REQUEST_ID,
8465     RUN_ID
8466     FROM okc_rep_imp_contacts_t
8467     WHERE RUN_ID = p_run_id
8468     AND Nvl(VALID_FLAG,'U') IN ('U', 'Y');
8469 
8470     l_import_contacts_rec IMPORT_CONTACTS_CSR%ROWTYPE;
8471 
8472     CURSOR c_party_exists_csr(p_party_role_txt VARCHAR2, p_party_name_txt VARCHAR2, p_imp_contract_id number) IS
8473       SELECT party_id, party_role_code
8474         FROM okc_rep_imp_parties_t
8475         WHERE Upper(party_role_txt) = Upper(p_party_role_txt)
8476         AND Upper(party_name_txt) = Upper(p_party_name_txt)
8477         AND imp_contract_id = p_imp_contract_id;
8478 
8479     cursor c_contact_role_exist_csr(p_contact_role_txt varchar2) IS
8480       SELECT b.contact_role_id
8481       FROM okc_rep_contact_roles_b b,
8482            okc_rep_contact_roles_tl tl
8483       WHERE Upper(tl.name) =  Upper(p_contact_role_txt)
8484         AND b.contact_role_id = tl.contact_role_id;
8485 
8486     BEGIN
8487 
8488     l_api_name := 'validate_import_contacts';
8489 
8490     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8491       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8492               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
8493       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8494               'p_run_id = ' || p_run_id);
8495 
8496     END IF;
8497 
8498     -- Standard call to check for call compatibility.
8499     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
8500       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8501     END IF;
8502 
8503     -- Initialize message list if p_init_msg_list is set to TRUE.
8504     IF FND_API.to_Boolean( p_init_msg_list ) THEN
8505       FND_MSG_PUB.initialize;
8506     END IF;
8507 
8508     --  Initialize API return status to success
8509     x_return_status := FND_API.G_RET_STS_SUCCESS;
8510 
8511     OPEN IMPORT_CONTACTS_CSR;
8512     LOOP
8513         FETCH IMPORT_CONTACTS_CSR INTO l_import_contacts_rec;
8514         EXIT WHEN IMPORT_CONTACTS_CSR%NOTFOUND;
8515 
8516         --Initialize l_valid_flag for every record
8517         l_valid_flag := 'Y';
8518         --Initialize l_error_msg for every record
8519         l_error_msg := NULL;
8520 
8521         --If l_valid_flag is already set to 'N', we do not perform any more checks
8522         --Party Name should exist
8523         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8524                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8525                     'Checking if user enters party name');
8526         END IF;
8527         IF l_import_contacts_rec.party_name_txt IS NOT NULL THEN
8528             l_import_contacts_rec.party_name_txt := LTRIM(l_import_contacts_rec.party_name_txt);
8529             l_import_contacts_rec.party_name_txt := RTRIM(l_import_contacts_rec.party_name_txt);
8530         END IF;
8531         IF (l_valid_flag = 'Y' AND (l_import_contacts_rec.party_name_txt IS NULL OR LENGTH(l_import_contacts_rec.party_name_txt)=0)) THEN
8532             l_valid_flag := 'N';
8533 
8534             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_PARTY_NAME');
8535             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8536                                   VALUE => l_import_contacts_rec.contact_index);
8537             l_error_msg := fnd_message.get;
8538             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8539                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8540                 'Party Name is missing for this contact');
8541                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8542                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8543                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8544                 'Party ID: '||l_import_contacts_rec.imp_party_id);
8545                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8546                 'l_error_msg: '||l_error_msg);
8547             END IF;
8548        END IF;
8549 
8550         --If l_valid_flag is already set to 'N', we do not perform any more checks
8551         --Party Role should exist
8552         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8553                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8554                     'Checking if user enters party role');
8555         END IF;
8556         IF l_import_contacts_rec.party_role_txt IS NOT NULL THEN
8557             l_import_contacts_rec.party_role_txt := LTRIM(l_import_contacts_rec.party_role_txt);
8558             l_import_contacts_rec.party_role_txt := RTRIM(l_import_contacts_rec.party_role_txt);
8559         END IF;
8560         IF (l_valid_flag = 'Y' AND (l_import_contacts_rec.party_role_txt IS NULL OR LENGTH(l_import_contacts_rec.party_role_txt)=0)) THEN
8561             l_valid_flag := 'N';
8562 
8563             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_PARTY_ROLE');
8564             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8565                                   VALUE => l_import_contacts_rec.contact_index);
8566             l_error_msg := fnd_message.get;
8567             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8568                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8569                 'Party Role is missing for this contact');
8570                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8571                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8572                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8573                 'Party ID: '||l_import_contacts_rec.imp_party_id);
8574                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8575                 'l_error_msg: '||l_error_msg);
8576             END IF;
8577 
8578        END IF;
8579 
8580         --If l_valid_flag is already set to 'N', we do not perform any more checks
8581         --Party should already exist on the contract (in OKC_REP_IMP_CONTRACTS_T)
8582         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8583                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8584                     'Checking if Party exists on the contract');
8585         END IF;
8586 
8587         OPEN c_party_exists_csr(l_import_contacts_rec.party_role_txt, l_import_contacts_rec.party_name_txt, l_import_contacts_rec.imp_contract_id);
8588         FETCH c_party_exists_csr INTO l_party_id, l_party_role_code;
8589 
8590          IF (c_party_exists_csr%NOTFOUND) THEN
8591           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8592             FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8593                   'Party does not exist on the contract');
8594           END IF;
8595           --CLOSE internal_party_contact_csr;
8596 
8597           l_valid_flag := 'N';
8598 
8599            fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_PARTY_ROLE');
8600             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8601                                   VALUE => l_import_contacts_rec.contact_index);
8602             l_error_msg := fnd_message.get;
8603             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8604                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8605                 'Party missing on contract');
8606                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8607                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8608                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8609                 'contact_id: '||l_import_contacts_rec.imp_contact_id);
8610                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8611                 'l_error_msg: '||l_error_msg);
8612             END IF;
8613 
8614         END IF;
8615         CLOSE c_party_exists_csr;
8616 
8617         --If l_valid_flag is already set to 'N', we do not perform any more checks
8618         --Contact Role should be entered
8619         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8620                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8621                     'Checking if user enters contact role');
8622         END IF;
8623 
8624         IF l_import_contacts_rec.contact_role_txt IS NOT NULL THEN
8625             l_import_contacts_rec.contact_role_txt := LTRIM(l_import_contacts_rec.contact_role_txt);
8626             l_import_contacts_rec.contact_role_txt := RTRIM(l_import_contacts_rec.contact_role_txt);
8627         END IF;
8628         IF (l_valid_flag = 'Y' AND (l_import_contacts_rec.contact_role_txt IS NULL OR LENGTH(l_import_contacts_rec.contact_role_txt)=0)) THEN
8629             l_valid_flag := 'N';
8630 
8631             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_CONTACT_ROLE');
8632             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8633                                   VALUE => l_import_contacts_rec.contact_index);
8634             l_error_msg := fnd_message.get;
8635             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8636                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8637                 'Contact Role is missing');
8638                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8639                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8640                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8641                 'Party ID: '||l_import_contacts_rec.imp_party_id);
8642                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8643                 'l_error_msg: '||l_error_msg);
8644             END IF;
8645 
8646        END IF;
8647 
8648         --If l_valid_flag is already set to 'N', we do not perform any more checks
8649         --Contact Role should valid
8650         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8651                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8652                     'Checking if contact role is valid');
8653         END IF;
8654 
8655         OPEN  c_contact_role_exist_csr(l_import_contacts_rec.contact_role_txt);
8656         FETCH c_contact_role_exist_csr INTO l_contact_role_id;
8657 
8658         IF c_contact_role_exist_csr%NOTFOUND THEN
8659 
8660 
8661           IF (l_valid_flag = 'Y') THEN
8662             l_valid_flag := 'N';
8663 
8664             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_CONTACT_ROLE');
8665             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8666                                   VALUE => l_import_contacts_rec.contact_index);
8667             l_error_msg := fnd_message.get;
8668             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8669                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8670                 'Contact Role is not valid');
8671                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8672                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8673                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8674                 'Contact ID: '||l_import_contacts_rec.imp_contact_id);
8675                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8676                 'Contact ID: '||l_import_contacts_rec.imp_contact_id);
8677                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8678                 'l_error_msg: '||l_error_msg);
8679             END IF;
8680 
8681           END IF;
8682         END IF;
8683         CLOSE c_contact_role_exist_csr;
8684 
8685         --If l_valid_flag is already set to 'N', we do not perform any more checks
8686         --Contact Id should be entered
8687         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8688                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8689                     'Checking if user enters Contact Id');
8690         END IF;
8691         IF l_import_contacts_rec.contact_id IS NOT NULL THEN
8692             l_import_contacts_rec.contact_id := LTRIM(l_import_contacts_rec.contact_id);
8693             l_import_contacts_rec.contact_id := RTRIM(l_import_contacts_rec.contact_id);
8694         END IF;
8695         IF (l_valid_flag = 'Y' AND (l_import_contacts_rec.contact_id IS NULL OR LENGTH(l_import_contacts_rec.contact_id)=0)) THEN
8696             l_valid_flag := 'N';
8697 
8698             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_CONTACT_ID');
8699             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8700                                   VALUE => l_import_contacts_rec.contact_index);
8701             l_error_msg := fnd_message.get;
8702             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8703                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8704                 'Contact Id is missing');
8705                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8706                 'Contract ID: '||l_import_contacts_rec.imp_contract_id);
8707                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8708                 'Party ID: '||l_import_contacts_rec.imp_party_id);
8709                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
8710                 'l_error_msg: '||l_error_msg);
8711             END IF;
8712 
8713        END IF;
8714 
8715         --If l_valid_flag is already set to 'N', we do not perform any more checks
8716         --Now call validate_party_contact API
8717         IF (l_valid_flag = 'Y') THEN
8718 
8719                     validate_party_contact(p_api_version => 1.0,
8720                                     p_init_msg_list => FND_API.G_FALSE,
8721                                     p_contract_id => l_import_contacts_rec.imp_contract_id,
8722                                     p_party_role_code => l_party_role_code,
8723                                     p_party_id => l_party_id,
8724                                     p_contact_id   => l_import_contacts_rec.contact_id,
8725                                     p_contact_name  => l_import_contacts_rec.contact_name,
8726                                     p_contact_role_id  => l_contact_role_id,
8727                                     x_valid_contact_flag => l_valid_flag,
8728                                     x_error_code => l_error_code,
8729                                     x_return_status => x_return_status,
8730                                     x_msg_count => x_msg_count,
8731                                     x_msg_data => x_msg_data);
8732 
8733                     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8734                         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8735                     'After calling validate_party_contact, l_valid_flag: '||l_valid_flag);
8736                     END IF;
8737 
8738                     IF(l_valid_flag = 'N') THEN
8739 
8740                         --Contact Not Unique
8741                         IF l_error_code = 'CONTACT_NOT_UNIQUE' THEN
8742                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_CONTACT_NOT_UNIQUE');
8743                             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8744                                       VALUE => l_import_contacts_rec.contact_index);
8745                             l_error_msg := fnd_message.get;
8746                         END IF;
8747 
8748                         --INV_ROLE_INTENT - Party role and Contract intent combination is invalid
8749                         IF l_error_code = 'CONTACT_NOT_EXIST' THEN
8750                             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_CONTACT');
8751                             fnd_message.set_token(TOKEN => 'CONTACT_INDEX',
8752                                     VALUE => l_import_contacts_rec.contact_index);
8753                             l_error_msg := fnd_message.get;
8754 
8755                         END IF;
8756 
8757                     END IF;
8758 
8759                 END IF;
8760       --  END IF;
8761 
8762 
8763         --Populate the error message table
8764         IF(l_valid_flag = 'N' AND l_error_msg IS NOT NULL) THEN
8765             populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
8766                                    p_api_version => 1.0,
8767                                    p_contract_id => l_import_contacts_rec.imp_contract_id,
8768                                    p_error_obj_type => G_IMP_CONTACTS_ERROR,
8769                                    p_error_obj_id => l_import_contacts_rec.imp_party_id,
8770                                    p_error_msg_txt => l_error_msg,
8771                                    p_program_id => l_import_contacts_rec.program_id,
8772                                    p_program_login_id => l_import_contacts_rec.program_login_id,
8773                                    p_program_app_id => l_import_contacts_rec.program_application_id,
8774                                    p_run_id => l_import_contacts_rec.request_id,
8775                                    x_return_status => x_return_status,
8776                                    x_msg_count => x_msg_count,
8777                                    x_msg_data => x_msg_data);
8778         END IF;
8779 
8780 
8781         --Update the record
8782         IF (l_valid_flag = 'Y') THEN
8783         UPDATE okc_rep_imp_contacts_t
8784         SET
8785         PARTY_ID = l_party_id,
8786         PARTY_ROLE_CODE = l_party_role_code,
8787         contact_role_id = l_contact_role_id,
8788         VALID_FLAG = l_valid_flag
8789         WHERE IMP_CONTACT_ID = l_import_contacts_rec.imp_contact_id;
8790         END IF;
8791 
8792         IF (l_valid_flag = 'N') THEN
8793         UPDATE okc_rep_imp_contacts_t
8794         SET
8795         VALID_FLAG = l_valid_flag
8796         WHERE IMP_CONTACT_ID = l_import_contacts_rec.imp_contact_id;
8797         END IF;
8798 
8799     END LOOP;
8800     CLOSE IMPORT_CONTACTS_CSR;
8801 
8802     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8803       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8804               'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
8805    END IF;
8806 
8807   EXCEPTION
8808 
8809     WHEN FND_API.G_EXC_ERROR THEN
8810 
8811       IF IMPORT_CONTACTS_CSR%ISOPEN THEN
8812         CLOSE IMPORT_CONTACTS_CSR;
8813       END IF;
8814 
8815       IF c_party_exists_csr%ISOPEN THEN
8816         CLOSE c_party_exists_csr;
8817       END IF;
8818 
8819       IF c_contact_role_exist_csr%ISOPEN THEN
8820         CLOSE c_contact_role_exist_csr;
8821       END IF;
8822 
8823       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8824         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
8825              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
8826       END IF;
8827 
8828       x_return_status := FND_API.G_RET_STS_ERROR;
8829       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
8830                                 p_data  =>  x_msg_data);
8831 
8832     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8833 
8834       IF IMPORT_CONTACTS_CSR%ISOPEN THEN
8835         CLOSE IMPORT_CONTACTS_CSR;
8836       END IF;
8837 
8838       IF c_party_exists_csr%ISOPEN THEN
8839         CLOSE c_party_exists_csr;
8840       END IF;
8841 
8842       IF c_contact_role_exist_csr%ISOPEN THEN
8843         CLOSE c_contact_role_exist_csr;
8844       END IF;
8845 
8846       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8847         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
8848              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
8849       END IF;
8850 
8851       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
8852       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
8853                                 p_data  =>  x_msg_data);
8854 
8855     WHEN OTHERS THEN
8856 
8857       IF IMPORT_CONTACTS_CSR%ISOPEN THEN
8858         CLOSE IMPORT_CONTACTS_CSR;
8859       END IF;
8860 
8861       IF c_party_exists_csr%ISOPEN THEN
8862         CLOSE c_party_exists_csr;
8863       END IF;
8864 
8865       IF c_contact_role_exist_csr%ISOPEN THEN
8866         CLOSE c_contact_role_exist_csr;
8867       END IF;
8868 
8869       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8870         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
8871              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
8872       END IF;
8873 
8874       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8875                           p_msg_name     => G_UNEXPECTED_ERROR,
8876                           p_token1       => G_SQLCODE_TOKEN,
8877                           p_token1_value => sqlcode,
8878                           p_token2       => G_SQLERRM_TOKEN,
8879                           p_token2_value => sqlerrm);
8880       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8881       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
8882                                 p_data  =>  x_msg_data);
8883 
8884   END validate_import_contacts;
8885 
8886 
8887  -- Start of comments
8888   --API name      : validate_import_risks
8889   --Type          : Private.
8890   --Function      : Validates contract risks during import
8891   --Pre-reqs      : Currently only called from repository import.
8892   --              : Contacts should be saved to the okc_rep_imp_risks_t table
8893   --Parameters    :
8894   --IN            : p_api_version         IN NUMBER       Required
8895   --              : p_init_msg_list       IN VARCHAR2     Optional
8896   --                   Default = FND_API.G_FALSE
8897   --              : p_run_id         IN NUMBER       Required
8898   --                    import Run Id
8899   --OUT           : x_return_status       OUT  VARCHAR2(1)
8900   --              : x_msg_count           OUT  NUMBER
8901   --              : x_msg_data            OUT  VARCHAR2(2000)
8902   -- End of comments
8903   PROCEDURE validate_import_risks(
8904        p_api_version              IN NUMBER,
8905        p_init_msg_list            IN VARCHAR2,
8906        p_run_id                   IN NUMBER,
8907        x_return_status            OUT NOCOPY VARCHAR2,
8908        x_msg_count                OUT NOCOPY NUMBER,
8909        x_msg_data                 OUT NOCOPY VARCHAR2)
8910   IS
8911     l_api_name VARCHAR2(30);
8912     l_api_version       CONSTANT NUMBER := 1.0;
8913 
8914     l_valid_flag        VARCHAR2(1);
8915     l_error_code        VARCHAR2(20);
8916     l_error_msg         VARCHAR2(2000);
8917 
8918 
8919     l_signed_by_length  CONSTANT NUMBER := 150;
8920 
8921     l_probability_code   VARCHAR2(240);
8922     l_risk_event_id          NUMBER;
8923     l_risk_impact_code   VARCHAR2(1);
8924     l_business_document_type VARCHAR2(30);
8925     l_business_document_version NUMBER;
8926     l_business_document_id NUMBER;
8927     l_risk_prob_code VARCHAR2(30);
8928 
8929     CURSOR IMPORT_RISKS_CSR IS
8930 
8931       SELECT IMP_CONTRACT_ID,
8932              risk_index,
8933              risk_event_txt,
8934              probability_txt,
8935              risk_impact_txt,
8936              risk_comments,
8937              risk_occured_YN,
8938              risk_occurence_date,
8939              --created_by
8940              VALID_FLAG,
8941              PROGRAM_ID,
8942              PROGRAM_LOGIN_ID,
8943              PROGRAM_APPLICATION_ID,
8944              REQUEST_ID,
8945              RUN_ID
8946         FROM okc_rep_imp_risks_t
8947        WHERE RUN_ID = p_run_id
8948          AND Nvl(VALID_FLAG,'U') IN ('U', 'Y');
8949 
8950     l_import_risks_rec IMPORT_RISKS_CSR%ROWTYPE;
8951 
8952     CURSOR c_risk_event_valid_csr(p_risk_event_txt VARCHAR2) IS
8953       SELECT RISK_EVENT_ID
8954         FROM okc_risk_events_tl
8955         WHERE Upper(name) = Upper(p_risk_event_txt)
8956          AND LANGUAGE = userenv('LANG');
8957 
8958     cursor c_risk_code_csr(p_risk_txt varchar2) IS
8959       SELECT lookup_code FROM fnd_lookups
8960       WHERE lookup_type = 'OKC_RISK_LEVELS'
8961       AND Upper(meaning) = Upper(p_risk_txt);
8962 
8963     CURSOR c_get_contract_details_csr(p_imp_contract_id NUMBER) IS
8964       SELECT contract_id, contract_type,  contract_version_num
8965       FROM OKC_REP_IMP_CONTRACTS_T
8966       WHERE imp_contract_id = p_imp_contract_id;
8967 
8968     BEGIN
8969 
8970     l_api_name := 'validate_import_risks';
8971 
8972     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
8973       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8974               'Entered OKC_REP_UTIL_PVT.'||l_api_name);
8975       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
8976               'p_run_id = ' || p_run_id);
8977 
8978     END IF;
8979 
8980     -- Standard call to check for call compatibility.
8981     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
8982       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8983     END IF;
8984 
8985     -- Initialize message list if p_init_msg_list is set to TRUE.
8986     IF FND_API.to_Boolean( p_init_msg_list ) THEN
8987       FND_MSG_PUB.initialize;
8988     END IF;
8989 
8990     --  Initialize API return status to success
8991     x_return_status := FND_API.G_RET_STS_SUCCESS;
8992 
8993     OPEN IMPORT_RISKS_CSR;
8994     LOOP
8995         FETCH IMPORT_RISKS_CSR INTO l_import_risks_rec;
8996         EXIT WHEN IMPORT_RISKS_CSR%NOTFOUND;
8997 
8998         --Initialize l_valid_flag for every record
8999         l_valid_flag := 'Y';
9000         --Initialize l_error_msg for every record
9001         l_error_msg := NULL;
9002 
9003         --If l_valid_flag is already set to 'N', we do not perform any more checks
9004         --Risk Event should be entered
9005         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9006                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9007                     'Checking if user enters risk_event_txt');
9008         END IF;
9009         IF l_import_risks_rec.risk_event_txt IS NOT NULL THEN
9010             l_import_risks_rec.risk_event_txt := LTRIM(l_import_risks_rec.risk_event_txt);
9011             l_import_risks_rec.risk_event_txt := RTRIM(l_import_risks_rec.risk_event_txt);
9012         END IF;
9013         IF (l_valid_flag = 'Y' AND (l_import_risks_rec.risk_event_txt IS NULL OR LENGTH(l_import_risks_rec.risk_event_txt)=0)) THEN
9014             l_valid_flag := 'N';
9015 
9016             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_MISS_RISK_EVENT');
9017             fnd_message.set_token(TOKEN => 'RISK_INDEX',
9018                                   VALUE => l_import_risks_rec.risk_index);
9019             l_error_msg := fnd_message.get;
9020             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9021                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9022                 'Party Name is missing');
9023                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9024                 'Contract ID: '||l_import_risks_rec.imp_contract_id);
9025                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9026                 'l_error_msg: '||l_error_msg);
9027             END IF;
9028        END IF;
9029 
9030 
9031         --If l_valid_flag is already set to 'N', we do not perform any more checks
9032         --Risk Event should be valid
9033         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9034                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9035                     'Checking if risk_event_txt is valid');
9036         END IF;
9037 
9038         OPEN  c_risk_event_valid_csr(l_import_risks_rec.risk_event_txt);
9039         FETCH c_risk_event_valid_csr INTO l_risk_event_id;
9040 
9041         IF c_risk_event_valid_csr%NOTFOUND THEN
9042 
9043 
9044           IF (l_valid_flag = 'Y') THEN
9045             l_valid_flag := 'N';
9046 
9047             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_RISK_EVENT');
9048             fnd_message.set_token(TOKEN => 'RISK_INDEX',
9049                                   VALUE => l_import_risks_rec.risk_index);
9050             l_error_msg := fnd_message.get;
9051             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9052                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9053                 'Risk Event is not valid ');
9054                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9055                 'Contract ID: '||l_import_risks_rec.imp_contract_id);
9056                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9057                 'Risk Event: '||l_import_risks_rec.risk_event_txt);
9058                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9059                 'l_error_msg: '||l_error_msg);
9060             END IF;
9061 
9062           END IF;
9063         END IF;
9064         CLOSE c_risk_event_valid_csr;
9065 
9066 
9067        --If l_valid_flag is already set to 'N', we do not perform any more checks
9068         --Probability txt should be valid
9069         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9070                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9071                     'Checking if probability_txt is valid');
9072         END IF;
9073 
9074         OPEN  c_risk_code_csr(l_import_risks_rec.probability_txt);
9075         FETCH c_risk_code_csr INTO l_risk_prob_code;
9076 
9077         IF c_risk_code_csr%NOTFOUND THEN
9078 
9079 
9080           IF (l_valid_flag = 'Y') THEN
9081             l_valid_flag := 'N';
9082 
9083             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_RISK_PROB');
9084             fnd_message.set_token(TOKEN => 'RISK_INDEX',
9085                                   VALUE => l_import_risks_rec.risk_index);
9086             l_error_msg := fnd_message.get;
9087             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9088                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9089                 'Risk Probability is not valid ');
9090                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9091                 'Contract ID: '||l_import_risks_rec.imp_contract_id);
9092                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9093                 'Risk Event: '||l_import_risks_rec.risk_event_txt);
9094                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9095                 'l_error_msg: '||l_error_msg);
9096             END IF;
9097 
9098           END IF;
9099         END IF;
9100         CLOSE c_risk_code_csr;
9101 
9102        --If l_valid_flag is already set to 'N', we do not perform any more checks
9103         --risk_impact_txt should be valid
9104 
9105         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9106                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9107                     'Checking if risk_impact_txt is valid');
9108         END IF;
9109 
9110         OPEN  c_risk_code_csr(l_import_risks_rec.risk_impact_txt);
9111         FETCH c_risk_code_csr INTO l_risk_impact_code;
9112 
9113         IF c_risk_code_csr%NOTFOUND THEN
9114 
9115 
9116           IF (l_valid_flag = 'Y') THEN
9117             l_valid_flag := 'N';
9118 
9119             fnd_message.set_name(G_APP_NAME,'OKC_REP_IMP_INV_RISK_IMPACT');
9120             fnd_message.set_token(TOKEN => 'RISK_INDEX',
9121                                   VALUE => l_import_risks_rec.risk_index);
9122             l_error_msg := fnd_message.get;
9123             IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9124                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9125                 'Risk Impact is not valid is not valid');
9126                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9127                 'Contract ID: '||l_import_risks_rec.imp_contract_id);
9128                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9129                 'Risk Event: '||l_import_risks_rec.risk_event_txt);
9130                 FND_LOG.STRING( FND_LOG.LEVEL_STATEMENT ,G_MODULE||l_api_name,
9131                 'l_error_msg: '||l_error_msg);
9132             END IF;
9133 
9134           END IF;
9135         END IF;
9136         CLOSE c_risk_code_csr;
9137 
9138         OPEN c_get_contract_details_csr(l_import_risks_rec.imp_contract_id);
9139         FETCH c_get_contract_details_csr INTO l_business_document_type, l_business_document_id, l_business_document_version;
9140         CLOSE c_get_contract_details_csr;
9141 
9142         --Populate the error message table
9143         IF(l_valid_flag = 'N' AND l_error_msg IS NOT NULL) THEN
9144             populate_import_errors(p_init_msg_list => FND_API.G_FALSE,
9145                                    p_api_version => 1.0,
9146                                    p_contract_id => l_import_risks_rec.imp_contract_id,
9147                                    p_error_obj_type => G_IMP_RISKS_ERROR,
9148                                    p_error_obj_id => l_risk_event_id,
9149                                    p_error_msg_txt => l_error_msg,
9150                                    p_program_id => l_import_risks_rec.program_id,
9151                                    p_program_login_id => l_import_risks_rec.program_login_id,
9152                                    p_program_app_id => l_import_risks_rec.program_application_id,
9153                                    p_run_id => l_import_risks_rec.request_id,
9154                                    x_return_status => x_return_status,
9155                                    x_msg_count => x_msg_count,
9156                                    x_msg_data => x_msg_data);
9157         END IF;
9158 
9159 
9160         --Update the record
9161         IF (l_valid_flag = 'Y') THEN
9162         UPDATE okc_rep_imp_risks_t
9163         SET
9164         business_document_type = l_business_document_type,
9165         business_document_id = l_business_document_id,
9166         business_document_version = l_business_document_version,
9167         risk_event_id = l_risk_event_id,
9168         probability_code = l_risk_prob_code,
9169         risk_impact_code = l_risk_impact_code,
9170         VALID_FLAG = l_valid_flag
9171         WHERE IMP_CONTRACT_ID = l_import_risks_rec.imp_contract_id
9172           AND risk_event_txt = l_import_risks_rec.risk_event_txt;
9173         END IF;
9174 
9175         IF (l_valid_flag = 'N') THEN
9176         UPDATE okc_rep_imp_risks_t
9177         SET
9178         VALID_FLAG = l_valid_flag
9179         WHERE IMP_CONTRACT_ID = l_import_risks_rec.imp_contract_id
9180           AND risk_event_txt = l_import_risks_rec.risk_event_txt;
9181 
9182         END IF;
9183 
9184     END LOOP;
9185     CLOSE IMPORT_RISKS_CSR;
9186 
9187     IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9188       FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE ,G_MODULE||l_api_name,
9189               'Leaving OKC_REP_UTIL_PVT.'||l_api_name);
9190    END IF;
9191 
9192   EXCEPTION
9193 
9194     WHEN FND_API.G_EXC_ERROR THEN
9195 
9196       IF IMPORT_RISKS_CSR%ISOPEN THEN
9197         CLOSE IMPORT_RISKS_CSR;
9198       END IF;
9199 
9200       IF c_risk_event_valid_csr%ISOPEN THEN
9201         CLOSE c_risk_event_valid_csr;
9202       END IF;
9203 
9204       IF c_risk_code_csr%ISOPEN THEN
9205         CLOSE c_risk_code_csr;
9206       END IF;
9207 
9208       IF c_get_contract_details_csr%ISOPEN THEN
9209         CLOSE c_get_contract_details_csr;
9210       END IF;
9211 
9212       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9213         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
9214              'Leaving '||l_api_name||':FND_API.G_EXC_ERROR Exception');
9215       END IF;
9216 
9217       x_return_status := FND_API.G_RET_STS_ERROR;
9218       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
9219                                 p_data  =>  x_msg_data);
9220 
9221     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9222 
9223       IF IMPORT_RISKS_CSR%ISOPEN THEN
9224         CLOSE IMPORT_RISKS_CSR;
9225       END IF;
9226 
9227       IF c_risk_event_valid_csr%ISOPEN THEN
9228         CLOSE c_risk_event_valid_csr;
9229       END IF;
9230 
9231       IF c_risk_code_csr%ISOPEN THEN
9232         CLOSE c_risk_code_csr;
9233       END IF;
9234 
9235       IF c_get_contract_details_csr%ISOPEN THEN
9236         CLOSE c_get_contract_details_csr;
9237       END IF;
9238 
9239       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9240         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
9241              'Leaving '||l_api_name||':FND_API.G_EXC_UNEXPECTED_ERROR Exception');
9242       END IF;
9243 
9244       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
9245       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
9246                                 p_data  =>  x_msg_data);
9247 
9248     WHEN OTHERS THEN
9249 
9250       IF IMPORT_RISKS_CSR%ISOPEN THEN
9251         CLOSE IMPORT_RISKS_CSR;
9252       END IF;
9253 
9254       IF c_risk_event_valid_csr%ISOPEN THEN
9255         CLOSE c_risk_event_valid_csr;
9256       END IF;
9257 
9258       IF c_risk_code_csr%ISOPEN THEN
9259         CLOSE c_risk_code_csr;
9260       END IF;
9261 
9262       IF c_get_contract_details_csr%ISOPEN THEN
9263         CLOSE c_get_contract_details_csr;
9264       END IF;
9265 
9266       IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
9267         fnd_log.string(FND_LOG.LEVEL_EXCEPTION, g_module || l_api_name,
9268              'Leaving '||l_api_name||' because of EXCEPTION: ' || sqlerrm);
9269       END IF;
9270 
9271       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
9272                           p_msg_name     => G_UNEXPECTED_ERROR,
9273                           p_token1       => G_SQLCODE_TOKEN,
9274                           p_token1_value => sqlcode,
9275                           p_token2       => G_SQLERRM_TOKEN,
9276                           p_token2_value => sqlerrm);
9277                           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9278       FND_MSG_PUB.Count_And_Get(p_count =>  x_msg_count,
9279                           p_data  =>  x_msg_data);
9280 
9281   END validate_import_risks;
9282 
9283 
9284 END OKC_REP_UTIL_PVT;