DBA Data[Home] [Help]

PACKAGE BODY: APPS.CE_CASHFLOW_PKG

Source


1 package body CE_CASHFLOW_PKG  as
2 /* $Header: cecashpb.pls 120.10 2011/02/17 08:31:26 talapati ship $ */
3 
4 l_DEBUG varchar2(1) := NVL(FND_PROFILE.value('CE_DEBUG'), 'N');
5 --  l_DEBUG varchar2(1) := 'Y';
6 
7 /* ---------------------------------------------------------------------
8 |  PRIVATE PROCEDURE                                                    |
9 |       update_ce_cashflows
10 |  DESCRIPTION                                                          |
11 |       update records in CE_CASHFLOWS					|
12 |  CALLED BY                                                            |
13 |       clear_cashflow
14  --------------------------------------------------------------------- */
15 PROCEDURE update_ce_cashflows(
16     	X_CASHFLOW_ID   		number,
17 	X_TRX_STATUS			varchar2,
18         X_actual_value_date  		date,
19         X_CLEARED_DATE          	date,
20         X_CLEARED_AMOUNT    		number,
21         X_CLEARED_ERROR_AMOUNT          number,
22         X_CLEARED_CHARGE_AMOUNT         number,
23         X_CLEARED_EXCHANGE_RATE_TYPE    varchar2,
24         X_CLEARED_EXCHANGE_RATE_DATE    date,
25         X_CLEARED_EXCHANGE_RATE         number,
26 	X_NEW_TRX_STATUS		varchar2,
27 	X_CLEARED_BY_FLAG		VARCHAR2 ,
28         X_LAST_UPDATE_DATE      	date,
29         X_LAST_UPDATED_BY       	number,
30         X_LAST_UPDATE_LOGIN     	number,
31 	X_STATEMENT_LINE_ID  		number,
32 	X_PASSIN_MODE			varchar2
33 	)   IS
34 BEGIN
35   IF l_DEBUG in ('Y', 'C') THEN
36   	cep_standard.debug('>>CE_CASHFLOW_PKG.UPDATE_CE_CASHFLOWS');
37   	cep_standard.debug('X_PASSIN_MODE: '|| X_PASSIN_MODE ||
38 			   ', X_STATEMENT_LINE_ID: '|| X_STATEMENT_LINE_ID||
39 			   ', X_TRX_STATUS: '||X_TRX_STATUS||
40 			   ', X_NEW_TRX_STATUS: '|| X_NEW_TRX_STATUS
41 			);
42   	cep_standard.debug('X_CLEARED_BY_FLAG: '|| X_CLEARED_BY_FLAG ||
43 			   ', X_CASHFLOW_ID: '|| X_CASHFLOW_ID ||
44 			   ', X_CLEARED_AMOUNT: '|| X_CLEARED_AMOUNT
45 			);
46   END IF;
47 
48     -- MANUAL_L, MANUAL_H, AUTO (X_TRX_STATUS = 'CLEARED', X_NEW_TRX_STATUS = 'RECONCILED')
49     -- MANUAL  (X_TRX_STATUS = 'RECONCILED', X_NEW_TRX_STATUS = 'CLEARED'),
50   IF ((X_PASSIN_MODE <> 'MANUAL_UC' and X_TRX_STATUS = 'CLEARED') or
51 	 ((X_PASSIN_MODE <> 'MANUAL_C' or X_PASSIN_MODE = 'MANUAL') and X_NEW_TRX_STATUS = 'CLEARED')) THEN
52       -- for cleared cashflows, keep current clear info
53     UPDATE CE_CASHFLOWS
54     SET CASHFLOW_STATUS_CODE 		= X_NEW_TRX_STATUS,
55  	  CLEARED_BY_FLAG 		= X_CLEARED_BY_FLAG,
56           LAST_UPDATE_DATE      	= X_LAST_UPDATE_DATE,
57           LAST_UPDATED_BY       	= X_LAST_UPDATED_BY,
58           LAST_UPDATE_LOGIN     	= X_LAST_UPDATE_LOGIN,
59 	  STATEMENT_LINE_ID		= X_STATEMENT_LINE_ID
60     WHERE CASHFLOW_ID = X_CASHFLOW_ID;
61   ELSE
62     -- MANUAL_C  (X_TRX_STATUS = 'CREATED', X_NEW_TRX_STATUS = 'CLEARED'),
63     -- MANUAL_UC (X_TRX_STATUS = 'CLEARED', X_NEW_TRX_STATUS = 'CREATED' ),
64     -- MANUAL (X_TRX_STATUS = 'CLEARED', X_NEW_TRX_STATUS = 'CREATED')
65     -- MANUAL_L, MANUAL_H, AUTO (X_TRX_STATUS = 'CREATED', X_NEW_TRX_STATUS = 'RECONCILED')
66     UPDATE CE_CASHFLOWS
67     SET CASHFLOW_STATUS_CODE 		= X_NEW_TRX_STATUS,
68           ACTUAL_VALUE_DATE		= X_actual_value_date,
69 	  CLEARED_DATE 			= X_CLEARED_DATE ,
70 	  CLEARED_AMOUNT 		= abs(X_CLEARED_AMOUNT),
71 	  CLEARED_EXCHANGE_RATE		= X_CLEARED_EXCHANGE_RATE,
72 	  CLEARED_EXCHANGE_DATE		= X_CLEARED_EXCHANGE_RATE_DATE,
73 	  CLEARED_EXCHANGE_RATE_TYPE	= X_CLEARED_EXCHANGE_RATE_TYPE ,
74 	  CLEARING_CHARGES_AMOUNT	= X_CLEARED_CHARGE_AMOUNT,
75 	  CLEARING_ERROR_AMOUNT		= X_CLEARED_ERROR_AMOUNT,
76  	  CLEARED_BY_FLAG 		= X_CLEARED_BY_FLAG,
77           LAST_UPDATE_DATE      	= X_LAST_UPDATE_DATE,
78           LAST_UPDATED_BY       	= X_LAST_UPDATED_BY,
79           LAST_UPDATE_LOGIN     	= X_LAST_UPDATE_LOGIN,
80 	  STATEMENT_LINE_ID		= X_STATEMENT_LINE_ID
81     WHERE CASHFLOW_ID = X_CASHFLOW_ID;
82 
83   END IF;
84 
85   IF l_DEBUG in ('Y', 'C') THEN
86   	cep_standard.debug('<<CE_CASHFLOW_PKG.UPDATE_CE_CASHFLOWS');
87   END IF;
88 
89 EXCEPTION
90   WHEN OTHERS THEN
91     IF l_DEBUG in ('Y', 'C') THEN
92     	cep_standard.debug('EXCEPTION: CE_CASHFLOW_PKG.UPDATE_CE_CASHFLOWS');
93     END IF;
94     RAISE;
95 END UPDATE_CE_CASHFLOWS;
96 
97 /* ---------------------------------------------------------------------
98 |  PRIVATE PROCEDURE                                                    |
99 |       RAISE_ACCT_EVENT
100 |  CALLED BY                                                            |
101 |       clear_cashflow    			        |
102  --------------------------------------------------------------------- */
103 PROCEDURE RAISE_ACCT_EVENT(
104 	 X_CASHFLOW_ID 			number,
105 	 X_ACCTG_EVENT 			varchar2,
106        	 X_ACCOUNTING_DATE 		date,
107  	 X_EVENT_STATUS_CODE		VARCHAR2,
108  	 X_EVENT_ID			IN OUT NOCOPY NUMBER) IS
109 --x_event_id  number;
110 BEGIN
111   IF l_DEBUG in ('Y', 'C') THEN
112   	cep_standard.debug('>>CE_CASHFLOW_PKG.RAISE_ACCT_EVENT');
113   END IF;
114 
115   ce_xla_acct_events_pkg.create_event(
116 		X_trx_id 	    => X_CASHFLOW_ID,
117 		X_event_type_code   => X_ACCTG_EVENT ,
118 		X_GL_DATE	    => X_ACCOUNTING_DATE);
119 
120 /*  x_event_id := ce_xla_acct_events_pkg.create_events(
121 		X_trx_id 	    => X_CASHFLOW_ID,
122 		X_event_type_code   => X_ACCTG_EVENT ,
123 		X_event_date	    => X_ACCOUNTING_DATE,
124 		X_event_status_code => X_EVENT_STATUS_CODE);
125 
126 */
127   IF l_DEBUG in ('Y', 'C') THEN
128   	cep_standard.debug('<<CE_CASHFLOW_PKG.RAISE_ACCT_EVENT');
129   END IF;
130 
131 EXCEPTION
132   WHEN OTHERS THEN
133     IF l_DEBUG in ('Y', 'C') THEN
134     	cep_standard.debug('EXCEPTION: CE_CASHFLOW_PKG.RAISE_ACCT_EVENT');
135     END IF;
136     RAISE;
137 END RAISE_ACCT_EVENT;
138 
139 /* ---------------------------------------------------------------------
140 |  PRIVATE PROCEDURE                                                    |
141 |       clear_cashflow                                                  |
142 |  DESCRIPTION                                                          |
143 |  CALLS                                                                |
144 |       update_ce_cashflows                                             |
145 |  CALLED BY                                                            |
146 |       CE_AUTO_BANK_CLEAR1.reconcile_trx                               |
147 |       CE_AUTO_BANK_CLEAR1.unclear_process                             |
148  --------------------------------------------------------------------- */
149 PROCEDURE clear_cashflow (
150         x_cashflow_id                NUMBER,
151         x_trx_status                 VARCHAR2,
152         x_actual_value_date          DATE,
153         x_accounting_date            DATE,
154         x_cleared_date               DATE,
155         x_cleared_amount             NUMBER,
156         x_cleared_error_amount       NUMBER,
157         x_cleared_charge_amount      NUMBER,
158         x_cleared_exchange_rate_type VARCHAR2,
159         x_cleared_exchange_rate_date DATE,
160         x_cleared_exchange_rate      NUMBER,
161         x_passin_mode                VARCHAR2,
162         x_statement_line_id          NUMBER,
163         x_statement_line_type        VARCHAR2
164         )   IS
165 
166     x_cleared_by_flag         VARCHAR2(1);
167     x_current_cleared_by_flag VARCHAR2(1);
168     x_new_trx_status          VARCHAR2(15);
169     x_event_id                NUMBER;
170     x_source_trxn_type        VARCHAR2(30);
171     x_new_stmt_ln_id          NUMBER;
172     x_trx_stmt_ln_id          NUMBER;
173     x_new_statement_line_type VARCHAR2(30);
174     x_cashflow_status_code    VARCHAR2(30);
175     x_cf_trx_status           VARCHAR2(30);
176     l_acctg_event             varchar2(30);
177 	l_err                     NUMBER;
178 
179 BEGIN
180   IF l_DEBUG in ('Y', 'C') THEN
181     cep_standard.debug('>>CE_CASHFLOW_PKG.clear_cashflow');
182   END IF;
183 
184   /* bug 7395052 - added CLEARED_BY_FLAG column which was earlier being
185    * fetched by a separate query after
186    *     ELSIF (X_PASSIN_MODE in ( 'MANUAL', 'MANUAL_UC'))
187    */
188   SELECT SOURCE_TRXN_TYPE,
189          STATEMENT_LINE_ID,
190          CASHFLOW_STATUS_CODE,
191          cleared_by_flag
192     INTO x_source_trxn_type,
193          x_trx_stmt_ln_id,
194          x_cashflow_status_code,
195          x_current_cleared_by_flag
196     FROM ce_cashflows
197    WHERE cashflow_id = X_CASHFLOW_ID;
198 
199   X_NEW_STMT_LN_ID     	    := nvl(X_STATEMENT_LINE_ID, x_trx_stmt_ln_id);
200   X_NEW_STATEMENT_LINE_TYPE := X_STATEMENT_LINE_TYPE;
201 
202   -- Bug 10164596
203   SELECT COUNT(*) into l_err
204 					FROM ce_cashflows
205 				WHERE cashflow_status_code='CANCELED'
206 				AND cashflow_id =X_CASHFLOW_ID;
207   if(l_err=1) then
208     FND_MESSAGE.set_name('CE','CE_BAT_CANCELED_WARN');
209 	FND_MESSAGE.SET_TOKEN('CFLOW', X_CASHFLOW_ID);
210     RAISE APP_EXCEPTION.application_exception;
211   END IF;
212 
213 
214   -- IBY will not pass X_TRX_STATUS for cashflows in IBY batch
215   IF (X_TRX_STATUS is null) THEN
216     X_CF_TRX_STATUS := X_CASHFLOW_STATUS_CODE;
217   ELSE
218     X_CF_TRX_STATUS := X_TRX_STATUS;
219   END IF;
220 
221   IF (X_PASSIN_MODE = 'MANUAL_C')
222   THEN    -- manual clearing
223     X_NEW_TRX_STATUS  := 'CLEARED';
224     X_CLEARED_BY_FLAG := 'M';
225 
226   ELSIF (X_PASSIN_MODE in ( 'MANUAL_L', 'MANUAL_H', 'AUTO'))
227   THEN  --manual/auto reconciliation
228     IF (X_CF_TRX_STATUS = 'CLEARED')
229     THEN
230         X_NEW_TRX_STATUS  := 'RECONCILED';
231         X_CLEARED_BY_FLAG := 'M';
232     ELSIF (X_CF_TRX_STATUS = 'CREATED')
233     THEN
234         X_NEW_TRX_STATUS  := 'RECONCILED';
235         X_CLEARED_BY_FLAG := 'R';
236     ELSE
237         FND_MESSAGE.set_name( 'CE', 'CE_CF_CANNOT_RECON' );
238         RAISE APP_EXCEPTION.application_exception;
239     END IF;
240 
241   ELSIF (X_PASSIN_MODE in ( 'MANUAL', 'MANUAL_UC'))
242   THEN   -- manual unreconciled/ manual unclearing
243 
244     /* Bug 7395052 - Removed redundant query call */
245     --  select cleared_by_flag
246     --  into x_current_cleared_by_flag
247     --  from ce_cashflows
248     --  where cashflow_id = X_CASHFLOW_ID;
249 
250     /* Bug 7395052 - Added condition to ensure that if the trx is a
251        statement cashflow, its status should not become created */
252     IF (x_source_trxn_type = 'STMT')
253     THEN
254         X_NEW_TRX_STATUS  := 'CLEARED';
255     ELSE
256         X_NEW_TRX_STATUS  := 'CREATED';
257     END IF;
258 
259     IF (x_current_cleared_by_flag = 'R')
260     THEN
261         X_CLEARED_BY_FLAG := NULL;
262     ELSIF (x_current_cleared_by_flag = 'M')
263     THEN
264         X_CLEARED_BY_FLAG := 'M';
265     ELSE
266         FND_MESSAGE.set_name( 'CE', 'CE_CF_CANNOT_UNRECON' );
267         RAISE APP_EXCEPTION.application_exception;
268     END IF;
269 
270   END IF;
271 
272 
273   IF (X_PASSIN_MODE in ('MANUAL_C','MANUAL_L', 'MANUAL_H', 'AUTO')) THEN
274 
275     -- UPDATE CE_CASHFLOWS
276     update_ce_cashflows(
277     	X_CASHFLOW_ID   		=> X_CASHFLOW_ID,
278 	X_TRX_STATUS			=> X_CF_TRX_STATUS,
279         X_actual_value_date  		=> X_actual_value_date,
280         X_CLEARED_DATE          	=> X_CLEARED_DATE ,
281         X_CLEARED_AMOUNT    		=> abs(X_CLEARED_AMOUNT),
282         X_CLEARED_ERROR_AMOUNT          => X_CLEARED_ERROR_AMOUNT,
283         X_CLEARED_CHARGE_AMOUNT         => X_CLEARED_CHARGE_AMOUNT,
284         X_CLEARED_EXCHANGE_RATE_TYPE    => X_CLEARED_EXCHANGE_RATE_TYPE ,
285         X_CLEARED_EXCHANGE_RATE_DATE    => X_CLEARED_EXCHANGE_RATE_DATE,
286         X_CLEARED_EXCHANGE_RATE         => X_CLEARED_EXCHANGE_RATE,
287 	X_NEW_TRX_STATUS		=> X_NEW_TRX_STATUS,
288 	X_CLEARED_BY_FLAG		=> X_CLEARED_BY_FLAG,
289         X_LAST_UPDATE_DATE      	=> sysdate,
290         X_LAST_UPDATED_BY       	=> NVL(FND_GLOBAL.user_id,-1),
291         X_LAST_UPDATE_LOGIN     	=> NVL(FND_GLOBAL.user_id,-1),
292 	X_STATEMENT_LINE_ID		=> x_new_stmt_ln_id,
293 	X_PASSIN_MODE 			=> X_PASSIN_MODE
294         );
295 
296     -- bug 5203892 do not raise any acctg event for STMT (JEC) cashflows
297     --             when clearing/unclearing (reconciliation/unreconciliation)
298     IF x_source_trxn_type = 'BAT' THEN
299       l_acctg_event := 'CE_BAT_CLEARED';
300     --ELSE
301       --l_acctg_event := 'CE_STMT_RECORDED';
302     --END IF;
303 
304       -- RAISE CLEARING/UNCLEARING ACCOUNTING EVENT
305       IF (X_CF_TRX_STATUS = 'CREATED') THEN
306         RAISE_ACCT_EVENT
307 	(X_CASHFLOW_ID 			=> X_CASHFLOW_ID,
308 	 X_ACCTG_EVENT 			=> l_acctg_event,     --'CLEARING',
309          X_ACCOUNTING_DATE 		=> X_ACCOUNTING_DATE,
310 	 X_EVENT_STATUS_CODE		=> 'UNPROCESSED',
311 	 X_EVENT_ID			=> X_EVENT_ID);
312       END IF;
313     END IF;  --x_source_trxn_type = 'BAT'
314 
315   ELSIF (X_PASSIN_MODE in ('MANUAL', 'MANUAL_UC')) THEN
316     -- MANUAL (unreconciled), MANUAL_UC (uncleared)
317     -- do not remove ce_cashflows.statement_line_id when unclearing/unreconciling JEC/ZBA trx
318     -- x_source_trxn_type: 'STMT'  (JEC trx), 'BAT' (ZBA trx)
319 
320     IF (X_STATEMENT_LINE_TYPE is null) and
321 	( X_NEW_STMT_LN_ID is not null) THEN
322 	select trx_type
323 	into X_NEW_STATEMENT_LINE_TYPE
324 	from ce_statement_lines
325 	where statement_line_id = X_NEW_STMT_LN_ID;
326     END IF;
327 
328     IF (x_source_trxn_type <> 'STMT')  THEN
329       IF (X_NEW_STATEMENT_LINE_TYPE not in ('SWEEP_IN', 'SWEEP_OUT')) THEN
330 	X_NEW_STMT_LN_ID := NULL;
331       END IF;
332     END IF;
333 
334     IF  ((X_PASSIN_MODE =  'MANUAL_UC') or (X_NEW_TRX_STATUS = 'CREATED' and X_CLEARED_BY_FLAG is null)) THEN
335       update_ce_cashflows(
336     	X_CASHFLOW_ID   		=> X_CASHFLOW_ID,
337 	X_TRX_STATUS			=> X_CF_TRX_STATUS,
338         X_actual_value_date  		=> null,
339         X_CLEARED_DATE          	=> null,
340         X_CLEARED_AMOUNT    		=> null,
341         X_CLEARED_ERROR_AMOUNT          => null,
342         X_CLEARED_CHARGE_AMOUNT         => null,
343         X_CLEARED_EXCHANGE_RATE_TYPE    => null,
344         X_CLEARED_EXCHANGE_RATE_DATE    => null,
345         X_CLEARED_EXCHANGE_RATE         => null,
346 	X_NEW_TRX_STATUS		=> X_NEW_TRX_STATUS,
347 	X_CLEARED_BY_FLAG		=> X_CLEARED_BY_FLAG ,
348         X_LAST_UPDATE_DATE      	=> sysdate,
349         X_LAST_UPDATED_BY       	=> NVL(FND_GLOBAL.user_id,-1),
350         X_LAST_UPDATE_LOGIN     	=> NVL(FND_GLOBAL.user_id,-1),
351 	X_STATEMENT_LINE_ID		=> x_new_stmt_ln_id,
352 	X_PASSIN_MODE 			=> X_PASSIN_MODE
353         );
354 
355     ELSE
356 
357       -- UPDATE CE_CASHFLOWS
358       update_ce_cashflows(
359     	X_CASHFLOW_ID   		=> X_CASHFLOW_ID,
360 	X_TRX_STATUS			=> X_CF_TRX_STATUS,
364         X_CLEARED_ERROR_AMOUNT          => X_CLEARED_ERROR_AMOUNT,
361         X_actual_value_date  		=> X_actual_value_date,
362         X_CLEARED_DATE          	=> X_CLEARED_DATE ,
363         X_CLEARED_AMOUNT    		=> abs(X_CLEARED_AMOUNT),
365         X_CLEARED_CHARGE_AMOUNT         => X_CLEARED_CHARGE_AMOUNT,
366         X_CLEARED_EXCHANGE_RATE_TYPE    => X_CLEARED_EXCHANGE_RATE_TYPE ,
367         X_CLEARED_EXCHANGE_RATE_DATE    => X_CLEARED_EXCHANGE_RATE_DATE,
368         X_CLEARED_EXCHANGE_RATE         => X_CLEARED_EXCHANGE_RATE,
369 	X_NEW_TRX_STATUS		=> X_NEW_TRX_STATUS,
370 	X_CLEARED_BY_FLAG		=> X_CLEARED_BY_FLAG ,
371         X_LAST_UPDATE_DATE      	=> sysdate,
372         X_LAST_UPDATED_BY       	=> NVL(FND_GLOBAL.user_id,-1),
373         X_LAST_UPDATE_LOGIN     	=> NVL(FND_GLOBAL.user_id,-1),
374 	X_STATEMENT_LINE_ID		=> x_new_stmt_ln_id,
375 	X_PASSIN_MODE 			=> X_PASSIN_MODE
376         );
377     END IF;
378 
379     -- bug 5203892 do not raise any acctg event for STMT (JEC) cashflows
380     --             when clearing/unclearing (reconciliation/unreconciliation)
381     IF x_source_trxn_type = 'BAT' THEN
382       l_acctg_event := 'CE_BAT_UNCLEARED';
383     --ELSE
384     --  l_acctg_event := 'CE_STMT_CANCELED';
385     --END IF;
386 
387       -- RAISE CLEARING/UNCLEARING ACCOUNTING EVENT
388       IF (X_CF_TRX_STATUS in ( 'CLEARED', 'RECONCILED')) THEN
389         RAISE_ACCT_EVENT
390 	(X_CASHFLOW_ID 			=> X_CASHFLOW_ID,
391 	 X_ACCTG_EVENT 			=> l_acctg_event, --'UNCLEARING',
392          X_ACCOUNTING_DATE 		=> X_ACCOUNTING_DATE,
393 	 X_EVENT_STATUS_CODE		=> 'UNPROCESSED',
394 	 X_EVENT_ID			=> X_EVENT_ID);
395 
396       END IF;
397     END IF; --x_source_trxn_type = 'BAT'
398 
399   END IF;
400 
401   IF l_DEBUG in ('Y', 'C') THEN
402   	cep_standard.debug('<<CE_CASHFLOW_PKG.clear_cashflow');
403   END IF;
404 EXCEPTION
405   WHEN OTHERS THEN
406     IF l_DEBUG in ('Y', 'C') THEN
407     	cep_standard.debug('EXCEPTION: CE_CASHFLOW_PKG.clear_cashflow');
408     END IF;
409     RAISE;
410 END clear_cashflow;
411 
412 /* ---------------------------------------------------------------------
413 |  PRIVATE PROCEDURE                                                    |
414 |       update_user_lines                                               |
415 |  DESCRIPTION                                                          |
416 |       To insert/update user defined inflows/outflows                  |
417 |    CALLED BY                                                          |
418 |       CashPositionAMImpl.java                                         |
419  --------------------------------------------------------------------- */
420 PROCEDURE UPDATE_USER_LINES
421 (
422  X_WORKSHEET_HEADER_ID  IN NUMBER,
423  X_WORKSHEET_LINE_ID    IN NUMBER,
424  X_LINE_DESCRIPTION     IN VARCHAR2,
425  X_SOURCE_TYPE          IN VARCHAR2,
426  X_BANK_ACCOUNT_ID      IN NUMBER,
427  X_AS_OF_DATE           IN DATE,
428  X_AMOUNT               IN NUMBER
429 ) IS
430 l_amount NUMBER;
431 BEGIN
432       IF l_DEBUG in ('Y', 'C') THEN
433         cep_standard.debug('>>CE_CASHFLOW_PKG.update_user_lines');
434       END IF;
435 
436       IF X_SOURCE_TYPE = 'UDO' AND X_AMOUNT <0 THEN
437          l_amount :=  -1*X_AMOUNT;
438       ELSE
439          l_amount :=  X_AMOUNT;
440       END IF;
441 
442       INSERT INTO
443       CE_CP_WORKSHEET_USER_LINES
444       (
445       WORKSHEET_HEADER_ID,
446       WORKSHEET_LINE_ID,
447       LINE_DESCRIPTION,
448       SOURCE_TYPE,
449       BANK_ACCOUNT_ID,
450       AS_OF_DATE,
451       AMOUNT
452       )
453       VALUES
454       (
455       X_WORKSHEET_HEADER_ID,
456       X_WORKSHEET_LINE_ID,
457       X_LINE_DESCRIPTION,
458       X_SOURCE_TYPE,
459       X_BANK_ACCOUNT_ID,
460       Trunc(X_AS_OF_DATE),
461       l_amount
462     );
463     IF l_DEBUG in ('Y', 'C') THEN
464         cep_standard.debug('<<CE_CASHFLOW_PKG.update_user_lines');
465     END IF;
466 EXCEPTION
467   WHEN Dup_Val_On_Index THEN
468       IF l_DEBUG in ('Y', 'C') THEN
469         cep_standard.debug('Updating CE_WORKSHEET_USER_LINES');
470       END IF;
471       UPDATE CE_CP_WORKSHEET_USER_LINES
472       SET
473             SOURCE_TYPE = X_SOURCE_TYPE,
474             AMOUNT = l_amount
475       WHERE WORKSHEET_HEADER_ID = X_WORKSHEET_HEADER_ID
476       AND   WORKSHEET_LINE_ID   = X_WORKSHEET_LINE_ID
477       AND   BANK_ACCOUNT_ID     = X_BANK_ACCOUNT_ID
478       AND   Trunc(AS_OF_DATE)   = Trunc(X_AS_OF_DATE);
479 
480       UPDATE CE_CP_WORKSHEET_USER_LINES
481       SET
482             LINE_DESCRIPTION = X_LINE_DESCRIPTION
483       WHERE WORKSHEET_HEADER_ID = X_WORKSHEET_HEADER_ID
484       AND   WORKSHEET_LINE_ID   = X_WORKSHEET_LINE_ID
485       AND   Trunc(AS_OF_DATE)   = Trunc(X_AS_OF_DATE);
486       IF l_DEBUG in ('Y', 'C') THEN
487         cep_standard.debug('<<CE_CASHFLOW_PKG.update_user_lines');
488       END IF;
489   WHEN OTHERS THEN
490       IF l_DEBUG in ('Y', 'C') THEN
491     	    cep_standard.debug('EXCEPTION: CE_CASHFLOW_PKG.update_user_lines');
492       END IF;
493       RAISE;
494 END UPDATE_USER_LINES;
495 
496 END CE_CASHFLOW_PKG;