[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;