DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MERGE_PKG

Source


1 PACKAGE BODY HZ_MERGE_PKG AS
2 /*$Header: ARHMPKGB.pls 120.61.12010000.2 2008/10/27 06:45:18 vsegu ship $ */
3 --4307667
4 PROCEDURE do_party_usage_merge(
5         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6         x_to_id         IN OUT NOCOPY  NUMBER,
7         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
8         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
9         x_return_status IN OUT NOCOPY          VARCHAR2
10 
11 );
12 
13 PROCEDURE do_party_merge(
14         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
15         x_to_id         IN OUT NOCOPY  NUMBER,
16         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
17         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
18         p_batch_party_id IN	NUMBER,
19         x_return_status IN OUT NOCOPY          VARCHAR2
20 );
21 
22 PROCEDURE do_party_site_merge(
23         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
24         x_to_id    	IN OUT NOCOPY  NUMBER,
25         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
26         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
27         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
28         x_return_status IN OUT NOCOPY  	VARCHAR2
29 );
30 
31 PROCEDURE do_cust_account_transfer(
32         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
33         x_to_id         IN OUT NOCOPY  NUMBER,
34         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
35         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
36 	x_return_status IN OUT NOCOPY          VARCHAR2
37 );
38 
39 PROCEDURE do_cust_account_role_transfer(
40         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
41         x_to_id         IN OUT NOCOPY  NUMBER,
42         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
43         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
44 	x_return_status IN OUT NOCOPY          VARCHAR2
45 );
46 
47 PROCEDURE do_cust_account_site_transfer(
48         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
49         x_to_id         IN OUT NOCOPY  NUMBER,
50         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
51         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
52 	x_return_status IN OUT NOCOPY          VARCHAR2
53 );
54 
55 PROCEDURE do_fin_profile_transfer(
56         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
57         x_to_id         IN OUT NOCOPY  NUMBER,
58         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
59         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
60 	x_return_status IN OUT NOCOPY          VARCHAR2
61 );
62 
63 PROCEDURE do_contact_point_transfer(
64         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
65         x_to_id         IN OUT NOCOPY  NUMBER,
66         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
67         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
68 	x_return_status IN OUT NOCOPY          VARCHAR2
69 );
70 
71 PROCEDURE do_contact_point_transfer2(
72         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
73         x_to_id         IN OUT NOCOPY  NUMBER,
74         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
75         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
76 	x_return_status IN OUT NOCOPY          VARCHAR2
77 );
78 
79 PROCEDURE do_contact_pref_transfer(
80         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
81         x_to_id         IN OUT NOCOPY  NUMBER,
82         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
83         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
84         x_return_status IN OUT NOCOPY          VARCHAR2
85 );
86 
87 PROCEDURE do_references_transfer(
88         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
89         x_to_id         IN OUT NOCOPY  NUMBER,
90         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
91         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
92 	x_return_status IN OUT NOCOPY          VARCHAR2
93 );
94 
95 PROCEDURE do_certification_transfer(
96         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
97         x_to_id         IN OUT NOCOPY  NUMBER,
98         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
99         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
100 	x_return_status IN OUT NOCOPY          VARCHAR2
101 );
102 
103 PROCEDURE do_credit_ratings_transfer(
104         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
105         x_to_id         IN OUT NOCOPY  NUMBER,
106         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
107         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
108         x_return_status IN OUT NOCOPY          VARCHAR2
109 );
110 
111 PROCEDURE do_security_issued_transfer(
112         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
113         x_to_id         IN OUT NOCOPY  NUMBER,
114         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
115         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
116 	x_return_status IN OUT NOCOPY          VARCHAR2
117 );
118 
119 PROCEDURE do_financial_reports_transfer(
120         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
121         x_to_id         IN OUT NOCOPY  NUMBER,
122         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
123         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
124 	x_return_status IN OUT NOCOPY          VARCHAR2
125 );
126 
127 PROCEDURE do_org_indicators_transfer(
128         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
129         x_to_id         IN OUT NOCOPY  NUMBER,
130         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
131         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
132 	x_return_status IN OUT NOCOPY          VARCHAR2
133 );
134 
135 PROCEDURE do_ind_reference_transfer(
136         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
137         x_to_id         IN OUT NOCOPY  NUMBER,
138         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
139         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
140 	x_return_status IN OUT NOCOPY          VARCHAR2
141 );
142 
143 PROCEDURE do_per_interest_transfer(
144         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
145         x_to_id         IN OUT NOCOPY  NUMBER,
146         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
147         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
148 	x_return_status IN OUT NOCOPY          VARCHAR2
149 );
150 
151 PROCEDURE do_citizenship_transfer(
152         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
153         x_to_id         IN OUT NOCOPY  NUMBER,
154         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
155         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
156 	x_return_status IN OUT NOCOPY          VARCHAR2
157 );
158 
159 PROCEDURE do_education_transfer(
160         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
161         x_to_id         IN OUT NOCOPY  NUMBER,
162         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
163         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
164 	x_return_status IN OUT NOCOPY          VARCHAR2
165 );
166 
167 PROCEDURE do_education_school_transfer(
168         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
169         x_to_id         IN OUT NOCOPY  NUMBER,
170         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
171         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
172 	x_return_status IN OUT NOCOPY          VARCHAR2
173 );
174 
175 PROCEDURE do_emp_history_transfer(
176         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
177         x_to_id         IN OUT NOCOPY  NUMBER,
178         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
179         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
180 	x_return_status IN OUT NOCOPY          VARCHAR2
181 );
182 
183 PROCEDURE do_employed_transfer(
184         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
185         x_to_id         IN OUT NOCOPY  NUMBER,
186         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
187         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
188 	x_return_status IN OUT NOCOPY          VARCHAR2
189 );
190 
191 PROCEDURE do_work_class_transfer(
192         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
193         x_to_id         IN OUT NOCOPY  NUMBER,
194         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
195         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
196 	x_return_status IN OUT NOCOPY          VARCHAR2
197 );
198 
199 PROCEDURE do_financial_number_transfer(
200         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
201         x_to_id         IN OUT NOCOPY  NUMBER,
202         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
203         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
204 	x_return_status IN OUT NOCOPY          VARCHAR2
205 );
206 
207 PROCEDURE do_org_contact_role_transfer(
208         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
209         x_to_id         IN OUT NOCOPY  NUMBER,
210         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
211         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
212 	x_return_status IN OUT NOCOPY          VARCHAR2
213 );
214 
215 PROCEDURE do_code_assignment_transfer2(
216         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
217         x_to_id         IN OUT NOCOPY  NUMBER,
218         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
219         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
220 	x_return_status IN OUT NOCOPY          VARCHAR2
221 );
222 
223 PROCEDURE do_code_assignment_transfer(
224         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
225         x_to_id         IN OUT NOCOPY  NUMBER,
226         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
227         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
228 	x_return_status IN OUT NOCOPY          VARCHAR2
229 );
230 
231 PROCEDURE do_per_languages_transfer(
232         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
233         x_to_id         IN OUT NOCOPY  NUMBER,
234         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
235         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
236 	x_return_status IN OUT NOCOPY          VARCHAR2
237 );
238 
239 PROCEDURE do_party_site_use_transfer(
240         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
241         x_to_id         IN OUT NOCOPY  NUMBER,
242         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
243         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
244 	x_return_status IN OUT NOCOPY          VARCHAR2
245 );
246 
247 PROCEDURE do_org_contact_transfer(
248         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
249         x_to_id         IN OUT NOCOPY  NUMBER,
250         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
251         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
252 	x_return_status IN OUT NOCOPY          VARCHAR2
253 );
254 
255 PROCEDURE do_org_contact_transfer2(
256         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
257         x_to_id         IN OUT NOCOPY  NUMBER,
258         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
259         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
260 	x_return_status IN OUT NOCOPY          VARCHAR2
261 );
262 
263 PROCEDURE do_party_reln_subj_merge(
264         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
265         x_to_id         IN OUT NOCOPY  NUMBER,
266         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
267         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
268         x_return_status IN OUT NOCOPY          VARCHAR2
269 
270 );
271 
272 PROCEDURE do_party_reln_obj_merge(
273         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
274         x_to_id         IN OUT NOCOPY  NUMBER,
275         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
276         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
277         x_return_status IN OUT NOCOPY          VARCHAR2
278 
279 );
280 
281 PROCEDURE do_party_relationship_merge(
282         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
283         x_to_id         IN OUT NOCOPY  NUMBER,
284         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
285         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
286         x_return_status IN OUT NOCOPY          VARCHAR2
287 );
288 PROCEDURE do_hierarchy_nodes_merge(
289         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
290         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
291         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
292         x_return_status IN OUT NOCOPY          VARCHAR2,
293 	p_action	IN	VARCHAR2,
294 	p_sub_obj_merge IN	VARCHAR2:=FND_API.G_MISS_CHAR
295 );
296 
297 PROCEDURE do_org_profile_merge(
298         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
299         x_to_id         IN OUT NOCOPY  NUMBER,
300         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
301         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
302         x_return_status IN OUT NOCOPY          VARCHAR2
303 );
304 
305 PROCEDURE do_per_profile_merge(
306         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
307         x_to_id         IN OUT NOCOPY  NUMBER,
308         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
309         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
310         x_return_status IN OUT NOCOPY          VARCHAR2
311 );
312 
313 PROCEDURE do_displayed_duns_merge(
314         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
315         x_to_id         IN OUT NOCOPY  NUMBER,
316         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
317         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
318         x_return_status IN OUT NOCOPY          VARCHAR2
319 );
320 /*
321 PROCEDURE check_params(
322         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
323         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
324         p_to_id         IN      NUMBER:=FND_API.G_MISS_NUM,
325         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
326         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
327         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
328         p_proc_name       IN    VARCHAR2,
329         p_exp_ent_name  IN      VARCHAR2:=FND_API.G_MISS_CHAR,
330         p_exp_par_ent_name IN   VARCHAR2:=FND_API.G_MISS_CHAR,
331         p_pk_column     IN      VARCHAR2:=FND_API.G_MISS_CHAR,
332         p_par_pk_column IN      VARCHAR2:=FND_API.G_MISS_CHAR,
333 	x_return_status IN OUT NOCOPY          VARCHAR2
334 );
335 */
336 
337 PROCEDURE insert_request_log(
338         p_source_party_id       IN      NUMBER,
339         p_destination_party_id  IN      NUMBER
340 );
341 
342 ----BugNo:1695595.Added private procedure to update denormalized columns in hz_parties.
343 
344 PROCEDURE do_denormalize_contact_point (
345     p_party_id                         IN     NUMBER,
346     p_contact_point_type               IN     VARCHAR2,
347     p_url                              IN     VARCHAR2,
348     p_email_address		       IN     VARCHAR2,
349     p_phone_contact_pt_id	       IN     NUMBER,
350     p_phone_purpose		       IN     VARCHAR2,
351     p_phone_line_type		       IN     VARCHAR2,
352     p_phone_country_code	       IN     VARCHAR2,
353     p_phone_area_code		       IN     VARCHAR2,
354     p_phone_number		       IN     VARCHAR2,
355     p_phone_extension		       IN     VARCHAR2
356 );
357 
358 
359 
360 
361 /*===========================================================================+
362  | PROCEDURE                                                                 |
363  |              party_merge                                                  |
364  |                                                                           |
365  | DESCRIPTION                                                               |
366  |   Merges the parties with party_ids p_from_id to the party x_to_id        |
367  |                                                                           |
368  | SCOPE - PRIVATE                                                           |
369  |                                                                           |
370  | EXTERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
371  |                                                                           |
372  | ARGUMENTS  : IN:                                                          |
373  |		  p_entity_name                                              |
374  |		  p_from_id                                                  |
375  |		  p_from_fk_id                                               |
376  |		  p_to_fk_id                                                 |
377  |		  p_merge_operation                                          |
378  |		  p_par_entity_name                                          |
379  |              OUT:                                                         |
380  |		  x_return_status                                            |
381  |          IN/ OUT:                                                         |
382  |		  x_to_id                                                    |
383  | RETURNS    : NONE                                                         |
384  |                                                                           |
385  | NOTES                                                                     |
386  |                                                                           |
387  | MODIFICATION HISTORY                                                      |
388  |    Srinivasa Rangan   21-Aug-00  Created                                  |
389  |                                                                           |
390  +===========================================================================*/
391 PROCEDURE party_merge(
392         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
393         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
394         x_to_id         IN OUT NOCOPY	NUMBER,
395         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
396         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
397         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
398         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
399         p_batch_party_id IN	NUMBER:=FND_API.G_MISS_NUM,
400 	x_return_status OUT NOCOPY          VARCHAR2
401 ) IS
402 
403 l_to_id 	NUMBER;
404 
405 BEGIN
406    IF (x_to_id IS NULL) THEN
407      l_to_id := FND_API.G_MISS_NUM;
408    ELSE
409      l_to_id := x_to_id;
410    END IF;
411    x_return_status := FND_API.G_RET_STS_SUCCESS;
412 
413    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
414                 p_to_fk_id, p_par_entity_name,
415                 'HZ_MERGE_PKG.party_merge',
416                 'HZ_PARTIES',NULL,
417                 'PARTY_ID',NULL,x_return_status);
418 
419    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
420       do_party_merge(p_from_id, l_to_id,p_from_fk_id, p_to_fk_id,
421            p_batch_party_id, x_return_status);
422    END IF;
423 
424    x_to_id := l_to_id;
425 EXCEPTION
426   WHEN OTHERS THEN
427     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
428     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
429     FND_MSG_PUB.ADD;
430     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
431 END party_merge;
432 
433 PROCEDURE org_profile_merge(
434         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
435         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
436         x_to_id         IN OUT NOCOPY	NUMBER,
437         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
438         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
439         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
440         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
441         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
442 	x_return_status OUT NOCOPY          VARCHAR2
443 ) IS
444 
445 l_to_id 	NUMBER;
446 
447 BEGIN
448    IF (x_to_id IS NULL) THEN
449      l_to_id := FND_API.G_MISS_NUM;
450    ELSE
451      l_to_id := x_to_id;
452    END IF;
453    x_return_status := FND_API.G_RET_STS_SUCCESS;
454 
455    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
456                 p_to_fk_id, p_par_entity_name,
457                 'HZ_MERGE_PKG.org_profile_merge',
458                 'HZ_ORGANIZATION_PROFILES','HZ_PARTIES',
459                 'ORGANIZATION_PROFILE_ID', 'PARTY_ID',x_return_status);
460 
461    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
462       do_org_profile_merge(p_from_id, l_to_id,p_from_fk_id, p_to_fk_id,
463                            x_return_status);
464    END IF;
465 
466    x_to_id := l_to_id;
467 EXCEPTION
468   WHEN OTHERS THEN
469     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
470     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
471     FND_MSG_PUB.ADD;
472     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
473 END org_profile_merge;
474 
475 PROCEDURE party_relationship_merge(
476         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
477         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
478         x_to_id         IN OUT NOCOPY	NUMBER,
479         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
480         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
481         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
482         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
483         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
484 	x_return_status OUT NOCOPY          VARCHAR2
485 ) IS
486 
487 l_to_id 	NUMBER;
488 
489 BEGIN
490    IF (x_to_id IS NULL) THEN
491      l_to_id := FND_API.G_MISS_NUM;
492    ELSE
493      l_to_id := x_to_id;
494    END IF;
495    x_return_status := FND_API.G_RET_STS_SUCCESS;
496 
497    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
498                 p_to_fk_id, p_par_entity_name,
499                 'HZ_MERGE_PKG.party_relationship_merge',
500                 'HZ_PARTY_RELATIONSHIPS','HZ_PARTIES',
501                 'PARTY_RELATIONSHIP_ID', 'PARTY_ID',x_return_status);
502 
503    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
504       do_party_relationship_merge(p_from_id, l_to_id,p_from_fk_id,p_to_fk_id,
505                                   x_return_status);
506    END IF;
507 
508    x_to_id := l_to_id;
509 EXCEPTION
510   WHEN OTHERS THEN
511     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
512     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
513     FND_MSG_PUB.ADD;
514     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
515 END party_relationship_merge;
516 
517 PROCEDURE per_profile_merge(
518         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
519         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
520         x_to_id         IN OUT NOCOPY	NUMBER,
521         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
522         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
523         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
524         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
525         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
526 	x_return_status OUT NOCOPY          VARCHAR2
527 ) IS
528 
529 l_to_id 	NUMBER;
530 
531 BEGIN
532    IF (x_to_id IS NULL) THEN
533      l_to_id := FND_API.G_MISS_NUM;
534    ELSE
535      l_to_id := x_to_id;
536    END IF;
537    x_return_status := FND_API.G_RET_STS_SUCCESS;
538 
539    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
540                 p_to_fk_id, p_par_entity_name,
541                 'HZ_MERGE_PKG.per_profile_merge',
542                 'HZ_PERSON_PROFILES','HZ_PARTIES',
543                 'PERSON_PROFILE_ID', 'PARTY_ID',x_return_status);
544 
545    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
546       do_per_profile_merge(p_from_id, l_to_id,p_from_fk_id,p_to_fk_id,
547                            x_return_status);
548    END IF;
549 
550    x_to_id := l_to_id;
551 EXCEPTION
552   WHEN OTHERS THEN
553     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
554     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
555     FND_MSG_PUB.ADD;
556     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
557 END per_profile_merge;
558 
559 --4307667
560 PROCEDURE party_usage_merge(
561         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
562         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
563         x_to_id         IN OUT NOCOPY  NUMBER,
564         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
565         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
566         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
567         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
568         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
569         x_return_status OUT NOCOPY          VARCHAR2
570 ) IS
571 l_to_id         NUMBER;
572 l_dummy_id NUMBER;
573 
574 BEGIN
575 
576    IF (x_to_id IS NULL) THEN
577      l_to_id := FND_API.G_MISS_NUM;
578    ELSE
579      l_to_id := x_to_id;
580    END IF;
581    x_return_status := FND_API.G_RET_STS_SUCCESS;
582 
583    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
584                 p_to_fk_id, p_par_entity_name,
585                 'HZ_MERGE_PKG.party_usage_merge',
586                 'HZ_PARTY_USG_ASSIGNMENTS','HZ_PARTIES',
587                 'PARTY_USG_ASSIGNMENT_ID', 'PARTY_ID',x_return_status);
588 
589    IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
590      do_party_usage_merge(p_from_id,l_to_id, p_from_fk_id,
591                   p_to_fk_id, x_return_status);
592    END IF;
593 
594    x_to_id := l_to_id;
595 EXCEPTION
596   WHEN  OTHERS THEN
597     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
598     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
599     FND_MSG_PUB.ADD;
600     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
601 END party_usage_merge;
602 
603 
604 PROCEDURE party_reln_subject_merge(
605         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
606         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
607         x_to_id         IN OUT NOCOPY  NUMBER,
608         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
609         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
610         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
611         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
612         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
613 	x_return_status OUT NOCOPY          VARCHAR2
614 ) IS
615 l_to_id         NUMBER;
616 l_dummy_id NUMBER;
617 
618 BEGIN
619    IF (x_to_id IS NULL) THEN
620      l_to_id := FND_API.G_MISS_NUM;
621    ELSE
622      l_to_id := x_to_id;
623    END IF;
624    x_return_status := FND_API.G_RET_STS_SUCCESS;
625 
626    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
627                 p_to_fk_id, p_par_entity_name,
628                 'HZ_MERGE_PKG.party_reln_subject_merge',
629                 'HZ_PARTY_RELATIONSHIPS','HZ_PARTIES',
630                 'PARTY_RELATIONSHIP_ID', 'PARTY_ID',x_return_status);
631 
632    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
633      do_party_reln_subj_merge(p_from_id,l_to_id, p_from_fk_id,
634                   p_to_fk_id, x_return_status);
635    END IF;
636 
637    IF (l_to_id IS NULL OR l_to_id = FND_API.G_MISS_NUM OR
638            l_to_id = p_from_id) THEN
639      FOR ORG_CT IN (
640        SELECT oc.ORG_CONTACT_ID
641        FROM HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACTS soc
642        WHERE oc.PARTY_RELATIONSHIP_ID = p_from_id
643        AND SOC.ORG_CONTACT_ID=oc.ORG_CONTACT_ID) LOOP
644       HZ_DQM_SYNC.stage_contact_merge(
645         'HZ_STAGED_CONTACTS',
646         ORG_CT.ORG_CONTACT_ID,l_dummy_id,
647         ORG_CT.ORG_CONTACT_ID,ORG_CT.ORG_CONTACT_ID,
648         'HZ_ORG_CONTACTS',
649         p_batch_id,p_batch_party_id,x_return_status);
650      END LOOP;
651    END IF;
652 
653    x_to_id := l_to_id;
654 EXCEPTION
655   WHEN OTHERS THEN
656     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
657     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
658     FND_MSG_PUB.ADD;
659     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
660 END party_reln_subject_merge;
661 
662 PROCEDURE party_reln_object_merge(
663         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
664         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
665         x_to_id         IN OUT NOCOPY  NUMBER,
666         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
667         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
668         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
669         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
670         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
671 	x_return_status OUT NOCOPY          VARCHAR2
672 ) IS
673 
674 l_to_id         NUMBER;
675 l_dummy_id NUMBER;
676 
677 BEGIN
678    IF (x_to_id IS NULL) THEN
679      l_to_id := FND_API.G_MISS_NUM;
680    ELSE
681      l_to_id := x_to_id;
682    END IF;
683    x_return_status := FND_API.G_RET_STS_SUCCESS;
684 
685    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
686                 p_to_fk_id, p_par_entity_name,
687                 'HZ_MERGE_PKG.party_reln_object_merge',
688                 'HZ_PARTY_RELATIONSHIPS','HZ_PARTIES',
689                 'PARTY_RELATIONSHIP_ID', 'PARTY_ID',x_return_status);
690 
691    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
692      do_party_reln_obj_merge(p_from_id,l_to_id, p_from_fk_id,
693                   p_to_fk_id, x_return_status);
694    END IF;
695 
696    IF (l_to_id IS NULL OR l_to_id = FND_API.G_MISS_NUM OR
697            l_to_id = p_from_id) THEN
698      FOR ORG_CT IN (
699        SELECT oc.ORG_CONTACT_ID
700        FROM HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACTS soc
701        WHERE oc.PARTY_RELATIONSHIP_ID = p_from_id
702        AND SOC.ORG_CONTACT_ID=oc.ORG_CONTACT_ID) LOOP
703       HZ_DQM_SYNC.stage_contact_merge(
704         'HZ_STAGED_CONTACTS',
705         ORG_CT.ORG_CONTACT_ID,l_dummy_id,
706         ORG_CT.ORG_CONTACT_ID,ORG_CT.ORG_CONTACT_ID,
707         'HZ_ORG_CONTACTS',
708         p_batch_id,p_batch_party_id,x_return_status);
709      END LOOP;
710    END IF;
711 
712    x_to_id := l_to_id;
713 EXCEPTION
714   WHEN OTHERS THEN
715     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
716     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
717     FND_MSG_PUB.ADD;
718     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
719 END party_reln_object_merge;
720 
721 PROCEDURE org_contact_merge(
722         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
723         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
724         x_to_id         IN OUT NOCOPY  NUMBER,
725         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
726         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
727         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
728         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
729         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
730 	x_return_status OUT NOCOPY          VARCHAR2
731 ) IS
732 l_to_id NUMBER;
733 
734 BEGIN
735    IF (x_to_id IS NULL) THEN
736      l_to_id := FND_API.G_MISS_NUM;
737    ELSE
738      l_to_id := x_to_id;
739    END IF;
740    x_return_status := FND_API.G_RET_STS_SUCCESS;
741 
742    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
743                 p_to_fk_id, p_par_entity_name,
744                 'HZ_MERGE_PKG.org_contact_merge',
745                 'HZ_ORG_CONTACTS','HZ_PARTY_SITES',
746                 'ORG_CONTACT_ID', 'PARTY_SITE_ID',x_return_status);
747 
748    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
749      do_org_contact_transfer(p_from_id,l_to_id, p_from_fk_id,
750                   p_to_fk_id, x_return_status);
751    END IF;
752 
753    x_to_id := l_to_id;
754 EXCEPTION
755   WHEN OTHERS THEN
756     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
757     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
758     FND_MSG_PUB.ADD;
759     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
760 END org_contact_merge;
761 
762 PROCEDURE org_contact_merge2(
763         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
764         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
765         x_to_id         IN OUT NOCOPY  NUMBER,
766         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
767         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
768         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
769         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
770         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
771 	x_return_status OUT NOCOPY          VARCHAR2
772 ) IS
773 l_to_id NUMBER;
774 l_dummy_id NUMBER;
775 
776 BEGIN
777    IF (x_to_id IS NULL) THEN
778      l_to_id := FND_API.G_MISS_NUM;
779    ELSE
780      l_to_id := x_to_id;
781    END IF;
782    x_return_status := FND_API.G_RET_STS_SUCCESS;
783 
784    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
785                 p_to_fk_id, p_par_entity_name,
786                 'HZ_MERGE_PKG.org_contact_merge2',
787                 'HZ_ORG_CONTACTS','HZ_PARTY_RELATIONSHIPS',
788                 'ORG_CONTACT_ID', 'PARTY_RELATIONSHIP_ID',x_return_status);
789 
790    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
791      do_org_contact_transfer2(p_from_id,l_to_id, p_from_fk_id,
792                   p_to_fk_id, x_return_status);
793    END IF;
794 
795    IF (l_to_id IS NULL OR l_to_id = FND_API.G_MISS_NUM OR
796            l_to_id = p_from_id) THEN
797      FOR ORG_CT IN (
798        SELECT soc.ORG_CONTACT_ID
799        FROM HZ_STAGED_CONTACTS soc
800        WHERE SOC.ORG_CONTACT_ID= p_from_id) LOOP
801       HZ_DQM_SYNC.stage_contact_merge(
802         'HZ_STAGED_CONTACTS',
803         ORG_CT.ORG_CONTACT_ID,l_dummy_id,
804         ORG_CT.ORG_CONTACT_ID,ORG_CT.ORG_CONTACT_ID,
805         'HZ_ORG_CONTACTS',
806         p_batch_id,p_batch_party_id,x_return_status);
807      END LOOP;
808    END IF;
809 
810    x_to_id := l_to_id;
811 EXCEPTION
812   WHEN OTHERS THEN
813     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
814     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
815     FND_MSG_PUB.ADD;
816     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
817 END org_contact_merge2;
818 
819 /*===========================================================================+
820  | PROCEDURE                                                                 |
821  |              party_site_merge                                             |
822  |                                                                           |
823  | DESCRIPTION                                                               |
824  |   Merges the party_sites with party_site_ids p_from_id to the party site  |
825  |   x_to_id                                                                 |
826  |                                                                           |
827  |   The merge operations allowed are MERGE and COPY                         |
828  |                                                                           |
829  | SCOPE - PRIVATE                                                           |
830  |                                                                           |
831  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
832  |                                                                           |
833  | ARGUMENTS  : IN:                                                          |
834  |		  p_entity_name                                              |
835  |		  p_from_id                                                  |
836  |		  p_from_fk_id                                               |
837  |		  p_to_fk_id                                                 |
838  |		  p_merge_operation                                          |
839  |		  p_par_entity_name                                          |
840  |              OUT:                                                         |
841  |		  x_return_status                                            |
842  |          IN/ OUT:                                                         |
843  |		  x_to_id                                                    |
844  | RETURNS    : NONE                                                         |
845  |                                                                           |
846  | NOTES                                                                     |
847  |                                                                           |
848  | MODIFICATION HISTORY                                                      |
849  |    Srinivasa Rangan   21-Aug-00  Created                                  |
850  |                                                                           |
851  +===========================================================================*/
852 PROCEDURE party_site_merge(
853         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
854         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
855         x_to_id         IN OUT NOCOPY	NUMBER,
856         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
857         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
858         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
859         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
860         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
861 	x_return_status OUT NOCOPY          VARCHAR2
862 ) IS
863 l_to_id 	NUMBER;
864 
865 BEGIN
866    IF (x_to_id IS NULL) THEN
867      l_to_id := FND_API.G_MISS_NUM;
868    ELSE
869      l_to_id := x_to_id;
870    END IF;
871 
872    x_return_status := FND_API.G_RET_STS_SUCCESS;
873 
874    IF p_from_fk_id <> FND_API.G_MISS_NUM THEN
875      check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
876                 p_to_fk_id, p_par_entity_name,
877                 'HZ_MERGE_PKG.party_site_merge',
878                 'HZ_PARTY_SITES','HZ_PARTIES',
879                 'PARTY_SITE_ID', 'PARTY_ID',x_return_status);
880    ELSE
881      check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
882                 p_to_fk_id, p_par_entity_name,
883                 'HZ_MERGE_PKG.party_site_merge',
884                 'HZ_PARTY_SITES',NULL, 'PARTY_SITE_ID',
885                 NULL,x_return_status);
886    END IF;
887 
888    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
889      do_party_site_merge(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
890                          p_batch_id,x_return_status);
891    END IF;
892 
893    x_to_id := l_to_id;
894 EXCEPTION
895   WHEN OTHERS THEN
896     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
897     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
898     FND_MSG_PUB.ADD;
899     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
900 END party_site_merge;
901 
902 /*===========================================================================+
903  | PROCEDURE                                                                 |
904  |              cust_account_merge                                           |
905  |                                                                           |
906  | DESCRIPTION                                                               |
907  |                                                                           |
908  | SCOPE - PRIVATE                                                           |
909  |                                                                           |
910  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
911  |                                                                           |
912  | ARGUMENTS  : IN:                                                          |
913  |		  p_entity_name                                              |
914  |		  p_from_id                                                  |
915  |		  p_from_fk_id                                               |
916  |		  p_to_fk_id                                                 |
917  |		  p_merge_operation                                          |
918  |		  p_par_entity_name                                          |
919  |              OUT:                                                         |
920  |		  x_return_status                                            |
921  |          IN/ OUT:                                                         |
922  |		  x_to_id                                                    |
923  | RETURNS    : NONE                                                         |
924  |                                                                           |
925  | NOTES                                                                     |
926  |                                                                           |
927  | MODIFICATION HISTORY                                                      |
928  |    Srinivasa Rangan   21-Aug-00  Created                                  |
929  |                                                                           |
930  +===========================================================================*/
931 PROCEDURE cust_account_merge(
932         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
933         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
934         x_to_id         IN OUT NOCOPY	NUMBER,
935         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
936         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
937         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
938         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
939         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
940 	x_return_status OUT NOCOPY          VARCHAR2
941 ) IS
942 l_to_id 	NUMBER;
943 l_dup_exists    VARCHAR2(20);
944 
945 BEGIN
946    IF (x_to_id IS NULL) THEN
947      l_to_id := FND_API.G_MISS_NUM;
948    ELSE
949      l_to_id := x_to_id;
950    END IF;
951 
952    x_return_status := FND_API.G_RET_STS_SUCCESS;
953 
954    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
955                 p_to_fk_id, p_par_entity_name,
956                 'HZ_MERGE_PKG.cust_account_merge',
957                 'HZ_CUST_ACCOUNTS','HZ_PARTIES',
958                 'CUST_ACCOUNT_ID', 'PARTY_ID',x_return_status);
959    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
960      l_dup_exists := HZ_MERGE_DUP_CHECK.check_cust_account_dup(
961                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
962                         x_return_status);
963    END IF;
964 
965    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
966      do_cust_account_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
967                        x_return_status);
968    END IF;
969 
970    x_to_id := l_to_id;
971 EXCEPTION
972   WHEN OTHERS THEN
973     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
974     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
975     FND_MSG_PUB.ADD;
976     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
977 END cust_account_merge;
978 
979 PROCEDURE cust_account_selling_merge(
980         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
981         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
982         x_to_id         IN OUT NOCOPY  NUMBER,
983         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
984         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
985         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
986         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
987         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
988         x_return_status OUT NOCOPY          VARCHAR2
989 ) IS
990 l_to_id         NUMBER;
991 l_dup_exists    VARCHAR2(20);
992 
993 BEGIN
994    IF (x_to_id IS NULL) THEN
995      l_to_id := FND_API.G_MISS_NUM;
996    ELSE
997      l_to_id := x_to_id;
998    END IF;
999 
1000    x_return_status := FND_API.G_RET_STS_SUCCESS;
1001 
1002    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1003                 p_to_fk_id, p_par_entity_name,
1004                 'HZ_MERGE_PKG.cust_account_merge',
1005                 'HZ_CUST_ACCOUNTS','HZ_PARTIES',
1006                 'CUST_ACCOUNT_ID', 'SELLING_PARTY_ID',x_return_status);
1007 
1008    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1009       UPDATE HZ_CUST_ACCOUNTS
1010       SET
1011         selling_party_id = p_to_fk_id,
1012         last_update_date = hz_utility_pub.last_update_date,
1013         last_updated_by = hz_utility_pub.user_id,
1014         last_update_login = hz_utility_pub.last_update_login,
1015         request_id =  hz_utility_pub.request_id,
1016         program_application_id = hz_utility_pub.program_application_id,
1017         program_id = hz_utility_pub.program_id,
1018         program_update_date = sysdate
1019       WHERE cust_account_id = p_from_id;
1020    END IF;
1021 
1022    x_to_id := l_to_id;
1023 EXCEPTION
1024   WHEN OTHERS THEN
1025     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1026     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1027     FND_MSG_PUB.ADD;
1028     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1029 END cust_account_selling_merge;
1030 
1031 PROCEDURE cust_account_role_merge(
1032         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1033         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1034         x_to_id         IN OUT NOCOPY	NUMBER,
1035         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1036         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1037         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1038         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1039         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1040 	x_return_status OUT NOCOPY          VARCHAR2
1041 ) IS
1042 l_to_id 	NUMBER;
1043 l_dup_exists    VARCHAR2(20);
1044 
1045 BEGIN
1046    IF (x_to_id IS NULL) THEN
1047      l_to_id := FND_API.G_MISS_NUM;
1048    ELSE
1049      l_to_id := x_to_id;
1050    END IF;
1051 
1052    x_return_status := FND_API.G_RET_STS_SUCCESS;
1053 
1054    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1055                 p_to_fk_id, p_par_entity_name,
1056                 'HZ_MERGE_PKG.cust_account_role_merge',
1057                 'HZ_CUST_ACCOUNT_ROLES','HZ_PARTIES',
1058                 'CUST_ACCOUNT_ROLE_ID', 'PARTY_ID',x_return_status);
1059    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1060      l_dup_exists := HZ_MERGE_DUP_CHECK.check_cust_account_role_dup(
1061                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1062                         x_return_status);
1063    END IF;
1064    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1065      do_cust_account_role_transfer(p_from_id, l_to_id, p_from_fk_id,
1066                          p_to_fk_id, x_return_status);
1067    END IF;
1068 
1069    x_to_id := l_to_id;
1070 EXCEPTION
1071   WHEN OTHERS THEN
1072     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1073     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1074     FND_MSG_PUB.ADD;
1075     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1076 END cust_account_role_merge;
1077 
1078 PROCEDURE cust_account_site_merge(
1079         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1080         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1081         x_to_id         IN OUT NOCOPY	NUMBER,
1082         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1083         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1084         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1085         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1086         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1087 	x_return_status OUT NOCOPY          VARCHAR2
1088 ) IS
1089 l_to_id 	NUMBER;
1090 l_dup_exists    VARCHAR2(20);
1091 
1092 BEGIN
1093    IF (x_to_id IS NULL) THEN
1094      l_to_id := FND_API.G_MISS_NUM;
1095    ELSE
1096      l_to_id := x_to_id;
1097    END IF;
1098 
1099    x_return_status := FND_API.G_RET_STS_SUCCESS;
1100 
1101    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1102                 p_to_fk_id, p_par_entity_name,
1103                 'HZ_MERGE_PKG.cust_account_site_merge',
1104                 'HZ_CUST_ACCT_SITES_ALL','HZ_PARTY_SITES',
1105                 'CUST_ACCT_SITE_ID', 'PARTY_SITE_ID',x_return_status);
1106 
1107    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1108      l_dup_exists := HZ_MERGE_DUP_CHECK.check_cust_account_site_dup(
1109                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1110                         x_return_status);
1111    END IF;
1112 
1113    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1114        do_cust_account_site_transfer(p_from_id,l_to_id, p_from_fk_id,
1115                          p_to_fk_id, x_return_status);
1116    END IF;
1117 
1118    x_to_id := l_to_id;
1119 EXCEPTION
1120   WHEN OTHERS THEN
1121     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1122     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1123     FND_MSG_PUB.ADD;
1124     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1125 END cust_account_site_merge;
1126 
1127 /*===========================================================================+
1128  | PROCEDURE                                                                 |
1129  |              financial_profile_merge                                      |
1130  |                                                                           |
1131  | DESCRIPTION                                                               |
1132  |                                                                           |
1133  | SCOPE - PRIVATE                                                           |
1134  |                                                                           |
1135  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
1136  |                                                                           |
1137  | ARGUMENTS  : IN:                                                          |
1138  |		  p_entity_name                                              |
1139  |		  p_from_id                                                  |
1140  |		  p_from_fk_id                                               |
1141  |		  p_to_fk_id                                                 |
1142  |		  p_merge_operation                                          |
1143  |		  p_par_entity_name                                          |
1144  |              OUT:                                                         |
1145  |		  x_return_status                                            |
1146  |          IN/ OUT:                                                         |
1147  |		  x_to_id                                                    |
1148  | RETURNS    : NONE                                                         |
1149  |                                                                           |
1150  | NOTES                                                                     |
1151  |                                                                           |
1152  | MODIFICATION HISTORY                                                      |
1153  |    Srinivasa Rangan   21-Aug-00  Created                                  |
1154  |                                                                           |
1155  +===========================================================================*/
1156 PROCEDURE financial_profile_merge(
1157         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1158         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1159         x_to_id         IN OUT NOCOPY	NUMBER,
1160         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1161         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1162         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1163         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1164         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1165 	x_return_status OUT NOCOPY          VARCHAR2
1166 ) IS
1167 l_to_id 	NUMBER;
1168 l_dup_exists    VARCHAR2(20);
1169 
1170 BEGIN
1171    IF (x_to_id IS NULL) THEN
1172      l_to_id := FND_API.G_MISS_NUM;
1173    ELSE
1174      l_to_id := x_to_id;
1175    END IF;
1176 
1177    x_return_status := FND_API.G_RET_STS_SUCCESS;
1178 
1179    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1180                 p_to_fk_id, p_par_entity_name,
1181                 'HZ_MERGE_PKG.financial_profile_merge',
1182                 'HZ_FINANCIAL_PROFILE','HZ_PARTIES',
1183                 'FINANCIAL_PROFILE_ID', 'PARTY_ID',x_return_status);
1184 
1185    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1186      l_dup_exists := HZ_MERGE_DUP_CHECK.check_financial_profile_dup(
1187                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1188                         x_return_status);
1189    END IF;
1190 
1191    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1192         do_fin_profile_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1193                          x_return_status);
1194    END IF;
1195 
1196    x_to_id := l_to_id;
1197 EXCEPTION
1198   WHEN OTHERS THEN
1199     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1200     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1201     FND_MSG_PUB.ADD;
1202     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1203 END financial_profile_merge;
1204 
1205 /*===========================================================================+
1206  | PROCEDURE                                                                 |
1207  |              contact_point_merge                                          |
1208  |                                                                           |
1209  | DESCRIPTION                                                               |
1210  |                                                                           |
1211  | SCOPE - PRIVATE                                                           |
1212  |                                                                           |
1213  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
1214  |                                                                           |
1215  | ARGUMENTS  : IN:                                                          |
1216  |		  p_entity_name                                              |
1217  |		  p_from_id                                                  |
1218  |		  p_from_fk_id                                               |
1219  |		  p_to_fk_id                                                 |
1220  |		  p_merge_operation                                          |
1221  |		  p_par_entity_name                                          |
1222  |              OUT:                                                         |
1223  |		  x_return_status                                            |
1224  |          IN/ OUT:                                                         |
1225  |		  x_to_id                                                    |
1226  | RETURNS    : NONE                                                         |
1227  |                                                                           |
1228  | NOTES                                                                     |
1229  |                                                                           |
1230  | MODIFICATION HISTORY                                                      |
1231  |    Srinivasa Rangan   21-Aug-00  Created                                  |
1232  |                                                                           |
1233  +===========================================================================*/
1234 PROCEDURE contact_point_merge(
1235         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1236         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1237         x_to_id         IN OUT NOCOPY	NUMBER,
1238         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1239         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1240         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1241         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1242         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1243 	x_return_status OUT NOCOPY          VARCHAR2
1244 ) IS
1245 l_to_id 	NUMBER;
1246 l_dup_exists    VARCHAR2(20);
1247 l_dummy_id NUMBER;
1248 
1249 BEGIN
1250    IF (x_to_id IS NULL) THEN
1251      l_to_id := FND_API.G_MISS_NUM;
1252    ELSE
1253      l_to_id := x_to_id;
1254    END IF;
1255 
1256    x_return_status := FND_API.G_RET_STS_SUCCESS;
1257 
1258    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1259                 p_to_fk_id, p_par_entity_name,
1260                 'HZ_MERGE_PKG.contact_point_merge',
1261                 'HZ_CONTACT_POINTS','HZ_PARTIES',
1262                 'CONTACT_POINT_ID', 'PARTY_ID',x_return_status);
1263 
1264    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1265      l_dup_exists := HZ_MERGE_DUP_CHECK.check_contact_point_dup(
1266                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1267                         'HZ_PARTIES',x_return_status);
1268    END IF;
1269 
1270    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1271         do_contact_point_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1272                          x_return_status);
1273    END IF;
1274 
1275    IF (l_to_id IS NULL OR l_to_id = FND_API.G_MISS_NUM OR
1276            l_to_id = p_from_id) THEN
1277      FOR CPT IN (
1278       SELECT CONTACT_POINT_ID FROM HZ_STAGED_CONTACT_POINTS
1279       WHERE CONTACT_POINT_ID=p_from_id) LOOP
1280 
1281         HZ_DQM_SYNC.stage_contact_point_merge(
1282           'HZ_STAGED_CONTACT_POINTS',
1283           p_from_id,l_dummy_id,p_from_id,p_from_id,
1284           'HZ_CONTACT_POINTS',
1285           p_batch_id,p_batch_party_id,x_return_status);
1286      END LOOP;
1287    END IF;
1288 
1289    x_to_id := l_to_id;
1290 EXCEPTION
1291   WHEN OTHERS THEN
1292     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1293     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1294     FND_MSG_PUB.ADD;
1295     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1296 END contact_point_merge;
1297 
1298 /*===========================================================================+
1299  | PROCEDURE                                                                 |
1300  |              references_merge                                             |
1301  |                                                                           |
1302  | DESCRIPTION                                                               |
1303  |   Merges the parties with party_ids p_from_id to the party x_to_id        |
1304  |                                                                           |
1305  | SCOPE - PRIVATE                                                           |
1306  |                                                                           |
1307  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
1308  |                                                                           |
1309  | ARGUMENTS  : IN:                                                          |
1310  |		  p_entity_name                                              |
1311  |		  p_from_id                                                  |
1312  |		  p_from_fk_id                                               |
1313  |		  p_to_fk_id                                                 |
1314  |		  p_merge_operation                                          |
1315  |		  p_par_entity_name                                          |
1316  |              OUT:                                                         |
1317  |		  x_return_status                                            |
1318  |          IN/ OUT:                                                         |
1319  |		  x_to_id                                                    |
1320  | RETURNS    : NONE                                                         |
1321  |                                                                           |
1322  | NOTES                                                                     |
1323  |                                                                           |
1324  | MODIFICATION HISTORY                                                      |
1325  |    Srinivasa Rangan   21-Aug-00  Created                                  |
1326  |                                                                           |
1327  +===========================================================================*/
1328 PROCEDURE references_merge(
1329         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1330         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1331         x_to_id         IN OUT NOCOPY	NUMBER,
1332         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1333         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1334         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1335         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1336         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1337 	x_return_status OUT NOCOPY          VARCHAR2
1338 ) IS
1339 l_to_id 	NUMBER;
1340 l_dup_exists    VARCHAR2(20);
1341 
1342 BEGIN
1343    IF (x_to_id IS NULL) THEN
1344      l_to_id := FND_API.G_MISS_NUM;
1345    ELSE
1346      l_to_id := x_to_id;
1347    END IF;
1348 
1349    x_return_status := FND_API.G_RET_STS_SUCCESS;
1350 
1351    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1352                 p_to_fk_id, p_par_entity_name,
1353                 'HZ_MERGE_PKG.references_merge',
1354                 'HZ_REFERENCES','HZ_PARTIES',
1355                 'REFERENCE_ID', 'PARTY_ID',x_return_status);
1356 
1357    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1358      l_dup_exists := HZ_MERGE_DUP_CHECK.check_references_dup(
1359                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1360                         x_return_status);
1361    END IF;
1362 
1363    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1364         do_references_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1365                          x_return_status);
1366    END IF;
1367 
1368    x_to_id := l_to_id;
1369 EXCEPTION
1370   WHEN OTHERS THEN
1371     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1372     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1373     FND_MSG_PUB.ADD;
1374     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1375 END references_merge;
1376 
1377 
1378 /*===========================================================================+
1379  | PROCEDURE                                                                 |
1380  |              certification_merge                                          |
1381  |                                                                           |
1382  | DESCRIPTION                                                               |
1383  |   Merges the parties with party_ids p_from_id to the party x_to_id        |
1384  |                                                                           |
1385  | SCOPE - PRIVATE                                                           |
1386  |                                                                           |
1387  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
1388  |                                                                           |
1389  | ARGUMENTS  : IN:                                                          |
1390  |		  p_entity_name                                              |
1391  |		  p_from_id                                                  |
1392  |		  p_from_fk_id                                               |
1393  |		  p_to_fk_id                                                 |
1394  |		  p_merge_operation                                          |
1395  |		  p_par_entity_name                                          |
1396  |              OUT:                                                         |
1397  |		  x_return_status                                            |
1398  |          IN/ OUT:                                                         |
1399  |		  x_to_id                                                    |
1400  | RETURNS    : NONE                                                         |
1401  |                                                                           |
1402  | NOTES                                                                     |
1403  |                                                                           |
1404  | MODIFICATION HISTORY                                                      |
1405  |    Srinivasa Rangan   21-Aug-00  Created                                  |
1406  |                                                                           |
1407  +===========================================================================*/
1408 PROCEDURE certification_merge(
1409         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1410         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1411         x_to_id         IN OUT NOCOPY	NUMBER,
1412         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1413         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1414         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1415         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1416         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1417 	x_return_status OUT NOCOPY          VARCHAR2
1418 ) IS
1419 l_to_id 	NUMBER;
1420 l_dup_exists    VARCHAR2(20);
1421 
1422 BEGIN
1423    IF (x_to_id IS NULL) THEN
1424      l_to_id := FND_API.G_MISS_NUM;
1425    ELSE
1426      l_to_id := x_to_id;
1427    END IF;
1428 
1429    x_return_status := FND_API.G_RET_STS_SUCCESS;
1430 
1431    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1432                 p_to_fk_id, p_par_entity_name,
1433                 'HZ_MERGE_PKG.certification_merge',
1434                 'HZ_CERTIFICATIONS','HZ_PARTIES',
1435                 'CERTIFICATION_ID', 'PARTY_ID',x_return_status);
1436 
1437    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1438      l_dup_exists := HZ_MERGE_DUP_CHECK.check_certification_dup(
1439                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1440                         x_return_status);
1441    END IF;
1442 
1443    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1444         do_certification_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1445                          x_return_status);
1446    END IF;
1447 
1448    x_to_id := l_to_id;
1449 EXCEPTION
1450   WHEN OTHERS THEN
1451     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1452     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1453     FND_MSG_PUB.ADD;
1454     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1455 END certification_merge;
1456 
1457 PROCEDURE credit_ratings_merge(
1458         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1459         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1460         x_to_id         IN OUT NOCOPY	NUMBER,
1461         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1462         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1463         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1464         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1465         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1466 	x_return_status OUT NOCOPY          VARCHAR2
1467 ) IS
1468 l_to_id 	NUMBER;
1469 l_dup_exists    VARCHAR2(20);
1470 
1471 BEGIN
1472    IF (x_to_id IS NULL) THEN
1473      l_to_id := FND_API.G_MISS_NUM;
1474    ELSE
1475      l_to_id := x_to_id;
1476    END IF;
1477 
1478    x_return_status := FND_API.G_RET_STS_SUCCESS;
1479 
1480    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1481                 p_to_fk_id, p_par_entity_name,
1482                 'HZ_MERGE_PKG.credit_ratings_merge',
1483                 'HZ_CREDIT_RATINGS','HZ_PARTIES',
1484                 'CREDIT_RATING_ID', 'PARTY_ID',x_return_status);
1485 
1486    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1487      l_dup_exists := HZ_MERGE_DUP_CHECK.check_credit_ratings_dup(
1488                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1489                         x_return_status);
1490    END IF;
1491 
1492    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1493         do_credit_ratings_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1494                          x_return_status);
1495    END IF;
1496 
1497    x_to_id := l_to_id;
1498 EXCEPTION
1499   WHEN OTHERS THEN
1500     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1501     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1502     FND_MSG_PUB.ADD;
1503     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1504 END credit_ratings_merge;
1505 
1506 
1507 PROCEDURE security_issued_merge(
1508         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1509         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1510         x_to_id         IN OUT NOCOPY	NUMBER,
1511         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1512         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1513         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1514         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1515         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1516 	x_return_status OUT NOCOPY          VARCHAR2
1517 ) IS
1518 l_to_id 	NUMBER;
1519 l_dup_exists    VARCHAR2(20);
1520 
1521 BEGIN
1522    IF (x_to_id IS NULL) THEN
1523      l_to_id := FND_API.G_MISS_NUM;
1524    ELSE
1525      l_to_id := x_to_id;
1526    END IF;
1527 
1528    x_return_status := FND_API.G_RET_STS_SUCCESS;
1529 
1530    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1531                 p_to_fk_id, p_par_entity_name,
1532                 'HZ_MERGE_PKG.security_issued_merge',
1533                 'HZ_SECURITY_ISSUED','HZ_PARTIES',
1534                 'SECURITY_ISSUED_ID', 'PARTY_ID',x_return_status);
1535 
1536    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1537 
1538      l_dup_exists := HZ_MERGE_DUP_CHECK.check_security_issued_dup(
1539                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1540                         x_return_status);
1541    END IF;
1542 
1543    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1544         do_security_issued_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1545                          x_return_status);
1546    END IF;
1547 
1548    x_to_id := l_to_id;
1549 EXCEPTION
1550   WHEN OTHERS THEN
1551     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1552     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1553     FND_MSG_PUB.ADD;
1554     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1555 END security_issued_merge;
1556 
1557 PROCEDURE financial_reports_merge(
1558         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1559         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1560         x_to_id         IN OUT NOCOPY	NUMBER,
1561         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1562         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1563         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1564         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1565         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1566 	x_return_status OUT NOCOPY          VARCHAR2
1567 ) IS
1568 l_to_id 	NUMBER;
1569 l_dup_exists    VARCHAR2(20);
1570 
1571 BEGIN
1572    IF (x_to_id IS NULL) THEN
1573      l_to_id := FND_API.G_MISS_NUM;
1574    ELSE
1575      l_to_id := x_to_id;
1576    END IF;
1577 
1578    x_return_status := FND_API.G_RET_STS_SUCCESS;
1579 
1580    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1581                 p_to_fk_id, p_par_entity_name,
1582                 'HZ_MERGE_PKG.financial_reports_merge',
1583                 'HZ_FINANCIAL_REPORTS','HZ_PARTIES',
1584                 'FINANCIAL_REPORT_ID', 'PARTY_ID',x_return_status);
1585 
1586    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1587      l_dup_exists := HZ_MERGE_DUP_CHECK.check_financial_reports_dup(
1588                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1589                         x_return_status);
1590    END IF;
1591 
1592    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1593         do_financial_reports_transfer(p_from_id, l_to_id, p_from_fk_id,
1594                          p_to_fk_id,x_return_status);
1595    END IF;
1596 
1597    x_to_id := l_to_id;
1598 EXCEPTION
1599   WHEN OTHERS THEN
1600     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1601     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1602     FND_MSG_PUB.ADD;
1603     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1604 END financial_reports_merge;
1605 
1606 
1607 PROCEDURE org_indicators_merge(
1608         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1609         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1610         x_to_id         IN OUT NOCOPY	NUMBER,
1611         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1612         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1613         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1614         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1615         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1616 	x_return_status OUT NOCOPY          VARCHAR2
1617 ) IS
1618 l_to_id 	NUMBER;
1619 l_dup_exists    VARCHAR2(20);
1620 
1621 BEGIN
1622    IF (x_to_id IS NULL) THEN
1623      l_to_id := FND_API.G_MISS_NUM;
1624    ELSE
1625      l_to_id := x_to_id;
1626    END IF;
1627 
1628    x_return_status := FND_API.G_RET_STS_SUCCESS;
1629 
1630    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1631                 p_to_fk_id, p_par_entity_name,
1632                 'HZ_MERGE_PKG.org_indicators_merge',
1633                 'HZ_ORGANIZATION_INDICATORS','HZ_PARTIES',
1634                 'ORGANIZATION_INDICATOR_ID', 'PARTY_ID',x_return_status);
1635 
1636    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1637      l_dup_exists := HZ_MERGE_DUP_CHECK.check_org_indicators_dup(
1638                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1639                         x_return_status);
1640    END IF;
1641 
1642    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1643         do_org_indicators_transfer(p_from_id, l_to_id, p_from_fk_id, p_to_fk_id,
1644                          x_return_status);
1645    END IF;
1646 
1647    x_to_id := l_to_id;
1648 EXCEPTION
1649   WHEN OTHERS THEN
1650     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1651     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1652     FND_MSG_PUB.ADD;
1653     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1654 END org_indicators_merge;
1655 
1656 PROCEDURE org_ind_reference_merge(
1657         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1658         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1659         x_to_id         IN OUT NOCOPY	NUMBER,
1660         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1661         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1662         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1663         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1664         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1665 	x_return_status OUT NOCOPY          VARCHAR2
1666 ) IS
1667 l_to_id 	NUMBER;
1668 l_dup_exists    VARCHAR2(20);
1669 
1670 BEGIN
1671    IF (x_to_id IS NULL) THEN
1672      l_to_id := FND_API.G_MISS_NUM;
1673    ELSE
1674      l_to_id := x_to_id;
1675    END IF;
1676 
1677    x_return_status := FND_API.G_RET_STS_SUCCESS;
1678 
1679    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1680                 p_to_fk_id, p_par_entity_name,
1681                 'HZ_MERGE_PKG.org_ind_reference_merge',
1682                 'HZ_INDUSTRIAL_REFERENCE','HZ_PARTIES',
1683                 'INDUSTRY_REFERENCE_ID', 'PARTY_ID',x_return_status);
1684 
1685    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1686      l_dup_exists := HZ_MERGE_DUP_CHECK.check_ind_reference_dup(
1687                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1688                         x_return_status);
1689    END IF;
1690 
1691    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1692         do_ind_reference_transfer(p_from_id, l_to_id, p_from_fk_id, p_to_fk_id,
1693                          x_return_status);
1694    END IF;
1695 
1696    x_to_id := l_to_id;
1697 EXCEPTION
1698   WHEN OTHERS THEN
1699     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1700     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1701     FND_MSG_PUB.ADD;
1702     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1703 END org_ind_reference_merge;
1704 
1705 
1706 PROCEDURE per_interest_merge(
1707         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1708         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1709         x_to_id         IN OUT NOCOPY	NUMBER,
1710         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1711         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1712         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1713         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1714         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1715 	x_return_status OUT NOCOPY          VARCHAR2
1716 ) IS
1717 l_to_id 	NUMBER;
1718 l_dup_exists    VARCHAR2(20);
1719 
1720 BEGIN
1721    IF (x_to_id IS NULL) THEN
1722      l_to_id := FND_API.G_MISS_NUM;
1723    ELSE
1724      l_to_id := x_to_id;
1725    END IF;
1726 
1727    x_return_status := FND_API.G_RET_STS_SUCCESS;
1728 
1729    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1730                 p_to_fk_id, p_par_entity_name,
1731                 'HZ_MERGE_PKG.per_interest_merge',
1732                 'HZ_PERSON_INTEREST','HZ_PARTIES',
1733                 'PERSON_INTEREST_ID', 'PARTY_ID',x_return_status);
1734 
1735    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1736      l_dup_exists := HZ_MERGE_DUP_CHECK.check_per_interest_dup(
1737                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1738                         x_return_status);
1739    END IF;
1740 
1741    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1742         do_per_interest_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1743                          x_return_status);
1744    END IF;
1745 
1746    x_to_id := l_to_id;
1747 EXCEPTION
1748   WHEN OTHERS THEN
1749     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1750     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1751     FND_MSG_PUB.ADD;
1752     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1753 END per_interest_merge;
1754 
1755 PROCEDURE citizenship_merge(
1756         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1757         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1758         x_to_id         IN OUT NOCOPY	NUMBER,
1759         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1760         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1761         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1762         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1763         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1764 	x_return_status OUT NOCOPY          VARCHAR2
1765 ) IS
1766 l_to_id 	NUMBER;
1767 l_dup_exists    VARCHAR2(20);
1768 
1769 BEGIN
1770    IF (x_to_id IS NULL) THEN
1771      l_to_id := FND_API.G_MISS_NUM;
1772    ELSE
1773      l_to_id := x_to_id;
1774    END IF;
1775 
1776    x_return_status := FND_API.G_RET_STS_SUCCESS;
1777 
1778    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1779                 p_to_fk_id, p_par_entity_name,
1780                 'HZ_MERGE_PKG.citizenship_merge',
1781                 'HZ_CITIZENSHIP','HZ_PARTIES',
1782                 'CITIZENSHIP_ID', 'PARTY_ID',x_return_status);
1783 
1784    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1785      l_dup_exists := HZ_MERGE_DUP_CHECK.check_citizenship_dup(
1786                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1787                         x_return_status);
1788    END IF;
1789 
1790    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1791         do_citizenship_transfer(p_from_id,l_to_id,p_from_fk_id, p_to_fk_id,
1792                            x_return_status);
1793    END IF;
1794 
1795    x_to_id := l_to_id;
1796 EXCEPTION
1797   WHEN OTHERS THEN
1798     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1799     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1800     FND_MSG_PUB.ADD;
1801     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1802 END citizenship_merge;
1803 
1804 PROCEDURE education_merge(
1805         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1806         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1807         x_to_id         IN OUT NOCOPY	NUMBER,
1808         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1809         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1810         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1811         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1812         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1813 	x_return_status OUT NOCOPY          VARCHAR2
1814 ) IS
1815 l_to_id 	NUMBER;
1816 l_dup_exists    VARCHAR2(20);
1817 
1818 BEGIN
1819    IF (x_to_id IS NULL) THEN
1820      l_to_id := FND_API.G_MISS_NUM;
1821    ELSE
1822      l_to_id := x_to_id;
1823    END IF;
1824 
1825    x_return_status := FND_API.G_RET_STS_SUCCESS;
1826 
1827    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1828                 p_to_fk_id, p_par_entity_name,
1829                 'HZ_MERGE_PKG.education_merge',
1830                 'HZ_EDUCATION','HZ_PARTIES',
1831                 'EDUCATION_ID', 'PARTY_ID',x_return_status);
1832 
1833    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1834      l_dup_exists := HZ_MERGE_DUP_CHECK.check_education_dup(
1835                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1836                         x_return_status);
1837    END IF;
1838 
1839    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1840        do_education_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1841                          x_return_status);
1842    END IF;
1843 
1844    x_to_id := l_to_id;
1845 EXCEPTION
1846   WHEN OTHERS THEN
1847     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1848     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1849     FND_MSG_PUB.ADD;
1850     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1851 END education_merge;
1852 
1853 PROCEDURE education_school_merge(
1854         p_entity_name   	IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1855         p_from_id       	IN      NUMBER:=FND_API.G_MISS_NUM,
1856         x_to_id         	IN  OUT NOCOPY	NUMBER,
1857         p_from_fk_id    	IN      NUMBER:=FND_API.G_MISS_NUM,
1858         p_to_fk_id      	IN      NUMBER:=FND_API.G_MISS_NUM,
1859         p_par_entity_name 	IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1860         p_batch_id		IN	NUMBER:=FND_API.G_MISS_NUM,
1861         p_batch_party_id 	IN      NUMBER:=FND_API.G_MISS_NUM,
1862 	x_return_status 	OUT NOCOPY      VARCHAR2
1863 ) IS
1864 l_to_id 	NUMBER;
1865 l_dup_exists    VARCHAR2(20);
1866 
1867 BEGIN
1868    IF (x_to_id IS NULL) THEN
1869      l_to_id := FND_API.G_MISS_NUM;
1870    ELSE
1871      l_to_id := x_to_id;
1872    END IF;
1873 
1874    x_return_status := FND_API.G_RET_STS_SUCCESS;
1875 
1876    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1877                 p_to_fk_id, p_par_entity_name,
1878                 'HZ_MERGE_PKG.education_school_merge',
1879                 'HZ_EDUCATION','HZ_PARTIES',
1880                 'EDUCATION_ID', 'SCHOOL_PARTY_ID',x_return_status);
1881 
1882    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1883      l_dup_exists := HZ_MERGE_DUP_CHECK.check_education_dup(
1884                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1885                         x_return_status);
1886    END IF;
1887 
1888    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1889         do_education_school_transfer(p_from_id,l_to_id,p_from_fk_id, p_to_fk_id,
1890                            x_return_status);
1891    END IF;
1892 
1893    x_to_id := l_to_id;
1894 EXCEPTION
1895   WHEN OTHERS THEN
1896     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1897     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1898     FND_MSG_PUB.ADD;
1899     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1900 END education_school_merge;
1901 
1902 PROCEDURE emp_history_merge(
1903         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1904         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
1905         x_to_id         IN OUT NOCOPY	NUMBER,
1906         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
1907         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
1908         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
1909         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
1910         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
1911 	x_return_status OUT NOCOPY          VARCHAR2
1912 ) IS
1913 l_to_id 	NUMBER;
1914 l_dup_exists    VARCHAR2(20);
1915 
1916 BEGIN
1917    IF (x_to_id IS NULL) THEN
1918      l_to_id := FND_API.G_MISS_NUM;
1919    ELSE
1920      l_to_id := x_to_id;
1921    END IF;
1922 
1923    x_return_status := FND_API.G_RET_STS_SUCCESS;
1924 
1925    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1926                 p_to_fk_id, p_par_entity_name,
1927                 'HZ_MERGE_PKG.emp_history_merge',
1928                 'HZ_EMPLOYMENT_HISTORY','HZ_PARTIES',
1929                 'EMPLOYMENT_HISTORY_ID', 'PARTY_ID',x_return_status);
1930 
1931    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1932      l_dup_exists := HZ_MERGE_DUP_CHECK.check_emp_history_dup(
1933                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1934                         x_return_status);
1935    END IF;
1936 
1937    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1938         do_emp_history_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1939                          x_return_status);
1940    END IF;
1941 
1942    x_to_id := l_to_id;
1943 EXCEPTION
1944   WHEN OTHERS THEN
1945     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1946     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1947     FND_MSG_PUB.ADD;
1948     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1949 END emp_history_merge;
1950 
1951 PROCEDURE emp_history_employed_merge(
1952         p_entity_name   	IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1953         p_from_id       	IN      NUMBER:=FND_API.G_MISS_NUM,
1954         x_to_id         	IN OUT NOCOPY	NUMBER,
1955         p_from_fk_id    	IN      NUMBER:=FND_API.G_MISS_NUM,
1956         p_to_fk_id      	IN      NUMBER:=FND_API.G_MISS_NUM,
1957         p_par_entity_name 	IN      VARCHAR2:=FND_API.G_MISS_CHAR,
1958         p_batch_id		IN	NUMBER:=FND_API.G_MISS_NUM,
1959         p_batch_party_id	IN      NUMBER:=FND_API.G_MISS_NUM,
1960 	x_return_status 	OUT    NOCOPY   VARCHAR2
1961 ) IS
1962 l_to_id 	NUMBER;
1963 l_dup_exists    VARCHAR2(20);
1964 
1965 BEGIN
1966    IF (x_to_id IS NULL) THEN
1967      l_to_id := FND_API.G_MISS_NUM;
1968    ELSE
1969      l_to_id := x_to_id;
1970    END IF;
1971 
1972    x_return_status := FND_API.G_RET_STS_SUCCESS;
1973 
1974    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
1975                 p_to_fk_id, p_par_entity_name,
1976                 'HZ_MERGE_PKG.emp_history_employed_merge',
1977                 'HZ_EMPLOYMENT_HISTORY','HZ_PARTIES',
1978                 'EMPLOYMENT_HISTORY_ID','EMPLOYED_BY_PARTY_ID',x_return_status);
1979 
1980    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
1981      l_dup_exists := HZ_MERGE_DUP_CHECK.check_emp_history_dup(
1982                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1983                         x_return_status);
1984    END IF;
1985 
1986    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
1987         do_employed_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
1988                          x_return_status);
1989    END IF;
1990 
1991    x_to_id := l_to_id;
1992 EXCEPTION
1993   WHEN OTHERS THEN
1994     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
1995     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1996     FND_MSG_PUB.ADD;
1997     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1998 END emp_history_employed_merge;
1999 
2000 PROCEDURE work_class_merge(
2001         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2002         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2003         x_to_id         IN OUT NOCOPY	NUMBER,
2004         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2005         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2006         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2007         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
2008         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2009 	x_return_status OUT NOCOPY          VARCHAR2
2010 ) IS
2011 l_to_id 	NUMBER;
2012 l_dup_exists    VARCHAR2(20);
2013 
2014 BEGIN
2015    IF (x_to_id IS NULL) THEN
2016      l_to_id := FND_API.G_MISS_NUM;
2017    ELSE
2018      l_to_id := x_to_id;
2019    END IF;
2020 
2021    x_return_status := FND_API.G_RET_STS_SUCCESS;
2022 
2023    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2024                 p_to_fk_id, p_par_entity_name,
2025                 'HZ_MERGE_PKG.work_class_merge',
2026                 'HZ_WORK_CLASS', 'HZ_EMPLOYMENT_HISTORY',
2027                 'WORK_CLASS_ID', 'EMPLOYMENT_HISTORY_ID', x_return_status);
2028 
2029    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2030      l_dup_exists := HZ_MERGE_DUP_CHECK.check_work_class_dup(
2031                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2032                         x_return_status);
2033    END IF;
2034 
2035    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2036         do_work_class_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2037                          x_return_status);
2038    END IF;
2039 
2040    x_to_id := l_to_id;
2041 EXCEPTION
2042   WHEN OTHERS THEN
2043     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2044     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2045     FND_MSG_PUB.ADD;
2046     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2047 END work_class_merge;
2048 
2049 PROCEDURE code_assignment_merge(
2050         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2051         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2052         x_to_id         IN OUT NOCOPY  NUMBER,
2053         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2054         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2055         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2056         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2057         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2058         x_return_status OUT NOCOPY          VARCHAR2
2059 ) IS
2060 l_to_id         NUMBER;
2061 l_dup_exists    VARCHAR2(20);
2062 
2063 BEGIN
2064    IF (x_to_id IS NULL) THEN
2065      l_to_id := FND_API.G_MISS_NUM;
2066    ELSE
2067      l_to_id := x_to_id;
2068    END IF;
2069 
2070    x_return_status := FND_API.G_RET_STS_SUCCESS;
2071 
2072    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2073                 p_to_fk_id, p_par_entity_name,
2074                 'HZ_MERGE_PKG.code_assignment_merge',
2075                 'HZ_CODE_ASSIGNMENTS','HZ_PARTIES',
2076                 'CODE_ASSIGNMENT_ID', 'PARTY_ID',x_return_status);
2077 
2078    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2079      l_dup_exists := HZ_MERGE_DUP_CHECK.check_code_assignment_dup(
2080                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2081                         'HZ_PARTIES', x_return_status);
2082    END IF;
2083 
2084    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2085         do_code_assignment_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2086                          x_return_status);
2087    END IF;
2088 
2089    x_to_id := l_to_id;
2090 EXCEPTION
2091   WHEN OTHERS THEN
2092     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2093     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2094     FND_MSG_PUB.ADD;
2095     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2096 END code_assignment_merge;
2097 
2098 PROCEDURE code_assignment_merge2(
2099         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2100         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2101         x_to_id         IN OUT NOCOPY  NUMBER,
2102         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2103         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2104         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2105         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2106         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2107         x_return_status OUT NOCOPY          VARCHAR2
2108 ) IS
2109 l_to_id         NUMBER;
2110 l_dup_exists    VARCHAR2(20);
2111 
2112 BEGIN
2113    IF (x_to_id IS NULL) THEN
2114      l_to_id := FND_API.G_MISS_NUM;
2115    ELSE
2116      l_to_id := x_to_id;
2117    END IF;
2118 
2119    x_return_status := FND_API.G_RET_STS_SUCCESS;
2120 
2121    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2122                 p_to_fk_id, p_par_entity_name,
2123                 'HZ_MERGE_PKG.code_assignment_merge',
2124                 'HZ_CODE_ASSIGNMENTS','HZ_PARTY_SITES',
2125                 'CODE_ASSIGNMENT_ID', 'PARTY_SITE_ID',x_return_status);
2126 
2127    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2128      l_dup_exists := HZ_MERGE_DUP_CHECK.check_code_assignment_dup(
2129                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2130                         'HZ_PARTY_SITES', x_return_status);
2131    END IF;
2132 
2133    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2134         do_code_assignment_transfer2(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2135                          x_return_status);
2136    END IF;
2137 
2138    x_to_id := l_to_id;
2139 EXCEPTION
2140   WHEN OTHERS THEN
2141     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2142     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2143     FND_MSG_PUB.ADD;
2144     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2145 END code_assignment_merge2;
2146 
2147 PROCEDURE org_contact_role_merge(
2148         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2149         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2150         x_to_id         IN OUT NOCOPY	NUMBER,
2151         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2152         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2153         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2154         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
2155         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2156 	x_return_status OUT NOCOPY          VARCHAR2
2157 ) IS
2158 l_to_id 	NUMBER;
2159 l_dup_exists    VARCHAR2(20);
2160 
2161 BEGIN
2162    IF (x_to_id IS NULL) THEN
2163      l_to_id := FND_API.G_MISS_NUM;
2164    ELSE
2165      l_to_id := x_to_id;
2166    END IF;
2167 
2168    x_return_status := FND_API.G_RET_STS_SUCCESS;
2169 
2170    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2171                 p_to_fk_id, p_par_entity_name,
2172                 'HZ_MERGE_PKG.org_contact_role_merge',
2173                 'HZ_ORG_CONTACT_ROLES','HZ_ORG_CONTACTS',
2174                 'ORG_CONTACT_ROLE_ID', 'ORG_CONTACT_ID',x_return_status);
2175 
2176    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2177      l_dup_exists := HZ_MERGE_DUP_CHECK.check_org_contact_role_dup(
2178                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2179                         x_return_status);
2180    END IF;
2181 
2182    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2183         do_org_contact_role_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2184                          x_return_status);
2185    END IF;
2186 
2187    x_to_id := l_to_id;
2188 EXCEPTION
2189   WHEN OTHERS THEN
2190     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2191     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2192     FND_MSG_PUB.ADD;
2193     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2194 END org_contact_role_merge;
2195 
2196 PROCEDURE financial_number_merge(
2197         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2198         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2199         x_to_id         IN OUT NOCOPY  NUMBER,
2200         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2201         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2202         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2203         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2204         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2205         x_return_status OUT NOCOPY          VARCHAR2
2206 ) IS
2207 l_to_id         NUMBER;
2208 l_dup_exists    VARCHAR2(20);
2209 
2210 BEGIN
2211    IF (x_to_id IS NULL) THEN
2212      l_to_id := FND_API.G_MISS_NUM;
2213    ELSE
2214      l_to_id := x_to_id;
2215    END IF;
2216 
2217    x_return_status := FND_API.G_RET_STS_SUCCESS;
2218 
2219    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2220                 p_to_fk_id, p_par_entity_name,
2221                 'HZ_MERGE_PKG.financial_number_merge',
2222                 'HZ_FINANCIAL_NUMBERS','HZ_FINANCIAL_REPORTS',
2223                 'FINANCIAL_NUMBER_ID', 'FINANCIAL_REPORT_ID',x_return_status);
2224 
2225    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2226      l_dup_exists := HZ_MERGE_DUP_CHECK.check_financial_number_dup(
2227                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2228                         x_return_status);
2229    END IF;
2230 
2231    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2232         do_financial_number_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2233                          x_return_status);
2234    END IF;
2235 
2236    x_to_id := l_to_id;
2237 EXCEPTION
2238   WHEN OTHERS THEN
2239     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2240     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2241     FND_MSG_PUB.ADD;
2242     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2243 END financial_number_merge;
2244 
2245 PROCEDURE per_languages_merge(
2246         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2247         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2248         x_to_id         IN OUT NOCOPY	NUMBER,
2249         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2250         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2251         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2252         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
2253         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2254 	x_return_status OUT NOCOPY          VARCHAR2
2255 ) IS
2256 l_to_id 	NUMBER;
2257 l_dup_exists    VARCHAR2(20);
2258 
2259 BEGIN
2260    IF (x_to_id IS NULL) THEN
2261      l_to_id := FND_API.G_MISS_NUM;
2262    ELSE
2263      l_to_id := x_to_id;
2264    END IF;
2265 
2266    x_return_status := FND_API.G_RET_STS_SUCCESS;
2267 
2268    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2269                 p_to_fk_id, p_par_entity_name,
2270                 'HZ_MERGE_PKG.per_languages_merge',
2271                 'HZ_PERSON_LANGUAGE','HZ_PARTIES',
2272                 'LANGUAGE_USE_REFERENCE_ID', 'PARTY_ID',x_return_status);
2273 
2274    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2275      l_dup_exists := HZ_MERGE_DUP_CHECK.check_languages_dup(
2276                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2277                         x_return_status);
2278    END IF;
2279 
2280    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2281         do_per_languages_transfer(p_from_id, l_to_id, p_from_fk_id, p_to_fk_id,
2282                          x_return_status);
2283    END IF;
2284 
2285    x_to_id := l_to_id;
2286 EXCEPTION
2287   WHEN OTHERS THEN
2288     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2289     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2290     FND_MSG_PUB.ADD;
2291     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2292 END per_languages_merge;
2293 
2294 PROCEDURE party_site_use_merge(
2295         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2296         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2297         x_to_id         IN OUT NOCOPY	NUMBER,
2298         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2299         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2300         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2301         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
2302         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2303 	x_return_status OUT NOCOPY          VARCHAR2
2304 ) IS
2305 l_to_id 	NUMBER;
2306 l_dup_exists    VARCHAR2(20);
2307 
2308 BEGIN
2309    IF (x_to_id IS NULL) THEN
2310      l_to_id := FND_API.G_MISS_NUM;
2311    ELSE
2312      l_to_id := x_to_id;
2313    END IF;
2314 
2315    x_return_status := FND_API.G_RET_STS_SUCCESS;
2316 
2317    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2318                 p_to_fk_id, p_par_entity_name,
2319                 'HZ_MERGE_PKG.party_site_use_merge',
2320                 'HZ_PARTY_SITE_USES','HZ_PARTY_SITES',
2321                 'PARTY_SITE_USE_ID', 'PARTY_SITE_ID',x_return_status);
2322 
2323    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2324      l_dup_exists := HZ_MERGE_DUP_CHECK.check_party_site_use_dup(
2325                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2326                         x_return_status);
2327    END IF;
2328 
2329    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2330         do_party_site_use_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2331                          x_return_status);
2332    END IF;
2333 
2334    x_to_id := l_to_id;
2335 EXCEPTION
2336   WHEN OTHERS THEN
2337     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2338     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2339     FND_MSG_PUB.ADD;
2340     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2341 END party_site_use_merge;
2342 
2343 PROCEDURE contact_point_merge2(
2344         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2345         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2346         x_to_id         IN OUT NOCOPY	NUMBER,
2347         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2348         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2349         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2350         p_batch_id	IN	NUMBER:=FND_API.G_MISS_NUM,
2351         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2352 	x_return_status OUT NOCOPY          VARCHAR2
2353 ) IS
2354 l_to_id 	NUMBER;
2355 l_dup_exists    VARCHAR2(20);
2356 l_dummy_id NUMBER;
2357 
2358 BEGIN
2359    IF (x_to_id IS NULL) THEN
2360      l_to_id := FND_API.G_MISS_NUM;
2361    ELSE
2362      l_to_id := x_to_id;
2363    END IF;
2364 
2365    x_return_status := FND_API.G_RET_STS_SUCCESS;
2366 
2367 
2368    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2369                 p_to_fk_id, p_par_entity_name,
2370                 'HZ_MERGE_PKG.contact_point_merge2',
2371                 'HZ_CONTACT_POINTS','HZ_PARTY_SITES',
2372                 'CONTACT_POINT_ID', 'PARTY_SITE_ID',x_return_status);
2373 
2374    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2375      l_dup_exists := HZ_MERGE_DUP_CHECK.check_contact_point_dup(
2376                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2377                         'HZ_PARTY_SITES', x_return_status);
2378    END IF;
2379 
2380    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2381         do_contact_point_transfer2(p_from_id, l_to_id, p_from_fk_id, p_to_fk_id,
2382                          x_return_status);
2383    END IF;
2384 
2385    IF (l_to_id IS NULL OR l_to_id = FND_API.G_MISS_NUM OR
2386            l_to_id = p_from_id) THEN
2387      FOR CPT IN (
2388       SELECT CONTACT_POINT_ID FROM HZ_STAGED_CONTACT_POINTS
2389       WHERE CONTACT_POINT_ID=p_from_id) LOOP
2390 
2391         HZ_DQM_SYNC.stage_contact_point_merge(
2392           'HZ_STAGED_CONTACT_POINTS',
2393           p_from_id,l_dummy_id,p_from_id,p_from_id,
2394           'HZ_CONTACT_POINTS',
2395           p_batch_id,p_batch_party_id,x_return_status);
2396      END LOOP;
2397    END IF;
2398 
2399    x_to_id := l_to_id;
2400 EXCEPTION
2401   WHEN OTHERS THEN
2402     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2403     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2404     FND_MSG_PUB.ADD;
2405     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2406 END contact_point_merge2;
2407 
2408 /*===========================================================================+
2409  | PROCEDURE                                                                 |
2410  |              contact_preference_merge                                     |
2411  |                                                                           |
2412  | DESCRIPTION                                                               |
2413  |                                                                           |
2414  | SCOPE - PRIVATE                                                           |
2415  |                                                                           |
2416  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
2417  |                                                                           |
2418  | ARGUMENTS  : IN:                                                          |
2419  |                p_entity_name                                              |
2420  |                p_from_id                                                  |
2421  |                p_from_fk_id                                               |
2422  |                p_to_fk_id                                                 |
2423  |                p_merge_operation                                          |
2424  |                p_par_entity_name                                          |
2425  |              OUT:                                                         |
2426  |                x_return_status                                            |
2427  |          IN/ OUT:                                                         |
2428  |                x_to_id                                                    |
2429  | RETURNS    : NONE                                                         |
2430  |                                                                           |
2431  | NOTES                                                                     |
2432  |                                                                           |
2433  | MODIFICATION HISTORY                                                      |
2434  |    Kate Shan          21-Aug-00  Created                                  |
2435  |                                                                           |
2436  +===========================================================================*/
2437 PROCEDURE contact_preference_merge(
2438         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2439         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2440         x_to_id         IN OUT NOCOPY  NUMBER,
2441         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2442         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2443         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2444         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2445         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2446         x_return_status OUT NOCOPY          VARCHAR2
2447 ) IS
2448 l_to_id         NUMBER;
2449 l_dup_exists    VARCHAR2(20);
2450 
2451 BEGIN
2452    IF (x_to_id IS NULL) THEN
2453      l_to_id := FND_API.G_MISS_NUM;
2454    ELSE
2455      l_to_id := x_to_id;
2456    END IF;
2457 
2458    x_return_status := FND_API.G_RET_STS_SUCCESS;
2459 
2460    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2461                 p_to_fk_id, p_par_entity_name,
2462                 'HZ_MERGE_PKG.contact_preference_merge',
2463                 'HZ_CONTACT_PREFERENCES','HZ_PARTIES',
2464                 'CONTACT_PREFERENCE_ID', 'PARTY_ID',x_return_status);
2465 
2466    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2467      l_dup_exists := HZ_MERGE_DUP_CHECK.check_contact_preference_dup(
2468                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2469                         'HZ_PARTIES',x_return_status);
2470    END IF;
2471 
2472    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2473        do_contact_pref_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2474                          x_return_status);
2475    END IF;
2476 
2477    x_to_id := l_to_id;
2478 EXCEPTION
2479   WHEN OTHERS THEN
2480     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2481     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2482     FND_MSG_PUB.ADD;
2483     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2484 END contact_preference_merge;
2485 
2486 /*===========================================================================+
2487  | PROCEDURE                                                                 |
2488  |              contact_preference_merge2                                    |
2489  |                                                                           |
2490  | DESCRIPTION                                                               |
2491  |                                                                           |
2492  | SCOPE - PRIVATE                                                           |
2493  |                                                                           |
2494  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
2495  |                                                                           |
2496  | ARGUMENTS  : IN:                                                          |
2497  |                p_entity_name                                              |
2498  |                p_from_id                                                  |
2499  |                p_from_fk_id                                               |
2500  |                p_to_fk_id                                                 |
2501  |                p_merge_operation                                          |
2502  |                p_par_entity_name                                          |
2503  |              OUT:                                                         |
2504  |                x_return_status                                            |
2505  |          IN/ OUT:                                                         |
2506  |                x_to_id                                                    |
2507  | RETURNS    : NONE                                                         |
2508  |                                                                           |
2509  | NOTES                                                                     |
2510  |                                                                           |
2511  | MODIFICATION HISTORY                                                      |
2512  |    Kate               21-Aug-00  Created                                  |
2513  |                                                                           |
2514  +===========================================================================*/
2515 PROCEDURE contact_preference_merge2(
2516         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2517         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2518         x_to_id         IN OUT NOCOPY  NUMBER,
2519         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2520         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2521         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2522         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2523         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2524         x_return_status OUT NOCOPY          VARCHAR2
2525 ) IS
2526 l_to_id         NUMBER;
2527 l_dup_exists    VARCHAR2(20);
2528 
2529 BEGIN
2530    IF (x_to_id IS NULL) THEN
2531      l_to_id := FND_API.G_MISS_NUM;
2532    ELSE
2533      l_to_id := x_to_id;
2534    END IF;
2535 
2536    x_return_status := FND_API.G_RET_STS_SUCCESS;
2537 
2538    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2539                 p_to_fk_id, p_par_entity_name,
2540                 'HZ_MERGE_PKG.contact_preference_merge2',
2541                 'HZ_CONTACT_PREFERENCES','HZ_PARTY_SITES',
2542                 'CONTACT_PREFERENCE_ID', 'PARTY_SITE_ID',x_return_status);
2543 
2544    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2545      l_dup_exists := HZ_MERGE_DUP_CHECK.check_contact_preference_dup(
2546                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2547                         'HZ_PARTY_SITES',x_return_status);
2548    END IF;
2549 
2550    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2551        do_contact_pref_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2552                          x_return_status);
2553    END IF;
2554 
2555    x_to_id := l_to_id;
2556 EXCEPTION
2557   WHEN OTHERS THEN
2558     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2559     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2560     FND_MSG_PUB.ADD;
2561     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2562 END contact_preference_merge2;
2563 
2564 
2565 /*===========================================================================+
2566  | PROCEDURE                                                                 |
2567  |              contact_preference_merge3                                    |
2568  |                                                                           |
2569  | DESCRIPTION                                                               |
2570  |                                                                           |
2571  | SCOPE - PRIVATE                                                           |
2572  |                                                                           |
2573  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED                                   |
2574  |                                                                           |
2575  | ARGUMENTS  : IN:                                                          |
2576  |                p_entity_name                                              |
2577  |                p_from_id                                                  |
2578  |                p_from_fk_id                                               |
2579  |                p_to_fk_id                                                 |
2580  |                p_merge_operation                                          |
2581  |                p_par_entity_name                                          |
2582  |              OUT:                                                         |
2583  |                x_return_status                                            |
2584  |          IN/ OUT:                                                         |
2585  |                x_to_id                                                    |
2586  | RETURNS    : NONE                                                         |
2587  |                                                                           |
2588  | NOTES                                                                     |
2589  |                                                                           |
2590  | MODIFICATION HISTORY                                                      |
2591  |    Kate Shan          21-Aug-00  Created                                  |
2592  |                                                                           |
2593  +===========================================================================*/
2594 PROCEDURE contact_preference_merge3(
2595         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2596         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2597         x_to_id         IN OUT NOCOPY  NUMBER,
2598         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2599         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2600         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2601         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2602         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2603         x_return_status OUT NOCOPY          VARCHAR2
2604 ) IS
2605 l_to_id         NUMBER;
2606 l_dup_exists    VARCHAR2(20);
2607 
2608 BEGIN
2609    IF (x_to_id IS NULL) THEN
2610      l_to_id := FND_API.G_MISS_NUM;
2611    ELSE
2612      l_to_id := x_to_id;
2613    END IF;
2614 
2615    x_return_status := FND_API.G_RET_STS_SUCCESS;
2616 
2617    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2618                 p_to_fk_id, p_par_entity_name,
2619                 'HZ_MERGE_PKG.contact_preference_merge3',
2620                 'HZ_CONTACT_PREFERENCES','HZ_CONTACT_POINTS',
2621                 'CONTACT_PREFERENCE_ID', 'CONTACT_POINT_ID',x_return_status);
2622 
2623    IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_to_id = FND_API.G_MISS_NUM) THEN
2624      l_dup_exists := HZ_MERGE_DUP_CHECK.check_contact_preference_dup(
2625                         p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2626                         'HZ_CONTACT_POINTS',x_return_status);
2627    END IF;
2628 
2629    IF (x_return_status =FND_API.G_RET_STS_SUCCESS) THEN
2630        do_contact_pref_transfer(p_from_id,l_to_id, p_from_fk_id, p_to_fk_id,
2631                          x_return_status);
2632    END IF;
2633 
2634    x_to_id := l_to_id;
2635 EXCEPTION
2636   WHEN OTHERS THEN
2637     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2638     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2639     FND_MSG_PUB.ADD;
2640     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2641 END contact_preference_merge3;
2642 
2643 
2644 PROCEDURE displayed_duns_merge(
2645         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2646         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2647         x_to_id         IN OUT NOCOPY  NUMBER,
2648         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2649         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2650         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2651         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2652         p_batch_party_id IN     NUMBER:=FND_API.G_MISS_NUM,
2653         x_return_status   OUT NOCOPY  VARCHAR2
2654 ) IS
2655 
2656 l_to_id         NUMBER;
2657 
2658 BEGIN
2659    IF (x_to_id IS NULL) THEN
2660      l_to_id := FND_API.G_MISS_NUM;
2661    ELSE
2662      l_to_id := x_to_id;
2663    END IF;
2664 
2665    x_return_status := FND_API.G_RET_STS_SUCCESS;
2666 
2667    check_params(p_entity_name, p_from_id, l_to_id, p_from_fk_id,
2668                 p_to_fk_id, p_par_entity_name,
2669                 'HZ_MERGE_PKG.displayed_duns_merge',
2670                 'HZ_ORGANIZATION_PROFILES','HZ_PARTIES',
2671                 'ORGANIZATION_PROFILE_ID', 'PARTY_ID',x_return_status);
2672 
2673    do_displayed_duns_merge(p_from_id, l_to_id, p_from_fk_id, p_to_fk_id,
2674                          x_return_status);
2675 EXCEPTION
2676   WHEN OTHERS THEN
2677     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2678     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2679     FND_MSG_PUB.ADD;
2680     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2681 END displayed_duns_merge;
2682 
2683 
2684 PROCEDURE check_params(
2685         p_entity_name   IN      VARCHAR2:=FND_API.G_MISS_CHAR,
2686         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2687         p_to_id         IN	NUMBER:=FND_API.G_MISS_NUM,
2688         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2689         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2690         p_par_entity_name IN    VARCHAR2:=FND_API.G_MISS_CHAR,
2691 	p_proc_name	  IN	VARCHAR2,
2692 	p_exp_ent_name	IN	VARCHAR2:=FND_API.G_MISS_CHAR,
2693         p_exp_par_ent_name IN   VARCHAR2:=FND_API.G_MISS_CHAR,
2694         p_pk_column	IN	VARCHAR2:=FND_API.G_MISS_CHAR,
2695 	p_par_pk_column	IN	VARCHAR2:=FND_API.G_MISS_CHAR,
2696 	x_return_status IN OUT NOCOPY          VARCHAR2
2697 ) IS
2698 
2699 BEGIN
2700    IF (p_entity_name <> p_exp_ent_name OR
2701        p_par_entity_name <> p_exp_par_ent_name) THEN
2702      FND_MESSAGE.SET_NAME('AR', 'HZ_INVALID_MERGE_ENTITIES');
2703      FND_MESSAGE.SET_TOKEN('ENTITY' ,p_entity_name);
2704      FND_MESSAGE.SET_TOKEN('PENTITY' ,p_par_entity_name);
2705      FND_MESSAGE.SET_TOKEN('MPROC' ,p_proc_name);
2706      FND_MSG_PUB.ADD;
2707      x_return_status := FND_API.G_RET_STS_ERROR;
2708    END IF;
2709 
2710    IF (p_from_id = FND_API.G_MISS_NUM) THEN
2711      FND_MESSAGE.SET_NAME('AR', 'HZ_INVALID_MERGE_FROM_REC');
2712      FND_MESSAGE.SET_TOKEN('MPROC' ,p_proc_name);
2713      FND_MESSAGE.SET_TOKEN('ENTITY',p_entity_name);
2714      FND_MESSAGE.SET_TOKEN('PKCOL',p_pk_column);
2715      FND_MESSAGE.SET_TOKEN('PKVALUE',p_to_id);
2716      FND_MSG_PUB.ADD;
2717      x_return_status := FND_API.G_RET_STS_ERROR;
2718    END IF;
2719 
2720    IF (p_exp_par_ent_name <> FND_API.G_MISS_CHAR AND
2721        p_to_fk_id = FND_API.G_MISS_NUM ) THEN
2722      FND_MESSAGE.SET_NAME('AR', 'HZ_INVALID_MERGE_FROM_PAR_REC');
2723      FND_MESSAGE.SET_TOKEN('MPROC' ,p_proc_name);
2724      FND_MESSAGE.SET_TOKEN('ENTITY',p_par_entity_name);
2725      FND_MESSAGE.SET_TOKEN('PKCOL',p_pk_column);
2726      FND_MESSAGE.SET_TOKEN('PKVALUE',p_to_id);
2727      FND_MSG_PUB.ADD;
2728      x_return_status := FND_API.G_RET_STS_ERROR;
2729    END IF;
2730 EXCEPTION
2731   WHEN OTHERS THEN
2732     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2733     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2734     FND_MSG_PUB.ADD;
2735     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2736 END check_params;
2737 
2738 /***** Private Procedure *****/
2739 
2740 PROCEDURE do_cust_account_transfer(
2741         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2742         x_to_id         IN OUT NOCOPY  NUMBER,
2743         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2744         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2745 	x_return_status IN OUT NOCOPY          VARCHAR2
2746 ) IS
2747 l_msg_data                     VARCHAR2(2000);
2748 l_msg_count                    NUMBER := 0;
2749 BEGIN
2750 
2751   IF (x_to_id <> FND_API.G_MISS_NUM AND
2752       x_to_id <> p_from_id) THEN
2753     UPDATE HZ_CUST_ACCOUNTS
2754     SET
2755       STATUS = 'M',
2756       last_update_date = hz_utility_pub.last_update_date,
2757       last_updated_by = hz_utility_pub.user_id,
2758       last_update_login = hz_utility_pub.last_update_login,
2759       request_id =  hz_utility_pub.request_id,
2760       program_application_id = hz_utility_pub.program_application_id,
2761       program_id = hz_utility_pub.program_id,
2762       program_update_date = sysdate
2763     WHERE cust_account_id = p_from_id;
2764        HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
2765                     p_init_msg_list => FND_API.G_FALSE,
2766                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
2767                     p_old_owner_table_id   => p_from_id,
2768 	            p_new_owner_table_id   => x_to_id,
2769                     p_owner_table_name  =>'HZ_CUST_ACCOUNTS',
2770                     p_orig_system => null,
2771                     p_orig_system_reference => null,
2772                     p_reason_code => 'MERGED',
2773                     x_return_status => x_return_status,
2774                     x_msg_count =>l_msg_count,
2775                     x_msg_data  =>l_msg_data);
2776       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2777 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2778 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
2779 	FND_MSG_PUB.ADD;
2780 	x_return_status := FND_API.G_RET_STS_ERROR;
2781 	RETURN;
2782       END IF;
2783   ELSE
2784     -- Update and set party_id = p_to_fk_id where pk = from_id
2785     UPDATE HZ_CUST_ACCOUNTS
2786     SET
2787       party_id = p_to_fk_id,
2788       last_update_date = hz_utility_pub.last_update_date,
2789       last_updated_by = hz_utility_pub.user_id,
2790       last_update_login = hz_utility_pub.last_update_login,
2791       request_id =  hz_utility_pub.request_id,
2792       program_application_id = hz_utility_pub.program_application_id,
2793       program_id = hz_utility_pub.program_id,
2794       program_update_date = sysdate
2795     WHERE cust_account_id = p_from_id;
2796   END IF;
2797 
2798 EXCEPTION
2799   WHEN OTHERS THEN
2800     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2801     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2802     FND_MSG_PUB.ADD;
2803     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2804 END do_cust_account_transfer;
2805 
2806 PROCEDURE do_cust_account_role_transfer(
2807         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2808 	x_to_id		IN OUT NOCOPY	NUMBER,
2809         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2810         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2811 	x_return_status IN OUT NOCOPY          VARCHAR2
2812 ) IS
2813 
2814 l_msg_data                     VARCHAR2(2000);
2815 l_msg_count                    NUMBER := 0;
2816 
2817 --Start of Bug No : 3373079
2818 l_g_miss_num NUMBER;
2819 CURSOR c_from_acct_role_det IS
2820 SELECT cust_account_id,cust_acct_site_id
2821 FROM   HZ_CUST_ACCOUNT_ROLES
2822 WHERE  cust_account_role_id = p_from_id
2823 --AND    party_id = p_from_fk_id
2824 AND    NVL(STATUS,'A') = 'A';
2825 
2826 CURSOR c_to_acct_role_det(p_acct_id NUMBER,p_acct_site_id NUMBER) IS
2827 SELECT count(1)
2828 FROM   HZ_CUST_ACCOUNT_ROLES
2829 WHERE  party_id = p_to_fk_id
2830 AND    cust_account_id = p_acct_id
2831 AND    NVL(cust_acct_site_id,l_g_miss_num) = NVL(p_acct_site_id,l_g_miss_num)
2832 AND    NVL(STATUS,'A') = 'A';
2833 
2834 l_cust_account_id    NUMBER(15);
2835 l_cust_acct_site_id  NUMBER(15);
2836 l_status             VARCHAR2(1);
2837 l_count              NUMBER;
2838 --End of Bug No : 3373079
2839 BEGIN
2840   l_g_miss_num := FND_API.G_MISS_NUM;
2841 
2842   IF (x_to_id <> FND_API.G_MISS_NUM AND
2843       x_to_id <> p_from_id) THEN
2844     UPDATE HZ_CUST_ACCOUNT_ROLES
2845     SET
2846       STATUS = 'M',
2847       last_update_date = hz_utility_pub.last_update_date,
2848       last_updated_by = hz_utility_pub.user_id,
2849       last_update_login = hz_utility_pub.last_update_login,
2850       request_id =  hz_utility_pub.request_id,
2851       program_application_id = hz_utility_pub.program_application_id,
2852       program_id = hz_utility_pub.program_id,
2853       program_update_date = sysdate
2854     WHERE cust_account_role_id = p_from_id;
2855 
2856       HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
2857                     p_init_msg_list => FND_API.G_FALSE,
2858                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
2859                     p_old_owner_table_id   => p_from_id,
2860 	            p_new_owner_table_id   => x_to_id,
2861                     p_owner_table_name  =>'HZ_CUST_ACCOUNT_ROLES',
2862                     p_orig_system => null,
2863                     p_orig_system_reference => null,
2864                     p_reason_code => 'MERGED',
2865                     x_return_status => x_return_status,
2866                     x_msg_count =>l_msg_count,
2867                     x_msg_data  =>l_msg_data);
2868      IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2869 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2870 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
2871 	FND_MSG_PUB.ADD;
2872 	x_return_status := FND_API.G_RET_STS_ERROR;
2873 	RETURN;
2874      END IF;
2875   ELSE
2876    --Start of Bug No : 3373079. Duplicate account roles should not be created through the party merge.
2877    --If the account roles are duplicate, inactivate the duplicate account role.
2878     l_status := 'A';
2879     IF(p_from_fk_id <> p_to_fk_id) THEN
2880      --Get the from role account id and site id
2881       OPEN  c_from_acct_role_det;
2882       FETCH c_from_acct_role_det INTO l_cust_account_id,l_cust_acct_site_id;
2883       CLOSE c_from_acct_role_det;
2884       IF(l_cust_account_id IS NOT NULL) THEN
2885        --Set the status of duplicate account role to 'I'
2886        OPEN c_to_acct_role_det(l_cust_account_id,l_cust_acct_site_id);
2887        FETCH c_to_acct_role_det INTO l_count;
2888        CLOSE c_to_acct_role_det;
2889        IF(l_count >0)THEN
2890          l_status :='I';
2891        END IF;
2892       END IF;
2893     END IF;
2894    --End of Bug No : 3373079
2895     -- Update and set party_id = p_to_fk_id where pk = from_id
2896     UPDATE HZ_CUST_ACCOUNT_ROLES
2897     SET
2898       party_id = p_to_fk_id,
2899       status   = l_status,
2900       last_update_date = hz_utility_pub.last_update_date,
2901       last_updated_by = hz_utility_pub.user_id,
2902       last_update_login = hz_utility_pub.last_update_login,
2903       request_id =  hz_utility_pub.request_id,
2904       program_application_id = hz_utility_pub.program_application_id,
2905       program_id = hz_utility_pub.program_id,
2906       program_update_date = sysdate
2907     WHERE cust_account_role_id = p_from_id;
2908 
2909   END IF;
2910 
2911 EXCEPTION
2912   WHEN OTHERS THEN
2913     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2914     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2915     FND_MSG_PUB.ADD;
2916     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2917 END do_cust_account_role_transfer;
2918 
2919 PROCEDURE do_fin_profile_transfer(
2920         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2921         x_to_id         IN OUT NOCOPY  NUMBER,
2922         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2923         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2924 	x_return_status IN OUT NOCOPY          VARCHAR2
2925 ) IS
2926 
2927 BEGIN
2928 
2929   IF (x_to_id <> FND_API.G_MISS_NUM AND
2930       x_to_id <> p_from_id) THEN
2931     UPDATE HZ_FINANCIAL_PROFILE
2932     SET
2933       STATUS = 'M',
2934       last_update_date = hz_utility_pub.last_update_date,
2935       last_updated_by = hz_utility_pub.user_id,
2936       last_update_login = hz_utility_pub.last_update_login,
2937       request_id =  hz_utility_pub.request_id,
2938       program_application_id = hz_utility_pub.program_application_id,
2939       program_id = hz_utility_pub.program_id,
2940       program_update_date = sysdate
2941     WHERE financial_profile_id = p_from_id;
2942   ELSE
2943     -- Update and set party_id = p_to_fk_id where pk = from_id
2944     UPDATE HZ_FINANCIAL_PROFILE
2945     SET
2946       party_id = p_to_fk_id,
2947       last_update_date = hz_utility_pub.last_update_date,
2948       last_updated_by = hz_utility_pub.user_id,
2949       last_update_login = hz_utility_pub.last_update_login,
2950       request_id =  hz_utility_pub.request_id,
2951       program_application_id = hz_utility_pub.program_application_id,
2952       program_id = hz_utility_pub.program_id,
2953       program_update_date = sysdate
2954     WHERE financial_profile_id = p_from_id;
2955 
2956   END IF;
2957 
2958 EXCEPTION
2959   WHEN OTHERS THEN
2960     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
2961     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2962     FND_MSG_PUB.ADD;
2963     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2964 END do_fin_profile_transfer;
2965 
2966 PROCEDURE do_contact_point_transfer(
2967         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
2968         x_to_id         IN OUT NOCOPY  NUMBER,
2969         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
2970         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
2971 	x_return_status IN OUT NOCOPY          VARCHAR2
2972 ) IS
2973 
2974 l_exists VARCHAR2(10);
2975 l_primary_flag VARCHAR2(1):='N';
2976 l_msg_data                     VARCHAR2(2000);
2977 l_msg_count                    NUMBER := 0;
2978 
2979 ---BugNo:1695595.Added local variables and cursors----
2980 
2981 l_contact_point_type	 VARCHAR2(30);
2982 l_fp_primary_flag	 VARCHAR2(1);
2983 l_pri_purpose_flag       VARCHAR2(1) := 'N';
2984 l_fp_pri_pur_flag        VARCHAR2(1);
2985 l_url			 VARCHAR2(2000);
2986 l_email_address		 VARCHAR2(2000);
2987 l_contact_point_purpose	 VARCHAR2(30);
2988 l_phone_line_type	 VARCHAR2(30);
2989 l_phone_country_code	 VARCHAR2(10);
2990 l_phone_area_code	 VARCHAR2(10);
2991 l_phone_number		 VARCHAR2(40);
2992 l_phone_extension	 VARCHAR2(20);
2993 
2994 
2995 
2996 CURSOR c_fp_cpt_details IS
2997 SELECT contact_point_type,primary_flag, url, email_address,
2998        contact_point_purpose,phone_line_type, phone_country_code,
2999        phone_area_code,phone_number,phone_extension ,primary_by_purpose
3000 FROM HZ_CONTACT_POINTS
3001 WHERE owner_table_name = 'HZ_PARTIES'
3002       AND contact_point_id = p_from_id
3003       AND rownum=1;
3004 
3005 ----------------
3006 BEGIN
3007 
3008   IF (x_to_id <> FND_API.G_MISS_NUM AND
3009       x_to_id <> p_from_id) THEN
3010     UPDATE HZ_CONTACT_POINTS
3011     SET
3012       STATUS = 'M',
3013       last_update_date = hz_utility_pub.last_update_date,
3014       last_updated_by = hz_utility_pub.user_id,
3015       last_update_login = hz_utility_pub.last_update_login,
3016       request_id =  hz_utility_pub.request_id,
3017       program_application_id = hz_utility_pub.program_application_id,
3018       program_id = hz_utility_pub.program_id,
3019       program_update_date = sysdate
3020     WHERE contact_point_id = p_from_id;
3021 
3022     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE STAGED_FLAG='N'
3023     AND RECORD_ID=p_from_id AND ENTITY='CONTACT_POINTS';
3024 
3025            HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
3026                     p_init_msg_list => FND_API.G_FALSE,
3027                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
3028                     p_old_owner_table_id   => p_from_id,
3029 	            p_new_owner_table_id   => x_to_id,
3030                     p_owner_table_name  =>'HZ_CONTACT_POINTS',
3031                     p_orig_system => null,
3032                     p_orig_system_reference => null,
3033                     p_reason_code => 'MERGED',
3034                     x_return_status => x_return_status,
3035                     x_msg_count =>l_msg_count,
3036                     x_msg_data  =>l_msg_data);
3037       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3038 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3039 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
3040 	FND_MSG_PUB.ADD;
3041 	x_return_status := FND_API.G_RET_STS_ERROR;
3042 	RETURN;
3043       END IF;
3044 
3045   ELSE
3046       --- Transfer ---
3047 
3048     /* BugNo:1695595. Added the condition CONTACT_POINT_TYPE=l_contact_point_type
3049        to get the primary flag associated to from party contact point type.
3050     */
3051     OPEN c_fp_cpt_details;
3052     FETCH c_fp_cpt_details into l_contact_point_type,l_fp_primary_flag,
3053                                 l_url,l_email_address,l_contact_point_purpose,
3054                                 l_phone_line_type,l_phone_country_code,
3055                                 l_phone_area_code,l_phone_number,l_phone_extension,
3056                                 l_fp_pri_pur_flag ;
3057     CLOSE c_fp_cpt_details;
3058 
3059     IF l_fp_pri_pur_flag   = 'Y' THEN
3060     BEGIN
3061         SELECT 'Exists'
3062         INTO    l_exists
3063         FROM    HZ_CONTACT_POINTS
3064         WHERE   PRIMARY_BY_PURPOSE    = 'Y'
3065         AND     CONTACT_POINT_PURPOSE = l_contact_point_purpose
3066         AND     OWNER_TABLE_NAME      = 'HZ_PARTIES'
3067         AND     CONTACT_POINT_TYPE    = l_contact_point_type
3068         AND     OWNER_TABLE_ID        = p_to_fk_id
3069         AND     ROWNUM = 1;
3070     EXCEPTION
3071     WHEN NO_DATA_FOUND THEN
3072         l_pri_purpose_flag := 'Y';
3073     END;
3074     END IF;
3075 
3076     IF l_fp_primary_flag  = 'Y' THEN
3077     BEGIN
3078         SELECT 'Exists'
3079         INTO    l_exists
3080         FROM    HZ_CONTACT_POINTS
3081         WHERE   primary_flag      = 'Y'
3082         AND     OWNER_TABLE_NAME  = 'HZ_PARTIES'
3083         AND     CONTACT_POINT_TYPE= l_contact_point_type
3084         AND     OWNER_TABLE_ID    = p_to_fk_id
3085         AND     ROWNUM = 1;
3086     EXCEPTION
3087     WHEN NO_DATA_FOUND THEN
3088       --BugNo:1695595.Changed l_primary_flag value from 'Y' to from contact point
3089       --primary flag value.
3090        l_primary_flag   :=l_fp_primary_flag;
3091    END;
3092    END IF;
3093 
3094 
3095     --BugNo:1695595.Added code to update denormalized columns.------
3096     IF (l_primary_flag='Y' AND l_contact_point_type IN ('WEB','EMAIL','PHONE')) THEN
3097      do_denormalize_contact_point(p_to_fk_id,
3098 				  l_contact_point_type,
3099 				  l_url,
3100 				  l_email_address,
3101 				  p_from_id,
3102 				  l_contact_point_purpose,
3103 				  l_phone_line_type,
3104 				  l_phone_country_code,
3105 				  l_phone_area_code,
3106 				  l_phone_number,
3107 				  l_phone_extension);
3108     END IF;
3109 
3110     -----------------------
3111     -- Update and set party_id = p_to_fk_id where pk = from_id
3112     UPDATE HZ_CONTACT_POINTS
3113     SET
3114       owner_table_id = p_to_fk_id,
3115       primary_flag = l_primary_flag,
3116       primary_by_purpose = l_pri_purpose_flag,
3117       last_update_date = hz_utility_pub.last_update_date,
3118       last_updated_by = hz_utility_pub.user_id,
3119       last_update_login = hz_utility_pub.last_update_login,
3120       request_id =  hz_utility_pub.request_id,
3121       program_application_id = hz_utility_pub.program_application_id,
3122       program_id = hz_utility_pub.program_id,
3123       program_update_date = sysdate
3124     WHERE contact_point_id = p_from_id;
3125 
3126   END IF;
3127 
3128 EXCEPTION
3129   WHEN OTHERS THEN
3130     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3131     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3132     FND_MSG_PUB.ADD;
3133     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3134 END do_contact_point_transfer;
3135 
3136 PROCEDURE do_contact_point_transfer2(
3137         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3138         x_to_id         IN OUT NOCOPY  NUMBER,
3139         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3140         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3141 	x_return_status IN OUT NOCOPY          VARCHAR2
3142 ) IS
3143 
3144 l_msg_data                     VARCHAR2(2000);
3145 l_msg_count                    NUMBER := 0;
3146 l_exists VARCHAR2(10);
3147 l_fp_primary_flag VARCHAR2(1);
3148 l_fp_pri_purpose_flag VARCHAR2(1);
3149 l_primary_flag VARCHAR2(1):='N';
3150 l_pri_purpose_flag VARCHAR2(1):='N';
3151 l_contact_point_type     VARCHAR2(30);
3152 l_contact_point_purpose  HZ_CONTACT_POINTS.CONTACT_POINT_PURPOSE%TYPE;
3153 
3154 CURSOR c_fp_cpt_details IS
3155 SELECT contact_point_type, contact_point_purpose,primary_flag,primary_by_purpose
3156 FROM HZ_CONTACT_POINTS
3157 WHERE owner_table_name = 'HZ_PARTY_SITES'
3158       AND contact_point_id = p_from_id
3159       AND rownum=1;
3160 
3161 
3162 BEGIN
3163 
3164   IF (x_to_id <> FND_API.G_MISS_NUM AND
3165       x_to_id <> p_from_id) THEN
3166     -- Update  and set status to merged
3167     UPDATE HZ_CONTACT_POINTS
3168     SET
3169       STATUS = 'M',
3170       last_update_date = hz_utility_pub.last_update_date,
3171       last_updated_by = hz_utility_pub.user_id,
3172       last_update_login = hz_utility_pub.last_update_login,
3173       request_id =  hz_utility_pub.request_id,
3174       program_application_id = hz_utility_pub.program_application_id,
3175       program_id = hz_utility_pub.program_id,
3176       program_update_date = sysdate
3177     WHERE contact_point_id = p_from_id;
3178 
3179     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE STAGED_FLAG='N'
3180     AND RECORD_ID=p_from_id AND ENTITY='CONTACT_POINTS';
3181 
3182      HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
3183                     p_init_msg_list => FND_API.G_FALSE,
3184                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
3185                     p_old_owner_table_id   => p_from_id,
3186 	            p_new_owner_table_id   => x_to_id,
3187                     p_owner_table_name  =>'HZ_CONTACT_POINTS',
3188                     p_orig_system => null,
3189                     p_orig_system_reference => null,
3190                     p_reason_code => 'MERGED',
3191                     x_return_status => x_return_status,
3192                     x_msg_count =>l_msg_count,
3193                     x_msg_data  =>l_msg_data);
3194       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3195 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3196 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
3197 	FND_MSG_PUB.ADD;
3198 	x_return_status := FND_API.G_RET_STS_ERROR;
3199 	RETURN;
3200       END IF;
3201   ELSE
3202     --- Transfer ---
3203     OPEN c_fp_cpt_details;
3204     FETCH c_fp_cpt_details into l_contact_point_type, l_contact_point_purpose,
3205                                 l_fp_primary_flag, l_fp_pri_purpose_flag;
3206     CLOSE c_fp_cpt_details;
3207 
3208     IF l_fp_pri_purpose_flag = 'Y' THEN
3209     BEGIN
3210         SELECT 'Exists'
3211         INTO l_exists
3212         FROM HZ_CONTACT_POINTS
3213         WHERE PRIMARY_BY_PURPOSE    = 'Y'
3214         AND   CONTACT_POINT_PURPOSE = l_contact_point_purpose
3215         AND   OWNER_TABLE_NAME      = 'HZ_PARTY_SITES'
3216         AND   CONTACT_POINT_TYPE    = l_contact_point_type
3217         AND   OWNER_TABLE_ID        = p_to_fk_id
3218         AND   ROWNUM = 1;
3219 
3220     EXCEPTION
3221     WHEN NO_DATA_FOUND THEN
3222         l_pri_purpose_flag := 'Y';
3223     END;
3224     END IF;
3225 
3226     IF l_fp_primary_flag  = 'Y' THEN
3227     BEGIN
3228         SELECT 'Exists'
3229           INTO l_exists
3230           FROM HZ_CONTACT_POINTS
3231          WHERE PRIMARY_FLAG        = 'Y'
3232            AND OWNER_TABLE_NAME    = 'HZ_PARTY_SITES'
3233            AND OWNER_TABLE_ID      = p_to_fk_id
3234            AND CONTACT_POINT_TYPE  = l_contact_point_type
3235            AND ROWNUM = 1;
3236     EXCEPTION
3237     WHEN NO_DATA_FOUND THEN
3238       l_primary_flag := 'Y';
3239     END;
3240     END IF;
3241 
3242     -- Update and set party_id = p_to_fk_id where pk = from_id
3243     UPDATE HZ_CONTACT_POINTS
3244     SET
3245       owner_table_id = p_to_fk_id,
3246       primary_flag = l_primary_flag,
3247       primary_by_purpose = l_pri_purpose_flag,
3248       last_update_date = hz_utility_pub.last_update_date,
3249       last_updated_by = hz_utility_pub.user_id,
3250       last_update_login = hz_utility_pub.last_update_login,
3251       request_id =  hz_utility_pub.request_id,
3252       program_application_id = hz_utility_pub.program_application_id,
3253       program_id = hz_utility_pub.program_id,
3254       program_update_date = sysdate
3255     WHERE contact_point_id = p_from_id;
3256 
3257   END IF;
3258 
3259 EXCEPTION
3260   WHEN OTHERS THEN
3261     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3262     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3263     FND_MSG_PUB.ADD;
3264     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3265 END do_contact_point_transfer2;
3266 
3267 PROCEDURE do_contact_pref_transfer(
3268         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3269         x_to_id         IN OUT NOCOPY  NUMBER,
3270         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3271         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3272         x_return_status IN OUT NOCOPY          VARCHAR2
3273 ) IS
3274 
3275 BEGIN
3276   IF (x_to_id <> FND_API.G_MISS_NUM AND
3277       x_to_id <> p_from_id) THEN
3278     UPDATE HZ_CONTACT_PREFERENCES
3279     SET
3280       status = 'M',
3281       last_update_date = hz_utility_pub.last_update_date,
3282       last_updated_by = hz_utility_pub.user_id,
3283       last_update_login = hz_utility_pub.last_update_login,
3284       request_id =  hz_utility_pub.request_id,
3285       program_application_id = hz_utility_pub.program_application_id,
3286       program_id = hz_utility_pub.program_id,
3287       program_update_date = sysdate
3288     WHERE contact_preference_id = p_from_id;
3289   ELSE
3290     -- Update and set contact_level_table_id = p_to_fk_id where pk = from_id
3291     UPDATE HZ_CONTACT_PREFERENCES
3292     SET
3293       contact_level_table_id = p_to_fk_id,
3294       last_update_date = hz_utility_pub.last_update_date,
3295       last_updated_by = hz_utility_pub.user_id,
3296       last_update_login = hz_utility_pub.last_update_login,
3297       request_id =  hz_utility_pub.request_id,
3298       program_application_id = hz_utility_pub.program_application_id,
3299       program_id = hz_utility_pub.program_id,
3300       program_update_date = sysdate
3301     WHERE contact_preference_id = p_from_id;
3302 
3303   END IF;
3304 
3305 EXCEPTION
3306   WHEN OTHERS THEN
3307     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3308     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3309     FND_MSG_PUB.ADD;
3310     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3311 END do_contact_pref_transfer;
3312 
3313 PROCEDURE do_references_transfer(
3314         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3315         x_to_id         IN OUT NOCOPY  NUMBER,
3316         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3317         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3318 	x_return_status IN OUT NOCOPY          VARCHAR2
3319 ) IS
3320 
3321 BEGIN
3322 
3323   IF (x_to_id <> FND_API.G_MISS_NUM AND
3324       x_to_id <> p_from_id) THEN
3325     UPDATE HZ_REFERENCES
3326     SET
3327       status = 'M',
3328       last_update_date = hz_utility_pub.last_update_date,
3329       last_updated_by = hz_utility_pub.user_id,
3330       last_update_login = hz_utility_pub.last_update_login,
3331       request_id =  hz_utility_pub.request_id,
3332       program_application_id = hz_utility_pub.program_application_id,
3333       program_id = hz_utility_pub.program_id,
3334       program_update_date = sysdate
3335     WHERE reference_id = p_from_id;
3336   ELSE
3337     -- Update and set party_id = p_to_fk_id where pk = from_id
3338     UPDATE HZ_REFERENCES
3339     SET
3340       referenced_party_id = p_to_fk_id,
3341       last_update_date = hz_utility_pub.last_update_date,
3342       last_updated_by = hz_utility_pub.user_id,
3343       last_update_login = hz_utility_pub.last_update_login,
3344       request_id =  hz_utility_pub.request_id,
3345       program_application_id = hz_utility_pub.program_application_id,
3346       program_id = hz_utility_pub.program_id,
3347       program_update_date = sysdate
3348     WHERE reference_id = p_from_id;
3349 
3350   END IF;
3351 
3352 EXCEPTION
3353   WHEN OTHERS THEN
3354     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3355     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3356     FND_MSG_PUB.ADD;
3357     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3358 END do_references_transfer;
3359 
3360 PROCEDURE do_certification_transfer(
3361         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3362         x_to_id         IN OUT NOCOPY  NUMBER,
3363         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3364         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3365 	x_return_status IN OUT NOCOPY          VARCHAR2
3366 ) IS
3367 
3368 BEGIN
3369 
3370   IF (x_to_id <> FND_API.G_MISS_NUM AND
3371       x_to_id <> p_from_id) THEN
3372     UPDATE HZ_CERTIFICATIONS
3373     SET
3374       STATUS = 'M',
3375       last_update_date = hz_utility_pub.last_update_date,
3376       last_updated_by = hz_utility_pub.user_id,
3377       last_update_login = hz_utility_pub.last_update_login,
3378       request_id =  hz_utility_pub.request_id,
3379       program_application_id = hz_utility_pub.program_application_id,
3380       program_id = hz_utility_pub.program_id,
3381       program_update_date = sysdate
3382     WHERE certification_id = p_from_id;
3383   ELSE
3384     -- Update and set party_id = p_to_fk_id where pk = from_id
3385     UPDATE HZ_CERTIFICATIONS
3386     SET
3387       party_id = p_to_fk_id,
3388       last_update_date = hz_utility_pub.last_update_date,
3389       last_updated_by = hz_utility_pub.user_id,
3390       last_update_login = hz_utility_pub.last_update_login,
3391       request_id =  hz_utility_pub.request_id,
3392       program_application_id = hz_utility_pub.program_application_id,
3393       program_id = hz_utility_pub.program_id,
3394       program_update_date = sysdate
3395     WHERE certification_id = p_from_id;
3396 
3397   END IF;
3398 
3399 EXCEPTION
3400   WHEN OTHERS THEN
3401     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3402     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3403     FND_MSG_PUB.ADD;
3404     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3405 END do_certification_transfer;
3406 
3407 PROCEDURE do_credit_ratings_transfer(
3408         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3409         x_to_id         IN OUT NOCOPY  NUMBER,
3410         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3411         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3412 	x_return_status IN OUT NOCOPY          VARCHAR2
3413 ) IS
3414 
3415 BEGIN
3416 
3417   IF (x_to_id <> FND_API.G_MISS_NUM AND
3418       x_to_id <> p_from_id) THEN
3419     UPDATE HZ_CREDIT_RATINGS
3420     SET
3421       STATUS = 'M',
3422       last_update_date = hz_utility_pub.last_update_date,
3423       last_updated_by = hz_utility_pub.user_id,
3424       last_update_login = hz_utility_pub.last_update_login,
3425       request_id =  hz_utility_pub.request_id,
3426       program_application_id = hz_utility_pub.program_application_id,
3427       program_id = hz_utility_pub.program_id,
3428       program_update_date = sysdate
3429     WHERE credit_rating_id = p_from_id;
3430   ELSE
3431     -- Update and set party_id = p_to_fk_id where pk = from_id
3432     UPDATE HZ_CREDIT_RATINGS
3433     SET
3434       party_id = p_to_fk_id,
3435       last_update_date = hz_utility_pub.last_update_date,
3436       last_updated_by = hz_utility_pub.user_id,
3437       last_update_login = hz_utility_pub.last_update_login,
3438       request_id =  hz_utility_pub.request_id,
3439       program_application_id = hz_utility_pub.program_application_id,
3440       program_id = hz_utility_pub.program_id,
3441       program_update_date = sysdate
3442     WHERE credit_rating_id = p_from_id;
3443 
3444   END IF;
3445 
3446 EXCEPTION
3447   WHEN OTHERS THEN
3448     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3449     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3450     FND_MSG_PUB.ADD;
3451     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3452 END do_credit_ratings_transfer;
3453 
3454 PROCEDURE do_security_issued_transfer(
3455         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3456         x_to_id         IN OUT NOCOPY  NUMBER,
3457         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3458         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3459 	x_return_status IN OUT NOCOPY          VARCHAR2
3460 ) IS
3461 
3462 BEGIN
3463 
3464   IF (x_to_id <> FND_API.G_MISS_NUM AND
3465       x_to_id <> p_from_id) THEN
3466     UPDATE HZ_SECURITY_ISSUED
3467     SET
3468       STATUS = 'M',
3469       last_update_date = hz_utility_pub.last_update_date,
3470       last_updated_by = hz_utility_pub.user_id,
3471       last_update_login = hz_utility_pub.last_update_login,
3472       request_id =  hz_utility_pub.request_id,
3473       program_application_id = hz_utility_pub.program_application_id,
3474       program_id = hz_utility_pub.program_id,
3475       program_update_date = sysdate
3476     WHERE security_issued_id = p_from_id;
3477   ELSE
3478     -- Update and set party_id = p_to_fk_id where pk = from_id
3479     UPDATE HZ_SECURITY_ISSUED
3480     SET
3481       party_id = p_to_fk_id,
3482       last_update_date = hz_utility_pub.last_update_date,
3483       last_updated_by = hz_utility_pub.user_id,
3484       last_update_login = hz_utility_pub.last_update_login,
3485       request_id =  hz_utility_pub.request_id,
3486       program_application_id = hz_utility_pub.program_application_id,
3487       program_id = hz_utility_pub.program_id,
3488       program_update_date = sysdate
3489     WHERE security_issued_id = p_from_id;
3490 
3491   END IF;
3492 
3493 EXCEPTION
3494   WHEN OTHERS THEN
3495     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3496     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3497     FND_MSG_PUB.ADD;
3498     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3499 END do_security_issued_transfer;
3500 
3501 PROCEDURE do_financial_reports_transfer(
3502         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3503         x_to_id         IN OUT NOCOPY  NUMBER,
3504         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3505         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3506 	x_return_status IN OUT NOCOPY          VARCHAR2
3507 ) IS
3508 
3509 BEGIN
3510 
3511   IF (x_to_id <> FND_API.G_MISS_NUM AND
3512       x_to_id <> p_from_id) THEN
3513     UPDATE HZ_FINANCIAL_REPORTS
3514     SET
3515       STATUS = 'M',
3516       last_update_date = hz_utility_pub.last_update_date,
3517       last_updated_by = hz_utility_pub.user_id,
3518       last_update_login = hz_utility_pub.last_update_login,
3519       request_id =  hz_utility_pub.request_id,
3520       program_application_id = hz_utility_pub.program_application_id,
3521       program_id = hz_utility_pub.program_id,
3522       program_update_date = sysdate
3523     WHERE financial_report_id = p_from_id;
3524   ELSE
3525     -- Update and set party_id = p_to_fk_id where pk = from_id
3526     UPDATE HZ_FINANCIAL_REPORTS
3527     SET
3528       party_id = p_to_fk_id,
3529       last_update_date = hz_utility_pub.last_update_date,
3530       last_updated_by = hz_utility_pub.user_id,
3531       last_update_login = hz_utility_pub.last_update_login,
3532       request_id =  hz_utility_pub.request_id,
3533       program_application_id = hz_utility_pub.program_application_id,
3534       program_id = hz_utility_pub.program_id,
3535       program_update_date = sysdate
3536     WHERE financial_report_id = p_from_id;
3537 
3538   END IF;
3539 
3540 EXCEPTION
3541   WHEN OTHERS THEN
3542     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3543     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3544     FND_MSG_PUB.ADD;
3545     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3546 END do_financial_reports_transfer;
3547 
3548 PROCEDURE do_org_indicators_transfer(
3549         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3550         x_to_id         IN OUT NOCOPY  NUMBER,
3551         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3552         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3553 	x_return_status IN OUT NOCOPY          VARCHAR2
3554 ) IS
3555 
3556 BEGIN
3557 
3558   IF (x_to_id <> FND_API.G_MISS_NUM AND
3559       x_to_id <> p_from_id) THEN
3560     UPDATE HZ_ORGANIZATION_INDICATORS
3561     SET
3562       STATUS = 'M',
3563       last_update_date = hz_utility_pub.last_update_date,
3564       last_updated_by = hz_utility_pub.user_id,
3565       last_update_login = hz_utility_pub.last_update_login,
3566       request_id =  hz_utility_pub.request_id,
3567       program_application_id = hz_utility_pub.program_application_id,
3568       program_id = hz_utility_pub.program_id,
3569       program_update_date = sysdate
3570     WHERE organization_indicator_id = p_from_id;
3571   ELSE
3572     -- Update and set party_id = p_to_fk_id where pk = from_id
3573     UPDATE HZ_ORGANIZATION_INDICATORS
3574     SET
3575       party_id = p_to_fk_id,
3576       last_update_date = hz_utility_pub.last_update_date,
3577       last_updated_by = hz_utility_pub.user_id,
3578       last_update_login = hz_utility_pub.last_update_login,
3579       request_id =  hz_utility_pub.request_id,
3580       program_application_id = hz_utility_pub.program_application_id,
3581       program_id = hz_utility_pub.program_id,
3582       program_update_date = sysdate
3583     WHERE organization_indicator_id = p_from_id;
3584 
3585   END IF;
3586 
3587 EXCEPTION
3588   WHEN OTHERS THEN
3589     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3590     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3591     FND_MSG_PUB.ADD;
3592     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3593 END do_org_indicators_transfer;
3594 
3595 PROCEDURE do_ind_reference_transfer(
3596         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3597         x_to_id         IN OUT NOCOPY  NUMBER,
3598         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3599         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3600 	x_return_status IN OUT NOCOPY          VARCHAR2
3601 ) IS
3602 
3603 BEGIN
3604 
3605   IF (x_to_id <> FND_API.G_MISS_NUM AND
3606       x_to_id <> p_from_id) THEN
3607     UPDATE HZ_INDUSTRIAL_REFERENCE
3608     SET
3609       STATUS = 'M',
3610       last_update_date = hz_utility_pub.last_update_date,
3611       last_updated_by = hz_utility_pub.user_id,
3612       last_update_login = hz_utility_pub.last_update_login,
3613       request_id =  hz_utility_pub.request_id,
3614       program_application_id = hz_utility_pub.program_application_id,
3615       program_id = hz_utility_pub.program_id,
3616       program_update_date = sysdate
3617     WHERE industry_reference_id = p_from_id;
3618   ELSE
3619     -- Update and set party_id = p_to_fk_id where pk = from_id
3620     UPDATE HZ_INDUSTRIAL_REFERENCE
3621     SET
3622       party_id = p_to_fk_id,
3623       last_update_date = hz_utility_pub.last_update_date,
3624       last_updated_by = hz_utility_pub.user_id,
3625       last_update_login = hz_utility_pub.last_update_login,
3626       request_id =  hz_utility_pub.request_id,
3627       program_application_id = hz_utility_pub.program_application_id,
3628       program_id = hz_utility_pub.program_id,
3629       program_update_date = sysdate
3630     WHERE industry_reference_id = p_from_id;
3631 
3632   END IF;
3633 
3634 EXCEPTION
3635   WHEN OTHERS THEN
3636     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3637     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3638     FND_MSG_PUB.ADD;
3639     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3640 END do_ind_reference_transfer;
3641 
3642 PROCEDURE do_per_interest_transfer(
3643         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3644         x_to_id         IN OUT NOCOPY  NUMBER,
3645         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3646         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3647 	x_return_status IN OUT NOCOPY          VARCHAR2
3648 ) IS
3649 
3650 BEGIN
3651 
3652   IF (x_to_id <> FND_API.G_MISS_NUM AND
3653       x_to_id <> p_from_id) THEN
3654     UPDATE HZ_PERSON_INTEREST
3655     SET
3656       STATUS = 'M',
3657       last_update_date = hz_utility_pub.last_update_date,
3658       last_updated_by = hz_utility_pub.user_id,
3659       last_update_login = hz_utility_pub.last_update_login,
3660       request_id =  hz_utility_pub.request_id,
3661       program_application_id = hz_utility_pub.program_application_id,
3662       program_id = hz_utility_pub.program_id,
3663       program_update_date = sysdate
3664     WHERE person_interest_id = p_from_id;
3665   ELSE
3666     -- Update and set party_id = p_to_fk_id where pk = from_id
3667     UPDATE HZ_PERSON_INTEREST
3668     SET
3669       party_id = p_to_fk_id,
3670       last_update_date = hz_utility_pub.last_update_date,
3671       last_updated_by = hz_utility_pub.user_id,
3672       last_update_login = hz_utility_pub.last_update_login,
3673       request_id =  hz_utility_pub.request_id,
3674       program_application_id = hz_utility_pub.program_application_id,
3675       program_id = hz_utility_pub.program_id,
3676       program_update_date = sysdate
3677     WHERE person_interest_id = p_from_id;
3678 
3679   END IF;
3680 
3681 EXCEPTION
3682   WHEN OTHERS THEN
3683     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3684     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3685     FND_MSG_PUB.ADD;
3686     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3687 END do_per_interest_transfer;
3688 
3689 PROCEDURE do_citizenship_transfer(
3690         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3691         x_to_id         IN OUT NOCOPY  NUMBER,
3692         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3693         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3694 	x_return_status IN OUT NOCOPY          VARCHAR2
3695 ) IS
3696 
3697 BEGIN
3698 
3699   IF (x_to_id <> FND_API.G_MISS_NUM AND
3700       x_to_id <> p_from_id) THEN
3701     UPDATE HZ_CITIZENSHIP
3702     SET
3703       STATUS = 'M',
3704       last_update_date = hz_utility_pub.last_update_date,
3705       last_updated_by = hz_utility_pub.user_id,
3706       last_update_login = hz_utility_pub.last_update_login,
3707       request_id =  hz_utility_pub.request_id,
3708       program_application_id = hz_utility_pub.program_application_id,
3709       program_id = hz_utility_pub.program_id,
3710       program_update_date = sysdate
3711     WHERE citizenship_id = p_from_id;
3712   ELSE
3713     -- Update and set party_id = p_to_fk_id where pk = from_id
3714     UPDATE HZ_CITIZENSHIP
3715     SET
3716       party_id = p_to_fk_id,
3717       last_update_date = hz_utility_pub.last_update_date,
3718       last_updated_by = hz_utility_pub.user_id,
3719       last_update_login = hz_utility_pub.last_update_login,
3720       request_id =  hz_utility_pub.request_id,
3721       program_application_id = hz_utility_pub.program_application_id,
3722       program_id = hz_utility_pub.program_id,
3723       program_update_date = sysdate
3724     WHERE citizenship_id = p_from_id;
3725 
3726   END IF;
3727 
3728 EXCEPTION
3729   WHEN OTHERS THEN
3730     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3731     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3732     FND_MSG_PUB.ADD;
3733     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3734 END do_citizenship_transfer;
3735 
3736 PROCEDURE do_education_transfer(
3737         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3738         x_to_id         IN OUT NOCOPY  NUMBER,
3739         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3740         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3741 	x_return_status IN OUT NOCOPY          VARCHAR2
3742 ) IS
3743 
3744 BEGIN
3745 
3746   IF (x_to_id <> FND_API.G_MISS_NUM AND
3747       x_to_id <> p_from_id) THEN
3748     UPDATE HZ_EDUCATION
3749     SET
3750       STATUS = 'M',
3751       last_update_date = hz_utility_pub.last_update_date,
3752       last_updated_by = hz_utility_pub.user_id,
3753       last_update_login = hz_utility_pub.last_update_login,
3754       request_id =  hz_utility_pub.request_id,
3755       program_application_id = hz_utility_pub.program_application_id,
3756       program_id = hz_utility_pub.program_id,
3757       program_update_date = sysdate
3758     WHERE education_id = p_from_id;
3759   ELSE
3760     -- Update and set party_id = p_to_fk_id where pk = from_id
3761     UPDATE HZ_EDUCATION
3762     SET
3763       party_id = p_to_fk_id,
3764       last_update_date = hz_utility_pub.last_update_date,
3765       last_updated_by = hz_utility_pub.user_id,
3766       last_update_login = hz_utility_pub.last_update_login,
3767       request_id =  hz_utility_pub.request_id,
3768       program_application_id = hz_utility_pub.program_application_id,
3769       program_id = hz_utility_pub.program_id,
3770       program_update_date = sysdate
3771     WHERE education_id = p_from_id;
3772 
3773   END IF;
3774 
3775 EXCEPTION
3776   WHEN OTHERS THEN
3777     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3778     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3779     FND_MSG_PUB.ADD;
3780     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3781 END do_education_transfer;
3782 
3783 PROCEDURE do_education_school_transfer(
3784         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3785         x_to_id         IN OUT NOCOPY  NUMBER,
3786         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3787         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3788 	x_return_status IN OUT NOCOPY          VARCHAR2
3789 ) IS
3790 
3791 BEGIN
3792 
3793   IF (x_to_id <> FND_API.G_MISS_NUM AND
3794       x_to_id <> p_from_id) THEN
3795     UPDATE HZ_EDUCATION
3796     SET
3797       STATUS = 'M',
3798       last_update_date = hz_utility_pub.last_update_date,
3799       last_updated_by = hz_utility_pub.user_id,
3800       last_update_login = hz_utility_pub.last_update_login,
3801       request_id =  hz_utility_pub.request_id,
3802       program_application_id = hz_utility_pub.program_application_id,
3803       program_id = hz_utility_pub.program_id,
3804       program_update_date = sysdate
3805     WHERE education_id = p_from_id;
3806   ELSE
3807     -- Update and set party_id = p_to_fk_id where pk = from_id
3808     UPDATE HZ_EDUCATION
3809     SET
3810       school_party_id = p_to_fk_id,
3811       last_update_date = hz_utility_pub.last_update_date,
3812       last_updated_by = hz_utility_pub.user_id,
3813       last_update_login = hz_utility_pub.last_update_login,
3814       request_id =  hz_utility_pub.request_id,
3815       program_application_id = hz_utility_pub.program_application_id,
3816       program_id = hz_utility_pub.program_id,
3817       program_update_date = sysdate
3818     WHERE education_id = p_from_id;
3819 
3820   END IF;
3821 
3822 EXCEPTION
3823   WHEN OTHERS THEN
3824     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3825     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3826     FND_MSG_PUB.ADD;
3827     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3828 END do_education_school_transfer;
3829 
3830 
3831 PROCEDURE do_emp_history_transfer(
3832         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3833         x_to_id         IN OUT NOCOPY  NUMBER,
3834         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3835         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3836         x_return_status IN OUT NOCOPY          VARCHAR2
3837 ) IS
3838 
3839 BEGIN
3840 
3841   IF (x_to_id <> FND_API.G_MISS_NUM AND
3842       x_to_id <> p_from_id) THEN
3843     UPDATE HZ_EMPLOYMENT_HISTORY
3844     SET
3845       STATUS = 'M',
3846       last_update_date = hz_utility_pub.last_update_date,
3847       last_updated_by = hz_utility_pub.user_id,
3848       last_update_login = hz_utility_pub.last_update_login,
3849       request_id =  hz_utility_pub.request_id,
3850       program_application_id = hz_utility_pub.program_application_id,
3851       program_id = hz_utility_pub.program_id,
3852       program_update_date = sysdate
3853     WHERE employment_history_id = p_from_id;
3854   ELSE
3855     -- Update and set party_id = p_to_fk_id where pk = from_id
3856     UPDATE HZ_EMPLOYMENT_HISTORY
3857     SET
3858       party_id = p_to_fk_id,
3859       last_update_date = hz_utility_pub.last_update_date,
3860       last_updated_by = hz_utility_pub.user_id,
3861       last_update_login = hz_utility_pub.last_update_login,
3862       request_id =  hz_utility_pub.request_id,
3863       program_application_id = hz_utility_pub.program_application_id,
3864       program_id = hz_utility_pub.program_id,
3865       program_update_date = sysdate
3866     WHERE employment_history_id = p_from_id;
3867 
3868   END IF;
3869 
3870 EXCEPTION
3871   WHEN OTHERS THEN
3872     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3873     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3874     FND_MSG_PUB.ADD;
3875     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3876 END do_emp_history_transfer;
3877 
3878 PROCEDURE do_employed_transfer(
3879         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3880         x_to_id         IN OUT NOCOPY  NUMBER,
3881         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3882         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3883         x_return_status IN OUT NOCOPY          VARCHAR2
3884 ) IS
3885 
3886 BEGIN
3887 
3888   IF (x_to_id <> FND_API.G_MISS_NUM AND
3889       x_to_id <> p_from_id) THEN
3890     UPDATE HZ_EMPLOYMENT_HISTORY
3891     SET
3892       STATUS = 'M',
3893       last_update_date = hz_utility_pub.last_update_date,
3894       last_updated_by = hz_utility_pub.user_id,
3895       last_update_login = hz_utility_pub.last_update_login,
3896       request_id =  hz_utility_pub.request_id,
3897       program_application_id = hz_utility_pub.program_application_id,
3898       program_id = hz_utility_pub.program_id,
3899       program_update_date = sysdate
3900     WHERE employment_history_id = p_from_id;
3901   ELSE
3902     -- Update and set party_id = p_to_fk_id where pk = from_id
3903     UPDATE HZ_EMPLOYMENT_HISTORY
3904     SET
3905       employed_by_party_id = p_to_fk_id,
3906       last_update_date = hz_utility_pub.last_update_date,
3907       last_updated_by = hz_utility_pub.user_id,
3908       last_update_login = hz_utility_pub.last_update_login,
3909       request_id =  hz_utility_pub.request_id,
3910       program_application_id = hz_utility_pub.program_application_id,
3911       program_id = hz_utility_pub.program_id,
3912       program_update_date = sysdate
3913     WHERE employment_history_id = p_from_id;
3914 
3915   END IF;
3916 
3917 EXCEPTION
3918   WHEN OTHERS THEN
3919     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3920     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3921     FND_MSG_PUB.ADD;
3922     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3923 END do_employed_transfer;
3924 
3925 
3926 PROCEDURE do_work_class_transfer(
3927         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3928         x_to_id         IN OUT NOCOPY  NUMBER,
3929         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3930         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3931         x_return_status IN OUT NOCOPY          VARCHAR2
3932 ) IS
3933 
3934 BEGIN
3935 
3936   IF (x_to_id <> FND_API.G_MISS_NUM AND
3937       x_to_id <> p_from_id) THEN
3938     UPDATE HZ_WORK_CLASS
3939     SET
3940       STATUS = 'M',
3941       last_update_date = hz_utility_pub.last_update_date,
3942       last_updated_by = hz_utility_pub.user_id,
3943       last_update_login = hz_utility_pub.last_update_login,
3944       request_id =  hz_utility_pub.request_id,
3945       program_application_id = hz_utility_pub.program_application_id,
3946       program_id = hz_utility_pub.program_id,
3947       program_update_date = sysdate
3948     WHERE work_class_id = p_from_id;
3949   ELSE
3950     -- Update and set employment_history_id = p_to_fk_id where pk = from_id
3951     UPDATE HZ_WORK_CLASS
3952     SET
3953       employment_history_id = p_to_fk_id,
3954       last_update_date = hz_utility_pub.last_update_date,
3955       last_updated_by = hz_utility_pub.user_id,
3956       last_update_login = hz_utility_pub.last_update_login,
3957       request_id =  hz_utility_pub.request_id,
3958       program_application_id = hz_utility_pub.program_application_id,
3959       program_id = hz_utility_pub.program_id,
3960       program_update_date = sysdate
3961     WHERE work_class_id = p_from_id;
3962 
3963   END IF;
3964 
3965 EXCEPTION
3966   WHEN OTHERS THEN
3967     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
3968     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3969     FND_MSG_PUB.ADD;
3970     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3971 END do_work_class_transfer;
3972 
3973 PROCEDURE do_org_contact_role_transfer(
3974         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
3975         x_to_id         IN OUT NOCOPY  NUMBER,
3976         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
3977         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
3978 	x_return_status IN OUT NOCOPY          VARCHAR2
3979 ) IS
3980 l_msg_data                     VARCHAR2(2000);
3981 l_msg_count                    NUMBER := 0;
3982 l_primary_flag                 VARCHAR2(1) := 'N';
3983 l_fp_primary_flag              VARCHAR2(1) ;
3984 l_fp_primary_role_flag         VARCHAR2(1) ;
3985 l_primary_role_flag            VARCHAR2(1) := 'N';
3986 l_role_type                    HZ_ORG_CONTACT_ROLES.ROLE_TYPE%TYPE;
3987 l_exists                       VARCHAR2(10);
3988 CURSOR from_contact_role IS
3989      SELECT role_type,primary_flag,primary_contact_per_role_type
3990        FROM HZ_ORG_CONTACT_ROLES
3991       WHERE ORG_CONTACT_ROLE_ID = p_from_id;
3992 BEGIN
3993 
3994     IF (x_to_id <> FND_API.G_MISS_NUM AND
3995       x_to_id <> p_from_id) THEN
3996     UPDATE HZ_ORG_CONTACT_ROLES
3997     SET
3998       STATUS = 'M',
3999       last_update_date = hz_utility_pub.last_update_date,
4000       last_updated_by = hz_utility_pub.user_id,
4001       last_update_login = hz_utility_pub.last_update_login,
4002       request_id =  hz_utility_pub.request_id,
4003       program_application_id = hz_utility_pub.program_application_id,
4004       program_id = hz_utility_pub.program_id,
4005       program_update_date = sysdate
4006     WHERE org_contact_role_id = p_from_id;
4007 
4008        HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
4009                     p_init_msg_list => FND_API.G_FALSE,
4010                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
4011                     p_old_owner_table_id   => p_from_id,
4012                     p_new_owner_table_id   => x_to_id,
4013                     p_owner_table_name  =>'HZ_ORG_CONTACT_ROLES',
4014                     p_orig_system => null,
4015                     p_orig_system_reference => null,
4016                     p_reason_code => 'MERGED',
4017                     x_return_status => x_return_status,
4018                     x_msg_count =>l_msg_count,
4019                     x_msg_data  =>l_msg_data);
4020       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4021         FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4022         FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
4023         FND_MSG_PUB.ADD;
4024         x_return_status := FND_API.G_RET_STS_ERROR;
4025         RETURN;
4026       END IF;
4027 
4028    ELSE
4029      --- Transfer ---
4030 
4031      OPEN  from_contact_role;
4032      FETCH from_contact_role into l_role_type,l_fp_primary_flag,l_fp_primary_role_flag;
4033      CLOSE from_contact_role;
4034 
4035      IF l_fp_primary_flag = 'Y' THEN
4036      BEGIN
4037         SELECT 'Exists'
4038         INTO l_exists
4039         FROM HZ_ORG_CONTACT_ROLES
4040         WHERE PRIMARY_FLAG    = 'Y'
4041         AND   ORG_CONTACT_ID  = p_to_fk_id
4042         AND   ROWNUM = 1;
4043     EXCEPTION
4044     WHEN NO_DATA_FOUND THEN
4045         l_primary_flag := 'Y';
4046     END;
4047     END IF;
4048 
4049     IF l_fp_primary_role_flag = 'Y' THEN
4050     BEGIN
4051         SELECT 'Exists'
4052         INTO    l_exists
4053         FROM         HZ_RELATIONSHIPS PR,
4054                      HZ_ORG_CONTACTS OC,
4055                      HZ_ORG_CONTACT_ROLES OCR,
4056                      HZ_RELATIONSHIPS PR2,
4057                      HZ_ORG_CONTACTS OC2
4058               WHERE  OCR.PRIMARY_CONTACT_PER_ROLE_TYPE = 'Y'
4059               AND    OCR.ROLE_TYPE            = l_role_type
4060               AND    OCR.ORG_CONTACT_ID       = OC.ORG_CONTACT_ID
4061               AND    OC.PARTY_RELATIONSHIP_ID = PR.RELATIONSHIP_ID
4062               AND    PR.OBJECT_ID             = PR2.OBJECT_ID
4063               AND    PR2.RELATIONSHIP_ID      = OC2.PARTY_RELATIONSHIP_ID
4064               AND    OC2.ORG_CONTACT_ID       = p_to_fk_id
4065               AND    PR.SUBJECT_TABLE_NAME    = 'HZ_PARTIES'
4066               AND    PR.OBJECT_TABLE_NAME     = 'HZ_PARTIES'
4067               AND    PR.DIRECTIONAL_FLAG      = 'F'
4068               AND    PR2.SUBJECT_TABLE_NAME   = 'HZ_PARTIES'
4069               AND    PR2.OBJECT_TABLE_NAME    = 'HZ_PARTIES'
4070               AND    PR2.DIRECTIONAL_FLAG     = 'F'
4071               AND    ROWNUM = 1;
4072     EXCEPTION
4073     WHEN NO_DATA_FOUND THEN
4074         l_primary_role_flag := 'Y';
4075     END;
4076     END IF;
4077 
4078     -- Update and set party_id = p_to_fk_id where pk = from_id
4079     UPDATE HZ_ORG_CONTACT_ROLES
4080     SET
4081       org_contact_id = p_to_fk_id,
4082       primary_flag   = l_primary_flag,
4083       primary_contact_per_role_type  = l_primary_role_flag,
4084       last_update_date = hz_utility_pub.last_update_date,
4085       last_updated_by = hz_utility_pub.user_id,
4086       last_update_login = hz_utility_pub.last_update_login,
4087       request_id =  hz_utility_pub.request_id,
4088       program_application_id = hz_utility_pub.program_application_id,
4089       program_id = hz_utility_pub.program_id,
4090       program_update_date = sysdate
4091     WHERE org_contact_role_id = p_from_id;
4092   END IF;
4093 
4094 EXCEPTION
4095   WHEN OTHERS THEN
4096     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4097     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4098     FND_MSG_PUB.ADD;
4099     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4100 END do_org_contact_role_transfer;
4101 
4102 PROCEDURE do_financial_number_transfer(
4103         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4104         x_to_id         IN OUT NOCOPY  NUMBER,
4105         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4106         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4107         x_return_status IN OUT NOCOPY          VARCHAR2
4108 ) IS
4109 
4110 BEGIN
4111 
4112   IF (x_to_id <> FND_API.G_MISS_NUM AND
4113       x_to_id <> p_from_id) THEN
4114     UPDATE HZ_FINANCIAL_NUMBERS
4115     SET
4116       STATUS = 'M',
4117       last_update_date = hz_utility_pub.last_update_date,
4118       last_updated_by = hz_utility_pub.user_id,
4119       last_update_login = hz_utility_pub.last_update_login,
4120       request_id =  hz_utility_pub.request_id,
4121       program_application_id = hz_utility_pub.program_application_id,
4122       program_id = hz_utility_pub.program_id,
4123       program_update_date = sysdate
4124     WHERE financial_number_id = p_from_id;
4125   ELSE
4126     -- Update and set party_id = p_to_fk_id where pk = from_id
4127     UPDATE HZ_FINANCIAL_NUMBERS
4128     SET
4129       financial_report_id = p_to_fk_id,
4130       last_update_date = hz_utility_pub.last_update_date,
4131       last_updated_by = hz_utility_pub.user_id,
4132       last_update_login = hz_utility_pub.last_update_login,
4133       request_id =  hz_utility_pub.request_id,
4134       program_application_id = hz_utility_pub.program_application_id,
4135       program_id = hz_utility_pub.program_id,
4136       program_update_date = sysdate
4137     WHERE financial_number_id = p_from_id;
4138   END IF;
4139 
4140 EXCEPTION
4141   WHEN OTHERS THEN
4142     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4143     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4144     FND_MSG_PUB.ADD;
4145     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4146 END do_financial_number_transfer;
4147 
4148 PROCEDURE do_code_assignment_transfer(
4149         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4150         x_to_id         IN OUT NOCOPY  NUMBER,
4151         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4152         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4153         x_return_status IN OUT NOCOPY          VARCHAR2
4154 ) IS
4155 
4156 l_exists VARCHAR2(10);
4157 l_cont_src VARCHAR2(255);
4158 l_primary_flag VARCHAR2(1):='N';
4159 l_fp_primary_flag VARCHAR2(1);
4160 l_class_category HZ_CODE_ASSIGNMENTS.CLASS_CATEGORY%TYPE;
4161 l_code_exists VARCHAR2(1);
4162 l_class_code HZ_CODE_ASSIGNMENTS.CLASS_CODE%TYPE; --bug 4582789
4163 
4164 CURSOR c_cont_source IS
4165   SELECT CONTENT_SOURCE_TYPE,CLASS_CATEGORY,PRIMARY_FLAG,CLASS_CODE
4166   FROM HZ_CODE_ASSIGNMENTS
4167   WHERE code_assignment_id = p_from_id;
4168 
4169 CURSOR check_multiple_assignments IS
4170 SELECT 'Y'
4171 FROM hz_class_categories cc, hz_code_assignments ca
4172 WHERE ca.owner_table_id = p_to_fk_id
4173 AND cc.class_category = ca.class_category
4174 AND cc.allow_multi_assign_flag = 'N'
4175 AND ca.class_category = l_class_category;
4176 
4177 BEGIN
4178 --bug4086873
4179 OPEN c_cont_source;
4180 FETCH c_cont_source INTO l_cont_src,l_class_category,l_fp_primary_flag,l_class_code;
4181 CLOSE c_cont_source;
4182 
4183 
4184 OPEN check_multiple_assignments;
4185 FETCH check_multiple_assignments INTO l_code_exists;
4186 CLOSE check_multiple_assignments;
4187 
4188 
4189   IF (x_to_id <> FND_API.G_MISS_NUM AND  x_to_id <> p_from_id)
4190      OR (NVL(l_code_exists,'N') = 'Y') THEN
4191     UPDATE HZ_CODE_ASSIGNMENTS
4192     SET
4193       STATUS = 'M',
4194       last_update_date = hz_utility_pub.last_update_date,
4195       last_updated_by = hz_utility_pub.user_id,
4196       last_update_login = hz_utility_pub.last_update_login
4197 --      request_id =  hz_utility_pub.request_id,
4198 --      program_application_id = hz_utility_pub.program_application_id,
4199 --      program_id = hz_utility_pub.program_id,
4200 --      program_update_date = sysdate
4201     WHERE code_assignment_id = p_from_id;
4202 
4203   ELSE
4204    --- Transfer ---
4205 /*    OPEN c_cont_source;
4206     FETCH c_cont_source INTO l_cont_src,l_class_category,l_fp_primary_flag;
4207     CLOSE c_cont_source;*/
4208 
4209     IF l_fp_primary_flag = 'Y' THEN
4210     BEGIN
4211         SELECT 'Exists'
4212           INTO l_exists
4213           FROM HZ_CODE_ASSIGNMENTS
4214          WHERE primary_flag         = 'Y'
4215            AND OWNER_TABLE_NAME     = 'HZ_PARTIES'
4216            AND OWNER_TABLE_ID       = p_to_fk_id
4217            AND CLASS_CATEGORY       = l_class_category
4218            AND CONTENT_SOURCE_TYPE  = l_cont_src
4219            AND ROWNUM = 1;
4220     EXCEPTION
4221        WHEN NO_DATA_FOUND THEN
4222             l_primary_flag := 'Y';
4223     END;
4224     END IF;
4225 
4226     -- Update and set party_id = p_to_fk_id where pk = from_id
4227     UPDATE HZ_CODE_ASSIGNMENTS
4228     SET
4229       owner_table_id = p_to_fk_id,
4230       primary_flag =   l_primary_flag,
4231       last_update_date = hz_utility_pub.last_update_date,
4232       last_updated_by = hz_utility_pub.user_id,
4233       last_update_login = hz_utility_pub.last_update_login
4234 --      request_id =  hz_utility_pub.request_id,
4235 --      program_application_id = hz_utility_pub.program_application_id,
4236 --      program_id = hz_utility_pub.program_id,
4237 --      program_update_date = sysdate
4238     WHERE code_assignment_id = p_from_id;
4239 
4240 --bug 4582789
4241 
4242    IF l_primary_flag = 'Y' AND l_class_category = 'CUSTOMER_CATEGORY' THEN
4243 	UPDATE hz_parties
4244 	SET category_code = l_class_code,
4245 	    last_update_date = hz_utility_pub.last_update_date,
4246             last_updated_by = hz_utility_pub.user_id,
4247             last_update_login = hz_utility_pub.last_update_login
4248         WHERE party_id = p_to_fk_id;
4249    END IF;
4250 ---bug 4582789
4251   END IF;
4252 
4253 EXCEPTION
4254   WHEN OTHERS THEN
4255     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4256     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4257     FND_MSG_PUB.ADD;
4258     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4259 END do_code_assignment_transfer;
4260 
4261 PROCEDURE do_code_assignment_transfer2(
4262         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4263         x_to_id         IN OUT NOCOPY  NUMBER,
4264         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4265         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4266         x_return_status IN OUT NOCOPY          VARCHAR2
4267 ) IS
4268 
4269 l_exists VARCHAR2(10);
4270 l_primary_flag VARCHAR2(1):='N';
4271 l_fp_primary_flag VARCHAR2(1);
4272 l_cont_src VARCHAR2(255);
4273 l_class_category HZ_CODE_ASSIGNMENTS.CLASS_CATEGORY%TYPE;
4274 l_code_exists VARCHAR2(1);
4275 
4276 CURSOR c_cont_source IS
4277   SELECT CONTENT_SOURCE_TYPE,CLASS_CATEGORY,PRIMARY_FLAG
4278   FROM HZ_CODE_ASSIGNMENTS
4279   WHERE code_assignment_id = p_from_id;
4280 
4281 CURSOR check_multiple_assignments IS
4282 SELECT 'Y'
4283 FROM hz_class_categories cc, hz_code_assignments ca
4284 WHERE ca.owner_table_id = p_to_fk_id
4285 AND cc.class_category = ca.class_category
4286 AND cc.allow_multi_assign_flag = 'N'
4287 AND ca.class_category = l_class_category;
4288 
4289 BEGIN
4290 --bug4086873
4291 OPEN c_cont_source;
4292 FETCH c_cont_source INTO l_cont_src,l_class_category,l_fp_primary_flag;
4293 CLOSE c_cont_source;
4294 
4295 
4296 OPEN check_multiple_assignments;
4297 FETCH check_multiple_assignments INTO l_code_exists;
4298 CLOSE check_multiple_assignments;
4299 
4300   IF (x_to_id <> FND_API.G_MISS_NUM AND
4301       x_to_id <> p_from_id) OR (NVL(l_code_exists,'N') = 'Y') THEN
4302     UPDATE HZ_CODE_ASSIGNMENTS
4303     SET
4304       STATUS = 'M',
4305       last_update_date = hz_utility_pub.last_update_date,
4306       last_updated_by = hz_utility_pub.user_id,
4307       last_update_login = hz_utility_pub.last_update_login
4308 --      request_id =  hz_utility_pub.request_id,
4309 --      program_application_id = hz_utility_pub.program_application_id,
4310 --      program_id = hz_utility_pub.program_id,
4311 --      program_update_date = sysdate
4312     WHERE code_assignment_id = p_from_id;
4313   ELSE
4314     --- Transfer ---
4315 /*    OPEN c_cont_source;
4316     FETCH c_cont_source INTO l_cont_src,l_class_category,l_fp_primary_flag;
4317     CLOSE c_cont_source; */
4318    IF l_fp_primary_flag = 'Y' THEN
4319    BEGIN
4320     SELECT 'Exists'
4321     INTO l_exists
4322     FROM HZ_CODE_ASSIGNMENTS
4323     WHERE PRIMARY_FLAG       = 'Y'
4324     AND OWNER_TABLE_NAME     = 'HZ_PARTY_SITES'
4325     AND OWNER_TABLE_ID       = p_to_fk_id
4326     AND CLASS_CATEGORY       = l_class_category
4327     AND CONTENT_SOURCE_TYPE  = l_cont_src
4328     AND ROWNUM = 1;
4329 
4330   EXCEPTION
4331     WHEN NO_DATA_FOUND THEN
4332       l_primary_flag := 'Y';
4333   END;
4334   END IF;
4335 
4336     -- Update and set party_id = p_to_fk_id where pk = from_id
4337     UPDATE HZ_CODE_ASSIGNMENTS
4338     SET
4339       owner_table_id = p_to_fk_id,
4340       primary_flag = l_primary_flag,
4341       last_update_date = hz_utility_pub.last_update_date,
4342       last_updated_by = hz_utility_pub.user_id,
4343       last_update_login = hz_utility_pub.last_update_login
4344 --      request_id =  hz_utility_pub.request_id,
4345 --      program_application_id = hz_utility_pub.program_application_id,
4346 --      program_id = hz_utility_pub.program_id,
4347 --      program_update_date = sysdate
4348     WHERE code_assignment_id = p_from_id;
4349   END IF;
4350 
4351 EXCEPTION
4352   WHEN OTHERS THEN
4353     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4354     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4355     FND_MSG_PUB.ADD;
4356     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4357 END do_code_assignment_transfer2;
4358 
4359 PROCEDURE do_per_languages_transfer(
4360         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4361         x_to_id         IN OUT NOCOPY  NUMBER,
4362         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4363         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4364 	x_return_status IN OUT NOCOPY          VARCHAR2
4365 ) IS
4366 l_count   NUMBER;
4367 l_primary_nav_flag  VARCHAR2(1):= 'N';
4368 l_primary_lang_flag VARCHAR2(1):= 'N';
4369 l_exists  VARCHAR2(10);
4370 l_fp_pri_ind_flag VARCHAR2(1);
4371 l_fp_nav_flag VARCHAR2(1);
4372 
4373 Cursor C_From_Lang IS
4374    SELECT   primary_language_indicator,native_language
4375      FROM   HZ_PERSON_LANGUAGE
4376     WHERE   LANGUAGE_USE_REFERENCE_ID  = p_from_id;
4377 
4378 BEGIN
4379   IF (x_to_id <> FND_API.G_MISS_NUM AND
4380       x_to_id <> p_from_id) THEN
4381     UPDATE HZ_PERSON_LANGUAGE
4382     SET
4383       STATUS = 'M',
4384       last_update_date = hz_utility_pub.last_update_date,
4385       last_updated_by = hz_utility_pub.user_id,
4386       last_update_login = hz_utility_pub.last_update_login,
4387       request_id =  hz_utility_pub.request_id,
4388       program_application_id = hz_utility_pub.program_application_id,
4389       program_id = hz_utility_pub.program_id,
4390       program_update_date = sysdate
4391     WHERE language_use_reference_id = p_from_id;
4392   ELSE
4393     --- Transfer ---
4394   OPEN C_From_Lang;
4395   FETCH C_From_Lang INTO l_fp_pri_ind_flag,l_fp_nav_flag;
4396   CLOSE C_From_Lang;
4397   IF l_fp_pri_ind_flag = 'Y' THEN
4398   BEGIN
4399     SELECT 'Exists'
4400     INTO    l_exists
4401     FROM    HZ_PERSON_LANGUAGE
4402     WHERE   PRIMARY_LANGUAGE_INDICATOR = 'Y'
4403     AND     PARTY_ID = p_to_fk_id
4404     AND     ROWNUM = 1;
4405   EXCEPTION
4406     WHEN NO_DATA_FOUND THEN
4407       l_primary_lang_flag := 'Y';
4408   END;
4409   END IF;
4410 
4411   IF l_fp_nav_flag = 'Y' THEN
4412   BEGIN
4413     SELECT 'Exists'
4414     INTO    l_exists
4415     FROM    HZ_PERSON_LANGUAGE
4416     WHERE   NATIVE_LANGUAGE = 'Y'
4417     AND     PARTY_ID = p_to_fk_id
4418     AND     ROWNUM = 1;
4419   EXCEPTION
4420     WHEN NO_DATA_FOUND THEN
4421       l_primary_nav_flag := 'Y';
4422   END;
4423   END IF;
4424 
4425 /*
4426   OPEN C_Lang1;
4427   FETCH C_Lang1 INTO l_count;
4428   IF C_Lang1%FOUND THEN
4429      OPEN C_Lang2;
4430      FETCH C_Lang2 INTO l_count;
4431      IF C_Lang2%NOTFOUND THEN
4432         -- Update
4433         l_native_language := 'Y';
4434      END IF;
4435      CLOSE C_Lang2;
4436   END IF;
4437   CLOSE C_Lang1;
4438 
4439 */
4440     -- Update and set party_id = p_to_fk_id where pk = from_id
4441     UPDATE HZ_PERSON_LANGUAGE
4442     SET
4443       party_id = p_to_fk_id,
4444       primary_language_indicator = l_primary_lang_flag,
4445       native_language  = l_primary_nav_flag,
4446       last_update_date = hz_utility_pub.last_update_date,
4447       last_updated_by = hz_utility_pub.user_id,
4448       last_update_login = hz_utility_pub.last_update_login,
4449       request_id =  hz_utility_pub.request_id,
4450       program_application_id = hz_utility_pub.program_application_id,
4451       program_id = hz_utility_pub.program_id,
4452       program_update_date = sysdate
4453     WHERE language_use_reference_id = p_from_id;
4454 
4455   END IF;
4456 
4457 EXCEPTION
4458   WHEN OTHERS THEN
4459     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4460     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4461     FND_MSG_PUB.ADD;
4462     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4463 END do_per_languages_transfer;
4464 
4465 PROCEDURE do_party_site_use_transfer(
4466         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4467         x_to_id         IN OUT NOCOPY  NUMBER,
4468         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4469         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4470 	x_return_status IN OUT NOCOPY          VARCHAR2
4471 ) IS
4472 
4473 party_site_use_rec                 HZ_PARTY_SITE_V2PUB.PARTY_SITE_USE_REC_TYPE;
4474 l_msg_data                     VARCHAR2(2000);
4475 l_msg_count                    NUMBER := 0;
4476 
4477 ----Start of Bug No: 3560167-------------------
4478 CURSOR c_party_id(p_party_site_id NUMBER) IS
4479                 SELECT PARTY_ID FROM HZ_PARTY_SITES
4480 		WHERE  PARTY_SITE_ID = p_party_site_id
4481 		AND ROWNUM =1;
4482 
4483 CURSOR c_prim_site_uses(p_party_id NUMBER,p_party_site_id NUMBER,p_site_use_type VARCHAR2,p_request_id NUMBER)
4484                        IS SELECT 1 FROM HZ_PARTY_SITE_USES SU
4485 			   WHERE  SU.PARTY_SITE_ID IN (
4486 			      SELECT PS.PARTY_SITE_ID
4487 			      FROM   HZ_PARTY_SITES PS
4488 			      WHERE  PARTY_ID = p_party_id )
4489 			   AND    SU.PARTY_SITE_ID <> p_party_site_id
4490 			   AND    SU.SITE_USE_TYPE = p_site_use_type
4491 			   AND    SU.PRIMARY_PER_TYPE = 'Y'
4492 			   AND    SU.REQUEST_ID =p_request_id
4493 			   AND    ROWNUM = 1;
4494 l_prim_use_exists NUMBER := 0;
4495 l_party_id        NUMBER;
4496 
4497 ----End of Bug No: 3560167-------------------
4498 
4499 BEGIN
4500 
4501   IF (x_to_id <> FND_API.G_MISS_NUM AND
4502       x_to_id <> p_from_id) THEN
4503     UPDATE HZ_PARTY_SITE_USES
4504     SET
4505       ----Bug: 2619948 added setting status to 'M' here too
4506       STATUS = 'M',
4507       last_update_date = hz_utility_pub.last_update_date,
4508       last_updated_by = hz_utility_pub.user_id,
4509       last_update_login = hz_utility_pub.last_update_login,
4510       request_id =  hz_utility_pub.request_id,
4511       program_application_id = hz_utility_pub.program_application_id,
4512       program_id = hz_utility_pub.program_id,
4513       program_update_date = sysdate
4514     WHERE party_site_use_id = p_from_id;
4515   ELSE
4516 
4517     hz_cust_account_merge_v2pvt.get_party_site_use_rec (
4518          p_init_msg_list => 'T',
4519          p_party_site_use_id => p_from_id,
4520          x_party_site_use_rec => party_site_use_rec,
4521          x_return_status => x_return_status,
4522          x_msg_count => l_msg_count,
4523          x_msg_data => l_msg_data );
4524 
4525     IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4526       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4527       FND_MESSAGE.SET_TOKEN('ERROR','Cannot get party site use ID : ' || p_from_id);
4528       FND_MSG_PUB.ADD;
4529       x_return_status := FND_API.G_RET_STS_ERROR;
4530 
4531       RETURN;
4532     END IF;
4533 
4534     party_site_use_rec.party_site_use_id := FND_API.G_MISS_NUM;
4535     party_site_use_rec.party_site_id := p_to_fk_id;
4536 
4537     ----Start of Bug No: 3560167-------------------
4538     IF party_site_use_rec.primary_per_type  = 'Y' THEN
4539       OPEN c_party_id(p_to_fk_id);
4540       FETCH c_party_id INTO l_party_id;
4541       CLOSE c_party_id;
4542 
4543       OPEN  c_prim_site_uses(l_party_id,p_to_fk_id,party_site_use_rec.site_use_type,hz_utility_pub.request_id);
4544       FETCH c_prim_site_uses INTO l_prim_use_exists;
4545       CLOSE c_prim_site_uses;
4546       IF l_prim_use_exists <> 1 THEN
4547          party_site_use_rec.primary_per_type := 'N';
4548       END IF;
4549     END IF;
4550     ----End of Bug No: 3560167-------------------
4551 
4552     --Create new party site.
4553     hz_cust_account_merge_v2pvt.create_party_site_use(
4554          p_init_msg_list => 'T',
4555          p_party_site_use_rec => party_site_use_rec,
4556          x_party_site_use_id => x_to_id,
4557          x_return_status => x_return_status,
4558          x_msg_count => l_msg_count,
4559          x_msg_data => l_msg_data );
4560 
4561     IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4562       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4563       FND_MESSAGE.SET_TOKEN('ERROR','Cannot copy party site use for ID : ' || p_from_id);
4564       FND_MSG_PUB.ADD;
4565       x_return_status := FND_API.G_RET_STS_ERROR;
4566       RETURN;
4567     END IF;
4568 
4569     -- Update and set party_id = p_to_fk_id where pk = from_id
4570     UPDATE HZ_PARTY_SITE_USES
4571     SET
4572       STATUS = 'M',
4573       last_update_date = hz_utility_pub.last_update_date,
4574       last_updated_by = hz_utility_pub.user_id,
4575       last_update_login = hz_utility_pub.last_update_login,
4576       request_id =  hz_utility_pub.request_id,
4577       program_application_id = hz_utility_pub.program_application_id,
4578       program_id = hz_utility_pub.program_id,
4579       program_update_date = sysdate
4580     WHERE party_site_use_id = p_from_id;
4581 
4582     x_return_status := 'N';
4583 
4584   END IF;
4585 
4586 EXCEPTION
4587   WHEN OTHERS THEN
4588     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4589     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4590     FND_MSG_PUB.ADD;
4591     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4592 END do_party_site_use_transfer;
4593 
4594 PROCEDURE do_cust_account_site_transfer(
4595         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4596         x_to_id         IN OUT NOCOPY  NUMBER,
4597         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4598         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4599 	x_return_status IN OUT NOCOPY          VARCHAR2
4600 ) IS
4601 l_msg_data                     VARCHAR2(2000);
4602 l_msg_count                    NUMBER := 0;
4603 BEGIN
4604 
4605   IF (x_to_id <> FND_API.G_MISS_NUM AND
4606       x_to_id <> p_from_id) THEN
4607     UPDATE HZ_CUST_ACCT_SITES_ALL
4608     SET
4609       STATUS = 'M',
4610       last_update_date = hz_utility_pub.last_update_date,
4611       last_updated_by = hz_utility_pub.user_id,
4612       last_update_login = hz_utility_pub.last_update_login,
4613       request_id =  hz_utility_pub.request_id,
4614       program_application_id = hz_utility_pub.program_application_id,
4615       program_id = hz_utility_pub.program_id,
4616       program_update_date = sysdate
4617     WHERE cust_acct_site_id = p_from_id;
4618 
4619        HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
4620                     p_init_msg_list => FND_API.G_FALSE,
4621                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
4622                     p_old_owner_table_id   => p_from_id,
4623 	            p_new_owner_table_id   => x_to_id,
4624                     p_owner_table_name  =>'HZ_CUST_ACCT_SITES_ALL',
4625                     p_orig_system => null,
4626                     p_orig_system_reference => null,
4627                     p_reason_code => 'MERGED',
4628                     x_return_status => x_return_status,
4629                     x_msg_count =>l_msg_count,
4630                     x_msg_data  =>l_msg_data);
4631       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4632 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4633 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
4634 	FND_MSG_PUB.ADD;
4635 	x_return_status := FND_API.G_RET_STS_ERROR;
4636 	RETURN;
4637       END IF;
4638 
4639   ELSE
4640     UPDATE HZ_CUST_ACCT_SITES_ALL
4641     SET
4642       party_site_id = p_to_fk_id,
4643       last_update_date = hz_utility_pub.last_update_date,
4644       last_updated_by = hz_utility_pub.user_id,
4645       last_update_login = hz_utility_pub.last_update_login,
4646       request_id =  hz_utility_pub.request_id,
4647       program_application_id = hz_utility_pub.program_application_id,
4648       program_id = hz_utility_pub.program_id,
4649       program_update_date = sysdate
4650     WHERE cust_acct_site_id = p_from_id;
4651 
4652   END IF;
4653 
4654 EXCEPTION
4655   WHEN OTHERS THEN
4656     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4657     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4658     FND_MSG_PUB.ADD;
4659     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4660 END do_cust_account_site_transfer;
4661 
4662 PROCEDURE do_org_contact_transfer(
4663         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4664         x_to_id         IN OUT NOCOPY  NUMBER,
4665         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4666         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4667 	x_return_status IN OUT NOCOPY          VARCHAR2
4668 ) IS
4669 l_msg_data                     VARCHAR2(2000);
4670 l_msg_count                    NUMBER := 0;
4671 BEGIN
4672 
4673   IF (x_to_id <> FND_API.G_MISS_NUM AND
4674       x_to_id <> p_from_id) THEN
4675     UPDATE HZ_ORG_CONTACTS
4676     SET
4677       STATUS = 'M',
4678       last_update_date = hz_utility_pub.last_update_date,
4679       last_updated_by = hz_utility_pub.user_id,
4680       last_update_login = hz_utility_pub.last_update_login,
4681       request_id =  hz_utility_pub.request_id,
4682       program_application_id = hz_utility_pub.program_application_id,
4683       program_id = hz_utility_pub.program_id,
4684       program_update_date = sysdate
4685     WHERE org_contact_id = p_from_id;
4686 
4687     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE STAGED_FLAG='N' AND ENTITY='CONTACTS'
4688     AND RECORD_ID=p_from_id;
4689 
4690      HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
4691                     p_init_msg_list => FND_API.G_FALSE,
4692                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
4693                     p_old_owner_table_id   => p_from_id,
4694 	            p_new_owner_table_id   => x_to_id,
4695                     p_owner_table_name  =>'HZ_ORG_CONTACTS',
4696                     p_orig_system => null,
4697                     p_orig_system_reference => null,
4698                     p_reason_code => 'MERGED',
4699                     x_return_status => x_return_status,
4700                     x_msg_count =>l_msg_count,
4701                     x_msg_data  =>l_msg_data);
4702       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4703 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4704 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
4705 	FND_MSG_PUB.ADD;
4706 	x_return_status := FND_API.G_RET_STS_ERROR;
4707 	RETURN;
4708       END IF;
4709 
4710   ELSE
4711     UPDATE HZ_ORG_CONTACTS
4712     SET
4713       party_site_id = p_to_fk_id,
4714       last_update_date = hz_utility_pub.last_update_date,
4715       last_updated_by = hz_utility_pub.user_id,
4716       last_update_login = hz_utility_pub.last_update_login,
4717       request_id =  hz_utility_pub.request_id,
4718       program_application_id = hz_utility_pub.program_application_id,
4719       program_id = hz_utility_pub.program_id,
4720       program_update_date = sysdate
4721     WHERE org_contact_id = p_from_id;
4722 
4723   END IF;
4724 
4725 EXCEPTION
4726   WHEN OTHERS THEN
4727     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4728     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4729     FND_MSG_PUB.ADD;
4730     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4731 END do_org_contact_transfer;
4732 
4733 PROCEDURE do_org_contact_transfer2(
4734         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4735         x_to_id         IN OUT NOCOPY  NUMBER,
4736         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4737         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4738 	x_return_status IN OUT NOCOPY          VARCHAR2
4739 ) IS
4740 
4741 CURSOR c_merge_to_org_contact IS
4742   SELECT org_contact_id
4743   FROM HZ_ORG_CONTACTS
4744   WHERE party_relationship_id = p_to_fk_id;
4745 
4746 CURSOR c_org_cont_attributes(cp_org_cnt_id number) is
4747 	select
4748 	   DEPARTMENT_CODE
4749 	, DEPARTMENT
4750 	, TITLE
4751 	, JOB_TITLE
4752 	, MAIL_STOP
4753 	, CONTACT_KEY
4754 	, DECISION_MAKER_FLAG
4755 	, JOB_TITLE_CODE
4756 	, MANAGED_BY
4757 	, REFERENCE_USE_FLAG
4758 	, RANK
4759 	, NATIVE_LANGUAGE
4760 	, OTHER_LANGUAGE_1
4761 	, OTHER_LANGUAGE_2
4762 	from hz_org_contacts
4763 	where org_contact_id = cp_org_cnt_id;
4764 
4765 l_to_orgcontact_id NUMBER;
4766 l_msg_data                     VARCHAR2(2000);
4767 l_msg_count                    NUMBER := 0;
4768 
4769 L_FROM_DEPARTMENT_CODE  HZ_ORG_CONTACTS.DEPARTMENT_CODE%TYPE;
4770 L_FROM_DEPARTMENT  HZ_ORG_CONTACTS.DEPARTMENT%TYPE;
4771 L_FROM_TITLE    HZ_ORG_CONTACTS.TITLE%TYPE;
4772 L_FROM_JOB_TITLE   HZ_ORG_CONTACTS.JOB_TITLE%TYPE;
4773 L_FROM_MAIL_STOP  HZ_ORG_CONTACTS.MAIL_STOP%TYPE;
4774 L_FROM_CONTACT_KEY  HZ_ORG_CONTACTS.CONTACT_KEY%TYPE;
4775 L_FROM_DECISION_MAKER_FLAG HZ_ORG_CONTACTS.DECISION_MAKER_FLAG%TYPE;
4776 L_FROM_JOB_TITLE_CODE  HZ_ORG_CONTACTS.JOB_TITLE_CODE%TYPE;
4777 L_FROM_MANAGED_BY     HZ_ORG_CONTACTS.MANAGED_BY%TYPE;
4778 L_FROM_REFERENCE_USE_FLAG   HZ_ORG_CONTACTS.REFERENCE_USE_FLAG%TYPE;
4779 L_FROM_RANK   HZ_ORG_CONTACTS.RANK%TYPE;
4780 L_FROM_NATIVE_LANGUAGE  HZ_ORG_CONTACTS.NATIVE_LANGUAGE%TYPE;
4781 L_FROM_OTHER_LANGUAGE_1 HZ_ORG_CONTACTS.OTHER_LANGUAGE_1%TYPE;
4782 L_FROM_OTHER_LANGUAGE_2 HZ_ORG_CONTACTS.OTHER_LANGUAGE_2%TYPE;
4783 
4784 BEGIN
4785 
4786   IF (p_from_fk_id = p_to_fk_id) THEN
4787     RETURN;
4788   END IF;
4789 
4790   OPEN c_merge_to_org_contact;
4791   FETCH c_merge_to_org_contact INTO l_to_orgcontact_id;
4792   IF c_merge_to_org_contact%NOTFOUND THEN
4793     CLOSE c_merge_to_org_contact;
4794     UPDATE HZ_ORG_CONTACTS
4795     SET
4796       party_relationship_id = p_to_fk_id,
4797       last_update_date = hz_utility_pub.last_update_date,
4798       last_updated_by = hz_utility_pub.user_id,
4799       last_update_login = hz_utility_pub.last_update_login,
4800       request_id =  hz_utility_pub.request_id,
4801       program_application_id = hz_utility_pub.program_application_id,
4802       program_id = hz_utility_pub.program_id,
4803       program_update_date = sysdate
4804     WHERE org_contact_id = p_from_id;
4805   ELSE
4806     CLOSE c_merge_to_org_contact;
4807 
4808 -- bug 5100644: carry over not null org contact attributes
4809 
4810    open c_org_cont_attributes(p_from_id);
4811     fetch c_org_cont_attributes into
4812 		L_FROM_DEPARTMENT_CODE,
4813 		L_FROM_DEPARTMENT,
4814 		L_FROM_TITLE,
4815 		L_FROM_JOB_TITLE,
4816 		L_FROM_MAIL_STOP,
4817 		L_FROM_CONTACT_KEY,
4818 		L_FROM_DECISION_MAKER_FLAG,
4819 		L_FROM_JOB_TITLE_CODE,
4820 		L_FROM_MANAGED_BY,
4821 		L_FROM_REFERENCE_USE_FLAG,
4822 		L_FROM_RANK,
4823 		L_FROM_NATIVE_LANGUAGE,
4824 		L_FROM_OTHER_LANGUAGE_1,
4825 		L_FROM_OTHER_LANGUAGE_2;
4826     close c_org_cont_attributes;
4827 
4828     UPDATE HZ_ORG_CONTACTS
4829     SET
4830 	DEPARTMENT_CODE = DECODE(DEPARTMENT_CODE, NULL, L_FROM_DEPARTMENT_CODE,DEPARTMENT_CODE),
4831 	DEPARTMENT = DECODE(DEPARTMENT, NULL, L_FROM_DEPARTMENT,DEPARTMENT ),
4832 	TITLE = DECODE(TITLE, NULL, L_FROM_TITLE,TITLE),
4833 	JOB_TITLE = DECODE(JOB_TITLE, NULL, L_FROM_JOB_TITLE,JOB_TITLE),
4834 	MAIL_STOP = DECODE(MAIL_STOP, NULL, L_FROM_MAIL_STOP,MAIL_STOP),
4835 	CONTACT_KEY = DECODE(CONTACT_KEY, NULL, L_FROM_CONTACT_KEY,CONTACT_KEY),
4836 	DECISION_MAKER_FLAG = DECODE(DECISION_MAKER_FLAG, NULL, L_FROM_DECISION_MAKER_FLAG,DECISION_MAKER_FLAG),
4837 	JOB_TITLE_CODE = DECODE(JOB_TITLE_CODE, NULL, L_FROM_JOB_TITLE_CODE,JOB_TITLE_CODE),
4838 	MANAGED_BY = DECODE(MANAGED_BY, NULL, L_FROM_MANAGED_BY,MANAGED_BY),
4839 	REFERENCE_USE_FLAG = DECODE(REFERENCE_USE_FLAG, NULL, L_FROM_REFERENCE_USE_FLAG,REFERENCE_USE_FLAG),
4840 	RANK = DECODE(RANK, NULL, L_FROM_RANK,RANK),
4841 	NATIVE_LANGUAGE = DECODE(NATIVE_LANGUAGE, NULL, L_FROM_NATIVE_LANGUAGE,NATIVE_LANGUAGE),
4842 	OTHER_LANGUAGE_1 = DECODE(OTHER_LANGUAGE_1, NULL, L_FROM_OTHER_LANGUAGE_1,OTHER_LANGUAGE_1),
4843 	OTHER_LANGUAGE_2 = DECODE(OTHER_LANGUAGE_2, NULL, L_FROM_OTHER_LANGUAGE_2,OTHER_LANGUAGE_2)
4844 
4845     WHERE ORG_CONTACT_ID = l_to_orgcontact_id;
4846 
4847 
4848     UPDATE HZ_ORG_CONTACTS
4849     SET
4850       STATUS = 'M',
4851       last_update_date = hz_utility_pub.last_update_date,
4852       last_updated_by = hz_utility_pub.user_id,
4853       last_update_login = hz_utility_pub.last_update_login,
4854       request_id =  hz_utility_pub.request_id,
4855       program_application_id = hz_utility_pub.program_application_id,
4856       program_id = hz_utility_pub.program_id,
4857       program_update_date = sysdate
4858     WHERE org_contact_id = p_from_id;
4859 
4860     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE STAGED_FLAG='N' AND ENTITY='CONTACTS'
4861     AND RECORD_ID=p_from_id;
4862 
4863     HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
4864                     p_init_msg_list => FND_API.G_FALSE,
4865                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
4866                     p_old_owner_table_id   => p_from_id,
4867 	            p_new_owner_table_id   => l_to_orgcontact_id,
4868                     p_owner_table_name  =>'HZ_ORG_CONTACTS',
4869                     p_orig_system => null,
4870                     p_orig_system_reference => null,
4871                     p_reason_code => 'MERGED',
4872                     x_return_status => x_return_status,
4873                     x_msg_count =>l_msg_count,
4874                     x_msg_data  =>l_msg_data);
4875       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4876 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4877 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
4878 	FND_MSG_PUB.ADD;
4879 	x_return_status := FND_API.G_RET_STS_ERROR;
4880 	RETURN;
4881       END IF;
4882 
4883     ---for NOCOPY fix
4884     x_to_id := l_to_orgcontact_id;
4885   END IF;
4886 
4887 EXCEPTION
4888   WHEN OTHERS THEN
4889     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
4890     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4891     FND_MSG_PUB.ADD;
4892     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4893 END do_org_contact_transfer2;
4894 
4895 
4896 
4897 --4307667
4898 PROCEDURE do_party_usage_merge(
4899         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
4900         x_to_id         IN OUT NOCOPY  NUMBER,
4901         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
4902         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
4903         x_return_status IN OUT NOCOPY          VARCHAR2
4904 
4905 ) IS
4906 x_msg_count VARCHAR2(2000);
4907 x_msg_data  VARCHAR2(4000);
4908 p_init_msg_list VARCHAR2(32767);
4909 l_from_usage_code VARCHAR2(32767);
4910 p_party_usg_assignment_rec    APPS.HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type;
4911 BEGIN
4912 p_init_msg_list := 'T';
4913 
4914   begin
4915 	SELECT PARTY_USAGE_CODE INTO l_from_usage_code
4916 	FROM hz_party_usg_assignments
4917 	where party_usg_assignment_id = p_from_id;
4918   EXCEPTION
4919           WHEN NO_DATA_FOUND THEN RETURN;
4920   end;
4921 /*
4922 IF l_from_usage_code = 'DEFAULT' THEN
4923         UPDATE hz_party_usg_assignments
4924         SET status_flag = 'M',
4925         effective_end_date = TRUNC(sysdate)
4926         WHERE party_usg_assignment_id = p_from_id;
4927 ELSE
4928 */ -- bug 5007937
4929 --check for duplicate usage
4930         HZ_PARTY_USG_ASSIGNMENT_PVT.find_duplicates(p_from_id,p_to_fk_id,x_to_id);
4931         IF x_to_id IS NOT NULL THEN
4932         --duplicate usage exists
4933                 UPDATE hz_party_usg_assignments
4934                 SET status_flag = 'M',
4935                 effective_end_date = sysdate
4936                 WHERE party_usg_assignment_id = p_from_id;
4937 
4938         ELSE
4939         --usage doesnot exist create a new usage for merge-to party
4940         --to handle transition rule new usage is created using API with 0 validation level, instead of updating merge-from party assignment
4941                 p_party_usg_assignment_rec.party_id := p_to_fk_id;
4942 
4943                 SELECT
4944                  party_usage_code,
4945                  effective_start_date,
4946                  effective_end_date,
4947                  comments,
4948                  owner_table_name,
4949                  owner_table_id,
4950                  created_by_module,
4951                  attribute_category,
4952                  attribute1,
4953                  attribute2,
4954                  attribute3,
4955                  attribute4,
4956                  attribute5,
4957                  attribute6,
4958                  attribute7,
4959                  attribute8,
4960                  attribute9,
4961                  attribute10,
4962                  attribute11,
4963                  attribute12,
4964                  attribute13,
4965                  attribute14,
4966                  attribute15,
4967                  attribute16,
4968                  attribute17,
4969                  attribute18,
4970                  attribute19,
4971                  attribute20
4972                 INTO
4973                  p_party_usg_assignment_rec.party_usage_code,
4974                  p_party_usg_assignment_rec.effective_start_date,
4975                  p_party_usg_assignment_rec.effective_end_date,
4976                  p_party_usg_assignment_rec.comments,
4977                  p_party_usg_assignment_rec.owner_table_name,
4978                  p_party_usg_assignment_rec.owner_table_id,
4979                  p_party_usg_assignment_rec.created_by_module,
4980                  p_party_usg_assignment_rec.attribute_category,
4981                  p_party_usg_assignment_rec.attribute1,
4982                  p_party_usg_assignment_rec.attribute2,
4983                  p_party_usg_assignment_rec.attribute3,
4984                  p_party_usg_assignment_rec.attribute4,
4985                  p_party_usg_assignment_rec.attribute5,
4986                  p_party_usg_assignment_rec.attribute6,
4987                  p_party_usg_assignment_rec.attribute7,
4988                  p_party_usg_assignment_rec.attribute8,
4989                  p_party_usg_assignment_rec.attribute9,
4990                  p_party_usg_assignment_rec.attribute10,
4991                  p_party_usg_assignment_rec.attribute11,
4992                  p_party_usg_assignment_rec.attribute12,
4993                  p_party_usg_assignment_rec.attribute13,
4994                  p_party_usg_assignment_rec.attribute14,
4995                  p_party_usg_assignment_rec.attribute15,
4996                  p_party_usg_assignment_rec.attribute16,
4997                  p_party_usg_assignment_rec.attribute17,
4998                  p_party_usg_assignment_rec.attribute18,
4999                  p_party_usg_assignment_rec.attribute19,
5000                  p_party_usg_assignment_rec.attribute20
5001              FROM hz_party_usg_assignments
5002              WHERE party_usg_assignment_id = p_from_id;
5003 
5004              HZ_PARTY_USG_ASSIGNMENT_PVT.assign_party_usage
5005              (p_init_msg_list,0,p_party_usg_assignment_rec,x_return_status,x_msg_count,x_msg_data);
5006 
5007              IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
5008 
5009                  DELETE FROM hz_party_usg_assignments
5010                  WHERE party_usg_assignment_id = p_from_id;
5011 
5012               /* bug 5007937
5013 		 DELETE FROM hz_party_usg_assignments
5014                  WHERE party_id = p_to_fk_id
5015                  AND   party_usage_code = 'DEFAULT';
5016 	      */
5017 
5018              END IF;
5019 
5020         END IF; --x_to_assignment_id
5021 -- END IF; --l_from_usage_code
5022 
5023 EXCEPTION
5024   WHEN OTHERS THEN
5025     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5026     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5027     FND_MSG_PUB.ADD;
5028     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5029 END do_party_usage_merge;
5030 
5031 
5032 PROCEDURE do_party_reln_obj_merge(
5033         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
5034         x_to_id         IN OUT NOCOPY  NUMBER,
5035         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
5036         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
5037         x_return_status IN OUT NOCOPY          VARCHAR2
5038 
5039 ) IS
5040 
5041 CURSOR c_party(cp_party_reln_id NUMBER) IS
5042   SELECT party_id
5043   FROM HZ_RELATIONSHIPS
5044   WHERE  relationship_id = cp_party_reln_id
5045   AND DIRECTIONAL_FLAG = 'F'
5046   and status in ('A','I'); -- bug 5094383
5047 
5048 CURSOR c_to_party_reln IS
5049   SELECT relationship_id
5050   FROM   HZ_RELATIONSHIPS
5051   WHERE  relationship_id = x_to_id
5052   FOR UPDATE NOWAIT;
5053 
5054 cursor c_start_end_date is
5055  SELECT start_date, nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')), actual_content_source --5404244
5056          FROM   HZ_RELATIONSHIPS
5057          WHERE  relationship_id = p_from_id
5058          AND DIRECTIONAL_FLAG='F';
5059 
5060 CURSOR c_check_valid_merge(from_start_date date, from_end_date date, from_cont_source_type VARCHAR2, from_cont_source VARCHAR2) IS
5061   SELECT relationship_id, nvl(request_id,-1)
5062   FROM   HZ_RELATIONSHIPS
5063   WHERE  object_id = p_to_fk_id
5064   AND actual_content_source = DECODE(from_cont_source_type, 'PURCHASED', from_cont_source, actual_content_source) --5404244
5065   AND subject_id = (
5066          SELECT SUBJECT_ID
5067          FROM   HZ_RELATIONSHIPS
5068          WHERE  relationship_id = p_from_id
5069          AND DIRECTIONAL_FLAG='F')
5070   AND subject_id NOT IN
5071   ((SELECT from_party_id FROM hz_merge_parties WHERE to_party_id = p_to_fk_id AND merge_status='PENDING' )) --bug 4867151
5072   AND subject_id NOT IN
5073   ((SELECT to_party_id FROM hz_merge_parties WHERE to_party_id = p_to_fk_id AND merge_status='PENDING' )) --bug 4867151
5074   AND relationship_code = (
5075          SELECT relationship_code -- Bug No: 4571969
5076          FROM   HZ_RELATIONSHIPS
5077          WHERE  relationship_id = p_from_id
5078          AND DIRECTIONAL_FLAG='F')
5079   AND DIRECTIONAL_FLAG = 'F'
5080   AND ((start_date between from_start_date and from_end_date)
5081           or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5082           or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date))
5083   AND status IN ('A','I'); --bug 5260367
5084 
5085 l_party_rel_id NUMBER;
5086 l_from_party_id	NUMBER;
5087 l_to_party_id	NUMBER;
5088 l_dup_reln_id   NUMBER;
5089 l_request_id    NUMBER;
5090 l_from_last_upd_date DATE;
5091 l_to_last_upd_date DATE;
5092 l_from_party_reln_type VARCHAR2(255);
5093 l_merge_to_id NUMBER;
5094 l_temp NUMBER;
5095 from_start_date date;
5096 from_end_date date;
5097 
5098 --Bug 2619913 Do not allow self relationships creation unless
5099 --defined in the relationship type table
5100 
5101 l_subject_id NUMBER;
5102 l_rel_type HZ_RELATIONSHIPS.RELATIONSHIP_TYPE%TYPE;
5103 l_rel_code HZ_RELATIONSHIPS.RELATIONSHIP_CODE%TYPE;
5104 l_subject_type HZ_RELATIONSHIPS.SUBJECT_TYPE%TYPE;
5105 l_object_type HZ_RELATIONSHIPS.OBJECT_TYPE%TYPE;
5106 l_self_rel_flag VARCHAR2(1);
5107 
5108 l_rel_party_id        HZ_RELATIONSHIPS.PARTY_ID%TYPE;
5109 l_new_obj_party_name HZ_PARTIES.PARTY_NAME%TYPE;
5110 l_subject_name         HZ_PARTIES.PARTY_NAME%TYPE;
5111 l_rel_party_number    HZ_PARTIES.PARTY_NUMBER%TYPE;
5112 from_cont_source    HZ_RELATIONSHIPS.ACTUAL_CONTENT_SOURCE%TYPE; --5404244
5113 from_cont_source_type HZ_ORIG_SYSTEMS_B.ORIG_SYSTEM_TYPE%TYPE;
5114 
5115 --6696774 Start
5116 l_par_exists VARCHAR2(1);
5117 l_direction_code HZ_RELATIONSHIPS.DIRECTION_CODE%TYPE;
5118 --6696774 end
5119 BEGIN
5120 
5121   IF (x_to_id <> FND_API.G_MISS_NUM AND x_to_id <> p_from_id) THEN
5122     OPEN c_party(p_from_id);
5123     FETCH c_party INTO l_from_party_id;
5124     IF c_party%NOTFOUND THEN
5125       l_from_party_id := NULL;
5126     END IF;
5127     CLOSE c_party;
5128 
5129     OPEN c_party(x_to_id);
5130     FETCH c_party INTO l_to_party_id;
5131     IF c_party%NOTFOUND THEN
5132       l_to_party_id := NULL;
5133     END IF;
5134     CLOSE c_party;
5135 
5136     IF l_to_party_id IS NOT NULL AND l_from_party_id IS NOT NULL
5137        AND l_from_party_id <> l_to_party_id THEN
5138       FND_MESSAGE.SET_NAME('AR', 'HZ_RELN_MERGE_NOT_ALLOWED');
5139       FND_MESSAGE.SET_TOKEN('FROMID',p_from_id);
5140       FND_MESSAGE.SET_TOKEN('TOID',x_to_id);
5141       FND_MSG_PUB.ADD;
5142       x_return_status := FND_API.G_RET_STS_ERROR;
5143       RETURN;
5144     END IF;
5145 
5146     IF l_from_party_id IS NOT NULL THEN
5147       OPEN c_to_party_reln;
5148       UPDATE HZ_RELATIONSHIPS
5149       SET
5150         party_id = l_from_party_id,
5151         last_update_date = hz_utility_pub.last_update_date,
5152         last_updated_by = hz_utility_pub.user_id,
5153         last_update_login = hz_utility_pub.last_update_login,
5154         request_id =  hz_utility_pub.request_id,
5155         program_application_id = hz_utility_pub.program_application_id,
5156         program_id = hz_utility_pub.program_id,
5157         program_update_date = sysdate
5158       WHERE relationship_id = x_to_id;
5159       CLOSE c_to_party_reln;
5160     END IF;
5161 
5162     UPDATE HZ_RELATIONSHIPS
5163     SET
5164       STATUS = 'M',
5165       last_update_date = hz_utility_pub.last_update_date,
5166       last_updated_by = hz_utility_pub.user_id,
5167       last_update_login = hz_utility_pub.last_update_login,
5168       request_id =  hz_utility_pub.request_id,
5169       program_application_id = hz_utility_pub.program_application_id,
5170       program_id = hz_utility_pub.program_id,
5171       program_update_date = sysdate
5172     WHERE relationship_id = p_from_id;
5173 
5174 --4307667 merge usages with owner_table_name 'HZ_RELATIONSHIPS'
5175     UPDATE hz_party_usg_assignments
5176     SET status_flag = 'M',
5177         effective_end_date = trunc(sysdate)
5178     WHERE owner_table_id = p_from_id
5179     AND   owner_table_name = 'HZ_RELATIONSHIPS'
5180     AND   party_id = p_from_fk_id;
5181 
5182     ----Start of DlProject Phase2--------------------
5183      do_hierarchy_nodes_merge(p_from_id => p_from_id,
5184 			      p_from_fk_id => p_from_fk_id,
5185 			      p_to_fk_id => p_to_fk_id,
5186 			      x_return_status =>x_return_status,
5187 			      p_action => 'M',
5188 			      p_sub_obj_merge =>'OBJ'
5189 			      );
5190     ----End of DlProject Phase2--------------------
5191   ELSE
5192 
5193     open c_start_end_date;
5194      fetch c_start_end_date into from_start_date,from_end_date,from_cont_source;
5195     close c_start_end_date;
5196 
5197     SELECT orig_system_type INTO from_cont_source_type --5404244
5198     FROM HZ_ORIG_SYSTEMS_B
5199     WHERE orig_system = from_cont_source;
5200     OPEN c_check_valid_merge(from_start_date, from_end_date, from_cont_source_type,from_cont_source);
5201     FETCH c_check_valid_merge INTO l_dup_reln_id, l_request_id;
5202     IF c_check_valid_merge%FOUND AND
5203        l_request_id <> hz_utility_pub.request_id THEN
5204       CLOSE c_check_valid_merge;
5205      FND_MESSAGE.SET_NAME('AR', 'HZ_RELN_TRANSFER_NOT_ALLOWED');
5206       FND_MESSAGE.SET_TOKEN('FROMID',p_from_id);
5207       FND_MSG_PUB.ADD;
5208       x_return_status := FND_API.G_RET_STS_ERROR;
5209       RETURN;
5210     END IF;
5211     CLOSE c_check_valid_merge;
5212 
5213     --6696774 Start
5214     SELECT subject_id, relationship_type, relationship_code,subject_type,object_type,direction_code into l_subject_id, l_rel_type, l_rel_code,
5215            l_subject_type, l_object_type, l_direction_code
5216     FROM HZ_RELATIONSHIPS
5217     WHERE relationship_id = p_from_id
5218     AND   directional_flag = 'F';
5219 
5220     SELECT allow_relate_to_self_flag
5221     INTO   l_self_rel_flag
5222     FROM   HZ_RELATIONSHIP_TYPES
5223     WHERE RELATIONSHIP_TYPE = l_rel_type
5224     AND FORWARD_REL_CODE = l_rel_code
5225     AND SUBJECT_TYPE = l_subject_type
5226     AND OBJECT_TYPE =  l_object_type;
5227 
5228     l_par_exists := 'N';
5229 
5230     BEGIN
5231 
5232         SELECT 'Y' into l_par_exists
5233         FROM hz_hierarchy_nodes
5234         WHERE child_id = l_subject_id
5235         AND   parent_id = p_to_fk_id
5236         AND   l_direction_code = 'P'
5237         AND rownum = 1;
5238 
5239     EXCEPTION
5240         WHEN NO_DATA_FOUND THEN
5241            null;
5242     END;
5243 
5244     IF (l_subject_id <> p_to_fk_id OR l_self_rel_flag = 'Y') AND l_par_exists = 'N' THEN
5245 --6696774 END;
5246 
5247      ----Start of DlProject Phase2--------------------
5248      do_hierarchy_nodes_merge(p_from_id => p_from_id,
5249 			      p_from_fk_id => p_from_fk_id,
5250 			      p_to_fk_id => p_to_fk_id,
5251 			      x_return_status =>x_return_status,
5252 			      p_action => 'T',
5253 			      p_sub_obj_merge =>'OBJ'
5254 			      );
5255     ----End of DlProject Phase2--------------------
5256     UPDATE HZ_RELATIONSHIPS
5257     SET
5258       object_id = p_to_fk_id,
5259       last_update_date = hz_utility_pub.last_update_date,
5260       last_updated_by = hz_utility_pub.user_id,
5261       last_update_login = hz_utility_pub.last_update_login,
5262       request_id =  hz_utility_pub.request_id,
5263       program_application_id = hz_utility_pub.program_application_id,
5264       program_id = hz_utility_pub.program_id,
5265       program_update_date = sysdate
5266     WHERE relationship_id = p_from_id
5267     AND DIRECTIONAL_FLAG = 'F'
5268     RETURNING  subject_id, relationship_type, relationship_code,
5269                subject_type, object_type, party_id
5270     into l_subject_id, l_rel_type, l_rel_code,
5271          l_subject_type , l_object_type , l_rel_party_id;
5272 
5273     UPDATE HZ_RELATIONSHIPS
5274     SET
5275       subject_id = p_to_fk_id,
5276       last_update_date = hz_utility_pub.last_update_date,
5277       last_updated_by = hz_utility_pub.user_id,
5278       last_update_login = hz_utility_pub.last_update_login,
5279       request_id =  hz_utility_pub.request_id,
5280       program_application_id = hz_utility_pub.program_application_id,
5281       program_id = hz_utility_pub.program_id,
5282       program_update_date = sysdate
5283     WHERE relationship_id = p_from_id
5284     AND DIRECTIONAL_FLAG = 'B';
5285 
5286       ---Bug# 2688231 After transferring the reln,the name
5287       --- of the relationship party should also be changed
5288 
5289    if l_rel_party_id is not null then
5290 
5291       select sub.party_name , obj.party_name , rel.party_number
5292       into l_subject_name , l_new_obj_party_name , l_rel_party_number
5293       from hz_parties sub , hz_parties obj , hz_parties rel
5294       where sub.party_id = l_subject_id
5295       and   obj.party_id = p_to_fk_id
5296       and   rel.party_id = l_rel_party_id;
5297 
5298       UPDATE HZ_PARTIES
5299       SET PARTY_NAME = 	SUBSTRB(l_subject_name || '-' ||
5300                                 l_new_obj_party_name  || '-' ||
5301                                 l_rel_party_number, 1, 360)
5302       WHERE party_id = l_rel_party_id;
5303 
5304    end if;
5305 
5306     --Check if the object_id and subject_id are same and the
5307     ELSIF (l_subject_id = p_to_fk_id AND l_self_rel_flag = 'N') OR l_par_exists = 'Y' THEN --bug 6696774
5308      --IF l_subject_id = p_to_fk_id THEN
5309 
5310        BEGIN
5311          --self relationship is not allowed then, Inactivate it
5312          SELECT allow_relate_to_self_flag
5313          INTO   l_self_rel_flag
5314          FROM   HZ_RELATIONSHIP_TYPES
5315          WHERE RELATIONSHIP_TYPE = l_rel_type
5316          AND FORWARD_REL_CODE = l_rel_code
5317          AND SUBJECT_TYPE = l_subject_type
5318          AND OBJECT_TYPE =  l_object_type;
5319 
5320        IF  l_self_rel_flag = 'N' THEN
5321          --Inactivate the relationships BOTH FORWARD AND BACKWARD
5322          UPDATE HZ_RELATIONSHIPS
5323          SET
5324          STATUS = 'I',
5325          END_DATE = sysdate,
5326          last_update_date = hz_utility_pub.last_update_date,
5327          last_updated_by = hz_utility_pub.user_id,
5328          last_update_login = hz_utility_pub.last_update_login,
5329          request_id =  hz_utility_pub.request_id,
5330          program_application_id = hz_utility_pub.program_application_id,
5331          program_id = hz_utility_pub.program_id,
5332          program_update_date = sysdate
5333          WHERE relationship_id = p_from_id;
5334 	  ---Start of Bug:3880218----
5335 	 IF l_rel_party_id is not null THEN
5336 		 UPDATE HZ_PARTIES
5337 		 SET STATUS = 'I',
5338 		     last_update_date = hz_utility_pub.last_update_date,
5339 		     last_updated_by = hz_utility_pub.user_id,
5340 		     last_update_login = hz_utility_pub.last_update_login,
5341 		     request_id =  hz_utility_pub.request_id,
5342 		     program_application_id = hz_utility_pub.program_application_id,
5343 		     program_id = hz_utility_pub.program_id,
5344 		     program_update_date = sysdate
5345 		 WHERE PARTY_ID = l_rel_party_id;
5346 	 END IF;
5347 	 ----End of Bug:3880218----
5348 	 ----Start of DlProject Phase2--------------------
5349          do_hierarchy_nodes_merge(p_from_id => p_from_id,
5350 			      p_from_fk_id => p_from_fk_id,
5351 			      p_to_fk_id => p_to_fk_id,
5352 			      x_return_status =>x_return_status,
5353 			      p_action => 'I'
5354 			      );
5355          ----End of DlProject Phase2--------------------
5356        ELSE
5357 --bug 4867151--start
5358 	      IF l_rel_party_id is not null THEN
5359 		      UPDATE HZ_PARTIES
5360 		      SET STATUS = 'M',
5361 		          last_update_date = hz_utility_pub.last_update_date,
5362 		          last_updated_by = hz_utility_pub.user_id,
5363 		          last_update_login = hz_utility_pub.last_update_login,
5364 		          request_id =  hz_utility_pub.request_id,
5365 		          program_application_id = hz_utility_pub.program_application_id,
5366 		          program_id = hz_utility_pub.program_id,
5367 		          program_update_date = sysdate
5368 		      WHERE PARTY_ID in (select party_id from hz_relationships where subject_id=p_to_fk_id
5369 	      and object_id=p_to_fk_id and relationship_id <>p_from_id and status='A'
5370         AND ((start_date between from_start_date and from_end_date)
5371         or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5372         or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date)));
5373 	      END IF;
5374 
5375       	 UPDATE HZ_RELATIONSHIPS
5376          SET
5377          STATUS = 'M',
5378          END_DATE = sysdate,
5379          last_update_date = hz_utility_pub.last_update_date,
5380          last_updated_by = hz_utility_pub.user_id,
5381          last_update_login = hz_utility_pub.last_update_login,
5382          request_id =  hz_utility_pub.request_id,
5383          program_application_id = hz_utility_pub.program_application_id,
5384          program_id = hz_utility_pub.program_id,
5385          program_update_date = sysdate
5386          WHERE relationship_id in (select relationship_id from hz_relationships where subject_id=p_to_fk_id
5387 	      and object_id=p_to_fk_id and relationship_id <>p_from_id and status='A'
5388         AND ((start_date between from_start_date and from_end_date)
5389         or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5390         or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date)));
5391 
5392 
5393          do_hierarchy_nodes_merge(p_from_id => p_from_id,
5394 			      p_from_fk_id => p_from_fk_id,
5395 			      p_to_fk_id => p_to_fk_id,
5396 			      x_return_status =>x_return_status,
5397 			      p_action => 'M'
5398 			      );
5399 
5400 --bug 4867151--end
5401       END IF;  --l_self_rel_flag
5402 
5403       EXCEPTION
5404       WHEN OTHERS THEN
5405       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5406       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5407       FND_MSG_PUB.ADD;
5408       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5409 
5410       END;
5411     END IF;    --l_subject_id = p_to_fk_id
5412 
5413 
5414 
5415   END IF;
5416 
5417 EXCEPTION
5418   WHEN OTHERS THEN
5419     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5420     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5421     FND_MSG_PUB.ADD;
5422     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5423 END do_party_reln_obj_merge;
5424 
5425 PROCEDURE do_party_reln_subj_merge(
5426         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
5427         x_to_id         IN OUT NOCOPY  NUMBER,
5428         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
5429         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
5430         x_return_status IN OUT NOCOPY          VARCHAR2
5431 
5432 ) IS
5433 
5434 CURSOR c_party(cp_party_reln_id NUMBER) IS
5435   SELECT party_id
5436   FROM HZ_RELATIONSHIPS
5437   WHERE  relationship_id = cp_party_reln_id
5438   AND DIRECTIONAL_FLAG = 'F'
5439   and status in ('A','I'); -- bug 5094383
5440 
5441 CURSOR c_to_party_reln IS
5442   SELECT relationship_id
5443   FROM   HZ_RELATIONSHIPS
5444   WHERE  relationship_id = x_to_id
5445   FOR UPDATE NOWAIT;
5446 
5447 cursor c_start_end_date is
5448  SELECT start_date, nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')), actual_content_source --5404244
5449          FROM   HZ_RELATIONSHIPS
5450          WHERE  relationship_id = p_from_id
5451          AND DIRECTIONAL_FLAG='F';
5452 
5453 CURSOR c_check_valid_merge(from_start_date date, from_end_date date, from_cont_source_type VARCHAR2, from_cont_source VARCHAR2) IS
5454   SELECT relationship_id, nvl(request_id,-1)
5455   FROM   HZ_RELATIONSHIPS
5456   WHERE  subject_id = p_to_fk_id
5457   AND actual_content_source = DECODE(from_cont_source_type, 'PURCHASED', from_cont_source, actual_content_source) --5404244
5458   AND object_id = (
5459          SELECT OBJECT_ID
5460          FROM   HZ_RELATIONSHIPS
5461          WHERE  relationship_id = p_from_id
5462          AND DIRECTIONAL_FLAG='F')
5463   AND  object_id NOT IN
5464   ((SELECT from_party_id FROM hz_merge_parties WHERE to_party_id = p_to_fk_id AND merge_status='PENDING' )) --bug 4867151
5465   AND object_id NOT IN
5466   ((SELECT to_party_id FROM hz_merge_parties WHERE to_party_id = p_to_fk_id AND merge_status='PENDING' )) --bug 4867151
5467   AND relationship_code = (
5468          SELECT relationship_code -- Bug No: 4571969
5469          FROM   HZ_RELATIONSHIPS
5470          WHERE  relationship_id = p_from_id
5471          AND DIRECTIONAL_FLAG='F')
5472   AND DIRECTIONAL_FLAG = 'F'
5473   AND ((start_date between from_start_date and from_end_date)
5474           or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5475           or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date))
5476   AND status IN ('A','I'); --bug 5260367
5477 
5478 l_party_rel_id NUMBER;
5479 l_from_party_id NUMBER;
5480 l_to_party_id   NUMBER;
5481 l_dup_reln_id   NUMBER;
5482 l_request_id    NUMBER;
5483 l_from_last_upd_date DATE;
5484 l_to_last_upd_date DATE;
5485 l_from_party_reln_type VARCHAR2(255);
5486 l_merge_to_id NUMBER;
5487 l_temp NUMBER;
5488 from_start_date date;
5489 from_end_date date;
5490 --Bug 2619913 Do not allow self relationships creation unless
5491 --defined in the relationship type table
5492 
5493 l_object_id NUMBER;
5494 l_rel_type HZ_RELATIONSHIPS.RELATIONSHIP_TYPE%TYPE;
5495 l_rel_code HZ_RELATIONSHIPS.RELATIONSHIP_CODE%TYPE;
5496 l_subject_type HZ_RELATIONSHIPS.SUBJECT_TYPE%TYPE;
5497 l_object_type HZ_RELATIONSHIPS.OBJECT_TYPE%TYPE;
5498 l_self_rel_flag VARCHAR2(1);
5499 
5500 l_rel_party_id        HZ_RELATIONSHIPS.PARTY_ID%TYPE;
5501 l_new_subj_party_name HZ_PARTIES.PARTY_NAME%TYPE;
5502 l_object_name         HZ_PARTIES.PARTY_NAME%TYPE;
5503 l_rel_party_number    HZ_PARTIES.PARTY_NUMBER%TYPE;
5504 from_cont_source    HZ_RELATIONSHIPS.ACTUAL_CONTENT_SOURCE%TYPE; --5404244
5505 from_cont_source_type HZ_ORIG_SYSTEMS_B.ORIG_SYSTEM_TYPE%TYPE;
5506 
5507 --6696774 start
5508 l_par_exists          VARCHAR2(1);
5509 l_direction_code      HZ_RELATIONSHIPS.DIRECTION_CODE%TYPE;
5510 --6696774 start END
5511 BEGIN
5512 
5513   IF (x_to_id <> FND_API.G_MISS_NUM AND x_to_id <> p_from_id) THEN
5514 
5515     OPEN c_party(p_from_id);
5516     FETCH c_party INTO l_from_party_id;
5517     IF c_party%NOTFOUND THEN
5518       l_from_party_id := NULL;
5519     END IF;
5520     CLOSE c_party;
5521 
5522     OPEN c_party(x_to_id);
5523     FETCH c_party INTO l_from_party_id;
5524     IF c_party%NOTFOUND THEN
5525       l_to_party_id := NULL;
5526     END IF;
5527     CLOSE c_party;
5528 
5529 
5530     IF l_to_party_id IS NOT NULL AND l_from_party_id IS NOT NULL
5531        AND l_from_party_id <> l_to_party_id THEN
5532       FND_MESSAGE.SET_NAME('AR', 'HZ_RELN_MERGE_NOT_ALLOWED');
5533       FND_MESSAGE.SET_TOKEN('FROMID',p_from_id);
5534       FND_MESSAGE.SET_TOKEN('TOID',x_to_id);
5535       FND_MSG_PUB.ADD;
5536       x_return_status := FND_API.G_RET_STS_ERROR;
5537       RETURN;
5538     END IF;
5539 
5540     IF l_from_party_id IS NOT NULL THEN
5541       OPEN c_to_party_reln;
5542       UPDATE HZ_RELATIONSHIPS
5543       SET
5544         party_id = l_from_party_id,
5545         last_update_date = hz_utility_pub.last_update_date,
5546         last_updated_by = hz_utility_pub.user_id,
5547         last_update_login = hz_utility_pub.last_update_login,
5548         request_id =  hz_utility_pub.request_id,
5549         program_application_id = hz_utility_pub.program_application_id,
5550         program_id = hz_utility_pub.program_id,
5551         program_update_date = sysdate
5552       WHERE relationship_id = x_to_id;
5553       CLOSE c_to_party_reln;
5554     END IF;
5555 
5556     UPDATE HZ_RELATIONSHIPS
5557     SET
5558       STATUS = 'M',
5559       last_update_date = hz_utility_pub.last_update_date,
5560       last_updated_by = hz_utility_pub.user_id,
5561       last_update_login = hz_utility_pub.last_update_login,
5562       request_id =  hz_utility_pub.request_id,
5563       program_application_id = hz_utility_pub.program_application_id,
5564       program_id = hz_utility_pub.program_id,
5565       program_update_date = sysdate
5566     WHERE relationship_id = p_from_id;
5567 
5568 
5569 --4307667 merge usages with owner_table_name 'HZ_RELATIONSHIPS'
5570     UPDATE hz_party_usg_assignments
5571     SET status_flag = 'M',
5572         effective_end_date = trunc(sysdate)
5573     WHERE owner_table_id = p_from_id
5574     AND   owner_table_name = 'HZ_RELATIONSHIPS'
5575     AND   party_id = p_from_fk_id;
5576 
5577     ----Start of DlProject Phase2--------------------
5578      do_hierarchy_nodes_merge(p_from_id => p_from_id,
5579 			      p_from_fk_id => p_from_fk_id,
5580 			      p_to_fk_id => p_to_fk_id,
5581 			      x_return_status =>x_return_status,
5582 			      p_action => 'M',
5583 			      p_sub_obj_merge =>'SUB'
5584 			      );
5585     ----End of DlProject Phase2--------------------
5586 
5587   ELSE
5588     open c_start_end_date;
5589      fetch c_start_end_date into from_start_date,from_end_date,from_cont_source;
5590     close c_start_end_date;
5591 
5592     SELECT orig_system_type INTO from_cont_source_type --5404244
5593     FROM HZ_ORIG_SYSTEMS_B
5594     WHERE orig_system = from_cont_source;
5595 
5596 
5597     OPEN c_check_valid_merge(from_start_date,from_end_date,from_cont_source_type,from_cont_source);
5598 
5599     FETCH c_check_valid_merge INTO l_dup_reln_id, l_request_id;
5600     IF c_check_valid_merge%FOUND AND
5601        l_request_id <> hz_utility_pub.request_id THEN
5602       CLOSE c_check_valid_merge;
5603 
5604       FND_MESSAGE.SET_NAME('AR', 'HZ_RELN_TRANSFER_NOT_ALLOWED');
5605       FND_MESSAGE.SET_TOKEN('FROMID',p_from_id);
5606       FND_MSG_PUB.ADD;
5607       x_return_status := FND_API.G_RET_STS_ERROR;
5608       RETURN;
5609     END IF;
5610 
5611     CLOSE c_check_valid_merge;
5612 --6696774 Start
5613     SELECT object_id, relationship_type, relationship_code,subject_type,object_type,direction_code into l_object_id, l_rel_type, l_rel_code,
5614           l_subject_type, l_object_type, l_direction_code
5615     FROM HZ_RELATIONSHIPS
5616     WHERE relationship_id = p_from_id
5617     AND   directional_flag = 'F';
5618 
5619     l_par_exists := 'N';
5620 
5621     BEGIN
5622           SELECT 'Y' into l_par_exists
5623           FROM hz_hierarchy_nodes
5624           WHERE child_id = l_object_id
5625           AND   parent_id = p_to_fk_id
5626           AND   l_direction_code = 'C'
5627           AND rownum = 1;
5628     EXCEPTION
5629           WHEN NO_DATA_FOUND THEN
5630               null;
5631     END;
5632 
5633     SELECT allow_relate_to_self_flag
5634     INTO   l_self_rel_flag
5635     FROM   HZ_RELATIONSHIP_TYPES
5636     WHERE RELATIONSHIP_TYPE = l_rel_type
5637     AND FORWARD_REL_CODE = l_rel_code
5638     AND SUBJECT_TYPE = l_subject_type
5639     AND OBJECT_TYPE =  l_object_type;
5640 
5641 IF (l_object_id <> p_to_fk_id OR l_self_rel_flag = 'Y') AND l_par_exists = 'N' THEN
5642 --6696774 End
5643     ----Start of DlProject Phase2--------------------
5644      do_hierarchy_nodes_merge(p_from_id => p_from_id,
5645 			      p_from_fk_id => p_from_fk_id,
5646 			      p_to_fk_id => p_to_fk_id,
5647 			      x_return_status =>x_return_status,
5648 			      p_action => 'T',
5649 			      p_sub_obj_merge =>'SUB'
5650 			      );
5651     ----End of DlProject Phase2--------------------
5652 
5653     UPDATE HZ_RELATIONSHIPS
5654     SET
5655       subject_id = p_to_fk_id,
5656       last_update_date = hz_utility_pub.last_update_date,
5657       last_updated_by = hz_utility_pub.user_id,
5658       last_update_login = hz_utility_pub.last_update_login,
5659       request_id =  hz_utility_pub.request_id,
5660       program_application_id = hz_utility_pub.program_application_id,
5661       program_id = hz_utility_pub.program_id,
5662       program_update_date = sysdate
5663     WHERE relationship_id = p_from_id
5664     AND DIRECTIONAL_FLAG = 'F'
5665     RETURNING  object_id, relationship_type, relationship_code ,
5666                subject_type, object_type, party_id
5667     into l_object_id, l_rel_type, l_rel_code,
5668          l_subject_type , l_object_type, l_rel_party_id;
5669 
5670     UPDATE HZ_RELATIONSHIPS
5671     SET
5672       object_id = p_to_fk_id,
5673       last_update_date = hz_utility_pub.last_update_date,
5674       last_updated_by = hz_utility_pub.user_id,
5675       last_update_login = hz_utility_pub.last_update_login,
5676       request_id =  hz_utility_pub.request_id,
5677       program_application_id = hz_utility_pub.program_application_id,
5678       program_id = hz_utility_pub.program_id,
5679       program_update_date = sysdate
5680     WHERE relationship_id = p_from_id
5681     AND DIRECTIONAL_FLAG = 'B';
5682 
5683       ---Bug# 2688231 After transferring the reln,the name
5684       --- of the relationship party should also be changed
5685 
5686      if l_rel_party_id is not null then
5687 
5688       select sub.party_name , obj.party_name , rel.party_number
5689       into l_new_subj_party_name , l_object_name , l_rel_party_number
5690       from hz_parties sub , hz_parties obj , hz_parties rel
5691       where sub.party_id = p_to_fk_id
5692       and   obj.party_id = l_object_id
5693       and   rel.party_id = l_rel_party_id;
5694 
5695       UPDATE HZ_PARTIES
5696       SET PARTY_NAME = 	SUBSTRB(l_new_subj_party_name || '-' ||
5697                                 l_object_name  || '-' ||
5698                                 l_rel_party_number, 1, 360)
5699       WHERE party_id = l_rel_party_id;
5700 
5701     end if;
5702      --Check if the object_id and subject_id are same and the
5703     --6696774 start
5704      ELSIF (l_object_id = p_to_fk_id AND l_self_rel_flag = 'N') OR l_par_exists = 'Y' THEN  --5591581
5705      --IF l_object_id = p_to_fk_id THEN
5706     --6696774 End
5707 
5708        BEGIN
5709 
5710          --check self relationship flag
5711          SELECT allow_relate_to_self_flag
5712          INTO   l_self_rel_flag
5713          FROM   HZ_RELATIONSHIP_TYPES
5714          WHERE RELATIONSHIP_TYPE = l_rel_type
5715          AND FORWARD_REL_CODE = l_rel_code
5716          AND SUBJECT_TYPE = l_subject_type
5717          AND OBJECT_TYPE =  l_object_type;
5718 
5719        IF    l_self_rel_flag = 'N' THEN
5720          --Inactivate the relationships both forward and backward
5721          UPDATE HZ_RELATIONSHIPS
5722          SET
5723          STATUS = 'I',
5724          END_DATE = sysdate,
5725          last_update_date = hz_utility_pub.last_update_date,
5726          last_updated_by = hz_utility_pub.user_id,
5727          last_update_login = hz_utility_pub.last_update_login,
5728          request_id =  hz_utility_pub.request_id,
5729          program_application_id = hz_utility_pub.program_application_id,
5730          program_id = hz_utility_pub.program_id,
5731          program_update_date = sysdate
5732          WHERE relationship_id = p_from_id;
5733 
5734 	      ---Start of Bug:3880218----
5735 	      IF l_rel_party_id is not null THEN
5736 		      UPDATE HZ_PARTIES
5737 		      SET STATUS = 'I',
5738 		          last_update_date = hz_utility_pub.last_update_date,
5739 		          last_updated_by = hz_utility_pub.user_id,
5740 		          last_update_login = hz_utility_pub.last_update_login,
5741 		          request_id =  hz_utility_pub.request_id,
5742 		          program_application_id = hz_utility_pub.program_application_id,
5743 		          program_id = hz_utility_pub.program_id,
5744 		          program_update_date = sysdate
5745 		      WHERE PARTY_ID = l_rel_party_id;
5746 	      END IF;
5747 	      ----End of Bug:3880218----
5748 	 ----Start of DlProject Phase2--------------------
5749          do_hierarchy_nodes_merge(p_from_id => p_from_id,
5750 			      p_from_fk_id => p_from_fk_id,
5751 			      p_to_fk_id => p_to_fk_id,
5752 			      x_return_status =>x_return_status,
5753 			      p_action => 'I'
5754 			      );
5755          ----End of DlProject Phase2--------------------
5756 ---bug 4867151 start
5757        ELSE
5758 	        IF l_rel_party_id is not null THEN
5759 		        UPDATE HZ_PARTIES
5760 		        SET STATUS = 'M',
5761 		            last_update_date = hz_utility_pub.last_update_date,
5762 		            last_updated_by = hz_utility_pub.user_id,
5763 		            last_update_login = hz_utility_pub.last_update_login,
5764 		            request_id =  hz_utility_pub.request_id,
5765 		            program_application_id = hz_utility_pub.program_application_id,
5766 		            program_id = hz_utility_pub.program_id,
5767 		            program_update_date = sysdate
5768 		        WHERE PARTY_ID IN (select party_id from hz_relationships where subject_id=p_to_fk_id
5769 	              and object_id=p_to_fk_id and relationship_id <>p_from_id and status='A'
5770                 AND ((start_date between from_start_date and from_end_date)
5771           or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5772           or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date)));
5773 
5774 	        UPDATE HZ_RELATIONSHIPS
5775                 SET
5776                 STATUS = 'M',
5777                 END_DATE = sysdate,
5778                 last_update_date = hz_utility_pub.last_update_date,
5779                 last_updated_by = hz_utility_pub.user_id,
5780                 last_update_login = hz_utility_pub.last_update_login,
5781                 request_id =  hz_utility_pub.request_id,
5782                 program_application_id = hz_utility_pub.program_application_id,
5783                 program_id = hz_utility_pub.program_id,
5784                 program_update_date = sysdate
5785                 WHERE relationship_id in (select relationship_id from hz_relationships where subject_id=p_to_fk_id
5786 	              and object_id=p_to_fk_id and relationship_id <>p_from_id and status='A'
5787                 AND ((start_date between from_start_date and from_end_date)
5788                 or (nvl(end_date,to_date('12/31/4712','MM/DD/YYYY')) between from_start_date and from_end_date)
5789                 or(start_date<from_start_date and nvl(end_date,to_date('12/31/4712','MM/DD/YYYY'))>from_end_date)));
5790 
5791 	        END IF;
5792           do_hierarchy_nodes_merge(p_from_id => p_from_id,
5793 			      p_from_fk_id => p_from_fk_id,
5794 			      p_to_fk_id => p_to_fk_id,
5795 			      x_return_status =>x_return_status,
5796 			      p_action => 'M'
5797 			      );
5798 ---bug 4867151 end
5799       END IF;  --l_self_rel_flag
5800 
5801       EXCEPTION
5802       WHEN OTHERS THEN
5803       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5804       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5805       FND_MSG_PUB.ADD;
5806       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5807 
5808       END;
5809     END IF;    --l_object_id = p_to_fk_id
5810 
5811 
5812 
5813 
5814   END IF;
5815 
5816 EXCEPTION
5817   WHEN OTHERS THEN
5818     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5819     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5820     FND_MSG_PUB.ADD;
5821     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5822 END do_party_reln_subj_merge;
5823 
5824 PROCEDURE do_party_relationship_merge(
5825         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
5826         x_to_id         IN OUT NOCOPY  NUMBER,
5827         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
5828         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
5829         x_return_status IN OUT NOCOPY          VARCHAR2
5830 ) IS
5831 
5832 CURSOR c_merge_to_party_reln IS
5833   SELECT relationship_id
5834   FROM HZ_RELATIONSHIPS --4500011
5835   WHERE party_id = p_to_fk_id
5836   AND subject_table_name = 'HZ_PARTIES'
5837   AND object_table_name = 'HZ_PARTIES'
5838   AND directional_flag = 'F';
5839 
5840 l_to_preln_id NUMBER;
5841 
5842 
5843 BEGIN
5844 
5845   OPEN c_merge_to_party_reln;
5846   FETCH c_merge_to_party_reln INTO l_to_preln_id;
5847   IF c_merge_to_party_reln%NOTFOUND THEN
5848     CLOSE c_merge_to_party_reln;
5849     FND_MESSAGE.SET_NAME('AR', 'HZ_NO_MERGE_TO_PRELN');
5850     FND_MESSAGE.SET_TOKEN('TOPARTYID',p_to_fk_id);
5851     FND_MSG_PUB.ADD;
5852     x_return_status := FND_API.G_RET_STS_ERROR;
5853   ELSE
5854     CLOSE c_merge_to_party_reln;
5855 
5856     UPDATE HZ_RELATIONSHIPS
5857     SET
5858       STATUS = 'M',
5859       last_update_date = hz_utility_pub.last_update_date,
5860       last_updated_by = hz_utility_pub.user_id,
5861       last_update_login = hz_utility_pub.last_update_login,
5862       request_id =  hz_utility_pub.request_id,
5863       program_application_id = hz_utility_pub.program_application_id,
5864       program_id = hz_utility_pub.program_id,
5865       program_update_date = sysdate
5866     WHERE relationship_id = p_from_id;
5867     ----Start of DlProject Phase2--------------------
5868      do_hierarchy_nodes_merge(p_from_id => p_from_id,
5869 			      p_from_fk_id => p_from_fk_id,
5870 			      p_to_fk_id => p_to_fk_id,
5871 			      x_return_status =>x_return_status,
5872 			      p_action => 'M'
5873 			      );
5874     ----End of DlProject Phase2--------------------
5875 
5876 
5877     --For NOCOPY fix
5878     x_to_id := l_to_preln_id;
5879   END IF;
5880 EXCEPTION
5881   WHEN OTHERS THEN
5882     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
5883     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5884     FND_MSG_PUB.ADD;
5885     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5886 END do_party_relationship_merge;
5887 
5888 PROCEDURE do_org_profile_merge(
5889         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
5890         x_to_id         IN OUT NOCOPY  NUMBER,
5891         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
5892         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
5893         x_return_status IN OUT NOCOPY          VARCHAR2
5894 ) IS
5895 
5896 CURSOR c_merge_to_org_prof(cp_cont_source VARCHAR2) IS
5897   SELECT organization_profile_id, last_update_date, duns_number_c
5898   FROM HZ_ORGANIZATION_PROFILES
5899   WHERE party_id = p_to_fk_id
5900   AND effective_end_date is null
5901   AND ACTUAL_CONTENT_SOURCE = cp_cont_source;
5902 
5903 CURSOR c_cont_source IS
5904   SELECT ACTUAL_CONTENT_SOURCE, last_update_date, duns_number_c
5905   FROM HZ_ORGANIZATION_PROFILES
5906   WHERE organization_profile_id = p_from_id;
5907 
5908 l_cont_source VARCHAR2(50);
5909 l_to_orgpro_id NUMBER;
5910 l_merge_to_id NUMBER := FND_API.G_MISS_NUM;
5911 l_from_last_upd_date DATE;
5912 l_to_last_upd_date DATE;
5913 l_from_duns_number VARCHAR2(255);
5914 l_to_duns_number VARCHAR2(255);
5915 l_from_branch_flag VARCHAR2(1);
5916 l_to_branch_flag VARCHAR2(1);
5917 l_temp NUMBER;
5918 
5919 l_msg_data VARCHAR2(2000);
5920 l_msg_count NUMBER;
5921 l_return_status VARCHAR2(255);
5922 
5923 
5924 l_temp_party_id NUMBER;
5925 l_temp_party_number VARCHAR2(255);
5926 
5927 l_organization_rec HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE;
5928 BEGIN
5929 
5930   OPEN c_cont_source;
5931   FETCH c_cont_source INTO l_cont_source, l_from_last_upd_date, l_from_duns_number;
5932   CLOSE c_cont_source;
5933 
5934   IF l_cont_source = 'USER_ENTERED' THEN
5935     open c_merge_to_org_prof('USER_ENTERED');
5936     FETCH c_merge_to_org_prof INTO x_to_id, l_to_last_upd_date, l_to_duns_number;
5937     IF c_merge_to_org_prof%NOTFOUND THEN
5938       CLOSE c_merge_to_org_prof;
5939       OPEN c_merge_to_org_prof('SST');
5940       FETCH c_merge_to_org_prof INTO x_to_id, l_to_last_upd_date, l_to_duns_number;
5941       IF c_merge_to_org_prof%NOTFOUND THEN
5942         CLOSE c_merge_to_org_prof;
5943         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_MERGE_TO_ORGPRO');
5944         FND_MESSAGE.SET_TOKEN('ToId',p_to_fk_id);
5945         FND_MSG_PUB.ADD;
5946         x_return_status := FND_API.G_RET_STS_ERROR;
5947         RETURN;
5948       END IF;
5949       CLOSE c_merge_to_org_prof;
5950     ELSE
5951       CLOSE c_merge_to_org_prof;
5952     END IF;
5953 
5954   ELSIF l_cont_source = 'SST' THEN
5955     open c_merge_to_org_prof('SST');
5956     FETCH c_merge_to_org_prof INTO x_to_id, l_to_last_upd_date, l_to_duns_number;
5957     IF c_merge_to_org_prof%NOTFOUND THEN
5958       CLOSE c_merge_to_org_prof;
5959       OPEN c_merge_to_org_prof('USER_ENTERED');
5960       FETCH c_merge_to_org_prof INTO x_to_id, l_to_last_upd_date, l_to_duns_number;
5961       IF c_merge_to_org_prof%NOTFOUND THEN
5962         CLOSE c_merge_to_org_prof;
5963         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_MERGE_TO_ORGPRO');
5964         FND_MESSAGE.SET_TOKEN('ToId',p_to_fk_id);
5965         FND_MSG_PUB.ADD;
5966         x_return_status := FND_API.G_RET_STS_ERROR;
5967         RETURN;
5968       END IF;
5969       CLOSE c_merge_to_org_prof;
5970     ELSE
5971       CLOSE c_merge_to_org_prof;
5972     END IF;
5973 
5974   ELSIF l_cont_source NOT IN ('SST','USER_ENTERED')AND l_cont_source IS NOT NULL THEN --Bug No:4114254
5975     IF x_to_id IS NULL OR x_to_id = FND_API.G_MISS_NUM THEN
5976       HZ_PARTY_V2PUB.get_organization_rec(
5977         FND_API.G_FALSE,
5978         p_from_fk_id,
5979         l_cont_source,
5980         l_organization_rec,
5981         l_return_status,
5982         l_msg_count,
5983         l_msg_data);
5984 
5985       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5986         RETURN;
5987       END IF;
5988 
5989       l_organization_rec.party_rec.party_id := p_to_fk_id;
5990       HZ_PARTY_V2PUB.create_organization(
5991         FND_API.G_FALSE,
5992         l_organization_rec,
5993         l_return_status,
5994         l_msg_count,
5995         l_msg_data,
5996         l_temp_party_id,
5997         l_temp_party_number,
5998         x_to_id);
5999 
6000       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6001         RETURN;
6002       END IF;
6003     END IF;
6004   END IF;
6005 
6006   UPDATE HZ_ORGANIZATION_PROFILES
6007   SET
6008       STATUS = 'M',
6009       effective_end_date = trunc(SYSDATE-1),
6010       last_update_date = hz_utility_pub.last_update_date,
6011       last_updated_by = hz_utility_pub.user_id,
6012       last_update_login = hz_utility_pub.last_update_login,
6013       request_id =  hz_utility_pub.request_id,
6014       program_application_id = hz_utility_pub.program_application_id,
6015       program_id = hz_utility_pub.program_id,
6016       program_update_date = sysdate
6017   WHERE organization_profile_id = p_from_id;
6018 
6019 EXCEPTION
6020   WHEN OTHERS THEN
6021     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6022     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6023     FND_MSG_PUB.ADD;
6024     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6025 END do_org_profile_merge;
6026 
6027 PROCEDURE do_per_profile_merge(
6028         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6029         x_to_id         IN OUT NOCOPY  NUMBER,
6030         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
6031         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6032         x_return_status IN OUT NOCOPY          VARCHAR2
6033 ) IS
6034 
6035 CURSOR c_merge_to_per_prof(cp_cont_source VARCHAR2) IS
6036   SELECT person_profile_id
6037   FROM HZ_PERSON_PROFILES
6038   WHERE party_id = p_to_fk_id
6039   AND effective_end_date is null
6040   AND content_source_type = cp_cont_source;
6041 
6042 CURSOR c_cont_source IS
6043   SELECT CONTENT_SOURCE_TYPE
6044   FROM HZ_PERSON_PROFILES
6045   WHERE person_profile_id = p_from_id;
6046 
6047 l_cont_source VARCHAR2(50);
6048 l_to_perpro_id NUMBER;
6049 
6050 BEGIN
6051 
6052   OPEN c_cont_source;
6053   FETCH c_cont_source INTO l_cont_source;
6054   CLOSE c_cont_source;
6055 
6056   OPEN c_merge_to_per_prof(l_cont_source);
6057   FETCH c_merge_to_per_prof INTO l_to_perpro_id;
6058   IF c_merge_to_per_prof%NOTFOUND THEN
6059     CLOSE c_merge_to_per_prof;
6060     IF l_cont_source = 'USER_ENTERED' THEN
6061       FND_MESSAGE.SET_NAME('AR', 'HZ_NO_MERGE_TO_PERPRO');
6062       FND_MESSAGE.SET_TOKEN('ToId',p_to_fk_id);
6063       FND_MSG_PUB.ADD;
6064       x_return_status := FND_API.G_RET_STS_ERROR;
6065     ELSE
6066       UPDATE HZ_PERSON_PROFILES
6067       SET
6068         party_id  = p_to_fk_id,
6069         last_update_date = hz_utility_pub.last_update_date,
6070         last_updated_by = hz_utility_pub.user_id,
6071         last_update_login = hz_utility_pub.last_update_login,
6072         request_id =  hz_utility_pub.request_id,
6073         program_application_id = hz_utility_pub.program_application_id,
6074         program_id = hz_utility_pub.program_id,
6075         program_update_date = sysdate
6076       WHERE person_profile_id = p_from_id;
6077     END IF;
6078   ELSE
6079     CLOSE c_merge_to_per_prof;
6080 
6081     UPDATE HZ_PERSON_PROFILES
6082     SET
6083       STATUS = 'M',
6084       effective_end_date = trunc(SYSDATE-1),
6085       last_update_date = hz_utility_pub.last_update_date,
6086       last_updated_by = hz_utility_pub.user_id,
6087       last_update_login = hz_utility_pub.last_update_login,
6088       request_id =  hz_utility_pub.request_id,
6089       program_application_id = hz_utility_pub.program_application_id,
6090       program_id = hz_utility_pub.program_id,
6091       program_update_date = sysdate
6092     WHERE person_profile_id = p_from_id;
6093 
6094     --For NOCOPY fix
6095     x_to_id := l_to_perpro_id;
6096   END IF;
6097 EXCEPTION
6098   WHEN OTHERS THEN
6099     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6100     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6101     FND_MSG_PUB.ADD;
6102     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6103 END do_per_profile_merge;
6104 
6105 PROCEDURE do_party_site_merge(
6106         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6107         x_to_id         IN OUT NOCOPY  NUMBER,
6108         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
6109         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6110         p_batch_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6111         x_return_status IN OUT NOCOPY          VARCHAR2
6112 ) IS
6113 
6114 CURSOR c_cont_source IS
6115   SELECT l.CONTENT_SOURCE_TYPE, l.last_update_date, ps.party_id,
6116          ps.identifying_address_flag, ps.party_site_number
6117   FROM HZ_LOCATIONS l, HZ_PARTY_SITES ps
6118   WHERE ps.party_site_id = p_from_id
6119   AND ps.location_id = l.location_id;
6120 
6121 CURSOR c_merge_to IS
6122   SELECT ps.party_id, loc.content_source_type,loc.country,
6123          loc.address1, loc.address2, loc.address3, loc.address4,
6124 	 loc.city, loc.postal_code, loc.state, loc.province,
6125 	 loc.county,loc.location_id
6126   FROM HZ_LOCATIONS loc, HZ_PARTY_SITES ps
6127   WHERE ps.party_site_id = x_to_id
6128   AND   ps.location_id   = loc.location_id;
6129 --bug 4569674
6130 /*CURSOR c_loc_assignments IS
6131    SELECT la.loc_id, la.org_id
6132    FROM   HZ_LOC_ASSIGNMENTS la, HZ_PARTY_SITES ps
6133    WHERE  ps.party_site_id = p_from_id
6134    AND  la.location_id = ps.location_id
6135    AND  la.org_id NOT IN ( SELECT DISTINCT la1.org_id
6136                            FROM  HZ_LOC_ASSIGNMENTS la1, HZ_PARTY_SITES ps1
6137                            WHERE ps1.party_site_id = x_to_id
6138                            AND la1.location_id = ps1.location_id
6139                          );
6140 */
6141 CURSOR c_locations(x_party_site_id NUMBER) IS
6142  SELECT loc.location_id
6143    FROM HZ_PARTY_SITES ps,
6144         HZ_LOCATIONS   loc
6145   WHERE ps.location_id   = loc.location_id
6146    AND  ps.party_site_id = x_party_site_id;
6147 
6148 CURSOR c_from_party_type IS
6149  SELECT party_type
6150   FROM  HZ_PARTY_SITES ps,
6151         HZ_PARTIES  p
6152   WHERE ps.party_id      = p.party_id
6153    AND  ps.party_site_id = p_from_id;
6154 
6155 l_from_last_upd_date DATE;
6156 l_to_last_upd_date DATE;
6157 l_cont_source HZ_LOCATIONS.CONTENT_SOURCE_TYPE%TYPE;
6158 l_cont_source_to HZ_LOCATIONS.CONTENT_SOURCE_TYPE%TYPE;
6159 l_location_id HZ_LOCATIONS.LOCATION_ID%TYPE;
6160 l_address1 HZ_LOCATIONS.ADDRESS1%TYPE;
6161 l_address2 HZ_LOCATIONS.ADDRESS2%TYPE;
6162 l_address3 HZ_LOCATIONS.ADDRESS3%TYPE;
6163 l_address4 HZ_LOCATIONS.ADDRESS4%TYPE;
6164 l_country  HZ_LOCATIONS.COUNTRY%TYPE;
6165 l_city     HZ_LOCATIONS.CITY%TYPE;
6166 l_state    HZ_LOCATIONS.STATE%TYPE;
6167 l_county   HZ_LOCATIONS.COUNTY%TYPE;
6168 l_province HZ_LOCATIONS.PROVINCE%TYPE;
6169 l_postal   HZ_LOCATIONS.POSTAL_CODE%TYPE;
6170 l_from_party_id HZ_PARTY_SITES.PARTY_ID%TYPE;
6171 l_to_party_id   HZ_PARTY_SITES.PARTY_ID%TYPE;
6172 l_ident_flag    HZ_PARTY_SITES.IDENTIFYING_ADDRESS_FLAG%TYPE;
6173 l_merge_to_id NUMBER;
6174 l_merge_to_loc_id NUMBER;
6175 l_temp NUMBER;
6176 l_temp1 NUMBER;
6177 
6178 l_dup_exists    VARCHAR2(20);
6179 l_to_id 	NUMBER;
6180 
6181 l_discard VARCHAR2(1) := 'N';
6182 
6183 party_site_rec                 HZ_PARTY_SITE_V2PUB.party_site_rec_type;
6184 l_party_site_number            VARCHAR2(30);
6185 l_msg_data                     VARCHAR2(2000);
6186 l_msg_count                    NUMBER := 0;
6187 l_profile_option               VARCHAR2(1) := 'Y';
6188 
6189 l_ps_number HZ_PARTY_SITES.PARTY_SITE_NUMBER%TYPE;
6190 l_actual_cont_source VARCHAR2(30);
6191 --l_loc_id HZ_LOC_ASSIGNMENTS.LOC_ID%TYPE;   bug 4569674
6192 --l_org_id HZ_LOC_ASSIGNMENTS.ORG_ID%TYPE;
6193 l_from_location_id HZ_LOCATIONS.LOCATION_ID%TYPE;
6194 l_to_location_id   HZ_LOCATIONS.LOCATION_ID%TYPE;
6195 l_from_party_type  HZ_PARTIES.PARTY_TYPE%TYPE;
6196 to_party_loc_id    HZ_LOCATIONS.LOCATION_ID%TYPE;
6197 map_ps_id          HZ_PARTY_SITES.PARTY_SITE_ID%TYPE;
6198 BEGIN
6199 
6200 
6201   OPEN c_cont_source;
6202   FETCH c_cont_source INTO l_cont_source, l_from_last_upd_date, l_from_party_id,
6203                            l_ident_flag, l_ps_number;
6204   CLOSE c_cont_source;
6205 
6206   /* From Location_Id */
6207   OPEN  c_locations(p_from_id);
6208   FETCH c_locations INTO l_from_location_id;
6209   CLOSE c_locations;
6210 
6211   /* From Party_Type */
6212   OPEN  c_from_party_type;
6213   FETCH c_from_party_type INTO l_from_party_type;
6214   CLOSE c_from_party_type;
6215 
6216   IF l_from_party_type = 'PARTY_RELATIONSHIP' AND
6217      (x_to_id = FND_API.G_MISS_NUM OR x_to_id IS NULL OR p_from_id = x_to_id)
6218   THEN
6219    BEGIN
6220 
6221        /* Check if there is a ps in the merge batch that has the same loc */
6222        SELECT ps2.location_id INTO to_party_loc_id
6223         FROM  HZ_MERGE_PARTY_DETAILS mpd,
6224               HZ_PARTY_SITES         ps1,
6225               HZ_PARTY_SITES         ps2
6226        WHERE  ps1.party_site_id         =  mpd.merge_from_entity_id
6227          AND  ps2.party_site_id         =  mpd.merge_to_entity_id
6228          AND  mpd.merge_from_entity_id  <> nvl(mpd.merge_to_entity_id, -1)
6229          AND  ps1.location_id           =  l_from_location_id
6230          AND  merge_from_entity_id      <> p_from_id
6231          AND  mpd.batch_party_id        IN ( SELECT  batch_party_id
6232                                                FROM  hz_merge_parties mp,
6233                                                      hz_relationships r
6234                                                WHERE r.party_id       = p_from_fk_id
6235                                                 AND  mp.from_party_id = r.object_id
6236                                                 AND  mp.batch_id      = p_batch_id)
6237          AND  rownum                    =  1;
6238 
6239       BEGIN
6240           /* Check if to_party already has a ps which has the same loc */
6241           SELECT  party_site_id INTO map_ps_id
6242             FROM  HZ_PARTY_SITES
6243            WHERE  party_id    = p_to_fk_id
6244              AND  location_id = to_party_loc_id
6245              AND  rownum      = 1;
6246 
6247           /* Merge */
6248           x_to_id  := map_ps_id;
6249       EXCEPTION
6250           WHEN NO_DATA_FOUND THEN
6251                /* Transfer */
6252                UPDATE HZ_PARTY_SITES
6253                   SET LOCATION_ID   = to_party_loc_id
6254                 WHERE PARTY_SITE_ID = p_from_id ;
6255       END;
6256    EXCEPTION
6257     WHEN NO_DATA_FOUND THEN
6258          --NULL;
6259          -- Start changes for Bug 4577535
6260 
6261          l_dup_exists := HZ_MERGE_DUP_CHECK.check_address_dup(
6262 	 	 	 l_from_location_id,l_to_id, p_from_fk_id, p_to_fk_id,
6263 	 	         x_return_status);
6264 	 /* Merge */
6265 	 IF l_dup_exists = FND_API.G_TRUE THEN
6266 	    x_to_id  := l_to_id;
6267 	 END IF;
6268 
6269 	 WHEN OTHERS THEN
6270 	      FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6271 	      FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6272 	      FND_MSG_PUB.ADD;
6273 	      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6274 
6275 	 -- End changes for Bug 4577535
6276    END;
6277   END IF;
6278 
6279  IF x_to_id <> FND_API.G_MISS_NUM AND x_to_id IS NOT NULL
6280  THEN
6281 
6282     IF l_from_party_type <> 'PARTY_RELATIONSHIP' THEN
6283        /* To Location_Id */
6284        OPEN  c_locations(x_to_id);
6285        FETCH c_locations INTO l_to_location_id;
6286        CLOSE c_locations;
6287 
6288        UPDATE HZ_PARTY_SITES
6289          SET  location_id = l_to_location_id
6290         WHERE party_site_id IN (
6291               SELECT psr.party_site_id
6292                 FROM hz_parties       p,
6293                      hz_party_sites   psr,
6294                      hz_party_sites   pso,
6295                      hz_relationships r
6296               WHERE  pso.party_site_id = p_from_id
6297                 AND  r.object_id       = pso.party_id
6298                 AND  r.party_id        = p.party_id
6299                 AND  p.party_id        = psr.party_id
6300                 AND  psr.location_id   = l_from_location_id);
6301    END IF;
6302 
6303 
6304 /* Bug 2295088: Unset identifying_address_flag of the from site
6305    if 2 sites of the same party are being merged. */
6306 
6307   OPEN c_merge_to;
6308   FETCH c_merge_to INTO l_to_party_id, l_cont_source_to, l_country, l_address1,
6309         l_address2, l_address3, l_address4, l_city, l_postal, l_state,
6310         l_province, l_county,l_location_id;
6311   CLOSE c_merge_to;
6312 
6313   IF (l_from_party_id = l_to_party_id )THEN
6314       IF(l_ident_flag = 'Y') THEN
6315         IF l_cont_source_to = 'USER_ENTERED' THEN
6316            UPDATE hz_parties
6317            SET    country     = l_country,
6318                   address1    = l_address1,
6319                   address2    = l_address2,
6320                   address3    = l_address3,
6321                   address4    = l_address4,
6322                   city        = l_city,
6323                   postal_code = l_postal,
6324                   state       = l_state,
6325                   province    = l_province,
6326                   county      = l_county
6327            WHERE party_id     = l_to_party_id;
6328 
6329         END IF;
6330 
6331 		UPDATE HZ_PARTY_SITES
6332 		SET
6333 	   	identifying_address_flag = 'Y'
6334 		WHERE party_site_id = x_to_id;
6335 
6336 		UPDATE HZ_PARTY_SITES
6337 		SET
6338 	   	identifying_address_flag = 'N'
6339 		WHERE party_site_id = p_from_id;
6340 
6341    	END IF;
6342         UPDATE hz_parties
6343            SET    country     = l_country,
6344                   address1    = l_address1,
6345                   address2    = l_address2,
6346                   address3    = l_address3,
6347                   address4    = l_address4,
6348                   city        = l_city,
6349                   postal_code = l_postal,
6350                   state       = l_state,
6351                   province    = l_province,
6352                   county      = l_county
6353            WHERE party_id in
6354 		   			   (select ps.party_id from hz_party_sites ps,hz_relationships pr
6355                         where ps.location_id = l_to_location_id
6356 						and ps.identifying_address_flag(+)='Y'
6357 						and ps.party_id = pr.party_id
6358                         and pr.object_id=l_to_party_id);
6359   END IF;
6360 --bug 4569674 commenting code that creates missing Loc Assignments
6361   /* Bug Fix : 2506620. Create Missing Loc Assignments */
6362 /*  Open c_loc_assignments;
6363   Loop
6364   fetch c_loc_assignments into l_loc_id,l_org_id ;
6365   IF c_loc_assignments%NOTFOUND THEN
6366      EXIT;
6367   END IF;
6368   HZ_LOC_ASSIGNMENTS_PKG.Insert_Row (
6369                 X_LOCATION_ID                           => l_location_id,
6370                 X_LOC_ID                                => l_loc_id,
6371                 X_ORG_ID                                => l_org_id,
6372                 X_OBJECT_VERSION_NUMBER                 => 1,
6373                 X_CREATED_BY_MODULE                     => 'PARTY_MERGE',
6374                 X_APPLICATION_ID                        => 222
6375             );
6376 
6377    end loop;
6378    Close c_loc_assignments; */
6379    END IF; /*  x_to_id  */
6380 
6381    IF ((x_to_id <> FND_API.G_MISS_NUM AND
6382       x_to_id <> p_from_id) OR l_discard = 'Y') THEN
6383 
6384     UPDATE HZ_PARTY_SITES
6385     SET
6386       STATUS = 'M',
6387       last_update_date = hz_utility_pub.last_update_date,
6388       last_updated_by = hz_utility_pub.user_id,
6389       last_update_login = hz_utility_pub.last_update_login,
6390       request_id =  hz_utility_pub.request_id,
6391       program_application_id = hz_utility_pub.program_application_id,
6392       program_id = hz_utility_pub.program_id,
6393       program_update_date = sysdate
6394     WHERE party_site_id = p_from_id;
6395     /* Bug 3892399
6396     UPDATE HZ_ORIG_SYS_REFERENCES
6397     SET
6398       STATUS = 'I',
6399       last_update_date = hz_utility_pub.last_update_date,
6400       last_updated_by = hz_utility_pub.user_id,
6401       last_update_login = hz_utility_pub.last_update_login
6402     WHERE owner_table_id = p_from_id and owner_table_name='HZ_PARTY_SITES';
6403     */
6404       HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
6405                     p_init_msg_list => FND_API.G_FALSE,
6406                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
6407                     p_old_owner_table_id   => p_from_id,
6408 	            p_new_owner_table_id   => x_to_id,
6409                     p_owner_table_name  =>'HZ_PARTY_SITES',
6410                     p_orig_system => null,
6411                     p_orig_system_reference => null,
6412                     p_reason_code => 'MERGED',
6413                     x_return_status => x_return_status,
6414                     x_msg_count =>l_msg_count,
6415                     x_msg_data  =>l_msg_data);
6416       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6417 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6418 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
6419 	FND_MSG_PUB.ADD;
6420 	x_return_status := FND_API.G_RET_STS_ERROR;
6421 	RETURN;
6422       END IF;
6423 
6424 
6425    --For NOCOPY fix
6426    IF l_discard = 'Y' THEN
6427       x_to_id := 0;
6428    END IF;
6429 
6430 
6431   ELSE
6432 
6433     hz_cust_account_merge_v2pvt.get_party_site_rec (
6434          p_init_msg_list => 'T',
6435          p_party_site_id => p_from_id,
6436          x_party_site_rec => party_site_rec,
6437          x_actual_cont_source => l_actual_cont_source,
6438          x_return_status => x_return_status,
6439          x_msg_count => l_msg_count,
6440          x_msg_data => l_msg_data );
6441 
6442     IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6443       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6444       FND_MESSAGE.SET_TOKEN('ERROR','Cannot get party site ID : ' || p_from_id);
6445       FND_MSG_PUB.ADD;
6446       x_return_status := FND_API.G_RET_STS_ERROR;
6447 
6448       RETURN;
6449     END IF;
6450 --bug 4603928
6451 --    l_party_site_number := l_ps_number||'-MERGED';
6452     IF length(l_ps_number) >= 29 THEN
6453     l_party_site_number := substr(l_ps_number,1,28)||'-M';
6454     ELSE
6455     l_party_site_number := l_ps_number||'-M';
6456     END IF;
6457 --bug 4603928
6458 
6459     FOR I IN 1..100 LOOP
6460       BEGIN
6461         -- Update and set party_id = p_to_fk_id where pk = from_id
6462         UPDATE HZ_PARTY_SITES
6463         SET
6464           STATUS = 'M',
6465           party_site_number = l_party_site_number,
6466           last_update_date = hz_utility_pub.last_update_date,
6467           last_updated_by = hz_utility_pub.user_id,
6468           last_update_login = hz_utility_pub.last_update_login,
6469           request_id =  hz_utility_pub.request_id,
6470           program_application_id = hz_utility_pub.program_application_id,
6471           program_id = hz_utility_pub.program_id,
6472           program_update_date = sysdate
6473         WHERE party_site_id = p_from_id;
6474       EXCEPTION
6475         WHEN DUP_VAL_ON_INDEX THEN
6476 --bug 4603928
6477 --          l_party_site_number := l_party_site_number || I;
6478 	IF (length(l_party_site_number)+length(I) > 30 ) THEN
6479 	   l_party_site_number := substr(l_party_site_number,1,length(l_party_site_number)-length(I))|| I;
6480 	ELSE
6481 	   l_party_site_number := l_party_site_number || I;
6482 	END IF;
6483 --bug 4603928
6484       END;
6485     END LOOP;
6486     /*HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
6487                     p_init_msg_list => FND_API.G_FALSE,
6488                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
6489                     p_old_owner_table_id   => p_from_id,
6490 	            p_new_owner_table_id   => x_to_id,
6491                     p_owner_table_name  =>'HZ_PARTY_SITES',
6492                     p_orig_system => null,
6493                     p_orig_system_reference => null,
6494                     p_reason_code => 'MERGED',
6495                     x_return_status => x_return_status,
6496                     x_msg_count =>l_msg_count,
6497                     x_msg_data  =>l_msg_data);
6498       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6499 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6500 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
6501 	FND_MSG_PUB.ADD;
6502 	x_return_status := FND_API.G_RET_STS_ERROR;
6503 	RETURN;
6504       END IF;*/
6505 
6506     l_party_site_number := null;
6507     party_site_rec.party_site_id := FND_API.G_MISS_NUM;
6508     party_site_rec.party_id := p_to_fk_id;
6509     party_site_rec.party_site_number := l_ps_number;
6510 
6511     --We should not set primary flag in customer merge context
6512     party_site_rec.identifying_address_flag := FND_API.G_MISS_CHAR;
6513 
6514     --Create new party site.
6515     hz_cust_account_merge_v2pvt.create_party_site(
6516            p_init_msg_list => 'T',
6517            p_party_site_rec => party_site_rec,
6518            p_actual_cont_source => l_actual_cont_source,
6519            x_party_site_id => x_to_id,
6520            x_party_site_number => l_party_site_number,
6521            x_return_status => x_return_status,
6522            x_msg_count => l_msg_count,
6523            x_msg_data => l_msg_data );
6524 
6525 
6526     IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6527       FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6528       FND_MESSAGE.SET_TOKEN('ERROR','Cannot copy party site for ID : ' || p_from_id);
6529       FND_MSG_PUB.ADD;
6530       x_return_status := FND_API.G_RET_STS_ERROR;
6531       RETURN;
6532     END IF;
6533 
6534     HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
6535                     p_init_msg_list => FND_API.G_FALSE,
6536                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
6537                     p_old_owner_table_id   => p_from_id,
6538 	                p_new_owner_table_id   => x_to_id,
6539                     p_owner_table_name  =>'HZ_PARTY_SITES',
6540                     p_orig_system => null,
6541                     p_orig_system_reference => null,
6542                     p_reason_code => 'MERGED',
6543                     x_return_status => x_return_status,
6544                     x_msg_count =>l_msg_count,
6545                     x_msg_data  =>l_msg_data);
6546       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6547 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6548 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
6549 	FND_MSG_PUB.ADD;
6550 	x_return_status := FND_API.G_RET_STS_ERROR;
6551 	RETURN;
6552       END IF;
6553 
6554     UPDATE hz_merge_party_details
6555     SET merge_to_entity_id = x_to_id
6556     WHERE batch_party_id IN (select batch_party_id from hz_merge_parties
6557                              where batch_id = p_batch_id)
6558     AND merge_to_entity_id = p_from_id
6559     AND entity_name = 'HZ_PARTY_SITES';
6560 
6561     SAVEPOINT party_site_sync;
6562     BEGIN
6563       HZ_STAGE_MAP_TRANSFORM.sync_single_party_site(x_to_id,'C');
6564       DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE
6565       RECORD_ID=x_to_id and entity='PARTY_SITES' AND STAGED_FLAG='N';
6566     EXCEPTION
6567       WHEN OTHERS THEN
6568         ROLLBACK TO party_site_sync;
6569     END;
6570 
6571     x_return_status := 'N';
6572 
6573   END IF;
6574 
6575   DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE record_id = p_from_id
6576   AND ENTITY = 'PARTY_SITES' AND STAGED_FLAG='N';
6577 
6578 EXCEPTION
6579   WHEN OTHERS THEN
6580     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6581     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6582     FND_MSG_PUB.ADD;
6583     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6584 END do_party_site_merge;
6585 
6586 
6587 PROCEDURE do_party_merge(
6588         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6589         x_to_id    	IN OUT NOCOPY  NUMBER,
6590         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
6591         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6592         p_batch_party_id IN	NUMBER,
6593         x_return_status IN OUT NOCOPY  	VARCHAR2
6594 ) IS
6595 
6596 CURSOR c_party_type(cp_party_id NUMBER) IS
6597   SELECT party_type
6598   FROM HZ_PARTIES
6599   WHERE party_id = cp_party_id;
6600 
6601 CURSOR c_duns IS
6602   SELECT duns_number_c, last_update_date, organization_profile_id
6603   FROM HZ_ORGANIZATION_PROFILES
6604   WHERE party_id = p_from_id
6605   AND   EFFECTIVE_END_DATE IS NULL
6606   AND   actual_content_source = 'DNB'
6607   AND   nvl(status, 'A') = 'A';
6608 
6609 CURSOR c_duns1 IS
6610   SELECT duns_number_c , last_update_date, organization_profile_id
6611   FROM HZ_ORGANIZATION_PROFILES
6612   WHERE party_id = x_to_id
6613   AND   EFFECTIVE_END_DATE IS NULL
6614   AND   actual_content_source = 'DNB'
6615   AND   nvl(status, 'A') = 'A';
6616 
6617 CURSOR c_branch IS
6618    SELECT 1
6619    FROM HZ_RELATIONSHIPS   --4500011
6620    WHERE content_source_type = 'DNB'
6621    AND subject_id = p_from_id
6622    AND object_id = x_to_id
6623    AND RELATIONSHIP_CODE = 'HEADQUARTERS_OF'
6624    AND subject_table_name = 'HZ_PARTIES'
6625    AND object_table_name = 'HZ_PARTIES'
6626    AND directional_flag = 'F';
6627 
6628 l_from_party_type HZ_PARTIES.PARTY_TYPE%TYPE;
6629 l_to_party_type HZ_PARTIES.PARTY_TYPE%TYPE;
6630 l_from_duns_number VARCHAR2(255);
6631 l_to_duns_number VARCHAR2(255);
6632 l_temp NUMBER;
6633 
6634 l_to_is_branch VARCHAR2(1) := 'N';
6635 
6636 case1 BOOLEAN := FALSE;
6637 case2 BOOLEAN := FALSE;
6638 case3 BOOLEAN := FALSE;
6639 
6640 l_from NUMBER;
6641 l_to NUMBER;
6642 l_to_loc_id NUMBER;
6643 l_to_subj_id NUMBER;
6644 
6645 l_to_profile_id NUMBER;
6646 l_from_profile_id NUMBER;
6647 l_from_last_upd_date DATE;
6648 l_to_last_upd_date DATE;
6649 
6650 l_msg_data VARCHAR2(2000);
6651 l_msg_count NUMBER;
6652 l_return_status VARCHAR2(255);
6653 l_obj_version_number NUMBER;
6654 
6655 l_organization_rec HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE;
6656 
6657 BEGIN
6658 
6659   -- Select record for update
6660   OPEN c_party_type(p_from_id);
6661   FETCH c_party_type INTO l_from_party_type;
6662   CLOSE c_party_type;
6663 
6664   OPEN c_party_type(x_to_id);
6665   FETCH c_party_type INTO l_to_party_type;
6666   CLOSE c_party_type;
6667 
6668   IF l_from_party_type IS NULL OR l_to_party_type IS NULL OR
6669      l_to_party_type <> l_from_party_type THEN
6670     FND_MESSAGE.SET_NAME('AR', 'HZ_INVALID_MERGE_PARTIES');
6671     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6672     FND_MSG_PUB.ADD;
6673     x_return_status := FND_API.G_RET_STS_ERROR;
6674     RETURN;
6675   END IF;
6676 
6677   -- Update  and set status to merged
6678   UPDATE HZ_PARTIES
6679   SET
6680     STATUS = 'M',
6681     last_update_date = hz_utility_pub.last_update_date,
6682     last_updated_by = hz_utility_pub.user_id,
6683     last_update_login = hz_utility_pub.last_update_login,
6684     request_id =  hz_utility_pub.request_id,
6685     program_application_id = hz_utility_pub.program_application_id,
6686     program_id = hz_utility_pub.program_id,
6687     program_update_date = sysdate
6688   WHERE party_id = p_from_id;
6689 
6690   UPDATE HZ_DQM_SYNC_INTERFACE
6691   SET party_id = x_to_id WHERE STAGED_FLAG='N'
6692   AND PARTY_ID = p_from_id AND ENTITY<>'PARTY';
6693 
6694    HZ_ORIG_SYSTEM_REF_PVT.remap_internal_identifier(
6695                     p_init_msg_list => FND_API.G_FALSE,
6696                     p_validation_level     => FND_API.G_VALID_LEVEL_NONE,
6697                     p_old_owner_table_id   => p_from_id,
6698 	            p_new_owner_table_id   => x_to_id,
6699                     p_owner_table_name  =>'HZ_PARTIES',
6700                     p_orig_system => null,
6701                     p_orig_system_reference => null,
6702                     p_reason_code => 'MERGED',
6703                     x_return_status => x_return_status,
6704                     x_msg_count =>l_msg_count,
6705                     x_msg_data  =>l_msg_data);
6706       IF  x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6707 	FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6708 	FND_MESSAGE.SET_TOKEN('ERROR','MOSR: cannot remap internal ID');
6709 	FND_MSG_PUB.ADD;
6710 	x_return_status := FND_API.G_RET_STS_ERROR;
6711 	RETURN;
6712       END IF;
6713 
6714 EXCEPTION
6715   WHEN OTHERS THEN
6716     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6717     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6718     FND_MSG_PUB.ADD;
6719     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6720 
6721 END do_party_merge;
6722 
6723 PROCEDURE do_displayed_duns_merge(
6724         p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6725         x_to_id         IN OUT NOCOPY  NUMBER,
6726         p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
6727         p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6728         x_return_status IN OUT NOCOPY          VARCHAR2
6729 ) IS
6730 
6731 BEGIN
6732 
6733   UPDATE HZ_ORGANIZATION_PROFILES
6734   SET
6735     displayed_duns_party_id = p_to_fk_id,
6736     last_update_date = hz_utility_pub.last_update_date,
6737     last_updated_by = hz_utility_pub.user_id,
6738     last_update_login = hz_utility_pub.last_update_login,
6739     request_id =  hz_utility_pub.request_id,
6740     program_application_id = hz_utility_pub.program_application_id,
6741     program_id = hz_utility_pub.program_id,
6742     program_update_date = sysdate
6743   WHERE organization_profile_id = p_from_id;
6744 
6745 
6746 EXCEPTION
6747   WHEN OTHERS THEN
6748     FND_MESSAGE.SET_NAME('AR', 'HZ_MERGE_SQL_ERROR');
6749     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6750     FND_MSG_PUB.ADD;
6751     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6752 END do_displayed_duns_merge;
6753 
6754 
6755 PROCEDURE insert_request_log(
6756         p_source_party_id       IN      NUMBER,
6757         p_destination_party_id  IN      NUMBER
6758 ) IS
6759 
6760         l_requested_product     VARCHAR2(100);
6761         l_duns_number           NUMBER;
6762 
6763 BEGIN
6764 
6765 --Insert a row in HZ_DNB_REQUEST_LOG table.
6766     SELECT requested_product, duns_number
6767     INTO   l_requested_product, l_duns_number
6768     FROM   hz_dnb_request_log
6769     WHERE  party_id = p_source_party_id
6770     AND    request_id = (
6771                SELECT MAX(request_id)
6772                FROM   hz_dnb_request_log
6773                WHERE  party_id = p_source_party_id
6774                AND    status = 'S' );
6775 
6776     INSERT INTO hz_dnb_request_log(
6777        REQUEST_ID,
6778        PARTY_ID,
6779        REQUESTED_PRODUCT,
6780        DUNS_NUMBER,
6781        STATUS,
6782        CREATED_BY,
6783        CREATION_DATE,
6784        LAST_UPDATED_BY,
6785        LAST_UPDATE_DATE,
6786        LAST_UPDATE_LOGIN,
6787        COPIED_FROM_PARTY_ID )
6788     VALUES(
6789        HZ_DNB_REQUEST_LOG_S.nextval,
6790        p_destination_party_id,
6791        l_requested_product,
6792        l_duns_number,
6793        'S',
6794        hz_utility_pub.CREATED_BY,
6795        hz_utility_pub.CREATION_DATE,
6796        hz_utility_pub.LAST_UPDATED_BY,
6797        hz_utility_pub.LAST_UPDATE_DATE,
6798        hz_utility_pub.LAST_UPDATE_LOGIN,
6799        p_source_party_id );
6800 EXCEPTION
6801   WHEN NO_DATA_FOUND THEN
6802     null;
6803 END insert_request_log;
6804 
6805  --
6806   -- PRIVATE PROCEDURE do_denormalize_contact_point
6807   --
6808   -- DESCRIPTION
6809   --   Private procedure to denormalize some type of contact point to hz_parties.
6810   --
6811   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6812   --
6813   -- ARGUMENTS
6814   --   IN:
6815   --     p_party_id                     Party ID.
6816   --     p_contact_point_type           Contact point type.
6817   --     p_url                          URL.
6818   --     p_email_address                Email address.
6819   --     p_phone_contact_pt_id		Contact point id.
6820   --     p_phone_purpose		Contact Point Purpose.
6821   --     p_phone_line_type		Phone line type.
6822   --     p_phone_country_code		Phone country code.
6823   --     p_phone_area_code		Phone area code.
6824   --     p_phone_number			Phone Number.
6825   --     p_phone_extension		Phone extension.
6826   -- NOTES
6827   --
6828   -- MODIFICATION HISTORY
6829   --
6830   --   08-19-2003    Ramesh.Ch           o Created.
6831   --
6832   --
6833 
6834   PROCEDURE do_denormalize_contact_point (
6835     p_party_id				    IN     NUMBER,
6836     p_contact_point_type		    IN     VARCHAR2,
6837     p_url				    IN     VARCHAR2,
6838     p_email_address			    IN     VARCHAR2,
6839     p_phone_contact_pt_id		    IN     NUMBER,
6840     p_phone_purpose			    IN     VARCHAR2,
6841     p_phone_line_type			    IN     VARCHAR2,
6842     p_phone_country_code		    IN     VARCHAR2,
6843     p_phone_area_code			    IN     VARCHAR2,
6844     p_phone_number			    IN     VARCHAR2,
6845     p_phone_extension			    IN     VARCHAR2
6846   ) IS
6847   BEGIN
6848 
6849     IF p_contact_point_type = 'WEB' THEN
6850       UPDATE hz_parties
6851       SET    url		       = p_url,
6852              last_update_date          = hz_utility_v2pub.last_update_date,
6853 	     last_updated_by           = hz_utility_v2pub.last_updated_by,
6854 	     last_update_login         = hz_utility_v2pub.last_update_login,
6855 	     request_id                = hz_utility_v2pub.request_id,
6856 	     program_application_id    = hz_utility_v2pub.program_application_id,
6857 	     program_id                = hz_utility_v2pub.program_id,
6858 	     program_update_date       = sysdate
6859       WHERE  party_id = p_party_id;
6860     ELSIF p_contact_point_type = 'EMAIL' THEN
6861       UPDATE hz_parties
6862       SET    email_address	       = p_email_address,
6863              last_update_date          = hz_utility_v2pub.last_update_date,
6864 	     last_updated_by           = hz_utility_v2pub.last_updated_by,
6865 	     last_update_login         = hz_utility_v2pub.last_update_login,
6866 	     request_id                = hz_utility_v2pub.request_id,
6867 	     program_application_id    = hz_utility_v2pub.program_application_id,
6868 	     program_id                = hz_utility_v2pub.program_id,
6869 	     program_update_date       = sysdate
6870       WHERE  party_id = p_party_id;
6871     ELSIF p_contact_point_type = 'PHONE' THEN
6872       UPDATE hz_parties
6873       SET    primary_phone_contact_pt_id       = p_phone_contact_pt_id,
6874              primary_phone_purpose             = p_phone_purpose,
6875 	     primary_phone_line_type           = p_phone_line_type,
6876 	     primary_phone_country_code        = p_phone_country_code,
6877 	     primary_phone_area_code           = p_phone_area_code,
6878 	     primary_phone_number              = p_phone_number,
6879 	     primary_phone_extension           = p_phone_extension,
6880              last_update_date          = hz_utility_v2pub.last_update_date,
6881 	     last_updated_by           = hz_utility_v2pub.last_updated_by,
6882 	     last_update_login         = hz_utility_v2pub.last_update_login,
6883 	     request_id                = hz_utility_v2pub.request_id,
6884 	     program_application_id    = hz_utility_v2pub.program_application_id,
6885 	     program_id                = hz_utility_v2pub.program_id,
6886 	     program_update_date       = sysdate
6887       WHERE  party_id = p_party_id;
6888     END IF;
6889 
6890 
6891   END do_denormalize_contact_point;
6892 
6893   PROCEDURE do_hierarchy_nodes_merge(p_from_id       IN      NUMBER:=FND_API.G_MISS_NUM,
6894 				     p_from_fk_id    IN      NUMBER:=FND_API.G_MISS_NUM,
6895 				     p_to_fk_id      IN      NUMBER:=FND_API.G_MISS_NUM,
6896 				     x_return_status IN  OUT NOCOPY          VARCHAR2,
6897 				     p_action	     IN	     VARCHAR2,
6898 				     p_sub_obj_merge IN	     VARCHAR2 :=FND_API.G_MISS_CHAR
6899 				    )
6900   IS
6901 CURSOR c_hier_flag(cp_rel_type VARCHAR2) IS
6902   SELECT HIERARCHICAL_FLAG, MULTIPLE_PARENT_ALLOWED --5547536
6903   FROM   HZ_RELATIONSHIP_TYPES
6904   WHERE  RELATIONSHIP_TYPE = cp_rel_type
6905   AND    ROWNUM = 1;
6906 
6907 CURSOR c_relship_det(cp_relship_id NUMBER) IS
6908   SELECT relationship_type,subject_id,subject_table_name,subject_type,
6909          object_id,object_table_name,object_type,start_date,
6910 	 direction_code,status,end_date
6911   FROM HZ_RELATIONSHIPS
6912   WHERE  relationship_id = cp_relship_id
6913   AND DIRECTIONAL_FLAG = 'F';
6914 
6915 --5547536
6916 
6917 CURSOR check_parent_exists(cp_rel_type VARCHAR2, cp_child_id NUMBER, cp_table_name VARCHAR2, cp_object_type VARCHAR2) IS
6918    SELECT parent_id
6919    FROM hz_hierarchy_nodes
6920    WHERE child_id = cp_child_id
6921    AND   child_table_name = cp_table_name
6922    AND   child_object_type = cp_object_type
6923    AND   hierarchy_type = cp_rel_type
6924    AND   effective_end_date > sysdate --bug 6696774
6925    AND level_number = 1;
6926 
6927 l_hierarchical_flag       VARCHAR2(1);
6928 l_hierarchy_rec           HZ_HIERARCHY_PUB.HIERARCHY_NODE_REC_TYPE;
6929 l_subject_id		  NUMBER;
6930 l_object_id              NUMBER;
6931 l_subject_table_name      VARCHAR2(30);
6932 l_object_table_name       VARCHAR2(30);
6933 l_start_date              DATE;
6934 l_direction_code          VARCHAR2(30);
6935 l_msg_count               NUMBER;
6936 l_msg_data                VARCHAR2(2000);
6937 l_return_status		  VARCHAR2(10);
6938 l_status		  VARCHAR2(1);
6939 l_rel_type		 HZ_RELATIONSHIPS.RELATIONSHIP_TYPE%TYPE;
6940 l_rel_code		 HZ_RELATIONSHIPS.RELATIONSHIP_CODE%TYPE;
6941 l_subject_type		 HZ_RELATIONSHIPS.SUBJECT_TYPE%TYPE;
6942 l_object_type		 HZ_RELATIONSHIPS.OBJECT_TYPE%TYPE;
6943 from_end_date		date;
6944 --5547536
6945 l_multiple_parent_flag  VARCHAR2(1);
6946 l_from_par_id           NUMBER;
6947 l_to_par_id             NUMBER;
6948 
6949   BEGIN
6950 
6951     OPEN  c_relship_det(p_from_id);
6952     FETCH c_relship_det INTO l_rel_type,l_subject_id,l_subject_table_name,l_subject_type,
6953 			     l_object_id,l_object_table_name,l_object_type,l_start_date,
6954 			     l_direction_code,l_status,from_end_date;
6955     CLOSE c_relship_det;
6956     OPEN  c_hier_flag(l_rel_type);
6957     FETCH c_hier_flag INTO l_hierarchical_flag, l_multiple_parent_flag;
6958     CLOSE c_hier_flag;
6959 
6960 --5547536
6961     IF l_hierarchical_flag = 'Y' AND NVL(l_multiple_parent_flag, 'N')='N' AND p_action = 'T' THEN
6962         IF p_sub_obj_merge = 'OBJ' THEN
6963 
6964           OPEN check_parent_exists(l_rel_type,p_from_fk_id,l_object_table_name,l_object_type);
6965           FETCH check_parent_exists INTO l_from_par_id;
6966           CLOSE check_parent_exists;
6967 
6968 	  OPEN check_parent_exists(l_rel_type,p_to_fk_id,l_object_table_name,l_object_type);
6969           FETCH check_parent_exists INTO l_to_par_id;
6970           CLOSE check_parent_exists;
6971 
6972           IF l_from_par_id IS NOT NULL AND l_to_par_id IS NOT NULL AND l_from_par_id <> l_to_par_id THEN
6973               FND_MESSAGE.SET_NAME('AR', 'HZ_HIER_MERGE_ERROR');
6974               FND_MESSAGE.SET_TOKEN('PARTIES',p_from_fk_id||', '||p_to_fk_id);
6975 	      FND_MSG_PUB.ADD;
6976       	      x_return_status := FND_API.G_RET_STS_ERROR;
6977 	      return;
6978          END IF;
6979 
6980        ELSIF p_sub_obj_merge = 'SUB' THEN
6981 
6982 	  OPEN check_parent_exists(l_rel_type,p_from_fk_id,l_subject_table_name,l_subject_type);
6983           FETCH check_parent_exists INTO l_from_par_id;
6984           CLOSE check_parent_exists;
6985 
6986           OPEN check_parent_exists(l_rel_type,p_to_fk_id,l_subject_table_name,l_subject_type);
6987           FETCH check_parent_exists INTO l_to_par_id;
6988           CLOSE check_parent_exists;
6989 
6990           IF l_from_par_id IS NOT NULL AND l_to_par_id IS NOT NULL AND l_from_par_id <> l_to_par_id THEN
6991               FND_MESSAGE.SET_NAME('AR', 'HZ_HIER_MERGE_ERROR');
6992               FND_MESSAGE.SET_TOKEN('PARTIES',p_from_fk_id||', '||p_to_fk_id);
6993               FND_MSG_PUB.ADD;
6994               x_return_status := FND_API.G_RET_STS_ERROR;
6995               return;
6996          END IF;
6997 
6998        END IF;
6999 
7000     END IF;
7001 --end 5547536
7002 
7003     IF l_hierarchical_flag = 'Y'  THEN
7004         l_hierarchy_rec.hierarchy_type := l_rel_type;
7005         l_hierarchy_rec.effective_end_date :=sysdate;
7006         l_hierarchy_rec.relationship_id := p_from_id;
7007 	IF(p_action = 'M') THEN
7008           l_hierarchy_rec.status := 'M';
7009         ELSE
7010 	  l_hierarchy_rec.status := 'I';
7011 	END IF;
7012 	-- check if relationship type is parent one
7013         IF l_direction_code = 'P' THEN
7014               -- assign the subject to parent for hierarchy
7015               l_hierarchy_rec.parent_id := l_subject_id;
7016               l_hierarchy_rec.parent_table_name := l_subject_table_name;
7017               l_hierarchy_rec.parent_object_type := l_subject_type;
7018               l_hierarchy_rec.child_id := l_object_id;
7019               l_hierarchy_rec.child_table_name := l_object_table_name;
7020               l_hierarchy_rec.child_object_type := l_object_type;
7021         ELSIF l_direction_code = 'C' THEN
7022               -- assign the object to parent
7023               l_hierarchy_rec.parent_id := l_object_id;
7024               l_hierarchy_rec.parent_table_name := l_object_table_name;
7025               l_hierarchy_rec.parent_object_type := l_object_type;
7026               l_hierarchy_rec.child_id := l_subject_id;
7027               l_hierarchy_rec.child_table_name := l_subject_table_name;
7028               l_hierarchy_rec.child_object_type := l_subject_type;
7029 
7030         END IF;
7031 	HZ_HIERARCHY_PUB.update_link(
7032 		    p_init_msg_list           => FND_API.G_FALSE,
7033 		    p_hierarchy_node_rec      => l_hierarchy_rec,
7034 		    x_return_status           => x_return_status,
7035 		    x_msg_count               => l_msg_count,
7036 		    x_msg_data                => l_msg_data
7037 		   );
7038         IF (p_action = 'T') THEN
7039 
7040 	  l_hierarchy_rec.hierarchy_type         := l_rel_type;
7041           l_hierarchy_rec.effective_start_date   := sysdate;
7042 	  l_hierarchy_rec.effective_end_date     := from_end_date;
7043 	  l_hierarchy_rec.status	         := 'A';
7044 	  l_hierarchy_rec.relationship_id        := p_from_id;
7045           IF l_direction_code = 'P' THEN
7046               l_hierarchy_rec.parent_table_name  := l_subject_table_name;
7047               l_hierarchy_rec.parent_object_type := l_subject_type;
7048               l_hierarchy_rec.child_table_name   := l_object_table_name;
7049               l_hierarchy_rec.child_object_type  := l_object_type;
7050           ELSIF l_direction_code = 'C' THEN
7051 	      l_hierarchy_rec.parent_table_name  := l_object_table_name;
7052               l_hierarchy_rec.parent_object_type := l_object_type ;
7053               l_hierarchy_rec.child_table_name   := l_subject_table_name;
7054               l_hierarchy_rec.child_object_type  := l_subject_type;
7055 	  END IF;
7056 
7057 	  IF(p_sub_obj_merge = 'SUB') THEN
7058 	    IF l_direction_code = 'P' THEN
7059 	      l_hierarchy_rec.parent_id := p_to_fk_id;
7060 	      l_hierarchy_rec.child_id  := l_object_id;
7061 	    ELSIF l_direction_code = 'C' THEN
7062 	      l_hierarchy_rec.parent_id := l_object_id;
7063 	      l_hierarchy_rec.child_id  := p_to_fk_id;
7064 	    END IF;
7065 	  ELSIF(p_sub_obj_merge = 'OBJ') THEN
7066 	    IF l_direction_code = 'P' THEN
7067 	      l_hierarchy_rec.parent_id := l_subject_id;
7068 	      l_hierarchy_rec.child_id  := p_to_fk_id;
7069 	    ELSIF l_direction_code = 'C' THEN
7070 	      l_hierarchy_rec.parent_id := p_to_fk_id;
7071 	      l_hierarchy_rec.child_id  := l_subject_id;
7072 	    END IF;
7073 	  END IF;
7074 	  HZ_HIERARCHY_PUB.create_link(
7075 		    p_init_msg_list           => FND_API.G_FALSE,
7076 		    p_hierarchy_node_rec      => l_hierarchy_rec,
7077 		    x_return_status           => l_return_status,
7078 		    x_msg_count               => l_msg_count,
7079 		    x_msg_data                => l_msg_data
7080 	   );
7081 
7082         END IF;
7083 
7084     END IF;
7085 
7086   END;
7087 
7088 END HZ_MERGE_PKG;