DBA Data[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;