示例#1
0
        public VisitanteAcessoViewModel Run(Repository value)
        {
            VisitanteAcessoViewModel a = (VisitanteAcessoViewModel)value;
            VisitanteAcessoViewModel r = new VisitanteAcessoViewModel();

            try
            {
                EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>();
                security.Create(this.seguranca_db);
                sessaoCorrente = security._getSessaoCorrente(seguranca_db, value.sessionId);
                SessaoLocal    = DWMSessaoLocal.GetSessaoLocal(sessaoCorrente, this.db);

                DateTime _hoje = Funcoes.Brasilia().Date;

                #region Recupera o AcessoID
                if (a.AcessoID == 0)
                {
                    a.AcessoID = (from vac in db.VisitanteAcessos
                                  where vac.VisitanteID == a.VisitanteID &&
                                  System.Data.Entity.DbFunctions.TruncateTime(vac.DataInclusao) == _hoje
                                  select vac.AcessoID).Max();
                }

                VisitanteAcessoModel AcessoModel = new VisitanteAcessoModel(this.db, this.seguranca_db);
                a = AcessoModel.getObject(a);

                #endregion

                #region Enviar E-mail de notificação
                int    EmailTemplateID = int.Parse(db.Parametros.Find(sessaoCorrente.empresaId, (int)Enumeracoes.Enumeradores.Param.EMAIL_TEMPLATE_PORTARIA).Valor);
                string _Edificacao     = " - Administração";
                string _Nome           = seguranca_db.Usuarios.Find(sessaoCorrente.usuarioId).nome;
                if (SessaoLocal.Unidades != null)
                {
                    _Edificacao = " - " + db.Edificacaos.Find(a.EdificacaoID).Descricao + " " + a.UnidadeID.ToString();
                    _Nome       = a.Visitante.NomeCondomino;
                }

                EmailLogViewModel EmailLogViewModel = new EmailLogViewModel()
                {
                    UsuarioID            = sessaoCorrente.usuarioId,
                    uri                  = value.uri,
                    empresaId            = sessaoCorrente.empresaId,
                    EmailTipoID          = (int)Enumeracoes.Enumeradores.EmailTipo.PORTARIA,
                    CondominioID         = sessaoCorrente.empresaId,
                    EdificacaoID         = a.EdificacaoID ?? 0,
                    UnidadeID            = a.UnidadeID ?? 0,
                    GrupoCondominoID     = null,
                    DataEmail            = Funcoes.Brasilia(),
                    Descricao_Edificacao = a.DescricaoEdificacao,
                    Nome                 = _Nome,
                    Assunto              = db.EmailTipos.Find((int)Enumeracoes.Enumeradores.EmailTipo.PORTARIA, sessaoCorrente.empresaId).Assunto + " " + a.AcessoID.ToString(),
                    EmailMensagem        = db.EmailTemplates.Find(EmailTemplateID).EmailMensagem.Replace("@ID", a.AcessoID.ToString()).Replace("@NomeVisitante", a.Visitante.Nome).Replace("@data", a.DataAutorizacao.ToString("dd/MM/yyyy")),
                    Repository           = a
                };
                EmailNotificacaoBI notificacaoBI = new EmailNotificacaoBI(this.db, this.seguranca_db);
                EmailLogViewModel = notificacaoBI.Run(EmailLogViewModel);
                if (EmailLogViewModel.mensagem.Code > 0)
                {
                    throw new App_DominioException(EmailLogViewModel.mensagem);
                }

                EmailLogViewModel.Repository = a;
                IEnumerable <EmailLogViewModel> EmailLogPessoas = notificacaoBI.List(EmailLogViewModel);
                #endregion

                foreach (EmailLogViewModel log in EmailLogPessoas.Where(info => info.UsuarioID > 0))
                {
                    Alerta alerta = new Alerta()
                    {
                        usuarioId  = log.UsuarioID.Value,
                        sistemaId  = sessaoCorrente.sistemaId,
                        dt_emissao = Funcoes.Brasilia(),
                        linkText   = "Convite - " + a.Visitante.Nome,
                        url        = "../Portaria/Edit?AcessoID=" + a.AcessoID.ToString(),
                        mensagem   = "<b>" + Funcoes.Brasilia().ToString("dd/MM/yyyy HH:mm") + "h</b><p>Convite - " + a.Visitante.Nome + "</p>"
                    };

                    seguranca_db.Alertas.Add(alerta);
                }
                r.mensagem = new Validate()
                {
                    Code = 0
                };
            }
            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 InformativoViewModel Run(Repository value)
        {
            int EmailTipoID             = (int)Enumeracoes.Enumeradores.EmailTipo.INFORMATIVO;
            InformativoViewModel r      = (InformativoViewModel)value;
            InformativoViewModel result = new InformativoViewModel()
            {
                uri                = r.uri,
                empresaId          = SessaoLocal.empresaId,
                CondominioID       = r.CondominioID,
                EdificacaoID       = r.EdificacaoID,
                InformativoID      = r.InformativoID,
                GrupoCondominoID   = r.GrupoCondominoID,
                DataInformativo    = Funcoes.Brasilia(),
                DataPublicacao     = r.DataPublicacao,
                DataExpiracao      = r.DataExpiracao,
                Cabecalho          = r.Cabecalho,
                Resumo             = r.Resumo,
                MensagemDetalhada  = r.MensagemDetalhada,
                Midia1             = r.Midia1,
                Midia2             = r.Midia2,
                InformativoAnuncio = "N",
                mensagem           = new Validate()
                {
                    Code = 0, Message = "Registro processado com sucesso"
                }
            };

            EmailLogViewModel EmailLogViewModel = null;

            if (!string.IsNullOrEmpty(r.EmailMensagem))
            {
                EmailLogViewModel = new EmailLogViewModel()
                {
                    uri              = r.uri,
                    empresaId        = SessaoLocal.empresaId,
                    EmailTipoID      = EmailTipoID, // "Informativo"
                    CondominioID     = SessaoLocal.empresaId,
                    EdificacaoID     = r.EdificacaoID,
                    GrupoCondominoID = r.GrupoCondominoID,
                    DataEmail        = Funcoes.Brasilia(),
                    Assunto          = db.EmailTipos.Find(EmailTipoID, SessaoLocal.empresaId).Assunto,
                    EmailMensagem    = r.EmailMensagem
                };
            }

            try
            {
                #region Passo 1: Incluir o informativo
                InformativoModel InformativoModel = new InformativoModel(this.db, this.seguranca_db, value.sessionId);
                if (result.InformativoID == 0)
                {
                    result = InformativoModel.Insert(result);
                }
                else
                {
                    result = InformativoModel.Update(result);
                }
                if (result.mensagem.Code > 0)
                {
                    throw new App_DominioException(result.mensagem);
                }
                #endregion

                #region Passo 2: Enviar o e-mail de notificação
                if (!string.IsNullOrEmpty(r.EmailMensagem))
                {
                    EmailNotificacaoBI notificacaoBI = new EmailNotificacaoBI(this.db, this.seguranca_db);
                    EmailLogViewModel = notificacaoBI.Run(EmailLogViewModel);
                    if (EmailLogViewModel.mensagem.Code > 0)
                    {
                        throw new App_DominioException(EmailLogViewModel.mensagem);
                    }
                }
                #endregion

                db.SaveChanges();
                seguranca_db.SaveChanges();

                result.mensagem.Code = -1;
            }
            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") || result.mensagem.MessageBase.ToUpper().Contains("FOREIGN"))
                {
                    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);
        }
        public CondominoUnidadeViewModel Run(Repository value)
        {
            CondominoUnidadeViewModel cu = (CondominoUnidadeViewModel)value;

            cu.mensagem = new Validate()
            {
                Code = 0, Message = "Registro incluído com sucesso"
            };

            CondominoPFViewModel Cond = new CondominoPFViewModel()
            {
                CondominioID = cu.CondominioID,
                CondominoID  = cu.CondominoID,
            };

            CondominoPFModel     model = new CondominoPFModel(this.db, this.seguranca_db);
            CondominoPFViewModel r     = model.getObject(Cond);

            try
            {
                r.IndSituacao = "A";
                r.uri         = value.uri;
                r             = model.Update(r);
                db.SaveChanges();

                #region envio de e-mail ao condômino para notificação de ativação
                int EmailTemplateID = int.Parse(db.Parametros.Find(sessaoCorrente.empresaId, (int)Enumeracoes.Enumeradores.Param.EMAIL_TEMPLATE_ATIVACAO_CONDOMINO).Valor);
                EmailLogViewModel EmailLogViewModel = new EmailLogViewModel()
                {
                    UsuarioID            = sessaoCorrente.usuarioId,
                    uri                  = value.uri,
                    empresaId            = sessaoCorrente.empresaId,
                    EmailTipoID          = (int)DWM.Models.Enumeracoes.Enumeradores.EmailTipo.ATIVACAO_CONDOMINO,
                    CondominioID         = sessaoCorrente.empresaId,
                    EdificacaoID         = cu.EdificacaoID,
                    Descricao_Edificacao = db.Edificacaos.Find(cu.EdificacaoID).Descricao,
                    UnidadeID            = cu.UnidadeID,
                    Email                = r.Email,
                    DataEmail            = Funcoes.Brasilia(),
                    Nome                 = r.Nome,
                    Assunto              = db.EmailTipos.Find((int)Enumeracoes.Enumeradores.EmailTipo.ATIVACAO_CONDOMINO, sessaoCorrente.empresaId).Assunto,
                    EmailMensagem        = db.EmailTemplates.Find(EmailTemplateID).EmailMensagem,
                    Repository           = r
                };

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

                EmailLogViewModel.Repository = r;
                IEnumerable <EmailLogViewModel> EmailLogPessoas = notificacaoBI.List(EmailLogViewModel);

                foreach (EmailLogViewModel log in EmailLogPessoas)
                {
                    Alerta alerta = new Alerta()
                    {
                        usuarioId  = r.UsuarioID.Value, // log.UsuarioID.Value,
                        sistemaId  = sessaoCorrente.sistemaId,
                        dt_emissao = Funcoes.Brasilia(),
                        linkText   = "Ativação - " + r.Nome.Split(' ')[0] + " " + r.Nome.Split(' ')[1],
                        url        = "../Condomino/Index?id=" + r.CondominoID.ToString() + "&EdificacaoID=" + cu.EdificacaoID.ToString() + "&UnidadeID=" + cu.UnidadeID.ToString() + "&TipoPessoa=PF",
                        mensagem   = "<b>" + Funcoes.Brasilia().ToString("dd/MM/yyyy HH:mm") + "h</b><p>Ativação - " + r.Nome.Split(' ')[0] + " " + r.Nome.Split(' ')[1] + "</p>"
                    };

                    seguranca_db.Alertas.Add(alerta);
                }
                #endregion
            }
            catch (ArgumentException ex)
            {
                cu.mensagem = new Validate()
                {
                    Code = 997, Message = MensagemPadrao.Message(997).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                cu.mensagem = ex.Result;

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

            try
            {
                EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>();
                security.Create(this.seguranca_db);
                sessaoCorrente = security._getSessaoCorrente(seguranca_db, value.sessionId);

                #region Recupera o número do chamado
                if (c.ChamadoID == 0)
                {
                    c.ChamadoID = (from cham in db.Chamados
                                   where cham.CondominioID == sessaoCorrente.empresaId &&
                                   cham.UsuarioID == sessaoCorrente.usuarioId
                                   select cham.ChamadoID).Max();
                }
                else
                {
                    ChamadoModel ChamadoModel = new ChamadoModel();
                    ChamadoModel.Create(this.db, this.seguranca_db);
                    c = ChamadoModel.getObject(c);
                }
                #endregion

                #region Enviar E-mail de notificação
                int EmailTemplateID = int.Parse(db.Parametros.Find(sessaoCorrente.empresaId, (int)Enumeracoes.Enumeradores.Param.EMAIL_TEMPLATE_CHAMADO).Valor);

                string _Edificacao = c.EdificacaoID > 0 && c.FilaSolicitanteID == DWMSessaoLocal.FilaCondominoID(sessaoCorrente, db) ? " - " + db.Edificacaos.Find(c.EdificacaoID).Descricao + " " + c.UnidadeID.ToString() : "";

                EmailLogViewModel EmailLogViewModel = new EmailLogViewModel()
                {
                    uri              = value.uri,
                    empresaId        = sessaoCorrente.empresaId,
                    EmailTipoID      = (int)Enumeracoes.Enumeradores.EmailTipo.CHAMADO,
                    CondominioID     = sessaoCorrente.empresaId,
                    EdificacaoID     = c.EdificacaoID,
                    UnidadeID        = c.UnidadeID,
                    GrupoCondominoID = null,
                    DataEmail        = Funcoes.Brasilia(),
                    Nome             = c.NomeUsuario + _Edificacao,
                    Assunto          = db.EmailTipos.Find((int)Enumeracoes.Enumeradores.EmailTipo.CHAMADO, sessaoCorrente.empresaId).Assunto + " " + c.ChamadoID.ToString() + " - " + c.Assunto,
                    EmailMensagem    = db.EmailTemplates.Find(EmailTemplateID).EmailMensagem,
                    Repository       = c
                };
                EmailNotificacaoBI notificacaoBI = new EmailNotificacaoBI(this.db, this.seguranca_db);
                EmailLogViewModel = notificacaoBI.Run(EmailLogViewModel);
                if (EmailLogViewModel.mensagem.Code > 0)
                {
                    throw new App_DominioException(EmailLogViewModel.mensagem);
                }

                EmailLogViewModel.Repository = c;

                IEnumerable <EmailLogViewModel> EmailLogPessoas = notificacaoBI.List(EmailLogViewModel);
                #endregion

                foreach (EmailLogViewModel log in EmailLogPessoas)
                {
                    Alerta alerta = new Alerta()
                    {
                        usuarioId  = log.UsuarioID.Value,
                        sistemaId  = sessaoCorrente.sistemaId,
                        dt_emissao = Funcoes.Brasilia(),
                        linkText   = c.Assunto,
                        url        = "../Chamado/Index?id=" + c.ChamadoID.ToString(),
                        mensagem   = "<b>" + Funcoes.Brasilia().ToString("dd/MM/yyyy HH:mm") + "h</b><p>" + c.Assunto + "</p>"
                    };

                    seguranca_db.Alertas.Add(alerta);
                }
                r.mensagem = new Validate()
                {
                    Code = 0
                };
            }
            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);
        }
        public UsuarioViewModel Run(Repository value)
        {
            UsuarioViewModel r      = (UsuarioViewModel)value;
            UsuarioViewModel result = new UsuarioViewModel()
            {
                uri       = r.uri,
                empresaId = r.empresaId,
                login     = r.login,
                mensagem  = new Validate()
                {
                    Code = 0, Message = "Registro processado com sucesso"
                }
            };

            try
            {
                #region Validar LOGIN
                Usuario u = seguranca_db.Usuarios.Where(info => info.login == r.login && info.empresaId == r.empresaId).FirstOrDefault();

                if (u == null)
                {
                    result.mensagem = new Validate()
                    {
                        Code = 999, Message = "Login inválido ou inexistente."
                    };
                    throw new App_DominioException(result.mensagem);
                }
                else if (u.situacao != "A")
                {
                    result.mensagem = new Validate()
                    {
                        Code = 998, Message = "Este login possui pendências administrativas. Favor entrar em contato com a secretaria para providenciar a atualização."
                    };
                    throw new App_DominioException(result.mensagem);
                }
                ;
                #endregion

                #region Atualizar o cadastro do usuário com a keyword
                Random random = new Random();
                u.keyword    = random.Next(9999, 99999999).ToString();
                u.dt_keyword = Funcoes.Brasilia().AddDays(1);

                seguranca_db.Entry(u).State = EntityState.Modified;
                seguranca_db.SaveChanges();
                #endregion

                #region Enviar e-mail
                int    _sistemaId      = int.Parse(db.Parametros.Find(r.empresaId, (int)Enumeracoes.Enumeradores.Param.SISTEMA).Valor);
                string _URL_CONDOMINIO = db.Parametros.Find(r.empresaId, (int)Enumeracoes.Enumeradores.Param.URL_CONDOMINIO).Valor;
                int    EmailTipoID     = (int)Enumeracoes.Enumeradores.EmailTipo.FORGOT;
                string EmailMensagem   = db.EmailTemplates.Where(info => info.CondominioID == r.empresaId && info.EmailTipoID == EmailTipoID).FirstOrDefault().EmailMensagem;
                EmailMensagem = EmailMensagem.Replace("@link_esqueci_minha_senha", "<p><a href=\"" + _URL_CONDOMINIO + "/Account/EsqueciMinhaSenha?id=" + u.usuarioId.ToString() + "&key=" + u.keyword + "\" target=\"_blank\"><span style=\"font-family: Verdana; font-size: small; color: #0094ff\">recuperar senha</span></a></p>");
                EmailMensagem = EmailMensagem.Replace("@nome", u.nome).Replace("@email", u.login);
                #region Verifica se o usuário é um condômino
                CondominoUnidade cu            = null;
                int?        _EdificacaoID      = null;
                string      _Descricao_Unidade = null;
                int?        _UnidadeID         = null;
                CondominoPF CondominoPF        = db.CondominoPFs.Where(info => info.UsuarioID == u.usuarioId && info.CondominioID == u.empresaId && info.IndSituacao == "A").FirstOrDefault();
                if (CondominoPF != null)
                {
                    cu = (from cou in db.CondominoUnidades
                          where cou.CondominoID == CondominoPF.CondominoID
                          select cou).FirstOrDefault();

                    _EdificacaoID      = cu.EdificacaoID;
                    _Descricao_Unidade = db.Edificacaos.Find(cu.EdificacaoID).Descricao;
                    _UnidadeID         = cu.UnidadeID;
                }
                #endregion

                #region Envia o e-mail de renovação de senha
                EmailLogViewModel EmailLogViewModel = new EmailLogViewModel()
                {
                    uri                      = r.uri,
                    empresaId                = u.empresaId,
                    EmailTipoID              = EmailTipoID, // "Esqueci minha senha"
                    CondominioID             = u.empresaId,
                    EdificacaoID             = _EdificacaoID,
                    Descricao_Edificacao     = _Descricao_Unidade,
                    UnidadeID                = _UnidadeID,
                    GrupoCondominoID         = null,
                    Descricao_GrupoCondomino = "",
                    DataEmail                = Funcoes.Brasilia(),
                    Assunto                  = db.EmailTipos.Find(EmailTipoID, u.empresaId).Assunto,
                    EmailMensagem            = EmailMensagem,
                    Nome                     = u.nome,
                    Email                    = u.login
                };

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

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