[Home] [Help]
PACKAGE BODY: APPS.LNS_SAMPLE_HOOKS
Source
1 PACKAGE BODY LNS_SAMPLE_HOOKS as
2 /* $Header: LNS_SMPL_HOOKS_B.pls 120.1 2010/07/07 20:56:04 scherkas noship $ */
3
4
5 /*=======================================================================+
6 | Package Global Constants
7 +=======================================================================*/
8 G_PKG_NAME CONSTANT VARCHAR2(30):= 'LNS_SAMPLE_HOOKS';
9 G_LOG_ENABLED varchar2(5);
10 G_MSG_LEVEL NUMBER;
11
12
13 /*========================================================================
14 | PRIVATE PROCEDURE LogMessage
15 |
16 | DESCRIPTION
17 | This procedure logs debug messages to db and to CM log
18 |
19 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
20 |
21 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
22 | None
23 |
24 | PARAMETERS
25 | p_msg_level IN Debug msg level
26 | p_msg IN Debug msg itself
27 |
28 | KNOWN ISSUES
29 | None
30 |
31 | NOTES
32 | Any interesting aspect of the code in the package body which needs
33 | to be stated.
34 |
35 | MODIFICATION HISTORY
36 | Date Author Description of Changes
37 | 04-02-2008 scherkas Created
38 |
39 *=======================================================================*/
40 Procedure LogMessage(p_msg_level IN NUMBER, p_msg in varchar2)
41 IS
42 BEGIN
43 if (p_msg_level >= G_MSG_LEVEL) then
44
45 FND_LOG.STRING(p_msg_level, G_PKG_NAME, p_msg);
46 if FND_GLOBAL.Conc_Request_Id is not null then
47 fnd_file.put_line(FND_FILE.LOG, p_msg);
48 end if;
49
50 end if;
51
52 EXCEPTION
53 WHEN OTHERS THEN
54 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: ' || sqlerrm);
55 END;
56
57
58
59 /*========================================================================
60 | PUBLIC PROCEDURE SHIFT_PAY_START_DATES
61 |
62 | DESCRIPTION
63 | This procedure implements sample algorithm for shifting first interest payment and
64 | first principal payment dates on full disbursement payment in AP. New dates are returned back to caller.
65 |
66 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
67 | None
68 |
69 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
70 |
71 |
72 | PSEUDO CODE/LOGIC
73 | NEW_INT_START_DATE = ORIG_INT_START_DATE + diff in months between ORIG_LOAN_START_DATE and NEW_LOAN_START_DATE
74 | NEW_PRIN_START_DATE = ORIG_PRIN_START_DATE + diff in months between ORIG_LOAN_START_DATE and NEW_LOAN_START_DATE
75 |
76 | PARAMETERS
77 | P_LOAN_ID IN Loan ID
78 | P_DISBURSEMENT_DATE IN Disbursement Date
79 | P_ORIG_LOAN_START_DATE IN Original loan start date
80 | P_ORIG_INT_START_DATE IN Original interest payment start date. Passed for all amortization methods.
81 | P_ORIG_PRIN_START_DATE IN Original principal payment start date. Passed only for Seperate Schedule method.
82 | P_ORIG_LOAN_MATUR_DATE IN Original loan maturity date
83 | P_NEW_LOAN_START_DATE IN New loan start date
84 | P_NEW_LOAN_MATUR_DATE IN OUT NOCOPY New loan maturity date. If changed - new value will be stored
85 | X_NEW_INT_START_DATE OUT NOCOPY New/calculated interest payment start date. Must be returned for all amortization methods.
86 | X_NEW_PRIN_START_DATE OUT NOCOPY New/calculated principal payment start date. Must be returned only for Seperate Schedule method.
87 |
88 | KNOWN ISSUES
89 | None
90 |
91 | NOTES
92 | Any interesting aspect of the code in the package body which needs
93 | to be stated.
94 |
95 | MODIFICATION HISTORY
96 | Date Author Description of Changes
97 | 12-23-2004 scherkas Created
98 |
99 *=======================================================================*/
100 PROCEDURE SHIFT_PAY_START_DATES(
101 P_LOAN_ID IN NUMBER,
102 P_DISBURSEMENT_DATE IN DATE,
103 P_ORIG_LOAN_START_DATE IN DATE,
104 P_ORIG_INT_START_DATE IN DATE,
105 P_ORIG_PRIN_START_DATE IN DATE,
106 P_ORIG_LOAN_MATUR_DATE IN DATE,
107 P_NEW_LOAN_START_DATE IN DATE,
108 P_NEW_LOAN_MATUR_DATE IN OUT NOCOPY DATE,
109 X_NEW_INT_START_DATE OUT NOCOPY DATE,
110 X_NEW_PRIN_START_DATE OUT NOCOPY DATE)
111 IS
112
113 /*-----------------------------------------------------------------------+
114 | Local Variable Declarations and initializations |
115 +-----------------------------------------------------------------------*/
116
117 l_api_name CONSTANT VARCHAR2(30) := 'SHIFT_PAY_START_DATES';
118 l_month_difference NUMBER;
119
120 /*-----------------------------------------------------------------------+
121 | Cursor Declarations |
122 +-----------------------------------------------------------------------*/
123
124 BEGIN
125
126 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
127
128 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'Input:');
129 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_LOAN_ID: ' || P_LOAN_ID);
130 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_DISBURSEMENT_DATE: ' || P_DISBURSEMENT_DATE);
131 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_ORIG_LOAN_START_DATE: ' || P_ORIG_LOAN_START_DATE);
132 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_ORIG_INT_START_DATE: ' || P_ORIG_INT_START_DATE);
133 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_ORIG_PRIN_START_DATE: ' || P_ORIG_PRIN_START_DATE);
134 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_ORIG_LOAN_MATUR_DATE: ' || P_ORIG_LOAN_MATUR_DATE);
135 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_NEW_LOAN_START_DATE: ' || P_NEW_LOAN_START_DATE);
136 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_NEW_LOAN_MATUR_DATE: ' || P_NEW_LOAN_MATUR_DATE);
137
138 -- default new payment start dates
139 X_NEW_INT_START_DATE := P_NEW_LOAN_START_DATE;
140 if P_ORIG_PRIN_START_DATE is not null then
141 X_NEW_PRIN_START_DATE := P_NEW_LOAN_START_DATE;
142 end if;
143
144 -- count the difference between the original loan start date and original interest payment start date
145 l_month_difference := floor(months_between(P_NEW_LOAN_START_DATE, P_ORIG_LOAN_START_DATE));
146 logMessage(FND_LOG.LEVEL_PROCEDURE, 'l_month_difference: ' || l_month_difference);
147
148 X_NEW_INT_START_DATE := add_months(P_ORIG_INT_START_DATE, l_month_difference);
149 logMessage(FND_LOG.LEVEL_PROCEDURE, 'X_NEW_INT_START_DATE: ' || X_NEW_INT_START_DATE);
150
151 -- count the difference between the old start date and old principal first payment date (if its not null)
152 if P_ORIG_PRIN_START_DATE is not null then
153 X_NEW_PRIN_START_DATE := add_months(P_ORIG_PRIN_START_DATE, l_month_difference);
154 logMessage(FND_LOG.LEVEL_PROCEDURE, 'X_NEW_PRIN_START_DATE: ' || X_NEW_PRIN_START_DATE);
155 end if;
156
157 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
158
159 EXCEPTION
160 WHEN OTHERS THEN
161 LogMessage(FND_LOG.LEVEL_UNEXPECTED, G_PKG_NAME || '.' || l_api_name || ' - In exception');
162 END;
163
164
165
166
167 /*========================================================================
168 | PUBLIC PROCEDURE CUSTOM_FEE_CALC
169 |
170 | DESCRIPTION
171 | This procedure implements sample custom fee calculation.
172 |
173 | PSEUDO CODE/LOGIC
174 |
175 |
176 | PARAMETERS
177 | P_LOAN_ID IN Input Loan ID
178 | P_FEE_ID IN Input fee id from lns_fees_all table
179 | P_INSTALLMENT IN Input installment number
180 | X_AMOUNT OUT NOCOPY Returned fee amount value
181 | X_ERROR OUT NOCOPY Returned error message.
182 |
183 | KNOWN ISSUES
184 | None
185 |
186 | NOTES
187 | Any interesting aspect of the code in the package body which needs
188 | to be stated.
189 |
190 | MODIFICATION HISTORY
191 | Date Author Description of Changes
192 | 07-01-2010 scherkas Created
193 |
194 *=======================================================================*/
195 PROCEDURE CUSTOM_FEE_CALC(
196 P_LOAN_ID IN NUMBER,
197 P_FEE_ID IN NUMBER,
198 P_INSTALLMENT IN NUMBER,
199 X_AMOUNT OUT NOCOPY VARCHAR2,
200 X_ERROR OUT NOCOPY VARCHAR2)
201 IS
202
203 /*-----------------------------------------------------------------------+
204 | Local Variable Declarations and initializations |
205 +-----------------------------------------------------------------------*/
206
207 l_api_name CONSTANT VARCHAR2(30) := 'CUSTOM_FEE_CALC';
208 l_fee_name VARCHAR2(50);
209 l_FEE_DESCRIPTION VARCHAR2(250);
210 l_fee_category VARCHAR2(30);
211 l_fee_type VARCHAR2(30);
212 l_fee NUMBER;
213 l_fee_basis VARCHAR2(30);
214 l_rate_type VARCHAR2(30);
215 l_billing_option VARCHAR2(30);
216 l_number_grace_days NUMBER;
217 l_CUSTOM_PROCEDURE VARCHAR2(250);
218
219 /*-----------------------------------------------------------------------+
220 | Cursor Declarations |
221 +-----------------------------------------------------------------------*/
222
223 cursor c_fees(p_fee_id number) is
224 SELECT fee_name
225 ,FEE_DESCRIPTION
226 ,fee_category
227 ,fee_type
228 ,fee
229 ,fee_basis
230 ,rate_type
231 ,billing_option
232 ,number_grace_days
233 ,CUSTOM_PROCEDURE
234 from lns_fees_all
235 where fee_id = p_fee_id;
236
237 BEGIN
238
239 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
240
241 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input:');
242 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_LOAN_ID = ' || P_LOAN_ID);
243 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_FEE_ID = ' || P_FEE_ID);
244 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'P_INSTALLMENT = ' || P_INSTALLMENT);
245
246 if P_LOAN_ID is null then
247 X_ERROR := 'P_LOAN_ID must be set';
248 RAISE FND_API.G_EXC_ERROR;
249 end if;
250 if P_FEE_ID is null then
251 X_ERROR := 'P_FEE_ID must be set';
252 RAISE FND_API.G_EXC_ERROR;
253 end if;
254 if P_INSTALLMENT is null then
255 X_ERROR := 'P_INSTALLMENT must be set';
256 RAISE FND_API.G_EXC_ERROR;
257 end if;
258
259 /* example of querying fee info */
260 open c_fees(P_FEE_ID);
261 fetch c_fees into
262 l_fee_name
263 ,l_FEE_DESCRIPTION
264 ,l_fee_category
265 ,l_fee_type
266 ,l_fee
267 ,l_fee_basis
268 ,l_rate_type
269 ,l_billing_option
270 ,l_number_grace_days
271 ,l_CUSTOM_PROCEDURE;
272 close c_fees;
273
274 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Fee info:');
275 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_fee_name = ' || l_fee_name);
276 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_FEE_DESCRIPTION = ' || l_FEE_DESCRIPTION);
277 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_fee_category = ' || l_fee_category);
278 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_fee_type = ' || l_fee_type);
279 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_fee = ' || l_fee);
280 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_fee_basis = ' || l_fee_basis);
281 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_rate_type = ' || l_rate_type);
282 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_billing_option = ' || l_billing_option);
283 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_number_grace_days = ' || l_number_grace_days);
284 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_CUSTOM_PROCEDURE = ' || l_CUSTOM_PROCEDURE);
285
286 X_AMOUNT := 10*P_INSTALLMENT;
287
288 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
289
290 EXCEPTION
291 WHEN OTHERS THEN
292 LogMessage(FND_LOG.LEVEL_UNEXPECTED, G_PKG_NAME || '.' || l_api_name || ' - In exception');
293 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'X_ERROR: ' || X_ERROR);
294 X_AMOUNT := 0;
295 return;
296 END;
297
298
299
300
301 BEGIN
302 G_LOG_ENABLED := 'N';
303 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
304
305 /* getting msg logging info */
306 G_LOG_ENABLED := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'), 'N');
307 if (G_LOG_ENABLED = 'N') then
308 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
309 else
310 G_MSG_LEVEL := NVL(to_number(FND_PROFILE.VALUE('AFLOG_LEVEL')), FND_LOG.LEVEL_UNEXPECTED);
311 end if;
312
313 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_LOG_ENABLED: ' || G_LOG_ENABLED);
314 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_MSG_LEVEL: ' || G_MSG_LEVEL);
315
316 END;