195 lines
12 KiB
C#
195 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WCFPrendarioSeguros.Entidades.Objects;
|
|
using WCFPrendarioSeguros.Entidades.Objects.Request;
|
|
using WCFPrendarioSeguros.Entidades.Objects.Response;
|
|
using Microsoft.VisualBasic;
|
|
using Ultimus.Utilitarios;
|
|
|
|
namespace WCFPrendarioSeguros.BL
|
|
{
|
|
public class CalculosSegurosCotizacionBLL
|
|
{
|
|
private static UltimusLogs log = new UltimusLogs("WCFPrendarioSeguros");
|
|
|
|
public static SegurosAutoResponse CalcularSeguroAuto(SeguroAutoRequest req)
|
|
{
|
|
SegurosAutoResponse resp = new SegurosAutoResponse();
|
|
switch (req.aseguradora)
|
|
{
|
|
case Enumeradores.Aseguradora.INS:
|
|
resp = CalcularSeguroAutoINS(req);
|
|
break;
|
|
case Enumeradores.Aseguradora.MAPFRE:
|
|
resp = CalcularSeguroAutoMAPFRE(req);
|
|
break;
|
|
}
|
|
return resp;
|
|
}
|
|
|
|
private static SegurosAutoResponse CalcularSeguroAutoINS(SeguroAutoRequest req)
|
|
{
|
|
SegurosAutoResponse resp = new SegurosAutoResponse();
|
|
double dblValorActualPrestamo = 0;
|
|
double dblMontoSeguroVehiculo = 0;
|
|
double dblMontoPrimaMensual = 0;
|
|
foreach (SubRubroSeguroINS item in req.INSubRubroSeguroINS)
|
|
{
|
|
switch (item.tipoVehiculo)
|
|
{
|
|
case Enumeradores.TipoVehiculo.VEHICULO_NUEVO:
|
|
switch (item.esColaborador)
|
|
{
|
|
case true:
|
|
case false:
|
|
switch (item.moneda)
|
|
{
|
|
case Enumeradores.Moneda.DOLARES:
|
|
dblValorActualPrestamo = ((item.valorVehiculo * item.tipoCambio) * (item.porcentajeValorActual / 100)) + item.montoValorActual;
|
|
dblMontoPrimaMensual = Financial.Pmt((item.porcentajeInteresCredito / 100) / 12, 12, -dblValorActualPrestamo);
|
|
dblMontoPrimaMensual = dblMontoPrimaMensual / item.tipoCambio;
|
|
break;
|
|
case Enumeradores.Moneda.COLONES:
|
|
dblValorActualPrestamo = ((item.valorVehiculo) * (item.porcentajeValorActual / 100)) + item.montoValorActual;
|
|
dblMontoPrimaMensual = Financial.Pmt((item.porcentajeInteresCredito / 100) / 12, 12, -dblValorActualPrestamo);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case Enumeradores.TipoVehiculo.VEHICULO_USADO:
|
|
switch (item.esColaborador)
|
|
{
|
|
case true:
|
|
case false:
|
|
dblMontoPrimaMensual = item.valorVehiculo * (item.porcentajeSeguro / 100);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
item.outPrimaTotalMensual = dblMontoPrimaMensual;
|
|
dblMontoSeguroVehiculo += dblMontoPrimaMensual;
|
|
}
|
|
resp.OUTSubRubroSeguroINS = req.INSubRubroSeguroINS;
|
|
resp.MontoSeguroAuto = dblMontoSeguroVehiculo;
|
|
resp.error_code = "00";
|
|
resp.error_message = "EXITOSO";
|
|
return resp;
|
|
}
|
|
|
|
private static SegurosAutoResponse CalcularSeguroAutoMAPFRE(SeguroAutoRequest req)
|
|
{
|
|
SegurosAutoResponse resp = new SegurosAutoResponse();
|
|
double dblTOTALMontoPrimaNetaAnual = 0;
|
|
double dblTOTALMontoDescuentoAnual = 0;
|
|
double dblTOTALMontoIVAAnual = 0;
|
|
double dblTOTALMontoRecargoPorPagoFraccionado = 0;
|
|
double dblTOTALMontoPrimaTotalAnual = 0;
|
|
double dblTOTALMontoPrimaTotalMensual = 0;
|
|
foreach (SubRubroSeguroMAPFRE item in req.INSubRubroSeguroMAPFRE)
|
|
{
|
|
double dblMontoPrimaNetaAnual = 0;
|
|
double dblMontoDescuentoAnual = 0;
|
|
double dblMontoIVAAnual = 0;
|
|
double dblMontoRecargoPorPagoFraccionado = 0;
|
|
double dblMontoPrimaTotalAnual = 0;
|
|
double dblMontoPrimaTotalMensual = 0;
|
|
switch (item.inModoCalculo)
|
|
{
|
|
case Enumeradores.ModoCalculo.FIJO:
|
|
dblMontoPrimaNetaAnual = item.inMontoValorActual;
|
|
break;
|
|
case Enumeradores.ModoCalculo.CALCULADO:
|
|
double PorcMultiplicador = (item.inPorcentajeSeguro / 100) - ((item.inPorcentajeSeguro / 100) * (item.inPorcentajeValorActual / 100));
|
|
dblMontoPrimaNetaAnual = item.inValorVehiculo * PorcMultiplicador;
|
|
break;
|
|
}
|
|
dblMontoDescuentoAnual = dblMontoPrimaNetaAnual - (dblMontoPrimaNetaAnual * (item.inPorcentajeDescuento / 100));
|
|
dblMontoIVAAnual = (dblMontoPrimaNetaAnual - dblMontoDescuentoAnual) * (item.inPorcentajeIVA / 100);
|
|
dblMontoPrimaTotalAnual = (dblMontoPrimaNetaAnual - dblMontoDescuentoAnual) + dblMontoIVAAnual;
|
|
dblMontoRecargoPorPagoFraccionado = dblMontoPrimaTotalAnual * (item.inPorcRecFraccionado / 100);
|
|
dblMontoPrimaTotalMensual = (dblMontoPrimaTotalAnual + dblMontoRecargoPorPagoFraccionado) / 12;
|
|
item.outPrimaNetaAnual = dblMontoPrimaNetaAnual;
|
|
item.outDescuentoAnual = dblMontoDescuentoAnual;
|
|
item.outIVAAnual = dblMontoIVAAnual;
|
|
item.outPrimaTotalAnual = dblMontoPrimaTotalAnual;
|
|
item.outPrimaTotalMensual = dblMontoPrimaTotalMensual;
|
|
item.outRecargoPagoFraccionado = dblMontoRecargoPorPagoFraccionado;
|
|
dblTOTALMontoPrimaNetaAnual += dblMontoPrimaNetaAnual;
|
|
dblTOTALMontoDescuentoAnual += dblMontoDescuentoAnual;
|
|
dblTOTALMontoIVAAnual += dblMontoIVAAnual;
|
|
dblTOTALMontoPrimaTotalAnual += dblMontoPrimaTotalAnual;
|
|
dblTOTALMontoPrimaTotalMensual += dblMontoPrimaTotalMensual;
|
|
dblTOTALMontoRecargoPorPagoFraccionado += dblMontoRecargoPorPagoFraccionado;
|
|
}
|
|
resp.OUTSubRubroSeguroMAPFRE = req.INSubRubroSeguroMAPFRE;
|
|
resp.MontoPrimaNetaAnual = dblTOTALMontoPrimaNetaAnual;
|
|
resp.MontoDescuentoAnual = dblTOTALMontoDescuentoAnual;
|
|
resp.MontoIVAAnual = dblTOTALMontoIVAAnual;
|
|
resp.MontoRecargoPagoFraccionadoAnual = dblTOTALMontoRecargoPorPagoFraccionado;
|
|
resp.MontoSeguroAutoAnual = dblTOTALMontoPrimaTotalAnual;
|
|
resp.MontoSeguroAuto = dblTOTALMontoPrimaTotalMensual;
|
|
resp.error_code = "00";
|
|
resp.error_message = "EXITOSO";
|
|
return resp;
|
|
}
|
|
|
|
public static SegurosVidaResponse CalcularSeguroVida(SeguroVidaRequest req)
|
|
{
|
|
SegurosVidaResponse resp = resp = new SegurosVidaResponse();
|
|
double dblMontoSeguroVida = 0;
|
|
if (req.aseguradora == Enumeradores.Aseguradora.INS)
|
|
{
|
|
//dblMontoSeguroVida = req.montoCredito * (req.porcentajeSeguro / 100);
|
|
dblMontoSeguroVida = ((req.montoCredito / 1000) * req.porcentajeSeguro);
|
|
|
|
|
|
|
|
|
|
log.Trace(string.Format("CalcularSeguroVida;INPUT:aseguradora={0},montoCredito={1},porcentajeSeguro={2};CALCULO:dblMontoSeguroVida={3}", req.aseguradora.ToString(), req.montoCredito, req.porcentajeSeguro, dblMontoSeguroVida));
|
|
}
|
|
else if (req.aseguradora == Enumeradores.Aseguradora.DS)
|
|
{
|
|
double tmp = ((req.montoCredito / 1000) * req.porcentajeSeguro);
|
|
double tmp2 = ((req.montoCredito / 1000) * req.porcentajeSeguro2);
|
|
double tmp3 = ((req.UG / 1000) * req.porcentajeSeguro3);
|
|
double anual = tmp + tmp2 + tmp3;
|
|
double mensual = anual / 12;
|
|
dblMontoSeguroVida = Math.Round(mensual, 2);
|
|
log.Trace(string.Format("CalcularSeguroVida;INPUT:aseguradora={0},montoCredito={1},porcentajeSeguro={2},porcentajeSeguro2={3},porcentajeSeguro3={4},UG={5};CALCULO:tmp={6},tmp2={7},tmp3={8},anual={9},mensual={10},dblMontoSeguroVida={11}", req.aseguradora.ToString(), req.montoCredito, req.porcentajeSeguro, req.porcentajeSeguro2, req.porcentajeSeguro3, req.UG, tmp, tmp2, tmp3, anual, mensual, dblMontoSeguroVida));
|
|
}
|
|
resp.MontoSeguroVida = dblMontoSeguroVida;
|
|
resp.error_code = "00";
|
|
resp.error_message = "EXITOSO";
|
|
return resp;
|
|
}
|
|
|
|
public static SegurosDesempleoResponse CalcularSeguroDesempleo(SeguroDesempleoRequest req)
|
|
{
|
|
SegurosDesempleoResponse resp = resp = new SegurosDesempleoResponse();
|
|
double dblMontoSeguroDesempleo = 0;
|
|
var CuotasinDesempleo = req.montoCuotaSinSeguro + req.montoSeguroVehiculo + req.montoSeguroVida;
|
|
if (req.aseguradora == Enumeradores.Aseguradora.INS)
|
|
{
|
|
//dblMontoSeguroDesempleo = ((((req.montoCuotaSinSeguro + req.montoSeguroVehiculo) / 1000) * req.porcentajeSeguro) * (req.porcentajeSeguroDesempleoA) * (req.porcentajeSeguroDesempleoB)) / (1 - (req.porcentajeSeguro / 1000) * (req.porcentajeSeguroDesempleoB) * (req.porcentajeSeguroDesempleoA));
|
|
dblMontoSeguroDesempleo = (((((((((CuotasinDesempleo / 1000) * req.porcentajeSeguro)) + (((CuotasinDesempleo / 1000) * req.porcentajeSeguro) * req.porcentajeSeguroDesempleoB))) + CuotasinDesempleo) / 1000) * req.porcentajeSeguro) * req.porcentajeSeguroDesempleoA) + (((((((((CuotasinDesempleo / 1000) * req.porcentajeSeguro)) + (((CuotasinDesempleo / 1000) * req.porcentajeSeguro) * req.porcentajeSeguroDesempleoB))) + CuotasinDesempleo) / 1000) * req.porcentajeSeguro));
|
|
log.Trace(string.Format("CalcularSeguroDesempleo;INPUT:aseguradora={0},montoCuotaSinSeguro={1},montoSeguroVehiculo={2},montoSeguroVida={3},porcentajeSeguro={4},porcentajeSeguroDesempleoA={5},porcentajeSeguroDesempleoB={6};CALCULO:dblMontoSeguroDesempleo={7}", req.aseguradora.ToString(), req.montoCuotaSinSeguro, req.montoSeguroVehiculo, req.montoSeguroVida, req.porcentajeSeguro, req.porcentajeSeguroDesempleoA, req.porcentajeSeguroDesempleoB, dblMontoSeguroDesempleo));
|
|
}
|
|
else if (req.aseguradora == Enumeradores.Aseguradora.DS)
|
|
{
|
|
double tmp = Math.Round(CuotasinDesempleo / (1 - (req.porcentajeSeguro / 100)), 2);
|
|
double mensual = Math.Round(tmp * (req.porcentajeSeguro / 100), 2);
|
|
double anual = Math.Round(mensual * 12, 2);
|
|
dblMontoSeguroDesempleo = mensual;
|
|
log.Trace(string.Format("CalcularSeguroDesempleo;INPUT:aseguradora={0},montoCuotaSinSeguro={1},montoSeguroVehiculo={2},montoSeguroVida={3},porcentajeSeguro={4};CALCULO:tmp={5},mensual={6},anual={7},dblMontoSeguroDesempleo={8}", req.aseguradora.ToString(), req.montoCuotaSinSeguro, req.montoSeguroVehiculo, req.montoSeguroVida, req.porcentajeSeguro, tmp, mensual, anual, dblMontoSeguroDesempleo));
|
|
}
|
|
resp.MontoSeguroDesempleo = dblMontoSeguroDesempleo;
|
|
resp.error_code = "00";
|
|
resp.error_message = "EXITOSO";
|
|
return resp;
|
|
}
|
|
}
|
|
}
|