Replace due_date_change

parent 4066a47e
...@@ -243,15 +243,15 @@ REPAY_TEMP_CUR_READ : LOOP ...@@ -243,15 +243,15 @@ REPAY_TEMP_CUR_READ : LOOP
FETCH REPAY_TEMP_CUR INTO V_LOAN_ID, V_SEQ_NO, V_ORG_DUE_DATE, V_DUE_DATE, FETCH REPAY_TEMP_CUR INTO V_LOAN_ID, V_SEQ_NO, V_ORG_DUE_DATE, V_DUE_DATE,
V_INSTL_AMOUNT, V_PRIN_COMP, V_INT_COMP, V_INSTL_AMOUNT, V_PRIN_COMP, V_INT_COMP,
V_EXCESS_INT_COMP, V_ADV_FLAG, V_BILL_FLAG, V_PRIN_OS, V_REC_TYPE, V_ORG_SEQ_NO; V_EXCESS_INT_COMP, V_ADV_FLAG, V_BILL_FLAG, V_PRIN_OS, V_REC_TYPE, V_ORG_SEQ_NO;
IF DONE = 1 THEN 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
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,31 +261,36 @@ ELSE ...@@ -261,31 +261,36 @@ 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_INT_COMP = V_INT_COMP + V_INT_COMP1;
SET V_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;
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 - V_EXCESS_INT_COMP; SET V_PRIN_COMP = V_INSTL_AMOUNT - V_INT_COMP - V_EXCESS_INT_COMP;
IF V_PRIN_COMP < 0 THEN
SET V_PRIN_COMP = 0;
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_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
SET R_ORG_DUE_DATE = V_ORG_DUE_DATE, SET R_ORG_DUE_DATE = V_ORG_DUE_DATE,
R_DUE_DATE = V_DUE_DATE, R_DUE_DATE = V_DUE_DATE,
...@@ -298,17 +303,11 @@ ELSE ...@@ -298,17 +303,11 @@ 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;
IF V_SEQ_NO = V_DEFERAL_FROM_INSTL THEN
UPDATE REPAY_TEMP
SET R_INSTL_AMOUNT = V_INSTL_AMOUNT,
R_INT_COMP = V_INT_COMP + V_INT_COMP1 -- Adding gap-period interest to the next EMI's interest
WHERE R_LOAN_ID = V_LOAN_ID
AND R_SEQ_NO = V_SEQ_NO + 1; -- Assuming next EMI is the next sequence number
END IF;
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