DBA Data[Home] [Help]

PACKAGE BODY: APPS.CN_CUST_MERGE_PVT

Source


1 PACKAGE BODY CN_CUST_MERGE_PVT AS
2   --$Header: cnvctmgb.pls 120.6 2007/10/26 13:55:40 rarajara ship $
3 
4 PROCEDURE MERGE_CUSTOMER_IN_HEADER (req_id                       NUMBER,
5                                     set_num                      NUMBER,
6                                     process_mode                 VARCHAR2) IS
7 
8    TYPE MERGE_HEADER_ID_LIST_TYPE IS TABLE OF
9      RA_CUSTOMER_MERGE_HEADERS.CUSTOMER_MERGE_HEADER_ID%TYPE
10      INDEX BY BINARY_INTEGER;
11    MERGE_HEADER_ID_LIST MERGE_HEADER_ID_LIST_TYPE;
12 
13    TYPE COMMISSION_HEADER_ID_LIST_TYPE IS TABLE OF
14      CN_COMMISSION_HEADERS.COMMISSION_HEADER_ID%TYPE
15      INDEX BY BINARY_INTEGER;
16    PRIMARY_KEY_ID_LIST COMMISSION_HEADER_ID_LIST_TYPE;
17 
18    TYPE CUSTOMER_ID_LIST_TYPE IS TABLE OF
19      CN_COMMISSION_HEADERS.CUSTOMER_ID%TYPE
20      INDEX BY BINARY_INTEGER;
21    NUM_COL1_ORIG_LIST CUSTOMER_ID_LIST_TYPE;
22    NUM_COL1_NEW_LIST CUSTOMER_ID_LIST_TYPE;
23 
24    TYPE BILL_TO_ADDRESS_ID_LIST_TYPE IS TABLE OF
25      CN_COMMISSION_HEADERS.BILL_TO_ADDRESS_ID%TYPE
26      INDEX BY BINARY_INTEGER;
27    NUM_COL2_ORIG_LIST BILL_TO_ADDRESS_ID_LIST_TYPE;
28    NUM_COL2_NEW_LIST BILL_TO_ADDRESS_ID_LIST_TYPE;
29 
30    TYPE SHIP_TO_ADDRESS_ID_LIST_TYPE IS TABLE OF
31      CN_COMMISSION_HEADERS.SHIP_TO_ADDRESS_ID%TYPE
32      INDEX BY BINARY_INTEGER;
33    NUM_COL3_ORIG_LIST SHIP_TO_ADDRESS_ID_LIST_TYPE;
34    NUM_COL3_NEW_LIST SHIP_TO_ADDRESS_ID_LIST_TYPE;
35 
36    l_profile_val VARCHAR2(30);
37    l_custmerge_profile_value varchar2(1);
38 
39    CURSOR merged_records IS
40      SELECT distinct CUSTOMER_MERGE_HEADER_ID
41        ,yt.COMMISSION_HEADER_ID
42        ,yt.CUSTOMER_ID
43        ,yt.BILL_TO_ADDRESS_ID
44        ,yt.SHIP_TO_ADDRESS_ID
45        FROM CN_COMMISSION_HEADERS_ALL yt, ra_customer_merges m
46        WHERE (
47        yt.CUSTOMER_ID = m.DUPLICATE_ID
48        OR ((yt.BILL_TO_ADDRESS_ID = m.DUPLICATE_ADDRESS_ID)
49        AND
50        (m.duplicate_site_code = 'BILL_TO'))
51        OR ((yt.SHIP_TO_ADDRESS_ID = m.DUPLICATE_ADDRESS_ID)
52        AND
53        (m.duplicate_site_code = 'SHIP_TO'))
54              ) AND   ( m.process_flag = 'N' OR l_custmerge_profile_value = 'N')
55        AND    m.request_id = req_id
56        AND    m.set_number = set_num
57        ;
58 
59    CURSOR CUST(p_duplicate_cust_id NUMBER) IS
60       SELECT distinct customer_id
61       FROM ra_customer_merges
62       WHERE set_number = set_num
63       AND request_id = req_id
64       AND duplicate_id = p_duplicate_cust_id;
65 
66    CURSOR ADDR(p_duplicate_addr_id NUMBER) IS
67       SELECT distinct customer_address_id
68       FROM ra_customer_merges
69       WHERE set_number = set_num
70       AND request_id = req_id
71       AND duplicate_address_id = p_duplicate_addr_id;
72 
73    CURSOR SITE(p_duplicate_site_id NUMBER) IS
74       SELECT distinct customer_site_id
75       FROM ra_customer_merges
76       WHERE set_number = set_num
77       AND request_id = req_id
78       AND duplicate_site_id = p_duplicate_site_id;
79 
80 
81      l_last_fetch BOOLEAN := FALSE;
82      l_count NUMBER;
83 BEGIN
84 
85    l_custmerge_profile_value := FND_PROFILE.VALUE('CN_CUSTOMER_MERGE_ONLINE');
86 
87    IF l_custmerge_profile_value is null OR l_custmerge_profile_value = fnd_api.g_miss_CHAR THEN
88    	l_custmerge_profile_value := 'Y';
89    END IF;
90 
91    IF process_mode='LOCK' THEN
92       NULL;
93    ELSE
94 
95       IF l_custmerge_profile_value = 'Y' THEN
96       	ARP_MESSAGE.SET_NAME('AR','AR_UPDATING_TABLE');
97       	ARP_MESSAGE.SET_TOKEN('TABLE_NAME','CN_COMMISSION_HEADERS',FALSE);
98       	HZ_ACCT_MERGE_UTIL.load_set(set_num, req_id);
99       END IF;
100 
101       l_profile_val :=  FND_PROFILE.VALUE('HZ_AUDIT_ACCT_MERGE');
102 
103 
104       open merged_records;
105       LOOP
106          FETCH merged_records BULK COLLECT INTO
107            MERGE_HEADER_ID_LIST
108            , PRIMARY_KEY_ID_LIST
109            , NUM_COL1_ORIG_LIST
110            , NUM_COL2_ORIG_LIST
111            , NUM_COL3_ORIG_LIST
112            limit 1000;
113          IF merged_records%NOTFOUND THEN
114 
115             l_last_fetch := TRUE;
116          END IF;
117 
118          IF MERGE_HEADER_ID_LIST.COUNT = 0 and l_last_fetch then
119             exit;
120          END IF;
121 
122 
123 
124          FOR I in 1..MERGE_HEADER_ID_LIST.COUNT LOOP
125             IF 'Y' = l_custmerge_profile_value THEN --replace this with profile value
126             NUM_COL1_NEW_LIST(I) :=
127               HZ_ACCT_MERGE_UTIL.GETDUP_ACCOUNT(NUM_COL1_ORIG_LIST(I));
128             NUM_COL2_NEW_LIST(I) :=
129               HZ_ACCT_MERGE_UTIL.GETDUP_SITE(NUM_COL2_ORIG_LIST(I));
130             NUM_COL3_NEW_LIST(I) :=
131               HZ_ACCT_MERGE_UTIL.GETDUP_SITE(NUM_COL3_ORIG_LIST(I));
132            ELSE
133 
134              open CUST(NUM_COL1_ORIG_LIST(I));
135              open ADDR(NUM_COL2_ORIG_LIST(I));
136              open SITE(NUM_COL3_ORIG_LIST(I));
137                 fetch CUST into NUM_COL1_NEW_LIST(I);
138 		IF CUST%NOTFOUND THEN
139 		NUM_COL1_NEW_LIST(I) := NULL;
140 		END IF;
141 		fetch ADDR into NUM_COL2_NEW_LIST(I);
142 		IF ADDR%NOTFOUND THEN
143 		NUM_COL2_NEW_LIST(I) := NULL;
144 		END IF;
145 		fetch SITE into NUM_COL3_NEW_LIST(I);
146 		IF SITE%NOTFOUND THEN
150              close ADDR;
147 		NUM_COL3_NEW_LIST(I) := NULL;
148                 END IF;
149              close CUST;
151              close SITE;
152             END IF;
153 
154          END LOOP;
155 
156 
157          IF l_profile_val IS NOT NULL AND l_profile_val = 'Y' THEN
158             FORALL I in 1..MERGE_HEADER_ID_LIST.COUNT
159               INSERT INTO HZ_CUSTOMER_MERGE_LOG
160               (
161               MERGE_LOG_ID,
162               TABLE_NAME,
163               MERGE_HEADER_ID,
164               PRIMARY_KEY_ID,
165               NUM_COL1_ORIG,
166               NUM_COL1_NEW,
167               NUM_COL2_ORIG,
168               NUM_COL2_NEW,
169               NUM_COL3_ORIG,
170               NUM_COL3_NEW,
171               ACTION_FLAG,
172               REQUEST_ID,
173               CREATED_BY,
174               CREATION_DATE,
175               LAST_UPDATE_LOGIN,
176               LAST_UPDATE_DATE,
177               LAST_UPDATED_BY
178               ) VALUES (         HZ_CUSTOMER_MERGE_LOG_s.nextval,
179               'CN_COMMISSION_HEADERS',
180               MERGE_HEADER_ID_LIST(I),
181               PRIMARY_KEY_ID_LIST(I),
182               NUM_COL1_ORIG_LIST(I),
183               NUM_COL1_NEW_LIST(I),
184               NUM_COL2_ORIG_LIST(I),
185               NUM_COL2_NEW_LIST(I),
186               NUM_COL3_ORIG_LIST(I),
187               NUM_COL3_NEW_LIST(I),
188               'U',
189               req_id,
190               hz_utility_pub.CREATED_BY,
191               hz_utility_pub.CREATION_DATE,
192               hz_utility_pub.LAST_UPDATE_LOGIN,
193               hz_utility_pub.LAST_UPDATE_DATE,
194               hz_utility_pub.LAST_UPDATED_BY
195                        );
196          END IF;
197          FORALL I in 1..MERGE_HEADER_ID_LIST.COUNT
198            UPDATE CN_COMMISSION_HEADERS_ALL yt SET
199            CUSTOMER_ID=NUM_COL1_NEW_LIST(I)
200            ,BILL_TO_ADDRESS_ID=NUM_COL2_NEW_LIST(I)
201            ,SHIP_TO_ADDRESS_ID=NUM_COL3_NEW_LIST(I)
202            , LAST_UPDATE_DATE=SYSDATE
203            , last_updated_by=arp_standard.profile.user_id
204            , last_update_login=arp_standard.profile.last_update_login
205            WHERE COMMISSION_HEADER_ID=PRIMARY_KEY_ID_LIST(I)
206            ;
207          l_count := l_count + SQL%ROWCOUNT;
208          IF l_last_fetch THEN
209             EXIT;
210          END IF;
211       END LOOP;
212 
213       IF l_custmerge_profile_value = 'Y' THEN
214         arp_message.set_name('AR','AR_ROWS_UPDATED');
215         arp_message.set_token('NUM_ROWS',to_char(l_count));
216       END IF;
217    END IF;
218 
219 EXCEPTION
220    WHEN OTHERS THEN
221 --     arp_message.set_line( 'MERGE_CUSTOMER_IN_HEADER');
222      RAISE;
223 END MERGE_CUSTOMER_IN_HEADER;
224 
225 PROCEDURE MERGE_CUSTOMER_IN_API (req_id                       NUMBER,
226                                  set_num                      NUMBER,
227                                  process_mode                 VARCHAR2) IS
228 
229    TYPE MERGE_HEADER_ID_LIST_TYPE IS TABLE OF
230      RA_CUSTOMER_MERGE_HEADERS.CUSTOMER_MERGE_HEADER_ID%TYPE
231      INDEX BY BINARY_INTEGER;
232    MERGE_HEADER_ID_LIST MERGE_HEADER_ID_LIST_TYPE;
233 
234    TYPE COMM_LINES_API_ID_LIST_TYPE IS TABLE OF
235      CN_COMM_LINES_API.COMM_LINES_API_ID%TYPE
236      INDEX BY BINARY_INTEGER;
237    PRIMARY_KEY_ID_LIST COMM_LINES_API_ID_LIST_TYPE;
238 
239    TYPE CUSTOMER_ID_LIST_TYPE IS TABLE OF
240      CN_COMM_LINES_API.CUSTOMER_ID%TYPE
241      INDEX BY BINARY_INTEGER;
242    NUM_COL1_ORIG_LIST CUSTOMER_ID_LIST_TYPE;
243    NUM_COL1_NEW_LIST CUSTOMER_ID_LIST_TYPE;
244 
245    TYPE BILL_TO_ADDRESS_ID_LIST_TYPE IS TABLE OF
246      CN_COMM_LINES_API.BILL_TO_ADDRESS_ID%TYPE
247      INDEX BY BINARY_INTEGER;
248    NUM_COL2_ORIG_LIST BILL_TO_ADDRESS_ID_LIST_TYPE;
249    NUM_COL2_NEW_LIST BILL_TO_ADDRESS_ID_LIST_TYPE;
250 
251    TYPE SHIP_TO_ADDRESS_ID_LIST_TYPE IS TABLE OF
252      CN_COMM_LINES_API.SHIP_TO_ADDRESS_ID%TYPE
253      INDEX BY BINARY_INTEGER;
254    NUM_COL3_ORIG_LIST SHIP_TO_ADDRESS_ID_LIST_TYPE;
255    NUM_COL3_NEW_LIST SHIP_TO_ADDRESS_ID_LIST_TYPE;
256 
257    l_profile_val VARCHAR2(30);
258    l_custmerge_profile_value VARCHAR2(1);
259 
260    CURSOR merged_records IS
261      SELECT distinct CUSTOMER_MERGE_HEADER_ID
262        ,yt.COMM_LINES_API_ID
263        ,yt.CUSTOMER_ID
264        ,yt.BILL_TO_ADDRESS_ID
265        ,yt.SHIP_TO_ADDRESS_ID
266        FROM CN_COMM_LINES_API_ALL yt, ra_customer_merges m
267        WHERE (
268        yt.CUSTOMER_ID = m.DUPLICATE_ID
269        OR ((yt.BILL_TO_ADDRESS_ID = m.DUPLICATE_ADDRESS_ID)
270        AND
271        (m.duplicate_site_code = 'BILL_TO'))
272        OR ((yt.SHIP_TO_ADDRESS_ID = m.DUPLICATE_ADDRESS_ID)
273        AND
274        (m.duplicate_site_code = 'SHIP_TO'))
275              ) AND    ( m.process_flag = 'N' OR l_custmerge_profile_value = 'N')
276        AND    m.request_id = req_id
277        AND    m.set_number = set_num;
278 
279    CURSOR CUST(p_duplicate_cust_id NUMBER) IS
280       SELECT distinct customer_id
281       FROM ra_customer_merges
282       WHERE set_number = set_num
283       AND request_id = req_id
284       AND DUPLICATE_ID = p_duplicate_cust_id;
285 
286    CURSOR ADDR(p_duplicate_addr_id NUMBER) IS
287       SELECT distinct customer_address_id
288       FROM ra_customer_merges
289       WHERE set_number = set_num
290       AND request_id = req_id
291       AND duplicate_address_id = p_duplicate_addr_id;
292 
293    CURSOR SITE(p_duplicate_site_id NUMBER) IS
294       SELECT distinct customer_site_id
298       AND duplicate_site_id = p_duplicate_site_id;
295       FROM ra_customer_merges
296       WHERE set_number = set_num
297       AND request_id = req_id
299 
300      l_last_fetch BOOLEAN := FALSE;
301      l_count NUMBER;
302 BEGIN
303    l_custmerge_profile_value := FND_PROFILE.VALUE('CN_CUSTOMER_MERGE_ONLINE');
304 
305    IF l_custmerge_profile_value is null OR l_custmerge_profile_value = fnd_api.g_miss_CHAR THEN
306       	l_custmerge_profile_value := 'Y';
307    END IF;
308 
309    IF process_mode='LOCK' THEN
310       NULL;
311    ELSE
312 
313    IF l_custmerge_profile_value = 'Y' THEN
314       ARP_MESSAGE.SET_NAME('AR','AR_UPDATING_TABLE');
315       ARP_MESSAGE.SET_TOKEN('TABLE_NAME','CN_COMM_LINES_API',FALSE);
316       HZ_ACCT_MERGE_UTIL.load_set(set_num, req_id);
317    END IF;
318 
319       l_profile_val :=  FND_PROFILE.VALUE('HZ_AUDIT_ACCT_MERGE');
320 
321       open merged_records;
322       LOOP
323          FETCH merged_records BULK COLLECT INTO
324            MERGE_HEADER_ID_LIST
325            , PRIMARY_KEY_ID_LIST
326            , NUM_COL1_ORIG_LIST
327            , NUM_COL2_ORIG_LIST
328            , NUM_COL3_ORIG_LIST
329            limit 1000;
330          IF merged_records%NOTFOUND THEN
331             l_last_fetch := TRUE;
332          END IF;
333 
334          IF MERGE_HEADER_ID_LIST.COUNT = 0 and l_last_fetch then
335             exit;
336          END IF;
337 
338          FOR I in 1..MERGE_HEADER_ID_LIST.COUNT LOOP
339             IF 'Y' =  l_custmerge_profile_value THEN --replace this with profile value
340                 NUM_COL1_NEW_LIST(I) :=
341                 HZ_ACCT_MERGE_UTIL.GETDUP_ACCOUNT(NUM_COL1_ORIG_LIST(I));
342                 NUM_COL2_NEW_LIST(I) :=
343                 HZ_ACCT_MERGE_UTIL.GETDUP_SITE(NUM_COL2_ORIG_LIST(I));
344                 NUM_COL3_NEW_LIST(I) :=
345                 HZ_ACCT_MERGE_UTIL.GETDUP_SITE(NUM_COL3_ORIG_LIST(I));
346             ELSE
347              open CUST(NUM_COL1_ORIG_LIST(I));
348              open ADDR(NUM_COL2_ORIG_LIST(I));
349              open SITE(NUM_COL3_ORIG_LIST(I));
350                 fetch CUST into NUM_COL1_NEW_LIST(I);
351                 IF CUST%NOTFOUND THEN
352                 NUM_COL1_NEW_LIST(I) := NULL;
353                 END IF;
354                 fetch ADDR into NUM_COL2_NEW_LIST(I);
355                 IF ADDR%NOTFOUND THEN
356 		NUM_COL2_NEW_LIST(I) := NULL;
357                 END IF;
358                 fetch SITE into NUM_COL3_NEW_LIST(I);
359                 IF SITE%NOTFOUND THEN
360 		NUM_COL3_NEW_LIST(I) := NULL;
361                 END IF;
362              close CUST;
363              close ADDR;
364              close SITE;
365 
366             END IF;
367 
368          END LOOP;
369 
370 
371          IF l_profile_val IS NOT NULL AND l_profile_val = 'Y' THEN
372             FORALL I in 1..MERGE_HEADER_ID_LIST.COUNT
373               INSERT INTO HZ_CUSTOMER_MERGE_LOG
374               (
375               MERGE_LOG_ID,
376               TABLE_NAME,
377               MERGE_HEADER_ID,
378               PRIMARY_KEY_ID,
379               NUM_COL1_ORIG,
380               NUM_COL1_NEW,
381               NUM_COL2_ORIG,
382               NUM_COL2_NEW,
383               NUM_COL3_ORIG,
384               NUM_COL3_NEW,
385               ACTION_FLAG,
386               REQUEST_ID,
387               CREATED_BY,
388               CREATION_DATE,
389               LAST_UPDATE_LOGIN,
390               LAST_UPDATE_DATE,
391               LAST_UPDATED_BY
392               ) VALUES (         HZ_CUSTOMER_MERGE_LOG_s.nextval,
393               'CN_COMM_LINES_API',
394               MERGE_HEADER_ID_LIST(I),
395               PRIMARY_KEY_ID_LIST(I),
396               NUM_COL1_ORIG_LIST(I),
397               NUM_COL1_NEW_LIST(I),
398               NUM_COL2_ORIG_LIST(I),
399               NUM_COL2_NEW_LIST(I),
400               NUM_COL3_ORIG_LIST(I),
401               NUM_COL3_NEW_LIST(I),
402               'U',
403               req_id,
404               hz_utility_pub.CREATED_BY,
405               hz_utility_pub.CREATION_DATE,
406               hz_utility_pub.LAST_UPDATE_LOGIN,
407               hz_utility_pub.LAST_UPDATE_DATE,
408               hz_utility_pub.LAST_UPDATED_BY
409                        );
410 
411          END IF;
412          FORALL I in 1..MERGE_HEADER_ID_LIST.COUNT
413            UPDATE CN_COMM_LINES_API_ALL yt SET
414            CUSTOMER_ID=NUM_COL1_NEW_LIST(I)
415            ,BILL_TO_ADDRESS_ID=NUM_COL2_NEW_LIST(I)
416            ,SHIP_TO_ADDRESS_ID=NUM_COL3_NEW_LIST(I)
417            , LAST_UPDATE_DATE=SYSDATE
418            , last_updated_by=arp_standard.profile.user_id
419            , last_update_login=arp_standard.profile.last_update_login
420            WHERE COMM_LINES_API_ID=PRIMARY_KEY_ID_LIST(I)
421            ;
422          l_count := l_count + SQL%ROWCOUNT;
423          IF l_last_fetch THEN
424             EXIT;
425          END IF;
426       END LOOP;
427 
428       arp_message.set_name('AR','AR_ROWS_UPDATED');
429       arp_message.set_token('NUM_ROWS',to_char(l_count));
430    END IF;
431 EXCEPTION
432    WHEN OTHERS THEN
433      arp_message.set_line( 'MERGE_CUSTOMER_IN_API');
434      RAISE;
435 END MERGE_CUSTOMER_IN_API;
436 
437 
438 PROCEDURE populate_customer_merge(req_id                       NUMBER,
439                                  set_num                      NUMBER,
440                                  process_mode                 VARCHAR2) IS
441           l_profile_val VARCHAR2(30);
442           l_count number;
443 BEGIN
444    IF process_mode='LOCK' THEN
445       NULL;
446    ELSE
447 
448       ARP_MESSAGE.SET_NAME('AR','AR_UPDATING_TABLE');
449       ARP_MESSAGE.SET_TOKEN('TABLE_NAME','CN_CUST_MERGE_INTERFACE',FALSE);
450 
451       Insert into   CN_CUST_MERGE_INTERFACE
452       (
453        request_id
454       ,set_number
455       ,process_mode
456       ,STATUS
457       )
458       values
459        (req_id
460        ,set_num
461        ,process_mode
462        ,'I'
463        );
464 
465    END IF;
466 EXCEPTION
467    WHEN OTHERS THEN
468 
469      --arp_message.set_line( 'MERGE_CUSTOMER_IN_API');
470      RAISE;
471 END populate_customer_merge;
472 
473 procedure customer_merge (req_id NUMBER,
474                           set_number NUMBER,
475                           process_mode VARCHAR2) IS
476           l_custmerge_profile_value VARCHAR2(1);
477 BEGIN
478    --removed code base from here
479    -- moved to two procs - auto generated by TCA perl script.
480    -- MERGE_CUSTOMER_IN_HEADER
481    -- MERGE_CUSTOMER_IN_API
482 
483 	l_custmerge_profile_value := FND_PROFILE.VALUE('CN_CUSTOMER_MERGE_ONLINE');
484    IF l_custmerge_profile_value is null OR l_custmerge_profile_value = fnd_api.g_miss_char THEN
485       	l_custmerge_profile_value := 'Y';
486    END IF;
487 
488    IF 'Y' = l_custmerge_profile_value THEN
489    merge_customer_in_header(req_id, set_number, process_mode);
490    merge_customer_in_api(req_id, set_number, process_mode);
491    ELSE
492    populate_customer_merge(req_id, set_number, process_mode);
493    END IF;
494 END customer_merge;
495 
496 procedure submit_merge_request(errbuf OUT nocopy VARCHAR2,
497 				     retcode OUT nocopy NUMBER) IS
498 
499 CURSOR mergerecords IS
500 SELECT request_id,set_number,process_mode
501 FROM CN_CUST_MERGE_INTERFACE
502 WHERE STATUS='I';
503 
504 l_custmerge_profile_value VARCHAR2(1);
505 BEGIN
506 for c1 in mergerecords loop
507    merge_customer_in_header(c1.request_id, c1.set_number, c1.process_mode);
508    merge_customer_in_api(c1.request_id, c1.set_number, c1.process_mode);
509    UPDATE 	CN_CUST_MERGE_INTERFACE
510    SET STATUS='C'
511    WHERE request_id=c1.request_id;
512 end loop;
513 EXCEPTION
514    WHEN  OTHERS THEN
515       --ROLLBACK TO populate_srp_tables_runner;
516       errbuf := substr(sqlerrm,1,250);
517       retcode := 2;
518 END submit_merge_request;
519 
520 END cn_cust_merge_pvt;