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