public async Task <IActionResult> Post([FromBody] DoacaoSopaDTO dto) { if (ModelState.IsValid) { Doador doador = _context.Doador.SingleOrDefault(q => q.CodDoador == dto.Doador.Id); if (doador == null) { ModelState.AddModelError("Doador", "Doador inválido"); return(new BadRequestObjectResult(ModelState)); } Item item = _context.Item.SingleOrDefault(q => q.Id == dto.Item.Id && q.Destino == "SOPA"); if (item == null) { ModelState.AddModelError("Item", "Item inválido"); return(new BadRequestObjectResult(ModelState)); } //corrige fuso horario do js dto.DataDaDoacao = dto.DataDaDoacao.AddHours(-dto.DataDaDoacao.Hour); DoacaoSopa novo = new DoacaoSopa() { Doador = doador, Data = dto.DataDaDoacao, Descricao = dto.Descricao, Item = item, Quantidade = dto.Quantidade }; try { _context.DoacaoSopa.Add(novo); _context.SaveChanges(); //atualiza o estoque Usuario usuario = await _userManager.GetUserAsync(HttpContext.User); _estoqueManager.DarEntrada(usuario, item, novo.Quantidade); dto.Id = novo.Id; return(new ObjectResult(dto)); } catch { return(new BadRequestObjectResult(ModelState)); } } return(new BadRequestObjectResult(ModelState)); }
public async Task <IActionResult> Post([FromBody] DespesaDTO dto) { if (ModelState.IsValid && (dto.Tipo.ToUpper() == "ASSOCIACAO" || dto.Tipo.ToUpper() == "FAVORECIDO" || dto.Tipo.ToUpper() == "SOPA")) { Usuario user = await _userManager.GetUserAsync(HttpContext.User); //corrige fuso horario do js dto.DataDaCompra = dto.DataDaCompra.AddHours(-dto.DataDaCompra.Hour); switch (dto.Tipo) { case "ASSOCIACAO": try { ItemAssociacao ia = _context.ItemAssociacao.Single(q => q.Id == dto.Item.Id); DespesaAssociacao da = new DespesaAssociacao { DataDaCompra = dto.DataDaCompra, Descricao = dto.Descricao, Quantidade = dto.Quantidade, ValorUnitario = dto.ValorUnitario, Item = ia, Usuario = user }; _context.DespesaAssociacao.Add(da); _context.SaveChanges(); dto.Id = da.Id; } catch { //ModelState.AddModelError("Item", "Este item já está cadastrado"); return(new BadRequestObjectResult(ModelState)); } break; case "FAVORECIDO": try { ItemFavorecido ifavorecido = _context.ItemFavorecido.Single(q => q.Id == dto.Item.Id); Favorecido favorecido = _context.Favorecido.Single(q => q.CodFavorecido == dto.Favorecido.Id); DespesaFavorecido df = new DespesaFavorecido { DataDaCompra = dto.DataDaCompra, Descricao = dto.Descricao, Quantidade = dto.Quantidade, ValorUnitario = dto.ValorUnitario, Item = ifavorecido, Favorecido = favorecido, Usuario = user }; _context.DespesaFavorecido.Add(df); _context.SaveChanges(); dto.Id = df.Id; } catch { ModelState.AddModelError("Favorecido", "Este favorecido não existe mais"); return(new BadRequestObjectResult(ModelState)); } break; case "SOPA": try { ItemSopa isopa = _context.ItemSopa.Single(q => q.Id == dto.Item.Id); DespesaSopa ds = new DespesaSopa { DataDaCompra = dto.DataDaCompra, Descricao = dto.Descricao, Quantidade = dto.Quantidade, ValorUnitario = dto.ValorUnitario, Item = isopa, Usuario = user }; _context.DespesaSopa.Add(ds); _context.SaveChanges(); //atualiza o estoque _estoqueManager.DarEntrada(user, isopa, ds.Quantidade); dto.Id = ds.Id; } catch { //ModelState.AddModelError("Item", "Este item já está cadastrado"); return(new BadRequestObjectResult(ModelState)); } break; } return(new ObjectResult(dto)); } else { if (ModelState.IsValid) { ModelState.AddModelError("Tipo", "Valores aceitados = ['ASSOCIACAO','FAVORECIDO','SOPA']"); } return(new BadRequestObjectResult(ModelState)); } }
public async Task <IActionResult> Put(int id, [FromBody] ResultadoSopaDTO dto) { if (id != dto.Id) { return(new BadRequestResult()); } if (ModelState.IsValid) { //corrige fuso horario do js dto.Data = dto.Data.AddHours(-dto.Data.Hour); if (dto.Itens.Count == 0) { ModelState.AddModelError("Itens", "O modelo precisa ter itens"); return(new BadRequestObjectResult(ModelState)); } ModeloDeReceita mr = _context.ModeloDeReceita.SingleOrDefault(q => q.Id == dto.ModeloDeReceita.Id); if (mr == null) { ModelState.AddModelError("ModeloDeReceita", "Modelo de receita inexitente"); return(new BadRequestObjectResult(ModelState)); } ResultadoSopa resultadoSopa = _context.ResultadoSopa .Include(q => q.Itens) .ThenInclude(q => q.Item) .Include(q => q.ModeloDeReceita) .SingleOrDefault(q => q.Id == id); resultadoSopa.ModeloDeReceita = mr; resultadoSopa.Descricao = dto.Descricao; resultadoSopa.Data = dto.Data; resultadoSopa.LitrosProduzidos = dto.LitrosProduzidos; var itensNovos = from i in _context.Item join d in dto.Itens on i.Id equals d.Item.Id where i.Destino == "SOPA" select new { item = i, quantidade = d.Quantidade }; if (itensNovos.Count() != dto.Itens.Count) { ModelState.AddModelError("Itens", "A lista de itens contém itens inválidos"); return(new BadRequestObjectResult(ModelState)); } List <ResultadoSopaItem> itensCorretos = new List <ResultadoSopaItem>(); Dictionary <Item, double> dicEstoqueSaida = new Dictionary <Item, double>(); //para atualizar o estoque Dictionary <Item, double> dicEstoqueEntrada = new Dictionary <Item, double>(); //para atualizar o estoque foreach (var i in itensNovos) { var existente = resultadoSopa.Itens.SingleOrDefault(q => q.IdItem == i.item.Id); if (existente == null) { ResultadoSopaItem novoItem = new ResultadoSopaItem { Item = i.item, Quantidade = i.quantidade }; resultadoSopa.Itens.Add(novoItem); itensCorretos.Add(novoItem); //para dar saida no estoque dicEstoqueSaida.Add(i.item, i.quantidade); } else { //se alterou o quantidade do item necessita alterar o estoque double diferenca = existente.Quantidade - i.quantidade; if (diferenca > 0) { dicEstoqueEntrada.Add(existente.Item, diferenca); } if (diferenca < 0) { dicEstoqueSaida.Add(existente.Item, -diferenca); } existente.Quantidade = i.quantidade; itensCorretos.Add(existente); } } //remove os incorretos foreach (var item in resultadoSopa.Itens.Except(itensCorretos).ToArray()) { //para adiciona novamente no estoque os itens q foram removido do resultado dicEstoqueEntrada.Add(item.Item, item.Quantidade); resultadoSopa.Itens.Remove(item); } try { _context.SaveChanges(); Usuario usuario = await _userManager.GetUserAsync(HttpContext.User); //atualiza o estoque _estoqueManager.DarSaida(usuario, dicEstoqueSaida); _estoqueManager.DarEntrada(usuario, dicEstoqueEntrada); } catch { return(new BadRequestObjectResult(ModelState)); } return(new ObjectResult(dto)); } else { return(new BadRequestObjectResult(ModelState)); } }