public RegisterViewModel Run(Repository value)
        {
            RegisterViewModel r = (RegisterViewModel)value;

            try
            {
                int _empresaId = int.Parse(db.Parametros.Find(r.CondominioID, (int)Enumeracoes.Enumeradores.Param.EMPRESA).Valor);
                int _grupoId   = int.Parse(db.Parametros.Find(r.CondominioID, (int)Enumeracoes.Enumeradores.Param.GRUPO_USUARIO).Valor);

                #region validar cadastro
                Validate validate = Validate(r);
                if (validate.Code > 0)
                {
                    throw new ArgumentException(validate.MessageBase);
                }
                #endregion

                #region Cadastrar o condômino como um usuário em DWM-Segurança

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

                Usuario user = new Usuario()
                {
                    nome        = r.Nome.Trim().Length > 40 ? r.Nome.Substring(0, 40).ToUpper() : r.Nome.Trim().ToUpper(),
                    login       = r.Email,
                    empresaId   = _empresaId,
                    dt_cadastro = Funcoes.Brasilia(),
                    situacao    = r.UnidadeViewModel.Validador != null && r.UnidadeViewModel.Validador != "" ? "A" : "D",
                    isAdmin     = "N",
                    senha       = security.Criptografar(r.senha)
                };

                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();

                #endregion

                #region Incluir Condômino
                CondominoViewModel condomino = null;
                if (r.UnidadeViewModel.TipoCondomino == "F")
                {
                    #region Incluir o Condômino PF
                    condomino = new CondominoPFViewModel()
                    {
                        uri             = r.uri,
                        empresaId       = _empresaId,
                        CondominoID     = r.CondominoID,
                        CondominioID    = r.CondominioID,
                        Nome            = r.Nome,
                        IndFiscal       = r.IndFiscal,
                        IndProprietario = r.IndProprietario,
                        TelParticular1  = r.TelParticular1,
                        TelParticular2  = r.TelParticular2,
                        Email           = r.Email,
                        IndSituacao     = r.UnidadeViewModel.Validador != null && r.UnidadeViewModel.Validador != "" ? "A" : "D",
                        UsuarioID       = user.usuarioId,
                        ProfissaoID     = r.ProfissaoID,
                        DataNascimento  = r.DataNascimento,
                        Sexo            = r.Sexo,
                        IndAnimal       = r.IndAnimal,
                    };

                    CondominoPFModel condominoPFModel = new CondominoPFModel(this.db, this.seguranca_db);
                    condomino = condominoPFModel.Insert((CondominoPFViewModel)condomino);
                    if (condomino.mensagem.Code > 0)
                    {
                        #region Exclui o usuário
                        seguranca_db.UsuarioGrupos.Remove(ug);
                        seguranca_db.Usuarios.Remove(user);
                        seguranca_db.SaveChanges();
                        #endregion
                        throw new App_DominioException(condomino.mensagem);
                    }
                    #endregion
                }
                else
                {
                    #region Incluir o Condômino PJ
                    condomino = new CondominoPJViewModel()
                    {
                        uri             = r.uri,
                        empresaId       = _empresaId,
                        CondominoID     = r.CondominoID,
                        CondominioID    = r.CondominioID,
                        Nome            = r.Nome,
                        IndFiscal       = r.IndFiscal,
                        IndProprietario = r.IndProprietario,
                        TelParticular1  = r.TelParticular1,
                        TelParticular2  = r.TelParticular2,
                        Email           = r.Email,
                        IndSituacao     = r.UnidadeViewModel.Validador != null && r.UnidadeViewModel.Validador != "" ? "A" : "D",
                        UsuarioID       = user.usuarioId,
                        Administrador   = r.Administrador,
                        RamoAtividadeID = r.RamoAtividadeID,
                    };

                    CondominoPJModel condominoPJModel = new CondominoPJModel(this.db, this.seguranca_db);
                    condomino = condominoPJModel.Insert((CondominoPJViewModel)condomino);
                    if (condomino.mensagem.Code > 0)
                    {
                        #region Exclui o usuário
                        seguranca_db.UsuarioGrupos.Remove(ug);
                        seguranca_db.Usuarios.Remove(user);
                        seguranca_db.SaveChanges();
                        #endregion
                        throw new App_DominioException(condomino.mensagem);
                    }
                    #endregion
                }
                #endregion

                #region Incluir o CondominoUnidade
                CondominoUnidadeViewModel condominoUnidadeViewModel = new CondominoUnidadeViewModel()
                {
                    uri                = r.uri,
                    CondominioID       = r.UnidadeViewModel.CondominioID,
                    EdificacaoID       = r.UnidadeViewModel.EdificacaoID,
                    UnidadeID          = r.UnidadeViewModel.UnidadeID,
                    CondominoID        = r.CondominoID,
                    DataInicio         = Funcoes.Brasilia().Date,
                    CondominoViewModel = condomino
                };

                CondominoUnidadeModel condominoUnidadeModel = new CondominoUnidadeModel(this.db, this.seguranca_db);
                condominoUnidadeViewModel = condominoUnidadeModel.Insert(condominoUnidadeViewModel);
                if (condominoUnidadeViewModel.mensagem.Code > 0)
                {
                    throw new App_DominioException(condomino.mensagem);
                }
                #endregion

                r.CondominoID = condomino.CondominoID;
                r.IndSituacao = condomino.IndSituacao;
                r.mensagem    = condomino.mensagem;
                r.UnidadeViewModel.EdificacaoDescricao = db.Edificacaos.Find(r.UnidadeViewModel.EdificacaoID).Descricao;
                db.SaveChanges();
            }
            catch (ArgumentException ex)
            {
                r.mensagem = new Validate()
                {
                    Code = 999, Message = MensagemPadrao.Message(999).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                r.mensagem = ex.Result;

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

            try
            {
                #region validar cadastro
                Validate validate = Validate(r);
                if (validate.Code > 0)
                {
                    throw new ArgumentException(validate.MessageBase);
                }
                #endregion

                #region Cadastrar o condômino como um usuário em DWM-Segurança

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

                Usuario user = new Usuario()
                {
                    nome        = r.Nome.Trim().Length > 40 ? r.Nome.Substring(0, 40).ToUpper() : r.Nome.Trim().ToUpper(),
                    login       = r.Email,
                    empresaId   = 10,
                    dt_cadastro = Funcoes.Brasilia(),
                    isAdmin     = "N",
                    senha       = security.Criptografar(r.senha)
                };

                seguranca_db.Usuarios.Add(user);
                #endregion

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

                seguranca_db.UsuarioGrupos.Add(ug);
                #endregion

                seguranca_db.SaveChanges();

                #endregion


                r.IndSituacao = "A";
                db.SaveChanges();
            }
            catch (ArgumentException ex)
            {
                r.mensagem = new Validate()
                {
                    Code = 999, Message = MensagemPadrao.Message(999).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                r.mensagem = ex.Result;

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

            try
            {
                // verifica se a chave ínformada é igual a chave gravada no banco para o respectivo usuário
                Usuario u = seguranca_db.Usuarios.Find(r.usuarioId);
                if (u == null)
                {
                    throw new ArgumentException("Usuário inválido");
                }

                r.empresaId = u.empresaId;

                if (u.dt_keyword < Funcoes.Brasilia())
                {
                    throw new ArgumentException("Chave de ativação expirada");
                }

                if (u.keyword != r.keyword)
                {
                    throw new ArgumentException("Chave de ativação inválida");
                }

                if (r.senha == null || r.senha.Trim() == "")
                {
                    throw new ArgumentException("Senha deve ser informada");
                }

                if (r.senha != r.confirmacaoSenha)
                {
                    throw new ArgumentException("Senha e confirmação de senha não conferem");
                }

                EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>();

                // Ativar o usuário
                u.keyword    = null;
                u.dt_keyword = null;
                u.situacao   = "A";
                u.senha      = security.Criptografar(r.senha);

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

                seguranca_db.SaveChanges();

                r.mensagem = new Validate()
                {
                    Code = -1
                };
            }
            catch (DbUpdateException ex)
            {
                r.mensagem.MessageBase = ex.InnerException.InnerException.Message ?? ex.Message;
                if (r.mensagem.MessageBase.ToUpper().Contains("REFERENCE"))
                {
                    if (r.mensagem.MessageBase.ToUpper().Contains("DELETE"))
                    {
                        r.mensagem.Code        = 16;
                        r.mensagem.Message     = MensagemPadrao.Message(16).ToString();
                        r.mensagem.MessageType = MsgType.ERROR;
                    }
                    else
                    {
                        r.mensagem.Code        = 28;
                        r.mensagem.Message     = MensagemPadrao.Message(28).ToString();
                        r.mensagem.MessageType = MsgType.ERROR;
                    }
                }
                else if (r.mensagem.MessageBase.ToUpper().Contains("PRIMARY"))
                {
                    r.mensagem.Code        = 37;
                    r.mensagem.Message     = MensagemPadrao.Message(37).ToString();
                    r.mensagem.MessageType = MsgType.WARNING;
                }
                else if (r.mensagem.MessageBase.ToUpper().Contains("UNIQUE KEY"))
                {
                    r.mensagem.Code        = 54;
                    r.mensagem.Message     = MensagemPadrao.Message(54).ToString();
                    r.mensagem.MessageType = MsgType.WARNING;
                }
                else
                {
                    r.mensagem.Code        = 44;
                    r.mensagem.Message     = MensagemPadrao.Message(44).ToString();
                    r.mensagem.MessageType = MsgType.ERROR;
                }
            }
            catch (ArgumentException ex)
            {
                App_DominioException.saveError(ex, "ERROR");
                r.mensagem = new Validate()
                {
                    Code = 997, Message = MensagemPadrao.Message(997).ToString(), MessageBase = ex.Message
                };
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                r.mensagem = new Validate()
                {
                    Code = 42, Message = MensagemPadrao.Message(42).ToString(), MessageBase = ex.EntityValidationErrors.Select(m => m.ValidationErrors.First().ErrorMessage).First()
                };
            }
            catch (Exception ex)
            {
                r.mensagem.Code        = 17;
                r.mensagem.Message     = MensagemPadrao.Message(17).ToString();
                r.mensagem.MessageBase = new App_DominioException(ex.InnerException.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                r.mensagem.MessageType = MsgType.ERROR;
            }
            return(r);
        }
        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);
        }