Delete due_date

parent a0faaeee
CREATE DEFINER=`root`@`localhost` PROCEDURE `due_date_change`(IN I_COMPANY_ID INT, IN I_RESCH_ID INT(10),
IN I_CURR_DATE DATE, IN I_USER_ID VARCHAR(10),
IN I_STATUS VARCHAR(1), IN I_REMARKS VARCHAR(100),
OUT O_FLAT_RATE DECIMAL(10,7), OUT O_LOAN_EFF_RATE DECIMAL(10,7),
OUT O_MKTIRR1 DECIMAL(10,7), OUT O_MKTIRR2 DECIMAL(10,7),
out o_error_flag varchar(1), out o_error_msg Varchar(100))
BEGIN
DECLARE V_RESCH_EFF_DATE DATE;
DECLARE V_PREPAYMENT_AMOUNT DECIMAL(22,4);
DECLARE V_RESCH_CHARGES DECIMAL(22,4);
DECLARE V_DEFERAL_FROM_INSTL INT(3);
DECLARE V_INSTL_DEFERRED INT(3);
DECLARE V_INTEREST_METHOD VARCHAR(1);
DECLARE V_NEXT_DUE_DATE DATE;
DECLARE V_DEAL_ID INT(10);
Declare v_LOAN_PRODUCT_CATEGORY VARCHAR(10);
Declare v_LOAN_PRODUCT VARCHAR(10);
Declare V_LOAN_CUSTOMER_ID VARCHAR(10);
Declare v_LOAN_SCHEME int(10);
Declare v_LOAN_PROMO_SCHEME int(10);
Declare v_LOAN_PRODUCT_TYPE VARCHAR(1);
Declare v_LOAN_INITIATION_DATE DATE;
Declare v_LOAN_APPROVAL_DATE DATE;
Declare v_LOAN_DISBURSAL_DATE DATE;
Declare v_LOAN_REPAY_EFF_DATE DATE;
Declare v_LOAN_MATURITY_DATE DATE;
Declare v_LOAN_LOAN_AMOUNT DECIMAL(22,4) DEFAULT 0;
Declare v_LOAN_TENURE Int(5);
Declare v_LOAN_REPAYMENT_FREQ VARCHAR(1);
Declare v_LOAN_RATE_TYPE VARCHAR(1);
Declare v_LOAN_RATE_METHOD VARCHAR(1);
Declare v_LOAN_FINAL_RATE DECIMAL(10,7) DEFAULT 0;
Declare V_FLAT_RATE DECIMAL(10,7) DEFAULT 0;
Declare v_LOAN_REPAYMENT_TYPE VARCHAR(1);
Declare v_LOAN_INSTALLMENT_TYPE VARCHAR(1);
Declare v_LOAN_INSTALLMENT_MODE VARCHAR(1);
Declare v_LOAN_NUMBER_DISBURSAL Int(3);
Declare v_LOAN_ADVANCE_INSTL Int(3);
Declare v_LOAN_DUE_DAY Int(2);
DECLARE V_LOAN_EFF_RATE DECIMAL(10,7);
Declare v_LOAN_DAYS_BASIS VARCHAR(1);
Declare v_LOAN_DAYS_PER_YEAR int(3);
Declare v_RV_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_INSTL_ROUND_TYPE VARCHAR(1);
DECLARE V_INSTL_ROUNDING INT (1);
DECLARE V_INT_ROUND_TYPE VARCHAR(1);
DECLARE V_INT_ROUNDING INT (1);
DECLARE V_FREQ_MONTHS INT (2);
DECLARE V_NO_OF_INSTL INT(3);
DECLARE V_ERROR_FLAG VARCHAR (1);
DECLARE V_ERROR_MSG VARCHAR (100);
DECLARE V_TOTAL_INSTALLMENT_AMOUNT DECIMAL (22,4) DEFAULT 0;
DECLARE V_INSTALLMENT_AMOUNT DECIMAL (22,4) DEFAULT 0;
DECLARE V_PRINCIPAL_AMOUNT DECIMAL (22,4) DEFAULT 0;
DECLARE V_INTEREST_AMOUNT DECIMAL (22,4) DEFAULT 0;
DECLARE V_PREV_INSTL_AMOUNT DECIMAL (22,4);
DECLARE V_PREV_PRIN_COMP DECIMAL (22,4);
DECLARE V_TOTAL_PRINCIPAL DECIMAL(22,4) DEFAULT 0;
DECLARE V_RECOVERY_AMOUNT DECIMAL(22,4) default 0;
DECLARE DONE INT;
DECLARE V_LOAN_ID INT(10);
DECLARE V_SEQ_NO INT (3);
DECLARE v_FROM_INSTL_NO INT(3) default 0 ;
DECLARE v_TO_INSTL_NO INT(3) default 0;
DECLARE V_RECOVERY_PERCENT DECIMAL (5,2) DEFAULT 0;
DECLARE I INT DEFAULT 0;
DECLARE J INT DEFAULT 0;
DECLARE V_LAST_INSTL_NO INT(3);
DECLARE V_DUE_DATE DATE;
DECLARE V_ORG_DUE_DATE DATE;
DECLARE V_INSTL_AMOUNT DECIMAL (22,4);
DECLARE V_PRIN_COMP DECIMAL (22,4);
DECLARE V_INT_COMP DECIMAL (22,4);
DECLARE V_INT_COMP1 DECIMAL (22,4);
DECLARE V_ORG_INT_COMP DECIMAL (22,4);
DECLARE V_EXCESS_INT_COMP DECIMAL (22,4);
DECLARE V_PRIN_OS DECIMAL (22,4) default 0;
DECLARE V_ADV_FLAG VARCHAR(1);
DECLARE V_BILL_FLAG VARCHAR(1);
DECLARE V_COUNT INT(5) DEFAULT 0;
DECLARE V_REC_TYPE VARCHAR(1);
DECLARE V_PREV_DUE_DATE DATE;
DECLARE V_DAYS INT(5) DEFAULT 0;
DECLARE V_INT_OS DECIMAL (22,4);
DECLARE V_PREV_PRIN_OS DECIMAL (22,4);
Declare v_MKTIRR1 DECIMAL (10,7) Default 0;
Declare v_MKTIRR2 DECIMAL (10,7) Default 0;
Declare v_UpFront_InFlow DECIMAL (22,4) default 0;
Declare v_End_OutFlow DECIMAL (22,4) default 0;
DECLARE v_TOTAL_RECOVERY DECIMAL (5,2) Default 0;
DECLARE V_OPPORTUNITY_INTEREST DECIMAL (10,7) DEFAULT 15;
DECLARE V_GEN_ROUND_TYPE VARCHAR(1) DEFAULT 'R';
DECLARE V_GEN_ROUND_PARA INT(1) DEFAULT 2;
DECLARE V_ADVANCE_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_SD_ADJ_FLAG VARCHAR(1) DEFAULT 'N';
DECLARE V_RECOVERY_TYPE VARCHAR(1);
declare V_TOTAL_AMOUNT DECIMAL(22,4);
Declare v_NEW_EffRate DECIMAL (10,7) Default 0;
DECLARE V_ALLOC_FLAG VARCHAR(1) DEFAULT 'N';
DECLARE V_INSTL_COUNT INT(5);
DECLARE V_LOAN_NO_OF_INSTALLMENT INT(5);
DECLARE V_PREV_INSTL_COUNT INT(3);
DECLARE V_INSTL_PLAN_HST_ID INT(10);
DECLARE V_REPAY_HST_ID INT(10);
DECLARE V_OLD_INTEREST DECIMAL(22,4);
DECLARE V_NEW_INTEREST DECIMAL(22,4);
DECLARE V_TXNADVICE_ID INT(10);
DECLARE V_TXN_TYPE VARCHAR(3);
DECLARE V_TXN_ID INT(10);
DECLARE V_ADVICE_DATE DATE;
DECLARE V_ADVICE_TYPE VARCHAR(1);
DECLARE V_CHARGE_CODE_ID INT(10);
DECLARE V_ADVICE_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_TXN_ADJUSTED_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_AMOUNT_IN_PROCESS DECIMAL(22,4) DEFAULT 0;
DECLARE V_CHARGE_CODE INT(10);
DECLARE V_CHARGE_ID INT(10);
DECLARE V_CHARGE_TYPE VARCHAR(1);
DECLARE V_CHARGE_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_BP_TYPE VARCHAR(3);
DECLARE V_BP_ID INT(10);
DECLARE V_BP_NAME VARCHAR(50);
DECLARE V_CHARGE_METHOD VARCHAR(1);
DECLARE V_TAX_RATE1 DECIMAL(7,4) DEFAULT 0;
DECLARE V_TAX_RATE2 DECIMAL(7,4) DEFAULT 0;
DECLARE V_TDS_RATE DECIMAL(7,4) DEFAULT 0;
DECLARE V_TDS_AMOUNT DECIMAL(22,4) DEFAULT 0;
DECLARE V_TAX_AMOUNT1 DECIMAL(22,4) DEFAULT 0;
DECLARE V_TAX_AMOUNT2 DECIMAL(22,4) DEFAULT 0;
DECLARE V_TDS_APPLICABLE VARCHAR(1) DEFAULT 'N';
DECLARE V_TAX_APPLICABLE VARCHAR(1) DEFAULT 'N';
DECLARE V_TAX_INCLUSIVE VARCHAR(1) DEFAULT 'N';
DECLARE I_DEPARTMENT INT(10);
DECLARE V_ACCOUNTING_FLAG VARCHAR(1) DEFAULT 'N';
DECLARE V_CHARGE_STR VARCHAR(1000) DEFAULT '';
DECLARE V_VOUCHER_STR VARCHAR(500);
DECLARE V_CHARGE_AMT DECIMAL(22,4) DEFAULT 0;
DECLARE V_VOUCHER_NO VARCHAR(20);
DECLARE V_EXCESS_INT_FLAG VARCHAR(1);
DECLARE V_ORG_SEQ_NO INT(3);
DECLARE V_DISBURSAL_STATUS VARCHAR(1);
DECLARE V_LAST_DUE_DATE DATE;
DECLARE V_INSTL_NO INT;
DECLARE V_LOAN_BRANCH INT;
DECLARE V_NPA_FLAG VARCHAR(30);
DECLARE V_LOAN_CUSTOMER_NAME VARCHAR(100);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
Begin
Rollback;
set o_Error_Flag = 'E';
set o_Error_msg = 'Due_Date_Change-Unknown exception in SQL Execution, Contact System Administrator...';
End;
DECLARE EXIT HANDLER FOR 1205
Begin
Rollback;
set o_Error_Flag = 'E';
set o_Error_msg = 'Due_Date_Change-RECORD IS LOCKED BY SOME OTHER USER, TRY AFTER SOME TIME';
End;
SET AUTOCOMMIT=0;
set o_Error_Flag = 'S';
set o_Error_msg = '';
Create Temporary Table IF NOT EXISTS Instl_Plan_TEMP (P_LOAN_ID INT(10), P_RECOVERY_TYPE VARCHAR(1), P_SEQ_NO INT(3), P_FROM_INSTL_NO INT(3), P_TO_INSTL_NO INT(3),
P_RECOVERY_PERCENT DECIMAL(7,4), P_PRINCIPAL_AMOUNT DECIMAL(22,4),
P_INSTALLMENT_AMOUNT DECIMAL (22,4),P_REC_TYPE VARCHAR(1));
DELETE FROM Instl_Plan_TEMP;
Create Temporary Table IF NOT EXISTS Repay_Temp (R_LOAN_ID int(10), R_Seq_No int (3), R_Org_Due_Date Date, R_Due_Date Date,
R_Instl_Amount DECIMAL (22,4), R_Prin_Comp DECIMAL (22,4), R_Int_Comp DECIMAL (22,4),
R_EXCESS_Int_Comp DECIMAL (22,4), R_Prin_OS DECIMAL (22,4), R_EFFRATE DECIMAL (10,7),
R_ADV_FLAG VARCHAR(1), R_BILL_FLAG VARCHAR(1), R_Count int(5), R_REC_TYPE VARCHAR(1),
R_ORG_SEQ_NO INT(3), R_OTHER_CHARGES DECIMAL(22,4) );
DELETE FROM Repay_Temp;
Create Temporary Table IF NOT EXISTS Repay_Temp1 (R_LOAN_ID int(10), R_Seq_No int (3), R_Org_Due_Date Date, R_Due_Date Date,
R_Instl_Amount DECIMAL (22,4), R_Prin_Comp DECIMAL (22,4), R_Int_Comp DECIMAL (22,4),
R_EXCESS_Int_Comp DECIMAL (22,4), R_Prin_OS DECIMAL (22,4), R_EFFRATE DECIMAL (10,7),
R_ADV_FLAG VARCHAR(1), R_BILL_FLAG VARCHAR(1), R_Count int(5), R_REC_TYPE VARCHAR(1),
R_ORG_SEQ_NO INT(3), R_OTHER_CHARGES DECIMAL(22,4));
DELETE FROM Repay_Temp1;
BEGIN
DECLARE Instl_Plan_Cur CURSOR for select P_RECOVERY_TYPE, P_LOAN_ID, P_SEQ_NO, P_FROM_INSTL_NO, P_TO_INSTL_NO, IFNULL(P_RECOVERY_PERCENT,0), IFNULL(P_PRINCIPAL_AMOUNT,0), IFNULL(P_INSTALLMENT_AMOUNT,0)
from Instl_Plan_TEMP
Where P_LOAN_ID = V_LOAN_ID
ORDER BY P_LOAN_ID, P_SEQ_NO;
DECLARE REPAY_TEMP_CUR CURSOR FOR SELECT R_LOAN_ID, R_SEQ_NO, R_ORG_DUE_DATE, R_DUE_DATE,
R_INSTL_AMOUNT, R_PRIN_COMP, R_INT_COMP,
R_EXCESS_INT_COMP, R_ADV_FLAG, R_BILL_FLAG, R_Prin_OS, IFNULL(R_REC_TYPE, 'I'), R_ORG_SEQ_NO
FROM REPAY_TEMP
ORDER BY R_LOAN_ID, R_ORG_SEQ_NO;
SELECT PARAMETER_VALUE INTO V_EXCESS_INT_FLAG
FROM PARAMETER_MST
WHERE PARAMETER_KEY = 'EXCESS_INT_FLAG';
IF DONE = 1 THEN
SET DONE = 0;
SET V_EXCESS_INT_FLAG = 'Y';
END IF;
SELECT LOAN_ID, RESCH_EFF_DATE, IFNULL(RESCH_CHARGES,0), ifnull(DEFERAL_FROM_INSTL,0), ifnull(INSTL_DEFERRED,0), GAP_INTEREST_METHOD, NEW_DUE_DATE
INTO V_LOAN_ID, V_RESCH_EFF_DATE, V_RESCH_CHARGES, V_DEFERAL_FROM_INSTL, V_INSTL_DEFERRED, V_INTEREST_METHOD, V_NEXT_DUE_DATE
FROM CR_RESCH_DTL
WHERE RESCH_ID = I_RESCH_ID;
IF DONE = 1 THEN
SET DONE = 0;
rollback;
set o_Error_Flag = 'E';
set o_Error_msg = 'DEFERRAL DETAILS NOT FOUND';
END IF;
Select LOAN_ID, LOAN_DEAL_ID, LOAN_PRODUCT, LOAN_SCHEME, LOAN_PROMO_SCHEME, LOAN_PRODUCT_TYPE, LOAN_INITIATION_DATE,
LOAN_APPROVAL_DATE, LOAN_DISBURSAL_DATE, LOAN_REPAY_EFF_DATE, LOAN_LOAN_AMOUNT, LOAN_TENURE, LOAN_REPAYMENT_FREQ, LOAN_RATE_TYPE,
LOAN_RATE_METHOD, LOAN_FINAL_RATE, LOAN_REPAYMENT_TYPE, LOAN_INSTALLMENT_TYPE, LOAN_INSTALLMENT_MODE,
LOAN_ADVANCE_INSTL, LOAN_DUE_DAY, LOAN_MATURITY_DATE, LOAN_EFF_RATE, LOAN_NO_OF_INSTALLMENT,
LOAN_FLAT_RATE, LOAN_EFF_RATE, LOAN_IRR1, LOAN_IRR2, DISBURSAL_STATUS,LOAN_BRANCH,NPA_FLAG,CUSTOMER_NAME
into V_LOAN_ID, V_DEAL_ID, v_LOAN_PRODUCT, v_LOAN_SCHEME, v_LOAN_PROMO_SCHEME, v_LOAN_PRODUCT_TYPE, v_LOAN_INITIATION_DATE,
v_LOAN_APPROVAL_DATE, v_LOAN_DISBURSAL_DATE, v_LOAN_REPAY_EFF_DATE, v_LOAN_LOAN_AMOUNT, v_LOAN_TENURE, v_LOAN_REPAYMENT_FREQ, v_LOAN_RATE_TYPE,
v_LOAN_RATE_METHOD, v_LOAN_FINAL_RATE, v_LOAN_REPAYMENT_TYPE, v_LOAN_INSTALLMENT_TYPE, v_LOAN_INSTALLMENT_MODE,
v_LOAN_ADVANCE_INSTL, v_LOAN_DUE_DAY, V_LOAN_MATURITY_DATE, V_LOAN_EFF_RATE, V_LOAN_NO_OF_INSTALLMENT,
V_FLAT_RATE, V_LOAN_EFF_RATE, V_MKTIRR1,V_MKTIRR2, V_DISBURSAL_STATUS,V_LOAN_BRANCH,V_NPA_FLAG,V_LOAN_CUSTOMER_NAME
from CR_LOAN_DTL
JOIN GCD_CUSTOMER_M ON CR_LOAN_DTL.LOAN_CUSTOMER_ID=GCD_CUSTOMER_M.CUSTOMER_ID
where Loan_Id = V_LOAN_ID
AND IFNULL(LOAN_REPAYMENT_TYPE, 'I') = 'I';
set v_LOAN_DUE_DAY=EXTRACT(DAY FROM V_NEXT_DUE_DATE) ;
Select DAYS_BASIS, DAYS_PER_YEAR, INSTL_ROUND_TYPE, INSTL_ROUNDING, INT_ROUND_TYPE, INT_ROUNDING, OPPORTUNITY_RATE
INTO V_LOAN_DAYS_BASIS, V_LOAN_DAYS_PER_YEAR, V_INSTL_ROUND_TYPE, V_INSTL_ROUNDING,V_INT_ROUND_TYPE, V_INT_ROUNDING, V_OPPORTUNITY_INTEREST
from CR_PRODUCT_M
Where PRODUCT_ID = V_LOAN_PRODUCT;
insert into Instl_Plan_TEMP (P_RECOVERY_TYPE, P_LOAN_ID, P_SEQ_NO, P_FROM_INSTL_NO, P_TO_INSTL_NO,
P_RECOVERY_PERCENT, P_PRINCIPAL_AMOUNT, P_INSTALLMENT_AMOUNT)
select RECOVERY_TYPE, LOAN_ID, SEQ_NO, FROM_INSTL_NO, TO_INSTL_NO,
RECOVERY_PERCENT, PRINCIPAL_AMOUNT, INSTALLMENT_AMOUNT
FROM CR_INSTALLMENT_PLAN WHERE LOAN_ID = V_LOAN_ID;
INSERT INTO Repay_Temp (R_LOAN_ID, R_Seq_No, R_Org_Due_Date, R_Due_Date, R_Instl_Amount, R_Prin_Comp, R_Int_Comp, R_EXCESS_Int_Comp,
R_Prin_OS, R_EFFRATE, R_ADV_FLAG, R_BILL_FLAG, R_Count, R_REC_TYPE, R_ORG_SEQ_NO, R_OTHER_CHARGES)
SELECT LOAN_ID, INSTL_NO, INSTL_DATE, INSTL_DATE, INSTL_AMOUNT, PRIN_COMP, INT_COMP, EXCESS_INT,
PRIN_OS, INTEREST_RATE, ADV_FLAG, BILL_FLAG, 0, IFNULL(REC_TYPE, 'I'), SEQ_NO, OTHER_CHARGES
FROM CR_REPAYSCH_DTL
WHERE LOAN_ID = V_LOAN_ID
ORDER BY INSTL_NO;
SET V_FREQ_MONTHS = GET_FREQ_MONTHS (V_LOAN_REPAYMENT_FREQ);
SET V_PREV_DUE_DATE = v_LOAN_REPAY_EFF_DATE;
SET V_PREV_PRIN_OS = v_LOAN_LOAN_AMOUNT;
SET V_INT_COMP1 = 0;
OPEN REPAY_TEMP_CUR;
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
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_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
SET V_INT_COMP1 = 0;
END IF;
SET V_PREV_DUE_DATE = V_DUE_DATE;
SET V_PREV_PRIN_OS = V_PRIN_OS;
ELSE
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
SET V_DUE_DATE = V_NEXT_DUE_DATE;
ELSE
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');
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;
SET V_DAYS = GET_DAYS_BETWEEN(V_PREV_DUE_DATE, V_ORG_DUE_DATE, V_LOAN_DAYS_BASIS);
SET V_ORG_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_ORG_INT_COMP = V_ORG_INT_COMP + V_INT_COMP1;
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 = V_INT_COMP + V_INT_COMP1;
SET V_INT_COMP1 = 0;
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;
SET V_PRIN_COMP = V_INSTL_AMOUNT - V_INT_COMP - V_EXCESS_INT_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_PRIN_OS = V_PRIN_OS;
UPDATE REPAY_TEMP
SET R_ORG_DUE_DATE = V_ORG_DUE_DATE,
R_DUE_DATE = V_DUE_DATE,
R_INSTL_AMOUNT = V_INSTL_AMOUNT,
R_PRIN_COMP = V_PRIN_COMP,
R_INT_COMP = V_INT_COMP,
R_EXCESS_INT_COMP = 0,
R_PRIN_OS = V_PRIN_OS,
R_EFFRATE = V_LOAN_EFF_RATE,
R_COUNT = V_COUNT
WHERE R_LOAN_ID = V_LOAN_ID
AND R_SEQ_NO = V_SEQ_NO;
END IF;
END LOOP;
CLOSE REPAY_TEMP_CUR;
IF V_PRIN_OS <> 0 THEN
SET V_PRIN_COMP = V_PRIN_COMP + V_PRIN_OS;
SET V_INSTL_AMOUNT = V_PRIN_COMP + V_INT_COMP + V_EXCESS_INT_COMP;
SET V_PRIN_OS = 0;
UPDATE REPAY_TEMP
SET R_INSTL_AMOUNT = R_INSTL_AMOUNT + V_EXCESS_INT_COMP,
R_PRIN_COMP = V_PRIN_COMP,
R_INT_COMP = 0,
R_EXCESS_INT_COMP = V_EXCESS_INT_COMP,
R_PRIN_OS = V_PRIN_OS
WHERE R_LOAN_ID = V_LOAN_ID
AND R_SEQ_NO = V_SEQ_NO + 1;
END IF;
SET O_FLAT_RATE = V_FLAT_RATE;
SET O_LOAN_EFF_RATE = V_LOAN_EFF_RATE;
SET O_MKTIRR1 = V_MKTIRR1;
SET O_MKTIRR2 = V_MKTIRR2;
IF I_STATUS ='A' THEN
SELECT MAX(INSTL_DATE) INTO V_LAST_DUE_DATE FROM CR_REPAYSCH_DTL WHERE LOAN_ID= V_LOAN_ID;
IF V_LOAN_INSTALLMENT_MODE='A' THEN
SET V_INSTL_NO = 2;
ELSE
SET V_INSTL_NO = 1;
END IF;
SELECT V_NEXT_DUE_DATE = INSTL_DATE FROM CR_REPAYSCH_DTL WHERE LOAN_ID = V_LOAN_ID AND INSTL_NO=V_INSTL_NO LIMIT 1;
UPDATE CR_LOAN_DTL
SET LOAN_DUE_DAY=EXTRACT(DAY FROM V_NEXT_DUE_DATE) ,
LOAN_MATURITY_DATE = IF(LOAN_INSTALLMENT_MODE='A', DATE_ADD(V_LAST_DUE_DATE, INTERVAL GET_FREQ_MONTHS(LOAN_REPAYMENT_FREQ) MONTH), V_LAST_DUE_DATE),
NEXT_DUE_DATE=V_NEXT_DUE_DATE
WHERE LOAN_ID = V_LOAN_ID ;
SELECT IFNULL(SUM(IFNULL(INT_COMP,0)),0) + IFNULL(SUM(IFNULL(EXCESS_INT,0)),0)
INTO V_OLD_INTEREST
FROM CR_REPAYSCH_DTL
WHERE LOAN_ID = V_LOAN_ID;
SET V_REPAY_HST_ID = function_sequence('REPAY_HST_ID');
INSERT INTO CR_REPAYSCH_DTL_HST (REPAY_HST_ID, REPAYSCH_ID, LOAN_ID, INSTL_NO, INSTL_DATE, INSTL_AMOUNT, PRIN_COMP, INT_COMP, EXCESS_INT,
OTHER_CHARGES, BILL_FLAG, INSTL_AMOUNT_RECD, PRIN_COMP_RECD, INT_COMP_RECD, EXCESS_INT_RECD,
OTHER_CHARGES_RECD, LAST_PMNT_DATE, LAST_OD_CALC_DATE, TOTAL_OD_AMOUNT, INTEREST_RATE, ADV_FLAG,
DISBURSAL_AMOUNT, PRIN_OS, REC_STATUS, MAKER_ID, MAKER_DATE, AUTHOR_ID, AUTHOR_DATE,MVMT_BY, MVMT_DATE, REC_TYPE, SEQ_NO)
SELECT V_REPAY_HST_ID, REPAYSCH_ID, LOAN_ID, INSTL_NO, INSTL_DATE, INSTL_AMOUNT, PRIN_COMP, INT_COMP, EXCESS_INT,
OTHER_CHARGES, BILL_FLAG, INSTL_AMOUNT_RECD, PRIN_COMP_RECD, INT_COMP_RECD, EXCESS_INT_RECD,
OTHER_CHARGES_RECD, LAST_PMNT_DATE, LAST_OD_CALC_DATE, TOTAL_OD_AMOUNT, INTEREST_RATE, ADV_FLAG,
DISBURSAL_AMOUNT, PRIN_OS, REC_STATUS, MAKER_ID, MAKER_DATE, AUTHOR_ID, AUTHOR_DATE, I_USER_ID, I_CURR_DATE, REC_TYPE, SEQ_NO
FROM CR_REPAYSCH_DTL
WHERE LOAN_ID = V_LOAN_ID
ORDER BY LOAN_ID, INSTL_NO;
DELETE FROM CR_REPAYSCH_DTL WHERE LOAN_ID = V_LOAN_ID AND INSTL_DATE > V_RESCH_EFF_DATE;
INSERT INTO CR_REPAYSCH_DTL(LOAN_ID, INSTL_NO, INSTL_DATE, INSTL_AMOUNT, PRIN_COMP, INT_COMP, EXCESS_INT, BILL_FLAG,
INSTL_AMOUNT_RECD, PRIN_COMP_RECD, INT_COMP_RECD, EXCESS_INT_RECD,
TOTAL_OD_AMOUNT, INTEREST_RATE, ADV_FLAG, PRIN_OS, REC_STATUS, REC_TYPE, SEQ_NO, OTHER_CHARGES)
SELECT R_LOAN_ID, R_Seq_No, R_Due_Date, R_Instl_Amount, R_Prin_Comp, R_Int_Comp, R_EXCESS_Int_Comp, 'N',
0, 0, 0, 0,
0, V_LOAN_EFF_RATE, R_ADV_FLAG, R_PRIN_OS, 'A', R_REC_TYPE, R_ORG_SEQ_NO, R_OTHER_CHARGES
FROM Repay_Temp
WHERE R_LOAN_ID = V_LOAN_ID
AND R_Due_Date > V_RESCH_EFF_DATE
ORDER BY R_LOAN_ID, R_Seq_No;
SELECT PARAMETER_VALUE INTO I_DEPARTMENT
FROM PARAMETER_MST
WHERE PARAMETER_KEY = 'CMDEPARTMENT';
IF DONE = 1 THEN
SET DONE = 0;
SET I_DEPARTMENT = '';
END IF;
SELECT COUNT(*) INTO V_COUNT
FROM CR_SCHEME_ACCOUNTING_DTL
WHERE SCHEME_ID = V_LOAN_SCHEME
AND STAGE_ID = 'DDA'
AND ACCOUNTING_FLAG = 'Y';
IF V_COUNT > 0 THEN
SET V_ACCOUNTING_FLAG = 'Y';
ELSE
SET V_ACCOUNTING_FLAG = 'N';
END IF;
SELECT IFNULL(SUM(IFNULL(INT_COMP,0)),0) + IFNULL(SUM(IFNULL(EXCESS_INT,0)),0)
INTO V_NEW_INTEREST
FROM CR_REPAYSCH_DTL
WHERE LOAN_ID = V_LOAN_ID;
SET V_CHARGE_STR = '';
SET V_CHARGE_AMT = 0;
SET V_TAX_RATE1 = 0;
SET V_TAX_RATE2 = 0;
SET V_TDS_RATE = 0;
SET V_TAX_AMOUNT1 = 0;
SET V_TAX_AMOUNT2 = 0;
SET V_TDS_AMOUNT = 0;
IF (IFNULL(V_NEW_INTEREST,0) - IFNULL(V_OLD_INTEREST,0)) <> 0 AND O_ERROR_FLAG = 'S' AND V_DISBURSAL_STATUS = 'F' THEN
SET V_CHARGE_CODE = 41;
SET V_CHARGE_AMT = (IFNULL(V_NEW_INTEREST,0) - IFNULL(V_OLD_INTEREST,0));
SET V_CHARGE_STR = CONCAT(V_CHARGE_STR, CAST(V_CHARGE_CODE AS CHAR),';', CAST(V_CHARGE_AMT AS CHAR), '|');
SET V_TAX_RATE1 = 0;
SET V_TAX_RATE2 = 0;
SET V_TDS_RATE = 0;
SET V_TAX_AMOUNT1 = 0;
SET V_TAX_AMOUNT2 = 0;
SET V_TDS_AMOUNT = 0;
SET V_TXN_ADJUSTED_AMOUNT = 0;
END IF;
IF V_RESCH_CHARGES > 0 AND O_ERROR_FLAG = 'S' THEN
SELECT IFNULL(DEAL_CHARGE_METHOD, 'F'), IFNULL(DEAL_CHARGE_TDS_APPLICABLE, 'N'), IFNULL(DEAL_CHARGE_TDS_RATE, 0),
IFNULL(DEAL_CHARGE_TAX_APPLICABLE, 'N'), IFNULL(DEAL_CHARGE_TAX_INCLUSIVE, 'N'),
IFNULL(DEAL_CHARGE_TAX_RATE1,0), IFNULL(DEAL_CHARGE_TAX_RATE2,0)
INTO V_CHARGE_METHOD, V_TDS_APPLICABLE, V_TDS_RATE,
V_TAX_APPLICABLE, V_TAX_INCLUSIVE, V_TAX_RATE1, V_TAX_RATE2
FROM CR_TXNCHARGES_DTL
WHERE TXN_TYPE = 'LIM'
AND TXN_ID = V_LOAN_ID
AND DEAL_CHARGE_CODE = 33
AND REC_STATUS = 'A';
IF DONE = 1 THEN
SET DONE = 0;
SET V_CHARGE_METHOD = 'F';
SET V_TDS_APPLICABLE = 'N';
SET V_TDS_RATE = 0;
SET V_TAX_APPLICABLE = 'N';
SET V_TAX_INCLUSIVE = 'N';
SET V_TAX_RATE1 = 0;
SET V_TAX_RATE2 = 0;
SET V_TAX_AMOUNT1 = 0;
SET V_TAX_AMOUNT2 = 0;
SET V_TDS_AMOUNT = 0;
SET V_TXN_ADJUSTED_AMOUNT = 0;
END IF;
SET V_CHARGE_CODE = 33;
SET V_CHARGE_AMOUNT = V_RESCH_CHARGES;
SET V_TAX_AMOUNT1 = 0;
SET V_TAX_AMOUNT2 = 0;
SET V_TDS_AMOUNT = 0;
SET V_TXN_ADJUSTED_AMOUNT = 0;
SET V_BP_TYPE = 'CS';
SET V_BP_ID = V_LOAN_CUSTOMER_ID;
IF V_TAX_APPLICABLE = 'Y' THEN
SET V_TAX_AMOUNT1 = ((100 * V_CHARGE_AMOUNT) / (100 + V_TAX_RATE1 + V_TAX_RATE2)) * V_TAX_RATE1 / 100;
SET V_TAX_AMOUNT1 = Get_Rounded_value(V_TAX_AMOUNT1, 'U', 0);
SET V_TAX_AMOUNT2 = ((100 * V_CHARGE_AMOUNT) / (100 + V_TAX_RATE1 + V_TAX_RATE2)) * V_TAX_RATE2 / 100;
SET V_TAX_AMOUNT2 = Get_Rounded_value(V_TAX_AMOUNT2, 'U', 0);
SET V_CHARGE_AMOUNT = V_CHARGE_AMOUNT;
END IF;
IF V_TDS_APPLICABLE = 'Y' THEN
SET V_TDS_AMOUNT = V_CHARGE_AMOUNT * V_TDS_RATE / 100;
SET V_TDS_AMOUNT = Get_Rounded_value(V_TDS_AMOUNT, 'U', 0);
END IF;
INSERT INTO CR_TXNADVICE_DTL (DEAL_ID, LOAN_ID, TXN_TYPE, TXN_ID, BP_TYPE, BP_ID, ADVICE_DATE, ADVICE_TYPE,
CHARGE_CODE_ID, ORG_CHARGE_AMOUNT, TAX_RATE1, TAX_RATE2, TDS_RATE, ORG_TAX_AMOUNT1,
ORG_TAX_AMOUNT2, ORG_TDS_AMOUNT, ORG_ADVICE_AMOUNT, WAIVE_OFF_AMOUNT, CHARGE_AMOUNT,
TAX_AMOUNT1, TAX_AMOUNT2, TDS_AMOUNT, ADVICE_AMOUNT, TXN_ADJUSTED_AMOUNT,
AMOUNT_IN_PROCESS, REC_STATUS, MAKER_ID, MAKER_DATE, AUTHOR_ID, AUTHOR_DATE)
VALUES (V_DEAL_ID, V_LOAN_ID, 'DDA', I_RESCH_ID, 'CS', V_LOAN_CUSTOMER_ID, V_RESCH_EFF_DATE, 'R',
V_CHARGE_CODE, (V_CHARGE_AMT-V_TAX_AMOUNT1-V_TAX_AMOUNT2), V_TAX_RATE1, V_TAX_RATE2, V_TDS_RATE, V_TAX_AMOUNT1,
V_TAX_AMOUNT2, V_TDS_AMOUNT, V_CHARGE_AMT, 0, (V_CHARGE_AMT-V_TAX_AMOUNT1-V_TAX_AMOUNT2),
V_TAX_AMOUNT1, V_TAX_AMOUNT2, V_TDS_AMOUNT, V_CHARGE_AMT, V_TXN_ADJUSTED_AMOUNT,
0, 'A', I_USER_ID, I_CURR_DATE, I_USER_ID, I_CURR_DATE);
SET V_CHARGE_STR = CONCAT(V_CHARGE_STR, CAST(V_CHARGE_CODE AS CHAR),';', CAST((V_CHARGE_AMT-V_TAX_AMOUNT1-V_TAX_AMOUNT2) AS CHAR), '|');
END IF;
IF V_ACCOUNTING_FLAG = 'Y' THEN
CALL GenerateVoucher(I_COMPANY_ID, V_LOAN_BRANCH, 'CMS',
V_LOAN_SCHEME, I_DEPARTMENT, '',
'DDA', V_NPA_FLAG, 0,
'CS', V_LOAN_CUSTOMER_ID, V_LOAN_CUSTOMER_NAME,
I_CURR_DATE, I_CURR_DATE,
V_LOAN_ID, V_CHARGE_STR,
I_USER_ID, V_VOUCHER_STR, O_ERROR_FLAG, O_ERROR_MSG);
IF IFNULL(V_VOUCHER_STR, '') <> '' THEN
VOUCHER_STR_LOOP: LOOP
IF INSTR(V_VOUCHER_STR,'|') = 0 THEN
LEAVE VOUCHER_STR_LOOP;
END IF;
SET V_VOUCHER_NO = SUBSTRING_INDEX(V_VOUCHER_STR, '|', 1);
SET V_VOUCHER_STR = SUBSTR(V_VOUCHER_STR,INSTR(V_VOUCHER_STR,'|') + 1);
INSERT INTO CR_LOAN_VOUCHER_DTL(LOAN_ID, TXN_TYPE, TXN_ID, TXN_DATE, VALUE_DATE,
COMPANY_ID, BRANCH_ID, PRODUCT_ID, DEPARTMENT_ID,
STAGE_ID, NPA_STAGE, BP_TYPE, BP_ID, VOUCHER_NO)
VALUES(V_LOAN_ID, 'DDA', I_RESCH_ID, I_CURR_DATE, I_CURR_DATE,
I_COMPANY_ID, V_LOAN_BRANCH, V_LOAN_SCHEME, I_DEPARTMENT,
'DDA', V_NPA_FLAG, 'CS', V_LOAN_CUSTOMER_ID, V_VOUCHER_NO);
END LOOP;
END IF;
END IF;
END IF;
IF IFNULL(O_ERROR_FLAG,'S') = 'S' AND I_STATUS <> 'T' THEN
UPDATE CR_RESCH_DTL
SET REC_STATUS = I_STATUS,
REMARKS = I_REMARKS,
AUTHOR_ID = I_USER_ID,
AUTHOR_DATE = I_CURR_DATE
WHERE RESCH_ID = I_RESCH_ID;
END IF;
END;
END
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