/// <summary>
        /// Realiza a mudança de endereço para
        /// um usuário, desativando o antigo e cadastrando um novo registro
        /// </summary>
        /// <param name="antigoEndereco"></param>
        /// <param name="novoEndereco"></param>
        public static void RealizarMudanca(EnderecoUsuario antigoEndereco, Endereco enderecoAtualizacao)
        {
            OracleTransaction transaction = null;
            EnderecoUsuarioDAO daoEnderecoUsuario = new EnderecoUsuarioDAO();
            ControleEnderecoDAO daoControle = new ControleEnderecoDAO();
            EnderecoDAO daoEndereco = new EnderecoDAO();

            antigoEndereco.Excluido = '1';

            EnderecoUsuario novoEndereco = new EnderecoUsuario();
            novoEndereco.Endereco = enderecoAtualizacao;
            novoEndereco.CodigoPaciente = antigoEndereco.CodigoPaciente;
            novoEndereco.Excluido = '0';
            novoEndereco.Operacao = DateTime.Now;
            novoEndereco.TipoEndereco = new TipoEndereco();
            novoEndereco.TipoEndereco.Codigo = "01";
            novoEndereco.Endereco.ControleEndereco = new ControleEndereco();

            try
            {
                daoEnderecoUsuario.Atualizar(antigoEndereco, ref transaction);
                daoControle.Inserir(novoEndereco.Endereco.ControleEndereco, ref transaction);
                daoEndereco.Cadastrar(novoEndereco.Endereco, ref transaction);
                daoEnderecoUsuario.Cadastrar(novoEndereco, ref transaction);

                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
                throw;
            }
        }
        protected void btnSalvar_Click(object sender, ImageClickEventArgs e)
        {
            if (!Page.IsValid)
                return;

            //Validações preliminares
            DateTime nascimento;

            if (ddlRacaCor.SelectedValue == RacaCor.INDIGENA)
            {
                if (ddlEtnia.SelectedValue == "-1")
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Favor informar a etnia.');</script>");
                    return;
                }
            }

            try
            {
                nascimento = DateTime.Parse(tbxDataNascimento.Text);
            }
            catch (InvalidCastException)
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Data de nascimento inválida.');</script>");
                return;
            }

            if ((tbxTelefone.Text == "00000000") || (tbxTelefone.Text == "11111111") || (tbxTelefone.Text == "22222222") || (tbxTelefone.Text == "33333333") || (tbxTelefone.Text == "44444444")
                || (tbxTelefone.Text == "55555555") || (tbxTelefone.Text == "66666666") || (tbxTelefone.Text == "77777777") || (tbxTelefone.Text == "88888888") || (tbxTelefone.Text == "99999999")
                || (tbxTelefone.Text == "12345678"))
            {
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Telefone Inválido.');", true);
                return;
            }

            if (new DateTime(DateTime.Today.Subtract(nascimento).Ticks).Year - 1 > 130)
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A idade do paciente não pode ser maior que 130 anos.');</script>");
                return;
            }
            if (new DateTime(DateTime.Today.Subtract(nascimento).Ticks).Year - 1 > 17 && tbxCPF.Text.Trim() == "")
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Paciente maior que 16 anos, favor preencher com um CPF válido.');</script>");
                return;
            }

            if (tbxDataNaturalizacao.Text.Trim() != string.Empty && nascimento.CompareTo(DateTime.Parse(tbxDataNaturalizacao.Text)) > 0)
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A data de naturalização não pode ser anterior a data de nascimento.');</script>");
                return;
            }

            if (tbxDataEntradaBrasil.Text.Trim() != string.Empty && nascimento.CompareTo(DateTime.Parse(tbxDataEntradaBrasil.Text)) > 0)
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A data de entrada no Brasil não pode ser anterior a data de nascimento.');</script>");
                return;
            }

            if (tbxCPF.Text.Trim() != "" && !CPFValido(tbxCPF.Text.ToString()))
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('CPF inválido.');</script>");
                return;
            }

            if (tbxDDD.Text.Trim() != "" && tbxTelefone.Text.Trim() == "")
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Favor preencher o campo telefone.');</script>");
                return;
            }

            if (tbxTituloEleitor.Text != "" && tbxSecaoEleitoral.Text.Trim() == "" && tbxZonaEleitoral.Text.Trim() == "")
            {
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Favor preencher todos os campos referentes ao titulo de eleitor.');</script>");
                return;
            }

            if (tbxDataEmissaoCertidao.Text.Trim() != "")
            {
                if (nascimento.CompareTo(DateTime.Parse(tbxDataEmissaoCertidao.Text)) > 0)
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A data de emissão da certidão não pode ser anterior a data de nascimento.');</script>");
                    return;
                }
            }

            if (tbxDataEmissaoCTPS.Text.Trim() != "")
            {
                if (nascimento.CompareTo(DateTime.Parse(tbxDataEmissaoCTPS.Text)) > 0)
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A data de emissão da CTPS não pode ser anterior à data de nascimento.');</script>");
                    return;
                }
            }

            if (tbxDataEmissaoIdentidade.Text.Trim() != "")
            {
                if (nascimento.CompareTo(DateTime.Parse(tbxDataEmissaoIdentidade.Text)) > 0)
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('A data de emissão do RG não pode ser anterior à data de nascimento.');</script>");
                    return;
                }
            }

            if (tbxNomeCartorio.Text.Trim() != "")
            {
                Regex reg = new Regex(@"^([a-z]|\s)*$", RegexOptions.IgnoreCase);

                if (!reg.IsMatch(tbxNomeCartorio.Text))
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Nome do cartório deve contar apenas letras.');</script>");
                    return;
                }
            }
            //====================================================================

            IViverMaisServiceFacade iViverMais = Factory.GetInstance<IViverMaisServiceFacade>();
            IPaciente ipaciente = Factory.GetInstance<IPaciente>();
            //ViverMais.Model.Paciente paciente = Factory.GetInstance<IPaciente>().BuscarPorCodigo<ViverMais.Model.Paciente>(codigoPaciente);
            ViverMais.Model.Paciente paciente = new ViverMais.Model.Paciente();
            ControlePaciente controlePaciente = null;

            //Edição de paciente
            if (Request.QueryString["codigo"] != null)
            //if (ViewState["codigoPaciente"] != null)
            {
                //string codigoPaciente = (string)ViewState["codigoPaciente"];
                string codigoPaciente = Request.QueryString["codigo"];
                paciente = PacienteBLL.PesquisarCompleto(codigoPaciente);

                controlePaciente = ControlePacienteBLL.PesquisarPorPaciente(paciente); //Factory.GetInstance<IPaciente>().BuscaControlePaciente<ControlePaciente>(paciente.Codigo);
                if (controlePaciente == null)
                    controlePaciente = new ControlePaciente();
                controlePaciente.Controle = 'A';
                controlePaciente.DataOperacao = DateTime.Now;

                paciente.Nome = tbxNomePaciente.Text.ToUpper();
                if (chkMaeIgnorada.Checked != true)
                {
                    paciente.NomeMae = tbxNomeMae.Text.ToUpper();
                }
                else
                {
                    paciente.NomeMae = "IGNORADA";
                }
                paciente.DataNascimento = DateTime.Parse(tbxDataNascimento.Text);
                if (chkPaiIgnorado.Checked != true)
                {
                    paciente.NomePai = tbxNomePai.Text.ToUpper();
                }
                else
                {
                    paciente.NomePai = "IGNORADO";
                }
                paciente.Sexo = char.Parse(rbtnListSexo.SelectedValue);
                paciente.RacaCor = new RacaCor();
                paciente.RacaCor.Codigo = ddlRacaCor.SelectedValue;
                if (paciente.RacaCor.Codigo == RacaCor.INDIGENA)
                {
                    paciente.Etnia = new Etnia();
                    paciente.Etnia.Codigo = ddlEtnia.SelectedValue;
                }
                paciente.FrequentaEscola = char.Parse(rbtnListFreqEscola.SelectedValue);
                paciente.Email = tbxEmail.Text;
                paciente.Vivo = cbxVivo.Checked ? '1' : '0';
                switch (rbtnListNacionalidade.SelectedValue)
                {
                    case "B":
                        {
                            if ((paciente.Pais != null) && (paciente.Pais.Codigo != "010"))//Se o paciente for brasileiro, não poderá alterar a nacionalidade
                            {
                                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Alteração de Nacionalidade Inválida!');</script>");
                                return;
                            }
                            paciente.Pais = new Pais();
                            paciente.Pais.Codigo = "010";
                            paciente.MunicipioNascimento = new Municipio();
                            paciente.MunicipioNascimento.Codigo = ddlMunicipioNascimento.SelectedValue;
                            break;
                        }
                    case "E": //Estrangeiro
                        {
                            if ((paciente.Pais == null) || (paciente.Pais != null && paciente.Pais.Codigo == "010"))
                            {
                                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Alteração de Nacionalidade Inválida!');</script>");
                                return;
                            }
                            paciente.Pais = new Pais();
                            paciente.Pais.Codigo = ddlPaisOrigem.SelectedValue;
                            break;

                        }
                    case "N":
                        {
                            if ((paciente.Pais != null) && (paciente.Pais.Codigo == "010"))
                            {
                                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Alteração de Nacionalidade Inválida!');</script>");
                                return;
                            }
                            paciente.Pais = null;
                            break;
                        }
                }

                //Coloquei as operações de banco ao final
                //pois se não for possível realizar a alteração devido às validações acima
                //estas não serão realizadas
                controlePaciente.Excluido = '0';
                ControlePacienteBLL.Inserir(controlePaciente);

                MotivoCadastroPaciente motivo = MotivocadastroPacienteBLL.PesquisarPorPaciente(paciente, ((Usuario)Session["Usuario"]).Unidade.CNES);

                if (motivo != null)
                {
                    motivo.Motivo = new MotivoCadastro();
                    motivo.Motivo.Codigo = int.Parse(ddlMotivo.SelectedValue);
                    MotivocadastroPacienteBLL.Atualizar(motivo);
                }
                else
                {
                    motivo = new MotivoCadastroPaciente();
                    motivo.Paciente = paciente;
                    motivo.Cnes = ((Usuario)Session["Usuario"]).Unidade.CNES;
                    motivo.Motivo = new MotivoCadastro();
                    motivo.Motivo.Codigo = int.Parse(ddlMotivo.SelectedValue);
                    MotivocadastroPacienteBLL.Cadastrar(motivo);
                }

                paciente.Deficiencia = this.RetornaDeficienciaPaciente();
                PacienteBLL.Atualizar(paciente);
                StartBackgroundThread(delegate { this.SalvarLog(new LogViverMais(DateTime.Now, (ViverMais.Model.Usuario)Session["Usuario"], 2, paciente.Codigo)); });
            }
            else //Cadastro de Paciente
            {
                paciente.Nome = tbxNomePaciente.Text.ToUpper();
                if (chkMaeIgnorada.Checked != true)
                {
                    paciente.NomeMae = tbxNomeMae.Text.ToUpper();
                }
                else
                {
                    paciente.NomeMae = "IGNORADO";
                }

                paciente.DataNascimento = DateTime.Parse(tbxDataNascimento.Text);

                //Verifica se já existe um paciente cadastrado com o mesmo nome, nome de mãe e data de nascimento
                IList<ViverMais.Model.Paciente> p = PacienteBLL.Pesquisar(tbxNomePaciente.Text.ToUpper(), tbxNomeMae.Text.ToUpper(), DateTime.Parse(tbxDataNascimento.Text));
                if (p.Count > 0)
                {
                    if (Request["url_retorno"] != null)
                        ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Dados salvos com sucesso!');window.location='" + HelperRedirector.DecodeURL(Request["url_retorno"].ToString()) + p[0].Codigo + "';</script>");
                    else
                        ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Já existe um Paciente cadastrado com os dados fornecidos. Confirme se os dados estão corretos e atualize se necessário.');window.location='FormPaciente.aspx?codigo=" + p[0].Codigo + "';</script>");

                    return;
                }

                MotivoCadastroPaciente motivo = new MotivoCadastroPaciente();
                motivo.Cnes = ((Usuario)Session["Usuario"]).Unidade.CNES;
                motivo.Motivo = new MotivoCadastro();
                motivo.Motivo.Codigo = int.Parse(ddlMotivo.SelectedValue);

                if (chkPaiIgnorado.Checked != true)
                {
                    paciente.NomePai = tbxNomePai.Text.ToUpper();
                }
                else
                {
                    paciente.NomePai = "IGNORADO";
                }
                if (paciente.NomePai == "NAO EXISTE" || paciente.NomePai == "NÃO EXISTE")
                    paciente.NomePai = "IGNORADO";
                paciente.Sexo = char.Parse(rbtnListSexo.SelectedValue);
                paciente.RacaCor = new RacaCor();
                paciente.RacaCor.Codigo = ddlRacaCor.SelectedValue;
                if (paciente.RacaCor.Codigo == RacaCor.INDIGENA)
                {
                    paciente.Etnia = new Etnia();
                    paciente.Etnia.Codigo = ddlEtnia.SelectedValue;
                }
                paciente.FrequentaEscola = char.Parse(rbtnListFreqEscola.SelectedValue);
                paciente.Vivo = cbxVivo.Checked ? '1' : '0';
                paciente.Email = tbxEmail.Text;
                //Se brasileiro adiciona o município
                if (rbtnListNacionalidade.SelectedValue == "B")
                {
                    paciente.Pais = new Pais();
                    paciente.Pais.Codigo = "010";
                    paciente.MunicipioNascimento = new Municipio();
                    paciente.MunicipioNascimento.Codigo = ddlMunicipioNascimento.SelectedValue;
                }
                else if (rbtnListNacionalidade.SelectedValue == "E")
                {
                    paciente.Pais = new Pais();
                    paciente.Pais.Codigo = ddlPaisOrigem.SelectedValue;
                }

                try
                {
                    paciente.Deficiencia = this.RetornaDeficienciaPaciente();
                    PacienteBLL.Cadastrar(paciente);
                }
                catch (Exception ex)
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('" + ex.Message + "');</script>");
                    return;
                }

                motivo.Paciente = paciente;

                MotivocadastroPacienteBLL.Cadastrar(motivo);
                //ViewState["codigoPaciente"] = paciente.Codigo;
                StartBackgroundThread(delegate { this.SalvarLog(new LogViverMais(DateTime.Now, (ViverMais.Model.Usuario)Session["Usuario"], 1, paciente.Codigo)); });
            }
            Endereco endereco;
            //Passos comuns ao cadastro e edição
            endereco = EnderecoBLL.PesquisarPorPaciente(paciente);
            if (endereco != null)
            {
                //string codigoEndereco = (string)ViewState["codigoEndereco"];
                //endereco = EnderecoBLL.PesquisarCompletoPorPaciente(paciente);

                ViverMais.Model.Endereco novoEndereco = new Endereco();
                PreencherObjetoEndereco(novoEndereco);

                endereco.DDD = novoEndereco.DDD;
                endereco.Telefone = novoEndereco.Telefone;
                endereco.Complemento = novoEndereco.Complemento;

                if (endereco.Equals(novoEndereco))
                    EnderecoBLL.Atualizar(endereco);
                else
                {
                    try
                    {
                        EnderecoUsuarioBLL.RealizarMudanca(EnderecoUsuarioBLL.Pesquisar(paciente.Codigo, endereco.Codigo), novoEndereco);
                        //Guarda na variável para salvar na sessão depois
                        endereco = novoEndereco;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                if (((Usuario)Session["usuario"]).Unidade.MunicipioGestor.Codigo != "292740")
                {
                    lblBairro.Text = string.Empty;
                    lblMunicipioResidencia.Text = string.Empty;
                }
            }
            else
            {
                endereco = new Endereco();
                EnderecoUsuario enderecoUsuario = new EnderecoUsuario();
                PreencherObjetoEndereco(endereco);
                enderecoUsuario.Endereco = endereco;
                enderecoUsuario.CodigoPaciente = paciente.Codigo;
                enderecoUsuario.Excluido = '0';
                enderecoUsuario.Operacao = DateTime.Now;
                enderecoUsuario.TipoEndereco = new TipoEndereco();
                enderecoUsuario.TipoEndereco.Codigo = "01";
                enderecoUsuario.Endereco.ControleEndereco = new ControleEndereco();

                try
                {
                    EnderecoUsuarioBLL.Cadastrar(enderecoUsuario);
                    //Guarda na variável para salvar na sessão depois
                    endereco = enderecoUsuario.Endereco;
                }
                catch (Exception ex)
                {
                    ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('" + ex.Message + "');</script>");
                    return;
                }

                //StartBackgroundThread(delegate { this.CadastrarEndereco(endereco, paciente); });
            }

            //ViewState["codigoEndereco"] = endereco.Codigo;

            ViverMais.Model.Documento docNacionalidade = null;
            switch (rbtnListNacionalidade.SelectedValue)
            {
                case "E"://Futuramente colocar documentos na sessão
                    docNacionalidade = DocumentoBLL.PesqusiarPorPaciente("05", paciente);
                    if (docNacionalidade == null)
                    {
                        docNacionalidade = new Documento();
                        ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                        controle.Paciente = paciente;
                        controle.TipoDocumento = new TipoDocumento();
                        controle.TipoDocumento.Codigo = "05";
                        docNacionalidade.ControleDocumento = controle;
                        docNacionalidade.DataChegadaBrasil = DateTime.Parse(tbxDataEntradaBrasil.Text);
                        docNacionalidade.DataNaturalizacao = null;
                        DocumentoBLL.Cadastrar(docNacionalidade);
                    }
                    else
                    {
                        docNacionalidade.DataChegadaBrasil = DateTime.Parse(tbxDataEntradaBrasil.Text);
                        docNacionalidade.DataNaturalizacao = null;
                        DocumentoBLL.Atualizar(docNacionalidade);
                    }

                    break;
                case "N":
                    docNacionalidade = DocumentoBLL.PesqusiarPorPaciente("05", paciente);
                    if (docNacionalidade == null)
                    {
                        docNacionalidade = new Documento();
                        ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                        controle.Paciente = paciente;
                        controle.TipoDocumento = new TipoDocumento();
                        controle.TipoDocumento.Codigo = "05";
                        docNacionalidade.ControleDocumento = controle;
                        docNacionalidade.DataNaturalizacao = DateTime.Parse(tbxDataNaturalizacao.Text);
                        docNacionalidade.NumeroPortaria = tbxNaturalizacaoPortaria.Text;
                        docNacionalidade.DataChegadaBrasil = null;
                        DocumentoBLL.Cadastrar(docNacionalidade);
                    }
                    else
                    {
                        docNacionalidade.DataNaturalizacao = DateTime.Parse(tbxDataNaturalizacao.Text);
                        docNacionalidade.NumeroPortaria = tbxNaturalizacaoPortaria.Text;
                        docNacionalidade.DataChegadaBrasil = null;
                        DocumentoBLL.Atualizar(docNacionalidade);
                    }
                    break;
            }

            if (!string.IsNullOrEmpty(tbxCPF.Text))
            {
                ViverMais.Model.Documento doc = DocumentoBLL.PesqusiarPorPaciente("02", paciente);
                if (doc == null)
                {
                    doc = new ViverMais.Model.Documento();
                    doc.Numero = tbxCPF.Text;
                    ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                    controle.Paciente = paciente;
                    controle.TipoDocumento = new TipoDocumento();
                    controle.TipoDocumento.Codigo = "02";
                    doc.ControleDocumento = controle;
                    DocumentoBLL.Cadastrar(doc);
                }
                else
                {
                    doc.Numero = tbxCPF.Text;
                    DocumentoBLL.Atualizar(doc);
                }
            }

            if (!string.IsNullOrEmpty(tbxIdentidade.Text))
            {
                ViverMais.Model.Documento doc = DocumentoBLL.PesqusiarPorPaciente("10", paciente);
                if (doc == null)
                {
                    doc = new ViverMais.Model.Documento();
                    doc.Numero = tbxIdentidade.Text;
                    doc.Complemento = tbxComplementoIdentidade.Text;
                    doc.UF = new UF();
                    doc.UF.Sigla = ddlUFIdentidade.SelectedValue;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoIdentidade.Text);
                    doc.OrgaoEmissor = new OrgaoEmissor();
                    doc.OrgaoEmissor.Codigo = ddlOrgaoExpedidor.SelectedValue;
                    ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                    controle.Paciente = paciente;
                    controle.TipoDocumento = new TipoDocumento();
                    controle.TipoDocumento.Codigo = "10";
                    doc.ControleDocumento = controle;
                    DocumentoBLL.Cadastrar(doc);
                }
                else
                {
                    doc.Numero = tbxIdentidade.Text;
                    doc.Complemento = tbxComplementoIdentidade.Text;
                    doc.UF = new UF();
                    doc.UF.Sigla = ddlUFIdentidade.SelectedValue;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoIdentidade.Text);
                    doc.OrgaoEmissor = new OrgaoEmissor();
                    doc.OrgaoEmissor.Codigo = ddlOrgaoExpedidor.SelectedValue;
                    DocumentoBLL.Atualizar(doc);
                }
            }

            if (ddlTipoCertidao.SelectedValue != "-1")
            {
                ViverMais.Model.Documento doc = DocumentoBLL.PesqusiarPorPaciente(ddlTipoCertidao.SelectedValue, paciente);
                if (doc == null)
                {
                    doc = new ViverMais.Model.Documento();
                    if (!tbxNovaCertidao.Text.Contains("_"))
                    {
                        doc.Numero = tbxNovaCertidao.Text.Replace(".", "").Substring(0, 15);
                        doc.Complemento = tbxNovaCertidao.Text.Split('-')[1];
                    }
                    doc.NomeCartorio = tbxNomeCartorio.Text;
                    doc.NumeroLivro = tbxLivro.Text;
                    doc.NumeroFolha = tbxFolhas.Text;
                    doc.NumeroTermo = tbxTermo.Text;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoCertidao.Text);
                    ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                    controle.Paciente = paciente;
                    controle.TipoDocumento = new TipoDocumento();
                    controle.TipoDocumento.Codigo = ddlTipoCertidao.SelectedValue;
                    doc.ControleDocumento = controle;
                    DocumentoBLL.Cadastrar(doc);
                }
                else
                {
                    doc.NomeCartorio = tbxNomeCartorio.Text;
                    doc.NumeroLivro = tbxLivro.Text;
                    doc.NumeroFolha = tbxFolhas.Text;
                    doc.NumeroTermo = tbxTermo.Text;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoCertidao.Text);
                    DocumentoBLL.Atualizar(doc);
                }
            }

            if (!string.IsNullOrEmpty(tbxTituloEleitor.Text))
            {
                ViverMais.Model.Documento doc = DocumentoBLL.PesqusiarPorPaciente("03", paciente);
                if (doc == null)
                {
                    doc = new ViverMais.Model.Documento();
                    doc.Numero = tbxTituloEleitor.Text;
                    doc.SecaoEleitoral = tbxSecaoEleitoral.Text;
                    doc.ZonaEleitoral = tbxZonaEleitoral.Text;
                    ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                    controle.Paciente = paciente;
                    controle.TipoDocumento = new TipoDocumento();
                    controle.TipoDocumento.Codigo = "03";
                    doc.ControleDocumento = controle;
                    DocumentoBLL.Cadastrar(doc);
                }
                else
                {
                    doc.Numero = tbxTituloEleitor.Text;
                    doc.SecaoEleitoral = tbxSecaoEleitoral.Text;
                    doc.ZonaEleitoral = tbxZonaEleitoral.Text;
                    DocumentoBLL.Atualizar(doc);
                }
            }

            if (!string.IsNullOrEmpty(tbxCTPS.Text))
            {
                ViverMais.Model.Documento doc = DocumentoBLL.PesqusiarPorPaciente("04", paciente);
                if (doc == null)
                {
                    doc = new ViverMais.Model.Documento();
                    doc.Numero = tbxCTPS.Text;
                    doc.Serie = tbxSerieCTPS.Text;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoCTPS.Text);
                    doc.UF = new UF();
                    doc.UF.Sigla = ddlUFCTPS.SelectedValue;
                    ViverMais.Model.ControleDocumento controle = new ViverMais.Model.ControleDocumento();
                    controle.Paciente = paciente;
                    controle.TipoDocumento = new TipoDocumento();
                    controle.TipoDocumento.Codigo = "04";
                    doc.ControleDocumento = controle;
                    DocumentoBLL.Cadastrar(doc);
                }
                else
                {
                    doc.Numero = tbxCTPS.Text;
                    doc.Serie = tbxSerieCTPS.Text;
                    doc.DataEmissao = DateTime.Parse(tbxDataEmissaoCTPS.Text);
                    doc.UF = new UF();
                    doc.UF.Sigla = ddlUFCTPS.SelectedValue;
                    DocumentoBLL.Atualizar(doc);
                }
            }

            HiddenCodigoPaciente.Value = paciente.Codigo;
            HiddenCodigoPaciente.DataBind();
            HiddenNomePaciente.Value = paciente.Nome;
            HiddenNomePaciente.DataBind();
            HiddenDataNascimento.Value = paciente.DataNascimento.ToString("dd/MM/yyyy");
            HiddenDataNascimento.DataBind();
            HiddenMunicipio.Value = endereco.Municipio.Nome;
            HiddenMunicipio.DataBind();

            if (Request["codigo"] == null)
            {
                List<CartaoSUS> cartoes = CartaoSUSBLL.ListarPorPaciente(paciente);
                HiddenNumeroCartao.Value = cartoes[0].Numero;
                HiddenNumeroCartao.DataBind();
                lblCNS.Text = cartoes[0].Numero;
                lblCNS.DataBind();
            }

            UpdatePanel_CartaoSUS.Update();
            UpdatePanel_CamposEscondidos.Update();

            if (Request["url_retorno"] != null)
                //{
                //if (Request["encode"] != null && Request["encode"].ToString().Equals("sim"))
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Dados salvos com sucesso!');window.location='" + HelperRedirector.DecodeURL(Request["url_retorno"].ToString()) + paciente.Codigo + "';</script>");
            //else
            //ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Dados salvos com sucesso!');window.location='" + HttpUtility.UrlDecode(Request["url_retorno"].ToString()) + paciente.Codigo + "';</script>");
            //}
            else
                ClientScript.RegisterClientScriptBlock(typeof(String), "ok", "<script>alert('Dados salvos com sucesso!');window.location='FormPaciente.aspx?codigo=" + paciente.Codigo + "';</script>");
        }
 private void PreencherObjetoEndereco(Endereco endereco)
 {
     endereco.Logradouro = tbxNomeLogradouro.Text.ToUpper();
     endereco.Numero = tbxNumero.Text.ToUpper().Replace(" ", "");
     endereco.Complemento = tbxComplemento.Text.ToUpper();
     endereco.Bairro = ddlBairro.SelectedItem.Text;
     endereco.CEP = tbxCEP.Text;
     endereco.DDD = tbxDDD.Text;
     endereco.Telefone = tbxTelefone.Text;
     endereco.TipoLogradouro = new TipoLogradouro();
     endereco.TipoLogradouro.Codigo = ddlTipoLogradouro.SelectedValue;
     endereco.Municipio = new Municipio();
     endereco.Municipio.Codigo = ddlMunicipios.SelectedValue;
     MunicipioBLL.CompletarMunicipio(endereco.Municipio);
 }
 private void CadastrarEndereco(Endereco endereco, ViverMais.Model.Paciente paciente)
 {
     Factory.GetInstance<IEndereco>().CadastrarEndereco<ViverMais.Model.Endereco, ViverMais.Model.Paciente>(endereco, paciente);
 }