Beispiel #1
0
        public ActionResult DeleteConfirmed(int id)
        {
            LoteInsumoProducao loteInsumoProducao = db.LotesInsumosProducao.Find(id);

            db.LotesInsumosProducao.Remove(loteInsumoProducao);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Beispiel #2
0
 public ActionResult Edit([Bind(Include = "LoteInsumoProducaoID,QtdeInsumo,CustoInsumo,LoteInsumoID")] LoteInsumoProducao loteInsumoProducao)
 {
     if (ModelState.IsValid)
     {
         db.Entry(loteInsumoProducao).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.LoteInsumoID = new SelectList(db.LotesInsumos, "ID", "ID", loteInsumoProducao.LoteInsumoID);
     return(View(loteInsumoProducao));
 }
Beispiel #3
0
        // GET: LotesInsumosProducoes/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            LoteInsumoProducao loteInsumoProducao = db.LotesInsumosProducao.Find(id);

            if (loteInsumoProducao == null)
            {
                return(HttpNotFound());
            }
            return(View(loteInsumoProducao));
        }
Beispiel #4
0
        // GET: LotesInsumosProducoes/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            LoteInsumoProducao loteInsumoProducao = db.LotesInsumosProducao.Find(id);

            if (loteInsumoProducao == null)
            {
                return(HttpNotFound());
            }
            ViewBag.LoteInsumoID = new SelectList(db.LotesInsumos, "ID", "ID", loteInsumoProducao.LoteInsumoID);
            return(View(loteInsumoProducao));
        }
Beispiel #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));
        }