DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_CUST_ACCT_CONTACT_BO_PVT

Source


1 PACKAGE BODY hz_cust_acct_contact_bo_pvt AS
2 /*$Header: ARHBCRVB.pls 120.5 2006/05/18 22:24:24 acng noship $ */
3 
4   -- PRIVATE PROCEDURE assign_role_responsibility_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from role responsibility object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_role_responsibility_obj    Role responsibility object.
14   --     p_cust_account_role_id       Customer account role Id.
15   --   IN/OUT:
16   --     px_role_responsibility_rec   Role responsibility plsql record.
17   --
18   -- NOTES
19   --
20   -- MODIFICATION HISTORY
21   --
22   --   14-DEC-2004    Arnold Ng          Created.
23 
24   PROCEDURE assign_role_responsibility_rec(
25     p_role_responsibility_obj    IN            HZ_ROLE_RESPONSIBILITY_OBJ,
26     p_cust_account_role_id       IN            NUMBER,
27     px_role_responsibility_rec   IN OUT NOCOPY HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE
28   );
29 
30   -- PRIVATE PROCEDURE assign_role_responsibility_rec
31   --
32   -- DESCRIPTION
33   --     Assign attribute value from role responsibility object to plsql record.
34   --
35   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
36   --
37   -- ARGUMENTS
38   --   IN:
39   --     p_role_responsibility_obj    Role responsibility object.
40   --     p_cust_account_role_id       Customer account role Id.
41   --   IN/OUT:
42   --     px_role_responsibility_rec   Role responsibility plsql record.
43   --
44   -- NOTES
45   --
46   -- MODIFICATION HISTORY
47   --
48   --   14-DEC-2004    Arnold Ng          Created.
49 
50   PROCEDURE assign_role_responsibility_rec(
51     p_role_responsibility_obj    IN            HZ_ROLE_RESPONSIBILITY_OBJ,
52     p_cust_account_role_id       IN            NUMBER,
53     px_role_responsibility_rec   IN OUT NOCOPY HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE
54   ) IS
55   BEGIN
56     px_role_responsibility_rec.responsibility_id     := p_role_responsibility_obj.responsibility_id;
57     px_role_responsibility_rec.cust_account_role_id  := p_cust_account_role_id;
58     px_role_responsibility_rec.responsibility_type   := p_role_responsibility_obj.responsibility_type;
59     IF(p_role_responsibility_obj.primary_flag in ('Y','N')) THEN
60       px_role_responsibility_rec.primary_flag          := p_role_responsibility_obj.primary_flag;
61     END IF;
62     px_role_responsibility_rec.attribute_category    := p_role_responsibility_obj.attribute_category;
63     px_role_responsibility_rec.attribute1            := p_role_responsibility_obj.attribute1;
64     px_role_responsibility_rec.attribute2            := p_role_responsibility_obj.attribute2;
65     px_role_responsibility_rec.attribute3            := p_role_responsibility_obj.attribute3;
66     px_role_responsibility_rec.attribute4            := p_role_responsibility_obj.attribute4;
67     px_role_responsibility_rec.attribute5            := p_role_responsibility_obj.attribute5;
68     px_role_responsibility_rec.attribute6            := p_role_responsibility_obj.attribute6;
69     px_role_responsibility_rec.attribute7            := p_role_responsibility_obj.attribute7;
70     px_role_responsibility_rec.attribute8            := p_role_responsibility_obj.attribute8;
71     px_role_responsibility_rec.attribute9            := p_role_responsibility_obj.attribute9;
72     px_role_responsibility_rec.attribute10           := p_role_responsibility_obj.attribute10;
73     px_role_responsibility_rec.attribute11           := p_role_responsibility_obj.attribute11;
74     px_role_responsibility_rec.attribute12           := p_role_responsibility_obj.attribute12;
75     px_role_responsibility_rec.attribute13           := p_role_responsibility_obj.attribute13;
76     px_role_responsibility_rec.attribute14           := p_role_responsibility_obj.attribute14;
77     px_role_responsibility_rec.attribute15           := p_role_responsibility_obj.attribute15;
78     px_role_responsibility_rec.created_by_module     := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
79   END assign_role_responsibility_rec;
80 
81   -- PROCEDURE create_role_responsbilities
82   --
83   -- DESCRIPTION
84   --     Create role responsibilities.
85   --
86   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
87   --
88   -- ARGUMENTS
89   --   IN:
90   --     p_rr_objs            List of role responsibility objects.
91   --     p_cac_id             Customer account contact Id.
92   --   OUT:
93   --     x_return_status      Return status after the call. The status can
94   --                          be fnd_api.g_ret_sts_success (success),
95   --                          fnd_api.g_ret_sts_error (error),
96   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
97   --     x_msg_count          Number of messages in message stack.
98   --     x_msg_data           Message text if x_msg_count is 1.
99   --
100   -- NOTES
101   --
102   -- MODIFICATION HISTORY
103   --
104   --   14-DEC-2004    Arnold Ng          Created.
105 
106   PROCEDURE create_role_responsibilities(
107     p_rr_objs                 IN OUT NOCOPY HZ_ROLE_RESPONSIBILITY_OBJ_TBL,
108     p_cac_id                  IN            NUMBER,
109     x_return_status           OUT NOCOPY    VARCHAR2,
110     x_msg_count               OUT NOCOPY    NUMBER,
111     x_msg_data                OUT NOCOPY    VARCHAR2
112   ) IS
113     l_debug_prefix            VARCHAR2(30) := '';
114     l_rr_id                   NUMBER;
115     l_rr_rec                  HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE;
116   BEGIN
117     -- Standard start of API savepoint
118     SAVEPOINT create_rr_pvt;
119 
120     -- initialize API return status to success.
121     x_return_status := FND_API.G_RET_STS_SUCCESS;
122 
123     -- Debug info.
124     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
125         hz_utility_v2pub.debug(p_message=>'create_role_responsibilities(+)',
126                                p_prefix=>l_debug_prefix,
127                                p_msg_level=>fnd_log.level_procedure);
128     END IF;
129 
130     -- Create role responsibilities
131     FOR i IN 1..p_rr_objs.COUNT LOOP
132       assign_role_responsibility_rec(
133         p_role_responsibility_obj   => p_rr_objs(i),
134         p_cust_account_role_id      => p_cac_id,
135         px_role_responsibility_rec  => l_rr_rec
136       );
137 
138       HZ_CUST_ACCOUNT_ROLE_V2PUB.create_role_responsibility (
139         p_role_responsibility_rec   => l_rr_rec,
140         x_responsibility_id         => l_rr_id,
141         x_return_status             => x_return_status,
142         x_msg_count                 => x_msg_count,
143         x_msg_data                  => x_msg_data
144       );
145 
146       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
147         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
148           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_contact_bo_pvt.create_role_responsibilities, cust acct contact id: '||p_cac_id,
149                                  p_prefix=>l_debug_prefix,
150                                  p_msg_level=>fnd_log.level_procedure);
151         END IF;
152         RAISE fnd_api.g_exc_error;
153       END IF;
154 
155       -- assign role_responsibility_id
156       p_rr_objs(i).responsibility_id := l_rr_id;
157     END LOOP;
158 
159     -- Debug info.
160     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
161          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
162                                p_msg_data=>x_msg_data,
163                                p_msg_type=>'WARNING',
164                                p_msg_level=>fnd_log.level_exception);
165     END IF;
166     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
167         hz_utility_v2pub.debug(p_message=>'create_role_responsibilities(-)',
168                                p_prefix=>l_debug_prefix,
169                                p_msg_level=>fnd_log.level_procedure);
170     END IF;
171 
172   EXCEPTION
173     WHEN fnd_api.g_exc_error THEN
174       ROLLBACK TO create_rr_pvt;
175       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
176       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
177       FND_MSG_PUB.ADD;
178 
179       x_return_status := fnd_api.g_ret_sts_error;
180 
181       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
182                                 p_count => x_msg_count,
183                                 p_data  => x_msg_data);
184 
185       -- Debug info.
186       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
187         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
188                                p_msg_data=>x_msg_data,
189                                p_msg_type=>'ERROR',
190                                p_msg_level=>fnd_log.level_error);
191       END IF;
192       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
193         hz_utility_v2pub.debug(p_message=>'create_role_responsibilities(-)',
194                                p_prefix=>l_debug_prefix,
195                                p_msg_level=>fnd_log.level_procedure);
196       END IF;
197 
198     WHEN fnd_api.g_exc_unexpected_error THEN
199       ROLLBACK TO create_rr_pvt;
200       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
201       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
202       FND_MSG_PUB.ADD;
203 
204       x_return_status := fnd_api.g_ret_sts_unexp_error;
205 
206       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
207                                 p_count => x_msg_count,
208                                 p_data  => x_msg_data);
209 
210       -- Debug info.
211       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
212         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
213                                p_msg_data=>x_msg_data,
214                                p_msg_type=>'UNEXPECTED ERROR',
215                                p_msg_level=>fnd_log.level_error);
216       END IF;
217       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
218         hz_utility_v2pub.debug(p_message=>'create_role_responsibilities(-)',
219                                p_prefix=>l_debug_prefix,
220                                p_msg_level=>fnd_log.level_procedure);
221       END IF;
222 
223     WHEN OTHERS THEN
224       ROLLBACK TO create_rr_pvt;
225       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
226       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
227       FND_MSG_PUB.ADD;
228 
229       x_return_status := fnd_api.g_ret_sts_unexp_error;
230 
231       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
232       fnd_message.set_token('ERROR' ,SQLERRM);
233       fnd_msg_pub.add;
234 
235       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
236                                 p_count => x_msg_count,
237                                 p_data  => x_msg_data);
238 
239       -- Debug info.
240       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
241         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
242                                p_msg_data=>x_msg_data,
243                                p_msg_type=>'SQL ERROR',
244                                p_msg_level=>fnd_log.level_error);
245       END IF;
246       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
247         hz_utility_v2pub.debug(p_message=>'create_role_responsibilities(-)',
248                                p_prefix=>l_debug_prefix,
249                                p_msg_level=>fnd_log.level_procedure);
250       END IF;
251   END create_role_responsibilities;
252 
253   -- PROCEDURE save_role_responsbilities
254   --
255   -- DESCRIPTION
256   --     Create or update role responsibilities.
257   --
258   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
259   --
260   -- ARGUMENTS
261   --   IN:
262   --     p_rr_objs            List of role responsibility objects.
263   --     p_cac_id             Customer account contact Id.
264   --   OUT:
265   --     x_return_status      Return status after the call. The status can
266   --                          be fnd_api.g_ret_sts_success (success),
267   --                          fnd_api.g_ret_sts_error (error),
268   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
269   --     x_msg_count          Number of messages in message stack.
270   --     x_msg_data           Message text if x_msg_count is 1.
271   --
272   -- NOTES
273   --
274   -- MODIFICATION HISTORY
275   --
276   --   14-DEC-2004    Arnold Ng          Created.
277 
278   PROCEDURE save_role_responsibilities(
279     p_rr_objs                 IN OUT NOCOPY HZ_ROLE_RESPONSIBILITY_OBJ_TBL,
280     p_cac_id                  IN            NUMBER,
281     x_return_status           OUT NOCOPY    VARCHAR2,
282     x_msg_count               OUT NOCOPY    NUMBER,
283     x_msg_data                OUT NOCOPY    VARCHAR2
284   )IS
285     l_debug_prefix             VARCHAR2(30) := '';
286     l_rr_id                    NUMBER;
287     l_rr_rec                   HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE;
288     l_ovn                      NUMBER;
289   BEGIN
290     -- Standard start of API savepoint
291     SAVEPOINT save_rr_pvt;
292 
293     -- initialize API return status to success.
294     x_return_status := FND_API.G_RET_STS_SUCCESS;
295 
296     -- Debug info.
297     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
298         hz_utility_v2pub.debug(p_message=>'save_role_responsibilities(+)',
299                                p_prefix=>l_debug_prefix,
300                                p_msg_level=>fnd_log.level_procedure);
301     END IF;
302 
303     -- Create/Update role responsibilities
304     FOR i IN 1..p_rr_objs.COUNT LOOP
305       assign_role_responsibility_rec(
306         p_role_responsibility_obj   => p_rr_objs(i),
307         p_cust_account_role_id      => p_cac_id,
308         px_role_responsibility_rec  => l_rr_rec
309       );
310 
311       -- check if the role resp record is create or update
312       hz_registry_validate_bo_pvt.check_role_resp_op(
313         p_cust_acct_contact_id     => p_cac_id,
314         px_responsibility_id       => l_rr_rec.responsibility_id,
315         p_responsibility_type      => l_rr_rec.responsibility_type,
316         x_object_version_number    => l_ovn
317       );
318 
319       IF (l_ovn = -1) THEN
320         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
321           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_contact_bo_pvt.check_role_resp_op, cust acct contact id: '||p_cac_id,
322                                  p_prefix=>l_debug_prefix,
323                                  p_msg_level=>fnd_log.level_procedure);
324         END IF;
325         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
326         FND_MSG_PUB.ADD;
327         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
328         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
329         FND_MSG_PUB.ADD;
330         RAISE fnd_api.g_exc_error;
331       END IF;
332 
333       IF(l_ovn IS NULL) THEN
334         HZ_CUST_ACCOUNT_ROLE_V2PUB.create_role_responsibility (
335           p_role_responsibility_rec   => l_rr_rec,
336           x_responsibility_id         => l_rr_id,
337           x_return_status             => x_return_status,
338           x_msg_count                 => x_msg_count,
339           x_msg_data                  => x_msg_data
340         );
341 
342         -- assign role_responsibility_id
343         p_rr_objs(i).responsibility_id := l_rr_id;
344       ELSE
345         -- clean up created_by_module for update
346         l_rr_rec.created_by_module := NULL;
347         HZ_CUST_ACCOUNT_ROLE_V2PUB.update_role_responsibility (
348           p_role_responsibility_rec   => l_rr_rec,
349           p_object_version_number     => l_ovn,
350           x_return_status             => x_return_status,
351           x_msg_count                 => x_msg_count,
352           x_msg_data                  => x_msg_data
353         );
354 
355         -- assign role_responsibility_id
356         p_rr_objs(i).responsibility_id := l_rr_rec.responsibility_id;
357       END IF;
358 
359       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
360         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
361           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_contact_bo_pvt.save_role_responsibilities, cust acct contact id: '||p_cac_id,
362                                  p_prefix=>l_debug_prefix,
363                                  p_msg_level=>fnd_log.level_procedure);
364         END IF;
365         RAISE fnd_api.g_exc_error;
366       END IF;
367 
368     END LOOP;
369 
370     -- Debug info.
371     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
372          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
373                                p_msg_data=>x_msg_data,
374                                p_msg_type=>'WARNING',
375                                p_msg_level=>fnd_log.level_exception);
376     END IF;
377     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
378         hz_utility_v2pub.debug(p_message=>'save_role_responsibilities(-)',
379                                p_prefix=>l_debug_prefix,
380                                p_msg_level=>fnd_log.level_procedure);
381     END IF;
382   EXCEPTION
383     WHEN fnd_api.g_exc_error THEN
384       ROLLBACK TO save_rr_pvt;
385       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
386       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
387       FND_MSG_PUB.ADD;
388 
389       x_return_status := fnd_api.g_ret_sts_error;
390 
391       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
392                                 p_count => x_msg_count,
393                                 p_data  => x_msg_data);
394 
395       -- Debug info.
396       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
397         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
398                                p_msg_data=>x_msg_data,
399                                p_msg_type=>'ERROR',
400                                p_msg_level=>fnd_log.level_error);
401       END IF;
402       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
403         hz_utility_v2pub.debug(p_message=>'save_role_responsibilities(-)',
404                                p_prefix=>l_debug_prefix,
405                                p_msg_level=>fnd_log.level_procedure);
406       END IF;
407 
408     WHEN fnd_api.g_exc_unexpected_error THEN
409       ROLLBACK TO save_rr_pvt;
410       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
411       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
412       FND_MSG_PUB.ADD;
413 
414       x_return_status := fnd_api.g_ret_sts_unexp_error;
415 
416       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
417                                 p_count => x_msg_count,
418                                 p_data  => x_msg_data);
419 
420       -- Debug info.
421       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
422         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
423                                p_msg_data=>x_msg_data,
424                                p_msg_type=>'UNEXPECTED ERROR',
425                                p_msg_level=>fnd_log.level_error);
426       END IF;
427       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
428         hz_utility_v2pub.debug(p_message=>'save_role_responsibilities(-)',
429                                p_prefix=>l_debug_prefix,
430                                p_msg_level=>fnd_log.level_procedure);
431       END IF;
432 
433     WHEN OTHERS THEN
434       ROLLBACK TO save_rr_pvt;
435       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
436       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_ROLE_RESPONSIBILITY');
437       FND_MSG_PUB.ADD;
438 
439       x_return_status := fnd_api.g_ret_sts_unexp_error;
440 
441       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
442       fnd_message.set_token('ERROR' ,SQLERRM);
443       fnd_msg_pub.add;
444 
445       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
446                                 p_count => x_msg_count,
447                                 p_data  => x_msg_data);
448 
449       -- Debug info.
450       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
451         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
452                                p_msg_data=>x_msg_data,
453                                p_msg_type=>'SQL ERROR',
454                                p_msg_level=>fnd_log.level_error);
455       END IF;
456       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
457         hz_utility_v2pub.debug(p_message=>'save_role_responsibilities(-)',
458                                p_prefix=>l_debug_prefix,
459                                p_msg_level=>fnd_log.level_procedure);
460       END IF;
461   END save_role_responsibilities;
462 
463   -- PROCEDURE save_cust_acct_contacts
464   --
465   -- DESCRIPTION
466   --     Create or update customer account contact.
467   --
468   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
469   --
470   -- ARGUMENTS
471   --   IN:
472   --     p_cac_objs           List of customer account contact objects.
473   --     p_create_update_flag Create or update flag.
474   --     p_parent_id          Parent Id.
475   --     p_parent_os          Parent original system.
476   --     p_parent_osr         Parent original system reference.
477   --     p_parent_obj_type    Parent object type.
478   --   OUT:
479   --     x_return_status      Return status after the call. The status can
480   --                          be fnd_api.g_ret_sts_success (success),
481   --                          fnd_api.g_ret_sts_error (error),
482   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
483   --     x_msg_count          Number of messages in message stack.
484   --     x_msg_data           Message text if x_msg_count is 1.
485   --
486   -- NOTES
487   --
488   -- MODIFICATION HISTORY
489   --
490   --   14-DEC-2004    Arnold Ng          Created.
491 
492   PROCEDURE save_cust_acct_contacts(
493     p_cac_objs                IN OUT NOCOPY HZ_CUST_ACCT_CONTACT_BO_TBL,
494     p_create_update_flag      IN            VARCHAR2,
495     p_obj_source              IN            VARCHAR2 := null,
496     x_return_status           OUT NOCOPY    VARCHAR2,
497     x_msg_count               OUT NOCOPY    NUMBER,
498     x_msg_data                OUT NOCOPY    VARCHAR2,
499     p_parent_id               IN            NUMBER,
500     p_parent_os               IN            VARCHAR2,
501     p_parent_osr              IN            VARCHAR2,
502     p_parent_obj_type         IN            VARCHAR2
503   ) IS
504     l_debug_prefix            VARCHAR2(30) := '';
505     l_cac_id                  NUMBER;
506     l_cac_os                  VARCHAR2(30);
507     l_cac_osr                 VARCHAR2(255);
508     l_parent_id               NUMBER;
509     l_parent_os               VARCHAR2(30);
510     l_parent_osr              VARCHAR2(255);
511     l_parent_obj_type         VARCHAR2(30);
512     l_cbm                     VARCHAR2(30);
513   BEGIN
514     -- initialize API return status to success
515     x_return_status := FND_API.G_RET_STS_SUCCESS;
516 
517     -- Debug info.
518     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
519         hz_utility_v2pub.debug(p_message=>'save_cust_acct_contacts(+)',
520                                p_prefix=>l_debug_prefix,
521                                p_msg_level=>fnd_log.level_procedure);
522     END IF;
523 
524     l_parent_id := p_parent_id;
525     l_parent_os := p_parent_os;
526     l_parent_osr := p_parent_osr;
527     l_parent_obj_type := p_parent_obj_type;
528 
529     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
530 
531     IF(p_create_update_flag = 'C') THEN
532       -- Create cust account contact
533       FOR i IN 1..p_cac_objs.COUNT LOOP
534         HZ_CUST_ACCT_CONTACT_BO_PUB.do_create_cac_bo(
535           p_init_msg_list           => fnd_api.g_false,
536           p_validate_bo_flag        => fnd_api.g_false,
537           p_cust_acct_contact_obj   => p_cac_objs(i),
538           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
539           p_obj_source              => p_obj_source,
540           x_return_status           => x_return_status,
541           x_msg_count               => x_msg_count,
542           x_msg_data                => x_msg_data,
543           x_cust_acct_contact_id    => l_cac_id,
544           x_cust_acct_contact_os    => l_cac_os,
545           x_cust_acct_contact_osr   => l_cac_osr,
546           px_parent_id              => l_parent_id,
547           px_parent_os              => l_parent_os,
548           px_parent_osr             => l_parent_osr,
549           px_parent_obj_type        => l_parent_obj_type
550         );
551 
552         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
553           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
554             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_contact_bo_pvt.save_cust_acct_contacts, parent id: '||l_parent_id||' '||l_parent_os||'-'||l_parent_osr,
555                                    p_prefix=>l_debug_prefix,
556                                    p_msg_level=>fnd_log.level_procedure);
557           END IF;
558           RAISE fnd_api.g_exc_error;
559         END IF;
560 
561         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
562       END LOOP;
563     ELSE
564       -- Create/update cust account contact
565       FOR i IN 1..p_cac_objs.COUNT LOOP
566         HZ_CUST_ACCT_CONTACT_BO_PUB.do_save_cac_bo(
567           p_init_msg_list           => fnd_api.g_false,
568           p_validate_bo_flag        => fnd_api.g_false,
569           p_cust_acct_contact_obj   => p_cac_objs(i),
570           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
571           p_obj_source              => p_obj_source,
572           x_return_status           => x_return_status,
573           x_msg_count               => x_msg_count,
574           x_msg_data                => x_msg_data,
575           x_cust_acct_contact_id    => l_cac_id,
576           x_cust_acct_contact_os    => l_cac_os,
577           x_cust_acct_contact_osr   => l_cac_osr,
578           px_parent_id              => l_parent_id,
579           px_parent_os              => l_parent_os,
580           px_parent_osr             => l_parent_osr,
581           px_parent_obj_type        => l_parent_obj_type
582         );
583 
584         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
585           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
586             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_contact_bo_pvt.save_cust_acct_contacts, parent id: '||l_parent_id||' '||l_parent_os||'-'||l_parent_osr,
587                                    p_prefix=>l_debug_prefix,
588                                    p_msg_level=>fnd_log.level_procedure);
589           END IF;
590           RAISE fnd_api.g_exc_error;
591         END IF;
592 
593         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
594       END LOOP;
595     END IF;
596 
597     -- Debug info.
598     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
599          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
600                                p_msg_data=>x_msg_data,
601                                p_msg_type=>'WARNING',
602                                p_msg_level=>fnd_log.level_exception);
603     END IF;
604     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
605         hz_utility_v2pub.debug(p_message=>'save_cust_acct_contacts(-)',
606                                p_prefix=>l_debug_prefix,
607                                p_msg_level=>fnd_log.level_procedure);
608     END IF;
609   EXCEPTION
610     WHEN fnd_api.g_exc_error THEN
611       x_return_status := fnd_api.g_ret_sts_error;
612 
613       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
614                                 p_count => x_msg_count,
615                                 p_data  => x_msg_data);
616 
617       -- Debug info.
618       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
619         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
620                                p_msg_data=>x_msg_data,
621                                p_msg_type=>'ERROR',
622                                p_msg_level=>fnd_log.level_error);
623       END IF;
624       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
625         hz_utility_v2pub.debug(p_message=>'save_cust_acct_contacts(-)',
626                                p_prefix=>l_debug_prefix,
627                                p_msg_level=>fnd_log.level_procedure);
628       END IF;
629     WHEN fnd_api.g_exc_unexpected_error THEN
630       x_return_status := fnd_api.g_ret_sts_unexp_error;
631 
632       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
633                                 p_count => x_msg_count,
634                                 p_data  => x_msg_data);
635 
636       -- Debug info.
637       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
638         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
639                                p_msg_data=>x_msg_data,
640                                p_msg_type=>'UNEXPECTED ERROR',
641                                p_msg_level=>fnd_log.level_error);
642       END IF;
643       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
644         hz_utility_v2pub.debug(p_message=>'save_cust_acct_contacts(-)',
645                                p_prefix=>l_debug_prefix,
646                                p_msg_level=>fnd_log.level_procedure);
647       END IF;
648     WHEN OTHERS THEN
649       x_return_status := fnd_api.g_ret_sts_unexp_error;
650 
651       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
652       fnd_message.set_token('ERROR' ,SQLERRM);
653       fnd_msg_pub.add;
654 
655       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
656                                 p_count => x_msg_count,
657                                 p_data  => x_msg_data);
658 
659       -- Debug info.
660       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
661         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
662                                p_msg_data=>x_msg_data,
663                                p_msg_type=>'SQL ERROR',
664                                p_msg_level=>fnd_log.level_error);
665       END IF;
666       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
667         hz_utility_v2pub.debug(p_message=>'save_cust_acct_contacts(-)',
668                                p_prefix=>l_debug_prefix,
669                                p_msg_level=>fnd_log.level_procedure);
670       END IF;
671   END save_cust_acct_contacts;
672 
673 END hz_cust_acct_contact_bo_pvt;