DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_CUST_ACCT_BO_PUB

Source


1 PACKAGE BODY hz_cust_acct_bo_pub AS
2 /*$Header: ARHBCABB.pls 120.14 2008/02/06 09:44:55 vsegu ship $ */
3 
4   -- PRIVATE PROCEDURE assign_cust_acct_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from customer account object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_cust_acct_obj      Customer account object.
14   --     p_cust_acct_id       Customer account Id.
15   --     p_cust_acct_os       Customer account original system.
16   --     p_cust_acct_osr      Customer account original system reference.
17   --     p_create_or_update   Create or update flag.
18   --   IN/OUT:
19   --     px_cust_acct_rec     Customer Account plsql record.
20   --
21   -- NOTES
22   --
23   -- MODIFICATION HISTORY
24   --
25   --   14-DEC-2004    Arnold Ng          Created.
26 
27   PROCEDURE assign_cust_acct_rec(
28     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
29     p_cust_acct_id            IN            NUMBER,
30     p_cust_acct_os            IN            VARCHAR2,
31     p_cust_acct_osr           IN            VARCHAR2,
32     p_create_or_update        IN            VARCHAR2 := 'C',
33     px_cust_acct_rec          IN OUT NOCOPY HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
34   );
35 
36   -- PRIVATE PROCEDURE assign_cust_acct_rec
37   --
38   -- DESCRIPTION
39   --     Assign attribute value from customer account object to plsql record.
40   --
41   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
42   --
43   -- ARGUMENTS
44   --   IN:
45   --     p_cust_acct_obj      Customer account object.
46   --     p_cust_acct_id       Customer account Id.
47   --     p_cust_acct_os       Customer account original system.
48   --     p_cust_acct_osr      Customer account original system reference.
49   --     p_create_or_update   Create or update flag.
50   --   IN/OUT:
51   --     px_cust_acct_rec     Customer Account plsql record.
52   --
53   -- NOTES
54   --
55   -- MODIFICATION HISTORY
56   --
57   --   14-DEC-2004    Arnold Ng          Created.
58 
59   PROCEDURE assign_cust_acct_rec(
60     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
61     p_cust_acct_id            IN            NUMBER,
62     p_cust_acct_os            IN            VARCHAR2,
63     p_cust_acct_osr           IN            VARCHAR2,
64     p_create_or_update        IN            VARCHAR2 := 'C',
65     px_cust_acct_rec          IN OUT NOCOPY HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
66   ) IS
67   BEGIN
68     px_cust_acct_rec.cust_account_id        := p_cust_acct_id;
69     px_cust_acct_rec.account_number         := p_cust_acct_obj.account_number;
70     IF(p_cust_acct_obj.status in ('A','I')) THEN
71       px_cust_acct_rec.status                 := p_cust_acct_obj.status;
72     END IF;
73     px_cust_acct_rec.customer_type          := p_cust_acct_obj.customer_type;
74     px_cust_acct_rec.customer_class_code    := p_cust_acct_obj.customer_class_code;
75     px_cust_acct_rec.primary_salesrep_id    := p_cust_acct_obj.primary_salesrep_id;
76     px_cust_acct_rec.sales_channel_code     := p_cust_acct_obj.sales_channel_code;
77     px_cust_acct_rec.order_type_id          := p_cust_acct_obj.order_type_id;
78     px_cust_acct_rec.price_list_id          := p_cust_acct_obj.price_list_id;
79     px_cust_acct_rec.tax_code               := p_cust_acct_obj.tax_code;
80     px_cust_acct_rec.fob_point              := p_cust_acct_obj.fob_point;
81     px_cust_acct_rec.freight_term           := p_cust_acct_obj.freight_term;
82     px_cust_acct_rec.ship_partial           := p_cust_acct_obj.ship_partial;
83     px_cust_acct_rec.ship_via               := p_cust_acct_obj.ship_via;
84     px_cust_acct_rec.warehouse_id           := p_cust_acct_obj.warehouse_id;
85     IF(p_cust_acct_obj.tax_header_level_flag in ('Y','N')) THEN
86       px_cust_acct_rec.tax_header_level_flag  := p_cust_acct_obj.tax_header_level_flag;
87     END IF;
88     px_cust_acct_rec.tax_rounding_rule      := p_cust_acct_obj.tax_rounding_rule;
89     px_cust_acct_rec.coterminate_day_month  := p_cust_acct_obj.coterminate_day_month;
90     px_cust_acct_rec.primary_specialist_id  := p_cust_acct_obj.primary_specialist_id;
91     px_cust_acct_rec.secondary_specialist_id := p_cust_acct_obj.secondary_specialist_id;
92     IF(p_cust_acct_obj.account_liable_flag in ('Y','N')) THEN
93       px_cust_acct_rec.account_liable_flag    := p_cust_acct_obj.account_liable_flag;
94     END IF;
95     px_cust_acct_rec.current_balance        := p_cust_acct_obj.current_balance;
96     px_cust_acct_rec.account_established_date := p_cust_acct_obj.account_established_date;
97     px_cust_acct_rec.account_termination_date := p_cust_acct_obj.account_termination_date;
98     px_cust_acct_rec.account_activation_date  := p_cust_acct_obj.account_activation_date;
99     px_cust_acct_rec.department               := p_cust_acct_obj.department;
100     px_cust_acct_rec.held_bill_expiration_date:= p_cust_acct_obj.held_bill_expiration_date;
101     IF(p_cust_acct_obj.hold_bill_flag in ('Y','N')) THEN
102       px_cust_acct_rec.hold_bill_flag := p_cust_acct_obj.hold_bill_flag;
103     END IF;
104     px_cust_acct_rec.realtime_rate_flag := p_cust_acct_obj.realtime_rate_flag;
105     px_cust_acct_rec.acct_life_cycle_status := p_cust_acct_obj.acct_life_cycle_status;
106     px_cust_acct_rec.account_name := p_cust_acct_obj.account_name;
107     px_cust_acct_rec.deposit_refund_method := p_cust_acct_obj.deposit_refund_method;
108     IF(p_cust_acct_obj.dormant_account_flag in ('Y','N')) THEN
109       px_cust_acct_rec.dormant_account_flag := p_cust_acct_obj.dormant_account_flag;
110     END IF;
111     px_cust_acct_rec.npa_number := p_cust_acct_obj.npa_number;
112     px_cust_acct_rec.suspension_date := p_cust_acct_obj.suspension_date;
113     px_cust_acct_rec.source_code := p_cust_acct_obj.source_code;
114     px_cust_acct_rec.comments := p_cust_acct_obj.comments;
115     px_cust_acct_rec.dates_negative_tolerance := p_cust_acct_obj.dates_negative_tolerance;
116     px_cust_acct_rec.dates_positive_tolerance := p_cust_acct_obj.dates_positive_tolerance;
117     px_cust_acct_rec.date_type_preference := p_cust_acct_obj.date_type_preference;
118     px_cust_acct_rec.over_shipment_tolerance := p_cust_acct_obj.over_shipment_tolerance;
119     px_cust_acct_rec.under_shipment_tolerance := p_cust_acct_obj.under_shipment_tolerance;
120     px_cust_acct_rec.over_return_tolerance := p_cust_acct_obj.over_return_tolerance;
121     px_cust_acct_rec.under_return_tolerance := p_cust_acct_obj.under_return_tolerance;
122     px_cust_acct_rec.item_cross_ref_pref := p_cust_acct_obj.item_cross_ref_pref;
123     IF(p_cust_acct_obj.ship_sets_include_lines_flag in ('Y','N')) THEN
124       px_cust_acct_rec.ship_sets_include_lines_flag := p_cust_acct_obj.ship_sets_include_lines_flag;
125     END IF;
126     IF(p_cust_acct_obj.arrivalsets_incl_lines_flag in ('Y','N')) THEN
127       px_cust_acct_rec.arrivalsets_include_lines_flag := p_cust_acct_obj.arrivalsets_incl_lines_flag;
128     END IF;
129     IF(p_cust_acct_obj.sched_date_push_flag in ('Y','N')) THEN
130       px_cust_acct_rec.sched_date_push_flag := p_cust_acct_obj.sched_date_push_flag;
131     END IF;
132     px_cust_acct_rec.invoice_quantity_rule := p_cust_acct_obj.invoice_quantity_rule;
133     px_cust_acct_rec.pricing_event := p_cust_acct_obj.pricing_event;
134     px_cust_acct_rec.status_update_date := p_cust_acct_obj.status_update_date;
135     IF(p_cust_acct_obj.autopay_flag in ('Y','N')) THEN
136       px_cust_acct_rec.autopay_flag := p_cust_acct_obj.autopay_flag;
137     END IF;
138     IF(p_cust_acct_obj.notify_flag in ('Y','N')) THEN
139       px_cust_acct_rec.notify_flag := p_cust_acct_obj.notify_flag;
140     END IF;
141     px_cust_acct_rec.last_batch_id := p_cust_acct_obj.last_batch_id;
142     px_cust_acct_rec.selling_party_id := p_cust_acct_obj.selling_party_id;
143     IF(p_create_or_update = 'C') THEN
144       px_cust_acct_rec.orig_system            := p_cust_acct_os;
145       px_cust_acct_rec.orig_system_reference  := p_cust_acct_osr;
146       px_cust_acct_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
147     END IF;
148     px_cust_acct_rec.attribute_category   := p_cust_acct_obj.attribute_category;
149     px_cust_acct_rec.attribute1           := p_cust_acct_obj.attribute1;
150     px_cust_acct_rec.attribute2           := p_cust_acct_obj.attribute2;
151     px_cust_acct_rec.attribute3           := p_cust_acct_obj.attribute3;
152     px_cust_acct_rec.attribute4           := p_cust_acct_obj.attribute4;
153     px_cust_acct_rec.attribute5           := p_cust_acct_obj.attribute5;
154     px_cust_acct_rec.attribute6           := p_cust_acct_obj.attribute6;
155     px_cust_acct_rec.attribute7           := p_cust_acct_obj.attribute7;
156     px_cust_acct_rec.attribute8           := p_cust_acct_obj.attribute8;
157     px_cust_acct_rec.attribute9           := p_cust_acct_obj.attribute9;
158     px_cust_acct_rec.attribute10          := p_cust_acct_obj.attribute10;
159     px_cust_acct_rec.attribute11          := p_cust_acct_obj.attribute11;
160     px_cust_acct_rec.attribute12          := p_cust_acct_obj.attribute12;
161     px_cust_acct_rec.attribute13          := p_cust_acct_obj.attribute13;
162     px_cust_acct_rec.attribute14          := p_cust_acct_obj.attribute14;
163     px_cust_acct_rec.attribute15          := p_cust_acct_obj.attribute15;
164     px_cust_acct_rec.attribute16          := p_cust_acct_obj.attribute16;
165     px_cust_acct_rec.attribute17          := p_cust_acct_obj.attribute17;
166     px_cust_acct_rec.attribute18          := p_cust_acct_obj.attribute18;
167     px_cust_acct_rec.attribute19          := p_cust_acct_obj.attribute19;
168     px_cust_acct_rec.attribute20          := p_cust_acct_obj.attribute20;
169     px_cust_acct_rec.global_attribute_category   := p_cust_acct_obj.global_attribute_category;
170     px_cust_acct_rec.global_attribute1    := p_cust_acct_obj.global_attribute1;
171     px_cust_acct_rec.global_attribute2    := p_cust_acct_obj.global_attribute2;
172     px_cust_acct_rec.global_attribute3    := p_cust_acct_obj.global_attribute3;
173     px_cust_acct_rec.global_attribute4    := p_cust_acct_obj.global_attribute4;
174     px_cust_acct_rec.global_attribute5    := p_cust_acct_obj.global_attribute5;
175     px_cust_acct_rec.global_attribute6    := p_cust_acct_obj.global_attribute6;
176     px_cust_acct_rec.global_attribute7    := p_cust_acct_obj.global_attribute7;
177     px_cust_acct_rec.global_attribute8    := p_cust_acct_obj.global_attribute8;
178     px_cust_acct_rec.global_attribute9    := p_cust_acct_obj.global_attribute9;
179     px_cust_acct_rec.global_attribute10   := p_cust_acct_obj.global_attribute10;
180     px_cust_acct_rec.global_attribute11   := p_cust_acct_obj.global_attribute11;
181     px_cust_acct_rec.global_attribute12   := p_cust_acct_obj.global_attribute12;
182     px_cust_acct_rec.global_attribute13   := p_cust_acct_obj.global_attribute13;
183     px_cust_acct_rec.global_attribute14   := p_cust_acct_obj.global_attribute14;
184     px_cust_acct_rec.global_attribute15   := p_cust_acct_obj.global_attribute15;
185     px_cust_acct_rec.global_attribute16   := p_cust_acct_obj.global_attribute16;
186     px_cust_acct_rec.global_attribute17   := p_cust_acct_obj.global_attribute17;
187     px_cust_acct_rec.global_attribute18   := p_cust_acct_obj.global_attribute18;
188     px_cust_acct_rec.global_attribute19   := p_cust_acct_obj.global_attribute19;
189     px_cust_acct_rec.global_attribute20   := p_cust_acct_obj.global_attribute20;
190   END assign_cust_acct_rec;
191 
192   -- PROCEDURE do_create_cust_acct_bo
193   --
194   -- DESCRIPTION
195   --     Create customer account business object.
196   PROCEDURE do_create_cust_acct_bo(
197     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
198     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
199     p_cust_acct_obj           IN OUT NOCOPY HZ_CUST_ACCT_BO,
200     p_created_by_module       IN            VARCHAR2,
201     p_obj_source              IN            VARCHAR2 := null,
202     x_return_status           OUT NOCOPY    VARCHAR2,
203     x_msg_count               OUT NOCOPY    NUMBER,
204     x_msg_data                OUT NOCOPY    VARCHAR2,
205     x_cust_acct_id            OUT NOCOPY    NUMBER,
206     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
207     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
208     px_parent_id              IN OUT NOCOPY NUMBER,
209     px_parent_os              IN OUT NOCOPY VARCHAR2,
210     px_parent_osr             IN OUT NOCOPY VARCHAR2,
211     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
212   ) IS
213     l_debug_prefix            VARCHAR2(30) := '';
214     l_cust_acct_rec           HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE;
215     l_person_rec              HZ_PARTY_V2PUB.PERSON_REC_TYPE;
216     l_organization_rec        HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE;
217     l_profile_rec             HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
218 
219     l_party_id                NUMBER;
220     l_party_number            VARCHAR2(30);
221     l_profile_id              NUMBER;
222     l_cust_acct_profile_id    NUMBER;
223     l_account_number          VARCHAR2(30);
224     l_valid_obj               BOOLEAN;
225     l_bus_object              HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
226     l_cbm                     VARCHAR2(30);
227 
228     CURSOR get_cust_acct_profile_id(p_cust_acct_id NUMBER) IS
229     SELECT cust_account_profile_id
230     FROM HZ_CUSTOMER_PROFILES
231     WHERE cust_account_id = p_cust_acct_id;
232   BEGIN
233     -- Standard start of API savepoint
234     SAVEPOINT do_create_cust_acct_bo_pub;
235 
236     -- initialize API return status to success.
237     x_return_status := FND_API.G_RET_STS_SUCCESS;
238 
239     -- Initialize message list if p_init_msg_list is set to TRUE.
240     IF FND_API.to_Boolean(p_init_msg_list) THEN
241       FND_MSG_PUB.initialize;
242     END IF;
243 
244     -- initialize Global variable
245     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
246     IF(p_created_by_module IS NULL) THEN
247       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
248     ELSE
249       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
250     END IF;
251 
252     -- Debug info.
253     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
254         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_bo(+)',
255                                p_prefix=>l_debug_prefix,
256                                p_msg_level=>fnd_log.level_procedure);
257     END IF;
258 
259     -- Base on p_validate_bo_flag, check the completeness of business objects
260     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
261       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
262         p_bus_object_code         => 'CUST_ACCT',
263         x_bus_object              => l_bus_object
264       );
265       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_ca_bo_comp(
266                        p_ca_objs    => HZ_CUST_ACCT_BO_TBL(p_cust_acct_obj),
267                        p_bus_object => l_bus_object
268                      );
269       IF NOT(l_valid_obj) THEN
270         RAISE fnd_api.g_exc_error;
271       END IF;
272     END IF;
273 
274     -- check pass in parent_id and parent_os+osr
275     hz_registry_validate_bo_pvt.validate_parent_id(
276       px_parent_id      => px_parent_id,
277       px_parent_os      => px_parent_os,
278       px_parent_osr     => px_parent_osr,
279       p_parent_obj_type => px_parent_obj_type,
280       x_return_status   => x_return_status,
281       x_msg_count       => x_msg_count,
282       x_msg_data        => x_msg_data);
283 
284     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
285       RAISE FND_API.G_EXC_ERROR;
286     END IF;
287 
288     x_cust_acct_id := p_cust_acct_obj.cust_acct_id;
289     x_cust_acct_os := p_cust_acct_obj.orig_system;
290     x_cust_acct_osr := p_cust_acct_obj.orig_system_reference;
291 
292     -- check if pass in cust_acct_id and os+osr
293     hz_registry_validate_bo_pvt.validate_ssm_id(
294       px_id              => x_cust_acct_id,
295       px_os              => x_cust_acct_os,
296       px_osr             => x_cust_acct_osr,
297       p_obj_type         => 'HZ_CUST_ACCOUNTS',
298       p_create_or_update => 'C',
299       x_return_status    => x_return_status,
300       x_msg_count        => x_msg_count,
301       x_msg_data         => x_msg_data);
302 
303     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
304       RAISE FND_API.G_EXC_ERROR;
305     END IF;
306 
307     assign_cust_acct_rec(
308       p_cust_acct_obj          => p_cust_acct_obj,
312       px_cust_acct_rec         => l_cust_acct_rec
309       p_cust_acct_id           => x_cust_acct_id,
310       p_cust_acct_os           => x_cust_acct_os,
311       p_cust_acct_osr          => x_cust_acct_osr,
313     );
314 
315     IF(p_cust_acct_obj.cust_profile_obj IS NULL) THEN
316       fnd_message.set_name('AR', 'HZ_API_MISSING_MANDATORY_ENT');
317       fnd_message.set_token('ENTITY' ,'CUST_PROFILE');
318       fnd_msg_pub.add;
319       RAISE FND_API.G_EXC_ERROR;
320     END IF;
321 
322     HZ_CUST_ACCT_BO_PVT.assign_cust_profile_rec(
323       p_cust_profile_obj            => p_cust_acct_obj.cust_profile_obj,
324       p_cust_acct_id                => x_cust_acct_id,
325       p_site_use_id                 => NULL,
326       px_cust_profile_rec           => l_profile_rec
327     );
328 
329     -- set party_id to party record
330     -- profile amount will be created after creating cust account
331     -- therefore set p_create_profile_amt to FND_API.G_FALSE
332     IF(px_parent_obj_type = 'ORG') THEN
333       l_organization_rec.party_rec.party_id := px_parent_id;
334       HZ_CUST_ACCOUNT_V2PUB.create_cust_account (
335         p_cust_account_rec        => l_cust_acct_rec,
336         p_organization_rec        => l_organization_rec,
337         p_customer_profile_rec    => l_profile_rec,
338         p_create_profile_amt      => FND_API.G_FALSE,
339         x_cust_account_id         => x_cust_acct_id,
340         x_account_number          => l_account_number,
341         x_party_id                => l_party_id,
342         x_party_number            => l_party_number,
343         x_profile_id              => l_profile_id,
344         x_return_status           => x_return_status,
345         x_msg_count               => x_msg_count,
346         x_msg_data                => x_msg_data
347       );
348     ELSE
349       l_person_rec.party_rec.party_id := px_parent_id;
350       HZ_CUST_ACCOUNT_V2PUB.create_cust_account (
351         p_cust_account_rec        => l_cust_acct_rec,
352         p_person_rec              => l_person_rec,
353         p_customer_profile_rec    => l_profile_rec,
354         p_create_profile_amt      => FND_API.G_FALSE,
355         x_cust_account_id         => x_cust_acct_id,
356         x_account_number          => l_account_number,
357         x_party_id                => l_party_id,
358         x_party_number            => l_party_number,
359         x_profile_id              => l_profile_id,
360         x_return_status           => x_return_status,
361         x_msg_count               => x_msg_count,
362         x_msg_data                => x_msg_data
363       );
364     END IF;
365 
366     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
367       RAISE FND_API.G_EXC_ERROR;
368     END IF;
369 
370     OPEN get_cust_acct_profile_id(x_cust_acct_id);
371     FETCH get_cust_acct_profile_id INTO l_cust_acct_profile_id;
372     CLOSE get_cust_acct_profile_id;
373 
374     -- assign cust_acct_id
375     p_cust_acct_obj.cust_acct_id := x_cust_acct_id;
376     p_cust_acct_obj.cust_profile_obj.cust_acct_profile_id := l_cust_acct_profile_id;
377     -----------------------------
378     -- Create cust profile amount
379     -----------------------------
380     IF((p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs IS NOT NULL) AND
381        (p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs.COUNT > 0)) THEN
382       HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
383         p_cpa_objs                => p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs,
384         p_cp_id                   => l_cust_acct_profile_id,
385         p_ca_id                   => x_cust_acct_id,
386         p_casu_id                 => NULL,
387         x_return_status           => x_return_status,
388         x_msg_count               => x_msg_count,
389         x_msg_data                => x_msg_data
390       );
391 
392       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
393         RAISE FND_API.G_EXC_ERROR;
394       END IF;
395     END IF;
396 
397     -------------------------------------
398     -- Create cust acct relate
399     -------------------------------------
400     IF((p_cust_acct_obj.acct_relate_objs IS NOT NULL) AND
401        (p_cust_acct_obj.acct_relate_objs.COUNT > 0)) THEN
402       HZ_CUST_ACCT_BO_PVT.create_cust_acct_relates(
403         p_car_objs                => p_cust_acct_obj.acct_relate_objs,
404         p_ca_id                   => x_cust_acct_id,
405         x_return_status           => x_return_status,
406         x_msg_count               => x_msg_count,
407         x_msg_data                => x_msg_data
408       );
409 
410       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
411         RAISE FND_API.G_EXC_ERROR;
412       END IF;
413     END IF;
414 
415     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
416 
417     -------------------------------------
418     -- Call cust account contact
419     -------------------------------------
420     -- Parent of cust account contact is cust account site
421     -- so pass x_cust_acct_id, x_cust_acct_os and x_cust_acct_osr
422     IF((p_cust_acct_obj.cust_acct_contact_objs IS NOT NULL) AND
423        (p_cust_acct_obj.cust_acct_contact_objs.COUNT > 0)) THEN
424       HZ_CUST_ACCT_CONTACT_BO_PVT.save_cust_acct_contacts(
425         p_cac_objs           => p_cust_acct_obj.cust_acct_contact_objs,
426         p_create_update_flag => 'C',
430         x_msg_data           => x_msg_data,
427         p_obj_source         => p_obj_source,
428         x_return_status      => x_return_status,
429         x_msg_count          => x_msg_count,
431         p_parent_id          => x_cust_acct_id,
432         p_parent_os          => x_cust_acct_os,
433         p_parent_osr         => x_cust_acct_osr,
434         p_parent_obj_type    => 'CUST_ACCT'
435       );
436 
437       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
438         RAISE FND_API.G_EXC_ERROR;
439       END IF;
440     END IF;
441 
442     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
443 
444     -------------------------------------
445     -- Call cust account site
446     -------------------------------------
447     -- create cust account site uses will include cust acct site use plus site use profile
448     -- need to put customer account id and customer account site id
449     IF((p_cust_acct_obj.cust_acct_site_objs IS NOT NULL) AND
450        (p_cust_acct_obj.cust_acct_site_objs.COUNT > 0)) THEN
451       HZ_CUST_ACCT_SITE_BO_PVT.save_cust_acct_sites(
452         p_cas_objs           => p_cust_acct_obj.cust_acct_site_objs,
453         p_create_update_flag => 'C',
454         p_obj_source         => p_obj_source,
455         x_return_status      => x_return_status,
456         x_msg_count          => x_msg_count,
457         x_msg_data           => x_msg_data,
458         p_parent_acct_id     => x_cust_acct_id,
459         p_parent_acct_os     => x_cust_acct_os,
460         p_parent_acct_osr    => x_cust_acct_osr
461       );
462 
463       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
464         RAISE FND_API.G_EXC_ERROR;
465       END IF;
466     END IF;
467 
468     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
469 
470     ------------------------
471     -- Call bank account use
472     ------------------------
473     IF((p_cust_acct_obj.bank_acct_use_objs IS NOT NULL) AND
474        (p_cust_acct_obj.bank_acct_use_objs.COUNT > 0)) THEN
475       HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
476         p_bank_acct_use_objs => p_cust_acct_obj.bank_acct_use_objs,
477         p_party_id           => l_party_id,
478         p_ca_id              => x_cust_acct_id,
479         p_casu_id            => NULL,
480         x_return_status      => x_return_status,
481         x_msg_count          => x_msg_count,
482         x_msg_data           => x_msg_data
483       );
484 
485       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
486         RAISE FND_API.G_EXC_ERROR;
487       END IF;
488     END IF;
489 
490     ------------------------
491     -- Call payment method
492     ------------------------
493     IF(p_cust_acct_obj.payment_method_obj IS NOT NULL) THEN
494       HZ_CUST_ACCT_BO_PVT.create_payment_method(
495         p_payment_method_obj => p_cust_acct_obj.payment_method_obj,
496         p_ca_id              => x_cust_acct_id,
497         p_casu_id            => NULL,
498         x_return_status      => x_return_status,
499         x_msg_count          => x_msg_count,
500         x_msg_data           => x_msg_data
501       );
502 
503       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
504         RAISE FND_API.G_EXC_ERROR;
505       END IF;
506     END IF;
507 
508     -- reset Global variable
509     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
510     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
511 
512     -- Debug info.
513     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
514          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
515                                p_msg_data=>x_msg_data,
516                                p_msg_type=>'WARNING',
517                                p_msg_level=>fnd_log.level_exception);
518     END IF;
519     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
520         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_bo(-)',
521                                p_prefix=>l_debug_prefix,
522                                p_msg_level=>fnd_log.level_procedure);
523     END IF;
524 
525   EXCEPTION
526     WHEN fnd_api.g_exc_error THEN
527       ROLLBACK TO do_create_cust_acct_bo_pub;
528 
529       -- reset Global variable
530       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
531       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
532 
533       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
534       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
535       FND_MSG_PUB.ADD;
536 
537       x_return_status := fnd_api.g_ret_sts_error;
538 
539       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
540                                 p_count => x_msg_count,
541                                 p_data  => x_msg_data);
542 
543       -- Debug info.
544       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
545         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
546                                p_msg_data=>x_msg_data,
547                                p_msg_type=>'ERROR',
548                                p_msg_level=>fnd_log.level_error);
549       END IF;
550       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
551         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_bo(-)',
552                                p_prefix=>l_debug_prefix,
556     WHEN fnd_api.g_exc_unexpected_error THEN
553                                p_msg_level=>fnd_log.level_procedure);
554       END IF;
555 
557       ROLLBACK TO do_create_cust_acct_bo_pub;
558 
559       -- reset Global variable
560       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
561       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
562 
563       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
564       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
565       FND_MSG_PUB.ADD;
566 
567       x_return_status := fnd_api.g_ret_sts_unexp_error;
568 
569       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
570                                 p_count => x_msg_count,
571                                 p_data  => x_msg_data);
572 
573       -- Debug info.
574       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
575         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
576                                p_msg_data=>x_msg_data,
577                                p_msg_type=>'UNEXPECTED ERROR',
578                                p_msg_level=>fnd_log.level_error);
579       END IF;
580       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
581         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_bo(-)',
582                                p_prefix=>l_debug_prefix,
583                                p_msg_level=>fnd_log.level_procedure);
584       END IF;
585 
586     WHEN OTHERS THEN
587       ROLLBACK TO do_create_cust_acct_bo_pub;
588 
589       -- reset Global variable
590       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
591       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
592 
593       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
594       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
595       FND_MSG_PUB.ADD;
596 
597       x_return_status := fnd_api.g_ret_sts_unexp_error;
598 
599       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
600       fnd_message.set_token('ERROR' ,SQLERRM);
601       fnd_msg_pub.add;
602 
603       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
604                                 p_count => x_msg_count,
605                                 p_data  => x_msg_data);
606 
607       -- Debug info.
608       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
609         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
610                                p_msg_data=>x_msg_data,
611                                p_msg_type=>'SQL ERROR',
612                                p_msg_level=>fnd_log.level_error);
613       END IF;
614       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
615         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_bo(-)',
616                                p_prefix=>l_debug_prefix,
617                                p_msg_level=>fnd_log.level_procedure);
618       END IF;
619   END do_create_cust_acct_bo;
620 
621   PROCEDURE create_cust_acct_bo(
622     p_init_msg_list        IN            VARCHAR2 := fnd_api.g_false,
623     p_validate_bo_flag     IN            VARCHAR2 := fnd_api.g_true,
624     p_cust_acct_obj        IN            HZ_CUST_ACCT_BO,
625     p_created_by_module    IN            VARCHAR2,
626     x_return_status        OUT NOCOPY    VARCHAR2,
627     x_msg_count            OUT NOCOPY    NUMBER,
628     x_msg_data             OUT NOCOPY    VARCHAR2,
629     x_cust_acct_id         OUT NOCOPY    NUMBER,
630     x_cust_acct_os         OUT NOCOPY    VARCHAR2,
631     x_cust_acct_osr        OUT NOCOPY    VARCHAR2,
632     px_parent_id           IN OUT NOCOPY NUMBER,
633     px_parent_os           IN OUT NOCOPY VARCHAR2,
634     px_parent_osr          IN OUT NOCOPY VARCHAR2,
635     px_parent_obj_type     IN OUT NOCOPY VARCHAR2
636   ) IS
637     l_ca_obj                   HZ_CUST_ACCT_BO;
638   BEGIN
639     l_ca_obj := p_cust_acct_obj;
640     do_create_cust_acct_bo(
641       p_init_msg_list           => p_init_msg_list,
642       p_validate_bo_flag        => p_validate_bo_flag,
643       p_cust_acct_obj           => l_ca_obj,
644       p_created_by_module       => p_created_by_module,
645       p_obj_source              => null,
646       x_return_status           => x_return_status,
647       x_msg_count               => x_msg_count,
648       x_msg_data                => x_msg_data,
649       x_cust_acct_id            => x_cust_acct_id,
650       x_cust_acct_os            => x_cust_acct_os,
651       x_cust_acct_osr           => x_cust_acct_osr,
652       px_parent_id              => px_parent_id,
653       px_parent_os              => px_parent_os,
654       px_parent_osr             => px_parent_osr,
655       px_parent_obj_type        => px_parent_obj_type
656     );
657   END create_cust_acct_bo;
658 
659   PROCEDURE create_cust_acct_bo(
660     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
661     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
662     p_created_by_module       IN            VARCHAR2,
663     p_obj_source              IN            VARCHAR2 := null,
664     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
665     x_return_status           OUT NOCOPY    VARCHAR2,
666     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
667     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_BO,
668     x_cust_acct_id            OUT NOCOPY    NUMBER,
672     px_parent_os              IN OUT NOCOPY VARCHAR2,
669     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
670     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
671     px_parent_id              IN OUT NOCOPY NUMBER,
673     px_parent_osr             IN OUT NOCOPY VARCHAR2,
674     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
675   ) IS
676     l_msg_data                VARCHAR2(2000);
677     l_msg_count               NUMBER;
678     l_ca_obj                   HZ_CUST_ACCT_BO;
679   BEGIN
680     l_ca_obj := p_cust_acct_obj;
681     do_create_cust_acct_bo(
682       p_init_msg_list           => fnd_api.g_true,
683       p_validate_bo_flag        => p_validate_bo_flag,
684       p_cust_acct_obj           => l_ca_obj,
685       p_created_by_module       => p_created_by_module,
686       p_obj_source              => p_obj_source,
687       x_return_status           => x_return_status,
688       x_msg_count               => l_msg_count,
689       x_msg_data                => l_msg_data,
690       x_cust_acct_id            => x_cust_acct_id,
691       x_cust_acct_os            => x_cust_acct_os,
692       x_cust_acct_osr           => x_cust_acct_osr,
693       px_parent_id              => px_parent_id,
694       px_parent_os              => px_parent_os,
695       px_parent_osr             => px_parent_osr,
696       px_parent_obj_type        => px_parent_obj_type
697     );
698     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
699                     x_return_status   => x_return_status,
700                     x_msg_count       => l_msg_count,
701                     x_msg_data        => l_msg_data);
702     IF FND_API.to_Boolean(p_return_obj_flag) THEN
703       x_return_obj := l_ca_obj;
704     END IF;
705   END create_cust_acct_bo;
706 
707   PROCEDURE update_cust_acct_bo(
708     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
709     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
710     p_created_by_module       IN            VARCHAR2,
711     x_return_status           OUT NOCOPY    VARCHAR2,
712     x_msg_count               OUT NOCOPY    NUMBER,
713     x_msg_data                OUT NOCOPY    VARCHAR2,
714     x_cust_acct_id            OUT NOCOPY    NUMBER,
715     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
716     x_cust_acct_osr           OUT NOCOPY    VARCHAR2
717   )IS
718     l_ca_obj                  HZ_CUST_ACCT_BO;
719   BEGIN
720     l_ca_obj := p_cust_acct_obj;
721     do_update_cust_acct_bo(
722       p_init_msg_list           => p_init_msg_list,
723       p_cust_acct_obj           => l_ca_obj,
724       p_created_by_module       => p_created_by_module,
725       p_obj_source              => null,
726       x_return_status           => x_return_status,
727       x_msg_count               => x_msg_count,
728       x_msg_data                => x_msg_data,
729       x_cust_acct_id            => x_cust_acct_id,
730       x_cust_acct_os            => x_cust_acct_os,
731       x_cust_acct_osr           => x_cust_acct_osr,
732       p_parent_os               => NULL
733     );
734   END update_cust_acct_bo;
735 
736   PROCEDURE update_cust_acct_bo(
737     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
738     p_created_by_module       IN            VARCHAR2,
739     p_obj_source              IN            VARCHAR2 := null,
740     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
741     x_return_status           OUT NOCOPY    VARCHAR2,
742     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
743     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_BO,
744     x_cust_acct_id            OUT NOCOPY    NUMBER,
745     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
746     x_cust_acct_osr           OUT NOCOPY    VARCHAR2
747   )IS
748     l_msg_data                VARCHAR2(2000);
749     l_msg_count               NUMBER;
750     l_ca_obj                  HZ_CUST_ACCT_BO;
751   BEGIN
752     l_ca_obj := p_cust_acct_obj;
753     do_update_cust_acct_bo(
754       p_init_msg_list           => fnd_api.g_true,
755       p_cust_acct_obj           => l_ca_obj,
756       p_created_by_module       => p_created_by_module,
757       p_obj_source              => p_obj_source,
758       x_return_status           => x_return_status,
759       x_msg_count               => l_msg_count,
760       x_msg_data                => l_msg_data,
761       x_cust_acct_id            => x_cust_acct_id,
762       x_cust_acct_os            => x_cust_acct_os,
763       x_cust_acct_osr           => x_cust_acct_osr,
764       p_parent_os               => NULL
765     );
766     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
767                     x_return_status   => x_return_status,
768                     x_msg_count       => l_msg_count,
769                     x_msg_data        => l_msg_data);
770     IF FND_API.to_Boolean(p_return_obj_flag) THEN
771       x_return_obj := l_ca_obj;
772     END IF;
773   END update_cust_acct_bo;
774 
775   -- PRIVATE PROCEDURE do_update_cust_acct_bo
776   --
777   -- DESCRIPTION
778   --     Update customer account business object.
779   PROCEDURE do_update_cust_acct_bo(
780     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
781     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
782     p_cust_acct_obj           IN OUT NOCOPY HZ_CUST_ACCT_BO,
783     p_created_by_module       IN            VARCHAR2,
784     p_obj_source              IN            VARCHAR2 := null,
788     x_cust_acct_id            OUT NOCOPY    NUMBER,
785     x_return_status           OUT NOCOPY    VARCHAR2,
786     x_msg_count               OUT NOCOPY    NUMBER,
787     x_msg_data                OUT NOCOPY    VARCHAR2,
789     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
790     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
791     p_parent_os               IN            VARCHAR2
792   )IS
793     l_debug_prefix             VARCHAR2(30) := '';
794     l_cust_acct_rec            HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE;
795     l_create_update_flag       VARCHAR2(1);
796     l_org_contact_bo           HZ_ORG_CONTACT_BO;
797     l_ovn                      NUMBER;
798     l_party_id                 NUMBER;
799     l_cust_acct_profile_id     NUMBER;
800     l_cbm                      VARCHAR2(30);
801 
802     CURSOR get_ovn(l_ca_id NUMBER) IS
803     SELECT a.object_version_number, a.party_id
804     FROM HZ_CUST_ACCOUNTS a
805     WHERE a.cust_account_id = l_ca_id;
806   BEGIN
807     -- Standard start of API savepoint
808     SAVEPOINT do_update_cust_acct_bo_pub;
809 
810     -- initialize API return status to success.
811     x_return_status := FND_API.G_RET_STS_SUCCESS;
812 
813     -- Initialize message list if p_init_msg_list is set to TRUE.
814     IF FND_API.to_Boolean(p_init_msg_list) THEN
815       FND_MSG_PUB.initialize;
816     END IF;
817 
818     -- initialize Global variable
819     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
820     IF(p_created_by_module IS NULL) THEN
821       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
822     ELSE
823       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
824     END IF;
825 
826     -- Debug info.
827     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
828         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_bo_pub(+)',
829                                p_prefix=>l_debug_prefix,
830                                p_msg_level=>fnd_log.level_procedure);
831     END IF;
832 
833     -------------------------------
834     -- For Update cust accts
835     -------------------------------
836     x_cust_acct_id := p_cust_acct_obj.cust_acct_id;
837     x_cust_acct_os := p_cust_acct_obj.orig_system;
838     x_cust_acct_osr := p_cust_acct_obj.orig_system_reference;
839 
840     -- validate ssm of cust account site
841     hz_registry_validate_bo_pvt.validate_ssm_id(
842       px_id              => x_cust_acct_id,
843       px_os              => x_cust_acct_os,
844       px_osr             => x_cust_acct_osr,
845       p_obj_type         => 'HZ_CUST_ACCOUNTS',
846       p_create_or_update => 'U',
847       x_return_status    => x_return_status,
848       x_msg_count        => x_msg_count,
849       x_msg_data         => x_msg_data);
850 
851     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
852       RAISE FND_API.G_EXC_ERROR;
853     END IF;
854 
855     -- get object version number of customer acct
856     OPEN get_ovn(x_cust_acct_id);
857     FETCH get_ovn INTO l_ovn, l_party_id;
858     CLOSE get_ovn;
859 
860     assign_cust_acct_rec(
861       p_cust_acct_obj          => p_cust_acct_obj,
862       p_cust_acct_id           => x_cust_acct_id,
863       p_cust_acct_os           => x_cust_acct_os,
864       p_cust_acct_osr          => x_cust_acct_osr,
865       p_create_or_update       => 'U',
866       px_cust_acct_rec         => l_cust_acct_rec
867     );
868 
869     HZ_CUST_ACCOUNT_V2PUB.update_cust_account(
870       p_cust_account_rec            => l_cust_acct_rec,
871       p_object_version_number       => l_ovn,
872       x_return_status               => x_return_status,
873       x_msg_count                   => x_msg_count,
874       x_msg_data                    => x_msg_data
875     );
876 
877     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
878       RAISE FND_API.G_EXC_ERROR;
879     END IF;
880 
881     -- assign cust_acct_id
882     p_cust_acct_obj.cust_acct_id := x_cust_acct_id;
883     -----------------------------
884     -- For Update account profile
885     -----------------------------
886     IF(p_cust_acct_obj.cust_profile_obj IS NOT NULL) THEN
887       HZ_CUST_ACCT_BO_PVT.update_cust_profile(
888         p_cp_obj                      => p_cust_acct_obj.cust_profile_obj,
889         p_ca_id                       => x_cust_acct_id,
890         p_casu_id                     => NULL,
891         x_cp_id                       => l_cust_acct_profile_id,
892         x_return_status               => x_return_status,
893         x_msg_count                   => x_msg_count,
894         x_msg_data                    => x_msg_data
895       );
896 
897       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
898         RAISE FND_API.G_EXC_ERROR;
899       END IF;
900 
901       -- assign cust_acct_profile_id
902       p_cust_acct_obj.cust_profile_obj.cust_acct_profile_id := l_cust_acct_profile_id;
903       ---------------------------------
904       -- For Update account profile amt
905       ---------------------------------
906       IF((p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs IS NOT NULL) AND
907          (p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs.COUNT > 0)) THEN
908         HZ_CUST_ACCT_BO_PVT.save_cust_profile_amts(
912           p_casu_id                 => NULL,
909           p_cpa_objs                => p_cust_acct_obj.cust_profile_obj.cust_profile_amt_objs,
910           p_cp_id                   => l_cust_acct_profile_id,
911           p_ca_id                   => x_cust_acct_id,
913           x_return_status           => x_return_status,
914           x_msg_count               => x_msg_count,
915           x_msg_data                => x_msg_data
916         );
917 
918         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
919           RAISE FND_API.G_EXC_ERROR;
920         END IF;
921       END IF;
922     END IF;
923 
924     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
925 
926     -----------------------------------
927     -- For cust account contact
928     -----------------------------------
929     IF((p_cust_acct_obj.cust_acct_contact_objs IS NOT NULL) AND
930        (p_cust_acct_obj.cust_acct_contact_objs.COUNT > 0)) THEN
931       HZ_CUST_ACCT_CONTACT_BO_PVT.save_cust_acct_contacts(
932         p_cac_objs            => p_cust_acct_obj.cust_acct_contact_objs,
933         p_create_update_flag  => 'U',
934         p_obj_source         => p_obj_source,
935         x_return_status       => x_return_status,
936         x_msg_count           => x_msg_count,
937         x_msg_data            => x_msg_data,
938         p_parent_id           => x_cust_acct_id,
939         p_parent_os           => x_cust_acct_os,
940         p_parent_osr          => x_cust_acct_osr,
941         p_parent_obj_type     => 'CUST_ACCT'
942       );
943 
944       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
945         RAISE FND_API.G_EXC_ERROR;
946       END IF;
947     END IF;
948 
949     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
950 
951     -------------------------------
952     -- For Update account acct relate
953     -------------------------------
954     IF((p_cust_acct_obj.acct_relate_objs IS NOT NULL) AND
955        (p_cust_acct_obj.acct_relate_objs.COUNT > 0)) THEN
956       HZ_CUST_ACCT_BO_PVT.save_cust_acct_relates(
957         p_car_objs           => p_cust_acct_obj.acct_relate_objs,
958         p_ca_id              => x_cust_acct_id,
959         x_return_status      => x_return_status,
960         x_msg_count          => x_msg_count,
961         x_msg_data           => x_msg_data
962       );
963 
964       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
965         RAISE FND_API.G_EXC_ERROR;
966       END IF;
967     END IF;
968 
969     -------------------------------------
970     -- Call cust account site
971     -------------------------------------
972     -- create cust account site uses will include cust acct site use plus site use profile
973     -- need to put customer account id and customer account site id
974     IF((p_cust_acct_obj.cust_acct_site_objs IS NOT NULL) AND
975        (p_cust_acct_obj.cust_acct_site_objs.COUNT > 0)) THEN
976       HZ_CUST_ACCT_SITE_BO_PVT.save_cust_acct_sites(
977         p_cas_objs           => p_cust_acct_obj.cust_acct_site_objs,
978         p_create_update_flag => 'U',
979         p_obj_source         => p_obj_source,
980         x_return_status      => x_return_status,
981         x_msg_count          => x_msg_count,
982         x_msg_data           => x_msg_data,
983         p_parent_acct_id     => x_cust_acct_id,
984         p_parent_acct_os     => x_cust_acct_os,
985         p_parent_acct_osr    => x_cust_acct_osr
986       );
987 
988       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
989         RAISE FND_API.G_EXC_ERROR;
990       END IF;
991     END IF;
992 
993     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
994 
995     ------------------------
996     -- Call bank account use
997     ------------------------
998     IF((p_cust_acct_obj.bank_acct_use_objs IS NOT NULL) AND
999        (p_cust_acct_obj.bank_acct_use_objs.COUNT > 0)) THEN
1000       HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
1001         p_bank_acct_use_objs => p_cust_acct_obj.bank_acct_use_objs,
1002         p_party_id           => l_party_id,
1003         p_ca_id              => x_cust_acct_id,
1004         p_casu_id            => NULL,
1005         x_return_status      => x_return_status,
1006         x_msg_count          => x_msg_count,
1007         x_msg_data           => x_msg_data
1008       );
1009 
1010       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1011         RAISE FND_API.G_EXC_ERROR;
1012       END IF;
1013     END IF;
1014 
1015     ------------------------
1016     -- Call payment method
1017     ------------------------
1018     IF(p_cust_acct_obj.payment_method_obj IS NOT NULL) THEN
1019       HZ_CUST_ACCT_BO_PVT.save_payment_method(
1020         p_payment_method_obj => p_cust_acct_obj.payment_method_obj,
1021         p_ca_id              => x_cust_acct_id,
1022         p_casu_id            => NULL,
1023         x_return_status      => x_return_status,
1024         x_msg_count          => x_msg_count,
1025         x_msg_data           => x_msg_data
1026       );
1027 
1028       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1029         RAISE FND_API.G_EXC_ERROR;
1030       END IF;
1031     END IF;
1032 
1033     -- reset Global variable
1034     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1035     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1036 
1037     -- Debug info.
1041                                p_msg_type=>'WARNING',
1038     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1039          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1040                                p_msg_data=>x_msg_data,
1042                                p_msg_level=>fnd_log.level_exception);
1043     END IF;
1044     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1045         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_bo(-)',
1046                                p_prefix=>l_debug_prefix,
1047                                p_msg_level=>fnd_log.level_procedure);
1048     END IF;
1049   EXCEPTION
1050     WHEN fnd_api.g_exc_error THEN
1051       ROLLBACK TO do_update_cust_acct_bo_pub;
1052 
1053       -- reset Global variable
1054       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1055       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1056 
1057       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1058       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
1059       FND_MSG_PUB.ADD;
1060 
1061       x_return_status := fnd_api.g_ret_sts_error;
1062 
1063       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1064                                 p_count => x_msg_count,
1065                                 p_data  => x_msg_data);
1066 
1067       -- Debug info.
1068       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1069         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1070                                p_msg_data=>x_msg_data,
1071                                p_msg_type=>'ERROR',
1072                                p_msg_level=>fnd_log.level_error);
1073       END IF;
1074       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1075         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_bo(-)',
1076                                p_prefix=>l_debug_prefix,
1077                                p_msg_level=>fnd_log.level_procedure);
1078       END IF;
1079 
1080     WHEN fnd_api.g_exc_unexpected_error THEN
1081       ROLLBACK TO do_update_cust_acct_bo_pub;
1082 
1083       -- reset Global variable
1084       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1085       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1086 
1087       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1088       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
1089       FND_MSG_PUB.ADD;
1090 
1091       x_return_status := fnd_api.g_ret_sts_unexp_error;
1092 
1093       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1094                                 p_count => x_msg_count,
1095                                 p_data  => x_msg_data);
1096 
1097       -- Debug info.
1098       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1099         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1100                                p_msg_data=>x_msg_data,
1101                                p_msg_type=>'UNEXPECTED ERROR',
1102                                p_msg_level=>fnd_log.level_error);
1103       END IF;
1104       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1105         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_bo(-)',
1106                                p_prefix=>l_debug_prefix,
1107                                p_msg_level=>fnd_log.level_procedure);
1108       END IF;
1109 
1110     WHEN OTHERS THEN
1111       ROLLBACK TO do_update_cust_acct_bo_pub;
1112 
1113       -- reset Global variable
1114       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1115       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1116 
1117       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1118       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
1119       FND_MSG_PUB.ADD;
1120 
1121       x_return_status := fnd_api.g_ret_sts_unexp_error;
1122 
1123       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1124       fnd_message.set_token('ERROR' ,SQLERRM);
1125       fnd_msg_pub.add;
1126 
1127       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1128                                 p_count => x_msg_count,
1129                                 p_data  => x_msg_data);
1130 
1131       -- Debug info.
1132       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1133         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1134                                p_msg_data=>x_msg_data,
1135                                p_msg_type=>'SQL ERROR',
1136                                p_msg_level=>fnd_log.level_error);
1137       END IF;
1138       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1139         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_bo(-)',
1140                                p_prefix=>l_debug_prefix,
1141                                p_msg_level=>fnd_log.level_procedure);
1142       END IF;
1143   END do_update_cust_acct_bo;
1144 
1145   -- PROCEDURE do_save_cust_acct_bo
1146   --
1147   -- DESCRIPTION
1148   --     Create or update customer account business object.
1149   PROCEDURE do_save_cust_acct_bo(
1150     p_init_msg_list            IN            VARCHAR2 := fnd_api.g_false,
1151     p_validate_bo_flag         IN            VARCHAR2 := fnd_api.g_true,
1152     p_cust_acct_obj            IN OUT NOCOPY HZ_CUST_ACCT_BO,
1153     p_created_by_module        IN            VARCHAR2,
1154     p_obj_source               IN            VARCHAR2 := null,
1155     x_return_status            OUT NOCOPY    VARCHAR2,
1159     x_cust_acct_os             OUT NOCOPY    VARCHAR2,
1156     x_msg_count                OUT NOCOPY    NUMBER,
1157     x_msg_data                 OUT NOCOPY    VARCHAR2,
1158     x_cust_acct_id             OUT NOCOPY    NUMBER,
1160     x_cust_acct_osr            OUT NOCOPY    VARCHAR2,
1161     px_parent_id               IN OUT NOCOPY NUMBER,
1162     px_parent_os               IN OUT NOCOPY VARCHAR2,
1163     px_parent_osr              IN OUT NOCOPY VARCHAR2,
1164     px_parent_obj_type         IN OUT NOCOPY VARCHAR2
1165   ) IS
1166     l_return_status            VARCHAR2(30);
1167     l_msg_count                NUMBER;
1168     l_msg_data                 VARCHAR2(2000);
1169     l_create_update_flag       VARCHAR2(1);
1170     l_debug_prefix             VARCHAR2(30) := '';
1171   BEGIN
1172     -- initialize API return status to success.
1173     x_return_status := FND_API.G_RET_STS_SUCCESS;
1174 
1175     -- Initialize message list if p_init_msg_list is set to TRUE.
1176     IF FND_API.to_Boolean(p_init_msg_list) THEN
1177       FND_MSG_PUB.initialize;
1178     END IF;
1179 
1180     -- Debug info.
1181     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1182         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_bo(+)',
1183                                p_prefix=>l_debug_prefix,
1184                                p_msg_level=>fnd_log.level_procedure);
1185     END IF;
1186 
1187     x_cust_acct_id := p_cust_acct_obj.cust_acct_id;
1188     x_cust_acct_os := p_cust_acct_obj.orig_system;
1189     x_cust_acct_osr := p_cust_acct_obj.orig_system_reference;
1190 
1191     -- check root business object to determine that it should be
1192     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
1193     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
1194                               p_entity_id      => x_cust_acct_id,
1195                               p_entity_os      => x_cust_acct_os,
1196                               p_entity_osr     => x_cust_acct_osr,
1197                               p_entity_type    => 'HZ_CUST_ACCOUNTS',
1198                               p_parent_id      => px_parent_id,
1199                               p_parent_obj_type => px_parent_obj_type
1200                             );
1201 
1202     IF(l_create_update_flag = 'E') THEN
1203       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1204       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
1205       FND_MSG_PUB.ADD;
1206       RAISE FND_API.G_EXC_ERROR;
1207     END IF;
1208 
1209     IF(l_create_update_flag = 'C') THEN
1210       do_create_cust_acct_bo(
1211         p_validate_bo_flag    => p_validate_bo_flag,
1212         p_cust_acct_obj       => p_cust_acct_obj,
1213         p_created_by_module   => p_created_by_module,
1214         p_obj_source          => p_obj_source,
1215         x_return_status       => x_return_status,
1216         x_msg_count           => x_msg_count,
1217         x_msg_data            => x_msg_data,
1218         x_cust_acct_id        => x_cust_acct_id,
1219         x_cust_acct_os        => x_cust_acct_os,
1220         x_cust_acct_osr       => x_cust_acct_osr,
1221         px_parent_id          => px_parent_id,
1222         px_parent_os          => px_parent_os,
1223         px_parent_osr         => px_parent_osr,
1224         px_parent_obj_type    => px_parent_obj_type
1225       );
1226     ELSIF(l_create_update_flag = 'U') THEN
1227       do_update_cust_acct_bo(
1228         p_cust_acct_obj       => p_cust_acct_obj,
1229         p_created_by_module   => p_created_by_module,
1230         p_obj_source          => p_obj_source,
1231         x_return_status       => x_return_status,
1232         x_msg_count           => x_msg_count,
1233         x_msg_data            => x_msg_data,
1234         x_cust_acct_id        => x_cust_acct_id,
1235         x_cust_acct_os        => x_cust_acct_os,
1236         x_cust_acct_osr       => x_cust_acct_osr,
1237         p_parent_os           => px_parent_os
1238       );
1239     ELSE
1240       RAISE FND_API.G_EXC_ERROR;
1241     END IF;
1242 
1243     -- Debug info.
1244     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1245          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1246                                p_msg_data=>x_msg_data,
1247                                p_msg_type=>'WARNING',
1248                                p_msg_level=>fnd_log.level_exception);
1249     END IF;
1250     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1251         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_bo(-)',
1252                                p_prefix=>l_debug_prefix,
1253                                p_msg_level=>fnd_log.level_procedure);
1254     END IF;
1255 
1256   EXCEPTION
1257     WHEN fnd_api.g_exc_error THEN
1258       x_return_status := fnd_api.g_ret_sts_error;
1259 
1260       FND_MESSAGE.SET_NAME('AR', 'HZ_SAVE_API_ERROR');
1261       FND_MSG_PUB.ADD;
1262       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1263                                 p_count => x_msg_count,
1264                                 p_data  => x_msg_data);
1265 
1266       -- Debug info.
1267       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1268         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1269                                p_msg_data=>x_msg_data,
1270                                p_msg_type=>'ERROR',
1271                                p_msg_level=>fnd_log.level_error);
1272       END IF;
1273       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1277       END IF;
1274         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_bo(-)',
1275                                p_prefix=>l_debug_prefix,
1276                                p_msg_level=>fnd_log.level_procedure);
1278     WHEN fnd_api.g_exc_unexpected_error THEN
1279       x_return_status := fnd_api.g_ret_sts_unexp_error;
1280 
1281       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1282                                 p_count => x_msg_count,
1283                                 p_data  => x_msg_data);
1284 
1285       -- Debug info.
1286       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1287         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1288                                p_msg_data=>x_msg_data,
1289                                p_msg_type=>'UNEXPECTED ERROR',
1290                                p_msg_level=>fnd_log.level_error);
1291       END IF;
1292       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1293         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_bo(-)',
1294                                p_prefix=>l_debug_prefix,
1295                                p_msg_level=>fnd_log.level_procedure);
1296       END IF;
1297     WHEN OTHERS THEN
1298       x_return_status := fnd_api.g_ret_sts_unexp_error;
1299 
1300       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1301       fnd_message.set_token('ERROR' ,SQLERRM);
1302       fnd_msg_pub.add;
1303 
1304       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1305                                 p_count => x_msg_count,
1306                                 p_data  => x_msg_data);
1307 
1308       -- Debug info.
1309       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1310         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1311                                p_msg_data=>x_msg_data,
1312                                p_msg_type=>'SQL ERROR',
1313                                p_msg_level=>fnd_log.level_error);
1314       END IF;
1315       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1316         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_bo(-)',
1317                                p_prefix=>l_debug_prefix,
1318                                p_msg_level=>fnd_log.level_procedure);
1319       END IF;
1320   END do_save_cust_acct_bo;
1321 
1322   PROCEDURE save_cust_acct_bo(
1323     p_init_msg_list        IN            VARCHAR2 := fnd_api.g_false,
1324     p_validate_bo_flag     IN            VARCHAR2 := fnd_api.g_true,
1325     p_cust_acct_obj        IN            HZ_CUST_ACCT_BO,
1326     p_created_by_module    IN            VARCHAR2,
1327     x_return_status        OUT NOCOPY    VARCHAR2,
1328     x_msg_count            OUT NOCOPY    NUMBER,
1329     x_msg_data             OUT NOCOPY    VARCHAR2,
1330     x_cust_acct_id         OUT NOCOPY    NUMBER,
1331     x_cust_acct_os         OUT NOCOPY    VARCHAR2,
1332     x_cust_acct_osr        OUT NOCOPY    VARCHAR2,
1333     px_parent_id           IN OUT NOCOPY NUMBER,
1334     px_parent_os           IN OUT NOCOPY VARCHAR2,
1335     px_parent_osr          IN OUT NOCOPY VARCHAR2,
1336     px_parent_obj_type     IN OUT NOCOPY VARCHAR2
1337   ) IS
1338     l_ca_obj               HZ_CUST_ACCT_BO;
1339   BEGIN
1340     l_ca_obj := p_cust_acct_obj;
1341     do_save_cust_acct_bo(
1342       p_init_msg_list           => p_init_msg_list,
1343       p_validate_bo_flag        => p_validate_bo_flag,
1344       p_cust_acct_obj           => l_ca_obj,
1345       p_created_by_module       => p_created_by_module,
1346       x_return_status           => x_return_status,
1347       x_msg_count               => x_msg_count,
1348       x_msg_data                => x_msg_data,
1349       x_cust_acct_id            => x_cust_acct_id,
1350       x_cust_acct_os            => x_cust_acct_os,
1351       x_cust_acct_osr           => x_cust_acct_osr,
1352       px_parent_id              => px_parent_id,
1353       px_parent_os              => px_parent_os,
1354       px_parent_osr             => px_parent_osr,
1355       px_parent_obj_type        => px_parent_obj_type
1356     );
1357   END save_cust_acct_bo;
1358 
1359   PROCEDURE save_cust_acct_bo(
1360     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
1361     p_cust_acct_obj           IN            HZ_CUST_ACCT_BO,
1362     p_created_by_module       IN            VARCHAR2,
1363     p_obj_source              IN            VARCHAR2 := null,
1364     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
1365     x_return_status           OUT NOCOPY    VARCHAR2,
1366     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1367     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_BO,
1368     x_cust_acct_id            OUT NOCOPY    NUMBER,
1369     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
1370     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
1371     px_parent_id              IN OUT NOCOPY NUMBER,
1372     px_parent_os              IN OUT NOCOPY VARCHAR2,
1373     px_parent_osr             IN OUT NOCOPY VARCHAR2,
1374     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
1375   ) IS
1376     l_msg_data                VARCHAR2(2000);
1377     l_msg_count               NUMBER;
1378     l_ca_obj                  HZ_CUST_ACCT_BO;
1379   BEGIN
1380     l_ca_obj := p_cust_acct_obj;
1381     do_save_cust_acct_bo(
1382       p_init_msg_list           => fnd_api.g_true,
1383       p_validate_bo_flag        => p_validate_bo_flag,
1384       p_cust_acct_obj           => l_ca_obj,
1385       p_created_by_module       => p_created_by_module,
1386       x_return_status           => x_return_status,
1390       x_cust_acct_os            => x_cust_acct_os,
1387       x_msg_count               => l_msg_count,
1388       x_msg_data                => l_msg_data,
1389       x_cust_acct_id            => x_cust_acct_id,
1391       x_cust_acct_osr           => x_cust_acct_osr,
1392       px_parent_id              => px_parent_id,
1393       px_parent_os              => px_parent_os,
1394       px_parent_osr             => px_parent_osr,
1395       px_parent_obj_type        => px_parent_obj_type
1396     );
1397     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1398                     x_return_status   => x_return_status,
1399                     x_msg_count       => l_msg_count,
1400                     x_msg_data        => l_msg_data);
1401     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1402       x_return_obj := l_ca_obj;
1403     END IF;
1404   END save_cust_acct_bo;
1405 
1406  --------------------------------------
1407   --
1408   -- PROCEDURE get_cust_acct_bo
1409   --
1410   -- DESCRIPTION
1411   --     Get a logical customer account.
1412   --
1413   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1414   --
1415   -- ARGUMENTS
1416   --   IN:
1417   --     p_init_msg_list      Initialize message stack if it is set to
1418 --       p_cust_acct_id          customer account ID.
1419   --       p_parent_id	      Parent Id.
1420   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
1421   --   OUT:
1422   --     x_cust_acct_obj         Logical customer account record.
1423   --     x_return_status      Return status after the call. The status can
1424   --                          be fnd_api.g_ret_sts_success (success),
1425   --                          fnd_api.g_ret_sts_error (error),
1426   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1427   --     x_msg_count          Number of messages in message stack.
1428   --     x_msg_data           Message text if x_msg_count is 1.
1429   --
1430   -- NOTES
1431   --
1432   -- MODIFICATION HISTORY
1433   --
1434   --
1435   --   8-JUN-2005  AWU                Created.
1436   --
1437 
1438 /*
1439 
1440 The Get customer account API Procedure is a retrieval service that returns full customer account business objects.
1441 The user identifies a particular Organization Contact business object using the TCA identifier and/or the object's
1442 Source System information. Upon proper validation of the object, the full Organization Contact business object is returned.
1443 The object consists of all data included within the Organization Contact business object, at all embedded levels.
1444 This includes the set of all data stored in the TCA tables for each embedded entity.
1445 
1446 
1447 Embedded BO	    	Mandatory	Multiple Logical API Procedure		Comments
1448 Customer Account Site		N	Y	get_cust_acct_site_bo
1449 Customer Account Contact	N	Y	get_cust_acct_contact_bo
1450 Customer Profile		Y	N	Business Structure. Included entities:
1451                                                 HZ_CUSTOMER_PROFILES, HZ_CUST_PROFILE_AMTS
1452 
1453 To retrieve the appropriate embedded entities within the 'Organization Contact' business object, the Get procedure returns all records for the particular contact from these TCA entity tables.
1454 
1455 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
1456 
1457 Customer Account	Y		N	HZ_CUST_ACCOUNTS
1458 Account Relationship	N		Y	HZ_CUST_ACCT_RELATE
1459 Bank Account Use	N		Y	Owned by Payments team
1460 Payment Method		N		N	Owned by AR team
1461 
1462 */
1463 
1464 
1465  PROCEDURE get_cust_acct_bo(
1466     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1467     p_cust_acct_id        IN            NUMBER,
1468     p_cust_acct_os		IN	VARCHAR2,
1469     p_cust_acct_osr		IN	VARCHAR2,
1470     x_cust_acct_obj          OUT NOCOPY    HZ_CUST_ACCT_BO,
1471     x_return_status       OUT NOCOPY    VARCHAR2,
1472     x_msg_count           OUT NOCOPY    NUMBER,
1473     x_msg_data            OUT NOCOPY    VARCHAR2
1474   ) is
1475  l_debug_prefix              VARCHAR2(30) := '';
1476 
1477   l_cust_acct_id  number;
1478   l_cust_acct_os  varchar2(30);
1479   l_cust_acct_osr varchar2(255);
1480   l_cust_acct_objs  HZ_CUST_ACCT_BO_TBL;
1481 BEGIN
1482 
1483 	-- initialize API return status to success.
1484     	x_return_status := FND_API.G_RET_STS_SUCCESS;
1485 
1486     	-- Initialize message list if p_init_msg_list is set to TRUE
1487     	IF FND_API.to_Boolean(p_init_msg_list) THEN
1488       		FND_MSG_PUB.initialize;
1489     	END IF;
1490 
1491 
1492 	-- Debug info.
1493         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1494         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_bo(+)',
1495                                p_prefix=>l_debug_prefix,
1496                                p_msg_level=>fnd_log.level_procedure);
1497     	END IF;
1498 
1499     	-- check if pass in contact_point_id and/or os+osr
1500     	-- extraction validation logic is same as update
1501 
1502     	l_cust_acct_id := p_cust_acct_id;
1503     	l_cust_acct_os := p_cust_acct_os;
1504     	l_cust_acct_osr := p_cust_acct_osr;
1505 
1506     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
1507       		px_id              => l_cust_acct_id,
1508       		px_os              => l_cust_acct_os,
1509       		px_osr             => l_cust_acct_osr,
1510       		p_obj_type         => 'HZ_CUST_ACCOUNTS',
1511       		x_return_status    => x_return_status,
1512       		x_msg_count        => x_msg_count,
1513       		x_msg_data         => x_msg_data);
1514 
1515     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1516       		RAISE fnd_api.g_exc_error;
1517    	 END IF;
1518 
1519 	HZ_EXTRACT_CUST_ACCT_BO_PVT.get_cust_acct_bos
1520 		(p_init_msg_list => fnd_api.g_false,
1521 		 p_parent_id => NULL,
1522 		 p_cust_acct_id => l_cust_acct_id,
1523 		 p_action_type => NULL,
1524 		  x_cust_acct_objs => l_cust_acct_objs,
1525 		 x_return_status => x_return_status,
1526 		 x_msg_count => x_msg_count,
1527 		 x_msg_data => x_msg_data);
1528 
1529 	x_cust_acct_obj := l_cust_acct_objs(1);
1530 
1531 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1532       		RAISE FND_API.G_EXC_ERROR;
1533     	END IF;
1534 
1535 
1536 	-- Debug info.
1537     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1538          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1539                                p_msg_data=>x_msg_data,
1540                                p_msg_type=>'WARNING',
1541                                p_msg_level=>fnd_log.level_exception);
1542     	END IF;
1543 
1544     	-- Debug info.
1545         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1546         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_bo (-)',
1547                                p_prefix=>l_debug_prefix,
1548                                p_msg_level=>fnd_log.level_procedure);
1549     	END IF;
1550 
1551 
1552  EXCEPTION
1553 
1554   WHEN fnd_api.g_exc_error THEN
1555       x_return_status := fnd_api.g_ret_sts_error;
1556 
1557       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1558                                 p_count => x_msg_count,
1559                                 p_data  => x_msg_data);
1560 
1561       -- Debug info.
1562       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1563         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1564                                p_msg_data=>x_msg_data,
1565                                p_msg_type=>'ERROR',
1566                                p_msg_level=>fnd_log.level_error);
1567       END IF;
1568       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1569         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_bo (-)',
1570                                p_prefix=>l_debug_prefix,
1571                                p_msg_level=>fnd_log.level_procedure);
1572       END IF;
1573     WHEN fnd_api.g_exc_unexpected_error THEN
1574       x_return_status := fnd_api.g_ret_sts_unexp_error;
1575 
1576       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1577                                 p_count => x_msg_count,
1578                                 p_data  => x_msg_data);
1579 
1580       -- Debug info.
1581       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1582         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1583                                p_msg_data=>x_msg_data,
1584                                p_msg_type=>'UNEXPECTED ERROR',
1585                                p_msg_level=>fnd_log.level_error);
1586       END IF;
1587       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1588         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_bo (-)',
1589                                p_prefix=>l_debug_prefix,
1590                                p_msg_level=>fnd_log.level_procedure);
1591       END IF;
1592     WHEN OTHERS THEN
1593       x_return_status := fnd_api.g_ret_sts_unexp_error;
1594 
1595       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1596       fnd_message.set_token('ERROR' ,SQLERRM);
1597       fnd_msg_pub.add;
1598 
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=>'SQL 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=>'hz_cust_acct_bo_pub.get_cust_acct_bo (-)',
1612                                p_prefix=>l_debug_prefix,
1613                                p_msg_level=>fnd_log.level_procedure);
1614       END IF;
1615 
1616 end;
1617 
1618  PROCEDURE get_cust_acct_bo(
1622     x_cust_acct_obj          OUT NOCOPY    HZ_CUST_ACCT_BO,
1619     p_cust_acct_id        IN            NUMBER,
1620     p_cust_acct_os              IN      VARCHAR2,
1621     p_cust_acct_osr             IN      VARCHAR2,
1623     x_return_status       OUT NOCOPY    VARCHAR2,
1624     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
1625   ) IS
1626     l_msg_data            VARCHAR2(2000);
1627     l_msg_count           NUMBER;
1628   BEGIN
1629     get_cust_acct_bo(
1630       p_init_msg_list   => fnd_api.g_true,
1631       p_cust_acct_id    => p_cust_acct_id,
1632       p_cust_acct_os    => p_cust_acct_os,
1633       p_cust_acct_osr   => p_cust_acct_osr,
1634       x_cust_acct_obj   => x_cust_acct_obj,
1635       x_return_status   => x_return_status,
1636       x_msg_count       => l_msg_count,
1637       x_msg_data        => l_msg_data
1638     );
1639     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1640                     x_return_status   => x_return_status,
1641                     x_msg_count       => l_msg_count,
1642                     x_msg_data        => l_msg_data);
1643   END get_cust_acct_bo;
1644 
1645 -- PRIVATE PROCEDURE assign_cust_acct_v2_rec
1646   --
1647   -- DESCRIPTION
1648   --     Assign attribute value from customer account object to plsql record.
1649   --
1650   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1651   --
1652   -- ARGUMENTS
1653   --   IN:
1654   --     p_cust_acct_v2_obj      Customer account object.
1655   --     p_cust_acct_id       Customer account Id.
1656   --     p_cust_acct_os       Customer account original system.
1657   --     p_cust_acct_osr      Customer account original system reference.
1658   --     p_create_or_update   Create or update flag.
1659   --   IN/OUT:
1660   --     px_cust_acct_rec     Customer Account plsql record.
1661   --
1662   -- NOTES
1663   --
1664   -- MODIFICATION HISTORY
1665   --
1666   --   1-FEB-2008    vsegu          Created.
1667 
1668   PROCEDURE assign_cust_acct_v2_rec(
1669     p_cust_acct_v2_obj           IN            HZ_CUST_ACCT_V2_BO,
1670     p_cust_acct_id            IN            NUMBER,
1671     p_cust_acct_os            IN            VARCHAR2,
1672     p_cust_acct_osr           IN            VARCHAR2,
1673     p_create_or_update        IN            VARCHAR2 := 'C',
1674     px_cust_acct_rec          IN OUT NOCOPY HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
1675   );
1676 
1677   -- PRIVATE PROCEDURE assign_cust_acct_v2_rec
1678   --
1679   -- DESCRIPTION
1680   --     Assign attribute value from customer account object to plsql record.
1681   --
1682   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1683   --
1684   -- ARGUMENTS
1685   --   IN:
1686   --     p_cust_acct_v2_obj      Customer account object.
1687   --     p_cust_acct_id       Customer account Id.
1688   --     p_cust_acct_os       Customer account original system.
1689   --     p_cust_acct_osr      Customer account original system reference.
1690   --     p_create_or_update   Create or update flag.
1691   --   IN/OUT:
1692   --     px_cust_acct_rec     Customer Account plsql record.
1693   --
1694   -- NOTES
1695   --
1696   -- MODIFICATION HISTORY
1697   --
1698   --   14-DEC-2004    Arnold Ng          Created.
1699 
1700   PROCEDURE assign_cust_acct_v2_rec(
1701     p_cust_acct_v2_obj           IN            HZ_CUST_ACCT_V2_BO,
1702     p_cust_acct_id            IN            NUMBER,
1703     p_cust_acct_os            IN            VARCHAR2,
1704     p_cust_acct_osr           IN            VARCHAR2,
1705     p_create_or_update        IN            VARCHAR2 := 'C',
1706     px_cust_acct_rec          IN OUT NOCOPY HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
1707   ) IS
1708   BEGIN
1709     px_cust_acct_rec.cust_account_id        := p_cust_acct_id;
1710     px_cust_acct_rec.account_number         := p_cust_acct_v2_obj.account_number;
1711     IF(p_cust_acct_v2_obj.status in ('A','I')) THEN
1712       px_cust_acct_rec.status                 := p_cust_acct_v2_obj.status;
1713     END IF;
1714     px_cust_acct_rec.customer_type          := p_cust_acct_v2_obj.customer_type;
1715     px_cust_acct_rec.customer_class_code    := p_cust_acct_v2_obj.customer_class_code;
1716     px_cust_acct_rec.primary_salesrep_id    := p_cust_acct_v2_obj.primary_salesrep_id;
1717     px_cust_acct_rec.sales_channel_code     := p_cust_acct_v2_obj.sales_channel_code;
1718     px_cust_acct_rec.order_type_id          := p_cust_acct_v2_obj.order_type_id;
1719     px_cust_acct_rec.price_list_id          := p_cust_acct_v2_obj.price_list_id;
1720     px_cust_acct_rec.tax_code               := p_cust_acct_v2_obj.tax_code;
1721     px_cust_acct_rec.fob_point              := p_cust_acct_v2_obj.fob_point;
1722     px_cust_acct_rec.freight_term           := p_cust_acct_v2_obj.freight_term;
1723     px_cust_acct_rec.ship_partial           := p_cust_acct_v2_obj.ship_partial;
1724     px_cust_acct_rec.ship_via               := p_cust_acct_v2_obj.ship_via;
1725     px_cust_acct_rec.warehouse_id           := p_cust_acct_v2_obj.warehouse_id;
1726     IF(p_cust_acct_v2_obj.tax_header_level_flag in ('Y','N')) THEN
1727       px_cust_acct_rec.tax_header_level_flag  := p_cust_acct_v2_obj.tax_header_level_flag;
1728     END IF;
1729     px_cust_acct_rec.tax_rounding_rule      := p_cust_acct_v2_obj.tax_rounding_rule;
1730     px_cust_acct_rec.coterminate_day_month  := p_cust_acct_v2_obj.coterminate_day_month;
1731     px_cust_acct_rec.primary_specialist_id  := p_cust_acct_v2_obj.primary_specialist_id;
1732     px_cust_acct_rec.secondary_specialist_id := p_cust_acct_v2_obj.secondary_specialist_id;
1736     px_cust_acct_rec.current_balance        := p_cust_acct_v2_obj.current_balance;
1733     IF(p_cust_acct_v2_obj.account_liable_flag in ('Y','N')) THEN
1734       px_cust_acct_rec.account_liable_flag    := p_cust_acct_v2_obj.account_liable_flag;
1735     END IF;
1737     px_cust_acct_rec.account_established_date := p_cust_acct_v2_obj.account_established_date;
1738     px_cust_acct_rec.account_termination_date := p_cust_acct_v2_obj.account_termination_date;
1739     px_cust_acct_rec.account_activation_date  := p_cust_acct_v2_obj.account_activation_date;
1740     px_cust_acct_rec.department               := p_cust_acct_v2_obj.department;
1741     px_cust_acct_rec.held_bill_expiration_date:= p_cust_acct_v2_obj.held_bill_expiration_date;
1742     IF(p_cust_acct_v2_obj.hold_bill_flag in ('Y','N')) THEN
1743       px_cust_acct_rec.hold_bill_flag := p_cust_acct_v2_obj.hold_bill_flag;
1744     END IF;
1745     px_cust_acct_rec.realtime_rate_flag := p_cust_acct_v2_obj.realtime_rate_flag;
1746     px_cust_acct_rec.acct_life_cycle_status := p_cust_acct_v2_obj.acct_life_cycle_status;
1747     px_cust_acct_rec.account_name := p_cust_acct_v2_obj.account_name;
1748     px_cust_acct_rec.deposit_refund_method := p_cust_acct_v2_obj.deposit_refund_method;
1749     IF(p_cust_acct_v2_obj.dormant_account_flag in ('Y','N')) THEN
1750       px_cust_acct_rec.dormant_account_flag := p_cust_acct_v2_obj.dormant_account_flag;
1751     END IF;
1752     px_cust_acct_rec.npa_number := p_cust_acct_v2_obj.npa_number;
1753     px_cust_acct_rec.suspension_date := p_cust_acct_v2_obj.suspension_date;
1754     px_cust_acct_rec.source_code := p_cust_acct_v2_obj.source_code;
1755     px_cust_acct_rec.comments := p_cust_acct_v2_obj.comments;
1756     px_cust_acct_rec.dates_negative_tolerance := p_cust_acct_v2_obj.dates_negative_tolerance;
1757     px_cust_acct_rec.dates_positive_tolerance := p_cust_acct_v2_obj.dates_positive_tolerance;
1758     px_cust_acct_rec.date_type_preference := p_cust_acct_v2_obj.date_type_preference;
1759     px_cust_acct_rec.over_shipment_tolerance := p_cust_acct_v2_obj.over_shipment_tolerance;
1760     px_cust_acct_rec.under_shipment_tolerance := p_cust_acct_v2_obj.under_shipment_tolerance;
1761     px_cust_acct_rec.over_return_tolerance := p_cust_acct_v2_obj.over_return_tolerance;
1762     px_cust_acct_rec.under_return_tolerance := p_cust_acct_v2_obj.under_return_tolerance;
1763     px_cust_acct_rec.item_cross_ref_pref := p_cust_acct_v2_obj.item_cross_ref_pref;
1764     IF(p_cust_acct_v2_obj.ship_sets_include_lines_flag in ('Y','N')) THEN
1765       px_cust_acct_rec.ship_sets_include_lines_flag := p_cust_acct_v2_obj.ship_sets_include_lines_flag;
1766     END IF;
1767     IF(p_cust_acct_v2_obj.arrivalsets_incl_lines_flag in ('Y','N')) THEN
1768       px_cust_acct_rec.arrivalsets_include_lines_flag := p_cust_acct_v2_obj.arrivalsets_incl_lines_flag;
1769     END IF;
1770     IF(p_cust_acct_v2_obj.sched_date_push_flag in ('Y','N')) THEN
1771       px_cust_acct_rec.sched_date_push_flag := p_cust_acct_v2_obj.sched_date_push_flag;
1772     END IF;
1773     px_cust_acct_rec.invoice_quantity_rule := p_cust_acct_v2_obj.invoice_quantity_rule;
1774     px_cust_acct_rec.pricing_event := p_cust_acct_v2_obj.pricing_event;
1775     px_cust_acct_rec.status_update_date := p_cust_acct_v2_obj.status_update_date;
1776     IF(p_cust_acct_v2_obj.autopay_flag in ('Y','N')) THEN
1777       px_cust_acct_rec.autopay_flag := p_cust_acct_v2_obj.autopay_flag;
1778     END IF;
1779     IF(p_cust_acct_v2_obj.notify_flag in ('Y','N')) THEN
1780       px_cust_acct_rec.notify_flag := p_cust_acct_v2_obj.notify_flag;
1781     END IF;
1782     px_cust_acct_rec.last_batch_id := p_cust_acct_v2_obj.last_batch_id;
1783     px_cust_acct_rec.selling_party_id := p_cust_acct_v2_obj.selling_party_id;
1784     IF(p_create_or_update = 'C') THEN
1785       px_cust_acct_rec.orig_system            := p_cust_acct_os;
1786       px_cust_acct_rec.orig_system_reference  := p_cust_acct_osr;
1787       px_cust_acct_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
1788     END IF;
1789     px_cust_acct_rec.attribute_category   := p_cust_acct_v2_obj.attribute_category;
1790     px_cust_acct_rec.attribute1           := p_cust_acct_v2_obj.attribute1;
1791     px_cust_acct_rec.attribute2           := p_cust_acct_v2_obj.attribute2;
1792     px_cust_acct_rec.attribute3           := p_cust_acct_v2_obj.attribute3;
1793     px_cust_acct_rec.attribute4           := p_cust_acct_v2_obj.attribute4;
1794     px_cust_acct_rec.attribute5           := p_cust_acct_v2_obj.attribute5;
1795     px_cust_acct_rec.attribute6           := p_cust_acct_v2_obj.attribute6;
1796     px_cust_acct_rec.attribute7           := p_cust_acct_v2_obj.attribute7;
1797     px_cust_acct_rec.attribute8           := p_cust_acct_v2_obj.attribute8;
1798     px_cust_acct_rec.attribute9           := p_cust_acct_v2_obj.attribute9;
1799     px_cust_acct_rec.attribute10          := p_cust_acct_v2_obj.attribute10;
1800     px_cust_acct_rec.attribute11          := p_cust_acct_v2_obj.attribute11;
1801     px_cust_acct_rec.attribute12          := p_cust_acct_v2_obj.attribute12;
1802     px_cust_acct_rec.attribute13          := p_cust_acct_v2_obj.attribute13;
1803     px_cust_acct_rec.attribute14          := p_cust_acct_v2_obj.attribute14;
1804     px_cust_acct_rec.attribute15          := p_cust_acct_v2_obj.attribute15;
1805     px_cust_acct_rec.attribute16          := p_cust_acct_v2_obj.attribute16;
1806     px_cust_acct_rec.attribute17          := p_cust_acct_v2_obj.attribute17;
1807     px_cust_acct_rec.attribute18          := p_cust_acct_v2_obj.attribute18;
1808     px_cust_acct_rec.attribute19          := p_cust_acct_v2_obj.attribute19;
1809     px_cust_acct_rec.attribute20          := p_cust_acct_v2_obj.attribute20;
1810     px_cust_acct_rec.global_attribute_category   := p_cust_acct_v2_obj.global_attribute_category;
1814     px_cust_acct_rec.global_attribute4    := p_cust_acct_v2_obj.global_attribute4;
1811     px_cust_acct_rec.global_attribute1    := p_cust_acct_v2_obj.global_attribute1;
1812     px_cust_acct_rec.global_attribute2    := p_cust_acct_v2_obj.global_attribute2;
1813     px_cust_acct_rec.global_attribute3    := p_cust_acct_v2_obj.global_attribute3;
1815     px_cust_acct_rec.global_attribute5    := p_cust_acct_v2_obj.global_attribute5;
1816     px_cust_acct_rec.global_attribute6    := p_cust_acct_v2_obj.global_attribute6;
1817     px_cust_acct_rec.global_attribute7    := p_cust_acct_v2_obj.global_attribute7;
1818     px_cust_acct_rec.global_attribute8    := p_cust_acct_v2_obj.global_attribute8;
1819     px_cust_acct_rec.global_attribute9    := p_cust_acct_v2_obj.global_attribute9;
1820     px_cust_acct_rec.global_attribute10   := p_cust_acct_v2_obj.global_attribute10;
1821     px_cust_acct_rec.global_attribute11   := p_cust_acct_v2_obj.global_attribute11;
1822     px_cust_acct_rec.global_attribute12   := p_cust_acct_v2_obj.global_attribute12;
1823     px_cust_acct_rec.global_attribute13   := p_cust_acct_v2_obj.global_attribute13;
1824     px_cust_acct_rec.global_attribute14   := p_cust_acct_v2_obj.global_attribute14;
1825     px_cust_acct_rec.global_attribute15   := p_cust_acct_v2_obj.global_attribute15;
1826     px_cust_acct_rec.global_attribute16   := p_cust_acct_v2_obj.global_attribute16;
1827     px_cust_acct_rec.global_attribute17   := p_cust_acct_v2_obj.global_attribute17;
1828     px_cust_acct_rec.global_attribute18   := p_cust_acct_v2_obj.global_attribute18;
1829     px_cust_acct_rec.global_attribute19   := p_cust_acct_v2_obj.global_attribute19;
1830     px_cust_acct_rec.global_attribute20   := p_cust_acct_v2_obj.global_attribute20;
1831   END assign_cust_acct_v2_rec;
1832 
1833 
1834  -- PROCEDURE do_create_cust_acct_v2_bo
1835   --
1836   -- DESCRIPTION
1837   --     Create customer account business object.
1838   PROCEDURE do_create_cust_acct_v2_bo(
1839     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
1840     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
1841     p_cust_acct_v2_obj           IN OUT NOCOPY HZ_CUST_ACCT_V2_BO,
1842     p_created_by_module       IN            VARCHAR2,
1843     p_obj_source              IN            VARCHAR2 := null,
1844     x_return_status           OUT NOCOPY    VARCHAR2,
1845     x_msg_count               OUT NOCOPY    NUMBER,
1846     x_msg_data                OUT NOCOPY    VARCHAR2,
1847     x_cust_acct_id            OUT NOCOPY    NUMBER,
1848     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
1849     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
1850     px_parent_id              IN OUT NOCOPY NUMBER,
1851     px_parent_os              IN OUT NOCOPY VARCHAR2,
1852     px_parent_osr             IN OUT NOCOPY VARCHAR2,
1853     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
1854   ) IS
1855     l_debug_prefix            VARCHAR2(30) := '';
1856     l_cust_acct_rec           HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE;
1857     l_person_rec              HZ_PARTY_V2PUB.PERSON_REC_TYPE;
1858     l_organization_rec        HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE;
1859     l_profile_rec             HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
1860 
1861     l_party_id                NUMBER;
1862     l_party_number            VARCHAR2(30);
1863     l_profile_id              NUMBER;
1864     l_cust_acct_profile_id    NUMBER;
1865     l_account_number          VARCHAR2(30);
1866     l_valid_obj               BOOLEAN;
1867     l_bus_object              HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
1868     l_cbm                     VARCHAR2(30);
1869 
1870     CURSOR get_cust_acct_profile_id(p_cust_acct_id NUMBER) IS
1871     SELECT cust_account_profile_id
1872     FROM HZ_CUSTOMER_PROFILES
1873     WHERE cust_account_id = p_cust_acct_id;
1874   BEGIN
1875     -- Standard start of API savepoint
1876     SAVEPOINT do_create_cust_acct_v2_bo_pub;
1877 
1878     -- initialize API return status to success.
1879     x_return_status := FND_API.G_RET_STS_SUCCESS;
1880 
1881     -- Initialize message list if p_init_msg_list is set to TRUE.
1882     IF FND_API.to_Boolean(p_init_msg_list) THEN
1883       FND_MSG_PUB.initialize;
1884     END IF;
1885 
1886     -- initialize Global variable
1887     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
1888     IF(p_created_by_module IS NULL) THEN
1889       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
1890     ELSE
1891       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
1892     END IF;
1893 
1894     -- Debug info.
1895     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1896         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_v2_bo(+)',
1897                                p_prefix=>l_debug_prefix,
1898                                p_msg_level=>fnd_log.level_procedure);
1899     END IF;
1900 
1901     -- Base on p_validate_bo_flag, check the completeness of business objects
1902     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
1903       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
1904         p_bus_object_code         => 'CUST_ACCT',
1905         x_bus_object              => l_bus_object
1906       );
1907       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_ca_v2_bo_comp(
1908                        p_ca_v2_objs    => HZ_CUST_ACCT_V2_BO_TBL(p_cust_acct_v2_obj),
1909                        p_bus_object => l_bus_object
1910                      );
1911       IF NOT(l_valid_obj) THEN
1912         RAISE fnd_api.g_exc_error;
1913       END IF;
1914     END IF;
1915 
1916     -- check pass in parent_id and parent_os+osr
1920       px_parent_osr     => px_parent_osr,
1917     hz_registry_validate_bo_pvt.validate_parent_id(
1918       px_parent_id      => px_parent_id,
1919       px_parent_os      => px_parent_os,
1921       p_parent_obj_type => px_parent_obj_type,
1922       x_return_status   => x_return_status,
1923       x_msg_count       => x_msg_count,
1924       x_msg_data        => x_msg_data);
1925 
1926     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1927       RAISE FND_API.G_EXC_ERROR;
1928     END IF;
1929 
1930     x_cust_acct_id := p_cust_acct_v2_obj.cust_acct_id;
1931     x_cust_acct_os := p_cust_acct_v2_obj.orig_system;
1932     x_cust_acct_osr := p_cust_acct_v2_obj.orig_system_reference;
1933 
1934     -- check if pass in cust_acct_id and os+osr
1935     hz_registry_validate_bo_pvt.validate_ssm_id(
1936       px_id              => x_cust_acct_id,
1937       px_os              => x_cust_acct_os,
1938       px_osr             => x_cust_acct_osr,
1939       p_obj_type         => 'HZ_CUST_ACCOUNTS',
1940       p_create_or_update => 'C',
1941       x_return_status    => x_return_status,
1942       x_msg_count        => x_msg_count,
1943       x_msg_data         => x_msg_data);
1944 
1945     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1946       RAISE FND_API.G_EXC_ERROR;
1947     END IF;
1948 
1949     assign_cust_acct_v2_rec(
1950       p_cust_acct_v2_obj          => p_cust_acct_v2_obj,
1951       p_cust_acct_id           => x_cust_acct_id,
1952       p_cust_acct_os           => x_cust_acct_os,
1953       p_cust_acct_osr          => x_cust_acct_osr,
1954       px_cust_acct_rec         => l_cust_acct_rec
1955     );
1956 
1957     IF(p_cust_acct_v2_obj.cust_profile_obj IS NULL) THEN
1958       fnd_message.set_name('AR', 'HZ_API_MISSING_MANDATORY_ENT');
1959       fnd_message.set_token('ENTITY' ,'CUST_PROFILE');
1960       fnd_msg_pub.add;
1961       RAISE FND_API.G_EXC_ERROR;
1962     END IF;
1963 
1964     HZ_CUST_ACCT_BO_PVT.assign_cust_profile_rec(
1965       p_cust_profile_obj            => p_cust_acct_v2_obj.cust_profile_obj,
1966       p_cust_acct_id                => x_cust_acct_id,
1967       p_site_use_id                 => NULL,
1968       px_cust_profile_rec           => l_profile_rec
1969     );
1970 
1971     -- set party_id to party record
1972     -- profile amount will be created after creating cust account
1973     -- therefore set p_create_profile_amt to FND_API.G_FALSE
1974     IF(px_parent_obj_type = 'ORG') THEN
1975       l_organization_rec.party_rec.party_id := px_parent_id;
1976       HZ_CUST_ACCOUNT_V2PUB.create_cust_account (
1977         p_cust_account_rec        => l_cust_acct_rec,
1978         p_organization_rec        => l_organization_rec,
1979         p_customer_profile_rec    => l_profile_rec,
1980         p_create_profile_amt      => FND_API.G_FALSE,
1981         x_cust_account_id         => x_cust_acct_id,
1982         x_account_number          => l_account_number,
1983         x_party_id                => l_party_id,
1984         x_party_number            => l_party_number,
1985         x_profile_id              => l_profile_id,
1986         x_return_status           => x_return_status,
1987         x_msg_count               => x_msg_count,
1988         x_msg_data                => x_msg_data
1989       );
1990     ELSE
1991       l_person_rec.party_rec.party_id := px_parent_id;
1992       HZ_CUST_ACCOUNT_V2PUB.create_cust_account (
1993         p_cust_account_rec        => l_cust_acct_rec,
1994         p_person_rec              => l_person_rec,
1995         p_customer_profile_rec    => l_profile_rec,
1996         p_create_profile_amt      => FND_API.G_FALSE,
1997         x_cust_account_id         => x_cust_acct_id,
1998         x_account_number          => l_account_number,
1999         x_party_id                => l_party_id,
2000         x_party_number            => l_party_number,
2001         x_profile_id              => l_profile_id,
2002         x_return_status           => x_return_status,
2003         x_msg_count               => x_msg_count,
2004         x_msg_data                => x_msg_data
2005       );
2006     END IF;
2007 
2008     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2009       RAISE FND_API.G_EXC_ERROR;
2010     END IF;
2011 
2012     OPEN get_cust_acct_profile_id(x_cust_acct_id);
2013     FETCH get_cust_acct_profile_id INTO l_cust_acct_profile_id;
2014     CLOSE get_cust_acct_profile_id;
2015 
2016     -- assign cust_acct_id
2017     p_cust_acct_v2_obj.cust_acct_id := x_cust_acct_id;
2018     p_cust_acct_v2_obj.cust_profile_obj.cust_acct_profile_id := l_cust_acct_profile_id;
2019     -----------------------------
2020     -- Create cust profile amount
2021     -----------------------------
2022     IF((p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs IS NOT NULL) AND
2023        (p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs.COUNT > 0)) THEN
2024       HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
2025         p_cpa_objs                => p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs,
2026         p_cp_id                   => l_cust_acct_profile_id,
2027         p_ca_id                   => x_cust_acct_id,
2028         p_casu_id                 => NULL,
2029         x_return_status           => x_return_status,
2030         x_msg_count               => x_msg_count,
2031         x_msg_data                => x_msg_data
2032       );
2033 
2034       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2038 
2035         RAISE FND_API.G_EXC_ERROR;
2036       END IF;
2037     END IF;
2039     -------------------------------------
2040     -- Create cust acct relate
2041     -------------------------------------
2042     IF((p_cust_acct_v2_obj.acct_relate_objs IS NOT NULL) AND
2043        (p_cust_acct_v2_obj.acct_relate_objs.COUNT > 0)) THEN
2044       HZ_CUST_ACCT_BO_PVT.create_cust_acct_relates(
2045         p_car_objs                => p_cust_acct_v2_obj.acct_relate_objs,
2046         p_ca_id                   => x_cust_acct_id,
2047         x_return_status           => x_return_status,
2048         x_msg_count               => x_msg_count,
2049         x_msg_data                => x_msg_data
2050       );
2051 
2052       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2053         RAISE FND_API.G_EXC_ERROR;
2054       END IF;
2055     END IF;
2056 
2057     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
2058 
2059     -------------------------------------
2060     -- Call cust account contact
2061     -------------------------------------
2062     -- Parent of cust account contact is cust account site
2063     -- so pass x_cust_acct_id, x_cust_acct_os and x_cust_acct_osr
2064     IF((p_cust_acct_v2_obj.cust_acct_contact_objs IS NOT NULL) AND
2065        (p_cust_acct_v2_obj.cust_acct_contact_objs.COUNT > 0)) THEN
2066       HZ_CUST_ACCT_CONTACT_BO_PVT.save_cust_acct_contacts(
2067         p_cac_objs           => p_cust_acct_v2_obj.cust_acct_contact_objs,
2068         p_create_update_flag => 'C',
2069         p_obj_source         => p_obj_source,
2070         x_return_status      => x_return_status,
2071         x_msg_count          => x_msg_count,
2072         x_msg_data           => x_msg_data,
2073         p_parent_id          => x_cust_acct_id,
2074         p_parent_os          => x_cust_acct_os,
2075         p_parent_osr         => x_cust_acct_osr,
2076         p_parent_obj_type    => 'CUST_ACCT'
2077       );
2078 
2079       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2080         RAISE FND_API.G_EXC_ERROR;
2081       END IF;
2082     END IF;
2083 
2084     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2085 
2086     -------------------------------------
2087     -- Call cust account site
2088     -------------------------------------
2089     -- create cust account site uses will include cust acct site use plus site use profile
2090     -- need to put customer account id and customer account site id
2091     IF((p_cust_acct_v2_obj.cust_acct_site_objs IS NOT NULL) AND
2092        (p_cust_acct_v2_obj.cust_acct_site_objs.COUNT > 0)) THEN
2093       HZ_CUST_ACCT_SITE_BO_PVT.save_cust_acct_v2_sites(
2094         p_cas_v2_objs           => p_cust_acct_v2_obj.cust_acct_site_objs,
2095         p_create_update_flag => 'C',
2096         p_obj_source         => p_obj_source,
2097         x_return_status      => x_return_status,
2098         x_msg_count          => x_msg_count,
2099         x_msg_data           => x_msg_data,
2100         p_parent_acct_id     => x_cust_acct_id,
2101         p_parent_acct_os     => x_cust_acct_os,
2102         p_parent_acct_osr    => x_cust_acct_osr
2103       );
2104 
2105       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2106         RAISE FND_API.G_EXC_ERROR;
2107       END IF;
2108     END IF;
2109 
2110     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2111 
2112     ------------------------
2113     -- Call bank account use
2114     ------------------------
2115     IF((p_cust_acct_v2_obj.bank_acct_use_objs IS NOT NULL) AND
2116        (p_cust_acct_v2_obj.bank_acct_use_objs.COUNT > 0)) THEN
2117       HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
2118         p_bank_acct_use_objs => p_cust_acct_v2_obj.bank_acct_use_objs,
2119         p_party_id           => l_party_id,
2120         p_ca_id              => x_cust_acct_id,
2121         p_casu_id            => NULL,
2122         x_return_status      => x_return_status,
2123         x_msg_count          => x_msg_count,
2124         x_msg_data           => x_msg_data
2125       );
2126 
2127       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2128         RAISE FND_API.G_EXC_ERROR;
2129       END IF;
2130     END IF;
2131 
2132     ------------------------
2133     -- Call payment method
2134     ------------------------
2135     IF((p_cust_acct_v2_obj.payment_method_objs IS NOT NULL) AND
2136        (p_cust_acct_v2_obj.payment_method_objs.COUNT>0)) THEN
2137       HZ_CUST_ACCT_BO_PVT.create_payment_methods(
2138         p_payment_method_objs => p_cust_acct_v2_obj.payment_method_objs,
2139         p_ca_id              => x_cust_acct_id,
2140         p_casu_id            => NULL,
2141         x_return_status      => x_return_status,
2142         x_msg_count          => x_msg_count,
2143         x_msg_data           => x_msg_data
2144       );
2145 
2146       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2147         RAISE FND_API.G_EXC_ERROR;
2148       END IF;
2149     END IF;
2150 
2151     -- reset Global variable
2152     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2153     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2154 
2155     -- Debug info.
2156     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2157          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2158                                p_msg_data=>x_msg_data,
2159                                p_msg_type=>'WARNING',
2160                                p_msg_level=>fnd_log.level_exception);
2164                                p_prefix=>l_debug_prefix,
2161     END IF;
2162     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2163         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_v2_bo(-)',
2165                                p_msg_level=>fnd_log.level_procedure);
2166     END IF;
2167 
2168   EXCEPTION
2169     WHEN fnd_api.g_exc_error THEN
2170       ROLLBACK TO do_create_cust_acct_v2_bo_pub;
2171 
2172       -- reset Global variable
2173       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2174       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2175 
2176       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2177       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2178       FND_MSG_PUB.ADD;
2179 
2180       x_return_status := fnd_api.g_ret_sts_error;
2181 
2182       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2183                                 p_count => x_msg_count,
2184                                 p_data  => x_msg_data);
2185 
2186       -- Debug info.
2187       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2188         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2189                                p_msg_data=>x_msg_data,
2190                                p_msg_type=>'ERROR',
2191                                p_msg_level=>fnd_log.level_error);
2192       END IF;
2193       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2194         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_v2_bo(-)',
2195                                p_prefix=>l_debug_prefix,
2196                                p_msg_level=>fnd_log.level_procedure);
2197       END IF;
2198 
2199     WHEN fnd_api.g_exc_unexpected_error THEN
2200       ROLLBACK TO do_create_cust_acct_v2_bo_pub;
2201 
2202       -- reset Global variable
2203       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2204       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2205 
2206       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2207       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2208       FND_MSG_PUB.ADD;
2209 
2210       x_return_status := fnd_api.g_ret_sts_unexp_error;
2211 
2212       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2213                                 p_count => x_msg_count,
2214                                 p_data  => x_msg_data);
2215 
2216       -- Debug info.
2217       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2218         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2219                                p_msg_data=>x_msg_data,
2220                                p_msg_type=>'UNEXPECTED ERROR',
2221                                p_msg_level=>fnd_log.level_error);
2222       END IF;
2223       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2224         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_v2_bo(-)',
2225                                p_prefix=>l_debug_prefix,
2226                                p_msg_level=>fnd_log.level_procedure);
2227       END IF;
2228 
2229     WHEN OTHERS THEN
2230       ROLLBACK TO do_create_cust_acct_v2_bo_pub;
2231 
2232       -- reset Global variable
2233       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2234       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2235 
2236       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2237       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2238       FND_MSG_PUB.ADD;
2239 
2240       x_return_status := fnd_api.g_ret_sts_unexp_error;
2241 
2242       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2243       fnd_message.set_token('ERROR' ,SQLERRM);
2244       fnd_msg_pub.add;
2245 
2246       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2247                                 p_count => x_msg_count,
2248                                 p_data  => x_msg_data);
2249 
2250       -- Debug info.
2251       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2252         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2253                                p_msg_data=>x_msg_data,
2254                                p_msg_type=>'SQL ERROR',
2255                                p_msg_level=>fnd_log.level_error);
2256       END IF;
2257       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2258         hz_utility_v2pub.debug(p_message=>'do_create_cust_acct_v2_bo(-)',
2259                                p_prefix=>l_debug_prefix,
2260                                p_msg_level=>fnd_log.level_procedure);
2261       END IF;
2262   END do_create_cust_acct_v2_bo;
2263 
2264   PROCEDURE create_cust_acct_v2_bo(
2265     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
2266     p_cust_acct_v2_obj           IN            HZ_CUST_ACCT_V2_BO,
2267     p_created_by_module       IN            VARCHAR2,
2268     p_obj_source              IN            VARCHAR2 := null,
2269     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
2270     x_return_status           OUT NOCOPY    VARCHAR2,
2271     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2272     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_V2_BO,
2273     x_cust_acct_id            OUT NOCOPY    NUMBER,
2274     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
2275     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
2276     px_parent_id              IN OUT NOCOPY NUMBER,
2277     px_parent_os              IN OUT NOCOPY VARCHAR2,
2278     px_parent_osr             IN OUT NOCOPY VARCHAR2,
2282     l_msg_count               NUMBER;
2279     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
2280   ) IS
2281     l_msg_data                VARCHAR2(2000);
2283     l_ca_obj                   HZ_CUST_ACCT_V2_BO;
2284   BEGIN
2285     l_ca_obj := p_cust_acct_v2_obj;
2286     do_create_cust_acct_v2_bo(
2287       p_init_msg_list           => fnd_api.g_true,
2288       p_validate_bo_flag        => p_validate_bo_flag,
2289       p_cust_acct_v2_obj           => l_ca_obj,
2290       p_created_by_module       => p_created_by_module,
2291       p_obj_source              => p_obj_source,
2292       x_return_status           => x_return_status,
2293       x_msg_count               => l_msg_count,
2294       x_msg_data                => l_msg_data,
2295       x_cust_acct_id            => x_cust_acct_id,
2296       x_cust_acct_os            => x_cust_acct_os,
2297       x_cust_acct_osr           => x_cust_acct_osr,
2298       px_parent_id              => px_parent_id,
2299       px_parent_os              => px_parent_os,
2300       px_parent_osr             => px_parent_osr,
2301       px_parent_obj_type        => px_parent_obj_type
2302     );
2303     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2304                     x_return_status   => x_return_status,
2305                     x_msg_count       => l_msg_count,
2306                     x_msg_data        => l_msg_data);
2307     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2308       x_return_obj := l_ca_obj;
2309     END IF;
2310   END create_cust_acct_v2_bo;
2311 
2312  PROCEDURE update_cust_acct_v2_bo(
2313     p_cust_acct_v2_obj           IN            HZ_CUST_ACCT_V2_BO,
2314     p_created_by_module       IN            VARCHAR2,
2315     p_obj_source              IN            VARCHAR2 := null,
2316     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
2317     x_return_status           OUT NOCOPY    VARCHAR2,
2318     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2319     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_V2_BO,
2320     x_cust_acct_id            OUT NOCOPY    NUMBER,
2321     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
2322     x_cust_acct_osr           OUT NOCOPY    VARCHAR2
2323   )IS
2324     l_msg_data                VARCHAR2(2000);
2325     l_msg_count               NUMBER;
2326     l_ca_obj                  HZ_CUST_ACCT_V2_BO;
2327   BEGIN
2328     l_ca_obj := p_cust_acct_v2_obj;
2329     do_update_cust_acct_v2_bo(
2330       p_init_msg_list           => fnd_api.g_true,
2331       p_cust_acct_v2_obj           => l_ca_obj,
2332       p_created_by_module       => p_created_by_module,
2333       p_obj_source              => p_obj_source,
2334       x_return_status           => x_return_status,
2335       x_msg_count               => l_msg_count,
2336       x_msg_data                => l_msg_data,
2337       x_cust_acct_id            => x_cust_acct_id,
2338       x_cust_acct_os            => x_cust_acct_os,
2339       x_cust_acct_osr           => x_cust_acct_osr,
2340       p_parent_os               => NULL
2341     );
2342     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2343                     x_return_status   => x_return_status,
2344                     x_msg_count       => l_msg_count,
2345                     x_msg_data        => l_msg_data);
2346     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2347       x_return_obj := l_ca_obj;
2348     END IF;
2349   END update_cust_acct_v2_bo;
2350 
2351   -- PRIVATE PROCEDURE do_update_cust_acct_v2_bo
2352   --
2353   -- DESCRIPTION
2354   --     Update customer account business object.
2355   PROCEDURE do_update_cust_acct_v2_bo(
2356     p_init_msg_list           IN            VARCHAR2 := fnd_api.g_false,
2357     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
2358     p_cust_acct_v2_obj           IN OUT NOCOPY HZ_CUST_ACCT_V2_BO,
2359     p_created_by_module       IN            VARCHAR2,
2360     p_obj_source              IN            VARCHAR2 := null,
2361     x_return_status           OUT NOCOPY    VARCHAR2,
2362     x_msg_count               OUT NOCOPY    NUMBER,
2363     x_msg_data                OUT NOCOPY    VARCHAR2,
2364     x_cust_acct_id            OUT NOCOPY    NUMBER,
2365     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
2366     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
2367     p_parent_os               IN            VARCHAR2
2368   )IS
2369     l_debug_prefix             VARCHAR2(30) := '';
2370     l_cust_acct_rec            HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE;
2371     l_create_update_flag       VARCHAR2(1);
2372     l_org_contact_bo           HZ_ORG_CONTACT_BO;
2373     l_ovn                      NUMBER;
2374     l_party_id                 NUMBER;
2375     l_cust_acct_profile_id     NUMBER;
2376     l_cbm                      VARCHAR2(30);
2377 
2378     CURSOR get_ovn(l_ca_id NUMBER) IS
2379     SELECT a.object_version_number, a.party_id
2380     FROM HZ_CUST_ACCOUNTS a
2381     WHERE a.cust_account_id = l_ca_id;
2382   BEGIN
2383     -- Standard start of API savepoint
2384     SAVEPOINT do_update_cust_acct_v2_bo_pub;
2385 
2386     -- initialize API return status to success.
2387     x_return_status := FND_API.G_RET_STS_SUCCESS;
2388 
2389     -- Initialize message list if p_init_msg_list is set to TRUE.
2390     IF FND_API.to_Boolean(p_init_msg_list) THEN
2391       FND_MSG_PUB.initialize;
2392     END IF;
2393 
2394     -- initialize Global variable
2395     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
2396     IF(p_created_by_module IS NULL) THEN
2400     END IF;
2397       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
2398     ELSE
2399       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
2401 
2402     -- Debug info.
2403     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2404         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_v2_bo_pub(+)',
2405                                p_prefix=>l_debug_prefix,
2406                                p_msg_level=>fnd_log.level_procedure);
2407     END IF;
2408 
2409     -------------------------------
2410     -- For Update cust accts
2411     -------------------------------
2412     x_cust_acct_id := p_cust_acct_v2_obj.cust_acct_id;
2413     x_cust_acct_os := p_cust_acct_v2_obj.orig_system;
2414     x_cust_acct_osr := p_cust_acct_v2_obj.orig_system_reference;
2415 
2416     -- validate ssm of cust account site
2417     hz_registry_validate_bo_pvt.validate_ssm_id(
2418       px_id              => x_cust_acct_id,
2419       px_os              => x_cust_acct_os,
2420       px_osr             => x_cust_acct_osr,
2421       p_obj_type         => 'HZ_CUST_ACCOUNTS',
2422       p_create_or_update => 'U',
2423       x_return_status    => x_return_status,
2424       x_msg_count        => x_msg_count,
2425       x_msg_data         => x_msg_data);
2426 
2427     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2428       RAISE FND_API.G_EXC_ERROR;
2429     END IF;
2430 
2431     -- get object version number of customer acct
2432     OPEN get_ovn(x_cust_acct_id);
2433     FETCH get_ovn INTO l_ovn, l_party_id;
2434     CLOSE get_ovn;
2435 
2436     assign_cust_acct_v2_rec(
2437       p_cust_acct_v2_obj          => p_cust_acct_v2_obj,
2438       p_cust_acct_id           => x_cust_acct_id,
2439       p_cust_acct_os           => x_cust_acct_os,
2440       p_cust_acct_osr          => x_cust_acct_osr,
2441       p_create_or_update       => 'U',
2442       px_cust_acct_rec         => l_cust_acct_rec
2443     );
2444 
2445     HZ_CUST_ACCOUNT_V2PUB.update_cust_account(
2446       p_cust_account_rec            => l_cust_acct_rec,
2447       p_object_version_number       => l_ovn,
2448       x_return_status               => x_return_status,
2449       x_msg_count                   => x_msg_count,
2450       x_msg_data                    => x_msg_data
2451     );
2452 
2453     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2454       RAISE FND_API.G_EXC_ERROR;
2455     END IF;
2456 
2457     -- assign cust_acct_id
2458     p_cust_acct_v2_obj.cust_acct_id := x_cust_acct_id;
2459     -----------------------------
2460     -- For Update account profile
2461     -----------------------------
2462     IF(p_cust_acct_v2_obj.cust_profile_obj IS NOT NULL) THEN
2463       HZ_CUST_ACCT_BO_PVT.update_cust_profile(
2464         p_cp_obj                      => p_cust_acct_v2_obj.cust_profile_obj,
2465         p_ca_id                       => x_cust_acct_id,
2466         p_casu_id                     => NULL,
2467         x_cp_id                       => l_cust_acct_profile_id,
2468         x_return_status               => x_return_status,
2469         x_msg_count                   => x_msg_count,
2470         x_msg_data                    => x_msg_data
2471       );
2472 
2473       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2474         RAISE FND_API.G_EXC_ERROR;
2475       END IF;
2476 
2477       -- assign cust_acct_profile_id
2478       p_cust_acct_v2_obj.cust_profile_obj.cust_acct_profile_id := l_cust_acct_profile_id;
2479       ---------------------------------
2480       -- For Update account profile amt
2481       ---------------------------------
2482       IF((p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs IS NOT NULL) AND
2483          (p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs.COUNT > 0)) THEN
2484         HZ_CUST_ACCT_BO_PVT.save_cust_profile_amts(
2485           p_cpa_objs                => p_cust_acct_v2_obj.cust_profile_obj.cust_profile_amt_objs,
2486           p_cp_id                   => l_cust_acct_profile_id,
2487           p_ca_id                   => x_cust_acct_id,
2488           p_casu_id                 => NULL,
2489           x_return_status           => x_return_status,
2490           x_msg_count               => x_msg_count,
2491           x_msg_data                => x_msg_data
2492         );
2493 
2494         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2495           RAISE FND_API.G_EXC_ERROR;
2496         END IF;
2497       END IF;
2498     END IF;
2499 
2500     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
2501 
2502     -----------------------------------
2503     -- For cust account contact
2504     -----------------------------------
2505     IF((p_cust_acct_v2_obj.cust_acct_contact_objs IS NOT NULL) AND
2506        (p_cust_acct_v2_obj.cust_acct_contact_objs.COUNT > 0)) THEN
2507       HZ_CUST_ACCT_CONTACT_BO_PVT.save_cust_acct_contacts(
2508         p_cac_objs            => p_cust_acct_v2_obj.cust_acct_contact_objs,
2509         p_create_update_flag  => 'U',
2510         p_obj_source         => p_obj_source,
2511         x_return_status       => x_return_status,
2512         x_msg_count           => x_msg_count,
2513         x_msg_data            => x_msg_data,
2514         p_parent_id           => x_cust_acct_id,
2515         p_parent_os           => x_cust_acct_os,
2516         p_parent_osr          => x_cust_acct_osr,
2517         p_parent_obj_type     => 'CUST_ACCT'
2518       );
2519 
2523     END IF;
2520       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2521         RAISE FND_API.G_EXC_ERROR;
2522       END IF;
2524 
2525     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2526 
2527     -------------------------------
2528     -- For Update account acct relate
2529     -------------------------------
2530     IF((p_cust_acct_v2_obj.acct_relate_objs IS NOT NULL) AND
2531        (p_cust_acct_v2_obj.acct_relate_objs.COUNT > 0)) THEN
2532       HZ_CUST_ACCT_BO_PVT.save_cust_acct_relates(
2533         p_car_objs           => p_cust_acct_v2_obj.acct_relate_objs,
2534         p_ca_id              => x_cust_acct_id,
2535         x_return_status      => x_return_status,
2536         x_msg_count          => x_msg_count,
2537         x_msg_data           => x_msg_data
2538       );
2539 
2540       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2541         RAISE FND_API.G_EXC_ERROR;
2542       END IF;
2543     END IF;
2544 
2545     -------------------------------------
2546     -- Call cust account site
2547     -------------------------------------
2548     -- create cust account site uses will include cust acct site use plus site use profile
2549     -- need to put customer account id and customer account site id
2550     IF((p_cust_acct_v2_obj.cust_acct_site_objs IS NOT NULL) AND
2551        (p_cust_acct_v2_obj.cust_acct_site_objs.COUNT > 0)) THEN
2552       HZ_CUST_ACCT_SITE_BO_PVT.save_cust_acct_v2_sites(
2553         p_cas_v2_objs           => p_cust_acct_v2_obj.cust_acct_site_objs,
2554         p_create_update_flag => 'U',
2555         p_obj_source         => p_obj_source,
2556         x_return_status      => x_return_status,
2557         x_msg_count          => x_msg_count,
2558         x_msg_data           => x_msg_data,
2559         p_parent_acct_id     => x_cust_acct_id,
2560         p_parent_acct_os     => x_cust_acct_os,
2561         p_parent_acct_osr    => x_cust_acct_osr
2562       );
2563 
2564       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2565         RAISE FND_API.G_EXC_ERROR;
2566       END IF;
2567     END IF;
2568 
2569     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2570 
2571     ------------------------
2572     -- Call bank account use
2573     ------------------------
2574     IF((p_cust_acct_v2_obj.bank_acct_use_objs IS NOT NULL) AND
2575        (p_cust_acct_v2_obj.bank_acct_use_objs.COUNT > 0)) THEN
2576       HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
2577         p_bank_acct_use_objs => p_cust_acct_v2_obj.bank_acct_use_objs,
2578         p_party_id           => l_party_id,
2579         p_ca_id              => x_cust_acct_id,
2580         p_casu_id            => NULL,
2581         x_return_status      => x_return_status,
2582         x_msg_count          => x_msg_count,
2583         x_msg_data           => x_msg_data
2584       );
2585 
2586       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2587         RAISE FND_API.G_EXC_ERROR;
2588       END IF;
2589     END IF;
2590 
2591     ------------------------
2592     -- Call payment method
2593     ------------------------
2594     IF((p_cust_acct_v2_obj.payment_method_objs IS NOT NULL) AND
2595        (p_cust_acct_v2_obj.payment_method_objs.COUNT > 0 )) THEN
2596       HZ_CUST_ACCT_BO_PVT.save_payment_methods(
2597         p_payment_method_objs => p_cust_acct_v2_obj.payment_method_objs,
2598         p_ca_id              => x_cust_acct_id,
2599         p_casu_id            => NULL,
2600         x_return_status      => x_return_status,
2601         x_msg_count          => x_msg_count,
2602         x_msg_data           => x_msg_data
2603       );
2604 
2605       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2606         RAISE FND_API.G_EXC_ERROR;
2607       END IF;
2608     END IF;
2609 
2610     -- reset Global variable
2611     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2612     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2613 
2614     -- Debug info.
2615     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2616          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2617                                p_msg_data=>x_msg_data,
2618                                p_msg_type=>'WARNING',
2619                                p_msg_level=>fnd_log.level_exception);
2620     END IF;
2621     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2622         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_v2_bo(-)',
2623                                p_prefix=>l_debug_prefix,
2624                                p_msg_level=>fnd_log.level_procedure);
2625     END IF;
2626   EXCEPTION
2627     WHEN fnd_api.g_exc_error THEN
2628       ROLLBACK TO do_update_cust_acct_v2_bo_pub;
2629 
2630       -- reset Global variable
2631       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2632       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2633 
2634       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2635       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2636       FND_MSG_PUB.ADD;
2637 
2638       x_return_status := fnd_api.g_ret_sts_error;
2639 
2640       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2641                                 p_count => x_msg_count,
2642                                 p_data  => x_msg_data);
2643 
2644       -- Debug info.
2645       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2646         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2650       END IF;
2647                                p_msg_data=>x_msg_data,
2648                                p_msg_type=>'ERROR',
2649                                p_msg_level=>fnd_log.level_error);
2651       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2652         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_v2_bo(-)',
2653                                p_prefix=>l_debug_prefix,
2654                                p_msg_level=>fnd_log.level_procedure);
2655       END IF;
2656 
2657     WHEN fnd_api.g_exc_unexpected_error THEN
2658       ROLLBACK TO do_update_cust_acct_v2_bo_pub;
2659 
2660       -- reset Global variable
2661       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2662       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2663 
2664       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2665       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2666       FND_MSG_PUB.ADD;
2667 
2668       x_return_status := fnd_api.g_ret_sts_unexp_error;
2669 
2670       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2671                                 p_count => x_msg_count,
2672                                 p_data  => x_msg_data);
2673 
2674       -- Debug info.
2675       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2676         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2677                                p_msg_data=>x_msg_data,
2678                                p_msg_type=>'UNEXPECTED ERROR',
2679                                p_msg_level=>fnd_log.level_error);
2680       END IF;
2681       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2682         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_v2_bo(-)',
2683                                p_prefix=>l_debug_prefix,
2684                                p_msg_level=>fnd_log.level_procedure);
2685       END IF;
2686 
2687     WHEN OTHERS THEN
2688       ROLLBACK TO do_update_cust_acct_v2_bo_pub;
2689 
2690       -- reset Global variable
2691       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2692       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2693 
2694       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2695       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2696       FND_MSG_PUB.ADD;
2697 
2698       x_return_status := fnd_api.g_ret_sts_unexp_error;
2699 
2700       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2701       fnd_message.set_token('ERROR' ,SQLERRM);
2702       fnd_msg_pub.add;
2703 
2704       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2705                                 p_count => x_msg_count,
2706                                 p_data  => x_msg_data);
2707 
2708       -- Debug info.
2709       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2710         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2711                                p_msg_data=>x_msg_data,
2712                                p_msg_type=>'SQL ERROR',
2713                                p_msg_level=>fnd_log.level_error);
2714       END IF;
2715       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2716         hz_utility_v2pub.debug(p_message=>'do_update_cust_acct_v2_bo(-)',
2717                                p_prefix=>l_debug_prefix,
2718                                p_msg_level=>fnd_log.level_procedure);
2719       END IF;
2720   END do_update_cust_acct_v2_bo;
2721 
2722 -- PROCEDURE do_save_cust_acct_v2_bo
2723   --
2724   -- DESCRIPTION
2725   --     Create or update customer account business object.
2726   PROCEDURE do_save_cust_acct_v2_bo(
2727     p_init_msg_list            IN            VARCHAR2 := fnd_api.g_false,
2728     p_validate_bo_flag         IN            VARCHAR2 := fnd_api.g_true,
2729     p_cust_acct_v2_obj            IN OUT NOCOPY HZ_CUST_ACCT_V2_BO,
2730     p_created_by_module        IN            VARCHAR2,
2731     p_obj_source               IN            VARCHAR2 := null,
2732     x_return_status            OUT NOCOPY    VARCHAR2,
2733     x_msg_count                OUT NOCOPY    NUMBER,
2734     x_msg_data                 OUT NOCOPY    VARCHAR2,
2735     x_cust_acct_id             OUT NOCOPY    NUMBER,
2736     x_cust_acct_os             OUT NOCOPY    VARCHAR2,
2737     x_cust_acct_osr            OUT NOCOPY    VARCHAR2,
2738     px_parent_id               IN OUT NOCOPY NUMBER,
2739     px_parent_os               IN OUT NOCOPY VARCHAR2,
2740     px_parent_osr              IN OUT NOCOPY VARCHAR2,
2741     px_parent_obj_type         IN OUT NOCOPY VARCHAR2
2742   ) IS
2743     l_return_status            VARCHAR2(30);
2744     l_msg_count                NUMBER;
2745     l_msg_data                 VARCHAR2(2000);
2746     l_create_update_flag       VARCHAR2(1);
2747     l_debug_prefix             VARCHAR2(30) := '';
2748   BEGIN
2749     -- initialize API return status to success.
2750     x_return_status := FND_API.G_RET_STS_SUCCESS;
2751 
2752     -- Initialize message list if p_init_msg_list is set to TRUE.
2753     IF FND_API.to_Boolean(p_init_msg_list) THEN
2754       FND_MSG_PUB.initialize;
2755     END IF;
2756 
2757     -- Debug info.
2758     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2759         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_v2_bo(+)',
2760                                p_prefix=>l_debug_prefix,
2761                                p_msg_level=>fnd_log.level_procedure);
2762     END IF;
2763 
2764     x_cust_acct_id := p_cust_acct_v2_obj.cust_acct_id;
2768     -- check root business object to determine that it should be
2765     x_cust_acct_os := p_cust_acct_v2_obj.orig_system;
2766     x_cust_acct_osr := p_cust_acct_v2_obj.orig_system_reference;
2767 
2769     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
2770     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
2771                               p_entity_id      => x_cust_acct_id,
2772                               p_entity_os      => x_cust_acct_os,
2773                               p_entity_osr     => x_cust_acct_osr,
2774                               p_entity_type    => 'HZ_CUST_ACCOUNTS',
2775                               p_parent_id      => px_parent_id,
2776                               p_parent_obj_type => px_parent_obj_type
2777                             );
2778 
2779     IF(l_create_update_flag = 'E') THEN
2780       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2781       FND_MESSAGE.SET_TOKEN('OBJECT', 'CUST_ACCT');
2782       FND_MSG_PUB.ADD;
2783       RAISE FND_API.G_EXC_ERROR;
2784     END IF;
2785 
2786     IF(l_create_update_flag = 'C') THEN
2787       do_create_cust_acct_v2_bo(
2788         p_validate_bo_flag    => p_validate_bo_flag,
2789         p_cust_acct_v2_obj       => p_cust_acct_v2_obj,
2790         p_created_by_module   => p_created_by_module,
2791         p_obj_source          => p_obj_source,
2792         x_return_status       => x_return_status,
2793         x_msg_count           => x_msg_count,
2794         x_msg_data            => x_msg_data,
2795         x_cust_acct_id        => x_cust_acct_id,
2796         x_cust_acct_os        => x_cust_acct_os,
2797         x_cust_acct_osr       => x_cust_acct_osr,
2798         px_parent_id          => px_parent_id,
2799         px_parent_os          => px_parent_os,
2800         px_parent_osr         => px_parent_osr,
2801         px_parent_obj_type    => px_parent_obj_type
2802       );
2803     ELSIF(l_create_update_flag = 'U') THEN
2804       do_update_cust_acct_v2_bo(
2805         p_cust_acct_v2_obj       => p_cust_acct_v2_obj,
2806         p_created_by_module   => p_created_by_module,
2807         p_obj_source          => p_obj_source,
2808         x_return_status       => x_return_status,
2809         x_msg_count           => x_msg_count,
2810         x_msg_data            => x_msg_data,
2811         x_cust_acct_id        => x_cust_acct_id,
2812         x_cust_acct_os        => x_cust_acct_os,
2813         x_cust_acct_osr       => x_cust_acct_osr,
2814         p_parent_os           => px_parent_os
2815       );
2816     ELSE
2817       RAISE FND_API.G_EXC_ERROR;
2818     END IF;
2819 
2820     -- Debug info.
2821     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2822          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2823                                p_msg_data=>x_msg_data,
2824                                p_msg_type=>'WARNING',
2825                                p_msg_level=>fnd_log.level_exception);
2826     END IF;
2827     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2828         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_v2_bo(-)',
2829                                p_prefix=>l_debug_prefix,
2830                                p_msg_level=>fnd_log.level_procedure);
2831     END IF;
2832 
2833   EXCEPTION
2834     WHEN fnd_api.g_exc_error THEN
2835       x_return_status := fnd_api.g_ret_sts_error;
2836 
2837       FND_MESSAGE.SET_NAME('AR', 'HZ_SAVE_API_ERROR');
2838       FND_MSG_PUB.ADD;
2839       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2840                                 p_count => x_msg_count,
2841                                 p_data  => x_msg_data);
2842 
2843       -- Debug info.
2844       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2845         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2846                                p_msg_data=>x_msg_data,
2847                                p_msg_type=>'ERROR',
2848                                p_msg_level=>fnd_log.level_error);
2849       END IF;
2850       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2851         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_v2_bo(-)',
2852                                p_prefix=>l_debug_prefix,
2853                                p_msg_level=>fnd_log.level_procedure);
2854       END IF;
2855     WHEN fnd_api.g_exc_unexpected_error THEN
2856       x_return_status := fnd_api.g_ret_sts_unexp_error;
2857 
2858       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2859                                 p_count => x_msg_count,
2860                                 p_data  => x_msg_data);
2861 
2862       -- Debug info.
2863       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2864         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2865                                p_msg_data=>x_msg_data,
2866                                p_msg_type=>'UNEXPECTED ERROR',
2867                                p_msg_level=>fnd_log.level_error);
2868       END IF;
2869       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2870         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_v2_bo(-)',
2871                                p_prefix=>l_debug_prefix,
2872                                p_msg_level=>fnd_log.level_procedure);
2873       END IF;
2874     WHEN OTHERS THEN
2875       x_return_status := fnd_api.g_ret_sts_unexp_error;
2876 
2877       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2878       fnd_message.set_token('ERROR' ,SQLERRM);
2879       fnd_msg_pub.add;
2880 
2881       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2885       -- Debug info.
2882                                 p_count => x_msg_count,
2883                                 p_data  => x_msg_data);
2884 
2886       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2887         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2888                                p_msg_data=>x_msg_data,
2889                                p_msg_type=>'SQL ERROR',
2890                                p_msg_level=>fnd_log.level_error);
2891       END IF;
2892       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2893         hz_utility_v2pub.debug(p_message=>'do_save_cust_acct_v2_bo(-)',
2894                                p_prefix=>l_debug_prefix,
2895                                p_msg_level=>fnd_log.level_procedure);
2896       END IF;
2897   END do_save_cust_acct_v2_bo;
2898 
2899 PROCEDURE save_cust_acct_v2_bo(
2900     p_validate_bo_flag        IN            VARCHAR2 := fnd_api.g_true,
2901     p_cust_acct_v2_obj           IN            HZ_CUST_ACCT_V2_BO,
2902     p_created_by_module       IN            VARCHAR2,
2903     p_obj_source              IN            VARCHAR2 := null,
2904     p_return_obj_flag         IN            VARCHAR2 := fnd_api.g_true,
2905     x_return_status           OUT NOCOPY    VARCHAR2,
2906     x_messages                OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2907     x_return_obj              OUT NOCOPY    HZ_CUST_ACCT_V2_BO,
2908     x_cust_acct_id            OUT NOCOPY    NUMBER,
2909     x_cust_acct_os            OUT NOCOPY    VARCHAR2,
2910     x_cust_acct_osr           OUT NOCOPY    VARCHAR2,
2911     px_parent_id              IN OUT NOCOPY NUMBER,
2912     px_parent_os              IN OUT NOCOPY VARCHAR2,
2913     px_parent_osr             IN OUT NOCOPY VARCHAR2,
2914     px_parent_obj_type        IN OUT NOCOPY VARCHAR2
2915   ) IS
2916     l_msg_data                VARCHAR2(2000);
2917     l_msg_count               NUMBER;
2918     l_ca_obj                  HZ_CUST_ACCT_V2_BO;
2919   BEGIN
2920     l_ca_obj := p_cust_acct_v2_obj;
2921     do_save_cust_acct_v2_bo(
2922       p_init_msg_list           => fnd_api.g_true,
2923       p_validate_bo_flag        => p_validate_bo_flag,
2924       p_cust_acct_v2_obj           => l_ca_obj,
2925       p_created_by_module       => p_created_by_module,
2926       x_return_status           => x_return_status,
2927       x_msg_count               => l_msg_count,
2928       x_msg_data                => l_msg_data,
2929       x_cust_acct_id            => x_cust_acct_id,
2930       x_cust_acct_os            => x_cust_acct_os,
2931       x_cust_acct_osr           => x_cust_acct_osr,
2932       px_parent_id              => px_parent_id,
2933       px_parent_os              => px_parent_os,
2934       px_parent_osr             => px_parent_osr,
2935       px_parent_obj_type        => px_parent_obj_type
2936     );
2937     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2938                     x_return_status   => x_return_status,
2939                     x_msg_count       => l_msg_count,
2940                     x_msg_data        => l_msg_data);
2941     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2942       x_return_obj := l_ca_obj;
2943     END IF;
2944   END save_cust_acct_v2_bo;
2945 
2946 --------------------------------------
2947   --
2948   -- PROCEDURE get_cust_acct_v2_bo
2949   --
2950   -- DESCRIPTION
2951   --     Get a logical customer account.
2952   --
2953   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2954   --
2955   -- ARGUMENTS
2956   --   IN:
2957   --     p_init_msg_list      Initialize message stack if it is set to
2958 --       p_cust_acct_id          customer account ID.
2959   --       p_parent_id	      Parent Id.
2960   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
2961   --   OUT:
2962   --     x_cust_acct_v2_obj         Logical customer account record.
2963   --     x_return_status      Return status after the call. The status can
2964   --                          be fnd_api.g_ret_sts_success (success),
2965   --                          fnd_api.g_ret_sts_error (error),
2966   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2967   --     x_msg_count          Number of messages in message stack.
2968   --     x_msg_data           Message text if x_msg_count is 1.
2969   --
2970   -- NOTES
2971   --
2972   -- MODIFICATION HISTORY
2973   --
2974   --
2975   --   1-FEB-2008  VSEGU                Created.
2976   --
2977 
2978 /*
2979 
2980 The Get customer account API Procedure is a retrieval service that returns full customer account business objects.
2981 The user identifies a particular Organization Contact business object using the TCA identifier and/or the object's
2982 Source System information. Upon proper validation of the object, the full Organization Contact business object is returned.
2983 The object consists of all data included within the Organization Contact business object, at all embedded levels.
2984 This includes the set of all data stored in the TCA tables for each embedded entity.
2985 
2986 
2987 Embedded BO	    	Mandatory	Multiple Logical API Procedure		Comments
2988 Customer Account Site		N	Y	get_cust_acct_site_v2_bo
2989 Customer Account Contact	N	Y	get_cust_acct_contact_bo
2990 Customer Profile		Y	N	Business Structure. Included entities:
2991                                                 HZ_CUSTOMER_PROFILES, HZ_CUST_PROFILE_AMTS
2992 
2993 To retrieve the appropriate embedded entities within the 'Organization Contact' business object, the Get procedure returns all records for the particular contact from these TCA entity tables.
2994 
2995 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
2996 
2997 Customer Account	Y		N	HZ_CUST_ACCOUNTS
2998 Account Relationship	N		Y	HZ_CUST_ACCT_RELATE
2999 Bank Account Use	N		Y	Owned by Payments team
3000 Payment Method		N		N	Owned by AR team
3001 
3002 */
3003 
3004 
3005  PROCEDURE get_cust_acct_v2_bo(
3006     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3007     p_cust_acct_id        IN            NUMBER,
3008     p_cust_acct_os		IN	VARCHAR2,
3009     p_cust_acct_osr		IN	VARCHAR2,
3010     x_cust_acct_v2_obj          OUT NOCOPY    HZ_CUST_ACCT_V2_BO,
3011     x_return_status       OUT NOCOPY    VARCHAR2,
3012     x_msg_count           OUT NOCOPY    NUMBER,
3013     x_msg_data            OUT NOCOPY    VARCHAR2
3014   ) is
3015  l_debug_prefix              VARCHAR2(30) := '';
3016 
3017   l_cust_acct_id  number;
3018   l_cust_acct_os  varchar2(30);
3019   l_cust_acct_osr varchar2(255);
3020   l_cust_acct_v2_objs  HZ_CUST_ACCT_V2_BO_TBL;
3021 BEGIN
3022 
3023 	-- initialize API return status to success.
3024     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3025 
3026     	-- Initialize message list if p_init_msg_list is set to TRUE
3027     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3028       		FND_MSG_PUB.initialize;
3029     	END IF;
3030 
3031 
3032 	-- Debug info.
3033         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3034         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_v2_bo(+)',
3035                                p_prefix=>l_debug_prefix,
3036                                p_msg_level=>fnd_log.level_procedure);
3037     	END IF;
3038 
3039     	-- check if pass in contact_point_id and/or os+osr
3040     	-- extraction validation logic is same as update
3041 
3042     	l_cust_acct_id := p_cust_acct_id;
3043     	l_cust_acct_os := p_cust_acct_os;
3044     	l_cust_acct_osr := p_cust_acct_osr;
3045 
3046     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
3047       		px_id              => l_cust_acct_id,
3048       		px_os              => l_cust_acct_os,
3049       		px_osr             => l_cust_acct_osr,
3050       		p_obj_type         => 'HZ_CUST_ACCOUNTS',
3051       		x_return_status    => x_return_status,
3052       		x_msg_count        => x_msg_count,
3053       		x_msg_data         => x_msg_data);
3054 
3055     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3056       		RAISE fnd_api.g_exc_error;
3057    	 END IF;
3058 
3059 	HZ_EXTRACT_CUST_ACCT_BO_PVT.get_cust_acct_v2_bos
3060 		(p_init_msg_list => fnd_api.g_false,
3061 		 p_parent_id => NULL,
3062 		 p_cust_acct_id => l_cust_acct_id,
3063 		 p_action_type => NULL,
3064 		  x_cust_acct_v2_objs => l_cust_acct_v2_objs,
3065 		 x_return_status => x_return_status,
3066 		 x_msg_count => x_msg_count,
3067 		 x_msg_data => x_msg_data);
3068 
3069 	x_cust_acct_v2_obj := l_cust_acct_v2_objs(1);
3070 
3071 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3072       		RAISE FND_API.G_EXC_ERROR;
3073     	END IF;
3074 
3075 
3076 	-- Debug info.
3077     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3078          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3079                                p_msg_data=>x_msg_data,
3080                                p_msg_type=>'WARNING',
3081                                p_msg_level=>fnd_log.level_exception);
3082     	END IF;
3083 
3084     	-- Debug info.
3085         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3086         	hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_v2_bo (-)',
3087                                p_prefix=>l_debug_prefix,
3088                                p_msg_level=>fnd_log.level_procedure);
3089     	END IF;
3090 
3091 
3092  EXCEPTION
3093 
3094   WHEN fnd_api.g_exc_error THEN
3095       x_return_status := fnd_api.g_ret_sts_error;
3096 
3097       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3098                                 p_count => x_msg_count,
3099                                 p_data  => x_msg_data);
3100 
3101       -- Debug info.
3102       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3103         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3104                                p_msg_data=>x_msg_data,
3105                                p_msg_type=>'ERROR',
3106                                p_msg_level=>fnd_log.level_error);
3107       END IF;
3108       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3109         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_v2_bo (-)',
3110                                p_prefix=>l_debug_prefix,
3111                                p_msg_level=>fnd_log.level_procedure);
3112       END IF;
3113     WHEN fnd_api.g_exc_unexpected_error THEN
3114       x_return_status := fnd_api.g_ret_sts_unexp_error;
3115 
3116       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3117                                 p_count => x_msg_count,
3118                                 p_data  => x_msg_data);
3119 
3120       -- Debug info.
3121       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3122         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3123                                p_msg_data=>x_msg_data,
3124                                p_msg_type=>'UNEXPECTED ERROR',
3125                                p_msg_level=>fnd_log.level_error);
3126       END IF;
3127       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3128         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_v2_bo (-)',
3129                                p_prefix=>l_debug_prefix,
3130                                p_msg_level=>fnd_log.level_procedure);
3131       END IF;
3132     WHEN OTHERS THEN
3133       x_return_status := fnd_api.g_ret_sts_unexp_error;
3134 
3135       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3136       fnd_message.set_token('ERROR' ,SQLERRM);
3137       fnd_msg_pub.add;
3138 
3139       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3140                                 p_count => x_msg_count,
3141                                 p_data  => x_msg_data);
3142 
3143       -- Debug info.
3144       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3145         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3146                                p_msg_data=>x_msg_data,
3147                                p_msg_type=>'SQL ERROR',
3148                                p_msg_level=>fnd_log.level_error);
3149       END IF;
3150       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3151         hz_utility_v2pub.debug(p_message=>'hz_cust_acct_bo_pub.get_cust_acct_v2_bo (-)',
3152                                p_prefix=>l_debug_prefix,
3153                                p_msg_level=>fnd_log.level_procedure);
3154       END IF;
3155 
3156 end;
3157 
3158  PROCEDURE get_cust_acct_v2_bo(
3159     p_cust_acct_id        IN            NUMBER,
3160     p_cust_acct_os              IN      VARCHAR2,
3161     p_cust_acct_osr             IN      VARCHAR2,
3162     x_cust_acct_v2_obj          OUT NOCOPY    HZ_CUST_ACCT_V2_BO,
3163     x_return_status       OUT NOCOPY    VARCHAR2,
3164     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
3165   ) IS
3166     l_msg_data            VARCHAR2(2000);
3167     l_msg_count           NUMBER;
3168   BEGIN
3169     get_cust_acct_v2_bo(
3170       p_init_msg_list   => fnd_api.g_true,
3171       p_cust_acct_id    => p_cust_acct_id,
3172       p_cust_acct_os    => p_cust_acct_os,
3173       p_cust_acct_osr   => p_cust_acct_osr,
3174       x_cust_acct_v2_obj   => x_cust_acct_v2_obj,
3175       x_return_status   => x_return_status,
3176       x_msg_count       => l_msg_count,
3177       x_msg_data        => l_msg_data
3178     );
3179     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3180                     x_return_status   => x_return_status,
3181                     x_msg_count       => l_msg_count,
3182                     x_msg_data        => l_msg_data);
3183   END get_cust_acct_v2_bo;
3184 
3185 END hz_cust_acct_bo_pub;