DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_PARTY_BO_PVT

Source


1 PACKAGE BODY hz_party_bo_pvt AS
2 /*$Header: ARHBPTVB.pls 120.21 2008/03/25 23:16:38 awu ship $ */
3 
4   G_BO_EVENTS_FORMAT CONSTANT VARCHAR2(30) := FND_PROFILE.VALUE('HZ_BO_EVENTS_FORMAT_BULK');
5   G_EVENT_TYPE       CONSTANT VARCHAR2(30) := FND_PROFILE.VALUE('HZ_EXECUTE_API_CALLOUTS');
6 
7   PROCEDURE log(
8     message      IN VARCHAR2,
9     newline      IN BOOLEAN DEFAULT TRUE);
10 
11   PROCEDURE add_cust_tracking(
12     p_party_id          IN NUMBER,
13     p_bo_code           IN VARCHAR2,
14     p_create_or_update  IN VARCHAR2);
15 
16   -- PROCEDURE set_hz_parties_bo_ver
17   --
18   -- DESCRIPTION
19   --     Set BO_VERSION_NUMBER in HZ_PARTIES table.  This procedure
20   --     will be called from Organization, Organization Customer,
21   --     Person, Person Customer BO create API.
22   --
23   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
24   --
25   -- ARGUMENTS
26   --   IN:
27   --     p_party_id           Party Id.
28   -- NOTES
29   --
30   -- MODIFICATION HISTORY
31   --
32   --   04-OCT-2005    Arnold Ng          Created.
33   --
34 
35   PROCEDURE set_hz_parties_bo_ver(
36     p_party_id       IN NUMBER,
37     p_bo_code        IN VARCHAR2
38   );
39 
40   -- PRIVATE PROCEDURE assign_certification_rec
41   --
42   -- DESCRIPTION
43   --     Assign attribute value from certification object to plsql record.
44   --
45   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
46   --
47   -- ARGUMENTS
48   --   IN:
49   --     p_certification_obj  Certification object.
50   --     p_party_id           Party Id.
51   --   IN/OUT:
52   --     px_certification_rec Certification plsql record.
53   --
54   -- NOTES
55   --
56   -- MODIFICATION HISTORY
57   --
58   --   14-DEC-2004    Arnold Ng          Created.
59   --
60 
61   PROCEDURE assign_certification_rec(
62     p_certification_obj          IN            HZ_CERTIFICATION_OBJ,
63     p_party_id                   IN            NUMBER,
64     px_certification_rec         IN OUT NOCOPY HZ_ORG_INFO_PUB.certifications_rec_type
65   );
66 
67   -- PRIVATE PROCEDURE assign_financial_prof_rec
68   --
69   -- DESCRIPTION
70   --     Assign attribute value from financial profile object to plsql record.
71   --
72   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
73   --
74   -- ARGUMENTS
75   --   IN:
76   --     p_financial_prof_obj Financial profile object.
77   --     p_party_id           Party Id.
78   --   IN/OUT:
79   --     px_financial_prof_rec Financial profile plsql record.
80   --
81   -- NOTES
82   --
83   -- MODIFICATION HISTORY
84   --
85   --   14-DEC-2004    Arnold Ng          Created.
86   --
87 
88   PROCEDURE assign_financial_prof_rec(
89     p_financial_prof_obj         IN            HZ_FINANCIAL_PROF_OBJ,
90     p_party_id                   IN            NUMBER,
91     px_financial_prof_rec        IN OUT NOCOPY HZ_PARTY_INFO_PUB.financial_profile_rec_type
92   );
93 
94   -- PRIVATE PROCEDURE assign_code_assign_rec
95   --
96   -- DESCRIPTION
97   --     Assign attribute value from classification object to plsql record.
98   --
99   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
100   --
101   -- ARGUMENTS
102   --   IN:
103   --     p_code_assign_obj    Classification object.
104   --     p_owner_table_name   Owner table name.
105   --     p_owner_table_id     Owner table Id.
106   --   IN/OUT:
107   --     px_code_assign_rec   Classification plsql record.
108   --
109   -- NOTES
110   --
111   -- MODIFICATION HISTORY
112   --
113   --   14-DEC-2004    Arnold Ng          Created.
114   --
115 
116   PROCEDURE assign_code_assign_rec(
117     p_code_assign_obj            IN            HZ_CODE_ASSIGNMENT_OBJ,
118     p_owner_table_name           IN            VARCHAR2,
119     p_owner_table_id             IN            NUMBER,
120     px_code_assign_rec           IN OUT NOCOPY HZ_CLASSIFICATION_V2PUB.code_assignment_rec_type
121   );
122 
123   -- PRIVATE PROCEDURE assign_relationship_rec
124   --
125   -- DESCRIPTION
126   --     Assign attribute value from relationship object to plsql record.
127   --
128   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
129   --
130   -- ARGUMENTS
131   --   IN:
132   --     p_relationship_obj   Relationship object.
133   --     p_subject_id         Subject Id.
134   --     p_subject_type       Subject type.
135   --     p_object_id          Object Id.
136   --     p_object_type        Object type.
137   --   IN/OUT:
138   --     px_relationship_rec  Relationship plsql record.
139   --
140   -- NOTES
141   --
142   -- MODIFICATION HISTORY
143   --
144   --   14-DEC-2004    Arnold Ng          Created.
145   --
146 
147   PROCEDURE assign_relationship_rec(
148     p_relationship_obj           IN            HZ_RELATIONSHIP_OBJ,
149     p_subject_id                 IN            NUMBER,
150     p_subject_type               IN            VARCHAR2,
151     p_object_id                  IN            NUMBER,
152     p_object_type                IN            VARCHAR2,
153     px_relationship_rec          IN OUT NOCOPY HZ_RELATIONSHIP_V2PUB.relationship_rec_type
154   );
155 
156   -- PRIVATE PROCEDURE assign_certification_rec
157   --
158   -- DESCRIPTION
159   --     Assign attribute value from certification object to plsql record.
160   --
161   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
162   --
163   -- ARGUMENTS
164   --   IN:
165   --     p_certifiation_obj   Certification object.
166   --     p_party_id           Party Id.
167   --   IN/OUT:
168   --     px_certification_rec Certification plsql record.
169   --
170   -- NOTES
171   --
172   -- MODIFICATION HISTORY
173   --
174   --   14-DEC-2004    Arnold Ng          Created.
175   --
176 
177   PROCEDURE assign_certification_rec(
178     p_certification_obj          IN            HZ_CERTIFICATION_OBJ,
179     p_party_id                   IN            NUMBER,
180     px_certification_rec         IN OUT NOCOPY HZ_ORG_INFO_PUB.certifications_rec_type
181   ) IS
182   BEGIN
183     px_certification_rec.certification_id    := p_certification_obj.certification_id;
184     px_certification_rec.certification_name  := p_certification_obj.certification_name;
185     px_certification_rec.party_id            := p_party_id;
186     px_certification_rec.current_status      := p_certification_obj.current_status;
187     px_certification_rec.expires_on_date     := p_certification_obj.expires_on_date;
188     px_certification_rec.grade               := p_certification_obj.grade;
189     px_certification_rec.issued_by_authority := p_certification_obj.issued_by_authority;
190     px_certification_rec.issued_on_date      := p_certification_obj.issued_on_date;
191     px_certification_rec.status              := p_certification_obj.status;
192   END assign_certification_rec;
193 
194   -- PRIVATE PROCEDURE assign_financial_prof_rec
195   --
196   -- DESCRIPTION
197   --     Assign attribute value from financial profile object to plsql record.
198   --
199   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
200   --
201   -- ARGUMENTS
202   --   IN:
203   --     p_financial_prof_obj Financial profile object.
204   --     p_party_id           Party Id.
205   --   IN/OUT:
206   --     px_financial_prof_rec Financial profile plsql record.
207   --
208   -- NOTES
209   --
210   -- MODIFICATION HISTORY
211   --
212   --   14-DEC-2004    Arnold Ng          Created.
213   --
214 
215   PROCEDURE assign_financial_prof_rec(
216     p_financial_prof_obj         IN            HZ_FINANCIAL_PROF_OBJ,
217     p_party_id                   IN            NUMBER,
218     px_financial_prof_rec        IN OUT NOCOPY HZ_PARTY_INFO_PUB.financial_profile_rec_type
219   ) IS
220   BEGIN
221     px_financial_prof_rec.financial_profile_id        := p_financial_prof_obj.financial_profile_id;
222     px_financial_prof_rec.access_authority_date       := p_financial_prof_obj.access_authority_date;
223     px_financial_prof_rec.access_authority_granted    := p_financial_prof_obj.access_authority_granted;
224     px_financial_prof_rec.balance_amount              := p_financial_prof_obj.balance_amount;
225     px_financial_prof_rec.balance_verified_on_date    := p_financial_prof_obj.balance_verified_on_date;
226     px_financial_prof_rec.financial_account_number    := p_financial_prof_obj.financial_account_number;
227     px_financial_prof_rec.financial_account_type      := p_financial_prof_obj.financial_account_type;
228     px_financial_prof_rec.financial_org_type          := p_financial_prof_obj.financial_org_type;
229     px_financial_prof_rec.financial_organization_name := p_financial_prof_obj.financial_organization_name;
230     px_financial_prof_rec.party_id                    := p_party_id;
231     px_financial_prof_rec.status                      := p_financial_prof_obj.status;
232   END assign_financial_prof_rec;
233 
234   -- PRIVATE PROCEDURE assign_code_assign_rec
235   --
236   -- DESCRIPTION
237   --     Assign attribute value from classification object to plsql record.
238   --
239   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
240   --
241   -- ARGUMENTS
242   --   IN:
243   --     p_code_assign_obj    Classification object.
244   --     p_owner_table_name   Owner table name.
245   --     p_owner_table_id     Owner table Id.
246   --   IN/OUT:
247   --     px_code_assign_rec   Classification plsql record.
248   --
249   -- NOTES
250   --
251   -- MODIFICATION HISTORY
252   --
253   --   14-DEC-2004    Arnold Ng          Created.
254   --
255 
256   PROCEDURE assign_code_assign_rec(
257     p_code_assign_obj            IN            HZ_CODE_ASSIGNMENT_OBJ,
258     p_owner_table_name           IN            VARCHAR2,
259     p_owner_table_id             IN            NUMBER,
260     px_code_assign_rec           IN OUT NOCOPY HZ_CLASSIFICATION_V2PUB.code_assignment_rec_type
261   ) IS
262   BEGIN
263     px_code_assign_rec.code_assignment_id    := p_code_assign_obj.code_assignment_id;
264     px_code_assign_rec.owner_table_name      := p_owner_table_name;
265     px_code_assign_rec.owner_table_id        := p_owner_table_id;
266     px_code_assign_rec.class_category        := p_code_assign_obj.class_category;
267     px_code_assign_rec.class_code            := p_code_assign_obj.class_code;
268     px_code_assign_rec.primary_flag          := p_code_assign_obj.primary_flag;
269     px_code_assign_rec.start_date_active     := p_code_assign_obj.start_date_active;
270     px_code_assign_rec.end_date_active       := p_code_assign_obj.end_date_active;
271     px_code_assign_rec.status                := p_code_assign_obj.status;
272     px_code_assign_rec.actual_content_source := p_code_assign_obj.actual_content_source;
273     px_code_assign_rec.created_by_module     := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
274     px_code_assign_rec.rank                  := p_code_assign_obj.rank;
275   END assign_code_assign_rec;
276 
277   -- PRIVATE PROCEDURE assign_relationship_rec
278   --
279   -- DESCRIPTION
280   --     Assign attribute value from relationship object to plsql record.
281   --
282   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
283   --
284   -- ARGUMENTS
285   --   IN:
286   --     p_relationship_obj   Relationship object.
287   --     p_subject_id         Subject Id.
288   --     p_subject_type       Subject type.
289   --     p_object_id          Object Id.
290   --     p_object_type        Object type.
291   --   IN/OUT:
292   --     px_relationship_rec  Relationship plsql record.
293   --
294   -- NOTES
295   --
296   -- MODIFICATION HISTORY
297   --
298   --   14-DEC-2004    Arnold Ng          Created.
299   --
300 
301   PROCEDURE assign_relationship_rec(
302     p_relationship_obj           IN            HZ_RELATIONSHIP_OBJ,
303     p_subject_id                 IN            NUMBER,
304     p_subject_type               IN            VARCHAR2,
305     p_object_id                  IN            NUMBER,
306     p_object_type                IN            VARCHAR2,
307     px_relationship_rec          IN OUT NOCOPY HZ_RELATIONSHIP_V2PUB.relationship_rec_type
308   ) IS
309   BEGIN
310     px_relationship_rec.relationship_id   := p_relationship_obj.relationship_id;
311     px_relationship_rec.subject_id        := p_subject_id;
312     px_relationship_rec.subject_type      := p_subject_type;
313     px_relationship_rec.subject_table_name:= 'HZ_PARTIES';
314     px_relationship_rec.object_id         := p_object_id;
315     px_relationship_rec.object_type       := p_object_type;
316     px_relationship_rec.object_table_name := 'HZ_PARTIES';
317     px_relationship_rec.relationship_code := p_relationship_obj.relationship_code;
318     px_relationship_rec.relationship_type := p_relationship_obj.relationship_type;
319     px_relationship_rec.comments          := p_relationship_obj.comments;
320     px_relationship_rec.start_date        := p_relationship_obj.start_date;
321     px_relationship_rec.end_date          := p_relationship_obj.end_date;
322     IF(p_relationship_obj.status in ('A','I')) THEN
323       px_relationship_rec.status            := p_relationship_obj.status;
324     END IF;
325     px_relationship_rec.attribute_category  := p_relationship_obj.attribute_category;
326     px_relationship_rec.attribute1        := p_relationship_obj.attribute1;
327     px_relationship_rec.attribute2        := p_relationship_obj.attribute2;
328     px_relationship_rec.attribute3        := p_relationship_obj.attribute3;
329     px_relationship_rec.attribute4        := p_relationship_obj.attribute4;
330     px_relationship_rec.attribute5        := p_relationship_obj.attribute5;
331     px_relationship_rec.attribute6        := p_relationship_obj.attribute6;
332     px_relationship_rec.attribute7        := p_relationship_obj.attribute7;
333     px_relationship_rec.attribute8        := p_relationship_obj.attribute8;
334     px_relationship_rec.attribute9        := p_relationship_obj.attribute9;
335     px_relationship_rec.attribute10       := p_relationship_obj.attribute10;
336     px_relationship_rec.attribute11       := p_relationship_obj.attribute11;
337     px_relationship_rec.attribute12       := p_relationship_obj.attribute12;
338     px_relationship_rec.attribute13       := p_relationship_obj.attribute13;
339     px_relationship_rec.attribute14       := p_relationship_obj.attribute14;
340     px_relationship_rec.attribute15       := p_relationship_obj.attribute15;
341     px_relationship_rec.attribute16       := p_relationship_obj.attribute16;
342     px_relationship_rec.attribute17       := p_relationship_obj.attribute17;
343     px_relationship_rec.attribute18       := p_relationship_obj.attribute18;
344     px_relationship_rec.attribute19       := p_relationship_obj.attribute19;
345     px_relationship_rec.attribute20       := p_relationship_obj.attribute20;
346     px_relationship_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
347 /*
348     px_relationship_rec.party_rec.party_id       := p_relationship_obj.party_obj.party_id;
349     px_relationship_rec.party_rec.party_number   := p_relationship_obj.party_obj.party_number;
350     px_relationship_rec.party_rec.validated_flag := p_relationship_obj.party_obj.validated_flag;
351     px_relationship_rec.party_rec.status         := p_relationship_obj.party_obj.status;
352     px_relationship_rec.party_rec.category_code  := p_relationship_obj.party_obj.category_code;
353     px_relationship_rec.party_rec.salutation     := p_relationship_obj.party_obj.salutation;
354     px_relationship_rec.party_rec.attribute_category  := p_relationship_obj.party_obj.attribute_category;
355     px_relationship_rec.party_rec.attribute1     := p_relationship_obj.party_obj.attribute1;
356     px_relationship_rec.party_rec.attribute2     := p_relationship_obj.party_obj.attribute2;
357     px_relationship_rec.party_rec.attribute3     := p_relationship_obj.party_obj.attribute3;
358     px_relationship_rec.party_rec.attribute4     := p_relationship_obj.party_obj.attribute4;
359     px_relationship_rec.party_rec.attribute5     := p_relationship_obj.party_obj.attribute5;
360     px_relationship_rec.party_rec.attribute6     := p_relationship_obj.party_obj.attribute6;
361     px_relationship_rec.party_rec.attribute7     := p_relationship_obj.party_obj.attribute7;
362     px_relationship_rec.party_rec.attribute8     := p_relationship_obj.party_obj.attribute8;
363     px_relationship_rec.party_rec.attribute9     := p_relationship_obj.party_obj.attribute9;
364     px_relationship_rec.party_rec.attribute10    := p_relationship_obj.party_obj.attribute10;
365     px_relationship_rec.party_rec.attribute11    := p_relationship_obj.party_obj.attribute11;
366     px_relationship_rec.party_rec.attribute12    := p_relationship_obj.party_obj.attribute12;
367     px_relationship_rec.party_rec.attribute13    := p_relationship_obj.party_obj.attribute13;
368     px_relationship_rec.party_rec.attribute14    := p_relationship_obj.party_obj.attribute14;
369     px_relationship_rec.party_rec.attribute15    := p_relationship_obj.party_obj.attribute15;
370     px_relationship_rec.party_rec.attribute16    := p_relationship_obj.party_obj.attribute16;
371     px_relationship_rec.party_rec.attribute17    := p_relationship_obj.party_obj.attribute17;
372     px_relationship_rec.party_rec.attribute18    := p_relationship_obj.party_obj.attribute18;
373     px_relationship_rec.party_rec.attribute19    := p_relationship_obj.party_obj.attribute19;
374     px_relationship_rec.party_rec.attribute20    := p_relationship_obj.party_obj.attribute20;
375     px_relationship_rec.party_rec.attribute21    := p_relationship_obj.party_obj.attribute21;
376     px_relationship_rec.party_rec.attribute22    := p_relationship_obj.party_obj.attribute22;
377     px_relationship_rec.party_rec.attribute23    := p_relationship_obj.party_obj.attribute23;
378     px_relationship_rec.party_rec.attribute24    := p_relationship_obj.party_obj.attribute24;
379     --px_relationship_rec.party_rec.orig_system    := p_relationship_obj.party_obj.source_system_objs(1).orig_system;
380     --px_relationship_rec.party_rec.orig_system_reference := p_relationship_obj.party_obj.source_system_objs(1).orig_system_reference;
381 */
382     px_relationship_rec.additional_information1  := p_relationship_obj.additional_information1;
383     px_relationship_rec.additional_information2  := p_relationship_obj.additional_information2;
384     px_relationship_rec.additional_information3  := p_relationship_obj.additional_information3;
385     px_relationship_rec.additional_information4  := p_relationship_obj.additional_information4;
386     px_relationship_rec.additional_information5  := p_relationship_obj.additional_information5;
387     px_relationship_rec.additional_information6  := p_relationship_obj.additional_information6;
388     px_relationship_rec.additional_information7  := p_relationship_obj.additional_information7;
389     px_relationship_rec.additional_information8  := p_relationship_obj.additional_information8;
390     px_relationship_rec.additional_information9  := p_relationship_obj.additional_information9;
391     px_relationship_rec.additional_information10 := p_relationship_obj.additional_information10;
392     px_relationship_rec.additional_information11 := p_relationship_obj.additional_information11;
393     px_relationship_rec.additional_information12 := p_relationship_obj.additional_information12;
394     px_relationship_rec.additional_information13 := p_relationship_obj.additional_information13;
395     px_relationship_rec.additional_information14 := p_relationship_obj.additional_information14;
396     px_relationship_rec.additional_information15 := p_relationship_obj.additional_information15;
397     px_relationship_rec.additional_information16 := p_relationship_obj.additional_information16;
398     px_relationship_rec.additional_information17 := p_relationship_obj.additional_information17;
399     px_relationship_rec.additional_information18 := p_relationship_obj.additional_information18;
400     px_relationship_rec.additional_information19 := p_relationship_obj.additional_information19;
401     px_relationship_rec.additional_information20 := p_relationship_obj.additional_information20;
402     px_relationship_rec.additional_information21 := p_relationship_obj.additional_information21;
403     px_relationship_rec.additional_information22 := p_relationship_obj.additional_information22;
404     px_relationship_rec.additional_information23 := p_relationship_obj.additional_information23;
405     px_relationship_rec.additional_information24 := p_relationship_obj.additional_information24;
406     px_relationship_rec.additional_information25 := p_relationship_obj.additional_information25;
407     px_relationship_rec.additional_information26 := p_relationship_obj.additional_information26;
408     px_relationship_rec.additional_information27 := p_relationship_obj.additional_information27;
409     px_relationship_rec.additional_information28 := p_relationship_obj.additional_information28;
410     px_relationship_rec.additional_information29 := p_relationship_obj.additional_information29;
411     px_relationship_rec.additional_information30 := p_relationship_obj.additional_information30;
412     px_relationship_rec.percentage_ownership     := p_relationship_obj.percentage_ownership;
413     px_relationship_rec.actual_content_source    := p_relationship_obj.actual_content_source;
414   END assign_relationship_rec;
415 
416   -- PROCEDURE create_relationships
417   --
418   -- DESCRIPTION
419   --     Create relationships.
420   --
421   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
422   --
423   -- ARGUMENTS
424   --   IN:
425   --     p_rel_objs           List of relationship objects.
426   --     p_subject_id         Subject Id.
427   --     p_subject_type       Subject type.
428   --   OUT:
429   --     x_return_status      Return status after the call. The status can
430   --                          be fnd_api.g_ret_sts_success (success),
431   --                          fnd_api.g_ret_sts_error (error),
432   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
433   --     x_msg_count          Number of messages in message stack.
434   --     x_msg_data           Message text if x_msg_count is 1.
435   --
436   -- NOTES
437   --
438   -- MODIFICATION HISTORY
439   --
440   --   14-DEC-2004    Arnold Ng          Created.
441   --
442 
443   PROCEDURE create_relationships(
444     p_rel_objs                   IN OUT NOCOPY HZ_RELATIONSHIP_OBJ_TBL,
445     p_subject_id                 IN         NUMBER,
446     p_subject_type               IN         VARCHAR2,
447     x_return_status              OUT NOCOPY VARCHAR2,
448     x_msg_count                  OUT NOCOPY NUMBER,
449     x_msg_data                   OUT NOCOPY VARCHAR2
450   )IS
451     l_debug_prefix        VARCHAR2(30);
452     l_rel_id              NUMBER;
453     l_party_id            NUMBER;
454     l_party_number        VARCHAR2(30);
455     l_rel_rec             HZ_RELATIONSHIP_V2PUB.RELATIONSHIP_REC_TYPE;
456     l_obj_id              NUMBER;
457     l_obj_os              VARCHAR2(30);
458     l_obj_osr             VARCHAR2(255);
459     l_obj_type            VARCHAR2(30);
460   BEGIN
461     -- Standard start of API savepoint
462     SAVEPOINT create_relationships_pvt;
463 
464     -- initialize API return status to success.
465     x_return_status := FND_API.G_RET_STS_SUCCESS;
466 
467     -- Debug info.
468     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
469         hz_utility_v2pub.debug(p_message=>'create_relationships(+)',
470                                p_prefix=>l_debug_prefix,
471                                p_msg_level=>fnd_log.level_procedure);
472     END IF;
473 
474     -- Create relationships
475     FOR i IN 1..p_rel_objs.COUNT LOOP
476       -- Get object id and os+osr
477       l_obj_id := p_rel_objs(i).related_object_id;
478       l_obj_os := p_rel_objs(i).related_object_os;
479       l_obj_osr := p_rel_objs(i).related_object_osr;
480       IF(p_rel_objs(i).related_object_type = 'ORG') THEN
481         l_obj_type := 'ORGANIZATION';
482       ELSE
483         l_obj_type := 'PERSON';
484       END IF;
485 
486       -- check if object id or os+osr is valid
487       hz_registry_validate_bo_pvt.validate_ssm_id(
488         px_id                => l_obj_id,
489         px_os                => l_obj_os,
490         px_osr               => l_obj_osr,
491         p_obj_type           => l_obj_type,
492         p_create_or_update   => 'U',
493         x_return_status      => x_return_status,
494         x_msg_count          => x_msg_count,
495         x_msg_data           => x_msg_data);
496 
497       IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
498         RAISE FND_API.G_EXC_ERROR;
499       ELSE
500         assign_relationship_rec(
501           p_relationship_obj   => p_rel_objs(i),
502           p_subject_id         => p_subject_id,
503           p_subject_type       => p_subject_type,
504           p_object_id          => l_obj_id,
505           p_object_type        => l_obj_type,
506           px_relationship_rec  => l_rel_rec
507         );
508 
509         HZ_RELATIONSHIP_V2PUB.create_relationship(
510           p_relationship_rec          => l_rel_rec,
511           x_relationship_id           => l_rel_id,
512           x_party_id                  => l_party_id,
513           x_party_number              => l_party_number,
514           x_return_status             => x_return_status,
515           x_msg_count                 => x_msg_count,
516           x_msg_data                  => x_msg_data
517         );
518 
519         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
520           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
521             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_relationships, subject id: '||p_subject_id||' object id: '||p_rel_objs(i).related_object_id,
522                                    p_prefix=>l_debug_prefix,
523                                    p_msg_level=>fnd_log.level_procedure);
524           END IF;
525           RAISE FND_API.G_EXC_ERROR;
526         END IF;
527 
528         -- assign relationship_id and party_id
529         p_rel_objs(i).relationship_id := l_rel_id;
530       END IF;
531     END LOOP;
532 
533     -- Debug info.
534     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
535          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
536                                p_msg_data=>x_msg_data,
537                                p_msg_type=>'WARNING',
538                                p_msg_level=>fnd_log.level_exception);
539     END IF;
540     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
541         hz_utility_v2pub.debug(p_message=>'create_relationships(-)',
542                                p_prefix=>l_debug_prefix,
543                                p_msg_level=>fnd_log.level_procedure);
544     END IF;
545   EXCEPTION
546     WHEN fnd_api.g_exc_error THEN
547       ROLLBACK TO create_relationships_pvt;
548       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
549       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
550       FND_MSG_PUB.ADD;
551 
552       x_return_status := fnd_api.g_ret_sts_error;
553 
554       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
555                                 p_count => x_msg_count,
556                                 p_data  => x_msg_data);
557 
558       -- Debug info.
559       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
560         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
561                                p_msg_data=>x_msg_data,
562                                p_msg_type=>'ERROR',
563                                p_msg_level=>fnd_log.level_error);
564       END IF;
565       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
566         hz_utility_v2pub.debug(p_message=>'create_relationships(-)',
567                                p_prefix=>l_debug_prefix,
568                                p_msg_level=>fnd_log.level_procedure);
569       END IF;
570     WHEN fnd_api.g_exc_unexpected_error THEN
571       ROLLBACK TO create_relationships_pvt;
572       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
573       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
574       FND_MSG_PUB.ADD;
575 
576       x_return_status := fnd_api.g_ret_sts_unexp_error;
577 
578       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
579                                 p_count => x_msg_count,
580                                 p_data  => x_msg_data);
581 
582       -- Debug info.
583       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
584         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
585                                p_msg_data=>x_msg_data,
586                                p_msg_type=>'UNEXPECTED ERROR',
587                                p_msg_level=>fnd_log.level_error);
588       END IF;
589       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
590         hz_utility_v2pub.debug(p_message=>'create_relationships(-)',
591                                p_prefix=>l_debug_prefix,
592                                p_msg_level=>fnd_log.level_procedure);
593       END IF;
594 
595     WHEN OTHERS THEN
596       ROLLBACK TO create_relationships_pvt;
597       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
598       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
599       FND_MSG_PUB.ADD;
600 
601       x_return_status := fnd_api.g_ret_sts_unexp_error;
602 
603       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
604       fnd_message.set_token('ERROR' ,SQLERRM);
605       fnd_msg_pub.add;
606 
607       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
608                                 p_count => x_msg_count,
609                                 p_data  => x_msg_data);
610 
611       -- Debug info.
612       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
613         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
614                                p_msg_data=>x_msg_data,
615                                p_msg_type=>'SQL ERROR',
616                                p_msg_level=>fnd_log.level_error);
617       END IF;
618       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
619         hz_utility_v2pub.debug(p_message=>'create_relationships(-)',
620                                p_prefix=>l_debug_prefix,
621                                p_msg_level=>fnd_log.level_procedure);
622       END IF;
623   END create_relationships;
624 
625   -- PROCEDURE save_relationships
626   --
627   -- DESCRIPTION
628   --     Create or update relationships.
629   --
630   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
631   --
632   -- ARGUMENTS
633   --   IN:
634   --     p_rel_objs           List of relationship objects.
635   --     p_subject_id         Subject Id.
636   --     p_subject_type       Subject type.
637   --   OUT:
638   --     x_return_status      Return status after the call. The status can
639   --                          be fnd_api.g_ret_sts_success (success),
640   --                          fnd_api.g_ret_sts_error (error),
641   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
642   --     x_msg_count          Number of messages in message stack.
643   --     x_msg_data           Message text if x_msg_count is 1.
644   --
645   -- NOTES
646   --
647   -- MODIFICATION HISTORY
648   --
649   --   14-DEC-2004    Arnold Ng          Created.
650   --
651 
652   PROCEDURE save_relationships(
653     p_rel_objs                   IN OUT NOCOPY HZ_RELATIONSHIP_OBJ_TBL,
654     p_subject_id                 IN         NUMBER,
655     p_subject_type               IN         VARCHAR2,
656     x_return_status              OUT NOCOPY VARCHAR2,
657     x_msg_count                  OUT NOCOPY NUMBER,
658     x_msg_data                   OUT NOCOPY VARCHAR2
659   )IS
660     l_debug_prefix        VARCHAR2(30);
661     l_rel_id              NUMBER;
662     l_party_id            NUMBER;
663     l_party_number        VARCHAR2(30);
664     l_rel_rec             HZ_RELATIONSHIP_V2PUB.RELATIONSHIP_REC_TYPE;
665     l_ovn                 NUMBER := NULL;
666     l_povn                NUMBER := NULL;
667     l_obj_id              NUMBER;
668     l_obj_os              VARCHAR2(30);
669     l_obj_osr             VARCHAR2(255);
670     l_obj_type            VARCHAR2(30);
671 /*
672     CURSOR get_rel_party_ovn(l_subject_id NUMBER, l_object_id NUMBER,
673                              l_relationship_type VARCHAR2, l_relationship_code VARCHAR2) IS
674     SELECT p.object_version_number
675     FROM HZ_RELATIONSHIPS rel, HZ_PARTIES p
676     WHERE rel.subject_id = l_subject_id
677     AND rel.object_id = l_object_id
678     AND rel.relationship_type = l_relationship_type
679     AND rel.relationship_code = l_relationship_code
680     AND sysdate between rel.start_date and nvl(rel.end_date, sysdate)
681     AND rel.party_id = p.party_id
682     AND p.status in ('A','I');
683 */
684   BEGIN
685     -- Standard start of API savepoint
686     SAVEPOINT save_relationships_pvt;
687 
688     -- initialize API return status to success.
689     x_return_status := FND_API.G_RET_STS_SUCCESS;
690 
691     -- Debug info.
692     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
693         hz_utility_v2pub.debug(p_message=>'save_relationships(+)',
694                                p_prefix=>l_debug_prefix,
695                                p_msg_level=>fnd_log.level_procedure);
696     END IF;
697 
698     -- Create/Update relationship
699     FOR i IN 1..p_rel_objs.COUNT LOOP
700       -- Get object id and os+osr
701       l_obj_id := p_rel_objs(i).related_object_id;
702       l_obj_os := p_rel_objs(i).related_object_os;
703       l_obj_osr := p_rel_objs(i).related_object_osr;
704       IF(p_rel_objs(i).related_object_type = 'ORG') THEN
705         l_obj_type := 'ORGANIZATION';
706       ELSE
707         l_obj_type := 'PERSON';
708       END IF;
709 
710       -- check if object id or os+osr is valid
711       hz_registry_validate_bo_pvt.validate_ssm_id(
712         px_id                => l_obj_id,
713         px_os                => l_obj_os,
714         px_osr               => l_obj_osr,
715         p_obj_type           => l_obj_type,
716         p_create_or_update   => 'U',
717         x_return_status      => x_return_status,
718         x_msg_count          => x_msg_count,
719         x_msg_data           => x_msg_data);
720 
721       IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
722         RAISE FND_API.G_EXC_ERROR;
723       ELSE
724         assign_relationship_rec(
725           p_relationship_obj   => p_rel_objs(i),
726           p_subject_id         => p_subject_id,
727           p_subject_type       => p_subject_type,
728           p_object_id          => l_obj_id,
729           p_object_type        => l_obj_type,
730           px_relationship_rec  => l_rel_rec
731         );
732 
733         -- check if the relationship record is create or update
734         hz_registry_validate_bo_pvt.check_relationship_op(
735           p_subject_id          => p_subject_id,
736           p_object_id           => l_rel_rec.object_id,
737           px_relationship_id    => l_rel_rec.relationship_id,
738           p_relationship_type   => l_rel_rec.relationship_type,
739           p_relationship_code   => l_rel_rec.relationship_code,
740           x_object_version_number => l_ovn,
741           x_party_obj_version_number => l_povn
742         );
743 
744         IF(l_rel_rec.relationship_id IS NULL) THEN
745           HZ_RELATIONSHIP_V2PUB.create_relationship(
746             p_relationship_rec          => l_rel_rec,
747             x_relationship_id           => l_rel_id,
748             x_party_id                  => l_party_id,
749             x_party_number              => l_party_number,
750             x_return_status             => x_return_status,
751             x_msg_count                 => x_msg_count,
752             x_msg_data                  => x_msg_data
753           );
754 
755           -- assign relationship_id and party_id
756           p_rel_objs(i).relationship_id := l_rel_id;
757         ELSE
758           -- clean up created_by_module for update
759           l_rel_rec.created_by_module := NULL;
760           HZ_RELATIONSHIP_V2PUB.update_relationship(
761             p_relationship_rec            => l_rel_rec,
762             p_object_version_number       => l_ovn,
763             p_party_object_version_number => l_povn,
764             x_return_status               => x_return_status,
765             x_msg_count                   => x_msg_count,
766             x_msg_data                    => x_msg_data
767           );
768 
769           -- assign relationship_id and party_id
770           p_rel_objs(i).relationship_id := l_rel_rec.relationship_id;
771         END IF;
772 
773         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
774           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
775             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_relationships, subject id: '||p_subject_id||' object id: '||p_rel_objs(i).related_object_id,
776                                    p_prefix=>l_debug_prefix,
777                                    p_msg_level=>fnd_log.level_procedure);
778           END IF;
779           RAISE FND_API.G_EXC_ERROR;
780         END IF;
781       END IF;
782     END LOOP;
783 
784     -- Debug info.
785     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
786          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
787                                p_msg_data=>x_msg_data,
788                                p_msg_type=>'WARNING',
789                                p_msg_level=>fnd_log.level_exception);
790     END IF;
791     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
792         hz_utility_v2pub.debug(p_message=>'save_relationships(-)',
793                                p_prefix=>l_debug_prefix,
794                                p_msg_level=>fnd_log.level_procedure);
795     END IF;
796   EXCEPTION
797     WHEN fnd_api.g_exc_error THEN
798       ROLLBACK TO save_relationships_pvt;
799       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
800       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
801       FND_MSG_PUB.ADD;
802 
803       x_return_status := fnd_api.g_ret_sts_error;
804 
805       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
806                                 p_count => x_msg_count,
807                                 p_data  => x_msg_data);
808 
809       -- Debug info.
810       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
811         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
812                                p_msg_data=>x_msg_data,
813                                p_msg_type=>'ERROR',
814                                p_msg_level=>fnd_log.level_error);
815       END IF;
816       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
817         hz_utility_v2pub.debug(p_message=>'save_relationships(-)',
818                                p_prefix=>l_debug_prefix,
819                                p_msg_level=>fnd_log.level_procedure);
820       END IF;
821     WHEN fnd_api.g_exc_unexpected_error THEN
822       ROLLBACK TO save_relationships_pvt;
823       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
824       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
825       FND_MSG_PUB.ADD;
826 
827       x_return_status := fnd_api.g_ret_sts_unexp_error;
828 
829       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
830                                 p_count => x_msg_count,
831                                 p_data  => x_msg_data);
832 
833       -- Debug info.
834       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
835         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
836                                p_msg_data=>x_msg_data,
837                                p_msg_type=>'UNEXPECTED ERROR',
838                                p_msg_level=>fnd_log.level_error);
839       END IF;
840       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
841         hz_utility_v2pub.debug(p_message=>'save_relationships(-)',
842                                p_prefix=>l_debug_prefix,
843                                p_msg_level=>fnd_log.level_procedure);
844       END IF;
845 
846     WHEN OTHERS THEN
847       ROLLBACK TO save_relationships_pvt;
848       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
849       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
850       FND_MSG_PUB.ADD;
851 
852       x_return_status := fnd_api.g_ret_sts_unexp_error;
853 
854       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
855       fnd_message.set_token('ERROR' ,SQLERRM);
856       fnd_msg_pub.add;
857 
858       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
859                                 p_count => x_msg_count,
860                                 p_data  => x_msg_data);
861 
862       -- Debug info.
863       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
864         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
865                                p_msg_data=>x_msg_data,
866                                p_msg_type=>'SQL ERROR',
867                                p_msg_level=>fnd_log.level_error);
868       END IF;
869       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
870         hz_utility_v2pub.debug(p_message=>'save_relationships(-)',
871                                p_prefix=>l_debug_prefix,
872                                p_msg_level=>fnd_log.level_procedure);
873       END IF;
874   END save_relationships;
875 
876   PROCEDURE create_relationship_obj(
877     p_init_msg_list       IN         VARCHAR2 := fnd_api.g_false,
878     p_rel_obj             IN OUT NOCOPY HZ_RELATIONSHIP_OBJ,
879     p_created_by_module   IN         VARCHAR2,
880     x_relationship_id     OUT NOCOPY NUMBER,
881     x_return_status       OUT NOCOPY VARCHAR2,
882     x_msg_count           OUT NOCOPY NUMBER,
883     x_msg_data            OUT NOCOPY VARCHAR2
884   ) IS
885     l_debug_prefix        VARCHAR2(30);
886     l_rel_rec             HZ_RELATIONSHIP_V2PUB.RELATIONSHIP_REC_TYPE;
887     l_subject_type        VARCHAR2(30);
888     l_object_type         VARCHAR2(30);
889     l_party_id            NUMBER;
890     l_party_number        VARCHAR2(30);
891     l_created_by_module   VARCHAR2(30);
892 
893   BEGIN
894     -- Standard start of API savepoint
895     SAVEPOINT create_relatobj_pvt;
896 
897     -- initialize API return status to success.
898     x_return_status := FND_API.G_RET_STS_SUCCESS;
899 
900     -- Initialize message list if p_init_msg_list is set to TRUE
901     IF FND_API.to_Boolean(p_init_msg_list) THEN
902       FND_MSG_PUB.initialize;
903     END IF;
904 
905     -- Debug info.
906     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
907         hz_utility_v2pub.debug(p_message=>'create_relatobj_pvt(+)',
908                                p_prefix=>l_debug_prefix,
909                                p_msg_level=>fnd_log.level_procedure);
910     END IF;
911 
912 
913     IF(p_created_by_module IS NULL) THEN
914        l_created_by_module := 'BO_API';
915     ELSE
916        l_created_by_module := p_created_by_module;
917     END IF;
918 
919     IF(p_rel_obj.parent_object_type = 'ORG') THEN
920       l_subject_type := 'ORGANIZATION';
921     ELSE
922       l_subject_type := p_rel_obj.parent_object_type;
923     END IF;
924     IF(p_rel_obj.related_object_type = 'ORG') THEN
925       l_object_type := 'ORGANIZATION';
926     ELSE
927       l_object_type := p_rel_obj.related_object_type;
928     END IF;
929 
930     assign_relationship_rec(
931       p_relationship_obj   => p_rel_obj,
932       p_subject_id         => p_rel_obj.parent_object_id,
933       p_subject_type       => l_subject_type,
934       p_object_id          => p_rel_obj.related_object_id,
935       p_object_type        => l_object_type,
936       px_relationship_rec  => l_rel_rec
937     );
938     l_rel_rec.created_by_module := l_created_by_module;
939 
940     HZ_RELATIONSHIP_V2PUB.create_relationship(
941       p_relationship_rec   => l_rel_rec,
942       x_relationship_id    => x_relationship_id,
943       x_party_id           => l_party_id,
944       x_party_number       => l_party_number,
945       x_return_status      => x_return_status,
946       x_msg_count          => x_msg_count,
947       x_msg_data           => x_msg_data
948     );
949 
950     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
951       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
952         hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_relationship_obj, subject id: '||p_rel_obj.parent_object_id||' object id: '||p_rel_obj.related_object_id,
953                                p_prefix=>l_debug_prefix,
954                                p_msg_level=>fnd_log.level_procedure);
955       END IF;
956       RAISE FND_API.G_EXC_ERROR;
957     END IF;
958 
959     -- assign relationship_id and party_id
960     p_rel_obj.relationship_id := x_relationship_id;
961 
962     -- Debug info.
963     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
964          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
965                                p_msg_data=>x_msg_data,
966                                p_msg_type=>'WARNING',
967                                p_msg_level=>fnd_log.level_exception);
968     END IF;
969     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
970         hz_utility_v2pub.debug(p_message=>'create_relatobj_pvt(-)',
971                                p_prefix=>l_debug_prefix,
972                                p_msg_level=>fnd_log.level_procedure);
973     END IF;
974   EXCEPTION
975     WHEN fnd_api.g_exc_error THEN
976       ROLLBACK TO create_relatobj_pvt;
977       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
978       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
979       FND_MSG_PUB.ADD;
980 
981       x_return_status := fnd_api.g_ret_sts_error;
982 
983       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
984                                 p_count => x_msg_count,
985                                 p_data  => x_msg_data);
986 
987       -- Debug info.
988       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
989         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
990                                p_msg_data=>x_msg_data,
991                                p_msg_type=>'ERROR',
992                                p_msg_level=>fnd_log.level_error);
993       END IF;
994       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
995         hz_utility_v2pub.debug(p_message=>'create_relatobj_pvt(-)',
996                                p_prefix=>l_debug_prefix,
997                                p_msg_level=>fnd_log.level_procedure);
998       END IF;
999     WHEN fnd_api.g_exc_unexpected_error THEN
1000       ROLLBACK TO create_relatobj_pvt;
1001       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1002       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1003       FND_MSG_PUB.ADD;
1004 
1005       x_return_status := fnd_api.g_ret_sts_unexp_error;
1006 
1007       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1008                                 p_count => x_msg_count,
1009                                 p_data  => x_msg_data);
1010 
1011       -- Debug info.
1012       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1013         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1014                                p_msg_data=>x_msg_data,
1015                                p_msg_type=>'UNEXPECTED ERROR',
1016                                p_msg_level=>fnd_log.level_error);
1017       END IF;
1018       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1019         hz_utility_v2pub.debug(p_message=>'create_relatobj_pvt(-)',
1020                                p_prefix=>l_debug_prefix,
1021                                p_msg_level=>fnd_log.level_procedure);
1022       END IF;
1023 
1024     WHEN OTHERS THEN
1025       ROLLBACK TO create_relatobj_pvt;
1026       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1027       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1028       FND_MSG_PUB.ADD;
1029 
1030       x_return_status := fnd_api.g_ret_sts_unexp_error;
1031 
1032       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1033       fnd_message.set_token('ERROR' ,SQLERRM);
1034       fnd_msg_pub.add;
1035 
1036       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1037                                 p_count => x_msg_count,
1038                                 p_data  => x_msg_data);
1039 
1040       -- Debug info.
1041       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1042         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1043                                p_msg_data=>x_msg_data,
1044                                p_msg_type=>'SQL ERROR',
1045                                p_msg_level=>fnd_log.level_error);
1046       END IF;
1047       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1048         hz_utility_v2pub.debug(p_message=>'create_relatobj_pvt(-)',
1049                                p_prefix=>l_debug_prefix,
1050                                p_msg_level=>fnd_log.level_procedure);
1051       END IF;
1052   END create_relationship_obj;
1053 
1054   PROCEDURE update_relationship_obj(
1055     p_init_msg_list       IN         VARCHAR2 := fnd_api.g_false,
1056     p_rel_obj             IN OUT NOCOPY HZ_RELATIONSHIP_OBJ,
1057     x_relationship_id     OUT NOCOPY NUMBER,
1058     x_return_status       OUT NOCOPY VARCHAR2,
1059     x_msg_count           OUT NOCOPY NUMBER,
1060     x_msg_data            OUT NOCOPY VARCHAR2
1061   ) IS
1062     l_debug_prefix        VARCHAR2(30);
1063     l_rel_id              NUMBER;
1064     l_party_id            NUMBER;
1065     l_party_number        VARCHAR2(30);
1066     l_rel_rec             HZ_RELATIONSHIP_V2PUB.RELATIONSHIP_REC_TYPE;
1067     l_subject_type        VARCHAR2(30);
1068     l_object_type         VARCHAR2(30);
1069     l_ovn                 NUMBER;
1070     l_povn                NUMBER;
1071     l_subject_id          NUMBER;
1072     l_object_id           NUMBER;
1073 
1074     CURSOR get_rel_by_id(l_rel_id NUMBER) IS
1075     SELECT relationship_id, nvl(rel.object_version_number,1), nvl(p.object_version_number,1)
1076     FROM HZ_RELATIONSHIPS rel, HZ_PARTIES p
1077     WHERE rel.relationship_id = l_rel_id
1078     AND rel.party_id = p.party_id
1079     AND rel.status in ('A','I')
1080     AND rownum = 1;
1081   BEGIN
1082     -- Standard start of API savepoint
1083     SAVEPOINT update_relatobj_pvt;
1084 
1085     -- initialize API return status to success.
1086     x_return_status := FND_API.G_RET_STS_SUCCESS;
1087 
1088     -- Initialize message list if p_init_msg_list is set to TRUE
1089     IF FND_API.to_Boolean(p_init_msg_list) THEN
1090       FND_MSG_PUB.initialize;
1091     END IF;
1092 
1093     -- Debug info.
1094     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1095         hz_utility_v2pub.debug(p_message=>'update_relatobj_pvt(+)',
1096                                p_prefix=>l_debug_prefix,
1097                                p_msg_level=>fnd_log.level_procedure);
1098     END IF;
1099 
1100     IF(p_rel_obj.parent_object_type = 'ORG') THEN
1101       l_subject_type := 'ORGANIZATION';
1102     ELSE
1103       l_subject_type := p_rel_obj.parent_object_type;
1104     END IF;
1105     IF(p_rel_obj.related_object_type = 'ORG') THEN
1106       l_object_type := 'ORGANIZATION';
1107     ELSE
1108       l_object_type := p_rel_obj.related_object_type;
1109     END IF;
1110 
1111     -- user must pass in relationship_id
1112     OPEN get_rel_by_id(p_rel_obj.relationship_id);
1113     FETCH get_rel_by_id INTO x_relationship_id, l_ovn, l_povn;
1114     CLOSE get_rel_by_id;
1115 
1116     assign_relationship_rec(
1117       p_relationship_obj   => p_rel_obj,
1118       p_subject_id         => p_rel_obj.parent_object_id,
1119       p_subject_type       => l_subject_type,
1120       p_object_id          => p_rel_obj.related_object_id,
1121       p_object_type        => l_object_type,
1122       px_relationship_rec  => l_rel_rec
1123     );
1124 
1125     HZ_RELATIONSHIP_V2PUB.update_relationship(
1126       p_relationship_rec            => l_rel_rec,
1127       p_object_version_number       => l_ovn,
1128       p_party_object_version_number => l_povn,
1129       x_return_status               => x_return_status,
1130       x_msg_count                   => x_msg_count,
1131       x_msg_data                    => x_msg_data
1132     );
1133 
1134     -- assign relationship_id
1135     p_rel_obj.relationship_id := x_relationship_id;
1136 
1137     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1138       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1139         hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.update_relationship_obj, subject id: '||p_rel_obj.parent_object_id||' object id: '||p_rel_obj.related_object_id,
1140                                p_prefix=>l_debug_prefix,
1141                                p_msg_level=>fnd_log.level_procedure);
1142       END IF;
1143       RAISE FND_API.G_EXC_ERROR;
1144     END IF;
1145 
1146     -- Debug info.
1147     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1148          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1149                                p_msg_data=>x_msg_data,
1150                                p_msg_type=>'WARNING',
1151                                p_msg_level=>fnd_log.level_exception);
1152     END IF;
1153     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1154         hz_utility_v2pub.debug(p_message=>'update_relatobj_pvt(-)',
1155                                p_prefix=>l_debug_prefix,
1156                                p_msg_level=>fnd_log.level_procedure);
1157     END IF;
1158   EXCEPTION
1159     WHEN fnd_api.g_exc_error THEN
1160       ROLLBACK TO update_relatobj_pvt;
1161       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1162       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1163       FND_MSG_PUB.ADD;
1164 
1165       x_return_status := fnd_api.g_ret_sts_error;
1166 
1167       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1168                                 p_count => x_msg_count,
1169                                 p_data  => x_msg_data);
1170 
1171       -- Debug info.
1172       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1173         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1174                                p_msg_data=>x_msg_data,
1175                                p_msg_type=>'ERROR',
1176                                p_msg_level=>fnd_log.level_error);
1177       END IF;
1178       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1179         hz_utility_v2pub.debug(p_message=>'update_relatobj_pvt(-)',
1180                                p_prefix=>l_debug_prefix,
1181                                p_msg_level=>fnd_log.level_procedure);
1182       END IF;
1183     WHEN fnd_api.g_exc_unexpected_error THEN
1184       ROLLBACK TO update_relatobj_pvt;
1185       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1186       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1187       FND_MSG_PUB.ADD;
1188 
1189       x_return_status := fnd_api.g_ret_sts_unexp_error;
1190 
1191       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1192                                 p_count => x_msg_count,
1193                                 p_data  => x_msg_data);
1194 
1195       -- Debug info.
1196       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1197         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1198                                p_msg_data=>x_msg_data,
1199                                p_msg_type=>'UNEXPECTED ERROR',
1200                                p_msg_level=>fnd_log.level_error);
1201       END IF;
1202       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1203         hz_utility_v2pub.debug(p_message=>'update_relatobj_pvt(-)',
1204                                p_prefix=>l_debug_prefix,
1205                                p_msg_level=>fnd_log.level_procedure);
1206       END IF;
1207 
1208     WHEN OTHERS THEN
1209       ROLLBACK TO update_relatobj_pvt;
1210       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1211       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1212       FND_MSG_PUB.ADD;
1213 
1214       x_return_status := fnd_api.g_ret_sts_unexp_error;
1215 
1216       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1217       fnd_message.set_token('ERROR' ,SQLERRM);
1218       fnd_msg_pub.add;
1219 
1220       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1221                                 p_count => x_msg_count,
1222                                 p_data  => x_msg_data);
1223 
1224       -- Debug info.
1225       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1226         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1227                                p_msg_data=>x_msg_data,
1228                                p_msg_type=>'SQL ERROR',
1229                                p_msg_level=>fnd_log.level_error);
1230       END IF;
1231       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1232         hz_utility_v2pub.debug(p_message=>'update_relatobj_pvt(-)',
1233                                p_prefix=>l_debug_prefix,
1234                                p_msg_level=>fnd_log.level_procedure);
1235       END IF;
1236   END update_relationship_obj;
1237 
1238   PROCEDURE save_relationship_obj(
1239     p_init_msg_list       IN         VARCHAR2 := fnd_api.g_false,
1240     p_rel_obj             IN OUT NOCOPY HZ_RELATIONSHIP_OBJ,
1241     p_created_by_module   IN         VARCHAR2,
1242     x_relationship_id     OUT NOCOPY NUMBER,
1243     x_return_status       OUT NOCOPY VARCHAR2,
1244     x_msg_count           OUT NOCOPY NUMBER,
1245     x_msg_data            OUT NOCOPY VARCHAR2
1246   ) IS
1247     l_debug_prefix        VARCHAR2(30);
1248     l_rel_rec             HZ_RELATIONSHIP_V2PUB.RELATIONSHIP_REC_TYPE;
1249     l_subject_type        VARCHAR2(30);
1250     l_object_type         VARCHAR2(30);
1251     l_ovn                 NUMBER;
1252     l_povn                NUMBER;
1253     l_party_id            NUMBER;
1254     l_party_number        VARCHAR2(30);
1255     l_subject_id          NUMBER;
1256     l_object_id           NUMBER;
1257     l_created_by_module   VARCHAR2(30);
1258 
1259     CURSOR get_rel_by_id(l_rel_id NUMBER) IS
1260     SELECT relationship_id, nvl(rel.object_version_number,1), nvl(p.object_version_number,1)
1261     FROM HZ_RELATIONSHIPS rel, HZ_PARTIES p
1262     WHERE rel.relationship_id = l_rel_id
1263     AND rel.party_id = p.party_id
1264     AND rel.status in ('A','I')
1265     AND rownum = 1;
1266   BEGIN
1267     -- Standard start of API savepoint
1268     SAVEPOINT save_relatobj_pvt;
1269 
1270     -- initialize API return status to success.
1271     x_return_status := FND_API.G_RET_STS_SUCCESS;
1272 
1273     -- Initialize message list if p_init_msg_list is set to TRUE
1274     IF FND_API.to_Boolean(p_init_msg_list) THEN
1275       FND_MSG_PUB.initialize;
1276     END IF;
1277 
1278 
1279     -- Debug info.
1280     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1281         hz_utility_v2pub.debug(p_message=>'save_relatobj_pvt(+)',
1282                                p_prefix=>l_debug_prefix,
1283                                p_msg_level=>fnd_log.level_procedure);
1284     END IF;
1285 
1286     IF(p_created_by_module IS NULL) THEN
1287        l_created_by_module := 'BO_API';
1288     ELSE
1289        l_created_by_module := p_created_by_module;
1290     END IF;
1291 
1292     IF(p_rel_obj.parent_object_type = 'ORG') THEN
1293       l_subject_type := 'ORGANIZATION';
1294     ELSE
1295       l_subject_type := p_rel_obj.parent_object_type;
1296     END IF;
1297     IF(p_rel_obj.related_object_type = 'ORG') THEN
1298       l_object_type := 'ORGANIZATION';
1299     ELSE
1300       l_object_type := p_rel_obj.related_object_type;
1301     END IF;
1302 
1303     IF(p_rel_obj.relationship_id IS NOT NULL) THEN
1304       -- for update, get object version number of relationship and relationship party
1305       OPEN get_rel_by_id(p_rel_obj.relationship_id);
1306       FETCH get_rel_by_id INTO x_relationship_id, l_ovn, l_povn;
1307       CLOSE get_rel_by_id;
1308     END IF;
1309 
1310     assign_relationship_rec(
1311       p_relationship_obj   => p_rel_obj,
1312       p_subject_id         => p_rel_obj.parent_object_id,
1313       p_subject_type       => l_subject_type,
1314       p_object_id          => p_rel_obj.related_object_id,
1315       p_object_type        => l_object_type,
1316       px_relationship_rec  => l_rel_rec
1317     );
1318 
1319     IF(p_rel_obj.relationship_id IS NULL) THEN
1320       l_rel_rec.created_by_module := l_created_by_module;
1321       HZ_RELATIONSHIP_V2PUB.create_relationship(
1322         p_relationship_rec   => l_rel_rec,
1323         x_relationship_id    => x_relationship_id,
1324         x_party_id           => l_party_id,
1325         x_party_number       => l_party_number,
1326         x_return_status      => x_return_status,
1327         x_msg_count          => x_msg_count,
1328         x_msg_data           => x_msg_data
1329       );
1330 
1331       -- assign relationship_id
1332       p_rel_obj.relationship_id := x_relationship_id;
1333     ELSE
1334       HZ_RELATIONSHIP_V2PUB.update_relationship(
1335         p_relationship_rec            => l_rel_rec,
1336         p_object_version_number       => l_ovn,
1337         p_party_object_version_number => l_povn,
1338         x_return_status               => x_return_status,
1339         x_msg_count                   => x_msg_count,
1340         x_msg_data                    => x_msg_data
1341       );
1342 
1343       -- assign relationship_id
1344       p_rel_obj.relationship_id := x_relationship_id;
1345     END IF;
1346 
1347     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1348       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1349         hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_relationship_obj, subject id: '||p_rel_obj.parent_object_id||' object id: '||p_rel_obj.related_object_id,
1350                                p_prefix=>l_debug_prefix,
1351                                p_msg_level=>fnd_log.level_procedure);
1352       END IF;
1353       RAISE FND_API.G_EXC_ERROR;
1354     END IF;
1355 
1356     -- Debug info.
1357     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1358          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1359                                p_msg_data=>x_msg_data,
1360                                p_msg_type=>'WARNING',
1361                                p_msg_level=>fnd_log.level_exception);
1362     END IF;
1363     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1364         hz_utility_v2pub.debug(p_message=>'save_relatobj_pvt(-)',
1365                                p_prefix=>l_debug_prefix,
1366                                p_msg_level=>fnd_log.level_procedure);
1367     END IF;
1368   EXCEPTION
1369     WHEN fnd_api.g_exc_error THEN
1370       ROLLBACK TO save_relatobj_pvt;
1371       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1372       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1373       FND_MSG_PUB.ADD;
1374 
1375       x_return_status := fnd_api.g_ret_sts_error;
1376 
1377       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1378                                 p_count => x_msg_count,
1379                                 p_data  => x_msg_data);
1380 
1381       -- Debug info.
1382       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1383         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1384                                p_msg_data=>x_msg_data,
1385                                p_msg_type=>'ERROR',
1386                                p_msg_level=>fnd_log.level_error);
1387       END IF;
1388       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1389         hz_utility_v2pub.debug(p_message=>'save_relatobj_pvt(-)',
1390                                p_prefix=>l_debug_prefix,
1391                                p_msg_level=>fnd_log.level_procedure);
1392       END IF;
1393     WHEN fnd_api.g_exc_unexpected_error THEN
1394       ROLLBACK TO save_relatobj_pvt;
1395       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1396       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1397       FND_MSG_PUB.ADD;
1398 
1399       x_return_status := fnd_api.g_ret_sts_unexp_error;
1400 
1401       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1402                                 p_count => x_msg_count,
1403                                 p_data  => x_msg_data);
1404 
1405       -- Debug info.
1406       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1407         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1408                                p_msg_data=>x_msg_data,
1409                                p_msg_type=>'UNEXPECTED ERROR',
1410                                p_msg_level=>fnd_log.level_error);
1411       END IF;
1412       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1413         hz_utility_v2pub.debug(p_message=>'save_relatobj_pvt(-)',
1414                                p_prefix=>l_debug_prefix,
1415                                p_msg_level=>fnd_log.level_procedure);
1416       END IF;
1417 
1418     WHEN OTHERS THEN
1419       ROLLBACK TO save_relatobj_pvt;
1420       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1421       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_RELATIONSHIPS');
1422       FND_MSG_PUB.ADD;
1423 
1424       x_return_status := fnd_api.g_ret_sts_unexp_error;
1425 
1426       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1427       fnd_message.set_token('ERROR' ,SQLERRM);
1428       fnd_msg_pub.add;
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=>'SQL 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=>'save_relatobj_pvt(-)',
1443                                p_prefix=>l_debug_prefix,
1444                                p_msg_level=>fnd_log.level_procedure);
1445       END IF;
1446   END save_relationship_obj;
1447 
1448   -- PROCEDURE get_relationship_obj
1449   --
1450   -- DESCRIPTION
1451   --     Get relationship.
1452   --
1453   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1454   --
1455   -- ARGUMENTS
1456   --   IN:
1457   --     p_init_msg_list      Initialize message stack if it is set to  FND_API.G_TRUE. Default is FND_API.G_FALSE.
1458   --     p_relationship_id    Relationship Id.
1459   --   OUT:
1460   --     x_relationship_obj   Relationship object.
1461   --     x_return_status      Return status after the call. The status can
1462   --                          be fnd_api.g_ret_sts_success (success),
1463   --                          fnd_api.g_ret_sts_error (error),
1464   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1465   --     x_msg_count          Number of messages in message stack.
1466   --     x_msg_data           Message text if x_msg_count is 1.
1467   --
1468   -- NOTES
1469   --
1470   -- MODIFICATION HISTORY
1471   --
1472   --   14-DEC-2004    Arnold Ng          Created.
1473   --
1474 
1475   PROCEDURE get_relationship_obj(
1476     p_init_msg_list		 IN         VARCHAR2 := FND_API.G_FALSE,
1477     p_relationship_id            IN         NUMBER,
1478     x_relationship_obj           OUT NOCOPY HZ_RELATIONSHIP_OBJ,
1479     x_return_status              OUT NOCOPY VARCHAR2,
1480     x_msg_count                  OUT NOCOPY NUMBER,
1481     x_msg_data                   OUT NOCOPY VARCHAR2
1482   ) IS
1483     l_debug_prefix    VARCHAR2(30) := '';
1484 
1485     CURSOR c1(l_relationship_id NUMBER) IS
1486       SELECT HZ_RELATIONSHIP_OBJ(
1487         NULL, -- ACTION_TYPE
1488         NULL, --COMMON_OBJ_ID
1489         RELATIONSHIP_ID,
1490         DECODE(SUBJECT_TYPE, 'ORGANIZATION', 'ORG', SUBJECT_TYPE),
1491         SUBJECT_ID,
1492         OBJECT_ID,
1493         DECODE(OBJECT_TYPE, 'ORGANIZATION', 'ORG', OBJECT_TYPE),
1494         NULL, --OBJECT_ORIG_SYSTEM_REFERENCE,
1495         NULL, --OBJECT_ORIG_SYSTEM,
1496         RELATIONSHIP_CODE,
1497         RELATIONSHIP_TYPE,
1498         COMMENTS,
1499         START_DATE,
1500         END_DATE,
1501         STATUS,
1502         ATTRIBUTE_CATEGORY,
1503         ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
1504         ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10,
1505         ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15,
1506         ATTRIBUTE16, ATTRIBUTE17, ATTRIBUTE18, ATTRIBUTE19, ATTRIBUTE20,
1507         PROGRAM_UPDATE_DATE,
1508         CREATED_BY_MODULE,
1509         HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(CREATED_BY),
1510         CREATION_DATE,
1511         LAST_UPDATE_DATE,
1512         HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(LAST_UPDATED_BY),
1513         ADDITIONAL_INFORMATION1, ADDITIONAL_INFORMATION2,
1514         ADDITIONAL_INFORMATION3, ADDITIONAL_INFORMATION4,
1515         ADDITIONAL_INFORMATION5, ADDITIONAL_INFORMATION6,
1516         ADDITIONAL_INFORMATION7, ADDITIONAL_INFORMATION8,
1517         ADDITIONAL_INFORMATION9, ADDITIONAL_INFORMATION10,
1518         ADDITIONAL_INFORMATION11, ADDITIONAL_INFORMATION12,
1519         ADDITIONAL_INFORMATION13, ADDITIONAL_INFORMATION14,
1520         ADDITIONAL_INFORMATION15, ADDITIONAL_INFORMATION16,
1521         ADDITIONAL_INFORMATION17, ADDITIONAL_INFORMATION18,
1522         ADDITIONAL_INFORMATION19, ADDITIONAL_INFORMATION20,
1523         ADDITIONAL_INFORMATION21, ADDITIONAL_INFORMATION22,
1524         ADDITIONAL_INFORMATION23, ADDITIONAL_INFORMATION24,
1525         ADDITIONAL_INFORMATION25, ADDITIONAL_INFORMATION26,
1526         ADDITIONAL_INFORMATION27, ADDITIONAL_INFORMATION28,
1527         ADDITIONAL_INFORMATION29, ADDITIONAL_INFORMATION30,
1528         PERCENTAGE_OWNERSHIP,
1529         ACTUAL_CONTENT_SOURCE,
1530         CAST(MULTISET (
1531           SELECT HZ_ORIG_SYS_REF_OBJ(
1532           NULL, --P_ACTION_TYPE,
1533           ORIG_SYSTEM_REF_ID,
1534           ORIG_SYSTEM,
1535           ORIG_SYSTEM_REFERENCE,
1536           HZ_EXTRACT_BO_UTIL_PVT.get_parent_object_type(OWNER_TABLE_NAME,OWNER_TABLE_ID),
1537           OWNER_TABLE_ID,
1538           STATUS,
1539           REASON_CODE,
1540           OLD_ORIG_SYSTEM_REFERENCE,
1541           START_DATE_ACTIVE,
1542           END_DATE_ACTIVE,
1543           PROGRAM_UPDATE_DATE,
1544           CREATED_BY_MODULE,
1545           HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(CREATED_BY),
1546           CREATION_DATE,
1547           LAST_UPDATE_DATE,
1548           HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(LAST_UPDATED_BY),
1549           ATTRIBUTE_CATEGORY,
1550           ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
1551           ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10,
1552           ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15,
1553           ATTRIBUTE16, ATTRIBUTE17, ATTRIBUTE18, ATTRIBUTE19, ATTRIBUTE20)
1554           FROM HZ_ORIG_SYS_REFERENCES OSR
1555           WHERE OSR.OWNER_TABLE_ID = REL.SUBJECT_ID
1556           AND OWNER_TABLE_NAME = 'HZ_PARTIES'
1557           AND STATUS = 'A') AS HZ_ORIG_SYS_REF_OBJ_TBL))
1558         FROM HZ_RELATIONSHIPS REL
1559         WHERE RELATIONSHIP_ID = l_relationship_id
1560         AND DIRECTIONAL_FLAG = 'F';
1561 
1562   BEGIN
1563     -- initialize API return status to success.
1564     x_return_status := FND_API.G_RET_STS_SUCCESS;
1565 
1566     -- Initialize message list if p_init_msg_list is set to TRUE
1567     IF FND_API.to_Boolean(p_init_msg_list) THEN
1568       FND_MSG_PUB.initialize;
1569     END IF;
1570 
1571     -- Debug info.
1572     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1573       hz_utility_v2pub.debug(p_message=>'hz_party_bo_pvt.get_relationship_obj (+)',
1574                              p_prefix=>l_debug_prefix,
1575                              p_msg_level=>fnd_log.level_procedure);
1576     END IF;
1577 
1578     OPEN c1(p_relationship_id);
1579     FETCH c1 into x_relationship_obj;
1580     CLOSE c1;
1581 
1582     -- Debug info.
1583     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1584       hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1585                                              p_msg_data=>x_msg_data,
1586                                              p_msg_type=>'WARNING',
1587                                              p_msg_level=>fnd_log.level_exception);
1588     END IF;
1589 
1590     -- Debug info.
1591     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1592       hz_utility_v2pub.debug(p_message=>'hz_party_bo_pvt.get_relationship_obj (-)',
1593                              p_prefix=>l_debug_prefix,
1594                              p_msg_level=>fnd_log.level_procedure);
1595     END IF;
1596   EXCEPTION
1597     WHEN fnd_api.g_exc_error THEN
1598       x_return_status := fnd_api.g_ret_sts_error;
1599       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1600                                 p_count => x_msg_count,
1601                                 p_data  => x_msg_data);
1602 
1603       -- Debug info.
1604       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1605         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1606                                p_msg_data=>x_msg_data,
1607                                p_msg_type=>'ERROR',
1608                                p_msg_level=>fnd_log.level_error);
1609       END IF;
1610       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1611         hz_utility_v2pub.debug(p_message=>'get_relationship_obj (-)',
1612                                p_prefix=>l_debug_prefix,
1613                                p_msg_level=>fnd_log.level_procedure);
1614       END IF;
1615     WHEN fnd_api.g_exc_unexpected_error THEN
1616       x_return_status := fnd_api.g_ret_sts_unexp_error;
1617       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1618                                 p_count => x_msg_count,
1619                                 p_data  => x_msg_data);
1620 
1621       -- Debug info.
1622       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1623         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1624                                p_msg_data=>x_msg_data,
1625                                p_msg_type=>'UNEXPECTED ERROR',
1626                                p_msg_level=>fnd_log.level_error);
1627       END IF;
1628       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1629         hz_utility_v2pub.debug(p_message=>'get_relationship_obj (-)',
1630                                p_prefix=>l_debug_prefix,
1631                                p_msg_level=>fnd_log.level_procedure);
1632       END IF;
1633 
1634     WHEN OTHERS THEN
1635       x_return_status := fnd_api.g_ret_sts_unexp_error;
1636 
1637       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1638       fnd_message.set_token('ERROR' ,SQLERRM);
1639       fnd_msg_pub.add;
1640 
1641       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1642                                 p_count => x_msg_count,
1643                                 p_data  => x_msg_data);
1644 
1645       -- Debug info.
1646       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1647         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1648                                p_msg_data=>x_msg_data,
1649                                p_msg_type=>'SQL ERROR',
1650                                p_msg_level=>fnd_log.level_error);
1651       END IF;
1652       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1653         hz_utility_v2pub.debug(p_message=>'get_relationship_obj (-)',
1654                                p_prefix=>l_debug_prefix,
1655                                p_msg_level=>fnd_log.level_procedure);
1656       END IF;
1657   END get_relationship_obj;
1658 
1659   -- PROCEDURE create_classifications
1660   --
1661   -- DESCRIPTION
1662   --     Create classifications.
1663   --
1664   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1665   --
1666   -- ARGUMENTS
1667   --   IN:
1668   --     p_code_assign_objs   List of classification objects.
1669   -- PROCEDURE create_classifications
1670   --
1671   -- DESCRIPTION
1672   --     Create classifications.
1673   --
1674   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1675   --
1676   -- ARGUMENTS
1677   --   IN:
1678   --     p_code_assign_objs   List of classification objects.
1679   --     p_owner_table_name   Owner table name.
1680   --     p_owner_table_id     Owner table Id.
1681   --   OUT:
1682   --     x_return_status      Return status after the call. The status can
1683   --                          be fnd_api.g_ret_sts_success (success),
1684   --                          fnd_api.g_ret_sts_error (error),
1685   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1686   --     x_msg_count          Number of messages in message stack.
1687   --     x_msg_data           Message text if x_msg_count is 1.
1688   --
1689   -- NOTES
1690   --
1691   -- MODIFICATION HISTORY
1692   --
1693   --   14-DEC-2004    Arnold Ng          Created.
1694   --
1695 
1696   PROCEDURE create_classifications(
1697     p_code_assign_objs           IN OUT NOCOPY hz_code_assignment_obj_tbl,
1698     p_owner_table_name           IN         VARCHAR2,
1699     p_owner_table_id             IN         NUMBER,
1700     x_return_status              OUT NOCOPY VARCHAR2,
1701     x_msg_count                  OUT NOCOPY NUMBER,
1702     x_msg_data                   OUT NOCOPY VARCHAR2
1703   )IS
1704     l_debug_prefix        VARCHAR2(30);
1705     l_code_assign_id      NUMBER;
1706     l_code_assign_rec     HZ_CLASSIFICATION_V2PUB.CODE_ASSIGNMENT_REC_TYPE;
1707   BEGIN
1708     -- Standard start of API savepoint
1709     SAVEPOINT create_classifications_pvt;
1710 
1711     -- initialize API return status to success.
1712     x_return_status := FND_API.G_RET_STS_SUCCESS;
1713 
1714     -- Debug info.
1715     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1716         hz_utility_v2pub.debug(p_message=>'create_classifications(+)',
1717                                p_prefix=>l_debug_prefix,
1718                                p_msg_level=>fnd_log.level_procedure);
1719     END IF;
1720 
1721     -- Create code assignments
1722     FOR i IN 1..p_code_assign_objs.COUNT LOOP
1723       assign_code_assign_rec(
1724         p_code_assign_obj    => p_code_assign_objs(i),
1725         p_owner_table_name   => p_owner_table_name,
1726         p_owner_table_id     => p_owner_table_id,
1727         px_code_assign_rec   => l_code_assign_rec
1728       );
1729 
1730       HZ_CLASSIFICATION_V2PUB.create_code_assignment(
1731         p_code_assignment_rec       => l_code_assign_rec,
1732         x_code_assignment_id        => l_code_assign_id,
1733         x_return_status             => x_return_status,
1734         x_msg_count                 => x_msg_count,
1735         x_msg_data                  => x_msg_data
1736       );
1737 
1738       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1739         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1740           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_classifications, owner table name: '||p_owner_table_name||' owner table id: '||p_owner_table_id,
1741                                  p_prefix=>l_debug_prefix,
1742                                  p_msg_level=>fnd_log.level_procedure);
1743         END IF;
1744         RAISE FND_API.G_EXC_ERROR;
1745       END IF;
1746 
1747       -- assign code_assignment_id
1748       p_code_assign_objs(i).code_assignment_id := l_code_assign_id;
1749     END LOOP;
1750 
1751     -- Debug info.
1752     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1753          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1754                                p_msg_data=>x_msg_data,
1755                                p_msg_type=>'WARNING',
1756                                p_msg_level=>fnd_log.level_exception);
1757     END IF;
1758     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1759         hz_utility_v2pub.debug(p_message=>'create_classifications(-)',
1760                                p_prefix=>l_debug_prefix,
1761                                p_msg_level=>fnd_log.level_procedure);
1762     END IF;
1763   EXCEPTION
1764     WHEN fnd_api.g_exc_error THEN
1765       ROLLBACK TO create_classifications_pvt;
1766       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1767       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
1768       FND_MSG_PUB.ADD;
1769 
1770       x_return_status := fnd_api.g_ret_sts_error;
1771 
1772       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1773                                 p_count => x_msg_count,
1774                                 p_data  => x_msg_data);
1775 
1776       -- Debug info.
1777       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1778         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1779                                p_msg_data=>x_msg_data,
1780                                p_msg_type=>'ERROR',
1781                                p_msg_level=>fnd_log.level_error);
1782       END IF;
1783       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1784         hz_utility_v2pub.debug(p_message=>'create_classifications(-)',
1785                                p_prefix=>l_debug_prefix,
1786                                p_msg_level=>fnd_log.level_procedure);
1787       END IF;
1788     WHEN fnd_api.g_exc_unexpected_error THEN
1789       ROLLBACK TO create_classifications_pvt;
1790       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1791       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
1792       FND_MSG_PUB.ADD;
1793 
1794       x_return_status := fnd_api.g_ret_sts_unexp_error;
1795 
1796       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1797                                 p_count => x_msg_count,
1798                                 p_data  => x_msg_data);
1799 
1800       -- Debug info.
1801       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1802         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1803                                p_msg_data=>x_msg_data,
1804                                p_msg_type=>'UNEXPECTED ERROR',
1805                                p_msg_level=>fnd_log.level_error);
1806       END IF;
1807       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1808         hz_utility_v2pub.debug(p_message=>'create_classifications(-)',
1809                                p_prefix=>l_debug_prefix,
1810                                p_msg_level=>fnd_log.level_procedure);
1811       END IF;
1812 
1813     WHEN OTHERS THEN
1814       ROLLBACK TO create_classifications_pvt;
1815       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1816       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
1817       FND_MSG_PUB.ADD;
1818 
1819       x_return_status := fnd_api.g_ret_sts_unexp_error;
1820 
1821       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1822       fnd_message.set_token('ERROR' ,SQLERRM);
1823       fnd_msg_pub.add;
1824 
1825       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1826                                 p_count => x_msg_count,
1827                                 p_data  => x_msg_data);
1828 
1829       -- Debug info.
1830       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1831         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1832                                p_msg_data=>x_msg_data,
1833                                p_msg_type=>'SQL ERROR',
1834                                p_msg_level=>fnd_log.level_error);
1835       END IF;
1836       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1837         hz_utility_v2pub.debug(p_message=>'create_classifications(-)',
1838                                p_prefix=>l_debug_prefix,
1839                                p_msg_level=>fnd_log.level_procedure);
1840       END IF;
1841   END create_classifications;
1842 
1843   -- PROCEDURE save_classifications
1844   --
1845   -- DESCRIPTION
1846   --     Create or update classifications.
1847   --
1848   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1849   --
1850   -- ARGUMENTS
1851   --   IN:
1852   --     p_code_assign_objs   List of classification objects.
1853   --     p_owner_table_name   Owner table name.
1854   --     p_owner_table_id     Owner table Id.
1855   --   OUT:
1856   --     x_return_status      Return status after the call. The status can
1857   --                          be fnd_api.g_ret_sts_success (success),
1858   --                          fnd_api.g_ret_sts_error (error),
1859   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1860   --     x_msg_count          Number of messages in message stack.
1861   --     x_msg_data           Message text if x_msg_count is 1.
1862   --
1863   -- NOTES
1864   --
1865   -- MODIFICATION HISTORY
1866   --
1867   --   14-DEC-2004    Arnold Ng          Created.
1868   --
1869 
1870   PROCEDURE save_classifications(
1871     p_code_assign_objs           IN OUT NOCOPY hz_code_assignment_obj_tbl,
1872     p_owner_table_name           IN         VARCHAR2,
1873     p_owner_table_id             IN         NUMBER,
1874     x_return_status              OUT NOCOPY VARCHAR2,
1875     x_msg_count                  OUT NOCOPY NUMBER,
1876     x_msg_data                   OUT NOCOPY VARCHAR2
1877   ) IS
1878     l_debug_prefix        VARCHAR2(30);
1879     l_code_assign_id      NUMBER;
1880     l_code_assign_rec     HZ_CLASSIFICATION_V2PUB.CODE_ASSIGNMENT_REC_TYPE;
1881     l_ovn                 NUMBER := NULL;
1882   BEGIN
1883     -- Standard start of API savepoint
1884     SAVEPOINT save_classifications_pvt;
1885 
1886     -- initialize API return status to success.
1887     x_return_status := FND_API.G_RET_STS_SUCCESS;
1888 
1889     -- Debug info.
1890     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1891         hz_utility_v2pub.debug(p_message=>'save_classifications(+)',
1892                                p_prefix=>l_debug_prefix,
1893                                p_msg_level=>fnd_log.level_procedure);
1894     END IF;
1895 
1896     -- Create/Update classification
1897     FOR i IN 1..p_code_assign_objs.COUNT LOOP
1898       assign_code_assign_rec(
1899         p_code_assign_obj    => p_code_assign_objs(i),
1900         p_owner_table_name   => p_owner_table_name,
1901         p_owner_table_id     => p_owner_table_id,
1902         px_code_assign_rec   => l_code_assign_rec
1903       );
1904 
1905       -- check if the code assignment record is create or update
1906       hz_registry_validate_bo_pvt.check_code_assign_op(
1907         p_owner_table_name    => p_owner_table_name,
1908         p_owner_table_id      => p_owner_table_id,
1909         px_code_assignment_id => l_code_assign_rec.code_assignment_id,
1910         p_class_category      => l_code_assign_rec.class_category,
1911         p_class_code          => l_code_assign_rec.class_code,
1912         x_object_version_number => l_ovn
1913       );
1914 
1915       IF (l_ovn = -1) THEN
1916         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1917           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.check_code_assign_op, owner table name: '||p_owner_table_name||' owner table id: '||p_owner_table_id,
1918                                  p_prefix=>l_debug_prefix,
1919                                  p_msg_level=>fnd_log.level_procedure);
1920         END IF;
1921         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
1922         FND_MSG_PUB.ADD;
1923         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1924         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
1925         FND_MSG_PUB.ADD;
1926         RAISE FND_API.G_EXC_ERROR;
1927       END IF;
1928 
1929       IF(l_ovn IS NULL) THEN
1930         HZ_CLASSIFICATION_V2PUB.create_code_assignment(
1931           p_code_assignment_rec       => l_code_assign_rec,
1932           x_return_status             => x_return_status,
1933           x_msg_count                 => x_msg_count,
1934           x_msg_data                  => x_msg_data,
1935           x_code_assignment_id        => l_code_assign_id
1936         );
1937 
1938         -- assign code_assignment_id
1939         p_code_assign_objs(i).code_assignment_id := l_code_assign_id;
1940       ELSE
1941         -- clean up created_by_module for update
1942         l_code_assign_rec.created_by_module := NULL;
1943         HZ_CLASSIFICATION_V2PUB.update_code_assignment(
1944           p_code_assignment_rec       => l_code_assign_rec,
1945           p_object_version_number     => l_ovn,
1946           x_return_status             => x_return_status,
1947           x_msg_count                 => x_msg_count,
1948           x_msg_data                  => x_msg_data
1949         );
1950 
1951         -- assign code_assignment_id
1952         p_code_assign_objs(i).code_assignment_id := l_code_assign_rec.code_assignment_id;
1953       END IF;
1954 
1955       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1956         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1957           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_classifications, owner table name: '||p_owner_table_name||' owner table id: '||p_owner_table_id,
1958                                  p_prefix=>l_debug_prefix,
1959                                  p_msg_level=>fnd_log.level_procedure);
1960         END IF;
1961         RAISE FND_API.G_EXC_ERROR;
1962       END IF;
1963     END LOOP;
1964 
1965     -- Debug info.
1966     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1967          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1968                                p_msg_data=>x_msg_data,
1969                                p_msg_type=>'WARNING',
1970                                p_msg_level=>fnd_log.level_exception);
1971     END IF;
1972     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1973         hz_utility_v2pub.debug(p_message=>'save_classifications(-)',
1974                                p_prefix=>l_debug_prefix,
1975                                p_msg_level=>fnd_log.level_procedure);
1976     END IF;
1977   EXCEPTION
1978     WHEN fnd_api.g_exc_error THEN
1979       ROLLBACK TO save_classifications_pvt;
1980       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
1981       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
1982       FND_MSG_PUB.ADD;
1983 
1984       x_return_status := fnd_api.g_ret_sts_error;
1985 
1986       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1987                                 p_count => x_msg_count,
1988                                 p_data  => x_msg_data);
1989 
1990       -- Debug info.
1991       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1992         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1993                                p_msg_data=>x_msg_data,
1994                                p_msg_type=>'ERROR',
1995                                p_msg_level=>fnd_log.level_error);
1996       END IF;
1997       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1998         hz_utility_v2pub.debug(p_message=>'save_classifications(-)',
1999                                p_prefix=>l_debug_prefix,
2000                                p_msg_level=>fnd_log.level_procedure);
2001       END IF;
2002     WHEN fnd_api.g_exc_unexpected_error THEN
2003       ROLLBACK TO save_classifications_pvt;
2004       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2005       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
2006       FND_MSG_PUB.ADD;
2007 
2008       x_return_status := fnd_api.g_ret_sts_unexp_error;
2009 
2010       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2011                                 p_count => x_msg_count,
2012                                 p_data  => x_msg_data);
2013 
2014       -- Debug info.
2015       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2016         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2017                                p_msg_data=>x_msg_data,
2018                                p_msg_type=>'UNEXPECTED ERROR',
2019                                p_msg_level=>fnd_log.level_error);
2020       END IF;
2021       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2022         hz_utility_v2pub.debug(p_message=>'save_classifications(-)',
2023                                p_prefix=>l_debug_prefix,
2024                                p_msg_level=>fnd_log.level_procedure);
2025       END IF;
2026     WHEN OTHERS THEN
2027       ROLLBACK TO save_classifications_pvt;
2028       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2029       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CODE_ASSIGNMENTS');
2030       FND_MSG_PUB.ADD;
2031 
2032       x_return_status := fnd_api.g_ret_sts_unexp_error;
2033 
2034       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2035       fnd_message.set_token('ERROR' ,SQLERRM);
2036       fnd_msg_pub.add;
2037 
2038       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2039                                 p_count => x_msg_count,
2040                                 p_data  => x_msg_data);
2041 
2042       -- Debug info.
2043       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2044         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2045                                p_msg_data=>x_msg_data,
2046                                p_msg_type=>'SQL ERROR',
2047                                p_msg_level=>fnd_log.level_error);
2048       END IF;
2049       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2050         hz_utility_v2pub.debug(p_message=>'save_classifications(-)',
2051                                p_prefix=>l_debug_prefix,
2052                                p_msg_level=>fnd_log.level_procedure);
2053       END IF;
2054   END save_classifications;
2055 
2056   -- PROCEDURE create_certifications
2057   --
2058   -- DESCRIPTION
2059   --     Create certifications.
2060   --
2061   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2062   --
2063   -- ARGUMENTS
2064   --   IN:
2065   --     p_cert_objs          List of certification objects.
2066   --     p_party_id           Party Id.
2067   --   OUT:
2068   --     x_return_status      Return status after the call. The status can
2069   --                          be fnd_api.g_ret_sts_success (success),
2070   --                          fnd_api.g_ret_sts_error (error),
2071   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2072   --     x_msg_count          Number of messages in message stack.
2073   --     x_msg_data           Message text if x_msg_count is 1.
2074   --
2075   -- NOTES
2076   --
2077   -- MODIFICATION HISTORY
2078   --
2079   --   14-DEC-2004    Arnold Ng          Created.
2080   --
2081 
2082   PROCEDURE create_certifications(
2083     p_cert_objs                  IN OUT NOCOPY hz_certification_obj_tbl,
2084     p_party_id                   IN         NUMBER,
2085     x_return_status              OUT NOCOPY VARCHAR2,
2086     x_msg_count                  OUT NOCOPY NUMBER,
2087     x_msg_data                   OUT NOCOPY VARCHAR2
2088   )IS
2089     l_debug_prefix        VARCHAR2(30);
2090     l_cert_id             NUMBER;
2091     l_cert_rec            HZ_ORG_INFO_PUB.CERTIFICATIONS_REC_TYPE;
2092   BEGIN
2093     -- Standard start of API savepoint
2094     SAVEPOINT create_certifications_pvt;
2095 
2096     -- initialize API return status to success.
2097     x_return_status := FND_API.G_RET_STS_SUCCESS;
2098 
2099     -- Debug info.
2100     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2101         hz_utility_v2pub.debug(p_message=>'create_certifications(+)',
2102                                p_prefix=>l_debug_prefix,
2103                                p_msg_level=>fnd_log.level_procedure);
2104     END IF;
2105 
2106     -- Create certification
2107     FOR i IN 1..p_cert_objs.COUNT LOOP
2108       assign_certification_rec(
2109         p_certification_obj  => p_cert_objs(i),
2110         p_party_id           => p_party_id,
2111         px_certification_rec => l_cert_rec
2112       );
2113 
2114       HZ_ORG_INFO_PUB.create_certifications(
2115         p_api_version               => 1.0,
2116         p_certifications_rec        => l_cert_rec,
2117         x_return_status             => x_return_status,
2118         x_msg_count                 => x_msg_count,
2119         x_msg_data                  => x_msg_data,
2120         x_certification_id          => l_cert_id
2121       );
2122 
2123       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2124         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2125           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_certifications, party id: '||p_party_id,
2126                                  p_prefix=>l_debug_prefix,
2127                                  p_msg_level=>fnd_log.level_procedure);
2128         END IF;
2129         RAISE FND_API.G_EXC_ERROR;
2130       END IF;
2131 
2132       -- assign certification_id
2133       p_cert_objs(i).certification_id := l_cert_id;
2134     END LOOP;
2135 
2136     -- Debug info.
2137     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2138          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2139                                p_msg_data=>x_msg_data,
2140                                p_msg_type=>'WARNING',
2141                                p_msg_level=>fnd_log.level_exception);
2142     END IF;
2143     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2144         hz_utility_v2pub.debug(p_message=>'create_certifications(-)',
2145                                p_prefix=>l_debug_prefix,
2146                                p_msg_level=>fnd_log.level_procedure);
2147     END IF;
2148   EXCEPTION
2149     WHEN fnd_api.g_exc_error THEN
2150       ROLLBACK TO create_certifications_pvt;
2151       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2152       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2153       FND_MSG_PUB.ADD;
2154 
2155       x_return_status := fnd_api.g_ret_sts_error;
2156 
2157       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2158                                 p_count => x_msg_count,
2159                                 p_data  => x_msg_data);
2160 
2161       -- Debug info.
2162       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2163         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2164                                p_msg_data=>x_msg_data,
2165                                p_msg_type=>'ERROR',
2166                                p_msg_level=>fnd_log.level_error);
2167       END IF;
2168       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2169         hz_utility_v2pub.debug(p_message=>'create_certifications(-)',
2170                                p_prefix=>l_debug_prefix,
2171                                p_msg_level=>fnd_log.level_procedure);
2172       END IF;
2173     WHEN fnd_api.g_exc_unexpected_error THEN
2174       ROLLBACK TO create_certifications_pvt;
2175       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2176       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2177       FND_MSG_PUB.ADD;
2178 
2179       x_return_status := fnd_api.g_ret_sts_unexp_error;
2180 
2181       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2182                                 p_count => x_msg_count,
2183                                 p_data  => x_msg_data);
2184 
2185       -- Debug info.
2186       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2187         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2188                                p_msg_data=>x_msg_data,
2189                                p_msg_type=>'UNEXPECTED ERROR',
2190                                p_msg_level=>fnd_log.level_error);
2191       END IF;
2192       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2193         hz_utility_v2pub.debug(p_message=>'create_certifications(-)',
2194                                p_prefix=>l_debug_prefix,
2195                                p_msg_level=>fnd_log.level_procedure);
2196       END IF;
2197 
2198     WHEN OTHERS THEN
2199       ROLLBACK TO create_certifications_pvt;
2200       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2201       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2202       FND_MSG_PUB.ADD;
2203 
2204       x_return_status := fnd_api.g_ret_sts_unexp_error;
2205 
2206       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2207       fnd_message.set_token('ERROR' ,SQLERRM);
2208       fnd_msg_pub.add;
2209 
2210       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2211                                 p_count => x_msg_count,
2212                                 p_data  => x_msg_data);
2213 
2214       -- Debug info.
2215       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2216         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2217                                p_msg_data=>x_msg_data,
2218                                p_msg_type=>'SQL ERROR',
2219                                p_msg_level=>fnd_log.level_error);
2220       END IF;
2221       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2222         hz_utility_v2pub.debug(p_message=>'create_certifications(-)',
2223                                p_prefix=>l_debug_prefix,
2224                                p_msg_level=>fnd_log.level_procedure);
2225       END IF;
2226   END create_certifications;
2227 
2228   -- PROCEDURE save_certifications
2229   --
2230   -- DESCRIPTION
2231   --     Create or update certifications.
2232   --
2233   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2234   --
2235   -- ARGUMENTS
2236   --   IN:
2237   --     p_cert_objs          List of certification objects.
2238   --     p_party_id           Party Id.
2239   --   OUT:
2240   --     x_return_status      Return status after the call. The status can
2241   --                          be fnd_api.g_ret_sts_success (success),
2242   --                          fnd_api.g_ret_sts_error (error),
2243   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2244   --     x_msg_count          Number of messages in message stack.
2245   --     x_msg_data           Message text if x_msg_count is 1.
2246   --
2247   -- NOTES
2248   --
2249   -- MODIFICATION HISTORY
2250   --
2251   --   14-DEC-2004    Arnold Ng          Created.
2252   --
2253 
2254   PROCEDURE save_certifications(
2255     p_cert_objs                  IN OUT NOCOPY hz_certification_obj_tbl,
2256     p_party_id                   IN         NUMBER,
2257     x_return_status              OUT NOCOPY VARCHAR2,
2258     x_msg_count                  OUT NOCOPY NUMBER,
2259     x_msg_data                   OUT NOCOPY VARCHAR2
2260   ) IS
2261     l_debug_prefix        VARCHAR2(30);
2262     l_cert_id             NUMBER;
2263     l_cert_rec            HZ_ORG_INFO_PUB.CERTIFICATIONS_REC_TYPE;
2264     l_lud                 DATE;
2265   BEGIN
2266     -- Standard start of API savepoint
2267     SAVEPOINT save_certifications_pvt;
2268 
2269     -- initialize API return status to success.
2270     x_return_status := FND_API.G_RET_STS_SUCCESS;
2271 
2272     -- Debug info.
2273     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2274         hz_utility_v2pub.debug(p_message=>'save_certifications(+)',
2275                                p_prefix=>l_debug_prefix,
2276                                p_msg_level=>fnd_log.level_procedure);
2277     END IF;
2278 
2279     -- Create/Update classification
2280     FOR i IN 1..p_cert_objs.COUNT LOOP
2281       assign_certification_rec(
2282         p_certification_obj  => p_cert_objs(i),
2283         p_party_id           => p_party_id,
2284         px_certification_rec => l_cert_rec
2285       );
2286 
2287       -- check if the code assignment record is create or update
2288       hz_registry_validate_bo_pvt.check_certification_op(
2289         p_party_id            => p_party_id,
2290         px_certification_id   => l_cert_rec.certification_id,
2291         p_certification_name  => l_cert_rec.certification_name,
2292         x_last_update_date    => l_lud,
2293         x_return_status       => x_return_status
2294       );
2295 
2296       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2297         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2298           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.check_certification_op, party id: '||p_party_id,
2299                                  p_prefix=>l_debug_prefix,
2300                                  p_msg_level=>fnd_log.level_procedure);
2301         END IF;
2302         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2303         FND_MSG_PUB.ADD;
2304         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2305         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2306         FND_MSG_PUB.ADD;
2307         RAISE FND_API.G_EXC_ERROR;
2308       END IF;
2309 
2310       IF(l_lud IS NULL) THEN
2311         HZ_ORG_INFO_PUB.create_certifications(
2312           p_api_version               => 1.0,
2313           p_certifications_rec        => l_cert_rec,
2314           x_return_status             => x_return_status,
2315           x_msg_count                 => x_msg_count,
2316           x_msg_data                  => x_msg_data,
2317           x_certification_id          => l_cert_id
2318         );
2319 
2320         -- assign certification_id
2321         p_cert_objs(i).certification_id := l_cert_id;
2322       ELSE
2323         HZ_ORG_INFO_PUB.update_certifications(
2324           p_api_version               => 1.0,
2325           p_certifications_rec        => l_cert_rec,
2326           p_last_update_date          => l_lud,
2327           x_return_status             => x_return_status,
2328           x_msg_count                 => x_msg_count,
2329           x_msg_data                  => x_msg_data
2330         );
2331 
2332         -- assign certification_id
2333         p_cert_objs(i).certification_id := l_cert_rec.certification_id;
2334       END IF;
2335 
2336       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2337         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2338           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_certifications, party id: '||p_party_id,
2339                                  p_prefix=>l_debug_prefix,
2340                                  p_msg_level=>fnd_log.level_procedure);
2341         END IF;
2342         RAISE FND_API.G_EXC_ERROR;
2343       END IF;
2344     END LOOP;
2345 
2346     -- Debug info.
2347     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2348          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2349                                p_msg_data=>x_msg_data,
2350                                p_msg_type=>'WARNING',
2351                                p_msg_level=>fnd_log.level_exception);
2352     END IF;
2353     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2354         hz_utility_v2pub.debug(p_message=>'save_certifications(-)',
2355                                p_prefix=>l_debug_prefix,
2356                                p_msg_level=>fnd_log.level_procedure);
2357     END IF;
2358   EXCEPTION
2359     WHEN fnd_api.g_exc_error THEN
2360       ROLLBACK TO save_certifications_pvt;
2361       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2362       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2363       FND_MSG_PUB.ADD;
2364 
2365       x_return_status := fnd_api.g_ret_sts_error;
2366 
2367       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2368                                 p_count => x_msg_count,
2369                                 p_data  => x_msg_data);
2370 
2371       -- Debug info.
2372       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2373         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2374                                p_msg_data=>x_msg_data,
2375                                p_msg_type=>'ERROR',
2376                                p_msg_level=>fnd_log.level_error);
2377       END IF;
2378       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2379         hz_utility_v2pub.debug(p_message=>'save_certifications(-)',
2380                                p_prefix=>l_debug_prefix,
2381                                p_msg_level=>fnd_log.level_procedure);
2382       END IF;
2383     WHEN fnd_api.g_exc_unexpected_error THEN
2384       ROLLBACK TO save_certifications_pvt;
2385       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2386       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2387       FND_MSG_PUB.ADD;
2388 
2389       x_return_status := fnd_api.g_ret_sts_unexp_error;
2390 
2391       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2392                                 p_count => x_msg_count,
2393                                 p_data  => x_msg_data);
2394 
2395       -- Debug info.
2396       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2397         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2398                                p_msg_data=>x_msg_data,
2399                                p_msg_type=>'UNEXPECTED ERROR',
2400                                p_msg_level=>fnd_log.level_error);
2401       END IF;
2402       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2403         hz_utility_v2pub.debug(p_message=>'save_certifications(-)',
2404                                p_prefix=>l_debug_prefix,
2405                                p_msg_level=>fnd_log.level_procedure);
2406       END IF;
2407     WHEN OTHERS THEN
2408       ROLLBACK TO save_certifications_pvt;
2409       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2410       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CERTIFICATIONS');
2411       FND_MSG_PUB.ADD;
2412 
2413       x_return_status := fnd_api.g_ret_sts_unexp_error;
2414 
2415       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2416       fnd_message.set_token('ERROR' ,SQLERRM);
2417       fnd_msg_pub.add;
2418 
2419       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2420                                 p_count => x_msg_count,
2421                                 p_data  => x_msg_data);
2422 
2423       -- Debug info.
2424       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2425         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2426                                p_msg_data=>x_msg_data,
2427                                p_msg_type=>'SQL ERROR',
2428                                p_msg_level=>fnd_log.level_error);
2429       END IF;
2430       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2431         hz_utility_v2pub.debug(p_message=>'save_certifications(-)',
2432                                p_prefix=>l_debug_prefix,
2433                                p_msg_level=>fnd_log.level_procedure);
2434       END IF;
2435   END save_certifications;
2436 
2437   -- PROCEDURE create_financial_profiles
2438   --
2439   -- DESCRIPTION
2440   --     Create financial profiles.
2441   --
2442   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2443   --
2444   -- ARGUMENTS
2445   --   IN:
2446   --     p_fin_prof_objs      List of financial profile objects.
2447   --     p_party_id           Party Id.
2448   --   OUT:
2449   --     x_return_status      Return status after the call. The status can
2450   --                          be fnd_api.g_ret_sts_success (success),
2451   --                          fnd_api.g_ret_sts_error (error),
2452   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2453   --     x_msg_count          Number of messages in message stack.
2454   --     x_msg_data           Message text if x_msg_count is 1.
2455   --
2456   -- NOTES
2457   --
2458   -- MODIFICATION HISTORY
2459   --
2460   --   14-DEC-2004    Arnold Ng          Created.
2461   --
2462 
2463   PROCEDURE create_financial_profiles(
2464     p_fin_prof_objs              IN OUT NOCOPY hz_financial_prof_obj_tbl,
2465     p_party_id                   IN         NUMBER,
2466     x_return_status              OUT NOCOPY VARCHAR2,
2467     x_msg_count                  OUT NOCOPY NUMBER,
2468     x_msg_data                   OUT NOCOPY VARCHAR2
2469   )IS
2470     l_debug_prefix        VARCHAR2(30);
2471     l_fin_prof_id         NUMBER;
2472     l_fin_prof_rec        HZ_PARTY_INFO_PUB.FINANCIAL_PROFILE_REC_TYPE;
2473   BEGIN
2474     -- Standard start of API savepoint
2475     SAVEPOINT create_financial_profiles_pvt;
2476 
2477     -- initialize API return status to success.
2478     x_return_status := FND_API.G_RET_STS_SUCCESS;
2479 
2480     -- Debug info.
2481     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2482         hz_utility_v2pub.debug(p_message=>'create_financial_profiles(+)',
2483                                p_prefix=>l_debug_prefix,
2484                                p_msg_level=>fnd_log.level_procedure);
2485     END IF;
2486 
2487     -- Create financial profiles
2488     FOR i IN 1..p_fin_prof_objs.COUNT LOOP
2489       assign_financial_prof_rec(
2490         p_financial_prof_obj => p_fin_prof_objs(i),
2491         p_party_id           => p_party_id,
2492         px_financial_prof_rec => l_fin_prof_rec
2493       );
2494 
2495       HZ_PARTY_INFO_PUB.create_financial_profile(
2496         p_api_version               => 1.0,
2497         p_financial_profile_rec     => l_fin_prof_rec,
2498         x_return_status             => x_return_status,
2499         x_msg_count                 => x_msg_count,
2500         x_msg_data                  => x_msg_data,
2501         x_financial_profile_id      => l_fin_prof_id
2502       );
2503 
2504       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2505         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2506           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_financial_profiles, party id: '||p_party_id,
2507                                  p_prefix=>l_debug_prefix,
2508                                  p_msg_level=>fnd_log.level_procedure);
2509         END IF;
2510         RAISE FND_API.G_EXC_ERROR;
2511       END IF;
2512 
2513       -- assign financial profile id
2514       p_fin_prof_objs(i).financial_profile_id := l_fin_prof_id;
2515     END LOOP;
2516 
2517     -- Debug info.
2518     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2519          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2520                                p_msg_data=>x_msg_data,
2521                                p_msg_type=>'WARNING',
2522                                p_msg_level=>fnd_log.level_exception);
2523     END IF;
2524     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2525         hz_utility_v2pub.debug(p_message=>'create_financial_profiles(-)',
2526                                p_prefix=>l_debug_prefix,
2527                                p_msg_level=>fnd_log.level_procedure);
2528     END IF;
2529   EXCEPTION
2530     WHEN fnd_api.g_exc_error THEN
2531       ROLLBACK TO create_financial_profiles_pvt;
2532       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2533       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2534       FND_MSG_PUB.ADD;
2535 
2536       x_return_status := fnd_api.g_ret_sts_error;
2537 
2538       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2539                                 p_count => x_msg_count,
2540                                 p_data  => x_msg_data);
2541 
2542       -- Debug info.
2543       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2544         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2545                                p_msg_data=>x_msg_data,
2546                                p_msg_type=>'ERROR',
2547                                p_msg_level=>fnd_log.level_error);
2548       END IF;
2549       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2550         hz_utility_v2pub.debug(p_message=>'create_financial_profiles(-)',
2551                                p_prefix=>l_debug_prefix,
2552                                p_msg_level=>fnd_log.level_procedure);
2553       END IF;
2554     WHEN fnd_api.g_exc_unexpected_error THEN
2555       ROLLBACK TO create_financial_profiles_pvt;
2556       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2557       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2558       FND_MSG_PUB.ADD;
2559 
2560       x_return_status := fnd_api.g_ret_sts_unexp_error;
2561 
2562       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2563                                 p_count => x_msg_count,
2564                                 p_data  => x_msg_data);
2565 
2566       -- Debug info.
2567       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2568         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2569                                p_msg_data=>x_msg_data,
2570                                p_msg_type=>'UNEXPECTED ERROR',
2571                                p_msg_level=>fnd_log.level_error);
2572       END IF;
2573       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2574         hz_utility_v2pub.debug(p_message=>'create_financial_profiles(-)',
2575                                p_prefix=>l_debug_prefix,
2576                                p_msg_level=>fnd_log.level_procedure);
2577       END IF;
2578 
2579     WHEN OTHERS THEN
2580       ROLLBACK TO create_financial_profiles_pvt;
2581       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2582       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2583       FND_MSG_PUB.ADD;
2584 
2585       x_return_status := fnd_api.g_ret_sts_unexp_error;
2586 
2587       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2588       fnd_message.set_token('ERROR' ,SQLERRM);
2589       fnd_msg_pub.add;
2590 
2591       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2592                                 p_count => x_msg_count,
2593                                 p_data  => x_msg_data);
2594 
2595       -- Debug info.
2596       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2597         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2598                                p_msg_data=>x_msg_data,
2599                                p_msg_type=>'SQL ERROR',
2600                                p_msg_level=>fnd_log.level_error);
2601       END IF;
2602       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2603         hz_utility_v2pub.debug(p_message=>'create_financial_profiles(-)',
2604                                p_prefix=>l_debug_prefix,
2605                                p_msg_level=>fnd_log.level_procedure);
2606       END IF;
2607   END create_financial_profiles;
2608 
2609   -- PROCEDURE save_financial_profiles
2610   --
2611   -- DESCRIPTION
2612   --     Create or update financial profiles.
2613   --
2614   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2615   --
2616   -- ARGUMENTS
2617   --   IN:
2618   --     p_fin_prof_objs      List of financial profile objects.
2619   --     p_party_id           Party Id.
2620   --   OUT:
2621   --     x_return_status      Return status after the call. The status can
2622   --                          be fnd_api.g_ret_sts_success (success),
2623   --                          fnd_api.g_ret_sts_error (error),
2624   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2625   --     x_msg_count          Number of messages in message stack.
2626   --     x_msg_data           Message text if x_msg_count is 1.
2627   --
2628   -- NOTES
2629   --
2630   -- MODIFICATION HISTORY
2631   --
2632   --   14-DEC-2004    Arnold Ng          Created.
2633   --
2634 
2635   PROCEDURE save_financial_profiles(
2636     p_fin_prof_objs              IN OUT NOCOPY hz_financial_prof_obj_tbl,
2637     p_party_id                   IN         NUMBER,
2638     x_return_status              OUT NOCOPY VARCHAR2,
2639     x_msg_count                  OUT NOCOPY NUMBER,
2640     x_msg_data                   OUT NOCOPY VARCHAR2
2641   ) IS
2642     l_debug_prefix        VARCHAR2(30);
2643     l_fin_prof_id         NUMBER;
2644     l_fin_prof_rec        HZ_PARTY_INFO_PUB.FINANCIAL_PROFILE_REC_TYPE;
2645     l_lud                 DATE;
2646   BEGIN
2647     -- Standard start of API savepoint
2648     SAVEPOINT save_financial_profiles_pvt;
2649 
2650     -- initialize API return status to success.
2651     x_return_status := FND_API.G_RET_STS_SUCCESS;
2652 
2653     -- Debug info.
2654     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2655         hz_utility_v2pub.debug(p_message=>'save_financial_profiles(+)',
2656                                p_prefix=>l_debug_prefix,
2657                                p_msg_level=>fnd_log.level_procedure);
2658     END IF;
2659 
2660     -- Create/Update financial profiles
2661     FOR i IN 1..p_fin_prof_objs.COUNT LOOP
2662       assign_financial_prof_rec(
2663         p_financial_prof_obj => p_fin_prof_objs(i),
2664         p_party_id           => p_party_id,
2665         px_financial_prof_rec=> l_fin_prof_rec
2666       );
2667 
2668       -- check if the financial profile record is create or update
2669       hz_registry_validate_bo_pvt.check_financial_prof_op(
2670         p_party_id             => p_party_id,
2671         p_financial_profile_id => l_fin_prof_rec.financial_profile_id,
2672         x_last_update_date     => l_lud,
2673         x_return_status        => x_return_status
2674       );
2675 
2676       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2677         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2678           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.check_financial_prof_op, financial profile id: '||l_fin_prof_rec.financial_profile_id||', party id: '||p_party_id,
2679                                  p_prefix=>l_debug_prefix,
2680                                  p_msg_level=>fnd_log.level_procedure);
2681         END IF;
2682         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2683         FND_MSG_PUB.ADD;
2684         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2685         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2686         FND_MSG_PUB.ADD;
2687         RAISE FND_API.G_EXC_ERROR;
2688       END IF;
2689 
2690       IF(l_lud IS NULL) THEN
2691         HZ_PARTY_INFO_PUB.create_financial_profile(
2692           p_api_version               => 1.0,
2693           p_financial_profile_rec     => l_fin_prof_rec,
2694           x_return_status             => x_return_status,
2695           x_msg_count                 => x_msg_count,
2696           x_msg_data                  => x_msg_data,
2697           x_financial_profile_id      => l_fin_prof_id
2698         );
2699 
2700         -- assign financial_profile_id
2701         p_fin_prof_objs(i).financial_profile_id := l_fin_prof_id;
2702       ELSE
2703         HZ_PARTY_INFO_PUB.update_financial_profile(
2704           p_api_version               => 1.0,
2705           p_financial_profile_rec     => l_fin_prof_rec,
2706           p_last_update_date          => l_lud,
2707           x_return_status             => x_return_status,
2708           x_msg_count                 => x_msg_count,
2709           x_msg_data                  => x_msg_data
2710         );
2711 
2712         -- assign financial_profile_id
2713         p_fin_prof_objs(i).financial_profile_id := l_fin_prof_rec.financial_profile_id;
2714       END IF;
2715 
2716       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2717         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2718           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_financial_profiles, party id: '||p_party_id,
2719                                  p_prefix=>l_debug_prefix,
2720                                  p_msg_level=>fnd_log.level_procedure);
2721         END IF;
2722         RAISE FND_API.G_EXC_ERROR;
2723       END IF;
2724     END LOOP;
2725 
2726     -- Debug info.
2727     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2728          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2729                                p_msg_data=>x_msg_data,
2730                                p_msg_type=>'WARNING',
2731                                p_msg_level=>fnd_log.level_exception);
2732     END IF;
2733     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2734         hz_utility_v2pub.debug(p_message=>'save_financial_profiles(-)',
2735                                p_prefix=>l_debug_prefix,
2736                                p_msg_level=>fnd_log.level_procedure);
2737     END IF;
2738   EXCEPTION
2739     WHEN fnd_api.g_exc_error THEN
2740       ROLLBACK TO save_financial_profiles_pvt;
2741       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2742       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2743       FND_MSG_PUB.ADD;
2744 
2745       x_return_status := fnd_api.g_ret_sts_error;
2746 
2747       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2748                                 p_count => x_msg_count,
2749                                 p_data  => x_msg_data);
2750 
2751       -- Debug info.
2752       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2753         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2754                                p_msg_data=>x_msg_data,
2755                                p_msg_type=>'ERROR',
2756                                p_msg_level=>fnd_log.level_error);
2757       END IF;
2758       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2759         hz_utility_v2pub.debug(p_message=>'save_financial_profiles(-)',
2760                                p_prefix=>l_debug_prefix,
2761                                p_msg_level=>fnd_log.level_procedure);
2762       END IF;
2763     WHEN fnd_api.g_exc_unexpected_error THEN
2764       ROLLBACK TO save_financial_profiles_pvt;
2765       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2766       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2767       FND_MSG_PUB.ADD;
2768 
2769       x_return_status := fnd_api.g_ret_sts_unexp_error;
2770 
2771       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2772                                 p_count => x_msg_count,
2773                                 p_data  => x_msg_data);
2774 
2775       -- Debug info.
2776       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2777         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2778                                p_msg_data=>x_msg_data,
2779                                p_msg_type=>'UNEXPECTED ERROR',
2780                                p_msg_level=>fnd_log.level_error);
2781       END IF;
2782       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2783         hz_utility_v2pub.debug(p_message=>'save_financial_profiles(-)',
2784                                p_prefix=>l_debug_prefix,
2785                                p_msg_level=>fnd_log.level_procedure);
2786       END IF;
2787     WHEN OTHERS THEN
2788       ROLLBACK TO save_financial_profiles_pvt;
2789       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2790       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_FINANCIAL_PROFILE');
2791       FND_MSG_PUB.ADD;
2792 
2793       x_return_status := fnd_api.g_ret_sts_unexp_error;
2794 
2795       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2796       fnd_message.set_token('ERROR' ,SQLERRM);
2797       fnd_msg_pub.add;
2798 
2799       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2800                                 p_count => x_msg_count,
2801                                 p_data  => x_msg_data);
2802 
2803       -- Debug info.
2804       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2805         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2806                                p_msg_data=>x_msg_data,
2807                                p_msg_type=>'SQL ERROR',
2808                                p_msg_level=>fnd_log.level_error);
2809       END IF;
2810       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2811         hz_utility_v2pub.debug(p_message=>'save_financial_profiles(-)',
2812                                p_prefix=>l_debug_prefix,
2813                                p_msg_level=>fnd_log.level_procedure);
2814       END IF;
2815   END save_financial_profiles;
2816 
2817   -- PROCEDURE save_party_preferences
2818   --
2819   -- DESCRIPTION
2820   --     Create or update party preferences.
2821   --
2822   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2823   --
2824   -- ARGUMENTS
2825   --   IN:
2826   --     p_party_pref_objs    List of party preference objects.
2827   --     p_party_id           Party Id.
2828   --   OUT:
2829   --     x_return_status      Return status after the call. The status can
2830   --                          be fnd_api.g_ret_sts_success (success),
2831   --                          fnd_api.g_ret_sts_error (error),
2832   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2833   --     x_msg_count          Number of messages in message stack.
2834   --     x_msg_data           Message text if x_msg_count is 1.
2835   --
2836   -- NOTES
2837   --
2838   -- MODIFICATION HISTORY
2839   --
2840   --   14-DEC-2004    Arnold Ng          Created.
2841   --
2842 
2843   PROCEDURE save_party_preferences(
2844     p_party_pref_objs            IN OUT NOCOPY hz_party_pref_obj_tbl,
2845     p_party_id                   IN         NUMBER,
2846     x_return_status              OUT NOCOPY VARCHAR2,
2847     x_msg_count                  OUT NOCOPY NUMBER,
2848     x_msg_data                   OUT NOCOPY VARCHAR2
2849   ) IS
2850     l_debug_prefix        VARCHAR2(30);
2851     l_ovn                 NUMBER := NULL;
2852   BEGIN
2853     -- Standard start of API savepoint
2854     SAVEPOINT save_party_preferences_pvt;
2855 
2856     -- initialize API return status to success.
2857     x_return_status := FND_API.G_RET_STS_SUCCESS;
2858 
2859     -- Debug info.
2860     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2861         hz_utility_v2pub.debug(p_message=>'save_party_preferences(+)',
2862                                p_prefix=>l_debug_prefix,
2863                                p_msg_level=>fnd_log.level_procedure);
2864     END IF;
2865 
2866     -- Create/Update party preferences
2867     FOR i IN 1..p_party_pref_objs.COUNT LOOP
2868       -- check if the code assignment record is create or update
2869       hz_registry_validate_bo_pvt.check_party_pref_op(
2870         p_party_id            => p_party_id,
2871         p_module              => p_party_pref_objs(i).module,
2872         p_category            => p_party_pref_objs(i).category,
2873         p_preference_code     => p_party_pref_objs(i).preference_code,
2874         x_object_version_number     => l_ovn
2875       );
2876 
2877       HZ_PREFERENCE_PUB.Put(
2878         p_party_id                  => p_party_id,
2879         p_category                  => p_party_pref_objs(i).category,
2880         p_preference_code           => p_party_pref_objs(i).preference_code,
2881         p_value_varchar2            => p_party_pref_objs(i).value_varchar2,
2882         p_value_number              => p_party_pref_objs(i).value_number,
2883         p_value_date                => p_party_pref_objs(i).value_date,
2884         p_value_name                => p_party_pref_objs(i).value_name,
2885         p_module                    => p_party_pref_objs(i).module,
2886         p_additional_value1         => p_party_pref_objs(i).additional_value1,
2887         p_additional_value2         => p_party_pref_objs(i).additional_value2,
2888         p_additional_value3         => p_party_pref_objs(i).additional_value3,
2889         p_additional_value4         => p_party_pref_objs(i).additional_value4,
2890         p_additional_value5         => p_party_pref_objs(i).additional_value5,
2891         p_object_version_number     => l_ovn,
2892         x_return_status             => x_return_status,
2893         x_msg_count                 => x_msg_count,
2894         x_msg_data                  => x_msg_data
2895       );
2896 
2897       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2898         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2899           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_party_preferences, party id: '||p_party_id,
2900                                  p_prefix=>l_debug_prefix,
2901                                  p_msg_level=>fnd_log.level_procedure);
2902         END IF;
2903         RAISE FND_API.G_EXC_ERROR;
2904       END IF;
2905     END LOOP;
2906 
2907     -- Debug info.
2908     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2909          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2910                                p_msg_data=>x_msg_data,
2911                                p_msg_type=>'WARNING',
2912                                p_msg_level=>fnd_log.level_exception);
2913     END IF;
2914     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2915         hz_utility_v2pub.debug(p_message=>'save_party_preferences(-)',
2916                                p_prefix=>l_debug_prefix,
2917                                p_msg_level=>fnd_log.level_procedure);
2918     END IF;
2919   EXCEPTION
2920     WHEN fnd_api.g_exc_error THEN
2921       ROLLBACK TO save_party_preferences_pvt;
2922       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2923       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_PREFERENCES');
2924       FND_MSG_PUB.ADD;
2925 
2926       x_return_status := fnd_api.g_ret_sts_error;
2927 
2928       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2929                                 p_count => x_msg_count,
2930                                 p_data  => x_msg_data);
2931 
2932       -- Debug info.
2933       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2934         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2935                                p_msg_data=>x_msg_data,
2936                                p_msg_type=>'ERROR',
2937                                p_msg_level=>fnd_log.level_error);
2938       END IF;
2939       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2940         hz_utility_v2pub.debug(p_message=>'save_party_preferences(-)',
2941                                p_prefix=>l_debug_prefix,
2942                                p_msg_level=>fnd_log.level_procedure);
2943       END IF;
2944     WHEN fnd_api.g_exc_unexpected_error THEN
2945       ROLLBACK TO save_party_preferences_pvt;
2946       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2947       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_PREFERENCES');
2948       FND_MSG_PUB.ADD;
2949 
2950       x_return_status := fnd_api.g_ret_sts_unexp_error;
2951 
2952       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2953                                 p_count => x_msg_count,
2954                                 p_data  => x_msg_data);
2955 
2956       -- Debug info.
2957       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2958         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2959                                p_msg_data=>x_msg_data,
2960                                p_msg_type=>'UNEXPECTED ERROR',
2961                                p_msg_level=>fnd_log.level_error);
2962       END IF;
2963       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2964         hz_utility_v2pub.debug(p_message=>'save_party_preferences(-)',
2965                                p_prefix=>l_debug_prefix,
2966                                p_msg_level=>fnd_log.level_procedure);
2967       END IF;
2968     WHEN OTHERS THEN
2969       ROLLBACK TO save_party_preferences_pvt;
2970       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2971       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_PREFERENCES');
2972       FND_MSG_PUB.ADD;
2973 
2974       x_return_status := fnd_api.g_ret_sts_unexp_error;
2975 
2976       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2977       fnd_message.set_token('ERROR' ,SQLERRM);
2978       fnd_msg_pub.add;
2979 
2980       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2981                                 p_count => x_msg_count,
2982                                 p_data  => x_msg_data);
2983 
2984       -- Debug info.
2985       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2986         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2987                                p_msg_data=>x_msg_data,
2988                                p_msg_type=>'SQL ERROR',
2989                                p_msg_level=>fnd_log.level_error);
2990       END IF;
2991       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2992         hz_utility_v2pub.debug(p_message=>'save_party_preferences(-)',
2993                                p_prefix=>l_debug_prefix,
2994                                p_msg_level=>fnd_log.level_procedure);
2995       END IF;
2996   END save_party_preferences;
2997 
2998 
2999   --  PRIVATE PROCEDURE assign_party_usge_assgmnt_rec
3000   --
3001   -- DESCRIPTION
3002   --     Assign HZ_PARTY_USAGE_OBJ to HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type
3003   --
3004   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3005   --
3006   -- ARGUMENTS
3007   --   IN:
3008   --     p_party_usage_obj           HZ_PARTY_USAGE_OBJ.
3009   --     p_party_id                  Party Id.
3010   --   OUT:
3011   --     px_party_usage_assignment_rec         OUT  HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type
3012   --
3013   -- NOTES
3014   --
3015   -- MODIFICATION HISTORY
3016   --
3017   --   01-Mar-2006   Hadi Alatasi           Created.
3018   --
3019 
3020  PROCEDURE assign_party_usge_assgmnt_rec(
3021     p_party_usage_obj         IN            HZ_PARTY_USAGE_OBJ,
3022     p_party_id                   IN            NUMBER,
3023     px_party_usage_assignment_rec             IN OUT NOCOPY HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type
3024   ) is
3025   begin
3026     px_party_usage_assignment_rec.party_id               := p_party_id;
3027     px_party_usage_assignment_rec.party_usage_code     := p_party_usage_obj.party_usage_code;
3028     px_party_usage_assignment_rec.effective_start_date := p_party_usage_obj.effective_start_date ;
3029     px_party_usage_assignment_rec.effective_end_date   := p_party_usage_obj.effective_end_date ;
3030     px_party_usage_assignment_rec.comments             := p_party_usage_obj.comments;
3031     px_party_usage_assignment_rec.attribute_category    := p_party_usage_obj.attribute_category;
3032     px_party_usage_assignment_rec.attribute1    := p_party_usage_obj.attribute1;
3033     px_party_usage_assignment_rec.attribute2    := p_party_usage_obj.attribute2;
3034     px_party_usage_assignment_rec.attribute3    := p_party_usage_obj.attribute3;
3035     px_party_usage_assignment_rec.attribute4    := p_party_usage_obj.attribute4;
3036     px_party_usage_assignment_rec.attribute5    := p_party_usage_obj.attribute5;
3037     px_party_usage_assignment_rec.attribute6    := p_party_usage_obj.attribute6;
3038     px_party_usage_assignment_rec.attribute7    := p_party_usage_obj.attribute7;
3039     px_party_usage_assignment_rec.attribute8    := p_party_usage_obj.attribute8;
3040     px_party_usage_assignment_rec.attribute9    := p_party_usage_obj.attribute9;
3041     px_party_usage_assignment_rec.attribute10    := p_party_usage_obj.attribute10;
3042     px_party_usage_assignment_rec.attribute11    := p_party_usage_obj.attribute11;
3043     px_party_usage_assignment_rec.attribute12    := p_party_usage_obj.attribute12;
3044     px_party_usage_assignment_rec.attribute13    := p_party_usage_obj.attribute13;
3045     px_party_usage_assignment_rec.attribute14    := p_party_usage_obj.attribute14;
3046     px_party_usage_assignment_rec.attribute15    := p_party_usage_obj.attribute15;
3047     px_party_usage_assignment_rec.attribute16    := p_party_usage_obj.attribute16;
3048     px_party_usage_assignment_rec.attribute17    := p_party_usage_obj.attribute17;
3049     px_party_usage_assignment_rec.attribute18    := p_party_usage_obj.attribute18;
3050     px_party_usage_assignment_rec.attribute19    := p_party_usage_obj.attribute19;
3051     px_party_usage_assignment_rec.attribute20    := p_party_usage_obj.attribute20;
3052      ------------------ set up created_by_module --------------------------
3053     px_party_usage_assignment_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
3054 
3055   end assign_party_usge_assgmnt_rec;
3056 
3057 
3058 -- PROCEDURE create_party_usage_assgmnt
3059   --
3060   -- DESCRIPTION
3061   --     Create Party Usage Assignment.
3062   --
3063   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3064   --
3065   -- ARGUMENTS
3066   --   IN:
3067   --     p_party_usg_objs       List of Party Usage objects.
3068   --     p_party_id           Party Id.
3069   --   OUT:
3070   --     x_return_status      Return status after the call. The status can
3071   --                          be fnd_api.g_ret_sts_success (success),
3072   --                          fnd_api.g_ret_sts_error (error),
3073   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3074   --     x_msg_count          Number of messages in message stack.
3075   --     x_msg_data           Message text if x_msg_count is 1.
3076   --
3077   -- NOTES
3078   --
3079   -- MODIFICATION HISTORY
3080   --
3081   --   01-Mar-2006   Hadi Alatasi           Created.
3082   --
3083 
3084     PROCEDURE create_party_usage_assgmnt(
3085     p_party_usg_objs              IN OUT NOCOPY HZ_PARTY_USAGE_OBJ_TBL,
3086     p_party_id                   IN         NUMBER,
3087     x_return_status              OUT    NOCOPY VARCHAR2,
3088     x_msg_count                  OUT    NOCOPY NUMBER,
3089     x_msg_data                   OUT    NOCOPY VARCHAR2
3090   )IS
3091     l_debug_prefix        VARCHAR2(30);
3092     l_party_usg_rec        HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type;
3093   BEGIN
3094     -- Standard start of API savepoint
3095     SAVEPOINT create_party_usage_assgmnt_pvt;
3096 
3097     -- initialize API return status to success.
3098     x_return_status := FND_API.G_RET_STS_SUCCESS;
3099 
3100     -- Debug info.
3101     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3102         hz_utility_v2pub.debug(p_message=>'assign_party_usage(+)',
3103                                p_prefix=>l_debug_prefix,
3104                                p_msg_level=>fnd_log.level_procedure);
3105     END IF;
3106 
3107    FOR i IN 1..p_party_usg_objs.COUNT LOOP
3108       assign_party_usge_assgmnt_rec(
3109         p_party_usage_obj => p_party_usg_objs(i),
3110         p_party_id           => p_party_id,
3111         px_party_usage_assignment_rec => l_party_usg_rec
3112       );
3113        HZ_PARTY_USG_ASSIGNMENT_PUB.assign_party_usage (
3114          p_init_msg_list              => FND_API.G_FALSE,
3115          p_party_usg_assignment_rec   => l_party_usg_rec,
3116          x_return_status              => x_return_status,
3117          x_msg_count                  => x_msg_count,
3118          x_msg_data                   => x_msg_data
3119        );
3120 
3121        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3122         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3123           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.create_party_usage_assignment, party id: '||p_party_id,
3124                                  p_prefix=>l_debug_prefix,
3125                                  p_msg_level=>fnd_log.level_procedure);
3126         END IF;
3127         RAISE FND_API.G_EXC_ERROR;
3128       END IF;
3129     END LOOP;
3130 
3131      -- Debug info.
3132     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3133          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3134                                p_msg_data=>x_msg_data,
3135                                p_msg_type=>'WARNING',
3136                                p_msg_level=>fnd_log.level_exception);
3137     END IF;
3138     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3139         hz_utility_v2pub.debug(p_message=>'create_party_usage_assgmnt(-)',
3140                                p_prefix=>l_debug_prefix,
3141                                p_msg_level=>fnd_log.level_procedure);
3142     END IF;
3143 
3144     EXCEPTION
3145     WHEN fnd_api.g_exc_error THEN
3146       ROLLBACK TO create_party_usage_assgmnt_pvt;
3147       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3148       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3149       FND_MSG_PUB.ADD;
3150 
3151       x_return_status := fnd_api.g_ret_sts_error;
3152 
3153       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3154                                 p_count => x_msg_count,
3155                                 p_data  => x_msg_data);
3156 
3157       -- Debug info.
3158       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3159         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3160                                p_msg_data=>x_msg_data,
3161                                p_msg_type=>'ERROR',
3162                                p_msg_level=>fnd_log.level_error);
3163       END IF;
3164       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3165         hz_utility_v2pub.debug(p_message=>'create_party_usage_assgmnt(-)',
3166                                p_prefix=>l_debug_prefix,
3167                                p_msg_level=>fnd_log.level_procedure);
3168       END IF;
3169     WHEN fnd_api.g_exc_unexpected_error THEN
3170       ROLLBACK TO create_party_usage_assgmnt_pvt;
3171       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3172       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3173       FND_MSG_PUB.ADD;
3174 
3175       x_return_status := fnd_api.g_ret_sts_unexp_error;
3176 
3177       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3178                                 p_count => x_msg_count,
3179                                 p_data  => x_msg_data);
3180 
3181       -- Debug info.
3182       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3183         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3184                                p_msg_data=>x_msg_data,
3185                                p_msg_type=>'UNEXPECTED ERROR',
3186                                p_msg_level=>fnd_log.level_error);
3187       END IF;
3188       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3189         hz_utility_v2pub.debug(p_message=>'create_party_usage_assgmnt(-)',
3190                                p_prefix=>l_debug_prefix,
3191                                p_msg_level=>fnd_log.level_procedure);
3192       END IF;
3193 
3194     WHEN OTHERS THEN
3195       ROLLBACK TO create_party_usage_assgmnt_pvt;
3196       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3197       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3198       FND_MSG_PUB.ADD;
3199 
3200       x_return_status := fnd_api.g_ret_sts_unexp_error;
3201 
3202       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3203       fnd_message.set_token('ERROR' ,SQLERRM);
3204       fnd_msg_pub.add;
3205 
3206       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3207                                 p_count => x_msg_count,
3208                                 p_data  => x_msg_data);
3209 
3210       -- Debug info.
3211       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3212         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3213                                p_msg_data=>x_msg_data,
3214                                p_msg_type=>'SQL ERROR',
3215                                p_msg_level=>fnd_log.level_error);
3216       END IF;
3217       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3218         hz_utility_v2pub.debug(p_message=>'create_party_usage_assgmnt(-)',
3219                                p_prefix=>l_debug_prefix,
3220                                p_msg_level=>fnd_log.level_procedure);
3221       END IF;
3222 
3223   end create_party_usage_assgmnt;
3224 
3225 
3226   -- PROCEDURE Save_party_usage_assgmnt
3227   --
3228   -- DESCRIPTION
3229   --     Create or update Party Usage Assignment.
3230   --
3231   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3232   --
3233   -- ARGUMENTS
3234   --   IN:
3235   --     p_party_usg_objs       List of Party Usage objects.
3236   --     p_party_id           Party Id.
3237   --   OUT:
3238   --     x_return_status      Return status after the call. The status can
3239   --                          be fnd_api.g_ret_sts_success (success),
3240   --                          fnd_api.g_ret_sts_error (error),
3241   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3242   --     x_msg_count          Number of messages in message stack.
3243   --     x_msg_data           Message text if x_msg_count is 1.
3244   --
3245   -- NOTES
3246   --
3247   -- MODIFICATION HISTORY
3248   --
3249   --   01-Mar-2006   Hadi Alatasi           Created.
3250   --
3251 
3252  PROCEDURE save_party_usage_assgmnt(
3253     p_party_usg_objs             IN OUT NOCOPY HZ_PARTY_USAGE_OBJ_TBL,
3254     p_party_id                   IN         NUMBER,
3255     x_return_status              OUT    NOCOPY VARCHAR2,
3256     x_msg_count                  OUT    NOCOPY NUMBER,
3257     x_msg_data                   OUT    NOCOPY VARCHAR2
3258   )IS
3259     l_debug_prefix        VARCHAR2(30);
3260     l_party_usg_assignment_id         NUMBER;
3261     l_party_usg_rec        HZ_PARTY_USG_ASSIGNMENT_PVT.party_usg_assignment_rec_type;
3262     l_lud                 DATE;
3263   BEGIN
3264     -- Standard start of API savepoint
3265     SAVEPOINT save_party_usage_assgmnt_pvt;
3266 
3267     -- initialize API return status to success.
3268     x_return_status := FND_API.G_RET_STS_SUCCESS;
3269 
3270     -- Debug info.
3271     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3272         hz_utility_v2pub.debug(p_message=>'assign_party_usage(+)',
3273                                p_prefix=>l_debug_prefix,
3274                                p_msg_level=>fnd_log.level_procedure);
3275     END IF;
3276 
3277    FOR i IN 1..p_party_usg_objs.COUNT LOOP
3278       --hz_registry_validate_bo_pvt.assign_party_usge_assgmnt_rec(
3279       assign_party_usge_assgmnt_rec(
3280         p_party_usage_obj => p_party_usg_objs(i),
3281         p_party_id           => p_party_id,
3282         px_party_usage_assignment_rec => l_party_usg_rec
3283       );
3284 
3285       -- check if the party usage assignment record is create or update
3286      HZ_REGISTRY_VALIDATE_BO_PVT.check_party_usage_op(
3287        p_party_id           => p_party_id,
3288        p_party_usage_code   => l_party_usg_rec.party_usage_code,
3289        x_last_update_date         => l_lud,
3290        x_return_status            => x_return_status
3291       );
3292      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3293         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3294           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.check_party_usage_op,  party_usage_code ' || l_party_usg_rec.party_usage_code||', party id: '||p_party_id,
3295                                  p_prefix=>l_debug_prefix,
3296                                  p_msg_level=>fnd_log.level_procedure);
3297         END IF;
3298         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3299         FND_MSG_PUB.ADD;
3300         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3301         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3302         FND_MSG_PUB.ADD;
3303         RAISE FND_API.G_EXC_ERROR;
3304       END IF;
3305 
3306       IF(l_lud IS NULL) THEN
3307          HZ_PARTY_USG_ASSIGNMENT_PUB.assign_party_usage (
3308            p_init_msg_list              => FND_API.G_FALSE,
3309            p_party_usg_assignment_rec   => l_party_usg_rec,
3310            x_return_status              => x_return_status,
3311            x_msg_count                  => x_msg_count,
3312            x_msg_data                   => x_msg_data
3313          );
3314       ELSE
3315        HZ_PARTY_USG_ASSIGNMENT_PUB.update_usg_assignment (
3316            p_init_msg_list              =>   FND_API.G_FALSE,
3317            p_party_usg_assignment_rec   =>   l_party_usg_rec,
3318            x_return_status              =>   x_return_status,
3319            x_msg_count                  =>   x_msg_count,
3320            x_msg_data                   =>   x_msg_data
3321        ) ;
3322       ENd IF;
3323 
3324       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3325         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3326           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_party_bo_pvt.save_party_usage_assgmnt,party_usage_code ' || l_party_usg_rec.party_usage_code||', party id: '||p_party_id,
3327                                  p_prefix=>l_debug_prefix,
3328                                  p_msg_level=>fnd_log.level_procedure);
3329       END IF;
3330         RAISE FND_API.G_EXC_ERROR;
3331       END IF;
3332    END LOOP;
3333 
3334        -- Debug info.
3335     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3336          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3337                                p_msg_data=>x_msg_data,
3338                                p_msg_type=>'WARNING',
3339                                p_msg_level=>fnd_log.level_exception);
3340     END IF;
3341     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3342         hz_utility_v2pub.debug(p_message=>'save_party_usage_assgmnt(-)',
3343                                p_prefix=>l_debug_prefix,
3344                                p_msg_level=>fnd_log.level_procedure);
3345     END IF;
3346   EXCEPTION
3347     WHEN fnd_api.g_exc_error THEN
3348       ROLLBACK TO save_party_usage_assgmnt_pvt;
3349       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3350       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3351       FND_MSG_PUB.ADD;
3352 
3353       x_return_status := fnd_api.g_ret_sts_error;
3354 
3355       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3356                                 p_count => x_msg_count,
3357                                 p_data  => x_msg_data);
3358 
3359       -- Debug info.
3360       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3361         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3362                                p_msg_data=>x_msg_data,
3363                                p_msg_type=>'ERROR',
3364                                p_msg_level=>fnd_log.level_error);
3365       END IF;
3366       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3367         hz_utility_v2pub.debug(p_message=>'save_party_usage_assgmnt(-)',
3368                                p_prefix=>l_debug_prefix,
3369                                p_msg_level=>fnd_log.level_procedure);
3370       END IF;
3371     WHEN fnd_api.g_exc_unexpected_error THEN
3372       ROLLBACK TO save_party_usage_assgmnt_pvt;
3373       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3374       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3375       FND_MSG_PUB.ADD;
3376 
3377       x_return_status := fnd_api.g_ret_sts_unexp_error;
3378 
3379       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3380                                 p_count => x_msg_count,
3381                                 p_data  => x_msg_data);
3382 
3383       -- Debug info.
3384       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3385         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3386                                p_msg_data=>x_msg_data,
3387                                p_msg_type=>'UNEXPECTED ERROR',
3388                                p_msg_level=>fnd_log.level_error);
3389       END IF;
3390       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3391         hz_utility_v2pub.debug(p_message=>'save_party_usage_assgmnt(-)',
3392                                p_prefix=>l_debug_prefix,
3393                                p_msg_level=>fnd_log.level_procedure);
3394       END IF;
3395     WHEN OTHERS THEN
3396       ROLLBACK TO save_party_usage_assgmnt_pvt;
3397       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3398       FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PARTY_USAGE_ASSIGNMENTS');
3399       FND_MSG_PUB.ADD;
3400 
3401       x_return_status := fnd_api.g_ret_sts_unexp_error;
3402 
3403       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3404       fnd_message.set_token('ERROR' ,SQLERRM);
3405       fnd_msg_pub.add;
3406 
3407       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3408                                 p_count => x_msg_count,
3409                                 p_data  => x_msg_data);
3410 
3411       -- Debug info.
3412       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3413         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3414                                p_msg_data=>x_msg_data,
3415                                p_msg_type=>'SQL ERROR',
3416                                p_msg_level=>fnd_log.level_error);
3417       END IF;
3418       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3419         hz_utility_v2pub.debug(p_message=>'save_party_usage_assgmnt(-)',
3420                                p_prefix=>l_debug_prefix,
3421                                p_msg_level=>fnd_log.level_procedure);
3422       END IF;
3423   END save_party_usage_assgmnt;
3424 
3425   -- PROCEDURE call_bes
3426   --
3427   -- DESCRIPTION
3428   --     Call business event.
3429   --
3430   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3431   --
3432   -- ARGUMENTS
3433   --   IN:
3434   --     p_party_id           Party Id.
3435   --     p_bo_code            Business Object Code.
3436   --     p_create_or_update   Create or Update Flag.
3437   --     p_event_id           Business event ID.
3438   -- NOTES
3439   --
3440   -- MODIFICATION HISTORY
3441   --
3442   --   04-OCT-2005    Arnold Ng          Created.
3443   --   15-DEC-2005    Arnold Ng          Add p_event_id.
3444   --
3445 
3446   PROCEDURE call_bes(
3447     p_party_id          IN NUMBER,
3448     p_bo_code           IN VARCHAR2,
3449     p_create_or_update  IN VARCHAR2,
3450     p_obj_source        IN VARCHAR2,
3451     p_event_id          IN NUMBER
3452   ) IS
3453     l_paramlist      WF_PARAMETER_LIST_T;
3454     l_key            VARCHAR2(240);
3455     l_event_name     VARCHAR2(240);
3456   BEGIN
3457     log('Cleanse duplicate root node');
3458     BEGIN
3459       DELETE FROM HZ_BUS_OBJ_TRACKING
3460       WHERE rowid IN
3461       ( SELECT bo_row FROM
3462         ( SELECT rowid bo_row, child_entity_name, child_id, child_bo_code, parent_entity_name, parent_id, parent_bo_code
3463                , min(rowid) over (PARTITION BY child_id, child_entity_name, child_bo_code, parent_entity_name, parent_id, parent_bo_code ORDER BY rowid RANGE UNBOUNDED PRECEDING) as min_row
3464           FROM HZ_BUS_OBJ_TRACKING
3465           WHERE child_id = p_party_id
3466           AND child_entity_name = 'HZ_PARTIES'
3467           AND nvl(child_bo_code, 'X') = nvl(p_bo_code, 'X')
3468           --AND nvl(parent_entity_name, 'X') = nvl(p_pentity_name, 'X')
3469           --AND nvl(parent_id, -99) = nvl(p_parent_id, -99)
3470           --AND nvl(parent_bo_code, 'X') = nvl(p_pbo_code, 'X')
3471           AND event_id IS NULL
3472         )
3473         WHERE bo_row <> min_row
3474       );
3475     EXCEPTION
3476       WHEN NO_DATA_FOUND THEN
3477         NULL;
3478     END;
3479 
3480     IF(p_bo_code in ('ORG_CUST', 'PERSON_CUST')) THEN
3481       add_cust_tracking(
3482         p_party_id         => p_party_id,
3483         p_bo_code          => p_bo_code,
3484         p_create_or_update => p_create_or_update);
3485     END IF;
3486 
3487     log('Prepare to raise event');
3488     log('Get Event Id: '||p_event_id);
3489 
3490     CASE
3491       WHEN p_bo_code = 'PERSON' AND p_create_or_update = 'C' THEN
3492         l_event_name := 'oracle.apps.ar.hz.PersonBO.create';
3493       WHEN p_bo_code = 'PERSON' AND p_create_or_update = 'U' THEN
3494         l_event_name := 'oracle.apps.ar.hz.PersonBO.update';
3495       WHEN p_bo_code = 'ORG' AND p_create_or_update = 'C' THEN
3496         l_event_name := 'oracle.apps.ar.hz.OrgBO.create';
3497       WHEN p_bo_code = 'ORG' AND p_create_or_update = 'U' THEN
3498         l_event_name := 'oracle.apps.ar.hz.OrgBO.update';
3499       WHEN p_bo_code = 'PERSON_CUST' AND p_create_or_update = 'C' THEN
3500         l_event_name := 'oracle.apps.ar.hz.PersonCustBO.create';
3501       WHEN p_bo_code = 'PERSON_CUST' AND p_create_or_update = 'U' THEN
3502         l_event_name := 'oracle.apps.ar.hz.PersonCustBO.update';
3503       WHEN p_bo_code = 'ORG_CUST' AND p_create_or_update = 'C' THEN
3504         l_event_name := 'oracle.apps.ar.hz.OrgCustBO.create';
3505       WHEN p_bo_code = 'ORG_CUST' AND p_create_or_update = 'U' THEN
3506         l_event_name := 'oracle.apps.ar.hz.OrgCustBO.update';
3507       ELSE
3508         log('Unexpected event name');
3509         RAISE FND_API.G_EXC_ERROR;
3510     END CASE;
3511     l_key        := l_event_name||p_event_id;
3512     l_paramlist  := WF_PARAMETER_LIST_T();
3513 
3514     log('Event Name  : '||l_event_name);
3515     log('Event Key   : '||l_key);
3516     log('Adding parameters');
3517 
3518     wf_event.addParameterToList(
3519       p_name  => 'CDH_EVENT_ID',
3520       p_value => p_event_id,
3521       p_parameterlist => l_paramlist);
3522 
3523     wf_event.addParameterToList(
3524       p_name  => 'CDH_OBJECT_ID',
3525       p_value => p_party_id,
3526       p_parameterlist => l_paramlist);
3527 
3528     wf_event.addParameterToList(
3529       p_name  => 'CDH_OBJ_SOURCE',
3530       p_value => p_obj_source,
3531       p_parameterlist => l_paramlist);
3532 
3533     log('Raise business event: '||l_event_name);
3534     HZ_EVENT_PKG.raise_event(
3535       p_event_name        => l_event_name,
3536       p_event_key         => l_key,
3537       p_parameters        => l_paramlist);
3538 
3539     log('Remove parameter list');
3540     l_paramlist.DELETE;
3541 
3542     log('Update BOT Event Id');
3543     -- update BOT event id here
3544     HZ_BES_BO_UTIL_PKG.upd_bot_evtid_dt(
3545       p_bulk_evt        => FALSE,
3546       p_evt_id          => p_event_id,
3547       p_child_id        => p_party_id,
3548       p_child_bo_code   => p_bo_code,
3549       p_creation_date   => sysdate,
3550       p_evt_type        => p_create_or_update,
3551       p_commit          => FALSE,
3552       p_per_ins_evt_id  => NULL,
3553       p_per_upd_evt_id  => NULL,
3554       p_org_ins_evt_id  => NULL,
3555       p_org_upd_evt_id  => NULL,
3556       p_perc_ins_evt_id => NULL,
3557       p_perc_upd_evt_id => NULL,
3558       p_orgc_ins_evt_id => NULL,
3559       p_orgc_upd_evt_id => NULL
3560     );
3561     log('Done raising event');
3562 
3563     IF(p_create_or_update = 'C') THEN
3564       log('Set BO version number');
3565       set_hz_parties_bo_ver(
3566         p_party_id      => p_party_id,
3567         p_bo_code       => p_bo_code
3568       );
3569     END IF;
3570     log('Exit procedure');
3571   EXCEPTION
3572     WHEN FND_API.G_EXC_ERROR THEN
3573       log('Expected error');
3574       l_paramlist.DELETE;
3575       RAISE FND_API.G_EXC_ERROR;
3576     WHEN OTHERS THEN
3577       log(SQLERRM);
3578       l_paramlist.DELETE;
3579       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3580   END call_bes;
3581 
3582   -- PROCEDURE set_hz_parties_bo_ver
3583   --
3584   -- DESCRIPTION
3585   --     Set BO_VERSION_NUMBER in HZ_PARTIES table.  This procedure
3586   --     will be called from Organization, Organization Customer,
3587   --     Person, Person Customer BO create API.
3588   --
3589   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3590   --
3591   -- ARGUMENTS
3592   --   IN:
3593   --     p_party_id           Party Id.
3594   -- NOTES
3595   --
3596   -- MODIFICATION HISTORY
3597   --
3598   --   04-OCT-2005    Arnold Ng          Created.
3599   --
3600 
3601   PROCEDURE set_hz_parties_bo_ver(
3602     p_party_id       IN NUMBER,
3603     p_bo_code        IN VARCHAR2
3604   ) IS
3605   BEGIN
3606     IF(p_bo_code = 'PERSON') THEN
3607       UPDATE HZ_PARTIES
3608       SET PERSON_BO_VERSION = (SELECT BO_VERSION_NUMBER
3609                                FROM HZ_BUS_OBJ_DEFINITIONS
3610                                WHERE BUSINESS_OBJECT_CODE = 'PERSON'
3611                                AND ENTITY_NAME = 'HZ_PARTIES')
3612       WHERE PARTY_ID = p_party_id;
3613     ELSIF(p_bo_code = 'PERSON_CUST') THEN
3614       UPDATE HZ_PARTIES
3615       SET PERSON_CUST_BO_VERSION = (SELECT BO_VERSION_NUMBER
3616                                     FROM HZ_BUS_OBJ_DEFINITIONS
3617                                     WHERE BUSINESS_OBJECT_CODE = 'PERSON_CUST'
3618                                     AND ENTITY_NAME = 'HZ_PARTIES'
3619                                     AND CHILD_BO_CODE IS NULL)
3620       WHERE PARTY_ID = p_party_id;
3621     ELSIF(p_bo_code = 'ORG') THEN
3622       UPDATE HZ_PARTIES
3623       SET ORG_BO_VERSION = (SELECT BO_VERSION_NUMBER
3624                             FROM HZ_BUS_OBJ_DEFINITIONS
3625                             WHERE BUSINESS_OBJECT_CODE = 'ORG'
3626                             AND ENTITY_NAME = 'HZ_PARTIES')
3627       WHERE PARTY_ID = p_party_id;
3628     ELSIF(p_bo_code = 'ORG_CUST') THEN
3629       UPDATE HZ_PARTIES
3630       SET ORG_CUST_BO_VERSION = (SELECT BO_VERSION_NUMBER
3631                                  FROM HZ_BUS_OBJ_DEFINITIONS
3632                                  WHERE BUSINESS_OBJECT_CODE = 'ORG_CUST'
3633                                  AND ENTITY_NAME = 'HZ_PARTIES'
3634                                  AND CHILD_BO_CODE IS NULL)
3635       WHERE PARTY_ID = p_party_id;
3636     END IF;
3637   EXCEPTION
3638     WHEN NO_DATA_FOUND THEN
3639       NULL;
3640   END set_hz_parties_bo_ver;
3641 
3642   -- FUNCTION is_raising_create_event
3643   --
3644   -- DESCRIPTION
3645   --     Return true if raise BES event per object for create.
3646   --
3647   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3648   --
3649   -- ARGUMENTS
3650   --   IN:
3651   --     p_obj_complete_flag  Flag indicates if object is complete
3652   -- NOTES
3653   --
3654   -- MODIFICATION HISTORY
3655   --
3656   --   04-OCT-2005    Arnold Ng          Created.
3657   --
3658 
3659   FUNCTION is_raising_create_event(
3660     p_obj_complete_flag       IN BOOLEAN
3661   ) RETURN BOOLEAN IS
3662   BEGIN
3663     IF(p_obj_complete_flag) AND
3664       (G_BO_EVENTS_FORMAT = 'N') AND
3665       (G_EVENT_TYPE in ('EVENTS_ENABLED', 'BO_EVENTS_ENABLED')) THEN
3666       RETURN TRUE;
3667     ELSE
3668       RETURN FALSE;
3669     END IF;
3670   END is_raising_create_event;
3671 
3672   FUNCTION is_raising_update_event(
3673     p_party_id       IN NUMBER,
3674     p_bo_code        IN VARCHAR2
3675   ) RETURN BOOLEAN IS
3676     CURSOR get_party_bo_version IS
3677     SELECT nvl(PERSON_BO_VERSION, 0), nvl(PERSON_CUST_BO_VERSION, 0),
3678            nvl(ORG_BO_VERSION, 0), nvl(ORG_CUST_BO_VERSION, 0)
3679     FROM HZ_PARTIES
3680     WHERE party_id = p_party_id;
3681 
3682     CURSOR get_def_bo_version IS
3683     SELECT nvl(BO_VERSION_NUMBER, 0)
3684     FROM HZ_BUS_OBJ_DEFINITIONS
3685     WHERE BUSINESS_OBJECT_CODE = p_bo_code
3686     AND ENTITY_NAME = 'HZ_PARTIES'
3687     AND CHILD_BO_CODE IS NULL;
3688 
3689     l_per_bo_ver           NUMBER;
3690     l_pc_bo_ver            NUMBER;
3691     l_org_bo_ver           NUMBER;
3692     l_oc_bo_ver            NUMBER;
3693     l_bo_ver               NUMBER;
3694   BEGIN
3695     OPEN get_party_bo_version;
3696     FETCH get_party_bo_version INTO l_per_bo_ver, l_pc_bo_ver, l_org_bo_ver, l_oc_bo_ver;
3697     CLOSE get_party_bo_version;
3698 
3699     OPEN get_def_bo_version;
3700     FETCH get_def_bo_version INTO l_bo_ver;
3701     CLOSE get_def_bo_version;
3702 
3703     IF(p_bo_code = 'PERSON') AND
3704       (l_per_bo_ver = l_bo_ver) AND
3705       (G_BO_EVENTS_FORMAT = 'N') AND
3706       (G_EVENT_TYPE in ('EVENTS_ENABLED', 'BO_EVENTS_ENABLED')) THEN
3707       RETURN TRUE;
3708     ELSIF(p_bo_code = 'PERSON_CUST') AND
3709       (l_pc_bo_ver = l_bo_ver) AND
3710       (G_BO_EVENTS_FORMAT = 'N') AND
3711       (G_EVENT_TYPE in ('EVENTS_ENABLED', 'BO_EVENTS_ENABLED')) THEN
3712       RETURN TRUE;
3713     ELSIF(p_bo_code = 'ORG') AND
3714       (l_org_bo_ver = l_bo_ver) AND
3715       (G_BO_EVENTS_FORMAT = 'N') AND
3716       (G_EVENT_TYPE in ('EVENTS_ENABLED', 'BO_EVENTS_ENABLED')) THEN
3717       RETURN TRUE;
3718     ELSIF(p_bo_code = 'ORG_CUST') AND
3719       (l_oc_bo_ver = l_bo_ver) AND
3720       (G_BO_EVENTS_FORMAT = 'N') AND
3721       (G_EVENT_TYPE in ('EVENTS_ENABLED', 'BO_EVENTS_ENABLED')) THEN
3722       RETURN TRUE;
3723     END IF;
3724     RETURN FALSE;
3725   END is_raising_update_event;
3726 
3727   PROCEDURE log(
3728     message      IN VARCHAR2,
3729     newline      IN BOOLEAN DEFAULT TRUE) IS
3730     l_prefix VARCHAR2(20) := 'V3API_BO_RAISE';
3731   BEGIN
3732     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3733       hz_utility_v2pub.DEBUG (p_message=>message,
3734                               p_prefix=>l_prefix,
3735                               p_msg_level=>fnd_log.level_procedure);
3736     END IF ;
3737 
3738     IF newline THEN
3739       FND_FILE.put_line(FND_FILE.LOG,message);
3740       FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
3741     ELSE
3742       FND_FILE.put_line(FND_FILE.LOG,message);
3743     END IF;
3744   END log;
3745 
3746   PROCEDURE add_cust_tracking(
3747     p_party_id          IN NUMBER,
3748     p_bo_code           IN VARCHAR2,
3749     p_create_or_update  IN VARCHAR2
3750   ) IS
3751     l_debug_prefix            VARCHAR2(30);
3752     l_date                    DATE;
3753     l_child_rec_exists_no     NUMBER;
3754     l_child_code              VARCHAR2(30);
3755     l_insert_or_update        VARCHAR2(1);
3756   BEGIN
3757     l_date := sysdate;
3758     l_child_rec_exists_no := 0;
3759 
3760     IF(p_bo_code = 'PERSON_CUST') THEN
3761       l_child_code := 'PERSON';
3762     ELSIF(p_bo_code = 'ORG_CUST') THEN
3763       l_child_code := 'ORG';
3764     END IF;
3765 
3766     IF(p_create_or_update = 'C') THEN
3767       l_insert_or_update := 'I';
3768     ELSE
3769       l_insert_or_update := 'U';
3770     END IF;
3771 
3772     -- insert person_cust/org_cust record
3773     BEGIN
3774       SELECT child_id INTO  l_child_rec_exists_no
3775       FROM  HZ_BUS_OBJ_TRACKING
3776       WHERE event_id IS NULL
3777       AND CHILD_ENTITY_NAME = 'HZ_PARTIES'
3778       AND CHILD_BO_CODE = p_bo_code
3779       AND CHILD_ID = p_party_id
3780       AND PARENT_ID IS NULL
3781       AND PARENT_BO_CODE IS NULL
3782       AND PARENT_ENTITY_NAME IS NULL
3783       AND rownum = 1;
3784 
3785       IF l_child_rec_exists_no <> 0 THEN
3786         -- data already exists, no need to write
3787         hz_utility_v2pub.DEBUG(p_message=> 'Record already exists in BOT',
3788                                p_prefix=>l_debug_prefix,
3789                                p_msg_level=>fnd_log.level_procedure);
3790       END IF;
3791     EXCEPTION
3792       WHEN NO_DATA_FOUND THEN
3793         INSERT INTO HZ_BUS_OBJ_TRACKING
3794         ( POPULATED_FLAG, CHILD_OPERATION_FLAG, CHILD_ID, CHILD_ENTITY_NAME, CHILD_BO_CODE,
3795           LAST_UPDATE_DATE, CREATION_DATE, PARENT_ENTITY_NAME, PARENT_ID, PARENT_BO_CODE
3796         ) VALUES (
3797           'Y', l_insert_or_update, p_party_id, 'HZ_PARTIES', p_bo_code,
3798           l_date, l_date, NULL, NULL, NULL);
3799     END;
3800 
3801     l_child_rec_exists_no := 0;
3802 
3803     -- insert person/org record with parent equals to person_cust/org_cust
3804     BEGIN
3805       SELECT child_id INTO  l_child_rec_exists_no
3806       FROM  HZ_BUS_OBJ_TRACKING
3807       WHERE event_id IS NULL
3808       AND CHILD_ENTITY_NAME = 'HZ_PARTIES'
3809       AND CHILD_BO_CODE = l_child_code
3810       AND CHILD_ID = p_party_id
3811       AND PARENT_ID = p_party_id
3812       AND PARENT_BO_CODE = p_bo_code
3813       AND PARENT_ENTITY_NAME = 'HZ_PARTIES'
3814       AND rownum = 1;
3815 
3816       IF l_child_rec_exists_no <> 0 THEN
3817         -- data already exists, no need to write
3818         hz_utility_v2pub.DEBUG(p_message=> 'Record already exists in BOT',
3819                                p_prefix=>l_debug_prefix,
3820                                p_msg_level=>fnd_log.level_procedure);
3821       END IF;
3822     EXCEPTION
3823       WHEN NO_DATA_FOUND THEN
3824         INSERT INTO HZ_BUS_OBJ_TRACKING
3825         ( POPULATED_FLAG, CHILD_OPERATION_FLAG, CHILD_ID, CHILD_ENTITY_NAME, CHILD_BO_CODE,
3826           LAST_UPDATE_DATE, CREATION_DATE, PARENT_ENTITY_NAME, PARENT_ID, PARENT_BO_CODE
3827         ) VALUES (
3828           'Y', l_insert_or_update, p_party_id, 'HZ_PARTIES', l_child_code,
3829           l_date, l_date, 'HZ_PARTIES', p_party_id, p_bo_code);
3830     END;
3831   END add_cust_tracking;
3832 
3833   FUNCTION return_all_messages(
3834     x_return_status  IN VARCHAR2,
3835     x_msg_count      IN NUMBER,
3836     x_msg_data       IN VARCHAR2
3837   ) RETURN HZ_MESSAGE_OBJ_TBL IS
3838     l_msg_data    HZ_MESSAGE_OBJ_TBL;
3839   BEGIN
3840     l_msg_data := HZ_MESSAGE_OBJ_TBL();
3841     IF(x_msg_count > 1 AND x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3842       FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
3843         l_msg_data.EXTEND;
3844         l_msg_data(I) := HZ_MESSAGE_OBJ(FND_MSG_PUB.Get(I, p_encoded => FND_API.G_FALSE));
3845       END LOOP;
3846     ELSE
3847       l_msg_data.EXTEND;
3848       l_msg_data(1) := HZ_MESSAGE_OBJ(x_msg_data);
3849     END IF;
3850     RETURN l_msg_data;
3851   END return_all_messages;
3852 
3853 END HZ_PARTY_BO_PVT;