TFS_ANTIGUO/PrendarioDavivienda/WCFPrendarioSeguros/WCFPrendarioSeguros.BL/BL/CotizadorVehiculoBLL.cs

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