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