public ActionResult DeleteConfirmed(int id) { LoteInsumo loteInsumo = db.LotesInsumos.Find(id); EstoqueInsumo estoqueInsumo = db.EstoqueInsumos.Where(e => e._Insumo.Nome.Equals(loteInsumo._Insumo.Nome)).FirstOrDefault(); estoqueInsumo.QtdeTotalEstoque -= loteInsumo.QtdeInicial; estoqueInsumo.CustoTotalEstoque -= loteInsumo.CustoTotalInicial; EstoqueInsumosController eic = new EstoqueInsumosController(); eic.Edit(estoqueInsumo); List <MovimentacaoEstoqueInsumo> movimentacoes = db.MovimentacoesEstoqueInsumos.Where(m => m.LoteInsumoID.Equals(loteInsumo.ID)).ToList(); db.MovimentacoesEstoqueInsumos.RemoveRange(movimentacoes); db.LotesInsumos.Remove(loteInsumo); db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Create([Bind(Include = "ID,DataCompra,InsumoID,MarcaID,FornecedorID,QtdeInicial,QtdeDisponivel,CustoMedio,CustoTotalInicial,Validade,_Insumo")] LoteInsumo loteInsumo) { if (ModelState.IsValid) { loteInsumo.QtdeDisponivel = loteInsumo.QtdeInicial; loteInsumo.CustoMedio = loteInsumo.CustoTotalInicial / loteInsumo.QtdeInicial; db.LotesInsumos.Add(loteInsumo); db.SaveChanges(); loteInsumo = db.LotesInsumos.Include(li => li._Insumo).Where(li => li.ID == loteInsumo.ID).FirstOrDefault(); // Incluir Movimentação Estoque Insumos MovimentacaoEstoqueInsumo movimentacaoEstoqueInsumo = new MovimentacaoEstoqueInsumo() { DataMovimentacao = loteInsumo.DataCompra, Qtde = loteInsumo.QtdeInicial, ValorMovimentacao = loteInsumo.CustoTotalInicial, LoteInsumoID = loteInsumo.ID }; MovimentacoesEstoqueInsumosController meic = new MovimentacoesEstoqueInsumosController(); if (meic.Create(movimentacaoEstoqueInsumo)) { // Incluir / Alterar Estoque Insumos EstoqueInsumosController eic = new EstoqueInsumosController(); var x = db.EstoqueInsumos.Where(ei => ei._Insumo.Nome.Equals(loteInsumo._Insumo.Nome)).FirstOrDefault(); if (x != null) { EstoqueInsumo estoqueInsumo = x; estoqueInsumo.QtdeTotalEstoque += loteInsumo.QtdeInicial; estoqueInsumo.CustoTotalEstoque += loteInsumo.CustoTotalInicial; if (!eic.Edit(estoqueInsumo)) { return(View()); } } else { EstoqueInsumo estoqueInsumo = new EstoqueInsumo() { QtdeTotalEstoque = loteInsumo.QtdeInicial, CustoTotalEstoque = loteInsumo.CustoTotalInicial, InsumoID = loteInsumo.InsumoID }; if (!eic.Create(estoqueInsumo)) { return(View()); } } return(RedirectToAction("Index")); } } ViewBag.FornecedorID = new SelectList(db.Fornecedores, "ID", "Nome", loteInsumo.FornecedorID); ViewBag.InsumoID = new SelectList(db.Insumos, "InsumoID", "Nome", loteInsumo.InsumoID); ViewBag.MarcaID = new SelectList(db.Marcas, "MarcaID", "Nome", loteInsumo.MarcaID); return(View(loteInsumo)); }
public ActionResult Edit([Bind(Include = "ID,DataCompra,InsumoID,MarcaID,FornecedorID,QtdeInicial,QtdeDisponivel,CustoMedio,CustoTotalInicial,Validade")] LoteInsumo loteInsumo) { LoteInsumo loteInsumoEditar = db.LotesInsumos.Find(loteInsumo.ID); double diferencaQuantidade = loteInsumo.QtdeInicial - loteInsumoEditar.QtdeInicial; double diferencaValorTotal = loteInsumo.CustoTotalInicial - loteInsumoEditar.CustoTotalInicial; loteInsumo.QtdeDisponivel += diferencaQuantidade; loteInsumo.CustoMedio = loteInsumo.CustoTotalInicial / loteInsumo.QtdeInicial; if (loteInsumo.QtdeDisponivel >= 0) { loteInsumoEditar.DataCompra = loteInsumo.DataCompra; loteInsumoEditar.InsumoID = loteInsumo.InsumoID; loteInsumoEditar.MarcaID = loteInsumo.MarcaID; loteInsumoEditar.FornecedorID = loteInsumo.FornecedorID; loteInsumoEditar.QtdeInicial = loteInsumo.QtdeInicial; loteInsumoEditar.QtdeDisponivel = loteInsumo.QtdeDisponivel; loteInsumoEditar.CustoMedio = loteInsumo.CustoMedio; loteInsumoEditar.CustoTotalInicial = loteInsumo.CustoTotalInicial; loteInsumoEditar.Validade = loteInsumo.Validade; if (ModelState.IsValid) { db.Entry(loteInsumoEditar).State = EntityState.Modified; db.SaveChanges(); loteInsumo = db.LotesInsumos.Include(li => li._Insumo).Where(li => li.ID == loteInsumo.ID).FirstOrDefault(); // Alterando Movimentação Estoque Insumos MovimentacaoEstoqueInsumo movimentacaoEstoqueInsumo = db.MovimentacoesEstoqueInsumos.Where(m => m.LoteInsumoID.Equals(loteInsumo.ID)).FirstOrDefault(); movimentacaoEstoqueInsumo.DataMovimentacao = loteInsumo.DataCompra; movimentacaoEstoqueInsumo.Qtde = loteInsumo.QtdeInicial; movimentacaoEstoqueInsumo.ValorMovimentacao = loteInsumo.CustoTotalInicial; movimentacaoEstoqueInsumo.LoteInsumoID = loteInsumo.ID; MovimentacoesEstoqueInsumosController meic = new MovimentacoesEstoqueInsumosController(); if (meic.Edit(movimentacaoEstoqueInsumo)) { // Incluir / Alterar Estoque Insumos EstoqueInsumosController eic = new EstoqueInsumosController(); var x = db.EstoqueInsumos.Where(ei => ei._Insumo.Nome.Equals(loteInsumo._Insumo.Nome)).FirstOrDefault(); if (x != null) { EstoqueInsumo estoqueInsumo = x; estoqueInsumo.QtdeTotalEstoque += diferencaQuantidade; estoqueInsumo.CustoTotalEstoque = loteInsumo.CustoMedio * loteInsumo.QtdeDisponivel; if (!eic.Edit(estoqueInsumo)) { return(View()); } return(RedirectToAction("Index")); } } } } ViewBag.FornecedorID = new SelectList(db.Fornecedores, "ID", "Nome", loteInsumo.FornecedorID); ViewBag.InsumoID = new SelectList(db.Insumos, "InsumoID", "Nome", loteInsumo.InsumoID); ViewBag.MarcaID = new SelectList(db.Marcas, "MarcaID", "Nome", loteInsumo.MarcaID); return(View(loteInsumo)); }
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)); }