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