1 PACKAGE BODY HZ_MATCH_RULE_37 AS
2 /*=======================================================================+
3 | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|
4 | All rights reserved. |
5 +=======================================================================+
6 | NAME
7 | HZ_MATCH_RULE_37
8 |
9 | DESCRIPTION
10 |
11 | Compiled by the HZ Match Rule Compiler
12 | -- Do Not Modify --
13 |
14 | PUBLIC PROCEDURES
15 | find_parties
16 | get_matching_party_sites
17 | get_matching_contacts
18 | get_matching_contact_points
19 | get_score_details
20 |
21 | HISTORY
22 | 28-NOV-2012 Generated by HZ Match Rule Compiler
23 |
24 *=======================================================================*/
25
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR DUP IDENTIFICATION MATCH RULES ========
28 -- ==========================================================================================
29
30 TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31 call_order vlisttype;
32 call_max_score HZ_PARTY_SEARCH.IDList;
33 call_type vlisttype;
34 g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;
35 g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;
36 g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;
37 g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;
38 g_mappings HZ_PARTY_SEARCH.IDList;
39 g_max_id NUMBER:=2000000000;
40 g_other_party_level_attribs BOOLEAN;
41
42 g_debug_count NUMBER := 0;
43 g_score_until_thresh BOOLEAN:=false;
44
45 g_thres_score NUMBER:=1000;
46 g_ps_den_only BOOLEAN;
47 g_index_owner VARCHAR2(255);
48 distinct_search_cpt_types NUMBER ;
49
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52 remainder_str VARCHAR2(4000);
53 current_pos NUMBER ;
54 temp VARCHAR2(300) ;
55 BEGIN
56 remainder_str := input_str ;
57 current_pos := 1 ;
58 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59 WHILE remainder_str IS NOT NULL
60 LOOP
61 temp := substr(remainder_str, 1 , 255 );
62 hz_utility_v2pub.debug(p_message=>' '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63 current_pos := current_pos + 255 ;
64 remainder_str := substr(input_str,current_pos );
65 END LOOP ;
66 END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69 p_entity VARCHAR2,
70 p_contains_str VARCHAR2) RETURN NUMBER IS
71
72 ustatus VARCHAR2(255);
73 dstatus VARCHAR2(255);
74 l_bool BOOLEAN;
75 l_hits NUMBER := 0;
76 BEGIN
77 IF g_index_owner IS NULL THEN
78 l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79 END IF;
80 IF p_entity='PARTY' THEN
81
82 l_hits := CTX_QUERY.count_hits(
83 g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84 ELSIF p_entity='PARTY_SITES' THEN
85 l_hits := CTX_QUERY.count_hits(
86 g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87 ELSIF p_entity='CONTACTS' THEN
88 l_hits := CTX_QUERY.count_hits(
89 g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90 ELSIF p_entity='CONTACT_POINTS' THEN
91 l_hits := CTX_QUERY.count_hits(
92 g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93 END IF;
94 RETURN floor(l_hits/2) ;
95
96
97 exception
98 when others then
99 if (instrb(SQLERRM,'DRG-51030')>0) then
100 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101 FND_MSG_PUB.ADD;
102 RAISE FND_API.G_EXC_ERROR;
103 elsif (instrb(SQLERRM,'DRG-50943')>0) then
104 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105 FND_MSG_PUB.ADD;
106 RAISE FND_API.G_EXC_ERROR;
107 else
108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109 end if;
110 END;
111
112
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120 p_final_restrict_sql := p_restrict_sql ;
121 IF p_restrict_sql IS NOT NULL
122 THEN
123 IF instrb(p_restrict_sql, 'STAGE.') > 0
124 THEN
125 p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126 ELSIF instrb(p_restrict_sql, 'stage.') > 0
127 THEN
128 p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129 END IF;
130 p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'
131 || ' where oc.org_contact_id = stage.org_contact_id and'
132 || ' r.relationship_id = oc.party_relationship_id'
133 || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' '
134 || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'
135 || ' and ' || p_restrict1_sql || ' ) )' ;
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and '
137 || p_person_restrict_sql || ' ))';
138 END IF;
139 return p_final_restrict_sql ;
140 END;
141 FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142 l_newidx NUMBER;
143 BEGIN
144 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146 hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147 END IF;
148 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149 hz_utility_v2pub.debug(p_message=>'argument in_id = '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150 END IF;
151 IF in_id<g_max_id THEN
152 RETURN in_id;
153 ELSE
154 FOR I in 1..g_mappings.COUNT LOOP
155 IF in_id = g_mappings(I) THEN
156 RETURN (g_max_id+I);
157 END IF;
158 END LOOP;
159 l_newidx := g_mappings.COUNT+1;
160 g_mappings(l_newidx) := in_id;
161 RETURN (g_max_id+l_newidx);
162 END IF;
163 END;
164 FUNCTION GET_PARTY_SCORE
165 RETURN NUMBER IS
166 total NUMBER := 0;
167 BEGIN
168 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
169 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
170 hz_utility_v2pub.debug(p_message=>'calling the function get_party_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
171 END IF;
172 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
173 hz_utility_v2pub.debug(p_message=>'GET_PARTY_SCORE ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
174 END IF;
175 IF g_score_until_thresh AND (total)>=g_thres_score THEN
176 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
177 hz_utility_v2pub.debug(p_message=>'get_party_score returned total = '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
178 END IF;
179 RETURN total;
180 END IF;
181 RETURN total;
182 END;
183 FUNCTION GET_PARTY_SITES_SCORE (
184 x_matchidx OUT NUMBER
185 ,p_table_TX3 VARCHAR2
186 ,p_table_TX4 VARCHAR2
187 ,p_table_TX9 VARCHAR2
188 ,p_table_TX10 VARCHAR2
189 ,p_table_TX11 VARCHAR2
190 ,p_table_TX12 VARCHAR2
191 ,p_table_TX13 VARCHAR2
192 ,p_table_TX14 VARCHAR2
193 ,p_table_TX15 VARCHAR2
194 ,p_table_TX20 VARCHAR2
195 ,p_table_TX21 VARCHAR2
196 ,p_table_TX22 VARCHAR2
197 ) RETURN NUMBER IS
198 maxscore NUMBER := 0;
199 l_current_score NUMBER := 0;
200 BEGIN
201 x_matchidx := 0;
202 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
203 RETURN l_current_score;
204 END IF;
205 FOR J IN 1..g_party_site_stage_list.COUNT LOOP
206 l_current_score := 0;
207 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX3, p_table_TX3,(50000*(J-1)+66)) THEN
208 l_current_score:=l_current_score+ 50;
209 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
210 x_matchidx:=J;
211 RETURN l_current_score;
212 END IF;
213 ELSIF -- l_current_score<40 AND
214 HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX4, p_table_TX4,(50000*(J-1)+67)) THEN
215 l_current_score:=l_current_score+ 40;
216 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
217 x_matchidx:=J;
218 RETURN l_current_score;
219 END IF;
220 END IF;
221 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX9, p_table_TX9,(50000*(J-1)+72)) THEN
222 l_current_score:=l_current_score+ 20;
223 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
224 x_matchidx:=J;
225 RETURN l_current_score;
226 END IF;
227 ELSIF -- l_current_score<16 AND
228 HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX10, p_table_TX10,(50000*(J-1)+73)) THEN
229 l_current_score:=l_current_score+ 16;
230 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
231 x_matchidx:=J;
232 RETURN l_current_score;
233 END IF;
234 END IF;
235 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX11, p_table_TX11,(50000*(J-1)+74)) THEN
236 l_current_score:=l_current_score+ 25;
237 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
238 x_matchidx:=J;
239 RETURN l_current_score;
240 END IF;
241 END IF;
242 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX12, p_table_TX12,(50000*(J-1)+75)) THEN
243 l_current_score:=l_current_score+ 15;
244 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
245 x_matchidx:=J;
246 RETURN l_current_score;
247 END IF;
248 ELSIF -- l_current_score<12 AND
249 HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX13, p_table_TX13,(50000*(J-1)+76)) THEN
250 l_current_score:=l_current_score+ 12;
251 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
252 x_matchidx:=J;
253 RETURN l_current_score;
254 END IF;
255 END IF;
256 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX14, p_table_TX14,(50000*(J-1)+77)) THEN
257 l_current_score:=l_current_score+ 15;
258 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
259 x_matchidx:=J;
260 RETURN l_current_score;
261 END IF;
262 ELSIF -- l_current_score<12 AND
263 HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX15, p_table_TX15,(50000*(J-1)+78)) THEN
264 l_current_score:=l_current_score+ 12;
265 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
266 x_matchidx:=J;
267 RETURN l_current_score;
268 END IF;
269 END IF;
270 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX20, p_table_TX20,(50000*(J-1)+83)) THEN
271 l_current_score:=l_current_score+ 15;
272 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
273 x_matchidx:=J;
274 RETURN l_current_score;
275 END IF;
276 ELSIF -- l_current_score<12 AND
277 HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX21, p_table_TX21,(50000*(J-1)+84)) THEN
278 l_current_score:=l_current_score+ 12;
279 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
280 x_matchidx:=J;
281 RETURN l_current_score;
282 END IF;
283 END IF;
284 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX22, p_table_TX22,(50000*(J-1)+85)) THEN
285 l_current_score:=l_current_score+ 5;
286 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
287 x_matchidx:=J;
288 RETURN l_current_score;
289 END IF;
290 END IF;
291 IF maxscore<l_current_score THEN
292 maxscore:=l_current_score;
293 x_matchidx:=J;
294 END IF;
295 END LOOP;
296 RETURN maxscore;
297 END;
298 FUNCTION GET_CONTACTS_SCORE (
299 x_matchidx OUT NUMBER
300 ) RETURN NUMBER IS
301 maxscore NUMBER := 0;
302 l_current_score NUMBER := 0;
303 BEGIN
304 x_matchidx := 0;
305 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
306 RETURN l_current_score;
307 END IF;
308 FOR J IN 1..g_contact_stage_list.COUNT LOOP
309 l_current_score := 0;
310 IF maxscore<l_current_score THEN
311 maxscore:=l_current_score;
312 x_matchidx:=J;
313 END IF;
314 END LOOP;
315 RETURN maxscore;
316 END;
317 FUNCTION GET_CONTACT_POINTS_SCORE (
318 x_matchidx OUT NUMBER
319 ) RETURN NUMBER IS
320 maxscore NUMBER := 0;
321 l_current_score NUMBER := 0;
322 BEGIN
323 x_matchidx := 0;
324 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
325 RETURN l_current_score;
326 END IF;
327 FOR J IN 1..g_contact_pt_stage_list.COUNT LOOP
328 l_current_score := 0;
329 IF maxscore<l_current_score THEN
330 maxscore:=l_current_score;
331 x_matchidx:=J;
332 END IF;
333 END LOOP;
334 RETURN maxscore;
335 END;
336 FUNCTION get_attrib_val(
337 p_record_id NUMBER
338 ,p_entity VARCHAR2
339 ,p_attribute VARCHAR2
340 ) RETURN VARCHAR2 IS
341 l_matched_value VARCHAR2(2000);
342 l_party_type VARCHAR2(255);
343 BEGIN
344 IF p_entity = 'PARTY' THEN
345 NULL;
346 END IF;
347 IF p_entity = 'PARTY_SITES' THEN
348 IF p_attribute = 'ADDRESS' THEN
349 l_matched_value := HZ_PARTY_ACQUIRE.get_address (p_record_id, p_entity,'ADDRESS','Y');
350 RETURN l_matched_value;
351 END IF;
352 IF p_attribute = 'CITY' THEN
353 BEGIN
354 SELECT HZ_LOCATIONS.CITY
355 INTO l_matched_value
356 FROM HZ_PARTY_SITES, HZ_LOCATIONS
357 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
358 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
359 EXCEPTION
360 WHEN NO_DATA_FOUND THEN
361 l_matched_value := 'Err';
362 END;
363 RETURN l_matched_value;
364 END IF;
365 IF p_attribute = 'POSTAL_CODE' THEN
366 BEGIN
367 SELECT HZ_LOCATIONS.POSTAL_CODE
368 INTO l_matched_value
369 FROM HZ_PARTY_SITES, HZ_LOCATIONS
370 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
371 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
372 EXCEPTION
373 WHEN NO_DATA_FOUND THEN
374 l_matched_value := 'Err';
375 END;
376 RETURN l_matched_value;
377 END IF;
378 IF p_attribute = 'PROVINCE' THEN
379 BEGIN
380 SELECT HZ_LOCATIONS.PROVINCE
381 INTO l_matched_value
382 FROM HZ_PARTY_SITES, HZ_LOCATIONS
383 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
384 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
385 EXCEPTION
386 WHEN NO_DATA_FOUND THEN
387 l_matched_value := 'Err';
388 END;
389 RETURN l_matched_value;
390 END IF;
391 IF p_attribute = 'STATE' THEN
392 BEGIN
393 SELECT HZ_LOCATIONS.STATE
394 INTO l_matched_value
395 FROM HZ_PARTY_SITES, HZ_LOCATIONS
396 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
397 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
398 EXCEPTION
399 WHEN NO_DATA_FOUND THEN
400 l_matched_value := 'Err';
401 END;
402 RETURN l_matched_value;
403 END IF;
404 IF p_attribute = 'COUNTY' THEN
405 BEGIN
406 SELECT HZ_LOCATIONS.COUNTY
407 INTO l_matched_value
408 FROM HZ_PARTY_SITES, HZ_LOCATIONS
409 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
410 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
411 EXCEPTION
412 WHEN NO_DATA_FOUND THEN
413 l_matched_value := 'Err';
414 END;
415 RETURN l_matched_value;
416 END IF;
417 IF p_attribute = 'COUNTRY' THEN
418 BEGIN
419 SELECT HZ_LOCATIONS.COUNTRY
420 INTO l_matched_value
421 FROM HZ_PARTY_SITES, HZ_LOCATIONS
422 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
423 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
424 EXCEPTION
425 WHEN NO_DATA_FOUND THEN
426 l_matched_value := 'Err';
427 END;
428 RETURN l_matched_value;
429 END IF;
430 NULL;
431 END IF;
432 IF p_entity = 'CONTACTS' THEN
433 NULL;
434 END IF;
435 IF p_entity = 'CONTACT_POINTS' THEN
436 NULL;
437 END IF;
438 END;
439 PROCEDURE INSERT_PARTY_SCORE (
440 p_party_id IN NUMBER
441 ,p_record_id IN NUMBER
442 ,p_search_ctx_id IN NUMBER
443 ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type
444 ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type
445 ,p_idx IN NUMBER) IS
446 l_current_score NUMBER:=0;
447 l_score NUMBER;
448 l_attrib_value VARCHAR2(2000);
449 BEGIN
450 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
451 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
452 END IF;
453 NULL;
454 END;
455 PROCEDURE INSERT_PARTY_SITES_SCORE (
456 p_party_id IN NUMBER
457 ,p_record_id IN NUMBER
458 ,p_search_ctx_id IN NUMBER
459 ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type
460 ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type
461 ,p_table_TX3 VARCHAR2
462 ,p_table_TX4 VARCHAR2
463 ,p_table_TX9 VARCHAR2
464 ,p_table_TX10 VARCHAR2
465 ,p_table_TX11 VARCHAR2
466 ,p_table_TX12 VARCHAR2
467 ,p_table_TX13 VARCHAR2
468 ,p_table_TX14 VARCHAR2
469 ,p_table_TX15 VARCHAR2
470 ,p_table_TX20 VARCHAR2
471 ,p_table_TX21 VARCHAR2
472 ,p_table_TX22 VARCHAR2
473 ,p_idx IN NUMBER) IS
474 l_current_score NUMBER:=0;
475 l_score NUMBER;
476 l_attrib_value VARCHAR2(2000);
477 BEGIN
478 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
479 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SITES_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
480 END IF;
481 l_score :=0;
482 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX3, p_table_TX3,(50000*(p_idx-1)+66)) THEN
483 l_score :=50;
484 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
485 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
486 END IF;
487 ELSIF l_current_score<40 AND
488 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX4, p_table_TX4,(50000*(p_idx-1)+67)) THEN
489 l_score :=40;
490 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
491 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
492 END IF;
493 END IF;
494 IF l_score>0 THEN
495 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
496 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
497 END IF;
498 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','ADDRESS');
499 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
500 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
501 END IF;
502 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
503 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
504 VALUES (
505 p_party_id,p_record_id,p_search_ctx_id,'ADDRESS',
506 'PARTY_SITES', p_search_rec.ADDRESS,
507 l_attrib_value,l_score);
508 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
509 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
510 END IF;
511 END IF;
512 l_score :=0;
513 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX9, p_table_TX9,(50000*(p_idx-1)+72)) THEN
514 l_score :=20;
515 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
516 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
517 END IF;
518 ELSIF l_current_score<16 AND
519 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX10, p_table_TX10,(50000*(p_idx-1)+73)) THEN
520 l_score :=16;
521 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
522 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
523 END IF;
524 END IF;
525 IF l_score>0 THEN
526 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
527 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
528 END IF;
529 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','CITY');
530 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
531 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
532 END IF;
533 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
534 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
535 VALUES (
536 p_party_id,p_record_id,p_search_ctx_id,'CITY',
537 'PARTY_SITES', p_search_rec.CITY,
538 l_attrib_value,l_score);
539 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
540 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
541 END IF;
542 END IF;
543 l_score :=0;
544 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX11, p_table_TX11,(50000*(p_idx-1)+74)) THEN
545 l_score :=25;
546 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
547 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
548 END IF;
549 END IF;
550 IF l_score>0 THEN
551 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
552 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
553 END IF;
554 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','POSTAL_CODE');
555 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
556 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
557 END IF;
558 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
559 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
560 VALUES (
561 p_party_id,p_record_id,p_search_ctx_id,'POSTAL_CODE',
562 'PARTY_SITES', p_search_rec.POSTAL_CODE,
563 l_attrib_value,l_score);
564 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
565 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
566 END IF;
567 END IF;
568 l_score :=0;
569 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX12, p_table_TX12,(50000*(p_idx-1)+75)) THEN
570 l_score :=15;
571 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
572 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
573 END IF;
574 ELSIF l_current_score<12 AND
575 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX13, p_table_TX13,(50000*(p_idx-1)+76)) THEN
576 l_score :=12;
577 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
578 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
579 END IF;
580 END IF;
581 IF l_score>0 THEN
582 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
583 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
584 END IF;
585 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','PROVINCE');
586 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
587 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
588 END IF;
589 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
590 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
591 VALUES (
592 p_party_id,p_record_id,p_search_ctx_id,'PROVINCE',
593 'PARTY_SITES', p_search_rec.PROVINCE,
594 l_attrib_value,l_score);
595 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
596 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
597 END IF;
598 END IF;
599 l_score :=0;
600 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX14, p_table_TX14,(50000*(p_idx-1)+77)) THEN
601 l_score :=15;
602 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
603 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
604 END IF;
605 ELSIF l_current_score<12 AND
606 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX15, p_table_TX15,(50000*(p_idx-1)+78)) THEN
607 l_score :=12;
608 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
609 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
610 END IF;
611 END IF;
612 IF l_score>0 THEN
613 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
614 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
615 END IF;
616 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','STATE');
617 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
618 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
619 END IF;
620 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
621 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
622 VALUES (
623 p_party_id,p_record_id,p_search_ctx_id,'STATE',
624 'PARTY_SITES', p_search_rec.STATE,
625 l_attrib_value,l_score);
626 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
627 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
628 END IF;
629 END IF;
630 l_score :=0;
631 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX20, p_table_TX20,(50000*(p_idx-1)+83)) THEN
632 l_score :=15;
633 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
634 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
635 END IF;
636 ELSIF l_current_score<12 AND
637 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX21, p_table_TX21,(50000*(p_idx-1)+84)) THEN
638 l_score :=12;
639 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
640 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
641 END IF;
642 END IF;
643 IF l_score>0 THEN
644 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
645 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
646 END IF;
647 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','COUNTY');
648 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
649 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
650 END IF;
651 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
652 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
653 VALUES (
654 p_party_id,p_record_id,p_search_ctx_id,'COUNTY',
655 'PARTY_SITES', p_search_rec.COUNTY,
656 l_attrib_value,l_score);
657 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
658 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
659 END IF;
660 END IF;
661 l_score :=0;
662 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX22, p_table_TX22,(50000*(p_idx-1)+85)) THEN
663 l_score :=5;
664 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
665 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
666 END IF;
667 END IF;
668 IF l_score>0 THEN
669 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
670 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
671 END IF;
672 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','COUNTRY');
673 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
674 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
675 END IF;
676 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
677 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
678 VALUES (
679 p_party_id,p_record_id,p_search_ctx_id,'COUNTRY',
680 'PARTY_SITES', p_search_rec.COUNTRY,
681 l_attrib_value,l_score);
682 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
683 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
684 END IF;
685 END IF;
686 NULL;
687 END;
688 PROCEDURE INSERT_CONTACTS_SCORE (
689 p_party_id IN NUMBER
690 ,p_record_id IN NUMBER
691 ,p_search_ctx_id IN NUMBER
692 ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type
693 ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type
694 ,p_idx IN NUMBER) IS
695 l_current_score NUMBER:=0;
696 l_score NUMBER;
697 l_attrib_value VARCHAR2(2000);
698 BEGIN
699 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
700 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
701 END IF;
702 NULL;
703 END;
704 PROCEDURE INSERT_CONTACT_POINTS_SCORE (
705 p_party_id IN NUMBER
706 ,p_record_id IN NUMBER
707 ,p_search_ctx_id IN NUMBER
708 ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type
709 ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type
710 ,p_idx IN NUMBER) IS
711 l_current_score NUMBER:=0;
712 l_score NUMBER;
713 l_attrib_value VARCHAR2(2000);
714 BEGIN
715 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
716 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACT_POINTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
717 END IF;
718 NULL;
719 END;
720
721 /************************************************
722 This procedure populates global cond record
723 for the PARTY Entity
724 ************************************************/
725
726 PROCEDURE POP_PARTY_COND_REC(
727 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type
728 ) IS
729 BEGIN
730 NULL ;
731 EXCEPTION
732 WHEN OTHERS THEN
733 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
734 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_COND_REC');
735 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
736 FND_MSG_PUB.ADD;
737 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
738 END;
739
740
741 /************************************************
742 This procedure populates global cond record
743 for the PARTY_SITES Entity
744 ************************************************/
745
746 PROCEDURE POP_PARTY_SITES_COND_REC(
747 p_search_list IN HZ_PARTY_SEARCH.party_site_list
748 ) IS
749 BEGIN
750 ---------POPULATE THE GLOBAL WORD CONDITION REC FOR PARTY_SITES-------------
751 ------ Populate global condition record only if search list is not empty -----------
752 IF p_search_list.COUNT > 0
753 THEN
754 HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec (36,p_search_list(1).COUNTRY);
755 END IF ;
756 EXCEPTION
757 WHEN OTHERS THEN
758 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
759 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_SITES_COND_REC');
760 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
761 FND_MSG_PUB.ADD;
762 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
763 END;
764
765
766 /************************************************
767 This procedure populates global cond record
768 for the CONTACTS Entity
769 ************************************************/
770
771 PROCEDURE POP_CONTACTS_COND_REC(
772 p_search_list IN HZ_PARTY_SEARCH.contact_list
773 ) IS
774 BEGIN
775 NULL ;
776 EXCEPTION
777 WHEN OTHERS THEN
778 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
779 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACTS_COND_REC');
780 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
781 FND_MSG_PUB.ADD;
782 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
783 END;
784
785
786 /************************************************
787 This procedure populates global cond record
788 for the CONTACT_POINTS Entity
789 ************************************************/
790
791 PROCEDURE POP_CONTACT_POINTS_COND_REC(
792 p_search_list IN HZ_PARTY_SEARCH.contact_point_list
793 ) IS
794 BEGIN
795 NULL ;
796 EXCEPTION
797 WHEN OTHERS THEN
798 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
799 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACT_POINTS_COND_REC');
800 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
801 FND_MSG_PUB.ADD;
802 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
803 END;
804
805 PROCEDURE init_score_context (
806 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=
807 HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
808 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=
809 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
810 p_contact_list IN HZ_PARTY_SEARCH.contact_list:=
811 HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
812 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=
813 HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST
814 ) IS
815 l_dummy NUMBER;
816 BEGIN
817 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
818 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
819 hz_utility_v2pub.debug(p_message=>'calling the procedure init_score_context',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
820 END IF;
821 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
822 hz_utility_v2pub.debug(p_message=>'In init_score_context calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
823 END IF;
824 -- Transform search criteria
825 HZ_TRANS_PKG.clear_globals;
826 MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);
827 MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);
828 MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);
829 MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);
830
831 END;
832 FUNCTION init_search(
833 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=
834 HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
835 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=
836 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
837 p_contact_list IN HZ_PARTY_SEARCH.contact_list:=
838 HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
839 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=
840 HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,
841 p_match_type IN VARCHAR2,
842 x_party_max_score OUT NUMBER,
843 x_ps_max_score OUT NUMBER,
844 x_contact_max_score OUT NUMBER,
845 x_cpt_max_score OUT NUMBER
846 ) RETURN NUMBER IS
847 l_entered_max_score NUMBER:=0;
848 l_ps_entered_max_score NUMBER:=0;
849 l_ct_entered_max_score NUMBER:=0;
850 l_cpt_entered_max_score NUMBER:=0;
851 vlist vlisttype;
852 maxscore HZ_PARTY_SEARCH.IDList;
853 l_name VARCHAR2(200);
854 l_idx NUMBER;
855 l_num NUMBER;
856 total NUMBER;
857 threshold NUMBER;
858 BEGIN
859 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
860 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
861 hz_utility_v2pub.debug(p_message=>'calling the function init_search',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
862 END IF;
863 IF NOT check_prim_cond (p_party_search_rec,
864 p_party_site_list,
865 p_contact_list,
866 p_contact_point_list) THEN
867 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_PRIMARY_COND');
868 FND_MSG_PUB.ADD;
869 RAISE FND_API.G_EXC_ERROR;
870 END IF;
871 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
872 hz_utility_v2pub.debug(p_message=>'In init_search calling util package set_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
873 END IF;
874 HZ_DQM_SEARCH_UTIL.set_score;
875 g_mappings.DELETE;
876 g_party_site_stage_list.DELETE;
877 g_contact_stage_list.DELETE;
878 g_contact_pt_stage_list.DELETE;
879 call_order.DELETE;
880 call_max_score.DELETE;
881 HZ_DQM_SEARCH_UTIL.new_search;
882 HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);
883 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
884
885 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
886 hz_utility_v2pub.debug(p_message=>'In init_search calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
887 END IF;
888 -- Transform search criteria
889 POP_PARTY_COND_REC(p_party_search_rec);
890
891 POP_PARTY_SITES_COND_REC(p_party_site_list);
892
893 POP_CONTACTS_COND_REC(p_contact_list);
894
895 POP_CONTACT_POINTS_COND_REC(p_contact_point_list);
896
897 MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);
898 MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);
899 MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);
900 MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);
901
902
903 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
904 hz_utility_v2pub.debug(p_message=>'In init_search determining call order of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
905 END IF;
906 l_idx := l_entered_max_score+1;
907 vlist (l_idx) := 'PARTY';
908 maxscore (l_idx) := l_entered_max_score;
909 l_idx := l_ps_entered_max_score+1;
910 WHILE vlist.EXISTS(l_idx) LOOP
911 l_idx := l_idx+1;
912 END LOOP;
913 vlist (l_idx) := 'PARTY_SITE';
914 maxscore (l_idx) := l_ps_entered_max_score;
915
916 l_idx := l_ct_entered_max_score+1;
917 WHILE vlist.EXISTS(l_idx) LOOP
918 l_idx := l_idx+1;
919 END LOOP;
920 vlist (l_idx) := 'CONTACT';
921 maxscore (l_idx) := l_ct_entered_max_score;
922
923 l_idx := l_cpt_entered_max_score+1;
924 WHILE vlist.EXISTS(l_idx) LOOP
925 l_idx := l_idx+1;
926 END LOOP;
927 vlist (l_idx) := 'CONTACT_POINT';
928 maxscore (l_idx) := l_cpt_entered_max_score;
929
930 l_num := 1;
931 l_idx := vlist.LAST;
932 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
933 hz_utility_v2pub.debug(p_message=>'Call order is the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
934 END IF;
935 WHILE l_idx IS NOT NULL LOOP
936 call_order(l_num) := vlist(l_idx);
937 call_max_score(l_num) := maxscore(l_idx);
938 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
939 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
940 END IF;
941 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
942 hz_utility_v2pub.debug(p_message=>'l_num = '||l_num,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
943 hz_utility_v2pub.debug(p_message=>'entity = '||vlist(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
944 hz_utility_v2pub.debug(p_message=>'call_max_score for entity = '||maxscore(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
945 END IF;
946 l_idx := vlist.PRIOR(l_idx);
947 l_num := l_num+1;
948 END LOOP;
949 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
950 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
951 END IF;
952 call_order(5):='NONE';
953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
954 hz_utility_v2pub.debug(p_message=>'In init_search determining call type of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
955 END IF;
956 IF p_match_type = ' OR ' THEN
957 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
958 hz_utility_v2pub.debug(p_message=>'This is an OR Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
959 END IF;
960 threshold := 85;
961 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
962 hz_utility_v2pub.debug(p_message=>'This is a Duplicate Identification Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
963 END IF;
964 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
965 hz_utility_v2pub.debug(p_message=>'Threshold defined in Match Rule is '||threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
966 END IF;
967 l_idx := vlist.FIRST;
968 total := 0;
969 l_num := 4;
970 WHILE l_idx IS NOT NULL LOOP
971 total := total+maxscore(l_idx);
972 IF total<threshold THEN
973 call_type(l_num) := 'AND';
974 ELSE
975 call_type(l_num) := 'OR';
976 END IF;
977 l_idx := vlist.NEXT(l_idx);
978 l_num := l_num-1;
979 END LOOP;
980 ELSE
981 call_type(1) := 'OR';
982 call_type(2) := 'AND';
983 call_type(3) := 'AND';
984 call_type(4) := 'AND';
985 END IF;
986 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
987 hz_utility_v2pub.debug(p_message=>'Call types are the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
988 END IF;
989 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
990 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
991 END IF;
992 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
993 hz_utility_v2pub.debug(p_message=>'call type 1 = '||call_type(1),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
994 hz_utility_v2pub.debug(p_message=>'call type 2 = '||call_type(2),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
995 hz_utility_v2pub.debug(p_message=>'call type 3 = '||call_type(3),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
996 hz_utility_v2pub.debug(p_message=>'call type 4 = '||call_type(4),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
997 END IF;
998 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
999 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1000 END IF;
1001 x_party_max_score := l_entered_max_score;
1002 x_ps_max_score := l_ps_entered_max_score;
1003 x_contact_max_score := l_ct_entered_max_score;
1004 x_cpt_max_score := l_cpt_entered_max_score;
1005 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1006 hz_utility_v2pub.debug(p_message=>'init_search returned with the following max scores at each level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1007 END IF;
1008 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1009 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1010 END IF;
1011 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1012 hz_utility_v2pub.debug(p_message=>'entered party max score = '||l_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1013 hz_utility_v2pub.debug(p_message=>'entered paty site max score = '||l_ps_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1014 hz_utility_v2pub.debug(p_message=>'entered contact max score = '||l_ct_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1015 hz_utility_v2pub.debug(p_message=>'entered contact point max score = '||l_cpt_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1016 END IF;
1017 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1018 hz_utility_v2pub.debug(p_message=>'entered total score = '||(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1019 END IF;
1020 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1021 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1022 END IF;
1023 RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);
1024 END;
1025 FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2,
1026 p_denorm_str VARCHAR2,
1027 p_party_max_score NUMBER,
1028 p_denorm_max_score NUMBER,
1029 p_non_denorm_max_score NUMBER,
1030 p_threshold NUMBER) RETURN VARCHAR2 IS
1031 l_party_contains_str VARCHAR2(32000);
1032 l_party_filter VARCHAR2(1) := null;
1033 l_prim_temp VARCHAR2(4000);
1034 l_denorm_str VARCHAR2(4000);
1035 BEGIN
1036 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1037 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1038 hz_utility_v2pub.debug(p_message=>'calling the function init_party_query',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1039 END IF;
1040 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1041 hz_utility_v2pub.debug(p_message=>'passed in p_match_str is '||p_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1042 END IF;
1043 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1044 hz_utility_v2pub.debug(p_message=>'passed in p_denorm_str is '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1045 END IF;
1046 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1047 hz_utility_v2pub.debug(p_message=>'passed in p_denorm_max_score is '||p_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1048 END IF;
1049 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1050 hz_utility_v2pub.debug(p_message=>'passed in p_non_denorm_max_score is '||p_non_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1051 END IF;
1052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1053 hz_utility_v2pub.debug(p_message=>'passed in p_threshold is '||p_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1054 END IF;
1055 IF p_party_max_score<=p_threshold OR p_match_str=' AND ' THEN
1056 l_denorm_str := NULL;
1057 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1058 hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1059 END IF;
1060 ELSE
1061 l_denorm_str := p_denorm_str;
1062 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1063 hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1064 END IF;
1065 END IF;
1066 IF lengthb(l_party_contains_str) > 4000 THEN
1067 FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1068 FND_MESSAGE.SET_TOKEN('ENTITY','PARTY');
1069 FND_MSG_PUB.ADD;
1070 RAISE FND_API.G_EXC_ERROR;
1071 END IF;
1072 IF (p_match_str = ' AND ' OR p_party_max_score<p_threshold) AND l_party_contains_str IS NOT NULL AND p_denorm_str IS NOT NULL THEN
1073 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1074 hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is an AND between these strings ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1075 END IF;
1076 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1077 hz_utility_v2pub.debug(p_message=>'l_party_contains_str = '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1078 END IF;
1079 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1080 hz_utility_v2pub.debug(p_message=>'p_denorm_str = '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1081 END IF;
1082 RETURN '('||l_party_contains_str||') AND ('||p_denorm_str||')';
1083 ELSE
1084 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1085 hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1086 hz_utility_v2pub.debug(p_message=>'l_party_contains_str',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1087 END IF;
1088 RETURN l_party_contains_str;
1089 END IF;
1090 END;
1091 FUNCTION INIT_PARTY_SITES_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1092 l_contains_str VARCHAR2(32000);
1093 l_contains_str_temp VARCHAR2(32000);
1094 l_den_contains_str VARCHAR2(32000);
1095 l_den_contains_str_temp VARCHAR2(32000);
1096 l_filter_str VARCHAR2(4000) := null;
1097 l_prim_temp VARCHAR2(4000) := null;
1098 l_prim_temp_den VARCHAR2(4000) := null;
1099 BEGIN
1100 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1101 hz_utility_v2pub.debug(p_message=>'INIT_PARTY_SITES_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1102 END IF;
1103 x_denorm_str := NULL;
1104
1105 -- Dynamic setup of party site contains str
1106 --
1107 -- For each primary transformation add to intermedia query if it
1108 -- is not null
1109 FOR I IN 1..g_party_site_stage_list.COUNT LOOP
1110 l_contains_str_temp := null;
1111 l_den_contains_str_temp := null;
1112 l_filter_str := null;
1113
1114 -- Setup query string for ADDRESS
1115 l_prim_temp := null;
1116 l_prim_temp_den := null;
1117 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE SPECIAL + WRADDRESS
1118 g_party_site_stage_list(I).TX4,'A27',l_prim_temp);
1119 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1120
1121 -- Setup query string for CITY
1122 l_prim_temp := null;
1123 l_prim_temp_den := null;
1124 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1125 g_party_site_stage_list(I).TX10,'A29',l_prim_temp);
1126 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1127 g_party_site_stage_list(I).TX10,'D_PS',l_prim_temp_den);
1128 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1129 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1130
1131 -- Setup query string for POSTAL_CODE
1132 l_prim_temp := null;
1133 l_prim_temp_den := null;
1134 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1135 g_party_site_stage_list(I).TX11,'A30',l_prim_temp);
1136 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1137 g_party_site_stage_list(I).TX11,'D_PS',l_prim_temp_den);
1138 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1139 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1140
1141 -- Setup query string for PROVINCE
1142 l_prim_temp := null;
1143 l_prim_temp_den := null;
1144 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1145 g_party_site_stage_list(I).TX13,'A31',l_prim_temp);
1146 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1147 g_party_site_stage_list(I).TX13,'D_PS',l_prim_temp_den);
1148 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1149 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1150
1151 -- Setup query string for STATE
1152 l_prim_temp := null;
1153 l_prim_temp_den := null;
1154 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE + WRSTATE
1155 g_party_site_stage_list(I).TX15,'A32',l_prim_temp);
1156 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE + WRSTATE
1157 g_party_site_stage_list(I).TX15,'D_PS',l_prim_temp_den);
1158 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1159 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1160
1161 -- Setup query string for COUNTY
1162 l_prim_temp := null;
1163 l_prim_temp_den := null;
1164 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1165 g_party_site_stage_list(I).TX21,'A35',l_prim_temp);
1166 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE
1167 g_party_site_stage_list(I).TX21,'D_PS',l_prim_temp_den);
1168 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1169 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1170
1171 -- Setup query string for COUNTRY
1172 l_prim_temp := null;
1173 l_prim_temp_den := null;
1174 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
1175 g_party_site_stage_list(I).TX22,'A36',l_prim_temp);
1176 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
1177 g_party_site_stage_list(I).TX22,'D_PS',l_prim_temp_den);
1178 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1179 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1180
1181 HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, l_filter_str, l_contains_str);
1182 HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, null, l_den_contains_str);
1183 END LOOP;
1184 -- Add the search criteria to query string
1185 IF lengthb(l_contains_str) > 4000 THEN
1186 FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1187 FND_MESSAGE.SET_TOKEN('ENTITY','PARTY_SITES');
1188 FND_MSG_PUB.ADD;
1189 RAISE FND_API.G_EXC_ERROR;
1190 END IF;
1191 x_denorm_str := l_den_contains_str;
1192 RETURN l_contains_str;
1193 END;
1194
1195 FUNCTION INIT_CONTACTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1196 l_contains_str VARCHAR2(32000);
1197 l_contains_str_temp VARCHAR2(32000);
1198 l_den_contains_str VARCHAR2(32000);
1199 l_den_contains_str_temp VARCHAR2(32000);
1200 l_filter_str VARCHAR2(4000) := null;
1201 l_prim_temp VARCHAR2(4000) := null;
1202 l_prim_temp_den VARCHAR2(4000) := null;
1203 BEGIN
1204 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1205 hz_utility_v2pub.debug(p_message=>'INIT_CONTACTS_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1206 END IF;
1207 x_denorm_str := NULL;
1208 RETURN NULL;
1209 END;
1210
1211 FUNCTION INIT_CONTACT_POINTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1212 l_contains_str VARCHAR2(32000);
1213 l_contains_str_temp VARCHAR2(32000);
1214 l_den_contains_str VARCHAR2(32000);
1215 l_den_contains_str_temp VARCHAR2(32000);
1216 l_filter_str VARCHAR2(4000) := null;
1217 l_prim_temp VARCHAR2(4000) := null;
1218 l_prim_temp_den VARCHAR2(4000) := null;
1219 BEGIN
1220 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1221 hz_utility_v2pub.debug(p_message=>'INIT_CONTACT_POINTS_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1222 END IF;
1223 x_denorm_str := NULL;
1224 RETURN NULL;
1225 END;
1226
1227 PROCEDURE open_party_cursor_direct (
1228 p_dup_party_id NUMBER,
1229 p_restrict_sql VARCHAR2,
1230 p_match_str VARCHAR2,
1231 p_search_merged VARCHAR2,
1232 p_party_contains_str VARCHAR2,
1233 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1234 l_sqlstr VARCHAR2(4000);
1235 l_search_merged VARCHAR2(1);
1236 BEGIN
1237 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1238 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1239 hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor direct',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1240 END IF;
1241 IF (p_search_merged is null) then
1242 l_search_merged := 'N';
1243 ELSE
1244 l_search_merged := p_search_merged;
1245 END IF;
1246 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1247 hz_utility_v2pub.debug(p_message=>'Search Merged Flag - '||l_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1248 END IF;
1249 IF p_restrict_sql IS NULL AND NOT g_other_party_level_attribs AND NOT (p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1) THEN
1250 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1251 hz_utility_v2pub.debug(p_message=>'Restrict SQL is NULL and other conditions met to OPEN x_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1252 END IF;
1253 OPEN x_cursor FOR
1254 SELECT PARTY_ID
1255 FROM hz_staged_parties
1256 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
1257 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
1258 AND( (l_search_merged ='Y' )
1259 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
1260 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
1261 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);
1262 ELSE
1263 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1264 hz_utility_v2pub.debug(p_message=>'Restrict SQL is NOT NULL OR other conditions not met, Else Part',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1265 END IF;
1266 l_sqlstr := 'SELECT PARTY_ID FROM hz_staged_parties stage ';
1267 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
1268 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
1269 IF l_search_merged = 'N' THEN
1270 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
1271 ELSIF l_search_merged = 'I' THEN
1272 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
1273 END IF;
1274 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
1275 IF g_other_party_level_attribs THEN
1276 NULL;
1277 END IF;
1278 IF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1279 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1280 hz_utility_v2pub.debug(p_message=>'p_party_contains_str string is NOT NULL and other conditions met',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1281 END IF;
1282 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1283 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX10||'' %'' ';
1284 l_sqlstr := l_sqlstr || ' )) ';
1285 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1286 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX11||'' %'' ';
1287 l_sqlstr := l_sqlstr || ' )) ';
1288 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1289 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX13||'' %'' ';
1290 l_sqlstr := l_sqlstr || ' )) ';
1291 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1292 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX15||'' %'' ';
1293 l_sqlstr := l_sqlstr || ' )) ';
1294 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1295 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX21||'' %'' ';
1296 l_sqlstr := l_sqlstr || ' )) ';
1297 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1298 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX22||'' %'' ';
1299 l_sqlstr := l_sqlstr || ' )) ';
1300 END IF;
1301 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1302 hz_utility_v2pub.debug(p_message=>'l_sqlstr before appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1303 END IF;
1304 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1305 hz_utility_v2pub.debug(p_message=>'l_sqlstr is - '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1306 END IF;
1307 IF p_restrict_sql IS NOT NULL THEN
1308 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
1309 END IF;
1310 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1311 hz_utility_v2pub.debug(p_message=>'l_sqlstr after appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1312 END IF;
1313 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1314 hz_utility_v2pub.debug(p_message=>'l_sqlstr is - '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1315 END IF;
1316 IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1317 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1318 hz_utility_v2pub.debug(p_message=>'IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1319 END IF;
1320 OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1321 ,g_party_site_stage_list(1).TX10
1322 ,g_party_site_stage_list(1).TX10
1323 ,g_party_site_stage_list(1).TX11
1324 ,g_party_site_stage_list(1).TX11
1325 ,g_party_site_stage_list(1).TX13
1326 ,g_party_site_stage_list(1).TX13
1327 ,g_party_site_stage_list(1).TX15
1328 ,g_party_site_stage_list(1).TX15
1329 ,g_party_site_stage_list(1).TX21
1330 ,g_party_site_stage_list(1).TX21
1331 ,g_party_site_stage_list(1).TX22
1332 ,g_party_site_stage_list(1).TX22
1333 ;
1334 ELSIF g_other_party_level_attribs THEN
1335 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1336 hz_utility_v2pub.debug(p_message=>'ELSIF g_other_party_level_attribs THEN',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1337 END IF;
1338 OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1339 ;
1340 ELSIF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1341 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1342 hz_utility_v2pub.debug(p_message=>'ELSIF p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1343 END IF;
1344 OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1345 ,g_party_site_stage_list(1).TX10
1346 ,g_party_site_stage_list(1).TX10
1347 ,g_party_site_stage_list(1).TX11
1348 ,g_party_site_stage_list(1).TX11
1349 ,g_party_site_stage_list(1).TX13
1350 ,g_party_site_stage_list(1).TX13
1351 ,g_party_site_stage_list(1).TX15
1352 ,g_party_site_stage_list(1).TX15
1353 ,g_party_site_stage_list(1).TX21
1354 ,g_party_site_stage_list(1).TX21
1355 ,g_party_site_stage_list(1).TX22
1356 ,g_party_site_stage_list(1).TX22
1357 ;
1358 ELSE
1359 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1360 hz_utility_v2pub.debug(p_message=>'ELSE code fork',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1361 END IF;
1362 OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id;
1363 END IF;
1364 END IF;
1365 END;
1366 PROCEDURE open_party_cursor(
1367 p_dup_party_id NUMBER,
1368 p_restrict_sql VARCHAR2,
1369 p_contains_str VARCHAR2,
1370 p_search_ctx_id NUMBER,
1371 p_match_str VARCHAR2,
1372 p_search_merged VARCHAR2,
1373 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1374 l_sqlstr VARCHAR2(4000);
1375 l_hint VARCHAR2(100);
1376 l_check NUMBER;
1377 l_search_merged VARCHAR2(1);
1378 BEGIN
1379 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1380 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1381 hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1382 END IF;
1383 IF (p_search_merged is null) then
1384 l_search_merged := 'N';
1385 ELSE
1386 l_search_merged := p_search_merged;
1387 END IF;
1388 IF p_contains_str IS NULL THEN
1389 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1390 hz_utility_v2pub.debug(p_message=>'part contains string is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1391 END IF;
1392 OPEN x_cursor FOR
1393 SELECT PARTY_ID
1394 FROM HZ_STAGED_PARTIES stage
1395 WHERE PARTY_ID = p_dup_party_id;
1396 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1397 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1398 hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1399 END IF;
1400 IF p_search_ctx_id IS NULL THEN
1401 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1402 hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1403 END IF;
1404 OPEN x_cursor FOR
1405 SELECT /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ PARTY_ID
1406 FROM HZ_STAGED_PARTIES stage
1407 WHERE contains( concat_col, p_contains_str)>0
1408 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = stage.TX36))
1409 AND( (l_search_merged ='Y' )
1410 OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))
1411 OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A')) )
1412 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1413 ELSE
1414 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1415 hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1416 END IF;
1417 OPEN x_cursor FOR
1418 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID
1419 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage
1420 WHERE contains( concat_col, p_contains_str)>0
1421 AND d.SEARCH_CONTEXT_ID=p_search_ctx_id
1422 AND d.party_id = stage.party_id
1423 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = stage.TX36))
1424 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1425 AND( (l_search_merged ='Y' )
1426 OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))
1427 OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A')) );
1428 END IF;
1429 ELSE
1430 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1431 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1432 END IF;
1433 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1434 IF (l_check > 0 ) THEN
1435 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1436 hz_utility_v2pub.debug(p_message=>'Restrict sql has a Selective Hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1437 END IF;
1438 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */';
1439 ELSE
1440 l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */';
1441 END IF;
1442 IF p_search_ctx_id IS NULL THEN
1443 l_sqlstr := 'SELECT ' || l_hint || ' PARTY_ID '||
1444 ' FROM HZ_STAGED_PARTIES stage'||
1445 ' WHERE contains( concat_col, :cont)>0'||
1446 ' AND ((:TX36 IS NULL OR :TX36||'' '' = stage.TX36))'||
1447 ' AND ('||p_restrict_sql||')' ||
1448 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1449 IF l_search_merged = 'Y' THEN
1450 l_sqlstr := l_sqlstr ;
1451 ELSIF l_search_merged = 'I' THEN
1452 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';
1453 ELSE
1454 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';
1455 END IF;
1456 output_long_strings('----------------------------------------------------------');
1457 output_long_strings('Party Contains String = '||p_contains_str);
1458 output_long_strings('Restrict Sql = '||p_restrict_sql);
1459 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1460 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1461 ,p_dup_party_id, p_dup_party_id;
1462 END IF;
1463 END IF;
1464 exception
1465 when others then
1466 if (instrb(SQLERRM,'DRG-51030')>0) then
1467 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1468 FND_MSG_PUB.ADD;
1469 RAISE FND_API.G_EXC_ERROR;
1470 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1471 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1472 FND_MSG_PUB.ADD;
1473 RAISE FND_API.G_EXC_ERROR;
1474 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1475 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1476 FND_MSG_PUB.ADD;
1477 RAISE FND_API.G_EXC_ERROR;
1478 else
1479 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1480 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1481 FND_MSG_PUB.ADD;
1482 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1483 end if;
1484 END;
1485
1486 PROCEDURE open_party_site_cursor(
1487 p_dup_party_id NUMBER,
1488 p_party_id NUMBER,
1489 p_restrict_sql VARCHAR2,
1490 p_contains_str VARCHAR2,
1491 p_search_ctx_id NUMBER,
1492 p_search_merged VARCHAR2,
1493 p_search_rel_sites VARCHAR2,
1494 p_person_api VARCHAR2,
1495 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1496 l_sqlstr VARCHAR2(4000);
1497 l_hint VARCHAR2(100);
1498 l_check NUMBER;
1499 l_check_dt NUMBER;
1500 l_search_merged VARCHAR2(1);
1501 l_status_sql VARCHAR2(100);
1502 p_restrict_sql1 VARCHAR2(4000);
1503
1504 BEGIN
1505 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1506 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1507 hz_utility_v2pub.debug(p_message=>'calling the procedure open_party_site_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1508 END IF;
1509 IF (p_search_merged is null) then
1510 l_search_merged := 'N';
1511 ELSE
1512 l_search_merged := p_search_merged;
1513 END IF;
1514 IF p_party_id IS NOT NULL THEN
1515 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1516 hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1517 END IF;
1518 IF p_search_rel_sites = 'N' THEN
1519 OPEN x_cursor FOR
1520 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1521 FROM HZ_STAGED_PARTY_SITES stage
1522 WHERE contains( concat_col, p_contains_str)>0
1523 AND( (l_search_merged ='Y' )
1524 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1525 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1526 AND stage.party_id = p_party_id;
1527 ELSE
1528 OPEN x_cursor FOR
1529 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1530 FROM HZ_STAGED_PARTY_SITES stage
1531 WHERE contains( concat_col, p_contains_str)>0
1532 AND( (l_search_merged ='Y' )
1533 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1534 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1535 AND stage.party_id = p_party_id
1536 UNION
1537 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1538 FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1539 WHERE contains( concat_col, p_contains_str)>0
1540 AND( (l_search_merged ='Y' )
1541 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1542 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1543 AND r.object_id = p_party_id
1544 AND r.subject_id = stage.party_id
1545 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1546 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1547 AND r.relationship_id = oc.party_relationship_id
1548 AND oc.org_contact_id = stage.org_contact_id;
1549 END IF;
1550 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1551 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1552 hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1553 END IF;
1554 IF p_search_ctx_id IS NULL THEN
1555 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1556 hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1557 END IF;
1558 OPEN x_cursor FOR
1559 SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1560 FROM HZ_STAGED_PARTY_SITES stage
1561 WHERE contains( concat_col, p_contains_str)>0
1562 AND EXISTS (
1563 SELECT 1 FROM HZ_STAGED_PARTIES p
1564 WHERE p.PARTY_ID = stage.PARTY_ID
1565 AND( (l_search_merged ='Y' )
1566 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1567 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1568 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1569 AND( (l_search_merged ='Y' )
1570 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1571 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1572 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1573 ELSE
1574 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1575 hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1576 END IF;
1577 IF p_person_api = 'Y' THEN
1578 OPEN x_cursor FOR
1579 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1580 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1581 WHERE contains( concat_col, p_contains_str)>0
1582 AND( (l_search_merged ='Y' )
1583 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1584 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1585 AND d.search_context_id = p_search_ctx_id
1586 AND d.party_id = stage.party_id
1587 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1588 UNION
1589 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1590 FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1591 WHERE contains( concat_col, p_contains_str)>0
1592 AND( (l_search_merged ='Y' )
1593 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1594 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1595 AND d.search_context_id = p_search_ctx_id
1596 AND d.party_id = r.subject_id
1597 AND r.relationship_id = oc.party_relationship_id
1598 AND oc.org_contact_id = stage.org_contact_id
1599 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1600 ELSE
1601 OPEN x_cursor FOR
1602 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22
1603 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1604 WHERE contains( concat_col, p_contains_str)>0
1605 AND( (l_search_merged ='Y' )
1606 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1607 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1608 AND d.search_context_id = p_search_ctx_id
1609 AND d.party_id = stage.party_id
1610 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1611 END IF;
1612 END IF;
1613 ELSE
1614 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1615 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1616 END IF;
1617 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1618 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS');
1619 IF (l_check_dt > 0 ) THEN
1620 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1621 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ps hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1622 END IF;
1623 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */';
1624 ELSIF (l_check > 0 ) THEN
1625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1626 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1627 END IF;
1628 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */';
1629 END IF;
1630 IF l_search_merged = 'Y' THEN
1631 l_status_sql := ' ' ;
1632 ELSIF l_search_merged = 'I' THEN
1633 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1634 ELSE
1635 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1636 END IF;
1637 /*Performance fix for Bug:4589953*/
1638 IF(p_person_api='Y') THEN
1639 IF (l_check > 0 ) THEN
1640 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
1641 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1642 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
1643 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1644 ELSE
1645 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1646 END IF;
1647 l_sqlstr := 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22'||
1648 ' FROM HZ_STAGED_PARTY_SITES stage'||
1649 ' WHERE contains( concat_col, :cont)>0'||
1650 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1651 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1652 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1653 ' AND (ORG_CONTACT_ID IS NULL ' ||
1654 ' AND ('||p_restrict_sql||'))' ||
1655 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1656 ' UNION ' ||
1657 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22'||
1658 ' FROM HZ_STAGED_PARTY_SITES stage'||
1659 ' WHERE contains( concat_col, :cont)>0'||
1660 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1661 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1662 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1663 ' AND ORG_CONTACT_ID IN ' ||
1664 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1665 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1666 ' where stage1.relationship_id = oc.party_relationship_id ' ||
1667 ' and ('||p_restrict_sql1|| ') )' ||
1668 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1669 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1670 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1671 ELSE
1672 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22'||
1673 ' FROM HZ_STAGED_PARTY_SITES stage'||
1674 ' WHERE contains( concat_col, :cont)>0'||
1675 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1676 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1677 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1678 ' AND EXISTS ('||
1679 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1680 ' WHERE p.party_id = stage.party_id ' ||
1681 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1682 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1683 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1684 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1685 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1686 ,p_dup_party_id, p_dup_party_id;
1687 END IF;
1688 ELSE
1689 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX20, TX21, TX22'||
1690 ' FROM HZ_STAGED_PARTY_SITES stage'||
1691 ' WHERE contains( concat_col, :cont)>0'||
1692 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1693 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1694 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1695 ' AND EXISTS ('||
1696 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1697 ' WHERE p.party_id = stage.party_id ' ||
1698 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1699 ' AND ('||p_restrict_sql||')' ||
1700 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1701 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1702 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1703 ,p_dup_party_id, p_dup_party_id;
1704 END IF;
1705 END IF;
1706 output_long_strings('----------------------------------------------------------');
1707 output_long_strings('Party Site Contains String = '||p_contains_str);
1708 output_long_strings('Restrict Sql = '||p_restrict_sql);
1709 exception
1710 when others then
1711 if (instrb(SQLERRM,'DRG-51030')>0) then
1712 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1713 FND_MSG_PUB.ADD;
1714 RAISE FND_API.G_EXC_ERROR;
1715 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1716 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1717 FND_MSG_PUB.ADD;
1718 RAISE FND_API.G_EXC_ERROR;
1719 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1720 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1721 FND_MSG_PUB.ADD;
1722 RAISE FND_API.G_EXC_ERROR;
1723 else
1724 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1725 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1726 FND_MSG_PUB.ADD;
1727 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1728 end if;
1729 END;
1730
1731 PROCEDURE open_contact_cursor(
1732 p_dup_party_id NUMBER,
1733 p_party_id NUMBER,
1734 p_restrict_sql VARCHAR2,
1735 p_contains_str VARCHAR2,
1736 p_search_ctx_id NUMBER,
1737 p_search_merged VARCHAR2,
1738 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1739 l_sqlstr VARCHAR2(4000);
1740 l_hint VARCHAR2(100);
1741 l_check NUMBER;
1742 l_check_dt NUMBER;
1743 l_search_merged VARCHAR2(1);
1744 l_status_sql VARCHAR2(100);
1745
1746 BEGIN
1747 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1748 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1749 hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1750 END IF;
1751 IF (p_search_merged is null) then
1752 l_search_merged := 'N';
1753 ELSE
1754 l_search_merged := p_search_merged;
1755 END IF;
1756 IF p_party_id IS NOT NULL THEN
1757 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1758 hz_utility_v2pub.debug(p_message=>'Single party scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1759 END IF;
1760 OPEN x_cursor FOR
1761 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID
1762 FROM HZ_STAGED_CONTACTS stage
1763 WHERE contains( concat_col, p_contains_str)>0
1764 AND EXISTS (
1765 SELECT 1 FROM HZ_STAGED_PARTIES p
1766 WHERE p.PARTY_ID = stage.PARTY_ID
1767 AND( (l_search_merged ='Y' )
1768 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1769 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1770 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1771 AND( (l_search_merged ='Y' )
1772 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1773 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1774 AND stage.party_id = p_party_id;
1775 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1776 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1777 hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or Search Context Id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1778 END IF;
1779 IF p_search_ctx_id IS NULL THEN
1780 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1781 hz_utility_v2pub.debug(p_message=>'Search Context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1782 END IF;
1783 OPEN x_cursor FOR
1784 SELECT ORG_CONTACT_ID, PARTY_ID
1785 FROM HZ_STAGED_CONTACTS stage
1786 WHERE contains( concat_col, p_contains_str)>0
1787 AND EXISTS (
1788 SELECT 1 FROM HZ_STAGED_PARTIES p
1789 WHERE p.PARTY_ID = stage.PARTY_ID
1790 AND( (l_search_merged ='Y' )
1791 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1792 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1793 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1794 AND( (l_search_merged ='Y' )
1795 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1796 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1797 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1798 ELSE
1799 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1800 hz_utility_v2pub.debug(p_message=>'Search Context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1801 END IF;
1802 OPEN x_cursor FOR
1803 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID
1804 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
1805 WHERE contains( concat_col, p_contains_str)>0
1806 AND d.search_context_id = p_search_ctx_id
1807 AND d.party_id = stage.party_id
1808 AND( (l_search_merged ='Y' )
1809 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1810 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1811 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1812 END IF;
1813 ELSE
1814 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1815 hz_utility_v2pub.debug(p_message=>'Restrict Sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1816 END IF;
1817 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1818 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT');
1819 IF (l_check_dt > 0 ) THEN
1820 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1821 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ct hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1822 END IF;
1823 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */';
1824 ELSIF (l_check > 0 ) THEN
1825 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1826 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1827 END IF;
1828 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */';
1829 END IF;
1830 IF l_search_merged = 'Y' THEN
1831 l_status_sql := ' ' ;
1832 ELSIF l_search_merged = 'I' THEN
1833 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1834 ELSE
1835 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1836 END IF;
1837 l_sqlstr := 'SELECT ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID '||
1838 ' FROM HZ_STAGED_CONTACTS stage'||
1839 ' WHERE contains( concat_col, :cont)>0'||
1840 ' AND EXISTS ('||
1841 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1842 ' WHERE p.party_id = stage.party_id ' ||
1843 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1844 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1845 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1846 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1847 ' AND ('||p_restrict_sql||')' ||
1848 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1849 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1850 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1851 ,p_dup_party_id, p_dup_party_id;
1852 END IF;
1853 output_long_strings('----------------------------------------------------------');
1854 output_long_strings('Contacts Contains String = '||p_contains_str);
1855 output_long_strings('Restrict Sql = '||p_restrict_sql);
1856 exception
1857 when others then
1858 if (instrb(SQLERRM,'DRG-51030')>0) then
1859 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1860 FND_MSG_PUB.ADD;
1861 RAISE FND_API.G_EXC_ERROR;
1862 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1863 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1864 FND_MSG_PUB.ADD;
1865 RAISE FND_API.G_EXC_ERROR;
1866 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1867 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1868 FND_MSG_PUB.ADD;
1869 RAISE FND_API.G_EXC_ERROR;
1870 else
1871 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1872 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1873 FND_MSG_PUB.ADD;
1874 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1875 end if;
1876 END;
1877
1878 PROCEDURE open_contact_pt_cursor(
1879 p_dup_party_id NUMBER,
1880 p_party_id NUMBER,
1881 p_restrict_sql VARCHAR2,
1882 p_contains_str VARCHAR2,
1883 p_search_ctx_id NUMBER,
1884 p_search_merged VARCHAR2,
1885 p_search_rel_cpts VARCHAR2,
1886 p_person_api VARCHAR2,
1887 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
1888 p_restrict_entity VARCHAR2 DEFAULT NULL) IS
1889 l_sqlstr VARCHAR2(4000);
1890 l_hint VARCHAR2(100);
1891 l_check NUMBER;
1892 l_check_dt NUMBER;
1893 l_search_merged VARCHAR2(1);
1894 l_status_sql VARCHAR2(100);
1895 p_restrict_sql1 VARCHAR2(4000);
1896
1897 BEGIN
1898 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1899 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1900 hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_pt_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1901 END IF;
1902 IF (p_search_merged is null) then
1903 l_search_merged := 'N';
1904 ELSE
1905 l_search_merged := p_search_merged;
1906 END IF;
1907 IF p_restrict_entity = 'CONTACTS'
1908 THEN
1909 OPEN x_cursor FOR
1910 SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1911 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1912 WHERE contains( concat_col, p_contains_str)>0
1913 AND d.search_context_id = p_search_ctx_id
1914 AND( (l_search_merged ='Y' )
1915 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1916 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1917 AND d.party_id = stage.org_contact_id ;
1918 END IF;
1919 IF p_restrict_entity = 'PARTY_SITES'
1920 THEN
1921 OPEN x_cursor FOR
1922 SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N3) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1923 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1924 WHERE contains( concat_col, p_contains_str)>0
1925 AND d.search_context_id = p_search_ctx_id
1926 AND( (l_search_merged ='Y' )
1927 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1928 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1929 AND d.party_id = stage.party_site_id ;
1930 END IF;
1931 IF p_restrict_entity IS NULL
1932 THEN
1933 IF p_party_id IS NOT NULL THEN
1934 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1935 hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1936 END IF;
1937 IF p_search_rel_cpts = 'N' THEN
1938 OPEN x_cursor FOR
1939 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1940 FROM HZ_STAGED_CONTACT_POINTS stage
1941 WHERE contains( concat_col, p_contains_str)>0
1942 AND( (l_search_merged ='Y' )
1943 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1944 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1945 AND stage.party_id = p_party_id;
1946 ELSE
1947 OPEN x_cursor FOR
1948 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1949 FROM HZ_STAGED_CONTACT_POINTS stage
1950 WHERE contains( concat_col, p_contains_str)>0
1951 AND( (l_search_merged ='Y' )
1952 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1953 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1954 AND stage.party_id = p_party_id
1955 UNION
1956 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ stage.CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID
1957 FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
1958 WHERE contains( concat_col, p_contains_str)>0
1959 AND r.object_id = p_party_id
1960 AND( (l_search_merged ='Y' )
1961 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1962 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1963 AND r.subject_id = stage.party_id
1964 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1965 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1966 AND r.relationship_id = oc.party_relationship_id
1967 AND oc.org_contact_id = stage.org_contact_id;
1968 END IF;
1969 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1970 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1971 hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1972 END IF;
1973 IF p_search_ctx_id IS NULL THEN
1974 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1975 hz_utility_v2pub.debug(p_message=>'Either Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1976 END IF;
1977 OPEN x_cursor FOR
1978 SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1979 FROM HZ_STAGED_CONTACT_POINTS stage
1980 WHERE contains( concat_col, p_contains_str)>0
1981 AND EXISTS (
1982 SELECT 1 FROM HZ_STAGED_PARTIES p
1983 WHERE p.PARTY_ID = stage.PARTY_ID
1984 AND( (l_search_merged ='Y' )
1985 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1986 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1987 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1988 AND( (l_search_merged ='Y' )
1989 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1990 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1991 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1992 ELSE
1993 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1994 hz_utility_v2pub.debug(p_message=>'Search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1995 END IF;
1996 IF p_person_api = 'Y' THEN
1997 OPEN x_cursor FOR
1998 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
1999 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2000 WHERE contains( concat_col, p_contains_str)>0
2001 AND d.search_context_id = p_search_ctx_id
2002 AND d.party_id = stage.party_id
2003 AND( (l_search_merged ='Y' )
2004 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2005 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2006 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2007 UNION
2008 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, r.subject_id, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID
2009 FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2010 WHERE contains( concat_col, p_contains_str)>0
2011 AND d.search_context_id = p_search_ctx_id
2012 AND d.party_id = r.subject_id
2013 AND r.relationship_id = oc.party_relationship_id
2014 AND oc.org_contact_id = stage.org_contact_id
2015 AND( (l_search_merged ='Y' )
2016 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2017 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2018 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2019 ELSE
2020 OPEN x_cursor FOR
2021 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2022 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2023 WHERE contains( concat_col, p_contains_str)>0
2024 AND d.search_context_id = p_search_ctx_id
2025 AND d.party_id = stage.party_id
2026 AND( (l_search_merged ='Y' )
2027 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2028 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2029 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2030 END IF;
2031 END IF;
2032 ELSE
2033 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2034 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2035 END IF;
2036 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2037 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT');
2038 IF (l_check_dt > 0 ) THEN
2039 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2040 hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective_cpt hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2041 END IF;
2042 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */';
2043 ELSIF (l_check > 0 ) THEN
2044 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2045 hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2046 END IF;
2047 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */';
2048 END IF;
2049 IF l_search_merged = 'Y' THEN
2050 l_status_sql := ' ' ;
2051 ELSIF l_search_merged = 'I' THEN
2052 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2053 ELSE
2054 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2055 END IF;
2056 IF p_person_api = 'Y' THEN
2057 /*Performance fix for Bug:4589953*/
2058 IF (l_check > 0 ) THEN
2059 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
2060 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2061 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
2062 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2063 ELSE
2064 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2065 END IF;
2066 l_sqlstr := ' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2067 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2068 ' WHERE contains( concat_col, :cont)>0 '||
2069 ' AND (stage.org_contact_id is null '||
2070 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2071 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2072 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2073 ' AND ('||p_restrict_sql||'))' ||
2074 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2075 ' UNION ' ||
2076 ' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2077 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2078 ' WHERE contains( concat_col, :cont)>0 '||
2079 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2080 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2081 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2082 ' AND (stage.org_contact_id in ' ||
2083 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2084 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2085 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2086 ' and ('||p_restrict_sql1 || ') ) )' ||
2087 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2088 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2089 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2090 ELSE
2091 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2092 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2093 ' WHERE contains( concat_col, :cont)>0'||
2094 ' AND EXISTS ('||
2095 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2096 ' WHERE p.party_id = stage.party_id ' ||
2097 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2098 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2099 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2100 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2101 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2102 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2103 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2104 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2105 ,p_dup_party_id, p_dup_party_id;
2106 END IF;
2107 ELSE
2108 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2109 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2110 ' WHERE contains( concat_col, :cont)>0'||
2111 ' AND EXISTS ('||
2112 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2113 ' WHERE p.party_id = stage.party_id ' ||
2114 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2115 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2116 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2117 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2118 ' AND ('||p_restrict_sql||')' ||
2119 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2120 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2121 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2122 ,p_dup_party_id, p_dup_party_id;
2123 END IF;
2124 END IF;
2125 END IF;
2126 output_long_strings('----------------------------------------------------------');
2127 output_long_strings('Contact Points Contains String = '||p_contains_str);
2128 output_long_strings('Restrict Sql = '||p_restrict_sql);
2129 exception
2130 when others then
2131 if (instrb(SQLERRM,'DRG-51030')>0) then
2132 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2133 FND_MSG_PUB.ADD;
2134 RAISE FND_API.G_EXC_ERROR;
2135 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2136 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2137 FND_MSG_PUB.ADD;
2138 RAISE FND_API.G_EXC_ERROR;
2139 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2140 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2141 FND_MSG_PUB.ADD;
2142 RAISE FND_API.G_EXC_ERROR;
2143 else
2144 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2145 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2146 FND_MSG_PUB.ADD;
2147 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2148 end if;
2149 END;
2150
2151
2152 PROCEDURE return_direct_matches(p_restrict_sql VARCHAR2, p_match_str VARCHAR2, p_thresh NUMBER, p_search_ctx_id NUMBER, p_search_merged VARCHAR2, p_dup_party_id NUMBER, x_num_matches OUT NUMBER) IS
2153 l_sqlstr VARCHAR2(4000);
2154 l_search_merged VARCHAR2(1);
2155 BEGIN
2156 IF (p_search_merged is null) then
2157 l_search_merged := 'N';
2158 ELSE
2159 l_search_merged := p_search_merged;
2160 END IF;
2161 IF p_restrict_sql IS NULL THEN
2162 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
2163 SELECT p_search_ctx_id, PARTY_ID, 0
2164 FROM hz_staged_parties
2165 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2166 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
2167 AND( (l_search_merged ='Y' )
2168 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
2169 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
2170 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2171 AND rownum <= p_thresh;
2172 ELSE
2173 l_sqlstr := 'INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, 0 FROM hz_staged_parties stage ';
2174 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2175 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
2176 IF l_search_merged = 'N' THEN
2177 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2178 ELSIF l_search_merged = 'Y' THEN
2179 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2180 END IF;
2181 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2182 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2183 l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2184 EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;
2185 END IF;
2186 x_num_matches := SQL%ROWCOUNT;
2187 END;
2188
2189 FUNCTION get_new_score_rec (
2190 p_init_total_score NUMBER,
2191 p_init_party_score NUMBER,
2192 p_init_party_site_score NUMBER,
2193 p_init_contact_score NUMBER,
2194 p_init_contact_point_score NUMBER,
2195 p_party_id NUMBER,
2196 p_party_site_id NUMBER,
2197 p_org_contact_id NUMBER,
2198 p_contact_point_id NUMBER)
2199 RETURN HZ_PARTY_SEARCH.score_rec IS
2200 l_score_rec HZ_PARTY_SEARCH.score_rec;
2201 BEGIN
2202 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2203 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2204 hz_utility_v2pub.debug(p_message=>'calling the function get_new_score_rec to set the l_score_rec structure',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2205 END IF;
2206 l_score_rec.TOTAL_SCORE := p_init_total_score;
2207 l_score_rec.PARTY_SCORE := p_init_party_score;
2208 l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2209 l_score_rec.CONTACT_SCORE := p_init_contact_score;
2210 l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2211 l_score_rec.PARTY_ID := p_party_id;
2212 l_score_rec.PARTY_SITE_ID := p_party_site_id;
2213 l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2214 l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2215 RETURN l_score_rec;
2216 END;
2217
2218 /**********************************************************
2219 This procedure finds the set of parties that match the search
2220 criteria and returns a scored set of parties
2221
2222 The steps in executing the search are as follows
2223 1. Initialization and error checks
2224 2. Setup of intermedia query strings for Acquisition query
2225 3. Execution of Acquisition query
2226 4. Execution of Secondary queries to score results
2227 5. Setup of data temporary table to return search results
2228 **********************************************************/
2229
2230 PROCEDURE find_parties (
2231 p_rule_id IN NUMBER,
2232 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
2233 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
2234 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
2235 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
2236 p_restrict_sql IN VARCHAR2,
2237 p_match_type IN VARCHAR2,
2238 p_search_merged IN VARCHAR2,
2239 p_dup_party_id IN NUMBER,
2240 p_dup_set_id IN NUMBER,
2241 p_dup_batch_id IN NUMBER,
2242 p_ins_details IN VARCHAR2,
2243 x_search_ctx_id OUT NUMBER,
2244 x_num_matches OUT NUMBER
2245 ) IS
2246
2247 -- Strings to hold the generated Intermedia query strings
2248 l_party_contains_str VARCHAR2(32000);
2249 l_party_site_contains_str VARCHAR2(32000);
2250 l_contact_contains_str VARCHAR2(32000);
2251 l_contact_pt_contains_str VARCHAR2(32000);
2252 l_denorm_str VARCHAR2(32000);
2253 l_ps_denorm_str VARCHAR2(32000);
2254 l_ct_denorm_str VARCHAR2(32000);
2255 l_cpt_denorm_str VARCHAR2(32000);
2256
2257 -- Other local variables
2258 l_match_str VARCHAR2(30); -- Match type (AND or OR)
2259 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2260 -- For Score calculation
2261 l_max_score NUMBER;
2262 l_match_idx NUMBER;
2263 l_entered_max_score NUMBER;
2264 FIRST BOOLEAN;
2265 l_search_ctx_id NUMBER; -- Generated Search Context ID
2266
2267 l_TX13 VARCHAR2(2000);
2268 l_TX20 VARCHAR2(2000);
2269 l_TX9 VARCHAR2(2000);
2270 l_TX22 VARCHAR2(2000);
2271 l_TX3 VARCHAR2(2000);
2272 l_TX12 VARCHAR2(2000);
2273 l_TX15 VARCHAR2(2000);
2274 l_TX21 VARCHAR2(2000);
2275 l_TX4 VARCHAR2(2000);
2276 l_TX10 VARCHAR2(2000);
2277 l_TX11 VARCHAR2(2000);
2278 l_TX14 VARCHAR2(2000);
2279 H_SCORES HZ_PARTY_SEARCH.score_list;
2280 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2281 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2282
2283 l_score NUMBER;
2284 l_idx NUMBER;
2285 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2286 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2287 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2288 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2289 l_party_id NUMBER;
2290 l_ps_party_id NUMBER;
2291 l_ct_party_id NUMBER;
2292 l_cpt_party_id NUMBER;
2293 l_cpt_ps_id NUMBER;
2294 l_cpt_contact_id NUMBER;
2295 l_cpt_type VARCHAR2(100);
2296 l_party_site_id NUMBER;
2297 l_org_contact_id NUMBER;
2298 l_contact_pt_id NUMBER;
2299 l_ps_contact_id NUMBER;
2300 l_party_max_score NUMBER;
2301 l_ps_max_score NUMBER;
2302 l_contact_max_score NUMBER;
2303 l_cpt_max_score NUMBER;
2304 l_denorm_max_score NUMBER;
2305 l_non_denorm_max_score NUMBER;
2306
2307 defpt NUMBER :=0;
2308 defps NUMBER :=0;
2309 defct NUMBER :=0;
2310 defcpt NUMBER :=0;
2311 l_index NUMBER;
2312 l_max_thresh NUMBER;
2313 l_tmp NUMBER;
2314 l_merge_flag VARCHAR2(1);
2315 l_num_eval NUMBER:=0;
2316
2317 --Fix for bug 4417124
2318 l_use_contact_addr_info BOOLEAN := TRUE;
2319 l_use_contact_cpt_info BOOLEAN := TRUE;
2320 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2321 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
2322
2323 L_RETURN_IMM_EXC EXCEPTION;
2324
2325
2326 /********************* Find Parties private procedures *******/
2327 PROCEDURE push_eval IS
2328 BEGIN
2329 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2330 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2331 hz_utility_v2pub.debug(p_message=>'calling the procedure push_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2332 END IF;
2333 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2334 hz_utility_v2pub.debug(p_message=>'Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2335 END IF;
2336 H_PARTY_ID.DELETE;
2337 H_PARTY_ID_LIST.DELETE;
2338 H_SCORES.DELETE;
2339 g_mappings.DELETE;
2340 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2341 call_order(5) := call_order(1);
2342 call_type(5) := 'AND';
2343 call_max_score(5) := call_max_score(1);
2344 call_type(2) := 'OR';
2345 END;
2346
2347 /** Private procedure to acquire and score at party level ***/
2348 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2349 l_party_id_idx NUMBER:=1;
2350 l_ctx_id NUMBER;
2351 l_precalc_score BOOLEAN := FALSE;
2352 l_TX35_new varchar2(4000);
2353 BEGIN
2354 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2355 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2356 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2357 END IF;
2358 SAVEPOINT eval_start;
2359 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2360 l_ctx_id := l_search_ctx_id;
2361 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2362 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2363 END IF;
2364 FORALL I in 1..H_PARTY_ID.COUNT
2365 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2366 l_search_ctx_id,H_PARTY_ID(I));
2367 H_PARTY_ID.DELETE;
2368 H_PARTY_ID_LIST.DELETE;
2369 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2370 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2371 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2372 END IF;
2373 l_ctx_id := l_search_ctx_id;
2374 FORALL I in 1..H_PARTY_ID.COUNT
2375 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2376 l_search_ctx_id,H_PARTY_ID(I));
2377 l_party_id_idx := H_PARTY_ID.COUNT+1;
2378 ELSE
2379 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2380 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2381 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2382 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2383 END IF;
2384 IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' AND p_dup_batch_id IS NULL THEN
2385 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2386 hz_utility_v2pub.debug(p_message=>'In eval party level resolution options is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2387 END IF;
2388 IF (l_party_site_contains_str IS NULL AND
2389 l_contact_contains_str IS NULL AND
2390 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2391 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,p_search_merged,p_dup_party_id, x_num_matches);
2392 RAISE L_RETURN_IMM_EXC;
2393 ELSE
2394 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2395 END IF;
2396 ELSE
2397 IF p_index>1 THEN
2398 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2399 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2400 END IF;
2401 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2402 FND_MSG_PUB.ADD;
2403 RAISE FND_API.G_EXC_ERROR;
2404 ELSE
2405 push_eval;
2406 RETURN;
2407 END IF;
2408 END IF;
2409 END IF;
2410 l_ctx_id := NULL;
2411 l_party_id_idx := H_PARTY_ID.COUNT+1;
2412 END IF;
2413 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2414 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2415 END IF;
2416 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2417 open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);
2418 END IF;
2419 LOOP
2420 FETCH l_party_cur INTO
2421 l_party_id ;
2422 EXIT WHEN l_party_cur%NOTFOUND;
2423 l_index := map_id(l_party_id);
2424 l_score := GET_PARTY_SCORE();
2425 IF NOT H_SCORES.EXISTS(l_index) THEN
2426 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2427 ELSE
2428 H_SCORES(l_index).TOTAL_SCORE :=
2429 H_SCORES(l_index).TOTAL_SCORE+l_score;
2430 H_SCORES(l_index).PARTY_SCORE := l_score;
2431 END IF;
2432 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2433 H_PARTY_ID_LIST(l_index) := 1;
2434 H_PARTY_ID(l_party_id_idx) := l_party_id;
2435 l_party_id_idx:= l_party_id_idx+1;
2436 END IF;
2437 IF (l_party_id_idx-1)>l_max_thresh THEN
2438 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
2439 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2440 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
2441 AND l_contact_pt_contains_str IS NULL THEN
2442 EXIT;
2443 END IF;
2444 CLOSE l_party_cur;
2445 IF p_index>1 THEN
2446 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2447 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2448 END IF;
2449 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2450 FND_MSG_PUB.ADD;
2451 RAISE FND_API.G_EXC_ERROR;
2452 ELSE
2453 push_eval;
2454 RETURN;
2455 END IF;
2456 END IF;
2457 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2458 hz_utility_v2pub.debug(p_message=>'In eval_party_level l_party_id = '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2459 hz_utility_v2pub.debug(p_message=>'In eval_party_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2460 END IF;
2461 END LOOP;
2462 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2463 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2464 END IF;
2465 CLOSE l_party_cur;
2466 ROLLBACK to eval_start;
2467 END;
2468
2469 /** Private procedure to acquire and score at party site level ***/
2470 PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2471 l_party_id_idx NUMBER:=1;
2472 l_ctx_id NUMBER;
2473 h_ps_id HZ_PARTY_SEARCH.IDList;
2474 h_ps_party_id HZ_PARTY_SEARCH.IDList;
2475 h_ps_score HZ_PARTY_SEARCH.IDList;
2476 detcnt NUMBER := 1;
2477 BEGIN
2478 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2479 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2480 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_site_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2481 END IF;
2482 IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2483 AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2484 l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2485 l_party_id := H_SCORES.FIRST;
2486 WHILE l_party_id IS NOT NULL LOOP
2487 H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2488 l_party_id:=H_SCORES.NEXT(l_party_id);
2489 END LOOP;
2490 RETURN;
2491 END IF;
2492 SAVEPOINT eval_start;
2493 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2494 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2495 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2496 END IF;
2497 l_ctx_id := l_search_ctx_id;
2498 FORALL I in 1..H_PARTY_ID.COUNT
2499 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2500 l_search_ctx_id,H_PARTY_ID(I));
2501 H_PARTY_ID.DELETE;
2502 H_PARTY_ID_LIST.DELETE;
2503 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2504 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2505 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2506 END IF;
2507 l_ctx_id := l_search_ctx_id;
2508 FORALL I in 1..H_PARTY_ID.COUNT
2509 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2510 l_search_ctx_id,H_PARTY_ID(I));
2511 l_party_id_idx := H_PARTY_ID.COUNT+1;
2512 ELSE
2513 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2514 and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2515 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2516 hz_utility_v2pub.debug(p_message=>'In eval party site level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2517 END IF;
2518 IF p_index>1 THEN
2519 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2520 hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2521 END IF;
2522 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2523 FND_MSG_PUB.ADD;
2524 RAISE FND_API.G_EXC_ERROR;
2525 ELSE
2526 push_eval;
2527 RETURN;
2528 END IF;
2529 END IF;
2530 l_party_id_idx := H_PARTY_ID.COUNT+1;
2531 l_ctx_id := NULL;
2532 END IF;
2533 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2534 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2535 END IF;
2536 open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged, 'N','N',l_party_site_cur);
2537 LOOP
2538 FETCH l_party_site_cur INTO
2539 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX3, l_TX4, l_TX9, l_TX10, l_TX11, l_TX12, l_TX13, l_TX14, l_TX15, l_TX20, l_TX21, l_TX22;
2540 EXIT WHEN l_party_site_cur%NOTFOUND;
2541 --Fix for bug 4417124
2542 IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2543 l_index := map_id(l_ps_party_id);
2544 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX12,l_TX13,l_TX14,l_TX15,l_TX20,l_TX21,l_TX22);
2545 IF NOT H_SCORES.EXISTS(l_index) THEN
2546 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);
2547 ELSE
2548 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2549 H_SCORES(l_index).TOTAL_SCORE :=
2550 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2551 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2552 END IF;
2553 END IF;
2554 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2555 H_PARTY_ID_LIST(l_index) := 1;
2556 H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2557 l_party_id_idx:= l_party_id_idx+1;
2558 END IF;
2559 IF p_ins_details = 'Y' THEN
2560 h_ps_id(detcnt) := l_party_site_id;
2561 h_ps_party_id(detcnt) := l_ps_party_id;
2562 IF (p_emax_score > 0) THEN
2563 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2564 ELSE
2565 h_ps_score(detcnt) := 0;
2566 END IF;
2567 detcnt := detcnt +1;
2568 END IF;
2569 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2570 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_party_site_id = '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2571 hz_utility_v2pub.debug(p_message=>'In eval_paty_site_level l_ps_party_id = '||l_ps_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2572 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2573 END IF;
2574 END IF;
2575 END LOOP;
2576 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2577 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2578 END IF;
2579 CLOSE l_party_site_cur;
2580 ROLLBACK to eval_start;
2581 IF p_ins_details = 'Y' THEN
2582 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2583 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2584 END IF;
2585 FORALL I in 1..h_ps_id.COUNT
2586 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2587 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2588 END IF;
2589 END;
2590
2591 /** Private procedure to acquire and score at contact point level ***/
2592 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2593 l_party_id_idx NUMBER:=1;
2594 l_ctx_id NUMBER;
2595 h_ct_id HZ_PARTY_SEARCH.IDList;
2596 h_ct_party_id HZ_PARTY_SEARCH.IDList;
2597 h_ct_score HZ_PARTY_SEARCH.IDList;
2598 detcnt NUMBER := 1;
2599 BEGIN
2600 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2601 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2602 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_contact_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2603 END IF;
2604 SAVEPOINT eval_start;
2605 IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2607 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2608 END IF;
2609 l_ctx_id := l_search_ctx_id;
2610 FORALL I in 1..H_PARTY_ID.COUNT
2611 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2612 l_search_ctx_id,H_PARTY_ID(I));
2613 H_PARTY_ID.DELETE;
2614 H_PARTY_ID_LIST.DELETE;
2615 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2616 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2617 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2618 END IF;
2619 l_ctx_id := l_search_ctx_id;
2620 FORALL I in 1..H_PARTY_ID.COUNT
2621 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2622 l_search_ctx_id,H_PARTY_ID(I));
2623 l_party_id_idx := H_PARTY_ID.COUNT+1;
2624 ELSE
2625 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2626 and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2627 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2628 hz_utility_v2pub.debug(p_message=>'In eval contact level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2629 END IF;
2630 IF p_index>1 THEN
2631 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2632 hz_utility_v2pub.debug(p_message=>'In eval contact level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2633 END IF;
2634 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2635 FND_MSG_PUB.ADD;
2636 RAISE FND_API.G_EXC_ERROR;
2637 ELSE
2638 push_eval;
2639 RETURN;
2640 END IF;
2641 END IF;
2642 l_ctx_id := NULL;
2643 l_party_id_idx := H_PARTY_ID.COUNT+1;
2644 END IF;
2645 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2646 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2647 END IF;
2648 open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);
2649 LOOP
2650 FETCH l_contact_cur INTO
2651 l_org_contact_id, l_ct_party_id ;
2652 EXIT WHEN l_contact_cur%NOTFOUND;
2653 l_index := map_id(l_ct_party_id);
2654 l_score := GET_CONTACTS_SCORE(l_match_idx);
2655 IF NOT H_SCORES.EXISTS(l_index) THEN
2656 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);
2657 ELSE
2658 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2659 H_SCORES(l_index).TOTAL_SCORE :=
2660 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2661 H_SCORES(l_index).CONTACT_SCORE := l_score;
2662 END IF;
2663 END IF;
2664 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2665 H_PARTY_ID_LIST(l_index) := 1;
2666 H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2667 l_party_id_idx:= l_party_id_idx+1;
2668 END IF;
2669 IF p_ins_details = 'Y' THEN
2670 h_ct_id(detcnt) := l_org_contact_id;
2671 h_ct_party_id(detcnt) := l_ct_party_id;
2672 IF (p_emax_score > 0) THEN
2673 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2674 ELSE
2675 h_ct_score(detcnt) := 0;
2676 END IF;
2677 detcnt := detcnt +1;
2678 END IF;
2679 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2680 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_org_contact_id = '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2681 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_ct_party_id = '||l_ct_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2682 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2683 END IF;
2684 END LOOP;
2685 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2686 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2687 END IF;
2688 CLOSE l_contact_cur;
2689 ROLLBACK to eval_start;
2690 IF p_ins_details = 'Y' THEN
2691 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2692 hz_utility_v2pub.debug(p_message=>'In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2693 END IF;
2694 FORALL I in 1..h_ct_id.COUNT
2695 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2696 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2697 END IF;
2698 END;
2699
2700 /** Private procedure to acquire and score at contact point level ***/
2701 PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2702 l_party_id_idx NUMBER:=1;
2703 l_ctx_id NUMBER;
2704 h_cpt_id HZ_PARTY_SEARCH.IDList;
2705 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2706 h_cpt_score HZ_PARTY_SEARCH.IDList;
2707 detcnt NUMBER := 1;
2708 l_cpt_flag VARCHAR2(1) := 'N';
2709 is_a_match VARCHAR2(1) := 'Y';
2710 BEGIN
2711 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2712 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2713 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2714 END IF;
2715 SAVEPOINT eval_start;
2716 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2717 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2718 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2719 END IF;
2720 l_ctx_id := l_search_ctx_id;
2721 FORALL I in 1..H_PARTY_ID.COUNT
2722 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2723 l_search_ctx_id,H_PARTY_ID(I));
2724 H_PARTY_ID.DELETE;
2725 H_PARTY_ID_LIST.DELETE;
2726 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2727 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2728 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2729 END IF;
2730 l_ctx_id := l_search_ctx_id;
2731 FORALL I in 1..H_PARTY_ID.COUNT
2732 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2733 l_search_ctx_id,H_PARTY_ID(I));
2734 l_party_id_idx := H_PARTY_ID.COUNT+1;
2735 ELSE
2736 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2737 and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2738 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2739 hz_utility_v2pub.debug(p_message=>'In eval contact point level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2740 END IF;
2741 IF p_index>1 THEN
2742 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2743 hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2744 END IF;
2745 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2746 FND_MSG_PUB.ADD;
2747 RAISE FND_API.G_EXC_ERROR;
2748 ELSE
2749 push_eval;
2750 RETURN;
2751 END IF;
2752 END IF;
2753 l_ctx_id := NULL;
2754 l_party_id_idx := H_PARTY_ID.COUNT+1;
2755 END IF;
2756 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2757 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2758 END IF;
2759 open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged, 'N', 'N',l_contact_pt_cur);
2760 LOOP
2761 FETCH l_contact_pt_cur INTO
2762 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
2763 EXIT WHEN l_contact_pt_cur%NOTFOUND;
2764 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2765 hz_utility_v2pub.debug(p_message=>'----------------------------------------------------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2766 END IF;
2767 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2768 hz_utility_v2pub.debug(p_message=>'Processing party_id - '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2769 END IF;
2770 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2771 hz_utility_v2pub.debug(p_message=>'Contact Point Type - '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2772 END IF;
2773 --Fix for bug 4417124
2774 IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
2775 l_index := map_id(l_cpt_party_id);
2776 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
2777 IF NOT H_SCORES.EXISTS(l_index) THEN
2778 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);
2779 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2780 hz_utility_v2pub.debug(p_message=>'Processing First Time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2781 END IF;
2782 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2783 hz_utility_v2pub.debug(p_message=>'l_index is - '||l_index,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2784 END IF;
2785 ELSE
2786 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
2787 H_SCORES(l_index).TOTAL_SCORE :=
2788 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
2789 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
2790 END IF;
2791 END IF;
2792 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2793 hz_utility_v2pub.debug(p_message=>'call type is - '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2794 END IF;
2795 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2796 hz_utility_v2pub.debug(p_message=>'match string is - '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2797 END IF;
2798 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2799 H_PARTY_ID_LIST(l_index) := 1;
2800 H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
2801 l_party_id_idx:= l_party_id_idx+1;
2802 END IF;
2803 IF p_ins_details = 'Y' THEN
2804 FOR I IN 1..h_cpt_id.COUNT LOOP
2805 IF h_cpt_id(I)=l_contact_pt_id THEN
2806 l_cpt_flag := 'Y';
2807 END IF;
2808 END LOOP;
2809 IF l_cpt_flag = 'Y' THEN
2810 NULL;
2811 ELSE
2812 h_cpt_id(detcnt) := l_contact_pt_id;
2813 h_cpt_party_id(detcnt) := l_cpt_party_id;
2814 IF (p_emax_score > 0) THEN
2815 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
2816 ELSE
2817 h_cpt_score(detcnt) := 0;
2818 END IF;
2819 detcnt := detcnt +1;
2820 END IF;
2821 END IF;
2822 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2823 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_contact_pt_id = '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2824 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_cpt_party_id = '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2825 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2826 END IF;
2827 END IF;
2828 END LOOP;
2829 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2830 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2831 END IF;
2832 CLOSE l_contact_pt_cur;
2833 ROLLBACK to eval_start;
2834 IF p_ins_details = 'Y' THEN
2835 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2836 hz_utility_v2pub.debug(p_message=>'In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2837 END IF;
2838 FORALL I in 1..h_cpt_id.COUNT
2839 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
2840 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
2841 END IF;
2842 END eval_cpt_level;
2843
2844 /** Private procedure to call the eval procedure at each entity in the correct order ***/
2845 PROCEDURE do_eval (p_index NUMBER) IS
2846 l_ctx_id NUMBER;
2847 l_threshold NUMBER;
2848 other_acq_criteria_exists BOOLEAN;
2849 acq_cnt NUMBER;
2850 BEGIN
2851 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2852 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2853 hz_utility_v2pub.debug(p_message=>'calling the procedure do_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2854 END IF;
2855 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
2856 l_threshold := 85;
2857 other_acq_criteria_exists := TRUE ;
2858 --check if acquisition criteria exists for any other entity
2859 IF l_party_contains_str IS NOT NULL THEN
2860 acq_cnt := 1;
2861 END IF;
2862 IF l_party_site_contains_str IS NOT NULL THEN
2863 acq_cnt := acq_cnt+1;
2864 END IF;
2865 IF l_contact_contains_str IS NOT NULL THEN
2866 acq_cnt := acq_cnt+1;
2867 END IF;
2868 IF l_contact_pt_contains_str IS NOT NULL THEN
2869 acq_cnt := acq_cnt+1;
2870 END IF;
2871 IF acq_cnt>1 THEN
2872 other_acq_criteria_exists := TRUE;
2873 ELSE
2874 other_acq_criteria_exists := FALSE;
2875 END IF;
2876 hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes = '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2877 hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) = '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2878 hz_utility_v2pub.debug(p_message=>'l_threshold = '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2879 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
2880 IF ( call_max_score(p_index) < l_threshold) THEN
2881 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2882 hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2883 END IF;
2884 RETURN;
2885 ELSE
2886 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2887 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2888 END IF;
2889 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2890 FND_MSG_PUB.ADD;
2891 RAISE FND_API.G_EXC_ERROR;
2892 END IF;
2893 ELSE
2894 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2895 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2896 END IF;
2897 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2898 FND_MSG_PUB.ADD;
2899 RAISE FND_API.G_EXC_ERROR;
2900 END IF;
2901 END IF;
2902 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
2903 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
2904 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
2905 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2906 ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
2907 eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2908 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
2909 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2910 END IF;
2911 END;
2912 /************ End of find_parties private procedures **********/
2913
2914 BEGIN
2915
2916 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2917 hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2918 END IF;
2919 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2920 hz_utility_v2pub.debug(p_message=>'Entering Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2921 END IF;
2922 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2923 hz_utility_v2pub.debug(p_message=>'Input Parameters are :',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2924 hz_utility_v2pub.debug(p_message=>'p_match_type = '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2925 hz_utility_v2pub.debug(p_message=>'p_restrict_sql = '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2926 hz_utility_v2pub.debug(p_message=>'p_dup_set_id = '||p_dup_set_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2927 hz_utility_v2pub.debug(p_message=>'p_search_merged = '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2928 hz_utility_v2pub.debug(p_message=>'p_dup_party_id = '||p_dup_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2929 END IF;
2930 -- ************************************
2931 -- STEP 1. Initialization and error checks
2932
2933 l_match_str := ' OR ';
2934 IF p_match_type = 'AND' THEN
2935 l_match_str := ' AND ';
2936 ELSIF p_match_type = 'OR' THEN
2937 l_match_str := ' OR ';
2938 END IF;
2939 l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
2940 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
2941
2942 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2943 hz_utility_v2pub.debug(p_message=>'This is Duplicate Identification match rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2944 END IF;
2945 IF l_entered_max_score < 85 THEN
2946 x_num_matches:=0;
2947 x_search_ctx_id:=0;
2948 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2949 hz_utility_v2pub.debug(p_message=>'Returning since maximum obtainable score of input search criteria < threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2950 END IF;
2951 RETURN;
2952 END IF;
2953
2954 --Fix for bug 4417124
2955
2956 SELECT use_contact_addr_flag, use_contact_cpt_flag
2957 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
2958 FROM hz_match_rules_b
2959 WHERE match_rule_id = 37;
2960
2961 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
2962 l_use_contact_addr_info := FALSE;
2963 END IF;
2964
2965 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
2966 l_use_contact_cpt_info := FALSE;
2967 END IF;
2968
2969 --End fix for bug 4417124
2970
2971 IF p_dup_batch_id IS NOT NULL THEN
2972 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
2973 ELSE
2974 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
2975 END IF;
2976 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
2977 g_score_until_thresh := true;
2978 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2979 hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is true',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2980 END IF;
2981 ELSE
2982 g_score_until_thresh := false;
2983 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2984 hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is false',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2985 END IF;
2986 END IF;
2987 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2988 hz_utility_v2pub.debug(p_message=>'Maximum records that will be evaluated is '||l_max_thresh,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2989 END IF;
2990 -- ************************************************************
2991 -- STEP 2. Setup of intermedia query strings for Acquisition query
2992 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
2993 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
2994 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
2995 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2996 hz_utility_v2pub.debug(p_message=>'Commencing the DENORM LOGIC in find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2997 END IF;
2998 l_denorm_max_score:=0;
2999 l_non_denorm_max_score:=0;
3000 IF l_ps_denorm_str IS NOT NULL THEN
3001 l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3002 l_denorm_str := l_ps_denorm_str;
3003 ELSE
3004 l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3005 END IF;
3006 IF l_ct_denorm_str IS NOT NULL THEN
3007 l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3008 IF l_denorm_str IS NOT NULL THEN
3009 l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3010 ELSE
3011 l_denorm_str := l_ct_denorm_str;
3012 END IF;
3013 ELSE
3014 l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3015 END IF;
3016 IF l_cpt_denorm_str IS NOT NULL THEN
3017 l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3018 IF l_denorm_str IS NOT NULL THEN
3019 l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3020 ELSE
3021 l_denorm_str := l_cpt_denorm_str;
3022 END IF;
3023 ELSE
3024 l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3025 END IF;
3026 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, l_denorm_str, l_party_max_score, l_denorm_max_score, l_non_denorm_max_score, round((85/145)*l_entered_max_score));
3027 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3028
3029 -- Setup Search Context ID
3030 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3031 x_search_ctx_id := l_search_ctx_id;
3032
3033 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3034 hz_utility_v2pub.debug(p_message=>'Search context id in find_parties is '||x_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3035 END IF;
3036 IF l_party_contains_str IS NULL THEN
3037 defpt := 1;
3038 END IF;
3039 IF l_party_site_contains_str IS NULL THEN
3040 defps := 1;
3041 END IF;
3042 IF l_contact_contains_str IS NULL THEN
3043 defct := 1;
3044 END IF;
3045 IF l_contact_pt_contains_str IS NULL THEN
3046 defcpt := 1;
3047 END IF;
3048
3049 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3050 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3051 hz_utility_v2pub.debug(p_message=>'------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3052 END IF;
3053 hz_utility_v2pub.debug(p_message=>'In find_parties l_match_str = '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3054 hz_utility_v2pub.debug(p_message=>'In find_parties l_party_contains_str = '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3055 hz_utility_v2pub.debug(p_message=>'In find_parties l_party_site_contains_str = '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3056 hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_contains_str = '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3057 hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_pt_contains_str = '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3058 hz_utility_v2pub.debug(p_message=>'In find_parties l_search_ctx_id = '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3059 END IF;
3060 FOR I in 1..5 LOOP
3061 do_eval(I);
3062 END LOOP;
3063 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3064 hz_utility_v2pub.debug(p_message=>'In find_parties. This is a Duplicate Identification Rule. Evaluating Matches. Threshold : 85 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3065 END IF;
3066 x_num_matches := 0;
3067 l_num_eval := 0;
3068 IF l_match_str = ' OR ' THEN
3069 l_party_id := H_SCORES.FIRST;
3070 ELSE
3071 l_party_id := H_PARTY_ID_LIST.FIRST;
3072 END IF;
3073 WHILE l_party_id IS NOT NULL LOOP
3074 l_num_eval:= l_num_eval+1;
3075 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3076 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3077 hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3078 END IF;
3079 hz_utility_v2pub.debug(p_message=>'In find_parties Match Party ID = '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3080 hz_utility_v2pub.debug(p_message=>'In find_parties Score = '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3081 END IF;
3082 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3083 hz_utility_v2pub.debug(p_message=>'In find_parties inserting Duplicate Identification results into HZ_MATCHED_PARTIES_GT',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3084 END IF;
3085 IF H_SCORES(l_party_id).TOTAL_SCORE>=85 THEN
3086 IF p_dup_set_id IS NULL THEN
3087 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3088 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);
3089 x_num_matches := x_num_matches+1;
3090 ELSE
3091 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3092 hz_utility_v2pub.debug(p_message=>'Before Inserting Duplicate Identification results into HZ_DUP_SET_PARTIES, if dup party already exists',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3093 END IF;
3094 BEGIN
3095 SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES
3096 WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID
3097 AND DUP_SET_BATCH_ID = p_dup_batch_id
3098 AND ROWNUM=1;
3099 EXCEPTION
3100 WHEN NO_DATA_FOUND THEN
3101 IF H_SCORES(l_party_id).TOTAL_SCORE>=99999 THEN
3102 l_merge_flag := 'Y';
3103 ELSE
3104 l_merge_flag := 'N';
3105 END IF;
3106 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3107 hz_utility_v2pub.debug(p_message=>'In find_parties inserting Duplicate Identification results into HZ_DUP_SET_PARTIES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3108 END IF;
3109 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3110 hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3111 END IF;
3112 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
3113 MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
3114 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
3115 VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,
3116 H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,
3117 hz_utility_pub.created_by,hz_utility_pub.creation_date,
3118 hz_utility_pub.last_update_login,
3119 hz_utility_pub.last_update_date,
3120 hz_utility_pub.user_id,p_dup_batch_id);
3121 x_num_matches := x_num_matches+1;
3122 END;
3123 END IF;
3124 END IF;
3125 IF l_match_str = ' OR ' THEN
3126 l_party_id:=H_SCORES.NEXT(l_party_id);
3127 ELSE
3128 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3129 END IF;
3130 END LOOP;
3131 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3132 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3133 hz_utility_v2pub.debug(p_message=>'Exiting Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3134 END IF;
3135 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3136 hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3137 END IF;
3138 EXCEPTION
3139 WHEN L_RETURN_IMM_EXC THEN
3140 RETURN;
3141 WHEN FND_API.G_EXC_ERROR THEN
3142 RAISE FND_API.G_EXC_ERROR;
3143 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3144 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3145 WHEN OTHERS THEN
3146 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3147 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_parties');
3148 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3149 FND_MSG_PUB.ADD;
3150 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3151 END find_parties;
3152
3153 PROCEDURE find_persons (
3154 p_rule_id IN NUMBER,
3155 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3156 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3157 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3158 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3159 p_restrict_sql IN VARCHAR2,
3160 p_match_type IN VARCHAR2,
3161 p_search_merged IN VARCHAR2,
3162 p_dup_party_id IN NUMBER,
3163 p_dup_set_id IN NUMBER,
3164 p_dup_batch_id IN NUMBER,
3165 p_ins_details IN VARCHAR2,
3166 x_search_ctx_id OUT NUMBER,
3167 x_num_matches OUT NUMBER
3168 ) IS
3169
3170 -- Strings to hold the generated Intermedia query strings
3171 l_party_contains_str VARCHAR2(32000);
3172 l_party_site_contains_str VARCHAR2(32000);
3173 l_contact_contains_str VARCHAR2(32000);
3174 l_contact_pt_contains_str VARCHAR2(32000);
3175 l_denorm_str VARCHAR2(32000);
3176 l_ps_denorm_str VARCHAR2(32000);
3177 l_ct_denorm_str VARCHAR2(32000);
3178 l_cpt_denorm_str VARCHAR2(32000);
3179
3180 -- Other local variables
3181 l_match_str VARCHAR2(30); -- Match type (AND or OR)
3182 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3183 -- For Score calculation
3184 l_max_score NUMBER;
3185 l_match_idx NUMBER;
3186 l_entered_max_score NUMBER;
3187 FIRST BOOLEAN;
3188 l_search_ctx_id NUMBER; -- Generated Search Context ID
3189
3190 l_TX13 VARCHAR2(2000);
3191 l_TX20 VARCHAR2(2000);
3192 l_TX9 VARCHAR2(2000);
3193 l_TX22 VARCHAR2(2000);
3194 l_TX3 VARCHAR2(2000);
3195 l_TX12 VARCHAR2(2000);
3196 l_TX15 VARCHAR2(2000);
3197 l_TX21 VARCHAR2(2000);
3198 l_TX4 VARCHAR2(2000);
3199 l_TX10 VARCHAR2(2000);
3200 l_TX11 VARCHAR2(2000);
3201 l_TX14 VARCHAR2(2000);
3202 H_SCORES HZ_PARTY_SEARCH.score_list;
3203 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3204 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3205
3206 l_score NUMBER;
3207 l_idx NUMBER;
3208 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3209 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3210 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3211 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3212 l_party_id NUMBER;
3213 l_ps_party_id NUMBER;
3214 l_ct_party_id NUMBER;
3215 l_cpt_party_id NUMBER;
3216 l_cpt_ps_id NUMBER;
3217 l_cpt_contact_id NUMBER;
3218 l_cpt_type VARCHAR2(100);
3219 l_party_site_id NUMBER;
3220 l_org_contact_id NUMBER;
3221 l_contact_pt_id NUMBER;
3222 l_cpt_level VARCHAR2(100);
3223 l_ps_contact_id NUMBER;
3224 l_party_max_score NUMBER;
3225 l_ps_max_score NUMBER;
3226 l_contact_max_score NUMBER;
3227 l_cpt_max_score NUMBER;
3228 l_denorm_max_score NUMBER;
3229 l_non_denorm_max_score NUMBER;
3230
3231 defpt NUMBER :=0;
3232 defps NUMBER :=0;
3233 defct NUMBER :=0;
3234 defcpt NUMBER :=0;
3235 l_index NUMBER;
3236 l_max_thresh NUMBER;
3237 l_tmp NUMBER;
3238 l_merge_flag VARCHAR2(1);
3239 l_num_eval NUMBER:=0;
3240
3241 L_RETURN_IMM_EXC Exception;
3242
3243
3244 /********************* Find Parties private procedures *******/
3245 PROCEDURE set_person_party_type IS
3246 BEGIN
3247 g_party_stage_rec.TX36:=
3248 HZ_TRANS_PKG.EXACT(
3249 'PERSON'
3250 ,null,'PARTY_TYPE'
3251 ,'PARTY');
3252 END;
3253
3254 PROCEDURE unset_person_party_type IS
3255 BEGIN
3256 g_party_stage_rec.TX36 := '';
3257 END;
3258
3259 FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER)
3260 RETURN NUMBER IS
3261 l_party_type VARCHAR2(255);
3262 l_person_id NUMBER(15);
3263 BEGIN
3264 SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3265 IF l_party_type = 'PERSON' THEN
3266 RETURN p_party_id;
3267 ELSIF p_contact_id IS NULL THEN
3268 RETURN NULL;
3269 ELSE
3270 BEGIN
3271 SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3272 WHERE oc.org_contact_id = p_contact_id
3273 AND r.relationship_id = oc.party_relationship_id
3274 AND r.object_id = p_party_id
3275 AND p.party_id = r.subject_id
3276 AND p.party_type = 'PERSON'
3277 AND ROWNUM=1;
3278
3279 RETURN l_person_id;
3280 EXCEPTION
3281 WHEN NO_DATA_FOUND THEN
3282 RETURN NULL;
3283 END;
3284 END IF;
3285 END;
3286
3287 PROCEDURE push_eval IS
3288 BEGIN
3289 H_PARTY_ID.DELETE;
3290 H_PARTY_ID_LIST.DELETE;
3291 H_SCORES.DELETE;
3292 g_mappings.DELETE;
3293 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3294 call_order(5) := call_order(1);
3295 call_type(5) := 'AND';
3296 call_max_score(5) := call_max_score(1);
3297 call_type(2) := 'OR';
3298 END;
3299
3300 /** Private procedure to acquire and score at party level ***/
3301 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3302 l_party_id_idx NUMBER:=1;
3303 l_ctx_id NUMBER;
3304 l_TX35_new varchar2(4000);
3305 BEGIN
3306 SAVEPOINT eval_start;
3307 set_person_party_type;
3308 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3309 l_ctx_id := l_search_ctx_id;
3310 FORALL I in 1..H_PARTY_ID.COUNT
3311 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3312 l_search_ctx_id,H_PARTY_ID(I));
3313 H_PARTY_ID.DELETE;
3314 H_PARTY_ID_LIST.DELETE;
3315 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3316 l_ctx_id := l_search_ctx_id;
3317 FORALL I in 1..H_PARTY_ID.COUNT
3318 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3319 l_search_ctx_id,H_PARTY_ID(I));
3320 l_party_id_idx := H_PARTY_ID.COUNT+1;
3321 ELSE
3322 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3323 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3325 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3326 END IF;
3327 IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3328 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3329 hz_utility_v2pub.debug(p_message=>'In eval party level resolution option is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3330 END IF;
3331 IF (l_party_site_contains_str IS NULL AND
3332 l_contact_contains_str IS NULL AND
3333 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3334 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3335 RAISE L_RETURN_IMM_EXC;
3336 ELSE
3337 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3338 END IF;
3339 ELSE
3340 IF p_index>1 THEN
3341 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3342 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3343 END IF;
3344 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3345 FND_MSG_PUB.ADD;
3346 RAISE FND_API.G_EXC_ERROR;
3347 ELSE
3348 push_eval;
3349 RETURN;
3350 END IF;
3351 END IF;
3352 END IF;
3353 l_ctx_id := NULL;
3354 l_party_id_idx := H_PARTY_ID.COUNT+1;
3355 END IF;
3356 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3357 open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);
3358 END IF;
3359 LOOP
3360 FETCH l_party_cur INTO
3361 l_party_id ;
3362 EXIT WHEN l_party_cur%NOTFOUND;
3363 l_index := map_id(l_party_id);
3364 l_score := GET_PARTY_SCORE();
3365 IF NOT H_SCORES.EXISTS(l_index) THEN
3366 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3367 ELSE
3368 H_SCORES(l_index).TOTAL_SCORE :=
3369 H_SCORES(l_index).TOTAL_SCORE+l_score;
3370 H_SCORES(l_index).PARTY_SCORE := l_score;
3371 END IF;
3372 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3373 H_PARTY_ID_LIST(l_index) := 1;
3374 H_PARTY_ID(l_party_id_idx) := l_party_id;
3375 l_party_id_idx:= l_party_id_idx+1;
3376 END IF;
3377 IF (l_party_id_idx-1)>l_max_thresh THEN
3378 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
3379 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3380 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
3381 AND l_contact_pt_contains_str IS NULL THEN
3382 H_PARTY_ID.DELETE(l_party_id_idx-1);
3383 H_PARTY_ID_LIST.DELETE(l_index);
3384 H_SCORES.DELETE(l_index);
3385 EXIT;
3386 END IF;
3387 CLOSE l_party_cur;
3388 IF p_index>1 THEN
3389 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3390 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3391 END IF;
3392 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3393 FND_MSG_PUB.ADD;
3394 RAISE FND_API.G_EXC_ERROR;
3395 ELSE
3396 push_eval;
3397 RETURN;
3398 END IF;
3399 END IF;
3400 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3401 hz_utility_v2pub.debug(p_message=>'Party Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3402 hz_utility_v2pub.debug(p_message=>'l_party_id '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3403 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3404 END IF;
3405 END LOOP;
3406 CLOSE l_party_cur;
3407 ROLLBACK to eval_start;
3408 END;
3409 PROCEDURE open_person_contact_cursor(
3410 p_contains_str VARCHAR2,
3411 p_search_ctx_id NUMBER,
3412 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3413 BEGIN
3414 OPEN x_cursor FOR
3415 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID
3416 FROM HZ_STAGED_CONTACTS stage
3417 WHERE contains( concat_col, p_contains_str)>0
3418 AND ORG_CONTACT_ID in (
3419 SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/
3420 org_contact_id
3421 from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3422 where d.party_id = r.subject_id
3423 and oc.party_relationship_id = r.relationship_id
3424 and d.search_context_id = p_search_ctx_id);
3425 exception
3426 when others then
3427 if (instrb(SQLERRM,'DRG-51030')>0) then
3428 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3429 FND_MSG_PUB.ADD;
3430 RAISE FND_API.G_EXC_ERROR;
3431 elsif (instrb(SQLERRM,'DRG-50943')>0) then
3432 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3433 FND_MSG_PUB.ADD;
3434 RAISE FND_API.G_EXC_ERROR;
3435 else
3436 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3437 end if;
3438 END;
3439
3440 /** Private procedure to acquire and score at party site level ***/
3441 PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3442 l_party_id_idx NUMBER:=1;
3443 l_ctx_id NUMBER;
3444 h_ps_id HZ_PARTY_SEARCH.IDList;
3445 h_ps_party_id HZ_PARTY_SEARCH.IDList;
3446 h_ps_score HZ_PARTY_SEARCH.IDList;
3447 detcnt NUMBER := 1;
3448 l_person_id NUMBER;
3449 BEGIN
3450 SAVEPOINT eval_start;
3451 unset_person_party_type;
3452 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3453 l_ctx_id := l_search_ctx_id;
3454 FORALL I in 1..H_PARTY_ID.COUNT
3455 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3456 l_search_ctx_id,H_PARTY_ID(I));
3457 H_PARTY_ID.DELETE;
3458 H_PARTY_ID_LIST.DELETE;
3459 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3460 l_ctx_id := l_search_ctx_id;
3461 FORALL I in 1..H_PARTY_ID.COUNT
3462 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3463 l_search_ctx_id,H_PARTY_ID(I));
3464 l_party_id_idx := H_PARTY_ID.COUNT+1;
3465 ELSE
3466 l_party_id_idx := H_PARTY_ID.COUNT+1;
3467 l_ctx_id := NULL;
3468 END IF;
3469 open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged,'N', 'Y',l_party_site_cur);
3470 LOOP
3471 FETCH l_party_site_cur INTO
3472 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX3, l_TX4, l_TX9, l_TX10, l_TX11, l_TX12, l_TX13, l_TX14, l_TX15, l_TX20, l_TX21, l_TX22;
3473 EXIT WHEN l_party_site_cur%NOTFOUND;
3474 IF l_ctx_id IS NULL THEN
3475 l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3476 ELSE
3477 l_person_id := l_ps_party_id;
3478 END IF;
3479 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3480 l_index := map_id(l_person_id);
3481 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX12,l_TX13,l_TX14,l_TX15,l_TX20,l_TX21,l_TX22);
3482 IF NOT H_SCORES.EXISTS(l_index) THEN
3483 IF l_ctx_id IS NULL THEN
3484 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3485 END IF;
3486 ELSE
3487 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3488 H_SCORES(l_index).TOTAL_SCORE :=
3489 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3490 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3491 END IF;
3492 END IF;
3493 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3494 H_PARTY_ID_LIST(l_index) := 1;
3495 H_PARTY_ID(l_party_id_idx) := l_person_id;
3496 l_party_id_idx:= l_party_id_idx+1;
3497 END IF;
3498 IF (l_party_id_idx-1)>l_max_thresh THEN
3499 CLOSE l_party_site_cur;
3500 IF p_index>1 THEN
3501 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3502 hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3503 END IF;
3504 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3505 FND_MSG_PUB.ADD;
3506 RAISE FND_API.G_EXC_ERROR;
3507 ELSE
3508 push_eval;
3509 RETURN;
3510 END IF;
3511 END IF;
3512 IF p_ins_details = 'Y' THEN
3513 h_ps_id(detcnt) := l_party_site_id;
3514 h_ps_party_id(detcnt) := l_person_id;
3515 IF (p_emax_score > 0) THEN
3516 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3517 ELSE
3518 h_ps_score(detcnt) := 0;
3519 END IF;
3520 detcnt := detcnt +1;
3521 END IF;
3522 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3523 hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3524 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3525 hz_utility_v2pub.debug(p_message=>'l_ps_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3526 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3527 END IF;
3528 END IF;
3529 END LOOP;
3530 CLOSE l_party_site_cur;
3531 ROLLBACK to eval_start;
3532 IF p_ins_details = 'Y' THEN
3533 FORALL I in 1..h_ps_id.COUNT
3534 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3535 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3536 END IF;
3537 END;
3538
3539 /** Private procedure to acquire and score at party site level ***/
3540 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3541 l_party_id_idx NUMBER:=1;
3542 l_ctx_id NUMBER;
3543 h_ct_id HZ_PARTY_SEARCH.IDList;
3544 h_ct_party_id HZ_PARTY_SEARCH.IDList;
3545 h_ct_score HZ_PARTY_SEARCH.IDList;
3546 detcnt NUMBER := 1;
3547 l_person_id NUMBER;
3548 BEGIN
3549 SAVEPOINT eval_start;
3550 l_ctx_id := l_search_ctx_id;
3551 unset_person_party_type;
3552 FORALL I in 1..H_PARTY_ID.COUNT
3553 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3554 l_search_ctx_id,H_PARTY_ID(I));
3555 l_party_id_idx := H_PARTY_ID.COUNT+1;
3556 open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3557 LOOP
3558 FETCH l_contact_cur INTO
3559 l_org_contact_id, l_ct_party_id ;
3560 EXIT WHEN l_contact_cur%NOTFOUND;
3561 l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3562 l_index := map_id(l_person_id);
3563 IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3564 l_score := GET_CONTACTS_SCORE(l_match_idx);
3565 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3566 H_SCORES(l_index).TOTAL_SCORE :=
3567 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3568 H_SCORES(l_index).CONTACT_SCORE := l_score;
3569 END IF;
3570 END IF;
3571 IF p_ins_details = 'Y' THEN
3572 h_ct_id(detcnt) := l_org_contact_id;
3573 h_ct_party_id(detcnt) := l_person_id;
3574 IF (p_emax_score > 0) THEN
3575 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3576 ELSE
3577 h_ct_score(detcnt) := 0;
3578 END IF;
3579 detcnt := detcnt +1;
3580 END IF;
3581 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3582 hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3583 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3584 hz_utility_v2pub.debug(p_message=>'l_ct_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3585 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3586 END IF;
3587 END LOOP;
3588 CLOSE l_contact_cur;
3589 ROLLBACK to eval_start;
3590 IF p_ins_details = 'Y' THEN
3591 FORALL I in 1..h_ct_id.COUNT
3592 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3593 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3594 END IF;
3595 END;
3596
3597 /** Private procedure to acquire and score at contact point level ***/
3598 PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3599 l_party_id_idx NUMBER:=1;
3600 l_ctx_id NUMBER;
3601 h_cpt_id HZ_PARTY_SEARCH.IDList;
3602 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3603 h_cpt_score HZ_PARTY_SEARCH.IDList;
3604 detcnt NUMBER := 1;
3605 l_person_id NUMBER;
3606 is_a_match VARCHAR2(1) := 'Y';
3607 l_cpt_flag VARCHAR2(1) := 'N';
3608 BEGIN
3609 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3610 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3611 END IF;
3612 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3613 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level - from find_persons',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3614 END IF;
3615 SAVEPOINT eval_start;
3616 unset_person_party_type;
3617 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3618 l_ctx_id := l_search_ctx_id;
3619 FORALL I in 1..H_PARTY_ID.COUNT
3620 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3621 l_search_ctx_id,H_PARTY_ID(I));
3622 H_PARTY_ID.DELETE;
3623 H_PARTY_ID_LIST.DELETE;
3624 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3626 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3627 END IF;
3628 l_ctx_id := l_search_ctx_id;
3629 FORALL I in 1..H_PARTY_ID.COUNT
3630 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3631 l_search_ctx_id,H_PARTY_ID(I));
3632 l_party_id_idx := H_PARTY_ID.COUNT+1;
3633 ELSE
3634 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3635 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3636 END IF;
3637 l_ctx_id := NULL;
3638 l_party_id_idx := H_PARTY_ID.COUNT+1;
3639 END IF;
3640 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3641 hz_utility_v2pub.debug(p_message=>'====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3642 END IF;
3643 open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged,'N', 'Y',l_contact_pt_cur);
3644 LOOP
3645 FETCH l_contact_pt_cur INTO
3646 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
3647 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3648 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3649 hz_utility_v2pub.debug(p_message=>' ------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3650 END IF;
3651 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3652 hz_utility_v2pub.debug(p_message=>'Processing party_id - '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3653 END IF;
3654 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3655 hz_utility_v2pub.debug(p_message=>'contact point type - '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3656 END IF;
3657 IF l_ctx_id IS NULL THEN
3658 l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3659 ELSE
3660 l_person_id := l_cpt_party_id;
3661 END IF;
3662 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3663 l_index := map_id(l_person_id);
3664 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
3665 IF NOT H_SCORES.EXISTS(l_index) THEN
3666 IF l_ctx_id IS NULL THEN
3667 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);
3668 END IF;
3669 ELSE
3670 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
3671 H_SCORES(l_index).TOTAL_SCORE :=
3672 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3673 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
3674 END IF;
3675 END IF;
3676 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3677 hz_utility_v2pub.debug(p_message=>'call type is - '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3678 END IF;
3679 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3680 hz_utility_v2pub.debug(p_message=>'match string is - '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3681 END IF;
3682 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3683 H_PARTY_ID_LIST(l_index) := 1;
3684 H_PARTY_ID(l_party_id_idx) := l_person_id;
3685 l_party_id_idx:= l_party_id_idx+1;
3686 END IF;
3687 IF (l_party_id_idx-1)>l_max_thresh THEN
3688 CLOSE l_contact_pt_cur;
3689 IF p_index>1 THEN
3690 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3691 hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3692 END IF;
3693 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3694 FND_MSG_PUB.ADD;
3695 RAISE FND_API.G_EXC_ERROR;
3696 ELSE
3697 push_eval;
3698 RETURN;
3699 END IF;
3700 END IF;
3701 IF p_ins_details = 'Y' THEN
3702 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3703 hz_utility_v2pub.debug(p_message=>'Inserting into the final array, the person_id - '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3704 END IF;
3705 FOR I IN 1..h_cpt_id.COUNT LOOP
3706 IF h_cpt_id(I)=l_contact_pt_id THEN
3707 l_cpt_flag := 'Y';
3708 END IF;
3709 END LOOP;
3710 IF l_cpt_flag = 'Y' THEN
3711 NULL;
3712 ELSE
3713 h_cpt_id(detcnt) := l_contact_pt_id;
3714 h_cpt_party_id(detcnt) := l_person_id;
3715 IF (p_emax_score > 0) THEN
3716 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3717 ELSE
3718 h_cpt_score(detcnt) := 0;
3719 END IF;
3720 detcnt := detcnt +1;
3721 END IF;
3722 END IF;
3723 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3724 hz_utility_v2pub.debug(p_message=>'Contact pt Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3725 hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3726 hz_utility_v2pub.debug(p_message=>'l_cpt_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3727 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3728 END IF;
3729 END IF;
3730 END LOOP;
3731 CLOSE l_contact_pt_cur;
3732 ROLLBACK to eval_start;
3733 IF p_ins_details = 'Y' THEN
3734 FORALL I in 1..h_cpt_id.COUNT
3735 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3736 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3737 END IF;
3738 END;
3739
3740 /** Private procedure to call the eval procedure at each entity in the correct order ***/
3741 PROCEDURE do_eval (p_index NUMBER) IS
3742 l_ctx_id NUMBER;
3743 l_threshold NUMBER;
3744 other_acq_criteria_exists BOOLEAN;
3745 acq_cnt NUMBER;
3746 BEGIN
3747 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3748 l_threshold := 85;
3749 other_acq_criteria_exists := TRUE ;
3750 --check if acquisition criteria exists for any other entity
3751 IF l_party_contains_str IS NOT NULL THEN
3752 acq_cnt := 1;
3753 END IF;
3754 IF l_party_site_contains_str IS NOT NULL THEN
3755 acq_cnt := acq_cnt+1;
3756 END IF;
3757 IF l_contact_contains_str IS NOT NULL THEN
3758 acq_cnt := acq_cnt+1;
3759 END IF;
3760 IF l_contact_pt_contains_str IS NOT NULL THEN
3761 acq_cnt := acq_cnt+1;
3762 END IF;
3763 IF acq_cnt>1 THEN
3764 other_acq_criteria_exists := TRUE;
3765 ELSE
3766 other_acq_criteria_exists := FALSE;
3767 END IF;
3768 hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes = '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3769 hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) = '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3770 hz_utility_v2pub.debug(p_message=>'l_threshold = '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3771 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3772 IF ( call_max_score(p_index) < l_threshold) THEN
3773 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3774 hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3775 END IF;
3776 RETURN;
3777 ELSE
3778 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3779 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3780 END IF;
3781 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3782 FND_MSG_PUB.ADD;
3783 RAISE FND_API.G_EXC_ERROR;
3784 END IF;
3785 ELSE
3786 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3787 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3788 END IF;
3789 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3790 FND_MSG_PUB.ADD;
3791 RAISE FND_API.G_EXC_ERROR;
3792 END IF;
3793 END IF;
3794 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3795 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3796 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3797 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3798 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3799 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3800 END IF;
3801 END;
3802 /************ End of find_persons private procedures **********/
3803
3804 BEGIN
3805
3806 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3807 hz_utility_v2pub.debug(p_message=>'find_persons(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3808 END IF;
3809 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3810 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3811 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3812 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3813 END IF;
3814 -- ************************************
3815 -- STEP 1. Initialization and error checks
3816
3817 l_match_str := ' OR ';
3818 IF p_match_type = 'AND' THEN
3819 l_match_str := ' AND ';
3820 ELSIF p_match_type = 'OR' THEN
3821 l_match_str := ' OR ';
3822 END IF;
3823 l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
3824 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3825
3826 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3827 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3828 g_score_until_thresh := true;
3829 ELSE
3830 g_score_until_thresh := false;
3831 END IF;
3832 -- ************************************************************
3833 -- STEP 2. Setup of intermedia query strings for Acquisition query
3834 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3835 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3836 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3837 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
3838 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3839
3840 -- Setup Search Context ID
3841 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3842 x_search_ctx_id := l_search_ctx_id;
3843
3844 IF l_party_contains_str IS NULL THEN
3845 defpt := 1;
3846 END IF;
3847 IF l_party_site_contains_str IS NULL THEN
3848 defps := 1;
3849 END IF;
3850 IF l_contact_contains_str IS NULL THEN
3851 defct := 1;
3852 END IF;
3853 IF l_contact_pt_contains_str IS NULL THEN
3854 defcpt := 1;
3855 END IF;
3856
3857 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3858 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3859 hz_utility_v2pub.debug(p_message=>'l_party_contains_str '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3860 hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3861 hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3862 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3863 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3864 END IF;
3865 FOR I in 1..5 LOOP
3866 do_eval(I);
3867 END LOOP;
3868 IF l_contact_contains_str IS NOT NULL THEN
3869 eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
3870 END IF;
3871 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3872 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 59 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3873 END IF;
3874 x_num_matches := 0;
3875 l_num_eval := 0;
3876 IF l_match_str = ' OR ' THEN
3877 l_party_id := H_SCORES.FIRST;
3878 ELSE
3879 l_party_id := H_PARTY_ID_LIST.FIRST;
3880 END IF;
3881 WHILE l_party_id IS NOT NULL LOOP
3882 l_num_eval:= l_num_eval+1;
3883 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3884 hz_utility_v2pub.debug(p_message=>'Match Party ID '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3885 hz_utility_v2pub.debug(p_message=>'Score '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3886 END IF;
3887 IF H_SCORES(l_party_id).TOTAL_SCORE>=85 THEN
3888 IF p_dup_set_id IS NULL THEN
3889 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3890 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);
3891 x_num_matches := x_num_matches+1;
3892 ELSE
3893 BEGIN
3894 SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES
3895 WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID
3896 AND DUP_SET_BATCH_ID = p_dup_batch_id
3897 AND ROWNUM=1;
3898 EXCEPTION
3899 WHEN NO_DATA_FOUND THEN
3900 IF H_SCORES(l_party_id).TOTAL_SCORE>=99999 THEN
3901 l_merge_flag := 'Y';
3902 ELSE
3903 l_merge_flag := 'N';
3904 END IF;
3905 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
3906 MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
3907 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
3908 VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,
3909 H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,
3910 hz_utility_pub.created_by,hz_utility_pub.creation_date,
3911 hz_utility_pub.last_update_login,
3912 hz_utility_pub.last_update_date,
3913 hz_utility_pub.user_id,p_dup_batch_id);
3914 x_num_matches := x_num_matches+1;
3915 END;
3916 END IF;
3917 END IF;
3918 IF l_match_str = ' OR ' THEN
3919 l_party_id:=H_SCORES.NEXT(l_party_id);
3920 ELSE
3921 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3922 END IF;
3923 END LOOP;
3924 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3925 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3926 hz_utility_v2pub.debug(p_message=>'find_persons(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3927 END IF;
3928 EXCEPTION
3929 WHEN L_RETURN_IMM_EXC THEN
3930 RETURN;
3931 WHEN FND_API.G_EXC_ERROR THEN
3932 RAISE FND_API.G_EXC_ERROR;
3933 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3934 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3935 WHEN OTHERS THEN
3936 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3937 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_persons');
3938 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3939 FND_MSG_PUB.ADD;
3940 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3941 END find_persons;
3942
3943 PROCEDURE find_persons (
3944 p_rule_id IN NUMBER,
3945 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3946 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3947 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3948 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3949 p_restrict_sql IN VARCHAR2,
3950 p_match_type IN VARCHAR2,
3951 p_search_merged IN VARCHAR2,
3952 p_ins_details IN VARCHAR2,
3953 x_search_ctx_id OUT NUMBER,
3954 x_num_matches OUT NUMBER
3955 ) IS
3956
3957 BEGIN
3958 find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,null,null,null,p_ins_details,x_search_ctx_id,x_num_matches);
3959 END;
3960 PROCEDURE find_party_details (
3961 p_rule_id IN NUMBER,
3962 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3963 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3964 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3965 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3966 p_restrict_sql IN VARCHAR2,
3967 p_match_type IN VARCHAR2,
3968 p_search_merged IN VARCHAR2,
3969 x_search_ctx_id OUT NUMBER,
3970 x_num_matches OUT NUMBER
3971 ) IS
3972
3973 BEGIN
3974 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3975 hz_utility_v2pub.debug(p_message=>'find_party_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3976 END IF;
3977 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3978 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3979 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3980 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3981 hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3982 END IF;
3983 find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
3984 p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
3985 x_search_ctx_id,x_num_matches);
3986 DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
3987 AND NOT EXISTS
3988 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
3989 DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
3990 AND NOT EXISTS
3991 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
3992 DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
3993 AND NOT EXISTS
3994 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
3995 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3996 hz_utility_v2pub.debug(p_message=>'find_party_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3997 END IF;
3998 EXCEPTION
3999 WHEN FND_API.G_EXC_ERROR THEN
4000 RAISE FND_API.G_EXC_ERROR;
4001 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4002 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4003 WHEN OTHERS THEN
4004 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4005 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_party_details');
4006 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4007 FND_MSG_PUB.ADD;
4008 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4009 END find_party_details;
4010
4011 PROCEDURE find_duplicate_parties (
4012 p_rule_id IN NUMBER,
4013 p_party_id IN NUMBER,
4014 p_restrict_sql IN VARCHAR2,
4015 p_match_type IN VARCHAR2,
4016 p_dup_batch_id IN NUMBER,
4017 p_search_merged IN VARCHAR2,
4018 x_dup_set_id OUT NUMBER,
4019 x_search_ctx_id OUT NUMBER,
4020 x_num_matches OUT NUMBER
4021 ) IS
4022 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4023 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4024 l_contact_list HZ_PARTY_SEARCH.contact_list;
4025 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4026 l_match_idx NUMBER;
4027
4028 --Fix for bug 4417124
4029 l_use_contact_addr_info BOOLEAN := TRUE;
4030 l_use_contact_cpt_info BOOLEAN := TRUE;
4031 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4032 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
4033
4034 BEGIN
4035
4036 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4037 hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4038 END IF;
4039 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4040 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4041 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4042 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4043 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4044 hz_utility_v2pub.debug(p_message=>'p_dup_batch_id '||p_dup_batch_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4045 hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4046 END IF;
4047
4048 --Fix for bug 4417124
4049
4050 SELECT use_contact_addr_flag, use_contact_cpt_flag
4051 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
4052 FROM hz_match_rules_b
4053 WHERE match_rule_id = 37;
4054
4055 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4056 l_use_contact_addr_info := FALSE;
4057 END IF;
4058
4059 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4060 l_use_contact_cpt_info := FALSE;
4061 END IF;
4062
4063 --End fix for bug 4417124
4064
4065 get_party_for_search(
4066 p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4067
4068 IF NOT check_prim_cond (l_party_rec,
4069 l_party_site_list,
4070 l_contact_list,
4071 l_cpt_list) THEN
4072 x_dup_set_id:=NULL;
4073 x_search_ctx_id:=NULL;
4074 x_num_matches:=0;
4075 RETURN;
4076 END IF;
4077 x_dup_set_id := NULL;
4078 IF p_dup_batch_id IS NOT NULL THEN
4079 SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4080 END IF;
4081
4082 --Fix for bug 4417124
4083 IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4084 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4085 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4086 x_search_ctx_id,x_num_matches);
4087 ELSE
4088 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4089 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4090 x_search_ctx_id,x_num_matches);
4091 END IF;
4092
4093 IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4094 INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4095 STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4096 LAST_UPDATE_DATE, LAST_UPDATED_BY)
4097 VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4098 'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4099 hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4100 hz_utility_pub.user_id);
4101
4102 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4103 MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4104 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
4105 VALUES (p_party_id,x_dup_set_id,0,0,
4106 'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4107 hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4108 hz_utility_pub.user_id,p_dup_batch_id);
4109 ELSE
4110 x_dup_set_id := NULL;
4111 END IF;
4112 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4113 hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4114 END IF;
4115 EXCEPTION
4116 WHEN FND_API.G_EXC_ERROR THEN
4117 RAISE FND_API.G_EXC_ERROR;
4118 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4119 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4120 WHEN OTHERS THEN
4121 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4122 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_duplicate_parties');
4123 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4124 FND_MSG_PUB.ADD;
4125 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4126 END find_duplicate_parties;
4127
4128 PROCEDURE find_duplicate_party_sites (
4129 p_rule_id IN NUMBER,
4130 p_party_site_id IN NUMBER,
4131 p_party_id IN NUMBER,
4132 p_restrict_sql IN VARCHAR2,
4133 p_match_type IN VARCHAR2,
4134 x_search_ctx_id OUT NUMBER,
4135 x_num_matches OUT NUMBER
4136 ) IS
4137
4138 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4139 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4140 l_contact_list HZ_PARTY_SEARCH.contact_list;
4141 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4142 contact_point_ids HZ_PARTY_SEARCH.IDList;
4143 p_party_site_list HZ_PARTY_SEARCH.IDList;
4144 p_contact_ids HZ_PARTY_SEARCH.IDList;
4145 l_match_idx NUMBER;
4146 cursor get_cpts_for_party_sites is select contact_point_id
4147 from hz_contact_points
4148 where owner_table_name = 'HZ_PARTY_SITES'
4149 and primary_flag='Y'
4150 and owner_table_id = p_party_site_id;
4151 BEGIN
4152 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4153 hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4154 END IF;
4155 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4156 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4157 hz_utility_v2pub.debug(p_message=>'p_party_site_id '||p_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4158 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4159 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4160 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4161 END IF;
4162 p_party_site_list(1) := p_party_site_id;
4163 OPEN get_cpts_for_party_sites;
4164 LOOP
4165 FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids;
4166 EXIT WHEN get_cpts_for_party_sites%NOTFOUND;
4167 END LOOP;
4168 CLOSE get_cpts_for_party_sites;
4169
4170 get_search_criteria (
4171 null,
4172 p_party_site_list,
4173 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4174 contact_point_ids,
4175 l_party_search_rec,
4176 l_party_site_list,
4177 l_contact_list,
4178 l_contact_point_list) ;
4179 IF NOT check_prim_cond (l_party_search_rec,
4180 l_party_site_list,
4181 l_contact_list,
4182 l_contact_point_list) THEN
4183 x_search_ctx_id:=NULL;
4184 x_num_matches:=0;
4185 RETURN;
4186 END IF;
4187
4188 get_matching_party_sites (p_rule_id,
4189 p_party_id,
4190 l_party_site_list,
4191 l_contact_point_list,
4192 p_restrict_sql,
4193 p_match_type,
4194 p_party_site_id,
4195 x_search_ctx_id,
4196 x_num_matches);
4197 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4198 hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4199 END IF;
4200 EXCEPTION
4201 WHEN FND_API.G_EXC_ERROR THEN
4202 RAISE FND_API.G_EXC_ERROR;
4203 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4204 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4205 WHEN OTHERS THEN
4206 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4207 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_duplicate_party_sites');
4208 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4209 FND_MSG_PUB.ADD;
4210 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4211 END find_duplicate_party_sites;
4212
4213 PROCEDURE find_duplicate_contacts (
4214 p_rule_id IN NUMBER,
4215 p_org_contact_id IN NUMBER,
4216 p_party_id IN NUMBER,
4217 p_restrict_sql IN VARCHAR2,
4218 p_match_type IN VARCHAR2,
4219 x_search_ctx_id OUT NUMBER,
4220 x_num_matches OUT NUMBER
4221 ) IS
4222
4223 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4224 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4225 l_contact_list HZ_PARTY_SEARCH.contact_list;
4226 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4227 contact_point_ids HZ_PARTY_SEARCH.IDList;
4228 p_party_site_list HZ_PARTY_SEARCH.IDList;
4229 p_contact_ids HZ_PARTY_SEARCH.IDList;
4230 l_match_idx NUMBER;
4231 cursor get_cpt_for_contact_id is select contact_point_id
4232 from hz_org_contacts a, hz_relationships b, hz_contact_points c
4233 where a.party_relationship_id = b.relationship_id
4234 and c.owner_table_name = 'HZ_PARTIES'
4235 and c.primary_flag='Y'
4236 and c.owner_table_id = b.party_id
4237 and b.directional_flag = 'F'
4238 and a.org_contact_id = p_org_contact_id;
4239 BEGIN
4240 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4241 hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4242 END IF;
4243 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4244 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4245 hz_utility_v2pub.debug(p_message=>'p_org_contact_id '||p_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4246 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4247 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4248 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4249 END IF;
4250 p_contact_ids(1) := p_org_contact_id;
4251 OPEN get_cpt_for_contact_id;
4252 LOOP
4253 FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids;
4254 EXIT WHEN get_cpt_for_contact_id%NOTFOUND;
4255 END LOOP;
4256 CLOSE get_cpt_for_contact_id;
4257
4258 get_search_criteria (
4259 null,
4260 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4261 p_contact_ids,
4262 contact_point_ids,
4263 l_party_search_rec,
4264 l_party_site_list,
4265 l_contact_list,
4266 l_contact_point_list) ;
4267 IF NOT check_prim_cond (l_party_search_rec,
4268 l_party_site_list,
4269 l_contact_list,
4270 l_contact_point_list) THEN
4271 x_search_ctx_id:=NULL;
4272 x_num_matches:=0;
4273 RETURN;
4274 END IF;
4275
4276 get_matching_contacts (p_rule_id,
4277 p_party_id,
4278 l_contact_list,
4279 l_contact_point_list,
4280 p_restrict_sql,
4281 p_match_type,
4282 p_org_contact_id,
4283 x_search_ctx_id,
4284 x_num_matches);
4285
4286 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4287 hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4288 END IF;
4289 EXCEPTION
4290 WHEN FND_API.G_EXC_ERROR THEN
4291 RAISE FND_API.G_EXC_ERROR;
4292 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4293 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4294 WHEN OTHERS THEN
4295 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4296 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_duplicate_contacts');
4297 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4298 FND_MSG_PUB.ADD;
4299 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4300 END find_duplicate_contacts;
4301
4302 PROCEDURE find_duplicate_contact_points (
4303 p_rule_id IN NUMBER,
4304 p_contact_point_id IN NUMBER,
4305 p_party_id IN NUMBER,
4306 p_restrict_sql IN VARCHAR2,
4307 p_match_type IN VARCHAR2,
4308 x_search_ctx_id OUT NUMBER,
4309 x_num_matches OUT NUMBER
4310 ) IS
4311 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4312 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4313 l_contact_list HZ_PARTY_SEARCH.contact_list;
4314 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4315 contact_point_ids HZ_PARTY_SEARCH.IDList;
4316 p_party_site_list HZ_PARTY_SEARCH.IDList;
4317 p_contact_ids HZ_PARTY_SEARCH.IDList;
4318 l_match_idx NUMBER;
4319
4320 BEGIN
4321 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4322 hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4323 END IF;
4324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4326 hz_utility_v2pub.debug(p_message=>'p_contact_point_id '||p_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4327 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4328 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4329 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4330 END IF;
4331 contact_point_ids(1) := p_contact_point_id;
4332 get_search_criteria (
4333 null,
4334 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4335 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4336 contact_point_ids,
4337 l_party_search_rec,
4338 l_party_site_list,
4339 l_contact_list,
4340 l_contact_point_list );
4341
4342 IF NOT check_prim_cond (l_party_search_rec,
4343 l_party_site_list,
4344 l_contact_list,
4345 l_contact_point_list) THEN
4346 x_search_ctx_id:=NULL;
4347 x_num_matches:=0;
4348 RETURN;
4349 END IF;
4350 get_matching_contact_points (
4351 p_rule_id,
4352 p_party_id,
4353 l_contact_point_list,
4354 p_restrict_sql,
4355 p_match_type,
4356 p_contact_point_id,
4357 x_search_ctx_id,
4358 x_num_matches );
4359 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4360 hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4361 END IF;
4362 EXCEPTION
4363 WHEN FND_API.G_EXC_ERROR THEN
4364 RAISE FND_API.G_EXC_ERROR;
4365 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4366 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4367 WHEN OTHERS THEN
4368 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4369 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.find_duplicate_contact_points');
4370 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4371 FND_MSG_PUB.ADD;
4372 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4373 END find_duplicate_contact_points;
4374
4375 PROCEDURE find_parties_dynamic (
4376 p_rule_id IN NUMBER,
4377 p_attrib_id1 IN NUMBER,
4378 p_attrib_id2 IN NUMBER,
4379 p_attrib_id3 IN NUMBER,
4380 p_attrib_id4 IN NUMBER,
4381 p_attrib_id5 IN NUMBER,
4382 p_attrib_id6 IN NUMBER,
4383 p_attrib_id7 IN NUMBER,
4384 p_attrib_id8 IN NUMBER,
4385 p_attrib_id9 IN NUMBER,
4386 p_attrib_id10 IN NUMBER,
4387 p_attrib_id11 IN NUMBER,
4388 p_attrib_id12 IN NUMBER,
4389 p_attrib_id13 IN NUMBER,
4390 p_attrib_id14 IN NUMBER,
4391 p_attrib_id15 IN NUMBER,
4392 p_attrib_id16 IN NUMBER,
4393 p_attrib_id17 IN NUMBER,
4394 p_attrib_id18 IN NUMBER,
4395 p_attrib_id19 IN NUMBER,
4396 p_attrib_id20 IN NUMBER,
4397 p_attrib_val1 IN VARCHAR2,
4398 p_attrib_val2 IN VARCHAR2,
4399 p_attrib_val3 IN VARCHAR2,
4400 p_attrib_val4 IN VARCHAR2,
4401 p_attrib_val5 IN VARCHAR2,
4402 p_attrib_val6 IN VARCHAR2,
4403 p_attrib_val7 IN VARCHAR2,
4404 p_attrib_val8 IN VARCHAR2,
4405 p_attrib_val9 IN VARCHAR2,
4406 p_attrib_val10 IN VARCHAR2,
4407 p_attrib_val11 IN VARCHAR2,
4408 p_attrib_val12 IN VARCHAR2,
4409 p_attrib_val13 IN VARCHAR2,
4410 p_attrib_val14 IN VARCHAR2,
4411 p_attrib_val15 IN VARCHAR2,
4412 p_attrib_val16 IN VARCHAR2,
4413 p_attrib_val17 IN VARCHAR2,
4414 p_attrib_val18 IN VARCHAR2,
4415 p_attrib_val19 IN VARCHAR2,
4416 p_attrib_val20 IN VARCHAR2,
4417 p_restrict_sql IN VARCHAR2,
4418 p_match_type IN VARCHAR2,
4419 p_search_merged IN VARCHAR2,
4420 x_search_ctx_id OUT NUMBER,
4421 x_num_matches OUT NUMBER
4422 ) IS
4423 BEGIN
4424 call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4425 p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4426 p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4427 p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4428 p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4429 p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4430 p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4431 p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4432 p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4433 END;
4434
4435 PROCEDURE call_api_dynamic (
4436 p_rule_id IN NUMBER,
4437 p_attrib_id1 IN NUMBER,
4438 p_attrib_id2 IN NUMBER,
4439 p_attrib_id3 IN NUMBER,
4440 p_attrib_id4 IN NUMBER,
4441 p_attrib_id5 IN NUMBER,
4442 p_attrib_id6 IN NUMBER,
4443 p_attrib_id7 IN NUMBER,
4444 p_attrib_id8 IN NUMBER,
4445 p_attrib_id9 IN NUMBER,
4446 p_attrib_id10 IN NUMBER,
4447 p_attrib_id11 IN NUMBER,
4448 p_attrib_id12 IN NUMBER,
4449 p_attrib_id13 IN NUMBER,
4450 p_attrib_id14 IN NUMBER,
4451 p_attrib_id15 IN NUMBER,
4452 p_attrib_id16 IN NUMBER,
4453 p_attrib_id17 IN NUMBER,
4454 p_attrib_id18 IN NUMBER,
4455 p_attrib_id19 IN NUMBER,
4456 p_attrib_id20 IN NUMBER,
4457 p_attrib_val1 IN VARCHAR2,
4458 p_attrib_val2 IN VARCHAR2,
4459 p_attrib_val3 IN VARCHAR2,
4460 p_attrib_val4 IN VARCHAR2,
4461 p_attrib_val5 IN VARCHAR2,
4462 p_attrib_val6 IN VARCHAR2,
4463 p_attrib_val7 IN VARCHAR2,
4464 p_attrib_val8 IN VARCHAR2,
4465 p_attrib_val9 IN VARCHAR2,
4466 p_attrib_val10 IN VARCHAR2,
4467 p_attrib_val11 IN VARCHAR2,
4468 p_attrib_val12 IN VARCHAR2,
4469 p_attrib_val13 IN VARCHAR2,
4470 p_attrib_val14 IN VARCHAR2,
4471 p_attrib_val15 IN VARCHAR2,
4472 p_attrib_val16 IN VARCHAR2,
4473 p_attrib_val17 IN VARCHAR2,
4474 p_attrib_val18 IN VARCHAR2,
4475 p_attrib_val19 IN VARCHAR2,
4476 p_attrib_val20 IN VARCHAR2,
4477 p_restrict_sql IN VARCHAR2,
4478 p_api_name IN VARCHAR2,
4479 p_match_type IN VARCHAR2,
4480 p_party_id IN NUMBER,
4481 p_search_merged IN VARCHAR2,
4482 x_search_ctx_id OUT NUMBER,
4483 x_num_matches OUT NUMBER
4484 ) IS
4485 TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4486 l_match_idx NUMBER;
4487 AttrVals AttrList;
4488 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4489 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4490 l_contact_list HZ_PARTY_SEARCH.contact_list;
4491 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4492 l_dup_set_id NUMBER;
4493 l_idx NUMBER;
4494 l_cpt_type VARCHAR2(255);
4495 FIRST BOOLEAN := TRUE;
4496
4497 BEGIN
4498 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4499 hz_utility_v2pub.debug(p_message=>'call_api_dynamic(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4500 END IF;
4501
4502 IF p_attrib_id1 IS NOT NULL THEN
4503 AttrVals(p_attrib_id1):=p_attrib_val1;
4504 END IF;
4505 IF p_attrib_id2 IS NOT NULL THEN
4506 AttrVals(p_attrib_id2):=p_attrib_val2;
4507 END IF;
4508 IF p_attrib_id3 IS NOT NULL THEN
4509 AttrVals(p_attrib_id3):=p_attrib_val3;
4510 END IF;
4511 IF p_attrib_id4 IS NOT NULL THEN
4512 AttrVals(p_attrib_id4):=p_attrib_val4;
4513 END IF;
4514 IF p_attrib_id5 IS NOT NULL THEN
4515 AttrVals(p_attrib_id5):=p_attrib_val5;
4516 END IF;
4517 IF p_attrib_id6 IS NOT NULL THEN
4518 AttrVals(p_attrib_id6):=p_attrib_val6;
4519 END IF;
4520 IF p_attrib_id7 IS NOT NULL THEN
4521 AttrVals(p_attrib_id7):=p_attrib_val7;
4522 END IF;
4523 IF p_attrib_id8 IS NOT NULL THEN
4524 AttrVals(p_attrib_id8):=p_attrib_val8;
4525 END IF;
4526 IF p_attrib_id9 IS NOT NULL THEN
4527 AttrVals(p_attrib_id9):=p_attrib_val9;
4528 END IF;
4529 IF p_attrib_id10 IS NOT NULL THEN
4530 AttrVals(p_attrib_id10):=p_attrib_val10;
4531 END IF;
4532 IF p_attrib_id11 IS NOT NULL THEN
4533 AttrVals(p_attrib_id11):=p_attrib_val11;
4534 END IF;
4535 IF p_attrib_id12 IS NOT NULL THEN
4536 AttrVals(p_attrib_id12):=p_attrib_val12;
4537 END IF;
4538 IF p_attrib_id13 IS NOT NULL THEN
4539 AttrVals(p_attrib_id13):=p_attrib_val13;
4540 END IF;
4541 IF p_attrib_id14 IS NOT NULL THEN
4542 AttrVals(p_attrib_id14):=p_attrib_val14;
4543 END IF;
4544 IF p_attrib_id15 IS NOT NULL THEN
4545 AttrVals(p_attrib_id15):=p_attrib_val15;
4546 END IF;
4547 IF p_attrib_id16 IS NOT NULL THEN
4548 AttrVals(p_attrib_id16):=p_attrib_val16;
4549 END IF;
4550 IF p_attrib_id17 IS NOT NULL THEN
4551 AttrVals(p_attrib_id17):=p_attrib_val17;
4552 END IF;
4553 IF p_attrib_id18 IS NOT NULL THEN
4554 AttrVals(p_attrib_id18):=p_attrib_val18;
4555 END IF;
4556 IF p_attrib_id19 IS NOT NULL THEN
4557 AttrVals(p_attrib_id19):=p_attrib_val19;
4558 END IF;
4559 IF p_attrib_id20 IS NOT NULL THEN
4560 AttrVals(p_attrib_id20):=p_attrib_val20;
4561 END IF;
4562 IF AttrVals.EXISTS(27) THEN
4563 l_party_site_list(1).ADDRESS:= AttrVals(27);
4564 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4565 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).ADDRESS '||AttrVals(27),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4566 END IF;
4567 END IF;
4568
4569 IF AttrVals.EXISTS(29) THEN
4570 l_party_site_list(1).CITY:= AttrVals(29);
4571 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4572 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).CITY '||AttrVals(29),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4573 END IF;
4574 END IF;
4575
4576 IF AttrVals.EXISTS(30) THEN
4577 l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
4578 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4579 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).POSTAL_CODE '||AttrVals(30),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4580 END IF;
4581 END IF;
4582
4583 IF AttrVals.EXISTS(31) THEN
4584 l_party_site_list(1).PROVINCE:= AttrVals(31);
4585 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4586 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).PROVINCE '||AttrVals(31),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4587 END IF;
4588 END IF;
4589
4590 IF AttrVals.EXISTS(32) THEN
4591 l_party_site_list(1).STATE:= AttrVals(32);
4592 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4593 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).STATE '||AttrVals(32),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4594 END IF;
4595 END IF;
4596
4597 IF AttrVals.EXISTS(35) THEN
4598 l_party_site_list(1).COUNTY:= AttrVals(35);
4599 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4600 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).COUNTY '||AttrVals(35),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4601 END IF;
4602 END IF;
4603
4604 IF AttrVals.EXISTS(36) THEN
4605 l_party_site_list(1).COUNTRY:= AttrVals(36);
4606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4607 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).COUNTRY '||AttrVals(36),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4608 END IF;
4609 END IF;
4610
4611
4612 IF AttrVals.EXISTS(14) THEN
4613 l_party_rec.PARTY_TYPE:= AttrVals(14);
4614 END IF;
4615 IF upper(p_api_name) = 'FIND_PARTIES' THEN
4616 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4617 p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
4618 x_search_ctx_id,x_num_matches);
4619 ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
4620 find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4621 p_restrict_sql,p_match_type,p_search_merged,
4622 x_search_ctx_id,x_num_matches);
4623 ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
4624 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4625 p_restrict_sql,p_match_type,p_search_merged,'N',
4626 x_search_ctx_id,x_num_matches);
4627 ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
4628 get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
4629 p_restrict_sql,p_match_type,NULL,
4630 x_search_ctx_id,x_num_matches);
4631 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
4632 get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
4633 p_restrict_sql,p_match_type,NULL,
4634 x_search_ctx_id,x_num_matches);
4635 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
4636 get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
4637 p_restrict_sql,p_match_type,NULL,
4638 x_search_ctx_id,x_num_matches);
4639 END IF;
4640 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4641 hz_utility_v2pub.debug(p_message=>'call_api_dynamic(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4642 END IF;
4643 EXCEPTION
4644 WHEN FND_API.G_EXC_ERROR THEN
4645 RAISE FND_API.G_EXC_ERROR;
4646 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4647 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4648 WHEN OTHERS THEN
4649 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4650 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.call_api_dynamic');
4651 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4652 FND_MSG_PUB.ADD;
4653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4654 END call_api_dynamic;
4655
4656
4657 PROCEDURE get_matching_party_sites (
4658 p_rule_id IN NUMBER,
4659 p_party_id IN NUMBER,
4660 p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,
4661 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4662 p_restrict_sql IN VARCHAR2,
4663 p_match_type IN VARCHAR2,
4664 p_dup_party_site_id IN NUMBER,
4665 x_search_ctx_id OUT NUMBER,
4666 x_num_matches OUT NUMBER
4667 ) IS
4668
4669 -- Strings to hold the generated Intermedia query strings
4670 l_party_contains_str VARCHAR2(32000);
4671 l_match_idx NUMBER;
4672 l_party_site_contains_str VARCHAR2(32000);
4673 l_contact_contains_str VARCHAR2(32000);
4674 l_contact_pt_contains_str VARCHAR2(32000);
4675 l_tmp VARCHAR2(32000);
4676
4677 -- Other local variables
4678 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4679 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4680 -- For Score calculation
4681 l_max_score NUMBER;
4682 l_entered_max_score NUMBER;
4683 FIRST BOOLEAN;
4684 l_search_ctx_id NUMBER; -- Generated Search Context ID
4685
4686 l_TX13 VARCHAR2(2000);
4687 l_TX20 VARCHAR2(2000);
4688 l_TX9 VARCHAR2(2000);
4689 l_TX22 VARCHAR2(2000);
4690 l_TX3 VARCHAR2(2000);
4691 l_TX12 VARCHAR2(2000);
4692 l_TX15 VARCHAR2(2000);
4693 l_TX21 VARCHAR2(2000);
4694 l_TX4 VARCHAR2(2000);
4695 l_TX10 VARCHAR2(2000);
4696 l_TX11 VARCHAR2(2000);
4697 l_TX14 VARCHAR2(2000);
4698 H_SCORES HZ_PARTY_SEARCH.score_list;
4699
4700 l_score NUMBER;
4701 l_idx NUMBER;
4702 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4703 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4704 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4705 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4706 l_party_id NUMBER;
4707 l_ps_party_id NUMBER;
4708 l_ct_party_id NUMBER;
4709 l_cpt_party_id NUMBER;
4710 l_cpt_ps_id NUMBER;
4711 l_cpt_contact_id NUMBER;
4712 l_cpt_type VARCHAR2(100);
4713 l_cpt_level VARCHAR2(100);
4714 l_party_site_id NUMBER;
4715 l_org_contact_id NUMBER;
4716 l_contact_pt_id NUMBER;
4717 l_cpt_level VARCHAR2(100);
4718 l_ps_contact_id NUMBER;
4719 l_party_max_score NUMBER;
4720 l_ps_max_score NUMBER;
4721 l_contact_max_score NUMBER;
4722 l_cpt_max_score NUMBER;
4723
4724 defpt NUMBER :=0;
4725 defps NUMBER :=0;
4726 defct NUMBER :=0;
4727 defcpt NUMBER :=0;
4728 l_index NUMBER;
4729 l_match_ps_list HZ_PARTY_SEARCH.IDList;
4730 l_cnt NUMBER:=1;
4731
4732
4733 BEGIN
4734 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4735 hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4736 END IF;
4737 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4738 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4739 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4740 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4741 hz_utility_v2pub.debug(p_message=>'p_dup_party_site_id '||p_dup_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4742 END IF;
4743
4744 -- ************************************
4745 -- STEP 1. Initialization and error checks
4746
4747 l_match_str := ' OR ';
4748 IF p_match_type = 'AND' THEN
4749 l_match_str := ' AND ';
4750 ELSIF p_match_type = 'OR' THEN
4751 l_match_str := ' OR ';
4752 END IF;
4753 l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
4754 g_score_until_thresh := false;
4755 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4756
4757 -- ************************************************************
4758 -- STEP 2. Setup of intermedia query strings for Acquisition query
4759 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
4760 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
4761 init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);
4762
4763 -- Setup Search Context ID
4764 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4765 x_search_ctx_id := l_search_ctx_id;
4766
4767 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4768 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4769 hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4770 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4771 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4772 END IF;
4773 IF l_party_site_contains_str IS NULL THEN
4774 defps := 1;
4775 END IF;
4776 IF l_contact_pt_contains_str IS NULL THEN
4777 defcpt := 1;
4778 END IF;
4779
4780 IF l_party_site_contains_str IS NOT NULL THEN
4781 open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
4782 LOOP
4783 FETCH l_party_site_cur INTO
4784 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX3, l_TX4, l_TX9, l_TX10, l_TX11, l_TX12, l_TX13, l_TX14, l_TX15, l_TX20, l_TX21, l_TX22;
4785 EXIT WHEN l_party_site_cur%NOTFOUND;
4786 IF (p_dup_party_site_id IS NULL OR (
4787 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND
4788 l_party_site_id <> p_dup_party_site_id)) THEN
4789 l_index := map_id(l_party_site_id);
4790 l_match_ps_list(l_cnt):= l_party_site_id ;
4791 l_cnt:=l_cnt+1;
4792 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX12,l_TX13,l_TX14,l_TX15,l_TX20,l_TX21,l_TX22);
4793 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);
4794 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4795 hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4796 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4797 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4798 END IF;
4799 END IF;
4800 END LOOP;
4801 CLOSE l_party_site_cur;
4802 END IF;
4803
4804 IF l_contact_pt_contains_str IS NOT NULL THEN
4805 SAVEPOINT eval_start;
4806 IF l_match_str = ' AND ' OR (
4807 ((l_cpt_max_score/l_entered_max_score)<(85/145))
4808 ) THEN
4809 FORALL I in 1..l_match_ps_list.COUNT
4810 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
4811 values (l_search_ctx_id,l_match_ps_list(I));
4812 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur,'PARTY_SITES');
4813 ELSE
4814 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
4815 END IF;
4816 LOOP
4817 FETCH l_contact_pt_cur INTO
4818 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
4819 EXIT WHEN l_contact_pt_cur%NOTFOUND;
4820 IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
4821 p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN
4822 l_index := map_id(l_cpt_ps_id);
4823 IF l_match_str = ' OR ' THEN
4824 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4825 IF NOT H_SCORES.EXISTS(l_index) THEN
4826 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
4827 ELSE
4828 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4829 H_SCORES(l_index).TOTAL_SCORE :=
4830 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4831 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4832 END IF;
4833 END IF;
4834 ELSE
4835 IF H_SCORES.EXISTS(l_index) THEN
4836 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4837 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4838 H_SCORES(l_index).TOTAL_SCORE :=
4839 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4840 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4841 END IF;
4842 ELSIF defps=1 THEN
4843 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4844 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
4845 END IF;
4846 END IF;
4847 END IF;
4848 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4849 hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4850 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_cpt_ps_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4851 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4852 END IF;
4853 END LOOP;
4854 CLOSE l_contact_pt_cur;
4855 ROLLBACK TO eval_start;
4856 END IF;
4857 x_num_matches := 0;
4858 l_party_site_id := H_SCORES.FIRST;
4859 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4860 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 59 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4861 END IF;
4862 WHILE l_party_site_id IS NOT NULL LOOP
4863 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4864 hz_utility_v2pub.debug(p_message=>'Match Party Site ID '||H_SCORES(l_party_site_id).PARTY_SITE_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4865 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4866 END IF;
4867 IF l_match_str = ' OR ' THEN
4868 IF (H_SCORES(l_party_site_id).TOTAL_SCORE)>=( ROUND((145/145) * 85) ) THEN
4869 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4870 VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);
4871 x_num_matches := x_num_matches+1;
4872 END IF;
4873 ELSE
4874 IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
4875 H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
4876 (H_SCORES(l_party_site_id).TOTAL_SCORE)>=(ROUND((145/145) * 85)) THEN
4877 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4878 VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));
4879 x_num_matches := x_num_matches+1;
4880 END IF;
4881 END IF;
4882 l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
4883 END LOOP;
4884 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4885 hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4886 END IF;
4887 EXCEPTION
4888 WHEN FND_API.G_EXC_ERROR THEN
4889 RAISE FND_API.G_EXC_ERROR;
4890 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4891 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4892 WHEN OTHERS THEN
4893 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4894 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.get_matching_party_sites');
4895 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4896 FND_MSG_PUB.ADD;
4897 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4898 END get_matching_party_sites;
4899
4900
4901 PROCEDURE get_matching_contacts (
4902 p_rule_id IN NUMBER,
4903 p_party_id IN NUMBER,
4904 p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,
4905 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4906 p_restrict_sql IN VARCHAR2,
4907 p_match_type IN VARCHAR2,
4908 p_dup_contact_id IN NUMBER,
4909 x_search_ctx_id OUT NUMBER,
4910 x_num_matches OUT NUMBER
4911 ) IS
4912
4913 -- Strings to hold the generated Intermedia query strings
4914 l_party_contains_str VARCHAR2(32000);
4915 l_party_site_contains_str VARCHAR2(32000);
4916 l_contact_contains_str VARCHAR2(32000);
4917 l_contact_pt_contains_str VARCHAR2(32000);
4918 l_tmp VARCHAR2(32000);
4919
4920 -- Other local variables
4921 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4922 l_match_idx NUMBER;
4923 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4924 -- For Score calculation
4925 l_max_score NUMBER;
4926 l_entered_max_score NUMBER;
4927 FIRST BOOLEAN;
4928 l_search_ctx_id NUMBER; -- Generated Search Context ID
4929
4930 H_SCORES HZ_PARTY_SEARCH.score_list;
4931
4932 l_score NUMBER;
4933 l_idx NUMBER;
4934 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4935 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4936 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4937 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4938 l_party_id NUMBER;
4939 l_ps_party_id NUMBER;
4940 l_ct_party_id NUMBER;
4941 l_cpt_party_id NUMBER;
4942 l_cpt_ps_id NUMBER;
4943 l_cpt_contact_id NUMBER;
4944 l_cpt_type VARCHAR2(100);
4945 l_party_site_id NUMBER;
4946 l_org_contact_id NUMBER;
4947 l_contact_pt_id NUMBER;
4948
4949 defpt NUMBER :=0;
4950 defps NUMBER :=0;
4951 defct NUMBER :=0;
4952 defcpt NUMBER :=0;
4953 l_index NUMBER;
4954 l_party_max_score NUMBER;
4955 l_ps_max_score NUMBER;
4956 l_contact_max_score NUMBER;
4957 l_cpt_max_score NUMBER;
4958 l_match_contact_list HZ_PARTY_SEARCH.IDList;
4959 l_cnt NUMBER:=1;
4960
4961
4962 BEGIN
4963 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4964 hz_utility_v2pub.debug(p_message=>'get_matching_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4965 END IF;
4966 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4967 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4968 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4969 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4970 hz_utility_v2pub.debug(p_message=>'p_dup_contact_id '||p_dup_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4971 END IF;
4972
4973 -- ************************************
4974 -- STEP 1. Initialization and error checks
4975
4976 l_match_str := ' OR ';
4977 IF p_match_type = 'AND' THEN
4978 l_match_str := ' AND ';
4979 ELSIF p_match_type = 'OR' THEN
4980 l_match_str := ' OR ';
4981 END IF;
4982 l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
4983 g_score_until_thresh := false;
4984 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4985
4986 -- ************************************************************
4987 -- STEP 2. Setup of intermedia query strings for Acquisition query
4988 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
4989 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
4990 init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);
4991
4992 -- Setup Search Context ID
4993 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4994 x_search_ctx_id := l_search_ctx_id;
4995
4996 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4997 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4998 hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4999 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5000 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5001 END IF;
5002 IF l_contact_contains_str IS NULL THEN
5003 defct := 1;
5004 END IF;
5005 IF l_contact_pt_contains_str IS NULL THEN
5006 defcpt := 1;
5007 END IF;
5008
5009 IF l_contact_contains_str IS NOT NULL THEN
5010 open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5011 LOOP
5012 FETCH l_contact_cur INTO
5013 l_org_contact_id, l_ct_party_id ;
5014 EXIT WHEN l_contact_cur%NOTFOUND;
5015 IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN
5016 l_index := map_id(l_org_contact_id);
5017 l_match_contact_list(l_cnt):=l_org_contact_id;
5018 l_cnt:=l_cnt+1;
5019 l_score := GET_CONTACTS_SCORE(l_match_idx);
5020 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);
5021 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5022 hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5023 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5024 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5025 END IF;
5026 END IF;
5027 END LOOP;
5028 CLOSE l_contact_cur;
5029 END IF;
5030
5031 IF l_contact_pt_contains_str IS NOT NULL THEN
5032 SAVEPOINT eval_start;
5033 IF l_match_str = ' AND ' OR (
5034 ((l_cpt_max_score/l_entered_max_score)<(85/145))
5035 ) THEN
5036 FORALL I in 1..l_match_contact_list.COUNT
5037 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5038 values (l_search_ctx_id,l_match_contact_list(I));
5039 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur,'CONTACTS');
5040 ELSE
5041 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5042 END IF;
5043 LOOP
5044 FETCH l_contact_pt_cur INTO
5045 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5046 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5047 IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <> p_dup_contact_id)) THEN
5048 l_index := map_id(l_cpt_contact_id);
5049 IF l_match_str = ' OR ' THEN
5050 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5051 IF NOT H_SCORES.EXISTS(l_index) THEN
5052 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
5053 ELSE
5054 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5055 H_SCORES(l_index).TOTAL_SCORE :=
5056 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5057 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5058 END IF;
5059 END IF;
5060 ELSE
5061 IF H_SCORES.EXISTS(l_index) THEN
5062 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5063 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5064 H_SCORES(l_index).TOTAL_SCORE :=
5065 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5066 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5067 END IF;
5068 ELSIF defps=1 THEN
5069 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5070 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
5071 END IF;
5072 END IF;
5073 END IF;
5074 END LOOP;
5075 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5076 hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5077 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_cpt_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5078 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5079 END IF;
5080 CLOSE l_contact_pt_cur;
5081 END IF;
5082 x_num_matches := 0;
5083 l_org_contact_id := H_SCORES.FIRST;
5084 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5085 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 59 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5086 END IF;
5087 WHILE l_org_contact_id IS NOT NULL LOOP
5088 IF l_match_str = ' OR ' THEN
5089 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5090 hz_utility_v2pub.debug(p_message=>'Match Contact ID '||H_SCORES(l_org_contact_id).ORG_CONTACT_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5091 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5092 END IF;
5093 IF (H_SCORES(l_org_contact_id).TOTAL_SCORE)>=(ROUND((0/145) * 85)) THEN
5094 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5095 VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);
5096 x_num_matches := x_num_matches+1;
5097 END IF;
5098 ELSE
5099 IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5100 H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5101 (H_SCORES(l_org_contact_id).TOTAL_SCORE)>=(ROUND((0/145) * 85)) THEN
5102 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5103 VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));
5104 x_num_matches := x_num_matches+1;
5105 END IF;
5106 END IF;
5107 l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5108 END LOOP;
5109 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5110 hz_utility_v2pub.debug(p_message=>'get_matching_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5111 END IF;
5112 EXCEPTION
5113 WHEN FND_API.G_EXC_ERROR THEN
5114 RAISE FND_API.G_EXC_ERROR;
5115 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5116 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5117 WHEN OTHERS THEN
5118 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5119 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.get_matching_contacts');
5120 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5121 FND_MSG_PUB.ADD;
5122 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5123 END get_matching_contacts;
5124
5125
5126 PROCEDURE get_matching_contact_points (
5127 p_rule_id IN NUMBER,
5128 p_party_id IN NUMBER,
5129 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5130 p_restrict_sql IN VARCHAR2,
5131 p_match_type IN VARCHAR2,
5132 p_dup_contact_point_id IN NUMBER,
5133 x_search_ctx_id OUT NUMBER,
5134 x_num_matches OUT NUMBER
5135 ) IS
5136
5137
5138 -- Strings to hold the generated Intermedia query strings
5139 l_contact_pt_contains_str VARCHAR2(32000);
5140 l_tmp VARCHAR2(32000);
5141
5142 -- Other local variables
5143 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5144 l_match_idx NUMBER;
5145 -- For Score calculation
5146 l_entered_max_score NUMBER;
5147 l_search_ctx_id NUMBER; -- Generated Search Context ID
5148
5149
5150 l_score NUMBER;
5151 l_idx NUMBER;
5152 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5153 l_cpt_party_id NUMBER;
5154 l_cpt_ps_id NUMBER;
5155 l_cpt_contact_id NUMBER;
5156 l_contact_pt_id NUMBER;
5157 l_cpt_type VARCHAR2(100);
5158 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5159 H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5160 H_SCORE HZ_PARTY_SEARCH.IDList;
5161
5162 cnt NUMBER :=0;
5163 l_party_max_score NUMBER;
5164 l_ps_max_score NUMBER;
5165 l_contact_max_score NUMBER;
5166 l_cpt_max_score NUMBER;
5167
5168
5169 BEGIN
5170 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5171 hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5172 END IF;
5173 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5174 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5175 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5176 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5177 hz_utility_v2pub.debug(p_message=>'p_dup_contact_point_id '||p_dup_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5178 END IF;
5179
5180 -- ************************************
5181 -- STEP 1. Initialization and error checks
5182
5183 l_match_str := ' OR ';
5184 IF p_match_type = 'AND' THEN
5185 l_match_str := ' AND ';
5186 ELSIF p_match_type = 'OR' THEN
5187 l_match_str := ' OR ';
5188 END IF;
5189 l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
5190 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5191 p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5192 g_score_until_thresh := false;
5193 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5194
5195 -- ************************************************************
5196 -- STEP 2. Setup of intermedia query strings for Acquisition query
5197 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5198 init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);
5199
5200 -- Setup Search Context ID
5201 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5202 x_search_ctx_id := l_search_ctx_id;
5203 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5204 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5205 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5206 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5207 END IF;
5208
5209 IF l_contact_pt_contains_str IS NOT NULL THEN
5210 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5211 cnt := 1;
5212 LOOP
5213 FETCH l_contact_pt_cur INTO
5214 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5215 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5216 IF (p_dup_contact_point_id IS NULL OR (
5217 p_dup_contact_point_id IS NOT NULL AND
5218 l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND
5219 p_dup_contact_point_id <> l_contact_pt_id)) THEN
5220 H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5221 H_PARTY_ID(cnt) := l_cpt_party_id;
5222 H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx);
5223 cnt := cnt+1;
5224 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5225 hz_utility_v2pub.debug(p_message=>'Contact Point Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5226 hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5227 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5228 END IF;
5229 END IF;
5230 END LOOP;
5231 CLOSE l_contact_pt_cur;
5232 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5233 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 59 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5234 END IF;
5235 x_num_matches := 0;
5236 FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5237 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5238 hz_utility_v2pub.debug(p_message=>'Match Contact Point ID '||H_CONTACT_POINT_ID(I),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5239 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORE(I)/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5240 END IF;
5241 IF (H_SCORE(I)) >= (ROUND((0/145) * 85)) THEN
5242 INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5243 l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5244 x_num_matches := x_num_matches + 1;
5245 END IF;
5246 END LOOP;
5247 END IF;
5248 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5249 hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5250 END IF;
5251 EXCEPTION
5252 WHEN FND_API.G_EXC_ERROR THEN
5253 RAISE FND_API.G_EXC_ERROR;
5254 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5255 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5256 WHEN OTHERS THEN
5257 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5258 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.get_matching_contact_points');
5259 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5260 FND_MSG_PUB.ADD;
5261 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5262 END get_matching_contact_points;
5263
5264 /**********************************************************
5265 This procedure finds the score details for a specific party that
5266 matched
5267
5268 **********************************************************/
5269
5270 PROCEDURE get_score_details (
5271 p_rule_id IN NUMBER,
5272 p_party_id IN NUMBER,
5273 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5274 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
5275 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
5276 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
5277 x_search_ctx_id IN OUT NUMBER
5278 ) IS
5279
5280 -- Strings to hold the generated Intermedia query strings
5281 l_party_contains_str VARCHAR2(32000);
5282 l_party_site_contains_str VARCHAR2(32000);
5283 l_contact_contains_str VARCHAR2(32000);
5284 l_contact_pt_contains_str VARCHAR2(32000);
5285 l_tmp VARCHAR2(32000);
5286
5287 -- Other local variables
5288 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5289 -- For Score calculation
5290 l_max_score NUMBER;
5291 l_entered_max_score NUMBER;
5292 FIRST BOOLEAN;
5293 l_search_ctx_id NUMBER; -- Generated Search Context ID
5294
5295 l_TX13 VARCHAR2(2000);
5296 l_max_TX13 VARCHAR2(2000);
5297 l_TX20 VARCHAR2(2000);
5298 l_max_TX20 VARCHAR2(2000);
5299 l_TX9 VARCHAR2(2000);
5300 l_max_TX9 VARCHAR2(2000);
5301 l_TX22 VARCHAR2(2000);
5302 l_max_TX22 VARCHAR2(2000);
5303 l_TX3 VARCHAR2(2000);
5304 l_max_TX3 VARCHAR2(2000);
5305 l_TX12 VARCHAR2(2000);
5306 l_max_TX12 VARCHAR2(2000);
5307 l_TX15 VARCHAR2(2000);
5308 l_max_TX15 VARCHAR2(2000);
5309 l_TX21 VARCHAR2(2000);
5310 l_max_TX21 VARCHAR2(2000);
5311 l_TX4 VARCHAR2(2000);
5312 l_max_TX4 VARCHAR2(2000);
5313 l_TX10 VARCHAR2(2000);
5314 l_max_TX10 VARCHAR2(2000);
5315 l_TX11 VARCHAR2(2000);
5316 l_max_TX11 VARCHAR2(2000);
5317 l_TX14 VARCHAR2(2000);
5318 l_max_TX14 VARCHAR2(2000);
5319 H_SCORES HZ_PARTY_SEARCH.score_list;
5320
5321 l_score NUMBER;
5322 l_match_idx NUMBER;
5323 l_idx NUMBER;
5324 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5325 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5326 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5327 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5328 l_party_id NUMBER;
5329 l_ps_party_id NUMBER;
5330 l_ct_party_id NUMBER;
5331 l_cpt_party_id NUMBER;
5332 l_cpt_ps_id NUMBER;
5333 l_cpt_contact_id NUMBER;
5334 l_cpt_type VARCHAR2(100);
5335 l_party_site_id NUMBER;
5336 l_org_contact_id NUMBER;
5337 l_contact_pt_id NUMBER;
5338 l_ps_contact_id NUMBER;
5339 l_max_id NUMBER;
5340 l_max_idx NUMBER;
5341
5342 l_index NUMBER;
5343 l_party_max_score NUMBER;
5344 l_ps_max_score NUMBER;
5345 l_contact_max_score NUMBER;
5346 l_cpt_max_score NUMBER;
5347
5348 --Fix for bug 4417124
5349 l_use_contact_addr_info BOOLEAN:=TRUE;
5350 l_use_contact_cpt_info BOOLEAN:=TRUE;
5351 l_TX35_new VARCHAR2(4000);
5352
5353 BEGIN
5354
5355 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5356 hz_utility_v2pub.debug(p_message=>'get_score_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5357 END IF;
5358 -- ************************************
5359 -- STEP 1. Initialization and error checks
5360
5361 l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,' OR ', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5362 g_score_until_thresh := false;
5363 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5364 -- ************************************************************
5365 -- STEP 2. Setup of intermedia query strings for Acquisition query
5366 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5367 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5368 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5369 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5370
5371 -- Setup Search Context ID
5372 IF x_search_ctx_id IS NULL THEN
5373 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5374 x_search_ctx_id := l_search_ctx_id;
5375 ELSE
5376 l_search_ctx_id := x_search_ctx_id;
5377 END IF;
5378
5379 open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5380 LOOP
5381 FETCH l_party_cur INTO
5382 l_party_id ;
5383 EXIT WHEN l_party_cur%NOTFOUND;
5384 END LOOP;
5385 CLOSE l_party_cur;
5386
5387 IF l_party_site_contains_str IS NOT NULL THEN
5388 l_max_score := 0;
5389 l_max_id := 0;
5390 l_max_idx := 0;
5391 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5392 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5393 ELSE
5394 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5395 END IF;
5396 LOOP
5397 FETCH l_party_site_cur INTO
5398 l_party_site_id, l_ps_party_id,l_ps_contact_id , l_TX3, l_TX4, l_TX9, l_TX10, l_TX11, l_TX12, l_TX13, l_TX14, l_TX15, l_TX20, l_TX21, l_TX22;
5399 EXIT WHEN l_party_site_cur%NOTFOUND;
5400 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX12,l_TX13,l_TX14,l_TX15,l_TX20,l_TX21,l_TX22);
5401 IF l_score > l_max_score THEN
5402 l_max_score := l_score;
5403 l_max_id := l_party_site_id;
5404 l_max_idx := l_match_idx;
5405 l_max_TX13 := l_TX13;
5406 l_max_TX20 := l_TX20;
5407 l_max_TX9 := l_TX9;
5408 l_max_TX22 := l_TX22;
5409 l_max_TX3 := l_TX3;
5410 l_max_TX12 := l_TX12;
5411 l_max_TX15 := l_TX15;
5412 l_max_TX21 := l_TX21;
5413 l_max_TX4 := l_TX4;
5414 l_max_TX10 := l_TX10;
5415 l_max_TX11 := l_TX11;
5416 l_max_TX14 := l_TX14;
5417 END IF;
5418 END LOOP;
5419 CLOSE l_party_site_cur;
5420 IF l_max_score>0 THEN
5421 INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) ,l_max_TX3,l_max_TX4,l_max_TX9,l_max_TX10,l_max_TX11,l_max_TX12,l_max_TX13,l_max_TX14,l_max_TX15,l_max_TX20,l_max_TX21,l_max_TX22,l_max_idx);
5422 END IF;
5423 END IF;
5424
5425 IF l_contact_contains_str IS NOT NULL THEN
5426 l_max_score := 0;
5427 l_max_id := 0;
5428 l_max_idx := 0;
5429 open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5430 LOOP
5431 FETCH l_contact_cur INTO
5432 l_org_contact_id, l_ct_party_id ;
5433 EXIT WHEN l_contact_cur%NOTFOUND;
5434 l_score := GET_CONTACTS_SCORE(l_match_idx);
5435 IF l_score > l_max_score THEN
5436 l_max_score := l_score;
5437 l_max_id := l_org_contact_id;
5438 l_max_idx := l_match_idx;
5439 END IF;
5440 END LOOP;
5441 CLOSE l_contact_cur;
5442 IF l_max_score>0 THEN
5443 INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) ,l_max_idx);
5444 END IF;
5445 END IF;
5446
5447 IF l_contact_pt_contains_str IS NOT NULL THEN
5448 l_max_score := 0;
5449 l_max_id := 0;
5450 l_max_idx := 0;
5451 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5452 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5453 ELSE
5454 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5455 END IF;
5456 LOOP
5457 FETCH l_contact_pt_cur INTO
5458 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5459 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5460 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5461 IF l_score > l_max_score THEN
5462 l_max_score := l_score;
5463 l_max_id := l_contact_pt_id;
5464 l_max_idx := l_match_idx;
5465 END IF;
5466 END LOOP;
5467 IF l_max_score>0 THEN
5468 INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) ,l_max_idx);
5469 END IF;
5470 CLOSE l_contact_pt_cur;
5471 END IF;
5472 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5473 hz_utility_v2pub.debug(p_message=>'get_score_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5474 END IF;
5475 EXCEPTION
5476 WHEN FND_API.G_EXC_ERROR THEN
5477 RAISE FND_API.G_EXC_ERROR;
5478 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5479 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5480 WHEN OTHERS THEN
5481 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5482 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_37.get_score_details');
5483 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5484 FND_MSG_PUB.ADD;
5485 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5486 END get_score_details;
5487
5488
5489 /************************************************
5490 This procedure retrieves the match rule attributes into
5491 the search record structures
5492 ************************************************/
5493
5494 PROCEDURE get_party_for_search (
5495 p_party_id IN NUMBER,
5496 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5497 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5498 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5499 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5500 ) IS
5501 l_party_id NUMBER;
5502 l_party_site_ids HZ_PARTY_SEARCH.IDList;
5503 l_contact_ids HZ_PARTY_SEARCH.IDList;
5504 l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5505 ps NUMBER :=1;
5506 cpt NUMBER :=1;
5507 ct NUMBER :=1;
5508 l_use_contact_info varchar2(1);
5509 BEGIN
5510
5511 l_use_contact_info := 'Y';
5512 IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5513 l_use_contact_info := 'N';
5514 END IF;
5515 l_party_id := null;
5516 FOR PARTY_SITES IN (
5517 SELECT party_site_id FROM (
5518 SELECT party_site_id,identifying_address_flag
5519 FROM HZ_PARTY_SITES
5520 WHERE party_id = p_party_id
5521 AND (status is null OR status = 'A')
5522 AND identifying_address_flag='Y'
5523 UNION
5524
5525 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5526 FROM HZ_PARTY_SITES
5527 WHERE party_id = p_party_id
5528 AND (status is null OR status = 'A')
5529 AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5530 AND ROWNUM<6
5531 UNION
5532
5533 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5534 FROM HZ_PARTY_SITES
5535 WHERE (status is null OR status = 'A')
5536 AND party_id in (
5537 SELECT party_id
5538 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5539 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5540 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5541 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5542 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5543 and l_use_contact_info = 'Y'
5544 )
5545 AND ROWNUM<6
5546 ) order by identifying_address_flag desc
5547 ) LOOP
5548 l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5549 ps:=ps+1;
5550 END LOOP;
5551 get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
5552 x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
5553 EXCEPTION
5554 WHEN FND_API.G_EXC_ERROR THEN
5555 RAISE FND_API.G_EXC_ERROR;
5556 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5557 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5558 WHEN OTHERS THEN
5559 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5560 FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
5561 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5562 FND_MSG_PUB.ADD;
5563 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5564 END get_party_for_search;
5565
5566 PROCEDURE get_search_criteria (
5567 p_party_id IN NUMBER,
5568 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5569 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5570 p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,
5571 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5572 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5573 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5574 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5575 ) IS
5576 BEGIN
5577
5578 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5579 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - get_search_criteria',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5580 END IF;
5581 IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
5582 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5583 hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5584 END IF;
5585 get_party_site_rec(p_party_site_ids, x_party_site_list);
5586 END IF;
5587 EXCEPTION
5588 WHEN FND_API.G_EXC_ERROR THEN
5589 RAISE FND_API.G_EXC_ERROR;
5590 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5591 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5592 WHEN OTHERS THEN
5593 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5594 FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
5595 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5596 FND_MSG_PUB.ADD;
5597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5598 END get_search_criteria;
5599
5600
5601 /************************************************
5602 This procedure retrieves the match rule party attributes into
5603 the party search record structure
5604 ************************************************/
5605
5606 PROCEDURE get_party_rec (
5607 p_party_id IN NUMBER,
5608 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
5609 ) IS
5610 l_party_type VARCHAR2(255);
5611 BEGIN
5612
5613 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5614 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5615 END IF;
5616 SELECT PARTY_TYPE INTO l_party_type
5617 FROM HZ_PARTIES
5618 WHERE PARTY_ID = p_party_id;
5619
5620 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5621 hz_utility_v2pub.debug(p_message=>'l_party_type is - '||l_party_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5622 END IF;
5623 IF l_party_type = 'ORGANIZATION' THEN
5624 NULL;
5625 ELSIF l_party_type = 'PERSON' THEN
5626 NULL;
5627 END IF;
5628 x_party_search_rec.PARTY_TYPE := l_party_type;
5629 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5630 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5631 END IF;
5632
5633 EXCEPTION
5634 WHEN OTHERS THEN
5635 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5636 FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
5637 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
5638 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5639 FND_MSG_PUB.ADD;
5640 RAISE FND_API.G_EXC_ERROR;
5641 END get_party_rec;
5642
5643 /************************************************
5644 This procedure retrieves the match rule party site attributes into
5645 the party site search record structure
5646 ************************************************/
5647
5648 PROCEDURE get_party_site_rec (
5649 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5650 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
5651 ) IS
5652 CURSOR c_party_sites(cp_party_site_id NUMBER) IS
5653 SELECT party_site_id
5654 ,translate(HZ_LOCATIONS.CITY, '%',' ')
5655 ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
5656 ,translate(HZ_LOCATIONS.COUNTY, '%',' ')
5657 ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
5658 ,translate(HZ_LOCATIONS.PROVINCE, '%',' ')
5659 ,translate(HZ_LOCATIONS.STATE, '%',' ')
5660 FROM HZ_PARTY_SITES, HZ_LOCATIONS
5661 WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
5662 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
5663
5664 I NUMBER;
5665 J NUMBER:=1;
5666 l_party_site_id NUMBER;
5667
5668 BEGIN
5669
5670 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5671 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5672 END IF;
5673 FOR I IN 1..p_party_site_ids.COUNT LOOP
5674 l_party_site_id := p_party_site_ids(I);
5675 OPEN c_party_sites(p_party_site_ids(I));
5676 LOOP
5677 FETCH c_party_sites INTO
5678 l_party_site_id
5679 ,x_party_site_list(J).CITY
5680 ,x_party_site_list(J).COUNTRY
5681 ,x_party_site_list(J).COUNTY
5682 ,x_party_site_list(J).POSTAL_CODE
5683 ,x_party_site_list(J).PROVINCE
5684 ,x_party_site_list(J).STATE
5685 ;
5686 EXIT WHEN c_party_sites%NOTFOUND;
5687
5688 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5689 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5690 END IF;
5691 x_party_site_list(J).ADDRESS:=
5692 HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
5693 J:=J+1;
5694
5695 END LOOP;
5696 CLOSE c_party_sites;
5697 END LOOP;
5698
5699 EXCEPTION
5700 WHEN OTHERS THEN
5701 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5702 FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
5703 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
5704 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5705 FND_MSG_PUB.ADD;
5706 RAISE FND_API.G_EXC_ERROR;
5707 END get_party_site_rec;
5708
5709 /************************************************
5710 This procedure retrieves the match rule contact attributes into
5711 the contact search record structure
5712 ************************************************/
5713
5714 PROCEDURE get_contact_rec (
5715 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5716 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list
5717 ) IS
5718 CURSOR c_contacts(cp_org_contact_id NUMBER) IS
5719 SELECT org_contact_id
5720 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
5721 WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
5722 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5723 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5724 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5725 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5726 AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
5727 AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
5728
5729 I NUMBER;
5730 l_org_contact_id NUMBER;
5731 J NUMBER:=1;
5732 BEGIN
5733
5734 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5735 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5736 END IF;
5737 FOR I IN 1..p_contact_ids.COUNT LOOP
5738 l_org_contact_id := p_contact_ids(I);
5739 OPEN c_contacts(p_contact_ids(I));
5740 LOOP
5741 FETCH c_contacts INTO
5742 l_org_contact_id
5743 ;
5744 EXIT WHEN c_contacts%NOTFOUND;
5745
5746 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5747 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5748 END IF;
5749
5750 J:=J+1;
5751 END LOOP;
5752 CLOSE c_contacts;
5753 END LOOP;
5754
5755 EXCEPTION
5756 WHEN OTHERS THEN
5757 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5758 FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
5759 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
5760 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5761 FND_MSG_PUB.ADD;
5762 RAISE FND_API.G_EXC_ERROR;
5763 END get_contact_rec;
5764
5765 /************************************************
5766 This procedure retrieves the match rule contact point attributes into
5767 the contact point search record structure
5768 ************************************************/
5769
5770 PROCEDURE get_contact_point_rec (
5771 p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,
5772 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5773 ) IS
5774
5775 -- Cursor to fetch primary contact points for party
5776 CURSOR c_cpts(cp_contact_point_id NUMBER) IS
5777 SELECT contact_point_id, contact_point_type
5778 FROM HZ_CONTACT_POINTS
5779 WHERE contact_point_id = cp_contact_point_id;
5780
5781 I NUMBER;
5782 l_contact_point_id NUMBER;
5783 J NUMBER:=1;
5784 BEGIN
5785
5786 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5787 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_point_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5788 END IF;
5789 FOR I in 1..p_contact_point_ids.COUNT LOOP
5790 l_contact_point_id := p_contact_point_ids(I);
5791 OPEN c_cpts(p_contact_point_ids(I));
5792 LOOP
5793 FETCH c_cpts INTO
5794 l_contact_point_id, x_contact_point_list(J).contact_point_type
5795 ;
5796 EXIT WHEN c_cpts%NOTFOUND;
5797
5798 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5799 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5800 END IF;
5801 J:=J+1;
5802
5803 END LOOP;
5804 CLOSE c_cpts;
5805 END LOOP;
5806
5807 EXCEPTION
5808 WHEN OTHERS THEN
5809 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5810 FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
5811 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
5812 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5813 FND_MSG_PUB.ADD;
5814 RAISE FND_API.G_EXC_ERROR;
5815 END get_contact_point_rec;
5816
5817 /************************************************
5818 This procedure maps a search record from the logical
5819 record structure to the stage schema structure
5820 for the PARTY Entity after applying
5821 the defined transformations
5822 ************************************************/
5823
5824 PROCEDURE MAP_PARTY_REC(
5825 p_search_ctx IN BOOLEAN,
5826 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5827 x_entered_max_score OUT NUMBER,
5828 x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
5829 ) IS
5830 tmp VARCHAR2(4000);
5831 l_party_name VARCHAR2(4000);
5832 BEGIN
5833 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5834 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5835 END IF;
5836 IF p_search_ctx THEN
5837 x_stage_rec.TX8 := NULL;
5838 g_other_party_level_attribs:=FALSE;
5839 x_entered_max_score:=0;
5840 END IF;
5841 IF p_search_ctx THEN
5842 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
5843 x_stage_rec.TX36 :=
5844 HZ_TRANS_PKG.EXACT(
5845 p_search_rec.PARTY_TYPE
5846 ,null,'PARTY_TYPE'
5847 ,'PARTY');
5848 ELSE
5849 x_stage_rec.TX36 := '';
5850 END IF;
5851 END IF;
5852 l_party_name := p_search_rec.PARTY_NAME;
5853 IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
5854 l_party_name := p_search_rec.PARTY_ALL_NAMES;
5855 END IF;
5856 IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
5857 x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SDIB');
5858 END IF;
5859 EXCEPTION
5860 WHEN OTHERS THEN
5861 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
5862 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
5863 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5864 FND_MSG_PUB.ADD;
5865 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5866 END;
5867
5868
5869 /************************************************
5870 This procedure maps a search record from the logical
5871 record structure to the stage schema structure
5872 for the PARTY_SITES Entity after applying
5873 the defined transformations
5874 ************************************************/
5875
5876 PROCEDURE MAP_PARTY_SITE_REC(
5877 p_search_ctx IN BOOLEAN,
5878 p_search_list IN HZ_PARTY_SEARCH.party_site_list,
5879 x_entered_max_score OUT NUMBER,
5880 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
5881 ) IS
5882 l_current_max_score NUMBER;
5883 tmp VARCHAR2(4000);
5884 BEGIN
5885 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5886 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_SITE_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5887 END IF;
5888 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5889 hz_utility_v2pub.debug(p_message=>'p_entity - PARTY_SITES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5890 END IF;
5891 IF p_search_ctx THEN
5892 g_ps_den_only:=TRUE;
5893 x_entered_max_score:=0;
5894 FOR I IN 1..p_search_list.COUNT LOOP
5895 l_current_max_score:=0;
5896 IF p_search_list(I).ADDRESS IS NOT NULL THEN
5897 l_current_max_score := l_current_max_score+50;
5898 g_ps_den_only:=FALSE;
5899 END IF;
5900 IF p_search_list(I).CITY IS NOT NULL THEN
5901 l_current_max_score := l_current_max_score+20;
5902 END IF;
5903 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
5904 l_current_max_score := l_current_max_score+25;
5905 END IF;
5906 IF p_search_list(I).PROVINCE IS NOT NULL THEN
5907 l_current_max_score := l_current_max_score+15;
5908 END IF;
5909 IF p_search_list(I).STATE IS NOT NULL THEN
5910 l_current_max_score := l_current_max_score+15;
5911 END IF;
5912 IF p_search_list(I).COUNTY IS NOT NULL THEN
5913 l_current_max_score := l_current_max_score+15;
5914 END IF;
5915 IF p_search_list(I).COUNTRY IS NOT NULL THEN
5916 l_current_max_score := l_current_max_score+5;
5917 END IF;
5918 IF l_current_max_score>x_entered_max_score THEN
5919 x_entered_max_score:=l_current_max_score;
5920 END IF;
5921 END LOOP;
5922 END IF;
5923 FOR I IN 1..p_search_list.COUNT LOOP
5924 IF p_search_ctx THEN
5925 IF p_search_list(I).ADDRESS IS NOT NULL THEN
5926 x_stage_list(I).TX4 :=
5927 HZ_TRANS_PKG.WRADDRESS_CLEANSE(
5928 p_search_list(I).ADDRESS
5929 ,null,'ADDRESS'
5930 ,'PARTY_SITES','SDIB');
5931 ELSE
5932 x_stage_list(I).TX4 := '';
5933 END IF;
5934 ELSE
5935 IF p_search_list(I).ADDRESS IS NOT NULL THEN
5936 tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
5937 x_stage_list(I).TX4
5938 ,null,'ADDRESS'
5939 ,'PARTY_SITES','SCORE');
5940 IF tmp IS NOT NULL THEN
5941 x_stage_list(I).TX4 := tmp;
5942 END IF;
5943 END IF;
5944 END IF;
5945 END LOOP;
5946 FOR I IN 1..p_search_list.COUNT LOOP
5947 IF p_search_ctx THEN
5948 IF p_search_list(I).ADDRESS IS NOT NULL THEN
5949 x_stage_list(I).TX3 :=
5950 HZ_TRANS_PKG.WRADDRESS_EXACT(
5951 p_search_list(I).ADDRESS
5952 ,null,'ADDRESS'
5953 ,'PARTY_SITES','SDIB');
5954 ELSE
5955 x_stage_list(I).TX3 := '';
5956 END IF;
5957 ELSE
5958 IF p_search_list(I).ADDRESS IS NOT NULL THEN
5959 tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
5960 x_stage_list(I).TX3
5961 ,null,'ADDRESS'
5962 ,'PARTY_SITES','SCORE');
5963 IF tmp IS NOT NULL THEN
5964 x_stage_list(I).TX3 := tmp;
5965 END IF;
5966 END IF;
5967 END IF;
5968 END LOOP;
5969 FOR I IN 1..p_search_list.COUNT LOOP
5970 IF p_search_ctx THEN
5971 IF p_search_list(I).CITY IS NOT NULL THEN
5972 x_stage_list(I).TX10 :=
5973 HZ_TRANS_PKG.CLEANSE(
5974 p_search_list(I).CITY
5975 ,null,'CITY'
5976 ,'PARTY_SITES');
5977 ELSE
5978 x_stage_list(I).TX10 := '';
5979 END IF;
5980 END IF;
5981 END LOOP;
5982 FOR I IN 1..p_search_list.COUNT LOOP
5983 IF p_search_ctx THEN
5984 IF p_search_list(I).CITY IS NOT NULL THEN
5985 x_stage_list(I).TX9 :=
5986 HZ_TRANS_PKG.EXACT(
5987 p_search_list(I).CITY
5988 ,null,'CITY'
5989 ,'PARTY_SITES');
5990 ELSE
5991 x_stage_list(I).TX9 := '';
5992 END IF;
5993 END IF;
5994 END LOOP;
5995 FOR I IN 1..p_search_list.COUNT LOOP
5996 IF p_search_ctx THEN
5997 IF p_search_list(I).COUNTRY IS NOT NULL THEN
5998 x_stage_list(I).TX22 :=
5999 HZ_TRANS_PKG.EXACT(
6000 p_search_list(I).COUNTRY
6001 ,null,'COUNTRY'
6002 ,'PARTY_SITES');
6003 ELSE
6004 x_stage_list(I).TX22 := '';
6005 END IF;
6006 END IF;
6007 END LOOP;
6008 FOR I IN 1..p_search_list.COUNT LOOP
6009 IF p_search_ctx THEN
6010 IF p_search_list(I).COUNTY IS NOT NULL THEN
6011 x_stage_list(I).TX21 :=
6012 HZ_TRANS_PKG.CLEANSE(
6013 p_search_list(I).COUNTY
6014 ,null,'COUNTY'
6015 ,'PARTY_SITES');
6016 ELSE
6017 x_stage_list(I).TX21 := '';
6018 END IF;
6019 END IF;
6020 END LOOP;
6021 FOR I IN 1..p_search_list.COUNT LOOP
6022 IF p_search_ctx THEN
6023 IF p_search_list(I).COUNTY IS NOT NULL THEN
6024 x_stage_list(I).TX20 :=
6025 HZ_TRANS_PKG.EXACT(
6026 p_search_list(I).COUNTY
6027 ,null,'COUNTY'
6028 ,'PARTY_SITES');
6029 ELSE
6030 x_stage_list(I).TX20 := '';
6031 END IF;
6032 END IF;
6033 END LOOP;
6034 FOR I IN 1..p_search_list.COUNT LOOP
6035 IF p_search_ctx THEN
6036 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6037 x_stage_list(I).TX11 :=
6038 HZ_TRANS_PKG.RM_SPLCHAR(
6039 p_search_list(I).POSTAL_CODE
6040 ,null,'POSTAL_CODE'
6041 ,'PARTY_SITES','SDIB');
6042 ELSE
6043 x_stage_list(I).TX11 := '';
6044 END IF;
6045 ELSE
6046 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6047 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6048 x_stage_list(I).TX11
6049 ,null,'POSTAL_CODE'
6050 ,'PARTY_SITES','SCORE');
6051 IF tmp IS NOT NULL THEN
6052 x_stage_list(I).TX11 := tmp;
6053 END IF;
6054 END IF;
6055 END IF;
6056 END LOOP;
6057 FOR I IN 1..p_search_list.COUNT LOOP
6058 IF p_search_ctx THEN
6059 IF p_search_list(I).PROVINCE IS NOT NULL THEN
6060 x_stage_list(I).TX13 :=
6061 HZ_TRANS_PKG.CLEANSE(
6062 p_search_list(I).PROVINCE
6063 ,null,'PROVINCE'
6064 ,'PARTY_SITES');
6065 ELSE
6066 x_stage_list(I).TX13 := '';
6067 END IF;
6068 END IF;
6069 END LOOP;
6070 FOR I IN 1..p_search_list.COUNT LOOP
6071 IF p_search_ctx THEN
6072 IF p_search_list(I).PROVINCE IS NOT NULL THEN
6073 x_stage_list(I).TX12 :=
6074 HZ_TRANS_PKG.EXACT(
6075 p_search_list(I).PROVINCE
6076 ,null,'PROVINCE'
6077 ,'PARTY_SITES');
6078 ELSE
6079 x_stage_list(I).TX12 := '';
6080 END IF;
6081 END IF;
6082 END LOOP;
6083 FOR I IN 1..p_search_list.COUNT LOOP
6084 IF p_search_ctx THEN
6085 IF p_search_list(I).STATE IS NOT NULL THEN
6086 x_stage_list(I).TX15 :=
6087 HZ_TRANS_PKG.WRSTATE_CLEANSE(
6088 p_search_list(I).STATE
6089 ,null,'STATE'
6090 ,'PARTY_SITES','SDIB');
6091 ELSE
6092 x_stage_list(I).TX15 := '';
6093 END IF;
6094 ELSE
6095 IF p_search_list(I).STATE IS NOT NULL THEN
6096 tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6097 x_stage_list(I).TX15
6098 ,null,'STATE'
6099 ,'PARTY_SITES','SCORE');
6100 IF tmp IS NOT NULL THEN
6101 x_stage_list(I).TX15 := tmp;
6102 END IF;
6103 END IF;
6104 END IF;
6105 END LOOP;
6106 FOR I IN 1..p_search_list.COUNT LOOP
6107 IF p_search_ctx THEN
6108 IF p_search_list(I).STATE IS NOT NULL THEN
6109 x_stage_list(I).TX14 :=
6110 HZ_TRANS_PKG.WRSTATE_EXACT(
6111 p_search_list(I).STATE
6112 ,null,'STATE'
6113 ,'PARTY_SITES','SDIB');
6114 ELSE
6115 x_stage_list(I).TX14 := '';
6116 END IF;
6117 ELSE
6118 IF p_search_list(I).STATE IS NOT NULL THEN
6119 tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6120 x_stage_list(I).TX14
6121 ,null,'STATE'
6122 ,'PARTY_SITES','SCORE');
6123 IF tmp IS NOT NULL THEN
6124 x_stage_list(I).TX14 := tmp;
6125 END IF;
6126 END IF;
6127 END IF;
6128 END LOOP;
6129 EXCEPTION
6130 WHEN OTHERS THEN
6131 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6132 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6133 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6134 FND_MSG_PUB.ADD;
6135 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6136 END;
6137
6138
6139 /************************************************
6140 This procedure maps a search record from the logical
6141 record structure to the stage schema structure
6142 for the CONTACTS Entity after applying
6143 the defined transformations
6144 ************************************************/
6145
6146 PROCEDURE MAP_CONTACT_REC(
6147 p_search_ctx IN BOOLEAN,
6148 p_search_list IN HZ_PARTY_SEARCH.contact_list,
6149 x_entered_max_score OUT NUMBER,
6150 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6151 ) IS
6152 l_current_max_score NUMBER;
6153 tmp VARCHAR2(4000);
6154 BEGIN
6155 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6156 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6157 END IF;
6158 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6159 hz_utility_v2pub.debug(p_message=>'p_entity - CONTACTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6160 END IF;
6161 IF p_search_ctx THEN
6162 x_entered_max_score:=0;
6163 FOR I IN 1..p_search_list.COUNT LOOP
6164 l_current_max_score:=0;
6165 IF l_current_max_score>x_entered_max_score THEN
6166 x_entered_max_score:=l_current_max_score;
6167 END IF;
6168 END LOOP;
6169 END IF;
6170 NULL;
6171 EXCEPTION
6172 WHEN OTHERS THEN
6173 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6174 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6175 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6176 FND_MSG_PUB.ADD;
6177 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6178 END;
6179
6180
6181 /************************************************
6182 This procedure maps a search record from the logical
6183 record structure to the stage schema structure
6184 for the CONTACT_POINTS Entity after applying
6185 the defined transformations
6186 ************************************************/
6187
6188 PROCEDURE MAP_CONTACT_POINT_REC(
6189 p_search_ctx IN BOOLEAN,
6190 p_search_list IN HZ_PARTY_SEARCH.contact_point_list,
6191 x_entered_max_score OUT NUMBER,
6192 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6193 ) IS
6194 l_current_max_score NUMBER;
6195 tmp VARCHAR2(4000);
6196 BEGIN
6197 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6198 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_POINT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6199 END IF;
6200 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6201 hz_utility_v2pub.debug(p_message=>'p_entity - CONTACT_POINTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6202 END IF;
6203 IF p_search_ctx THEN
6204 x_entered_max_score:=0;
6205 FOR I IN 1..p_search_list.COUNT LOOP
6206 l_current_max_score:=0;
6207 x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6208 IF l_current_max_score>x_entered_max_score THEN
6209 x_entered_max_score:=l_current_max_score;
6210 END IF;
6211 END LOOP;
6212 END IF;
6213 NULL;
6214 EXCEPTION
6215 WHEN OTHERS THEN
6216 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6217 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6218 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6219 FND_MSG_PUB.ADD;
6220 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6221 END;
6222
6223
6224 /************************************************
6225 This procedure checks if the input search criteria
6226 is valid. It checks if :
6227 1. At least one primary condition is passed
6228 2. Contact Point Type is not null for each condition
6229 ************************************************/
6230
6231 FUNCTION check_prim_cond(
6232 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6233 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6234 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6235 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)
6236 RETURN BOOLEAN IS
6237 BEGIN
6238 FOR I IN 1..p_party_site_list.COUNT LOOP
6239 IF p_party_site_list(I).ADDRESS IS NOT NULL THEN
6240 RETURN TRUE;
6241 END IF;
6242 END LOOP;
6243 FOR I IN 1..p_party_site_list.COUNT LOOP
6244 IF p_party_site_list(I).CITY IS NOT NULL THEN
6245 RETURN TRUE;
6246 END IF;
6247 END LOOP;
6248 FOR I IN 1..p_party_site_list.COUNT LOOP
6249 IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN
6250 RETURN TRUE;
6251 END IF;
6252 END LOOP;
6253 FOR I IN 1..p_party_site_list.COUNT LOOP
6254 IF p_party_site_list(I).PROVINCE IS NOT NULL THEN
6255 RETURN TRUE;
6256 END IF;
6257 END LOOP;
6258 FOR I IN 1..p_party_site_list.COUNT LOOP
6259 IF p_party_site_list(I).STATE IS NOT NULL THEN
6260 RETURN TRUE;
6261 END IF;
6262 END LOOP;
6263 FOR I IN 1..p_party_site_list.COUNT LOOP
6264 IF p_party_site_list(I).COUNTY IS NOT NULL THEN
6265 RETURN TRUE;
6266 END IF;
6267 END LOOP;
6268 FOR I IN 1..p_party_site_list.COUNT LOOP
6269 IF p_party_site_list(I).COUNTRY IS NOT NULL THEN
6270 RETURN TRUE;
6271 END IF;
6272 END LOOP;
6273 RETURN FALSE;
6274 EXCEPTION
6275 WHEN FND_API.G_EXC_ERROR THEN
6276 RAISE FND_API.G_EXC_ERROR;
6277 WHEN OTHERS THEN
6278 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6279 FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6280 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6281 FND_MSG_PUB.ADD;
6282 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6283 END check_prim_cond;
6284
6285 /************************************************
6286 This procedure checks if the input search condition
6287 has party site criteria.
6288 ************************************************/
6289
6290 PROCEDURE check_party_site_cond(
6291 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6292 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6293 x_secondary OUT BOOLEAN,
6294 x_primary OUT BOOLEAN
6295 ) IS
6296 BEGIN
6297 x_primary:= FALSE;
6298 x_secondary:= FALSE;
6299 FOR I IN 1..p_party_site_list.COUNT LOOP
6300 IF p_party_site_list(I).ADDRESS IS NOT NULL
6301 OR p_party_site_list(I).CITY IS NOT NULL
6302 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6303 OR p_party_site_list(I).PROVINCE IS NOT NULL
6304 OR p_party_site_list(I).STATE IS NOT NULL
6305 OR p_party_site_list(I).COUNTY IS NOT NULL
6306 OR p_party_site_list(I).COUNTRY IS NOT NULL
6307 THEN
6308 x_primary := TRUE;
6309 END IF;
6310 EXIT WHEN x_primary;
6311 END LOOP;
6312 FOR I IN 1..p_contact_point_list.COUNT LOOP
6313 NULL;
6314 END LOOP;
6315
6316 FOR I IN 1..p_party_site_list.COUNT LOOP
6317 IF p_party_site_list(I).ADDRESS IS NOT NULL
6318 OR p_party_site_list(I).CITY IS NOT NULL
6319 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6320 OR p_party_site_list(I).PROVINCE IS NOT NULL
6321 OR p_party_site_list(I).STATE IS NOT NULL
6322 OR p_party_site_list(I).COUNTY IS NOT NULL
6323 OR p_party_site_list(I).COUNTRY IS NOT NULL
6324 THEN
6325 x_secondary := TRUE;
6326 END IF;
6327 EXIT WHEN x_secondary;
6328 END LOOP;
6329 FOR I IN 1..p_contact_point_list.COUNT LOOP
6330 NULL;
6331 END LOOP;
6332 EXCEPTION
6333 WHEN OTHERS THEN
6334 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6335 FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
6336 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6337 FND_MSG_PUB.ADD;
6338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6339 END check_party_site_cond;
6340
6341 /************************************************
6342 This procedure checks if the input search condition
6343 has contact criteria.
6344 ************************************************/
6345
6346 PROCEDURE check_contact_cond(
6347 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6348 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6349 x_secondary OUT BOOLEAN,
6350 x_primary OUT BOOLEAN
6351 ) IS
6352 BEGIN
6353 x_primary:= FALSE;
6354 x_secondary:= FALSE;
6355 FOR I IN 1..p_contact_list.COUNT LOOP
6356 NULL;
6357 END LOOP;
6358
6359 FOR I IN 1..p_contact_point_list.COUNT LOOP
6360 NULL;
6361 END LOOP;
6362
6363 FOR I IN 1..p_contact_list.COUNT LOOP
6364 NULL;
6365 END LOOP;
6366
6367 FOR I IN 1..p_contact_point_list.COUNT LOOP
6368 NULL;
6369 END LOOP;
6370 EXCEPTION
6371 WHEN OTHERS THEN
6372 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6373 FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
6374 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6375 FND_MSG_PUB.ADD;
6376 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6377 END check_contact_cond;
6378
6379 /************************************************
6380 This procedure checks if the input search condition
6381 has valid contact point criteria.
6382 ************************************************/
6383
6384 PROCEDURE check_contact_point_cond(
6385 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6386 x_secondary OUT BOOLEAN,
6387 x_primary OUT BOOLEAN
6388 ) IS
6389 BEGIN
6390 x_primary:= FALSE;
6391 x_secondary:= FALSE;
6392
6393 FOR I IN 1..p_contact_point_list.COUNT LOOP
6394 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN
6395 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6396 FND_MSG_PUB.ADD;
6397 RAISE FND_API.G_EXC_ERROR;
6398 END IF;
6399 END LOOP;
6400
6401 FOR I IN 1..p_contact_point_list.COUNT LOOP
6402 NULL;
6403 END LOOP;
6404 FOR I IN 1..p_contact_point_list.COUNT LOOP
6405 NULL;
6406 END LOOP;
6407 EXCEPTION
6408 WHEN OTHERS THEN
6409 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6410 FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
6411 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6412 FND_MSG_PUB.ADD;
6413 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6414 END check_contact_point_cond;
6415
6416 FUNCTION check_staged RETURN BOOLEAN IS
6417
6418 CURSOR c_check_staged IS
6419 SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL
6420 WHERE nvl(STAGED_FLAG,'N') = 'N'
6421 AND FUNCTION_ID in (
6422 66
6423 ,67
6424 ,72
6425 ,73
6426 ,74
6427 ,75
6428 ,76
6429 ,77
6430 ,78
6431 ,83
6432 ,84
6433 ,85
6434 );
6435 l_tmp NUMBER;
6436 BEGIN
6437 IF g_staged = 1 THEN
6438 RETURN TRUE;
6439 ELSIF g_staged = 0 THEN
6440 RETURN FALSE;
6441 END IF;
6442
6443 OPEN c_check_staged;
6444 FETCH c_check_staged INTO l_tmp;
6445 IF c_check_staged%FOUND THEN
6446 CLOSE c_check_staged;
6447 g_staged := 0;
6448 RETURN FALSE;
6449 ELSE
6450 CLOSE c_check_staged;
6451 g_staged := 1;
6452 RETURN TRUE;
6453 END IF;
6454 END check_staged;
6455
6456 -- Fix for Bug 4736139
6457 FUNCTION check_staged_var RETURN VARCHAR2 IS
6458 l_staged VARCHAR2(1);
6459 l_staged_bool BOOLEAN;
6460 BEGIN
6461 l_staged_bool := check_staged;
6462 IF l_staged_bool THEN
6463 l_staged := 'Y';
6464 ELSE
6465 l_staged := 'N';
6466 END IF;
6467 RETURN l_staged;
6468 END check_staged_var;
6469 -- End fix for Bug 4736139
6470
6471 END;
6472