1 PACKAGE BODY LNS_DEFAULT_HOOKS_PVT as
2 /* $Header: LNS_DEF_HOOKS_B.pls 120.0.12010000.1 2009/07/02 17:41:43 scherkas noship $ */
3
4
5 /*=======================================================================+
6 | Package Global Constants
7 +=======================================================================*/
8 G_PKG_NAME CONSTANT VARCHAR2(30):= 'LNS_DEFAULT_HOOKS_PVT';
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 default algorithm for shifting first interest payment and first principal payment dates
64 | 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 = NEW_LOAN_START_DATE + diff in days between ORIG_INT_START_DATE and ORIG_LOAN_START_DATE
74 | NEW_PRIN_START_DATE = NEW_LOAN_START_DATE + diff in months between ORIG_PRIN_START_DATE and ORIG_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_day_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_day_difference := P_ORIG_INT_START_DATE - P_ORIG_LOAN_START_DATE;
146 logMessage(FND_LOG.LEVEL_PROCEDURE, 'l_int_day_difference: ' || l_day_difference);
147
148 X_NEW_INT_START_DATE := P_NEW_LOAN_START_DATE + l_day_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 l_day_difference := P_ORIG_PRIN_START_DATE - P_ORIG_LOAN_START_DATE;
154 logMessage(FND_LOG.LEVEL_PROCEDURE, 'l_prin_day_difference: ' || l_day_difference);
155
156 X_NEW_PRIN_START_DATE := P_NEW_LOAN_START_DATE + l_day_difference;
157 logMessage(FND_LOG.LEVEL_PROCEDURE, 'X_NEW_PRIN_START_DATE: ' || X_NEW_PRIN_START_DATE);
158 end if;
159
160 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
161
162 EXCEPTION
163 WHEN OTHERS THEN
164 LogMessage(FND_LOG.LEVEL_UNEXPECTED, G_PKG_NAME || '.' || l_api_name || ' - In exception');
165 END;
166
167
168
169
170 BEGIN
171 G_LOG_ENABLED := 'N';
172 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
173
174 /* getting msg logging info */
175 G_LOG_ENABLED := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'), 'N');
176 if (G_LOG_ENABLED = 'N') then
177 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
178 else
179 G_MSG_LEVEL := NVL(to_number(FND_PROFILE.VALUE('AFLOG_LEVEL')), FND_LOG.LEVEL_UNEXPECTED);
180 end if;
181
182 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_LOG_ENABLED: ' || G_LOG_ENABLED);
183 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_MSG_LEVEL: ' || G_MSG_LEVEL);
184
185 END;