DBA Data[Home] [Help]

PACKAGE BODY: APPS.ARH_DQM_CUST_HELPER

Source


1 PACKAGE BODY arh_dqm_cust_helper AS
2 /*$Header: ARHDQMAB.pls 115.4 2002/05/31 18:34:16 pkm ship   $*/
3 
4 FUNCTION Is_cust_role_rel_dqm_pty
5 ( p_ctx_id               IN NUMBER,
6   p_cust_account_role_id IN NUMBER,
7   p_status               IN VARCHAR2)
8 RETURN VARCHAR2
9 IS
10   ret   VARCHAR2(1);
11   CURSOR c_exist IS
12   SELECT 'Y'
13     FROM hz_cust_account_roles  car,
14          hz_cust_accounts       ca,
15          hz_matched_parties_gt  mp
16    WHERE car.cust_account_role_id = p_cust_account_role_id
17      AND car.cust_account_id      = ca.cust_account_id
18      AND DECODE(p_status,'ALL','ALL',NVL(car.status,'A'))= p_status
19      AND ca.party_id              = mp.party_id
20      AND mp.search_context_id     = p_ctx_id;
21 BEGIN
22   OPEN c_exist;
23   FETCH c_exist INTO ret;
24   IF c_exist%NOTFOUND THEN
25     ret := 'N';
26   END IF;
27   CLOSE c_exist;
28   RETURN ret;
29 END;
30 
31 FUNCTION is_cust_acct_in_pty_gt
32 ------------------------------------------------------------------------
33 -- Return Y if the P_CUST_ACCOUNT_ID is already in HZ_MATCHED_PARTIES_GT
34 -- Otherwise N
35 ------------------------------------------------------------------------
36 ( p_ctx_id               IN NUMBER,
37   p_cust_account_id      IN NUMBER,
38   p_status               IN VARCHAR2)
39 RETURN VARCHAR2
40 IS
41   CURSOR c1 IS
42   SELECT 'Y'
43     FROM hz_matched_parties_gt  a,
44          hz_cust_accounts       b
45    WHERE a.search_context_id = p_ctx_id
46      AND -a.party_id         = p_cust_account_id
47      AND b.cust_account_id   = p_cust_account_id
48      AND DECODE(p_status, 'ALL', 'ALL', NVL(b.status,'A')) = p_status
49      AND a.score             < 0;
50   ret  VARCHAR2(1);
51 BEGIN
52   OPEN c1;
53   FETCH c1 INTO ret;
54   IF c1%NOTFOUND THEN
55     ret := 'N';
56   END IF;
57   CLOSE c1;
58   RETURN ret;
59 END;
60 
61 FUNCTION is_cust_role_in_ct_gt
62 ---------------------------------------------------------------------------------------
63 -- Return Y if the P_CUST_ACCOUNR_ROLE_ID is already inserted in HZ_MATCHED_CONTACTS_GT
64 -- Otherwise N
65 ---------------------------------------------------------------------------------------
66 ( p_ctx_id               IN NUMBER,
67   p_cust_account_role_id IN NUMBER,
68   p_cust_account_id      IN NUMBER,
69   p_status               IN VARCHAR2)
70 RETURN VARCHAR2
71 IS
72   CURSOR c1 IS
73   SELECT 'Y'
74     FROM hz_matched_contacts_gt a,
75          hz_cust_account_roles  b
76    WHERE a.search_context_id    =  p_ctx_id
77      AND -a.party_id            =  p_cust_account_id
78      AND -a.org_contact_id      =  p_cust_account_role_id
79      AND b.cust_account_role_id =  p_cust_account_role_id
80      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status
81      AND a.score               < 0;
82   ret    VARCHAR2(1);
83 BEGIN
84   OPEN c1;
85   FETCH c1 INTO ret;
86   IF c1%NOTFOUND THEN
87      ret := 'N';
88   END IF;
89   CLOSE c1;
90   RETURN ret;
91 END;
92 
93 FUNCTION Is_acct_site_in_ps_gt
94 ---------------------------------------------------------------------------------------
95 -- Return Y if the P_CUST_ACCT_SITE_ID is already inserted in HZ_MATCHED_PARTY_SITES_GT
96 -- Otherwise N
97 ---------------------------------------------------------------------------------------
98 ( p_ctx_id            IN NUMBER,
99   p_cust_acct_site_id IN NUMBER,
100   p_cust_account_id   IN NUMBER,
101   p_cur_all           IN VARCHAR2,
102   p_status            IN VARCHAR2)
103 RETURN VARCHAR2
104 IS
105   CURSOR c1 IS
106   SELECT 'Y'
107     FROM hz_matched_party_sites_gt a,
108          hz_cust_acct_sites        b
109    WHERE a.search_context_id     = p_ctx_id
110      AND -a.party_id          = p_cust_account_id
111      AND -a.party_site_id     = p_cust_acct_site_id
112      AND b.cust_account_id   = p_cust_account_id
113      AND b.cust_acct_site_id = p_cust_acct_site_id
114      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status
115      AND a.score < 0;
116 
117   CURSOR c2 IS
118   SELECT 'Y'
119     FROM hz_matched_party_sites_gt a,
120          hz_cust_acct_sites_all    b
121    WHERE a.search_context_id     = p_ctx_id
122      AND -a.party_id          = p_cust_account_id
123      AND -a.party_site_id     = p_cust_acct_site_id
124      AND b.cust_account_id   = p_cust_account_id
125      AND b.cust_acct_site_id = p_cust_acct_site_id
126      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status
127      AND a.score < 0;
128    ret  VARCHAR2(1);
129 BEGIN
130   IF p_cur_all     = 'CUR' THEN
131     OPEN c1;
132     FETCH c1 INTO ret;
133     IF c1%NOTFOUND THEN
134       ret := 'N';
135     END IF;
136     CLOSE c1;
137   ELSIF  p_cur_all = 'ALL' THEN
138     OPEN c2;
139     FETCH c2 INTO ret;
140     IF c2%NOTFOUND THEN
141       ret := 'N';
142     END IF;
143     CLOSE c2;
144   END IF;
145   RETURN ret;
146 END;
147 
148 FUNCTION is_as_rel_dqm_pty
149 --------------------------------------------------------------------------------------------
150 -- Return Y if the P_CUST_ACCT_SITE_D is associated with a party_id in HZ_MATCHED_PARTIES_GT
151 -- Otherwise N
152 --------------------------------------------------------------------------------------------
153 ( p_ctx_id             IN NUMBER,
154   p_cust_account_id    IN NUMBER,
155   p_cust_acct_site_id  IN NUMBER,
156   p_cur_all            IN VARCHAR2,
157   p_status             IN VARCHAR2)
158 RETURN VARCHAR2
159 IS
160   CURSOR c1 IS
161   SELECT 'Y'
162     FROM hz_cust_acct_sites         a,
163          hz_party_sites             c,
164          hz_matched_parties_gt      d,
165          hz_parties                 e
166    WHERE a.cust_account_id                     = p_cust_account_id
167      AND a.cust_acct_site_id                   = p_cust_acct_site_id
168      AND DECODE(p_status,'ALL','ALL',NVL(a.status,'A')) = p_status
169      AND a.party_site_id                       = c.party_site_id
170      AND DECODE(p_status,'ALL','ALL',NVL(c.status,'A')) = p_status
171      AND c.party_id                            = d.party_id
172      AND NVL(d.score,0)                        >= 0
173      AND d.search_context_id                   = p_ctx_id
174      AND d.party_id                            = e.party_id
175      AND DECODE(p_status,'ALL','ALL',NVL(e.status,'A')) = p_status;
176 
177   CURSOR c2 IS
178   SELECT 'Y'
179     FROM hz_cust_acct_sites_all     a,
180          hz_party_sites             c,
181          hz_matched_parties_gt      d,
182          hz_parties                 e
183    WHERE a.cust_account_id                     = p_cust_account_id
184      AND a.cust_acct_site_id                   = p_cust_acct_site_id
185      AND DECODE(p_status,'ALL','ALL',NVL(a.status,'A')) = p_status
186      AND a.party_site_id                       = c.party_site_id
187      AND DECODE(p_status,'ALL','ALL',NVL(c.status,'A')) = p_status
188      AND c.party_id                            = d.party_id
189      AND NVL(d.score,0)                        >= 0
190      AND d.search_context_id                   = p_ctx_id
191      AND d.party_id                            = e.party_id
192      AND DECODE(p_status,'ALL','ALL',NVL(e.status,'A')) = p_status;
193 
194   ret  VARCHAR2(1);
195 BEGIN
196   IF p_cur_all = 'CUR' THEN
197     OPEN c1;
198     FETCH c1 INTO ret;
199     IF c1%NOTFOUND THEN
200        ret := 'N';
201     END IF;
202     CLOSE c1;
203   ELSIF p_cur_all = 'ALL' THEN
204     OPEN c2;
205     FETCH c2 INTO ret;
206     IF c2%NOTFOUND THEN
207        ret := 'N';
208     END IF;
209     CLOSE c2;
210   END IF;
211   RETURN ret;
212 END;
213 
214 FUNCTION score_of_rel_ps
215 -------------------------------------------------------------------------------------------------------
216 -- Return the score of the party_site related to a cust_acct_site in HZ_MATCHED_PARTY_SITES_GT if found
217 -- Otherwise -99999
218 -------------------------------------------------------------------------------------------------------
219 ( p_ctx_id             IN NUMBER,
220   p_cust_acct_site_id  IN NUMBER,
221   p_cur_all            IN VARCHAR2,
222   p_status             IN VARCHAR2)
223 RETURN NUMBER
224 IS
225   CURSOR c1 IS
226   SELECT NVL(b.score,0)
227     FROM hz_cust_acct_sites        a,
228          hz_matched_party_sites_gt b,
229          hz_party_sites            c
230    WHERE a.cust_acct_site_id                   = p_cust_acct_site_id
231      AND DECODE(p_status,'ALL','ALL',NVL(a.status,'A')) = p_status
232      AND a.party_site_id                       = b.party_site_id
233      AND b.search_context_id                   = p_ctx_id
234      AND NVL(b.score,0)                        >= 0
235      AND b.party_site_id                       = c.party_site_id
236      AND DECODE(p_status,'ALL','ALL',NVL(c.status,'A')) = p_status;
237 
238   CURSOR c2 IS
242          hz_party_sites            c
239   SELECT NVL(b.score,0)
240     FROM hz_cust_acct_sites_all    a,
241          hz_matched_party_sites_gt b,
243    WHERE a.cust_acct_site_id                   = p_cust_acct_site_id
244      AND DECODE(p_status,'ALL','ALL',NVL(a.status,'A')) = p_status
245      AND a.party_site_id                       = b.party_site_id
246      AND b.search_context_id                   = p_ctx_id
247      AND NVL(b.score,0)                        >= 0
248      AND b.party_site_id                       = c.party_site_id
249      AND DECODE(p_status,'ALL','ALL',NVL(c.status,'A')) = p_status;
250 
251   ret  NUMBER;
252 BEGIN
253   IF    p_cur_all = 'CUR' THEN
254     OPEN c1;
255     FETCH c1 INTO ret;
256     IF c1%NOTFOUND THEN
257       ret := -99999;
258     END IF;
259     CLOSE c1;
260   ELSIF p_cur_all = 'ALL' THEN
261     OPEN c2;
262     FETCH c2 INTO ret;
263     IF c2%NOTFOUND THEN
264       ret := -99999;
265     END IF;
266     CLOSE c2;
267   END IF;
268   RETURN ret;
269 END;
270 
271 PROCEDURE ins_as_in_ps_gt
272 -------------------------------------------------------------------------
273 -- Insert in CUST_ACCT_SITE_ID in HZ_MATCHED_PARTY_SITES_GT
274 -- If 1) the cust_acct_site_id is related to a matched party
275 --    2) the cust_acct_site_id is not yet in HZ_MATCHED_PARTY_SITES_GT
276 -------------------------------------------------------------------------
277 --  CUST_ACCOUNT_ID  CUST_ACCT_SITE_ID   -PSscore(-1)   SEARCH_CONTEXT_ID
278 -------------------------------------------------------------------------
282   p_cur_all            IN VARCHAR2,
279 ( p_ctx_id             IN NUMBER,
280   p_cust_account_id    IN NUMBER,
281   p_cust_acct_site_id  IN NUMBER,
283   p_status             IN VARCHAR2)
284 IS
285   lyn         VARCHAR2(1);
286   l_ps_score  NUMBER;
287 BEGIN
288   lyn := is_as_rel_dqm_pty(p_ctx_id             => p_ctx_id,
289                            p_cust_account_id    => p_cust_account_id,
293 
290                            p_cust_acct_site_id  => p_cust_acct_site_id,
291                            p_cur_all            => p_cur_all,
292                            p_status             => p_status);
294   IF lyn = 'Y' THEN
295     lyn := Is_acct_site_in_ps_gt(p_ctx_id            => p_ctx_id,
296                                  p_cust_acct_site_id => p_cust_acct_site_id,
297                                  p_cust_account_id   => p_cust_account_id,
298                                  p_cur_all           => p_cur_all,
299                                  p_status            => p_status);
300     IF lyn = 'N' THEN
301 
302       l_ps_score := score_of_rel_ps( p_ctx_id             => p_ctx_id,
303                                      p_cust_acct_site_id  => p_cust_acct_site_id,
304                                      p_cur_all            => p_cur_all,
305                                      p_status             => p_status);
306        IF l_ps_score > 0 THEN
307          l_ps_score  := -l_ps_score;
308        ELSE
309          l_ps_score  := -1;
310        END IF;
311 
312        INSERT INTO hz_matched_party_sites_gt
313        ( PARTY_ID         , PARTY_SITE_ID          ,SCORE        , SEARCH_CONTEXT_ID ) VALUES
314        ( -p_cust_account_id, -p_cust_acct_site_id    ,l_ps_score   , p_ctx_id          );
315 
316     END IF;
317 
318   END IF;
319 
320 END;
321 
322 --HYU
323 PROCEDURE car_oc_treatment
324 ( p_ctx_id       IN   NUMBER,
325   p_cur_all      IN   VARCHAR2,
326   p_status       IN   VARCHAR2)
327 IS
328   CURSOR c1 IS
329   SELECT party_id,
330          org_contact_id,
331          score
332     FROM hz_matched_contacts_gt
333    WHERE search_context_id =  p_ctx_id
334      AND score             >= 0;
335   lrec  c1%ROWTYPE;
336 BEGIN
337   OPEN c1;
338   LOOP
339     FETCH c1 INTO lrec;
340     EXIT WHEN c1%NOTFOUND;
341     ins_ca_car_in_gt( p_ctx_id         => p_ctx_id,
342                       p_org_contact_id => lrec.org_contact_id,
343                       p_cur_all        => p_cur_all,
344                       p_status         => p_status);
345   END LOOP;
346   CLOSE c1;
347 END;
348 
349 FUNCTION is_as_rel_ps_gt
350 ( p_ctx_id       IN NUMBER,
354 RETURN VARCHAR2
351   p_acct_site_id IN NUMBER,
352   p_cur_all      IN VARCHAR2,
353   p_status       IN VARCHAR2)
355 IS
356   CURSOR c1 IS
357   SELECT 'Y'
358     FROM hz_matched_party_sites_gt a,
359          hz_cust_acct_sites        b
360    WHERE a.search_context_id = p_ctx_id
361      AND NVL(a.score,0)      >= 0
362      AND a.party_site_id     = b.party_site_id
363      AND b.cust_acct_site_id = p_acct_site_id
364      AND DECODE(p_status, 'ALL','ALL', NVL(b.status,'A')) = p_status;
365 
366   CURSOR c2 IS
367   SELECT 'Y'
368     FROM hz_matched_party_sites_gt a,
369          hz_cust_acct_sites_all    b
370    WHERE a.search_context_id = p_ctx_id
371      AND NVL(a.score,0)      >= 0
372      AND a.party_site_id     = b.party_site_id
373      AND b.cust_acct_site_id = p_acct_site_id
374      AND DECODE(p_status, 'ALL','ALL', NVL(b.status,'A')) = p_status;
375 
376   ret VARCHAR2(1);
377 BEGIN
378   IF p_cur_all = 'CUR' THEN
379     OPEN c1;
380     FETCH c1 INTO ret;
381     IF c1%NOTFOUND THEN
382       ret := 'N';
383     END IF;
384     CLOSE c1;
385   ELSIF p_cur_all = 'ALL' THEN
386     OPEN c2;
387     FETCH c2 INTO ret;
388     IF c2%NOTFOUND THEN
389       ret := 'N';
390     END IF;
391     CLOSE c2;
392   END IF;
393   RETURN ret;
394 END;
395 
396 PROCEDURE ins_ca_car_in_gt
397 -------------------------------------------------------------------
398 -- Treatement for HZ_CUST_ACCOUNT_ROLES
399 -------------------------------------------------------------------
400 ( p_ctx_id          IN NUMBER,
401   p_org_contact_id  IN NUMBER,
402   p_cur_all         IN VARCHAR2,
403   p_status          IN VARCHAR2)
404 IS
405   CURSOR c1 IS
406   SELECT a.score                ct_score,
407          f.score                pty_score,
408          d.cust_account_role_id,
409          d.cust_account_id,
410          d.cust_acct_site_id
411     FROM hz_matched_contacts_gt a,
412          hz_org_contacts        b,
413          hz_relationships       c,
414          hz_cust_account_roles  d,
415          hz_cust_accounts       e,
416          hz_matched_parties_gt  f,
417          hz_parties             g
418    WHERE a.search_context_id                   = p_ctx_id
419      AND a.org_contact_id                      = p_org_contact_id
420      AND NVL(a.score,0)                        >= 0
421      AND a.org_contact_id                      = b.org_contact_id
422      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status
423      AND b.party_relationship_id               = c.relationship_id
424      AND c.directional_flag                    = 'F'
425      AND c.party_id                            = d.party_id
426      AND DECODE(p_status,'ALL','ALL',NVL(d.status,'A')) = p_status
427      AND d.cust_account_id                     = e.cust_account_id
428      AND DECODE(p_status,'ALL','ALL',NVL(e.status,'A')) = p_status
429      AND e.party_id                            = f.party_id
430      AND f.search_context_id                   = p_ctx_id
431      AND NVL(f.score,0)                        >= 0
432      AND f.party_id                            = a.party_id
433      AND f.party_id                            = g.party_id
434      AND DECODE(p_status,'ALL','ALL', NVL(g.status,'A'))= p_status;
435   lrec   c1%ROWTYPE;
436   lyn    VARCHAR2(1);
437   l_score  VARCHAR2(30);
438 BEGIN
439   OPEN c1;
440   FETCH c1 INTO lrec;
441   IF c1%NOTFOUND THEN
442     NULL;
443   ELSE
444     ------------------------------------------------------
445     --{ Insert Cust Account Role in HZ_MATCHED_CONTACTS_GT
446     ------------------------------------------------------
447     lyn := is_cust_role_in_ct_gt( p_ctx_id               => p_ctx_id,
448                                     p_cust_account_role_id => lrec.cust_account_role_id,
449                                     p_cust_account_id      => lrec.cust_account_id,
450                                     p_status               => p_status);
451     IF lyn = 'N' THEN
452 
453       IF lrec.cust_acct_site_id IS NULL THEN
454 
455         IF lrec.ct_score IS NULL THEN
456           l_score  :=  -1;
457         ELSE
458           l_score  :=  -lrec.ct_score;
459         END IF;
460         INSERT INTO hz_matched_contacts_gt
461         ( PARTY_ID            , ORG_CONTACT_ID           ,  SCORE    , SEARCH_CONTEXT_ID) VALUES
462         ( -lrec.cust_account_id, -lrec.cust_account_role_id,  l_score  , p_ctx_id         );
463 
464         ------------------------------------------------
468                                       p_cust_account_id => lrec.cust_account_id,
465         --{ C Insert Cust Account in HZ_MATCHED_PARTIES_GT
466         ------------------------------------------------
467         lyn  := is_cust_acct_in_pty_gt( p_ctx_id          => p_ctx_id,
469                                       p_status          => p_status);
470         IF lyn = 'N' THEN
471           IF lrec.pty_score IS NULL THEN
472             l_score  :=  -1;
473           ELSE
474             l_score  :=  -lrec.pty_score;
475           END IF;
476           INSERT INTO hz_matched_parties_gt
477           ( PARTY_ID            , SCORE       , SEARCH_CONTEXT_ID  ) VALUES
478           ( -lrec.cust_account_id, l_score     , p_ctx_id           );
479         END IF;
480         --}
481 
482       ELSIF lrec.cust_acct_site_id IS NOT NULL THEN
483       --       otherwise check if the cust_acct_site_id belongs is related to one of the party_site in gt
484       --                        if y then INSERT cust_account_role + B + C
485 --HYU
486         lyn := is_as_rel_ps_gt(p_ctx_id       => p_ctx_id,
487                            p_acct_site_id => lrec.cust_acct_site_id,
488                            p_cur_all      => p_cur_all,
489                            p_status       => p_status);
490         IF lyn = 'Y' THEN
491           IF lrec.ct_score IS NULL THEN
492             l_score  :=  -1;
493           ELSE
494             l_score  :=  -lrec.ct_score;
495           END IF;
496           INSERT INTO hz_matched_contacts_gt
497           ( PARTY_ID            , ORG_CONTACT_ID           ,  SCORE    , SEARCH_CONTEXT_ID) VALUES
498           ( -lrec.cust_account_id, -lrec.cust_account_role_id,  l_score  , p_ctx_id         );
499 
500           ---------------------------------------------------------
501           --{ B Insert Cust_Acct_site_id in HZ_MATCHED_PARTY_SITES_GT
502           ---------------------------------------------------------
503           ins_as_in_ps_gt( p_ctx_id             => p_ctx_id,
504                        p_cust_account_id    => lrec.cust_account_id,
505                        p_cust_acct_site_id  => lrec.cust_acct_site_id,
506                        p_cur_all            => p_cur_all,
507                        p_status             => p_status);
508           --}
509 
510           ------------------------------------------------
511           --{ C Insert Cust Account in HZ_MATCHED_PARTIES_GT
512           ------------------------------------------------
513           lyn  := is_cust_acct_in_pty_gt( p_ctx_id          => p_ctx_id,
514                                       p_cust_account_id => lrec.cust_account_id,
515                                       p_status          => p_status);
516           IF lyn = 'N' THEN
517             IF lrec.pty_score IS NULL THEN
518                l_score  :=  -1;
519             ELSE
520                l_score  :=  -lrec.pty_score;
521             END IF;
522             INSERT INTO hz_matched_parties_gt
523             ( PARTY_ID            , SCORE       , SEARCH_CONTEXT_ID  ) VALUES
524             ( -lrec.cust_account_id, l_score     , p_ctx_id           );
525 
526           END IF;
527           --}
528         END IF;
529      -- HYU Replacement }
530       END IF;
531     END IF;
532   END IF;
533 END;
534 
535 --HYU
536 
537 FUNCTION score_rel_party
538 ( p_ctx_id           IN NUMBER,
539   p_cust_account_id  IN NUMBER,
540   p_status           IN VARCHAR2)
541 RETURN NUMBER
542 IS
543   CURSOR c1 IS
544   SELECT NVL(score,0)
545     FROM hz_cust_accounts      a,
546          hz_matched_parties_gt b
547    WHERE a.cust_account_id   = p_cust_account_id
548      AND b.search_context_id = p_ctx_id
549      AND a.party_id          = b.party_id
550      AND NVL(b.score,0)      >= 0
551      AND DECODE(p_status,'ALL','ALL',NVL(a.status,'A')) = p_status;
552   ret NUMBER;
553 BEGIN
554   OPEN c1;
555   FETCH c1 INTO ret;
556   IF c1%NOTFOUND THEN
557     ret := -99999;
558   END IF;
559   CLOSE c1;
560   RETURN ret;
561 END;
562 
563 
564 PROCEDURE find_as_rel_ps
565 -----------------------------------------------------------------------------------------------
566 -- INSERT all the CUST_ACCT_SITE_ID related to the P_PARTY_SITE_ID in HZ_MATCHED_PARTY_SITES_GT
570   p_party_site_id   IN NUMBER,
567 --        If necesary insert also the CUST_ACCOUNT_ID related in  HZ_MATCHED_PARTIES_GT
568 -----------------------------------------------------------------------------------------------
569 ( p_ctx_id          IN NUMBER,
571   p_score           IN NUMBER,
572   p_cur_all         IN VARCHAR2,
573   p_status          IN VARCHAR2)
574 IS
575   TYPE nrc  IS REF CURSOR;
576   cv   nrc;
577   l_cust_acct_site_id  NUMBER;
578   l_cust_account_id    NUMBER;
579   lyn     VARCHAR2(1);
580   l_score NUMBER;
581 BEGIN
582   IF p_cur_all = 'CUR' THEN
583     OPEN cv FOR
584      SELECT cust_acct_site_id,
585             cust_account_id
586        FROM hz_cust_acct_sites
587       WHERE party_site_id = p_party_site_id
588         AND DECODE(p_status,'ALL','ALL',NVL(status,'A')) = p_status;
589   ELSIF p_cur_all = 'ALL' THEN
590     OPEN cv FOR
591      SELECT cust_acct_site_id,
592             cust_account_id
593        FROM hz_cust_acct_sites_all
594       WHERE party_site_id = p_party_site_id
595         AND DECODE(p_status,'ALL','ALL',NVL(status,'A')) = p_status;
596   END IF;
597 
598   IF cv%ISOPEN THEN
599   LOOP
600     FETCH cv INTO l_cust_acct_site_id, l_cust_account_id;
601     EXIT WHEN cv%NOTFOUND;
602 
603     --{ Treatment of acct_site
604     lyn := is_as_rel_dqm_pty( p_ctx_id            => p_ctx_id,
605                               p_cust_account_id   => l_cust_account_id,
606                               p_cust_acct_site_id => l_cust_acct_site_id,
607                               p_cur_all           => p_cur_all,
608                               p_status            => p_status);
609     IF lyn = 'Y' THEN
610       IF p_score = 0 THEN
611         l_score := -1;
612       ELSE
613         l_score := -p_score;
614       END IF;
615       INSERT INTO hz_matched_party_sites_gt
616       ( PARTY_ID            , PARTY_SITE_ID          ,SCORE        , SEARCH_CONTEXT_ID ) VALUES
617       ( -l_cust_account_id   , -l_cust_acct_site_id    ,l_score      , p_ctx_id          );
618     END IF;
619     --}
620 
621     --{ Treatment of cust_account
622     lyn := is_cust_acct_in_pty_gt( p_ctx_id            => p_ctx_id,
623                                    p_cust_account_id   => l_cust_account_id,
624                                    p_status            => p_status);
625     IF lyn = 'N' THEN
626       l_score := score_rel_party( p_ctx_id          => p_ctx_id,
627                                   p_cust_account_id => l_cust_account_id,
628                                   p_status          => p_status);
629       IF l_score <> -99999 THEN
630         IF   l_score > 0 THEN
631           l_score := -l_score;
632         ELSE
633           l_score := -1;
634         END IF;
635         INSERT INTO hz_matched_parties_gt
636         ( PARTY_ID            , SCORE       , SEARCH_CONTEXT_ID  ) VALUES
640     --}
637         ( -l_cust_account_id   , l_score     , p_ctx_id           );
638       END IF;
639     END IF;
641   END LOOP;
642   CLOSE cv;
643   END IF;
644 END;
645 
646 
647 FUNCTION is_as_rel_ps_in_ps_gt
648 ------------------------------------------------------------------------------------------------------
649 -- Return Y if the CUST_ACCT_SITE_ID related to the P_PARTY_SITE_ID exist in HZ_MATCHED_PARTY_SITES_GT
650 ------------------------------------------------------------------------------------------------------
651 ( p_ctx_id          IN NUMBER,
652   p_party_site_id   IN NUMBER,
653   p_cur_all         IN VARCHAR2,
654   p_status          IN VARCHAR2)
655 RETURN VARCHAR2
656 IS
657   CURSOR c1 IS
658   SELECT 'Y'
659     FROM hz_cust_acct_sites        b,
660          hz_matched_party_sites_gt c
661    WHERE b.party_site_id     = p_party_site_id
662      AND b.cust_acct_site_id = -c.party_site_id
663      AND c.search_context_id = p_ctx_id
664      AND c.score              <  0
665      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status;
666 
667   CURSOR c2 IS
668   SELECT 'Y'
669     FROM hz_cust_acct_sites_all    b,
670          hz_matched_party_sites_gt c
671    WHERE b.party_site_id     = p_party_site_id
672      AND b.cust_acct_site_id = -c.party_site_id
673      AND c.search_context_id = p_ctx_id
674      AND c.score              <  0
675      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status;
676 
677   ret VARCHAR2(1);
678 BEGIN
679   IF p_cur_all = 'CUR' THEN
680     OPEN c1;
681     FETCH c1 INTO ret;
682     IF c1%NOTFOUND THEN
683       ret := 'N';
684     END IF;
685     CLOSE c1;
686   ELSIF p_cur_all = 'ALL' THEN
687     OPEN c2;
688     FETCH c2 INTO ret;
689     IF c2%NOTFOUND THEN
690       ret := 'N';
691     END IF;
692     CLOSE c2;
693   END IF;
694   RETURN ret;
695 END;
696 
697 FUNCTION is_any_oc_rel_ps
698 ( p_ctx_id   IN NUMBER,
699   p_ps_id    IN NUMBER,
700   p_status   IN VARCHAR2)
701 RETURN VARCHAR2
702 IS
703   CURSOR c1 IS
704   SELECT 'Y'
705     FROM hz_matched_contacts_gt a,
706          hz_org_contacts        b
707    WHERE a.search_context_id                           = p_ctx_id
708      AND NVL(a.score,0)                                >= 0
709      AND a.org_contact_id                              = b.org_contact_id
710      AND b.party_site_id                               = p_ps_id
711      AND DECODE(p_status,'ALL','ALL',NVL(p_status,'A'))= p_status;
712   ret  VARCHAR2(1);
713 BEGIN
714   OPEN c1;
715   FETCH c1 INTO ret;
716   IF c1%NOTFOUND THEN
717     ret := 'N';
718   END IF;
719   CLOSE c1;
720   RETURN ret;
721 END;
722 
723 FUNCTION is_ps_rel_cpt_gt
724 ( p_ctx_id    IN  NUMBER,
725   p_ps_id     IN  NUMBER,
726   p_status    IN VARCHAR2)
727 RETURN VARCHAR2
728 IS
729   CURSOR c1 IS
730   SELECT 'Y'
731     FROM hz_matched_cpts_gt a,
732          hz_contact_points b
733    WHERE a.search_context_id =  p_ctx_id
734      AND a.contact_point_id  =  b.contact_point_id
735      AND b.owner_table_name  =  'HZ_PARTY_SITES'
736      AND b.owner_table_id    =  p_ps_id
737      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status;
738   ret VARCHAR2(1);
739 BEGIN
740   OPEN c1;
741   FETCH c1 INTO ret;
742   IF c1%NOTFOUND THEN
743     ret := 'N';
744   END IF;
745   CLOSE c1;
746   RETURN ret;
747 END;
748 
749 PROCEDURE as_ps_treatment
750 ------------------------------------------------------------------------
751 -- Cust Account Site / Party Site treatment in HZ_MATCHED_PARTY_SITES_GT
752 ------------------------------------------------------------------------
753 ( p_ctx_id      IN NUMBER  ,
754   p_cur_all     IN VARCHAR2,
755   p_status      IN VARCHAR2 )
756 IS
757   CURSOR c1 IS
758   SELECT a.party_site_id,
759          NVL(a.score,0) score
760     FROM hz_matched_party_sites_gt a
761    WHERE a.search_context_id  = p_ctx_id
762      AND NVL(a.score,0)       >= 0;
763 
764   lrec  c1%ROWTYPE;
765   lyn   VARCHAR2(1);
766 
767 BEGIN
768   OPEN c1;
769   LOOP
770     FETCH c1 INTO lrec;
771     EXIT WHEN c1%NOTFOUND;
772 /*
773 insert into hyu_matched_party_sites_gt
774 (PARTY_ID                       ,
775  PARTY_SITE_ID                  ,
776  SCORE                          ,
777  SEARCH_CONTEXT_ID              ) values
778 ('9999',
779  lrec.party_site_id,
780  lrec.score,
781  p_ctx_id);
782 */
783     lyn := is_as_rel_ps_in_ps_gt( p_ctx_id        => p_ctx_id,
784                                   p_party_site_id => lrec.party_site_id,
785                                   p_cur_all       => p_cur_all,
786                                   p_status        => p_status);
787 /*
788 insert into hyu_err
789 (COL1,
790  COL2,
791  COLN) values
792 (lrec.party_site_id,
793  lyn||' - '||p_cur_all||' - '||p_status,
794  p_ctx_id);
795  */
796 
797 
798     IF lyn = 'Y' THEN
799        NULL;
800     ELSE
801       IF lrec.score >= 0 THEN
802 
803 --HYU 130202
804         lyn := is_ps_rel_cpt_gt( p_ctx_id    => p_ctx_id,
805                                  p_ps_id     => lrec.party_site_id,
806                                  p_status    => p_status);
810                            p_score         => lrec.score,
807         IF lyn = 'Y' THEN
808            find_as_rel_ps( p_ctx_id        => p_ctx_id,
809                            p_party_site_id => lrec.party_site_id,
811                            p_cur_all       => p_cur_all,
812                            p_status        => p_status);
813         ELSE
814           lyn := is_any_oc_rel_ps( p_ctx_id   => p_ctx_id,
815                                   p_ps_id    => lrec.party_site_id,
816                                   p_status   => p_status);
817           IF lyn = 'N' THEN
818             find_as_rel_ps( p_ctx_id        => p_ctx_id,
819                            p_party_site_id => lrec.party_site_id,
820                            p_score         => lrec.score,
821                            p_cur_all       => p_cur_all,
822                            p_status        => p_status);
823           END IF;
824         END IF;
825       END IF;
826     END IF;
827   END LOOP;
828   CLOSE c1;
829 END;
830 
831 
832 FUNCTION is_any_data_rel_pty
833 ( p_ctx_id   IN NUMBER,
834   p_party_id IN NUMBER,
835   p_status   IN VARCHAR2)
836 RETURN VARCHAR2
837 IS
838   CURSOR c1 IS
839   SELECT 'Y'
840     FROM hz_matched_party_sites_gt
841    WHERE search_context_id = p_ctx_id
842      AND NVL(score,0)      >= 0
843      AND party_id          = p_party_id;
844 
845   CURSOR c2 IS
846   SELECT 'Y'
847     FROM hz_matched_contacts_gt
848    WHERE search_context_id = p_ctx_id
849      AND NVL(score,0) >= 0
850      AND party_id      = p_party_id;
851 /*
852   CURSOR c3 IS
853   SELECT 'Y'
854     FROM hz_matched_cpts_gt
855    WHERE search_context_id = p_ctx_id
856      AND NVL(score,0)  >= 0
857      AND party_id       = p_party_id;
858 */
859   ret VARCHAR2(1);
860 BEGIN
861   OPEN c1;
862   FETCH c1 INTO ret;
863   IF c1%NOTFOUND THEN
864       OPEN c2;
865       FETCH c2 INTO ret;
866       IF c2%NOTFOUND THEN
867          ret := 'N';
868 /*
869          OPEN c3;
870          FETCH c3 INTO ret;
871          IF c3%NOTFOUND THEN
872            ret := 'N';
873          END IF;
874          CLOSE c3;
875 */
876       END IF;
877       CLOSE c2;
878   END IF;
879   CLOSE c1;
880   RETURN ret;
881 END;
882 
883 FUNCTION is_pty_rel_cpt_gt
884 ( p_ctx_id   IN NUMBER,
885   p_pty_id   IN NUMBER,
886   p_status   IN VARCHAR2)
887 RETURN VARCHAR2
888 IS
889   CURSOR c1 IS
890   SELECT 'Y'
891     FROM hz_matched_cpts_gt a,
892          hz_contact_points  b
893    WHERE a.search_context_id =  p_ctx_id
894      AND a.contact_point_id  =  b.contact_point_id
895      AND b.owner_table_name  =  'HZ_PARTIES'
896      AND b.owner_table_id    =  p_pty_id
897      AND DECODE(p_status,'ALL','ALL',NVL(b.status,'A')) = p_status;
898   ret  VARCHAR2(1);
899 BEGIN
900   OPEN c1;
901   FETCH c1 INTO ret;
902   IF c1%NOTFOUND THEN
903     ret := 'N';
904   END IF;
905   CLOSE c1;
906   RETURN ret;
907 END;
908 
909 PROCEDURE ac_pty_treatment
910 -------------------------------------------------------
911 -- Account / Party Treatement in HZ_MATCHED_PARTIES_GT
912 -------------------------------------------------------
913 ( p_ctx_id     IN NUMBER,
914   p_cur_all    IN VARCHAR2,
915   p_status     IN VARCHAR2)
916 IS
917   CURSOR c1 IS
918   SELECT party_id,
919          NVL(score,0) score
920     FROM hz_matched_parties_gt
921    WHERE NVL(score,0) >= 0
922      AND search_context_id = p_ctx_id;
923   lrec c1%ROWTYPE;
924   lyn  VARCHAR2(1);
925 BEGIN
926   OPEN c1;
927   LOOP
928     FETCH c1 INTO lrec;
929     EXIT WHEN c1%NOTFOUND;
930     lyn :=  is_ac_rel_pty_in_p_gt( p_ctx_id   => p_ctx_id,
931                                    p_party_id => lrec.party_id,
932                                    p_status   => p_status);
933 
934     IF lyn = 'Y' THEN
935       NULL;
936     ELSE
937       IF lrec.score >= 0 THEN
938 
939         lyn := is_pty_rel_cpt_gt( p_ctx_id  => p_ctx_id,
940                                   p_pty_id  => lrec.party_id,
941                                   p_status  => p_status);
942         IF lyn = 'Y' THEN
943            find_all_account_for_party( p_ctx_id    => p_ctx_id,
944                                        p_party_id  => lrec.party_id,
945                                        p_score     => lrec.score,
946                                        p_cur_all   => p_cur_all,
947                                        p_status    => p_status);
948         ELSE
949           lyn := is_any_data_rel_pty( p_ctx_id   => p_ctx_id,
950                                     p_party_id => lrec.party_id,
951                                     p_status   => p_status);
952           IF lyn = 'N' THEN
953             find_all_account_for_party( p_ctx_id    => p_ctx_id,
954                                        p_party_id  => lrec.party_id,
955                                        p_score     => lrec.score,
956                                        p_cur_all   => p_cur_all,
957                                        p_status    => p_status);
958           END IF;
959         END IF;
960       END IF;
961     END IF;
962   END LOOP;
963   CLOSE c1;
964 END;
965 
966 
967 FUNCTION is_any_cs_in_cur_org
968 (p_cust_account_id IN NUMBER,
969  p_status          IN VARCHAR2)
970 RETURN VARCHAR2
971 IS
972  CURSOR c1 IS
973  SELECT 'Y'
974    FROM hz_cust_acct_sites
975   WHERE cust_account_id = p_cust_account_id
979   OPEN c1;
976     AND DECODE(p_status, 'ALL','ALL',NVL(status,'A')) = p_status;
977  lyn  VARCHAR2(1);
978 BEGIN
980   FETCH c1 INTO lyn;
981   IF c1%NOTFOUND THEN
982     lyn := 'N';
983   END IF;
984   CLOSE c1;
985   RETURN lyn;
986 END;
987 
988 PROCEDURE find_all_account_for_party
989 -------------------------------------------------------------------------
990 -- INSERT all_cust_account related to P_PARTY_ID in HZ_MATCHED_PARTIES_GT
991 -------------------------------------------------------------------------
992 ( p_ctx_id    IN NUMBER,
993   p_party_id  IN NUMBER,
994   p_score     IN NUMBER,
995   p_cur_all   IN VARCHAR2,
996   p_status    IN VARCHAR2)
997 IS
998   CURSOR c1 IS
999   SELECT cust_account_id
1000     FROM hz_cust_accounts
1001    WHERE party_id  = p_party_id
1002      AND DECODE(p_status, 'ALL','ALL',NVL(status,'A')) = p_status;
1003   lrec     c1%ROWTYPE;
1004   l_score  NUMBER;
1005 BEGIN
1006   OPEN c1;
1007   LOOP
1008     FETCH c1 INTO lrec;
1009     EXIT WHEN c1%NOTFOUND;
1010     IF p_score > 0 THEN
1011        l_score := -p_score;
1012     ELSE
1013        l_score := -1;
1014     END IF;
1015     IF    p_cur_all = 'ALL' THEN
1016       INSERT INTO hz_matched_parties_gt
1017       ( PARTY_ID            , SCORE       , SEARCH_CONTEXT_ID  ) VALUES
1018       ( -lrec.cust_account_id, l_score     , p_ctx_id           );
1019     ELSIF p_cur_all = 'CUR' THEN
1020       IF  is_any_cs_in_cur_org(lrec.cust_account_id,p_status) = 'Y' THEN
1021         INSERT INTO hz_matched_parties_gt
1022         ( PARTY_ID            , SCORE       , SEARCH_CONTEXT_ID  ) VALUES
1023         ( -lrec.cust_account_id, l_score     , p_ctx_id           );
1024       END IF;
1025     END IF;
1026   END LOOP;
1027   CLOSE c1;
1028 END;
1029 
1030 
1031 FUNCTION is_ac_rel_pty_in_p_gt
1032 ------------------------------------------------------------------------------------------------
1033 -- RETURN Y if the P_PARTY_ID has at least one CUST_ACCT_ID related to it in HZ_MATCHED_PARIES_GT
1034 -- Otherwise N
1035 ------------------------------------------------------------------------------------------------
1036 ( p_ctx_id     IN NUMBER,
1037   p_party_id   IN NUMBER,
1038   p_status     IN VARCHAR2)
1039 RETURN VARCHAR2
1040 IS
1041   CURSOR c1 IS
1042   SELECT 'Y'
1043     FROM hz_cust_accounts     a,
1044          hz_matched_parties_gt b
1045    WHERE a.party_id          = p_party_id
1046      AND a.cust_account_id   = -b.party_id
1047      AND b.search_context_id = p_ctx_id
1048      AND b.score             < 0
1049      AND DECODE(p_status, 'ALL','ALL',NVL(a.status,'A')) = p_status;
1050   ret VARCHAR2(1);
1051 BEGIN
1052   OPEN c1;
1053   FETCH c1 INTO ret;
1054   IF c1%NOTFOUND THEN
1055     ret := 'N';
1056   END IF;
1057   CLOSE c1;
1058   RETURN ret;
1059 END;
1060 
1061 END;