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));
            }
        }
示例#3
0
        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));
            }
        }