public IActionResult Get(int id)
        {
            DoacaoDinheiro q = _context.DoacaoDinheiro.Include(d => d.Doador).SingleOrDefault(i => i.Id == id);

            if (q == null)
            {
                return(new NotFoundResult());
            }

            DoacaoDinheiroDTO dto = new DoacaoDinheiroDTO
            {
                Id           = q.Id,
                DataDaDoacao = q.Data,
                Descricao    = q.Descricao,
                Doador       = new DoadorDTOR()
                {
                    Id = q.Doador.CodDoador,
                    NomeRazaoSocial = q.Doador.GetType() == typeof(PessoaFisica) ? ((PessoaFisica)q.Doador).Nome : ((PessoaJuridica)q.Doador).RazaoSocial,
                    Tipo            = q.Doador.GetType() == typeof(PessoaFisica)?"PF":"PJ"
                },
                Valor = q.Valor
            };

            return(new ObjectResult(dto));
        }
        public IActionResult Post([FromBody] DoacaoDinheiroDTO 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));
                }
                //corrige fuso horario do js
                dto.DataDaDoacao = dto.DataDaDoacao.AddHours(-dto.DataDaDoacao.Hour);
                DoacaoDinheiro novo = new DoacaoDinheiro()
                {
                    Doador    = doador,
                    Data      = dto.DataDaDoacao,
                    Descricao = dto.Descricao,
                    Valor     = dto.Valor
                };
                try
                {
                    _context.DoacaoDinheiro.Add(novo);

                    _context.SaveChanges();
                    dto.Id = novo.Id;
                    return(new ObjectResult(dto));
                }
                catch {
                    return(new BadRequestObjectResult(ModelState));
                }
            }

            return(new BadRequestObjectResult(ModelState));
        }
        public IActionResult Delete(int id)
        {
            DoacaoDinheiro dd = _context.DoacaoDinheiro.Single(q => q.Id == id);

            _context.DoacaoDinheiro.Remove(dd);
            try
            {
                _context.SaveChanges();
                return(new NoContentResult());
            }
            catch
            {
                return(new BadRequestResult());
            }
        }
        public IActionResult Put(int id, [FromBody] DoacaoDinheiroDTO dto)
        {
            if (id != dto.Id)
            {
                return(new BadRequestResult());
            }
            if (ModelState.IsValid)
            {
                //corrige fuso horario do js
                dto.DataDaDoacao = dto.DataDaDoacao.AddHours(-dto.DataDaDoacao.Hour);
                DoacaoDinheiro dd = _context.DoacaoDinheiro.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));
                }

                dd.Doador    = doador;
                dd.Data      = dto.DataDaDoacao;
                dd.Descricao = dto.Descricao;
                dd.Valor     = dto.Valor;


                try
                {
                    _context.SaveChanges();
                }
                catch
                {
                    return(new BadRequestObjectResult(ModelState));
                }

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