예제 #1
0
        [ProducesResponseType(500)] //Erro interno do servidor
        public IActionResult Inativar(int id, [FromBody] Produto produto)
        {
            try
            {
                if (id == produto.Id)
                {
                    if (produto.TipoProduto == EnumTipoProduto.MATERIA_PRIMA)
                    {
                        if (!_ingredienteRepositorio.MateriaPrimaSemProdutoFinal(produto.Id))
                        {
                            return(BadRequest("Materia-prima utlizada em produtos finais produzidos. Não pode ser inativada."));
                        }
                    }

                    produto.Situacao = false;
                    _produtoRepositorio.Alterar(produto);
                    return(Ok("Produto inativado com sucesso."));
                }
                else
                {
                    return(BadRequest("Falha na inativação do produto."));
                }
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
예제 #2
0
        [ProducesResponseType(500)] //Erro interno do servidor
        public IActionResult Post([FromBody] ProdutoFinalProduzido produtoParaProduzir)
        {
            //busca o Produto final da base, para pegar os dados atualizados de receita
            ProdutoFinalProduzido produtoFinalProduzido = _produtoRepositorio.SelecionarProdutoFinalProduzido(produtoParaProduzir.Id);

            //QuantidadeEstoque = qtd para Produzir
            // para verificacao
            foreach (var item in produtoFinalProduzido.Receita)
            {
                //verifica estoque materia prima
                ProdutoMateriaPrima materiaPrima = (ProdutoMateriaPrima)_produtoRepositorio.Selecionar(item.IdMateriaPrima);
                if (!materiaPrima.VerificaEstoqueQuantidadeMateiraPrima(item.Quantidade * produtoParaProduzir.QuantidadeEstoque))
                {
                    return(BadRequest($"Não possui estoque suficiente para o produto {item.MateriaPrima.Nome}."));
                }
            }

            //cria a movimentacao de estoque do produto final
            Estoque estoque = new Estoque()
            {
                Produto     = produtoFinalProduzido,
                Data        = DateTime.Now,
                Quantidade  = produtoParaProduzir.QuantidadeEstoque,
                TipoEstoque = EnumTipoEstoque.ENTRADA
            };

            _estoqueRepositorio.Incluir(estoque);
            produtoFinalProduzido.QuantidadeEstoque += estoque.Quantidade;


            // para retirada do estoque
            foreach (var item in produtoFinalProduzido.Receita)
            {
                ProdutoMateriaPrima materiaPrima = (ProdutoMateriaPrima)_produtoRepositorio.Selecionar(item.IdMateriaPrima);
                //cria a movimentacao de estoque do produto materia prima
                Estoque estoqueMateiraPrima = new Estoque()
                {
                    Produto     = materiaPrima,
                    Data        = DateTime.Now,
                    Quantidade  = produtoParaProduzir.QuantidadeEstoque * item.Quantidade,
                    TipoEstoque = EnumTipoEstoque.SAIDA
                };
                _estoqueRepositorio.Incluir(estoqueMateiraPrima);
                materiaPrima.QuantidadeEstoque -= estoqueMateiraPrima.Quantidade;
                _produtoRepositorio.Alterar(materiaPrima);
            }

            _produtoRepositorio.Alterar(produtoFinalProduzido);
            return(Ok("O produto final produzido selecionado foi atualizado com sucesso no estoque."));
        }
예제 #3
0
        public string AlterarProduto(Produto produto)
        {
            if (produto == null)
            {
                return(null);
            }

            return(_produtoRepositorio.Alterar(produto));
        }
예제 #4
0
        public async Task <IActionResult> Edit(int id, Produto produto)
        {
            if (id != produto.ProdutoId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    await _produtoRepositorio.Alterar(produto);
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["FornecedorId"] = new SelectList(await _fornecedorRepositorio.ListarTodos(), "PessoaId", "RazaoSocial", produto.FornecedorId);
            return(View(produto));
        }
예제 #5
0
        public ActionResult <List <FechamentoCaixaDTO> > Put(int id, [FromBody] Caixa caixa)
        {
            if (caixa == null)
            {
                return(BadRequest("Não foi possível fechar o caixa, sem dados para o fechamento."));
            }

            if (id == caixa.Id)
            {
                var caixaBaseDeDados = _caixaRepositorio.Selecionar(id);
                if (caixaBaseDeDados.EstaAberto())
                {
                    foreach (var item in caixa.Descartes)
                    {
                        ProdutoFinal descarte = (ProdutoFinal)_produtoRepositorio.Selecionar(item.IdProdutoFinal);

                        Estoque estoqueDescarte = new Estoque()
                        {
                            Produto     = descarte,
                            Data        = DateTime.Now,
                            Quantidade  = item.Quantidade,
                            TipoEstoque = EnumTipoEstoque.SAIDA
                        };
                        _estoqueRepositorio.Incluir(estoqueDescarte);
                        descarte.QuantidadeEstoque -= estoqueDescarte.Quantidade;
                        _produtoRepositorio.Alterar(descarte);
                    }

                    caixaBaseDeDados.DataFechameto = DateTime.Now;
                    caixaBaseDeDados.SituacaoCaixa = EnumSitucaoCaixa.FECHADO;
                    _caixaRepositorio.Alterar(caixaBaseDeDados);

                    var valores = _vendaRepositorio.VendaCaixa(caixa.Id);

                    return(Ok(valores));
                }
            }
            return(BadRequest("Impossível realizar o fechamento do caixa, pois o caixa não está aberto."));
        }
예제 #6
0
 public void Alterar(IProdutoRepositorio repositorio)
 {
     repositorio.Alterar(this);
 }
예제 #7
0
        [ProducesResponseType(500)] //Erro interno do servidor
        public ActionResult <VendaDTO> RealizarVenda([FromBody] Venda venda)
        {
            try
            {
                if (venda == null)
                {
                    return(BadRequest("Venda não foi finalizada com sucesso"));
                }

                if (venda.Data.Date < DateTime.Now.Date)
                {
                    return(BadRequest("A venda não foi realizada, a data da venda não pode ser anterior a hoje"));
                }

                if (venda.Data.Date > DateTime.Now.Date)
                {
                    return(BadRequest("A venda não foi realizada, a data da venda não pode ser posterior a hoje"));
                }

                if (venda.Valor <= 0)
                {
                    return(BadRequest("Não será permitido realizar a venda se o valor for zero "));
                }

                if (venda.TipoPagamento == EnumTipoPagamento.DINHEIRO &&
                    venda.ValorRecebido < venda.Valor)
                {
                    return(BadRequest("Não será permitido realizar a venda. O valor recebido é menor que o valor da venda."));
                }

                decimal totalVenda = 0;
                foreach (var item in venda.Itens)
                {
                    ProdutoFinal produtoFinal = (ProdutoFinal)_produtoRepositorio.Selecionar(item.IdProdutoFinal);

                    totalVenda += produtoFinal.Valor * item.Quantidade;

                    if ((produtoFinal.QuantidadeEstoque - item.Quantidade) < 0)
                    {
                        return(BadRequest($"Não será permitido realizar a venda. O produto {produtoFinal.Nome} está com estoque indisponível"));
                    }
                }


                if (venda.Valor != totalVenda)
                {
                    return(BadRequest("Não será permitido realizar a venda. O Valor da venda está incorreto."));
                }

                var caixa = _caixaRepositorio.Selecionar(venda.Caixa.Id);

                if (!caixa.EstaAberto())
                {
                    return(BadRequest("Não será permitido realizar a venda se o caixa estiver fechado"));
                }

                venda.Caixa = caixa;

                foreach (var item in venda.Itens)
                {
                    ProdutoFinal produtoFinal = (ProdutoFinal)_produtoRepositorio.Selecionar(item.IdProdutoFinal);

                    Estoque estoque = new Estoque()
                    {
                        Produto     = produtoFinal,
                        Data        = DateTime.Now,
                        Quantidade  = item.Quantidade,
                        TipoEstoque = EnumTipoEstoque.SAIDA
                    };
                    _estoqueRepositorio.Incluir(estoque);
                    produtoFinal.QuantidadeEstoque -= estoque.Quantidade;
                    _produtoRepositorio.Alterar(produtoFinal);
                }

                _vendaRepositorio.Incluir(venda);
                VendaDTO vendaRetorno = new VendaDTO();
                vendaRetorno.Mensagem = "Venda efetuada com sucesso";


                vendaRetorno.ValorPago = venda.Valor;

                if (venda.TipoPagamento == EnumTipoPagamento.DINHEIRO)
                {
                    vendaRetorno.Troco = venda.ValorRecebido - venda.Valor;
                }

                return(Ok(vendaRetorno));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
예제 #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Produto"></param>
 public void Alterar(Produto Produto)
 {
     _ProdutoRepositorio.Alterar(Produto);
 }
예제 #9
0
 public Produto Alterar(string id, Produto produto)
 {
     _repositorio.Alterar(id, produto);
     _repositorio.Commit();
     return(ObterPorId(id));
 }