[Home] [Help]
PACKAGE BODY: APPS.CSC_PROFILE_ENGINE_PKG
Source
1 PACKAGE BODY CSC_Profile_Engine_PKG AS
2 /* $Header: csccpepb.pls 120.22.12010000.3 2008/09/11 03:09:28 mpathani ship $ */
3
4 --
5 -- Constant values
6 --
7 debug CONSTANT BOOLEAN := FALSE; -- Run engine in debug or normal mode
8 date_format CONSTANT VARCHAR2(30) := 'YYYY/MM/DD HH24:MI:SS';
9 --
10 -- Global variables
11 --
12 warning_msg VARCHAR2(2000) := ''; -- non-fatal error messages
13 error_flag BOOLEAN := FALSE; -- error evaluating one or more blk/chk
14 --user_id NUMBER;
15 --login_id NUMBER;
16
17 --up_total Number := 0;
18 --ip_total Number := 0;
19 --ua_total NUmber := 0;
20 --ia_total Number := 0;
21
22 --g_for_insert Varchar2(1) := 'Y';
23 --g_for_party Varchar2(1) := 'Y';
24 --period_date Date := null;
25
26 g_error Varchar2(2000);
27
28 --
29 -- Utility to delete all records in pl/sql tables
30 --
31 PROCEDURE Table_Delete;
32
33
34 --
35 -- Run_Engine
36 -- Loop through all the effective profile checks and evaluate the results
37 -- for each party and account.
38 -- This program can be called in:
39 -- a. customer profile setup form, when changes takes place on the profile definition
40 -- b. customer profile and dashboard window, when refresh button is clicked.
41 -- c. Stand alone as a concurrent program
42 -- note: if no parameters are passed it is assumed that the package will be run
43 -- as a concurrent program. and will update all results for party and account.
44 -- IN
45 -- p_block_tbl - if there are changes in the setup in the profile checks (blocks),
46 -- a table of profile checks is passed.
47 -- p_check_tbl - if there are changes in the setup in the check variable, a table of check
48 -- variables is passed.
49 -- p_party_id
50 -- p_acct_id
51 -- p_group_id
52 -- -- this parameters is used when the refresh button is pressed. only those profile
53 -- checks, check variables that falls into the group for that party or account will
54 -- be calculated.
55 -- OUT
56 -- errbuf - return any error messages
57 -- retcode - return completion status (returns 0 for success, 1 for success
58 -- with warnings, and 2 for error)
59 --
60
61 PROCEDURE Run_Engine (p_errbuf OUT NOCOPY VARCHAR2,
62 p_retcode OUT NOCOPY NUMBER,
63 p_party_id IN NUMBER,
64 p_acct_id IN NUMBER,
65 p_group_id IN NUMBER ) IS
66
67 v_block_count NUMBER := 0;
68 v_check_count NUMBER := 0;
69
70 v_errbuf Varchar2(240);
71 v_retcode Number;
72 v_exception BOOLEAN;
73
74 v_date Date := null;
75
76 --l_period_date Date := null;
77 l_up_total Number := 0;
78 l_ip_total Number := 0;
79 l_ua_total NUmber := 0;
80 l_ia_total Number := 0;
81 l_custom_hook_enabled varchar2(1); /* Added for Custom Hook Enhancement */
82 l_ref_cursor csc_utils.Party_Ref_Cur_Type; /* Added for Custom Hook Enhancement */
83 l_party_rec csc_utils.Prof_Rec_Type; /* Added for Custom Hook Enhancement */
84 l_party_id Number;
85
86 BEGIN
87
88 -- Default user and login IDs
89 --user_id := fnd_global.user_id;
90 --login_id := fnd_global.login_id;
91
92 l_up_total := 0;
93 l_ip_total := 0;
94 l_ua_total := 0;
95 l_ia_total := 0;
96 table_delete;
97
98 /*************************************************************************************
99 START OF CUSTOM HOOK ENHANCEMENT
100 CSC_PROF_PARTY_SQL_CUHK will be invoked to get the select statement for fetching party
101 records by the profile engine.
102 *************************************************************************************/
103 l_custom_hook_enabled := 'N';
104
105
106 IF p_party_id IS NULL THEN
107 IF JTF_USR_HKS.ok_to_execute('CSC_PROF_PARTY_SQL_CUHK','GET_PARTY_SQL_PRE','B','C') THEN
108
109 l_custom_hook_enabled := 'Y';
110
111
112 CSC_PROF_PARTY_SQL_CUHK.Get_Party_Sql_Pre(l_ref_cursor);
113 LOOP
114 FETCH l_ref_cursor INTO l_party_id;
115 EXIT WHEN l_ref_cursor%NOTFOUND;
116 IF l_party_id is not NULL then
117 IF p_group_id is NULL then
118 Evaluate_Checks3(l_party_id,
119 null,
120 null,
121 v_errbuf,
122 v_retcode);
123 ELSE /* group_id is not null */
124 Evaluate_Checks2(l_party_id,
125 null,
126 p_group_id,
127 'N',
128 v_errbuf,
129 v_retcode);
130 END IF;
131 END IF;
132 p_errbuf := v_errbuf;
133 p_retcode := v_retcode;
134 END LOOP;
135 ELSE
136 l_custom_hook_enabled := 'N';
137 END IF; /* IF JTF_USR_HKS.ok_to_execute */
138 END IF; /* IF p_party_id IS NULL */
139
140 IF l_custom_hook_enabled = 'N' THEN
141 /*Existing logic is used */
142 /*******************************************************************************************
143 END OF CUSTOM HOOK ENHANCEMENT
144 ********************************************************************************************/
145
146 IF (p_party_id is null and p_group_id is NULL ) THEN
147
148 -- Populate the check results table for all parties and accounts for type 'B'
149 Evaluate_Checks1_Var;
150
151 IF g_check_no_batch = 'Y' THEN
152 -- Call Evaluate_Blocks1_No_Batch and Evaluate_Checks1_No_Batch
153 -- to process profile variables with no batch sql stmnt for type Variable ('B')
154 Evaluate_Blocks1_No_Batch(l_up_total, l_ip_total, l_ua_total, l_ia_total);
155 Evaluate_Checks1_No_Batch(v_errbuf, v_retcode);
156 p_errbuf := v_errbuf;
157 p_retcode := v_retcode;
158 END IF;
159
160 -- Populate the check results table for all parties and accounts for type 'T'
161 Evaluate_Checks1_Rule(v_errbuf, v_retcode);
162 p_errbuf := v_errbuf;
163 p_retcode := v_retcode;
164
165 -- Call Relationship Plan Engine
166 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, null, null);
167
168 ELSIF (p_party_id IS NOT NULL and p_group_id IS NOT NULL) THEN
169 -- Evaluate for this party Alone, only for Valid checks present in the given group
170
171 Evaluate_Checks2(p_party_id => p_party_id,
172 p_acct_id => p_acct_id,
173 p_group_id => p_group_id,
174 p_critical_flag => 'N',
175 errbuf => v_errbuf,
176 retcode => v_retcode);
177
178 party_id_plan_table(1) := p_party_id;
179 account_id_plan_table(1) := p_acct_id;
180 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, null); -- added by mpathani for bug 6928322
181
182 ELSIF (p_party_id IS NOT NULL and p_group_id is null ) THEN
183 -- Evaluate for all Valid Checks and For this party ;
184 Evaluate_Checks3(p_party_id, p_acct_id,
185 p_group_id, v_errbuf, v_retcode);
186
187 party_id_plan_table(1) := p_party_id;
188 account_id_plan_table(1) := p_acct_id;
189 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, null); -- added by mpathani for bug 6928322
190
191 ELSIF (p_party_id IS NULL and p_group_id is NOT null ) THEN -- Added for 1850508
192 -- Assume Group is given, but party and Account are null , Process for all parties
193 -- This is specifically for cases, where the customers can start 'n' concurrent pgms
194 -- for different groups.
195
196 -- Populate the check results table for all parties and accounts
197 Evaluate_Checks4_Var(p_Group_id);
198
199 -- Call Evaluate_Blocks4_No_Batch and Evaluate_Checks4_No_Batch
200 -- to process profile variables with no batch sql stmnt
201
202 IF g_check_no_batch = 'Y' THEN
203 Evaluate_Blocks4_No_Batch(l_up_total, l_ip_total, l_ua_total, l_ia_total, p_group_id);
204 Evaluate_Checks4_No_Batch(v_errbuf, v_retcode, p_Group_id);
205 p_errbuf := v_errbuf;
206 p_retcode := v_retcode;
207 END IF;
208
209 Evaluate_Checks4_Rule(v_errbuf, v_retcode, p_Group_id);
210 p_errbuf := v_errbuf;
211 p_retcode := v_retcode;
212
213 -- Call Relationship Plan Engine
214 -- Check How to call Plans engine
215 -- Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, null, null);
216
217 END IF;
218 END IF; /* IF l_custom_hook_enabled = 'N' */
219
220 exception
221 when others then
222 table_delete;
223 g_error := sqlcode || ' ' || sqlerrm;
224 fnd_file.put_line(fnd_file.log , g_error);
225
226 END Run_Engine;
227
228 --
229 -- Bug 1942032 to run engine as a concurrent program - overloaded procedure when
230 -- Account Id is removed from conc. program parameters.
231 --
232 PROCEDURE Run_Engine (p_errbuf OUT NOCOPY VARCHAR2,
233 p_retcode OUT NOCOPY NUMBER,
234 p_party_id IN NUMBER,
235 p_group_id IN NUMBER ) Is
236
237 begin
238 run_engine(p_errbuf => p_errbuf,
239 p_retcode => p_retcode,
240 p_party_id => p_party_id,
241 p_acct_id => NULL,
242 p_group_id => p_group_id);
243
244 End Run_engine;
245
246 /* added the overloaded procedure for JIT enhancement */
247 PROCEDURE Run_Engine_jit (p_party_id IN NUMBER,
248 p_acct_id IN NUMBER,
249 p_group_id IN NUMBER,
250 p_critical_flag IN VARCHAR2,
251 p_party_type IN VARCHAR2 DEFAULT 'CUSTOMER')
252 IS
253 v_errbuf VARCHAR2(240);
254 v_retcode NUMBER;
255 BEGIN
256 /* If party_type is customer -then g_dashboard_for_employee is Y else N */
257 IF upper(p_party_type) ='CUSTOMER' then
258 g_dashboard_for_employee := 'N';
259 elsif upper(p_party_type) ='EMPLOYEE' then
260 g_dashboard_for_employee := 'Y';
261 else
262 g_dashboard_for_employee := ' ';
263
264 end if;
265
266 Evaluate_Checks2(p_party_id => p_party_id,
267 p_acct_id => p_acct_id,
268 p_group_id => p_group_id,
269 p_critical_flag => p_critical_flag,
270 errbuf => v_errbuf,
271 retcode => v_retcode);
272 END Run_Engine_jit;
273
274 /* Overloaded procedure for R12 Employee HelpDesk Modifications */
275 PROCEDURE Run_Engine_All (p_errbuf OUT NOCOPY VARCHAR2,
276 p_retcode OUT NOCOPY NUMBER,
277 p_party_type IN VARCHAR2,
278 p_party_id IN NUMBER,
279 p_group_id IN NUMBER )
280 IS
281
282 BEGIN
283
284 /* If party_type is customer -then g_dashboard_for_employee is Y else N */
285 IF upper(p_party_type) ='CUSTOMER' then
286 g_dashboard_for_employee := 'N';
287 elsif upper(p_party_type) ='EMPLOYEE' then
288 g_dashboard_for_employee := 'Y';
289 else
290 g_dashboard_for_employee := ' ';
291
292 end if;
293
294 run_engine(p_errbuf => p_errbuf,
295 p_retcode => p_retcode,
296 p_party_id => p_party_id,
297 p_acct_id => null,
298 p_group_id => p_group_id);
299
300 END Run_Engine_All;
301 --
302 -- Evaluate_Checks1_Var
303 -- Loop through all checks and evaluate the results
304 -- for each customer and account for type 'B'(Variable)
305 -- Processing if only Batch_Sql_Stmnt is not null
306 -- if check_id is null, party_id is null, account_id is null
307 -- and block_id is null
308 --
309
310 PROCEDURE Evaluate_Checks1_Var
311 IS
312
313 chk_id Number;
314 chk_name Varchar2(240);
315 sel_blk_id Number;
316 data_type Varchar2(90);
317 fmt_mask Varchar2(90);
318 rule Varchar2(32767);
319
320 chk_u_l_flag Varchar2(3);
321 Thd_grade Varchar2(9);
322 truncate_flag Varchar2(1) := 'N';
323
324 blk_id Number := null;
325 sql_stmt Varchar2(2000) := null;
326 batch_sql_stmnt Varchar2(4000) := null;
327 curr_code Varchar2(15) := null;
328
329 v_party_in_sql Number := 0;
330 v_acct_in_sql Number := 0;
331
332 v_party_id Number;
333 v_check_level Varchar2(10);
334
335 curr_date DATE := SYSDATE;
336 insert_stmnt VARCHAR2(4000);
337 insert_stmnt_sum VARCHAR2(4000);
338 insert_stmnt_final VARCHAR2(4000);
339 insert_stmnt_party VARCHAR2(4000);
340 insert_stmnt_acct VARCHAR2(4000);
341
342 --Fix bug#7329039 by mpathani
343 --select_clause VARCHAR2(100);
344 --v_select_clause VARCHAR2(100);
345 select_clause VARCHAR2(2000);
346 v_select_clause VARCHAR2(2000);
347
348 Range_Low_Value VARCHAR2(240);
349 Range_High_Value VARCHAR2(240);
350 val VARCHAR2(240) := null;
351
352 /* variables for columns of insert statement */
353 c_fmt_mask VARCHAR2(1000);
354 c_grade VARCHAR2(1000);
355 c_curr_code VARCHAR2(1000);
356 c_threshold VARCHAR2(1000);
357 c_rating VARCHAR2(1000);
358 c_color VARCHAR2(1000);
359
360 v_count NUMBER;
361 v_chk_count NUMBER;
362 v_batch_count NUMBER;
363
364 -- varlables for getting CSC schema name
365 v_schema_status VARCHAR2(1);
366 v_industry VARCHAR2(1);
367 v_schema_name VARCHAR2(30);
368 v_get_appl BOOLEAN;
369
370 -- variables to build the batch sql for summation
371 v_select_pos number;
372 v_select_length number;
373 v_from_pos number;
374 v_from_sum varchar2(2000);
375 v_select_sum varchar2(2000) := 'SELECT hz.party_id, null, ';
376 v_group_pos number;
377 v_group varchar2(2000) := 'GROUP BY hz.party_id';
378 return_status varchar2(50);
379
380 -- variables for handling contact profile variables
381 v_where_clause_no_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE IN (' || '''' || 'PERSON' || '''' || ', ' || '''' || 'ORGANIZATION' || '''' || ')' ;
382 v_where_clause_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE = ' || '''' ||'PARTY_RELATIONSHIP'|| '''' ;
383
384 TABLESEGMENT_FULL EXCEPTION;
385 INDEXSEGMENT_FULL EXCEPTION;
386 SNAPSHOT_TOO_OLD EXCEPTION;
387 INTERNAL_ERROR EXCEPTION;
388 SUMMATION_ERROR EXCEPTION;
389
390 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
391 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
392 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
393 PRAGMA EXCEPTION_INIT(INTERNAL_ERROR, -600);
394
395 checks_csr checks_cur_var;
396
397 CURSOR block_csr IS
398 SELECT block_id, sql_stmnt, batch_sql_stmnt, currency_code, select_clause
399 FROM csc_prof_blocks_b a
400 WHERE a.block_id = sel_blk_id;
401
402 Cursor val_csr3 IS
403 Select Range_Low_Value, Range_High_Value
404 From csc_prof_check_ratings
405 Where check_id = chk_id
406 and check_rating_grade = thd_grade;
407
408 CURSOR rating_crs IS
409 SELECT rating_code, check_rating_grade, color_code, range_low_value, range_high_value
410 FROM csc_prof_check_ratings
411 WHERE check_id = chk_id;
412
413 BEGIN
414 COMMIT;
415 EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
416 EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES=TRUE';
417
418 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
419
420 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS NOLOGGING';
421 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS2_T NOLOGGING';
422 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS1_T NOLOGGING';
423
424 SELECT count(*) INTO v_chk_count FROM csc_prof_check_results;
425 SELECT count(*) INTO v_batch_count FROM CSC_PROF_BATCH_RESULTS2_T;
426
427 IF v_chk_count = 0 AND v_batch_count <> 0 THEN
428
429
430 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
431 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
432 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
433
434 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
435 INTO csc_prof_check_results
436 (check_results_id, check_id, party_id, cust_account_id,
437 value, currency_code, grade, created_by, creation_date,
438 last_updated_by, last_update_date, last_update_login,
439 results_threshold_flag, rating_code, color_code
440 )
441 SELECT
442 check_results_id, check_id, party_id, cust_account_id,
443 value, currency_code, grade, created_by, creation_date,
444 last_updated_by, last_update_date, last_update_login,
445 results_threshold_flag, rating_code, color_code
446 FROM CSC_PROF_BATCH_RESULTS2_T;
447
448 COMMIT;
449
450 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
451 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
452 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
453
454 END IF;
455 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
456
457 IF g_dashboard_for_contact IS NULL THEN
458 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
459 END IF;
460
461 /* R12 Employee HelpDesk Modifications */
462
463 /* If g_dashboard_for_employee ='Y' then honour only employee level checks.If
464 'N',honour party_level checks with option for contact level fetched from profile option */
465
466
467 IF g_dashboard_for_employee ='Y' THEN
468
469 OPEN checks_csr FOR
470 SELECT check_id, select_block_id, check_level,
471 data_type, format_mask, check_upper_lower_flag, threshold_grade
472 FROM csc_prof_checks_b
473 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
474 AND Nvl(end_date_active, Sysdate)
475 AND select_type = 'B'
476 AND check_level IN ('EMPLOYEE');
477 ELSIF g_dashboard_for_employee ='N' THEN
478 IF g_dashboard_for_contact = 'Y' THEN
479 OPEN checks_csr FOR
480 SELECT check_id, select_block_id,check_level,
481 data_type, format_mask, check_upper_lower_flag, threshold_grade
482 FROM csc_prof_checks_b
483 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
484 AND Nvl(end_date_active, Sysdate)
485 AND select_type = 'B'
486 AND check_level IN ('PARTY', 'ACCOUNT', 'CONTACT');
487 ELSIF g_dashboard_for_contact = 'N' THEN
488 OPEN checks_csr FOR
489 SELECT check_id, select_block_id,check_level,
490 data_type, format_mask, check_upper_lower_flag, threshold_grade
491 FROM csc_prof_checks_b
492 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
493 AND Nvl(end_date_active, Sysdate)
494 AND select_type = 'B'
495 AND check_level IN ('PARTY', 'ACCOUNT');
496 END IF;
497 END IF;
498
499 /* End of R12 Employee HelpDesk Modifications */
500
501 LOOP
502 FETCH checks_csr
503 INTO chk_id, sel_blk_id, v_check_level, data_type, fmt_mask, chk_u_l_flag, Thd_grade;
504
505 EXIT WHEN checks_csr%notfound;
506
507 Open block_csr;
508 Fetch block_csr INTO blk_id, sql_stmt, batch_sql_stmnt, curr_code, select_clause;
509 Close block_csr;
510
511 IF batch_sql_stmnt IS NOT NULL THEN
512 IF v_check_level = 'CONTACT' THEN
513 IF g_dashboard_for_contact = 'Y' THEN
514 batch_sql_stmnt := UPPER(batch_sql_stmnt);
515 batch_sql_stmnt := REPLACE(batch_sql_stmnt, v_where_clause_no_rel, v_where_clause_rel);
516 END IF;
517 END IF;
518
519 IF sql_stmt IS NOT NULL Then
520 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
521 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
522 Else
523 v_party_in_sql := 0;
524 v_acct_in_sql := 0;
525 End if;
526
527 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
528 insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || batch_sql_stmnt;
529 EXECUTE IMMEDIATE (insert_stmnt);
530
531 IF v_acct_in_sql <> 0 AND v_check_level = 'PARTY' THEN
532
533 v_select_pos := NULL;
534 v_select_length := NULL;
535 v_from_pos := NULL;
536 v_from_sum := NULL;
537 v_select_sum := 'SELECT hz.party_id, null, ';
538 v_select_clause := NULL;
539 v_group_pos := NULL;
540
541 v_select_clause := rtrim(ltrim(UPPER(select_clause)));
542 v_select_sum := v_select_sum || v_select_clause;
543 v_select_pos := instr(upper(batch_sql_stmnt), v_select_clause);
544 v_select_length := length(v_select_clause);
545 v_from_pos := v_select_pos + v_select_length;
546 v_from_sum := substr(batch_sql_stmnt, v_from_pos);
547 v_group_pos := instr(upper(v_from_sum), 'GROUP BY HZ.PARTY_ID');
548 v_from_sum := substr(v_from_sum, 1, v_group_pos -1);
549 v_from_sum := v_from_sum || v_group;
550 v_select_sum := v_select_sum || ' ' || v_from_sum;
551
552 -- validate the sql statement
553 csc_core_utils_pvt.validate_sql_stmnt( p_sql_stmnt => v_select_sum,
554 x_return_status => return_status);
555
556 IF return_status = 'S' THEN
557 insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || v_select_sum ;
558 EXECUTE IMMEDIATE (insert_stmnt_sum);
559 ELSE
560 RAISE SUMMATION_ERROR;
561 fnd_file.put_line(fnd_file.log, 'Summation SQL failed for check_id' || chk_id);
562 END IF;
563
564 END IF;
565
566 IF v_check_level = 'PARTY' THEN
567 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
568 SELECT party_id, NULL, NULL
569 FROM hz_parties hz
570 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
571 AND hz.status = 'A'
572 AND hz.party_type IN ('PERSON', 'ORGANIZATION');
573 ELSIF v_check_level = 'CONTACT' THEN
574 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
575 SELECT party_id, NULL, NULL
576 FROM hz_parties hz
577 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
578 AND hz.status = 'A'
579 AND hz.party_type = 'PARTY_RELATIONSHIP';
580 ELSIF v_check_level = 'ACCOUNT' THEN
581 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
582 SELECT party_id, cust_account_id, NULL
583 FROM hz_cust_accounts hz
584 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.account_id = hz.cust_account_id)
585 AND hz.status = 'A';
586 ELSIF v_check_level = 'EMPLOYEE' THEN
587 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
588 SELECT person_id, NULL, NULL
589 FROM per_workforce_current_x hz
590 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.person_id) ;
591
592 END IF;
593
594 OPEN val_csr3;
595 FETCH val_csr3 INTO Range_Low_Value, Range_High_Value;
596 IF val_csr3%NOTFOUND THEN
597 Range_Low_Value := NULL;
598 Range_High_Value := NULL;
599 END IF;
600 CLOSE val_csr3;
601
602 SELECT COUNT(*) INTO v_count FROM csc_prof_check_ratings
603 WHERE check_id = chk_id;
604
605 rating_tbl.delete;
606
607 IF v_count > 0 THEN
608 OPEN rating_crs;
609 FOR a in 1..v_count LOOP
610 FETCH rating_crs INTO rating_tbl(a);
611 END LOOP;
612 CLOSE rating_crs;
613 END IF;
614
615 c_fmt_mask := 'CSC_Profile_Engine_PKG.format_mask(' ||
616 '''' || curr_code || '''' || ',' ||
617 '''' || data_type || '''' || ','||
618 'value, '||
619 ''''|| fmt_mask || '''' || ')' ;
620
621 c_grade := 'CSC_Profile_Engine_PKG.rating_color(' ||
622 chk_id || ', ' ||
623 'party_id, account_id, value, ' ||
624 '''' || data_type || '''' || ', ' ||
625 '''' || 'GRADE' || '''' ||', ' ||
626 '''' || v_count || '''' || ')' ;
627
628 c_curr_code := '''' || curr_code || '''';
629
630 c_threshold := 'CSC_Profile_Engine_PKG.calc_threshold(' ||
631 'value, '||
632 '''' || Range_Low_Value || '''' || ', '||
633 '''' || Range_High_Value || '''' || ', '||
634 '''' || data_type || '''' || ', ' ||
635 '''' || chk_u_l_flag || '''' || ')' ;
636
637 c_rating := 'CSC_Profile_Engine_PKG.rating_color(' ||
638 chk_id || ', ' ||
639 'party_id, account_id, value, ' ||
640 '''' || data_type || '''' || ', ' ||
641 '''' || 'RATING' || '''' ||', ' ||
642 '''' || v_count || '''' || ')' ;
643
644 c_color := 'CSC_Profile_Engine_PKG.rating_color(' ||
645 chk_id || ', ' ||
646 'party_id, account_id, value, ' ||
647 '''' || data_type || '''' || ', ' ||
648 '''' || 'COLOR' || '''' ||', ' ||
649 '''' || v_count || '''' || ')' ;
650
651
652 IF v_check_level = 'ACCOUNT' THEN
653 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
654 '(check_results_id, check_id, party_id, cust_account_id, value, currency_code, grade, '||
655 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
656 ' results_threshold_flag, rating_code, color_code)' ||
657 ' SELECT csc_prof_check_results_s.nextval, '
658 || chk_id || ', party_id, account_id, '
659 || c_fmt_mask ||', '
660 || c_curr_code || ', '
661 || c_grade
662 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
663 || c_threshold ||', '
664 || c_rating || ', '
665 || c_color
666 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(account_id, -999999) <> -999999';
667 ELSE
668 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
669 '(check_results_id, check_id, party_id, cust_account_id, value, currency_code, grade, '||
670 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
671 ' results_threshold_flag, rating_code, color_code)' ||
672 ' SELECT csc_prof_check_results_s.nextval, '
673 || chk_id || ', party_id, account_id, '
674 || c_fmt_mask ||', '
675 || c_curr_code || ', '
676 || c_grade
677 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
678 || c_threshold ||', '
679 || c_rating || ', '
680 || c_color
681 ||' FROM CSC_PROF_BATCH_RESULTS1_T where account_id IS NULL';
682 END IF;
683
684 EXECUTE IMMEDIATE (insert_stmnt_final);
685 COMMIT;
686
687 ELSE
688 /* set the global variable to Y to indicate that profile checks without batch sql exist */
689 g_check_no_batch := 'Y';
690 END IF ; /* batch_sql_stmnt IS NOT NULL */
691 END LOOP;
692 CLOSE checks_csr;
693
694 INSERT /*+ PARALLEL (CSC_PROF_BATCH_RESULTS2_T, 12) */
695 INTO CSC_PROF_BATCH_RESULTS2_T
696 (check_results_id, check_id, party_id, cust_account_id,
697 value, currency_code, grade, created_by, creation_date,
698 last_updated_by, last_update_date, last_update_login,
699 results_threshold_flag, rating_code, color_code
700 )
701 SELECT
702 check_results_id, check_id, party_id, cust_account_id,
703 value, currency_code, grade, created_by, creation_date,
704 last_updated_by, last_update_date, last_update_login,
705 results_threshold_flag, rating_code, color_code
706 FROM csc_prof_check_results a
707 WHERE NOT EXISTS (SELECT null FROM csc_prof_checks_b b
708 WHERE a.check_id = b.check_id
709 AND b.select_type = 'B');
710
711 COMMIT;
712
713 EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| v_schema_name ||'.csc_prof_check_results';
714
715
716 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
717 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
718 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
719
720 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
721 INTO csc_prof_check_results
722 (check_results_id, check_id, party_id, cust_account_id,
723 value, currency_code, grade, created_by, creation_date,
724 last_updated_by, last_update_date, last_update_login,
725 results_threshold_flag, rating_code, color_code
726 )
727 SELECT
728 check_results_id, check_id, party_id, cust_account_id,
729 value, currency_code, grade, created_by, creation_date,
730 last_updated_by, last_update_date, last_update_login,
731 results_threshold_flag, rating_code, color_code
732 FROM CSC_PROF_BATCH_RESULTS2_T;
733
734 COMMIT;
735
736
737 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
738 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
739 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
740
741 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
742
743 EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
744 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
745
746 EXCEPTION
747 when Tablesegment_full then
748 CSC_Profile_Engine_PKG.Handle_Exception;
749 g_error := sqlcode || ' ' || sqlerrm;
750 fnd_file.put_line(fnd_file.log , g_error);
751 App_Exception.raise_exception;
752
753 when Indexsegment_full then
754 CSC_Profile_Engine_PKG.Handle_Exception;
755 g_error := sqlcode || ' ' || sqlerrm;
756 fnd_file.put_line(fnd_file.log , g_error);
757 App_Exception.raise_exception;
758
759 when SNAPSHOT_TOO_OLD THEN
760 CSC_Profile_Engine_PKG.Handle_Exception;
761 g_error := sqlcode || ' ' || sqlerrm;
762 fnd_file.put_line(fnd_file.log,g_error);
763 App_Exception.raise_exception;
764
765 WHEN INTERNAL_ERROR THEN
766 CSC_Profile_Engine_PKG.Handle_Exception;
767 g_error := sqlcode || ' ' || sqlerrm;
768 fnd_file.put_line(fnd_file.log,g_error);
769 App_Exception.raise_exception;
770
771 WHEN SUMMATION_ERROR THEN
772 CSC_Profile_Engine_PKG.Handle_Exception;
773 set_context('Evaluate_Checks1_Var',
774 'Summation SQL failed for chk_id => '||to_char(chk_id));
775 RAISE;
776
777 WHEN OTHERS THEN
778 CSC_Profile_Engine_PKG.Handle_Exception;
779 g_error := sqlcode || ' ' || sqlerrm;
780 fnd_file.put_line(fnd_file.log , g_error);
781
782 END Evaluate_Checks1_Var;
783 --
784 -- Evaluate_Checks1_No_Batch
785 -- Loop through all checks and evaluate the results
786 -- for each customer and account for type variable ('B')
787 -- The procedure is called if the Batch_Sql_Stmnt is null (for backward compatibility)
788 -- if check_id is null, party_id is null, account_id is null
789 -- and block_id is null
790 --
791 PROCEDURE Evaluate_Checks1_No_Batch
792 ( errbuf OUT NOCOPY VARCHAR2,
793 retcode OUT NOCOPY NUMBER
794 ) IS
795
796 chk_id Number;
797 chk_name Varchar2(240);
798 cparty_id Number;
799 ccust_acct_id Number;
800 sel_type Varchar2(3);
801 sel_blk_id Number;
802 data_type Varchar2(90);
803 fmt_mask Varchar2(90);
804 rule Varchar2(32767);
805
806 Chk_u_l_flag Varchar2(3);
807 Thd_grade Varchar2(9);
808
809 truncate_flag Varchar2(1) := 'N';
810 acct_flag Varchar2(1);
811
812 blk_id Number := null;
813 blk_name Varchar2(240) := null;
814 sql_stmt Varchar2(2000) := null;
815 curr_code Varchar2(15) := null;
816
817 v_party_in_sql Number := 0;
818 v_acct_in_sql Number := 0;
819 v_check_level Varchar2(10);
820
821 l_for_insert varchar2(1) := 'Y';
822 l_for_party varchar2(1) := 'Y';
823 l_up_total Number := 0;
824 l_ip_total Number := 0;
825 l_ua_total Number := 0;
826 l_ia_total Number := 0;
827
828 v_party_id Number;
829
830 CURSOR checks_csr IS
831 SELECT check_id, select_type, select_block_id,
832 data_type, format_mask,check_upper_lower_flag,
833 threshold_grade, check_level
834 FROM csc_prof_checks_b a
835 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks)
836 AND select_type = 'B'
837 AND check_level IN ('PARTY', 'ACCOUNT')
838 AND EXISTS (SELECT null
839 FROM csc_prof_blocks_b b
840 WHERE a.select_block_id = b.block_id
841 AND b.batch_sql_stmnt IS NULL)
842 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
843 AND Nvl(end_date_active, SYSDATE);
844
845 CURSOR cparty_csr IS
846 SELECT party_id
847 FROM hz_parties
848 WHERE status = 'A'
849 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
850 -- Person, ORG added for 1850508
851
852 CURSOR caccount_csr IS
853 SELECT party_id, cust_account_id
854 FROM hz_cust_accounts
855 WHERE party_id=v_party_id
856 AND status = 'A' ;
857
858 CURSOR block_csr IS
859 SELECT block_id, sql_stmnt, currency_code
860 FROM csc_prof_blocks_b a
861 WHERE a.block_id = sel_blk_id;
862
863 cid number;
864 val VARCHAR2(240) := null;
865
866 BEGIN
867 /* R12 Employee HelpDesk Modifications */
868
869 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
870 IF g_dashboard_for_employee = 'N' THEN
871 l_ip_total := 0;
872 l_up_total := 0;
873 l_ia_total := 0;
874 l_ua_total := 0;
875
876 OPEN checks_csr;
877 LOOP
878 FETCH checks_csr
879 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
880
881 EXIT WHEN checks_csr%notfound;
882
883 Open block_csr;
884 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
885 Close block_csr;
886
887 IF sql_stmt IS NOT NULL Then
888 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
889 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
890 Else
891 v_party_in_sql := 0;
892 v_acct_in_sql := 0;
893 End if;
894
895 Begin
896 cid := dbms_sql.open_cursor;
897 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
898 dbms_sql.define_column(cid,1,val,240);
899
900 OPEN cparty_csr;
901 LOOP
902 FETCH cparty_csr INTO cparty_id;
903 EXIT WHEN cparty_csr%notfound;
904 If v_check_level='PARTY' Then
905 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
906 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
907 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
908 End if;
909
910 /* added this condition for Bug 1937730*/
911 v_party_id:=cparty_id;
912
913 IF v_check_level = 'ACCOUNT' Then
914 If (v_acct_in_sql = 0) Then
915 NULL;
916 Else
917 OPEN caccount_csr;
918 LOOP
919 FETCH caccount_csr
920 INTO cparty_id, ccust_acct_id;
921 EXIT WHEN caccount_csr%notfound;
922
923 Evaluate_One_Check(truncate_flag, chk_id,
924 cparty_id,ccust_acct_id,v_check_level,sel_type, sel_blk_id,
925 data_type, fmt_mask,chk_u_l_flag,Thd_grade,rule, blk_id, sql_stmt,
926 curr_code, l_up_total, l_ip_total, l_ua_total
927 , l_ia_total ,cid);
928 END LOOP;
929 CLOSE caccount_csr;
930 End if; -- Added for 1850508
931 END IF;
932 END LOOP;
933 CLOSE cparty_csr;
934
935 IF (dbms_sql.is_open(cid)) THEN
936 dbms_sql.close_cursor(cid);
937 end if;
938
939 Exception
940 When others then
941 IF (dbms_sql.is_open(cid)) THEN
942 dbms_sql.close_cursor(cid);
943 end if;
944
945 set_context('Evaluate_Checks1_No_Batch',
946 'chk_id=>'||to_char(chk_id),
947 'party_id=>'||to_char(cparty_id),
948 'account_id=>'||to_char(ccust_acct_id));
949 g_error := sqlcode || ' ' || sqlerrm;
950 set_context(NULL, g_error);
951 End;
952
953 END LOOP;
954 CLOSE checks_csr;
955
956 -- check if there are still records to be inserted
957 IF l_ip_total <> 0 THEN
958 l_for_insert := 'Y';
959 l_for_party := 'Y';
960 Insert_Update_Check_Results
961 (l_ip_total, l_for_insert, l_for_party);
962 l_ip_total :=0;
963 END IF;
964 -- check if there are still records to be updated
965 IF l_up_total <> 0 THEN
966 l_for_insert := 'N';
967 l_for_party := 'Y';
968 Insert_Update_Check_Results
969 (l_up_total, l_for_insert, l_for_party);
970 l_up_total :=0;
971 END IF;
972
973 -- check if there are still records to be inserted
974 IF l_ia_total <> 0 THEN
975 l_for_insert := 'Y';
976 l_for_party := 'N';
977 Insert_Update_Check_Results
978 (l_ia_total, l_for_insert, l_for_party);
979 l_ia_total :=0;
980 END IF;
981 -- check if there are still records to be updated
982 IF l_ua_total <> 0 THEN
983 l_for_insert := 'N';
984 l_for_party := 'N';
985 Insert_Update_Check_Results
986 (l_ua_total, l_for_insert, l_for_party);
987 l_ua_total :=0;
988 END IF;
989
990 IF g_dashboard_for_contact IS NULL THEN
991 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
992 END IF;
993
994 IF g_dashboard_for_contact = 'Y' THEN
995 l_ip_total := 0;
996 l_up_total := 0;
997 l_ia_total := 0;
998 l_ua_total := 0;
999
1000 Evaluate_blocks_Rel(p_up_total => l_up_total,
1001 p_ip_total => l_ip_total,
1002 p_ua_total => l_ua_total,
1003 p_ia_total => l_ia_total,
1004 p_no_batch_sql => 'Y' );
1005
1006 Evaluate_checks_Rel(errbuf => errbuf,
1007 retcode => retcode,
1008 p_no_batch_sql => 'Y');
1009 END IF;
1010
1011 COMMIT;
1012
1013 -- Return 0 for successful completion, 1 for warnings, 2 for error
1014 IF (error_flag) THEN
1015 errbuf := Sqlerrm;
1016 retcode := 2;
1017 ELSIF (warning_msg <> '') THEN
1018 errbuf := warning_msg;
1019 retcode := 1;
1020 ELSE
1021 errbuf := '';
1022 retcode := 0;
1023 END IF;
1024
1025 ELSIF g_dashboard_for_employee = 'Y' THEN
1026 l_ip_total := 0;
1027 l_up_total := 0;
1028 l_ia_total := 0;
1029 l_ua_total := 0;
1030
1031 Evaluate_blocks_Emp(p_up_total => l_up_total,
1032 p_ip_total => l_ip_total,
1033 p_ua_total => l_ua_total,
1034 p_ia_total => l_ia_total,
1035 p_no_batch_sql => 'Y' );
1036
1037 Evaluate_checks_Emp(errbuf => errbuf,
1038 retcode => retcode,
1039 p_no_batch_sql => 'Y');
1040 END IF;
1041
1042 COMMIT;
1043
1044 -- Return 0 for successful completion, 1 for warnings, 2 for error
1045 IF (error_flag) THEN
1046 errbuf := Sqlerrm;
1047 retcode := 2;
1048 ELSIF (warning_msg <> '') THEN
1049 errbuf := warning_msg;
1050 retcode := 1;
1051 ELSE
1052 errbuf := '';
1053 retcode := 0;
1054 END IF;
1055
1056 IF (debug) THEN
1057 fnd_file.close;
1058 END IF;
1059
1060 EXCEPTION
1061 WHEN OTHERS THEN
1062 ROLLBACK;
1063 IF (checks_csr%isopen) THEN
1064 CLOSE checks_csr;
1065 END IF;
1066 IF (cparty_csr%isopen) THEN
1067 CLOSE cparty_csr;
1068 END IF;
1069 IF (caccount_csr%isopen) THEN
1070 CLOSE caccount_csr;
1071 END IF;
1072 IF (debug) THEN
1073 fnd_file.close;
1074 END IF;
1075
1076 -- Retrieve error message into errbuf
1077 errbuf := Sqlerrm;
1078
1079 -- Return 2 for error
1080 retcode := 2;
1081
1082 g_error := sqlcode || ' ' || sqlerrm;
1083 fnd_file.put_line(fnd_file.log , g_error);
1084
1085 /* End of R12 Employee HelpDesk Modifications */
1086
1087 END Evaluate_Checks1_No_Batch;
1088
1089 --
1090 -- Evaluate_Checks1_Rule
1091 -- Loop through all checks and evaluate the results
1092 -- for each customer and account for type 'T' (Rules)
1093 -- if check_id is null, party_id is null, account_id is null
1094 -- and block_id is null
1095 --
1096 PROCEDURE Evaluate_Checks1_Rule
1097 ( errbuf OUT NOCOPY VARCHAR2,
1098 retcode OUT NOCOPY NUMBER ) IS
1099
1100 chk_id Number;
1101 chk_name Varchar2(240);
1102 cparty_id Number;
1103 ccust_acct_id Number;
1104 sel_type Varchar2(3);
1105 sel_blk_id Number;
1106 data_type Varchar2(90);
1107 fmt_mask Varchar2(90);
1108 rule Varchar2(32767);
1109
1110 chk_u_l_flag Varchar2(3);
1111 Thd_grade Varchar2(9);
1112
1113 truncate_flag Varchar2(1) := 'N';
1114 acct_flag Varchar2(1);
1115
1116 blk_id Number := null;
1117 blk_name Varchar2(240) := null;
1118 sql_stmt Varchar2(2000) := null;
1119 curr_code Varchar2(15) := null;
1120
1121 v_party_in_sql Number := 0;
1122 v_acct_in_sql Number := 0;
1123
1124 l_for_insert varchar2(1) := 'Y';
1125 l_for_party varchar2(1) := 'Y';
1126 l_up_total Number := 0;
1127 l_ip_total Number := 0;
1128 l_ua_total Number := 0;
1129 l_ia_total Number := 0;
1130
1131 /* added this variable for Bug 1937730*/
1132 v_party_id Number;
1133 v_check_level Varchar2(10);
1134
1135 v_chk_count NUMBER := 0;
1136
1137 CURSOR checks_csr IS
1138 SELECT check_id, select_type, select_block_id,check_level,
1139 data_type, format_mask,check_upper_lower_flag,threshold_grade
1140 FROM csc_prof_checks_b
1141 WHERE Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1142 AND Nvl(end_date_active, Sysdate)
1143 AND check_level IN ('PARTY', 'ACCOUNT')
1144 AND select_type = 'T'
1145 ORDER BY check_id;
1146
1147 CURSOR checks_count IS
1148 SELECT COUNT(*)
1149 FROM csc_prof_checks_b
1150 WHERE Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1151 AND Nvl(end_date_active, Sysdate)
1152 AND select_type = 'T';
1153
1154 CURSOR cparty_csr IS
1155 SELECT party_id
1156 FROM hz_parties
1157 WHERE status = 'A'
1158 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
1159 -- Person, ORG added for 1850508
1160
1161 /* added this condition party_id=v_party_id for Bug 1937730*/
1162 CURSOR caccount_csr IS
1163 SELECT party_id, cust_account_id
1164 FROM hz_cust_accounts
1165 WHERE party_id=v_party_id
1166 AND status = 'A';
1167
1168 CURSOR block_csr IS
1169 SELECT block_id, sql_stmnt, currency_code
1170 FROM csc_prof_blocks_b a
1171 WHERE a.block_id = sel_blk_id;
1172
1173 -- Added for 1850508
1174 cid number;
1175 val VARCHAR2(240) := null;
1176
1177 BEGIN
1178
1179 /* R12 Employee HelpDesk Modifications */
1180
1181 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
1182 IF g_dashboard_for_employee = 'N' THEN
1183
1184 OPEN checks_count;
1185 FETCH checks_count INTO v_chk_count;
1186 CLOSE checks_count;
1187
1188 IF v_chk_count > 0 THEN
1189 /* blocks will be evaluated only if the type is T */
1190 -- Populate the block results table for all parties and accounts
1191 Evaluate_Blocks1(l_up_total, l_ip_total, l_ua_total, l_ia_total);
1192 END IF;
1193
1194 l_ip_total := 0;
1195 l_up_total := 0;
1196 l_ia_total := 0;
1197 l_ua_total := 0;
1198
1199 OPEN checks_csr;
1200 LOOP
1201 FETCH checks_csr
1202 INTO chk_id, sel_type, sel_blk_id,v_check_level, data_type, fmt_mask,chk_u_l_flag,Thd_grade;
1203
1204 EXIT WHEN checks_csr%notfound;
1205
1206 IF (sel_type = 'T') THEN
1207 acct_flag := 'N';
1208 build_rule(acct_flag,chk_id,v_check_level, rule);
1209 ELSIF (sel_type = 'B') THEN
1210 Open block_csr;
1211 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
1212 Close block_csr;
1213
1214 /* Uncommented this condition for Bug 1937730*/
1215 /*****************/
1216 IF sql_stmt IS NOT NULL Then
1217 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
1218 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
1219 Else
1220 v_party_in_sql := 0;
1221 v_acct_in_sql := 0;
1222 End if;
1223 /***************/
1224
1225 END IF;
1226
1227 /* This begin, end exception is added mainly for exception handing for Bug 1980004*/
1228 Begin
1229
1230 IF ((sel_type='B' ) OR (sel_type='T') ) Then -- Only valid types
1231 cid := dbms_sql.open_cursor;
1232 if (sel_type = 'B') then
1233 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
1234 elsif (sel_type = 'T') then
1235 dbms_sql.parse(cid, rule, dbms_sql.native);
1236 end if;
1237 dbms_sql.define_column(cid,1,val,240);
1238
1239 -- pass the cid
1240 OPEN cparty_csr;
1241 LOOP
1242 FETCH cparty_csr INTO cparty_id;
1243 EXIT WHEN cparty_csr%notfound;
1244 If v_check_level='PARTY' Then
1245 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
1246 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
1247 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
1248 End if;
1249
1250 /* added this condition for Bug 1937730*/
1251 v_party_id:=cparty_id;
1252
1253 IF (sel_type = 'T') THEN
1254 acct_flag := 'Y';
1255 build_rule(acct_flag,chk_id,v_check_level, rule);
1256 END IF;
1257 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
1258 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- Added for 1850508
1259 -- Check can be made only for 'B' types,
1260 -- If acct is not present as bind variable, the sql might return wrong
1261 -- rows (party level counts) at account leve.
1262
1263 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
1264 --(sel_type='T') ) Then
1265
1266 NULL;
1267 Else
1268 -- Loop through all parties with accounts
1269 -- Added for 1850508
1270 --Open Cursor
1271 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
1272
1273
1274 OPEN caccount_csr;
1275 LOOP
1276 FETCH caccount_csr
1277 INTO cparty_id, ccust_acct_id;
1278 EXIT WHEN caccount_csr%notfound;
1279 Evaluate_One_Check(truncate_flag, chk_id,
1280 cparty_id,ccust_acct_id,v_check_level,sel_type, sel_blk_id,
1281 data_type, fmt_mask,chk_u_l_flag,Thd_grade,rule, blk_id, sql_stmt,
1282 curr_code, l_up_total, l_ip_total, l_ua_total
1283 , l_ia_total ,cid);
1284 END LOOP;
1285 CLOSE caccount_csr;
1286 End if; -- Added for 1850508
1287 END IF;
1288
1289
1290 END LOOP;
1291 CLOSE cparty_csr;
1292 IF (dbms_sql.is_open(cid)) THEN
1293 dbms_sql.close_cursor(cid);
1294 end if;
1295 END IF;
1296 Exception
1297 When others then
1298
1299 IF (dbms_sql.is_open(cid)) THEN
1300 dbms_sql.close_cursor(cid);
1301 end if;
1302
1303 set_context('Evaluate_Checks1_Rule',
1304 'chk_id=>'||to_char(chk_id),
1305 'party_id=>'||to_char(cparty_id),
1306 'account_id=>'||to_char(ccust_acct_id));
1307 g_error := sqlcode || ' ' || sqlerrm;
1308 set_context(NULL, g_error);
1309 End;
1310
1311
1312 END LOOP;
1313 CLOSE checks_csr;
1314
1315 -- check if there are still records to be inserted
1316 IF l_ip_total <> 0 THEN
1317 l_for_insert := 'Y';
1318 l_for_party := 'Y';
1319 Insert_Update_Check_Results
1320 (l_ip_total, l_for_insert, l_for_party);
1321 l_ip_total :=0;
1322 END IF;
1323 -- check if there are still records to be updated
1324 IF l_up_total <> 0 THEN
1325 l_for_insert := 'N';
1326 l_for_party := 'Y';
1327 Insert_Update_Check_Results
1328 (l_up_total, l_for_insert, l_for_party);
1329 l_up_total :=0;
1330 END IF;
1331
1332
1333 -- check if there are still records to be inserted
1334 IF l_ia_total <> 0 THEN
1335 l_for_insert := 'Y';
1336 l_for_party := 'N';
1337 Insert_Update_Check_Results
1338 (l_ia_total, l_for_insert, l_for_party);
1339 l_ia_total :=0;
1340 END IF;
1341 -- check if there are still records to be updated
1342 IF l_ua_total <> 0 THEN
1343 l_for_insert := 'N';
1344 l_for_party := 'N';
1345 Insert_Update_Check_Results
1346 (l_ua_total, l_for_insert, l_for_party);
1347 l_ua_total :=0;
1348 END IF;
1349 /* End of R12 Employee HelpDesk Modifications */
1350 IF g_dashboard_for_contact = 'Y' THEN
1351 l_ip_total := 0;
1352 l_up_total := 0;
1353 l_ia_total := 0;
1354 l_ua_total := 0;
1355
1356 Evaluate_blocks_Rel(p_up_total => l_up_total,
1357 p_ip_total => l_ip_total,
1358 p_ua_total => l_ua_total,
1359 p_ia_total => l_ia_total,
1360 p_rule_only => 'Y' );
1361
1362 Evaluate_checks_Rel(errbuf => errbuf,
1363 retcode => retcode,
1364 p_rule_only => 'Y');
1365 END IF;
1366
1367 COMMIT;
1368
1369 -- Return 0 for successful completion, 1 for warnings, 2 for error
1370 IF (error_flag) THEN
1371 errbuf := Sqlerrm;
1372 retcode := 2;
1373 ELSIF (warning_msg <> '') THEN
1374 errbuf := warning_msg;
1375 retcode := 1;
1376 ELSE
1377 errbuf := '';
1378 retcode := 0;
1379 END IF;
1380
1381 ELSIF g_dashboard_for_employee = 'Y' THEN
1382 l_ip_total := 0;
1383 l_up_total := 0;
1384 l_ia_total := 0;
1385 l_ua_total := 0;
1386
1387 Evaluate_blocks_Emp(p_up_total => l_up_total,
1388 p_ip_total => l_ip_total,
1389 p_ua_total => l_ua_total,
1390 p_ia_total => l_ia_total,
1391 p_rule_only => 'Y' );
1392
1393 Evaluate_checks_Emp(errbuf => errbuf,
1394 retcode => retcode,
1395 p_rule_only => 'Y');
1396 END IF;
1397
1398 COMMIT;
1399
1400 -- Return 0 for successful completion, 1 for warnings, 2 for error
1401 IF (error_flag) THEN
1402 errbuf := Sqlerrm;
1403 retcode := 2;
1404 ELSIF (warning_msg <> '') THEN
1405 errbuf := warning_msg;
1406 retcode := 1;
1407 ELSE
1408 errbuf := '';
1409 retcode := 0;
1410 END IF;
1411
1412 IF (debug) THEN
1413 fnd_file.close;
1414 END IF;
1415
1416 EXCEPTION
1417 WHEN OTHERS THEN
1418 ROLLBACK;
1419 IF (checks_csr%isopen) THEN
1420 CLOSE checks_csr;
1421 END IF;
1422 IF (cparty_csr%isopen) THEN
1423 CLOSE cparty_csr;
1424 END IF;
1425 IF (caccount_csr%isopen) THEN
1426 CLOSE caccount_csr;
1427 END IF;
1428 IF (debug) THEN
1429 fnd_file.close;
1430 END IF;
1431
1432 -- Retrieve error message into errbuf
1433 errbuf := Sqlerrm;
1434
1435 -- Return 2 for error
1436 retcode := 2;
1437
1438 g_error := sqlcode || ' ' || sqlerrm;
1439 fnd_file.put_line(fnd_file.log , g_error);
1440
1441 END Evaluate_Checks1_Rule;
1442
1443 /******************************************
1444 EVALUATE_CHECKS2_JIT
1445 Added this procedure for JIT enhancement -- Bug 4535407
1446 Evaluate_Checks2_JIT is called by Evaluate_Checks2.
1447 Evaluate_Checks2 will open different cursors for JIT and non-JIT flows
1448 and calls this procedure for every record
1449 ******************************************/
1450
1451 PROCEDURE Evaluate_Checks2_JIT
1452 ( p_party_id IN NUMBER,
1453 p_acct_id IN NUMBER,
1454 p_check_id IN NUMBER,
1455 p_select_type IN VARCHAR2,
1456 p_select_block_id IN NUMBER,
1457 p_data_type IN VARCHAR2,
1458 p_format_mask IN VARCHAR2,
1459 p_chk_upp_low_flag IN VARCHAR2,
1460 p_threshold_grade IN VARCHAR2,
1461 p_check_level IN VARCHAR2,
1462 p_group_id IN NUMBER
1463 )
1464 IS
1465
1466 chk_id Number;
1467 chk_name Varchar2(240);
1468 sel_type Varchar2(3);
1469 sel_blk_id Number;
1470 data_type Varchar2(90);
1471 fmt_mask Varchar2(90);
1472 rule Varchar2(32767);
1473
1474 Chk_u_l_flag Varchar2(3);
1475 Thd_grade Varchar2(9);
1476
1477 v_block_id Number;
1478 truncate_flag Varchar2(1):= 'N';
1479 acct_flag Varchar2(1);
1480
1481 blk_id Number := null;
1482 blk_name Varchar2(240) := null;
1483 sql_stmt Varchar2(2000) := null;
1484 curr_code Varchar2(15) := null;
1485
1486 l_for_insert varchar2(1) := 'Y';
1487 l_for_party varchar2(1) := 'Y';
1488 l_up_total Number := 0;
1489 l_ip_total Number := 0;
1490 l_ua_total Number := 0;
1491 l_ia_total Number := 0;
1492
1493 v_party_in_sql Number := 0;
1494 v_acct_in_sql Number := 0;
1495 v_check_level Varchar2(10);
1496
1497 v_rel_party NUMBER ;
1498
1499
1500 /* added these variable for Bug 1937730*/
1501 v_party_id Number;
1502 cparty_id Number;
1503 ccust_acct_id Number;
1504 cid Number;
1505 val Varchar2(240) := null;
1506
1507
1508 -- cursor to get the blocks related to the check
1509 CURSOR cblocks_csr IS
1510 SELECT distinct block_id
1511 FROM csc_prof_check_rules_b
1512 WHERE check_id = chk_id
1513 UNION
1514 (SELECT distinct expr_to_block_id
1515 FROM csc_prof_check_rules_b
1516 WHERE check_id = chk_id);
1517
1518 CURSOR block_csr IS
1519 SELECT block_id, sql_stmnt, currency_code
1520 FROM csc_prof_blocks_b a
1521 WHERE a.block_id = p_select_block_id;
1522
1523 /* added this condition party_id=v_party_id for Bug 1937730*/
1524 CURSOR caccount_csr IS
1525 SELECT party_id, cust_account_id
1526 FROM hz_cust_accounts
1527 WHERE party_id=v_party_id
1528 AND status = 'A' ;
1529
1530 BEGIN
1531 l_ip_total :=0;
1532 l_up_total :=0;
1533 l_ia_total :=0;
1534 l_ua_total :=0;
1535
1536 chk_id := p_check_id;
1537 sel_type := p_select_type;
1538 sel_blk_id := p_select_block_id;
1539 data_type := p_data_type;
1540 fmt_mask := p_format_mask;
1541 chk_u_l_flag := p_chk_upp_low_flag;
1542 thd_grade := p_threshold_grade;
1543 v_check_level := p_check_level;
1544
1545 IF sel_type = 'T' then
1546 OPEN cblocks_csr;
1547 LOOP
1548 FETCH cblocks_csr into v_block_id;
1549 EXIT when cblocks_csr%notfound;
1550
1551 Evaluate_Blocks2(v_block_id,p_party_id,p_acct_id,
1552 l_up_total, l_ip_total, l_ua_total, l_ia_total);
1553
1554 END LOOP;
1555 CLOSE cblocks_csr;
1556 END IF;
1557
1558 l_ip_total :=0;
1559 l_up_total :=0;
1560 l_ia_total :=0;
1561 l_ua_total :=0;
1562
1563 IF (sel_type = 'T') THEN
1564 IF p_acct_id IS NULL THEN
1565 acct_flag := 'N';
1566 build_rule(acct_flag,chk_id,v_check_level, rule);
1567 ELSE
1568 acct_flag := 'Y';
1569 build_rule(acct_flag,chk_id,v_check_level, rule);
1570 END IF;
1571
1572 ELSIF (sel_type = 'B') THEN
1573 OPEN block_csr;
1574 FETCH block_csr INTO blk_id, sql_stmt, curr_code;
1575 CLOSE block_csr;
1576
1577 IF sql_stmt IS NOT NULL THEN
1578 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
1579 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
1580 ELSE
1581 v_party_in_sql := 0;
1582 v_acct_in_sql := 0;
1583 END IF;
1584 END IF;
1585 /* R12 Employee HelpDesk Modifications */
1586 IF v_check_level in('PARTY','CONTACT','EMPLOYEE') THEN
1587 -- p_cid is passed as null as Cursor has to be parsed always
1588 Evaluate_One_Check(truncate_flag, chk_id, p_party_id, Null,v_check_level,
1589 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
1590 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,NULL);
1591 END IF;
1592 /* End of R12 Employee HelpDesk Modifications */
1593 /* This begin, end exception is added mainly for exception handing for Bug 1980004*/
1594 /* added this condition for Bug 1937730*/
1595 BEGIN
1596 v_party_id := p_party_id;
1597 IF ((sel_type = 'B' ) OR (sel_type = 'T') ) and v_check_level = 'ACCOUNT' THEN -- Only valid Types now
1598 IF ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level = 'ACCOUNT' THEN -- Added for 1850508
1599 -- Check can be made only for 'B' types,
1600 -- If acct is not present as bind variable, the sql might returnwrong
1601 -- rows (party level counts) at account leve.
1602 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
1603 --(sel_type='T') ) Then
1604 NULL;
1605 ELSE
1606 -- Loop through all parties with accounts
1607 -- Added for 1850508
1608 --Open Cursor
1609 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
1610 cid := dbms_sql.open_cursor;
1611 IF (sel_type = 'B') THEN
1612 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
1613 ELSIF (sel_type = 'T') THEN
1614 dbms_sql.parse(cid, rule, dbms_sql.native);
1615 END IF;
1616 dbms_sql.define_column(cid,1,val,240);
1617
1618 OPEN caccount_csr;
1619 LOOP
1620 FETCH caccount_csr INTO cparty_id, ccust_acct_id;
1621 EXIT WHEN caccount_csr%notfound;
1622
1623 Evaluate_One_Check(truncate_flag, chk_id,
1624 cparty_id,ccust_acct_id,v_check_level, sel_type, sel_blk_id,
1625 data_type, fmt_mask,chk_u_l_flag,
1626 Thd_grade, rule, blk_id, sql_stmt,curr_code,
1627 l_up_total, l_ip_total, l_ua_total, l_ia_total
1628 ,cid);
1629 END LOOP;
1630 CLOSE caccount_csr;
1631
1632 IF (dbms_sql.is_open(cid)) THEN
1633 dbms_sql.close_cursor(cid);
1634 END IF;
1635
1636 END IF; -- Added for 1850508
1637 END IF;
1638 EXCEPTION
1639 WHEN OTHERS THEN
1640 IF (dbms_sql.is_open(cid)) THEN
1641 dbms_sql.close_cursor(cid);
1642 END IF;
1643
1644 set_context('Evaluate_Checks2_JIT',
1645 'chk_id=>'||to_char(chk_id),
1646 'party_id=>'||to_char(cparty_id),
1647 'account_id=>'||to_char(ccust_acct_id));
1648 g_error := sqlcode || ' ' || sqlerrm;
1649 set_context(NULL, g_error);
1650 END;
1651
1652 IF l_ip_total <> 0 THEN
1653 l_for_insert := 'Y';
1654 l_for_party := 'Y';
1655 Insert_Update_Check_Results(l_ip_total, l_for_insert, l_for_party);
1656 l_ip_total :=0;
1657 END IF;
1658 -- check if there are still records to be updated
1659 IF l_up_total <> 0 THEN
1660 l_for_insert := 'N';
1661 l_for_party := 'Y';
1662 Insert_Update_Check_Results(l_up_total, l_for_insert, l_for_party);
1663 l_up_total :=0;
1664 END IF;
1665
1666 -- check if there are still records to be inserted
1667 IF l_ia_total <> 0 THEN
1668 l_for_insert := 'Y';
1669 l_for_party := 'N';
1670 Insert_Update_Check_Results(l_ia_total, l_for_insert, l_for_party);
1671 l_ia_total :=0;
1672 END IF;
1673 -- check if there are still records to be updated
1674 IF l_ua_total <> 0 THEN
1675 l_for_insert := 'N';
1676 l_for_party := 'N';
1677 Insert_Update_Check_Results(l_ua_total, l_for_insert, l_for_party);
1678 l_ua_total :=0;
1679 END IF;
1680
1681 COMMIT;
1682 END Evaluate_Checks2_JIT;
1683
1684 --
1685 -- Evaluate_Checks2
1686 -- Loop through all checks and evaluate the results
1687 -- for the Given Party
1688 -- if Party and Group are Provided
1689 -- Only the checks and blocks for a given group_id
1690 -- This is used when the refresh button is pressed or from JIT process
1691 --
1692
1693 PROCEDURE Evaluate_Checks2
1694 ( p_party_id IN NUMBER,
1695 p_acct_id IN NUMBER,
1696 p_group_id IN NUMBER,
1697 p_critical_flag IN VARCHAR2 DEFAULT 'N', /* added for JIT enhancement */
1698 errbuf OUT NOCOPY VARCHAR2,
1699 retcode OUT NOCOPY NUMBER ) IS
1700
1701 CURSOR checks_csr IS
1702 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1703 check_upper_lower_flag, threshold_grade, check_level
1704 FROM csc_prof_checks_b chk
1705 WHERE check_level IN ('PARTY','ACCOUNT')
1706 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1707 AND nvl(end_date_active, Sysdate))
1708 AND EXISTS ( SELECT a.check_id
1709 FROM csc_prof_group_checks a
1710 WHERE a.group_id = p_group_id
1711 AND chk.check_id = a.check_id);
1712
1713 /* added cursor checks_crit_csr for JIT enhancement -- Bug 4535407 */
1714 CURSOR checks_crit_csr IS
1715 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1716 check_upper_lower_flag, threshold_grade, check_level
1717 FROM csc_prof_checks_b chk
1718 WHERE check_level IN ('PARTY','ACCOUNT')
1719 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1720 AND nvl(end_date_active, Sysdate))
1721 AND EXISTS ( SELECT a.check_id
1722 FROM csc_prof_group_checks a
1723 WHERE a.group_id = p_group_id
1724 AND chk.check_id = a.check_id
1725 AND a.critical_flag = 'Y');
1726
1727 CURSOR rel_party_csr(c_party_id IN NUMBER) IS
1728 SELECT 1
1729 FROM hz_parties
1730 WHERE party_id = c_party_id
1731 AND party_type = 'PARTY_RELATIONSHIP'
1732 AND status = 'A';
1733
1734 CURSOR employee_csr(c_party_id IN NUMBER) IS
1735 SELECT 1
1736 FROM per_workforce_current_x
1737 WHERE person_id = c_party_id;
1738
1739
1740 CURSOR rel_checks_csr IS
1741 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1742 check_upper_lower_flag, threshold_grade, check_level
1743 FROM csc_prof_checks_b chk
1744 WHERE check_level = 'CONTACT'
1745 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1746 AND nvl(end_date_active, Sysdate))
1747 AND EXISTS ( SELECT a.check_id
1748 FROM csc_prof_group_checks a
1749 WHERE a.group_id = p_group_id
1750 AND chk.check_id = a.check_id);
1751
1752 /* added cursor checks_csr_jit for JIT enhancement -- Bug 4535407 */
1753 CURSOR rel_checks_crit_csr IS
1754 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1755 check_upper_lower_flag, threshold_grade, check_level
1756 FROM csc_prof_checks_b chk
1757 WHERE check_level = 'CONTACT'
1758 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1759 AND nvl(end_date_active, Sysdate))
1760 AND EXISTS ( SELECT a.check_id
1761 FROM csc_prof_group_checks a
1762 WHERE a.group_id = p_group_id
1763 AND chk.check_id = a.check_id
1764 AND a.critical_flag = 'Y');
1765
1766 /* R12 Employee HelpDesk Modifications */
1767 CURSOR emp_checks_csr IS
1768 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1769 check_upper_lower_flag, threshold_grade, check_level
1770 FROM csc_prof_checks_b chk
1771 WHERE check_level = 'EMPLOYEE'
1772 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1773 AND nvl(end_date_active, Sysdate))
1774 AND EXISTS ( SELECT a.check_id
1775 FROM csc_prof_group_checks a
1776 WHERE a.group_id = p_group_id
1777 AND chk.check_id = a.check_id);
1778
1779 CURSOR emp_checks_crit_csr IS
1780 SELECT check_id, select_type, select_block_id, data_type, format_mask,
1781 check_upper_lower_flag, threshold_grade, check_level
1782 FROM csc_prof_checks_b chk
1783 WHERE check_level = 'EMPLOYEE'
1784 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1785 AND nvl(end_date_active, Sysdate))
1786 AND EXISTS ( SELECT a.check_id
1787 FROM csc_prof_group_checks a
1788 WHERE a.group_id = p_group_id
1789 AND chk.check_id = a.check_id
1790 AND a.critical_flag = 'Y');
1791
1792 /* End of R12 Employee HelpDesk Modifications */
1793
1794 l_rel_refresh VARCHAR2(1) := 'N';
1795 v_rel_party NUMBER;
1796
1797 l_emp_refresh VARCHAR2(1) := 'N';
1798 v_emp_party NUMBER;
1799
1800
1801
1802 BEGIN
1803 /* Moved the code to Evaluate_Checks2_JIT for JIT enhancement. -- Bug 4535407
1804
1805 Logic
1806 -----
1807 IF jit_flag = 'Y' THEN
1808 OPEN checks_crit_csr;
1809 CALL Evaluate_Checks2_JIT;
1810 ELSE
1811 OPEN checks_csr;
1812 CALL Evaluate_Checks2_JIT;
1813 END IF;
1814
1815 */
1816
1817 /* Bug 5168090 Fix - scenario where employee_id and party_id from hz_parties have the same value */
1818 IF g_dashboard_for_employee = 'Y' THEN
1819 l_emp_refresh := 'Y';
1820 ELSE
1821 OPEN rel_party_csr(p_party_id);
1822 FETCH rel_party_csr INTO v_rel_party;
1823 IF rel_party_csr%FOUND THEN
1824 l_rel_refresh := 'Y';
1825 END IF;
1826 CLOSE rel_party_csr;
1827 END IF;
1828
1829 /* Bug 5168090 Fix */
1830
1831 IF l_rel_refresh = 'Y' THEN
1832 IF p_critical_flag = 'Y' THEN
1833 FOR i IN rel_checks_crit_csr
1834 LOOP
1835 Evaluate_Checks2_JIT
1836 ( p_party_id => p_party_id,
1837 p_acct_id => p_acct_id,
1838 p_check_id => i.check_id,
1839 p_select_type => i.select_type,
1840 p_select_block_id => i.select_block_id,
1841 p_data_type => i.data_type,
1842 p_format_mask => i.format_mask,
1843 p_chk_upp_low_flag => i.check_upper_lower_flag,
1844 p_threshold_grade => i.threshold_grade,
1845 p_check_level => i.check_level,
1846 p_group_id => p_group_id
1847 );
1848 END LOOP;
1849 ELSE
1850 FOR i IN rel_checks_csr
1851 LOOP
1852 Evaluate_Checks2_JIT
1853 ( p_party_id => p_party_id,
1854 p_acct_id => p_acct_id,
1855 p_check_id => i.check_id,
1856 p_select_type => i.select_type,
1857 p_select_block_id => i.select_block_id,
1858 p_data_type => i.data_type,
1859 p_format_mask => i.format_mask,
1860 p_chk_upp_low_flag => i.check_upper_lower_flag,
1861 p_threshold_grade => i.threshold_grade,
1862 p_check_level => i.check_level,
1863 p_group_id => p_group_id
1864 );
1865 END LOOP;
1866 END IF;
1867 ELSIF l_emp_refresh = 'Y' THEN
1868 /* R12 Employee HelpDesk Modifications */
1869 IF p_critical_flag = 'Y' THEN
1870 FOR i IN emp_checks_crit_csr
1871 LOOP
1872 Evaluate_Checks2_JIT
1873 ( p_party_id => p_party_id,
1874 p_acct_id => p_acct_id,
1875 p_check_id => i.check_id,
1876 p_select_type => i.select_type,
1877 p_select_block_id => i.select_block_id,
1878 p_data_type => i.data_type,
1879 p_format_mask => i.format_mask,
1880 p_chk_upp_low_flag => i.check_upper_lower_flag,
1881 p_threshold_grade => i.threshold_grade,
1882 p_check_level => i.check_level,
1883 p_group_id => p_group_id
1884 );
1885 END LOOP;
1886 ELSE
1887 FOR i IN emp_checks_csr
1888 LOOP
1889 Evaluate_Checks2_JIT
1890 ( p_party_id => p_party_id,
1891 p_acct_id => p_acct_id,
1892 p_check_id => i.check_id,
1893 p_select_type => i.select_type,
1894 p_select_block_id => i.select_block_id,
1895 p_data_type => i.data_type,
1896 p_format_mask => i.format_mask,
1897 p_chk_upp_low_flag => i.check_upper_lower_flag,
1898 p_threshold_grade => i.threshold_grade,
1899 p_check_level => i.check_level,
1900 p_group_id => p_group_id
1901 );
1902 END LOOP;
1903 END IF;
1904 /* End of R12 Employee HelpDesk Modifications */
1905 ELSE
1906 IF p_critical_flag = 'Y' THEN
1907 FOR i IN checks_crit_csr
1908 LOOP
1909 Evaluate_Checks2_JIT
1910 ( p_party_id => p_party_id,
1911 p_acct_id => p_acct_id,
1912 p_check_id => i.check_id,
1913 p_select_type => i.select_type,
1914 p_select_block_id => i.select_block_id,
1915 p_data_type => i.data_type,
1916 p_format_mask => i.format_mask,
1917 p_chk_upp_low_flag => i.check_upper_lower_flag,
1918 p_threshold_grade => i.threshold_grade,
1919 p_check_level => i.check_level,
1920 p_group_id => p_group_id
1921 );
1922 END LOOP;
1923 ELSE
1924 FOR i IN checks_csr
1925 LOOP
1926 Evaluate_Checks2_JIT
1927 ( p_party_id => p_party_id,
1928 p_acct_id => p_acct_id,
1929 p_check_id => i.check_id,
1930 p_select_type => i.select_type,
1931 p_select_block_id => i.select_block_id,
1932 p_data_type => i.data_type,
1933 p_format_mask => i.format_mask,
1934 p_chk_upp_low_flag => i.check_upper_lower_flag,
1935 p_threshold_grade => i.threshold_grade,
1936 p_check_level => i.check_level,
1937 p_group_id => p_group_id
1938 );
1939 END LOOP;
1940 END IF;
1941 END IF;
1942
1943 -- Return 0 for successful completion, 1 for warnings, 2 for error
1944 IF (error_flag) THEN
1945 errbuf := Sqlerrm;
1946 retcode := 2;
1947 ELSIF (warning_msg <> '') THEN
1948 errbuf := warning_msg;
1949 retcode := 1;
1950 ELSE
1951 errbuf := '';
1952 retcode := 0;
1953 END IF;
1954
1955 IF (debug) THEN
1956 fnd_file.close;
1957 END IF;
1958
1959 EXCEPTION
1960 WHEN OTHERS THEN
1961 ROLLBACK;
1962 IF (checks_csr%isopen) THEN
1963 CLOSE checks_csr;
1964 END IF;
1965
1966 IF (debug) THEN
1967 fnd_file.close;
1968 END IF;
1969
1970 -- Retrieve error message into errbuf
1971 errbuf := Sqlerrm;
1972
1973 -- Return 2 for error
1974 retcode := 2;
1975
1976 g_error := sqlcode || ' ' || sqlerrm;
1977 fnd_file.put_line(fnd_file.log , g_error);
1978
1979 END Evaluate_Checks2;
1980
1981
1982 --
1983 -- Evaluate_Checks3
1984 -- Loop through all checks and evaluate the results
1985 -- for each customer and account.
1986 -- if check_id is null, party_id is not null or account_id is not null
1987 -- and block_id is null
1988 -- get only the checks and blocks for a given group_id
1989 -- This is used when the refresh button is pressed
1990 --
1991 PROCEDURE Evaluate_Checks3
1992 ( p_party_id IN NUMBER,
1993 p_acct_id IN NUMBER,
1994 p_group_id IN NUMBER,
1995 errbuf OUT NOCOPY VARCHAR2,
1996 retcode OUT NOCOPY NUMBER ) IS
1997
1998 chk_id Number;
1999 chk_name Varchar2(240);
2000 sel_type Varchar2(3);
2001 sel_blk_id Number;
2002 data_type Varchar2(90);
2003 fmt_mask Varchar2(90);
2004 rule Varchar2(32767);
2005
2006 Chk_u_l_flag Varchar2(3);
2007 Thd_grade Varchar2(9);
2008
2009 v_block_id Number;
2010 truncate_flag Varchar2(1):= 'N';
2011 acct_flag Varchar2(1);
2012
2013 blk_id Number := null;
2014 blk_name Varchar2(240) := null;
2015 sql_stmt Varchar2(2000) := null;
2016 curr_code Varchar2(15) := null;
2017
2018 l_for_insert varchar2(1) := 'Y';
2019 l_for_party varchar2(1) := 'Y';
2020 l_up_total Number := 0;
2021 l_ip_total Number := 0;
2022 l_ua_total NUmber := 0;
2023 l_ia_total Number := 0;
2024
2025 v_party_in_sql Number := 0;
2026 v_acct_in_sql Number := 0;
2027 v_check_level Varchar2(10);
2028 v_rel_refresh Varchar2(1) := 'N';
2029
2030 /* added these variable for Bug 1937730*/
2031 v_party_id Number;
2032 cparty_id Number;
2033 ccust_acct_id Number;
2034 cid Number;
2035 val Varchar2(240) := null;
2036
2037 -- cursor to retrieve all checks that belong to that group
2038 CURSOR checks_csr IS
2039 SELECT check_id, select_type, select_block_id, data_type,
2040 format_mask,check_upper_lower_flag,threshold_grade,
2041 check_level
2042 FROM csc_prof_checks_b chk
2043 WHERE check_level IN ('PARTY','ACCOUNT')
2044 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2045 AND nvl(end_date_active, Sysdate))
2046 AND Exists ( SELECT a.check_id
2047 FROM csc_prof_group_checks a
2048 WHERE chk.check_id = a.check_id
2049 AND sysdate between
2050 nvl(a.start_date_active,sysdate)
2051 AND nvl(a.end_date_active,sysdate));
2052
2053 /* R12 Employee HelpDesk Modifications */
2054 CURSOR checks_emp_csr IS
2055 SELECT check_id, select_type, select_block_id, data_type,
2056 format_mask,check_upper_lower_flag,threshold_grade,
2057 check_level
2058 FROM csc_prof_checks_b chk
2059 WHERE check_level IN ('EMPLOYEE')
2060 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2061 AND nvl(end_date_active, Sysdate))
2062 AND Exists ( SELECT a.check_id
2063 FROM csc_prof_group_checks a
2064 WHERE chk.check_id = a.check_id
2065 AND sysdate between
2066 nvl(a.start_date_active,sysdate)
2067 AND nvl(a.end_date_active,sysdate));
2068 /* End of R12 Employee HelpDesk Modifications */
2069
2070 -- cursor to get the blocks related to the check
2071 CURSOR cblocks_csr IS
2072 Select distinct block_id
2073 From csc_prof_check_rules_b
2074 Where check_id = chk_id
2075 UNION
2076 (Select distinct expr_to_block_id
2077 From csc_prof_check_rules_b
2078 Where check_id = chk_id);
2079
2080 CURSOR block_csr IS
2081 SELECT block_id, sql_stmnt, currency_code
2082 FROM csc_prof_blocks_b a
2083 WHERE a.block_id = sel_blk_id;
2084
2085 /* added this condition party_id=v_party_id for Bug 1937730*/
2086 CURSOR caccount_csr IS
2087 SELECT party_id, cust_account_id
2088 FROM hz_cust_accounts
2089 WHERE party_id=v_party_id
2090 AND status = 'A' ;
2091
2092 CURSOR checks_relparty_csr IS
2093 SELECT check_id, select_type, select_block_id, data_type, format_mask,
2094 check_upper_lower_flag,threshold_grade,check_level
2095 FROM csc_prof_checks_b chk
2096 WHERE check_level = 'CONTACT'
2097 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2098 AND nvl(end_date_active, Sysdate))
2099 AND Exists ( SELECT a.check_id
2100 FROM csc_prof_group_checks a
2101 WHERE chk.check_id = a.check_id
2102 AND sysdate between nvl(a.start_date_active,sysdate)
2103 AND nvl(a.end_date_active,sysdate));
2104
2105 CURSOR crelparty_csr(c_party_id IN NUMBER) IS
2106 SELECT party_id FROM hz_parties
2107 WHERE party_id = c_party_id
2108 AND party_type = 'PARTY_RELATIONSHIP'
2109 AND status = 'A';
2110
2111 BEGIN
2112
2113
2114 l_ip_total :=0;
2115 l_up_total :=0;
2116 l_ia_total :=0;
2117 l_ua_total :=0;
2118 -- Loop through check_id and update block results for a party or account
2119 OPEN checks_csr;
2120 LOOP
2121 FETCH checks_csr
2122 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2123
2124 EXIT WHEN checks_csr%notfound;
2125
2126 IF sel_type = 'T' then
2127 OPEN cblocks_csr;
2128 LOOP
2129 FETCH cblocks_csr into v_block_id;
2130 Exit when cblocks_csr%notfound;
2131
2132 Evaluate_Blocks2(v_block_id,p_party_id,p_acct_id,
2133 l_up_total, l_ip_total, l_ua_total, l_ia_total);
2134
2135 END LOOP;
2136 CLOSE cblocks_csr;
2137 END IF;
2138 END LOOP;
2139 CLOSE checks_csr;
2140
2141 l_ip_total :=0;
2142 l_up_total :=0;
2143 l_ia_total :=0;
2144 l_ua_total :=0;
2145
2146 -- Loop through check_id and update check results for a party or account
2147 OPEN checks_csr;
2148 LOOP
2149 FETCH checks_csr
2150 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2151 EXIT WHEN checks_csr%notfound;
2152
2153 -- IF (chk_id NOT BETWEEN 21 AND 24) THEN
2154 IF (sel_type = 'T') THEN
2155 IF p_acct_id IS NULL THEN
2156 acct_flag := 'N';
2157 build_rule(acct_flag,chk_id,v_check_level, rule);
2158 ELSE
2159 acct_flag := 'Y';
2160 build_rule(acct_flag,chk_id,v_check_level, rule);
2161 END IF;
2162
2163 ELSIF (sel_type = 'B') THEN
2164
2165 Open block_csr;
2166 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
2167 Close block_csr;
2168
2169 /* Uncommented this condition for Bug 1937730*/
2170 /******************/
2171 IF sql_stmt IS NOT NULL Then
2172 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2173 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
2174 Else
2175 v_party_in_sql := 0;
2176 v_acct_in_sql := 0;
2177 End if;
2178 /******************/
2179
2180 END IF;
2181
2182 If v_check_level='PARTY' then
2183 -- p_cid is passed as null as Cursor has to be parsed always
2184 Evaluate_One_Check(truncate_flag, chk_id, p_party_id, null,v_check_level,
2185 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
2186 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,NULL );
2187 End if;
2188 --END IF;
2189
2190 /* This begin, end exception is added mainly for exception handing for Bug 19800
2191 04*/
2192
2193 Begin
2194 /* Added this condition for Bug 1937730*/
2195 v_party_id:=p_party_id;
2196
2197
2198 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
2199 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- Added for 1850508
2200 -- Check can be made only for 'B' types,
2201 -- If acct is not present as bind variable, the sql might returnwrong
2202 -- rows (party level counts) at account leve.
2203
2204 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
2205 --(sel_type='T') ) Then
2206 NULL;
2207 Else
2208 -- Loop through all parties with accounts
2209 -- Added for 1850508
2210 --Open Cursor
2211 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
2212 cid := dbms_sql.open_cursor;
2213 if (sel_type = 'B') then
2214 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
2215 elsif (sel_type = 'T') then
2216 dbms_sql.parse(cid, rule, dbms_sql.native);
2217 end if;
2218 dbms_sql.define_column(cid,1,val,240);
2219
2220 OPEN caccount_csr;
2221 LOOP
2222 FETCH caccount_csr
2223 INTO cparty_id, ccust_acct_id;
2224 EXIT WHEN caccount_csr%notfound;
2225 Evaluate_One_Check(truncate_flag, chk_id, cparty_id,
2226 ccust_acct_id,v_check_level,sel_type, sel_blk_id,data_type,
2227 fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,curr_code,
2228 l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid)
2229 ;
2230 END LOOP;
2231 CLOSE caccount_csr;
2232 IF (dbms_sql.is_open(cid)) THEN
2233 dbms_sql.close_cursor(cid);
2234 end if;
2235 End if; -- Added for 1850508
2236 END IF;
2237
2238 Exception
2239
2240 When others then
2241 IF (dbms_sql.is_open(cid)) THEN
2242 dbms_sql.close_cursor(cid);
2243 end if;
2244
2245 set_context('Evaluate_Checks3',
2246 'chk_id=>'||to_char(chk_id),
2247 'party_id=>'||to_char(cparty_id),
2248 'account_id=>'||to_char(ccust_acct_id));
2249 g_error := sqlcode || ' ' || sqlerrm;
2250 set_context(NULL, g_error);
2251 End;
2252
2253 END LOOP;
2254 CLOSE checks_csr;
2255
2256 /*Commented this if condition for Bug 1937730*/
2257 -- IF p_acct_id IS NULL THEN
2258 -- check if there are still records to be inserted
2259 IF l_ip_total <> 0 THEN
2260 l_for_insert := 'Y';
2261 l_for_party := 'Y';
2262 Insert_Update_Check_Results
2263 (l_ip_total, l_for_insert, l_for_party);
2264 l_ip_total :=0;
2265 END IF;
2266 -- check if there are still records to be updated
2267 IF l_up_total <> 0 THEN
2268 l_for_insert := 'N';
2269 l_for_party := 'Y';
2270 Insert_Update_Check_Results
2271 (l_up_total, l_for_insert, l_for_party);
2272 l_up_total :=0;
2273 END IF;
2274
2275 -- ELSE
2276 -- check if there are still records to be inserted
2277 IF l_ia_total <> 0 THEN
2278 l_for_insert := 'Y';
2279 l_for_party := 'N';
2280 Insert_Update_Check_Results
2281 (l_ia_total, l_for_insert, l_for_party);
2282 l_ia_total :=0;
2283 END IF;
2284
2285 -- check if there are still records to be updated
2286 IF l_ua_total <> 0 THEN
2287 l_for_insert := 'N';
2288 l_for_party := 'N';
2289 Insert_Update_Check_Results
2290 (l_ua_total, l_for_insert, l_for_party);
2291 l_ua_total :=0;
2292 END IF;
2293
2294 --New changes
2295 IF g_dashboard_for_contact IS NULL THEN
2296 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
2297 END IF;
2298 IF g_dashboard_for_contact = 'Y' THEN
2299 l_ip_total :=0;
2300 l_up_total :=0;
2301 l_ia_total :=0;
2302 l_ua_total :=0;
2303 -- Loop through check_id and update block results for a party or account
2304 OPEN checks_relparty_csr;
2305 LOOP
2306 FETCH checks_relparty_csr
2307 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2308 EXIT WHEN checks_relparty_csr%notfound;
2309
2310 IF sel_type = 'T' then
2311 OPEN cblocks_csr;
2312 LOOP
2313 FETCH cblocks_csr into v_block_id;
2314 Exit when cblocks_csr%notfound;
2315 Evaluate_Blocks5(v_block_id,p_party_id,
2316 l_up_total, l_ip_total, l_ua_total, l_ia_total);
2317 END LOOP;
2318 CLOSE cblocks_csr;
2319 END IF;
2320 END LOOP;
2321 CLOSE checks_relparty_csr;
2322
2323 l_ip_total :=0;
2324 l_up_total :=0;
2325 l_ia_total :=0;
2326 l_ua_total :=0;
2327
2328 -- Loop through check_id and update check results for a party or account
2329 OPEN checks_relparty_csr;
2330 LOOP
2331 FETCH checks_relparty_csr
2332 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2333 EXIT WHEN checks_relparty_csr%notfound;
2334 IF (sel_type = 'T') THEN
2335 build_rule('N',chk_id,v_check_level, rule);
2336 ELSIF (sel_type = 'B') THEN
2337 Open block_csr;
2338 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
2339 Close block_csr;
2340 IF sql_stmt IS NOT NULL Then
2341 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2342 Else
2343 v_party_in_sql := 0;
2344 End if;
2345
2346 END IF;
2347
2348 If v_check_level='CONTACT' then
2349 Evaluate_One_Check(truncate_flag, chk_id, p_party_id, null,v_check_level,
2350 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
2351 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,NULL );
2352 End if;
2353 END LOOP;
2354 CLOSE checks_relparty_csr;
2355 IF l_ip_total <> 0 THEN
2356 l_for_insert := 'Y';
2357 l_for_party := 'Y';
2358 Insert_Update_Check_Results
2359 (l_ip_total, l_for_insert, l_for_party);
2360 l_ip_total :=0;
2361 END IF;
2362 -- check if there are still records to be updated
2363 IF l_up_total <> 0 THEN
2364 l_for_insert := 'N';
2365 l_for_party := 'Y';
2366 Insert_Update_Check_Results
2367 (l_up_total, l_for_insert, l_for_party);
2368 l_up_total :=0;
2369 END IF;
2370 END IF; -- global if
2371 --End of new changes
2372
2373 --New changes for Employee HelpDesk
2374
2375 IF g_dashboard_for_employee = 'Y' THEN
2376 l_ip_total :=0;
2377 l_up_total :=0;
2378 l_ia_total :=0;
2379 l_ua_total :=0;
2380 -- Loop through check_id and update block results for a party or account
2381 OPEN checks_emp_csr;
2382 LOOP
2383 FETCH checks_emp_csr
2384 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2385 EXIT WHEN checks_emp_csr%notfound;
2386
2387 IF sel_type = 'T' then
2388 OPEN cblocks_csr;
2389 LOOP
2390 FETCH cblocks_csr into v_block_id;
2391 Exit when cblocks_csr%notfound;
2392 Evaluate_Blocks5(v_block_id,p_party_id,
2393 l_up_total, l_ip_total, l_ua_total, l_ia_total);
2394 END LOOP;
2395 CLOSE cblocks_csr;
2396 END IF;
2397 END LOOP;
2398 CLOSE checks_emp_csr;
2399
2400 l_ip_total :=0;
2401 l_up_total :=0;
2402 l_ia_total :=0;
2403 l_ua_total :=0;
2404
2405 -- Loop through check_id and update check results for a party or account
2406 OPEN checks_emp_csr;
2407 LOOP
2408 FETCH checks_emp_csr
2409 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
2410 EXIT WHEN checks_emp_csr%notfound;
2411 IF (sel_type = 'T') THEN
2412 build_rule('N',chk_id,v_check_level, rule);
2413 ELSIF (sel_type = 'B') THEN
2414 Open block_csr;
2415 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
2416 Close block_csr;
2417 IF sql_stmt IS NOT NULL Then
2418 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2419 Else
2420 v_party_in_sql := 0;
2421 End if;
2422
2423 END IF;
2424
2425 If v_check_level='EMPLOYEE' then
2426 Evaluate_One_Check(truncate_flag, chk_id, p_party_id, null,v_check_level,
2427 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
2428 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,NULL );
2429 End if;
2430 END LOOP;
2431 CLOSE checks_emp_csr;
2432 IF l_ip_total <> 0 THEN
2433 l_for_insert := 'Y';
2434 l_for_party := 'Y';
2435 Insert_Update_Check_Results
2436 (l_ip_total, l_for_insert, l_for_party);
2437 l_ip_total :=0;
2438 END IF;
2439 -- check if there are still records to be updated
2440 IF l_up_total <> 0 THEN
2441 l_for_insert := 'N';
2442 l_for_party := 'Y';
2443 Insert_Update_Check_Results
2444 (l_up_total, l_for_insert, l_for_party);
2445 l_up_total :=0;
2446 END IF;
2447 END IF; -- global if
2448 --End of new changes
2449
2450 COMMIT;
2451
2452 -- Return 0 for successful completion, 1 for warnings, 2 for error
2453 IF (error_flag) THEN
2454 errbuf := Sqlerrm;
2455 retcode := 2;
2456 ELSIF (warning_msg <> '') THEN
2457 errbuf := warning_msg;
2458 retcode := 1;
2459 ELSE
2460 errbuf := '';
2461 retcode := 0;
2462 END IF;
2463
2464 IF (debug) THEN
2465 fnd_file.close;
2466 END IF;
2467
2468 EXCEPTION
2469 WHEN OTHERS THEN
2470 ROLLBACK;
2471 IF (checks_csr%isopen) THEN
2472 CLOSE checks_csr;
2473 END IF;
2474 IF (debug) THEN
2475 fnd_file.close;
2476 END IF;
2477 -- Retrieve error message into errbuf
2478 errbuf := Sqlerrm;
2479 -- Return 2 for error
2480 retcode := 2;
2481 g_error := sqlcode || ' ' || sqlerrm;
2482 fnd_file.put_line(fnd_file.log , g_error);
2483
2484 END Evaluate_Checks3;
2485
2486 -- This procedure evaluates the checks for all parties/account in a particular group
2487 -- The batch sql statement is not null and profile check is of type variable ('B')
2488 PROCEDURE Evaluate_Checks4_Var
2489 (p_group_id NUMBER)
2490 IS
2491
2492 chk_id Number;
2493 chk_name Varchar2(240);
2494 sel_blk_id Number;
2495 data_type Varchar2(90);
2496 fmt_mask Varchar2(90);
2497 rule Varchar2(32767);
2498
2499 chk_u_l_flag Varchar2(3);
2500 Thd_grade Varchar2(9);
2501 truncate_flag Varchar2(1) := 'N';
2502
2503 blk_id Number := null;
2504 sql_stmt Varchar2(2000) := null;
2505 batch_sql_stmnt Varchar2(4000) := null;
2506 curr_code Varchar2(15) := null;
2507
2508 v_party_in_sql Number := 0;
2509 v_acct_in_sql Number := 0;
2510
2511 v_party_id Number;
2512 v_check_level Varchar2(10);
2513
2514 curr_date DATE := SYSDATE;
2515 insert_stmnt VARCHAR2(4000);
2516 insert_stmnt_sum VARCHAR2(4000);
2517 insert_stmnt_final VARCHAR2(4000);
2518 insert_stmnt_party VARCHAR2(4000);
2519 insert_stmnt_acct VARCHAR2(4000);
2520
2521 --Fix bug#7329039 by mpathani
2522 --select_clause VARCHAR2(100);
2523 --v_select_clause VARCHAR2(100);
2524 select_clause VARCHAR2(2000);
2525 v_select_clause VARCHAR2(2000);
2526
2527
2528 Range_Low_Value VARCHAR2(240);
2529 Range_High_Value VARCHAR2(240);
2530 val VARCHAR2(240) := null;
2531
2532 /* variables for columns of insert statement */
2533 c_fmt_mask VARCHAR2(1000);
2534 c_grade VARCHAR2(1000);
2535 c_curr_code VARCHAR2(1000);
2536 c_threshold VARCHAR2(1000);
2537 c_rating VARCHAR2(1000);
2538 c_color VARCHAR2(1000);
2539
2540 v_count NUMBER;
2541 v_chk_count NUMBER;
2542 v_batch_count NUMBER;
2543
2544 -- varlables for getting CSC schema name
2545 v_schema_status VARCHAR2(1);
2546 v_industry VARCHAR2(1);
2547 v_schema_name VARCHAR2(30);
2548 v_get_appl BOOLEAN;
2549
2550 -- variables to build the batch sql for summation
2551 v_select_pos number;
2552 v_select_length number;
2553 v_from_pos number;
2554 v_from_sum varchar2(2000);
2555 v_select_sum varchar2(2000) := 'SELECT hz.party_id, null, ';
2556 v_group_pos number;
2557 v_group varchar2(2000) := 'GROUP BY hz.party_id';
2558 return_status varchar2(50);
2559
2560 -- variables for handling contact profile variables
2561 v_where_clause_no_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE IN (' || '''' || 'PERSON' || '''' || ', ' || '''' || 'ORGANIZATION' || '''' || ')' ;
2562 v_where_clause_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE = ' || '''' ||'PARTY_RELATIONSHIP'|| '''' ;
2563
2564 TABLESEGMENT_FULL EXCEPTION;
2565 INDEXSEGMENT_FULL EXCEPTION;
2566 SNAPSHOT_TOO_OLD EXCEPTION;
2567 INTERNAL_ERROR EXCEPTION;
2568 SUMMATION_ERROR EXCEPTION;
2569
2570 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
2571 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
2572 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
2573 PRAGMA EXCEPTION_INIT(INTERNAL_ERROR, -600);
2574
2575 checks_csr checks_cur_var;
2576
2577 CURSOR block_csr IS
2578 SELECT block_id, sql_stmnt, UPPER(batch_sql_stmnt), currency_code, select_clause
2579 FROM csc_prof_blocks_b a
2580 WHERE a.block_id = sel_blk_id;
2581
2582 Cursor val_csr3 IS
2583 Select Range_Low_Value, Range_High_Value
2584 From csc_prof_check_ratings
2585 Where check_id = chk_id
2586 and check_rating_grade = thd_grade;
2587
2588 CURSOR rating_crs IS
2589 SELECT rating_code, check_rating_grade, color_code, range_low_value, range_high_value
2590 FROM csc_prof_check_ratings
2591 WHERE check_id = chk_id;
2592
2593 BEGIN
2594 COMMIT;
2595 EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
2596 EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES=TRUE';
2597
2598 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
2599
2600 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS NOLOGGING';
2601 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS2_T NOLOGGING';
2602 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS1_T NOLOGGING';
2603
2604 SELECT count(*) INTO v_chk_count FROM csc_prof_check_results;
2605 SELECT count(*) INTO v_batch_count FROM CSC_PROF_BATCH_RESULTS2_T;
2606
2607 IF v_chk_count = 0 AND v_batch_count <> 0 THEN
2608
2609
2610 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
2611 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
2612 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
2613
2614 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
2615 INTO csc_prof_check_results
2616 (check_results_id, check_id, party_id, cust_account_id,
2617 value, currency_code, grade, created_by, creation_date,
2618 last_updated_by, last_update_date, last_update_login,
2619 results_threshold_flag, rating_code, color_code
2620 )
2621 SELECT
2622 check_results_id, check_id, party_id, cust_account_id,
2623 value, currency_code, grade, created_by, creation_date,
2624 last_updated_by, last_update_date, last_update_login,
2625 results_threshold_flag, rating_code, color_code
2626 FROM CSC_PROF_BATCH_RESULTS2_T;
2627
2628 COMMIT;
2629
2630
2631 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
2632 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
2633 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
2634
2635 END IF;
2636 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
2637
2638 IF g_dashboard_for_contact IS NULL THEN
2639 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT', g_dashboard_for_contact);
2640 END IF;
2641
2642 /* R12 Employee HelpDesk Modifications */
2643
2644 IF g_dashboard_for_employee ='Y' THEN
2645 OPEN checks_csr FOR
2646 SELECT check_id, select_block_id, check_level,
2647 data_type, format_mask, check_upper_lower_flag, threshold_grade
2648 FROM csc_prof_checks_b
2649 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
2650 WHERE group_id = p_group_id)
2651 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
2652 AND Nvl(end_date_active, Sysdate)
2653 AND select_type = 'B'
2654 AND check_level IN ('EMPLOYEE');
2655
2656 ELSIF g_dashboard_for_employee ='N' THEN
2657 IF g_dashboard_for_contact = 'Y' THEN
2658 OPEN checks_csr FOR
2659 SELECT check_id, select_block_id,check_level,
2660 data_type, format_mask, check_upper_lower_flag, threshold_grade
2661 FROM csc_prof_checks_b
2662 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
2663 WHERE group_id = p_group_id)
2664 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
2665 AND Nvl(end_date_active, Sysdate)
2666 AND select_type = 'B'
2667 AND check_level IN ('PARTY', 'ACCOUNT', 'CONTACT');
2668 ELSIF g_dashboard_for_contact = 'N' THEN
2669 OPEN checks_csr FOR
2670 SELECT check_id, select_block_id,check_level,
2671 data_type, format_mask, check_upper_lower_flag, threshold_grade
2672 FROM csc_prof_checks_b
2673 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
2674 WHERE group_id = p_group_id)
2675 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
2676 AND Nvl(end_date_active, Sysdate)
2677 AND select_type = 'B'
2678 AND check_level IN ('PARTY', 'ACCOUNT');
2679 END IF;
2680 END IF;
2681
2682 /* End of R12 Employee HelpDesk Modifications */
2683 LOOP
2684 FETCH checks_csr
2685 INTO chk_id, sel_blk_id, v_check_level, data_type, fmt_mask, chk_u_l_flag, Thd_grade;
2686 EXIT WHEN checks_csr%notfound;
2687
2688 OPEN block_csr;
2689 FETCH block_csr INTO blk_id, sql_stmt, batch_sql_stmnt, curr_code, select_clause;
2690 CLOSE block_csr;
2691
2692 IF batch_sql_stmnt IS NOT NULL THEN
2693
2694 IF v_check_level = 'CONTACT' THEN
2695 IF g_dashboard_for_contact = 'Y' THEN
2696 batch_sql_stmnt := UPPER(batch_sql_stmnt);
2697 batch_sql_stmnt := REPLACE(batch_sql_stmnt, v_where_clause_no_rel, v_where_clause_rel);
2698 END IF;
2699 END IF;
2700
2701 IF sql_stmt IS NOT NULL THEN
2702 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2703 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
2704 ELSE
2705 v_party_in_sql := 0;
2706 v_acct_in_sql := 0;
2707 END IF;
2708
2709 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
2710
2711 insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || batch_sql_stmnt;
2712 EXECUTE IMMEDIATE (insert_stmnt);
2713
2714 IF v_acct_in_sql <> 0 AND v_check_level = 'PARTY' THEN
2715
2716 v_select_pos := NULL;
2717 v_select_length := NULL;
2718 v_from_pos := NULL;
2719 v_from_sum := NULL;
2720 v_select_sum := 'SELECT hz.party_id, null, ';
2721 v_select_clause := NULL;
2722 v_group_pos := NULL;
2723
2724 v_select_clause := rtrim(ltrim(UPPER(select_clause)));
2725 v_select_sum := v_select_sum || v_select_clause;
2726 v_select_pos := instr(upper(batch_sql_stmnt), v_select_clause);
2727 v_select_length := length(v_select_clause);
2728 v_from_pos := v_select_pos + v_select_length;
2729 v_from_sum := substr(batch_sql_stmnt, v_from_pos);
2730 v_group_pos := instr(upper(v_from_sum), 'GROUP BY HZ.PARTY_ID');
2731 v_from_sum := substr(v_from_sum, 1, v_group_pos -1);
2732 v_from_sum := v_from_sum || v_group;
2733 v_select_sum := v_select_sum || ' ' || v_from_sum;
2734
2735 -- validate the sql statement
2736 csc_core_utils_pvt.validate_sql_stmnt( p_sql_stmnt => v_select_sum,
2737 x_return_status => return_status);
2738
2739 IF return_status = 'S' THEN
2740 insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || v_select_sum ;
2741 EXECUTE IMMEDIATE (insert_stmnt_sum);
2742 ELSE
2743 RAISE SUMMATION_ERROR;
2744 fnd_file.put_line(fnd_file.log, 'Summation SQL failed for check_id' || chk_id);
2745 END IF;
2746
2747 END IF;
2748
2749 IF v_check_level = 'PARTY' THEN
2750 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
2751 SELECT party_id, NULL, NULL
2752 FROM hz_parties hz
2753 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
2754 AND hz.status = 'A'
2755 AND hz.party_type IN ('PERSON', 'ORGANIZATION');
2756 ELSIF v_check_level = 'CONTACT' THEN
2757 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
2758 SELECT party_id, NULL, NULL
2759 FROM hz_parties hz
2760 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
2761 AND hz.status = 'A'
2762 AND hz.party_type = 'PARTY_RELATIONSHIP';
2763 ELSIF v_check_level = 'ACCOUNT' THEN
2764 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
2765 SELECT party_id, cust_account_id, NULL
2766 FROM hz_cust_accounts hz
2767 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.account_id = hz.cust_account_id)
2768 AND hz.status = 'A';
2769 ELSIF v_check_level = 'EMPLOYEE' THEN
2770 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,VALUE)
2771 SELECT person_id, NULL, NULL
2772 FROM per_workforce_current_x hz
2773 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.person_id) ;
2774
2775 END IF;
2776
2777 OPEN val_csr3;
2778 FETCH val_csr3 INTO Range_Low_Value, Range_High_Value;
2779 IF val_csr3%NOTFOUND THEN
2780 Range_Low_Value := NULL;
2781 Range_High_Value := NULL;
2782 END IF;
2783 CLOSE val_csr3;
2784
2785 SELECT COUNT(*) INTO v_count FROM csc_prof_check_ratings
2786 WHERE check_id = chk_id;
2787
2788 rating_tbl.delete;
2789
2790 IF v_count > 0 THEN
2791 OPEN rating_crs;
2792 FOR a in 1..v_count LOOP
2793 FETCH rating_crs INTO rating_tbl(a);
2794 END LOOP;
2795 CLOSE rating_crs;
2796 END IF;
2797
2798 c_fmt_mask := 'CSC_Profile_Engine_PKG.format_mask(' ||
2799 '''' || curr_code || '''' || ',' ||
2800 '''' || data_type || '''' || ','||
2801 'value, '||
2802 ''''|| fmt_mask || '''' || ')' ;
2803
2804 c_grade := 'CSC_Profile_Engine_PKG.rating_color(' ||
2805 chk_id || ', ' ||
2806 'party_id, account_id, value, ' ||
2807 '''' || data_type || '''' || ', ' ||
2808 '''' || 'GRADE' || '''' ||', ' ||
2809 '''' || v_count || '''' || ')' ;
2810
2811 c_curr_code := '''' || curr_code || '''';
2812
2813 c_threshold := 'CSC_Profile_Engine_PKG.calc_threshold(' ||
2814 'value, '||
2815 '''' || Range_Low_Value || '''' || ', '||
2816 '''' || Range_High_Value || '''' || ', '||
2817 '''' || data_type || '''' || ', ' ||
2818 '''' || chk_u_l_flag || '''' || ')' ;
2819
2820 c_rating := 'CSC_Profile_Engine_PKG.rating_color(' ||
2821 chk_id || ', ' ||
2822 'party_id, account_id, value, ' ||
2823 '''' || data_type || '''' || ', ' ||
2824 '''' || 'RATING' || '''' ||', ' ||
2825 '''' || v_count || '''' || ')' ;
2826
2827 c_color := 'CSC_Profile_Engine_PKG.rating_color(' ||
2828 chk_id || ', ' ||
2829 'party_id, account_id, value, ' ||
2830 '''' || data_type || '''' || ', ' ||
2831 '''' || 'COLOR' || '''' ||', ' ||
2832 '''' || v_count || '''' || ')' ;
2833
2834 IF v_check_level = 'ACCOUNT' THEN
2835 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
2836 '(check_results_id, check_id, party_id, cust_account_id, value, currency_code, grade, '||
2837 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
2838 ' results_threshold_flag, rating_code, color_code)' ||
2839 ' SELECT csc_prof_check_results_s.nextval, '
2840 || chk_id || ', party_id, account_id, '
2841 || c_fmt_mask ||', '
2842 || c_curr_code || ', '
2843 || c_grade
2844 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
2845 || c_threshold ||', '
2846 || c_rating || ', '
2847 || c_color
2848 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(account_id, -999999) <> -999999';
2849 ELSE
2850 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
2851 '(check_results_id, check_id, party_id, cust_account_id, value, currency_code, grade, '||
2852 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
2853 ' results_threshold_flag, rating_code, color_code)' ||
2854 ' SELECT csc_prof_check_results_s.nextval, '
2855 || chk_id || ', party_id, account_id, '
2856 || c_fmt_mask ||', '
2857 || c_curr_code || ', '
2858 || c_grade
2859 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
2860 || c_threshold ||', '
2861 || c_rating || ', '
2862 || c_color
2863 ||' FROM CSC_PROF_BATCH_RESULTS1_T where account_id IS NULL';
2864 END IF;
2865
2866 EXECUTE IMMEDIATE (insert_stmnt_final);
2867 COMMIT;
2868 ELSE
2869 /* set the global variable to Y to indicate that profile checks without batch sql exist */
2870 g_check_no_batch := 'Y';
2871 END IF ; /* batch_sql_stmnt IS NOT NULL */
2872 END LOOP;
2873 CLOSE checks_csr;
2874
2875 INSERT /*+ PARALLEL (CSC_PROF_BATCH_RESULTS2_T, 12) */
2876 INTO CSC_PROF_BATCH_RESULTS2_T
2877 (check_results_id, check_id, party_id, cust_account_id,
2878 value, currency_code, grade, created_by, creation_date,
2879 last_updated_by, last_update_date, last_update_login,
2880 results_threshold_flag, rating_code, color_code
2881 )
2882 SELECT
2883 check_results_id, check_id, party_id, cust_account_id,
2884 value, currency_code, grade, created_by, creation_date,
2885 last_updated_by, last_update_date, last_update_login,
2886 results_threshold_flag, rating_code, color_code
2887 FROM csc_prof_check_results
2888 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
2889 MINUS
2890 SELECT check_id FROM csc_prof_group_checks a
2891 WHERE group_id = p_group_id
2892 AND EXISTS (SELECT 1 FROM csc_prof_checks_b b
2893 WHERE a.check_id = b.check_id AND b.select_type = 'B'));
2894
2895 COMMIT;
2896
2897 EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| v_schema_name ||'.csc_prof_check_results';
2898
2899
2900 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
2901 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
2902 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
2903
2904 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
2905 INTO csc_prof_check_results
2906 (check_results_id, check_id, party_id, cust_account_id,
2907 value, currency_code, grade, created_by, creation_date,
2908 last_updated_by, last_update_date, last_update_login,
2909 results_threshold_flag, rating_code, color_code
2910 )
2911 SELECT
2912 check_results_id, check_id, party_id, cust_account_id,
2913 value, currency_code, grade, created_by, creation_date,
2914 last_updated_by, last_update_date, last_update_login,
2915 results_threshold_flag, rating_code, color_code
2916 FROM CSC_PROF_BATCH_RESULTS2_T;
2917
2918 COMMIT;
2919
2920
2921 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
2922 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
2923 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
2924
2925 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
2926 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
2927
2928 EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
2929 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
2930
2931 EXCEPTION
2932 WHEN Tablesegment_full then
2933 CSC_Profile_Engine_PKG.Handle_Exception;
2934 g_error := sqlcode || ' ' || sqlerrm;
2935 set_context('Evaluate_Checks4_Var',
2936 'check_id => ' || chk_id,
2937 'Error => ' || g_error);
2938 App_Exception.raise_exception;
2939
2940 WHEN Indexsegment_full then
2941 CSC_Profile_Engine_PKG.Handle_Exception;
2942 g_error := sqlcode || ' ' || sqlerrm;
2943 set_context('Evaluate_Checks4_Var',
2944 'check_id => ' || chk_id,
2945 'Error => ' || g_error);
2946 App_Exception.raise_exception;
2947
2948 WHEN SNAPSHOT_TOO_OLD THEN
2949 CSC_Profile_Engine_PKG.Handle_Exception;
2950 g_error := sqlcode || ' ' || sqlerrm;
2951 set_context('Evaluate_Checks4_Var',
2952 'check_id => ' || chk_id,
2953 'Error => ' || g_error);
2954 App_Exception.raise_exception;
2955
2956 WHEN INTERNAL_ERROR THEN
2957 CSC_Profile_Engine_PKG.Handle_Exception;
2958 g_error := sqlcode || ' ' || sqlerrm;
2959 set_context('Evaluate_Checks4_Var',
2960 'check_id => ' || chk_id,
2961 'Error => ' || g_error);
2962 App_Exception.raise_exception;
2963
2964 WHEN SUMMATION_ERROR THEN
2965 CSC_Profile_Engine_PKG.Handle_Exception;
2966 set_context('Evaluate_Checks4_Var',
2967 'Summation SQL failed for chk_id => '||to_char(chk_id));
2968 RAISE;
2969
2970 WHEN OTHERS THEN
2971 CSC_Profile_Engine_PKG.Handle_Exception;
2972 g_error := sqlcode || ' ' || sqlerrm;
2973 set_context('Evaluate_Checks4_Var',
2974 'check_id => ' || chk_id,
2975 'Error => ' || g_error);
2976 RAISE;
2977
2978 END Evaluate_Checks4_Var;
2979
2980 -- This procedure evaluates the checks
2981 -- for which the batch sql statement is NULL and group_id is not null
2982
2983 PROCEDURE Evaluate_Checks4_No_Batch
2984 ( errbuf OUT NOCOPY VARCHAR2,
2985 retcode OUT NOCOPY NUMBER ,
2986 p_group_id in Number) IS
2987
2988 chk_id Number;
2989 chk_name Varchar2(240);
2990 cparty_id Number;
2991 ccust_acct_id Number;
2992 sel_type Varchar2(3);
2993 sel_blk_id Number;
2994 data_type Varchar2(90);
2995 fmt_mask Varchar2(90);
2996 rule Varchar2(32767);
2997
2998 Chk_u_l_flag Varchar2(3);
2999 Thd_grade Varchar2(9);
3000
3001 truncate_flag Varchar2(1) := 'N';
3002 acct_flag Varchar2(1);
3003
3004 blk_id Number := null;
3005 blk_name Varchar2(240) := null;
3006 sql_stmt Varchar2(2000) := null;
3007 curr_code Varchar2(15) := null;
3008
3009 v_party_in_sql Number := 0;
3010 v_acct_in_sql Number := 0;
3011 v_check_level Varchar2(10);
3012
3013 l_for_insert varchar2(1) := 'Y';
3014 l_for_party varchar2(1) := 'Y';
3015 l_up_total Number := 0;
3016 l_ip_total Number := 0;
3017 l_ua_total Number := 0;
3018 l_ia_total Number := 0;
3019
3020 v_party_id Number;
3021
3022 CURSOR checks_csr IS
3023 SELECT check_id, select_type, select_block_id,
3024 data_type, format_mask,check_upper_lower_flag,
3025 threshold_grade, check_level
3026 FROM csc_prof_checks_b a
3027 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
3028 WHERE group_id = p_group_id)
3029 AND select_type = 'B'
3030 AND check_level IN ('PARTY','ACCOUNT')
3031 AND EXISTS (SELECT null
3032 FROM csc_prof_blocks_b b
3033 WHERE a.select_block_id = b.block_id
3034 AND b.batch_sql_stmnt IS NULL)
3035 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
3036 AND Nvl(end_date_active, SYSDATE);
3037
3038 CURSOR cparty_csr IS
3039 SELECT party_id
3040 FROM hz_parties
3041 WHERE status = 'A'
3042 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
3043 -- Person, ORG added for 1850508
3044
3045 CURSOR caccount_csr IS
3046 SELECT party_id, cust_account_id
3047 FROM hz_cust_accounts
3048 WHERE party_id=v_party_id
3049 AND status = 'A' ;
3050
3051 CURSOR block_csr IS
3052 SELECT block_id, sql_stmnt, currency_code
3053 FROM csc_prof_blocks_b a
3054 WHERE a.block_id = sel_blk_id;
3055
3056 cid number;
3057 val VARCHAR2(240) := null;
3058
3059 BEGIN
3060 /* R12 Employee HelpDesk Modifications */
3061
3062 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
3063 IF g_dashboard_for_employee = 'N' THEN
3064
3065 l_ip_total := 0;
3066 l_up_total := 0;
3067 l_ia_total := 0;
3068 l_ua_total := 0;
3069
3070 OPEN checks_csr;
3071 LOOP
3072 FETCH checks_csr
3073 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
3074
3075 EXIT WHEN checks_csr%notfound;
3076
3077 Open block_csr;
3078 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
3079 Close block_csr;
3080
3081 IF sql_stmt IS NOT NULL Then
3082 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
3083 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
3084 Else
3085 v_party_in_sql := 0;
3086 v_acct_in_sql := 0;
3087 End if;
3088
3089 Begin
3090 cid := dbms_sql.open_cursor;
3091 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
3092 dbms_sql.define_column(cid,1,val,240);
3093
3094 OPEN cparty_csr;
3095 LOOP
3096 FETCH cparty_csr INTO cparty_id;
3097 EXIT WHEN cparty_csr%notfound;
3098 If v_check_level='PARTY' Then
3099 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
3100 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
3101 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
3102 End if;
3103
3104 /* added this condition for Bug 1937730*/
3105 v_party_id:=cparty_id;
3106
3107 IF v_check_level = 'ACCOUNT' Then
3108 If (v_acct_in_sql = 0) Then
3109 NULL;
3110 Else
3111 OPEN caccount_csr;
3112 LOOP
3113 FETCH caccount_csr
3114 INTO cparty_id, ccust_acct_id;
3115 EXIT WHEN caccount_csr%notfound;
3116
3117 Evaluate_One_Check(truncate_flag, chk_id,
3118 cparty_id,ccust_acct_id,v_check_level,sel_type, sel_blk_id,
3119 data_type, fmt_mask,chk_u_l_flag,Thd_grade,rule, blk_id, sql_stmt,
3120 curr_code, l_up_total, l_ip_total, l_ua_total
3121 , l_ia_total ,cid);
3122 END LOOP;
3123 CLOSE caccount_csr;
3124 End if; -- Added for 1850508
3125 END IF;
3126 END LOOP;
3127 CLOSE cparty_csr;
3128
3129 IF (dbms_sql.is_open(cid)) THEN
3130 dbms_sql.close_cursor(cid);
3131 end if;
3132
3133 Exception
3134 When others then
3135 IF (dbms_sql.is_open(cid)) THEN
3136 dbms_sql.close_cursor(cid);
3137 end if;
3138
3139 set_context('Evaluate_Checks4_No_Batch',
3140 'chk_id=>'||to_char(chk_id),
3141 'party_id=>'||to_char(cparty_id),
3142 'account_id=>'||to_char(ccust_acct_id));
3143 g_error := sqlcode || ' ' || sqlerrm;
3144 set_context(NULL, g_error);
3145 End;
3146
3147 END LOOP;
3148 CLOSE checks_csr;
3149
3150 -- check if there are still records to be inserted
3151 IF l_ip_total <> 0 THEN
3152 l_for_insert := 'Y';
3153 l_for_party := 'Y';
3154 Insert_Update_Check_Results
3155 (l_ip_total, l_for_insert, l_for_party);
3156 l_ip_total :=0;
3157 END IF;
3158 -- check if there are still records to be updated
3159 IF l_up_total <> 0 THEN
3160 l_for_insert := 'N';
3161 l_for_party := 'Y';
3162 Insert_Update_Check_Results
3163 (l_up_total, l_for_insert, l_for_party);
3164 l_up_total :=0;
3165 END IF;
3166
3167 -- check if there are still records to be inserted
3168 IF l_ia_total <> 0 THEN
3169 l_for_insert := 'Y';
3170 l_for_party := 'N';
3171 Insert_Update_Check_Results
3172 (l_ia_total, l_for_insert, l_for_party);
3173 l_ia_total :=0;
3174 END IF;
3175 -- check if there are still records to be updated
3176 IF l_ua_total <> 0 THEN
3177 l_for_insert := 'N';
3178 l_for_party := 'N';
3179 Insert_Update_Check_Results
3180 (l_ua_total, l_for_insert, l_for_party);
3181 l_ua_total :=0;
3182 END IF;
3183
3184 IF g_dashboard_for_contact IS NULL THEN
3185 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
3186 END IF;
3187
3188 IF g_dashboard_for_contact = 'Y' THEN
3189 l_ip_total := 0;
3190 l_up_total := 0;
3191 l_ia_total := 0;
3192 l_ua_total := 0;
3193
3194 Evaluate_blocks_Rel(p_up_total => l_up_total,
3195 p_ip_total => l_ip_total,
3196 p_ua_total => l_ua_total,
3197 p_ia_total => l_ia_total,
3198 p_group_id => p_group_id,
3199 p_no_batch_sql => 'Y' );
3200
3201 Evaluate_checks_Rel(errbuf => errbuf,
3202 retcode => retcode,
3203 p_group_id => p_group_id,
3204 p_no_batch_sql => 'Y');
3205 END IF;
3206
3207 COMMIT;
3208
3209 -- Return 0 for successful completion, 1 for warnings, 2 for error
3210 IF (error_flag) THEN
3211 errbuf := Sqlerrm;
3212 retcode := 2;
3213 ELSIF (warning_msg <> '') THEN
3214 errbuf := warning_msg;
3215 retcode := 1;
3216 ELSE
3217 errbuf := '';
3218 retcode := 0;
3219 END IF;
3220
3221 ELSIF g_dashboard_for_employee = 'Y' THEN
3222 l_ip_total := 0;
3223 l_up_total := 0;
3224 l_ia_total := 0;
3225 l_ua_total := 0;
3226
3227 Evaluate_blocks_Emp(p_up_total => l_up_total,
3228 p_ip_total => l_ip_total,
3229 p_ua_total => l_ua_total,
3230 p_ia_total => l_ia_total,
3231 p_group_id => p_group_id,
3232 p_no_batch_sql => 'Y' );
3233
3234 Evaluate_checks_Emp(errbuf => errbuf,
3235 retcode => retcode,
3236 p_group_id => p_group_id,
3237 p_no_batch_sql => 'Y');
3238 END IF;
3239
3240 COMMIT;
3241
3242 -- Return 0 for successful completion, 1 for warnings, 2 for error
3243 IF (error_flag) THEN
3244 errbuf := Sqlerrm;
3245 retcode := 2;
3246 ELSIF (warning_msg <> '') THEN
3247 errbuf := warning_msg;
3248 retcode := 1;
3249 ELSE
3250 errbuf := '';
3251 retcode := 0;
3252 END IF;
3253
3254 IF (debug) THEN
3255 fnd_file.close;
3256 END IF;
3257
3258 EXCEPTION
3259 WHEN OTHERS THEN
3260 ROLLBACK;
3261 IF (checks_csr%isopen) THEN
3262 CLOSE checks_csr;
3263 END IF;
3264 IF (cparty_csr%isopen) THEN
3265 CLOSE cparty_csr;
3266 END IF;
3267 IF (caccount_csr%isopen) THEN
3268 CLOSE caccount_csr;
3269 END IF;
3270 IF (debug) THEN
3271 fnd_file.close;
3272 END IF;
3273
3274 -- Retrieve error message into errbuf
3275 errbuf := Sqlerrm;
3276
3277 -- Return 2 for error
3278 retcode := 2;
3279
3280 g_error := sqlcode || ' ' || sqlerrm;
3281 fnd_file.put_line(fnd_file.log , g_error);
3282
3283 END Evaluate_Checks4_No_Batch;
3284 --
3285 -- Evaluate_Checks4_Rule
3286 -- if Party_id is null, Account_id is null and Group_id is not null
3287 -- Loop through Checks in this group and evaluate the results
3288 -- for all Parties and Accounts for Profile check type Rule ('T')
3289 --
3290 PROCEDURE Evaluate_Checks4_Rule
3291 ( errbuf OUT NOCOPY VARCHAR2,
3292 retcode OUT NOCOPY NUMBER ,
3293 p_group_id in Number) IS
3294
3295 chk_id Number;
3296 chk_name Varchar2(240);
3297 cparty_id Number;
3298 ccust_acct_id Number;
3299 sel_type Varchar2(3);
3300 sel_blk_id Number;
3301 data_type Varchar2(90);
3302 fmt_mask Varchar2(90);
3303 rule Varchar2(32767);
3304
3305 Chk_u_l_flag Varchar2(3);
3306 Thd_grade Varchar2(9);
3307
3308 truncate_flag Varchar2(1) := 'N';
3309 acct_flag Varchar2(1);
3310
3311 blk_id Number := null;
3312 blk_name Varchar2(240) := null;
3313 sql_stmt Varchar2(2000) := null;
3314 curr_code Varchar2(15) := null;
3315
3316 v_party_in_sql Number := 0;
3317 v_acct_in_sql Number := 0;
3318 v_check_level Varchar2(10);
3319
3320 l_for_insert varchar2(1) := 'Y';
3321 l_for_party varchar2(1) := 'Y';
3322 l_up_total Number := 0;
3323 l_ip_total Number := 0;
3324 l_ua_total Number := 0;
3325 l_ia_total Number := 0;
3326
3327 v_chk_count NUMBER := 0;
3328
3329 /* added this variable for Bug 1937730*/
3330 v_party_id Number;
3331
3332 CURSOR checks_csr IS
3333 SELECT check_id, select_type, select_block_id,
3334 data_type, format_mask,check_upper_lower_flag,threshold_grade,
3335 check_level
3336 FROM csc_prof_checks_b
3337 WHERE check_id in (select check_id from csc_prof_group_checks
3338 where group_id = p_group_id)
3339 AND check_level IN ('PARTY','ACCOUNT')
3340 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
3341 AND Nvl(end_date_active, Sysdate)
3342 AND select_type = 'T';
3343
3344 CURSOR checks_count IS
3345 SELECT COUNT(*)
3346 FROM csc_prof_checks_b
3347 WHERE check_id in (select check_id from csc_prof_group_checks
3348 where group_id = p_group_id)
3349 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
3350 AND Nvl(end_date_active, Sysdate)
3351 AND select_type = 'T';
3352
3353 CURSOR cparty_csr IS
3354 SELECT party_id
3355 FROM hz_parties
3356 WHERE status = 'A'
3357 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
3358 -- Person, ORG added for 1850508
3359
3360 /* added this condition party_id=v_party_id for Bug 1937730*/
3361 CURSOR caccount_csr IS
3362 SELECT party_id, cust_account_id
3363 FROM hz_cust_accounts
3364 WHERE party_id=v_party_id
3365 AND status = 'A' ;
3366
3367 CURSOR block_csr IS
3368 SELECT block_id, sql_stmnt, currency_code
3369 FROM csc_prof_blocks_b a
3370 WHERE a.block_id = sel_blk_id;
3371
3372 cid number;
3373 val VARCHAR2(240) := null;
3374
3375 BEGIN
3376 /* R12 Employee HelpDesk Modifications */
3377
3378 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
3379 IF g_dashboard_for_employee = 'N' THEN
3380
3381 OPEN checks_count;
3382 FETCH checks_count INTO v_chk_count;
3383 CLOSE checks_count;
3384
3385 IF v_chk_count > 0 THEN
3386 /* blocks will be evaluated only if the type is T */
3387 Evaluate_Blocks4(l_up_total, l_ip_total, l_ua_total, l_ia_total,p_group_id);
3388 END IF;
3389
3390 l_ip_total := 0;
3391 l_up_total := 0;
3392 l_ia_total := 0;
3393 l_ua_total := 0;
3394
3395 OPEN checks_csr;
3396 LOOP
3397 FETCH checks_csr
3398 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
3399
3400 EXIT WHEN checks_csr%notfound;
3401
3402 IF (sel_type = 'T') THEN
3403 acct_flag := 'N';
3404 build_rule(acct_flag,chk_id,v_check_level, rule);
3405 ELSIF (sel_type = 'B') THEN
3406 Open block_csr;
3407 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
3408 Close block_csr;
3409 END IF;
3410
3411 IF sql_stmt IS NOT NULL Then
3412 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
3413 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
3414 Else
3415 v_party_in_sql := 0;
3416 v_acct_in_sql := 0;
3417 End if;
3418
3419 /* This begin, end exception is added mainly for exception handing for Bug 19800
3420 04*/
3421
3422 Begin
3423
3424 IF ((sel_type='B' ) OR (sel_type='T') ) Then -- Only valid types
3425
3426 -- Loop through all parties
3427
3428 -- Open the Cursor
3429 cid := dbms_sql.open_cursor;
3430 if (sel_type = 'B') then
3431 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
3432 elsif (sel_type = 'T') then
3433 dbms_sql.parse(cid, rule, dbms_sql.native);
3434 end if;
3435 dbms_sql.define_column(cid,1,val,240);
3436
3437 -- pass the cid
3438 OPEN cparty_csr;
3439 LOOP
3440 FETCH cparty_csr INTO cparty_id;
3441 EXIT WHEN cparty_csr%notfound;
3442 If v_check_level='PARTY' Then
3443 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
3444 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
3445 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
3446 End if;
3447
3448 /* added this condition for Bug 1937730*/
3449 v_party_id:=cparty_id;
3450
3451 IF (sel_type = 'T') THEN
3452 acct_flag := 'Y';
3453 build_rule(acct_flag,chk_id,v_check_level, rule);
3454 END IF;
3455
3456 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
3457 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- Added for1850508
3458 -- Check can be made only for 'B' types,
3459 -- If acct is not present as bind variable, the sql might return wrong
3460 -- rows (party level counts) at account leve.
3461
3462 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0) OR
3463 --(sel_type='T') ) Then
3464
3465 NULL;
3466 Else
3467 -- Loop through all parties with accounts
3468 -- Added for 1850508
3469 --Open Cursor
3470 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
3471
3472
3473 OPEN caccount_csr;
3474 LOOP
3475 FETCH caccount_csr
3476 INTO cparty_id, ccust_acct_id;
3477 EXIT WHEN caccount_csr%notfound;
3478 Evaluate_One_Check(truncate_flag, chk_id,
3479 cparty_id,ccust_acct_id,v_check_level,sel_type, sel_blk_id,
3480 data_type, fmt_mask,chk_u_l_flag,Thd_grade,rule, blk_id, sql_stmt,
3481 curr_code, l_up_total, l_ip_total, l_ua_total
3482 , l_ia_total ,cid);
3483 END LOOP;
3484 CLOSE caccount_csr;
3485 End if; -- Added for 1850508
3486 END IF;
3487
3488 END LOOP;
3489 CLOSE cparty_csr;
3490 IF (dbms_sql.is_open(cid)) THEN
3491 dbms_sql.close_cursor(cid);
3492 end if;
3493 END IF;
3494
3495 Exception
3496
3497 When others then
3498 IF (dbms_sql.is_open(cid)) THEN
3499 dbms_sql.close_cursor(cid);
3500 end if;
3501
3502 set_context('Evaluate_Checks4_Rule',
3503 'chk_id=>'||to_char(chk_id),
3504 'party_id=>'||to_char(cparty_id),
3505 'account_id=>'||to_char(ccust_acct_id));
3506 g_error := sqlcode || ' ' || sqlerrm;
3507 set_context(NULL, g_error);
3508 End;
3509
3510 END LOOP;
3511 CLOSE checks_csr;
3512
3513 -- check if there are still records to be inserted
3514 IF l_ip_total <> 0 THEN
3515 l_for_insert := 'Y';
3516 l_for_party := 'Y';
3517 Insert_Update_Check_Results
3518 (l_ip_total, l_for_insert, l_for_party);
3519 l_ip_total :=0;
3520 END IF;
3521 -- check if there are still records to be updated
3522 IF l_up_total <> 0 THEN
3523 l_for_insert := 'N';
3524 l_for_party := 'Y';
3525 Insert_Update_Check_Results
3526 (l_up_total, l_for_insert, l_for_party);
3527 l_up_total :=0;
3528 END IF;
3529
3530 -- check if there are still records to be inserted
3531 IF l_ia_total <> 0 THEN
3532 l_for_insert := 'Y';
3533 l_for_party := 'N';
3534 Insert_Update_Check_Results
3535 (l_ia_total, l_for_insert, l_for_party);
3536 l_ia_total :=0;
3537 END IF;
3538 -- check if there are still records to be updated
3539 IF l_ua_total <> 0 THEN
3540 l_for_insert := 'N';
3541 l_for_party := 'N';
3542 Insert_Update_Check_Results
3543 (l_ua_total, l_for_insert, l_for_party);
3544 l_ua_total :=0;
3545 END IF;
3546
3547 IF g_dashboard_for_contact = 'Y' THEN
3548 l_ip_total := 0;
3549 l_up_total := 0;
3550 l_ia_total := 0;
3551 l_ua_total := 0;
3552
3553 Evaluate_blocks_Rel(p_up_total => l_up_total,
3554 p_ip_total => l_ip_total,
3555 p_ua_total => l_ua_total,
3556 p_ia_total => l_ia_total,
3557 p_group_id => p_group_id,
3558 p_rule_only => 'Y' );
3559
3560 Evaluate_checks_Rel(errbuf => errbuf,
3561 retcode => retcode,
3562 p_group_id => p_group_id,
3563 p_rule_only => 'Y');
3564 END IF;
3565
3566 COMMIT;
3567
3568 -- Return 0 for successful completion, 1 for warnings, 2 for error
3569 IF (error_flag) THEN
3570 errbuf := Sqlerrm;
3571 retcode := 2;
3572 ELSIF (warning_msg <> '') THEN
3573 errbuf := warning_msg;
3574 retcode := 1;
3575 ELSE
3576 errbuf := '';
3577 retcode := 0;
3578 END IF;
3579 /* R12 Employee HelpDesk Modifications */
3580
3581 ELSIF g_dashboard_for_employee = 'Y' THEN
3582 l_ip_total := 0;
3583 l_up_total := 0;
3584 l_ia_total := 0;
3585 l_ua_total := 0;
3586
3587 Evaluate_blocks_Emp(p_up_total => l_up_total,
3588 p_ip_total => l_ip_total,
3589 p_ua_total => l_ua_total,
3590 p_ia_total => l_ia_total,
3591 p_group_id => p_group_id,
3592 p_rule_only => 'Y' );
3593
3594 Evaluate_checks_Emp(errbuf => errbuf,
3595 retcode => retcode,
3596 p_group_id => p_group_id,
3597 p_rule_only => 'Y');
3598 END IF;
3599 /* End of R12 Employee HelpDesk Modifications */
3600 COMMIT;
3601
3602 -- Return 0 for successful completion, 1 for warnings, 2 for error
3603 IF (error_flag) THEN
3604 errbuf := Sqlerrm;
3605 retcode := 2;
3606 ELSIF (warning_msg <> '') THEN
3607 errbuf := warning_msg;
3608 retcode := 1;
3609 ELSE
3610 errbuf := '';
3611 retcode := 0;
3612 END IF;
3613
3614 IF (debug) THEN
3615 fnd_file.close;
3616 END IF;
3617
3618 EXCEPTION
3619 WHEN OTHERS THEN
3620 ROLLBACK;
3621 IF (checks_csr%isopen) THEN
3622 CLOSE checks_csr;
3623 END IF;
3624 IF (cparty_csr%isopen) THEN
3625 CLOSE cparty_csr;
3626 END IF;
3627 IF (caccount_csr%isopen) THEN
3628 CLOSE caccount_csr;
3629 END IF;
3630 IF (debug) THEN
3631 fnd_file.close;
3632 END IF;
3633
3634 -- Retrieve error message into errbuf
3635 errbuf := Sqlerrm;
3636
3637 -- Return 2 for error
3638 retcode := 2;
3639
3640 g_error := sqlcode || ' ' || sqlerrm;
3641 fnd_file.put_line(fnd_file.log , g_error);
3642
3643 END Evaluate_Checks4_Rule;
3644 --
3645 -- Evaluate_One_Check
3646 -- Evaluate the given profile check and store the result in the
3647 -- CSC_PROF_CHECK_RESULTS table. Also store the grade if ranges are
3648 -- specified.
3649 -- IN
3650 -- chk_id - profile check identifier
3651 -- cust_id - customer identifier for which check is evaluated
3652 -- acct_id - customer's account identifier
3653 -- sel_type - 'B' for block; 'T' for true or false ("indicator" check)
3654 -- sel_blk_id - building block identifier (required if select type is block)
3655 -- data_type - data type of check result (used for applying format mask)
3656 -- fmt_mask - format mask for check result (ignored if data type is char or
3657 -- currency code is present)
3658 -- rule - sql statement that returns 0 or 1 row for an indicator check
3659 -- P_CID - Cursor passed from calling routine to avoid re-parsing the same sql statement
3660 PROCEDURE Evaluate_One_Check
3661 ( p_truncate_flag IN VARCHAR2,
3662 p_chk_id IN NUMBER,
3663 p_party_id IN NUMBER,
3664 p_acct_id IN NUMBER DEFAULT NULL,
3665 p_check_level IN VARCHAR2 DEFAULT NULL,
3666 p_sel_type IN VARCHAR2,
3667 p_sel_blk_id IN NUMBER DEFAULT NULL,
3668 p_data_type IN VARCHAR2 DEFAULT NULL,
3669 p_fmt_mask IN VARCHAR2 DEFAULT NULL,
3670 p_chk_u_l_flag IN VARCHAR2 DEFAULT NULL,
3671 p_thd_grade IN VARCHAR2 DEFAULT NULL,
3672 p_rule IN VARCHAR2 DEFAULT NULL,
3673 p_blk_id IN NUMBER DEFAULT NULL,
3674 p_sql_stmt IN VARCHAR2 DEFAULT NULL,
3675 p_curr_code IN VARCHAR2 DEFAULT NULL,
3676 p_up_total IN OUT NOCOPY NUMBER ,
3677 p_ip_total IN OUT NOCOPY NUMBER ,
3678 p_ua_total IN OUT NOCOPY NUMBER ,
3679 p_ia_total IN OUT NOCOPY NUMBER ,
3680 p_cid IN NUMBER) IS
3681
3682 v_party_in_sql Number := 0;
3683 v_acct_in_sql Number := 0;
3684 v_employee_in_sql Number := 0;
3685
3686 val VARCHAR2(240) := null;
3687 curr_code VARCHAR2(15) := null;
3688 grd VARCHAR2(3) := null;
3689 cid NUMBER := null;
3690 dummy NUMBER;
3691
3692 Rng_h_v Varchar2(240);
3693 Rng_l_v Varchar2(240);
3694 Result Varchar2(3);
3695
3696
3697 --l_period_date Date := NULL;
3698 l_for_insert varchar2(1) := 'Y';
3699 l_for_party varchar2(1) := 'Y';
3700
3701 v_rating_code Varchar2(240);
3702 v_color_code Varchar2(240);
3703
3704 v_party_count Number := 0;
3705 v_account_count Number := 0;
3706 v_val Number := 0;
3707 v_format_date DATE;
3708
3709 Cursor val_crs1 IS
3710 Select check_rating_grade,rating_code,color_code
3711 From csc_prof_check_ratings
3712 Where check_id = p_chk_id
3713 And ( nvl(Range_Low_Value,val) <= v_val AND
3714 nvl(Range_High_Value,val) >= v_val );
3715
3716 Cursor val_crs2 IS
3717 Select check_rating_grade,rating_code,color_code
3718 From csc_prof_check_ratings
3719 Where check_id = p_chk_id
3720 And ( nvl(Range_Low_Value,val) <= val AND
3721 nvl(Range_High_Value,val) >= val );
3722
3723 /* This Cursor added for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. */
3724 Cursor val_crs3 IS
3725 Select Range_Low_Value,Range_High_Value
3726 From csc_prof_check_ratings
3727 Where check_id = p_chk_id
3728 and check_rating_grade=p_thd_grade;
3729
3730 /*
3731 -- for party level
3732 Cursor party_check_crs IS
3733 Select count(*)
3734 From csc_prof_check_results
3735 Where check_id = p_chk_id
3736 And party_id = p_party_id
3737 And cust_account_id IS NULL;
3738
3739 -- for account level
3740 Cursor account_check_crs IS
3741 Select count(*)
3742 From csc_prof_check_results
3743 Where check_id = p_chk_id
3744 And party_id = p_party_id
3745 And cust_account_id = p_acct_id;
3746 */
3747 BEGIN
3748 IF (p_sel_type = 'B') THEN
3749 Begin
3750
3751 -- P_CID is the Cursor to avoid reparsing the sql stmt
3752 -- P_CID would not be null when engine runs for more than 1 party (e.g. evaluate_checks1)
3753 -- P_CID would be null when engine is being run for 1 party (e.g. evaluate_checks2)
3754
3755 -- Added for 1850508
3756 if p_cid is null then
3757 cid := dbms_sql.open_cursor;
3758 dbms_sql.parse(cid, p_sql_stmt, dbms_sql.native);
3759 dbms_sql.define_column(cid,1,val,240);
3760 else
3761 cid := p_cid;
3762 end if;
3763
3764 IF p_sql_stmt IS NOT NULL Then
3765 v_party_in_sql := INSTR(lower(p_sql_stmt),':party_id',1);
3766 v_acct_in_sql := INSTR(lower(p_sql_stmt),':cust_account_id',1);
3767 v_employee_in_sql := INSTR(lower(p_sql_stmt),':employee_id',1);
3768 Else
3769 v_party_in_sql := 0;
3770 v_acct_in_sql := 0;
3771 v_employee_in_sql := 0;
3772 End if;
3773
3774 -- For Bug 1935015 commented this if statement and created 2 variables
3775
3776 if p_check_level='PARTY' OR p_check_level = 'CONTACT' then
3777
3778 if v_party_in_sql > 0 then
3779 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
3780 end if;
3781 if v_acct_in_sql > 0 then
3782 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
3783 end if;
3784
3785 elsif p_check_level='ACCOUNT' then
3786 if v_party_in_sql > 0 then
3787 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
3788 end if;
3789
3790 if v_acct_in_sql > 0 then
3791 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
3792 end if;
3793 /* R12 Employee HelpDesk Modifications */
3794 elsif p_check_level='EMPLOYEE' then
3795 if v_employee_in_sql > 0 then
3796 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
3797 end if;
3798
3799 end if;
3800
3801
3802 dummy := dbms_sql.execute_and_fetch(cid);
3803
3804 /* added the below condition for bug 3787383 */
3805 IF dummy > 0 THEN
3806 dbms_sql.column_value(cid,1,val);
3807 ELSE
3808 val := NULL;
3809 END IF;
3810
3811 if p_cid is null then
3812 dbms_sql.close_cursor(cid);
3813 end if;
3814
3815 -- END IF;
3816
3817 Exception
3818 When Others then
3819 if p_cid is null then
3820 IF (dbms_sql.is_open(cid)) THEN
3821 dbms_sql.close_cursor(cid);
3822 END IF;
3823 end if;
3824 val := '0';
3825 End;
3826
3827 ELSIF (p_sel_type = 'T') THEN
3828 Begin
3829
3830 -- Added for 1850508
3831 if (p_cid is null) then
3832 cid := dbms_sql.open_cursor;
3833 dbms_sql.parse(cid, p_rule, dbms_sql.native);
3834 else
3835 cid := p_cid;
3836 end if;
3837
3838 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
3839 IF p_rule IS NOT NULL Then
3840 v_party_in_sql := INSTR(lower(p_rule),':party_id',1);
3841 v_acct_in_sql := INSTR(lower(p_rule),':cust_account_id',1);
3842 v_employee_in_sql := INSTR(lower(p_rule),':employee_id',1);
3843 Else
3844 v_party_in_sql := 0;
3845 v_acct_in_sql := 0;
3846 v_employee_in_sql := 0;
3847 End if;
3848
3849 IF p_check_level='PARTY' OR p_check_level = 'CONTACT' THEN
3850 if v_party_in_sql > 0 then
3851 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
3852 end if;
3853 if v_acct_in_sql > 0 then
3854 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
3855 end if;
3856
3857 ELSIF p_check_level='ACCOUNT' then
3858 if v_party_in_sql > 0 then
3859 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
3860 end if;
3861
3862 if v_acct_in_sql > 0 then
3863 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
3864 end if;
3865 /* R12 Employee HelpDesk Modifications */
3866 ELSIF p_check_level='EMPLOYEE' then
3867 if v_employee_in_sql > 0 then
3868 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
3869 end if;
3870 END IF;
3871
3872 val := dbms_sql.execute_and_fetch(cid); -- returns 0 if no rows found
3873 -- Added for 1850508
3874 if (p_cid is null) then
3875 dbms_sql.close_cursor(cid);
3876 end if;
3877 Exception
3878 When Others then
3879 if (p_cid is null) then
3880 IF (dbms_sql.is_open(cid)) THEN
3881 dbms_sql.close_cursor(cid);
3882 end if;
3883 end if;
3884 val := null;
3885 End;
3886 END IF;
3887
3888 /* This condition added for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. */
3889
3890 IF (p_sel_type = 'B') and (p_data_type IN ('NUMBER', 'DATE')) THEN
3891 IF p_data_type = 'NUMBER' Then
3892 IF val IS NULL Then
3893 val := '0';
3894 END IF;
3895 OPEN val_crs3;
3896 FETCH val_crs3 INTO Rng_l_v,rng_h_v;
3897 IF val_crs3%notfound THEN
3898 Result := 'Y';
3899 END IF;
3900 CLOSE val_crs3;
3901
3902
3903 If p_chk_u_l_flag ='U' Then
3904 If to_number(val)>to_number(rng_h_v) then
3905 Result:='Y';
3906 Else
3907 Result:='N';
3908 End If;
3909 Elsif p_chk_u_l_flag ='L' Then
3910 If to_number(val)<to_number(rng_l_v) then
3911 Result:='Y';
3912 Else
3913 Result:='N';
3914 End If;
3915 Else
3916 Result:='N';
3917 End If;
3918
3919 ELSE
3920 /* added the below code for bug 4071727 */
3921 OPEN val_crs3;
3922 FETCH val_crs3 INTO Rng_l_v,rng_h_v;
3923 IF val_crs3%notfound THEN
3924 Result := 'Y';
3925 END IF;
3926 CLOSE val_crs3;
3927 /* added till here for bug 4071727 */
3928
3929 If val is not null then
3930 If p_chk_u_l_flag ='U' Then
3931 /* added to_date for bug 4071727 */
3932 If to_Date(val, 'DD-MM-RRRR') > to_date(rng_h_v, 'DD-MM-RRRR') Then
3933 Result:='Y';
3934 Else
3935 Result:='N';
3936 End If;
3937 Elsif p_chk_u_l_flag ='L' Then
3938 /* added to_date for bug 4071727 */
3939 If to_Date(val, 'DD-MM-RRRR') < to_Date(rng_l_v, 'DD-MM-RRRR') Then
3940 Result:='Y';
3941 Else
3942 Result:='N';
3943 End If;
3944 Else
3945 Result:='N';
3946 End If;
3947 End if;
3948 END IF;
3949 -- ELSE
3950 -- grd := NULL;
3951 END IF;
3952 /* Condition for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. ended*/
3953
3954 IF (p_sel_type = 'B') and (p_data_type IN ('NUMBER', 'DATE')) THEN
3955 IF p_data_type = 'NUMBER' Then
3956 IF val IS NULL Then
3957 val := '0';
3958 END IF;
3959 v_val := to_number(val);
3960 val := to_char(v_val);
3961 OPEN val_crs1;
3962 FETCH val_crs1 INTO grd,v_rating_code,v_color_code;
3963 IF val_crs1%notfound THEN
3964 grd := NULL;
3965 /* Added for Bug 2227062 */
3966 v_rating_code := NULL;
3967 v_color_code := NULL;
3968 END IF;
3969 CLOSE val_crs1;
3970 ELSE
3971 IF val is not null then
3972 OPEN val_crs2;
3973 FETCH val_crs2 INTO grd,v_rating_code,v_color_code;
3974 IF val_crs2%notfound THEN
3975 grd := NULL;
3976 /* Added for Bug 2227062 */
3977 v_rating_code := NULL;
3978 v_color_code := NULL;
3979 END IF;
3980 CLOSE val_crs2;
3981 END IF;
3982 END IF;
3983 ELSE
3984 grd := NULL;
3985 END IF;
3986
3987 -- Only convert to format mask if result is not True/False
3988 IF ((p_sel_type = 'B') AND (curr_code IS NULL)) THEN
3989 IF (p_fmt_mask IS NOT NULL) THEN
3990 IF (p_data_type = 'NUMBER') THEN
3991 val := To_char(To_number(val), p_fmt_mask);
3992 ELSIF (p_data_type = 'DATE') THEN
3993 BEGIN
3994 /* modified the to_date to RRRR format for bug 4177903 */
3995 v_format_date := to_date(val, 'DD-MM-RRRR');
3996 val := To_char(v_format_date, p_fmt_mask);
3997 EXCEPTION
3998 WHEN OTHERS THEN
3999 val := null;
4000 END;
4001 END IF;
4002 END IF;
4003 ELSIF (p_sel_type = 'T') THEN
4004 IF (val > 0) THEN
4005 val := 'Y';
4006 ELSE
4007 val := 'N';
4008 END IF;
4009 END IF;
4010
4011
4012 BEGIN
4013 IF p_acct_id IS NULL THEN
4014 IF p_truncate_flag = 'N' THEN
4015 begin
4016 select 1 into v_party_count
4017 from csc_prof_check_results
4018 where check_id = p_chk_id
4019 and party_id = p_party_id
4020 and cust_account_id is null;
4021 exception when no_data_found then
4022 v_party_count := 0;
4023 when others then
4024 v_party_count := null;
4025 end;
4026 /*
4027 OPEN party_check_crs;
4028 FETCH party_check_crs INTO v_party_count;
4029 IF party_check_crs%notfound THEN
4030 v_party_count := 0;
4031 END IF;
4032 CLOSE party_check_crs;
4033 */
4034 ELSE
4035 v_party_count := 0;
4036 END IF;
4037
4038 IF v_party_count = 0 THEN
4039 p_ip_total := p_ip_total + 1;
4040
4041 -- assign values to insert party check results
4042 ip_check_id(p_ip_total) := p_chk_id;
4043 ip_party_id(p_ip_total) := p_party_id;
4044 ip_account_id(p_ip_total) := NULL;
4045 ip_value(p_ip_total) := val;
4046 ip_currency(p_ip_total) := curr_code;
4047 ip_grade(p_ip_total) := grd;
4048 ip_rating_code(p_ip_total) :=v_rating_code;
4049 ip_color_code(p_ip_total) :=v_color_code;
4050 ip_results(p_ip_total) := result;
4051 IF p_ip_total = 1000 THEN
4052 l_for_insert := 'Y';
4053 l_for_party := 'Y';
4054 Insert_Update_Check_Results
4055 (p_ip_total, l_for_insert, l_for_party);
4056 p_ip_total :=0;
4057 END IF;
4058
4059 ELSIF v_party_count = 1 THEN
4060 p_up_total := p_up_total + 1;
4061
4062 -- assign values to update party check results
4063 up_check_id(p_up_total) := p_chk_id;
4064 up_party_id(p_up_total) := p_party_id;
4065 up_account_id(p_up_total) := NULL;
4066 up_value(p_up_total) := val;
4067 up_currency(p_up_total) := curr_code;
4068 up_grade(p_up_total) := grd;
4069 up_rating_code(p_up_total) :=v_rating_code;
4070 up_color_code(p_up_total) :=v_color_code;
4071 up_results(p_up_total) := result;
4072 IF p_up_total = 1000 THEN
4073 l_for_insert := 'N';
4074 l_for_party := 'Y';
4075 Insert_Update_Check_Results
4076 (p_up_total, l_for_insert, l_for_party);
4077 p_up_total := 0;
4078 END IF;
4079
4080 END IF;
4081
4082 ELSE
4083 IF p_truncate_flag = 'N' THEN
4084 begin
4085 select 1 into v_account_count from csc_prof_check_results
4086 where check_id = p_chk_id
4087 and party_id = p_party_id
4088 and CUST_ACCOUNT_ID =p_acct_id; -- Bug 5255227 Fix
4089 exception when no_data_found then
4090 v_account_count := 0;
4091 when TOO_MANY_ROWS then
4092 v_account_count := 1;
4093 when others then
4094 v_account_count := null;
4095 end ;
4096 /*
4097 OPEN account_check_crs;
4098 FETCH account_check_crs INTO v_account_count;
4099 IF account_check_crs%notfound THEN
4100 v_account_count := 0;
4101 END IF;
4102 CLOSE account_check_crs;
4103 */
4104 ELSE
4105 v_account_count := 0;
4106 END IF;
4107
4108 IF v_account_count = 0 THEN
4109 p_ia_total := p_ia_total + 1;
4110 -- assign values to insert
4111 ia_check_id(p_ia_total) := p_chk_id;
4112 ia_party_id(p_ia_total) := p_party_id;
4113 ia_account_id(p_ia_total) := p_acct_id;
4114 ia_value(p_ia_total) := val;
4115 ia_currency(p_ia_total) := curr_code;
4116 ia_grade(p_ia_total) := grd;
4117 ia_rating_code(p_ia_total) := v_rating_code;
4118 ia_color_code(p_ia_total) := v_color_code;
4119 ia_results(p_ia_total) := result;
4120
4121 IF p_ia_total = 1000 THEN
4122 l_for_insert := 'Y';
4123 l_for_party := 'N';
4124 Insert_Update_Check_Results
4125 (p_ia_total, l_for_insert, l_for_party);
4126 p_ia_total := 0;
4127 END IF;
4128
4129 ELSIF v_account_count = 1 THEN
4130 p_ua_total := p_ua_total + 1;
4131
4132 -- assign values to update party tables
4133 ua_check_id(p_ua_total) := p_chk_id;
4134 ua_party_id(p_ua_total) := p_party_id;
4135 ua_account_id(p_ua_total) := p_acct_id;
4136 ua_value(p_ua_total) := val;
4137 ua_currency(p_ua_total) := curr_code;
4138 -- This is a Bug fix for 1934720, changing p_ia_total to p_ua_total
4139 ua_grade(p_ua_total) := grd;
4140 ua_rating_code(p_ua_total) := v_rating_code;
4141 ua_color_code(p_ua_total) := v_color_code;
4142 ua_results(p_ua_total) := result;
4143 IF p_ua_total = 1000 THEN
4144 l_for_insert := 'N';
4145 l_for_party := 'N';
4146 Insert_Update_Check_Results
4147 (p_ua_total, l_for_insert, l_for_party);
4148 p_ua_total := 0;
4149 END IF;
4150
4151 END IF;
4152 END IF;
4153
4154 END;
4155
4156 EXCEPTION
4157 -- If an exception is raised, close cursor before exiting
4158 WHEN OTHERS THEN
4159 IF val_crs1%isopen THEN
4160 CLOSE val_crs1;
4161 END IF;
4162 IF val_crs2%isopen THEN
4163 CLOSE val_crs2;
4164 END IF;
4165 /*
4166 IF party_check_crs%isopen THEN
4167 CLOSE party_check_crs;
4168 END IF;
4169 IF account_check_crs%isopen THEN
4170 CLOSE account_check_crs;
4171 END IF;
4172 */
4173 if p_cid is null then
4174 IF (dbms_sql.is_open(cid)) THEN
4175 dbms_sql.close_cursor(cid);
4176 END IF;
4177 end if;
4178 set_context('Evaluate_One_Check',
4179 'chk_id=>'||to_char(p_chk_id),
4180 'party_id=>'||to_char(p_party_id),
4181 'account_id=>'||to_char(p_acct_id));
4182 g_error := sqlcode || ' ' || sqlerrm;
4183 set_context(NULL, g_error);
4184 --table_delete;
4185 END Evaluate_One_Check;
4186
4187
4188 --
4189 -- Evaluate_Blocks1
4190 -- Loop through all the effective building blocks and evaluate the results
4191 -- for each customer.
4192 -- if block_id is null, party_id is null and account_id is null
4193 --
4194 PROCEDURE Evaluate_Blocks1
4195 (
4196 p_up_total IN OUT NOCOPY NUMBER ,
4197 p_ip_total IN OUT NOCOPY NUMBER ,
4198 p_ua_total IN OUT NOCOPY NUMBER ,
4199 p_ia_total IN OUT NOCOPY NUMBER
4200 ) IS
4201
4202 blk_id NUMBER;
4203 blk_name Varchar2(240);
4204 sql_stmt Varchar2(2000);
4205 curr_code Varchar2(15);
4206 bparty_id Number;
4207 bacct_id Number;
4208 truncate_flag Varchar2(1):= 'N';
4209
4210 l_for_insert varchar2(1) := 'Y';
4211 l_for_party varchar2(1) := 'Y';
4212
4213 v_party_in_sql Number := 0;
4214 v_acct_in_sql Number := 0;
4215
4216 /* added this variable for Bug 1937730*/
4217 v_party_id Number;
4218
4219
4220 -- cursor to run all blocks
4221 CURSOR blocks_csr IS
4222 SELECT block_id, sql_stmnt, currency_code
4223 FROM csc_prof_blocks_b a
4224 WHERE exists ( Select b.block_id
4225 From csc_prof_check_rules_b b
4226 where b.block_id = a.block_id
4227 or b.expr_to_block_id = a.block_id)
4228 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
4229 AND Nvl(end_date_active, Sysdate)
4230 AND block_level IN ('PARTY','ACCOUNT');
4231
4232 -- cursor to update all results of a party
4233 CURSOR bparty_csr IS
4234 SELECT party_id
4235 FROM hz_parties
4236 WHERE status='A'
4237 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
4238 -- Person, ORG added for 1850508
4239
4240 -- cursor to update all results of an account
4241 /* added this condition party_id=v_party_id for Bug 1937730*/
4242 CURSOR baccount_csr IS
4243 SELECT party_id, cust_account_id
4244 FROM hz_cust_accounts
4245 WHERE party_id=v_party_id
4246 AND status = 'A' ;
4247
4248 -- Added for 1850508
4249 cid number;
4250 val VARCHAR2(240) := null;
4251
4252 BEGIN
4253 -- Loop through blocks for party level
4254 BEGIN
4255 OPEN blocks_csr;
4256 LOOP
4257 FETCH blocks_csr INTO blk_id, sql_stmt, curr_code;
4258 EXIT WHEN blocks_csr%notfound;
4259
4260 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
4261 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4262 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4263
4264 /* This begin, end exception is added mainly for exception handing for Bug 19800
4265 04*/
4266
4267 Begin
4268
4269 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
4270 -- Loop through per party
4271 -- Added for 1850508
4272 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing.PARTY Level.'||to_char(blk_id));
4273 cid := dbms_sql.open_cursor;
4274 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4275 dbms_sql.define_column(cid, 1, val, 240);
4276
4277 OPEN bparty_csr;
4278 LOOP
4279 FETCH bparty_csr INTO bparty_id;
4280 EXIT WHEN bparty_csr%notfound;
4281
4282 Evaluate_One_Block(truncate_flag, blk_id, bparty_id,
4283 null, sql_stmt, curr_code,
4284 p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
4285
4286 /* added this condition for Bug 1937730*/
4287 v_party_id:=bparty_id;
4288
4289 If (v_acct_in_sql <> 0) then -- Added for 1850508
4290 -- If acct is not present as bind variable, the sql might return wrong
4291 -- rows (party level counts) at account leve.
4292 --p_old_block_id:=null;
4293
4294 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
4295
4296
4297 OPEN baccount_csr;
4298 LOOP
4299 FETCH baccount_csr
4300 INTO bparty_id, bacct_id;
4301 EXIT WHEN baccount_csr%notfound;
4302
4303 Evaluate_One_Block(truncate_flag, blk_id, bparty_id,
4304 bacct_id,sql_stmt, curr_code,p_up_total, p_ip_total,
4305 p_ua_total, p_ia_total,cid);
4306 END LOOP;
4307 CLOSE baccount_csr;
4308
4309 END IF; -- Added for 1850508
4310
4311 END LOOP;
4312 CLOSE bparty_csr;
4313 IF (dbms_sql.is_open(cid)) THEN
4314 dbms_sql.close_cursor(cid);
4315 end if;
4316 -- END IF;
4317
4318 Exception
4319 When others then
4320 IF (dbms_sql.is_open(cid)) THEN
4321 dbms_sql.close_cursor(cid);
4322 end if;
4323
4324 set_context('Evaluate_Blocks1', blk_id, bparty_id);
4325 g_error := sqlcode || ' ' || sqlerrm;
4326 set_context(NULL, g_error);
4327 End;
4328
4329
4330 END LOOP;
4331 CLOSE blocks_csr;
4332
4333 -- check if there are still records to be inserted
4334 IF p_ip_total <> 0 THEN
4335 l_for_insert := 'Y';
4336 l_for_party := 'Y';
4337 Insert_Update_Block_Results
4338 (p_ip_total, l_for_insert, l_for_party);
4339 p_ip_total :=0;
4340 END IF;
4341 -- check if there are still records to be updated
4342 IF p_up_total <> 0 THEN
4343 l_for_insert := 'N';
4344 l_for_party := 'Y';
4345 Insert_Update_Block_Results
4346 (p_up_total, l_for_insert, l_for_party);
4347 p_up_total :=0;
4348 END IF;
4349
4350
4351 EXCEPTION
4352 WHEN OTHERS THEN
4353 IF (blocks_csr%isopen) THEN
4354 CLOSE blocks_csr;
4355 END IF;
4356 IF (bparty_csr%isopen) THEN
4357 CLOSE bparty_csr;
4358 END IF;
4359 IF (baccount_csr%isopen) THEN
4360 CLOSE baccount_csr;
4361 END IF;
4362
4363 set_context('Evaluate_Blocks', blk_id, bparty_id);
4364 g_error := sqlcode || ' ' || sqlerrm;
4365 set_context(NULL, g_error);
4366 --set_context(NULL, Sqlerrm);
4367 table_delete;
4368
4369 RAISE;
4370 END;
4371
4372 -- check if there are still records to be inserted
4373 IF p_ia_total <> 0 THEN
4374 l_for_insert := 'Y';
4375 l_for_party := 'N';
4376
4377 Insert_Update_Block_Results
4378 (p_ia_total, l_for_insert, l_for_party);
4379 p_ia_total :=0;
4380 END IF;
4381
4382 -- check if there are still records to be updated
4383 IF p_ua_total <> 0 THEN
4384 l_for_insert := 'N';
4385 l_for_party := 'N';
4386 Insert_Update_Block_Results
4387 (p_ua_total, l_for_insert, l_for_party);
4388 p_ua_total :=0;
4389 END IF;
4390
4391 END Evaluate_Blocks1;
4392
4393 -- This procedure evaluates the blocks
4394 -- for which the batch sql statement is NULL and select_type is 'B' (Variable)
4395 PROCEDURE Evaluate_Blocks1_No_Batch
4396 (
4397 p_up_total IN OUT NOCOPY NUMBER ,
4398 p_ip_total IN OUT NOCOPY NUMBER ,
4399 p_ua_total IN OUT NOCOPY NUMBER ,
4400 p_ia_total IN OUT NOCOPY NUMBER
4401 ) IS
4402
4403 blk_id Number;
4404 blk_name Varchar2(240);
4405 sql_stmt Varchar2(2000);
4406 curr_code Varchar2(15);
4407 bparty_id Number;
4408 bacct_id Number;
4409 truncate_flag Varchar2(1):= 'N';
4410
4411 l_for_insert varchar2(1) := 'Y';
4412 l_for_party varchar2(1) := 'Y';
4413
4414 v_party_in_sql Number := 0;
4415 v_acct_in_sql Number := 0;
4416 v_party_id Number;
4417
4418 -- cursor to run all blocks for all checks present in that group
4419 CURSOR blocks_csr IS
4420 SELECT block_id, sql_stmnt, currency_code
4421 FROM csc_prof_blocks_b a
4422 WHERE EXISTS ( SELECT null
4423 FROM csc_prof_checks_b b
4424 WHERE b.select_block_id = a.block_id
4425 AND b.select_type = 'B'
4426 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
4427 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
4428 AND Nvl(end_date_active, SYSDATE)
4429 AND batch_sql_stmnt IS NULL;
4430
4431 -- cursor to update all results of a party
4432 CURSOR bparty_csr IS
4433 SELECT party_id
4434 FROM hz_parties
4435 WHERE status='A'
4436 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
4437
4438 -- cursor to update all results of an account
4439 CURSOR baccount_csr IS
4440 SELECT party_id, cust_account_id
4441 FROM hz_cust_accounts
4442 WHERE party_id=v_party_id
4443 AND status = 'A' ;
4444
4445 cid number;
4446 val VARCHAR2(240) := null;
4447
4448 BEGIN
4449 -- Loop through blocks for party level
4450 BEGIN
4451 OPEN blocks_csr;
4452 LOOP
4453 FETCH blocks_csr INTO blk_id, sql_stmt, curr_code;
4454 EXIT WHEN blocks_csr%notfound;
4455
4456 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4457 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4458
4459 Begin
4460 cid := dbms_sql.open_cursor;
4461 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4462 dbms_sql.define_column(cid, 1, val, 240);
4463
4464 OPEN bparty_csr;
4465 LOOP
4466 FETCH bparty_csr INTO bparty_id;
4467 EXIT WHEN bparty_csr%notfound;
4468
4469 Evaluate_One_Block(truncate_flag, blk_id, bparty_id,
4470 null, sql_stmt, curr_code, p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
4471
4472 v_party_id:=bparty_id;
4473
4474 If (v_acct_in_sql <> 0) then
4475 OPEN baccount_csr;
4476 LOOP
4477 FETCH baccount_csr
4478 INTO bparty_id, bacct_id;
4479 EXIT WHEN baccount_csr%notfound;
4480
4481 Evaluate_One_Block(truncate_flag, blk_id,
4482 bparty_id,bacct_id,sql_stmt, curr_code,
4483 p_up_total, p_ip_total,p_ua_total,
4484 p_ia_total,cid);
4485 END LOOP;
4486 CLOSE baccount_csr;
4487
4488 END IF; -- Added for 1850508
4489 END LOOP;
4490 CLOSE bparty_csr;
4491
4492 IF (dbms_sql.is_open(cid)) THEN
4493 dbms_sql.close_cursor(cid);
4494 end if;
4495
4496 Exception
4497 When others then
4498 IF (dbms_sql.is_open(cid)) THEN
4499 dbms_sql.close_cursor(cid);
4500 end if;
4501 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
4502 g_error := sqlcode || ' ' || sqlerrm;
4503 set_context(NULL, g_error);
4504 End;
4505
4506 END LOOP;
4507 CLOSE blocks_csr;
4508
4509 -- check if there are still records to be inserted
4510 IF p_ip_total <> 0 THEN
4511 l_for_insert := 'Y';
4512 l_for_party := 'Y';
4513 Insert_Update_Block_Results
4514 (p_ip_total, l_for_insert, l_for_party);
4515 p_ip_total :=0;
4516 END IF;
4517 -- check if there are still records to be updated
4518 IF p_up_total <> 0 THEN
4519 l_for_insert := 'N';
4520 l_for_party := 'Y';
4521 Insert_Update_Block_Results
4522 (p_up_total, l_for_insert, l_for_party);
4523 p_up_total :=0;
4524 END IF;
4525
4526 EXCEPTION
4527 WHEN OTHERS THEN
4528 IF (blocks_csr%isopen) THEN
4529 CLOSE blocks_csr;
4530 END IF;
4531 IF (bparty_csr%isopen) THEN
4532 CLOSE bparty_csr;
4533 END IF;
4534
4535 IF (baccount_csr%isopen) THEN
4536 CLOSE baccount_csr;
4537 END IF;
4538
4539 IF (dbms_sql.is_open(cid)) THEN
4540 dbms_sql.close_cursor(cid);
4541 end if;
4542 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
4543 g_error := sqlcode || ' ' || sqlerrm;
4544 set_context(NULL, g_error);
4545 table_delete;
4546 RAISE;
4547 END;
4548
4549 -- check if there are still records to be inserted
4550 IF p_ia_total <> 0 THEN
4551 l_for_insert := 'Y';
4552 l_for_party := 'N';
4553
4554 Insert_Update_Block_Results
4555 (p_ia_total, l_for_insert, l_for_party);
4556 p_ia_total :=0;
4557 END IF;
4558
4559 -- check if there are still records to be updated
4560 IF p_ua_total <> 0 THEN
4561 l_for_insert := 'N';
4562 l_for_party := 'N';
4563 Insert_Update_Block_Results
4564 (p_ua_total, l_for_insert, l_for_party);
4565 p_ua_total :=0;
4566 END IF;
4567
4568 END Evaluate_Blocks1_No_Batch;
4569 --
4570 -- Evaluate_Blocks2
4571 -- Loop through all the effective building blocks and evaluate the results
4572 -- for given customer.
4573 -- if block_id is not null, party_id is not null or account_id is not null
4574 --
4575 PROCEDURE Evaluate_Blocks2
4576 ( p_block_id IN NUMBER,
4577 p_party_id IN NUMBER,
4578 p_acct_id IN NUMBER,
4579 p_up_total IN OUT NOCOPY NUMBER ,
4580 p_ip_total IN OUT NOCOPY NUMBER ,
4581 p_ua_total IN OUT NOCOPY NUMBER ,
4582 p_ia_total IN OUT NOCOPY NUMBER ) IS
4583
4584 blk_id NUMBER;
4585 blk_name Varchar2(240);
4586 sql_stmt Varchar2(2000);
4587 curr_code Varchar2(15);
4588 truncate_flag Varchar2(1) := 'N';
4589
4590 l_for_insert varchar2(1) := 'Y';
4591 l_for_party varchar2(1) := 'Y';
4592
4593 v_party_in_sql Number := 0;
4594 v_acct_in_sql Number := 0;
4595
4596 /* added these variable for Bug 1937730*/
4597 bparty_id Number;
4598 bacct_id Number;
4599 v_party_id Number;
4600 cid Number;
4601 val Varchar2(240) := null;
4602
4603
4604 -- cursor to run a specific block
4605 CURSOR blocks_csr IS
4606 SELECT block_id, sql_stmnt, currency_code
4607 FROM csc_prof_blocks_b
4608 WHERE block_id = p_block_id
4609 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
4610 AND Nvl(end_date_active, Sysdate));
4611
4612 -- cursor to update all results of an account
4613 /* added this condition party_id=v_party_id for Bug 1937730*/
4614 CURSOR baccount_csr IS
4615 SELECT party_id, cust_account_id
4616 FROM hz_cust_accounts
4617 WHERE party_id=v_party_id
4618 AND status = 'A' ;
4619
4620
4621 BEGIN
4622 -- Loop through the given block_id for party level
4623
4624 OPEN blocks_csr;
4625 FETCH blocks_csr INTO blk_id, sql_stmt, curr_code;
4626
4627 IF blocks_csr%found THEN
4628 CLOSE blocks_csr;
4629
4630 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
4631
4632 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4633 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4634
4635 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
4636 /* Commented this if condition for Bug1937730*/
4637 -- IF (p_acct_id IS NULL) THEN
4638 -- P_CID is null as cursor should be parsed each time.
4639 Evaluate_One_Block(truncate_flag, blk_id, p_party_id,
4640 null, sql_stmt, curr_code,
4641 p_up_total, p_ip_total, p_ua_total, p_ia_total,NULL );
4642
4643 -- check if there are still records to be inserted
4644 IF p_ip_total <> 0 THEN
4645 l_for_insert := 'Y';
4646 l_for_party := 'Y';
4647 Insert_Update_Block_Results
4648 (p_ip_total, l_for_insert, l_for_party);
4649 p_ip_total :=0;
4650 END IF;
4651 -- check if there are still records to be updated
4652 IF p_up_total <> 0 THEN
4653 l_for_insert := 'N';
4654 l_for_party := 'Y';
4655 Insert_Update_Block_Results
4656 (p_up_total, l_for_insert, l_for_party);
4657 p_up_total :=0;
4658 END IF;
4659
4660 /* added this condition for Bug 1937730*/
4661 -- ELSIF (p_acct_id IS NOT NULL) THEN
4662
4663 /* This begin, end exception is added mainly for exception handing for Bug 19800
4664 04*/
4665
4666 Begin
4667 -- P_CID is null as cursor should be parsed
4668 If (v_acct_in_sql <> 0) then -- Added for 1850508
4669 -- If acct is not present as bind variable, the sql might return wrong
4670 -- rows (party level counts) at account leve.
4671 --p_old_block_id:=null;
4672
4673 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
4674
4675 cid := dbms_sql.open_cursor;
4676 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4677 dbms_sql.define_column(cid, 1, val, 240);
4678
4679 /* changed bparty_id to p_party_id for bug 5351401 */
4680 v_party_id := p_party_id;
4681
4682 OPEN baccount_csr;
4683 LOOP
4684 FETCH baccount_csr
4685 INTO bparty_id, bacct_id;
4686 EXIT WHEN baccount_csr%notfound;
4687
4688 Evaluate_One_Block(truncate_flag, blk_id,
4689 bparty_id,bacct_id,sql_stmt, curr_code,
4690 p_up_total, p_ip_total,p_ua_total, p_ia_total
4691 ,cid);
4692 END LOOP;
4693 CLOSE baccount_csr;
4694
4695 IF (dbms_sql.is_open(cid)) THEN
4696 dbms_sql.close_cursor(cid);
4697 End if;
4698
4699 END IF; -- Added for 1850508
4700
4701 /* Evaluate_One_Block(truncate_flag, blk_id, p_party_id,
4702 p_acct_id, sql_stmt, curr_code,
4703 p_up_total, p_ip_total, p_ua_total, p_ia_total,NULL );
4704 */
4705
4706 -- check if there are still records to be inserted
4707 Exception
4708 When others then
4709
4710 IF (dbms_sql.is_open(cid)) THEN
4711 dbms_sql.close_cursor(cid);
4712 End if;
4713
4714 set_context('Evaluate_Blocks2', blk_id, bparty_id);
4715 g_error := sqlcode || ' ' || sqlerrm;
4716 set_context(NULL, g_error);
4717 End;
4718
4719 IF p_ia_total <> 0 THEN
4720 l_for_insert := 'Y';
4721 l_for_party := 'N';
4722 Insert_Update_Block_Results
4723 (p_ia_total, l_for_insert, l_for_party);
4724 p_ia_total :=0;
4725 END IF;
4726 -- check if there are still records to be updated
4727 IF p_ua_total <> 0 THEN
4728 l_for_insert := 'N';
4729 l_for_party := 'N';
4730 Insert_Update_Block_Results
4731 (p_ua_total, l_for_insert, l_for_party);
4732 p_ua_total :=0;
4733 END IF;
4734 -- END IF;
4735 -- END IF; --((v_party_in_sql <> 0) and (v_acct_in_sql <> 0))
4736 ELSE
4737 CLOSE blocks_csr;
4738 END IF;
4739
4740 EXCEPTION
4741 WHEN OTHERS THEN
4742 IF (blocks_csr%isopen) THEN
4743 CLOSE blocks_csr;
4744 END IF;
4745 set_context('Evaluate_Blocks2', blk_id, p_party_id, p_acct_id);
4746 g_error := sqlcode || ' ' || sqlerrm;
4747 set_context(NULL, g_error);
4748
4749 END Evaluate_Blocks2;
4750
4751 --
4752 -- Evaluate_Blocks4 -- Added for 1850508
4753 -- When Group Id is given but not party_id or Account_id
4754 -- Calculate for All Parties, Accounts * For all checks present in the group
4755 --
4756 PROCEDURE Evaluate_Blocks4
4757 (
4758 p_up_total IN OUT NOCOPY NUMBER ,
4759 p_ip_total IN OUT NOCOPY NUMBER ,
4760 p_ua_total IN OUT NOCOPY NUMBER ,
4761 p_ia_total IN OUT NOCOPY NUMBER ,
4762 p_group_id IN NUMBER
4763 ) IS
4764
4765 blk_id Number;
4766 blk_name Varchar2(240);
4767 sql_stmt Varchar2(2000);
4768 curr_code Varchar2(15);
4769 bparty_id Number;
4770 bacct_id Number;
4771 truncate_flag Varchar2(1):= 'N';
4772
4773 l_for_insert varchar2(1) := 'Y';
4774 l_for_party varchar2(1) := 'Y';
4775
4776 v_party_in_sql Number := 0;
4777 v_acct_in_sql Number := 0;
4778
4779 /* added this variable for Bug 1937730*/
4780
4781 v_party_id Number;
4782
4783
4784 -- cursor to run all blocks for all checks present in that group
4785 CURSOR blocks_csr IS
4786 SELECT block_id, sql_stmnt, currency_code
4787 FROM csc_prof_blocks_b a
4788 WHERE exists ( Select b.block_id
4789 From csc_prof_check_rules_b b
4790 where (b.block_id = a.block_id
4791 or b.expr_to_block_id = a.block_id)
4792 And check_id in (Select check_id from csc_prof_group_checks
4793 where group_id = p_group_id))
4794 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
4795 AND Nvl(end_date_active, Sysdate)
4796 AND block_level IN ('PARTY','ACCOUNT');
4797
4798 -- cursor to update all results of a party
4799 CURSOR bparty_csr IS
4800 SELECT party_id
4801 FROM hz_parties
4802 WHERE status='A'
4803 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
4804 -- Person, ORG added for 1850508
4805
4806 /* added this condition party_id=v_party_id for Bug 1937730*/
4807 -- cursor to update all results of an account
4808 CURSOR baccount_csr IS
4809 SELECT party_id, cust_account_id
4810 FROM hz_cust_accounts
4811 WHERE party_id=v_party_id
4812 AND status = 'A' ;
4813
4814 -- Added for 1850508
4815 cid number;
4816 val VARCHAR2(240) := null;
4817
4818 BEGIN
4819 -- Loop through blocks for party level
4820 BEGIN
4821 OPEN blocks_csr;
4822 LOOP
4823 FETCH blocks_csr INTO blk_id, sql_stmt, curr_code;
4824 EXIT WHEN blocks_csr%notfound;
4825
4826 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
4827 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4828 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4829
4830 /* This begin, end exception is added mainly for exception handing for Bug 19800
4831 04*/
4832
4833 Begin
4834
4835 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
4836 -- Loop through per party
4837 -- Added for 1850508
4838 -- dbms_output.put_line('Evaluate blocks4 Opening and Parsing.PARTY Level.'||to_char(blk_id));
4839
4840 cid := dbms_sql.open_cursor;
4841 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4842 dbms_sql.define_column(cid, 1, val, 240);
4843
4844 OPEN bparty_csr;
4845 LOOP
4846 FETCH bparty_csr INTO bparty_id;
4847 EXIT WHEN bparty_csr%notfound;
4848
4849 Evaluate_One_Block(truncate_flag, blk_id, bparty_id,
4850 null, sql_stmt, curr_code, p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
4851
4852 /* added this condition for Bug 1937730*/
4853 v_party_id:=bparty_id;
4854
4855 If (v_acct_in_sql <> 0) then -- Added for 1850508
4856 -- If acct is not present as bind variable, the sql might return wrong
4857 -- rows (party level counts) at account leve.
4858 --p_old_block_id:=null;
4859
4860 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
4861
4862
4863 OPEN baccount_csr;
4864 LOOP
4865 FETCH baccount_csr
4866 INTO bparty_id, bacct_id;
4867 EXIT WHEN baccount_csr%notfound;
4868
4869 Evaluate_One_Block(truncate_flag, blk_id,
4870 bparty_id,bacct_id,sql_stmt, curr_code,
4871 p_up_total, p_ip_total,p_ua_total,
4872 p_ia_total,cid);
4873 END LOOP;
4874 CLOSE baccount_csr;
4875
4876 END IF; -- Added for 1850508
4877
4878 END LOOP;
4879 CLOSE bparty_csr;
4880 IF (dbms_sql.is_open(cid)) THEN
4881 dbms_sql.close_cursor(cid);
4882 end if;
4883 -- END IF;
4884 Exception
4885
4886 When others then
4887
4888 IF (dbms_sql.is_open(cid)) THEN
4889 dbms_sql.close_cursor(cid);
4890 end if;
4891 set_context('Evaluate_Blocks4', blk_id, bparty_id);
4892 g_error := sqlcode || ' ' || sqlerrm;
4893 set_context(NULL, g_error);
4894 End;
4895
4896 END LOOP;
4897 CLOSE blocks_csr;
4898
4899 -- check if there are still records to be inserted
4900 IF p_ip_total <> 0 THEN
4901 l_for_insert := 'Y';
4902 l_for_party := 'Y';
4903 Insert_Update_Block_Results
4904 (p_ip_total, l_for_insert, l_for_party);
4905 p_ip_total :=0;
4906 END IF;
4907 -- check if there are still records to be updated
4908 IF p_up_total <> 0 THEN
4909 l_for_insert := 'N';
4910 l_for_party := 'Y';
4911 Insert_Update_Block_Results
4912 (p_up_total, l_for_insert, l_for_party);
4913 p_up_total :=0;
4914 END IF;
4915
4916
4917 EXCEPTION
4918 WHEN OTHERS THEN
4919 IF (blocks_csr%isopen) THEN
4920 CLOSE blocks_csr;
4921 END IF;
4922 IF (bparty_csr%isopen) THEN
4923 CLOSE bparty_csr;
4924 END IF;
4925
4926 IF (baccount_csr%isopen) THEN
4927 CLOSE baccount_csr;
4928 END IF;
4929
4930 IF (dbms_sql.is_open(cid)) THEN
4931 dbms_sql.close_cursor(cid);
4932 end if;
4933 set_context('Evaluate_Blocks4', blk_id, bparty_id);
4934 g_error := sqlcode || ' ' || sqlerrm;
4935 set_context(NULL, g_error);
4936 --set_context(NULL, Sqlerrm);
4937 table_delete;
4938 RAISE;
4939 END;
4940
4941 -- check if there are still records to be inserted
4942 IF p_ia_total <> 0 THEN
4943 l_for_insert := 'Y';
4944 l_for_party := 'N';
4945
4946 Insert_Update_Block_Results
4947 (p_ia_total, l_for_insert, l_for_party);
4948 p_ia_total :=0;
4949 END IF;
4950
4951 -- check if there are still records to be updated
4952 IF p_ua_total <> 0 THEN
4953 l_for_insert := 'N';
4954 l_for_party := 'N';
4955 Insert_Update_Block_Results
4956 (p_ua_total, l_for_insert, l_for_party);
4957 p_ua_total :=0;
4958 END IF;
4959
4960 END Evaluate_Blocks4;
4961
4962 -- This procedure evaluates the blocks
4963 -- for which the batch sql statement is NULL and select_type is 'B' (Variable)
4964 -- Group_id is not null
4965 PROCEDURE Evaluate_Blocks4_No_Batch
4966 (
4967 p_up_total IN OUT NOCOPY NUMBER ,
4968 p_ip_total IN OUT NOCOPY NUMBER ,
4969 p_ua_total IN OUT NOCOPY NUMBER ,
4970 p_ia_total IN OUT NOCOPY NUMBER ,
4971 p_group_id IN NUMBER
4972 ) IS
4973
4974 blk_id Number;
4975 blk_name Varchar2(240);
4976 sql_stmt Varchar2(2000);
4977 curr_code Varchar2(15);
4978 bparty_id Number;
4979 bacct_id Number;
4980 truncate_flag Varchar2(1):= 'N';
4981
4982 l_for_insert varchar2(1) := 'Y';
4983 l_for_party varchar2(1) := 'Y';
4984
4985 v_party_in_sql Number := 0;
4986 v_acct_in_sql Number := 0;
4987 v_party_id Number;
4988
4989 -- cursor to run all blocks for all checks present in that group
4990 CURSOR blocks_csr IS
4991 SELECT block_id, sql_stmnt, currency_code
4992 FROM csc_prof_blocks_b a
4993 WHERE EXISTS ( SELECT null
4994 FROM csc_prof_checks_b b
4995 WHERE b.select_block_id = a.block_id
4996 AND b.select_type = 'B'
4997 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
4998 WHERE group_id = p_group_id))
4999 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5000 AND Nvl(end_date_active, SYSDATE)
5001 AND batch_sql_stmnt IS NULL;
5002
5003 -- cursor to update all results of a party
5004 CURSOR bparty_csr IS
5005 SELECT party_id
5006 FROM hz_parties
5007 WHERE status='A'
5008 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
5009
5010 -- cursor to update all results of an account
5011 CURSOR baccount_csr IS
5012 SELECT party_id, cust_account_id
5013 FROM hz_cust_accounts
5014 WHERE party_id=v_party_id
5015 AND status = 'A' ;
5016
5017 cid number;
5018 val VARCHAR2(240) := null;
5019
5020 BEGIN
5021 -- Loop through blocks for party level
5022 BEGIN
5023 OPEN blocks_csr;
5024 LOOP
5025 FETCH blocks_csr INTO blk_id, sql_stmt, curr_code;
5026 EXIT WHEN blocks_csr%notfound;
5027
5028 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
5029 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
5030
5031 Begin
5032 cid := dbms_sql.open_cursor;
5033 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
5034 dbms_sql.define_column(cid, 1, val, 240);
5035
5036 OPEN bparty_csr;
5037 LOOP
5038 FETCH bparty_csr INTO bparty_id;
5039 EXIT WHEN bparty_csr%notfound;
5040
5041 Evaluate_One_Block(truncate_flag, blk_id, bparty_id,
5042 null, sql_stmt, curr_code, p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
5043
5044 v_party_id:=bparty_id;
5045
5046 If (v_acct_in_sql <> 0) then
5047 OPEN baccount_csr;
5048 LOOP
5049 FETCH baccount_csr
5050 INTO bparty_id, bacct_id;
5051 EXIT WHEN baccount_csr%notfound;
5052
5053 Evaluate_One_Block(truncate_flag, blk_id,
5054 bparty_id,bacct_id,sql_stmt, curr_code,
5055 p_up_total, p_ip_total,p_ua_total,
5056 p_ia_total,cid);
5057 END LOOP;
5058 CLOSE baccount_csr;
5059
5060 END IF; -- Added for 1850508
5061 END LOOP;
5062 CLOSE bparty_csr;
5063
5064 IF (dbms_sql.is_open(cid)) THEN
5065 dbms_sql.close_cursor(cid);
5066 end if;
5067
5068 Exception
5069 When others then
5070 IF (dbms_sql.is_open(cid)) THEN
5071 dbms_sql.close_cursor(cid);
5072 end if;
5073 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
5074 g_error := sqlcode || ' ' || sqlerrm;
5075 set_context(NULL, g_error);
5076 End;
5077
5078 END LOOP;
5079 CLOSE blocks_csr;
5080
5081 -- check if there are still records to be inserted
5082 IF p_ip_total <> 0 THEN
5083 l_for_insert := 'Y';
5084 l_for_party := 'Y';
5085 Insert_Update_Block_Results
5086 (p_ip_total, l_for_insert, l_for_party);
5087 p_ip_total :=0;
5088 END IF;
5089 -- check if there are still records to be updated
5090 IF p_up_total <> 0 THEN
5091 l_for_insert := 'N';
5092 l_for_party := 'Y';
5093 Insert_Update_Block_Results
5094 (p_up_total, l_for_insert, l_for_party);
5095 p_up_total :=0;
5096 END IF;
5097
5098 EXCEPTION
5099 WHEN OTHERS THEN
5100 IF (blocks_csr%isopen) THEN
5101 CLOSE blocks_csr;
5102 END IF;
5103 IF (bparty_csr%isopen) THEN
5104 CLOSE bparty_csr;
5105 END IF;
5106
5107 IF (baccount_csr%isopen) THEN
5108 CLOSE baccount_csr;
5109 END IF;
5110
5111 IF (dbms_sql.is_open(cid)) THEN
5112 dbms_sql.close_cursor(cid);
5113 end if;
5114 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
5115 g_error := sqlcode || ' ' || sqlerrm;
5116 set_context(NULL, g_error);
5117 table_delete;
5118 RAISE;
5119 END;
5120
5121 -- check if there are still records to be inserted
5122 IF p_ia_total <> 0 THEN
5123 l_for_insert := 'Y';
5124 l_for_party := 'N';
5125
5126 Insert_Update_Block_Results
5127 (p_ia_total, l_for_insert, l_for_party);
5128 p_ia_total :=0;
5129 END IF;
5130
5131 -- check if there are still records to be updated
5132 IF p_ua_total <> 0 THEN
5133 l_for_insert := 'N';
5134 l_for_party := 'N';
5135 Insert_Update_Block_Results
5136 (p_ua_total, l_for_insert, l_for_party);
5137 p_ua_total :=0;
5138 END IF;
5139
5140 END Evaluate_Blocks4_No_Batch;
5141
5142 PROCEDURE Evaluate_Blocks5
5143 ( p_block_id IN NUMBER,
5144 p_party_id IN NUMBER,
5145 p_up_total IN OUT NOCOPY NUMBER ,
5146 p_ip_total IN OUT NOCOPY NUMBER ,
5147 p_ua_total IN OUT NOCOPY NUMBER ,
5148 p_ia_total IN OUT NOCOPY NUMBER ) IS
5149
5150 v_blk_id NUMBER;
5151 v_blk_name Varchar2(240);
5152 v_sql_stmt Varchar2(2000);
5153 v_curr_code Varchar2(15);
5154 v_truncate_flag Varchar2(1) := 'N';
5155
5156 l_for_insert varchar2(1) := 'Y';
5157 l_for_party varchar2(1) := 'Y';
5158
5159 v_party_in_sql Number := 0;
5160 v_acct_in_sql Number := 0;
5161
5162 bparty_id Number;
5163 bacct_id Number;
5164 v_party_id Number;
5165 cid Number;
5166 val Varchar2(240) := null;
5167
5168
5169 -- cursor to run a specific block
5170 CURSOR blocks_csr(c_block_id IN NUMBER) IS
5171 SELECT block_id, sql_stmnt, currency_code
5172 FROM csc_prof_blocks_b
5173 WHERE block_id = c_block_id
5174 AND block_level in( 'CONTACT','EMPLOYEE')
5175 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5176 AND Nvl(end_date_active, Sysdate));
5177
5178 BEGIN
5179 -- Loop through the given block_id for party level
5180 OPEN blocks_csr(p_block_id);
5181 FETCH blocks_csr INTO v_blk_id,v_sql_stmt,v_curr_code;
5182 IF blocks_csr%found THEN
5183 Evaluate_One_Block(v_truncate_flag, v_blk_id, p_party_id,
5184 null, v_sql_stmt, v_curr_code, p_up_total, p_ip_total, p_ua_total, p_ia_total,NULL );
5185
5186 -- check if there are still records to be inserted
5187 IF p_ip_total <> 0 THEN
5188 l_for_insert := 'Y';
5189 l_for_party := 'Y';
5190 Insert_Update_Block_Results
5191 (p_ip_total, l_for_insert, l_for_party);
5192 p_ip_total :=0;
5193 END IF;
5194 -- check if there are still records to be updated
5195 IF p_up_total <> 0 THEN
5196 l_for_insert := 'N';
5197 l_for_party := 'Y';
5198 Insert_Update_Block_Results
5199 (p_up_total, l_for_insert, l_for_party);
5200 p_up_total :=0;
5201 END IF;
5202 END IF;
5203 CLOSE blocks_csr;
5204 EXCEPTION
5205 WHEN OTHERS THEN
5206 IF (blocks_csr%isopen) THEN
5207 CLOSE blocks_csr;
5208 END IF;
5209 set_context('Evaluate_Blocks5', v_blk_id, p_party_id, null);
5210 g_error := sqlcode || ' ' || sqlerrm;
5211 set_context(NULL, g_error);
5212 END Evaluate_Blocks5;
5213
5214 PROCEDURE Evaluate_Blocks_Rel
5215 (
5216 p_up_total IN OUT NOCOPY NUMBER ,
5217 p_ip_total IN OUT NOCOPY NUMBER ,
5218 p_ua_total IN OUT NOCOPY NUMBER ,
5219 p_ia_total IN OUT NOCOPY NUMBER ,
5220 p_group_id IN NUMBER DEFAULT NULL,
5221 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
5222 p_rule_only IN VARCHAR2 DEFAULT NULL
5223 ) IS
5224
5225
5226 truncate_flag Varchar2(1):= 'N';
5227
5228 l_for_insert varchar2(1) := 'Y';
5229 l_for_party varchar2(1) := 'Y';
5230
5231 v_party_in_sql Number := 0;
5232 v_acct_in_sql Number := 0;
5233
5234 v_party_id Number;
5235 v_block_id Number;
5236
5237 v_block_curvar blocks_curtype;
5238 v_rec_var r_blk_rectype;
5239
5240 CURSOR relparty_csr IS
5241 SELECT party_id
5242 FROM hz_parties
5243 WHERE status='A'
5244 AND PARTY_TYPE = 'PARTY_RELATIONSHIP';
5245
5246 cid number;
5247 val VARCHAR2(240) := null;
5248
5249 BEGIN
5250 BEGIN
5251 IF p_group_id IS NULL THEN
5252 IF p_no_batch_sql = 'Y' THEN
5253 OPEN v_block_curvar FOR
5254 SELECT block_id, sql_stmnt, currency_code
5255 FROM csc_prof_blocks_b a
5256 WHERE EXISTS ( SELECT null
5257 FROM csc_prof_checks_b b
5258 WHERE b.select_block_id = a.block_id
5259 AND b.select_type = 'B'
5260 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
5261 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5262 AND Nvl(end_date_active, SYSDATE)
5263 AND batch_sql_stmnt IS NULL
5264 AND block_level = 'CONTACT';
5265 ELSIF p_rule_only = 'Y' THEN
5266 OPEN v_block_curvar FOR
5267 SELECT block_id, sql_stmnt, currency_code
5268 FROM csc_prof_blocks_b a
5269 WHERE exists ( SELECT b.block_id
5270 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
5271 WHERE (b.block_id = a.block_id
5272 or b.expr_to_block_id = a.block_id)
5273 AND c.select_type = 'T'
5274 AND b.check_id = c.check_id)
5275 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5276 AND Nvl(end_date_active, Sysdate)
5277 AND block_level ='CONTACT';
5278 ELSE
5279 OPEN v_block_curvar FOR
5280 SELECT block_id, sql_stmnt, currency_code
5281 FROM csc_prof_blocks_b a
5282 WHERE exists ( Select b.block_id
5283 From csc_prof_check_rules_b b
5284 where b.block_id = a.block_id
5285 or b.expr_to_block_id = a.block_id)
5286 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5287 AND Nvl(end_date_active, Sysdate)
5288 AND block_level ='CONTACT';
5289 END IF;
5290 ELSE
5291 IF p_no_batch_sql = 'Y' THEN
5292 OPEN v_block_curvar FOR
5293 SELECT block_id, sql_stmnt, currency_code
5294 FROM csc_prof_blocks_b a
5295 WHERE EXISTS ( SELECT null
5296 FROM csc_prof_checks_b b
5297 WHERE b.select_block_id = a.block_id
5298 AND b.select_type = 'B'
5299 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
5300 WHERE group_id = p_group_id))
5301 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5302 AND Nvl(end_date_active, SYSDATE)
5303 AND batch_sql_stmnt IS NULL
5304 AND block_level = 'CONTACT';
5305 ELSIF p_rule_only = 'Y' THEN
5306 OPEN v_block_curvar FOR
5307 SELECT block_id, sql_stmnt, currency_code
5308 FROM csc_prof_blocks_b a
5309 WHERE EXISTS ( SELECT b.block_id
5310 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
5311 WHERE (b.block_id = a.block_id
5312 OR b.expr_to_block_id = a.block_id)
5313 AND c.select_type = 'T'
5314 AND b.check_id = c.check_id
5315 AND b.check_id IN (SELECT check_id from csc_prof_group_checks
5316 WHERE group_id = p_group_id))
5317 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5318 AND Nvl(end_date_active, Sysdate)
5319 AND block_level = 'CONTACT';
5320 ELSE
5321 OPEN v_block_curvar FOR
5322 SELECT block_id, sql_stmnt, currency_code
5323 FROM csc_prof_blocks_b a
5324 WHERE EXISTS ( SELECT b.block_id
5325 FROM csc_prof_check_rules_b b
5326 WHERE (b.block_id = a.block_id
5327 or b.expr_to_block_id = a.block_id)
5328 AND check_id IN (Select check_id from csc_prof_group_checks
5329 where group_id = p_group_id))
5330 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5331 AND Nvl(end_date_active, Sysdate)
5332 AND block_level ='CONTACT';
5333 END IF;
5334
5335 END IF;
5336
5337 LOOP
5338 FETCH v_block_curvar INTO v_rec_var;
5339 EXIT WHEN v_block_curvar%notfound;
5340 v_party_in_sql := INSTR(lower(v_rec_var.sql_stmnt),':party_id',1);
5341 v_block_id := v_rec_var.block_id;
5342 BEGIN
5343 cid := dbms_sql.open_cursor;
5344 dbms_sql.parse(cid, v_rec_var.sql_stmnt, dbms_sql.native);
5345 dbms_sql.define_column(cid, 1, val, 240);
5346
5347 OPEN relparty_csr;
5348 LOOP
5349 FETCH relparty_csr INTO v_party_id;
5350 EXIT WHEN relparty_csr%notfound;
5351
5352 Evaluate_One_Block(truncate_flag, v_block_id, v_party_id,
5353 null, v_rec_var.sql_stmnt, v_rec_var.currency,
5354 p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
5355 END LOOP;
5356 CLOSE relparty_csr;
5357
5358 IF (dbms_sql.is_open(cid)) THEN
5359 dbms_sql.close_cursor(cid);
5360 END IF;
5361
5362 EXCEPTION
5363 WHEN others THEN
5364 IF (dbms_sql.is_open(cid)) THEN
5365 dbms_sql.close_cursor(cid);
5366 END IF;
5367
5368 set_context('Evaluate_Blocks_Rel', v_block_id, v_party_id);
5369 g_error := sqlcode || ' ' || sqlerrm;
5370 set_context(NULL, g_error);
5371 END;
5372
5373 END LOOP;
5374 CLOSE v_block_curvar;
5375
5376 -- check if there are still records to be inserted
5377 IF p_ip_total <> 0 THEN
5378 l_for_insert := 'Y';
5379 l_for_party := 'Y';
5380 Insert_Update_Block_Results
5381 (p_ip_total, l_for_insert, l_for_party);
5382 p_ip_total :=0;
5383 END IF;
5384 -- check if there are still records to be updated
5385 IF p_up_total <> 0 THEN
5386 l_for_insert := 'N';
5387 l_for_party := 'Y';
5388 Insert_Update_Block_Results
5389 (p_up_total, l_for_insert, l_for_party);
5390 p_up_total :=0;
5391 END IF;
5392
5393
5394 EXCEPTION
5395 WHEN OTHERS THEN
5396 IF (v_block_curvar%isopen) THEN
5397 CLOSE v_block_curvar;
5398 END IF;
5399 IF (relparty_csr%isopen) THEN
5400 CLOSE relparty_csr;
5401 END IF;
5402
5403 set_context('Evaluate_Blocks_Rel', v_block_id, v_party_id);
5404 g_error := sqlcode || ' ' || sqlerrm;
5405 set_context(NULL, g_error);
5406 table_delete;
5407 RAISE;
5408 END;
5409
5410 END Evaluate_Blocks_Rel;
5411
5412 PROCEDURE Evaluate_Checks_Rel
5413 ( errbuf OUT NOCOPY VARCHAR2,
5414 retcode OUT NOCOPY NUMBER,
5415 p_group_id IN NUMBER DEFAULT NULL,
5416 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
5417 p_rule_only IN VARCHAR2 DEFAULT NULL ) IS
5418
5419 chk_id Number;
5420 chk_name Varchar2(240);
5421 cparty_id Number;
5422 sel_type Varchar2(3);
5423 sel_blk_id Number;
5424 data_type Varchar2(90);
5425 fmt_mask Varchar2(90);
5426 rule Varchar2(32767);
5427
5428 chk_u_l_flag Varchar2(3);
5429 Thd_grade Varchar2(9);
5430
5431 truncate_flag Varchar2(1) := 'N';
5432 acct_flag Varchar2(1);
5433
5434 blk_id Number := null;
5435 blk_name Varchar2(240) := null;
5436 sql_stmt Varchar2(2000) := null;
5437 curr_code Varchar2(15) := null;
5438
5439 v_party_in_sql Number := 0;
5440
5441 l_for_insert varchar2(1) := 'Y';
5442 l_for_party varchar2(1) := 'Y';
5443 l_up_total Number := 0;
5444 l_ip_total Number := 0;
5445 l_ua_total Number := 0;
5446 l_ia_total Number := 0;
5447
5448 v_party_id Number;
5449 v_check_level Varchar2(10);
5450
5451 v_checks_curvar checks_curtype;
5452 v_rec_var r_chk_rectype;
5453
5454 CURSOR block_csr IS
5455 SELECT block_id, sql_stmnt, currency_code
5456 FROM csc_prof_blocks_b a
5457 WHERE a.block_id = sel_blk_id;
5458
5459 CURSOR crelparty_csr IS
5460 SELECT party_id
5461 FROM hz_parties
5462 WHERE status='A'
5463 AND party_type = 'PARTY_RELATIONSHIP';
5464
5465 cid number;
5466 val VARCHAR2(240) := null;
5467
5468 BEGIN
5469 l_ip_total := 0;
5470 l_up_total := 0;
5471 l_ia_total := 0;
5472 l_ua_total := 0;
5473 IF p_group_id IS NULL THEN
5474 IF p_no_batch_sql = 'Y' THEN
5475 OPEN v_checks_curvar FOR
5476 SELECT check_id, select_type, select_block_id,
5477 data_type, format_mask, check_upper_lower_flag,
5478 threshold_grade, check_level
5479 FROM csc_prof_checks_b a
5480 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks)
5481 AND select_type = 'B'
5482 AND check_level = 'CONTACT'
5483 AND EXISTS (SELECT null
5484 FROM csc_prof_blocks_b b
5485 WHERE a.select_block_id = b.block_id
5486 AND b.batch_sql_stmnt IS NULL)
5487 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5488 AND Nvl(end_date_active, SYSDATE);
5489 ELSIF p_rule_only = 'Y' THEN
5490 OPEN v_checks_curvar FOR
5491 SELECT check_id, select_type, select_block_id,
5492 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5493 check_level
5494 FROM csc_prof_checks_b
5495 WHERE check_level ='CONTACT'
5496 AND select_type = 'T'
5497 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5498 AND Nvl(end_date_active, Sysdate);
5499 ELSE
5500 OPEN v_checks_curvar FOR
5501 SELECT check_id, select_type, select_block_id,
5502 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5503 check_level
5504 FROM csc_prof_checks_b
5505 WHERE check_level ='CONTACT'
5506 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5507 AND Nvl(end_date_active, Sysdate);
5508 END IF;
5509 ELSE
5510 IF p_no_batch_sql = 'Y' THEN
5511 OPEN v_checks_curvar FOR
5512 SELECT check_id, select_type, select_block_id,
5513 data_type, format_mask,check_upper_lower_flag,
5514 threshold_grade, check_level
5515 FROM csc_prof_checks_b a
5516 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
5517 WHERE group_id = p_group_id)
5518 AND select_type = 'B'
5519 AND check_level = 'CONTACT'
5520 AND EXISTS (SELECT null
5521 FROM csc_prof_blocks_b b
5522 WHERE a.select_block_id = b.block_id
5523 AND b.batch_sql_stmnt IS NULL)
5524 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5525 AND Nvl(end_date_active, SYSDATE);
5526 ELSIF p_rule_only = 'Y' THEN
5527 OPEN v_checks_curvar FOR
5528 SELECT check_id, select_type, select_block_id,
5529 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5530 check_level
5531 FROM csc_prof_checks_b
5532 WHERE check_level = 'CONTACT'
5533 AND select_type = 'T'
5534 AND check_id in (select check_id from csc_prof_group_checks
5535 where group_id = p_group_id)
5536 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5537 AND Nvl(end_date_active, Sysdate);
5538 ELSE
5539 OPEN v_checks_curvar FOR
5540 SELECT check_id, select_type, select_block_id,
5541 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5542 check_level
5543 FROM csc_prof_checks_b
5544 WHERE check_level = 'CONTACT'
5545 AND check_id in (select check_id from csc_prof_group_checks
5546 where group_id = p_group_id)
5547 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5548 AND Nvl(end_date_active, Sysdate);
5549 END IF;
5550 END IF;
5551 LOOP
5552 FETCH v_checks_curvar INTO v_rec_var;
5553 sel_type := v_rec_var.select_type;
5554 chk_id := v_rec_var.check_id;
5555 sel_blk_id := v_rec_var.select_block_id;
5556 v_check_level:= v_rec_var.check_level;
5557 data_type:=v_rec_var.data_type;
5558 fmt_mask:=v_rec_var.format_mask;
5559 chk_u_l_flag:= v_rec_var.check_upper_lower_flag;
5560 thd_grade := v_rec_var.threshold_grade;
5561
5562 EXIT WHEN v_checks_curvar%notfound;
5563 IF (sel_type = 'T') THEN
5564 build_rule('N',chk_id,v_check_level, rule);
5565 ELSIF (sel_type = 'B') THEN
5566 Open block_csr;
5567 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
5568 Close block_csr;
5569
5570 IF sql_stmt IS NOT NULL Then
5571 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
5572 Else
5573 v_party_in_sql := 0;
5574 End if;
5575 END IF;
5576
5577 BEGIN
5578 IF ((sel_type='B' ) OR (sel_type='T') ) THEN
5579 cid := dbms_sql.open_cursor;
5580 IF (sel_type = 'B') THEN
5581 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
5582 ELSIF (sel_type = 'T') then
5583 dbms_sql.parse(cid, rule, dbms_sql.native);
5584 END IF;
5585 dbms_sql.define_column(cid,1,val,240);
5586
5587 OPEN crelparty_csr;
5588 LOOP
5589 FETCH crelparty_csr INTO cparty_id;
5590 EXIT WHEN crelparty_csr%notfound;
5591 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
5592 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
5593 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
5594 END LOOP;
5595 CLOSE crelparty_csr;
5596 IF (dbms_sql.is_open(cid)) THEN
5597 dbms_sql.close_cursor(cid);
5598 END IF;
5599 END IF;
5600 Exception
5601 When others then
5602 IF (dbms_sql.is_open(cid)) THEN
5603 dbms_sql.close_cursor(cid);
5604 end if;
5605 set_context('Evaluate_Checks_Rel',
5606 'chk_id=>'||to_char(chk_id),
5607 'party_id=>'||to_char(cparty_id),
5608 'account_id=>'||NULL);
5609 g_error := sqlcode || ' ' || sqlerrm;
5610 set_context(NULL, g_error);
5611 End;
5612
5613 END LOOP;
5614 CLOSE v_checks_curvar;
5615
5616
5617 -- check if there are still records to be inserted
5618 IF l_ip_total <> 0 THEN
5619 l_for_insert := 'Y';
5620 l_for_party := 'Y';
5621 Insert_Update_Check_Results
5622 (l_ip_total, l_for_insert, l_for_party);
5623 l_ip_total :=0;
5624 END IF;
5625 -- check if there are still records to be updated
5626 IF l_up_total <> 0 THEN
5627 l_for_insert := 'N';
5628 l_for_party := 'Y';
5629 Insert_Update_Check_Results
5630 (l_up_total, l_for_insert, l_for_party);
5631 l_up_total :=0;
5632 END IF;
5633
5634 COMMIT;
5635
5636 -- Return 0 for successful completion, 1 for warnings, 2 for error
5637 IF (error_flag) THEN
5638 errbuf := Sqlerrm;
5639 retcode := 2;
5640 ELSIF (warning_msg <> '') THEN
5641 errbuf := warning_msg;
5642 retcode := 1;
5643 ELSE
5644 errbuf := '';
5645 retcode := 0;
5646 END IF;
5647
5648 IF (debug) THEN
5649 fnd_file.close;
5650 END IF;
5651
5652 EXCEPTION
5653 WHEN OTHERS THEN
5654 ROLLBACK;
5655 IF (v_checks_curvar%isopen) THEN
5656 CLOSE v_checks_curvar;
5657 END IF;
5658 IF (crelparty_csr%isopen) THEN
5659 CLOSE crelparty_csr;
5660 END IF;
5661
5662 IF (debug) THEN
5663 fnd_file.close;
5664 END IF;
5665 errbuf := Sqlerrm;
5666 retcode := 2;
5667
5668 g_error := sqlcode || ' ' || sqlerrm;
5669 fnd_file.put_line(fnd_file.log , g_error);
5670
5671 END Evaluate_Checks_Rel;
5672
5673 /* R12 Employee HelpDesk Modifications */
5674
5675 PROCEDURE Evaluate_Blocks_Emp
5676 (
5677 p_up_total IN OUT NOCOPY NUMBER ,
5678 p_ip_total IN OUT NOCOPY NUMBER ,
5679 p_ua_total IN OUT NOCOPY NUMBER ,
5680 p_ia_total IN OUT NOCOPY NUMBER ,
5681 p_group_id IN NUMBER DEFAULT NULL,
5682 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
5683 p_rule_only IN VARCHAR2 DEFAULT NULL
5684 ) IS
5685
5686
5687 truncate_flag Varchar2(1):= 'N';
5688
5689 l_for_insert varchar2(1) := 'Y';
5690 l_for_party varchar2(1) := 'Y';
5691
5692 v_employee_in_sql Number := 0;
5693
5694
5695 v_party_id Number;
5696 v_block_id Number;
5697
5698 v_block_curvar blocks_curtype;
5699 v_rec_var r_blk_rectype;
5700
5701 CURSOR employee_csr IS
5702 SELECT person_id
5703 FROM per_workforce_current_x;
5704
5705
5706 cid number;
5707 val VARCHAR2(240) := null;
5708
5709 BEGIN
5710 BEGIN
5711 IF p_group_id IS NULL THEN
5712 IF p_no_batch_sql = 'Y' THEN
5713 OPEN v_block_curvar FOR
5714 SELECT block_id, sql_stmnt, currency_code
5715 FROM csc_prof_blocks_b a
5716 WHERE EXISTS ( SELECT null
5717 FROM csc_prof_checks_b b
5718 WHERE b.select_block_id = a.block_id
5719 AND b.select_type = 'B'
5720 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
5721 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5722 AND Nvl(end_date_active, SYSDATE)
5723 AND batch_sql_stmnt IS NULL
5724 AND block_level = 'EMPLOYEE';
5725 ELSIF p_rule_only = 'Y' THEN
5726 OPEN v_block_curvar FOR
5727 SELECT block_id, sql_stmnt, currency_code
5728 FROM csc_prof_blocks_b a
5729 WHERE exists ( SELECT b.block_id
5730 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
5731 WHERE (b.block_id = a.block_id
5732 or b.expr_to_block_id = a.block_id)
5733 AND c.select_type = 'T'
5734 AND b.check_id = c.check_id)
5735 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5736 AND Nvl(end_date_active, Sysdate)
5737 AND block_level ='EMPLOYEE';
5738 ELSE
5739 OPEN v_block_curvar FOR
5740 SELECT block_id, sql_stmnt, currency_code
5741 FROM csc_prof_blocks_b a
5742 WHERE exists ( Select b.block_id
5743 From csc_prof_check_rules_b b
5744 where b.block_id = a.block_id
5745 or b.expr_to_block_id = a.block_id)
5746 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5747 AND Nvl(end_date_active, Sysdate)
5748 AND block_level ='EMPLOYEE';
5749 END IF;
5750 ELSE
5751 IF p_no_batch_sql = 'Y' THEN
5752 OPEN v_block_curvar FOR
5753 SELECT block_id, sql_stmnt, currency_code
5754 FROM csc_prof_blocks_b a
5755 WHERE EXISTS ( SELECT null
5756 FROM csc_prof_checks_b b
5757 WHERE b.select_block_id = a.block_id
5758 AND b.select_type = 'B'
5759 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
5760 WHERE group_id = p_group_id))
5761 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5762 AND Nvl(end_date_active, SYSDATE)
5763 AND batch_sql_stmnt IS NULL
5764 AND block_level = 'EMPLOYEE';
5765 ELSIF p_rule_only = 'Y' THEN
5766 OPEN v_block_curvar FOR
5767 SELECT block_id, sql_stmnt, currency_code
5768 FROM csc_prof_blocks_b a
5769 WHERE EXISTS ( SELECT b.block_id
5770 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
5771 WHERE (b.block_id = a.block_id
5772 OR b.expr_to_block_id = a.block_id)
5773 AND c.select_type = 'T'
5774 AND b.check_id = c.check_id
5775 AND b.check_id IN (SELECT check_id from csc_prof_group_checks
5776 WHERE group_id = p_group_id))
5777 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5778 AND Nvl(end_date_active, Sysdate)
5779 AND block_level = 'EMPLOYEE';
5780 ELSE
5781 OPEN v_block_curvar FOR
5782 SELECT block_id, sql_stmnt, currency_code
5783 FROM csc_prof_blocks_b a
5784 WHERE EXISTS ( SELECT b.block_id
5785 FROM csc_prof_check_rules_b b
5786 WHERE (b.block_id = a.block_id
5787 or b.expr_to_block_id = a.block_id)
5788 AND check_id IN (Select check_id from csc_prof_group_checks
5789 where group_id = p_group_id))
5790 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5791 AND Nvl(end_date_active, Sysdate)
5792 AND block_level ='EMPLOYEE';
5793 END IF;
5794
5795 END IF;
5796
5797 LOOP
5798 FETCH v_block_curvar INTO v_rec_var;
5799 EXIT WHEN v_block_curvar%notfound;
5800 v_employee_in_sql := INSTR(lower(v_rec_var.sql_stmnt),':employee_id',1);
5801 v_block_id := v_rec_var.block_id;
5802 BEGIN
5803 cid := dbms_sql.open_cursor;
5804 dbms_sql.parse(cid, v_rec_var.sql_stmnt, dbms_sql.native);
5805 dbms_sql.define_column(cid, 1, val, 240);
5806
5807 OPEN employee_csr;
5808 LOOP
5809 FETCH employee_csr INTO v_party_id;
5810 EXIT WHEN employee_csr%notfound;
5811
5812 Evaluate_One_Block(truncate_flag, v_block_id, v_party_id,
5813 null, v_rec_var.sql_stmnt, v_rec_var.currency,
5814 p_up_total, p_ip_total, p_ua_total, p_ia_total,cid);
5815 END LOOP;
5816 CLOSE employee_csr;
5817
5818 IF (dbms_sql.is_open(cid)) THEN
5819 dbms_sql.close_cursor(cid);
5820 END IF;
5821
5822 EXCEPTION
5823 WHEN others THEN
5824 IF (dbms_sql.is_open(cid)) THEN
5825 dbms_sql.close_cursor(cid);
5826 END IF;
5827
5828 set_context('Evaluate_Blocks_Emp', v_block_id, v_party_id);
5829 g_error := sqlcode || ' ' || sqlerrm;
5830 set_context(NULL, g_error);
5831 END;
5832
5833 END LOOP;
5834 CLOSE v_block_curvar;
5835
5836 -- check if there are still records to be inserted
5837 IF p_ip_total <> 0 THEN
5838 l_for_insert := 'Y';
5839 l_for_party := 'Y';
5840 Insert_Update_Block_Results
5841 (p_ip_total, l_for_insert, l_for_party);
5842 p_ip_total :=0;
5843 END IF;
5844 -- check if there are still records to be updated
5845 IF p_up_total <> 0 THEN
5846 l_for_insert := 'N';
5847 l_for_party := 'Y';
5848 Insert_Update_Block_Results
5849 (p_up_total, l_for_insert, l_for_party);
5850 p_up_total :=0;
5851 END IF;
5852
5853
5854 EXCEPTION
5855 WHEN OTHERS THEN
5856 IF (v_block_curvar%isopen) THEN
5857 CLOSE v_block_curvar;
5858 END IF;
5859 IF (employee_csr%isopen) THEN
5860 CLOSE employee_csr;
5861 END IF;
5862
5863 set_context('Evaluate_Blocks_Emp', v_block_id, v_party_id);
5864 g_error := sqlcode || ' ' || sqlerrm;
5865 set_context(NULL, g_error);
5866 table_delete;
5867 RAISE;
5868 END;
5869
5870 END Evaluate_Blocks_Emp;
5871
5872 PROCEDURE Evaluate_Checks_Emp
5873 ( errbuf OUT NOCOPY VARCHAR2,
5874 retcode OUT NOCOPY NUMBER,
5875 p_group_id IN NUMBER DEFAULT NULL,
5876 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
5877 p_rule_only IN VARCHAR2 DEFAULT NULL ) IS
5878
5879 chk_id Number;
5880 chk_name Varchar2(240);
5881 cparty_id Number;
5882 sel_type Varchar2(3);
5883 sel_blk_id Number;
5884 data_type Varchar2(90);
5885 fmt_mask Varchar2(90);
5886 rule Varchar2(32767);
5887
5888 chk_u_l_flag Varchar2(3);
5889 Thd_grade Varchar2(9);
5890
5891 truncate_flag Varchar2(1) := 'N';
5892 acct_flag Varchar2(1);
5893
5894 blk_id Number := null;
5895 blk_name Varchar2(240) := null;
5896 sql_stmt Varchar2(2000) := null;
5897 curr_code Varchar2(15) := null;
5898
5899
5900 v_employee_in_sql Number :=0;
5901
5902 l_for_insert varchar2(1) := 'Y';
5903 l_for_party varchar2(1) := 'Y';
5904 l_up_total Number := 0;
5905 l_ip_total Number := 0;
5906 l_ua_total Number := 0;
5907 l_ia_total Number := 0;
5908
5909 v_party_id Number;
5910 v_check_level Varchar2(10);
5911
5912 v_checks_curvar checks_curtype;
5913 v_rec_var r_chk_rectype;
5914
5915 CURSOR block_csr IS
5916 SELECT block_id, sql_stmnt, currency_code
5917 FROM csc_prof_blocks_b a
5918 WHERE a.block_id = sel_blk_id;
5919
5920 CURSOR employee_csr IS
5921 SELECT person_id
5922 FROM per_workforce_current_x;
5923
5924
5925 cid number;
5926 val VARCHAR2(240) := null;
5927
5928 BEGIN
5929 l_ip_total := 0;
5930 l_up_total := 0;
5931 l_ia_total := 0;
5932 l_ua_total := 0;
5933 IF p_group_id IS NULL THEN
5934 IF p_no_batch_sql = 'Y' THEN
5935 OPEN v_checks_curvar FOR
5936 SELECT check_id, select_type, select_block_id,
5937 data_type, format_mask, check_upper_lower_flag,
5938 threshold_grade, check_level
5939 FROM csc_prof_checks_b a
5940 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks)
5941 AND select_type = 'B'
5942 AND check_level = 'EMPLOYEE'
5943 AND EXISTS (SELECT null
5944 FROM csc_prof_blocks_b b
5945 WHERE a.select_block_id = b.block_id
5946 AND b.batch_sql_stmnt IS NULL)
5947 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5948 AND Nvl(end_date_active, SYSDATE);
5949 ELSIF p_rule_only = 'Y' THEN
5950 OPEN v_checks_curvar FOR
5951 SELECT check_id, select_type, select_block_id,
5952 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5953 check_level
5954 FROM csc_prof_checks_b
5955 WHERE check_level ='EMPLOYEE'
5956 AND select_type = 'T'
5957 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5958 AND Nvl(end_date_active, Sysdate);
5959 ELSE
5960 OPEN v_checks_curvar FOR
5961 SELECT check_id, select_type, select_block_id,
5962 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5963 check_level
5964 FROM csc_prof_checks_b
5965 WHERE check_level ='EMPLOYEE'
5966 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5967 AND Nvl(end_date_active, Sysdate);
5968 END IF;
5969 ELSE
5970 IF p_no_batch_sql = 'Y' THEN
5971 OPEN v_checks_curvar FOR
5972 SELECT check_id, select_type, select_block_id,
5973 data_type, format_mask,check_upper_lower_flag,
5974 threshold_grade, check_level
5975 FROM csc_prof_checks_b a
5976 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
5977 WHERE group_id = p_group_id)
5978 AND select_type = 'B'
5979 AND check_level = 'EMPLOYEE'
5980 AND EXISTS (SELECT null
5981 FROM csc_prof_blocks_b b
5982 WHERE a.select_block_id = b.block_id
5983 AND b.batch_sql_stmnt IS NULL)
5984 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
5985 AND Nvl(end_date_active, SYSDATE);
5986 ELSIF p_rule_only = 'Y' THEN
5987 OPEN v_checks_curvar FOR
5988 SELECT check_id, select_type, select_block_id,
5989 data_type, format_mask,check_upper_lower_flag,threshold_grade,
5990 check_level
5991 FROM csc_prof_checks_b
5992 WHERE check_level = 'EMPLOYEE'
5993 AND select_type = 'T'
5994 AND check_id in (select check_id from csc_prof_group_checks
5995 where group_id = p_group_id)
5996 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5997 AND Nvl(end_date_active, Sysdate);
5998 ELSE
5999 OPEN v_checks_curvar FOR
6000 SELECT check_id, select_type, select_block_id,
6001 data_type, format_mask,check_upper_lower_flag,threshold_grade,
6002 check_level
6003 FROM csc_prof_checks_b
6004 WHERE check_level = 'EMPLOYEE'
6005 AND check_id in (select check_id from csc_prof_group_checks
6006 where group_id = p_group_id)
6007 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
6008 AND Nvl(end_date_active, Sysdate);
6009 END IF;
6010 END IF;
6011
6012 LOOP
6013 FETCH v_checks_curvar INTO v_rec_var;
6014 sel_type := v_rec_var.select_type;
6015 chk_id := v_rec_var.check_id;
6016 sel_blk_id := v_rec_var.select_block_id;
6017 v_check_level:= v_rec_var.check_level;
6018 data_type:=v_rec_var.data_type;
6019 fmt_mask:=v_rec_var.format_mask;
6020 chk_u_l_flag:= v_rec_var.check_upper_lower_flag;
6021 thd_grade := v_rec_var.threshold_grade;
6022
6023 EXIT WHEN v_checks_curvar%notfound;
6024 IF (sel_type = 'T') THEN
6025 build_rule('N',chk_id,v_check_level, rule);
6026 ELSIF (sel_type = 'B') THEN
6027 Open block_csr;
6028 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
6029 Close block_csr;
6030
6031 IF sql_stmt IS NOT NULL Then
6032 v_employee_in_sql := INSTR(lower(sql_stmt),':employee_id',1);
6033 Else
6034 v_employee_in_sql := 0;
6035 End if;
6036 END IF;
6037
6038 BEGIN
6039
6040 IF ((sel_type='B' ) OR (sel_type='T') ) THEN
6041 cid := dbms_sql.open_cursor;
6042
6043
6044 IF (sel_type='B') THEN
6045
6046 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
6047 ELSIF (sel_type = 'T') THEN
6048 dbms_sql.parse(cid, rule, dbms_sql.native);
6049 END IF;
6050
6051 dbms_sql.define_column(cid,1,val,240);
6052 OPEN employee_csr;
6053
6054 LOOP
6055 FETCH employee_csr INTO cparty_id;
6056 EXIT WHEN employee_csr%notfound;
6057 Evaluate_One_Check(truncate_flag, chk_id, cparty_id, null,v_check_level,
6058 sel_type, sel_blk_id,data_type, fmt_mask,chk_u_l_flag,Thd_grade, rule, blk_id, sql_stmt,
6059 curr_code, l_up_total, l_ip_total, l_ua_total, l_ia_total ,cid);
6060 END LOOP;
6061 CLOSE employee_csr;
6062 IF (dbms_sql.is_open(cid)) THEN
6063 dbms_sql.close_cursor(cid);
6064 END IF;
6065 END IF;
6066
6067
6068 IF (dbms_sql.is_open(cid)) THEN
6069 dbms_sql.close_cursor(cid);
6070 end if;
6071
6072 End;
6073
6074 END LOOP;
6075 CLOSE v_checks_curvar;
6076
6077
6078
6079 -- check if there are still records to be inserted
6080 IF l_ip_total <> 0 THEN
6081 l_for_insert := 'Y';
6082 l_for_party := 'Y';
6083 Insert_Update_Check_Results
6084 (l_ip_total, l_for_insert, l_for_party);
6085 l_ip_total :=0;
6086 END IF;
6087 -- check if there are still records to be updated
6088 IF l_up_total <> 0 THEN
6089 l_for_insert := 'N';
6090 l_for_party := 'Y';
6091 Insert_Update_Check_Results
6092 (l_up_total, l_for_insert, l_for_party);
6093 l_up_total :=0;
6094 END IF;
6095
6096 COMMIT;
6097
6098 -- Return 0 for successful completion, 1 for warnings, 2 for error
6099 IF (error_flag) THEN
6100 errbuf := Sqlerrm;
6101 retcode := 2;
6102 ELSIF (warning_msg <> '') THEN
6103 errbuf := warning_msg;
6104 retcode := 1;
6105 ELSE
6106 errbuf := '';
6107 retcode := 0;
6108 END IF;
6109
6110 IF (debug) THEN
6111 fnd_file.close;
6112 END IF;
6113
6114 EXCEPTION
6115 WHEN OTHERS THEN
6116 ROLLBACK;
6117 IF (v_checks_curvar%isopen) THEN
6118 CLOSE v_checks_curvar;
6119 END IF;
6120 IF (employee_csr%isopen) THEN
6121 CLOSE employee_csr;
6122 END IF;
6123
6124 IF (debug) THEN
6125 fnd_file.close;
6126 END IF;
6127 errbuf := Sqlerrm;
6128 retcode := 2;
6129
6130 g_error := sqlcode || ' ' || sqlerrm;
6131 fnd_file.put_line(fnd_file.log , g_error);
6132
6133 END Evaluate_Checks_Emp;
6134
6135 /* End of R12 Employee HelpDesk Modifications */
6136 --
6137 -- Evaluate_One_Block
6138 -- Execute dynamic SQL to evaluate the given building block and store the
6139 -- result in the CSC_PROF_BLOCK_RESULTS table.
6140 -- IN
6141 -- blk_id - profile check building block identifier
6142 -- party_id - customer identifier for which building block is evaluated
6143 -- acct_id - account id
6144 -- sql_stmt - sql statement to execute dynamically
6145 -- P_CID - Cursor passed from calling routine to avoid re-parsing the same sql statement
6146 --
6147 PROCEDURE Evaluate_One_Block
6148 ( p_truncate_flag IN VARCHAR2,
6149 p_blk_id IN NUMBER,
6150 p_party_id IN NUMBER,
6151 p_acct_id IN NUMBER,
6152 p_sql_stmt IN VARCHAR2,
6153 p_curr_code IN VARCHAR2,
6154 p_up_total IN OUT NOCOPY NUMBER ,
6155 p_ip_total IN OUT NOCOPY NUMBER ,
6156 p_ua_total IN OUT NOCOPY NUMBER ,
6157 p_ia_total IN OUT NOCOPY NUMBER ,
6158 p_cid IN NUMBER) IS
6159
6160 cid NUMBER;
6161 val VARCHAR2(80);
6162 curr_code VARCHAR2(15);
6163 dummy NUMBER;
6164
6165 l_for_insert varchar2(1) := 'Y';
6166 l_for_party varchar2(1) := 'Y';
6167
6168 v_party_count Number := 0;
6169 v_account_count Number := 0;
6170
6171 v_party_in_sql Number := 0;
6172 v_acct_in_sql Number := 0;
6173 v_emp_in_sql Number := 0;
6174 /*
6175 -- for party level
6176 Cursor party_block_crs IS
6177 Select count(*)
6178 From csc_prof_block_results
6179 Where block_id = p_blk_id
6180 And party_id = p_party_id
6181 And cust_account_id IS NULL;
6182
6183 -- for account level
6184 Cursor account_block_crs IS
6185 Select count(*)
6186 From csc_prof_block_results
6187 Where block_id = p_blk_id
6188 And party_id = p_party_id
6189 And cust_account_id = p_acct_id;
6190 */
6191
6192 BEGIN
6193
6194
6195 Begin
6196
6197 -- dbms_output.put_line('Inside evaluate_one_block .p_cid.'||to_char(p_cid));
6198
6199 -- P_CID is the Cursor to avoid reparsing the sql stmt
6200 -- P_CID would not be null when engine runs for more than 1 party (e.g. evaluate_checks1)
6201 -- P_CID would be null when engine is being run for 1 party (e.g. evaluate_checks2)
6202
6203 if p_cid is null then
6204 cid := dbms_sql.open_cursor;
6205 dbms_sql.parse(cid, p_sql_stmt, dbms_sql.native);
6206 dbms_sql.define_column(cid, 1, val, 240);
6207 else
6208 cid := p_cid;
6209 end if;
6210
6211 -- Added for 1850508
6212 -- if p_old_block_id!=p_blk_id OR p_old_block_id is null then
6213 -- p_old_block_id:=p_blk_id;
6214 -- End If;
6215
6216 -- Check for existence of variables before binding
6217
6218 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
6219 IF p_sql_stmt IS NOT NULL Then
6220 v_party_in_sql := INSTR(lower(p_sql_stmt),':party_id',1);
6221 v_acct_in_sql := INSTR(lower(p_sql_stmt),':cust_account_id',1);
6222 v_emp_in_sql := INSTR(lower(p_sql_stmt),':employee_id',1);
6223 Else
6224 v_party_in_sql := 0;
6225 v_acct_in_sql := 0;
6226 v_emp_in_sql := 0;
6227 End if;
6228
6229 -- For Bug 1935015 commented this if statement and created 2 variables
6230 -- v_party_in_sql and v_acct_in_sql and used them in the if stmt.
6231
6232 --if INSTR(lower(p_sql_stmt),':party_id',1) > 0 then
6233 if v_party_in_sql > 0 then
6234 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
6235 end if;
6236
6237 --if INSTR(lower(p_sql_stmt),':cust_account_id',1) > 0 then
6238 if v_acct_in_sql > 0 then
6239 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
6240 end if;
6241
6242 if v_emp_in_sql > 0 then
6243 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
6244 end if;
6245
6246
6247 /***********************
6248 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
6249 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
6250 ***************/
6251
6252 dummy := dbms_sql.execute_and_fetch(cid);
6253
6254 dbms_sql.column_value(cid, 1, val);
6255 if p_cid is null then
6256 dbms_sql.close_cursor(cid);
6257 end if;
6258
6259 Exception
6260 When Others Then
6261 -- dbms_output.put_line('Exception Others in Blocks...');
6262 if p_cid is null then
6263 IF (dbms_sql.is_open(cid)) THEN
6264 dbms_sql.close_cursor(cid);
6265 end if;
6266 end if;
6267 val := 0;
6268 End;
6269
6270 IF p_acct_id IS NULL THEN
6271 IF p_truncate_flag = 'N' THEN
6272 begin
6273 select 1 into v_party_count from csc_prof_block_results
6274 where block_id = p_blk_id
6275 and party_id = p_party_id
6276 and cust_account_id is null;
6277 exception
6278 when no_data_found then
6279 v_party_count := 0;
6280 when others then
6281 v_party_count := null;
6282 end;
6283 /*
6284 OPEN party_block_crs;
6285 FETCH party_block_crs INTO v_party_count;
6286 IF party_block_crs%notfound THEN
6287 v_party_count := 0;
6288 END IF;
6289 CLOSE party_block_crs;
6290 */
6291 ELSE
6292 v_party_count := 0;
6293 END IF;
6294
6295 IF v_party_count = 0 THEN
6296 p_ip_total := p_ip_total + 1;
6297
6298 -- assign values to insert party
6299 ip_block_id(p_ip_total) := p_blk_id;
6300 ip_party_id(p_ip_total) := p_party_id;
6301 ip_account_id(p_ip_total) := NULL;
6302 ip_value(p_ip_total) := val;
6303 ip_currency(p_ip_total) := p_curr_code;
6304
6305 IF p_ip_total = 1000 THEN
6306 l_for_insert := 'Y';
6307 l_for_party := 'Y';
6308 Insert_Update_Block_Results
6309 (p_ip_total, l_for_insert, l_for_party);
6310 p_ip_total :=0;
6311 END IF;
6312
6313 ELSIF v_party_count = 1 THEN
6314 p_up_total := p_up_total + 1;
6315
6316 -- assign values to update party tables
6317 up_block_id(p_up_total) := p_blk_id;
6318 up_party_id(p_up_total) := p_party_id;
6319 up_account_id(p_up_total) := NULL;
6320 up_value(p_up_total) := val;
6321 up_currency(p_up_total) := p_curr_code;
6322
6323 IF p_up_total = 1000 THEN
6324 l_for_insert := 'N';
6325 l_for_party := 'Y';
6326 Insert_Update_Block_Results
6327 (p_up_total, l_for_insert, l_for_party);
6328 p_up_total := 0;
6329 END IF;
6330
6331 END IF;
6332
6333 ELSE
6334 IF p_truncate_flag = 'N' THEN
6335 begin
6336 select 1 into v_account_count from csc_prof_block_results
6337 where block_id = p_blk_id
6338 and party_id = p_party_id
6339 and cust_account_id = p_acct_id;
6340 exception when no_data_found then
6341 v_account_count := 0;
6342 when others then
6343 v_account_count := null;
6344 end;
6345
6346 /* OPEN account_block_crs;
6347 FETCH account_block_crs INTO v_account_count;
6348 IF account_block_crs%notfound THEN
6349 v_account_count := 0;
6350 END IF;
6351 CLOSE account_block_crs;
6352 */
6353 ELSE
6354 v_account_count := 0;
6355 END IF;
6356
6357 IF v_account_count = 0 THEN
6358 p_ia_total := p_ia_total + 1;
6359
6360 -- assign values to insert
6361 ia_block_id(p_ia_total) := p_blk_id;
6362 ia_party_id(p_ia_total) := p_party_id;
6363 ia_account_id(p_ia_total) := p_acct_id;
6364 ia_value(p_ia_total) := val;
6365 ia_currency(p_ia_total) := p_curr_code;
6366
6367 IF p_ia_total = 1000 THEN
6368 l_for_insert := 'Y';
6369 l_for_party := 'N';
6370 Insert_Update_Block_Results
6371 (p_ia_total, l_for_insert, l_for_party);
6372 p_ia_total := 0;
6373 END IF;
6374
6375 ELSIF v_account_count = 1 THEN
6376 p_ua_total := p_ua_total + 1;
6377
6378 -- assign values to update party tables
6379 ua_block_id(p_ua_total) := p_blk_id;
6380 ua_party_id(p_ua_total) := p_party_id;
6381 ua_account_id(p_ua_total) := p_acct_id;
6382 ua_value(p_ua_total) := val;
6383 ua_currency(p_ua_total) := p_curr_code;
6384
6385 IF p_ua_total = 1000 THEN
6386 l_for_insert := 'N';
6387 l_for_party := 'N';
6388 Insert_Update_Block_Results
6389 (p_ua_total, l_for_insert, l_for_party);
6390 p_ua_total := 0;
6391 END IF;
6392
6393 END IF;
6394 END IF;
6395
6396
6397 EXCEPTION
6398 -- If an exception is raised, close cursor before exiting
6399 WHEN OTHERS THEN
6400 -- dbms_output.put_line('Exception Others in Blocks...');
6401 if p_cid is null then
6402 IF (dbms_sql.is_open(cid)) THEN
6403 dbms_sql.close_cursor(cid);
6404 END IF;
6405 end if;
6406 set_context('Evaluate_One_Block',
6407 'blk_id=>'||to_char(p_blk_id),
6408 'party_id=>'||to_char(p_party_id),
6409 'account_id=>'||to_char(p_acct_id));
6410 g_error := sqlcode || ' ' || sqlerrm;
6411 set_context(NULL, g_error);
6412
6413
6414 END Evaluate_One_Block;
6415
6416
6417 --
6418 -- Insert or Update Records into Csc_Prof_Block_Results Table
6419 -- IN
6420 -- p_count - the number of records to be inserted or updated
6421 -- p_for_party - flag to check if the insert or update is for party or account
6422 -- p_for_insert - flag to check if for insert or update.
6423 --
6424 PROCEDURE Insert_Update_Block_Results
6425 ( p_count IN Number,
6426 p_for_insert IN Varchar2,
6427 p_for_party IN Varchar2) IS
6428
6429 TABLESEGMENT_FULL EXCEPTION;
6430 INDEXSEGMENT_FULL EXCEPTION;
6431 SNAPSHOT_TOO_OLD EXCEPTION;
6432
6433 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
6434 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
6435 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
6436
6437 Begin
6438 -- Default user and login IDs
6439 --user_id := fnd_global.user_id;
6440 --login_id := fnd_global.login_id;
6441
6442 IF p_for_party = 'Y' THEN
6443 -- PARTY level insert or update of records
6444 IF p_for_insert = 'Y' THEN
6445 -- Insert Records into Csc_Prof_Block_Results Table
6446 FORALL i IN 1..p_count
6447 INSERT INTO Csc_Prof_Block_Results
6448 ( block_results_id
6449 , block_id
6450 , party_id
6451 , cust_account_id
6452 , value
6453 , currency_code
6454 , created_by
6455 , creation_date
6456 , last_updated_by
6457 , last_update_date
6458 , last_update_login)
6459 VALUES
6460 (csc_prof_block_results_s.nextval
6461 , ip_block_id(i)
6462 , ip_party_id(i)
6463 , ip_account_id(i)
6464 , ip_value(i)
6465 , ip_currency(i)
6466 , FND_GLOBAL.USER_ID
6467 , Sysdate
6468 , FND_GLOBAL.USER_ID
6469 , Sysdate
6470 , FND_GLOBAL.CONC_LOGIN_ID );
6471
6472 ip_block_id.DELETE;
6473 ip_party_id.DELETE;
6474 ip_account_id.DELETE;
6475 ip_value.DELETE;
6476 ip_currency.DELETE;
6477 ELSE
6478 FORALL i IN 1..p_count
6479 UPDATE Csc_Prof_Block_Results
6480 Set value = up_value(i)
6481 , currency_code = up_currency(i)
6482 , last_updated_by = FND_GLOBAL.USER_ID
6483 , last_update_date = sysdate
6484 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
6485 Where block_id = up_block_id(i)
6486 And party_id = up_party_id(i);
6487
6488 up_block_id.DELETE;
6489 up_party_id.DELETE;
6490 up_account_id.DELETE;
6491 up_value.DELETE;
6492 up_currency.DELETE;
6493 END IF;
6494 ELSE
6495 -- ACCOUNT level insert or update of records
6496 IF p_for_insert = 'Y' THEN
6497 -- Insert Records into Csc_Prof_Block_Results Table
6498 FORALL i IN 1..p_count
6499 INSERT INTO Csc_Prof_Block_Results
6500 ( block_results_id
6501 , block_id
6502 , party_id
6503 , cust_account_id
6504 , value
6505 , currency_code
6506 , created_by
6507 , creation_date
6508 , last_updated_by
6509 , last_update_date
6510 , last_update_login)
6511 VALUES
6512 (csc_prof_block_results_s.nextval
6513 , ia_block_id(i)
6514 , ia_party_id(i)
6515 , ia_account_id(i)
6516 , ia_value(i)
6517 , ia_currency(i)
6518 , FND_GLOBAL.USER_ID
6519 , Sysdate
6520 , FND_GLOBAL.USER_ID
6521 , Sysdate
6522 , FND_GLOBAL.CONC_LOGIN_ID );
6523
6524 ia_block_id.DELETE;
6525 ia_party_id.DELETE;
6526 ia_account_id.DELETE;
6527 ia_value.DELETE;
6528 ia_currency.DELETE;
6529 ELSE
6530 FORALL i IN 1..p_count
6531 UPDATE Csc_Prof_Block_Results
6532 Set value = ua_value(i)
6533 , currency_code = ua_currency(i)
6534 , last_updated_by = FND_GLOBAL.USER_ID
6535 , last_update_date = sysdate
6536 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
6537 Where block_id = ua_block_id(i)
6538 And party_id = ua_party_id(i)
6539 And cust_account_id = ua_account_id(i);
6540
6541 ua_block_id.DELETE;
6542 ua_party_id.DELETE;
6543 ua_account_id.DELETE;
6544 ua_value.DELETE;
6545 ua_currency.DELETE;
6546 END IF;
6547 END IF;
6548
6549 commit;
6550
6551 exception
6552 when Indexsegment_full then
6553 g_error := sqlcode || ' ' || sqlerrm;
6554 fnd_file.put_line(fnd_file.log , g_error);
6555 App_Exception.raise_exception;
6556
6557 when Tablesegment_full then
6558 g_error := sqlcode || ' ' || sqlerrm;
6559 fnd_file.put_line(fnd_file.log , g_error);
6560 App_Exception.raise_exception;
6561
6562 WHEN SNAPSHOT_TOO_OLD THEN
6563 g_error := sqlcode || ' ' || sqlerrm;
6564 fnd_file.put_line(fnd_file.log,g_error);
6565 App_Exception.raise_exception;
6566
6567 when Others then
6568 table_delete;
6569 g_error := sqlcode || ' ' || sqlerrm;
6570 fnd_file.put_line(fnd_file.log , g_error);
6571
6572 END Insert_Update_Block_Results;
6573
6574 --
6575 -- Insert or Update Records into Csc_Prof_Check_Results Table
6576 -- IN
6577 -- p_count - the number of records to be inserted or updated
6578 -- p_for_party - flag to check if the insert or update is for party or account
6579 -- p_for_insert - flag to check if for insert or update.
6580 --
6581 PROCEDURE Insert_Update_Check_Results
6582 ( p_count IN Number,
6583 p_for_insert IN Varchar2,
6584 p_for_party IN Varchar2) IS
6585
6586 TABLESEGMENT_FULL EXCEPTION;
6587 INDEXSEGMENT_FULL EXCEPTION;
6588 SNAPSHOT_TOO_OLD EXCEPTION;
6589
6590 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
6591 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
6592 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
6593 Begin
6594 -- Default user and login IDs
6595 --user_id := fnd_global.user_id;
6596 --login_id := fnd_global.login_id;
6597
6598
6599 IF p_for_party = 'Y' THEN
6600 -- PARTY level insert or update of records
6601 IF p_for_insert = 'Y' THEN
6602 -- Insert Records into Csc_Prof_Check_Results Table
6603
6604 FORALL i IN 1..p_count
6605 INSERT INTO Csc_Prof_Check_Results
6606 ( check_results_id
6607 , check_id
6608 , party_id
6609 , cust_account_id
6610 , value
6611 , results_threshold_flag
6612 , currency_code
6613 , grade
6614 , rating_code
6615 , color_code
6616 , created_by
6617 , creation_date
6618 , last_updated_by
6619 , last_update_date
6620 , last_update_login)
6621 VALUES
6622 (csc_prof_check_results_s.nextval
6623 , ip_check_id(i)
6624 , ip_party_id(i)
6625 , ip_account_id(i)
6626 , ip_value(i)
6627 , ip_results(i)
6628 , ip_currency(i)
6629 , ip_grade(i)
6630 , ip_rating_code(i)
6631 , ip_color_code(i)
6632 , FND_GLOBAL.USER_ID
6633 , Sysdate
6634 , FND_GLOBAL.USER_ID
6635 , Sysdate
6636 , FND_GLOBAL.CONC_LOGIN_ID );
6637
6638 ip_check_id.DELETE;
6639 ip_party_id.DELETE;
6640 ip_account_id.DELETE;
6641 ip_value.DELETE;
6642 ip_currency.DELETE;
6643 ip_grade.DELETE;
6644 ip_rating_code.DELETE;
6645 ip_color_code.DELETE;
6646 ip_results.DELETE;
6647
6648 ELSE
6649 FORALL i IN 1..p_count
6650 UPDATE Csc_Prof_Check_Results
6651 Set value = up_value(i)
6652 , results_threshold_flag = up_results(i)
6653 , currency_code = up_currency(i)
6654 , grade = up_grade(i)
6655 , rating_code = up_rating_code(i)
6656 , color_code = up_color_code(i)
6657 , last_updated_by = FND_GLOBAL.USER_ID
6658 , last_update_date = sysdate
6659 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
6660 Where check_id = up_check_id(i)
6661 And party_id = up_party_id(i)
6662 And cust_account_id IS NULL;
6663
6664 up_check_id.DELETE;
6665 up_party_id.DELETE;
6666 up_account_id.DELETE;
6667 up_value.DELETE;
6668 up_currency.DELETE;
6669 up_grade.DELETE;
6670 up_rating_code.DELETE;
6671 up_color_code.DELETE;
6672 up_results.DELETE;
6673
6674 END IF;
6675 ELSE
6676 -- ACCOUNT level insert or update of records
6677 IF p_for_insert = 'Y' THEN
6678 -- Insert Records into Csc_Prof_Check_Results Table
6679
6680 FORALL i IN 1..p_count
6681 INSERT INTO Csc_Prof_Check_Results
6682 ( check_results_id
6683 , check_id
6684 , party_id
6685 , cust_account_id
6686 , value
6687 , results_threshold_flag
6688 , currency_code
6689 , grade
6690 , rating_code
6691 , color_code
6692 , created_by
6693 , creation_date
6694 , last_updated_by
6695 , last_update_date
6696 , last_update_login)
6697 VALUES
6698 (csc_prof_check_results_s.nextval
6699 , ia_check_id(i)
6700 , ia_party_id(i)
6701 , ia_account_id(i)
6702 , ia_value(i)
6703 , ia_results(i)
6704 , ia_currency(i)
6705 , ia_grade(i)
6706 , ia_rating_code(i)
6707 , ia_color_code(i)
6708 , FND_GLOBAL.USER_ID
6709 , Sysdate
6710 , FND_GLOBAL.USER_ID
6711 , Sysdate
6712 , FND_GLOBAL.CONC_LOGIN_ID );
6713
6714 ia_check_id.DELETE;
6715 ia_party_id.DELETE;
6716 ia_account_id.DELETE;
6717 ia_value.DELETE;
6718 ia_currency.DELETE;
6719 ia_grade.DELETE;
6720 ia_rating_code.DELETE;
6721 ia_color_code.DELETE;
6722 ia_results.DELETE;
6723
6724 ELSE
6725 FORALL i IN 1..p_count
6726 UPDATE Csc_Prof_Check_Results
6727 Set value = ua_value(i)
6728 , results_threshold_flag = ua_results(i)
6729 , currency_code = ua_currency(i)
6730 , grade = ua_grade(i)
6731 , rating_code = ua_rating_code(i)
6732 , color_code = ua_color_code(i)
6733 , last_updated_by = FND_GLOBAL.USER_ID
6734 , last_update_date = sysdate
6735 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
6736 Where check_id = ua_check_id(i)
6737 And party_id = ua_party_id(i)
6738 And cust_account_id = ua_account_id(i);
6739
6740 ua_check_id.DELETE;
6741 ua_party_id.DELETE;
6742 ua_account_id.DELETE;
6743 ua_value.DELETE;
6744 ua_currency.DELETE;
6745 ua_grade.DELETE;
6746 ua_rating_code.DELETE;
6747 ua_color_code.DELETE;
6748 ua_results.DELETE;
6749 END IF;
6750 END IF;
6751
6752 commit;
6753
6754 exception
6755
6756 when Tablesegment_full then
6757 g_error := sqlcode || ' ' || sqlerrm;
6758 fnd_file.put_line(fnd_file.log , g_error);
6759 App_Exception.raise_exception;
6760
6761 when Indexsegment_full then
6762 g_error := sqlcode || ' ' || sqlerrm;
6763 fnd_file.put_line(fnd_file.log , g_error);
6764 App_Exception.raise_exception;
6765
6766 when SNAPSHOT_TOO_OLD THEN
6767 g_error := sqlcode || ' ' || sqlerrm;
6768 fnd_file.put_line(fnd_file.log,g_error);
6769 App_Exception.raise_exception;
6770 when Others then
6771 table_delete;
6772 g_error := sqlcode || ' ' || sqlerrm;
6773 fnd_file.put_line(fnd_file.log , g_error);
6774
6775 END Insert_Update_Check_Results;
6776
6777
6778 /*******************************************
6779 UPDATE_JIT_STATUS
6780 Added this procedure for JIT enhancement -- Bug 4535407
6781 Updates the columns jit_status, jit_err_code in CCT_MEDIA_ITEMS.
6782 Called from CSC_PROF_JIT
6783 ********************************************/
6784
6785 PROCEDURE update_jit_status
6786 ( p_status VARCHAR2 DEFAULT NULL,
6787 p_err_code NUMBER DEFAULT NULL,
6788 p_media_item_id NUMBER
6789 )
6790 IS
6791 PRAGMA AUTONOMOUS_TRANSACTION;
6792 BEGIN
6793 UPDATE CCT_MEDIA_ITEMS
6794 SET jit_status = p_status,
6795 jit_err_code = p_err_code
6796 WHERE media_item_id = p_media_item_id;
6797 COMMIT;
6798 END update_jit_status;
6799
6800
6801 /*******************************************
6802 CSC_PROF_JIT
6803 Added this procedure for JIT enhancement -- Bug 4535407
6804 Called from OTM java code
6805 Calls profile engine for the party_id passed from OTM.
6806 OTM passes the key-value pair in a VARRAY (cct_keyvalue_varr)
6807 ********************************************/
6808
6809 PROCEDURE csc_prof_jit
6810 ( p_key_value_varr IN cct_keyvalue_varr,
6811 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
6812 p_critical_flag IN VARCHAR2 DEFAULT NULL,
6813 x_return_status OUT NOCOPY VARCHAR2,
6814 x_msg_count OUT NOCOPY NUMBER,
6815 x_msg_data OUT NOCOPY VARCHAR2
6816 )
6817 IS
6818 l_media_item_id NUMBER;
6819 l_party_id NUMBER;
6820 l_hidden_party_id NUMBER;
6821 l_rel_id NUMBER;
6822 l_acct_id NUMBER;
6823 l_resp_id NUMBER;
6824 l_emp_id NUMBER;
6825 l_resp_appl_id NUMBER;
6826 l_party_type VARCHAR2(30);
6827 l_form_name VARCHAR2(30) := 'CSCCCCRC';
6828 l_view_by_acct VARCHAR2(255);
6829 l_view_by VARCHAR2(255);
6830 l_acct_new_old VARCHAR2(255);
6831 l_show_active_acct VARCHAR2(255);
6832 l_status VARCHAR2(30);
6833 l_group_id NUMBER;
6834 l_which_ivr VARCHAR2(30);
6835
6836 l_media_exists VARCHAR2(1);
6837 l_party_exists VARCHAR2(1);
6838 l_rel_exists VARCHAR2(1);
6839 l_acct_exists VARCHAR2(1);
6840 l_resp_exists VARCHAR2(1);
6841 l_resp_appl_exists VARCHAR2(1);
6842 l_emp_exists VARCHAR2(1);
6843 l_which_ivr_exists VARCHAR2(1);
6844 l_contact_type VARCHAR2(30);
6845 l_critical_flag VARCHAR2(1);
6846
6847 l_party_rec CSC_UTILS.dashboard_Rec_Type;
6848
6849 l_api_name VARCHAR2(30) := 'CSC_PROF_JIT';
6850 l_jit_prg_status VARCHAR2(30) := 'PROGRESS';
6851 l_jit_err_status VARCHAR2(30) := 'ERROR';
6852 l_jit_complete_status VARCHAR2(30) := 'COMPLETED';
6853 l_sql_code NUMBER;
6854
6855 CURSOR chk_status IS
6856 SELECT jit_status
6857 FROM CCT_MEDIA_ITEMS
6858 WHERE media_item_id = l_media_item_id;
6859
6860 CURSOR group_crs IS
6861 SELECT a.dashboard_group_id
6862 FROM csc_prof_module_groups a, csc_prof_groups_b b
6863 WHERE a.dashboard_group_id = b.group_id
6864 AND a.party_type IN (l_party_type, 'ALL')
6865 AND a.form_function_name = l_form_name
6866 AND (((a.responsibility_id = l_resp_id AND a.resp_appl_id = l_resp_appl_id)
6867 AND a.responsibility_id IS NOT NULL)
6868 OR a.responsibility_id IS NULL)
6869 AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(b.start_date_active, SYSDATE))
6870 AND TRUNC(NVL(b.end_date_active, SYSDATE))
6871 ORDER BY a.party_type desc, a.responsibility_id;
6872
6873 CURSOR get_party_type IS
6874 SELECT party_type
6875 FROM hz_parties
6876 WHERE party_id = l_party_id;
6877
6878 CURSOR get_acct_latest IS
6879 SELECT cust_account_id
6880 FROM hz_cust_accounts
6881 WHERE party_id = l_party_id
6882 AND ((status = 'A' AND l_show_active_acct = 'Y')
6883 OR (l_show_active_acct = 'N'))
6884 AND status NOT IN ('M', 'D')
6885 ORDER BY creation_date DESC;
6886
6887 CURSOR get_acct_oldest IS
6888 SELECT cust_account_id
6889 FROM hz_cust_accounts
6890 WHERE party_id = l_party_id
6891 AND ((status = 'A' AND l_show_active_acct = 'Y')
6892 OR (l_show_active_acct = 'N'))
6893 AND status NOT IN ('M', 'D')
6894 ORDER BY creation_date;
6895
6896 CURSOR get_cust_from_cont IS
6897 SELECT obj_party_id, obj_party_type
6898 FROM csc_hz_parties_rel_v
6899 WHERE rel_party_id = l_party_id;
6900
6901 BEGIN
6902 IF FND_API.to_Boolean( p_init_msg_list ) THEN
6903 FND_MSG_PUB.initialize;
6904 END IF;
6905
6906 x_return_status := FND_API.G_RET_STS_SUCCESS;
6907
6908 /* get values from varray parameter p_key_value_varr */
6909 l_media_item_id := CCT_COLLECTION_UTIL_PUB.Get
6910 ( p_key_value_varr => p_key_value_varr,
6911 p_key => 'occtMediaItemID',
6912 x_key_exists => l_media_exists);
6913
6914 l_party_id := CCT_COLLECTION_UTIL_PUB.Get
6915 ( p_key_value_varr => p_key_value_varr,
6916 p_key => 'PARTY_ID',
6917 x_key_exists => l_party_exists);
6918
6919 l_rel_id := CCT_COLLECTION_UTIL_PUB.Get
6920 ( p_key_value_varr => p_key_value_varr,
6921 p_key => 'REL_PARTY_ID',
6922 x_key_exists => l_rel_exists);
6923
6924 l_acct_id := CCT_COLLECTION_UTIL_PUB.Get
6925 ( p_key_value_varr => p_key_value_varr,
6926 p_key => 'CUST_ACCOUNT_ID',
6927 x_key_exists => l_acct_exists);
6928
6929 l_resp_id := CCT_COLLECTION_UTIL_PUB.Get
6930 ( p_key_value_varr => p_key_value_varr,
6931 p_key => 'occtRespID',
6932 x_key_exists => l_resp_exists);
6933
6934 l_resp_appl_id := CCT_COLLECTION_UTIL_PUB.Get
6935 ( p_key_value_varr => p_key_value_varr,
6936 p_key => 'occtAppID',
6937 x_key_exists => l_resp_appl_exists);
6938
6939 l_emp_id := CCT_COLLECTION_UTIL_PUB.Get
6940 ( p_key_value_varr => p_key_value_varr,
6941 p_key => 'employeeID',
6942 x_key_exists => l_emp_exists);
6943
6944 l_which_ivr := CCT_COLLECTION_UTIL_PUB.Get
6945 ( p_key_value_varr => p_key_value_varr,
6946 p_key => 'WhichIVR',
6947 x_key_exists => l_which_ivr_exists);
6948
6949
6950 IF (l_media_item_id IS NULL
6951 OR (l_party_id IS NULL AND l_emp_id is NULL)
6952 OR l_resp_id IS NULL
6953 OR l_resp_appl_id IS NULL) THEN
6954 RETURN;
6955 END IF;
6956
6957 OPEN chk_status;
6958 FETCH chk_status INTO l_status;
6959
6960 /* OTM updates jit_status to null before calling this procedure.
6961 IF screenpop happens when the call to this procedure is in queue, then
6962 forms would have populated jit_status column. In such cases return back
6963 */
6964
6965 IF l_status IS NOT NULL OR chk_status%NOTFOUND THEN
6966 RETURN;
6967 END IF;
6968 CLOSE chk_status;
6969
6970 update_jit_status
6971 ( p_status => l_jit_prg_status,
6972 p_err_code => NULL,
6973 p_media_item_id => l_media_item_id );
6974
6975 /* get the value of auto refresh PO if not passed from OTM */
6976 IF p_critical_flag IS NULL THEN
6977 l_critical_flag := FND_PROFILE.value_specific
6978 ( name => 'CSC_DASHBOARD_AUTO_REFRESH',
6979 responsibility_id => l_resp_id,
6980 application_id => l_resp_appl_id,
6981 user_id => -999
6982 );
6983 ELSE
6984 l_critical_flag := p_critical_flag;
6985 END IF;
6986
6987 /* profile option for defaulting view by in CC */
6988 l_view_by := FND_PROFILE.value_specific
6989 ( name => 'CSC_CC_DEFAULT_VIEW_BY',
6990 responsibility_id => l_resp_id,
6991 application_id => l_resp_appl_id,
6992 user_id => -999
6993 );
6994 /* Employee HelpDesk Changes
6995 If emp_id is not null
6996 If view_by is Customer - then get hidden customer's id from Profile Option -process for customer
6997 If view_by is Contact - then process for employee
6998 elsif party_id is not null
6999 existing logic
7000 */
7001 IF l_emp_id IS NOT NULL AND l_which_ivr ='Employee' THEN
7002 IF l_view_by = 'CUSTOMER' THEN ---Refresh only for hidden customer
7003 l_hidden_party_id := FND_PROFILE.value_specific
7004 ( name => 'CS_SR_DEFAULT_CUSTOMER_NAME',
7005 responsibility_id => l_resp_id,
7006 application_id => l_resp_appl_id,
7007 user_id => -999
7008 );
7009 /* Refresh for Customer only if Profile Option CS_SR_DEFAULT_CUSTOMER_NAME returns a value */
7010 IF l_hidden_party_id IS NOT NULL THEN
7011 /* profile option for view_by_account in dashboard tab */
7012 l_view_by_acct := FND_PROFILE.value_specific
7013 ( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
7014 responsibility_id => l_resp_id,
7015 application_id => l_resp_appl_id,
7016 user_id => -999
7017 );
7018
7019 /* if view_by_account is yes, check whether account_id is passed.
7020 If not passed, then check whether only one account exists for the customer.
7021 If yes, use this account.
7022 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
7023
7024 IF l_view_by_acct = 'ACCOUNT' THEN
7025 IF l_acct_id IS NULL THEN
7026 l_show_active_acct := FND_PROFILE.value_specific
7027 ( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
7028 responsibility_id => l_resp_id,
7029 application_id => l_resp_appl_id,
7030 user_id => -999
7031 );
7032 BEGIN
7033 SELECT cust_account_id
7034 INTO l_acct_id
7035 FROM hz_cust_accounts
7036 WHERE party_id = l_party_id
7037 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
7038 AND status NOT IN ('M', 'D');
7039 EXCEPTION
7040 WHEN OTHERS THEN
7041 l_acct_id := NULL;
7042 END;
7043
7044 IF l_acct_id IS NULL THEN
7045 l_acct_new_old := FND_PROFILE.value_specific
7046 ( name => 'CSC_CC_DEFAULT_ACCT',
7047 responsibility_id => l_resp_id,
7048 application_id => l_resp_appl_id,
7049 user_id => -999
7050 );
7051
7052 IF l_acct_new_old = 'Y' THEN
7053 OPEN get_acct_oldest;
7054 FETCH get_acct_oldest INTO l_acct_id;
7055 CLOSE get_acct_oldest;
7056 ELSIF l_acct_new_old = 'L' THEN
7057 OPEN get_acct_latest;
7058 FETCH get_acct_latest INTO l_acct_id;
7059 CLOSE get_acct_latest;
7060 END IF;
7061 END IF; /* l_acct_id is null -- inner*/
7062 END IF; /* l_acct_id is null -- outer */
7063 END IF; /* l_view_by_acct = 'Y' */
7064
7065 /* If user hook for dashboard group is enabled, call user hook to get group_id.
7066 Else use the existing logic from setup form to get group_id */
7067
7068 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7069 l_party_rec.Cust_Party_Id := l_hidden_party_id;
7070 l_party_rec.Cust_Account_Id := l_acct_id;
7071
7072 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7073 l_group_id := l_party_rec.group_id;
7074 ELSE
7075 OPEN group_crs;
7076 FETCH group_crs INTO l_group_id;
7077 IF (group_crs%notfound) THEN
7078 CLOSE group_crs;
7079 l_form_name := 'CSCCCCDB';
7080 OPEN group_crs;
7081 FETCH group_crs into l_group_id;
7082 CLOSE group_Crs;
7083 ELSE
7084 CLOSE group_crs;
7085 END IF;
7086 END IF;
7087
7088 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
7089 IF l_group_id IS NULL THEN
7090 update_jit_status
7091 ( p_status => l_jit_err_status,
7092 p_err_code => -20001,
7093 p_media_item_id => l_media_item_id );
7094 RETURN;
7095 END IF;
7096
7097 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7098 ( p_party_id => l_hidden_party_id,
7099 p_acct_id => l_acct_id,
7100 p_group_id => l_group_id,
7101 p_critical_flag => l_critical_flag,
7102 p_party_type => 'CUSTOMER');
7103 END IF; /* l_hidden_party_id is not null */
7104
7105 ELSIF l_view_by = 'CONTACT' THEN --Refresh for employee
7106
7107 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7108 l_party_rec.Cust_Party_Id := l_emp_id;
7109 l_party_rec.Cust_Party_Type := upper(l_which_ivr);
7110
7111
7112 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7113 l_group_id := l_party_rec.group_id;
7114 ELSE
7115
7116 OPEN group_crs;
7117 FETCH group_crs INTO l_group_id;
7118 IF (group_crs%notfound) THEN
7119 CLOSE group_crs;
7120 l_form_name := 'CSCCCCDB';
7121 OPEN group_crs;
7122 FETCH group_crs into l_group_id;
7123 CLOSE group_Crs;
7124 ELSE
7125 CLOSE group_crs;
7126 END IF;
7127 END IF;
7128
7129 IF l_group_id IS NULL THEN
7130 update_jit_status
7131 ( p_status => l_jit_err_status,
7132 p_err_code => -20001,
7133 p_media_item_id => l_media_item_id );
7134 RETURN;
7135 END IF;
7136
7137 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7138 ( p_party_id => l_emp_id,
7139 p_acct_id => NULL,
7140 p_group_id => l_group_id,
7141 p_critical_flag => l_critical_flag,
7142 p_party_type => 'EMPLOYEE');
7143
7144 END IF; /* l_view_by for HelpDesk Context */
7145
7146 ELSIF l_emp_id IS NOT NULL AND l_which_ivr ='SR' THEN
7147 l_contact_type := FND_PROFILE.value_specific
7148 ( name => 'CSC_CC_DEFAULT_CONTACT_TYPE',
7149 responsibility_id => l_resp_id,
7150 application_id => l_resp_appl_id,
7151 user_id => -999
7152 );
7153
7154 IF l_view_by = 'CUSTOMER' THEN
7155 --refresh dashboard for customer using l_party_id
7156 IF l_party_id IS NOT NULL THEN
7157 /* profile option for view_by_account in dashboard tab */
7158 l_view_by_acct := FND_PROFILE.value_specific
7159 ( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
7160 responsibility_id => l_resp_id,
7161 application_id => l_resp_appl_id,
7162 user_id => -999
7163 );
7164
7165 /* if view_by_account is yes, check whether account_id is passed.
7166 If not passed, then check whether only one account exists for the customer.
7167 If yes, use this account.
7168 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
7169
7170 IF l_view_by_acct = 'ACCOUNT' THEN
7171 IF l_acct_id IS NULL THEN
7172 l_show_active_acct := FND_PROFILE.value_specific
7173 ( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
7174 responsibility_id => l_resp_id,
7175 application_id => l_resp_appl_id,
7176 user_id => -999
7177 );
7178 BEGIN
7179 SELECT cust_account_id
7180 INTO l_acct_id
7181 FROM hz_cust_accounts
7182 WHERE party_id = l_party_id
7183 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
7184 AND status NOT IN ('M', 'D');
7185 EXCEPTION
7186 WHEN OTHERS THEN
7187 l_acct_id := NULL;
7188 END;
7189
7190 IF l_acct_id IS NULL THEN
7191 l_acct_new_old := FND_PROFILE.value_specific
7192 ( name => 'CSC_CC_DEFAULT_ACCT',
7193 responsibility_id => l_resp_id,
7194 application_id => l_resp_appl_id,
7195 user_id => -999
7196 );
7197
7198 IF l_acct_new_old = 'Y' THEN
7199 OPEN get_acct_oldest;
7200 FETCH get_acct_oldest INTO l_acct_id;
7201 CLOSE get_acct_oldest;
7202 ELSIF l_acct_new_old = 'L' THEN
7203 OPEN get_acct_latest;
7204 FETCH get_acct_latest INTO l_acct_id;
7205 CLOSE get_acct_latest;
7206 END IF;
7207 END IF; /* l_acct_id is null -- inner*/
7208 END IF; /* l_acct_id is null -- outer */
7209 END IF; /* l_view_by_acct = 'Y' */
7210
7211 /* If user hook for dashboard group is enabled, call user hook to get group_id.
7212 Else use the existing logic from setup form to get group_id */
7213
7214 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7215 l_party_rec.Cust_Party_Id := l_hidden_party_id;
7216 l_party_rec.Cust_Account_Id := l_acct_id;
7217
7218 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7219 l_group_id := l_party_rec.group_id;
7220 ELSE
7221 OPEN group_crs;
7222 FETCH group_crs INTO l_group_id;
7223 IF (group_crs%notfound) THEN
7224 CLOSE group_crs;
7225 l_form_name := 'CSCCCCDB';
7226 OPEN group_crs;
7227 FETCH group_crs into l_group_id;
7228 CLOSE group_Crs;
7229 ELSE
7230 CLOSE group_crs;
7231 END IF;
7232 END IF;
7233
7234 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
7235 IF l_group_id IS NULL THEN
7236 update_jit_status
7237 ( p_status => l_jit_err_status,
7238 p_err_code => -20001,
7239 p_media_item_id => l_media_item_id );
7240 RETURN;
7241 END IF;
7242
7243 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7244 ( p_party_id => l_party_id,
7245 p_acct_id => l_acct_id,
7246 p_group_id => l_group_id,
7247 p_critical_flag => l_critical_flag,
7248 p_party_type => 'CUSTOMER');
7249 END IF; /* l_party_id is not null */
7250
7251 ELSIF l_view_by = 'CONTACT' and l_contact_type ='EMPLOYEE' THEN
7252
7253 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7254 l_party_rec.Cust_Party_Id := l_emp_id;
7255 l_party_rec.Cust_Party_Type := 'EMPLOYEE';
7256
7257
7258 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7259 l_group_id := l_party_rec.group_id;
7260 ELSE
7261
7262 OPEN group_crs;
7263 FETCH group_crs INTO l_group_id;
7264 IF (group_crs%notfound) THEN
7265 CLOSE group_crs;
7266 l_form_name := 'CSCCCCDB';
7267 OPEN group_crs;
7268 FETCH group_crs into l_group_id;
7269 CLOSE group_Crs;
7270 ELSE
7271 CLOSE group_crs;
7272 END IF;
7273 END IF;
7274
7275 IF l_group_id IS NULL THEN
7276 update_jit_status
7277 ( p_status => l_jit_err_status,
7278 p_err_code => -20001,
7279 p_media_item_id => l_media_item_id );
7280 RETURN;
7281 END IF;
7282
7283 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7284 ( p_party_id => l_emp_id,
7285 p_acct_id => NULL,
7286 p_group_id => l_group_id,
7287 p_critical_flag => l_critical_flag,
7288 p_party_type => 'EMPLOYEE');
7289
7290 ELSIF l_view_by = 'CONTACT' and l_contact_type ='CUSTOMER' THEN
7291 --refresh dashboard for contact (use party_id to fetch contact_id for refreshing)
7292 OPEN get_party_type;
7293 FETCH get_party_type INTO l_party_type;
7294 CLOSE get_party_type;
7295
7296 /* if view_by is contact and contact_id is not passed, don't process */
7297 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
7298 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7299 l_party_rec.Cust_Party_Id := l_party_id;
7300 l_party_rec.Cust_Party_Type := l_party_type;
7301 l_party_rec.Cust_Account_Id := l_acct_id;
7302
7303 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7304 l_group_id := l_party_rec.group_id;
7305 ELSE
7306
7307 OPEN group_crs;
7308 FETCH group_crs INTO l_group_id;
7309 IF (group_crs%notfound) THEN
7310 CLOSE group_crs;
7311 l_form_name := 'CSCCCCDB';
7312 OPEN group_crs;
7313 FETCH group_crs into l_group_id;
7314 CLOSE group_Crs;
7315 ELSE
7316 CLOSE group_crs;
7317 END IF;
7318 END IF;
7319
7320 IF l_group_id IS NULL THEN
7321 update_jit_status
7322 ( p_status => l_jit_err_status,
7323 p_err_code => -20001,
7324 p_media_item_id => l_media_item_id );
7325 RETURN;
7326 END IF;
7327
7328 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7329 ( p_party_id => l_party_id,
7330 p_acct_id => NULL,
7331 p_group_id => l_group_id,
7332 p_critical_flag => l_critical_flag,
7333 p_party_type => 'CUSTOMER');
7334 END IF;
7335 END IF;
7336
7337 ELSIF l_party_id IS NOT NULL THEN
7338
7339 OPEN get_party_type;
7340 FETCH get_party_type INTO l_party_type;
7341 CLOSE get_party_type;
7342
7343 IF l_view_by = 'CUSTOMER' THEN
7344
7345 /* if view by is customer and contact_id is passed,
7346 get customer_id using contact_id */
7347 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
7348 OPEN get_cust_from_cont;
7349 FETCH get_cust_from_cont into l_party_id, l_party_type;
7350 CLOSE get_cust_from_cont;
7351 END IF;
7352
7353 /* profile option for view_by_account in dashboard tab */
7354 l_view_by_acct := FND_PROFILE.value_specific
7355 ( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
7356 responsibility_id => l_resp_id,
7357 application_id => l_resp_appl_id,
7358 user_id => -999
7359 );
7360
7361 /* if view_by_account is yes, check whether account_id is passed.
7362 If not passed, then check whether only one account exists for the customer.
7363 If yes, use this account.
7364 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
7365
7366 IF l_view_by_acct = 'ACCOUNT' THEN
7367 IF l_acct_id IS NULL THEN
7368 l_show_active_acct := FND_PROFILE.value_specific
7369 ( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
7370 responsibility_id => l_resp_id,
7371 application_id => l_resp_appl_id,
7372 user_id => -999
7373 );
7374 BEGIN
7375 SELECT cust_account_id
7376 INTO l_acct_id
7377 FROM hz_cust_accounts
7378 WHERE party_id = l_party_id
7379 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
7380 AND status NOT IN ('M', 'D');
7381 EXCEPTION
7382 WHEN OTHERS THEN
7383 l_acct_id := NULL;
7384 END;
7385
7386 IF l_acct_id IS NULL THEN
7387 l_acct_new_old := FND_PROFILE.value_specific
7388 ( name => 'CSC_CC_DEFAULT_ACCT',
7389 responsibility_id => l_resp_id,
7390 application_id => l_resp_appl_id,
7391 user_id => -999
7392 );
7393
7394 IF l_acct_new_old = 'Y' THEN
7395 OPEN get_acct_oldest;
7396 FETCH get_acct_oldest INTO l_acct_id;
7397 CLOSE get_acct_oldest;
7398 ELSIF l_acct_new_old = 'L' THEN
7399 OPEN get_acct_latest;
7400 FETCH get_acct_latest INTO l_acct_id;
7401 CLOSE get_acct_latest;
7402 END IF;
7403 END IF; /* l_acct_id is null -- inner*/
7404 END IF; /* l_acct_id is null -- outer */
7405 END IF; /* l_view_by_acct = 'Y' */
7406
7407 /* If user hook for dashboard group is enabled, call user hook to get group_id.
7408 Else use the existing logic from setup form to get group_id */
7409
7410 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7411 l_party_rec.Cust_Party_Id := l_party_id;
7412 l_party_rec.Cust_Party_Type := l_party_type;
7413 l_party_rec.Cust_Account_Id := l_acct_id;
7414
7415 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7416 l_group_id := l_party_rec.group_id;
7417 ELSE
7418 OPEN group_crs;
7419 FETCH group_crs INTO l_group_id;
7420 IF (group_crs%notfound) THEN
7421 CLOSE group_crs;
7422 l_form_name := 'CSCCCCDB';
7423 OPEN group_crs;
7424 FETCH group_crs into l_group_id;
7425 CLOSE group_Crs;
7426 ELSE
7427 CLOSE group_crs;
7428 END IF;
7429 END IF;
7430
7431 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
7432 IF l_group_id IS NULL THEN
7433 update_jit_status
7434 ( p_status => l_jit_err_status,
7435 p_err_code => -20001,
7436 p_media_item_id => l_media_item_id );
7437 RETURN;
7438 END IF;
7439
7440 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7441 ( p_party_id => l_party_id,
7442 p_acct_id => l_acct_id,
7443 p_group_id => l_group_id,
7444 p_critical_flag => l_critical_flag,
7445 p_party_type => 'CUSTOMER');
7446
7447 ELSIF l_view_by = 'CONTACT' THEN
7448
7449 /* if view_by is contact and contact_id is not passed, don't process */
7450 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
7451 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
7452 l_party_rec.Cust_Party_Id := l_party_id;
7453 l_party_rec.Cust_Party_Type := l_party_type;
7454 l_party_rec.Cust_Account_Id := l_acct_id;
7455
7456 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
7457 l_group_id := l_party_rec.group_id;
7458 ELSE
7459
7460 OPEN group_crs;
7461 FETCH group_crs INTO l_group_id;
7462 IF (group_crs%notfound) THEN
7463 CLOSE group_crs;
7464 l_form_name := 'CSCCCCDB';
7465 OPEN group_crs;
7466 FETCH group_crs into l_group_id;
7467 CLOSE group_Crs;
7468 ELSE
7469 CLOSE group_crs;
7470 END IF;
7471 END IF;
7472
7473 IF l_group_id IS NULL THEN
7474 update_jit_status
7475 ( p_status => l_jit_err_status,
7476 p_err_code => -20001,
7477 p_media_item_id => l_media_item_id );
7478 RETURN;
7479 END IF;
7480
7481 CSC_PROFILE_ENGINE_PKG.run_engine_jit
7482 ( p_party_id => l_party_id,
7483 p_acct_id => NULL,
7484 p_group_id => l_group_id,
7485 p_critical_flag => l_critical_flag,
7486 p_party_type => 'CUSTOMER');
7487 END IF;
7488 END IF; /* l_view_by */
7489 END IF; /* l_party_id or l_emp_id is null */
7490
7491 update_jit_status
7492 ( p_status => l_jit_complete_status,
7493 p_err_code => NULL,
7494 p_media_item_id => l_media_item_id );
7495
7496 EXCEPTION
7497 WHEN OTHERS THEN
7498 l_sql_code := sqlcode;
7499
7500 update_jit_status
7501 ( p_status => l_jit_err_status,
7502 p_err_code => l_sql_code,
7503 p_media_item_id => l_media_item_id );
7504
7505 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7506
7507 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7508 FND_MSG_PUB.Add_Exc_Msg
7509 ( p_pkg_name => G_PKG_NAME,
7510 p_procedure_name => l_api_name );
7511 END IF;
7512
7513 FND_MSG_PUB.Count_And_Get
7514 ( p_count => x_msg_count,
7515 p_data => x_msg_data );
7516
7517 END csc_prof_jit;
7518
7519
7520 /*******************************************
7521 GET_PROFILE_VALUE_RESP
7522 Added this procedure for JIT enhancement -- Bug 4535407
7523 Returns Profile Option value at the responsibility level.
7524 This function has been added as API fnd_profile.value_specific is
7525 not defined at form level FND_PROFILE package (pld)
7526 ********************************************/
7527
7528 FUNCTION get_profile_value_resp
7529 ( p_profile_name VARCHAR2,
7530 p_resp_id NUMBER,
7531 p_resp_appl_id NUMBER,
7532 p_user_id NUMBER
7533 )
7534 RETURN VARCHAR2
7535 IS
7536 l_prof_value VARCHAR2(255);
7537 BEGIN
7538 l_prof_value := FND_PROFILE.value_specific
7539 ( name => p_profile_name,
7540 responsibility_id => p_resp_id,
7541 application_id => p_resp_appl_id,
7542 user_id => p_user_id
7543 );
7544 RETURN l_prof_value;
7545 END get_profile_value_resp;
7546
7547 /******************************
7548 * Begin Utilities Definition *
7549 ******************************/
7550
7551 --
7552 -- Build_Rule
7553 -- Construct the rule as a SQL statement for an indicator check
7554 -- IN
7555 -- check_id - profile check identifier
7556 -- OUT
7557 -- rule - sql statement that returns 0 or 1 row (0 for false, 1 for true)
7558 --
7559 PROCEDURE Build_Rule
7560 ( acct_flag IN VARCHAR2,
7561 chk_id IN NUMBER,
7562 chk_level IN VARCHAR2,
7563 rule OUT NOCOPY VARCHAR2 )
7564 IS
7565
7566 v_blk_id Number;
7567 v_blk_level Varchar2(10);
7568 CURSOR rules_csr IS
7569 SELECT logical_operator, left_paren, block_id, comparison_operator,
7570 expression, expr_to_block_id, right_paren
7571 FROM csc_prof_check_rules_vl
7572 WHERE check_id = chk_id;
7573
7574 cursor blk_crs is
7575 select block_level from
7576 csc_prof_blocks_b
7577 where block_id=v_blk_id;
7578
7579 BEGIN
7580 --
7581 -- Construct indicator check rule as a SQL statement as follows:
7582 -- SELECT 1
7583 -- FROM dual
7584 -- WHERE {condition}
7585 -- <logical_operator> {condition}
7586 -- ...
7587 --
7588 -- A {condition} has the following form:
7589 -- <left_paren> EXISTS ( {subquery} ) <right_paren>
7590 --
7591 -- A {subquery} has the following three forms:
7592 -- SELECT 1
7593 -- FROM csc_prof_block_results
7594 -- WHERE block_id = <block_id>
7595 -- AND party_id = <party_id>
7596 -- AND value <comparison_operator> [<expression1> [AND <expression2>]]
7597 --
7598 rule := 'SELECT 1 FROM dual WHERE';
7599
7600 IF chk_level = 'ACCOUNT' THEN
7601
7602 FOR rules_rec IN rules_csr LOOP
7603 v_blk_id:=rules_rec.block_id;
7604 open blk_crs;
7605 fetch blk_crs into v_blk_level;
7606 close blk_crs;
7607 if v_blk_level='PARTY' then
7608 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
7609 rules_rec.left_paren ||
7610 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
7611 rules_rec.block_id || ' AND party_id = :party_id' ||
7612 ' AND cust_account_id IS NULL AND value ' || rules_rec.comparison_operator;
7613
7614 IF rules_rec.expression IS NOT NULL THEN
7615 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
7616 rule := rule || ' ' || rules_rec.expression;
7617 END IF;
7618 ELSE
7619 rule := rule || '(SELECT value FORM csc_prof_block_results WHERE block_id = '||
7620 rules_rec.expr_to_block_id || ' AND cust_account_id IS NULL )';
7621 END IF;
7622
7623 rule := rule || ')' || rules_rec.right_paren;
7624
7625 ELSIF v_blk_level='ACCOUNT' then
7626
7627 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
7628 rules_rec.left_paren ||
7629 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
7630 rules_rec.block_id || ' AND party_id = :party_id' ||
7631 ' AND cust_account_id = :cust_account_id' ||
7632 ' AND value ' || rules_rec.comparison_operator;
7633
7634 IF rules_rec.expression IS NOT NULL THEN
7635 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
7636 rule := rule || ' ' || rules_rec.expression;
7637 END IF;
7638 ELSE
7639 rule := rule || '(SELECT value FORM csc_prof_block_results WHERE block_id = '
7640 ||
7641 rules_rec.expr_to_block_id || ' AND party_id = :party_id' ||
7642 ' AND cust_account_id = :cust_account_id)' ;
7643 END IF;
7644
7645 rule := rule || ')' || rules_rec.right_paren;
7646 end if;
7647 END LOOP;
7648
7649 ELSIF (chk_level='PARTY' OR chk_level='CONTACT' or chk_level='EMPLOYEE') THEN
7650
7651 FOR rules_rec IN rules_csr LOOP
7652 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
7653 rules_rec.left_paren ||
7654 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
7655 rules_rec.block_id || ' AND party_id = :party_id' ||
7656 ' AND cust_account_id IS NULL AND value ' || rules_rec.comparison_operator;
7657
7658 IF rules_rec.expression IS NOT NULL THEN
7659 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
7660 rule := rule || ' ' || rules_rec.expression;
7661 END IF;
7662 ELSE
7663 rule := rule || '(SELECT value FORM csc_prof_block_results WHERE block_id = '||
7664 rules_rec.expr_to_block_id || ' AND cust_account_id IS NULL )';
7665 END IF;
7666
7667 rule := rule || ')' || rules_rec.right_paren;
7668 END LOOP;
7669
7670 END IF;
7671
7672 END Build_Rule;
7673
7674
7675 --
7676 -- Set_Context
7677 -- Set procedure context (for stack trace).
7678 -- IN
7679 -- proc_name - procedure/function name
7680 -- arg1 - first IN argument
7681 -- argn - n'th IN argument
7682 --
7683 PROCEDURE Set_Context
7684 ( proc_name IN VARCHAR2,
7685 arg1 IN VARCHAR2 DEFAULT '*none*',
7686 arg2 IN VARCHAR2 DEFAULT '*none*',
7687 arg3 IN VARCHAR2 DEFAULT '*none*',
7688 arg4 IN VARCHAR2 DEFAULT '*none*',
7689 arg5 IN VARCHAR2 DEFAULT '*none*' )
7690 IS
7691 BEGIN
7692
7693 -- Start with procedure name.
7694 IF (proc_name IS NOT NULL) THEN
7695 fnd_file.put(FND_FILE.LOG, proc_name||'(');
7696 END IF;
7697
7698 -- Add all defined args.
7699 IF (arg1 <> '*none*') THEN
7700 fnd_file.put(FND_FILE.LOG, arg1);
7701 END IF;
7702 IF (arg2 <> '*none*') THEN
7703 fnd_file.put(FND_FILE.LOG, ', '||arg2);
7704 END IF;
7705 IF (arg3 <> '*none*') THEN
7706 fnd_file.put(FND_FILE.LOG, ', '||arg3);
7707 END IF;
7708 IF (arg4 <> '*none*') THEN
7709 fnd_file.put(FND_FILE.LOG, ', '||arg4);
7710 END IF;
7711 IF (arg5 <> '*none*') THEN
7712 fnd_file.put(FND_FILE.LOG, ', '||arg5);
7713 END IF;
7714
7715 IF (proc_name IS NOT NULL) THEN
7716 fnd_file.put_line(FND_FILE.LOG, ')');
7717 ELSE
7718 fnd_file.new_line(FND_FILE.LOG);
7719 END IF;
7720
7721 EXCEPTION
7722 WHEN UTL_FILE.INVALID_FILEHANDLE THEN
7723 fnd_message.set_name('CSC', 'CSC_PROFILE_INVALID_FILEHANDLE');
7724 warning_msg := fnd_message.get;
7725 WHEN UTL_FILE.INVALID_OPERATION THEN
7726 fnd_message.set_name('CSC', 'CSC_PROFILE_INVALID_OPERATION');
7727 warning_msg := fnd_message.get;
7728 WHEN UTL_FILE.WRITE_ERROR THEN
7729 fnd_message.set_name('CSC', 'CSC_PROFILE_WRITE_ERROR');
7730 warning_msg := fnd_message.get;
7731 END Set_Context;
7732
7733
7734 --
7735 -- Utility to delete all records in the tables
7736 --
7737 PROCEDURE Table_Delete IS
7738 Begin
7739
7740 IP_Block_Id.delete;
7741 IP_Check_Id.delete;
7742 IP_Party_Id.delete;
7743 IP_Account_Id.delete;
7744 IP_Value.delete;
7745 IP_Currency.delete;
7746
7747 UP_Grade.delete;
7748 UP_Block_Id.delete;
7749 UP_Check_Id.delete;
7750 UP_Party_Id.delete;
7751 UP_Account_Id.delete;
7752 UP_Value.delete;
7753 UP_Currency.delete;
7754 UP_Grade.delete;
7755
7756 IA_Block_Id.delete;
7757 IA_Check_Id.delete;
7758 IA_Party_Id.delete;
7759 IA_Account_Id.delete;
7760 IA_Value.delete;
7761 IA_Currency.delete;
7762
7763 UA_Grade.delete;
7764 UA_Block_Id.delete;
7765 UA_Check_Id.delete;
7766 UA_Party_Id.delete;
7767 UA_Account_Id.delete;
7768 UA_Value.delete;
7769 UA_Currency.delete;
7770 UA_Grade.delete;
7771
7772 -- Relationship Plan tables
7773 plan_id_plan_table.delete;
7774 check_id_plan_table.delete;
7775 party_id_plan_table.delete;
7776 account_id_plan_table.delete;
7777
7778
7779 END Table_Delete;
7780
7781 FUNCTION Calc_Threshold
7782 ( p_val VARCHAR2,
7783 p_low_val VARCHAR2,
7784 p_high_val VARCHAR2,
7785 p_data_type VARCHAR2,
7786 p_chk_u_l_flag VARCHAR2
7787 )
7788 RETURN VARCHAR2
7789 IS
7790 RESULT VARCHAR2(3);
7791 val VARCHAR2(240) := null;
7792 BEGIN
7793 IF p_low_val is NULL AND p_high_val IS NULL THEN
7794 RETURN 'Y';
7795 END IF;
7796
7797 IF p_data_type IN ('NUMBER', 'DATE') THEN
7798 IF p_data_type = 'NUMBER' THEN
7799 IF p_val IS NULL Then
7800 val := '0';
7801 ELSE
7802 val := p_val;
7803 END IF;
7804
7805 IF p_chk_u_l_flag ='U' THEN
7806 IF to_number(val) > to_number(p_high_val) THEN
7807 Result := 'Y';
7808 Else
7809 Result := 'N';
7810 End If;
7811 Elsif p_chk_u_l_flag = 'L' Then
7812 If to_number(val) < to_number(p_low_val) then
7813 Result := 'Y';
7814 Else
7815 Result := 'N';
7816 End If;
7817 Else
7818 Result := 'N';
7819 End If;
7820
7821 ELSE
7822 IF val IS NOT NULL THEN
7823 If p_chk_u_l_flag = 'U' Then
7824 If val > p_high_val then
7825 Result := 'Y';
7826 Else
7827 Result := 'N';
7828 End If;
7829 Elsif p_chk_u_l_flag = 'L' Then
7830 If val < p_low_val then
7831 Result := 'Y';
7832 Else
7833 Result := 'N';
7834 End If;
7835 Else
7836 Result := 'N';
7837 End If;
7838 End if;
7839 END IF;
7840 END IF;
7841 RETURN RESULT;
7842 END Calc_Threshold;
7843
7844 FUNCTION Format_Mask
7845 ( p_curr_code VARCHAR2,
7846 p_data_type VARCHAR2,
7847 p_val VARCHAR2,
7848 p_fmt_mask VARCHAR2
7849 )
7850 RETURN VARCHAR2
7851 IS
7852 val VARCHAR2(240);
7853 v_format_date DATE;
7854 BEGIN
7855 val := p_val;
7856 IF (p_curr_code IS NULL OR p_curr_code = '') THEN
7857 IF (p_fmt_mask IS NOT NULL OR p_fmt_mask <> '') THEN
7858 IF (p_data_type = 'NUMBER') THEN
7859 val := To_char(To_number(nvl(p_val, '0')), p_fmt_mask);
7860 ELSIF (p_data_type = 'DATE') THEN
7861 v_format_date := to_date(p_val,'DD-MM-YYYY');
7862 val := To_char(v_format_date, p_fmt_mask);
7863 END IF;
7864 END IF;
7865 END IF;
7866
7867 IF p_data_type = 'NUMBER' AND val IS NULL THEN
7868 val := '0';
7869 END IF;
7870
7871 RETURN val;
7872 END Format_Mask;
7873
7874 FUNCTION rating_color
7875 (p_chk_id NUMBER,
7876 p_party_id NUMBER,
7877 p_account_id NUMBER,
7878 p_val VARCHAR2,
7879 p_data_type VARCHAR2,
7880 p_column VARCHAR2,
7881 p_count NUMBER
7882 )
7883 RETURN VARCHAR2
7884 IS
7885 v_val NUMBER;
7886 val VARCHAR2(240) := p_val;
7887 v_color_code VARCHAR2(240);
7888 v_rating_code VARCHAR2(240);
7889 grd VARCHAR2(240);
7890 BEGIN
7891 IF nvl(g_check_id, -99) = nvl(p_chk_id, -99)
7892 AND nvl(g_party_id, -99) = nvl(p_party_id, -99)
7893 AND nvl(g_account_id, -99) = nvl(p_account_id, -99)
7894 AND nvl(g_value, -99) = nvl(p_val, -99)
7895 THEN
7896 NULL;
7897 ELSE
7898 IF p_count > 0 THEN
7899 IF (p_data_type IN ('NUMBER', 'DATE')) THEN
7900 IF p_data_type = 'NUMBER' Then
7901 IF val IS NULL Then
7902 val := '0';
7903 END IF;
7904 v_val := to_number(val);
7905 val := to_char(v_val);
7906
7907 FOR a in 1..p_count LOOP
7908 IF v_val BETWEEN nvl(rating_tbl(a).low_value, v_val) AND nvl(rating_tbl(a).high_value, v_val) THEN
7909 v_color_code := rating_tbl(a).color_code;
7910 v_rating_code := rating_tbl(a).rating_code;
7911 grd := rating_tbl(a).grade;
7912 EXIT;
7913 END IF;
7914 END LOOP;
7915 ELSE
7916 IF val IS NOT NULL THEN
7917 FOR a IN 1..p_count LOOP
7918 IF val BETWEEN nvl(rating_tbl(a).low_value, val) AND nvl(rating_tbl(a).high_value, val) THEN
7919 v_color_code := rating_tbl(a).color_code;
7920 v_rating_code := rating_tbl(a).rating_code;
7921 grd := rating_tbl(a).grade;
7922 EXIT;
7923 END IF;
7924 END LOOP;
7925 END IF;
7926 END IF;
7927 END IF;
7928 END IF;
7929
7930 /* populate the global variables */
7931 g_check_id := p_chk_id;
7932 g_party_id := p_party_id;
7933 g_account_id := p_account_id;
7934 g_value := p_val;
7935 g_color_code := v_color_code;
7936 g_rating := v_rating_code;
7937 g_grade := grd;
7938
7939 END IF;
7940
7941 IF p_column = 'COLOR' THEN
7942 RETURN g_color_code;
7943 ELSIF p_column = 'RATING' THEN
7944 RETURN g_rating;
7945 ELSIF p_column = 'GRADE' THEN
7946 RETURN g_grade;
7947 END IF;
7948
7949 END rating_color;
7950
7951 /* This procedure reverts back to the state before the start of the concurrent program */
7952 PROCEDURE Handle_Exception IS
7953 -- varlables for getting CSC schema name
7954 v_schema_status VARCHAR2(1);
7955 v_industry VARCHAR2(1);
7956 v_schema_name VARCHAR2(30);
7957 v_get_appl BOOLEAN;
7958 BEGIN
7959 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
7960
7961
7962 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
7963 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
7964 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
7965
7966 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
7967 END Handle_Exception;
7968
7969
7970 /******************************
7971 * End Utilities Definition *
7972 ******************************/
7973
7974 END CSC_Profile_Engine_PKG;