DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_ORG_CONTACT_BO_PUB

Source


1 PACKAGE BODY hz_org_contact_bo_pub AS
2 /*$Header: ARHBOCBB.pls 120.19.12000000.2 2007/02/22 20:03:21 awu ship $ */
3 
4   -- PRIVATE PROCEDURE assign_person_profile_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from person profile object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_person_obj         Contact information object.
14   --     p_person_os          Person original system.
15   --     p_person_osr         Person original system reference.
16   --     p_create_or_update   Create or update flag.
17   --   IN OUT:
18   --     px_person_rec        Person plsql record.
19   --
20   -- NOTES
21   --
22   -- MODIFICATION HISTORY
23   --
24   --   14-DEC-2004    Arnold Ng          Created.
25 
26   PROCEDURE assign_person_profile_rec(
27     p_person_obj                 IN            HZ_PERSON_PROFILE_OBJ,
28     p_person_id                  IN            NUMBER,
29     p_person_os                  IN            VARCHAR2,
30     p_person_osr                 IN            VARCHAR2,
31     p_create_or_update           IN            VARCHAR2 := 'C',
32     px_person_rec                IN OUT NOCOPY HZ_PARTY_V2PUB.PERSON_REC_TYPE
33   );
34 
35   -- PRIVATE PROCEDURE assign_org_contact_rec
36   --
37   -- DESCRIPTION
38   --     Assign attribute value from org contact business object to plsql record.
39   --
40   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
41   --
42   -- ARGUMENTS
43   --   IN:
44   --     p_org_contact_obj    Organization contact business object.
45   --     p_person_id          Person Id.
46   --     p_related_org_id     Related organization Id.
47   --     p_oc_id              Org contact Id.
48   --     p_oc_os              Org contact original system.
49   --     p_oc_osr             Org contact original system reference.
50   --     p_create_or_update   Create or update flag.
51   --   IN OUT:
52   --     px_org_contact_rec   Org contact plsql record.
53   --
54   -- NOTES
55   --
56   -- MODIFICATION HISTORY
57   --
58   --   14-DEC-2004    Arnold Ng          Created.
59 
60   PROCEDURE assign_org_contact_rec(
61     p_org_contact_obj            IN            HZ_ORG_CONTACT_BO,
62     p_person_id                  IN            NUMBER,
63     p_related_org_id             IN            NUMBER,
64     p_oc_id                      IN            NUMBER,
65     p_oc_os                      IN            VARCHAR2,
66     p_oc_osr                     IN            VARCHAR2,
67     p_create_or_update           IN            VARCHAR2 := 'C',
68     px_org_contact_rec           IN OUT NOCOPY HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE
69   );
70 
71   -- PRIVATE PROCEDURE assign_person_profile_rec
72   --
73   -- DESCRIPTION
74   --     Assign attribute value from person profile object to plsql record.
75   --
76   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
77   --
78   -- ARGUMENTS
79   --   IN:
80   --     p_person_obj         Contact information object.
81   --     p_person_os          Person original system.
82   --     p_person_osr         Person original system reference.
83   --     p_create_or_update   Create or update flag.
84   --   IN OUT:
85   --     px_person_rec        Person plsql record.
86   --
87   -- NOTES
88   --
89   -- MODIFICATION HISTORY
90   --
91   --   14-DEC-2004    Arnold Ng          Created.
92 
93   PROCEDURE assign_person_profile_rec(
94     p_person_obj                 IN            HZ_PERSON_PROFILE_OBJ,
95     p_person_id                  IN            NUMBER,
96     p_person_os                  IN            VARCHAR2,
97     p_person_osr                 IN            VARCHAR2,
98     p_create_or_update           IN            VARCHAR2 := 'C',
99     px_person_rec                IN OUT NOCOPY HZ_PARTY_V2PUB.PERSON_REC_TYPE
100   ) IS
101   BEGIN
102     px_person_rec.person_pre_name_adjunct := p_person_obj.person_pre_name_adjunct;
103     px_person_rec.person_first_name := p_person_obj.person_first_name;
104     px_person_rec.person_middle_name := p_person_obj.person_middle_name;
105     px_person_rec.person_last_name := p_person_obj.person_last_name;
106     px_person_rec.person_name_suffix := p_person_obj.person_name_suffix;
107     px_person_rec.person_title := p_person_obj.person_title;
108     px_person_rec.person_academic_title := p_person_obj.person_academic_title;
109     px_person_rec.person_previous_last_name := p_person_obj.person_previous_last_name;
110     px_person_rec.person_initials := p_person_obj.person_initials;
111     px_person_rec.known_as  := p_person_obj.known_as;
112     px_person_rec.known_as2 := p_person_obj.known_as2;
113     px_person_rec.known_as3 := p_person_obj.known_as3;
114     px_person_rec.known_as4 := p_person_obj.known_as4;
115     px_person_rec.known_as5 := p_person_obj.known_as5;
116     px_person_rec.person_name_phonetic := p_person_obj.person_name_phonetic;
117     px_person_rec.person_first_name_phonetic := p_person_obj.person_first_name_phonetic;
118     px_person_rec.person_last_name_phonetic := p_person_obj.person_last_name_phonetic;
119     px_person_rec.middle_name_phonetic := p_person_obj.middle_name_phonetic;
120     px_person_rec.tax_reference := p_person_obj.tax_reference;
121     px_person_rec.jgzz_fiscal_code := p_person_obj.jgzz_fiscal_code;
122     px_person_rec.person_iden_type := p_person_obj.person_iden_type;
123     px_person_rec.person_identifier := p_person_obj.person_identifier;
124     px_person_rec.date_of_birth := p_person_obj.date_of_birth;
125     px_person_rec.place_of_birth := p_person_obj.place_of_birth;
126     px_person_rec.date_of_death := p_person_obj.date_of_death;
127     IF(p_person_obj.deceased_flag in ('Y','N')) THEN
128       px_person_rec.deceased_flag := p_person_obj.deceased_flag;
129     END IF;
130     px_person_rec.gender := p_person_obj.gender;
131     px_person_rec.declared_ethnicity := p_person_obj.declared_ethnicity;
132     px_person_rec.marital_status := p_person_obj.marital_status;
133     px_person_rec.marital_status_effective_date := p_person_obj.marital_status_eff_date;
134     px_person_rec.personal_income := p_person_obj.personal_income;
135     IF(p_person_obj.head_of_household_flag in ('Y','N')) THEN
136       px_person_rec.head_of_household_flag := p_person_obj.head_of_household_flag;
137     END IF;
138     px_person_rec.household_income := p_person_obj.household_income;
139     px_person_rec.household_size := p_person_obj.household_size;
140     px_person_rec.rent_own_ind := p_person_obj.rent_own_ind;
141     px_person_rec.last_known_gps:= p_person_obj.last_known_gps;
142     px_person_rec.internal_flag:= p_person_obj.internal_flag;
143     IF(p_create_or_update = 'C') THEN
144       px_person_rec.party_rec.orig_system:= p_person_os;
145       px_person_rec.party_rec.orig_system_reference:= p_person_osr;
146       px_person_rec.created_by_module:= HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
147     END IF;
148     px_person_rec.actual_content_source:= p_person_obj.actual_content_source;
149     px_person_rec.party_rec.party_id:= p_person_id;
150     px_person_rec.party_rec.party_number:= p_person_obj.party_number;
151     px_person_rec.party_rec.validated_flag:= p_person_obj.validated_flag;
152     px_person_rec.party_rec.status:= p_person_obj.status;
153     px_person_rec.party_rec.category_code:= p_person_obj.category_code;
154     px_person_rec.party_rec.salutation:= p_person_obj.salutation;
155     px_person_rec.party_rec.attribute_category:= p_person_obj.attribute_category;
156     px_person_rec.party_rec.attribute1:= p_person_obj.attribute1;
157     px_person_rec.party_rec.attribute2:= p_person_obj.attribute2;
158     px_person_rec.party_rec.attribute3:= p_person_obj.attribute3;
159     px_person_rec.party_rec.attribute4:= p_person_obj.attribute4;
160     px_person_rec.party_rec.attribute5:= p_person_obj.attribute5;
161     px_person_rec.party_rec.attribute6:= p_person_obj.attribute6;
162     px_person_rec.party_rec.attribute7:= p_person_obj.attribute7;
163     px_person_rec.party_rec.attribute8:= p_person_obj.attribute8;
164     px_person_rec.party_rec.attribute9:= p_person_obj.attribute9;
165     px_person_rec.party_rec.attribute10:= p_person_obj.attribute10;
166     px_person_rec.party_rec.attribute11:= p_person_obj.attribute11;
167     px_person_rec.party_rec.attribute12:= p_person_obj.attribute12;
168     px_person_rec.party_rec.attribute13:= p_person_obj.attribute13;
169     px_person_rec.party_rec.attribute14:= p_person_obj.attribute14;
170     px_person_rec.party_rec.attribute15:= p_person_obj.attribute15;
171     px_person_rec.party_rec.attribute16:= p_person_obj.attribute16;
172     px_person_rec.party_rec.attribute17:= p_person_obj.attribute17;
173     px_person_rec.party_rec.attribute18:= p_person_obj.attribute18;
174     px_person_rec.party_rec.attribute19:= p_person_obj.attribute19;
175     px_person_rec.party_rec.attribute20:= p_person_obj.attribute20;
176     px_person_rec.party_rec.attribute21:= p_person_obj.attribute21;
177     px_person_rec.party_rec.attribute22:= p_person_obj.attribute22;
178     px_person_rec.party_rec.attribute23:= p_person_obj.attribute23;
179     px_person_rec.party_rec.attribute24:= p_person_obj.attribute24;
180   END assign_person_profile_rec;
181 
182   -- PRIVATE PROCEDURE assign_org_contact_rec
183   --
184   -- DESCRIPTION
185   --     Assign attribute value from org contact business object to plsql record.
186   --
187   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
188   --
189   -- ARGUMENTS
190   --   IN:
191   --     p_org_contact_obj    Organization contact business object.
192   --     p_person_id          Person Id.
193   --     p_related_org_id     Related organization Id.
194   --     p_oc_id              Org contact Id.
195   --     p_oc_os              Org contact original system.
196   --     p_oc_osr             Org contact original system reference.
197   --     p_create_or_update   Create or update flag.
198   --   IN OUT:
199   --     px_org_contact_rec   Org contact plsql record.
200   --
201   -- NOTES
202   --
203   -- MODIFICATION HISTORY
204   --
205   --   14-DEC-2004    Arnold Ng          Created.
206 
207   PROCEDURE assign_org_contact_rec(
208     p_org_contact_obj            IN            HZ_ORG_CONTACT_BO,
209     p_person_id                  IN            NUMBER,
210     p_related_org_id             IN            NUMBER,
211     p_oc_id                      IN            NUMBER,
212     p_oc_os                      IN            VARCHAR2,
213     p_oc_osr                     IN            VARCHAR2,
214     p_create_or_update           IN            VARCHAR2 := 'C',
215     px_org_contact_rec           IN OUT NOCOPY HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE
216   ) IS
217   BEGIN
218     px_org_contact_rec.org_contact_id        := p_oc_id;
219     px_org_contact_rec.comments              := p_org_contact_obj.comments;
220     px_org_contact_rec.contact_number        := p_org_contact_obj.contact_number;
221     px_org_contact_rec.department_code       := p_org_contact_obj.department_code;
222     px_org_contact_rec.department            := p_org_contact_obj.department;
223     px_org_contact_rec.title                 := p_org_contact_obj.title;
224     px_org_contact_rec.job_title             := p_org_contact_obj.job_title;
225     IF(p_org_contact_obj.decision_maker_flag in ('Y','N')) THEN
226       px_org_contact_rec.decision_maker_flag   := p_org_contact_obj.decision_maker_flag;
227     END IF;
228     px_org_contact_rec.job_title_code        := p_org_contact_obj.job_title_code;
229     IF(p_org_contact_obj.reference_use_flag in ('Y','N')) THEN
230       px_org_contact_rec.reference_use_flag    := p_org_contact_obj.reference_use_flag;
231     END IF;
232     px_org_contact_rec.rank                  := p_org_contact_obj.rank;
233     px_org_contact_rec.party_site_id         := p_org_contact_obj.party_site_id;
234     px_org_contact_rec.attribute_category    := p_org_contact_obj.attribute_category;
235     px_org_contact_rec.attribute1            := p_org_contact_obj.attribute1;
236     px_org_contact_rec.attribute2            := p_org_contact_obj.attribute2;
237     px_org_contact_rec.attribute3            := p_org_contact_obj.attribute3;
238     px_org_contact_rec.attribute4            := p_org_contact_obj.attribute4;
239     px_org_contact_rec.attribute5            := p_org_contact_obj.attribute5;
240     px_org_contact_rec.attribute6            := p_org_contact_obj.attribute6;
241     px_org_contact_rec.attribute7            := p_org_contact_obj.attribute7;
242     px_org_contact_rec.attribute8            := p_org_contact_obj.attribute8;
243     px_org_contact_rec.attribute9            := p_org_contact_obj.attribute9;
244     px_org_contact_rec.attribute10           := p_org_contact_obj.attribute10;
245     px_org_contact_rec.attribute11           := p_org_contact_obj.attribute11;
246     px_org_contact_rec.attribute12           := p_org_contact_obj.attribute12;
247     px_org_contact_rec.attribute13           := p_org_contact_obj.attribute13;
248     px_org_contact_rec.attribute14           := p_org_contact_obj.attribute14;
249     px_org_contact_rec.attribute15           := p_org_contact_obj.attribute15;
250     px_org_contact_rec.attribute16           := p_org_contact_obj.attribute16;
251     px_org_contact_rec.attribute17           := p_org_contact_obj.attribute17;
252     px_org_contact_rec.attribute18           := p_org_contact_obj.attribute18;
253     px_org_contact_rec.attribute19           := p_org_contact_obj.attribute19;
254     px_org_contact_rec.attribute20           := p_org_contact_obj.attribute20;
255     px_org_contact_rec.attribute21           := p_org_contact_obj.attribute21;
256     px_org_contact_rec.attribute22           := p_org_contact_obj.attribute22;
257     px_org_contact_rec.attribute23           := p_org_contact_obj.attribute23;
258     px_org_contact_rec.attribute24           := p_org_contact_obj.attribute24;
259     IF(p_create_or_update = 'C') THEN
260       px_org_contact_rec.orig_system           := p_oc_os;
261       px_org_contact_rec.orig_system_reference := p_oc_osr;
262       px_org_contact_rec.created_by_module     := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
263     END IF;
264     px_org_contact_rec.party_rel_rec.subject_id          := p_person_id;
265     px_org_contact_rec.party_rel_rec.subject_type        := 'PERSON';
266     px_org_contact_rec.party_rel_rec.subject_table_name  := 'HZ_PARTIES';
267     px_org_contact_rec.party_rel_rec.object_id           := p_related_org_id;
268     px_org_contact_rec.party_rel_rec.object_type         := 'ORGANIZATION';
269     px_org_contact_rec.party_rel_rec.object_table_name   := 'HZ_PARTIES';
270     px_org_contact_rec.party_rel_rec.relationship_code   := p_org_contact_obj.relationship_code;
271     px_org_contact_rec.party_rel_rec.relationship_type   := p_org_contact_obj.relationship_type;
272     px_org_contact_rec.party_rel_rec.comments            := p_org_contact_obj.relationship_comments;
273     px_org_contact_rec.party_rel_rec.start_date          := p_org_contact_obj.start_date;
274     px_org_contact_rec.party_rel_rec.end_date            := p_org_contact_obj.end_date;
275     px_org_contact_rec.party_rel_rec.status              := p_org_contact_obj.status;
276     IF(p_create_or_update = 'C') THEN
277       px_org_contact_rec.party_rel_rec.created_by_module   := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
278     END IF;
279   END assign_org_contact_rec;
280 
281   -- PROCEDURE do_create_org_contact_bo
282   --
283   -- DESCRIPTION
284   --     Creates org contact business object.
285   PROCEDURE do_create_org_contact_bo(
286     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
287     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
288     p_org_contact_obj     IN OUT NOCOPY HZ_ORG_CONTACT_BO,
289     p_created_by_module   IN            VARCHAR2,
290     p_obj_source          IN            VARCHAR2 := null,
291     x_return_status       OUT NOCOPY    VARCHAR2,
292     x_msg_count           OUT NOCOPY    NUMBER,
293     x_msg_data            OUT NOCOPY    VARCHAR2,
294     x_org_contact_id      OUT NOCOPY    NUMBER,
295     x_org_contact_os      OUT NOCOPY    VARCHAR2,
296     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
297     px_parent_org_id      IN OUT NOCOPY NUMBER,
298     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
299     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
300   ) IS
301     l_debug_prefix             VARCHAR2(30);
302     l_org_contact_rec          HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE;
303     l_org_contact_role_rec     HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_ROLE_REC_TYPE;
304     l_party_rel_id             NUMBER;
305     l_party_id                 NUMBER;         -- party_id of the relationship for org contact
306     l_party_os                 VARCHAR2(30);
307     l_party_osr                VARCHAR2(255);
308     l_party_number             VARCHAR2(30);
309     l_per_party_id             NUMBER;         -- party_id of the person when create org contact
310     l_per_party_os             VARCHAR2(30);
311     l_per_party_osr            VARCHAR2(255);
312     l_per_party_num            VARCHAR2(30);
313     l_parent_os                VARCHAR2(30);
314     l_valid_obj                BOOLEAN;
315     l_person_rec               HZ_PARTY_V2PUB.PERSON_REC_TYPE;
316     l_profile_id               NUMBER;
317     l_valid_per                VARCHAR2(1);
318     l_bus_object               HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
319     l_errorcode                NUMBER;
320     l_cbm                      VARCHAR2(30);
321     l_edi_objs                 HZ_EDI_CP_BO_TBL;
322     l_eft_objs                 HZ_EFT_CP_BO_TBL;
323 
324     CURSOR get_per_id(l_os VARCHAR2, l_osr VARCHAR2) IS
325     SELECT per.party_id
326     FROM HZ_PARTIES per, HZ_ORIG_SYS_REFERENCES ref
327     WHERE ref.owner_table_id = per.party_id
328     AND ref.owner_table_name = 'HZ_PARTIES'
329     AND ref.orig_system = l_os
330     AND ref.orig_system_reference = l_osr
331     AND ref.status = 'A'
332     AND rownum = 1;
333 
334     CURSOR validate_per_id(l_per_id NUMBER) IS
335     SELECT 'X'
336     FROM HZ_PARTIES
337     WHERE party_id = l_per_id
338     AND party_type = 'PERSON'
339     AND status in ('A','I');
340   BEGIN
341     -- Standard start of API savepoint
342     SAVEPOINT do_create_org_contact_bo_pub;
343 
344     -- initialize API return status to success.
345     x_return_status := FND_API.G_RET_STS_SUCCESS;
346 
347     -- Initialize message list if p_init_msg_list is set to TRUE.
348     IF FND_API.to_Boolean(p_init_msg_list) THEN
349       FND_MSG_PUB.initialize;
350     END IF;
351 
352     -- initialize Global variable
353     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
354     IF(p_created_by_module IS NULL) THEN
355       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
356     ELSE
357       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
358     END IF;
359 
360     -- Debug info.
361     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
362         hz_utility_v2pub.debug(p_message=>'do_create_org_contact_bo(+)',
363                                p_prefix=>l_debug_prefix,
364                                p_msg_level=>fnd_log.level_procedure);
365     END IF;
366 
367     -- Base on p_validate_bo_flag check completeness of business object
368     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
369       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
370         p_bus_object_code         => 'ORG_CONTACT',
371         x_bus_object              => l_bus_object
372       );
373       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_oc_bo_comp(
374                        p_oc_objs    => HZ_ORG_CONTACT_BO_TBL(p_org_contact_obj),
375                        p_bus_object => l_bus_object
376                      );
377       IF NOT(l_valid_obj) THEN
378         RAISE fnd_api.g_exc_error;
379       END IF;
380     END IF;
381 
382     -- check pass in parent_id and parent_os+osr
383     -- parent of org contact is always ORGANIZATION
384     hz_registry_validate_bo_pvt.validate_parent_id(
385       px_parent_id      => px_parent_org_id,
386       px_parent_os      => px_parent_org_os,
387       px_parent_osr     => px_parent_org_osr,
388       p_parent_obj_type => 'ORG',
389       x_return_status   => x_return_status,
390       x_msg_count       => x_msg_count,
391       x_msg_data        => x_msg_data);
392 
393     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
394       RAISE FND_API.G_EXC_ERROR;
395     END IF;
396 
397     x_org_contact_id := p_org_contact_obj.org_contact_id;
398     x_org_contact_os := p_org_contact_obj.orig_system;
399     x_org_contact_osr := p_org_contact_obj.orig_system_reference;
400 
401     -- check if pass in org_contact_id and os+osr
402     hz_registry_validate_bo_pvt.validate_ssm_id(
403       px_id              => x_org_contact_id,
404       px_os              => x_org_contact_os,
405       px_osr             => x_org_contact_osr,
406       p_obj_type         => 'HZ_ORG_CONTACTS',
407       p_create_or_update => 'C',
408       x_return_status    => x_return_status,
409       x_msg_count        => x_msg_count,
410       x_msg_data         => x_msg_data);
411 
412     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
413       RAISE FND_API.G_EXC_ERROR;
414     END IF;
415 
416     IF(p_org_contact_obj.person_profile_obj IS NULL) THEN
417       fnd_message.set_name('AR', 'HZ_API_MISSING_MANDATORY_ENT');
418       fnd_message.set_token('ENTITY' ,'PERSON_CONTACT');
419       fnd_msg_pub.add;
420       RAISE FND_API.G_EXC_ERROR;
421     END IF;
422 
423     l_per_party_id := p_org_contact_obj.person_profile_obj.person_id;
424     l_per_party_os := p_org_contact_obj.person_profile_obj.orig_system;
425     l_per_party_osr := p_org_contact_obj.person_profile_obj.orig_system_reference;
426 
427     IF(l_per_party_id IS NULL) THEN
428       OPEN get_per_id(l_per_party_os, l_per_party_osr);
429       FETCH get_per_id INTO l_per_party_id;
430       CLOSE get_per_id;
431     ELSE
432       OPEN validate_per_id(l_per_party_id);
433       FETCH validate_per_id INTO l_valid_per;
434       CLOSE validate_per_id;
435       IF(l_valid_per IS NULL) THEN
436         FND_MESSAGE.SET_NAME('AR','HZ_API_CANNOT_PASS_PK');
437         FND_MSG_PUB.ADD;
438         RAISE FND_API.G_EXC_ERROR;
439       END IF;
440     END IF;
441 
442     -- IF l_per_party_id does not exist, can create person
443     -- IF l_per_party_id exist, use per_party_id when create org contact
444     IF(l_per_party_id IS NULL) THEN
445       ------------------------
446       -- Call person bo_pub api
447       ------------------------
448       assign_person_profile_rec(
449         p_person_obj         => p_org_contact_obj.person_profile_obj,
450         p_person_id          => l_per_party_id,
451         p_person_os          => l_per_party_os,
452         p_person_osr         => l_per_party_osr,
453         px_person_rec        => l_person_rec
454       );
455 
456       HZ_PARTY_V2PUB.create_person(
457         p_person_rec                => l_person_rec,
458         x_party_id                  => l_per_party_id,
459         x_party_number              => l_per_party_num,
460         x_profile_id                => l_profile_id,
461         x_return_status             => x_return_status,
462         x_msg_count                 => x_msg_count,
463         x_msg_data                  => x_msg_data
464       );
465 
466       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
467         RAISE FND_API.G_EXC_ERROR;
468       END IF;
469 
470       -- assign person_id
471       p_org_contact_obj.person_profile_obj.person_id := l_per_party_id;
472       --------------------------
473       -- Create Person Ext Attrs
474       --------------------------
475       IF((p_org_contact_obj.person_profile_obj.ext_attributes_objs IS NOT NULL) AND
476          (p_org_contact_obj.person_profile_obj.ext_attributes_objs.COUNT > 0)) THEN
477         HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
478           p_ext_attr_objs             => p_org_contact_obj.person_profile_obj.ext_attributes_objs,
479           p_parent_obj_id             => l_per_party_id,
480           p_parent_obj_type           => 'PERSON',
481           p_create_or_update          => 'C',
482           x_return_status             => x_return_status,
483           x_errorcode                 => l_errorcode,
484           x_msg_count                 => x_msg_count,
485           x_msg_data                  => x_msg_data
486         );
487 
488         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
489           RAISE FND_API.G_EXC_ERROR;
490         END IF;
491       END IF;
492     END IF;
493 
494     ----------------------------
495     -- Assign org contact record
496     ----------------------------
497     assign_org_contact_rec(
498       p_org_contact_obj           => p_org_contact_obj,
499       p_person_id                 => l_per_party_id,
500       p_related_org_id            => px_parent_org_id,
501       p_oc_id                     => x_org_contact_id,
502       p_oc_os                     => x_org_contact_os,
503       p_oc_osr                    => x_org_contact_osr,
504       px_org_contact_rec          => l_org_contact_rec
505     );
506 
507     HZ_PARTY_CONTACT_V2PUB.create_org_contact(
508       p_org_contact_rec           => l_org_contact_rec,
509       x_org_contact_id            => x_org_contact_id,
510       x_party_rel_id              => l_party_rel_id,
511       x_party_id                  => l_party_id,
512       x_party_number              => l_party_number,
513       x_return_status             => x_return_status,
514       x_msg_count                 => x_msg_count,
515       x_msg_data                  => x_msg_data
516     );
517 
518     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
519       RAISE FND_API.G_EXC_ERROR;
520     END IF;
521 
522     -- assign org_contact_id
523     p_org_contact_obj.org_contact_id := x_org_contact_id;
524     ---------------------------
525     -- Create org contact roles
526     ---------------------------
527     IF((p_org_contact_obj.org_contact_role_objs IS NOT NULL) AND
528        (p_org_contact_obj.org_contact_role_objs.COUNT > 0)) THEN
529       HZ_ORG_CONTACT_BO_PVT.create_org_contact_roles(
530         p_ocr_objs           => p_org_contact_obj.org_contact_role_objs,
531         p_oc_id              => x_org_contact_id,
532         x_return_status      => x_return_status,
533         x_msg_count          => x_msg_count,
534         x_msg_data           => x_msg_data
535       );
536 
537       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
538         RAISE FND_API.G_EXC_ERROR;
539       END IF;
540     END IF;
541 
542     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
543 
544     ---------------------
545     -- Create party sites
546     ---------------------
547     IF((p_org_contact_obj.party_site_objs IS NOT NULL) AND
548        (p_org_contact_obj.party_site_objs.COUNT > 0)) THEN
549       HZ_PARTY_SITE_BO_PVT.save_party_sites(
550         p_ps_objs            => p_org_contact_obj.party_site_objs,
551         p_create_update_flag => 'C',
552         p_obj_source         => p_obj_source,
553         x_return_status      => x_return_status,
554         x_msg_count          => x_msg_count,
555         x_msg_data           => x_msg_data,
556         p_parent_id          => l_party_id,
557         p_parent_os          => l_party_os,
558         p_parent_osr         => l_party_osr,
559         p_parent_obj_type    => 'ORG_CONTACT'
560       );
561 
562       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
563         RAISE FND_API.G_EXC_ERROR;
564       END IF;
565     END IF;
566 
567     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
568 
569     ----------------------------------------------------------
570     -- Create all contact points - phone, telex, email and web
571     ----------------------------------------------------------
572     IF(((p_org_contact_obj.phone_objs IS NOT NULL) AND (p_org_contact_obj.phone_objs.COUNT > 0)) OR
573        ((p_org_contact_obj.telex_objs IS NOT NULL) AND (p_org_contact_obj.telex_objs.COUNT > 0)) OR
574        ((p_org_contact_obj.email_objs IS NOT NULL) AND (p_org_contact_obj.email_objs.COUNT > 0)) OR
575        ((p_org_contact_obj.web_objs IS NOT NULL) AND (p_org_contact_obj.web_objs.COUNT > 0)) OR
576        ((p_org_contact_obj.sms_objs IS NOT NULL) AND (p_org_contact_obj.sms_objs.COUNT > 0))) THEN
577       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
578         p_phone_objs         => p_org_contact_obj.phone_objs,
579         p_telex_objs         => p_org_contact_obj.telex_objs,
580         p_email_objs         => p_org_contact_obj.email_objs,
581         p_web_objs           => p_org_contact_obj.web_objs,
582         p_edi_objs           => l_edi_objs,
583         p_eft_objs           => l_eft_objs,
584         p_sms_objs           => p_org_contact_obj.sms_objs,
585         p_owner_table_id     => l_party_id,
586         p_owner_table_os     => l_party_os,
587         p_owner_table_osr    => l_party_osr,
588         p_parent_obj_type    => 'ORG_CONTACT',
589         p_create_update_flag => 'C',
590         p_obj_source         => p_obj_source,
591         x_return_status      => x_return_status,
592         x_msg_count          => x_msg_count,
593         x_msg_data           => x_msg_data
594       );
595 
596       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
597         RAISE FND_API.G_EXC_ERROR;
598       END IF;
599     END IF;
600 
601     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
602 
603     ----------------------------
604     -- Create contact preference
605     ----------------------------
606     IF((p_org_contact_obj.contact_pref_objs IS NOT NULL) AND
607        (p_org_contact_obj.contact_pref_objs.COUNT > 0)) THEN
608       HZ_CONTACT_PREFERENCE_BO_PVT.create_contact_preferences(
609         p_cp_pref_objs           => p_org_contact_obj.contact_pref_objs,
610         p_contact_level_table_id => l_party_id,
611         p_contact_level_table    => 'HZ_PARTIES',
612         x_return_status          => x_return_status,
613         x_msg_count              => x_msg_count,
614         x_msg_data               => x_msg_data
615       );
616 
617       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
618         RAISE FND_API.G_EXC_ERROR;
619       END IF;
620     END IF;
621 
622     -- reset Global variable
623     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
624     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
625 
626     -- Debug info.
627     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
628          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
629                                p_msg_data=>x_msg_data,
630                                p_msg_type=>'WARNING',
631                                p_msg_level=>fnd_log.level_exception);
632     END IF;
633     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
634         hz_utility_v2pub.debug(p_message=>'do_create_org_contact_bo(-)',
635                                p_prefix=>l_debug_prefix,
636                                p_msg_level=>fnd_log.level_procedure);
637     END IF;
638 
639   EXCEPTION
640     WHEN fnd_api.g_exc_error THEN
641       ROLLBACK TO do_create_org_contact_bo_pub;
642 
643       -- reset Global variable
644       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
645       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
646 
647       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
648       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
649       FND_MSG_PUB.ADD;
650 
651       x_return_status := fnd_api.g_ret_sts_error;
652 
653       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
654                                 p_count => x_msg_count,
655                                 p_data  => x_msg_data);
656 
657       -- Debug info.
658       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
659         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
660                                p_msg_data=>x_msg_data,
661                                p_msg_type=>'ERROR',
662                                p_msg_level=>fnd_log.level_error);
663       END IF;
664       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
665         hz_utility_v2pub.debug(p_message=>'do_create_org_contact_bo(-)',
666                                p_prefix=>l_debug_prefix,
667                                p_msg_level=>fnd_log.level_procedure);
668       END IF;
669 
670     WHEN fnd_api.g_exc_unexpected_error THEN
671       ROLLBACK TO do_create_org_contact_bo_pub;
672 
673       -- reset Global variable
674       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
675       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
676 
677       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
678       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
679       FND_MSG_PUB.ADD;
680 
681       x_return_status := fnd_api.g_ret_sts_unexp_error;
682 
683       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
684                                 p_count => x_msg_count,
685                                 p_data  => x_msg_data);
686 
687       -- Debug info.
688       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
689         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
690                                p_msg_data=>x_msg_data,
691                                p_msg_type=>'UNEXPECTED ERROR',
692                                p_msg_level=>fnd_log.level_error);
693       END IF;
694       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
695         hz_utility_v2pub.debug(p_message=>'do_create_org_contact_bo(-)',
696                                p_prefix=>l_debug_prefix,
697                                p_msg_level=>fnd_log.level_procedure);
698       END IF;
699 
700     WHEN OTHERS THEN
701       ROLLBACK TO do_create_org_contact_bo_pub;
702 
703       -- reset Global variable
704       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
705       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
706 
707       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
708       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
709       FND_MSG_PUB.ADD;
710 
711       x_return_status := fnd_api.g_ret_sts_unexp_error;
712 
713       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
714       fnd_message.set_token('ERROR' ,SQLERRM);
715       fnd_msg_pub.add;
716 
717       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
718                                 p_count => x_msg_count,
719                                 p_data  => x_msg_data);
720 
721       -- Debug info.
722       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
723         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
724                                p_msg_data=>x_msg_data,
725                                p_msg_type=>'SQL ERROR',
726                                p_msg_level=>fnd_log.level_error);
727       END IF;
728       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
729         hz_utility_v2pub.debug(p_message=>'do_create_org_contact_bo(-)',
730                                p_prefix=>l_debug_prefix,
731                                p_msg_level=>fnd_log.level_procedure);
732       END IF;
733   END do_create_org_contact_bo;
734 
735   PROCEDURE create_org_contact_bo(
736     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
737     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
738     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
739     p_created_by_module   IN            VARCHAR2,
740     x_return_status       OUT NOCOPY    VARCHAR2,
741     x_msg_count           OUT NOCOPY    NUMBER,
742     x_msg_data            OUT NOCOPY    VARCHAR2,
743     x_org_contact_id      OUT NOCOPY    NUMBER,
744     x_org_contact_os      OUT NOCOPY    VARCHAR2,
745     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
746     px_parent_org_id      IN OUT NOCOPY NUMBER,
747     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
748     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
749   ) IS
750     l_oc_obj              HZ_ORG_CONTACT_BO;
751   BEGIN
752     l_oc_obj := p_org_contact_obj;
753     do_create_org_contact_bo(
754       p_init_msg_list       => p_init_msg_list,
755       p_validate_bo_flag    => p_validate_bo_flag,
756       p_org_contact_obj     => l_oc_obj,
757       p_created_by_module   => p_created_by_module,
758       p_obj_source          => null,
759       x_return_status       => x_return_status,
760       x_msg_count           => x_msg_count,
761       x_msg_data            => x_msg_data,
762       x_org_contact_id      => x_org_contact_id,
763       x_org_contact_os      => x_org_contact_os,
764       x_org_contact_osr     => x_org_contact_osr,
765       px_parent_org_id      => px_parent_org_id,
766       px_parent_org_os      => px_parent_org_os,
767       px_parent_org_osr     => px_parent_org_osr
768     );
769   END create_org_contact_bo;
770 
771   PROCEDURE create_org_contact_bo(
772     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
773     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
774     p_created_by_module   IN            VARCHAR2,
775     p_obj_source          IN            VARCHAR2 := null,
776     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
777     x_return_status       OUT NOCOPY    VARCHAR2,
778     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
779     x_return_obj          OUT NOCOPY    HZ_ORG_CONTACT_BO,
780     x_org_contact_id      OUT NOCOPY    NUMBER,
781     x_org_contact_os      OUT NOCOPY    VARCHAR2,
782     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
783     px_parent_org_id      IN OUT NOCOPY NUMBER,
784     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
785     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
786   ) IS
787     l_msg_data            VARCHAR2(2000);
788     l_msg_count           NUMBER;
789     l_oc_obj              HZ_ORG_CONTACT_BO;
790   BEGIN
791     l_oc_obj := p_org_contact_obj;
792     do_create_org_contact_bo(
793       p_init_msg_list       => fnd_api.g_true,
794       p_validate_bo_flag    => p_validate_bo_flag,
795       p_org_contact_obj     => l_oc_obj,
796       p_created_by_module   => p_created_by_module,
797       p_obj_source          => p_obj_source,
798       x_return_status       => x_return_status,
799       x_msg_count           => l_msg_count,
800       x_msg_data            => l_msg_data,
801       x_org_contact_id      => x_org_contact_id,
802       x_org_contact_os      => x_org_contact_os,
803       x_org_contact_osr     => x_org_contact_osr,
804       px_parent_org_id      => px_parent_org_id,
805       px_parent_org_os      => px_parent_org_os,
806       px_parent_org_osr     => px_parent_org_osr
807     );
808     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
809                     x_return_status   => x_return_status,
810                     x_msg_count       => l_msg_count,
811                     x_msg_data        => l_msg_data);
812     IF FND_API.to_Boolean(p_return_obj_flag) THEN
813       x_return_obj := l_oc_obj;
814     END IF;
815   END create_org_contact_bo;
816 
817   -- PROCEDURE update_org_contact_bo
818   --
819   -- DESCRIPTION
820   --     Update org contact business object.
821   PROCEDURE update_org_contact_bo(
822     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
823     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
824     p_created_by_module   IN            VARCHAR2,
825     x_return_status       OUT NOCOPY    VARCHAR2,
826     x_msg_count           OUT NOCOPY    NUMBER,
827     x_msg_data            OUT NOCOPY    VARCHAR2,
828     x_org_contact_id      OUT NOCOPY    NUMBER,
829     x_org_contact_os      OUT NOCOPY    VARCHAR2,
830     x_org_contact_osr     OUT NOCOPY    VARCHAR2
831   )IS
832     l_oc_obj              HZ_ORG_CONTACT_BO;
833   BEGIN
834     l_oc_obj := p_org_contact_obj;
835     do_update_org_contact_bo(
836       p_init_msg_list       => p_init_msg_list,
837       p_org_contact_obj     => l_oc_obj,
838       p_created_by_module   => p_created_by_module,
839       p_obj_source          => null,
840       x_return_status       => x_return_status,
841       x_msg_count           => x_msg_count,
842       x_msg_data            => x_msg_data,
843       x_org_contact_id      => x_org_contact_id,
844       x_org_contact_os      => x_org_contact_os,
845       x_org_contact_osr     => x_org_contact_osr,
846       p_parent_os           => NULL
847     );
848   END update_org_contact_bo;
849 
850   PROCEDURE update_org_contact_bo(
851     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
852     p_created_by_module   IN            VARCHAR2,
853     p_obj_source          IN            VARCHAR2 := null,
854     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
855     x_return_status       OUT NOCOPY    VARCHAR2,
856     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
857     x_return_obj          OUT NOCOPY    HZ_ORG_CONTACT_BO,
858     x_org_contact_id      OUT NOCOPY    NUMBER,
859     x_org_contact_os      OUT NOCOPY    VARCHAR2,
860     x_org_contact_osr     OUT NOCOPY    VARCHAR2
861   )IS
862     l_msg_data            VARCHAR2(2000);
863     l_msg_count           NUMBER;
864     l_oc_obj              HZ_ORG_CONTACT_BO;
865   BEGIN
866     l_oc_obj := p_org_contact_obj;
867     do_update_org_contact_bo(
868       p_init_msg_list       => fnd_api.g_true,
869       p_org_contact_obj     => l_oc_obj,
870       p_created_by_module   => p_created_by_module,
871       x_return_status       => x_return_status,
872       x_msg_count           => l_msg_count,
873       x_msg_data            => l_msg_data,
874       x_org_contact_id      => x_org_contact_id,
875       x_org_contact_os      => x_org_contact_os,
876       x_org_contact_osr     => x_org_contact_osr,
877       p_parent_os           => NULL
878     );
879     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
880                     x_return_status   => x_return_status,
881                     x_msg_count       => l_msg_count,
882                     x_msg_data        => l_msg_data);
883     IF FND_API.to_Boolean(p_return_obj_flag) THEN
884       x_return_obj := l_oc_obj;
885     END IF;
886   END update_org_contact_bo;
887 
888   -- PRIVATE PROCEDURE do_update_org_contact_bo
889   --
890   -- DESCRIPTION
891   --     Update org contact business object.
892   PROCEDURE do_update_org_contact_bo(
893     p_init_msg_list       IN         VARCHAR2 := fnd_api.g_false,
894     p_org_contact_obj     IN OUT NOCOPY HZ_ORG_CONTACT_BO,
895     p_created_by_module   IN         VARCHAR2,
896     p_obj_source          IN         VARCHAR2 := null,
897     x_return_status       OUT NOCOPY VARCHAR2,
898     x_msg_count           OUT NOCOPY NUMBER,
899     x_msg_data            OUT NOCOPY VARCHAR2,
900     x_org_contact_id      OUT NOCOPY NUMBER,
901     x_org_contact_os      OUT NOCOPY VARCHAR2,
902     x_org_contact_osr     OUT NOCOPY VARCHAR2,
903     p_parent_os           IN         VARCHAR2
904   )IS
905     l_debug_prefix             VARCHAR2(30);
906     l_org_contact_rec          HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE;
907     l_oc_id                    NUMBER;
908     l_oc_ovn                   NUMBER;
909     l_rel_ovn                  NUMBER;
910     l_pty_ovn                  NUMBER;
911     l_create_update_flag       VARCHAR2(1);
912     l_person_id                NUMBER;
913     l_person_os                VARCHAR2(30);
914     l_person_osr               VARCHAR2(255);
915     l_oc_party_id              NUMBER;
916     l_oc_party_os              VARCHAR2(30);
917     l_oc_party_osr             VARCHAR2(255);
918     l_parent_os                VARCHAR2(30);
919     l_person_rec               HZ_PARTY_V2PUB.PERSON_REC_TYPE;
920     l_profile_id               NUMBER;
921     l_per_ovn                  NUMBER;
922     l_related_org_id           NUMBER;
923     l_errorcode                NUMBER;
924     l_cbm                      VARCHAR2(30);
925     l_edi_objs                 HZ_EDI_CP_BO_TBL;
926     l_eft_objs                 HZ_EFT_CP_BO_TBL;
927 
928     CURSOR get_ovn(l_oc_id  NUMBER) IS
929     SELECT oc.object_version_number, rel.object_version_number, p.object_version_number,
930            p.party_id, rel.object_id, rel.subject_id
931     FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS rel, HZ_PARTIES p
932     WHERE oc.org_contact_id = l_oc_id
933     AND oc.party_relationship_id = rel.relationship_id
934     AND rel.party_id = p.party_id
935     AND rel.subject_type = 'PERSON'
936     AND rel.object_type = 'ORGANIZATION'
937     AND rel.status in ('A','I')
938     AND p.status in ('A','I');
939 
940     CURSOR get_per_ovn(l_per_id NUMBER) IS
941     SELECT object_version_number
942     FROM HZ_PARTIES
943     WHERE party_id = l_per_id
944     AND status in ('A','I');
945 
946   BEGIN
947     -- Standard start of API savepoint
948     SAVEPOINT do_update_org_contact_bo_pub;
949 
950     -- initialize API return status to success.
951     x_return_status := FND_API.G_RET_STS_SUCCESS;
952 
953     -- Initialize message list if p_init_msg_list is set to TRUE.
954     IF FND_API.to_Boolean(p_init_msg_list) THEN
955       FND_MSG_PUB.initialize;
956     END IF;
957 
958     -- initialize Global variable
959     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
960     IF(p_created_by_module IS NULL) THEN
961       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
962     ELSE
963       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
964     END IF;
965 
966     -- Debug info.
967     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
968         hz_utility_v2pub.debug(p_message=>'do_update_org_contact_bo(+)',
969                                p_prefix=>l_debug_prefix,
970                                p_msg_level=>fnd_log.level_procedure);
971     END IF;
972 
973     x_org_contact_id := p_org_contact_obj.org_contact_id;
974     x_org_contact_os := p_org_contact_obj.orig_system;
975     x_org_contact_osr := p_org_contact_obj.orig_system_reference;
976 
977     -- check if pass in org_contact_id and ssm is
978     -- valid for update
979     hz_registry_validate_bo_pvt.validate_ssm_id(
980       px_id              => x_org_contact_id,
981       px_os              => x_org_contact_os,
982       px_osr             => x_org_contact_osr,
983       p_obj_type         => 'HZ_ORG_CONTACTS',
984       p_create_or_update => 'U',
985       x_return_status    => x_return_status,
986       x_msg_count        => x_msg_count,
987       x_msg_data         => x_msg_data);
988 
989     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
990       RAISE FND_API.G_EXC_ERROR;
991     END IF;
992 
993     OPEN get_ovn(x_org_contact_id);
994     FETCH get_ovn INTO l_oc_ovn, l_rel_ovn, l_pty_ovn, l_oc_party_id, l_related_org_id, l_person_id;
995     CLOSE get_ovn;
996 
997     -------------
998     -- For Person
999     -------------
1000     IF(p_org_contact_obj.person_profile_obj IS NOT NULL) THEN
1001       -- check if pass in person_id and ssm is valid for update
1002       --l_person_id := p_org_contact_obj.person_profile_obj.person_id;
1003       l_person_os := p_org_contact_obj.person_profile_obj.orig_system;
1004       l_person_osr := p_org_contact_obj.person_profile_obj.orig_system_reference;
1005 
1006       IF(l_person_id IS NOT NULL OR
1007         (l_person_os IS NOT NULL AND l_person_osr IS NOT NULL)) THEN
1008         hz_registry_validate_bo_pvt.validate_ssm_id(
1009           px_id              => l_person_id,
1010           px_os              => l_person_os,
1011           px_osr             => l_person_osr,
1012           p_obj_type         => 'PERSON',
1013           p_create_or_update => 'U',
1014           x_return_status    => x_return_status,
1015           x_msg_count        => x_msg_count,
1016           x_msg_data         => x_msg_data);
1017 
1018         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1019           RAISE FND_API.G_EXC_ERROR;
1020         END IF;
1021 
1022         -- call v2api to update
1023         assign_person_profile_rec(
1024           p_person_obj         => p_org_contact_obj.person_profile_obj,
1025           p_person_id          => l_person_id,
1026           p_person_os          => l_person_os,
1027           p_person_osr         => l_person_osr,
1028           p_create_or_update   => 'U',
1029           px_person_rec        => l_person_rec
1030         );
1031 
1032         OPEN get_per_ovn(l_person_id);
1033         FETCH get_per_ovn INTO l_per_ovn;
1034         CLOSE get_per_ovn;
1035 
1036         HZ_PARTY_V2PUB.update_person(
1037           p_person_rec                => l_person_rec,
1038           p_party_object_version_number  => l_per_ovn,
1039           x_profile_id                => l_profile_id,
1040           x_return_status             => x_return_status,
1041           x_msg_count                 => x_msg_count,
1042           x_msg_data                  => x_msg_data
1043         );
1044 
1045         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1046           RAISE FND_API.G_EXC_ERROR;
1047         END IF;
1048 
1049         -----------------------
1050         -- For Person Ext Attrs
1051         -----------------------
1052         IF((p_org_contact_obj.person_profile_obj.ext_attributes_objs IS NOT NULL) AND
1053            (p_org_contact_obj.person_profile_obj.ext_attributes_objs.COUNT > 0)) THEN
1054           HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
1055             p_ext_attr_objs             => p_org_contact_obj.person_profile_obj.ext_attributes_objs,
1056             p_parent_obj_id             => l_person_id,
1057             p_parent_obj_type           => 'PERSON',
1058             p_create_or_update          => 'U',
1059             x_return_status             => x_return_status,
1060             x_errorcode                 => l_errorcode,
1061             x_msg_count                 => x_msg_count,
1062             x_msg_data                  => x_msg_data
1063           );
1064 
1065           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1066             RAISE FND_API.G_EXC_ERROR;
1067           END IF;
1068         END IF;
1069       END IF;
1070     END IF;
1071 
1072     -------------------------
1073     -- For Update Org Contact
1074     -------------------------
1075     -- Assign org contact record
1076     assign_org_contact_rec(
1077       p_org_contact_obj   => p_org_contact_obj,
1078       p_person_id         => l_person_id,
1079       p_related_org_id    => l_related_org_id,
1080       p_oc_id             => x_org_contact_id,
1081       p_oc_os             => x_org_contact_os,
1082       p_oc_osr            => x_org_contact_osr,
1083       p_create_or_update  => 'U',
1084       px_org_contact_rec  => l_org_contact_rec
1085     );
1086 
1087     HZ_PARTY_CONTACT_V2PUB.update_org_contact(
1088       p_org_contact_rec             => l_org_contact_rec,
1089       p_cont_object_version_number  => l_oc_ovn,
1090       p_rel_object_version_number   => l_rel_ovn,
1091       p_party_object_version_number => l_pty_ovn,
1092       x_return_status               => x_return_status,
1093       x_msg_count                   => x_msg_count,
1094       x_msg_data                    => x_msg_data
1095     );
1096 
1097     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1098       RAISE FND_API.G_EXC_ERROR;
1099     END IF;
1100 
1101     -- assign org_contact_id
1102     p_org_contact_obj.org_contact_id := x_org_contact_id;
1103     ------------------------
1104     -- For Org Contact Roles
1105     ------------------------
1106     IF((p_org_contact_obj.org_contact_role_objs IS NOT NULL) AND
1107        (p_org_contact_obj.org_contact_role_objs.COUNT > 0)) THEN
1108       HZ_ORG_CONTACT_BO_PVT.save_org_contact_roles(
1109         p_ocr_objs           => p_org_contact_obj.org_contact_role_objs,
1110         p_oc_id              => x_org_contact_id,
1111         x_return_status      => x_return_status,
1112         x_msg_count          => x_msg_count,
1113         x_msg_data           => x_msg_data
1114       );
1115 
1116       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1117         RAISE FND_API.G_EXC_ERROR;
1118       END IF;
1119     END IF;
1120 
1121     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
1122 
1123     ---------------------
1124     -- Update party sites
1125     ---------------------
1126     IF((p_org_contact_obj.party_site_objs IS NOT NULL) AND
1127        (p_org_contact_obj.party_site_objs.COUNT > 0)) THEN
1128       HZ_PARTY_SITE_BO_PVT.save_party_sites(
1129         p_ps_objs            => p_org_contact_obj.party_site_objs,
1130         p_create_update_flag => 'U',
1131         p_obj_source         => p_obj_source,
1132         x_return_status      => x_return_status,
1133         x_msg_count          => x_msg_count,
1134         x_msg_data           => x_msg_data,
1135         p_parent_id          => l_oc_party_id,
1136         p_parent_os          => NULL,
1137         p_parent_osr         => NULL,
1138         p_parent_obj_type    => 'ORG_CONTACT'
1139       );
1140 
1141       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1142         RAISE FND_API.G_EXC_ERROR;
1143       END IF;
1144     END IF;
1145 
1146     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1147 
1148     -- Owner table id of contact point should be the party of the relationship for org contact
1149     -- Therefore, should pass in party_id as p_owner_table_id
1150     -- Same situation apply to p_owner_table_os, p_owner_table_osr
1151     ---------------------
1152     -- For Contact Points
1153     ---------------------
1154     IF(((p_org_contact_obj.phone_objs IS NOT NULL) AND (p_org_contact_obj.phone_objs.COUNT > 0)) OR
1155        ((p_org_contact_obj.telex_objs IS NOT NULL) AND (p_org_contact_obj.telex_objs.COUNT > 0)) OR
1156        ((p_org_contact_obj.email_objs IS NOT NULL) AND (p_org_contact_obj.email_objs.COUNT > 0)) OR
1157        ((p_org_contact_obj.web_objs IS NOT NULL) AND (p_org_contact_obj.web_objs.COUNT > 0)) OR
1158        ((p_org_contact_obj.sms_objs IS NOT NULL) AND (p_org_contact_obj.sms_objs.COUNT > 0))) THEN
1159       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
1160         p_phone_objs         => p_org_contact_obj.phone_objs,
1161         p_telex_objs         => p_org_contact_obj.telex_objs,
1162         p_email_objs         => p_org_contact_obj.email_objs,
1163         p_web_objs           => p_org_contact_obj.web_objs,
1164         p_edi_objs           => l_edi_objs,
1165         p_eft_objs           => l_eft_objs,
1166         p_sms_objs           => p_org_contact_obj.sms_objs,
1167         p_owner_table_id     => l_oc_party_id,
1168         p_owner_table_os     => NULL,
1169         p_owner_table_osr    => NULL,
1170         p_parent_obj_type    => 'ORG_CONTACT',
1171         p_create_update_flag => 'U',
1172         p_obj_source         => p_obj_source,
1173         x_return_status      => x_return_status,
1174         x_msg_count          => x_msg_count,
1175         x_msg_data           => x_msg_data
1176       );
1177 
1178       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1179         RAISE FND_API.G_EXC_ERROR;
1180       END IF;
1181     END IF;
1182 
1183     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1184 
1185     -------------------------
1186     -- For Contact Preference
1187     -------------------------
1188     IF((p_org_contact_obj.contact_pref_objs IS NOT NULL) AND
1189        (p_org_contact_obj.contact_pref_objs.COUNT > 0)) THEN
1190       HZ_CONTACT_PREFERENCE_BO_PVT.save_contact_preferences(
1191         p_cp_pref_objs           => p_org_contact_obj.contact_pref_objs,
1192         p_contact_level_table_id => l_oc_party_id,
1193         p_contact_level_table    => 'HZ_PARTIES',
1194         x_return_status          => x_return_status,
1195         x_msg_count              => x_msg_count,
1196         x_msg_data               => x_msg_data
1197       );
1198 
1199       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1200         RAISE FND_API.G_EXC_ERROR;
1201       END IF;
1202     END IF;
1203 
1204     -- reset Global variable
1205     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1206     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1207 
1208     -- Debug info.
1209     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1210          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1211                                p_msg_data=>x_msg_data,
1212                                p_msg_type=>'WARNING',
1213                                p_msg_level=>fnd_log.level_exception);
1214     END IF;
1215     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1216         hz_utility_v2pub.debug(p_message=>'do_update_org_contact_bo(-)',
1217                                p_prefix=>l_debug_prefix,
1218                                p_msg_level=>fnd_log.level_procedure);
1219     END IF;
1220   EXCEPTION
1221     WHEN fnd_api.g_exc_error THEN
1222       ROLLBACK TO do_update_org_contact_bo_pub;
1223 
1224       -- reset Global variable
1225       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1226       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1227 
1228       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1229       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
1230       FND_MSG_PUB.ADD;
1231 
1232       x_return_status := fnd_api.g_ret_sts_error;
1233 
1234       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1235                                 p_count => x_msg_count,
1236                                 p_data  => x_msg_data);
1237 
1238       -- Debug info.
1239       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1240         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1241                                p_msg_data=>x_msg_data,
1242                                p_msg_type=>'ERROR',
1243                                p_msg_level=>fnd_log.level_error);
1244       END IF;
1245       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1246         hz_utility_v2pub.debug(p_message=>'do_update_org_contact_bo(-)',
1247                                p_prefix=>l_debug_prefix,
1248                                p_msg_level=>fnd_log.level_procedure);
1249       END IF;
1250 
1251     WHEN fnd_api.g_exc_unexpected_error THEN
1252       ROLLBACK TO do_update_org_contact_bo_pub;
1253 
1254       -- reset Global variable
1255       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1256       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1257 
1258       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1259       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
1260       FND_MSG_PUB.ADD;
1261 
1262       x_return_status := fnd_api.g_ret_sts_unexp_error;
1263 
1264       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1265                                 p_count => x_msg_count,
1266                                 p_data  => x_msg_data);
1267 
1268       -- Debug info.
1269       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1270         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1271                                p_msg_data=>x_msg_data,
1272                                p_msg_type=>'UNEXPECTED ERROR',
1273                                p_msg_level=>fnd_log.level_error);
1274       END IF;
1275       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1276         hz_utility_v2pub.debug(p_message=>'do_update_org_contact_bo(-)',
1277                                p_prefix=>l_debug_prefix,
1278                                p_msg_level=>fnd_log.level_procedure);
1279       END IF;
1280 
1281     WHEN OTHERS THEN
1282       ROLLBACK TO do_update_org_contact_bo_pub;
1283 
1284       -- reset Global variable
1285       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1286       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1287 
1288       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1289       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
1290       FND_MSG_PUB.ADD;
1291 
1292       x_return_status := fnd_api.g_ret_sts_unexp_error;
1293 
1294       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1295       fnd_message.set_token('ERROR' ,SQLERRM);
1296       fnd_msg_pub.add;
1297 
1298       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1299                                 p_count => x_msg_count,
1300                                 p_data  => x_msg_data);
1301 
1302       -- Debug info.
1303       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1304         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1305                                p_msg_data=>x_msg_data,
1306                                p_msg_type=>'SQL ERROR',
1307                                p_msg_level=>fnd_log.level_error);
1308       END IF;
1309       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1310         hz_utility_v2pub.debug(p_message=>'do_update_org_contact_bo(-)',
1311                                p_prefix=>l_debug_prefix,
1312                                p_msg_level=>fnd_log.level_procedure);
1313       END IF;
1314   END do_update_org_contact_bo;
1315 
1316   -- PROCEDURE do_save_org_contact_bo
1317   --
1318   -- DESCRIPTION
1319   --     Creates or update org contact business object.
1320   PROCEDURE do_save_org_contact_bo(
1321     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1322     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1323     p_org_contact_obj     IN OUT NOCOPY HZ_ORG_CONTACT_BO,
1324     p_created_by_module   IN            VARCHAR2,
1325     p_obj_source          IN         VARCHAR2 := null,
1326     x_return_status       OUT NOCOPY    VARCHAR2,
1327     x_msg_count           OUT NOCOPY    NUMBER,
1328     x_msg_data            OUT NOCOPY    VARCHAR2,
1329     x_org_contact_id      OUT NOCOPY    NUMBER,
1330     x_org_contact_os      OUT NOCOPY    VARCHAR2,
1331     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
1332     px_parent_org_id      IN OUT NOCOPY NUMBER,
1333     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
1334     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
1335   ) IS
1336     l_return_status            VARCHAR2(30);
1337     l_msg_count                NUMBER;
1338     l_msg_data                 VARCHAR2(2000);
1339     l_create_update_flag       VARCHAR2(1);
1340     l_debug_prefix             VARCHAR2(30);
1341   BEGIN
1342     -- initialize API return status to success.
1343     x_return_status := FND_API.G_RET_STS_SUCCESS;
1344 
1345     -- Initialize message list if p_init_msg_list is set to TRUE.
1346     IF FND_API.to_Boolean(p_init_msg_list) THEN
1347       FND_MSG_PUB.initialize;
1348     END IF;
1349 
1350     -- Debug info.
1351     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1352         hz_utility_v2pub.debug(p_message=>'do_save_org_contact_bo(+)',
1353                                p_prefix=>l_debug_prefix,
1354                                p_msg_level=>fnd_log.level_procedure);
1355     END IF;
1356 
1357     x_org_contact_id := p_org_contact_obj.org_contact_id;
1358     x_org_contact_os := p_org_contact_obj.orig_system;
1359     x_org_contact_osr := p_org_contact_obj.orig_system_reference;
1360 
1361     -- check root business object to determine that it should be
1362     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
1363     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
1364                               p_entity_id      => x_org_contact_id,
1365                               p_entity_os      => x_org_contact_os,
1366                               p_entity_osr     => x_org_contact_osr,
1367                               p_entity_type    => 'HZ_ORG_CONTACTS',
1368                               p_parent_id      => px_parent_org_id,
1369                               p_parent_obj_type => 'ORG'
1370                             );
1371 
1372     IF(l_create_update_flag = 'E') THEN
1373       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1374       FND_MESSAGE.SET_TOKEN('OBJECT', 'ORG_CONTACT');
1375       FND_MSG_PUB.ADD;
1376       RAISE FND_API.G_EXC_ERROR;
1377     END IF;
1378 
1379     IF(l_create_update_flag = 'C') THEN
1380       do_create_org_contact_bo(
1381         p_init_msg_list      => fnd_api.g_false,
1382         p_validate_bo_flag   => p_validate_bo_flag,
1383         p_org_contact_obj    => p_org_contact_obj,
1384         p_created_by_module  => p_created_by_module,
1385         p_obj_source         => p_obj_source,
1386         x_return_status      => x_return_status,
1387         x_msg_count          => x_msg_count,
1388         x_msg_data           => x_msg_data,
1389         x_org_contact_id     => x_org_contact_id,
1390         x_org_contact_os     => x_org_contact_os,
1391         x_org_contact_osr    => x_org_contact_osr,
1392         px_parent_org_id     => px_parent_org_id,
1393         px_parent_org_os     => px_parent_org_os,
1394         px_parent_org_osr    => px_parent_org_osr
1395       );
1396     ELSIF(l_create_update_flag = 'U') THEN
1397       do_update_org_contact_bo(
1398         p_init_msg_list      => fnd_api.g_false,
1399         p_org_contact_obj    => p_org_contact_obj,
1400         p_created_by_module  => p_created_by_module,
1401         p_obj_source         => p_obj_source,
1402         x_return_status      => x_return_status,
1403         x_msg_count          => x_msg_count,
1404         x_msg_data           => x_msg_data,
1405         x_org_contact_id     => x_org_contact_id,
1406         x_org_contact_os     => x_org_contact_os,
1407         x_org_contact_osr    => x_org_contact_osr,
1408         p_parent_os          => px_parent_org_os );
1409     ELSE
1410       RAISE FND_API.G_EXC_ERROR;
1411     END IF;
1412 
1413     -- Debug info.
1414     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1415          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1416                                p_msg_data=>x_msg_data,
1417                                p_msg_type=>'WARNING',
1418                                p_msg_level=>fnd_log.level_exception);
1419     END IF;
1420     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1421         hz_utility_v2pub.debug(p_message=>'do_save_org_contact_bo(-)',
1422                                p_prefix=>l_debug_prefix,
1423                                p_msg_level=>fnd_log.level_procedure);
1424     END IF;
1425 
1426   EXCEPTION
1427     WHEN fnd_api.g_exc_error THEN
1428       x_return_status := fnd_api.g_ret_sts_error;
1429 
1430       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1431                                 p_count => x_msg_count,
1432                                 p_data  => x_msg_data);
1433 
1434       -- Debug info.
1435       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1436         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1437                                p_msg_data=>x_msg_data,
1438                                p_msg_type=>'ERROR',
1439                                p_msg_level=>fnd_log.level_error);
1440       END IF;
1441       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1442         hz_utility_v2pub.debug(p_message=>'do_save_org_contact_bo(-)',
1443                                p_prefix=>l_debug_prefix,
1444                                p_msg_level=>fnd_log.level_procedure);
1445       END IF;
1446     WHEN fnd_api.g_exc_unexpected_error THEN
1447       x_return_status := fnd_api.g_ret_sts_unexp_error;
1448 
1449       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1450                                 p_count => x_msg_count,
1451                                 p_data  => x_msg_data);
1452 
1453       -- Debug info.
1454       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1455         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1456                                p_msg_data=>x_msg_data,
1457                                p_msg_type=>'UNEXPECTED ERROR',
1458                                p_msg_level=>fnd_log.level_error);
1459       END IF;
1460       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1461         hz_utility_v2pub.debug(p_message=>'do_save_org_contact_bo(-)',
1462                                p_prefix=>l_debug_prefix,
1463                                p_msg_level=>fnd_log.level_procedure);
1464       END IF;
1465     WHEN OTHERS THEN
1466       x_return_status := fnd_api.g_ret_sts_unexp_error;
1467 
1468       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1469       fnd_message.set_token('ERROR' ,SQLERRM);
1470       fnd_msg_pub.add;
1471 
1472       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1473                                 p_count => x_msg_count,
1474                                 p_data  => x_msg_data);
1475 
1476       -- Debug info.
1477       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1478         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1479                                p_msg_data=>x_msg_data,
1480                                p_msg_type=>'SQL ERROR',
1481                                p_msg_level=>fnd_log.level_error);
1482       END IF;
1483       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1484         hz_utility_v2pub.debug(p_message=>'do_save_org_contact_bo(-)',
1485                                p_prefix=>l_debug_prefix,
1486                                p_msg_level=>fnd_log.level_procedure);
1487       END IF;
1488   END do_save_org_contact_bo;
1489 
1490   PROCEDURE save_org_contact_bo(
1491     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1492     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1493     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
1494     p_created_by_module   IN            VARCHAR2,
1495     x_return_status       OUT NOCOPY    VARCHAR2,
1496     x_msg_count           OUT NOCOPY    NUMBER,
1497     x_msg_data            OUT NOCOPY    VARCHAR2,
1498     x_org_contact_id      OUT NOCOPY    NUMBER,
1499     x_org_contact_os      OUT NOCOPY    VARCHAR2,
1500     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
1501     px_parent_org_id      IN OUT NOCOPY NUMBER,
1502     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
1503     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
1504   ) IS
1505     l_oc_obj              HZ_ORG_CONTACT_BO;
1506   BEGIN
1507     l_oc_obj := p_org_contact_obj;
1508     do_save_org_contact_bo(
1509       p_init_msg_list       => p_init_msg_list,
1510       p_validate_bo_flag    => p_validate_bo_flag,
1511       p_org_contact_obj     => l_oc_obj,
1512       p_created_by_module   => p_created_by_module,
1513       p_obj_source          => null,
1514       x_return_status       => x_return_status,
1515       x_msg_count           => x_msg_count,
1516       x_msg_data            => x_msg_data,
1517       x_org_contact_id      => x_org_contact_id,
1518       x_org_contact_os      => x_org_contact_os,
1519       x_org_contact_osr     => x_org_contact_osr,
1520       px_parent_org_id      => px_parent_org_id,
1521       px_parent_org_os      => px_parent_org_os,
1522       px_parent_org_osr     => px_parent_org_osr
1523     );
1524   END save_org_contact_bo;
1525 
1526   PROCEDURE save_org_contact_bo(
1527     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1528     p_org_contact_obj     IN            HZ_ORG_CONTACT_BO,
1529     p_created_by_module   IN            VARCHAR2,
1530     p_obj_source          IN            VARCHAR2 := null,
1531     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
1532     x_return_status       OUT NOCOPY    VARCHAR2,
1533     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1534     x_return_obj          OUT NOCOPY    HZ_ORG_CONTACT_BO,
1535     x_org_contact_id      OUT NOCOPY    NUMBER,
1536     x_org_contact_os      OUT NOCOPY    VARCHAR2,
1537     x_org_contact_osr     OUT NOCOPY    VARCHAR2,
1538     px_parent_org_id      IN OUT NOCOPY NUMBER,
1539     px_parent_org_os      IN OUT NOCOPY VARCHAR2,
1540     px_parent_org_osr     IN OUT NOCOPY VARCHAR2
1541   ) IS
1542     l_msg_data            VARCHAR2(2000);
1543     l_msg_count           NUMBER;
1544     l_oc_obj              HZ_ORG_CONTACT_BO;
1545   BEGIN
1546     l_oc_obj := p_org_contact_obj;
1547     do_save_org_contact_bo(
1548       p_init_msg_list       => fnd_api.g_true,
1549       p_validate_bo_flag    => p_validate_bo_flag,
1550       p_org_contact_obj     => l_oc_obj,
1551       p_created_by_module   => p_created_by_module,
1552       p_obj_source          => p_obj_source,
1553       x_return_status       => x_return_status,
1554       x_msg_count           => l_msg_count,
1555       x_msg_data            => l_msg_data,
1556       x_org_contact_id      => x_org_contact_id,
1557       x_org_contact_os      => x_org_contact_os,
1558       x_org_contact_osr     => x_org_contact_osr,
1559       px_parent_org_id      => px_parent_org_id,
1560       px_parent_org_os      => px_parent_org_os,
1561       px_parent_org_osr     => px_parent_org_osr);
1562     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1563                     x_return_status   => x_return_status,
1564                     x_msg_count       => l_msg_count,
1565                     x_msg_data        => l_msg_data);
1566     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1567       x_return_obj := l_oc_obj;
1568     END IF;
1569   END save_org_contact_bo;
1570 
1571  --------------------------------------
1572   --
1573   -- PROCEDURE get_org_contact_bos
1574   --
1575   -- DESCRIPTION
1576   --     Get org contact information.
1577   --
1578   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1579   --
1580   -- ARGUMENTS
1581   --   IN:
1582   --     p_init_msg_list      Initialize message stack if it is set to FND_API.G_TRUE. Default is FND_API.G_FALSE.
1583   --       p_org_contact_id       Org Contact id.
1584  --     p_org_contact_os           Org contact orig system.
1585   --     p_org_contact_osr         Org contact orig system reference.
1586   --
1587   --   OUT:
1588   --     x_org contact_objs  Table of org contact objects.
1589   --     x_return_status      Return status after the call. The status can
1590   --                          be fnd_api.g_ret_sts_success (success),
1591   --                          fnd_api.g_ret_sts_error (error),
1592   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1593   --     x_msg_count          Number of messages in message stack.
1594   --     x_msg_data           Message text if x_msg_count is 1.
1595   --
1596   -- NOTES
1597   --
1598   -- MODIFICATION HISTORY
1599   --
1600   --
1601   --   15-June-2005   AWU                Created.
1602   --
1603 
1604 
1605 
1606  PROCEDURE get_org_contact_bo(
1607     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1608     p_org_contact_id		IN	NUMBER,
1609     p_org_contact_os		IN	VARCHAR2,
1610     p_org_contact_osr		IN	VARCHAR2,
1611     x_org_contact_obj    OUT NOCOPY    HZ_ORG_CONTACT_BO,
1612     x_return_status       OUT NOCOPY    VARCHAR2,
1613     x_msg_count           OUT NOCOPY    NUMBER,
1614     x_msg_data            OUT NOCOPY    VARCHAR2
1615   ) is
1616  l_debug_prefix              VARCHAR2(30) := '';
1617 
1618   l_org_contact_id  number;
1619   l_org_contact_os  varchar2(30);
1620   l_org_contact_osr varchar2(255);
1621   l_org_contact_objs HZ_ORG_CONTACT_BO_TBL;
1622 BEGIN
1623 
1624 	-- initialize API return status to success.
1625     	x_return_status := FND_API.G_RET_STS_SUCCESS;
1626 
1627     	-- Initialize message list if p_init_msg_list is set to TRUE
1628     	IF FND_API.to_Boolean(p_init_msg_list) THEN
1629       		FND_MSG_PUB.initialize;
1630     	END IF;
1631 
1632 
1633 	-- Debug info.
1634         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1635         	hz_utility_v2pub.debug(p_message=>'hz_org_contact_bo_pub.get_org_contact_bo(+)',
1636                                p_prefix=>l_debug_prefix,
1637                                p_msg_level=>fnd_log.level_procedure);
1638     	END IF;
1639 
1640     	-- check if pass in contact_point_id and/or os+osr
1641     	-- extraction validation logic is same as update
1642 
1643     	l_org_contact_id := p_org_contact_id;
1644     	l_org_contact_os := p_org_contact_os;
1645     	l_org_contact_osr := p_org_contact_osr;
1646 
1647     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
1648       		px_id              => l_org_contact_id,
1649       		px_os              => l_org_contact_os,
1650       		px_osr             => l_org_contact_osr,
1651       		p_obj_type         => 'HZ_ORG_CONTACTS',
1652       		x_return_status    => x_return_status,
1653       		x_msg_count        => x_msg_count,
1654       		x_msg_data         => x_msg_data);
1655 
1656     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1657       		RAISE fnd_api.g_exc_error;
1658    	 END IF;
1659 
1660 	HZ_EXTRACT_ORG_CONT_BO_PVT.get_org_contact_bos
1661 		(p_init_msg_list => fnd_api.g_false,
1662 		 p_organization_id => NULL,
1663 		 p_org_contact_id => l_org_contact_id,
1664 		 p_action_type => NULL,
1665 		  x_org_contact_objs => l_org_contact_objs,
1666 		 x_return_status => x_return_status,
1667 		 x_msg_count => x_msg_count,
1668 		 x_msg_data => x_msg_data);
1669 
1670 	x_org_contact_obj := l_org_contact_objs(1);
1671 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1672       		RAISE FND_API.G_EXC_ERROR;
1673     	END IF;
1674 
1675 
1676 	-- Debug info.
1677     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1678          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1679                                p_msg_data=>x_msg_data,
1680                                p_msg_type=>'WARNING',
1681                                p_msg_level=>fnd_log.level_exception);
1682     	END IF;
1683 
1684     	-- Debug info.
1685         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1686         	hz_utility_v2pub.debug(p_message=>'hz_org_contact_bo_pub.get_org_contact_bo (-)',
1687                                p_prefix=>l_debug_prefix,
1688                                p_msg_level=>fnd_log.level_procedure);
1689     	END IF;
1690 
1691 
1692  EXCEPTION
1693 
1694   WHEN fnd_api.g_exc_error THEN
1695       x_return_status := fnd_api.g_ret_sts_error;
1696 
1697       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1698                                 p_count => x_msg_count,
1699                                 p_data  => x_msg_data);
1700 
1701       -- Debug info.
1702       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1703         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1704                                p_msg_data=>x_msg_data,
1705                                p_msg_type=>'ERROR',
1706                                p_msg_level=>fnd_log.level_error);
1707       END IF;
1708       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1709         hz_utility_v2pub.debug(p_message=>'hz_org_contact_bo_pub.get_org_contact_bo (-)',
1710                                p_prefix=>l_debug_prefix,
1711                                p_msg_level=>fnd_log.level_procedure);
1712       END IF;
1713     WHEN fnd_api.g_exc_unexpected_error THEN
1714       x_return_status := fnd_api.g_ret_sts_unexp_error;
1715 
1716       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1717                                 p_count => x_msg_count,
1718                                 p_data  => x_msg_data);
1719 
1720       -- Debug info.
1721       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1722         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1723                                p_msg_data=>x_msg_data,
1724                                p_msg_type=>'UNEXPECTED ERROR',
1725                                p_msg_level=>fnd_log.level_error);
1726       END IF;
1727       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1728         hz_utility_v2pub.debug(p_message=>'hz_org_contact_bo_pub.get_org_contact_bo (-)',
1729                                p_prefix=>l_debug_prefix,
1730                                p_msg_level=>fnd_log.level_procedure);
1731       END IF;
1732     WHEN OTHERS THEN
1733       x_return_status := fnd_api.g_ret_sts_unexp_error;
1734 
1735       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1736       fnd_message.set_token('ERROR' ,SQLERRM);
1737       fnd_msg_pub.add;
1738 
1739       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1740                                 p_count => x_msg_count,
1741                                 p_data  => x_msg_data);
1742 
1743       -- Debug info.
1744       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1745         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1746                                p_msg_data=>x_msg_data,
1747                                p_msg_type=>'SQL ERROR',
1748                                p_msg_level=>fnd_log.level_error);
1749       END IF;
1750       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1751         hz_utility_v2pub.debug(p_message=>'hz_org_contact_bo_pub.get_org_contact_bo (-)',
1752                                p_prefix=>l_debug_prefix,
1753                                p_msg_level=>fnd_log.level_procedure);
1754       END IF;
1755 
1756 end;
1757 
1758   PROCEDURE get_org_contact_bo(
1759     p_org_contact_id            IN      NUMBER,
1760     p_org_contact_os            IN      VARCHAR2,
1761     p_org_contact_osr           IN      VARCHAR2,
1762     x_org_contact_obj    OUT NOCOPY    HZ_ORG_CONTACT_BO,
1763     x_return_status       OUT NOCOPY    VARCHAR2,
1764     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
1765   ) IS
1766     l_msg_data             VARCHAR2(2000);
1767     l_msg_count            NUMBER;
1768   BEGIN
1769     get_org_contact_bo(
1770       p_init_msg_list   => fnd_api.g_true,
1771       p_org_contact_id  => p_org_contact_id,
1772       p_org_contact_os  => p_org_contact_os,
1773       p_org_contact_osr => p_org_contact_osr,
1774       x_org_contact_obj => x_org_contact_obj,
1775       x_return_status   => x_return_status,
1776       x_msg_count       => l_msg_count,
1777       x_msg_data        => l_msg_data);
1778     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1779                     x_return_status   => x_return_status,
1780                     x_msg_count       => l_msg_count,
1781                     x_msg_data        => l_msg_data);
1782   END get_org_contact_bo;
1783 
1784 END hz_org_contact_bo_pub;