1 Package Body AR_CM_APP_VAL_PVT AS
2 /* $Header: ARXCMAVB.pls 120.8 2012/05/17 22:00:55 dgaurab ship $ */
3 --Validation procedures are contained in this package
4
5 G_MSG_UERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
6 G_MSG_ERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_ERROR;
7 G_MSG_SUCCESS CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
8 G_MSG_HIGH CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
9 G_MSG_MEDIUM CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
10 G_MSG_LOW CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
11
12 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
13
14 PROCEDURE Validate_apply_gl_date(p_apply_gl_date IN DATE,
15 p_trx_gl_date IN DATE,
16 p_return_status OUT NOCOPY VARCHAR2
17 ) IS
18 l_bool BOOLEAN;
19
20 BEGIN
21 IF PG_DEBUG in ('Y', 'C') THEN
22 arp_util.debug('Validate_apply_gl_date ()+');
23 END IF;
24 p_return_status := FND_API.G_RET_STS_SUCCESS;
25
29 IF p_apply_gl_date < p_trx_gl_date THEN
26 IF p_apply_gl_date IS NOT NULL THEN
27
28 -- Check that the application GL Date is not before the invoice GL Date.
30 FND_MESSAGE.SET_NAME('AR','AR_VAL_GL_INV_GL');
31 FND_MSG_PUB.Add;
32 p_return_status := FND_API.G_RET_STS_ERROR;
33 END IF;
34
35 -- Check that the Application GL Date is in an open or future GL period.
36 IF ( NOT arp_util.is_gl_date_valid( p_apply_gl_date )) THEN
37 FND_MESSAGE.set_name( 'AR', 'AR_INVALID_APP_GL_DATE' );
38 --Int'l Calendar Project
39 FND_MESSAGE.set_token( 'GL_DATE', fnd_date.date_to_chardate(p_apply_gl_date, calendar_aware=> FND_DATE.calendar_aware_alt));
40 FND_MSG_PUB.Add;
41 p_return_status := FND_API.G_RET_STS_ERROR;
42 END IF;
43
44 END IF;
45 IF PG_DEBUG in ('Y', 'C') THEN
46 arp_util.debug('Validate_apply_gl_date ()-');
47 END IF;
48
49 END Validate_apply_gl_date;
50
51 PROCEDURE Validate_apply_date(p_apply_date IN DATE,
52 p_trx_date IN DATE,
53 p_return_status OUT NOCOPY VARCHAR2
54 ) IS
55
56 BEGIN
57 IF PG_DEBUG in ('Y', 'C') THEN
58 arp_util.debug('Validate_apply_date ()+');
59 END IF;
60 p_return_status := FND_API.G_RET_STS_SUCCESS;
61
62 IF p_apply_date IS NOT NULL THEN
63
64 -- check that the apply date is not before the invoice date.
65 IF p_apply_date < p_trx_date THEN
66 FND_MESSAGE.SET_NAME('AR','AR_APPLY_BEFORE_TRANSACTION');
67 FND_MSG_PUB.Add;
68 p_return_status := FND_API.G_RET_STS_ERROR;
69 END IF;
70
71 END IF;
72
73 IF PG_DEBUG in ('Y', 'C') THEN
74 arp_util.debug('Validate_apply_date ()-');
75 END IF;
76 END Validate_apply_date;
77
78 PROCEDURE Validate_amount_applied_from(
79 p_receivable_application_id IN NUMBER,
80 p_cm_unapp_amount IN NUMBER,
81 p_return_status OUT NOCOPY VARCHAR2
82 ) IS
83 l_amount_applied NUMBER;
84 l_amount_applied_from NUMBER;
85 l_remaining_unapp_cm_amt NUMBER;
86 BEGIN
87 IF PG_DEBUG in ('Y', 'C') THEN
88 arp_util.debug('Validate_amount_applied_from ()+');
89 END IF;
90 p_return_status := FND_API.G_RET_STS_SUCCESS;
91
92 SELECT amount_applied,
93 amount_applied_from INTO l_amount_applied,l_amount_applied_from
94 FROM ar_receivable_applications
95 WHERE receivable_application_id = p_receivable_application_id;
96
97 l_remaining_unapp_cm_amt := p_cm_unapp_amount + nvl(l_amount_applied_from, l_amount_applied);
98
99 IF l_remaining_unapp_cm_amt < 0 THEN
100 IF PG_DEBUG in ('Y', 'C') THEN
101 arp_util.debug('Validate_amount_applied_from: ' || 'l_remaining_unapp_cm_amt :'||to_char(l_remaining_unapp_cm_amt));
102 END IF;
103 p_return_status := FND_API.G_RET_STS_ERROR;
104 FND_MESSAGE.SET_NAME('AR','AR_CKAP_OVERAPP');
105 FND_MSG_PUB.Add;
106 END IF;
107 IF PG_DEBUG in ('Y', 'C') THEN
108 arp_util.debug('Validate_amount_applied_from ()-');
109 END IF;
110 END Validate_amount_applied_from;
111
112
113 PROCEDURE Validate_Rev_gl_date(p_reversal_gl_date IN DATE,
114 p_apply_gl_date IN DATE,
115 p_cm_gl_date IN DATE,
116 p_return_status OUT NOCOPY VARCHAR2
117 ) IS
118
119 BEGIN
120 IF PG_DEBUG in ('Y', 'C') THEN
121 arp_util.debug('Validate_Rev_gl_date ()+');
122 END IF;
123 p_return_status := FND_API.G_RET_STS_SUCCESS;
124 IF p_reversal_gl_date IS NOT NULL THEN
125
126 IF p_reversal_gl_date < NVL(p_apply_gl_date,p_reversal_gl_date) THEN
127 FND_MESSAGE.SET_NAME('AR','AR_RW_BEFORE_APP_GL_DATE');
128 --Int'l Calendar Project
129 FND_MESSAGE.SET_TOKEN('GL_DATE', fnd_date.date_to_chardate(p_apply_gl_date, calendar_aware=> FND_DATE.calendar_aware_alt));
130 FND_MSG_PUB.Add;
131 p_return_status := FND_API.G_RET_STS_ERROR;
132 END IF;
133 IF p_reversal_gl_date < nvl(p_cm_gl_date,p_reversal_gl_date) THEN
134 FND_MESSAGE.SET_NAME('AR','AR_REF_BEFORE_CM_GL_DATE');
135 --Int'l Calendar Project
136 FND_MESSAGE.SET_TOKEN('GL_DATE', fnd_date.date_to_chardate(p_cm_gl_date, calendar_aware=> FND_DATE.calendar_aware_alt));
137 FND_MSG_PUB.Add;
138 p_return_status := FND_API.G_RET_STS_ERROR;
139 END IF;
140
141 IF ( NOT arp_util.is_gl_date_valid(p_reversal_gl_date)) THEN
142 FND_MESSAGE.set_name( 'AR', 'AR_INVALID_APP_GL_DATE' );
143 --Int'l Calendar Project
144 FND_MESSAGE.set_token( 'GL_DATE', fnd_date.date_to_chardate(p_reversal_gl_date, calendar_aware=> FND_DATE.calendar_aware_alt));
145 FND_MSG_PUB.Add;
146 p_return_status := FND_API.G_RET_STS_ERROR;
147 END IF;
148
149 ELSE
150 FND_MESSAGE.SET_NAME('AR','AR_RAPI_REV_GL_DATE_NULL');
151 FND_MSG_PUB.Add;
152 p_return_status := FND_API.G_RET_STS_ERROR;
153 IF PG_DEBUG in ('Y', 'C') THEN
154 arp_util.debug('Validate_Rev_gl_date: ' || 'The Reversal gl date is null ');
155 END IF;
156 END IF;
157
158 IF PG_DEBUG in ('Y', 'C') THEN
159 arp_util.debug('Validate_Rev_gl_date ()-');
160 END IF;
161 EXCEPTION
162 WHEN others THEN
163 IF PG_DEBUG in ('Y', 'C') THEN
167 END Validate_Rev_gl_date;
164 arp_util.debug('EXCEPTION: Validate_rev_gl_date() ');
165 END IF;
166 raise;
168
169 PROCEDURE Validate_receivable_appln_id(
170 p_receivable_application_id IN NUMBER,
171 p_application_type IN VARCHAR2,
172 p_return_status OUT NOCOPY VARCHAR2) IS
173 l_valid NUMBER;
174 BEGIN
175 p_return_status := FND_API.G_RET_STS_SUCCESS;
176 IF PG_DEBUG in ('Y', 'C') THEN
177 arp_util.debug('Validate_receivable_appln_id ()+');
178 END IF;
179 IF p_receivable_application_id IS NOT NULL
180 THEN
181 SELECT count(*)
182 INTO l_valid
183 FROM AR_RECEIVABLE_APPLICATIONS ra
184 WHERE ra.receivable_application_id = p_receivable_application_id
185 and ra.display = 'Y'
186 and ra.status = p_application_type
187 and ra.application_type = 'CM';
188
189 IF l_valid = 0 THEN
190 FND_MESSAGE.SET_NAME('AR','AR_RAPI_REC_APP_ID_INVALID');
191 FND_MSG_PUB.Add;
192 p_return_status := FND_API.G_RET_STS_ERROR;
193 END IF;
194
195 ELSIF p_receivable_application_id IS NULL THEN
196 FND_MESSAGE.SET_NAME('AR','AR_RAPI_REC_APP_ID_NULL');
197 FND_MSG_PUB.Add;
198 p_return_status := FND_API.G_RET_STS_ERROR;
199
200 END IF;
201 IF PG_DEBUG in ('Y', 'C') THEN
202 arp_util.debug('Validate_receivable_appln_id ()-');
203 END IF;
204 EXCEPTION
205 WHEN others THEN
206 IF PG_DEBUG in ('Y', 'C') THEN
207 arp_util.debug('EXCEPTION: Validate_receivable_appln_id()');
208 END IF;
209 raise;
210 END Validate_receivable_appln_id;
211
212 PROCEDURE validate_activity(p_receivables_trx_id IN NUMBER,
213 p_customer_trx_id IN NUMBER,
214 p_applied_ps_id IN NUMBER,
215 p_amount_applied IN NUMBER,
216 p_currency_code IN VARCHAR2,
217 p_chk_approval_limit_flag IN VARCHAR2,
218 p_return_status IN OUT NOCOPY VARCHAR2
219 ) IS
220 l_activity_type VARCHAR2(30);
221 l_amount_from NUMBER;
222 l_amount_to NUMBER;
223 l_user_id NUMBER;
224 l_existing_cmref_amount NUMBER;
225 l_tot_cmref_amt NUMBER;
226
227 cursor activity_type is
228 select type
229 from ar_receivables_trx rt
230 where receivables_trx_id = p_receivables_trx_id;
231
232 BEGIN
233
234 IF PG_DEBUG in ('Y', 'C') THEN
235 arp_util.debug('validate_activity (+)');
236 END IF;
237
238 OPEN activity_type;
239 FETCH activity_type INTO l_activity_type;
240 IF activity_type%NOTFOUND THEN
241 FND_MESSAGE.SET_NAME('AR','AR_RAPI_REC_TRX_ID_INVALID');
242 FND_MSG_PUB.Add;
243 p_return_status := FND_API.G_RET_STS_ERROR;
244 END IF;
245 CLOSE activity_type;
246
247 IF l_activity_type IS NOT NULL THEN
248 --Validate applied ps_id
249 IF p_applied_ps_id = -8 THEN
250 --6865230
251 IF l_activity_type <> 'CM_REFUND' THEN
252 FND_MESSAGE.SET_NAME('AR','AR_RAPI_ACTIVITY_X_INVALID');
253 FND_MSG_PUB.Add;
254 p_return_status := FND_API.G_RET_STS_ERROR;
255 END IF;
256
257 l_user_id := to_number(fnd_profile.value('USER_ID'));
258
259 --get the existing refund amount on the CM.
260
261 BEGIN
262 SELECT sum(amount_applied)
263 INTO l_existing_cmref_amount
264 FROM ar_receivable_applications
265 WHERE applied_payment_schedule_id = -8
266 AND status = 'ACTIVITY'
267 AND NVL(confirmed_flag,'Y') = 'Y'
268 AND customer_trx_id = p_customer_trx_id;
269
270 l_tot_cmref_amt := NVL(l_existing_cmref_amount,0) + NVL(p_amount_applied,0);
271
272 EXCEPTION
273 WHEN no_data_found THEN
274 l_tot_cmref_amt := p_amount_applied;
275 END;
276
277 IF NVL(p_chk_approval_limit_flag,'Y') <> 'N' THEN
278 BEGIN
279 SELECT NVL(amount_from,0),
280 NVL(amount_to,0)
281 INTO l_amount_from,
282 l_amount_to
283 FROM ar_approval_user_limits
284 where currency_code = p_currency_code
285 and user_id = l_user_id
286 and document_type ='CMREF';
287 EXCEPTION
288 WHEN NO_DATA_FOUND THEN
289 l_amount_from := NVL(l_tot_cmref_amt,0);
290 l_amount_to := NVL(l_tot_cmref_amt,0);
291 END;
292
293 IF (NVL(l_tot_cmref_amt,0) > l_amount_to) OR
294 (NVL(l_tot_cmref_amt,l_amount_from) < l_amount_from)
295 THEN
296 fnd_message.set_name ('AR','AR_REF_USR_LMT_OUT_OF_RANGE');
297 fnd_message.set_token('FROM_AMOUNT', to_char(l_amount_from), FALSE);
298 fnd_message.set_token('TO_AMOUNT', to_char(l_amount_to), FALSE);
299 FND_MSG_PUB.Add;
300 p_return_status := FND_API.G_RET_STS_ERROR;
301 END IF;
302
303 END IF;
304
305 ELSE
306 --the applied payment schedule id is invalid
307 FND_MESSAGE.SET_NAME('AR','AR_RAPI_APP_PS_ID_INVALID');
308 FND_MSG_PUB.Add;
309 p_return_status := FND_API.G_RET_STS_ERROR;
310 END IF; --additional control structures to be added for new activity types.
311 END IF;
312 IF PG_DEBUG in ('Y', 'C') THEN
316
313 arp_util.debug('validate_activity (-)');
314 END IF;
315 END validate_activity;
317 PROCEDURE validate_activity_app( p_receivables_trx_id IN NUMBER,
318 p_applied_ps_id IN NUMBER,
319 p_customer_trx_id IN NUMBER,
320 p_cm_gl_date IN DATE,
321 p_cm_unapp_amount IN NUMBER,
322 p_trx_date IN DATE,
323 p_amount_applied IN NUMBER,
324 p_apply_gl_date IN DATE,
325 p_apply_date IN DATE,
326 p_cm_currency_code IN VARCHAR2,
327 p_return_status OUT NOCOPY VARCHAR2,
328 p_chk_approval_limit_flag IN VARCHAR2,
329 p_called_from IN VARCHAR2
330 ) IS
331 l_valid VARCHAR2(1) DEFAULT 'N';
332 l_cm_return_status VARCHAR2(1);
333 l_act_return_status VARCHAR2(1);
334 l_amt_return_status VARCHAR2(1);
335 l_gl_date_return_status VARCHAR2(1);
336 l_apply_date_return_status VARCHAR2(1);
337 BEGIN
338 IF PG_DEBUG in ('Y', 'C') THEN
339 arp_util.debug('validate_activity_app ()+');
340 END IF;
341 p_return_status := FND_API.G_RET_STS_SUCCESS;
342
343 l_act_return_status := FND_API.G_RET_STS_SUCCESS;
344 l_amt_return_status := FND_API.G_RET_STS_SUCCESS;
345 l_cm_return_status := FND_API.G_RET_STS_SUCCESS;
346 l_gl_date_return_status := FND_API.G_RET_STS_SUCCESS;
347 l_apply_date_return_status := FND_API.G_RET_STS_SUCCESS;
348
349 validate_activity(
350 p_receivables_trx_id,
351 p_customer_trx_id,
355 p_chk_approval_limit_flag,
352 p_applied_ps_id,
353 p_amount_applied,
354 p_cm_currency_code,
356 l_act_return_status
357 );
358 -- if this routine is called for cmrefund,this routine will check whether
359 -- the credit memo is suitable for refund
360
361 validate_credit_memo(FND_API.G_FALSE,
362 p_customer_trx_id,
363 l_cm_return_status);
364
365 validate_apply_date (p_apply_date,
366 p_trx_date,
367 l_apply_date_return_status
368 );
369
370 -- validate amount applied
371 IF p_amount_applied IS NULL THEN
372 FND_MESSAGE.SET_NAME('AR','AR_RAPI_APPLIED_AMT_NULL');
373 FND_MSG_PUB.Add;
374 l_amt_return_status := FND_API.G_RET_STS_ERROR;
375
376 ELSIF (p_amount_applied < 0 AND NVL(p_applied_ps_id,-8) = -8) THEN
377 FND_MESSAGE.SET_NAME('AR','AR_REF_CM_APP_NEG');
378 FND_MSG_PUB.Add;
379 l_amt_return_status := FND_API.G_RET_STS_ERROR;
380 -- Bug 2897244 - amount not checked if called from form
381 ELSIF ((nvl(p_cm_unapp_amount,0)- p_amount_applied) < 0 AND
382 NVL(p_called_from,'RAPI') <> 'ARXRWAPP') THEN
383 FND_MESSAGE.SET_NAME('AR','AR_CKAP_OVERAPP');
384 FND_MSG_PUB.Add;
385 l_amt_return_status := FND_API.G_RET_STS_ERROR;
386 END IF;
387
388 validate_apply_gl_date(
389 p_apply_gl_date,
390 p_cm_gl_date,
391 l_gl_date_return_status
392 );
393
394 IF l_cm_return_status <> FND_API.G_RET_STS_SUCCESS OR
395 l_amt_return_status <> FND_API.G_RET_STS_SUCCESS OR
396 l_gl_date_return_status <> FND_API.G_RET_STS_SUCCESS OR
397 l_apply_date_return_status <> FND_API.G_RET_STS_SUCCESS OR
398 l_act_return_status <> FND_API.G_RET_STS_SUCCESS
399 THEN
400 p_return_status := FND_API.G_RET_STS_ERROR;
401 END IF;
402
403 IF PG_DEBUG in ('Y', 'C') THEN
404 arp_util.debug('validate_activity_app ()-');
405 END IF;
406 EXCEPTION
407 WHEN others THEN
408 IF PG_DEBUG in ('Y', 'C') THEN
409 arp_util.debug('EXCEPTION: validate_activity_app()');
410 END IF;
411 raise;
412 END validate_activity_app;
413
414
415 PROCEDURE validate_unapp_activity(
416 p_trx_gl_date IN DATE,
417 p_receivable_application_id IN NUMBER,
418 p_reversal_gl_date IN DATE,
419 p_apply_gl_date IN DATE,
420 p_cm_unapp_amt IN NUMBER,
421 p_return_status OUT NOCOPY VARCHAR2
422 ) IS
423 l_amt_app_from_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
424 BEGIN
425 p_return_status := FND_API.G_RET_STS_SUCCESS;
426 IF PG_DEBUG in ('Y', 'C') THEN
427 arp_util.debug('validate_unapp_activity ()+');
428 END IF;
429
430 Validate_rev_gl_date( p_reversal_gl_date ,
431 p_apply_gl_date ,
432 p_trx_gl_date,
433 p_return_status
434 );
435
436 IF p_receivable_application_id IS NOT NULL
437 AND p_cm_unapp_amt IS NOT NULL THEN
438 Validate_amount_applied_from( p_receivable_application_id,
439 p_cm_unapp_amt,
440 l_amt_app_from_return_status);
441 END IF;
442 IF l_amt_app_from_return_status <> FND_API.G_RET_STS_SUCCESS OR
443 p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
444 p_return_status := FND_API.G_RET_STS_ERROR;
445 END IF;
446
447 IF PG_DEBUG in ('Y', 'C') THEN
448 arp_util.debug('validate_unapp_activity: ' || 'p_return_status :'||p_return_status);
449 arp_util.debug('validate_unapp_activity ()-');
450 END IF;
451 END validate_unapp_activity;
452
453
454 PROCEDURE validate_credit_memo (
455 p_init_msg_list IN VARCHAR2,
456 p_customer_trx_id IN NUMBER,
457 p_return_status OUT NOCOPY VARCHAR2) IS
458
459 CURSOR c_cm IS
460 SELECT ct.receipt_method_id,
461 ct.customer_bank_account_id,
462 ct.previous_customer_trx_id,
463 ct.complete_flag,
464 rc.remit_flag,
465 rma.remittance_ccid
466 FROM ra_customer_trx ct,
467 ar_receipt_methods rm,
468 ar_receipt_classes rc,
469 ar_receipt_method_accounts rma
470 WHERE ct.customer_trx_id = p_customer_trx_id
471 AND ct.receipt_method_id = rm.receipt_method_id(+)
472 AND rm.receipt_class_id = rc.receipt_class_id(+)
473 AND rm.receipt_method_id = rma.receipt_method_id(+)
474 AND ROWNUM = 1;
475
476 CURSOR c_ps IS
477 SELECT SUM(amount_due_original), SUM(amount_due_remaining)
478 FROM ar_payment_schedules
479 WHERE customer_trx_id = p_customer_trx_id;
480
481 l_receipt_method_id NUMBER;
482 l_customer_bank_account_id NUMBER;
483 l_previous_customer_trx_id NUMBER;
484 l_complete_flag ra_customer_trx.complete_flag%TYPE;
485 l_remit_flag ar_receipt_classes.remit_flag%TYPE;
486 l_remittance_ccid NUMBER;
487 l_amount_due_original NUMBER;
488 l_amount_due_remaining NUMBER;
489 BEGIN
490 IF PG_DEBUG in ('Y', 'C') THEN
491 arp_util.debug('validate_credit_memo (+)');
492 END IF;
493 /*--------------------------------------------------------------+
494 | Initialize message list if p_init_msg_list is set to TRUE |
495 +--------------------------------------------------------------*/
496
497 IF FND_API.to_Boolean( p_init_msg_list )
498 THEN
499 FND_MSG_PUB.initialize;
500 END IF;
501 /*-----------------------------------------+
502 | Initialize return status to SUCCESS |
503 +-----------------------------------------*/
504
505 p_return_status := FND_API.G_RET_STS_SUCCESS;
506
507 OPEN c_cm;
508 FETCH c_cm INTO l_receipt_method_id,
509 l_customer_bank_account_id,
510 l_previous_customer_trx_id,
511 l_complete_flag,
512 l_remit_flag,
513 l_remittance_ccid;
514 CLOSE c_cm;
515 IF l_previous_customer_trx_id IS NOT NULL THEN
516 FND_MESSAGE.SET_NAME('AR','AR_REF_NOT_OACM');
517 FND_MSG_PUB.Add;
518 p_return_status := FND_API.G_RET_STS_ERROR;
519 END IF;
520 IF NVL(l_complete_flag,'N') <> 'Y' THEN
521 FND_MESSAGE.SET_NAME('AR','AR_REF_CM_INCOMPLETE');
522 FND_MSG_PUB.Add;
523 p_return_status := FND_API.G_RET_STS_ERROR;
524 ELSE
525 OPEN c_ps;
526 FETCH c_ps INTO l_amount_due_original, l_amount_due_remaining;
527 CLOSE c_ps;
528 /* Bug 4203308 - checks the original amount for positive CM condition
529 instead of amount due which may be positive due to overapplication */
530 IF l_amount_due_original > 0 THEN
531 FND_MESSAGE.SET_NAME('AR','AR_REF_CM_POSITIVE');
532 FND_MSG_PUB.Add;
533 p_return_status := FND_API.G_RET_STS_ERROR;
534 END IF;
535 IF l_amount_due_remaining >= 0 THEN
536 FND_MESSAGE.SET_NAME('AR','AR_REF_MORE_THAN_CM_AMT');
537 FND_MSG_PUB.Add;
538 p_return_status := FND_API.G_RET_STS_ERROR;
539 END IF;
540 END IF;
541 IF PG_DEBUG in ('Y', 'C') THEN
542 arp_util.debug('validate_credit_memo (-)');
543 END IF;
544 EXCEPTION
545 WHEN OTHERS THEN
546 FND_MESSAGE.SET_NAME('AR','AR_RAPI_CUST_TRX_ID_INVALID');
547 FND_MSG_PUB.Add;
548 p_return_status := FND_API.G_RET_STS_ERROR;
549
550 END validate_credit_memo;
551
552 END AR_CM_APP_VAL_PVT;