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 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 a, KeyValuePair 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 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 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 } }