private void btnSalvar_Click(object sender, EventArgs e)
        {
            errorProvider.Clear();

            if (ValidarFavorecido())
            {
                var favorecido = new Favorecido
                {
                    Nome           = txtNome.Text,
                    Telefone       = txtTelefone.Text,
                    TipoFavorecido = (TipoFavorecido)cbxTipoFavorecido.SelectedItem
                };

                if (txtId.Text == string.Empty)
                {
                    favorecidoController.Salvar(favorecido);
                }
                else
                {
                    favorecido.Id = Convert.ToInt64(txtId.Text);
                    favorecidoController.Atualizar(favorecido);
                }

                AtualizaDgv();
                InicializaCombobox();
                Limpar();
            }
        }
        public void Atualizar(Favorecido favorecido)
        {
            var novoFavorecido = PorId(favorecido.Id);

            novoFavorecido.Nome           = favorecido.Nome;
            novoFavorecido.Telefone       = favorecido.Telefone;
            novoFavorecido.TipoFavorecido = favorecido.TipoFavorecido;
            context.SaveChanges();
        }
        public IActionResult Get(int id)
        {
            Favorecido f = _context.Favorecido
                           .Include(q => q.ConhecimentosProfissionais)
                           .SingleOrDefault(q => q.CodFavorecido == id);

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

            //_context.ConhecimentoProficional.Where(q => q.CodFavorecido == id).Load().;
            //f.ConhecimentosProfissionais = _context.ConhecimentoProficional.Where(q => q.CodFavorecido == f.CodFavorecido).ToList();


            FavorecidoDTO dto = new FavorecidoDTO
            {
                Id             = f.CodFavorecido,
                Nome           = f.Nome,
                Apelido        = f.Apelido,
                Cpf            = f.Cpf,
                Rg             = f.Rg,
                Sexo           = f.Sexo,
                DataNascimento = f.DataNascimento,
                DataDeCadastro = f.DataDeCadastro,
            };

            _context.Familia.Include(q => q.Endereco).Where(q => q.CodFavorecido == id).Load();
            if (f.Familia != null)
            {
                dto.Celular     = f.Familia.Celular;
                dto.Email       = f.Familia.Email;
                dto.NomeFamilia = f.Familia.Nome;
                dto.Telefone    = f.Familia.Telefone;

                dto.Bairro      = f.Familia.Endereco.Bairro;
                dto.Cep         = f.Familia.Endereco.Cep;
                dto.Cidade      = f.Familia.Endereco.Cidade;
                dto.Complemento = f.Familia.Endereco.Complemento;
                dto.Estado      = f.Familia.Endereco.Estado;
                dto.Logradouro  = f.Familia.Endereco.Logradouro;
                dto.Numero      = f.Familia.Endereco.Numero;
            }

            dto.ConhecimentosProfissionais = f.ConhecimentosProfissionais.Select(q => new ConhecimentoProficionalDTO()
            {
                Text = q.Nome
            }).ToList();



            this.Response.Headers.Add("totalItems", "1");
            return(new ObjectResult(dto));
        }
        public void Favorecido_Deve_Estar_Na_Lista_De_Favorecidos()
        {
            //Arrange
            Favorecido favorecido = _favorecidos.ElementAt(new Random().Next(_favorecidos.Count() - 1));

            foreach (var favorecimento in _favorecimentos)
            {
                //Assert
                Assert.DoesNotThrow(() => favorecimento.Favorecidos.Contains(favorecido), "{0} lança uma exceção ao tentar checar se o profissional é favorecido", favorecimento.Tipo.Id);
                Assert.IsTrue(favorecimento.Favorecidos.Contains(favorecido), "{0} não obtem a lista de favorecidos corretamente", favorecimento.Tipo.Id);
            }
        }
        public void Entrega_De_Favorecido_Deve_Ser_Considerada_Entrega_De_Beneficiario()
        {
            //Arrange
            Favorecido            favorecido = _favorecidos.ElementAt(new Random().Next(_favorecidos.Count() - 1));
            IEntregaPreProcessada entrega    = LOMock.ConfiguraMockEntrega(favorecido.Profissional, DateTime.Now);

            foreach (var favorecimento in _favorecimentos)
            {
                //Assert
                Assert.DoesNotThrow(() => favorecimento.BeneficiarioDaEntregaEhFavorecido(entrega), "{0} lança uma exceção ao tentar checar se a entrega é de beneficiário", favorecimento.Tipo.Id);
                Assert.IsTrue(favorecimento.BeneficiarioDaEntregaEhFavorecido(entrega), "{0} não define corretamente se a entrega é de beneficiário", favorecimento.Tipo.Id);
            }
        }
        public IActionResult Delete(int id)
        {
            Favorecido favorecido = _context.Favorecido.Include(q => q.Familia).Single(q => q.CodFavorecido == id);

            if (favorecido.Familia != null)
            {
                Endereco end = _context.Endereco.Single(q => q.Id == favorecido.Familia.IdEndereco);
                _context.Endereco.Remove(end);
            }
            _context.Favorecido.Remove(favorecido);

            try
            {
                _context.SaveChanges();
                return(new NoContentResult());
            }
            catch
            {
                return(new BadRequestResult());
            }
        }
 public void Atualizar(Favorecido favorecido)
 {
     this.favorecidoDAO.Atualizar(favorecido);
 }
 public void Salvar(Favorecido favorecido)
 {
     this.favorecidoDAO.Salvar(favorecido);
 }
        public IActionResult Put(int id, [FromBody] FavorecidoDTO dto)
        {
            if (id != dto.Id)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            if (ModelState.IsValid)
            {
                Favorecido favorecido = _context.Favorecido.Include(q => q.Familia).ThenInclude(q => q.Endereco).SingleOrDefault(q => q.CodFavorecido == id);
                if (favorecido == null)
                {
                    return(new BadRequestResult());
                }


                favorecido.Nome           = dto.Nome;
                favorecido.Cpf            = dto.Cpf;
                favorecido.Rg             = dto.Rg;
                favorecido.Sexo           = dto.Sexo;
                favorecido.DataNascimento = dto.DataNascimento;
                favorecido.Apelido        = dto.Apelido;

                if (dto.NomeFamilia != null)
                {
                    if (favorecido.Familia == null)
                    {
                        favorecido.Familia          = new Familia();
                        favorecido.Familia.Endereco = new Endereco();
                    }


                    favorecido.Familia.Nome     = dto.NomeFamilia;
                    favorecido.Familia.Celular  = dto.Celular;
                    favorecido.Familia.Email    = dto.Email;
                    favorecido.Familia.Telefone = dto.Telefone;

                    if (favorecido.Familia.Endereco == null)
                    {
                        favorecido.Familia.Endereco = new Endereco();
                    }

                    favorecido.Familia.Endereco.Bairro      = dto.Bairro == null ? " " : dto.Bairro;
                    favorecido.Familia.Endereco.Cep         = dto.Cep == null ? " " : dto.Cep;
                    favorecido.Familia.Endereco.Cidade      = dto.Cidade == null ? " " : dto.Cidade;
                    favorecido.Familia.Endereco.Complemento = dto.Complemento == null ? " " : dto.Complemento;
                    favorecido.Familia.Endereco.Estado      = dto.Estado == null ? " " : dto.Estado;
                    favorecido.Familia.Endereco.Logradouro  = dto.Logradouro == null ? " " : dto.Logradouro;
                    favorecido.Familia.Endereco.Numero      = dto.Numero == null ? " " : dto.Numero;
                }

                _context.ConhecimentoProficional.Where(q => q.CodFavorecido == id).Load();

                if (favorecido.ConhecimentosProfissionais == null)
                {
                    favorecido.ConhecimentosProfissionais = new List <ConhecimentoProficional>();
                }

                if (dto.ConhecimentosProfissionais == null)
                {
                    dto.ConhecimentosProfissionais = new List <ConhecimentoProficionalDTO>();
                }

                var entraram = dto.ConhecimentosProfissionais.Where(q => !favorecido.ConhecimentosProfissionais.Any(x => x.Nome == q.Text));
                var sairam   = favorecido.ConhecimentosProfissionais.Where(q => !dto.ConhecimentosProfissionais.Any(x => x.Text == q.Nome)).ToArray();

                foreach (var entrou in entraram)
                {
                    ConhecimentoProficional cp = new ConhecimentoProficional()
                    {
                        Nome = entrou.Text, CodFavorecido = favorecido.CodFavorecido
                    };
                    _context.ConhecimentoProficional.Add(cp);
                    favorecido.ConhecimentosProfissionais.Add(cp);
                }
                foreach (var saiu in sairam)
                {
                    favorecido.ConhecimentosProfissionais.Remove(saiu);
                    _context.ConhecimentoProficional.Remove(saiu);
                }



                try
                {
                    _context.SaveChanges();
                }
                catch (Exception e)
                {
                    if (e.InnerException.Message.Contains("Cpf"))
                    {
                        ModelState.AddModelError("Cpf", "Este CPF ja está cadastrado");
                    }
                    return(new BadRequestObjectResult(ModelState));
                }



                return(new ObjectResult(dto));
            }
            else
            {
                return(new BadRequestObjectResult(ModelState));
            }
        }
        public async Task <IActionResult> Post([FromBody] FavorecidoDTO v)
        {
            if (ModelState.IsValid)
            {
                Usuario user = await _userManager.GetUserAsync(HttpContext.User);

                Favorecido favorecido = new Favorecido
                {
                    Nome           = v.Nome,
                    Apelido        = v.Apelido,
                    Cpf            = v.Cpf,
                    Rg             = v.Rg,
                    Sexo           = v.Sexo,
                    DataNascimento = v.DataNascimento,
                    DataDeCadastro = DateTime.Today,
                    IdUsuario      = user.Id,
                };

                if (v.NomeFamilia != null)
                {
                    favorecido.Familia = new Familia()
                    {
                        Nome     = v.NomeFamilia,
                        Celular  = v.Celular,
                        Email    = v.Email,
                        Telefone = v.Telefone
                    };
                    favorecido.Familia.Endereco = new Endereco()
                    {
                        Bairro      = v.Bairro == null?"": v.Bairro,
                        Cep         = v.Cep == null ? "" : v.Cep,
                        Cidade      = v.Cidade == null ? "" : v.Cidade,
                        Complemento = v.Complemento == null ? "" : v.Complemento,
                        Estado      = v.Estado == null ? "" : v.Estado,
                        Logradouro  = v.Logradouro == null ? "" : v.Logradouro,
                        Numero      = v.Numero == null ? "" : v.Numero
                    };
                }

                if (v.ConhecimentosProfissionais != null)
                {
                    favorecido.ConhecimentosProfissionais = new List <ConhecimentoProficional>();
                    foreach (var cp in v.ConhecimentosProfissionais)
                    {
                        ConhecimentoProficional conhecimento = new ConhecimentoProficional()
                        {
                            Favorecido = favorecido,
                            Nome       = cp.Text
                        };
                        favorecido.ConhecimentosProfissionais.Add(conhecimento);
                        _context.ConhecimentoProficional.Add(conhecimento);
                    }
                }



                _context.Favorecido.Add(favorecido);
                try
                {
                    _context.SaveChanges();
                    v.Id = favorecido.CodFavorecido;
                }
                catch (Exception e)
                {
                    if (e.InnerException.Message.Contains("Cpf"))
                    {
                        ModelState.AddModelError("Cpf", "Este CPF ja está cadastrado");
                    }
                    return(new BadRequestObjectResult(ModelState));
                }

                return(new ObjectResult(v));
            }
            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));
            }
        }
        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 void Salvar(Favorecido favorecido)
 {
     context.Favorecidos.Add(favorecido);
     context.SaveChanges();
 }