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