DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_CUST_ACCT_CONTACT_BO_PUB

Source


1 PACKAGE BODY hz_cust_acct_contact_bo_pub AS
2 /*$Header: ARHBCRBB.pls 120.17 2008/02/20 19:27:26 awu ship $ */
3 
4   -- PRIVATE PROCEDURE assign_cust_acct_role_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from customer account contact object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_cust_acct_role_obj Customer account contact object.
14   --     p_party_id           Party Id.
15   --     p_cust_acct_id       Customer account Id.
16   --     p_cust_acct_site_id  Customer account site Id.
17   --     p_cust_acct_contact_id  Customer account contact Id.
18   --     p_cust_acct_contact_os  Customer account contact original system.
19   --     p_cust_acct_contact_osr Customer account contact original system reference.
20   --     p_create_or_update   Create or update flag.
21   --   IN/OUT:
22   --     px_cust_acct_role_rec   Customer Account Contact plsql record.
23   --
24   -- NOTES
25   --
26   -- MODIFICATION HISTORY
27   --
28   --   14-DEC-2004    Arnold Ng          Created.
29   --
30 
31   PROCEDURE assign_cust_acct_role_rec(
32     p_cust_acct_role_obj         IN            HZ_CUST_ACCT_CONTACT_BO,
33     p_party_id                   IN            NUMBER,
34     p_cust_acct_id               IN            NUMBER,
35     p_cust_acct_site_id          IN            NUMBER,
36     p_cust_acct_contact_id       IN            NUMBER,
37     p_cust_acct_contact_os       IN            VARCHAR2,
38     p_cust_acct_contact_osr      IN            VARCHAR2,
39     p_create_or_update           IN            VARCHAR2 := 'C',
40     px_cust_account_role_rec     IN OUT NOCOPY HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE
41   );
42 
43   -- PRIVATE PROCEDURE assign_cust_acct_role_rec
44   --
45   -- DESCRIPTION
46   --     Assign attribute value from customer account contact object to plsql record.
47   --
48   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
49   --
50   -- ARGUMENTS
51   --   IN:
52   --     p_cust_acct_role_obj Customer account contact object.
53   --     p_party_id           Party Id.
54   --     p_cust_acct_id       Customer account Id.
55   --     p_cust_acct_site_id  Customer account site Id.
56   --     p_cust_acct_contact_id  Customer account contact Id.
57   --     p_cust_acct_contact_os  Customer account contact original system.
58   --     p_cust_acct_contact_osr Customer account contact original system reference.
59   --     p_create_or_update   Create or update flag.
60   --   IN/OUT:
61   --     px_cust_acct_role_rec   Customer Account Contact plsql record.
62   --
63   -- NOTES
64   --
65   -- MODIFICATION HISTORY
66   --
67   --   14-DEC-2004    Arnold Ng          Created.
68   --
69 
70   PROCEDURE assign_cust_acct_role_rec(
71     p_cust_acct_role_obj         IN            HZ_CUST_ACCT_CONTACT_BO,
72     p_party_id                   IN            NUMBER,
73     p_cust_acct_id               IN            NUMBER,
74     p_cust_acct_site_id          IN            NUMBER,
75     p_cust_acct_contact_id       IN            NUMBER,
76     p_cust_acct_contact_os       IN            VARCHAR2,
77     p_cust_acct_contact_osr      IN            VARCHAR2,
78     p_create_or_update           IN            VARCHAR2 := 'C',
79     px_cust_account_role_rec     IN OUT NOCOPY HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE
80   ) IS
81   BEGIN
82     px_cust_account_role_rec.cust_account_role_id := p_cust_acct_contact_id;
83     px_cust_account_role_rec.party_id             := p_party_id;
84     px_cust_account_role_rec.cust_account_id      := p_cust_acct_id;
85     px_cust_account_role_rec.cust_acct_site_id    := p_cust_acct_site_id;
86     IF(p_cust_acct_role_obj.primary_flag in ('Y','N')) THEN
87       px_cust_account_role_rec.primary_flag         := p_cust_acct_role_obj.primary_flag;
88     END IF;
89     px_cust_account_role_rec.role_type            := p_cust_acct_role_obj.role_type;
90     px_cust_account_role_rec.source_code          := p_cust_acct_role_obj.source_code;
91     px_cust_account_role_rec.attribute_category   := p_cust_acct_role_obj.attribute_category;
92     px_cust_account_role_rec.attribute1           := p_cust_acct_role_obj.attribute1;
93     px_cust_account_role_rec.attribute2           := p_cust_acct_role_obj.attribute2;
94     px_cust_account_role_rec.attribute3           := p_cust_acct_role_obj.attribute3;
95     px_cust_account_role_rec.attribute4           := p_cust_acct_role_obj.attribute4;
96     px_cust_account_role_rec.attribute5           := p_cust_acct_role_obj.attribute5;
97     px_cust_account_role_rec.attribute6           := p_cust_acct_role_obj.attribute6;
98     px_cust_account_role_rec.attribute7           := p_cust_acct_role_obj.attribute7;
99     px_cust_account_role_rec.attribute8           := p_cust_acct_role_obj.attribute8;
100     px_cust_account_role_rec.attribute9           := p_cust_acct_role_obj.attribute9;
101     px_cust_account_role_rec.attribute10          := p_cust_acct_role_obj.attribute10;
102     px_cust_account_role_rec.attribute11          := p_cust_acct_role_obj.attribute11;
103     px_cust_account_role_rec.attribute12          := p_cust_acct_role_obj.attribute12;
104     px_cust_account_role_rec.attribute13          := p_cust_acct_role_obj.attribute13;
105     px_cust_account_role_rec.attribute14          := p_cust_acct_role_obj.attribute14;
106     px_cust_account_role_rec.attribute15          := p_cust_acct_role_obj.attribute15;
107     px_cust_account_role_rec.attribute16          := p_cust_acct_role_obj.attribute16;
108     px_cust_account_role_rec.attribute17          := p_cust_acct_role_obj.attribute17;
109     px_cust_account_role_rec.attribute18          := p_cust_acct_role_obj.attribute18;
110     px_cust_account_role_rec.attribute19          := p_cust_acct_role_obj.attribute19;
111     px_cust_account_role_rec.attribute20          := p_cust_acct_role_obj.attribute20;
112     px_cust_account_role_rec.attribute21          := p_cust_acct_role_obj.attribute21;
113     px_cust_account_role_rec.attribute22          := p_cust_acct_role_obj.attribute22;
114     px_cust_account_role_rec.attribute23          := p_cust_acct_role_obj.attribute23;
115     px_cust_account_role_rec.attribute24          := p_cust_acct_role_obj.attribute24;
116     px_cust_account_role_rec.attribute25          := p_cust_acct_role_obj.attribute25;
117     IF(p_cust_acct_role_obj.status in ('A','I')) THEN
118       px_cust_account_role_rec.status               := p_cust_acct_role_obj.status;
119     END IF;
120     IF(p_create_or_update = 'C') THEN
121       px_cust_account_role_rec.orig_system          := p_cust_acct_contact_os;
122       px_cust_account_role_rec.orig_system_reference := p_cust_acct_contact_osr;
123       px_cust_account_role_rec.created_by_module    := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
124     END IF;
125   END assign_cust_acct_role_rec;
126 
127   -- PROCEDURE do_create_cac_bo
128   --
129   -- DESCRIPTION
130   --     Create customer account contact business object.
131   PROCEDURE do_create_cac_bo(
132     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
133     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
134     p_cust_acct_contact_obj   IN OUT NOCOPY HZ_CUST_ACCT_CONTACT_BO,
135     p_created_by_module       IN            VARCHAR2,
136     p_obj_source              IN            VARCHAR2 := null,
137     x_return_status           OUT NOCOPY    VARCHAR2,
138     x_msg_count               OUT NOCOPY    NUMBER,
139     x_msg_data                OUT NOCOPY    VARCHAR2,
140     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
141     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
142     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
143     px_parent_id              IN OUT NOCOPY NUMBER,
144     px_parent_os              IN OUT NOCOPY VARCHAR2,
145     px_parent_osr             IN OUT NOCOPY VARCHAR2,
146     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
147   ) IS
148     l_debug_prefix             VARCHAR2(30) := '';
149     l_cust_acct_role_rec       HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE;
150     l_role_responsibility_rec  HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE;
151     l_oc_id                    NUMBER;
152     l_oc_os                    VARCHAR2(30);
153     l_oc_osr                   VARCHAR2(255);
154     l_per_id                   NUMBER;
155     l_obj_party_id             NUMBER;
156     l_party_type               VARCHAR2(30);
157     l_ca_id                    NUMBER;
158     l_cas_id                   NUMBER;
159     l_rel_party_id             NUMBER;
160     l_rel_ovn                  NUMBER;
161     l_valid_obj                BOOLEAN;
162     l_bus_object               HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
163     l_rel_obj                  HZ_RELATIONSHIP_OBJ_TBL;
164     l_valid_per                VARCHAR2(1);
165 
166     CURSOR get_cas_party_id(l_cas_id NUMBER) IS
167     SELECT ca.cust_account_id, cas.cust_acct_site_id, ca.party_id, p.party_type
168     FROM HZ_CUST_ACCT_SITES cas, HZ_CUST_ACCOUNTS ca, HZ_PARTIES p
169     WHERE cas.cust_acct_site_id = l_cas_id
170     AND cas.cust_account_id = ca.cust_account_id
171     AND ca.party_id = p.party_id
172     AND p.status in ('A','I')
173     AND rownum = 1;
174 
175     CURSOR get_ca_party_id(l_ca_id NUMBER) IS
176     SELECT ca.cust_account_id, ca.party_id, p.party_type
177     FROM HZ_CUST_ACCOUNTS ca, HZ_PARTIES p
178     WHERE ca.cust_account_id = l_ca_id
179     AND ca.party_id = p.party_id
180     AND p.status in ('A','I')
181     AND rownum = 1;
182 
183     CURSOR get_contact_rel_noid(l_per_id NUMBER, l_obj_id NUMBER, l_rel_code VARCHAR2, l_rel_type VARCHAR2) IS
184     SELECT r.party_id
185     FROM HZ_RELATIONSHIPS r
186     WHERE r.subject_id = l_per_id
187     AND r.subject_type = 'PERSON'
188     AND r.object_id = l_obj_id
189     AND r.relationship_type = l_rel_type
190     AND r.relationship_code = l_rel_code
191     AND sysdate between r.start_date and nvl(r.end_date, sysdate);
192 
193     CURSOR get_contact_rel(l_per_id NUMBER, l_obj_id NUMBER, l_rel_id NUMBER) IS
194     SELECT r.party_id
195     FROM HZ_RELATIONSHIPS r
196     WHERE r.relationship_id = l_rel_id
197     AND r.subject_id = l_per_id
198     AND r.subject_type = 'PERSON'
199     AND r.object_id = l_obj_id
200     AND sysdate between r.start_date and nvl(r.end_date, sysdate);
201   BEGIN
202     -- Standard start of API savepoint
203     SAVEPOINT do_create_cac_bo_pub;
204 
205     -- initialize API return status to success.
206     x_return_status := FND_API.G_RET_STS_SUCCESS;
207 
208     -- Initialize message list if p_init_msg_list is set to TRUE.
209     IF FND_API.to_Boolean(p_init_msg_list) THEN
210       FND_MSG_PUB.initialize;
211     END IF;
212 
213     -- initialize Global variable
214     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
215     IF(p_created_by_module IS NULL) THEN
216       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
217     ELSE
218       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
219     END IF;
220 
221     -- Debug info.
222     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
223         hz_utility_v2pub.debug(p_message=>'do_create_cac_bo(+)',
224                                p_prefix=>l_debug_prefix,
225                                p_msg_level=>fnd_log.level_procedure);
226     END IF;
227 
228     -- Base on p_validate_bo_flag, check the completeness of business objects
229     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
230       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
231         p_bus_object_code         => 'CUST_ACCT_CONTACT',
232         x_bus_object              => l_bus_object
233       );
234       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_cac_bo_comp(
235                        p_cac_objs   => HZ_CUST_ACCT_CONTACT_BO_TBL(p_cust_acct_contact_obj),
236                        p_bus_object => l_bus_object
237                      );
238       IF NOT(l_valid_obj) THEN
239         RAISE fnd_api.g_exc_error;
240       END IF;
241     END IF;
242 
243     -- check pass in parent_id and parent_os+osr
244     hz_registry_validate_bo_pvt.validate_parent_id(
245       px_parent_id       => px_parent_id,
246       px_parent_os       => px_parent_os,
247       px_parent_osr      => px_parent_osr,
248       p_parent_obj_type  => px_parent_obj_type,
249       x_return_status    => x_return_status,
250       x_msg_count        => x_msg_count,
251       x_msg_data         => x_msg_data);
252 
253     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
254       RAISE FND_API.G_EXC_ERROR;
255     END IF;
256 
257     x_cust_acct_contact_id := p_cust_acct_contact_obj.cust_acct_contact_id;
258     x_cust_acct_contact_os := p_cust_acct_contact_obj.orig_system;
259     x_cust_acct_contact_osr := p_cust_acct_contact_obj.orig_system_reference;
260     l_cas_id := p_cust_acct_contact_obj.cust_acct_site_id;
261 
262     -- check if pass in cust_account_role_id and os+osr
263     hz_registry_validate_bo_pvt.validate_ssm_id(
264       px_id              => x_cust_acct_contact_id,
265       px_os              => x_cust_acct_contact_os,
266       px_osr             => x_cust_acct_contact_osr,
267       p_obj_type         => 'HZ_CUST_ACCOUNT_ROLES',
268       p_create_or_update => 'C',
269       x_return_status    => x_return_status,
270       x_msg_count        => x_msg_count,
271       x_msg_data         => x_msg_data);
272 
273     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
274       RAISE FND_API.G_EXC_ERROR;
275     END IF;
276 
277     -- From px_parent_id, get parent party_id
278 
279       OPEN get_ca_party_id(px_parent_id);
280       FETCH get_ca_party_id INTO l_ca_id, l_obj_party_id, l_party_type;
281       CLOSE get_ca_party_id;
282 
283 
284     -- check if the relationship already exist
285     l_per_id := p_cust_acct_contact_obj.contact_person_id;
286     IF(l_per_id IS NULL) THEN
287       l_per_id := HZ_REGISTRY_VALIDATE_BO_PVT.get_id_from_ososr(
288                     p_os => p_cust_acct_contact_obj.contact_person_os,
289                     p_osr => p_cust_acct_contact_obj.contact_person_osr,
290                     p_owner_table_name => 'HZ_PARTIES'
291                   );
292     END IF;
293 
294     IF(p_cust_acct_contact_obj.relationship_id IS NOT NULL) THEN
295       OPEN get_contact_rel(l_per_id, l_obj_party_id,
296                            p_cust_acct_contact_obj.relationship_id);
297       FETCH get_contact_rel INTO l_rel_party_id;
298       CLOSE get_contact_rel;
299     ELSE
300       OPEN get_contact_rel_noid(l_per_id, l_obj_party_id,
304       CLOSE get_contact_rel_noid;
301                                 p_cust_acct_contact_obj.relationship_code,
302                                 p_cust_acct_contact_obj.relationship_type);
303       FETCH get_contact_rel_noid INTO l_rel_party_id;
305     END IF;
306 
307     IF(l_rel_party_id IS NULL) THEN
308       FND_MESSAGE.SET_NAME('AR','HZ_API_INVALID_FK');
309       FND_MESSAGE.SET_TOKEN('FK','RELATIONSHIP');
310       FND_MESSAGE.SET_TOKEN('COLUMN','RELATIONSHIIP_ID, RELATIONSHIP_CODE, RELATIONSHIP_TYPE');
311       FND_MESSAGE.SET_TOKEN('TABLE','HZ_RELATIONSHIPS');
312       FND_MSG_PUB.ADD();
313       RAISE FND_API.G_EXC_ERROR;
314     END IF;
315 
316     ----------------------------------
317     -- Assign cust account role record
318     ----------------------------------
319     -- party_id is the party_id of the org contact relationship --
320 
321     assign_cust_acct_role_rec(
322       p_cust_acct_role_obj        => p_cust_acct_contact_obj,
323       p_party_id                  => l_rel_party_id,
324       p_cust_acct_id              => l_ca_id,
325       p_cust_acct_site_id         => l_cas_id,
326       p_cust_acct_contact_id      => x_cust_acct_contact_id,
327       p_cust_acct_contact_os      => x_cust_acct_contact_os,
328       p_cust_acct_contact_osr     => x_cust_acct_contact_osr,
329       px_cust_account_role_rec    => l_cust_acct_role_rec
330     );
331 
332     HZ_CUST_ACCOUNT_ROLE_V2PUB.create_cust_account_role (
333       p_cust_account_role_rec     => l_cust_acct_role_rec,
334       x_cust_account_role_id      => x_cust_acct_contact_id,
335       x_return_status             => x_return_status,
336       x_msg_count                 => x_msg_count,
337       x_msg_data                  => x_msg_data
338     );
339 
340     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
341       RAISE FND_API.G_EXC_ERROR;
342     END IF;
343 
344     -- assign cust_acct_contact_id
345     p_cust_acct_contact_obj.cust_acct_contact_id := x_cust_acct_contact_id;
346     -------------------------------------
347     -- Call role responsibility v2pub api
348     -------------------------------------
349     IF((p_cust_acct_contact_obj.contact_role_objs IS NOT NULL) AND
350        (p_cust_acct_contact_obj.contact_role_objs.COUNT > 0)) THEN
351       HZ_CUST_ACCT_CONTACT_BO_PVT.create_role_responsibilities(
352         p_rr_objs            => p_cust_acct_contact_obj.contact_role_objs,
353         p_cac_id             => x_cust_acct_contact_id,
354         x_return_status      => x_return_status,
355         x_msg_count          => x_msg_count,
356         x_msg_data           => x_msg_data
357       );
358 
359       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
360         RAISE FND_API.G_EXC_ERROR;
361       END IF;
362     END IF;
363 
364     -- reset Global variable
365     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
366     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
367 
368     -- Debug info.
369     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
370          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
371                                p_msg_data=>x_msg_data,
372                                p_msg_type=>'WARNING',
373                                p_msg_level=>fnd_log.level_exception);
374     END IF;
375     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
376         hz_utility_v2pub.debug(p_message=>'do_create_cac_bo(-)',
377                                p_prefix=>l_debug_prefix,
378                                p_msg_level=>fnd_log.level_procedure);
379     END IF;
380 
381   EXCEPTION
382     WHEN fnd_api.g_exc_error THEN
383       ROLLBACK TO do_create_cac_bo_pub;
384 
385       -- reset Global variable
386       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
387       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
388 
389       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
390       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
391       FND_MSG_PUB.ADD;
392 
393       x_return_status := fnd_api.g_ret_sts_error;
394 
395       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
396                                 p_count => x_msg_count,
397                                 p_data  => x_msg_data);
398 
399       -- Debug info.
400       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
401         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
402                                p_msg_data=>x_msg_data,
403                                p_msg_type=>'ERROR',
404                                p_msg_level=>fnd_log.level_error);
405       END IF;
406       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
407         hz_utility_v2pub.debug(p_message=>'do_create_cac_bo(-)',
408                                p_prefix=>l_debug_prefix,
409                                p_msg_level=>fnd_log.level_procedure);
410       END IF;
411 
412     WHEN fnd_api.g_exc_unexpected_error THEN
413       ROLLBACK TO do_create_cac_bo_pub;
414 
415       -- reset Global variable
416       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
417       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
418 
419       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
420       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
421       FND_MSG_PUB.ADD;
422 
423       x_return_status := fnd_api.g_ret_sts_unexp_error;
424 
425       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
426                                 p_count => x_msg_count,
427                                 p_data  => x_msg_data);
428 
429       -- Debug info.
430       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
431         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
435       END IF;
432                                p_msg_data=>x_msg_data,
433                                p_msg_type=>'UNEXPECTED ERROR',
434                                p_msg_level=>fnd_log.level_error);
436       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
437         hz_utility_v2pub.debug(p_message=>'do_create_cac_bo(-)',
438                                p_prefix=>l_debug_prefix,
439                                p_msg_level=>fnd_log.level_procedure);
440       END IF;
441 
442     WHEN OTHERS THEN
443       ROLLBACK TO do_create_cac_bo_pub;
444 
445       -- reset Global variable
446       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
447       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
448 
449       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
450       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
451       FND_MSG_PUB.ADD;
452 
453       x_return_status := fnd_api.g_ret_sts_unexp_error;
454 
455       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
456       fnd_message.set_token('ERROR' ,SQLERRM);
457       fnd_msg_pub.add;
458 
459       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
460                                 p_count => x_msg_count,
461                                 p_data  => x_msg_data);
462 
463       -- Debug info.
464       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
465         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
466                                p_msg_data=>x_msg_data,
467                                p_msg_type=>'SQL ERROR',
468                                p_msg_level=>fnd_log.level_error);
469       END IF;
470       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
471         hz_utility_v2pub.debug(p_message=>'do_create_cac_bo(-)',
472                                p_prefix=>l_debug_prefix,
473                                p_msg_level=>fnd_log.level_procedure);
474       END IF;
475   END do_create_cac_bo;
476 
477   PROCEDURE create_cust_acct_contact_bo(
478     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
479     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
480     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
481     p_created_by_module       IN            VARCHAR2,
482     x_return_status           OUT NOCOPY    VARCHAR2,
483     x_msg_count               OUT NOCOPY    NUMBER,
484     x_msg_data                OUT NOCOPY    VARCHAR2,
485     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
486     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
487     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
488     px_parent_id              IN OUT NOCOPY NUMBER,
489     px_parent_os              IN OUT NOCOPY VARCHAR2,
490     px_parent_osr             IN OUT NOCOPY VARCHAR2,
491     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
492   ) IS
493     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
494   BEGIN
495     l_cac_obj := p_cust_acct_contact_obj;
496     do_create_cac_bo(
497       p_init_msg_list           => p_init_msg_list,
498       p_validate_bo_flag        => p_validate_bo_flag,
499       p_cust_acct_contact_obj   => l_cac_obj,
500       p_created_by_module       => p_created_by_module,
501       p_obj_source              => null,
502       x_return_status           => x_return_status,
503       x_msg_count               => x_msg_count,
504       x_msg_data                => x_msg_data,
505       x_cust_acct_contact_id    => x_cust_acct_contact_id,
506       x_cust_acct_contact_os    => x_cust_acct_contact_os,
507       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
508       px_parent_id              => px_parent_id,
509       px_parent_os              => px_parent_os,
510       px_parent_osr             => px_parent_osr,
511       px_parent_obj_type        => px_parent_obj_type
512     );
513   END create_cust_acct_contact_bo;
514 
515   PROCEDURE create_cust_acct_contact_bo(
516     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
517     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
518     p_created_by_module       IN            VARCHAR2,
519     p_obj_source              IN            VARCHAR2 := null,
520     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
521     x_return_status           OUT NOCOPY    VARCHAR2,
522     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
523     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_CONTACT_BO,
524     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
525     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
526     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
527     px_parent_id              IN OUT NOCOPY NUMBER,
528     px_parent_os              IN OUT NOCOPY VARCHAR2,
529     px_parent_osr             IN OUT NOCOPY VARCHAR2,
530     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
531   ) IS
532     l_msg_data                VARCHAR2(2000);
533     l_msg_count               NUMBER;
534     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
535   BEGIN
536     l_cac_obj := p_cust_acct_contact_obj;
537     do_create_cac_bo(
538       p_init_msg_list           => fnd_api.g_true,
539       p_validate_bo_flag        => p_validate_bo_flag,
540       p_cust_acct_contact_obj   => l_cac_obj,
541       p_created_by_module       => p_created_by_module,
542       p_obj_source              => null,
543       x_return_status           => x_return_status,
544       x_msg_count               => l_msg_count,
545       x_msg_data                => l_msg_data,
546       x_cust_acct_contact_id    => x_cust_acct_contact_id,
547       x_cust_acct_contact_os    => x_cust_acct_contact_os,
548       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
549       px_parent_id              => px_parent_id,
550       px_parent_os              => px_parent_os,
554     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
551       px_parent_osr             => px_parent_osr,
552       px_parent_obj_type        => px_parent_obj_type
553     );
555                     x_return_status   => x_return_status,
556                     x_msg_count       => l_msg_count,
557                     x_msg_data        => l_msg_data);
558     IF FND_API.to_Boolean(p_return_obj_flag) THEN
559       x_return_obj := l_cac_obj;
560     END IF;
561   END create_cust_acct_contact_bo;
562 
563   -- PROCEDURE update_cust_acct_contact_bo
564   --
565   -- DESCRIPTION
566   --     Update customer account contact business object.
567   PROCEDURE update_cust_acct_contact_bo(
568     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
569     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
570     p_created_by_module       IN            VARCHAR2,
571     x_return_status           OUT NOCOPY    VARCHAR2,
572     x_msg_count               OUT NOCOPY    NUMBER,
573     x_msg_data                OUT NOCOPY    VARCHAR2,
574     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
575     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
576     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2
577   )IS
578     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
579   BEGIN
580     l_cac_obj := p_cust_acct_contact_obj;
581     do_update_cac_bo(
582       p_init_msg_list           => p_init_msg_list,
583       p_cust_acct_contact_obj   => l_cac_obj,
584       p_created_by_module       => p_created_by_module,
585       p_obj_source              => null,
586       x_return_status           => x_return_status,
587       x_msg_count               => x_msg_count,
588       x_msg_data                => x_msg_data,
589       x_cust_acct_contact_id    => x_cust_acct_contact_id,
590       x_cust_acct_contact_os    => x_cust_acct_contact_os,
591       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
592       p_parent_os               => NULL
593     );
594   END update_cust_acct_contact_bo;
595 
596   PROCEDURE update_cust_acct_contact_bo(
597     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
598     p_created_by_module       IN            VARCHAR2,
599     p_obj_source              IN            VARCHAR2 := null,
600     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
601     x_return_status           OUT NOCOPY    VARCHAR2,
602     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
603     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_CONTACT_BO,
604     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
605     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
606     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2
607   )IS
608     l_msg_data                VARCHAR2(2000);
609     l_msg_count               NUMBER;
610     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
611   BEGIN
612     l_cac_obj := p_cust_acct_contact_obj;
613     do_update_cac_bo(
614       p_init_msg_list           => fnd_api.g_true,
615       p_cust_acct_contact_obj   => l_cac_obj,
616       p_created_by_module       => p_created_by_module,
617       p_obj_source              => p_obj_source,
618       x_return_status           => x_return_status,
619       x_msg_count               => l_msg_count,
620       x_msg_data                => l_msg_data,
621       x_cust_acct_contact_id    => x_cust_acct_contact_id,
622       x_cust_acct_contact_os    => x_cust_acct_contact_os,
623       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
624       p_parent_os               => NULL
625     );
626     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
627                     x_return_status   => x_return_status,
628                     x_msg_count       => l_msg_count,
629                     x_msg_data        => l_msg_data);
630     IF FND_API.to_Boolean(p_return_obj_flag) THEN
631       x_return_obj := l_cac_obj;
632     END IF;
633   END update_cust_acct_contact_bo;
634 
635   PROCEDURE do_update_cac_bo(
636     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
637     p_cust_acct_contact_obj   IN OUT NOCOPY HZ_CUST_ACCT_CONTACT_BO,
638     p_created_by_module       IN            VARCHAR2,
639     p_obj_source              IN            VARCHAR2 := null,
640     x_return_status           OUT NOCOPY    VARCHAR2,
641     x_msg_count               OUT NOCOPY    NUMBER,
642     x_msg_data                OUT NOCOPY    VARCHAR2,
643     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
644     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
645     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
646     p_parent_os               IN            VARCHAR2
647   )IS
648     l_debug_prefix             VARCHAR2(30) := '';
649     l_cust_acct_role_rec       HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE;
650     l_role_responsibility_rec  HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE;
651     l_car_ovn                  NUMBER;
652     l_create_update_flag       VARCHAR2(1);
653     l_parent_os                VARCHAR2(30);
654     l_org_contact_id           NUMBER;
655     l_org_contact_os           VARCHAR2(30);
656     l_org_contact_osr          VARCHAR2(255);
657 
658     l_party_id                 NUMBER;
659     l_ca_id                    NUMBER;
660     l_cas_id                   NUMBER;
661 
662     CURSOR get_ovn(l_car_id NUMBER) IS
663     SELECT r.object_version_number, r.party_id, r.cust_account_id, r.cust_acct_site_id
664     FROM HZ_CUST_ACCOUNT_ROLES r
665     WHERE r.cust_account_role_id = l_car_id;
666   BEGIN
667     -- Standard start of API savepoint
668     -- SAVEPOINT update_logical_cac_pub;
669     SAVEPOINT do_update_cac_bo_pub;
670 
671     -- initialize API return status to success.
672     x_return_status := FND_API.G_RET_STS_SUCCESS;
673 
674     -- Initialize message list if p_init_msg_list is set to TRUE.
678 
675     IF FND_API.to_Boolean(p_init_msg_list) THEN
676       FND_MSG_PUB.initialize;
677     END IF;
679     -- initialize Global variable
680     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
681     IF(p_created_by_module IS NULL) THEN
682       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
683     ELSE
684       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
685     END IF;
686 
687     -- Debug info.
688     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
689         hz_utility_v2pub.debug(p_message=>'do_update_cac_bo(+)',
690                                p_prefix=>l_debug_prefix,
691                                p_msg_level=>fnd_log.level_procedure);
692     END IF;
693 
694     x_cust_acct_contact_id := p_cust_acct_contact_obj.cust_acct_contact_id;
695     x_cust_acct_contact_os := p_cust_acct_contact_obj.orig_system;
696     x_cust_acct_contact_osr := p_cust_acct_contact_obj.orig_system_reference;
697 
698     -- check if pass in org_contact_id and ssm is valid for update
699     hz_registry_validate_bo_pvt.validate_ssm_id(
700       px_id              => x_cust_acct_contact_id,
701       px_os              => x_cust_acct_contact_os,
702       px_osr             => x_cust_acct_contact_osr,
703       p_obj_type         => 'HZ_CUST_ACCOUNT_ROLES',
704       p_create_or_update => 'U',
705       x_return_status    => x_return_status,
706       x_msg_count        => x_msg_count,
707       x_msg_data         => x_msg_data);
708 
709     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
710       RAISE FND_API.G_EXC_ERROR;
711     END IF;
712 
713     OPEN get_ovn(x_cust_acct_contact_id);
714     FETCH get_ovn INTO l_car_ovn, l_party_id, l_ca_id, l_cas_id;
715     CLOSE get_ovn;
716 
717     -------------------------------
718     -- For Update Cust Account Role
719     -------------------------------
720     assign_cust_acct_role_rec(
721       p_cust_acct_role_obj        => p_cust_acct_contact_obj,
722       p_party_id                  => l_party_id,
723       p_cust_acct_id              => l_ca_id,
724       p_cust_acct_site_id         => l_cas_id,
725       p_cust_acct_contact_id      => x_cust_acct_contact_id,
726       p_cust_acct_contact_os      => x_cust_acct_contact_os,
727       p_cust_acct_contact_osr     => x_cust_acct_contact_osr,
728       p_create_or_update          => 'U',
729       px_cust_account_role_rec    => l_cust_acct_role_rec
730     );
731 
732     HZ_CUST_ACCOUNT_ROLE_V2PUB.update_cust_account_role(
733       p_cust_account_role_rec       => l_cust_acct_role_rec,
734       p_object_version_number       => l_car_ovn,
735       x_return_status               => x_return_status,
736       x_msg_count                   => x_msg_count,
737       x_msg_data                    => x_msg_data
738     );
739 
740     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
741       RAISE FND_API.G_EXC_ERROR;
742     END IF;
743 
744     -- assign cust_acct_contact_id
745     p_cust_acct_contact_obj.cust_acct_contact_id := x_cust_acct_contact_id;
746     ----------------------------
747     -- For Role Responsibilities
748     ----------------------------
749     IF((p_cust_acct_contact_obj.contact_role_objs IS NOT NULL) AND
750        (p_cust_acct_contact_obj.contact_role_objs.COUNT > 0)) THEN
751       HZ_CUST_ACCT_CONTACT_BO_PVT.save_role_responsibilities(
752         p_rr_objs            => p_cust_acct_contact_obj.contact_role_objs,
753         p_cac_id             => x_cust_acct_contact_id,
754         x_return_status      => x_return_status,
755         x_msg_count          => x_msg_count,
756         x_msg_data           => x_msg_data
757       );
758 
759       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
760         RAISE FND_API.G_EXC_ERROR;
761       END IF;
762     END IF;
763 
764     -- reset Global variable
765     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
766     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
767 
768     -- Debug info.
769     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
770          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
771                                p_msg_data=>x_msg_data,
772                                p_msg_type=>'WARNING',
773                                p_msg_level=>fnd_log.level_exception);
774     END IF;
775     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
776         hz_utility_v2pub.debug(p_message=>'do_update_cac_bo(-)',
777                                p_prefix=>l_debug_prefix,
778                                p_msg_level=>fnd_log.level_procedure);
779     END IF;
780   EXCEPTION
781     WHEN fnd_api.g_exc_error THEN
782       ROLLBACK TO do_update_cac_bo_pub;
783 
784       -- reset Global variable
785       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
786       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
787 
788       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
789       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
790       FND_MSG_PUB.ADD;
791 
792       x_return_status := fnd_api.g_ret_sts_error;
793 
794       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
795                                 p_count => x_msg_count,
796                                 p_data  => x_msg_data);
797 
798       -- Debug info.
799       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
800         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
801                                p_msg_data=>x_msg_data,
802                                p_msg_type=>'ERROR',
803                                p_msg_level=>fnd_log.level_error);
804       END IF;
805       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
806         hz_utility_v2pub.debug(p_message=>'do_update_cac_bo(-)',
810 
807                                p_prefix=>l_debug_prefix,
808                                p_msg_level=>fnd_log.level_procedure);
809       END IF;
811     WHEN fnd_api.g_exc_unexpected_error THEN
812       ROLLBACK TO do_update_cac_bo_pub;
813 
814       -- reset Global variable
815       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
816       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
817 
818       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
819       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
820       FND_MSG_PUB.ADD;
821 
822       x_return_status := fnd_api.g_ret_sts_unexp_error;
823 
824       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
825                                 p_count => x_msg_count,
826                                 p_data  => x_msg_data);
827 
828       -- Debug info.
829       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
830         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
831                                p_msg_data=>x_msg_data,
832                                p_msg_type=>'UNEXPECTED ERROR',
833                                p_msg_level=>fnd_log.level_error);
834       END IF;
835       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
836         hz_utility_v2pub.debug(p_message=>'do_update_cac_bo(-)',
837                                p_prefix=>l_debug_prefix,
838                                p_msg_level=>fnd_log.level_procedure);
839       END IF;
840 
841     WHEN OTHERS THEN
842       ROLLBACK TO do_update_cac_bo_pub;
843 
844       -- reset Global variable
845       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
846       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
847 
848       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
849       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
850       FND_MSG_PUB.ADD;
851 
852       x_return_status := fnd_api.g_ret_sts_unexp_error;
853 
854       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
855       fnd_message.set_token('ERROR' ,SQLERRM);
856       fnd_msg_pub.add;
857 
858       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
859                                 p_count => x_msg_count,
860                                 p_data  => x_msg_data);
861 
862       -- Debug info.
863       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
864         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
865                                p_msg_data=>x_msg_data,
866                                p_msg_type=>'SQL ERROR',
867                                p_msg_level=>fnd_log.level_error);
868       END IF;
869       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
870         hz_utility_v2pub.debug(p_message=>'do_update_cac_bo(-)',
871                                p_prefix=>l_debug_prefix,
872                                p_msg_level=>fnd_log.level_procedure);
873       END IF;
874   END do_update_cac_bo;
875 
876   -- PROCEDURE do_save_cac_bo
877   --
878   -- DESCRIPTION
879   --     Create or update customer account contact business object.
880   PROCEDURE do_save_cac_bo(
881     p_init_msg_list            IN            VARCHAR2 := fnd_api.g_false,
882     p_validate_bo_flag         IN            VARCHAR2 := fnd_api.g_true,
883     p_cust_acct_contact_obj    IN OUT NOCOPY HZ_CUST_ACCT_CONTACT_BO,
884     p_created_by_module        IN            VARCHAR2,
885     p_obj_source               IN            VARCHAR2 := null,
886     x_return_status            OUT NOCOPY    VARCHAR2,
887     x_msg_count                OUT NOCOPY    NUMBER,
888     x_msg_data                 OUT NOCOPY    VARCHAR2,
889     x_cust_acct_contact_id     OUT NOCOPY    NUMBER,
890     x_cust_acct_contact_os     OUT NOCOPY    VARCHAR2,
891     x_cust_acct_contact_osr    OUT NOCOPY    VARCHAR2,
892     px_parent_id               IN OUT NOCOPY NUMBER,
893     px_parent_os               IN OUT NOCOPY VARCHAR2,
894     px_parent_osr              IN OUT NOCOPY VARCHAR2,
895     px_parent_obj_type         IN OUT NOCOPY VARCHAR2
896   ) IS
897     l_return_status            VARCHAR2(30);
898     l_msg_count                NUMBER;
899     l_msg_data                 VARCHAR2(2000);
900     l_create_update_flag       VARCHAR2(1);
901     l_debug_prefix             VARCHAR2(30) := '';
902   BEGIN
903     -- initialize API return status to success.
904     x_return_status := FND_API.G_RET_STS_SUCCESS;
905 
906     -- Initialize message list if p_init_msg_list is set to TRUE.
907     IF FND_API.to_Boolean(p_init_msg_list) THEN
908       FND_MSG_PUB.initialize;
909     END IF;
910 
911     -- Debug info.
912     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
913         hz_utility_v2pub.debug(p_message=>'do_save_cac_bo(+)',
914                                p_prefix=>l_debug_prefix,
915                                p_msg_level=>fnd_log.level_procedure);
916     END IF;
917 
918     x_cust_acct_contact_id := p_cust_acct_contact_obj.cust_acct_contact_id;
919     x_cust_acct_contact_os := p_cust_acct_contact_obj.orig_system;
920     x_cust_acct_contact_osr := p_cust_acct_contact_obj.orig_system_reference;
921 
922     -- check root business object to determine that it should be
923     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
924     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
925                               p_entity_id      => x_cust_acct_contact_id,
926                               p_entity_os      => x_cust_acct_contact_os,
927                               p_entity_osr     => x_cust_acct_contact_osr,
928                               p_entity_type    => 'HZ_CUST_ACCOUNT_ROLES',
929                               p_parent_id      => px_parent_id,
930                               p_parent_obj_type => px_parent_obj_type
934       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
931                             );
932 
933     IF(l_create_update_flag = 'E') THEN
935       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT_CONTACT');
936       FND_MSG_PUB.ADD;
937       RAISE FND_API.G_EXC_ERROR;
938     END IF;
939 
940     IF(l_create_update_flag = 'C') THEN
941       do_create_cac_bo(
942         p_init_msg_list            => fnd_api.g_false,
943         p_validate_bo_flag         => p_validate_bo_flag,
944         p_cust_acct_contact_obj    => p_cust_acct_contact_obj,
945         p_created_by_module        => p_created_by_module,
946         p_obj_source               => p_obj_source,
947         x_return_status            => x_return_status,
948         x_msg_count                => x_msg_count,
949         x_msg_data                 => x_msg_data,
950         x_cust_acct_contact_id     => x_cust_acct_contact_id,
951         x_cust_acct_contact_os     => x_cust_acct_contact_os,
952         x_cust_acct_contact_osr    => x_cust_acct_contact_osr,
953         px_parent_id               => px_parent_id,
954         px_parent_os               => px_parent_os,
955         px_parent_osr              => px_parent_osr,
956         px_parent_obj_type         => px_parent_obj_type
957       );
958     ELSIF(l_create_update_flag = 'U') THEN
959       do_update_cac_bo(
960         p_init_msg_list            => fnd_api.g_false,
961         p_cust_acct_contact_obj    => p_cust_acct_contact_obj,
962         p_created_by_module        => p_created_by_module,
963         p_obj_source               => p_obj_source,
964         x_return_status            => x_return_status,
965         x_msg_count                => x_msg_count,
966         x_msg_data                 => x_msg_data,
967         x_cust_acct_contact_id     => x_cust_acct_contact_id,
968         x_cust_acct_contact_os     => x_cust_acct_contact_os,
969         x_cust_acct_contact_osr    => x_cust_acct_contact_osr,
970         p_parent_os                => px_parent_os
971       );
972     ELSE
973       RAISE FND_API.G_EXC_ERROR;
974     END IF;
975 
976     -- Debug info.
977     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
978          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
979                                p_msg_data=>x_msg_data,
980                                p_msg_type=>'WARNING',
981                                p_msg_level=>fnd_log.level_exception);
982     END IF;
983     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
984         hz_utility_v2pub.debug(p_message=>'do_save_cac_bo(-)',
985                                p_prefix=>l_debug_prefix,
986                                p_msg_level=>fnd_log.level_procedure);
987     END IF;
988 
989   EXCEPTION
990     WHEN fnd_api.g_exc_error THEN
991       x_return_status := fnd_api.g_ret_sts_error;
992 
993       FND_MESSAGE.SET_NAME('AR', 'HZ_SAVE_API_ERROR');
994       FND_MSG_PUB.ADD;
995       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
996                                 p_count => x_msg_count,
997                                 p_data  => x_msg_data);
998 
999       -- Debug info.
1000       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1001         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1002                                p_msg_data=>x_msg_data,
1003                                p_msg_type=>'ERROR',
1004                                p_msg_level=>fnd_log.level_error);
1005       END IF;
1006       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1007         hz_utility_v2pub.debug(p_message=>'do_save_cac_bo(-)',
1008                                p_prefix=>l_debug_prefix,
1009                                p_msg_level=>fnd_log.level_procedure);
1010       END IF;
1011     WHEN fnd_api.g_exc_unexpected_error THEN
1012       x_return_status := fnd_api.g_ret_sts_unexp_error;
1013 
1014       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1015                                 p_count => x_msg_count,
1016                                 p_data  => x_msg_data);
1017 
1018       -- Debug info.
1019       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1020         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1021                                p_msg_data=>x_msg_data,
1022                                p_msg_type=>'UNEXPECTED ERROR',
1023                                p_msg_level=>fnd_log.level_error);
1024       END IF;
1025       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1026         hz_utility_v2pub.debug(p_message=>'do_save_cac_bo(-)',
1027                                p_prefix=>l_debug_prefix,
1028                                p_msg_level=>fnd_log.level_procedure);
1029       END IF;
1030     WHEN OTHERS THEN
1031       x_return_status := fnd_api.g_ret_sts_unexp_error;
1032 
1033       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1034       fnd_message.set_token('ERROR' ,SQLERRM);
1035       fnd_msg_pub.add;
1036 
1037       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1038                                 p_count => x_msg_count,
1039                                 p_data  => x_msg_data);
1040 
1041       -- Debug info.
1042       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1043         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1044                                p_msg_data=>x_msg_data,
1045                                p_msg_type=>'SQL ERROR',
1046                                p_msg_level=>fnd_log.level_error);
1047       END IF;
1048       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1049         hz_utility_v2pub.debug(p_message=>'do_save_cac_bo(-)',
1050                                p_prefix=>l_debug_prefix,
1051                                p_msg_level=>fnd_log.level_procedure);
1052       END IF;
1056     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
1053   END do_save_cac_bo;
1054 
1055   PROCEDURE save_cust_acct_contact_bo(
1057     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
1058     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
1059     p_created_by_module       IN            VARCHAR2,
1060     x_return_status           OUT NOCOPY    VARCHAR2,
1061     x_msg_count               OUT NOCOPY    NUMBER,
1062     x_msg_data                OUT NOCOPY    VARCHAR2,
1063     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
1064     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
1065     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
1066     px_parent_id              IN OUT NOCOPY NUMBER,
1067     px_parent_os              IN OUT NOCOPY VARCHAR2,
1068     px_parent_osr             IN OUT NOCOPY VARCHAR2,
1069     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
1070   ) IS
1071     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
1072   BEGIN
1073     l_cac_obj := p_cust_acct_contact_obj;
1074     do_save_cac_bo(
1075       p_init_msg_list           => p_init_msg_list,
1076       p_validate_bo_flag        => p_validate_bo_flag,
1077       p_cust_acct_contact_obj   => l_cac_obj,
1078       p_created_by_module       => p_created_by_module,
1079       x_return_status           => x_return_status,
1080       x_msg_count               => x_msg_count,
1081       x_msg_data                => x_msg_data,
1082       x_cust_acct_contact_id    => x_cust_acct_contact_id,
1083       x_cust_acct_contact_os    => x_cust_acct_contact_os,
1084       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
1085       px_parent_id              => px_parent_id,
1086       px_parent_os              => px_parent_os,
1087       px_parent_osr             => px_parent_osr,
1088       px_parent_obj_type        => px_parent_obj_type
1089     );
1090   END save_cust_acct_contact_bo;
1091 
1092   PROCEDURE save_cust_acct_contact_bo(
1093     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
1094     p_cust_acct_contact_obj   IN            HZ_CUST_ACCT_CONTACT_BO,
1095     p_created_by_module       IN            VARCHAR2,
1096     p_obj_source              IN            VARCHAR2 := null,
1097     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
1098     x_return_status           OUT NOCOPY    VARCHAR2,
1099     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1100     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_CONTACT_BO,
1101     x_cust_acct_contact_id    OUT NOCOPY    NUMBER,
1102     x_cust_acct_contact_os    OUT NOCOPY    VARCHAR2,
1103     x_cust_acct_contact_osr   OUT NOCOPY    VARCHAR2,
1104     px_parent_id              IN OUT NOCOPY NUMBER,
1105     px_parent_os              IN OUT NOCOPY VARCHAR2,
1106     px_parent_osr             IN OUT NOCOPY VARCHAR2,
1107     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
1108   ) IS
1109     l_msg_data                VARCHAR2(2000);
1110     l_msg_count               NUMBER;
1111     l_cac_obj                 HZ_CUST_ACCT_CONTACT_BO;
1112   BEGIN
1113     l_cac_obj := p_cust_acct_contact_obj;
1114     do_save_cac_bo(
1115       p_init_msg_list           => fnd_api.g_true,
1116       p_validate_bo_flag        => p_validate_bo_flag,
1117       p_cust_acct_contact_obj   => l_cac_obj,
1118       p_created_by_module       => p_created_by_module,
1119       x_return_status           => x_return_status,
1120       x_msg_count               => l_msg_count,
1121       x_msg_data                => l_msg_data,
1122       x_cust_acct_contact_id    => x_cust_acct_contact_id,
1123       x_cust_acct_contact_os    => x_cust_acct_contact_os,
1124       x_cust_acct_contact_osr   => x_cust_acct_contact_osr,
1125       px_parent_id              => px_parent_id,
1126       px_parent_os              => px_parent_os,
1127       px_parent_osr             => px_parent_osr,
1128       px_parent_obj_type        => px_parent_obj_type
1129     );
1130     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1131                     x_return_status   => x_return_status,
1132                     x_msg_count       => l_msg_count,
1133                     x_msg_data        => l_msg_data);
1134     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1135       x_return_obj := l_cac_obj;
1136     END IF;
1137   END save_cust_acct_contact_bo;
1138 
1139  --------------------------------------
1140   --
1141   -- PROCEDURE get_cust_acct_contact_bos
1142   --
1143   -- DESCRIPTION
1144   --     Get logical customer account contacts.
1145   --
1146   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1147   --
1148   -- ARGUMENTS
1149   --   IN:
1150   --     p_init_msg_list      Initialize message stack if it is set to
1151  --      p_parent_id          parent id.
1152 --       p_cust_acct_contact_id          customer account contact ID.
1153   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
1154   --   OUT:
1155   --     x_cust_acct_contact_objs         Logical customer account contact records.
1156   --     x_return_status      Return status after the call. The status can
1157   --                          be fnd_api.g_ret_sts_success (success),
1158   --                          fnd_api.g_ret_sts_error (error),
1159   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1160   --     x_msg_count          Number of messages in message stack.
1161   --     x_msg_data           Message text if x_msg_count is 1.
1162   --
1163   -- NOTES
1164   --
1165   -- MODIFICATION HISTORY
1166   --
1167   --
1168   --   8-JUN-2005   AWU                Created.
1169   --
1170 
1171 /*
1172 
1173 The Get customer account contact API Procedure is a retrieval service that returns a full customer account contact business object.
1174 The user identifies a particular Organization Contact business object using the TCA identifier and/or the object's Source System
1178 
1175 information. Upon proper validation of the object, the full Organization Contact business object is returned.
1176 The object consists of all data included within the Organization Contact business object, at all embedded levels. This includes the
1177 set of all data stored in the TCA tables for each embedded entity.
1179 
1180 Embedded BO	    	Mandatory	Multiple Logical API Procedure		Comments
1181 
1182 Org Contact		Y		N	get_org_contact_bo
1183 
1184 
1185 To retrieve the appropriate embedded entities within the 'Customer Account Contact' business object, the Get procedure returns all
1186 records for the particular contact from these TCA entity tables.
1187 
1188 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
1189 
1190 Customer Account Role	N	N	HZ_CUST_ACCOUNT_ROLES
1191 Role Responsibility	N	Y	HZ_ROLE_RESPONSIBILITY
1192 
1193 */
1194 
1195 
1196 PROCEDURE get_cust_acct_contact_bo (
1197 	p_init_msg_list		IN	VARCHAR2:=FND_API.G_FALSE,
1198 	p_cust_acct_contact_id	IN	NUMBER,
1199 	p_cust_acct_contact_os	IN	VARCHAR2,
1200 	p_cust_acct_contact_osr	IN	VARCHAR2,
1201 	x_cust_acct_contact_obj	OUT NOCOPY	HZ_CUST_ACCT_CONTACT_BO,
1202 	x_return_status		OUT NOCOPY	VARCHAR2,
1203 	x_msg_count			OUT NOCOPY	NUMBER,
1204 	x_msg_data			OUT NOCOPY	VARCHAR2
1205 ) is
1206  l_debug_prefix              VARCHAR2(30) := '';
1207 
1208   l_cust_acct_contact_id  number;
1209   l_cust_acct_contact_os  varchar2(30);
1210   l_cust_acct_contact_osr varchar2(255);
1211   l_cust_acct_contact_objs  HZ_CUST_ACCT_CONTACT_BO_TBL;
1212 BEGIN
1213 
1214 	-- initialize API return status to success.
1215     	x_return_status := FND_API.G_RET_STS_SUCCESS;
1216 
1217     	-- Initialize message list if p_init_msg_list is set to TRUE
1218     	IF FND_API.to_Boolean(p_init_msg_list) THEN
1219       		FND_MSG_PUB.initialize;
1220     	END IF;
1221 
1222 
1223 	-- Debug info.
1224         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1225         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_contact_bo_pub.get_cust_acct_contact_bo(+)',
1226                                p_prefix=>l_debug_prefix,
1227                                p_msg_level=>fnd_log.level_procedure);
1228     	END IF;
1229 
1230     	-- check if pass in contact_point_id and/or os+osr
1231     	-- extraction validation logic is same as update
1232 
1233     	l_cust_acct_contact_id := p_cust_acct_contact_id;
1234     	l_cust_acct_contact_os := p_cust_acct_contact_os;
1235     	l_cust_acct_contact_osr := p_cust_acct_contact_osr;
1236 
1237     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
1238       		px_id              => l_cust_acct_contact_id,
1239       		px_os              => l_cust_acct_contact_os,
1240       		px_osr             => l_cust_acct_contact_osr,
1241       		p_obj_type         => 'HZ_CUST_ACCOUNT_ROLES',
1242       		x_return_status    => x_return_status,
1243       		x_msg_count        => x_msg_count,
1244       		x_msg_data         => x_msg_data);
1245 
1246     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1247       		RAISE fnd_api.g_exc_error;
1248    	 END IF;
1249 
1250 	HZ_EXTRACT_ACCT_CONT_BO_PVT.get_cust_acct_contact_bos
1251 		(p_init_msg_list => fnd_api.g_false,
1252 		 p_parent_id => NULL,
1253 		 p_cust_acct_contact_id => l_cust_acct_contact_id,
1254 		 p_action_type => NULL,
1255 		  x_cust_acct_contact_objs => l_cust_acct_contact_objs,
1256 		 x_return_status => x_return_status,
1257 		 x_msg_count => x_msg_count,
1258 		 x_msg_data => x_msg_data);
1259 
1260 	x_cust_acct_contact_obj := l_cust_acct_contact_objs(1);
1261 
1262 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1263       		RAISE FND_API.G_EXC_ERROR;
1264     	END IF;
1265 
1266 
1267 	-- Debug info.
1268     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1269          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1270                                p_msg_data=>x_msg_data,
1271                                p_msg_type=>'WARNING',
1272                                p_msg_level=>fnd_log.level_exception);
1273     	END IF;
1274 
1275     	-- Debug info.
1276         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1277         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_contact_bo_pub.get_cust_acct_contact_bo (-)',
1278                                p_prefix=>l_debug_prefix,
1279                                p_msg_level=>fnd_log.level_procedure);
1280     	END IF;
1281 
1282 
1283  EXCEPTION
1284 
1285   WHEN fnd_api.g_exc_error THEN
1286       x_return_status := fnd_api.g_ret_sts_error;
1287 
1288       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1289                                 p_count => x_msg_count,
1290                                 p_data  => x_msg_data);
1291 
1292       -- Debug info.
1293       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1294         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1295                                p_msg_data=>x_msg_data,
1296                                p_msg_type=>'ERROR',
1297                                p_msg_level=>fnd_log.level_error);
1298       END IF;
1299       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1300         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_contact_bo_pub.get_cust_acct_contact_bo (-)',
1301                                p_prefix=>l_debug_prefix,
1302                                p_msg_level=>fnd_log.level_procedure);
1303       END IF;
1304     WHEN fnd_api.g_exc_unexpected_error THEN
1305       x_return_status := fnd_api.g_ret_sts_unexp_error;
1306 
1307       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1308                                 p_count => x_msg_count,
1309                                 p_data  => x_msg_data);
1310 
1311       -- Debug info.
1312       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1313         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1314                                p_msg_data=>x_msg_data,
1315                                p_msg_type=>'UNEXPECTED ERROR',
1316                                p_msg_level=>fnd_log.level_error);
1317       END IF;
1318       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1319         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_contact_bo_pub.get_cust_acct_contact_bo (-)',
1320                                p_prefix=>l_debug_prefix,
1321                                p_msg_level=>fnd_log.level_procedure);
1322       END IF;
1323     WHEN OTHERS THEN
1324       x_return_status := fnd_api.g_ret_sts_unexp_error;
1325 
1326       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1327       fnd_message.set_token('ERROR' ,SQLERRM);
1328       fnd_msg_pub.add;
1329 
1330       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1331                                 p_count => x_msg_count,
1332                                 p_data  => x_msg_data);
1333 
1334       -- Debug info.
1335       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1336         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1337                                p_msg_data=>x_msg_data,
1338                                p_msg_type=>'SQL ERROR',
1339                                p_msg_level=>fnd_log.level_error);
1340       END IF;
1341       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1342         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_contact_bo_pub.get_cust_acct_contact_bo (-)',
1343                                p_prefix=>l_debug_prefix,
1344                                p_msg_level=>fnd_log.level_procedure);
1345       END IF;
1346 
1347 end;
1348 
1349   PROCEDURE get_cust_acct_contact_bo (
1350         p_cust_acct_contact_id  IN      NUMBER,
1351         p_cust_acct_contact_os  IN      VARCHAR2,
1352         p_cust_acct_contact_osr IN      VARCHAR2,
1353         x_cust_acct_contact_obj OUT NOCOPY      HZ_CUST_ACCT_CONTACT_BO,
1354         x_return_status         OUT NOCOPY      VARCHAR2,
1355         x_messages                      OUT NOCOPY      HZ_MESSAGE_OBJ_TBL
1356   ) IS
1357     l_msg_data                 VARCHAR2(2000);
1358     l_msg_count                NUMBER;
1359   BEGIN
1360     get_cust_acct_contact_bo (
1361         p_init_msg_list         => FND_API.G_TRUE,
1362         p_cust_acct_contact_id  => p_cust_acct_contact_id,
1363         p_cust_acct_contact_os  => p_cust_acct_contact_os,
1364         p_cust_acct_contact_osr => p_cust_acct_contact_osr,
1365         x_cust_acct_contact_obj => x_cust_acct_contact_obj,
1366         x_return_status         => x_return_status,
1367         x_msg_count             => l_msg_count,
1368         x_msg_data              => l_msg_data
1369     );
1370     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1371                     x_return_status   => x_return_status,
1372                     x_msg_count       => l_msg_count,
1373                     x_msg_data        => l_msg_data);
1374   END get_cust_acct_contact_bo;
1375 
1376 END hz_cust_acct_contact_bo_pub;