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