public async Task <Pedido> RealizarPedido(PedidoDTO pedidoDto) { //var longlat = $"POINT({pedidoDto.Latitude} {pedidoDto.Longitude})".Replace(",", "."); try { var pedido = new Pedido(); pedido.Id = Guid.NewGuid(); pedido.DataHora = DateTime.Now; //pedido.LatLong = DbGeography.FromText(longlat); pedido.Latitude = pedidoDto.Latitude; pedido.Longitude = pedidoDto.Longitude; pedido.Peso = pedidoDto.Peso; pedido.StatusPedido = StatusPedido.aguardandoAprovacao; //using (var trans = new TransactionScope()) //{ //Verificar a distância entre Origem e Destindo (Pedido) var distance = new Coordinates(latitude, longitude) .DistanceTo( new Coordinates(pedido.Latitude, pedido.Longitude), UnitOfLength.Kilometers ); var drones = await _droneRepository.GetDisponiveis(); //Verificar drones, que possuem autonomia de ida e volta //Qual automomia atual do drone = (Autonomia * Carga) / 100 //Temos que pegar os Drones com AA >= Distancia do Pedido * 2 var dronesDispAutonomia = drones?.Where(x => (((x.Autonomia * x.Carga) / 100) * x.Velocidade) >= (distance * 2))?.ToList(); //Dos Drones com autonomia, quais podem carregar o peso do pedido var dronesComCapacidade = dronesDispAutonomia?.Where(x => x.Capacidade >= pedido.Peso)?.ToList(); //Caso dronesComCapacidade não seja nulo e contenha objetos (drone), pode ser responsável pela entrega if (dronesComCapacidade != null && dronesComCapacidade.Count() > 0) { var drone = dronesComCapacidade.FirstOrDefault(); pedido.Drone = drone; pedido.StatusPedido = StatusPedido.despachado; drone.StatusDrone = StatusDrone.emTrajeto; await _pedidoRepository.AddPedido(pedido); await _droneRepository.UpdateDrone(drone); } else { pedido.StatusPedido = StatusPedido.reprovado; await _pedidoRepository.AddPedido(pedido); } //trans.Complete(); return(pedido); //} } catch (Exception ex) { throw; } }
public ApiResponse FazerPedido([FromBody] PedidoModelView pedidoModelView) { response = new ApiResponse(); try { if (!string.IsNullOrEmpty(pedidoModelView.Token)) { if (pedidoModelView.Token == "teste") { Cliente cliente = _cliente.GetClienteById(pedidoModelView.cliente_id); if (cliente != null) { Carrinho carrinho = _carrinho.GetCarrinhoByClienteId(pedidoModelView.cliente_id); if (carrinho == null) { carrinho = new Carrinho { carrinho_dataCadastro = DateTime.Now, carrinho_total = 0, cliente_id = cliente.cliente_id }; carrinho.carrinho_id = _carrinho.AddCarrinho(carrinho); } Produto produto = _produto.GetProdutoById(pedidoModelView.produto_id); if (produto != null) { CarrinhoItens carrinhoItens = new CarrinhoItens { carrinhoItens_carrinho_id = carrinho.carrinho_id, carrinhoItens_produto_id = produto.produto_id, carrinhoItens_valorUnitario = produto.produto_preco - produto.produto_precoPromo, carrinhoItens_valorTotalItem = (produto.produto_preco - produto.produto_precoPromo) * pedidoModelView.carrinhoItens_quantidade, carrinhoItens_dataCadastro = DateTime.Now }; carrinhoItens.carrinhoItens_id = _carrinho.AddCarrinhoItens(carrinhoItens); Pedido pedido = new Pedido { pedido_valor = carrinhoItens.carrinhoItens_valorTotalItem, carrinhoItens_id = carrinhoItens.carrinhoItens_id, pedido_dataCadastro = DateTime.Now }; pedido.pedido_id = _pedido.AddPedido(pedido); response.StatusCode = Convert.ToInt32(HttpStatusCode.OK); response.Message = "Solicitação executada com sucesso!"; response.Result = pedido; } } else { response.StatusCode = Convert.ToInt32(HttpStatusCode.BadRequest); response.Message = "Cliente não existe!"; } } else { response.StatusCode = Convert.ToInt32(HttpStatusCode.BadRequest); response.Message = "Token inválido!"; } } else { response.StatusCode = Convert.ToInt32(HttpStatusCode.BadRequest); response.Message = "Token inválido!"; } return(response); } catch (Exception ex) { throw new Exception(ex.Message); } }