1 PACKAGE BODY PVX_PARTY_MERGE_PKG AS
2 /* $Header: pvxvmrgb.pls 120.7 2006/06/12 10:37:33 rdsharma ship $ */
3
4 -- Start of Comments
5 -- Package name : PVX_PARTY_MERGE_PKG
6 -- Purpose : Merges duplicate parties in PV tables. The
7
8 --
9 -- History
10 -- MM-DD-YYYY NAME MODIFICATIONS
11 -- 02-21-2001 ajchatto added MERGE_PARTNER_ENTITY_ATTRIBUTES procedure to merge party
12 --
13 -- End of Comments
14
15
16 G_PROC_NAME CONSTANT VARCHAR2(30) := 'PV_PARTY_MERGE_PKG';
17 G_USER_ID CONSTANT NUMBER(15) := FND_GLOBAL.USER_ID;
18 G_LOGIN_ID CONSTANT NUMBER(15) := FND_GLOBAL.LOGIN_ID;
19 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PVX_PARTY_MERGE_PKG';
20
21
22 -- -----------------------------------------------------------------------------------
23 -- Use for inserting output messages to the message table.
24 -- -----------------------------------------------------------------------------------
25 PROCEDURE Debug(
26 p_msg_string IN VARCHAR2
27 );
28
29 PROCEDURE Set_Message(
30 p_msg_level IN NUMBER,
31 p_msg_name IN VARCHAR2,
32 p_token1 IN VARCHAR2,
33 p_token1_value IN VARCHAR2,
34 p_token2 IN VARCHAR2 := NULL,
35 p_token2_value IN VARCHAR2 := NULL,
36 p_token3 IN VARCHAR2 := NULL,
37 p_token3_value IN VARCHAR2 := NULL
38 );
39
40
41
42 -- --------------------------------------------------------------------------
43 -- MERGE_REFERRALS_B
44 --
45 -- --------------------------------------------------------------------------
46 PROCEDURE MERGE_REFERRALS_B (
47 p_entity_name IN VARCHAR2,
48 p_from_id IN NUMBER,
49 p_to_id OUT NOCOPY NUMBER,
50 p_from_fk_id IN NUMBER,
51 p_to_fk_id IN NUMBER,
52 p_parent_entity_name IN VARCHAR2,
53 p_batch_id IN NUMBER,
54 p_batch_party_id IN NUMBER,
55 x_return_status OUT NOCOPY VARCHAR2)
56 IS
57 l_api_name VARCHAR2(30) := 'MERGE_REFERRALS_B';
58 l_msg_count NUMBER;
59 l_msg_data VARCHAR2(4000);
60
61 RESOURCE_BUSY EXCEPTION;
62 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
63
64 BEGIN
65 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
66 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
67
68
69 x_return_status := FND_API.G_RET_STS_SUCCESS;
70
71 IF (p_from_fk_id = p_to_fk_id) THEN
72 p_to_id := p_from_id;
73 RETURN;
74 END IF;
75
76 IF p_from_fk_id <> p_to_fk_id THEN
77 BEGIN
78 -- ---------------------------------------------------------------
79 -- Merge party (hz_parties)
80 -- ---------------------------------------------------------------
81 IF (p_parent_entity_name = 'HZ_PARTIES') THEN
82 UPDATE pv_referrals_b
83 SET partner_id = p_to_fk_id,
84 last_update_date = SYSDATE,
85 last_updated_by = G_USER_ID,
86 last_update_login = G_LOGIN_ID
87 WHERE partner_id = p_from_fk_id;
88
89 UPDATE pv_referrals_b
90 SET customer_party_id = p_to_fk_id,
91 last_update_date = SYSDATE,
92 last_updated_by = G_USER_ID,
93 last_update_login = G_LOGIN_ID
94 WHERE customer_party_id = p_from_fk_id;
95
96 -- ---------------------------------------------------------------
97 -- Merge party_sites (hz_party_sites)
98 -- ---------------------------------------------------------------
99 ELSIF (p_parent_entity_name = 'HZ_PARTY_SITES') THEN
100 UPDATE pv_referrals_b
101 SET customer_party_site_id = p_to_fk_id,
102 last_update_date = SYSDATE,
103 last_updated_by = G_USER_ID,
104 last_update_login = G_LOGIN_ID
105 WHERE customer_party_site_id = p_from_fk_id;
106
107 -- ---------------------------------------------------------------
108 -- Merge contact_points (hz_contact_points)
109 -- ---------------------------------------------------------------
110 ELSIF (p_parent_entity_name = 'HZ_CONTACT_POINTS') THEN
111 UPDATE pv_referrals_b
112 SET customer_contact_party_id = p_to_fk_id,
113 last_update_date = SYSDATE,
114 last_updated_by = G_USER_ID,
115 last_update_login = G_LOGIN_ID
116 WHERE customer_contact_party_id = p_from_fk_id;
117
118 -- ---------------------------------------------------------------
119 -- Merge org_contacts (hz_org_contacts)
120 -- ---------------------------------------------------------------
121 ELSIF (p_parent_entity_name = 'HZ_ORG_CONTACTS') THEN
122 UPDATE pv_referrals_b
123 SET customer_org_contact_id = p_to_fk_id,
124 last_update_date = SYSDATE,
125 last_updated_by = G_USER_ID,
126 last_update_login = G_LOGIN_ID
127 WHERE customer_org_contact_id = p_from_fk_id;
128 END IF;
129
130 EXCEPTION
131 WHEN OTHERS THEN
132 Debug(g_pkg_name || '.' || l_api_name || ': ' || sqlerrm);
133 x_return_status := FND_API.G_RET_STS_ERROR;
134 raise;
135 END;
136 END IF;
137
138 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
139 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
140 END MERGE_REFERRALS_B;
141
142 -----------------------------------------------------------------------------
143 --Function to check if the party is a PV Partner
144 -----------------------------------------------------------------------------
145
146 FUNCTION IsPVPartner(p_party_id NUMBER)
147 return VARCHAR2
148 IS
149 CURSOR IsPVPartner IS
150 SELECT partner_party_id from pv_partner_profiles where
151 partner_party_id = p_party_id and
152 (status = 'A' OR STATUS = 'I');
153
154 l_partner_party_id number;
155
156 BEGIN
157 OPEN IsPVPartner;
158 FETCH IsPVPartner into l_partner_party_id;
159 if IsPVPartner%found then
160 CLOSE IsPVPartner;
161 return 'Y';
162 else
163 CLOSE IsPVPartner;
164 return 'N';
165 end if;
166
167 END;
168
169 -- --------------------------------------------------------------------------
170
171 -----------------------------------------------------------------------------
172 --Function to get the Internal Vendor PARTY_ID
173 -----------------------------------------------------------------------------
174
175 FUNCTION get_intVendorOrg(p_party_id NUMBER, p_partner_id NUMBER)
176 return NUMBER
177 IS
178
179 CURSOR intVendOrg_csr(cv_party_id NUMBER, cv_partner_id NUMBER) IS
180 SELECT hzr.object_id
181 FROM pv_partner_profiles ppp,
182 hz_relationships hzr
183 WHERE ppp.partner_party_id = cv_party_id
184 AND ppp.partner_id = cv_partner_id
185 AND hzr.subject_id = ppp.partner_party_id
186 AND hzr.party_id = ppp.partner_id
187 AND hzr.subject_type = 'ORGANIZATION'
188 AND hzr.subject_table_name = 'HZ_PARTIES'
189 AND hzr.object_type = 'ORGANIZATION'
190 AND hzr.object_table_name = 'HZ_PARTIES'
191 AND hzr.relationship_code = 'PARTNER_OF' ;
192
193 l_vendor_id number;
194
195 BEGIN
196 OPEN intVendOrg_csr(p_party_id, p_partner_id);
197 FETCH intVendOrg_csr into l_vendor_id;
198 CLOSE intVendOrg_csr;
199
200 return l_vendor_id;
201 END;
202
203 -- --------------------------------------------------------------------------
204
205 -- --------------------------------------------------------------------------
206 -- MERGE_PARTNER_PROFILES1
207 --
208 -- This is a blank API which does not do any updates.
209 -- --------------------------------------------------------------------------
210 PROCEDURE MERGE_PARTNER_PROFILES1 (
211 p_entity_name IN VARCHAR2,
212 p_from_id IN NUMBER,
213 p_to_id OUT NOCOPY NUMBER,
214 p_from_fk_id IN NUMBER,
215 p_to_fk_id IN NUMBER,
216 p_parent_entity_name IN VARCHAR2,
217 p_batch_id IN NUMBER,
218 p_batch_party_id IN NUMBER,
219 x_return_status OUT NOCOPY VARCHAR2)
220 IS
221 l_api_name VARCHAR2(30) := 'MERGE_PARTNER_PROFILES1';
222 l_msg_count NUMBER;
223 l_msg_data VARCHAR2(4000);
224
225 RESOURCE_BUSY EXCEPTION;
226 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
227
228 BEGIN
229 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
230 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
231
232 x_return_status := FND_API.G_RET_STS_SUCCESS;
233
234 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
235 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
236
237 exception
238 WHEN FND_API.G_EXC_ERROR THEN
239 x_return_status := FND_API.G_RET_STS_ERROR;
240 FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
241 p_count => l_msg_count,
242 p_data => l_msg_data);
243
244 when others then
245 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
246 fnd_message.set_token('ERROR',SQLERRM);
247 fnd_msg_pub.add;
248 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
249 raise;
250
251 END MERGE_PARTNER_PROFILES1;
252
253 -- --------------------------------------------------------------------------
254 -- MERGE_PARTNER_PROFILES2
255 -- --------------------------------------------------------------------------
256
257 PROCEDURE MERGE_PARTNER_PROFILES2 (
258 p_entity_name IN VARCHAR2,
259 p_from_id IN NUMBER,
260 p_to_id OUT NOCOPY NUMBER,
261 p_from_fk_id IN NUMBER,
262 p_to_fk_id IN NUMBER,
263 p_parent_entity_name IN VARCHAR2,
264 p_batch_id IN NUMBER,
265 p_batch_party_id IN NUMBER,
266 x_return_status OUT NOCOPY VARCHAR2)
267 IS
268 l_merge_reason_code VARCHAR2(30);
269 l_api_name VARCHAR2(30) := 'MERGE_PARTNER_PROFILES2';
270 l_msg_count NUMBER;
271 l_msg_data VARCHAR2(4000);
272 l_to_partner_id NUMBER;
273 l_exist NUMBER;
274
275 RESOURCE_BUSY EXCEPTION;
276 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
277
278 -- ------------------------------------------------------------------
279 -- These are the "from" records that are still "active" in
280 -- hz_relationships. We don't need any that have been "merged."
281 -- ------------------------------------------------------------------
282 /* CURSOR c1 IS
283 SELECT DISTINCT a.partner_profile_id, a.partner_party_id, b.party_id partner_id
284 FROM pv_partner_profiles a,
285 hz_relationships b
286 WHERE a.partner_party_id = p_from_fk_id AND
287 a.partner_id = b.party_id AND
288 b.relationship_code = 'PARTNER_OF' AND
289 b.status = 'A'; */
290
291 /**** Fixed the issue reported in bug # 5307731 by adding STATUS check **********/
292 CURSOR c1 IS
293 SELECT partner_profile_id, partner_party_id, partner_id
294 FROM pv_partner_profiles
295 WHERE partner_party_id = p_from_fk_id
296 AND status = 'A';
297
298 /**** Fixed the issue reported in bug # 5307731 by adding STATUS check **********/
299 CURSOR c2 IS
300 SELECT partner_profile_id, partner_party_id, partner_id
301 FROM pv_partner_profiles
302 WHERE partner_party_id = p_to_fk_id
303 AND status = 'A';
304
305 BEGIN
306
307 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
308 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
309
310 x_return_status := FND_API.G_RET_STS_SUCCESS;
311
312 IF (p_from_fk_id = p_to_fk_id) THEN
313 p_to_id := p_from_id;
314 RETURN;
315 END IF;
316
317 -- -------------------------------------------------------------------
318 -- We do not want to update partner_party_id of any records if the
319 -- corresponding PARTNER_OF relationship has a status of 'M'. We are
320 -- only interested in "active" ones.
321 -- -------------------------------------------------------------------
322 /* FOR x IN c1 LOOP
323 UPDATE pv_partner_profiles
324 SET partner_party_id = p_to_fk_id,
325 last_update_date = SYSDATE,
326 last_updated_by = G_USER_ID,
327 last_update_login = G_LOGIN_ID
328 WHERE partner_profile_id = x.partner_profile_id;
329 END LOOP; */
330
331
332 --PN Coding starts here
333 if IsPVPartner(p_from_fk_id) = 'Y' THEN
334 if IsPVPartner(p_to_fk_id) = 'Y' THEN
335 -- Update the status of the from to merged
336 FOR x IN c1 LOOP
337 FOR y IN c2 LOOP
338 IF get_intVendorOrg(x.partner_party_id, x.partner_id) = get_intVendorOrg(y.partner_party_id, y.partner_id)
339 THEN
340 UPDATE pv_partner_profiles
341 SET status = 'M',
342 last_update_date = SYSDATE,
343 last_updated_by = G_USER_ID,
344 last_update_login = G_LOGIN_ID
345 WHERE partner_profile_id = x.partner_profile_id;
346 ELSE
347
348 UPDATE pv_partner_profiles
349 SET partner_party_id = p_to_fk_id,
350 last_update_date = SYSDATE,
351 last_updated_by = G_USER_ID,
352 last_update_login = G_LOGIN_ID
353 WHERE partner_profile_id = x.partner_profile_id;
354 END IF;
355 END LOOP;
356 END LOOP;
357 else
358
359 -- Update the party id of the partner to that of customer/Non PRM partner
360 FOR x IN c1 LOOP
361 UPDATE pv_partner_profiles
362 SET partner_party_id = p_to_fk_id,
363 last_update_date = SYSDATE,
364 last_updated_by = G_USER_ID,
365 last_update_login = G_LOGIN_ID
366 WHERE partner_profile_id = x.partner_profile_id;
367 END LOOP;
368 end if;
369
370 end if;
371
372 -- --------------------------------------------------------
373 -- Exception Handling
374 -- --------------------------------------------------------
375 exception
376 WHEN FND_API.G_EXC_ERROR THEN
377 x_return_status := FND_API.G_RET_STS_ERROR;
378 FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
379 p_count => l_msg_count,
380 p_data => l_msg_data);
381
382 when others then
383 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
384 fnd_message.set_token('ERROR',SQLERRM);
385 fnd_msg_pub.add;
386 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
387 raise;
388
389 END MERGE_PARTNER_PROFILES2;
390
391
392
393 -- --------------------------------------------------------------------------
394 -- MERGE_PARTNER_ENTITY_ATTRS
395 --
396 -- This is a blank API which does not do any updates.
397 -- --------------------------------------------------------------------------
398 PROCEDURE MERGE_PARTNER_ENTITY_ATTRS (
399 p_entity_name IN VARCHAR2,
400 p_from_id IN NUMBER,
401 p_to_id OUT NOCOPY NUMBER,
402 p_from_fk_id IN NUMBER,
403 p_to_fk_id IN NUMBER,
404 p_parent_entity_name IN VARCHAR2,
405 p_batch_id IN NUMBER,
406 p_batch_party_id IN NUMBER,
407 x_return_status OUT NOCOPY VARCHAR2)
408 IS
409 l_api_name VARCHAR2(30) := 'MERGE_PARTNER_PROFILES';
410
411 RESOURCE_BUSY EXCEPTION;
412 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
413
414 BEGIN
415 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
416 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
417
418 x_return_status := FND_API.G_RET_STS_SUCCESS;
419
420 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
421 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
422
423 exception
424 when others then
425 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
426 fnd_message.set_token('ERROR',SQLERRM);
427 fnd_msg_pub.add;
428 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
429 raise;
430
431 END MERGE_PARTNER_ENTITY_ATTRS;
432
433
434 -- --------------------------------------------------------------------------
435 -- MERGE_LEAD_ASSIGNMENTS
436 -- --------------------------------------------------------------------------
437 PROCEDURE MERGE_LEAD_ASSIGNMENTS (
438 p_entity_name IN VARCHAR2,
439 p_from_id IN NUMBER,
440 p_to_id OUT NOCOPY NUMBER,
441 p_from_fk_id IN NUMBER,
442 p_to_fk_id IN NUMBER,
443 p_parent_entity_name IN VARCHAR2,
444 p_batch_id IN NUMBER,
445 p_batch_party_id IN NUMBER,
446 x_return_status OUT NOCOPY VARCHAR2)
447 IS
448 cursor c1 is
449 select 1
450 from PV_LEAD_ASSIGNMENTS
451 where partner_id = p_from_fk_id
452 for update nowait;
453
454
455 l_merge_reason_code VARCHAR2(30);
456 l_api_name VARCHAR2(30) := 'MERGE_LEAD_ASSIGNMENTS';
457 l_count NUMBER(10) := 0;
458 l_ppf_id NUMBER := Null;
459
460 RESOURCE_BUSY EXCEPTION;
461 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
462
463 BEGIN
464 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
465 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
466
467 x_return_status := FND_API.G_RET_STS_SUCCESS;
468
469 select merge_reason_code
470 into l_merge_reason_code
471 from hz_merge_batch
472 where batch_id = p_batch_id;
473
474 if l_merge_reason_code = 'DUPLICATE' then
475 -- if reason code is duplicate then allow the party merge to happen without
476 -- any validations.
477 null;
478 else
479 -- if there are any validations to be done, include it in this section
480 null;
481 end if;
482
483 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
484 -- needs to be done. Set Merged To Id is same as Merged From Id and return
485
486 if p_from_fk_id = p_to_fk_id then
487 p_to_id := p_from_id;
488 return;
489 end if;
490
491 -- If the parent has changed(ie. Parent is getting merged) then transfer the
492 -- dependent record to the new parent. Before transferring check if a similar
493 -- dependent record exists on the new parent. If a duplicate exists then do
494 -- not transfer and return the id of the duplicate record as the Merged To Id
495
496
497 IF p_from_fk_id <> p_to_fk_id THEN
498 FOR x IN (SELECT DISTINCT partner_id
499 FROM pv_lead_assignments
500 WHERE partner_id = p_to_fk_id)
501 LOOP
502 p_to_id := x.partner_id;
503 END LOOP;
504
505 IF (p_to_id IS NULL) THEN
506 FOR x IN (SELECT DISTINCT related_party_id
507 FROM pv_lead_assignments
508 WHERE related_party_id = p_to_fk_id)
509 LOOP
510 p_to_id := x.related_party_id;
511 END LOOP;
512 END IF;
513
514 UPDATE PV_LEAD_ASSIGNMENTS
515 SET partner_id = p_to_fk_id,
516 last_update_date = SYSDATE,
517 last_updated_by = G_USER_ID,
518 last_update_login = G_LOGIN_ID
519 WHERE partner_id = p_from_fk_id;
520 END IF;
521
522 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
523 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
524
525
526 exception
527 when others then
528 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
529 fnd_message.set_token('ERROR',SQLERRM);
530 fnd_msg_pub.add;
531 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
532 raise;
533
534 END MERGE_LEAD_ASSIGNMENTS;
535
536
537 PROCEDURE MERGE_ASSIGNMENT_LOGS (
538 p_entity_name IN VARCHAR2,
539 p_from_id IN NUMBER,
540 p_to_id OUT NOCOPY NUMBER,
541 p_from_fk_id IN NUMBER,
542 p_to_fk_id IN NUMBER,
543 p_parent_entity_name IN VARCHAR2,
544 p_batch_id IN NUMBER,
545 p_batch_party_id IN NUMBER,
546 x_return_status OUT NOCOPY VARCHAR2)
547 IS
548 cursor c1 is
549 select 1
550 from PV_ASSIGNMENT_LOGS
551 where partner_id = p_from_fk_id
552 for update nowait;
553
554
555 l_merge_reason_code VARCHAR2(30);
556 l_api_name VARCHAR2(30) := 'MERGE_ASSIGNMENT_LOGS';
557 l_count NUMBER(10) := 0;
558 l_ppf_id NUMBER := Null;
559
560 RESOURCE_BUSY EXCEPTION;
561 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
562
563 BEGIN
564 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
565 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
566
567 x_return_status := FND_API.G_RET_STS_SUCCESS;
568
569 select merge_reason_code
570 into l_merge_reason_code
571 from hz_merge_batch
572 where batch_id = p_batch_id;
573
574 if l_merge_reason_code = 'DUPLICATE' then
575 -- if reason code is duplicate then allow the party merge to happen without
576 -- any validations.
577 null;
578 else
579 -- if there are any validations to be done, include it in this section
580 null;
581 end if;
582
583 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
584 -- needs to be done. Set Merged To Id is same as Merged From Id and return
585
586 if p_from_fk_id = p_to_fk_id then
587 p_to_id := p_from_id;
588 return;
589 end if;
590
591 -- If the parent has changed(ie. Parent is getting merged) then transfer the
592 -- dependent record to the new parent. Before transferring check if a similar
593 -- dependent record exists on the new parent. If a duplicate exists then do
594 -- not transfer and return the id of the duplicate record as the Merged To Id
595
596
597 if p_from_fk_id <> p_to_fk_id then
598
599 begin
600 select DISTINCT partner_id into l_ppf_id
601 from PV_ASSIGNMENT_LOGS
602 where partner_id = p_to_fk_id;
603 exception
604 When NO_DATA_FOUND then
605 l_ppf_id := Null;
606 end;
607
608
609 update PV_ASSIGNMENT_LOGS
610 set partner_id = decode(partner_id, p_from_fk_id, p_to_fk_id, partner_id),
611 last_update_date = SYSDATE,
612 last_updated_by = G_USER_ID,
613 last_update_login = G_LOGIN_ID
614 where partner_id = p_from_fk_id;
615
616 if l_ppf_id is not Null then
617 p_to_id := l_ppf_id;
618 end if;
619
620 end if;
621
622 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
623 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
624
625 exception
626 when others then
627 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
628 fnd_message.set_token('ERROR',SQLERRM);
629 fnd_msg_pub.add;
630 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
631 raise;
632
633 END MERGE_ASSIGNMENT_LOGS;
634
635
636 -- --------------------------------------------------------------------------
637 -- MERGE_SEARCH_ATTR_VALUES
638 --
639 -- This is a blank API which does not do any updates.
640 -- --------------------------------------------------------------------------
641 PROCEDURE MERGE_SEARCH_ATTR_VALUES (
642 p_entity_name IN VARCHAR2,
643 p_from_id IN NUMBER,
644 p_to_id OUT NOCOPY NUMBER,
645 p_from_fk_id IN NUMBER,
646 p_to_fk_id IN NUMBER,
647 p_parent_entity_name IN VARCHAR2,
648 p_batch_id IN NUMBER,
649 p_batch_party_id IN NUMBER,
650 x_return_status OUT NOCOPY VARCHAR2)
651 IS
652 l_api_name VARCHAR2(30) := 'MERGE_SEARCH_ATTR_VALUES';
653
654 RESOURCE_BUSY EXCEPTION;
655 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
656
657 BEGIN
658 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
659 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
660
661 x_return_status := FND_API.G_RET_STS_SUCCESS;
662
663 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
664 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
665
666 exception
667 when others then
668 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
669 fnd_message.set_token('ERROR',SQLERRM);
670 fnd_msg_pub.add;
671 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
672 raise;
673
674 END MERGE_SEARCH_ATTR_VALUES;
675
676
677 PROCEDURE MERGE_LEAD_PSS_LINES (
678 p_entity_name IN VARCHAR2,
679 p_from_id IN NUMBER,
680 p_to_id OUT NOCOPY NUMBER,
681 p_from_fk_id IN NUMBER,
682 p_to_fk_id IN NUMBER,
683 p_parent_entity_name IN VARCHAR2,
684 p_batch_id IN NUMBER,
685 p_batch_party_id IN NUMBER,
686 x_return_status OUT NOCOPY VARCHAR2)
687 IS
688 cursor c1 is
689 select 1
690 from PV_LEAD_PSS_LINES
691 where partner_id = p_from_fk_id
692 for update nowait;
693
694
695 l_merge_reason_code VARCHAR2(30);
696 l_api_name VARCHAR2(30) := 'MERGE_LEAD_PSS_LINES';
697 l_count NUMBER(10) := 0;
698 l_ppf_id NUMBER := Null;
699
700 RESOURCE_BUSY EXCEPTION;
701 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
702
703 BEGIN
704 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
705 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
706
707 x_return_status := FND_API.G_RET_STS_SUCCESS;
708
709 select merge_reason_code
710 into l_merge_reason_code
711 from hz_merge_batch
712 where batch_id = p_batch_id;
713
714 if l_merge_reason_code = 'DUPLICATE' then
715 -- if reason code is duplicate then allow the party merge to happen without
716 -- any validations.
717 null;
718 else
719 -- if there are any validations to be done, include it in this section
720 null;
721 end if;
722
723 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
724 -- needs to be done. Set Merged To Id is same as Merged From Id and return
725
726 if p_from_fk_id = p_to_fk_id then
727 p_to_id := p_from_id;
728 return;
729 end if;
730
731 -- If the parent has changed(ie. Parent is getting merged) then transfer the
732 -- dependent record to the new parent. Before transferring check if a similar
733 -- dependent record exists on the new parent. If a duplicate exists then do
734 -- not transfer and return the id of the duplicate record as the Merged To Id
735
736
737 if p_from_fk_id <> p_to_fk_id then
738
739 begin
740 select DISTINCT partner_id into l_ppf_id
741 from PV_LEAD_PSS_LINES
742 where partner_id = p_to_fk_id;
743 exception
744 When NO_DATA_FOUND then
745 l_ppf_id := Null;
746 end;
747
748
749 update PV_LEAD_PSS_LINES
750 set partner_id = decode(partner_id, p_from_fk_id, p_to_fk_id, partner_id),
751 last_update_date = SYSDATE,
752 last_updated_by = G_USER_ID,
753 last_update_login = G_LOGIN_ID
754 where partner_id = p_from_fk_id;
755
756 if l_ppf_id is not Null then
757 p_to_id := l_ppf_id;
758 end if;
759
760 end if;
761
762 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
763 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
764
765
766 exception
767 when others then
768 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
769 fnd_message.set_token('ERROR',SQLERRM);
770 fnd_msg_pub.add;
771 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
772 raise;
773
774 END MERGE_LEAD_PSS_LINES;
775
776
777 PROCEDURE MERGE_GE_PARTY_NOTIFICATIONS (
778 p_entity_name IN VARCHAR2,
779 p_from_id IN NUMBER,
780 p_to_id OUT NOCOPY NUMBER,
781 p_from_fk_id IN NUMBER,
782 p_to_fk_id IN NUMBER,
783 p_parent_entity_name IN VARCHAR2,
784 p_batch_id IN NUMBER,
785 p_batch_party_id IN NUMBER,
786 x_return_status OUT NOCOPY VARCHAR2)
787 IS
788 cursor c1 is
789 select 1
790 from PV_GE_PARTY_NOTIFICATIONS
791 where partner_id = p_from_fk_id
792 for update nowait;
793
794
795 l_merge_reason_code VARCHAR2(30);
796 l_api_name VARCHAR2(30) := 'MERGE_GE_PARTY_NOTIFICATIONS';
797 l_count NUMBER(10) := 0;
798 l_ppf_id NUMBER := Null;
799
800 RESOURCE_BUSY EXCEPTION;
801 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
802
803 BEGIN
804 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
805 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
806
807 x_return_status := FND_API.G_RET_STS_SUCCESS;
808
809 select merge_reason_code
810 into l_merge_reason_code
811 from hz_merge_batch
812 where batch_id = p_batch_id;
813
814 if l_merge_reason_code = 'DUPLICATE' then
815 -- if reason code is duplicate then allow the party merge to happen without
816 -- any validations.
817 null;
818 else
819 -- if there are any validations to be done, include it in this section
820 null;
821 end if;
822
823 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
824 -- needs to be done. Set Merged To Id is same as Merged From Id and return
825
826 if p_from_fk_id = p_to_fk_id then
827 p_to_id := p_from_id;
828 return;
829 end if;
830
831 -- If the parent has changed(ie. Parent is getting merged) then transfer the
832 -- dependent record to the new parent. Before transferring check if a similar
833 -- dependent record exists on the new parent. If a duplicate exists then do
834 -- not transfer and return the id of the duplicate record as the Merged To Id
835
836
837 if p_from_fk_id <> p_to_fk_id then
838
839
840 BEGIN
841 SELECT DISTINCT partner_id INTO l_ppf_id
842 FROM PV_GE_PARTY_NOTIFICATIONS
843 WHERE partner_id = p_to_fk_id;
844 EXCEPTION
845 WHEN NO_DATA_FOUND THEN
846 l_ppf_id := Null;
847 END;
848
849
850
851 update PV_GE_PARTY_NOTIFICATIONS
852 set partner_id = p_to_fk_id,
853 last_update_date = SYSDATE,
854 last_updated_by = G_USER_ID,
855 last_update_login = G_LOGIN_ID
856 where partner_id = p_from_fk_id;
857
858 if l_ppf_id is not Null then
859 p_to_id := l_ppf_id;
860 end if;
861
862 end if;
863
864 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
865 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
866
867 exception
868 when others then
869 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
870 fnd_message.set_token('ERROR',SQLERRM);
871 fnd_msg_pub.add;
872 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
873 raise;
874
875 END MERGE_GE_PARTY_NOTIFICATIONS;
876
877 -- blank api
878 PROCEDURE MERGE_PG_ENRL_REQUESTS (
879 p_entity_name IN VARCHAR2,
880 p_from_id IN NUMBER,
881 p_to_id OUT NOCOPY NUMBER,
882 p_from_fk_id IN NUMBER,
883 p_to_fk_id IN NUMBER,
884 p_parent_entity_name IN VARCHAR2,
885 p_batch_id IN NUMBER,
886 p_batch_party_id IN NUMBER,
887 x_return_status OUT NOCOPY VARCHAR2)
888 IS
889 cursor c1 is
890 select 1
891 from PV_PG_ENRL_REQUESTS
892 where partner_id = p_from_fk_id
893 for update nowait;
894
895
896 l_merge_reason_code VARCHAR2(30);
897 l_api_name VARCHAR2(30) := 'MERGE_PG_ENRL_REQUESTS';
898 l_count NUMBER(10) := 0;
899 l_ppf_id NUMBER := Null;
900
901 RESOURCE_BUSY EXCEPTION;
902 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
903
904 BEGIN
905 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
906 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
907
908 x_return_status := FND_API.G_RET_STS_SUCCESS;
909
910 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
911 -- needs to be done. Set Merged To Id is same as Merged From Id and return
912
913 if p_from_fk_id = p_to_fk_id then
914 p_to_id := p_from_id;
915 return;
916 end if;
917
918
919 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
920 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
921
922
923 exception
924 when others then
925 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
926 fnd_message.set_token('ERROR',SQLERRM);
927 fnd_msg_pub.add;
928 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
929 raise;
930
931 END MERGE_PG_ENRL_REQUESTS;
932
933
934 PROCEDURE MERGE_PG_MEMBERSHIPS (
935 p_entity_name IN VARCHAR2,
936 p_from_id IN NUMBER,
937 p_to_id OUT NOCOPY NUMBER,
938 p_from_fk_id IN NUMBER,
939 p_to_fk_id IN NUMBER,
940 p_parent_entity_name IN VARCHAR2,
941 p_batch_id IN NUMBER,
942 p_batch_party_id IN NUMBER,
943 x_return_status OUT NOCOPY VARCHAR2)
944 IS
945
946 CURSOR memb_type_cur( p_ptr_id NUMBER) IS
947 SELECT attr_value
948 FROM pv_enty_attr_values
949 WHERE entity='PARTNER'
950 AND entity_id=p_ptr_id
951 AND attribute_id=6
952 AND latest_flag='Y';
953
954 l_merge_reason_code VARCHAR2(30);
955 l_current_memb_type VARCHAR2(30);
956 l_api_name VARCHAR2(30) := 'MERGE_PG_MEMBERSHIPS';
957 l_count NUMBER(10) := 0;
958 l_ppf_id NUMBER := Null;
959 l_msg_count NUMBER(10);
960 l_msg_data VARCHAR2(2000);
961
962 RESOURCE_BUSY EXCEPTION;
963 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
964
965 BEGIN
966 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
967 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
968
969 x_return_status := FND_API.G_RET_STS_SUCCESS;
970
971
972 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
973 -- needs to be done. Set Merged To Id is same as Merged From Id and return
974
975 IF p_from_fk_id = p_to_fk_id THEN
976 p_to_id := p_from_id;
977 return;
978 END IF;
979
980
981 IF p_from_fk_id <> p_to_fk_id THEN
982
983 BEGIN
984 SELECT DISTINCT partner_id INTO l_ppf_id
985 FROM PV_PG_MEMBERSHIPS
986 WHERE partner_id = p_to_fk_id;
987 EXCEPTION
988 WHEN NO_DATA_FOUND THEN
989 l_ppf_id := Null;
990 END;
991
992
993 /*
994 update PV_PG_MEMBERSHIPS
995 set partner_id = p_to_fk_id,
996 last_update_date = SYSDATE,
997 last_updated_by = G_USER_ID,
998 last_update_login = G_LOGIN_ID
999 where partner_id = p_from_fk_id;
1000 */
1001
1002 /*
1003
1004 PV_PG_MEMBERSHIPS_PVT.Terminate_ptr_memberships does the following
1005 1. Terminate all Active/future Program Memberships of partner and cancel incomplete and awaiting approvals enrollment requests
1006 2. also if partner is global,t will terminate subsidiary memberships and cancel the subsidiary incompelete and awaiting approvals enrollment requests
1007 */
1008
1009 OPEN memb_type_cur( p_from_fk_id );
1010 FETCH memb_type_cur INTO l_current_memb_type;
1011 CLOSE memb_type_cur;
1012
1013 PV_PG_MEMBERSHIPS_PVT.Terminate_ptr_memberships
1014 (
1015 p_api_version_number => 1.0
1016 ,p_init_msg_list => FND_API.G_FALSE
1017 ,p_commit => FND_API.G_FALSE
1018 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1019 ,p_partner_id => p_from_fk_id
1020 ,p_memb_type => l_current_memb_type
1021 ,p_status_reason_code => 'PARTY_MERGE' -- seed PARTY_MERGE it validates against PV_MEMB_STATUS_REASON_CODE
1022 ,p_comments => null
1023 ,x_return_status => x_return_status
1024 ,x_msg_count => l_msg_count
1025 ,x_msg_data => l_msg_data
1026 );
1027
1028 Debug(G_PKG_NAME || '.' || l_api_name || 'after Terminate_ptr_memberships API call : ' ||
1029 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1030
1031 /*
1032 Pv_ptr_member_type_pvt.Register_term_ptr_memb_type does the following
1033 1. If Partner is Global, end date the global subsidiary relationship with all its subsidiaries
1034 2. If Partner is Subsdiary, end date the subsidiary-gloabl relationship with all its global
1035 */
1036
1037 IF l_current_memb_type IN ( 'GLOBAL', 'SUBSIDIARY' ) THEN
1038 Pv_ptr_member_type_pvt.Register_term_ptr_memb_type
1039 (
1040 p_api_version_number => 1.0
1041 ,p_init_msg_list => FND_API.G_FALSE
1042 ,p_commit => FND_API.G_FALSE
1043 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1044 ,p_partner_id => p_from_fk_id
1045 ,p_current_memb_type => l_current_memb_type
1046 ,p_new_memb_type => null
1047 ,p_global_ptr_id => null
1048 ,x_return_status => x_return_status
1049 ,x_msg_count => l_msg_count
1050 ,x_msg_data => l_msg_data
1051 );
1052 END IF;
1053
1054 IF l_ppf_id is not Null THEN
1055 p_to_id := l_ppf_id;
1056 END IF;
1057
1058 END IF;
1059
1060 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
1061 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1062
1063 EXCEPTION
1064 WHEN OTHERS THEN
1065 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
1066 fnd_message.set_token('ERROR',SQLERRM);
1067 fnd_msg_pub.add;
1068 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1069 RAISE;
1070
1071 END MERGE_PG_MEMBERSHIPS;
1072
1073
1074
1075
1076 -- *******************************************************
1077 -- Start of Comments
1078 -- *******************************************************
1079 -- API Name: MERGE_PARTNER_ACCESSES
1080 -- Purpose : Merges partner_id in PV_PARTNER_ACCESSES table
1081 -- Type : Private
1082 -- Pre-Req : None.
1083 -- Parameters:
1084 -- IN - All IN parameters are REQUIRED.
1085 -- p_entity_name VARCHAR2 - Name of the entity that is being merged
1086 -- p_from_id NUMBER - Id of the record that is being merged
1087 -- p_from_fk_id NUMBER - Id of the Old Parent
1088 -- p_to_fk_id NUMBER - Id of the New Parent
1089 -- p_parent_entity_name VARCHAR2 - Parent entity name
1090 -- p_batch_id NUMBER - Id of the Batch
1091 -- p_batch_party_id NUMBER - Id of the batch and party record
1092 -- OUT:
1093 -- x_to_id NUMBER - Id of the record under the new parent
1094 -- that its merged to
1095 -- x_return_status VARCHAR2 - Return the status of the procedure
1096 --
1097 -- Version : Current version 1.0
1098 --
1099 -- End of Comments
1100 --
1101
1102 PROCEDURE MERGE_PARTNER_ACCESSES
1103 ( p_entity_name IN VARCHAR2
1104 ,p_from_id IN NUMBER
1105 ,p_to_id IN OUT NOCOPY NUMBER
1106 ,p_from_fk_id IN NUMBER
1107 ,p_to_fk_id IN NUMBER
1108 ,p_parent_entity_name IN VARCHAR2
1109 ,p_batch_id IN NUMBER
1110 ,p_batch_party_id IN NUMBER
1111 ,x_return_status IN OUT NOCOPY VARCHAR2
1112 )
1113 IS
1114
1115 CURSOR c_get_pm_access_id (c_from_fk_id NUMBER, c_to_fk_id NUMBER) IS
1116 select partner_access_id from pv_partner_accesses a
1117 where partner_id= c_from_fk_id
1118 and exists (select null from pv_partner_accesses b
1119 where partner_id = c_to_fk_id
1120 and b.resource_id = a.resource_id );
1121
1122 -- Cursor l_chng_partner_exist_csr.
1123 CURSOR l_chng_partner_exist_csr(cv_partner_id NUMBER) IS
1124 SELECT processed_flag, object_version_number
1125 FROM pv_tap_batch_chg_partners
1126 WHERE partner_id = cv_partner_id;
1127
1128 l_merge_reason_code VARCHAR2(30);
1129 l_api_name VARCHAR2(30) := 'MERGE_PARTNER_ACCESSES';
1130 l_count NUMBER(10) := 0;
1131 l_ppf_id NUMBER := Null;
1132 l_processed_flag VARCHAR2(1);
1133 l_return_status VARCHAR2(1);
1134 l_msg_count NUMBER;
1135 l_msg_data VARCHAR(2000);
1136 l_object_version NUMBER;
1137 l_partner_id NUMBER;
1138
1139 l_batch_chg_prtnrs_rec PV_BATCH_CHG_PRTNR_PVT.Batch_Chg_Prtnrs_Rec_Type:= PV_BATCH_CHG_PRTNR_PVT.g_miss_Batch_Chg_Prtnrs_rec;
1140
1141
1142 RESOURCE_BUSY EXCEPTION;
1143 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
1144
1145 BEGIN
1146 FND_FILE.PUT_LINE(FND_FILE.LOG,'AS_TAP_MERGE_PKG.ACCESS_MERGE start : '
1147 ||to_char(sysdate,'DD-MON-YYYY HH24:MI'));
1148 FND_FILE.PUT_LINE(FND_FILE.LOG,'Entity: '||p_parent_entity_name);
1149 FND_FILE.PUT_LINE(FND_FILE.LOG,'from_fk: '||p_from_fk_id);
1150 FND_FILE.PUT_LINE(FND_FILE.LOG,'to_fk: '||p_to_fk_id);
1151
1152 x_return_status := FND_API.G_RET_STS_SUCCESS;
1153
1154 select merge_reason_code into l_merge_reason_code
1155 from HZ_MERGE_BATCH
1156 where batch_id = p_batch_id;
1157
1158 IF l_merge_reason_code = 'DUPLICATE' THEN
1159 -- *********************************************************************
1160 -- if reason code is duplicate then allow the party merge to happen
1161 -- without any validations.
1162 -- *********************************************************************
1163 null;
1164 ELSE
1165 -- *********************************************************************
1166 -- if there are any validations to be done, include it in this section
1167 -- *********************************************************************
1168 null;
1169 END IF;
1170
1171 -- ************************************************************************
1172 -- If the parent has NOT changed (ie. Parent getting transferred) then
1173 -- nothing needs to be done. Set Merged To Id is same as Merged From Id
1174 -- and return
1175 -- ************************************************************************
1176 if p_from_fk_id = p_to_fk_id then
1177 p_to_id := p_from_id;
1178 return;
1179 end if;
1180
1181 -- ************************************************************************
1182 -- If the parent has changed(ie. Parent is getting merged) then transfer
1183 -- the dependent record to the new parent. Before transferring check if a
1184 -- similar dependent record exists on the new parent. If a duplicate exists
1185 -- then do not transfer and return the id of the duplicate record as the
1186 -- Merged To Id
1187 -- ************************************************************************
1188 IF p_from_fk_id <> p_to_fk_id THEN
1189 BEGIN
1190 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Processing PV_PARTNER_ACCESSES Table');
1191 IF p_parent_entity_name = 'HZ_PARTIES' THEN
1192 FOR I in c_get_pm_access_id (p_from_fk_id, p_to_fk_id) LOOP
1193 FND_FILE.PUT_LINE(FND_FILE.LOG,
1194 'Deleting PARTY partner_access_id: '||I.partner_access_id);
1195 DELETE FROM pv_tap_access_terrs
1196 WHERE partner_access_id = I.partner_access_id;
1197
1198 DELETE FROM pv_partner_accesses
1199 WHERE partner_access_id = I.partner_access_id;
1200 END LOOP;
1201
1202 -- merge party
1203 UPDATE PV_PARTNER_ACCESSES
1204 set object_version_number = nvl(object_version_number,0) + 1,
1205 partner_id = p_to_fk_id,
1206 last_update_date = SYSDATE,
1207 last_updated_by = G_USER_ID,
1208 last_update_login = G_LOGIN_ID,
1209 program_application_id=hz_utility_pub.program_application_id,
1210 program_id = hz_utility_pub.program_id,
1211 program_update_date = SYSDATE
1212 where partner_id = p_from_fk_id;
1213
1214 OPEN l_chng_partner_exist_csr(p_to_fk_id);
1215 FETCH l_chng_partner_exist_csr INTO l_processed_flag, l_object_version;
1216 l_batch_chg_prtnrs_rec.partner_id := p_to_fk_id;
1217 l_batch_chg_prtnrs_rec.processed_flag := 'P';
1218 IF l_chng_partner_exist_csr%NOTFOUND THEN
1219
1220 CLOSE l_chng_partner_exist_csr;
1221
1222 -- Call Channel_Team_Organization_Update to re-assign the Channel team
1223 PV_BATCH_CHG_PRTNR_PVT.Create_Batch_Chg_Partners(
1224 p_api_version_number => 1.0 ,
1225 p_init_msg_list => FND_API.G_FALSE,
1226 p_commit => FND_API.G_FALSE,
1227 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1228 x_return_status => l_return_status,
1229 x_msg_count => l_msg_count,
1230 x_msg_data => l_msg_data,
1231 p_batch_chg_prtnrs_rec => l_batch_chg_prtnrs_rec,
1232 x_partner_id => l_partner_id );
1233
1234 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1235 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1236 RAISE FND_API.G_EXC_ERROR;
1237 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1239 END IF;
1240 END IF;
1241 ELSE
1242 CLOSE l_chng_partner_exist_csr;
1243 IF (l_processed_flag <> 'P') THEN
1244 l_batch_chg_prtnrs_rec.object_version_number := l_object_version;
1245 PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners(
1246 p_api_version_number => 1.0
1247 ,p_init_msg_list => FND_API.G_FALSE
1248 ,p_commit => FND_API.G_FALSE
1249 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1250 ,x_return_status => l_return_status
1251 ,x_msg_count => l_msg_count
1252 ,x_msg_data => l_msg_data
1253 ,p_batch_chg_prtnrs_rec => l_batch_chg_prtnrs_rec);
1254
1255 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1256 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1257 RAISE FND_API.G_EXC_ERROR;
1258 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1259 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
1260 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners');
1261 FND_MSG_PUB.Add;
1262 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1263 END IF;
1264 END IF;
1265 END IF; --l_processed_flag <> 'P'
1266 END IF; -- l_chng_partner_exist_csr%NOTFOUND
1267
1268 END IF; -- p_parent_entity_name = 'HZ_PARTIES'
1269 EXCEPTION
1270 WHEN OTHERS THEN
1271 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
1272 fnd_message.set_token('ERROR',SQLERRM);
1273 fnd_msg_pub.add;
1274 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1275 raise;
1276 END;
1277 END IF; -- p_from_fk_id <> p_to_fk_id
1278
1279 FND_FILE.PUT_LINE(FND_FILE.LOG, 'PVX_PARTY_MERGE_PKG.MERGE_PARTNER_ACCESSES end : '||to_char(sysdate,'DD-MON-YYYY HH24:MI'));
1280
1281 end MERGE_PARTNER_ACCESSES;
1282
1283
1284 PROCEDURE MERGE_PV_GE_PTNR_RESPS (
1285 p_entity_name IN VARCHAR2,
1286 p_from_id IN NUMBER,
1287 p_to_id OUT NOCOPY NUMBER,
1288 p_from_fk_id IN NUMBER,
1289 p_to_fk_id IN NUMBER,
1290 p_parent_entity_name IN VARCHAR2,
1291 p_batch_id IN NUMBER,
1292 p_batch_party_id IN NUMBER,
1293 x_return_status OUT NOCOPY VARCHAR2)
1294 IS
1295 l_merge_reason_code VARCHAR2(30);
1296 l_api_name VARCHAR2(30) := 'MERGE_PV_GE_PTNR_RESPS';
1297 l_msg_count NUMBER;
1298 l_msg_data VARCHAR(2000);
1299
1300 RESOURCE_BUSY EXCEPTION;
1301 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
1302
1303 BEGIN
1304 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
1305 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1306
1307 x_return_status := FND_API.G_RET_STS_SUCCESS;
1308
1309 if p_from_fk_id = p_to_fk_id then
1310 p_to_id := p_from_id;
1311 return;
1312 end if;
1313
1314 Pv_User_Resp_Pvt.manage_merged_party_memb_resp(
1315 p_api_version_number => 1.0
1316 ,p_init_msg_list => FND_API.G_FALSE
1317 ,p_commit => FND_API.G_FALSE
1318 ,x_return_status => x_return_status
1319 ,x_msg_count => l_msg_count
1320 ,x_msg_data => l_msg_data
1321 ,p_from_partner_id => p_from_fk_id
1322 ,p_to_partner_id => p_to_fk_id
1323 );
1324 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1325 RAISE FND_API.G_EXC_ERROR;
1326 END IF;
1327
1328 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
1329 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1330
1331 -- --------------------------------------------------------
1332 -- Exception Handling
1333 -- --------------------------------------------------------
1334 exception
1335 WHEN FND_API.G_EXC_ERROR THEN
1336 x_return_status := FND_API.G_RET_STS_ERROR;
1337 FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
1338 p_count => l_msg_count,
1339 p_data => l_msg_data);
1340
1341 when others then
1342 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
1343 fnd_message.set_token('ERROR',SQLERRM);
1344 fnd_msg_pub.add;
1345 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1346 raise;
1347 END MERGE_PV_GE_PTNR_RESPS;
1348
1349 PROCEDURE MERGE_CONTRACT_BINDING_CONTACT (
1350 p_entity_name IN VARCHAR2,
1351 p_from_id IN NUMBER,
1352 p_to_id OUT NOCOPY NUMBER,
1353 p_from_fk_id IN NUMBER,
1354 p_to_fk_id IN NUMBER,
1355 p_parent_entity_name IN VARCHAR2,
1356 p_batch_id IN NUMBER,
1357 p_batch_party_id IN NUMBER,
1358 x_return_status OUT NOCOPY VARCHAR2
1359 )
1360 IS
1361 cursor c1 is
1362 select 1
1363 from PV_PG_ENRL_REQUESTS
1364 where partner_id = p_from_fk_id
1365 for update nowait;
1366
1367
1368 l_merge_reason_code VARCHAR2(30);
1369 l_api_name VARCHAR2(30) := 'MERGE_CONTRACT_BINDING_CONTACT';
1370 l_count NUMBER(10) := 0;
1371 l_ppf_id NUMBER := Null;
1372
1373 RESOURCE_BUSY EXCEPTION;
1374 PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -0054);
1375
1376 BEGIN
1377 Debug(G_PKG_NAME || '.' || l_api_name || ' starts: ' ||
1378 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1379
1380 x_return_status := FND_API.G_RET_STS_SUCCESS;
1381
1382 select merge_reason_code
1383 into l_merge_reason_code
1384 from hz_merge_batch
1385 where batch_id = p_batch_id;
1386
1387 if l_merge_reason_code = 'DUPLICATE' then
1388 -- if reason code is duplicate then allow the party merge to happen without
1389 -- any validations.
1390 null;
1391 else
1392 -- if there are any validations to be done, include it in this section
1393 null;
1394 end if;
1395
1396 -- If the parent has NOT changed (ie. Parent getting transferred) then nothing
1397 -- needs to be done. Set Merged To Id is same as Merged From Id and return
1398
1399 if p_from_fk_id = p_to_fk_id then
1400 p_to_id := p_from_id;
1401 return;
1402 end if;
1403
1404 -- If the parent has changed(ie. Parent is getting merged) then transfer the
1405 -- dependent record to the new parent. Before transferring check if a similar
1406 -- dependent record exists on the new parent. If a duplicate exists then do
1407 -- not transfer and return the id of the duplicate record as the Merged To Id
1408
1409
1410 if p_from_fk_id <> p_to_fk_id then
1411
1412
1413 BEGIN
1414 SELECT DISTINCT partner_id INTO l_ppf_id
1415 FROM PV_PG_ENRL_REQUESTS
1416 WHERE partner_id = p_to_fk_id;
1417 EXCEPTION
1418 WHEN NO_DATA_FOUND THEN
1419 l_ppf_id := Null;
1420 END;
1421
1422
1423
1424 update PV_PG_ENRL_REQUESTS
1425 set contract_binding_contact_id = p_to_fk_id,
1426 last_update_date = SYSDATE,
1427 last_updated_by = G_USER_ID,
1428 last_update_login = G_LOGIN_ID
1429 where contract_binding_contact_id = p_from_fk_id;
1430
1431 if l_ppf_id is not Null then
1432 p_to_id := l_ppf_id;
1433 end if;
1434
1435 end if;
1436
1437 Debug(G_PKG_NAME || '.' || l_api_name || ' ends: ' ||
1438 TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
1439
1440 exception
1441 when others then
1442 fnd_message.set_name('AR','HZ_API_OTHERS_EXCEP');
1443 fnd_message.set_token('ERROR',SQLERRM);
1444 fnd_msg_pub.add;
1445 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1446 raise;
1447
1448 END MERGE_CONTRACT_BINDING_CONTACT;
1449
1450 --=============================================================================+
1451 --| Private Procedure |
1452 --| |
1453 --| Debug |
1454 --| |
1455 --| Parameters |
1456 --| IN |
1457 --| OUT |
1458 --| |
1459 --| |
1460 --| NOTES: |
1461 --| |
1462 --| HISTORY |
1463 --| |
1464 --==============================================================================
1465 PROCEDURE Debug(
1466 p_msg_string IN VARCHAR2
1467 )
1468 IS
1469 l_count NUMBER;
1470 l_msg VARCHAR2(2000);
1471
1472 BEGIN
1473 FND_MESSAGE.Set_Name('PV', 'PV_DEBUG_MESSAGE');
1474 FND_MESSAGE.Set_Token('TEXT', p_msg_string);
1475 FND_MSG_PUB.Add;
1476
1477 l_count := FND_MSG_PUB.count_msg;
1478
1479 FOR l_cnt IN 1 .. l_count LOOP
1480 l_msg := FND_MSG_PUB.get(l_cnt, FND_API.g_false);
1481 FND_FILE.PUT_LINE(FND_FILE.LOG, '(' || l_cnt || ') ' || l_msg);
1482 END LOOP;
1483 END Debug;
1484
1485
1486 --=============================================================================+
1487 --| Private Procedure |
1488 --| |
1489 --| Set_Message |
1490 --| |
1491 --| Parameters |
1492 --| IN |
1493 --| OUT |
1494 --| |
1495 --| |
1496 --| NOTES: |
1497 --| |
1498 --| HISTORY |
1499 --| |
1500 --==============================================================================
1501 PROCEDURE Set_Message(
1502 p_msg_level IN NUMBER,
1503 p_msg_name IN VARCHAR2,
1504 p_token1 IN VARCHAR2,
1505 p_token1_value IN VARCHAR2,
1506 p_token2 IN VARCHAR2 := NULL ,
1507 p_token2_value IN VARCHAR2 := NULL,
1508 p_token3 IN VARCHAR2 := NULL,
1509 p_token3_value IN VARCHAR2 := NULL
1510 )
1511 IS
1512 l_count NUMBER;
1513 l_msg VARCHAR2(2000);
1514
1515 BEGIN
1516 FND_MESSAGE.Set_Name('PV', p_msg_name);
1517 FND_MESSAGE.Set_Token(p_token1, p_token1_value);
1518
1519 IF (p_token2 IS NOT NULL) THEN
1520 FND_MESSAGE.Set_Token(p_token2, p_token2_value);
1521 END IF;
1522
1523 IF (p_token3 IS NOT NULL) THEN
1524 FND_MESSAGE.Set_Token(p_token3, p_token3_value);
1525 END IF;
1526
1527 FND_MSG_PUB.Add;
1528
1529 l_count := FND_MSG_PUB.count_msg;
1530
1531 FOR l_cnt IN 1 .. l_count LOOP
1532 l_msg := FND_MSG_PUB.get(l_cnt, FND_API.g_false);
1533 FND_FILE.PUT_LINE(FND_FILE.LOG, '(' || l_cnt || ') ' || l_msg);
1534 END LOOP;
1535 END Set_Message;
1536 -- ==============================End of Set_Message==============================
1537
1538 END PVX_PARTY_MERGE_PKG ;