117 lines
4.3 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|