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