DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_CUST_ACCT_BO_PUB

Source


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