Quantcast
Channel: Questions in topic: "cte"
Viewing all articles
Browse latest Browse all 75

Loan EMI Mortgage Calculation

$
0
0
dear Geeks good day to you !!! I am stuck in a very huge problem while creating a calculator of Loan in which Mortgage will be added on daily basis. there are inputs as below CusId,LoanId,LoanDate,InstallmentFrequency,InitialRate,LoanEMI,LoanAmout,TermInMonths on this basis you will get EMI as input and now 1st thing is to make schedule of Emi till outstanding of Loan becomes less than 0.00 and one more thing if there is any ratechange or prepayment you will have to arrange that in order of Transaction Date of, Ratechange and Prepayment information is in another table. now you have two tables in order of Transaction dates now you will have to make calculation till outstanding is 0 or less i have tried it but i am unable to do it.. Please help me as i am new to organization as well as sql also.. declare @CusId int,@LoaId tinyint, @LoanDate datetime, @InstFreq tinyint=1, @InitialRate decimal(9,6)=12.00, @LoanEMI decimal(18,2), @LoanAmout decimal(18,2)=100000.00, @TermInMonths decimal(7,2)=12 --select @LoanEMI=dbo.GetLoanEMI(@InitialRate/12.00,@LoanAmout,@TermInMonths) select @LoanDate=dbo.getdateist(0)-400; /*ROW 1*/ declare @B1 tinyint,@C1 datetime, @D1 smallint,@E1 decimal(18,2),@F1 Decimal(9,6),@G1 Decimal(9,6), @H1 Decimal(18,12),@I1 int,@J1 int,@K1 Decimal(18,6),@L1 decimal(18,2),@M1 decimal(18,2), /*ROW 2*/ @B2 tinyint,@C2 datetime, @D2 smallint,@E2 decimal(18,2),@F2 Decimal(9,6),@G2 Decimal(9,6), @H2 Decimal(18,12),@I2 int,@J2 int,@K2 Decimal(18,6),@L2 decimal(18,2),@M2 decimal(18,2) /*Assigning Values to Row1 Elements*/ set @B1=1; set @C1=@LoanDate; set @D1=0; set @E1=-@LoanAmout; set @F1=@InitialRate/100.00; set @G1=case @InstFreq when 1 then @F1/12 when 2 then @F1/4 when 3 then @F1/2 when 4 then @F1 end; select @H1=0.00031; --select @H1=dbo.GetRateFromFV(100.00,100+@InitialRate,365) ; set @H1=@H1/100.00; set @I1=0; set @J1=0; set @K1=0; set @L1=0.00; set @M1=@LoanAmout; /*Assigning Values to Row2 Elements*/ set @B2=1; /*creating table */ create table #tempp(Auniid int identity(1,1),TranTypId tinyint,TranDate datetime,TranNo smallint, TranAmt decimal(18,2),AnnRate Decimal(9,6),MonRate Decimal(9,6),DayRate Decimal(18,12), MonBetTran int,DaysBetTran int,AccordIntOnDt Decimal(18,6),PrincipalP decimal(18,2),Outstanding decimal(18,2),LoaId tinyint,CusId int) /*1st row*/ insert into #tempp values( @B1/*EMI*/,@C1,@d1,@E1,@F1,@G1,@H1,@I1,@J1,@K1,@L1,@M1,@LoaId,@CusId) select * from #tempp union all select 0,TranTypId=t.TranTypeId,TranDate=t.TranDt,TranNo=0,TranAmt=case t.TranTypeId when 3 then t.TranAmt else 0.00 end, AnnRate=case t.TranTypeId when 2 then t.TranAmt else 0.00 end,MonRate=null,DayRate=null, MonBetTran=null,DaysBetTran=null,AccordIntOnDt=null,PrincipalP=null,Outstanding=null,LoaId,CusId from ( select cusid,LoaId,TranTypeID,Trandt,TranAmt from GPLoanIntrPayRec where CusId=10000180 and LoaId=0 and trantypeid=2 union all select cusid,LoaId,TranTypeID,Trandt,TranAmt from GPLoanIntrPayRec where CusId=10000180 and LoaId=0 and trantypeid=3 ) t order by TranDate declare @i int=2,@cnt int; set @M2=@M1; while(@M2>0.00) begin if(@i=2) begin set @C2=case @InstFreq when 1 then DATEADD(MONTH,1,@C1) when 2 then DATEADD(MONTH,3,@C1) when 3 then DATEADD(MONTH,6,@C1) when 4 then DATEADD(MONTH,12,@C1) end; end else begin set @C2=case @InstFreq when 1 then DATEADD(MONTH,1,@C2) when 2 then DATEADD(MONTH,3,@C2) when 3 then DATEADD(MONTH,6,@C2) when 4 then DATEADD(MONTH,12,@C2) end; end set @D2=case @B2 when 1 then @i-1 else null end; set @E2=case @B2 when 1 then @LoanEMI else 0.00 end; set @F2=case @B2 when 1 then @F1 else @F2 end; set @G2=@F2/12.00; select @H1=dbo.GetRateFromFV(100.00,100+@InitialRate,365); set @H1=@H1/100.00; select @H1=MonRate,@H2=Dayrate,@I2=DATEDIFF(MONTH,TranDate,@C2),@J2=DATEDIFF(DAY,TranDate,@C2),@M1=Outstanding from #tempp where Auniid=@i-1; if(@I2=1) begin set @K2=@I2*@M1*@H1 end else begin set @K2=@J2*@M1*@H1 end set @L2=@E2-@K2; set @M2=@M1-@L2; insert into #tempp values(@B2/*EMI*/,@C2,@D2,@E2,@F2,@G2,@H2,@I2,@J2,@K2,@L2,@M2,@LoaId,@CusId) set @i=@i+1; end select * from #tempp

Viewing all articles
Browse latest Browse all 75

Trending Articles