455 lines
16 KiB
C#
455 lines
16 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WCFPrendarioSeguros.Entidades.Objects.Request;
|
|
using Microsoft.VisualBasic;
|
|
|
|
namespace WCFPrendarioSeguros.BL
|
|
{
|
|
public class CotizadorVehiculoBLL
|
|
{
|
|
private PolizasAdicionalesRequest request;
|
|
|
|
private CotizadorVehiculoRequest _cotizador_request { get; set; }
|
|
private SeguroVehiculoRequest _cotizador_seguros_request { get; set; }
|
|
private CotizadorVehiculoRequest.GastosAdministrativosRequest _cotizador_gastos_request { get; set; }
|
|
private PolizasAdicionalesRequest _cotizador_polizas_request { get; set; }
|
|
|
|
public CotizadorVehiculoBLL(CotizadorVehiculoRequest request)
|
|
{
|
|
this._cotizador_request = request;
|
|
this._cotizador_gastos_request = request.gastosAdmRequest;
|
|
}
|
|
|
|
public CotizadorVehiculoBLL(SeguroVehiculoRequest request)
|
|
{
|
|
this._cotizador_seguros_request = request;
|
|
}
|
|
|
|
public CotizadorVehiculoBLL(PolizasAdicionalesRequest request)
|
|
{
|
|
this._cotizador_polizas_request = request;
|
|
}
|
|
|
|
#region Seguros
|
|
private double C72
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
if (this._cotizador_seguros_request != null)
|
|
{
|
|
//Si moneda igual dolares
|
|
if (_cotizador_seguros_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado = this._cotizador_seguros_request.G71;
|
|
}
|
|
//Moneda es colones
|
|
else
|
|
{
|
|
resultado = this._cotizador_seguros_request.G72;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_seguros_request");
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double C76
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
if (_cotizador_seguros_request != null)
|
|
{
|
|
if (this._cotizador_seguros_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado = _cotizador_seguros_request.valorVehiculo * _cotizador_seguros_request.tipoCambio * (_cotizador_seguros_request.C71 / 100) + this.C72;
|
|
}
|
|
else
|
|
{
|
|
resultado = (_cotizador_seguros_request.valorVehiculo * (_cotizador_seguros_request.C71 / 100)) + this.C72;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_seguros_request");
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double C77
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
resultado = Financial.Pmt(((_cotizador_seguros_request.C70 / 100) / 12), 12, -this.C76);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
public double MontoSeguroVehiculo
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_seguros_request != null)
|
|
{
|
|
if (_cotizador_seguros_request.tipoVehiculo != CotizadorVehiculoRequest.TipoVehiculo.GRUPO_Q)
|
|
{
|
|
if (_cotizador_seguros_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado = this.C77 / _cotizador_seguros_request.tipoCambio;
|
|
}
|
|
else if (_cotizador_seguros_request.moneda == CotizadorVehiculoRequest.Moneda.COLONES)
|
|
{
|
|
resultado = this.C77;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_seguros_request");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Polizas
|
|
private double M50
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
double seguroVehiculo = this.MontoSeguroVehiculo;
|
|
try
|
|
{
|
|
if (this._cotizador_polizas_request != null)
|
|
{
|
|
if (_cotizador_polizas_request.tipoVehiculo == CotizadorVehiculoRequest.TipoVehiculo.GRUPO_Q)
|
|
{
|
|
resultado = (_cotizador_polizas_request.cuotaSinSegurosSegundoPeriodo + seguroVehiculo) / 1000;
|
|
}
|
|
else
|
|
{
|
|
resultado = (_cotizador_polizas_request.cuotaSinSegurosPrimerPeriodo + seguroVehiculo) / 1000;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_polizas_request");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double N52
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_polizas_request != null)
|
|
{
|
|
resultado = (Math.Round(this.M50, 2) * _cotizador_polizas_request.M48 * 1.13 * 1.13) / (1 - (_cotizador_polizas_request.M48 / 1000) * 1.13 * 1.13);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_polizas_request");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double N53
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_polizas_request != null)
|
|
{
|
|
resultado = ((Math.Round(this.M50, 2) * _cotizador_polizas_request.M47) * (1.13) * (1.09)) / (1 - (_cotizador_polizas_request.M47 / 1000) * (1.09) * (1.13));
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_polizas_request");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
public double MontoPolizaDesempleo
|
|
{
|
|
get
|
|
{
|
|
try
|
|
{
|
|
double resultado = 0;
|
|
if (this._cotizador_polizas_request != null)
|
|
{
|
|
if (_cotizador_polizas_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado = N53;
|
|
}
|
|
else
|
|
{
|
|
resultado = N52;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._request");
|
|
}
|
|
return resultado;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
public double MontoPolizaVida
|
|
{
|
|
get
|
|
{
|
|
try
|
|
{
|
|
double resultado = 0;
|
|
if (this._cotizador_polizas_request != null)
|
|
{
|
|
resultado = _cotizador_polizas_request.montoCredito * (0.044 / 100);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CalculoSegurosBLL._cotizador_polizas_request");
|
|
}
|
|
return resultado;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Gastos Administrativos
|
|
private double montoTimbreRegistroNacional
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_gastos_request != null)
|
|
{
|
|
resultado = _cotizador_request.valorVehiculo * (_cotizador_gastos_request.porcentajeTimbreRegNacional / 100);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CotizadorVehiculosBLL._cotizador_gastos_request");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double montoTimbreAgrario
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_gastos_request != null)
|
|
{
|
|
resultado = _cotizador_request.valorVehiculo * (_cotizador_gastos_request.porcentajeTimbreAgrario / 100);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CotizadorVehiculosBLL._cotizador_gastos_request");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double montoImpuestoTraspaso
|
|
{
|
|
get
|
|
{
|
|
double resultado = 0;
|
|
try
|
|
{
|
|
if (this._cotizador_gastos_request != null)
|
|
{
|
|
resultado = _cotizador_request.valorVehiculo * (_cotizador_gastos_request.porcentajeImpuestoTraspaso / 100);
|
|
}
|
|
else
|
|
{
|
|
throw new ArgumentNullException("CotizadorVehiculosBLL._cotizador_gastos_request");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
return resultado;
|
|
}
|
|
}
|
|
private double montoHonorarios
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
private double ObtenerMontoXPorcentaje(KeyValuePair<double, double> mapa, double limite_inferior, double valor_en_colones)
|
|
{
|
|
double resultado = 0;
|
|
if (valor_en_colones < mapa.Key && limite_inferior == 0)
|
|
{
|
|
resultado = valor_en_colones * (mapa.Value / 100);
|
|
}
|
|
else if (valor_en_colones > limite_inferior && valor_en_colones <= mapa.Key)
|
|
{
|
|
resultado = (valor_en_colones - limite_inferior) * (mapa.Value / 100);
|
|
}
|
|
else if (valor_en_colones > mapa.Key)
|
|
{
|
|
resultado = (mapa.Key - limite_inferior) * (mapa.Value / 100);
|
|
}
|
|
else if (valor_en_colones > limite_inferior)
|
|
{
|
|
resultado = (valor_en_colones - limite_inferior) * (mapa.Value / 100);
|
|
}
|
|
if (_cotizador_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado = resultado / _cotizador_request.tipoCambio;
|
|
}
|
|
return resultado;
|
|
}
|
|
|
|
private int CompareByKey(KeyValuePair<double, double> a, KeyValuePair<double, double> b)
|
|
{
|
|
return a.Key.CompareTo(b.Key);
|
|
}
|
|
|
|
public double CalcularMontoTraspaso()
|
|
{
|
|
double resultado = 0;
|
|
double limite_inferior = 0;
|
|
double valor_vehiculo_colones =
|
|
_cotizador_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES ?
|
|
_cotizador_request.valorVehiculo * _cotizador_request.tipoCambio :
|
|
_cotizador_request.valorVehiculo;
|
|
|
|
|
|
_cotizador_gastos_request.porcentajesTraspaso.Sort(CompareByKey);
|
|
|
|
|
|
|
|
foreach (KeyValuePair<double, double> par in _cotizador_gastos_request.porcentajesTraspaso)
|
|
{
|
|
resultado += ObtenerMontoXPorcentaje(par, limite_inferior, valor_vehiculo_colones);
|
|
limite_inferior = par.Key;
|
|
}
|
|
resultado += montoTimbreRegistroNacional + montoTimbreAgrario + montoImpuestoTraspaso;
|
|
if (_cotizador_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado += (_cotizador_gastos_request.montoTimbreParquesNacionales
|
|
+ _cotizador_gastos_request.montoTimbreFiscal
|
|
+ _cotizador_gastos_request.montoTimbreCruzRoja
|
|
+ _cotizador_gastos_request.montoTimbreColegioAbogados
|
|
+ _cotizador_gastos_request.montoTimbreArchivoNacional) / _cotizador_request.tipoCambio;
|
|
}
|
|
else
|
|
{
|
|
resultado += _cotizador_gastos_request.montoTimbreParquesNacionales
|
|
+ _cotizador_gastos_request.montoTimbreFiscal
|
|
+ _cotizador_gastos_request.montoTimbreCruzRoja
|
|
+ _cotizador_gastos_request.montoTimbreColegioAbogados
|
|
+ _cotizador_gastos_request.montoTimbreArchivoNacional;
|
|
}
|
|
return resultado;
|
|
}
|
|
|
|
public double CalcularMontoConstitucionPrenda()
|
|
{
|
|
double resultado = 0;
|
|
double limite_inferior = 0;
|
|
double valor_en_colones =
|
|
_cotizador_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES ?
|
|
(_cotizador_request.valorVehiculo - _cotizador_request.montoPrima) * _cotizador_request.tipoCambio :
|
|
_cotizador_request.valorVehiculo - _cotizador_request.montoPrima;
|
|
|
|
_cotizador_gastos_request.porcentajesConstitucionPrenda.Sort(CompareByKey);
|
|
|
|
foreach (KeyValuePair<double, double> par in _cotizador_gastos_request.porcentajesConstitucionPrenda)
|
|
{
|
|
resultado += ObtenerMontoXPorcentaje(par, limite_inferior, valor_en_colones);
|
|
limite_inferior = par.Key;
|
|
}
|
|
if (_cotizador_request.moneda == CotizadorVehiculoRequest.Moneda.DOLARES)
|
|
{
|
|
resultado +=
|
|
((_cotizador_gastos_request.montoTimbreArchivoNacional +
|
|
_cotizador_gastos_request.montoTimbreColegioAbogados +
|
|
(valor_en_colones / 1000)) / _cotizador_request.tipoCambio);
|
|
}
|
|
else
|
|
{
|
|
resultado +=
|
|
_cotizador_gastos_request.montoTimbreArchivoNacional +
|
|
_cotizador_gastos_request.montoTimbreColegioAbogados +
|
|
(valor_en_colones / 1000);
|
|
}
|
|
return resultado;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|