1: PACKAGE BODY LNS_FEE_ENGINE AS
2: /* $Header: LNS_FEE_ENGINE_B.pls 120.29 2011/09/14 13:55:58 gparuchu ship $ */
3:
4: --------------------------------------------
5: -- declaration of global variables and types
1: PACKAGE BODY LNS_FEE_ENGINE AS
2: /* $Header: LNS_FEE_ENGINE_B.pls 120.29 2011/09/14 13:55:58 gparuchu ship $ */
3:
4: --------------------------------------------
5: -- declaration of global variables and types
6: --------------------------------------------
5: -- declaration of global variables and types
6: --------------------------------------------
7: G_DEBUG_COUNT NUMBER := 0;
8: G_DEBUG BOOLEAN := FALSE;
9: G_FILE_NAME CONSTANT VARCHAR2(30) := 'LNS_FEE_ENGINE_B.pls';
10:
11: G_PKG_NAME CONSTANT VARCHAR2(30) := 'LNS_FEE_ENGINE';
12: -- G_AF_DO_DEBUG VARCHAR2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
13: G_DAYS_COUNT NUMBER;
7: G_DEBUG_COUNT NUMBER := 0;
8: G_DEBUG BOOLEAN := FALSE;
9: G_FILE_NAME CONSTANT VARCHAR2(30) := 'LNS_FEE_ENGINE_B.pls';
10:
11: G_PKG_NAME CONSTANT VARCHAR2(30) := 'LNS_FEE_ENGINE';
12: -- G_AF_DO_DEBUG VARCHAR2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
13: G_DAYS_COUNT NUMBER;
14: G_DAYS_IN_YEAR NUMBER;
15:
107: ,x_msg_count out nocopy number
108: ,x_msg_data out nocopy varchar2)
109: is
110: l_api_name varchar2(25);
111: l_write_fee_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
112: l_fee_id number;
113: l_fee_basis varchar2(25);
114: l_fee_amount number;
115: l_fee_description varchar2(60);
118: l_msg_count NUMBER;
119: l_msg_data VARCHAR2(32767);
120: l_BILL_HEADERS_TBL LNS_BILLING_BATCH_PUB.BILL_HEADERS_TBL;
121: l_BILL_LINES_TBL LNS_BILLING_BATCH_PUB.BILL_LINES_TBL;
122: l_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
123: i number;
124: l_fee_installment number;
125: l_phase varchar2(30);
126:
127: -- get disbursement fees
128: cursor c_DisbursementFees(p_disb_head_id number) is
129: select ass.fee_id
130: --,decode(ass.rate_type, 'FIXED', nvl(ass.fee,fee.fee), 'VARIABLE', nvl(ass.fee,fee.fee)/100 * head.header_amount)
131: ,decode(ass.rate_type, 'FIXED', nvl(ass.fee,fee.fee), 'VARIABLE', lns_fee_engine.calculateFee(ass.fee_id, head.disb_header_id, head.LOAN_ID))
132: ,fee.fee_description
133: ,ass.fee_basis
134: ,nvl(ass.begin_installment_number, 0) -- fix for bug 8928398
135: ,nvl(ass.phase, 'TERM')
282: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - i ' || i);
283: if l_write_fee_tbl.count > 0 then
284: -- 3. writeFees to the fee schedule
285: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - writing fees schedule');
286: lns_fee_engine.writeFeeSchedule(p_init_msg_list => p_init_msg_list
287: ,p_commit => p_commit
288: ,p_loan_id => p_loan_id
289: ,p_fees_tbl => l_write_fee_tbl
290: ,x_return_status => l_return_status
369: ,x_msg_data out nocopy varchar2)
370: is
371:
372: l_api_name varchar2(15);
373: l_write_fee_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
374: l_fee_id number;
375: l_fee_amount number;
376: l_fee_description varchar2(250);
377: l_return_status VARCHAR2(1);
436:
437: l_phase := nvl(p_phase, 'TERM');
438:
439: -- processing late fees will rewrite them to fee_schedules
440: lns_fee_engine.processLateFees(p_init_msg_list => p_init_msg_list
441: ,p_commit => p_commit
442: ,p_loan_id => p_loan_id
443: ,p_phase => l_phase
444: ,x_return_status => l_return_status
457: ,l_fee_description
458: ,l_phase;
459: EXIT WHEN c_manual_fees%NOTFOUND;
460:
461: l_fee_amount := lns_fee_engine.calculateFee(p_fee_id => l_fee_id
462: ,p_loan_id => p_loan_id
463: ,p_phase => l_phase);
464:
465: l_write_fee_tbl(i).fee_id := l_fee_id;
473: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - fee amount: ' || l_fee_amount);
474: END LOOP;
475:
476: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - writing fees schedule');
477: lns_fee_engine.writeFeeSchedule(p_init_msg_list => p_init_msg_list
478: ,p_commit => p_commit
479: ,p_loan_id => p_loan_id
480: ,p_fees_tbl => l_write_fee_tbl
481: ,x_return_status => l_return_status
541: || Date Author Description of Changes
542: || 1/20/2005 GWBush2 Created
543: ||
544: *=======================================================================*/
545: function getFeeStructures (p_fee_id in number) return LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
546:
547: is
548:
549: l_fee_id number;
560: l_end_installment_number number;
561: l_fee_editable_flag varchar2(1);
562: l_fee_waivable_flag varchar2(1);
563: i number := 0;
564: l_fee_struct_tbl LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
565: l_api_name varchar2(25);
566:
567: cursor c_fees (fee_id number) is
568: SELECT fees.fee_id
656: ,p_fee_type in varchar2
657: ,p_installment in number
658: ,p_phase in varchar2
659: ,p_fee_id in number
660: ,p_billing_option in varchar2 DEFAULT NULL) return LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
661:
662: is
663:
664: l_fee_id number;
677: l_end_installment_number number;
678: l_fee_editable_flag varchar2(1);
679: l_fee_waivable_flag varchar2(1);
680: i number := 0;
681: l_fee_struct_tbl LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
682: l_phase varchar2(30);
683: l_CUSTOM_PROCEDURE varchar2(250);
684: l_disb_header_id number;
685:
848: function getDisbursementFeeStructures(p_loan_id in number
849: ,p_installment_no in number
850: ,p_phase in varchar2
851: ,p_disb_header_id in number
852: ,p_fee_id in number) return LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
853: is
854:
855: l_fee_id number;
856: l_fee_name varchar2(50);
861: l_fee_basis varchar2(30);
862: l_billing_option varchar2(30);
863: l_rate_type varchar2(30);
864: i number := 0;
865: l_fee_struct_tbl LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
866: l_api_name varchar2(50);
867: l_begin_installment_number number;
868: l_end_installment_number number;
869: l_disbursement_date date;
1006: and disb_header_id = c_disb_header_id
1007: and nvl(phase, 'TERM') = c_phase;
1008:
1009: l_original_loan_amount number;
1010: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1011: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1012: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1013: l_api_name varchar2(25);
1014: l_return_status VARCHAR2(1);
1007: and nvl(phase, 'TERM') = c_phase;
1008:
1009: l_original_loan_amount number;
1010: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1011: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1012: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1013: l_api_name varchar2(25);
1014: l_return_status VARCHAR2(1);
1015: l_msg_count NUMBER;
1008:
1009: l_original_loan_amount number;
1010: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1011: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1012: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1013: l_api_name varchar2(25);
1014: l_return_status VARCHAR2(1);
1015: l_msg_count NUMBER;
1016: l_msg_data VARCHAR2(32767);
1039:
1040: elsif p_disb_header_id is not null then
1041:
1042: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - getting DIsb fee structures');
1043: l_orig_fee_structures := lns_fee_engine.getDisbursementFeeStructures(p_loan_id => null
1044: ,p_installment_no => null
1045: -- Bug#9255294, Change after adding new column phase in disbHdr table
1046: ,p_phase => l_phase
1047: ,p_disb_header_id => p_disb_header_id
1147: l_msg_count NUMBER;
1148: l_msg_data VARCHAR2(32767);
1149: l_calc_fee number;
1150: i number;
1151: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1152: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1153: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
1154: l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1155: l_installment Number;
1148: l_msg_data VARCHAR2(32767);
1149: l_calc_fee number;
1150: i number;
1151: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1152: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1153: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
1154: l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1155: l_installment Number;
1156: l_phase varchar2(30);
1150: i number;
1151: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1152: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1153: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
1154: l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1155: l_installment Number;
1156: l_phase varchar2(30);
1157:
1158: l_loan_status varchar2(30);
1184: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - l_based_on_terms = ' || l_based_on_terms);
1185:
1186: l_phase := nvl(p_phase, 'TERM');
1187: -- compute the installment based on p_fee_assignment_id
1188: l_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => p_loan_id
1189: ,p_fee_category => null
1190: ,p_fee_type => null
1191: ,p_installment => null
1192: ,p_phase => l_phase
1289: || 12/16/2004 8:40PM raverma Created
1290: ||
1291: *=======================================================================*/
1292: procedure calculateFees(p_loan_id in number
1293: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
1294: ,p_installment in number
1295: ,p_fee_structures IN LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
1296: ,x_fees_tbl OUT nocopy LNS_FEE_ENGINE.FEE_CALC_TBL
1297: ,x_return_status out nocopy varchar2
1291: *=======================================================================*/
1292: procedure calculateFees(p_loan_id in number
1293: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
1294: ,p_installment in number
1295: ,p_fee_structures IN LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
1296: ,x_fees_tbl OUT nocopy LNS_FEE_ENGINE.FEE_CALC_TBL
1297: ,x_return_status out nocopy varchar2
1298: ,x_msg_count out nocopy number
1299: ,x_msg_data out nocopy varchar2)
1292: procedure calculateFees(p_loan_id in number
1293: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
1294: ,p_installment in number
1295: ,p_fee_structures IN LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
1296: ,x_fees_tbl OUT nocopy LNS_FEE_ENGINE.FEE_CALC_TBL
1297: ,x_return_status out nocopy varchar2
1298: ,x_msg_count out nocopy number
1299: ,x_msg_data out nocopy varchar2)
1300: is
1300: is
1301: l_api_name varchar2(25);
1302: l_basis_amount number;
1303: l_total_fees number;
1304: l_fees_tbl lns_fee_engine.fee_calc_tbl;
1305: k number;
1306: l_fee number;
1307: l_precision number;
1308: l_intervals number;
1505: ,p_loan_id in number
1506: ,p_installment_number in number
1507: ,p_disb_header_id in number
1508: ,p_phase in varchar2
1509: ,x_fees_tbl OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
1510: ,x_return_status out nocopy varchar2
1511: ,x_msg_count out nocopy number
1512: ,x_msg_data out nocopy varchar2)
1513: is
1728:
1729: procedure getFeeDetails(p_init_msg_list in varchar2
1730: ,p_loan_id in number
1731: ,p_installment in number
1732: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
1733: ,p_based_on_terms in varchar2
1734: ,p_phase in varchar2
1735: ,x_fees_tbl out nocopy LNS_FEE_ENGINE.FEE_CALC_TBL
1736: ,x_return_status out nocopy varchar2
1731: ,p_installment in number
1732: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
1733: ,p_based_on_terms in varchar2
1734: ,p_phase in varchar2
1735: ,x_fees_tbl out nocopy LNS_FEE_ENGINE.FEE_CALC_TBL
1736: ,x_return_status out nocopy varchar2
1737: ,x_msg_count out nocopy number
1738: ,x_msg_data out nocopy varchar2)
1739:
1751: l_loan_id NUMBER;
1752: l_phase VARCHAR2(15);
1753: l_last_installment number;
1754:
1755: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1756:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1753: l_last_installment number;
1754:
1755: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1756:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1754:
1755: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1756:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1755: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
1756:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1756:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1757: l_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1758: l_new_recur_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1759: l_memo_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1760: l_funding_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1761: l_new_fund_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1768: l_funding_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1769: l_orig_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1762: l_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1768: l_funding_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1769: l_orig_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1770:
1763: l_new_orig_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1768: l_funding_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1769: l_orig_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1770:
1771: -- unbilled fees on the schedule
1764:
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1768: l_funding_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1769: l_orig_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1770:
1771: -- unbilled fees on the schedule
1772: cursor c_schd_fees(c_loan_id number, c_installment number, c_phase varchar2) is
1765: l_all_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1766: l_recur_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1767: l_memo_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1768: l_funding_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1769: l_orig_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
1770:
1771: -- unbilled fees on the schedule
1772: cursor c_schd_fees(c_loan_id number, c_installment number, c_phase varchar2) is
1773: select sched.fee_schedule_id
1886:
1887: if (l_last_installment+1) = p_installment then
1888:
1889: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - processing late fees');
1890: lns_fee_engine.processLateFees(p_loan_id => l_loan_id
1891: ,p_init_msg_list => 'F'
1892: ,p_commit => 'F'
1893: ,p_phase => l_phase
1894: ,x_return_status => l_return_status
1972: --------------------
1973: -- recurring fees
1974: --------------------
1975: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || '- getting recurring fee structures');
1976: l_recur_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => l_loan_id
1977: ,p_fee_category => 'RECUR'
1978: ,p_fee_type => null
1979: ,p_installment => p_installment
1980: ,p_phase => l_phase
2014:
2015: l_recur_fees_tbl.delete;
2016: if l_new_recur_fee_structures.count > 0 then
2017: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ': Calling calculateFees for recurring fees...');
2018: lns_fee_engine.calculateFees(p_loan_id => l_loan_id
2019: ,p_installment => p_installment
2020: ,p_fee_basis_tbl => l_fee_basis_tbl
2021: ,p_fee_structures => l_new_recur_fee_structures
2022: ,x_fees_tbl => l_recur_fees_tbl
2036: --------------------
2037: -- origination fees
2038: --------------------
2039: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || '- getting origination fee structures');
2040: l_orig_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => l_loan_id
2041: ,p_fee_category => 'EVENT'
2042: ,p_fee_type => 'EVENT_ORIGINATION'
2043: ,p_installment => p_installment
2044: ,p_phase => l_phase
2078:
2079: l_orig_fees_tbl.delete;
2080: if l_new_orig_fee_structures.count > 0 then
2081: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ': Calling calculateFees for origination fees...');
2082: lns_fee_engine.calculateFees(p_loan_id => l_loan_id
2083: ,p_installment => p_installment
2084: ,p_fee_basis_tbl => l_fee_basis_tbl
2085: ,p_fee_structures => l_new_orig_fee_structures
2086: ,x_fees_tbl => l_orig_fees_tbl
2100: IF p_based_on_terms <> 'CURRENT' THEN
2101:
2102: -- memo fees
2103: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || '- getting memo fee structures');
2104: l_memo_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => l_loan_id
2105: ,p_fee_category => 'MEMO'
2106: ,p_fee_type => null
2107: ,p_installment => p_installment
2108: ,p_phase => l_phase
2111:
2112: l_memo_fees_tbl.delete;
2113: if l_memo_fee_structures.count > 0 then
2114: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ': Calling calculateFees for memo fees...');
2115: lns_fee_engine.calculateFees(p_loan_id => l_loan_id
2116: ,p_installment => p_installment
2117: ,p_fee_basis_tbl => l_fee_basis_tbl
2118: ,p_fee_structures => l_memo_fee_structures
2119: ,x_fees_tbl => l_memo_fees_tbl
2133:
2134:
2135: -- funding fees
2136: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || '- getting funding fee structures');
2137: l_funding_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => l_loan_id
2138: ,p_fee_category => 'EVENT'
2139: ,p_fee_type => 'EVENT_FUNDING'
2140: ,p_installment => p_installment
2141: ,p_phase => l_phase
2171:
2172: l_funding_fees_tbl.delete;
2173: if l_new_fund_fee_structures.count > 0 then
2174: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ': Calling calculateFees for funding fees...');
2175: lns_fee_engine.calculateFees(p_loan_id => l_loan_id
2176: ,p_installment => p_installment
2177: ,p_fee_basis_tbl => l_fee_basis_tbl
2178: ,p_fee_structures => l_new_fund_fee_structures
2179: ,x_fees_tbl => l_funding_fees_tbl
2255: *=======================================================================*/
2256: procedure updateFeeSchedule(p_init_msg_list in varchar2
2257: ,p_commit in varchar2
2258: ,p_loan_id in number
2259: ,p_fees_tbl IN LNS_FEE_ENGINE.FEE_CALC_TBL
2260: ,x_return_status out nocopy varchar2
2261: ,x_msg_count out nocopy number
2262: ,x_msg_data out nocopy varchar2)
2263: is
2498: *=======================================================================*/
2499: procedure writeFeeSchedule(p_init_msg_list in varchar2
2500: ,p_commit in varchar2
2501: ,p_loan_id in number
2502: ,p_fees_tbl IN OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
2503: ,x_return_status out nocopy varchar2
2504: ,x_msg_count out nocopy number
2505: ,x_msg_data out nocopy varchar2)
2506:
2721: procedure processFees(p_init_msg_list in varchar2
2722: ,p_commit in varchar2
2723: ,p_loan_id in number
2724: ,p_installment_number in number
2725: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
2726: ,p_fee_structures in LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
2727: ,x_fees_tbl OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
2728: ,x_return_status out nocopy varchar2
2729: ,x_msg_count out nocopy number
2722: ,p_commit in varchar2
2723: ,p_loan_id in number
2724: ,p_installment_number in number
2725: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
2726: ,p_fee_structures in LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
2727: ,x_fees_tbl OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
2728: ,x_return_status out nocopy varchar2
2729: ,x_msg_count out nocopy number
2730: ,x_msg_data out nocopy varchar2)
2723: ,p_loan_id in number
2724: ,p_installment_number in number
2725: ,p_fee_basis_tbl in LNS_FEE_ENGINE.FEE_BASIS_TBL
2726: ,p_fee_structures in LNS_FEE_ENGINE.FEE_STRUCTURE_TBL
2727: ,x_fees_tbl OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
2728: ,x_return_status out nocopy varchar2
2729: ,x_msg_count out nocopy number
2730: ,x_msg_data out nocopy varchar2)
2731: is
2735: l_msg_count NUMBER;
2736: l_msg_data VARCHAR2(32767);
2737:
2738: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
2739: l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
2740: l_fee_schedule_id NUMBER;
2741: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2742: l_fee_category varchar2(30);
2743: l_fee_type varchar2(30);
2737:
2738: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
2739: l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
2740: l_fee_schedule_id NUMBER;
2741: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2742: l_fee_category varchar2(30);
2743: l_fee_type varchar2(30);
2744: i number;
2745: l_processed_fees number;
2746: l_billed_flag VARCHAR2(1);
2747: writeCount NUMBER;
2748: updateCount NUMBER;
2749: l_phase VARCHAR2(30);
2750: l_write_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2751: l_update_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2752: l_inserted_fees number;
2753:
2754: cursor c_processed(c_loan_id number,
2747: writeCount NUMBER;
2748: updateCount NUMBER;
2749: l_phase VARCHAR2(30);
2750: l_write_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2751: l_update_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
2752: l_inserted_fees number;
2753:
2754: cursor c_processed(c_loan_id number,
2755: c_installment number,
2842: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - fee category ' || l_fee_category);
2843: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - fee type ' || l_fee_type);
2844: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - phase ' || l_phase);
2845:
2846: l_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => p_loan_id
2847: ,p_fee_category => l_fee_category
2848: ,p_fee_type => l_fee_type
2849: ,p_installment => p_installment_number
2850: ,p_phase => l_phase
2851: ,p_fee_id => null
2852: ,p_billing_option => p_fee_structures(i).FEE_BILLING_OPTION);
2853: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - fee structures count is ' || l_fee_structures.count);
2854:
2855: lns_fee_engine.calculateFees(p_loan_id => p_loan_id
2856: ,p_fee_basis_tbl => p_fee_basis_tbl
2857: ,p_installment => p_installment_number
2858: ,p_fee_structures => l_fee_structures
2859: ,x_fees_tbl => l_fee_calc_tbl
2918: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' Total No of New Records are '||writeCount );
2919: logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' Total No of Updatable Records are '||updateCount );
2920:
2921: IF (writeCount > 0) THEN
2922: lns_fee_engine.writeFeeSchedule(p_init_msg_list => p_init_msg_list
2923: ,p_commit => p_commit
2924: ,p_loan_id => p_loan_id
2925: ,p_fees_tbl => l_write_fee_calc_tbl
2926: ,x_return_status => l_return_status
2939:
2940: END IF;
2941:
2942: IF (updateCount > 0) THEN
2943: lns_fee_engine.updateFeeSchedule(p_init_msg_list => p_init_msg_list
2944: ,p_commit => p_commit
2945: ,p_loan_id => p_loan_id
2946: ,p_fees_tbl => l_update_fee_calc_tbl
2947: ,x_return_status => l_return_status
3295: l_return_status VARCHAR2(1);
3296: l_msg_count NUMBER;
3297: l_msg_data VARCHAR2(32767);
3298:
3299: l_late_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3300: l_late_fee_structure LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3301: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
3302: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3303: -- l_fee_calc_tbl_full LNS_FEE_ENGINE.FEE_CALC_TBL;
3296: l_msg_count NUMBER;
3297: l_msg_data VARCHAR2(32767);
3298:
3299: l_late_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3300: l_late_fee_structure LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3301: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
3302: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3303: -- l_fee_calc_tbl_full LNS_FEE_ENGINE.FEE_CALC_TBL;
3304: i number;
3297: l_msg_data VARCHAR2(32767);
3298:
3299: l_late_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3300: l_late_fee_structure LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3301: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
3302: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3303: -- l_fee_calc_tbl_full LNS_FEE_ENGINE.FEE_CALC_TBL;
3304: i number;
3305: l_last_installment number;
3298:
3299: l_late_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3300: l_late_fee_structure LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3301: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
3302: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3303: -- l_fee_calc_tbl_full LNS_FEE_ENGINE.FEE_CALC_TBL;
3304: i number;
3305: l_last_installment number;
3306: l_amount_overdue number;
3299: l_late_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3300: l_late_fee_structure LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
3301: l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
3302: l_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3303: -- l_fee_calc_tbl_full LNS_FEE_ENGINE.FEE_CALC_TBL;
3304: i number;
3305: l_last_installment number;
3306: l_amount_overdue number;
3307: l_phase VARCHAR2(30);
3318: l_late_date date;
3319: l_prin_overdue number;
3320: l_int_overdue number;
3321:
3322: l_write_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3323: l_update_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3324: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
3325:
3326: CURSOR last_instal_cur(P_LOAN_ID number, p_payment_number number) IS
3319: l_prin_overdue number;
3320: l_int_overdue number;
3321:
3322: l_write_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3323: l_update_fee_calc_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
3324: l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
3325:
3326: CURSOR last_instal_cur(P_LOAN_ID number, p_payment_number number) IS
3327: select DUE_DATE
3392: close last_instal_cur;
3393: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' - l_due_date = ' || l_due_date);
3394:
3395: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' - Calling getFeeStructures...');
3396: l_late_fee_structures := lns_fee_engine.getFeeStructures(p_loan_id => p_loan_id
3397: ,p_fee_category => 'EVENT'
3398: ,p_fee_type => 'EVENT_LATE_CHARGE'
3399: ,p_installment => null
3400: ,p_phase => l_phase
3447: if l_amount_overdue > l_late_fee_structure(1).minimum_overdue_amount and l_amount_overdue > 0 then
3448:
3449: i := i + 1;
3450: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' - Calling calculateFees...');
3451: lns_fee_engine.calculateFees(p_loan_id => p_loan_id
3452: ,p_fee_basis_tbl => l_fee_basis_tbl
3453: ,p_installment => l_current_installment
3454: ,p_fee_structures => l_late_fee_structure
3455: ,x_fees_tbl => l_fee_calc_tbl
3517: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' Total No of Deleted Records = ' || deleteCount );
3518:
3519: IF (writeCount > 0) THEN
3520: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' Calling writeFeeSchedule...');
3521: lns_fee_engine.writeFeeSchedule(p_init_msg_list => p_init_msg_list
3522: ,p_commit => p_commit
3523: ,p_loan_id => p_loan_id
3524: ,p_fees_tbl => l_write_fee_calc_tbl
3525: ,x_return_status => l_return_status
3534: END IF;
3535:
3536: IF (updateCount > 0) THEN
3537: logMessage(FND_LOG.LEVEL_STATEMENT, G_PKG_NAME, l_api_name || ' Calling updateFeeSchedule...');
3538: lns_fee_engine.updateFeeSchedule(p_init_msg_list => p_init_msg_list
3539: ,p_commit => p_commit
3540: ,p_loan_id => p_loan_id
3541: ,p_fees_tbl => l_update_fee_calc_tbl
3542: ,x_return_status => l_return_status
3640: FND_FILE.PUT_LINE(FND_FILE.LOG, 'processing single loan ' || p_loan_id);
3641: OPEN c_loan_det(p_loan_id);
3642: FETCH c_loan_det INTO l_phase;
3643: CLOSE c_loan_det;
3644: lns_fee_engine.processLateFees(p_init_msg_list => FND_API.G_TRUE
3645: ,p_commit => FND_API.G_TRUE
3646: ,p_loan_id => p_loan_id
3647: ,p_phase => l_phase
3648: ,x_return_status => l_return_status
3658:
3659: exit when c_borrower_loans%notfound;
3660:
3661: FND_FILE.PUT_LINE(FND_FILE.LOG, 'processing loan ' || l_loan_id);
3662: lns_fee_engine.processLateFees(p_init_msg_list => FND_API.G_TRUE
3663: ,p_commit => FND_API.G_TRUE
3664: ,p_loan_id => l_loan_id
3665: ,p_phase => l_phase
3666: ,x_return_status => l_return_status
3678:
3679: exit when c_all_active_loans%notfound;
3680:
3681: FND_FILE.PUT_LINE(FND_FILE.LOG, 'processing loan ' || l_loan_id);
3682: lns_fee_engine.processLateFees(p_init_msg_list => FND_API.G_TRUE
3683: ,p_commit => FND_API.G_TRUE
3684: ,p_loan_id => l_loan_id
3685: ,p_phase => l_phase
3686: ,x_return_status => l_return_status
3762: *=======================================================================*/
3763: procedure getSubmitForApprFeeSchedule(p_init_msg_list in varchar2
3764: ,p_loan_id in number
3765: ,p_billed_flag in varchar2
3766: ,x_fees_tbl OUT NOCOPY LNS_FEE_ENGINE.FEE_CALC_TBL
3767: ,x_return_status out nocopy varchar2
3768: ,x_msg_count out nocopy number
3769: ,x_msg_data out nocopy varchar2)
3770: is
3773: l_msg_count NUMBER;
3774: l_msg_data VARCHAR2(32767);
3775:
3776: i number;
3777: l_fee_rec LNS_FEE_ENGINE.FEE_CALC_REC;
3778: l_fee_schedule_id number;
3779: l_fee_id number;
3780: l_fee_amount number;
3781: l_fee_name varchar2(50);
4048:
4049:
4050: END SET_DISB_FEES_INSTALL;
4051:
4052: END LNS_FEE_ENGINE;