Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }