/// <summary>
        /// Este método retorna uma lista de assistido
        /// </summary>
        /// <param name="assistidoAtivado"></param>
        /// <returns></returns>
        public List<Assistido> Listar(bool? assistidoAtivado)
        {
            SqlCommand comando = new SqlCommand();

            List<Assistido> assistidoLista = new List<Assistido>();
            Assistido objAssistido = null;
            PessoaDados objPessoaDados = new PessoaDados();
            ContatoDados objContatoDados = new ContatoDados();

            string sql = @"select * from Assistido A inner join Pessoa P ON A.CodigoAssistido = P.CodigoPessoa"; 
                                                             
            if (assistidoAtivado.HasValue)
            {
                sql += " where Ativo = @ativo";
                SqlParameter parametroAtivo = new SqlParameter("@ativo", System.Data.DbType.Boolean);
                parametroAtivo.Value = assistidoAtivado;
                comando.Parameters.Add(parametroAtivo);
            }

            comando.Connection = base.Conectar();
            comando.CommandText = sql;
            
            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

            while (leitorDados.Read())
            {
                objAssistido = new Assistido();
                
                //Dados Tabela Pessoa
                objAssistido.CodigoPessoa = Convert.ToInt32(leitorDados["CodigoPessoa"]); 
                if (leitorDados["CodigoContato"] != DBNull.Value)
                    objAssistido.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                if (objAssistido.Contato_CodigoContato.HasValue)
                    objAssistido.Contato = objContatoDados.Obter(objAssistido.Contato_CodigoContato.Value);
                objAssistido.CodigoCasaLar = Convert.ToInt32(leitorDados["CodigoCasaLar"]);
                objAssistido.Nome = leitorDados["Nome"].ToString();
                objAssistido.Sexo = leitorDados["Sexo"].ToString();
                objAssistido.CPF = leitorDados["CPF"].ToString();
                objAssistido.RG = leitorDados["RG"].ToString();
                objAssistido.TituloEleitor = leitorDados["TituloEleitor"].ToString();
                objAssistido.DataNascimento = Convert.ToDateTime(leitorDados["DataNascimento"]);
                objAssistido.Nacionalidade = leitorDados["Nacionalidade"].ToString();
                objAssistido.Naturalidade = leitorDados["Naturalidade"].ToString();
                objAssistido.Foto = leitorDados["Foto"].ToString();
                objAssistido.TipoPessoa = leitorDados["TipoPessoa"].ToString();
                objAssistido.Ativo = Convert.ToBoolean(leitorDados["Ativo"]);

                //Dados Tabela Assistido
                objAssistido.CodigoAssistido = Convert.ToInt32(leitorDados["CodigoAssistido"]);
                objAssistido.StatusAssistido = leitorDados["StatusAssistido"].ToString();
                if (leitorDados["CertidaoNascimento"] != DBNull.Value)
                    objAssistido.CertidaoNascimento = leitorDados["CertidaoNascimento"].ToString();
                objAssistido.DataEntrada = Convert.ToDateTime(leitorDados["DataEntrada"]);
                if (leitorDados["DataSaida"] != DBNull.Value)
                    objAssistido.DataSaida = Convert.ToDateTime(leitorDados["DataSaida"]);
                objAssistido.EstadoSaude = leitorDados["EstadoSaude"].ToString();
                objAssistido.Peso = Convert.ToDecimal(leitorDados["Peso"]);
                objAssistido.Etnia = leitorDados["Etnia"].ToString();
                objAssistido.Altura = Convert.ToDecimal(leitorDados["Altura"]);
                objAssistido.TamanhoCamisa = leitorDados["TamCamisa"].ToString();
                objAssistido.TamanhoCalca = leitorDados["TamCalca"].ToString();
                objAssistido.TamanhoCalcado = leitorDados["TamCalcado"].ToString();
                objAssistido.Dormitorio = leitorDados["Dormitorio"].ToString(); ;
                objAssistido.Deficiente = leitorDados["Deficiente"].ToString();
                objAssistido.Hobby = leitorDados["Hobby"].ToString();
                objAssistido.HistoricoVida = leitorDados["HistoricoVida"].ToString();
                objAssistido.Pai = leitorDados["NomePai"].ToString();
                objAssistido.Mae = leitorDados["NomeMae"].ToString();
                objAssistido.PaiVivo = leitorDados["PaiVivo"].ToString();
                objAssistido.MaeViva = leitorDados["MaeViva"].ToString();
                objAssistido.CPFPai = leitorDados["CPFPai"].ToString();
                objAssistido.CPFMae = leitorDados["CPFMae"].ToString();
                objAssistido.RGPai = leitorDados["RGPai"].ToString();
                objAssistido.RGMae = leitorDados["RGMae"].ToString();
                objAssistido.TelefonePai = leitorDados["TelefonePai"].ToString();
                objAssistido.TelefoneMae = leitorDados["TelefoneMae"].ToString();
                if (leitorDados["QtdIrmaos"] != DBNull.Value)
                    objAssistido.QtdIrmaos = Convert.ToInt32(leitorDados["QtdIrmaos"]);
                objAssistido.ResponsavelLegal = leitorDados["NomeResponsavel"].ToString();
                objAssistido.CPFResponsavel = leitorDados["CpfResponsavel"].ToString();
                
                if (leitorDados["CodigoContatoResponsavel"] != DBNull.Value)
                    objAssistido.CodigoContatoResponsavel = Convert.ToInt32(leitorDados["CodigoContatoResponsavel"]);
                else
                    objAssistido.CodigoContatoResponsavel = null;
                
                //Obtém dados de Contato do Responsável
                if (objAssistido.CodigoContatoResponsavel.HasValue)
                {
                    objAssistido.ContatoResponsavel = objContatoDados.Obter(objAssistido.CodigoContatoResponsavel.Value);
                }

                assistidoLista.Add(objAssistido);
            }

            leitorDados.Close();
            leitorDados.Dispose();

            return assistidoLista;
        }
        /// <summary>
        /// Consulta os assistido pelos dados contidos no ConsultarAssistidoDTO
        /// </summary>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public List<Assistido> Consultar(ConsultarAssistidoDTO filtro)
        {
            SqlCommand comando = new SqlCommand();
            comando.Connection = base.Conectar();

            SqlDataReader leitorDados;

            String sql = "select * from Assistido A inner join Pessoa P on A.CodigoAssistido = P.CodigoPessoa where ";

            SqlParameter paramCodigoAssistido = new SqlParameter("@codigoAssistido", System.Data.DbType.Int32);
            if (filtro.CodigoAssisitoValor.HasValue)
            {
                paramCodigoAssistido.Value = filtro.CodigoAssisitoValor.Value;
                sql += @"A.CodigoAssistido = @codigoAssistido and ";
            }
            else
                paramCodigoAssistido.Value = DBNull.Value;

            SqlParameter paramNome = new SqlParameter("@nome", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(filtro.NomeAssistidoValor))
            {
                paramNome.Value = "%" + filtro.NomeAssistidoValor + "%";
                sql += @"P.Nome like @nome and ";
            }
            else
                paramNome.Value = DBNull.Value;

            SqlParameter paramStatusAssistido = new SqlParameter("@statusAssistido", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(filtro.StatusAssistidoValor))
            {
                paramStatusAssistido.Value = filtro.StatusAssistidoValor;
                sql += "A.StatusAssistido = @statusAssistido and ";
            }
            else
                paramStatusAssistido.Value = DBNull.Value;

            SqlParameter paramStatusCadastro = new SqlParameter("@statusCadastro", System.Data.DbType.Boolean);
            if (filtro.StatusCadastroValor.HasValue)
            {
                paramStatusCadastro.Value = filtro.StatusCadastroValor.Value;
                sql += "P.Ativo = @statusCadastro and ";
            }
            else
                paramStatusCadastro.Value = DBNull.Value;

            SqlParameter paramEstadoSaude = new SqlParameter("@estadoSaude", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(filtro.EstadoSaudeValor))
            {
                paramEstadoSaude.Value = filtro.EstadoSaudeValor;
                sql += "EstadoSaude = @estadoSaude and ";
            }
            else
                paramEstadoSaude.Value = DBNull.Value;

            SqlParameter paramDataEntrada = new SqlParameter("@dataEntrada", System.Data.DbType.DateTime);
            if (filtro.DataEntradaValor.HasValue)
            {
                paramDataEntrada.Value = filtro.DataEntradaValor.Value;
                sql += "DataEntrada >= @dataEntrada and "; 
            }
            else
                paramDataEntrada.Value = DBNull.Value;

            SqlParameter paramDataSaida = new SqlParameter("@dataSaida", System.Data.DbType.DateTime);
            if (filtro.DataSaidaValor.HasValue)
            {
                paramDataSaida.Value = filtro.DataSaidaValor.Value;
                sql += "(DataSaida <= @dataSaida or DataSaida is null) and ";
            }
            else
                paramDataSaida.Value = DBNull.Value;

            
            if (sql.EndsWith("where "))
                sql = sql.Replace("where ", "");
            else if (sql.EndsWith("and "))
                sql = sql.Remove(sql.Length - 4);
            
            comando.CommandText = sql;
            comando.CommandType = System.Data.CommandType.Text;

            comando.Parameters.Add(paramCodigoAssistido);
            comando.Parameters.Add(paramNome);
            comando.Parameters.Add(paramStatusAssistido);
            comando.Parameters.Add(paramStatusCadastro);
            comando.Parameters.Add(paramEstadoSaude);
            comando.Parameters.Add(paramDataEntrada);
            comando.Parameters.Add(paramDataSaida);

            leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

            List<Assistido> assistidoLista = new List<Assistido>();
            Assistido objAssistido;
            ContatoDados objContatoDados = new ContatoDados();

            while (leitorDados.Read())
            {
                objAssistido = new Assistido();

                //Dados Tabela Pessoa
                objAssistido.CodigoPessoa = Convert.ToInt32(leitorDados["CodigoPessoa"]);
                if (leitorDados["CodigoContato"] != DBNull.Value)
                    objAssistido.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                if (objAssistido.Contato_CodigoContato.HasValue)
                    objAssistido.Contato = objContatoDados.Obter(objAssistido.Contato_CodigoContato.Value);
                objAssistido.CodigoCasaLar = Convert.ToInt32(leitorDados["CodigoCasaLar"]);
                objAssistido.Nome = leitorDados["Nome"].ToString();
                objAssistido.Sexo = leitorDados["Sexo"].ToString();
                objAssistido.CPF = leitorDados["CPF"].ToString();
                objAssistido.RG = leitorDados["RG"].ToString();
                objAssistido.TituloEleitor = leitorDados["TituloEleitor"].ToString();
                objAssistido.DataNascimento = Convert.ToDateTime(leitorDados["DataNascimento"]);
                objAssistido.Nacionalidade = leitorDados["Nacionalidade"].ToString();
                objAssistido.Naturalidade = leitorDados["Naturalidade"].ToString();
                objAssistido.Foto = leitorDados["Foto"].ToString();
                objAssistido.TipoPessoa = leitorDados["TipoPessoa"].ToString();
                objAssistido.Ativo = Convert.ToBoolean(leitorDados["Ativo"]);

                //Dados Tabela Assistido
                objAssistido.CodigoAssistido = Convert.ToInt32(leitorDados["CodigoAssistido"]);
                objAssistido.StatusAssistido = leitorDados["StatusAssistido"].ToString();
                if (leitorDados["CertidaoNascimento"] != DBNull.Value)
                    objAssistido.CertidaoNascimento = leitorDados["CertidaoNascimento"].ToString();
                objAssistido.DataEntrada = Convert.ToDateTime(leitorDados["DataEntrada"]);
                if (leitorDados["DataSaida"] != DBNull.Value)
                    objAssistido.DataSaida = Convert.ToDateTime(leitorDados["DataSaida"]); ;
                objAssistido.EstadoSaude = leitorDados["EstadoSaude"].ToString();
                objAssistido.Peso = Convert.ToDecimal(leitorDados["Peso"]);
                objAssistido.Etnia = leitorDados["Etnia"].ToString();
                objAssistido.Altura = Convert.ToDecimal(leitorDados["Altura"]);
                objAssistido.TamanhoCamisa = leitorDados["TamCamisa"].ToString();
                objAssistido.TamanhoCalca = leitorDados["TamCalca"].ToString();
                objAssistido.TamanhoCalcado = leitorDados["TamCalcado"].ToString();
                objAssistido.Dormitorio = leitorDados["Dormitorio"].ToString(); ;
                objAssistido.Deficiente = leitorDados["Deficiente"].ToString();
                objAssistido.Hobby = leitorDados["Hobby"].ToString();
                objAssistido.HistoricoVida = leitorDados["HistoricoVida"].ToString();
                objAssistido.Pai = leitorDados["NomePai"].ToString();
                objAssistido.Mae = leitorDados["NomeMae"].ToString();
                objAssistido.PaiVivo = leitorDados["PaiVivo"].ToString();
                objAssistido.MaeViva = leitorDados["MaeViva"].ToString();
                objAssistido.CPFPai = leitorDados["CPFPai"].ToString();
                objAssistido.CPFMae = leitorDados["CPFMae"].ToString();
                objAssistido.RGPai = leitorDados["RGPai"].ToString();
                objAssistido.RGMae = leitorDados["RGMae"].ToString();
                objAssistido.TelefonePai = leitorDados["TelefonePai"].ToString();
                objAssistido.TelefoneMae = leitorDados["TelefoneMae"].ToString();
                if (leitorDados["QtdIrmaos"] != DBNull.Value)
                    objAssistido.QtdIrmaos = Convert.ToInt32(leitorDados["QtdIrmaos"]);
                objAssistido.ResponsavelLegal = leitorDados["NomeResponsavel"].ToString();
                objAssistido.CPFResponsavel = leitorDados["CpfResponsavel"].ToString();

                if (leitorDados["CodigoContatoResponsavel"] != DBNull.Value)
                    objAssistido.CodigoContatoResponsavel = Convert.ToInt32(leitorDados["CodigoContatoResponsavel"]);
                else
                    objAssistido.CodigoContatoResponsavel = null;

                //Obtém dados de Contato do Responsável
                if (objAssistido.CodigoContatoResponsavel.HasValue)
                {
                    objAssistido.ContatoResponsavel = objContatoDados.Obter(objAssistido.CodigoContatoResponsavel.Value);
                }
                EscolarDados objEscolarDados = new EscolarDados();
                //objAssistido.Escolar = objEscolarDados.Ob

                assistidoLista.Add(objAssistido);
            }
            
            return assistidoLista;
        }
        /// <summary>
        /// Este método cadastro ou atualiza um assistido
        /// </summary>
        /// <param name="objAssistido"></param>
        /// <returns></returns>
        public Assistido Salvar(Assistido objAssistido)
        {
            PessoaDados objPessoaDados = new PessoaDados();
            objPessoaDados.Salvar(objAssistido);

            SqlCommand comando = new SqlCommand();
            comando.Connection = base.Conectar();

            if (!objAssistido.CodigoAssistido.HasValue)
            {
                objAssistido.CodigoAssistido = objAssistido.CodigoPessoa;

                comando.CommandText =
                    @"
                    INSERT INTO Assistido
                         (CodigoAssistido, StatusAssistido, CertidaoNascimento, DataEntrada, DataSaida, EstadoSaude, 
                          Peso, Etnia, Altura, TamCamisa, TamCalca, TamCalcado, Dormitorio, Deficiente, Hobby, HistoricoVida, 
                          NomePai, NomeMae, PaiVivo, MaeViva, CPFPai, CPFMae, RGPai, RGMae, TelefonePai, TelefoneMae,  
                          QtdIrmaos, NomeResponsavel, CPFResponsavel, CodigoContatoResponsavel)
                    VALUES
                         (@codigoAssistido, @statusAssistido, @certidaoNascimento, @dataEntrada, @dataSaida, @estadoSaude,
                          @peso, @Etnia, @altura, @tamCamisa, @tamCalca, @tamCalcado, @dormitorio, @Deficiente, @Hobby, @historicoVida,
                          @nomePai, @nomeMae, @paiVivo, @maeViva, @cpfPai, @cpfMae, @rgPai, @rgMae, @telefonePai, @telefoneMae,
                          @qtdIrmaos, @nomeResponsavel, @cpfResponsavel, @codigoContatoResponsavel)";
            }
            else
            {
                comando.CommandText =
                    @"
                    UPDATE Assistido
                    SET  StatusAssistido = @statusAssistido, CertidaoNascimento = @certidaoNascimento, DataEntrada = @dataEntrada, 
                         DataSaida = @dataSaida, EstadoSaude = @estadoSaude, Peso = @peso, Etnia = @Etnia, Altura = @altura, TamCamisa = @tamCamisa, 
                         TamCalca = @tamCalca, TamCalcado = @tamCalcado, Dormitorio = @dormitorio, Deficiente = @Deficiente, Hobby = @Hobby,
                         HistoricoVida = @historicoVida, NomePai = @nomePai, NomeMae = @nomeMae, PaiVivo = @paiVivo,  MaeViva = @maeViva, CPFPai = @cpfPai, 
                         CPFMae = @cpfMae, RGPai = @rgPai, RGMae = @rgMae, TelefonePai = @telefonePai, TelefoneMae = @telefoneMae, 
                         QtdIrmaos = @qtdIrmaos, NomeResponsavel = @nomeResponsavel, CPFResponsavel = @cpfResponsavel, CodigoContatoResponsavel = @codigoContatoResponsavel
                    WHERE CodigoAssistido = @codigoAssistido";

            }

            comando.CommandType = System.Data.CommandType.Text;
            if (objAssistido.CodigoAssistido.HasValue)
            {
                SqlParameter parametroCodigoAssistido = new SqlParameter("@codigoAssistido", objAssistido.CodigoAssistido.Value);
                parametroCodigoAssistido.DbType = System.Data.DbType.Int32;
                comando.Parameters.Add(parametroCodigoAssistido);
            }

            SqlParameter parametroStatusAssistido = new SqlParameter("@statusAssistido", objAssistido.StatusAssistido);
            parametroStatusAssistido.DbType = System.Data.DbType.String;

            SqlParameter parametroCertidaoNascimento = new SqlParameter("@certidaoNascimento", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.CertidaoNascimento))
                parametroCertidaoNascimento.Value = objAssistido.CertidaoNascimento;
            else
                parametroCertidaoNascimento.Value = DBNull.Value;

            SqlParameter parametroDataEntrada = new SqlParameter("@dataEntrada", objAssistido.DataEntrada.Value);
            parametroDataEntrada.DbType = System.Data.DbType.DateTime;

            SqlParameter parametroDataSaida = new SqlParameter("@dataSaida", System.Data.DbType.DateTime);
            if (objAssistido.DataSaida.HasValue)
                parametroDataSaida.Value = objAssistido.DataSaida.Value;
            else
                parametroDataSaida.Value = DBNull.Value;

            SqlParameter parametroEstadoSaude = new SqlParameter("@estadoSaude", objAssistido.EstadoSaude);
            parametroEstadoSaude.DbType = System.Data.DbType.String;

            SqlParameter parametroPeso = new SqlParameter("@peso", objAssistido.Peso);
            parametroPeso.DbType = System.Data.DbType.Decimal;

            SqlParameter parametroEtnia = new SqlParameter("@Etnia", objAssistido.Etnia);
            parametroEtnia.DbType = System.Data.DbType.String;

            SqlParameter parametroAltura = new SqlParameter("@altura", objAssistido.Altura);
            parametroAltura.DbType = System.Data.DbType.Decimal;

            SqlParameter parametroTamCamisa = new SqlParameter("@tamCamisa", objAssistido.TamanhoCamisa);
            parametroTamCamisa.DbType = System.Data.DbType.String;

            SqlParameter parametroTamCalca = new SqlParameter("@tamCalca", objAssistido.TamanhoCalca);
            parametroTamCalca.DbType = System.Data.DbType.String;

            SqlParameter parametroTamCalcado = new SqlParameter("@tamCalcado", objAssistido.TamanhoCalcado);
            parametroTamCalcado.DbType = System.Data.DbType.String;

            SqlParameter parametroDormitorio = new SqlParameter("@dormitorio", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.Dormitorio))
                parametroDormitorio.Value= objAssistido.Dormitorio;
            else
                parametroDormitorio.Value= DBNull.Value;

            SqlParameter parametroDeficiente = new SqlParameter("@deficiente", objAssistido.Deficiente);
            parametroDeficiente.DbType = System.Data.DbType.String ;

            SqlParameter parametroHobby = new SqlParameter("@hobby", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.Hobby))
                parametroHobby.Value = objAssistido.Hobby;
            else
                parametroHobby.Value = DBNull.Value;

            SqlParameter parametroHistoricoVida = new SqlParameter("@historicoVida", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.HistoricoVida))
                parametroHistoricoVida.Value = objAssistido.HistoricoVida;
            else
                parametroHistoricoVida.Value = DBNull.Value;

            //Dados Pais
            SqlParameter parametroNomePai = new SqlParameter("@nomePai", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.Pai))
                parametroNomePai.Value = objAssistido.Pai;
            else
                parametroNomePai.Value = DBNull.Value;

            SqlParameter parametroNomeMae = new SqlParameter("@nomeMae", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.Mae))
                parametroNomeMae.Value = objAssistido.Mae;
            else
                parametroNomeMae.Value = DBNull.Value;

            SqlParameter parametroPaiVivo = new SqlParameter("@paiVivo", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.PaiVivo))
                parametroPaiVivo.Value = objAssistido.PaiVivo;
            else
                parametroPaiVivo.Value = DBNull.Value;

            SqlParameter parametroMaeViva = new SqlParameter("@maeViva", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.MaeViva))
                parametroMaeViva.Value = objAssistido.MaeViva;
            else
                parametroMaeViva.Value = DBNull.Value;

            SqlParameter parametroCPFPai = new SqlParameter("@cpfPai", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.CPFPai))
                parametroCPFPai.Value = objAssistido.CPFPai;
            else
                parametroCPFPai.Value = objAssistido.CPFPai;

            SqlParameter parametroCPFMae = new SqlParameter("@cpfMae", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.CPFMae))
                parametroCPFMae.Value = objAssistido.CPFMae;
            else
                parametroCPFMae.Value = DBNull.Value;

            SqlParameter parametroRGPai = new SqlParameter("@rgPai", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.RGPai))
                parametroRGPai.Value = objAssistido.RGPai;
            else
                parametroRGPai.Value = DBNull.Value;

            SqlParameter parametroRGMae = new SqlParameter("@rgMae", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.RGMae))
                parametroRGMae.Value = objAssistido.RGMae;
            else
                parametroRGMae.Value = DBNull.Value;

            SqlParameter parametroTelefonePai = new SqlParameter("@telefonePai", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.TelefonePai))
                parametroTelefonePai.Value = objAssistido.TelefonePai;
            else
                 parametroTelefonePai.Value = DBNull.Value;

            SqlParameter parametroTelefoneMae = new SqlParameter("@telefoneMae", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objAssistido.TelefoneMae))
                parametroTelefoneMae.Value = objAssistido.TelefoneMae;
            else
                parametroTelefoneMae.Value = DBNull.Value;

            SqlParameter parametroQtdIrmaos = new SqlParameter("@qtdIrmaos", System.Data.DbType.Int32);
            if(objAssistido.QtdIrmaos.HasValue)
                parametroQtdIrmaos.Value = objAssistido.QtdIrmaos;    
            else
                parametroQtdIrmaos.Value = DBNull.Value; ;    
            

            //Dados Responsavel
            SqlParameter parametroNomeResponsavel = new SqlParameter("@nomeResponsavel", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.ResponsavelLegal))
                parametroNomeResponsavel.Value = objAssistido.ResponsavelLegal;
            else
                parametroNomeResponsavel.Value = DBNull.Value;

            SqlParameter parametroCPFResponsavel = new SqlParameter("@cpfResponsavel", System.Data.DbType.String);
            if(!String.IsNullOrEmpty(objAssistido.ResponsavelLegal))
                parametroCPFResponsavel.Value = objAssistido.CPFResponsavel;
            else
                parametroCPFResponsavel.Value = DBNull.Value;

            //Adiciona os dados de contato do Responsavel na tabela Contato
            //TODO: Maycon verificar se os campos de contato do responsável foram preenchidos
            if (objAssistido.ContatoResponsavel != null)
            {
                ContatoDados objContatoDados = new ContatoDados();
                objAssistido.ContatoResponsavel = objContatoDados.Salvar(objAssistido.ContatoResponsavel);
                objAssistido.CodigoContatoResponsavel = objAssistido.ContatoResponsavel.CodigoContato;
            }
            
            SqlParameter parametroCodigoContatoResponsavel = new SqlParameter("@codigoContatoResponsavel", System.Data.DbType.String);
            if(objAssistido.CodigoContatoResponsavel.HasValue)
                parametroCodigoContatoResponsavel.Value = objAssistido.CodigoContatoResponsavel.Value;
            else
                parametroCodigoContatoResponsavel.Value = DBNull.Value;

            //Parametros
            comando.Parameters.Add(parametroStatusAssistido);
            comando.Parameters.Add(parametroDataEntrada);
            comando.Parameters.Add(parametroDataSaida);
            comando.Parameters.Add(parametroEstadoSaude);
            comando.Parameters.Add(parametroCertidaoNascimento);
            comando.Parameters.Add(parametroPeso);
            comando.Parameters.Add(parametroAltura);
            comando.Parameters.Add(parametroEtnia);
            comando.Parameters.Add(parametroTamCalca);
            comando.Parameters.Add(parametroTamCalcado);
            comando.Parameters.Add(parametroTamCamisa);
            comando.Parameters.Add(parametroDormitorio);
            comando.Parameters.Add(parametroDeficiente);
            comando.Parameters.Add(parametroHobby);
            comando.Parameters.Add(parametroHistoricoVida);

            comando.Parameters.Add(parametroNomePai);
            comando.Parameters.Add(parametroPaiVivo);
            comando.Parameters.Add(parametroNomeMae);
            comando.Parameters.Add(parametroMaeViva);
            comando.Parameters.Add(parametroCPFPai);
            comando.Parameters.Add(parametroCPFMae);
            comando.Parameters.Add(parametroRGPai);
            comando.Parameters.Add(parametroRGMae);
            comando.Parameters.Add(parametroTelefonePai);
            comando.Parameters.Add(parametroTelefoneMae);
            comando.Parameters.Add(parametroQtdIrmaos);
            comando.Parameters.Add(parametroNomeResponsavel);
            comando.Parameters.Add(parametroCPFResponsavel);
            comando.Parameters.Add(parametroCodigoContatoResponsavel);

            comando.ExecuteNonQuery();

            return objAssistido;

        }
        /// <summary>
        /// Obtém os assistidos pelo Código do Assistido.
        /// </summary>
        /// <param name="codigoAssistido"></param>
        /// <returns></returns>
        public Assistido Obter(int codigoAssistido)
        {
            PessoaDados objPessoaDados = new PessoaDados();
            AssistidoAdaptador objAssistidoAdaptador = new AssistidoAdaptador(); 
            Pessoa objPessoa = null;
            Assistido objAssistido = null;

            objPessoa = objPessoaDados.Obter(codigoAssistido);
            objAssistido = objAssistidoAdaptador.AdaptarPessoaParaAssistido(objPessoa);

            SqlCommand comando = new SqlCommand("select * from Assistido where CodigoAssistido = @codigoAssistido", base.Conectar());

            SqlParameter parametroCodigoAssistido = new SqlParameter("@codigoAssistido", codigoAssistido);
            parametroCodigoAssistido.DbType = System.Data.DbType.Int32;
            comando.Parameters.Add(parametroCodigoAssistido);

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            

            if (leitorDados.Read())
            {
                //(CodigoAssistido, StatusAssistido, CertidaoNascimento, DataEntrada, DataSaida, EstadoSaude, 
                //          Peso, Etnia, Altura, TamCamisa, TamCalca, TamCalcado, Dormitorio, Deficiente, Hobby, HistoricoVida, 
                //          NomePai, NomeMae, PaiVivo, MaeViva, CPFPai, CPFMae, RGPai, RGMae, TelefonePai, TelefoneMae,  
                //          QtdIrmaos, NomeResponsavel, CPFResponsavel, CodigoContatoResponsavel)

                objAssistido.CodigoAssistido = codigoAssistido;
                objAssistido.StatusAssistido = leitorDados["StatusAssistido"].ToString();
                if (leitorDados["CertidaoNascimento"] != DBNull.Value)
                    objAssistido.CertidaoNascimento = leitorDados["CertidaoNascimento"].ToString();
                objAssistido.DataEntrada = Convert.ToDateTime(leitorDados["DataEntrada"]);
                if (leitorDados["DataSaida"] != DBNull.Value)
                    objAssistido.DataSaida = Convert.ToDateTime(leitorDados["DataSaida"]); ;
                objAssistido.EstadoSaude = leitorDados["EstadoSaude"].ToString();
                objAssistido.Peso = Convert.ToDecimal(leitorDados["Peso"]);
                objAssistido.Etnia = leitorDados["Etnia"].ToString();
                objAssistido.Altura = Convert.ToDecimal(leitorDados["Altura"]);
                objAssistido.TamanhoCamisa = leitorDados["TamCamisa"].ToString();
                objAssistido.TamanhoCalca = leitorDados["TamCalca"].ToString();
                objAssistido.TamanhoCalcado = leitorDados["TamCalcado"].ToString();
                objAssistido.Dormitorio = leitorDados["Dormitorio"].ToString(); ;
                objAssistido.Deficiente = leitorDados["Deficiente"].ToString();
                objAssistido.Hobby = leitorDados["Hobby"].ToString();
                objAssistido.HistoricoVida = leitorDados["HistoricoVida"].ToString();
                objAssistido.Pai = leitorDados["NomePai"].ToString();
                objAssistido.Mae = leitorDados["NomeMae"].ToString();
                objAssistido.PaiVivo = leitorDados["PaiVivo"].ToString();
                objAssistido.MaeViva = leitorDados["MaeViva"].ToString();
                objAssistido.CPFPai = leitorDados["CPFPai"].ToString();
                objAssistido.CPFMae = leitorDados["CPFMae"].ToString();
                objAssistido.RGPai = leitorDados["RGPai"].ToString();
                objAssistido.RGMae = leitorDados["RGMae"].ToString();
                objAssistido.TelefonePai = leitorDados["TelefonePai"].ToString();
                objAssistido.TelefoneMae = leitorDados["TelefoneMae"].ToString();
                if (leitorDados["QtdIrmaos"] != DBNull.Value)
                    objAssistido.QtdIrmaos = Convert.ToInt32(leitorDados["QtdIrmaos"]);
                objAssistido.ResponsavelLegal = leitorDados["NomeResponsavel"].ToString();
                objAssistido.CPFResponsavel = leitorDados["CpfResponsavel"].ToString();
                if (leitorDados["CodigoContatoResponsavel"] != DBNull.Value)
                    objAssistido.CodigoContatoResponsavel = Convert.ToInt32(leitorDados["CodigoContatoResponsavel"]);
                else
                    objAssistido.CodigoContatoResponsavel = null;
            }

            //Todo: MAYCON Pegar os dados das tabelas auxiliares
            if (objAssistido.CodigoContatoResponsavel.HasValue)
            {
                ContatoDados objContatoDados = new ContatoDados();
                objAssistido.ContatoResponsavel = objContatoDados.Obter(objAssistido.CodigoContatoResponsavel.Value);
            }

            leitorDados.Close();
            leitorDados.Dispose();

            return objAssistido;
        }
        /// <summary>
        /// Obtém uma Pessoa pelo Código da Pessoa
        /// </summary>
        /// <param name="codigoPessoa"></param>
        /// <returns></returns>
        public Pessoa Obter(int codigoPessoa)
        {
            ContatoDados objContatoDados = new ContatoDados();
            SqlCommand comando = new SqlCommand("select * from Pessoa where CodigoPessoa = @codigoPessoa", base.Conectar());
            SqlParameter parametroCodigoPessoa = new SqlParameter("@codigoPessoa", codigoPessoa);
            parametroCodigoPessoa.DbType = System.Data.DbType.Int32;
            comando.Parameters.Add(parametroCodigoPessoa);

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            Pessoa objPessoa = null;

            if (leitorDados.Read())
            {
                objPessoa = new Pessoa();

                objPessoa.CodigoPessoa = codigoPessoa;
                if (leitorDados["CodigoContato"] != DBNull.Value)
                    objPessoa.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                else
                    objPessoa.Contato_CodigoContato = null;
                if (objPessoa.Contato_CodigoContato.HasValue)
                    objPessoa.Contato = objContatoDados.Obter(objPessoa.Contato_CodigoContato.Value);
                else
                    objPessoa.Contato = null;
                objPessoa.CodigoCasaLar = Convert.ToInt32(leitorDados["CodigoCasaLar"]);
                objPessoa.Nome = leitorDados["Nome"].ToString();
                objPessoa.Sexo = leitorDados["Sexo"].ToString();
                objPessoa.CPF = leitorDados["CPF"].ToString();
                objPessoa.RG = leitorDados["RG"].ToString();
                objPessoa.TituloEleitor = leitorDados["TituloEleitor"].ToString();
                objPessoa.DataNascimento = Convert.ToDateTime(leitorDados["DataNascimento"]);
                objPessoa.Nacionalidade = leitorDados["Nacionalidade"].ToString();
                objPessoa.Naturalidade = leitorDados["Naturalidade"].ToString();
                objPessoa.Foto = leitorDados["Foto"].ToString();
                objPessoa.TipoPessoa = leitorDados["TipoPessoa"].ToString();
                objPessoa.Ativo = Convert.ToBoolean(leitorDados["Ativo"]);
            }

            leitorDados.Close();
            leitorDados.Dispose();

            return objPessoa;
        }
        /// <summary>
        /// Este método retorna uma lista de Pessoa
        /// </summary>
        /// <returns></returns>
        public List<Pessoa> Listar()
        {
            ContatoDados objContatoDados = new ContatoDados();
            SqlCommand comando = new SqlCommand("select * from Pessoa order by Nome asc ", base.Conectar());

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            List<Pessoa> pessoaLista = new List<Pessoa>();
            Pessoa objPessoa = null;
            
            while (leitorDados.Read())
            {
                objPessoa = new Pessoa();

                objPessoa.CodigoPessoa = Convert.ToInt32(leitorDados["CodigoPessoa"]);
                if (leitorDados["CodigoContato"] != DBNull.Value)
                    objPessoa.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                else
                    objPessoa.Contato_CodigoContato = null;

                if (objPessoa.Contato_CodigoContato.HasValue)
                    objPessoa.Contato = objContatoDados.Obter(objPessoa.Contato_CodigoContato.Value);
                else
                    objPessoa.Contato = null;
                objPessoa.CodigoCasaLar = Convert.ToInt32(leitorDados["CodigoCasaLar"]);
                objPessoa.Nome = leitorDados["Nome"].ToString();
                objPessoa.Sexo = leitorDados["Sexo"].ToString();
                objPessoa.CPF = leitorDados["CPF"].ToString();
                objPessoa.RG = leitorDados["RG"].ToString();
                objPessoa.TituloEleitor = leitorDados["TituloEleitor"].ToString();
                objPessoa.DataNascimento = Convert.ToDateTime(leitorDados["DataNascimento"]);
                objPessoa.Nacionalidade = leitorDados["Nacionalidade"].ToString();
                objPessoa.Naturalidade = leitorDados["Naturalidade"].ToString();
                objPessoa.Foto = leitorDados["Foto"].ToString();
                objPessoa.TipoPessoa = leitorDados["TipoPessoa"].ToString();
                objPessoa.Ativo = Convert.ToBoolean(leitorDados["Ativo"]);

                pessoaLista.Add(objPessoa);
            }

            leitorDados.Close();
            leitorDados.Dispose();

            return pessoaLista;
        }
        /// <summary>
        /// Exclui os dados escolar pelo seu código
        /// </summary>
        public bool Excluir(int codigoEscolar, int codigoContato)
        {
            bool execucao;

            SqlCommand comando = new SqlCommand("delete from Escolar where CodigoEscolar = @codigoEscolar", base.Conectar());

            SqlParameter parametroCodigoEscolar = new SqlParameter("@codigoEscolar", codigoEscolar);
            parametroCodigoEscolar.DbType = System.Data.DbType.Int32;
            comando.Parameters.Add(parametroCodigoEscolar);

            execucao = Convert.ToBoolean(comando.ExecuteNonQuery());

            ContatoDados objContatoDados = new ContatoDados();
            objContatoDados.Excluir(codigoContato);

            return execucao;
        }
        public Pessoa Salvar(Pessoa objPessoa)
        {
            SqlCommand comando = new SqlCommand();
            comando.Connection = base.Conectar();
            comando.CommandType = System.Data.CommandType.Text;

            if (!objPessoa.CodigoPessoa.HasValue)
            {
                comando.CommandText =
                    @"INSERT INTO Pessoa
                         (CodigoContato, CodigoCasaLar, Nome, Sexo, CPF, RG, TituloEleitor, DataNascimento, Nacionalidade, Naturalidade, Foto, TipoPessoa, ativo)
                         VALUES        (@contato_CodigoContato, @codigoCasaLar, @nome, @sexo, @cpf, @rg, @tituloEleitor, @dataNascimento, @nacionalidade, @naturalidade, 
                                        @foto, @tipoPessoa, @ativo)";
            }
            else
            {
                comando.CommandText =
                    @"UPDATE Pessoa
                         SET CodigoContato = @contato_CodigoContato, CodigoCasaLar = @codigoCasaLar, Nome = @nome, Sexo = @sexo, CPF = @cpf, 
                         RG = @rg, TituloEleitor = @tituloEleitor, DataNascimento = @dataNascimento, Nacionalidade = @nacionalidade, Naturalidade = @naturalidade, 
                         Foto = @foto, TipoPessoa = @tipoPessoa, Ativo = @ativo
                      WHERE CodigoPessoa = @codigoPessoa";
            }

            if (objPessoa.CodigoPessoa.HasValue)
            {
                SqlParameter parametroCodigo = new SqlParameter("@codigoPessoa", objPessoa.CodigoPessoa.Value);
                parametroCodigo.DbType = System.Data.DbType.Int32;
                comando.Parameters.Add(parametroCodigo);
            }

            //Salva o Contato
            SqlParameter parametroContato_CodigoContato = new SqlParameter("@contato_CodigoContato", System.Data.DbType.Int32);
            if (objPessoa.Contato_CodigoContato.HasValue)
            {
                parametroContato_CodigoContato.Value = objPessoa.Contato_CodigoContato.Value;
            }
            else
            {
                //Caso possua entidade Contato possua valor Cadastra
                if (objPessoa.Contato != null)
                {
                    ContatoDados objContatoDados = new ContatoDados();
                    objPessoa.Contato = objContatoDados.Salvar(objPessoa.Contato);
                    parametroContato_CodigoContato.Value = objPessoa.Contato.CodigoContato.Value;
                }
                //Caso não possua entidade Contato possua valor não Cadastra
                else
                {
                    parametroContato_CodigoContato.Value = DBNull.Value;
                }
            }

            SqlParameter parametroCodigoCasaLar = new SqlParameter("@codigoCasaLar", System.Data.DbType.Int32);
            parametroCodigoCasaLar.Value = objPessoa.CodigoCasaLar.Value;

            SqlParameter parametroNome = new SqlParameter("@nome", objPessoa.Nome);
            parametroNome.DbType = System.Data.DbType.String;

            SqlParameter parametroSexo = new SqlParameter("@sexo", objPessoa.Sexo);
            parametroSexo.DbType = System.Data.DbType.String;

            SqlParameter parametroCPF = new SqlParameter("@cpf", objPessoa.CPF);
            parametroCPF.DbType = System.Data.DbType.String;

            SqlParameter parametroRG = new SqlParameter("@rg", objPessoa.RG);
            parametroRG.DbType = System.Data.DbType.String;

            SqlParameter parametroTituloEleitor = new SqlParameter("@tituloEleitor", System.Data.DbType.String);
            if (!String.IsNullOrEmpty(objPessoa.TituloEleitor))
                parametroTituloEleitor.Value = objPessoa.TituloEleitor;
            else
                parametroTituloEleitor.Value = DBNull.Value;

            SqlParameter parametroDataNascimento = new SqlParameter("@dataNascimento", objPessoa.DataNascimento);
            parametroDataNascimento.DbType = System.Data.DbType.DateTime;

            SqlParameter parametroNacionalidade = new SqlParameter("@nacionalidade", objPessoa.Nacionalidade);
            parametroNacionalidade.DbType = System.Data.DbType.String;

            SqlParameter parametroNaturalidade = new SqlParameter("@naturalidade", objPessoa.Naturalidade);
            parametroNaturalidade.DbType = System.Data.DbType.String;

            //TODO: Maycon armazenar foto
            SqlParameter parametroFoto = new SqlParameter("@foto", System.Data.SqlDbType.Image);
            if (!String.IsNullOrEmpty(objPessoa.Foto))
                parametroFoto.Value = objPessoa.Foto;
            else
                parametroFoto.Value = DBNull.Value;

            SqlParameter parametroTipoPessoa = new SqlParameter("@tipoPessoa", objPessoa.TipoPessoa);
            parametroTipoPessoa.DbType = System.Data.DbType.String;

            SqlParameter parametroAtivo = new SqlParameter("@ativo", System.Data.DbType.String);
            if (objPessoa.Ativo.HasValue)
                parametroAtivo.Value = objPessoa.Ativo.Value;
            else
                parametroAtivo.Value = true;

            comando.Parameters.Add(parametroContato_CodigoContato);
            comando.Parameters.Add(parametroCodigoCasaLar);
            comando.Parameters.Add(parametroNome);
            comando.Parameters.Add(parametroSexo);
            comando.Parameters.Add(parametroCPF);
            comando.Parameters.Add(parametroRG);
            comando.Parameters.Add(parametroTituloEleitor);
            comando.Parameters.Add(parametroDataNascimento);
            comando.Parameters.Add(parametroNaturalidade);
            comando.Parameters.Add(parametroNacionalidade);
            comando.Parameters.Add(parametroFoto);
            comando.Parameters.Add(parametroTipoPessoa);
            comando.Parameters.Add(parametroAtivo);

            comando.ExecuteNonQuery();

            if (!objPessoa.CodigoPessoa.HasValue)
            {
                Pessoa objPessoaInserida = this.ObterUltima();
                objPessoa.CodigoPessoa = objPessoaInserida.CodigoPessoa;
                return objPessoa;
                //return this.ObterUltimaPessoaInserida();
            }
            else
            {
                return objPessoa;
            }
        }
        /// <summary>
        /// Obtém os dados escolares pelo Código Escolar.
        /// </summary>
        /// <param name="codigoEscolar"></param>
        /// <returns></returns>
        public Escolar Obter(int codigoEscolar)
        {
            SqlCommand comando = new SqlCommand("select * from Escolar where CodigoEscolar = @codigoEscolar", base.Conectar());
            SqlParameter parametroCodigoEscolar = new SqlParameter("@codigoEscolar", codigoEscolar);
            parametroCodigoEscolar.DbType = System.Data.DbType.Int32;
            comando.Parameters.Add(parametroCodigoEscolar);

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            Escolar objEscolar = null;

            if (leitorDados.Read())
            {
                objEscolar = new Escolar();

                objEscolar.CodigoEscolar = codigoEscolar;
                objEscolar.Assistido_CodigoAssistido = Convert.ToInt32(leitorDados["CodigoAssistido"]);
                objEscolar.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                objEscolar.Instituicao = leitorDados["Instituicao"].ToString();
                objEscolar.NumInscricaoInstituicao = leitorDados["NumInscricaoInstituicao"].ToString();
                objEscolar.MediaEscola = Convert.ToDecimal(leitorDados["MediaEscola"]);
                objEscolar.GrauEscolaridade = leitorDados["GrauEscolaridade"].ToString();
                objEscolar.SerieCursada = leitorDados["SerieCursada"].ToString();
                objEscolar.DataMatricula = Convert.ToDateTime(leitorDados["DataMatricula"]);
                if (leitorDados["DataSaida"] != DBNull.Value)
                    objEscolar.DataSaida = Convert.ToDateTime(leitorDados["DataSaida"]);
                objEscolar.StatusSerie = leitorDados["StatusSerie"].ToString();
            }

            leitorDados.Close();
            leitorDados.Dispose();

            ContatoDados objContatoDados = new ContatoDados();
            objEscolar.Contato = objContatoDados.Obter(objEscolar.Contato_CodigoContato.Value);

            return objEscolar;
        }
        public Escolar Salvar(Escolar objEscolar)
        {
            SqlCommand comando = new SqlCommand();
            comando.Connection = base.Conectar();

            //Salva os dados de Contato do Escolar
            ContatoDados objContatoDados = new ContatoDados();
            objEscolar.Contato = objContatoDados.Salvar(objEscolar.Contato);

            objEscolar.Contato_CodigoContato = objEscolar.Contato.CodigoContato;

            if (!objEscolar.CodigoEscolar.HasValue)
            {
                comando.CommandText =
                    @"INSERT INTO Escolar (CodigoAssistido, CodigoContato, Instituicao, NumInscricaoInstituicao, 
                                  MediaEscola, GrauEscolaridade, SerieCursada, DataMatricula, DataSaida, StatusSerie)
                    VALUES (@assistido_CodigoAssistido, @contato_CodigoContato, @instituicao, @numInscricaoInstituicao, @mediaEscola,
                            @grauEscolaridade, @serieCursada, @dataMatricula, @dataSaida, @statusSerie)";
            }
            else
            {
                comando.CommandText =
                    @"UPDATE Escolar SET CodigoAssistido = @assistido_CodigoAssistido, 
                             CodigoContato = @contato_CodigoContato, Instituicao = @instituicao,
                             NumInscricaoInstituicao = @numInscricaoInstituicao, MediaEscola = @mediaEscola, 
                             GrauEscolaridade = @grauEscolaridade, SerieCursada = @serieCursada, DataMatricula = @dataMatricula,
                             DataSaida  = @dataSaida, StatusSerie = @statusSerie where CodigoEscolar = @codigoEscolar";
            }

            comando.CommandType = System.Data.CommandType.Text;
            if (objEscolar.CodigoEscolar.HasValue)
            {
                SqlParameter parametroCodigo = new SqlParameter("@codigoEscolar", objEscolar.CodigoEscolar.Value);
                parametroCodigo.DbType = System.Data.DbType.Int32;
                comando.Parameters.Add(parametroCodigo);
            }

            SqlParameter parametroAssistido_CodigoAssistido = new SqlParameter();
            if (objEscolar.Assistido_CodigoAssistido.HasValue)
            {
                parametroAssistido_CodigoAssistido.Value = objEscolar.Assistido_CodigoAssistido.Value;
                parametroAssistido_CodigoAssistido.ParameterName = "@assistido_CodigoAssistido";
                parametroAssistido_CodigoAssistido.DbType = System.Data.DbType.Int32;
            }
            else
            {
                parametroAssistido_CodigoAssistido.Value = DBNull.Value;
                parametroAssistido_CodigoAssistido.ParameterName = "@assistido_CodigoAssistido";
                parametroAssistido_CodigoAssistido.DbType = System.Data.DbType.Int32;
            }

            SqlParameter parametroContato_CodigoContato = new SqlParameter();
            if (objEscolar.Contato_CodigoContato.HasValue)
            {
                parametroContato_CodigoContato.Value = objEscolar.Contato.CodigoContato.Value;
                parametroContato_CodigoContato.ParameterName = "@contato_CodigoContato";
                parametroContato_CodigoContato.DbType = System.Data.DbType.Int32;
            }
            else
            {
                parametroContato_CodigoContato.Value = DBNull.Value;
                parametroContato_CodigoContato.ParameterName = "@contato_CodigoContato";
                parametroContato_CodigoContato.DbType = System.Data.DbType.Int32;
            }

            SqlParameter parametroInstituicao = new SqlParameter("@instituicao", objEscolar.Instituicao);
            parametroInstituicao.DbType = System.Data.DbType.String;

            SqlParameter parametroNumInscricaoInstituicao = new SqlParameter("@numInscricaoInstituicao", objEscolar.NumInscricaoInstituicao);
            parametroNumInscricaoInstituicao.DbType = System.Data.DbType.String;

            SqlParameter parametroMediaEscola = new SqlParameter("@mediaEscola", objEscolar.MediaEscola);
            parametroMediaEscola.DbType = System.Data.DbType.Decimal;

            SqlParameter parametroGrauEscolaridade = new SqlParameter("@grauEscolaridade", objEscolar.GrauEscolaridade);
            parametroGrauEscolaridade.DbType = System.Data.DbType.String;

            SqlParameter parametroSerieCursada = new SqlParameter("@serieCursada", objEscolar.SerieCursada);
            parametroSerieCursada.DbType = System.Data.DbType.String;

            SqlParameter parametroDataMatricula = new SqlParameter("@dataMatricula", objEscolar.DataMatricula);
            parametroDataMatricula.DbType = System.Data.DbType.DateTime;

            SqlParameter parametroDataSaida = new SqlParameter("@dataSaida", objEscolar.DataSaida);
            if (objEscolar.DataSaida.HasValue)
                parametroDataSaida.Value = objEscolar.DataSaida;
            else
                parametroDataSaida.Value = DBNull.Value;

            SqlParameter parametroStatusSerie = new SqlParameter("@statusSerie", objEscolar.StatusSerie);
            parametroStatusSerie.DbType = System.Data.DbType.String;

            comando.Parameters.Add(parametroAssistido_CodigoAssistido);
            comando.Parameters.Add(parametroContato_CodigoContato);
            comando.Parameters.Add(parametroInstituicao);
            comando.Parameters.Add(parametroNumInscricaoInstituicao);
            comando.Parameters.Add(parametroMediaEscola);
            comando.Parameters.Add(parametroGrauEscolaridade);
            comando.Parameters.Add(parametroSerieCursada);
            comando.Parameters.Add(parametroDataMatricula);
            comando.Parameters.Add(parametroDataSaida);
            comando.Parameters.Add(parametroStatusSerie);

            comando.ExecuteNonQuery();

            if (!objEscolar.CodigoEscolar.HasValue)
            {
                return ObterUltima();
            }
            else
            {
                return Obter(objEscolar.CodigoEscolar.Value);
            }

        }
        /// <summary>
        /// Obtém o ultimo código da escola Inserida
        /// </summary>
        /// <param name="codigoEscolar"></param>
        /// <returns></returns>
        public Escolar ObterUltima()
        {
            SqlCommand comando = new SqlCommand(@"SELECT TOP (1) * FROM Escolar ORDER BY CodigoEscolar DESC", base.Conectar());

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            Escolar objEscolar = null;

            if (leitorDados.Read())
            {
                objEscolar = new Escolar();
                objEscolar.Assistido_CodigoAssistido = Convert.ToInt32(leitorDados["CodigoAssistido"]);
                objEscolar.CodigoEscolar = Convert.ToInt32(leitorDados["CodigoEscolar"]);
                objEscolar.Contato_CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                objEscolar.DataMatricula = Convert.ToDateTime(leitorDados["DataMatricula"]);
                if (leitorDados["DataSaida"] != DBNull.Value)
                    objEscolar.DataSaida = Convert.ToDateTime(leitorDados["DataSaida"]);
                objEscolar.GrauEscolaridade = leitorDados["GrauEscolaridade"].ToString();
                objEscolar.Instituicao = leitorDados["Instituicao"].ToString();
                objEscolar.MediaEscola = Convert.ToInt32(leitorDados["MediaEscola"]);
                objEscolar.NumInscricaoInstituicao = leitorDados["NumInscricaoInstituicao"].ToString();
                objEscolar.SerieCursada = leitorDados["SerieCursada"].ToString();
                objEscolar.StatusSerie = leitorDados["StatusSerie"].ToString();

            }

            leitorDados.Close();
            leitorDados.Dispose();

            ContatoDados objContatoDados = new ContatoDados();
            objEscolar.Contato = objContatoDados.Obter(objEscolar.Contato_CodigoContato.Value);


            return objEscolar;
        }
        /// <summary>
        /// Obtém a CasaLar sem o seu Código
        /// </summary>
        /// <param name="codigoCasaLar"></param>
        /// <returns></returns>
        public CasaLar Obter()
        {
            SqlCommand comando = new SqlCommand("select TOP(1) * from CasaLar ORDER BY codigocasalar ASC", base.Conectar());

            SqlDataReader leitorDados = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            CasaLar objCasaLar = null;

            if (leitorDados.Read())
            {
                objCasaLar = new CasaLar();

                objCasaLar.CodigoCasaLar = Convert.ToInt32(leitorDados["CodigoCasalar"]);
                objCasaLar.CodigoContato = Convert.ToInt32(leitorDados["CodigoContato"]);
                objCasaLar.NomeCasaLar = leitorDados["NomeCasaLar"].ToString();
                objCasaLar.CNPJ = leitorDados["CNPJ"].ToString();
                objCasaLar.Alvara = leitorDados["Alvara"].ToString();
                objCasaLar.DataFundacao = Convert.ToDateTime(leitorDados["DataFundacao"]);
                objCasaLar.Historia = leitorDados["Historia"].ToString();
                objCasaLar.Gestor = leitorDados["Gestor"].ToString();
                objCasaLar.StatusCasaLar = leitorDados["Status"].ToString();
                objCasaLar.QtdMaxAssistidos = Convert.ToInt32(leitorDados["QtdMaximaAssistidos"]);
                objCasaLar.QtdAssistidos = Convert.ToInt32(leitorDados["QtdAssistidos"]);
                objCasaLar.TelefoneGestor = leitorDados["TelefoneGestor"].ToString();
                objCasaLar.EmailGestor = leitorDados["EmailGestor"].ToString();


                ///TODO: Maycon
                ///objCasaLar.Foto = leitorDados["Foto"].ToString();


            }

            if (objCasaLar != null && objCasaLar.CodigoContato != null)
            {
                ContatoDados objContatoDados = new ContatoDados();
                objCasaLar.Contato = objContatoDados.Obter(objCasaLar.CodigoContato.Value);
            }

            leitorDados.Close();
            leitorDados.Dispose();

            return objCasaLar;
        }
        public CasaLar Salvar(CasaLar objCasaLar)
        {
            SqlCommand comando = new SqlCommand();
            comando.Connection = base.Conectar();

            ContatoDados objContatoDados = new ContatoDados();
            objCasaLar.Contato = objContatoDados.Salvar(objCasaLar.Contato); 
            
            if (!objCasaLar.CodigoCasaLar.HasValue)
            {
                comando.CommandText =
                    @"INSERT INTO CasaLar (CodigoContato, NomeCasaLar, CNPJ, Alvara, DataFundacao, Historia, Gestor, Status,
                           QtdMaximaAssistidos, QtdAssistidos, Foto, EmailGestor, TelefoneGestor)
                    VALUES (@contato_CodigoContato, @nomeCasaLar, @cnpj, @alvara, @dataFundacao, @historia, @gestor, @statusCasaLar, 
                            @qtdMaxAssistidos, @qtdAssistidos, @foto, @emailGestor, @telefoneGestor)";
            }
            else
            {
                comando.CommandText =
                    @"UPDATE CasaLar SET CodigoContato = @contato_CodigoContato, NomeCasaLar = @nomeCasaLar, CNPJ = @cnpj,
                        Alvara = @alvara, DataFundacao = @dataFundacao, Historia = @historia, Gestor = @gestor, 
                        Status = @statusCasaLar, QtdMaximaAssistidos = @qtdMaxAssistidos, QtdAssistidos = @qtdAssistidos,
                        Foto = @foto, EmailGestor = @emailGestor, TelefoneGestor = @telefoneGestor
                        WHERE (CodigoCasaLar = @codigoCasaLar)";
            }

            comando.CommandType = System.Data.CommandType.Text;
            if (objCasaLar.CodigoCasaLar.HasValue)
            {
                SqlParameter parametroCodigo = new SqlParameter("@codigoCasaLar", objCasaLar.CodigoCasaLar.Value);
                parametroCodigo.DbType = System.Data.DbType.Int32;
                comando.Parameters.Add(parametroCodigo);
            }

            SqlParameter parametroContato_CodigoContato = new SqlParameter();
            if (objCasaLar.Contato.CodigoContato.HasValue)
            {
                parametroContato_CodigoContato.Value = objCasaLar.Contato.CodigoContato.Value;
                parametroContato_CodigoContato.ParameterName = "@contato_CodigoContato";
                parametroContato_CodigoContato.DbType = System.Data.DbType.Int32;
            }
            else
            {
                parametroContato_CodigoContato.Value = DBNull.Value;
                parametroContato_CodigoContato.ParameterName = "@contato_CodigoContato";
                parametroContato_CodigoContato.DbType = System.Data.DbType.Int32;
            }

            SqlParameter parametroNomeCasaLar = new SqlParameter("@nomeCasaLar", objCasaLar.NomeCasaLar);
            parametroNomeCasaLar.DbType = System.Data.DbType.String;

            SqlParameter parametroCNPJ = new SqlParameter("@cnpj", objCasaLar.CNPJ);
            parametroCNPJ.DbType = System.Data.DbType.String;

            SqlParameter parametroAlvara = new SqlParameter("@alvara", objCasaLar.Alvara);
            parametroAlvara.DbType = System.Data.DbType.String;

            SqlParameter parametroDataFundacao = new SqlParameter("@dataFundacao", objCasaLar.DataFundacao);
            parametroDataFundacao.DbType = System.Data.DbType.DateTime;

            SqlParameter parametroHistoria = new SqlParameter("@historia", objCasaLar.Historia);
            parametroHistoria.DbType = System.Data.DbType.String;

            SqlParameter parametroGestor = new SqlParameter("@gestor", objCasaLar.Gestor);
            parametroGestor.DbType = System.Data.DbType.String;

            SqlParameter parametroStatusCasaLar = new SqlParameter("@statusCasaLar", objCasaLar.StatusCasaLar);
            parametroStatusCasaLar.DbType = System.Data.DbType.String;

            SqlParameter parametroQtdMaxAssistidos = new SqlParameter("@qtdMaxAssistidos", objCasaLar.QtdMaxAssistidos);
            parametroQtdMaxAssistidos.DbType = System.Data.DbType.Int32;

            SqlParameter parametroQtdAssistidos = new SqlParameter("@qtdAssistidos", objCasaLar.QtdAssistidos);
            parametroQtdAssistidos.DbType = System.Data.DbType.Int32;

            
            SqlParameter parametroFoto = new SqlParameter("@foto", System.Data.SqlDbType.Image);
            if (!String.IsNullOrEmpty(objCasaLar.Foto))
                parametroFoto.Value = objCasaLar.Foto;
            else
                parametroFoto.Value = DBNull.Value;

            SqlParameter parametroEmailGestor = new SqlParameter("@emailGestor", objCasaLar.EmailGestor);
            parametroEmailGestor.DbType = System.Data.DbType.String;

            SqlParameter parametroTelefoneGestor = new SqlParameter("@telefoneGestor", objCasaLar.TelefoneGestor);
            parametroTelefoneGestor.DbType = System.Data.DbType.String;



            comando.Parameters.Add(parametroContato_CodigoContato);
            comando.Parameters.Add(parametroNomeCasaLar);
            comando.Parameters.Add(parametroCNPJ);
            comando.Parameters.Add(parametroAlvara);
            comando.Parameters.Add(parametroDataFundacao);
            comando.Parameters.Add(parametroHistoria);
            comando.Parameters.Add(parametroGestor);
            comando.Parameters.Add(parametroStatusCasaLar);
            comando.Parameters.Add(parametroQtdMaxAssistidos);
            comando.Parameters.Add(parametroQtdAssistidos);
            comando.Parameters.Add(parametroFoto);
            comando.Parameters.Add(parametroEmailGestor);
            comando.Parameters.Add(parametroTelefoneGestor);

            comando.ExecuteNonQuery();

            //TODO: retorno entidade CasaLar com o Código da casaLAr Preenchido
            return ObterUltima();
        }