DBA Data[Home] [Help]

PACKAGE BODY: APPS.AR_CM_APPLICATION_PUB

Source


1 PACKAGE BODY AR_CM_APPLICATION_PUB AS
2 /* $Header: ARXPCMAB.pls 120.5.12010000.2 2008/08/04 07:00:34 bsuri ship $           */
3 
4 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'Y');
5 
6 --Start of comments
7 --API name : Credit Memo Application API
8 --Type     : Public.
9 --Function : Apply and unapply credit memos
10 --Pre-reqs :
11 --
12 -- Notes :
13 --
14 -- Modification History
15 -- Date         Name          Description
16 -- 26-JAN-2005  J Beckett     Created.
17 -- End of comments
18 
19 /* =======================================================================
20  | Global Data Types
21  * ======================================================================*/
22 
23 G_PKG_NAME     CONSTANT VARCHAR2(30) := 'AR_CM_APPLICATION_PUB';
24 
25 G_MSG_UERROR    CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
26 G_MSG_ERROR     CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_ERROR;
27 G_MSG_SUCCESS   CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
28 G_MSG_HIGH      CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
29 G_MSG_MEDIUM    CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
30 G_MSG_LOW       CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
31 
32 PROCEDURE activity_application(
33     -- Standard API parameters.
34       p_api_version                  IN  NUMBER,
35       p_init_msg_list                IN  VARCHAR2,
36       p_commit                       IN  VARCHAR2,
37       p_validation_level             IN  NUMBER,
38       x_return_status                OUT NOCOPY VARCHAR2,
39       x_msg_count                    OUT NOCOPY NUMBER,
40       x_msg_data                     OUT NOCOPY VARCHAR2,
41     -- Credit Memo application parameters.
42       p_customer_trx_id              IN ra_customer_trx.customer_trx_id%TYPE,
43       p_amount_applied               IN ar_receivable_applications.amount_applied%TYPE,
44       p_applied_payment_schedule_id  IN ar_payment_schedules.payment_schedule_id%TYPE, --this has no default
45       p_receivables_trx_id           IN ar_receivable_applications.receivables_trx_id%TYPE, --this has no default
46       p_apply_date                   IN ar_receivable_applications.apply_date%TYPE,
47       p_apply_gl_date                IN ar_receivable_applications.gl_date%TYPE,
48       p_ussgl_transaction_code       IN ar_receivable_applications.ussgl_transaction_code%TYPE,
49       p_attribute_rec                IN attribute_rec_type,
50     -- ******* Global Flexfield parameters *******
51       p_global_attribute_rec         IN global_attribute_rec_type,
52       p_comments                     IN ar_receivable_applications.comments%TYPE,
53       p_chk_approval_limit_flag     IN VARCHAR2,
54       p_application_ref_type IN OUT NOCOPY
55                 ar_receivable_applications.application_ref_type%TYPE,
56       p_application_ref_id IN OUT NOCOPY
57                 ar_receivable_applications.application_ref_id%TYPE,
58       p_application_ref_num IN OUT NOCOPY
59                 ar_receivable_applications.application_ref_num%TYPE,
60       p_receivable_application_id OUT NOCOPY ar_receivable_applications.receivable_application_id%TYPE,
61       p_called_from		    IN VARCHAR2
62      ,p_org_id             	IN  NUMBER
63      ,p_pay_group_lookup_code	IN  FND_LOOKUPS.lookup_code%TYPE
64      ,p_pay_alone_flag		IN  VARCHAR2
65      ,p_payment_method_code	IN  ap_invoices.payment_method_code%TYPE
66      ,p_payment_reason_code	IN  ap_invoices.payment_reason_code%TYPE
67      ,p_payment_reason_comments	IN  ap_invoices.payment_reason_comments%TYPE
68      ,p_delivery_channel_code	IN  ap_invoices.delivery_channel_code%TYPE
69      ,p_remittance_message1	IN  ap_invoices.remittance_message1%TYPE
70      ,p_remittance_message2	IN  ap_invoices.remittance_message2%TYPE
71      ,p_remittance_message3	IN  ap_invoices.remittance_message3%TYPE
72      ,p_party_id		IN  hz_parties.party_id%TYPE
73      ,p_party_site_id		IN  hz_party_sites.party_site_id%TYPE
74      ,p_bank_account_id		IN  ar_cash_receipts.customer_bank_account_id%TYPE
75       )
76 IS
77  l_api_name       CONSTANT VARCHAR2(20) := 'activity_application';
78  l_api_version    CONSTANT NUMBER       := 1.0;
79  l_customer_trx_id NUMBER;
80  l_applied_ps_id   NUMBER;
81  l_amount_applied  NUMBER;
82  l_cm_unapp_amount  NUMBER;
83  l_apply_date      DATE;
84  l_apply_gl_date   DATE;
85  l_trx_date        DATE;
86  l_cm_gl_date      DATE;
87  l_return_status      VARCHAR2(1);
88  l_def_return_status  VARCHAR2(1);
89  l_val_return_status  VARCHAR2(1);
90  l_id_conv_return_status  VARCHAR2(1);
91  l_cm_currency_code fnd_currencies.currency_code%TYPE;
92  l_rec_app_id  NUMBER;
93  l_cm_ps_id NUMBER;
94  l_cm_receipt_method_id NUMBER;
95  l_application_ref_type ar_receivable_applications.application_ref_type%TYPE;
96  l_application_ref_id   ar_receivable_applications.application_ref_id%TYPE;
97  l_application_ref_num  ar_receivable_applications.application_ref_num%TYPE;
98  l_acctd_amount_applied_from  NUMBER;
99  l_acctd_amount_applied_to    NUMBER;
100  l_msg_count		NUMBER;
101  l_msg_data             VARCHAR2(2000);
102 
103  l_org_return_status VARCHAR2(1);
104  l_org_id                           NUMBER;
105  l_party_id hz_parties.party_id%TYPE;
106  l_party_name hz_parties.party_name%TYPE;
107  l_party_number hz_parties.party_number%TYPE;
108  l_party_site_id hz_party_sites.party_site_id%TYPE;
109  l_party_address VARCHAR2(360);
110  l_payment_method_code iby_payment_methods_vl.payment_method_code%TYPE;
111  l_payment_method_name iby_payment_methods_vl.payment_method_name%TYPE;
112  l_bank_account_id iby_ext_bank_accounts.ext_bank_account_id%TYPE;
113  l_bank_account_num iby_ext_bank_accounts.bank_account_num%TYPE;
114  l_payment_reason_code iby_payment_reasons_vl.payment_reason_code%TYPE;
115  l_payment_reason_name iby_payment_reasons_vl.meaning%TYPE;
116  l_delivery_channel_code iby_delivery_channels_vl.delivery_channel_code%TYPE;
117  l_delivery_channel_name iby_delivery_channels_vl.meaning%TYPE;
118  l_pay_alone_flag VARCHAR2(1);
119  l_legal_entity_id ar_cash_receipts.legal_entity_id%TYPE;
120  l_exchange_rate ar_cash_receipts.exchange_rate%TYPE;
121  l_exchange_rate_type ar_cash_receipts.exchange_rate_type%TYPE;
122  l_exchange_date ar_cash_receipts.exchange_date%TYPE;
123  l_invoice_id ap_invoices.invoice_id%TYPE;
124  l_dft_ref_return_status  VARCHAR2(1);
125 
126 BEGIN
127 
128        /*------------------------------------+
129         |   Standard start of API savepoint  |
130         +------------------------------------*/
131 
132       SAVEPOINT activity_app_PVT;
133 
134        /*--------------------------------------------------+
135         |   Standard call to check for call compatibility  |
136         +--------------------------------------------------*/
137 
138         IF NOT FND_API.Compatible_API_Call(
139                                             l_api_version,
140                                             p_api_version,
141                                             l_api_name,
142                                             G_PKG_NAME
143                                           )
144         THEN
145               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
146         END IF;
147 
148        /*--------------------------------------------------------------+
149         |   Initialize message list if p_init_msg_list is set to TRUE  |
150         +--------------------------------------------------------------*/
151 
152         IF FND_API.to_Boolean( p_init_msg_list )
153           THEN
154               FND_MSG_PUB.initialize;
155         END IF;
156 
157         IF PG_DEBUG in ('Y', 'C') THEN
158            arp_util.debug('ar_cm_application_pub.activity_application()+ ');
159         END IF;
160 
161        /*-------------------------------------------------+
162         | Initialize SOB/org dependent variables          |
163         +-------------------------------------------------*/
164         arp_global.init_global;
165         arp_standard.init_standard;
166 
167        /*-----------------------------------------+
168         |   Initialize return status to SUCCESS   |
169         +-----------------------------------------*/
170 
171         x_return_status := FND_API.G_RET_STS_SUCCESS;
172 
173         l_org_id            := p_org_id;
174         l_org_return_status := FND_API.G_RET_STS_SUCCESS;
175         ar_mo_cache_utils.set_org_context_in_api(p_org_id =>l_org_id,
176                                                  p_return_status =>l_org_return_status);
177         IF l_org_return_status <> FND_API.G_RET_STS_SUCCESS THEN
178            x_return_status := FND_API.G_RET_STS_ERROR;
179 	END IF;
180 
181        /*---------------------------------------------+
182         |   ========== Start of API Body ==========   |
183         +---------------------------------------------*/
184 
185      l_customer_trx_id := p_customer_trx_id;
186      l_applied_ps_id   := p_applied_payment_schedule_id;
187      l_amount_applied  := p_amount_applied;
188      l_apply_date      := trunc(p_apply_date);
189      l_apply_gl_date   := trunc(p_apply_gl_date);
190      l_application_ref_type         := p_application_ref_type;
191      l_application_ref_id           := p_application_ref_id;
192      l_application_ref_num          := p_application_ref_num;
193      l_party_id		:= p_party_id;
194      l_party_site_id	:= p_party_site_id;
195 
196      ar_cm_app_lib_pvt.default_activity_info
197 			( p_customer_trx_id => l_customer_trx_id
198 			, p_cm_ps_id => l_cm_ps_id
199 			, p_cm_currency_code => l_cm_currency_code
200 			, p_cm_gl_date => l_cm_gl_date
201 			, p_cm_unapp_amount => l_cm_unapp_amount
202 			, p_cm_receipt_method_id => l_cm_receipt_method_id
203 			, p_trx_date => l_trx_date
204 			, p_amount_applied => l_amount_applied
205 			, p_apply_date => l_apply_date
206 			, p_apply_gl_date => l_apply_gl_date
207 			, p_return_status => l_def_return_status
208 			);
209 
210      IF p_applied_payment_schedule_id = -8 THEN
211          /* Default the refund attributes from IBY */
212          ar_receipt_lib_pvt.default_refund_attributes(
213             	 p_cash_receipt_id	=>  NULL
214             	,p_customer_trx_id	=>  l_customer_trx_id
215 		,p_currency_code	=>  l_cm_currency_code
216 		,p_amount		=>  l_amount_applied
217 		,p_party_id		=>  l_party_id
218 		,p_party_site_id	=>  l_party_site_id
219 		,x_party_name		=>  l_party_name
220 		,x_party_number		=>  l_party_number
221 		,x_party_address	=>  l_party_address
222 		,x_exchange_rate	=>  l_exchange_rate
223 		,x_exchange_rate_type	=>  l_exchange_rate_type
224 		,x_exchange_date	=>  l_exchange_date
225 		,x_legal_entity_id	=>  l_legal_entity_id
226 		,x_payment_method_code	=>  l_payment_method_code
227 		,x_payment_method_name	=>  l_payment_method_name
228 		,x_bank_account_id	=>  l_bank_account_id
229           	,x_bank_account_num	=>  l_bank_account_num
230           	,x_payment_reason_code => l_payment_reason_code
231           	,x_payment_reason_name => l_payment_reason_name
232           	,x_delivery_channel_code => l_delivery_channel_code
233           	,x_delivery_channel_name => l_delivery_channel_name
234 		,x_pay_alone_flag	=>  l_pay_alone_flag
235 		,x_return_status	=> l_dft_ref_return_status
236 		,x_msg_count		=> x_msg_count
237 		,x_msg_data		=> x_msg_data );
238 
239          /* If values have been passed in they should be used instead */
240          IF p_payment_method_code IS NOT NULL THEN
241             l_payment_method_code := p_payment_method_code;
242 	 END IF;
243          IF p_bank_account_id IS NOT NULL THEN
244             l_bank_account_id := p_bank_account_id;
245 	 END IF;
246          IF p_payment_reason_code IS NOT NULL THEN
247             l_payment_reason_code := p_payment_reason_code;
248 	 END IF;
249          IF p_delivery_channel_code IS NOT NULL THEN
250             l_delivery_channel_code := p_delivery_channel_code;
251 	 END IF;
252          IF p_pay_alone_flag IS NOT NULL THEN
253             l_pay_alone_flag := p_pay_alone_flag;
254 	 END IF;
255 
256       END IF;
257 
258       IF PG_DEBUG in ('Y', 'C') THEN
259          arp_util.debug('Activity_application: ' || 'Default_activity_info return status :'||l_def_return_status);
260          arp_util.debug('Activity_application: ' || 'Default_refund_attributes return status :'||l_dft_ref_return_status);
261       END IF;
262 
263      ar_cm_app_val_pvt.validate_activity_app
264 		( p_receivables_trx_id => p_receivables_trx_id,
265                   p_applied_ps_id  => l_applied_ps_id,
266                   p_customer_trx_id => l_customer_trx_id,
267                   p_cm_gl_date  => l_cm_gl_date,
268                   p_cm_unapp_amount => l_cm_unapp_amount,
269                   p_trx_date => l_trx_date,
270                   p_amount_applied => l_amount_applied,
271                   p_apply_gl_date => l_apply_gl_date,
272                   p_apply_date => l_apply_date,
273                   p_cm_currency_code => l_cm_currency_code,
274                   p_return_status => l_val_return_status,
275                   p_chk_approval_limit_flag => p_chk_approval_limit_flag,
276                   p_called_from => p_called_from
277                                  );
278 
279       IF PG_DEBUG in ('Y', 'C') THEN
280          arp_util.debug('Activity_application: ' || 'Validation return status :'||l_val_return_status);
281          arp_util.debug('Activity_application: ' || '*****DUMPING ALL THE ENTITY HANDLER PARAMETERS  ***');
282          arp_util.debug('Activity_application: ' || 'l_cm_unapp_amount : '||l_cm_unapp_amount);
283          arp_util.debug('Activity_application: ' || 'l_amount_applied         : '||to_char(l_amount_applied));
284          arp_util.debug('Activity_application: ' || 'l_apply_date             : '||to_char(l_apply_date,'DD-MON-YY'));
285          arp_util.debug('Activity_application: ' || 'l_apply_gl_date          : '||to_char(l_apply_gl_date,'DD-MON-YY'));
286       END IF;
287 
288       IF l_val_return_status <> FND_API.G_RET_STS_SUCCESS  OR
289          l_def_return_status <> FND_API.G_RET_STS_SUCCESS OR
290          l_dft_ref_return_status <> FND_API.G_RET_STS_SUCCESS OR
291          l_id_conv_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
292 
293           IF PG_DEBUG in ('Y', 'C') THEN
294              arp_util.debug('Activity_application: ' || 'Validation FAILED ');
295           END IF;
296           x_return_status :=  FND_API.G_RET_STS_ERROR;
297       END IF;
298 
299       IF x_return_status <> FND_API.G_RET_STS_SUCCESS
300          THEN
301 
302             ROLLBACK TO Activity_app_PVT;
303 
304              x_return_status := FND_API.G_RET_STS_ERROR ;
305 
306              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
307                                         p_count => x_msg_count,
308                                         p_data  => x_msg_data
309                                        );
310 
311              IF PG_DEBUG in ('Y', 'C') THEN
312                 arp_util.debug('Activity_application: ' || 'Error(s) occurred. Rolling back and setting status to ERROR');
313              END IF;
314              Return;
315        END IF;
316 
317       -- CM payment schedule locked before calling entity handler
318       arp_ps_pkg.nowaitlock_p (p_ps_id => l_cm_ps_id);
319 
320        --call the entity handler
321       BEGIN
322         arp_process_application.cm_activity_application     (
323 	p_cm_ps_id => l_cm_ps_id
324       , p_application_ps_id => l_applied_ps_id
325       , p_amount_applied => l_amount_applied
326       , p_apply_date                =>  l_apply_date
327       , p_gl_date                   =>  l_apply_gl_date
328       , p_ussgl_transaction_code    =>  p_ussgl_transaction_code
329       , p_attribute_category=> p_attribute_rec.attribute_category
330       , p_attribute1        => p_attribute_rec.attribute1
331       , p_attribute2        => p_attribute_rec.attribute2
332       , p_attribute3        => p_attribute_rec.attribute3
333       , p_attribute4        => p_attribute_rec.attribute4
334       , p_attribute5        => p_attribute_rec.attribute5
335       , p_attribute6        => p_attribute_rec.attribute6
336       , p_attribute7        => p_attribute_rec.attribute7
337       , p_attribute8        => p_attribute_rec.attribute8
338       , p_attribute9        => p_attribute_rec.attribute9
339       , p_attribute10       => p_attribute_rec.attribute10
340       , p_attribute11       => p_attribute_rec.attribute11
341       , p_attribute12       => p_attribute_rec.attribute12
342       , p_attribute13       => p_attribute_rec.attribute13
343       , p_attribute14       => p_attribute_rec.attribute14
344       , p_attribute15       => p_attribute_rec.attribute15
345       , p_global_attribute_category => p_global_attribute_rec.global_attribute_category
346       , p_global_attribute1 => p_global_attribute_rec.global_attribute1
347       , p_global_attribute2 => p_global_attribute_rec.global_attribute2
348       , p_global_attribute3 => p_global_attribute_rec.global_attribute3
349       , p_global_attribute4 => p_global_attribute_rec.global_attribute4
350       , p_global_attribute5 => p_global_attribute_rec.global_attribute5
351       , p_global_attribute6 => p_global_attribute_rec.global_attribute6
352       , p_global_attribute7 => p_global_attribute_rec.global_attribute7
353       , p_global_attribute8 => p_global_attribute_rec.global_attribute8
354       , p_global_attribute9 => p_global_attribute_rec.global_attribute9
355       , p_global_attribute10 => p_global_attribute_rec.global_attribute10
356       , p_global_attribute11 => p_global_attribute_rec.global_attribute11
357       , p_global_attribute12 => p_global_attribute_rec.global_attribute12
358       , p_global_attribute13 => p_global_attribute_rec.global_attribute13
359       , p_global_attribute14 => p_global_attribute_rec.global_attribute14
360       , p_global_attribute15 => p_global_attribute_rec.global_attribute15
361       , p_global_attribute16 => p_global_attribute_rec.global_attribute16
362       , p_global_attribute17 => p_global_attribute_rec.global_attribute17
363       , p_global_attribute18 => p_global_attribute_rec.global_attribute18
364       , p_global_attribute19 => p_global_attribute_rec.global_attribute19
365       , p_global_attribute20 => p_global_attribute_rec.global_attribute20
366       , p_receivables_trx_id		=> p_receivables_trx_id
367       , p_receipt_method_id		=> l_cm_receipt_method_id
368       , p_comments			=> p_comments
369       , p_module_name			=> 'CMAAPI'
370       , p_module_version		=> p_api_version
371       , p_application_ref_id         => l_application_ref_id
372       , p_application_ref_num       =>  l_application_ref_num
373       , p_out_rec_application_id    => l_rec_app_id
374         , p_acctd_amount_applied_from => l_acctd_amount_applied_from
375         , p_acctd_amount_applied_to => l_acctd_amount_applied_to
376       , x_return_status                =>  l_return_status
377       , x_msg_count                    =>  l_msg_count
378       , x_msg_data                     =>  l_msg_data);
379      EXCEPTION
380        WHEN OTHERS THEN
381 
382                /*-------------------------------------------------------+
383                 |  Handle application errors that result from trapable  |
384                 |  error conditions. The error messages have already    |
385                 |  been put on the error stack.                         |
386                 +-------------------------------------------------------*/
387 
388                 IF (SQLCODE = -20001)
389                 THEN
390                      ROLLBACK TO Activity_app_PVT;
391 
392                       --  Display_Parameters;
393                       x_return_status := FND_API.G_RET_STS_ERROR ;
394                        FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
395                        FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ARP_PROCESS_APPLICATION.CM_ACTIVITY_APPLICATION : '||SQLERRM);
396                        FND_MSG_PUB.Add;
397 
398                        FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
399                                                   p_count  =>  x_msg_count,
400                                                   p_data   => x_msg_data
401                                                 );
402                       RETURN;
403                 ELSE
404                    RAISE;
405                 END IF;
406 
407      END;
408 
409      /* Call AP API's to create payment request if refund */
410      IF p_applied_payment_schedule_id = -8 THEN
411 	BEGIN
412 	  ar_refunds_pvt.create_refund
413       		(p_receivable_application_id    =>  l_rec_app_id
414 		,p_amount			=>  l_amount_applied
415 		,p_currency_code		=>  l_cm_currency_code
416 		,p_exchange_rate		=>  l_exchange_rate
417 		,p_exchange_rate_type		=>  l_exchange_rate_type
418 		,p_exchange_date		=>  l_exchange_date
419 		,p_description			=>  NULL
420           	,p_pay_group_lookup_code	=>  p_pay_group_lookup_code
421           	,p_pay_alone_flag		=>  l_pay_alone_flag
422 		,p_org_id			=>  l_org_id
423 	  	,p_legal_entity_id        	=>  l_legal_entity_id
424           	,p_payment_method_code		=>  l_payment_method_code
425           	,p_payment_reason_code		=>  l_payment_reason_code
426           	,p_payment_reason_comments	=>  p_payment_reason_comments
427           	,p_delivery_channel_code	=>  l_delivery_channel_code
428           	,p_remittance_message1		=>  p_remittance_message1
429           	,p_remittance_message2		=>  p_remittance_message2
430           	,p_remittance_message3		=>  p_remittance_message3
431           	,p_party_id			=>  l_party_id
432           	,p_party_site_id		=>  l_party_site_id
433                 ,p_bank_account_id		=>  l_bank_account_id
434 		,p_called_from			=>  'CM_APPLICATION_API'
435 		,x_invoice_id			=>  l_invoice_id
436 		,x_return_status		=>  x_return_status
437 		,x_msg_count			=>  x_msg_count
438 		,x_msg_data			=>  x_msg_data );
439 
440    /* 6865230 */
441    IF x_return_status <> FND_API.G_RET_STS_SUCCESS
442          THEN
443 
444             ROLLBACK TO Activity_app_PVT;
445 
446              x_return_status := FND_API.G_RET_STS_ERROR ;
447 
448              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
449                                         p_count => x_msg_count,
450                                         p_data  => x_msg_data
451                                        );
452 
453              IF PG_DEBUG in ('Y', 'C') THEN
454                 arp_util.debug('create_refund: ' || 'Error(s) occurred. Rolling back and setting status to ERROR');
455              END IF;
456              Return;
457        END IF;
458 
459        l_application_ref_id := l_invoice_id;
460        l_application_ref_num := l_invoice_id;
461 
462         EXCEPTION
463        WHEN OTHERS THEN
464 
465                /*-------------------------------------------------------+
466                 |  Handle application errors that result from trapable  |
467                 |  error conditions. The error messages have already    |
468                 |  been put on the error stack.                         |
469                 +-------------------------------------------------------*/
470 
471                 IF (SQLCODE = -20001)
472                 THEN
473                      ROLLBACK TO Activity_app_PVT;
474 
475                       --  Display_Parameters;
476                       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
477                        FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
478                        FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','AR_REFUNDS_PVT.Create_Refund : '||SQLERRM);
479                        FND_MSG_PUB.Add;
480 
481                        FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
482                                                   p_count  =>  x_msg_count,
483                                                   p_data   => x_msg_data
484                                                 );
485                       RETURN;
486                 ELSE
487                    RAISE;
488                 END IF;
489         END;
490       END IF;
491 
492         p_receivable_application_id   := l_rec_app_id;
493         p_application_ref_type := l_application_ref_type;
494         p_application_ref_id   := l_application_ref_id;
495         p_application_ref_num  := l_application_ref_num;
496 
497        /*--------------------------------+
498         |   Standard check of p_commit   |
499         +--------------------------------*/
500 
501         IF FND_API.To_Boolean( p_commit )
502         THEN
503             IF PG_DEBUG in ('Y', 'C') THEN
504                arp_util.debug('Activity_application: ' || 'committing');
505             END IF;
506               Commit;
507         END IF;
508         IF PG_DEBUG in ('Y', 'C') THEN
509            arp_util.debug('ar_cm_application_pub.Activity_application()- ');
510         END IF;
511 EXCEPTION
512        WHEN FND_API.G_EXC_ERROR THEN
513 
514                 IF PG_DEBUG in ('Y', 'C') THEN
515                    arp_util.debug('Activity_application: ' || SQLCODE, G_MSG_ERROR);
516                    arp_util.debug('Activity_application: ' || SQLERRM, G_MSG_ERROR);
517                 END IF;
518 
519                 ROLLBACK TO Activity_app_PVT;
520                 x_return_status := FND_API.G_RET_STS_ERROR ;
521 
522                -- Display_Parameters;
523 
524                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
525                                            p_count       =>      x_msg_count,
526                                            p_data        =>      x_msg_data
527                                          );
528 
529         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
530 
531                 IF PG_DEBUG in ('Y', 'C') THEN
532                    arp_util.debug('Activity_application: ' || SQLERRM, G_MSG_ERROR);
533                 END IF;
534                 ROLLBACK TO Activity_app_PVT;
535                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
536 
537                --  Display_Parameters;
538 
539                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
540                                            p_count       =>      x_msg_count,
541                                            p_data        =>      x_msg_data
542                                          );
543 
544         WHEN OTHERS THEN
545 
546                /*-------------------------------------------------------+
547                 |  Handle application errors that result from trapable  |
548                 |  error conditions. The error messages have already    |
549                 |  been put on the error stack.                         |
550                 +-------------------------------------------------------*/
551 
552                 IF (SQLCODE = -20001)
553                 THEN
554 
555                       ROLLBACK TO Activity_app_PVT;
556 
557                       --If only one error message on the stack,
558                       --retrive it
559 
560                       x_return_status := FND_API.G_RET_STS_ERROR ;
561                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
562                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ACTIVITY_APPLICATION : '||SQLERRM);
563                       FND_MSG_PUB.Add;
564 
565                       --If only one error message on the stack,
566                       --retrive it
567 
568                       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
569                                                  p_count  =>  x_msg_count,
570                                                  p_data   => x_msg_data
571                                                 );
572 
573                       RETURN;
574 
575                 ELSE
576                      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
577                      FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
578                      FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ACTIVITY_APPLICATION : '||SQLERRM);
579                      FND_MSG_PUB.Add;
580                 END IF;
581 
582                 IF PG_DEBUG in ('Y', 'C') THEN
583                    arp_util.debug('Activity_application: ' || SQLCODE, G_MSG_ERROR);
584                    arp_util.debug('Activity_application: ' || SQLERRM, G_MSG_ERROR);
585                 END IF;
586 
587                 ROLLBACK TO Activity_app_PVT;
588 
589                 IF      FND_MSG_PUB.Check_Msg_Level
590                 THEN
591                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,
592                                         l_api_name
593                                        );
594                 END IF;
595 
596              --   Display_Parameters;
597 
598                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
599                                            p_count       =>      x_msg_count,
600                                            p_data        =>      x_msg_data
601                                          );
602 END Activity_application;
603 
604 
605 PROCEDURE Activity_unapplication(
606     -- Standard API parameters.
607       p_api_version      IN  NUMBER,
608       p_init_msg_list    IN  VARCHAR2,
609       p_commit           IN  VARCHAR2,
610       p_validation_level IN  NUMBER,
611       x_return_status    OUT NOCOPY VARCHAR2 ,
612       x_msg_count        OUT NOCOPY NUMBER ,
613       x_msg_data         OUT NOCOPY VARCHAR2 ,
614    -- *** Credit Memo Info. parameters *****
615       p_customer_trx_id  IN ra_customer_trx.customer_trx_id%TYPE,
616       p_receivable_application_id   IN ar_receivable_applications.receivable_application_id%TYPE,
617       p_reversal_gl_date IN ar_receivable_applications.reversal_gl_date%TYPE,
618       p_called_from      IN VARCHAR2,
619       p_org_id		 IN NUMBER
620       ) IS
621 l_api_name       CONSTANT VARCHAR2(20) := 'Activity_unapp';
622 l_api_version    CONSTANT NUMBER       := 1.0;
623 l_customer_trx_id               NUMBER;
624 l_receivable_application_id     NUMBER;
625 l_cm_gl_date                    DATE;
626 l_reversal_gl_date              DATE;
627 l_apply_gl_date                 DATE;
628 l_receipt_gl_date               DATE;
629 l_id_return_status              VARCHAR2(1);
630 l_def_return_status             VARCHAR2(1);
631 l_val_return_status             VARCHAR2(1);
632 l_cm_unapp_amt                  NUMBER;
633 l_cm_ps_id                      NUMBER;
634 l_org_id			NUMBER;
635 l_org_return_status		VARCHAR2(1);
636 l_refund_return_status		VARCHAR2(1);
637 l_applied_ps_id			ar_payment_schedules.payment_schedule_id%TYPE;
638 l_application_ref_id		ar_receivable_applications.application_ref_id%TYPE;
639 
640 BEGIN
641        /*------------------------------------+
642         |   Standard start of API savepoint  |
643         +------------------------------------*/
644 
645         SAVEPOINT Activity_unapplication_PVT;
646 
647        /*--------------------------------------------------+
648         |   Standard call to check for call compatibility  |
649         +--------------------------------------------------*/
650 
651         IF NOT FND_API.Compatible_API_Call(
652                                             l_api_version,
653                                             p_api_version,
654                                             l_api_name,
655                                             G_PKG_NAME
656                                           )
657         THEN
658               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
659         END IF;
660 
661        /*--------------------------------------------------------------+
662         |   Initialize message list if p_init_msg_list is set to TRUE  |
663         +--------------------------------------------------------------*/
664 
665         IF FND_API.to_Boolean( p_init_msg_list )
666           THEN
667               FND_MSG_PUB.initialize;
668         END IF;
669 
670         IF PG_DEBUG in ('Y', 'C') THEN
671            arp_util.debug('ar_cm_application_pub.activity_unapplication()+ ');
672         END IF;
673 
674        /*-------------------------------------------------+
675         | Initialize SOB/org dependent variables          |
676         +-------------------------------------------------*/
677         arp_global.init_global;
678         arp_standard.init_standard;
679 
680        /*-----------------------------------------+
681         |   Initialize return status to SUCCESS   |
682         +-----------------------------------------*/
683 
684         x_return_status := FND_API.G_RET_STS_SUCCESS;
685 
686         l_org_id            := p_org_id;
687         l_org_return_status := FND_API.G_RET_STS_SUCCESS;
688         ar_mo_cache_utils.set_org_context_in_api(p_org_id =>l_org_id,
689                                                  p_return_status =>l_org_return_status);
690         IF l_org_return_status <> FND_API.G_RET_STS_SUCCESS THEN
691            x_return_status := FND_API.G_RET_STS_ERROR;
692 	END IF;
693        /*---------------------------------------------+
694         |   ========== Start of API Body ==========   |
695         +---------------------------------------------*/
696 
697 
698         --Assign IN parameter values to local variables
699         --which are also used as assignment targets.
700 
701          l_customer_trx_id   := p_customer_trx_id;
702          l_receivable_application_id  := p_receivable_application_id;
703          l_reversal_gl_date := trunc(p_reversal_gl_date);
704 
705 
706         /*------------------------------------------------+
707          |  Derive the IDs for the entered values.        |
708          |  If both the values and the IDs are specified, |
709          |  the IDs supercede the values                  |
710          +------------------------------------------------*/
711 
712          ar_cm_app_lib_pvt.derive_activity_unapp_ids(
713                          NULL   ,
714                          l_customer_trx_id  ,
715                          l_receivable_application_id ,
716                          l_apply_gl_date     ,
717                          l_id_return_status
718                                );
719          ar_cm_app_lib_pvt.default_unapp_activity_info(
720                          l_receivable_application_id ,
721                          l_apply_gl_date            ,
722                          l_customer_trx_id          ,
723                          l_reversal_gl_date         ,
724                          l_cm_gl_date,
725 			 l_cm_ps_id,
726                          l_cm_unapp_amt,
727 			 l_def_return_status
728                           );
729 
730          ar_cm_app_val_pvt.validate_unapp_activity(
731                                       l_cm_gl_date,
732                                       l_receivable_application_id,
733                                       l_reversal_gl_date,
734                                       l_apply_gl_date,
735                                       l_cm_unapp_amt,
736                                       l_val_return_status);
737 
738          IF PG_DEBUG in ('Y', 'C') THEN
739             arp_util.debug('Activity_Unapplication: ' || 'validation return status :'||l_val_return_status);
740          END IF;
741 
742 	/* Refunds - check for refund and cancel if refund application */
743         SELECT applied_payment_schedule_id, application_ref_id
744 	INTO   l_applied_ps_id, l_application_ref_id
745 	FROM   ar_receivable_applications
746   	WHERE  receivable_application_id = l_receivable_application_id;
747 
748         IF (l_applied_ps_id = -8 AND p_called_from <> 'AR_REFUNDS_GRP') THEN
749            ar_refunds_pvt.cancel_refund(
750 		  p_application_ref_id  => l_application_ref_id
751 		, p_gl_date		=> l_reversal_gl_date
752 		, x_return_status	=> l_refund_return_status
753 		, x_msg_count		=> x_msg_count
754 		, x_msg_data		=> x_msg_data);
755         END IF;
756 
757         IF l_val_return_status <> FND_API.G_RET_STS_SUCCESS OR
758            l_id_return_status <> FND_API.G_RET_STS_SUCCESS  OR
759 	   l_refund_return_status <> FND_API.G_RET_STS_SUCCESS  OR
760            l_def_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
761            x_return_status := FND_API.G_RET_STS_ERROR;
762         END IF;
763 
764         IF x_return_status <> FND_API.G_RET_STS_SUCCESS
765          THEN
766 
767             ROLLBACK TO Activity_unapplication_PVT;
768 
769              x_return_status := FND_API.G_RET_STS_ERROR ;
770 
771              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
772                                         p_count => x_msg_count,
773                                         p_data  => x_msg_data
774                                        );
775 
776              IF PG_DEBUG in ('Y', 'C') THEN
777                 arp_util.debug('Activity_Unapplication: ' || 'Error(s) occurred. Rolling back and setting status to ERROR');
778              END IF;
779              Return;
780         END IF;
781 
782         IF PG_DEBUG in ('Y', 'C') THEN
783            arp_util.debug('Activity_Unapplication: ' || '*******DUMP THE INPUT PARAMETERS ********');
784            arp_util.debug('Activity_Unapplication: ' || 'l_receivable_application_id :'||to_char(l_receivable_application_id));
785            arp_util.debug('Activity_Unapplication: ' || 'l_reversal_gl_date :'||to_char(l_reversal_gl_date,'DD-MON-YY'));
786         END IF;
787 
788         -- CM payment schedule locked before calling entity handler
789         arp_ps_pkg.nowaitlock_p (p_ps_id => l_cm_ps_id);
790 
791         --call the entity handler.
792       BEGIN
793           arp_process_application.reverse_cm_app(
794                                 l_receivable_application_id,
795                                 -8,
796                                 l_reversal_gl_date,
797                                 trunc(sysdate),
798                                 'CMAAPI',
799                                 p_api_version,
800 				p_called_from);
801       EXCEPTION
802         WHEN OTHERS THEN
803 
804                /*-------------------------------------------------------+
805                 |  Handle application errors that result from trapable  |
806                 |  error conditions. The error messages have already    |
807                 |  been put on the error stack.                         |
808                 +-------------------------------------------------------*/
809 
810                 IF (SQLCODE = -20001)
811                 THEN
812                      ROLLBACK TO Activity_unapplication_PVT;
813 
814                       --  Display_Parameters;
815                       x_return_status := FND_API.G_RET_STS_ERROR ;
816                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
817                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ARP_PROCESS_APPLICATION.REVERSE : '||SQLERRM);
818                       FND_MSG_PUB.Add;
819 
820                        FND_MSG_PUB.Count_And_Get( p_encoded => FND_API.G_FALSE,
821                                                   p_count  =>  x_msg_count,
822                                                   p_data   => x_msg_data
823                                                 );
824                       RETURN;
825                 ELSE
826                    RAISE;
827                 END IF;
828       END;
829 
830        /*--------------------------------+
831         |   Standard check of p_commit   |
832         +--------------------------------*/
833 
834         IF FND_API.To_Boolean( p_commit )
835         THEN
836             IF PG_DEBUG in ('Y', 'C') THEN
837                arp_util.debug('Activity_Unapplication: ' || 'committing');
838             END IF;
839               Commit;
840         END IF;
841 
842         IF PG_DEBUG in ('Y', 'C') THEN
843            arp_util.debug('ar_cm_application_pub.Activity_unapplication()- ');
844         END IF;
845 
846 
847 EXCEPTION
848        WHEN FND_API.G_EXC_ERROR THEN
849 
850                 IF PG_DEBUG in ('Y', 'C') THEN
851                    arp_util.debug('Activity_Unapplication: ' || SQLCODE, G_MSG_ERROR);
852                    arp_util.debug('Activity_Unapplication: ' || SQLERRM, G_MSG_ERROR);
853                 END IF;
854 
855                 ROLLBACK TO Activity_unapplication_PVT;
856                 x_return_status := FND_API.G_RET_STS_ERROR ;
857 
858               --  Display_Parameters;
859 
860                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
861                                            p_count       =>      x_msg_count,
862                                            p_data        =>      x_msg_data
863                                          );
864 
865         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
866 
867                 IF PG_DEBUG in ('Y', 'C') THEN
868                    arp_util.debug('Activity_Unapplication: ' || SQLERRM, G_MSG_ERROR);
869                 END IF;
870                 ROLLBACK TO Activity_unapplication_PVT;
871                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
872 
873                --  Display_Parameters;
874 
875                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
876                                            p_count       =>      x_msg_count,
877                                            p_data        =>      x_msg_data
878                                          );
879 
880         WHEN OTHERS THEN
881 
882                /*-------------------------------------------------------+
883                 |  Handle application errors that result from trapable  |
884                 |  error conditions. The error messages have already    |
885                 |  been put on the error stack.                         |
886                 +-------------------------------------------------------*/
887 
888                 IF (SQLCODE = -20001)
889                 THEN
890 
891                       ROLLBACK TO Activity_unapplication_PVT;
892 
893                       x_return_status := FND_API.G_RET_STS_ERROR ;
894                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
895                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ACTIVITY_UNAPPLICATION : '||SQLERRM);
896                       FND_MSG_PUB.Add;
897 
898                       --If only one error message on the stack,
899                       --retrive it
900                       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
901                                                  p_count  =>  x_msg_count,
902                                                  p_data   => x_msg_data
903                                                 );
904 
905                       RETURN;
906 
907                 ELSE
908                       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
909                       FND_MESSAGE.SET_NAME ('AR','GENERIC_MESSAGE');
910                       FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','ACTIVITY_UNAPPLICATION : '||SQLERRM);
911                       FND_MSG_PUB.Add;
912                 END IF;
913 
914                 IF PG_DEBUG in ('Y', 'C') THEN
915                    arp_util.debug('Activity_Unapplication: ' || SQLCODE, G_MSG_ERROR);
916                    arp_util.debug('Activity_Unapplication: ' || SQLERRM, G_MSG_ERROR);
917                 END IF;
918 
919                 ROLLBACK TO Activity_unapplication_PVT;
920 
921                 IF      FND_MSG_PUB.Check_Msg_Level
922                 THEN
923                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,
924                                         l_api_name
925                                        );
926                 END IF;
927 
928              --   Display_Parameters;
929 
930                 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
931                                            p_count       =>      x_msg_count,
932                                            p_data        =>      x_msg_data
933                                          );
934 END Activity_unapplication;
935 
936 END AR_CM_APPLICATION_PUB;