public async Task <IActionResult> Put(int id, [FromBody] DoacaoSopaDTO dto)
        {
            if (id != dto.Id)
            {
                return(new BadRequestResult());
            }
            if (ModelState.IsValid)
            {
                //corrige fuso horario do js
                dto.DataDaDoacao = dto.DataDaDoacao.AddHours(-dto.DataDaDoacao.Hour);
                DoacaoSopa dd = _context.DoacaoSopa.Single(q => q.Id == id);

                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));
                }
                double diferencaQuantidade = dd.Quantidade - dto.Quantidade;
                dd.Doador     = doador;
                dd.Data       = dto.DataDaDoacao;
                dd.Descricao  = dto.Descricao;
                dd.Item       = item;
                dd.Quantidade = dto.Quantidade;


                try
                {
                    _context.SaveChanges();
                    Usuario usuario = await _userManager.GetUserAsync(HttpContext.User);

                    //atualiza o estoque
                    if (diferencaQuantidade > 0)
                    {
                        _estoqueManager.DarSaida(usuario, item, diferencaQuantidade);
                    }
                    else if (diferencaQuantidade < 0)
                    {
                        _estoqueManager.DarEntrada(usuario, item, -diferencaQuantidade);
                    }
                }
                catch
                {
                    return(new BadRequestObjectResult(ModelState));
                }

                return(new ObjectResult(dto));
            }
            else
            {
                return(new BadRequestObjectResult(ModelState));
            }
        }
        public async Task <IActionResult> Put(int id, [FromBody] DespesaDTO dto)
        {
            if (id != dto.Id)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            if (ModelState.IsValid)
            {
                //corrige fuso horario do js
                dto.DataDaCompra = dto.DataDaCompra.AddHours(-dto.DataDaCompra.Hour);
                Usuario user = await _userManager.GetUserAsync(HttpContext.User);

                Despesa despesa = _context.Despesa.SingleOrDefault(q => q.Id == id);
                if (despesa == null)
                {
                    return(new BadRequestResult());
                }
                Item item = _context.Item.SingleOrDefault(q => q.Id == dto.Item.Id);
                if (item == null)
                {
                    ModelState.AddModelError("Item", "Item inválido");
                    return(new BadRequestObjectResult(ModelState));
                }
                double diferencaQuantidade = despesa.Quantidade - dto.Quantidade;
                despesa.Item          = item;
                despesa.Quantidade    = dto.Quantidade;
                despesa.ValorUnitario = dto.ValorUnitario;
                despesa.Usuario       = user;


                if (despesa.GetType() == typeof(DespesaAssociacao))
                {
                    DespesaAssociacao desp = (DespesaAssociacao)despesa;
                    //nenhum outro campo para atualizar
                    try
                    {
                        _context.SaveChanges();
                        return(new ObjectResult(dto));
                    }
                    catch
                    {
                        return(new BadRequestObjectResult(ModelState));
                    }
                }
                else if (despesa.GetType() == typeof(DespesaFavorecido))
                {
                    DespesaFavorecido desp = (DespesaFavorecido)despesa;

                    try
                    {
                        Favorecido f = _context.Favorecido.Single(q => q.CodFavorecido == dto.Favorecido.Id);
                        _context.SaveChanges();
                        return(new ObjectResult(dto));
                    }
                    catch
                    {
                        ModelState.AddModelError("Favorecido", "Favorecido incorreto");
                        return(new BadRequestObjectResult(ModelState));
                    }
                }
                else if (despesa.GetType() == typeof(DespesaSopa))
                {
                    DespesaSopa desp = (DespesaSopa)despesa;
                    //nenhum outro campo para atualizar
                    try
                    {
                        _context.SaveChanges();
                        //atualiza o estoque
                        if (diferencaQuantidade > 0)
                        {
                            _estoqueManager.DarSaida(user, item, diferencaQuantidade);
                        }
                        else if (diferencaQuantidade < 0)
                        {
                            _estoqueManager.DarEntrada(user, item, -diferencaQuantidade);
                        }


                        return(new ObjectResult(dto));
                    }
                    catch
                    {
                        return(new BadRequestObjectResult(ModelState));
                    }
                }

                return(new ObjectResult(dto));
            }
            else
            {
                return(new BadRequestObjectResult(ModelState));
            }
        }
示例#3
0
        public async Task <IActionResult> Post([FromBody] ResultadoSopaDTO dto)
        {
            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 = new ResultadoSopa()
                {
                    ModeloDeReceita  = mr,
                    Descricao        = dto.Descricao,
                    Data             = dto.Data,
                    LitrosProduzidos = dto.LitrosProduzidos,
                    Itens            = new List <ResultadoSopaItem>()
                };


                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));
                }

                Dictionary <Item, double> dicEstoque = new Dictionary <Item, double>();//para atualizar o estoque
                foreach (var i in itensNovos)
                {
                    resultadoSopa.Itens.Add(new ResultadoSopaItem
                    {
                        Item       = i.item,
                        Quantidade = i.quantidade
                    });

                    dicEstoque.Add(i.item, i.quantidade);
                }



                try
                {
                    _context.ResultadoSopa.Add(resultadoSopa);

                    _context.SaveChanges();

                    Usuario usuario = await _userManager.GetUserAsync(HttpContext.User);

                    //atualiza o estoque
                    _estoqueManager.DarSaida(usuario, dicEstoque);

                    dto.Id = resultadoSopa.Id;
                    return(new ObjectResult(dto));
                }
                catch
                {
                    return(new BadRequestObjectResult(ModelState));
                }
            }

            return(new BadRequestObjectResult(ModelState));
        }