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