DBA Data[Home] [Help]

PACKAGE BODY: APPS.AR_CM_API_PUB

Source


1 PACKAGE BODY AR_CM_API_PUB AS
2 /* $Header: ARXPCMEB.pls 120.0.12000000.1 2007/02/27 12:04:32 mpsingh noship $ */
3 /*#
4  * Credit Memo APIs allow users to apply/unapply on account credit memo
5  * against a debit memo or invoice using simple calls to PL/SQL functions.
6   */
7 
8 G_PKG_NAME   CONSTANT VARCHAR2(30)      := 'AR_CM_API_PUB';
9 
10 G_MSG_UERROR    CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
11 G_MSG_ERROR     CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_ERROR;
12 G_MSG_SUCCESS   CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
13 
14 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
15 
16 PROCEDURE apply_on_account(
17       p_api_version      IN  NUMBER,
18       p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE,
19       p_commit           IN  VARCHAR2 := FND_API.G_FALSE,
20       p_cm_app_rec       IN  cm_app_rec_type,
21       x_return_status    OUT NOCOPY VARCHAR2,
22       x_msg_count        OUT NOCOPY NUMBER,
23       x_msg_data         OUT NOCOPY VARCHAR2,
24       x_out_rec_application_id        OUT NOCOPY NUMBER,
25       x_acctd_amount_applied_from OUT NOCOPY ar_receivable_applications.acctd_amount_applied_from%TYPE,
26       x_acctd_amount_applied_to OUT NOCOPY ar_receivable_applications.acctd_amount_applied_to%TYPE)
27 
28 IS
29 
30     l_api_name       CONSTANT  VARCHAR2(30) := 'Apply_on_account';
31     l_api_version    CONSTANT NUMBER       := 1.0;
32     l_cm_customer_trx_id  NUMBER;
33     l_inv_customer_trx_id  NUMBER;
34     l_inv_customer_trx_line_id  NUMBER;
35     l_installment  NUMBER(15);
36     l_applied_payment_schedule_id  NUMBER(15);
37     l_def_ids_return_status VARCHAR(1);
38     l_def_return_status VARCHAR(1);
39     l_val_return_status VARCHAR(1);
40     l_dflex_val_return_status  VARCHAR2(1);
41     l_return_status   VARCHAR2(1);
42     l_cm_gl_date      DATE;
43     l_cm_amount_rem   NUMBER;
44     l_cm_trx_date     DATE;
45     l_cm_ps_id        NUMBER;
46     l_cm_currency_code     fnd_currencies.currency_code%TYPE;
47     l_inv_due_date             DATE;
48     l_inv_currency_code     fnd_currencies.currency_code%TYPE;
49     l_inv_trx_date             DATE;
50     l_inv_gl_date              DATE;
51     l_allow_overappln_flag     VARCHAR2(1);
52     l_natural_appln_only_flag  VARCHAR2(1);
53     l_creation_sign            VARCHAR2(1);
54     l_inv_line_amount           NUMBER;
55     l_inv_amount_rem           NUMBER;
56 
57     l_apply_date DATE;
58     l_apply_gl_date DATE;
59     l_show_closed_invoices VARCHAR2(1);
60     l_amount_applied NUMBER;
61 
62 
63     l_rec_application_id   NUMBER;
64     l_acctd_amount_applied_from  NUMBER;
65     l_acctd_amount_applied_to   NUMBER;
66 
67     l_attribute_rec      ar_receipt_api_pub.attribute_rec_type;
68 
69 BEGIN
70 
71 
72       IF PG_DEBUG in ('Y', 'C') THEN
73            arp_util.debug('AR_CM_API_PUB.APPLY_ON_ACCOUNT(+)');
74       END IF;
75 
76       /*------------------------------------+
77       |   Standard start of API savepoint  |
78       +------------------------------------*/
79 
80       SAVEPOINT Apply_CM;
81 
82        /*--------------------------------------------------+
83         |   Standard call to check for call compatibility  |
84         +--------------------------------------------------*/
85 
86         IF NOT FND_API.Compatible_API_Call(
87                                             l_api_version,
88                                             p_api_version,
89                                             l_api_name,
90                                             G_PKG_NAME
91                                           )
92         THEN
93               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
94         END IF;
95 
96        /*--------------------------------------------------------------+
97         |   Initialize message list if p_init_msg_list is set to TRUE  |
98         +--------------------------------------------------------------*/
99 
100         IF FND_API.to_Boolean( p_init_msg_list )
101           THEN
102               FND_MSG_PUB.initialize;
103         END IF;
104 
105        /*-------------------------------------------------+
106         | Initialize SOB/org dependent variables          |
107         +-------------------------------------------------*/
108         arp_global.init_global;
109         arp_standard.init_standard;
110 
111        /*-----------------------------------------+
112         |   Initialize return status to SUCCESS   |
113         +-----------------------------------------*/
114 
115         x_return_status := FND_API.G_RET_STS_SUCCESS;
116 
117        /*---------------------------------------------+
118         |   ========== Start of API Body ==========   |
119         +---------------------------------------------*/
120 
121           l_cm_customer_trx_id := p_cm_app_rec.cm_customer_trx_id;
122           l_inv_customer_trx_id := p_cm_app_rec.inv_customer_trx_id;
123           l_inv_customer_trx_line_id := p_cm_app_rec.inv_customer_trx_line_id;
124           l_installment := p_cm_app_rec.installment;
125           l_applied_payment_schedule_id := p_cm_app_rec.applied_payment_schedule_id;
126           l_apply_date := p_cm_app_Rec.apply_date;
127           l_apply_gl_date := p_cm_app_rec.gl_date;
128           l_show_closed_invoices := p_cm_app_rec.show_closed_invoices;
129           l_amount_applied := p_cm_app_rec.amount_applied;
130 
131          /*-----------------------+
132            |                       |
133            |ID TO VALUE CONVERSION |
134            |                       |
135            +-----------------------*/
136 
137         -- Call Defaulting API here to get IDs based on input parameters
138         ar_cm_val_pvt.default_app_ids(
139                        l_cm_customer_trx_id,
140                        p_cm_app_rec.cm_trx_number,
141                        l_inv_customer_trx_id,
142                        p_cm_app_rec.inv_trx_number,
143                        l_inv_customer_trx_line_id,
144                        p_cm_app_rec.inv_line_number,
145                        l_installment,
146                        l_applied_payment_schedule_id,
147                        l_def_ids_return_status);
148 
149 
150         IF PG_DEBUG in ('Y', 'C') THEN
151           arp_util.debug(  'Defaulting Ids Return_status = '||l_def_ids_return_status);
152         END IF;
153           /*---------------------+
154            |                     |
155            |    DEFAULTING       |
156            |                     |
157            +---------------------*/
158 
159        -- Call API for defaulting
160        ar_cm_val_pvt.default_app_info(
161               l_cm_customer_trx_id  ,
162               l_inv_customer_trx_id ,
163               l_inv_customer_trx_line_id  ,
164               l_show_closed_invoices  ,
165               l_installment         ,
166               l_apply_date           ,
167               l_apply_gl_date        ,
168               l_amount_applied       ,
169               l_applied_payment_schedule_id ,
170               l_cm_gl_date          ,
171               l_cm_trx_date         ,
172               l_cm_amount_rem       ,
173               l_cm_currency_code    ,
174               l_inv_due_date         ,
175               l_inv_currency_code    ,
176               l_inv_amount_rem       ,
177               l_inv_trx_date         ,
178               l_inv_gl_date          ,
179               l_allow_overappln_flag ,
180               l_natural_appln_only_flag  ,
181               l_creation_sign        ,
182               l_cm_ps_id  ,
183               l_inv_line_amount       ,
184               l_def_return_status
185                );
186         IF PG_DEBUG in ('Y', 'C') THEN
187           arp_util.debug(  'Default Info Return_status = '||l_def_return_status);
188           arp_util.debug(  'Applied PS ID = '||l_applied_payment_schedule_id);
189         END IF;
190 
191 
192          /*---------------------+
193            |                     |
194            |    VALIDATION       |
195            |                     |
196            +---------------------*/
197       -- Call new PVT API for validation
198       IF l_def_return_status = FND_API.G_RET_STS_SUCCESS  AND
199          l_def_ids_return_status = FND_API.G_RET_STS_SUCCESS
200       THEN
201          ar_cm_val_pvt.validate_app_info(
202                       l_apply_date,
203                       l_cm_trx_date,
204                       l_inv_trx_date,
205                       l_apply_gl_date,
206                       l_cm_gl_date,
207                       l_inv_gl_date,
208                       l_amount_applied,
209                       l_applied_payment_schedule_id,
210                       l_inv_customer_trx_line_id,
211                       l_inv_line_amount,
212                       l_creation_sign,
213                       l_allow_overappln_flag,
214                       l_natural_appln_only_flag,
215                       l_cm_amount_rem,
216                       l_inv_amount_rem,
217                       l_cm_currency_code ,
218                       l_inv_currency_code,
219                       l_val_return_status
220                           );
221                       IF PG_DEBUG in ('Y', 'C') THEN
222                          arp_util.debug(  'Validation Return_status = '||l_val_return_status);
223                          arp_util.debug(  'Applied PS ID = '||l_applied_payment_schedule_id);
224                       END IF;
225      END IF;
226 
227      -- Validate DFF
228 
229      l_attribute_rec.attribute_category := p_cm_app_rec.attribute_category;
230      l_attribute_rec.attribute1 := p_cm_app_rec.attribute1;
231      l_attribute_rec.attribute2 := p_cm_app_rec.attribute2;
232      l_attribute_rec.attribute3 := p_cm_app_rec.attribute3;
233      l_attribute_rec.attribute4 := p_cm_app_rec.attribute4;
234      l_attribute_rec.attribute5 := p_cm_app_rec.attribute5;
235      l_attribute_rec.attribute6 := p_cm_app_rec.attribute6;
236      l_attribute_rec.attribute7 := p_cm_app_rec.attribute7;
237      l_attribute_rec.attribute8 := p_cm_app_rec.attribute8;
238      l_attribute_rec.attribute9 := p_cm_app_rec.attribute9;
239      l_attribute_rec.attribute10 := p_cm_app_rec.attribute10;
240      l_attribute_rec.attribute11 := p_cm_app_rec.attribute11;
241      l_attribute_rec.attribute12 := p_cm_app_rec.attribute12;
242      l_attribute_rec.attribute13 := p_cm_app_rec.attribute13;
243      l_attribute_rec.attribute14 := p_cm_app_rec.attribute14;
244      l_attribute_rec.attribute15 := p_cm_app_rec.attribute15;
245 
246      -- Call existing receipt api that does this validation
247      -- for populating RA
248      ar_receipt_lib_pvt.Validate_Desc_Flexfield(
249                                         l_attribute_rec,
250                                         'AR_RECEIVABLE_APPLICATIONS',
251                                         l_dflex_val_return_status
252                                                 );
253 
254       IF l_def_ids_return_status <> FND_API.G_RET_STS_SUCCESS OR
255           l_val_return_status     <> FND_API.G_RET_STS_SUCCESS OR
256           l_def_return_status     <> FND_API.G_RET_STS_SUCCESS  OR
257           l_dflex_val_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
258           x_return_status := FND_API.G_RET_STS_ERROR;
259        END IF;
260 
261 
262        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
263                                         p_count => x_msg_count,
264                                         p_data  => x_msg_data
265                                        );
266 
267        IF x_return_status <> FND_API.G_RET_STS_SUCCESS
268          THEN
269 
270             ROLLBACK TO Apply_CM;
271 
272              x_return_status := FND_API.G_RET_STS_ERROR ;
273 
274 
275              IF PG_DEBUG in ('Y', 'C') THEN
276                 arp_util.debug(  'Error(s) occurred. Rolling back and setting status to ERROR');
277              END IF;
278              Return;
279         END IF;
280 
281 
282          /*---------------------+
283            |                    |
284            | ENTITY HANDLER     |
285            |                    |
286            +--------------------*/
287 
288       -- Display inputs to entity handler
289       IF PG_DEBUG in ('Y', 'C') THEN
290          arp_util.debug(  'CM PS ID = '||l_cm_ps_id ||
291                           ' Invoice PS ID = '|| l_applied_payment_schedule_id ||
292                           ' AMount applied = '|| l_amount_applied ||
293                           ' Apply date = ' || l_apply_date||
294                           ' GL date = '|| l_apply_gl_date);
295       END IF;
296 
297       -- Lock the PS of the CM transaction
298       arp_ps_pkg.nowaitlock_p (p_ps_id => l_cm_ps_id);
299 
300       -- Lock the PS of the transaction to be applied
301       arp_ps_pkg.nowaitlock_p (p_ps_id => l_applied_payment_schedule_id);
302 
303        l_return_status := FND_API.G_RET_STS_SUCCESS;
304 
305 
306    BEGIN
307      --call the entity handler
308     arp_process_application.cm_application(
309         p_cm_ps_id    => l_cm_ps_id,
310         p_invoice_ps_id   => l_applied_payment_schedule_id,
311         p_amount_applied  => l_amount_applied,
312         p_apply_date      => l_apply_date,
313         p_gl_date         => l_apply_gl_date,
314         p_ussgl_transaction_code   => p_cm_app_rec.ussgl_transaction_code,
315         p_attribute_category   => p_cm_app_rec.attribute_category,
316         p_attribute1 => p_cm_app_rec.attribute1,
317         p_attribute2 => p_cm_app_rec.attribute2,
318         p_attribute3 => p_cm_app_rec.attribute3,
319         p_attribute4 => p_cm_app_rec.attribute4,
320         p_attribute5 => p_cm_app_rec.attribute5,
321         p_attribute6 => p_cm_app_rec.attribute6,
322         p_attribute7 => p_cm_app_rec.attribute7,
323         p_attribute8 => p_cm_app_rec.attribute8,
324         p_attribute9 => p_cm_app_rec.attribute9,
325         p_attribute10 => p_cm_app_rec.attribute10,
326         p_attribute11 => p_cm_app_rec.attribute11,
327         p_attribute12 => p_cm_app_rec.attribute12,
328         p_attribute13 => p_cm_app_rec.attribute13,
332         p_global_attribute1 => p_cm_app_rec.global_attribute1,
329         p_attribute14 => p_cm_app_rec.attribute14,
330         p_attribute15 => p_cm_app_rec.attribute15,
331         p_global_attribute_category => p_cm_app_rec.global_attribute_category,
333         p_global_attribute2 => p_cm_app_rec.global_attribute2,
334         p_global_attribute3 => p_cm_app_rec.global_attribute3,
335         p_global_attribute4 => p_cm_app_rec.global_attribute4,
336         p_global_attribute5 => p_cm_app_rec.global_attribute5,
337         p_global_attribute6 => p_cm_app_rec.global_attribute6,
338         p_global_attribute7 => p_cm_app_rec.global_attribute7,
339         p_global_attribute8 => p_cm_app_rec.global_attribute8,
340         p_global_attribute9 => p_cm_app_rec.global_attribute9,
341         p_global_attribute10 => p_cm_app_rec.global_attribute10,
342         p_global_attribute11 => p_cm_app_rec.global_attribute11,
343         p_global_attribute12 => p_cm_app_rec.global_attribute12,
344         p_global_attribute13 => p_cm_app_rec.global_attribute13,
345         p_global_attribute14 => p_cm_app_rec.global_attribute14,
346         p_global_attribute15 => p_cm_app_rec.global_attribute15,
347         p_global_attribute16 => p_cm_app_rec.global_attribute16,
348         p_global_attribute17 => p_cm_app_rec.global_attribute17,
349         p_global_attribute18 => p_cm_app_rec.global_attribute18,
350         p_global_attribute19 => p_cm_app_rec.global_attribute19,
351         p_global_attribute20 => p_cm_app_rec.global_attribute20,
352         p_customer_trx_line_id => l_inv_customer_trx_line_id ,
353         p_comments => p_cm_app_rec.comments,
354         p_module_name => 'CMAPI',
355         p_module_version => p_api_version,
356         p_out_rec_application_id  => l_rec_application_id,
357         p_acctd_amount_applied_from => l_acctd_amount_applied_from,
358         p_acctd_amount_applied_to => l_acctd_amount_applied_to
359     );
360 
361      x_out_rec_application_id := l_rec_application_id;
362      x_acctd_amount_applied_from := l_acctd_amount_applied_from;
363      x_acctd_amount_applied_to := l_acctd_amount_applied_to;
364 
365    EXCEPTION
366      WHEN OTHERS THEN
367 
368                /*-------------------------------------------------------+
369                 |  Handle application errors that result from trapable  |
370                 |  error conditions. The error messages have already    |
371                 |  been put on the error stack.                         |
372                 +-------------------------------------------------------*/
373 
374                 IF (SQLCODE = -20001)
375                 THEN
376                      ROLLBACK TO Apply_CM;
377 
378                       --  Display_Parameters;
379                       x_return_status := FND_API.G_RET_STS_ERROR ;
380                        FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
381                        FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ARP_PROCESS_APPLICATION.CM_APPLICATION'||SQLERRM);
382                        FND_MSG_PUB.Add;
383 
384                        FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
385                                                   p_count  =>  x_msg_count,
386                                                   p_data   => x_msg_data
387                                                 );
388                       RETURN;
389                 ELSE
390                    RAISE;
391                 END IF;
392    END;
393 
394    IF l_return_status = FND_API.G_RET_STS_ERROR THEN
395       RAISE FND_API.G_EXC_ERROR;
396    END IF;
397    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
398       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
399    END IF;
400 
401 
402        /*--------------------------------+
403         |   Standard check of p_commit   |
404         +--------------------------------*/
405 
406         IF FND_API.To_Boolean( p_commit )
407         THEN
408             IF PG_DEBUG in ('Y', 'C') THEN
409                arp_util.debug(  'committing');
410             END IF;
411               Commit;
412         END IF;
413         IF PG_DEBUG in ('Y', 'C') THEN
414            arp_util.debug('Apply ()- ');
415         END IF;
416      EXCEPTION
417        WHEN FND_API.G_EXC_ERROR THEN
418 
419                 IF PG_DEBUG in ('Y', 'C') THEN
420                    arp_util.debug(  SQLCODE, G_MSG_ERROR);
421                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
422                 END IF;
423 
424                 ROLLBACK TO Apply_CM;
425                 x_return_status := FND_API.G_RET_STS_ERROR ;
426 
427                -- Display_Parameters;
428 
429                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
430                                            p_count       =>      x_msg_count,
431                                            p_data        =>      x_msg_data
432                                          );
433 
434         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
435 
436                 IF PG_DEBUG in ('Y', 'C') THEN
437                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
438                 END IF;
439                 ROLLBACK TO Apply_CM;
440                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
441 
442                --  Display_Parameters;
443 
444                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
445                                            p_count       =>      x_msg_count,
446                                            p_data        =>      x_msg_data
447                                          );
448 
449         WHEN OTHERS THEN
450                /*-------------------------------------------------------+
451                 |  Handle application errors that result from trapable  |
455 
452                 |  error conditions. The error messages have already    |
453                 |  been put on the error stack.                         |
454                 +-------------------------------------------------------*/
456                 IF (SQLCODE = -20001)
457                 THEN
458 
459                       ROLLBACK TO Apply_CM;
460 
461                       --If only one error message on the stack,
462                       --retrive it
463 
464                       x_return_status := FND_API.G_RET_STS_ERROR ;
465                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
466                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','APPLY : '||SQLERRM);
467                       FND_MSG_PUB.Add;
468 
469                       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
470                                                  p_count  =>  x_msg_count,
471                                                  p_data   => x_msg_data
472                                                 );
473 
474                       RETURN;
475 
476                 ELSE
477                       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
478                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
479                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','APPLY : '||SQLERRM);
480                       FND_MSG_PUB.Add;
481                 END IF;
482 
483                 IF PG_DEBUG in ('Y', 'C') THEN
484                    arp_util.debug(  SQLCODE, G_MSG_ERROR);
485                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
486                 END IF;
487 
488                 ROLLBACK TO Apply_CM;
489 
490                 IF      FND_MSG_PUB.Check_Msg_Level
491                 THEN
492                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,
493                                         l_api_name
494                                        );
495                 END IF;
496 
497              --   Display_Parameters;
498 
499                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
500                                            p_count       =>      x_msg_count,
501                                            p_data        =>      x_msg_data
502                                          );
503 
504 
505 END apply_on_account;
506 
507 PROCEDURE unapply_on_account(
508       p_api_version      IN  NUMBER,
509       p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE,
510       p_commit           IN  VARCHAR2 := FND_API.G_FALSE,
511       p_cm_unapp_rec     IN  cm_unapp_rec_type,
512       x_return_status    OUT NOCOPY VARCHAR2,
513       x_msg_count        OUT NOCOPY NUMBER,
514       x_msg_data         OUT NOCOPY VARCHAR2)
515 
516 IS
517 
518 l_api_name       CONSTANT VARCHAR2(20) := 'Unapply_on_account';
519 l_api_version    CONSTANT NUMBER       := 1.0;
520 
521 
522 l_cm_customer_trx_id     NUMBER;
523 l_inv_customer_trx_id    NUMBER;
524 l_applied_payment_schedule_id  NUMBER;
525 l_receivable_application_id    NUMBER;
526 l_reversal_gl_date       DATE;
527 l_apply_gl_date          DATE;
528 l_cm_gl_date             DATE;
529 
530 l_def_ids_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
531 l_val_return_status     VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
532 
533 BEGIN
534         IF PG_DEBUG in ('Y', 'C') THEN
535            arp_util.debug('ar_cm_api_pub.Unapply_on_account()+ ');
536         END IF;
537 
538         /*------------------------------------+
539         |   Standard start of API savepoint  |
540         +------------------------------------*/
541 
542         SAVEPOINT Unapply_CM;
543 
544          /*--------------------------------------------------+
545         |   Standard call to check for call compatibility  |
546         +--------------------------------------------------*/
547 
548         IF NOT FND_API.Compatible_API_Call(
549                                             l_api_version,
550                                             p_api_version,
551                                             l_api_name,
552                                             G_PKG_NAME
553                                           )
554         THEN
555               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
556         END IF;
557 
558 
559         /*--------------------------------------------------------------+
560         |   Initialize message list if p_init_msg_list is set to TRUE  |
561         +--------------------------------------------------------------*/
562 
563         IF FND_API.to_Boolean( p_init_msg_list )
564           THEN
565               FND_MSG_PUB.initialize;
566         END IF;
567 
568 
569          original_cm_unapp_info.cm_trx_number := p_cm_unapp_rec.cm_trx_number;
570          original_cm_unapp_info.cm_customer_trx_id := p_cm_unapp_rec.cm_customer_trx_id;
571          original_cm_unapp_info.applied_ps_id := p_cm_unapp_rec.applied_payment_schedule_id;
572          original_cm_unapp_info.inv_customer_trx_id:= p_cm_unapp_rec.inv_customer_trx_id;
573          original_cm_unapp_info.inv_trx_number := p_cm_unapp_rec.inv_trx_number;
574          original_cm_unapp_info.receivable_application_id := p_cm_unapp_rec.receivable_application_id;
575 
576 
577         /*-------------------------------------------------+
578         | Initialize SOB/org dependent variables          |
579         +-------------------------------------------------*/
580         arp_global.init_global;
581         arp_standard.init_standard;
582 
583        /*-----------------------------------------+
584         |   Initialize return status to SUCCESS   |
585         +-----------------------------------------*/
586 
587         x_return_status := FND_API.G_RET_STS_SUCCESS;
591 
588        /*---------------------------------------------+
589         |   ========== Start of API Body ==========   |
590         +---------------------------------------------*/
592         --Assign IN parameter values to local variables
593         --which are also used as assignment targets.
594 
595          l_cm_customer_trx_id := p_cm_unapp_rec.cm_customer_trx_id;
596          l_inv_customer_trx_id   := p_cm_unapp_rec.inv_customer_trx_id;
597          l_applied_payment_schedule_id := p_cm_unapp_rec.applied_payment_schedule_id;
598          l_receivable_application_id  := p_cm_unapp_rec.receivable_application_id;
599          l_reversal_gl_date := trunc(p_cm_unapp_rec.reversal_gl_date);
600 
601 
602         --Derive the id's for the entered values and if both the
603         --values and the id's superceed the values
604 
605         ar_cm_val_pvt.default_unapp_ids(
606                                p_cm_unapp_rec.cm_trx_number ,
607                                l_cm_customer_trx_id ,
608                                p_cm_unapp_rec.inv_trx_number ,
609                                l_inv_customer_trx_id ,
610                                l_receivable_application_id,
611                                p_cm_unapp_rec.installment ,
612                                l_applied_payment_schedule_id ,
613                                l_apply_gl_date,
614                                l_def_ids_return_status
615                                   );
616        IF PG_DEBUG in ('Y', 'C') THEN
617           arp_util.debug(  'Cm customer trx id : '|| l_cm_customer_trx_id );
618           arp_util.debug(  'receivable app id : '|| l_receivable_application_id );
619        END IF;
620 
621         ar_cm_val_pvt.default_unapp_info(
622                            l_receivable_application_id,
623                            l_apply_gl_date,
624                            l_cm_customer_trx_id,
625                            l_reversal_gl_date,
626                            l_cm_gl_date);
627 
628        IF PG_DEBUG in ('Y', 'C') THEN
629           arp_util.debug(  'Cm customer trx id : '|| l_cm_customer_trx_id );
630           arp_util.debug(  'receivable app id : '|| l_receivable_application_id );
631           arp_util.debug(  'reversal date : '|| l_reversal_gl_date );
632        END IF;
633         ar_cm_val_pvt.validate_unapp_info(
634                                       l_cm_gl_date,
635                                       l_receivable_application_id,
636                                       l_reversal_gl_date,
637                                       l_apply_gl_date,
638                                       l_val_return_status);
639 
640        IF PG_DEBUG in ('Y', 'C') THEN
641           arp_util.debug(  'validation return status :'||l_val_return_status);
642        END IF;
643 
644        IF l_def_ids_return_status <> FND_API.G_RET_STS_SUCCESS OR
645             l_val_return_status <> FND_API.G_RET_STS_SUCCESS THEN
646             x_return_status := FND_API.G_RET_STS_ERROR ;
647          END IF;
648 
649         IF x_return_status <> FND_API.G_RET_STS_SUCCESS
650          THEN
651 
652             ROLLBACK TO Unapply_CM;
653 
654              x_return_status := FND_API.G_RET_STS_ERROR ;
655 
656              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
657                                         p_count => x_msg_count,
658                                         p_data  => x_msg_data
659                                        );
660 
661              IF PG_DEBUG in ('Y', 'C') THEN
662                 arp_util.debug(  'Error(s) occurred. Rolling back and setting status to ERROR');
663              END IF;
664              Return;
665         END IF;
666 
667         IF PG_DEBUG in ('Y', 'C') THEN
668            arp_util.debug(  '*******DUMP THE INPUT PARAMETERS ********');
669            arp_util.debug(  'l_receivable_application_id :'||to_char(l_receivable_application_id));
670            arp_util.debug(  'l_applied_payment_schedule_id :'||to_char(l_applied_payment_schedule_id));
671            arp_util.debug(  'l_reversal_gl_date :'||to_char(l_reversal_gl_date,'DD-MON-YY'));
672         END IF;
673 
674 
675        BEGIN
676         --call the entity handler.
677           arp_process_application.reverse_cm_app(
678                                 l_receivable_application_id,
679                                 l_applied_payment_schedule_id,
680                                 l_reversal_gl_date,
681                                 trunc(sysdate),
682                                 'CMAPI',
683                                 p_api_version);
684        EXCEPTION
685          WHEN OTHERS THEN
686 
687 
688                /*-------------------------------------------------------+
689                 |  Handle application errors that result from trapable  |
690                 |  error conditions. The error messages have already    |
691                 |  been put on the error stack.                         |
692                 +-------------------------------------------------------*/
693 
694                 IF (SQLCODE = -20001)
695                 THEN
696                      ROLLBACK TO Unapply_CM;
697 
698                       --  Display_Parameters;
699                       x_return_status := FND_API.G_RET_STS_ERROR ;
700                        FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
701                        FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ARP_PROCESS_APPLICATION.REVERSE_CM_APP : '||SQLERRM);
702                        FND_MSG_PUB.Add;
703 
704                        FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
705                                                   p_count  =>  x_msg_count,
706                                                   p_data   => x_msg_data
707                                                 );
711                 END IF;
708                       RETURN;
709                 ELSE
710                    RAISE;
712 
713        END;
714        /*--------------------------------+
715         |   Standard check of p_commit   |
716         +--------------------------------*/
717 
718         IF FND_API.To_Boolean( p_commit )
719         THEN
720             IF PG_DEBUG in ('Y', 'C') THEN
721                arp_util.debug(  'committing');
722             END IF;
723               Commit;
724         END IF;
725 
726         IF PG_DEBUG in ('Y', 'C') THEN
727            arp_util.debug('ar_cm_api.Unapply_on_account ()- ');
728         END IF;
729      EXCEPTION
730        WHEN FND_API.G_EXC_ERROR THEN
731 
732                 IF PG_DEBUG in ('Y', 'C') THEN
733                    arp_util.debug(  SQLCODE, G_MSG_ERROR);
734                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
735                 END IF;
736 
737                 ROLLBACK TO Unapply_CM;
738                 x_return_status := FND_API.G_RET_STS_ERROR ;
739 
740               --  Display_Parameters;
741 
742                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
743                                            p_count       =>      x_msg_count,
744                                            p_data        =>      x_msg_data
745                                          );
746 
747         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
748 
749                 IF PG_DEBUG in ('Y', 'C') THEN
750                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
751                 END IF;
752                 ROLLBACK TO Unapply_CM;
753                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
754 
755                --  Display_Parameters;
756 
757                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
758                                            p_count       =>      x_msg_count,
759                                            p_data        =>      x_msg_data
760                                          );
761 
762         WHEN OTHERS THEN
763 
764                /*-------------------------------------------------------+
765                 |  Handle application errors that result from trapable  |
766                 |  error conditions. The error messages have already    |
767                 |  been put on the error stack.                         |
768                 +-------------------------------------------------------*/
769 
770                 IF (SQLCODE = -20001)
771                 THEN
772 
773                       ROLLBACK TO Unapply_CM;
774 
775                       x_return_status := FND_API.G_RET_STS_ERROR ;
776                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
777                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','UNAPPLY : '||SQLERRM);
778                       FND_MSG_PUB.Add;
779 
780                       --If only one error message on the stack,
781                       --retrive it
782 
783                       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
784                                                  p_count  =>  x_msg_count,
785                                                  p_data   => x_msg_data
786                                                 );
787 
788                       RETURN;
789 
790                 ELSE
791                       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
792                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
793                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','UNAPPLY : '||SQLERRM);
794                       FND_MSG_PUB.Add;
795                 END IF;
796 
797                 IF PG_DEBUG in ('Y', 'C') THEN
798                    arp_util.debug(  SQLCODE, G_MSG_ERROR);
799                    arp_util.debug(  SQLERRM, G_MSG_ERROR);
800                 END IF;
801 
802                 ROLLBACK TO Unapply_CM;
803 
804                 IF      FND_MSG_PUB.Check_Msg_Level
805                 THEN
806                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,
807                                         l_api_name
808                                        );
809                 END IF;
810 
811              --   Display_Parameters;
812 
813                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
814                                            p_count       =>      x_msg_count,
815                                            p_data        =>      x_msg_data
816                                          );
817 
818 END unapply_on_account;
819 
820 
821 END AR_CM_API_PUB;