[Home] [Help]
PACKAGE BODY: APPS.OZF_SETTLEMENT_DOC_PVT
Source
1 PACKAGE BODY OZF_SETTLEMENT_DOC_PVT AS
2 /* $Header: ozfvcsdb.pls 120.24.12010000.5 2008/10/16 08:47:04 psomyaju ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'OZF_Settlement_Doc_PVT';
5 G_FILE_NAME CONSTANT VARCHAR2(12) := 'ozfvcsdb.pls';
6
7 OZF_DEBUG_HIGH_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_high);
8 OZF_DEBUG_LOW_ON BOOLEAN := FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_debug_low);
9
10 TYPE g_payment_method_tbl IS TABLE OF VARCHAR2(30)
11 INDEX BY BINARY_INTEGER;
12
13
14 g_writeoff_threshold VARCHAR2(15):= FND_PROFILE.value('OZF_CLAIM_WRITE_OFF_THRESHOLD');
15
16 /*=======================================================================*
17 | FUNCTION
18 | Is_Tax_Inclusive
19 |
20 | NOTES
21 |
22 | HISTORY
23 | 3-Aug-2005 Sahana R12: Tax Enhancements
24 *=======================================================================*/
25 FUNCTION Is_Tax_Inclusive(p_claim_class IN VARCHAR2, p_claim_org_id IN NUMBER)
26 RETURN BOOLEAN IS
27
28 CURSOR csr_tax_incl_flag(cv_org_id IN NUMBER) IS
29 SELECT claim_tax_incl_flag
30 FROM ozf_sys_parameters_all
31 WHERE org_id = cv_org_id;
32 l_tax_incl_flag VARCHAR2(1);
33
34 BEGIN
35
36 OPEN csr_tax_incl_flag( p_claim_org_id);
37 FETCH csr_tax_incl_flag INTO l_tax_incl_flag;
38 CLOSE csr_tax_incl_flag;
39
40 IF p_claim_class IN ( 'CLAIM', 'CHARGE') AND NVL(l_tax_incl_flag,'F') = 'F' THEN
41 RETURN FALSE;
42 ELSE
43 RETURN TRUE;
44 END IF;
45
46 END Is_Tax_Inclusive;
47
48
49 /*=======================================================================*
50 | PROCEDURE
51 | Update_Payment_Detail
52 |
53 | NOTES
54 |
55 | HISTORY
56 | 20-Apr-2005 Sahana Bug4308188: Overloaded Procedure
57 *=======================================================================*/
58 PROCEDURE Update_Payment_Detail(
59 p_api_version IN NUMBER
60 ,p_init_msg_list IN VARCHAR2
61 ,p_commit IN VARCHAR2
62 ,p_validation_level IN NUMBER
63
64 ,x_return_status OUT NOCOPY VARCHAR2
65 ,x_msg_data OUT NOCOPY VARCHAR2
66 ,x_msg_count OUT NOCOPY NUMBER
67
68 ,p_claim_id IN NUMBER
69 ,p_payment_method IN VARCHAR2
70 ,p_deduction_type IN VARCHAR2
71 ,p_cash_receipt_id IN NUMBER
72 ,p_customer_trx_id IN NUMBER
73 ,p_adjust_id IN NUMBER
74 ,p_settlement_doc_id IN NUMBER
75
76 ,p_settlement_mode IN VARCHAR2
77 ) IS
78 BEGIN
79
80 Update_Payment_Detail(
81 p_api_version => p_api_version
82 ,p_init_msg_list => p_init_msg_list
83 ,p_commit => p_commit
84 ,p_validation_level => p_validation_level
85 ,x_return_status => x_return_status
86 ,x_msg_data => x_msg_data
87 ,x_msg_count => x_msg_count
88 ,p_claim_id => p_claim_id
89 ,p_payment_method => p_payment_method
90 ,p_deduction_type => p_deduction_type
91 ,p_cash_receipt_id => p_cash_receipt_id
92 ,p_customer_trx_id => p_customer_trx_id
93 ,p_adjust_id => p_adjust_id
94 ,p_settlement_doc_id => p_settlement_doc_id
95 ,p_settlement_mode => p_settlement_mode
96 ,p_settlement_amount => NULL);
97
98 END Update_Payment_Detail;
99
100
101 /*=======================================================================*
102 | PROCEDURE
103 | Update_Payment_Detail
104 |
105 | NOTES
106 |
107 | HISTORY
108 | 15-MAR-2002 mchang Create.
109 *=======================================================================*/
110 PROCEDURE Update_Payment_Detail(
111 p_api_version IN NUMBER
112 ,p_init_msg_list IN VARCHAR2
113 ,p_commit IN VARCHAR2
114 ,p_validation_level IN NUMBER
115
116 ,x_return_status OUT NOCOPY VARCHAR2
117 ,x_msg_data OUT NOCOPY VARCHAR2
118 ,x_msg_count OUT NOCOPY NUMBER
119
120 ,p_claim_id IN NUMBER
121 ,p_payment_method IN VARCHAR2
122 ,p_deduction_type IN VARCHAR2
123 ,p_cash_receipt_id IN NUMBER
124 ,p_customer_trx_id IN NUMBER
125 ,p_adjust_id IN NUMBER
126 ,p_settlement_doc_id IN NUMBER
127
128 ,p_settlement_mode IN VARCHAR2
129 ,p_settlement_amount IN NUMBER --Bug4308188
130 )
131 IS
132 l_api_version CONSTANT NUMBER := 1.0;
133 l_api_name CONSTANT VARCHAR2(30) := 'Update_Payment_Detail';
134 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
135 l_return_status VARCHAR2(1);
136
137 l_settlement_doc_tbl OZF_SETTLEMENT_DOC_PVT.settlement_doc_tbl_type;
138 l_counter NUMBER := 1;
139 l_settlement_doc_id NUMBER;
140 l_claim_obj_ver_num NUMBER;
141 l_upd_claim_status BOOLEAN := FALSE;
142 l_dummy_number NUMBER;
143
144 -- Credit Memo/Debit Memo applied to the receipt
145 CURSOR csr_receipt_apply( cv_cash_receipt_id IN NUMBER
146 , cv_customer_trx_id IN NUMBER ) IS
147 SELECT pay.customer_trx_id
148 , pay.cust_trx_type_id
149 , pay.trx_number
150 , rec.apply_date
151 , rec.amount_applied
152 , pay.status
153 FROM ar_receivable_applications rec
154 , ar_payment_schedules pay
155 WHERE rec.cash_receipt_id = cv_cash_receipt_id
156 AND rec.applied_payment_schedule_id = pay.payment_schedule_id
157 AND pay.customer_trx_id = cv_customer_trx_id
158 AND rec.display = 'Y';
159
160 -- Invoice Credit
161 CURSOR csr_invoice_credit( cv_customer_trx_id IN NUMBER ) IS
162 SELECT pay.customer_trx_id
163 , pay.cust_trx_type_id
164 , pay.trx_number
165 , pay.trx_date --?? verify
166 , pay.amount_applied
167 , pay.status
168 FROM ar_payment_schedules pay
169 WHERE pay.customer_trx_id = cv_customer_trx_id;
170
171 -- Chargeback
172 CURSOR csr_chargeback(cv_customer_trx_id IN NUMBER) IS
173 SELECT cust.customer_trx_id --"settlement_id"
174 , cust.cust_trx_type_id --"settlement_type_id"
175 , cust.trx_number --"settlement_number"
176 , cust.trx_date --"settlement_date"
177 , sum(cust_lines.extended_amount) --"settlement_amount"
178 , pay.status --"status_code"
179 FROM ra_customer_trx cust
180 , ra_customer_trx_lines cust_lines
181 , ar_payment_schedules pay
182 WHERE cust.customer_trx_id = cv_customer_trx_id
183 AND cust.customer_trx_id = pay.customer_trx_id
184 AND cust.customer_trx_id = cust_lines.customer_trx_id
185 AND pay.customer_trx_id = cust_lines.customer_trx_id -- fix for bug 4897546
186 AND cust.complete_flag = 'Y'
187 GROUP BY cust.customer_trx_id
188 , cust.cust_trx_type_id
189 , cust.trx_number
190 , cust.trx_date
191 , pay.status;
192
193
194 -- For Overpayment, settled by On Account Credit
195 CURSOR csr_on_account_credit( cv_cash_receipt_id IN NUMBER ) IS
196 SELECT pay.customer_trx_id
197 , pay.payment_schedule_id
198 , pay.trx_number
199 , rec.apply_date
200 , rec.amount_applied
201 , pay.status
202 FROM ar_receivable_applications rec
203 , ar_payment_schedules pay
204 WHERE rec.cash_receipt_id = cv_cash_receipt_id
205 AND rec.applied_payment_schedule_id = pay.payment_schedule_id
206 AND pay.payment_schedule_id = -1
207 AND rec.display='Y'
208 ORDER BY rec.receivable_application_id desc;
209
210 -- For Overpayment, settled by Write-Off
211 CURSOR csr_receipt_writeoff( cv_cash_receipt_id IN NUMBER ) IS
212 SELECT pay.customer_trx_id
213 , pay.payment_schedule_id
214 , pay.trx_number
215 , rec.apply_date
216 , rec.amount_applied
217 , pay.status
218 FROM ar_receivable_applications rec
219 , ar_payment_schedules pay
220 WHERE rec.cash_receipt_id = cv_cash_receipt_id
221 AND rec.applied_payment_schedule_id = pay.payment_schedule_id
222 AND pay.payment_schedule_id = -3
223 AND rec.display='Y'
224 ORDER BY rec.receivable_application_id desc;
225
226 -- For Invoice Deduction, settled by Write-Off
227 CURSOR csr_invoice_writeoff(cv_adjust_id IN NUMBER) IS
228 SELECT adj.adjustment_id --"settlement_id"
229 , adj.receivables_trx_id --"settlement_type_id"
230 , adj.adjustment_number --"settlement_number"
231 , adj.apply_date --"settlement_date"
232 , adj.amount --"settlement_amount"
233 , pay.status --"status_code"
234 FROM ar_adjustments adj
235 , ar_payment_schedules pay
236 WHERE adj.payment_schedule_id = pay.payment_schedule_id
237 AND adj.adjustment_id = cv_adjust_id;
238
239 -- Find out claim object version number
240 CURSOR csr_claim_obj_ver_num(cv_claim_id IN NUMBER) IS
241 SELECT object_version_number
242 FROM ozf_claims
243 WHERE claim_id = cv_claim_id;
244
245 -- Find out claim object version number
246 CURSOR csr_claim_credit_memo(cv_claim_id IN NUMBER) IS
247 SELECT pay.customer_trx_id
248 , pay.cust_trx_type_id
249 , pay.trx_number
250 , sysdate
251 , (oc.amount_settled * -1)
252 , pay.status
253 FROM ar_payment_schedules pay
254 , ozf_claims oc
255 WHERE pay.customer_trx_id = oc.payment_reference_id
256 AND oc.claim_id = cv_claim_id;
257
258 CURSOR csr_settle_doc_obj_ver(cv_settlement_doc_id IN NUMBER) IS
259 SELECT object_version_number
260 FROM ozf_settlement_docs_all
261 WHERE settlement_doc_id = cv_settlement_doc_id;
262
263 --R12.1 Enhancement
264 CURSOR csr_on_acct_only(cv_claim_id IN NUMBER) IS
265 SELECT payment_method,
266 amount
267 FROM ozf_claims
268 WHERE claim_id = cv_claim_id;
269
270 BEGIN
271 -------------------- initialize -----------------------
272 IF OZF_DEBUG_HIGH_ON THEN
273 OZF_Utility_PVT.debug_message(l_full_name||': start');
274 END IF;
275
276 x_return_status := FND_API.g_ret_sts_success;
277
278 ------------------------ start -------------------------
279 -- ---------------
280 -- REG_CREDIT_MEMO
281 -- ---------------
282 IF p_payment_method = 'REG_CREDIT_MEMO' THEN
283 IF p_deduction_type IN ('SOURCE_DED', 'RECEIPT_DED', 'CLAIM') THEN
284 IF p_customer_trx_id IS NOT NULL THEN
285 IF OZF_DEBUG_HIGH_ON THEN
286 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_invoice_credit');
287 END IF;
288 OPEN csr_invoice_credit(p_customer_trx_id);
289 LOOP
290 FETCH csr_invoice_credit INTO l_settlement_doc_tbl(l_counter).settlement_id
291 , l_settlement_doc_tbl(l_counter).settlement_type_id
292 , l_settlement_doc_tbl(l_counter).settlement_number
293 , l_settlement_doc_tbl(l_counter).settlement_date
294 , l_settlement_doc_tbl(l_counter).settlement_amount
295 , l_settlement_doc_tbl(l_counter).status_code;
296 EXIT WHEN csr_invoice_credit%NOTFOUND;
297 l_settlement_doc_tbl(l_counter).claim_id := p_claim_id;
298 l_settlement_doc_tbl(l_counter).payment_method := 'REG_CREDIT_MEMO';
299 l_settlement_doc_tbl(l_counter).settlement_date := SYSDATE;
300 l_counter := l_counter + 1;
301 END LOOP;
302 CLOSE csr_invoice_credit;
303 ELSE
304 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
305 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
306 FND_MESSAGE.set_token('ID', 'p_customer_trx_id');
307 FND_MSG_PUB.add;
308 END IF;
309 RAISE FND_API.g_exc_error;
310 END IF;
311 ELSE
312 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
313 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
314 FND_MSG_PUB.add;
315 END IF;
316 RAISE FND_API.g_exc_error;
317 END IF;
318
319 -- ------------
320 -- CREDIT_MEMO
321 -- ------------
322 ELSIF p_payment_method in ( 'CREDIT_MEMO', 'PREV_OPEN_CREDIT') THEN
323 IF p_deduction_type = 'CLAIM' THEN
324 OPEN csr_claim_credit_memo(p_claim_id);
325 FETCH csr_claim_credit_memo INTO l_settlement_doc_tbl(1).settlement_id
326 , l_settlement_doc_tbl(1).settlement_type_id
327 , l_settlement_doc_tbl(1).settlement_number
328 , l_settlement_doc_tbl(1).settlement_date
329 , l_settlement_doc_tbl(1).settlement_amount
330 , l_settlement_doc_tbl(1).status_code;
331 CLOSE csr_claim_credit_memo;
332 l_settlement_doc_tbl(1).claim_id := p_claim_id;
333 l_settlement_doc_tbl(1).payment_method := 'CREDIT_MEMO';
334 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
335
336 ELSIF p_deduction_type IN ('SOURCE_DED', 'RECEIPT_DED') THEN
337 IF p_cash_receipt_id IS NOT NULL AND
338 p_customer_trx_id IS NOT NULL THEN
339 IF OZF_DEBUG_HIGH_ON THEN
340 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_receipt_apply');
341 END IF;
342 OPEN csr_receipt_apply(p_cash_receipt_id, p_customer_trx_id);
343 FETCH csr_receipt_apply INTO l_settlement_doc_tbl(1).settlement_id
344 , l_settlement_doc_tbl(1).settlement_type_id
345 , l_settlement_doc_tbl(1).settlement_number
346 , l_settlement_doc_tbl(1).settlement_date
347 , l_settlement_doc_tbl(1).settlement_amount
348 , l_settlement_doc_tbl(1).status_code;
349 CLOSE csr_receipt_apply;
350 l_settlement_doc_tbl(1).claim_id := p_claim_id;
351 l_settlement_doc_tbl(1).payment_method := 'CREDIT_MEMO';
352 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
353
354 ELSE
355 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
356 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
357 FND_MESSAGE.set_token('ID', 'p_customer_trx_id');
358 FND_MSG_PUB.add;
359 END IF;
360 RAISE FND_API.g_exc_error;
361 END IF;
362 ELSE
363 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
364 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
365 FND_MSG_PUB.add;
366 END IF;
367 RAISE FND_API.g_exc_error;
368 END IF;
369
370 -- Bug4308188: For deductions/overpayments amount is passed to accomodate
371 -- cases where CM is reapplied on the receipt.
372 IF p_settlement_amount IS NOT NULL THEN
373 l_settlement_doc_tbl(1).settlement_amount := p_settlement_amount ;
374 END IF;
375
376 -- ---------------
377 -- ON_ACCT_CREDIT
378 -- ---------------
379 ELSIF p_payment_method = 'ON_ACCT_CREDIT' THEN
380 IF p_deduction_type = 'RECEIPT_OPM' THEN
381 IF p_cash_receipt_id IS NOT NULL THEN
382 IF OZF_DEBUG_HIGH_ON THEN
383 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_on_account_credit');
384 END IF;
385 OPEN csr_on_account_credit(p_cash_receipt_id);
386 FETCH csr_on_account_credit INTO l_settlement_doc_tbl(1).settlement_id
387 , l_settlement_doc_tbl(1).settlement_type_id
388 , l_settlement_doc_tbl(1).settlement_number
389 , l_settlement_doc_tbl(1).settlement_date
390 , l_settlement_doc_tbl(1).settlement_amount
391 , l_settlement_doc_tbl(1).status_code;
392 CLOSE csr_on_account_credit;
393 l_settlement_doc_tbl(1).claim_id := p_claim_id;
394 l_settlement_doc_tbl(1).payment_method := 'ON_ACCT_CREDIT';
395 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
396
397 ELSE
398 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
399 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
400 FND_MESSAGE.set_token('ID', 'p_customer_trx_id');
401 FND_MSG_PUB.add;
402 END IF;
403 RAISE FND_API.g_exc_error;
404 END IF;
405 ELSE
406 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
407 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
408 FND_MSG_PUB.add;
409 END IF;
410 RAISE FND_API.g_exc_error;
411 END IF;
412
413 --R12.1 Enhancement : For Accounting Only
414 -- ---------------
415 -- ACCOUNTING_ONLY
416 -- ---------------
417 ELSIF p_payment_method = 'ACCOUNTING_ONLY' THEN
418 IF p_deduction_type = 'CLAIM' THEN
419 IF OZF_DEBUG_HIGH_ON THEN
420 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_on_acct_only');
421 END IF;
422 OPEN csr_on_acct_only(p_claim_id);
423 FETCH csr_on_acct_only INTO l_settlement_doc_tbl(1).payment_method
424 ,l_settlement_doc_tbl(1).settlement_amount;
425 CLOSE csr_on_acct_only;
426
427 l_settlement_doc_tbl(1).claim_id := p_claim_id;
428 --l_settlement_doc_tbl(1).payment_method := 'ACCOUNTING_ONLY';
429 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
430 l_settlement_doc_tbl(1).status_code := 'CLOSED';
431 --l_settlement_doc_tbl(1).settlement_amount := 10; --Need to pass the claim amount
432
433 ELSE
434 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
435 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
436 FND_MSG_PUB.add;
437 END IF;
438 RAISE FND_API.g_exc_error;
439 END IF;
440
441 -- ---------------
442 -- CHARGEBACK
443 -- ---------------
444 ELSIF p_payment_method = 'CHARGEBACK' THEN
445 IF p_deduction_type IN ('SOURCE_DED', 'RECEIPT_DED') THEN
446 IF p_customer_trx_id IS NOT NULL THEN
447 IF OZF_DEBUG_HIGH_ON THEN
448 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_chargeback');
449 END IF;
450 OPEN csr_chargeback(p_customer_trx_id);
451 FETCH csr_chargeback INTO l_settlement_doc_tbl(1).settlement_id
452 , l_settlement_doc_tbl(1).settlement_type_id
453 , l_settlement_doc_tbl(1).settlement_number
454 , l_settlement_doc_tbl(1).settlement_date
455 , l_settlement_doc_tbl(1).settlement_amount
456 , l_settlement_doc_tbl(1).status_code;
457 CLOSE csr_chargeback;
458 l_settlement_doc_tbl(1).claim_id := p_claim_id;
459 l_settlement_doc_tbl(1).payment_method := 'CHARGEBACK';
460 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
461
462 ELSE
463 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
464 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
465 FND_MESSAGE.set_token('ID', 'p_customer_trx_id');
466 FND_MSG_PUB.add;
467 END IF;
468 RAISE FND_API.g_exc_error;
469 END IF;
470 ELSE
471 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
472 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
473 FND_MSG_PUB.add;
474 END IF;
475 RAISE FND_API.g_exc_error;
476 END IF;
477
478 -- ---------------
479 -- WRITE_OFF
480 -- ---------------
481 ELSIF p_payment_method = 'WRITE_OFF' THEN
482 IF p_deduction_type = 'SOURCE_DED' THEN
483 IF p_adjust_id IS NOT NULL THEN
484 IF OZF_DEBUG_HIGH_ON THEN
485 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_invoice_writeoff');
486 END IF;
487 OPEN csr_invoice_writeoff(p_adjust_id);
488 FETCH csr_invoice_writeoff INTO l_settlement_doc_tbl(1).settlement_id
489 , l_settlement_doc_tbl(1).settlement_type_id
490 , l_settlement_doc_tbl(1).settlement_number
491 , l_settlement_doc_tbl(1).settlement_date
492 , l_settlement_doc_tbl(1).settlement_amount
493 , l_settlement_doc_tbl(1).status_code;
494 CLOSE csr_invoice_writeoff;
495 l_settlement_doc_tbl(1).claim_id := p_claim_id;
496 --l_settlement_doc_tbl(1).payment_method := 'WRITE_OFF';
497 l_settlement_doc_tbl(1).payment_method := 'ADJUSTMENT';
498 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
499
500 ELSE
501 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
502 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
503 FND_MESSAGE.set_token('ID', 'p_adjust_id');
504 FND_MSG_PUB.add;
505 END IF;
506 RAISE FND_API.g_exc_error;
507 END IF;
508 ELSIF p_deduction_type IN ('RECEIPT_OPM', 'RECEIPT_DED') THEN
509 IF p_cash_receipt_id IS NOT NULL THEN
510 IF OZF_DEBUG_HIGH_ON THEN
511 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_receipt_writeoff');
512 END IF;
513 OPEN csr_receipt_writeoff(p_cash_receipt_id);
514 FETCH csr_receipt_writeoff INTO l_settlement_doc_tbl(1).settlement_id
515 , l_settlement_doc_tbl(1).settlement_type_id
516 , l_settlement_doc_tbl(1).settlement_number
517 , l_settlement_doc_tbl(1).settlement_date
518 , l_settlement_doc_tbl(1).settlement_amount
519 , l_settlement_doc_tbl(1).status_code;
520 CLOSE csr_receipt_writeoff;
521 l_settlement_doc_tbl(1).claim_id := p_claim_id;
522 l_settlement_doc_tbl(1).payment_method := 'WRITE_OFF';
523 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
524
525 ELSE
526 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
527 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
528 FND_MESSAGE.set_token('ID', 'p_adjust_id');
529 FND_MSG_PUB.add;
530 END IF;
531 RAISE FND_API.g_exc_error;
532 END IF;
533 ELSE
534 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
535 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
536 FND_MSG_PUB.add;
537 END IF;
538 RAISE FND_API.g_exc_error;
539 END IF;
540
541 -- ---------------
542 -- DEBIT_MEMO
543 -- ---------------
544 ELSIF p_payment_method in ( 'DEBIT_MEMO', 'PREV_OPEN_DEBIT') THEN
545 IF p_deduction_type = 'CHARGE' THEN
546 OPEN csr_claim_credit_memo(p_claim_id);
547 FETCH csr_claim_credit_memo INTO l_settlement_doc_tbl(1).settlement_id
548 , l_settlement_doc_tbl(1).settlement_type_id
549 , l_settlement_doc_tbl(1).settlement_number
550 , l_settlement_doc_tbl(1).settlement_date
551 , l_settlement_doc_tbl(1).settlement_amount
552 , l_settlement_doc_tbl(1).status_code;
553 CLOSE csr_claim_credit_memo;
554 l_settlement_doc_tbl(1).claim_id := p_claim_id;
555 l_settlement_doc_tbl(1).payment_method := 'DEBIT_MEMO';
556 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
557
558 ELSIF p_deduction_type = 'RECEIPT_OPM' THEN
559 IF p_cash_receipt_id IS NOT NULL AND
560 p_customer_trx_id IS NOT NULL THEN
561 IF OZF_DEBUG_HIGH_ON THEN
562 OZF_Utility_PVT.debug_message(l_full_name||': open cursor::csr_receipt_apply');
563 END IF;
564 OPEN csr_receipt_apply(p_cash_receipt_id, p_customer_trx_id);
565 FETCH csr_receipt_apply INTO l_settlement_doc_tbl(1).settlement_id
566 , l_settlement_doc_tbl(1).settlement_type_id
567 , l_settlement_doc_tbl(1).settlement_number
568 , l_settlement_doc_tbl(1).settlement_date
569 , l_settlement_doc_tbl(1).settlement_amount
570 , l_settlement_doc_tbl(1).status_code;
571 CLOSE csr_receipt_apply;
572 l_settlement_doc_tbl(1).claim_id := p_claim_id;
573 l_settlement_doc_tbl(1).payment_method := 'DEBIT_MEMO';
574 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
575
576 ELSE
577 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
578 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_ID_MISSING');
579 FND_MESSAGE.set_token('ID', 'p_customer_trx_id');
580 FND_MSG_PUB.add;
581 END IF;
582 RAISE FND_API.g_exc_error;
583 END IF;
584 ELSE
585 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
586 FND_MESSAGE.set_name('OZF', 'OZF_SETL_UPDPAY_DETL_ERR');
587 FND_MSG_PUB.add;
588 END IF;
589 RAISE FND_API.g_exc_error;
590 END IF;
591
592 -- Bug4308188: For deductions/overpayments amount is passed to accomodate
593 -- cases where CM is reapplied on the receipt.
594 IF p_settlement_amount IS NOT NULL THEN
595 l_settlement_doc_tbl(1).settlement_amount := p_settlement_amount ;
596 END IF;
597
598 -- ---------------
599 -- RECEIPT
600 -- ---------------
601 ELSIF p_payment_method = 'RECEIPT' THEN
602 l_settlement_doc_tbl(1).settlement_type_id := -4;
603 l_settlement_doc_tbl(1).settlement_date := SYSDATE;
604 l_settlement_doc_tbl(1).claim_id := p_claim_id;
605 END IF;
606
607 IF l_settlement_doc_tbl.count > 0 THEN
608 IF p_settlement_mode IS NULL THEN
609 FOR j IN l_settlement_doc_tbl.FIRST..l_settlement_doc_tbl.LAST LOOP
610 IF ((l_settlement_doc_tbl(j).settlement_id IS NOT NULL AND
611 l_settlement_doc_tbl(j).settlement_id <> FND_API.G_miss_num)
612 OR (l_settlement_doc_tbl(1).payment_method = 'ACCOUNTING_ONLY')) THEN
613 OZF_SETTLEMENT_DOC_PVT.Create_Settlement_Doc(
614 p_api_version_number => l_api_version,
615 p_init_msg_list => p_init_msg_list,
616 p_commit => p_commit,
617 p_validation_level => p_validation_level,
618 x_return_status => l_return_status,
619 x_msg_count => x_msg_count,
620 x_msg_data => x_msg_data,
621 p_settlement_doc_rec => l_settlement_doc_tbl(j),
622 x_settlement_doc_id => l_settlement_doc_id
623 );
624 IF l_return_status = FND_API.g_ret_sts_error THEN
625 RAISE FND_API.g_exc_error;
626 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
627 RAISE FND_API.g_exc_unexpected_error;
628 END IF;
629 -- should we check amount_settled equals to total of settle doc amount before closing claim?
630 --l_upd_claim_status := TRUE;
631 END IF;
632 END LOOP;
633
634 ELSIF p_settlement_mode = 'MASS_SETTLEMENT' THEN
635 FOR j IN l_settlement_doc_tbl.FIRST..l_settlement_doc_tbl.LAST LOOP
636 IF l_settlement_doc_tbl(j).settlement_id IS NOT NULL AND
637 l_settlement_doc_tbl(j).settlement_id <> FND_API.G_miss_num THEN
638 l_settlement_doc_tbl(j).settlement_doc_id := p_settlement_doc_id;
639 OPEN csr_settle_doc_obj_ver(l_settlement_doc_tbl(j).settlement_doc_id);
640 FETCH csr_settle_doc_obj_ver INTO l_settlement_doc_tbl(j).object_version_number;
641 CLOSE csr_settle_doc_obj_ver;
642 l_settlement_doc_tbl(j).payment_status := 'PAID';
643 OZF_SETTLEMENT_DOC_PVT.Update_Settlement_Doc(
644 p_api_version_number => l_api_version,
645 p_init_msg_list => p_init_msg_list,
646 p_commit => p_commit,
647 p_validation_level => p_validation_level,
648 x_return_status => l_return_status,
649 x_msg_count => x_msg_count,
650 x_msg_data => x_msg_data,
651 p_settlement_doc_rec => l_settlement_doc_tbl(j),
652 x_object_version_number => l_dummy_number
653 );
654 IF l_return_status = FND_API.g_ret_sts_error THEN
655 RAISE FND_API.g_exc_error;
656 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
657 RAISE FND_API.g_exc_unexpected_error;
658 END IF;
659 -- should we check amount_settled equals to total of settle doc amount before closing claim?
660 --l_upd_claim_status := TRUE;
661 END IF;
662 END LOOP;
663
664 END IF;
665 END IF; -- end if l_settlement_doc_tbl.count > 0
666
667 IF OZF_DEBUG_HIGH_ON THEN
668 OZF_Utility_PVT.debug_message(l_full_name||': end');
669 END IF;
670 EXCEPTION
671 WHEN FND_API.g_exc_error THEN
672 x_return_status := FND_API.g_ret_sts_error;
673
674 WHEN FND_API.g_exc_unexpected_error THEN
675 x_return_status := FND_API.g_ret_sts_unexp_error ;
676
677 WHEN OTHERS THEN
678 x_return_status := FND_API.g_ret_sts_unexp_error ;
679 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
680 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
681 END IF;
682
683 END Update_Payment_Detail;
684
685
686 /*=======================================================================*
687 | PROCEDURE
688 | Update_Claim_Tax_Amount
689 |
690 | NOTES
691 |
692 | HISTORY
693 | 16-MAY-2002 mchang Create.
694 *=======================================================================*/
695 PROCEDURE Update_Claim_Tax_Amount(
696 p_claim_rec IN OZF_CLAIM_PVT.claim_rec_type
697 ,x_return_status OUT NOCOPY VARCHAR2
698 ,x_msg_data OUT NOCOPY VARCHAR2
699 ,x_msg_count OUT NOCOPY NUMBER
700 )
701 IS
702 l_api_version CONSTANT NUMBER := 1.0;
703 l_api_name CONSTANT VARCHAR2(30) := 'Update_Claim_Tax_Amount';
704 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
705 l_return_status VARCHAR2(1);
706
707 l_acctd_amount_settled NUMBER;
708 l_exchange_rate NUMBER;
709 l_amount_remaining NUMBER;
710 l_acctd_amount_remaining NUMBER;
711 l_acctd_tax_amount NUMBER;
712
713 -- fix for bug 5042046
714 CURSOR csr_function_currency IS
715 SELECT gs.currency_code
716 FROM gl_sets_of_books gs
717 , ozf_sys_parameters org
718 WHERE org.set_of_books_id = gs.set_of_books_id
719 AND org.org_id = MO_GLOBAL.GET_CURRENT_ORG_ID();
720
721 l_function_currency VARCHAR2(15);
722
723 BEGIN
724 -------------------- initialize -----------------------
725 IF OZF_DEBUG_HIGH_ON THEN
726 OZF_Utility_PVT.debug_message(l_full_name||': start');
727 END IF;
728
729 x_return_status := FND_API.g_ret_sts_success;
730
731 ------------------------ start -------------------------
732
733 OPEN csr_function_currency;
734 FETCH csr_function_currency INTO l_function_currency;
735 CLOSE csr_function_currency;
736
737 IF l_function_currency = p_claim_rec.currency_code THEN
738 l_acctd_amount_settled := p_claim_rec.amount_settled;
739 ELSE
740 OZF_UTILITY_PVT.Convert_Currency(
741 P_SET_OF_BOOKS_ID => p_claim_rec.set_of_books_id,
742 P_FROM_CURRENCY => p_claim_rec.currency_code,
743 P_CONVERSION_DATE => p_claim_rec.exchange_rate_date,
744 P_CONVERSION_TYPE => p_claim_rec.exchange_rate_type,
745 P_CONVERSION_RATE => p_claim_rec.exchange_rate,
746 P_AMOUNT => p_claim_rec.amount_settled,
747 X_RETURN_STATUS => l_return_status,
748 X_ACC_AMOUNT => l_acctd_amount_settled,
749 X_RATE => l_exchange_rate
750 );
751 IF l_return_status = FND_API.g_ret_sts_error THEN
752 RAISE FND_API.g_exc_error;
753 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
754 RAISE FND_API.g_exc_unexpected_error;
755 END IF;
756 END IF;
757
758 --Fix for Bug 7296882
759 if (p_claim_rec.amount <> p_claim_rec.amount_settled AND p_claim_rec.amount_adjusted IS NOT NULL ) then
760 l_amount_remaining := p_claim_rec.amount
761 - NVL(p_claim_rec.amount_adjusted, 0)
762 - p_claim_rec.amount_settled;
763
764 else
765 l_amount_remaining := p_claim_rec.amount
766 - NVL(p_claim_rec.amount_adjusted, 0)
767 - p_claim_rec.amount_settled
768 - NVL(p_claim_rec.tax_amount,0);
769 end if;
770
771 IF l_function_currency = p_claim_rec.currency_code THEN
772 l_acctd_amount_remaining := l_amount_remaining;
773 ELSE
774 OZF_UTILITY_PVT.Convert_Currency(
775 P_SET_OF_BOOKS_ID => p_claim_rec.set_of_books_id,
776 P_FROM_CURRENCY => p_claim_rec.currency_code,
777 P_CONVERSION_DATE => p_claim_rec.exchange_rate_date,
778 P_CONVERSION_TYPE => p_claim_rec.exchange_rate_type,
779 P_CONVERSION_RATE => p_claim_rec.exchange_rate,
780 P_AMOUNT => l_amount_remaining,
781 X_RETURN_STATUS => l_return_status,
782 X_ACC_AMOUNT => l_acctd_amount_remaining,
783 X_RATE => l_exchange_rate
784 );
785 IF l_return_status = FND_API.g_ret_sts_error THEN
786 RAISE FND_API.g_exc_error;
787 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
788 RAISE FND_API.g_exc_unexpected_error;
789 END IF;
790 END IF;
791
792 -- Bug3805485: Tax Accounted Amount Calculation
793 IF l_function_currency = p_claim_rec.currency_code THEN
794 l_acctd_tax_amount := NVL(p_claim_rec.tax_amount,0);
795 ELSE
796 OZF_UTILITY_PVT.Convert_Currency(
797 P_SET_OF_BOOKS_ID => p_claim_rec.set_of_books_id,
798 P_FROM_CURRENCY => p_claim_rec.currency_code,
799 P_CONVERSION_DATE => p_claim_rec.exchange_rate_date,
800 P_CONVERSION_TYPE => p_claim_rec.exchange_rate_type,
801 P_CONVERSION_RATE => p_claim_rec.exchange_rate,
802 P_AMOUNT => NVL(p_claim_rec.tax_amount,0),
803 X_RETURN_STATUS => l_return_status,
804 X_ACC_AMOUNT => l_acctd_tax_amount,
805 X_RATE => l_exchange_rate
806 );
807 IF l_return_status = FND_API.g_ret_sts_error THEN
808 RAISE FND_API.g_exc_error;
809 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
810 RAISE FND_API.g_exc_unexpected_error;
811 END IF;
812 END IF;
813
814 IF OZF_DEBUG_HIGH_ON THEN
815 OZF_Utility_PVT.debug_message('claim.amount_remaining = '||l_amount_remaining);
816 OZF_Utility_PVT.debug_message('claim.acctd_amount_remaining = '||l_acctd_amount_remaining);
817 OZF_Utility_PVT.debug_message('claim.amount_settled = '||p_claim_rec.amount_settled);
818 OZF_Utility_PVT.debug_message('claim.acctd_amount_settled = '||l_acctd_amount_settled);
819 OZF_Utility_PVT.debug_message('claim.amount_adjusted = '||p_claim_rec.amount_adjusted);
820 OZF_Utility_PVT.debug_message('claim.tax_amount = '||p_claim_rec.tax_amount);
821 END IF;
822
823 BEGIN
824 UPDATE ozf_claims_all
825 SET tax_amount = NVL(p_claim_rec.tax_amount,0)
826 , acctd_tax_amount = NVL(l_acctd_tax_amount,0)
827 , amount_settled = p_claim_rec.amount_settled
828 , acctd_amount_settled = l_acctd_amount_settled
829 , amount_remaining = l_amount_remaining
830 , acctd_amount_remaining = l_acctd_amount_remaining
831 WHERE claim_id = p_claim_rec.claim_id;
832 EXCEPTION
833 WHEN OTHERS THEN
834 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
835 FND_MESSAGE.set_name('OZF', 'OZF_SETL_DOC_UPD_CLAM_ERR');
836 FND_MSG_PUB.add;
837 END IF;
838 IF OZF_DEBUG_LOW_ON THEN
839 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
840 FND_MESSAGE.Set_Token('TEXT',sqlerrm);
841 FND_MSG_PUB.Add;
842 END IF;
843 RAISE FND_API.g_exc_unexpected_error;
844 END;
845
846
847 IF OZF_DEBUG_HIGH_ON THEN
848 OZF_Utility_PVT.debug_message(l_full_name||': end');
849 END IF;
850 EXCEPTION
851 WHEN FND_API.g_exc_error THEN
852 x_return_status := FND_API.g_ret_sts_error;
853
854 WHEN FND_API.g_exc_unexpected_error THEN
855 x_return_status := FND_API.g_ret_sts_unexp_error ;
856
857 WHEN OTHERS THEN
858 x_return_status := FND_API.g_ret_sts_unexp_error ;
859 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
860 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
861 END IF;
862
863 END Update_Claim_Tax_Amount;
864
865
866 /*=======================================================================*
867 | PROCEDURE
868 | Update_Claim_Line_Status
869 |
870 | NOTES
871 |
872 | HISTORY
873 | 14-NOV-2002 mchang Create.
874 *=======================================================================*/
875 PROCEDURE Update_Claim_Line_Status(
876 p_claim_line_id IN NUMBER
877
878 ,x_return_status OUT NOCOPY VARCHAR2
879 ,x_msg_data OUT NOCOPY VARCHAR2
880 ,x_msg_count OUT NOCOPY NUMBER
881 )
882 IS
883 l_api_version CONSTANT NUMBER := 1.0;
884 l_api_name CONSTANT VARCHAR2(30) := 'Update_Claim_Line_Status';
885 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
886 l_return_status VARCHAR2(1);
887
888 BEGIN
889 -------------------- initialize -----------------------
890 IF OZF_DEBUG_HIGH_ON THEN
891 OZF_Utility_PVT.debug_message(l_full_name||': start');
892 END IF;
893
894 x_return_status := FND_API.g_ret_sts_success;
895
896 ------------------------ start -------------------------
897 BEGIN
898 UPDATE ozf_claim_lines_all
899 SET payment_status = 'PAID'
900 WHERE claim_line_id = p_claim_line_id;
901 EXCEPTION
902 WHEN OTHERS THEN
903 IF OZF_DEBUG_LOW_ON THEN
904 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
905 FND_MESSAGE.Set_Token('TEXT',sqlerrm);
906 FND_MSG_PUB.Add;
907 END IF;
908 RAISE FND_API.g_exc_unexpected_error;
909 END;
910
911 IF OZF_DEBUG_HIGH_ON THEN
912 OZF_Utility_PVT.debug_message(l_full_name||': end');
913 END IF;
914 EXCEPTION
915 WHEN FND_API.g_exc_error THEN
916 x_return_status := FND_API.g_ret_sts_error;
917
918 WHEN FND_API.g_exc_unexpected_error THEN
919 x_return_status := FND_API.g_ret_sts_unexp_error ;
920
921 WHEN OTHERS THEN
922 x_return_status := FND_API.g_ret_sts_unexp_error ;
923 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
924 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
925 END IF;
926
927 END Update_Claim_Line_Status;
928
929
930 /*=======================================================================*
931 | PROCEDURE
932 | process_cancelled_setl_doc
933 |
934 | NOTES
935 |
936 | HISTORY
937 | 07-Jul-2005 Sahana R12: Handle cancellation of settlement document.
938 | Called from RMA and Creditmemo settlement.
939 *=======================================================================*/
940 PROCEDURE process_cancelled_setl_doc(
941 p_claim_id IN NUMBER
942 ,x_return_status OUT NOCOPY VARCHAR2
943 ,x_msg_data OUT NOCOPY VARCHAR2
944 ,x_msg_count OUT NOCOPY NUMBER
945
946 ) IS
947
948 l_api_name CONSTANT VARCHAR2(30) := 'process_cancelled_setl_doc';
949 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
950
951 l_notif_subject VARCHAR2(400);
952 l_notif_body VARCHAR2(4000);
953
954 l_notif_id NUMBER;
955 l_note_id NUMBER;
956 l_sys_date DATE := SYSDATE;
957
958 l_claim_rec OZF_CLAIM_PVT.claim_Rec_Type;
959
960 CURSOR csr_customer_name(cv_cust_account_id IN NUMBER) IS
961 SELECT party_name
962 FROM hz_parties party,
963 hz_cust_accounts_all cust
964 WHERE party.party_id = cust.party_id
965 AND cust.cust_account_id = cv_cust_account_id;
966 l_customer_name hz_parties.party_name%TYPE;
967
968 l_need_to_create VARCHAR2(1);
969 l_claim_history_id NUMBER;
970
971 BEGIN
972
973 x_return_status := FND_API.g_ret_sts_success;
974
975 IF OZF_DEBUG_HIGH_ON THEN
976 OZF_UTILITY_PVT.debug_message(l_full_name ||': start');
977 END IF;
978
979 -- 1. Change Claim Status to Open.
980 -- Note: payment_reference_number is not set to null since this information is used to build
981 -- the next invoice number for check settlement. When the claim status is Open, the payment
982 -- information is not displayed.
983
984 UPDATE ozf_claims
985 SET status_code = 'OPEN',
986 user_status_id = ozf_utility_pvt.get_default_user_status( 'OZF_CLAIM_STATUS', 'OPEN'),
987 amount_remaining = NVL(amount_remaining,0) + amount_settled,
988 acctd_amount_remaining = NVL(acctd_amount_remaining,0)+acctd_amount_settled,
989 amount_settled = 0,
990 acctd_amount_settled = 0,
991 payment_status = null,
992 payment_reference_id = DECODE(payment_method,'RMA',null,payment_reference_id),
993 payment_reference_date = null,
994 payment_reference_number = DECODE(payment_method,'RMA',null,payment_reference_number),
995 last_updated_by = NVL(FND_GLOBAL.user_id,-1),
996 last_update_login = NVL(FND_GLOBAL.conc_login_id,-1),
997 last_update_date = l_sys_date,
998 settled_date = null,
999 settled_by = null
1000 WHERE claim_id = p_claim_id;
1001
1002 OZF_AR_PAYMENT_PVT.Query_Claim(
1003 p_claim_id => p_claim_id
1004 ,x_claim_rec => l_claim_rec
1005 ,x_return_status => x_return_status
1006 );
1007 IF x_return_status = FND_API.g_ret_sts_error THEN
1008 RAISE FND_API.g_exc_error;
1009 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1010 RAISE FND_API.g_exc_unexpected_error;
1011 END IF;
1012
1013
1014 -- Make a call to maintain history
1015 OZF_CLAIM_PVT.Create_Claim_History (
1016 p_api_version => 1.0
1017 ,p_init_msg_list => FND_API.G_FALSE
1018 ,p_commit => FND_API.G_FALSE
1019 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1020 ,x_return_status => x_return_status
1021 ,x_msg_data => x_msg_data
1022 ,x_msg_count => x_msg_count
1023 ,p_claim => l_claim_rec
1024 ,p_event => 'UPDATE'
1025 ,x_need_to_create => l_need_to_create
1026 ,x_claim_history_id => l_claim_history_id
1027 );
1028 IF x_return_status = FND_API.g_ret_sts_error THEN
1029 RAISE FND_API.g_exc_error;
1030 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1031 RAISE FND_API.g_exc_unexpected_error;
1032 END IF;
1033
1034
1035 -- 2. Update the settlement document status if required.
1036 -- This is because a check can be created and cancelled
1037 -- before canceling the invoice document.
1038 -- Fix for bug 4897546
1039 IF l_claim_rec.payment_method in ( 'CHECK','EFT','WIRE','AP_DEFAULT') THEN
1040 UPDATE ozf_settlement_docs_all stlmnt_docs
1041 SET payment_status = (SELECT SUBSTRB(lkp.displayed_field,1,30)
1042 FROM ap_lookup_codes lkp
1043 where lkp.lookup_type = 'CHECK STATE'
1044 and lkp.lookup_code IN (select status_lookup_code
1045 FROM ap_invoice_payments pay, ap_checks chk
1046 WHERE pay.check_id = chk.check_id
1047 AND pay.invoice_payment_id = stlmnt_docs.settlement_id)),
1048 last_updated_by = NVL(FND_GLOBAL.user_id,-1),
1049 last_update_login = NVL(FND_GLOBAL.conc_login_id,-1),
1050 last_update_date = l_sys_date
1051 WHERE claim_id = p_claim_id;
1052 END IF;
1053
1054 -- 3. Build message subject and message body.
1055 -- Then send notification to claim owner and insert notes for the claim.
1056 OPEN csr_customer_name(l_claim_rec.cust_account_id);
1057 FETCH csr_customer_name INTO l_customer_name;
1058 CLOSE csr_customer_name;
1059
1060 fnd_message.set_name('OZF', 'OZF_NTF_STLMNTDOC_CANCEL_SUB');
1061 fnd_message.set_token('DOCUMENT_NUMBER', l_claim_rec.payment_reference_number);
1062 fnd_message.set_token('CLAIM_NUMBER', l_claim_rec.claim_number);
1063 l_notif_subject := substrb(fnd_message.get, 1, 400);
1064
1065 fnd_message.set_name('OZF', 'OZF_NTF_STLMNTDOC_CANCEL_BODY');
1066 fnd_message.set_token ('DOCUMENT_NUMBER', l_claim_rec.payment_reference_number);
1067 fnd_message.set_token('CLAIM_NUMBER',l_claim_rec.claim_number);
1068 fnd_message.set_token('CUSTOMER_NAME',l_customer_name);
1069 fnd_message.set_token('SETTLEMENT_METHOD_NAME',l_claim_rec.payment_method);
1070 l_notif_body := substrb(fnd_message.get, 1, 4000);
1071
1072
1073 ozf_utility_pvt.send_wf_standalone_message(
1074 p_subject => l_notif_subject
1075 , p_body => l_notif_body
1076 , p_send_to_res_id => l_claim_rec.owner_id
1077 , x_notif_id => l_notif_id
1078 , x_return_status => x_return_status );
1079 IF x_return_status = FND_API.g_ret_sts_error THEN
1080 RAISE FND_API.g_exc_error;
1081 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1082 RAISE FND_API.g_exc_unexpected_error;
1083 END IF;
1084
1085 JTF_NOTES_PUB.create_note(
1086 p_api_version => 1.0
1087 ,x_return_status => x_return_status
1088 ,x_msg_count => x_msg_count
1089 ,x_msg_data => x_msg_data
1090 ,p_source_object_id => p_claim_id
1091 ,p_source_object_code => 'AMS_CLAM'
1092 ,p_notes => l_notif_body
1093 ,p_note_status => NULL
1094 ,p_entered_by => FND_GLOBAL.user_id
1095 ,p_entered_date => SYSDATE
1096 ,p_last_updated_by => FND_GLOBAL.user_id
1097 ,x_jtf_note_id => l_note_id
1098 ,p_note_type => 'AMS_JUSTIFICATION'
1099 ,p_last_update_date => l_sys_date
1100 ,p_creation_date => l_sys_date);
1101 IF x_return_status = FND_API.g_ret_sts_error THEN
1102 RAISE FND_API.g_exc_error;
1103 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1104 RAISE FND_API.g_exc_unexpected_error;
1105 END IF;
1106
1107
1108 -- 4. Reverse Accruals for payables settlement if required
1109 OZF_GL_INTERFACE_PVT.Revert_Gl_Entry (
1110 p_api_version => 1.0
1111 ,p_init_msg_list => FND_API.G_FALSE
1112 ,p_commit => FND_API.G_FALSE
1113 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
1114 ,x_return_status => x_return_status
1115 ,x_msg_data => x_msg_data
1116 ,x_msg_count => x_msg_count
1117 ,p_claim_id => l_claim_rec.claim_id );
1118 IF x_return_status = FND_API.g_ret_sts_error THEN
1119 RAISE FND_API.g_exc_error;
1120 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
1121 RAISE FND_API.g_exc_unexpected_error;
1122 END IF;
1123
1124 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claim Number : ' || l_claim_rec.claim_number);
1125 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Reopened. ');
1126 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
1127
1128 IF OZF_DEBUG_HIGH_ON THEN
1129 OZF_UTILITY_PVT.debug_message(l_full_name ||': end');
1130 END IF;
1131
1132 EXCEPTION
1133 WHEN FND_API.G_EXC_ERROR THEN
1134 x_return_status := FND_API.G_RET_STS_ERROR;
1135 FND_MSG_PUB.Count_And_Get(
1136 p_encoded => FND_API.g_false,
1137 p_count => x_msg_count,
1138 p_data => x_msg_data
1139 );
1140
1141 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1142 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1143 FND_MSG_PUB.Count_And_Get(
1144 p_encoded => FND_API.g_false,
1145 p_count => x_msg_count,
1146 p_data => x_msg_data
1147 );
1148
1149 WHEN OTHERS THEN
1150 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1151 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1152 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1153 END IF;
1154 FND_MSG_PUB.Count_And_Get(
1155 p_encoded => FND_API.g_false,
1156 p_count => x_msg_count,
1157 p_data => x_msg_data
1158 );
1159
1160 END process_cancelled_setl_doc;
1161
1162
1163 ---------------------------------------------------------------------
1164 -- PROCEDURE
1165 -- Get_AP_Rec
1166 --
1167 -- HISTORY
1168 -- pnerella Create.
1169 -- 09/10/2001 mchang Modified.
1170 ---------------------------------------------------------------------
1171 PROCEDURE Get_AP_Rec(
1172 p_claim_id IN NUMBER,
1173 p_settlement_amount IN NUMBER,
1174 x_settlement_doc_tbl OUT NOCOPY settlement_doc_tbl_type,
1175 x_invoice_amount OUT NOCOPY NUMBER,
1176 x_return_status OUT NOCOPY VARCHAR2
1177 )
1178 IS
1179
1180 l_api_name CONSTANT VARCHAR2(30) := 'Get_AP_Rec';
1181 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1182
1183 CURSOR csr_get_claim_details(cv_claim_id IN NUMBER) IS
1184 SELECT payment_method
1185 FROM ozf_claims
1186 WHERE claim_id = cv_claim_id;
1187
1188 CURSOR csr_inv_settlement( cv_claim_id IN VARCHAR2)IS
1189 SELECT --pay.invoice_payment_id --"settlement_id"
1190 chk.check_id --"settlement_id"
1191 , chk.payment_method_code --"settlement_type"
1192 , chk.check_id --"settlement_type_id"
1193 , chk.check_number --"settlement_number"
1194 , chk.check_date --"settlement_date"
1195 , sum(pay.amount) --"settlement_amount"
1196 , chk.status_lookup_code --"status_code"
1197 , oc.payment_method -- "payment_method"
1198 , sum(NVL(pay.discount_taken,0))
1199 , inv.invoice_amount
1200 FROM ap_invoice_payments_all pay
1201 , ap_checks_all chk
1202 , ap_invoices_all inv
1203 , ozf_claims_all oc
1204 WHERE pay.check_id = chk.check_id
1205 AND inv.invoice_id = pay.invoice_id
1206 AND oc.claim_id = cv_claim_id
1207 AND oc.payment_reference_number = inv.invoice_num
1208 AND oc.vendor_id = inv.vendor_id
1209 AND oc.vendor_site_id = inv.vendor_site_id
1210 GROUP BY chk.check_id , chk.payment_method_code , chk.check_number
1211 , chk.check_date, chk.status_lookup_code, oc.payment_method, inv.invoice_amount
1212 ORDER BY chk.check_id;
1213
1214 -- Fix for Bug 4897546
1215 CURSOR csr_debit_settlement( cv_claim_id IN VARCHAR2) IS
1216 SELECT inv.invoice_id --"settlement_id"
1217 , inv.invoice_type_lookup_code --"settlement_type"
1218 , null --"settlement_type_id"
1219 , inv.invoice_num --"settlement_number"
1220 , inv.invoice_date --"settlement_date"
1221 , inv.invoice_amount --"settlement_amount"
1222 , AP_INVOICES_PKG.GET_APPROVAL_STATUS( INV.INVOICE_ID, INV.INVOICE_AMOUNT, INV.PAYMENT_STATUS_FLAG, INV.INVOICE_TYPE_LOOKUP_CODE) --"status_code"
1223 , 'AP_DEBIT' --"payment_method"
1224 , NULL
1225 , inv.invoice_amount
1226 FROM ap_invoices_all inv
1227 , ozf_claims_all oc
1228 WHERE oc.claim_id = cv_claim_id
1229 AND oc.payment_reference_number = inv.invoice_num
1230 AND oc.vendor_id = inv.vendor_id
1231 AND oc.vendor_site_id = inv.vendor_site_id;
1232
1233
1234
1235 l_counter NUMBER := 1;
1236 l_payment_method VARCHAR2(30);
1237 l_settlement_amount NUMBER := p_settlement_amount;
1238
1239 BEGIN
1240 x_return_status := FND_API.g_ret_sts_success;
1241
1242 IF OZF_DEBUG_HIGH_ON THEN
1243 OZF_Utility_PVT.debug_message(l_full_name||': start');
1244 END IF;
1245
1246 OPEN csr_get_claim_details(p_claim_id);
1247 FETCH csr_get_claim_details INTO l_payment_method;
1248 CLOSE csr_get_claim_details;
1249
1250 IF l_payment_method IN ('CHECK','EFT','WIRE','AP_DEFAULT') THEN
1251 OPEN csr_inv_settlement(p_claim_id);
1252 LOOP
1253 FETCH csr_inv_settlement INTO x_settlement_doc_tbl(l_counter).settlement_id
1254 , x_settlement_doc_tbl(l_counter).settlement_type
1255 , x_settlement_doc_tbl(l_counter).settlement_type_id
1256 , x_settlement_doc_tbl(l_counter).settlement_number
1257 , x_settlement_doc_tbl(l_counter).settlement_date
1258 , x_settlement_doc_tbl(l_counter).settlement_amount
1259 , x_settlement_doc_tbl(l_counter).status_code
1260 , x_settlement_doc_tbl(l_counter).payment_method
1261 , x_settlement_doc_tbl(l_counter).discount_taken
1262 , x_invoice_amount;
1263 EXIT WHEN csr_inv_settlement%NOTFOUND;
1264 x_settlement_doc_tbl(l_counter).claim_id := p_claim_id;
1265 IF l_settlement_amount <= x_settlement_doc_tbl(l_counter).settlement_amount THEN
1266 x_settlement_doc_tbl(l_counter).settlement_amount
1267 := l_settlement_amount - x_settlement_doc_tbl(l_counter).discount_taken;
1268 RETURN;
1269 END IF;
1270 l_settlement_amount := l_settlement_amount - x_settlement_doc_tbl(l_counter).settlement_amount
1271 - x_settlement_doc_tbl(l_counter).discount_taken;
1272 l_counter := l_counter + 1;
1273 END LOOP;
1274 CLOSE csr_inv_settlement;
1275 x_settlement_doc_tbl.DELETE(l_counter); -- Last Record has junk
1276 ELSE
1277 OPEN csr_debit_settlement(p_claim_id);
1278 LOOP
1279 FETCH csr_debit_settlement INTO x_settlement_doc_tbl(l_counter).settlement_id
1280 , x_settlement_doc_tbl(l_counter).settlement_type
1281 , x_settlement_doc_tbl(l_counter).settlement_type_id
1282 , x_settlement_doc_tbl(l_counter).settlement_number
1283 , x_settlement_doc_tbl(l_counter).settlement_date
1284 , x_settlement_doc_tbl(l_counter).settlement_amount
1285 , x_settlement_doc_tbl(l_counter).status_code
1286 , x_settlement_doc_tbl(l_counter).payment_method
1287 , x_settlement_doc_tbl(l_counter).discount_taken
1288 , x_invoice_amount;
1289 EXIT WHEN csr_debit_settlement%NOTFOUND;
1290 x_settlement_doc_tbl(l_counter).claim_id := p_claim_id;
1291 l_counter := l_counter + 1;
1292 END LOOP;
1293 CLOSE csr_debit_settlement;
1294 x_settlement_doc_tbl.DELETE(l_counter); -- Last Record has junk
1295 END IF;
1296
1297 IF OZF_DEBUG_HIGH_ON THEN
1298 OZF_Utility_PVT.debug_message(l_full_name||': end');
1299 END IF;
1300
1301
1302 EXCEPTION
1303 WHEN OTHERS THEN
1304 IF csr_get_claim_details%ISOPEN THEN
1305 CLOSE csr_get_claim_details;
1306 END IF;
1307
1308 IF csr_inv_settlement%ISOPEN THEN
1309 CLOSE csr_inv_settlement;
1310 END IF;
1311
1312 IF csr_debit_settlement%ISOPEN THEN
1313 CLOSE csr_debit_settlement;
1314 END IF;
1315
1316 x_return_status := FND_API.g_ret_sts_unexp_error;
1317 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1318 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1319 END IF;
1320
1321 END Get_AP_Rec;
1322
1323
1324 ---------------------------------------------------------------------
1325 -- PROCEDURE
1326 -- Get_AR_Rec
1327 --
1328 -- HISTORY
1329 -- pnerella Create.
1330 -- 05/30/2001 mchang Modified.
1331 ---------------------------------------------------------------------
1332 PROCEDURE Get_AR_Rec(
1333 p_claim_id IN NUMBER,
1334 p_claim_number IN VARCHAR2,
1335 p_payment_method IN VARCHAR2,
1336 p_settlement_amount IN NUMBER,
1337 x_settlement_doc_tbl OUT NOCOPY settlement_doc_tbl_type,
1338 x_return_status OUT NOCOPY VARCHAR2
1339 )
1340 IS
1341
1342 -- Fix for Bug 7293326
1343 CURSOR csr_ar_settlement(cv_claim_id IN VARCHAR2, cv_claim_number IN VARCHAR2) IS
1344 SELECT cust.customer_trx_id --"settlement_id"
1345 , cust.cust_trx_type_id --"settlement_type_id"
1346 , cust.trx_number --"settlement_number"
1347 , cust.trx_date --"settlement_date"
1348 , pay.amount_due_original --"settlement_amount"
1349 , pay.status --"status_code"
1350 FROM ra_customer_trx cust,
1351 ra_customer_trx_lines lines,
1352 ar_payment_schedules pay
1353 where cust.customer_trx_id = lines.customer_trx_id
1354 and cust.customer_trx_id = pay.customer_trx_id
1355 and cust.complete_flag = 'Y'
1356 AND lines.interface_line_attribute2 = cv_claim_id
1357 AND lines.interface_line_attribute1 = cv_claim_number;
1358
1359 -- Modified for 4953844
1360 -- Modified for Bugfix 5199354
1361 CURSOR csr_rma_settlement(cv_claim_id IN NUMBER) IS
1362 select pay.customer_trx_id --"settlement_id"
1363 , pay.cust_trx_type_id --"settlement_type_id"
1364 , pay.trx_number --"settlement_number"
1365 , pay.trx_date --"settlement_date"
1366 , sum(pay.amount_due_original) --"settlement_amount"
1367 from ar_payment_schedules pay , ( select distinct customer_trx_id
1368 from ozf_claim_lines ln , ra_customer_trx_lines cm_line
1369 where cm_line.line_type = 'LINE'
1370 and cm_line.interface_line_context = 'ORDER ENTRY' --added filter for 4940650
1371 and cm_line.interface_line_attribute6 = to_char(ln.payment_reference_id) -- order line id
1372 and ln.claim_id = cv_claim_id) cla
1373 where pay.customer_trx_id = cla.customer_trx_id
1374 group by pay.customer_trx_id, pay.cust_trx_type_id,pay.trx_number, pay.trx_date;
1375
1376
1377 l_counter NUMBER := 1;
1378
1379 BEGIN
1380 x_return_status := FND_API.g_ret_sts_success;
1381
1382 IF p_payment_method = 'RMA' THEN
1383 OPEN csr_rma_settlement(p_claim_id);
1384 LOOP
1385 FETCH csr_rma_settlement INTO x_settlement_doc_tbl(l_counter).settlement_id
1386 , x_settlement_doc_tbl(l_counter).settlement_type_id
1387 , x_settlement_doc_tbl(l_counter).settlement_number
1388 , x_settlement_doc_tbl(l_counter).settlement_date
1389 , x_settlement_doc_tbl(l_counter).settlement_amount;
1390 -- , x_settlement_doc_tbl(l_counter).claim_line_id;
1391 --, x_settlement_doc_tbl(l_counter).status_code;
1392 EXIT WHEN csr_rma_settlement%NOTFOUND;
1393 x_settlement_doc_tbl(l_counter).claim_id := p_claim_id;
1394 x_settlement_doc_tbl(l_counter).payment_method := 'RMA';
1395 IF ABS(p_settlement_amount) < ABS(x_settlement_doc_tbl(l_counter).settlement_amount) THEN
1396 x_settlement_doc_tbl(l_counter).settlement_amount := p_settlement_amount * -1;
1397 END IF;
1398 l_counter := l_counter + 1;
1399 END LOOP;
1400 CLOSE csr_rma_settlement;
1401 ELSE
1402 OPEN csr_ar_settlement(TO_CHAR(p_claim_id), p_claim_number);
1403 LOOP
1404 FETCH csr_ar_settlement INTO x_settlement_doc_tbl(l_counter).settlement_id
1405 , x_settlement_doc_tbl(l_counter).settlement_type_id
1406 , x_settlement_doc_tbl(l_counter).settlement_number
1407 , x_settlement_doc_tbl(l_counter).settlement_date
1408 , x_settlement_doc_tbl(l_counter).settlement_amount
1409 , x_settlement_doc_tbl(l_counter).status_code;
1410 EXIT WHEN csr_ar_settlement%NOTFOUND;
1411 x_settlement_doc_tbl(l_counter).claim_id := p_claim_id;
1412 /*
1413 IF ABS(p_settlement_amount) < ABS(x_settlement_doc_tbl(l_counter).settlement_amount) THEN
1414 x_settlement_doc_tbl(l_counter).settlement_amount := p_settlement_amount * -1;
1415 END IF;
1416 */
1417 l_counter := l_counter + 1;
1418 END LOOP;
1419 CLOSE csr_ar_settlement;
1420 END IF;
1421 -- x_settlement_doc_tbl.DELETE(l_counter); -- Last Record has junk
1422
1423 EXCEPTION
1424 WHEN OTHERS THEN
1425 x_return_status := FND_API.g_ret_sts_unexp_error;
1426 IF OZF_DEBUG_LOW_ON THEN
1427 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
1428 FND_MESSAGE.Set_Token('TEXT','Get_AR_Rec : Error');
1429 FND_MSG_PUB.Add;
1430 END IF;
1431
1432 END Get_AR_Rec;
1433
1434
1435 ---------------------------------------------------------------------
1436 -- PROCEDURE
1437 -- Get_RMA_Setl_Doc_Tbl
1438 --
1439 -- HISTORY
1440 -- 11/10/2002 mchang Created.
1441 ---------------------------------------------------------------------
1442 PROCEDURE Get_RMA_Setl_Doc_Tbl(
1443 p_claim_id IN NUMBER,
1444 x_settlement_doc_tbl OUT NOCOPY settlement_doc_tbl_type,
1445 x_total_rma_cr_amount OUT NOCOPY NUMBER,
1446 x_return_status OUT NOCOPY VARCHAR2
1447 )
1448 IS
1449 CURSOR csr_rma_setl_doc(cv_claim_id IN NUMBER) IS
1450 SELECT settlement_id
1451 , settlement_type_id
1452 , settlement_number
1453 , settlement_date
1454 , settlement_amount
1455 , claim_id
1456 , claim_line_id
1457 , payment_method
1458 FROM ozf_settlement_docs
1459 WHERE claim_id = cv_claim_id;
1460
1461 l_counter NUMBER := 1;
1462 l_total_rma_cr_amount NUMBER := 0;
1463
1464 BEGIN
1465 x_return_status := FND_API.g_ret_sts_success;
1466
1467 OPEN csr_rma_setl_doc(p_claim_id);
1468 LOOP
1469 FETCH csr_rma_setl_doc INTO x_settlement_doc_tbl(l_counter).settlement_id
1470 , x_settlement_doc_tbl(l_counter).settlement_type_id
1471 , x_settlement_doc_tbl(l_counter).settlement_number
1472 , x_settlement_doc_tbl(l_counter).settlement_date
1473 , x_settlement_doc_tbl(l_counter).settlement_amount
1474 , x_settlement_doc_tbl(l_counter).claim_id
1475 , x_settlement_doc_tbl(l_counter).claim_line_id
1476 , x_settlement_doc_tbl(l_counter).payment_method;
1477 EXIT WHEN csr_rma_setl_doc%NOTFOUND;
1478 IF x_settlement_doc_tbl(l_counter).settlement_id IS NOT NULL ANd
1479 x_settlement_doc_tbl(l_counter).settlement_id <> FND_API.g_miss_num THEN
1480 l_total_rma_cr_amount := l_total_rma_cr_amount + ABS(x_settlement_doc_tbl(l_counter).settlement_amount);
1481 END IF;
1482 l_counter := l_counter + 1;
1483 END LOOP;
1484 CLOSE csr_rma_setl_doc;
1485 x_settlement_doc_tbl.DELETE(l_counter); -- Last Record has junk
1486
1487 x_total_rma_cr_amount := l_total_rma_cr_amount;
1488
1489 EXCEPTION
1490 WHEN OTHERS THEN
1491 x_return_status := FND_API.g_ret_sts_unexp_error;
1492 IF OZF_DEBUG_LOW_ON THEN
1493 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
1494 FND_MESSAGE.Set_Token('TEXT','Get_RMA_Setl_Doc_Tbl : Error');
1495 FND_MSG_PUB.Add;
1496 END IF;
1497
1498 END Get_RMA_Setl_Doc_Tbl;
1499
1500
1501 ---------------------------------------------------------------------
1502 -- PROCEDURE
1503 -- Update_Claim_From_Settlement
1504 --
1505 -- HISTORY
1506 -- pnerella Create.
1507 -- 30-MAY-2001 mchang Modified.
1508 -- 09-AUG-2001 mchang Update fund paid amount to sum of utilizations
1509 -- associated to a claim when claim status is 'CLOSEd.
1510 -- 26-Oct-2005 Sahana Bug4638514: Update paid amount in
1511 -- OZF_OBJECT_FUND_SUMMARY.
1512 ---------------------------------------------------------------------
1513 PROCEDURE Update_Claim_From_Settlement(
1514 p_api_version_number IN NUMBER,
1515 p_init_msg_list IN VARCHAR2,
1516 p_commit IN VARCHAR2,
1517 p_validation_level IN NUMBER,
1518
1519 x_return_status OUT NOCOPY VARCHAR2,
1520 x_msg_count OUT NOCOPY NUMBER,
1521 x_msg_data OUT NOCOPY VARCHAR2,
1522
1523 p_claim_id IN NUMBER,
1524 p_object_version_number IN NUMBER,
1525 p_status_code IN VARCHAR2,
1526 p_payment_status IN VARCHAR2
1527 )
1528 IS
1529 l_api_version_number CONSTANT NUMBER := 1.0;
1530 l_api_name CONSTANT VARCHAR2(30) := 'Update_Claim_From_Settlement';
1531 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1532 l_return_status VARCHAR2(1);
1533
1534 l_claim_rec OZF_CLAIM_PVT.claim_Rec_Type;
1535 l_claim_new_obj_num NUMBER;
1536
1537 l_fund_rec OZF_Funds_PVT.fund_rec_type;
1538 l_function_currency VARCHAR2(15);
1539 l_fund_currency VARCHAR2(15);
1540 l_exc_rate NUMBER;
1541 l_exc_type VARCHAR2(30);
1542 l_exc_date DATE;
1543 l_counter NUMBER := 1;
1544 l_adj_util_result_status VARCHAR2(15);
1545
1546 l_fund_id NUMBER;
1547 l_component_type VARCHAR2(30);
1548 l_component_id NUMBER;
1549 l_acctd_paid_amt NUMBER;
1550 l_fund_curr_paid_amt NUMBER;
1551 l_plan_curr_paid_amt NUMBER;
1552 l_univ_curr_paid_amt NUMBER;
1553
1554 CURSOR csr_user_status_id(cv_status_code IN VARCHAR2) IS
1555 SELECT user_status_id
1556 FROM ams_user_statuses_vl
1557 WHERE system_status_type = 'OZF_CLAIM_STATUS'
1558 AND default_flag = 'Y'
1559 AND system_status_code = cv_status_code;
1560
1561 CURSOR csr_get_paid_amt(cv_claim_id IN NUMBER) IS
1562 SELECT fu.fund_id,
1563 fu.component_type,
1564 fu.component_id,
1565 SUM(lu.acctd_amount),
1566 SUM(lu.plan_curr_amount),
1567 SUM(lu.univ_curr_amount)
1568 FROM ozf_claim_lines_util_all lu
1569 ,ozf_claim_lines_all l
1570 ,ozf_funds_utilized_all_b fu
1571 WHERE l.claim_line_id = lu.claim_line_id
1572 AND fu.utilization_id = lu.utilization_id
1573 AND l.claim_id = cv_claim_id
1574 GROUP BY fu.fund_id,fu.component_type,fu.component_id;
1575
1576 CURSOR csr_fund_rec(cv_fund_id IN NUMBER) IS
1577 SELECT object_version_number
1578 , paid_amt
1579 , currency_code_tc
1580 , exchange_rate
1581 , exchange_rate_type
1582 , exchange_rate_date
1583 /* BEGIN OF BUG2740879 FIXING 01/21/2003 */
1584 --FROM ozf_funds
1585 FROM ozf_funds_all_b
1586 /* END OF BUG2740879 FIXING 01/21/2003 */
1587 WHERE fund_id = cv_fund_id;
1588
1589 -- fix for bug 5042046
1590 CURSOR csr_function_currency IS
1591 SELECT gs.currency_code
1592 FROM gl_sets_of_books gs
1593 , ozf_sys_parameters org
1594 WHERE org.set_of_books_id = gs.set_of_books_id
1595 AND org.org_id = MO_GLOBAL.GET_CURRENT_ORG_ID();
1596
1597 CURSOR csr_custom_status_id(p_claim_id IN NUMBER, p_status_code IN VARCHAR2) IS
1598 SELECT close_status_id
1599 FROM ozf_claims_all oc,
1600 ams_user_statuses_vl us
1601 WHERE oc.claim_id = p_claim_id
1602 AND oc.close_status_id = us.user_status_id
1603 AND us.system_status_type = 'OZF_CLAIM_STATUS'
1604 AND us.system_status_code = p_status_code;
1605
1606 l_objfundsum_rec ozf_objfundsum_pvt.objfundsum_rec_type := NULL;
1607 l_dummy_id NUMBER;
1608
1609 --R12.1 Enhancement : Price Protection
1610 CURSOR csr_claim_rec(p_claim_id IN NUMBER) IS
1611 SELECT source_object_class,
1612 created_by
1613 FROM ozf_claims_all
1614 WHERE claim_id = p_claim_id;
1615
1616 CURSOR csr_claim_lines(cv_claim_id IN NUMBER) IS
1617 SELECT ln.claim_line_id
1618 , ln.object_version_number
1619 , ln.last_update_date
1620 , ln.last_updated_by
1621 , ln.creation_date
1622 , ln.created_by
1623 , ln.last_update_login
1624 , ln.request_id
1625 , ln.program_application_id
1626 , ln.program_update_date
1627 , ln.program_id
1628 , ln.created_from
1629 , ln.claim_id
1630 , ln.line_number
1631 , ln.split_from_claim_line_id
1632 , ln.amount
1633 , ln.claim_currency_amount
1634 , ln.acctd_amount
1635 , ln.currency_code
1636 , ln.exchange_rate_type
1637 , ln.exchange_rate_date
1638 , ln.exchange_rate
1639 , ln.set_of_books_id
1640 , ln.valid_flag
1641 , ln.source_object_id
1642 , ln.source_object_class
1643 , ln.source_object_type_id
1644 , ln.source_object_line_id
1645 , ln.plan_id
1646 , ln.offer_id
1647 , ln.utilization_id
1648 , ln.payment_method
1649 , ln.payment_reference_id
1650 , ln.payment_reference_number
1651 , ln.payment_reference_date
1652 , ln.voucher_id
1653 , ln.voucher_number
1654 , ln.payment_status
1655 , ln.approved_flag
1656 , ln.approved_date
1657 , ln.approved_by
1658 , ln.settled_date
1659 , ln.settled_by
1660 , ln.performance_complete_flag
1661 , ln.performance_attached_flag
1662 , ln.item_id
1663 , ln.item_description
1664 , ln.quantity
1665 , ln.quantity_uom
1666 , ln.rate
1667 , ln.activity_type
1668 , ln.activity_id
1669 , ln.related_cust_account_id
1670 , ln.relationship_type
1671 , ln.earnings_associated_flag
1672 , ln.comments
1673 , ln.tax_code
1674 , ln.attribute_category
1675 , ln.attribute1
1676 , ln.attribute2
1677 , ln.attribute3
1678 , ln.attribute4
1679 , ln.attribute5
1680 , ln.attribute6
1681 , ln.attribute7
1682 , ln.attribute8
1683 , ln.attribute9
1684 , ln.attribute10
1685 , ln.attribute11
1686 , ln.attribute12
1687 , ln.attribute13
1688 , ln.attribute14
1689 , ln.attribute15
1690 , ln.org_id
1691 , ln.sale_date
1692 , ln.item_type
1693 , ln.tax_amount
1694 , ln.claim_curr_tax_amount
1695 , ln.activity_line_id
1696 , ln.offer_type
1697 , ln.prorate_earnings_flag
1698 , ln.earnings_end_date
1699 , ln.dpp_cust_account_id
1700 FROM ozf_claim_lines ln
1701 WHERE ln.claim_id = cv_claim_id;
1702
1703 l_line_detail_tbl DPP_SLA_CLAIM_EXTRACT_PUB.claim_line_tbl_type;
1704 l_line_counter NUMBER := 1;
1705 l_msg_count NUMBER;
1706 l_msg_data VARCHAR2(20000);
1707
1708 BEGIN
1709 --------------------- initialize -----------------------
1710 SAVEPOINT Update_Claim_From_Settlement;
1711
1712 -- Standard call to check for call compatibility.
1713 IF NOT FND_API.Compatible_API_Call (
1714 l_api_version_number,
1715 p_api_version_number,
1716 l_api_name,
1717 G_PKG_NAME
1718 ) THEN
1719 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1720 END IF;
1721
1722 -- Initialize message list if p_init_msg_list is set to TRUE.
1723 IF FND_API.to_Boolean(p_init_msg_list) THEN
1724 FND_MSG_PUB.initialize;
1725 END IF;
1726
1727 x_return_status := FND_API.g_ret_sts_success;
1728
1729 --------------------- start -----------------------
1730 IF OZF_DEBUG_HIGH_ON THEN
1731 OZF_Utility_PVT.debug_message(l_full_name||': start');
1732 END IF;
1733
1734
1735 l_claim_rec.claim_id := p_claim_id;
1736 l_claim_rec.object_version_number := p_object_version_number;
1737 l_claim_rec.payment_status := p_payment_status;
1738 l_claim_rec.status_code := p_status_code;
1739
1740 OPEN csr_custom_status_id(p_claim_id, p_status_code);
1741 FETCH csr_custom_status_id INTO l_claim_rec.user_status_id;
1742 CLOSE csr_custom_status_id;
1743
1744 IF l_claim_rec.user_status_id IS NULL THEN
1745 OPEN csr_user_status_id(p_status_code);
1746 FETCH csr_user_status_id INTO l_claim_rec.user_status_id;
1747 CLOSE csr_user_status_id;
1748 END IF;
1749
1750 BEGIN
1751 UPDATE ozf_claims_all
1752 SET payment_status = p_payment_status
1753 , status_code = p_status_code
1754 , user_status_id = l_claim_rec.user_status_id
1755 WHERE claim_id = p_claim_id;
1756 EXCEPTION
1757 WHEN OTHERS THEN
1758 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
1759 FND_MESSAGE.set_name('OZF', 'OZF_SETL_DOC_UPD_CLAM_ERR');
1760 FND_MSG_PUB.add;
1761 END IF;
1762 IF OZF_DEBUG_LOW_ON THEN
1763 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
1764 FND_MESSAGE.Set_Token('TEXT',sqlerrm);
1765 FND_MSG_PUB.Add;
1766 END IF;
1767 RAISE FND_API.g_exc_unexpected_error;
1768 END;
1769
1770
1771 IF p_status_code = 'CLOSED' THEN
1772 OZF_CLAIM_ACCRUAL_PVT.Adjust_Fund_Utilization(
1773 p_api_version => l_api_version_number
1774 ,p_init_msg_list => FND_API.g_false
1775 ,p_commit => FND_API.g_false
1776 ,p_validation_level => FND_API.g_valid_level_full
1777 ,x_return_status => l_return_status
1778 ,x_msg_count => x_msg_count
1779 ,x_msg_data => x_msg_data
1780 ,p_claim_id => p_claim_id
1781 ,p_mode => 'UPD_SCAN'
1782 ,x_next_status => l_adj_util_result_status
1783 );
1784 IF l_return_status = FND_API.g_ret_sts_error THEN
1785 RAISE FND_API.g_exc_error;
1786 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1787 RAISE FND_API.g_exc_unexpected_error;
1788 END IF;
1789
1790 IF l_adj_util_result_status = 'CLOSED' THEN
1791 -- Update fund paid amount to sum of utilizations associated to a claim
1792 OPEN csr_function_currency;
1793 FETCH csr_function_currency INTO l_function_currency;
1794 CLOSE csr_function_currency;
1795
1796 OPEN csr_get_paid_amt(p_claim_id);
1797 LOOP
1798 FETCH csr_get_paid_amt
1799 INTO l_fund_id, l_component_type, l_component_id,
1800 l_acctd_paid_amt, l_plan_curr_paid_amt, l_univ_curr_paid_amt;
1801 EXIT WHEN csr_get_paid_amt%NOTFOUND;
1802
1803 OZF_Funds_PVT.Init_Fund_Rec( x_fund_rec => l_fund_rec);
1804
1805 l_fund_rec.fund_id := l_fund_id;
1806
1807 OPEN csr_fund_rec(l_fund_id);
1808 FETCH csr_fund_rec INTO l_fund_rec.object_version_number
1809 , l_fund_rec.paid_amt
1810 , l_fund_currency
1811 , l_exc_rate
1812 , l_exc_type
1813 , l_exc_date;
1814 CLOSE csr_fund_rec;
1815
1816 IF OZF_DEBUG_HIGH_ON THEN
1817 OZF_Utility_PVT.debug_message('Original Fund Paid Amount = '||l_fund_rec.paid_amt);
1818 END IF;
1819
1820
1821 IF l_fund_currency = l_function_currency THEN
1822 l_fund_curr_paid_amt := l_acctd_paid_amt;
1823 ELSE
1824 -- Currency Conversion: Utilized Acctd Amount --> Fund Paid Amount
1825 OZF_UTILITY_PVT.Convert_Currency(
1826 x_return_status => l_return_status
1827 ,p_from_currency => l_function_currency
1828 ,p_to_currency => l_fund_currency
1829 ,p_conv_date => SYSDATE
1830 ,p_from_amount => l_acctd_paid_amt
1831 ,x_to_amount => l_fund_curr_paid_amt
1832 );
1833 IF l_return_status = FND_API.g_ret_sts_error THEN
1834 RAISE FND_API.g_exc_error;
1835 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1836 RAISE FND_API.g_exc_unexpected_error;
1837 END IF;
1838 END IF;
1839
1840 IF l_fund_curr_paid_amt IS NOT NULL THEN
1841 l_fund_rec.paid_amt := NVL(l_fund_rec.paid_amt, 0) + l_fund_curr_paid_amt;
1842 END IF;
1843
1844 IF OZF_DEBUG_HIGH_ON THEN
1845 OZF_Utility_PVT.debug_message('Updated Fund Paid Amount = '||l_fund_rec.paid_amt);
1846 END IF;
1847
1848 -- Update Fund with paid_amt
1849 OZF_Funds_PVT.Update_Fund(
1850 p_api_version => 1.0
1851 ,p_init_msg_list => FND_API.g_false
1852 ,p_commit => FND_API.g_false
1853 ,p_validation_level => FND_API.g_valid_level_full
1854 ,x_return_status => l_return_status
1855 ,x_msg_count => x_msg_count
1856 ,x_msg_data => x_msg_data
1857 ,p_fund_rec => l_fund_rec
1858 ,p_mode => 'ADJUST'
1859 );
1860 IF l_return_status = FND_API.g_ret_sts_error THEN
1861 RAISE FND_API.G_EXC_ERROR;
1862 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1863 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1864 END IF;
1865
1866 l_objfundsum_rec.fund_id := l_fund_id;
1867 l_objfundsum_rec.object_type := l_component_type;
1868 l_objfundsum_rec.object_id := l_component_id;
1869 l_objfundsum_rec.paid_amt := l_fund_curr_paid_amt;
1870 l_objfundsum_rec.plan_curr_paid_amt := l_plan_curr_paid_amt;
1871 l_objfundsum_rec.univ_curr_paid_amt := l_univ_curr_paid_amt;
1872
1873 ozf_objfundsum_pvt.process_objfundsum(
1874 p_api_version => 1.0,
1875 p_init_msg_list => Fnd_Api.G_FALSE,
1876 p_validation_level => Fnd_Api.G_VALID_LEVEL_NONE,
1877 p_objfundsum_rec => l_objfundsum_rec,
1878 x_return_status => l_return_status,
1879 x_msg_count => x_msg_count,
1880 x_msg_data => x_msg_data,
1881 x_objfundsum_id => l_dummy_id
1882 );
1883 IF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
1884 RAISE fnd_api.g_exc_unexpected_error;
1885 ELSIF l_return_status = fnd_api.g_ret_sts_error THEN
1886 RAISE fnd_api.g_exc_error;
1887 END IF;
1888
1889 END LOOP;
1890 CLOSE csr_get_paid_amt;
1891
1892 END IF; -- end of if adjst_over_utilization result = closed
1893 END IF; -- end of if p_status_code='CLOSED'
1894
1895 ------------------------------------------------
1896 -- Raise Business Event (when claim is paid.) --
1897 ------------------------------------------------
1898 OZF_CLAIM_SETTLEMENT_PVT.Raise_Business_Event(
1899 p_api_version => l_api_version_number
1900 ,p_init_msg_list => FND_API.g_false
1901 ,p_commit => FND_API.g_false
1902 ,p_validation_level => FND_API.g_valid_level_full
1903 ,x_return_status => l_return_status
1904 ,x_msg_data => x_msg_data
1905 ,x_msg_count => x_msg_count
1906
1907 ,p_claim_id => p_claim_id
1908 ,p_old_status => 'PENDING_CLOSE'
1909 ,p_new_status => 'CLOSED'
1910 ,p_event_name => 'oracle.apps.ozf.claim.paymentPaid'
1911 );
1912 IF l_return_status = FND_API.g_ret_sts_error THEN
1913 RAISE FND_API.g_exc_error;
1914 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1915 RAISE FND_API.g_exc_unexpected_error;
1916 END IF;
1917 --R12.1 Enhancement : Call Price Protection Extract API START
1918 OPEN csr_claim_rec(p_claim_id);
1919 FETCH csr_claim_rec INTO l_claim_rec.source_object_class
1920 , l_claim_rec.created_by;
1921
1922 CLOSE csr_claim_rec;
1923 -- Fix For Bug 7443072
1924 IF l_claim_rec.source_object_class IN ('PPCUSTOMER','PPVENDOR','PPINCVENDOR')
1925 THEN
1926 OPEN csr_claim_lines(p_claim_id);
1927 LOOP
1928 FETCH csr_claim_lines into
1929 l_line_detail_tbl(l_line_counter).claim_line_id
1930 , l_line_detail_tbl(l_line_counter).object_version_number
1931 , l_line_detail_tbl(l_line_counter).last_update_date
1932 , l_line_detail_tbl(l_line_counter).last_updated_by
1933 , l_line_detail_tbl(l_line_counter).creation_date
1934 , l_line_detail_tbl(l_line_counter).created_by
1935 , l_line_detail_tbl(l_line_counter).last_update_login
1936 , l_line_detail_tbl(l_line_counter).request_id
1937 , l_line_detail_tbl(l_line_counter).program_application_id
1938 , l_line_detail_tbl(l_line_counter).program_update_date
1939 , l_line_detail_tbl(l_line_counter).program_id
1940 , l_line_detail_tbl(l_line_counter).created_from
1941 , l_line_detail_tbl(l_line_counter).claim_id
1942 , l_line_detail_tbl(l_line_counter).line_number
1943 , l_line_detail_tbl(l_line_counter).split_from_claim_line_id
1944 , l_line_detail_tbl(l_line_counter).amount
1945 , l_line_detail_tbl(l_line_counter).claim_currency_amount
1946 , l_line_detail_tbl(l_line_counter).acctd_amount
1947 , l_line_detail_tbl(l_line_counter).currency_code
1948 , l_line_detail_tbl(l_line_counter).exchange_rate_type
1949 , l_line_detail_tbl(l_line_counter).exchange_rate_date
1950 , l_line_detail_tbl(l_line_counter).exchange_rate
1951 , l_line_detail_tbl(l_line_counter).set_of_books_id
1952 , l_line_detail_tbl(l_line_counter).valid_flag
1953 , l_line_detail_tbl(l_line_counter).source_object_id
1954 , l_line_detail_tbl(l_line_counter).source_object_class
1955 , l_line_detail_tbl(l_line_counter).source_object_type_id
1956 , l_line_detail_tbl(l_line_counter).source_object_line_id
1957 , l_line_detail_tbl(l_line_counter).plan_id
1958 , l_line_detail_tbl(l_line_counter).offer_id
1959 , l_line_detail_tbl(l_line_counter).utilization_id
1960 , l_line_detail_tbl(l_line_counter).payment_method
1961 , l_line_detail_tbl(l_line_counter).payment_reference_id
1962 , l_line_detail_tbl(l_line_counter).payment_reference_number
1963 , l_line_detail_tbl(l_line_counter).payment_reference_date
1964 , l_line_detail_tbl(l_line_counter).voucher_id
1965 , l_line_detail_tbl(l_line_counter).voucher_number
1966 , l_line_detail_tbl(l_line_counter).payment_status
1967 , l_line_detail_tbl(l_line_counter).approved_flag
1968 , l_line_detail_tbl(l_line_counter).approved_date
1969 , l_line_detail_tbl(l_line_counter).approved_by
1970 , l_line_detail_tbl(l_line_counter).settled_date
1971 , l_line_detail_tbl(l_line_counter).settled_by
1972 , l_line_detail_tbl(l_line_counter).performance_complete_flag
1973 , l_line_detail_tbl(l_line_counter).performance_attached_flag
1974 , l_line_detail_tbl(l_line_counter).item_id
1975 , l_line_detail_tbl(l_line_counter).item_description
1976 , l_line_detail_tbl(l_line_counter).quantity
1977 , l_line_detail_tbl(l_line_counter).quantity_uom
1978 , l_line_detail_tbl(l_line_counter).rate
1979 , l_line_detail_tbl(l_line_counter).activity_type
1980 , l_line_detail_tbl(l_line_counter).activity_id
1981 , l_line_detail_tbl(l_line_counter).related_cust_account_id
1982 , l_line_detail_tbl(l_line_counter).relationship_type
1983 , l_line_detail_tbl(l_line_counter).earnings_associated_flag
1984 , l_line_detail_tbl(l_line_counter).comments
1985 , l_line_detail_tbl(l_line_counter).tax_code
1986 , l_line_detail_tbl(l_line_counter).attribute_category
1987 , l_line_detail_tbl(l_line_counter).attribute1
1988 , l_line_detail_tbl(l_line_counter).attribute2
1989 , l_line_detail_tbl(l_line_counter).attribute3
1990 , l_line_detail_tbl(l_line_counter).attribute4
1991 , l_line_detail_tbl(l_line_counter).attribute5
1992 , l_line_detail_tbl(l_line_counter).attribute6
1993 , l_line_detail_tbl(l_line_counter).attribute7
1994 , l_line_detail_tbl(l_line_counter).attribute8
1995 , l_line_detail_tbl(l_line_counter).attribute9
1996 , l_line_detail_tbl(l_line_counter).attribute10
1997 , l_line_detail_tbl(l_line_counter).attribute11
1998 , l_line_detail_tbl(l_line_counter).attribute12
1999 , l_line_detail_tbl(l_line_counter).attribute13
2000 , l_line_detail_tbl(l_line_counter).attribute14
2001 , l_line_detail_tbl(l_line_counter).attribute15
2002 , l_line_detail_tbl(l_line_counter).org_id
2003 , l_line_detail_tbl(l_line_counter).sale_date
2004 , l_line_detail_tbl(l_line_counter).item_type
2005 , l_line_detail_tbl(l_line_counter).tax_amount
2006 , l_line_detail_tbl(l_line_counter).claim_curr_tax_amount
2007 , l_line_detail_tbl(l_line_counter).activity_line_id
2008 , l_line_detail_tbl(l_line_counter).offer_type
2009 , l_line_detail_tbl(l_line_counter).prorate_earnings_flag
2010 , l_line_detail_tbl(l_line_counter).earnings_end_date
2011 , l_line_detail_tbl(l_line_counter).dpp_cust_account_id;
2012 EXIT WHEN csr_claim_lines%NOTFOUND;
2013 l_line_counter := l_line_counter + 1;
2014 END LOOP;
2015 CLOSE csr_claim_lines;
2016 IF l_line_counter > 1 THEN
2017 DPP_SLA_CLAIM_EXTRACT_PUB.Create_SLA_Extract(
2018 p_api_version_number=>1.0,
2019 x_return_status=>x_return_status,
2020 x_msg_count=>x_msg_count,
2021 x_msg_data=>x_msg_data,
2022 p_claim_id=>p_claim_id,
2023 p_claim_line_tbl=>l_line_detail_tbl,
2024 p_userid =>l_claim_rec.created_by
2025 );
2026
2027
2028 IF x_return_status = FND_API.g_ret_sts_error THEN
2029 RAISE FND_API.g_exc_error;
2030 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
2031 RAISE FND_API.g_exc_unexpected_error;
2032 END IF;
2033
2034 END IF;
2035 END IF;
2036 --R12.1 Enhancement : Call Price Protection Extract API END
2037 --------------------- finish -----------------------
2038 IF FND_API.to_boolean(p_commit) THEN
2039 COMMIT;
2040 END IF;
2041
2042 FND_MSG_PUB.Count_And_Get(
2043 p_count => x_msg_count,
2044 p_data => x_msg_data
2045 );
2046
2047 IF OZF_DEBUG_HIGH_ON THEN
2048 OZF_Utility_PVT.debug_message(l_full_name||': end');
2049 END IF;
2050
2051 EXCEPTION
2052 WHEN FND_API.G_EXC_ERROR THEN
2053 ROLLBACK TO Update_Claim_From_Settlement;
2054 x_return_status := FND_API.G_RET_STS_ERROR;
2055 FND_MSG_PUB.Count_And_Get(
2056 p_encoded => FND_API.g_false,
2057 p_count => x_msg_count,
2058 p_data => x_msg_data
2059 );
2060
2061 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2062 ROLLBACK TO Update_Claim_From_Settlement;
2063 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2064 FND_MSG_PUB.Count_And_Get(
2065 p_encoded => FND_API.g_false,
2066 p_count => x_msg_count,
2067 p_data => x_msg_data
2068 );
2069
2070 WHEN OTHERS THEN
2071 ROLLBACK TO Update_Claim_From_Settlement;
2072 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2073 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2074 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
2075 END IF;
2076 FND_MSG_PUB.Count_And_Get(
2077 p_encoded => FND_API.g_false,
2078 p_count => x_msg_count,
2079 p_data => x_msg_data
2080 );
2081 END Update_Claim_From_Settlement;
2082
2083
2084 ---------------------------------------------------------------------
2085 -- PROCEDURE
2086 -- Split_Claim_Settlement
2087 --
2088 -- HISTORY
2089 -- 28-MAR-2002 mchang Created.
2090 ---------------------------------------------------------------------
2091 PROCEDURE Split_Claim_Settlement(
2092 p_claim_rec IN OZF_CLAIM_PVT.claim_rec_type,
2093 p_difference_amount IN NUMBER,
2094
2095 x_return_status OUT NOCOPY VARCHAR2,
2096 x_msg_count OUT NOCOPY NUMBER,
2097 x_msg_data OUT NOCOPY VARCHAR2
2098 )
2099 IS
2100 l_api_version CONSTANT NUMBER := 1.0;
2101 l_api_name CONSTANT VARCHAR2(30) := 'Split_Claim_Settlement';
2102 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2103 l_return_status VARCHAR2(1);
2104
2105 l_child_claim_tbl OZF_SPLIT_CLAIM_PVT.Child_Claim_tbl_type;
2106 l_claim_line_rec OZF_Claim_Line_PVT.claim_line_rec_type;
2107 l_claim_line_id NUMBER;
2108 l_root_claim_number VARCHAR2(30);
2109 l_claim_rec OZF_CLAIM_PVT.claim_rec_type ;
2110
2111 BEGIN
2112 IF OZF_DEBUG_HIGH_ON THEN
2113 OZF_Utility_PVT.debug_message(l_full_name||' : start');
2114 END IF;
2115
2116 x_return_status := FND_API.g_ret_sts_success;
2117
2118 /*----------------------------*
2119 | Create Split
2120 *----------------------------*/
2121 IF OZF_DEBUG_HIGH_ON THEN
2122 OZF_Utility_PVT.debug_message(l_full_name||' : Create Split Claim');
2123 END IF;
2124
2125 l_child_claim_tbl(1).claim_type_id := p_claim_rec.claim_type_id;
2126 l_child_claim_tbl(1).amount := p_difference_amount;
2127 l_child_claim_tbl(1).line_amount_sum := 0;
2128 l_child_claim_tbl(1).reason_code_id := p_claim_rec.reason_code_id;
2129 l_child_claim_tbl(1).parent_claim_id := p_claim_rec.claim_id;
2130 l_child_claim_tbl(1).parent_object_ver_num := p_claim_rec.object_version_number;
2131 l_child_claim_tbl(1).line_table := NULL;
2132 OZF_SPLIT_CLAIM_PVT.create_child_claim_tbl (
2133 p_api_version => l_api_version
2134 ,p_init_msg_list => FND_API.g_false
2135 ,p_commit => FND_API.g_false
2136 ,p_validation_level => FND_API.g_valid_level_full
2137 ,x_return_status => l_return_status
2138 ,x_msg_data => x_msg_data
2139 ,x_msg_count => x_msg_count
2140 ,p_child_claim_tbl => l_child_claim_tbl
2141 ,p_mode => 'AUTO'
2142 );
2143 IF l_return_status = FND_API.g_ret_sts_error THEN
2144 RAISE FND_API.g_exc_error;
2145 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2146 RAISE FND_API.g_exc_unexpected_error;
2147 END IF;
2148
2149
2150 OZF_AR_PAYMENT_PVT.Query_Claim(
2151 p_claim_id => p_claim_rec.claim_id
2152 ,x_claim_rec => l_claim_rec
2153 ,x_return_status => l_return_status
2154 );
2155 IF l_return_status = FND_API.g_ret_sts_error THEN
2156 RAISE FND_API.g_exc_error;
2157 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2158 RAISE FND_API.g_exc_unexpected_error;
2159 END IF;
2160
2161 Update_Claim_Tax_Amount(
2162 p_claim_rec => l_claim_rec
2163 ,x_return_status => l_return_status
2164 ,x_msg_data => x_msg_data
2165 ,x_msg_count => x_msg_count
2166 );
2167 IF l_return_status = FND_API.g_ret_sts_error THEN
2168 RAISE FND_API.G_EXC_ERROR;
2169 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2170 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2171 END IF;
2172
2173
2174
2175 IF OZF_DEBUG_HIGH_ON THEN
2176 OZF_Utility_PVT.debug_message(l_full_name||' : end');
2177 END IF;
2178 EXCEPTION
2179 WHEN FND_API.G_EXC_ERROR THEN
2180 x_return_status := FND_API.G_RET_STS_ERROR;
2181 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2182 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2183 WHEN OTHERS THEN
2184 IF OZF_DEBUG_LOW_ON THEN
2185 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
2186 FND_MESSAGE.Set_Token('TEXT',l_full_name||' : Error');
2187 FND_MSG_PUB.Add;
2188 END IF;
2189 x_return_status := FND_API.g_ret_sts_unexp_error;
2190
2191 END Split_Claim_Settlement;
2192
2193
2194 ---------------------------------------------------------------------
2195 -- PROCEDURE
2196 -- Create_Write_Off
2197 --
2198 -- HISTORY
2199 -- 19-Jan-2005 Sahana Created for Bug4087329
2200 ---------------------------------------------------------------------
2201 PROCEDURE Create_Write_Off(
2202 p_claim_rec IN OZF_CLAIM_PVT.claim_rec_type,
2203 p_customer_trx_id IN NUMBER,
2204 p_deduction_type IN VARCHAR2,
2205 p_difference_amount IN NUMBER,
2206
2207 x_claim_object_version OUT NOCOPY NUMBER,
2208 x_return_status OUT NOCOPY VARCHAR2,
2209 x_msg_count OUT NOCOPY NUMBER,
2210 x_msg_data OUT NOCOPY VARCHAR2
2211 )
2212 IS
2213 l_api_version CONSTANT NUMBER := 1.0;
2214 l_api_name CONSTANT VARCHAR2(30) := 'Create_Write_Off';
2215 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2216 l_return_status VARCHAR2(1);
2217
2218 l_writeoff_threshold VARCHAR2(15);
2219 l_adj_rec AR_ADJUSTMENTS%ROWTYPE;
2220 l_x_new_adjust_number VARCHAR2(20);
2221 l_x_new_adjust_id NUMBER;
2222 l_payment_schedule_id NUMBER;
2223 l_receivables_trx_id NUMBER;
2224 l_reason_code VARCHAR2(30);
2225 l_claim_line_id NUMBER;
2226 l_settlement_doc_rec settlement_doc_rec_type;
2227 l_settlement_doc_id NUMBER;
2228 l_claim_object_version NUMBER;
2229 l_claim_rec OZF_CLAIM_PVT.claim_rec_type ;
2230 l_claim_line_rec OZF_Claim_Line_PVT.claim_line_rec_type;
2231
2232 CURSOR csr_invoice_writeoff(cv_adjust_id IN NUMBER) IS
2233 SELECT adj.adjustment_id --"settlement_id"
2234 , adj.receivables_trx_id --"settlement_type_id"
2235 , adj.adjustment_number --"settlement_number"
2236 , adj.apply_date --"settlement_date"
2237 , adj.amount --"settlement_amount"
2238 , pay.status --"status_code"
2239 FROM ar_adjustments adj
2240 , ar_payment_schedules pay
2241 WHERE adj.payment_schedule_id = pay.payment_schedule_id
2242 AND adj.adjustment_id = cv_adjust_id;
2243
2244 BEGIN
2245 IF OZF_DEBUG_HIGH_ON THEN
2246 OZF_Utility_PVT.debug_message(l_full_name||' : start');
2247 END IF;
2248
2249 x_return_status := FND_API.g_ret_sts_success;
2250
2251 OZF_AR_PAYMENT_PVT.Query_Claim(
2252 p_claim_id => p_claim_rec.claim_id
2253 ,x_claim_rec => l_claim_rec
2254 ,x_return_status => l_return_status
2255 );
2256 IF l_return_status = FND_API.g_ret_sts_error THEN
2257 RAISE FND_API.g_exc_error;
2258 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2259 RAISE FND_API.g_exc_unexpected_error;
2260 END IF;
2261
2262 l_claim_object_version := l_claim_rec.object_version_number;
2263
2264 /*----------------------------*
2265 | Create Claim Line with write_off amount
2266 *----------------------------*/
2267 IF OZF_DEBUG_HIGH_ON THEN
2268 OZF_Utility_PVT.debug_message(l_full_name||' : Create Claim Line :: claim_currency_amount='||p_difference_amount);
2269 END IF;
2270 l_claim_line_rec.claim_id := p_claim_rec.claim_id;
2271 l_claim_line_rec.claim_currency_amount := p_difference_amount;
2272 l_claim_line_rec.item_description := 'Write Off';
2273 l_claim_line_rec.comments := 'Write Off';
2274 l_claim_line_rec.update_from_tbl_flag := FND_API.g_true;
2275
2276 OZF_Claim_Line_PVT.Create_Claim_Line(
2277 p_api_version => l_api_version,
2278 p_init_msg_list => FND_API.g_false,
2279 p_commit => FND_API.g_false,
2280 p_validation_level => FND_API.g_valid_level_full,
2281 x_return_status => l_return_status,
2282 x_msg_count => x_msg_count,
2283 x_msg_data => x_msg_data,
2284 p_claim_line_rec => l_claim_line_rec,
2285 x_claim_line_id => l_claim_line_id
2286 );
2287 IF l_return_status = FND_API.g_ret_sts_error THEN
2288 RAISE FND_API.g_exc_error;
2289 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2290 RAISE FND_API.g_exc_unexpected_error;
2291 END IF;
2292
2293 /*----------------------------*
2294 | 1. Create Write off
2295 | 2. Update Invoice Dispute Amount if source deduction
2296 *----------------------------*/
2297 IF OZF_DEBUG_HIGH_ON THEN
2298 OZF_Utility_PVT.debug_message(l_full_name||' : Create AR Write Off');
2299 END IF;
2300 OZF_AR_PAYMENT_PVT.Create_AR_Write_Off(
2301 p_claim_rec => p_claim_rec
2302 ,p_deduction_type => p_deduction_type
2303 ,p_write_off_amount => p_difference_amount
2304 ,x_wo_adjust_id => l_x_new_adjust_id
2305 ,x_return_status => l_return_status
2306 ,x_msg_data => x_msg_data
2307 ,x_msg_count => x_msg_count
2308 );
2309 IF l_return_status = FND_API.g_ret_sts_error THEN
2310 RAISE FND_API.g_exc_error;
2311 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2312 RAISE FND_API.g_exc_unexpected_error;
2313 END IF;
2314
2315 /*----------------------*
2316 | Update Settled Amount|
2317 *----------------------*/
2318 l_claim_rec.amount_settled := l_claim_rec.amount_settled + p_difference_amount;
2319
2320
2321 Update_Claim_Tax_Amount(
2322 p_claim_rec => l_claim_rec
2323 ,x_return_status => l_return_status
2324 ,x_msg_data => x_msg_data
2325 ,x_msg_count => x_msg_count
2326 );
2327 IF l_return_status = FND_API.g_ret_sts_error THEN
2328 RAISE FND_API.G_EXC_ERROR;
2329 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2330 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2331 END IF;
2332
2333
2334 x_claim_object_version := l_claim_object_version;
2335
2336 IF OZF_DEBUG_HIGH_ON THEN
2337 OZF_Utility_PVT.debug_message(l_full_name||' : end');
2338 END IF;
2339 EXCEPTION
2340 WHEN FND_API.G_EXC_ERROR THEN
2341 x_return_status := FND_API.G_RET_STS_ERROR;
2342 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2343 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2344 WHEN OTHERS THEN
2345 IF OZF_DEBUG_LOW_ON THEN
2346 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
2347 FND_MESSAGE.Set_Token('TEXT',l_full_name||' : Error');
2348 FND_MSG_PUB.Add;
2349 END IF;
2350 x_return_status := FND_API.g_ret_sts_unexp_error;
2351
2352 END Create_Write_Off;
2353
2354
2355 ---------------------------------------------------------------------
2356 -- PROCEDURE
2357 -- Process_RMA_settlement
2358 --
2359 -- HISTORY
2360 -- 14-NOV-2002 mchang Created.
2361 ---------------------------------------------------------------------
2362 PROCEDURE Process_RMA_settlement(
2363 p_claim_setl_rec IN OZF_CLAIM_PVT.claim_rec_type,
2364 p_settlement_doc_tbl IN settlement_doc_tbl_type,
2365 p_total_rma_cr_amount IN NUMBER,
2366
2367 x_return_status OUT NOCOPY VARCHAR2,
2368 x_msg_count OUT NOCOPY NUMBER,
2369 x_msg_data OUT NOCOPY VARCHAR2
2370 )
2371 IS
2372 l_api_version CONSTANT NUMBER := 1.0;
2373 l_api_name CONSTANT VARCHAR2(30) := 'Process_RMA_settlement';
2374 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2375 l_return_status VARCHAR2(1);
2376
2377 i NUMBER;
2378 l_claim_rec OZF_CLAIM_PVT.claim_rec_type;
2379 l_upd_claim_rec OZF_CLAIM_PVT.claim_rec_type;
2380 l_child_claim_tbl OZF_SPLIT_CLAIM_PVT.Child_Claim_tbl_type;
2381 l_settlement_doc_id NUMBER;
2382 l_unpaid_claim_line NUMBER;
2383 l_deduction_type VARCHAR2(30);
2384 l_upd_claim_status BOOLEAN := FALSE;
2385 l_difference_amount NUMBER;
2386 l_inv_bal_error BOOLEAN := FALSE;
2387
2388 l_rma_cm_line_amount NUMBER;
2389 l_rma_cm_tax_amount NUMBER;
2390 l_rma_cm_freight_amount NUMBER;
2391 l_rma_cm_total_amount NUMBER;
2392 l_invoice_trx_id NUMBER;
2393
2394 l_dummy_number NUMBER;
2395
2396
2397
2398 -- Bug3951827: Cursor changed to consider header freight
2399 -- Modified for Bugfix 5199354
2400 CURSOR csr_rma_total_amount(cv_claim_id IN NUMBER) IS
2401 select sum(nvl(amount_line_items_original, 0))
2402 , sum(nvl(tax_original,0))
2403 , sum(nvl(freight_original,0))
2404 , previous_customer_trx_id
2405 from ar_payment_schedules ps, ra_customer_trx trx , ( select distinct customer_trx_id
2406 from ozf_claim_lines ln , ra_customer_trx_lines cm_line
2407 where cm_line.line_type = 'LINE'
2408 and cm_line.interface_line_context = 'ORDER ENTRY' --added filter for 4953844
2409 and cm_line.interface_line_attribute6 = to_char(ln.payment_reference_id)
2410 and ln.claim_id = cv_claim_id) cla
2411 where ps.customer_trx_id = trx.customer_trx_id
2412 and ps.customer_trx_id = cla.customer_trx_id
2413 group by previous_customer_trx_id;
2414
2415
2416
2417 CURSOR csr_sum_line_amount(cv_claim_id IN NUMBER) IS
2418 SELECT SUM(claim_currency_amount)
2419 FROM ozf_claim_lines
2420 WHERE claim_id = cv_claim_id;
2421
2422 l_settlement_amount NUMBER := 0; --Bug3951827
2423 l_write_off_flag BOOLEAN;
2424
2425
2426 BEGIN
2427 IF OZF_DEBUG_HIGH_ON THEN
2428 OZF_Utility_PVT.debug_message(l_full_name||' : start');
2429 END IF;
2430 -- Initialize API return status to sucess
2431 x_return_status := FND_API.g_ret_sts_success;
2432
2433 OPEN csr_rma_total_amount(p_claim_setl_rec.claim_id);
2434 FETCH csr_rma_total_amount INTO l_rma_cm_line_amount
2435 , l_rma_cm_tax_amount
2436 , l_rma_cm_freight_amount
2437 , l_invoice_trx_id;
2438 CLOSE csr_rma_total_amount;
2439
2440 l_rma_cm_total_amount := NVL(l_rma_cm_line_amount,0) + NVL(l_rma_cm_tax_amount,0) + NVL(l_rma_cm_freight_amount,0);
2441
2442 l_difference_amount := p_claim_setl_rec.amount_settled + l_rma_cm_total_amount;
2443
2444 FND_FILE.PUT_LINE(FND_FILE.LOG, 'claim amount settled = '||p_claim_setl_rec.amount_settled);
2445 FND_FILE.PUT_LINE(FND_FILE.LOG, 'claim amount remaining = '||p_claim_setl_rec.amount_remaining);
2446
2447 FND_FILE.PUT_LINE(FND_FILE.LOG, 'RMA Credit Memo total amount = '||l_rma_cm_total_amount);
2448 FND_FILE.PUT_LINE(FND_FILE.LOG, 'RMA Credit Memo amount = '||l_rma_cm_line_amount);
2449 FND_FILE.PUT_LINE(FND_FILE.LOG, 'RMA Credit Memo tax amount = '||l_rma_cm_tax_amount);
2450 FND_FILE.PUT_LINE(FND_FILE.LOG, 'RMA Credit Memo freight amount = '||l_rma_cm_freight_amount);
2451 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ----');
2452 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Difference Amount = '||l_difference_amount);
2453
2454
2455 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Amount Settled : ' || p_claim_setl_rec.amount_settled);
2456 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Amount Remaining : ' || p_claim_setl_rec.amount_remaining);
2457 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' RMA Total Amount : ' || l_rma_cm_total_amount);
2458
2459
2460
2461 -- OVERPAYMENT and CHARGE claim_class cannot be settled by RMA
2462 IF p_claim_setl_rec.claim_class = 'CLAIM' THEN
2463 l_deduction_type := 'CLAIM';
2464 ELSIF p_claim_setl_rec.source_object_id IS NOT NULL AND
2465 p_claim_setl_rec.claim_class = 'DEDUCTION' THEN
2466 l_deduction_type := 'SOURCE_DED';
2467 ELSIF p_claim_setl_rec.source_object_id IS NULL AND
2468 p_claim_setl_rec.claim_class = 'DEDUCTION' THEN
2469 l_deduction_type := 'RECEIPT_DED';
2470 END IF;
2471
2472
2473 OZF_AR_PAYMENT_PVT.Query_Claim(
2474 p_claim_id => p_claim_setl_rec.claim_id
2475 ,x_claim_rec => l_upd_claim_rec
2476 ,x_return_status => l_return_status
2477 );
2478 IF l_return_status = FND_API.g_ret_sts_error THEN
2479 RAISE FND_API.g_exc_error;
2480 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2481 RAISE FND_API.g_exc_unexpected_error;
2482 END IF;
2483
2484
2485 -- ---------------------------
2486 -- Update Claim Tax Amount --
2487 -- -------------------------
2488
2489 -- Bug3805485: Tax Amount Calculation
2490 IF ABS(l_difference_amount) > 0 AND Is_Tax_Inclusive(l_deduction_type,l_upd_claim_rec.org_id) THEN
2491
2492 -- Calculate other amount and update it in claim tax_amount
2493 -- Bug4094251: Changed other amount calculation
2494 -- Bug4953844: Changed for handling inclusive tax
2495 IF(ABS(NVL(l_rma_cm_line_amount,0) + NVL(l_rma_cm_tax_amount,0)) = p_claim_setl_rec.amount_settled) THEN
2496 -- This implies tax is inclusive
2497 l_upd_claim_rec.tax_amount := LEAST(NVL(l_upd_claim_rec.amount_remaining,0),
2498 (l_rma_cm_freight_amount * -1));
2499 ELSE
2500 -- This implies tax is exclusive
2501 l_upd_claim_rec.tax_amount := LEAST(NVL(l_upd_claim_rec.amount_remaining,0),
2502 ( l_rma_cm_tax_amount + l_rma_cm_freight_amount) * -1 );
2503 END IF;
2504
2505 --Bug7478816
2506 IF Abs(l_rma_cm_total_amount) <> p_claim_setl_rec.amount_settled THEN
2507 l_upd_claim_rec.amount_settled := ABS(l_rma_cm_line_amount);
2508 END IF;
2509
2510 l_upd_claim_rec.amount_remaining := l_upd_claim_rec.amount - l_upd_claim_rec.amount_adjusted -
2511 l_upd_claim_rec.amount_settled -
2512 l_upd_claim_rec.tax_amount;
2513
2514 fnd_file.put_line(fnd_file.log, 'Tax Amount '||l_upd_claim_rec.tax_amount);
2515 fnd_file.put_line(fnd_file.log, 'Amount Remaning '||l_upd_claim_rec.amount_remaining);
2516 Update_Claim_Tax_Amount(
2517 p_claim_rec => l_upd_claim_rec
2518 ,x_return_status => l_return_status
2519 ,x_msg_data => x_msg_data
2520 ,x_msg_count => x_msg_count
2521 );
2522 IF l_return_status = FND_API.g_ret_sts_error THEN
2523 RAISE FND_API.G_EXC_ERROR;
2524 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2525 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2526 END IF;
2527
2528 END IF;
2529
2530 /* Bug4087329: Write off for deductions and overpayments if within threshold */
2531 l_write_off_flag := FALSE;
2532 IF NVL(TO_NUMBER(g_writeoff_threshold), 0) >= ABS(l_upd_claim_rec.amount_remaining) AND
2533 ( l_deduction_type in ( 'SOURCE_DED', 'RECEIPT_OPM') OR
2534 ( l_deduction_type = 'RECEIPT_DED' AND
2535 ARP_DEDUCTION_COVER.negative_rct_writeoffs_allowed ) )
2536 THEN
2537 l_write_off_flag := TRUE;
2538 END IF;
2539
2540
2541 -- -----------------------------------------------
2542 -- Split Claim : if there is difference amount --
2543 -- -----------------------------------------------
2544 IF NOT l_write_off_flag AND l_upd_claim_rec.amount_remaining > 0 THEN
2545 OZF_AR_PAYMENT_PVT.Query_Claim(
2546 p_claim_id => p_claim_setl_rec.claim_id
2547 ,x_claim_rec => l_claim_rec
2548 ,x_return_status => l_return_status
2549 );
2550 IF l_return_status = FND_API.g_ret_sts_error THEN
2551 RAISE FND_API.g_exc_error;
2552 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2553 RAISE FND_API.g_exc_unexpected_error;
2554 END IF;
2555
2556 Split_Claim_Settlement(
2557 p_claim_rec => l_claim_rec
2558 ,p_difference_amount => l_claim_rec.amount_remaining
2559 ,x_return_status => l_return_status
2560 ,x_msg_data => x_msg_data
2561 ,x_msg_count => x_msg_count
2562 );
2563 IF l_return_status = FND_API.g_ret_sts_error THEN
2564 RAISE FND_API.g_exc_error;
2565 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2566 RAISE FND_API.g_exc_unexpected_error;
2567 END IF;
2568
2569 fnd_file.put_line(fnd_file.log, 'Amount Remaning '||l_claim_rec.amount_remaining);
2570 fnd_file.put_line(fnd_file.log, ' Amount Remaining --> Split');
2571
2572 END IF;
2573
2574 -- re-query claim here because amount_remaining is changed
2575 OZF_AR_PAYMENT_PVT.Query_Claim(
2576 p_claim_id => p_claim_setl_rec.claim_id
2577 ,x_claim_rec => l_claim_rec
2578 ,x_return_status => l_return_status
2579 );
2580 IF l_return_status = FND_API.g_ret_sts_error THEN
2581 RAISE FND_API.g_exc_error;
2582 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2583 RAISE FND_API.g_exc_unexpected_error;
2584 END IF;
2585
2586 -- Bug3951827: Settlement Amount is recalculated.
2587 -- Bug4365819: Calculate settlement amount before write off
2588 l_settlement_amount :=( NVL(l_claim_rec.amount_settled, 0) + NVL(l_claim_rec.tax_amount, 0)) ;
2589
2590 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Recalculated Settlement Amount = '||l_settlement_amount);
2591
2592
2593 -- -----------------------------------------------
2594 -- Bug4087329: Write Off
2595 -- -----------------------------------------------
2596 IF l_write_off_flag AND l_claim_rec.amount_remaining > 0 THEN
2597
2598
2599 Create_Write_Off(
2600 p_claim_rec => l_claim_rec
2601 ,p_customer_trx_id => l_claim_rec.source_object_id
2602 ,p_deduction_type => l_deduction_type
2603 ,p_difference_amount => l_claim_rec.amount_remaining
2604 ,x_claim_object_version => l_dummy_number
2605 ,x_return_status => l_return_status
2606 ,x_msg_data => x_msg_data
2607 ,x_msg_count => x_msg_count
2608 );
2609 IF l_return_status = FND_API.g_ret_sts_error THEN
2610 RAISE FND_API.g_exc_error;
2611 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2612 RAISE FND_API.g_exc_unexpected_error;
2613 END IF;
2614
2615 fnd_file.put_line(fnd_file.log, ' Amount Remaining --> Write Off ');
2616
2617 -- re-query claim here because amount_remaining is changed
2618 OZF_AR_PAYMENT_PVT.Query_Claim(
2619 p_claim_id => p_claim_setl_rec.claim_id
2620 ,x_claim_rec => l_claim_rec
2621 ,x_return_status => l_return_status
2622 );
2623 IF l_return_status = FND_API.g_ret_sts_error THEN
2624 RAISE FND_API.g_exc_error;
2625 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2626 RAISE FND_API.g_exc_unexpected_error;
2627 END IF;
2628
2629 END IF;
2630
2631
2632 --------------- CLAIM ---------------
2633 IF p_claim_setl_rec.claim_class = 'CLAIM' THEN
2634 Update_Claim_From_Settlement(
2635 p_api_version_number => l_api_version,
2636 p_init_msg_list => FND_API.g_false,
2637 p_commit => FND_API.g_false,
2638 p_validation_level => FND_API.g_valid_level_full,
2639 x_return_status => l_return_status,
2640 x_msg_count => x_msg_count,
2641 x_msg_data => x_msg_data,
2642 p_claim_id => p_claim_setl_rec.claim_id,
2643 p_object_version_number => p_claim_setl_rec.object_version_number,
2644 p_status_code => 'CLOSED',
2645 p_payment_status => 'PAID'
2646 );
2647 IF l_return_status = FND_API.g_ret_sts_error THEN
2648 RAISE FND_API.g_exc_error;
2649 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2650 RAISE FND_API.g_exc_unexpected_error;
2651 END IF;
2652
2653
2654 --------------- DEDUCTION ---------------
2655 ELSIF p_claim_setl_rec.claim_class = 'DEDUCTION' AND l_invoice_trx_id IS NULL THEN
2656 /* Settlement by on account credit memo */
2657
2658
2659 IF l_deduction_type = 'SOURCE_DED' THEN
2660 OZF_CLAIM_SETTLEMENT_PVT.Check_Transaction_Balance(
2661 p_customer_trx_id => l_claim_rec.source_object_id
2662 ,p_claim_amount => l_settlement_amount
2663 ,p_claim_number => l_claim_rec.claim_number
2664 ,x_return_status => l_return_status
2665 );
2666 IF l_return_status = FND_API.g_ret_sts_error THEN
2667 l_inv_bal_error := TRUE;
2668 OZF_UTILITY_PVT.write_conc_log;
2669
2670 --Raise exception to allow for rollback of split
2671 RAISE FND_API.g_exc_error;
2672 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2673 RAISE FND_API.g_exc_error;
2674 END IF;
2675 END IF;
2676
2677 IF NOT l_inv_bal_error THEN
2678 OZF_AR_PAYMENT_PVT.Pay_by_Credit_Memo(
2679 p_claim_rec => l_claim_rec
2680 ,p_deduction_type => l_deduction_type
2681 ,p_payment_reference_id => p_settlement_doc_tbl(1).settlement_id
2682 ,p_credit_memo_amount => l_settlement_amount
2683 ,x_return_status => l_return_status
2684 ,x_msg_data => x_msg_data
2685 ,x_msg_count => x_msg_count
2686 );
2687 IF l_return_status = FND_API.g_ret_sts_error THEN
2688 RAISE FND_API.g_exc_error;
2689 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2690 RAISE FND_API.g_exc_unexpected_error;
2691 END IF;
2692 END IF; -- end of if not invoice balance error
2693
2694
2695 --------------- DEDUCTION ---------------
2696 ELSIF p_claim_setl_rec.claim_class = 'DEDUCTION' AND l_invoice_trx_id IS NOT NULL THEN
2697 /* Bug3951827: Settlement by invoice credit memo */
2698
2699 OZF_AR_PAYMENT_PVT.Pay_by_RMA_Inv_CM(
2700 p_claim_rec => l_claim_rec
2701 ,p_credit_memo_amount => l_settlement_amount
2702 ,x_return_status => l_return_status
2703 ,x_msg_data => x_msg_data
2704 ,x_msg_count => x_msg_count
2705 );
2706 IF l_return_status = FND_API.g_ret_sts_error THEN
2707 RAISE FND_API.g_exc_error;
2708 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
2709 RAISE FND_API.g_exc_unexpected_error;
2710 END IF;
2711
2712 END IF;
2713
2714
2715 FND_FILE.PUT_LINE(FND_FILE.LOG, p_claim_setl_rec.claim_number||' --> Success.');
2716 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||p_claim_setl_rec.claim_number||' -------------*/');
2717
2718 IF OZF_DEBUG_HIGH_ON THEN
2719 OZF_Utility_PVT.debug_message(l_full_name||' : end');
2720 END IF;
2721 EXCEPTION
2722 WHEN FND_API.G_EXC_ERROR THEN
2723 x_return_status := FND_API.G_RET_STS_ERROR;
2724 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2725 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2726 WHEN OTHERS THEN
2727 IF OZF_DEBUG_LOW_ON THEN
2728 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
2729 FND_MESSAGE.Set_Token('TEXT',l_full_name||' : Error');
2730 FND_MSG_PUB.Add;
2731 END IF;
2732 x_return_status := FND_API.g_ret_sts_unexp_error;
2733
2734 END Process_RMA_settlement;
2735
2736
2737 ---------------------------------------------------------------------
2738 -- FUNCTION
2739 -- Get_claim_csr
2740 --
2741 -- PURPOSE
2742 -- This procedure maps generates the sql statement based on the input parameters.
2743 --
2744 -- PARAMETERS
2745 -- p_claim_class : claim_class
2746 -- p_payment_method : settlement method
2747 -- p_cust_account_id : customer id
2748 -- p_claim_type_id : claim type id
2749 -- p_reason_code_id : reason code id
2750 --
2751 -- NOTES
2752 ---------------------------------------------------------------------
2753 PROCEDURE Get_claim_csr(
2754 -- p_payment_method_stmt IN VARCHAR2
2755 p_payment_method_tbl IN g_payment_method_tbl
2756 ,p_claim_class IN VARCHAR2
2757 ,p_cust_account_id IN NUMBER
2758 ,p_claim_type_id IN NUMBER
2759 ,p_reason_code_id IN NUMBER
2760 ,p_payment_status IN VARCHAR2
2761 )
2762 IS
2763 l_stmt VARCHAR2(1000);
2764 l_cursor_id NUMBER;
2765 i NUMBER;
2766 BEGIN
2767
2768 FND_DSQL.init;
2769
2770 FND_DSQL.add_text('SELECT claim_id, claim_number, object_version_number, claim_class, amount_remaining, amount_settled, source_object_id, payment_method ');
2771 FND_DSQL.add_text('FROM ozf_claims ');
2772 FND_DSQL.add_text('WHERE status_code = ''PENDING_CLOSE'' ');
2773
2774 i := p_payment_method_tbl.FIRST;
2775 IF i IS NOT NULL THEN
2776 FND_DSQL.add_text(' AND ( ');
2777 LOOP
2778 FND_DSQL.add_text(' payment_method = ');
2779 FND_DSQL.add_bind(p_payment_method_tbl(i));
2780 EXIT WHEN i = p_payment_method_tbl.LAST;
2781 i:=p_payment_method_tbl.NEXT(i);
2782 FND_DSQL.add_text(' OR ');
2783 END LOOP;
2784 FND_DSQL.add_text(' ) ');
2785 END IF;
2786
2787 IF p_payment_status IS NOT NULL THEN
2788 FND_DSQL.add_text(' AND payment_status = ');
2789 FND_DSQL.add_bind(p_payment_status);
2790 END IF;
2791
2792
2793 IF p_claim_class IS NOT NULL THEN
2794 FND_DSQL.add_text(' AND claim_class = ');
2795 FND_DSQL.add_bind(p_claim_class);
2796 END IF;
2797
2798 IF p_cust_account_id IS NOT NULL THEN
2799 FND_DSQL.add_text(' AND cust_account_id = ');
2800 FND_DSQL.add_bind(p_cust_account_id);
2801 END IF;
2802
2803 IF p_claim_type_id IS NOT NULL THEN
2804 FND_DSQL.add_text(' AND claim_type_id = ');
2805 FND_DSQL.add_bind(p_claim_type_id);
2806 END IF;
2807
2808 IF p_reason_code_id IS NOT NULL THEN
2809 FND_DSQL.add_text(' AND reason_code_id = ');
2810 FND_DSQL.add_bind(p_reason_code_id);
2811 END IF;
2812
2813 END Get_claim_csr;
2814
2815 ---------------------------------------------------------------------
2816 -- PROCEDURE
2817 -- Get_RMA_Settlement
2818 --
2819 -- HISTORY
2820 -- 11/10/2002 mchang Modified.
2821 ---------------------------------------------------------------------
2822 PROCEDURE Get_RMA_Settlement(
2823 p_api_version_number IN NUMBER,
2824 p_init_msg_list IN VARCHAR2,
2825 p_commit IN VARCHAR2,
2826 p_validation_level IN NUMBER,
2827
2828 p_claim_class IN VARCHAR2,
2829 p_payment_method IN VARCHAR2,
2830 p_cust_account_id IN NUMBER,
2831 p_claim_type_id IN NUMBER,
2832 p_reason_code_id IN NUMBER,
2833
2834 x_return_status OUT NOCOPY VARCHAR2,
2835 x_msg_count OUT NOCOPY NUMBER,
2836 x_msg_data OUT NOCOPY VARCHAR2
2837 )
2838 IS
2839 l_api_version CONSTANT NUMBER := 1.0;
2840 l_api_name CONSTANT VARCHAR2(30) := 'Get_RMA_Settlement';
2841 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
2842 l_return_status VARCHAR2(1);
2843 l_failed_claims NUMBER := 0;
2844 l_successful_claims NUMBER := 0;
2845 l_reopened_claims NUMBER := 0;
2846
2847 CURSOR csr_total_claim_line(cv_claim_id IN NUMBER) IS
2848 SELECT COUNT(claim_line_id)
2849 FROM ozf_claim_lines
2850 WHERE claim_id = cv_claim_id;
2851
2852 CURSOR csr_paid_claim_line(cv_claim_id IN NUMBER) IS
2853 SELECT COUNT(claim_line_id)
2854 FROM ozf_claim_lines
2855 WHERE claim_id = cv_claim_id
2856 AND payment_status = 'PAID';
2857
2858 CURSOR csr_claim_lock(cv_claim_id IN NUMBER) IS
2859 SELECT claim_id
2860 FROM ozf_claims_all
2861 WHERE claim_id = cv_claim_id
2862 FOR UPDATE NOWAIT;
2863
2864 l_claim_lock_rec csr_claim_lock%ROWTYPE;
2865
2866 l_settlement_doc_tbl settlement_doc_tbl_type;
2867 l_settlement_doc_rec settlement_doc_rec_type;
2868 l_settlement_doc_id NUMBER;
2869 l_upd_claim_status BOOLEAN := FALSE;
2870 l_deduction_type VARCHAR2(15);
2871 l_claim_rec OZF_CLAIM_PVT.claim_rec_type;
2872 l_upd_claim_rec OZF_CLAIM_PVT.claim_rec_type;
2873 l_cm_dm_total_amount NUMBER;
2874 l_difference_amount NUMBER;
2875 l_claim_new_obj_num NUMBER;
2876
2877 l_payment_method_stmt VARCHAR2(100);
2878 TYPE ClaimCsrType IS REF CURSOR;
2879 c_get_claims_csr ClaimCsrType;
2880 --TYPE claim_id_ver_type IS TABLE OF c_get_claims_csr%ROWTYPE
2881 --INDEX BY BINARY_INTEGER;
2882 l_claim_rma_fetch OZF_CLAIM_PVT.claim_tbl_type;
2883 l_claim_rma_setl OZF_CLAIM_PVT.claim_tbl_type;
2884 l_claim_setl_rec OZF_CLAIM_PVT.claim_rec_type;
2885 l_counter NUMBER := 1;
2886 l_total_claim_line NUMBER;
2887 l_paid_claim_line NUMBER;
2888
2889 l_inv_bal_error BOOLEAN := FALSE;
2890 l_total_rma_cr_amount NUMBER;
2891 i NUMBER;
2892 j NUMBER;
2893 l_payment_method_tbl g_payment_method_tbl;
2894 l_claim_csr_stmt VARCHAR2(1000);
2895 l_stmt_debug VARCHAR2(1000);
2896 l_claim_csr_id NUMBER;
2897 l_claim_num_rows NUMBER;
2898
2899 LOCK_EXCEPTION EXCEPTION;
2900
2901 CURSOR csr_rma_status(cv_claim_id IN NUMBER) IS
2902 SELECT flow_status_code
2903 FROM oe_order_headers_all,
2904 ozf_claims_all
2905 WHERE claim_id = cv_claim_id
2906 AND payment_reference_id = header_id;
2907
2908 l_rma_status VARCHAR2(30);
2909
2910
2911
2912 BEGIN
2913 --------------------- initialize -----------------------
2914 SAVEPOINT Get_RMA_Settlement;
2915
2916 -- Standard call to check for call compatibility.
2917 IF NOT FND_API.Compatible_API_Call (
2918 l_api_version,
2919 p_api_version_number,
2920 l_api_name,
2921 G_PKG_NAME
2922 ) THEN
2923 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2924 END IF;
2925
2926 -- Initialize message list if p_init_msg_list is set to TRUE.
2927 IF FND_API.to_Boolean(p_init_msg_list) THEN
2928 FND_MSG_PUB.initialize;
2929 END IF;
2930
2931 x_return_status := FND_API.g_ret_sts_success;
2932
2933 --------------------- start -----------------------
2934 IF OZF_DEBUG_HIGH_ON THEN
2935 OZF_UTILITY_PVT.debug_message(l_full_name ||': start');
2936 END IF;
2937
2938 IF p_payment_method = 'RMA' OR
2939 p_payment_method IS NULL THEN
2940
2941 --l_payment_method_stmt := ' = ''RMA'' ';
2942 l_payment_method_tbl(1) := 'RMA';
2943
2944 -- -----------------
2945 -- 1. RMA Fetch --
2946 -- -----------------
2947 Get_claim_csr(p_payment_method_tbl => l_payment_method_tbl
2948 ,p_claim_class => p_claim_class
2949 ,p_cust_account_id => p_cust_account_id
2950 ,p_claim_type_id => p_claim_type_id
2951 ,p_reason_code_id => p_reason_code_id
2952 ,p_payment_status => 'PENDING'
2953 );
2954
2955 l_claim_csr_id := DBMS_SQL.open_cursor;
2956 FND_DSQL.set_cursor(l_claim_csr_id);
2957 l_claim_csr_stmt := FND_DSQL.get_text(FALSE);
2958
2959 l_stmt_debug := fnd_dsql.get_text(TRUE);
2960
2961 FND_FILE.PUT_LINE(FND_FILE.LOG, 'QUERY CLAIM SQL :: ' || l_stmt_debug);
2962
2963 DBMS_SQL.parse(l_claim_csr_id, l_claim_csr_stmt, DBMS_SQL.native);
2964 DBMS_SQL.define_column(l_claim_csr_id, 1, l_claim_rec.claim_id);
2965 DBMS_SQL.define_column_char(l_claim_csr_id, 2, l_claim_rec.claim_number, 30);
2966 DBMS_SQL.define_column(l_claim_csr_id, 3, l_claim_rec.object_version_number);
2967 DBMS_SQL.define_column_char(l_claim_csr_id, 4, l_claim_rec.claim_class, 30);
2968 DBMS_SQL.define_column(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
2969 DBMS_SQL.define_column(l_claim_csr_id, 6, l_claim_rec.amount_settled);
2970 DBMS_SQL.define_column(l_claim_csr_id, 7, l_claim_rec.source_object_id);
2971 DBMS_SQL.define_column_char(l_claim_csr_id, 8, l_claim_rec.payment_method, 15);
2972 FND_DSQL.do_binds;
2973 l_claim_num_rows := DBMS_SQL.execute(l_claim_csr_id);
2974
2975 l_counter := 1;
2976 LOOP
2977 IF DBMS_SQL.fetch_rows(l_claim_csr_id) > 0 THEN
2978
2979 DBMS_SQL.column_value(l_claim_csr_id, 1, l_claim_rec.claim_id);
2980 DBMS_SQL.column_value_char(l_claim_csr_id, 2, l_claim_rec.claim_number);
2981 DBMS_SQL.column_value(l_claim_csr_id, 3, l_claim_rec.object_version_number);
2982 DBMS_SQL.column_value_char(l_claim_csr_id, 4, l_claim_rec.claim_class);
2983 DBMS_SQL.column_value(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
2984 DBMS_SQL.column_value(l_claim_csr_id, 6, l_claim_rec.amount_settled);
2985 DBMS_SQL.column_value(l_claim_csr_id, 7, l_claim_rec.source_object_id);
2986 DBMS_SQL.column_value_char(l_claim_csr_id, 8, l_claim_rec.payment_method);
2987
2988 l_claim_rma_fetch(l_counter).claim_id := l_claim_rec.claim_id;
2989 l_claim_rma_fetch(l_counter).claim_number := RTRIM(l_claim_rec.claim_number, ' ');
2990 l_claim_rma_fetch(l_counter).object_version_number := l_claim_rec.object_version_number;
2991 l_claim_rma_fetch(l_counter).claim_class := RTRIM(l_claim_rec.claim_class, ' ');
2992 l_claim_rma_fetch(l_counter).amount_remaining := l_claim_rec.amount_remaining;
2993 l_claim_rma_fetch(l_counter).amount_settled := l_claim_rec.amount_settled;
2994 l_claim_rma_fetch(l_counter).source_object_id := l_claim_rec.source_object_id;
2995 l_claim_rma_fetch(l_counter).payment_method := RTRIM(l_claim_rec.payment_method, ' ');
2996
2997 ELSE
2998 EXIT;
2999 END IF;
3000 l_counter := l_counter + 1;
3001 END LOOP;
3002 DBMS_SQL.close_cursor(l_claim_csr_id);
3003
3004 IF l_claim_rma_fetch.count > 0 THEN
3005 FOR i IN 1..l_claim_rma_fetch.count LOOP
3006 FND_MSG_PUB.initialize;
3007 BEGIN
3008 SAVEPOINT RMA_CR_FETCH;
3009
3010 BEGIN
3011 OPEN csr_claim_lock(l_claim_rma_fetch(i).claim_id);
3012 FETCH csr_claim_lock INTO l_claim_lock_rec;
3013 If (csr_claim_lock%NOTFOUND) then
3014 CLOSE csr_claim_lock;
3015 FND_MESSAGE.SET_NAME('FND', 'FORM_RECORD_DELETED');
3016 APP_EXCEPTION.RAISE_EXCEPTION;
3017 END IF;
3018 CLOSE csr_claim_lock;
3019 EXCEPTION
3020 WHEN OTHERS THEN
3021 RAISE LOCK_EXCEPTION;
3022 END;
3023
3024 -- R12: Check for RMA status. If cancelled, reopen claim.
3025 OPEN csr_rma_status(l_claim_rma_fetch(i).claim_id);
3026 FETCH csr_rma_status INTO l_rma_status;
3027 CLOSE csr_rma_status;
3028
3029 IF l_rma_status = 'CANCELLED' THEN
3030 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_fetch(i).claim_number||' --------------*/');
3031 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claim Status is Cancelled ' );
3032
3033 Process_Cancelled_Setl_Doc(
3034 p_claim_id => l_claim_rma_fetch(i).claim_id
3035 ,x_return_status => l_return_status
3036 ,x_msg_count => x_msg_count
3037 ,x_msg_data => x_msg_data );
3038 IF l_return_status = FND_API.g_ret_sts_error THEN
3039 RAISE FND_API.g_exc_error;
3040 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3041 RAISE FND_API.g_exc_unexpected_error;
3042 END IF;
3043 l_reopened_claims := l_reopened_claims + 1;
3044
3045 ELSE
3046
3047 Get_AR_Rec(
3048 p_claim_id => l_claim_rma_fetch(i).claim_id,
3049 p_claim_number => l_claim_rma_fetch(i).claim_number,
3050 p_payment_method => l_claim_rma_fetch(i).payment_method,
3051 p_settlement_amount => (l_claim_rma_fetch(i).amount_remaining + l_claim_rma_fetch(i).amount_settled),
3052 x_settlement_doc_tbl => l_settlement_doc_tbl,
3053 x_return_status => l_return_status
3054 );
3055 IF l_return_status = FND_API.g_ret_sts_error THEN
3056 RAISE FND_API.g_exc_error;
3057 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3058 RAISE FND_API.g_exc_unexpected_error;
3059 END IF;
3060
3061 j := l_settlement_doc_tbl.FIRST;
3062 IF j IS NOT NULL THEN
3063 LOOP
3064 IF l_settlement_doc_tbl(j).settlement_id IS NOT NULL AND
3065 l_settlement_doc_tbl(j).settlement_id <> FND_API.g_miss_num THEN
3066 FND_FILE.PUT_LINE(FND_FILE.LOG, 'AR Transactinn# = ' || l_settlement_doc_tbl(j).settlement_number);
3067 Create_Settlement_Doc(
3068 p_api_version_number => l_api_version,
3069 p_init_msg_list => FND_API.g_false,
3070 p_commit => FND_API.g_false,
3071 p_validation_level => FND_API.g_valid_level_full,
3072 x_return_status => l_return_status,
3073 x_msg_count => x_msg_count,
3074 x_msg_data => x_msg_data,
3075 p_settlement_doc_rec => l_settlement_doc_tbl(j),
3076 x_settlement_doc_id => l_settlement_doc_id
3077 );
3078 IF l_return_status = FND_API.g_ret_sts_error THEN
3079 RAISE FND_API.g_exc_error;
3080 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3081 RAISE FND_API.g_exc_unexpected_error;
3082 END IF;
3083
3084 -- Commented for Bug4953844
3085 /*Update_Claim_Line_Status(
3086 p_claim_line_id => l_settlement_doc_tbl(j).claim_line_id
3087 ,x_return_status => l_return_status
3088 ,x_msg_data => x_msg_data
3089 ,x_msg_count => x_msg_count
3090 );
3091 IF l_return_status = FND_API.g_ret_sts_error THEN
3092 RAISE FND_API.g_exc_error;
3093 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3094 RAISE FND_API.g_exc_unexpected_error;
3095 END IF; */
3096 END IF;
3097 EXIT WHEN j = l_settlement_doc_tbl.LAST;
3098 j := l_settlement_doc_tbl.NEXT(j);
3099 END LOOP;
3100 END IF;
3101
3102 -- Commented for Bug4953844
3103 /*
3104 OPEN csr_total_claim_line(l_claim_rma_fetch(i).claim_id);
3105 FETCH csr_total_claim_line INTO l_total_claim_line;
3106 CLOSE csr_total_claim_line;
3107
3108 OPEN csr_paid_claim_line(l_claim_rma_fetch(i).claim_id);
3109 FETCH csr_paid_claim_line INTO l_paid_claim_line;
3110 CLOSE csr_paid_claim_line;
3111
3112 IF l_total_claim_line = NVL(l_paid_claim_line, 0) THEN
3113 UPDATE ozf_claims_all
3114 SET payment_status = 'INTERFACED'
3115 WHERE claim_id = l_claim_rma_fetch(i).claim_id;
3116 END IF; */
3117
3118 -- Added for Bug4953844
3119 IF l_settlement_doc_tbl.COUNT <> 0 THEN
3120 UPDATE ozf_claims_all
3121 SET payment_status = 'INTERFACED'
3122 WHERE claim_id = l_claim_rma_fetch(i).claim_id;
3123
3124 UPDATE ozf_claim_lines_all
3125 SET payment_status = 'PAID'
3126 WHERE claim_id = l_claim_rma_fetch(i).claim_id;
3127 END IF;
3128 END IF; -- end if l_claim_rma_fetch.claim_id is not null and g_miss_num
3129
3130 EXCEPTION
3131 WHEN FND_API.G_EXC_ERROR THEN
3132 ROLLBACK TO RMA_CR_FETCH;
3133 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_fetch(i).claim_number||' --> Failed in Fetch.');
3134 OZF_UTILITY_PVT.write_conc_log;
3135 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_fetch(i).claim_number||' --------------*/');
3136
3137 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3138 ROLLBACK TO RMA_CR_FETCH;
3139 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_fetch(i).claim_number||' --> Failed in Fetch.');
3140 OZF_UTILITY_PVT.write_conc_log;
3141 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_fetch(i).claim_number||' --------------*/');
3142
3143 WHEN OTHERS THEN
3144 ROLLBACK TO RMA_CR_FETCH;
3145 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_fetch(i).claim_number||' --> Failed in Fetch.');
3146 OZF_UTILITY_PVT.write_conc_log;
3147 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_fetch(i).claim_number||' --------------*/');
3148
3149 END;
3150 END LOOP;
3151 END IF; -- end if l_claim_rma_fetch.count > 0
3152
3153 -- ---------------------
3154 -- 2. RMA Settlement --
3155 -- ---------------------
3156 Get_claim_csr(p_payment_method_tbl => l_payment_method_tbl
3157 ,p_claim_class => p_claim_class
3158 ,p_cust_account_id => p_cust_account_id
3159 ,p_claim_type_id => p_claim_type_id
3160 ,p_reason_code_id => p_reason_code_id
3161 ,p_payment_status => 'INTERFACED'
3162 );
3163
3164 l_claim_csr_id := DBMS_SQL.open_cursor;
3165 FND_DSQL.set_cursor(l_claim_csr_id);
3166 l_claim_csr_stmt := FND_DSQL.get_text(FALSE);
3167
3168 l_stmt_debug := fnd_dsql.get_text(TRUE);
3169
3170 FND_FILE.PUT_LINE(FND_FILE.LOG, 'QUERY CLAIM SQL :: ' || l_stmt_debug);
3171
3172 DBMS_SQL.parse(l_claim_csr_id, l_claim_csr_stmt, DBMS_SQL.native);
3173 DBMS_SQL.define_column(l_claim_csr_id, 1, l_claim_rec.claim_id);
3174 DBMS_SQL.define_column_char(l_claim_csr_id, 2, l_claim_rec.claim_number, 30);
3175 DBMS_SQL.define_column(l_claim_csr_id, 3, l_claim_rec.object_version_number);
3176 DBMS_SQL.define_column_char(l_claim_csr_id, 4, l_claim_rec.claim_class, 30);
3177 DBMS_SQL.define_column(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
3178 DBMS_SQL.define_column(l_claim_csr_id, 6, l_claim_rec.amount_settled);
3179 DBMS_SQL.define_column(l_claim_csr_id, 7, l_claim_rec.source_object_id);
3180 DBMS_SQL.define_column_char(l_claim_csr_id, 8, l_claim_rec.payment_method, 15);
3181 FND_DSQL.do_binds;
3182 l_claim_num_rows := DBMS_SQL.execute(l_claim_csr_id);
3183
3184 l_counter := 1;
3185 LOOP
3186 IF DBMS_SQL.fetch_rows(l_claim_csr_id) > 0 THEN
3187
3188 DBMS_SQL.column_value(l_claim_csr_id, 1, l_claim_rec.claim_id);
3189 DBMS_SQL.column_value_char(l_claim_csr_id, 2, l_claim_rec.claim_number);
3190 DBMS_SQL.column_value(l_claim_csr_id, 3, l_claim_rec.object_version_number);
3191 DBMS_SQL.column_value_char(l_claim_csr_id, 4, l_claim_rec.claim_class);
3192 DBMS_SQL.column_value(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
3193 DBMS_SQL.column_value(l_claim_csr_id, 6, l_claim_rec.amount_settled);
3194 DBMS_SQL.column_value(l_claim_csr_id, 7, l_claim_rec.source_object_id);
3195 DBMS_SQL.column_value_char(l_claim_csr_id, 8, l_claim_rec.payment_method);
3196
3197 l_claim_rma_setl(l_counter).claim_id := l_claim_rec.claim_id;
3198 l_claim_rma_setl(l_counter).claim_number := RTRIM(l_claim_rec.claim_number, ' ');
3199 l_claim_rma_setl(l_counter).object_version_number := l_claim_rec.object_version_number;
3200 l_claim_rma_setl(l_counter).claim_class := RTRIM(l_claim_rec.claim_class, ' ');
3201 l_claim_rma_setl(l_counter).amount_remaining := l_claim_rec.amount_remaining;
3202 l_claim_rma_setl(l_counter).amount_settled := l_claim_rec.amount_settled;
3203 l_claim_rma_setl(l_counter).source_object_id := l_claim_rec.source_object_id;
3204 l_claim_rma_setl(l_counter).payment_method := RTRIM(l_claim_rec.payment_method, ' ');
3205
3206 ELSE
3207 EXIT;
3208 END IF;
3209 l_counter := l_counter + 1;
3210 END LOOP;
3211 DBMS_SQL.close_cursor(l_claim_csr_id);
3212
3213 IF l_claim_rma_setl.count > 0 THEN
3214 FOR i IN 1..l_claim_rma_setl.count LOOP
3215 FND_MSG_PUB.initialize;
3216 BEGIN
3217 SAVEPOINT RMA_SETL;
3218
3219 IF l_claim_rma_setl(i).claim_id IS NOT NULL AND
3220 l_claim_rma_setl(i).claim_id <> FND_API.g_miss_num THEN
3221
3222 BEGIN
3223 OPEN csr_claim_lock(l_claim_rma_setl(i).claim_id);
3224 FETCH csr_claim_lock INTO l_claim_lock_rec;
3225 If (csr_claim_lock%NOTFOUND) then
3226 CLOSE csr_claim_lock;
3227 FND_MESSAGE.SET_NAME('FND', 'FORM_RECORD_DELETED');
3228 APP_EXCEPTION.RAISE_EXCEPTION;
3229 END IF;
3230 CLOSE csr_claim_lock;
3231 EXCEPTION
3232 WHEN OTHERS THEN
3233 RAISE LOCK_EXCEPTION;
3234 END;
3235
3236 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_setl(i).claim_number||' --------------*/');
3237 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claim Number : ' || l_claim_rma_setl(i).claim_number);
3238
3239 Get_RMA_Setl_Doc_Tbl(
3240 p_claim_id => l_claim_rma_setl(i).claim_id,
3241 x_settlement_doc_tbl => l_settlement_doc_tbl,
3242 x_total_rma_cr_amount => l_total_rma_cr_amount,
3243 x_return_status => l_return_status
3244 );
3245 IF l_return_status = FND_API.g_ret_sts_error THEN
3246 RAISE FND_API.g_exc_error;
3247 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3248 RAISE FND_API.g_exc_unexpected_error;
3249 END IF;
3250
3251 OZF_AR_PAYMENT_PVT.Query_Claim(
3252 p_claim_id => l_claim_rma_setl(i).claim_id
3253 ,x_claim_rec => l_claim_setl_rec
3254 ,x_return_status => l_return_status
3255 );
3256 IF l_return_status = FND_API.g_ret_sts_error THEN
3257 RAISE FND_API.g_exc_error;
3258 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3259 RAISE FND_API.g_exc_unexpected_error;
3260 END IF;
3261
3262 --------------- CLAIM / DEDUCTION :: RMA ---------------
3263 Process_RMA_settlement(
3264 p_claim_setl_rec => l_claim_rma_setl(i)
3265 ,p_settlement_doc_tbl => l_settlement_doc_tbl
3266 ,p_total_rma_cr_amount => l_total_rma_cr_amount
3267 ,x_return_status => l_return_status
3268 ,x_msg_count => x_msg_count
3269 ,x_msg_data => x_msg_data
3270 );
3271 IF l_return_status = FND_API.g_ret_sts_error THEN
3272 RAISE FND_API.g_exc_error;
3273 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3274 RAISE FND_API.g_exc_unexpected_error;
3275 END IF;
3276 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Success. ');
3277 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3278 l_successful_claims := l_successful_claims + 1;
3279 END IF; -- end if l_claim_rma_setl.claim_id is not null and g_miss_num
3280 EXCEPTION
3281 WHEN FND_API.G_EXC_ERROR THEN
3282 ROLLBACK TO RMA_SETL;
3283 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_setl(i).claim_number||' --> Failed in Settlement.');
3284 --OZF_UTILITY_PVT.debug_message(l_claim_rma_setl(i).claim_number||' --> Failed.');
3285 OZF_UTILITY_PVT.write_conc_log;
3286 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_setl(i).claim_number||' --------------*/');
3287 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3288 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
3289 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3290 l_failed_claims := l_failed_claims + 1;
3291
3292 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3293 ROLLBACK TO RMA_SETL;
3294 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_setl(i).claim_number||' --> Failed in Settlement.');
3295 --OZF_UTILITY_PVT.debug_message(l_claim_rma_setl(i).claim_number||' --> Failed.');
3296 OZF_UTILITY_PVT.write_conc_log;
3297 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_setl(i).claim_number||' --------------*/');
3298 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3299 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
3300 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3301 l_failed_claims := l_failed_claims + 1;
3302
3303 WHEN OTHERS THEN
3304 ROLLBACK TO RMA_SETL;
3305 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_rma_setl(i).claim_number||' --> Failed in Settlement.');
3306 --OZF_UTILITY_PVT.debug_message(l_claim_rma_setl(i).claim_number||' --> Failed.');
3307 OZF_UTILITY_PVT.write_conc_log;
3308 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_rma_setl(i).claim_number||' --------------*/');
3309 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3310 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || SQLCODE || ' : ' || SQLERRM);
3311 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3312 l_failed_claims := l_failed_claims + 1;
3313
3314 END;
3315 END LOOP;
3316 END IF; -- end if l_claim_rma_setl.count > 0
3317
3318 END IF;
3319
3320 --------------------- finish -----------------------
3321 IF FND_API.to_boolean(p_commit) THEN
3322 COMMIT;
3323 END IF;
3324 IF OZF_DEBUG_HIGH_ON THEN
3325 OZF_UTILITY_PVT.debug_message(l_full_name ||': end');
3326 END IF;
3327 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims successfully fetched for RMA Settlement : ' || l_successful_claims);
3328 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims failed to be fetched for RMA Settlement : ' || l_failed_claims);
3329 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims reopened for RMA Settlement : ' || l_reopened_claims);
3330
3331 EXCEPTION
3332 WHEN OTHERS THEN
3333 ROLLBACK TO Get_RMA_Settlement;
3334 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3335 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3336 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3337 END IF;
3338 FND_MSG_PUB.Count_And_Get(
3339 p_encoded => FND_API.g_false,
3340 p_count => x_msg_count,
3341 p_data => x_msg_data
3342 );
3343 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for RMA Settlement Failed.');
3344 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || SQLCODE || ' : ' || SQLERRM);
3345 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3346 End Get_RMA_Settlement;
3347
3348
3349 ---------------------------------------------------------------------
3350 -- PROCEDURE
3351 -- Get_Receivable_Settlement
3352 --
3353 -- HISTORY
3354 -- pnerella Create.
3355 -- 05/30/2001 mchang Modified.
3356 ---------------------------------------------------------------------
3357 PROCEDURE Get_Receivable_Settlement(
3358 p_api_version_number IN NUMBER,
3359 p_init_msg_list IN VARCHAR2,
3360 p_commit IN VARCHAR2,
3361 p_validation_level IN NUMBER,
3362
3363 p_claim_class IN VARCHAR2,
3364 p_payment_method IN VARCHAR2,
3365 p_cust_account_id IN NUMBER,
3366 p_claim_type_id IN NUMBER,
3367 p_reason_code_id IN NUMBER,
3368
3369 x_return_status OUT NOCOPY VARCHAR2,
3370 x_msg_count OUT NOCOPY NUMBER,
3371 x_msg_data OUT NOCOPY VARCHAR2
3372 )
3373 IS
3374 l_api_version CONSTANT NUMBER := 1.0;
3375 l_api_name CONSTANT VARCHAR2(30) := 'Get_Receivable_Settlement';
3376 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
3377 l_return_status VARCHAR2(1);
3378 l_failed_claims NUMBER := 0;
3379 l_successful_claims NUMBER := 0;
3380
3381 CURSOR csr_cm_dm_total_amount(cv_customer_trx_id IN NUMBER) IS
3382 SELECT NVL(SUM(amount_line_items_original), 0)
3383 , NVL(SUM(tax_original), 0)
3384 , NVL(SUM(freight_original), 0)
3385 FROM ar_payment_schedules
3386 WHERE customer_trx_id = cv_customer_trx_id;
3387
3388 CURSOR csr_sum_line_amount(cv_claim_id IN NUMBER) IS
3389 SELECT SUM(claim_currency_amount)
3390 FROM ozf_claim_lines
3391 WHERE claim_id = cv_claim_id;
3392
3393 CURSOR csr_claim_lock(cv_claim_id IN NUMBER) IS
3394 SELECT *
3395 FROM ozf_claims_all
3396 WHERE claim_id = cv_claim_id
3397 FOR UPDATE NOWAIT;
3398
3399 l_claim_lock_rec csr_claim_lock%ROWTYPE;
3400
3401 l_settlement_doc_tbl settlement_doc_tbl_type;
3402 l_settlement_doc_rec settlement_doc_rec_type;
3403 l_settlement_doc_id NUMBER;
3404 l_upd_claim_status BOOLEAN := FALSE;
3405 l_deduction_type VARCHAR2(15);
3406 l_claim_rec OZF_CLAIM_PVT.claim_rec_type;
3407 l_upd_claim_rec OZF_CLAIM_PVT.claim_rec_type;
3408 l_cm_dm_total_amount NUMBER;
3409 l_cm_dm_amount NUMBER;
3410 l_cm_dm_tax_amount NUMBER;
3411 l_cm_dm_freight_amount NUMBER;
3412 l_difference_amount NUMBER;
3413 l_claim_new_obj_num NUMBER;
3414
3415 l_payment_method_stmt VARCHAR2(100);
3416 TYPE ClaimCsrType IS REF CURSOR;
3417 c_get_claims_csr ClaimCsrType;
3418 --TYPE claim_id_ver_type IS TABLE OF c_get_claims_csr%ROWTYPE
3419 --INDEX BY BINARY_INTEGER;
3420 l_claim_id_ver OZF_CLAIM_PVT.claim_tbl_type;
3421 l_counter NUMBER := 1;
3422
3423 l_inv_bal_error BOOLEAN := FALSE;
3424 l_payment_method_tbl g_payment_method_tbl;
3425 l_claim_csr_stmt VARCHAR2(1000);
3426 l_stmt_debug VARCHAR2(1000);
3427 l_claim_csr_id NUMBER;
3428 l_claim_num_rows NUMBER;
3429 l_dummy_number NUMBER;
3430
3431 LOCK_EXCEPTION EXCEPTION;
3432 l_write_off_flag BOOLEAN;
3433
3434
3435 BEGIN
3436 --------------------- initialize -----------------------
3437 SAVEPOINT Get_Receivable_Settlement;
3438
3439 -- Standard call to check for call compatibility.
3440 IF NOT FND_API.Compatible_API_Call (
3441 l_api_version,
3442 p_api_version_number,
3443 l_api_name,
3444 G_PKG_NAME
3445 ) THEN
3446 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3447 END IF;
3448
3449 -- Initialize message list if p_init_msg_list is set to TRUE.
3450 IF FND_API.to_Boolean(p_init_msg_list) THEN
3451 FND_MSG_PUB.initialize;
3452 END IF;
3453
3454 x_return_status := FND_API.g_ret_sts_success;
3455
3456 --------------------- start -----------------------
3457 IF OZF_DEBUG_HIGH_ON THEN
3458 OZF_UTILITY_PVT.debug_message(l_full_name ||': start');
3459 END IF;
3460
3461 IF p_payment_method IS NULL THEN
3462 l_payment_method_tbl(1) := 'CREDIT_MEMO';
3463 l_payment_method_tbl(2) := 'DEBIT_MEMO';
3464 ELSE
3465 l_payment_method_tbl(1) := p_payment_method;
3466 END IF;
3467
3468 Get_claim_csr(p_payment_method_tbl => l_payment_method_tbl
3469 ,p_claim_class => p_claim_class
3470 ,p_cust_account_id => p_cust_account_id
3471 ,p_claim_type_id => p_claim_type_id
3472 ,p_reason_code_id => p_reason_code_id
3473 ,p_payment_status => 'INTERFACED'
3474 );
3475
3476 l_claim_csr_id := DBMS_SQL.open_cursor;
3477 FND_DSQL.set_cursor(l_claim_csr_id);
3478 l_claim_csr_stmt := FND_DSQL.get_text(FALSE);
3479
3480 l_stmt_debug := fnd_dsql.get_text(TRUE);
3481
3482 FND_FILE.PUT_LINE(FND_FILE.LOG, 'QUERY CLAIM SQL :: ' || l_stmt_debug);
3483
3484 DBMS_SQL.parse(l_claim_csr_id, l_claim_csr_stmt, DBMS_SQL.native);
3485 DBMS_SQL.define_column(l_claim_csr_id, 1, l_claim_rec.claim_id);
3486 DBMS_SQL.define_column_char(l_claim_csr_id, 2, l_claim_rec.claim_number, 30);
3487 DBMS_SQL.define_column(l_claim_csr_id, 3, l_claim_rec.object_version_number);
3488 DBMS_SQL.define_column_char(l_claim_csr_id, 4, l_claim_rec.claim_class, 30);
3489 DBMS_SQL.define_column(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
3490 DBMS_SQL.define_column(l_claim_csr_id, 6, l_claim_rec.amount_settled);
3491 DBMS_SQL.define_column(l_claim_csr_id, 7, l_claim_rec.source_object_id);
3492 DBMS_SQL.define_column_char(l_claim_csr_id, 8, l_claim_rec.payment_method, 15);
3493
3494 FND_DSQL.do_binds;
3495 l_claim_num_rows := DBMS_SQL.execute(l_claim_csr_id);
3496
3497 l_counter := 1;
3498 LOOP
3499 IF DBMS_SQL.fetch_rows(l_claim_csr_id) > 0 THEN
3500
3501 DBMS_SQL.column_value(l_claim_csr_id, 1, l_claim_rec.claim_id);
3502 DBMS_SQL.column_value_char(l_claim_csr_id, 2, l_claim_rec.claim_number);
3503 DBMS_SQL.column_value(l_claim_csr_id, 3, l_claim_rec.object_version_number);
3504 DBMS_SQL.column_value_char(l_claim_csr_id, 4, l_claim_rec.claim_class);
3505 DBMS_SQL.column_value(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
3506 DBMS_SQL.column_value(l_claim_csr_id, 6, l_claim_rec.amount_settled);
3507 DBMS_SQL.column_value(l_claim_csr_id, 7, l_claim_rec.source_object_id);
3508 DBMS_SQL.column_value_char(l_claim_csr_id, 8, l_claim_rec.payment_method);
3509
3510 l_claim_id_ver(l_counter).claim_id := l_claim_rec.claim_id;
3511 l_claim_id_ver(l_counter).claim_number := RTRIM(l_claim_rec.claim_number, ' ');
3512 l_claim_id_ver(l_counter).object_version_number := l_claim_rec.object_version_number;
3513 l_claim_id_ver(l_counter).claim_class := RTRIM(l_claim_rec.claim_class, ' ');
3514 l_claim_id_ver(l_counter).amount_remaining := l_claim_rec.amount_remaining;
3515 l_claim_id_ver(l_counter).amount_settled := l_claim_rec.amount_settled;
3516 l_claim_id_ver(l_counter).source_object_id := l_claim_rec.source_object_id;
3517 l_claim_id_ver(l_counter).payment_method := RTRIM(l_claim_rec.payment_method, ' ');
3518
3519 ELSE
3520 EXIT;
3521 END IF;
3522 l_counter := l_counter + 1;
3523 END LOOP;
3524 DBMS_SQL.close_cursor(l_claim_csr_id);
3525
3526
3527 IF l_claim_id_ver.count > 0 THEN
3528 FOR i IN 1..l_claim_id_ver.count LOOP
3529 FND_MSG_PUB.initialize;
3530 l_inv_bal_error := FALSE;
3531 l_deduction_type := NULL;
3532 BEGIN
3533 SAVEPOINT AR_SETTLEMENT;
3534
3535 IF l_claim_id_ver(i).claim_id IS NOT NULL AND
3536 l_claim_id_ver(i).claim_id <> FND_API.g_miss_num THEN
3537 BEGIN
3538 OPEN csr_claim_lock(l_claim_id_ver(i).claim_id);
3539 FETCH csr_claim_lock INTO l_claim_lock_rec;
3540 If (csr_claim_lock%NOTFOUND) then
3541 CLOSE csr_claim_lock;
3542 FND_MESSAGE.SET_NAME('FND', 'FORM_RECORD_DELETED');
3543 APP_EXCEPTION.RAISE_EXCEPTION;
3544 END IF;
3545 CLOSE csr_claim_lock;
3546 EXCEPTION
3547 WHEN OTHERS THEN
3548 RAISE LOCK_EXCEPTION;
3549 END;
3550
3551 Get_AR_Rec(
3552 p_claim_id => l_claim_id_ver(i).claim_id,
3553 p_claim_number => l_claim_id_ver(i).claim_number,
3554 p_payment_method => l_claim_id_ver(i).payment_method,
3555 p_settlement_amount => (l_claim_id_ver(i).amount_remaining + l_claim_id_ver(i).amount_settled),
3556 x_settlement_doc_tbl => l_settlement_doc_tbl,
3557 x_return_status => l_return_status
3558 );
3559 IF l_return_status = FND_API.g_ret_sts_error THEN
3560 RAISE FND_API.g_exc_error;
3561 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3562 RAISE FND_API.g_exc_unexpected_error;
3563 END IF;
3564
3565 IF l_settlement_doc_tbl.count > 0 THEN
3566
3567 FND_FILE.PUT_LINE(FND_FILE.LOG, '-------------- '||l_claim_id_ver(i).claim_number||' --------------');
3568 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claim Number : ' || l_claim_id_ver(i).claim_number);
3569
3570 -- ----------------
3571 -- 1. Query Claim
3572 -- ----------------
3573 OZF_AR_PAYMENT_PVT.Query_Claim(
3574 p_claim_id => l_claim_id_ver(i).claim_id
3575 ,x_claim_rec => l_claim_rec
3576 ,x_return_status => l_return_status
3577 );
3578 IF l_return_status = FND_API.g_ret_sts_error THEN
3579 RAISE FND_API.g_exc_error;
3580 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3581 RAISE FND_API.g_exc_unexpected_error;
3582 END IF;
3583
3584 -- ---------------------------
3585 -- 2. Classify Deduction Type
3586 -- ---------------------------
3587 IF l_claim_rec.claim_class = 'CLAIM' THEN
3588 l_deduction_type := 'CLAIM';
3589 ELSIF l_claim_rec.claim_class = 'CHARGE' THEN
3590 l_deduction_type := 'CHARGE';
3591 ELSIF l_claim_rec.claim_class = 'DEDUCTION' THEN
3592 IF l_claim_rec.source_object_class IS NULL AND
3593 l_claim_rec.source_object_id IS NULL THEN
3594 l_deduction_type := 'RECEIPT_DED';
3595 IF OZF_DEBUG_HIGH_ON THEN
3596 OZF_Utility_PVT.debug_message('Non-Invoice Deduction');
3597 END IF;
3598 ELSE
3599 l_deduction_type := 'SOURCE_DED';
3600 IF OZF_DEBUG_HIGH_ON THEN
3601 OZF_Utility_PVT.debug_message('Invoice Deduction : invoice_id ='||l_claim_id_ver(i).source_object_id);
3602 END IF;
3603 END IF;
3604 ELSIF l_claim_rec.claim_class = 'OVERPAYMENT' THEN
3605 IF l_claim_rec.source_object_class IS NULL AND
3606 l_claim_rec.source_object_id IS NULL THEN
3607 l_deduction_type := 'RECEIPT_OPM';
3608 IF OZF_DEBUG_HIGH_ON THEN
3609 OZF_Utility_PVT.debug_message('Overpayment');
3610 END IF;
3611 ELSE
3612 l_deduction_type := 'SOURCE_OPM';
3613 END IF;
3614 END IF;
3615
3616 -- -------------------------------
3617 -- 3. Identify Credit Memo Amount
3618 -- -------------------------------
3619 OPEN csr_cm_dm_total_amount(l_settlement_doc_tbl(1).settlement_id);
3620 FETCH csr_cm_dm_total_amount INTO l_cm_dm_amount, l_cm_dm_tax_amount, l_cm_dm_freight_amount;
3621 CLOSE csr_cm_dm_total_amount;
3622
3623 l_cm_dm_total_amount := l_cm_dm_amount + l_cm_dm_tax_amount + l_cm_dm_freight_amount;
3624
3625 l_difference_amount := l_claim_rec.amount_settled + l_cm_dm_total_amount;
3626
3627 FND_FILE.PUT_LINE(FND_FILE.LOG, 'claim amount settled = '||l_claim_rec.amount_settled);
3628 FND_FILE.PUT_LINE(FND_FILE.LOG, 'claim amount remaining = '||l_claim_rec.amount_remaining);
3629
3630 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Credit/Debit Memo total amount = '||l_cm_dm_total_amount);
3631 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Credit/Debit Memo line amount = '||l_cm_dm_amount);
3632 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Credit/Debit Memo tax amount = '||l_cm_dm_tax_amount);
3633 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Credit/Debit Memo freight amount = '||l_cm_dm_freight_amount);
3634 FND_FILE.PUT_LINE(FND_FILE.LOG, ' ----');
3635 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Difference Amount = '||l_difference_amount);
3636
3637
3638 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Amount Settled : ' || l_claim_rec.amount_settled);
3639 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Amount Remaining : ' || l_claim_rec.amount_remaining);
3640 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Credit/Debit Amount : ' || l_cm_dm_total_amount);
3641
3642 -- Bug3805485: Tax Amount Calculation
3643 IF ABS(l_difference_amount) > 0 AND Is_Tax_Inclusive(l_deduction_type,l_claim_rec.org_id) THEN
3644
3645 -- Calculate other amount and update it in claim tax_amount
3646 -- Bug4087329: Changed Tax Amount Calculation.
3647 IF l_deduction_type IN ('RECEIPT_OPM', 'CHARGE') THEN
3648 l_claim_rec.tax_amount := GREATEST(NVL(l_claim_rec.amount_remaining,0),
3649 ( l_cm_dm_tax_amount + l_cm_dm_freight_amount) * -1 );
3650 ELSE
3651 l_claim_rec.tax_amount := LEAST(NVL(l_claim_rec.amount_remaining,0),
3652 ( l_cm_dm_tax_amount + l_cm_dm_freight_amount) * -1 );
3653 END IF;
3654
3655 --Fix for Bug 7296882
3656 if (l_upd_claim_rec.amount <> l_upd_claim_rec.amount_settled AND l_upd_claim_rec.amount_adjusted IS NOT NULL ) then
3657 -- Fix for Bug 7418326
3658 l_upd_claim_rec.tax_amount :=0;
3659 end if;
3660
3661 l_upd_claim_rec.amount_remaining := l_upd_claim_rec.amount - l_upd_claim_rec.amount_adjusted -
3662 l_upd_claim_rec.amount_settled - l_upd_claim_rec.tax_amount;
3663
3664
3665 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Tax Amount = '||l_claim_rec.tax_amount);
3666 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Remaining Amount = '||l_claim_rec.amount_remaining);
3667
3668 Update_Claim_Tax_Amount(
3669 p_claim_rec => l_claim_rec
3670 ,x_return_status => l_return_status
3671 ,x_msg_data => x_msg_data
3672 ,x_msg_count => x_msg_count
3673 );
3674 IF l_return_status = FND_API.g_ret_sts_error THEN
3675 RAISE FND_API.G_EXC_ERROR;
3676 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3677 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3678 END IF;
3679
3680 END IF;
3681
3682 -- Bug4087329: Write off for deductions and overpayments if within
3683 -- threshold
3684 l_write_off_flag := FALSE;
3685 IF NVL(TO_NUMBER(g_writeoff_threshold), 0) >= ABS(l_claim_rec.amount_remaining) AND
3686 ( l_deduction_type in ( 'SOURCE_DED', 'RECEIPT_OPM') OR
3687 ( l_deduction_type = 'RECEIPT_DED' AND
3688 ARP_DEDUCTION_COVER.negative_rct_writeoffs_allowed ) )
3689 THEN
3690 l_write_off_flag := TRUE;
3691 END IF;
3692
3693 -- ---------------------------------
3694 -- 5. Split Claim Settlement if needed
3695 -- ---------------------------------
3696 IF NOT l_write_off_flag AND
3697 ABS(l_claim_rec.amount_remaining) > 0 THEN
3698
3699 -- re-query claim here becasue amount_remaining is changed
3700 OZF_AR_PAYMENT_PVT.Query_Claim(
3701 p_claim_id => l_claim_id_ver(i).claim_id
3702 ,x_claim_rec => l_claim_rec
3703 ,x_return_status => l_return_status
3704 );
3705 IF l_return_status = FND_API.g_ret_sts_error THEN
3706 RAISE FND_API.g_exc_error;
3707 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3708 RAISE FND_API.g_exc_unexpected_error;
3709 END IF;
3710
3711 Split_Claim_Settlement(
3712 p_claim_rec => l_claim_rec
3713 ,p_difference_amount => l_claim_rec.amount_remaining
3714 ,x_return_status => l_return_status
3715 ,x_msg_data => x_msg_data
3716 ,x_msg_count => x_msg_count
3717 );
3718 IF l_return_status = FND_API.g_ret_sts_error THEN
3719 RAISE FND_API.g_exc_error;
3720 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3721 RAISE FND_API.g_exc_unexpected_error;
3722 END IF;
3723
3724 fnd_file.put_line(fnd_file.log, 'Amount Remaning '||l_claim_rec.amount_remaining);
3725 fnd_file.put_line(fnd_file.log, ' Amount Remaining --> Split');
3726
3727 END IF;
3728
3729 -- re-query claim here becasue amount_remaining is changed
3730 OZF_AR_PAYMENT_PVT.Query_Claim(
3731 p_claim_id => l_claim_id_ver(i).claim_id
3732 ,x_claim_rec => l_claim_rec
3733 ,x_return_status => l_return_status
3734 );
3735 IF l_return_status = FND_API.g_ret_sts_error THEN
3736 RAISE FND_API.g_exc_error;
3737 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3738 RAISE FND_API.g_exc_unexpected_error;
3739 END IF;
3740
3741
3742 -- Bug4087329: Settlement Amount is recalculated.
3743 -- Bug4365819: Calculate settlement amount before doing a write off
3744 l_settlement_doc_tbl(1).settlement_amount :=( NVL(l_claim_rec.amount_settled, 0) +
3745 NVL(l_claim_rec.tax_amount, 0)) * -1 ;
3746 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Recalculated Settlement Amount = '||l_settlement_doc_tbl(1).settlement_amount);
3747
3748
3749 -- -----------------------------------------------
3750 -- Bug4087329: Write Off
3751 -- -----------------------------------------------
3752 IF l_write_off_flag AND ABS(l_claim_rec.amount_remaining) > 0 THEN
3753
3754 Create_Write_Off(
3755 p_claim_rec => l_claim_rec
3756 ,p_customer_trx_id => l_claim_rec.source_object_id
3757 ,p_deduction_type => l_deduction_type
3758 ,p_difference_amount => l_claim_rec.amount_remaining
3759 ,x_claim_object_version => l_dummy_number
3760 ,x_return_status => l_return_status
3761 ,x_msg_data => x_msg_data
3762 ,x_msg_count => x_msg_count
3763 );
3764 IF l_return_status = FND_API.g_ret_sts_error THEN
3765 RAISE FND_API.g_exc_error;
3766 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3767 RAISE FND_API.g_exc_unexpected_error;
3768 END IF;
3769
3770 fnd_file.put_line(fnd_file.log, ' Amount Remaining --> Write Off ');
3771
3772 -- re-query claim here becasue amount_remaining is changed
3773 OZF_AR_PAYMENT_PVT.Query_Claim(
3774 p_claim_id => l_claim_id_ver(i).claim_id
3775 ,x_claim_rec => l_claim_rec
3776 ,x_return_status => l_return_status
3777 );
3778 IF l_return_status = FND_API.g_ret_sts_error THEN
3779 RAISE FND_API.g_exc_error;
3780 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3781 RAISE FND_API.g_exc_unexpected_error;
3782 END IF;
3783
3784 END IF;
3785
3786
3787 -- ---------------------------------
3788 -- 5. Create the Settlement Docs
3789 -- ---------------------------------
3790 IF l_claim_id_ver(i).claim_class IN ('DEDUCTION', 'OVERPAYMENT') AND
3791 l_settlement_doc_tbl(1).settlement_id IS NOT NULL AND
3792 l_settlement_doc_tbl(1).settlement_id <> FND_API.G_miss_num THEN
3793
3794 IF l_deduction_type IN ('SOURCE_DED', 'RECEIPT_DED') THEN
3795 IF l_deduction_type = 'SOURCE_DED' THEN
3796 OZF_CLAIM_SETTLEMENT_PVT.Check_Transaction_Balance(
3797 p_customer_trx_id => l_claim_rec.source_object_id
3798 ,p_claim_amount => (l_settlement_doc_tbl(1).settlement_amount * -1)
3799 ,p_claim_number => l_claim_rec.claim_number
3800 ,x_return_status => l_return_status
3801 );
3802 IF l_return_status = FND_API.g_ret_sts_error THEN
3803 l_inv_bal_error := TRUE;
3804 OZF_UTILITY_PVT.write_conc_log;
3805 --Raise exception to allow for rollback of split
3806 RAISE FND_API.g_exc_error;
3807 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3808 RAISE FND_API.g_exc_error;
3809 END IF;
3810 END IF;
3811
3812 IF NOT l_inv_bal_error THEN
3813
3814 OZF_AR_PAYMENT_PVT.Pay_by_Credit_Memo(
3815 p_claim_rec => l_claim_rec
3816 ,p_deduction_type => l_deduction_type
3817 ,p_payment_reference_id => l_settlement_doc_tbl(1).settlement_id
3818 ,p_credit_memo_amount => (l_settlement_doc_tbl(1).settlement_amount * -1) -- positive amount
3819 ,x_return_status => l_return_status
3820 ,x_msg_data => x_msg_data
3821 ,x_msg_count => x_msg_count
3822 );
3823 IF l_return_status = FND_API.g_ret_sts_error THEN
3824 RAISE FND_API.g_exc_error;
3825 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3826 RAISE FND_API.g_exc_unexpected_error;
3827 END IF;
3828
3829 END IF;
3830
3831 ELSIF l_deduction_type = 'RECEIPT_OPM' THEN
3832
3833 OZF_AR_PAYMENT_PVT.Pay_by_Debit_Memo(
3834 p_claim_rec => l_claim_rec
3835 ,p_deduction_type => l_deduction_type
3836 ,p_payment_reference_id => l_settlement_doc_tbl(1).settlement_id
3837 ,p_debit_memo_amount => (l_settlement_doc_tbl(1).settlement_amount * -1)
3838 ,x_return_status => l_return_status
3839 ,x_msg_data => x_msg_data
3840 ,x_msg_count => x_msg_count
3841 );
3842 IF l_return_status = FND_API.g_ret_sts_error THEN
3843 RAISE FND_API.g_exc_error;
3844 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3845 RAISE FND_API.g_exc_unexpected_error;
3846 END IF;
3847
3848 END IF;
3849
3850 -- -------------------------------------------------
3851 -- CLAIM / CHARGE --
3852 -- -------------------------------------------------
3853 ELSE
3854 l_upd_claim_status := FALSE;
3855
3856 FOR j IN l_settlement_doc_tbl.FIRST..l_settlement_doc_tbl.LAST LOOP
3857 IF l_settlement_doc_tbl(j).settlement_id is not null AND
3858 l_settlement_doc_tbl(j).settlement_id <> FND_API.g_miss_num THEN
3859 l_settlement_doc_tbl(j).settlement_date := SYSDATE;
3860 l_settlement_doc_tbl(j).payment_method := l_claim_rec.payment_method;
3861
3862 Create_Settlement_Doc(
3863 p_api_version_number => l_api_version,
3864 p_init_msg_list => FND_API.g_false,
3865 p_commit => FND_API.g_false,
3866 p_validation_level => FND_API.g_valid_level_full,
3867 x_return_status => l_return_status,
3868 x_msg_count => x_msg_count,
3869 x_msg_data => x_msg_data,
3870 p_settlement_doc_rec => l_settlement_doc_tbl(j),
3871 x_settlement_doc_id => l_settlement_doc_id
3872 );
3873 IF l_return_status = FND_API.g_ret_sts_error THEN
3874 RAISE FND_API.g_exc_error;
3875 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3876 RAISE FND_API.g_exc_unexpected_error;
3877 END IF;
3878
3879 l_upd_claim_status := TRUE;
3880 END IF;
3881 END LOOP;
3882
3883 IF l_upd_claim_status THEN
3884 Update_Claim_From_Settlement(
3885 p_api_version_number => l_api_version,
3886 p_init_msg_list => FND_API.g_false,
3887 p_commit => FND_API.g_false,
3888 p_validation_level => FND_API.g_valid_level_full,
3889 x_return_status => l_return_status,
3890 x_msg_count => x_msg_count,
3891 x_msg_data => x_msg_data,
3892 p_claim_id => l_claim_id_ver(i).claim_id,
3893 p_object_version_number => l_claim_id_ver(i).object_version_number,
3894 p_status_code => 'CLOSED',
3895 p_payment_status => 'PAID'
3896 );
3897 IF l_return_status = FND_API.g_ret_sts_error THEN
3898 RAISE FND_API.g_exc_error;
3899 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
3900 RAISE FND_API.g_exc_unexpected_error;
3901 END IF;
3902
3903 END IF; -- end if l_upd_claim_status
3904 END IF; -- end if l_claim_id_ver(i).claim_class IN ('DEDUCTION', 'OVERPAYMENT')
3905
3906
3907 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Success.');
3908
3909 l_successful_claims := l_successful_claims + 1;
3910
3911 FND_FILE.PUT_LINE(FND_FILE.LOG, '---------------- '||l_claim_id_ver(i).claim_number||' ----------------');
3912 END IF; -- end if l_settlement_doc_tbl.count > 0
3913 END IF; -- end if l_claim_id_ver.claim_id is not null and g_miss_num
3914
3915 EXCEPTION
3916 WHEN FND_API.G_EXC_ERROR THEN
3917 ROLLBACK TO AR_SETTLEMENT;
3918 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
3919 OZF_UTILITY_PVT.write_conc_log;
3920 FND_FILE.PUT_LINE(FND_FILE.LOG, '---------------- '||l_claim_id_ver(i).claim_number||' ----------------');
3921
3922 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3923 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
3924 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3925
3926 l_failed_claims := l_failed_claims + 1;
3927
3928 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3929 ROLLBACK TO AR_SETTLEMENT;
3930 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
3931 OZF_UTILITY_PVT.write_conc_log;
3932 FND_FILE.PUT_LINE(FND_FILE.LOG, '---------------- '||l_claim_id_ver(i).claim_number||' ----------------');
3933
3934 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3935 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
3936 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3937
3938 l_failed_claims := l_failed_claims + 1;
3939
3940 WHEN LOCK_EXCEPTION THEN
3941 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' cannot be proceed again.');
3942 FND_FILE.PUT_LINE(FND_FILE.LOG, '---------------- '||l_claim_id_ver(i).claim_number||' ----------------');
3943
3944 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3945 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : Claim is locked and cannot be processed.');
3946 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3947
3948 l_failed_claims := l_failed_claims + 1;
3949
3950 WHEN OTHERS THEN
3951 ROLLBACK TO AR_SETTLEMENT;
3952 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
3953 OZF_UTILITY_PVT.write_conc_log;
3954 FND_FILE.PUT_LINE(FND_FILE.LOG, '---------------- '||l_claim_id_ver(i).claim_number||' ----------------');
3955
3956 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
3957 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || SQLCODE || ' : ' || SQLERRM);
3958 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3959
3960 l_failed_claims := l_failed_claims + 1;
3961 END;
3962
3963 END LOOP;
3964 END IF; -- end if l_claim_id_ver.count > 0
3965
3966 --------------------- finish -----------------------
3967 IF FND_API.to_boolean(p_commit) THEN
3968 COMMIT;
3969 END IF;
3970
3971 IF OZF_DEBUG_HIGH_ON THEN
3972 OZF_UTILITY_PVT.debug_message(l_full_name ||': end');
3973 END IF;
3974
3975 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims successfully fetched for AR Settlement : ' || l_successful_claims);
3976 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims failed to be fetched for AR Settlement : ' || l_failed_claims);
3977
3978 EXCEPTION
3979 WHEN OTHERS THEN
3980 ROLLBACK TO Get_Receivable_Settlement;
3981 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3982 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3983 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
3984 END IF;
3985 FND_MSG_PUB.Count_And_Get(
3986 p_encoded => FND_API.g_false,
3987 p_count => x_msg_count,
3988 p_data => x_msg_data
3989 );
3990 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Receivable Settlement Failed.');
3991 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || SQLCODE || ' : ' || SQLERRM);
3992 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
3993 End Get_Receivable_Settlement;
3994
3995
3996 ---------------------------------------------------------------------
3997 -- PROCEDURE
3998 -- Get_Payable_Settlement
3999 --
4000 -- HISTORY
4001 -- pnerella Create.
4002 -- 05/30/2001 mchang Modified.
4003 ---------------------------------------------------------------------
4004 PROCEDURE Get_Payable_Settlement(
4005 p_api_version_number IN NUMBER,
4006 p_init_msg_list IN VARCHAR2,
4007 p_commit IN VARCHAR2,
4008 p_validation_level IN NUMBER,
4009
4010 p_claim_class IN VARCHAR2,
4011 p_payment_method IN VARCHAR2,
4012 p_cust_account_id IN NUMBER,
4013 p_claim_type_id IN NUMBER,
4014 p_reason_code_id IN NUMBER,
4015
4016 x_return_status OUT NOCOPY VARCHAR2,
4017 x_msg_count OUT NOCOPY NUMBER,
4018 x_msg_data OUT NOCOPY VARCHAR2
4019 )
4020 IS
4021 l_api_version_number CONSTANT NUMBER := 1.0;
4022 l_api_name CONSTANT VARCHAR2(30) := 'Get_Payable_Settlement';
4023 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
4024 l_return_status VARCHAR2(1);
4025 l_failed_claims NUMBER := 0;
4026 l_successful_claims NUMBER := 0;
4027 l_reopened_claims NUMBER := 0;
4028
4029 CURSOR csr_settle_doc_exist(cv_settlement_id IN NUMBER) IS
4030 SELECT settlement_doc_id
4031 , object_version_number
4032 , settlement_amount
4033 , status_code
4034 FROM ozf_settlement_docs
4035 WHERE settlement_id = cv_settlement_id;
4036
4037 l_settlement_doc_tbl settlement_doc_tbl_type;
4038 l_settlement_doc_rec settlement_doc_rec_type;
4039 l_settlement_doc_id NUMBER;
4040 l_total_pay_amount NUMBER := 0;
4041 l_settle_obj_ver NUMBER;
4042 l_settle_doc_id NUMBER;
4043 l_settle_amount NUMBER;
4044 l_settle_status varchar2(30);
4045 l_pay_clear_flag VARCHAR2(1) := NULL;
4046
4047 l_payment_method_stmt VARCHAR2(100);
4048 TYPE ClaimCsrType IS REF CURSOR;
4049 c_get_claims_csr ClaimCsrType;
4050 --TYPE claim_id_ver_type IS TABLE OF c_get_claims_csr%ROWTYPE
4051 --INDEX BY BINARY_INTEGER;
4052 l_claim_id_ver OZF_CLAIM_PVT.claim_tbl_type;
4053 l_claim_rec OZF_CLAIM_PVT.claim_rec_type;
4054 l_counter NUMBER := 1;
4055 l_invoice_amount NUMBER;
4056
4057 l_payment_method_tbl g_payment_method_tbl;
4058 l_claim_csr_stmt VARCHAR2(1000);
4059 l_stmt_debug VARCHAR2(1000);
4060 l_claim_csr_id NUMBER;
4061 l_claim_num_rows NUMBER;
4062
4063 -- R12: Document Cancellation
4064 CURSOR csr_inv_status(cv_claim_id IN NUMBER) IS
4065 SELECT invoice_id,
4066 cancelled_date
4067 FROM ap_invoices_all ap,
4068 ozf_claims_all oc
4069 WHERE claim_id = cv_claim_id
4070 AND invoice_num = oc.payment_reference_number
4071 AND ap.vendor_id = oc.vendor_id
4072 AND ap.vendor_site_id = oc.vendor_site_id;
4073 l_cancelled_date DATE;
4074 l_invoice_id NUMBER;
4075
4076 --R12: Tax Enhancements
4077 CURSOR csr_inv_gross_amount(cv_invoice_id IN NUMBER) IS
4078 SELECT invoice_amount
4079 FROM ap_invoices
4080 WHERE invoice_id = cv_invoice_id;
4081 l_gross_amt NUMBER;
4082 l_difference_amount NUMBER;
4083 l_settlement_amount NUMBER;
4084 l_tax_included_flag BOOLEAN := FALSE;
4085
4086 CURSOR csr_paid_amount(cv_invoice_id IN NUMBER) IS
4087 SELECT sum(pay.amount + NVL(pay.discount_taken,0))
4088 FROM ap_invoice_payments_all pay
4089 , ap_invoices_all inv
4090 WHERE inv.invoice_id = pay.invoice_id
4091 AND inv.invoice_id = cv_invoice_id;
4092
4093 BEGIN
4094 --------------------- initialize -----------------------
4095 SAVEPOINT Get_Payable_Settlement;
4096
4097 -- Standard call to check for call compatibility.
4098 IF NOT FND_API.Compatible_API_Call (
4099 l_api_version_number,
4100 p_api_version_number,
4101 l_api_name,
4102 G_PKG_NAME
4103 ) THEN
4104 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4105 END IF;
4106
4107 -- Initialize message list if p_init_msg_list is set to TRUE.
4108 IF FND_API.to_Boolean(p_init_msg_list) THEN
4109 FND_MSG_PUB.initialize;
4110 END IF;
4111
4112 x_return_status := FND_API.g_ret_sts_success;
4113
4114 --------------------- start -----------------------
4115 IF OZF_DEBUG_HIGH_ON THEN
4116 OZF_UTILITY_PVT.debug_message(l_full_name ||': start');
4117 END IF;
4118
4119 IF p_payment_method IN ( 'CHECK','EFT','WIRE','AP_DEFAULT','AP_DEBIT') THEN
4120 l_payment_method_tbl(1) := p_payment_method;
4121 ELSIF p_payment_method IS NULL THEN
4122 l_payment_method_tbl(1) := 'CHECK';
4123 l_payment_method_tbl(2) := 'EFT';
4124 l_payment_method_tbl(3) := 'WIRE';
4125 l_payment_method_tbl(4) := 'AP_DEFAULT';
4126 l_payment_method_tbl(5) := 'AP_DEBIT';
4127 END IF;
4128
4129
4130 ---- Get the claims to be processed
4131 Get_claim_csr(
4132 p_payment_method_tbl => l_payment_method_tbl
4133 ,p_claim_class => p_claim_class
4134 ,p_cust_account_id => p_cust_account_id
4135 ,p_claim_type_id => p_claim_type_id
4136 ,p_reason_code_id => p_reason_code_id
4137 ,p_payment_status => 'INTERFACED'
4138 );
4139
4140 l_claim_csr_id := DBMS_SQL.open_cursor;
4141 FND_DSQL.set_cursor(l_claim_csr_id);
4142 l_claim_csr_stmt := FND_DSQL.get_text(FALSE);
4143
4144 l_stmt_debug := fnd_dsql.get_text(TRUE);
4145
4146 FND_FILE.PUT_LINE(FND_FILE.LOG, 'QUERY CLAIM SQL :: ' || l_stmt_debug);
4147
4148 DBMS_SQL.parse(l_claim_csr_id, l_claim_csr_stmt, DBMS_SQL.native);
4149 DBMS_SQL.define_column(l_claim_csr_id, 1, l_claim_rec.claim_id);
4150 DBMS_SQL.define_column_char(l_claim_csr_id, 2, l_claim_rec.claim_number, 30);
4151 DBMS_SQL.define_column(l_claim_csr_id, 3, l_claim_rec.object_version_number);
4152 DBMS_SQL.define_column_char(l_claim_csr_id, 4, l_claim_rec.claim_class, 30);
4153 DBMS_SQL.define_column(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
4154 DBMS_SQL.define_column(l_claim_csr_id, 6, l_claim_rec.amount_settled);
4155 DBMS_SQL.define_column(l_claim_csr_id, 7, l_claim_rec.source_object_id);
4156 DBMS_SQL.define_column_char(l_claim_csr_id, 8, l_claim_rec.payment_method, 15);
4157 FND_DSQL.do_binds;
4158 l_claim_num_rows := DBMS_SQL.execute(l_claim_csr_id);
4159
4160 l_counter := 1;
4161 LOOP
4162 IF DBMS_SQL.fetch_rows(l_claim_csr_id) > 0 THEN
4163
4164 DBMS_SQL.column_value(l_claim_csr_id, 1, l_claim_rec.claim_id);
4165 DBMS_SQL.column_value_char(l_claim_csr_id, 2, l_claim_rec.claim_number);
4166 DBMS_SQL.column_value(l_claim_csr_id, 3, l_claim_rec.object_version_number);
4167 DBMS_SQL.column_value_char(l_claim_csr_id, 4, l_claim_rec.claim_class);
4168 DBMS_SQL.column_value(l_claim_csr_id, 5, l_claim_rec.amount_remaining);
4169 DBMS_SQL.column_value(l_claim_csr_id, 6, l_claim_rec.amount_settled);
4170 DBMS_SQL.column_value(l_claim_csr_id, 7, l_claim_rec.source_object_id);
4171 DBMS_SQL.column_value_char(l_claim_csr_id, 8, l_claim_rec.payment_method);
4172
4173 l_claim_id_ver(l_counter).claim_id := l_claim_rec.claim_id;
4174 l_claim_id_ver(l_counter).claim_number := RTRIM(l_claim_rec.claim_number, ' ');
4175 l_claim_id_ver(l_counter).object_version_number := l_claim_rec.object_version_number;
4176 l_claim_id_ver(l_counter).claim_class := RTRIM(l_claim_rec.claim_class, ' ');
4177 l_claim_id_ver(l_counter).amount_remaining := l_claim_rec.amount_remaining;
4178 l_claim_id_ver(l_counter).amount_settled := l_claim_rec.amount_settled;
4179 l_claim_id_ver(l_counter).source_object_id := l_claim_rec.source_object_id;
4180 l_claim_id_ver(l_counter).payment_method := RTRIM(l_claim_rec.payment_method, ' ');
4181
4182 ELSE
4183 EXIT;
4184 END IF;
4185 l_counter := l_counter + 1;
4186 END LOOP;
4187 DBMS_SQL.close_cursor(l_claim_csr_id);
4188
4189
4190 -- Process individuals Claims
4191 FOR i IN 1..l_claim_id_ver.count LOOP
4192
4193 BEGIN
4194 SAVEPOINT AP_SETTLEMENT;
4195 FND_MSG_PUB.initialize;
4196
4197 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_id_ver(i).claim_number||' --------------*/');
4198 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claim Number : ' || l_claim_id_ver(i).claim_number);
4199
4200 -- set to 0 for next claim in loop
4201 l_total_pay_amount := 0;
4202 l_pay_clear_flag := NULL;
4203 l_cancelled_date := NULL;
4204
4205 -- Check for document status
4206 OPEN csr_inv_status( l_claim_id_ver(i).claim_id);
4207 FETCH csr_inv_status INTO l_invoice_id, l_cancelled_date;
4208 CLOSE csr_inv_status;
4209
4210 IF l_cancelled_date IS NOT NULL THEN
4211
4212 FND_FILE.PUT_LINE(FND_FILE.LOG, ' AP Document is Cancelled ' );
4213
4214 -- R12: Handle Document Cancellation
4215 Process_Cancelled_Setl_Doc(
4216 p_claim_id => l_claim_id_ver(i).claim_id
4217 ,x_return_status => l_return_status
4218 ,x_msg_count => x_msg_count
4219 ,x_msg_data => x_msg_data );
4220 IF l_return_status = FND_API.g_ret_sts_error THEN
4221 RAISE FND_API.g_exc_error;
4222 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4223 RAISE FND_API.g_exc_unexpected_error;
4224 END IF;
4225
4226 IF l_claim_id_ver(i).payment_method IN ( 'CHECK','EFT','WIRE','AP_DEFAULT') THEN
4227 FND_FILE.PUT_LINE(FND_FILE.LOG, ' Deleting settlement docs ' );
4228 DELETE FROM ozf_settlement_docs_all
4229 WHERE claim_id = l_claim_id_ver(i).claim_id;
4230 END IF;
4231 l_reopened_claims := l_reopened_claims + 1;
4232
4233 ELSE
4234
4235 OPEN csr_inv_gross_amount(l_invoice_id);
4236 FETCH csr_inv_gross_amount INTO l_gross_amt;
4237 CLOSE csr_inv_gross_amount;
4238
4239 OPEN csr_paid_amount(l_invoice_id);
4240 FETCH csr_paid_amount INTO l_total_pay_amount;
4241 CLOSE csr_paid_amount;
4242
4243 IF l_claim_id_ver(i).payment_method = 'AP_DEBIT' AND l_claim_rec.claim_class = 'CLAIM' THEN
4244 l_gross_amt := l_gross_amt * -1;
4245 END IF;
4246
4247 OZF_AR_PAYMENT_PVT.Query_Claim(
4248 p_claim_id => l_claim_id_ver(i).claim_id
4249 ,x_claim_rec => l_claim_rec
4250 ,x_return_status => l_return_status
4251 );
4252 IF l_return_status = FND_API.g_ret_sts_error THEN
4253 RAISE FND_API.g_exc_error;
4254 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4255 RAISE FND_API.g_exc_unexpected_error;
4256 END IF;
4257
4258
4259 l_difference_amount := l_gross_amt - l_claim_rec.amount_settled ;
4260 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Amount Settled = '||l_claim_rec.amount_settled);
4261 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Claim Amount Remaining = '||l_claim_rec.amount_remaining);
4262 FND_FILE.PUT_LINE(FND_FILE.LOG, 'AP Document Gross amount = '||l_gross_amt );
4263 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Difference amount = '||l_difference_amount);
4264
4265 l_settlement_amount := l_claim_rec.amount_settled;
4266 l_tax_included_flag := FALSE;
4267 IF ABS(l_difference_amount) <> 0 AND Is_Tax_Inclusive(l_claim_rec.claim_class,l_claim_rec.org_id)
4268 AND ABS(l_claim_rec.amount_remaining) > 0
4269 THEN
4270 l_tax_included_flag := TRUE;
4271 -- invoice amount is higher then settled amount due to tax/frieght
4272 IF l_claim_rec.claim_class = 'CHARGE' THEN
4273 l_settlement_amount := l_settlement_amount + GREATEST(l_claim_rec.amount_remaining, l_difference_amount);
4274 ELSE
4275 l_settlement_amount := l_settlement_amount + LEAST(l_claim_rec.amount_remaining, l_difference_amount );
4276 END IF;
4277 END IF;
4278
4279
4280 Get_AP_Rec(
4281 p_claim_id => l_claim_id_ver(i).claim_id,
4282 p_settlement_amount => l_settlement_amount,
4283 x_settlement_doc_tbl => l_settlement_doc_tbl,
4284 x_invoice_amount => l_invoice_amount,
4285 x_return_status => l_return_status
4286 );
4287 IF l_return_status = FND_API.g_ret_sts_error THEN
4288 RAISE FND_API.g_exc_error;
4289 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4290 RAISE FND_API.g_exc_unexpected_error;
4291 END IF;
4292
4293 IF l_settlement_doc_tbl.count > 0 AND l_settlement_doc_tbl(1).settlement_id is not null
4294 THEN
4295
4296 FOR j IN l_settlement_doc_tbl.FIRST..l_settlement_doc_tbl.LAST LOOP
4297
4298 l_settle_doc_id := NULL;
4299
4300 IF l_settlement_doc_tbl(j).status_code = 'RECONCILED' THEN
4301 l_pay_clear_flag := FND_API.g_true;
4302 ELSE
4303 l_pay_clear_flag := FND_API.g_false;
4304 END IF;
4305
4306 OPEN csr_settle_doc_exist(l_settlement_doc_tbl(j).settlement_id);
4307 FETCH csr_settle_doc_exist INTO l_settle_doc_id, l_settle_obj_ver
4308 , l_settle_amount, l_settle_status;
4309 CLOSE csr_settle_doc_exist;
4310
4311 IF l_settle_doc_id IS NOT NULL
4312 THEN
4313 l_settlement_doc_tbl(j).settlement_doc_id := l_settle_doc_id;
4314 l_settlement_doc_tbl(j).object_version_number := l_settle_obj_ver;
4315
4316 IF l_settle_amount <> l_settlement_doc_tbl(j).settlement_amount OR
4317 l_settle_status <> l_settlement_doc_tbl(j).status_code
4318 THEN
4319 IF OZF_DEBUG_HIGH_ON THEN
4320 OZF_UTILITY_PVT.debug_message('New Status' || l_settlement_doc_tbl(j).status_code );
4321 OZF_UTILITY_PVT.debug_message('Old Status' || l_settle_status );
4322 OZF_UTILITY_PVT.debug_message('New Amount' || l_settlement_doc_tbl(j).settlement_amount );
4323 OZF_UTILITY_PVT.debug_message('Old Amount' || l_settle_amount );
4324 OZF_UTILITY_PVT.debug_message('Updating settlement doc ');
4325 END IF;
4326 Update_Settlement_Doc(
4327 p_api_version_number => 1.0,
4328 p_init_msg_list => FND_API.g_false,
4329 p_commit => p_commit,
4330 p_validation_level => FND_API.g_valid_level_full,
4331 x_return_status => l_return_status,
4332 x_msg_count => x_msg_count,
4333 x_msg_data => x_msg_data,
4334 p_settlement_doc_rec => l_settlement_doc_tbl(j),
4335 x_object_version_number => l_settlement_doc_tbl(j).object_version_number
4336 );
4337 IF l_return_status = FND_API.g_ret_sts_error THEN
4338 RAISE FND_API.g_exc_error;
4339 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4340 RAISE FND_API.g_exc_unexpected_error;
4341 END IF;
4342
4343 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Update settlement doc :: settlement_doc_id='||l_settlement_doc_tbl(j).settlement_id);
4344 END IF;
4345 ELSE
4346 Create_Settlement_Doc(
4347 p_api_version_number => 1.0,
4348 p_init_msg_list => FND_API.g_false,
4349 p_commit => p_commit,
4350 p_validation_level => FND_API.g_valid_level_full,
4351 x_return_status => l_return_status,
4352 x_msg_count => x_msg_count,
4353 x_msg_data => x_msg_data,
4354 p_settlement_doc_rec => l_settlement_doc_tbl(j),
4355 x_settlement_doc_id => l_settlement_doc_id
4356 );
4357 IF l_return_status = FND_API.g_ret_sts_error THEN
4358 RAISE FND_API.g_exc_error;
4359 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4360 RAISE FND_API.g_exc_unexpected_error;
4361 END IF;
4362
4363 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Create settlement doc :: settlement_doc_id = '||l_settlement_doc_id);
4364
4365 END IF; -- l_settle_doc_id IS NOT NULL
4366
4367 END LOOP;
4368
4369 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Invoice amount ='||l_invoice_amount);
4370 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Total payment ='||l_total_pay_amount);
4371 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Invoice Amount : ' || l_invoice_amount);
4372 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Total Payment : ' || l_total_pay_amount);
4373
4374 ------------------------------------------------
4375 -- R12: Consider Tax and Split ------
4376 ------------------------------------------------
4377 IF l_claim_id_ver(i).payment_method = 'AP_DEBIT' OR l_invoice_amount <= l_total_pay_amount
4378 THEN
4379
4380 IF l_tax_included_flag THEN
4381
4382 -- invoice amount is higher then settled amount due to tax/frieght
4383 IF l_claim_rec.claim_class = 'CHARGE' THEN
4384 l_claim_rec.tax_amount := GREATEST(l_claim_rec.amount_remaining, l_difference_amount);
4385 ELSE
4386 l_claim_rec.tax_amount := LEAST(l_claim_rec.amount_remaining, l_difference_amount );
4387 END IF;
4388 l_claim_rec.amount_remaining := l_claim_rec.amount - l_claim_rec.amount_settled - l_claim_rec.amount_adjusted -
4389 l_claim_rec.tax_amount;
4390
4391 fnd_file.put_line(fnd_file.log, 'Tax Amount '||l_claim_rec.tax_amount);
4392 fnd_file.put_line(fnd_file.log, 'Amount Remaining '||l_claim_rec.amount_remaining);
4393 Update_Claim_Tax_Amount(
4394 p_claim_rec => l_claim_rec
4395 ,x_return_status => l_return_status
4396 ,x_msg_data => x_msg_data
4397 ,x_msg_count => x_msg_count
4398 );
4399 IF l_return_status = FND_API.g_ret_sts_error THEN
4400 RAISE FND_API.G_EXC_ERROR;
4401 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4402 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4403 END IF;
4404 END IF;
4405
4406 -- Split Claim : if there is difference amount --
4407 IF ABS(l_claim_rec.amount_remaining) <> 0 THEN
4408 OZF_AR_PAYMENT_PVT.Query_Claim(
4409 p_claim_id => l_claim_id_ver(i).claim_id
4410 ,x_claim_rec => l_claim_rec
4411 ,x_return_status => l_return_status
4412 );
4413 IF l_return_status = FND_API.g_ret_sts_error THEN
4414 RAISE FND_API.g_exc_error;
4415 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4416 RAISE FND_API.g_exc_unexpected_error;
4417 END IF;
4418
4419 Split_Claim_Settlement(
4420 p_claim_rec => l_claim_rec
4421 ,p_difference_amount => l_claim_rec.amount_remaining
4422 ,x_return_status => l_return_status
4423 ,x_msg_data => x_msg_data
4424 ,x_msg_count => x_msg_count
4425 );
4426 IF l_return_status = FND_API.g_ret_sts_error THEN
4427 RAISE FND_API.g_exc_error;
4428 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4429 RAISE FND_API.g_exc_unexpected_error;
4430 END IF;
4431
4432 fnd_file.put_line(fnd_file.log, 'Amount Remaning '||l_claim_rec.amount_remaining);
4433 fnd_file.put_line(fnd_file.log, ' Amount Remaining --> Split');
4434 END IF;
4435
4436 OZF_AR_PAYMENT_PVT.Query_Claim(
4437 p_claim_id => l_claim_id_ver(i).claim_id
4438 ,x_claim_rec => l_claim_rec
4439 ,x_return_status => l_return_status
4440 );
4441 IF l_return_status = FND_API.g_ret_sts_error THEN
4442 RAISE FND_API.g_exc_error;
4443 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4444 RAISE FND_API.g_exc_unexpected_error;
4445 END IF;
4446
4447 --- Close Claim
4448 Update_Claim_From_Settlement(
4449 p_api_version_number => l_api_version_number,
4450 p_init_msg_list => FND_API.g_false,
4451 p_commit => FND_API.g_false,
4452 p_validation_level => FND_API.g_valid_level_full,
4453 x_return_status => l_return_status,
4454 x_msg_count => x_msg_count,
4455 x_msg_data => x_msg_data,
4456 p_claim_id => l_claim_rec.claim_id,
4457 p_object_version_number => l_claim_rec.object_version_number,
4458 p_status_code => 'CLOSED',
4459 p_payment_status => 'PAID'
4460 );
4461 IF l_return_status = FND_API.g_ret_sts_error THEN
4462 RAISE FND_API.g_exc_error;
4463 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
4464 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4465 RAISE FND_API.g_exc_unexpected_error;
4466 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
4467 END IF;
4468 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Success.');
4469
4470 ELSE
4471 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> is not CLOSED because amount settled is not fully paid.');
4472 END IF; -- Close Claim
4473
4474
4475 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_id_ver(i).claim_number||' --------------*/');
4476 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Success. ');
4477 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4478 l_successful_claims := l_successful_claims + 1;
4479
4480 END IF; -- l_settlement_doc_tbl.count > 0
4481 END IF; -- Camcelled;
4482
4483 EXCEPTION
4484 WHEN FND_API.G_EXC_ERROR THEN
4485 ROLLBACK TO AP_SETTLEMENT;
4486 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
4487 OZF_UTILITY_PVT.write_conc_log;
4488 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_id_ver(i).claim_number||' --------------*/');
4489 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
4490 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
4491 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4492 l_failed_claims := l_failed_claims + 1;
4493
4494 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4495 ROLLBACK TO AP_SETTLEMENT;
4496 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
4497 OZF_UTILITY_PVT.write_conc_log;
4498 FND_FILE.PUT_LINE(FND_FILE.LOG, '/*-------------- '||l_claim_id_ver(i).claim_number||' --------------*/');
4499 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
4500 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
4501 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4502 l_failed_claims := l_failed_claims + 1;
4503
4504 WHEN OTHERS THEN
4505 ROLLBACK TO AP_SETTLEMENT;
4506 FND_FILE.PUT_LINE(FND_FILE.LOG, l_claim_id_ver(i).claim_number||' --> Failed.');
4507 OZF_UTILITY_PVT.write_conc_log;
4508 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Status : Failed.');
4509 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Error : ' || SQLCODE || ' : ' || SQLERRM);
4510 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4511 l_failed_claims := l_failed_claims + 1;
4512 END;
4513
4514 END LOOP;
4515
4516
4517 --------------------- finish -----------------------
4518 IF FND_API.to_boolean(p_commit) THEN
4519 COMMIT;
4520 END IF;
4521
4522 FND_MSG_PUB.Count_And_Get(
4523 p_count => x_msg_count,
4524 p_data => x_msg_data
4525 );
4526
4527 IF OZF_DEBUG_HIGH_ON THEN
4528 OZF_UTILITY_PVT.debug_message(l_full_name ||': end');
4529 END IF;
4530 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims successfully fetched for AP Settlement : ' || l_successful_claims);
4531 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims failed to be fetched for AP Settlement : ' || l_failed_claims);
4532 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, ' Claims reopened for AP Settlement : ' || l_reopened_claims);
4533
4534 EXCEPTION
4535 WHEN FND_API.G_EXC_ERROR THEN
4536 ROLLBACK TO Get_Payable_Settlement;
4537 x_return_status := FND_API.g_ret_sts_error;
4538 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Payable Settlement Failed.');
4539 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
4540 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4541 FND_MSG_PUB.Count_And_Get(
4542 p_encoded => FND_API.g_false,
4543 p_count => x_msg_count,
4544 p_data => x_msg_data
4545 );
4546
4547 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4548 ROLLBACK TO Get_Payable_Settlement;
4549 x_return_status := FND_API.g_ret_sts_unexp_error;
4550 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Payable Settlement Failed.');
4551 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg, FND_API.g_false));
4552 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4553 FND_MSG_PUB.Count_And_Get(
4554 p_encoded => FND_API.g_false,
4555 p_count => x_msg_count,
4556 p_data => x_msg_data
4557 );
4558
4559 WHEN OTHERS THEN
4560 ROLLBACK TO Get_Payable_Settlement;
4561 x_return_status := FND_API.g_ret_sts_unexp_error;
4562 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4563 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
4564 END IF;
4565 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Payable Settlement Failed.');
4566 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Error : ' || SQLCODE || ' : ' || SQLERRM);
4567 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
4568 FND_MSG_PUB.Count_And_Get(
4569 p_encoded => FND_API.g_false,
4570 p_count => x_msg_count,
4571 p_data => x_msg_data
4572 );
4573 End Get_Payable_Settlement;
4574
4575
4576 ---------------------------------------------------------------------
4577 -- PROCEDURE
4578 -- Populate_Settlement_Data
4579 --
4580 -- HISTORY
4581 -- pnerella Create.
4582 -- 05/30/2001 mchang Modified.
4583 ---------------------------------------------------------------------
4584 PROCEDURE Populate_Settlement_Data(
4585 ERRBUF OUT NOCOPY VARCHAR2,
4586 RETCODE OUT NOCOPY NUMBER,
4587 p_org_id IN NUMBER DEFAULT NULL,
4588 p_claim_class IN VARCHAR2,
4589 p_payment_method IN VARCHAR2,
4590 p_cust_account_id IN NUMBER,
4591 p_claim_type_id IN NUMBER,
4592 p_reason_code_id IN NUMBER
4593 )
4594 IS
4595 l_retcode NUMBER := 0;
4596
4597 l_return_status VARCHAR2(1) ;
4598 l_msg_count NUMBER;
4599 l_msg_Data VARCHAR2(2000);
4600 l_claim_class_name VARCHAR2(80);
4601 l_settlement_method_name VARCHAR2(80);
4602 l_customer_name VARCHAR2(80);
4603 l_claim_type_name VARCHAR2(50);
4604 l_reason_name VARCHAR2(80);
4605
4606
4607 CURSOR csr_claim_class_name(p_lkup_code IN VARCHAR2) IS
4608 SELECT MEANING
4609 FROM OZF_LOOKUPS
4610 WHERE lookup_type= 'OZF_CLAIM_CLASS'
4611 AND lookup_code = p_lkup_code;
4612
4613 CURSOR csr_settlement_method_name(p_lkup_code IN VARCHAR2) IS
4614 SELECT MEANING
4615 FROM OZF_LOOKUPS
4616 WHERE lookup_type= 'OZF_PAYMENT_METHOD'
4617 AND lookup_code = p_lkup_code;
4618
4619 CURSOR csr_customer_name(p_cust_act_id IN NUMBER) IS
4620 SELECT SUBSTRB(PARTY.PARTY_NAME,1,50) NAME
4621 FROM HZ_CUST_ACCOUNTS CA, HZ_PARTIES PARTY
4622 WHERE CA.party_id = party.party_id
4623 AND CA.CUST_ACCOUNT_ID = p_cust_act_id;
4624
4625 CURSOR csr_claim_type_name(p_claim_type_id IN NUMBER) IS
4626 SELECT NAME
4627 FROM OZF_CLAIM_TYPES_VL
4628 WHERE CLAIM_TYPE_ID = p_claim_type_id;
4629
4630 CURSOR csr_reason_name(p_reason_code_id IN NUMBER) IS
4631 SELECT NAME
4632 FROM OZF_REASON_CODES_VL
4633 WHERE REASON_CODE_ID = p_reason_code_id;
4634
4635 --Multiorg Changes
4636 CURSOR operating_unit_csr IS
4637 SELECT ou.organization_id org_id
4638 FROM hr_operating_units ou
4639 WHERE mo_global.check_access(ou.organization_id) = 'Y';
4640
4641 m NUMBER := 0;
4642 l_org_id OZF_UTILITY_PVT.operating_units_tbl;
4643
4644 BEGIN
4645 SAVEPOINT Populate_Settlement_Data;
4646
4647
4648 --Multiorg Changes
4649 MO_GLOBAL.init('OZF');
4650
4651 IF p_org_id IS NULL THEN
4652 MO_GLOBAL.set_policy_context('M',null);
4653 OPEN operating_unit_csr;
4654 LOOP
4655 FETCH operating_unit_csr into l_org_id(m);
4656 m := m + 1;
4657 EXIT WHEN operating_unit_csr%NOTFOUND;
4658 END LOOP;
4659 CLOSE operating_unit_csr;
4660 ELSE
4661 l_org_id(m) := p_org_id;
4662 END IF;
4663
4664 --Multiorg Changes
4665 IF (l_org_id.COUNT > 0) THEN
4666 FOR m IN l_org_id.FIRST..l_org_id.LAST LOOP
4667 MO_GLOBAL.set_policy_context('S',l_org_id(m));
4668 -- Write OU info to OUT file
4669 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Operating Unit: ' || MO_GLOBAL.get_ou_name(l_org_id(m)));
4670 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '-----------------------------------------------------');
4671 -- Write OU info to LOG file
4672 FND_FILE.PUT_LINE(FND_FILE.LOG, 'Operating Unit: ' || MO_GLOBAL.get_ou_name(l_org_id(m)));
4673 FND_FILE.PUT_LINE(FND_FILE.LOG, '-----------------------------------------------------');
4674
4675 IF p_claim_class IS NOT NULL THEN
4676 OPEN csr_claim_class_name(p_claim_class);
4677 FETCH csr_claim_class_name INTO l_claim_class_name;
4678 CLOSE csr_claim_class_name;
4679 END IF;
4680 IF p_payment_method IS NOT NULL THEN
4681 OPEN csr_settlement_method_name(p_payment_method);
4682 FETCH csr_settlement_method_name INTO l_settlement_method_name;
4683 CLOSE csr_settlement_method_name;
4684 END IF;
4685 IF p_cust_account_id IS NOT NULL THEN
4686 OPEN csr_customer_name(p_cust_account_id);
4687 FETCH csr_customer_name INTO l_customer_name;
4688 CLOSE csr_customer_name;
4689 END IF;
4690 IF p_claim_type_id IS NOT NULL THEN
4691 OPEN csr_claim_type_name(p_claim_type_id);
4692 FETCH csr_claim_type_name INTO l_claim_type_name;
4693 CLOSE csr_claim_type_name;
4694 END IF;
4695 IF p_reason_code_id IS NOT NULL THEN
4696 OPEN csr_reason_name(p_reason_code_id);
4697 FETCH csr_reason_name INTO l_reason_name;
4698 CLOSE csr_reason_name;
4699 END IF;
4700
4701 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== START: fetching AR settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =====');
4702 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*------------------------ Claims Settlement Fetcher Execution Report -------------------------*');
4703 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Starts On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
4704 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4705 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Claim Class', 40, ' ') || ': ' || l_claim_class_name);
4706 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Settlement Method', 40, ' ') || ': ' || l_settlement_method_name);
4707 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Customer', 40, ' ') || ': ' || l_customer_name);
4708 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Claim Type', 40, ' ') || ': ' || l_claim_type_name);
4709 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, rpad('Reason Code', 40, ' ') || ': ' || l_reason_name);
4710 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4711 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Receivable Settlement : ');
4712
4713 IF p_payment_method IS NULL OR p_payment_method IN ( 'CREDIT_MEMO', 'DEBIT_MEMO') THEN
4714 Get_Receivable_Settlement(
4715 p_api_version_number => 1.0,
4716 p_init_msg_list => FND_API.g_false,
4717 p_commit => FND_API.g_false,
4718 p_validation_level => FND_API.g_valid_level_full,
4719
4720 p_claim_class => p_claim_class,
4721 p_payment_method => p_payment_method,
4722 p_cust_account_id => p_cust_account_id,
4723 p_claim_type_id => p_claim_type_id,
4724 p_reason_code_id => p_reason_code_id,
4725
4726 x_return_status => l_return_status,
4727 x_msg_count => l_msg_count,
4728 x_msg_data => l_msg_data
4729 );
4730 IF l_return_status = FND_API.g_ret_sts_error THEN
4731 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
4732 FND_MESSAGE.set_name('OZF', 'OZF_SETL_DOC_AR_FETCH_ERR');
4733 FND_MSG_PUB.add;
4734 END IF;
4735 RAISE FND_API.g_exc_error;
4736 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4737 RAISE FND_API.g_exc_unexpected_error;
4738 END IF;
4739
4740 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== END: fetching AR settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =======');
4741 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4742 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for Account Payable Settlement : ');
4743 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== START: fetching AP settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =====');
4744 --OZF_UTILITY_PVT.debug_message('== START: fetching AP settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
4745 END IF;
4746
4747 IF p_payment_method IS NULL OR p_payment_method IN ( 'CHECK','EFT','WIRE','AP_DEFAULT','AP_DEBIT') THEN
4748 Get_Payable_Settlement(
4749 p_api_version_number => 1.0,
4750 p_init_msg_list => FND_API.g_false,
4751 p_commit => FND_API.g_false,
4752 p_validation_level => FND_API.g_valid_level_full,
4753
4754 p_claim_class => p_claim_class,
4755 p_payment_method => p_payment_method,
4756 p_cust_account_id => p_cust_account_id,
4757 p_claim_type_id => p_claim_type_id,
4758 p_reason_code_id => p_reason_code_id,
4759
4760 x_return_status => l_return_status,
4761 x_msg_count => l_msg_count,
4762 x_msg_data => l_msg_data
4763 );
4764 IF l_return_status = FND_API.g_ret_sts_error THEN
4765 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
4766 FND_MESSAGE.set_name('OZF', 'OZF_SETL_DOC_AP_FETCH_ERR');
4767 FND_MSG_PUB.add;
4768 END IF;
4769 RAISE FND_API.g_exc_error;
4770 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4771 RAISE FND_API.g_exc_unexpected_error;
4772 END IF;
4773
4774 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== END: fetching AP settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =======');
4775 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4776 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Fetching for RMA Settlement : ');
4777 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== START: fetching RMA settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =====');
4778 END IF;
4779
4780 IF p_payment_method IS NULL OR p_payment_method = 'RMA' THEN
4781 Get_RMA_Settlement(
4782 p_api_version_number => 1.0,
4783 p_init_msg_list => FND_API.g_false,
4784 p_commit => FND_API.g_false,
4785 p_validation_level => FND_API.g_valid_level_full,
4786
4787 p_claim_class => p_claim_class,
4788 p_payment_method => p_payment_method,
4789 p_cust_account_id => p_cust_account_id,
4790 p_claim_type_id => p_claim_type_id,
4791 p_reason_code_id => p_reason_code_id,
4792
4793 x_return_status => l_return_status,
4794 x_msg_count => l_msg_count,
4795 x_msg_data => l_msg_data
4796 );
4797 IF l_return_status = FND_API.g_ret_sts_error THEN
4798 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
4799 FND_MESSAGE.set_name('OZF', 'OZF_SETL_DOC_AR_FETCH_ERR');
4800 FND_MSG_PUB.add;
4801 END IF;
4802 RAISE FND_API.g_exc_error;
4803 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4804 RAISE FND_API.g_exc_unexpected_error;
4805 END IF;
4806 /*
4807 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4808 FND_FILE.PUT_LINE(FND_FILE.LOG,'OZF_RETURN_STATUS ');
4809 END IF;
4810 */
4811
4812 FND_FILE.PUT_LINE(FND_FILE.LOG, '===== END: fetching RMA settlement -- time stamp :: '||TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS')||' =======');
4813 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4814 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Successful' );
4815 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
4816 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4817 END IF;
4818
4819 --OZF_UTILITY_PVT.write_conc_log;
4820 END LOOP;
4821 END IF;
4822
4823 EXCEPTION
4824 WHEN FND_API.g_exc_error THEN
4825 ROLLBACK TO Populate_Settlement_Data;
4826 OZF_UTILITY_PVT.write_conc_log;
4827 ERRBUF := l_msg_data;
4828 RETCODE := 2;
4829 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Failure (Error:' || l_msg_data ||')');
4830 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
4831 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4832
4833 WHEN FND_API.g_exc_unexpected_error THEN
4834 ROLLBACK TO Populate_Settlement_Data;
4835 OZF_UTILITY_PVT.write_conc_log;
4836 ERRBUF := l_msg_data;
4837 RETCODE := 2;
4838 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Failure (Error:' || l_msg_data ||')');
4839 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
4840 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4841
4842 WHEN OTHERS THEN
4843 ROLLBACK TO Populate_Settlement_Data;
4844 OZF_UTILITY_PVT.write_conc_log;
4845 ERRBUF := substr(sqlerrm, 1, 80);
4846 RETCODE := 2;
4847 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Status: Failure (Error:' ||SQLCODE||SQLERRM || ')');
4848 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'Execution Ends On: ' || to_char(sysdate,'MM-DD-YYYY HH24:MI:SS'));
4849 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '*---------------------------------------------------------------------------------------------*');
4850
4851 End Populate_Settlement_Data;
4852
4853
4854 ---------------------------------------------------------------------
4855 -- PROCEDURE
4856 -- Create_Settlement_Doc
4857 --
4858 -- HISTORY
4859 -- pnerella Create.
4860 -- 05/30/2001 mchang Modified.
4861 ---------------------------------------------------------------------
4862 PROCEDURE Create_Settlement_Doc(
4863 p_api_version_number IN NUMBER,
4864 p_init_msg_list IN VARCHAR2,
4865 p_commit IN VARCHAR2,
4866 p_validation_level IN NUMBER,
4867
4868 x_return_status OUT NOCOPY VARCHAR2,
4869 x_msg_count OUT NOCOPY NUMBER,
4870 x_msg_data OUT NOCOPY VARCHAR2,
4871
4872 p_settlement_doc_rec IN settlement_doc_rec_type := g_miss_settlement_doc_rec,
4873 x_settlement_doc_id OUT NOCOPY NUMBER
4874 )
4875 IS
4876 l_api_version CONSTANT NUMBER := 1.0;
4877 l_api_name CONSTANT VARCHAR2(30) := 'Create_Settlement_Doc';
4878 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
4879 l_return_status VARCHAR2(1);
4880
4881 l_created_by NUMBER;
4882 l_updated_by NUMBER;
4883 l_last_update_login NUMBER;
4884 l_org_id NUMBER;
4885
4886 l_settlement_doc_rec settlement_doc_rec_type := p_settlement_doc_rec;
4887 l_id_count NUMBER;
4888
4889 CURSOR c_settlement_doc_seq IS
4890 SELECT ozf_settlement_docs_all_s.NEXTVAL
4891 FROM DUAL;
4892
4893 CURSOR c_id_exists(cv_id IN NUMBER) IS
4894 SELECT COUNT(settlement_doc_id)
4895 FROM ozf_settlement_docs_all
4896 WHERE settlement_doc_id = cv_id;
4897
4898 CURSOR csr_claim_currency(cv_claim_id IN NUMBER) IS
4899 SELECT set_of_books_id,
4900 currency_code,
4901 exchange_rate_date,
4902 exchange_rate_type,
4903 exchange_rate,
4904 org_id
4905 FROM ozf_claims_all
4906 WHERE claim_id = cv_claim_id;
4907 l_claim_rec csr_claim_currency%ROWTYPE;
4908 l_exchange_rate NUMBER;
4909
4910 BEGIN
4911 --------------------- initialize -----------------------
4912 SAVEPOINT Create_Settlement_Doc;
4913
4914 IF OZF_DEBUG_HIGH_ON THEN
4915 OZF_Utility_PVT.debug_message(l_full_name||': start');
4916 END IF;
4917
4918 IF FND_API.to_boolean(p_init_msg_list) THEN
4919 FND_MSG_PUB.initialize;
4920 END IF;
4921
4922 IF NOT FND_API.compatible_api_call(
4923 l_api_version,
4924 p_api_version_number,
4925 l_api_name,
4926 G_PKG_NAME
4927 ) THEN
4928 RAISE FND_API.g_exc_unexpected_error;
4929 END IF;
4930
4931 x_return_status := FND_API.g_ret_sts_success;
4932
4933 l_created_by := NVL(FND_GLOBAL.user_id,-1);
4934 l_updated_by := NVL(FND_GLOBAL.user_id,-1);
4935 l_last_update_login := NVL(FND_GLOBAL.conc_login_id,-1);
4936 l_settlement_doc_rec.object_version_number := 1;
4937
4938 --------------------- validate -----------------------
4939 -- Validate Environment
4940 IF FND_GLOBAL.user_Id IS NULL THEN
4941 OZF_Utility_PVT.Error_Message(p_message_name => 'OZF_USER_PROFILE_MISSING');
4942 RAISE FND_API.G_EXC_ERROR;
4943 END IF;
4944
4945 IF ( P_validation_level >= FND_API.g_valid_level_full) THEN
4946 Validate_Settlement_Doc(
4947 p_api_version_number => 1.0,
4948 p_init_msg_list => FND_API.G_FALSE,
4949 p_validation_level => p_validation_level,
4950 p_settlement_doc_rec => p_settlement_doc_rec,
4951 x_return_status => l_return_status,
4952 x_msg_count => x_msg_count,
4953 x_msg_data => x_msg_data
4954 );
4955 IF l_return_status <> FND_API.g_ret_sts_success THEN
4956 RAISE FND_API.g_exc_error;
4957 END IF;
4958 END IF;
4959
4960 OPEN csr_claim_currency(l_settlement_doc_rec.claim_id);
4961 FETCH csr_claim_currency INTO l_claim_rec;
4962 CLOSE csr_claim_currency;
4963
4964 -------------------- Amount Rounding -----------------------
4965 IF l_settlement_doc_rec.settlement_amount IS NOT NULL THEN
4966 l_settlement_doc_rec.settlement_amount := OZF_UTILITY_PVT.CurrRound(l_settlement_doc_rec.settlement_amount, l_claim_rec.currency_code);
4967 -- Calculate Accounted Amount
4968 OZF_UTILITY_PVT.Convert_Currency(
4969 P_SET_OF_BOOKS_ID => l_claim_rec.set_of_books_id,
4970 P_FROM_CURRENCY => l_claim_rec.currency_code,
4971 P_CONVERSION_DATE => l_claim_rec.exchange_rate_date,
4972 P_CONVERSION_TYPE => l_claim_rec.exchange_rate_type,
4973 P_CONVERSION_RATE => l_claim_rec.exchange_rate,
4974 P_AMOUNT => l_settlement_doc_rec.settlement_amount,
4975 X_RETURN_STATUS => l_return_status,
4976 X_ACC_AMOUNT => l_settlement_doc_rec.settlement_acctd_amount,
4977 X_RATE => l_exchange_rate
4978 );
4979
4980 IF l_return_status = FND_API.g_ret_sts_error THEN
4981 RAISE FND_API.g_exc_error;
4982 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
4983 RAISE FND_API.g_exc_unexpected_error;
4984 END IF;
4985 END IF;
4986
4987 -------------------------- insert --------------------------
4988 IF p_settlement_doc_rec.settlement_doc_id IS NULL OR
4989 p_settlement_doc_rec.settlement_doc_id = FND_API.G_MISS_NUM THEN
4990 LOOP
4991 -- Get the identifier
4992 OPEN c_settlement_doc_seq;
4993 FETCH c_settlement_doc_seq INTO l_settlement_doc_rec.settlement_doc_id;
4994 CLOSE c_settlement_doc_seq;
4995 -- Check the uniqueness of the identifier
4996 OPEN c_id_exists(l_settlement_doc_rec.settlement_doc_id);
4997 FETCH c_id_exists INTO l_id_count;
4998 CLOSE c_id_exists;
4999 -- Exit when the identifier uniqueness is established
5000 EXIT WHEN l_id_count = 0;
5001 END LOOP;
5002 END IF;
5003
5004
5005 if l_settlement_doc_rec.claim_line_id = FND_API.G_MISS_NUM THEN
5006 l_settlement_doc_rec.claim_line_id := null;
5007 end if;
5008
5009
5010
5011 BEGIN
5012 -- Invoke table handler(OZF_SETTLEMENT_DOCS_PKG.Insert_Row)
5013 OZF_SETTLEMENT_DOCS_PKG.Insert_Row(
5014 px_settlement_doc_id => l_settlement_doc_rec.settlement_doc_id,
5015 px_object_version_number => l_settlement_doc_rec.object_version_number,
5016 p_last_update_date => SYSDATE,
5017 p_last_updated_by => FND_GLOBAL.USER_ID,
5018 p_creation_date => SYSDATE,
5019 p_created_by => FND_GLOBAL.USER_ID,
5020 p_last_update_login => FND_GLOBAL.CONC_LOGIN_ID,
5021 p_request_id => FND_GLOBAL.CONC_REQUEST_ID,
5022 p_program_application_id => FND_GLOBAL.PROG_APPL_ID,
5023 p_program_update_date => SYSDATE,
5024 p_program_id => FND_GLOBAL.CONC_PROGRAM_ID,
5025 p_created_from => l_settlement_doc_rec.created_from,
5026 p_claim_id => l_settlement_doc_rec.claim_id,
5027 p_claim_line_id => l_settlement_doc_rec.claim_line_id,
5028 p_payment_method => l_settlement_doc_rec.payment_method,
5029 p_settlement_id => l_settlement_doc_rec.settlement_id,
5030 p_settlement_type => l_settlement_doc_rec.settlement_type,
5031 p_settlement_type_id => l_settlement_doc_rec.settlement_type_id,
5032 p_settlement_number => l_settlement_doc_rec.settlement_number,
5033 p_settlement_date => l_settlement_doc_rec.settlement_date,
5034 p_settlement_amount => l_settlement_doc_rec.settlement_amount,
5035 p_settlement_acctd_amount => l_settlement_doc_rec.settlement_acctd_amount,
5036 p_status_code => l_settlement_doc_rec.status_code,
5037 p_attribute_category => l_settlement_doc_rec.attribute_category,
5038 p_attribute1 => l_settlement_doc_rec.attribute1,
5039 p_attribute2 => l_settlement_doc_rec.attribute2,
5040 p_attribute3 => l_settlement_doc_rec.attribute3,
5041 p_attribute4 => l_settlement_doc_rec.attribute4,
5042 p_attribute5 => l_settlement_doc_rec.attribute5,
5043 p_attribute6 => l_settlement_doc_rec.attribute6,
5044 p_attribute7 => l_settlement_doc_rec.attribute7,
5045 p_attribute8 => l_settlement_doc_rec.attribute8,
5046 p_attribute9 => l_settlement_doc_rec.attribute9,
5047 p_attribute10 => l_settlement_doc_rec.attribute10,
5048 p_attribute11 => l_settlement_doc_rec.attribute11,
5049 p_attribute12 => l_settlement_doc_rec.attribute12,
5050 p_attribute13 => l_settlement_doc_rec.attribute13,
5051 p_attribute14 => l_settlement_doc_rec.attribute14,
5052 p_attribute15 => l_settlement_doc_rec.attribute15,
5053 px_org_id => l_claim_rec.org_id,
5054 p_payment_reference_id => l_settlement_doc_rec.payment_reference_id,
5055 p_payment_reference_number => l_settlement_doc_rec.payment_reference_number,
5056 p_payment_status => l_settlement_doc_rec.payment_status,
5057 p_group_claim_id => l_settlement_doc_rec.group_claim_id,
5058 p_gl_date => TRUNC(l_settlement_doc_rec.gl_date),
5059 p_wo_rec_trx_id => l_settlement_doc_rec.wo_rec_trx_id
5060 );
5061 EXCEPTION
5062 WHEN OTHERS THEN
5063 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5064 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
5065 FND_MESSAGE.Set_Token('TEXT',SQLERRM);
5066 FND_MSG_PUB.add;
5067 END IF;
5068 RAISE FND_API.g_exc_error;
5069 END;
5070
5071 ------------------------- finish -------------------------------
5072 x_settlement_doc_id := l_settlement_doc_rec.settlement_doc_id;
5073
5074 -- Check for commit
5075 IF FND_API.to_boolean(p_commit) THEN
5076 COMMIT;
5077 END IF;
5078
5079 FND_MSG_PUB.count_and_get(
5080 p_encoded => FND_API.g_false,
5081 p_count => x_msg_count,
5082 p_data => x_msg_data
5083 );
5084
5085 IF OZF_DEBUG_HIGH_ON THEN
5086 OZF_Utility_PVT.debug_message(l_full_name ||': end');
5087 END IF;
5088
5089 EXCEPTION
5090 WHEN FND_API.g_exc_error THEN
5091 ROLLBACK TO Create_Settlement_Doc;
5092 x_return_status := FND_API.g_ret_sts_error;
5093 FND_MSG_PUB.Count_And_Get (
5094 p_encoded => FND_API.g_false,
5095 p_count => x_msg_count,
5096 p_data => x_msg_data
5097 );
5098
5099 WHEN FND_API.g_exc_unexpected_error THEN
5100 ROLLBACK TO Create_Settlement_Doc;
5101 x_return_status := FND_API.g_ret_sts_unexp_error;
5102 FND_MSG_PUB.Count_And_Get (
5103 p_encoded => FND_API.g_false,
5104 p_count => x_msg_count,
5105 p_data => x_msg_data
5106 );
5107
5108 WHEN OTHERS THEN
5109 ROLLBACK TO Create_Settlement_Doc;
5110 x_return_status := FND_API.g_ret_sts_unexp_error;
5111 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
5112 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5113 END IF;
5114 FND_MSG_PUB.Count_And_Get (
5115 p_encoded => FND_API.g_false,
5116 p_count => x_msg_count,
5117 p_data => x_msg_data
5118 );
5119
5120 End Create_Settlement_Doc;
5121
5122
5123 ---------------------------------------------------------------------
5124 -- PROCEDURE
5125 -- Update_Settlement_Doc
5126 --
5127 -- HISTORY
5128 -- pnerella Create.
5129 -- 05/30/2001 mchang Modified.
5130 ---------------------------------------------------------------------
5131 PROCEDURE Update_Settlement_Doc(
5132 p_api_version_number IN NUMBER,
5133 p_init_msg_list IN VARCHAR2,
5134 p_commit IN VARCHAR2,
5135 p_validation_level IN NUMBER,
5136
5137 x_return_status OUT NOCOPY VARCHAR2,
5138 x_msg_count OUT NOCOPY NUMBER,
5139 x_msg_data OUT NOCOPY VARCHAR2,
5140
5141 p_settlement_doc_rec IN settlement_doc_rec_type,
5142 x_object_version_number OUT NOCOPY NUMBER
5143 )
5144 IS
5145 l_api_version CONSTANT NUMBER := 1.0;
5146 l_api_name CONSTANT VARCHAR2(30) := 'Update_Settlement_Doc';
5147 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || l_api_name;
5148 l_return_status VARCHAR2(1);
5149
5150 l_complete_doc_rec settlement_doc_rec_type;
5151
5152 l_object_version_number NUMBER;
5153 l_last_updated_by NUMBER;
5154 l_last_update_login NUMBER;
5155 l_org_id NUMBER;
5156
5157 CURSOR csr_settle_obj_ver(cv_settle_doc_id IN NUMBER) IS
5158 SELECT object_version_number
5159 FROM ozf_settlement_docs_all
5160 WHERE settlement_doc_id = cv_settle_doc_id;
5161
5162 CURSOR csr_claim_currency(cv_claim_id IN NUMBER) IS
5163 SELECT set_of_books_id,
5164 currency_code,
5165 exchange_rate_date,
5166 exchange_rate_type,
5167 exchange_rate,
5168 org_id
5169 FROM ozf_claims_all
5170 WHERE claim_id = cv_claim_id;
5171 l_claim_rec csr_claim_currency%ROWTYPE;
5172 l_exchange_rate NUMBER;
5173
5174 BEGIN
5175
5176 -------------------- initialize -------------------------
5177 SAVEPOINT Update_Settlement_Doc;
5178
5179 IF OZF_DEBUG_HIGH_ON THEN
5180 OZF_Utility_PVT.debug_message(l_full_name||': start');
5181 END IF;
5182
5183 IF FND_API.to_boolean(p_init_msg_list) THEN
5184 FND_MSG_PUB.initialize;
5185 END IF;
5186
5187 IF NOT FND_API.compatible_api_call(
5188 l_api_version,
5189 p_api_version_number,
5190 l_api_name,
5191 G_PKG_NAME
5192 ) THEN
5193 RAISE FND_API.g_exc_unexpected_error;
5194 END IF;
5195
5196 x_return_status := FND_API.g_ret_sts_success;
5197
5198
5199 l_last_updated_by := NVL(FND_GLOBAL.user_id,-1);
5200 l_last_update_login := NVL(FND_GLOBAL.conc_login_id,-1);
5201
5202
5203 ----------------------- validate ----------------------
5204 -- Varify object_version_number
5205 IF p_settlement_doc_rec.object_version_number is NULL or
5206 p_settlement_doc_rec.object_version_number = FND_API.G_MISS_NUM THEN
5207 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.g_msg_lvl_error) THEN
5208 FND_MESSAGE.Set_Name('OZF', 'OZF_API_NO_OBJ_VER_NUM');
5209 FND_MSG_PUB.ADD;
5210 END IF;
5211 RAISE FND_API.G_EXC_ERROR;
5212 END IF;
5213
5214 OPEN csr_settle_obj_ver(p_settlement_doc_rec.settlement_doc_id);
5215 FETCH csr_settle_obj_ver INTO l_object_version_number;
5216 CLOSE csr_settle_obj_ver;
5217
5218 IF l_object_version_number <> p_settlement_doc_rec.object_version_number THEN
5219 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.g_msg_lvl_error) THEN
5220 FND_MESSAGE.Set_Name('OZF', 'OZF_API_RESOURCE_LOCKED');
5221 FND_MSG_PUB.ADD;
5222 END IF;
5223 RAISE FND_API.G_EXC_ERROR;
5224 END IF;
5225
5226 l_object_version_number := l_object_version_number + 1;
5227
5228 -- replace g_miss_char/num/date with current column values
5229 Complete_Settle_Doc_Rec(
5230 p_settlement_doc_rec => p_settlement_doc_rec
5231 ,x_complete_rec => l_complete_doc_rec
5232 );
5233
5234 -- item level validation
5235 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
5236 Check_Settle_Doc_Items(
5237 P_settlement_doc_rec => l_complete_doc_rec,
5238 p_validation_mode => JTF_PLSQL_API.g_update,
5239 x_return_status => l_return_status
5240 );
5241
5242 IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
5243 RAISE FND_API.g_exc_unexpected_error;
5244 ELSIF l_return_status = FND_API.g_ret_sts_error THEN
5245 RAISE FND_API.g_exc_error;
5246 END IF;
5247 END IF;
5248
5249 -- record level validation
5250 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_record THEN
5251 Check_Settle_Doc_Record(
5252 P_settlement_doc_rec => p_settlement_doc_rec,
5253 p_complete_rec => l_complete_doc_rec,
5254 x_return_status => l_return_status
5255 );
5256 IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
5257 RAISE FND_API.g_exc_unexpected_error;
5258 ELSIF l_return_status = FND_API.g_ret_sts_error THEN
5259 RAISE FND_API.g_exc_error;
5260 END IF;
5261 END IF;
5262
5263 OPEN csr_claim_currency(l_complete_doc_rec.claim_id);
5264 FETCH csr_claim_currency INTO l_claim_rec;
5265 CLOSE csr_claim_currency;
5266
5267 -------------------- Amount Rounding -----------------------
5268 IF l_complete_doc_rec.settlement_amount IS NOT NULL THEN
5269 l_complete_doc_rec.settlement_amount := OZF_UTILITY_PVT.CurrRound(l_complete_doc_rec.settlement_amount, l_claim_rec.currency_code);
5270 -- Calculate Accounted Amount
5271 OZF_UTILITY_PVT.Convert_Currency(
5272 P_SET_OF_BOOKS_ID => l_claim_rec.set_of_books_id,
5273 P_FROM_CURRENCY => l_claim_rec.currency_code,
5274 P_CONVERSION_DATE => l_claim_rec.exchange_rate_date,
5275 P_CONVERSION_TYPE => l_claim_rec.exchange_rate_type,
5276 P_CONVERSION_RATE => l_claim_rec.exchange_rate,
5277 P_AMOUNT => l_complete_doc_rec.settlement_amount,
5278 X_RETURN_STATUS => l_return_status,
5279 X_ACC_AMOUNT => l_complete_doc_rec.settlement_acctd_amount,
5280 X_RATE => l_exchange_rate
5281 );
5282
5283 IF l_return_status = FND_API.g_ret_sts_error THEN
5284 RAISE FND_API.g_exc_error;
5285 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
5286 RAISE FND_API.g_exc_unexpected_error;
5287 END IF;
5288 END IF;
5289
5290 -------------------------- update --------------------
5291 BEGIN
5292 -- Invoke table handler(OZF_SETTLEMENT_DOCS_PKG.Update_Row)
5293 OZF_SETTLEMENT_DOCS_PKG.Update_Row(
5294 p_settlement_doc_id => l_complete_doc_rec.settlement_doc_id,
5295 p_object_version_number => l_object_version_number,
5296 p_last_update_date => SYSDATE,
5297 p_last_updated_by => FND_GLOBAL.USER_ID,
5298 p_last_update_login => FND_GLOBAL.CONC_LOGIN_ID,
5299 p_request_id => l_complete_doc_rec.request_id,
5300 p_program_application_id => l_complete_doc_rec.program_application_id,
5301 p_program_update_date => l_complete_doc_rec.program_update_date,
5302 p_program_id => l_complete_doc_rec.program_id,
5303 p_created_from => l_complete_doc_rec.created_from,
5304 p_claim_id => l_complete_doc_rec.claim_id,
5305 p_claim_line_id => l_complete_doc_rec.claim_line_id,
5306 p_payment_method => l_complete_doc_rec.payment_method,
5307 p_settlement_id => l_complete_doc_rec.settlement_id,
5308 p_settlement_type => l_complete_doc_rec.settlement_type,
5309 p_settlement_type_id => l_complete_doc_rec.settlement_type_id,
5310 p_settlement_number => l_complete_doc_rec.settlement_number,
5311 p_settlement_date => l_complete_doc_rec.settlement_date,
5312 p_settlement_amount => l_complete_doc_rec.settlement_amount,
5313 p_settlement_acctd_amount=> l_complete_doc_rec.settlement_acctd_amount,
5314 p_status_code => l_complete_doc_rec.status_code,
5315 p_attribute_category => l_complete_doc_rec.attribute_category,
5316 p_attribute1 => l_complete_doc_rec.attribute1,
5317 p_attribute2 => l_complete_doc_rec.attribute2,
5318 p_attribute3 => l_complete_doc_rec.attribute3,
5319 p_attribute4 => l_complete_doc_rec.attribute4,
5320 p_attribute5 => l_complete_doc_rec.attribute5,
5321 p_attribute6 => l_complete_doc_rec.attribute6,
5322 p_attribute7 => l_complete_doc_rec.attribute7,
5323 p_attribute8 => l_complete_doc_rec.attribute8,
5324 p_attribute9 => l_complete_doc_rec.attribute9,
5325 p_attribute10 => l_complete_doc_rec.attribute10,
5326 p_attribute11 => l_complete_doc_rec.attribute11,
5327 p_attribute12 => l_complete_doc_rec.attribute12,
5328 p_attribute13 => l_complete_doc_rec.attribute13,
5329 p_attribute14 => l_complete_doc_rec.attribute14,
5330 p_attribute15 => l_complete_doc_rec.attribute15,
5331 p_org_id => l_claim_rec.org_id,
5332 p_payment_reference_id => l_complete_doc_rec.payment_reference_id,
5333 p_payment_reference_number => l_complete_doc_rec.payment_reference_number,
5334 p_payment_status => l_complete_doc_rec.payment_status,
5335 p_group_claim_id => l_complete_doc_rec.group_claim_id,
5336 p_gl_date => TRUNC(l_complete_doc_rec.gl_date),
5337 p_wo_rec_trx_id => l_complete_doc_rec.wo_rec_trx_id
5338 );
5339 EXCEPTION
5340 WHEN OTHERS THEN
5341 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5342 FND_MESSAGE.set_name('OZF', 'OZF_TABLE_HANDLER_ERROR');
5343 FND_MSG_PUB.add;
5344 END IF;
5345 RAISE FND_API.g_exc_error;
5346 END;
5347
5348
5349 /*
5350 UPDATE ozf_settlement_docs_all SET
5351 object_version_number = l_object_version_number,
5352 last_update_date = SYSDATE,
5353 last_updated_by = l_last_updated_by,
5354 last_update_login = l_last_update_login,
5355 request_id = FND_GLOBAL.CONC_REQUEST_ID,
5356 program_application_id = FND_GLOBAL.PROG_APPL_ID,
5357 program_update_date = SYSDATE,
5358 program_id = FND_GLOBAL.CONC_PROGRAM_ID,
5359 created_from = l_complete_doc_rec.created_from,
5360 claim_id = l_complete_doc_rec.claim_id,
5361 claim_line_id = l_complete_doc_rec.claim_line_id,
5362 payment_method = l_complete_doc_rec.payment_method,
5363 settlement_id = l_complete_doc_rec.settlement_id,
5364 settlement_type = l_complete_doc_rec.settlement_type,
5365 settlement_type_id = l_complete_doc_rec.settlement_type_id,
5366 settlement_number = l_complete_doc_rec.settlement_number,
5367 settlement_date = l_complete_doc_rec.settlement_date,
5368 settlement_amount = l_complete_doc_rec.settlement_amount,
5369 status_code = l_complete_doc_rec.status_code,
5370 attribute_category = l_complete_doc_rec.attribute_category,
5371 attribute1 = l_complete_doc_rec.attribute1,
5372 attribute2 = l_complete_doc_rec.attribute2,
5373 attribute3 = l_complete_doc_rec.attribute3,
5374 attribute4 = l_complete_doc_rec.attribute4,
5375 attribute5 = l_complete_doc_rec.attribute5,
5376 attribute6 = l_complete_doc_rec.attribute6,
5377 attribute7 = l_complete_doc_rec.attribute7,
5378 attribute8 = l_complete_doc_rec.attribute8,
5379 attribute9 = l_complete_doc_rec.attribute9,
5380 attribute10 = l_complete_doc_rec.attribute10,
5381 attribute11 = l_complete_doc_rec.attribute11,
5382 attribute12 = l_complete_doc_rec.attribute12,
5383 attribute13 = l_complete_doc_rec.attribute13,
5384 attribute14 = l_complete_doc_rec.attribute14,
5385 attribute15 = l_complete_doc_rec.attribute15,
5386 org_id = l_complete_doc_rec.org_id
5387 WHERE settlement_doc_id = p_settlement_doc_rec.settlement_doc_id
5388 AND object_version_number = p_settlement_doc_rec.object_version_number;
5389 */
5390
5391 -------------------- finish --------------------------
5392 x_object_version_number := l_object_version_number;
5393
5394 -- Check for commit
5395 IF FND_API.to_boolean(p_commit) THEN
5396 COMMIT;
5397 END IF;
5398
5399 FND_MSG_PUB.count_and_get(
5400 p_encoded => FND_API.g_false,
5401 p_count => x_msg_count,
5402 p_data => x_msg_data
5403 );
5404
5405 IF OZF_DEBUG_HIGH_ON THEN
5406 OZF_Utility_PVT.debug_message(l_full_name ||': end');
5407 END IF;
5408
5409 EXCEPTION
5410 WHEN FND_API.g_exc_error THEN
5411 ROLLBACK TO Update_Settlement_Doc;
5412 x_return_status := FND_API.g_ret_sts_error;
5413 FND_MSG_PUB.Count_And_Get (
5414 p_encoded => FND_API.g_false,
5415 p_count => x_msg_count,
5416 p_data => x_msg_data
5417 );
5418
5419 WHEN FND_API.g_exc_unexpected_error THEN
5420 ROLLBACK TO Update_Settlement_Doc;
5421 x_return_status := FND_API.g_ret_sts_unexp_error;
5422 FND_MSG_PUB.Count_And_Get (
5423 p_encoded => FND_API.g_false,
5424 p_count => x_msg_count,
5425 p_data => x_msg_data
5426 );
5427
5428 WHEN OTHERS THEN
5429 ROLLBACK TO Update_Settlement_Doc;
5430 x_return_status := FND_API.g_ret_sts_unexp_error;
5431 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
5432 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5433 END IF;
5434 FND_MSG_PUB.Count_And_Get (
5435 p_encoded => FND_API.g_false,
5436 p_count => x_msg_count,
5437 p_data => x_msg_data
5438 );
5439
5440 End Update_Settlement_Doc;
5441
5442
5443 ---------------------------------------------------------------------
5444 -- PROCEDURE
5445 -- Delete_Settlement_Doc
5446 --
5447 -- HISTORY
5448 -- pnerella Create.
5449 -- 05/30/2001 mchang Modified.
5450 ---------------------------------------------------------------------
5451 PROCEDURE Delete_Settlement_Doc(
5452 p_api_version_number IN NUMBER,
5453 p_init_msg_list IN VARCHAR2,
5454 p_commit IN VARCHAR2,
5455 p_validation_level IN NUMBER,
5456 x_return_status OUT NOCOPY VARCHAR2,
5457 x_msg_count OUT NOCOPY NUMBER,
5458 x_msg_data OUT NOCOPY VARCHAR2,
5459 p_settlement_doc_id IN NUMBER,
5460 p_object_version_number IN NUMBER
5461 )
5462 IS
5463 l_api_version CONSTANT NUMBER := 1.0;
5464 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Settlement_Doc';
5465 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
5466
5467 l_object_version NUMBER;
5468
5469 CURSOR csr_settle_obj_ver(cv_settle_doc_id IN NUMBER) IS
5470 SELECT object_version_number
5471 FROM ozf_settlement_docs_all
5472 WHERE settlement_doc_id = cv_settle_doc_id;
5473
5474 BEGIN
5475 --------------------- initialize -----------------------
5476 SAVEPOINT Delete_Settlement_Doc;
5477
5478 IF OZF_DEBUG_HIGH_ON THEN
5479 OZF_Utility_PVT.debug_message(l_full_name||': start');
5480 END IF;
5481
5482 IF FND_API.to_boolean(p_init_msg_list) THEN
5483 FND_MSG_PUB.initialize;
5484 END IF;
5485
5486 IF NOT FND_API.compatible_api_call(
5487 l_api_version,
5488 p_api_version_number,
5489 l_api_name,
5490 G_PKG_NAME
5491 ) THEN
5492 RAISE FND_API.g_exc_unexpected_error;
5493 END IF;
5494
5495 x_return_status := FND_API.g_ret_sts_success;
5496
5497 -- Validate object_version_number
5498 OPEN csr_settle_obj_ver(p_settlement_doc_id);
5499 FETCH csr_settle_obj_ver INTO l_object_version;
5500 CLOSE csr_settle_obj_ver;
5501
5502 ------------------------ delete ------------------------
5503 IF OZF_DEBUG_HIGH_ON THEN
5504 OZF_Utility_PVT.debug_message(l_full_name ||': delete');
5505 END IF;
5506
5507 IF p_object_version_number = l_object_version THEN
5508 BEGIN
5509 OZF_SETTLEMENT_DOCS_PKG.Delete_Row(
5510 p_settlement_doc_id => p_settlement_doc_id
5511 );
5512 EXCEPTION
5513 WHEN OTHERS THEN
5514 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5515 FND_MESSAGE.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
5516 FND_MSG_PUB.add;
5517 END IF;
5518 RAISE FND_API.g_exc_error;
5519 END;
5520 ELSE
5521 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5522 FND_MESSAGE.set_name('OZF', 'OZF_REC_VERSION_CHANGED');
5523 FND_MSG_PUB.add;
5524 END IF;
5525 RAISE FND_API.g_exc_error;
5526 END IF;
5527
5528 /*
5529 DELETE FROM ozf_settlement_docs_all
5530 WHERE settlement_doc_id = p_settlement_doc_id
5531 AND object_version_number = p_object_version_number;
5532
5533 IF (SQL%NOTFOUND) THEN
5534 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5535 FND_MESSAGE.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
5536 FND_MSG_PUB.add;
5537 END IF;
5538 RAISE FND_API.g_exc_error;
5539 END IF;
5540 */
5541 -------------------- finish --------------------------
5542 IF FND_API.to_boolean(p_commit) THEN
5543 COMMIT;
5544 END IF;
5545
5546 FND_MSG_PUB.count_and_get(
5547 p_encoded => FND_API.g_false,
5548 p_count => x_msg_count,
5549 p_data => x_msg_data
5550 );
5551
5552 IF OZF_DEBUG_HIGH_ON THEN
5553 OZF_Utility_PVT.debug_message(l_full_name ||': end');
5554 END IF;
5555
5556 EXCEPTION
5557 WHEN FND_API.g_exc_error THEN
5558 ROLLBACK TO Delete_Settlement_Doc;
5559 x_return_status := FND_API.g_ret_sts_error;
5560 FND_MSG_PUB.Count_And_Get (
5561 p_encoded => FND_API.g_false,
5562 p_count => x_msg_count,
5563 p_data => x_msg_data
5564 );
5565
5566 WHEN FND_API.g_exc_unexpected_error THEN
5567 ROLLBACK TO Delete_Settlement_Doc;
5568 x_return_status := FND_API.g_ret_sts_unexp_error;
5569 FND_MSG_PUB.Count_And_Get (
5570 p_encoded => FND_API.g_false,
5571 p_count => x_msg_count,
5572 p_data => x_msg_data
5573 );
5574
5575 WHEN OTHERS THEN
5576 ROLLBACK TO Delete_Settlement_Doc;
5577 x_return_status := FND_API.g_ret_sts_unexp_error;
5578 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
5579 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
5580 END IF;
5581 FND_MSG_PUB.Count_And_Get (
5582 p_encoded => FND_API.g_false,
5583 p_count => x_msg_count,
5584 p_data => x_msg_data
5585 );
5586 End Delete_Settlement_Doc;
5587
5588
5589
5590 ---------------------------------------------------------------------
5591 -- PROCEDURE
5592 -- Lock_Settlement_Doc
5593 --
5594 -- HISTORY
5595 -- pnerella Create.
5596 -- 05/30/2001 mchang Modified.
5597 ---------------------------------------------------------------------
5598 PROCEDURE Lock_Settlement_Doc(
5599 p_api_version_number IN NUMBER,
5600 p_init_msg_list IN VARCHAR2,
5601
5602 x_return_status OUT NOCOPY VARCHAR2,
5603 x_msg_count OUT NOCOPY NUMBER,
5604 x_msg_data OUT NOCOPY VARCHAR2,
5605
5606 p_settlement_doc_id IN NUMBER,
5607 p_object_version IN NUMBER
5608 )
5609 IS
5610 l_api_version CONSTANT NUMBER := 1.0;
5611 l_api_name CONSTANT VARCHAR2(30) := 'Lock_Claim_Line';
5612 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
5613
5614 l_settlement_doc_id NUMBER;
5615
5616 CURSOR c_Settlement_Doc IS
5617 SELECT settlement_doc_id
5618 FROM ozf_settlement_docs_all
5619 WHERE settlement_doc_id = p_settlement_doc_id
5620 AND object_version_number = p_object_version
5621 FOR UPDATE NOWAIT;
5622
5623 BEGIN
5624 -------------------- initialize ------------------------
5625 IF OZF_DEBUG_HIGH_ON THEN
5626 OZF_Utility_PVT.debug_message(l_full_name||': start');
5627 END IF;
5628
5629 IF FND_API.to_boolean(p_init_msg_list) THEN
5630 FND_MSG_PUB.initialize;
5631 END IF;
5632
5633 IF NOT FND_API.compatible_api_call(
5634 l_api_version,
5635 p_api_version_number,
5636 l_api_name,
5637 g_pkg_name
5638 ) THEN
5639 RAISE FND_API.g_exc_unexpected_error;
5640 END IF;
5641
5642 x_return_status := FND_API.g_ret_sts_success;
5643
5644 ------------------------ lock -------------------------
5645 IF OZF_DEBUG_HIGH_ON THEN
5646 OZF_Utility_PVT.debug_message(l_full_name||': lock');
5647 END IF;
5648
5649 OPEN c_Settlement_Doc;
5650 FETCH c_Settlement_Doc INTO l_settlement_doc_id;
5651 IF (c_Settlement_Doc%NOTFOUND) THEN
5652 CLOSE c_Settlement_Doc;
5653 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5654 FND_MESSAGE.set_name('OZF', 'OZF_API_RECORD_NOT_FOUND');
5655 FND_MSG_PUB.add;
5656 END IF;
5657 RAISE FND_API.g_exc_error;
5658 END IF;
5659 CLOSE c_Settlement_Doc;
5660
5661 -------------------- finish --------------------------
5662 FND_MSG_PUB.count_and_get(
5663 p_encoded => FND_API.g_false,
5664 p_count => x_msg_count,
5665 p_data => x_msg_data
5666 );
5667
5668 IF OZF_DEBUG_HIGH_ON THEN
5669 OZF_Utility_PVT.debug_message(l_full_name ||': end');
5670 END IF;
5671
5672 EXCEPTION
5673 WHEN OZF_Utility_PVT.resource_locked THEN
5674 x_return_status := FND_API.g_ret_sts_error;
5675 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
5676 FND_MESSAGE.set_name('OZF', 'OZF_API_RESOURCE_LOCKED');
5677 FND_MSG_PUB.add;
5678 END IF;
5679 FND_MSG_PUB.count_and_get(
5680 p_encoded => FND_API.g_false,
5681 p_count => x_msg_count,
5682 p_data => x_msg_data
5683 );
5684
5685 WHEN FND_API.g_exc_error THEN
5686 x_return_status := FND_API.g_ret_sts_error;
5687 FND_MSG_PUB.count_and_get(
5688 p_encoded => FND_API.g_false,
5689 p_count => x_msg_count,
5690 p_data => x_msg_data
5691 );
5692
5693 WHEN FND_API.g_exc_unexpected_error THEN
5694 x_return_status := FND_API.g_ret_sts_unexp_error ;
5695 FND_MSG_PUB.count_and_get(
5696 p_encoded => FND_API.g_false,
5697 p_count => x_msg_count,
5698 p_data => x_msg_data
5699 );
5700
5701 WHEN OTHERS THEN
5702 x_return_status := FND_API.g_ret_sts_unexp_error ;
5703 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
5704 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
5705 END IF;
5706 FND_MSG_PUB.count_and_get(
5707 p_encoded => FND_API.g_false,
5708 p_count => x_msg_count,
5709 p_data => x_msg_data
5710 );
5711
5712 End Lock_Settlement_Doc;
5713
5714
5715 ---------------------------------------------------------------------
5716 -- PROCEDURE
5717 -- Check_Settle_Doc_Uk_Items
5718 --
5719 -- HISTORY
5720 -- pnerella Create.
5721 -- 05/30/2001 mchang Modified.
5722 ---------------------------------------------------------------------
5723 PROCEDURE Check_Settle_Doc_Uk_Items(
5724 p_settlement_doc_rec IN settlement_doc_rec_type,
5725 p_validation_mode IN VARCHAR2,
5726 x_return_status OUT NOCOPY VARCHAR2
5727 )
5728 IS
5729 l_valid_flag VARCHAR2(1);
5730
5731 BEGIN
5732 x_return_status := FND_API.g_ret_sts_success;
5733 /*
5734 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
5735 l_valid_flag := OZF_Utility_PVT.check_uniqueness(
5736 'OZF_SETTLEMENT_DOCS_ALL',
5737 'SETTLEMENT_DOC_ID = ''' || p_settlement_doc_rec.SETTLEMENT_DOC_ID ||''''
5738 );
5739 ELSE
5740 l_valid_flag := OZF_Utility_PVT.check_uniqueness(
5741 'OZF_SETTLEMENT_DOCS_ALL',
5742 'SETTLEMENT_DOC_ID = ''' || p_settlement_doc_rec.SETTLEMENT_DOC_ID ||
5743 ''' AND SETTLEMENT_DOC_ID <> ' || p_settlement_doc_rec.SETTLEMENT_DOC_ID
5744 );
5745 END IF;
5746
5747 IF l_valid_flag = FND_API.g_false THEN
5748 OZF_Utility_PVT.Error_Message(p_message_name => 'OZF_SETTLEMENT_DOC_ID_DUPLICATE');
5749 x_return_status := FND_API.g_ret_sts_error;
5750 RETURN;
5751 END IF;
5752 */
5753 END Check_Settle_Doc_Uk_Items;
5754
5755
5756 ---------------------------------------------------------------------
5757 -- PROCEDURE
5758 -- Check_Settle_Doc_Req_Items
5759 --
5760 -- HISTORY
5761 -- pnerella Create.
5762 -- 05/30/2001 mchang Modified.
5763 ---------------------------------------------------------------------
5764 PROCEDURE Check_Settle_Doc_Req_Items(
5765 p_settlement_doc_rec IN settlement_doc_rec_type,
5766 p_validation_mode IN VARCHAR2,
5767 x_return_status OUT NOCOPY VARCHAR2
5768 )
5769 IS
5770 BEGIN
5771 x_return_status := FND_API.g_ret_sts_success;
5772
5773 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
5774 /*
5775 IF p_settlement_doc_rec.settlement_doc_id = FND_API.g_miss_num OR
5776 p_settlement_doc_rec.settlement_doc_id IS NULL THEN
5777 x_return_status := FND_API.g_ret_sts_error;
5778 RETURN;
5779 END IF;
5780
5781 IF p_settlement_doc_rec.object_version_number = FND_API.g_miss_num OR
5782 p_settlement_doc_rec.object_version_number IS NULL THEN
5783 x_return_status := FND_API.g_ret_sts_error;
5784 RETURN;
5785 END IF;
5786
5787 IF p_settlement_doc_rec.last_update_date = FND_API.g_miss_date OR
5788 p_settlement_doc_rec.last_update_date IS NULL THEN
5789 x_return_status := FND_API.g_ret_sts_error;
5790 RETURN;
5791 END IF;
5792
5793 IF p_settlement_doc_rec.last_updated_by = FND_API.g_miss_num OR
5794 p_settlement_doc_rec.last_updated_by IS NULL THEN
5795 x_return_status := FND_API.g_ret_sts_error;
5796 RETURN;
5797 END IF;
5798
5799 IF p_settlement_doc_rec.creation_date = FND_API.g_miss_date OR
5800 p_settlement_doc_rec.creation_date IS NULL THEN
5801 x_return_status := FND_API.g_ret_sts_error;
5802 RETURN;
5803 END IF;
5804
5805 IF p_settlement_doc_rec.created_by = FND_API.g_miss_num OR
5806 p_settlement_doc_rec.created_by IS NULL THEN
5807 x_return_status := FND_API.g_ret_sts_error;
5808 RETURN;
5809 END IF;
5810 */
5811 IF p_settlement_doc_rec.claim_id = FND_API.g_miss_num OR
5812 p_settlement_doc_rec.claim_id IS NULL THEN
5813 x_return_status := FND_API.g_ret_sts_error;
5814 RETURN;
5815 END IF;
5816 ELSE
5817 IF p_settlement_doc_rec.settlement_doc_id IS NULL THEN
5818 x_return_status := FND_API.g_ret_sts_error;
5819 RETURN;
5820 END IF;
5821 /*
5822 IF p_settlement_doc_rec.object_version_number IS NULL THEN
5823 x_return_status := FND_API.g_ret_sts_error;
5824 RETURN;
5825 END IF;
5826
5827 IF p_settlement_doc_rec.last_update_date IS NULL THEN
5828 x_return_status := FND_API.g_ret_sts_error;
5829 RETURN;
5830 END IF;
5831
5832 IF p_settlement_doc_rec.last_updated_by IS NULL THEN
5833 x_return_status := FND_API.g_ret_sts_error;
5834 RETURN;
5835 END IF;
5836
5837 IF p_settlement_doc_rec.creation_date IS NULL THEN
5838 x_return_status := FND_API.g_ret_sts_error;
5839 RETURN;
5840 END IF;
5841
5842 IF p_settlement_doc_rec.created_by IS NULL THEN
5843 x_return_status := FND_API.g_ret_sts_error;
5844 RETURN;
5845 END IF;
5846 */
5847 IF p_settlement_doc_rec.claim_id IS NULL THEN
5848 x_return_status := FND_API.g_ret_sts_error;
5849 RETURN;
5850 END IF;
5851 END IF;
5852
5853 END Check_Settle_Doc_Req_Items;
5854
5855
5856 ---------------------------------------------------------------------
5857 -- PROCEDURE
5858 -- Check_Settle_Doc_FK_Items
5859 --
5860 -- HISTORY
5861 -- pnerella Create.
5862 -- 05/30/2001 mchang Modified.
5863 ---------------------------------------------------------------------
5864 PROCEDURE Check_Settle_Doc_FK_Items(
5865 p_settlement_doc_rec IN settlement_doc_rec_type,
5866 x_return_status OUT NOCOPY VARCHAR2
5867 )
5868 IS
5869 BEGIN
5870 x_return_status := FND_API.g_ret_sts_success;
5871
5872 -- Enter custom code here
5873
5874 END Check_Settle_Doc_FK_Items;
5875
5876
5877 ---------------------------------------------------------------------
5878 -- PROCEDURE
5879 -- Check_Settle_Doc_Lk_Items
5880 --
5881 -- HISTORY
5882 -- pnerella Create.
5883 -- 05/30/2001 mchang Modified.
5884 ---------------------------------------------------------------------
5885 PROCEDURE Check_Settle_Doc_Lk_Items(
5886 p_settlement_doc_rec IN settlement_doc_rec_type,
5887 x_return_status OUT NOCOPY VARCHAR2
5888 )
5889 IS
5890 BEGIN
5891 x_return_status := FND_API.g_ret_sts_success;
5892
5893 -- Enter custom code here
5894
5895 END Check_Settle_Doc_Lk_Items;
5896
5897
5898 ---------------------------------------------------------------------
5899 -- PROCEDURE
5900 -- Check_Settle_Doc_Items
5901 --
5902 -- HISTORY
5903 -- pnerella Create.
5904 -- 05/30/2001 mchang Modified.
5905 ---------------------------------------------------------------------
5906 PROCEDURE Check_Settle_Doc_Items (
5907 P_settlement_doc_rec IN settlement_doc_rec_type,
5908 p_validation_mode IN VARCHAR2,
5909 x_return_status OUT NOCOPY VARCHAR2
5910 )
5911 IS
5912 BEGIN
5913
5914 -- Check Items Uniqueness API calls
5915 Check_Settle_Doc_UK_Items(
5916 p_settlement_doc_rec => p_settlement_doc_rec,
5917 p_validation_mode => p_validation_mode,
5918 x_return_status => x_return_status
5919 );
5920 IF x_return_status <> FND_API.g_ret_sts_success THEN
5921 RETURN;
5922 END IF;
5923
5924 -- Check Items Required/NOT NULL API calls
5925 Check_Settle_Doc_Req_Items(
5926 p_settlement_doc_rec => p_settlement_doc_rec,
5927 p_validation_mode => p_validation_mode,
5928 x_return_status => x_return_status
5929 );
5930 IF x_return_status <> FND_API.g_ret_sts_success THEN
5931 RETURN;
5932 END IF;
5933
5934 -- Check Items Foreign Keys API calls
5935 Check_Settle_Doc_FK_Items(
5936 p_settlement_doc_rec => p_settlement_doc_rec,
5937 x_return_status => x_return_status
5938 );
5939 IF x_return_status <> FND_API.g_ret_sts_success THEN
5940 RETURN;
5941 END IF;
5942
5943 -- Check Items Lookups
5944 Check_Settle_Doc_LK_Items(
5945 p_settlement_doc_rec => p_settlement_doc_rec,
5946 x_return_status => x_return_status
5947 );
5948 IF x_return_status <> FND_API.g_ret_sts_success THEN
5949 RETURN;
5950 END IF;
5951
5952 END Check_Settle_doc_Items;
5953
5954
5955 ---------------------------------------------------------------------
5956 -- PROCEDURE
5957 -- Complete_Settle_Doc_Rec
5958 --
5959 -- HISTORY
5960 -- pnerella Create.
5961 -- 05/30/2001 mchang Modified.
5962 ---------------------------------------------------------------------
5963 PROCEDURE Complete_Settle_Doc_Rec(
5964 p_settlement_doc_rec IN settlement_doc_rec_type,
5965 x_complete_rec OUT NOCOPY settlement_doc_rec_type
5966 )
5967 IS
5968 l_return_status VARCHAR2(1);
5969
5970 CURSOR c_complete IS
5971 SELECT *
5972 FROM ozf_settlement_docs_all
5973 WHERE settlement_doc_id = p_settlement_doc_rec.settlement_doc_id;
5974
5975 l_settlement_doc_rec c_complete%ROWTYPE;
5976
5977 BEGIN
5978 x_complete_rec := p_settlement_doc_rec;
5979
5980 OPEN c_complete;
5981 FETCH c_complete INTO l_settlement_doc_rec;
5982 CLOSE c_complete;
5983
5984 -- settlement_doc_id
5985 IF p_settlement_doc_rec.settlement_doc_id = FND_API.g_miss_num THEN
5986 x_complete_rec.settlement_doc_id := NULL;
5987 END IF;
5988 IF p_settlement_doc_rec.settlement_doc_id IS NULL THEN
5989 x_complete_rec.settlement_doc_id := l_settlement_doc_rec.settlement_doc_id;
5990 END IF;
5991
5992 -- object_version_number
5993 IF p_settlement_doc_rec.object_version_number = FND_API.g_miss_num THEN
5994 x_complete_rec.object_version_number := NULL;
5995 END IF;
5996 IF p_settlement_doc_rec.object_version_number IS NULL THEN
5997 x_complete_rec.object_version_number := l_settlement_doc_rec.object_version_number;
5998 END IF;
5999
6000 -- last_update_date
6001 IF p_settlement_doc_rec.last_update_date = FND_API.g_miss_date THEN
6002 x_complete_rec.last_update_date := NULL;
6003 END IF;
6004 IF p_settlement_doc_rec.last_update_date IS NULL THEN
6005 x_complete_rec.last_update_date := l_settlement_doc_rec.last_update_date;
6006 END IF;
6007
6008 -- last_updated_by
6009 IF p_settlement_doc_rec.last_updated_by = FND_API.g_miss_num THEN
6010 x_complete_rec.last_updated_by := NULL;
6011 END IF;
6012 IF p_settlement_doc_rec.last_updated_by IS NULL THEN
6013 x_complete_rec.last_updated_by := l_settlement_doc_rec.last_updated_by;
6014 END IF;
6015
6016 -- creation_date
6017 IF p_settlement_doc_rec.creation_date = FND_API.g_miss_date THEN
6018 x_complete_rec.creation_date := NULL;
6019 END IF;
6020 IF p_settlement_doc_rec.creation_date IS NULL THEN
6021 x_complete_rec.creation_date := l_settlement_doc_rec.creation_date;
6022 END IF;
6023
6024 -- created_by
6025 IF p_settlement_doc_rec.created_by = FND_API.g_miss_num THEN
6026 x_complete_rec.created_by := NULL;
6027 END IF;
6028 IF p_settlement_doc_rec.created_by IS NULL THEN
6029 x_complete_rec.created_by := l_settlement_doc_rec.created_by;
6030 END IF;
6031
6032 -- last_update_login
6033 IF p_settlement_doc_rec.last_update_login = FND_API.g_miss_num THEN
6034 x_complete_rec.last_update_login := NULL;
6035 END IF;
6036 IF p_settlement_doc_rec.last_update_login IS NULL THEN
6037 x_complete_rec.last_update_login := l_settlement_doc_rec.last_update_login;
6038 END IF;
6039
6040 -- request_id
6041 IF p_settlement_doc_rec.request_id = FND_API.g_miss_num THEN
6042 x_complete_rec.request_id := NULL;
6043 END IF;
6044 IF p_settlement_doc_rec.request_id IS NULL THEN
6045 x_complete_rec.request_id := l_settlement_doc_rec.request_id;
6046 END IF;
6047
6048 -- program_application_id
6049 IF p_settlement_doc_rec.program_application_id = FND_API.g_miss_num THEN
6050 x_complete_rec.program_application_id := NULL;
6051 END IF;
6052 IF p_settlement_doc_rec.program_application_id IS NULL THEN
6053 x_complete_rec.program_application_id := l_settlement_doc_rec.program_application_id;
6054 END IF;
6055
6056 -- program_update_date
6057 IF p_settlement_doc_rec.program_update_date = FND_API.g_miss_date THEN
6058 x_complete_rec.program_update_date := NULL;
6059 END IF;
6060 IF p_settlement_doc_rec.program_update_date IS NULL THEN
6061 x_complete_rec.program_update_date := l_settlement_doc_rec.program_update_date;
6062 END IF;
6063
6064 -- program_id
6065 IF p_settlement_doc_rec.program_id = FND_API.g_miss_num THEN
6066 x_complete_rec.program_id := NULL;
6067 END IF;
6068 IF p_settlement_doc_rec.program_id IS NULL THEN
6069 x_complete_rec.program_id := l_settlement_doc_rec.program_id;
6070 END IF;
6071
6072 -- created_from
6073 IF p_settlement_doc_rec.created_from = FND_API.g_miss_char THEN
6074 x_complete_rec.created_from := NULL;
6075 END IF;
6076 IF p_settlement_doc_rec.created_from IS NULL THEN
6077 x_complete_rec.created_from := l_settlement_doc_rec.created_from;
6078 END IF;
6079
6080 -- claim_id
6081 IF p_settlement_doc_rec.claim_id = FND_API.g_miss_num THEN
6082 x_complete_rec.claim_id := NULL;
6083 END IF;
6084 IF p_settlement_doc_rec.claim_id IS NULL THEN
6085 x_complete_rec.claim_id := l_settlement_doc_rec.claim_id;
6086 END IF;
6087
6088 -- claim_line_id
6089 IF p_settlement_doc_rec.claim_line_id = FND_API.g_miss_num THEN
6090 x_complete_rec.claim_line_id := NULL;
6091 END IF;
6092 IF p_settlement_doc_rec.claim_line_id IS NULL THEN
6093 x_complete_rec.claim_line_id := l_settlement_doc_rec.claim_line_id;
6094 END IF;
6095
6096 -- payment_method
6097 IF p_settlement_doc_rec.payment_method = FND_API.g_miss_char THEN
6098 x_complete_rec.payment_method := NULL;
6099 END IF;
6100 IF p_settlement_doc_rec.payment_method IS NULL THEN
6101 x_complete_rec.payment_method := l_settlement_doc_rec.payment_method;
6102 END IF;
6103
6104 -- settlement_id
6105 IF p_settlement_doc_rec.settlement_id = FND_API.g_miss_num THEN
6106 x_complete_rec.settlement_id := NULL;
6107 END IF;
6108 IF p_settlement_doc_rec.settlement_id IS NULL THEN
6109 x_complete_rec.settlement_id := l_settlement_doc_rec.settlement_id;
6110 END IF;
6111
6112 -- settlement_type
6113 IF p_settlement_doc_rec.settlement_type = FND_API.g_miss_char THEN
6114 x_complete_rec.settlement_type := NULL;
6115 END IF;
6116 IF p_settlement_doc_rec.settlement_type IS NULL THEN
6117 x_complete_rec.settlement_type := l_settlement_doc_rec.settlement_type;
6118 END IF;
6119
6120 -- settlement_type_id
6121 IF p_settlement_doc_rec.settlement_type_id = FND_API.g_miss_num THEN
6122 x_complete_rec.settlement_type_id := NULL;
6123 END IF;
6124 IF p_settlement_doc_rec.settlement_type_id IS NULL THEN
6125 x_complete_rec.settlement_type_id := l_settlement_doc_rec.settlement_type_id;
6126 END IF;
6127
6128 -- settlement_number
6129 IF p_settlement_doc_rec.settlement_number = FND_API.g_miss_char THEN
6130 x_complete_rec.settlement_number := NULL;
6131 END IF;
6132 IF p_settlement_doc_rec.settlement_number IS NULL THEN
6133 x_complete_rec.settlement_number := l_settlement_doc_rec.settlement_number;
6134 END IF;
6135
6136 -- settlement_date
6137 IF p_settlement_doc_rec.settlement_date = FND_API.g_miss_date THEN
6138 x_complete_rec.settlement_date := NULL;
6139 END IF;
6140 IF p_settlement_doc_rec.settlement_date IS NULL THEN
6141 x_complete_rec.settlement_date := l_settlement_doc_rec.settlement_date;
6142 END IF;
6143
6144 -- settlement_amount
6145 IF p_settlement_doc_rec.settlement_amount = FND_API.g_miss_num THEN
6146 x_complete_rec.settlement_amount := NULL;
6147 END IF;
6148 IF p_settlement_doc_rec.settlement_amount IS NULL THEN
6149 x_complete_rec.settlement_amount := l_settlement_doc_rec.settlement_amount;
6150 END IF;
6151
6152 -- status_code
6153 IF p_settlement_doc_rec.status_code = FND_API.g_miss_char THEN
6154 x_complete_rec.status_code := NULL;
6155 END IF;
6156 IF p_settlement_doc_rec.status_code IS NULL THEN
6157 x_complete_rec.status_code := l_settlement_doc_rec.status_code;
6158 END IF;
6159
6160 -- attribute_category
6161 IF p_settlement_doc_rec.attribute_category = FND_API.g_miss_char THEN
6162 x_complete_rec.attribute_category := NULL;
6163 END IF;
6164 IF p_settlement_doc_rec.attribute_category IS NULL THEN
6165 x_complete_rec.attribute_category := l_settlement_doc_rec.attribute_category;
6166 END IF;
6167
6168 -- attribute1
6169 IF p_settlement_doc_rec.attribute1 = FND_API.g_miss_char THEN
6170 x_complete_rec.attribute1 := NULL;
6171 END IF;
6172 IF p_settlement_doc_rec.attribute1 IS NULL THEN
6173 x_complete_rec.attribute1 := l_settlement_doc_rec.attribute1;
6174 END IF;
6175
6176 -- attribute2
6177 IF p_settlement_doc_rec.attribute2 = FND_API.g_miss_char THEN
6178 x_complete_rec.attribute2 := NULL;
6179 END IF;
6180 IF p_settlement_doc_rec.attribute2 IS NULL THEN
6181 x_complete_rec.attribute2 := l_settlement_doc_rec.attribute2;
6182 END IF;
6183
6184 -- attribute3
6185 IF p_settlement_doc_rec.attribute3 = FND_API.g_miss_char THEN
6186 x_complete_rec.attribute3 := NULL;
6187 END IF;
6188 IF p_settlement_doc_rec.attribute3 IS NULL THEN
6189 x_complete_rec.attribute3 := l_settlement_doc_rec.attribute3;
6190 END IF;
6191
6192 -- attribute4
6193 IF p_settlement_doc_rec.attribute4 = FND_API.g_miss_char THEN
6194 x_complete_rec.attribute4 := NULL;
6195 END IF;
6196 IF p_settlement_doc_rec.attribute4 IS NULL THEN
6197 x_complete_rec.attribute4 := l_settlement_doc_rec.attribute4;
6198 END IF;
6199
6200 -- attribute5
6201 IF p_settlement_doc_rec.attribute5 = FND_API.g_miss_char THEN
6202 x_complete_rec.attribute5 := NULL;
6203 END IF;
6204 IF p_settlement_doc_rec.attribute5 IS NULL THEN
6205 x_complete_rec.attribute5 := l_settlement_doc_rec.attribute5;
6206 END IF;
6207
6208 -- attribute6
6209 IF p_settlement_doc_rec.attribute6 = FND_API.g_miss_char THEN
6210 x_complete_rec.attribute6 := NULL;
6211 END IF;
6212 IF p_settlement_doc_rec.attribute6 IS NULL THEN
6213 x_complete_rec.attribute6 := l_settlement_doc_rec.attribute6;
6214 END IF;
6215
6216 -- attribute7
6217 IF p_settlement_doc_rec.attribute7 = FND_API.g_miss_char THEN
6218 x_complete_rec.attribute7 := NULL;
6219 END IF;
6220 IF p_settlement_doc_rec.attribute7 IS NULL THEN
6221 x_complete_rec.attribute7 := l_settlement_doc_rec.attribute7;
6222 END IF;
6223
6224 -- attribute8
6225 IF p_settlement_doc_rec.attribute8 = FND_API.g_miss_char THEN
6226 x_complete_rec.attribute8 := NULL;
6227 END IF;
6228 IF p_settlement_doc_rec.attribute8 IS NULL THEN
6229 x_complete_rec.attribute8 := l_settlement_doc_rec.attribute8;
6230 END IF;
6231
6232 -- attribute9
6233 IF p_settlement_doc_rec.attribute9 = FND_API.g_miss_char THEN
6234 x_complete_rec.attribute9 := NULL;
6235 END IF;
6236 IF p_settlement_doc_rec.attribute9 IS NULL THEN
6237 x_complete_rec.attribute9 := l_settlement_doc_rec.attribute9;
6238 END IF;
6239
6240 -- attribute10
6241 IF p_settlement_doc_rec.attribute10 = FND_API.g_miss_char THEN
6242 x_complete_rec.attribute10 := NULL;
6243 END IF;
6244 IF p_settlement_doc_rec.attribute10 IS NULL THEN
6245 x_complete_rec.attribute10 := l_settlement_doc_rec.attribute10;
6246 END IF;
6247
6248 -- attribute11
6249 IF p_settlement_doc_rec.attribute11 = FND_API.g_miss_char THEN
6250 x_complete_rec.attribute11 := NULL;
6251 END IF;
6252 IF p_settlement_doc_rec.attribute11 IS NULL THEN
6253 x_complete_rec.attribute11 := l_settlement_doc_rec.attribute11;
6254 END IF;
6255
6256 -- attribute12
6257 IF p_settlement_doc_rec.attribute12 = FND_API.g_miss_char THEN
6258 x_complete_rec.attribute12 := NULL;
6259 END IF;
6260 IF p_settlement_doc_rec.attribute12 IS NULL THEN
6261 x_complete_rec.attribute12 := l_settlement_doc_rec.attribute12;
6262 END IF;
6263
6264 -- attribute13
6265 IF p_settlement_doc_rec.attribute13 = FND_API.g_miss_char THEN
6266 x_complete_rec.attribute13 := NULL;
6267 END IF;
6268 IF p_settlement_doc_rec.attribute13 IS NULL THEN
6269 x_complete_rec.attribute13 := l_settlement_doc_rec.attribute13;
6270 END IF;
6271
6272 -- attribute14
6273 IF p_settlement_doc_rec.attribute14 = FND_API.g_miss_char THEN
6274 x_complete_rec.attribute14 := NULL;
6275 END IF;
6276 IF p_settlement_doc_rec.attribute14 IS NULL THEN
6277 x_complete_rec.attribute14 := l_settlement_doc_rec.attribute14;
6278 END IF;
6279
6280 -- attribute15
6281 IF p_settlement_doc_rec.attribute15 = FND_API.g_miss_char THEN
6282 x_complete_rec.attribute15 := NULL;
6283 END IF;
6284 IF p_settlement_doc_rec.attribute15 IS NULL THEN
6285 x_complete_rec.attribute15 := l_settlement_doc_rec.attribute15;
6286 END IF;
6287
6288 -- org_id
6289 IF p_settlement_doc_rec.org_id = FND_API.g_miss_num THEN
6290 x_complete_rec.org_id := NULL;
6291 END IF;
6292 IF p_settlement_doc_rec.org_id IS NULL THEN
6293 x_complete_rec.org_id := l_settlement_doc_rec.org_id;
6294 END IF;
6295
6296
6297 -- payment_reference_id
6298 IF p_settlement_doc_rec.payment_reference_id = FND_API.g_miss_num THEN
6299 x_complete_rec.payment_reference_id := NULL;
6300 END IF;
6301 IF p_settlement_doc_rec.payment_reference_id IS NULL THEN
6302 x_complete_rec.payment_reference_id := l_settlement_doc_rec.payment_reference_id;
6303 END IF;
6304
6305 -- payment_reference_number
6306 IF p_settlement_doc_rec.payment_reference_number = FND_API.g_miss_char THEN
6307 x_complete_rec.payment_reference_number := NULL;
6308 END IF;
6309 IF p_settlement_doc_rec.payment_reference_number IS NULL THEN
6310 x_complete_rec.payment_reference_number := l_settlement_doc_rec.payment_reference_number;
6311 END IF;
6312
6313 -- payment_status
6314 IF p_settlement_doc_rec.payment_status = FND_API.g_miss_char THEN
6315 x_complete_rec.payment_status := NULL;
6316 END IF;
6317 IF p_settlement_doc_rec.payment_status IS NULL THEN
6318 x_complete_rec.payment_status := l_settlement_doc_rec.payment_status;
6319 END IF;
6320
6321 -- group_claim_id
6322 IF p_settlement_doc_rec.group_claim_id = FND_API.g_miss_num THEN
6323 x_complete_rec.group_claim_id := NULL;
6324 END IF;
6325 IF p_settlement_doc_rec.group_claim_id IS NULL THEN
6326 x_complete_rec.group_claim_id := l_settlement_doc_rec.group_claim_id;
6327 END IF;
6328
6329 -- gl_date
6330 IF p_settlement_doc_rec.gl_date = FND_API.g_miss_date THEN
6331 x_complete_rec.gl_date := NULL;
6332 END IF;
6333 IF p_settlement_doc_rec.gl_date IS NULL THEN
6334 x_complete_rec.gl_date := l_settlement_doc_rec.gl_date;
6335 END IF;
6336
6337 -- wo_rec_trx_id
6338 IF p_settlement_doc_rec.wo_rec_trx_id = FND_API.g_miss_num THEN
6339 x_complete_rec.wo_rec_trx_id := NULL;
6340 END IF;
6341 IF p_settlement_doc_rec.wo_rec_trx_id IS NULL THEN
6342 x_complete_rec.wo_rec_trx_id := l_settlement_doc_rec.wo_rec_trx_id;
6343 END IF;
6344
6345 END Complete_Settle_Doc_Rec;
6346
6347
6348 ---------------------------------------------------------------------
6349 -- PROCEDURE
6350 -- Validate_Settlement_Doc
6351 --
6352 -- HISTORY
6353 -- pnerella Create.
6354 -- 05/30/2001 mchang Modified.
6355 ---------------------------------------------------------------------
6356 PROCEDURE Validate_Settlement_Doc(
6357 p_api_version_number IN NUMBER,
6358 p_init_msg_list IN VARCHAR2,
6359 p_validation_level IN NUMBER,
6360 p_settlement_doc_rec IN settlement_doc_rec_type,
6361 x_return_status OUT NOCOPY VARCHAR2,
6362 x_msg_count OUT NOCOPY NUMBER,
6363 x_msg_data OUT NOCOPY VARCHAR2
6364 )
6365 IS
6366 l_api_version CONSTANT NUMBER := 1.0;
6367 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Settlement_Doc';
6368 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
6369 l_return_status VARCHAR2(1);
6370
6371 l_object_version_number NUMBER;
6372 l_settlement_doc_rec OZF_Settlement_Doc_PVT.settlement_doc_rec_type;
6373
6374 BEGIN
6375 ----------------------- initialize --------------------
6376 IF OZF_DEBUG_HIGH_ON THEN
6377 OZF_Utility_PVT.debug_message(l_full_name||': start');
6378 END IF;
6379
6380 IF FND_API.to_boolean(p_init_msg_list) THEN
6381 FND_MSG_PUB.initialize;
6382 END IF;
6383
6384 IF NOT FND_API.compatible_api_call(
6385 l_api_version,
6386 p_api_version_number,
6387 l_api_name,
6388 g_pkg_name
6389 ) THEN
6390 RAISE FND_API.g_exc_unexpected_error;
6391 END IF;
6392
6393 x_return_status := FND_API.g_ret_sts_success;
6394
6395 ---------------------- validate ------------------------
6396 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
6397 Check_Settle_Doc_Items(
6398 p_settlement_doc_rec => p_settlement_doc_rec,
6399 p_validation_mode => JTF_PLSQL_API.g_create,
6400 x_return_status => x_return_status
6401 );
6402 IF x_return_status = FND_API.g_ret_sts_error THEN
6403 RAISE FND_API.g_exc_error;
6404 ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN
6405 RAISE FND_API.g_exc_unexpected_error;
6406 END IF;
6407 END IF;
6408
6409 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_record THEN
6410 Check_Settle_Doc_Record(
6411 p_settlement_doc_rec => p_settlement_doc_rec,
6412 p_complete_rec => NULL,
6413 x_return_status => l_return_status
6414 );
6415
6416 IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
6417 RAISE FND_API.g_exc_unexpected_error;
6418 ELSIF l_return_status = FND_API.g_ret_sts_error THEN
6419 RAISE FND_API.g_exc_error;
6420 END IF;
6421 END IF;
6422
6423 -------------------- finish --------------------------
6424 FND_MSG_PUB.count_and_get(
6425 p_encoded => FND_API.g_false,
6426 p_count => x_msg_count,
6427 p_data => x_msg_data
6428 );
6429
6430 IF OZF_DEBUG_HIGH_ON THEN
6431 OZF_Utility_PVT.debug_message(l_full_name ||': end');
6432 END IF;
6433
6434 EXCEPTION
6435 WHEN FND_API.g_exc_error THEN
6436 x_return_status := FND_API.g_ret_sts_error;
6437 FND_MSG_PUB.count_and_get(
6438 p_encoded => FND_API.g_false,
6439 p_count => x_msg_count,
6440 p_data => x_msg_data
6441 );
6442
6443 WHEN FND_API.g_exc_unexpected_error THEN
6444 x_return_status := FND_API.g_ret_sts_unexp_error ;
6445 FND_MSG_PUB.count_and_get(
6446 p_encoded => FND_API.g_false,
6447 p_count => x_msg_count,
6448 p_data => x_msg_data
6449 );
6450
6451 WHEN OTHERS THEN
6452 x_return_status := FND_API.g_ret_sts_unexp_error;
6453 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
6454 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
6455 END IF;
6456 FND_MSG_PUB.count_and_get(
6457 p_encoded => FND_API.g_false,
6458 p_count => x_msg_count,
6459 p_data => x_msg_data
6460 );
6461
6462 End Validate_Settlement_Doc;
6463
6464
6465 ---------------------------------------------------------------------
6466 -- PROCEDURE
6467 -- Check_Settle_Doc_Record
6468 --
6469 -- HISTORY
6470 -- pnerella Create.
6471 -- 05/30/2001 mchang Modified.
6472 ---------------------------------------------------------------------
6473 PROCEDURE Check_Settle_Doc_Record(
6474 p_settlement_doc_rec IN settlement_doc_rec_type,
6475 p_complete_rec IN settlement_doc_rec_type,
6476 x_return_status OUT NOCOPY VARCHAR2
6477 )
6478 IS
6479 BEGIN
6480 x_return_status := FND_API.g_ret_sts_success;
6481
6482 -- do other record level checkings
6483
6484 END Check_Settle_Doc_Record;
6485
6486 PROCEDURE Create_Settlement_Doc_Tbl(
6487 p_api_version_number IN NUMBER,
6488 p_init_msg_list IN VARCHAR2,
6489 p_commit IN VARCHAR2,
6490 p_validation_level IN NUMBER,
6491
6492 x_return_status OUT NOCOPY VARCHAR2,
6493 x_msg_count OUT NOCOPY NUMBER,
6494 x_msg_data OUT NOCOPY VARCHAR2,
6495
6496 p_settlement_doc_tbl IN settlement_doc_tbl_type,
6497 x_settlement_doc_id_tbl OUT NOCOPY JTF_NUMBER_TABLE
6498 )
6499 IS
6500 l_api_name CONSTANT VARCHAR2(30) := 'Create_Settlement_Doc_Tbl';
6501 l_api_version CONSTANT NUMBER := 1.0;
6502 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
6503 l_settlement_doc settlement_doc_rec_type;
6504 l_settlement_doc_id NUMBER;
6505
6506 l_msg_data varchar2(2000);
6507 l_msg_count number;
6508 l_return_status varchar2(30);
6509
6510 BEGIN
6511
6512 -- Standard begin of API savepoint
6513 SAVEPOINT Create_Settlement_Doc_Tbl;
6514 -- Standard call to check for call compatibility.
6515 IF NOT FND_API.Compatible_API_Call (
6516 l_api_version,
6517 p_api_version_number,
6518 l_api_name,
6519 G_PKG_NAME)
6520 THEN
6521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6522 END IF;
6523
6524 -- Debug Message
6525 IF OZF_DEBUG_LOW_ON THEN
6526 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
6527 FND_MESSAGE.Set_Token('TEXT',l_full_name||': Start');
6528 FND_MSG_PUB.Add;
6529 END IF;
6530
6531 --Initialize message list if p_init_msg_list is TRUE.
6532 IF FND_API.To_Boolean (p_init_msg_list) THEN
6533 FND_MSG_PUB.initialize;
6534 END IF;
6535
6536 -- Initialize API return status to sucess
6537 x_return_status := FND_API.G_RET_STS_SUCCESS;
6538 x_settlement_doc_id_tbl := JTF_NUMBER_TABLE();
6539
6540 For i in 1..p_settlement_doc_tbl.count LOOP
6541
6542 l_settlement_doc := p_settlement_doc_tbl(i);
6543
6544 OZF_SETTLEMENT_DOC_PVT.Create_Settlement_Doc(
6545 p_api_version_number => 1.0,
6546 p_init_msg_list => FND_API.G_FALSE,
6547 p_commit => FND_API.G_FALSE,
6548 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6549 x_return_status => l_return_status,
6550 x_msg_count => l_msg_count,
6551 x_msg_data => l_msg_data,
6552 p_settlement_doc_rec => l_settlement_doc,
6553 x_settlement_doc_id => l_settlement_doc_id
6554 );
6555
6556 -- Check return status from the above procedure call
6557 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6558 RAISE FND_API.G_EXC_ERROR;
6559 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6561 END IF;
6562
6563 x_settlement_doc_id_tbl.extend(i);
6564 x_settlement_doc_id_tbl(i) := l_settlement_doc_id;
6565
6566
6567 END LOOP;
6568
6569 -- Debug Message
6570 IF OZF_DEBUG_LOW_ON THEN
6571 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
6572 FND_MESSAGE.Set_Token('TEXT',l_full_name||': End');
6573 FND_MSG_PUB.Add;
6574 END IF;
6575 --Standard call to get message count and if count=1, get the message
6576 FND_MSG_PUB.Count_And_Get (
6577 p_encoded => FND_API.G_FALSE,
6578 p_count => x_msg_count,
6579 p_data => x_msg_data
6580 );
6581 EXCEPTION
6582 WHEN FND_API.G_EXC_ERROR THEN
6583 ROLLBACK TO Create_Settlement_Doc_Tbl;
6584 x_return_status := FND_API.G_RET_STS_ERROR;
6585 -- Standard call to get message count and if count=1, get the message
6586 FND_MSG_PUB.Count_And_Get (
6587 p_encoded => FND_API.G_FALSE,
6588 p_count => x_msg_count,
6589 p_data => x_msg_data
6590 );
6591 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6592 ROLLBACK TO Create_Settlement_Doc_Tbl;
6593 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6594 -- Standard call to get message count and if count=1, get the message
6595 FND_MSG_PUB.Count_And_Get (
6596 p_encoded => FND_API.G_FALSE,
6597 p_count => x_msg_count,
6598 p_data => x_msg_data
6599 );
6600 WHEN OTHERS THEN
6601 ROLLBACK TO Create_Settlement_Doc_Tbl;
6602 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6603 -- Standard call to get message count and if count=1, get the message
6604 FND_MSG_PUB.Count_And_Get (
6605 p_encoded => FND_API.G_FALSE,
6606 p_count => x_msg_count,
6607 p_data => x_msg_data );
6608
6609 END Create_Settlement_Doc_Tbl;
6610
6611 PROCEDURE Update_Settlement_Doc_Tbl(
6612 p_api_version_number IN NUMBER,
6613 p_init_msg_list IN VARCHAR2,
6614 p_commit IN VARCHAR2,
6615 p_validation_level IN NUMBER,
6616
6617 x_return_status OUT NOCOPY VARCHAR2,
6618 x_msg_count OUT NOCOPY NUMBER,
6619 x_msg_data OUT NOCOPY VARCHAR2,
6620
6621 p_settlement_doc_tbl IN settlement_doc_tbl_type
6622 )
6623 IS
6624 l_api_name CONSTANT VARCHAR2(30) := 'Update_Settlement_Doc_Tbl';
6625 l_api_version CONSTANT NUMBER := 1.0;
6626 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME ||'.'|| l_api_name;
6627 l_settlement_doc settlement_doc_rec_type;
6628 l_object_version_number number;
6629
6630 l_msg_data varchar2(2000);
6631 l_msg_count number;
6632 l_return_status varchar2(30);
6633 BEGIN
6634 -- Standard begin of API savepoint
6635 SAVEPOINT Update_Settlement_Doc_Tbl;
6636 -- Standard call to check for call compatibility.
6637 IF NOT FND_API.Compatible_API_Call (
6638 l_api_version,
6639 p_api_version_number,
6640 l_api_name,
6641 G_PKG_NAME) THEN
6642 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6643 END IF;
6644
6645 -- Debug Message
6646 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
6647 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
6648 FND_MESSAGE.Set_Token('TEXT',l_full_name||': Start');
6649 FND_MSG_PUB.Add;
6650 END IF;
6651
6652 --Initialize message list if p_init_msg_list is TRUE.
6653 IF FND_API.To_Boolean (p_init_msg_list) THEN
6654 FND_MSG_PUB.initialize;
6655 END IF;
6656
6657 -- Initialize API return status to sucess
6658 x_return_status := FND_API.G_RET_STS_SUCCESS;
6659
6660 For i in 1..p_settlement_doc_tbl.count LOOP
6661
6662 l_settlement_doc := p_settlement_doc_tbl(i);
6663
6664 OZF_SETTLEMENT_DOC_PVT.Update_Settlement_Doc(
6665 p_api_version_number => l_api_version,
6666 p_init_msg_list => FND_API.G_FALSE,
6667 p_commit => FND_API.G_FALSE,
6668 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6669 x_return_status => l_return_status,
6670 x_msg_count => l_msg_count,
6671 x_msg_data => l_msg_data,
6672
6673 p_settlement_doc_rec => l_settlement_doc,
6674 x_object_version_number => l_object_version_number
6675 );
6676
6677 IF l_return_status = FND_API.g_ret_sts_error THEN
6678 RAISE FND_API.g_exc_error;
6679 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
6680 RAISE FND_API.g_exc_unexpected_error;
6681 END IF;
6682 END LOOP;
6683
6684 -- Debug Message
6685 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
6686 FND_MESSAGE.Set_Name('OZF','OZF_API_DEBUG_MESSAGE');
6687 FND_MESSAGE.Set_Token('TEXT',l_full_name||': End');
6688 FND_MSG_PUB.Add;
6689 END IF;
6690 --Standard call to get message count and if count=1, get the message
6691 FND_MSG_PUB.Count_And_Get (
6692 p_encoded => FND_API.G_FALSE,
6693 p_count => x_msg_count,
6694 p_data => x_msg_data
6695 );
6696 EXCEPTION
6697 WHEN FND_API.G_EXC_ERROR THEN
6698 ROLLBACK TO Update_Settlement_Doc_Tbl;
6699 x_return_status := FND_API.G_RET_STS_ERROR;
6700 -- Standard call to get message count and if count=1, get the message
6701 FND_MSG_PUB.Count_And_Get (
6702 p_encoded => FND_API.G_FALSE,
6703 p_count => x_msg_count,
6704 p_data => x_msg_data
6705 );
6706 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6707 ROLLBACK TO Update_Settlement_Doc_Tbl;
6708 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6709 -- Standard call to get message count and if count=1, get the message
6710 FND_MSG_PUB.Count_And_Get (
6711 p_encoded => FND_API.G_FALSE,
6712 p_count => x_msg_count,
6713 p_data => x_msg_data
6714 );
6715 WHEN OTHERS THEN
6716 ROLLBACK TO Update_Settlement_Doc_Tbl;
6717 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6718 -- Standard call to get message count and if count=1, get the message
6719 FND_MSG_PUB.Count_And_Get (
6720 p_encoded => FND_API.G_FALSE,
6721 p_count => x_msg_count,
6722 p_data => x_msg_data
6723 );
6724 END Update_Settlement_Doc_Tbl;
6725
6726
6727 END OZF_SETTLEMENT_DOC_PVT;