public bool Salvar(Empreendimento empreendimento)
        {
            try
            {
                if (_validar.Salvar(empreendimento))
                {
                    Mensagem msg = VerificarLocalizacaoEmpreendimento(empreendimento.Coordenada.EastingUtmTexto, empreendimento.Coordenada.NorthingUtmTexto, empreendimento.Enderecos[0].EstadoId, empreendimento.Enderecos[0].MunicipioId);
                    if (msg.Texto != null)
                    {
                        Validacao.Add(msg);
                        return(Validacao.EhValido);
                    }

                    if (empreendimento.Coordenada.Tipo.Id > 0)
                    {
                        empreendimento.Coordenada.Datum.Sigla = _busLista.Datuns.SingleOrDefault(x => Equals(x.Id, empreendimento.Coordenada.Datum.Id)).Sigla;
                    }

                    #region Responsáveis

                    if (empreendimento.Id <= 0)
                    {
                        empreendimento.Responsaveis.ForEach(r =>
                        {
                            r.OrigemTexto = "Inserido pelo IDAF";
                        });
                    }
                    else
                    {
                        Empreendimento empHistorico = ObterHistorico(empreendimento.Id, empreendimento.Tid);

                        List <Responsavel> responsaveis = empreendimento.Responsaveis.Where(x => !empHistorico.Responsaveis.Exists(y => y.CpfCnpj == x.CpfCnpj)).ToList();
                        responsaveis.ForEach(r =>
                        {
                            r.OrigemTexto = "Inserido pelo IDAF";
                        });

                        empreendimento.Responsaveis.ForEach(r =>
                        {
                            Responsavel resp = empHistorico.Responsaveis.FirstOrDefault(x => x.CpfCnpj == r.CpfCnpj);

                            if (resp != null && r.Tipo != resp.Tipo)
                            {
                                r.OrigemTexto = "Alterado pelo IDAF";
                            }
                        });

                        empreendimento.Responsaveis.Where(x => string.IsNullOrEmpty(x.OrigemTexto)).ToList().ForEach(r =>
                        {
                            Responsavel resp = empHistorico.Responsaveis.FirstOrDefault(x => x.CpfCnpj == r.CpfCnpj);
                            r.OrigemTexto    = resp.OrigemTexto;
                        });
                    }

                    #endregion Responsáveis

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        _da.Salvar(empreendimento, bancoDeDados);

                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
            return(Validacao.EhValido);
        }