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