/// <summary>
    /// Insere e altera uma entidade
    /// </summary>
    private void _Salvar()
    {
        try
        {
            List <END_Endereco> ltEntityEndereco = new List <END_Endereco>();
            List <SYS_UnidadeAdministrativaEndereco> ltEntityUAEndereco = new List <SYS_UnidadeAdministrativaEndereco>();

            string  numero;
            string  complemento;
            string  msg;
            decimal latitude;
            decimal longitude;

            DataTable dt;

            bool cadastraEndereco = UCEnderecos1.RetornaEnderecoCadastrado(out dt, out msg);

            if (ValidaCampos(dt))
            {
                string msgErro = string.Empty;
                if (String.IsNullOrEmpty(_lblMessage.Text.Trim()) && !UCGridContato1.SalvaConteudoGrid(out msgErro))
                {
                    UCGridContato1._MensagemErro.Visible = false;
                    _lblMessage.Text     = msgErro;
                    txtSelectedTab.Value = "2";
                    return;
                }

                //   Cadastra Unidade Administrativa
                SYS_UnidadeAdministrativa entityUnidadeAdministrativa = new SYS_UnidadeAdministrativa
                {
                    ent_id = _VS_ent_id
                    ,
                    uad_id = _VS_uad_id
                    ,
                    tua_id = new Guid(UCComboTipoUnidadeAdministrativa1._Combo.SelectedValue)
                    ,
                    uad_nome = _txtNome.Text
                    ,
                    uad_sigla = _txtSigla.Text
                    ,
                    uad_codigo = _txtCodigo.Text
                    ,
                    uad_codigoInep = _txtCodigoInep.Text
                    ,
                    uad_idSuperior = UCUASuperior.VsUadId
                    ,
                    uad_codigoIntegracao = _txtCodigoIntegracao.Text
                    ,
                    uad_situacao = _chkBloqueado.Checked ? Convert.ToByte(2) : Convert.ToByte(1)
                    ,
                    IsNew = (_VS_uad_id != Guid.Empty) ? false : true
                };


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (!cadastraEndereco)
                    {
                        throw new ValidationException(msg);
                    }

                    DataRow dr     = dt.Rows[i];
                    string  end_id = dr["end_id"].ToString();
                    Guid    uae_id = string.IsNullOrEmpty(dr["endRel_id"].ToString()) ? Guid.NewGuid() : new Guid(dr["endRel_id"].ToString());

                    int zona = 0;
                    if (!string.IsNullOrEmpty(dr["end_zona"].ToString()))
                    {
                        zona = Convert.ToInt16(dr["end_zona"].ToString());
                    }

                    bool excluido = Convert.ToBoolean(dr["excluido"]);

                    if ((String.IsNullOrEmpty(end_id)) || (end_id.Equals(Guid.Empty.ToString())))
                    {
                        ltEntityEndereco.Add(new END_Endereco
                        {
                            end_id         = new Guid(dr["id"].ToString()),
                            IsNew          = true,
                            cid_nome       = dr["cid_nome"].ToString(),
                            end_logradouro = dr["end_logradouro"].ToString(),
                            end_distrito   = dr["end_distrito"].ToString(),
                            end_zona       = (zona != 0) ? Convert.ToByte(dr["end_zona"].ToString()) : Convert.ToByte(0),
                            end_bairro     = dr["end_bairro"].ToString(),
                            cid_id         = new Guid(dr["cid_id"].ToString()),
                            end_cep        = dr["end_cep"].ToString(),
                            end_situacao   = Convert.ToByte(1)
                        });
                    }
                    else
                    {
                        END_Endereco entityEndereco = new END_Endereco();
                        entityEndereco.end_id = new Guid(dr["end_id"].ToString());
                        entityEndereco.IsNew  = false;

                        END_EnderecoBO.GetEntity(entityEndereco);

                        entityEndereco.cid_id         = new Guid(dr["cid_id"].ToString());
                        entityEndereco.cid_nome       = dr["cid_nome"].ToString();
                        entityEndereco.end_logradouro = dr["end_logradouro"].ToString();
                        entityEndereco.end_distrito   = dr["end_distrito"].ToString();
                        entityEndereco.end_zona       = (zona != 0) ? Convert.ToByte(dr["end_zona"].ToString()) : Convert.ToByte(0);
                        entityEndereco.end_bairro     = dr["end_bairro"].ToString();
                        entityEndereco.end_cep        = dr["end_cep"].ToString();
                        entityEndereco.end_situacao   = (excluido) ? Convert.ToByte(3) : Convert.ToByte(1);
                        ltEntityEndereco.Add(entityEndereco);
                    }
                    numero      = dr["numero"].ToString();
                    complemento = dr["complemento"].ToString();
                    latitude    = string.IsNullOrEmpty(dr["latitude"].ToString()) ? 0 : decimal.Parse(dr["latitude"].ToString());
                    longitude   = string.IsNullOrEmpty(dr["longitude"].ToString()) ? 0 : decimal.Parse(dr["longitude"].ToString());

                    bool excluirEndereco = String.IsNullOrEmpty(dr["end_cep"].ToString()) && !_VS_IsNew_end_id;


                    if (!String.IsNullOrEmpty(ltEntityEndereco[i].end_cep))
                    {
                        ltEntityUAEndereco.Add(new SYS_UnidadeAdministrativaEndereco()
                        {
                            ent_id                = _VS_ent_id,
                            uad_id                = _VS_uad_id,
                            end_id                = ltEntityEndereco[i].end_id,
                            uae_numero            = numero,
                            uae_complemento       = complemento,
                            uae_situacao          = (excluido) ? Convert.ToByte(3) : Convert.ToByte(1),
                            IsNew                 = (string.IsNullOrEmpty(dr["novo"].ToString()) ? false : Convert.ToBoolean(dr["novo"].ToString())),
                            uae_latitude          = latitude,
                            uae_longitude         = longitude,
                            uae_id                = uae_id,
                            uae_enderecoPrincipal = (string.IsNullOrEmpty(dr["enderecoprincipal"].ToString()) ? false : Convert.ToBoolean(dr["enderecoprincipal"].ToString())),
                        });
                    }
                }

                if (SYS_UnidadeAdministrativaBO.Save(entityUnidadeAdministrativa, ltEntityEndereco, ltEntityUAEndereco, UCGridContato1._VS_contatos, _VS_uad_idSuperiorAntigo, _VS_end_idAntigo, null))
                {
                    if (_VS_uad_id == Guid.Empty)
                    {
                        ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Insert, "ent_id: " + entityUnidadeAdministrativa.ent_id + "; uad_id: " + entityUnidadeAdministrativa.uad_id);
                        __SessionWEB.PostMessages = UtilBO.GetErroMessage(String.Format("Unidade administrativa incluída com sucesso."), UtilBO.TipoMensagem.Sucesso);
                    }
                    else
                    {
                        ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Update, "ent_id: " + entityUnidadeAdministrativa.ent_id + "; uad_id: " + entityUnidadeAdministrativa.uad_id);
                        __SessionWEB.PostMessages = UtilBO.GetErroMessage(String.Format("Unidade administrativa alterada com sucesso."), UtilBO.TipoMensagem.Sucesso);
                    }

                    Response.Redirect(__SessionWEB._AreaAtual._Diretorio + "UA/Busca.aspx", false);
                }
                else
                {
                    _lblMessage.Text = UtilBO.GetErroMessage("Erro ao tentar salvar a unidade administrativa.", UtilBO.TipoMensagem.Erro);
                }
            }
        }
        catch (ValidationException ex)
        {
            _lblMessage.Text = UtilBO.GetErroMessage(ex.Message, UtilBO.TipoMensagem.Alerta);
            SetFocus(ValidationSummary1);
        }
        catch (ArgumentException ex)
        {
            _lblMessage.Text = UtilBO.GetErroMessage(ex.Message, UtilBO.TipoMensagem.Alerta);
            SetFocus(ValidationSummary1);
        }
        catch (DuplicateNameException ex)
        {
            _lblMessage.Text = UtilBO.GetErroMessage(ex.Message, UtilBO.TipoMensagem.Alerta);
            SetFocus(ValidationSummary1);
        }
        catch (Exception ex)
        {
            ApplicationWEB._GravaErro(ex);
            _lblMessage.Text = UtilBO.GetErroMessage("Erro ao tentar salvar a unidade administrativa.", UtilBO.TipoMensagem.Erro);
            SetFocus(ValidationSummary1);
        }
    }