Example #1
0
        public async Task <bool> AdicionarAsync(PedidoModel pedidoModel)
        {
            var pedido = _mapper.Map <PedidoModel, Pedido>(pedidoModel);

            if (!pedido.ValidarPesoPedido(Utils.CARGA_MAXIMA))
            {
                return(false);
            }

            // temos que procurar drones disponiveis
            Drone droneDisponivel = null;

            var drones = await _unitOfWork.Drones.ObterAsync();

            foreach (var drone in drones)
            {
                var droneTemAutonomia = pedido.ValidarDistanciaEntrega(Utils.LATITUDE_INICIAL, Utils.LONGITUDE_INICIAL, drone.Velocidade, drone.Autonomia);

                if (!droneTemAutonomia)
                {
                    return(false);
                }

                var droneAceitaPeso = drone.VerificarDroneAceitaOPesoPedido(pedido.Peso);

                if (!droneAceitaPeso)
                {
                    return(false);
                }

                if (drone.Status == DroneStatus.Livre)
                {
                    droneDisponivel = drone;
                    break;
                }
            }

            if (droneDisponivel == null)
            {
                pedido.AtualizarStatusPedido(PedidoStatus.AguardandoEntrega);
            }
            else
            {
                pedido.DroneId = droneDisponivel.Id;
                pedido.AtualizarStatusPedido(PedidoStatus.EmEntrega);
                droneDisponivel.AtualizarStatusDrone(DroneStatus.EmEntrega);
            }

            await _unitOfWork.Pedidos.AdicionarAsync(pedido);

            await _unitOfWork.SaveAsync();

            return(true);
        }
Example #2
0
        public async Task <bool> AdicionarAsync(PedidoModel pedidoModel)
        {
            var pedido = _mapper.Map <PedidoModel, Pedido>(pedidoModel);

            if (!pedido.ValidarPesoPedido(Utility.Utils.CARGA_MAXIMA))
            {
                return(false);
            }

            // temos que procurar drones disponiveis
            Drone       droneDisponivel   = null;
            Intinerario intinerario       = null;
            double      RestanteAutonomia = 0;

            var drones = await _unitOfWork.Drones.ObterAsync();

            ///-------------------------------Get drone------------------------------////

            droneDisponivel = await application_Helpers.DroneDisponivel(pedido, drones);

            intinerario = await application_Helpers.GetIntinerarioAsync(pedido, drones);

            RestanteAutonomia = Application_Helpers.AutonomiaRestanteDrone(pedido, drones);


            if (droneDisponivel == null)
            {
                pedido.AtualizarStatusPedido(PedidoStatus.AguardandoEntrega);
            }
            else
            {
                pedido.Drone = droneDisponivel;
                pedido.AtualizarStatusPedido(PedidoStatus.EmEntrega);
                droneDisponivel.AtualizarStatusDrone(droneDisponivel.Status == DroneStatus.Livre ? DroneStatus.EmAguardandoNovo: DroneStatus.EmCheckout);

                await application_Helpers.GerenciarIntinerario(droneDisponivel, intinerario, pedido, RestanteAutonomia);
            }

            await _unitOfWork.Pedidos.AdicionarAsync(pedido);

            await _unitOfWork.SaveAsync();

            return(true);
        }