DBA Data[Home] [Help]

PACKAGE BODY: APPS.AR_BILLS_CREATION_VAL_PVT

Source


1 Package Body  AR_BILLS_CREATION_VAL_PVT AS
2 /* $Header: ARBRCRVB.pls 120.7 2005/12/05 20:03:55 sgnagara ship $ */
3 
4 
5 
6 /* =======================================================================
7  | Bills Receivable status constants
8  * ======================================================================*/
9 
10 C_INCOMPLETE			CONSTANT VARCHAR2(30)	:=	'INCOMPLETE';
11 C_UNPAID			CONSTANT VARCHAR2(30)	:=	'UNPAID';
12 C_FACTORED			CONSTANT VARCHAR2(30)	:=	'FACTORED';
13 C_REMITTED			CONSTANT VARCHAR2(30)	:=	'REMITTED';
14 
15 
16 /*==============================================================================+
17  | PROCEDURE                                                                 	|
18  |    Validate_GL_Date			                                     	|
19  |                                                                           	|
20  | DESCRIPTION                                                               	|
21  |    Validates that the GL Date is in an open or future period		     	|
22  |									  	|
23  +==============================================================================*/
24 
25 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
26 
27 PROCEDURE Validate_Gl_Date (p_gl_date  IN  DATE) IS
28 
29 BEGIN
30 
31   	IF PG_DEBUG in ('Y', 'C') THEN
32   	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Gl_Date ()+');
33   	END IF;
34 
35 	IF  (p_gl_date IS NOT NULL)
36 	THEN
37 		IF ( NOT arp_util.is_gl_date_valid( p_gl_date ))
38 		THEN
39 		       	IF PG_DEBUG in ('Y', 'C') THEN
40 		       	   arp_util.debug('Validate_Gl_Date: ' || '>>>>>>>>>> Invalid GL Date');
41 		       	END IF;
42     			FND_MESSAGE.set_name	( 'AR', 'AR_INVALID_APP_GL_DATE' );
43 	    		FND_MESSAGE.set_token	( 'GL_DATE', TO_CHAR( p_gl_date ));
44 			app_exception.raise_exception;
45 	   	END IF;
46 	END IF;
47 
48 	IF PG_DEBUG in ('Y', 'C') THEN
49 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Gl_Date ()-');
50 	END IF;
51 
52 EXCEPTION
53 	WHEN OTHERS THEN
54 		IF PG_DEBUG in ('Y', 'C') THEN
55 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_GL_Date() ');
56 		   arp_util.debug('Validate_Gl_Date: ' || 'p_gl_date = ' || p_gl_date);
57 		END IF;
58 		RAISE;
59 
60 END Validate_Gl_Date;
61 
62 
63 
64 
65 /*==============================================================================+
66  | PROCEDURE                                                                 	|
67  |    Validate_Update_Maturity_Date	                                     	|
68  |                                                                           	|
69  | DESCRIPTION                                                              	|
70  |    Validates that Maturity Date can be updated			     	|
71  |                                                                           	|
72  +==============================================================================*/
73 
74 PROCEDURE Validate_Update_Maturity_Date (p_customer_trx_id	IN  ra_customer_trx.customer_trx_id%TYPE,
75 					 p_term_due_date 	IN  DATE				)
76 IS
77 
78 l_trx_rec	ra_customer_trx%ROWTYPE;
79 l_ps_rec	ar_payment_schedules%ROWTYPE;
80 l_trh_rec	ar_transaction_history%ROWTYPE;
81 
82 BEGIN
83 
84    	IF PG_DEBUG in ('Y', 'C') THEN
85    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Update_Maturity_Date ()+');
86    	END IF;
87 
88 
89 	/*----------------------------------------------+
90         |   Fetch the BR History Information :		|
91     	|   Current Status				|
92         +-----------------------------------------------*/
93 
94 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
95 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
96 	ARP_TRANSACTION_HISTORY_PKG.fetch_f_trx_id (l_trh_rec);
97 
98 
99 	IF	l_trh_rec.status in (C_FACTORED, C_REMITTED)
100 	THEN
101 		IF	AR_BILLS_MAINTAIN_STATUS_PUB.Is_BR_Matured (l_trx_rec.term_due_date)
102 		THEN
103 			IF PG_DEBUG in ('Y', 'C') THEN
104 			   arp_util.debug('Validate_Update_Maturity_Date: ' || '>>>>>>>>>> Current Maturity Date has passed, it cannot be updated');
105 	      		   arp_util.debug('Validate_Update_Maturity_Date: ' || 'Maturity Date parameter  : ' || p_term_due_date);
106  		     	   arp_util.debug('Validate_Update_Maturity_Date: ' || 'Maturity Date of the BR  : ' || l_trx_rec.term_due_date);
107  		     	END IF;
108    			FND_MESSAGE.set_name( 'AR','AR_BR_CANNOT_UPDATE_MAT_DATE');
109 			app_exception.raise_exception;
110 		END IF;
111 
112 		IF	trunc(p_term_due_date)   <=  trunc(SYSDATE)
113 		THEN
114 			IF PG_DEBUG in ('Y', 'C') THEN
115 			   arp_util.debug('Validate_Update_Maturity_Date: ' || '>>>>>>>>>> The new Maturity Date must be later that sysdate');
116 	      		   arp_util.debug('Validate_Update_Maturity_Date: ' || 'Maturity Date parameter  : ' || p_term_due_date);
117 	      		END IF;
118 			FND_MESSAGE.set_name	( 'AR', 'AR_BR_INVALID_TRX_DATE' );
119 	    		FND_MESSAGE.set_token	( 'ACTION', NULL);
120 			FND_MESSAGE.set_token	( 'NEW_TRX_DATE', p_term_due_date);
121 			FND_MESSAGE.set_token	( 'OLD_TRX_DATE', trunc(sysdate));
122 			app_exception.raise_exception;
123 		END IF;
124 
125 	END IF;
126 
127 	IF PG_DEBUG in ('Y', 'C') THEN
128 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Update_Maturity_Date ()-');
129 	END IF;
130 
131 EXCEPTION
132 	WHEN OTHERS THEN
133 		IF PG_DEBUG in ('Y', 'C') THEN
134 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Update_Maturity_Date() ');
135 		   arp_util.debug('Validate_Update_Maturity_Date: ' || 'p_customer_trx_id = ' || p_customer_trx_id);
136 		   arp_util.debug('Validate_Update_Maturity_Date: ' || 'p_term_due_date   = ' || p_term_due_date);
137 		END IF;
138 		RAISE;
139 
140 END Validate_Update_Maturity_Date;
141 
142 
143 
144 /*==============================================================================+
145  | PROCEDURE                                                                 	|
146  |    Validate_Batch_Source		                                     	|
147  |                                                                           	|
148  | DESCRIPTION                                                              	|
149  |    Validates that : 								|
150  |	- The Batch Source exists						|
151  |	- The status is Active							|
152  |	- It is valid at the Issue Date						|
153  |									     	|
154  +=============================================================================*/
155 
156 PROCEDURE Validate_Batch_Source (p_batch_source_id 	IN  	NUMBER	,
157 				 p_issue_date		IN	DATE	)  IS
158 
159 l_start_date		DATE;
160 l_end_date		DATE;
161 l_status		VARCHAR2(1);
162 
163 BEGIN
164    	IF PG_DEBUG in ('Y', 'C') THEN
165    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Batch_Source()+');
166    	END IF;
167 
168 	SELECT 	start_date, end_date, status
169 	INTO	l_start_date, l_end_date, l_status
170 	FROM	RA_BATCH_SOURCES  bs
171 	WHERE  	bs.batch_source_id      =  p_batch_source_id;
172 
173 	/*----------------------------------------------+
174         |  Check the status of the batch source		|
175         +-----------------------------------------------*/
176 
177 	IF	(l_status 	<>	'A')
178 	THEN
179 		IF PG_DEBUG in ('Y', 'C') THEN
180 		   arp_util.debug ('Validate_Batch_Source: ' || '>>>>>>>>>> The Batch Source is inactive');
181 		   arp_util.debug ('Validate_Batch_Source: ' || 'p_batch_source_id = ' || p_batch_source_id);
182 		   arp_util.debug ('Validate_Batch_Source: ' || 'p_issue_date	   = ' || p_issue_date);
183 		   arp_util.debug ('Validate_Batch_Source: ' || 'status            = ' || l_status);
184 		END IF;
185 		FND_MESSAGE.SET_NAME ('AR', 'AR_BR_INACTIVE_BATCH_SOURCE');
186 		app_exception.raise_exception;
187 	END IF;
188 
189 
190 	/*----------------------------------------------+
191         |  Check the batch source is valid at the issue	|
192 	|  date						|
193         +-----------------------------------------------*/
194 
195 	IF	(p_issue_date 	NOT BETWEEN nvl (l_start_date, p_issue_date)
196 					AND nvl (l_end_date  , p_issue_date))
197 	THEN
198 		IF PG_DEBUG in ('Y', 'C') THEN
199 		   arp_util.debug ('Validate_Batch_Source: ' || '>>>>>>>>>> The Batch Source is not valid at the Issue Date');
200 		   arp_util.debug('Validate_Batch_Source: ' || 'p_batch_source_id = ' || p_batch_source_id);
201 		   arp_util.debug('Validate_Batch_Source: ' || 'p_issue_date	  = ' || p_issue_date);
202 		   arp_util.debug('Validate_Batch_Source: ' || 'start_date        = ' || l_start_date);
203 		   arp_util.debug('Validate_Batch_Source: ' || 'end_date          = ' || l_end_date);
204 		END IF;
205 		FND_MESSAGE.SET_NAME ('AR', 'AR_BR_BAD_DATE_SOURCE');
206 		app_exception.raise_exception;
207 	END IF;
208 
209 
210    	IF PG_DEBUG in ('Y', 'C') THEN
211    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Batch_Source()-');
212    	END IF;
213 
214 EXCEPTION
215     	WHEN NO_DATA_FOUND THEN
216 		IF PG_DEBUG in ('Y', 'C') THEN
217 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Batch_Source() ');
218 	      	   arp_util.debug('Validate_Batch_Source: ' || '>>>>>>>>>> Invalid Batch Source');
219 		   arp_util.debug('Validate_Batch_Source: ' || '           p_batch_source_id = ' || p_batch_source_id);
220 		   arp_util.debug('Validate_Batch_Source: ' || '           p_issue_date	     = ' || p_issue_date);
221 		END IF;
222 		FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_BATCH_SOURCE');
223   	   	app_exception.raise_exception;
224 
225 	WHEN OTHERS THEN
226 		IF PG_DEBUG in ('Y', 'C') THEN
227 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Batch_Source() ');
228 		   arp_util.debug('Validate_Batch_Source: ' || '           p_batch_source_id = ' || p_batch_source_id);
229 		   arp_util.debug('Validate_Batch_Source: ' || '           p_issue_date	     = ' || p_issue_date);
230 		END IF;
231 		RAISE;
232 
233 END Validate_Batch_Source;
234 
235 
236 
237 
238 /*==============================================================================+
239  | PROCEDURE                                                                 	|
240  |    Validate_Transaction_Type		                                     	|
241  |                                                                           	|
242  | DESCRIPTION                                                              	|
243  |    Validates the Transaction Type Identifier, the status and the Type (BR)	|
244  |									     	|
245  +=============================================================================*/
246 
247 PROCEDURE Validate_Transaction_Type (p_cust_trx_type_id		IN  	NUMBER	,
248 				     p_issue_date		IN	DATE	)
249 IS
250 
251 l_start_date		DATE;
252 l_end_date		DATE;
253 l_status		VARCHAR2(1);
254 
255 
256 BEGIN
257 
258    	IF PG_DEBUG in ('Y', 'C') THEN
259    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Transaction_Type()+');
260    	END IF;
261 
262 	SELECT  status, start_date, end_date
263 	INTO	l_status, l_start_date, l_end_date
264 	FROM	RA_CUST_TRX_TYPES
265 	WHERE  	cust_trx_type_id      	=  p_cust_trx_type_id
266 	AND	TYPE			=  'BR';
267 
268 
269 	/*----------------------------------------------+
270         |  Check the status of the transaction type	|
271         +-----------------------------------------------*/
272 
273 	IF	(l_status 	<>	'A')
274 	THEN
275 		IF PG_DEBUG in ('Y', 'C') THEN
276 		   arp_util.debug ('Validate_Transaction_Type: ' || '>>>>>>>>>> The Transaction Type is inactive');
277 		   arp_util.debug ('Validate_Transaction_Type: ' || 'p_cust_trx_type_id = ' || p_cust_trx_type_id);
278 		   arp_util.debug ('Validate_Transaction_Type: ' || 'p_issue_date	    = ' || p_issue_date);
279 		   arp_util.debug ('Validate_Transaction_Type: ' || 'status             = ' || l_status);
280 		END IF;
281 		FND_MESSAGE.SET_NAME ('AR', 'AR_BR_INACTIVE_TRX_TYPE');
282 		app_exception.raise_exception;
283 	END IF;
284 
285 
286 	/*----------------------------------------------+
287         |  Check the transaction type is valid at the	|
288 	|  Issue Date					|
289         +-----------------------------------------------*/
290 
291 	IF	(p_issue_date 	NOT BETWEEN l_start_date
292 					AND nvl (l_end_date  , p_issue_date))
293 	THEN
294 		IF PG_DEBUG in ('Y', 'C') THEN
295 		   arp_util.debug ('Validate_Transaction_Type: ' || '>>>>>>>>>> The Transaction Type is not valid at the Issue Date');
296 		   arp_util.debug ('Validate_Transaction_Type: ' || 'p_cust_trx_type_id = ' || p_cust_trx_type_id);
297 		   arp_util.debug ('Validate_Transaction_Type: ' || 'p_issue_date	    = ' || p_issue_date);
298 		   arp_util.debug ('Validate_Transaction_Type: ' || 'start_date         = ' || l_start_date);
299 		   arp_util.debug ('Validate_Transaction_Type: ' || 'end_date           = ' || l_end_date);
300 		END IF;
301 		FND_MESSAGE.SET_NAME ('AR', 'AR_BR_BAD_DATE_TRX_TYPE');
302 		app_exception.raise_exception;
303 	END IF;
304 
305 	IF PG_DEBUG in ('Y', 'C') THEN
306 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Transaction_Type()-');
307 	END IF;
308 
309 EXCEPTION
310     	WHEN   NO_DATA_FOUND THEN
311 		IF PG_DEBUG in ('Y', 'C') THEN
312 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Transaction_Type() ');
313       		   arp_util.debug('Validate_Transaction_Type: ' || '>>>>>>>>>> Invalid Transaction Type');
314 		   arp_util.debug('Validate_Transaction_Type: ' || '           p_cust_trx_type_id = ' || p_cust_trx_type_id);
315 		   arp_util.debug('Validate_Transaction_Type: ' || '           p_issue_date	      = ' || p_issue_date);
316 		END IF;
317 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_TRX_TYPE');
318 		app_exception.raise_exception;
319 
320 	WHEN OTHERS THEN
321 		IF PG_DEBUG in ('Y', 'C') THEN
322 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Transaction_Type() ');
323 		   arp_util.debug('Validate_Transaction_Type: ' || '           p_cust_trx_type_id = ' || p_cust_trx_type_id);
324 		   arp_util.debug('Validate_Transaction_Type: ' || '           p_issue_date	      = ' || p_issue_date);
325 		END IF;
326 		RAISE;
327 
328 END Validate_Transaction_Type;
329 
330 
331 
332 /*==============================================================================+
333  | PROCEDURE                                                                 	|
334  |    Validate_Drawee			                                     	|
335  |                                                                           	|
336  | DESCRIPTION                                                              	|
337  |    Validates that the Drawee exists					     	|
338  |                                                                           	|
339  +==============================================================================*/
340 
341 PROCEDURE Validate_Drawee (p_drawee_id 	IN  NUMBER) IS
342 
343 l_drawee_valid	VARCHAR2(1);
344 
345 BEGIN
346    	IF PG_DEBUG in ('Y', 'C') THEN
347    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee ()+');
348    	END IF;
349 
350         /* modified for tca uptake */
351 	SELECT 'Y'
352 	INTO	l_drawee_valid
353 	FROM	HZ_CUST_ACCOUNTS
354 	WHERE  	cust_account_id    	=  p_drawee_id;
355 
356    	IF PG_DEBUG in ('Y', 'C') THEN
357    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee ()-');
358    	END IF;
359 
360 EXCEPTION
361     	WHEN NO_DATA_FOUND THEN
362 		IF PG_DEBUG in ('Y', 'C') THEN
363 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee () ');
364       	   	   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Invalid Drawee');
365 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_id = ' || p_drawee_id);
366 		END IF;
367 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_DRAWEE');
368 	   	app_exception.raise_exception;
369 
370     	WHEN OTHERS THEN
371 		IF PG_DEBUG in ('Y', 'C') THEN
372 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee () ');
373 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_id = ' || p_drawee_id);
374 		END IF;
375 		RAISE;
376 
377 
378 END Validate_Drawee;
379 
380 
381 
382 /*==============================================================================+
383  | PROCEDURE                                                                 	|
384  |    Validate_Drawee_Location		                                     	|
385  |                                                                           	|
386  | DESCRIPTION                                                              	|
387  |    Validates that the Drawee Location is Active			     	|
388  |                                                                           	|
389  +==============================================================================*/
390 
391 PROCEDURE Validate_Drawee_Location (p_drawee_site_use_id	IN  NUMBER) IS
392 
393 l_status		VARCHAR2(1);
394 
395 BEGIN
396    	IF PG_DEBUG in ('Y', 'C') THEN
397    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Location ()+');
398    	END IF;
399 
400 	IF (p_drawee_site_use_id IS NOT NULL)
401 	THEN
402                 /* modified for tca uptake */
403 		SELECT  STATUS
404 		INTO	l_status
405 		FROM	HZ_CUST_SITE_USES
406 		WHERE  	site_use_id    	=  p_drawee_site_use_id
407 		AND	SITE_USE_CODE	=  'DRAWEE';
408 
409 		/*----------------------------------------------+
410 	        |  Check that the Drawee Location is active	|
411 	        +-----------------------------------------------*/
412 
413 		IF  (l_status <> 'A')
414 		THEN
415       	   	    IF PG_DEBUG in ('Y', 'C') THEN
416       	   	       arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Drawee Location Inactive');
417       	   	    END IF;
418 	   	    FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INACTIVE_DRAWEE_SITE');
419 	   	    app_exception.raise_exception;
420 		END IF;
421 	END IF;
422 
423    	IF PG_DEBUG in ('Y', 'C') THEN
424    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Location ()-');
425    	END IF;
426 
427 EXCEPTION
428     	WHEN NO_DATA_FOUND THEN
429 		IF PG_DEBUG in ('Y', 'C') THEN
430 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Location () ');
431       	   	   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Invalid Location');
432 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_site_use_id = ' || p_drawee_site_use_id);
433 		END IF;
434 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_DRAWEE_SITE');
435 	   	app_exception.raise_exception;
436 
437     	WHEN OTHERS THEN
438 		IF PG_DEBUG in ('Y', 'C') THEN
439 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Location () ');
440 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_site_use_id = ' || p_drawee_site_use_id);
441 		END IF;
442 		RAISE;
443 
444 END Validate_Drawee_Location;
445 
446 
447 
448 /*==============================================================================+
449  | PROCEDURE                                                                 	|
450  |    Validate_Drawee_Contact			                               	|
451  |                                                                           	|
452  | DESCRIPTION                                                              	|
453  |    Validates that the Drawee Contact is Active			     	|
454  |                                                                           	|
455  +==============================================================================*/
456 
457 PROCEDURE Validate_Drawee_Contact (p_drawee_contact_id 	IN  NUMBER	,
458 				   p_drawee_id		IN  NUMBER	) IS
459 
460 l_status	VARCHAR2(1);
461 
462 BEGIN
463    	IF PG_DEBUG in ('Y', 'C') THEN
464    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Contact ()+');
465    	END IF;
466 
467 	IF (p_drawee_contact_id IS NOT NULL)
468 	THEN
469                 /* modified for tca uptake */
470                 /* fixed bug 1883538: use status instead of
471                    current role state */
472                 SELECT  status
473 		INTO	l_status
474 		FROM	hz_cust_account_roles
475 		WHERE  	cust_account_role_id =  p_drawee_contact_id
476 		AND	cust_account_id	=  p_drawee_id;
477 
478 		IF  (l_status <> 'A')
479 		THEN
480       	   	    IF PG_DEBUG in ('Y', 'C') THEN
481       	   	       arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Drawee Contact Inactive');
482       	   	    END IF;
483 	   	    FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INACTIVE_DRAWEE_CONTACT');
484 	   	    app_exception.raise_exception;
485 		END IF;
486 
487 	END IF;
488 
489    	IF PG_DEBUG in ('Y', 'C') THEN
490    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Contact ()-');
491    	END IF;
492 
493 EXCEPTION
494     	WHEN NO_DATA_FOUND THEN
495 		IF PG_DEBUG in ('Y', 'C') THEN
496 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Contact () ');
497       	   	   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Invalid Contact');
498 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_contact_id = ' || p_drawee_contact_id);
499 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_id         = ' || p_drawee_id);
500 		END IF;
501 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_DRAWEE_CONTACT');
502 	   	app_exception.raise_exception;
503 
504     	WHEN OTHERS THEN
505 		IF PG_DEBUG in ('Y', 'C') THEN
506 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Contact () ');
507 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_contact_id = ' || p_drawee_contact_id);
508 		   arp_util.debug('Validate_Drawee: ' || '           p_drawee_id         = ' || p_drawee_id);
509 		END IF;
510 		RAISE;
511 
512 END Validate_Drawee_Contact;
513 
514 
515 
516 /*==============================================================================+
517  | PROCEDURE                                                                 	|
518  |    Validate_Currency			                                     	|
519  |                                                                           	|
520  | DESCRIPTION                                                              	|
521  |    Validates that the Currency is Active at the Issue Date		     	|
522  |                                                                           	|
523  +==============================================================================*/
524 
525 PROCEDURE Validate_Currency ( 	p_invoice_currency_code	IN  	VARCHAR2,
526 				p_issue_date		IN	DATE	) IS
527 
528 l_start_date		DATE;
529 l_end_date		DATE;
530 
531 BEGIN
532    	IF PG_DEBUG in ('Y', 'C') THEN
533    	   arp_util.debug('Validate_Drawee: ' || 'AR_BILLS_CREATION_VAL_PVT.Validate_Currency ()+');
534    	END IF;
535 
536 	SELECT  start_date_active, end_date_active
537 	INTO	l_start_date     , l_end_date
538 	FROM	FND_CURRENCIES_VL
539 	WHERE  	currency_code  	=  p_invoice_currency_code
540 	AND	enabled_flag	=	'Y';
541 
542 
543 	/*----------------------------------------------+
544         |  Check the currency is valid at the issue	|
545 	|  date						|
546         +-----------------------------------------------*/
547 
548 	IF	(p_issue_date	NOT BETWEEN	nvl(l_start_date, p_issue_date)
549 				AND		nvl(l_end_date, p_issue_date))
550 	THEN
551 		IF PG_DEBUG in ('Y', 'C') THEN
552 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Currency Invalid with Issue Date');
553 		   arp_util.debug('Validate_Drawee: ' || 'Issue Date : ' || p_issue_date);
554 		   arp_util.debug('Validate_Drawee: ' || 'Currency   : ' || p_invoice_currency_code);
555 		END IF;
556 		FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_BAD_DATE_CURRENCY');
557 		app_exception.raise_exception;
558 	END IF;
559 
560 
561    	IF PG_DEBUG in ('Y', 'C') THEN
562    	   arp_util.debug('Validate_Drawee: ' || 'AR_BILLS_CREATION_VAL_PVT.Validate_Currency ()-');
563    	END IF;
564 
565 EXCEPTION
566     	WHEN NO_DATA_FOUND THEN
567 		IF PG_DEBUG in ('Y', 'C') THEN
568 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Currency () ');
569       	   	   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Invalid Currency');
570 		   arp_util.debug('Validate_Drawee: ' || '           p_invoice_currency_code = : ' || p_invoice_currency_code);
571 		   arp_util.debug('Validate_Drawee: ' || '           p_issue_date            = : ' || p_issue_date);
572 		END IF;
573 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_CURRENCY');
574 	   	app_exception.raise_exception;
575 
576 	WHEN OTHERS THEN
577 		IF PG_DEBUG in ('Y', 'C') THEN
578 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Currency () ');
579 		   arp_util.debug('Validate_Drawee: ' || '           p_invoice_currency_code = : ' || p_invoice_currency_code);
580 		   arp_util.debug('Validate_Drawee: ' || '           p_issue_date            = : ' || p_issue_date);
581 		END IF;
582 		RAISE;
583 
584 END Validate_Currency;
585 
586 
587 /*==============================================================================+
588  | PROCEDURE                                                                 	|
589  |    Validate_Printing_Option		                                     	|
590  |                                                                           	|
591  | DESCRIPTION                                                              	|
592  |    Validates that :							    	|
593  |	-  Values allowed are PRI and NOT					|
594  | 	-  Printing is mandatory, if the bill has to be signed			|
595  |	-  If the printing option is set to 'Y', a format must be defined for   |
596  |	   the transaction type							|
597  |                                                                           	|
598  +==============================================================================*/
599 
600 PROCEDURE Validate_Printing_Option  ( p_printing_option		IN  VARCHAR2	,
601 				      p_cust_trx_type_id	IN  NUMBER	) IS
602 
603 l_format_program_id		NUMBER;
604 l_signed_flag			VARCHAR2(1);
605 l_printing_option_valid		VARCHAR2(1);
606 printing_option_invalid		EXCEPTION;
607 
608 BEGIN
609    	IF PG_DEBUG in ('Y', 'C') THEN
610    	   arp_util.debug('Validate_Drawee: ' || 'AR_BILLS_CREATION_VAL_PVT.Validate_Printing_Option ()+');
611    	END IF;
612 
613 
614 	/*----------------------------------------------+
615         |  Validate p_printing_option in ar_lookups	|
616 	|  lookup_type = INVOICE_PRINT_OPTIONS		|
617         +-----------------------------------------------*/
618 
619 	IF	(p_printing_option IS NOT NULL)
620 	THEN
621 	    BEGIN
622 		SELECT	'Y'
623 		INTO	l_printing_option_valid
624 		FROM	AR_LOOKUPS
625 		WHERE	lookup_type 	=	'INVOICE_PRINT_OPTIONS'
626 		AND	lookup_code	=	p_printing_option;
627 
628 		EXCEPTION
629 			WHEN	NO_DATA_FOUND	THEN
630 				RAISE	printing_option_invalid;
631 	    END;
632 	END IF;
633 
634 
635 	/*----------------------------------------------+
636         |  Validate whether printing is mandatory or not|
637         +-----------------------------------------------*/
638 
639 	SELECT	signed_flag  ,  format_program_id
640 	INTO	l_signed_flag,	l_format_program_id
641 	FROM	RA_CUST_TRX_TYPES
642 	WHERE  	cust_trx_type_id  =  p_cust_trx_type_id;
643 
644 	IF PG_DEBUG in ('Y', 'C') THEN
645 	   arp_util.debug('Validate_Drawee: ' || 'Signed Flag     : ' || l_signed_flag);
646 	   arp_util.debug('Validate_Drawee: ' || 'Format Program  : ' || l_format_program_id);
647 	   arp_util.debug('Validate_Drawee: ' || 'Printing Option : ' || p_printing_option);
648 	END IF;
649 
650 	IF  (p_printing_option = 'NOT' and  l_signed_flag = 'Y')
651 	THEN
652 		IF PG_DEBUG in ('Y', 'C') THEN
653 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Printing is mandatory');
654 		END IF;
655        	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_PRINTING_MANDATORY');
656 	   	app_exception.raise_exception;
657 	END IF;
658 
659 
660 	/*----------------------------------------------+
661         |  If printing option is PRI, check that the	|
662 	|  format program is defined			|
663         +-----------------------------------------------*/
664 
665 	IF  (p_printing_option = 'PRI' AND l_format_program_id IS NULL)
666 	THEN
667 		IF PG_DEBUG in ('Y', 'C') THEN
668 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> No format program id');
669 		END IF;
670        	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_NO_PRINT_FORMAT');
671 	   	app_exception.raise_exception;
672 	END IF;
673 
674 	IF PG_DEBUG in ('Y', 'C') THEN
675 	   arp_util.debug('Validate_Drawee: ' || 'AR_BILLS_CREATION_VAL_PVT.Validate_Printing_Option ()-');
676 	END IF;
677 
678 EXCEPTION
679 	WHEN  	printing_option_invalid	  THEN
680 		IF PG_DEBUG in ('Y', 'C') THEN
681 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> Invalid Value for Printing Option');
682       	   	   arp_util.debug('Validate_Drawee: ' || '           Printing Option : ' || p_printing_option);
683       	   	END IF;
684       	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_PROCEDURE_VALID_ARGS_FAIL');
685 		FND_MESSAGE.SET_TOKEN ('PARAMETER', 'Printing Option');
686 		FND_MESSAGE.SET_TOKEN ('PROCEDURE', 'BR CREATION API');
687 	   	app_exception.raise_exception;
688 
689 	WHEN OTHERS THEN
690 		IF PG_DEBUG in ('Y', 'C') THEN
691 		   arp_util.debug('Validate_Drawee: ' || '>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Printing_Option () ');
692 		   arp_util.debug('Validate_Drawee: ' || '           p_printing_option  = ' || p_printing_option);
693 		   arp_util.debug('Validate_Drawee: ' || '           p_cust_trx_type_id = ' || p_cust_trx_type_id);
694 		END IF;
695 		RAISE;
696 
697 END Validate_Printing_Option;
698 
699 
700 
701 /*=============================================================================+
702  | PROCEDURE                                                                   |
703  |    Validate_Drawee_Account	                                     	       |
704  |                                                                             |
705  | DESCRIPTION                                                                 |
706  |    Validates that the Drawee Account :				       |
707  |	-  Belongs to the Drawee					       |
708  |	-  Is Active at the Issue Date				               |
709  |                                                                             |
710  | History								       |
711  | Date		Name		Description				       |
712  | 02-May-01	Debbie Jancis	Added History Section and modified how the     |
713  |				account is validated because bank account      |
714  |			 	uses will only be linked to bill to buisness   |
715  |				purposes.				       |
716  | 24-May-01	Debbie Jancis   Fixed bug 1798699:  changed all selects to     |
717  |				verify bank account information with issue     |
718  |                              instead of trying to select dates and then     |
719  |                              verify because customer setup allows multiple  |
720  |                              usage records with different dates.  This      |
721  |                              causes too many rows to be selected.           |
722  +============================================================================*/
723 
724 PROCEDURE Validate_Drawee_Account (	p_drawee_bank_account_id IN  VARCHAR2	,
725 			     		p_drawee_id		 IN  NUMBER	,
726 					p_drawee_site_use_id	 IN  NUMBER	,
727 					p_issue_date		 IN  DATE	) IS
728 
729 l_start_date		DATE;
730 l_end_date		DATE;
731 l_bill_site_use_id      NUMBER;
732 l_bank_ok               NUMBER;   /* bug 1798699 */
733 
734 BEGIN
735    	IF PG_DEBUG in ('Y', 'C') THEN
736    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Account ()+');
737    	END IF;
738 
739         /* bug 1758982:  Unable to create Manual BR when customer has
740            more then 1 drawee site with same bank account assigned */
741 
742        /* PAYMENT_UPTAKE: Removed validation bcoz Drawee_bank_account_id is obsoleted */
743 
744  	IF PG_DEBUG in ('Y', 'C') THEN
745  	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Drawee_Account ()-');
746  	END IF;
747 
748 END Validate_Drawee_Account;
749 
750 
751 
752 
753 /*==============================================================================+
754  | PROCEDURE                                                                 	|
755  |    Validate_Remit_Account		                                     	|
756  |                                                                           	|
757  | DESCRIPTION                                                              	|
758  |    Validates that the Remittance Account :				     	|
759  |	-  Is Internal								|
760  |	-  Is of the same currency as the BR or is a multi-currency account	|
761  |	-  Is valid at the Issue Date						|
762  |                                                                           	|
763  +==============================================================================*/
764 
765 PROCEDURE validate_remit_account (p_remit_bank_account_id IN VARCHAR2,
766                                   p_invoice_currency_code IN VARCHAR2,
767   				  p_issue_date		  IN DATE) IS
768 
769 
770   -- Substitued a cursor for a direct select.  Because of the CBA project
771   -- we should now assume that all remit_bank_account_id columns/variables
772   -- contain the use ids.
773   --
774   -- ORASHID 22-OCT-2003
775 
776   /* Bug 3285863 Selecting receipt_multi_currency_flag rather than
777      multi_currency_allowed_flag. */
778 
779   CURSOR c IS
780     SELECT cba.currency_code,
781            cba.receipt_multi_currency_flag receipt_multi_currency_flag,
782            cbau.end_date inactive_date
783     FROM   ce_bank_accounts cba,
784            ce_bank_acct_uses cbau
785     WHERE  cbau.bank_acct_use_id = p_remit_bank_account_id
786     AND    cbau.bank_account_id = cba.bank_account_id
787     AND    cba.account_classification = 'INTERNAL';
788 
789 
790   l_receipt_multi_currency_flag	 VARCHAR2(1);
791   l_currency_code	 VARCHAR2(15);
792   l_inactive_date	 DATE;
793 
794 BEGIN
795 
796   IF pg_debug IN ('Y', 'C') THEN
797     arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Remit_Account ()+');
798   END IF;
799 
800   IF (p_remit_bank_account_id IS NOT NULL) THEN
801 
802     OPEN c;
803     FETCH c INTO l_currency_code, l_receipt_multi_currency_flag, l_inactive_date;
804     CLOSE c;
805 
806     /*----------------------------------------------+
807      |  Validate that the remittance account is of  |
808      |  the same currency as the BR or is a         |
809      |  multi-currency account			    |
810      +----------------------------------------------*/
811 
812     IF (l_currency_code <> p_invoice_currency_code) AND
813        (l_receipt_multi_currency_flag	<>  'Y') THEN
814 
815       IF PG_DEBUG in ('Y', 'C') THEN
816         arp_util.debug('Validate_Remit_Account: ' ||
817           '>>>>>>>>>> Remittance Account invalid Currency');
818         arp_util.debug('Validate_Remit_Account: ' ||
819          '           remit bank account use id : ' || p_remit_bank_account_id);
820         arp_util.debug('Validate_Remit_Account: ' ||
821          '           BR Currency               : ' || p_invoice_currency_code);
822         arp_util.debug('Validate_Remit_Account: ' ||
823          '           Remit Account Currency    : ' || l_currency_code);
824         arp_util.debug('Validate_Remit_Account: ' ||
825          '           Multi Currency Flag       : ' || l_receipt_multi_currency_flag);
826       END IF;
827 
828       fnd_message.set_name ('AR', 'AR_BR_INVALID_REMIT_CURRENCY');
829       app_exception.raise_exception;
830 
831     END IF;
832 
833 
834    /*------------------------------------------------+
835     |  Validate that the remittance account is valid |
836     |  at the issue date			            |
837     +------------------------------------------------*/
838 
839     IF (p_issue_date NOT BETWEEN p_issue_date AND
840         NVL(l_inactive_date , p_issue_date)) THEN
841 
842       IF PG_DEBUG in ('Y', 'C') THEN
843         arp_util.debug('>>>>>>>>>> EXCEPTION : Validate_Remit_Account () ');
844         arp_util.debug('Validate_Remit_Account: ' ||
845           '>>>>>>>>>> Remittance Account invalid with Issue Date');
846         arp_util.debug('Validate_Remit_Account: ' ||
847           '           p_issue_date              : ' || p_issue_date);
848         arp_util.debug('Validate_Remit_Account: ' ||
849           '           remit bank account use id : ' ||
850           p_remit_bank_account_id);
851       END IF;
852 
853       fnd_message.set_name('AR', 'AR_BR_BAD_DATE_REMIT_ACCOUNT');
854       app_exception.raise_exception;
855 
856     END IF;
857 
858   END IF;
859 
860   IF pg_debug IN ('Y', 'C') THEN
861     arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Remit_Account ()-');
862   END IF;
863 
864 EXCEPTION
865   WHEN NO_DATA_FOUND THEN
866     IF pg_debug IN ('Y', 'C') THEN
867       arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Remit_Account () ');
868       arp_util.debug('Validate_Remit_Account: ' || '>>>>>>>>>> Invalid Remittance Account');
869       arp_util.debug('Validate_Remit_Account: ' || '           remit bank account use id  = ' || p_remit_bank_account_id);
870       arp_util.debug('Validate_Remit_Account: ' || '           p_invoice_currency_code   = ' || p_invoice_currency_code);
871       arp_util.debug('Validate_Remit_Account: ' || '           p_issue_date              = ' || p_issue_date);
872     END IF;
873 
874     fnd_message.set_name('AR', 'AR_BR_INVALID_REMIT_ACCOUNT');
875     app_exception.raise_exception;
876 
877   WHEN OTHERS THEN
878     IF pg_debug IN ('Y', 'C') THEN
879       arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Remit_Account () ');
880       arp_util.debug('Validate_Remit_Account: ' || '           remit bank account use id = ' || p_remit_bank_account_id);
881       arp_util.debug('Validate_Remit_Account: ' || '           p_invoice_currency_code   = ' || p_invoice_currency_code);
882       arp_util.debug('Validate_Remit_Account: ' || '           p_issue_date              = ' || p_issue_date);
883     END IF;
884     RAISE;
885 
886 END validate_remit_account;
887 
888 
889 
890 /*==============================================================================+
891  | PROCEDURE                                                                 	|
892  |    Validate_Override_Flag		                                     	|
893  |                                                                           	|
894  | DESCRIPTION                                                              	|
895  |    Validates the value of the Override_Remit_Account_Flag : 'Y' or 'N'	|
896  |										|
897  |                                                                           	|
898  +==============================================================================*/
899 
900 PROCEDURE Validate_Override_Flag  (   p_override_remit_account_flag IN  VARCHAR2) IS
901 
902 BEGIN
903    	IF PG_DEBUG in ('Y', 'C') THEN
904    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Override_Flag ()+');
905    	END IF;
906 
907 	IF  p_override_remit_account_flag  NOT IN ('Y', 'N')
908 	THEN
909 		IF PG_DEBUG in ('Y', 'C') THEN
910 		   arp_util.debug('Validate_Override_Flag: ' || '>>>>>>>>>> Invalid Value for the Override Remit Account Flag');
911       	   	   arp_util.debug('Validate_Override_Flag: ' || 'Override remit account flag : ' || p_override_remit_account_flag);
912       	   	END IF;
913       	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_PROCEDURE_VALID_ARGS_FAIL');
914 		FND_MESSAGE.SET_TOKEN ('PARAMETER', 'Override Remittance Flag');
915 		FND_MESSAGE.SET_TOKEN ('PROCEDURE', 'BR CREATION API');
916 	   	app_exception.raise_exception;
917 	END IF;
918 
919 	IF PG_DEBUG in ('Y', 'C') THEN
920 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Override_Flag ()-');
921 	END IF;
922 
923 EXCEPTION
924 	WHEN OTHERS THEN
925 		IF PG_DEBUG in ('Y', 'C') THEN
926 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Override_Flag () ');
927 		   arp_util.debug('Validate_Override_Flag: ' || '           p_override_remit_account_flag   = ' || p_override_remit_account_flag);
928 		END IF;
929 		app_exception.raise_exception;
930 
931 END Validate_Override_Flag;
932 
933 
934 /*==============================================================================+
935  | PROCEDURE                                                                 	|
936  |    Validate_Batch_ID			                                     	|
937  |                                                                           	|
938  | DESCRIPTION                                                              	|
939  |    Validates the Batch Identifier and the status				|
940  |                                                                           	|
941  +==============================================================================*/
942 
943 PROCEDURE Validate_Batch_ID    (p_batch_id IN  NUMBER) IS
944 
945 
946 l_batch_id_valid	VARCHAR2(1);
947 
948 BEGIN
949    	IF PG_DEBUG in ('Y', 'C') THEN
950    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Batch_ID ()+');
951    	END IF;
952 
953 	IF  (p_batch_id IS NOT NULL)
954 	THEN
955 		SELECT 	'Y'
956 		INTO	l_batch_id_valid
957 		FROM 	RA_BATCHES
958 		WHERE	batch_id	=	p_batch_id
959 		AND	status		=	'A';
960 	END IF;
961 
962 	IF PG_DEBUG in ('Y', 'C') THEN
963 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Batch_ID ()-');
964 	END IF;
965 
966 EXCEPTION
967     	WHEN NO_DATA_FOUND THEN
968 		IF PG_DEBUG in ('Y', 'C') THEN
969 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Batch_ID () ');
970       	   	   arp_util.debug('Validate_Batch_ID: ' || '>>>>>>>>>> Invalid Batch ID');
971  	   	   arp_util.debug('Validate_Batch_ID: ' || '           p_batch_id   = ' || p_batch_id);
972  	   	END IF;
973 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_BATCH_ID');
974 	   	app_exception.raise_exception;
975 
976 	WHEN OTHERS THEN
977 		IF PG_DEBUG in ('Y', 'C') THEN
978 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Batch_ID () ');
979 		   arp_util.debug('Validate_Batch_ID: ' || '           p_batch_id   = ' || p_batch_id);
980 		END IF;
981 		RAISE;
982 
983 END Validate_Batch_ID;
984 
985 
986 
987 /*==============================================================================+
988  | PROCEDURE                                                                 	|
989  |    Validate_Customer_Trx_ID			                               	|
990  |                                                                           	|
991  | DESCRIPTION                                                              	|
992  |    Validates the BR Identifier						|
993  |                                                                           	|
994  +==============================================================================*/
995 
996 PROCEDURE Validate_Customer_Trx_ID    ( p_customer_trx_id	IN  NUMBER) IS
997 
998 
999 l_customer_trx_id_valid		VARCHAR2(1);
1000 
1001 BEGIN
1002    	IF PG_DEBUG in ('Y', 'C') THEN
1003    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_ID ()+');
1004    	END IF;
1005 
1006 	SELECT 	'Y'
1007 	INTO	l_customer_trx_id_valid
1008 	FROM 	RA_CUSTOMER_TRX
1009 	WHERE	customer_trx_id	 =  p_customer_trx_id;
1010 
1011 	IF PG_DEBUG in ('Y', 'C') THEN
1012 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_ID ()-');
1013 	END IF;
1014 
1015 EXCEPTION
1016     	WHEN NO_DATA_FOUND THEN
1017 		IF PG_DEBUG in ('Y', 'C') THEN
1018 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_ID () ');
1019       	   	   arp_util.debug('Validate_Customer_Trx_ID: ' || '>>>>>>>>>> Invalid BR ID');
1020  	   	   arp_util.debug('Validate_Customer_Trx_ID: ' || '           Customer Trx ID  : ' || p_customer_trx_id);
1021  	   	END IF;
1022 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_BR_ID');
1023 	   	app_exception.raise_exception;
1024 
1025 	WHEN OTHERS THEN
1026 		IF PG_DEBUG in ('Y', 'C') THEN
1027 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_ID () ');
1028 		   arp_util.debug('Validate_Customer_Trx_ID: ' || '           p_customer_trx_id   = ' || p_customer_trx_id);
1029 		END IF;
1030 		RAISE;
1031 
1032 END Validate_Customer_Trx_ID;
1033 
1034 
1035 /*==============================================================================+
1036  | PROCEDURE                                                                 	|
1037  |    Validate_Customer_Trx_Line_ID			                        |
1038  |                                                                           	|
1039  | DESCRIPTION                                                              	|
1040  |    Validates the BR Line Identifier						|
1041  |                                                                           	|
1042  +==============================================================================*/
1043 
1044 PROCEDURE Validate_Customer_Trx_Line_ID    ( p_customer_trx_line_id	IN  NUMBER) IS
1045 
1046 
1047 l_valid		VARCHAR2(1);
1048 
1049 BEGIN
1050    	IF PG_DEBUG in ('Y', 'C') THEN
1051    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_Line_ID ()+');
1052    	END IF;
1053 
1054 	SELECT 	'Y'
1055 	INTO	l_valid
1056 	FROM 	RA_CUSTOMER_TRX_LINES
1057 	WHERE	customer_trx_line_id	 =  p_customer_trx_line_id;
1058 
1059 	IF PG_DEBUG in ('Y', 'C') THEN
1060 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_Line_ID ()-');
1061 	END IF;
1062 
1063 EXCEPTION
1064     	WHEN NO_DATA_FOUND THEN
1065 		IF PG_DEBUG in ('Y', 'C') THEN
1066 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_Line_ID () ');
1067       	   	   arp_util.debug('Validate_Customer_Trx_Line_ID: ' || '>>>>>>>>>> Invalid BR Assignment ID');
1068  	   	   arp_util.debug('Validate_Customer_Trx_Line_ID: ' || '           p_customer_trx_line_id   = ' || p_customer_trx_line_id);
1069  	   	END IF;
1070 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_ASSIGNMENT_ID');
1071 	   	app_exception.raise_exception;
1072 
1073 	WHEN OTHERS THEN
1074 		IF PG_DEBUG in ('Y', 'C') THEN
1075 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Customer_Trx_Line_ID () ');
1076 		   arp_util.debug('Validate_Customer_Trx_Line_ID: ' || '           p_customer_trx_line_id   = ' || p_customer_trx_line_id);
1077 		END IF;
1078 		RAISE;
1079 
1080 END Validate_Customer_Trx_Line_ID;
1081 
1082 
1083 
1084 /*==============================================================================+
1085  | PROCEDURE                                                                 	|
1086  |    Validate_Create_BR_Header			                                |
1087  |                                                                           	|
1088  | DESCRIPTION                                                              	|
1089  |    Validates the BR Header Information before insertion		     	|
1090  |                                                                           	|
1091  +==============================================================================*/
1092 
1093 
1094 PROCEDURE  Validate_Create_BR_Header  (
1095 		p_trx_rec		IN	ra_customer_trx%ROWTYPE	,
1096 		p_gl_date		IN	DATE			)
1097 IS
1098 
1099 BEGIN
1100 
1101 	IF PG_DEBUG in ('Y', 'C') THEN
1102 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Create_BR_Header ()+');
1103 	END IF;
1104 
1105 
1106     --  Validate GL Date
1107 
1108 	Validate_GL_Date (p_gl_date);
1109 
1110 
1111 
1112     --  Validate Batch Source
1113 
1114 	Validate_Batch_Source (p_trx_rec.batch_source_id, p_trx_rec.trx_date);
1115 
1116 
1117     --  Validate Transaction Type
1118 
1119 	Validate_Transaction_Type (p_trx_rec.cust_trx_type_id, p_trx_rec.trx_date);
1120 
1121 
1122     --  Validate Drawee ID
1123 
1124 	Validate_Drawee (p_trx_rec.drawee_id);
1125 
1126     --  Validate Drawee Location
1127 
1128 	Validate_Drawee_Location (p_trx_rec.drawee_site_use_id);
1129 
1130     --  Validate Drawee Contact
1131 
1132 	Validate_Drawee_Contact (p_trx_rec.drawee_contact_id, p_trx_rec.drawee_id);
1133 
1134 
1135     --  Validate Currency
1136 
1137 	Validate_Currency (p_trx_rec.invoice_currency_code, p_trx_rec.trx_date);
1138 
1139 
1140     --  Validate Printing Option
1141 
1142 	Validate_Printing_Option (p_trx_rec.printing_option, p_trx_rec.cust_trx_type_id);
1143 
1144 
1145     --  Validate Remittance Bank Account Id
1146 
1147 	Validate_Remit_Account (
1148 		p_trx_rec.remit_bank_acct_use_id	,
1149 		p_trx_rec.invoice_currency_code		,
1150 		p_trx_rec.trx_date			);
1151 
1152 
1153     --  Validate the Override Remit Account Flag
1154 
1155 	Validate_Override_Flag (p_trx_rec.override_remit_account_flag);
1156 
1157 
1158     --  Validate the Batch ID
1159 
1160 	Validate_Batch_ID (p_trx_rec.batch_id);
1161 
1162  	IF PG_DEBUG in ('Y', 'C') THEN
1163  	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Create_BR_Header ()-');
1164  	END IF;
1165 
1166 EXCEPTION
1167 	WHEN Others THEN
1168 		IF PG_DEBUG in ('Y', 'C') THEN
1169 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Create_BR_Header () ');
1170 		END IF;
1171 		RAISE;
1172 
1173 END Validate_Create_BR_Header;
1174 
1175 
1176 /*==============================================================================+
1177  | PROCEDURE                                                                 	|
1178  |    Validate_Update_BR_Header			                                |
1179  |                                                                           	|
1180  | DESCRIPTION                                                              	|
1181  |    Validates the BR Header Information before update			     	|
1182  |                                                                           	|
1183  +==============================================================================*/
1184 
1185 
1186 PROCEDURE  Validate_Update_BR_Header  (
1187 		p_trx_rec			IN	ra_customer_trx%ROWTYPE	,
1188 		p_gl_date			IN	DATE			)
1189 
1190 IS
1191 
1192 BEGIN
1193 
1194 	IF PG_DEBUG in ('Y', 'C') THEN
1195 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Update_BR_Header ()+');
1196 	END IF;
1197 
1198     --  Validate GL Date
1199 
1200 	Validate_GL_Date (p_gl_date);
1201 
1202 
1203     --	Validate Update of Maturity_Date
1204 
1205 	Validate_Update_Maturity_Date  (p_trx_rec.customer_trx_id	,
1206 				 	p_trx_rec.term_due_date		);
1207 
1208 
1209     --  Validate Transaction Type
1210 
1211 	Validate_Transaction_Type (p_trx_rec.cust_trx_type_id, p_trx_rec.trx_date);
1212 
1213 
1214     --  Validate Drawee ID
1215 
1216 	Validate_Drawee (p_trx_rec.drawee_id);
1217 
1218 
1219     --  Validate Drawee Location
1220 
1221 	Validate_Drawee_Location (p_trx_rec.drawee_site_use_id);
1222 
1223 
1224     --  Validate Drawee Contact
1225 
1226 	Validate_Drawee_Contact (p_trx_rec.drawee_contact_id, p_trx_rec.drawee_id);
1227 
1228 
1229     --  Validate Currency
1230 
1231 	Validate_Currency (p_trx_rec.invoice_currency_code, p_trx_rec.trx_date);
1232 
1233 
1234     --  Validate Printing Option
1235 
1236 	Validate_Printing_Option (p_trx_rec.printing_option	,
1237 				  p_trx_rec.cust_trx_type_id	);
1238 
1239 
1240     --  Validate Remittance Bank Account Id
1241 
1242 	Validate_Remit_Account (
1243 		p_trx_rec.remit_bank_acct_use_id	,
1244 		p_trx_rec.invoice_currency_code		,
1245 		p_trx_rec.trx_date			);
1246 
1247 
1248     --  Validate the Override Remit Account Flag
1249 
1250 	Validate_Override_Flag (p_trx_rec.override_remit_account_flag);
1251 
1252   	IF PG_DEBUG in ('Y', 'C') THEN
1253   	   arp_util.debug('Validate_Update_BR_Header: ' || 'AR_BILLS_CREATION_VAL_PVT.Validate_BR_Update_Header ()-');
1254   	END IF;
1255 
1256 
1257 EXCEPTION
1258 	WHEN Others THEN
1259 		IF PG_DEBUG in ('Y', 'C') THEN
1260 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Update_BR_Header () ');
1261 		END IF;
1262 		RAISE;
1263 
1264 END Validate_Update_BR_Header;
1265 
1266 
1267 
1268 /*==============================================================================+
1269  | PROCEDURE                                                                 	|
1270  |    Validate_Assigned_Amount		                                     	|
1271  |                                                                           	|
1272  | DESCRIPTION                                                              	|
1273  |    -  Validates that the transaction is not exchanged for more than its full |
1274  |       amount 								|
1275  |    -  Calculates the accounted assigned amount				|
1276  |                                                                           	|
1277  +==============================================================================*/
1278 
1279 PROCEDURE Validate_Assigned_Amount  ( p_trl_rec		IN  OUT NOCOPY	ra_customer_trx_lines%ROWTYPE	,
1280 				      p_ps_rec		IN  	ar_payment_schedules%ROWTYPE	) IS
1281 
1282 
1283 l_exchange_rate			NUMBER;
1284 l_functional_currency		VARCHAR2(15);
1285 l_acctd_amount			NUMBER;
1286 l_new_ADR			NUMBER;
1287 l_new_acctd_ADR			NUMBER;
1288 l_ADR				NUMBER;
1289 l_acctd_ADR			NUMBER;
1290 
1291 
1292 
1293 BEGIN
1294    	IF PG_DEBUG in ('Y', 'C') THEN
1295    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Assigned_Amount ()+');
1296 	   arp_util.debug ('Validate_Assigned_Amount: ' || 'Exchange rate              : ' || p_ps_rec.exchange_rate);
1297 	   arp_util.debug ('Validate_Assigned_Amount: ' || 'Amount Due Remaining 	    : ' || p_ps_rec.amount_due_remaining);
1298 	   arp_util.debug ('Validate_Assigned_Amount: ' || 'Acctd Amount Due Remaining : ' || p_ps_rec.acctd_amount_due_remaining);
1299 	END IF;
1300 
1301 
1302 	IF	(p_trl_rec.extended_amount = 0)
1303 	THEN
1304 		IF PG_DEBUG in ('Y', 'C') THEN
1305 		   arp_util.debug('Validate_Assigned_Amount: ' || '>>>>>>>>>> The amount of the assignment must not be null');
1306       	   	   arp_util.debug('Validate_Assigned_Amount: ' || '           Amount Assigned      : ' || p_trl_rec.extended_amount);
1307       	   	END IF;
1308       	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_AMOUNT');
1309 	   	app_exception.raise_exception;
1310 	END IF;
1311 
1312 
1313 	/*----------------------------------------------+
1314       	|  Validate that the transaction is not 	|
1315 	|  exchanged for more than its remaining amount	|
1316         +-----------------------------------------------*/
1317 
1318 	IF   ABS(p_trl_rec.extended_amount)  >  ABS(p_ps_rec.amount_due_remaining)
1319 	THEN
1320 		IF PG_DEBUG in ('Y', 'C') THEN
1321 		   arp_util.debug('Validate_Assigned_Amount: ' || '>>>>>>>>>> Amount Exchanged Exceed PS');
1322 		   arp_util.debug('Validate_Assigned_Amount: ' || '>>>>>>>>>> OverApplication not allowed');
1323       	   	   arp_util.debug('Validate_Assigned_Amount: ' || '           Amount Assigned      : ' || p_trl_rec.extended_amount);
1324 		   arp_util.debug('Validate_Assigned_Amount: ' || '           Amount Remaining     : ' || p_ps_rec.amount_due_remaining);
1325 		END IF;
1326       	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_OVERAPPLY');
1327 		FND_MESSAGE.SET_TOKEN ('TRXNUM', p_ps_rec.trx_number);
1328 	   	app_exception.raise_exception;
1329 	END IF;
1330 
1331 
1332 	/*----------------------------------------------+
1333       	|  Calculate the accounted assigned amount	|
1334         +-----------------------------------------------*/
1335 
1336 	l_ADR		:=	p_ps_rec.amount_due_remaining;
1337 	l_acctd_ADR	:=	p_ps_rec.acctd_amount_due_remaining;
1338 
1339 	arp_util.calc_acctd_amount(
1340 		NULL,
1341 		NULL,
1342 		NULL,
1343               	nvl(p_ps_rec.exchange_rate,1)		,
1344               	'-'					,   	/** ADR will be reduced by amount_applied */
1345               	l_ADR					,       /* Current ADR */
1346               	l_acctd_ADR				,  	/* Current Acctd. ADR */
1347               	p_trl_rec.extended_amount		,       /* Assignment Amount */
1348               	l_new_ADR				,       /* New ADR */
1349               	l_new_acctd_ADR				,  	/* New Acctd. ADR */
1350               	p_trl_rec.extended_acctd_amount		);      /* Acct. amount_applied */
1351 
1352 		IF PG_DEBUG in ('Y', 'C') THEN
1353 		   arp_util.debug('Validate_Assigned_Amount: ' || 'Amount_applied		: ' || p_trl_rec.extended_amount);
1354 		   arp_util.debug('Validate_Assigned_Amount: ' || 'Acctd Amount Applied    : ' || p_trl_rec.extended_acctd_amount);
1355    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Assigned_Amount ()-');
1356    	END IF;
1357 
1358 EXCEPTION
1359     	WHEN OTHERS THEN
1360 		IF PG_DEBUG in ('Y', 'C') THEN
1361 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_Assigned_Amount () ');
1362 		END IF;
1363 		RAISE;
1364 
1365 END Validate_Assigned_Amount;
1366 
1367 
1368 
1369 
1370 /*==============================================================================+
1371  | PROCEDURE                                                                 	|
1372  |    Is_Transaction_BR 			                               	|
1373  |                                                                           	|
1374  | DESCRIPTION                                                              	|
1375  |    Check if the transaction type has a type 'BR'				|
1376  |                                                                           	|
1377  +==============================================================================*/
1378 
1379 FUNCTION Is_Transaction_BR  (p_cust_trx_type_id	IN  NUMBER) RETURN BOOLEAN IS
1380 
1381 l_type		VARCHAR2(20);
1382 
1383 BEGIN
1384    	IF PG_DEBUG in ('Y', 'C') THEN
1385    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Is_Transaction_BR ()+');
1386    	END IF;
1387 
1388 	SELECT 	type
1389 	INTO	l_type
1390 	FROM 	RA_CUST_TRX_TYPES
1391 	WHERE	cust_trx_type_id	=  p_cust_trx_type_id;
1392 
1393 	IF  	(l_type = 'BR')
1394 	THEN
1395 		IF PG_DEBUG in ('Y', 'C') THEN
1396 		   arp_util.debug ('Is_Transaction_BR: ' || 'The transaction to be exchanged is a BR');
1397 		END IF;
1398 		RETURN (TRUE);
1399 	ELSE
1400 		RETURN (FALSE);
1401 	END IF;
1402 
1403 	IF PG_DEBUG in ('Y', 'C') THEN
1404 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Is_Transaction_BR ()-');
1405 	END IF;
1406 
1407 EXCEPTION
1408     	WHEN NO_DATA_FOUND THEN
1409 		IF PG_DEBUG in ('Y', 'C') THEN
1410 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Is_Transaction_BR () ');
1411 	   	   arp_util.debug('Is_Transaction_BR: ' || '>>>>>>>>>> Invalid Transaction Type ID');
1412  	   	   arp_util.debug('Is_Transaction_BR: ' || '           p_cust_trx_type_id : ' || p_cust_trx_type_id);
1413  	   	END IF;
1414 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_TRX_TYPE');
1415 		app_exception.raise_exception;
1416 
1417     	WHEN OTHERS THEN
1418 		IF PG_DEBUG in ('Y', 'C') THEN
1419 		   arp_util.debug('>>>>>>>>>> EXCEPTION : Is_Transaction_BR () ');
1420  	   	   arp_util.debug('Is_Transaction_BR: ' || '           p_cust_trx_type_id : ' || p_cust_trx_type_id);
1421  	   	END IF;
1422 		RAISE;
1423 
1424 END Is_Transaction_BR;
1425 
1426 
1427 /*==============================================================================+
1428  | PROCEDURE                                                                 	|
1429  |    Validate_BR_Status			                               	|
1430  |                                                                           	|
1431  | DESCRIPTION                                                              	|
1432  |    Validates the status of the BR (must be INCOMPLETE), so that insert, 	|
1433  |    update and delete of BR Assignments are allowed.				|
1434  |                                                                           	|
1435  +==============================================================================*/
1436 
1437 PROCEDURE Validate_BR_Status    ( p_customer_trx_id	IN  NUMBER) IS
1438 
1439 l_trh_rec		AR_TRANSACTION_HISTORY%ROWTYPE;
1440 
1441 
1442 BEGIN
1443    	IF PG_DEBUG in ('Y', 'C') THEN
1444    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_BR_Status ()+');
1445    	END IF;
1446 
1447 	--  Fetch the BR history information
1448 
1449 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
1450 	ARP_TRANSACTION_HISTORY_PKG.fetch_f_trx_id (l_trh_rec);
1451 
1452 	/*----------------------------------------------+
1453       	|  Check that the BR is incomplete, in order to	|
1454 	|  allow the insert, update or delete of BR	|
1455 	|  assignments.					|
1456         +-----------------------------------------------*/
1457 
1458 	IF	(l_trh_rec.status <> C_INCOMPLETE)
1459 	THEN
1460 		IF PG_DEBUG in ('Y', 'C') THEN
1461 		   arp_util.debug ('Validate_BR_Status: ' || 'You cannot update the assignments when the BR has a status : ' || l_trh_rec.status);
1462 		END IF;
1463 		FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_ASSIGN_FORBIDDEN');
1464 		app_exception.raise_exception;
1465 	END IF;
1466 
1467 
1468 	IF PG_DEBUG in ('Y', 'C') THEN
1469 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_BR_Status ()-');
1470 	END IF;
1471 
1472 EXCEPTION
1473     	WHEN OTHERS THEN
1474 		IF PG_DEBUG in ('Y', 'C') THEN
1475 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_BR_Status () ');
1476  	           arp_util.debug('Validate_BR_Status: ' || '           p_customer_trx_id        = ' || p_customer_trx_id);
1477  	        END IF;
1478  	        RAISE;
1479 
1480 END Validate_BR_Status;
1481 
1482 
1483 
1484 /*==============================================================================+
1485  | PROCEDURE                                                                 	|
1486  |    Validate_Assignment_Status			                        |
1487  |                                                                           	|
1488  | DESCRIPTION                                                              	|
1489  |    Validates the status of the BR to be exchanged (UNPAID)			|
1490  |                                                                           	|
1491  +==============================================================================*/
1492 
1493 PROCEDURE Validate_Assignment_Status    ( p_customer_trx_id	IN  	NUMBER,
1494 					  p_trx_number		IN	ar_payment_schedules.trx_number%TYPE) IS
1495 
1496 l_trh_rec		AR_TRANSACTION_HISTORY%ROWTYPE;
1497 l_trx_rec		RA_CUSTOMER_TRX%ROWTYPE;
1498 
1499 BEGIN
1500    	IF PG_DEBUG in ('Y', 'C') THEN
1501    	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Assignment_Status ()+');
1502    	END IF;
1503 
1504 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
1505 	ARP_TRANSACTION_HISTORY_PKG.fetch_f_trx_id (l_trh_rec);
1506 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
1507 
1508 	IF  (l_trh_rec.status <> C_UNPAID)
1509 	THEN
1510 		IF PG_DEBUG in ('Y', 'C') THEN
1511 		   arp_util.debug('Validate_Assignment_Status: ' || '>>>>>>>>>> The BR to be exchanged must be Unpaid');
1512  		   arp_util.debug('Validate_Assignment_Status: ' || '           Status  : ' || l_trh_rec.status);
1513 		   arp_util.debug('Validate_Assignment_Status: ' || '           Event   : ' || l_trh_rec.event);
1514 		END IF;
1515 		FND_MESSAGE.SET_NAME  ('AR'    , 'AR_BR_CANNOT_ASSIGN');
1516 		FND_MESSAGE.set_token ('TRXNUM', p_trx_number);
1517 		app_exception.raise_exception;
1518 	END IF;
1519 
1520 	IF PG_DEBUG in ('Y', 'C') THEN
1521 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_Assignment_Status ()-');
1522 	END IF;
1523 
1524 EXCEPTION
1525     	WHEN NO_DATA_FOUND THEN
1526 		IF PG_DEBUG in ('Y', 'C') THEN
1527 		   arp_util.debug('>>>>>>>>>> EXCEPTION : Validate_Assignment_Status () ');
1528 	   	   arp_util.debug('Validate_Assignment_Status: ' || '>>>>>>>>>> Invalid BR ID');
1529  	   	   arp_util.debug('Validate_Assignment_Status: ' || '           Customer Trx ID  : ' || p_customer_trx_id);
1530  	   	END IF;
1531 	   	FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_BR_ID');
1532 	   	app_exception.raise_exception;
1533 
1534     	WHEN OTHERS THEN
1535 		IF PG_DEBUG in ('Y', 'C') THEN
1536 		   arp_util.debug('>>>>>>>>>> EXCEPTION : Validate_Assignment_Status () ');
1537  	           arp_util.debug('Validate_Assignment_Status: ' || '           p_customer_trx_id        = ' || p_customer_trx_id);
1538 		   arp_util.debug('Validate_Assignment_Status: ' || '           p_trx_number		    = ' || p_trx_number);
1539 		END IF;
1540  	        RAISE;
1541 
1542 END Validate_Assignment_Status;
1543 
1544 
1545 /*==============================================================================+
1546  | PROCEDURE                                                                 	|
1547  |    Validate_BR_Assignment			                        	|
1548  |                                                                           	|
1549  | DESCRIPTION                                                              	|
1550  |    Validates the BR Assignment Information before insertion or update    	|
1551  |                                                                           	|
1552  +==============================================================================*/
1553 
1554 
1555 PROCEDURE  Validate_BR_Assignment  (p_trl_rec   IN OUT NOCOPY	ra_customer_trx_lines%ROWTYPE	,
1556 				    p_ps_rec	IN	ar_payment_schedules%ROWTYPE	,
1557 				    p_trx_rec	IN	ra_customer_trx%ROWTYPE		,
1558 				    p_BR_rec	IN	ra_customer_trx%ROWTYPE		)
1559 IS
1560 
1561 l_type		VARCHAR2(20);
1562 
1563 BEGIN
1564 
1565 	IF PG_DEBUG in ('Y', 'C') THEN
1566 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_BR_Assignment ()+');
1567 	END IF;
1568 
1569 
1570 	/*----------------------------------------------+
1571       	|  Validate the status of the BR :		|
1572 	|  must be INCOMPLETE				|
1573         +-----------------------------------------------*/
1574 
1575 	Validate_BR_Status (p_trl_rec.customer_trx_id);
1576 
1577 
1578 
1579 	SELECT 	type
1580 	INTO	l_type
1581 	FROM 	RA_CUST_TRX_TYPES
1582 	WHERE	cust_trx_type_id	=  p_ps_rec.cust_trx_type_id;
1583 
1584 	/*----------------------------------------------+
1585       	|  Validate that the assignment is not a 	|
1586 	|  guarantee					|
1587         +-----------------------------------------------*/
1588 
1589 	IF	(l_type = 'GUAR')
1590 	THEN
1591 		IF PG_DEBUG in ('Y', 'C') THEN
1592 		   arp_util.debug ('Validate_BR_Assignment: ' || '>>>>>>>>>> Guarantee cannot be exchanged for BR');
1593 		END IF;
1594 		FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_INVALID_TRX_TYPE');
1595 		app_exception.raise_exception;
1596 
1597 	ELSIF	(l_type = 'BR')
1598 	THEN
1599 
1600 		/*----------------------------------------------+
1601 	      	|  If the transaction to be exchanged is a BR,	|
1602 		|  validate the status of the BR exchanged.	|
1603 	        +-----------------------------------------------*/
1604 
1605 		Validate_Assignment_Status (p_trl_rec.br_ref_customer_trx_id, p_ps_rec.trx_number);
1606 
1607 		/*----------------------------------------------+
1608 	      	|  Only Total Exchange is allowed		|
1609 	        +-----------------------------------------------*/
1610 
1611 		IF	(AR_BILLS_MAINTAIN_STATUS_PUB.Is_Payment_Schedule_Reduced(p_ps_rec))
1612 		THEN
1613 			IF PG_DEBUG in ('Y', 'C') THEN
1614 			   arp_util.debug ('Validate_BR_Assignment: ' || '>>>>>>>>>> The BR ' || p_trx_rec.trx_number || ' cannot be exchanged');
1615 			   arp_util.debug ('Validate_BR_Assignment: ' || '           Only total exchange is allowed for BR');
1616 			   arp_util.debug ('Validate_BR_Assignment: ' || '           amount_due_original    : ' || p_ps_rec.amount_due_original);
1617 			   arp_util.debug ('Validate_BR_Assignment: ' || '           amount_due_remaining   : ' || p_ps_rec.amount_due_remaining);
1618 			END IF;
1619 			FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_CANNOT_ASSIGN');
1620 			FND_MESSAGE.SET_TOKEN ('TRXNUM', p_trx_rec.trx_number);
1621 			app_exception.raise_exception;
1622 		END IF;
1623 
1624 
1625 		IF	(p_trl_rec.extended_amount <> p_ps_rec.amount_due_original)
1626 		THEN
1627 			IF PG_DEBUG in ('Y', 'C') THEN
1628 			   arp_util.debug ('Validate_BR_Assignment: ' || '>>>>>>>>>> The BR ' || p_trx_rec.trx_number || ' cannot be exchanged');
1629 			   arp_util.debug ('Validate_BR_Assignment: ' || '           Only total exchange is allowed for BR');
1630 			   arp_util.debug ('Validate_BR_Assignment: ' || '           amount assigned        : ' || p_trl_rec.extended_amount);
1631 			   arp_util.debug ('Validate_BR_Assignment: ' || '           amount_due_original    : ' || p_ps_rec.amount_due_original);
1632 			END IF;
1633 			FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_CANNOT_ASSIGN');
1634 			FND_MESSAGE.SET_TOKEN ('TRXNUM', p_trx_rec.trx_number);
1635 			app_exception.raise_exception;
1636 		END IF;
1637 
1638 	END IF;
1639 
1640 
1641 	/*----------------------------------------------+
1642       	|  Validate the reserved columns of the		|
1643 	|  exchanged Payment Schedule			|
1644         +-----------------------------------------------*/
1645 
1646 	IF 	AR_BILLS_MAINTAIN_STATUS_PUB.Is_BR_Reserved (p_ps_rec)
1647 	THEN
1648 		IF PG_DEBUG in ('Y', 'C') THEN
1649 		   arp_util.debug ('Validate_BR_Assignment: ' || 'The transaction ' || p_trx_rec.trx_number || ' is reserved, it cannot be assigned');
1650 		END IF;
1651 		FND_MESSAGE.SET_NAME  ('AR', 'AR_BR_TRX_ALREADY_ASSIGN');
1652 		FND_MESSAGE.SET_TOKEN ('TRXNUM', p_trx_rec.trx_number);
1653 		app_exception.raise_exception;
1654 	END IF;
1655 
1656 
1657 	/*----------------------------------------------+
1658       	|  Validate The Assigned Amount, 		|
1659 	|  overapplication is not allowed.		|
1660 	|  And Calculate the accounted assigned amount	|
1661         +-----------------------------------------------*/
1662 
1663 	Validate_Assigned_Amount (p_trl_rec, p_ps_rec);
1664 
1665 
1666 
1667         /*-------------------------------------------------+
1668          |   3553211 : Validate and default the flexfields  |
1669          |   for manual BR creation only                    |
1670          +--------------------------------------------------*/
1671 	IF	p_BR_rec.created_from   = 'ARBRMAIN' THEN
1672 
1673 		AR_BILLS_CREATION_LIB_PVT.Validate_Desc_Flexfield  (
1674 			p_trl_rec.attribute_category	,
1675 			p_trl_rec.attribute1		,
1676 			p_trl_rec.attribute2		,
1677 			p_trl_rec.attribute3		,
1678 			p_trl_rec.attribute4		,
1679 			p_trl_rec.attribute5		,
1680 			p_trl_rec.attribute6		,
1681 			p_trl_rec.attribute7		,
1682 			p_trl_rec.attribute8		,
1683 			p_trl_rec.attribute9		,
1684 			p_trl_rec.attribute10		,
1685 			p_trl_rec.attribute11		,
1686 			p_trl_rec.attribute12		,
1687 			p_trl_rec.attribute13		,
1688 			p_trl_rec.attribute14		,
1689 			p_trl_rec.attribute15		,
1690 			'RA_CUSTOMER_TRX_LINES'		);
1691 
1692 	END IF;
1693 
1694 
1695 	IF PG_DEBUG in ('Y', 'C') THEN
1696 	   arp_util.debug('AR_BILLS_CREATION_VAL_PVT.Validate_BR_Assignment ()-');
1697 	END IF;
1698 
1699 
1700 EXCEPTION
1701 	WHEN Others THEN
1702 		IF PG_DEBUG in ('Y', 'C') THEN
1703 		   arp_util.debug('>>>>>>>>>> EXCEPTION : AR_BILLS_CREATION_VAL_PVT.Validate_BR_Assignment () ');
1704 		END IF;
1705 		RAISE;
1706 
1707 END Validate_BR_Assignment;
1708 
1709 
1710 
1711 END AR_BILLS_CREATION_VAL_PVT;