[Home] [Help]
PACKAGE BODY: APPS.XNB_BILL_SUMMARIES_PKG
Source
1 PACKAGE BODY XNB_BILL_SUMMARIES_PKG as
2 /* $Header: XNBTBSB.pls 120.0 2005/05/30 13:45:26 appldev noship $ */
3
4 -- Start of Comments
5 -- Package name : XNB_BILL_SUMMARIES_PKG
6 -- Purpose : Defines public APIs to insert/update records into XNB BILL SUMMARIES schema
7 -- NOTE :
8 -- History :
9 -- DATE AUTHOR COMMENTS
10 -- 24-Aug-2004 dbhagat Create table handler
11 -- 04-Feb-2005 DPUTHIYE Added p_api_version parameter to APIs. (Fixed bug 4159395).
12 -- 14-Apr-2005 dbhagat Removed Bill Cycle End Date a mandatory for update. (Fixed bug 4300093).
13 -- End of Comments
14
15 G_PKG_NAME CONSTANT VARCHAR2(30):= 'XNB_BILL_SUMMARIES_PKG';
16 G_FILE_NAME CONSTANT VARCHAR2(12) := 'xnbtbsb.pls';
17
18
19 -- Start of comments
20 -- API name : Insert_Row_Batch
21 -- Type : Public
22 -- Pre-reqs : None.
23 -- Function : Inserts the given bill summary rows into the XNB table
24 -- . XNB_BILL_SUMMARIES
25 -- Assumptions :
26 -- All records whose
27 -- 1. Account Number must exit in eBusiness suite database schema
28 -- HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER.
29 -- 2. Account Number, Bill Number, Bill Cycle End Date and Billing
30 -- Vendor Name are required.
31 -- 3. Bill Number, Account Number and Billing Vendor Name combined
32 -- must be unique for insertion.
33 -- 4. For all above validations, in case of failure, only those records
34 -- will be rejected and rest inserted. Any other validation failure will
35 -- not insert any record (All or none are inserted/ rolled back).
36 -- 5. All data inserted or updated are case sensitive.
37 -- Parameters :
38 -- IN : p_api_version IN NUMBER Required
39 -- IN : p_bill_summaries IN bill_summaries_table
40 -- -- The table of bill summary records to be inserted.
41 -- OUT : x_return_status OUT NOCOPY VARCHAR2
42 -- -- Execution status returned.
43 -- -- FND_API.G_RET_STS_ERROR or FND_API.G_RET_STS_SUCCESS
44 -- OUT : x_msg_data OUT NOCOPY VARCHAR2
45 -- -- Error message returned.
46 -- Version : Current version 1.0
47 -- Initial version 1.0
48 -- End of comments
49 PROCEDURE Insert_Row_Batch(
50 p_api_version IN NUMBER,
51 p_bill_summaries IN bill_summaries_table,
52 x_return_status OUT NOCOPY VARCHAR2,
53 x_msg_data OUT NOCOPY VARCHAR2
54 )
55 IS
56 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
57 --Change: Added parameter p_api_version to comply to Business API standards.
58 -- Added Std API documentation header for the API.
59 -- Moved Assumptions from below this comment to API doc Header
60 --Other Files Impact: None.
61 l_api_version CONSTANT NUMBER := 1.0; -- added to fix Bug#:4159395
62 l_api_name CONSTANT VARCHAR2(20) := 'Insert_Row_Batch'; -- added to fix Bug#:4159395
63
64 null_excep EXCEPTION; -- exception declaration
65
66 l_bs_all_rec_count NUMBER := 0; -- Total bill summaries recpunt received
67 l_bs_valid_rec_count NUMBER := 0; -- Valid bill summary record to be inserted
68 l_bs_valid_rec_flag varchar2(1) := null; -- Validity of a bill summary record is true
69 --l_err_msg_count NUMBER := 0; -- Total number of error found
70
71 l_num_init NUMBER := 0; -- intialize varray variable of NUMBER type
72 l_var_init varchar2(5) := null; -- intialize varray variable of varchar2 type
73
74 tmp_acc_num varchar2(30) := null; -- account number to validate in eBusiness DB
75 tmp_acc_num2 varchar2(30) := null; -- account number to hold in temp account number
76
77 t_acc_num varchar2(30) := null; -- account number to hold in temp account number
78 t_bill_num varchar2(30) := null; -- bill number to hold in temp bill number
79 t_bill_vendor varchar2(30) := null; -- billing vendor name to hold in temp billing vendor name
80 t_uniq_val VARCHAR2(1) := null;
81
82 -- declaring varray to hold bill summary records
83 l_bill_summary_id v_number;
84 l_account_number v_var30;
85 l_total_amount_due v_var30;
86 l_adjustments v_var30;
87 l_unresolved_disputes v_var30;
88 l_bill_number v_var30;
89 l_bill_cycle_start_date v_date;
90 l_bill_cycle_end_date v_date;
91 l_due_date v_date;
92 l_new_charges v_var30;
93 l_payment v_var30;
94 l_balance v_var30;
95 l_previous_balance v_var30;
96 l_billing_vendor_name v_var240;
97 l_bill_location_url v_var240;
98 l_due_now v_var30;
99 l_created_by v_number;
100 l_creation_date v_date;
101 l_last_updated_by v_number;
102 l_last_update_date v_date;
103 l_last_update_login v_number;
104 l_object_version_number v_number;
105 l_attribute_category v_var30;
106 l_attribute1 v_var150;
107 l_attribute2 v_var150;
108 l_attribute3 v_var150;
109 l_attribute4 v_var150;
110 l_attribute5 v_var150;
111 l_attribute6 v_var150;
112 l_attribute7 v_var150;
113 l_attribute8 v_var150;
114 l_attribute9 v_var150;
115 l_attribute10 v_var150;
116 l_attribute11 v_var150;
117 l_attribute12 v_var150;
118 l_attribute13 v_var150;
119 l_attribute14 v_var150;
120 l_attribute15 v_var150;
121
122 Cursor c_get_acc_num is
123 select ACCOUNT_NUMBER
124 from HZ_CUST_ACCOUNTS
125 where ACCOUNT_NUMBER = tmp_acc_num;
126
127 Cursor c_check_uniq_constrain is
128 select 1
129 from XNB_BILL_SUMMARIES
130 where ACCOUNT_NUMBER = t_acc_num
131 and BILL_NUMBER = t_bill_num
132 and BILLING_VENDOR_NAME = t_bill_vendor;
133
134 BEGIN
135 SAVEPOINT BULK_INSERT;
136
137 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
138 --Change: The savepoint above has been moved from a place below to the cur loc.
139 --Change: The following check was added to check API compatibility
140 --Other Files Impact: None.
141
142 -- Standard call to check for call compatibility
143 IF NOT FND_API.Compatible_API_Call(
144 l_api_version,
145 p_api_version,
146 l_api_name,
147 G_PKG_NAME) THEN
148 RAISE FND_API.G_EXC_ERROR;
149 END IF;
150
151 -- Initialize API return status to success and other variables
152 l_bs_all_rec_count := p_bill_summaries.last;
153 l_bs_valid_rec_flag := 'T';
154 x_return_status := FND_API.G_RET_STS_SUCCESS;
155 x_msg_data := null;
156
157 -- Intialize all local varray and extend to intialize for all records
158 l_bill_summary_id :=v_number(l_num_init);
159 l_bill_summary_id.EXTEND(l_bs_all_rec_count,1);
160 l_account_number :=v_var30(l_var_init);
161 l_account_number.EXTEND(l_bs_all_rec_count,1);
162 l_total_amount_due :=v_var30(l_var_init);
163 l_total_amount_due.EXTEND(l_bs_all_rec_count,1);
164 l_adjustments :=v_var30(l_var_init);
165 l_adjustments.EXTEND(l_bs_all_rec_count,1);
166 l_unresolved_disputes :=v_var30(l_var_init);
167 l_unresolved_disputes.EXTEND(l_bs_all_rec_count,1);
168 l_bill_number :=v_var30(l_var_init);
169 l_bill_number.EXTEND(l_bs_all_rec_count,1);
170 l_bill_cycle_start_date :=v_date(null);
171 l_bill_cycle_start_date.EXTEND(l_bs_all_rec_count,1);
172 l_bill_cycle_end_date :=v_date(null);
173 l_bill_cycle_end_date.EXTEND(l_bs_all_rec_count,1);
174 l_due_date :=v_date(null);
175 l_due_date.EXTEND(l_bs_all_rec_count,1);
176 l_new_charges :=v_var30(l_var_init);
177 l_new_charges.EXTEND(l_bs_all_rec_count,1);
178 l_payment :=v_var30(l_var_init);
179 l_payment.EXTEND(l_bs_all_rec_count,1);
180 l_balance :=v_var30(l_var_init);
181 l_balance.EXTEND(l_bs_all_rec_count,1);
182 l_previous_balance :=v_var30(l_var_init);
183 l_previous_balance.EXTEND(l_bs_all_rec_count,1);
184 l_billing_vendor_name :=v_var240(l_var_init);
185 l_billing_vendor_name.EXTEND(l_bs_all_rec_count,1);
186 l_bill_location_url :=v_var240(l_var_init);
187 l_bill_location_url.EXTEND(l_bs_all_rec_count,1);
188 l_due_now :=v_var30(l_var_init);
189 l_due_now.EXTEND(l_bs_all_rec_count,1);
190 l_created_by :=v_number(l_num_init);
191 l_created_by.EXTEND(l_bs_all_rec_count,1);
192 l_creation_date :=v_date(null);
193 l_creation_date.EXTEND(l_bs_all_rec_count,1);
194 l_last_updated_by :=v_number(l_num_init);
195 l_last_updated_by.EXTEND(l_bs_all_rec_count,1);
196 l_last_update_date :=v_date(null);
197 l_last_update_date.EXTEND(l_bs_all_rec_count,1);
198 l_last_update_login :=v_number(l_num_init);
199 l_last_update_login.EXTEND(l_bs_all_rec_count,1);
200 l_object_version_number :=v_number(l_num_init);
201 l_object_version_number.EXTEND(l_bs_all_rec_count,1);
202 l_attribute_category :=v_var30(l_var_init);
203 l_attribute_category.EXTEND(l_bs_all_rec_count,1);
204 l_attribute1 :=v_var150(l_var_init);
205 l_attribute1.EXTEND(l_bs_all_rec_count,1);
206 l_attribute2 :=v_var150(l_var_init);
207 l_attribute2.EXTEND(l_bs_all_rec_count,1);
208 l_attribute3 :=v_var150(l_var_init);
209 l_attribute3.EXTEND(l_bs_all_rec_count,1);
210 l_attribute4 :=v_var150(l_var_init);
211 l_attribute4.EXTEND(l_bs_all_rec_count,1);
212 l_attribute5 :=v_var150(l_var_init);
213 l_attribute5.EXTEND(l_bs_all_rec_count,1);
214 l_attribute6 :=v_var150(l_var_init);
215 l_attribute6.EXTEND(l_bs_all_rec_count,1);
216 l_attribute7 :=v_var150(l_var_init);
217 l_attribute7.EXTEND(l_bs_all_rec_count,1);
218 l_attribute8 :=v_var150(l_var_init);
219 l_attribute8.EXTEND(l_bs_all_rec_count,1);
220 l_attribute9 :=v_var150(l_var_init);
221 l_attribute9.EXTEND(l_bs_all_rec_count,1);
222 l_attribute10 :=v_var150(l_var_init);
223 l_attribute10.EXTEND(l_bs_all_rec_count,1);
224 l_attribute11 :=v_var150(l_var_init);
225 l_attribute11.EXTEND(l_bs_all_rec_count,1);
226 l_attribute12 :=v_var150(l_var_init);
227 l_attribute12.EXTEND(l_bs_all_rec_count,1);
228 l_attribute13 :=v_var150(l_var_init);
229 l_attribute13.EXTEND(l_bs_all_rec_count,1);
230 l_attribute14 :=v_var150(l_var_init);
231 l_attribute14.EXTEND(l_bs_all_rec_count,1);
232 l_attribute15 :=v_var150(l_var_init);
233 l_attribute15.EXTEND(l_bs_all_rec_count,1);
234
235 -- Loop to validate and initialize all records
236 FOR i IN 1..l_bs_all_rec_count LOOP
237 l_bs_valid_rec_flag := 'T';
238
239 -- Record cannot be Null
240 /*
241 IF (p_bill_summaries(i) IS NULL) THEN
242 l_bs_valid_rec_flag := 'F'; -- validity is false
246 END IF;
243 x_return_status := FND_API.G_RET_STS_ERROR;
244 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BS_REC_IS_NULL');
245 fnd_message.SET_TOKEN('REC_NUM',n);
247 */
248
249 -- Bill Number is mandatory (NOT NULL field)
250 IF (p_bill_summaries(i).BILL_NUMBER IS NULL ) THEN
251 l_bs_valid_rec_flag := 'F'; -- validity is false
252 x_return_status := FND_API.G_RET_STS_ERROR;
253 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BILL_NUM_IS_NULL');
254 END IF;
255
256 -- Account Number is mandatory (NOT NULL field)
257 IF (p_bill_summaries(i).ACCOUNT_NUMBER IS NULL) THEN
258 l_bs_valid_rec_flag := 'F'; -- validity is false
259 x_return_status := FND_API.G_RET_STS_ERROR;
260 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_ACC_NUM_IS_NULL');
261 ELSE
262 tmp_acc_num := p_bill_summaries(i).ACCOUNT_NUMBER;
263 tmp_acc_num2 := null;
264
265 -- Fetch account number from HZ_CUST_ACCOUNTS table
266 open c_get_acc_num;
267 begin
268 fetch c_get_acc_num into tmp_acc_num2;
269 if (c_get_acc_num%NOTFOUND OR tmp_acc_num2 IS NULL) then
270 raise no_data_found;
271 end if;
272 exception
273 when no_data_found then
274 l_bs_valid_rec_flag := 'F'; -- validity is false
275 x_return_status := FND_API.G_RET_STS_ERROR;
276 fnd_message.SET_NAME('XNB','XNB_PLS_ACC_NUM_NOT_VALID');
277 fnd_message.SET_TOKEN('ACC_NUM',tmp_acc_num);
278 x_msg_data := x_msg_data || ' ' || fnd_message.GET;
279 --dbms_output.put_line(' no data found= ' || l_bs_valid_rec_flag );
280 end;
281 close c_get_acc_num;
282 -- Account Number must exist in eBusiness suit database
283 --IF (tmp_acc_num2 IS NULL) THEN
284 --END IF;
285 END IF;
286
287 -- Bill Cycle End Date is mandatory (NOT NULL field)
288 IF (p_bill_summaries(i).BILL_CYCLE_END_DATE IS NULL) THEN
289 l_bs_valid_rec_flag := 'F'; -- validity is false
290 x_return_status := FND_API.G_RET_STS_ERROR;
291 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BILL_END_DT_IS_NULL');
292 END IF;
293
294 -- Bill Vendor Name is mandatory (NOT NULL field)
295 IF (p_bill_summaries(i).BILLING_VENDOR_NAME IS NULL) THEN
296 l_bs_valid_rec_flag := 'F'; -- validity is false
297 x_return_status := FND_API.G_RET_STS_ERROR;
298 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BILL_VEN_IS_NULL');
299 END IF;
300
301 -- Check for Uniqe Constraints...
302 t_acc_num := p_bill_summaries(i).ACCOUNT_NUMBER;
303 t_bill_num := p_bill_summaries(i).BILL_NUMBER;
304 t_bill_vendor := p_bill_summaries(i).BILLING_VENDOR_NAME;
305 t_uniq_val := null;
306 open c_check_uniq_constrain;
307 begin
308 fetch c_check_uniq_constrain into t_uniq_val;
309 if (c_check_uniq_constrain%FOUND OR t_uniq_val ='1') then
310 l_bs_valid_rec_flag := 'F'; -- validity is false
311 x_return_status := FND_API.G_RET_STS_ERROR;
312 fnd_message.SET_NAME('XNB','XNB_PLS_BILL_SUM_REC_NOT_UNQ');
313 fnd_message.SET_TOKEN('ACC_NUM',t_acc_num);
314 fnd_message.SET_TOKEN('BILL_NUM',t_bill_num);
315 fnd_message.SET_TOKEN('BILL_VEN',t_bill_vendor);
316 x_msg_data := x_msg_data || ' ' || fnd_message.GET;
317 end if;
318 exception
319 when no_data_found then
320 null;
321 end;
322 close c_check_uniq_constrain;
323
324 -- If the bill summary record is valid
325 IF l_bs_valid_rec_flag = 'T' THEN
326 l_bs_valid_rec_count := l_bs_valid_rec_count + 1;
327
328 l_account_number(l_bs_valid_rec_count) := p_bill_summaries(i).ACCOUNT_NUMBER;
329 l_total_amount_due(l_bs_valid_rec_count) := p_bill_summaries(i).TOTAL_AMOUNT_DUE;
330 l_adjustments(l_bs_valid_rec_count) := p_bill_summaries(i).ADJUSTMENTS;
331 l_unresolved_disputes(l_bs_valid_rec_count) := p_bill_summaries(i).UNRESOLVED_DISPUTES;
332 l_bill_number(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_NUMBER;
333 l_bill_cycle_start_date(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_CYCLE_START_DATE;
334 l_bill_cycle_end_date(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_CYCLE_END_DATE;
335 l_due_date(l_bs_valid_rec_count) := p_bill_summaries(i).DUE_DATE;
336 l_new_charges(l_bs_valid_rec_count) := p_bill_summaries(i).NEW_CHARGES;
337 l_payment(l_bs_valid_rec_count) := p_bill_summaries(i).PAYMENT;
338 l_balance(l_bs_valid_rec_count) := p_bill_summaries(i).BALANCE;
339 l_previous_balance(l_bs_valid_rec_count) := p_bill_summaries(i).PREVIOUS_BALANCE;
340 l_billing_vendor_name(l_bs_valid_rec_count) := p_bill_summaries(i).BILLING_VENDOR_NAME;
341 l_bill_location_url(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_LOCATION_URL;
342 l_due_now(l_bs_valid_rec_count) := p_bill_summaries(i).DUE_NOW;
343
344 IF (p_bill_summaries(i).CREATED_BY IS NULL) THEN
345 l_created_by(l_bs_valid_rec_count) := FND_GLOBAL.USER_ID;
346 ELSE
347 l_created_by(l_bs_valid_rec_count) := p_bill_summaries(i).CREATED_BY;
351
348 END IF;
349
350 l_creation_date(l_bs_valid_rec_count) := SYSDATE;
352 IF (p_bill_summaries(i).LAST_UPDATED_BY IS NULL) THEN
353 l_last_updated_by(l_bs_valid_rec_count) := FND_GLOBAL.USER_ID;
354 ELSE
355 l_last_updated_by(l_bs_valid_rec_count) := p_bill_summaries(i).LAST_UPDATED_BY;
356 END IF;
357
358 l_last_update_date(l_bs_valid_rec_count) := SYSDATE;
359
360 IF (p_bill_summaries(i).LAST_UPDATE_LOGIN IS NULL) THEN
361 l_last_update_login(l_bs_valid_rec_count) := FND_GLOBAL.LOGIN_ID;
362 ELSE
363 l_last_update_login(l_bs_valid_rec_count) := p_bill_summaries(i).LAST_UPDATE_LOGIN;
364 END IF;
365
366 l_object_version_number(l_bs_valid_rec_count) := 1;
367 l_attribute_category(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE_CATEGORY;
368 l_attribute1(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE1;
369 l_attribute2(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE2;
370 l_attribute3(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE3;
371 l_attribute4(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE4;
372 l_attribute5(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE5;
373 l_attribute6(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE6;
374 l_attribute7(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE7;
375 l_attribute8(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE8;
376 l_attribute9(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE9;
377 l_attribute10(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE10;
378 l_attribute11(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE11;
379 l_attribute12(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE12;
380 l_attribute13(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE13;
381 l_attribute14(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE14;
382 l_attribute15(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE15;
383 END IF;
384
385 END LOOP; -- End For loop
386
387 -- batch insert all valid records in database
388 FORALL i IN 1..l_bs_valid_rec_count
389 INSERT INTO XNB_BILL_SUMMARIES(
390 BILL_SUMMARY_ID,
391 ACCOUNT_NUMBER,
392 TOTAL_AMOUNT_DUE,
393 ADJUSTMENTS,
394 UNRESOLVED_DISPUTES,
395 BILL_NUMBER,
396 BILL_CYCLE_START_DATE,
397 BILL_CYCLE_END_DATE,
398 DUE_DATE,
399 NEW_CHARGES,
400 PAYMENT,
401 BALANCE,
402 PREVIOUS_BALANCE,
403 BILLING_VENDOR_NAME,
404 BILL_LOCATION_URL,
405 DUE_NOW,
406 CREATED_BY,
407 CREATION_DATE,
408 LAST_UPDATED_BY,
409 LAST_UPDATE_DATE,
410 LAST_UPDATE_LOGIN,
411 OBJECT_VERSION_NUMBER,
412 ATTRIBUTE_CATEGORY,
413 ATTRIBUTE1,
414 ATTRIBUTE2,
415 ATTRIBUTE3,
416 ATTRIBUTE4,
417 ATTRIBUTE5,
418 ATTRIBUTE6,
419 ATTRIBUTE7,
420 ATTRIBUTE8,
421 ATTRIBUTE9,
422 ATTRIBUTE10,
423 ATTRIBUTE11,
424 ATTRIBUTE12,
425 ATTRIBUTE13,
426 ATTRIBUTE14,
427 ATTRIBUTE15
428 ) VALUES (
429 XNB_BILL_SUMMARIES_S.nextval,
430 l_account_number(i),
431 l_total_amount_due(i),
432 l_adjustments(i),
433 l_unresolved_disputes(i),
434 l_bill_number(i),
435 l_bill_cycle_start_date(i),
436 l_bill_cycle_end_date(i),
437 l_due_date(i),
438 l_new_charges(i),
439 l_payment(i),
440 l_balance(i),
441 l_previous_balance(i),
442 l_billing_vendor_name(i),
443 l_bill_location_url(i),
444 l_due_now(i),
445 l_created_by(i),
446 l_creation_date(i),
447 l_last_updated_by(i),
448 l_last_update_date(i),
449 l_last_update_login(i),
450 l_object_version_number(i),
451 l_attribute_category(i),
452 l_attribute1(i),
453 l_attribute2(i),
454 l_attribute3(i),
455 l_attribute4(i),
456 l_attribute5(i),
457 l_attribute6(i),
458 l_attribute7(i),
459 l_attribute8(i),
460 l_attribute9(i),
461 l_attribute10(i),
462 l_attribute11(i),
463 l_attribute12(i),
464 l_attribute13(i),
468
465 l_attribute14(i),
466 l_attribute15(i)
467 ); -- End Forall loop
469 -- If Null bill number or account number throw error
470 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
471 RAISE null_excep;
472 END IF;
473
474 -- Handle all exceptions
475 Exception
476 -- Handle null exceptions
477 WHEN null_excep THEN
478 x_return_status := FND_API.G_RET_STS_ERROR;
479 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_SUCC_INS');
480
481 WHEN NO_DATA_FOUND then
482 ROLLBACK TO BULK_INSERT;
483 x_return_status := FND_API.G_RET_STS_ERROR;
484 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_NO_REC_FND');
485
486 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
487 --Change: The following exception section was added to trap API version check exceptions.
488 --Other Files Impact: None.
489 WHEN FND_API.G_EXC_ERROR THEN
490 ROLLBACK TO BULK_INSERT;
491 FND_MESSAGE.SET_NAME('XNB','XNB_PLS_MSG_INCOMPAT_API');
492 FND_MESSAGE.SET_TOKEN('API_FULL_NAME', G_PKG_NAME || '.' || l_api_name );
493 FND_MESSAGE.SET_TOKEN('GIVEN_VER', p_api_version);
494 FND_MESSAGE.SET_TOKEN('CURR_VER', l_api_version);
495 x_return_status := FND_API.G_RET_STS_ERROR;
496 x_msg_data := x_msg_data || ' ' || FND_MESSAGE.GET;
497
498 WHEN OTHERS THEN
499 ROLLBACK TO BULK_INSERT;
500 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
501 --Change: On OTHERS error, the public API should return G_RET_STS_UNEXP_ERROR. Corrected return code.
502 --Other Files Impact: None.
503 --x_return_status := FND_API.G_RET_STS_ERROR;
504 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
505 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_NO_REC_INS');
506
507 End Insert_Row_Batch;
508
509
510 -- Start of comments
511 -- API name : Update_Row_Batch
512 -- Type : Public
513 -- Pre-reqs : None.
514 -- Function : Updates the given bill summary rows in the XNB table
515 -- . XNB_BILL_SUMMARIES.
516 -- Assumptions :
517 -- All records whose
518 -- 1. Account Number must exit in eBusiness suite database schema
519 -- HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER.
520 -- 2. Account Number, Bill Number, Bill Cycle End Date and Billing
521 -- Vendor Name are required.
522 -- 3. Account Number, Bill Number and Billing Vendor Name cannot be
523 -- updated and hence must be present for updating.
524 -- 4. For all above validations, in case of failure, only those records
525 -- will be rejected and rest inserted. Any other validation failure
526 -- will not insert any record (All or none are inserted/ rolled back).
527 -- 5. All data inserted are case sensitive.
528 -- Parameters :
529 -- IN : p_api_version IN NUMBER Required
530 -- IN : p_bill_summaries IN bill_summaries_table
531 -- -- The table of bill summary records to be inserted.
532 -- OUT : x_return_status OUT NOCOPY VARCHAR2
533 -- -- Execution status returned.
534 -- -- FND_API.G_RET_STS_ERROR or FND_API.G_RET_STS_SUCCESS
535 -- OUT : x_msg_data OUT NOCOPY VARCHAR2
536 -- -- Error message returned.
537 -- Version : Current version 1.0
538 -- Initial version 1.0
539 -- End of comments
540
541 PROCEDURE Update_Row_Batch(
542 p_api_version IN NUMBER,
543 p_bill_summaries IN bill_summaries_table,
544 x_return_status OUT NOCOPY VARCHAR2,
545 x_msg_data OUT NOCOPY VARCHAR2
546 )
547 IS
548 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
549 --Change: Added parameter p_api_version to comply to Business API standards.
550 -- Added Std API documentation header for the API.
551 -- Moved Assumptions from below this comment to API doc Header
552 --Other Files Impact: None.
553 l_api_version CONSTANT NUMBER := 1.0; -- added to fix Bug#:4159395
554 l_api_name CONSTANT VARCHAR2(20) := 'Update_Row_Batch'; -- added to fix Bug#:4159395
555
556 null_excep EXCEPTION; -- exception declaration
557
558 l_bs_all_rec_count NUMBER := 0; -- Total bill summaries recpunt received
559 l_bs_valid_rec_count NUMBER := 0; -- Valid bill summary record to be inserted
560 l_bs_valid_rec_flag varchar2(1) := null; -- Validity of a bill summary record is true
561 --l_err_msg_count NUMBER := 0; -- Total number of error found
562
563 l_num_init NUMBER := 0; -- intialize varray variable of NUMBER type
564 l_var_init varchar2(5) := null; -- intialize varray variable of varchar2 type
565
566 -- declaring varray to hold bill summary records
567 l_bill_summary_id v_number;
568 l_account_number v_var30;
569 l_total_amount_due v_var30;
570 l_adjustments v_var30;
571 l_unresolved_disputes v_var30;
572 l_bill_number v_var30;
573 l_bill_cycle_start_date v_date;
574 l_bill_cycle_end_date v_date;
578 l_balance v_var30;
575 l_due_date v_date;
576 l_new_charges v_var30;
577 l_payment v_var30;
579 l_previous_balance v_var30;
580 l_billing_vendor_name v_var240;
581 l_bill_location_url v_var240;
582 l_due_now v_var30;
583 l_created_by v_number;
584 l_creation_date v_date;
585 l_last_updated_by v_number;
586 l_last_update_date v_date;
587 l_last_update_login v_number;
588 l_object_version_number v_number;
589 l_attribute_category v_var30;
590 l_attribute1 v_var150;
591 l_attribute2 v_var150;
592 l_attribute3 v_var150;
593 l_attribute4 v_var150;
594 l_attribute5 v_var150;
595 l_attribute6 v_var150;
596 l_attribute7 v_var150;
597 l_attribute8 v_var150;
598 l_attribute9 v_var150;
599 l_attribute10 v_var150;
600 l_attribute11 v_var150;
601 l_attribute12 v_var150;
602 l_attribute13 v_var150;
603 l_attribute14 v_var150;
604 l_attribute15 v_var150;
605
606 t_acc_num varchar2(30) := null; -- account number to hold in temp account number
607 t_bill_num varchar2(30) := null; -- bill number to hold in temp bill number
608 t_bill_vendor varchar2(30) := null; -- billing vendor name to hold in temp billing vendor name
609 t_uniq_val VARCHAR2(1) := null;
610
611 Cursor c_check_uniq_constrain is
612 select
613 TOTAL_AMOUNT_DUE ,
614 ADJUSTMENTS ,
615 UNRESOLVED_DISPUTES ,
616 BILL_CYCLE_START_DATE,
617 BILL_CYCLE_END_DATE,
618 DUE_DATE,
619 NEW_CHARGES,
620 PAYMENT,
621 BALANCE,
622 PREVIOUS_BALANCE,
623 BILL_LOCATION_URL,
624 DUE_NOW ,
625 ATTRIBUTE_CATEGORY,
626 ATTRIBUTE1,
627 ATTRIBUTE2,
628 ATTRIBUTE3,
629 ATTRIBUTE4,
630 ATTRIBUTE5,
631 ATTRIBUTE6,
632 ATTRIBUTE7,
633 ATTRIBUTE8,
634 ATTRIBUTE9,
635 ATTRIBUTE10,
636 ATTRIBUTE11,
637 ATTRIBUTE12,
638 ATTRIBUTE13,
639 ATTRIBUTE14,
640 ATTRIBUTE15
641 from XNB_BILL_SUMMARIES
642 where ACCOUNT_NUMBER = t_acc_num
643 and BILL_NUMBER = t_bill_num
644 and BILLING_VENDOR_NAME = t_bill_vendor;
645
646 BEGIN
647 SAVEPOINT BULK_UPDATE;
648 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
649 --Change: The following check was added to check API compatibility
650 --Other Files Impact: None.
651
652 -- Standard call to check for call compatibility
653 IF NOT FND_API.Compatible_API_Call(
654 l_api_version,
655 p_api_version,
656 l_api_name,
657 G_PKG_NAME) THEN
658 RAISE FND_API.G_EXC_ERROR;
659 END IF;
660
661 -- Initialize API return status to success and other variables
662 l_bs_all_rec_count := p_bill_summaries.last;
663 l_bs_valid_rec_flag := 'T';
664 x_return_status := FND_API.G_RET_STS_SUCCESS;
665 x_msg_data := null;
666
667 -- Intialize all local varray and extend to intialize for all records
668 l_bill_summary_id :=v_number(l_num_init);
669 l_bill_summary_id.EXTEND(l_bs_all_rec_count,1);
670 l_account_number :=v_var30(l_var_init);
671 l_account_number.EXTEND(l_bs_all_rec_count,1);
672 l_total_amount_due :=v_var30(l_var_init);
673 l_total_amount_due.EXTEND(l_bs_all_rec_count,1);
674 l_adjustments :=v_var30(l_var_init);
675 l_adjustments.EXTEND(l_bs_all_rec_count,1);
676 l_unresolved_disputes :=v_var30(l_var_init);
677 l_unresolved_disputes.EXTEND(l_bs_all_rec_count,1);
678 l_bill_number :=v_var30(l_var_init);
679 l_bill_number.EXTEND(l_bs_all_rec_count,1);
680 l_bill_cycle_start_date :=v_date(null);
681 l_bill_cycle_start_date.EXTEND(l_bs_all_rec_count,1);
682 l_bill_cycle_end_date :=v_date(null);
683 l_bill_cycle_end_date.EXTEND(l_bs_all_rec_count,1);
684 l_due_date :=v_date(null);
685 l_due_date.EXTEND(l_bs_all_rec_count,1);
686 l_new_charges :=v_var30(l_var_init);
687 l_new_charges.EXTEND(l_bs_all_rec_count,1);
688 l_payment :=v_var30(l_var_init);
689 l_payment.EXTEND(l_bs_all_rec_count,1);
690 l_balance :=v_var30(l_var_init);
691 l_balance.EXTEND(l_bs_all_rec_count,1);
692 l_previous_balance :=v_var30(l_var_init);
693 l_previous_balance.EXTEND(l_bs_all_rec_count,1);
697 l_bill_location_url.EXTEND(l_bs_all_rec_count,1);
694 l_billing_vendor_name :=v_var240(l_var_init);
695 l_billing_vendor_name.EXTEND(l_bs_all_rec_count,1);
696 l_bill_location_url :=v_var240(l_var_init);
698 l_due_now :=v_var30(l_var_init);
699 l_due_now.EXTEND(l_bs_all_rec_count,1);
700 l_created_by :=v_number(l_num_init);
701 l_created_by.EXTEND(l_bs_all_rec_count,1);
702 l_creation_date :=v_date(null);
703 l_creation_date.EXTEND(l_bs_all_rec_count,1);
704 l_last_updated_by :=v_number(l_num_init);
705 l_last_updated_by.EXTEND(l_bs_all_rec_count,1);
706 l_last_update_date :=v_date(null);
707 l_last_update_date.EXTEND(l_bs_all_rec_count,1);
708 l_last_update_login :=v_number(l_num_init);
709 l_last_update_login.EXTEND(l_bs_all_rec_count,1);
710 l_object_version_number :=v_number(l_num_init);
711 l_object_version_number.EXTEND(l_bs_all_rec_count,1);
712 l_attribute_category :=v_var30(l_var_init);
713 l_attribute_category.EXTEND(l_bs_all_rec_count,1);
714 l_attribute1 :=v_var150(l_var_init);
715 l_attribute1.EXTEND(l_bs_all_rec_count,1);
716 l_attribute2 :=v_var150(l_var_init);
717 l_attribute2.EXTEND(l_bs_all_rec_count,1);
718 l_attribute3 :=v_var150(l_var_init);
719 l_attribute3.EXTEND(l_bs_all_rec_count,1);
720 l_attribute4 :=v_var150(l_var_init);
721 l_attribute4.EXTEND(l_bs_all_rec_count,1);
722 l_attribute5 :=v_var150(l_var_init);
723 l_attribute5.EXTEND(l_bs_all_rec_count,1);
724 l_attribute6 :=v_var150(l_var_init);
725 l_attribute6.EXTEND(l_bs_all_rec_count,1);
726 l_attribute7 :=v_var150(l_var_init);
727 l_attribute7.EXTEND(l_bs_all_rec_count,1);
728 l_attribute8 :=v_var150(l_var_init);
729 l_attribute8.EXTEND(l_bs_all_rec_count,1);
730 l_attribute9 :=v_var150(l_var_init);
731 l_attribute9.EXTEND(l_bs_all_rec_count,1);
732 l_attribute10 :=v_var150(l_var_init);
733 l_attribute10.EXTEND(l_bs_all_rec_count,1);
734 l_attribute11 :=v_var150(l_var_init);
735 l_attribute11.EXTEND(l_bs_all_rec_count,1);
736 l_attribute12 :=v_var150(l_var_init);
737 l_attribute12.EXTEND(l_bs_all_rec_count,1);
738 l_attribute13 :=v_var150(l_var_init);
739 l_attribute13.EXTEND(l_bs_all_rec_count,1);
740 l_attribute14 :=v_var150(l_var_init);
741 l_attribute14.EXTEND(l_bs_all_rec_count,1);
742 l_attribute15 :=v_var150(l_var_init);
743 l_attribute15.EXTEND(l_bs_all_rec_count,1);
744
745 -- Loop to validate and initialize all records
746 FOR i IN 1..l_bs_all_rec_count LOOP
747 l_bs_valid_rec_flag := 'T';
748
749 -- Bill Number is mandatory (NOT NULL field)
750 IF (p_bill_summaries(i).BILL_NUMBER IS NULL) THEN
751 l_bs_valid_rec_flag := 'F'; -- validity is false
752 x_return_status := FND_API.G_RET_STS_ERROR;
753 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BILL_NUM_IS_NULL');
754 END IF;
755
756 -- Account Number is mandatory (NOT NULL field)
757 IF (p_bill_summaries(i).ACCOUNT_NUMBER IS NULL) THEN
758 l_bs_valid_rec_flag := 'F'; -- validity is false
759 x_return_status := FND_API.G_RET_STS_ERROR;
760 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_ACC_NUM_IS_NULL');
761 END IF;
762
763 -- Bill Vendor Name is mandatory (NOT NULL field)
764 IF (p_bill_summaries(i).BILLING_VENDOR_NAME IS NULL) THEN
765 l_bs_valid_rec_flag := 'F'; -- validity is false
766 x_return_status := FND_API.G_RET_STS_ERROR;
767 x_msg_data := x_msg_data || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_BILL_VEN_IS_NULL');
768 END IF;
769
770 -- Check for Uniqe Constraints...
771 t_acc_num := p_bill_summaries(i).ACCOUNT_NUMBER;
772 t_bill_num := p_bill_summaries(i).BILL_NUMBER;
773 t_bill_vendor := p_bill_summaries(i).BILLING_VENDOR_NAME;
774 t_uniq_val := null;
775 l_bs_valid_rec_count := l_bs_valid_rec_count + 1;
776 open c_check_uniq_constrain;
777 begin
778 fetch c_check_uniq_constrain into
779 l_total_amount_due(l_bs_valid_rec_count),
780 l_adjustments(l_bs_valid_rec_count),
781 l_unresolved_disputes(l_bs_valid_rec_count),
782 l_bill_cycle_start_date(l_bs_valid_rec_count),
783 l_bill_cycle_end_date(l_bs_valid_rec_count),
784 l_due_date(l_bs_valid_rec_count),
785 l_new_charges(l_bs_valid_rec_count),
786 l_payment(l_bs_valid_rec_count),
787 l_balance(l_bs_valid_rec_count),
788 l_previous_balance(l_bs_valid_rec_count),
789 l_bill_location_url(l_bs_valid_rec_count),
790 l_due_now(l_bs_valid_rec_count),
791 l_attribute_category(l_bs_valid_rec_count),
792 l_attribute1(l_bs_valid_rec_count),
793 l_attribute2(l_bs_valid_rec_count),
794 l_attribute3(l_bs_valid_rec_count),
798 l_attribute7(l_bs_valid_rec_count),
795 l_attribute4(l_bs_valid_rec_count),
796 l_attribute5(l_bs_valid_rec_count),
797 l_attribute6(l_bs_valid_rec_count),
799 l_attribute8(l_bs_valid_rec_count),
800 l_attribute9(l_bs_valid_rec_count),
801 l_attribute10(l_bs_valid_rec_count),
802 l_attribute11(l_bs_valid_rec_count),
803 l_attribute12(l_bs_valid_rec_count),
804 l_attribute13(l_bs_valid_rec_count),
805 l_attribute14(l_bs_valid_rec_count),
806 l_attribute15(l_bs_valid_rec_count)
807 ;
808
809 if (c_check_uniq_constrain%NOTFOUND ) then
810 raise no_data_found;
811 end if;
812 exception
813 when no_data_found then
814 l_bs_valid_rec_flag := 'F'; -- validity is false
815 l_bs_valid_rec_count := l_bs_valid_rec_count - 1;
816 x_return_status := FND_API.G_RET_STS_ERROR;
817 fnd_message.SET_NAME('XNB','XNB_PLS_BILL_SUM_REC_UNQ');
818 fnd_message.SET_TOKEN('ACC_NUM',t_acc_num);
819 fnd_message.SET_TOKEN('BILL_NUM',t_bill_num);
820 fnd_message.SET_TOKEN('BILL_VEN',t_bill_vendor);
821 x_msg_data := x_msg_data || ' ' || fnd_message.GET;
822 end;
823 close c_check_uniq_constrain;
824
825 -- If the bill summary record is valid
826 IF l_bs_valid_rec_flag = 'T' THEN
827
828 l_account_number(l_bs_valid_rec_count) := p_bill_summaries(i).ACCOUNT_NUMBER;
829 l_bill_number(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_NUMBER;
830 l_billing_vendor_name(l_bs_valid_rec_count) := p_bill_summaries(i).BILLING_VENDOR_NAME;
831 IF (p_bill_summaries(i).TOTAL_AMOUNT_DUE IS NOT NULL) THEN
832 l_total_amount_due(l_bs_valid_rec_count) := p_bill_summaries(i).TOTAL_AMOUNT_DUE;
833 END IF;
834 IF (p_bill_summaries(i).ADJUSTMENTS IS NOT NULL) THEN
835 l_adjustments(l_bs_valid_rec_count) := p_bill_summaries(i).ADJUSTMENTS;
836 END IF;
837 IF (p_bill_summaries(i).UNRESOLVED_DISPUTES IS NOT NULL) THEN
838 l_unresolved_disputes(l_bs_valid_rec_count) := p_bill_summaries(i).UNRESOLVED_DISPUTES;
839 END IF;
840 IF (p_bill_summaries(i).BILL_CYCLE_START_DATE IS NOT NULL) THEN
841 l_bill_cycle_start_date(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_CYCLE_START_DATE;
842 END IF;
843 IF (p_bill_summaries(i).BILL_CYCLE_END_DATE IS NOT NULL) THEN
844 l_bill_cycle_end_date(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_CYCLE_END_DATE;
845 END IF;
846 IF (p_bill_summaries(i).DUE_DATE IS NOT NULL) THEN
847 l_due_date(l_bs_valid_rec_count) := p_bill_summaries(i).DUE_DATE;
848 END IF;
849 IF ( p_bill_summaries(i).NEW_CHARGES IS NOT NULL) THEN
850 l_new_charges(l_bs_valid_rec_count) := p_bill_summaries(i).NEW_CHARGES;
851 END IF;
852 IF (p_bill_summaries(i).PAYMENT IS NOT NULL) THEN
853 l_payment(l_bs_valid_rec_count) := p_bill_summaries(i).PAYMENT;
854 END IF;
855 IF (p_bill_summaries(i).BALANCE IS NOT NULL) THEN
856 l_balance(l_bs_valid_rec_count) := p_bill_summaries(i).BALANCE;
857 END IF;
858 IF (p_bill_summaries(i).PREVIOUS_BALANCE IS NOT NULL) THEN
859 l_previous_balance(l_bs_valid_rec_count) := p_bill_summaries(i).PREVIOUS_BALANCE;
860 END IF;
861 IF (p_bill_summaries(i).BILL_LOCATION_URL IS NOT NULL) THEN
862 l_bill_location_url(l_bs_valid_rec_count) := p_bill_summaries(i).BILL_LOCATION_URL;
863 END IF;
864 IF ( p_bill_summaries(i).DUE_NOW IS NOT NULL) THEN
865 l_due_now(l_bs_valid_rec_count) := p_bill_summaries(i).DUE_NOW;
866 END IF;
867
868 IF (p_bill_summaries(i).LAST_UPDATED_BY IS NULL) THEN
869 l_last_updated_by(l_bs_valid_rec_count) := FND_GLOBAL.USER_ID;
870 ELSE
871 l_last_updated_by(l_bs_valid_rec_count) := p_bill_summaries(i).LAST_UPDATED_BY;
872 END IF;
873
874 l_last_update_date(l_bs_valid_rec_count) := SYSDATE;
875
876 IF (p_bill_summaries(i).LAST_UPDATE_LOGIN IS NULL) THEN
877 l_last_update_login(l_bs_valid_rec_count) := FND_GLOBAL.LOGIN_ID;
878 ELSE
879 l_last_update_login(l_bs_valid_rec_count) := p_bill_summaries(i).LAST_UPDATE_LOGIN;
880 END IF;
881
882 IF (p_bill_summaries(i).ATTRIBUTE_CATEGORY IS NOT NULL) THEN
883 l_attribute_category(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE_CATEGORY;
884 END IF;
885 IF (p_bill_summaries(i).ATTRIBUTE1 IS NOT NULL) THEN
886 l_attribute1(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE1;
887 END IF;
888 IF (p_bill_summaries(i).ATTRIBUTE2 IS NOT NULL) THEN
889 l_attribute2(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE2;
890 END IF;
891 IF (p_bill_summaries(i).ATTRIBUTE3 IS NOT NULL) THEN
892 l_attribute3(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE3;
893 END IF;
894 IF (p_bill_summaries(i).ATTRIBUTE4 IS NOT NULL) THEN
898 l_attribute5(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE5;
895 l_attribute4(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE4;
896 END IF;
897 IF (p_bill_summaries(i).ATTRIBUTE5 IS NOT NULL) THEN
899 END IF;
900 IF (p_bill_summaries(i).ATTRIBUTE6 IS NOT NULL) THEN
901 l_attribute6(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE6;
902 END IF;
903 IF (p_bill_summaries(i).ATTRIBUTE7 IS NOT NULL) THEN
904 l_attribute7(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE7;
905 END IF;
906 IF (p_bill_summaries(i).ATTRIBUTE8 IS NOT NULL) THEN
907 l_attribute8(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE8;
908 END IF;
909 IF (p_bill_summaries(i).ATTRIBUTE9 IS NOT NULL) THEN
910 l_attribute9(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE9;
911 END IF;
912 IF (p_bill_summaries(i).ATTRIBUTE10 IS NOT NULL) THEN
913 l_attribute10(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE10;
914 END IF;
915 IF (p_bill_summaries(i).ATTRIBUTE11 IS NOT NULL) THEN
916 l_attribute11(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE11;
917 END IF;
918 IF (p_bill_summaries(i).ATTRIBUTE12 IS NOT NULL) THEN
919 l_attribute12(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE12;
920 END IF;
921 IF (p_bill_summaries(i).ATTRIBUTE13 IS NOT NULL) THEN
922 l_attribute13(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE13;
923 END IF;
924 IF (p_bill_summaries(i).ATTRIBUTE14 IS NOT NULL) THEN
925 l_attribute14(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE14;
926 END IF;
927 IF (p_bill_summaries(i).ATTRIBUTE15 IS NOT NULL) THEN
928 l_attribute15(l_bs_valid_rec_count) := p_bill_summaries(i).ATTRIBUTE15;
929 END IF;
930 END IF;
931
932 END LOOP; -- End For loop
933
934 -- batch update all valid records in database
935 FORALL i IN 1..l_bs_valid_rec_count
936 Update XNB_BILL_SUMMARIES
937 SET
938 TOTAL_AMOUNT_DUE = l_total_amount_due(i),
939 ADJUSTMENTS = l_adjustments(i),
940 UNRESOLVED_DISPUTES = l_unresolved_disputes(i),
941 BILL_CYCLE_START_DATE = l_bill_cycle_start_date(i),
942 BILL_CYCLE_END_DATE = l_bill_cycle_end_date(i),
943 DUE_DATE = l_due_date(i),
944 NEW_CHARGES = l_new_charges(i),
945 PAYMENT = l_payment(i),
946 BALANCE = l_balance(i),
947 PREVIOUS_BALANCE = l_previous_balance(i),
948 BILL_LOCATION_URL = l_bill_location_url(i),
949 DUE_NOW = l_due_now(i),
950 LAST_UPDATED_BY = l_last_updated_by(i),
951 LAST_UPDATE_DATE = SYSDATE,
952 LAST_UPDATE_LOGIN = l_last_update_login(i),
953 OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1,
954 ATTRIBUTE_CATEGORY = l_attribute_category(i),
955 ATTRIBUTE1 = l_attribute1(i),
956 ATTRIBUTE2 = l_attribute2(i),
957 ATTRIBUTE3 = l_attribute3(i),
958 ATTRIBUTE4 = l_attribute4(i),
959 ATTRIBUTE5 = l_attribute5(i),
960 ATTRIBUTE6 = l_attribute6(i),
961 ATTRIBUTE7 = l_attribute7(i),
962 ATTRIBUTE8 = l_attribute8(i),
963 ATTRIBUTE9 = l_attribute9(i),
964 ATTRIBUTE10 = l_attribute10(i),
965 ATTRIBUTE11 = l_attribute11(i),
966 ATTRIBUTE12 = l_attribute12(i),
967 ATTRIBUTE13 = l_attribute13(i),
968 ATTRIBUTE14 = l_attribute14(i),
969 ATTRIBUTE15 = l_attribute15(i)
970 where BILL_NUMBER = l_bill_number(i) and
971 ACCOUNT_NUMBER = l_account_number(i) and
972 BILLING_VENDOR_NAME = l_billing_vendor_name(i);
973
974 --IF (SQL%NOTFOUND) THEN
975 --RAISE NO_DATA_FOUND;
976 --END IF;
977
978 -- If Null bill number or account number or Billing Vendor Name throw error
979 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
980 RAISE null_excep;
981 END IF;
982
983 -- Handle all exceptions
984 Exception
985 -- Handle null exceptions
986 WHEN null_excep THEN
987 x_return_status := FND_API.G_RET_STS_ERROR;
988 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_SUCC_UPD');
989
990 WHEN NO_DATA_FOUND then
991 ROLLBACK TO BULK_UPDATE;
992 x_return_status := FND_API.G_RET_STS_ERROR;
993 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_ACC_BILL_NUM');
994
995 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
996 --Change: The following exception section was added to trap API version check exceptions.
997 --Other Files Impact: None.
998 WHEN FND_API.G_EXC_ERROR THEN
999 ROLLBACK TO BULK_UPDATE;
1003 FND_MESSAGE.SET_TOKEN('CURR_VER', l_api_version);
1000 FND_MESSAGE.SET_NAME('XNB','XNB_PLS_MSG_INCOMPAT_API');
1001 FND_MESSAGE.SET_TOKEN('API_FULL_NAME', G_PKG_NAME || '.' || l_api_name );
1002 FND_MESSAGE.SET_TOKEN('GIVEN_VER', p_api_version);
1004 x_return_status := FND_API.G_RET_STS_ERROR;
1005 x_msg_data := x_msg_data || ' ' || FND_MESSAGE.GET;
1006
1007 WHEN OTHERS THEN
1008 ROLLBACK TO BULK_UPDATE;
1009 --Date:04-Feb-2005 Author:DPUTHIYE Bug#:4159395
1010 --Change: On OTHERS error, the public API should return G_RET_STS_UNEXP_ERROR. Corrected return code.
1011 --Other Files Impact: None.
1012 --x_return_status := FND_API.G_RET_STS_ERROR;
1013 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1014 x_msg_data := x_msg_data || ' ' || SQLERRM || ' ' || fnd_message.GET_STRING('XNB','XNB_PLS_MSG_NO_REC_UPD');
1015
1016 End Update_Row_Batch;
1017
1018
1019 End XNB_BILL_SUMMARIES_PKG;