TFS_ANTIGUO/PrendarioDavivienda/WCFPrendarioSeguros/WCFPrendarioSeguros.BL/BL/CalculosSegurosCotizacionBLL.cs

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;
}
}
}