/// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        /// <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);
        }