[Home] [Help]
PACKAGE BODY: APPS.CSC_PROFILE_ENGINE_PKG
Source
1 PACKAGE BODY CSC_Profile_Engine_PKG AS
2 /* $Header: csccpepb.pls 120.37 2010/10/22 05:18:48 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 -- Changed the Run_Engine procedure for ER#8473903
61 -- Added the p_psite_id parameter for Party_site_id input.
62 -- The above parameter is used to process the Customer profiles at site level.
63 --- --------------------------------------------------
64
65 PROCEDURE Run_Engine (p_errbuf OUT NOCOPY VARCHAR2,
66 p_retcode OUT NOCOPY NUMBER,
67 p_party_id IN NUMBER,
68 p_acct_id IN NUMBER,
69 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
70 p_group_id IN NUMBER
71 ) IS
72
73 v_block_count NUMBER := 0;
74 v_check_count NUMBER := 0;
75 v_errbuf Varchar2(240);
76 v_retcode Number;
77 v_exception BOOLEAN;
78 v_date Date := null;
79 --l_period_date Date := null;
80 l_up_total Number := 0;
81 l_ip_total Number := 0;
82 l_ua_total NUmber := 0;
83 l_ia_total Number := 0;
84 l_us_total Number := 0; -- added by spamujul for ER#8473903
85 l_is_total Number := 0; -- added by spamujul for ER#8473903
86 l_custom_hook_enabled varchar2(1); /* added for Custom Hook Enhancement */
87 l_ref_cursor csc_utils.Party_Ref_Cur_Type; /* added for Custom Hook Enhancement */
88 l_party_rec csc_utils.Prof_Rec_Type; /* added for Custom Hook Enhancement */
89 l_party_id Number;
90
91 BEGIN
92
93 -- Default user and login IDs
94 --user_id := fnd_global.user_id;
95 --login_id := fnd_global.login_id;
96
97 l_up_total := 0;
98 l_ip_total := 0;
99 l_ua_total := 0;
100 l_ia_total := 0;
101 l_us_total := 0; -- added by spamujul for ER#8473903
102 l_is_total := 0; -- added by spamujul for ER#8473903
103 table_delete;
104
105 /*************************************************************************************
106 START OF CUSTOM HOOK ENHANCEMENT
107 CSC_PROF_PARTY_SQL_CUHK will be invoked to get the select statement for fetching party
108 records by the profile engine.
109 *************************************************************************************/
110 l_custom_hook_enabled := 'N';
111 IF p_party_id IS NULL THEN
112 IF JTF_USR_HKS.ok_to_execute('CSC_PROF_PARTY_SQL_CUHK','GET_PARTY_SQL_PRE','B','C') THEN
113 l_custom_hook_enabled := 'Y';
114 CSC_PROF_PARTY_SQL_CUHK.Get_Party_Sql_Pre(l_ref_cursor);
115 LOOP
116 FETCH l_ref_cursor INTO l_party_id;
117 EXIT WHEN l_ref_cursor%NOTFOUND;
118 IF l_party_id is not NULL then
119 IF p_group_id is NULL then
120 Evaluate_Checks3(l_party_id,
121 null,
122 null,
123 NULL, -- added by spamujul for ER#8473903
124 v_errbuf,
125 v_retcode
126 );
127 ELSE /* group_id is not null */
128 Evaluate_Checks2(l_party_id,
129 null,
130 NULL, -- added by spamujul for ER#8473903
131 p_group_id,
132 'N',
133 v_errbuf,
134 v_retcode
135 );
136 END IF;
137 END IF;
138 p_errbuf := v_errbuf;
139 p_retcode := v_retcode;
140 END LOOP;
141 ELSE
142 l_custom_hook_enabled := 'N';
143 END IF; /* IF JTF_USR_HKS.ok_to_execute */
144 END IF; /* IF p_party_id IS NULL */
145
146 IF l_custom_hook_enabled = 'N' THEN
147 /*Existing logic is used */
148 /*******************************************************************************************
149 END OF CUSTOM HOOK ENHANCEMENT
150 ********************************************************************************************/
151 IF (p_party_id is null and p_group_id is NULL ) THEN
152 -- Populate the check results table for all parties and accounts for type 'B'
153 Evaluate_Checks1_Var;
154 IF g_check_no_batch = 'Y' THEN
155 -- Call Evaluate_Blocks1_No_Batch and Evaluate_Checks1_No_Batch
156 -- to process profile variables with no batch sql stmnt for type Variable ('B')
157 Evaluate_Blocks1_No_Batch(l_up_total,
158 l_ip_total,
159 l_ua_total,
160 l_ia_total
161 ,l_us_total, -- added by spamujul for ER#8473903
162 l_is_total -- added by spamujul for ER#8473903
163 );
164 Evaluate_Checks1_No_Batch(v_errbuf, v_retcode);
165 p_errbuf := v_errbuf;
166 p_retcode := v_retcode;
167 END IF;
168 -- Populate the check results table for all parties and accounts for type 'T'
169 Evaluate_Checks1_Rule(v_errbuf, v_retcode);
170 p_errbuf := v_errbuf;
171 p_retcode := v_retcode;
172 -- Call Relationship Plan Engine
173 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, null, null);
174 ELSIF (p_party_id IS NOT NULL and p_group_id IS NOT NULL) THEN
175 -- Evaluate for this party Alone, only for Valid checks present in the given group
176 Evaluate_Checks2(p_party_id => p_party_id,
177 p_acct_id => p_acct_id,
178 p_psite_id => p_psite_id,-- added by spamujul for ER#8473903
179 p_group_id => p_group_id,
180 p_critical_flag => 'N',
181 errbuf => v_errbuf,
182 retcode => v_retcode);
183 party_id_plan_table(1) := p_party_id;
184 account_id_plan_table(1) := p_acct_id;
185 -- Commented the following code for bug 8471528 by spamujul
186 --Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, null); -- added by mpathani for bug 6928322
187 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, p_acct_id); -- Fix bug 8471528 by spamujul
188 ELSIF (p_party_id IS NOT NULL and p_group_id is null ) THEN
189 -- Evaluate for all Valid Checks and For this party ;
190 Evaluate_Checks3(p_party_id,
191 p_acct_id,
192 p_psite_id, -- added by spamujul for ER#8473903
193 p_group_id,
194 v_errbuf,
195 v_retcode
196 );
197 party_id_plan_table(1) := p_party_id;
198 account_id_plan_table(1) := p_acct_id;
199 -- Commented the following code for bug 8471528 by spamujul
200 --Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, null); -- added by mpathani for bug 6928322
201 Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, p_party_id, p_acct_id); -- Fix bug 8471528 by spamujul
202
203 ELSIF (p_party_id IS NULL and p_group_id is NOT null ) THEN -- added for 1850508
204 -- Assume Group is given, but party and Account are null , Process for all parties
205 -- This is specifically for cases, where the customers can start 'n' concurrent pgms
206 -- for different groups.
207 -- Populate the check results table for all parties and accounts
208 Evaluate_Checks4_Var(p_Group_id);
209 -- Call Evaluate_Blocks4_No_Batch and Evaluate_Checks4_No_Batch
210 -- to process profile variables with no batch sql stmnt
211 IF g_check_no_batch = 'Y' THEN
212 Evaluate_Blocks4_No_Batch(l_up_total,
213 l_ip_total,
214 l_ua_total,
215 l_ia_total,
216 l_us_total, -- added by spamujul for ER#8473903
217 l_is_total, -- added by spamujul for ER#8473903
218 p_group_id);
219 Evaluate_Checks4_No_Batch(v_errbuf, v_retcode, p_Group_id);
220 p_errbuf := v_errbuf;
221 p_retcode := v_retcode;
222 END IF;
223 Evaluate_Checks4_Rule(v_errbuf, v_retcode, p_Group_id);
224 p_errbuf := v_errbuf;
225 p_retcode := v_retcode;
226
227 -- Call Relationship Plan Engine
228 -- Check How to call Plans engine
229 -- Csc_Plan_Assignment_Pkg.Run_Plan_Engine (v_errbuf, v_retcode, null, null, null, null);
230 END IF;
231 END IF; /* IF l_custom_hook_enabled = 'N' */
232 Exception
233 when others then
234 table_delete;
235 g_error := sqlcode || ' ' || sqlerrm;
236 fnd_file.put_line(fnd_file.log , g_error);
237 END Run_Engine;
238
239 --
240 -- Bug 1942032 to run engine as a concurrent program - overloaded procedure when
241 -- Account Id is removed from conc. program parameters.
242 --
243 PROCEDURE Run_Engine (p_errbuf OUT NOCOPY VARCHAR2,
244 p_retcode OUT NOCOPY NUMBER,
245 p_party_id IN NUMBER,
246 p_group_id IN NUMBER ) Is
247
248 begin
249 run_engine(p_errbuf => p_errbuf,
250 p_retcode => p_retcode,
251 p_party_id => p_party_id,
252 p_acct_id => NULL,
253 p_psite_id => NULL, -- added by spamujul for ER#8473903
254 p_group_id => p_group_id
255 );
256 End Run_engine;
257
258 /* added the overloaded procedure for JIT enhancement */
259 PROCEDURE Run_Engine_jit (p_party_id IN NUMBER,
260 p_acct_id IN NUMBER,
261 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
262 p_group_id IN NUMBER,
263 p_critical_flag IN VARCHAR2,
264 p_party_type IN VARCHAR2 DEFAULT 'CUSTOMER'
265 ) IS
266 v_errbuf VARCHAR2(240);
267 v_retcode NUMBER;
268 BEGIN
269 /* If party_type is customer -then g_dashboard_for_employee is Y else N */
270 IF upper(p_party_type) ='CUSTOMER' then
271 g_dashboard_for_employee := 'N';
272 elsif upper(p_party_type) ='EMPLOYEE' then
273 g_dashboard_for_employee := 'Y';
274 else
275 g_dashboard_for_employee := ' ';
276 end if;
277 Evaluate_Checks2(p_party_id => p_party_id,
278 p_acct_id => p_acct_id,
279 p_psite_id => p_psite_id, -- added by spamujul for ER#8473903
280 p_group_id => p_group_id,
281 p_critical_flag => p_critical_flag,
282 errbuf => v_errbuf,
283 retcode => v_retcode);
284 END Run_Engine_jit;
285
286 /* Overloaded procedure for R12 Employee HelpDesk Modifications */
287 PROCEDURE Run_Engine_All (p_errbuf OUT NOCOPY VARCHAR2,
288 p_retcode OUT NOCOPY NUMBER,
289 p_party_type IN VARCHAR2,
290 p_party_id IN NUMBER,
291 p_group_id IN NUMBER
292 )
293 IS
294 BEGIN
295 /* If party_type is customer -then g_dashboard_for_employee is Y else N */
296 IF upper(p_party_type) ='CUSTOMER' then
297 g_dashboard_for_employee := 'N';
298 elsif upper(p_party_type) ='EMPLOYEE' then
299 g_dashboard_for_employee := 'Y';
300 else
301 g_dashboard_for_employee := ' ';
302 end if;
303 run_engine(p_errbuf => p_errbuf,
304 p_retcode => p_retcode,
305 p_party_id => p_party_id,
306 p_acct_id => null,
307 p_psite_id => NULL, -- added by spamujul for ER#8473903
308 p_group_id => p_group_id);
309 END Run_Engine_All;
310 --
311 -- Evaluate_Checks1_Var
312 -- Loop through all checks and evaluate the results
313 -- for each customer and account for type 'B'(Variable)
314 -- Processing if only Batch_Sql_Stmnt is not null
315 -- if check_id is null, party_id is null, account_id is null
316 -- and block_id is null
317 --
318
319 PROCEDURE Evaluate_Checks1_Var
320 IS
321 chk_id Number;
322 chk_name Varchar2(240);
323 sel_blk_id Number;
324 data_type Varchar2(90);
325 fmt_mask Varchar2(90);
326 rule Varchar2(32767);
327 chk_u_l_flag Varchar2(3);
328 Thd_grade Varchar2(9);
329 truncate_flag Varchar2(1) := 'N';
330 blk_id Number := null;
331 sql_stmt Varchar2(2000) := null;
332 batch_sql_stmnt Varchar2(4000) := null;
333 curr_code Varchar2(15) := null;
334 v_party_in_sql Number := 0;
335 v_acct_in_sql Number := 0;
336 v_psite_in_sql Number:=0; -- Added by spamujul for ER#8473903
337 v_party_id Number;
338 v_check_level Varchar2(10);
339 curr_date DATE := SYSDATE;
340 insert_stmnt VARCHAR2(4000);
341 insert_stmnt_sum VARCHAR2(4000);
342 insert_stmnt_final VARCHAR2(4000);
343 insert_stmnt_party VARCHAR2(4000);
344 insert_stmnt_acct VARCHAR2(4000);
345 --Fix bug#7329039 by mpathani
346 --select_clause VARCHAR2(100);
347 --v_select_clause VARCHAR2(100);
348 select_clause VARCHAR2(2000);
349 v_select_clause VARCHAR2(2000);
350 Range_Low_Value VARCHAR2(240);
351 Range_High_Value VARCHAR2(240);
352 val VARCHAR2(240) := null;
353 /* variables for columns of insert statement */
354 c_fmt_mask VARCHAR2(1000);
355 c_grade VARCHAR2(1000);
356 c_curr_code VARCHAR2(1000);
357 c_threshold VARCHAR2(1000);
358 c_rating VARCHAR2(1000);
359 c_color VARCHAR2(1000);
360 v_count NUMBER;
361 v_chk_count NUMBER;
362 v_batch_count NUMBER;
363 -- varlables for getting CSC schema name
364 v_schema_status VARCHAR2(1);
365 v_industry VARCHAR2(1);
366 v_schema_name VARCHAR2(30);
367 v_get_appl BOOLEAN;
368 -- variables to build the batch sql for summation
369 v_select_pos number;
370 v_select_length number;
371 v_from_pos number;
372 v_from_sum varchar2(2000);
373 v_select_sum varchar2(2000) := 'SELECT hz.party_id, null,NULL, '; -- Added 'NULL' for party_site_id by spamujul for ER#8473903
374 v_group_pos number;
375 v_group varchar2(2000) := 'GROUP BY hz.party_id';
376 return_status varchar2(50);
377 -- variables for handling contact profile variables
378 v_where_clause_no_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE IN (' || '''' || 'PERSON' || '''' || ', ' || '''' || 'ORGANIZATION' || '''' || ')' ;
379 v_where_clause_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE = ' || '''' ||'PARTY_RELATIONSHIP'|| '''' ;
380 TABLESEGMENT_FULL EXCEPTION;
381 INDEXSEGMENT_FULL EXCEPTION;
382 SNAPSHOT_TOO_OLD EXCEPTION;
383 INTERNAL_ERROR EXCEPTION;
384 SUMMATION_ERROR EXCEPTION;
385 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
386 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
387 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
388 PRAGMA EXCEPTION_INIT(INTERNAL_ERROR, -600);
389 checks_csr checks_cur_var;
390
391 CURSOR block_csr IS
392 SELECT block_id,
393 sql_stmnt,
394 batch_sql_stmnt,
395 currency_code,
396 select_clause
397 FROM csc_prof_blocks_b a
398 WHERE a.block_id = sel_blk_id;
399
400 Cursor val_csr3 IS
401 Select Range_Low_Value,
402 Range_High_Value
403 From csc_prof_check_ratings
404 Where check_id = chk_id
405 and check_rating_grade = thd_grade;
406
407 CURSOR rating_crs IS
408 SELECT rating_code,
409 check_rating_grade,
410 color_code,
411 range_low_value,
412 range_high_value
413 FROM csc_prof_check_ratings
414 WHERE check_id = chk_id;
415
416 BEGIN
417 COMMIT;
418 EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
419 EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES=TRUE';
420 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
421 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS NOLOGGING';
422 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS2_T NOLOGGING';
423 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS1_T NOLOGGING';
424 SELECT count(*)
425 INTO v_chk_count
426 FROM csc_prof_check_results;
427
428 SELECT count(*)
429 INTO v_batch_count
430 FROM CSC_PROF_BATCH_RESULTS2_T;
431
432 IF v_chk_count = 0 AND v_batch_count <> 0 THEN
433 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
434 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
435 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
436 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
437 INTO csc_prof_check_results
438 (check_results_id,
439 check_id,
440 party_id,
441 cust_account_id,
442 party_site_id, -- Added by spamujul for ER#8473903
443 value,
444 currency_code,
445 grade,
446 created_by,
447 creation_date,
448 last_updated_by,
449 last_update_date,
450 last_update_login,
451 results_threshold_flag,
452 rating_code,
453 color_code
454 )
455 SELECT check_results_id,
456 check_id,
457 party_id,
458 cust_account_id,
459 party_site_id, -- Added by spamujul for ER#8473903
460 value,
461 currency_code,
462 grade,
463 created_by,
464 creation_date,
465 last_updated_by,
466 last_update_date,
467 last_update_login,
468 results_threshold_flag,
469 rating_code,
470 color_code
471 FROM CSC_PROF_BATCH_RESULTS2_T;
472 COMMIT;
473 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
474 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
475 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
476 END IF;
477 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
478 IF g_dashboard_for_contact IS NULL THEN
479 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
480 END IF;
481 /* R12 Employee HelpDesk Modifications */
482 /* If g_dashboard_for_employee ='Y' then honour only employee level checks.If
483 'N',honour party_level checks with option for contact level fetched from profile option */
484 IF g_dashboard_for_employee ='Y' THEN
485 OPEN checks_csr FOR
486 SELECT check_id,
487 select_block_id,
488 check_level,
489 data_type,
490 format_mask,
491 check_upper_lower_flag,
492 threshold_grade
493 FROM csc_prof_checks_b
494 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
495 AND Nvl(end_date_active, Sysdate)
496 AND select_type = 'B'
497 AND check_level IN ('EMPLOYEE');
498 ELSIF g_dashboard_for_employee ='N' THEN
499 IF g_dashboard_for_contact = 'Y' THEN
500 OPEN checks_csr FOR
501 SELECT check_id,
502 select_block_id,
503 check_level,
504 data_type,
505 format_mask,
506 check_upper_lower_flag,
507 threshold_grade
508 FROM csc_prof_checks_b
509 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
510 AND Nvl(end_date_active, Sysdate)
511 AND select_type = 'B'
512 AND check_level IN ('PARTY',
513 'ACCOUNT',
514 'CONTACT',
515 'SITE' -- Added by spamujul for ER#8473903
516 );
517 ELSIF g_dashboard_for_contact = 'N' THEN
518 OPEN checks_csr FOR
519 SELECT check_id
520 , select_block_id,
521 check_level,
522 data_type,
523 format_mask,
524 check_upper_lower_flag,
525 threshold_grade
526 FROM csc_prof_checks_b
527 WHERE SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
528 AND Nvl(end_date_active, Sysdate)
529 AND select_type = 'B'
530 AND check_level IN ('PARTY',
531 'ACCOUNT'
532 ,'SITE' -- Added by spamujul for ER#8473903
533 );
534 END IF;
535 END IF;
536 /* End of R12 Employee HelpDesk Modifications */
537 LOOP
538 FETCH checks_csr
539 INTO chk_id,
540 sel_blk_id,
541 v_check_level,
542 data_type,
543 fmt_mask,
544 chk_u_l_flag,
545 Thd_grade;
546 EXIT WHEN checks_csr%notfound;
547 Open block_csr;
548 Fetch block_csr
549 INTO blk_id,
550 sql_stmt,
551 batch_sql_stmnt,
552 curr_code,
553 select_clause;
554 Close block_csr;
555 IF batch_sql_stmnt IS NOT NULL THEN
556 IF v_check_level = 'CONTACT' THEN
557 IF g_dashboard_for_contact = 'Y' THEN
558 batch_sql_stmnt := UPPER(batch_sql_stmnt);
559 batch_sql_stmnt := REPLACE(batch_sql_stmnt, v_where_clause_no_rel, v_where_clause_rel);
560 END IF;
561 END IF;
562 IF sql_stmt IS NOT NULL Then
563 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
564 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
565 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
566 Else
567 v_party_in_sql := 0;
568 v_acct_in_sql := 0;
569 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
570 End if;
571 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
572
573 --insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || batch_sql_stmnt; -- Commented the following code by spamujul for ER#8473903
574 -- Added the following code by spamujul for ER#8473903
575 insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,PARTY_SITE_ID,VALUE) ' || batch_sql_stmnt;
576 EXECUTE IMMEDIATE (insert_stmnt);
577 IF v_acct_in_sql <> 0 AND v_check_level = 'PARTY' THEN
578 v_select_pos := NULL;
579 v_select_length := NULL;
580 v_from_pos := NULL;
581 v_from_sum := NULL;
582 v_select_sum := 'SELECT hz.party_id, null,NULL, '; -- Added 'NULL' for party_site_id by spamujul for ER#8473903
583 v_select_clause := NULL;
584 v_group_pos := NULL;
585 v_select_clause := rtrim(ltrim(UPPER(select_clause)));
586 v_select_sum := v_select_sum || v_select_clause;
587 v_select_pos := instr(upper(batch_sql_stmnt), v_select_clause);
588 v_select_length := length(v_select_clause);
589 v_from_pos := v_select_pos + v_select_length;
590 v_from_sum := substr(batch_sql_stmnt, v_from_pos);
591 v_group_pos := instr(upper(v_from_sum), 'GROUP BY HZ.PARTY_ID');
592 v_from_sum := substr(v_from_sum, 1, v_group_pos -1);
593 v_from_sum := v_from_sum || v_group;
594 v_select_sum := v_select_sum || ' ' || v_from_sum;
595 -- validate the sql statement
596 csc_core_utils_pvt.validate_sql_stmnt( p_sql_stmnt => v_select_sum,
597 x_return_status => return_status);
598 IF return_status = 'S' THEN
599 -- insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || v_select_sum ; -- Commented the following code by spamujul for ER#8473903
600 -- Added the following code by spamujul for ER#8473903
601 insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,PARTY_SITE_ID,VALUE) ' || v_select_sum ;
602 EXECUTE IMMEDIATE (insert_stmnt_sum);
603 ELSE
604 RAISE SUMMATION_ERROR;
605 fnd_file.put_line(fnd_file.log, 'Summation SQL failed for check_id' || chk_id);
606 END IF;
607 END IF;
608 IF v_check_level = 'PARTY' THEN
609 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
610 ACCOUNT_ID,
611 PARTY_SITE_ID,-- Added by spamujul for ER#8473903
612 VALUE)
613 SELECT party_id,
614 NULL,
615 NULL, -- Added by spamujul for ER#8473903
616 NULL
617 FROM hz_parties hz
618 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c
619 WHERE c.party_id = hz.party_id
620 AND C.PARTY_SITE_ID IS NULL -- Added by spamujul for ER#8473903
621 )
622 AND hz.status = 'A'
623 AND hz.party_type IN ('PERSON', 'ORGANIZATION')
624 ;
625 ELSIF v_check_level = 'CONTACT' THEN
626 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
627 ACCOUNT_ID,
628 PARTY_SITE_ID,-- Added by spamujul for ER#8473903
629 VALUE)
630 SELECT party_id,
631 NULL,
632 NULL, -- Added 'NULL' for party_site_id by spamujul for ER#8473903
633 NULL
634 FROM hz_parties hz
635 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c
636 WHERE c.party_id = hz.party_id
637 AND C.PARTY_SITE_ID IS NULL -- Added by spamujul for ER#8473903
638 )
639 AND hz.status = 'A'
640 AND hz.party_type = 'PARTY_RELATIONSHIP' ;
641 ELSIF v_check_level = 'ACCOUNT' THEN
642 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
643 ACCOUNT_ID,
644 PARTY_SITE_ID,-- Added by spamujul for ER#8473903
645 VALUE
646 )
647 SELECT party_id,
648 cust_account_id,
649 NULL, -- Added 'NULL' for party_site_id by spamujul for ER#8473903
650 NULL
651 FROM hz_cust_accounts hz
652 WHERE NOT EXISTS (SELECT 1
653 FROM CSC_PROF_BATCH_RESULTS1_T c
654 WHERE c.account_id = hz.cust_account_id
655 AND C.PARTY_SITE_ID IS NULL -- Added by spamujul for ER#8473903
656 )
657 AND hz.status = 'A'
658 ;
659 ELSIF v_check_level = 'EMPLOYEE' THEN
660 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
661 ACCOUNT_ID,
662 PARTY_SITE_ID,-- Added by spamujul for ER#8473903
663 VALUE)
664 SELECT person_id,
665 NULL,
666 NULL , -- Added 'NULL' for party_site_id by spamujul for ER#8473903
667 NULL
668 FROM per_workforce_current_x hz
669 WHERE NOT EXISTS (SELECT 1
670 FROM CSC_PROF_BATCH_RESULTS1_T c
671 WHERE c.party_id = hz.person_id
672 AND C.PARTY_SITE_ID IS NULL -- Added by spamujul for ER#8473903
673 ) ;
674
675 -- Begin fix by spamujul for ER#8473903
676 ELSIF v_check_level = 'SITE' THEN
677 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
678 ACCOUNT_ID,
679 PARTY_SITE_ID,
680 VALUE)
681 SELECT hz.party_id,
682 NULL,
683 hz.party_site_id ,
684 NULL
685 FROM hz_party_sites hz
686 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c
687 WHERE c.party_id = hz.party_id
688 and c.party_site_id = hz.party_site_id)
689 AND hz.status = 'A'
690 AND nvl(hz.created_by_module,'XXX') <> 'SR_ONETIME';
691 -- End fix by spamujul for ER#8473903
692 END IF;
693
694 OPEN val_csr3;
695 FETCH val_csr3
696 INTO Range_Low_Value,
697 Range_High_Value;
698 IF val_csr3%NOTFOUND THEN
699 Range_Low_Value := NULL;
700 Range_High_Value := NULL;
701 END IF;
702 CLOSE val_csr3;
703
704 SELECT COUNT(*) INTO v_count FROM csc_prof_check_ratings
705 WHERE check_id = chk_id;
706
707 rating_tbl.delete;
708
709 IF v_count > 0 THEN
710 OPEN rating_crs;
711 FOR a in 1..v_count LOOP
712 FETCH rating_crs INTO rating_tbl(a);
713 END LOOP;
714 CLOSE rating_crs;
715 END IF;
716
717 c_fmt_mask := 'CSC_Profile_Engine_PKG.format_mask(' ||
718 '''' || curr_code || '''' || ',' ||
719 '''' || data_type || '''' || ','||
720 'value, '||
721 ''''|| fmt_mask || '''' || ')' ;
722
723 c_grade := 'CSC_Profile_Engine_PKG.rating_color(' ||
724 chk_id || ', ' ||
725 'party_id, account_id,party_site_id, value, ' || -- included 'party_site_id' by spamujul for ER#8473903
726 '''' || data_type || '''' || ', ' ||
727 '''' || 'GRADE' || '''' ||', ' ||
728 '''' || v_count || '''' || ')' ;
729
730 c_curr_code := '''' || curr_code || '''';
731
732 c_threshold := 'CSC_Profile_Engine_PKG.calc_threshold(' ||
733 'value, '||
734 '''' || Range_Low_Value || '''' || ', '||
735 '''' || Range_High_Value || '''' || ', '||
736 '''' || data_type || '''' || ', ' ||
737 '''' || chk_u_l_flag || '''' || ')' ;
738
739 c_rating := 'CSC_Profile_Engine_PKG.rating_color(' ||
740 chk_id || ', ' ||
741 'party_id, account_id,party_site_id, value, ' || -- included 'party_site_id' by spamujul for ER#8473903
742 '''' || data_type || '''' || ', ' ||
743 '''' || 'RATING' || '''' ||', ' ||
744 '''' || v_count || '''' || ')' ;
745
746 c_color := 'CSC_Profile_Engine_PKG.rating_color(' ||
747 chk_id || ', ' ||
748 'party_id, account_id,party_site_id, value, ' || -- included 'party_site_id' by spamujul for ER#8473903
749 '''' || data_type || '''' || ', ' ||
750 '''' || 'COLOR' || '''' ||', ' ||
751 '''' || v_count || '''' || ')' ;
752
753
754 IF v_check_level = 'ACCOUNT' THEN
755 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
756 '(check_results_id, check_id, party_id, cust_account_id, party_site_id,value, currency_code, grade, '|| -- Inlcuded 'party_site_id' for ER#8473903
757 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
758 ' results_threshold_flag, rating_code, color_code)' ||
759 ' SELECT csc_prof_check_results_s.nextval, '
760 || chk_id || ', party_id, account_id,party_site_id, ' -- Inlcuded 'party_site_id' by spamujul for ER#8473903
761 || c_fmt_mask ||', '
762 || c_curr_code || ', '
763 || c_grade
764 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
765 || c_threshold ||', '
766 || c_rating || ', '
767 || c_color
768 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(account_id, -999999) <> -999999 and PARTY_SITE_ID IS NULL'; -- Inlcuded 'party_site_id' IS NULL FOR ER#8473903
769 -- Begin fix by spamujul for ER# 8473903
770 ELSIF v_check_level = 'SITE' THEN
771 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
772 -- '(check_results_id, check_id, party_id, cust_account_id,value, currency_code, grade, '||
773 -- added party_site_id in the below line for ER#8473903
774 '(check_results_id, check_id, party_id, cust_account_id,party_site_id, value, currency_code, grade, '|| -- Inlcuded 'party_site_id' for ER#8473903
775 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
776 ' results_threshold_flag, rating_code, color_code)' ||
777 ' SELECT csc_prof_check_results_s.nextval, '
778 -- || chk_id || ', party_id, account_id, '
779 -- added party_site_id in the below line for ER#8473903
780 || chk_id || ', party_id, account_id,party_site_id, ' -- Inlcuded 'party_site_id' by spamujul for ER#8473903
781 || c_fmt_mask ||', '
782 || c_curr_code || ', '
783 || c_grade
784 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
785 || c_threshold ||', '
786 || c_rating || ', '
787 || c_color
788 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(party_site_id, -999999) <> -999999 and account_id IS NULL';
789 -- End fix by spamujul for ER#8473903
790 ELSE
791 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
792 '(check_results_id, check_id, party_id, cust_account_id, party_site_id,value, currency_code, grade, '|| -- Inlcuded 'party_site_id' for ER#8473903
793 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
794 ' results_threshold_flag, rating_code, color_code)' ||
795 ' SELECT csc_prof_check_results_s.nextval, '
796 || chk_id || ', party_id, account_id,party_site_id ,'
797 || c_fmt_mask ||', '
798 || c_curr_code || ', '
799 || c_grade
800 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
801 || c_threshold ||', '
802 || c_rating || ', '
803 || c_color
804 ||' FROM CSC_PROF_BATCH_RESULTS1_T where account_id IS NULL and PARTY_SITE_ID IS NULL'; -- Inlcuded 'party_site_id' IS NULL FOR ER#8473903';
805 END IF;
806 EXECUTE IMMEDIATE (insert_stmnt_final);
807 COMMIT;
808 ELSE
809 /* set the global variable to Y to indicate that profile checks without batch sql exist */
810 g_check_no_batch := 'Y';
811 END IF ; /* batch_sql_stmnt IS NOT NULL */
812 END LOOP;
813 CLOSE checks_csr;
814
815 -- INSERT /*+ PARALLEL (CSC_PROF_BATCH_RESULTS2_T, 12) */
816 /* INTO CSC_PROF_BATCH_RESULTS2_T
817 (check_results_id,
818 check_id,
819 party_id,
820 cust_account_id,
821 party_site_id, -- Added by spamujul for ER#8473903
822 value,
823 currency_code,
824 grade,
825 created_by,
826 creation_date,
827 last_updated_by,
828 last_update_date,
829 last_update_login,
830 results_threshold_flag,
831 rating_code,
832 color_code
833 )
834 SELECT
835 check_results_id,
836 check_id,
837 party_id,
838 cust_account_id,
839 party_site_id, -- Added by spamujul for ER#8473903
840 value,
841 currency_code,
842 grade,
843 created_by,
844 creation_date,
845 last_updated_by,
846 last_update_date,
847 last_update_login,
848 results_threshold_flag,
849 rating_code,
850 color_code
851 FROM csc_prof_check_results a
852 WHERE NOT EXISTS (SELECT null FROM csc_prof_checks_b b
853 WHERE a.check_id = b.check_id
854 AND b.select_type = 'B');
855 */
856 COMMIT;
857
858 EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| v_schema_name ||'.csc_prof_check_results';
859
860
861 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
862 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
863 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
864
865 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
866 INTO csc_prof_check_results
867 (check_results_id,
868 check_id,
869 party_id,
870 cust_account_id,
871 party_site_id, -- Added by spamujul for ER#8473903
872 value,
873 currency_code,
874 grade,
875 created_by,
876 creation_date,
877 last_updated_by,
878 last_update_date,
879 last_update_login,
880 results_threshold_flag,
881 rating_code,
882 color_code
883 )
884 SELECT
885 check_results_id,
886 check_id,
887 party_id,
888 cust_account_id,
889 party_site_id, -- Added by spamujul for ER#8473903
890 value,
891 currency_code,
892 grade,
893 created_by,
894 creation_date,
895 last_updated_by,
896 last_update_date,
897 last_update_login,
898 results_threshold_flag,
899 rating_code,
900 color_code
901 FROM CSC_PROF_BATCH_RESULTS2_T;
902
903 COMMIT;
904
905 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
906 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
907 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
908
909 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
910
911 EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
912 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
913
914 EXCEPTION
915 when Tablesegment_full then
916 CSC_Profile_Engine_PKG.Handle_Exception;
917 g_error := sqlcode || ' ' || sqlerrm;
918 fnd_file.put_line(fnd_file.log , g_error);
919 App_Exception.raise_exception;
920
921 when Indexsegment_full then
922 CSC_Profile_Engine_PKG.Handle_Exception;
923 g_error := sqlcode || ' ' || sqlerrm;
924 fnd_file.put_line(fnd_file.log , g_error);
925 App_Exception.raise_exception;
926
927 when SNAPSHOT_TOO_OLD THEN
928 CSC_Profile_Engine_PKG.Handle_Exception;
929 g_error := sqlcode || ' ' || sqlerrm;
930 fnd_file.put_line(fnd_file.log,g_error);
931 App_Exception.raise_exception;
932
933 WHEN INTERNAL_ERROR THEN
934 CSC_Profile_Engine_PKG.Handle_Exception;
935 g_error := sqlcode || ' ' || sqlerrm;
936 fnd_file.put_line(fnd_file.log,g_error);
937 App_Exception.raise_exception;
938
939 WHEN SUMMATION_ERROR THEN
940 CSC_Profile_Engine_PKG.Handle_Exception;
941 set_context('Evaluate_Checks1_Var',
942 'Summation SQL failed for chk_id => '||to_char(chk_id));
943 RAISE;
944
945 WHEN OTHERS THEN
946 CSC_Profile_Engine_PKG.Handle_Exception;
947 g_error := sqlcode || ' ' || sqlerrm;
948 fnd_file.put_line(fnd_file.log , g_error);
949
950 END Evaluate_Checks1_Var;
951 --
952 -- Evaluate_Checks1_No_Batch
953 -- Loop through all checks and evaluate the results
954 -- for each customer and account for type variable ('B')
955 -- The procedure is called if the Batch_Sql_Stmnt is null (for backward compatibility)
956 -- if check_id is null, party_id is null, account_id is null
957 -- and block_id is null
958 --
959 PROCEDURE Evaluate_Checks1_No_Batch ( errbuf OUT NOCOPY VARCHAR2,
960 retcode OUT NOCOPY NUMBER
961 ) IS
962
963 chk_id Number;
964 chk_name Varchar2(240);
965 cparty_id Number;
966 ccust_acct_id Number;
967 ccust_psite_id Number; -- added by spamujul for ER#8473903
968 sel_type Varchar2(3);
969 sel_blk_id Number;
970 data_type Varchar2(90);
971 fmt_mask Varchar2(90);
972 rule Varchar2(32767);
973 Chk_u_l_flag Varchar2(3);
974 Thd_grade Varchar2(9);
975 truncate_flag Varchar2(1) := 'N';
976 acct_flag Varchar2(1);
977 blk_id Number := null;
978 blk_name Varchar2(240) := null;
979 sql_stmt Varchar2(2000) := null;
980 curr_code Varchar2(15) := null;
981 v_party_in_sql Number := 0;
982 v_acct_in_sql Number := 0;
983 v_psite_in_sql Number :=0; -- added by spamujul for ER#8473903
984 v_check_level Varchar2(10);
985 l_for_insert varchar2(1) := 'Y';
986 l_for_party varchar2(1) := 'Y';
987 l_for_psite Varchar2(1) := 'N';-- added by spamujul for ER#8473903
988 l_up_total Number := 0;
989 l_ip_total Number := 0;
990 l_ua_total Number := 0;
991 l_ia_total Number := 0;
992 l_us_total Number :=0; -- added by spamujul for ER#8473903
993 l_is_total Number :=0; -- added by spamujul for ER#8473903
994 v_party_id Number;
995
996
997 CURSOR checks_csr IS
998 SELECT check_id, select_type, select_block_id,
999 data_type, format_mask,check_upper_lower_flag,
1000 threshold_grade, check_level
1001 FROM csc_prof_checks_b a
1002 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks)
1003 AND select_type = 'B'
1004 AND CHECK_ID =42
1005 AND check_level IN ('PARTY',
1006 'ACCOUNT',
1007 'SITE' --Added 'SITE' by spamujul for ER#8473903
1008 )
1009 AND EXISTS (SELECT null
1010 FROM csc_prof_blocks_b b
1011 WHERE a.select_block_id = b.block_id
1012 AND b.batch_sql_stmnt IS NULL)
1013 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
1014 AND Nvl(end_date_active, SYSDATE);
1015
1016 CURSOR cparty_csr IS
1017 SELECT party_id
1018 FROM hz_parties
1019 WHERE status = 'A'
1020 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
1021 -- Person, ORG added for 1850508
1022
1023 CURSOR caccount_csr IS
1024 SELECT party_id, cust_account_id
1025 FROM hz_cust_accounts
1026 WHERE party_id=v_party_id
1027 AND status = 'A' ;
1028 -- Begin fix by spamujul for NCR ER#8473903
1029 CURSOR cpsite_csr IS
1030 SELECT party_id, party_site_id
1031 FROM hz_party_sites
1032 WHERE party_id=v_party_id
1033 AND status = 'A'
1034 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
1035 -- End fix by spamujul for NCR ER#8473903
1036 CURSOR block_csr IS
1037 SELECT block_id, sql_stmnt, currency_code
1038 FROM csc_prof_blocks_b a
1039 WHERE a.block_id = sel_blk_id;
1040
1041 cid number;
1042 val VARCHAR2(240) := null;
1043
1044 BEGIN
1045 /* R12 Employee HelpDesk Modifications */
1046
1047 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
1048 IF g_dashboard_for_employee = 'N' THEN
1049 l_ip_total := 0;
1050 l_up_total := 0;
1051 l_ia_total := 0;
1052 l_ua_total := 0;
1053 l_us_total := 0; -- added by spamujul for ER#8473903
1054 l_is_total := 0; -- added by spamujul for ER#8473903
1055 OPEN checks_csr;
1056 LOOP
1057 FETCH checks_csr
1058 INTO chk_id,
1059 sel_type,
1060 sel_blk_id,
1061 data_type,
1062 fmt_mask,
1063 chk_u_l_flag,
1064 Thd_grade,
1065 v_check_level;
1066 EXIT WHEN checks_csr%notfound;
1067 Open block_csr;
1068 Fetch block_csr
1069 INTO blk_id,
1070 sql_stmt,
1071 curr_code;
1072 Close block_csr;
1073
1074 IF sql_stmt IS NOT NULL Then
1075 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
1076 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
1077 v_psite_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1); -- added by spamujul for ER#8473903
1078 Else
1079 v_party_in_sql := 0;
1080 v_acct_in_sql := 0;
1081 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
1082 End if;
1083 Begin
1084 cid := dbms_sql.open_cursor;
1085 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
1086 dbms_sql.define_column(cid,1,val,240);
1087 OPEN cparty_csr;
1088 LOOP
1089 FETCH cparty_csr INTO cparty_id;
1090 EXIT WHEN cparty_csr%notfound;
1091 If v_check_level='PARTY' Then
1092 Evaluate_One_Check(truncate_flag,
1093 chk_id,
1094 cparty_id,
1095 null,
1096 NULL, -- added by spamujul for ER#8473903
1097 v_check_level,
1098 sel_type,
1099 sel_blk_id,
1100 data_type,
1101 fmt_mask,
1102 chk_u_l_flag,
1103 Thd_grade,
1104 rule,
1105 blk_id,
1106 sql_stmt,
1107 curr_code,
1108 l_up_total,
1109 l_ip_total,
1110 l_ua_total,
1111 l_ia_total ,
1112 l_us_total, -- added by spamujul for ER#8473903
1113 l_is_total, -- added by spamujul for ER#8473903
1114 cid);
1115 End if;
1116 /* added this condition for Bug 1937730*/
1117 v_party_id:=cparty_id;
1118 IF v_check_level = 'ACCOUNT' Then
1119 If (v_acct_in_sql = 0) Then
1120 NULL;
1121 Else
1122 OPEN caccount_csr;
1123 LOOP
1124 FETCH caccount_csr
1125 INTO cparty_id, ccust_acct_id;
1126 EXIT WHEN caccount_csr%notfound;
1127 Evaluate_One_Check(truncate_flag,
1128 chk_id,
1129 cparty_id,
1130 ccust_acct_id,
1131 NULL, -- added by spamujul for ER#8473903
1132 v_check_level,
1133 sel_type,
1134 sel_blk_id,
1135 data_type,
1136 fmt_mask,
1137 chk_u_l_flag,
1138 Thd_grade,
1139 rule,
1140 blk_id,
1141 sql_stmt,
1142 curr_code,
1143 l_up_total,
1144 l_ip_total,
1145 l_ua_total,
1146 l_ia_total ,
1147 l_us_total, -- added by spamujul for ER#8473903
1148 l_is_total, -- added by spamujul for ER#8473903
1149 cid);
1150 END LOOP;
1151 CLOSE caccount_csr;
1152 End if; -- added for 1850508
1153 END IF;
1154 -- Begin fix by spamujul for ER#8473903
1155 IF v_check_level = 'SITE' THEN
1156 IF (v_psite_in_sql = 0) THEN
1157 NULL;
1158 ELSE
1159 OPEN cpsite_csr ;
1160 LOOP
1161 FETCH cpsite_csr
1162 INTO cparty_id,
1163 ccust_psite_id;
1164 EXIT WHEN cpsite_csr%notfound;
1165 Evaluate_One_Check(truncate_flag,
1166 chk_id,
1167 cparty_id,
1168 NULL,
1169 ccust_psite_id,
1170 v_check_level,
1171 sel_type,
1172 sel_blk_id,
1173 data_type,
1174 fmt_mask,
1175 chk_u_l_flag,
1176 Thd_grade,
1177 rule,
1178 blk_id,
1179 sql_stmt,
1180 curr_code,
1181 l_up_total,
1182 l_ip_total,
1183 l_ua_total
1184 , l_ia_total ,
1185 l_us_total,
1186 l_is_total,
1187 cid
1188 );
1189 END LOOP;
1190 CLOSE cpsite_csr;
1191 END IF;
1192 END IF;
1193 -- End fix by spamujul for ER#8473903
1194 END LOOP;
1195 CLOSE cparty_csr;
1196 IF (dbms_sql.is_open(cid)) THEN
1197 dbms_sql.close_cursor(cid);
1198 end if;
1199 Exception
1200 When others then
1201 IF (dbms_sql.is_open(cid)) THEN
1202 dbms_sql.close_cursor(cid);
1203 end if;
1204 set_context('Evaluate_Checks1_No_Batch',
1205 'chk_id=>'||to_char(chk_id),
1206 'party_id=>'||to_char(cparty_id),
1207 'account_id=>'||to_char(ccust_acct_id)
1208 ,'party_site_id=>'||to_char(ccust_psite_id) -- added by spamujul for ER#8473903
1209 );
1210 g_error := sqlcode || ' ' || sqlerrm;
1211 set_context(NULL, g_error);
1212 End;
1213 END LOOP;
1214 CLOSE checks_csr;
1215 -- check if there are still records to be inserted
1216 IF l_ip_total <> 0 THEN
1217 l_for_insert := 'Y';
1218 l_for_party := 'Y';
1219 l_for_psite := 'N';-- added by spamujul for ER#8473903
1220 Insert_Update_Check_Results(l_ip_total,
1221 l_for_insert,
1222 l_for_party
1223 ,l_for_psite -- added by spamujul for ER#8473903
1224 );
1225 l_ip_total :=0;
1226 END IF;
1227 -- check if there are still records to be updated
1228 IF l_up_total <> 0 THEN
1229 l_for_insert := 'N';
1230 l_for_party := 'Y';
1231 l_for_psite := 'N';-- added by spamujul for ER#8473903
1232 Insert_Update_Check_Results(l_up_total,
1233 l_for_insert,
1234 l_for_party
1235 ,l_for_psite -- added by spamujul for ER#8473903
1236 );
1237 l_up_total :=0;
1238 END IF;
1239
1240 -- check if there are still records to be inserted
1241 IF l_ia_total <> 0 THEN
1242 l_for_insert := 'Y';
1243 l_for_party := 'N';
1244 l_for_psite := 'N';-- added by spamujul for ER#8473903
1245 Insert_Update_Check_Results(l_ia_total,
1246 l_for_insert,
1247 l_for_party
1248 ,l_for_psite -- added by spamujul for ER#8473903
1249 );
1250 l_ia_total :=0;
1251 END IF;
1252 -- check if there are still records to be updated
1253 IF l_ua_total <> 0 THEN
1254 l_for_insert := 'N';
1255 l_for_party := 'N';
1256 l_for_psite := 'N';-- added by spamujul for ER#8473903
1257 Insert_Update_Check_Results(l_ua_total,
1258 l_for_insert,
1259 l_for_party
1260 ,l_for_psite -- added by spamujul for ER#8473903
1261 );
1262 l_ua_total :=0;
1263 END IF;
1264 -- Begin fix by spamujul for ER#8473903
1265 IF l_is_total <> 0 THEN
1266 l_for_insert := 'Y';
1267 l_for_party := 'N';
1268 l_for_psite := 'Y';
1269 Insert_Update_Check_Results(l_is_total,
1270 l_for_insert,
1271 l_for_party
1272 ,l_for_psite -- added by spamujul for ER#8473903
1273 );
1274 l_is_total :=0;
1275 END IF;
1276 IF l_us_total <> 0 THEN
1277 l_for_insert := 'N';
1278 l_for_party := 'N';
1279 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1280 Insert_Update_Check_Results(l_us_total,
1281 l_for_insert,
1282 l_for_party
1283 ,l_for_psite -- added by spamujul for ER#8473903
1284 );
1285 l_us_total :=0;
1286 END IF;
1287 -- End fix by spamujul ER#8473903
1288 IF g_dashboard_for_contact IS NULL THEN
1289 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
1290 END IF;
1291
1292 IF g_dashboard_for_contact = 'Y' THEN
1293 l_ip_total := 0;
1294 l_up_total := 0;
1295 l_ia_total := 0;
1296 l_ua_total := 0;
1297 l_us_total := 0; -- added by spamujul for ER#8473903
1298 l_is_total := 0; -- added by spamujul for ER#8473903
1299
1300 Evaluate_blocks_Rel(p_up_total => l_up_total,
1301 p_ip_total => l_ip_total,
1302 p_ua_total => l_ua_total,
1303 p_ia_total => l_ia_total,
1304 p_us_total => l_us_total, -- added by spamujul for ER#8473903
1305 p_is_total => l_is_total , -- added by spamujul for ER#8473903
1306 p_no_batch_sql => 'Y' );
1307
1308 Evaluate_checks_Rel(errbuf => errbuf,
1309 retcode => retcode,
1310 p_no_batch_sql => 'Y');
1311 END IF;
1312
1313 COMMIT;
1314
1315 -- Return 0 for successful completion, 1 for warnings, 2 for error
1316 IF (error_flag) THEN
1317 errbuf := Sqlerrm;
1318 retcode := 2;
1319 ELSIF (warning_msg <> '') THEN
1320 errbuf := warning_msg;
1321 retcode := 1;
1322 ELSE
1323 errbuf := '';
1324 retcode := 0;
1325 END IF;
1326
1327 ELSIF g_dashboard_for_employee = 'Y' THEN
1328 l_ip_total := 0;
1329 l_up_total := 0;
1330 l_ia_total := 0;
1331 l_ua_total := 0;
1332 l_us_total := 0; -- added by spamujul for ER#8473903
1333 l_is_total := 0; -- added by spamujul for ER#8473903
1334
1335 Evaluate_blocks_Emp(p_up_total => l_up_total,
1336 p_ip_total => l_ip_total,
1337 p_ua_total => l_ua_total,
1338 p_ia_total => l_ia_total,
1339 p_us_total => l_us_total, -- added by spamujul for ER#8473903
1340 p_is_total => l_is_total, -- added by spamujul for ER#8473903
1341 p_no_batch_sql => 'Y' );
1342
1343 Evaluate_checks_Emp(errbuf => errbuf,
1344 retcode => retcode,
1345 p_no_batch_sql => 'Y');
1346 END IF;
1347
1348 COMMIT;
1349
1350 -- Return 0 for successful completion, 1 for warnings, 2 for error
1351 IF (error_flag) THEN
1352 errbuf := Sqlerrm;
1353 retcode := 2;
1354 ELSIF (warning_msg <> '') THEN
1355 errbuf := warning_msg;
1356 retcode := 1;
1357 ELSE
1358 errbuf := '';
1359 retcode := 0;
1360 END IF;
1361
1362 IF (debug) THEN
1363 fnd_file.close;
1364 END IF;
1365
1366 EXCEPTION
1367 WHEN OTHERS THEN
1368 ROLLBACK;
1369 IF (checks_csr%isopen) THEN
1370 CLOSE checks_csr;
1371 END IF;
1372 IF (cparty_csr%isopen) THEN
1373 CLOSE cparty_csr;
1374 END IF;
1375 IF (caccount_csr%isopen) THEN
1376 CLOSE caccount_csr;
1377 END IF;
1378 -- Begin fix by spamujul for ER#8473903
1379 IF (cpsite_csr%isopen) THEN
1380 CLOSE cpsite_csr;
1381 END IF;
1382 -- End fix by spamujul for ER#8473903
1383 IF (debug) THEN
1384 fnd_file.close;
1385 END IF;
1386
1387 -- Retrieve error message into errbuf
1388 errbuf := Sqlerrm;
1389
1390 -- Return 2 for error
1391 retcode := 2;
1392
1393 g_error := sqlcode || ' ' || sqlerrm;
1394 fnd_file.put_line(fnd_file.log , g_error);
1395
1396 /* End of R12 Employee HelpDesk Modifications */
1397
1398 END Evaluate_Checks1_No_Batch;
1399
1400 --
1401 -- Evaluate_Checks1_Rule
1402 -- Loop through all checks and evaluate the results
1403 -- for each customer and account for type 'T' (Rules)
1404 -- if check_id is null, party_id is null, account_id is null
1405 -- and block_id is null
1406 --
1407 PROCEDURE Evaluate_Checks1_Rule ( errbuf OUT NOCOPY VARCHAR2,
1408 retcode OUT NOCOPY NUMBER
1409 ) IS
1410
1411 chk_id Number;
1412 chk_name Varchar2(240);
1413 cparty_id Number;
1414 ccust_acct_id Number;
1415 cpsite_id Number; -- added by spamujul for ER#8473903
1416 sel_type Varchar2(3);
1417 sel_blk_id Number;
1418 data_type Varchar2(90);
1419 fmt_mask Varchar2(90);
1420 rule Varchar2(32767);
1421 chk_u_l_flag Varchar2(3);
1422 Thd_grade Varchar2(9);
1423 truncate_flag Varchar2(1) := 'N';
1424 acct_flag Varchar2(1);
1425 blk_id Number := null;
1426 blk_name Varchar2(240) := null;
1427 sql_stmt Varchar2(2000) := null;
1428 curr_code Varchar2(15) := null;
1429 v_party_in_sql Number := 0;
1430 v_acct_in_sql Number := 0;
1431 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
1432 l_for_insert varchar2(1) := 'Y';
1433 l_for_party varchar2(1) := 'Y';
1434 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
1435 l_up_total Number := 0;
1436 l_ip_total Number := 0;
1437 l_ua_total Number := 0;
1438 l_ia_total Number := 0;
1439 l_us_total Number := 0; -- added by spamujul for ER#8473903
1440 l_is_total Number := 0; -- added by spamujul for ER#8473903
1441 /* added this variable for Bug 1937730*/
1442 v_party_id Number;
1443 v_check_level Varchar2(10);
1444 v_chk_count NUMBER := 0;
1445
1446 CURSOR checks_csr IS
1447 SELECT check_id,
1448 select_type,
1449 select_block_id,
1450 check_level,
1451 data_type,
1452 format_mask,
1453 check_upper_lower_flag,
1454 threshold_grade
1455 FROM csc_prof_checks_b
1456 WHERE Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1457 AND Nvl(end_date_active, Sysdate)
1458 AND check_level IN ('PARTY',
1459 'ACCOUNT'
1460 ,'SITE' -- added by spamujul for ER#8473903
1461 )
1462 AND select_type = 'T'
1463 ORDER BY check_id;
1464
1465 CURSOR checks_count IS
1466 SELECT COUNT(*)
1467 FROM csc_prof_checks_b
1468 WHERE Sysdate BETWEEN Nvl(start_date_active, Sysdate)
1469 AND Nvl(end_date_active, Sysdate)
1470 AND select_type = 'T';
1471
1472 CURSOR cparty_csr IS
1473 SELECT party_id
1474 FROM hz_parties
1475 WHERE status = 'A'
1476 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
1477 -- Person, ORG added for 1850508
1478
1479 /* added this condition party_id=v_party_id for Bug 1937730*/
1480 CURSOR caccount_csr IS
1481 SELECT party_id, cust_account_id
1482 FROM hz_cust_accounts
1483 WHERE party_id=v_party_id
1484 AND status = 'A';
1485 -- Begin fix by spamujul for ER#8473903
1486 CURSOR cpsite_csr IS
1487 SELECT party_id, party_site_id
1488 FROM hz_party_sites
1489 WHERE party_id=v_party_id
1490 AND status = 'A'
1491 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
1492 -- End fix by spamujul for ER#8473903
1493
1494 CURSOR block_csr IS
1495 SELECT block_id, sql_stmnt, currency_code
1496 FROM csc_prof_blocks_b a
1497 WHERE a.block_id = sel_blk_id;
1498
1499 -- added for 1850508
1500 cid number;
1501 val VARCHAR2(240) := null;
1502
1503 BEGIN
1504
1505 /* R12 Employee HelpDesk Modifications */
1506
1507 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
1508 IF g_dashboard_for_employee = 'N' THEN
1509 OPEN checks_count;
1510 FETCH checks_count INTO v_chk_count;
1511 CLOSE checks_count;
1512 IF v_chk_count > 0 THEN
1513 /* blocks will be evaluated only if the type is T */
1514 -- Populate the block results table for all parties and accounts
1515 Evaluate_Blocks1(l_up_total,
1516 l_ip_total,
1517 l_ua_total,
1518 l_ia_total
1519 ,l_us_total, -- added by spamujul for ER#8473903
1520 l_is_total -- added by spamujul for ER#8473903
1521 );
1522 END IF;
1523 l_ip_total := 0;
1524 l_up_total := 0;
1525 l_ia_total := 0;
1526 l_ua_total := 0;
1527 l_us_total := 0; -- added by spamujul for ER#8473903
1528 l_ia_total := 0; -- added by spamujul for ER#8473903
1529 OPEN checks_csr;
1530 LOOP
1531 FETCH checks_csr
1532 INTO chk_id,
1533 sel_type,
1534 sel_blk_id,
1535 v_check_level,
1536 data_type,
1537 fmt_mask,
1538 chk_u_l_flag,
1539 Thd_grade;
1540 EXIT WHEN checks_csr%notfound;
1541 IF (sel_type = 'T') THEN
1542 acct_flag := 'N';
1543 build_rule(acct_flag,chk_id,v_check_level, rule);
1544 ELSIF (sel_type = 'B') THEN
1545 Open block_csr;
1546 Fetch block_csr
1547 INTO blk_id,
1548 sql_stmt,
1549 curr_code;
1550 Close block_csr;
1551
1552 /* Uncommented this condition for Bug 1937730*/
1553 /*****************/
1554 IF sql_stmt IS NOT NULL Then
1555 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
1556 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
1557 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
1558 Else
1559 v_party_in_sql := 0;
1560 v_acct_in_sql := 0;
1561 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
1562 End if;
1563 /***************/
1564 END IF;
1565 /* This begin, end exception is added mainly for exception handing for Bug 1980004*/
1566 Begin
1567 IF ((sel_type='B' ) OR (sel_type='T') ) Then -- Only valid types
1568 cid := dbms_sql.open_cursor;
1569 if (sel_type = 'B') then
1570 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
1571 elsif (sel_type = 'T') then
1572 dbms_sql.parse(cid, rule, dbms_sql.native);
1573 end if;
1574 dbms_sql.define_column(cid,1,val,240);
1575 -- pass the cid
1576 OPEN cparty_csr;
1577 LOOP
1578 FETCH cparty_csr
1579 INTO cparty_id;
1580 EXIT WHEN cparty_csr%notfound;
1581 If v_check_level='PARTY' Then
1582 Evaluate_One_Check(truncate_flag,
1583 chk_id,
1584 cparty_id,
1585 null,
1586 NULL, -- added by spamujul for ER#8473903
1587 v_check_level,
1588 sel_type,
1589 sel_blk_id,
1590 data_type,
1591 fmt_mask,
1592 chk_u_l_flag,
1593 Thd_grade,
1594 rule,
1595 blk_id,
1596 sql_stmt,
1597 curr_code,
1598 l_up_total,
1599 l_ip_total,
1600 l_ua_total,
1601 l_ia_total ,
1602 l_us_total, -- added by spamujul for ER#8473903
1603 l_is_total, -- added by spamujul for ER#8473903
1604 cid);
1605 End if;
1606 /* added this condition for Bug 1937730*/
1607 v_party_id:=cparty_id;
1608 IF (sel_type = 'T') THEN
1609 acct_flag := 'Y';
1610 build_rule(acct_flag,chk_id,v_check_level, rule);
1611 END IF;
1612 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
1613 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- added for 1850508
1614 -- Check can be made only for 'B' types,
1615 -- If acct is not present as bind variable, the sql might return wrong
1616 -- rows (party level counts) at account leve.
1617
1618 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
1619 --(sel_type='T') ) Then
1620 NULL;
1621 Else
1622 -- Loop through all parties with accounts
1623 -- added for 1850508
1624 --Open Cursor
1625 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
1626 OPEN caccount_csr;
1627 LOOP
1628 FETCH caccount_csr
1629 INTO cparty_id, ccust_acct_id;
1630 EXIT WHEN caccount_csr%notfound;
1631 Evaluate_One_Check(truncate_flag,
1632 chk_id,
1633 cparty_id,
1634 ccust_acct_id,
1635 NULL, -- added by spamujul for ER#8473903
1636 v_check_level,
1637 sel_type,
1638 sel_blk_id,
1639 data_type,
1640 fmt_mask,
1641 chk_u_l_flag,
1642 Thd_grade,
1643 rule,
1644 blk_id,
1645 sql_stmt,
1646 curr_code,
1647 l_up_total,
1648 l_ip_total,
1649 l_ua_total,
1650 l_ia_total ,
1651 l_us_total, -- added by spamujul for ER#8473903
1652 l_is_total, -- added by spamujul for ER#8473903
1653 cid);
1654 END LOOP;
1655 CLOSE caccount_csr;
1656 End if; -- added for 1850508
1657 END IF;
1658 -- Begin fix by spamujul for ER#8473903
1659 v_party_id:=cparty_id;
1660 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
1661 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
1662 NULL;
1663 ELSE
1664 cid := dbms_sql.open_cursor;
1665 IF (sel_type = 'B') THEN
1666 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
1667 ELSIF (sel_type = 'T') THEN
1668 dbms_sql.parse(cid, rule, dbms_sql.native);
1669 END IF;
1670 dbms_sql.define_column(cid,1,val,240);
1671 OPEN cpsite_csr;
1672 LOOP
1673 FETCH cpsite_csr
1674 INTO cparty_id,
1675 cpsite_id;
1676 EXIT WHEN cpsite_csr%notfound;
1677 Evaluate_One_Check(truncate_flag,
1678 chk_id,
1679 cparty_id,
1680 null,
1681 cpsite_id,
1682 v_check_level,
1683 sel_type,
1684 sel_blk_id,
1685 data_type,
1686 fmt_mask,
1687 chk_u_l_flag,
1688 Thd_grade,
1689 rule,
1690 blk_id,
1691 sql_stmt,
1692 curr_code,
1693 l_up_total,
1694 l_ip_total,
1695 l_ua_total
1696 , l_ia_total ,
1697 l_us_total,
1698 l_is_total,
1699 cid);
1700 END LOOP;
1701 CLOSE cpsite_csr;
1702 IF (dbms_sql.is_open(cid)) THEN
1703 dbms_sql.close_cursor(cid);
1704 END IF;
1705 END IF;
1706 END IF;
1707 -- End fix by spamujul for ER#8473903
1708 END LOOP;
1709 CLOSE cparty_csr;
1710 IF (dbms_sql.is_open(cid)) THEN
1711 dbms_sql.close_cursor(cid);
1712 end if;
1713 END IF;
1714 Exception
1715 When others then
1716 IF (dbms_sql.is_open(cid)) THEN
1717 dbms_sql.close_cursor(cid);
1718 end if;
1719 set_context('Evaluate_Checks1_Rule',
1720 'chk_id=>'||to_char(chk_id),
1721 'party_id=>'||to_char(cparty_id),
1722 'account_id=>'||to_char(ccust_acct_id));
1723 g_error := sqlcode || ' ' || sqlerrm;
1724 set_context(NULL, g_error);
1725 End;
1726 END LOOP;
1727 CLOSE checks_csr;
1728 -- check if there are still records to be inserted
1729 IF l_ip_total <> 0 THEN
1730 l_for_insert := 'Y';
1731 l_for_party := 'Y';
1732 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1733 Insert_Update_Check_Results(l_ip_total,
1734 l_for_insert,
1735 l_for_party
1736 ,l_for_psite -- added by spamujul for ER#8473903
1737 );
1738 l_ip_total :=0;
1739 END IF;
1740 -- check if there are still records to be updated
1741 IF l_up_total <> 0 THEN
1742 l_for_insert := 'N';
1743 l_for_party := 'Y';
1744 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1745 Insert_Update_Check_Results (l_up_total,
1746 l_for_insert,
1747 l_for_party
1748 ,l_for_psite -- added by spamujul for ER#8473903
1749 );
1750 l_up_total :=0;
1751 END IF;
1752
1753 -- check if there are still records to be inserted
1754 IF l_ia_total <> 0 THEN
1755 l_for_insert := 'Y';
1756 l_for_party := 'N';
1757 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1758 Insert_Update_Check_Results(l_ia_total,
1759 l_for_insert,
1760 l_for_party
1761 ,l_for_psite -- added by spamujul for ER#8473903
1762 );
1763 l_ia_total :=0;
1764 END IF;
1765 -- check if there are still records to be updated
1766 IF l_ua_total <> 0 THEN
1767 l_for_insert := 'N';
1768 l_for_party := 'N';
1769 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1770 Insert_Update_Check_Results (l_ua_total,
1771 l_for_insert,
1772 l_for_party
1773 ,l_for_psite -- added by spamujul for ER#8473903
1774 );
1775 l_ua_total :=0;
1776 END IF;
1777 -- Begin fix by spamujul for ER#8473903
1778 IF l_is_total <> 0 THEN
1779 l_for_insert := 'Y';
1780 l_for_party := 'N';
1781 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1782 Insert_Update_Check_Results(l_is_total,
1783 l_for_insert,
1784 l_for_party
1785 ,l_for_psite -- added by spamujul for ER#8473903
1786 );
1787 l_is_total :=0;
1788 END IF;
1789 -- check if there are still records to be updated
1790 IF l_us_total <> 0 THEN
1791 l_for_insert := 'N';
1792 l_for_party := 'N';
1793 l_for_psite := 'N'; -- added by spamujul for ER#8473903
1794 Insert_Update_Check_Results (l_us_total,
1795 l_for_insert,
1796 l_for_party
1797 ,l_for_psite -- added by spamujul for ER#8473903
1798 );
1799 l_us_total :=0;
1800 END IF;
1801 -- End fix by spamujul for ER#8473903
1802 /* End of R12 Employee HelpDesk Modifications */
1803 IF g_dashboard_for_contact = 'Y' THEN
1804 l_ip_total := 0;
1805 l_up_total := 0;
1806 l_ia_total := 0;
1807 l_ua_total := 0;
1808 l_us_total :=0; -- added by spamujul for ER#8473903
1809 l_is_total :=0; -- added by spamujul for ER#8473903
1810
1811 Evaluate_blocks_Rel(p_up_total => l_up_total,
1812 p_ip_total => l_ip_total,
1813 p_ua_total => l_ua_total,
1814 p_ia_total => l_ia_total,
1815 p_us_total => l_us_total, -- added by spamujul for ER#8473903
1816 p_is_total => l_is_total, -- added by spamujul for ER#8473903
1817 p_rule_only => 'Y' );
1818
1819 Evaluate_checks_Rel(errbuf => errbuf,
1820 retcode => retcode,
1821 p_rule_only => 'Y');
1822 END IF;
1823
1824 COMMIT;
1825
1826 -- Return 0 for successful completion, 1 for warnings, 2 for error
1827 IF (error_flag) THEN
1828 errbuf := Sqlerrm;
1829 retcode := 2;
1830 ELSIF (warning_msg <> '') THEN
1831 errbuf := warning_msg;
1832 retcode := 1;
1833 ELSE
1834 errbuf := '';
1835 retcode := 0;
1836 END IF;
1837
1838 ELSIF g_dashboard_for_employee = 'Y' THEN
1839 l_ip_total := 0;
1840 l_up_total := 0;
1841 l_ia_total := 0;
1842 l_ua_total := 0;
1843 l_us_total :=0; -- added by spamujul for ER#8473903
1844 l_is_total :=0; -- added by spamujul for ER#8473903
1845 Evaluate_blocks_Emp(p_up_total => l_up_total,
1846 p_ip_total => l_ip_total,
1847 p_ua_total => l_ua_total,
1848 p_ia_total => l_ia_total,
1849 p_us_total => l_us_total, -- added by spamujul for ER#8473903
1850 p_is_total => l_is_total, -- added by spamujul for ER#8473903
1851 p_rule_only => 'Y' );
1852
1853 Evaluate_checks_Emp(errbuf => errbuf,
1854 retcode => retcode,
1855 p_rule_only => 'Y');
1856 END IF;
1857
1858 COMMIT;
1859
1860 -- Return 0 for successful completion, 1 for warnings, 2 for error
1861 IF (error_flag) THEN
1862 errbuf := Sqlerrm;
1863 retcode := 2;
1864 ELSIF (warning_msg <> '') THEN
1865 errbuf := warning_msg;
1866 retcode := 1;
1867 ELSE
1868 errbuf := '';
1869 retcode := 0;
1870 END IF;
1871
1872 IF (debug) THEN
1873 fnd_file.close;
1874 END IF;
1875
1876 EXCEPTION
1877 WHEN OTHERS THEN
1878 ROLLBACK;
1879 IF (checks_csr%isopen) THEN
1880 CLOSE checks_csr;
1881 END IF;
1882 IF (cparty_csr%isopen) THEN
1883 CLOSE cparty_csr;
1884 END IF;
1885 IF (caccount_csr%isopen) THEN
1886 CLOSE caccount_csr;
1887 END IF;
1888 -- Begin fix by spamujul for ER#8473903
1889 IF (cpsite_csr%isopen) THEN
1890 CLOSE cpsite_csr;
1891 END IF;
1892 -- End fix by spamujul for ER#8473903
1893 IF (debug) THEN
1894 fnd_file.close;
1895 END IF;
1896
1897 -- Retrieve error message into errbuf
1898 errbuf := Sqlerrm;
1899
1900 -- Return 2 for error
1901 retcode := 2;
1902
1903 g_error := sqlcode || ' ' || sqlerrm;
1904 fnd_file.put_line(fnd_file.log , g_error);
1905
1906 END Evaluate_Checks1_Rule;
1907
1908 /******************************************
1909 EVALUATE_CHECKS2_JIT
1910 added this procedure for JIT enhancement -- Bug 4535407
1911 Evaluate_Checks2_JIT is called by Evaluate_Checks2.
1912 Evaluate_Checks2 will open different cursors for JIT and non-JIT flows
1913 and calls this procedure for every record
1914 ******************************************/
1915
1916 PROCEDURE Evaluate_Checks2_JIT ( p_party_id IN NUMBER,
1917 p_acct_id IN NUMBER,
1918 p_psite_id IN NUMBER DEFAULT NULL, -- Added by spamujul for ER#8473903
1919 p_check_id IN NUMBER,
1920 p_select_type IN VARCHAR2,
1921 p_select_block_id IN NUMBER,
1922 p_data_type IN VARCHAR2,
1923 p_format_mask IN VARCHAR2,
1924 p_chk_upp_low_flag IN VARCHAR2,
1925 p_threshold_grade IN VARCHAR2,
1926 p_check_level IN VARCHAR2,
1927 p_group_id IN NUMBER ) IS
1928 chk_id NUMBER;
1929 chk_name VARCHAR2(240);
1930 sel_type VARCHAR2(3);
1931 sel_blk_id NUMBER;
1932 data_type VARCHAR2(90);
1933 fmt_mask VARCHAR2(90);
1934 rule VARCHAR2(32767);
1935 Chk_u_l_flag VARCHAR2(3);
1936 Thd_grade VARCHAR2(9);
1937 v_block_id NUMBER;
1938 truncate_flag VARCHAR2(1) := 'N';
1939 acct_flag VARCHAR2(1);
1940 blk_id NUMBER := NULL;
1941 blk_name VARCHAR2(240) := NULL;
1942 sql_stmt VARCHAR2(2000) := NULL;
1943 curr_code VARCHAR2(15) := NULL;
1944 l_for_insert VARCHAR2(1) := 'Y';
1945 l_for_party VARCHAR2(1) := 'Y';
1946 l_for_psite VARCHAR2(1) := 'N'; -- added by spamujul for ER#8473903
1947 l_up_total NUMBER := 0;
1948 l_ip_total NUMBER := 0;
1949 l_ua_total NUMBER := 0;
1950 l_ia_total NUMBER := 0;
1951 l_us_total NUMBER := 0; -- added by spamujul for ER#8473903
1952 l_is_total NUMBER := 0; -- added by spamujul for ER#8473903
1953 v_party_in_sql NUMBER := 0;
1954 v_acct_in_sql NUMBER := 0;
1955 v_psite_in_sql NUMBER := 0; -- added by spamujul for ER#8473903
1956 v_check_level VARCHAR2(10);
1957 v_rel_party NUMBER ;
1958 v_incident_id NUMBER := p_psite_id; -- added by spamujul for ER#8473903;
1959 v_incident_flag VARCHAR2(2) := 'Y'; -- added by spamujul for ER#8473903
1960
1961 /* added these variable for Bug 1937730*/
1962 v_party_id Number;
1963 cparty_id Number;
1964 ccust_acct_id Number;
1965 cpsite_id Number; -- added by spamujul for ER#8473903
1966 cid Number;
1967 val Varchar2(240) := null;
1968
1969
1970 -- cursor to get the blocks related to the check
1971 CURSOR cblocks_csr IS
1972 SELECT DISTINCT block_id
1973 FROM csc_prof_check_rules_b
1974 WHERE check_id = chk_id
1975 UNION
1976 (SELECT DISTINCT expr_to_block_id
1977 FROM csc_prof_check_rules_b
1978 WHERE check_id = chk_id
1979 );
1980 CURSOR block_csr IS
1981 SELECT block_id,
1982 sql_stmnt,
1983 currency_code
1984 FROM csc_prof_blocks_b a
1985 WHERE a.block_id = p_select_block_id;
1986
1987 /* added this condition party_id=v_party_id for Bug 1937730*/
1988 CURSOR caccount_csr IS
1989 SELECT party_id,
1990 cust_account_id
1991 FROM hz_cust_accounts
1992 WHERE party_id=v_party_id
1993 AND status = 'A' ;
1994 -- Begin fix by spamujul for ER#8473903
1995 CURSOR cpsite_csr IS
1996 SELECT party_id,
1997 party_site_id
1998 FROM HZ_PARTY_SITES
1999 WHERE party_id = v_party_id
2000 AND status ='A'
2001 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
2002 -- End fix by spamujul for ER#8473903
2003 BEGIN
2004 l_ip_total :=0;
2005 l_up_total :=0;
2006 l_ia_total :=0;
2007 l_ua_total :=0;
2008 l_us_total :=0; -- added by spamujul for ER#8473903
2009 l_is_total :=0; -- added by spamujul for ER#8473903
2010
2011 chk_id := p_check_id;
2012 sel_type := p_select_type;
2013 sel_blk_id := p_select_block_id;
2014 data_type := p_data_type;
2015 fmt_mask := p_format_mask;
2016 chk_u_l_flag := p_chk_upp_low_flag;
2017 thd_grade := p_threshold_grade;
2018 v_check_level := p_check_level;
2019
2020 IF sel_type = 'T' then
2021 OPEN cblocks_csr;
2022 LOOP
2023 FETCH cblocks_csr into v_block_id;
2024 EXIT when cblocks_csr%notfound;
2025 Evaluate_Blocks2(v_block_id,
2026 p_party_id,
2027 p_acct_id,
2028 p_psite_id, -- added by spamujul for ER#8473903
2029 l_up_total,
2030 l_ip_total,
2031 l_ua_total,
2032 l_ia_total
2033 ,l_us_total, -- added by spamujul for ER#8473903
2034 l_is_total -- added by spamujul for ER#8473903
2035 );
2036 END LOOP;
2037 CLOSE cblocks_csr;
2038 END IF;
2039 l_ip_total :=0;
2040 l_up_total :=0;
2041 l_ia_total :=0;
2042 l_ua_total :=0;
2043 l_us_total :=0; -- added by spamujul for ER#8473903
2044 l_is_total :=0; -- added by spamujul for ER#8473903
2045 IF (sel_type = 'T') THEN
2046 IF p_acct_id IS NULL THEN
2047 acct_flag := 'N';
2048 build_rule(acct_flag,
2049 chk_id,
2050 v_check_level,
2051 rule);
2052 ELSE
2053 acct_flag := 'Y';
2054 build_rule(acct_flag,
2055 chk_id,
2056 v_check_level,
2057 rule);
2058 END IF;
2059 ELSIF (sel_type = 'B') THEN
2060 OPEN block_csr;
2061 FETCH block_csr INTO blk_id, sql_stmt, curr_code;
2062 CLOSE block_csr;
2063 IF sql_stmt IS NOT NULL THEN
2064 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2065 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
2066 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
2067 ELSE
2068 v_party_in_sql := 0;
2069 v_acct_in_sql := 0;
2070 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
2071 END IF;
2072 END IF;
2073 /* R12 Employee HelpDesk Modifications */
2074 IF v_check_level in('PARTY','CONTACT','EMPLOYEE') THEN
2075 -- p_cid is passed as null as Cursor has to be parsed always
2076 Evaluate_One_Check(truncate_flag,
2077 chk_id,
2078 p_party_id,
2079 Null,
2080 NULL, -- added by spamujul for ER#8473903
2081 v_check_level,
2082 sel_type,
2083 sel_blk_id,
2084 data_type,
2085 fmt_mask,
2086 chk_u_l_flag,
2087 Thd_grade,
2088 rule,
2089 blk_id,
2090 sql_stmt,
2091 curr_code,
2092 l_up_total,
2093 l_ip_total,
2094 l_ua_total,
2095 l_ia_total ,
2096 l_us_total, -- added by spamujul for ER#8473903
2097 l_is_total, -- added by spamujul for ER#8473903
2098 NULL);
2099 END IF;
2100 /* End of R12 Employee HelpDesk Modifications */
2101 /* This begin, end exception is added mainly for exception handing for Bug 1980004*/
2102 /* added this condition for Bug 1937730*/
2103 BEGIN
2104 v_party_id := p_party_id;
2105 IF ((sel_type = 'B' ) OR (sel_type = 'T') ) and v_check_level = 'ACCOUNT' THEN -- Only valid Types now
2106 IF ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level = 'ACCOUNT' THEN -- added for 1850508
2107 -- Check can be made only for 'B' types,
2108 -- If acct is not present as bind variable, the sql might returnwrong
2109 -- rows (party level counts) at account leve.
2110 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
2111 --(sel_type='T') ) Then
2112 NULL;
2113 ELSE
2114 -- Loop through all parties with accounts
2115 -- added for 1850508
2116 --Open Cursor
2117 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
2118 cid := dbms_sql.open_cursor;
2119 IF (sel_type = 'B') THEN
2120 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
2121 ELSIF (sel_type = 'T') THEN
2122 dbms_sql.parse(cid, rule, dbms_sql.native);
2123 END IF;
2124 dbms_sql.define_column(cid,1,val,240);
2125
2126 OPEN caccount_csr;
2127 LOOP
2128 FETCH caccount_csr INTO cparty_id, ccust_acct_id;
2129 EXIT WHEN caccount_csr%notfound;
2130
2131 Evaluate_One_Check(truncate_flag,
2132 chk_id,
2133 cparty_id,
2134 ccust_acct_id,
2135 NULL, -- added by spamujul for ER#8473903
2136 v_check_level,
2137 sel_type,
2138 sel_blk_id,
2139 data_type,
2140 fmt_mask,
2141 chk_u_l_flag,
2142 Thd_grade,
2143 rule,
2144 blk_id,
2145 sql_stmt,
2146 curr_code,
2147 l_up_total,
2148 l_ip_total,
2149 l_ua_total,
2150 l_ia_total
2151 ,l_us_total, -- added by spamujul for ER#8473903
2152 l_is_total -- added by spamujul for ER#8473903
2153 ,cid);
2154 END LOOP;
2155 CLOSE caccount_csr;
2156
2157 IF (dbms_sql.is_open(cid)) THEN
2158 dbms_sql.close_cursor(cid);
2159 END IF;
2160
2161 END IF; -- added for 1850508
2162 END IF;
2163 EXCEPTION
2164 WHEN OTHERS THEN
2165 IF (dbms_sql.is_open(cid)) THEN
2166 dbms_sql.close_cursor(cid);
2167 END IF;
2168
2169 set_context('Evaluate_Checks2_JIT',
2170 'chk_id=>'||to_char(chk_id),
2171 'party_id=>'||to_char(cparty_id),
2172 'account_id=>'||to_char(ccust_acct_id));
2173 g_error := sqlcode || ' ' || sqlerrm;
2174 set_context(NULL, g_error);
2175 END;
2176 -- Begin fix by spamujul for ER#8473903
2177 Begin
2178 v_party_id:=p_party_id;
2179 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
2180 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
2181 NULL;
2182 ELSE
2183 cid := dbms_sql.open_cursor;
2184 IF (sel_type = 'B') THEN
2185 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
2186 ELSIF (sel_type = 'T') THEN
2187 dbms_sql.parse(cid, rule, dbms_sql.native);
2188 END IF;
2189 dbms_sql.define_column(cid,1,val,240);
2190 OPEN cpsite_csr;
2191 LOOP
2192 FETCH cpsite_csr
2193 INTO cparty_id,
2194 cpsite_id;
2195 EXIT WHEN cpsite_csr%notfound;
2196 -- Added the Following Code to If refreshed the customer profile engine for Incident Address
2197 IF (v_incident_id IS NOT NULL AND v_incident_id = cpsite_id) AND v_incident_flag <> 'N' THEN
2198 v_incident_flag := 'N';
2199 END IF;
2200 Evaluate_One_Check(truncate_flag,
2201 chk_id,
2202 cparty_id,
2203 NULL, -- For site level profile check, account parameter should be null
2204 cpsite_id,
2205 v_check_level,
2206 sel_type,
2207 sel_blk_id,
2208 data_type,
2209 fmt_mask,
2210 chk_u_l_flag,
2211 Thd_grade,
2212 rule,
2213 blk_id,
2214 sql_stmt,
2215 curr_code,
2216 l_up_total,
2217 l_ip_total,
2218 l_ua_total,
2219 l_ia_total ,
2220 l_us_total,
2221 l_is_total,
2222 cid);
2223 END LOOP;
2224 CLOSE cpsite_csr;
2225 -- Added the following code to refresh the incident Address
2226 IF v_incident_id IS NOT NULL AND v_incident_flag ='Y' THEN
2227 Evaluate_One_Check(truncate_flag,
2228 chk_id,
2229 p_party_id,
2230 NULL, -- For site level profile check, account parameter should be null
2231 p_psite_id,
2232 v_check_level,
2233 sel_type,
2234 sel_blk_id,
2235 data_type,
2236 fmt_mask,
2237 chk_u_l_flag,
2238 Thd_grade,
2239 rule,
2240 blk_id,
2241 sql_stmt,
2242 curr_code,
2243 l_up_total,
2244 l_ip_total,
2245 l_ua_total,
2246 l_ia_total ,
2247 l_us_total,
2248 l_is_total,
2249 cid);
2250 v_incident_flag := 'N';
2251 END IF;
2252 -- Ended the incident address refresh operation
2253 IF (dbms_sql.is_open(cid)) THEN
2254 dbms_sql.close_cursor(cid);
2255 end if;
2256 END IF;
2257 END IF;
2258 Exception
2259 When others then
2260 IF (dbms_sql.is_open(cid)) THEN
2261 dbms_sql.close_cursor(cid);
2262 end if;
2263 set_context('Evaluate_Checks2_JIT',
2264 'chk_id=>'||to_char(chk_id),
2265 'party_id=>'||to_char(cparty_id),
2266 'account_id=>'|| NULL
2267 ,'party_site_id =>'||to_char(cpsite_id)
2268 );
2269 g_error := sqlcode || ' ' || sqlerrm;
2270 set_context(NULL, g_error);
2271 End;
2272 -- End fix by spamujul for ER#8473903
2273 IF l_ip_total <> 0 THEN
2274 l_for_insert := 'Y';
2275 l_for_party := 'Y';
2276 l_for_psite :='N'; -- added by spamujul for ER#8473903
2277 Insert_Update_Check_Results(l_ip_total,
2278 l_for_insert,
2279 l_for_party
2280 ,l_for_psite -- added by spamujul for ER#8473903
2281 );
2282 l_ip_total :=0;
2283 END IF;
2284 -- check if there are still records to be updated
2285 IF l_up_total <> 0 THEN
2286 l_for_insert := 'N';
2287 l_for_party := 'Y';
2288 l_for_psite :='N'; -- added by spamujul for ER#8473903
2289 Insert_Update_Check_Results (l_up_total,
2290 l_for_insert,
2291 l_for_party
2292 ,l_for_psite -- added by spamujul for ER#8473903
2293 );
2294 l_up_total :=0;
2295 END IF;
2296
2297 -- check if there are still records to be inserted
2298 IF l_ia_total <> 0 THEN
2299 l_for_insert := 'Y';
2300 l_for_party := 'N';
2301 l_for_psite :='N'; -- added by spamujul for ER#8473903
2302 Insert_Update_Check_Results(l_ia_total,
2303 l_for_insert,
2304 l_for_party
2305 ,l_for_psite -- added by spamujul for ER#8473903
2306 );
2307 l_ia_total :=0;
2308 END IF;
2309 -- check if there are still records to be updated
2310 IF l_ua_total <> 0 THEN
2311 l_for_insert := 'N';
2312 l_for_party := 'N';
2313 l_for_psite :='N'; -- added by spamujul for ER#8473903
2314 Insert_Update_Check_Results(l_ua_total,
2315 l_for_insert,
2316 l_for_party
2317 ,l_for_psite -- added by spamujul for ER#8473903
2318 );
2319 l_ua_total :=0;
2320 END IF;
2321 -- Begin fix by spamujul for ER#8473903
2322 IF l_is_total <> 0 THEN
2323 l_for_insert := 'Y';
2324 l_for_party := 'N';
2325 l_for_psite := 'Y';-- added by spamujul for ER#8473903
2326 Insert_Update_Check_Results(l_is_total,
2327 l_for_insert,
2328 l_for_party
2329 ,l_for_psite -- added by spamujul for ER#8473903
2330 );
2331 l_is_total :=0;
2332 END IF;
2333 IF l_us_total <> 0 THEN
2334 l_for_insert := 'N';
2335 l_for_party := 'N';
2336 l_for_psite := 'Y';-- added by spamujul for ER#8473903
2337 Insert_Update_Check_Results(l_us_total,
2338 l_for_insert,
2339 l_for_party
2340 ,l_for_psite -- added by spamujul for ER#8473903
2341 );
2342 l_us_total :=0;
2343 END IF;
2344 -- End fix by spamujul for ER#8473903
2345
2346 COMMIT;
2347 END Evaluate_Checks2_JIT;
2348
2349 --
2350 -- Evaluate_Checks2
2351 -- Loop through all checks and evaluate the results
2352 -- for the Given Party
2353 -- if Party and Group are Provided
2354 -- Only the checks and blocks for a given group_id
2355 -- This is used when the refresh button is pressed or from JIT process
2356 --
2357
2358 PROCEDURE Evaluate_Checks2
2359 ( p_party_id IN NUMBER,
2360 p_acct_id IN NUMBER,
2361 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
2362 p_group_id IN NUMBER,
2363 p_critical_flag IN VARCHAR2 DEFAULT 'N', /* added for JIT enhancement */
2364 errbuf OUT NOCOPY VARCHAR2,
2365 retcode OUT NOCOPY NUMBER ) IS
2366
2367 CURSOR checks_csr IS
2368 SELECT check_id,
2369 select_type,
2370 select_block_id,
2371 data_type,
2372 format_mask,
2373 check_upper_lower_flag,
2374 threshold_grade, check_level
2375 FROM csc_prof_checks_b chk
2376 WHERE check_level IN ('PARTY',
2377 'ACCOUNT',
2378 'SITE' --Added 'SITE' by spamujul for ER#8473903
2379 )
2380 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2381 AND nvl(end_date_active, Sysdate))
2382 AND EXISTS ( SELECT a.check_id
2383 FROM csc_prof_group_checks a
2384 WHERE a.group_id = p_group_id
2385 AND chk.check_id = a.check_id);
2386
2387 /* added cursor checks_crit_csr for JIT enhancement -- Bug 4535407 */
2388 CURSOR checks_crit_csr IS
2389 SELECT check_id,
2390 select_type,
2391 select_block_id,
2392 data_type,
2393 format_mask,
2394 check_upper_lower_flag,
2395 threshold_grade,
2396 check_level
2397 FROM csc_prof_checks_b chk
2398 WHERE check_level IN ('PARTY',
2399 'ACCOUNT',
2400 'SITE' -- Added 'SITE' by spamujul for ER#8473903
2401 )
2402 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2403 AND nvl(end_date_active, Sysdate))
2404 AND EXISTS ( SELECT a.check_id
2405 FROM csc_prof_group_checks a
2406 WHERE a.group_id = p_group_id
2407 AND chk.check_id = a.check_id
2408 AND a.critical_flag = 'Y');
2409
2410 CURSOR rel_party_csr(c_party_id IN NUMBER) IS
2411 SELECT 1
2412 FROM hz_parties
2413 WHERE party_id = c_party_id
2414 AND party_type = 'PARTY_RELATIONSHIP'
2415 AND status = 'A';
2416
2417 CURSOR employee_csr(c_party_id IN NUMBER) IS
2418 SELECT 1
2419 FROM per_workforce_current_x
2420 WHERE person_id = c_party_id;
2421
2422
2423 CURSOR rel_checks_csr IS
2424 SELECT check_id,
2425 select_type,
2426 select_block_id,
2427 data_type,
2428 format_mask,
2429 check_upper_lower_flag,
2430 threshold_grade,
2431 check_level
2432 FROM csc_prof_checks_b chk
2433 WHERE check_level IN ( 'CONTACT',
2434 'SITE' --Added 'SITE' by spamujul for ER#8473903
2435 )
2436 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2437 AND nvl(end_date_active, Sysdate))
2438 AND EXISTS ( SELECT a.check_id
2439 FROM csc_prof_group_checks a
2440 WHERE a.group_id = p_group_id
2441 AND chk.check_id = a.check_id);
2442
2443 /* added cursor checks_csr_jit for JIT enhancement -- Bug 4535407 */
2444 CURSOR rel_checks_crit_csr IS
2445 SELECT check_id,
2446 select_type,
2447 select_block_id,
2448 data_type,
2449 format_mask,
2450 check_upper_lower_flag,
2451 threshold_grade,
2452 check_level
2453 FROM csc_prof_checks_b chk
2454 WHERE check_level IN ( 'CONTACT',
2455 'SITE' --Added 'SITE' by spamujul for ER#8473903
2456 )
2457 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2458 AND nvl(end_date_active, Sysdate))
2459 AND EXISTS ( SELECT a.check_id
2460 FROM csc_prof_group_checks a
2461 WHERE a.group_id = p_group_id
2462 AND chk.check_id = a.check_id
2463 AND a.critical_flag = 'Y');
2464
2465 /* R12 Employee HelpDesk Modifications */
2466 CURSOR emp_checks_csr IS
2467 SELECT check_id,
2468 select_type,
2469 select_block_id,
2470 data_type,
2471 format_mask,
2472 check_upper_lower_flag,
2473 threshold_grade,
2474 check_level
2475 FROM csc_prof_checks_b chk
2476 WHERE check_level = 'EMPLOYEE'
2477 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2478 AND nvl(end_date_active, Sysdate))
2479 AND EXISTS ( SELECT a.check_id
2480 FROM csc_prof_group_checks a
2481 WHERE a.group_id = p_group_id
2482 AND chk.check_id = a.check_id);
2483
2484 CURSOR emp_checks_crit_csr IS
2485 SELECT check_id,
2486 select_type,
2487 select_block_id,
2488 data_type,
2489 format_mask,
2490 check_upper_lower_flag,
2491 threshold_grade,
2492 check_level
2493 FROM csc_prof_checks_b chk
2494 WHERE check_level = 'EMPLOYEE'
2495 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2496 AND nvl(end_date_active, Sysdate))
2497 AND EXISTS ( SELECT a.check_id
2498 FROM csc_prof_group_checks a
2499 WHERE a.group_id = p_group_id
2500 AND chk.check_id = a.check_id
2501 AND a.critical_flag = 'Y');
2502
2503 /* End of R12 Employee HelpDesk Modifications */
2504
2505 l_rel_refresh VARCHAR2(1) := 'N';
2506 v_rel_party NUMBER;
2507
2508 l_emp_refresh VARCHAR2(1) := 'N';
2509 v_emp_party NUMBER;
2510
2511
2512
2513 BEGIN
2514 /* Moved the code to Evaluate_Checks2_JIT for JIT enhancement. -- Bug 4535407
2515 Logic
2516 -----
2517 IF jit_flag = 'Y' THEN
2518 OPEN checks_crit_csr;
2519 CALL Evaluate_Checks2_JIT;
2520 ELSE
2521 OPEN checks_csr;
2522 CALL Evaluate_Checks2_JIT;
2523 END IF;
2524
2525 */
2526 /* Bug 5168090 Fix - scenario where employee_id and party_id from hz_parties have the same value */
2527 IF g_dashboard_for_employee = 'Y' THEN
2528 l_emp_refresh := 'Y';
2529 ELSE
2530 OPEN rel_party_csr(p_party_id);
2531 FETCH rel_party_csr
2532 INTO v_rel_party;
2533 IF rel_party_csr%FOUND THEN
2534 l_rel_refresh := 'Y';
2535 END IF;
2536 CLOSE rel_party_csr;
2537 END IF;
2538 /* Bug 5168090 Fix */
2539 IF l_rel_refresh = 'Y' THEN
2540 IF p_critical_flag = 'Y' THEN
2541 FOR i IN rel_checks_crit_csr
2542 LOOP
2543 Evaluate_Checks2_JIT
2544 ( p_party_id => p_party_id,
2545 p_acct_id => p_acct_id,
2546 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2547 p_check_id => i.check_id,
2548 p_select_type => i.select_type,
2549 p_select_block_id => i.select_block_id,
2550 p_data_type => i.data_type,
2551 p_format_mask => i.format_mask,
2552 p_chk_upp_low_flag => i.check_upper_lower_flag,
2553 p_threshold_grade => i.threshold_grade,
2554 p_check_level => i.check_level,
2555 p_group_id => p_group_id
2556 );
2557 END LOOP;
2558 ELSE
2559 FOR i IN rel_checks_csr
2560 LOOP
2561 Evaluate_Checks2_JIT
2562 ( p_party_id => p_party_id,
2563 p_acct_id => p_acct_id,
2564 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2565 p_check_id => i.check_id,
2566 p_select_type => i.select_type,
2567 p_select_block_id => i.select_block_id,
2568 p_data_type => i.data_type,
2569 p_format_mask => i.format_mask,
2570 p_chk_upp_low_flag => i.check_upper_lower_flag,
2571 p_threshold_grade => i.threshold_grade,
2572 p_check_level => i.check_level,
2573 p_group_id => p_group_id
2574 );
2575 END LOOP;
2576 END IF;
2577 ELSIF l_emp_refresh = 'Y' THEN
2578 /* R12 Employee HelpDesk Modifications */
2579 IF p_critical_flag = 'Y' THEN
2580 FOR i IN emp_checks_crit_csr
2581 LOOP
2582 Evaluate_Checks2_JIT
2583 ( p_party_id => p_party_id,
2584 p_acct_id => p_acct_id,
2585 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2586 p_check_id => i.check_id,
2587 p_select_type => i.select_type,
2588 p_select_block_id => i.select_block_id,
2589 p_data_type => i.data_type,
2590 p_format_mask => i.format_mask,
2591 p_chk_upp_low_flag => i.check_upper_lower_flag,
2592 p_threshold_grade => i.threshold_grade,
2593 p_check_level => i.check_level,
2594 p_group_id => p_group_id
2595 );
2596 END LOOP;
2597 ELSE
2598 FOR i IN emp_checks_csr
2599 LOOP
2600 Evaluate_Checks2_JIT
2601 ( p_party_id => p_party_id,
2602 p_acct_id => p_acct_id,
2603 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2604 p_check_id => i.check_id,
2605 p_select_type => i.select_type,
2606 p_select_block_id => i.select_block_id,
2607 p_data_type => i.data_type,
2608 p_format_mask => i.format_mask,
2609 p_chk_upp_low_flag => i.check_upper_lower_flag,
2610 p_threshold_grade => i.threshold_grade,
2611 p_check_level => i.check_level,
2612 p_group_id => p_group_id
2613 );
2614 END LOOP;
2615 END IF;
2616 /* End of R12 Employee HelpDesk Modifications */
2617 ELSE
2618 IF p_critical_flag = 'Y' THEN
2619 FOR i IN checks_crit_csr
2620 LOOP
2621 Evaluate_Checks2_JIT
2622 ( p_party_id => p_party_id,
2623 p_acct_id => p_acct_id,
2624 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2625 p_check_id => i.check_id,
2626 p_select_type => i.select_type,
2627 p_select_block_id => i.select_block_id,
2628 p_data_type => i.data_type,
2629 p_format_mask => i.format_mask,
2630 p_chk_upp_low_flag => i.check_upper_lower_flag,
2631 p_threshold_grade => i.threshold_grade,
2632 p_check_level => i.check_level,
2633 p_group_id => p_group_id
2634 );
2635 END LOOP;
2636 ELSE
2637 FOR i IN checks_csr
2638 LOOP
2639 Evaluate_Checks2_JIT
2640 ( p_party_id => p_party_id,
2641 p_acct_id => p_acct_id,
2642 p_psite_id => p_psite_id, --added by spamujul for ER#8473903
2643 p_check_id => i.check_id,
2644 p_select_type => i.select_type,
2645 p_select_block_id => i.select_block_id,
2646 p_data_type => i.data_type,
2647 p_format_mask => i.format_mask,
2648 p_chk_upp_low_flag => i.check_upper_lower_flag,
2649 p_threshold_grade => i.threshold_grade,
2650 p_check_level => i.check_level,
2651 p_group_id => p_group_id
2652 );
2653 END LOOP;
2654 END IF;
2655 END IF;
2656 -- Return 0 for successful completion, 1 for warnings, 2 for error
2657 IF (error_flag) THEN
2658 errbuf := Sqlerrm;
2659 retcode := 2;
2660 ELSIF (warning_msg <> '') THEN
2661 errbuf := warning_msg;
2662 retcode := 1;
2663 ELSE
2664 errbuf := '';
2665 retcode := 0;
2666 END IF;
2667
2668 IF (debug) THEN
2669 fnd_file.close;
2670 END IF;
2671 EXCEPTION
2672 WHEN OTHERS THEN
2673 ROLLBACK;
2674 IF (checks_csr%isopen) THEN
2675 CLOSE checks_csr;
2676 END IF;
2677 IF (debug) THEN
2678 fnd_file.close;
2679 END IF;
2680 -- Retrieve error message into errbuf
2681 errbuf := Sqlerrm;
2682 -- Return 2 for error
2683 retcode := 2;
2684 g_error := sqlcode || ' ' || sqlerrm;
2685 fnd_file.put_line(fnd_file.log , g_error);
2686 END Evaluate_Checks2;
2687 --
2688 -- Evaluate_Checks3
2689 -- Loop through all checks and evaluate the results
2690 -- for each customer and account.
2691 -- if check_id is null, party_id is not null or account_id is not null
2692 -- and block_id is null
2693 -- get only the checks and blocks for a given group_id
2694 -- This is used when the refresh button is pressed
2695 --
2696 PROCEDURE Evaluate_Checks3( p_party_id IN NUMBER,
2697 p_acct_id IN NUMBER,
2698 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
2699 p_group_id IN NUMBER,
2700 errbuf OUT NOCOPY VARCHAR2,
2701 retcode OUT NOCOPY NUMBER
2702 ) IS
2703
2704 chk_id Number;
2705 chk_name Varchar2(240);
2706 sel_type Varchar2(3);
2707 sel_blk_id Number;
2708 data_type Varchar2(90);
2709 fmt_mask Varchar2(90);
2710 rule Varchar2(32767);
2711 Chk_u_l_flag Varchar2(3);
2712 Thd_grade Varchar2(9);
2713 v_block_id Number;
2714 truncate_flag Varchar2(1) := 'N';
2715 acct_flag Varchar2(1);
2716 blk_id Number := null;
2717 blk_name Varchar2(240) := null;
2718 sql_stmt Varchar2(2000) := null;
2719 curr_code Varchar2(15) := null;
2720 l_for_insert varchar2(1) := 'Y';
2721 l_for_party varchar2(1) := 'Y';
2722 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
2723 l_up_total Number := 0;
2724 l_ip_total Number := 0;
2725 l_ua_total NUmber := 0;
2726 l_ia_total Number := 0;
2727 l_us_total Number := 0; -- added by spamujul for ER#8473903
2728 l_is_total Number := 0; -- added by spamujul for ER#8473903
2729 v_party_in_sql Number := 0;
2730 v_acct_in_sql Number := 0;
2731 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
2732 v_check_level Varchar2(10);
2733 v_rel_refresh Varchar2(1) := 'N';
2734
2735 /* added these variable for Bug 1937730*/
2736 v_party_id Number;
2737 cparty_id Number;
2738 ccust_acct_id Number;
2739 cpsite_id Number; -- added by spamujul for ER#8473903
2740 cid Number;
2741 val Varchar2(240) := null;
2742
2743 -- cursor to retrieve all checks that belong to that group
2744 CURSOR checks_csr IS
2745 SELECT check_id,
2746 select_type,
2747 select_block_id,
2748 data_type,
2749 format_mask,
2750 check_upper_lower_flag,
2751 threshold_grade,
2752 check_level
2753 FROM csc_prof_checks_b chk
2754 WHERE check_level IN ('PARTY',
2755 'ACCOUNT', -- Added 'SITE' by spamujul for ER#8473903
2756 'SITE'
2757 )
2758 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2759 AND nvl(end_date_active, Sysdate))
2760 AND Exists ( SELECT a.check_id
2761 FROM csc_prof_group_checks a
2762 WHERE chk.check_id = a.check_id
2763 AND sysdate between
2764 nvl(a.start_date_active,sysdate)
2765 AND nvl(a.end_date_active,sysdate));
2766 /* R12 Employee HelpDesk Modifications */
2767 CURSOR checks_emp_csr IS
2768 SELECT check_id,
2769 select_type,
2770 select_block_id,
2771 data_type,
2772 format_mask,
2773 check_upper_lower_flag,
2774 threshold_grade,
2775 check_level
2776 FROM csc_prof_checks_b chk
2777 WHERE check_level IN ('EMPLOYEE')
2778 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2779 AND nvl(end_date_active, Sysdate))
2780 AND Exists ( SELECT a.check_id
2781 FROM csc_prof_group_checks a
2782 WHERE chk.check_id = a.check_id
2783 AND sysdate between
2784 nvl(a.start_date_active,sysdate)
2785 AND nvl(a.end_date_active,sysdate));
2786 /* End of R12 Employee HelpDesk Modifications */
2787
2788 -- cursor to get the blocks related to the check
2789 CURSOR cblocks_csr IS
2790 Select distinct block_id
2791 From csc_prof_check_rules_b
2792 Where check_id = chk_id
2793 UNION
2794 (Select distinct expr_to_block_id
2795 From csc_prof_check_rules_b
2796 Where check_id = chk_id);
2797
2798 CURSOR block_csr IS
2799 SELECT block_id,
2800 sql_stmnt,
2801 currency_code
2802 FROM csc_prof_blocks_b a
2803 WHERE a.block_id = sel_blk_id;
2804
2805 /* added this condition party_id=v_party_id for Bug 1937730*/
2806 CURSOR caccount_csr IS
2807 SELECT party_id, cust_account_id
2808 FROM hz_cust_accounts
2809 WHERE party_id=v_party_id
2810 AND status = 'A' ;
2811 -- Begin fix by spamujul for ER#8473903
2812 CURSOR cpsite_csr IS
2813 SELECT party_id,party_site_id
2814 FROM HZ_PARTY_SITES
2815 WHERE party_id = p_party_id
2816 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
2817 -- End fix by spamujul for ER#8473903
2818
2819 CURSOR checks_relparty_csr IS
2820 SELECT check_id,
2821 select_type,
2822 select_block_id,
2823 data_type,
2824 format_mask,
2825 check_upper_lower_flag,
2826 threshold_grade,
2827 check_level
2828 FROM csc_prof_checks_b chk
2829 WHERE check_level IN ( 'CONTACT',
2830 'SITE' -- Added'SITE' by spamujul for ER#8473903
2831 )
2832 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
2833 AND nvl(end_date_active, Sysdate))
2834 AND Exists ( SELECT a.check_id
2835 FROM csc_prof_group_checks a
2836 WHERE chk.check_id = a.check_id
2837 AND sysdate between nvl(a.start_date_active,sysdate)
2838 AND nvl(a.end_date_active,sysdate));
2839
2840 CURSOR crelparty_csr(c_party_id IN NUMBER) IS
2841 SELECT party_id FROM hz_parties
2842 WHERE party_id = c_party_id
2843 AND party_type = 'PARTY_RELATIONSHIP'
2844 AND status = 'A';
2845
2846 BEGIN
2847 l_ip_total :=0;
2848 l_up_total :=0;
2849 l_ia_total :=0;
2850 l_ua_total :=0;
2851 l_us_total := 0; -- added by spamujul for ER#8473903
2852 l_is_total := 0; -- added by spamujul for ER#8473903
2853 -- Loop through check_id and update block results for a party or account
2854 OPEN checks_csr;
2855 LOOP
2856 FETCH checks_csr
2857 INTO chk_id,
2858 sel_type,
2859 sel_blk_id,
2860 data_type,
2861 fmt_mask,
2862 chk_u_l_flag,
2863 Thd_grade,
2864 v_check_level;
2865 EXIT WHEN checks_csr%notfound;
2866 IF sel_type = 'T' then
2867 OPEN cblocks_csr;
2868 LOOP
2869 FETCH cblocks_csr into v_block_id;
2870 Exit when cblocks_csr%notfound;
2871 Evaluate_Blocks2(v_block_id,
2872 p_party_id,
2873 p_acct_id,
2874 p_psite_id, -- added by spamujul for ER#8473903
2875 l_up_total,
2876 l_ip_total,
2877 l_ua_total,
2878 l_ia_total
2879 ,l_us_total, -- added by spamujul for ER#8473903
2880 l_is_total -- added by spamujul for ER#8473903
2881 );
2882
2883 END LOOP;
2884 CLOSE cblocks_csr;
2885 END IF;
2886 END LOOP;
2887 CLOSE checks_csr;
2888 l_ip_total := 0;
2889 l_up_total :=0;
2890 l_ia_total := 0;
2891 l_ua_total :=0;
2892 l_us_total := 0; -- added by spamujul for ER#8473903
2893 l_is_total := 0; -- added by spamujul for ER#8473903
2894
2895 -- Loop through check_id and update check results for a party or account
2896 OPEN checks_csr;
2897 LOOP
2898 FETCH checks_csr
2899 INTO chk_id,
2900 sel_type,
2901 sel_blk_id,
2902 data_type,
2903 fmt_mask,
2904 chk_u_l_flag,
2905 Thd_grade,
2906 v_check_level;
2907 EXIT WHEN checks_csr%notfound;
2908 -- IF (chk_id NOT BETWEEN 21 AND 24) THEN
2909 IF (sel_type = 'T') THEN
2910 IF p_acct_id IS NULL THEN
2911 acct_flag := 'N';
2912 build_rule(acct_flag,chk_id,v_check_level, rule);
2913 ELSE
2914 acct_flag := 'Y';
2915 build_rule(acct_flag,chk_id,v_check_level, rule);
2916 END IF;
2917
2918 ELSIF (sel_type = 'B') THEN
2919 Open block_csr;
2920 Fetch block_csr
2921 INTO blk_id,
2922 sql_stmt,
2923 curr_code;
2924 Close block_csr;
2925
2926 /* Uncommented this condition for Bug 1937730*/
2927 /******************/
2928 IF sql_stmt IS NOT NULL Then
2929 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
2930 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
2931 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
2932 Else
2933 v_party_in_sql := 0;
2934 v_acct_in_sql := 0;
2935 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
2936 End if;
2937 /******************/
2938
2939 END IF;
2940
2941 If v_check_level='PARTY' then
2942 -- p_cid is passed as null as Cursor has to be parsed always
2943 Evaluate_One_Check(truncate_flag,
2944 chk_id,
2945 p_party_id,
2946 null,
2947 NULL, -- added by spamujul for ER#8473903
2948 v_check_level,
2949 sel_type,
2950 sel_blk_id,
2951 data_type,
2952 fmt_mask,
2953 chk_u_l_flag,
2954 Thd_grade,
2955 rule,
2956 blk_id,
2957 sql_stmt,
2958 curr_code,
2959 l_up_total,
2960 l_ip_total,
2961 l_ua_total,
2962 l_ia_total ,
2963 l_us_total, -- added by spamujul for ER#8473903
2964 l_is_total , -- added by spamujul for ER#8473903
2965 NULL );
2966 End if;
2967 --END IF;
2968
2969 /* This begin, end exception is added mainly for exception handing for Bug 19800
2970 04*/
2971
2972 Begin
2973 /* added this condition for Bug 1937730*/
2974 v_party_id:=p_party_id;
2975 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
2976 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- added for 1850508
2977 -- Check can be made only for 'B' types,
2978 -- If acct is not present as bind variable, the sql might returnwrong
2979 -- rows (party level counts) at account leve.
2980
2981 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0)) OR
2982 --(sel_type='T') ) Then
2983 NULL;
2984 Else
2985 -- Loop through all parties with accounts
2986 -- added for 1850508
2987 --Open Cursor
2988 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
2989 cid := dbms_sql.open_cursor;
2990 if (sel_type = 'B') then
2991 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
2992 elsif (sel_type = 'T') then
2993 dbms_sql.parse(cid, rule, dbms_sql.native);
2994 end if;
2995 dbms_sql.define_column(cid,1,val,240);
2996
2997 OPEN caccount_csr;
2998 LOOP
2999 FETCH caccount_csr
3000 INTO cparty_id,
3001 ccust_acct_id;
3002 EXIT WHEN caccount_csr%notfound;
3003 Evaluate_One_Check(truncate_flag,
3004 chk_id,
3005 cparty_id,
3006 ccust_acct_id,
3007 NULL, -- added by spamujul for ER#8473903
3008 v_check_level,
3009 sel_type,
3010 sel_blk_id,
3011 data_type,
3012 fmt_mask,
3013 chk_u_l_flag,
3014 Thd_grade,
3015 rule,
3016 blk_id,
3017 sql_stmt,
3018 curr_code,
3019 l_up_total,
3020 l_ip_total,
3021 l_ua_total,
3022 l_ia_total ,
3023 l_us_total, -- added by spamujul for ER#8473903
3024 l_is_total, -- added by spamujul for ER#8473903
3025 cid);
3026 END LOOP;
3027 CLOSE caccount_csr;
3028 IF (dbms_sql.is_open(cid)) THEN
3029 dbms_sql.close_cursor(cid);
3030 end if;
3031 End if; -- added for 1850508
3032 END IF;
3033 Exception
3034 When others then
3035 IF (dbms_sql.is_open(cid)) THEN
3036 dbms_sql.close_cursor(cid);
3037 end if;
3038 set_context('Evaluate_Checks3',
3039 'chk_id=>'||to_char(chk_id),
3040 'party_id=>'||to_char(cparty_id),
3041 'account_id=>'||to_char(ccust_acct_id)
3042 ,'party_site_id =>'|| NULL -- added by spamujul for ER#8473903
3043 );
3044 g_error := sqlcode || ' ' || sqlerrm;
3045 set_context(NULL, g_error);
3046 End;
3047 -- Begin fix by spamujul for ER#8473903
3048 Begin
3049 v_party_id:=p_party_id;
3050 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
3051 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
3052 NULL;
3053 ELSE
3054 cid := dbms_sql.open_cursor;
3055 IF (sel_type = 'B') THEN
3056 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
3057 ELSIF (sel_type = 'T') THEN
3058 dbms_sql.parse(cid, rule, dbms_sql.native);
3059 END IF;
3060 dbms_sql.define_column(cid,1,val,240);
3061 OPEN cpsite_csr;
3062 LOOP
3063 FETCH cpsite_csr
3064 INTO cparty_id,
3065 cpsite_id;
3066 EXIT WHEN cpsite_csr%notfound;
3067 Evaluate_One_Check(truncate_flag,
3068 chk_id,
3069 cparty_id,
3070 NULL, -- For site level profile check, account parameter should be null
3071 cpsite_id,
3072 v_check_level,
3073 sel_type,
3074 sel_blk_id,
3075 data_type,
3076 fmt_mask,
3077 chk_u_l_flag,
3078 Thd_grade,
3079 rule,
3080 blk_id,
3081 sql_stmt,
3082 curr_code,
3083 l_up_total,
3084 l_ip_total,
3085 l_ua_total,
3086 l_ia_total ,
3087 l_us_total,
3088 l_is_total,
3089 cid);
3090 END LOOP;
3091 CLOSE cpsite_csr;
3092 IF (dbms_sql.is_open(cid)) THEN
3093 dbms_sql.close_cursor(cid);
3094 end if;
3095 END IF;
3096 END IF;
3097 Exception
3098 When others then
3099 IF (dbms_sql.is_open(cid)) THEN
3100 dbms_sql.close_cursor(cid);
3101 end if;
3102 set_context('Evaluate_Checks3',
3103 'chk_id=>'||to_char(chk_id),
3104 'party_id=>'||to_char(cparty_id),
3105 'account_id=>'|| NULL
3106 ,'party_site_id =>'||to_char(cpsite_id)
3107 );
3108 g_error := sqlcode || ' ' || sqlerrm;
3109 set_context(NULL, g_error);
3110 End;
3111 -- End fix by spamujul for ER#8473903
3112 END LOOP;
3113 CLOSE checks_csr;
3114
3115
3116
3117 /*Commented this if condition for Bug 1937730*/
3118 -- IF p_acct_id IS NULL THEN
3119 -- check if there are still records to be inserted
3120 IF l_ip_total <> 0 THEN
3121 l_for_insert := 'Y';
3122 l_for_party := 'Y';
3123 l_for_psite := 'N';-- added by spamujul for ER#8473903
3124 Insert_Update_Check_Results(l_ip_total,
3125 l_for_insert,
3126 l_for_party
3127 ,l_for_psite -- added by spamujul for ER#8473903
3128 );
3129 l_ip_total :=0;
3130 END IF;
3131 -- check if there are still records to be updated
3132 IF l_up_total <> 0 THEN
3133 l_for_insert := 'N';
3134 l_for_party := 'Y';
3135 l_for_psite := 'N';-- added by spamujul for ER#8473903
3136 Insert_Update_Check_Results (l_up_total,
3137 l_for_insert,
3138 l_for_party
3139 ,l_for_psite -- added by spamujul for ER#8473903
3140 );
3141 l_up_total :=0;
3142 END IF;
3143
3144 -- ELSE
3145 -- check if there are still records to be inserted
3146 IF l_ia_total <> 0 THEN
3147 l_for_insert := 'Y';
3148 l_for_party := 'N';
3149 l_for_psite := 'N';-- added by spamujul for ER#8473903
3150 Insert_Update_Check_Results(l_ia_total,
3151 l_for_insert,
3152 l_for_party
3153 ,l_for_psite -- added by spamujul for ER#8473903
3154 );
3155 l_ia_total :=0;
3156 END IF;
3157
3158 -- check if there are still records to be updated
3159 IF l_ua_total <> 0 THEN
3160 l_for_insert := 'N';
3161 l_for_party := 'N';
3162 l_for_psite := 'N';-- added by spamujul for ER#8473903
3163 Insert_Update_Check_Results(l_ua_total,
3164 l_for_insert,
3165 l_for_party
3166 ,l_for_psite -- added by spamujul for ER#8473903
3167 );
3168 l_ua_total :=0;
3169 END IF;
3170 -- Begin fix by spamujul for ER#8473903
3171 IF l_is_total <> 0 THEN
3172 l_for_insert := 'Y';
3173 l_for_party := 'N';
3174 l_for_psite := 'Y';-- added by spamujul for ER#8473903
3175 Insert_Update_Check_Results(l_is_total,
3176 l_for_insert,
3177 l_for_party
3178 ,l_for_psite -- added by spamujul for ER#8473903
3179 );
3180 l_is_total :=0;
3181 END IF;
3182 IF l_us_total <> 0 THEN
3183 l_for_insert := 'N';
3184 l_for_party := 'N';
3185 l_for_psite := 'Y';-- added by spamujul for ER#8473903
3186 Insert_Update_Check_Results(l_us_total,
3187 l_for_insert,
3188 l_for_party
3189 ,l_for_psite -- added by spamujul for ER#8473903
3190 );
3191 l_us_total :=0;
3192 END IF;
3193 -- End fix by spamujul for ER#8473903
3194 --New changes
3195 IF g_dashboard_for_contact IS NULL THEN
3196 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
3197 END IF;
3198 IF g_dashboard_for_contact = 'Y' THEN
3199 l_ip_total :=0;
3200 l_up_total :=0;
3201 l_ia_total :=0;
3202 l_ua_total :=0;
3203 l_us_total := 0; -- added by spamujul for ER#8473903
3204 l_is_total := 0; -- added by spamujul for ER#8473903
3205 -- Loop through check_id and update block results for a party or account
3206 OPEN checks_relparty_csr;
3207 LOOP
3208 FETCH checks_relparty_csr
3209 INTO chk_id,
3210 sel_type,
3211 sel_blk_id,
3212 data_type,
3213 fmt_mask,
3214 chk_u_l_flag,
3215 Thd_grade,
3216 v_check_level;
3217 EXIT WHEN checks_relparty_csr%notfound;
3218 IF sel_type = 'T' then
3219 OPEN cblocks_csr;
3220 LOOP
3221 FETCH cblocks_csr into v_block_id;
3222 Exit when cblocks_csr%notfound;
3223 Evaluate_Blocks5(v_block_id,
3224 p_party_id,
3225 p_psite_id, -- added by spamujul for ER#8473903
3226 l_up_total,
3227 l_ip_total,
3228 l_ua_total,
3229 l_ia_total
3230 ,l_us_total, -- added by spamujul for ER#8473903
3231 l_is_total -- added by spamujul for ER#8473903
3232 );
3233 END LOOP;
3234 CLOSE cblocks_csr;
3235 END IF;
3236 END LOOP;
3237 CLOSE checks_relparty_csr;
3238 l_ip_total := 0;
3239 l_up_total := 0;
3240 l_ia_total := 0;
3241 l_ua_total := 0;
3242 l_us_total := 0; -- added by spamujul for ER#8473903
3243 l_is_total := 0; -- added by spamujul for ER#8473903
3244
3245 -- Loop through check_id and update check results for a party or account
3246 OPEN checks_relparty_csr;
3247 LOOP
3248 FETCH checks_relparty_csr
3249 INTO chk_id,
3250 sel_type,
3251 sel_blk_id,
3252 data_type,
3253 fmt_mask,
3254 chk_u_l_flag,
3255 Thd_grade,
3256 v_check_level;
3257 EXIT WHEN checks_relparty_csr%notfound;
3258 IF (sel_type = 'T') THEN
3259 build_rule('N',chk_id,v_check_level, rule);
3260 ELSIF (sel_type = 'B') THEN
3261 Open block_csr;
3262 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
3263 Close block_csr;
3264 IF sql_stmt IS NOT NULL Then
3265 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
3266 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
3267 Else
3268 v_party_in_sql := 0;
3269 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
3270 End if;
3271
3272 END IF;
3273 If v_check_level='CONTACT' then
3274 Evaluate_One_Check(truncate_flag,
3275 chk_id,
3276 p_party_id,
3277 null,
3278 NULL, -- added by spamujul for ER#8473903
3279 v_check_level,
3280 sel_type,
3281 sel_blk_id,
3282 data_type,
3283 fmt_mask,
3284 chk_u_l_flag,
3285 Thd_grade,
3286 rule,
3287 blk_id,
3288 sql_stmt,
3289 curr_code,
3290 l_up_total,
3291 l_ip_total,
3292 l_ua_total,
3293 l_ia_total ,
3294 l_us_total, -- added by spamujul for ER#8473903
3295 l_is_total, -- added by spamujul for ER#8473903
3296 NULL );
3297 End if;
3298 -- Begin fix by spamujul for ER#8473903
3299 Begin
3300 v_party_id:=p_party_id;
3301 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
3302 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
3303 NULL;
3304 ELSE
3305 cid := dbms_sql.open_cursor;
3306 IF (sel_type = 'B') THEN
3307 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
3308 ELSIF (sel_type = 'T') THEN
3309 dbms_sql.parse(cid, rule, dbms_sql.native);
3310 END IF;
3311 dbms_sql.define_column(cid,1,val,240);
3312 OPEN cpsite_csr;
3313 LOOP
3314 FETCH cpsite_csr
3315 INTO cparty_id,
3316 cpsite_id;
3317 EXIT WHEN cpsite_csr%notfound;
3318 Evaluate_One_Check(truncate_flag,
3319 chk_id,
3320 cparty_id,
3321 NULL, -- For site level profile check, account parameter should be null
3322 cpsite_id,
3323 v_check_level,
3324 sel_type,
3325 sel_blk_id,
3326 data_type,
3327 fmt_mask,
3328 chk_u_l_flag,
3329 Thd_grade,
3330 rule,
3331 blk_id,
3332 sql_stmt,
3333 curr_code,
3334 l_up_total,
3335 l_ip_total,
3336 l_ua_total,
3337 l_ia_total ,
3338 l_us_total,
3339 l_is_total,
3340 cid);
3341 END LOOP;
3342 CLOSE cpsite_csr;
3343 IF (dbms_sql.is_open(cid)) THEN
3344 dbms_sql.close_cursor(cid);
3345 end if;
3346 END IF;
3347 END IF;
3348 Exception
3349 When others then
3350 IF (dbms_sql.is_open(cid)) THEN
3351 dbms_sql.close_cursor(cid);
3352 end if;
3353 set_context('Evaluate_Checks3',
3354 'chk_id=>'||to_char(chk_id),
3355 'party_id=>'||to_char(cparty_id),
3356 'account_id=>'|| NULL
3357 ,'party_site_id =>'||to_char(cpsite_id)
3358 );
3359 g_error := sqlcode || ' ' || sqlerrm;
3360 set_context(NULL, g_error);
3361 End;
3362 -- End fix by spamujul for ER#8473903
3363
3364 END LOOP;
3365 CLOSE checks_relparty_csr;
3366 IF l_ip_total <> 0 THEN
3367 l_for_insert := 'Y';
3368 l_for_party := 'Y';
3369 l_for_psite := 'N';-- added by spamujul for ER#8473903
3370 Insert_Update_Check_Results(l_ip_total,
3371 l_for_insert,
3372 l_for_party
3373 ,l_for_psite -- added by spamujul for ER#8473903
3374 );
3375 l_ip_total :=0;
3376 END IF;
3377 -- check if there are still records to be updated
3378 IF l_up_total <> 0 THEN
3379 l_for_insert := 'N';
3380 l_for_party := 'Y';
3381 l_for_psite := 'N';-- added by spamujul for ER#8473903
3382 Insert_Update_Check_Results (l_up_total,
3383 l_for_insert,
3384 l_for_party
3385 ,l_for_psite -- added by spamujul for ER#8473903
3386 );
3387 l_up_total :=0;
3388 END IF;
3389 -- Begin fix by spamujul for ER#8473903
3390 IF l_is_total <> 0 THEN
3391 l_for_insert := 'Y';
3392 l_for_party := 'N';
3393 l_for_psite := 'Y';-- added by spamujul for ER#8473903
3394 Insert_Update_Check_Results(l_is_total,
3395 l_for_insert,
3396 l_for_party
3397 ,l_for_psite -- added by spamujul for ER#8473903
3398 );
3399 l_is_total :=0;
3400 END IF;
3401 IF l_us_total <> 0 THEN
3402 l_for_insert := 'N';
3403 l_for_party := 'N';
3404 l_for_psite := 'Y';-- added by spamujul for ER#8473903
3405 Insert_Update_Check_Results(l_us_total,
3406 l_for_insert,
3407 l_for_party
3408 ,l_for_psite -- added by spamujul for ER#8473903
3409 );
3410 l_us_total :=0;
3411 END IF;
3412 -- End fix by spamujul for ER#8473903
3413
3414 END IF; -- global if
3415 --End of new changes
3416
3417 --New changes for Employee HelpDesk
3418
3419 IF g_dashboard_for_employee = 'Y' THEN
3420 l_ip_total :=0;
3421 l_up_total :=0;
3422 l_ia_total :=0;
3423 l_ua_total :=0;
3424 l_us_total := 0; -- added by spamujul for ER#8473903
3425 l_is_total := 0; -- added by spamujul for ER#8473903
3426 -- Loop through check_id and update block results for a party or account
3427 OPEN checks_emp_csr;
3428 LOOP
3429 FETCH checks_emp_csr
3430 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
3431 EXIT WHEN checks_emp_csr%notfound;
3432
3433 IF sel_type = 'T' then
3434 OPEN cblocks_csr;
3435 LOOP
3436 FETCH cblocks_csr into v_block_id;
3437 Exit when cblocks_csr%notfound;
3438 Evaluate_Blocks5(v_block_id,
3439 p_party_id,
3440 p_psite_id, -- added by spamujul for ER#8473903
3441 l_up_total,
3442 l_ip_total,
3443 l_ua_total,
3444 l_ia_total
3445 ,l_us_total, -- added by spamujul for ER#8473903
3446 l_is_total -- added by spamujul for ER#8473903
3447 );
3448 END LOOP;
3449 CLOSE cblocks_csr;
3450 END IF;
3451 END LOOP;
3452 CLOSE checks_emp_csr;
3453
3454 l_ip_total :=0;
3455 l_up_total :=0;
3456 l_ia_total :=0;
3457 l_ua_total :=0;
3458
3459 -- Loop through check_id and update check results for a party or account
3460 OPEN checks_emp_csr;
3461 LOOP
3462 FETCH checks_emp_csr
3463 INTO chk_id, sel_type, sel_blk_id, data_type, fmt_mask,chk_u_l_flag,Thd_grade,v_check_level;
3464 EXIT WHEN checks_emp_csr%notfound;
3465 IF (sel_type = 'T') THEN
3466 build_rule('N',chk_id,v_check_level, rule);
3467 ELSIF (sel_type = 'B') THEN
3468 Open block_csr;
3469 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
3470 Close block_csr;
3471 IF sql_stmt IS NOT NULL Then
3472 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
3473 Else
3474 v_party_in_sql := 0;
3475 End if;
3476
3477 END IF;
3478
3479 If v_check_level='EMPLOYEE' then
3480 Evaluate_One_Check(truncate_flag,
3481 chk_id,
3482 p_party_id,
3483 null,
3484 NULL, -- added by spamujul for ER#8473903
3485 v_check_level,
3486 sel_type,
3487 sel_blk_id,
3488 data_type,
3489 fmt_mask,
3490 chk_u_l_flag,
3491 Thd_grade,
3492 rule,
3493 blk_id,
3494 sql_stmt,
3495 curr_code,
3496 l_up_total,
3497 l_ip_total,
3498 l_ua_total,
3499 l_ia_total ,
3500 l_us_total, -- added by spamujul for ER#8473903
3501 l_is_total, -- added by spamujul for ER#8473903
3502 NULL );
3503 End if;
3504 END LOOP;
3505 CLOSE checks_emp_csr;
3506 IF l_ip_total <> 0 THEN
3507 l_for_insert := 'Y';
3508 l_for_party := 'Y';
3509 l_for_psite := 'N';-- added by spamujul for ER#8473903
3510 Insert_Update_Check_Results(l_ip_total,
3511 l_for_insert,
3512 l_for_party
3513 ,l_for_psite -- added by spamujul for ER#8473903
3514 );
3515 l_ip_total :=0;
3516 END IF;
3517 -- check if there are still records to be updated
3518 IF l_up_total <> 0 THEN
3519 l_for_insert := 'N';
3520 l_for_party := 'Y';
3521 l_for_psite := 'N';-- added by spamujul for ER#8473903
3522 Insert_Update_Check_Results (l_up_total,
3523 l_for_insert,
3524 l_for_party
3525 ,l_for_psite -- added by spamujul for ER#8473903
3526 );
3527 l_up_total :=0;
3528 END IF;
3529 END IF; -- global if
3530 --End of new changes
3531
3532 COMMIT;
3533
3534 -- Return 0 for successful completion, 1 for warnings, 2 for error
3535 IF (error_flag) THEN
3536 errbuf := Sqlerrm;
3537 retcode := 2;
3538 ELSIF (warning_msg <> '') THEN
3539 errbuf := warning_msg;
3540 retcode := 1;
3541 ELSE
3542 errbuf := '';
3543 retcode := 0;
3544 END IF;
3545
3546 IF (debug) THEN
3547 fnd_file.close;
3548 END IF;
3549
3550 EXCEPTION
3551 WHEN OTHERS THEN
3552 ROLLBACK;
3553 IF (checks_csr%isopen) THEN
3554 CLOSE checks_csr;
3555 END IF;
3556 IF (debug) THEN
3557 fnd_file.close;
3558 END IF;
3559 -- Retrieve error message into errbuf
3560 errbuf := Sqlerrm;
3561 -- Return 2 for error
3562 retcode := 2;
3563 g_error := sqlcode || ' ' || sqlerrm;
3564 fnd_file.put_line(fnd_file.log , g_error);
3565 END Evaluate_Checks3;
3566
3567 -- This procedure evaluates the checks for all parties/account in a particular group
3568 -- The batch sql statement is not null and profile check is of type variable ('B')
3569 PROCEDURE Evaluate_Checks4_Var(p_group_id NUMBER) IS
3570 chk_id Number;
3571 chk_name Varchar2(240);
3572 sel_blk_id Number;
3573 data_type Varchar2(90);
3574 fmt_mask Varchar2(90);
3575 rule Varchar2(32767);
3576 chk_u_l_flag Varchar2(3);
3577 Thd_grade Varchar2(9);
3578 truncate_flag Varchar2(1) := 'N';
3579 blk_id Number := null;
3580 sql_stmt Varchar2(2000) := null;
3581 batch_sql_stmnt Varchar2(4000) := null;
3582 curr_code Varchar2(15) := null;
3583 v_party_in_sql Number := 0;
3584 v_acct_in_sql Number := 0;
3585 v_psite_in_sql Number :=0; -- Added by spamujul for ER#8473903
3586 v_party_id Number;
3587 v_check_level Varchar2(10);
3588 curr_date DATE := SYSDATE;
3589 insert_stmnt VARCHAR2(4000);
3590 insert_stmnt_sum VARCHAR2(4000);
3591 insert_stmnt_final VARCHAR2(4000);
3592 insert_stmnt_party VARCHAR2(4000);
3593 insert_stmnt_acct VARCHAR2(4000);
3594 --Fix bug#7329039 by mpathani
3595 --select_clause VARCHAR2(100);
3596 --v_select_clause VARCHAR2(100);
3597 select_clause VARCHAR2(2000);
3598 v_select_clause VARCHAR2(2000);
3599 Range_Low_Value VARCHAR2(240);
3600 Range_High_Value VARCHAR2(240);
3601 val VARCHAR2(240) := null;
3602 /* variables for columns of insert statement */
3603 c_fmt_mask VARCHAR2(1000);
3604 c_grade VARCHAR2(1000);
3605 c_curr_code VARCHAR2(1000);
3606 c_threshold VARCHAR2(1000);
3607 c_rating VARCHAR2(1000);
3608 c_color VARCHAR2(1000);
3609 v_count NUMBER;
3610 v_chk_count NUMBER;
3611 v_batch_count NUMBER;
3612 -- varlables for getting CSC schema name
3613 v_schema_status VARCHAR2(1);
3614 v_industry VARCHAR2(1);
3615 v_schema_name VARCHAR2(30);
3616 v_get_appl BOOLEAN;
3617
3618 -- variables to build the batch sql for summation
3619 v_select_pos number;
3620 v_select_length number;
3621 v_from_pos number;
3622 v_from_sum varchar2(2000);
3623 v_select_sum varchar2(2000) := 'SELECT hz.party_id, null,null, '; -- Included 'NULL' value for party_site_id by spamujul for ER#8473903
3624 v_group_pos number;
3625 v_group varchar2(2000) := 'GROUP BY hz.party_id';
3626 return_status varchar2(50);
3627 -- variables for handling contact profile variables
3628 v_where_clause_no_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE IN (' || '''' || 'PERSON' || '''' || ', ' || '''' || 'ORGANIZATION' || '''' || ')' ;
3629 v_where_clause_rel VARCHAR2(1000) := 'HZ.PARTY_TYPE = ' || '''' ||'PARTY_RELATIONSHIP'|| '''' ;
3630
3631 TABLESEGMENT_FULL EXCEPTION;
3632 INDEXSEGMENT_FULL EXCEPTION;
3633 SNAPSHOT_TOO_OLD EXCEPTION;
3634 INTERNAL_ERROR EXCEPTION;
3635 SUMMATION_ERROR EXCEPTION;
3636
3637 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
3638 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
3639 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
3640 PRAGMA EXCEPTION_INIT(INTERNAL_ERROR, -600);
3641
3642 checks_csr checks_cur_var;
3643
3644 CURSOR block_csr IS
3645 SELECT block_id,
3646 sql_stmnt,
3647 UPPER(batch_sql_stmnt),
3648 currency_code,
3649 select_clause
3650 FROM csc_prof_blocks_b a
3651 WHERE a.block_id = sel_blk_id;
3652
3653 Cursor val_csr3 IS
3654 Select Range_Low_Value,
3655 Range_High_Value
3656 From csc_prof_check_ratings
3657 Where check_id = chk_id
3658 and check_rating_grade = thd_grade;
3659
3660 CURSOR rating_crs IS
3661 SELECT rating_code,
3662 check_rating_grade,
3663 color_code,
3664 range_low_value,
3665 range_high_value
3666 FROM csc_prof_check_ratings
3667 WHERE check_id = chk_id;
3668
3669 BEGIN
3670 COMMIT;
3671 EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
3672 EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES=TRUE';
3673
3674 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
3675
3676 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS NOLOGGING';
3677 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS2_T NOLOGGING';
3678 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_BATCH_RESULTS1_T NOLOGGING';
3679
3680 SELECT count(*) INTO v_chk_count FROM csc_prof_check_results;
3681 SELECT count(*) INTO v_batch_count FROM CSC_PROF_BATCH_RESULTS2_T;
3682 IF v_chk_count = 0 AND v_batch_count <> 0 THEN
3683 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
3684 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
3685 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
3686 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
3687 INTO csc_prof_check_results
3688 (check_results_id,
3689 check_id,
3690 party_id,
3691 cust_account_id,
3692 party_site_id, -- Added by spamujul for ER#8473903
3693 value,
3694 currency_code,
3695 grade,
3696 created_by,
3697 creation_date,
3698 last_updated_by,
3699 last_update_date,
3700 last_update_login,
3701 results_threshold_flag,
3702 rating_code,
3703 color_code
3704 )
3705 SELECT
3706 check_results_id,
3707 check_id,
3708 party_id,
3709 cust_account_id,
3710 party_site_id, -- Added by spamujul for ER#8473903
3711 value,
3712 currency_code,
3713 grade,
3714 created_by,
3715 creation_date,
3716 last_updated_by,
3717 last_update_date,
3718 last_update_login,
3719 results_threshold_flag,
3720 rating_code,
3721 color_code
3722 FROM CSC_PROF_BATCH_RESULTS2_T;
3723 COMMIT;
3724 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
3725 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
3726 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
3727 END IF;
3728 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
3729 IF g_dashboard_for_contact IS NULL THEN
3730 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT', g_dashboard_for_contact);
3731 END IF;
3732 /* R12 Employee HelpDesk Modifications */
3733 IF g_dashboard_for_employee ='Y' THEN
3734 OPEN checks_csr FOR
3735 SELECT check_id,
3736 select_block_id,
3737 check_level,
3738 data_type,
3739 format_mask,
3740 check_upper_lower_flag,
3741 threshold_grade
3742 FROM csc_prof_checks_b
3743 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
3744 WHERE group_id = p_group_id)
3745 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
3746 AND Nvl(end_date_active, Sysdate)
3747 AND select_type = 'B'
3748 AND check_level IN ('EMPLOYEE');
3749 ELSIF g_dashboard_for_employee ='N' THEN
3750 IF g_dashboard_for_contact = 'Y' THEN
3751 OPEN checks_csr FOR
3752 SELECT check_id,
3753 select_block_id,
3754 check_level,
3755 data_type,
3756 format_mask,
3757 check_upper_lower_flag,
3758 threshold_grade
3759 FROM csc_prof_checks_b
3760 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
3761 WHERE group_id = p_group_id)
3762 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
3763 AND Nvl(end_date_active, Sysdate)
3764 AND select_type = 'B'
3765 AND check_level IN ('PARTY', 'ACCOUNT', 'CONTACT','SITE') -- Included 'SITE' by spamujul for ER#8473903
3766 ;
3767 ELSIF g_dashboard_for_contact = 'N' THEN
3768 OPEN checks_csr FOR
3769 SELECT check_id,
3770 select_block_id,
3771 check_level,
3772 data_type,
3773 format_mask,
3774 check_upper_lower_flag,
3775 threshold_grade
3776 FROM csc_prof_checks_b
3777 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
3778 WHERE group_id = p_group_id)
3779 AND SYSDATE BETWEEN Nvl(start_date_active, Sysdate)
3780 AND Nvl(end_date_active, Sysdate)
3781 AND select_type = 'B'
3782 AND check_level IN ('PARTY', 'ACCOUNT','SITE') -- Included 'SITE' by spamujul for ER#8473903
3783 ;
3784 END IF;
3785 END IF;
3786 /* End of R12 Employee HelpDesk Modifications */
3787 LOOP
3788 FETCH checks_csr
3789 INTO chk_id,
3790 sel_blk_id,
3791 v_check_level,
3792 data_type,
3793 fmt_mask,
3794 chk_u_l_flag,
3795 Thd_grade;
3796 EXIT WHEN checks_csr%notfound;
3797 OPEN block_csr;
3798 FETCH block_csr
3799 INTO blk_id,
3800 sql_stmt,
3801 batch_sql_stmnt,
3802 curr_code,
3803 select_clause;
3804 CLOSE block_csr;
3805 IF batch_sql_stmnt IS NOT NULL THEN
3806 IF v_check_level = 'CONTACT' THEN
3807 IF g_dashboard_for_contact = 'Y' THEN
3808 batch_sql_stmnt := UPPER(batch_sql_stmnt);
3809 batch_sql_stmnt := REPLACE(batch_sql_stmnt, v_where_clause_no_rel, v_where_clause_rel);
3810 END IF;
3811 END IF;
3812 IF sql_stmt IS NOT NULL THEN
3813 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
3814 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
3815 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
3816 ELSE
3817 v_party_in_sql := 0;
3818 v_acct_in_sql := 0;
3819 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
3820 END IF;
3821 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
3822 -- insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || batch_sql_stmnt; -- Commnted the following code by spamujul for ER#8473903
3823 insert_stmnt := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,PARTY_SITE_ID,VALUE) ' || batch_sql_stmnt; -- Added by spamujul for ER#8473903
3824 EXECUTE IMMEDIATE (insert_stmnt);
3825 IF v_acct_in_sql <> 0 AND v_check_level = 'PARTY' THEN
3826 v_select_pos := NULL;
3827 v_select_length := NULL;
3828 v_from_pos := NULL;
3829 v_from_sum := NULL;
3830 v_select_sum := 'SELECT hz.party_id, null, NULL, '; -- Added Last 'Null' for Site operation
3831 v_select_clause := NULL;
3832 v_group_pos := NULL;
3833 v_select_clause := rtrim(ltrim(UPPER(select_clause)));
3834 v_select_sum := v_select_sum || v_select_clause;
3835 v_select_pos := instr(upper(batch_sql_stmnt), v_select_clause);
3836 v_select_length := length(v_select_clause);
3837 v_from_pos := v_select_pos + v_select_length;
3838 v_from_sum := substr(batch_sql_stmnt, v_from_pos);
3839 v_group_pos := instr(upper(v_from_sum), 'GROUP BY HZ.PARTY_ID');
3840 v_from_sum := substr(v_from_sum, 1, v_group_pos -1);
3841 v_from_sum := v_from_sum || v_group;
3842 v_select_sum := v_select_sum || ' ' || v_from_sum;
3843 -- validate the sql statement
3844 csc_core_utils_pvt.validate_sql_stmnt( p_sql_stmnt => v_select_sum,
3845 x_return_status => return_status);
3846 IF return_status = 'S' THEN
3847 -- insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T ' || v_select_sum ; -- Commented the following code by spamujul for ER#8473903
3848 -- Added the following code by spamujul for ER#8473903
3849 insert_stmnt_sum := 'INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,PARTY_SITE_ID,VALUE)' || v_select_sum ;
3850 EXECUTE IMMEDIATE (insert_stmnt_sum);
3851 ELSE
3852 RAISE SUMMATION_ERROR;
3853 fnd_file.put_line(fnd_file.log, 'Summation SQL failed for check_id' || chk_id);
3854 END IF;
3855 END IF;
3856 IF v_check_level = 'PARTY' THEN
3857 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
3858 ACCOUNT_ID,
3859 PARTY_SITE_ID, --Included party_site_id for ER#8473903
3860 VALUE)
3861 SELECT party_id, NULL, NULL,NULL -- Included NULL for party_site_id for ER#8473903
3862 FROM hz_parties hz
3863 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
3864 AND hz.status = 'A'
3865 AND hz.party_type IN ('PERSON', 'ORGANIZATION');
3866 ELSIF v_check_level = 'CONTACT' THEN
3867 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
3868 ACCOUNT_ID,
3869 PARTY_SITE_ID, --Included party_site_id for ER#8473903
3870 VALUE)
3871 SELECT party_id, NULL, NULL ,NULL -- Included NULL for party_site_id for ER#8473903
3872 FROM hz_parties hz
3873 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id)
3874 AND hz.status = 'A'
3875 AND hz.party_type = 'PARTY_RELATIONSHIP';
3876 ELSIF v_check_level = 'ACCOUNT' THEN
3877 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
3878 ACCOUNT_ID,
3879 PARTY_SITE_ID, --Included party_site_id for ER#8473903
3880 VALUE)
3881 SELECT party_id, cust_account_id, NULL ,NULL -- Included NULL for party_site_id for ER#8473903
3882 FROM hz_cust_accounts hz
3883 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.account_id = hz.cust_account_id)
3884 AND hz.status = 'A';
3885 ELSIF v_check_level = 'EMPLOYEE' THEN
3886 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,ACCOUNT_ID,PARTY_SITE_ID,VALUE) --Included party_site_id for ER#8473903
3887 SELECT person_id, NULL, NULL,NULL -- Included NULL for party_site_id for ER#8473903
3888 FROM per_workforce_current_x hz
3889 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.person_id) ;
3890 -- Begin fix by spamujul for ER#8473903
3891 ELSIF v_check_level = 'SITE' THEN
3892 INSERT INTO CSC_PROF_BATCH_RESULTS1_T(PARTY_ID,
3893 ACCOUNT_ID,
3894 PARTY_SITE_ID, --Included party_site_id for ER#8473903
3895 VALUE)
3896 SELECT hz.party_id, NULL, hz.party_site_id ,NULL -- Included NULL for party_site_id for ER#8473903
3897 FROM hz_party_sites hz
3898 WHERE NOT EXISTS (SELECT 1 FROM CSC_PROF_BATCH_RESULTS1_T c WHERE c.party_id = hz.party_id and c.party_site_id = hz.party_site_id)
3899 AND hz.status = 'A'
3900 AND nvl(hz.created_by_module,'XXX') <> 'SR_ONETIME';
3901 -- End fix by spamujul for ER#8473903
3902 END IF;
3903 OPEN val_csr3;
3904 FETCH val_csr3
3905 INTO Range_Low_Value,
3906 Range_High_Value;
3907 IF val_csr3%NOTFOUND THEN
3908 Range_Low_Value := NULL;
3909 Range_High_Value := NULL;
3910 END IF;
3911 CLOSE val_csr3;
3912
3913 SELECT COUNT(*) INTO v_count FROM csc_prof_check_ratings
3914 WHERE check_id = chk_id;
3915 rating_tbl.delete;
3916 IF v_count > 0 THEN
3917 OPEN rating_crs;
3918 FOR a in 1..v_count LOOP
3919 FETCH rating_crs INTO rating_tbl(a);
3920 END LOOP;
3921 CLOSE rating_crs;
3922 END IF;
3923 c_fmt_mask := 'CSC_Profile_Engine_PKG.format_mask(' ||
3924 '''' || curr_code || '''' || ',' ||
3925 '''' || data_type || '''' || ','||
3926 'value, '||
3927 ''''|| fmt_mask || '''' || ')' ;
3928
3929 c_grade := 'CSC_Profile_Engine_PKG.rating_color(' ||
3930 chk_id || ', ' ||
3931 'party_id, account_id,party_site_id, value, ' || -- included by spamujul for ER#8473903
3932 '''' || data_type || '''' || ', ' ||
3933 '''' || 'GRADE' || '''' ||', ' ||
3934 '''' || v_count || '''' || ')' ;
3935 c_curr_code := '''' || curr_code || '''';
3936 c_threshold := 'CSC_Profile_Engine_PKG.calc_threshold(' ||
3937 'value, '||
3938 '''' || Range_Low_Value || '''' || ', '||
3939 '''' || Range_High_Value || '''' || ', '||
3940 '''' || data_type || '''' || ', ' ||
3941 '''' || chk_u_l_flag || '''' || ')' ;
3942
3943 c_rating := 'CSC_Profile_Engine_PKG.rating_color(' ||
3944 chk_id || ', ' ||
3945 'party_id, account_id,party_site_id, value, ' || -- included by spamujul for ER#8473903
3946 '''' || data_type || '''' || ', ' ||
3947 '''' || 'RATING' || '''' ||', ' ||
3948 '''' || v_count || '''' || ')' ;
3949
3950 c_color := 'CSC_Profile_Engine_PKG.rating_color(' ||
3951 chk_id || ', ' ||
3952 'party_id, account_id,party_site_id, value, ' || -- included by spamujul for ER#8473903
3953 '''' || data_type || '''' || ', ' ||
3954 '''' || 'COLOR' || '''' ||', ' ||
3955 '''' || v_count || '''' || ')' ;
3956
3957 IF v_check_level = 'ACCOUNT' THEN
3958 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
3959 -- '(check_results_id, check_id, party_id, cust_account_id,value, currency_code, grade, '||
3960 -- added party_site_id in the below line for ER#8473903
3961 '(check_results_id, check_id, party_id, cust_account_id,party_site_id, value, currency_code, grade, '||
3962 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
3963 ' results_threshold_flag, rating_code, color_code)' ||
3964 ' SELECT csc_prof_check_results_s.nextval, '
3965 -- || chk_id || ', party_id, account_id, '
3966 -- added party_site_id in the below line for ER#8473903
3967 || chk_id || ', party_id, account_id,party_site_id, '
3968 || c_fmt_mask ||', '
3969 || c_curr_code || ', '
3970 || c_grade
3971 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
3972 || c_threshold ||', '
3973 || c_rating || ', '
3974 || c_color
3975 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(account_id, -999999) <> -999999 and party_site_id IS NULL'; -- Added 'AND PARTY_SITE_ID IS NULL' for ER#8473903
3976 -- Begin fix by spamujul for ER# 8473903
3977 ELSIF v_check_level = 'SITE' THEN
3978 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
3979 -- '(check_results_id, check_id, party_id, cust_account_id,value, currency_code, grade, '||
3980 -- added party_site_id in the below line for ER#8473903
3981 '(check_results_id, check_id, party_id, cust_account_id,party_site_id, value, currency_code, grade, '||
3982 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
3983 ' results_threshold_flag, rating_code, color_code)' ||
3984 ' SELECT csc_prof_check_results_s.nextval, '
3985 -- || chk_id || ', party_id, account_id, '
3986 -- added party_site_id in the below line for ER#8473903
3987 || chk_id || ', party_id, account_id,party_site_id, '
3988 || c_fmt_mask ||', '
3989 || c_curr_code || ', '
3990 || c_grade
3991 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
3992 || c_threshold ||', '
3993 || c_rating || ', '
3994 || c_color
3995 ||' FROM CSC_PROF_BATCH_RESULTS1_T where nvl(party_site_id, -999999) <> -999999 and account_id IS NULL';
3996 -- End fix by spamujul for ER#8473903
3997 ELSE
3998 insert_stmnt_final := 'INSERT /*+ PARALLEL(CSC_PROF_BATCH_RESULTS2_T, 12) */ INTO CSC_PROF_BATCH_RESULTS2_T ' ||
3999 -- '(check_results_id, check_id, party_id, cust_account_id, value, currency_code, grade, '||
4000 -- added party_site_id in the below line for ER#8473903
4001 '(check_results_id, check_id, party_id, cust_account_id,party_site_id, value, currency_code, grade, '||
4002 ' created_by, creation_date, last_updated_by, last_update_date, last_update_login, '||
4003 ' results_threshold_flag, rating_code, color_code)' ||
4004 ' SELECT csc_prof_check_results_s.nextval, '
4005 -- || chk_id || ', party_id, account_id, '
4006 -- added party_site_id in the below line for ER#8473903
4007 || chk_id || ', party_id, account_id,party_site_id, '
4008 || c_fmt_mask ||', '
4009 || c_curr_code || ', '
4010 || c_grade
4011 || ', FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.USER_ID, Sysdate, FND_GLOBAL.CONC_LOGIN_ID, '
4012 || c_threshold ||', '
4013 || c_rating || ', '
4014 || c_color
4015 ||' FROM CSC_PROF_BATCH_RESULTS1_T where account_id IS NULL and party_site_id IS NULL'; -- Added 'AND PARTY_SITE_ID IS NULL' for ER#8473903
4016 END IF;
4017 EXECUTE IMMEDIATE (insert_stmnt_final);
4018 COMMIT;
4019 ELSE
4020 /* set the global variable to Y to indicate that profile checks without batch sql exist */
4021 g_check_no_batch := 'Y';
4022 END IF ; /* batch_sql_stmnt IS NOT NULL */
4023 END LOOP;
4024 CLOSE checks_csr;
4025
4026 INSERT /*+ PARALLEL (CSC_PROF_BATCH_RESULTS2_T, 12) */
4027 INTO CSC_PROF_BATCH_RESULTS2_T
4028 (check_results_id,
4029 check_id,
4030 party_id,
4031 cust_account_id,
4032 party_site_id, -- Added by spamujul for ER#8473903
4033 value,
4034 currency_code,
4035 grade,
4036 created_by,
4037 creation_date,
4038 last_updated_by,
4039 last_update_date,
4040 last_update_login,
4041 results_threshold_flag,
4042 rating_code,
4043 color_code
4044 )
4045 SELECT
4046 check_results_id,
4047 check_id,
4048 party_id,
4049 cust_account_id,
4050 party_site_id, -- Added by spamujul for ER#8473903
4051 value,
4052 currency_code,
4053 grade,
4054 created_by,
4055 creation_date,
4056 last_updated_by,
4057 last_update_date,
4058 last_update_login,
4059 results_threshold_flag,
4060 rating_code,
4061 color_code
4062 FROM csc_prof_check_results
4063 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
4064 MINUS
4065 SELECT check_id FROM csc_prof_group_checks a
4066 WHERE group_id = p_group_id
4067 AND EXISTS (SELECT 1 FROM csc_prof_checks_b b
4068 WHERE a.check_id = b.check_id AND b.select_type = 'B'));
4069 COMMIT;
4070 EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| v_schema_name ||'.csc_prof_check_results';
4071
4072 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 UNUSABLE';
4073 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 UNUSABLE';
4074 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 UNUSABLE';
4075
4076 INSERT /*+ PARALLEL (csc_prof_check_results, 12) */
4077 INTO csc_prof_check_results
4078 (check_results_id,
4079 check_id,
4080 party_id,
4081 cust_account_id,
4082 party_site_id, -- Added by spamujul for ER#8473903
4083 value,
4084 currency_code,
4085 grade,
4086 created_by,
4087 creation_date,
4088 last_updated_by,
4089 last_update_date,
4090 last_update_login,
4091 results_threshold_flag,
4092 rating_code,
4093 color_code
4094 )
4095 SELECT
4096 check_results_id,
4097 check_id,
4098 party_id,
4099 cust_account_id,
4100 party_site_id, -- Added by spamujul for ER#8473903
4101 value,
4102 currency_code,
4103 grade,
4104 created_by,
4105 creation_date,
4106 last_updated_by,
4107 last_update_date,
4108 last_update_login,
4109 results_threshold_flag,
4110 rating_code, color_code
4111 FROM CSC_PROF_BATCH_RESULTS2_T;
4112
4113 COMMIT;
4114
4115
4116 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
4117 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
4118 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
4119
4120 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS2_T' ;
4121 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || v_schema_name ||'.CSC_PROF_BATCH_RESULTS1_T' ;
4122
4123 EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
4124 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
4125
4126 EXCEPTION
4127 WHEN Tablesegment_full then
4128 CSC_Profile_Engine_PKG.Handle_Exception;
4129 g_error := sqlcode || ' ' || sqlerrm;
4130 set_context('Evaluate_Checks4_Var',
4131 'check_id => ' || chk_id,
4132 'Error => ' || g_error);
4133 App_Exception.raise_exception;
4134
4135 WHEN Indexsegment_full then
4136 CSC_Profile_Engine_PKG.Handle_Exception;
4137 g_error := sqlcode || ' ' || sqlerrm;
4138 set_context('Evaluate_Checks4_Var',
4139 'check_id => ' || chk_id,
4140 'Error => ' || g_error);
4141 App_Exception.raise_exception;
4142
4143 WHEN SNAPSHOT_TOO_OLD THEN
4144 CSC_Profile_Engine_PKG.Handle_Exception;
4145 g_error := sqlcode || ' ' || sqlerrm;
4146 set_context('Evaluate_Checks4_Var',
4147 'check_id => ' || chk_id,
4148 'Error => ' || g_error);
4149 App_Exception.raise_exception;
4150
4151 WHEN INTERNAL_ERROR THEN
4152 CSC_Profile_Engine_PKG.Handle_Exception;
4153 g_error := sqlcode || ' ' || sqlerrm;
4154 set_context('Evaluate_Checks4_Var',
4155 'check_id => ' || chk_id,
4156 'Error => ' || g_error);
4157 App_Exception.raise_exception;
4158
4159 WHEN SUMMATION_ERROR THEN
4160 CSC_Profile_Engine_PKG.Handle_Exception;
4161 set_context('Evaluate_Checks4_Var',
4162 'Summation SQL failed for chk_id => '||to_char(chk_id));
4163 RAISE;
4164
4165 WHEN OTHERS THEN
4166 CSC_Profile_Engine_PKG.Handle_Exception;
4167 g_error := sqlcode || ' ' || sqlerrm;
4168 set_context('Evaluate_Checks4_Var',
4169 'check_id => ' || chk_id,
4170 'Error => ' || g_error);
4171 RAISE;
4172
4173 END Evaluate_Checks4_Var;
4174
4175 -- This procedure evaluates the checks
4176 -- for which the batch sql statement is NULL and group_id is not null
4177
4178 PROCEDURE Evaluate_Checks4_No_Batch
4179 ( errbuf OUT NOCOPY VARCHAR2,
4180 retcode OUT NOCOPY NUMBER ,
4181 p_group_id in Number
4182 ) IS
4183
4184 chk_id Number;
4185 chk_name Varchar2(240);
4186 cparty_id Number;
4187 ccust_acct_id Number;
4188 ccust_psite_id Number; -- added by spamujul for ER#8473903
4189 sel_type Varchar2(3);
4190 sel_blk_id Number;
4191 data_type Varchar2(90);
4192 fmt_mask Varchar2(90);
4193 rule Varchar2(32767);
4194 Chk_u_l_flag Varchar2(3);
4195 Thd_grade Varchar2(9);
4196 truncate_flag Varchar2(1) := 'N';
4197 acct_flag Varchar2(1);
4198 blk_id Number := null;
4199 blk_name Varchar2(240) := null;
4200 sql_stmt Varchar2(2000) := null;
4201 curr_code Varchar2(15) := null;
4202 v_party_in_sql Number := 0;
4203 v_acct_in_sql Number := 0;
4204 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
4205 v_check_level Varchar2(10);
4206 l_for_insert varchar2(1) := 'Y';
4207 l_for_party varchar2(1) := 'Y';
4208 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
4209 l_up_total Number := 0;
4210 l_ip_total Number := 0;
4211 l_ua_total Number := 0;
4212 l_ia_total Number := 0;
4213 l_us_total Number := 0; -- added by spamujul for ER#8473903
4214 l_is_total Number := 0; -- added by spamujul for ER#8473903
4215 v_party_id Number;
4216
4217 CURSOR checks_csr IS
4218 SELECT check_id,
4219 select_type,
4220 select_block_id,
4221 data_type,
4222 format_mask,
4223 check_upper_lower_flag,
4224 threshold_grade,
4225 check_level
4226 FROM csc_prof_checks_b a
4227 WHERE check_id IN (SELECT check_id
4228 FROM csc_prof_group_checks
4229 WHERE group_id = p_group_id)
4230 AND select_type = 'B'
4231 AND check_level IN ('PARTY','ACCOUNT','SITE') -- Included the 'SITE' by spamujul for ER#8473903
4232 AND EXISTS (SELECT null
4233 FROM csc_prof_blocks_b b
4234 WHERE a.select_block_id = b.block_id
4235 AND b.batch_sql_stmnt IS NULL)
4236 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
4237 AND Nvl(end_date_active, SYSDATE);
4238
4239 CURSOR cparty_csr IS
4240 SELECT party_id
4241 FROM hz_parties
4242 WHERE status = 'A'
4243 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
4244 -- Person, ORG added for 1850508
4245
4246 CURSOR caccount_csr IS
4247 SELECT party_id, cust_account_id
4248 FROM hz_cust_accounts
4249 WHERE party_id=v_party_id
4250 AND status = 'A' ;
4251 -- Begin fix by spamujul for NCR ER#8473903
4252 CURSOR cpsite_csr IS
4253 SELECT party_id, party_site_id
4254 FROM hz_party_sites
4255 WHERE party_id=v_party_id
4256 AND status = 'A'
4257 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
4258 -- End fix by spamujul for NCR ER#8473903
4259
4260 CURSOR block_csr IS
4261 SELECT block_id, sql_stmnt, currency_code
4262 FROM csc_prof_blocks_b a
4263 WHERE a.block_id = sel_blk_id;
4264
4265 cid number;
4266 val VARCHAR2(240) := null;
4267
4268 BEGIN
4269 /* R12 Employee HelpDesk Modifications */
4270 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
4271 IF g_dashboard_for_employee = 'N' THEN
4272 l_ip_total := 0;
4273 l_up_total := 0;
4274 l_ia_total := 0;
4275 l_ua_total := 0;
4276 l_us_total := 0; -- added by spamujul for ER#8473903
4277 l_is_total := 0; -- added by spamujul for ER#8473903
4278 OPEN checks_csr;
4279 LOOP
4280 FETCH checks_csr
4281 INTO chk_id,
4282 sel_type,
4283 sel_blk_id,
4284 data_type,
4285 fmt_mask,
4286 chk_u_l_flag,
4287 Thd_grade,
4288 v_check_level;
4289 EXIT WHEN checks_csr%notfound;
4290 Open block_csr;
4291 Fetch block_csr INTO
4292 blk_id,
4293 sql_stmt,
4294 curr_code;
4295 Close block_csr;
4296 IF sql_stmt IS NOT NULL Then
4297 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4298 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4299 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
4300 Else
4301 v_party_in_sql := 0;
4302 v_acct_in_sql := 0;
4303 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
4304 End if;
4305 Begin
4306 cid := dbms_sql.open_cursor;
4307 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4308 dbms_sql.define_column(cid,1,val,240);
4309 OPEN cparty_csr;
4310 LOOP
4311 FETCH cparty_csr
4312 INTO cparty_id;
4313 EXIT WHEN cparty_csr%notfound;
4314 If v_check_level='PARTY' Then
4315 Evaluate_One_Check(truncate_flag,
4316 chk_id,
4317 cparty_id,
4318 null,
4319 NULL, -- added by spamujul for ER#8473903
4320 v_check_level,
4321 sel_type,
4322 sel_blk_id,
4323 data_type,
4324 fmt_mask,
4325 chk_u_l_flag,
4326 Thd_grade,
4327 rule,
4328 blk_id,
4329 sql_stmt,
4330 curr_code,
4331 l_up_total,
4332 l_ip_total,
4333 l_ua_total,
4334 l_ia_total ,
4335 l_us_total, -- added by spamujul for ER#8473903
4336 l_is_total , -- added by spamujul for ER#8473903
4337 cid);
4338 End if;
4339 /* added this condition for Bug 1937730*/
4340 v_party_id:= cparty_id;
4341 IF v_check_level = 'ACCOUNT' Then
4342 If (v_acct_in_sql = 0) Then
4343 NULL;
4344 Else
4345 OPEN caccount_csr;
4346 LOOP
4347 FETCH caccount_csr
4348 INTO cparty_id,
4349 ccust_acct_id;
4350 EXIT WHEN caccount_csr%notfound;
4351 Evaluate_One_Check(truncate_flag,
4352 chk_id,
4353 cparty_id,
4354 ccust_acct_id,
4355 NULL, -- added by spamujul for ER#8473903
4356 v_check_level,
4357 sel_type,
4358 sel_blk_id,
4359 data_type,
4360 fmt_mask,
4361 chk_u_l_flag,
4362 Thd_grade,
4363 rule,
4364 blk_id,
4365 sql_stmt,
4366 curr_code,
4367 l_up_total,
4368 l_ip_total,
4369 l_ua_total
4370 , l_ia_total ,
4371 l_us_total, -- added by spamujul for ER#8473903
4372 l_is_total, -- added by spamujul for ER#8473903
4373 cid
4374 );
4375 END LOOP;
4376 CLOSE caccount_csr;
4377 End if; -- added for 1850508
4378 END IF;
4379 -- Begin fix by spamujul for ER#8473903
4380 IF v_check_level = 'SITE' THEN
4381 IF (v_psite_in_sql = 0) THEN
4382 NULL;
4383 ELSE
4384 OPEN cpsite_csr ;
4385 LOOP
4386 FETCH cpsite_csr
4387 INTO cparty_id,
4388 ccust_psite_id;
4389 EXIT WHEN cpsite_csr%notfound;
4390 Evaluate_One_Check(truncate_flag,
4391 chk_id,
4392 cparty_id,
4393 NULL,
4394 ccust_psite_id,
4395 v_check_level,
4396 sel_type,
4397 sel_blk_id,
4398 data_type,
4399 fmt_mask,
4400 chk_u_l_flag,
4401 Thd_grade,
4402 rule,
4403 blk_id,
4404 sql_stmt,
4405 curr_code,
4406 l_up_total,
4407 l_ip_total,
4408 l_ua_total
4409 , l_ia_total ,
4410 l_us_total,
4411 l_is_total,
4412 cid
4413 );
4414 END LOOP;
4415 CLOSE cpsite_csr;
4416 END IF;
4417 END IF;
4418 -- End fix by spamujul for ER#8473903
4419 END LOOP;
4420 CLOSE cparty_csr;
4421 IF (dbms_sql.is_open(cid)) THEN
4422 dbms_sql.close_cursor(cid);
4423 end if;
4424 Exception
4425 When others then
4426 IF (dbms_sql.is_open(cid)) THEN
4427 dbms_sql.close_cursor(cid);
4428 end if;
4429 set_context('Evaluate_Checks4_No_Batch',
4430 'chk_id=>'||to_char(chk_id),
4431 'party_id=>'||to_char(cparty_id),
4432 'account_id=>'||to_char(ccust_acct_id)
4433 ,'party_site_id=>'||to_char(ccust_psite_id) -- added by spamujul for ER#8473903
4434 );
4435 g_error := sqlcode || ' ' || sqlerrm;
4436 set_context(NULL, g_error);
4437 End;
4438 END LOOP;
4439 CLOSE checks_csr;
4440 -- check if there are still records to be inserted
4441 IF l_ip_total <> 0 THEN
4442 l_for_insert := 'Y';
4443 l_for_party := 'Y';
4444 l_for_psite := 'N';-- added by spamujul for ER#8473903
4445 Insert_Update_Check_Results(l_ip_total,
4446 l_for_insert,
4447 l_for_party
4448 ,l_for_psite -- added by spamujul for ER#8473903
4449 );
4450 l_ip_total :=0;
4451 END IF;
4452 -- check if there are still records to be updated
4453 IF l_up_total <> 0 THEN
4454 l_for_insert := 'N';
4455 l_for_party := 'Y';
4456 l_for_psite := 'N';-- added by spamujul for ER#8473903
4457 Insert_Update_Check_Results (l_up_total,
4458 l_for_insert,
4459 l_for_party
4460 ,l_for_psite -- added by spamujul for ER#8473903
4461 );
4462 l_up_total :=0;
4463 END IF;
4464 -- check if there are still records to be inserted
4465 IF l_ia_total <> 0 THEN
4466 l_for_insert := 'Y';
4467 l_for_party := 'N';
4468 l_for_psite := 'N';-- added by spamujul for ER#8473903
4469 Insert_Update_Check_Results(l_ia_total,
4470 l_for_insert,
4471 l_for_party
4472 ,l_for_psite -- added by spamujul for ER#8473903
4473 );
4474 l_ia_total :=0;
4475 END IF;
4476 -- check if there are still records to be updated
4477 IF l_ua_total <> 0 THEN
4478 l_for_insert := 'N';
4479 l_for_party := 'N';
4480 l_for_psite := 'N';-- added by spamujul for ER#8473903
4481 Insert_Update_Check_Results(l_ua_total,
4482 l_for_insert,
4483 l_for_party
4484 ,l_for_psite -- added by spamujul for ER#8473903
4485 );
4486 l_ua_total :=0;
4487 END IF;
4488 -- Begin fix by spamujul for ER#8473903
4489 IF l_is_total <> 0 THEN
4490 l_for_insert := 'Y';
4491 l_for_party := 'N';
4492 l_for_psite := 'Y';
4493 Insert_Update_Check_Results(l_is_total,
4494 l_for_insert,
4495 l_for_party
4496 ,l_for_psite -- added by spamujul for ER#8473903
4497 );
4498 l_is_total :=0;
4499 END IF;
4500 IF l_us_total <> 0 THEN
4501 l_for_insert := 'N';
4502 l_for_party := 'N';
4503 l_for_psite := 'N'; -- added by spamujul for ER#8473903
4504 Insert_Update_Check_Results(l_us_total,
4505 l_for_insert,
4506 l_for_party
4507 ,l_for_psite -- added by spamujul for ER#8473903
4508 );
4509 l_us_total :=0;
4510 END IF;
4511 -- End fix by spamujul ER#8473903
4512 IF g_dashboard_for_contact IS NULL THEN
4513 FND_PROFILE.GET('CSC_DASHBOARD_VIEW_FOR_CONTACT',g_dashboard_for_contact);
4514 END IF;
4515 IF g_dashboard_for_contact = 'Y' THEN
4516 l_ip_total := 0;
4517 l_up_total := 0;
4518 l_ia_total := 0;
4519 l_ua_total := 0;
4520 l_us_total :=0; -- added by spamujul for ER#8473903
4521 l_is_total := 0; -- added by spamujul for ER#8473903
4522 Evaluate_blocks_Rel(p_up_total => l_up_total,
4523 p_ip_total => l_ip_total,
4524 p_ua_total => l_ua_total,
4525 p_ia_total => l_ia_total,
4526 p_us_total => l_us_total, -- added by spamujul for ER#8473903
4527 p_is_total => l_is_total, -- added by spamujul for ER#8473903
4528 p_group_id => p_group_id,
4529 p_no_batch_sql => 'Y' );
4530 Evaluate_checks_Rel(errbuf => errbuf,
4531 retcode => retcode,
4532 p_group_id => p_group_id,
4533 p_no_batch_sql => 'Y'
4534 );
4535 END IF;
4536 COMMIT;
4537 -- Return 0 for successful completion, 1 for warnings, 2 for error
4538 IF (error_flag) THEN
4539 errbuf := Sqlerrm;
4540 retcode := 2;
4541 ELSIF (warning_msg <> '') THEN
4542 errbuf := warning_msg;
4543 retcode := 1;
4544 ELSE
4545 errbuf := '';
4546 retcode := 0;
4547 END IF;
4548 ELSIF g_dashboard_for_employee = 'Y' THEN
4549 l_ip_total := 0;
4550 l_up_total := 0;
4551 l_ia_total := 0;
4552 l_ua_total := 0;
4553 l_us_total :=0; -- added by spamujul for ER#8473903
4554 l_is_total := 0; -- added by spamujul for ER#8473903
4555 Evaluate_blocks_Emp(p_up_total => l_up_total,
4556 p_ip_total => l_ip_total,
4557 p_ua_total => l_ua_total,
4558 p_ia_total => l_ia_total,
4559 p_us_total => l_us_total, -- added by spamujul for ER#8473903
4560 p_is_total => l_is_total, -- added by spamujul for ER#8473903
4561 p_group_id => p_group_id,
4562 p_no_batch_sql => 'Y' );
4563 Evaluate_checks_Emp(errbuf => errbuf,
4564 retcode => retcode,
4565 p_group_id => p_group_id,
4566 p_no_batch_sql => 'Y');
4567 END IF;
4568 COMMIT;
4569 -- Return 0 for successful completion, 1 for warnings, 2 for error
4570 IF (error_flag) THEN
4571 errbuf := Sqlerrm;
4572 retcode := 2;
4573 ELSIF (warning_msg <> '') THEN
4574 errbuf := warning_msg;
4575 retcode := 1;
4576 ELSE
4577 errbuf := '';
4578 retcode := 0;
4579 END IF;
4580 IF (debug) THEN
4581 fnd_file.close;
4582 END IF;
4583 EXCEPTION
4584 WHEN OTHERS THEN
4585 ROLLBACK;
4586 IF (checks_csr%isopen) THEN
4587 CLOSE checks_csr;
4588 END IF;
4589 IF (cparty_csr%isopen) THEN
4590 CLOSE cparty_csr;
4591 END IF;
4592 IF (caccount_csr%isopen) THEN
4593 CLOSE caccount_csr;
4594 END IF;
4595 -- Begin fix by spamujul for ER#8473903
4596 IF (cpsite_csr%isopen) THEN
4597 CLOSE cpsite_csr;
4598 END IF;
4599 -- End fix by spamujul for ER#8473903
4600 IF (debug) THEN
4601 fnd_file.close;
4602 END IF;
4603
4604 -- Retrieve error message into errbuf
4605 errbuf := Sqlerrm;
4606
4607 -- Return 2 for error
4608 retcode := 2;
4609
4610 g_error := sqlcode || ' ' || sqlerrm;
4611 fnd_file.put_line(fnd_file.log , g_error);
4612
4613 END Evaluate_Checks4_No_Batch;
4614 --
4615 -- Evaluate_Checks4_Rule
4616 -- if Party_id is null, Account_id is null and Group_id is not null
4617 -- Loop through Checks in this group and evaluate the results
4618 -- for all Parties and Accounts for Profile check type Rule ('T')
4619 --
4620 PROCEDURE Evaluate_Checks4_Rule ( errbuf OUT NOCOPY VARCHAR2,
4621 retcode OUT NOCOPY NUMBER ,
4622 p_group_id in Number
4623 ) IS
4624
4625 chk_id Number;
4626 chk_name Varchar2(240);
4627 cparty_id Number;
4628 ccust_acct_id Number;
4629 cpsite_id Number; -- added by spamujul for ER#8473903
4630 sel_type Varchar2(3);
4631 sel_blk_id Number;
4632 data_type Varchar2(90);
4633 fmt_mask Varchar2(90);
4634 rule Varchar2(32767);
4635 Chk_u_l_flag Varchar2(3);
4636 Thd_grade Varchar2(9);
4637 truncate_flag Varchar2(1) := 'N';
4638 acct_flag Varchar2(1);
4639 blk_id Number := null;
4640 blk_name Varchar2(240) := null;
4641 sql_stmt Varchar2(2000) := null;
4642 curr_code Varchar2(15) := null;
4643 v_party_in_sql Number := 0;
4644 v_acct_in_sql Number := 0;
4645 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
4646 v_check_level Varchar2(10);
4647 l_for_insert varchar2(1) := 'Y';
4648 l_for_party varchar2(1) := 'Y';
4649 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
4650 l_up_total Number := 0;
4651 l_ip_total Number := 0;
4652 l_ua_total Number := 0;
4653 l_ia_total Number := 0;
4654 l_us_total Number := 0; -- added by spamujul for ER#8473903
4655 l_is_total Number := 0; -- added by spamujul for ER#8473903
4656 v_chk_count NUMBER := 0;
4657 /* added this variable for Bug 1937730*/
4658 v_party_id Number;
4659 CURSOR checks_csr IS
4660 SELECT check_id,
4661 select_type,
4662 select_block_id,
4663 data_type,
4664 format_mask,
4665 check_upper_lower_flag,
4666 threshold_grade,
4667 check_level
4668 FROM csc_prof_checks_b
4669 WHERE check_id in (select check_id
4670 from csc_prof_group_checks
4671 where group_id = p_group_id)
4672 AND check_level IN ('PARTY','ACCOUNT','SITE') -- Included by spamujul for ER#8473903
4673 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
4674 AND Nvl(end_date_active, Sysdate)
4675 AND select_type = 'T';
4676 CURSOR checks_count IS
4677 SELECT COUNT(*)
4678 FROM csc_prof_checks_b
4679 WHERE check_id in (select check_id
4680 from csc_prof_group_checks
4681 where group_id = p_group_id)
4682 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
4683 AND Nvl(end_date_active, Sysdate)
4684 AND select_type = 'T';
4685 CURSOR cparty_csr IS
4686 SELECT party_id
4687 FROM hz_parties
4688 WHERE status = 'A'
4689 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
4690 -- Person, ORG added for 1850508
4691 /* added this condition party_id=v_party_id for Bug 1937730*/
4692 CURSOR caccount_csr IS
4693 SELECT party_id, cust_account_id
4694 FROM hz_cust_accounts
4695 WHERE party_id=v_party_id
4696 AND status = 'A' ;
4697 -- Begin fix by spamujul for ER#8473903
4698 CURSOR cpsite_csr IS
4699 SELECT party_id, party_site_id
4700 FROM hz_party_sites
4701 WHERE party_id=v_party_id
4702 AND status = 'A'
4703 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
4704 -- End fix by spamujul for ER#8473903
4705 CURSOR block_csr IS
4706 SELECT block_id, sql_stmnt, currency_code
4707 FROM csc_prof_blocks_b a
4708 WHERE a.block_id = sel_blk_id;
4709
4710 cid number;
4711 val VARCHAR2(240) := null;
4712 BEGIN
4713 /* R12 Employee HelpDesk Modifications */
4714 /* The processing to be done for either employee level(employee) or customer level(party,account,contact) */
4715 IF g_dashboard_for_employee = 'N' THEN
4716 OPEN checks_count;
4717 FETCH checks_count
4718 INTO v_chk_count;
4719 CLOSE checks_count;
4720 IF v_chk_count > 0 THEN
4721 /* blocks will be evaluated only if the type is T */
4722 Evaluate_Blocks4(l_up_total,
4723 l_ip_total,
4724 l_ua_total,
4725 l_ia_total,
4726 l_us_total, -- added by spamujul for ER#8473903
4727 l_is_total, -- added by spamujul for ER#8473903
4728 p_group_id
4729 );
4730 END IF;
4731 l_ip_total := 0;
4732 l_up_total := 0;
4733 l_ia_total := 0;
4734 l_ua_total := 0;
4735 l_us_total := 0; -- added by spamujul for ER#8473903
4736 l_is_total := 0; -- added by spamujul for ER#8473903
4737 OPEN checks_csr;
4738 LOOP
4739 FETCH checks_csr
4740 INTO chk_id,
4741 sel_type,
4742 sel_blk_id,
4743 data_type,
4744 fmt_mask,
4745 chk_u_l_flag,
4746 Thd_grade,
4747 v_check_level;
4748 EXIT WHEN checks_csr%notfound;
4749 IF (sel_type = 'T') THEN
4750 acct_flag := 'N';
4751 build_rule(acct_flag,
4752 chk_id,
4753 v_check_level,
4754 rule);
4755 ELSIF (sel_type = 'B') THEN
4756 Open block_csr;
4757 Fetch block_csr
4758 INTO blk_id,
4759 sql_stmt,
4760 curr_code;
4761 Close block_csr;
4762 END IF;
4763 IF sql_stmt IS NOT NULL Then
4764 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
4765 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
4766 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
4767 Else
4768 v_party_in_sql := 0;
4769 v_acct_in_sql := 0;
4770 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
4771 End if;
4772 /* This begin, end exception is added mainly for exception handing for Bug 19800
4773 04*/
4774 Begin
4775 IF ((sel_type='B' ) OR (sel_type='T') ) Then -- Only valid types
4776 -- Loop through all parties
4777 -- Open the Cursor
4778 cid := dbms_sql.open_cursor;
4779 if (sel_type = 'B') then
4780 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4781 elsif (sel_type = 'T') then
4782 dbms_sql.parse(cid, rule, dbms_sql.native);
4783 end if;
4784 dbms_sql.define_column(cid,1,val,240);
4785 -- pass the cid
4786 OPEN cparty_csr;
4787 LOOP
4788 FETCH cparty_csr
4789 INTO cparty_id;
4790 EXIT WHEN cparty_csr%notfound;
4791 If v_check_level='PARTY' Then
4792 Evaluate_One_Check(truncate_flag,
4793 chk_id,
4794 cparty_id,
4795 null,
4796 NULL, -- added by spamujul for ER#8473903
4797 v_check_level,
4798 sel_type,
4799 sel_blk_id,
4800 data_type,
4801 fmt_mask,
4802 chk_u_l_flag,
4803 Thd_grade,
4804 rule,
4805 blk_id,
4806 sql_stmt,
4807 curr_code,
4808 l_up_total,
4809 l_ip_total,
4810 l_ua_total,
4811 l_ia_total ,
4812 l_us_total, -- added by spamujul for ER#8473903
4813 l_is_total, -- added by spamujul for ER#8473903
4814 cid);
4815 End if;
4816 /* added this condition for Bug 1937730*/
4817 v_party_id:=cparty_id;
4818 IF (sel_type = 'T') THEN
4819 acct_flag := 'Y';
4820 build_rule(acct_flag,
4821 chk_id,
4822 v_check_level,
4823 rule);
4824 END IF;
4825 IF ((sel_type='B' ) OR (sel_type='T') ) and v_check_level='ACCOUNT' Then -- Only valid Types now
4826 If ((v_acct_in_sql = 0) and sel_type = 'B') and v_check_level='ACCOUNT' Then -- added for1850508
4827 -- Check can be made only for 'B' types,
4828 -- If acct is not present as bind variable, the sql might return wrong
4829 -- rows (party level counts) at account leve.
4830
4831 --and (v_party_in_sql <> 0 and v_acct_in_sql <> 0) OR
4832 --(sel_type='T') ) Then
4833 NULL;
4834 Else
4835 -- Loop through all parties with accounts
4836 -- added for 1850508
4837 --Open Cursor
4838 -- dbms_output.put_line('Opening and PArsing in checks1 Accounts Check_id -'||to_char(chk_id));
4839 OPEN caccount_csr;
4840 LOOP
4841 FETCH caccount_csr
4842 INTO cparty_id, ccust_acct_id;
4843 EXIT WHEN caccount_csr%notfound;
4844 Evaluate_One_Check(truncate_flag,
4845 chk_id,
4846 cparty_id,
4847 ccust_acct_id,
4848 NULL, -- added by spamujul for ER#8473903
4849 v_check_level,
4850 sel_type,
4851 sel_blk_id,
4852 data_type,
4853 fmt_mask,
4854 chk_u_l_flag,
4855 Thd_grade,
4856 rule,
4857 blk_id,
4858 sql_stmt,
4859 curr_code,
4860 l_up_total,
4861 l_ip_total,
4862 l_ua_total
4863 , l_ia_total ,
4864 l_us_total, -- added by spamujul for ER#8473903
4865 l_is_total, -- added by spamujul for ER#8473903
4866 cid);
4867 END LOOP;
4868 CLOSE caccount_csr;
4869 End if; -- added for 1850508
4870 END IF;
4871 -- Begin fix by spamujul for ER#8473903
4872 v_party_id:=cparty_id;
4873 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
4874 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
4875 NULL;
4876 ELSE
4877 cid := dbms_sql.open_cursor;
4878 IF (sel_type = 'B') THEN
4879 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
4880 ELSIF (sel_type = 'T') THEN
4881 dbms_sql.parse(cid, rule, dbms_sql.native);
4882 END IF;
4883 dbms_sql.define_column(cid,1,val,240);
4884 OPEN cpsite_csr;
4885 LOOP
4886 FETCH cpsite_csr
4887 INTO cparty_id,
4888 cpsite_id;
4889 EXIT WHEN cpsite_csr%notfound;
4890 Evaluate_One_Check(truncate_flag,
4891 chk_id,
4892 cparty_id,
4893 null,
4894 cpsite_id,
4895 v_check_level,
4896 sel_type,
4897 sel_blk_id,
4898 data_type,
4899 fmt_mask,
4900 chk_u_l_flag,
4901 Thd_grade,
4902 rule,
4903 blk_id,
4904 sql_stmt,
4905 curr_code,
4906 l_up_total,
4907 l_ip_total,
4908 l_ua_total
4909 , l_ia_total ,
4910 l_us_total,
4911 l_is_total,
4912 cid);
4913 END LOOP;
4914 CLOSE cpsite_csr;
4915 IF (dbms_sql.is_open(cid)) THEN
4916 dbms_sql.close_cursor(cid);
4917 END IF;
4918 END IF;
4919 END IF;
4920 -- End fix by spamujul for ER#8473903
4921 END LOOP;
4922 CLOSE cparty_csr;
4923 IF (dbms_sql.is_open(cid)) THEN
4924 dbms_sql.close_cursor(cid);
4925 end if;
4926 END IF;
4927 Exception
4928 When others then
4929 IF (dbms_sql.is_open(cid)) THEN
4930 dbms_sql.close_cursor(cid);
4931 end if;
4932 set_context('Evaluate_Checks4_Rule',
4933 'chk_id=>'||to_char(chk_id),
4934 'party_id=>'||to_char(cparty_id),
4935 'account_id=>'||to_char(ccust_acct_id)
4936 ,'party_site_id =>'||to_char(cpsite_id) -- added by spamujul for ER#8473903
4937 );
4938 g_error := sqlcode || ' ' || sqlerrm;
4939 set_context(NULL, g_error);
4940 End;
4941 END LOOP;
4942 CLOSE checks_csr;
4943
4944 -- check if there are still records to be inserted
4945 IF l_ip_total <> 0 THEN
4946 l_for_insert := 'Y';
4947 l_for_party := 'Y';
4948 l_for_psite := 'N';-- added by spamujul for ER#8473903
4949 Insert_Update_Check_Results(l_ip_total,
4950 l_for_insert,
4951 l_for_party
4952 ,l_for_psite -- added by spamujul for ER#8473903
4953 );
4954 l_ip_total :=0;
4955 END IF;
4956 -- check if there are still records to be updated
4957 IF l_up_total <> 0 THEN
4958 l_for_insert := 'N';
4959 l_for_party := 'Y';
4960 l_for_psite := 'N';-- added by spamujul for ER#8473903
4961 Insert_Update_Check_Results (l_up_total,
4962 l_for_insert,
4963 l_for_party
4964 ,l_for_psite -- added by spamujul for ER#8473903
4965 );
4966 l_up_total :=0;
4967 END IF;
4968
4969 -- check if there are still records to be inserted
4970 IF l_ia_total <> 0 THEN
4971 l_for_insert := 'Y';
4972 l_for_party := 'N';
4973 l_for_psite := 'N';-- added by spamujul for ER#8473903
4974 Insert_Update_Check_Results(l_ia_total,
4975 l_for_insert,
4976 l_for_party
4977 ,l_for_psite -- added by spamujul for ER#8473903
4978 );
4979 l_ia_total :=0;
4980 END IF;
4981 -- check if there are still records to be updated
4982 IF l_ua_total <> 0 THEN
4983 l_for_insert := 'N';
4984 l_for_party := 'N';
4985 l_for_psite := 'N';-- added by spamujul for ER#8473903
4986 Insert_Update_Check_Results(l_ua_total,
4987 l_for_insert,
4988 l_for_party
4989 ,l_for_psite -- added by spamujul for ER#8473903
4990 );
4991 l_ua_total :=0;
4992 END IF;
4993 -- Begin fix by spamujul for ER#8473903
4994 IF l_is_total <> 0 THEN
4995 l_for_insert := 'Y';
4996 l_for_party := 'N';
4997 l_for_psite := 'Y';
4998 Insert_Update_Check_Results(l_ia_total,
4999 l_for_insert,
5000 l_for_party
5001 ,l_for_psite
5002 );
5003 l_is_total :=0;
5004 END IF;
5005 IF l_us_total <> 0 THEN
5006 l_for_insert := 'N';
5007 l_for_party := 'N';
5008 l_for_psite := 'Y';
5009 Insert_Update_Check_Results(l_ua_total,
5010 l_for_insert,
5011 l_for_party
5012 ,l_for_psite
5013 );
5014 l_us_total :=0;
5015 END IF;
5016 -- End fix by spamujul for ER#8473903
5017 IF g_dashboard_for_contact = 'Y' THEN
5018 l_ip_total := 0;
5019 l_up_total := 0;
5020 l_ia_total := 0;
5021 l_ua_total := 0;
5022 l_us_total :=0; -- added by spamujul for ER#8473903
5023 l_is_total := 0; -- added by spamujul for ER#8473903
5024
5025 Evaluate_blocks_Rel(p_up_total => l_up_total,
5026 p_ip_total => l_ip_total,
5027 p_ua_total => l_ua_total,
5028 p_ia_total => l_ia_total,
5029 p_group_id => p_group_id,
5030 p_us_total => l_us_total, -- added by spamujul for ER#8473903
5031 p_is_total => l_is_total, -- added by spamujul for ER#8473903
5032 p_rule_only => 'Y' );
5033
5034 Evaluate_checks_Rel(errbuf => errbuf,
5035 retcode => retcode,
5036 p_group_id => p_group_id,
5037 p_rule_only => 'Y');
5038 END IF;
5039 COMMIT;
5040
5041 -- Return 0 for successful completion, 1 for warnings, 2 for error
5042 IF (error_flag) THEN
5043 errbuf := Sqlerrm;
5044 retcode := 2;
5045 ELSIF (warning_msg <> '') THEN
5046 errbuf := warning_msg;
5047 retcode := 1;
5048 ELSE
5049 errbuf := '';
5050 retcode := 0;
5051 END IF;
5052 /* R12 Employee HelpDesk Modifications */
5053 ELSIF g_dashboard_for_employee = 'Y' THEN
5054 l_ip_total := 0;
5055 l_up_total := 0;
5056 l_ia_total := 0;
5057 l_ua_total := 0;
5058 l_us_total :=0; -- added by spamujul for ER#8473903
5059 l_is_total := 0; -- added by spamujul for ER#8473903
5060
5061 Evaluate_blocks_Emp(p_up_total => l_up_total,
5062 p_ip_total => l_ip_total,
5063 p_ua_total => l_ua_total,
5064 p_ia_total => l_ia_total,
5065 p_us_total => l_us_total, -- added by spamujul for ER#8473903
5066 p_is_total => l_is_total, -- added by spamujul for ER#8473903
5067 p_group_id => p_group_id,
5068 p_rule_only => 'Y' );
5069
5070 Evaluate_checks_Emp(errbuf => errbuf,
5071 retcode => retcode,
5072 p_group_id => p_group_id,
5073 p_rule_only => 'Y');
5074 END IF;
5075 /* End of R12 Employee HelpDesk Modifications */
5076 COMMIT;
5077 -- Return 0 for successful completion, 1 for warnings, 2 for error
5078 IF (error_flag) THEN
5079 errbuf := Sqlerrm;
5080 retcode := 2;
5081 ELSIF (warning_msg <> '') THEN
5082 errbuf := warning_msg;
5083 retcode := 1;
5084 ELSE
5085 errbuf := '';
5086 retcode := 0;
5087 END IF;
5088
5089 IF (debug) THEN
5090 fnd_file.close;
5091 END IF;
5092 EXCEPTION
5093 WHEN OTHERS THEN
5094 ROLLBACK;
5095 IF (checks_csr%isopen) THEN
5096 CLOSE checks_csr;
5097 END IF;
5098 IF (cparty_csr%isopen) THEN
5099 CLOSE cparty_csr;
5100 END IF;
5101 IF (caccount_csr%isopen) THEN
5102 CLOSE caccount_csr;
5103 END IF;
5104 -- Begin fix by spamujul for ER#8473903
5105 IF (cpsite_csr%isopen) THEN
5106 CLOSE cpsite_csr;
5107 END IF;
5108 -- End fix by spamujul for ER#8473903
5109 IF (debug) THEN
5110 fnd_file.close;
5111 END IF;
5112
5113 -- Retrieve error message into errbuf
5114 errbuf := Sqlerrm;
5115
5116 -- Return 2 for error
5117 retcode := 2;
5118
5119 g_error := sqlcode || ' ' || sqlerrm;
5120 fnd_file.put_line(fnd_file.log , g_error);
5121
5122 END Evaluate_Checks4_Rule;
5123 --
5124 -- Evaluate_One_Check
5125 -- Evaluate the given profile check and store the result in the
5126 -- CSC_PROF_CHECK_RESULTS table. Also store the grade if ranges are
5127 -- specified.
5128 -- IN
5129 -- chk_id - profile check identifier
5130 -- cust_id - customer identifier for which check is evaluated
5131 -- acct_id - customer's account identifier
5132 -- sel_type - 'B' for block; 'T' for true or false ("indicator" check)
5133 -- sel_blk_id - building block identifier (required if select type is block)
5134 -- data_type - data type of check result (used for applying format mask)
5135 -- fmt_mask - format mask for check result (ignored if data type is char or
5136 -- currency code is present)
5137 -- rule - sql statement that returns 0 or 1 row for an indicator check
5138 -- P_CID - Cursor passed from calling routine to avoid re-parsing the same sql statement
5139 PROCEDURE Evaluate_One_Check
5140 ( p_truncate_flag IN VARCHAR2,
5141 p_chk_id IN NUMBER,
5142 p_party_id IN NUMBER,
5143 p_acct_id IN NUMBER DEFAULT NULL,
5144 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
5145 p_check_level IN VARCHAR2 DEFAULT NULL,
5146 p_sel_type IN VARCHAR2,
5147 p_sel_blk_id IN NUMBER DEFAULT NULL,
5148 p_data_type IN VARCHAR2 DEFAULT NULL,
5149 p_fmt_mask IN VARCHAR2 DEFAULT NULL,
5150 p_chk_u_l_flag IN VARCHAR2 DEFAULT NULL,
5151 p_thd_grade IN VARCHAR2 DEFAULT NULL,
5152 p_rule IN VARCHAR2 DEFAULT NULL,
5153 p_blk_id IN NUMBER DEFAULT NULL,
5154 p_sql_stmt IN VARCHAR2 DEFAULT NULL,
5155 p_curr_code IN VARCHAR2 DEFAULT NULL,
5156 p_up_total IN OUT NOCOPY NUMBER ,
5157 p_ip_total IN OUT NOCOPY NUMBER ,
5158 p_ua_total IN OUT NOCOPY NUMBER ,
5159 p_ia_total IN OUT NOCOPY NUMBER ,
5160 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
5161 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
5162 p_cid IN NUMBER) IS
5163
5164 v_party_in_sql Number := 0;
5165 v_acct_in_sql Number := 0;
5166 v_employee_in_sql Number := 0;
5167 v_psite_in_sql Number := 0; -- Added by spamujul for ER#8473903
5168
5169 val VARCHAR2(240) := null;
5170 curr_code VARCHAR2(15) := null;
5171 grd VARCHAR2(3) := null;
5172 cid NUMBER := null;
5173 dummy NUMBER;
5174
5175 Rng_h_v Varchar2(240);
5176 Rng_l_v Varchar2(240);
5177 Result Varchar2(3);
5178
5179
5180 --l_period_date Date := NULL;
5181 l_for_insert varchar2(1) := 'Y';
5182 l_for_party varchar2(1) := 'Y';
5183 l_for_psite varchar2(1) := 'N'; -- Added by spamujul for ER#8473903
5184
5185 v_rating_code Varchar2(240);
5186 v_color_code Varchar2(240);
5187
5188 v_party_count Number := 0;
5189 v_account_count Number := 0;
5190 v_psite_count Number := 0; -- Added by spamujul for ER#8473903
5191 v_val Number := 0;
5192 v_format_date DATE;
5193
5194 Cursor val_crs1 IS
5195 Select check_rating_grade,
5196 rating_code,
5197 color_code
5198 From csc_prof_check_ratings
5199 Where check_id = p_chk_id
5200 And ( nvl(Range_Low_Value,val) <= v_val AND
5201 nvl(Range_High_Value,val) >= v_val );
5202
5203 Cursor val_crs2 IS
5204 Select check_rating_grade,
5205 rating_code,
5206 color_code
5207 From csc_prof_check_ratings
5208 Where check_id = p_chk_id
5209 And ( nvl(Range_Low_Value,val) <= val AND
5210 nvl(Range_High_Value,val) >= val );
5211
5212 /* This Cursor added for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. */
5213 Cursor val_crs3 IS
5214 Select Range_Low_Value,
5215 Range_High_Value
5216 From csc_prof_check_ratings
5217 Where check_id = p_chk_id
5218 and check_rating_grade=p_thd_grade;
5219
5220 /*
5221 -- for party level
5222 Cursor party_check_crs IS
5223 Select count(*)
5224 From csc_prof_check_results
5225 Where check_id = p_chk_id
5226 And party_id = p_party_id
5227 And cust_account_id IS NULL;
5228
5229 -- for account level
5230 Cursor account_check_crs IS
5231 Select count(*)
5232 From csc_prof_check_results
5233 Where check_id = p_chk_id
5234 And party_id = p_party_id
5235 And cust_account_id = p_acct_id;
5236 */
5237 BEGIN
5238 IF (p_sel_type = 'B') THEN
5239 Begin
5240 -- P_CID is the Cursor to avoid reparsing the sql stmt
5241 -- P_CID would not be null when engine runs for more than 1 party (e.g. evaluate_checks1)
5242 -- P_CID would be null when engine is being run for 1 party (e.g. evaluate_checks2)
5243 -- added for 1850508
5244 if p_cid is null then
5245 cid := dbms_sql.open_cursor;
5246 dbms_sql.parse(cid, p_sql_stmt, dbms_sql.native);
5247 dbms_sql.define_column(cid,1,val,240);
5248 else
5249 cid := p_cid;
5250 end if;
5251 IF p_sql_stmt IS NOT NULL Then
5252 v_party_in_sql := INSTR(lower(p_sql_stmt),':party_id',1);
5253 v_acct_in_sql := INSTR(lower(p_sql_stmt),':cust_account_id',1);
5254 v_employee_in_sql := INSTR(lower(p_sql_stmt),':employee_id',1);
5255 v_psite_in_sql := INSTR(lower(p_sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
5256 Else
5257 v_party_in_sql := 0;
5258 v_acct_in_sql := 0;
5259 v_employee_in_sql := 0;
5260 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
5261 End if;
5262 -- For Bug 1935015 commented this if statement and created 2 variables
5263 if p_check_level='PARTY' OR p_check_level = 'CONTACT' then
5264 if v_party_in_sql > 0 then
5265 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5266 end if;
5267 if v_acct_in_sql > 0 then
5268 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
5269 end if;
5270 elsif p_check_level='ACCOUNT' then
5271 if v_party_in_sql > 0 then
5272 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5273 end if;
5274 if v_acct_in_sql > 0 then
5275 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
5276 end if;
5277 /* R12 Employee HelpDesk Modifications */
5278 elsif p_check_level='EMPLOYEE' then
5279 if v_employee_in_sql > 0 then
5280 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
5281 end if;
5282 -- Begin Fix by spamujul for ER#8473903
5283 ELSIF p_check_level='SITE' THEN
5284 IF v_psite_in_sql > 0 THEN
5285 dbms_sql.bind_variable(cid, ':party_site_id', p_psite_id);
5286 END IF;
5287 IF v_party_in_sql > 0 THEN
5288 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5289 END IF;
5290 -- End Fix by spamujul for ER#8473903
5291 END IF;
5292 dummy := dbms_sql.execute_and_fetch(cid);
5293 /* added the below condition for bug 3787383 */
5294 IF dummy > 0 THEN
5295 dbms_sql.column_value(cid,1,val);
5296 ELSE
5297 val := NULL;
5298 END IF;
5299 if p_cid is null then
5300 dbms_sql.close_cursor(cid);
5301 end if;
5302 -- END IF;
5303 Exception
5304 When Others then
5305 if p_cid is null then
5306 IF (dbms_sql.is_open(cid)) THEN
5307 dbms_sql.close_cursor(cid);
5308 END IF;
5309 end if;
5310 val := '0';
5311 End;
5312 ELSIF (p_sel_type = 'T') THEN
5313 Begin
5314 -- added for 1850508
5315 if (p_cid is null) then
5316 cid := dbms_sql.open_cursor;
5317 dbms_sql.parse(cid, p_rule, dbms_sql.native);
5318 else
5319 cid := p_cid;
5320 end if;
5321 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
5322 IF p_rule IS NOT NULL Then
5323 v_party_in_sql := INSTR(lower(p_rule),':party_id',1);
5324 v_acct_in_sql := INSTR(lower(p_rule),':cust_account_id',1);
5325 v_employee_in_sql := INSTR(lower(p_rule),':employee_id',1);
5326 v_psite_in_sql := INSTR(lower(p_rule),':party_site_id',1); -- Added by spamujul for ER#8473903
5327 Else
5328 v_party_in_sql := 0;
5329 v_acct_in_sql := 0;
5330 v_employee_in_sql := 0;
5331 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903
5332 End if;
5333 IF p_check_level='PARTY' OR p_check_level = 'CONTACT' THEN
5334 if v_party_in_sql > 0 then
5335 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5336 end if;
5337 if v_acct_in_sql > 0 then
5338 dbms_sql.bind_variable(cid, ':cust_account_id',p_acct_id);
5339 end if;
5340 ELSIF p_check_level='ACCOUNT' then
5341 if v_party_in_sql > 0 then
5342 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5343 end if;
5344
5345 if v_acct_in_sql > 0 then
5346 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
5347 end if;
5348 /* R12 Employee HelpDesk Modifications */
5349 ELSIF p_check_level='EMPLOYEE' then
5350 if v_employee_in_sql > 0 then
5351 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
5352 end if;
5353 -- Begin Fix by spamujul for ER#8473903
5354 ELSIF p_check_level='SITE' THEN
5355 IF v_psite_in_sql > 0 THEN
5356 dbms_sql.bind_variable(cid, ':party_site_id', p_psite_id);
5357 END IF;
5358 IF v_party_in_sql > 0 THEN
5359 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
5360 END IF;
5361 -- End Fix by spamujul for ER#8473903
5362 END IF;
5363 val := dbms_sql.execute_and_fetch(cid); -- returns 0 if no rows found
5364 -- added for 1850508
5365 if (p_cid is null) then
5366 dbms_sql.close_cursor(cid);
5367 end if;
5368 Exception
5369 When Others THEN
5370 if (p_cid is null) then
5371 IF (dbms_sql.is_open(cid)) THEN
5372 dbms_sql.close_cursor(cid);
5373 end if;
5374 end if;
5375 val := null;
5376 End;
5377 END IF;
5378 /* This condition added for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. */
5379
5380 IF (p_sel_type = 'B') and (p_data_type IN ('NUMBER', 'DATE')) THEN
5381 IF p_data_type = 'NUMBER' Then
5382 IF val IS NULL Then
5383 val := '0';
5384 END IF;
5385 OPEN val_crs3;
5386 FETCH val_crs3
5387 INTO Rng_l_v,
5388 rng_h_v;
5389 IF val_crs3%notfound THEN
5390 Result := 'Y';
5391 END IF;
5392 CLOSE val_crs3;
5393 If p_chk_u_l_flag ='U' Then
5394 If to_number(val)>to_number(rng_h_v) then
5395 Result:='Y';
5396 Else
5397 Result:='N';
5398 End If;
5399 Elsif p_chk_u_l_flag ='L' Then
5400 If to_number(val)<to_number(rng_l_v) then
5401 Result:='Y';
5402 Else
5403 Result:='N';
5404 End If;
5405 Else
5406 Result:='N';
5407 End If;
5408 ELSE
5409 /* added the below code for bug 4071727 */
5410 OPEN val_crs3;
5411 FETCH val_crs3
5412 INTO Rng_l_v,
5413 rng_h_v;
5414 IF val_crs3%notfound THEN
5415 Result := 'Y';
5416 END IF;
5417 CLOSE val_crs3;
5418 /* added till here for bug 4071727 */
5419 If val is not null then
5420 If p_chk_u_l_flag ='U' Then
5421 /* added to_date for bug 4071727 */
5422 If to_Date(val, 'DD-MM-RRRR') > to_date(rng_h_v, 'DD-MM-RRRR') Then
5423 Result:='Y';
5424 Else
5425 Result:='N';
5426 End If;
5427 Elsif p_chk_u_l_flag ='L' Then
5428 /* added to_date for bug 4071727 */
5429 If to_Date(val, 'DD-MM-RRRR') < to_Date(rng_l_v, 'DD-MM-RRRR') Then
5430 Result:='Y';
5431 Else
5432 Result:='N';
5433 End If;
5434 Else
5435 Result:='N';
5436 End If;
5437 End if;
5438 END IF;
5439 -- ELSE
5440 -- grd := NULL;
5441 END IF;
5442 /* Condition for BUG 1534103 - VIS115P: THRESHOLD FUNCTIONALITY IS NOT WORKING. ended*/
5443 IF (p_sel_type = 'B') and (p_data_type IN ('NUMBER', 'DATE')) THEN
5444 IF p_data_type = 'NUMBER' Then
5445 IF val IS NULL Then
5446 val := '0';
5447 END IF;
5448 v_val := to_number(val);
5449 val := to_char(v_val);
5450 OPEN val_crs1;
5451 FETCH val_crs1
5452 INTO grd,
5453 v_rating_code,
5454 v_color_code;
5455 IF val_crs1%notfound THEN
5456 grd := NULL;
5457 /* added for Bug 2227062 */
5458 v_rating_code := NULL;
5459 v_color_code := NULL;
5460 END IF;
5461 CLOSE val_crs1;
5462 ELSE
5463 IF val is not null then
5464 OPEN val_crs2;
5465 FETCH val_crs2 INTO grd,v_rating_code,v_color_code;
5466 IF val_crs2%notfound THEN
5467 grd := NULL;
5468 /* added for Bug 2227062 */
5469 v_rating_code := NULL;
5470 v_color_code := NULL;
5471 END IF;
5472 CLOSE val_crs2;
5473 END IF;
5474 END IF;
5475 ELSE
5476 grd := NULL;
5477 END IF;
5478 -- Only convert to format mask if result is not True/False
5479 IF ((p_sel_type = 'B') AND (curr_code IS NULL)) THEN
5480 IF (p_fmt_mask IS NOT NULL) THEN
5481 IF (p_data_type = 'NUMBER') THEN
5482 val := To_char(To_number(val), p_fmt_mask);
5483 ELSIF (p_data_type = 'DATE') THEN
5484 BEGIN
5485 /* modified the to_date to RRRR format for bug 4177903 */
5486 v_format_date := to_date(val, 'DD-MM-RRRR');
5487 val := To_char(v_format_date, p_fmt_mask);
5488 EXCEPTION
5489 WHEN OTHERS THEN
5490 val := null;
5491 END;
5492 END IF;
5493 END IF;
5494 ELSIF (p_sel_type = 'T') THEN
5495 IF (val > 0) THEN
5496 val := 'Y';
5497 ELSE
5498 val := 'N';
5499 END IF;
5500 END IF;
5501 BEGIN
5502 IF p_psite_id IS NULL THEN -- Added by spamujul for ER#8473903
5503 IF p_acct_id IS NULL THEN
5504 IF p_truncate_flag = 'N' THEN
5505 begin
5506 select 1 into v_party_count
5507 from csc_prof_check_results
5508 where check_id = p_chk_id
5509 and party_id = p_party_id
5510 and cust_account_id is null
5511 and party_site_id is null -- Added by spamujul for ER#8473903
5512 ;
5513 exception when no_data_found then
5514 v_party_count := 0;
5515 when others then
5516 v_party_count := null;
5517 end;
5518 /*
5519 OPEN party_check_crs;
5520 FETCH party_check_crs INTO v_party_count;
5521 IF party_check_crs%notfound THEN
5522 v_party_count := 0;
5523 END IF;
5524 CLOSE party_check_crs;
5525 */
5526 ELSE
5527 v_party_count := 0;
5528 END IF;
5529 IF v_party_count = 0 THEN
5530 p_ip_total := p_ip_total + 1;
5531 -- assign values to insert party check results
5532 ip_check_id(p_ip_total) := p_chk_id;
5533 ip_party_id(p_ip_total) := p_party_id;
5534 ip_account_id(p_ip_total) := NULL;
5535 ip_psite_id(p_ip_total) := NULL; -- Added by spamujul for ER#8473903
5536 ip_value(p_ip_total) := val;
5537 ip_currency(p_ip_total) := curr_code;
5538 ip_grade(p_ip_total) := grd;
5539 ip_rating_code(p_ip_total) :=v_rating_code;
5540 ip_color_code(p_ip_total) :=v_color_code;
5541 ip_results(p_ip_total) := result;
5542 IF p_ip_total = 1000 THEN
5543 l_for_insert := 'Y';
5544 l_for_party := 'Y';
5545 l_for_psite :='N'; -- Added by spamujul for ER#8473903
5546 Insert_Update_Check_Results(p_ip_total,
5547 l_for_insert,
5548 l_for_party
5549 , l_for_psite -- Added by spamujul for ER#8473903
5550 );
5551 p_ip_total :=0;
5552 END IF;
5553 ELSIF v_party_count = 1 THEN
5554 p_up_total := p_up_total + 1;
5555
5556 -- assign values to update party check results
5557 up_check_id(p_up_total) := p_chk_id;
5558 up_party_id(p_up_total) := p_party_id;
5559 up_account_id(p_up_total) := NULL;
5560 up_psite_id(p_up_total) := NULL; -- Added by spamujul for ER#8473903
5561 up_value(p_up_total) := val;
5562 up_currency(p_up_total) := curr_code;
5563 up_grade(p_up_total) := grd;
5564 up_rating_code(p_up_total) :=v_rating_code;
5565 up_color_code(p_up_total) :=v_color_code;
5566 up_results(p_up_total) := result;
5567 IF p_up_total = 1000 THEN
5568 l_for_insert := 'N';
5569 l_for_party := 'Y';
5570 l_for_psite :='N'; -- Added by spamujul for ER#8473903
5571 Insert_Update_Check_Results(p_up_total,
5572 l_for_insert,
5573 l_for_party
5574 ,l_for_psite -- Added by spamujul for ER#8473903
5575 );
5576 p_up_total := 0;
5577 END IF;
5578
5579 END IF;
5580 ELSE
5581 IF p_truncate_flag = 'N' THEN
5582 begin
5583 select 1 into v_account_count from csc_prof_check_results
5584 where check_id = p_chk_id
5585 and party_id = p_party_id
5586 and party_site_id is null -- Added by spamujul for ER#8473903
5587 and CUST_ACCOUNT_ID =p_acct_id; -- Bug 5255227 Fix
5588 Exception
5589 when no_data_found then
5590 v_account_count := 0;
5591 when TOO_MANY_ROWS then
5592 v_account_count := 1;
5593 when others then
5594 v_account_count := null;
5595 end ;
5596 /*
5597 OPEN account_check_crs;
5598 FETCH account_check_crs INTO v_account_count;
5599 IF account_check_crs%notfound THEN
5600 v_account_count := 0;
5601 END IF;
5602 CLOSE account_check_crs;
5603 */
5604 ELSE
5605 v_account_count := 0;
5606 END IF;
5607
5608 IF v_account_count = 0 THEN
5609 p_ia_total := p_ia_total + 1;
5610 -- assign values to insert
5611 ia_check_id(p_ia_total) := p_chk_id;
5612 ia_party_id(p_ia_total) := p_party_id;
5613 ia_account_id(p_ia_total) := p_acct_id;
5614 ia_psite_id(p_ia_total) := NULL; -- Added by spamujul for ER#8473903
5615 ia_value(p_ia_total) := val;
5616 ia_currency(p_ia_total) := curr_code;
5617 ia_grade(p_ia_total) := grd;
5618 ia_rating_code(p_ia_total) := v_rating_code;
5619 ia_color_code(p_ia_total) := v_color_code;
5620 ia_results(p_ia_total) := result;
5621
5622 IF p_ia_total = 1000 THEN
5623 l_for_insert := 'Y';
5624 l_for_party := 'N';
5625 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
5626 Insert_Update_Check_Results(p_ia_total,
5627 l_for_insert,
5628 l_for_party
5629 ,l_for_psite -- Added by spamujul for ER#8473903
5630 );
5631 p_ia_total := 0;
5632 END IF;
5633
5634 ELSIF v_account_count = 1 THEN
5635 p_ua_total := p_ua_total + 1;
5636
5637 -- assign values to update party tables
5638 ua_check_id(p_ua_total) := p_chk_id;
5639 ua_party_id(p_ua_total) := p_party_id;
5640 ua_account_id(p_ua_total) := p_acct_id;
5641 ua_psite_id(p_ua_total) := NULL; -- Added by spamujul for ER#8473903
5642 ua_value(p_ua_total) := val;
5643 ua_currency(p_ua_total) := curr_code;
5644 -- This is a Bug fix for 1934720, changing p_ia_total to p_ua_total
5645 ua_grade(p_ua_total) := grd;
5646 ua_rating_code(p_ua_total) := v_rating_code;
5647 ua_color_code(p_ua_total) := v_color_code;
5648 ua_results(p_ua_total) := result;
5649 IF p_ua_total = 1000 THEN
5650 l_for_insert := 'N';
5651 l_for_party := 'N';
5652 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
5653 Insert_Update_Check_Results (p_ua_total,
5654 l_for_insert,
5655 l_for_party
5656 ,l_for_psite -- Added by spamujul for ER#8473903
5657 );
5658 p_ua_total := 0;
5659 END IF;
5660
5661 END IF;
5662 END IF;
5663 -- Begin Fix by spamujul for ER#8473903
5664 ELSE
5665 Begin
5666 IF p_truncate_flag = 'N' THEN
5667 begin
5668 select 1 into v_psite_count
5669 from csc_prof_check_results
5670 where check_id = p_chk_id
5671 and party_id = p_party_id
5672 and cust_account_id is null
5673 and party_site_id =p_psite_id;
5674 Exception when no_data_found then
5675 v_psite_count := 0;
5676 when others then
5677 v_psite_count := null;
5678 end;
5679 ELSE
5680 v_psite_count := 0;
5681 END IF;
5682 IF v_psite_count = 0 THEN
5683 p_is_total := p_is_total + 1;
5684 is_check_id(p_is_total) := p_chk_id;
5685 is_party_id(p_is_total) := p_party_id;
5686 is_account_id(p_is_total) := NULL;
5687 is_psite_id(p_is_total) := p_psite_id;
5688 is_value(p_is_total) := val;
5689 is_currency(p_is_total) := curr_code;
5690 is_grade(p_is_total) := grd;
5691 is_rating_code(p_is_total) :=v_rating_code;
5692 is_color_code(p_is_total) :=v_color_code;
5693 is_results(p_is_total) := result;
5694 IF p_is_total = 1000 THEN
5695 l_for_insert := 'Y';
5696 l_for_party := 'N';
5697 l_for_psite := 'Y';
5698 Insert_Update_Check_Results
5699 (p_is_total,
5700 l_for_insert,
5701 l_for_party
5702 ,l_for_psite
5703 );
5704 p_is_total :=0;
5705 END IF;
5706 ELSIF v_psite_count = 1 THEN
5707 p_us_total := p_us_total + 1;
5708 us_check_id(p_us_total) := p_chk_id;
5709 us_party_id(p_us_total) := p_party_id;
5710 us_account_id(p_us_total) := NULL;
5711 us_psite_id(p_us_total) := p_psite_id;
5712 us_value(p_us_total) := val;
5713 us_currency(p_us_total) := curr_code;
5714 us_grade(p_us_total) := grd;
5715 us_rating_code(p_us_total) :=v_rating_code;
5716 us_color_code(p_us_total) :=v_color_code;
5717 us_results(p_us_total) := result;
5718 IF p_us_total = 1000 THEN
5719 l_for_insert := 'N';
5720 l_for_party := 'Y';
5721 l_for_psite :='Y';
5722 Insert_Update_Check_Results(p_us_total,
5723 l_for_insert,
5724 l_for_party
5725 ,l_for_psite
5726 );
5727 p_us_total := 0;
5728 END IF;
5729 END IF;
5730 Exception
5731 WHEN OTHERS THEN
5732 IF val_crs1%isopen THEN
5733 CLOSE val_crs1;
5734 END IF;
5735 IF val_crs2%isopen THEN
5736 CLOSE val_crs2;
5737 END IF;
5738 if p_cid is null then
5739 IF (dbms_sql.is_open(cid)) THEN
5740 dbms_sql.close_cursor(cid);
5741 END IF;
5742 end if;
5743 set_context('Evaluate_One_Check',
5744 'chk_id=>'||to_char(p_chk_id),
5745 'party_id=>'||to_char(p_party_id),
5746 'account_id=>'||to_char(p_acct_id),
5747 'party_id =>'||to_char(p_psite_id)
5748 ,'party_site_id =>'||to_char(p_acct_id)
5749 );
5750 g_error := sqlcode || ' ' || sqlerrm;
5751 set_context(NULL, g_error);
5752 End;
5753 END IF ;
5754 -- End Fix by spamujul for ER#8473903
5755 END;
5756 EXCEPTION
5757 -- If an exception is raised, close cursor before exiting
5758 WHEN OTHERS THEN
5759 IF val_crs1%isopen THEN
5760 CLOSE val_crs1;
5761 END IF;
5762 IF val_crs2%isopen THEN
5763 CLOSE val_crs2;
5764 END IF;
5765 /*
5766 IF party_check_crs%isopen THEN
5767 CLOSE party_check_crs;
5768 END IF;
5769 IF account_check_crs%isopen THEN
5770 CLOSE account_check_crs;
5771 END IF;
5772 */
5773 if p_cid is null then
5774 IF (dbms_sql.is_open(cid)) THEN
5775 dbms_sql.close_cursor(cid);
5776 END IF;
5777 end if;
5778 set_context('Evaluate_One_Check',
5779 'chk_id=>'||to_char(p_chk_id),
5780 'party_id=>'||to_char(p_party_id),
5781 'account_id=>'||to_char(p_acct_id)
5782 ,'party_site_id =>'||to_char(p_acct_id) -- Added by spamujul for ER#8473903
5783 );
5784 g_error := sqlcode || ' ' || sqlerrm;
5785 set_context(NULL, g_error);
5786 --table_delete;
5787 END Evaluate_One_Check;
5788
5789
5790 --
5791 -- Evaluate_Blocks1
5792 -- Loop through all the effective building blocks and evaluate the results
5793 -- for each customer.
5794 -- if block_id is null, party_id is null and account_id is null
5795 --
5796 PROCEDURE Evaluate_Blocks1 ( p_up_total IN OUT NOCOPY NUMBER ,
5797 p_ip_total IN OUT NOCOPY NUMBER ,
5798 p_ua_total IN OUT NOCOPY NUMBER ,
5799 p_ia_total IN OUT NOCOPY NUMBER ,
5800 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
5801 p_is_total IN OUT NOCOPY NUMBER -- added by spamujul for ER#8473903
5802 ) IS
5803
5804 blk_id NUMBER;
5805 blk_name Varchar2(240);
5806 sql_stmt Varchar2(2000);
5807 curr_code Varchar2(15);
5808 bparty_id Number;
5809 bacct_id Number;
5810 bpsite_id Number; -- Added by spamujul for ER#8473903
5811 truncate_flag Varchar2(1) := 'N';
5812 l_for_insert varchar2(1) := 'Y';
5813 l_for_party varchar2(1) := 'Y';
5814 l_for_psite Varchar2(1) := 'N'; -- Added by spamujul for ER#8473903
5815 v_party_in_sql Number := 0;
5816 v_acct_in_sql Number := 0;
5817 v_psite_in_sql Number := 0; -- Added by spamujul for ER#8473903
5818 /* added this variable for Bug 1937730*/
5819 v_party_id Number;
5820 -- cursor to run all blocks
5821 CURSOR blocks_csr IS
5822 SELECT block_id, sql_stmnt, currency_code
5823 FROM csc_prof_blocks_b a
5824 WHERE exists ( Select b.block_id
5825 From csc_prof_check_rules_b b
5826 where b.block_id = a.block_id
5827 or b.expr_to_block_id = a.block_id)
5828 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
5829 AND Nvl(end_date_active, Sysdate)
5830 AND block_level IN ('PARTY',
5831 'ACCOUNT'
5832 ,'SITE' -- Added by spamujul for ER#8473903
5833 );
5834 -- cursor to update all results of a party
5835 CURSOR bparty_csr IS
5836 SELECT party_id
5837 FROM hz_parties
5838 WHERE status='A'
5839 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
5840 -- Person, ORG added for 1850508
5841
5842 -- cursor to update all results of an account
5843 /* added this condition party_id=v_party_id for Bug 1937730*/
5844 CURSOR baccount_csr IS
5845 SELECT party_id, cust_account_id
5846 FROM hz_cust_accounts
5847 WHERE party_id=v_party_id
5848 AND status = 'A' ;
5849
5850 -- Begin fix by spamujul for NCR ER#8473903
5851 CURSOR bpsite_csr IS
5852 SELECT party_id, party_site_id
5853 FROM hz_party_sites
5854 WHERE party_id=v_party_id
5855 AND status = 'A'
5856 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
5857 -- End fix by spamujul for NCR ER#8473903
5858 -- added for 1850508
5859 cid number;
5860 val VARCHAR2(240) := null;
5861
5862 BEGIN
5863 -- Loop through blocks for party level
5864 BEGIN
5865 OPEN blocks_csr;
5866 LOOP
5867 FETCH blocks_csr
5868 INTO blk_id,
5869 sql_stmt,
5870 curr_code;
5871 EXIT WHEN blocks_csr%notfound;
5872 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
5873 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
5874 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
5875 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
5876 /* This begin, end exception is added mainly for exception handing for Bug 19800
5877 04*/
5878 Begin
5879 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
5880 -- Loop through per party
5881 -- added for 1850508
5882 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing.PARTY Level.'||to_char(blk_id));
5883 cid := dbms_sql.open_cursor;
5884 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
5885 dbms_sql.define_column(cid, 1, val, 240);
5886 OPEN bparty_csr;
5887 LOOP
5888 FETCH bparty_csr
5889 INTO bparty_id;
5890 EXIT WHEN bparty_csr%notfound;
5891 Evaluate_One_Block(truncate_flag,
5892 blk_id,
5893 bparty_id,
5894 null,
5895 NULL, -- added by spamujul for ER#8473903
5896 sql_stmt,
5897 curr_code,
5898 p_up_total,
5899 p_ip_total,
5900 p_ua_total,
5901 p_ia_total,
5902 p_us_total,-- added by spamujul for ER#8473903
5903 p_is_total,-- added by spamujul for ER#8473903
5904 cid
5905 );
5906 /* added this condition for Bug 1937730*/
5907 v_party_id:=bparty_id;
5908 If (v_acct_in_sql <> 0) then -- added for 1850508
5909 -- If acct is not present as bind variable, the sql might return wrong
5910 -- rows (party level counts) at account leve.
5911 --p_old_block_id:=null;
5912
5913 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
5914 OPEN baccount_csr;
5915 LOOP
5916 FETCH baccount_csr
5917 INTO bparty_id, bacct_id;
5918 EXIT WHEN baccount_csr%notfound;
5919 Evaluate_One_Block(truncate_flag,
5920 blk_id,
5921 bparty_id,
5922 bacct_id,
5923 NULL, -- added by spamujul for ER#8473903
5924 sql_stmt,
5925 curr_code,
5926 p_up_total,
5927 p_ip_total,
5928 p_ua_total,
5929 p_ia_total,
5930 p_us_total,-- added by spamujul for ER#8473903
5931 p_is_total,-- added by spamujul for ER#8473903
5932 cid);
5933 END LOOP;
5934 CLOSE baccount_csr;
5935 END IF; -- added for 1850508
5936 -- Begin fix by spamujul for NCR ER# 8473903
5937 Begin
5938 bparty_id :=0;
5939 IF (v_psite_in_sql <> 0) THEN
5940 cid := dbms_sql.open_cursor;
5941 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
5942 dbms_sql.define_column(cid, 1, val, 240);
5943 v_party_id := bparty_id;
5944 OPEN bpsite_csr;
5945 LOOP
5946 FETCH bpsite_csr
5947 INTO bparty_id, bpsite_id;
5948 EXIT WHEN bpsite_csr%notfound;
5949 Evaluate_One_Block(truncate_flag,
5950 blk_id,
5951 bparty_id,
5952 NULL,
5953 bpsite_id,
5954 sql_stmt,
5955 curr_code,
5956 p_up_total,
5957 p_ip_total,
5958 p_ua_total,
5959 p_ia_total,
5960 p_us_total,
5961 p_is_total
5962 ,cid);
5963 END LOOP;
5964 CLOSE bpsite_csr;
5965 IF (dbms_sql.is_open(cid)) THEN
5966 dbms_sql.close_cursor(cid);
5967 End if;
5968 END IF;
5969 Exception
5970 When others then
5971 IF (dbms_sql.is_open(cid)) THEN
5972 dbms_sql.close_cursor(cid);
5973 End if;
5974 set_context('Evaluate_Blocks2', blk_id, bparty_id,bpsite_id);
5975 g_error := sqlcode || ' ' || sqlerrm;
5976 set_context(NULL, g_error);
5977 End;
5978 IF p_is_total <> 0 THEN
5979 l_for_insert := 'Y';
5980 l_for_party := 'N';
5981 l_for_psite := 'Y';
5982 Insert_Update_Block_Results(p_is_total,
5983 l_for_insert,
5984 l_for_party
5985 ,l_for_psite
5986 );
5987 p_is_total :=0;
5988 END IF;
5989 IF p_us_total <> 0 THEN
5990 l_for_insert := 'N';
5991 l_for_party := 'N';
5992 l_for_psite := 'Y';
5993 Insert_Update_Block_Results (p_us_total,
5994 l_for_insert,
5995 l_for_party
5996 ,l_for_psite
5997 );
5998 p_us_total :=0;
5999 END IF;
6000 -- End fix by spamujul for NCR ER# 8473903
6001 END LOOP;
6002 CLOSE bparty_csr;
6003 IF (dbms_sql.is_open(cid)) THEN
6004 dbms_sql.close_cursor(cid);
6005 end if;
6006 -- END IF
6007 Exception
6008 When others then
6009 IF (dbms_sql.is_open(cid)) THEN
6010 dbms_sql.close_cursor(cid);
6011 end if;
6012 set_context('Evaluate_Blocks1', blk_id, bparty_id);
6013 g_error := sqlcode || ' ' || sqlerrm;
6014 set_context(NULL, g_error);
6015 End;
6016 END LOOP;
6017 CLOSE blocks_csr;
6018 -- check if there are still records to be inserted
6019 IF p_ip_total <> 0 THEN
6020 l_for_insert := 'Y';
6021 l_for_party := 'Y';
6022 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6023 Insert_Update_Block_Results (p_ip_total,
6024 l_for_insert,
6025 l_for_party
6026 ,l_for_psite -- Added by spamujul for ER#8473903
6027 );
6028 p_ip_total :=0;
6029 END IF;
6030 -- check if there are still records to be updated
6031 IF p_up_total <> 0 THEN
6032 l_for_insert := 'N';
6033 l_for_party := 'Y';
6034 Insert_Update_Block_Results(p_up_total,
6035 l_for_insert,
6036 l_for_party
6037 ,l_for_psite -- Added by spamujul for ER#8473903
6038 );
6039 p_up_total :=0;
6040 END IF;
6041 EXCEPTION
6042 WHEN OTHERS THEN
6043 IF (blocks_csr%isopen) THEN
6044 CLOSE blocks_csr;
6045 END IF;
6046 IF (bparty_csr%isopen) THEN
6047 CLOSE bparty_csr;
6048 END IF;
6049 IF (baccount_csr%isopen) THEN
6050 CLOSE baccount_csr;
6051 END IF;
6052 -- Begin fix by spamujul for ER#8473903
6053 IF (bpsite_csr%isopen) THEN
6054 CLOSE bpsite_csr;
6055 END IF;
6056 -- End fix by spamujul for ER#8473903
6057 set_context('Evaluate_Blocks', blk_id, bparty_id);
6058 g_error := sqlcode || ' ' || sqlerrm;
6059 set_context(NULL, g_error);
6060 --set_context(NULL, Sqlerrm);
6061 table_delete;
6062 RAISE;
6063 END;
6064 -- check if there are still records to be inserted
6065 IF p_ia_total <> 0 THEN
6066 l_for_insert := 'Y';
6067 l_for_party := 'N';
6068 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6069 Insert_Update_Block_Results(p_ia_total,
6070 l_for_insert,
6071 l_for_party
6072 ,l_for_psite -- Added by spamujul for ER#8473903
6073 );
6074 p_ia_total :=0;
6075 END IF;
6076
6077 -- check if there are still records to be updated
6078 IF p_ua_total <> 0 THEN
6079 l_for_insert := 'N';
6080 l_for_party := 'N';
6081 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6082 Insert_Update_Block_Results (p_ua_total,
6083 l_for_insert,
6084 l_for_party
6085 ,l_for_psite -- Added by spamujul for ER#8473903
6086 );
6087 p_ua_total :=0;
6088 END IF;
6089 END Evaluate_Blocks1;
6090
6091 -- This procedure evaluates the blocks
6092 -- for which the batch sql statement is NULL and select_type is 'B' (Variable)
6093 PROCEDURE Evaluate_Blocks1_No_Batch ( p_up_total IN OUT NOCOPY NUMBER ,
6094 p_ip_total IN OUT NOCOPY NUMBER ,
6095 p_ua_total IN OUT NOCOPY NUMBER ,
6096 p_ia_total IN OUT NOCOPY NUMBER,
6097 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6098 p_is_total IN OUT NOCOPY NUMBER -- added by spamujul for ER#8473903
6099 ) IS
6100
6101 blk_id Number;
6102 blk_name Varchar2(240);
6103 sql_stmt Varchar2(2000);
6104 curr_code Varchar2(15);
6105 bparty_id Number;
6106 bacct_id Number;
6107 bpsite_id Number; -- added by spamujul for ER#8473903
6108 truncate_flag Varchar2(1) := 'N';
6109
6110 l_for_insert varchar2(1) := 'Y';
6111 l_for_party varchar2(1) := 'Y';
6112 l_for_psite Varchar2(1) :='N';-- added by spamujul for ER#8473903
6113
6114 v_party_in_sql Number := 0;
6115 v_acct_in_sql Number := 0;
6116 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
6117 v_party_id Number;
6118
6119 -- cursor to run all blocks for all checks present in that group
6120 CURSOR blocks_csr IS
6121 SELECT block_id, sql_stmnt, currency_code
6122 FROM csc_prof_blocks_b a
6123 WHERE EXISTS ( SELECT null
6124 FROM csc_prof_checks_b b
6125 WHERE b.select_block_id = a.block_id
6126 AND b.select_type = 'B'
6127 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
6128 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
6129 AND Nvl(end_date_active, SYSDATE)
6130 AND batch_sql_stmnt IS NULL;
6131
6132 -- cursor to update all results of a party
6133 CURSOR bparty_csr IS
6134 SELECT party_id
6135 FROM hz_parties
6136 WHERE status='A'
6137 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
6138
6139 -- cursor to update all results of an account
6140 CURSOR baccount_csr IS
6141 SELECT party_id, cust_account_id
6142 FROM hz_cust_accounts
6143 WHERE party_id=v_party_id
6144 AND status = 'A' ;
6145
6146 -- Begin fx by spamujul for ER#8473903
6147 CURSOR bpsite_csr IS
6148 SELECT party_id,
6149 party_site_id
6150 FROM HZ_PARTY_SITES
6151 WHERE party_id = v_party_id
6152 AND status ='A'
6153 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
6154 -- End fx by spamujul for ER#8473903
6155
6156 cid number;
6157 val VARCHAR2(240) := null;
6158
6159 BEGIN
6160 -- Loop through blocks for party level
6161 BEGIN
6162 OPEN blocks_csr;
6163 LOOP
6164 FETCH blocks_csr
6165 INTO blk_id, sql_stmt, curr_code;
6166 EXIT WHEN blocks_csr%notfound;
6167 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
6168 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
6169 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
6170 Begin
6171 cid := dbms_sql.open_cursor;
6172 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
6173 dbms_sql.define_column(cid, 1, val, 240);
6174 OPEN bparty_csr;
6175 LOOP
6176 FETCH bparty_csr
6177 INTO bparty_id;
6178 EXIT WHEN bparty_csr%notfound;
6179 Evaluate_One_Block(truncate_flag,
6180 blk_id,
6181 bparty_id,
6182 null,
6183 NULL, -- added by spamujul for ER#8473903
6184 sql_stmt,
6185 curr_code,
6186 p_up_total,
6187 p_ip_total,
6188 p_ua_total,
6189 p_ia_total,
6190 p_us_total,-- added by spamujul for ER#8473903
6191 p_is_total,-- added by spamujul for ER#8473903
6192 cid);
6193 v_party_id:=bparty_id;
6194 If (v_acct_in_sql <> 0) then
6195 OPEN baccount_csr;
6196 LOOP
6197 FETCH baccount_csr
6198 INTO bparty_id, bacct_id;
6199 EXIT WHEN baccount_csr%notfound;
6200 Evaluate_One_Block(truncate_flag,
6201 blk_id,
6202 bparty_id,
6203 bacct_id,
6204 NULL, -- added by spamujul for ER#8473903
6205 sql_stmt,
6206 curr_code,
6207 p_up_total,
6208 p_ip_total,
6209 p_ua_total,
6210 p_ia_total,
6211 p_us_total,-- added by spamujul for ER#8473903
6212 p_is_total,-- added by spamujul for ER#8473903
6213 cid);
6214 END LOOP;
6215 CLOSE baccount_csr;
6216 END IF; -- added for 1850508
6217 -- Begin fix by spamujul for ER#8473903
6218 v_party_id:=bparty_id;
6219 If (v_psite_in_sql <> 0) then
6220 OPEN bpsite_csr;
6221 LOOP
6222 FETCH bpsite_csr
6223 INTO bparty_id,
6224 bpsite_id;
6225 EXIT WHEN bpsite_csr%notfound;
6226 Evaluate_One_Block(truncate_flag,
6227 blk_id,
6228 bparty_id,
6229 NULL,
6230 bpsite_id,
6231 sql_stmt,
6232 curr_code,
6233 p_up_total,
6234 p_ip_total,
6235 p_ua_total,
6236 p_ia_total,
6237 p_us_total,
6238 p_is_total,
6239 cid);
6240 END LOOP;
6241 CLOSE bpsite_csr;
6242 End IF;
6243 -- End fix by spamujul for ER#8473903
6244 END LOOP;
6245 CLOSE bparty_csr;
6246 IF (dbms_sql.is_open(cid)) THEN
6247 dbms_sql.close_cursor(cid);
6248 end if;
6249 Exception
6250 When others then
6251 IF (dbms_sql.is_open(cid)) THEN
6252 dbms_sql.close_cursor(cid);
6253 end if;
6254 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
6255 g_error := sqlcode || ' ' || sqlerrm;
6256 set_context(NULL, g_error);
6257 End;
6258 END LOOP;
6259 CLOSE blocks_csr;
6260 -- check if there are still records to be inserted
6261 IF p_ip_total <> 0 THEN
6262 l_for_insert := 'Y';
6263 l_for_party := 'Y';
6264 l_for_psite :='N'; -- Added by spamujul for ER#8473903
6265 Insert_Update_Block_Results (p_ip_total,
6266 l_for_insert,
6267 l_for_party
6268 ,l_for_psite -- Added by spamujul for ER#8473903
6269 );
6270 p_ip_total :=0;
6271 END IF;
6272 -- check if there are still records to be updated
6273 IF p_up_total <> 0 THEN
6274 l_for_insert := 'N';
6275 l_for_party := 'Y';
6276 l_for_psite :='N'; -- Added by spamujul for ER#8473903
6277 Insert_Update_Block_Results(p_up_total,
6278 l_for_insert,
6279 l_for_party
6280 ,l_for_psite -- Added by spamujul for ER#8473903
6281 );
6282 p_up_total :=0;
6283 END IF;
6284 EXCEPTION
6285 WHEN OTHERS THEN
6286 IF (blocks_csr%isopen) THEN
6287 CLOSE blocks_csr;
6288 END IF;
6289 IF (bparty_csr%isopen) THEN
6290 CLOSE bparty_csr;
6291 END IF;
6292 IF (baccount_csr%isopen) THEN
6293 CLOSE baccount_csr;
6294 END IF;
6295 -- Begin fix by spamujul for ER#8473903
6296 IF (bpsite_csr%isopen) THEN
6297 CLOSE bpsite_csr;
6298 END IF;
6299 -- End fix by spamujul for ER#8473903
6300 IF (dbms_sql.is_open(cid)) THEN
6301 dbms_sql.close_cursor(cid);
6302 end if;
6303 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
6304 g_error := sqlcode || ' ' || sqlerrm;
6305 set_context(NULL, g_error);
6306 table_delete;
6307 RAISE;
6308 END;
6309 -- check if there are still records to be inserted
6310 IF p_ia_total <> 0 THEN
6311 l_for_insert := 'Y';
6312 l_for_party := 'N';
6313 l_for_psite :='N'; -- Added by spamujul for ER#8473903
6314 Insert_Update_Block_Results (p_ia_total,
6315 l_for_insert,
6316 l_for_party
6317 ,l_for_psite -- Added by spamujul for ER#8473903
6318 );
6319 p_ia_total :=0;
6320 END IF;
6321
6322 -- check if there are still records to be updated
6323 IF p_ua_total <> 0 THEN
6324 l_for_insert := 'N';
6325 l_for_party := 'N';
6326 l_for_psite :='N'; -- Added by spamujul for ER#8473903
6327 Insert_Update_Block_Results (p_ua_total,
6328 l_for_insert,
6329 l_for_party
6330 ,l_for_psite -- Added by spamujul for ER#8473903
6331 );
6332 p_ua_total :=0;
6333 END IF;
6334 -- Begin fix by spamujul for ER#8473903
6335 IF p_is_total <> 0 THEN
6336 l_for_insert := 'Y';
6337 l_for_party := 'N';
6338 l_for_psite := 'Y';
6339 Insert_Update_Block_Results(p_is_total,
6340 l_for_insert,
6341 l_for_party
6342 ,l_for_psite
6343 );
6344 p_is_total :=0;
6345 END IF;
6346 IF p_us_total <> 0 THEN
6347 l_for_insert := 'N';
6348 l_for_party := 'N';
6349 l_for_psite := 'Y';
6350 Insert_Update_Block_Results(p_us_total,
6351 l_for_insert,
6352 l_for_party
6353 ,l_for_psite
6354 );
6355 p_us_total :=0;
6356 END IF;
6357 -- End fix by spamujul for ER#8473903
6358 END Evaluate_Blocks1_No_Batch;
6359 --
6360 -- Evaluate_Blocks2
6361 -- Loop through all the effective building blocks and evaluate the results
6362 -- for given customer.
6363 -- if block_id is not null, party_id is not null or account_id is not null
6364 --
6365 PROCEDURE Evaluate_Blocks2 ( p_block_id IN NUMBER,
6366 p_party_id IN NUMBER,
6367 p_acct_id IN NUMBER,
6368 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
6369 p_up_total IN OUT NOCOPY NUMBER ,
6370 p_ip_total IN OUT NOCOPY NUMBER ,
6371 p_ua_total IN OUT NOCOPY NUMBER ,
6372 p_ia_total IN OUT NOCOPY NUMBER ,
6373 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6374 p_is_total IN OUT NOCOPY NUMBER -- added by spamujul for ER#8473903
6375 ) IS
6376
6377 blk_id NUMBER;
6378 blk_name Varchar2(240);
6379 sql_stmt Varchar2(2000);
6380 curr_code Varchar2(15);
6381 truncate_flag Varchar2(1) := 'N';
6382 l_for_insert varchar2(1) := 'Y';
6383 l_for_party varchar2(1) := 'Y';
6384 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
6385 v_party_in_sql Number := 0;
6386 v_acct_in_sql Number := 0;
6387 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
6388 /* added these variable for Bug 1937730*/
6389 bparty_id Number;
6390 bacct_id Number;
6391 v_party_id Number;
6392 bpsite_id Number; -- added by spamujul for ER#8473903
6393 cid Number;
6394 val Varchar2(240) := null;
6395 v_incident_id Number := p_psite_id ; -- added by spamujul for ER#8473903
6396 --v_incident_flag Number := 'Y'; -- added by spamujul for ER#8473903
6397 v_incident_flag VARCHAR2(2) := 'Y'; -- Fixed bug# 10202830 by mpathani
6398
6399 -- cursor to run a specific block
6400 CURSOR blocks_csr IS
6401 SELECT block_id,
6402 sql_stmnt,
6403 currency_code
6404 FROM csc_prof_blocks_b
6405 WHERE block_id = p_block_id
6406 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
6407 AND Nvl(end_date_active, Sysdate));
6408
6409 -- cursor to update all results of an account
6410 /* added this condition party_id=v_party_id for Bug 1937730*/
6411 CURSOR baccount_csr IS
6412 SELECT party_id, cust_account_id
6413 FROM hz_cust_accounts
6414 WHERE party_id=v_party_id
6415 AND status = 'A' ;
6416 -- Begin fix by spamujul for NCR ER#8473903
6417 CURSOR bpsite_csr IS
6418 SELECT party_id, party_site_id
6419 FROM hz_party_sites
6420 WHERE party_id=v_party_id
6421 AND status = 'A'
6422 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
6423 -- End fix by spamujul for NCR ER#8473903
6424
6425 BEGIN
6426 -- Loop through the given block_id for party level
6427 OPEN blocks_csr;
6428 FETCH blocks_csr
6429 INTO blk_id,
6430 sql_stmt,
6431 curr_code;
6432 IF blocks_csr%found THEN
6433 CLOSE blocks_csr;
6434 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
6435 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
6436 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
6437 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
6438
6439 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
6440 /* Commented this if condition for Bug1937730*/
6441 -- IF (p_acct_id IS NULL) THEN
6442 -- P_CID is null as cursor should be parsed each time.
6443 Evaluate_One_Block(truncate_flag,
6444 blk_id,
6445 p_party_id,
6446 null,
6447 NULL, -- added by spamujul for ER#8473903
6448 sql_stmt,
6449 curr_code,
6450 p_up_total,
6451 p_ip_total,
6452 p_ua_total,
6453 p_ia_total,
6454 p_us_total,-- added by spamujul for ER#8473903
6455 p_is_total, -- added by spamujul for ER#8473903
6456 NULL );
6457
6458 -- check if there are still records to be inserted
6459 IF p_ip_total <> 0 THEN
6460 l_for_insert := 'Y';
6461 l_for_party := 'Y';
6462 l_for_psite := 'N'; -- added by spamujul for ER#8473903
6463 Insert_Update_Block_Results (p_ip_total,
6464 l_for_insert,
6465 l_for_party
6466 ,l_for_psite -- added by spamujul for ER#8473903
6467 );
6468 p_ip_total :=0;
6469 END IF;
6470 -- check if there are still records to be updated
6471 IF p_up_total <> 0 THEN
6472 l_for_insert := 'N';
6473 l_for_party := 'Y';
6474 l_for_psite := 'N'; -- added by spamujul for ER#8473903
6475 Insert_Update_Block_Results(p_up_total,
6476 l_for_insert,
6477 l_for_party
6478 ,l_for_psite -- added by spamujul for ER#8473903
6479 );
6480 p_up_total :=0;
6481 END IF;
6482
6483 /* added this condition for Bug 1937730*/
6484 -- ELSIF (p_acct_id IS NOT NULL) THEN
6485
6486 /* This begin, end exception is added mainly for exception handing for Bug 19800
6487 04*/
6488 Begin
6489 -- P_CID is null as cursor should be parsed
6490 If (v_acct_in_sql <> 0) then -- added for 1850508
6491 -- If acct is not present as bind variable, the sql might return wrong
6492 -- rows (party level counts) at account leve.
6493 --p_old_block_id:=null;
6494 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
6495 cid := dbms_sql.open_cursor;
6496 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
6497 dbms_sql.define_column(cid, 1, val, 240);
6498 /* changed bparty_id to p_party_id for bug 5351401 */
6499 v_party_id := p_party_id;
6500 OPEN baccount_csr;
6501 LOOP
6502 FETCH baccount_csr
6503 INTO bparty_id, bacct_id;
6504 EXIT WHEN baccount_csr%notfound;
6505 Evaluate_One_Block(truncate_flag,
6506 blk_id,
6507 bparty_id,
6508 bacct_id,
6509 NULL, -- added by spamujul for ER#8473903
6510 sql_stmt,
6511 curr_code,
6512 p_up_total,
6513 p_ip_total,
6514 p_ua_total,
6515 p_ia_total,
6516 p_us_total,-- added by spamujul for ER#8473903
6517 p_is_total -- added by spamujul for ER#8473903
6518 ,cid);
6519 END LOOP;
6520 CLOSE baccount_csr;
6521 IF (dbms_sql.is_open(cid)) THEN
6522 dbms_sql.close_cursor(cid);
6523 End if;
6524 END IF; -- added for 1850508
6525 /* Evaluate_One_Block(truncate_flag, blk_id, p_party_id,
6526 p_acct_id, sql_stmt, curr_code,
6527 p_up_total, p_ip_total, p_ua_total, p_ia_total,NULL );
6528 */
6529
6530 -- check if there are still records to be inserted
6531 Exception
6532 When others then
6533 IF (dbms_sql.is_open(cid)) THEN
6534 dbms_sql.close_cursor(cid);
6535 End if;
6536 set_context('Evaluate_Blocks2', blk_id, bparty_id);
6537 g_error := sqlcode || ' ' || sqlerrm;
6538 set_context(NULL, g_error);
6539 End;
6540 IF p_ia_total <> 0 THEN
6541 l_for_insert := 'Y';
6542 l_for_party := 'N';
6543 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6544 Insert_Update_Block_Results(p_ia_total,
6545 l_for_insert,
6546 l_for_party
6547 ,l_for_psite -- Added by spamujul for ER# 8473903
6548 );
6549 p_ia_total :=0;
6550 END IF;
6551 -- check if there are still records to be updated
6552 IF p_ua_total <> 0 THEN
6553 l_for_insert := 'N';
6554 l_for_party := 'N';
6555 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6556 Insert_Update_Block_Results (p_ua_total,
6557 l_for_insert,
6558 l_for_party
6559 ,l_for_psite -- Added by spamujul for ER# 8473903
6560 );
6561 p_ua_total :=0;
6562 END IF;
6563 -- END IF;
6564 -- END IF; --((v_party_in_sql <> 0) and (v_acct_in_sql <> 0))
6565 -- Begin fix by spamujul for NCR ER# 8473903
6566 Begin
6567 bparty_id :=0;
6568 IF (v_psite_in_sql <> 0) THEN
6569 cid := dbms_sql.open_cursor;
6570 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
6571 dbms_sql.define_column(cid, 1, val, 240);
6572 v_party_id := p_party_id;
6573 OPEN bpsite_csr;
6574 LOOP
6575 FETCH bpsite_csr
6576 INTO bparty_id, bpsite_id;
6577 EXIT WHEN bpsite_csr%notfound;
6578 /* Added the following code to When incident Address is refreshed
6579 in Dashboard
6580 */
6581 IF (v_incident_id IS NOT NULL AND v_incident_id = bpsite_id) AND v_incident_flag <> 'N' THEN
6582 v_incident_flag := 'N';
6583 END IF;
6584 -- End of Incident Address Refresh
6585 Evaluate_One_Block(truncate_flag,
6586 blk_id,
6587 bparty_id,
6588 NULL,
6589 bpsite_id,
6590 sql_stmt,
6591 curr_code,
6592 p_up_total,
6593 p_ip_total,
6594 p_ua_total,
6595 p_ia_total,
6596 p_us_total,
6597 p_is_total
6598 ,cid);
6599 END LOOP;
6600 CLOSE bpsite_csr;
6601 -- Added the following code when incident address is refreshed in Dashboard
6602 IF v_incident_id IS NOT NULL AND v_incident_flag ='Y' THEN
6603 Evaluate_One_Block(truncate_flag,
6604 blk_id,
6605 p_party_id,
6606 NULL,
6607 p_psite_id,
6608 sql_stmt,
6609 curr_code,
6610 p_up_total,
6611 p_ip_total,
6612 p_ua_total,
6613 p_ia_total,
6614 p_us_total,
6615 p_is_total
6616 ,cid);
6617 v_incident_flag := 'N';
6618 END IF;
6619 -- End of the code when incident address is refreshed in Dashboard
6620
6621 IF (dbms_sql.is_open(cid)) THEN
6622 dbms_sql.close_cursor(cid);
6623 End if;
6624 END IF;
6625 Exception
6626 When others then
6627 IF (dbms_sql.is_open(cid)) THEN
6628 dbms_sql.close_cursor(cid);
6629 End if;
6630 set_context('Evaluate_Blocks2', blk_id, bparty_id,bpsite_id);
6631 g_error := sqlcode || ' ' || sqlerrm;
6632 set_context(NULL, g_error);
6633 End;
6634 IF p_is_total <> 0 THEN
6635 l_for_insert := 'Y';
6636 l_for_party := 'N';
6637 l_for_psite := 'Y';
6638 Insert_Update_Block_Results(p_is_total,
6639 l_for_insert,
6640 l_for_party
6641 ,l_for_psite
6642 );
6643 p_is_total :=0;
6644 END IF;
6645 IF p_us_total <> 0 THEN
6646 l_for_insert := 'N';
6647 l_for_party := 'N';
6648 l_for_psite := 'Y';
6649 Insert_Update_Block_Results (p_us_total,
6650 l_for_insert,
6651 l_for_party
6652 ,l_for_psite
6653 );
6654 p_us_total :=0;
6655 END IF;
6656 -- End fix by spamujul for NCR ER# 8473903
6657 ELSE
6658 CLOSE blocks_csr;
6659 END IF;
6660
6661 EXCEPTION
6662 WHEN OTHERS THEN
6663 IF (blocks_csr%isopen) THEN
6664 CLOSE blocks_csr;
6665 END IF;
6666 set_context('Evaluate_Blocks2',
6667 blk_id,
6668 p_party_id,
6669 p_acct_id
6670 ,p_psite_id -- Added by spamujul for NCR ER# 8473903
6671 );
6672 g_error := sqlcode || ' ' || sqlerrm;
6673 set_context(NULL, g_error);
6674
6675 END Evaluate_Blocks2;
6676
6677 --
6678 -- Evaluate_Blocks4 -- added for 1850508
6679 -- When Group Id is given but not party_id or Account_id
6680 -- Calculate for All Parties, Accounts * For all checks present in the group
6681 --
6682 PROCEDURE Evaluate_Blocks4 ( p_up_total IN OUT NOCOPY NUMBER ,
6683 p_ip_total IN OUT NOCOPY NUMBER ,
6684 p_ua_total IN OUT NOCOPY NUMBER ,
6685 p_ia_total IN OUT NOCOPY NUMBER ,
6686 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6687 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6688 p_group_id IN NUMBER
6689 ) IS
6690
6691 blk_id Number;
6692 blk_name Varchar2(240);
6693 sql_stmt Varchar2(2000);
6694 curr_code Varchar2(15);
6695 bparty_id Number;
6696 bacct_id Number;
6697 bpsite_id Number; -- added by spamujul for ER#8473903
6698 truncate_flag Varchar2(1):= 'N';
6699 l_for_insert varchar2(1) := 'Y';
6700 l_for_party varchar2(1) := 'Y';
6701 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
6702 v_party_in_sql Number := 0;
6703 v_acct_in_sql Number := 0;
6704 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
6705 /* added this variable for Bug 1937730*/
6706 v_party_id Number;
6707 -- cursor to run all blocks for all checks present in that group
6708 CURSOR blocks_csr IS
6709 SELECT block_id,
6710 sql_stmnt,
6711 currency_code
6712 FROM csc_prof_blocks_b a
6713 WHERE exists ( Select b.block_id
6714 From csc_prof_check_rules_b b
6715 where (b.block_id = a.block_id
6716 or b.expr_to_block_id = a.block_id)
6717 And check_id in (Select check_id
6718 from csc_prof_group_checks
6719 where group_id = p_group_id))
6720 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
6721 AND Nvl(end_date_active, Sysdate)
6722 AND block_level IN ('PARTY','ACCOUNT','SITE') -- Included by spamujul for ER#8473903
6723 ;
6724 -- cursor to update all results of a party
6725 CURSOR bparty_csr IS
6726 SELECT party_id
6727 FROM hz_parties
6728 WHERE status='A'
6729 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
6730 -- Person, ORG added for 1850508
6731 /* added this condition party_id=v_party_id for Bug 1937730*/
6732 -- cursor to update all results of an account
6733 CURSOR baccount_csr IS
6734 SELECT party_id, cust_account_id
6735 FROM hz_cust_accounts
6736 WHERE party_id=v_party_id
6737 AND status = 'A' ;
6738 -- added for 1850508
6739 -- Begin fix by spamujul for ER#8473903
6740 CURSOR bpsite_csr IS
6741 SELECT party_id,
6742 party_site_id
6743 FROM HZ_PARTY_SITES
6744 WHERE party_id = v_party_id
6745 AND status ='A'
6746 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
6747 -- End fix by spamujul for ER#8473903
6748 cid number;
6749 val VARCHAR2(240) := null;
6750 BEGIN
6751 -- Loop through blocks for party level
6752 BEGIN
6753 OPEN blocks_csr;
6754 LOOP
6755 FETCH blocks_csr
6756 INTO blk_id,
6757 sql_stmt,
6758 curr_code;
6759 EXIT WHEN blocks_csr%notfound;
6760 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
6761 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
6762 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
6763 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
6764 /* This begin, end exception is added mainly for exception handing for Bug 19800
6765 04*/
6766 Begin
6767 -- IF ((v_party_in_sql <> 0) and (v_acct_in_sql <> 0)) Then
6768 -- Loop through per party
6769 -- added for 1850508
6770 -- dbms_output.put_line('Evaluate blocks4 Opening and Parsing.PARTY Level.'||to_char(blk_id));
6771 cid := dbms_sql.open_cursor;
6772 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
6773 dbms_sql.define_column(cid, 1, val, 240);
6774 OPEN bparty_csr;
6775 LOOP
6776 FETCH bparty_csr
6777 INTO bparty_id;
6778 EXIT WHEN bparty_csr%notfound;
6779 Evaluate_One_Block(truncate_flag,
6780 blk_id,
6781 bparty_id,
6782 null,
6783 NULL,-- added by spamujul for ER#8473903
6784 sql_stmt,
6785 curr_code,
6786 p_up_total,
6787 p_ip_total,
6788 p_ua_total,
6789 p_ia_total,
6790 p_us_total,-- added by spamujul for ER#8473903
6791 p_is_total,-- added by spamujul for ER#8473903
6792 cid);
6793 /* added this condition for Bug 1937730*/
6794 v_party_id:=bparty_id;
6795 If (v_acct_in_sql <> 0) then -- added for 1850508
6796 -- If acct is not present as bind variable, the sql might return wrong
6797 -- rows (party level counts) at account leve.
6798 --p_old_block_id:=null;
6799
6800 -- dbms_output.put_line('Evaluate blocks1 Opening and Parsing. ACCTLevel.'||to_char(blk_id));
6801 OPEN baccount_csr;
6802 LOOP
6803 FETCH baccount_csr
6804 INTO bparty_id, bacct_id;
6805 EXIT WHEN baccount_csr%notfound;
6806 Evaluate_One_Block(truncate_flag,
6807 blk_id,
6808 bparty_id,
6809 bacct_id,
6810 NULL,-- added by spamujul for ER#8473903
6811 sql_stmt,
6812 curr_code,
6813 p_up_total,
6814 p_ip_total,
6815 p_ua_total,
6816 p_ia_total,
6817 p_us_total,-- added by spamujul for ER#8473903
6818 p_is_total,-- added by spamujul for ER#8473903
6819 cid);
6820 END LOOP;
6821 CLOSE baccount_csr;
6822 END IF; -- added for 1850508
6823 -- Begin fix by spamujul for ER#8473903
6824 IF (v_psite_in_sql <> 0) THEN -- added for 1850508
6825 OPEN bpsite_csr;
6826 LOOP
6827 FETCH bpsite_csr
6828 INTO bparty_id, bpsite_id;
6829 EXIT WHEN bpsite_csr%notfound;
6830 Evaluate_One_Block(truncate_flag,
6831 blk_id,
6832 bparty_id,
6833 bacct_id,
6834 NULL,
6835 sql_stmt,
6836 curr_code,
6837 p_up_total,
6838 p_ip_total,
6839 p_ua_total,
6840 p_ia_total,
6841 p_us_total,
6842 p_is_total,
6843 cid
6844 );
6845 END LOOP;
6846 CLOSE bpsite_csr;
6847 END IF;
6848 -- End fix by spamujul for ER#8473903
6849 END LOOP;
6850 CLOSE bparty_csr;
6851 IF (dbms_sql.is_open(cid)) THEN
6852 dbms_sql.close_cursor(cid);
6853 end if;
6854 -- END IF;
6855 Exception
6856 When others then
6857 IF (dbms_sql.is_open(cid)) THEN
6858 dbms_sql.close_cursor(cid);
6859 end if;
6860 set_context('Evaluate_Blocks4', blk_id, bparty_id);
6861 g_error := sqlcode || ' ' || sqlerrm;
6862 set_context(NULL, g_error);
6863 End;
6864 END LOOP;
6865 CLOSE blocks_csr;
6866 -- check if there are still records to be inserted
6867 IF p_ip_total <> 0 THEN
6868 l_for_insert := 'Y';
6869 l_for_party := 'Y';
6870 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6871 Insert_Update_Block_Results(p_ip_total,
6872 l_for_insert,
6873 l_for_party
6874 ,l_for_psite -- Added by spamujul for ER#8473903
6875 );
6876 p_ip_total :=0;
6877 END IF;
6878 -- check if there are still records to be updated
6879 IF p_up_total <> 0 THEN
6880 l_for_insert := 'N';
6881 l_for_party := 'Y';
6882 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6883 Insert_Update_Block_Results(p_up_total,
6884 l_for_insert,
6885 l_for_party
6886 ,l_for_psite -- Added by spamujul for ER#8473903
6887 );
6888 p_up_total :=0;
6889 END IF;
6890 -- check if there are still records to be inserted
6891 IF p_ia_total <> 0 THEN
6892 l_for_insert := 'Y';
6893 l_for_party := 'N';
6894 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6895 Insert_Update_Block_Results(p_ia_total,
6896 l_for_insert,
6897 l_for_party
6898 ,l_for_psite -- Added by spamujul for ER#8473903
6899 );
6900 p_ia_total :=0;
6901 END IF;
6902 -- check if there are still records to be updated
6903 IF p_ua_total <> 0 THEN
6904 l_for_insert := 'N';
6905 l_for_party := 'N';
6906 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
6907 Insert_Update_Block_Results(p_ua_total,
6908 l_for_insert,
6909 l_for_party
6910 ,l_for_psite -- Added by spamujul for ER#8473903
6911 );
6912 p_ua_total :=0;
6913 END IF;
6914 -- Begin fix by spamujul for ER#8473903
6915 IF p_is_total <> 0 THEN
6916 l_for_insert := 'Y';
6917 l_for_party := 'N';
6918 l_for_psite := 'Y';
6919 Insert_Update_Block_Results(p_ia_total,
6920 l_for_insert,
6921 l_for_party
6922 ,l_for_psite
6923 );
6924 p_is_total :=0;
6925 END IF;
6926 IF p_us_total <> 0 THEN
6927 l_for_insert := 'N';
6928 l_for_party := 'N';
6929 l_for_psite := 'Y';
6930 Insert_Update_Block_Results(p_ua_total,
6931 l_for_insert,
6932 l_for_party
6933 ,l_for_psite
6934 );
6935 p_us_total :=0;
6936 END IF;
6937 -- End fix by spamujul for ER#8473903
6938 EXCEPTION
6939 WHEN OTHERS THEN
6940 IF (blocks_csr%isopen) THEN
6941 CLOSE blocks_csr;
6942 END IF;
6943 IF (bparty_csr%isopen) THEN
6944 CLOSE bparty_csr;
6945 END IF;
6946 IF (baccount_csr%isopen) THEN
6947 CLOSE baccount_csr;
6948 END IF;
6949 -- Begin fix by spamujul for ER#8473903
6950 IF (bpsite_csr%isopen) THEN
6951 CLOSE bpsite_csr;
6952 END IF;
6953 -- End fix by spamujul for ER#8473903
6954 IF (dbms_sql.is_open(cid)) THEN
6955 dbms_sql.close_cursor(cid);
6956 end if;
6957 set_context('Evaluate_Blocks4', blk_id, bparty_id);
6958 g_error := sqlcode || ' ' || sqlerrm;
6959 set_context(NULL, g_error);
6960 --set_context(NULL, Sqlerrm);
6961 table_delete;
6962 RAISE;
6963 END;
6964 END Evaluate_Blocks4;
6965
6966 -- This procedure evaluates the blocks
6967 -- for which the batch sql statement is NULL and select_type is 'B' (Variable)
6968 -- Group_id is not null
6969 PROCEDURE Evaluate_Blocks4_No_Batch ( p_up_total IN OUT NOCOPY NUMBER ,
6970 p_ip_total IN OUT NOCOPY NUMBER ,
6971 p_ua_total IN OUT NOCOPY NUMBER ,
6972 p_ia_total IN OUT NOCOPY NUMBER ,
6973 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6974 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
6975 p_group_id IN NUMBER
6976 ) IS
6977
6978 blk_id Number;
6979 blk_name Varchar2(240);
6980 sql_stmt Varchar2(2000);
6981 curr_code Varchar2(15);
6982 bparty_id Number;
6983 bacct_id Number;
6984 bpsite_id Number; -- added by spamujul for ER#8473903
6985 truncate_flag Varchar2(1):= 'N';
6986
6987 l_for_insert varchar2(1) := 'Y';
6988 l_for_party varchar2(1) := 'Y';
6989 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
6990
6991 v_party_in_sql Number := 0;
6992 v_acct_in_sql Number := 0;
6993 v_psite_in_sql Number :=0; -- added by spamujul for ER#8473903
6994 v_party_id Number;
6995
6996 -- cursor to run all blocks for all checks present in that group
6997 CURSOR blocks_csr IS
6998 SELECT block_id,
6999 sql_stmnt,
7000 currency_code
7001 FROM csc_prof_blocks_b a
7002 WHERE EXISTS ( SELECT null
7003 FROM csc_prof_checks_b b
7004 WHERE b.select_block_id = a.block_id
7005 AND b.select_type = 'B'
7006 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
7007 WHERE group_id = p_group_id))
7008 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
7009 AND Nvl(end_date_active, SYSDATE)
7010 AND batch_sql_stmnt IS NULL;
7011
7012 -- cursor to update all results of a party
7013 CURSOR bparty_csr IS
7014 SELECT party_id
7015 FROM hz_parties
7016 WHERE status='A'
7017 AND PARTY_TYPE IN ('PERSON','ORGANIZATION');
7018
7019 -- cursor to update all results of an account
7020 CURSOR baccount_csr IS
7021 SELECT party_id, cust_account_id
7022 FROM hz_cust_accounts
7023 WHERE party_id=v_party_id
7024 AND status = 'A' ;
7025 -- Begin fx by spamujul for ER#8473903
7026 CURSOR bpsite_csr IS
7027 SELECT party_id,
7028 party_site_id
7029 FROM HZ_PARTY_SITES
7030 WHERE party_id = v_party_id
7031 AND status ='A'
7032 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
7033 -- End fx by spamujul for ER#8473903
7034 cid number;
7035 val VARCHAR2(240) := null;
7036
7037 BEGIN
7038 -- Loop through blocks for party level
7039 BEGIN
7040 OPEN blocks_csr;
7041 LOOP
7042 FETCH blocks_csr INTO blk_id,
7043 sql_stmt,
7044 curr_code;
7045 EXIT WHEN blocks_csr%notfound;
7046 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
7047 v_acct_in_sql := INSTR(lower(sql_stmt),':cust_account_id',1);
7048 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
7049 Begin
7050 cid := dbms_sql.open_cursor;
7051 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
7052 dbms_sql.define_column(cid, 1, val, 240);
7053 OPEN bparty_csr;
7054 LOOP
7055 FETCH bparty_csr
7056 INTO bparty_id;
7057 EXIT WHEN bparty_csr%notfound;
7058 Evaluate_One_Block(truncate_flag,
7059 blk_id,
7060 bparty_id,
7061 null,
7062 NULL, -- added by spamujul for ER#8473903
7063 sql_stmt,
7064 curr_code,
7065 p_up_total,
7066 p_ip_total,
7067 p_ua_total,
7068 p_ia_total,
7069 p_us_total,-- added by spamujul for ER#8473903
7070 p_is_total,-- added by spamujul for ER#8473903
7071 cid
7072 );
7073 v_party_id:=bparty_id;
7074 If (v_acct_in_sql <> 0) then
7075 OPEN baccount_csr;
7076 LOOP
7077 FETCH baccount_csr
7078 INTO bparty_id, bacct_id;
7079 EXIT WHEN baccount_csr%notfound;
7080 Evaluate_One_Block(truncate_flag,
7081 blk_id,
7082 bparty_id,
7083 bacct_id,
7084 NULL, -- added by spamujul for ER#8473903
7085 sql_stmt,
7086 curr_code,
7087 p_up_total,
7088 p_ip_total,
7089 p_ua_total,
7090 p_ia_total,
7091 p_us_total,-- added by spamujul for ER#8473903
7092 p_is_total,-- added by spamujul for ER#8473903
7093 cid);
7094 END LOOP;
7095 CLOSE baccount_csr;
7096 END IF; -- added for 1850508
7097 -- Begin fix by spamujul for ER#8473903
7098 v_party_id:=bparty_id;
7099 If (v_psite_in_sql <> 0) then
7100 OPEN bpsite_csr;
7101 LOOP
7102 FETCH bpsite_csr
7103 INTO bparty_id,
7104 bpsite_id;
7105 EXIT WHEN bpsite_csr%notfound;
7106 Evaluate_One_Block(truncate_flag,
7107 blk_id,
7108 bparty_id,
7109 NULL,
7110 bpsite_id,
7111 sql_stmt,
7112 curr_code,
7113 p_up_total,
7114 p_ip_total,
7115 p_ua_total,
7116 p_ia_total,
7117 p_us_total,
7118 p_is_total,
7119 cid);
7120 END LOOP;
7121 CLOSE bpsite_csr;
7122 End IF;
7123 -- End fix by spamujul for ER#8473903
7124 END LOOP;
7125 CLOSE bparty_csr;
7126 IF (dbms_sql.is_open(cid)) THEN
7127 dbms_sql.close_cursor(cid);
7128 end if;
7129 Exception
7130 When others then
7131 IF (dbms_sql.is_open(cid)) THEN
7132 dbms_sql.close_cursor(cid);
7133 end if;
7134 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
7135 g_error := sqlcode || ' ' || sqlerrm;
7136 set_context(NULL, g_error);
7137 End;
7138
7139 END LOOP;
7140 CLOSE blocks_csr;
7141
7142 -- check if there are still records to be inserted
7143 IF p_ip_total <> 0 THEN
7144 l_for_insert := 'Y';
7145 l_for_party := 'Y';
7146 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
7147 Insert_Update_Block_Results (p_ip_total,
7148 l_for_insert,
7149 l_for_party
7150 ,l_for_psite -- Added by spamujul for ER#8473903
7151 );
7152 p_ip_total :=0;
7153 END IF;
7154 -- check if there are still records to be updated
7155 IF p_up_total <> 0 THEN
7156 l_for_insert := 'N';
7157 l_for_party := 'Y';
7158 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
7159 Insert_Update_Block_Results(p_up_total,
7160 l_for_insert,
7161 l_for_party
7162 ,l_for_psite -- Added by spamujul for ER#8473903
7163 );
7164 p_up_total :=0;
7165 END IF;
7166 -- Begin fix by spamujul for ER#8473903
7167 IF p_is_total <> 0 THEN
7168 l_for_insert := 'Y';
7169 l_for_party := 'N';
7170 l_for_psite := 'Y';
7171 Insert_Update_Block_Results(p_is_total,
7172 l_for_insert,
7173 l_for_party
7174 ,l_for_psite
7175 );
7176 p_is_total :=0;
7177 END IF;
7178 -- check if there are still records to be updated
7179 IF p_us_total <> 0 THEN
7180 l_for_insert := 'N';
7181 l_for_party := 'N';
7182 l_for_psite := 'Y';
7183 Insert_Update_Block_Results(p_us_total,
7184 l_for_insert,
7185 l_for_party
7186 ,l_for_psite
7187 );
7188 p_us_total :=0;
7189 END IF;
7190 -- End fix by spamujul for ER#8473903
7191 EXCEPTION
7192 WHEN OTHERS THEN
7193 IF (blocks_csr%isopen) THEN
7194 CLOSE blocks_csr;
7195 END IF;
7196 IF (bparty_csr%isopen) THEN
7197 CLOSE bparty_csr;
7198 END IF;
7199 IF (baccount_csr%isopen) THEN
7200 CLOSE baccount_csr;
7201 END IF;
7202 -- Begin fix by spamujul for ER#8473903
7203 IF (bpsite_csr%isopen) THEN
7204 CLOSE bpsite_csr;
7205 END IF;
7206 -- End fix by spamujul for ER#8473903
7207 IF (dbms_sql.is_open(cid)) THEN
7208 dbms_sql.close_cursor(cid);
7209 end if;
7210 set_context('Evaluate_Blocks4_No_Batch', blk_id, bparty_id);
7211 g_error := sqlcode || ' ' || sqlerrm;
7212 set_context(NULL, g_error);
7213 table_delete;
7214 RAISE;
7215 END;
7216 -- check if there are still records to be inserted
7217 IF p_ia_total <> 0 THEN
7218 l_for_insert := 'Y';
7219 l_for_party := 'N';
7220 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
7221 Insert_Update_Block_Results(p_ia_total,
7222 l_for_insert,
7223 l_for_party
7224 ,l_for_psite -- Added by spamujul for ER#8473903
7225 );
7226 p_ia_total :=0;
7227 END IF;
7228 -- check if there are still records to be updated
7229 IF p_ua_total <> 0 THEN
7230 l_for_insert := 'N';
7231 l_for_party := 'N';
7232 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
7233 Insert_Update_Block_Results(p_ua_total,
7234 l_for_insert,
7235 l_for_party
7236 ,l_for_psite -- Added by spamujul for ER#8473903
7237 );
7238 p_ua_total :=0;
7239 END IF;
7240
7241 END Evaluate_Blocks4_No_Batch;
7242
7243 PROCEDURE Evaluate_Blocks5
7244 ( p_block_id IN NUMBER,
7245 p_party_id IN NUMBER,
7246 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
7247 p_up_total IN OUT NOCOPY NUMBER ,
7248 p_ip_total IN OUT NOCOPY NUMBER ,
7249 p_ua_total IN OUT NOCOPY NUMBER ,
7250 p_ia_total IN OUT NOCOPY NUMBER
7251 ,p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
7252 p_is_total IN OUT NOCOPY NUMBER -- added by spamujul for ER#8473903
7253 )
7254 IS
7255
7256 v_blk_id NUMBER;
7257 v_blk_name Varchar2(240);
7258 v_sql_stmt Varchar2(2000);
7259 v_curr_code Varchar2(15);
7260 v_truncate_flag Varchar2(1) := 'N';
7261
7262 l_for_insert varchar2(1) := 'Y';
7263 l_for_party varchar2(1) := 'Y';
7264 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
7265
7266 v_party_in_sql Number := 0;
7267 v_acct_in_sql Number := 0;
7268 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
7269
7270 bparty_id Number;
7271 bacct_id Number;
7272 bpsite_id Number; -- added by spamujul for ER#8473903
7273 v_party_id Number;
7274 cid Number;
7275 val Varchar2(240) := null;
7276
7277
7278 -- cursor to run a specific block
7279 CURSOR blocks_csr(c_block_id IN NUMBER) IS
7280 SELECT block_id,
7281 sql_stmnt,
7282 currency_code
7283 FROM csc_prof_blocks_b
7284 WHERE block_id = c_block_id
7285 AND block_level in( 'CONTACT','EMPLOYEE','SITE') -- 'Included 'SITE' by spamujul for ER#8473903
7286 AND (Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7287 AND Nvl(end_date_active, Sysdate));
7288 -- Begin fix by spamujul for NCR ER#8473903
7289 CURSOR bpsite_csr IS
7290 SELECT party_id, party_site_id
7291 FROM hz_party_sites
7292 WHERE party_id=v_party_id
7293 AND status = 'A'
7294 AND NVL(created_by_module,'XXX') <> 'SR_ONETIME';
7295 -- End fix by spamujul for NCR ER#8473903
7296 BEGIN
7297 -- Loop through the given block_id for party level
7298 OPEN blocks_csr(p_block_id);
7299 FETCH blocks_csr
7300 INTO v_blk_id,
7301 v_sql_stmt,
7302 v_curr_code;
7303 IF blocks_csr%found THEN
7304 v_psite_in_sql := INSTR(lower( v_sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903
7305 Evaluate_One_Block(v_truncate_flag,
7306 v_blk_id,
7307 p_party_id,
7308 null,
7309 NULL, -- added by spamujul for ER#8473903
7310 v_sql_stmt,
7311 v_curr_code,
7312 p_up_total,
7313 p_ip_total,
7314 p_ua_total,
7315 p_ia_total,
7316 p_us_total,-- added by spamujul for ER#8473903
7317 p_is_total,-- added by spamujul for ER#8473903
7318 NULL );
7319 -- check if there are still records to be inserted
7320 IF p_ip_total <> 0 THEN
7321 l_for_insert := 'Y';
7322 l_for_party := 'Y';
7323 l_for_psite := 'N' ; -- added by spamujul for ER#8473903
7324 Insert_Update_Block_Results(p_ip_total,
7325 l_for_insert,
7326 l_for_party
7327 ,l_for_psite -- Added by spamujul for ER#8473903
7328 );
7329 p_ip_total :=0;
7330 END IF;
7331 -- check if there are still records to be updated
7332 IF p_up_total <> 0 THEN
7333 l_for_insert := 'N';
7334 l_for_party := 'Y';
7335 l_for_psite := 'N' ; -- added by spamujul for ER#8473903
7336 Insert_Update_Block_Results(p_up_total,
7337 l_for_insert,
7338 l_for_party
7339 ,l_for_psite -- Added by spamujul for ER#8473903
7340 );
7341 p_up_total :=0;
7342 END IF;
7343 END IF;
7344 -- Begin fix by spamujul for ER#8473903
7345 -- Begin fix by spamujul for NCR ER# 8473903
7346 Begin
7347 bparty_id :=0;
7348 IF (v_psite_in_sql <> 0) THEN
7349 cid := dbms_sql.open_cursor;
7350 dbms_sql.parse(cid, v_sql_stmt, dbms_sql.native);
7351 dbms_sql.define_column(cid, 1, val, 240);
7352 v_party_id := p_party_id;
7353 OPEN bpsite_csr;
7354 LOOP
7355 FETCH bpsite_csr
7356 INTO bparty_id, bpsite_id;
7357 EXIT WHEN bpsite_csr%notfound;
7358 Evaluate_One_Block(V_truncate_flag,
7359 v_blk_id,
7360 bparty_id,
7361 NULL,
7362 bpsite_id,
7363 v_sql_stmt,
7364 v_curr_code,
7365 p_up_total,
7366 p_ip_total,
7367 p_ua_total,
7368 p_ia_total,
7369 p_us_total,
7370 p_is_total
7371 ,cid);
7372 END LOOP;
7373 CLOSE bpsite_csr;
7374 IF (dbms_sql.is_open(cid)) THEN
7375 dbms_sql.close_cursor(cid);
7376 End if;
7377 END IF;
7378 Exception
7379 When others then
7380 IF (dbms_sql.is_open(cid)) THEN
7381 dbms_sql.close_cursor(cid);
7382 End if;
7383 set_context('Evaluate_Blocks5', v_blk_id, bparty_id,bpsite_id);
7384 g_error := sqlcode || ' ' || sqlerrm;
7385 set_context(NULL, g_error);
7386 End;
7387 IF p_is_total <> 0 THEN
7388 l_for_insert := 'Y';
7389 l_for_party := 'N';
7390 l_for_psite := 'Y';
7391 Insert_Update_Block_Results(p_is_total,
7392 l_for_insert,
7393 l_for_party
7394 ,l_for_psite
7395 );
7396 p_is_total :=0;
7397 END IF;
7398 IF p_us_total <> 0 THEN
7399 l_for_insert := 'N';
7400 l_for_party := 'N';
7401 l_for_psite := 'Y';
7402 Insert_Update_Block_Results (p_us_total,
7403 l_for_insert,
7404 l_for_party
7405 ,l_for_psite
7406 );
7407 p_us_total :=0;
7408 END IF;
7409 -- End fix by spamujul for ER#8473903
7410 CLOSE blocks_csr;
7411 EXCEPTION
7412 WHEN OTHERS THEN
7413 IF (blocks_csr%isopen) THEN
7414 CLOSE blocks_csr;
7415 END IF;
7416 set_context('Evaluate_Blocks5',
7417 v_blk_id,
7418 p_party_id,
7419 p_psite_id, -- added by spamujul for ER#8473903
7420 null);
7421 g_error := sqlcode || ' ' || sqlerrm;
7422 set_context(NULL, g_error);
7423 END Evaluate_Blocks5;
7424
7425 PROCEDURE Evaluate_Blocks_Rel (p_up_total IN OUT NOCOPY NUMBER ,
7426 p_ip_total IN OUT NOCOPY NUMBER ,
7427 p_ua_total IN OUT NOCOPY NUMBER ,
7428 p_ia_total IN OUT NOCOPY NUMBER ,
7429 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
7430 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
7431 p_group_id IN NUMBER DEFAULT NULL,
7432 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
7433 p_rule_only IN VARCHAR2 DEFAULT NULL
7434 ) IS
7435
7436 truncate_flag Varchar2(1) := 'N';
7437 l_for_insert varchar2(1) := 'Y';
7438 l_for_party varchar2(1) := 'Y';
7439 l_for_psite Varchar2(1) := 'N'; -- Added by spamujul for ER#8473903
7440 v_party_in_sql Number := 0;
7441 v_acct_in_sql Number := 0;
7442 v_psite_in_sql Number := 0; -- Added by spamujul for ER#8473903
7443 v_party_id Number;
7444 v_block_id Number;
7445 bpsite_id Number := 0 ; -- Added by spamujul for ER#8473903
7446 bparty_id Number := 0; -- Added by spamujul for ER#8473903
7447
7448 v_block_curvar blocks_curtype;
7449 v_rec_var r_blk_rectype;
7450
7451 CURSOR relparty_csr IS
7452 SELECT party_id
7453 FROM hz_parties
7454 WHERE status='A'
7455 AND PARTY_TYPE = 'PARTY_RELATIONSHIP';
7456 -- Begin fix by spamujul for ER#8473903
7457 CURSOR bpsite_csr IS
7458 SELECT party_id,
7459 party_site_id
7460 FROM HZ_PARTY_SITES
7461 WHERE party_id = v_party_id
7462 AND status ='A'
7463 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
7464 -- End fix by spamujul for ER#8473903
7465
7466 cid number;
7467 val VARCHAR2(240) := null;
7468
7469 BEGIN
7470 BEGIN
7471 IF p_group_id IS NULL THEN
7472 IF p_no_batch_sql = 'Y' THEN
7473 OPEN v_block_curvar FOR
7474 SELECT block_id,
7475 sql_stmnt,
7476 currency_code
7477 FROM csc_prof_blocks_b a
7478 WHERE EXISTS ( SELECT null
7479 FROM csc_prof_checks_b b
7480 WHERE b.select_block_id = a.block_id
7481 AND b.select_type = 'B'
7482 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
7483 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
7484 AND Nvl(end_date_active, SYSDATE)
7485 AND batch_sql_stmnt IS NULL
7486 AND block_level IN ( 'CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7487 ELSIF p_rule_only = 'Y' THEN
7488 OPEN v_block_curvar FOR
7489 SELECT block_id,
7490 sql_stmnt,
7491 currency_code
7492 FROM csc_prof_blocks_b a
7493 WHERE exists ( SELECT b.block_id
7494 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
7495 WHERE (b.block_id = a.block_id
7496 or b.expr_to_block_id = a.block_id)
7497 AND c.select_type = 'T'
7498 AND b.check_id = c.check_id)
7499 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7500 AND Nvl(end_date_active, Sysdate)
7501 AND block_level IN ('CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7502 ELSE
7503 OPEN v_block_curvar FOR
7504 SELECT block_id,
7505 sql_stmnt,
7506 currency_code
7507 FROM csc_prof_blocks_b a
7508 WHERE exists ( Select b.block_id
7509 From csc_prof_check_rules_b b
7510 where b.block_id = a.block_id
7511 or b.expr_to_block_id = a.block_id)
7512 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7513 AND Nvl(end_date_active, Sysdate)
7514 AND block_level IN ('CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7515 END IF;
7516 ELSE
7517 IF p_no_batch_sql = 'Y' THEN
7518 OPEN v_block_curvar FOR
7519 SELECT block_id,
7520 sql_stmnt,
7521 currency_code
7522 FROM csc_prof_blocks_b a
7523 WHERE EXISTS ( SELECT null
7524 FROM csc_prof_checks_b b
7525 WHERE b.select_block_id = a.block_id
7526 AND b.select_type = 'B'
7527 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
7528 WHERE group_id = p_group_id))
7529 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
7530 AND Nvl(end_date_active, SYSDATE)
7531 AND batch_sql_stmnt IS NULL
7532 AND block_level IN ( 'CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7533 ELSIF p_rule_only = 'Y' THEN
7534 OPEN v_block_curvar FOR
7535 SELECT block_id,
7536 sql_stmnt,
7537 currency_code
7538 FROM csc_prof_blocks_b a
7539 WHERE EXISTS ( SELECT b.block_id
7540 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
7541 WHERE (b.block_id = a.block_id
7542 OR b.expr_to_block_id = a.block_id)
7543 AND c.select_type = 'T'
7544 AND b.check_id = c.check_id
7545 AND b.check_id IN (SELECT check_id from csc_prof_group_checks
7546 WHERE group_id = p_group_id))
7547 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7548 AND Nvl(end_date_active, Sysdate)
7549 AND block_level IN ('CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7550 ELSE
7551 OPEN v_block_curvar FOR
7552 SELECT block_id,
7553 sql_stmnt,
7554 currency_code
7555 FROM csc_prof_blocks_b a
7556 WHERE EXISTS ( SELECT b.block_id
7557 FROM csc_prof_check_rules_b b
7558 WHERE (b.block_id = a.block_id
7559 or b.expr_to_block_id = a.block_id)
7560 AND check_id IN (Select check_id from csc_prof_group_checks
7561 where group_id = p_group_id))
7562 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7563 AND Nvl(end_date_active, Sysdate)
7564 AND block_level IN ('CONTACT','SITE'); -- Included 'SITE' by spamujul for ER#8473903
7565 END IF;
7566 END IF;
7567 LOOP
7568 FETCH v_block_curvar
7569 INTO v_rec_var;
7570 EXIT WHEN v_block_curvar%notfound;
7571 v_party_in_sql := INSTR(lower(v_rec_var.sql_stmnt),':party_id',1);
7572 v_psite_in_sql := INSTR(lower(v_rec_var.sql_stmnt),':party_site_id',1);
7573 v_block_id := v_rec_var.block_id;
7574 BEGIN
7575 cid := dbms_sql.open_cursor;
7576 dbms_sql.parse(cid, v_rec_var.sql_stmnt, dbms_sql.native);
7577 dbms_sql.define_column(cid, 1, val, 240);
7578 OPEN relparty_csr;
7579 LOOP
7580 FETCH relparty_csr
7581 INTO v_party_id;
7582 EXIT WHEN relparty_csr%notfound;
7583 Evaluate_One_Block(truncate_flag,
7584 v_block_id,
7585 v_party_id,
7586 null,
7587 NULL, -- added by spamujul for ER#8473903
7588 v_rec_var.sql_stmnt,
7589 v_rec_var.currency,
7590 p_up_total,
7591 p_ip_total,
7592 p_ua_total,
7593 p_ia_total,
7594 p_us_total,-- added by spamujul for ER#8473903
7595 p_is_total,-- added by spamujul for ER#8473903
7596 cid);
7597 -- Begin fix by spamujul for ER#8473903
7598 Begin
7599 bparty_id :=0;
7600 IF (v_psite_in_sql <> 0) THEN
7601 cid := dbms_sql.open_cursor;
7602 dbms_sql.parse(cid, v_rec_var.sql_stmnt, dbms_sql.native);
7603 dbms_sql.define_column(cid, 1, val, 240);
7604 OPEN bpsite_csr;
7605 LOOP
7606 FETCH bpsite_csr
7607 INTO bparty_id, bpsite_id;
7608 EXIT WHEN bpsite_csr%notfound;
7609 Evaluate_One_Block(truncate_flag,
7610 v_block_id,
7611 bparty_id,
7612 NULL,
7613 bpsite_id,
7614 v_rec_var.sql_stmnt,
7615 v_rec_var.currency,
7616 p_up_total,
7617 p_ip_total,
7618 p_ua_total,
7619 p_ia_total,
7620 p_us_total,
7621 p_is_total
7622 ,cid);
7623 END LOOP;
7624 CLOSE bpsite_csr;
7625 IF (dbms_sql.is_open(cid)) THEN
7626 dbms_sql.close_cursor(cid);
7627 End if;
7628 END IF;
7629 Exception
7630 When others then
7631 IF (dbms_sql.is_open(cid)) THEN
7632 dbms_sql.close_cursor(cid);
7633 End if;
7634 set_context('Evaluate_Blocks_rel', v_block_id, bparty_id,bpsite_id);
7635 g_error := sqlcode || ' ' || sqlerrm;
7636 set_context(NULL, g_error);
7637 End;
7638 IF p_is_total <> 0 THEN
7639 l_for_insert := 'Y';
7640 l_for_party := 'N';
7641 l_for_psite := 'Y';
7642 Insert_Update_Block_Results(p_is_total,
7643 l_for_insert,
7644 l_for_party
7645 ,l_for_psite
7646 );
7647 p_is_total :=0;
7648 END IF;
7649 IF p_us_total <> 0 THEN
7650 l_for_insert := 'N';
7651 l_for_party := 'N';
7652 l_for_psite := 'Y';
7653 Insert_Update_Block_Results (p_us_total,
7654 l_for_insert,
7655 l_for_party
7656 ,l_for_psite
7657 );
7658 p_us_total :=0;
7659 END IF;
7660 -- End fix by spamujul for ER#8473903
7661 END LOOP;
7662 CLOSE relparty_csr;
7663 IF (dbms_sql.is_open(cid)) THEN
7664 dbms_sql.close_cursor(cid);
7665 END IF;
7666 EXCEPTION
7667 WHEN others THEN
7668 IF (dbms_sql.is_open(cid)) THEN
7669 dbms_sql.close_cursor(cid);
7670 END IF;
7671 IF (bpsite_csr%isopen) THEN
7672 CLOSE bpsite_csr;
7673 END IF;
7674 set_context('Evaluate_Blocks_Rel', v_block_id, v_party_id);
7675 g_error := sqlcode || ' ' || sqlerrm;
7676 set_context(NULL, g_error);
7677 END;
7678 END LOOP;
7679 CLOSE v_block_curvar;
7680 -- check if there are still records to be inserted
7681 IF p_ip_total <> 0 THEN
7682 l_for_insert := 'Y';
7683 l_for_party := 'Y';
7684 l_for_psite :='N' ; -- Added by spamujul for ER#8473903
7685 Insert_Update_Block_Results (p_ip_total,
7686 l_for_insert,
7687 l_for_party
7688 ,l_for_psite -- Added by spamujul for ER#8473903
7689 );
7690 p_ip_total :=0;
7691 END IF;
7692 -- check if there are still records to be updated
7693 IF p_up_total <> 0 THEN
7694 l_for_insert := 'N';
7695 l_for_party := 'Y';
7696 l_for_psite :='N'; -- Added by spamujul for ER#8473903
7697 Insert_Update_Block_Results(p_up_total,
7698 l_for_insert,
7699 l_for_party
7700 ,l_for_psite -- Added by spamujul for ER#8473903
7701 );
7702 p_up_total :=0;
7703 END IF;
7704 EXCEPTION
7705 WHEN OTHERS THEN
7706 IF (v_block_curvar%isopen) THEN
7707 CLOSE v_block_curvar;
7708 END IF;
7709 IF (relparty_csr%isopen) THEN
7710 CLOSE relparty_csr;
7711 END IF;
7712 set_context('Evaluate_Blocks_Rel', v_block_id, v_party_id);
7713 g_error := sqlcode || ' ' || sqlerrm;
7714 set_context(NULL, g_error);
7715 table_delete;
7716 RAISE;
7717 END;
7718 END Evaluate_Blocks_Rel;
7719
7720 PROCEDURE Evaluate_Checks_Rel ( errbuf OUT NOCOPY VARCHAR2,
7721 retcode OUT NOCOPY NUMBER,
7722 p_group_id IN NUMBER DEFAULT NULL,
7723 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
7724 p_rule_only IN VARCHAR2 DEFAULT NULL ) IS
7725
7726 chk_id Number;
7727 chk_name Varchar2(240);
7728 cparty_id Number;
7729 cpsite_id Number; -- added by spamujul for ER#8473903
7730 sel_type Varchar2(3);
7731 sel_blk_id Number;
7732 data_type Varchar2(90);
7733 fmt_mask Varchar2(90);
7734 rule Varchar2(32767);
7735 chk_u_l_flag Varchar2(3);
7736 Thd_grade Varchar2(9);
7737 truncate_flag Varchar2(1) := 'N';
7738 acct_flag Varchar2(1);
7739 blk_id Number := null;
7740 blk_name Varchar2(240) := null;
7741 sql_stmt Varchar2(2000) := null;
7742 curr_code Varchar2(15) := null;
7743 v_party_in_sql Number := 0;
7744 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
7745 l_for_insert varchar2(1) := 'Y';
7746 l_for_party varchar2(1) := 'Y';
7747 l_for_psite Varchar2(1) := 'N'; -- added by spamujul for ER#8473903
7748 l_up_total Number := 0;
7749 l_ip_total Number := 0;
7750 l_ua_total Number := 0;
7751 l_ia_total Number := 0;
7752 l_us_total Number := 0; -- added by spamujul for ER#8473903
7753 l_is_total Number := 0; -- added by spamujul for ER#8473903
7754 v_party_id Number;
7755 v_check_level Varchar2(10);
7756 v_checks_curvar checks_curtype;
7757 v_rec_var r_chk_rectype;
7758
7759 CURSOR block_csr IS
7760 SELECT block_id, sql_stmnt, currency_code
7761 FROM csc_prof_blocks_b a
7762 WHERE a.block_id = sel_blk_id;
7763
7764 CURSOR crelparty_csr IS
7765 SELECT party_id
7766 FROM hz_parties
7767 WHERE status='A'
7768 AND party_type = 'PARTY_RELATIONSHIP';
7769 -- Begin fix by spamujul for ER#8473903
7770 CURSOR cpsite_csr IS
7771 SELECT party_id,
7772 party_site_id
7773 FROM HZ_PARTY_SITES
7774 WHERE party_id = v_party_id
7775 AND status ='A'
7776 AND NVL(created_by_module,'XXX') <>'SR_ONETIME';
7777 -- End fix by spamujul for ER#8473903
7778
7779 cid number;
7780 val VARCHAR2(240) := null;
7781
7782 BEGIN
7783 l_ip_total := 0;
7784 l_up_total := 0;
7785 l_ia_total := 0;
7786 l_ua_total := 0;
7787 l_us_total := 0; -- added by spamujul for ER#8473903
7788 l_is_total := 0; -- added by spamujul for ER#8473903
7789 IF p_group_id IS NULL THEN
7790 IF p_no_batch_sql = 'Y' THEN
7791 OPEN v_checks_curvar FOR
7792 SELECT check_id,
7793 select_type,
7794 select_block_id,
7795 data_type,
7796 format_mask,
7797 check_upper_lower_flag,
7798 threshold_grade, check_level
7799 FROM csc_prof_checks_b a
7800 WHERE check_id IN (SELECT check_id
7801 FROM csc_prof_group_checks)
7802 AND select_type = 'B'
7803 AND check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903
7804 AND EXISTS (SELECT null
7805 FROM csc_prof_blocks_b b
7806 WHERE a.select_block_id = b.block_id
7807 AND b.batch_sql_stmnt IS NULL)
7808 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
7809 AND Nvl(end_date_active, SYSDATE);
7810 ELSIF p_rule_only = 'Y' THEN
7811 OPEN v_checks_curvar FOR
7812 SELECT check_id,
7813 select_type,
7814 select_block_id,
7815 data_type,
7816 format_mask,
7817 check_upper_lower_flag,
7818 threshold_grade,
7819 check_level
7820 FROM csc_prof_checks_b
7821 WHERE check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903
7822 AND select_type = 'T'
7823 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7824 AND Nvl(end_date_active, Sysdate);
7825 ELSE
7826 OPEN v_checks_curvar FOR
7827 SELECT check_id,
7828 select_type,
7829 select_block_id,
7830 data_type,
7831 format_mask,
7832 check_upper_lower_flag,
7833 threshold_grade,
7834 check_level
7835 FROM csc_prof_checks_b
7836 WHERE check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903
7837 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7838 AND Nvl(end_date_active, Sysdate);
7839 END IF;
7840 ELSE
7841 IF p_no_batch_sql = 'Y' THEN
7842 OPEN v_checks_curvar FOR
7843 SELECT check_id,
7844 select_type,
7845 select_block_id,
7846 data_type,
7847 format_mask,
7848 check_upper_lower_flag,
7849 threshold_grade,
7850 check_level
7851 FROM csc_prof_checks_b a
7852 WHERE check_id IN (SELECT check_id
7853 FROM csc_prof_group_checks
7854 WHERE group_id = p_group_id)
7855 AND select_type = 'B'
7856 AND check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903'
7857 AND EXISTS (SELECT null
7858 FROM csc_prof_blocks_b b
7859 WHERE a.select_block_id = b.block_id
7860 AND b.batch_sql_stmnt IS NULL)
7861 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
7862 AND Nvl(end_date_active, SYSDATE);
7863 ELSIF p_rule_only = 'Y' THEN
7864 OPEN v_checks_curvar FOR
7865 SELECT check_id,
7866 select_type,
7867 select_block_id,
7868 data_type,
7869 format_mask,
7870 check_upper_lower_flag,
7871 threshold_grade,
7872 check_level
7873 FROM csc_prof_checks_b
7874 WHERE check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903'
7875 AND select_type = 'T'
7876 AND check_id in (select check_id
7877 from csc_prof_group_checks
7878 where group_id = p_group_id)
7879 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7880 AND Nvl(end_date_active, Sysdate);
7881 ELSE
7882 OPEN v_checks_curvar FOR
7883 SELECT check_id,
7884 select_type,
7885 select_block_id,
7886 data_type,
7887 format_mask,
7888 check_upper_lower_flag,
7889 threshold_grade,
7890 check_level
7891 FROM csc_prof_checks_b
7892 WHERE check_level IN ( 'CONTACT','SITE') -- Included by spamujul for ER#8473903'
7893 AND check_id in (select check_id from csc_prof_group_checks
7894 where group_id = p_group_id)
7895 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
7896 AND Nvl(end_date_active, Sysdate);
7897 END IF;
7898 END IF;
7899 LOOP
7900 FETCH v_checks_curvar INTO v_rec_var;
7901 sel_type := v_rec_var.select_type;
7902 chk_id := v_rec_var.check_id;
7903 sel_blk_id := v_rec_var.select_block_id;
7904 v_check_level:= v_rec_var.check_level;
7905 data_type:=v_rec_var.data_type;
7906 fmt_mask:=v_rec_var.format_mask;
7907 chk_u_l_flag:= v_rec_var.check_upper_lower_flag;
7908 thd_grade := v_rec_var.threshold_grade;
7909 EXIT WHEN v_checks_curvar%notfound;
7910 IF (sel_type = 'T') THEN
7911 build_rule('N',chk_id,v_check_level, rule);
7912 ELSIF (sel_type = 'B') THEN
7913 Open block_csr;
7914 Fetch block_csr
7915 INTO blk_id,
7916 sql_stmt,
7917 curr_code;
7918 Close block_csr;
7919 IF sql_stmt IS NOT NULL Then
7920 v_party_in_sql := INSTR(lower(sql_stmt),':party_id',1);
7921 v_psite_in_sql := INSTR(lower(sql_stmt),':party_site_id',1); -- Added by spamujul for ER#8473903'
7922 Else
7923 v_party_in_sql := 0;
7924 v_psite_in_sql := 0; -- Added by spamujul for ER#8473903'
7925 End if;
7926 END IF;
7927
7928 BEGIN
7929 IF ((sel_type='B' ) OR (sel_type='T') ) THEN
7930 cid := dbms_sql.open_cursor;
7931 IF (sel_type = 'B') THEN
7932 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
7933 ELSIF (sel_type = 'T') then
7934 dbms_sql.parse(cid, rule, dbms_sql.native);
7935 END IF;
7936 dbms_sql.define_column(cid,1,val,240);
7937 OPEN crelparty_csr;
7938 LOOP
7939 FETCH crelparty_csr INTO cparty_id;
7940 EXIT WHEN crelparty_csr%notfound;
7941 Evaluate_One_Check(truncate_flag,
7942 chk_id,
7943 cparty_id,
7944 null,
7945 NULL, -- added by spamujul for ER#8473903
7946 v_check_level,
7947 sel_type,
7948 sel_blk_id,
7949 data_type,
7950 fmt_mask,
7951 chk_u_l_flag,
7952 Thd_grade,
7953 rule,
7954 blk_id,
7955 sql_stmt,
7956 curr_code,
7957 l_up_total,
7958 l_ip_total,
7959 l_ua_total,
7960 l_ia_total ,
7961 l_us_total, -- added by spamujul for ER#8473903
7962 l_is_total, -- added by spamujul for ER#8473903
7963 cid
7964 );
7965 -- Begin fix by spamujul for ER#8473903
7966 Begin
7967 v_party_id:=cparty_id;
7968 IF ((sel_type='B' ) OR (sel_type='T') ) AND v_check_level='SITE' THEN
7969 IF ((v_psite_in_sql = 0) AND sel_type = 'B') AND v_check_level='SITE' THEN
7970 NULL;
7971 ELSE
7972 cid := dbms_sql.open_cursor;
7973 IF (sel_type = 'B') THEN
7974 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
7975 ELSIF (sel_type = 'T') THEN
7976 dbms_sql.parse(cid, rule, dbms_sql.native);
7977 END IF;
7978 dbms_sql.define_column(cid,1,val,240);
7979 OPEN cpsite_csr;
7980 LOOP
7981 FETCH cpsite_csr
7982 INTO cparty_id,
7983 cpsite_id;
7984 EXIT WHEN cpsite_csr%notfound;
7985 Evaluate_One_Check(truncate_flag,
7986 chk_id,
7987 cparty_id,
7988 NULL, -- For site level profile check, account parameter should be null
7989 cpsite_id,
7990 v_check_level,
7991 sel_type,
7992 sel_blk_id,
7993 data_type,
7994 fmt_mask,
7995 chk_u_l_flag,
7996 Thd_grade,
7997 rule,
7998 blk_id,
7999 sql_stmt,
8000 curr_code,
8001 l_up_total,
8002 l_ip_total,
8003 l_ua_total,
8004 l_ia_total ,
8005 l_us_total,
8006 l_is_total,
8007 cid);
8008 END LOOP;
8009 CLOSE cpsite_csr;
8010 IF (dbms_sql.is_open(cid)) THEN
8011 dbms_sql.close_cursor(cid);
8012 end if;
8013 END IF;
8014 END IF;
8015 Exception
8016 When others then
8017 IF (dbms_sql.is_open(cid)) THEN
8018 dbms_sql.close_cursor(cid);
8019 end if;
8020 set_context('Evaluate_Checks_Rel',
8021 'chk_id=>'||to_char(chk_id),
8022 'party_id=>'||to_char(cparty_id),
8023 'account_id=>'|| NULL
8024 ,'party_site_id =>'||to_char(cpsite_id) -- added by spamujul for ER#8473903
8025 );
8026 g_error := sqlcode || ' ' || sqlerrm;
8027 set_context(NULL, g_error);
8028 End;
8029 -- End fix by spamujul for ER#8473903
8030 END LOOP;
8031 CLOSE crelparty_csr;
8032 -- Begin fix by spamujul for ER#8473903
8033 IF l_is_total <> 0 THEN
8034 l_for_insert := 'Y';
8035 l_for_party := 'N';
8036 l_for_psite := 'Y';-- added by spamujul for ER#8473903
8037 Insert_Update_Check_Results(l_is_total,
8038 l_for_insert,
8039 l_for_party
8040 ,l_for_psite -- added by spamujul for ER#8473903
8041 );
8042 l_is_total :=0;
8043 END IF;
8044 IF l_us_total <> 0 THEN
8045 l_for_insert := 'N';
8046 l_for_party := 'N';
8047 l_for_psite := 'Y';-- added by spamujul for ER#8473903
8048 Insert_Update_Check_Results(l_us_total,
8049 l_for_insert,
8050 l_for_party
8051 ,l_for_psite -- added by spamujul for ER#8473903
8052 );
8053 l_us_total :=0;
8054 END IF;
8055 -- End fix by spamujul for ER#8473903
8056 IF (dbms_sql.is_open(cid)) THEN
8057 dbms_sql.close_cursor(cid);
8058 END IF;
8059 END IF;
8060 Exception
8061 When others then
8062 IF (dbms_sql.is_open(cid)) THEN
8063 dbms_sql.close_cursor(cid);
8064 end if;
8065 set_context('Evaluate_Checks_Rel',
8066 'chk_id =>'||to_char(chk_id),
8067 'party_id =>'||to_char(cparty_id),
8068 'account_id =>'||NULL,
8069 'party_site_id =>'||NULL -- added by spamujul for ER#8473903
8070 );
8071 g_error := sqlcode || ' ' || sqlerrm;
8072 set_context(NULL, g_error);
8073 End;
8074 END LOOP;
8075 CLOSE v_checks_curvar;
8076 -- check if there are still records to be inserted
8077 IF l_ip_total <> 0 THEN
8078 l_for_insert := 'Y';
8079 l_for_party := 'Y';
8080 l_for_psite := 'N';-- added by spamujul for ER#8473903
8081 Insert_Update_Check_Results(l_ip_total,
8082 l_for_insert,
8083 l_for_party
8084 ,l_for_psite -- added by spamujul for ER#8473903
8085 );
8086 l_ip_total :=0;
8087 END IF;
8088 -- check if there are still records to be updated
8089 IF l_up_total <> 0 THEN
8090 l_for_insert := 'N';
8091 l_for_party := 'Y';
8092 l_for_psite := 'N';-- added by spamujul for ER#8473903
8093 Insert_Update_Check_Results (l_up_total,
8094 l_for_insert,
8095 l_for_party
8096 ,l_for_psite -- added by spamujul for ER#8473903
8097 );
8098 l_up_total :=0;
8099 END IF;
8100
8101 COMMIT;
8102
8103 -- Return 0 for successful completion, 1 for warnings, 2 for error
8104 IF (error_flag) THEN
8105 errbuf := Sqlerrm;
8106 retcode := 2;
8107 ELSIF (warning_msg <> '') THEN
8108 errbuf := warning_msg;
8109 retcode := 1;
8110 ELSE
8111 errbuf := '';
8112 retcode := 0;
8113 END IF;
8114
8115 IF (debug) THEN
8116 fnd_file.close;
8117 END IF;
8118
8119 EXCEPTION
8120 WHEN OTHERS THEN
8121 ROLLBACK;
8122 IF (v_checks_curvar%isopen) THEN
8123 CLOSE v_checks_curvar;
8124 END IF;
8125 IF (crelparty_csr%isopen) THEN
8126 CLOSE crelparty_csr;
8127 END IF;
8128
8129 IF (debug) THEN
8130 fnd_file.close;
8131 END IF;
8132 errbuf := Sqlerrm;
8133 retcode := 2;
8134
8135 g_error := sqlcode || ' ' || sqlerrm;
8136 fnd_file.put_line(fnd_file.log , g_error);
8137
8138 END Evaluate_Checks_Rel;
8139
8140 /* R12 Employee HelpDesk Modifications */
8141
8142 PROCEDURE Evaluate_Blocks_Emp( p_up_total IN OUT NOCOPY NUMBER ,
8143 p_ip_total IN OUT NOCOPY NUMBER ,
8144 p_ua_total IN OUT NOCOPY NUMBER ,
8145 p_ia_total IN OUT NOCOPY NUMBER ,
8146 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
8147 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
8148 p_group_id IN NUMBER DEFAULT NULL,
8149 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
8150 p_rule_only IN VARCHAR2 DEFAULT NULL
8151 ) IS
8152 truncate_flag Varchar2(1):= 'N';
8153 l_for_insert varchar2(1) := 'Y';
8154 l_for_party varchar2(1) := 'Y';
8155 l_for_psite Varchar2(1) := 'N'; -- Added by spamujul for ER#8473903
8156 v_employee_in_sql Number := 0;
8157 v_party_id Number;
8158 v_block_id Number;
8159 v_block_curvar blocks_curtype;
8160 v_rec_var r_blk_rectype;
8161
8162 CURSOR employee_csr IS
8163 SELECT person_id
8164 FROM per_workforce_current_x;
8165 cid number;
8166 val VARCHAR2(240) := null;
8167 BEGIN
8168 BEGIN
8169 IF p_group_id IS NULL THEN
8170 IF p_no_batch_sql = 'Y' THEN
8171 OPEN v_block_curvar FOR
8172 SELECT block_id, sql_stmnt, currency_code
8173 FROM csc_prof_blocks_b a
8174 WHERE EXISTS ( SELECT null
8175 FROM csc_prof_checks_b b
8176 WHERE b.select_block_id = a.block_id
8177 AND b.select_type = 'B'
8178 AND check_id IN (SELECT check_id FROM csc_prof_group_checks))
8179 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
8180 AND Nvl(end_date_active, SYSDATE)
8181 AND batch_sql_stmnt IS NULL
8182 AND block_level = 'EMPLOYEE';
8183 ELSIF p_rule_only = 'Y' THEN
8184 OPEN v_block_curvar FOR
8185 SELECT block_id, sql_stmnt, currency_code
8186 FROM csc_prof_blocks_b a
8187 WHERE exists ( SELECT b.block_id
8188 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
8189 WHERE (b.block_id = a.block_id
8190 or b.expr_to_block_id = a.block_id)
8191 AND c.select_type = 'T'
8192 AND b.check_id = c.check_id)
8193 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8194 AND Nvl(end_date_active, Sysdate)
8195 AND block_level ='EMPLOYEE';
8196 ELSE
8197 OPEN v_block_curvar FOR
8198 SELECT block_id, sql_stmnt, currency_code
8199 FROM csc_prof_blocks_b a
8200 WHERE exists ( Select b.block_id
8201 From csc_prof_check_rules_b b
8202 where b.block_id = a.block_id
8203 or b.expr_to_block_id = a.block_id)
8204 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8205 AND Nvl(end_date_active, Sysdate)
8206 AND block_level ='EMPLOYEE';
8207 END IF;
8208 ELSE
8209 IF p_no_batch_sql = 'Y' THEN
8210 OPEN v_block_curvar FOR
8211 SELECT block_id, sql_stmnt, currency_code
8212 FROM csc_prof_blocks_b a
8213 WHERE EXISTS ( SELECT null
8214 FROM csc_prof_checks_b b
8215 WHERE b.select_block_id = a.block_id
8216 AND b.select_type = 'B'
8217 AND check_id IN (SELECT check_id FROM csc_prof_group_checks
8218 WHERE group_id = p_group_id))
8219 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
8220 AND Nvl(end_date_active, SYSDATE)
8221 AND batch_sql_stmnt IS NULL
8222 AND block_level = 'EMPLOYEE';
8223 ELSIF p_rule_only = 'Y' THEN
8224 OPEN v_block_curvar FOR
8225 SELECT block_id, sql_stmnt, currency_code
8226 FROM csc_prof_blocks_b a
8227 WHERE EXISTS ( SELECT b.block_id
8228 FROM csc_prof_check_rules_b b, csc_prof_checks_b c
8229 WHERE (b.block_id = a.block_id
8230 OR b.expr_to_block_id = a.block_id)
8231 AND c.select_type = 'T'
8232 AND b.check_id = c.check_id
8233 AND b.check_id IN (SELECT check_id from csc_prof_group_checks
8234 WHERE group_id = p_group_id))
8235 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8236 AND Nvl(end_date_active, Sysdate)
8237 AND block_level = 'EMPLOYEE';
8238 ELSE
8239 OPEN v_block_curvar FOR
8240 SELECT block_id, sql_stmnt, currency_code
8241 FROM csc_prof_blocks_b a
8242 WHERE EXISTS ( SELECT b.block_id
8243 FROM csc_prof_check_rules_b b
8244 WHERE (b.block_id = a.block_id
8245 or b.expr_to_block_id = a.block_id)
8246 AND check_id IN (Select check_id from csc_prof_group_checks
8247 where group_id = p_group_id))
8248 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8249 AND Nvl(end_date_active, Sysdate)
8250 AND block_level ='EMPLOYEE';
8251 END IF;
8252
8253 END IF;
8254
8255 LOOP
8256 FETCH v_block_curvar INTO v_rec_var;
8257 EXIT WHEN v_block_curvar%notfound;
8258 v_employee_in_sql := INSTR(lower(v_rec_var.sql_stmnt),':employee_id',1);
8259 v_block_id := v_rec_var.block_id;
8260 BEGIN
8261 cid := dbms_sql.open_cursor;
8262 dbms_sql.parse(cid, v_rec_var.sql_stmnt, dbms_sql.native);
8263 dbms_sql.define_column(cid, 1, val, 240);
8264
8265 OPEN employee_csr;
8266 LOOP
8267 FETCH employee_csr INTO v_party_id;
8268 EXIT WHEN employee_csr%notfound;
8269
8270 Evaluate_One_Block(truncate_flag,
8271 v_block_id,
8272 v_party_id,
8273 null,
8274 NULL,-- added by spamujul for ER#8473903
8275 v_rec_var.sql_stmnt,
8276 v_rec_var.currency,
8277 p_up_total,
8278 p_ip_total,
8279 p_ua_total,
8280 p_ia_total,
8281 p_us_total, -- added by spamujul for ER#8473903
8282 p_is_total, -- added by spamujul for ER#8473903
8283 cid);
8284 END LOOP;
8285 CLOSE employee_csr;
8286
8287 IF (dbms_sql.is_open(cid)) THEN
8288 dbms_sql.close_cursor(cid);
8289 END IF;
8290
8291 EXCEPTION
8292 WHEN others THEN
8293 IF (dbms_sql.is_open(cid)) THEN
8294 dbms_sql.close_cursor(cid);
8295 END IF;
8296
8297 set_context('Evaluate_Blocks_Emp', v_block_id, v_party_id);
8298 g_error := sqlcode || ' ' || sqlerrm;
8299 set_context(NULL, g_error);
8300 END;
8301
8302 END LOOP;
8303 CLOSE v_block_curvar;
8304
8305 -- check if there are still records to be inserted
8306 IF p_ip_total <> 0 THEN
8307 l_for_insert := 'Y';
8308 l_for_party := 'Y';
8309 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8310 Insert_Update_Block_Results(p_ip_total,
8311 l_for_insert,
8312 l_for_party
8313 ,l_for_psite -- Added by spamujul for ER#8473903
8314 );
8315 p_ip_total :=0;
8316 END IF;
8317 -- check if there are still records to be updated
8318 IF p_up_total <> 0 THEN
8319 l_for_insert := 'N';
8320 l_for_party := 'Y';
8321 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8322 Insert_Update_Block_Results(p_up_total,
8323 l_for_insert,
8324 l_for_party
8325 ,l_for_psite -- Added by spamujul for ER#8473903
8326 );
8327 p_up_total :=0;
8328 END IF;
8329
8330
8331 EXCEPTION
8332 WHEN OTHERS THEN
8333 IF (v_block_curvar%isopen) THEN
8334 CLOSE v_block_curvar;
8335 END IF;
8336 IF (employee_csr%isopen) THEN
8337 CLOSE employee_csr;
8338 END IF;
8339
8340 set_context('Evaluate_Blocks_Emp', v_block_id, v_party_id);
8341 g_error := sqlcode || ' ' || sqlerrm;
8342 set_context(NULL, g_error);
8343 table_delete;
8344 RAISE;
8345 END;
8346
8347 END Evaluate_Blocks_Emp;
8348
8349 PROCEDURE Evaluate_Checks_Emp ( errbuf OUT NOCOPY VARCHAR2,
8350 retcode OUT NOCOPY NUMBER,
8351 p_group_id IN NUMBER DEFAULT NULL,
8352 p_no_batch_sql IN VARCHAR2 DEFAULT NULL,
8353 p_rule_only IN VARCHAR2 DEFAULT NULL ) IS
8354 chk_id Number;
8355 chk_name Varchar2(240);
8356 cparty_id Number;
8357 sel_type Varchar2(3);
8358 sel_blk_id Number;
8359 data_type Varchar2(90);
8360 fmt_mask Varchar2(90);
8361 rule Varchar2(32767);
8362 chk_u_l_flag Varchar2(3);
8363 Thd_grade Varchar2(9);
8364 truncate_flag Varchar2(1) := 'N';
8365 acct_flag Varchar2(1);
8366 blk_id Number := null;
8367 blk_name Varchar2(240) := null;
8368 sql_stmt Varchar2(2000) := null;
8369 curr_code Varchar2(15) := null;
8370 v_employee_in_sql Number :=0;
8371 l_for_insert varchar2(1) := 'Y';
8372 l_for_party varchar2(1) := 'Y';
8373 l_for_psite Varchar2(1) := 'N'; -- Added by spamujul for ER#8473903
8374 l_up_total Number := 0;
8375 l_ip_total Number := 0;
8376 l_ua_total Number := 0;
8377 l_ia_total Number := 0;
8378 l_us_total Number := 0; -- added by spamujul for ER#8473903
8379 l_is_total Number := 0; -- added by spamujul for ER#8473903
8380 v_party_id Number;
8381 v_check_level Varchar2(10);
8382 v_checks_curvar checks_curtype;
8383 v_rec_var r_chk_rectype;
8384
8385 CURSOR block_csr IS
8386 SELECT block_id, sql_stmnt, currency_code
8387 FROM csc_prof_blocks_b a
8388 WHERE a.block_id = sel_blk_id;
8389
8390 CURSOR employee_csr IS
8391 SELECT person_id
8392 FROM per_workforce_current_x;
8393
8394
8395 cid number;
8396 val VARCHAR2(240) := null;
8397
8398 BEGIN
8399 l_ip_total := 0;
8400 l_up_total := 0;
8401 l_ia_total := 0;
8402 l_ua_total := 0;
8403 l_us_total := 0; -- added by spamujul for ER#8473903
8404 l_is_total := 0; -- added by spamujul for ER#8473903
8405 IF p_group_id IS NULL THEN
8406 IF p_no_batch_sql = 'Y' THEN
8407 OPEN v_checks_curvar FOR
8408 SELECT check_id, select_type, select_block_id,
8409 data_type, format_mask, check_upper_lower_flag,
8410 threshold_grade, check_level
8411 FROM csc_prof_checks_b a
8412 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks)
8413 AND select_type = 'B'
8414 AND check_level = 'EMPLOYEE'
8415 AND EXISTS (SELECT null
8416 FROM csc_prof_blocks_b b
8417 WHERE a.select_block_id = b.block_id
8418 AND b.batch_sql_stmnt IS NULL)
8419 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
8420 AND Nvl(end_date_active, SYSDATE);
8421 ELSIF p_rule_only = 'Y' THEN
8422 OPEN v_checks_curvar FOR
8423 SELECT check_id, select_type, select_block_id,
8424 data_type, format_mask,check_upper_lower_flag,threshold_grade,
8425 check_level
8426 FROM csc_prof_checks_b
8427 WHERE check_level ='EMPLOYEE'
8428 AND select_type = 'T'
8429 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8430 AND Nvl(end_date_active, Sysdate);
8431 ELSE
8432 OPEN v_checks_curvar FOR
8433 SELECT check_id, select_type, select_block_id,
8434 data_type, format_mask,check_upper_lower_flag,threshold_grade,
8435 check_level
8436 FROM csc_prof_checks_b
8437 WHERE check_level ='EMPLOYEE'
8438 AND Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8439 AND Nvl(end_date_active, Sysdate);
8440 END IF;
8441 ELSE
8442 IF p_no_batch_sql = 'Y' THEN
8443 OPEN v_checks_curvar FOR
8444 SELECT check_id, select_type, select_block_id,
8445 data_type, format_mask,check_upper_lower_flag,
8446 threshold_grade, check_level
8447 FROM csc_prof_checks_b a
8448 WHERE check_id IN (SELECT check_id FROM csc_prof_group_checks
8449 WHERE group_id = p_group_id)
8450 AND select_type = 'B'
8451 AND check_level = 'EMPLOYEE'
8452 AND EXISTS (SELECT null
8453 FROM csc_prof_blocks_b b
8454 WHERE a.select_block_id = b.block_id
8455 AND b.batch_sql_stmnt IS NULL)
8456 AND SYSDATE BETWEEN Nvl(start_date_active, SYSDATE)
8457 AND Nvl(end_date_active, SYSDATE);
8458 ELSIF p_rule_only = 'Y' THEN
8459 OPEN v_checks_curvar FOR
8460 SELECT check_id, select_type, select_block_id,
8461 data_type, format_mask,check_upper_lower_flag,threshold_grade,
8462 check_level
8463 FROM csc_prof_checks_b
8464 WHERE check_level = 'EMPLOYEE'
8465 AND select_type = 'T'
8466 AND check_id in (select check_id from csc_prof_group_checks
8467 where group_id = p_group_id)
8468 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8469 AND Nvl(end_date_active, Sysdate);
8470 ELSE
8471 OPEN v_checks_curvar FOR
8472 SELECT check_id, select_type, select_block_id,
8473 data_type, format_mask,check_upper_lower_flag,threshold_grade,
8474 check_level
8475 FROM csc_prof_checks_b
8476 WHERE check_level = 'EMPLOYEE'
8477 AND check_id in (select check_id from csc_prof_group_checks
8478 where group_id = p_group_id)
8479 And Sysdate BETWEEN Nvl(start_date_active, Sysdate)
8480 AND Nvl(end_date_active, Sysdate);
8481 END IF;
8482 END IF;
8483
8484 LOOP
8485 FETCH v_checks_curvar INTO v_rec_var;
8486 sel_type := v_rec_var.select_type;
8487 chk_id := v_rec_var.check_id;
8488 sel_blk_id := v_rec_var.select_block_id;
8489 v_check_level:= v_rec_var.check_level;
8490 data_type:=v_rec_var.data_type;
8491 fmt_mask:=v_rec_var.format_mask;
8492 chk_u_l_flag:= v_rec_var.check_upper_lower_flag;
8493 thd_grade := v_rec_var.threshold_grade;
8494
8495 EXIT WHEN v_checks_curvar%notfound;
8496 IF (sel_type = 'T') THEN
8497 build_rule('N',chk_id,v_check_level, rule);
8498 ELSIF (sel_type = 'B') THEN
8499 Open block_csr;
8500 Fetch block_csr INTO blk_id, sql_stmt, curr_code;
8501 Close block_csr;
8502
8503 IF sql_stmt IS NOT NULL Then
8504 v_employee_in_sql := INSTR(lower(sql_stmt),':employee_id',1);
8505 Else
8506 v_employee_in_sql := 0;
8507 End if;
8508 END IF;
8509
8510 BEGIN
8511
8512 IF ((sel_type='B' ) OR (sel_type='T') ) THEN
8513 cid := dbms_sql.open_cursor;
8514
8515
8516 IF (sel_type='B') THEN
8517
8518 dbms_sql.parse(cid, sql_stmt, dbms_sql.native);
8519 ELSIF (sel_type = 'T') THEN
8520 dbms_sql.parse(cid, rule, dbms_sql.native);
8521 END IF;
8522
8523 dbms_sql.define_column(cid,1,val,240);
8524 OPEN employee_csr;
8525
8526 LOOP
8527 FETCH employee_csr INTO cparty_id;
8528 EXIT WHEN employee_csr%notfound;
8529 Evaluate_One_Check(truncate_flag,
8530 chk_id,
8531 cparty_id,
8532 null,
8533 NULL, -- added by spamujul for ER#8473903
8534 v_check_level,
8535 sel_type,
8536 sel_blk_id,
8537 data_type,
8538 fmt_mask,
8539 chk_u_l_flag,
8540 Thd_grade,
8541 rule,
8542 blk_id,
8543 sql_stmt,
8544 curr_code,
8545 l_up_total,
8546 l_ip_total,
8547 l_ua_total,
8548 l_ia_total ,
8549 l_us_total, -- added by spamujul for ER#8473903
8550 l_is_total, -- added by spamujul for ER#8473903
8551 cid);
8552 END LOOP;
8553 CLOSE employee_csr;
8554 IF (dbms_sql.is_open(cid)) THEN
8555 dbms_sql.close_cursor(cid);
8556 END IF;
8557 END IF;
8558
8559
8560 IF (dbms_sql.is_open(cid)) THEN
8561 dbms_sql.close_cursor(cid);
8562 end if;
8563
8564 End;
8565
8566 END LOOP;
8567 CLOSE v_checks_curvar;
8568
8569
8570
8571 -- check if there are still records to be inserted
8572 IF l_ip_total <> 0 THEN
8573 l_for_insert := 'Y';
8574 l_for_party := 'Y';
8575 l_for_psite := 'N';-- added by spamujul for ER#8473903
8576 Insert_Update_Check_Results(l_ip_total,
8577 l_for_insert,
8578 l_for_party
8579 ,l_for_psite -- added by spamujul for ER#8473903
8580 );
8581 l_ip_total :=0;
8582 END IF;
8583 -- check if there are still records to be updated
8584 IF l_up_total <> 0 THEN
8585 l_for_insert := 'N';
8586 l_for_party := 'Y';
8587 l_for_psite := 'N';-- added by spamujul for ER#8473903
8588 Insert_Update_Check_Results (l_up_total,
8589 l_for_insert,
8590 l_for_party
8591 ,l_for_psite -- added by spamujul for ER#8473903
8592 );
8593 l_up_total :=0;
8594 END IF;
8595
8596 COMMIT;
8597
8598 -- Return 0 for successful completion, 1 for warnings, 2 for error
8599 IF (error_flag) THEN
8600 errbuf := Sqlerrm;
8601 retcode := 2;
8602 ELSIF (warning_msg <> '') THEN
8603 errbuf := warning_msg;
8604 retcode := 1;
8605 ELSE
8606 errbuf := '';
8607 retcode := 0;
8608 END IF;
8609
8610 IF (debug) THEN
8611 fnd_file.close;
8612 END IF;
8613
8614 EXCEPTION
8615 WHEN OTHERS THEN
8616 ROLLBACK;
8617 IF (v_checks_curvar%isopen) THEN
8618 CLOSE v_checks_curvar;
8619 END IF;
8620 IF (employee_csr%isopen) THEN
8621 CLOSE employee_csr;
8622 END IF;
8623
8624 IF (debug) THEN
8625 fnd_file.close;
8626 END IF;
8627 errbuf := Sqlerrm;
8628 retcode := 2;
8629
8630 g_error := sqlcode || ' ' || sqlerrm;
8631 fnd_file.put_line(fnd_file.log , g_error);
8632
8633 END Evaluate_Checks_Emp;
8634
8635 /* End of R12 Employee HelpDesk Modifications */
8636 --
8637 -- Evaluate_One_Block
8638 -- Execute dynamic SQL to evaluate the given building block and store the
8639 -- result in the CSC_PROF_BLOCK_RESULTS table.
8640 -- IN
8641 -- blk_id - profile check building block identifier
8642 -- party_id - customer identifier for which building block is evaluated
8643 -- acct_id - account id
8644 -- sql_stmt - sql statement to execute dynamically
8645 -- P_CID - Cursor passed from calling routine to avoid re-parsing the same sql statement
8646 --
8647 PROCEDURE Evaluate_One_Block
8648 ( p_truncate_flag IN VARCHAR2,
8649 p_blk_id IN NUMBER,
8650 p_party_id IN NUMBER,
8651 p_acct_id IN NUMBER,
8652 p_psite_id IN NUMBER DEFAULT NULL, -- added by spamujul for ER#8473903
8653 p_sql_stmt IN VARCHAR2,
8654 p_curr_code IN VARCHAR2,
8655 p_up_total IN OUT NOCOPY NUMBER ,
8656 p_ip_total IN OUT NOCOPY NUMBER ,
8657 p_ua_total IN OUT NOCOPY NUMBER ,
8658 p_ia_total IN OUT NOCOPY NUMBER ,
8659 p_us_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
8660 p_is_total IN OUT NOCOPY NUMBER, -- added by spamujul for ER#8473903
8661 p_cid IN NUMBER) IS
8662
8663 cid NUMBER;
8664 val VARCHAR2(80);
8665 curr_code VARCHAR2(15);
8666 dummy NUMBER;
8667
8668 l_for_insert varchar2(1) := 'Y';
8669 l_for_party varchar2(1) := 'Y';
8670 l_for_psite varchar2(1) := 'N'; -- added by spamujul for ER#8473903
8671
8672 v_party_count Number := 0;
8673 v_account_count Number := 0;
8674 v_psite_count Number := 0; -- added by spamujul for ER#8473903
8675
8676 v_party_in_sql Number := 0;
8677 v_acct_in_sql Number := 0;
8678 v_emp_in_sql Number := 0;
8679 v_psite_in_sql Number := 0; -- added by spamujul for ER#8473903
8680 /*
8681 -- for party level
8682 Cursor party_block_crs IS
8683 Select count(*)
8684 From csc_prof_block_results
8685 Where block_id = p_blk_id
8686 And party_id = p_party_id
8687 And cust_account_id IS NULL;
8688
8689 -- for account level
8690 Cursor account_block_crs IS
8691 Select count(*)
8692 From csc_prof_block_results
8693 Where block_id = p_blk_id
8694 And party_id = p_party_id
8695 And cust_account_id = p_acct_id;
8696 */
8697
8698 BEGIN
8699 Begin
8700 -- dbms_output.put_line('Inside evaluate_one_block .p_cid.'||to_char(p_cid));
8701 -- P_CID is the Cursor to avoid reparsing the sql stmt
8702 -- P_CID would not be null when engine runs for more than 1 party (e.g. evaluate_checks1)
8703 -- P_CID would be null when engine is being run for 1 party (e.g. evaluate_checks2)
8704 if p_cid is null then
8705 cid := dbms_sql.open_cursor;
8706 dbms_sql.parse(cid, p_sql_stmt, dbms_sql.native);
8707 dbms_sql.define_column(cid, 1, val, 240);
8708 else
8709 cid := p_cid;
8710 end if;
8711 -- added for 1850508
8712 -- if p_old_block_id!=p_blk_id OR p_old_block_id is null then
8713 -- p_old_block_id:=p_blk_id;
8714 -- End If;
8715 -- Check for existence of variables before binding
8716 -- for Bug 1935015 changed instr(sql_stmt..) to INSTR(lower(sql_stmt)..)
8717 IF p_sql_stmt IS NOT NULL Then
8718 v_party_in_sql := INSTR(lower(p_sql_stmt),':party_id',1);
8719 v_acct_in_sql := INSTR(lower(p_sql_stmt),':cust_account_id',1);
8720 v_emp_in_sql := INSTR(lower(p_sql_stmt),':employee_id',1);
8721 v_psite_in_sql := INSTR(lower(p_sql_stmt),':party_site_id',1); -- added by spamujul for ER#8473903
8722 Else
8723 v_party_in_sql := 0;
8724 v_acct_in_sql := 0;
8725 v_emp_in_sql := 0;
8726 v_psite_in_sql := 0; -- added by spamujul for ER#8473903
8727 End if;
8728 -- For Bug 1935015 commented this if statement and created 2 variables
8729 -- v_party_in_sql and v_acct_in_sql and used them in the if stmt.
8730 --if INSTR(lower(p_sql_stmt),':party_id',1) > 0 then
8731 if v_party_in_sql > 0 then
8732 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
8733 end if;
8734 --if INSTR(lower(p_sql_stmt),':cust_account_id',1) > 0 then
8735 if v_acct_in_sql > 0 then
8736 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
8737 end if;
8738 if v_emp_in_sql > 0 then
8739 dbms_sql.bind_variable(cid, ':employee_id', p_party_id);
8740 end if;
8741 -- Begin fix by spamujul for NCR ER#8473903
8742 If v_psite_in_sql > 0 then
8743 dbms_sql.bind_variable(cid, ':party_site_id', p_psite_id);
8744 End if;
8745 -- End fix by spamujul for NCR ER#8473903
8746 /***********************
8747 dbms_sql.bind_variable(cid, ':party_id', p_party_id);
8748 dbms_sql.bind_variable(cid, ':cust_account_id', p_acct_id);
8749 ***************/
8750 dummy := dbms_sql.execute_and_fetch(cid);
8751 dbms_sql.column_value(cid, 1, val);
8752 if p_cid is null then
8753 dbms_sql.close_cursor(cid);
8754 end if;
8755 Exception
8756 When Others Then
8757 -- dbms_output.put_line('Exception Others in Blocks...');
8758 if p_cid is null then
8759 IF (dbms_sql.is_open(cid)) THEN
8760 dbms_sql.close_cursor(cid);
8761 end if;
8762 end if;
8763 val := 0;
8764 End;
8765 If p_psite_id IS NULL THEN -- Added by spamujul for NCR ER#8473903
8766 IF p_acct_id IS NULL THEN
8767 IF p_truncate_flag = 'N' THEN
8768 begin
8769 select 1 into v_party_count from csc_prof_block_results
8770 where block_id = p_blk_id
8771 and party_id = p_party_id
8772 and cust_account_id is null
8773 and party_site_id is NULL -- Added by spamujul for ER#8473903
8774 ;
8775 exception
8776 when no_data_found then
8777 v_party_count := 0;
8778 when others then
8779 v_party_count := null;
8780 end;
8781 /*
8782 OPEN party_block_crs;
8783 FETCH party_block_crs INTO v_party_count;
8784 IF party_block_crs%notfound THEN
8785 v_party_count := 0;
8786 END IF;
8787 CLOSE party_block_crs;
8788 */
8789 ELSE
8790 v_party_count := 0;
8791 END IF;
8792 IF v_party_count = 0 THEN
8793 p_ip_total := p_ip_total + 1;
8794 -- assign values to insert party
8795 ip_block_id(p_ip_total) := p_blk_id;
8796 ip_party_id(p_ip_total) := p_party_id;
8797 ip_account_id(p_ip_total) := NULL;
8798 ip_psite_id(p_ip_total) := NULL; -- Added by spamujul for ER#8473903
8799 ip_value(p_ip_total) := val;
8800 ip_currency(p_ip_total) := p_curr_code;
8801 IF p_ip_total = 1000 THEN
8802 l_for_insert := 'Y';
8803 l_for_party := 'Y';
8804 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8805 Insert_Update_Block_Results (p_ip_total,
8806 l_for_insert,
8807 l_for_party
8808 ,l_for_psite -- Added by spamujul for ER#8473903
8809 );
8810 p_ip_total :=0;
8811 END IF;
8812 ELSIF v_party_count = 1 THEN
8813 p_up_total := p_up_total + 1;
8814 -- assign values to update party tables
8815 up_block_id(p_up_total) := p_blk_id;
8816 up_party_id(p_up_total) := p_party_id;
8817 up_account_id(p_up_total) := NULL;
8818 up_psite_id(p_up_total) := NULL; -- Added by spamujul for ER#8473903
8819 up_value(p_up_total) := val;
8820 up_currency(p_up_total) := p_curr_code;
8821 IF p_up_total = 1000 THEN
8822 l_for_insert := 'N';
8823 l_for_party := 'Y';
8824 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8825 Insert_Update_Block_Results (p_up_total,
8826 l_for_insert,
8827 l_for_party
8828 ,l_for_psite -- Added by spamujul for ER#8473903
8829 );
8830 p_up_total := 0;
8831 END IF;
8832 END IF;
8833 ELSE
8834 IF p_truncate_flag = 'N' THEN
8835 begin
8836 select 1 into v_account_count from csc_prof_block_results
8837 where block_id = p_blk_id
8838 and party_id = p_party_id
8839 and cust_account_id = p_acct_id
8840 and party_site_id is null -- Added by spamujul for ER#8473903
8841 ;
8842 exception when no_data_found then
8843 v_account_count := 0;
8844 when others then
8845 v_account_count := null;
8846 end;
8847
8848 /* OPEN account_block_crs;
8849 FETCH account_block_crs INTO v_account_count;
8850 IF account_block_crs%notfound THEN
8851 v_account_count := 0;
8852 END IF;
8853 CLOSE account_block_crs;
8854 */
8855 ELSE
8856 v_account_count := 0;
8857 END IF;
8858 IF v_account_count = 0 THEN
8859 p_ia_total := p_ia_total + 1;
8860
8861 -- assign values to insert
8862 ia_block_id(p_ia_total) := p_blk_id;
8863 ia_party_id(p_ia_total) := p_party_id;
8864 ia_account_id(p_ia_total) := p_acct_id;
8865 ia_psite_id(p_ia_total) := NULL; -- Added by spamujul for ER#8473903
8866 ia_value(p_ia_total) := val;
8867 ia_currency(p_ia_total) := p_curr_code;
8868 IF p_ia_total = 1000 THEN
8869 l_for_insert := 'Y';
8870 l_for_party := 'N';
8871 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8872 Insert_Update_Block_Results (p_ia_total,
8873 l_for_insert,
8874 l_for_party
8875 ,l_for_psite -- Added by spamujul for ER#8473903
8876 );
8877 p_ia_total := 0;
8878 END IF;
8879 ELSIF v_account_count = 1 THEN
8880 p_ua_total := p_ua_total + 1;
8881 -- assign values to update party tables
8882 ua_block_id(p_ua_total) := p_blk_id;
8883 ua_party_id(p_ua_total) := p_party_id;
8884 ua_account_id(p_ua_total) := p_acct_id;
8885 ua_psite_id(p_ua_total) := NULL; -- Added by spamujul for ER#8473903
8886 ua_value(p_ua_total) := val;
8887 ua_currency(p_ua_total) := p_curr_code;
8888 IF p_ua_total = 1000 THEN
8889 l_for_insert := 'N';
8890 l_for_party := 'N';
8891 l_for_psite := 'N'; -- Added by spamujul for ER#8473903
8892 Insert_Update_Block_Results(p_ua_total,
8893 l_for_insert,
8894 l_for_party
8895 ,l_for_psite -- Added by spamujul for ER#8473903
8896 );
8897 p_ua_total := 0;
8898 END IF;
8899 END IF;
8900 END IF;
8901 -- Begin fix by spamujul fro NCR ER#8473903
8902 ELSE
8903 IF p_truncate_flag = 'N' THEN
8904 begin
8905 select 1 into v_psite_count from csc_prof_block_results
8906 where block_id = p_blk_id
8907 and party_id = p_party_id
8908 and cust_account_id IS NULL
8909 and party_site_id =p_psite_id ;
8910
8911 Exception when no_data_found then
8912 v_psite_count := 0;
8913 when others then
8914 v_psite_count := null;
8915 end;
8916
8917 ELSE
8918 v_psite_count := 0;
8919 END IF;
8920 IF v_psite_count = 0 THEN
8921 p_is_total := p_is_total + 1;
8922 is_block_id(p_is_total) := p_blk_id;
8923 is_party_id(p_is_total) := p_party_id;
8924 is_account_id(p_is_total) := p_acct_id;
8925 is_psite_id(p_is_total) := p_psite_id;
8926 is_value(p_is_total) := val;
8927 is_currency(p_is_total) := p_curr_code;
8928 IF p_ia_total = 1000 THEN
8929 l_for_insert := 'Y';
8930 l_for_party := 'N';
8931 l_for_psite := 'Y';
8932 Insert_Update_Block_Results (p_is_total,
8933 l_for_insert,
8934 l_for_party
8935 ,l_for_psite
8936 );
8937 p_is_total := 0;
8938 END IF;
8939 ELSIF v_psite_count = 1 THEN
8940 p_us_total := p_us_total + 1;
8941 -- assign values to update party tables
8942 us_block_id(p_us_total) := p_blk_id;
8943 us_party_id(p_us_total) := p_party_id;
8944 us_account_id(p_us_total) := p_acct_id;
8945 us_psite_id(p_us_total) :=p_psite_id;
8946 us_value(p_us_total) := val;
8947 us_currency(p_us_total) := p_curr_code;
8948 IF p_us_total = 1000 THEN
8949 l_for_insert := 'N';
8950 l_for_party := 'N';
8951 l_for_psite := 'Y';
8952 Insert_Update_Block_Results(p_us_total,
8953 l_for_insert,
8954 l_for_party
8955 ,l_for_psite
8956 );
8957 p_us_total := 0;
8958 END IF;
8959 END IF;
8960 END IF;
8961 -- End fix by spamujul fro NCR ER#8473903
8962 EXCEPTION
8963 -- If an exception is raised, close cursor before exiting
8964 WHEN OTHERS THEN
8965 -- dbms_output.put_line('Exception Others in Blocks...');
8966 if p_cid is null then
8967 IF (dbms_sql.is_open(cid)) THEN
8968 dbms_sql.close_cursor(cid);
8969 END IF;
8970 end if;
8971 set_context('Evaluate_One_Block',
8972 'blk_id=>'||to_char(p_blk_id),
8973 'party_id=>'||to_char(p_party_id),
8974 'account_id=>'||to_char(p_acct_id));
8975 g_error := sqlcode || ' ' || sqlerrm;
8976 set_context(NULL, g_error);
8977 END Evaluate_One_Block;
8978
8979
8980 --
8981 -- Insert or Update Records into Csc_Prof_Block_Results Table
8982 -- IN
8983 -- p_count - the number of records to be inserted or updated
8984 -- p_for_party - flag to check if the insert or update is for party or account
8985 -- p_for_insert - flag to check if for insert or update.
8986 --
8987 PROCEDURE Insert_Update_Block_Results
8988 ( p_count IN Number,
8989 p_for_insert IN Varchar2,
8990 p_for_party IN Varchar2
8991 ,p_for_psite IN Varchar2 -- Added by spamujul for ER#8473903
8992 ) IS
8993
8994 TABLESEGMENT_FULL EXCEPTION;
8995 INDEXSEGMENT_FULL EXCEPTION;
8996 SNAPSHOT_TOO_OLD EXCEPTION;
8997
8998 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
8999 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
9000 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
9001
9002 Begin
9003 -- Default user and login IDs
9004 --user_id := fnd_global.user_id;
9005 --login_id := fnd_global.login_id;
9006 IF P_FOR_PSITE ='N' Then -- Added by spamujul for ER#8473903
9007 IF p_for_party = 'Y' THEN
9008 -- PARTY level insert or update of records
9009 IF p_for_insert = 'Y' THEN
9010 -- Insert Records into Csc_Prof_Block_Results Table
9011 FORALL i IN 1..p_count
9012 INSERT INTO Csc_Prof_Block_Results
9013 ( block_results_id
9014 , block_id
9015 , party_id
9016 , cust_account_id
9017 ,party_site_id -- Added by spamujul for ER#8473903
9018 , value
9019 , currency_code
9020 , created_by
9021 , creation_date
9022 , last_updated_by
9023 , last_update_date
9024 , last_update_login)
9025 VALUES
9026 (csc_prof_block_results_s.nextval
9027 , ip_block_id(i)
9028 , ip_party_id(i)
9029 , ip_account_id(i)
9030 , ip_psite_id(i) -- Added by spamujul for ER#8473903
9031 , ip_value(i)
9032 , ip_currency(i)
9033 , FND_GLOBAL.USER_ID
9034 , Sysdate
9035 , FND_GLOBAL.USER_ID
9036 , Sysdate
9037 , FND_GLOBAL.CONC_LOGIN_ID );
9038
9039 ip_block_id.DELETE;
9040 ip_party_id.DELETE;
9041 ip_account_id.DELETE;
9042 ip_psite_id.DELETE; -- Added by spamujul for ER#8473903
9043 ip_value.DELETE;
9044 ip_currency.DELETE;
9045 ELSE
9046 FORALL i IN 1..p_count
9047 UPDATE Csc_Prof_Block_Results
9048 Set value = up_value(i)
9049 , currency_code = up_currency(i)
9050 , last_updated_by = FND_GLOBAL.USER_ID
9051 , last_update_date = sysdate
9052 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9053 Where block_id = up_block_id(i)
9054 And party_id = up_party_id(i)
9055 AND cust_account_id IS NULL AND party_site_id IS NULL -- Added by spamujul for ER#8473903
9056 ;
9057 up_block_id.DELETE;
9058 up_party_id.DELETE;
9059 up_account_id.DELETE;
9060 up_psite_id.DELETE; -- Added by spamujul for ER#8473903
9061 up_value.DELETE;
9062 up_currency.DELETE;
9063 END IF;
9064 ELSE
9065 -- ACCOUNT level insert or update of records
9066 IF p_for_insert = 'Y' THEN
9067 -- Insert Records into Csc_Prof_Block_Results Table
9068 FORALL i IN 1..p_count
9069 INSERT INTO Csc_Prof_Block_Results
9070 ( block_results_id
9071 , block_id
9072 , party_id
9073 , cust_account_id
9074 , party_site_id -- Added by spamujul for ER#8473903
9075 , value
9076 , currency_code
9077 , created_by
9078 , creation_date
9079 , last_updated_by
9080 , last_update_date
9081 , last_update_login)
9082 VALUES
9083 (csc_prof_block_results_s.nextval
9084 , ia_block_id(i)
9085 , ia_party_id(i)
9086 , ia_account_id(i)
9087 , ia_psite_id(i) -- Added by spamujul for ER#8473903
9088 , ia_value(i)
9089 , ia_currency(i)
9090 , FND_GLOBAL.USER_ID
9091 , Sysdate
9092 , FND_GLOBAL.USER_ID
9093 , Sysdate
9094 , FND_GLOBAL.CONC_LOGIN_ID );
9095
9096 ia_block_id.DELETE;
9097 ia_party_id.DELETE;
9098 ia_account_id.DELETE;
9099 ia_psite_id.DELETE; -- Added by spamujul for ER#8473903
9100 ia_value.DELETE;
9101 ia_currency.DELETE;
9102 ELSE
9103 FORALL i IN 1..p_count
9104 UPDATE Csc_Prof_Block_Results
9105 Set value = ua_value(i)
9106 , currency_code = ua_currency(i)
9107 , last_updated_by = FND_GLOBAL.USER_ID
9108 , last_update_date = sysdate
9109 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9110 Where block_id = ua_block_id(i)
9111 And party_id = ua_party_id(i)
9112 And cust_account_id = ua_account_id(i)
9113 And party_site_id IS NULL -- Added by spamujul for ER#8473903
9114 ;
9115
9116 ua_block_id.DELETE;
9117 ua_party_id.DELETE;
9118 ua_account_id.DELETE;
9119 ua_psite_id.DELETE; -- Added by spamujul for ER#8473903
9120 ua_value.DELETE;
9121 ua_currency.DELETE;
9122 END IF;
9123 END IF;
9124 -- Begin fix by spamujul for NCR ER# 8473903
9125 ELSE
9126 IF p_for_insert = 'Y' THEN
9127 -- Insert Records into Csc_Prof_Block_Results Table
9128 FORALL i IN 1..p_count
9129 INSERT INTO Csc_Prof_Block_Results
9130 ( block_results_id
9131 , block_id
9132 , party_id
9133 , cust_account_id
9134 , value
9135 , currency_code
9136 , created_by
9137 , creation_date
9138 , last_updated_by
9139 , last_update_date
9140 , last_update_login
9141 , party_site_id
9142 )
9143 VALUES
9144 (csc_prof_block_results_s.nextval
9145 , is_block_id(i)
9146 , is_party_id(i)
9147 , is_account_id(i)
9148 , is_value(i)
9149 , is_currency(i)
9150 , FND_GLOBAL.USER_ID
9151 , Sysdate
9152 , FND_GLOBAL.USER_ID
9153 , Sysdate
9154 , FND_GLOBAL.CONC_LOGIN_ID
9155 , is_psite_id(i)
9156 );
9157 is_block_id.DELETE;
9158 is_party_id.DELETE;
9159 is_account_id.DELETE;
9160 is_psite_id.DELETE;
9161 is_value.DELETE;
9162 is_currency.DELETE;
9163 ELSE
9164 FORALL i IN 1..p_count
9165 UPDATE Csc_Prof_Block_Results
9166 Set value = us_value(i)
9167 , currency_code = us_currency(i)
9168 , last_updated_by = FND_GLOBAL.USER_ID
9169 , last_update_date = sysdate
9170 , last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9171 Where block_id = us_block_id(i)
9172 And party_id = us_party_id(i)
9173 And cust_account_id IS NULL
9174 And party_site_id = us_psite_id(i)
9175 ;
9176 us_block_id.DELETE;
9177 us_party_id.DELETE;
9178 us_account_id.DELETE;
9179 us_psite_id.DELETE;
9180 us_value.DELETE;
9181 us_currency.DELETE;
9182 END IF;
9183 END IF;
9184 -- End fix by spamujul for NCR ER# 8473903
9185 commit;
9186
9187 exception
9188 when Indexsegment_full then
9189 g_error := sqlcode || ' ' || sqlerrm;
9190 fnd_file.put_line(fnd_file.log , g_error);
9191 App_Exception.raise_exception;
9192
9193 when Tablesegment_full then
9194 g_error := sqlcode || ' ' || sqlerrm;
9195 fnd_file.put_line(fnd_file.log , g_error);
9196 App_Exception.raise_exception;
9197
9198 WHEN SNAPSHOT_TOO_OLD THEN
9199 g_error := sqlcode || ' ' || sqlerrm;
9200 fnd_file.put_line(fnd_file.log,g_error);
9201 App_Exception.raise_exception;
9202
9203 when Others then
9204 table_delete;
9205 g_error := sqlcode || ' ' || sqlerrm;
9206 fnd_file.put_line(fnd_file.log , g_error);
9207
9208 END Insert_Update_Block_Results;
9209
9210 --
9211 -- Insert or Update Records into Csc_Prof_Check_Results Table
9212 -- IN
9213 -- p_count - the number of records to be inserted or updated
9214 -- p_for_party - flag to check if the insert or update is for party or account
9215 -- p_for_insert - flag to check if for insert or update.
9216 --
9217 PROCEDURE Insert_Update_Check_Results ( p_count IN NUMBER,
9218 p_for_insert IN VARCHAR2,
9219 p_for_party IN VARCHAR2 ,
9220 p_for_psite IN VARCHAR2 -- Added by spamujul for ER#8473903
9221 )
9222 IS
9223 TABLESEGMENT_FULL EXCEPTION;
9224 INDEXSEGMENT_FULL EXCEPTION;
9225 SNAPSHOT_TOO_OLD EXCEPTION;
9226 PRAGMA EXCEPTION_INIT(TABLESEGMENT_FULL, -1653);
9227 PRAGMA EXCEPTION_INIT(INDEXSEGMENT_FULL, -1654);
9228 PRAGMA EXCEPTION_INIT(SNAPSHOT_TOO_OLD, -1555);
9229 BEGIN
9230 -- Default user and login IDs
9231 --user_id := fnd_global.user_id;
9232 --login_id := fnd_global.login_id;
9233 IF p_for_psite ='N' THEN -- Added by spamujul for ER#8473903
9234 IF p_for_party = 'Y' THEN
9235 -- PARTY level insert or update of records
9236 IF p_for_insert = 'Y' THEN
9237 -- Insert Records into Csc_Prof_Check_Results Table
9238 FORALL i IN 1..p_count
9239 INSERT
9240 INTO Csc_Prof_Check_Results
9241 (
9242 check_results_id ,
9243 check_id ,
9244 party_id ,
9245 cust_account_id,
9246 party_site_id, -- Added by spamujul for ER#8473903
9247 value ,
9248 results_threshold_flag ,
9249 currency_code ,
9250 grade ,
9251 rating_code ,
9252 color_code ,
9253 created_by ,
9254 creation_date ,
9255 last_updated_by ,
9256 last_update_date ,
9257 last_update_login
9258 )
9259 VALUES
9260 (
9261 csc_prof_check_results_s.nextval ,
9262 ip_check_id(i) ,
9263 ip_party_id(i) ,
9264 ip_account_id(i) ,
9265 ip_psite_id(i), -- Added by spamujul for ER#8473903
9266 ip_value(i) ,
9267 ip_results(i) ,
9268 ip_currency(i) ,
9269 ip_grade(i) ,
9270 ip_rating_code(i) ,
9271 ip_color_code(i) ,
9272 FND_GLOBAL.USER_ID ,
9273 SYSDATE ,
9274 FND_GLOBAL.USER_ID ,
9275 SYSDATE ,
9276 FND_GLOBAL.CONC_LOGIN_ID
9277 );
9278
9279 ip_check_id.DELETE;
9280 ip_party_id.DELETE;
9281 ip_account_id.DELETE;
9282 ip_psite_id.DELETE; -- Added by spamujul for ER#8473903
9283 ip_value.DELETE;
9284 ip_currency.DELETE;
9285 ip_grade.DELETE;
9286 ip_rating_code.DELETE;
9287 ip_color_code.DELETE;
9288 ip_results.DELETE;
9289 ELSE
9290 FORALL i IN 1..p_count
9291 UPDATE Csc_Prof_Check_Results
9292 SET value = up_value(i) ,
9293 results_threshold_flag = up_results(i) ,
9294 currency_code = up_currency(i) ,
9295 grade = up_grade(i) ,
9296 rating_code = up_rating_code(i) ,
9297 color_code = up_color_code(i) ,
9298 last_updated_by = FND_GLOBAL.USER_ID ,
9299 last_update_date = SYSDATE ,
9300 last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9301 WHERE check_id = up_check_id(i)
9302 AND party_id = up_party_id(i)
9303 AND cust_account_id IS NULL
9304 AND party_site_id IS NULL -- Added by spamujul for ER#8473903
9305 ;
9306
9307 up_check_id.DELETE;
9308 up_party_id.DELETE;
9309 up_account_id.DELETE;
9310 up_psite_id.DELETE; -- Added by spamujul for ER#8473903
9311 up_value.DELETE;
9312 up_currency.DELETE;
9313 up_grade.DELETE;
9314 up_rating_code.DELETE;
9315 up_color_code.DELETE;
9316 up_results.DELETE;
9317 END IF;
9318 ELSE
9319 -- ACCOUNT level insert or update of records
9320 IF p_for_insert = 'Y' THEN
9321 -- Insert Records into Csc_Prof_Check_Results Table
9322 FORALL i IN 1..p_count
9323 INSERT
9324 INTO Csc_Prof_Check_Results
9325 (
9326 check_results_id ,
9327 check_id ,
9328 party_id ,
9329 cust_account_id ,
9330 party_site_id , -- Added by spamujul for ER#8473903
9331 value ,
9332 results_threshold_flag ,
9333 currency_code ,
9334 grade ,
9335 rating_code ,
9336 color_code ,
9337 created_by ,
9338 creation_date ,
9339 last_updated_by ,
9340 last_update_date ,
9341 last_update_login
9342 )
9343 VALUES
9344 (
9345 csc_prof_check_results_s.nextval ,
9346 ia_check_id(i) ,
9347 ia_party_id(i) ,
9348 ia_account_id(i) ,
9349 ia_psite_id(i) , -- Added by spamujul for ER#8473903
9350 ia_value(i) ,
9351 ia_results(i) ,
9352 ia_currency(i) ,
9353 ia_grade(i) ,
9354 ia_rating_code(i) ,
9355 ia_color_code(i) ,
9356 FND_GLOBAL.USER_ID ,
9357 SYSDATE ,
9358 FND_GLOBAL.USER_ID ,
9359 SYSDATE ,
9360 FND_GLOBAL.CONC_LOGIN_ID
9361 );
9362
9363 ia_check_id.DELETE;
9364 ia_party_id.DELETE;
9365 ia_account_id.DELETE;
9366 ia_psite_id.DELETE; -- Added by spamujul for ER#8473903
9367 ia_value.DELETE;
9368 ia_currency.DELETE;
9369 ia_grade.DELETE;
9370 ia_rating_code.DELETE;
9371 ia_color_code.DELETE;
9372 ia_results.DELETE;
9373 ELSE
9374 FORALL i IN 1..p_count
9375 UPDATE Csc_Prof_Check_Results
9376 SET value = ua_value(i) ,
9377 results_threshold_flag = ua_results(i) ,
9378 currency_code = ua_currency(i) ,
9379 grade = ua_grade(i) ,
9380 rating_code = ua_rating_code(i) ,
9381 color_code = ua_color_code(i) ,
9382 last_updated_by = FND_GLOBAL.USER_ID ,
9383 last_update_date = SYSDATE ,
9384 last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9385 WHERE check_id = ua_check_id(i)
9386 AND party_id = ua_party_id(i)
9387 AND cust_account_id = ua_account_id(i)
9388 AND party_site_id IS NULL -- Added by spamujul for ER#8473903
9389 ;
9390
9391 ua_check_id.DELETE;
9392 ua_party_id.DELETE;
9393 ua_account_id.DELETE;
9394 ua_psite_id.DELETE; -- Added by spamujul for ER#8473903
9395 ua_value.DELETE;
9396 ua_currency.DELETE;
9397 ua_grade.DELETE;
9398 ua_rating_code.DELETE;
9399 ua_color_code.DELETE;
9400 ua_results.DELETE;
9401 END IF;
9402 END IF;
9403 --Begin fix by spamujul for ER#8473903
9404 ELSE
9405 IF p_for_insert = 'Y' THEN
9406 FORALL i IN 1..p_count
9407 INSERT
9408 INTO Csc_Prof_Check_Results
9409 (
9410 check_results_id ,
9411 check_id ,
9412 party_id ,
9413 cust_account_id ,
9414 party_site_id ,
9415 value ,
9416 results_threshold_flag ,
9417 currency_code ,
9418 grade ,
9419 rating_code ,
9420 color_code ,
9421 created_by ,
9422 creation_date ,
9423 last_updated_by ,
9424 last_update_date ,
9425 last_update_login
9426 )
9427 VALUES
9428 (
9429 csc_prof_check_results_s.nextval ,
9430 is_check_id(i) ,
9431 is_party_id(i) ,
9432 is_account_id(i) ,
9433 is_psite_id(i) ,
9434 is_value(i) ,
9435 is_results(i) ,
9436 is_currency(i) ,
9437 is_grade(i) ,
9438 is_rating_code(i) ,
9439 is_color_code(i) ,
9440 FND_GLOBAL.USER_ID ,
9441 SYSDATE ,
9442 FND_GLOBAL.USER_ID ,
9443 SYSDATE ,
9444 FND_GLOBAL.CONC_LOGIN_ID
9445 );
9446
9447 is_check_id.DELETE;
9448 is_party_id.DELETE;
9449 is_account_id.DELETE;
9450 is_psite_id.DELETE;
9451 is_value.DELETE;
9452 is_currency.DELETE;
9453 is_grade.DELETE;
9454 is_rating_code.DELETE;
9455 is_color_code.DELETE;
9456 is_results.DELETE;
9457 ELSE
9458 FORALL i IN 1..p_count
9459 UPDATE Csc_Prof_Check_Results
9460 SET value = us_value(i) ,
9461 results_threshold_flag = us_results(i) ,
9462 currency_code = us_currency(i) ,
9463 grade = us_grade(i) ,
9464 rating_code = us_rating_code(i) ,
9465 color_code = us_color_code(i) ,
9466 last_updated_by = FND_GLOBAL.USER_ID ,
9467 last_update_date = SYSDATE ,
9468 last_update_login = FND_GLOBAL.CONC_LOGIN_ID
9469 WHERE check_id = us_check_id(i)
9470 AND party_id = us_party_id(i)
9471 AND cust_account_id IS NULL
9472 AND party_site_id = us_psite_id(i);
9473
9474 us_check_id.DELETE;
9475 us_party_id.DELETE;
9476 us_account_id.DELETE;
9477 us_psite_id.DELETE;
9478 us_value.DELETE;
9479 us_currency.DELETE;
9480 us_grade.DELETE;
9481 us_rating_code.DELETE;
9482 us_color_code.DELETE;
9483 us_results.DELETE;
9484 END IF;
9485 END IF;
9486 -- Begin fix by spamujul for ER#8473903
9487 COMMIT;
9488 EXCEPTION
9489 WHEN Tablesegment_full THEN
9490 g_error := SQLCODE
9491 || ' '
9492 || sqlerrm;
9493 fnd_file.put_line(fnd_file.log , g_error);
9494 App_Exception.raise_exception;
9495 WHEN Indexsegment_full THEN
9496 g_error := SQLCODE
9497 || ' '
9498 || sqlerrm;
9499 fnd_file.put_line(fnd_file.log , g_error);
9500 App_Exception.raise_exception;
9501 WHEN SNAPSHOT_TOO_OLD THEN
9502 g_error := SQLCODE
9503 || ' '
9504 || sqlerrm;
9505 fnd_file.put_line(fnd_file.log,g_error);
9506 App_Exception.raise_exception;
9507 WHEN OTHERS THEN
9508 table_delete;
9509 g_error := SQLCODE
9510 || ' '
9511 || sqlerrm;
9512 fnd_file.put_line(fnd_file.log , g_error);
9513 END Insert_Update_Check_Results;
9514
9515
9516 /*******************************************
9517 UPDATE_JIT_STATUS
9518 added this procedure for JIT enhancement -- Bug 4535407
9519 Updates the columns jit_status, jit_err_code in CCT_MEDIA_ITEMS.
9520 Called from CSC_PROF_JIT
9521 ********************************************/
9522
9523 PROCEDURE update_jit_status ( p_status VARCHAR2 DEFAULT NULL,
9524 p_err_code NUMBER DEFAULT NULL,
9525 p_media_item_id NUMBER
9526 ) IS
9527 PRAGMA AUTONOMOUS_TRANSACTION;
9528 BEGIN
9529 UPDATE CCT_MEDIA_ITEMS
9530 SET jit_status = p_status,
9531 jit_err_code = p_err_code
9532 WHERE media_item_id = p_media_item_id;
9533 COMMIT;
9534 END update_jit_status;
9535
9536
9537 /*******************************************
9538 CSC_PROF_JIT
9539 added this procedure for JIT enhancement -- Bug 4535407
9540 Called from OTM java code
9541 Calls profile engine for the party_id passed from OTM.
9542 OTM passes the key-value pair in a VARRAY (cct_keyvalue_varr)
9543 ********************************************/
9544
9545 PROCEDURE csc_prof_jit ( p_key_value_varr IN cct_keyvalue_varr,
9546 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
9547 p_critical_flag IN VARCHAR2 DEFAULT NULL,
9548 x_return_status OUT NOCOPY VARCHAR2,
9549 x_msg_count OUT NOCOPY NUMBER,
9550 x_msg_data OUT NOCOPY VARCHAR2
9551 )
9552 IS
9553 l_media_item_id NUMBER;
9554 l_party_id NUMBER;
9555 l_hidden_party_id NUMBER;
9556 l_rel_id NUMBER;
9557 l_acct_id NUMBER;
9558 l_psite_id NUMBER := NULL; -- added by spamujul for ER#8473903
9559 l_resp_id NUMBER;
9560 l_emp_id NUMBER;
9561 l_resp_appl_id NUMBER;
9562 l_party_type VARCHAR2(30);
9563 l_form_name VARCHAR2(30) := 'CSCCCCRC';
9564 l_view_by_acct VARCHAR2(255);
9565 l_view_by VARCHAR2(255);
9566 l_acct_new_old VARCHAR2(255);
9567 l_show_active_acct VARCHAR2(255);
9568 l_status VARCHAR2(30);
9569 l_group_id NUMBER;
9570 l_which_ivr VARCHAR2(30);
9571 l_media_exists VARCHAR2(1);
9572 l_party_exists VARCHAR2(1);
9573 l_rel_exists VARCHAR2(1);
9574 l_acct_exists VARCHAR2(1);
9575 l_resp_exists VARCHAR2(1);
9576 l_resp_appl_exists VARCHAR2(1);
9577 l_emp_exists VARCHAR2(1);
9578 l_which_ivr_exists VARCHAR2(1);
9579 l_contact_type VARCHAR2(30);
9580 l_critical_flag VARCHAR2(1);
9581 l_party_rec CSC_UTILS.dashboard_Rec_Type;
9582 l_api_name VARCHAR2(30) := 'CSC_PROF_JIT';
9583 l_jit_prg_status VARCHAR2(30) := 'PROGRESS';
9584 l_jit_err_status VARCHAR2(30) := 'ERROR';
9585 l_jit_complete_status VARCHAR2(30) := 'COMPLETED';
9586 l_sql_code NUMBER;
9587 CURSOR chk_status IS
9588 SELECT jit_status
9589 FROM CCT_MEDIA_ITEMS
9590 WHERE media_item_id = l_media_item_id;
9591
9592 CURSOR group_crs IS
9593 SELECT a.dashboard_group_id
9594 FROM csc_prof_module_groups a,
9595 csc_prof_groups_b b
9596 WHERE a.dashboard_group_id = b.group_id
9597 AND a.party_type IN (l_party_type, 'ALL')
9598 AND a.form_function_name = l_form_name
9599 AND (((a.responsibility_id = l_resp_id AND a.resp_appl_id = l_resp_appl_id)
9600 AND a.responsibility_id IS NOT NULL)
9601 OR a.responsibility_id IS NULL)
9602 AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(b.start_date_active, SYSDATE))
9603 AND TRUNC(NVL(b.end_date_active, SYSDATE))
9604 ORDER BY a.party_type desc, a.responsibility_id;
9605
9606 CURSOR get_party_type IS
9607 SELECT party_type
9608 FROM hz_parties
9609 WHERE party_id = l_party_id;
9610
9611 CURSOR get_acct_latest IS
9612 SELECT cust_account_id
9613 FROM hz_cust_accounts
9614 WHERE party_id = l_party_id
9615 AND ((status = 'A' AND l_show_active_acct = 'Y')
9616 OR (l_show_active_acct = 'N'))
9617 AND status NOT IN ('M', 'D')
9618 ORDER BY creation_date DESC;
9619
9620 CURSOR get_acct_oldest IS
9621 SELECT cust_account_id
9622 FROM hz_cust_accounts
9623 WHERE party_id = l_party_id
9624 AND ((status = 'A' AND l_show_active_acct = 'Y')
9625 OR (l_show_active_acct = 'N'))
9626 AND status NOT IN ('M', 'D')
9627 ORDER BY creation_date;
9628
9629 CURSOR get_cust_from_cont IS
9630 SELECT obj_party_id, obj_party_type
9631 FROM csc_hz_parties_rel_v
9632 WHERE rel_party_id = l_party_id;
9633
9634 BEGIN
9635 IF FND_API.to_Boolean( p_init_msg_list ) THEN
9636 FND_MSG_PUB.initialize;
9637 END IF;
9638 x_return_status := FND_API.G_RET_STS_SUCCESS;
9639 /* get values from varray parameter p_key_value_varr */
9640 l_media_item_id := CCT_COLLECTION_UTIL_PUB.Get
9641 ( p_key_value_varr => p_key_value_varr,
9642 p_key => 'occtMediaItemID',
9643 x_key_exists => l_media_exists);
9644 l_party_id := CCT_COLLECTION_UTIL_PUB.Get
9645 ( p_key_value_varr => p_key_value_varr,
9646 p_key => 'PARTY_ID',
9647 x_key_exists => l_party_exists);
9648 l_rel_id := CCT_COLLECTION_UTIL_PUB.Get
9649 ( p_key_value_varr => p_key_value_varr,
9650 p_key => 'REL_PARTY_ID',
9651 x_key_exists => l_rel_exists);
9652 l_acct_id := CCT_COLLECTION_UTIL_PUB.Get
9653 ( p_key_value_varr => p_key_value_varr,
9654 p_key => 'CUST_ACCOUNT_ID',
9655 x_key_exists => l_acct_exists);
9656 l_resp_id := CCT_COLLECTION_UTIL_PUB.Get
9657 ( p_key_value_varr => p_key_value_varr,
9658 p_key => 'occtRespID',
9659 x_key_exists => l_resp_exists);
9660 l_resp_appl_id := CCT_COLLECTION_UTIL_PUB.Get
9661 ( p_key_value_varr => p_key_value_varr,
9662 p_key => 'occtAppID',
9663 x_key_exists => l_resp_appl_exists);
9664 l_emp_id := CCT_COLLECTION_UTIL_PUB.Get
9665 ( p_key_value_varr => p_key_value_varr,
9666 p_key => 'employeeID',
9667 x_key_exists => l_emp_exists);
9668 l_which_ivr := CCT_COLLECTION_UTIL_PUB.Get
9669 ( p_key_value_varr => p_key_value_varr,
9670 p_key => 'WhichIVR',
9671 x_key_exists => l_which_ivr_exists);
9672
9673 IF (l_media_item_id IS NULL
9674 OR (l_party_id IS NULL AND l_emp_id is NULL)
9675 OR l_resp_id IS NULL
9676 OR l_resp_appl_id IS NULL) THEN
9677 RETURN;
9678 END IF;
9679 OPEN chk_status;
9680 FETCH chk_status INTO l_status;
9681 /* OTM updates jit_status to null before calling this procedure.
9682 IF screenpop happens when the call to this procedure is in queue, then
9683 forms would have populated jit_status column. In such cases return back
9684 */
9685 IF l_status IS NOT NULL OR chk_status%NOTFOUND THEN
9686 RETURN;
9687 END IF;
9688 CLOSE chk_status;
9689 update_jit_status
9690 ( p_status => l_jit_prg_status,
9691 p_err_code => NULL,
9692 p_media_item_id => l_media_item_id );
9693 /* get the value of auto refresh PO if not passed from OTM */
9694 IF p_critical_flag IS NULL THEN
9695 l_critical_flag := FND_PROFILE.value_specific ( name => 'CSC_DASHBOARD_AUTO_REFRESH',
9696 responsibility_id => l_resp_id,
9697 application_id => l_resp_appl_id,
9698 user_id => -999
9699 );
9700 ELSE
9701 l_critical_flag := p_critical_flag;
9702 END IF;
9703 /* profile option for defaulting view by in CC */
9704 l_view_by := FND_PROFILE.value_specific ( name => 'CSC_CC_DEFAULT_VIEW_BY',
9705 responsibility_id => l_resp_id,
9706 application_id => l_resp_appl_id,
9707 user_id => -999
9708 );
9709 /* Employee HelpDesk Changes
9710 If emp_id is not null
9711 If view_by is Customer - then get hidden customer's id from Profile Option -process for customer
9712 If view_by is Contact - then process for employee
9713 elsif party_id is not null
9714 existing logic
9715 */
9716 IF l_emp_id IS NOT NULL AND l_which_ivr ='Employee' THEN
9717 IF l_view_by = 'CUSTOMER' THEN ---Refresh only for hidden customer
9718 l_hidden_party_id := FND_PROFILE.value_specific( name => 'CS_SR_DEFAULT_CUSTOMER_NAME',
9719 responsibility_id => l_resp_id,
9720 application_id => l_resp_appl_id,
9721 user_id => -999
9722 );
9723 /* Refresh for Customer only if Profile Option CS_SR_DEFAULT_CUSTOMER_NAME returns a value */
9724 IF l_hidden_party_id IS NOT NULL THEN
9725 /* profile option for view_by_account in dashboard tab */
9726 l_view_by_acct := FND_PROFILE.value_specific( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
9727 responsibility_id => l_resp_id,
9728 application_id => l_resp_appl_id,
9729 user_id => -999
9730 );
9731
9732 /* if view_by_account is yes, check whether account_id is passed.
9733 If not passed, then check whether only one account exists for the customer.
9734 If yes, use this account.
9735 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
9736 IF l_view_by_acct = 'ACCOUNT' THEN
9737 IF l_acct_id IS NULL THEN
9738 l_show_active_acct := FND_PROFILE.value_specific( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
9739 responsibility_id => l_resp_id,
9740 application_id => l_resp_appl_id,
9741 user_id => -999
9742 );
9743 BEGIN
9744 SELECT cust_account_id
9745 INTO l_acct_id
9746 FROM hz_cust_accounts
9747 WHERE party_id = l_party_id
9748 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
9749 AND status NOT IN ('M', 'D');
9750 EXCEPTION
9751 WHEN OTHERS THEN
9752 l_acct_id := NULL;
9753 END;
9754 IF l_acct_id IS NULL THEN
9755 l_acct_new_old := FND_PROFILE.value_specific( name => 'CSC_CC_DEFAULT_ACCT',
9756 responsibility_id => l_resp_id,
9757 application_id => l_resp_appl_id,
9758 user_id => -999
9759 );
9760
9761 IF l_acct_new_old = 'Y' THEN
9762 OPEN get_acct_oldest;
9763 FETCH get_acct_oldest INTO l_acct_id;
9764 CLOSE get_acct_oldest;
9765 ELSIF l_acct_new_old = 'L' THEN
9766 OPEN get_acct_latest;
9767 FETCH get_acct_latest INTO l_acct_id;
9768 CLOSE get_acct_latest;
9769 END IF;
9770 END IF; /* l_acct_id is null -- inner*/
9771 END IF; /* l_acct_id is null -- outer */
9772 END IF; /* l_view_by_acct = 'Y' */
9773 /* If user hook for dashboard group is enabled, call user hook to get group_id.
9774 Else use the existing logic from setup form to get group_id */
9775 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
9776 l_party_rec.Cust_Party_Id := l_hidden_party_id;
9777 l_party_rec.Cust_Account_Id := l_acct_id;
9778 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
9779 l_group_id := l_party_rec.group_id;
9780 ELSE
9781 OPEN group_crs;
9782 FETCH group_crs INTO l_group_id;
9783 IF (group_crs%notfound) THEN
9784 CLOSE group_crs;
9785 l_form_name := 'CSCCCCDB';
9786 OPEN group_crs;
9787 FETCH group_crs into l_group_id;
9788 CLOSE group_Crs;
9789 ELSE
9790 CLOSE group_crs;
9791 END IF;
9792 END IF;
9793
9794 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
9795 IF l_group_id IS NULL THEN
9796 update_jit_status
9797 ( p_status => l_jit_err_status,
9798 p_err_code => -20001,
9799 p_media_item_id => l_media_item_id );
9800 RETURN;
9801 END IF;
9802
9803 CSC_PROFILE_ENGINE_PKG.run_engine_jit
9804 ( p_party_id => l_hidden_party_id,
9805 p_acct_id => l_acct_id,
9806 p_psite_id => l_psite_id, -- added by spamujul for ER#8473903
9807 p_group_id => l_group_id,
9808 p_critical_flag => l_critical_flag,
9809 p_party_type => 'CUSTOMER');
9810 END IF; /* l_hidden_party_id is not null */
9811
9812 ELSIF l_view_by = 'CONTACT' THEN --Refresh for employee
9813
9814 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
9815 l_party_rec.Cust_Party_Id := l_emp_id;
9816 l_party_rec.Cust_Party_Type := upper(l_which_ivr);
9817
9818
9819 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
9820 l_group_id := l_party_rec.group_id;
9821 ELSE
9822
9823 OPEN group_crs;
9824 FETCH group_crs INTO l_group_id;
9825 IF (group_crs%notfound) THEN
9826 CLOSE group_crs;
9827 l_form_name := 'CSCCCCDB';
9828 OPEN group_crs;
9829 FETCH group_crs into l_group_id;
9830 CLOSE group_Crs;
9831 ELSE
9832 CLOSE group_crs;
9833 END IF;
9834 END IF;
9835
9836 IF l_group_id IS NULL THEN
9837 update_jit_status
9838 ( p_status => l_jit_err_status,
9839 p_err_code => -20001,
9840 p_media_item_id => l_media_item_id );
9841 RETURN;
9842 END IF;
9843
9844 CSC_PROFILE_ENGINE_PKG.run_engine_jit
9845 ( p_party_id => l_emp_id,
9846 p_acct_id => NULL,
9847 p_psite_id => NULL, -- added by spamujul for ER#8473903
9848 p_group_id => l_group_id,
9849 p_critical_flag => l_critical_flag,
9850 p_party_type => 'EMPLOYEE');
9851
9852 END IF; /* l_view_by for HelpDesk Context */
9853
9854 ELSIF l_emp_id IS NOT NULL AND l_which_ivr ='SR' THEN
9855 l_contact_type := FND_PROFILE.value_specific
9856 ( name => 'CSC_CC_DEFAULT_CONTACT_TYPE',
9857 responsibility_id => l_resp_id,
9858 application_id => l_resp_appl_id,
9859 user_id => -999
9860 );
9861
9862 IF l_view_by = 'CUSTOMER' THEN
9863 --refresh dashboard for customer using l_party_id
9864 IF l_party_id IS NOT NULL THEN
9865 /* profile option for view_by_account in dashboard tab */
9866 l_view_by_acct := FND_PROFILE.value_specific
9867 ( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
9868 responsibility_id => l_resp_id,
9869 application_id => l_resp_appl_id,
9870 user_id => -999
9871 );
9872
9873 /* if view_by_account is yes, check whether account_id is passed.
9874 If not passed, then check whether only one account exists for the customer.
9875 If yes, use this account.
9876 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
9877
9878 IF l_view_by_acct = 'ACCOUNT' THEN
9879 IF l_acct_id IS NULL THEN
9880 l_show_active_acct := FND_PROFILE.value_specific
9881 ( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
9882 responsibility_id => l_resp_id,
9883 application_id => l_resp_appl_id,
9884 user_id => -999
9885 );
9886 BEGIN
9887 SELECT cust_account_id
9888 INTO l_acct_id
9889 FROM hz_cust_accounts
9890 WHERE party_id = l_party_id
9891 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
9892 AND status NOT IN ('M', 'D');
9893 EXCEPTION
9894 WHEN OTHERS THEN
9895 l_acct_id := NULL;
9896 END;
9897
9898 IF l_acct_id IS NULL THEN
9899 l_acct_new_old := FND_PROFILE.value_specific
9900 ( name => 'CSC_CC_DEFAULT_ACCT',
9901 responsibility_id => l_resp_id,
9902 application_id => l_resp_appl_id,
9903 user_id => -999
9904 );
9905
9906 IF l_acct_new_old = 'Y' THEN
9907 OPEN get_acct_oldest;
9908 FETCH get_acct_oldest INTO l_acct_id;
9909 CLOSE get_acct_oldest;
9910 ELSIF l_acct_new_old = 'L' THEN
9911 OPEN get_acct_latest;
9912 FETCH get_acct_latest INTO l_acct_id;
9913 CLOSE get_acct_latest;
9914 END IF;
9915 END IF; /* l_acct_id is null -- inner*/
9916 END IF; /* l_acct_id is null -- outer */
9917 END IF; /* l_view_by_acct = 'Y' */
9918
9919 /* If user hook for dashboard group is enabled, call user hook to get group_id.
9920 Else use the existing logic from setup form to get group_id */
9921
9922 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
9923 l_party_rec.Cust_Party_Id := l_hidden_party_id;
9924 l_party_rec.Cust_Account_Id := l_acct_id;
9925
9926 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
9927 l_group_id := l_party_rec.group_id;
9928 ELSE
9929 OPEN group_crs;
9930 FETCH group_crs INTO l_group_id;
9931 IF (group_crs%notfound) THEN
9932 CLOSE group_crs;
9933 l_form_name := 'CSCCCCDB';
9934 OPEN group_crs;
9935 FETCH group_crs into l_group_id;
9936 CLOSE group_Crs;
9937 ELSE
9938 CLOSE group_crs;
9939 END IF;
9940 END IF;
9941
9942 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
9943 IF l_group_id IS NULL THEN
9944 update_jit_status
9945 ( p_status => l_jit_err_status,
9946 p_err_code => -20001,
9947 p_media_item_id => l_media_item_id );
9948 RETURN;
9949 END IF;
9950
9951 CSC_PROFILE_ENGINE_PKG.run_engine_jit
9952 ( p_party_id => l_party_id,
9953 p_acct_id => l_acct_id,
9954 p_psite_id => l_psite_id, -- added by spamujul for ER#8473903
9955 p_group_id => l_group_id,
9956 p_critical_flag => l_critical_flag,
9957 p_party_type => 'CUSTOMER');
9958 END IF; /* l_party_id is not null */
9959
9960 ELSIF l_view_by = 'CONTACT' and l_contact_type ='EMPLOYEE' THEN
9961
9962 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
9963 l_party_rec.Cust_Party_Id := l_emp_id;
9964 l_party_rec.Cust_Party_Type := 'EMPLOYEE';
9965
9966
9967 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
9968 l_group_id := l_party_rec.group_id;
9969 ELSE
9970
9971 OPEN group_crs;
9972 FETCH group_crs INTO l_group_id;
9973 IF (group_crs%notfound) THEN
9974 CLOSE group_crs;
9975 l_form_name := 'CSCCCCDB';
9976 OPEN group_crs;
9977 FETCH group_crs into l_group_id;
9978 CLOSE group_Crs;
9979 ELSE
9980 CLOSE group_crs;
9981 END IF;
9982 END IF;
9983
9984 IF l_group_id IS NULL THEN
9985 update_jit_status
9986 ( p_status => l_jit_err_status,
9987 p_err_code => -20001,
9988 p_media_item_id => l_media_item_id );
9989 RETURN;
9990 END IF;
9991
9992 CSC_PROFILE_ENGINE_PKG.run_engine_jit
9993 ( p_party_id => l_emp_id,
9994 p_acct_id => NULL,
9995 p_psite_id => NULL, -- added by spamujul for ER#8473903
9996 p_group_id => l_group_id,
9997 p_critical_flag => l_critical_flag,
9998 p_party_type => 'EMPLOYEE');
9999
10000 ELSIF l_view_by = 'CONTACT' and l_contact_type ='CUSTOMER' THEN
10001 --refresh dashboard for contact (use party_id to fetch contact_id for refreshing)
10002 OPEN get_party_type;
10003 FETCH get_party_type INTO l_party_type;
10004 CLOSE get_party_type;
10005
10006 /* if view_by is contact and contact_id is not passed, don't process */
10007 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
10008 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
10009 l_party_rec.Cust_Party_Id := l_party_id;
10010 l_party_rec.Cust_Party_Type := l_party_type;
10011 l_party_rec.Cust_Account_Id := l_acct_id;
10012
10013 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
10014 l_group_id := l_party_rec.group_id;
10015 ELSE
10016
10017 OPEN group_crs;
10018 FETCH group_crs INTO l_group_id;
10019 IF (group_crs%notfound) THEN
10020 CLOSE group_crs;
10021 l_form_name := 'CSCCCCDB';
10022 OPEN group_crs;
10023 FETCH group_crs into l_group_id;
10024 CLOSE group_Crs;
10025 ELSE
10026 CLOSE group_crs;
10027 END IF;
10028 END IF;
10029
10030 IF l_group_id IS NULL THEN
10031 update_jit_status
10032 ( p_status => l_jit_err_status,
10033 p_err_code => -20001,
10034 p_media_item_id => l_media_item_id );
10035 RETURN;
10036 END IF;
10037
10038 CSC_PROFILE_ENGINE_PKG.run_engine_jit
10039 ( p_party_id => l_party_id,
10040 p_acct_id => NULL,
10041 p_psite_id => NULL, -- added by spamujul for ER#8473903
10042 p_group_id => l_group_id,
10043 p_critical_flag => l_critical_flag,
10044 p_party_type => 'CUSTOMER');
10045 END IF;
10046 END IF;
10047
10048 ELSIF l_party_id IS NOT NULL THEN
10049
10050 OPEN get_party_type;
10051 FETCH get_party_type INTO l_party_type;
10052 CLOSE get_party_type;
10053
10054 IF l_view_by = 'CUSTOMER' THEN
10055
10056 /* if view by is customer and contact_id is passed,
10057 get customer_id using contact_id */
10058 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
10059 OPEN get_cust_from_cont;
10060 FETCH get_cust_from_cont into l_party_id, l_party_type;
10061 CLOSE get_cust_from_cont;
10062 END IF;
10063
10064 /* profile option for view_by_account in dashboard tab */
10065 l_view_by_acct := FND_PROFILE.value_specific
10066 ( name => 'CSC_DASHBOARD_TO_QUERY_BY_PARTY_OR_ACCOUNT',
10067 responsibility_id => l_resp_id,
10068 application_id => l_resp_appl_id,
10069 user_id => -999
10070 );
10071
10072 /* if view_by_account is yes, check whether account_id is passed.
10073 If not passed, then check whether only one account exists for the customer.
10074 If yes, use this account.
10075 Else get account_id based on profile option CSC_CC_DEFAULT_ACCT */
10076
10077 IF l_view_by_acct = 'ACCOUNT' THEN
10078 IF l_acct_id IS NULL THEN
10079 l_show_active_acct := FND_PROFILE.value_specific
10080 ( name => 'CSC_CONTACT_CENTER_SHOW_ACTIVE_ACCOUNTS',
10081 responsibility_id => l_resp_id,
10082 application_id => l_resp_appl_id,
10083 user_id => -999
10084 );
10085 BEGIN
10086 SELECT cust_account_id
10087 INTO l_acct_id
10088 FROM hz_cust_accounts
10089 WHERE party_id = l_party_id
10090 AND ((status = 'A' AND l_show_active_acct = 'Y') OR (l_show_active_acct = 'N'))
10091 AND status NOT IN ('M', 'D');
10092 EXCEPTION
10093 WHEN OTHERS THEN
10094 l_acct_id := NULL;
10095 END;
10096
10097 IF l_acct_id IS NULL THEN
10098 l_acct_new_old := FND_PROFILE.value_specific
10099 ( name => 'CSC_CC_DEFAULT_ACCT',
10100 responsibility_id => l_resp_id,
10101 application_id => l_resp_appl_id,
10102 user_id => -999
10103 );
10104
10105 IF l_acct_new_old = 'Y' THEN
10106 OPEN get_acct_oldest;
10107 FETCH get_acct_oldest INTO l_acct_id;
10108 CLOSE get_acct_oldest;
10109 ELSIF l_acct_new_old = 'L' THEN
10110 OPEN get_acct_latest;
10111 FETCH get_acct_latest INTO l_acct_id;
10112 CLOSE get_acct_latest;
10113 END IF;
10114 END IF; /* l_acct_id is null -- inner*/
10115 END IF; /* l_acct_id is null -- outer */
10116 END IF; /* l_view_by_acct = 'Y' */
10117
10118 /* If user hook for dashboard group is enabled, call user hook to get group_id.
10119 Else use the existing logic from setup form to get group_id */
10120
10121 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
10122 l_party_rec.Cust_Party_Id := l_party_id;
10123 l_party_rec.Cust_Party_Type := l_party_type;
10124 l_party_rec.Cust_Account_Id := l_acct_id;
10125
10126 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
10127 l_group_id := l_party_rec.group_id;
10128 ELSE
10129 OPEN group_crs;
10130 FETCH group_crs INTO l_group_id;
10131 IF (group_crs%notfound) THEN
10132 CLOSE group_crs;
10133 l_form_name := 'CSCCCCDB';
10134 OPEN group_crs;
10135 FETCH group_crs into l_group_id;
10136 CLOSE group_Crs;
10137 ELSE
10138 CLOSE group_crs;
10139 END IF;
10140 END IF;
10141
10142 /* if err_code is -20001, Contact Center will display message that says that no group is attached */
10143 IF l_group_id IS NULL THEN
10144 update_jit_status
10145 ( p_status => l_jit_err_status,
10146 p_err_code => -20001,
10147 p_media_item_id => l_media_item_id );
10148 RETURN;
10149 END IF;
10150
10151 CSC_PROFILE_ENGINE_PKG.run_engine_jit
10152 ( p_party_id => l_party_id,
10153 p_acct_id => l_acct_id,
10154 p_psite_id => l_psite_id, -- added by spamujul for ER#8473903
10155 p_group_id => l_group_id,
10156 p_critical_flag => l_critical_flag,
10157 p_party_type => 'CUSTOMER');
10158
10159 ELSIF l_view_by = 'CONTACT' THEN
10160
10161 /* if view_by is contact and contact_id is not passed, don't process */
10162 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
10163 IF JTF_USR_HKS.ok_to_execute('CSC_DASHBOARD_GROUP_CUHK', 'GET_DASHBOARD_GROUP_PRE', 'B', 'C') THEN
10164 l_party_rec.Cust_Party_Id := l_party_id;
10165 l_party_rec.Cust_Party_Type := l_party_type;
10166 l_party_rec.Cust_Account_Id := l_acct_id;
10167
10168 CSC_DASHBOARD_GROUP_CUHK.get_dashboard_group_pre(l_party_rec);
10169 l_group_id := l_party_rec.group_id;
10170 ELSE
10171
10172 OPEN group_crs;
10173 FETCH group_crs INTO l_group_id;
10174 IF (group_crs%notfound) THEN
10175 CLOSE group_crs;
10176 l_form_name := 'CSCCCCDB';
10177 OPEN group_crs;
10178 FETCH group_crs into l_group_id;
10179 CLOSE group_Crs;
10180 ELSE
10181 CLOSE group_crs;
10182 END IF;
10183 END IF;
10184
10185 IF l_group_id IS NULL THEN
10186 update_jit_status
10187 ( p_status => l_jit_err_status,
10188 p_err_code => -20001,
10189 p_media_item_id => l_media_item_id );
10190 RETURN;
10191 END IF;
10192
10193 CSC_PROFILE_ENGINE_PKG.run_engine_jit
10194 ( p_party_id => l_party_id,
10195 p_acct_id => NULL,
10196 p_psite_id => NULL, -- added by spamujul for ER#8473903
10197 p_group_id => l_group_id,
10198 p_critical_flag => l_critical_flag,
10199 p_party_type => 'CUSTOMER');
10200 END IF;
10201 END IF; /* l_view_by */
10202 END IF; /* l_party_id or l_emp_id is null */
10203
10204 update_jit_status
10205 ( p_status => l_jit_complete_status,
10206 p_err_code => NULL,
10207 p_media_item_id => l_media_item_id );
10208
10209 EXCEPTION
10210 WHEN OTHERS THEN
10211 l_sql_code := sqlcode;
10212
10213 update_jit_status
10214 ( p_status => l_jit_err_status,
10215 p_err_code => l_sql_code,
10216 p_media_item_id => l_media_item_id );
10217
10218 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10219
10220 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10221 FND_MSG_PUB.Add_Exc_Msg
10222 ( p_pkg_name => G_PKG_NAME,
10223 p_procedure_name => l_api_name );
10224 END IF;
10225
10226 FND_MSG_PUB.Count_And_Get
10227 ( p_count => x_msg_count,
10228 p_data => x_msg_data );
10229
10230 END csc_prof_jit;
10231
10232
10233 /*******************************************
10234 GET_PROFILE_VALUE_RESP
10235 added this procedure for JIT enhancement -- Bug 4535407
10236 Returns Profile Option value at the responsibility level.
10237 This function has been added as API fnd_profile.value_specific is
10238 not defined at form level FND_PROFILE package (pld)
10239 ********************************************/
10240
10241 FUNCTION get_profile_value_resp ( p_profile_name VARCHAR2,
10242 p_resp_id NUMBER,
10243 p_resp_appl_id NUMBER,
10244 p_user_id NUMBER
10245 ) RETURN VARCHAR2
10246 IS
10247 l_prof_value VARCHAR2(255);
10248 BEGIN
10249 l_prof_value := FND_PROFILE.value_specific
10250 ( name => p_profile_name,
10251 responsibility_id => p_resp_id,
10252 application_id => p_resp_appl_id,
10253 user_id => p_user_id
10254 );
10255 RETURN l_prof_value;
10256 END get_profile_value_resp;
10257
10258 /******************************
10259 * Begin Utilities Definition *
10260 ******************************/
10261
10262 --
10263 -- Build_Rule
10264 -- Construct the rule as a SQL statement for an indicator check
10265 -- IN
10266 -- check_id - profile check identifier
10267 -- OUT
10268 -- rule - sql statement that returns 0 or 1 row (0 for false, 1 for true)
10269 --
10270 PROCEDURE Build_Rule ( acct_flag IN VARCHAR2,
10271 chk_id IN NUMBER,
10272 chk_level IN VARCHAR2,
10273 rule OUT NOCOPY VARCHAR2
10274 ) IS
10275
10276 v_blk_id Number;
10277 v_blk_level Varchar2(10);
10278 CURSOR rules_csr IS
10279 SELECT logical_operator,
10280 left_paren,
10281 block_id,
10282 comparison_operator,
10283 expression,
10284 expr_to_block_id,
10285 right_paren
10286 FROM csc_prof_check_rules_vl
10287 WHERE check_id = chk_id;
10288
10289 cursor blk_crs is
10290 select block_level from
10291 csc_prof_blocks_b
10292 where block_id=v_blk_id;
10293
10294 BEGIN
10295 --
10296 -- Construct indicator check rule as a SQL statement as follows:
10297 -- SELECT 1
10298 -- FROM dual
10299 -- WHERE {condition}
10300 -- <logical_operator> {condition}
10301 -- ...
10302 --
10303 -- A {condition} has the following form:
10304 -- <left_paren> EXISTS ( {subquery} ) <right_paren>
10305 --
10306 -- A {subquery} has the following three forms:
10307 -- SELECT 1
10308 -- FROM csc_prof_block_results
10309 -- WHERE block_id = <block_id>
10310 -- AND party_id = <party_id>
10311 -- AND value <comparison_operator> [<expression1> [AND <expression2>]]
10312 --
10313 rule := 'SELECT 1 FROM dual WHERE';
10314 IF chk_level = 'ACCOUNT' THEN
10315 FOR rules_rec IN rules_csr LOOP
10316 v_blk_id:=rules_rec.block_id;
10317 open blk_crs;
10318 fetch blk_crs into v_blk_level;
10319 close blk_crs;
10320 if v_blk_level='PARTY' then
10321 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
10322 rules_rec.left_paren ||
10323 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
10324 rules_rec.block_id || ' AND party_id = :party_id' ||
10325 ' AND cust_account_id IS NULL AND party_site_id IS NULL AND value ' || rules_rec.comparison_operator; -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10326 IF rules_rec.expression IS NOT NULL THEN
10327 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
10328 rule := rule || ' ' || rules_rec.expression;
10329 END IF;
10330 ELSE
10331 rule := rule || '(SELECT value from csc_prof_block_results WHERE block_id = '||
10332 rules_rec.expr_to_block_id || ' AND cust_account_id IS NULL AND party_site_id IS NULL )'; -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10333 END IF;
10334 rule := rule || ')' || rules_rec.right_paren;
10335 ELSIF v_blk_level='ACCOUNT' then
10336 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
10337 rules_rec.left_paren ||
10338 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
10339 rules_rec.block_id || ' AND party_id = :party_id' ||
10340 ' AND cust_account_id = :cust_account_id AND party_site_id IS NULL' || -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10341 ' AND value ' || rules_rec.comparison_operator;
10342 IF rules_rec.expression IS NOT NULL THEN
10343 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
10344 rule := rule || ' ' || rules_rec.expression;
10345 END IF;
10346 ELSE
10347 rule := rule || '(SELECT value from csc_prof_block_results WHERE block_id = '
10348 || rules_rec.expr_to_block_id || ' AND party_id = :party_id' ||
10349 ' AND cust_account_id = :cust_account_id AND party_site_id IS NULL )' ; -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10350 END IF;
10351 rule := rule || ')' || rules_rec.right_paren;
10352 end if;
10353 END LOOP;
10354 -- Begin fix by spamujul for ER#8473903
10355 ELSIF (chk_level='SITE') then
10356 FOR rules_rec IN rules_csr LOOP
10357 v_blk_id:=rules_rec.block_id;
10358 open blk_crs;
10359 fetch blk_crs into v_blk_level;
10360 close blk_crs;
10361 IF v_blk_level='PARTY' THEN
10362 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
10363 rules_rec.left_paren ||
10364 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
10365 rules_rec.block_id || ' AND party_id = :party_id' ||
10366 ' AND cust_account_id IS NULL AND PARTY_SITE_ID IS NULL AND value ' || rules_rec.comparison_operator;
10367 IF rules_rec.expression IS NOT NULL THEN
10368 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
10369 rule := rule || ' ' || rules_rec.expression;
10370 END IF;
10371 ELSE
10372 rule := rule || '(SELECT value from csc_prof_block_results WHERE block_id = '||
10373 rules_rec.expr_to_block_id || ' AND cust_account_id IS NULL AND PARTY_SITE_ID IS NULL)';
10374 END IF;
10375 rule := rule || ')' || rules_rec.right_paren;
10376 ELSIF v_blk_level='SITE' then
10377 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
10378 rules_rec.left_paren ||
10379 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
10380 rules_rec.block_id || ' AND party_id = :party_id' ||
10381 ' AND party_site_id = :party_site_id and cust_account_id is null' ||
10382 ' AND value ' || rules_rec.comparison_operator;
10383 IF rules_rec.expression IS NOT NULL THEN
10384 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
10385 rule := rule || ' ' || rules_rec.expression;
10386 END IF;
10387 ELSE
10388 rule := rule || '(SELECT value from csc_prof_block_results WHERE block_id = '
10389 ||rules_rec.expr_to_block_id || ' AND party_id = :party_id' ||
10390 ' AND party_site_id = :party_site_id and cust_account_id is null)' ;
10391 END IF;
10392 rule := rule || ')' || rules_rec.right_paren;
10393 END IF;
10394 END LOOP;
10395
10396 -- End fix by spamujul for ER#8473903
10397 ELSIF (chk_level='PARTY' OR chk_level='CONTACT' or chk_level='EMPLOYEE') THEN
10398 FOR rules_rec IN rules_csr LOOP
10399 rule := rule || ' ' || rules_rec.logical_operator || ' ' ||
10400 rules_rec.left_paren ||
10401 'EXISTS (SELECT 1 FROM csc_prof_block_results WHERE block_id = ' ||
10402 rules_rec.block_id || ' AND party_id = :party_id' ||
10403 ' AND cust_account_id IS NULL AND party_site_id IS NULL AND value ' || rules_rec.comparison_operator; -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10404
10405 IF rules_rec.expression IS NOT NULL THEN
10406 IF (rules_rec.comparison_operator NOT IN ('IS NULL', 'IS NOT NULL')) THEN
10407 rule := rule || ' ' || rules_rec.expression;
10408 END IF;
10409 ELSE
10410 rule := rule || '(SELECT value from csc_prof_block_results WHERE block_id = '||
10411 rules_rec.expr_to_block_id || ' AND cust_account_id IS NULL AND party_site_id IS NULL)'; -- Included "PARTY_SITE_ID IS NULL" by spamujul for ER#8473903
10412 END IF;
10413 rule := rule || ')' || rules_rec.right_paren;
10414 END LOOP;
10415 END IF;
10416 END Build_Rule;
10417
10418
10419 --
10420 -- Set_Context
10421 -- Set procedure context (for stack trace).
10422 -- IN
10423 -- proc_name - procedure/function name
10424 -- arg1 - first IN argument
10425 -- argn - n'th IN argument
10426 --
10427 PROCEDURE Set_Context ( proc_name IN VARCHAR2,
10428 arg1 IN VARCHAR2 DEFAULT '*none*',
10429 arg2 IN VARCHAR2 DEFAULT '*none*',
10430 arg3 IN VARCHAR2 DEFAULT '*none*',
10431 arg4 IN VARCHAR2 DEFAULT '*none*',
10432 arg5 IN VARCHAR2 DEFAULT '*none*'
10433 ) IS
10434 BEGIN
10435 -- Start with procedure name.
10436 IF (proc_name IS NOT NULL) THEN
10437 fnd_file.put(FND_FILE.LOG, proc_name||'(');
10438 END IF;
10439 -- Add all defined args.
10440 IF (arg1 <> '*none*') THEN
10441 fnd_file.put(FND_FILE.LOG, arg1);
10442 END IF;
10443 IF (arg2 <> '*none*') THEN
10444 fnd_file.put(FND_FILE.LOG, ', '||arg2);
10445 END IF;
10446 IF (arg3 <> '*none*') THEN
10447 fnd_file.put(FND_FILE.LOG, ', '||arg3);
10448 END IF;
10449 IF (arg4 <> '*none*') THEN
10450 fnd_file.put(FND_FILE.LOG, ', '||arg4);
10451 END IF;
10452 IF (arg5 <> '*none*') THEN
10453 fnd_file.put(FND_FILE.LOG, ', '||arg5);
10454 END IF;
10455
10456 IF (proc_name IS NOT NULL) THEN
10457 fnd_file.put_line(FND_FILE.LOG, ')');
10458 ELSE
10459 fnd_file.new_line(FND_FILE.LOG);
10460 END IF;
10461 EXCEPTION
10462 WHEN UTL_FILE.INVALID_FILEHANDLE THEN
10463 fnd_message.set_name('CSC', 'CSC_PROFILE_INVALID_FILEHANDLE');
10464 warning_msg := fnd_message.get;
10465 WHEN UTL_FILE.INVALID_OPERATION THEN
10466 fnd_message.set_name('CSC', 'CSC_PROFILE_INVALID_OPERATION');
10467 warning_msg := fnd_message.get;
10468 WHEN UTL_FILE.WRITE_ERROR THEN
10469 fnd_message.set_name('CSC', 'CSC_PROFILE_WRITE_ERROR');
10470 warning_msg := fnd_message.get;
10471 END Set_Context;
10472
10473
10474 --
10475 -- Utility to delete all records in the tables
10476 --
10477 PROCEDURE Table_Delete IS
10478 Begin
10479
10480 IP_Block_Id.delete;
10481 IP_Check_Id.delete;
10482 IP_Party_Id.delete;
10483 IP_Account_Id.delete;
10484 IP_Psite_id.delete; -- added by spamujul for ER#8473903
10485 IP_Value.delete;
10486 IP_Currency.delete;
10487
10488 UP_Grade.delete;
10489 UP_Block_Id.delete;
10490 UP_Check_Id.delete;
10491 UP_Party_Id.delete;
10492 UP_Account_Id.delete;
10493 UP_Psite_id.delete; -- added by spamujul for ER#8473903
10494 UP_Value.delete;
10495 UP_Currency.delete;
10496 UP_Grade.delete;
10497
10498 IA_Block_Id.delete;
10499 IA_Check_Id.delete;
10500 IA_Party_Id.delete;
10501 IA_Account_Id.delete;
10502 IA_Psite_id.delete; -- added by spamujul for ER#8473903
10503 IA_Value.delete;
10504 IA_Currency.delete;
10505
10506 UA_Grade.delete;
10507 UA_Block_Id.delete;
10508 UA_Check_Id.delete;
10509 UA_Party_Id.delete;
10510 UA_Account_Id.delete;
10511 UA_Psite_id.delete; -- added by spamujul for ER#8473903
10512 UA_Value.delete;
10513 UA_Currency.delete;
10514 UA_Grade.delete;
10515 -- Begin Fix by spamujul for ER#8473903
10516 US_Block_Id.delete;
10517 US_Check_Id.delete;
10518 US_Party_Id.delete;
10519 US_Account_Id.delete;
10520 US_Psite_Id.delete;
10521 US_Value.delete;
10522 US_Currency.delete;
10523 US_Grade.delete;
10524 US_Rating_code.delete;
10525 US_Color_code.delete;
10526 US_Results.delete;
10527
10528 IS_Block_Id.delete;
10529 IS_Check_Id.delete;
10530 IS_Party_Id.delete;
10531 IS_Account_Id.delete;
10532 IS_Psite_Id.delete;
10533 IS_Value.delete;
10534 IS_Currency.delete;
10535 IS_Grade.delete;
10536 IS_Rating_Code.delete;
10537 IS_Color_Code.delete;
10538 IS_Results.delete;
10539 -- End Fix by spamujul for ER#8473903
10540 -- Relationship Plan tables
10541 plan_id_plan_table.delete;
10542 check_id_plan_table.delete;
10543 party_id_plan_table.delete;
10544 account_id_plan_table.delete;
10545 END Table_Delete;
10546
10547 FUNCTION Calc_Threshold ( p_val VARCHAR2,
10548 p_low_val VARCHAR2,
10549 p_high_val VARCHAR2,
10550 p_data_type VARCHAR2,
10551 p_chk_u_l_flag VARCHAR2
10552 ) RETURN VARCHAR2 IS
10553 RESULT VARCHAR2(3);
10554 val VARCHAR2(240) := null;
10555 BEGIN
10556 IF p_low_val is NULL AND p_high_val IS NULL THEN
10557 RETURN 'Y';
10558 END IF;
10559 IF p_data_type IN ('NUMBER', 'DATE') THEN
10560 IF p_data_type = 'NUMBER' THEN
10561 IF p_val IS NULL Then
10562 val := '0';
10563 ELSE
10564 val := p_val;
10565 END IF;
10566 IF p_chk_u_l_flag ='U' THEN
10567 IF to_number(val) > to_number(p_high_val) THEN
10568 Result := 'Y';
10569 Else
10570 Result := 'N';
10571 End If;
10572 Elsif p_chk_u_l_flag = 'L' Then
10573 If to_number(val) < to_number(p_low_val) then
10574 Result := 'Y';
10575 Else
10576 Result := 'N';
10577 End If;
10578 Else
10579 Result := 'N';
10580 End If;
10581 ELSE
10582 IF val IS NOT NULL THEN
10583 If p_chk_u_l_flag = 'U' Then
10584 If val > p_high_val then
10585 Result := 'Y';
10586 Else
10587 Result := 'N';
10588 End If;
10589 Elsif p_chk_u_l_flag = 'L' Then
10590 If val < p_low_val then
10591 Result := 'Y';
10592 Else
10593 Result := 'N';
10594 End If;
10595 Else
10596 Result := 'N';
10597 End If;
10598 End if;
10599 END IF;
10600 END IF;
10601 RETURN RESULT;
10602 END Calc_Threshold;
10603
10604 FUNCTION Format_Mask ( p_curr_code VARCHAR2,
10605 p_data_type VARCHAR2,
10606 p_val VARCHAR2,
10607 p_fmt_mask VARCHAR2
10608 ) RETURN VARCHAR2 IS
10609 val VARCHAR2(240);
10610 v_format_date DATE;
10611 BEGIN
10612 val := p_val;
10613 IF (p_curr_code IS NULL OR p_curr_code = '') THEN
10614 IF (p_fmt_mask IS NOT NULL OR p_fmt_mask <> '') THEN
10615 IF (p_data_type = 'NUMBER') THEN
10616 val := To_char(To_number(nvl(p_val, '0')), p_fmt_mask);
10617 ELSIF (p_data_type = 'DATE') THEN
10618 v_format_date := to_date(p_val,'DD-MM-YYYY');
10619 val := To_char(v_format_date, p_fmt_mask);
10620 END IF;
10621 END IF;
10622 END IF;
10623 IF p_data_type = 'NUMBER' AND val IS NULL THEN
10624 val := '0';
10625 END IF;
10626 RETURN val;
10627 END Format_Mask;
10628
10629 FUNCTION rating_color (p_chk_id NUMBER,
10630 p_party_id NUMBER,
10631 p_account_id NUMBER,
10632 p_psite_id NUMBER, -- added by spamujul for ER#8473903
10633 p_val VARCHAR2,
10634 p_data_type VARCHAR2,
10635 p_column VARCHAR2,
10636 p_count NUMBER
10637 ) RETURN VARCHAR2 IS
10638 v_val NUMBER;
10639 val VARCHAR2(240) := p_val;
10640 v_color_code VARCHAR2(240);
10641 v_rating_code VARCHAR2(240);
10642 grd VARCHAR2(240);
10643 BEGIN
10644 IF nvl(g_check_id, -99) = nvl(p_chk_id, -99)
10645 AND nvl(g_party_id, -99) = nvl(p_party_id, -99)
10646 AND nvl(g_account_id, -99) = nvl(p_account_id, -99)
10647 AND nvl(g_psite_id, -99) = nvl(p_psite_id, -99) -- Added by spamujul for ER#8473903
10648 AND nvl(g_value, -99) = nvl(p_val, -99)
10649 THEN
10650 NULL;
10651 ELSE
10652 IF p_count > 0 THEN
10653 IF (p_data_type IN ('NUMBER', 'DATE')) THEN
10654 IF p_data_type = 'NUMBER' Then
10655 IF val IS NULL Then
10656 val := '0';
10657 END IF;
10658 v_val := to_number(val);
10659 val := to_char(v_val);
10660 FOR a in 1..p_count LOOP
10661 IF v_val BETWEEN nvl(rating_tbl(a).low_value, v_val) AND nvl(rating_tbl(a).high_value, v_val) THEN
10662 v_color_code := rating_tbl(a).color_code;
10663 v_rating_code := rating_tbl(a).rating_code;
10664 grd := rating_tbl(a).grade;
10665 EXIT;
10666 END IF;
10667 END LOOP;
10668 ELSE
10669 IF val IS NOT NULL THEN
10670 FOR a IN 1..p_count LOOP
10671 IF val BETWEEN nvl(rating_tbl(a).low_value, val) AND nvl(rating_tbl(a).high_value, val) THEN
10672 v_color_code := rating_tbl(a).color_code;
10673 v_rating_code := rating_tbl(a).rating_code;
10674 grd := rating_tbl(a).grade;
10675 EXIT;
10676 END IF;
10677 END LOOP;
10678 END IF;
10679 END IF;
10680 END IF;
10681 END IF;
10682 /* populate the global variables */
10683 g_check_id := p_chk_id;
10684 g_party_id := p_party_id;
10685 g_account_id := p_account_id;
10686 g_psite_id := p_psite_id; -- Added by spamujul for ER#8473903
10687 g_value := p_val;
10688 g_color_code := v_color_code;
10689 g_rating := v_rating_code;
10690 g_grade := grd;
10691 END IF;
10692 IF p_column = 'COLOR' THEN
10693 RETURN g_color_code;
10694 ELSIF p_column = 'RATING' THEN
10695 RETURN g_rating;
10696 ELSIF p_column = 'GRADE' THEN
10697 RETURN g_grade;
10698 END IF;
10699 END rating_color;
10700
10701 /* This procedure reverts back to the state before the start of the concurrent program */
10702 PROCEDURE Handle_Exception IS
10703 -- varlables for getting CSC schema name
10704 v_schema_status VARCHAR2(1);
10705 v_industry VARCHAR2(1);
10706 v_schema_name VARCHAR2(30);
10707 v_get_appl BOOLEAN;
10708 BEGIN
10709 v_get_appl := FND_INSTALLATION.GET_APP_INFO('CSC', v_schema_status, v_industry, v_schema_name);
10710 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N2 REBUILD NOLOGGING';
10711 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N3 REBUILD NOLOGGING';
10712 EXECUTE IMMEDIATE 'ALTER INDEX '|| v_schema_name ||'.CSC_PROF_CHECK_RESULTS_N4 REBUILD NOLOGGING';
10713 EXECUTE IMMEDIATE 'ALTER TABLE ' || v_schema_name || '.CSC_PROF_CHECK_RESULTS LOGGING';
10714 END Handle_Exception;
10715
10716 /******************************
10717 * End Utilities Definition *
10718 ******************************/
10719
10720 END CSC_Profile_Engine_PKG;