DBA Data[Home] [Help]

PACKAGE BODY: APPS.FARX_C_WD

Source


1 PACKAGE BODY FARX_C_WD as
2 /* $Header: farxcwdb.pls 120.12.12010000.1 2008/07/28 13:23:13 appldev ship $ */
3 
4 
5 PROCEDURE WHATIF (
6   errbuf           out nocopy     varchar2,
7   retcode          out nocopy     varchar2,
8   argument1        in  varchar2,                -- book
9   argument20       in  varchar2,                -- set_of_books_id /* added for enhancement bug 3037321 */
10   argument2        in  varchar2,                -- begin_period
11   argument3        in  varchar2,                -- num_periods
12   argument4        in  varchar2  default  null, -- begin_asset
13   argument5        in  varchar2  default  null, -- end_asset
14   argument6        in  varchar2  default  null, -- begin_dpis
15   argument7        in  varchar2  default  null, -- end_dpis
16   argument8        in  varchar2  default  null, -- description
17   argument9        in  varchar2  default  null, -- category flex struct
18   argument10       in  varchar2  default  null,	-- category_id
19   argument11       in  varchar2  default  null, -- new method
20   argument12       in  varchar2  default  null,	-- new life in months
21   argument13       in  varchar2  default  null, -- new rate
22   argument14       in  varchar2  default  null, -- new prorate convention
23   argument15       in  varchar2  default  null, -- new salvage percentage
24   argument16       in  varchar2  default  null, -- AMORTIZED yes_no
25   argument17       in  varchar2  default  null, -- fully reserved yes_no
26   argument18       in  varchar2  default  'NO', -- hypothetical NO
27   argument19       in  varchar2  default  null, -- bonus_rule
28   argument21       in  varchar2  default  null,
29   argument22       in  varchar2  default  null,
30   argument23       in  varchar2  default  null,
31   argument24       in  varchar2  default  null,
32   argument25       in  varchar2  default  null,
33   argument26       in  varchar2  default  null,
34   argument27       in  varchar2  default  null,
35   argument28       in  varchar2  default  null,
36   argument29       in  varchar2  default  null,
37   argument30       in  varchar2  default  null,
38   argument31       in  varchar2  default  null,
39   argument32       in  varchar2  default  null,
40   argument33       in  varchar2  default  null,
41   argument34       in  varchar2  default  null,
42   argument35       in  varchar2  default  null,
43   argument36       in  varchar2  default  null,
44   argument37       in  varchar2  default  null,
45   argument38       in  varchar2  default  null,
46   argument39       in  varchar2  default  null,
47   argument40       in  varchar2  default  null,
48   argument41       in  varchar2  default  null,
49   argument42       in  varchar2  default  null,
50   argument43       in  varchar2  default  null,
51   argument44       in  varchar2  default  null,
52   argument45       in  varchar2  default  null,
53   argument46       in  varchar2  default  null,
54   argument47       in  varchar2  default  null,
55   argument48       in  varchar2  default  null,
56   argument49       in  varchar2  default  null,
57   argument50       in  varchar2  default  null,
58   argument51       in  varchar2  default  null,
59   argument52       in  varchar2  default  null,
60   argument53       in  varchar2  default  null,
61   argument54       in  varchar2  default  null,
62   argument55       in  varchar2  default  null,
63   argument56       in  varchar2  default  null,
64   argument57       in  varchar2  default  null,
65   argument58       in  varchar2  default  null,
66   argument59       in  varchar2  default  null,
67   argument60       in  varchar2  default  null,
68   argument61       in  varchar2  default  null,
69   argument62       in  varchar2  default  null,
70   argument63       in  varchar2  default  null,
71   argument64       in  varchar2  default  null,
72   argument65       in  varchar2  default  null,
73   argument66       in  varchar2  default  null,
74   argument67       in  varchar2  default  null,
75   argument68       in  varchar2  default  null,
76   argument69       in  varchar2  default  null,
77   argument70       in  varchar2  default  null,
78   argument71       in  varchar2  default  null,
79   argument72       in  varchar2  default  null,
80   argument73       in  varchar2  default  null,
81   argument74       in  varchar2  default  null,
82   argument75       in  varchar2  default  null,
83   argument76       in  varchar2  default  null,
84   argument77       in  varchar2  default  null,
85   argument78       in  varchar2  default  null,
86   argument79       in  varchar2  default  null,
87   argument80       in  varchar2  default  null,
88   argument81       in  varchar2  default  null,
89   argument82       in  varchar2  default  null,
90   argument83       in  varchar2  default  null,
91   argument84       in  varchar2  default  null,
92   argument85       in  varchar2  default  null,
93   argument86       in  varchar2  default  null,
94   argument87       in  varchar2  default  null,
95   argument88       in  varchar2  default  null,
96   argument89       in  varchar2  default  null,
97   argument90       in  varchar2  default  null,
98   argument91       in  varchar2  default  null,
99   argument92       in  varchar2  default  null,
100   argument93       in  varchar2  default  null,
101   argument94       in  varchar2  default  null,
102   argument95       in  varchar2  default  null,
103   argument96       in  varchar2  default  null,
104   argument97       in  varchar2  default  null,
105   argument98       in  varchar2  default  null,
106   argument99       in  varchar2  default  null,
107   argument100      in  varchar2  default  null) is
108 
109 
110 -- Arguments as follows:   ('M' indicated mandatory; others are optional)
111 -- argument1		book	(M)
112 -- argument2		begin_period   (M)
113 -- argument3		num_periods    (M)
114 -- argument4		begin_asset
115 -- argument5		end_asset
116 -- argument6		begin_dpis
117 -- argument7		end_dpis
118 -- argument8		description
119 -- argument9		category_id
120 -- argument11		new method
121 -- argument12		new life
122 -- argument13		new adjusted_rate
123 -- argument14		new prorate convention
124 -- argument15		new salvage percentage
125 -- argument16		EXPENSED or AMORTIZED
126 -- argument17		check fully reserved assets flag
127 -- argument18           hypothetical not used
128 -- argument19		bonus_rule
129 -- argument20           set_of_books_id (M) /* added for enhancement bug 3037321 */
130 
131   h_request_id     number;
132   h_user_id	varchar2(20);
133   ret 		   boolean;
134 
135   h_assets	   fa_std_types.number_tbl_type;
136   h_num_assets	   number;
137 
138   h_begin_dpis	 	date;
139   h_date_in_service 	date;
140   h_end_dpis		date;
141   h_begin_str		varchar2(25);
142   h_end_str		varchar2(25);
143   h_date_format		varchar2(25);
144 
145   h_begin_per		varchar2(25);
146 
147   h_exp_amt		varchar2(10);
148   h_cat_id		number;
149   h_cat_struct		number;
150 
151   h_adj_rate		number;
152 
153   h_count		number;
154 
155   h_sqlstmt		varchar2(400);
156 
157 
158   h_mesg_name		varchar2(30);
159   h_mesg_str		varchar2(2000);
160   h_param_error		varchar2(30);
161   h_value_error		varchar2(240);
162 
163   h_check 		varchar2(5);
164 
165   l_mode                varchar2(10);  -- This stores value of h_exp_amt or 'PROJ'
166                                        -- if user didn't provide any parameters.
167 
168   begin
169 
170  -- dbms_session.reset_package;
171 
172   -- VALIDATE THE ARGUMENTS.  SINCE RX CLIENT CURRENTLY DOES NO
173   -- VALIDATION, USER CAN ENTER GARBAGE STRINGS IF THEY WANT.  NEED
174   -- TO VALIDATE EVERYTHING RIGHT HERE.
175 
176 
177   -- BOOK
178 
179   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
180   h_value_error := argument1;
181   h_param_error := 'BOOK';
182 
183   h_count := 0;
184 
185   if argument1 is null then
186 
187 	fnd_message.set_name('OFA','FA_WHATIF_PARAM_REQUIRED');
188 	h_mesg_str := fnd_message.get;
189 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
190 
191 	retcode := 2;
192 	return;
193 
194   end if;
195 
196   select count(*) into h_count
197   from fa_book_controls
198   where book_Type_code = argument1 and rownum < 2;
199 
200   if h_count = 0 then
201 	fnd_message.set_name('OFA','FA_WHATIF_PARAM_REQUIRED');
202 	h_mesg_str := fnd_message.get;
203 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
204 
205 	retcode := 2;
206 	return;
207   end if;
208 
209   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
210   h_value_error := argument20;
211   h_param_error := 'SET OF BOOKS ID';
212 
213   -- Enhancement Bug 3037321
214   FARX_C_WD.sob_id := to_number(argument20);
215   select mrc_sob_type_code,currency_code
216   into FARX_C_WD.mrc_sob_type,FARX_C_WD.currency
217   from gl_sets_of_books
218   where set_of_books_id = to_number(argument20);
219 
220   -- Enhancement Bug 3037321
221   if(FARX_C_WD.mrc_sob_type = 'R') then
222     fnd_client_info.set_currency_context(FARX_C_WD.sob_id);
223   end if;
224 
225   -- PERIOD NAME
226   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
227   h_value_error := argument2;
228   h_param_error := 'PERIOD NAME';
229 
230 
231   if argument2 is null then
232 	fnd_message.set_name('OFA','FA_WHATIF_PARAM_REQUIRED');
233 	h_mesg_str := fnd_message.get;
234 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
235 
236 	retcode := 2;
237 	return;
238   end if;
239 
240   h_count := 0;
241   select count(*) into h_count
242   from fa_book_controls bc, fa_calendar_periods cp
243   where bc.book_type_code = argument1
244   and bc.deprn_calendar = cp.calendar_type
245   and cp.period_name = argument2 and rownum < 2;
246 
247   if h_count = 0 then
248 
249 	fnd_message.set_name('OFA','FA_WHATIF_PARAM_REQUIRED');
250 	h_mesg_str := fnd_message.get;
251 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
252 
253 	retcode := 2;
254 	return;
255   end if;
256 
257 
258 
259   -- NUM PERIODS
260 
261   if ((argument3 is null) OR (to_number(argument3) <= 0  OR
262 	to_number(argument3) <> floor(to_number(argument3)))) then
263 
264 	fnd_message.set_name('OFA','FA_WHATIF_PARAM_REQUIRED');
265 	h_mesg_str := fnd_message.get;
266 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
267 
268 	retcode := 2;
269 	return;
270   end if;
271 
272 
273   -- Make sure calendar is defined for duration of projection.
274 
275   select count(*) into h_count
276   from fa_book_controls bc, fa_calendar_types ct,
277   fa_calendar_periods cp
278   where bc.book_type_code = argument1
279   and bc.deprn_calendar = ct.calendar_type
280   and ct.calendar_type = cp.calendar_type
281   and cp.start_date >= (select cp1.start_date from
282 	fa_calendar_periods cp1
283 	where cp1.calendar_type = cp.calendar_type
284 	and cp1.period_name = argument2);
285 
286   if h_count < to_number(argument3) then
287 	fnd_message.set_name('OFA','FA_PROJ_CALS_UNDEFINED');
288 	h_mesg_str := fnd_message.get;
289 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
290 	retcode := 2;
291 	return;
292   end if;
293 
294 
295   --
296   -- NOT hypothetical case
297   --
298   if (upper(argument18) in ('NO', 'N')) then
299 
300       -- BEGIN/END ASSET
301 
302       if (argument4 is not null and argument5 is not null AND
303 	argument5 < argument4) then
304 
305 	fnd_message.set_name('OFA','FA_WHATIF_BEGIN_END_ASSET');
306 	h_mesg_str := fnd_message.get;
307 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
308 
309 	retcode := 2;
310 	return;
311       end if;
312 
313       -- NOTE: DATE FORMATTING PROBLEMS SHOULD BE FEW AND FAR BETWEEN.
314       -- THIS IS ONE OF THE FEW THINGS THAT THE RX CLIENT CURRENTLY CHECKS
315       -- FOR.  MOREOVER, CM WILL PUT ANY UNHANDLED DATE FORMATTING
316       -- EXCEPTIONS INTO THE LOG FILE.
317 
318       -- CATEGORY: FIRST GET CATEGORY_ID, THEN CHECK IF EXISTS, ENABLED, ETC.
319 
320       if (argument10 is not null) then
321 	h_cat_id := to_number(argument10);
322       end if;
323 
324       /* ********************************************************************
325        Commenting out all code to validate and get category_id since this
326        is passed from SRS in argument 10
327 
328       h_mesg_name := 'FA_FE_LOOKUP_IN_SYSTEM_CTLS';
329       select category_flex_structure into h_cat_struct
330               from fa_system_controls;
331 
332       h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
333       h_value_error := argument9;
334       h_param_error := 'CATEGORY';
335 
336       if fnd_flex_keyval.validate_segs (
337 	  operation => 'CHECK_COMBINATION',
338   	  appl_short_name => 'OFA',
339 	  key_flex_code => 'CAT#',
340 	  structure_number => h_cat_struct,
341 	  concat_segments => argument9,
342 	  values_or_ids  => 'V',
343           validation_date  =>SYSDATE,
344           displayable  => 'ALL',
345           data_set => NULL,
346           vrule => NULL,
347           where_clause => NULL,
348           get_columns => NULL,
349           allow_nulls => FALSE,
350           allow_orphans => FALSE,
351           resp_appl_id => NULL,
352           resp_id => NULL,
353           user_id => NULL) = FALSE then
354 
355     	     fnd_message.set_name('OFA','FA_WHATIF_NO_CAT');
356 	     fnd_message.set_token('CAT',argument9,FALSE);
357 	     h_mesg_str := fnd_message.get;
358 	     fa_rx_conc_mesg_pkg.log(h_mesg_str);
359 
360 	     retcode := 2;
361 	     return;
362       end if;
363        h_cat_id := fnd_flex_keyval.combination_id;
364        h_count := 0;
365 
366        select count(*) into h_count from fa_categories cat,
367                                          fa_category_books cb
368        where cat.category_id = h_cat_id
369        and cat.enabled_flag = 'Y' and cat.capitalize_flag = 'YES'
370        and sysdate between nvl(cat.start_date_active,sysdate-1) and
371 	   nvl(cat.end_date_active,sysdate+1)
372        and cat.category_id = cb.category_id
373        and cb.book_type_code = argument1 and rownum < 2;
374 
375        if h_count = 0 then
376 	  fnd_message.set_name('OFA','FA_WHATIF_CAT_NOT_SET_UP');
377 	  fnd_message.set_token('CAT',argument9,FALSE);
378 	  h_mesg_str := fnd_message.get;
379 	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
380 
381 	  retcode := 2;
382 	  return;
383        end if;
384       end if;
385      ********************************************************************* */
386 
387 
388       -- CHECK_FULLY_RESERVED_FLAG
389 
390       h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
391       h_value_error := argument17;
392       h_param_error := 'FULLY_RSVD_FLAG';
393 
394       if (argument17 not in ('Y','N','YES','NO')) then
395 
396 	  fnd_message.set_name('OFA',h_mesg_name);
397 	  if h_mesg_name = 'FA_WHATIF_PARAM_ERROR' then
398 		fnd_message.set_token('VALUE',h_value_error,FALSE);
399 		fnd_message.set_token('PARAM',h_param_error,FALSE);
400 	  end if;
401 	  h_mesg_str := fnd_message.get;
402  	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
403 	  retcode := 2;
404 
405 	return;
406       end if;
407 
408       -- CONVERT DPIS'S INTO DATE-TYPED VARIABLES
412           h_begin_dpis := to_date(argument6, 'YYYY/MM/DD HH24:MI:SS');
409       -- THIS IS THE APPS STANDARD.  SUBMISSION FORM DOES THE SAME THING.
410 
411       if (argument6 is not null) then
413       end if;
414 
415       if (argument7 is not null) then
416          h_end_dpis := to_date(argument7, 'YYYY/MM/DD HH24:MI:SS');
417       end if;
418 
419       if (argument6 is not null and argument7 is not null) then
420          if h_end_dpis < h_begin_dpis then
421 	   fnd_message.set_name('OFA','FA_SHARED_BAD_END_DATE');
422 	   h_mesg_str := fnd_message.get;
423 	   fa_rx_conc_mesg_pkg.log(h_mesg_str);
424   	   retcode := 2;
425 	   return;
426          end if;
427       end if;
428 
429   end if;   -- NOT hypothetical case
430 
431   -- METHOD
432   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
433   h_value_error := argument10;
434   h_param_error := 'METHOD';
435 
436   if (argument11 is not null) then
437 
438 
439   h_count := 0;
440   select count(*) into h_count
441   from fa_methods
442   where method_code = argument11 and rownum < 2;
443 
444   if h_count = 0 then
445 	fnd_message.set_name('OFA','FA_WHATIF_NO_METHOD');
446 	fnd_message.set_token('METHOD',argument11,FALSE);
447 	h_mesg_str := fnd_message.get;
448 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
449 
450 	retcode := 2;
451 	return;
452   end if;
453   end if;
454 
455 
456 
457   if (argument11 is not null) then
458 
459   -- LIFE
460   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
461   h_value_error := argument12;
462   h_param_error := 'LIFE';
463 
464   h_count := 0;
465   select count(*) into h_count from fa_methods
466   where method_code = argument11
467   and rate_source_rule in ('TABLE','CALCULATED','FORMULA')
468   and rownum < 2;
469 
470   if h_count > 0 then     -- this is a life-based method
471 
472     if (argument12 is null) then
473 
474 	fnd_message.set_name('OFA','FA_MASSCHG_LIFE_BASED_METHOD');
475 	h_mesg_str := fnd_message.get;
476 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
477 
478 	retcode := 2;
479 	return;
480     end if;
481 
482     h_count := 0;
483     select count(*) into h_count from fa_methods
484     where method_code = argument11 and life_in_months = to_number(argument12)
485 	and rownum < 2;
486 
487     if h_count = 0 then
488 	fnd_message.set_name('OFA','FA_SHARED_INVALID_METHOD_LIFE');
489 	h_mesg_str := fnd_message.get;
490 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
491 
492 	retcode := 2;
493 	return;
494     end if;
495 
496     if (argument13 is not null) then
497 	fnd_message.set_name('OFA','FA_METHOD_NO_RATES');
498 	h_mesg_str := fnd_message.get;
499 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
500 
501 	retcode := 2;
502 	return;
503 
504     end if;
505 
506   end if;
507 
508  -- RATE
509   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
510   h_value_error := argument13;
511   h_param_error := 'RATE';
512 
513 
514   h_count := 0;
515   select count(*) into h_count from fa_methods m
516   where m.method_code = argument11
517   and m.rate_source_rule = 'FLAT' and rownum < 2;
518 
519   if h_count > 0 then     -- this is a rate-based method
520 
521     if (argument13 is null) then
522 	fnd_message.set_name('OFA','FA_MASSCHG_RATE_BASED_METHOD');
523 	h_mesg_str := fnd_message.get;
524 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
525 
526 	retcode := 2;
527 	return;
528     end if;
529 
530     h_adj_rate := to_number(argument13) / 100;
531 
532     h_count := 0;
533     select count(*) into h_count from fa_methods m, fa_flat_rates r
534     where m.method_code = argument11
535     and m.method_id = r.method_id
536     and r.adjusted_rate = h_adj_rate and rownum < 2;
537 
538     if h_count = 0 then
539 	fnd_message.set_name('OFA','FA_SHARED_INVALID_METHOD_RATE');
540 	h_mesg_str := fnd_message.get;
541 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
542 
543 	retcode := 2;
544 	return;
545 
546     end if;
547 
548     if (argument12 is not null) then
549 	fnd_message.set_name('OFA','FA_METHOD_NO_LIFE');
550 	h_mesg_str := fnd_message.get;
551 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
552 
553 	retcode := 2;
554 	return;
555 
556 
557     end if;
558 
559   end if;
560 
561   end if;
562 
563  -- PRORATE CONVENTION
564 
565   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
566   h_value_error := argument14;
567   h_param_error := 'CONVENTION';
568 
569   if argument14 is not null then
570 
571   h_count := 0;
572   select count(*) into h_count from fa_conventions
573   where prorate_convention_code = argument14 and rownum < 2;
574 
575   if h_count = 0 then
576 	fnd_message.set_name('OFA','FA_WHATIF_NO_CONVENTION');
577 	fnd_message.set_token('CONV',argument14,FALSE);
578 	h_mesg_str := fnd_message.get;
579 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
580 
581 	retcode := 2;
582 	return;
583   end if;
584   end if;
585 
589   h_value_error := argument15;
586  -- SALVAGE_VALUE_PERCENTAGE
587 
588   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
590   h_param_error := 'SALVAGE VALUE';
591 
592   if argument15 is not null then
593 
594   if (to_number(argument15) < 0  OR  to_number(argument15) > 100) then
595 	fnd_message.set_name('OFA','FA_SHARED_BAD_PERCENT');
596 	h_mesg_str := fnd_message.get;
597 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
598 
599 	retcode := 2;
600 	return;
601   end if;
602   end if;
603 
604  -- AMORTIZE_FLAG
605 
606   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
607   h_value_error := argument16;
608   h_param_error := 'AMORTIZE_FLAG';
609 
610 
611   if (upper(argument16) not in ('Y','N','YES','NO','EXPENSED','AMORTIZED'))
612 	then
613 
614 	  fnd_message.set_name('OFA',h_mesg_name);
615 	  if h_mesg_name = 'FA_WHATIF_PARAM_ERROR' then
616 		fnd_message.set_token('VALUE',h_value_error,FALSE);
617 		fnd_message.set_token('PARAM',h_param_error,FALSE);
618 	  end if;
619 	  h_mesg_str := fnd_message.get;
620  	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
621 	  retcode := 2;
622 
623 	return;
624 
625   end if;
626 
627 
628   -- USER_ID
629 
630   /* ***************************************************
631   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
632   h_value_error := argument17;
633   h_param_error := 'USER_ID';
634 
635   h_count := 0;
636   select count(*) into h_count from fnd_user
637   where user_id = to_number(argument17) and rownum < 2;
638 
639   if (h_count = 0 and to_number(nvl(argument17,'0')) <> 0) then
640 
641 	  fnd_message.set_name('OFA',h_mesg_name);
642 	  if h_mesg_name = 'FA_WHATIF_PARAM_ERROR' then
643 		fnd_message.set_token('VALUE',h_value_error,FALSE);
644 		fnd_message.set_token('PARAM',h_param_error,FALSE);
645 	  end if;
646 	  h_mesg_str := fnd_message.get;
647  	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
648 	  retcode := 2;
649 	return;
650   end if;
651   ******************************************************* */
652 
653   h_request_id := fnd_global.conc_request_id;
654   fnd_profile.get('USER_ID',h_user_id);
655 
656   -- CHECK AMORTIZE_FLAG
657 
658   if (upper(argument16) in ('YES','Y')) then h_exp_amt := 'AMORTIZED';
659   elsif (upper(argument16) in ('NO','N')) then h_exp_amt := 'EXPENSED';
660   elsif (argument16 is null) then h_exp_amt := 'EXPENSED';
661   else h_exp_amt := upper(argument16);
662   end if;
663 
664 
665  -- BONUS RULE
666 
667   h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
668   h_value_error := argument19;
669   h_param_error := 'BONUS RULE';
670 
671   if argument19 is not null then
672 
673   h_count := 0;
674   select count(*) into h_count from fa_bonus_rules
675   where bonus_rule = argument19 and rownum < 2;
676 
677   if h_count = 0 then
678 
679 
680 	  fnd_message.set_name('OFA',h_mesg_name);
681 	  if h_mesg_name = 'FA_WHATIF_PARAM_ERROR' then
682 		fnd_message.set_token('VALUE',h_value_error,FALSE);
683 		fnd_message.set_token('PARAM',h_param_error,FALSE);
684 	  end if;
685 	  h_mesg_str := fnd_message.get;
686  	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
687 	  retcode := 2;
688 	return;
689 
690   end if;
691   end if;
692 
693   -- NOT hypothetical case
694   if (upper(argument18) in ('NO', 'N')) then
695 
696      -- If user doesn't provide value for any of following parameter
697      -- user just wants to see projected amount so any validation in
698      -- whatif_get_assets should not be performed.
699      --
700      --   method        => argument11    life          => argument12
701      --   adjusted_rate => h_adj_rate    prorate_conv  => argument14
702      --   salvage_pct   => argument15    bonus_rule    => argument19
703      --
704      if (argument11 is null) and
705         (argument12 is null) and
706         (h_adj_rate is null) and
707         (argument14 is null) and
708         (argument15 is null) and
709         (argument19 is null) then
710         l_mode := 'PROJ';
711      else
712         l_mode := h_exp_amt;
713      end if;
714 
715      -- GENERATE LIST OF ASSETS ON WHICH TO PERFORM WHAT-IF
716 
717      h_mesg_name := 'FA_WHATIF_GET_ASSETS_ERR';
718 
719      ret := fa_whatif_deprn2_pkg.whatif_get_assets (
720 	          X_book	=> argument1,
721 		  X_begin_asset	=> argument4,
722 		  X_end_asset	=> argument5,
723   	      	  X_begin_dpis	=> h_begin_dpis,
724 		  X_end_dpis	=> h_end_dpis,
725 		  X_description => argument8,
726 		  X_category_id	=> h_cat_id,
727 		  X_mode        => l_mode,
728 		  X_rsv_flag	=> argument17,
729 		  X_good_assets	=> h_assets,
730 		  X_num_good	=> h_num_assets,
731 		  retcode	=> retcode,
732 		  errbuf	=> errbuf);
733 
734   -- IF NO ASSETS RETURNED, EXIT WITH WARNING.
735   -- NO NEED TO RUN WHATIF.  NO ROWS WOULD GET GENERATED ANYWAYS.
736 
737      if h_num_assets = 0 then
738 	fnd_message.set_name('OFA','FA_WHATIF_NO_ASSETS');
739 	h_mesg_str := fnd_message.get;
743 	return;
740 	fa_rx_conc_mesg_pkg.log(h_mesg_str);
741 
742 	retcode := 1;
744      end if;
745 
746      -- DO WHAT-IF
747      h_mesg_name := 'FA_WHATIF_RUN_WHATIF_ERR';
748 
749      ret := fa_whatif_deprn2_pkg.whatif_deprn (
750 	X_assets	=> h_assets,
751 	X_num_assets	=> h_num_assets,
752 	X_method	=> argument11,
753 	X_life		=> to_number(argument12),
754 	X_adjusted_rate => h_adj_rate,
755 	X_prorate_conv	=> argument14,
756 	X_salvage_pct	=> to_number(argument15),
757 	X_exp_amt	=> h_exp_amt,
758 	X_book		=> argument1,
759 	X_start_per	=> argument2,
760 	X_num_per	=> to_number(argument3),
761 	X_request_id	=> h_request_id,
762 	X_user_id	=> to_number(h_user_id),
763         X_hypo          => upper(argument18),
764 	X_dpis          => NULL,
765 	X_cost          => NULL,
766         X_deprn_rsv     => NULL,
767         X_cat_id        => NULL,
768 	X_bonus_rule	=> argument19,
769 	retcode		=> retcode,
770 	errbuf		=> errbuf);
771 
772         --  retcode := 0;
773 
774        fa_whatif_deprn_pkg.g_deprn.delete;
775 
776   else  -- hypothetical case
777 
778   --fa_rx_conc_mesg_pkg.log('calling whatif deprn package');
779 
780   if (argument4 is not null) then
781      h_date_in_service := fnd_date.canonical_to_date(argument4);
782   end if;
783 
784     if (argument7 is not null) then
785        h_cat_id := to_number(argument7);
786     end if;
787 
788     /* *********************************************************
789        h_count := 0;
790 
791        h_mesg_name := 'FA_FE_LOOKUP_IN_SYSTEM_CTLS';
792        select category_flex_structure into h_cat_struct
793               from fa_system_controls;
794 
795        h_mesg_name := 'FA_WHATIF_PARAM_ERROR';
796        h_value_error := argument7;
797        h_param_error := 'CATEGORY';
798 
799        if fnd_flex_keyval.validate_segs (
800 	  operation => 'CHECK_COMBINATION',
801   	  appl_short_name => 'OFA',
802 	  key_flex_code => 'CAT#',
803 	  structure_number => h_cat_struct,
804 	  concat_segments => argument7,
805 	  values_or_ids  => 'V',
806           validation_date  =>SYSDATE,
807           displayable  => 'ALL',
808           data_set => NULL,
809           vrule => NULL,
810           where_clause => NULL,
811           get_columns => NULL,
812           allow_nulls => FALSE,
813           allow_orphans => FALSE,
814           resp_appl_id => NULL,
815           resp_id => NULL,
816           user_id => NULL) = FALSE then
817 
818     	     fnd_message.set_name('OFA','FA_WHATIF_NO_CAT');
819 	     fnd_message.set_token('CAT',argument7,FALSE);
820 	     h_mesg_str := fnd_message.get;
821 	     fa_rx_conc_mesg_pkg.log(h_mesg_str);
822 
823 	     retcode := 2;
824 	     return;
825        end if;
826        h_cat_id := fnd_flex_keyval.combination_id;
827 
828        h_count := 0;
829 
830        select count(*) into h_count from fa_categories cat,
831                                          fa_category_books cb
832        where cat.category_id = h_cat_id
833        and cat.enabled_flag = 'Y' and cat.capitalize_flag = 'YES'
834        and sysdate between nvl(cat.start_date_active,sysdate-1) and
835 	   nvl(cat.end_date_active,sysdate+1)
836        and cat.category_id = cb.category_id
837        and cb.book_type_code = argument1 and rownum < 2;
838 
839        if h_count = 0 then
840 	  fnd_message.set_name('OFA','FA_WHATIF_CAT_NOT_SET_UP');
841 	  fnd_message.set_token('CAT',argument7,FALSE);
842 	  h_mesg_str := fnd_message.get;
843 	  fa_rx_conc_mesg_pkg.log(h_mesg_str);
844 
845 	  retcode := 2;
846 	  return;
847       end if;
848     end if;
849     ********************************************************** */
850 
851     --fa_rx_conc_mesg_pkg.log(h_date_in_service);
852 
853     ret := fa_whatif_deprn2_pkg.whatif_deprn (
854 	X_assets	=> h_assets,
855 	X_num_assets	=> NULL,
856 	X_method	=> argument11,
857 	X_life		=> to_number(argument12),
858 	X_adjusted_rate => h_adj_rate,
859 	X_prorate_conv	=> argument14,
860 	X_salvage_pct	=> to_number(argument15),
861 	X_exp_amt	=> h_exp_amt,
862 	X_book		=> argument1,
863 	X_start_per	=> argument2,
864 	X_num_per	=> to_number(argument3),
865 	X_request_id	=> h_request_id,
866 	X_user_id	=> to_number(h_user_id),
867         X_hypo          => upper(argument18),
868 	X_dpis          => h_date_in_service ,
869 	X_cost          => to_number(argument5),
870         X_deprn_rsv     => to_number(argument6),
871         X_cat_id        => h_cat_id,
872 	X_bonus_rule	=> argument19,
873 	retcode		=> retcode,
874 	errbuf		=> errbuf);
875 
876   end if; -- NOT hypothetical case
877 
878   exception when others then
879 
880   fa_whatif_deprn_pkg.g_deprn.delete;
881 
882   if SQLCODE <> 0 then
883     fa_Rx_conc_mesg_pkg.log(SQLERRM);
884   end if;
885 
886   fnd_message.set_name('OFA',h_mesg_name);
887   if h_mesg_name = 'FA_WHATIF_PARAM_ERROR' then
888 	fnd_message.set_token('VALUE',h_value_error,FALSE);
889 	fnd_message.set_token('PARAM',h_param_error,FALSE);
890   end if;
891   h_mesg_str := fnd_message.get;
892   fa_rx_conc_mesg_pkg.log(h_mesg_str);
893 
894 
895 
896      retcode := 2;
897 
898   end whatif;
899 
900 END FARX_C_WD;