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