public void AtualizarPessoa(Pessoa pessoa)
        {
            var pessoaAtual = _pessoaRepository.ObterPorCodigoComPessoaCompleta(pessoa.PessoaCodigo);
            AssertionConcern.AssertArgumentNotNull(pessoaAtual, Erros.PersonDoesNotExist);

            pessoaAtual.Nome = pessoa.Nome;
            if (pessoaAtual.PessoaFisica != null)
            {
                pessoaAtual.PessoaFisica.RG = pessoa.PessoaFisica.RG;
                pessoaAtual.PessoaFisica.Sexo = pessoa.PessoaFisica.Sexo;
                pessoaAtual.PessoaFisica.EstadoCivil = _estadoCivilRepository.ObterPorCodigo(pessoa.PessoaFisica.EstadoCivil.EstadoCivilCodigo);
            }
            else
            {
                pessoaAtual.PessoaJuridica.Contato = pessoa.PessoaJuridica.Contato;
            }

            //Adiciona um novo endereço ou modifica o exitente para principal
            AtualizarEnderecoPessoa(pessoa, pessoaAtual);
            //Adiciona um meio de cominicação ou modifica o exitente para principal
            AtualizarMeioCominicacaoPessoa(pessoa, pessoaAtual, TipoComunicacaoEnum.Telefone);
            AtualizarMeioCominicacaoPessoa(pessoa, pessoaAtual, TipoComunicacaoEnum.Celular);
            AtualizarMeioCominicacaoPessoa(pessoa, pessoaAtual, TipoComunicacaoEnum.Email);
            _pessoaRepository.Atualizar(pessoaAtual);
        }
        public void CriarPessoaFisica(Pessoa pessoa)
        {
            pessoa.Validar();
            pessoa.PessoaFisica.Validar();
            //Verifica se a pessoa existe, caso exista atualiza o papel da pessoa
            var existePessoaFisica = _pessoaRepository.ObterPorCPFComPessoaCompleta(pessoa.PessoaFisica.CPF);
            //Recupera informações do banco
            var firstOrDefault = pessoa.Papeis.FirstOrDefault();
            AssertionConcern.AssertArgumentNotNull(firstOrDefault, string.Format(Erros.NullParameter, "Papeis"));
            if (firstOrDefault != null)
            {
                pessoa.Papeis = new List<Papel>() { _papelRepository.ObterPorCodigo(firstOrDefault.PapelCodigo) };
            }

            if (existePessoaFisica != null)
            {
                existePessoaFisica.Papeis.Add(pessoa.Papeis.First());
                _pessoaRepository.Atualizar(existePessoaFisica);
            }
            else
            {
                pessoa.Enderecos.First().Estado = _estadoRepository.ObterPorCodigo(pessoa.Enderecos.First().Estado.EstadoCodigo);
                pessoa.PessoaFisica.EstadoCivil =
                    _estadoCivilRepository.ObterPorCodigo(pessoa.PessoaFisica.EstadoCivil.EstadoCivilCodigo);
                _pessoaRepository.Criar(pessoa);
            }
        }
 private void AtualizarMeioCominicacaoPessoa(Pessoa pessoa, Pessoa pessoaAtual, TipoComunicacaoEnum tipoComunicacao)
 {
     //Adiciona um meio de cominicação ou modifica o exitente para principal
     var meioComunicacaoAtualizar = pessoa.MeiosComunicacao.FirstOrDefault(x => x.TipoComunicacao.Equals(tipoComunicacao));
     if (meioComunicacaoAtualizar == null && (tipoComunicacao == TipoComunicacaoEnum.Email || tipoComunicacao == TipoComunicacaoEnum.Celular))
     {
         return;
     }
     AssertionConcern.AssertArgumentNotEquals(meioComunicacaoAtualizar, null, Erros.EmptyPhone);
     if (meioComunicacaoAtualizar != null && meioComunicacaoAtualizar.MeioComunicacaoCodigo.Equals(0) &&
         !pessoaAtual.MeiosComunicacao.Any(x => x.MeioComunicacaoNome.Equals(meioComunicacaoAtualizar.MeioComunicacaoNome)))
     {
         meioComunicacaoAtualizar.Pessoa = pessoaAtual;
         var novoMeioComunicacao = _meioComunicacaoRepository.Criar(meioComunicacaoAtualizar);
         pessoaAtual.MeiosComunicacao.Add(novoMeioComunicacao);
     }
     else if (meioComunicacaoAtualizar != null && !meioComunicacaoAtualizar.MeioComunicacaoCodigo.Equals(0))
     {
         //Encotra o endereço que sera o principal
         foreach (var item in pessoaAtual.MeiosComunicacao)
         {
             item.Principal = item.MeioComunicacaoCodigo.Equals(meioComunicacaoAtualizar.MeioComunicacaoCodigo);
         }
     }
 }
 private void AtualizarEnderecoPessoa(Pessoa pessoa, Pessoa pessoaAtual)
 {
     //Adiciona um novo endereço ou modifica o exitente para principal
     var enderecoAtualizar = pessoa.Enderecos.FirstOrDefault();
     AssertionConcern.AssertArgumentNotEquals(enderecoAtualizar, null, Erros.EmptyAddress);
     if (enderecoAtualizar != null && enderecoAtualizar.EnderecoCodigo.Equals(0) &&
         !pessoaAtual.Enderecos.Any(x =>
             x.Bairro.Equals(enderecoAtualizar.Bairro) &&
             x.CEP.Equals(enderecoAtualizar.CEP) &&
             x.Cidade.Equals(enderecoAtualizar.Cidade) &&
             x.Logradouro.Equals(enderecoAtualizar.Logradouro) &&
             x.Numero.Equals(enderecoAtualizar.Numero)))
     {
         enderecoAtualizar.Pessoa = pessoaAtual;
         enderecoAtualizar.Estado = _estadoRepository.ObterPorCodigo(enderecoAtualizar.Estado.EstadoCodigo);
         var novoEndereco = _enderecoRepository.Criar(enderecoAtualizar);
         pessoaAtual.Enderecos.Add(novoEndereco);
     }
     else if (enderecoAtualizar != null && !enderecoAtualizar.EnderecoCodigo.Equals(0))
     {
         //Encotra o endereço que sera o principal
         foreach (var item in pessoaAtual.Enderecos)
         {
             item.Principal = item.EnderecoCodigo.Equals(enderecoAtualizar.EnderecoCodigo);
         }
     }
 }
 public void Deletar(Pessoa pessoa)
 {
     _context.Pessoas.Remove(pessoa);
     _context.SaveChanges();
 }
 public void Criar(Pessoa pessoa)
 {
     _context.Pessoas.Add(pessoa);
     _context.SaveChanges();
 }
 public void Atualizar(Pessoa pessoa)
 {
     _context.Entry(pessoa).State = System.Data.Entity.EntityState.Modified;
     _context.SaveChanges();
 }