public void EntradaItem(string Codigo, string Loja, int Quantidade) { try { var saldo = db.SaldoEstoque.Where(e => e.Codigo == Codigo && e.Loja == Loja && e.RowDeleted != "T").SingleOrDefault(); if (saldo == null) { saldo = new SaldoEstoque { Codigo = Codigo, Loja = Loja, SaldoAtual = Quantidade }; db.SaldoEstoque.Add(saldo); } else { saldo.SaldoAtual += Quantidade; } db.SaveChanges(); } catch (Exception ex) { throw ex; } }
public void SaidaItem(string Codigo, string Loja, int Quantidade) { var ESTOQUE_NEGATIVO = parametrosService.getParametro("ESTOQUE_NEGATIVO"); try { var saldo = db.SaldoEstoque.Where(e => e.Codigo == Codigo && e.Loja == Loja && e.RowDeleted != "T").SingleOrDefault(); if (saldo == null) { saldo = new SaldoEstoque { Codigo = Codigo, Loja = Loja, SaldoAtual = (0 - Quantidade) }; db.SaldoEstoque.Add(saldo); } else { saldo.SaldoAtual -= Quantidade; } if (ESTOQUE_NEGATIVO == "N" && saldo.SaldoAtual < 0) { throw new Exception(Codigo + " Estoque negativo nao permitido"); } db.SaveChanges(); } catch (Exception ex) { throw ex; } }
public async Task <List <SaldoEstoque> > UpdateSaldoEstoque() { var saldoList = new List <SaldoEstoque>(); try { var updateDate = DateTime.Now; var saldoRep = new Repository <SaldoEstoque>(Context); LastDateUpdate = saldoRep.Get(null, o => o.OrderByDescending(s => s.Id)).Result.FirstOrDefault().Data; var lastSaldos = await saldoRep.Get(s => s.Data == LastDateUpdate); var movimentos = await MyRepository.Get(m => m.Data > LastDateUpdate); var servicoRep = new Repository <Servico>(Context); var servicos = await servicoRep.Get(s => s.ControlaEstoque); var estoqueRep = new Repository <Estoque>(Context); var estoques = await estoqueRep.Get(); var servicoList = servicos.ToList(); var estoqueList = estoques.ToList(); var movimentoEstoques = movimentos.ToList(); var saldoEstoques = lastSaldos.ToList(); if (movimentoEstoques?.Count() > 0) { if (servicoList?.Count > 0 && estoqueList?.Count > 0) { foreach (var servico in servicoList) { foreach (var estoque in estoqueList) { var saldo = new SaldoEstoque { Data = updateDate, EstoqueId = estoque.Id, Estoque = estoque, Servico = servico, ServicoId = servico.Id, Codigo = servico.Codigo + estoque.Codigo + updateDate.ToString() }; var lastSaldo = saldoEstoques .Find(s => s.EstoqueId == estoque.Id && s.ServicoId == servico.Id); if (lastSaldo != null) { saldo.Quantidade = lastSaldo.Quantidade; } else { saldo.Quantidade = 0; } var servicoMovimentos = movimentoEstoques .FindAll(m => m.ServicoId == servico.Id && m.EstoqueId == estoque.Id); foreach (var movimento in servicoMovimentos) { int multiplicadorSaldo = 1; if (!movimento.IsEntrada) { multiplicadorSaldo = -1; } saldo.Quantidade += movimento.Quantidade * multiplicadorSaldo; } saldoList.Add(saldo); } } } await saldoRep.InsertList(saldoList); await saldoRep.Save(); } } catch (Exception e) { ConsoleEx.WriteError(e); throw; } return(saldoList); }
public async Task <SaldoEstoque> GetSaldoEstoque(Servico servico, Estoque estoque) { try { var updateDate = DateTime.Now; var saldo = new SaldoEstoque { Data = updateDate, EstoqueId = estoque.Id, Estoque = estoque, Servico = servico, ServicoId = servico.Id, Codigo = servico.Codigo + estoque.Codigo + updateDate.ToString(), Quantidade = 0 }; var saldoRep = new Repository <SaldoEstoque>(Context); var lastRegister = saldoRep.Get(null, o => o.OrderByDescending(s => s.Id)).Result.FirstOrDefault(); LastDateUpdate = lastRegister == null ? DateTime.MinValue : lastRegister.Data; var lastSaldos = await saldoRep.Get(s => s.Data == LastDateUpdate && s.EstoqueId == estoque.Id && s.ServicoId == servico.Id); if (lastSaldos != null) { var saldoEstoques = lastSaldos.ToList(); var lastSaldo = saldoEstoques? .Find(s => s.EstoqueId == estoque.Id && s.ServicoId == servico.Id); if (lastSaldo != null) { saldo.Quantidade = lastSaldo.Quantidade; } } var movimentos = await MyRepository.Get(m => m.Data > LastDateUpdate && m.EstoqueId == estoque.Id && m.ServicoId == servico.Id); if (movimentos == null) { return(saldo); } var movimentoEstoques = movimentos.ToList(); if (movimentoEstoques?.Count > 0) { var servicoMovimentos = movimentoEstoques .FindAll(m => m.ServicoId == servico.Id && m.EstoqueId == estoque.Id); foreach (var movimento in servicoMovimentos) { int multiplicadorSaldo = 1; if (!movimento.IsEntrada) { multiplicadorSaldo = -1; } saldo.Quantidade += movimento.Quantidade * multiplicadorSaldo; } } return(saldo); } catch (Exception e) { ConsoleEx.WriteError(e); return(null); } }