Replace due_date_change

parent 52cbf6c3
...@@ -247,11 +247,11 @@ IF DONE = 1 THEN ...@@ -247,11 +247,11 @@ IF DONE = 1 THEN
SET DONE = 0; SET DONE = 0;
LEAVE REPAY_TEMP_CUR_READ; LEAVE REPAY_TEMP_CUR_READ;
END IF; END IF;
IF V_SEQ_NO < V_DEFERAL_FROM_INSTL THEN IF V_SEQ_NO < V_DEFERAL_FROM_INSTL THEN
-- Pre-deferal installment logic
IF V_REC_TYPE = 'P' OR V_REC_TYPE = 'D' THEN IF V_REC_TYPE = 'P' OR V_REC_TYPE = 'D' THEN
SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_DUE_DATE, V_LOAN_DAYS_BASIS); SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_DUE_DATE, V_LOAN_DAYS_BASIS);
SET V_INT_COMP1 = V_INT_COMP1 + GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100),V_INT_ROUND_TYPE, V_INT_ROUNDING); SET V_INT_COMP1 = V_INT_COMP1 + GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100), V_INT_ROUND_TYPE, V_INT_ROUNDING);
ELSE ELSE
SET V_INT_COMP1 = 0; SET V_INT_COMP1 = 0;
END IF; END IF;
...@@ -261,37 +261,30 @@ ELSE ...@@ -261,37 +261,30 @@ ELSE
SET V_ORG_DUE_DATE = DATE_ADD(V_PREV_DUE_DATE, INTERVAL V_FREQ_MONTHS MONTH); SET V_ORG_DUE_DATE = DATE_ADD(V_PREV_DUE_DATE, INTERVAL V_FREQ_MONTHS MONTH);
IF V_SEQ_NO = V_DEFERAL_FROM_INSTL THEN IF V_SEQ_NO = V_DEFERAL_FROM_INSTL THEN
SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_NEXT_DUE_DATE, V_LOAN_DAYS_BASIS); SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_NEXT_DUE_DATE, V_LOAN_DAYS_BASIS);
SET V_INT_COMP1 = GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100),V_INT_ROUND_TYPE, V_INT_ROUNDING); SET V_INT_COMP1 = GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100), V_INT_ROUND_TYPE, V_INT_ROUNDING);
SET V_NEXT_EMI_INT_COMP = V_INT_COMP1;
SET V_INT_COMP = V_INT_COMP + V_INT_COMP1; SET V_NEXT_EMI_INSTL_AMOUNT = V_INSTL_AMOUNT + V_INT_COMP1;
SET V_INSTL_AMOUNT = V_INSTL_AMOUNT + V_INT_COMP1;
SET V_DUE_DATE = V_NEXT_DUE_DATE; SET V_DUE_DATE = V_NEXT_DUE_DATE;
ELSE ELSE
SET V_DUE_DATE = DATE_ADD(V_PREV_DUE_DATE, INTERVAL V_FREQ_MONTHS MONTH); SET V_DUE_DATE = DATE_ADD(V_PREV_DUE_DATE, INTERVAL V_FREQ_MONTHS MONTH);
IF EXTRACT(DAY FROM LAST_DAY(V_Due_Date)) <= V_LOAN_DUE_DAY THEN IF EXTRACT(DAY FROM LAST_DAY(V_DUE_DATE)) <= V_LOAN_DUE_DAY THEN
SET V_Due_Date = STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM V_Due_Date), EXTRACT(DAY FROM LAST_DAY(V_Due_Date))), '%Y%m%d'); SET V_DUE_DATE = STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM V_DUE_DATE), EXTRACT(DAY FROM LAST_DAY(V_DUE_DATE))), '%Y%m%d');
ELSE ELSE
Set V_Due_Date = STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM V_Due_Date), V_LOAN_DUE_DAY), '%Y%m%d'); SET V_DUE_DATE = STR_TO_DATE(CONCAT(EXTRACT(YEAR_MONTH FROM V_DUE_DATE), V_LOAN_DUE_DAY), '%Y%m%d');
END IF; END IF;
END IF; END IF;
-- Regular EMI calculation
SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_DUE_DATE, V_LOAN_DAYS_BASIS); SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_DUE_DATE, V_LOAN_DAYS_BASIS);
SET V_INT_COMP = GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100),V_INT_ROUND_TYPE, V_INT_ROUNDING); SET V_INT_COMP = GET_ROUNDED_VALUE((V_PREV_PRIN_OS * V_LOAN_EFF_RATE * V_DAYS) / (V_LOAN_DAYS_PER_YEAR * 100), V_INT_ROUND_TYPE, V_INT_ROUNDING);
IF V_EXCESS_INT_FLAG = 'N' THEN IF V_EXCESS_INT_FLAG = 'N' THEN
SET V_EXCESS_INT_COMP = 0; SET V_EXCESS_INT_COMP = 0;
ELSE ELSE
SET V_EXCESS_INT_COMP = V_ORG_INT_COMP - V_INT_COMP; SET V_EXCESS_INT_COMP = V_ORG_INT_COMP - V_INT_COMP;
END IF; END IF;
SET V_PRIN_COMP = V_INSTL_AMOUNT - V_INT_COMP; SET V_PRIN_COMP = V_INSTL_AMOUNT - V_INT_COMP - V_EXCESS_INT_COMP;
IF V_SEQ_NO < (SELECT MAX(R_SEQ_NO) FROM REPAY_TEMP WHERE R_LOAN_ID = V_LOAN_ID) THEN IF V_PRIN_COMP < 0 THEN
SET V_PRIN_COMP = V_PRIN_COMP - V_EXCESS_INT_COMP; SET V_PRIN_COMP = 0;
ELSE
SET V_PRIN_COMP = V_PRIN_COMP;
END IF; END IF;
SET V_PRIN_OS = V_PREV_PRIN_OS - V_PRIN_COMP; SET V_PRIN_OS = V_PREV_PRIN_OS - V_PRIN_COMP;
SET V_INT_OS = V_INT_OS - V_INT_COMP - V_EXCESS_INT_COMP;
SET V_PREV_DUE_DATE = V_DUE_DATE; SET V_PREV_DUE_DATE = V_DUE_DATE;
SET V_PREV_PRIN_OS = V_PRIN_OS; SET V_PREV_PRIN_OS = V_PRIN_OS;
UPDATE REPAY_TEMP UPDATE REPAY_TEMP
...@@ -306,10 +299,14 @@ ELSE ...@@ -306,10 +299,14 @@ ELSE
R_COUNT = V_COUNT R_COUNT = V_COUNT
WHERE R_LOAN_ID = V_LOAN_ID WHERE R_LOAN_ID = V_LOAN_ID
AND R_SEQ_NO = V_SEQ_NO; AND R_SEQ_NO = V_SEQ_NO;
UPDATE REPAY_TEMP
SET R_INT_COMP = V_NEXT_EMI_INT_COMP,
R_INSTL_AMOUNT = V_NEXT_EMI_INSTL_AMOUNT
WHERE R_LOAN_ID = V_LOAN_ID
AND R_SEQ_NO = V_SEQ_NO + 1;
END IF; END IF;
END LOOP; END LOOP;
CLOSE REPAY_TEMP_CUR; CLOSE REPAY_TEMP_CUR;
IF V_PRIN_OS <> 0 THEN IF V_PRIN_OS <> 0 THEN
SET V_PRIN_COMP = V_PRIN_COMP + V_PRIN_OS; SET V_PRIN_COMP = V_PRIN_COMP + V_PRIN_OS;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment