TFS_ANTIGUO/PrendarioDavivienda/WCFPrendarioSeguros/WCFPrendarioSeguros.BL/BL/CalculosTablaCotizacionBLL.cs

117 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCFPrendarioSeguros.Entidades.Objects.Request;
using WCFPrendarioSeguros.Entidades.Objects.Response;
using Microsoft.VisualBasic;
namespace WCFPrendarioSeguros.BL
{
public class CalculosTablaCotizacionBLL
{
public static TablaCotizacionResponse CalcularTablaCotizacion(TablaCotizacionRequest req)
{
TablaCotizacionResponse resp = null;
PlanPago[] planPago = null;
double _saldoInicial = 0;
DateTime _fechaPago = new DateTime();
try
{
resp = new TablaCotizacionResponse();
planPago = new PlanPago[req.PlazoMeses];
_saldoInicial = req.MontoPrestamo;
_fechaPago = req.FechaPrimerPago;
for (int i = 0; i < planPago.Length; i++)
{
planPago[i] = CalcularItemPlanPago(new PlanPago() {
Periodo = i + 1,
SaldoInicial = _saldoInicial,
MontoPrestamo = req.MontoPrestamo,
PorcentajeInteresMensual = ((req.TasaInteres / 12) / 100),
PeriodoGracia = req.PeriodoGracia,
PlazoMeses = req.PlazoMeses,
DiasMes = 30,
FechaPago = _fechaPago
});
_saldoInicial = planPago[i].SaldoFinal;
_fechaPago.AddDays(30);
planPago[i].Capital = Math.Round(planPago[i].Capital,2);
planPago[i].InteresAcumulado = Math.Round(planPago[i].InteresAcumulado,2);
planPago[i].InteresMensual = Math.Round(planPago[i].InteresMensual,2);
planPago[i].InteresPagado = Math.Round(planPago[i].InteresPagado,2);
planPago[i].Mensualidad = Math.Round(planPago[i].Mensualidad, 2);
planPago[i].MontoPrestamo = Math.Round(planPago[i].MontoPrestamo, 2);
planPago[i].PorcentajeInteresMensual = Math.Round(planPago[i].PorcentajeInteresMensual * 100, 2);
planPago[i].SaldoFinal = Math.Round(planPago[i].SaldoFinal, 2);
planPago[i].SaldoInicial = Math.Round(planPago[i].SaldoInicial, 2);
planPago[i].SaldoPagado = Math.Round(planPago[i].SaldoPagado, 2);
if (planPago[i].SaldoFinal < 0.1)
planPago[i].SaldoFinal = 0.00;
}
resp.plandePagos = planPago;
resp.error_code = "00";
resp.error_message = "EXITOSO";
}
catch (Exception ex)
{
resp.error_code = "99";
resp.error_message = ex.Message;
}
return resp;
}
private static PlanPago CalcularItemPlanPago(PlanPago req)
{
PlanPago resp = null;
try
{
resp= new PlanPago();
resp.Periodo = req.Periodo;
resp.SaldoInicial = req.SaldoInicial;
resp.PorcentajeInteresMensual = req.PorcentajeInteresMensual;
resp.PlazoMeses = req.PlazoMeses;
resp.InteresMensual = (req.SaldoInicial * req.PorcentajeInteresMensual);
resp.Mensualidad = (req.Periodo < (req.PeriodoGracia + 1)) ? resp.InteresMensual : Financial.Pmt(req.PorcentajeInteresMensual, req.PlazoMeses, (req.MontoPrestamo * -1));
resp.Capital = (req.Periodo < (req.PeriodoGracia + 1)) ? 0d : (resp.Mensualidad - resp.InteresMensual);
resp.SaldoFinal = (req.Periodo < (req.PeriodoGracia + 1)) ? req.SaldoInicial : (req.SaldoInicial - resp.Capital);
resp.MontoPrestamo = req.MontoPrestamo;
resp.DiasMes = req.DiasMes;
resp.FechaPago = req.FechaPago;
resp.SaldoFinal = Math.Round(resp.SaldoFinal, 2);
}
catch (Exception)
{
throw;
}
return resp;
}
}
}