DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_REC_PVT_PKG2

Source


1 PACKAGE BODY FA_REC_PVT_PKG2 AS
2 /* $Header: FAXVRC2B.pls 120.3 2005/07/25 10:04:26 yyoon ship $ */
3 
4 --
5 -- FUNCTION Validate_Redefault
6 --
7 
8 FUNCTION Validate_Redefault(
9         p_asset_id         IN NUMBER,
10         p_new_category_id  IN NUMBER,
11         p_book_type_code	IN	VARCHAR2,
12         p_amortize_flag		IN	VARCHAR2 := 'NO',
13         p_mr_req_id		   IN	NUMBER := -1,
14         x_rule_change_exists OUT NOCOPY BOOLEAN,
15         x_old_rules	 OUT NOCOPY FA_LOAD_TBL_PKG.asset_deprn_info,
16         x_new_rules   OUT NOCOPY FA_LOAD_TBL_PKG.asset_deprn_info,
17         x_use_rules   OUT NOCOPY BOOLEAN,
18         x_prorate_date	    OUT NOCOPY DATE,
19         x_rate_source_rule  OUT NOCOPY VARCHAR2,
20         x_deprn_basis_rule  OUT NOCOPY VARCHAR2,
21         p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)       RETURN BOOLEAN IS
22 	l_old_rules		FA_LOAD_TBL_PKG.asset_deprn_info;
23 	l_new_rules		FA_LOAD_TBL_PKG.asset_deprn_info;
24 	l_found			BOOLEAN := FALSE;
25 	CURSOR get_old_rules IS
26 	    SELECT	book_type_code,
27 			date_placed_in_service, date_placed_in_service,
28 			prorate_convention_code, deprn_method_code,
29 	   		life_in_months, basic_rate, adjusted_rate,
30 	   		production_capacity, unit_of_measure,
31 			bonus_rule, NULL, ceiling_name,
32 	   		depreciate_flag, allowed_deprn_limit,
33 	   		allowed_deprn_limit_amount, percent_salvage_value
34     	    FROM 	FA_BOOKS
35    	    WHERE 	book_type_code = p_book_type_code
36 	    AND 	asset_id = p_asset_id
37     	    AND		date_ineffective IS NULL;
38 BEGIN
39 
40     ---- Prepare for validations ----
41 
42     /* Get old(current) depreciation rules from the current books row. */
43     OPEN get_old_rules;
44     FETCH get_old_rules INTO l_old_rules;
45     CLOSE get_old_rules;
46 
47     /* Get new depreciation rules. */
48     FA_LOAD_TBL_PKG.Get_Deprn_Rules(
49 		p_book_type_code	=> p_book_type_code,
50 		p_date_placed_in_service => l_old_rules.start_dpis,
51 		x_deprn_rules_rec	=> l_new_rules,
52 		x_found			=> l_found,
53       p_log_level_rec => p_log_level_rec);
54     IF not l_found THEN
55 	FA_SRVR_MSG.Add_Message(
56 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Redefault',
57 		NAME => 'FA_REC_NO_CAT_DEFAULTS'
58 		,p_log_level_rec => p_log_level_rec);
59 		/* Message text:
60 		   'The new category default depreciation rules do not
61 		    exist for this asset and its date placed in service.' */
62 	RETURN (FALSE);
63     END IF;
64 
65     /* We will not redefault depreciate_flag through mass reclass. */
66     l_new_rules.depreciate_flag := l_old_rules.depreciate_flag;
67 
68     /* See if any rule change is needed. */
69     IF NOT ((l_old_rules.prorate_conv_code = l_new_rules.prorate_conv_code) AND
70 	    (l_old_rules.deprn_method = l_new_rules.deprn_method) AND
71 	    (nvl(l_old_rules.life_in_months, 99999) =
72 			nvl(l_new_rules.life_in_months, 99999)) AND
73 	    (nvl(l_old_rules.basic_rate, 99999) =
74 			nvl(l_new_rules.basic_rate, 99999)) AND
75 	    (nvl(l_old_rules.adjusted_rate, 99999) =
76 			nvl(l_new_rules.adjusted_rate, 99999)) AND
77 	    (nvl(l_old_rules.production_capacity, 99999) =
78 			nvl(l_new_rules.production_capacity, 99999)) AND
79 	    (nvl(l_old_rules.unit_of_measure, 99999) =
80 			nvl(l_new_rules.unit_of_measure, 99999)) AND
81 	    (nvl(l_old_rules.bonus_rule, 'NULL') =
82 			nvl(l_new_rules.bonus_rule, 'NULL')) AND
83 	    (nvl(l_old_rules.ceiling_name, 'NULL') =
84 			nvl(l_new_rules.ceiling_name, 'NULL')) AND
85 /* Skip this check -- we will not change depreciate flag through mass reclass.
86 	    (l_old_rules.depreciate_flag = l_new_rules.depreciate_flag) AND
87 */
88 	    (nvl(l_old_rules.allow_deprn_limit, 99) =
89 			nvl(l_new_rules.allow_deprn_limit, 99)) AND
90 	    (nvl(to_char(l_old_rules.deprn_limit_amount), 'NULL') =
91 			nvl(to_char(l_new_rules.deprn_limit_amount), 'NULL')) AND
92 	    (nvl(l_old_rules.percent_salvage_value, 99) =
93 			nvl(l_new_rules.percent_salvage_value, 99)))
94     THEN
95 	x_rule_change_exists := TRUE; -- At least one change is needed.
96     ELSE
97 	x_rule_change_exists := FALSE;
98 	RETURN (TRUE);
99 	-- No rule change is needed.  Skip the validations.
100     END IF;
101 
102     ---- Validations -----
103 
104     /* Validate an adjustment transaction. */
105     IF NOT Validate_Adjustment(
106         	p_asset_id        => p_asset_id,
107 		   p_book_type_code	=> p_book_type_code,
108 		   p_amortize_flag   => p_amortize_flag,
109 		   p_mr_req_id		   => p_mr_req_id,
110          p_log_level_rec   => p_log_level_rec)
111     THEN
112 	FA_SRVR_MSG.Add_Message(
113 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Redefault'
114 		,p_log_level_rec => p_log_level_rec);
115 	RETURN (FALSE);
116     END IF;
117 
118     /* Validate depreciation rule changes. */
119     IF NOT FA_REC_PVT_PKG3.Validate_Rule_Changes(
120 		     p_asset_id		   => p_asset_id,
121 		     p_new_category_id	=> p_new_category_id,
122 		     p_book_type_code	=> p_book_type_code,
123 		     p_amortize_flag		=> p_amortize_flag,
124 		     p_old_rules		   => l_old_rules,
125 		     p_new_rules		   => l_new_rules,
126 		     x_prorate_date		=> x_prorate_date,
127            x_rate_source_rule => x_rate_source_rule,
128            x_deprn_basis_rule => x_deprn_basis_rule,
129            p_log_level_rec => p_log_level_rec)
130     THEN
131 	FA_SRVR_MSG.Add_Message(
132 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Redefault'
133 		,p_log_level_rec => p_log_level_rec);
134 	RETURN (FALSE);
135     END IF;
136 
137     x_old_rules := l_old_rules;
138     x_new_rules := l_new_rules;
139     x_use_rules := TRUE;
140     RETURN (TRUE);
141 EXCEPTION
142     WHEN OTHERS THEN
143 	x_use_rules := FALSE;
144 	FA_SRVR_MSG.Add_SQL_Error(
145 		CALLING_FN =>  'FA_REC_PVT_PKG2.Validate_Redefault'
146 		,p_log_level_rec => p_log_level_rec);
147 	RETURN (FALSE);
148 END Validate_Redefault;
149 
150 
151 --
152 -- FUNCTION Validate_Adjustment
153 --
154 
155 FUNCTION Validate_Adjustment(
156          p_asset_id        IN NUMBER,
157        	p_book_type_code	IN	VARCHAR2,
158        	p_amortize_flag	IN	VARCHAR2,
159        	p_mr_req_id		   IN	NUMBER := -1,
160          p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
161   RETURN BOOLEAN IS
162 	check_flag		VARCHAR2(3);
163 	prior_transaction_date	DATE;
164 	prior_date_effective    DATE;
165 	check_another_trans     NUMBER;
166 	CURSOR check_mass_change_allowed IS
167 	    SELECT 'x' FROM FA_BOOK_CONTROLS
168 	    WHERE book_type_code = p_book_type_code AND allow_mass_changes = 'NO'
169 	    AND p_mr_req_id <> -1;
170 	CURSOR check_prior_amort IS
171 	    SELECT 'x' FROM FA_BOOKS
172 	    WHERE book_type_code = p_book_type_code AND asset_id = p_asset_id
173 	    AND rate_adjustment_factor <> 1;
174 	CURSOR check_cip IS
175 	    SELECT 'x' FROM FA_ADDITIONS
176 	    WHERE asset_id = p_asset_id AND asset_type = 'CIP';
177 	CURSOR check_amort_allowed IS
178 	    SELECT 'x' FROM FA_BOOK_CONTROLS
179 	    WHERE book_type_code = p_book_type_code AND amortize_flag = 'NO';
180 	CURSOR check_deprn IS
181 	    SELECT 'x' FROM FA_DEPRN_SUMMARY
182 	    WHERE book_type_code = p_book_type_code AND asset_id = p_asset_id
183 	    AND deprn_source_code = 'DEPRN' AND deprn_amount <> 0;
184 BEGIN
185     -- Check if mass change(adjustment) is allowed.
186     OPEN check_mass_change_allowed;
187     FETCH check_mass_change_allowed INTO check_flag;
188     IF (check_mass_change_allowed%found) THEN
189 	CLOSE check_mass_change_allowed;
190 	FA_SRVR_MSG.Add_Message(
191 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Adjustment',
192 		NAME => 'FA_REC_MASSCHG_NOT_ALLOWED'
193 		,p_log_level_rec => p_log_level_rec);
194 		/* Message text:
195 		   'You cannot use mass transaction to redefault depreciation rules
196 		    for the asset in this book because Allow Mass Changes field in the
197 		    Book Controls form is set to No. */
198 	RETURN (FALSE);
199     END IF;
200     CLOSE check_mass_change_allowed;
201 
202     ---- Checks for Expensed Adjustment ----
203 
204     /* Check if there were prior amortized adjustments, in case of expensed
205        adjustment. */
206     IF (p_amortize_flag = 'NO') THEN
207     	OPEN check_prior_amort;
208 	FETCH check_prior_amort INTO check_flag;
209 	IF (check_prior_amort%found) THEN
210 	    CLOSE check_prior_amort;
211 	    FA_SRVR_MSG.Add_Message(
212 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Adjustment',
213 		NAME => 'FA_BOOK_CANT_EXP_AFTER_AMORT'
214 		,p_log_level_rec => p_log_level_rec);
215 	    RETURN (FALSE);
216         END IF;
217 	CLOSE check_prior_amort;
218 
219     ---- Checks for Amortized Adjustment ----
220 
221     ELSE
222 	/* Check if an asset is a CIP asset.  CIP assets cannot be amortized.
223            Rule from fa_fin_adj3_pkg.transaction_type(). */
224    	OPEN check_cip;
225 	FETCH check_cip INTO check_flag;
226 	IF (check_cip%found) THEN
227 	    CLOSE check_cip;
228 	    FA_SRVR_MSG.Add_Message(
229 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Adjustment',
230 		NAME => 'FA_REC_CIP_CANNOT_AMORT'
231 		,p_log_level_rec => p_log_level_rec);
232 		/* Message text:
233 		   'You cannot amortize an adjustment for a CIP asset.' */
234 	    RETURN (FALSE);
235         END IF;
236 	CLOSE check_cip;
237 
238 	/* Check if amortization is allowed in this book. */
239 	OPEN check_amort_allowed;
240 	FETCH check_amort_allowed INTO check_flag;
241 	IF (check_amort_allowed%found) THEN
242 	    CLOSE check_amort_allowed;
243 	    FA_SRVR_MSG.Add_Message(
244 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Adjustment',
245 		NAME => 'FA_BOOK_AMORTIZED_NOT_ALLOW'
246 		,p_log_level_rec => p_log_level_rec);
247 	    RETURN (FALSE);
248         END IF;
249 	CLOSE check_amort_allowed;
250 
251 	/* Check if the asset has already been depreciated. */
252 	OPEN check_deprn;
253 	FETCH check_deprn INTO check_flag;
254 	IF (check_deprn%notfound) THEN
255 	    CLOSE check_deprn;
256 	    FA_SRVR_MSG.Add_Message(
257 		CALLING_FN => 'FA_REC_PVT_PKG2.Validate_Adjustment',
258 		NAME => 'FA_BOOK_CANT_AMORT_BEF_DEPRN'
259 		,p_log_level_rec => p_log_level_rec);
260 	    RETURN (FALSE);
261         END IF;
262 	CLOSE check_deprn;
263 
264     END IF;
265 
266     RETURN (TRUE);
267 EXCEPTION
268     WHEN OTHERS THEN
269         FA_SRVR_MSG.Add_SQL_Error(
270                 CALLING_FN =>  'FA_REC_PVT_PKG2.Validate_Adjustment'
271                 ,p_log_level_rec => p_log_level_rec);
272         RETURN (FALSE);
273 END Validate_Adjustment;
274 
275 
276 END FA_REC_PVT_PKG2;