Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
Component Sharing
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Gagandeep Singh Bhatia
Component Sharing
Commits
e7729c46
Commit
e7729c46
authored
Nov 06, 2024
by
Sonawane Amol Madhjuar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace due_date_change
parent
d8f2b0e1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
6 deletions
+29
-6
Amol/ITIOmniFin/due_date_change
Amol/ITIOmniFin/due_date_change
+29
-6
No files found.
Amol/ITIOmniFin/due_date_change
View file @
e7729c46
...
...
@@ -243,10 +243,12 @@ REPAY_TEMP_CUR_READ : LOOP
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_EXCESS_INT_COMP, V_ADV_FLAG, V_BILL_FLAG, V_PRIN_OS, V_REC_TYPE, V_ORG_SEQ_NO;
IF DONE = 1 THEN
SET DONE = 0;
LEAVE REPAY_TEMP_CUR_READ;
END IF;
IF V_SEQ_NO < V_DEFERAL_FROM_INSTL THEN
-- Pre-deferal installment logic
IF V_REC_TYPE = 'P' OR V_REC_TYPE = 'D' THEN
...
...
@@ -258,14 +260,22 @@ IF V_SEQ_NO < V_DEFERAL_FROM_INSTL THEN
SET V_PREV_DUE_DATE = V_DUE_DATE;
SET V_PREV_PRIN_OS = V_PRIN_OS;
ELSE
-- Regular installment logic
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
-- Calculate the gap period (e.g., from 06-Oct to 16-Oct)
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);
-- Add this additional interest to the next EMI (calculated in the next loop iteration)
SET V_NEXT_EMI_INT_COMP = V_INT_COMP1;
SET V_NEXT_EMI_INSTL_AMOUNT = V_INSTL_AMOUNT + V_INT_COMP1;
-- Shift the due date to the next one
SET V_DUE_DATE = V_NEXT_DUE_DATE;
ELSE
-- Calculate the regular due date
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
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');
...
...
@@ -273,20 +283,32 @@ ELSE
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;
-- Regular EMI calculation
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);
IF V_EXCESS_INT_FLAG = 'N' THEN
SET V_EXCESS_INT_COMP = 0;
ELSE
SET V_EXCESS_INT_COMP = V_ORG_INT_COMP - V_INT_COMP;
END IF;
-- Principal component adjustment (no changes here)
SET V_PRIN_COMP = V_INSTL_AMOUNT - V_INT_COMP - V_EXCESS_INT_COMP;
-- Prevent principal from becoming negative (for last EMI)
IF V_PRIN_COMP < 0 THEN
SET V_PRIN_COMP = 0;
END IF;
-- Outstanding principal update
SET V_PRIN_OS = V_PREV_PRIN_OS - V_PRIN_COMP;
SET V_PREV_DUE_DATE = V_DUE_DATE;
SET V_PREV_PRIN_OS = V_PRIN_OS;
-- Update the REPAY_TEMP table with the new values for the current EMI
UPDATE REPAY_TEMP
SET R_ORG_DUE_DATE = V_ORG_DUE_DATE,
R_DUE_DATE = V_DUE_DATE,
...
...
@@ -299,14 +321,15 @@ ELSE
R_COUNT = V_COUNT
WHERE R_LOAN_ID = V_LOAN_ID
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;
IF V_SEQ_NO = V_DEFERAL_FROM_INSTL THEN
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; -- Assuming next EMI is the next sequence number
END IF;
END IF;
END LOOP;
CLOSE REPAY_TEMP_CUR;
IF V_PRIN_OS <> 0 THEN
SET V_PRIN_COMP = V_PRIN_COMP + V_PRIN_OS;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment