DBA Data[Home] [Help]

PACKAGE BODY: APPS.OZF_SETTLEMENT_DOC_PVT

Source


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