[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;