Ejemplo n.º 1
0
        public bool Edit([Bind(Include = "ID,LoteProdutoID,DataMovimentacao,Qtde,ValorMovimentacao")] MovimentacaoEstoqueProduto movimentacaoEstoqueProduto)
        {
            MovimentacaoEstoqueProduto movimentacaoEstoqueProdutoEditar = db.MovimentacoesEstoqueProdutos.Find(movimentacaoEstoqueProduto.ID);

            movimentacaoEstoqueProdutoEditar.DataMovimentacao  = movimentacaoEstoqueProduto.DataMovimentacao;
            movimentacaoEstoqueProdutoEditar.Qtde              = movimentacaoEstoqueProduto.Qtde;
            movimentacaoEstoqueProdutoEditar.ValorMovimentacao = movimentacaoEstoqueProduto.ValorMovimentacao;
            movimentacaoEstoqueProdutoEditar.LoteProdutoID     = movimentacaoEstoqueProduto.LoteProdutoID;

            if (ModelState.IsValid)
            {
                db.Entry(movimentacaoEstoqueProdutoEditar).State = EntityState.Modified;
                db.SaveChanges();

                foreach (MovimentacaoEstoqueProduto mep in db.MovimentacoesEstoqueProdutos.Where(m => m.LoteProdutoID.Equals(movimentacaoEstoqueProduto.LoteProdutoID)).ToList())
                {
                    if (mep.Qtde < 0)
                    {
                        mep.ValorMovimentacao = -mep.Qtde * mep._LoteProduto.CustoMedio;
                    }
                    else
                    {
                        mep.ValorMovimentacao = mep.Qtde * mep._LoteProduto.CustoMedio;
                    }

                    db.Entry(mep).State = EntityState.Modified;
                    db.SaveChanges();
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
 public bool Create([Bind(Include = "ID,LoteProdutoID,DataMovimentacao,Qtde,ValorMovimentacao")] MovimentacaoEstoqueProduto movimentacaoEstoqueProduto)
 {
     if (ModelState.IsValid)
     {
         db.MovimentacoesEstoqueProdutos.Add(movimentacaoEstoqueProduto);
         db.SaveChanges();
         return(true);
     }
     return(false);
 }
Ejemplo n.º 3
0
        public bool Delete(int id)
        {
            MovimentacaoEstoqueProduto movimentacaoEstoqueProduto = db.MovimentacoesEstoqueProdutos.Find(id);

            if (movimentacaoEstoqueProduto != null)
            {
                db.MovimentacoesEstoqueProdutos.Remove(movimentacaoEstoqueProduto);
                db.SaveChanges();
                return(true);
            }
            return(false);
        }
Ejemplo n.º 4
0
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MovimentacaoEstoqueProduto movimentacaoEstoqueProduto = db.MovimentacoesEstoqueProdutos.Find(id);

            if (movimentacaoEstoqueProduto == null)
            {
                return(HttpNotFound());
            }
            return(PartialView(movimentacaoEstoqueProduto));
        }
Ejemplo n.º 5
0
        public ActionResult Create([Bind(Include = "ID,DataProducao,ValorVendaUnitario,ProdutoID,QtdeInicial,QtdeDisponivel,CustoMedio,CustoTotalInicial,Validade,_Produto")] LoteProduto loteProduto)
        {
            if (ModelState.IsValid)
            {
                // Verificando se há insumos necessários suficientes em estoque

                bool insumosDisponiveis = true;

                Produto produto = db.Produtos.Find(loteProduto.ProdutoID);

                foreach (InsumoComposicaoProduto item in produto._ComposicaoProduto)
                {
                    double qtdeInsumo        = item.QtdeInsumo * loteProduto.QtdeInicial;
                    double qtdeEstoqueInsumo = db.EstoqueInsumos.Where(m => m.InsumoID.Equals(item.InsumoID)).Sum(m => m.QtdeTotalEstoque);

                    if (qtdeInsumo > qtdeEstoqueInsumo)
                    {
                        insumosDisponiveis = false;
                    }
                }

                if (insumosDisponiveis)
                {
                    // Cria loteProduto no banco, depois vai ser alterado para incluir atributos faltantes sobre o custo

                    loteProduto.QtdeDisponivel = loteProduto.QtdeInicial;
                    db.LotesProdutos.Add(loteProduto);
                    db.SaveChanges();

                    double custoTotalLoteProduto = 0;

                    List <LoteInsumoProducao> lotesComposicaoProduto = new List <LoteInsumoProducao>();

                    // Percorre composição de Produto para encontrar os insumos necessário
                    foreach (InsumoComposicaoProduto item in loteProduto._Produto._ComposicaoProduto)
                    {
                        EstoqueInsumo estoqueInsumo = db.EstoqueInsumos.Where(e => e.InsumoID == item.InsumoID).FirstOrDefault();

                        double qtdeInsumo = item.QtdeInsumo * loteProduto.QtdeInicial;

                        while (qtdeInsumo > 0)
                        {
                            // Procura o Lote de Insumo que tenha estoque para e que esteja com a validade mais próxima
                            LoteInsumo loteDisponivel = db.LotesInsumos.
                                                        Where(l => l.InsumoID == item.InsumoID && l.QtdeDisponivel > 0).
                                                        OrderBy(l => l.Validade).FirstOrDefault();

                            if ((loteDisponivel.QtdeDisponivel - qtdeInsumo) >= 0)
                            {
                                loteDisponivel.QtdeDisponivel -= qtdeInsumo;
                                LotesInsumosController lic = new LotesInsumosController();
                                lic.Edit(loteDisponivel);

                                LoteInsumoProducao loteInsumoProducao = new LoteInsumoProducao()
                                {
                                    QtdeInsumo       = qtdeInsumo,
                                    CustoTotalInsumo = qtdeInsumo * loteDisponivel.CustoMedio,
                                    LoteInsumoID     = loteDisponivel.ID,
                                    LoteProdutoID    = loteProduto.ID
                                };

                                MovimentacaoEstoqueInsumo movimentacaoEstoqueInsumo = new MovimentacaoEstoqueInsumo()
                                {
                                    DataMovimentacao  = loteProduto.DataProducao,
                                    Qtde              = -qtdeInsumo,
                                    ValorMovimentacao = loteDisponivel.CustoMedio * qtdeInsumo,
                                    LoteInsumoID      = loteDisponivel.ID
                                };

                                MovimentacoesEstoqueInsumosController meic = new MovimentacoesEstoqueInsumosController();
                                meic.Create(movimentacaoEstoqueInsumo);

                                estoqueInsumo.QtdeTotalEstoque  -= loteInsumoProducao.QtdeInsumo;
                                estoqueInsumo.CustoTotalEstoque -= loteInsumoProducao.CustoTotalInsumo;

                                EstoqueInsumosController eic = new EstoqueInsumosController();
                                eic.Edit(estoqueInsumo);

                                lotesComposicaoProduto.Add(loteInsumoProducao);
                                qtdeInsumo             = 0;
                                custoTotalLoteProduto += loteInsumoProducao.CustoTotalInsumo;
                            }
                            else
                            {
                                LoteInsumoProducao loteInsumoProducao = new LoteInsumoProducao()
                                {
                                    QtdeInsumo       = loteDisponivel.QtdeDisponivel,
                                    CustoTotalInsumo = loteDisponivel.QtdeDisponivel * loteDisponivel.CustoMedio,
                                    LoteInsumoID     = loteDisponivel.ID,
                                    LoteProdutoID    = loteProduto.ID
                                };

                                MovimentacaoEstoqueInsumo movimentacaoEstoqueInsumo = new MovimentacaoEstoqueInsumo()
                                {
                                    DataMovimentacao  = loteProduto.DataProducao,
                                    Qtde              = -loteDisponivel.QtdeDisponivel,
                                    ValorMovimentacao = loteDisponivel.CustoMedio * loteDisponivel.QtdeDisponivel,
                                    LoteInsumoID      = loteDisponivel.ID
                                };

                                MovimentacoesEstoqueInsumosController meic = new MovimentacoesEstoqueInsumosController();
                                meic.Create(movimentacaoEstoqueInsumo);

                                estoqueInsumo.QtdeTotalEstoque  -= loteInsumoProducao.QtdeInsumo;
                                estoqueInsumo.CustoTotalEstoque -= loteInsumoProducao.CustoTotalInsumo;

                                EstoqueInsumosController eic = new EstoqueInsumosController();
                                eic.Edit(estoqueInsumo);

                                lotesComposicaoProduto.Add(loteInsumoProducao);
                                qtdeInsumo            -= loteDisponivel.QtdeDisponivel;
                                custoTotalLoteProduto += loteInsumoProducao.CustoTotalInsumo;

                                loteDisponivel.QtdeDisponivel = 0;
                                LotesInsumosController lic = new LotesInsumosController();
                                lic.Edit(loteDisponivel);
                            }
                        }
                    }

                    loteProduto.CustoTotalInicial = custoTotalLoteProduto;
                    loteProduto.CustoMedio        = custoTotalLoteProduto / loteProduto.QtdeInicial;
                    db.Entry(loteProduto).State   = EntityState.Modified;

                    db.LotesInsumosProducao.AddRange(lotesComposicaoProduto);
                    db.SaveChanges();

                    MovimentacaoEstoqueProduto movimentacaoEstoqueProduto = new MovimentacaoEstoqueProduto()
                    {
                        DataMovimentacao  = loteProduto.DataProducao,
                        Qtde              = loteProduto.QtdeInicial,
                        ValorMovimentacao = loteProduto.CustoTotalInicial,
                        LoteProdutoID     = loteProduto.ID
                    };

                    MovimentacoesEstoqueProdutosController mepc = new MovimentacoesEstoqueProdutosController();
                    if (mepc.Create(movimentacaoEstoqueProduto))
                    {
                        EstoqueProdutosController epc = new EstoqueProdutosController();

                        var x = db.EstoqueProdutos.Where(e => e.ProdutoID == loteProduto.ProdutoID).FirstOrDefault();

                        if (x != null)
                        {
                            EstoqueProduto estoqueProduto = x;

                            estoqueProduto.QtdeTotalEstoque  += loteProduto.QtdeInicial;
                            estoqueProduto.CustoTotalEstoque += loteProduto.CustoTotalInicial;

                            epc.Edit(estoqueProduto);
                        }
                        else
                        {
                            EstoqueProduto estoqueProduto = new EstoqueProduto()
                            {
                                QtdeTotalEstoque  = loteProduto.QtdeInicial,
                                CustoTotalEstoque = loteProduto.CustoTotalInicial,
                                ProdutoID         = loteProduto.ProdutoID
                            };

                            if (!epc.Create(estoqueProduto))
                            {
                                return(View());
                            }
                        }

                        return(RedirectToAction("Index"));
                    }
                }
            }

            ViewBag.ProdutoID = new SelectList(db.Produtos, "ProdutoID", "Nome", loteProduto.ProdutoID);
            return(View(loteProduto));
        }