DBA Data[Home] [Help]

PACKAGE BODY: APPS.AR_BILLS_MAINTAIN_PUB

Source


1 PACKAGE BODY AR_BILLS_MAINTAIN_PUB AS
2 /* $Header: ARBRMAIB.pls 120.11.12010000.2 2008/11/26 13:58:06 ankuagar ship $ */
3 
4 
5 /* =======================================================================
6  | Global Data Types
7  * ======================================================================*/
8 
9 G_PKG_NAME     	CONSTANT VARCHAR2(30) :=  	'AR_BILLS_MAINTAIN_PUB';
10 
11 G_MSG_UERROR   	CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
12 G_MSG_ERROR     CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_ERROR;
13 G_MSG_SUCCESS   CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
14 G_MSG_HIGH      CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
15 G_MSG_MEDIUM    CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
16 G_MSG_LOW       CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
17 
18 
19 /* =======================================================================
20  | Bills Receivable status constants
21  * ======================================================================*/
22 
23 C_INCOMPLETE		  CONSTANT VARCHAR2(30)	:=  'INCOMPLETE';
24 C_PENDING_REMITTANCE	  CONSTANT VARCHAR2(30)	:=  'PENDING_REMITTANCE';
25 C_PENDING_ACCEPTANCE	  CONSTANT VARCHAR2(30)	:=  'PENDING_ACCEPTANCE';
26 C_MATURED_PEND_RISK_ELIM  CONSTANT VARCHAR2(30)	:=  'MATURED_PEND_RISK_ELIMINATION';
27 C_CLOSED		CONSTANT VARCHAR2(30)   :=  'CLOSED';
28 C_REMITTED		CONSTANT VARCHAR2(30)	:=  'REMITTED';
29 C_PROTESTED		CONSTANT VARCHAR2(30)	:=  'PROTESTED';
30 C_FACTORED		CONSTANT VARCHAR2(30)   :=  'FACTORED';
31 C_ENDORSED		CONSTANT VARCHAR2(30)	:=  'ENDORSED';
32 
33 
34 /* =======================================================================
35  | Bills Receivable event constants
36  * ======================================================================*/
37 
38 C_MATURITY_DATE		CONSTANT VARCHAR2(30)	:=	'MATURITY_DATE';
39 C_MATURITY_DATE_UPDATED	CONSTANT VARCHAR2(30)	:=	'MATURITY_DATE_UPDATED';
40 C_FORMATTED		CONSTANT VARCHAR2(30)	:=	'FORMATTED';
41 C_COMPLETED		CONSTANT VARCHAR2(30)	:=	'COMPLETED';
42 C_ACCEPTED		CONSTANT VARCHAR2(30)	:=	'ACCEPTED';
43 C_SELECTED_REMITTANCE	CONSTANT VARCHAR2(30)	:=	'SELECTED_REMITTANCE';
44 C_DESELECTED_REMITTANCE	CONSTANT VARCHAR2(30)	:=	'DESELECTED_REMITTANCE';
45 C_CANCELLED		CONSTANT VARCHAR2(30)	:=	'CANCELLED';
46 C_RISK_ELIMINATED	CONSTANT VARCHAR2(30)	:=	'RISK_ELIMINATED';
47 C_RISK_UNELIMINATED	CONSTANT VARCHAR2(30)	:=	'RISK_UNELIMINATED';
48 C_RECALLED		CONSTANT VARCHAR2(30)	:=	'RECALLED';
49 C_EXCHANGED		CONSTANT VARCHAR2(30)	:=	'EXCHANGED';
50 C_RELEASE_HOLD		CONSTANT VARCHAR2(30)	:=	'RELEASE_HOLD';
51 
52 
53 /* =======================================================================
54  | Bills Receivable action constants
55  * ======================================================================*/
56 
57 
58 C_COMPLETE		CONSTANT VARCHAR2(30)	:=	'COMPLETE';
59 C_ACCEPT		CONSTANT VARCHAR2(30)	:=	'ACCEPT';
60 C_COMPLETE_ACC		CONSTANT VARCHAR2(30)	:=	'COMPLETE_ACC';
61 C_UNCOMPLETE		CONSTANT VARCHAR2(30)	:=	'UNCOMPLETE';
62 C_HOLD			CONSTANT VARCHAR2(30)	:=	'HOLD';
63 C_UNHOLD		CONSTANT VARCHAR2(30)	:=	'RELEASE HOLD';
64 C_SELECT_REMIT		CONSTANT VARCHAR2(30)	:=	'SELECT_REMIT';
65 C_DESELECT_REMIT	CONSTANT VARCHAR2(30)	:=	'DESELECT_REMIT';
66 C_CANCEL		CONSTANT VARCHAR2(30)	:=	'CANCEL';
67 C_UNPAID		CONSTANT VARCHAR2(30)	:=	'UNPAID';
68 C_REMIT_STANDARD	CONSTANT VARCHAR2(30)	:=	'REMIT_STANDARD';
69 C_FACTORE		CONSTANT VARCHAR2(30)	:=	'FACTORE';
70 C_FACTORE_RECOURSE	CONSTANT VARCHAR2(30)	:=	'FACTORE_RECOURSE';
71 C_RECALL		CONSTANT VARCHAR2(30)	:=	'RECALL';
72 C_ELIMINATE_RISK	CONSTANT VARCHAR2(30)	:=	'RISK ELIMINATION';
73 C_UNELIMINATE_RISK	CONSTANT VARCHAR2(30)	:=	'REESTABLISH RISK';
74 C_PROTEST		CONSTANT VARCHAR2(30)	:=	'PROTEST';
75 C_ENDORSE		CONSTANT VARCHAR2(30)	:=	'ENDORSE';
76 C_ENDORSE_RECOURSE	CONSTANT VARCHAR2(30)	:=	'ENDORSE_RECOURSE';
77 C_RESTATE		CONSTANT VARCHAR2(30)	:=	'RESTATE';
78 C_EXCHANGE		CONSTANT VARCHAR2(30)	:=	'EXCHANGE';
79 C_EXCHANGE_COMPLETE	CONSTANT VARCHAR2(30)	:=	'EXCHANGE_COMPLETE';
80 C_EXCHANGE_UNCOMPLETE	CONSTANT VARCHAR2(30)	:=	'EXCHANGE_UNCOMPLETE';
81 C_DELETE		CONSTANT VARCHAR2(30)	:=	'DELETE';
82 C_APPROVE_REMIT		CONSTANT VARCHAR2(30)	:=	'REMITTANCE APPROVAL';
83 
84 
85 /* =======================================================================
86  | Bills Receivable remittance method code constants
87  * ======================================================================*/
88 
89 C_STANDARD		CONSTANT VARCHAR2(30)	:=	'STANDARD';
90 C_FACTORING		CONSTANT VARCHAR2(30)	:=	'FACTORING';
91 
92 
93 /* =======================================================================
94  | Parameter p_created_from for the Receipt API
95  * ======================================================================*/
96 
97 C_BR_REMITTED		CONSTANT VARCHAR2(30) := 'BR_REMITTED';
98 C_BR_FACTORED_RECOURSE	CONSTANT VARCHAR2(30) := 'BR_FACTORED_WITH_RECOURSE';
99 C_BR_FACTORED		CONSTANT VARCHAR2(30) := 'BR_FACTORED_WITHOUT_RECOURSE';
100 
101 
102 
103 /* =======================================================================
104  |  Action_Rec : Record used for the procedure validate_actions
105  * ======================================================================*/
106 
107 TYPE  Action_Rec_Type	IS RECORD  (
108 	complete_flag		VARCHAR2(1),
109 	uncomplete_flag		VARCHAR2(1),
110 	accept_flag		VARCHAR2(1),
111      	cancel_flag		VARCHAR2(1),
112 	select_remit_flag	VARCHAR2(1),
113 	deselect_remit_flag	VARCHAR2(1),
114 	approve_remit_flag	VARCHAR2(1),
115 	hold_flag		VARCHAR2(1),
116 	unhold_flag		VARCHAR2(1),
117 	recall_flag		VARCHAR2(1),
118 	eliminate_flag		VARCHAR2(1),
119 	uneliminate_flag	VARCHAR2(1),
120 	unpaid_flag		VARCHAR2(1),
121 	protest_flag		VARCHAR2(1),
122 	endorse_flag		VARCHAR2(1),
123 	restate_flag		VARCHAR2(1),
124 	exchange_flag		VARCHAR2(1),
125 	delete_flag		VARCHAR2(1));
126 
127 
128 C_ACTION_REC			Action_Rec_Type;
129 
130 
131 API_exception			EXCEPTION;
132 
133 
134 /*===========================================================================+
135  | PROCEDURE                                                                 |
136  |    Complete_BR			                                     |
137  |                                                                           |
138  | DESCRIPTION                                                               |
139  |    Completes a BR							     |
140  |									     |
141  | HISTORY 								     |
142  | 01-OCT-02	V Crisostomo	Bug 2533917 : p_old_trx_number datatype was  |
143  |				changed from NUMBER to VARCHAR2 to comply    |
144  |				with data model definition in RA_CUSTOMER_TRX|
145  | 25-MAY-05   V Crisostomo	SSA-R12: pass org_id                         |
146  +===========================================================================*/
147 
148 
149 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
150 
151 PROCEDURE Complete_BR (
152 
153            --   *****  Standard API parameters  *****
154 
155            p_api_version      	IN  	NUMBER,
156            p_init_msg_list    	IN  	VARCHAR2 := FND_API.G_TRUE,
157            p_commit           	IN  	VARCHAR2 := FND_API.G_FALSE,
158            p_validation_level 	IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL,
159            x_return_status    	OUT NOCOPY 	VARCHAR2,
160            x_msg_count        	OUT NOCOPY 	NUMBER,
161            x_msg_data         	OUT NOCOPY 	VARCHAR2,
162 
163            --   *****  Input  parameters  *****
164 
165 	   p_customer_trx_id	IN  	NUMBER,
166 
167            --   *****  Output parameters  *****
168 
169 	   p_trx_number		OUT NOCOPY 	VARCHAR2,
170 	   p_doc_sequence_id	OUT NOCOPY 	NUMBER,
171 	   p_doc_sequence_value	OUT NOCOPY 	NUMBER,
172 	   p_old_trx_number	OUT NOCOPY 	VARCHAR2,  /* Bug 2533917 */
173 	   p_status		OUT NOCOPY 	VARCHAR2)
174 
175 IS
176 
177 	l_api_name		CONSTANT VARCHAR2(20)	:=	'Complete_BR';
178 	l_api_version		CONSTANT NUMBER		:=	1.0;
179 
180 	l_trx_rec		ra_customer_trx%ROWTYPE;
181 	l_trh_rec		ar_transaction_history%ROWTYPE;
182 	l_ps_rec		ar_payment_schedules%ROWTYPE;
183 
184 	l_doc_sequence_id	NUMBER		;
185 	l_doc_sequence_value	NUMBER		;
186 	l_trx_number		VARCHAR2(20)	;
187 	l_old_trx_number	VARCHAR2(20)	;
188 
189 	l_acceptance_flag	VARCHAR2(1)	;
190 
191 	l_action		VARCHAR2(30)	;
192 	l_action_rec		action_rec_type	;
193 
194        --Bug5051673
195 	l_drawee_id		ra_customer_trx.drawee_id%type;
196 	l_drawee_site_use_id	ra_customer_trx.drawee_site_use_id%type;
197 	l_org_id		ra_customer_trx.org_id%type;
198 	l_payment_trxn_extension_id ra_customer_trx.payment_trxn_extension_id%type;
199 	l_created_from          ra_customer_trx.created_from%type;
200 	l_instr_id              iby_trxn_extensions_v.instr_assignment_id%type;
201 
202 
203 BEGIN
204 
205 	IF PG_DEBUG in ('Y', 'C') THEN
206 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Complete_BR()+ ');
207 	END IF;
208 
209 	x_msg_count				:=	NULL;
210 	x_msg_data				:=	NULL;
211 
212        /*-----------------------------------------------+
213         |   Standard start of API savepoint     	|
214         +-----------------------------------------------*/
215 
216       	SAVEPOINT Complete_BR_PVT;
217 
218 
219        /*-----------------------------------------------+
220         | Standard call to check for call compatibility |
221         +-----------------------------------------------*/
222 
223         IF NOT FND_API.Compatible_API_Call( l_api_version	,
224                                             p_api_version	,
225                                             l_api_name		,
226                                             G_PKG_NAME          )
227         THEN
228         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
229         END IF;
230 
231 
232        /*--------------------------------------------------------------+
233         |   Initialize message list if p_init_msg_list is set to TRUE  |
234         +--------------------------------------------------------------*/
235 
236         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
237  	             FND_MSG_PUB.initialize;
238         END IF;
239 
240 
241        /*-----------------------------------------------+
242         |   Initialize return status to SUCCESS   	|
243         +-----------------------------------------------*/
244 
245         x_return_status := FND_API.G_RET_STS_SUCCESS;
246 
247 
248 
249        /*------------------------------------------------+
250         |  Bug 5051673					 |
251 	| Creation of Payment Extension Record 		 |
252         +------------------------------------------------*/
253         select trx_number,drawee_id,drawee_site_use_id,org_id,payment_trxn_extension_id,
254 	       substr(created_from ,1,8)
255 	into l_trx_number,l_drawee_id,l_drawee_site_use_id,l_org_id,l_payment_trxn_extension_id,
256 	     l_created_from
257 	from ra_customer_trx
258 	where customer_trx_id = p_customer_trx_id;
259 
260        if l_payment_trxn_extension_id is null then
261 	If substr(l_created_from,1,8) = 'ARBRCBAT' then
262          arp_standard.debug('Defaulting instrument Assign Id. ');
263 
264 	 /* Bug724495, Bills Receivable batch program will create BR based on
265 	    the drawee bank account (instr_assign_id) irrespective of receipt
266 	    method set to One Per Customer or Per Customer Due Date or Per
267 	    Invoice or Per Payment Sschedule or Per Site or Per Site Due Date */
268 
269 	 Begin
270           Select instr_assignment_id
271 	  Into l_instr_id
272           from ra_customer_Trx_lines brlines,
273                ra_customer_trx   ct,
274                iby_trxn_extensions_v iby
275           where ct.customer_trx_id = brlines.br_ref_customer_trx_id
276           and ct.payment_trxn_extension_id = iby.trxn_extension_id
277           and brlines.customer_trx_id = p_customer_trx_id
278           and rownum = 1;
279          Exception
280           When others then
281               l_instr_id := Null ;
282          End;
283 	Else
284 	 l_instr_id := Null;
285 	End IF;
286 	arp_standard.debug('Assign Id Value: ' ||l_instr_id );
287 
288             AR_BILLS_CREATION_PUB.create_br_trxn_extension(
289         p_api_version           => 1.0,
290         p_init_msg_list         => p_init_msg_list,
291         p_commit                => p_commit,
292         x_return_status         =>  x_return_status,
293         x_msg_count             => x_msg_count,
294         x_msg_data              => x_msg_data,
295         p_customer_trx_id       => p_CUSTOMER_TRX_ID,
296         p_trx_number            => l_trx_number,
297         p_org_id                => l_org_id,
298         p_drawee_id             => l_drawee_id,
299         p_drawee_site_use_id    => l_drawee_site_use_id,
300         p_payment_channel       => 'BILLS_RECEIVABLE',
301         p_instrument_assign_id  => l_instr_id,
302         p_payment_trxn_extn_id  => l_payment_trxn_extension_id);
303 
304 	      -- The values are based on FND_API.  S, E, U (Success, Error, Unexpected
305 	      IF x_return_status <>  'S'
306 	      THEN
307         	FND_MESSAGE.set_name( 'AR'          , 'AR_BR_CANNOT_COMPLETE' );
308 	        FND_MESSAGE.set_token( 'BRNUM'      ,  l_trx_rec.trx_number);
309  		arp_standard.debug('Call to  AR_BILLS_CREATION_PUB.create_br_trxn_extension Errored');
310         	app_exception.raise_exception;
311   	      END IF;
312 
313   	update ra_customer_trx
314 	set payment_trxn_extension_id = l_payment_trxn_extension_id
315 	where customer_trx_id = p_customer_trx_id;
316 
317       end if;
318 
319 
320 
321        /*--------------------------------------------------------------------+
322         |   ============  START OF API BODY - COMPLETE BR ===================|
323         +--------------------------------------------------------------------*/
324 
325 
326 	/*-----------------------------------------------+
327         |   Action Validation				 |
328         +-----------------------------------------------*/
329 
330 	l_action			:=	C_COMPLETE;
331 
332 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
333 		p_customer_trx_id	=>  p_customer_trx_id	,
334 		p_complete_flag		=>  C_ACTION_REC.complete_flag,
335 		p_uncomplete_flag	=>  C_ACTION_REC.uncomplete_flag,
336 		p_accept_flag		=>  C_ACTION_REC.accept_flag,
337 		p_cancel_flag		=>  C_ACTION_REC.cancel_flag,
338 		p_select_remit_flag	=>  C_ACTION_REC.select_remit_flag,
339 		p_deselect_remit_flag	=>  C_ACTION_REC.deselect_remit_flag,
340 		p_approve_remit_flag	=>  C_ACTION_REC.approve_remit_flag,
341 		p_hold_flag		=>  C_ACTION_REC.hold_flag,
342 		p_unhold_flag		=>  C_ACTION_REC.unhold_flag,
343 		p_recall_flag		=>  C_ACTION_REC.recall_flag,
344 		p_eliminate_flag	=>  C_ACTION_REC.eliminate_flag,
345 		p_uneliminate_flag	=>  C_ACTION_REC.uneliminate_flag,
346 		p_unpaid_flag		=>  C_ACTION_REC.unpaid_flag,
347 		p_protest_flag		=>  C_ACTION_REC.protest_flag,
348 		p_endorse_flag		=>  C_ACTION_REC.endorse_flag,
349 		p_restate_flag		=>  C_ACTION_REC.restate_flag,
350 		p_exchange_flag		=>  C_ACTION_REC.exchange_flag,
351 		p_delete_flag		=>  C_ACTION_REC.delete_flag);
352 
353 
354 	-- Do not continue if the action is not allowed for the BR
355 
356 	IF	(C_ACTION_REC.complete_flag	<>	'Y')
357 	THEN
358 	    IF PG_DEBUG in ('Y', 'C') THEN
359 	       arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
360 	    END IF;
361 	    FND_MESSAGE.set_name( 'AR'		, 'AR_BR_CANNOT_COMPLETE' );
362 	    FND_MESSAGE.set_token( 'BRNUM' 	,  l_trx_rec.trx_number);
363 	    app_exception.raise_exception;
364 	END IF;
365 
366         ARP_CT_PKG.lock_fetch_p (l_trx_rec, p_customer_trx_id);
367 
368 
369        /*-----------------------------------------------+
370         |   Data preparation 				|
371         +-----------------------------------------------*/
372 
373 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
374 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
375 
376 
377 
378        /*-----------------------------------------------+
379         |   Data Validation				|
380         +-----------------------------------------------*/
381 
382         AR_BILLS_MAINTAIN_VAL_PVT.validate_Complete_BR (l_trx_rec, l_trh_rec.gl_date);
383 
384 
385 
386 	/*-----------------------------------------------+
387         |   Document Sequence Routine 			 |
388         +-----------------------------------------------*/
389 
390 	AR_BILLS_MAINTAIN_LIB_PVT.get_doc_seq ( 222				,
391 						l_trx_rec			,
392 						arp_global.set_of_books_id	,
393 						'M'				);
394 
395 	/*-----------------------------------------------+
396         |   BR Completion 				 |
397         +------------------------------------------------*/
398 
399 	IF  (AR_BILLS_MAINTAIN_STATUS_PUB.is_acceptance_required(l_trx_rec.cust_trx_type_id))
400 	THEN
401 		AR_BILLS_MAINTAIN_LIB_PVT.Complete_Acc_Required (p_customer_trx_id);
402 		l_trh_rec.postable_flag			:= 	'N'	;
403 		l_trh_rec.current_accounted_flag	:= 	'N'	;
404 	ELSE
405 		AR_BILLS_MAINTAIN_LIB_PVT.Complete_OR_Accept (l_trh_rec);
406 		l_trh_rec.postable_flag			:=  	'Y'	;
407 		l_trh_rec.current_accounted_flag	:=  	'Y'	;
408 	END IF;
409 
410 
411 	/*-----------------------------------------------+
412         |   Update the Complete Flag in the BR Header	 |
413         +------------------------------------------------*/
414 
415 	l_trx_rec.complete_flag		:=	'Y';
416 
417 	ARP_PROCESS_BR_HEADER.update_header  (l_trx_rec, l_trx_rec.customer_trx_id);
418 
419 
420 	/*-----------------------------------------------+
421         |   Insertion in Transaction History Table	 |
422         +------------------------------------------------*/
423 
424 
425 	-- Fetch the new status and new event of the BR
426 
427 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
428 			p_trx_rec	=>	l_trx_rec	,
429 			p_action        =>	l_action	,
430 			p_new_status	=>	l_trh_rec.status,
431 			p_new_event	=>	l_trh_rec.event	);
432 
433 	l_trh_rec.transaction_history_id:=	NULL		;
434 	l_trh_rec.current_record_flag	:=  	'Y'		;
435 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
436 	l_trh_rec.comments		:=  	NULL		;
437 	l_trh_rec.posting_control_id    := 	-3           	;
438 	l_trh_rec.gl_posted_date        :=  	NULL        	;
439 	l_trh_rec.first_posted_record_flag := 	'N'		;
440 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
441 	l_trh_rec.batch_id		:=	NULL		;
442         l_trh_rec.org_id                :=      l_trx_rec.org_id;
443 
444 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
445 								 l_trh_rec.transaction_history_id);
446 
447 	/*-----------------------------------------------+
448         |   Output parameters				 |
449         +------------------------------------------------*/
450 
451 	p_trx_number			:=	l_trx_rec.trx_number		;
452 	p_doc_sequence_value		:=	l_trx_rec.doc_sequence_value	;
453 	p_doc_sequence_id		:=	l_trx_rec.doc_sequence_id	;
454 	p_old_trx_number		:=	l_trx_rec.old_trx_number	;
455 	p_status			:=	l_trh_rec.status		;
456 
457 
458 
459        /*-----------------------------------------------+
460         |   Standard check of p_commit   		|
461         +-----------------------------------------------*/
462 
463         IF FND_API.To_Boolean( p_commit )
464         THEN
465             IF PG_DEBUG in ('Y', 'C') THEN
466                arp_util.debug( 'committing');
467             END IF;
468             Commit;
469         END IF;
470 
471         IF PG_DEBUG in ('Y', 'C') THEN
472            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Complete_BR()- ');
473         END IF;
474 
475 
476 EXCEPTION
477        WHEN FND_API.G_EXC_ERROR THEN
478                 IF PG_DEBUG in ('Y', 'C') THEN
479                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
480                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
481                 END IF;
482                 ROLLBACK TO Complete_BR_PVT;
483                 x_return_status := FND_API.G_RET_STS_ERROR ;
484   	        IF PG_DEBUG in ('Y', 'C') THEN
485   	           arp_util.debug( 'Exception Error');
486   	        END IF;
487 		raise;
488 
489 
490         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
491                 IF PG_DEBUG in ('Y', 'C') THEN
492                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
493                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
494                 END IF;
495                 ROLLBACK TO Complete_BR_PVT;
496                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
497 		IF PG_DEBUG in ('Y', 'C') THEN
498 		   arp_util.debug( 'Exception Unexpected Error');
499 		END IF;
500 		RAISE;
501 
502 
503         WHEN OTHERS THEN
504                /*-------------------------------------------------------+
505                 |  Handle application errors that result from trapable  |
506                 |  error conditions. The error messages have already    |
507                 |  been put on the error stack.                         |
508                 +-------------------------------------------------------*/
509 
510 		IF PG_DEBUG in ('Y', 'C') THEN
511 		   arp_util.debug ( 'SQLERRM : ' || SQLERRM);
512 		   arp_util.debug ( 'SQLCODE : ' || SQLCODE);
513 		END IF;
514 
515 		IF (SQLCODE = -20001)
516                 THEN
517     		      	IF PG_DEBUG in ('Y', 'C') THEN
518     		      	   arp_util.debug( 'Exception Others -20001');
519     		      	END IF;
520                       	ROLLBACK TO Complete_BR_PVT;
521                       	x_return_status := FND_API.G_RET_STS_ERROR ;
522 			RAISE;
523 
524                 ELSE
525                       IF PG_DEBUG in ('Y', 'C') THEN
526                          arp_util.debug( 'Exception Others');
527                       END IF;
528 		      NULL;
529                 END IF;
530 
531 		ROLLBACK TO Complete_BR_PVT;
532                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
533 		RAISE;
534 
535 END Complete_BR;
536 
537 
538 /*==============================================================================+
539  | PROCEDURE                                                                 	|
540  |    UnComplete_BR			                                     	|
541  |                                                                           	|
542  | DESCRIPTION                                                               	|
543  |    UnCompletes a BR							     	|
544  |									  	|
545  +==============================================================================*/
546 
547 
548 PROCEDURE UnComplete_BR (
549 
550            --   *****  Standard API parameters *****
551 
552                 p_api_version    		IN  	NUMBER					,
553                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
554                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
555                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
556                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
557                 x_msg_count        		OUT NOCOPY 	NUMBER					,
558                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
559 
560            --   *****  Input  parameters  *****
561 
562 		p_customer_trx_id		IN  	NUMBER,
563 
564            --   *****  Output parameters  *****
565 
566 		p_status			OUT NOCOPY 	VARCHAR2				)
567 
568 IS
569 		l_api_name			CONSTANT VARCHAR2(20)	:=	'UnComplete_BR';
570 		l_api_version			CONSTANT NUMBER		:=	1.0;
571 
572 		l_trx_rec			ra_customer_trx%ROWTYPE;
573 		l_trh_rec			ar_transaction_history%ROWTYPE;
574 		l_ps_id				ar_payment_schedules.payment_schedule_id%TYPE;
575 
576 		l_acceptance_flag		VARCHAR2(1)	;
577 
578 		l_action			VARCHAR2(30)	;
579 
580 BEGIN
581 
582 	IF PG_DEBUG in ('Y', 'C') THEN
583 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.UnComplete_BR()+ ');
584 	END IF;
585 	x_msg_count				:=	NULL;
586 	x_msg_data				:=	NULL;
587        /*-----------------------------------------------+
588         |   Standard start of API savepoint     	|
589         +-----------------------------------------------*/
590 
591       	SAVEPOINT UnComplete_BR_PVT;
592 
593 
594        /*-----------------------------------------------+
595         | Standard call to check for call compatibility |
596         +-----------------------------------------------*/
597 
598         IF NOT FND_API.Compatible_API_Call( l_api_version	,
599                                             p_api_version	,
600                                             l_api_name		,
601                                             G_PKG_NAME          )
602         THEN
603         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
604         END IF;
605 
606 
607        /*--------------------------------------------------------------+
608         |   Initialize message list if p_init_msg_list is set to TRUE  |
609         +--------------------------------------------------------------*/
610 
611         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
612  	             FND_MSG_PUB.initialize;
613         END IF;
614 
615 
616        /*-----------------------------------------------+
617         |   Initialize return status to SUCCESS   	|
618         +-----------------------------------------------*/
619 
620         x_return_status := FND_API.G_RET_STS_SUCCESS;
621 
622 
623        /*-----------------------------------------------------------------------+
624        |   ============  START OF API BODY - UNCOMPLETE BR  =================  	|
625         +-----------------------------------------------------------------------*/
626 
627 
628 	/*-----------------------------------------------+
629         |   Action Validation				 |
630         +-----------------------------------------------*/
631 
632 	l_action			:=	C_UNCOMPLETE;
633 
634 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
635 		p_customer_trx_id	=>  	p_customer_trx_id		,
636 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
637 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
638 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
639 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
640 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
641 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
642 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
643 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
644 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
645 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
646 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
647 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
648 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
649 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
650 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
651 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
652 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
653 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
654 
655 
656 	-- Do not continue if the action is not allowed for the BR
657 
658 	ARP_CT_PKG.lock_fetch_p (l_trx_rec, p_customer_trx_id);
659 
660 	IF	(C_ACTION_REC.uncomplete_flag	<>	'Y')
661 	THEN
662 		IF PG_DEBUG in ('Y', 'C') THEN
663 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
664 		END IF;
665 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_INCOMPLETE' );
666 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
667 		app_exception.raise_exception;
668 	END IF;
669 
670 
671 
672        /*-----------------------------------------------+
673         |   Data preparation 				|
674         +-----------------------------------------------*/
675 
676 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
677 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
678 
679 
680 	IF  (AR_BILLS_MAINTAIN_STATUS_PUB.is_acceptance_required(l_trx_rec.cust_trx_type_id))
681 	THEN
682 		l_acceptance_flag := 'Y';
683 	ELSE
684 		l_acceptance_flag := 'N';
685 	END IF;
686 
687 
688 	/*-----------------------------------------------+
689         |   BR UnCompletion 				 |
690         +------------------------------------------------*/
691 
692 
693 	AR_BILLS_MAINTAIN_LIB_PVT.Reverse_Assignments_Adjustment (l_trh_rec, l_acceptance_flag);
694 
695 
696 	/*-----------------------------------------------+
697         |   Update the Complete Flag in the BR Header	 |
698         +------------------------------------------------*/
699 
700 	l_trx_rec.complete_flag		:=	'N';
701 
702 	ARP_PROCESS_BR_HEADER.update_header  (  l_trx_rec	,
703 						l_trx_rec.customer_trx_id);
704 
705 	/*-----------------------------------------------+
706         |   Insertion in Transaction History Table	 |
707         +------------------------------------------------*/
708 
709 	-- Fetch the new status and new event of the BR
710 
711 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
712 			p_trx_rec	=>	l_trx_rec	,
713 			p_action        =>	l_action	,
714 			p_new_status	=>	l_trh_rec.status,
715 			p_new_event	=>	l_trh_rec.event	);
716 
717 	l_trh_rec.transaction_history_id:=	NULL		;
718 	l_trh_rec.postable_flag		:=  	'N'		;
719 	l_trh_rec.current_accounted_flag:=  	'N'		;
720 	l_trh_rec.current_record_flag	:=  	'Y'		;
721 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
722 	l_trh_rec.comments		:=  	NULL		;
723 	l_trh_rec.posting_control_id    := 	-3           	;
724 	l_trh_rec.gl_posted_date        :=  	NULL    	;
725 	l_trh_rec.first_posted_record_flag  := 	'N'		;
726 	l_trh_rec.created_from		:=  	'ARBRMAIB'	;
727 	l_trh_rec.batch_id		:=	NULL		;
728 
729 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
730 								 l_trh_rec.transaction_history_id);
731 
732 
733 	/*-----------------------------------------------+
734         |   Delete the BR Payment Schedule		 |
735         +------------------------------------------------*/
736 
737 	IF  (l_acceptance_flag = 'N')
738 	THEN
739         --  Bug 2057740:
740         --  Commenting out NOCOPY and calling delete_f_Ct_id instead because
741         --  there is already a routine to delete ps by cust_trx_id.
742         --  no need to call another routine to find the ps id first.
743 	--  AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (
744         --                               p_customer_trx_id, l_ps_id);
745         --  arp_ps_pkg.delete_p (l_ps_id);
746 
747             arp_ps_pkg.delete_f_ct_id(p_customer_trx_id);
748 	END IF;
749 
750 
751 	/*-----------------------------------------------+
752         |   Output parameter				 |
753         +------------------------------------------------*/
754 
755 	p_status		:=	l_trh_rec.status	;
756 
757 
758        /*-----------------------------------------------+
759         |   Standard check of p_commit   		|
760         +-----------------------------------------------*/
761 
762         IF FND_API.To_Boolean( p_commit )
763         THEN
764             IF PG_DEBUG in ('Y', 'C') THEN
765                arp_util.debug( 'committing');
766             END IF;
767             Commit;
768         END IF;
769 
770         IF PG_DEBUG in ('Y', 'C') THEN
771            arp_util.debug('AR_BILLS_MAINTAIN_PUB.UnComplete_BR()- ');
772         END IF;
773 
774 
775 EXCEPTION
776        WHEN FND_API.G_EXC_ERROR THEN
777                 IF PG_DEBUG in ('Y', 'C') THEN
778                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
779                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
780                 END IF;
781                 ROLLBACK TO UnComplete_BR_PVT;
782                 x_return_status := FND_API.G_RET_STS_ERROR ;
783   	        IF PG_DEBUG in ('Y', 'C') THEN
784   	           arp_util.debug( 'Exception Error');
785   	        END IF;
786 		raise;
787 
788 
789         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
790                 IF PG_DEBUG in ('Y', 'C') THEN
791                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
792                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
793                 END IF;
794                 ROLLBACK TO UnComplete_BR_PVT;
795                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
796 		IF PG_DEBUG in ('Y', 'C') THEN
797 		   arp_util.debug( 'Exception Unexpected Error');
798 		END IF;
799 		raise;
800 
801 
802         WHEN OTHERS THEN
803                /*-------------------------------------------------------+
804                 |  Handle application errors that result from trapable  |
805                 |  error conditions. The error messages have already    |
806                 |  been put on the error stack.                         |
807                 +-------------------------------------------------------*/
808 
809 		IF PG_DEBUG in ('Y', 'C') THEN
810 		   arp_util.debug ( 'SQLERRM : ' || SQLERRM);
811 		   arp_util.debug ( 'SQLCODE : ' || SQLCODE);
812 		END IF;
813 
814 		IF (SQLCODE = -20001)
815                 THEN
816     		      	IF PG_DEBUG in ('Y', 'C') THEN
817     		      	   arp_util.debug( 'Exception Others -20001');
818     		      	END IF;
819                       	ROLLBACK TO UnComplete_BR_PVT;
820                       	x_return_status := FND_API.G_RET_STS_ERROR ;
821 			RAISE;
822                 ELSE
823                       	IF PG_DEBUG in ('Y', 'C') THEN
824                       	   arp_util.debug( 'Exception Others');
825                       	END IF;
826 		      	NULL;
827                 END IF;
828 
829                 ROLLBACK TO UnComplete_BR_PVT;
830                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
831 		RAISE;
832 
833 END UnComplete_BR;
834 
835 
836 
837 /*==============================================================================+
838  | PROCEDURE                                                                 	|
839  |    Accept_BR				                                     	|
840  |                                                                           	|
841  | DESCRIPTION                                                               	|
842  |    Accepts a BR							     	|
843  |									  	|
844  +==============================================================================*/
845 
846 
847 PROCEDURE Accept_BR (
848 
849            --   *****  Standard API parameters *****
850 
851                 p_api_version      		IN  	NUMBER					,
852                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
853                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
854                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
855                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
856                 x_msg_count        		OUT NOCOPY 	NUMBER					,
857                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
858 
859            --   *****  Input  parameters  *****
860 
861 		p_customer_trx_id		IN  	NUMBER			,
862 		p_acceptance_date		IN  	DATE			,
863 		p_acceptance_gl_date		IN  	DATE			,
864 		p_acceptance_comments		IN  	VARCHAR2		,
865 
866            --   *****  Output parameters  *****
867 
868 		p_status			OUT NOCOPY VARCHAR2					)
869 
870 IS
871 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Accept_BR';
872 		l_api_version			CONSTANT NUMBER		:=	1.0;
873 
874 		l_trx_rec			ra_customer_trx%ROWTYPE;
875 		l_trh_rec			ar_transaction_history%ROWTYPE;
876 
877 		l_action			VARCHAR2(30);
878 
879 		l_trx_date			DATE;
880 		l_gl_date			DATE;
881                 l_mesg                          VARCHAR2(2000);
882 
883 BEGIN
884 
885 	IF PG_DEBUG in ('Y', 'C') THEN
886 	   arp_util.debug( 'AR_BILLS_MAINTAIN_PUB.Accept()+ ');
887 	END IF;
888 
889 	x_msg_count				:=	NULL;
890 	x_msg_data				:=	NULL;
891 
892        /*-----------------------------------------------+
893         |   Standard start of API savepoint     	|
894         +-----------------------------------------------*/
895 
896       	SAVEPOINT Accept_BR_PVT;
897 
898 
899        /*-----------------------------------------------+
900         | Standard call to check for call compatibility |
901         +-----------------------------------------------*/
902 
903         IF NOT FND_API.Compatible_API_Call( l_api_version	,
904                                             p_api_version	,
905                                             l_api_name		,
906                                             G_PKG_NAME          )
907         THEN
908         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
909         END IF;
910 
911 
912        /*--------------------------------------------------------------+
913         |   Initialize message list if p_init_msg_list is set to TRUE  |
914         +--------------------------------------------------------------*/
915 
916         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
917  	             FND_MSG_PUB.initialize;
918         END IF;
919 
920 
921        /*-----------------------------------------------+
922         |   Initialize return status to SUCCESS   	|
923         +-----------------------------------------------*/
924 
925         x_return_status := FND_API.G_RET_STS_SUCCESS;
926 
927 
928         /*-----------------------------------------------------------------------+
929         |   ============  START OF API BODY - ACCEPT BR   ===================  	 |
930         +-----------------------------------------------------------------------*/
931 
932 
933 	/*-----------------------------------------------+
934         |   Action Validation				 |
935         +-----------------------------------------------*/
936 
937 	l_action			:=	C_ACCEPT;
938 
939 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
940 		p_customer_trx_id	=>  	p_customer_trx_id		,
941 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
942 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
943 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
944 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
945 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
946 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
947 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
948 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
949 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
950 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
951 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
952 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
953 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
954 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
955 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
956 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
957 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
958 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
959 
960 	-- Do not continue if the action is not allowed for the BR
961 
962 	ARP_CT_PKG.lock_fetch_p (l_trx_rec, p_customer_trx_id);
963 
964 	IF	(C_ACTION_REC.accept_flag	<>	'Y')
965 	THEN
966 		IF PG_DEBUG in ('Y', 'C') THEN
967 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
968 		END IF;
969 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_ACCEPT' );
970 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
971 		app_exception.raise_exception;
972 	END IF;
973 
974 
975        /*-----------------------------------------------+
976         |   Data Preparation				|
977         +-----------------------------------------------*/
978 
979 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
980 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
981 
982 	l_trx_date		:=	trunc(p_acceptance_date)	;
983 	l_gl_date		:=	trunc(p_acceptance_gl_date)	;
984 
985 
986        /*-----------------------------------------------+
987         |   Data Defaulting				|
988         +-----------------------------------------------*/
989 
990 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
991 
992 
993        /*-----------------------------------------------+
994         |   Data Validation				|
995         +-----------------------------------------------*/
996 
997         l_mesg := arp_standard.FND_MESSAGE('AR_BR_SPMENU_ACCEPTANCE');
998 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
999 
1000 	l_trh_rec.trx_date	:=	l_trx_date	;
1001 	l_trh_rec.gl_date	:=	l_gl_date	;
1002 	l_trh_rec.comments	:=	p_acceptance_comments;
1003 
1004         AR_BILLS_MAINTAIN_VAL_PVT.validate_Accept_BR (l_trx_rec, l_trh_rec);
1005 
1006 
1007 	/*-----------------------------------------------+
1008         |   BR Acceptance 				 |
1009         +------------------------------------------------*/
1010 
1011 	AR_BILLS_MAINTAIN_LIB_PVT.Complete_OR_Accept (l_trh_rec);
1012 
1013 
1014 	/*-----------------------------------------------+
1015         |   Insertion in Transaction History Table	 |
1016         +------------------------------------------------*/
1017 
1018 	-- Fetch the new status and new event of the BR
1019 
1020 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
1021 			p_trx_rec	=>	l_trx_rec	,
1022 			p_action        =>	l_action	,
1023 			p_new_status	=>	l_trh_rec.status,
1024 			p_new_event	=>	l_trh_rec.event	);
1025 
1026 	l_trh_rec.transaction_history_id:=	NULL		;
1027 	l_trh_rec.postable_flag		:=  	'Y'		;
1028 	l_trh_rec.current_accounted_flag:=  	'Y'		;
1029 	l_trh_rec.current_record_flag	:=  	'Y'		;
1030 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
1031 	l_trh_rec.posting_control_id    := 	-3           	;
1032 	l_trh_rec.gl_posted_date        :=  	NULL       	;
1033 	l_trh_rec.first_posted_record_flag  := 	'N'		;
1034 	l_trh_rec.created_from		:=  	'ARBRMAIB'	;
1035 	l_trh_rec.batch_id		:=	NULL		;
1036         l_trh_rec.org_id                :=      l_trx_rec.org_id;
1037 
1038 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
1039 								 l_trh_rec.transaction_history_id);
1040 
1041 	/*-----------------------------------------------+
1042         |   Output parameter				 |
1043         +------------------------------------------------*/
1044 
1045 	p_status		:=	l_trh_rec.status	;
1046 
1047 
1048        /*-----------------------------------------------+
1049         |   Standard check of p_commit   		|
1050         +-----------------------------------------------*/
1051 
1052         IF FND_API.To_Boolean( p_commit )
1053         THEN
1054             IF PG_DEBUG in ('Y', 'C') THEN
1055                arp_util.debug( 'committing');
1056             END IF;
1057             Commit;
1058         END IF;
1059 
1060         IF PG_DEBUG in ('Y', 'C') THEN
1061            arp_util.debug( 'AR_BILLS_MAINTAIN_PUB.Accept()- ');
1062         END IF;
1063 
1064 
1065 EXCEPTION
1066        WHEN FND_API.G_EXC_ERROR THEN
1067                 IF PG_DEBUG in ('Y', 'C') THEN
1068                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1069                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1070                 END IF;
1071                 ROLLBACK TO Accept_BR_PVT;
1072                 x_return_status := FND_API.G_RET_STS_ERROR ;
1073   	        IF PG_DEBUG in ('Y', 'C') THEN
1074   	           arp_util.debug( 'Exception Error');
1075   	        END IF;
1076 		RAISE;
1077 
1078 
1079         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1080                 IF PG_DEBUG in ('Y', 'C') THEN
1081                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1082                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1083                 END IF;
1084                 ROLLBACK TO Accept_BR_PVT;
1085                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1086 		IF PG_DEBUG in ('Y', 'C') THEN
1087 		   arp_util.debug( 'Exception Unexpected Error');
1088 		END IF;
1089 		RAISE;
1090 
1091 
1092         WHEN OTHERS THEN
1093                /*-------------------------------------------------------+
1094                 |  Handle application errors that result from trapable  |
1095                 |  error conditions. The error messages have already    |
1096                 |  been put on the error stack.                         |
1097                 +-------------------------------------------------------*/
1098 
1099 		IF PG_DEBUG in ('Y', 'C') THEN
1100 		   arp_util.debug ( 'SQLERRM : ' || SQLERRM);
1101 		   arp_util.debug ( 'SQLCODE : ' || SQLCODE);
1102 		END IF;
1103 
1104 		IF (SQLCODE = -20001)
1105                 THEN
1106     		      	ROLLBACK TO Accept_BR_PVT;
1107                       	x_return_status := FND_API.G_RET_STS_ERROR ;
1108 			RAISE;
1109                 ELSE
1110 		      	NULL;
1111                 END IF;
1112 
1113                 ROLLBACK TO Accept_BR_PVT;
1114                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1115 		RAISE;
1116 
1117 
1118 END Accept_BR;
1119 
1120 
1121 /*==============================================================================+
1122  | PROCEDURE                                                                 	|
1123  |    Hold_BR				                                     	|
1124  |                                                                           	|
1125  | DESCRIPTION                                                               	|
1126  |    Put a BR on hold							     	|
1127  |									  	|
1128  +==============================================================================*/
1129 
1130 
1131 PROCEDURE Hold_BR (
1132 
1133            --   *****  Standard API parameters *****
1134 
1135                 p_api_version      		IN  	NUMBER					,
1136                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
1137                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
1138                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
1139                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
1140                 x_msg_count        		OUT NOCOPY 	NUMBER					,
1141                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
1142 
1143            --   *****  Input  parameters  *****
1144 
1145 		p_customer_trx_id		IN  	NUMBER			,
1146 
1147            --   *****  Output parameters  *****
1148 
1149 		p_status			OUT NOCOPY 	VARCHAR2				)
1150 
1151 IS
1152 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Hold_BR';
1153 		l_api_version			CONSTANT NUMBER		:=	1.0;
1154 		l_trh_rec			ar_transaction_history%ROWTYPE;
1155 		l_trx_rec			ra_customer_trx%ROWTYPE;
1156 		l_ps_rec			ar_payment_schedules%ROWTYPE;
1157 
1158 		l_action			VARCHAR2(30);
1159 
1160 BEGIN
1161 
1162 	IF PG_DEBUG in ('Y', 'C') THEN
1163 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Hold_BR()+ ');
1164 	END IF;
1165 
1166 	x_msg_count				:=	NULL;
1167 	x_msg_data				:=	NULL;
1168 
1169        /*-----------------------------------------------+
1170         |   Standard start of API savepoint     	|
1171         +-----------------------------------------------*/
1172 
1173       	SAVEPOINT Hold_BR_PVT;
1174 
1175 
1176        /*-----------------------------------------------+
1177         | Standard call to check for call compatibility |
1178         +-----------------------------------------------*/
1179 
1180         IF NOT FND_API.Compatible_API_Call( l_api_version	,
1181                                             p_api_version	,
1182                                             l_api_name		,
1183                                             G_PKG_NAME          )
1184         THEN
1185         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1186         END IF;
1187 
1188 
1189        /*--------------------------------------------------------------+
1190         |   Initialize message list if p_init_msg_list is set to TRUE  |
1191         +--------------------------------------------------------------*/
1192 
1193         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
1194  	             FND_MSG_PUB.initialize;
1195         END IF;
1196 
1197 
1198        /*-----------------------------------------------+
1199         |   Initialize return status to SUCCESS   	|
1200         +-----------------------------------------------*/
1201 
1202         x_return_status := FND_API.G_RET_STS_SUCCESS;
1203 
1204 
1205        /*-----------------------------------------------------------------------+
1206         |   ============  START OF API BODY - HOLD BR ===================  	|
1207         +-----------------------------------------------------------------------*/
1208 
1209 	/*-----------------------------------------------+
1210         |   Validate the action				|
1211         +-----------------------------------------------*/
1212 
1213 	l_action			:=	C_HOLD;
1214 
1215 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
1216 		p_customer_trx_id	=>  	p_customer_trx_id		,
1217 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
1218 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
1219 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
1220 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
1221 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
1222 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
1223 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
1224 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
1225 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
1226 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
1227 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
1228 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
1229 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
1230 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
1231 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
1232 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
1233 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
1234 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
1235 
1236 
1237 	-- Do not continue if the action is not allowed for the BR
1238 
1239 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
1240 
1241 	IF	(C_ACTION_REC.hold_flag	<>	'Y')
1242 	THEN
1243 		IF PG_DEBUG in ('Y', 'C') THEN
1244 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
1245 		END IF;
1246 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_HOLD' );
1247 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
1248 		app_exception.raise_exception;
1249 	END IF;
1250 
1251 
1252 
1253        /*-----------------------------------------------+
1254         |   Data Preparation				|
1255         +-----------------------------------------------*/
1256 
1257 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
1258 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
1259 
1260 
1261 	/*----------------------------------------------+
1262         |    Update the Payment Schedule of the BR 	|
1263         +-----------------------------------------------*/
1264 
1265 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
1266 
1267 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, 'USER' , p_customer_trx_id);
1268 
1269 
1270 
1271 	/*----------------------------------------------+
1272         |    Update the Hold Flag in the BR Header	|
1273         +-----------------------------------------------*/
1274 
1275 	l_trx_rec.br_on_hold_flag	:=	'Y';
1276 
1277 	ARP_PROCESS_BR_HEADER.update_header (l_trx_rec, l_trx_rec.customer_trx_id);
1278 
1279 
1280 
1281 	/*----------------------------------------------+
1282         |    Insert a Transaction History Record 	|
1283         +-----------------------------------------------*/
1284 
1285 	-- Fetch the new status and new event of the BR
1286 
1287 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
1288 			p_trx_rec	=>	l_trx_rec	,
1289 			p_action        =>	l_action	,
1290 			p_new_status	=>	l_trh_rec.status,
1291 			p_new_event	=>	l_trh_rec.event	);
1292 
1293 
1294 	l_trh_rec.transaction_history_id:=	NULL		;
1295 	l_trh_rec.postable_flag		:=  	'N'		;
1296 	l_trh_rec.current_accounted_flag:=  	'N'		;
1297 	l_trh_rec.current_record_flag	:=  	'Y'		;
1298 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
1299 	l_trh_rec.comments		:=  	NULL		;
1300 	l_trh_rec.posting_control_id    := 	-3           	;
1301 	l_trh_rec.gl_posted_date        :=  	NULL        	;
1302 	l_trh_rec.first_posted_record_flag  := 	'N'		;
1303 	l_trh_rec.created_from		:=  	'ARBRMAIB'	;
1304 	l_trh_rec.batch_id		:=	NULL		;
1305 
1306 	IF	(l_trh_rec.trx_date < sysdate)
1307 	THEN
1308 		l_trh_rec.trx_date	:=	trunc(sysdate);
1309 	END IF;
1310 
1311 
1312 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
1313 
1314 
1315 	/*-----------------------------------------------+
1316         |   Output parameter				 |
1317         +------------------------------------------------*/
1318 
1319 	p_status			:=  l_trh_rec.status;
1320 
1321 
1322        /*-----------------------------------------------+
1323         |   Standard check of p_commit   		|
1324         +-----------------------------------------------*/
1325 
1326         IF FND_API.To_Boolean( p_commit )
1327         THEN
1328             IF PG_DEBUG in ('Y', 'C') THEN
1329                arp_util.debug( 'committing');
1330             END IF;
1331             Commit;
1332         END IF;
1333 
1334         IF PG_DEBUG in ('Y', 'C') THEN
1335            arp_util.debug( 'AR_BILLS_MAINTAIN_PUB.Hold()- ');
1336         END IF;
1337 
1338 
1339 EXCEPTION
1340        WHEN FND_API.G_EXC_ERROR THEN
1341                 IF PG_DEBUG in ('Y', 'C') THEN
1342                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1343                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1344                 END IF;
1345                 ROLLBACK TO Hold_BR_PVT;
1346                 x_return_status := FND_API.G_RET_STS_ERROR ;
1347 	        IF PG_DEBUG in ('Y', 'C') THEN
1348 	           arp_util.debug( 'Exception Error');
1349 	        END IF;
1350 		RAISE;
1351 
1352         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1353                 IF PG_DEBUG in ('Y', 'C') THEN
1354                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1355                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1356                 END IF;
1357                 ROLLBACK TO Hold_BR_PVT;
1358                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1359 		IF PG_DEBUG in ('Y', 'C') THEN
1360 		   arp_util.debug( 'Exception Unexpected Error');
1361 		END IF;
1362 		RAISE;
1363 
1364         WHEN OTHERS THEN
1365                /*-------------------------------------------------------+
1366                 |  Handle application errors that result from trapable  |
1367                 |  error conditions. The error messages have already    |
1368                 |  been put on the error stack.                         |
1369                 +-------------------------------------------------------*/
1370 
1371 		IF PG_DEBUG in ('Y', 'C') THEN
1372 		   arp_util.debug ( 'SQLERRM : ' || SQLERRM);
1373 		   arp_util.debug ( 'SQLCODE : ' || SQLCODE);
1374 		END IF;
1375 
1376 		IF (SQLCODE = -20001)
1377                 THEN
1378                       	ROLLBACK TO Hold_BR_PVT;
1379                       	x_return_status := FND_API.G_RET_STS_ERROR ;
1380 	               	RAISE;
1381                 ELSE
1382 		      	NULL;
1383                 END IF;
1384 
1385                 ROLLBACK TO Hold_BR_PVT;
1386 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1387 		RAISE;
1388 
1389 END Hold_BR;
1390 
1391 
1392 /*==============================================================================+
1393  | PROCEDURE                                                                 	|
1394  |    UnHold_BR				                                     	|
1395  |                                                                           	|
1396  | DESCRIPTION                                                               	|
1397  |    Releases a BR from hold						     	|
1398  |									  	|
1399  +==============================================================================*/
1400 
1401 
1402 PROCEDURE UnHold_BR (
1403 
1404            --   *****  Standard API parameters *****
1405 
1406                 p_api_version      		IN  	NUMBER					,
1407                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
1408                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
1409                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
1410                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
1411                 x_msg_count        		OUT NOCOPY 	NUMBER					,
1412                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
1413 
1414            --   *****  Input  parameters  *****
1415 
1416 		p_customer_trx_id		IN  	NUMBER			,
1417 
1418            --   *****  Output parameters  *****
1419 
1420 		p_status			OUT NOCOPY 	VARCHAR2				)
1421 
1422 IS
1423 		l_api_name			CONSTANT VARCHAR2(20)	:=	'UnHold_BR';
1424 		l_api_version			CONSTANT NUMBER		:=	1.0;
1425 
1426 		l_trh_rec			ar_transaction_history%ROWTYPE;
1427 		l_trx_rec			ra_customer_trx%ROWTYPE;
1428 		l_ps_rec			ar_payment_schedules%ROWTYPE;
1429 		l_action			VARCHAR2(30);
1430 
1431 BEGIN
1432 
1433 	IF PG_DEBUG in ('Y', 'C') THEN
1434 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.UnHold_BR()+ ');
1435 	END IF;
1436 
1437 	x_msg_count				:=	NULL;
1438 	x_msg_data				:=	NULL;
1439 
1440        /*-----------------------------------------------+
1441         |   Standard start of API savepoint     	|
1442         +-----------------------------------------------*/
1443 
1444       	SAVEPOINT UnHold_BR_PVT;
1445 
1446 
1447        /*-----------------------------------------------+
1448         | Standard call to check for call compatibility |
1449         +-----------------------------------------------*/
1450 
1451         IF NOT FND_API.Compatible_API_Call( l_api_version	,
1452                                             p_api_version	,
1453                                             l_api_name		,
1454                                             G_PKG_NAME          )
1455         THEN
1456         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1457         END IF;
1458 
1459 
1460        /*--------------------------------------------------------------+
1461         |   Initialize message list if p_init_msg_list is set to TRUE  |
1462         +--------------------------------------------------------------*/
1463 
1464         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
1465  	             FND_MSG_PUB.initialize;
1466         END IF;
1467 
1468 
1469        /*-----------------------------------------------+
1470         |   Initialize return status to SUCCESS   	|
1471         +-----------------------------------------------*/
1472 
1473         x_return_status := FND_API.G_RET_STS_SUCCESS;
1474 
1475 
1476        /*-----------------------------------------------------------------------+
1477        |   ============  START OF API BODY - UNHOLD BR   ===================  	|
1478         +-----------------------------------------------------------------------*/
1479 
1480 	/*-----------------------------------------------+
1481         |   Validate the action				|
1482         +-----------------------------------------------*/
1483 
1484 	l_action			:=	C_UNHOLD;
1485 
1486 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
1487 		p_customer_trx_id	=>  	p_customer_trx_id		,
1488 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
1489 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
1490 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
1491 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
1492 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
1493 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
1494 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
1495 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
1496 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
1497 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
1498 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
1499 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
1500 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
1501 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
1502 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
1503 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
1504 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
1505 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
1506 
1507 
1508 	-- Do not continue if the action is not allowed for the BR
1509 
1510 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
1511 
1512 	IF	(C_ACTION_REC.unhold_flag	<>	'Y')
1513 	THEN
1514 		IF PG_DEBUG in ('Y', 'C') THEN
1515 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
1516 		END IF;
1517 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_UNHOLD' );
1518 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
1519 		app_exception.raise_exception;
1520 	END IF;
1521 
1522 
1523        /*-----------------------------------------------+
1524         |   Data Preparation				|
1525         +-----------------------------------------------*/
1526 
1527 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
1528 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
1529 
1530 
1531 	/*----------------------------------------------+
1532         |    Updates the Payment Schedule of the BR 	|
1533         +-----------------------------------------------*/
1534 
1535 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
1536 
1537 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, NULL, NULL);
1538 
1539 
1540 	/*----------------------------------------------+
1541         |    Update the Hold Flag in the BR Header	|
1542         +-----------------------------------------------*/
1543 
1544 	l_trx_rec.br_on_hold_flag	:=	'N';
1545 
1546 	ARP_PROCESS_BR_HEADER.update_header (l_trx_rec,	l_trx_rec.customer_trx_id);
1547 
1548 
1549 	/*----------------------------------------------+
1550         |    Insert a Transaction History Record 	|
1551         +-----------------------------------------------*/
1552 
1553 	-- Fetch the new status and new event of the BR
1554 
1555 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
1556 			p_trx_rec	=>	l_trx_rec	,
1557 			p_action        =>	l_action	,
1558 			p_new_status	=>	l_trh_rec.status,
1559 			p_new_event	=>	l_trh_rec.event	);
1560 
1561 	l_trh_rec.transaction_history_id:=	NULL		;
1562 	l_trh_rec.postable_flag		:=  	'N'		;
1563 	l_trh_rec.current_accounted_flag:=  	'N'		;
1564 	l_trh_rec.current_record_flag	:=  	'Y'		;
1565 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
1566 	l_trh_rec.comments		:=  	NULL		;
1567 	l_trh_rec.posting_control_id    := 	-3           	;
1568 	l_trh_rec.gl_posted_date        :=  	NULL	        ;
1569 	l_trh_rec.first_posted_record_flag  := 	'N'		;
1570 	l_trh_rec.created_from		:=  	'ARBRMAIB'	;
1571 	l_trh_rec.batch_id		:=	NULL		;
1572 
1573 	IF	(l_trh_rec.trx_date < sysdate)
1574 	THEN
1575 		l_trh_rec.trx_date	:=	trunc(sysdate);
1576 	END IF;
1577 
1578 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
1579 
1580 
1581 	/*-----------------------------------------------+
1582         |   Output parameter				 |
1583         +------------------------------------------------*/
1584 
1585 	p_status			:=  l_trh_rec.status;
1586 
1587 
1588        /*-----------------------------------------------+
1589         |   Standard check of p_commit   		|
1590         +-----------------------------------------------*/
1591 
1592         IF FND_API.To_Boolean( p_commit )
1593         THEN
1594             IF PG_DEBUG in ('Y', 'C') THEN
1595                arp_util.debug( 'committing');
1596             END IF;
1597             Commit;
1598         END IF;
1599 
1600         IF PG_DEBUG in ('Y', 'C') THEN
1601            arp_util.debug( 'AR_BILLS_MAINTAIN_PUB.UnHold()- ');
1602         END IF;
1603 
1604 
1605 EXCEPTION
1606        WHEN FND_API.G_EXC_ERROR THEN
1607                 IF PG_DEBUG in ('Y', 'C') THEN
1608                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1609                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1610                 END IF;
1611                 ROLLBACK TO UnHold_BR_PVT;
1612                 x_return_status := FND_API.G_RET_STS_ERROR ;
1613   	        IF PG_DEBUG in ('Y', 'C') THEN
1614   	           arp_util.debug( 'Exception Error');
1615   	        END IF;
1616 		RAISE;
1617 
1618         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1619                 IF PG_DEBUG in ('Y', 'C') THEN
1620                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
1621                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1622                 END IF;
1623                 ROLLBACK TO UnHold_BR_PVT;
1624                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1625 		IF PG_DEBUG in ('Y', 'C') THEN
1626 		   arp_util.debug( 'Exception Unexpected Error');
1627 		END IF;
1628 		RAISE;
1629 
1630         WHEN OTHERS THEN
1631                /*-------------------------------------------------------+
1632                 |  Handle application errors that result from trapable  |
1633                 |  error conditions. The error messages have already    |
1634                 |  been put on the error stack.                         |
1635                 +-------------------------------------------------------*/
1636 
1637 		IF PG_DEBUG in ('Y', 'C') THEN
1638 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
1639                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
1640                 END IF;
1641 
1642 		IF (SQLCODE = -20001)
1643                 THEN
1644                       	ROLLBACK TO UnHold_BR_PVT;
1645                       	x_return_status := FND_API.G_RET_STS_ERROR ;
1646 			RAISE;
1647                 ELSE
1648 		      	NULL;
1649                 END IF;
1650 
1651                 ROLLBACK TO UnHold_BR_PVT;
1652                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1653 		RAISE;
1654 
1655 END UnHold_BR;
1656 
1657 
1658 /*==============================================================================+
1659  | PROCEDURE                                                                 	|
1660  |    Select_BR_remit			                                     	|
1661  |                                                                           	|
1662  | DESCRIPTION                                                               	|
1663  |    Selects a BR for remittance					     	|
1664  |									  	|
1665  +==============================================================================*/
1666 
1667 
1668 PROCEDURE Select_BR_Remit (
1669 
1670            --   *****  Input  parameters  *****
1671 
1672 		p_batch_id			IN  	NUMBER	,
1673 		p_ps_id				IN  	NUMBER	,
1674 
1675            --   *****  Output parameters  *****
1676 
1677 		p_status			OUT NOCOPY 	VARCHAR2				)
1678 
1679 IS
1680 
1681 		l_batch_rec			ar_batches%ROWTYPE;
1682 		l_trh_rec			ar_transaction_history%ROWTYPE;
1683 		l_trx_rec			ra_customer_trx%ROWTYPE;
1684 		l_ps_rec			ar_payment_schedules%ROWTYPE;
1685 		l_action			VARCHAR2(30);
1686 
1687 BEGIN
1688 
1689 	IF PG_DEBUG in ('Y', 'C') THEN
1690 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Select_BR_Remit ()+');
1691 	END IF;
1692 
1693        /*-----------------------------------------------+
1694         |   Standard start of API savepoint     	|
1695         +-----------------------------------------------*/
1696 
1697       	SAVEPOINT Select_BR_Remit_PVT;
1698 
1699 
1700 	/*-----------------------------------------------+
1701         |   Input Validation				 |
1702         +-----------------------------------------------*/
1703 
1704 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Payment_Schedule_ID (p_ps_id);
1705 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Remit_Batch_ID (p_batch_id);
1706 
1707 
1708 	/*-----------------------------------------------+
1709         |   Data preparation				 |
1710         +-----------------------------------------------*/
1711 
1712 	arp_cr_batches_pkg.fetch_p  (p_batch_id, l_batch_rec);
1713 
1714 	arp_ps_pkg.fetch_p (p_ps_id, l_ps_rec);
1715 
1716 	l_trh_rec.customer_trx_id	:=	l_ps_rec.customer_trx_id;
1717 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
1718 
1719 
1720 	/*-----------------------------------------------+
1721         |   Validate the action				|
1722         +-----------------------------------------------*/
1723 
1724 
1725 	l_action			:=	C_SELECT_REMIT;
1726 
1727 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
1728 		p_customer_trx_id	=>  	l_ps_rec.customer_trx_id	,
1729 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
1730 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
1731 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
1732 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
1733 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
1734 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
1735 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
1736 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
1737 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
1738 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
1739 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
1740 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
1741 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
1742 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
1743 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
1744 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
1745 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
1746 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
1747 
1748 
1749 	-- Do not continue if the action is not allowed for the BR
1750 
1751 	ARP_CT_PKG.fetch_p (l_trx_rec, l_ps_rec.customer_trx_id);
1752 
1753 	IF	(C_ACTION_REC.select_remit_flag	<>	'Y')
1754 	THEN
1755 		IF PG_DEBUG in ('Y', 'C') THEN
1756 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_ps_rec.customer_trx_id);
1757 		END IF;
1758 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_SELECT_REMIT' );
1759 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
1760 		app_exception.raise_exception;
1761 	END IF;
1762 
1763 
1764 
1765         /*-----------------------------------------------+
1766         |   Data Validation				|
1767         +-----------------------------------------------*/
1768 
1769 	AR_BILLS_MAINTAIN_VAL_PVT.Validate_Remittance_Dates (l_batch_rec, l_trh_rec, l_trx_rec.trx_number);
1770 
1771 	l_trh_rec.trx_date	:=	trunc(l_batch_rec.batch_date)	;
1772 	l_trh_rec.gl_date	:=	trunc(l_batch_rec.gl_date)	;
1773 
1774 
1775 	/*----------------------------------------------+
1776         |    Updates the Payment Schedule of the BR 	|
1777         +-----------------------------------------------*/
1778 
1779 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (p_ps_id, 'REMITTANCE' , p_batch_id);
1780 
1781 
1782 	/*----------------------------------------------+
1783         |    Insert a Transaction History Record 	|
1784         +-----------------------------------------------*/
1785 
1786 	-- Fetch the new status and new event of the BR
1787 
1788 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
1789 			p_trx_rec	=>	l_trx_rec	,
1790 			p_action        =>	l_action	,
1791 			p_new_status	=>	l_trh_rec.status,
1792 			p_new_event	=>	l_trh_rec.event	);
1793 
1794 
1795 	l_trh_rec.transaction_history_id:=	NULL			;
1796 	l_trh_rec.postable_flag		:=  	'N'			;
1797 	l_trh_rec.current_accounted_flag:=  	'N'			;
1798 	l_trh_rec.current_record_flag	:=  	'Y'			;
1799 	l_trh_rec.prv_trx_history_id	:=  	NULL			;
1800 	l_trh_rec.comments		:=  	NULL			;
1801 	l_trh_rec.posting_control_id    := 	-3           		;
1802 	l_trh_rec.gl_posted_date        :=  	NULL        		;
1803 	l_trh_rec.first_posted_record_flag  := 	'N'			;
1804 	l_trh_rec.created_from		:=  	'ARBRMAIB'		;
1805 	l_trh_rec.batch_id		:=	NULL			;
1806 
1807 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
1808 
1809 
1810 	/*-----------------------------------------------+
1811         |   Output parameter				 |
1812         +------------------------------------------------*/
1813 
1814 	p_status			:=  l_trh_rec.status;
1815 
1816 	IF PG_DEBUG in ('Y', 'C') THEN
1817 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Select_BR_Remit ()-');
1818 	END IF;
1819 
1820 EXCEPTION
1821  	WHEN OTHERS THEN
1822    		IF PG_DEBUG in ('Y', 'C') THEN
1823    		   arp_util.debug('EXCEPTION OTHERS: AR_BILLS_MAINTAIN_PUB.Select_BR_Remit');
1824 		   arp_util.debug( SQLCODE);
1825 		   arp_util.debug( SQLERRM);
1826 		END IF;
1827 		ROLLBACK TO Select_BR_Remit_PVT;
1828 	RAISE;
1829 
1830 END Select_BR_Remit;
1831 
1832 
1833 /*==============================================================================+
1834  | PROCEDURE                                                                 	|
1835  |    DeSelect_BR_remit			                                     	|
1836  |                                                                           	|
1837  | DESCRIPTION                                                               	|
1838  |    DeSelects a BR out NOCOPY of a remittance batch				     	|
1839  |									  	|
1840  +==============================================================================*/
1841 
1842 
1843 PROCEDURE DeSelect_BR_Remit (
1844 
1845            --   *****  Input  parameters  *****
1846 		p_ps_id				IN  	NUMBER	,
1847 
1848            --   *****  Output parameters  *****
1849 		p_status			OUT NOCOPY 	VARCHAR2				)
1850 IS
1851 
1852 		l_trh_rec			ar_transaction_history%ROWTYPE;
1853 		l_trx_rec			ra_customer_trx%ROWTYPE;
1854 		l_ps_rec			ar_payment_schedules%ROWTYPE;
1855 		l_action			VARCHAR2(30);
1856 
1857 BEGIN
1858 
1859 	IF PG_DEBUG in ('Y', 'C') THEN
1860 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.DeSelect_BR_Remit ()+');
1861 	END IF;
1862 
1863        /*-----------------------------------------------+
1864         |   Standard start of API savepoint     	|
1865         +-----------------------------------------------*/
1866 
1867       	SAVEPOINT DeSelect_BR_Remit_PVT;
1868 
1869 
1870 	/*-----------------------------------------------+
1871         |   Input Validation				 |
1872         +-----------------------------------------------*/
1873 
1874 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Payment_Schedule_ID (p_ps_id);
1875 
1876 
1877 
1878 	/*-----------------------------------------------+
1879         |   Data preparation				 |
1880         +-----------------------------------------------*/
1881 
1882 	arp_ps_pkg.fetch_p (p_ps_id, l_ps_rec);
1883 
1884 
1885 
1886 	/*-----------------------------------------------+
1887         |   Validate the action				|
1888         +-----------------------------------------------*/
1889 
1890 	l_action			:=	C_DESELECT_REMIT;
1891 
1892 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
1893 		p_customer_trx_id	=>  	l_ps_rec.customer_trx_id	,
1894 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
1895 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
1896 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
1897 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
1898 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
1899 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
1900 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
1901 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
1902 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
1903 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
1904 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
1905 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
1906 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
1907 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
1908 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
1909 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
1910 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
1911 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
1912 
1913 
1914 	-- Do not continue if the action is not allowed for the BR
1915 
1916 	ARP_CT_PKG.fetch_p (l_trx_rec, l_ps_rec.customer_trx_id);
1917 
1918 	IF	(C_ACTION_REC.deselect_remit_flag	<>	'Y')
1919 	THEN
1920 		IF PG_DEBUG in ('Y', 'C') THEN
1921 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_ps_rec.customer_trx_id);
1922 		END IF;
1923 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_DESELECT_REMIT' );
1924 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
1925 		app_exception.raise_exception;
1926 	END IF;
1927 
1928 
1929        /*-----------------------------------------------+
1930         |   Data Preparation				|
1931         +-----------------------------------------------*/
1932 
1933 	l_trh_rec.customer_trx_id	:=	l_ps_rec.customer_trx_id;
1934 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
1935 
1936 
1937 	/*----------------------------------------------+
1938         |    Updates the Payment Schedule of the BR 	|
1939         +-----------------------------------------------*/
1940 
1941 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (p_ps_id, NULL, NULL);
1942 
1943 
1944 	/*----------------------------------------------+
1945         |    Insert a Transaction History Record 	|
1946         +-----------------------------------------------*/
1947 
1948 	-- Fetch the new status and new event of the BR
1949 
1950 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
1951 			p_trx_rec	=>	l_trx_rec	,
1952 			p_action        =>	l_action	,
1953 			p_new_status	=>	l_trh_rec.status,
1954 			p_new_event	=>	l_trh_rec.event	);
1955 
1956 	l_trh_rec.transaction_history_id:=	NULL		;
1957 	l_trh_rec.postable_flag		:=  	'N'		;
1958 	l_trh_rec.current_accounted_flag:=  	'N'		;
1959 	l_trh_rec.current_record_flag	:=  	'Y'		;
1960 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
1961 	l_trh_rec.comments		:=  	NULL		;
1962 	l_trh_rec.posting_control_id    := 	-3           	;
1963 	l_trh_rec.gl_posted_date        :=  	NULL        	;
1964 	l_trh_rec.first_posted_record_flag  := 	'N'		;
1965 	l_trh_rec.created_from		:= 	'ARBRMAIB'	;
1966 
1967 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
1968 
1969 
1970 	/*-----------------------------------------------+
1971         |   Output parameter				 |
1972         +------------------------------------------------*/
1973 
1974 	p_status			:=  l_trh_rec.status;
1975 
1976 	IF PG_DEBUG in ('Y', 'C') THEN
1977 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.DeSelect_BR_Remit ()-');
1978 	END IF;
1979 
1980 EXCEPTION
1981  	WHEN OTHERS THEN
1982    		IF PG_DEBUG in ('Y', 'C') THEN
1983    		   arp_util.debug('EXCEPTION OTHERS: AR_BILLS_MAINTAIN_PUB.DeSelect_BR_Remit');
1984 		   arp_util.debug( SQLCODE);
1985 		   arp_util.debug( SQLERRM);
1986 		END IF;
1987 		ROLLBACK TO DeSelect_BR_Remit_PVT;
1988 		RAISE;
1989 
1990 END DeSelect_BR_Remit;
1991 
1992 
1993 
1994 /*==============================================================================+
1995  | PROCEDURE                                                                 	|
1996  |    Cancel_BR_remit			                                     	|
1997  |                                                                           	|
1998  | DESCRIPTION                                                               	|
1999  |    Cancels the selection of a BR in a remittance batch 		     	|
2000  |    Removes the history record related to the selection			|
2001  |									  	|
2002  +==============================================================================*/
2003 
2004 
2005 PROCEDURE Cancel_BR_Remit (
2006 
2007            --   *****  Input  parameters  *****
2008 		p_ps_id				IN  	NUMBER	)
2009 IS
2010 
2011 		l_trh_rec			ar_transaction_history%ROWTYPE;
2012 		l_trx_rec			ra_customer_trx%ROWTYPE;
2013 		l_ps_rec			ar_payment_schedules%ROWTYPE;
2014 		l_action			VARCHAR2(30);
2015 		l_trh_id			ar_transaction_history.transaction_history_id%TYPE;
2016 
2017 BEGIN
2018 
2019 	IF PG_DEBUG in ('Y', 'C') THEN
2020 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Cancel_BR_Remit ()+');
2021 	END IF;
2022 
2023        /*-----------------------------------------------+
2024         |   Standard start of API savepoint     	|
2025         +-----------------------------------------------*/
2026 
2027       	SAVEPOINT Cancel_BR_Remit_PVT;
2028 
2029 
2030 	/*-----------------------------------------------+
2031         |   Input Validation				 |
2032         +-----------------------------------------------*/
2033 
2034 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Payment_Schedule_ID (p_ps_id);
2035 
2036 
2037 
2038 	/*-----------------------------------------------+
2039         |   Data preparation				 |
2040         +-----------------------------------------------*/
2041 
2042 	arp_ps_pkg.fetch_p (p_ps_id, l_ps_rec);
2043 
2044 
2045 
2046 	/*-----------------------------------------------+
2047         |   Validate the action				|
2048         +-----------------------------------------------*/
2049 
2050 	l_action			:=	C_DESELECT_REMIT;
2051 
2052 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
2053 		p_customer_trx_id	=>  	l_ps_rec.customer_trx_id	,
2054 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
2055 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
2056 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
2057 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
2058 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
2059 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
2060 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
2061 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
2062 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
2063 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
2064 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
2065 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
2066 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
2067 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
2068 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
2069 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
2070 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
2071 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
2072 
2073 
2074 	-- Do not continue if the action is not allowed for the BR
2075 
2076 	ARP_CT_PKG.fetch_p (l_trx_rec, l_ps_rec.customer_trx_id);
2077 
2078 	IF	(C_ACTION_REC.deselect_remit_flag	<>	'Y')
2079 	THEN
2080 		IF PG_DEBUG in ('Y', 'C') THEN
2081 		   arp_util.debug('Cancel_BR_Remit: ' || '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_ps_rec.customer_trx_id);
2082 		END IF;
2083 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_DESELECT_REMIT' );
2084 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
2085 		app_exception.raise_exception;
2086 	END IF;
2087 
2088 
2089        /*-----------------------------------------------+
2090         |   Data Preparation				|
2091         +-----------------------------------------------*/
2092 
2093 	l_trh_rec.customer_trx_id	:=	l_ps_rec.customer_trx_id;
2094 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
2095 
2096 
2097 	/*----------------------------------------------+
2098         |    Updates the Payment Schedule of the BR 	|
2099         +-----------------------------------------------*/
2100 
2101 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (p_ps_id, NULL, NULL);
2102 
2103 
2104 
2105 	/*------------------------------------------------------+
2106         |    Deletes the current Transaction History Record 	|
2107 	|    (Status Selected Remittance)			|
2108         +-------------------------------------------------------*/
2109 
2110 	l_trh_id	:=	l_trh_rec.prv_trx_history_id;
2111 
2112 	ARP_PROC_TRANSACTION_HISTORY.delete_transaction_history (l_trh_rec.transaction_history_id);
2113 
2114 
2115 	/*------------------------------------------------------+
2116         |    Updates the previous Transaction History Record 	|
2117         +-------------------------------------------------------*/
2118 
2119  	ARP_TRANSACTION_HISTORY_PKG.set_to_dummy(l_trh_rec);
2120 
2121         /*---------------------------+
2122         | Set the flag to be updated |
2123         +----------------------------*/
2124 
2125 	l_trh_rec.current_record_flag	:=	'Y';
2126 
2127 	ARP_PROC_TRANSACTION_HISTORY.update_transaction_history	(l_trh_rec, l_trh_id);
2128 
2129 
2130 	IF PG_DEBUG in ('Y', 'C') THEN
2131 	   arp_util.debug('Cancel_BR_Remit: ' || 'AR_BILLS_MAINTAIN_PUB.DeSelect_BR_Remit ()-');
2132 	END IF;
2133 
2134 EXCEPTION
2135  	WHEN OTHERS THEN
2136    		IF PG_DEBUG in ('Y', 'C') THEN
2137    		   arp_util.debug('EXCEPTION OTHERS: AR_BILLS_MAINTAIN_PUB.Cancel_BR_Remit');
2138 		   arp_util.debug('Cancel_BR_Remit: ' || SQLCODE);
2139 		   arp_util.debug('Cancel_BR_Remit: ' || SQLERRM);
2140 		END IF;
2141 		ROLLBACK TO Cancel_BR_Remit_PVT;
2142 		RAISE;
2143 
2144 END Cancel_BR_Remit;
2145 
2146 
2147 
2148 
2149 /*==============================================================================+
2150  | PROCEDURE                                                                 	|
2151  |    Approve_BR_Remit			                                     	|
2152  |                                                                           	|
2153  | DESCRIPTION                                                               	|
2154  |    Approves the remittance of a BR					     	|
2155  |									  	|
2156  +==============================================================================*/
2157 
2158 
2159 PROCEDURE Approve_BR_Remit (
2160 
2161            --   *****  Input  parameters  *****
2162 
2163 		p_batch_id			IN	ar_batches.batch_id%TYPE			,
2164 		p_ps_id				IN	ar_payment_schedules.payment_schedule_id%TYPE	,
2165 
2166            --   *****  Output parameters  *****
2167 
2168          	p_status			OUT NOCOPY 	VARCHAR2					)
2169 
2170 IS
2171 		l_batch_rec			ar_batches%ROWTYPE;
2172 		l_trh_rec			ar_transaction_history%ROWTYPE;
2173 		l_ps_rec			ar_payment_schedules%ROWTYPE;
2174 		l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE;
2175 		l_action			VARCHAR2(30);
2176 
2177 BEGIN
2178 
2179 	IF PG_DEBUG in ('Y', 'C') THEN
2180 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Approve_BR_Remit ()+ ');
2181 	END IF;
2182 
2183 
2184        /*-----------------------------------------------+
2185         |   Standard start of API savepoint     	|
2186         +-----------------------------------------------*/
2187 
2188      	SAVEPOINT Approve_BR_Remit_PVT;
2189 
2190 
2191 	/*----------------------------------------------+
2192         |   Fetch BR Information			|
2193         +-----------------------------------------------*/
2194 
2195 	arp_cr_batches_pkg.fetch_p  (p_batch_id, l_batch_rec);
2196 
2197 	arp_ps_pkg.fetch_p (p_ps_id, l_ps_rec);
2198 
2199 	ARP_CT_PKG.lock_fetch_p (l_trx_rec, l_ps_rec.customer_trx_id);
2200 
2201 
2202 	/*-----------------------------------------------+
2203         |   Validate the action				|
2204         +-----------------------------------------------*/
2205 
2206 	l_action			:=	C_APPROVE_REMIT;
2207 
2208 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
2209 		p_customer_trx_id	=>  	l_ps_rec.customer_trx_id	,
2210 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
2211 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
2212 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
2213 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
2214 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
2215 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
2216 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
2217 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
2218 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
2219 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
2220 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
2221 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
2222 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
2223 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
2224 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
2225 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
2226 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
2227 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
2228 
2229 
2230 	-- Do not continue if the action is not allowed for the BR
2231 
2232 	IF	(C_ACTION_REC.approve_remit_flag	<>	'Y')
2233 	THEN
2234 		IF PG_DEBUG in ('Y', 'C') THEN
2235 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_ps_rec.customer_trx_id);
2236 		END IF;
2237 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_APPROVE' );
2238 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
2239 		app_exception.raise_exception;
2240 	END IF;
2241 
2242 
2243 	/*-----------------------------------------------+
2244         |   Data preparation 				|
2245         +-----------------------------------------------*/
2246 
2247 
2248 	ARP_CT_PKG.fetch_p (l_trx_rec, l_ps_rec.customer_trx_id);
2249 
2250 	l_trh_rec.customer_trx_id	:=	l_ps_rec.customer_trx_id;
2251 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
2252 
2253 
2254 	/*----------------------------------------------+
2255         |   Remittance Approval 			|
2256         +-----------------------------------------------*/
2257 
2258 	IF 	(l_batch_rec.remit_method_code = C_STANDARD)
2259 	THEN
2260 		/*----------------------------------------------+
2261 	        |   Standard Remittance Approval		|
2262 	        +-----------------------------------------------*/
2263 
2264 		l_action			:=	C_REMIT_STANDARD;
2265 		l_trh_rec.postable_flag		:=	'Y';
2266 		l_trh_rec.current_accounted_flag:=	'Y';
2267 
2268 
2269 	ELSIF	(l_batch_rec.remit_method_code = C_FACTORING 	AND	l_batch_rec.with_recourse_flag = 'Y')
2270 	THEN
2271 		/*----------------------------------------------+
2272 	        | Remittance Method : Factore With Recourse	|
2273 	        +-----------------------------------------------*/
2274 
2275 		l_action			:=	C_FACTORE_RECOURSE;
2276 		l_trh_rec.postable_flag		:=	'Y';
2277 		l_trh_rec.current_accounted_flag:=	'Y';
2278 		AR_BILLS_MAINTAIN_LIB_PVT.Factore_Recourse (l_batch_rec, l_ps_rec, l_trh_rec);
2279 
2280 
2281 	ELSIF	(l_batch_rec.remit_method_code = C_FACTORING	AND	l_batch_rec.with_recourse_flag = 'N')
2282 	THEN
2283 		/*----------------------------------------------+
2284 	        | Remittance Method : Factore Without Recourse	|
2285 	        +-----------------------------------------------*/
2286 
2287 		l_action			:=	C_FACTORE;
2288 		l_trh_rec.postable_flag		:=	'N';
2289 		AR_BILLS_MAINTAIN_LIB_PVT.Factore_Without_Recourse (l_batch_rec, l_ps_rec);
2290 		AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (p_ps_id, NULL , NULL);
2291 
2292 		/*----------------------------------------------+
2293         	|  Insert the First Transaction History Record	|
2294         	+-----------------------------------------------*/
2295 
2296 		-- Fetch the new status and new event of the BR
2297 
2298 		AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
2299 			p_trx_rec	=>	l_trx_rec	,
2300 			p_action        =>	l_action	,
2301 			p_new_status	=>	l_trh_rec.status,
2302 			p_new_event	=>	l_trh_rec.event	);
2303 
2304 		l_trh_rec.trx_date		:=	trunc(l_batch_rec.batch_date)	;
2305 		l_trh_rec.gl_date		:=	trunc(l_batch_rec.gl_date)	;
2306 		l_trh_rec.transaction_history_id:=	NULL			;
2307 		l_trh_rec.current_record_flag	:=  	'Y'			;
2308 		l_trh_rec.prv_trx_history_id	:=  	NULL			;
2309 		l_trh_rec.posting_control_id    := 	-3           		;
2310 		l_trh_rec.gl_posted_date        :=  	NULL        		;
2311 		l_trh_rec.first_posted_record_flag  := 	'N'			;
2312 		l_trh_rec.created_from		:=	'ARBRMAIB'		;
2313 		l_trh_rec.batch_id		:=	NULL			;
2314 
2315 
2316 		arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
2317 								 	l_trh_rec.transaction_history_id);
2318 
2319 	ELSE
2320 		/*----------------------------------------------+
2321 	        | Remittance Method Unknown			|
2322 	        +-----------------------------------------------*/
2323 
2324 		IF PG_DEBUG in ('Y', 'C') THEN
2325 		   arp_util.debug( '>>>>>>>>>> The remittance method : ' || l_batch_rec.remit_method_code || 'Recourse Flag : ' || l_batch_rec.with_recourse_flag || ' is not handled');
2326 		END IF;
2327 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_INVALID_REMIT_METHOD');
2328 		app_exception.raise_exception;
2329 
2330 	END IF;
2331 
2332 
2333 	/*----------------------------------------------+
2334         |   Store the Remittance Information in the 	|
2335 	|   BR Header 					|
2336         +-----------------------------------------------*/
2337 
2338 	l_trx_rec.remittance_batch_id		:=	p_batch_id;
2339 	l_trx_rec.receipt_method_id		:=	l_batch_rec.receipt_method_id;
2340 	l_trx_rec.remit_bank_acct_use_id	:=	l_batch_rec.remit_bank_acct_use_id;
2341 
2342 	ARP_PROCESS_BR_HEADER.update_header  (  l_trx_rec		,
2343 						l_trx_rec.customer_trx_id);
2344 
2345 
2346 	/*----------------------------------------------+
2347         |  Insert the Transaction History Record	|
2348         +-----------------------------------------------*/
2349 
2350 	-- Fetch the new status and new event of the BR
2351 
2352 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
2353 			p_trx_rec	=>	l_trx_rec	,
2354 			p_action        =>	l_action	,
2355 			p_new_status	=>	l_trh_rec.status,
2356 			p_new_event	=>	l_trh_rec.event	);
2357 
2358 	l_trh_rec.trx_date		:=	trunc(l_batch_rec.batch_date)	;
2359 	l_trh_rec.gl_date		:=	trunc(l_batch_rec.gl_date)	;
2360 	l_trh_rec.transaction_history_id:=	NULL			;
2361 	l_trh_rec.current_record_flag	:=  	'Y'			;
2362 	l_trh_rec.prv_trx_history_id	:=  	NULL			;
2363 	l_trh_rec.posting_control_id    := 	-3           		;
2364 	l_trh_rec.gl_posted_date        :=  	NULL        		;
2365 	l_trh_rec.first_posted_record_flag  := 	'N'			;
2366 	l_trh_rec.created_from		:=	'ARBRMAIB'		;
2367 	l_trh_rec.batch_id		:=	p_batch_id		;
2368 
2369 
2370 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
2371 								 l_trh_rec.transaction_history_id);
2372 
2373 
2374 	/*----------------------------------------------+
2375         |  Populate LINK_TO_TRX_HISTORY_ID on the 	|
2376  	|  application that closes the BR for Factore	|
2377 	|  without recourse				|
2378         +-----------------------------------------------*/
2379 
2380 	IF	(l_batch_rec.remit_method_code = C_FACTORING	AND	l_batch_rec.with_recourse_flag = 'N')
2381 	THEN
2382 
2383 		AR_BILLS_MAINTAIN_LIB_PVT.Link_Application_History (l_trh_rec);
2384 
2385 	END IF;
2386 
2387 
2388 
2389 	/*-----------------------------------------------+
2390         |   Output parameter				 |
2391         +------------------------------------------------*/
2392 
2393 	p_status			:=	l_trh_rec.status	;
2394 
2395 
2396         IF PG_DEBUG in ('Y', 'C') THEN
2397            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Approve_BR_Remit ()- ');
2398         END IF;
2399 
2400 EXCEPTION
2401  	WHEN OTHERS THEN
2402    		IF PG_DEBUG in ('Y', 'C') THEN
2403    		   arp_util.debug('EXCEPTION OTHERS: AR_BILLS_MAINTAIN_PUB.Approve_BR_Remit');
2404 		   arp_util.debug( SQLCODE);
2405 		   arp_util.debug( SQLERRM);
2406 		END IF;
2407 		ROLLBACK TO Approve_BR_Remit_PVT;
2408 		RAISE;
2409 
2410 
2411 END Approve_BR_Remit;
2412 
2413 
2414 /*==============================================================================+
2415  | PROCEDURE                                                                 	|
2416  |    Cancel_BR				                                     	|
2417  |                                                                           	|
2418  | DESCRIPTION                                                               	|
2419  |    Cancels a BR							     	|
2420  |									  	|
2421  +==============================================================================*/
2422 
2423 
2424 PROCEDURE Cancel_BR (
2425 
2426            --   *****  Standard API parameters *****
2427 
2428                 p_api_version      		IN  	NUMBER					,
2429                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
2430                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
2431                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
2432                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
2433                 x_msg_count        		OUT NOCOPY 	NUMBER					,
2434                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
2435 
2436            --   *****  Input parameters  *****
2437 
2438 		p_customer_trx_id		IN  	NUMBER		,
2439 		p_cancel_date			IN  	DATE		,
2440 		p_cancel_gl_date		IN  	DATE		,
2441 		p_cancel_comments		IN  	VARCHAR2	,
2442 
2443 
2444            --   *****  Output parameters  *****
2445 
2446 		p_status			OUT NOCOPY 	VARCHAR2				)
2447 
2448 
2449 IS
2450 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Cancel_BR';
2451 		l_api_version			CONSTANT NUMBER		:=	1.0;
2452 
2453 		l_trh_rec			ar_transaction_history%ROWTYPE;
2454 		l_trx_rec			ra_customer_trx%ROWTYPE;
2455 		l_ps_rec			ar_payment_schedules%ROWTYPE;
2456 
2457 		l_acceptance_flag		VARCHAR2(1)	;
2458 
2459 		l_action			VARCHAR2(30)	;
2460 		l_trx_date			DATE		;
2461 		l_gl_date			DATE		;
2462 
2463 		l_gl_date_closed		DATE		;
2464 		l_actual_date_closed		DATE		;
2465                 l_mesg                          VARCHAR2(2000);
2466 
2467 
2468 BEGIN
2469 
2470 	IF PG_DEBUG in ('Y', 'C') THEN
2471 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Cancel_BR()+ ');
2472 	END IF;
2473 
2474 	x_msg_count				:=	NULL;
2475 	x_msg_data				:=	NULL;
2476        /*-----------------------------------------------+
2477         |   Standard start of API savepoint     	|
2478         +-----------------------------------------------*/
2479 
2480      	SAVEPOINT Cancel_BR_PVT;
2481 
2482        /*-----------------------------------------------+
2483         | Standard call to check for call compatibility |
2484         +-----------------------------------------------*/
2485 
2486         IF NOT FND_API.Compatible_API_Call( l_api_version	,
2487                                             p_api_version	,
2488                                             l_api_name		,
2489                                             G_PKG_NAME          )
2490         THEN
2491         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2492         END IF;
2493 
2494 
2495        /*--------------------------------------------------------------+
2496         |   Initialize message list if p_init_msg_list is set to TRUE  |
2497         +--------------------------------------------------------------*/
2498 
2499         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
2500  	             FND_MSG_PUB.initialize;
2501         END IF;
2502 
2503 
2504        /*-----------------------------------------------+
2505         |   Initialize return status to SUCCESS   	|
2506         +-----------------------------------------------*/
2507 
2508         x_return_status := FND_API.G_RET_STS_SUCCESS;
2509 
2510 
2511        /*-----------------------------------------------------------------------+
2512         |   ============  START OF API BODY - CANCEL BR  ===================  	|
2513         +-----------------------------------------------------------------------*/
2514 
2515 
2516 	/*-----------------------------------------------+
2517         |   Validate the action				|
2518         +-----------------------------------------------*/
2519 
2520 	l_action			:=	C_CANCEL;
2521 
2522 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
2523 		p_customer_trx_id	=>  	p_customer_trx_id		,
2524 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
2525 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
2526 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
2527 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
2528 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
2529 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
2530 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
2531 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
2532 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
2533 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
2534 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
2535 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
2536 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
2537 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
2538 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
2539 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
2540 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
2541 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
2542 
2543 
2544 	-- Do not continue if the action is not allowed for the BR
2545 
2546 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
2547 
2548 	IF	(C_ACTION_REC.cancel_flag	<>	'Y')
2549 	THEN
2550 		IF PG_DEBUG in ('Y', 'C') THEN
2551 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
2552 		END IF;
2553 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_CANCEL' );
2554 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
2555 		app_exception.raise_exception;
2556 	END IF;
2557 
2558 
2559 
2560         /*-----------------------------------------------+
2561         |   Data preparation 				|
2562         +-----------------------------------------------*/
2563 
2564 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
2565 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
2566 
2567 	l_trx_date			:=	trunc(p_cancel_date);
2568 	l_gl_date			:=	trunc(p_cancel_gl_date);
2569 
2570 
2571 	/*-----------------------------------------------+
2572         |   Data Defaulting				|
2573         +-----------------------------------------------*/
2574 
2575 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
2576 
2577 
2578        /*-----------------------------------------------+
2579         |   Data Validation				|
2580         +-----------------------------------------------*/
2581 
2582         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_CANCEL');
2583 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
2584 
2585 	l_trh_rec.trx_date		:=	l_trx_date	;
2586 	l_trh_rec.gl_date		:=	l_gl_date	;
2587 	l_trh_rec.comments		:=	p_cancel_comments;
2588 
2589         AR_BILLS_MAINTAIN_VAL_PVT.Validate_Cancel_BR (p_customer_trx_id);
2590 
2591 
2592 	/*-----------------------------------------------+
2593         |   BR Cancel	 				 |
2594         +------------------------------------------------*/
2595 
2596 	IF  	(l_trh_rec.status = C_PENDING_ACCEPTANCE)
2597 	THEN
2598 		l_acceptance_flag := 'Y';
2599 		l_trh_rec.postable_flag 	:= 	'N';
2600 		l_trh_rec.current_accounted_flag:=	'N';
2601 	ELSE
2602 		l_acceptance_flag := 'N';
2603 		l_trh_rec.postable_flag		:=	'Y';
2604 		l_trh_rec.current_accounted_flag:=	'Y';
2605 	END IF;
2606 
2607 	AR_BILLS_MAINTAIN_LIB_PVT.Reverse_Assignments_Adjustment (l_trh_rec, l_acceptance_flag);
2608 
2609 
2610 	/*----------------------------------------------+
2611         |  Insert the Transaction History Record	|
2612         +-----------------------------------------------*/
2613 
2614 	-- Fetch the new status and new event of the BR
2615 
2616 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
2617 			p_trx_rec	=>	l_trx_rec	,
2618 			p_action        =>	l_action	,
2619 			p_new_status	=>	l_trh_rec.status,
2620 			p_new_event	=>	l_trh_rec.event	);
2621 
2622 	l_trh_rec.transaction_history_id:=	NULL		;
2623 	l_trh_rec.current_record_flag	:=  	'Y'		;
2624 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
2625 	l_trh_rec.posting_control_id    := 	-3           	;
2626 	l_trh_rec.gl_posted_date        :=  	NULL        	;
2627 	l_trh_rec.first_posted_record_flag  := 	'N'		;
2628 	l_trh_rec.created_from		:=  	'ARBRMAIB'	;
2629 	l_trh_rec.batch_id		:=	NULL		;
2630 
2631 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
2632 								 l_trh_rec.transaction_history_id);
2633 
2634 
2635 	/*----------------------------------------------+
2636         |   Close the Payment Schedule of the BR	|
2637         +-----------------------------------------------*/
2638 
2639 	IF (l_acceptance_flag = 'N')
2640 	THEN
2641 		arp_ps_pkg.set_to_dummy (l_ps_rec);
2642 		AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
2643 		arp_ps_pkg.lock_p(l_ps_rec.payment_schedule_id);
2644 
2645 		arp_ps_util.get_closed_dates (
2646 			l_ps_rec.payment_schedule_id	,
2647                         l_trh_rec.trx_date		,
2648                         l_trh_rec.gl_date		,
2649                         l_gl_date_closed		,
2650                         l_actual_date_closed, 'BR' 	);
2651 
2652 		l_ps_rec.status				:=	'CL'			;
2653 	 	l_ps_rec.amount_due_remaining        	:= 	0			;
2654                 l_ps_rec.acctd_amount_due_remaining  	:= 	0			;
2655                 l_ps_rec.amount_line_items_remaining 	:= 	0			;
2656                 l_ps_rec.receivables_charges_remaining 	:= 	0			;
2657                 l_ps_rec.freight_remaining  		:= 	0			;
2658                 l_ps_rec.tax_remaining      		:= 	0			;
2659                 l_ps_rec.actual_date_closed 		:= 	l_actual_date_closed	;
2660                 l_ps_rec.gl_date_closed 		:= 	l_gl_date_closed	;
2661 
2662 
2663 
2664 		arp_ps_pkg.update_p (l_ps_rec, l_ps_rec.payment_schedule_id);
2665 	END IF;
2666 
2667 	/*-----------------------------------------------+
2668         |   Output parameter				 |
2669         +------------------------------------------------*/
2670 
2671 	p_status		:=	l_trh_rec.status	;
2672 
2673 
2674        /*-----------------------------------------------+
2675         |   Standard check of p_commit   		|
2676         +-----------------------------------------------*/
2677 
2678         IF FND_API.To_Boolean( p_commit )
2679         THEN
2680             IF PG_DEBUG in ('Y', 'C') THEN
2681                arp_util.debug( 'committing');
2682             END IF;
2683             Commit;
2684         END IF;
2685 
2686         IF PG_DEBUG in ('Y', 'C') THEN
2687            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Cancel_BR()- ');
2688         END IF;
2689 
2690 
2691 EXCEPTION
2692        WHEN FND_API.G_EXC_ERROR THEN
2693                 IF PG_DEBUG in ('Y', 'C') THEN
2694                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
2695                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
2696                 END IF;
2697                 ROLLBACK TO Cancel_BR_PVT;
2698                 x_return_status := FND_API.G_RET_STS_ERROR ;
2699   	        IF PG_DEBUG in ('Y', 'C') THEN
2700   	           arp_util.debug( 'Exception Error');
2701   	        END IF;
2702 		RAISE;
2703 
2704 
2705         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2706                 IF PG_DEBUG in ('Y', 'C') THEN
2707                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
2708                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
2709                 END IF;
2710                 ROLLBACK TO Cancel_BR_PVT;
2711                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2712 		IF PG_DEBUG in ('Y', 'C') THEN
2713 		   arp_util.debug( 'Exception Unexpected Error');
2714 		END IF;
2715 		RAISE;
2716 
2717 
2718         WHEN OTHERS THEN
2719                /*-------------------------------------------------------+
2720                 |  Handle application errors that result from trapable  |
2721                 |  error conditions. The error messages have already    |
2722                 |  been put on the error stack.                         |
2723                 +-------------------------------------------------------*/
2724 
2725 		IF PG_DEBUG in ('Y', 'C') THEN
2726 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
2727                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
2728                 END IF;
2729 
2730 		IF (SQLCODE = -20001)
2731                 THEN
2732                       	ROLLBACK TO Cancel_BR_PVT;
2733                       	x_return_status := FND_API.G_RET_STS_ERROR ;
2734                       	RAISE;
2735                 ELSE
2736 		      	NULL;
2737                 END IF;
2738 
2739                 ROLLBACK TO Cancel_BR_PVT;
2740                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2741 		RAISE;
2742 
2743 END Cancel_BR;
2744 
2745 
2746 /*==============================================================================+
2747  | PROCEDURE                                                                 	|
2748  |    Unpaid_BR				                                     	|
2749  |                                                                           	|
2750  | DESCRIPTION                                                               	|
2751  |    Unpaids a BR							     	|
2752  |									  	|
2753  +==============================================================================*/
2754 
2755 
2756 PROCEDURE Unpaid_BR (
2757 
2758            --   *****  Standard API parameters *****
2759 
2760                 p_api_version      		IN  	NUMBER					,
2761                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
2762                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
2763                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
2764                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
2765                 x_msg_count        		OUT NOCOPY 	NUMBER					,
2766                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
2767 
2768 
2769            --   *****  Input parameters  *****
2770 
2771 		p_customer_trx_id		IN  	NUMBER		,
2772 		p_unpaid_date			IN  	DATE		,
2773 		p_unpaid_gl_date		IN  	DATE		,
2774 		p_unpaid_reason			IN  	VARCHAR2	,
2775 		p_unpaid_comments		IN  	VARCHAR2	,
2776 
2777            --   *****  Output parameters  *****
2778 
2779 		p_status			OUT NOCOPY 	VARCHAR2				)
2780 
2781 IS
2782 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Unpaid_BR';
2783 		l_api_version			CONSTANT NUMBER		:=	1.0;
2784 
2785 		l_trh_rec			ar_transaction_history%ROWTYPE;
2786 		l_ps_rec			ar_payment_schedules%ROWTYPE;
2787 		l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE;
2788 
2789 		l_trx_date			DATE	;
2790 		l_gl_date			DATE	;
2791 		l_action			VARCHAR2(30);
2792                 l_mesg                          VARCHAR2(2000);
2793 
2794 BEGIN
2795 
2796 	IF PG_DEBUG in ('Y', 'C') THEN
2797 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Unpaid_BR()+ ');
2798 	END IF;
2799 
2800 	x_msg_count				:=	NULL;
2801 	x_msg_data				:=	NULL;
2802 
2803        /*-----------------------------------------------+
2804         |   Standard start of API savepoint     	|
2805         +-----------------------------------------------*/
2806 
2807      	SAVEPOINT Unpaid_BR_PVT;
2808 
2809        /*-----------------------------------------------+
2810         | Standard call to check for call compatibility |
2811         +-----------------------------------------------*/
2812 
2813         IF NOT FND_API.Compatible_API_Call( l_api_version	,
2814                                             p_api_version	,
2815                                             l_api_name		,
2816                                             G_PKG_NAME          )
2817         THEN
2818         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2819         END IF;
2820 
2821 
2822        /*--------------------------------------------------------------+
2823         |   Initialize message list if p_init_msg_list is set to TRUE  |
2824         +--------------------------------------------------------------*/
2825 
2826         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
2827  	             FND_MSG_PUB.initialize;
2828         END IF;
2829 
2830 
2831        /*-----------------------------------------------+
2832         |   Initialize return status to SUCCESS   	|
2833         +-----------------------------------------------*/
2834 
2835         x_return_status := FND_API.G_RET_STS_SUCCESS;
2836 
2837 
2838        /*-----------------------------------------------------------------------+
2839         |   ============  START OF API BODY - UNPAID BR  ===================  	|
2840         +-----------------------------------------------------------------------*/
2841 
2842 
2843 	/*-----------------------------------------------+
2844         |   Validate the action				|
2845         +-----------------------------------------------*/
2846 
2847 	l_action			:=	C_UNPAID;
2848 
2849 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
2850 		p_customer_trx_id	=>  	p_customer_trx_id		,
2851 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
2852 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
2853 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
2854 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
2855 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
2856 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
2857 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
2858 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
2859 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
2860 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
2861 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
2862 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
2863 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
2864 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
2865 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
2866 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
2867 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
2868 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
2869 
2870 
2871 	-- Do not continue if the action is not allowed for the BR
2872 
2873 	ARP_CT_PKG.lock_fetch_p (l_trx_rec, p_customer_trx_id);
2874 
2875 	IF	(C_ACTION_REC.unpaid_flag	<>	'Y')
2876 	THEN
2877 		IF PG_DEBUG in ('Y', 'C') THEN
2878 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
2879 		END IF;
2880 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_UNPAID' );
2881 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
2882 		app_exception.raise_exception;
2883 	END IF;
2884 
2885 
2886         /*-----------------------------------------------+
2887         |   Data preparation 				|
2888         +-----------------------------------------------*/
2889 
2890 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
2891 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
2892 
2893 	l_trx_date			:=	trunc(p_unpaid_date);
2894 	l_gl_date			:=	trunc(p_unpaid_gl_date);
2895 
2896 
2897 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
2898 
2899 	/*-----------------------------------------------+
2900         |   Data Defaulting				|
2901         +-----------------------------------------------*/
2902 
2903 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
2904 
2905 
2906        /*-----------------------------------------------+
2907         |   Data Validation				|
2908         +-----------------------------------------------*/
2909 
2910         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_UNPAID');
2911 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
2912 
2913 	l_trh_rec.trx_date		:=	l_trx_date	;
2914 	l_trh_rec.gl_date		:=	l_gl_date	;
2915 	l_trh_rec.comments		:=	p_unpaid_comments;
2916 
2917         AR_BILLS_MAINTAIN_VAL_PVT.Validate_Unpaid_BR (l_trh_rec, p_unpaid_reason);
2918 
2919 
2920 	/*-----------------------------------------------+
2921         |   BR Unpaid	 				 |
2922         +------------------------------------------------*/
2923 
2924 	AR_BILLS_MAINTAIN_LIB_PVT.Unpaid (l_trh_rec, l_ps_rec.payment_schedule_id, l_trx_rec.remittance_batch_id, p_unpaid_reason);
2925 
2926 
2927 	/*----------------------------------------------+
2928         |  Set the Unpaid Flag to 'Y' in the BR Header	|
2929         +-----------------------------------------------*/
2930 
2931 	l_trx_rec.br_unpaid_flag	:=	'Y';
2932 
2933 	/*----------------------------------------------+
2934         |   Remove the Remittance Information of the 	|
2935 	|   BR Header if it exists			|
2936         +-----------------------------------------------*/
2937 
2938 	l_trx_rec.receipt_method_id		:=	NULL;
2939 
2940 
2941 	ARP_PROCESS_BR_HEADER.update_header  (l_trx_rec, l_trx_rec.customer_trx_id);
2942 
2943 
2944 	/*----------------------------------------------+
2945         |  Insert the Transaction History Record	|
2946         +-----------------------------------------------*/
2947 
2948 	-- Fetch the new status and new event of the BR
2949 
2950 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
2951 			p_trx_rec	=>	l_trx_rec	,
2952 			p_action        =>	l_action	,
2953 			p_new_status	=>	l_trh_rec.status,
2954 			p_new_event	=>	l_trh_rec.event	);
2955 
2956 	l_trh_rec.transaction_history_id:=	NULL		;
2957 	l_trh_rec.current_record_flag	:=  	'Y'		;
2958 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
2959 	l_trh_rec.posting_control_id    := 	-3           	;
2960 	l_trh_rec.gl_posted_date        :=  	NULL        	;
2961 	l_trh_rec.first_posted_record_flag  := 	'N'		;
2962 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
2963 	l_trh_rec.batch_id		:=	NULL		;
2964 
2965 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
2966 
2967 
2968 	/*-----------------------------------------------+
2969         |   Output parameter				 |
2970         +------------------------------------------------*/
2971 
2972 	p_status			:=	l_trh_rec.status	;
2973 
2974 
2975        /*-----------------------------------------------+
2976         |   Standard check of p_commit   		|
2977         +-----------------------------------------------*/
2978 
2979         IF FND_API.To_Boolean( p_commit )
2980         THEN
2981             IF PG_DEBUG in ('Y', 'C') THEN
2982                arp_util.debug( 'committing');
2983             END IF;
2984             Commit;
2985         END IF;
2986 
2987         IF PG_DEBUG in ('Y', 'C') THEN
2988            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Unpaid_BR()- ');
2989         END IF;
2990 
2991 
2992 EXCEPTION
2993        WHEN FND_API.G_EXC_ERROR THEN
2994                 IF PG_DEBUG in ('Y', 'C') THEN
2995                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
2996                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
2997                 END IF;
2998                 ROLLBACK TO Unpaid_BR_PVT;
2999                 x_return_status := FND_API.G_RET_STS_ERROR ;
3000   	        IF PG_DEBUG in ('Y', 'C') THEN
3001   	           arp_util.debug( 'Exception Error');
3002   	        END IF;
3003 		RAISE;
3004 
3005 
3006         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3007                 IF PG_DEBUG in ('Y', 'C') THEN
3008                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3009                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3010                 END IF;
3011                 ROLLBACK TO Unpaid_BR_PVT;
3012                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3013 		IF PG_DEBUG in ('Y', 'C') THEN
3014 		   arp_util.debug( 'Exception Unexpected Error');
3015 		END IF;
3016 		RAISE;
3017 
3018 
3019         WHEN OTHERS THEN
3020                /*-------------------------------------------------------+
3021                 |  Handle application errors that result from trapable  |
3022                 |  error conditions. The error messages have already    |
3023                 |  been put on the error stack.                         |
3024                 +-------------------------------------------------------*/
3025 
3026 		IF PG_DEBUG in ('Y', 'C') THEN
3027 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
3028                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3029                 END IF;
3030 
3031 		IF (SQLCODE = -20001)
3032                 THEN
3033     		      	ROLLBACK TO Unpaid_BR_PVT;
3034                       	x_return_status := FND_API.G_RET_STS_ERROR ;
3035 			RAISE;
3036                 ELSE
3037                       	NULL;
3038                 END IF;
3039 
3040                 ROLLBACK TO Unpaid_BR_PVT;
3041                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3042 		RAISE;
3043 
3044 END Unpaid_BR;
3045 
3046 
3047 /*==============================================================================+
3048  | PROCEDURE                                                                 	|
3049  |    Endorse_BR			                                     	|
3050  |                                                                           	|
3051  | DESCRIPTION                                                               	|
3052  |   Endorses a BR							     	|
3053  |									  	|
3054  +==============================================================================*/
3055 
3056 
3057 PROCEDURE Endorse_BR (
3058 
3059            --   *****  Standard API parameters *****
3060 
3061                 p_api_version  			IN  	NUMBER					,
3062                 p_init_msg_list 		IN  	VARCHAR2 := FND_API.G_TRUE		,
3063                 p_commit        		IN  	VARCHAR2 := FND_API.G_FALSE		,
3064                 p_validation_level		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
3065                 x_return_status   		OUT NOCOPY 	VARCHAR2				,
3066                 x_msg_count       		OUT NOCOPY 	NUMBER					,
3067                 x_msg_data        		OUT NOCOPY 	VARCHAR2				,
3068 
3069            --   *****  Input parameters  *****
3070 
3071 		p_customer_trx_id		IN  	NUMBER		,
3072 		p_endorse_date			IN  	DATE		,
3073 		p_endorse_gl_date		IN  	DATE		,
3074 		p_adjustment_activity_id 	IN  	NUMBER		,
3075 		p_endorse_comments		IN  	VARCHAR2	,
3076 		p_recourse_flag			IN  	VARCHAR2	,
3077 
3078            --   *****  Output parameters  *****
3079 
3080 		p_status			OUT NOCOPY 	VARCHAR2) IS
3081 
3082   l_api_name			CONSTANT VARCHAR2(20)	:=	'Endorse_BR';
3083   l_api_version			CONSTANT NUMBER		:=	1.0;
3084   l_trh_rec			ar_transaction_history%ROWTYPE;
3085   l_ps_rec			ar_payment_schedules%ROWTYPE;
3086   l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE;
3087   l_action			VARCHAR2(30);
3088   new_adj_id             	ar_adjustments.adjustment_id%type;
3089   l_move_deferred_tax		VARCHAR2(1)		:=	'N';
3090   l_trx_date			DATE;
3091   l_gl_date			DATE;
3092   l_mesg                        VARCHAR2(2000);
3093   -- Added for bug # 2712726
3094   -- ORASHID
3095   --
3096   l_nocopy_payment_schedule_id  ar_payment_schedules.payment_schedule_id%TYPE;
3097 
3098 BEGIN
3099 
3100 	IF PG_DEBUG in ('Y', 'C') THEN
3101 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Endorse_BR()+ ');
3102 	END IF;
3103 
3104 	x_msg_count				:=	NULL;
3105 	x_msg_data				:=	NULL;
3106 
3107        /*-----------------------------------------------+
3108         |   Standard start of API savepoint     	|
3109         +-----------------------------------------------*/
3110 
3111      	SAVEPOINT Endorse_BR_PVT;
3112 
3113        /*-----------------------------------------------+
3114         | Standard call to check for call compatibility |
3115         +-----------------------------------------------*/
3116 
3117         IF NOT FND_API.Compatible_API_Call( l_api_version	,
3118                                             p_api_version	,
3119                                             l_api_name		,
3120                                             G_PKG_NAME          )
3121         THEN
3122         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3123         END IF;
3124 
3125 
3126        /*--------------------------------------------------------------+
3127         |   Initialize message list if p_init_msg_list is set to TRUE  |
3128         +--------------------------------------------------------------*/
3129 
3130         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
3131  	             FND_MSG_PUB.initialize;
3132         END IF;
3133 
3134 
3135        /*-----------------------------------------------+
3136         |   Initialize return status to SUCCESS   	|
3137         +-----------------------------------------------*/
3138 
3139         x_return_status := FND_API.G_RET_STS_SUCCESS;
3140 
3141 
3142        /*-----------------------------------------------------------------------+
3143         |   ============  START OF API BODY - ENDORSE BR  ===================  	|
3144         +-----------------------------------------------------------------------*/
3145 
3146 
3147 	/*-----------------------------------------------+
3148         |   Validate the action				|
3149         +-----------------------------------------------*/
3150 
3151 	l_action			:=	C_ENDORSE;
3152 
3153 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
3154 		p_customer_trx_id	=>  	p_customer_trx_id		,
3155 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
3156 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
3157 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
3158 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
3159 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
3160 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
3161 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
3162 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
3163 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
3164 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
3165 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
3166 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
3167 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
3168 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
3169 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
3170 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
3171 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
3172 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
3173 
3174 	-- Do not continue if the action is not allowed for the BR
3175 
3176 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
3177 
3178 	IF	(C_ACTION_REC.endorse_flag	<>	'Y')
3179 	THEN
3180 		IF PG_DEBUG in ('Y', 'C') THEN
3181 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
3182 		END IF;
3183 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_ENDORSE' );
3184 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
3185 		app_exception.raise_exception;
3186 	END IF;
3187 
3188 
3189 	/*-----------------------------------------------+
3190         |   Data preparation 				|
3191         +-----------------------------------------------*/
3192 
3193 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
3194 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
3195 
3196 	l_trx_date		:=	trunc(p_endorse_date);
3197 	l_gl_date		:=	trunc(p_endorse_gl_date);
3198 
3199 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
3200 
3201         -- Modified for bug # 2712726
3202         -- ORASHID
3203         --
3204         l_nocopy_payment_schedule_id := l_ps_rec.payment_schedule_id;
3205 	arp_ps_pkg.fetch_p(l_nocopy_payment_schedule_id, l_ps_rec);
3206 
3207 
3208 	/*-----------------------------------------------+
3209         |   Data Defaulting				|
3210         +-----------------------------------------------*/
3211 
3212 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
3213 
3214 
3215 	/*----------------------------------------------+
3216         |   Data Validation				|
3217         +-----------------------------------------------*/
3218 
3219         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_ENDORSE');
3220 	AR_BILLS_MAINTAIN_VAL_PVT.Validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
3221 
3222 	l_trh_rec.trx_date		:=	l_trx_date	;
3223 	l_trh_rec.gl_date		:=	l_gl_date	;
3224 	l_trh_rec.comments		:=	p_endorse_comments;
3225 
3226 	AR_BILLS_MAINTAIN_VAL_PVT.Validate_Adj_Activity_ID (p_adjustment_activity_id);
3227 
3228 
3229 	/*----------------------------------------------+
3230         |   Endorsement					|
3231         +-----------------------------------------------*/
3232 
3233 
3234 	IF	(p_recourse_flag	=	'Y')
3235 	THEN
3236 
3237 		/*----------------------------------------------+
3238 	        |   Endorsement with recourse			|
3239 	        +-----------------------------------------------*/
3240 
3241 		l_action	:=	C_ENDORSE_RECOURSE;
3242 
3243 
3244 		/*----------------------------------------------+
3245 	        |   Create an adjustment with a status W :	|
3246 		|   Waiting for approval			|
3247 	        +-----------------------------------------------*/
3248 
3249 		AR_BILLS_MAINTAIN_LIB_PVT.Create_Adjustment   (
3250 					l_trh_rec			,
3251 					p_customer_trx_id		,
3252 					l_ps_rec			,
3253 					l_ps_rec.amount_due_original	,
3254 					p_adjustment_activity_id	,
3255 					'W'				,
3256 					l_move_deferred_tax		,
3257 					new_adj_id			);
3258 
3259 		/*----------------------------------------------+
3260 	        |    Updates the Payment Schedule of the BR 	|
3261 		|    with the Adjustment Information		|
3262         	+-----------------------------------------------*/
3263 
3264 		AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, 'ADJUSTMENT', new_adj_id);
3265 
3266 	ELSE
3267 
3268 		/*----------------------------------------------+
3269 	        |   Endorsement without recourse		|
3270 	        +-----------------------------------------------*/
3271 
3272 		l_action	:=	C_ENDORSE;
3273 
3274 
3275 		IF	(l_ps_rec.tax_remaining IS NOT NULL	and	l_ps_rec.tax_remaining <> 0)
3276 		THEN
3277 			l_move_deferred_tax	:=	'Y';
3278 		END IF;
3279 
3280 		/*----------------------------------------------+
3281 	        |   Create an adjustment with a status A :	|
3282 		|   Approved					|
3283 	        +-----------------------------------------------*/
3284 
3285 		AR_BILLS_MAINTAIN_LIB_PVT.Create_Adjustment   (
3286 					l_trh_rec			,
3287 					p_customer_trx_id		,
3288 					l_ps_rec			,
3289 					l_ps_rec.amount_due_original	,
3290 					p_adjustment_activity_id	,
3291 					'A'				,
3292 					l_move_deferred_tax		,
3293 					new_adj_id			);
3294 
3295 
3296 		/*----------------------------------------------+
3297 	        |  Insert the first Transaction History Record	|
3298 	        +-----------------------------------------------*/
3299 
3300 		-- Fetch the new status and new event of the BR
3301 
3302 		AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
3303 			p_trx_rec	=>	l_trx_rec	,
3304 			p_action        =>	l_action	,
3305 			p_new_status	=>	l_trh_rec.status,
3306 			p_new_event	=>	l_trh_rec.event	);
3307 
3308 		l_trh_rec.transaction_history_id:=	NULL		;
3309 		l_trh_rec.current_record_flag	:=  	'Y'		;
3310 		l_trh_rec.prv_trx_history_id	:=  	NULL		;
3311 		l_trh_rec.posting_control_id    := 	-3           	;
3312 		l_trh_rec.gl_posted_date        :=  	NULL        	;
3313 		l_trh_rec.first_posted_record_flag  := 	'N'		;
3314 		l_trh_rec.created_from		:=	'ARBRMAIB'	;
3315 		l_trh_rec.postable_flag		:=	'N'		;
3316 		l_trh_rec.current_accounted_flag:=  	'N'		;
3317 
3318 		arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
3319 
3320 	END IF;
3321 
3322 
3323 	/*----------------------------------------------+
3324         |  Insert the Transaction History Record	|
3325         +-----------------------------------------------*/
3326 
3327 	-- Fetch the new status and new event of the BR
3328 
3329 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
3330 			p_trx_rec	=>	l_trx_rec	,
3331 			p_action        =>	l_action	,
3332 			p_new_status	=>	l_trh_rec.status,
3333 			p_new_event	=>	l_trh_rec.event	);
3334 
3335 	l_trh_rec.transaction_history_id:=	NULL		;
3336 	l_trh_rec.current_record_flag	:=  	'Y'		;
3337 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
3338 	l_trh_rec.posting_control_id    := 	-3           	;
3339 	l_trh_rec.gl_posted_date        :=  	NULL        	;
3340 	l_trh_rec.first_posted_record_flag  := 	'N'		;
3341 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
3342 	l_trh_rec.postable_flag		:=	'N'		;
3343 	l_trh_rec.current_accounted_flag:=  	'N'		;
3344 
3345 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
3346 
3347 
3348 	/*-----------------------------------------------+
3349         |   Output parameter				 |
3350         +------------------------------------------------*/
3351 
3352 	p_status			:=	l_trh_rec.status	;
3353 
3354        /*-----------------------------------------------+
3355         |   Standard check of p_commit   		|
3356         +-----------------------------------------------*/
3357 
3358         IF FND_API.To_Boolean( p_commit )
3359         THEN
3360             IF PG_DEBUG in ('Y', 'C') THEN
3361                arp_util.debug( 'committing');
3362             END IF;
3363             Commit;
3364         END IF;
3365 
3366         IF PG_DEBUG in ('Y', 'C') THEN
3367            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Endorse_BR()- ');
3368         END IF;
3369 
3370 
3371 EXCEPTION
3372        WHEN FND_API.G_EXC_ERROR THEN
3373                 IF PG_DEBUG in ('Y', 'C') THEN
3374                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3375                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3376                 END IF;
3377                 ROLLBACK TO Endorse_BR_PVT;
3378                 x_return_status := FND_API.G_RET_STS_ERROR ;
3379   	        IF PG_DEBUG in ('Y', 'C') THEN
3380   	           arp_util.debug( 'Exception Error');
3381   	        END IF;
3382 		RAISE;
3383 
3384         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3385                 IF PG_DEBUG in ('Y', 'C') THEN
3386                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3387                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3388                 END IF;
3389                 ROLLBACK TO Endorse_BR_PVT;
3390                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3391 		IF PG_DEBUG in ('Y', 'C') THEN
3392 		   arp_util.debug( 'Exception Unexpected Error');
3393 		END IF;
3394 		RAISE;
3395 
3396 
3397         WHEN OTHERS THEN
3398                /*-------------------------------------------------------+
3399                 |  Handle application errors that result from trapable  |
3400                 |  error conditions. The error messages have already    |
3401                 |  been put on the error stack.                         |
3402                 +-------------------------------------------------------*/
3403 
3404 		IF PG_DEBUG in ('Y', 'C') THEN
3405 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
3406                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3407                 END IF;
3408 
3409 		IF (SQLCODE = -20001)
3410                 THEN
3411 	    		ROLLBACK TO Endorse_BR_PVT;
3412                       	x_return_status := FND_API.G_RET_STS_ERROR ;
3413                       	RAISE;
3414                 ELSE
3415 		      	NULL;
3416                 END IF;
3417 
3418                 ROLLBACK TO Endorse_BR_PVT;
3419                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3420 		RAISE;
3421 
3422 
3423 END Endorse_BR;
3424 
3425 
3426 /*==============================================================================+
3427  | PROCEDURE                                                                 	|
3428  |    Protest_BR			                                     	|
3429  |                                                                           	|
3430  | DESCRIPTION                                                               	|
3431  |    Protest a BR							     	|
3432  |									  	|
3433  +==============================================================================*/
3434 
3435 
3436 PROCEDURE Protest_BR (
3437 
3438            --   *****  Standard API parameters *****
3439 
3440                 p_api_version      		IN  	NUMBER					,
3441                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
3442                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
3443                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
3444                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
3445                 x_msg_count        		OUT NOCOPY 	NUMBER					,
3446                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
3447 
3448            --   *****  Input parameters  *****
3449 
3450 		p_customer_trx_id		IN  	NUMBER		,
3451 		p_protest_date			IN  	DATE		,
3452 		p_protest_comments		IN  	VARCHAR2	,
3453 
3454            --   *****  Output parameters  *****
3455 
3456 		p_status			OUT NOCOPY 	VARCHAR2				)
3457 
3458 
3459 IS
3460 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Protest_BR';
3461 		l_api_version			CONSTANT NUMBER		:=	1.0;
3462 
3463 		l_trh_rec			ar_transaction_history%ROWTYPE;
3464 		l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE;
3465 		l_action			VARCHAR2(30);
3466 		l_trx_date			DATE;
3467                 l_mesg                          VARCHAR2(2000);
3468 
3469 BEGIN
3470 
3471 	IF PG_DEBUG in ('Y', 'C') THEN
3472 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Protest_BR()+ ');
3473 	END IF;
3474 
3475 	x_msg_count				:=	NULL;
3476 	x_msg_data				:=	NULL;
3477 
3478        /*-----------------------------------------------+
3479         |   Standard start of API savepoint     	|
3480         +-----------------------------------------------*/
3481 
3482      	SAVEPOINT Protest_BR_PVT;
3483 
3484        /*-----------------------------------------------+
3485         | Standard call to check for call compatibility |
3486         +-----------------------------------------------*/
3487 
3488         IF NOT FND_API.Compatible_API_Call( l_api_version	,
3489                                             p_api_version	,
3490                                             l_api_name		,
3491                                             G_PKG_NAME          )
3492         THEN
3493         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3494         END IF;
3495 
3496 
3497        /*--------------------------------------------------------------+
3498         |   Initialize message list if p_init_msg_list is set to TRUE  |
3499         +--------------------------------------------------------------*/
3500 
3501         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
3502  	             FND_MSG_PUB.initialize;
3503         END IF;
3504 
3505 
3506        /*-----------------------------------------------+
3507         |   Initialize return status to SUCCESS   	|
3508         +-----------------------------------------------*/
3509 
3510         x_return_status := FND_API.G_RET_STS_SUCCESS;
3511 
3512 
3513        /*-----------------------------------------------------------------------+
3514         |   ============  START OF API BODY - PROTEST BR  ===================  	|
3515         +-----------------------------------------------------------------------*/
3516 
3517 
3518 	/*-----------------------------------------------+
3519         |   Validate the action				|
3520         +-----------------------------------------------*/
3521 
3522 	l_action			:=	C_PROTEST;
3523 
3524 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
3525 		p_customer_trx_id	=>  	p_customer_trx_id		,
3526 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
3527 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
3528 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
3529 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
3530 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
3531 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
3532 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
3533 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
3534 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
3535 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
3536 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
3537 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
3538 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
3539 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
3540 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
3541 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
3542 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
3543 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
3544 
3545 
3546 	-- Do not continue if the action is not allowed for the BR
3547 
3548 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
3549 
3550 	IF	(C_ACTION_REC.protest_flag	<>	'Y')
3551 	THEN
3552 		IF PG_DEBUG in ('Y', 'C') THEN
3553 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
3554 		END IF;
3555 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_PROTEST' );
3556 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
3557 		app_exception.raise_exception;
3558 	END IF;
3559 
3560 
3561 	/*-----------------------------------------------+
3562         |   Data preparation 				|
3563         +-----------------------------------------------*/
3564 
3565 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
3566 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
3567 
3568 	l_trx_date			:=	trunc(nvl(p_protest_date, sysdate));
3569 
3570 
3571 	/*-----------------------------------------------+
3572         |   Data validation				|
3573         +-----------------------------------------------*/
3574 
3575         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_PROTEST');
3576 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, NULL, l_trh_rec, l_mesg);
3577 
3578 	l_trh_rec.trx_date		:=	l_trx_date;
3579 	l_trh_rec.comments		:=	p_protest_comments;
3580 
3581 
3582 	/*----------------------------------------------+
3583         |  Insert the Transaction History Record	|
3584         +-----------------------------------------------*/
3585 
3586 	-- Fetch the new status and new event of the BR
3587 
3588 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
3589 			p_trx_rec	=>	l_trx_rec	,
3590 			p_action        =>	l_action	,
3591 			p_new_status	=>	l_trh_rec.status,
3592 			p_new_event	=>	l_trh_rec.event	);
3593 
3594 	l_trh_rec.transaction_history_id:=	NULL		;
3595 	l_trh_rec.current_record_flag	:=  	'Y'		;
3596 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
3597 	l_trh_rec.posting_control_id    := 	-3           	;
3598 	l_trh_rec.gl_posted_date        :=  	NULL        	;
3599 	l_trh_rec.first_posted_record_flag  := 	'N'		;
3600 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
3601 	l_trh_rec.postable_flag		:=	'N'		;
3602 	l_trh_rec.current_accounted_flag:=  	'N'		;
3603 
3604 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec, l_trh_rec.transaction_history_id);
3605 
3606 
3607 	/*-----------------------------------------------+
3608         |   Output parameter				 |
3609         +------------------------------------------------*/
3610 
3611 	p_status			:=	l_trh_rec.status	;
3612 
3613 
3614        /*-----------------------------------------------+
3615         |   Standard check of p_commit   		|
3616         +-----------------------------------------------*/
3617 
3618         IF FND_API.To_Boolean( p_commit )
3619         THEN
3620             IF PG_DEBUG in ('Y', 'C') THEN
3621                arp_util.debug( 'committing');
3622             END IF;
3623             Commit;
3624         END IF;
3625 
3626         IF PG_DEBUG in ('Y', 'C') THEN
3627            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Protest_BR()- ');
3628         END IF;
3629 
3630 
3631 EXCEPTION
3632        WHEN FND_API.G_EXC_ERROR THEN
3633                 IF PG_DEBUG in ('Y', 'C') THEN
3634                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3635                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3636                 END IF;
3637                 ROLLBACK TO Protest_BR_PVT;
3638                 x_return_status := FND_API.G_RET_STS_ERROR ;
3639   	        IF PG_DEBUG in ('Y', 'C') THEN
3640   	           arp_util.debug( 'Exception Error');
3641   	        END IF;
3642 		RAISE;
3643 
3644         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3645                 IF PG_DEBUG in ('Y', 'C') THEN
3646                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3647                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3648                 END IF;
3649                 ROLLBACK TO Protest_BR_PVT;
3650                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3651 		IF PG_DEBUG in ('Y', 'C') THEN
3652 		   arp_util.debug( 'Exception Unexpected Error');
3653 		END IF;
3654 		RAISE;
3655 
3656 
3657         WHEN OTHERS THEN
3658                /*-------------------------------------------------------+
3659                 |  Handle application errors that result from trapable  |
3660                 |  error conditions. The error messages have already    |
3661                 |  been put on the error stack.                         |
3662                 +-------------------------------------------------------*/
3663 
3664 		IF PG_DEBUG in ('Y', 'C') THEN
3665 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
3666                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3667                 END IF;
3668 
3669 		IF (SQLCODE = -20001)
3670                 THEN
3671 	               	ROLLBACK TO Protest_BR_PVT;
3672                       	x_return_status := FND_API.G_RET_STS_ERROR ;
3673                       	RAISE;
3674                 ELSE
3675 		      	NULL;
3676                 END IF;
3677 
3678                 ROLLBACK TO Protest_BR_PVT;
3679                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3680 
3681 		RAISE;
3682 
3683 END Protest_BR;
3684 
3685 
3686 /*==============================================================================+
3687  | PROCEDURE                                                                 	|
3688  |    Restate_BR			                                     	|
3689  |                                                                           	|
3690  | DESCRIPTION                                                               	|
3691  |    Restates a BR							     	|
3692  |									  	|
3693  +==============================================================================*/
3694 
3695 
3696 PROCEDURE Restate_BR (
3697 
3698            --   *****  Standard API parameters *****
3699 
3700                 p_api_version   		IN  	NUMBER					,
3701                 p_init_msg_list 		IN  	VARCHAR2 := FND_API.G_TRUE		,
3702                 p_commit        		IN  	VARCHAR2 := FND_API.G_FALSE		,
3703                 p_validation_level		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
3704                 x_return_status   		OUT NOCOPY 	VARCHAR2				,
3705                 x_msg_count       		OUT NOCOPY 	NUMBER					,
3706                 x_msg_data        		OUT NOCOPY 	VARCHAR2				,
3707 
3708 
3709            --   *****  Input parameters  *****
3710 
3711 		p_customer_trx_id		IN  	NUMBER		,
3712 		p_restatement_date		IN  	DATE		,
3713 		p_restatement_gl_date		IN  	DATE		,
3714 		p_restatement_comments		IN  	VARCHAR2	,
3715 
3716 
3717            --   *****  Output parameters  *****
3718 
3719 		p_status			OUT NOCOPY VARCHAR2					)
3720 
3721 IS
3722 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Restate_BR';
3723 		l_api_version			CONSTANT NUMBER		:=	1.0;
3724 
3725 		l_trh_rec			ar_transaction_history%ROWTYPE	;
3726 		l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE		;
3727 		l_action			VARCHAR2(30)			;
3728 		l_trx_date			DATE				;
3729 		l_gl_date			DATE				;
3730                 l_mesg                          VARCHAR2(2000);
3731 
3732 BEGIN
3733 
3734 	IF PG_DEBUG in ('Y', 'C') THEN
3735 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Restate_BR()+ ');
3736 	END IF;
3737 
3738 	x_msg_count				:=	NULL;
3739 	x_msg_data				:=	NULL;
3740 
3741        /*-----------------------------------------------+
3742         |   Standard start of API savepoint     	|
3743         +-----------------------------------------------*/
3744 
3745      	SAVEPOINT Restate_BR_PVT;
3746 
3747        /*-----------------------------------------------+
3748         | Standard call to check for call compatibility |
3749         +-----------------------------------------------*/
3750 
3751         IF NOT FND_API.Compatible_API_Call( l_api_version	,
3752                                             p_api_version	,
3753                                             l_api_name		,
3754                                             G_PKG_NAME          )
3755         THEN
3756         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3757         END IF;
3758 
3759 
3760        /*--------------------------------------------------------------+
3761         |   Initialize message list if p_init_msg_list is set to TRUE  |
3762         +--------------------------------------------------------------*/
3763 
3764         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
3765  	             FND_MSG_PUB.initialize;
3766         END IF;
3767 
3768 
3769        /*-----------------------------------------------+
3770         |   Initialize return status to SUCCESS   	|
3771         +-----------------------------------------------*/
3772 
3773         x_return_status := FND_API.G_RET_STS_SUCCESS;
3774 
3775 
3776        /*-----------------------------------------------------------------------+
3777         |   ============  START OF API BODY - RESTATE BR  ===================  	|
3778         +-----------------------------------------------------------------------*/
3779 
3780 
3781 	/*-----------------------------------------------+
3782         |   Validate the action				|
3783         +-----------------------------------------------*/
3784 
3785 	l_action			:=	C_RESTATE;
3786 
3787 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
3788 		p_customer_trx_id	=>  	p_customer_trx_id		,
3789 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
3790 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
3791 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
3792 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
3793 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
3794 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
3795 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
3796 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
3797 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
3798 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
3799 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
3800 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
3801 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
3802 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
3803 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
3804 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
3805 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
3806 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
3807 
3808 	-- Do not continue if the action is not allowed for the BR
3809 
3810 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
3811 
3812 	IF	(C_ACTION_REC.restate_flag	<>	'Y')
3813 	THEN
3814 		IF PG_DEBUG in ('Y', 'C') THEN
3815 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
3816 		END IF;
3817 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_RESTATE' );
3818 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
3819 		app_exception.raise_exception;
3820 	END IF;
3821 
3822 
3823 	/*----------------------------------------------+
3824         |   Data preparation 				|
3825         +-----------------------------------------------*/
3826 
3827 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
3828 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
3829 
3830 	l_trx_date			:=	trunc(p_restatement_date);
3831 	l_gl_date			:=	trunc(p_restatement_gl_date);
3832 
3833 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
3834 
3835 
3836 	/*----------------------------------------------+
3837         |   Data validation  				|
3838         +-----------------------------------------------*/
3839 
3840         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_RESTATE');
3841 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
3842 
3843 	l_trh_rec.trx_date		:=	l_trx_date		;
3844 	l_trh_rec.gl_date		:=	l_gl_date		;
3845 	l_trh_rec.comments		:=	p_restatement_comments	;
3846 
3847 
3848 	/*----------------------------------------------+
3849         |  Set the Unpaid Flag to NULL in the BR Header	|
3850         +-----------------------------------------------*/
3851 
3852 	l_trx_rec.br_unpaid_flag	:=	'N';
3853 
3854 	ARP_PROCESS_BR_HEADER.update_header  (  l_trx_rec	,
3855 						l_trx_rec.customer_trx_id);
3856 
3857 	/*----------------------------------------------+
3858         |  Insert the Transaction History Record	|
3859         +-----------------------------------------------*/
3860 
3861 	-- Fetch the new status and new event of the BR
3862 
3863 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
3864 			p_trx_rec	=>	l_trx_rec	,
3865 			p_action        =>	l_action	,
3866 			p_new_status	=>	l_trh_rec.status,
3867 			p_new_event	=>	l_trh_rec.event	);
3868 
3869 	l_trh_rec.transaction_history_id:=	NULL		;
3870 	l_trh_rec.current_record_flag	:=  	'Y'		;
3871 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
3872 	l_trh_rec.posting_control_id    := 	-3           	;
3873 	l_trh_rec.gl_posted_date        :=  	NULL        	;
3874 	l_trh_rec.first_posted_record_flag  := 	'N'		;
3875 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
3876 	l_trh_rec.postable_flag		:=	'Y'		;
3877 	l_trh_rec.current_accounted_flag:=  	'Y'		;
3878 
3879 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
3880 								 l_trh_rec.transaction_history_id);
3881 
3882 
3883 	/*-----------------------------------------------+
3884         |   Output parameter				 |
3885         +------------------------------------------------*/
3886 
3887 	p_status			:=	l_trh_rec.status	;
3888 
3889 
3890        /*-----------------------------------------------+
3891         |   Standard check of p_commit   		|
3892         +-----------------------------------------------*/
3893 
3894         IF FND_API.To_Boolean( p_commit )
3895         THEN
3896             IF PG_DEBUG in ('Y', 'C') THEN
3897                arp_util.debug( 'committing');
3898             END IF;
3899             Commit;
3900         END IF;
3901 
3902         IF PG_DEBUG in ('Y', 'C') THEN
3903            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Restate_BR()- ');
3904         END IF;
3905 
3906 
3907 EXCEPTION
3908        WHEN FND_API.G_EXC_ERROR THEN
3909                 IF PG_DEBUG in ('Y', 'C') THEN
3910                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3911                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3912                 END IF;
3913                 ROLLBACK TO Restate_BR_PVT;
3914                 x_return_status := FND_API.G_RET_STS_ERROR ;
3915   	        IF PG_DEBUG in ('Y', 'C') THEN
3916   	           arp_util.debug( 'Exception Error');
3917   	        END IF;
3918 		RAISE;
3919 
3920         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3921                 IF PG_DEBUG in ('Y', 'C') THEN
3922                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
3923                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3924                 END IF;
3925                 ROLLBACK TO Restate_BR_PVT;
3926                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3927 		IF PG_DEBUG in ('Y', 'C') THEN
3928 		   arp_util.debug( 'Exception Unexpected Error');
3929 		END IF;
3930 		RAISE;
3931 
3932 
3933         WHEN OTHERS THEN
3934                /*-------------------------------------------------------+
3935                 |  Handle application errors that result from trapable  |
3936                 |  error conditions. The error messages have already    |
3937                 |  been put on the error stack.                         |
3938                 +-------------------------------------------------------*/
3939 
3940 		IF PG_DEBUG in ('Y', 'C') THEN
3941 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
3942                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
3943                 END IF;
3944 
3945 		IF (SQLCODE = -20001)
3946                 THEN
3947 	               	ROLLBACK TO Restate_BR_PVT;
3948                       	x_return_status := FND_API.G_RET_STS_ERROR ;
3949                       	RAISE;
3950                 ELSE
3951 		      	NULL;
3952                 END IF;
3953 
3954                 ROLLBACK TO Restate_BR_PVT;
3955                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3956 		RAISE;
3957 
3958 
3959 END Restate_BR;
3960 
3961 
3962 /*==============================================================================+
3963  | PROCEDURE                                                                 	|
3964  |    Recall_BR				                                     	|
3965  |                                                                           	|
3966  | DESCRIPTION                                                               	|
3967  |    Recalls a BR							     	|
3968  |									  	|
3969  +==============================================================================*/
3970 
3971 
3972 PROCEDURE Recall_BR (
3973 
3974            --   *****  Standard API parameters *****
3975 
3976                 p_api_version      		IN  	NUMBER					,
3977                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
3978                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
3979                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
3980                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
3981                 x_msg_count        		OUT NOCOPY 	NUMBER					,
3982                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
3983 
3984            --   *****  Input parameters  *****
3985 
3986 		p_customer_trx_id		IN  	NUMBER		,
3987 		p_recall_date			IN  	DATE		,
3988 		p_recall_gl_date		IN  	DATE		,
3989 		p_recall_comments		IN  	VARCHAR2	,
3990 
3991            --   *****  Output parameters  *****
3992 
3993 		p_status			OUT NOCOPY 	VARCHAR2				)
3994 
3995 IS
3996 		l_api_name			CONSTANT VARCHAR2(20)	:=	'Recall_BR';
3997 		l_api_version			CONSTANT NUMBER		:=	1.0;
3998 
3999 		l_trh_rec			ar_transaction_history%ROWTYPE		;
4000 		l_trx_rec			RA_CUSTOMER_TRX%ROWTYPE			;
4001 		l_ps_rec			AR_PAYMENT_SCHEDULES%ROWTYPE		;
4002 		l_adj_id			AR_ADJUSTMENTS.adjustment_id%TYPE	;
4003 		l_action			VARCHAR2(30)				;
4004 		l_trx_date			DATE					;
4005 		l_gl_date			DATE					;
4006 
4007 		l_cash_receipt_id		ar_cash_receipts.cash_receipt_id%TYPE	;
4008 		l_receivable_application_id	ar_receivable_applications.receivable_application_id%TYPE;
4009                 l_mesg                          VARCHAR2(2000);
4010 
4011 BEGIN
4012 
4013 	IF PG_DEBUG in ('Y', 'C') THEN
4014 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Recall_BR()+ ');
4015 	END IF;
4016 
4017 	x_msg_count				:=	NULL;
4018 	x_msg_data				:=	NULL;
4019 
4020        /*-----------------------------------------------+
4021         |   Standard start of API savepoint     	|
4022         +-----------------------------------------------*/
4023 
4024      	SAVEPOINT Recall_BR_PVT;
4025 
4026        /*-----------------------------------------------+
4027         | Standard call to check for call compatibility |
4028         +-----------------------------------------------*/
4029 
4030         IF NOT FND_API.Compatible_API_Call( l_api_version	,
4031                                             p_api_version	,
4032                                             l_api_name		,
4033                                             G_PKG_NAME          )
4034         THEN
4035         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4036         END IF;
4037 
4038 
4039        /*--------------------------------------------------------------+
4040         |   Initialize message list if p_init_msg_list is set to TRUE  |
4041         +--------------------------------------------------------------*/
4042 
4043         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
4044  	             FND_MSG_PUB.initialize;
4045         END IF;
4046 
4047 
4048        /*-----------------------------------------------+
4049         |   Initialize return status to SUCCESS   	|
4050         +-----------------------------------------------*/
4051 
4052         x_return_status := FND_API.G_RET_STS_SUCCESS;
4053 
4054 
4055        /*-----------------------------------------------------------------------+
4056         |   ============  START OF API BODY - RECALL BR  ===================  	|
4057         +-----------------------------------------------------------------------*/
4058 
4059 
4060 	/*-----------------------------------------------+
4061         |   Validate the action				|
4062         +-----------------------------------------------*/
4063 
4064 	l_action			:=	C_RECALL;
4065 
4066 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
4067 		p_customer_trx_id	=>  	p_customer_trx_id		,
4068 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
4069 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
4070 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
4071 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
4072 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
4073 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
4074 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
4075 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
4076 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
4077 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
4078 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
4079 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
4080 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
4081 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
4082 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
4083 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
4084 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
4085 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
4086 
4087 	-- Do not continue if the action is not allowed for the BR
4088 
4089 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
4090 
4091 	IF	(C_ACTION_REC.recall_flag	<>	'Y')
4092 	THEN
4093 		IF PG_DEBUG in ('Y', 'C') THEN
4094 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
4095 		END IF;
4096 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_RECALL' );
4097 		FND_MESSAGE.set_token	( 'BRNUM'	, l_trx_rec.trx_number);
4098 		app_exception.raise_exception;
4099 	END IF;
4100 
4101 
4102 	/*----------------------------------------------+
4103         |   Data preparation 				|
4104         +-----------------------------------------------*/
4105 
4106 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
4107 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
4108 
4109 	l_trx_date			:=	trunc(p_recall_date);
4110 	l_gl_date			:=	trunc(p_recall_gl_date);
4111 
4112 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
4113 
4114 
4115 	/*----------------------------------------------+
4116         |   Data Validation 				|
4117         +-----------------------------------------------*/
4118 
4119         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_RECALL');
4120 	AR_BILLS_MAINTAIN_VAL_PVT.validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
4121 
4122 	l_trh_rec.trx_date		:=	l_trx_date		;
4123 	l_trh_rec.gl_date		:=	l_gl_date		;
4124 	l_trh_rec.comments		:=	p_recall_comments	;
4125 
4126 
4127 	/*-----------------------------------------------+
4128         |   RECALL	 				 |
4129         +-----------------------------------------------*/
4130 
4131 	IF	(l_trh_rec.status	=	C_REMITTED)
4132 	THEN
4133 		l_trh_rec.postable_flag			:=	'Y';
4134 		l_trh_rec.current_accounted_flag	:=	'Y';
4135 
4136 	ELSIF	(l_trh_rec.status 	=	C_FACTORED)
4137 	THEN
4138 
4139 		/*----------------------------------------------+
4140 	        |   Reverse the receipt applied to STD		|
4141 	        +-----------------------------------------------*/
4142 
4143 		AR_BILLS_MAINTAIN_LIB_PVT.Find_Last_STD   (l_trh_rec.customer_trx_id, l_cash_receipt_id, l_receivable_application_id);
4144 		AR_BILLS_MAINTAIN_LIB_PVT.Reverse_Receipt (l_trh_rec, l_cash_receipt_id, 'PAYMENT REVERSAL', C_BR_FACTORED_RECOURSE);
4145 		l_trh_rec.postable_flag			:=	'Y';
4146 		l_trh_rec.current_accounted_flag	:=	'Y';
4147 
4148 	ELSIF	(l_trh_rec.status	=	C_ENDORSED)
4149 	THEN
4150 
4151 		/*----------------------------------------------+
4152 	        |   Reject the adjustment created during the	|
4153 		|   endorsement. Status = 'R'	(Reject)	|
4154 	        +-----------------------------------------------*/
4155 
4156 		AR_BILLS_MAINTAIN_LIB_PVT.Find_Last_Adjustment (p_customer_trx_id, l_adj_id);
4157 		AR_BILLS_MAINTAIN_LIB_PVT.Modify_Adjustment    (l_adj_id, 'R');
4158 		l_trh_rec.postable_flag			:=	'N';
4159 		l_trh_rec.current_accounted_flag	:=	'N';
4160 	END IF;
4161 
4162 
4163 	/*-----------------------------------------------+
4164         |   Remove the Remittance or adjustment tags	 |
4165 	|   on the BR Payment Schedule			 |
4166         +-----------------------------------------------*/
4167 
4168 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
4169 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, NULL , NULL);
4170 
4171 
4172 	/*----------------------------------------------+
4173         |  Insert the Transaction History Record	|
4174         +-----------------------------------------------*/
4175 
4176 	-- Fetch the new status and new event of the BR
4177 
4178 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
4179 			p_trx_rec	=>	l_trx_rec	,
4180 			p_action        =>	l_action	,
4181 			p_new_status	=>	l_trh_rec.status,
4182 			p_new_event	=>	l_trh_rec.event	);
4183 
4184 	l_trh_rec.transaction_history_id:=	NULL		;
4185 	l_trh_rec.current_record_flag	:=  	'Y'		;
4186 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
4187 	l_trh_rec.posting_control_id    := 	-3           	;
4188 	l_trh_rec.gl_posted_date        :=  	NULL        	;
4189 	l_trh_rec.first_posted_record_flag  := 	'N'		;
4190 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
4191 	l_trh_rec.batch_id		:=	NULL		;
4192 
4193 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
4194 								 l_trh_rec.transaction_history_id);
4195 
4196 
4197 	/*----------------------------------------------+
4198         |   Remove the Remittance Information of the 	|
4199 	|   BR Header if it exists			|
4200         +-----------------------------------------------*/
4201 
4202 	l_trx_rec.receipt_method_id		:=	NULL;
4203 
4204 	ARP_PROCESS_BR_HEADER.update_header  (  l_trx_rec, l_trx_rec.customer_trx_id);
4205 
4206 
4207 	/*-----------------------------------------------+
4208         |   Output parameter				 |
4209         +------------------------------------------------*/
4210 
4211 	p_status			:=	l_trh_rec.status	;
4212 
4213 
4214        /*-----------------------------------------------+
4215         |   Standard check of p_commit   		|
4216         +-----------------------------------------------*/
4217 
4218         IF FND_API.To_Boolean( p_commit )
4219         THEN
4220             IF PG_DEBUG in ('Y', 'C') THEN
4221                arp_util.debug( 'committing');
4222             END IF;
4223             Commit;
4224         END IF;
4225 
4226         IF PG_DEBUG in ('Y', 'C') THEN
4227            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Recall_BR()- ');
4228         END IF;
4229 
4230 
4231 EXCEPTION
4232        WHEN FND_API.G_EXC_ERROR THEN
4233                 IF PG_DEBUG in ('Y', 'C') THEN
4234                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4235                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4236                 END IF;
4237                 ROLLBACK TO Recall_BR_PVT;
4238                 x_return_status := FND_API.G_RET_STS_ERROR ;
4239   	        IF PG_DEBUG in ('Y', 'C') THEN
4240   	           arp_util.debug( 'Exception Error');
4241   	        END IF;
4242 		RAISE;
4243 
4244         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4245                 IF PG_DEBUG in ('Y', 'C') THEN
4246                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4247                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4248                 END IF;
4249                 ROLLBACK TO Recall_BR_PVT;
4250                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4251 		IF PG_DEBUG in ('Y', 'C') THEN
4252 		   arp_util.debug( 'Exception Unexpected Error');
4253 		END IF;
4254 		RAISE;
4255 
4256 
4257         WHEN OTHERS THEN
4258                /*-------------------------------------------------------+
4259                 |  Handle application errors that result from trapable  |
4260                 |  error conditions. The error messages have already    |
4261                 |  been put on the error stack.                         |
4262                 +-------------------------------------------------------*/
4263 
4264 		IF PG_DEBUG in ('Y', 'C') THEN
4265 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
4266                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4267                 END IF;
4268 
4269 		IF (SQLCODE = -20001)
4270                 THEN
4271 	               	ROLLBACK TO Recall_BR_PVT;
4272                       	x_return_status := FND_API.G_RET_STS_ERROR ;
4273                       	RAISE;
4274                 ELSE
4275 		      	NULL;
4276                 END IF;
4277 
4278                 ROLLBACK TO Recall_BR_PVT;
4279                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4280  		RAISE;
4281 
4282 
4283 END Recall_BR;
4284 
4285 
4286 /*==============================================================================+
4287  | PROCEDURE                                                                 	|
4288  |    Eliminate_Risk_BR			                                     	|
4289  |                                                                           	|
4290  | DESCRIPTION                                                               	|
4291  |    Eliminates from Risk 						     	|
4292  |									  	|
4293  +==============================================================================*/
4294 
4295 
4296 PROCEDURE Eliminate_Risk_BR (
4297 
4298            --   *****  Standard API parameters *****
4299 
4300                 p_api_version     		IN  	NUMBER					,
4301                 p_init_msg_list   		IN  	VARCHAR2 := FND_API.G_TRUE		,
4302                 p_commit          		IN  	VARCHAR2 := FND_API.G_FALSE		,
4303                 p_validation_level		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
4304                 x_return_status   		OUT NOCOPY 	VARCHAR2				,
4305                 x_msg_count       		OUT NOCOPY 	NUMBER					,
4306                 x_msg_data        		OUT NOCOPY 	VARCHAR2				,
4307 
4308 
4309            --   *****  Input parameters  *****
4310 
4311 		p_customer_trx_id		IN  	NUMBER		,
4312 		p_risk_eliminate_date		IN  	DATE		,
4313 		p_risk_eliminate_gl_date	IN  	DATE		,
4314 		p_risk_eliminate_comments	IN  	VARCHAR2	,
4315 
4316            --   *****  Output parameters  *****
4317 
4318 		p_status			OUT NOCOPY 	VARCHAR2) IS
4319 
4320   l_api_name 		CONSTANT VARCHAR2(20)	:= 'Eliminate_Risk_BR';
4321   l_api_version		CONSTANT NUMBER		:= 1.0;
4322   l_trh_rec		ar_transaction_history%ROWTYPE;
4323   l_trx_rec		RA_CUSTOMER_TRX%ROWTYPE;
4324   l_ps_rec		AR_PAYMENT_SCHEDULES%ROWTYPE;
4325   l_cash_receipt_id	AR_CASH_RECEIPTS.cash_receipt_id%TYPE;
4326   l_adj_id		AR_ADJUSTMENTS.adjustment_id%TYPE;
4327   l_move_deferred_tax	VARCHAR2(1)		:= 'N';
4328   l_action		VARCHAR2(30);
4329   l_trx_date		DATE;
4330   l_gl_date		DATE;
4331   l_mesg                VARCHAR2(2000);
4332 
4333   -- Added for bug # 2712726
4334   -- ORASHID
4335   --
4336   l_nocopy_payment_schedule_id  ar_payment_schedules.payment_schedule_id%TYPE;
4337 
4338 BEGIN
4339 
4340 	IF PG_DEBUG in ('Y', 'C') THEN
4341 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Eliminate_Risk_BR ()+ ');
4342 	END IF;
4343 
4344 	x_msg_count				:=	NULL;
4345 	x_msg_data				:=	NULL;
4346 
4347        /*-----------------------------------------------+
4348         |   Standard start of API savepoint     	|
4349         +-----------------------------------------------*/
4350 
4351      	SAVEPOINT Eliminate_Risk_BR_PVT;
4352 
4353        /*-----------------------------------------------+
4354         | Standard call to check for call compatibility |
4355         +-----------------------------------------------*/
4356 
4357         IF NOT FND_API.Compatible_API_Call( l_api_version	,
4358                                             p_api_version	,
4359                                             l_api_name		,
4360                                             G_PKG_NAME          )
4361         THEN
4362         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4363         END IF;
4364 
4365 
4366        /*--------------------------------------------------------------+
4367         |   Initialize message list if p_init_msg_list is set to TRUE  |
4368         +--------------------------------------------------------------*/
4369 
4370         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
4371  	             FND_MSG_PUB.initialize;
4372         END IF;
4373 
4374 
4375        /*-----------------------------------------------+
4376         |   Initialize return status to SUCCESS   	|
4377         +-----------------------------------------------*/
4378 
4379         x_return_status := FND_API.G_RET_STS_SUCCESS;
4380 
4381 
4382        /*-----------------------------------------------------------------------+
4383         |   ============  START OF API BODY - ELIMINATE RISK BR  ============  	|
4384         +-----------------------------------------------------------------------*/
4385 
4386 
4387 	/*-----------------------------------------------+
4388         |   Validate the action				|
4389         +-----------------------------------------------*/
4390 
4391 	l_action			:=	C_ELIMINATE_RISK;
4392 
4393 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
4394 		p_customer_trx_id	=>  	p_customer_trx_id		,
4395 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
4396 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
4397 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
4398 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
4399 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
4400 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
4401 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
4402 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
4403 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
4404 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
4405 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
4406 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
4407 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
4408 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
4409 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
4410 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
4411 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
4412 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
4413 
4414 	-- Do not continue if the action is not allowed for the BR
4415 
4416 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
4417 
4418 	IF	(C_ACTION_REC.eliminate_flag	<>	'Y')
4419 	THEN
4420 		IF PG_DEBUG in ('Y', 'C') THEN
4421 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_trx_rec.trx_number);
4422 		END IF;
4423 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_ELIMINATE' );
4424 		FND_MESSAGE.set_token	( 'BRNUM'	,  l_trx_rec.trx_number);
4425 		app_exception.raise_exception;
4426 	END IF;
4427 
4428 
4429 	/*----------------------------------------------+
4430         |   Data preparation 				|
4431         +-----------------------------------------------*/
4432 
4433 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
4434 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
4435 
4436 	l_trx_date			:=	trunc(p_risk_eliminate_date);
4437 	l_gl_date			:=	trunc(p_risk_eliminate_gl_date);
4438 
4439 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
4440 
4441 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
4442 
4443         -- Modified for bug # 2712726
4444         -- ORASHID
4445         --
4446         l_nocopy_payment_schedule_id := l_ps_rec.payment_schedule_id;
4447 	arp_ps_pkg.fetch_p(l_nocopy_payment_schedule_id, l_ps_rec);
4448 
4449 	/*----------------------------------------------+
4450         |   Data validation 				|
4451         +-----------------------------------------------*/
4452 
4453         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_ELIMINATE');
4454 	AR_BILLS_MAINTAIN_VAL_PVT.Validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
4455 
4456 	l_trh_rec.trx_date		:=	l_trx_date;
4457 	l_trh_rec.gl_date		:=	l_gl_date;
4458 	l_trh_rec.comments		:=	p_risk_eliminate_comments;
4459 
4460 
4461 	/*-----------------------------------------------+
4462         |   RISK ELIMINATION 				 |
4463         +-----------------------------------------------*/
4464 
4465 	IF	(l_trh_rec.status	=	C_MATURED_PEND_RISK_ELIM)
4466 	THEN
4467 
4468 		/*----------------------------------------------+
4469 	        |   The receipt created during the remittance	|
4470 		|   approval is unapplied from Short Term Debt	|
4471 		|   and applied to the Bills Receivables	|
4472 	        +-----------------------------------------------*/
4473 
4474 		AR_BILLS_MAINTAIN_LIB_PVT.Unapply_STD 	(l_trh_rec, C_BR_FACTORED_RECOURSE, l_cash_receipt_id);
4475 		AR_BILLS_MAINTAIN_LIB_PVT.Apply_Receipt	(l_trh_rec, l_ps_rec, l_cash_receipt_id, C_BR_FACTORED_RECOURSE);
4476 
4477 	ELSIF	(l_trh_rec.status	=	C_ENDORSED)
4478 	THEN
4479 		IF	NOT (AR_BILLS_MAINTAIN_STATUS_PUB.Is_BR_Matured (l_ps_rec.due_date))
4480 		THEN
4481 
4482 			/*------------------------------------------------------+
4483 		        |  The Maturity Date event has not happened, so	the 	|
4484 			|  maturity event and payment event happen at the same 	|
4485 			|  time. So we approve the adjustment and move deferred	|
4486 			|  tax as part of the approval. Deferred tax is only	|
4487 			|  moved if tax to be moved exists			|
4488 		        +-------------------------------------------------------*/
4489 
4490 			IF	(l_ps_rec.tax_remaining IS NOT NULL	and	l_ps_rec.tax_remaining <> 0)
4491 			THEN
4492 				l_move_deferred_tax	:=	'Y';
4493 			END IF;
4494 
4495 		END IF;
4496 
4497 
4498 		/*----------------------------------------------+
4499 	        |   The unapproved adjustment created during the|
4500 		|   endorsment is approved			|
4501 	        +-----------------------------------------------*/
4502 
4503 		AR_BILLS_MAINTAIN_LIB_PVT.Find_Last_Adjustment 	(p_customer_trx_id, l_adj_id);
4504 		AR_BILLS_MAINTAIN_LIB_PVT.Approve_Adjustment	(l_adj_id, l_move_deferred_tax);
4505 	END IF;
4506 
4507 
4508 	/*-----------------------------------------------+
4509         |   Remove the Remittance or adjustment tags	 |
4510 	|   on the BR Payment Schedule			 |
4511         +-----------------------------------------------*/
4512 
4513 	AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, NULL , NULL);
4514 
4515 
4516 	/*----------------------------------------------+
4517         |  Insert the Transaction History Record	|
4518         +-----------------------------------------------*/
4519 
4520 	-- Fetch the new status and new event of the BR
4521 
4522 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
4523 			p_trx_rec	=>	l_trx_rec	,
4524 			p_action        =>	l_action	,
4525 			p_new_status	=>	l_trh_rec.status,
4526 			p_new_event	=>	l_trh_rec.event	);
4527 
4528 	l_trh_rec.transaction_history_id:=	NULL		;
4529 	l_trh_rec.postable_flag		:=	'N'		;
4530 	l_trh_rec.current_accounted_flag:=	'N'		;
4531 	l_trh_rec.current_record_flag	:=  	'Y'		;
4532 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
4533 	l_trh_rec.posting_control_id    := 	-3           	;
4534 	l_trh_rec.gl_posted_date        :=  	NULL        	;
4535 	l_trh_rec.first_posted_record_flag  := 	'N'		;
4536 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
4537 	l_trh_rec.batch_id		:=	NULL		;
4538 
4539 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
4540 								 l_trh_rec.transaction_history_id);
4541 
4542 
4543 	/*-----------------------------------------------+
4544         |   Output parameter				 |
4545         +------------------------------------------------*/
4546 
4547 	p_status			:=	l_trh_rec.status	;
4548 
4549 
4550        /*-----------------------------------------------+
4551         |   Standard check of p_commit   		|
4552         +-----------------------------------------------*/
4553 
4554         IF FND_API.To_Boolean( p_commit )
4555         THEN
4556             IF PG_DEBUG in ('Y', 'C') THEN
4557                arp_util.debug( 'committing');
4558             END IF;
4559             Commit;
4560         END IF;
4561 
4562         IF PG_DEBUG in ('Y', 'C') THEN
4563            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Eliminate_Risk_BR ()- ');
4564         END IF;
4565 
4566 
4567 EXCEPTION
4568        WHEN FND_API.G_EXC_ERROR THEN
4569                 IF PG_DEBUG in ('Y', 'C') THEN
4570                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4571                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4572                 END IF;
4573                 ROLLBACK TO Eliminate_Risk_BR_PVT;
4574                 x_return_status := FND_API.G_RET_STS_ERROR ;
4575   	        IF PG_DEBUG in ('Y', 'C') THEN
4576   	           arp_util.debug( 'Exception Error');
4577   	        END IF;
4578 		RAISE;
4579 
4580         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4581                 IF PG_DEBUG in ('Y', 'C') THEN
4582                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4583                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4584                 END IF;
4585                 ROLLBACK TO Eliminate_Risk_BR_PVT;
4586                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4587 		IF PG_DEBUG in ('Y', 'C') THEN
4588 		   arp_util.debug( 'Exception Unexpected Error');
4589 		END IF;
4590 		RAISE;
4591 
4592 
4593         WHEN OTHERS THEN
4594                /*-------------------------------------------------------+
4595                 |  Handle application errors that result from trapable  |
4596                 |  error conditions. The error messages have already    |
4597                 |  been put on the error stack.                         |
4598                 +-------------------------------------------------------*/
4599 
4600 		IF PG_DEBUG in ('Y', 'C') THEN
4601 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
4602                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4603                 END IF;
4604 
4605 		IF (SQLCODE = -20001)
4606                 THEN
4607 	               	ROLLBACK TO Eliminate_Risk_BR_PVT;
4608                       	x_return_status := FND_API.G_RET_STS_ERROR ;
4609                       	RAISE;
4610                 ELSE
4611 		      	NULL;
4612                 END IF;
4613 
4614                 ROLLBACK TO Eliminate_Risk_BR_PVT;
4615                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4616 
4617 		RAISE;
4618 
4619 END Eliminate_Risk_BR;
4620 
4621 
4622 /*==============================================================================+
4623  | PROCEDURE                                                                 	|
4624  |    UnEliminate_Risk_BR		                                     	|
4625  |                                                                           	|
4626  | DESCRIPTION                                                               	|
4627  |    UnEliminates from Risk 						     	|
4628  |									  	|
4629  +==============================================================================*/
4630 
4631 
4632 PROCEDURE UnEliminate_Risk_BR (
4633 
4634            --   *****  Standard API parameters *****
4635 
4636                 p_api_version      		IN  	NUMBER					,
4637                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
4638                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
4639                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
4640                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
4641                 x_msg_count        		OUT NOCOPY 	NUMBER					,
4642                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
4643 
4644            --   *****  Input parameters  *****
4645 
4646 		p_customer_trx_id		IN  	NUMBER		,
4647 		p_risk_uneliminate_date		IN  	DATE		,
4648 		p_risk_uneliminate_gl_date	IN  	DATE		,
4649 		p_risk_uneliminate_comments	IN  	VARCHAR2	,
4650 
4651            --   *****  Output parameters  *****
4652 
4653 		p_status			OUT NOCOPY VARCHAR2) IS
4654 
4655 
4656   l_api_name		CONSTANT VARCHAR2(20)	:= 'UnEliminate_Risk_BR';
4657   l_api_version		CONSTANT NUMBER		:= 1.0	;
4658 
4659   l_trh_rec		ar_transaction_history%ROWTYPE;
4660   l_trh_prev_rec	ar_transaction_history%ROWTYPE;
4661   l_trx_rec		RA_CUSTOMER_TRX%ROWTYPE;
4662   l_ps_rec		AR_PAYMENT_SCHEDULES%ROWTYPE;
4663   l_cash_receipt_id	AR_CASH_RECEIPTS.cash_receipt_id%TYPE;
4664   l_adj_id		AR_ADJUSTMENTS.adjustment_id%TYPE;
4665   l_move_deferred_tax	VARCHAR2(1):= 'N';
4666   l_action		VARCHAR2(30);
4667   l_trx_date		DATE;
4668   l_gl_date		DATE;
4669   l_new_adj_id		NUMBER;
4670   l_receivables_trx_id	NUMBER;
4671   l_mesg                VARCHAR2(2000);
4672 
4673   -- Added for bug # 2712726
4674   -- ORASHID
4675   --
4676   l_nocopy_payment_schedule_id  ar_payment_schedules.payment_schedule_id%TYPE;
4677 
4678 BEGIN
4679 
4680 	IF PG_DEBUG in ('Y', 'C') THEN
4681 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.UnEliminate_Risk_BR ()+ ');
4682 	END IF;
4683 
4684 	x_msg_count				:=	NULL;
4685 	x_msg_data				:=	NULL;
4686 
4687        /*-----------------------------------------------+
4688         |   Standard start of API savepoint     	|
4689         +-----------------------------------------------*/
4690 
4691      	SAVEPOINT UnEliminate_Risk_BR_PVT;
4692 
4693        /*-----------------------------------------------+
4694         | Standard call to check for call compatibility |
4695         +-----------------------------------------------*/
4696 
4697         IF NOT FND_API.Compatible_API_Call( l_api_version	,
4698                                             p_api_version	,
4699                                             l_api_name		,
4700                                             G_PKG_NAME          )
4701         THEN
4702         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4703         END IF;
4704 
4705 
4706        /*--------------------------------------------------------------+
4707         |   Initialize message list if p_init_msg_list is set to TRUE  |
4708         +--------------------------------------------------------------*/
4709 
4710         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
4711  	             FND_MSG_PUB.initialize;
4712         END IF;
4713 
4714 
4715        /*-----------------------------------------------+
4716         |   Initialize return status to SUCCESS   	|
4717         +-----------------------------------------------*/
4718 
4719         x_return_status := FND_API.G_RET_STS_SUCCESS;
4720 
4721 
4722        /*-----------------------------------------------------------------------+
4723         |   ============  START OF API BODY - UNELIMINATE RISK BR  =============|
4724         +-----------------------------------------------------------------------*/
4725 
4726 
4727 	/*-----------------------------------------------+
4728         |   Validate the action				|
4729         +-----------------------------------------------*/
4730 
4731 	l_action			:=	C_UNELIMINATE_RISK;
4732 
4733 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
4734 		p_customer_trx_id	=>  	p_customer_trx_id		,
4735 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
4736 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
4737 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
4738 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
4739 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
4740 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
4741 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
4742 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
4743 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
4744 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
4745 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
4746 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
4747 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
4748 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
4749 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
4750 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
4751 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
4752 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
4753 
4754 	-- Do not continue if the action is not allowed for the BR
4755 
4756 	ARP_CT_PKG.fetch_p (l_trx_rec, p_customer_trx_id);
4757 
4758 	IF	(C_ACTION_REC.uneliminate_flag	<>	'Y')
4759 	THEN
4760 		IF PG_DEBUG in ('Y', 'C') THEN
4761 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || l_trx_rec.trx_number);
4762 		END IF;
4763 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_UNELIMINATE' );
4764 		FND_MESSAGE.set_token	( 'BRNUM'	,  l_trx_rec.trx_number);
4765 		app_exception.raise_exception;
4766 	END IF;
4767 
4768 
4769 	/*----------------------------------------------+
4770         |   Data preparation 				|
4771         +-----------------------------------------------*/
4772 
4773 	-- Fetch the current transaction history record information
4774 
4775 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
4776 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
4777 
4778 	l_trx_date			:=	trunc(p_risk_uneliminate_date);
4779 	l_gl_date			:=	trunc(p_risk_uneliminate_gl_date);
4780 
4781 
4782 	-- Fetch the previous transaction history record information
4783 
4784 	l_trh_prev_rec.transaction_history_id	:=	l_trh_rec.prv_trx_history_id;
4785 	AR_BILLS_MAINTAIN_STATUS_PUB.Find_Last_Relevant_Trh (l_trh_prev_rec);
4786 
4787 
4788 	-- Fetch the Payment Schedule information
4789 
4790 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
4791 
4792         -- Modified for bug # 2712726
4793         -- ORASHID
4794         --
4795         l_nocopy_payment_schedule_id := l_ps_rec.payment_schedule_id;
4796 	arp_ps_pkg.fetch_p(l_nocopy_payment_schedule_id, l_ps_rec);
4797 
4798 
4799 
4800 	/*----------------------------------------------+
4801         |   Data defaulting 				|
4802         +-----------------------------------------------*/
4803 
4804 	AR_BILLS_MAINTAIN_LIB_PVT.Default_Action_Dates (l_trx_date, l_gl_date);
4805 
4806 
4807 	/*----------------------------------------------+
4808         |   Data validation 				|
4809         +-----------------------------------------------*/
4810 
4811         l_mesg := arp_standard.fnd_message('AR_BR_SPMENU_UNELIMINATE');
4812 	AR_BILLS_MAINTAIN_VAL_PVT.Validate_Action_Dates (l_trx_date, l_gl_date, l_trh_rec, l_mesg);
4813 
4814 	l_trh_rec.trx_date		:=	l_trx_date	;
4815 	l_trh_rec.gl_date		:=	l_gl_date	;
4816 	l_trh_rec.comments		:=	p_risk_uneliminate_comments;
4817 
4818 
4819 	/*-----------------------------------------------+
4820         |   RISK UNELIMINATION 				 |
4821         +-----------------------------------------------*/
4822 
4823 	IF	(l_trh_prev_rec.status	=	C_MATURED_PEND_RISK_ELIM)
4824 	THEN
4825 
4826 
4827 		/*----------------------------------------------+
4828         	|   Unapply the receipt from the BR and apply	|
4829 		|   it to short term debt			|
4830 	        +-----------------------------------------------*/
4831 
4832 		AR_BILLS_MAINTAIN_LIB_PVT.Find_Last_Receipt (l_trh_rec.customer_trx_id, l_cash_receipt_id);
4833 		AR_BILLS_MAINTAIN_LIB_PVT.Unapply_Receipt   (l_trh_rec, l_ps_rec.payment_schedule_id, l_cash_receipt_id, C_RISK_UNELIMINATED);
4834 		AR_BILLS_MAINTAIN_LIB_PVT.Apply_STD	    (p_customer_trx_id, l_cash_receipt_id, l_trh_rec.trx_date, l_trh_rec.gl_date);
4835 
4836 		/*-----------------------------------------------+
4837         	|   Put the Remittance tags			 |
4838 		|   on the BR Payment Schedule			 |
4839 	        +-----------------------------------------------*/
4840 
4841 		AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, 'REMITTANCE' , l_trx_rec.remittance_batch_id);
4842 
4843 
4844 	ELSIF	(l_trh_prev_rec.status	=	C_ENDORSED)
4845 	THEN
4846 
4847 		/*----------------------------------------------+
4848         	|   Reverse the adjustment created during	|
4849  		|   endorsement and create a new unapproved	|
4850 		|   adjustment					|
4851 	        +-----------------------------------------------*/
4852 
4853 		AR_BILLS_MAINTAIN_LIB_PVT.Find_Last_Adjustment (l_trh_rec.customer_trx_id, l_adj_id);
4854 
4855 		SELECT 	receivables_trx_id
4856 		INTO	l_receivables_trx_id
4857 		FROM	ar_adjustments
4858 		WHERE	adjustment_id	=	l_adj_id;
4859 
4860 		AR_BILLS_MAINTAIN_LIB_PVT.Reverse_Adjustment   (l_adj_id, l_trh_rec, C_RISK_UNELIMINATED);
4861 
4862 		AR_BILLS_MAINTAIN_LIB_PVT.Create_Adjustment   (
4863 					l_trh_rec			,
4864 					p_customer_trx_id		,
4865 					l_ps_rec			,
4866 					l_ps_rec.amount_due_original	,
4867 					l_receivables_trx_id		,
4868 					'W'				,
4869 					l_move_deferred_tax		,
4870 					l_new_adj_id			);
4871 
4872 		/*----------------------------------------------+
4873 	        |    Updates the Payment Schedule of the BR 	|
4874 		|    with the Adjustment Information		|
4875         	+-----------------------------------------------*/
4876 
4877 		AR_BILLS_MAINTAIN_LIB_PVT.update_reserved_columns (l_ps_rec.payment_schedule_id, 'ADJUSTMENT', l_new_adj_id);
4878 
4879 
4880 	END IF;
4881 
4882 
4883 	/*----------------------------------------------+
4884         |  Insert the Transaction History Record	|
4885         +-----------------------------------------------*/
4886 
4887 	-- Fetch the new status and new event of the BR
4888 
4889 	AR_BILLS_MAINTAIN_STATUS_PUB.New_Status_Event (
4890 			p_trx_rec	=>	l_trx_rec	,
4891 			p_action        =>	l_action	,
4892 			p_new_status	=>	l_trh_rec.status,
4893 			p_new_event	=>	l_trh_rec.event	);
4894 
4895 	l_trh_rec.transaction_history_id:=	NULL		;
4896 	l_trh_rec.postable_flag		:=	'N'		;
4897 	l_trh_rec.current_accounted_flag:=	'N'		;
4898 	l_trh_rec.current_record_flag	:=  	'Y'		;
4899 	l_trh_rec.prv_trx_history_id	:=  	NULL		;
4900 	l_trh_rec.posting_control_id    := 	-3           	;
4901 	l_trh_rec.gl_posted_date        :=  	NULL        	;
4902 	l_trh_rec.first_posted_record_flag  := 	'N'		;
4903 	l_trh_rec.created_from		:=	'ARBRMAIB'	;
4904 	l_trh_rec.batch_id		:=	NULL		;
4905 
4906 	arp_proc_transaction_history.insert_transaction_history (l_trh_rec	,
4907 								 l_trh_rec.transaction_history_id);
4908 
4909 
4910 	/*-----------------------------------------------+
4911         |   Output parameter				 |
4912         +------------------------------------------------*/
4913 
4914 	p_status			:=	l_trh_rec.status	;
4915 
4916 
4917        /*-----------------------------------------------+
4918         |   Standard check of p_commit   		|
4919         +-----------------------------------------------*/
4920 
4921         IF FND_API.To_Boolean( p_commit )
4922         THEN
4923 
4924             IF PG_DEBUG in ('Y', 'C') THEN
4925                arp_util.debug( 'committing');
4926             END IF;
4927             Commit;
4928         END IF;
4929 
4930         IF PG_DEBUG in ('Y', 'C') THEN
4931            arp_util.debug('AR_BILLS_MAINTAIN_PUB.UnEliminate_Risk_BR ()- ');
4932         END IF;
4933 
4934 
4935 EXCEPTION
4936        WHEN FND_API.G_EXC_ERROR THEN
4937                 IF PG_DEBUG in ('Y', 'C') THEN
4938                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4939                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4940                 END IF;
4941                 ROLLBACK TO UnEliminate_Risk_BR_PVT;
4942                 x_return_status := FND_API.G_RET_STS_ERROR ;
4943   	        IF PG_DEBUG in ('Y', 'C') THEN
4944   	           arp_util.debug( 'Exception Error');
4945   	        END IF;
4946 		RAISE;
4947 
4948         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4949                 IF PG_DEBUG in ('Y', 'C') THEN
4950                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
4951                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4952                 END IF;
4953                 ROLLBACK TO UnEliminate_Risk_BR_PVT;
4954                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4955 		IF PG_DEBUG in ('Y', 'C') THEN
4956 		   arp_util.debug( 'Exception Unexpected Error');
4957 		END IF;
4958 		RAISE;
4959 
4960 
4961         WHEN OTHERS THEN
4962                /*-------------------------------------------------------+
4963                 |  Handle application errors that result from trapable  |
4964                 |  error conditions. The error messages have already    |
4965                 |  been put on the error stack.                         |
4966                 +-------------------------------------------------------*/
4967 
4968 		IF PG_DEBUG in ('Y', 'C') THEN
4969 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
4970                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
4971                 END IF;
4972 
4973 		IF (SQLCODE = -20001)
4974                 THEN
4975 	               	ROLLBACK TO UnEliminate_Risk_BR_PVT;
4976                       	x_return_status := FND_API.G_RET_STS_ERROR ;
4977                       	RAISE;
4978                 ELSE
4979 		      	NULL;
4980                 END IF;
4981 
4982                 ROLLBACK TO UnEliminate_Risk_BR_PVT;
4983                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4984 		RAISE;
4985 
4986 
4987 END UnEliminate_Risk_BR;
4988 
4989 
4990 /*==============================================================================+
4991  | PROCEDURE                                                                 	|
4992  |    Exchange_BR			                                     	|
4993  |                                                                           	|
4994  | DESCRIPTION                                                               	|
4995  |    Exchanges a BR for another					     	|
4996  |									  	|
4997  +==============================================================================*/
4998 
4999 
5000 PROCEDURE Exchange_BR (
5001 
5002            --   *****  Standard API parameters *****
5003 
5004                 p_api_version      		IN  	NUMBER					,
5005                 p_init_msg_list    		IN  	VARCHAR2 := FND_API.G_TRUE		,
5006                 p_commit           		IN  	VARCHAR2 := FND_API.G_FALSE		,
5007                 p_validation_level 		IN  	NUMBER   := FND_API.G_VALID_LEVEL_FULL	,
5008                 x_return_status    		OUT NOCOPY 	VARCHAR2				,
5009                 x_msg_count        		OUT NOCOPY 	NUMBER					,
5010                 x_msg_data         		OUT NOCOPY 	VARCHAR2				,
5011 
5012            --   *****  Input parameters  *****
5013 
5014 		p_customer_trx_id		IN 	NUMBER	,
5015 
5016            --   *****  Output parameters  *****
5017 
5018 		p_new_customer_trx_id		OUT NOCOPY 	NUMBER					,
5019 		p_new_trx_number		OUT NOCOPY 	VARCHAR2) IS
5020 
5021 
5022   l_api_name		  CONSTANT VARCHAR2(20)	:= 'Exchange_BR';
5023   l_api_version		  CONSTANT NUMBER := 1.0;
5024   l_trx_rec		  ra_customer_trx%ROWTYPE;
5025   l_trh_rec		  ar_transaction_history%ROWTYPE;
5026   l_ps_rec		  ar_payment_schedules%ROWTYPE;
5027   l_action_rec		  action_rec_type;
5028   l_status		  VARCHAR2(30);
5029   l_customer_trx_line_id  ra_customer_trx_lines.customer_trx_line_id%TYPE;
5030   l_msg_count   	  NUMBER;
5031   l_msg_data     	  VARCHAR2(2000);
5032   l_return_status	  VARCHAR2(1);
5033 
5034   l_action		  VARCHAR2(30) := C_EXCHANGE;
5035 
5036   -- Added for bug # 2712726
5037   -- ORASHID
5038   --
5039   l_nocopy_payment_schedule_id  ar_payment_schedules.payment_schedule_id%TYPE;
5040 
5041 BEGIN
5042 
5043 	IF PG_DEBUG in ('Y', 'C') THEN
5044 	   arp_util.debug('AR_BILLS_MAINTAIN_PUB.Exchange_BR()+ ');
5045 	END IF;
5046 
5047 	x_msg_count				:=	NULL;
5048 	x_msg_data				:=	NULL;
5049 
5050        /*-----------------------------------------------+
5051         |   Standard start of API savepoint     	|
5052         +-----------------------------------------------*/
5053 
5054       	SAVEPOINT Exchange_BR_PVT;
5055 
5056 
5057        /*-----------------------------------------------+
5058         | Standard call to check for call compatibility |
5059         +-----------------------------------------------*/
5060 
5061         IF NOT FND_API.Compatible_API_Call( l_api_version	,
5062                                             p_api_version	,
5063                                             l_api_name		,
5064                                             G_PKG_NAME          )
5065         THEN
5066         	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5067         END IF;
5068 
5069 
5070        /*--------------------------------------------------------------+
5071         |   Initialize message list if p_init_msg_list is set to TRUE  |
5072         +--------------------------------------------------------------*/
5073 
5074         IF  FND_API.to_Boolean( p_init_msg_list )  THEN
5075  	             FND_MSG_PUB.initialize;
5076         END IF;
5077 
5078 
5079        /*-----------------------------------------------+
5080         |   Initialize return status to SUCCESS   	|
5081         +-----------------------------------------------*/
5082 
5083         x_return_status := FND_API.G_RET_STS_SUCCESS;
5084 
5085 
5086        /*-----------------------------------------------------------------------+
5087         |   ============  START OF API BODY - EXCHANGE BR ===================  	|
5088         +-----------------------------------------------------------------------*/
5089 
5090 
5091 	/*-----------------------------------------------+
5092         |   Action Validation				 |
5093         +-----------------------------------------------*/
5094 
5095 
5096 	AR_BILLS_MAINTAIN_STATUS_PUB.validate_actions (
5097 		p_customer_trx_id	=>  	p_customer_trx_id		,
5098 		p_complete_flag		=>	C_ACTION_REC.complete_flag	,
5099 		p_uncomplete_flag	=>	C_ACTION_REC.uncomplete_flag	,
5100 		p_accept_flag		=>	C_ACTION_REC.accept_flag	,
5101 		p_cancel_flag		=>	C_ACTION_REC.cancel_flag	,
5102 		p_select_remit_flag	=>	C_ACTION_REC.select_remit_flag	,
5103 		p_deselect_remit_flag	=>	C_ACTION_REC.deselect_remit_flag,
5104 		p_approve_remit_flag	=>	C_ACTION_REC.approve_remit_flag	,
5105 		p_hold_flag		=>	C_ACTION_REC.hold_flag		,
5106 		p_unhold_flag		=>	C_ACTION_REC.unhold_flag	,
5107 		p_recall_flag		=>	C_ACTION_REC.recall_flag	,
5108 		p_eliminate_flag	=>	C_ACTION_REC.eliminate_flag	,
5109 		p_uneliminate_flag	=>	C_ACTION_REC.uneliminate_flag	,
5110 		p_unpaid_flag		=>	C_ACTION_REC.unpaid_flag	,
5111 		p_protest_flag		=>	C_ACTION_REC.protest_flag	,
5112 		p_endorse_flag		=>	C_ACTION_REC.endorse_flag	,
5113 		p_restate_flag		=>	C_ACTION_REC.restate_flag	,
5114 		p_exchange_flag		=>	C_ACTION_REC.exchange_flag	,
5115 		p_delete_flag		=>	C_ACTION_REC.delete_flag	);
5116 
5117 
5118 	-- Do not continue if the action is not allowed for the BR
5119 
5120 	ARP_CT_PKG.lock_fetch_p (l_trx_rec, p_customer_trx_id);
5121 
5122 	IF	(C_ACTION_REC.exchange_flag	<>	'Y')
5123 	THEN
5124 		IF PG_DEBUG in ('Y', 'C') THEN
5125 		   arp_util.debug( '>>>>>>>>>> The action ' || l_action || ' is not allowed on the BR ' || p_customer_trx_id);
5126 		END IF;
5127 		FND_MESSAGE.set_name	( 'AR', 'AR_BR_CANNOT_EXCHANGE' );
5128 		FND_MESSAGE.set_token	( 'BRNUM' 	,  l_trx_rec.trx_number);
5129 		app_exception.raise_exception;
5130 	END IF;
5131 
5132 
5133 
5134        /*-----------------------------------------------+
5135         |   Data preparation 				|
5136         +-----------------------------------------------*/
5137 
5138 	l_trh_rec.customer_trx_id	:=	p_customer_trx_id;
5139 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
5140 
5141 	AR_BILLS_CREATION_LIB_PVT.Get_Payment_Schedule_Id (p_customer_trx_id, l_ps_rec.payment_schedule_id);
5142 
5143         -- Modified for bug # 2712726
5144         -- ORASHID
5145         --
5146         l_nocopy_payment_schedule_id := l_ps_rec.payment_schedule_id;
5147 	arp_ps_pkg.fetch_p(l_nocopy_payment_schedule_id, l_ps_rec);
5148 
5149 	/*-----------------------------------------------+
5150         |   Creation of the new BR			 |
5151         +------------------------------------------------*/
5152 
5153         /* 5191632 - Added LE_ID and ORG_ID to create call */
5154 
5155 	AR_BILLS_CREATION_PUB.create_br_header (
5156 
5157 		p_api_version 			=>  1.0					,
5158 	        x_return_status 		=>  l_return_status			,
5159 	        p_init_msg_list    		=>  FND_API.G_TRUE			,
5160 	        x_msg_count     		=>  l_msg_count				,
5161 	        x_msg_data     	 		=>  l_msg_data				,
5162 
5163 	 	p_trx_number			=>  NULL				,
5164 		p_term_due_date			=>  l_trx_rec.term_due_date		,
5165 		p_batch_source_id		=>  l_trx_rec.batch_source_id		,
5166 		p_cust_trx_type_id		=>  l_trx_rec.cust_trx_type_id		,
5167 		p_invoice_currency_code		=>  l_trx_rec.invoice_currency_code	,
5168 		p_br_amount			=>  l_ps_rec.amount_due_remaining	,
5169 		p_trx_date			=>  l_trx_rec.trx_date			,
5170 		p_gl_date			=>  l_trh_rec.gl_date			,
5171 		p_drawee_id			=>  l_trx_rec.drawee_id			,
5172 		p_drawee_site_use_id		=>  l_trx_rec.drawee_site_use_id	,
5173 		p_drawee_contact_id		=>  l_trx_rec.drawee_contact_id		,
5174 		p_printing_option		=>  l_trx_rec.printing_option		,
5175 		p_comments			=>  l_trx_rec.comments			,
5176 		p_special_instructions  	=>  l_trx_rec.special_instructions	,
5177 		p_drawee_bank_account_id     	=>  l_trx_rec.drawee_bank_account_id	,
5178 		p_remittance_bank_account_id 	=>  l_trx_rec.remit_bank_acct_use_id,
5179 		p_override_remit_account_flag	=>  l_trx_rec.override_remit_account_flag,
5180 		p_batch_id			=>  l_trx_rec.batch_id			,
5181 		p_doc_sequence_id		=>  NULL				,
5182 		p_doc_sequence_value		=>  NULL				,
5183 		p_created_from			=>  'ARBRMAIB'				,
5184 		p_attribute_category		=>  l_trx_rec.attribute_category	,
5185 		p_attribute1			=>  l_trx_rec.attribute1		,
5186 		p_attribute2			=>  l_trx_rec.attribute2		,
5187 		p_attribute3			=>  l_trx_rec.attribute3		,
5188 		p_attribute4			=>  l_trx_rec.attribute4		,
5189 		p_attribute5			=>  l_trx_rec.attribute5		,
5190 		p_attribute6			=>  l_trx_rec.attribute6		,
5191 		p_attribute7			=>  l_trx_rec.attribute7		,
5192 		p_attribute8			=>  l_trx_rec.attribute8		,
5193 		p_attribute9			=>  l_trx_rec.attribute9		,
5194 		p_attribute10			=>  l_trx_rec.attribute10		,
5195 		p_attribute11			=>  l_trx_rec.attribute11		,
5196 		p_attribute12			=>  l_trx_rec.attribute12		,
5197 		p_attribute13			=>  l_trx_rec.attribute13		,
5198 		p_attribute14			=>  l_trx_rec.attribute14		,
5199 		p_attribute15			=>  l_trx_rec.attribute15		,
5200                 p_le_id                         =>  l_trx_rec.legal_entity_id,
5201                 p_org_id                        =>  l_trx_rec.org_id,
5202 		p_customer_trx_id		=>  p_new_customer_trx_id		,
5203 		p_new_trx_number		=>  p_new_trx_number			,
5204 		p_status			=>  l_status				);
5205 
5206 	IF  (l_return_status <> 'S')
5207 	THEN
5208 			IF PG_DEBUG in ('Y', 'C') THEN
5209 			   arp_util.debug( '>>>>>>>>>> Problems during the creation of the new BR');
5210 			   arp_util.debug( 'l_msg_count   : ' || l_msg_count);
5211 			   arp_util.debug( 'l_msg_data    : ' || l_msg_data);
5212 			END IF;
5213 			RAISE  API_exception;
5214 	END IF;
5215 
5216 
5217 	/*-----------------------------------------------+
5218         |   Assign the old BR to the new BR		 |
5219         +------------------------------------------------*/
5220 
5221 	AR_BILLS_CREATION_PUB.create_br_assignment (
5222 
5223 		p_api_version 			=>  1.0				,
5224 	        p_init_msg_list 		=>  FND_API.G_TRUE		,
5225 		p_commit			=>  FND_API.G_FALSE		,
5226 		p_validation_level		=>  FND_API.G_VALID_LEVEL_FULL	,
5227 	        x_return_status 		=>  l_return_status		,
5228 	        x_msg_count     		=>  l_msg_count			,
5229         	x_msg_data     	 		=>  l_msg_data			,
5230 
5231 		p_customer_trx_id		=>  p_new_customer_trx_id	,
5232 	 	p_br_ref_payment_schedule_id 	=>  l_ps_rec.payment_schedule_id,
5233 		p_assigned_amount		=>  l_ps_rec.amount_due_remaining,
5234 		p_attribute_category		=>  NULL	,
5235 		p_attribute1			=>  NULL	,
5236 		p_attribute2			=>  NULL	,
5237 		p_attribute3			=>  NULL	,
5238 		p_attribute4			=>  NULL	,
5239 		p_attribute5			=>  NULL	,
5240 		p_attribute6			=>  NULL	,
5241 		p_attribute7			=>  NULL	,
5242 		p_attribute8			=>  NULL	,
5243 		p_attribute9			=>  NULL	,
5244 		p_attribute10			=>  NULL	,
5245 		p_attribute11			=>  NULL	,
5246 		p_attribute12			=>  NULL	,
5247 		p_attribute13			=>  NULL	,
5248 		p_attribute14			=>  NULL	,
5249 		p_attribute15			=>  NULL	,
5250 		p_customer_trx_line_id		=>  l_customer_trx_line_id);
5251 
5252 	IF  (l_return_status <> 'S')
5253 	THEN
5254 			IF PG_DEBUG in ('Y', 'C') THEN
5255 			   arp_util.debug( '>>>>>>>>>> Problems during the assignment of the exchanged BR to the new BR');
5256 			   arp_util.debug( 'l_msg_count   : ' || l_msg_count);
5257 			   arp_util.debug( 'l_msg_data    : ' || l_msg_data);
5258 			END IF;
5259 			RAISE  API_exception;
5260 	END IF;
5261 
5262 
5263 
5264 	/*-----------------------------------------------+
5265         |   Update the event of the new BR created	 |
5266         +------------------------------------------------*/
5267 
5268 	l_trh_rec.customer_trx_id	:=	p_new_customer_trx_id;
5269 	ARP_TRANSACTION_HISTORY_PKG.lock_fetch_f_trx_id (l_trh_rec);
5270 
5271 	l_trh_rec.event			:=	'EXCHANGED';
5272 
5273 	ARP_PROC_TRANSACTION_HISTORY.update_transaction_history (l_trh_rec,
5274 								 l_trh_rec.transaction_history_id);
5275 
5276 
5277        /*-----------------------------------------------+
5278         |   Standard check of p_commit   		|
5279         +-----------------------------------------------*/
5280 
5281         IF FND_API.To_Boolean( p_commit )
5282         THEN
5283             IF PG_DEBUG in ('Y', 'C') THEN
5284                arp_util.debug( 'committing');
5285             END IF;
5286             Commit;
5287         END IF;
5288 
5289         IF PG_DEBUG in ('Y', 'C') THEN
5290            arp_util.debug('AR_BILLS_MAINTAIN_PUB.Exchange_BR()- ');
5291         END IF;
5292 
5293 
5294 EXCEPTION
5295 	WHEN 	API_exception 	THEN
5296 	 	ROLLBACK TO Exchange_BR_PVT;
5297                 x_return_status := FND_API.G_RET_STS_ERROR ;
5298 		IF PG_DEBUG in ('Y', 'C') THEN
5299 		   arp_util.debug ('API Exception : AR_BILLS_MAINTAIN_PUB.Exchange_BR : ' || SQLERRM);
5300 		END IF;
5301 		RAISE;
5302 
5303 	WHEN FND_API.G_EXC_ERROR THEN
5304                 IF PG_DEBUG in ('Y', 'C') THEN
5305                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
5306                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
5307                 END IF;
5308                 ROLLBACK TO Exchange_BR_PVT;
5309                 x_return_status := FND_API.G_RET_STS_ERROR ;
5310   	        IF PG_DEBUG in ('Y', 'C') THEN
5311   	           arp_util.debug( 'Exception Error');
5312   	        END IF;
5313 		RAISE;
5314 
5315 
5316         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5317                 IF PG_DEBUG in ('Y', 'C') THEN
5318                    arp_util.debug( 'SQLCODE : ' || SQLCODE);
5319                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
5320                 END IF;
5321                 ROLLBACK TO Exchange_BR_PVT;
5322                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5323 		IF PG_DEBUG in ('Y', 'C') THEN
5324 		   arp_util.debug( 'Exception Unexpected Error');
5325 		END IF;
5326 		RAISE;
5327 
5328 
5329         WHEN OTHERS THEN
5330                /*-------------------------------------------------------+
5331                 |  Handle application errors that result from trapable  |
5332                 |  error conditions. The error messages have already    |
5333                 |  been put on the error stack.                         |
5334                 +-------------------------------------------------------*/
5335 
5336 		IF PG_DEBUG in ('Y', 'C') THEN
5337 		   arp_util.debug( 'SQLCODE : ' || SQLCODE);
5338                    arp_util.debug( 'SQLERRM : ' || SQLERRM);
5339                 END IF;
5340 
5341 		IF (SQLCODE = -20001)
5342                 THEN
5343                       ROLLBACK TO Exchange_BR_PVT;
5344                       x_return_status := FND_API.G_RET_STS_ERROR ;
5345 		      RAISE;
5346                 ELSE
5347 		      NULL;
5348                 END IF;
5349 
5350                 ROLLBACK TO Exchange_BR_PVT;
5351                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5352 		RAISE;
5353 
5354 END Exchange_BR;
5355 
5356 
5357 
5358 
5359 /*===========================================================================+
5360  | FUNCTION                                                                  |
5361  |    revision                                                               |
5362  |                                                                           |
5363  | DESCRIPTION                                                               |
5364  |    This function returns the revision number of this package.             |
5365  |                                                                           |
5366  | SCOPE - PUBLIC                                                            |
5367  |                                                                           |
5368  | RETURNS    : Revision number of this package                              |
5369  |                                                                           |
5370  | MODIFICATION HISTORY                                                      |
5371  |      10 JAN 2001 John HALL           Created                              |
5372  +===========================================================================*/
5373 
5374 FUNCTION revision RETURN VARCHAR2 IS
5375 BEGIN
5376   RETURN '$Revision: 120.11.12010000.2 $';
5377 END revision;
5378 --
5379 
5380 END AR_BILLS_MAINTAIN_PUB;
5381