Example #1
0
        public ActionResult EditCredenciado(CredenciadoViewModel CredenciadoViewModel, string Operacao)
        {
            if (ModelState.IsValid)
            {
                int    CredenciadoViewModel_CondominoID            = CredenciadoViewModel.CondominoID;
                int    CredenciadoViewModel_CredenciadoID          = CredenciadoViewModel.CredenciadoID;
                int?   CredenciadoViewModel_UsuarioID              = CredenciadoViewModel.UsuarioID;
                string CredenciadoViewModel_Nome                   = CredenciadoViewModel.Nome;
                string CredenciadoViewModel_Email                  = CredenciadoViewModel.Email;
                int    CredenciadoViewModel_TipoCredenciadoID      = CredenciadoViewModel.TipoCredenciadoID;
                string CredenciadoViewModel_Observacao             = CredenciadoViewModel.Observacao;
                string CredenciadoViewModel_Sexo                   = CredenciadoViewModel.Sexo;
                string CredenciadoViewModel_IndVisitantePermanente = CredenciadoViewModel.IndVisitantePermanente;

                if (ViewBag.ValidateRequest)
                {
                    CondominoEditViewModel result = null;
                    try
                    {
                        #region Incluir/Editar Credenciado
                        result = new CondominoEditViewModel()
                        {
                            UnidadeViewModel     = new UnidadeViewModel(),
                            CondominoViewModel   = new CondominoPFViewModel(),
                            CredenciadoViewModel = new CredenciadoViewModel()
                            {
                                CredenciadoID          = CredenciadoViewModel_CredenciadoID,
                                CondominoID            = CredenciadoViewModel_CondominoID,
                                Nome                   = CredenciadoViewModel_Nome,
                                Email                  = CredenciadoViewModel_Email,
                                TipoCredenciadoID      = CredenciadoViewModel_TipoCredenciadoID,
                                Sexo                   = CredenciadoViewModel_Sexo,
                                Observacao             = CredenciadoViewModel_Observacao,
                                UsuarioID              = CredenciadoViewModel_UsuarioID,
                                IndVisitantePermanente = CredenciadoViewModel_IndVisitantePermanente,
                                mensagem               = new App_Dominio.Contratos.Validate()
                                {
                                    Code = 0
                                }
                            },
                            mensagem = new App_Dominio.Contratos.Validate()
                            {
                                Code = 0
                            }
                        };

                        result.CredenciadoViewModel.uri = this.ControllerContext.Controller.GetType().Name.Replace("Controller", "") + "/" + this.ControllerContext.RouteData.Values["action"].ToString();
                        FactoryLocalhost <CredenciadoViewModel, ApplicationContext> factory = new FactoryLocalhost <CredenciadoViewModel, ApplicationContext>();
                        result.Credenciados = factory.Execute(new EditarCredenciadoBI(Operacao), result.CredenciadoViewModel, CredenciadoViewModel_CondominoID, Operacao);
                        if (factory.Mensagem.Code > 0)
                        {
                            throw new App_DominioException(factory.Mensagem);
                        }

                        //if (result.CredenciadoViewModel.CredenciadoID == 0 && !string.IsNullOrEmpty(result.CredenciadoViewModel.Email) )
                        //{
                        //    #region envio de e-mail ao credenciado para ativação
                        //    result.CredenciadoViewModel.mensagem.Field = factory.Mensagem.Field; // senha do credenciado
                        //    CredenciadoViewModel repository = factory.Execute(new EnviarEmailCredenciadoBI(), result.CredenciadoViewModel);
                        //    if (repository.mensagem.Code > 0)
                        //        throw new ArgumentException(repository.mensagem.MessageBase);
                        //    #endregion
                        //}

                        CredenciadoModel CredenciadoModel = new CredenciadoModel();
                        result.CredenciadoViewModel             = CredenciadoModel.CreateRepository(Request);
                        result.CredenciadoViewModel.CondominoID = CredenciadoViewModel_CondominoID;
                        #endregion

                        Success("Registro processado com sucesso");
                    }
                    catch (App_DominioException ex)
                    {
                        ModelState.AddModelError("", ex.Result.MessageBase); // mensagem amigável ao usuário
                        Error(ex.Result.Message);                            // Mensagem em inglês com a descrição detalhada do erro e fica no topo da tela
                    }
                    catch (Exception ex)
                    {
                        App_DominioException.saveError(ex, GetType().FullName);
                        ModelState.AddModelError("", MensagemPadrao.Message(17).ToString()); // mensagem amigável ao usuário
                        Error(ex.Message);                                                   // Mensagem em inglês com a descrição detalhada do erro e fica no topo da tela
                    }

                    return(View("_Credenciado", result));
                }
                else
                {
                    return(View());
                }
            }
            else
            {
                CondominoEditViewModel result = new CondominoEditViewModel()
                {
                    UnidadeViewModel   = new UnidadeViewModel(),
                    CondominoViewModel = new CondominoPFViewModel()
                    {
                        CondominoID = CredenciadoViewModel.CondominoID
                    },
                    CredenciadoViewModel = CredenciadoViewModel
                };

                Factory <CondominoEditViewModel, ApplicationContext> factory = new Factory <CondominoEditViewModel, ApplicationContext>();
                CondominoEditViewModel obj = factory.Execute(new EditarCondominoBI(), result);
                result.Credenciados = obj.Credenciados;

                Error("Erro de preenhcimento em campos");

                return(View("_Credenciado", result));
            }
        }
        public CondominoEditViewModel Run(Repository value)
        {
            CondominoEditViewModel r      = (CondominoEditViewModel)value;
            CondominoEditViewModel result = new CondominoEditViewModel()
            {
                mensagem = new Validate()
                {
                    Code = 0, Message = "Registro processado com sucesso"
                }
            };

            try
            {
                int _empresaId = sessaoCorrente.empresaId;

                if (r.CondominoViewModel is CondominoPFViewModel)
                {
                    #region CondominoPF
                    CondominoPFModel condominoPFModel = new CondominoPFModel(this.db, this.seguranca_db);
                    result.CondominoViewModel = condominoPFModel.getObject((CondominoPFViewModel)r.CondominoViewModel);
                    if (result.CondominoViewModel == null)
                    {
                        result.CondominoViewModel = new CondominoPFViewModel()
                        {
                            mensagem = new Validate()
                        };

                        throw new App_DominioException("Acesso não permitido", "Error");
                    }
                    #endregion
                }
                else
                {
                    #region CondominoPJ
                    CondominoPJModel condominoPJModel = new CondominoPJModel(this.db, this.seguranca_db);
                    result.CondominoViewModel = condominoPJModel.getObject((CondominoPJViewModel)r.CondominoViewModel);
                    if (result.CondominoViewModel == null)
                    {
                        result.CondominoViewModel = new CondominoPJViewModel()
                        {
                            mensagem = new Validate()
                        };

                        throw new App_DominioException("Acesso não permitido", "Error");
                    }
                    #endregion
                }


                CredenciadoModel               CredenciadoModel;
                ListViewCredenciados           ListCredenciados;
                VeiculoModel                   VeiculoModel;
                ListViewVeiculos               ListVeiculos;
                FuncionarioModel               FuncionarioModel;
                ListViewFuncionarios           ListFuncionarios;
                ListViewGrupoCondominoUsuarios ListGrupoCondominoUsuarios;

                if (String.IsNullOrEmpty(value.sessionId))
                {
                    CredenciadoModel           = new CredenciadoModel(this.db, this.seguranca_db);
                    ListCredenciados           = new ListViewCredenciados(this.db, this.seguranca_db);
                    VeiculoModel               = new VeiculoModel(this.db, this.seguranca_db);
                    ListVeiculos               = new ListViewVeiculos(this.db, this.seguranca_db);
                    FuncionarioModel           = new FuncionarioModel(this.db, this.seguranca_db);
                    ListFuncionarios           = new ListViewFuncionarios(this.db, this.seguranca_db);
                    ListGrupoCondominoUsuarios = new ListViewGrupoCondominoUsuarios(this.db, this.seguranca_db);
                }
                else
                {
                    CredenciadoModel           = new CredenciadoModel(this.db, this.seguranca_db, value.sessionId);
                    ListCredenciados           = new ListViewCredenciados(this.db, this.seguranca_db, value.sessionId);
                    VeiculoModel               = new VeiculoModel(this.db, this.seguranca_db, value.sessionId);
                    ListVeiculos               = new ListViewVeiculos(this.db, this.seguranca_db, value.sessionId);
                    FuncionarioModel           = new FuncionarioModel(this.db, this.seguranca_db, value.sessionId);
                    ListFuncionarios           = new ListViewFuncionarios(this.db, this.seguranca_db, value.sessionId);
                    ListGrupoCondominoUsuarios = new ListViewGrupoCondominoUsuarios(this.db, this.seguranca_db, value.sessionId);
                }

                result.CredenciadoViewModel             = CredenciadoModel.CreateRepository();
                result.CredenciadoViewModel.CondominoID = result.CondominoViewModel.CondominoID;
                result.Credenciados = ListCredenciados.Bind(0, 50, result.CondominoViewModel.CondominoID);


                #region Veículos

                result.VeiculoViewModel = VeiculoModel.CreateRepository();
                result.VeiculoViewModel.CondominioID = sessaoCorrente.empresaId;
                result.VeiculoViewModel.EdificacaoID = r.UnidadeViewModel.EdificacaoID;
                result.VeiculoViewModel.UnidadeID    = r.UnidadeViewModel.UnidadeID;
                result.VeiculoViewModel.CondominoID  = result.CondominoViewModel.CondominoID;

                result.Veiculos = ListVeiculos.Bind(0, 50, result.VeiculoViewModel.CondominioID, result.VeiculoViewModel.EdificacaoID, result.VeiculoViewModel.UnidadeID, result.VeiculoViewModel.CondominoID);
                #endregion

                #region Funcionários
                result.FuncionarioViewModel = FuncionarioModel.CreateRepository();
                result.FuncionarioViewModel.CondominioID = sessaoCorrente.empresaId;
                result.FuncionarioViewModel.EdificacaoID = r.UnidadeViewModel.EdificacaoID;
                result.FuncionarioViewModel.UnidadeID    = r.UnidadeViewModel.UnidadeID;
                result.FuncionarioViewModel.CondominoID  = result.CondominoViewModel.CondominoID;

                result.Funcionarios = ListFuncionarios.Bind(0, 50, result.FuncionarioViewModel.CondominioID, result.FuncionarioViewModel.EdificacaoID, result.FuncionarioViewModel.UnidadeID, result.FuncionarioViewModel.CondominoID);
                #endregion

                #region Grupo de Condôminos

                result.GrupoCondominoUsuarios = ListGrupoCondominoUsuarios.Bind(0, 50, result.CondominoViewModel.CondominoID);
                #endregion

                #region Unidade
                result.UnidadeViewModel = new UnidadeViewModel()
                {
                    CondominioID        = _empresaId,
                    EdificacaoID        = r.UnidadeViewModel.EdificacaoID,
                    EdificacaoDescricao = r.UnidadeViewModel.EdificacaoID > 0 ? db.Edificacaos.Find(r.UnidadeViewModel.EdificacaoID).Descricao : "",
                    UnidadeID           = r.UnidadeViewModel.UnidadeID,
                    Codigo = db.Unidades.Find(_empresaId, r.UnidadeViewModel.EdificacaoID, r.UnidadeViewModel.UnidadeID).Codigo,
                };
                #endregion

                if (SessaoLocal.CondominoID > 0)
                {
                    #region Valida permissão do usuário para editar o condômino
                    if (r.CondominoViewModel.CondominoID != SessaoLocal.CondominoID)
                    {
                        throw new App_DominioException("Acesso não permitido", "Error");
                    }
                    bool flag = false;
                    foreach (Unidade unidade in SessaoLocal.Unidades)
                    {
                        if (r.UnidadeViewModel.UnidadeID == unidade.UnidadeID && r.UnidadeViewModel.EdificacaoID == unidade.EdificacaoID)
                        {
                            flag = true;
                        }
                    }
                    if (!flag)
                    {
                        throw new App_DominioException("Acesso não permitido", "Error");
                    }
                    #endregion
                }
            }
            catch (ArgumentException ex)
            {
                result.CondominoViewModel.mensagem = new Validate()
                {
                    Code = 999, Message = MensagemPadrao.Message(999).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                result.CondominoViewModel.mensagem.Code = 999;

                if (ex.InnerException != null)
                {
                    result.CondominoViewModel.mensagem.MessageBase = new App_DominioException(ex.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                }
                else
                {
                    result.CondominoViewModel.mensagem.MessageBase = new App_DominioException(ex.Message, GetType().FullName).Message;
                }
            }
            catch (DbUpdateException ex)
            {
                result.CondominoViewModel.mensagem.MessageBase = ex.InnerException.InnerException.Message ?? ex.Message;
                if (result.CondominoViewModel.mensagem.MessageBase.ToUpper().Contains("REFERENCE"))
                {
                    if (result.CondominoViewModel.mensagem.MessageBase.ToUpper().Contains("DELETE"))
                    {
                        result.CondominoViewModel.mensagem.Code        = 16;
                        result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(16).ToString();
                        result.CondominoViewModel.mensagem.MessageType = MsgType.ERROR;
                    }
                    else
                    {
                        result.CondominoViewModel.mensagem.Code        = 28;
                        result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(28).ToString();
                        result.CondominoViewModel.mensagem.MessageType = MsgType.ERROR;
                    }
                }
                else if (result.CondominoViewModel.mensagem.MessageBase.ToUpper().Contains("PRIMARY"))
                {
                    result.CondominoViewModel.mensagem.Code        = 37;
                    result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(37).ToString();
                    result.CondominoViewModel.mensagem.MessageType = MsgType.WARNING;
                }
                else if (result.CondominoViewModel.mensagem.MessageBase.ToUpper().Contains("UNIQUE KEY"))
                {
                    result.CondominoViewModel.mensagem.Code        = 54;
                    result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(54).ToString();
                    result.CondominoViewModel.mensagem.MessageType = MsgType.WARNING;
                }
                else
                {
                    result.CondominoViewModel.mensagem.Code        = 44;
                    result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(44).ToString();
                    result.CondominoViewModel.mensagem.MessageType = MsgType.ERROR;
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                result.CondominoViewModel.mensagem = new Validate()
                {
                    Code = 42, Message = MensagemPadrao.Message(42).ToString(), MessageBase = ex.EntityValidationErrors.Select(m => m.ValidationErrors.First().ErrorMessage).First()
                };
            }
            catch (Exception ex)
            {
                result.CondominoViewModel.mensagem.Code        = 17;
                result.CondominoViewModel.mensagem.Message     = MensagemPadrao.Message(17).ToString();
                result.CondominoViewModel.mensagem.MessageBase = new App_DominioException(ex.InnerException.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                result.CondominoViewModel.mensagem.MessageType = MsgType.ERROR;
            }
            return(result);
        }
        public CredenciadoViewModel Run(Repository value)
        {
            bool EnviaEmail = false;

            CredenciadoViewModel r      = (CredenciadoViewModel)value;
            CredenciadoViewModel result = new CredenciadoViewModel()
            {
                uri                    = r.uri,
                empresaId              = sessaoCorrente.empresaId,
                CredenciadoID          = r.CredenciadoID,
                CondominoID            = r.CondominoID,
                Nome                   = r.Nome,
                Email                  = r.Email,
                TipoCredenciadoID      = r.TipoCredenciadoID,
                Sexo                   = r.Sexo,
                Observacao             = r.Observacao,
                UsuarioID              = r.UsuarioID,
                IndVisitantePermanente = r.IndVisitantePermanente,
                mensagem               = new Validate()
                {
                    Code = 0, Message = "Registro processado com sucesso"
                }
            };

            try
            {
                int    _empresaId = SessaoLocal.empresaId;
                string _keyword   = null;

                CredenciadoModel CredenciadoModel = new CredenciadoModel(this.db, this.seguranca_db);

                if (r.CredenciadoID == 0) // Incluir credenciado
                {
                    #region Validar Credenciado
                    if (CredenciadoModel.Validate(result, Crud.INCLUIR).Code > 0)
                    {
                        throw new App_DominioException(result.mensagem);
                    }
                    #endregion

                    #region Cadastrar o credenciado como um usuário em DWM-Segurança

                    if (!string.IsNullOrEmpty(result.Email))
                    {
                        Random random = new Random();
                        string _senha = random.Next(9999, 999999).ToString();
                        _keyword = random.Next(9999, 99999999).ToString();
                        int _grupoId = int.Parse(db.Parametros.Find(_empresaId, (int)Enumeracoes.Enumeradores.Param.GRUPO_CREDENCIADO).Valor);

                        #region Usuario
                        EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>();

                        Usuario user = new Usuario()
                        {
                            nome        = r.Nome.ToUpper(),
                            login       = r.Email,
                            empresaId   = _empresaId,
                            dt_cadastro = Funcoes.Brasilia(),
                            situacao    = "D",
                            isAdmin     = "N",
                            senha       = security.Criptografar(_senha),
                            keyword     = _keyword,
                            dt_keyword  = Funcoes.Brasilia().AddDays(1)
                        };

                        // Verifica se o E-mail do usuário já não existe para a empresa
                        if (seguranca_db.Usuarios.Where(info => info.empresaId == _empresaId && info.login == r.Email).Count() > 0)
                        {
                            throw new ArgumentException("E-mail já cadastrado");
                        }

                        seguranca_db.Usuarios.Add(user);
                        #endregion

                        #region UsuarioGrupo
                        UsuarioGrupo ug = new UsuarioGrupo()
                        {
                            Usuario  = user,
                            grupoId  = _grupoId,
                            situacao = "A"
                        };

                        seguranca_db.UsuarioGrupos.Add(ug);
                        #endregion

                        seguranca_db.SaveChanges();

                        result.UsuarioID = user.usuarioId;
                        EnviaEmail       = true;
                    }
                    #endregion

                    #region Incluir o credenciado
                    result = CredenciadoModel.Insert(result);
                    result.mensagem.Field = _keyword;
                    #endregion
                }
                else if (Operacao == "S") // Alterar credenciado
                {
                    #region Validar Credenciado
                    if (CredenciadoModel.Validate(result, Crud.ALTERAR).Code > 0)
                    {
                        throw new App_DominioException(result.mensagem);
                    }
                    #endregion

                    #region Atualiza o cadastro do usuário
                    if (result.UsuarioID.HasValue && result.UsuarioID > 0 && !string.IsNullOrEmpty(result.Email)) // antes existia UsuarioID e tem E-mail
                    {
                        Usuario user = seguranca_db.Usuarios.Find(result.UsuarioID.Value);

                        if (user != null)
                        {
                            user.login       = result.Email;
                            user.nome        = result.Nome.ToUpper();
                            user.dt_cadastro = Funcoes.Brasilia();

                            seguranca_db.Entry(user).State = EntityState.Modified;

                            seguranca_db.SaveChanges();
                        }
                    }
                    else if ((!result.UsuarioID.HasValue || result.UsuarioID.Value == 0) && !string.IsNullOrEmpty(result.Email)) // antes não existia UsuarioID e na altração passou a existir (e-mail)
                    {
                        Random random = new Random();
                        string _senha = random.Next(9999, 999999).ToString();
                        _keyword = random.Next(9999, 99999999).ToString();
                        int _grupoId = int.Parse(db.Parametros.Find(_empresaId, (int)Enumeracoes.Enumeradores.Param.GRUPO_CREDENCIADO).Valor);

                        #region Usuario
                        EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>();

                        Usuario user = new Usuario()
                        {
                            nome        = r.Nome.ToUpper(),
                            login       = r.Email,
                            empresaId   = _empresaId,
                            dt_cadastro = Funcoes.Brasilia(),
                            situacao    = "D",
                            isAdmin     = "N",
                            senha       = security.Criptografar(_senha),
                            keyword     = _keyword,
                            dt_keyword  = Funcoes.Brasilia().AddDays(1)
                        };

                        // Verifica se o E-mail do usuário já não existe para a empresa
                        if (seguranca_db.Usuarios.Where(info => info.empresaId == _empresaId && info.login == r.Email).Count() > 0)
                        {
                            throw new ArgumentException("E-mail já cadastrado");
                        }

                        seguranca_db.Usuarios.Add(user);
                        #endregion

                        #region UsuarioGrupo
                        UsuarioGrupo ug = new UsuarioGrupo()
                        {
                            Usuario  = user,
                            grupoId  = _grupoId,
                            situacao = "A"
                        };

                        seguranca_db.UsuarioGrupos.Add(ug);
                        #endregion

                        seguranca_db.SaveChanges();

                        result.UsuarioID = user.usuarioId;

                        EnviaEmail = true;
                    }
                    else if (result.UsuarioID.HasValue && result.UsuarioID > 0 && string.IsNullOrEmpty(result.Email)) // antes existia usuário e agora não existe mais => Exclui o usuário em dwm-segurança
                    {
                        #region Exclui o cadastro do usuário
                        int _grupoId = int.Parse(db.Parametros.Find(_empresaId, (int)Enumeracoes.Enumeradores.Param.GRUPO_CREDENCIADO).Valor);

                        // Exclui o usuário do Grupo
                        UsuarioGrupo ug = seguranca_db.UsuarioGrupos.Find(result.UsuarioID, _grupoId);
                        seguranca_db.Set <UsuarioGrupo>().Remove(ug);

                        // Exclui o usuário da tabela Sessao
                        seguranca_db.Database.ExecuteSqlCommand("delete from Sessao where usuarioId = " + result.UsuarioID.ToString() + " and empresaId = " + sessaoCorrente.empresaId.ToString());

                        // Exclui o usuário
                        Usuario user = seguranca_db.Usuarios.Find(result.UsuarioID);
                        seguranca_db.Set <Usuario>().Remove(user);

                        seguranca_db.SaveChanges();
                        #endregion

                        result.UsuarioID = null;
                    }
                    #endregion

                    #region Alterar credenciado
                    result = CredenciadoModel.Update(result);
                    #endregion
                }
                else // Excluir credenciado
                {
                    #region Validar Credenciado
                    if (CredenciadoModel.Validate(result, Crud.EXCLUIR).Code > 0)
                    {
                        throw new App_DominioException(result.mensagem);
                    }
                    #endregion

                    #region Exclui o cadastro do usuário
                    if (result.UsuarioID.HasValue && result.UsuarioID.Value > 0)
                    {
                        int _grupoId = int.Parse(db.Parametros.Find(_empresaId, (int)Enumeracoes.Enumeradores.Param.GRUPO_CREDENCIADO).Valor);

                        // Exclui o usuário do Grupo
                        UsuarioGrupo ug = seguranca_db.UsuarioGrupos.Find(result.UsuarioID, _grupoId);
                        seguranca_db.Set <UsuarioGrupo>().Remove(ug);

                        // Exclui o usuário da tabela Sessao
                        seguranca_db.Database.ExecuteSqlCommand("delete from Sessao where usuarioId = " + result.UsuarioID.ToString() + " and empresaId = " + sessaoCorrente.empresaId.ToString());

                        // Exclui o usuário
                        Usuario user = seguranca_db.Usuarios.Find(result.UsuarioID);
                        seguranca_db.Set <Usuario>().Remove(user);

                        seguranca_db.SaveChanges();
                    }
                    #endregion

                    #region Alterar credenciado
                    result = CredenciadoModel.Delete(result);
                    #endregion
                }

                if (result.mensagem.Code > 0)
                {
                    throw new App_DominioException(result.mensagem);
                }

                db.SaveChanges();

                if (EnviaEmail)
                {
                    int    _sistemaId      = int.Parse(db.Parametros.Find(SessaoLocal.empresaId, (int)Enumeracoes.Enumeradores.Param.SISTEMA).Valor);
                    string _URL_CONDOMINIO = db.Parametros.Find(SessaoLocal.empresaId, (int)Enumeracoes.Enumeradores.Param.URL_CONDOMINIO).Valor;
                    #region envio de e-mail ao credenciado para ativação
                    int    EmailTipoID   = (int)DWM.Models.Enumeracoes.Enumeradores.EmailTipo.CADASTRO_CREDENCIADO;
                    string EmailMensagem = db.EmailTemplates.Where(info => info.CondominioID == SessaoLocal.empresaId && info.EmailTipoID == EmailTipoID).FirstOrDefault().EmailMensagem;
                    EmailMensagem = EmailMensagem.Replace("@link_credenciado", "<p><a href=\"" + _URL_CONDOMINIO + "/Account/AtivarCredenciado?id=" + result.UsuarioID.ToString() + "&key=" + _keyword + "\" target=\"_blank\"><span style=\"font-family: Verdana; font-size: small; color: #0094ff\">Acesso ao " + seguranca_db.Sistemas.Find(_sistemaId).descricao + "</span></a></p>");

                    CondominoUnidade cu = (from cou in db.CondominoUnidades
                                           where cou.CondominioID == SessaoLocal.empresaId &&
                                           cou.CondominoID == r.CondominoID
                                           select cou).FirstOrDefault();

                    EmailLogViewModel EmailLogViewModel = new EmailLogViewModel()
                    {
                        uri                      = r.uri,
                        empresaId                = SessaoLocal.empresaId,
                        EmailTipoID              = EmailTipoID, // "Cadastro Credenciado"
                        CondominioID             = SessaoLocal.empresaId,
                        EdificacaoID             = cu.EdificacaoID,
                        Descricao_Edificacao     = db.Edificacaos.Find(cu.EdificacaoID).Descricao,
                        UnidadeID                = cu.UnidadeID,
                        GrupoCondominoID         = null,
                        Descricao_GrupoCondomino = "",
                        DataEmail                = Funcoes.Brasilia(),
                        Assunto                  = db.EmailTipos.Find(EmailTipoID, SessaoLocal.empresaId).Assunto,
                        EmailMensagem            = EmailMensagem,
                        Nome                     = r.Nome,
                        Email                    = r.Email
                    };

                    EmailNotificacaoBI notificacaoBI = new EmailNotificacaoBI(this.db, this.seguranca_db);
                    EmailLogViewModel = notificacaoBI.Run(EmailLogViewModel);
                    if (EmailLogViewModel.mensagem.Code > 0)
                    {
                        throw new App_DominioException(EmailLogViewModel.mensagem);
                    }


                    //result.CredenciadoViewModel.mensagem.Field = factory.Mensagem.Field; // senha do credenciado
                    //EnviarEmailCredenciadoBI EnviarEmailCredenciadoBI = new EnviarEmailCredenciadoBI(this.db, this.seguranca_db);
                    //CredenciadoViewModel repository = EnviarEmailCredenciadoBI.Run(result);
                    //if (repository.mensagem.Code > 0)
                    //    throw new ArgumentException(repository.mensagem.MessageBase);
                    #endregion
                }
                else
                {
                    result.mensagem.Code = -1; // Tem que devolver -1 porque na Superclasse, se devolver zero, vai executar novamente o SaveChanges.
                }
            }
            catch (ArgumentException ex)
            {
                result.mensagem = new Validate()
                {
                    Code = 997, Message = MensagemPadrao.Message(997).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                result.mensagem = ex.Result;

                if (ex.InnerException != null)
                {
                    result.mensagem.MessageBase = new App_DominioException(ex.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                }
                else
                {
                    result.mensagem.MessageBase = new App_DominioException(ex.Result.Message, GetType().FullName).Message;
                }
            }
            catch (DbUpdateException ex)
            {
                result.mensagem.MessageBase = ex.InnerException.InnerException.Message ?? ex.Message;
                if (result.mensagem.MessageBase.ToUpper().Contains("REFERENCE"))
                {
                    if (result.mensagem.MessageBase.ToUpper().Contains("DELETE"))
                    {
                        result.mensagem.Code        = 16;
                        result.mensagem.Message     = MensagemPadrao.Message(16).ToString();
                        result.mensagem.MessageType = MsgType.ERROR;
                    }
                    else
                    {
                        result.mensagem.Code        = 28;
                        result.mensagem.Message     = MensagemPadrao.Message(28).ToString();
                        result.mensagem.MessageType = MsgType.ERROR;
                    }
                }
                else if (result.mensagem.MessageBase.ToUpper().Contains("PRIMARY"))
                {
                    result.mensagem.Code        = 37;
                    result.mensagem.Message     = MensagemPadrao.Message(37).ToString();
                    result.mensagem.MessageType = MsgType.WARNING;
                }
                else if (result.mensagem.MessageBase.ToUpper().Contains("UNIQUE KEY"))
                {
                    result.mensagem.Code        = 54;
                    result.mensagem.Message     = MensagemPadrao.Message(54).ToString();
                    result.mensagem.MessageType = MsgType.WARNING;
                }
                else
                {
                    result.mensagem.Code        = 44;
                    result.mensagem.Message     = MensagemPadrao.Message(44).ToString();
                    result.mensagem.MessageType = MsgType.ERROR;
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                result.mensagem = new Validate()
                {
                    Code = 42, Message = MensagemPadrao.Message(42).ToString(), MessageBase = ex.EntityValidationErrors.Select(m => m.ValidationErrors.First().ErrorMessage).First()
                };
            }
            catch (Exception ex)
            {
                result.mensagem.Code        = 17;
                result.mensagem.Message     = MensagemPadrao.Message(17).ToString();
                result.mensagem.MessageBase = new App_DominioException(ex.InnerException.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                result.mensagem.MessageType = MsgType.ERROR;
            }
            return(result);
        }