Beispiel #1
0
        public async Task <long> Create(PedidoInput pedidoInput, CancellationToken cancellationToken)
        {
            return(await Task.Run(() =>
            {
                pedidoInput.Validar();

                Pedido pedido = new Pedido();
                pedido.DataCriacao = DateTime.Now;
                //pedido.UsuarioCriacao = Thread.CurrentPrincipal.Identity;
                foreach (var itemInput in pedidoInput.Itens)
                {
                    ItemPedido item = new ItemPedido();
                    Produto produto = ProdutoRepository.GetById(itemInput.ProdutoId);
                    if (produto == null)
                    {
                        throw new Exception("Produto não encontrado");
                    }

                    item.Produto = produto;
                    item.Quantidade = itemInput.Qtd;
                    pedido.Itens.Add(item);
                }

                PedidoRepository.Add(pedido);
                return pedido.Id;
            }, cancellationToken));
        }
Beispiel #2
0
        public async Task Edit(long pedidoId, PedidoInput pedidoInput, CancellationToken cancellationToken)
        {
            await Task.Run(() =>
            {
                pedidoInput.Validar();
                Pedido pedido      = PedidoRepository.GetById(pedidoId);
                var itensRemovidos = pedido.Itens.Where(i => !pedidoInput.Itens.Any(ii => ii.ProdutoId == i.Produto.Id));

                foreach (var item in itensRemovidos)
                {
                    pedido.Itens.Remove(item);
                }

                foreach (var itemInput in pedidoInput.Itens)
                {
                    var item = pedido.Itens.FirstOrDefault(i => i.Produto.Id == itemInput.ProdutoId);
                    if (item == null)
                    {
                        Produto produto = ProdutoRepository.GetById(itemInput.ProdutoId);
                        if (produto == null)
                        {
                            throw new Exception("Produto não encontrado");
                        }

                        item.Produto    = produto;
                        item.Quantidade = itemInput.Qtd;
                        pedido.Itens.Add(item);
                    }
                    else
                    {
                        item.Quantidade = itemInput.Qtd;
                    }
                }

                PedidoRepository.Update(pedido);
            }, cancellationToken);
        }