/// <summary> /// Método privado para obtener los datos del pedido en la entidad de tipo DTO. /// </summary> /// <returns>Retorna la entidad de tipo DatosPedidoDTO.</returns> private DatosPedidoDTO ObtenerDatosPedidoDTO() { var datosPedidoDTO = new DatosPedidoDTO(); datosPedidoDTO.dDistancia = 1200; datosPedidoDTO.dtFechaHoraPedido = new DateTime(2020, 2, 22); return(datosPedidoDTO); }
/// <summary> /// Método para obtener el costo de envío del transporte Aéreo. /// </summary> /// <param name="datosPedidoDTO">Datos del pedido de tipo DTO.</param> /// <returns>Retorna el costo del envío.</returns> public decimal CalcularCostoEnvio(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); decimal dCosto = 0; var dEscala = Math.Truncate(datosPedidoDTO.dDistancia / 1000M); var dCargoExtra = dEscala * 200; var dTarifa = datosPedidoDTO.dDistancia * 10M; dCosto = dTarifa + dCargoExtra; return(dCosto); }
/// <summary> /// Método privado para obtener la lista de los pedidos según la fila en donde se tenga.l /// </summary> /// <param name="iRow"></param> /// <param name="cDatosArchivo"></param> /// <returns></returns> private DatosPedidoDTO ObtenerPedido(int iRow, string[,] cDatosArchivo) { var datosPedido = new DatosPedidoDTO(); datosPedido.dDistancia = Convert.ToDecimal(cDatosArchivo[iRow, 0]); datosPedido.cPaisDestino = cDatosArchivo[iRow, 1].ToString(); datosPedido.cMedioTransporte = cDatosArchivo[iRow, 2].ToString(); datosPedido.dtFechaHoraPedido = Convert.ToDateTime(cDatosArchivo[iRow, 3]); datosPedido.cPaisOrigen = cDatosArchivo[iRow, 4].ToString(); datosPedido.cCuidadOrigen = cDatosArchivo[iRow, 5].ToString(); datosPedido.cPaisDestino = cDatosArchivo[iRow, 6].ToString(); datosPedido.cCuidadDestino = cDatosArchivo[iRow, 7].ToString(); return(datosPedido); }
/// <summary> /// Método para obtener el tiempo de traslado con base al medio de transporte a instanciar. /// </summary> /// <param name="datosPedidoDTO">Pedidos DTO.</param> /// <returns>Retorna el tiempo de traslado del medio de transporte.</returns> public decimal ObtenerTiempoTraslado(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); var dTiempoTraslado = 0M; var dEscala = Math.Truncate(datosPedidoDTO.dDistancia / 1000M); decimal dTiempoExtra = dEscala * 6M; decimal dTraslado = datosPedidoDTO.dDistancia / 600M; dTiempoTraslado = dTiempoExtra + dTraslado; return(dTiempoTraslado); }
/// <summary> /// Método para obtener el tiempo de traslado con base al medio de transporte a instanciar. /// </summary> /// <param name="datosPedidoDTO">Pedidos DTO.</param> /// <returns>Retorna el tiempo de traslado del medio de transporte.</returns> public decimal ObtenerTiempoTraslado(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); decimal dTiempoTraslado = 0; var eEstacionAnio = srvObtenedorEstacionAnio.ObtenerEstacionAnio(datosPedidoDTO.dtFechaHoraPedido); var dDescansoDiario = srvObtenedorDescansoDiario.ObtenerDescansoDiario(eEstacionAnio); var dTiempoExtra = (6 * dDescansoDiario) / 24M; dTiempoTraslado = 6 + dTiempoExtra; return truncadorDecimales.TruncarNumero(dTiempoTraslado); }
public decimal CalcularCostoServicio(DatosPedidoDTO datosPedidoDTO) { var dCostoServicio = 0M; var eMedioTransporte = obtenedorMediosTransporteService.ObtenerMedioTransporte(datosPedidoDTO.cMedioTransporte); var ePaqueteria = obtenedorTipoPaqueteriaService.ObtenerTipoPaqueteria(datosPedidoDTO.cPaqueteria); var srvCalculadorCosto = obtenedorInstanciaCalculoCostoEnvioFactory.CrearInstancia(eMedioTransporte); var obtenedorMargenUtilidadPaqueteria = obtenedorInstanciaMargenUtilidadFactory.CrearInstancia(ePaqueteria); var dCostoTransporte = srvCalculadorCosto.CalcularCostoEnvio(datosPedidoDTO); var dMargenUtilidad = obtenedorMargenUtilidadPaqueteria.ObtenerMargenUtilidad(datosPedidoDTO.dtFechaHoraPedido); dCostoServicio = dCostoTransporte * (1 + dMargenUtilidad); return(dCostoServicio); }
/// <summary> /// Método para obtener el costo de envío con base al medio de transporte. /// </summary> /// <param name="datosPedidoDTO">Datos del pedido que se esta realizando el pedido.</param> /// <returns>Retorna el total del costo de envío.</returns> public decimal CalcularCostoEnvio(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); decimal dCosto = 0; var eEstacionAnio = srvObtenedorEstacionAnio.ObtenerEstacionAnio(datosPedidoDTO.dtFechaHoraPedido); decimal dRangoDistancia = ObtenerRangoDistancia(datosPedidoDTO.dDistancia); var dVariacionCosto = srvObtenedorVariacionCostoPorEstacionAnioService.ObtenerVariacionCosto(eEstacionAnio); var dSubTotal = datosPedidoDTO.dDistancia * dRangoDistancia; dCosto = dSubTotal * (1 + (dVariacionCosto / 100M)); return(dCosto); }
/// <summary> /// Método para obtener el tiempo de traslado con base al medio de transporte a instanciar. /// </summary> /// <param name="datosPedidoDTO">Pedidos DTO.</param> /// <returns>Retorna el tiempo de traslado del medio de transporte.</returns> public decimal ObtenerTiempoTraslado(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); decimal dTiempoTraslado = 0; var eEstacionAnio = srvObtenedorEstacionAnio.ObtenerEstacionAnio(datosPedidoDTO.dtFechaHoraPedido); var dVariacionVelocidad = srvObtenedorVariacionVelocidadPorEstacionAnioService.ObtenerVariacionVelocidad(eEstacionAnio); var dPorcentajeEstacion = dVariacionVelocidad / 100M; var dVelocidad = 46 + (46 * dPorcentajeEstacion); dTiempoTraslado = datosPedidoDTO.dDistancia / dVelocidad; return(truncadorDecimales.TruncarNumero(dTiempoTraslado)); }
/// <summary> /// Método para obtener el costo de envío con base al medio de transporte. /// </summary> /// <param name="datosPedidoDTO">Datos del pedido que se esta realizando el pedido.</param> /// <returns>Retorna el total del costo de envío.</returns> public decimal CalcularCostoEnvio(DatosPedidoDTO datosPedidoDTO) { ValidarParametroDatosPedidoDTO(datosPedidoDTO); var dCosto = 0; if (datosPedidoDTO.dDistancia >= 1 && datosPedidoDTO.dDistancia <= 50) { dCosto = 15; } else if (datosPedidoDTO.dDistancia >= 51 && datosPedidoDTO.dDistancia <= 200) { dCosto = 10; } else if (datosPedidoDTO.dDistancia >= 201 && datosPedidoDTO.dDistancia <= 300) { dCosto = 8; } else { dCosto = 7; } return(dCosto); }