DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_CUST_ACCT_SITE_BO_PVT

Source


1 PACKAGE BODY hz_cust_acct_site_bo_pvt AS
2 /*$Header: ARHBCSVB.pls 120.11.12010000.2 2008/10/16 22:29:17 awu ship $ */
3 
4   -- PRIVATE PROCEDURE assign_cust_site_use_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from customer account site use object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_cust_site_use_obj  Customer account site use object.
14   --     p_cust_acct_site_id  Customer account site Id.
15   --     p_cust_site_use_id   Customer account site use Id.
16   --     p_cust_site_use_os   Customer account site use original system.
17   --     p_cust_site_use_osr  Customer account site use original system reference.
18   --   IN/OUT:
19   --     px_cust_site_use_rec  Customer account site use plsql record.
20   --
21   -- NOTES
22   --
23   -- MODIFICATION HISTORY
24   --
25   --   14-DEC-2004    Arnold Ng          Created.
26 
27   PROCEDURE assign_cust_site_use_rec(
28     p_cust_site_use_obj          IN            HZ_CUST_SITE_USE_BO,
29     p_cust_acct_site_id          IN            NUMBER,
30     p_cust_site_use_id           IN            NUMBER,
31     p_cust_site_use_os           IN            VARCHAR2,
32     p_cust_site_use_osr          IN            VARCHAR2,
33     px_cust_site_use_rec         IN OUT NOCOPY HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
34   );
35 
36   -- PRIVATE PROCEDURE assign_cust_site_use_rec
37   --
38   -- DESCRIPTION
39   --     Assign attribute value from customer account site use object to plsql record.
40   --
41   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
42   --
43   -- ARGUMENTS
44   --   IN:
45   --     p_cust_site_use_obj  Customer account site use object.
46   --     p_cust_acct_site_id  Customer account site Id.
47   --     p_cust_site_use_id   Customer account site use Id.
48   --     p_cust_site_use_os   Customer account site use original system.
49   --     p_cust_site_use_osr  Customer account site use original system reference.
50   --   IN/OUT:
51   --     px_cust_site_use_rec  Customer account site use plsql record.
52   --
53   -- NOTES
54   --
55   -- MODIFICATION HISTORY
56   --
57   --   14-DEC-2004    Arnold Ng          Created.
58 
59   PROCEDURE assign_cust_site_use_rec(
60     p_cust_site_use_obj          IN            HZ_CUST_SITE_USE_BO,
61     p_cust_acct_site_id          IN            NUMBER,
62     p_cust_site_use_id           IN            NUMBER,
63     p_cust_site_use_os           IN            VARCHAR2,
64     p_cust_site_use_osr          IN            VARCHAR2,
65     px_cust_site_use_rec         IN OUT NOCOPY HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
66   ) IS
67   BEGIN
68     px_cust_site_use_rec.site_use_id           := p_cust_site_use_id;
69     px_cust_site_use_rec.cust_acct_site_id     := p_cust_acct_site_id;
70     px_cust_site_use_rec.site_use_code         := p_cust_site_use_obj.site_use_code;
71     IF(p_cust_site_use_obj.primary_flag in ('Y','N')) THEN
72       px_cust_site_use_rec.primary_flag          := p_cust_site_use_obj.primary_flag;
73     END IF;
74     IF(p_cust_site_use_obj.status in ('A','I')) THEN
75       px_cust_site_use_rec.status                := p_cust_site_use_obj.status;
76     END IF;
77     px_cust_site_use_rec.location              := p_cust_site_use_obj.location;
78     px_cust_site_use_rec.bill_to_site_use_id   := p_cust_site_use_obj.bill_to_site_use_id;
79     px_cust_site_use_rec.sic_code              := p_cust_site_use_obj.sic_code;
80     px_cust_site_use_rec.payment_term_id       := p_cust_site_use_obj.payment_term_id;
81     IF(p_cust_site_use_obj.gsa_indicator in ('Y','N')) THEN
82       px_cust_site_use_rec.gsa_indicator         := p_cust_site_use_obj.gsa_indicator;
83     END IF;
84     px_cust_site_use_rec.ship_partial          := p_cust_site_use_obj.ship_partial;
85     px_cust_site_use_rec.ship_via              := p_cust_site_use_obj.ship_via;
86     px_cust_site_use_rec.fob_point             := p_cust_site_use_obj.fob_point;
87     px_cust_site_use_rec.order_type_id         := p_cust_site_use_obj.order_type_id;
88     px_cust_site_use_rec.price_list_id         := p_cust_site_use_obj.price_list_id;
89     px_cust_site_use_rec.freight_term          := p_cust_site_use_obj.freight_term;
90     px_cust_site_use_rec.warehouse_id          := p_cust_site_use_obj.warehouse_id;
91     px_cust_site_use_rec.territory_id          := p_cust_site_use_obj.territory_id;
92     px_cust_site_use_rec.attribute_category    := p_cust_site_use_obj.attribute_category;
93     px_cust_site_use_rec.attribute1            := p_cust_site_use_obj.attribute1;
94     px_cust_site_use_rec.attribute2            := p_cust_site_use_obj.attribute2;
95     px_cust_site_use_rec.attribute3            := p_cust_site_use_obj.attribute3;
96     px_cust_site_use_rec.attribute4            := p_cust_site_use_obj.attribute4;
97     px_cust_site_use_rec.attribute5            := p_cust_site_use_obj.attribute5;
98     px_cust_site_use_rec.attribute6            := p_cust_site_use_obj.attribute6;
99     px_cust_site_use_rec.attribute7            := p_cust_site_use_obj.attribute7;
100     px_cust_site_use_rec.attribute8            := p_cust_site_use_obj.attribute8;
101     px_cust_site_use_rec.attribute9            := p_cust_site_use_obj.attribute9;
102     px_cust_site_use_rec.attribute10           := p_cust_site_use_obj.attribute10;
103     px_cust_site_use_rec.attribute11           := p_cust_site_use_obj.attribute11;
104     px_cust_site_use_rec.attribute12           := p_cust_site_use_obj.attribute12;
105     px_cust_site_use_rec.attribute13           := p_cust_site_use_obj.attribute13;
106     px_cust_site_use_rec.attribute14           := p_cust_site_use_obj.attribute14;
107     px_cust_site_use_rec.attribute15           := p_cust_site_use_obj.attribute15;
108     px_cust_site_use_rec.attribute16           := p_cust_site_use_obj.attribute16;
109     px_cust_site_use_rec.attribute17           := p_cust_site_use_obj.attribute17;
110     px_cust_site_use_rec.attribute18           := p_cust_site_use_obj.attribute18;
111     px_cust_site_use_rec.attribute19           := p_cust_site_use_obj.attribute19;
112     px_cust_site_use_rec.attribute20           := p_cust_site_use_obj.attribute20;
113     px_cust_site_use_rec.attribute21           := p_cust_site_use_obj.attribute21;
114     px_cust_site_use_rec.attribute22           := p_cust_site_use_obj.attribute22;
115     px_cust_site_use_rec.attribute23           := p_cust_site_use_obj.attribute23;
116     px_cust_site_use_rec.attribute24           := p_cust_site_use_obj.attribute24;
117     px_cust_site_use_rec.attribute25           := p_cust_site_use_obj.attribute25;
118     px_cust_site_use_rec.tax_reference         := p_cust_site_use_obj.tax_reference;
119     px_cust_site_use_rec.sort_priority         := p_cust_site_use_obj.sort_priority;
120     px_cust_site_use_rec.tax_code              := p_cust_site_use_obj.tax_code;
121     px_cust_site_use_rec.demand_class_code     := p_cust_site_use_obj.demand_class_code;
122     px_cust_site_use_rec.tax_header_level_flag := p_cust_site_use_obj.tax_header_level_flag;
123     px_cust_site_use_rec.tax_rounding_rule     := p_cust_site_use_obj.tax_rounding_rule;
124     px_cust_site_use_rec.global_attribute_category    := p_cust_site_use_obj.global_attribute_category;
125     px_cust_site_use_rec.global_attribute1     := p_cust_site_use_obj.global_attribute1;
126     px_cust_site_use_rec.global_attribute2     := p_cust_site_use_obj.global_attribute2;
127     px_cust_site_use_rec.global_attribute3     := p_cust_site_use_obj.global_attribute3;
128     px_cust_site_use_rec.global_attribute4     := p_cust_site_use_obj.global_attribute4;
129     px_cust_site_use_rec.global_attribute5     := p_cust_site_use_obj.global_attribute5;
130     px_cust_site_use_rec.global_attribute6     := p_cust_site_use_obj.global_attribute6;
131     px_cust_site_use_rec.global_attribute7     := p_cust_site_use_obj.global_attribute7;
132     px_cust_site_use_rec.global_attribute8     := p_cust_site_use_obj.global_attribute8;
133     px_cust_site_use_rec.global_attribute9     := p_cust_site_use_obj.global_attribute9;
134     px_cust_site_use_rec.global_attribute10    := p_cust_site_use_obj.global_attribute10;
135     px_cust_site_use_rec.global_attribute11    := p_cust_site_use_obj.global_attribute11;
136     px_cust_site_use_rec.global_attribute12    := p_cust_site_use_obj.global_attribute12;
137     px_cust_site_use_rec.global_attribute13    := p_cust_site_use_obj.global_attribute13;
138     px_cust_site_use_rec.global_attribute14    := p_cust_site_use_obj.global_attribute14;
139     px_cust_site_use_rec.global_attribute15    := p_cust_site_use_obj.global_attribute15;
140     px_cust_site_use_rec.global_attribute16    := p_cust_site_use_obj.global_attribute16;
141     px_cust_site_use_rec.global_attribute17    := p_cust_site_use_obj.global_attribute17;
142     px_cust_site_use_rec.global_attribute18    := p_cust_site_use_obj.global_attribute18;
143     px_cust_site_use_rec.global_attribute19    := p_cust_site_use_obj.global_attribute19;
144     px_cust_site_use_rec.global_attribute20    := p_cust_site_use_obj.global_attribute20;
145     px_cust_site_use_rec.primary_salesrep_id   := p_cust_site_use_obj.primary_salesrep_id;
146     px_cust_site_use_rec.finchrg_receivables_trx_id   := p_cust_site_use_obj.finchrg_receivables_trx_id;
147     px_cust_site_use_rec.dates_negative_tolerance  := p_cust_site_use_obj.dates_negative_tolerance;
148     px_cust_site_use_rec.dates_positive_tolerance  := p_cust_site_use_obj.dates_positive_tolerance;
149     px_cust_site_use_rec.date_type_preference      := p_cust_site_use_obj.date_type_preference;
150     px_cust_site_use_rec.over_shipment_tolerance   := p_cust_site_use_obj.over_shipment_tolerance;
151     px_cust_site_use_rec.under_shipment_tolerance  := p_cust_site_use_obj.under_shipment_tolerance;
152     px_cust_site_use_rec.item_cross_ref_pref   := p_cust_site_use_obj.item_cross_ref_pref;
153     px_cust_site_use_rec.over_return_tolerance := p_cust_site_use_obj.over_return_tolerance;
154     px_cust_site_use_rec.under_return_tolerance:= p_cust_site_use_obj.under_return_tolerance;
155     IF(p_cust_site_use_obj.ship_sets_include_lines_flag in ('Y','N')) THEN
156       px_cust_site_use_rec.ship_sets_include_lines_flag := p_cust_site_use_obj.ship_sets_include_lines_flag;
157     END IF;
158     IF(p_cust_site_use_obj.arrivalsets_incl_lines_flag in ('Y','N')) THEN
159       px_cust_site_use_rec.arrivalsets_include_lines_flag := p_cust_site_use_obj.arrivalsets_incl_lines_flag;
160     END IF;
161     IF(p_cust_site_use_obj.sched_date_push_flag in ('Y','N')) THEN
162       px_cust_site_use_rec.sched_date_push_flag  := p_cust_site_use_obj.sched_date_push_flag;
163     END IF;
164     px_cust_site_use_rec.invoice_quantity_rule := p_cust_site_use_obj.invoice_quantity_rule;
165     px_cust_site_use_rec.pricing_event         := p_cust_site_use_obj.pricing_event;
166     px_cust_site_use_rec.gl_id_rec             := p_cust_site_use_obj.gl_id_rec;
167     px_cust_site_use_rec.gl_id_rev             := p_cust_site_use_obj.gl_id_rev;
168     px_cust_site_use_rec.gl_id_tax             := p_cust_site_use_obj.gl_id_tax;
169     px_cust_site_use_rec.gl_id_freight         := p_cust_site_use_obj.gl_id_freight;
170     px_cust_site_use_rec.gl_id_clearing        := p_cust_site_use_obj.gl_id_clearing;
171     px_cust_site_use_rec.gl_id_unbilled        := p_cust_site_use_obj.gl_id_unbilled;
172     px_cust_site_use_rec.gl_id_unearned        := p_cust_site_use_obj.gl_id_unearned;
173     px_cust_site_use_rec.gl_id_unpaid_rec      := p_cust_site_use_obj.gl_id_unpaid_rec;
174     px_cust_site_use_rec.gl_id_remittance      := p_cust_site_use_obj.gl_id_remittance;
175     px_cust_site_use_rec.gl_id_factor          := p_cust_site_use_obj.gl_id_factor;
176     px_cust_site_use_rec.tax_classification    := p_cust_site_use_obj.tax_classification;
177     px_cust_site_use_rec.orig_system           := p_cust_site_use_os;
178     px_cust_site_use_rec.orig_system_reference := p_cust_site_use_osr;
179     px_cust_site_use_rec.created_by_module     := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
180     px_cust_site_use_rec.org_id                := p_cust_site_use_obj.org_id;
181   END assign_cust_site_use_rec;
182 
183   -- PROCEDURE create_cust_site_uses
184   --
185   -- DESCRIPTION
186   --     Create customer account site uses.
187   --
188   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
189   --
190   -- ARGUMENTS
191   --   IN:
192   --     p_casu_objs          List of customer account site use objects.
193   --     p_ca_id              Customer account Id.
194   --     p_cas_id             Customer account site Id.
195   --     p_parent_os          Parent original system.
196   --   OUT:
197   --     x_return_status      Return status after the call. The status can
198   --                          be fnd_api.g_ret_sts_success (success),
199   --                          fnd_api.g_ret_sts_error (error),
200   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
201   --     x_msg_count          Number of messages in message stack.
202   --     x_msg_data           Message text if x_msg_count is 1.
203   --
204   -- NOTES
205   --
206   -- MODIFICATION HISTORY
207   --
208   --   14-DEC-2004    Arnold Ng          Created.
209 
210   PROCEDURE create_cust_site_uses(
211     p_casu_objs               IN OUT NOCOPY HZ_CUST_SITE_USE_BO_TBL,
212     p_ca_id                   IN            NUMBER,
213     p_cas_id                  IN            NUMBER,
214     p_parent_os               IN            VARCHAR2,
215     x_return_status           OUT NOCOPY    VARCHAR2,
216     x_msg_count               OUT NOCOPY    NUMBER,
217     x_msg_data                OUT NOCOPY    VARCHAR2
218   ) IS
219     l_debug_prefix            VARCHAR2(30) := '';
220     l_casu_id                 NUMBER;
221     l_casu_os                 VARCHAR2(30);
222     l_casu_osr                VARCHAR2(255);
223     l_casu_rec                HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE;
224     l_cap_id                  NUMBER;
225     l_cap_os                  VARCHAR2(30);
226     l_cap_osr                 VARCHAR2(255);
227     l_cap_rec                 HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
228     l_profile_id              NUMBER;
229     l_party_id                NUMBER;
230 
231     CURSOR get_party_id(l_ca_id NUMBER) IS
232     SELECT party_id
233     FROM HZ_CUST_ACCOUNTS
234     WHERE cust_account_id = l_ca_id;
235   BEGIN
236     -- Standard start of API savepoint
237     SAVEPOINT create_casu_pvt;
238 
239     -- initialize API return status to success.
240     x_return_status := FND_API.G_RET_STS_SUCCESS;
241 
242     -- Debug info.
243     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
244         hz_utility_v2pub.debug(p_message=>'create_cust_site_uses(+)',
245                                p_prefix=>l_debug_prefix,
246                                p_msg_level=>fnd_log.level_procedure);
247     END IF;
248 
249     -- Create cust site use with site use profile
250     -- HZ_CUST_ACCONT_SITE_V2PUB will create cust site use and then
251     -- create site use profile
252     FOR i IN 1..p_casu_objs.COUNT LOOP
253       -- no need to check parent cust_acct_site_id because this id is
254       -- passed from BO API, it guarantees the correctness of it
255       l_casu_id := p_casu_objs(i).site_use_id;
256       l_casu_os := p_casu_objs(i).orig_system;
257       l_casu_osr := p_casu_objs(i).orig_system_reference;
258 
259       -- check if pass in site_use_id and os+osr
260       hz_registry_validate_bo_pvt.validate_ssm_id(
261         px_id              => l_casu_id,
262         px_os              => l_casu_os,
263         px_osr             => l_casu_osr,
264         p_org_id           => p_casu_objs(i).org_id,
265         p_obj_type         => 'HZ_CUST_SITE_USES_ALL',
266         p_create_or_update => 'C',
267         x_return_status    => x_return_status,
268         x_msg_count        => x_msg_count,
269         x_msg_data         => x_msg_data);
270 
271       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
272         RAISE FND_API.G_EXC_ERROR;
273       END IF;
274 
275       assign_cust_site_use_rec(
276         p_cust_site_use_obj         => p_casu_objs(i),
277         p_cust_acct_site_id         => p_cas_id,
278         p_cust_site_use_id          => l_casu_id,
279         p_cust_site_use_os          => l_casu_os,
280         p_cust_site_use_osr         => l_casu_osr,
281         px_cust_site_use_rec        => l_casu_rec
282       );
283 
284       HZ_CUST_ACCOUNT_SITE_V2PUB.create_cust_site_use (
285         p_cust_site_use_rec         => l_casu_rec,
286         p_customer_profile_rec      => NULL,
287         p_create_profile            => FND_API.G_FALSE,
288         p_create_profile_amt        => FND_API.G_FALSE,
289         x_site_use_id               => l_casu_id,
290         x_return_status             => x_return_status,
291         x_msg_count                 => x_msg_count,
292         x_msg_data                  => x_msg_data
293       );
294 
295       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
296         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
297           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.create_cust_site_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
298                                  p_prefix=>l_debug_prefix,
299                                  p_msg_level=>fnd_log.level_procedure);
300         END IF;
301         RAISE FND_API.G_EXC_ERROR;
302       END IF;
303 
304       -- assign site_use_id
305       p_casu_objs(i).site_use_id := l_casu_id;
306 
307       IF(p_casu_objs(i).site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
308          p_casu_objs(i).site_use_profile_obj IS NOT NULL) THEN
309         -- check if BILL_TO, DUN or STMTS to create with profile
310         -- no need to pass cust account id since in v2api, the cust account
311         -- id will be obtained from cust site id
312         HZ_CUST_ACCT_BO_PVT.create_cust_profile(
313           p_cp_obj                    => p_casu_objs(i).site_use_profile_obj,
314           p_ca_id                     => p_ca_id,
315           p_casu_id                   => l_casu_id,
316           x_cp_id                     => l_profile_id,
317           x_return_status             => x_return_status,
318           x_msg_count                 => x_msg_count,
319           x_msg_data                  => x_msg_data
320         );
321 
322         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
323           RAISE FND_API.G_EXC_ERROR;
324         END IF;
325 
326         HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
327           p_cpa_objs                => p_casu_objs(i).site_use_profile_obj.cust_profile_amt_objs,
328           p_cp_id                   => l_profile_id,
329           p_ca_id                   => p_ca_id,
330           p_casu_id                 => l_casu_id,
331           x_return_status           => x_return_status,
332           x_msg_count               => x_msg_count,
333           x_msg_data                => x_msg_data
334         );
335 
336         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
337           RAISE FND_API.G_EXC_ERROR;
338         END IF;
339       END IF;
340 
341       ------------------------
342       -- Call bank account use
343       ------------------------
344       OPEN get_party_id(p_ca_id);
345       FETCH get_party_id INTO l_party_id;
346       CLOSE get_party_id;
347 
348       IF((p_casu_objs(i).bank_acct_use_objs IS NOT NULL) AND
349          (p_casu_objs(i).bank_acct_use_objs.COUNT > 0)) THEN
350         HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
351           p_bank_acct_use_objs => p_casu_objs(i).bank_acct_use_objs,
352           p_party_id           => l_party_id,
353           p_ca_id              => p_ca_id,
354           p_casu_id            => l_casu_id,
355           x_return_status      => x_return_status,
356           x_msg_count          => x_msg_count,
357           x_msg_data           => x_msg_data
358         );
359 
360         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
361           RAISE FND_API.G_EXC_ERROR;
362         END IF;
363       END IF;
364 
365       ------------------------
366       -- Call payment method
367       ------------------------
368       IF(p_casu_objs(i).payment_method_obj IS NOT NULL) THEN
369         HZ_CUST_ACCT_BO_PVT.create_payment_method(
370           p_payment_method_obj => p_casu_objs(i).payment_method_obj,
371           p_ca_id              => p_ca_id,
372           p_casu_id            => l_casu_id,
373           x_return_status      => x_return_status,
374           x_msg_count          => x_msg_count,
375           x_msg_data           => x_msg_data
376         );
377 
378         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
379           RAISE FND_API.G_EXC_ERROR;
380         END IF;
381       END IF;
382     END LOOP;
383 
384     -- Debug info.
385     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
386          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
387                                p_msg_data=>x_msg_data,
388                                p_msg_type=>'WARNING',
389                                p_msg_level=>fnd_log.level_exception);
390     END IF;
391     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
392         hz_utility_v2pub.debug(p_message=>'create_cust_site_uses(-)',
393                                p_prefix=>l_debug_prefix,
394                                p_msg_level=>fnd_log.level_procedure);
395     END IF;
396 
397   EXCEPTION
398     WHEN fnd_api.g_exc_error THEN
399       ROLLBACK TO create_casu_pvt;
400       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
401       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
402       FND_MSG_PUB.ADD;
403 
404       x_return_status := fnd_api.g_ret_sts_error;
405 
406       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
407                                 p_count => x_msg_count,
408                                 p_data  => x_msg_data);
409 
410       -- Debug info.
411       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
412         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
413                                p_msg_data=>x_msg_data,
414                                p_msg_type=>'ERROR',
415                                p_msg_level=>fnd_log.level_error);
416       END IF;
417       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
418         hz_utility_v2pub.debug(p_message=>'create_cust_site_uses(-)',
419                                p_prefix=>l_debug_prefix,
420                                p_msg_level=>fnd_log.level_procedure);
421       END IF;
422 
423     WHEN fnd_api.g_exc_unexpected_error THEN
424       ROLLBACK TO create_casu_pvt;
425       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
426       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
427       FND_MSG_PUB.ADD;
428 
429       x_return_status := fnd_api.g_ret_sts_unexp_error;
430 
431       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
432                                 p_count => x_msg_count,
433                                 p_data  => x_msg_data);
434 
435       -- Debug info.
436       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
437         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
438                                p_msg_data=>x_msg_data,
439                                p_msg_type=>'UNEXPECTED ERROR',
440                                p_msg_level=>fnd_log.level_error);
441       END IF;
442       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
443         hz_utility_v2pub.debug(p_message=>'create_cust_site_uses(-)',
444                                p_prefix=>l_debug_prefix,
445                                p_msg_level=>fnd_log.level_procedure);
446       END IF;
447 
448     WHEN OTHERS THEN
449       ROLLBACK TO create_casu_pvt;
450       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
451       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
452       FND_MSG_PUB.ADD;
453 
454       x_return_status := fnd_api.g_ret_sts_unexp_error;
455 
456       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
457       fnd_message.set_token('ERROR' ,SQLERRM);
458       fnd_msg_pub.add;
459 
460       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
461                                 p_count => x_msg_count,
462                                 p_data  => x_msg_data);
463 
464       -- Debug info.
465       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
466         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
467                                p_msg_data=>x_msg_data,
468                                p_msg_type=>'SQL ERROR',
469                                p_msg_level=>fnd_log.level_error);
470       END IF;
471       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
472         hz_utility_v2pub.debug(p_message=>'create_cust_site_uses(-)',
473                                p_prefix=>l_debug_prefix,
474                                p_msg_level=>fnd_log.level_procedure);
475       END IF;
476   END create_cust_site_uses;
477 
478   -- PROCEDURE save_cust_site_uses
479   --
480   -- DESCRIPTION
481   --     Create or update customer account site uses.
482   --
483   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
484   --
485   -- ARGUMENTS
486   --   IN:
487   --     p_casu_objs          List of customer account site use objects.
488   --     p_ca_id              Customer account Id.
489   --     p_cas_id             Customer account site Id.
490   --     p_parent_os          Parent original system.
491   --   OUT:
492   --     x_return_status      Return status after the call. The status can
493   --                          be fnd_api.g_ret_sts_success (success),
494   --                          fnd_api.g_ret_sts_error (error),
495   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
496   --     x_msg_count          Number of messages in message stack.
497   --     x_msg_data           Message text if x_msg_count is 1.
498   --
499   -- NOTES
500   --
501   -- MODIFICATION HISTORY
502   --
503   --   14-DEC-2004    Arnold Ng          Created.
504 
505   PROCEDURE save_cust_site_uses(
506     p_casu_objs               IN OUT NOCOPY HZ_CUST_SITE_USE_BO_TBL,
507     p_ca_id                   IN            NUMBER,
508     p_cas_id                  IN            NUMBER,
509     p_parent_os               IN            VARCHAR2,
510     x_return_status           OUT NOCOPY    VARCHAR2,
511     x_msg_count               OUT NOCOPY    NUMBER,
512     x_msg_data                OUT NOCOPY    VARCHAR2
513   )IS
514     l_debug_prefix             VARCHAR2(30) := '';
515     l_casu_id                  NUMBER;
516     l_casu_os                  VARCHAR2(30);
517     l_casu_osr                 VARCHAR2(255);
518     l_casu_rec                 HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE;
519     l_cap_rec                  HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
520     l_ovn                      NUMBER;
521     l_cap_ovn                  NUMBER;
522     l_create_update_flag       VARCHAR2(1);
523     l_profile_id               NUMBER;
524     l_party_id                 NUMBER;
525     l_site_use_code            VARCHAR2(30);
526     l_parent_id                NUMBER;
527     l_parent_obj_type          VARCHAR2(30);
528 
529     CURSOR get_cap_id(l_ca_id NUMBER, l_casu_id NUMBER, l_profile_class_id NUMBER) IS
530     SELECT cust_account_profile_id
531     FROM HZ_CUSTOMER_PROFILES
532     WHERE cust_account_id = l_ca_id
533     AND site_use_id = l_casu_id
534     AND profile_class_id = l_profile_class_id
535     AND status IN ('A','I');
536 
537     CURSOR get_ovn(l_casu_id NUMBER) IS
538     SELECT site_use_code, object_version_number
539     FROM HZ_CUST_SITE_USES
540     WHERE site_use_id = l_casu_id
541     AND status in ('A','I');
542 
543     CURSOR get_party_id(l_ca_id NUMBER) IS
544     SELECT party_id
545     FROM HZ_CUST_ACCOUNTS
546     WHERE cust_account_id = l_ca_id;
547 
548     CURSOR get_casu_id(l_cas_id NUMBER, l_su_code VARCHAR2, l_org_id NUMBER) IS
549     SELECT site_use_id
550     FROM HZ_CUST_SITE_USES_ALL
551     WHERE cust_acct_site_id = l_cas_id
552     AND site_use_code = l_su_code
553     AND status = 'A'
554     AND org_id = l_org_id
555     AND rownum = 1;
556 
557   BEGIN
558     -- Standard start of API savepoint
559     SAVEPOINT save_casu_pvt;
560 
561     -- initialize API return status to success.
562     x_return_status := FND_API.G_RET_STS_SUCCESS;
563 
564     -- Debug info.
565     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
566         hz_utility_v2pub.debug(p_message=>'save_cust_site_uses(+)',
567                                p_prefix=>l_debug_prefix,
568                                p_msg_level=>fnd_log.level_procedure);
569     END IF;
570 
571     -- Create/Update cust site uses
572     FOR i IN 1..p_casu_objs.COUNT LOOP
573       l_casu_id := p_casu_objs(i).site_use_id;
574       l_casu_os := p_casu_objs(i).orig_system;
575       l_casu_osr := p_casu_objs(i).orig_system_reference;
576 
577       IF(p_cas_id IS NOT NULL) THEN
578         l_parent_id := p_cas_id;
579         l_parent_obj_type := 'CUST_ACCT_SITE';
580 	if p_casu_objs(i).site_use_id is null and l_casu_os = 'ORACLE_AIA' -- AIA enh 7209179
581         then
582     		open get_casu_id(p_cas_id,p_casu_objs(i).site_use_code,p_casu_objs(i).org_id);
583         	fetch get_casu_id into l_casu_id;
584 		close get_casu_id;
585 		if  l_casu_id is not null
586 		then
587 			l_casu_os := null;
588       			l_casu_osr := null;
589 			l_casu_rec.site_use_id := l_casu_id;
590 	        	l_casu_rec.orig_system := null;
591 			l_casu_rec.orig_system_reference := null;
592 		end if;
593     	end if;
594       ELSE
595         l_parent_id := p_ca_id;
596         l_parent_obj_type := 'CUST_ACCT';
597       END IF;
598 
599       -- check root business object to determine that it should be
600       -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
601       l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
602                                 p_entity_id      => l_casu_id,
603                                 p_entity_os      => l_casu_os,
604                                 p_entity_osr     => l_casu_osr,
605                                 p_entity_type    => 'HZ_CUST_SITE_USES_ALL',
606                                 p_parent_id      => l_parent_id,
607                                 p_parent_obj_type=> l_parent_obj_type
608                               );
609 
610       IF(l_create_update_flag = 'E') THEN
611         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
612         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
613         FND_MSG_PUB.ADD;
614         RAISE FND_API.G_EXC_ERROR;
615       END IF;
616 
617       -- check if the cust site use record is create or update
618       -- since cust site use has os+osr, use os+osr to check if record exist or not
619       IF(l_create_update_flag = 'C') THEN
620         assign_cust_site_use_rec(
621           p_cust_site_use_obj           => p_casu_objs(i),
622           p_cust_acct_site_id           => p_cas_id,
623           p_cust_site_use_id            => l_casu_id,
624           p_cust_site_use_os            => l_casu_os,
625           p_cust_site_use_osr           => l_casu_osr,
626           px_cust_site_use_rec          => l_casu_rec
627         );
628 
629         HZ_CUST_ACCOUNT_SITE_V2PUB.create_cust_site_use (
630           p_cust_site_use_rec         => l_casu_rec,
631           p_customer_profile_rec      => NULL,
632           p_create_profile            => FND_API.G_FALSE,
633           p_create_profile_amt        => FND_API.G_FALSE,
634           x_site_use_id               => l_casu_id,
635           x_return_status             => x_return_status,
636           x_msg_count                 => x_msg_count,
637           x_msg_data                  => x_msg_data
638         );
639 
640         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
641           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
642             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_site_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
643                                    p_prefix=>l_debug_prefix,
644                                    p_msg_level=>fnd_log.level_procedure);
645           END IF;
646           RAISE fnd_api.g_exc_error;
647         END IF;
648 
649         -- assign site_use_id
650         p_casu_objs(i).site_use_id := l_casu_id;
651 
652         IF(p_casu_objs(i).site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
653            p_casu_objs(i).site_use_profile_obj IS NOT NULL) THEN
654           -- check if BILL_TO, DUN and STMTS to create with profile
655           HZ_CUST_ACCT_BO_PVT.create_cust_profile(
656             p_cp_obj                    => p_casu_objs(i).site_use_profile_obj,
657             p_ca_id                     => p_ca_id,
658             p_casu_id                   => l_casu_id,
659             x_cp_id                     => l_profile_id,
660             x_return_status             => x_return_status,
661             x_msg_count                 => x_msg_count,
662             x_msg_data                  => x_msg_data
663           );
664 
665           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
666             RAISE FND_API.G_EXC_ERROR;
667           END IF;
668 
669           HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
670             p_cpa_objs                => p_casu_objs(i).site_use_profile_obj.cust_profile_amt_objs,
671             p_cp_id                   => l_profile_id,
672             p_ca_id                   => p_ca_id,
673             p_casu_id                 => l_casu_id,
674             x_return_status           => x_return_status,
675             x_msg_count               => x_msg_count,
676             x_msg_data                => x_msg_data
677           );
678 
679           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
680             RAISE FND_API.G_EXC_ERROR;
681           END IF;
682 
683         END IF;
684 
685       ELSE
686         hz_registry_validate_bo_pvt.validate_ssm_id(
687           px_id                       => l_casu_id,
688           px_os                       => l_casu_os,
689           px_osr                      => l_casu_osr,
690           p_org_id                    => p_casu_objs(i).org_id,
691           p_obj_type                  => 'HZ_CUST_SITE_USES_ALL',
692           p_create_or_update          => 'U',
693           x_return_status             => x_return_status,
694           x_msg_count                 => x_msg_count,
695           x_msg_data                  => x_msg_data
696         );
697 
698         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
699           RAISE FND_API.G_EXC_ERROR;
700         END IF;
701 
702         OPEN get_ovn(l_casu_id);
703         FETCH get_ovn INTO l_site_use_code, l_ovn;
704         CLOSE get_ovn;
705 
706         assign_cust_site_use_rec(
707           p_cust_site_use_obj         => p_casu_objs(i),
708           p_cust_acct_site_id         => p_cas_id,
709           p_cust_site_use_id          => l_casu_id,
710           p_cust_site_use_os          => l_casu_os,
711           p_cust_site_use_osr         => l_casu_osr,
712           px_cust_site_use_rec        => l_casu_rec
713         );
714 
715         -- clean up created_by_module, os and osr for update
716         l_casu_rec.created_by_module := NULL;
717         l_casu_rec.orig_system := NULL;
718         l_casu_rec.orig_system_reference := NULL;
719         HZ_CUST_ACCOUNT_SITE_V2PUB.update_cust_site_use (
720           p_cust_site_use_rec         => l_casu_rec,
721           p_object_version_number     => l_ovn,
722           x_return_status             => x_return_status,
723           x_msg_count                 => x_msg_count,
724           x_msg_data                  => x_msg_data
725         );
726 
727         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
728           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
729             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_site_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
730                                    p_prefix=>l_debug_prefix,
731                                    p_msg_level=>fnd_log.level_procedure);
732           END IF;
733           RAISE fnd_api.g_exc_error;
734         END IF;
735 
736         -- assign site_use_id
737         p_casu_objs(i).site_use_id := l_casu_id;
738 
739         IF(l_site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
740            p_casu_objs(i).site_use_profile_obj IS NOT NULL) THEN
741           -- need to update customer profile
742           HZ_CUST_ACCT_BO_PVT.update_cust_profile(
743             p_cp_obj                  => p_casu_objs(i).site_use_profile_obj,
744             p_ca_id                   => p_ca_id,
745             p_casu_id                 => l_casu_id,
746             x_cp_id                   => l_profile_id,
747             x_return_status           => x_return_status,
748             x_msg_count               => x_msg_count,
749             x_msg_data                => x_msg_data
750           );
751 
752           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
753             RAISE FND_API.G_EXC_ERROR;
754           END IF;
755 
756           HZ_CUST_ACCT_BO_PVT.save_cust_profile_amts(
757             p_cpa_objs                => p_casu_objs(i).site_use_profile_obj.cust_profile_amt_objs,
758             p_cp_id                   => l_profile_id,
759             p_ca_id                   => p_ca_id,
760             p_casu_id                 => l_casu_id,
761             x_return_status           => x_return_status,
762             x_msg_count               => x_msg_count,
763             x_msg_data                => x_msg_data
764           );
765         END IF;
766       END IF;
767 
768       ------------------------
769       -- Call bank account use
770       ------------------------
771       OPEN get_party_id(p_ca_id);
772       FETCH get_party_id INTO l_party_id;
773       CLOSE get_party_id;
774 
775       IF((p_casu_objs(i).bank_acct_use_objs IS NOT NULL) AND
776          (p_casu_objs(i).bank_acct_use_objs.COUNT > 0)) THEN
777         HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
778           p_bank_acct_use_objs => p_casu_objs(i).bank_acct_use_objs,
779           p_party_id           => l_party_id,
780           p_ca_id              => p_ca_id,
781           p_casu_id            => l_casu_id,
782           x_return_status      => x_return_status,
783           x_msg_count          => x_msg_count,
784           x_msg_data           => x_msg_data
785         );
786 
787         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
788           RAISE FND_API.G_EXC_ERROR;
789         END IF;
790       END IF;
791 
792       ------------------------
793       -- Call payment method
794       ------------------------
795       IF(p_casu_objs(i).payment_method_obj IS NOT NULL) THEN
796         HZ_CUST_ACCT_BO_PVT.save_payment_method(
797           p_payment_method_obj => p_casu_objs(i).payment_method_obj,
798           p_ca_id              => p_ca_id,
799           p_casu_id            => l_casu_id,
800           x_return_status      => x_return_status,
801           x_msg_count          => x_msg_count,
802           x_msg_data           => x_msg_data
803         );
804 
805         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
806           RAISE FND_API.G_EXC_ERROR;
807         END IF;
808       END IF;
809 
810     END LOOP;
811 
812     -- Debug info.
813     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
814          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
815                                p_msg_data=>x_msg_data,
816                                p_msg_type=>'WARNING',
817                                p_msg_level=>fnd_log.level_exception);
818     END IF;
819     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
820         hz_utility_v2pub.debug(p_message=>'save_cust_site_uses(-)',
821                                p_prefix=>l_debug_prefix,
822                                p_msg_level=>fnd_log.level_procedure);
823     END IF;
824   EXCEPTION
825     WHEN fnd_api.g_exc_error THEN
826       ROLLBACK TO save_casu_pvt;
827       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
828       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
829       FND_MSG_PUB.ADD;
830 
831       x_return_status := fnd_api.g_ret_sts_error;
832 
833       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
834                                 p_count => x_msg_count,
835                                 p_data  => x_msg_data);
836 
837       -- Debug info.
838       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
839         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
840                                p_msg_data=>x_msg_data,
841                                p_msg_type=>'ERROR',
842                                p_msg_level=>fnd_log.level_error);
843       END IF;
844       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
845         hz_utility_v2pub.debug(p_message=>'save_cust_site_uses(-)',
846                                p_prefix=>l_debug_prefix,
847                                p_msg_level=>fnd_log.level_procedure);
848       END IF;
849 
850     WHEN fnd_api.g_exc_unexpected_error THEN
851       ROLLBACK TO save_casu_pvt;
852       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
853       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
854       FND_MSG_PUB.ADD;
855 
856       x_return_status := fnd_api.g_ret_sts_unexp_error;
857 
858       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
859                                 p_count => x_msg_count,
860                                 p_data  => x_msg_data);
861 
862       -- Debug info.
863       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
864         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
865                                p_msg_data=>x_msg_data,
866                                p_msg_type=>'UNEXPECTED ERROR',
867                                p_msg_level=>fnd_log.level_error);
868       END IF;
869       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
870         hz_utility_v2pub.debug(p_message=>'save_cust_site_uses(-)',
871                                p_prefix=>l_debug_prefix,
872                                p_msg_level=>fnd_log.level_procedure);
873       END IF;
874 
875     WHEN OTHERS THEN
876       ROLLBACK TO save_casu_pvt;
877       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
878       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
879       FND_MSG_PUB.ADD;
880 
881       x_return_status := fnd_api.g_ret_sts_unexp_error;
882 
883       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
884       fnd_message.set_token('ERROR' ,SQLERRM);
885       fnd_msg_pub.add;
886 
887       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
888                                 p_count => x_msg_count,
889                                 p_data  => x_msg_data);
890 
891       -- Debug info.
892       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
893         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
894                                p_msg_data=>x_msg_data,
895                                p_msg_type=>'SQL ERROR',
896                                p_msg_level=>fnd_log.level_error);
897       END IF;
898       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
899         hz_utility_v2pub.debug(p_message=>'save_cust_site_uses(-)',
900                                p_prefix=>l_debug_prefix,
901                                p_msg_level=>fnd_log.level_procedure);
902       END IF;
903   END save_cust_site_uses;
904 
905   -- PROCEDURE save_cust_acct_sites
906   --
907   -- DESCRIPTION
908   --     Create or update customer account sites.
909   PROCEDURE save_cust_acct_sites(
910     p_cas_objs                IN OUT NOCOPY HZ_CUST_ACCT_SITE_BO_TBL,
911     p_create_update_flag      IN            VARCHAR2,
912     p_obj_source              IN            VARCHAR2 := null,
913     x_return_status           OUT NOCOPY    VARCHAR2,
914     x_msg_count               OUT NOCOPY    NUMBER,
915     x_msg_data                OUT NOCOPY    VARCHAR2,
916     p_parent_acct_id          IN            NUMBER,
917     p_parent_acct_os          IN            VARCHAR2,
918     p_parent_acct_osr         IN            VARCHAR2
919   ) IS
920     l_debug_prefix            VARCHAR2(30) := '';
921     l_cas_id                  NUMBER;
922     l_cas_os                  VARCHAR2(30);
923     l_cas_osr                 VARCHAR2(255);
924     l_parent_acct_id          NUMBER;
925     l_parent_acct_os          VARCHAR2(30);
926     l_parent_acct_osr         VARCHAR2(255);
927     l_cbm                     VARCHAR2(30);
928   BEGIN
929     -- initialize API return status to success
930     x_return_status := FND_API.G_RET_STS_SUCCESS;
931 
932     -- Debug info.
933     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
934         hz_utility_v2pub.debug(p_message=>'save_cust_acct_sites(+)',
935                                p_prefix=>l_debug_prefix,
936                                p_msg_level=>fnd_log.level_procedure);
937     END IF;
938 
939     l_parent_acct_id := p_parent_acct_id;
940     l_parent_acct_os := p_parent_acct_os;
941     l_parent_acct_osr := p_parent_acct_osr;
942 
943     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
944 
945     IF(p_create_update_flag = 'C') THEN
946       -- Create cust account sites
947       FOR i IN 1..p_cas_objs.COUNT LOOP
948         HZ_CUST_ACCT_SITE_BO_PUB.do_create_cust_acct_site_bo(
949           p_init_msg_list           => fnd_api.g_false,
950           p_validate_bo_flag        => fnd_api.g_false,
951           p_cust_acct_site_obj      => p_cas_objs(i),
952           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
953           p_obj_source              => p_obj_source,
954           x_return_status           => x_return_status,
955           x_msg_count               => x_msg_count,
956           x_msg_data                => x_msg_data,
957           x_cust_acct_site_id       => l_cas_id,
958           x_cust_acct_site_os       => l_cas_os,
959           x_cust_acct_site_osr      => l_cas_osr,
960           px_parent_acct_id         => l_parent_acct_id,
961           px_parent_acct_os         => l_parent_acct_os,
962           px_parent_acct_osr        => l_parent_acct_osr
963         );
964 
965         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
966           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
967             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_acct_sites, parent id: '||l_parent_acct_id||' '||l_parent_acct_os||'-'||l_parent_acct_osr,
968                                    p_prefix=>l_debug_prefix,
969                                    p_msg_level=>fnd_log.level_procedure);
970           END IF;
971           RAISE fnd_api.g_exc_error;
972         END IF;
973 
974         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
975       END LOOP;
976     ELSE
977       -- Create/update cust account site
978       FOR i IN 1..p_cas_objs.COUNT LOOP
979         HZ_CUST_ACCT_SITE_BO_PUB.do_save_cust_acct_site_bo(
980           p_init_msg_list           => fnd_api.g_false,
981           p_validate_bo_flag        => fnd_api.g_false,
982           p_cust_acct_site_obj      => p_cas_objs(i),
983           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
984           p_obj_source              => p_obj_source,
985           x_return_status           => x_return_status,
986           x_msg_count               => x_msg_count,
987           x_msg_data                => x_msg_data,
988           x_cust_acct_site_id       => l_cas_id,
989           x_cust_acct_site_os       => l_cas_os,
990           x_cust_acct_site_osr      => l_cas_osr,
991           px_parent_acct_id         => l_parent_acct_id,
992           px_parent_acct_os         => l_parent_acct_os,
993           px_parent_acct_osr        => l_parent_acct_osr
994         );
995 
996         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
997           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
998             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_acct_sites, parent id: '||l_parent_acct_id||' '||l_parent_acct_os||'-'||l_parent_acct_osr,
999                                    p_prefix=>l_debug_prefix,
1000                                    p_msg_level=>fnd_log.level_procedure);
1001           END IF;
1002           RAISE fnd_api.g_exc_error;
1003         END IF;
1004 
1005         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1006       END LOOP;
1007     END IF;
1008 
1009     -- Debug info.
1010     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1011          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1012                                p_msg_data=>x_msg_data,
1013                                p_msg_type=>'WARNING',
1014                                p_msg_level=>fnd_log.level_exception);
1015     END IF;
1016     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1017         hz_utility_v2pub.debug(p_message=>'save_cust_acct_sites(-)',
1018                                p_prefix=>l_debug_prefix,
1019                                p_msg_level=>fnd_log.level_procedure);
1020     END IF;
1021   EXCEPTION
1022     WHEN fnd_api.g_exc_error THEN
1023       x_return_status := fnd_api.g_ret_sts_error;
1024 
1025       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1026                                 p_count => x_msg_count,
1027                                 p_data  => x_msg_data);
1028 
1029       -- Debug info.
1030       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1031         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1032                                p_msg_data=>x_msg_data,
1033                                p_msg_type=>'ERROR',
1034                                p_msg_level=>fnd_log.level_error);
1035       END IF;
1036       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1037         hz_utility_v2pub.debug(p_message=>'save_cust_acct_sites(-)',
1038                                p_prefix=>l_debug_prefix,
1039                                p_msg_level=>fnd_log.level_procedure);
1040       END IF;
1041     WHEN fnd_api.g_exc_unexpected_error THEN
1042       x_return_status := fnd_api.g_ret_sts_unexp_error;
1043 
1044       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1045                                 p_count => x_msg_count,
1046                                 p_data  => x_msg_data);
1047 
1048       -- Debug info.
1049       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1050         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1051                                p_msg_data=>x_msg_data,
1052                                p_msg_type=>'UNEXPECTED ERROR',
1053                                p_msg_level=>fnd_log.level_error);
1054       END IF;
1055       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1056         hz_utility_v2pub.debug(p_message=>'save_cust_acct_sites(-)',
1057                                p_prefix=>l_debug_prefix,
1058                                p_msg_level=>fnd_log.level_procedure);
1059       END IF;
1060     WHEN OTHERS THEN
1061       x_return_status := fnd_api.g_ret_sts_unexp_error;
1062 
1063       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1064       fnd_message.set_token('ERROR' ,SQLERRM);
1065       fnd_msg_pub.add;
1066 
1067       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1068                                 p_count => x_msg_count,
1069                                 p_data  => x_msg_data);
1070 
1071       -- Debug info.
1072       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1073         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1074                                p_msg_data=>x_msg_data,
1075                                p_msg_type=>'SQL ERROR',
1076                                p_msg_level=>fnd_log.level_error);
1077       END IF;
1078       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1079         hz_utility_v2pub.debug(p_message=>'save_cust_acct_sites(-)',
1080                                p_prefix=>l_debug_prefix,
1081                                p_msg_level=>fnd_log.level_procedure);
1082       END IF;
1083   END save_cust_acct_sites;
1084 
1085 -- PRIVATE PROCEDURE assign_cust_site_use_v2_rec
1086   --
1087   -- DESCRIPTION
1088   --     Assign attribute value from customer account site use object to plsql record.
1089   --
1090   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1091   --
1092   -- ARGUMENTS
1093   --   IN:
1094   --     p_cust_site_use_v2_obj  Customer account site use object.
1095   --     p_cust_acct_site_id  Customer account site Id.
1096   --     p_cust_site_use_id   Customer account site use Id.
1097   --     p_cust_site_use_os   Customer account site use original system.
1098   --     p_cust_site_use_osr  Customer account site use original system reference.
1099   --   IN/OUT:
1100   --     px_cust_site_use_rec  Customer account site use plsql record.
1101   --
1102   -- NOTES
1103   --
1104   -- MODIFICATION HISTORY
1105   --
1106   --   31-JAN-2008    vsegu          Created.
1107 
1108   PROCEDURE assign_cust_site_use_v2_rec(
1109     p_cust_site_use_v2_obj          IN            HZ_CUST_SITE_USE_V2_BO,
1110     p_cust_acct_site_id          IN            NUMBER,
1111     p_cust_site_use_id           IN            NUMBER,
1112     p_cust_site_use_os           IN            VARCHAR2,
1113     p_cust_site_use_osr          IN            VARCHAR2,
1114     px_cust_site_use_rec         IN OUT NOCOPY HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
1115   );
1116 
1117   -- PRIVATE PROCEDURE assign_cust_site_use_v2_rec
1118   --
1119   -- DESCRIPTION
1120   --     Assign attribute value from customer account site use object to plsql record.
1121   --
1122   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1123   --
1124   -- ARGUMENTS
1125   --   IN:
1126   --     p_cust_site_use_v2_obj  Customer account site use object.
1127   --     p_cust_acct_site_id  Customer account site Id.
1128   --     p_cust_site_use_id   Customer account site use Id.
1129   --     p_cust_site_use_os   Customer account site use original system.
1130   --     p_cust_site_use_osr  Customer account site use original system reference.
1131   --   IN/OUT:
1132   --     px_cust_site_use_rec  Customer account site use plsql record.
1133   --
1134   -- NOTES
1135   --
1136   -- MODIFICATION HISTORY
1137   --
1138   --   31-JAN-2008    vsegu          Created.
1139 
1140   PROCEDURE assign_cust_site_use_v2_rec(
1141     p_cust_site_use_v2_obj          IN            HZ_CUST_SITE_USE_V2_BO,
1142     p_cust_acct_site_id          IN            NUMBER,
1143     p_cust_site_use_id           IN            NUMBER,
1144     p_cust_site_use_os           IN            VARCHAR2,
1145     p_cust_site_use_osr          IN            VARCHAR2,
1146     px_cust_site_use_rec         IN OUT NOCOPY HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
1147   ) IS
1148   BEGIN
1149     px_cust_site_use_rec.site_use_id           := p_cust_site_use_id;
1150     px_cust_site_use_rec.cust_acct_site_id     := p_cust_acct_site_id;
1151     px_cust_site_use_rec.site_use_code         := p_cust_site_use_v2_obj.site_use_code;
1152     IF(p_cust_site_use_v2_obj.primary_flag in ('Y','N')) THEN
1153       px_cust_site_use_rec.primary_flag          := p_cust_site_use_v2_obj.primary_flag;
1154     END IF;
1155     IF(p_cust_site_use_v2_obj.status in ('A','I')) THEN
1156       px_cust_site_use_rec.status                := p_cust_site_use_v2_obj.status;
1157     END IF;
1158     px_cust_site_use_rec.location              := p_cust_site_use_v2_obj.location;
1159     px_cust_site_use_rec.bill_to_site_use_id   := p_cust_site_use_v2_obj.bill_to_site_use_id;
1160     px_cust_site_use_rec.sic_code              := p_cust_site_use_v2_obj.sic_code;
1161     px_cust_site_use_rec.payment_term_id       := p_cust_site_use_v2_obj.payment_term_id;
1162     IF(p_cust_site_use_v2_obj.gsa_indicator in ('Y','N')) THEN
1163       px_cust_site_use_rec.gsa_indicator         := p_cust_site_use_v2_obj.gsa_indicator;
1164     END IF;
1165     px_cust_site_use_rec.ship_partial          := p_cust_site_use_v2_obj.ship_partial;
1166     px_cust_site_use_rec.ship_via              := p_cust_site_use_v2_obj.ship_via;
1167     px_cust_site_use_rec.fob_point             := p_cust_site_use_v2_obj.fob_point;
1168     px_cust_site_use_rec.order_type_id         := p_cust_site_use_v2_obj.order_type_id;
1169     px_cust_site_use_rec.price_list_id         := p_cust_site_use_v2_obj.price_list_id;
1170     px_cust_site_use_rec.freight_term          := p_cust_site_use_v2_obj.freight_term;
1171     px_cust_site_use_rec.warehouse_id          := p_cust_site_use_v2_obj.warehouse_id;
1172     px_cust_site_use_rec.territory_id          := p_cust_site_use_v2_obj.territory_id;
1173     px_cust_site_use_rec.attribute_category    := p_cust_site_use_v2_obj.attribute_category;
1174     px_cust_site_use_rec.attribute1            := p_cust_site_use_v2_obj.attribute1;
1175     px_cust_site_use_rec.attribute2            := p_cust_site_use_v2_obj.attribute2;
1176     px_cust_site_use_rec.attribute3            := p_cust_site_use_v2_obj.attribute3;
1177     px_cust_site_use_rec.attribute4            := p_cust_site_use_v2_obj.attribute4;
1178     px_cust_site_use_rec.attribute5            := p_cust_site_use_v2_obj.attribute5;
1179     px_cust_site_use_rec.attribute6            := p_cust_site_use_v2_obj.attribute6;
1180     px_cust_site_use_rec.attribute7            := p_cust_site_use_v2_obj.attribute7;
1181     px_cust_site_use_rec.attribute8            := p_cust_site_use_v2_obj.attribute8;
1182     px_cust_site_use_rec.attribute9            := p_cust_site_use_v2_obj.attribute9;
1183     px_cust_site_use_rec.attribute10           := p_cust_site_use_v2_obj.attribute10;
1184     px_cust_site_use_rec.attribute11           := p_cust_site_use_v2_obj.attribute11;
1185     px_cust_site_use_rec.attribute12           := p_cust_site_use_v2_obj.attribute12;
1186     px_cust_site_use_rec.attribute13           := p_cust_site_use_v2_obj.attribute13;
1187     px_cust_site_use_rec.attribute14           := p_cust_site_use_v2_obj.attribute14;
1188     px_cust_site_use_rec.attribute15           := p_cust_site_use_v2_obj.attribute15;
1189     px_cust_site_use_rec.attribute16           := p_cust_site_use_v2_obj.attribute16;
1190     px_cust_site_use_rec.attribute17           := p_cust_site_use_v2_obj.attribute17;
1191     px_cust_site_use_rec.attribute18           := p_cust_site_use_v2_obj.attribute18;
1192     px_cust_site_use_rec.attribute19           := p_cust_site_use_v2_obj.attribute19;
1193     px_cust_site_use_rec.attribute20           := p_cust_site_use_v2_obj.attribute20;
1194     px_cust_site_use_rec.attribute21           := p_cust_site_use_v2_obj.attribute21;
1195     px_cust_site_use_rec.attribute22           := p_cust_site_use_v2_obj.attribute22;
1196     px_cust_site_use_rec.attribute23           := p_cust_site_use_v2_obj.attribute23;
1197     px_cust_site_use_rec.attribute24           := p_cust_site_use_v2_obj.attribute24;
1198     px_cust_site_use_rec.attribute25           := p_cust_site_use_v2_obj.attribute25;
1199     px_cust_site_use_rec.tax_reference         := p_cust_site_use_v2_obj.tax_reference;
1200     px_cust_site_use_rec.sort_priority         := p_cust_site_use_v2_obj.sort_priority;
1201     px_cust_site_use_rec.tax_code              := p_cust_site_use_v2_obj.tax_code;
1202     px_cust_site_use_rec.demand_class_code     := p_cust_site_use_v2_obj.demand_class_code;
1203     px_cust_site_use_rec.tax_header_level_flag := p_cust_site_use_v2_obj.tax_header_level_flag;
1204     px_cust_site_use_rec.tax_rounding_rule     := p_cust_site_use_v2_obj.tax_rounding_rule;
1205     px_cust_site_use_rec.global_attribute_category    := p_cust_site_use_v2_obj.global_attribute_category;
1206     px_cust_site_use_rec.global_attribute1     := p_cust_site_use_v2_obj.global_attribute1;
1207     px_cust_site_use_rec.global_attribute2     := p_cust_site_use_v2_obj.global_attribute2;
1208     px_cust_site_use_rec.global_attribute3     := p_cust_site_use_v2_obj.global_attribute3;
1209     px_cust_site_use_rec.global_attribute4     := p_cust_site_use_v2_obj.global_attribute4;
1210     px_cust_site_use_rec.global_attribute5     := p_cust_site_use_v2_obj.global_attribute5;
1211     px_cust_site_use_rec.global_attribute6     := p_cust_site_use_v2_obj.global_attribute6;
1212     px_cust_site_use_rec.global_attribute7     := p_cust_site_use_v2_obj.global_attribute7;
1213     px_cust_site_use_rec.global_attribute8     := p_cust_site_use_v2_obj.global_attribute8;
1214     px_cust_site_use_rec.global_attribute9     := p_cust_site_use_v2_obj.global_attribute9;
1215     px_cust_site_use_rec.global_attribute10    := p_cust_site_use_v2_obj.global_attribute10;
1216     px_cust_site_use_rec.global_attribute11    := p_cust_site_use_v2_obj.global_attribute11;
1217     px_cust_site_use_rec.global_attribute12    := p_cust_site_use_v2_obj.global_attribute12;
1218     px_cust_site_use_rec.global_attribute13    := p_cust_site_use_v2_obj.global_attribute13;
1219     px_cust_site_use_rec.global_attribute14    := p_cust_site_use_v2_obj.global_attribute14;
1220     px_cust_site_use_rec.global_attribute15    := p_cust_site_use_v2_obj.global_attribute15;
1221     px_cust_site_use_rec.global_attribute16    := p_cust_site_use_v2_obj.global_attribute16;
1222     px_cust_site_use_rec.global_attribute17    := p_cust_site_use_v2_obj.global_attribute17;
1223     px_cust_site_use_rec.global_attribute18    := p_cust_site_use_v2_obj.global_attribute18;
1224     px_cust_site_use_rec.global_attribute19    := p_cust_site_use_v2_obj.global_attribute19;
1225     px_cust_site_use_rec.global_attribute20    := p_cust_site_use_v2_obj.global_attribute20;
1226     px_cust_site_use_rec.primary_salesrep_id   := p_cust_site_use_v2_obj.primary_salesrep_id;
1227     px_cust_site_use_rec.finchrg_receivables_trx_id   := p_cust_site_use_v2_obj.finchrg_receivables_trx_id;
1228     px_cust_site_use_rec.dates_negative_tolerance  := p_cust_site_use_v2_obj.dates_negative_tolerance;
1229     px_cust_site_use_rec.dates_positive_tolerance  := p_cust_site_use_v2_obj.dates_positive_tolerance;
1230     px_cust_site_use_rec.date_type_preference      := p_cust_site_use_v2_obj.date_type_preference;
1231     px_cust_site_use_rec.over_shipment_tolerance   := p_cust_site_use_v2_obj.over_shipment_tolerance;
1232     px_cust_site_use_rec.under_shipment_tolerance  := p_cust_site_use_v2_obj.under_shipment_tolerance;
1233     px_cust_site_use_rec.item_cross_ref_pref   := p_cust_site_use_v2_obj.item_cross_ref_pref;
1234     px_cust_site_use_rec.over_return_tolerance := p_cust_site_use_v2_obj.over_return_tolerance;
1235     px_cust_site_use_rec.under_return_tolerance:= p_cust_site_use_v2_obj.under_return_tolerance;
1236     IF(p_cust_site_use_v2_obj.ship_sets_include_lines_flag in ('Y','N')) THEN
1237       px_cust_site_use_rec.ship_sets_include_lines_flag := p_cust_site_use_v2_obj.ship_sets_include_lines_flag;
1238     END IF;
1239     IF(p_cust_site_use_v2_obj.arrivalsets_incl_lines_flag in ('Y','N')) THEN
1240       px_cust_site_use_rec.arrivalsets_include_lines_flag := p_cust_site_use_v2_obj.arrivalsets_incl_lines_flag;
1241     END IF;
1242     IF(p_cust_site_use_v2_obj.sched_date_push_flag in ('Y','N')) THEN
1243       px_cust_site_use_rec.sched_date_push_flag  := p_cust_site_use_v2_obj.sched_date_push_flag;
1244     END IF;
1245     px_cust_site_use_rec.invoice_quantity_rule := p_cust_site_use_v2_obj.invoice_quantity_rule;
1246     px_cust_site_use_rec.pricing_event         := p_cust_site_use_v2_obj.pricing_event;
1247     px_cust_site_use_rec.gl_id_rec             := p_cust_site_use_v2_obj.gl_id_rec;
1248     px_cust_site_use_rec.gl_id_rev             := p_cust_site_use_v2_obj.gl_id_rev;
1249     px_cust_site_use_rec.gl_id_tax             := p_cust_site_use_v2_obj.gl_id_tax;
1250     px_cust_site_use_rec.gl_id_freight         := p_cust_site_use_v2_obj.gl_id_freight;
1251     px_cust_site_use_rec.gl_id_clearing        := p_cust_site_use_v2_obj.gl_id_clearing;
1252     px_cust_site_use_rec.gl_id_unbilled        := p_cust_site_use_v2_obj.gl_id_unbilled;
1253     px_cust_site_use_rec.gl_id_unearned        := p_cust_site_use_v2_obj.gl_id_unearned;
1254     px_cust_site_use_rec.gl_id_unpaid_rec      := p_cust_site_use_v2_obj.gl_id_unpaid_rec;
1255     px_cust_site_use_rec.gl_id_remittance      := p_cust_site_use_v2_obj.gl_id_remittance;
1256     px_cust_site_use_rec.gl_id_factor          := p_cust_site_use_v2_obj.gl_id_factor;
1257     px_cust_site_use_rec.tax_classification    := p_cust_site_use_v2_obj.tax_classification;
1258     px_cust_site_use_rec.orig_system           := p_cust_site_use_os;
1259     px_cust_site_use_rec.orig_system_reference := p_cust_site_use_osr;
1260     px_cust_site_use_rec.created_by_module     := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
1261     px_cust_site_use_rec.org_id                := p_cust_site_use_v2_obj.org_id;
1262   END assign_cust_site_use_v2_rec;
1263 
1264 -- PROCEDURE create_cust_site_v2_uses
1265   --
1266   -- DESCRIPTION
1267   --     Create customer account site uses.
1268   --
1269   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1270   --
1271   -- ARGUMENTS
1272   --   IN:
1273   --     p_casu_v2_objs          List of customer account site use objects.
1274   --     p_ca_id              Customer account Id.
1275   --     p_cas_id             Customer account site Id.
1276   --     p_parent_os          Parent original system.
1277   --   OUT:
1278   --     x_return_status      Return status after the call. The status can
1279   --                          be fnd_api.g_ret_sts_success (success),
1280   --                          fnd_api.g_ret_sts_error (error),
1281   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1282   --     x_msg_count          Number of messages in message stack.
1283   --     x_msg_data           Message text if x_msg_count is 1.
1284   --
1285   -- NOTES
1286   --
1287   -- MODIFICATION HISTORY
1288   --
1289   --   31-JAN-2008    vsegu          Created.
1290 
1291   PROCEDURE create_cust_site_v2_uses(
1292     p_casu_v2_objs               IN OUT NOCOPY HZ_CUST_SITE_USE_V2_BO_TBL,
1293     p_ca_id                   IN            NUMBER,
1294     p_cas_id                  IN            NUMBER,
1295     p_parent_os               IN            VARCHAR2,
1296     x_return_status           OUT NOCOPY    VARCHAR2,
1297     x_msg_count               OUT NOCOPY    NUMBER,
1298     x_msg_data                OUT NOCOPY    VARCHAR2
1299   ) IS
1300     l_debug_prefix            VARCHAR2(30) := '';
1301     l_casu_id                 NUMBER;
1302     l_casu_os                 VARCHAR2(30);
1303     l_casu_osr                VARCHAR2(255);
1304     l_casu_rec                HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE;
1305     l_cap_id                  NUMBER;
1306     l_cap_os                  VARCHAR2(30);
1307     l_cap_osr                 VARCHAR2(255);
1308     l_cap_rec                 HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
1309     l_profile_id              NUMBER;
1310     l_party_id                NUMBER;
1311 
1312     CURSOR get_party_id(l_ca_id NUMBER) IS
1313     SELECT party_id
1314     FROM HZ_CUST_ACCOUNTS
1315     WHERE cust_account_id = l_ca_id;
1316   BEGIN
1317     -- Standard start of API savepoint
1318     SAVEPOINT create_casu_v2_pvt;
1319 
1320     -- initialize API return status to success.
1321     x_return_status := FND_API.G_RET_STS_SUCCESS;
1322 
1323     -- Debug info.
1324     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1325         hz_utility_v2pub.debug(p_message=>'create_cust_site_v2_uses(+)',
1326                                p_prefix=>l_debug_prefix,
1327                                p_msg_level=>fnd_log.level_procedure);
1328     END IF;
1329 
1330     -- Create cust site use with site use profile
1331     -- HZ_CUST_ACCONT_SITE_V2PUB will create cust site use and then
1332     -- create site use profile
1333     FOR i IN 1..p_casu_v2_objs.COUNT LOOP
1334       -- no need to check parent cust_acct_site_id because this id is
1335       -- passed from BO API, it guarantees the correctness of it
1336       l_casu_id := p_casu_v2_objs(i).site_use_id;
1337       l_casu_os := p_casu_v2_objs(i).orig_system;
1338       l_casu_osr := p_casu_v2_objs(i).orig_system_reference;
1339 
1340       -- check if pass in site_use_id and os+osr
1341       hz_registry_validate_bo_pvt.validate_ssm_id(
1342         px_id              => l_casu_id,
1343         px_os              => l_casu_os,
1344         px_osr             => l_casu_osr,
1345         p_org_id           => p_casu_v2_objs(i).org_id,
1346         p_obj_type         => 'HZ_CUST_SITE_USES_ALL',
1347         p_create_or_update => 'C',
1348         x_return_status    => x_return_status,
1349         x_msg_count        => x_msg_count,
1350         x_msg_data         => x_msg_data);
1351 
1352       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1353         RAISE FND_API.G_EXC_ERROR;
1354       END IF;
1355 
1356       assign_cust_site_use_v2_rec(
1357         p_cust_site_use_v2_obj         => p_casu_v2_objs(i),
1358         p_cust_acct_site_id         => p_cas_id,
1359         p_cust_site_use_id          => l_casu_id,
1360         p_cust_site_use_os          => l_casu_os,
1361         p_cust_site_use_osr         => l_casu_osr,
1362         px_cust_site_use_rec        => l_casu_rec
1363       );
1364 
1365       HZ_CUST_ACCOUNT_SITE_V2PUB.create_cust_site_use (
1366         p_cust_site_use_rec         => l_casu_rec,
1367         p_customer_profile_rec      => NULL,
1368         p_create_profile            => FND_API.G_FALSE,
1369         p_create_profile_amt        => FND_API.G_FALSE,
1370         x_site_use_id               => l_casu_id,
1371         x_return_status             => x_return_status,
1372         x_msg_count                 => x_msg_count,
1373         x_msg_data                  => x_msg_data
1374       );
1375 
1376       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1377         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1378           hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.create_cust_site_v2_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
1379                                  p_prefix=>l_debug_prefix,
1380                                  p_msg_level=>fnd_log.level_procedure);
1381         END IF;
1382         RAISE FND_API.G_EXC_ERROR;
1383       END IF;
1384 
1385       -- assign site_use_id
1386       p_casu_v2_objs(i).site_use_id := l_casu_id;
1387 
1388       IF(p_casu_v2_objs(i).site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
1389          p_casu_v2_objs(i).site_use_profile_obj IS NOT NULL) THEN
1390         -- check if BILL_TO, DUN or STMTS to create with profile
1391         -- no need to pass cust account id since in v2api, the cust account
1392         -- id will be obtained from cust site id
1393         HZ_CUST_ACCT_BO_PVT.create_cust_profile(
1394           p_cp_obj                    => p_casu_v2_objs(i).site_use_profile_obj,
1395           p_ca_id                     => p_ca_id,
1396           p_casu_id                   => l_casu_id,
1397           x_cp_id                     => l_profile_id,
1398           x_return_status             => x_return_status,
1399           x_msg_count                 => x_msg_count,
1400           x_msg_data                  => x_msg_data
1401         );
1402 
1403         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1404           RAISE FND_API.G_EXC_ERROR;
1405         END IF;
1406 
1407         HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
1408           p_cpa_objs                => p_casu_v2_objs(i).site_use_profile_obj.cust_profile_amt_objs,
1409           p_cp_id                   => l_profile_id,
1410           p_ca_id                   => p_ca_id,
1411           p_casu_id                 => l_casu_id,
1412           x_return_status           => x_return_status,
1413           x_msg_count               => x_msg_count,
1414           x_msg_data                => x_msg_data
1415         );
1416 
1417         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1418           RAISE FND_API.G_EXC_ERROR;
1419         END IF;
1420       END IF;
1421 
1422       ------------------------
1423       -- Call bank account use
1424       ------------------------
1425       OPEN get_party_id(p_ca_id);
1426       FETCH get_party_id INTO l_party_id;
1427       CLOSE get_party_id;
1428 
1429       IF((p_casu_v2_objs(i).bank_acct_use_objs IS NOT NULL) AND
1430          (p_casu_v2_objs(i).bank_acct_use_objs.COUNT > 0)) THEN
1431         HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
1432           p_bank_acct_use_objs => p_casu_v2_objs(i).bank_acct_use_objs,
1433           p_party_id           => l_party_id,
1434           p_ca_id              => p_ca_id,
1435           p_casu_id            => l_casu_id,
1436           x_return_status      => x_return_status,
1437           x_msg_count          => x_msg_count,
1438           x_msg_data           => x_msg_data
1439         );
1440 
1441         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1442           RAISE FND_API.G_EXC_ERROR;
1443         END IF;
1444       END IF;
1445 
1446       ------------------------
1447       -- Call payment method
1448       ------------------------
1449       IF((p_casu_v2_objs(i).payment_method_objs IS NOT NULL) AND
1450           (p_casu_v2_objs(i).payment_method_objs.COUNT > 0)) THEN
1451         HZ_CUST_ACCT_BO_PVT.create_payment_methods(
1452           p_payment_method_objs => p_casu_v2_objs(i).payment_method_objs,
1453           p_ca_id              => p_ca_id,
1454           p_casu_id            => l_casu_id,
1455           x_return_status      => x_return_status,
1456           x_msg_count          => x_msg_count,
1457           x_msg_data           => x_msg_data
1458         );
1459 
1460         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1461           RAISE FND_API.G_EXC_ERROR;
1462         END IF;
1463       END IF;
1464     END LOOP;
1465 
1466     -- Debug info.
1467     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1468          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1469                                p_msg_data=>x_msg_data,
1470                                p_msg_type=>'WARNING',
1471                                p_msg_level=>fnd_log.level_exception);
1472     END IF;
1473     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1474         hz_utility_v2pub.debug(p_message=>'create_cust_site_v2_uses(-)',
1475                                p_prefix=>l_debug_prefix,
1476                                p_msg_level=>fnd_log.level_procedure);
1477     END IF;
1478 
1479   EXCEPTION
1480     WHEN fnd_api.g_exc_error THEN
1481       ROLLBACK TO create_casu_v2_pvt;
1482       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1483       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1484       FND_MSG_PUB.ADD;
1485 
1486       x_return_status := fnd_api.g_ret_sts_error;
1487 
1488       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1489                                 p_count => x_msg_count,
1490                                 p_data  => x_msg_data);
1491 
1492       -- Debug info.
1493       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1494         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1495                                p_msg_data=>x_msg_data,
1496                                p_msg_type=>'ERROR',
1497                                p_msg_level=>fnd_log.level_error);
1498       END IF;
1499       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1500         hz_utility_v2pub.debug(p_message=>'create_cust_site_v2_uses(-)',
1501                                p_prefix=>l_debug_prefix,
1502                                p_msg_level=>fnd_log.level_procedure);
1503       END IF;
1504 
1505     WHEN fnd_api.g_exc_unexpected_error THEN
1506       ROLLBACK TO create_casu_v2_pvt;
1507       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1508       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1509       FND_MSG_PUB.ADD;
1510 
1511       x_return_status := fnd_api.g_ret_sts_unexp_error;
1512 
1513       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1514                                 p_count => x_msg_count,
1515                                 p_data  => x_msg_data);
1516 
1517       -- Debug info.
1518       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1519         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1520                                p_msg_data=>x_msg_data,
1521                                p_msg_type=>'UNEXPECTED ERROR',
1522                                p_msg_level=>fnd_log.level_error);
1523       END IF;
1524       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1525         hz_utility_v2pub.debug(p_message=>'create_cust_site_v2_uses(-)',
1526                                p_prefix=>l_debug_prefix,
1527                                p_msg_level=>fnd_log.level_procedure);
1528       END IF;
1529 
1530     WHEN OTHERS THEN
1531       ROLLBACK TO create_casu_v2_pvt;
1532       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1533       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1534       FND_MSG_PUB.ADD;
1535 
1536       x_return_status := fnd_api.g_ret_sts_unexp_error;
1537 
1538       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1539       fnd_message.set_token('ERROR' ,SQLERRM);
1540       fnd_msg_pub.add;
1541 
1542       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1543                                 p_count => x_msg_count,
1544                                 p_data  => x_msg_data);
1545 
1546       -- Debug info.
1547       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1548         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1549                                p_msg_data=>x_msg_data,
1550                                p_msg_type=>'SQL ERROR',
1551                                p_msg_level=>fnd_log.level_error);
1552       END IF;
1553       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1554         hz_utility_v2pub.debug(p_message=>'create_cust_site_v2_uses(-)',
1555                                p_prefix=>l_debug_prefix,
1556                                p_msg_level=>fnd_log.level_procedure);
1557       END IF;
1558   END create_cust_site_v2_uses;
1559 
1560 -- PROCEDURE save_cust_site_v2_uses
1561   --
1562   -- DESCRIPTION
1563   --     Create or update customer account site uses.
1564   --
1565   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1566   --
1567   -- ARGUMENTS
1568   --   IN:
1569   --     p_casu_v2_objs          List of customer account site use objects.
1570   --     p_ca_id              Customer account Id.
1571   --     p_cas_id             Customer account site Id.
1572   --     p_parent_os          Parent original system.
1573   --   OUT:
1574   --     x_return_status      Return status after the call. The status can
1575   --                          be fnd_api.g_ret_sts_success (success),
1576   --                          fnd_api.g_ret_sts_error (error),
1577   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1578   --     x_msg_count          Number of messages in message stack.
1579   --     x_msg_data           Message text if x_msg_count is 1.
1580   --
1581   -- NOTES
1582   --
1583   -- MODIFICATION HISTORY
1584   --
1585   --   31-JAN-2008    vsegu          Created.
1586 
1587   PROCEDURE save_cust_site_v2_uses(
1588     p_casu_v2_objs               IN OUT NOCOPY HZ_CUST_SITE_USE_V2_BO_TBL,
1589     p_ca_id                   IN            NUMBER,
1590     p_cas_id                  IN            NUMBER,
1591     p_parent_os               IN            VARCHAR2,
1592     x_return_status           OUT NOCOPY    VARCHAR2,
1593     x_msg_count               OUT NOCOPY    NUMBER,
1594     x_msg_data                OUT NOCOPY    VARCHAR2
1595   )IS
1596     l_debug_prefix             VARCHAR2(30) := '';
1597     l_casu_id                  NUMBER;
1598     l_casu_os                  VARCHAR2(30);
1599     l_casu_osr                 VARCHAR2(255);
1600     l_casu_rec                 HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE;
1601     l_cap_rec                  HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE;
1602     l_ovn                      NUMBER;
1603     l_cap_ovn                  NUMBER;
1604     l_create_update_flag       VARCHAR2(1);
1605     l_profile_id               NUMBER;
1606     l_party_id                 NUMBER;
1607     l_site_use_code            VARCHAR2(30);
1608     l_parent_id                NUMBER;
1609     l_parent_obj_type          VARCHAR2(30);
1610 
1611     CURSOR get_cap_id(l_ca_id NUMBER, l_casu_id NUMBER, l_profile_class_id NUMBER) IS
1612     SELECT cust_account_profile_id
1613     FROM HZ_CUSTOMER_PROFILES
1614     WHERE cust_account_id = l_ca_id
1615     AND site_use_id = l_casu_id
1616     AND profile_class_id = l_profile_class_id
1617     AND status IN ('A','I');
1618 
1619     CURSOR get_ovn(l_casu_id NUMBER) IS
1620     SELECT site_use_code, object_version_number
1621     FROM HZ_CUST_SITE_USES
1622     WHERE site_use_id = l_casu_id
1623     AND status in ('A','I');
1624 
1625     CURSOR get_party_id(l_ca_id NUMBER) IS
1626     SELECT party_id
1627     FROM HZ_CUST_ACCOUNTS
1628     WHERE cust_account_id = l_ca_id;
1629   BEGIN
1630     -- Standard start of API savepoint
1631     SAVEPOINT save_casu_v2_pvt;
1632 
1633     -- initialize API return status to success.
1634     x_return_status := FND_API.G_RET_STS_SUCCESS;
1635 
1636     -- Debug info.
1637     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1638         hz_utility_v2pub.debug(p_message=>'save_cust_site_v2_uses(+)',
1639                                p_prefix=>l_debug_prefix,
1640                                p_msg_level=>fnd_log.level_procedure);
1641     END IF;
1642 
1643     -- Create/Update cust site uses
1644     FOR i IN 1..p_casu_v2_objs.COUNT LOOP
1645       l_casu_id := p_casu_v2_objs(i).site_use_id;
1646       l_casu_os := p_casu_v2_objs(i).orig_system;
1647       l_casu_osr := p_casu_v2_objs(i).orig_system_reference;
1648 
1649       IF(p_cas_id IS NOT NULL) THEN
1650         l_parent_id := p_cas_id;
1651         l_parent_obj_type := 'CUST_ACCT_SITE';
1652       ELSE
1653         l_parent_id := p_ca_id;
1654         l_parent_obj_type := 'CUST_ACCT';
1655       END IF;
1656 
1657       -- check root business object to determine that it should be
1658       -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
1659       l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
1660                                 p_entity_id      => l_casu_id,
1661                                 p_entity_os      => l_casu_os,
1662                                 p_entity_osr     => l_casu_osr,
1663                                 p_entity_type    => 'HZ_CUST_SITE_USES_ALL',
1664                                 p_parent_id      => l_parent_id,
1665                                 p_parent_obj_type=> l_parent_obj_type
1666                               );
1667 
1668       IF(l_create_update_flag = 'E') THEN
1669         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1670         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1671         FND_MSG_PUB.ADD;
1672         RAISE FND_API.G_EXC_ERROR;
1673       END IF;
1674 
1675       -- check if the cust site use record is create or update
1676       -- since cust site use has os+osr, use os+osr to check if record exist or not
1677       IF(l_create_update_flag = 'C') THEN
1678         assign_cust_site_use_v2_rec(
1679           p_cust_site_use_v2_obj           => p_casu_v2_objs(i),
1680           p_cust_acct_site_id           => p_cas_id,
1681           p_cust_site_use_id            => l_casu_id,
1682           p_cust_site_use_os            => l_casu_os,
1683           p_cust_site_use_osr           => l_casu_osr,
1684           px_cust_site_use_rec          => l_casu_rec
1685         );
1686 
1687         HZ_CUST_ACCOUNT_SITE_V2PUB.create_cust_site_use (
1688           p_cust_site_use_rec         => l_casu_rec,
1689           p_customer_profile_rec      => NULL,
1690           p_create_profile            => FND_API.G_FALSE,
1691           p_create_profile_amt        => FND_API.G_FALSE,
1692           x_site_use_id               => l_casu_id,
1693           x_return_status             => x_return_status,
1694           x_msg_count                 => x_msg_count,
1695           x_msg_data                  => x_msg_data
1696         );
1697 
1698         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1699           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1700             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_site_v2_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
1701                                    p_prefix=>l_debug_prefix,
1702                                    p_msg_level=>fnd_log.level_procedure);
1703           END IF;
1704           RAISE fnd_api.g_exc_error;
1705         END IF;
1706 
1707         -- assign site_use_id
1708         p_casu_v2_objs(i).site_use_id := l_casu_id;
1709 
1710         IF(p_casu_v2_objs(i).site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
1711            p_casu_v2_objs(i).site_use_profile_obj IS NOT NULL) THEN
1712           -- check if BILL_TO, DUN and STMTS to create with profile
1713           HZ_CUST_ACCT_BO_PVT.create_cust_profile(
1714             p_cp_obj                    => p_casu_v2_objs(i).site_use_profile_obj,
1715             p_ca_id                     => p_ca_id,
1716             p_casu_id                   => l_casu_id,
1717             x_cp_id                     => l_profile_id,
1718             x_return_status             => x_return_status,
1719             x_msg_count                 => x_msg_count,
1720             x_msg_data                  => x_msg_data
1721           );
1722 
1723           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1724             RAISE FND_API.G_EXC_ERROR;
1725           END IF;
1726 
1727           HZ_CUST_ACCT_BO_PVT.create_cust_profile_amts(
1728             p_cpa_objs                => p_casu_v2_objs(i).site_use_profile_obj.cust_profile_amt_objs,
1729             p_cp_id                   => l_profile_id,
1730             p_ca_id                   => p_ca_id,
1731             p_casu_id                 => l_casu_id,
1732             x_return_status           => x_return_status,
1733             x_msg_count               => x_msg_count,
1734             x_msg_data                => x_msg_data
1735           );
1736 
1737           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1738             RAISE FND_API.G_EXC_ERROR;
1739           END IF;
1740 
1741         END IF;
1742 
1743       ELSE
1744         hz_registry_validate_bo_pvt.validate_ssm_id(
1745           px_id                       => l_casu_id,
1746           px_os                       => l_casu_os,
1747           px_osr                      => l_casu_osr,
1748           p_org_id                    => p_casu_v2_objs(i).org_id,
1749           p_obj_type                  => 'HZ_CUST_SITE_USES_ALL',
1750           p_create_or_update          => 'U',
1751           x_return_status             => x_return_status,
1752           x_msg_count                 => x_msg_count,
1753           x_msg_data                  => x_msg_data
1754         );
1755 
1756         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1757           RAISE FND_API.G_EXC_ERROR;
1758         END IF;
1759 
1760         OPEN get_ovn(l_casu_id);
1761         FETCH get_ovn INTO l_site_use_code, l_ovn;
1762         CLOSE get_ovn;
1763 
1764         assign_cust_site_use_v2_rec(
1765           p_cust_site_use_v2_obj         => p_casu_v2_objs(i),
1766           p_cust_acct_site_id         => p_cas_id,
1767           p_cust_site_use_id          => l_casu_id,
1768           p_cust_site_use_os          => l_casu_os,
1769           p_cust_site_use_osr         => l_casu_osr,
1770           px_cust_site_use_rec        => l_casu_rec
1771         );
1772 
1773         -- clean up created_by_module, os and osr for update
1774         l_casu_rec.created_by_module := NULL;
1775         l_casu_rec.orig_system := NULL;
1776         l_casu_rec.orig_system_reference := NULL;
1777         HZ_CUST_ACCOUNT_SITE_V2PUB.update_cust_site_use (
1778           p_cust_site_use_rec         => l_casu_rec,
1779           p_object_version_number     => l_ovn,
1780           x_return_status             => x_return_status,
1781           x_msg_count                 => x_msg_count,
1782           x_msg_data                  => x_msg_data
1783         );
1784 
1785         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1786           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1787             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_site_v2_uses, acct_site_id: '||p_cas_id||' , cust_acct_site_os: '||l_casu_os||' , cust_acct_site_osr: '||l_casu_osr,
1788                                    p_prefix=>l_debug_prefix,
1789                                    p_msg_level=>fnd_log.level_procedure);
1790           END IF;
1791           RAISE fnd_api.g_exc_error;
1792         END IF;
1793 
1794         -- assign site_use_id
1795         p_casu_v2_objs(i).site_use_id := l_casu_id;
1796 
1797         IF(l_site_use_code in ('BILL_TO', 'DUN', 'STMTS') AND
1798            p_casu_v2_objs(i).site_use_profile_obj IS NOT NULL) THEN
1799           -- need to update customer profile
1800           HZ_CUST_ACCT_BO_PVT.update_cust_profile(
1801             p_cp_obj                  => p_casu_v2_objs(i).site_use_profile_obj,
1802             p_ca_id                   => p_ca_id,
1803             p_casu_id                 => l_casu_id,
1804             x_cp_id                   => l_profile_id,
1805             x_return_status           => x_return_status,
1806             x_msg_count               => x_msg_count,
1807             x_msg_data                => x_msg_data
1808           );
1809 
1810           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1811             RAISE FND_API.G_EXC_ERROR;
1812           END IF;
1813 
1814           HZ_CUST_ACCT_BO_PVT.save_cust_profile_amts(
1815             p_cpa_objs                => p_casu_v2_objs(i).site_use_profile_obj.cust_profile_amt_objs,
1816             p_cp_id                   => l_profile_id,
1817             p_ca_id                   => p_ca_id,
1818             p_casu_id                 => l_casu_id,
1819             x_return_status           => x_return_status,
1820             x_msg_count               => x_msg_count,
1821             x_msg_data                => x_msg_data
1822           );
1823         END IF;
1824       END IF;
1825 
1826       ------------------------
1827       -- Call bank account use
1828       ------------------------
1829       OPEN get_party_id(p_ca_id);
1830       FETCH get_party_id INTO l_party_id;
1831       CLOSE get_party_id;
1832 
1833       IF((p_casu_v2_objs(i).bank_acct_use_objs IS NOT NULL) AND
1834          (p_casu_v2_objs(i).bank_acct_use_objs.COUNT > 0)) THEN
1835         HZ_CUST_ACCT_BO_PVT.save_bank_acct_uses(
1836           p_bank_acct_use_objs => p_casu_v2_objs(i).bank_acct_use_objs,
1837           p_party_id           => l_party_id,
1838           p_ca_id              => p_ca_id,
1839           p_casu_id            => l_casu_id,
1840           x_return_status      => x_return_status,
1841           x_msg_count          => x_msg_count,
1842           x_msg_data           => x_msg_data
1843         );
1844 
1845         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1846           RAISE FND_API.G_EXC_ERROR;
1847         END IF;
1848       END IF;
1849 
1850       ------------------------
1851       -- Call payment method
1852       ------------------------
1853       IF((p_casu_v2_objs(i).payment_method_objs IS NOT NULL) AND
1854           (p_casu_v2_objs(i).payment_method_objs.COUNT > 0 )) THEN
1855         HZ_CUST_ACCT_BO_PVT.save_payment_methods(
1856           p_payment_method_objs => p_casu_v2_objs(i).payment_method_objs,
1857           p_ca_id              => p_ca_id,
1858           p_casu_id            => l_casu_id,
1859           x_return_status      => x_return_status,
1860           x_msg_count          => x_msg_count,
1861           x_msg_data           => x_msg_data
1862         );
1863 
1864         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1865           RAISE FND_API.G_EXC_ERROR;
1866         END IF;
1867       END IF;
1868 
1869     END LOOP;
1870 
1871     -- Debug info.
1872     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1873          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1874                                p_msg_data=>x_msg_data,
1875                                p_msg_type=>'WARNING',
1876                                p_msg_level=>fnd_log.level_exception);
1877     END IF;
1878     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1879         hz_utility_v2pub.debug(p_message=>'save_cust_site_v2_uses(-)',
1880                                p_prefix=>l_debug_prefix,
1881                                p_msg_level=>fnd_log.level_procedure);
1882     END IF;
1883   EXCEPTION
1884     WHEN fnd_api.g_exc_error THEN
1885       ROLLBACK TO save_casu_v2_pvt;
1886       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1887       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1888       FND_MSG_PUB.ADD;
1889 
1890       x_return_status := fnd_api.g_ret_sts_error;
1891 
1892       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1893                                 p_count => x_msg_count,
1894                                 p_data  => x_msg_data);
1895 
1896       -- Debug info.
1897       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1898         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1899                                p_msg_data=>x_msg_data,
1900                                p_msg_type=>'ERROR',
1901                                p_msg_level=>fnd_log.level_error);
1902       END IF;
1903       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1904         hz_utility_v2pub.debug(p_message=>'save_cust_site_v2_uses(-)',
1905                                p_prefix=>l_debug_prefix,
1906                                p_msg_level=>fnd_log.level_procedure);
1907       END IF;
1908 
1909     WHEN fnd_api.g_exc_unexpected_error THEN
1910       ROLLBACK TO save_casu_v2_pvt;
1911       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1912       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1913       FND_MSG_PUB.ADD;
1914 
1915       x_return_status := fnd_api.g_ret_sts_unexp_error;
1916 
1917       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1918                                 p_count => x_msg_count,
1919                                 p_data  => x_msg_data);
1920 
1921       -- Debug info.
1922       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1923         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1924                                p_msg_data=>x_msg_data,
1925                                p_msg_type=>'UNEXPECTED ERROR',
1926                                p_msg_level=>fnd_log.level_error);
1927       END IF;
1928       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1929         hz_utility_v2pub.debug(p_message=>'save_cust_site_v2_uses(-)',
1930                                p_prefix=>l_debug_prefix,
1931                                p_msg_level=>fnd_log.level_procedure);
1932       END IF;
1933 
1934     WHEN OTHERS THEN
1935       ROLLBACK TO save_casu_v2_pvt;
1936       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
1937       FND_MESSAGE.SET_TOKEN('STRUCTURE', 'CUST_ACCT_SITE_USE');
1938       FND_MSG_PUB.ADD;
1939 
1940       x_return_status := fnd_api.g_ret_sts_unexp_error;
1941 
1942       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1943       fnd_message.set_token('ERROR' ,SQLERRM);
1944       fnd_msg_pub.add;
1945 
1946       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1947                                 p_count => x_msg_count,
1948                                 p_data  => x_msg_data);
1949 
1950       -- Debug info.
1951       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1952         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1953                                p_msg_data=>x_msg_data,
1954                                p_msg_type=>'SQL ERROR',
1955                                p_msg_level=>fnd_log.level_error);
1956       END IF;
1957       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1958         hz_utility_v2pub.debug(p_message=>'save_cust_site_v2_uses(-)',
1959                                p_prefix=>l_debug_prefix,
1960                                p_msg_level=>fnd_log.level_procedure);
1961       END IF;
1962   END save_cust_site_v2_uses;
1963 
1964   -- PROCEDURE save_cust_acct_v2_sites
1965   --
1966   -- DESCRIPTION
1967   --     Create or update customer account sites.
1968   PROCEDURE save_cust_acct_v2_sites(
1969     p_cas_v2_objs                IN OUT NOCOPY HZ_CUST_ACCT_SITE_V2_BO_TBL,
1970     p_create_update_flag      IN            VARCHAR2,
1971     p_obj_source              IN            VARCHAR2 := null,
1972     x_return_status           OUT NOCOPY    VARCHAR2,
1973     x_msg_count               OUT NOCOPY    NUMBER,
1974     x_msg_data                OUT NOCOPY    VARCHAR2,
1975     p_parent_acct_id          IN            NUMBER,
1976     p_parent_acct_os          IN            VARCHAR2,
1977     p_parent_acct_osr         IN            VARCHAR2
1978   ) IS
1979     l_debug_prefix            VARCHAR2(30) := '';
1980     l_cas_id                  NUMBER;
1981     l_cas_os                  VARCHAR2(30);
1982     l_cas_osr                 VARCHAR2(255);
1983     l_parent_acct_id          NUMBER;
1984     l_parent_acct_os          VARCHAR2(30);
1985     l_parent_acct_osr         VARCHAR2(255);
1986     l_cbm                     VARCHAR2(30);
1987   BEGIN
1988     -- initialize API return status to success
1989     x_return_status := FND_API.G_RET_STS_SUCCESS;
1990 
1991     -- Debug info.
1992     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1993         hz_utility_v2pub.debug(p_message=>'save_cust_acct_v2_sites(+)',
1994                                p_prefix=>l_debug_prefix,
1995                                p_msg_level=>fnd_log.level_procedure);
1996     END IF;
1997 
1998     l_parent_acct_id := p_parent_acct_id;
1999     l_parent_acct_os := p_parent_acct_os;
2000     l_parent_acct_osr := p_parent_acct_osr;
2001 
2002     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
2003 
2004     IF(p_create_update_flag = 'C') THEN
2005       -- Create cust account sites
2006       FOR i IN 1..p_cas_v2_objs.COUNT LOOP
2007         HZ_CUST_ACCT_SITE_BO_PUB.do_create_cust_acct_site_v2_bo(
2008           p_init_msg_list           => fnd_api.g_false,
2009           p_validate_bo_flag        => fnd_api.g_false,
2010           p_cust_acct_site_v2_obj      => p_cas_v2_objs(i),
2011           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
2012           p_obj_source              => p_obj_source,
2013           x_return_status           => x_return_status,
2014           x_msg_count               => x_msg_count,
2015           x_msg_data                => x_msg_data,
2016           x_cust_acct_site_id       => l_cas_id,
2017           x_cust_acct_site_os       => l_cas_os,
2018           x_cust_acct_site_osr      => l_cas_osr,
2019           px_parent_acct_id         => l_parent_acct_id,
2020           px_parent_acct_os         => l_parent_acct_os,
2021           px_parent_acct_osr        => l_parent_acct_osr
2022         );
2023 
2024         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2025           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2026             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_acct_v2_sites, parent id: '||l_parent_acct_id||' '||l_parent_acct_os||'-'||l_parent_acct_osr,
2027                                    p_prefix=>l_debug_prefix,
2028                                    p_msg_level=>fnd_log.level_procedure);
2029           END IF;
2030           RAISE fnd_api.g_exc_error;
2031         END IF;
2032 
2033         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2034       END LOOP;
2035     ELSE
2036       -- Create/update cust account site
2037       FOR i IN 1..p_cas_v2_objs.COUNT LOOP
2038         HZ_CUST_ACCT_SITE_BO_PUB.do_save_cust_acct_site_v2_bo(
2039           p_init_msg_list           => fnd_api.g_false,
2040           p_validate_bo_flag        => fnd_api.g_false,
2041           p_cust_acct_site_v2_obj      => p_cas_v2_objs(i),
2042           p_created_by_module       => HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE,
2043           p_obj_source              => p_obj_source,
2044           x_return_status           => x_return_status,
2045           x_msg_count               => x_msg_count,
2046           x_msg_data                => x_msg_data,
2047           x_cust_acct_site_id       => l_cas_id,
2048           x_cust_acct_site_os       => l_cas_os,
2049           x_cust_acct_site_osr      => l_cas_osr,
2050           px_parent_acct_id         => l_parent_acct_id,
2051           px_parent_acct_os         => l_parent_acct_os,
2052           px_parent_acct_osr        => l_parent_acct_osr
2053         );
2054 
2055         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2056           IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2057             hz_utility_v2pub.debug(p_message=>'Error occurred at hz_cust_acct_site_bo_pvt.save_cust_acct_v2_sites, parent id: '||l_parent_acct_id||' '||l_parent_acct_os||'-'||l_parent_acct_osr,
2058                                    p_prefix=>l_debug_prefix,
2059                                    p_msg_level=>fnd_log.level_procedure);
2060           END IF;
2061           RAISE fnd_api.g_exc_error;
2062         END IF;
2063 
2064         HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
2065       END LOOP;
2066     END IF;
2067 
2068     -- Debug info.
2069     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2070          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2071                                p_msg_data=>x_msg_data,
2072                                p_msg_type=>'WARNING',
2073                                p_msg_level=>fnd_log.level_exception);
2074     END IF;
2075     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2076         hz_utility_v2pub.debug(p_message=>'save_cust_acct_v2_sites(-)',
2077                                p_prefix=>l_debug_prefix,
2078                                p_msg_level=>fnd_log.level_procedure);
2079     END IF;
2080   EXCEPTION
2081     WHEN fnd_api.g_exc_error THEN
2082       x_return_status := fnd_api.g_ret_sts_error;
2083 
2084       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2085                                 p_count => x_msg_count,
2086                                 p_data  => x_msg_data);
2087 
2088       -- Debug info.
2089       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2090         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2091                                p_msg_data=>x_msg_data,
2092                                p_msg_type=>'ERROR',
2093                                p_msg_level=>fnd_log.level_error);
2094       END IF;
2095       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2096         hz_utility_v2pub.debug(p_message=>'save_cust_acct_v2_sites(-)',
2097                                p_prefix=>l_debug_prefix,
2098                                p_msg_level=>fnd_log.level_procedure);
2099       END IF;
2100     WHEN fnd_api.g_exc_unexpected_error THEN
2101       x_return_status := fnd_api.g_ret_sts_unexp_error;
2102 
2103       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2104                                 p_count => x_msg_count,
2105                                 p_data  => x_msg_data);
2106 
2107       -- Debug info.
2108       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2109         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2110                                p_msg_data=>x_msg_data,
2111                                p_msg_type=>'UNEXPECTED ERROR',
2112                                p_msg_level=>fnd_log.level_error);
2113       END IF;
2114       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2115         hz_utility_v2pub.debug(p_message=>'save_cust_acct_v2_sites(-)',
2116                                p_prefix=>l_debug_prefix,
2117                                p_msg_level=>fnd_log.level_procedure);
2118       END IF;
2119     WHEN OTHERS THEN
2120       x_return_status := fnd_api.g_ret_sts_unexp_error;
2121 
2122       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2123       fnd_message.set_token('ERROR' ,SQLERRM);
2124       fnd_msg_pub.add;
2125 
2126       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2127                                 p_count => x_msg_count,
2128                                 p_data  => x_msg_data);
2129 
2130       -- Debug info.
2131       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2132         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2133                                p_msg_data=>x_msg_data,
2134                                p_msg_type=>'SQL ERROR',
2135                                p_msg_level=>fnd_log.level_error);
2136       END IF;
2137       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2138         hz_utility_v2pub.debug(p_message=>'save_cust_acct_v2_sites(-)',
2139                                p_prefix=>l_debug_prefix,
2140                                p_msg_level=>fnd_log.level_procedure);
2141       END IF;
2142   END save_cust_acct_v2_sites;
2143 
2144 END hz_cust_acct_site_bo_pvt;