public override ChamadoViewModel BeforeInsert(ChamadoViewModel value)
        {
            try
            {
                value                      = GetUsuario(value);
                value.empresaId            = SessaoLocal.empresaId;
                value.DataChamado          = Funcoes.Brasilia();
                value.CondominioID         = SessaoLocal.empresaId;
                value.ChamadoStatusID      = 0;
                value.DataRedirecionamento = Funcoes.Brasilia();

                // Se a fila de atendimento destino for a fila do condômino, então preencher o responsável pelo chamado (UsuarioID, Nome e Login)
                if (value.FilaAtendimentoID == DWMSessaoLocal.FilaCondominoID(sessaoCorrente, db))
                {
                    int     UsuarioCondominoID = db.Condominos.Find(value.CondominoID).UsuarioID.Value;
                    Usuario u = seguranca_db.Usuarios.Find(UsuarioCondominoID);
                    value.UsuarioFilaID    = u.usuarioId;
                    value.NomeUsuarioFila  = u.nome;
                    value.LoginUsuarioFila = u.login;
                    value.ChamadoFilaViewModel.UsuarioID = u.usuarioId; // login e nome do usuário serão recuperados do método beforeinsert do ChamadoFilaModel.
                }

                #region Executa o método BeforeInsert do ChamadoFila
                ChamadoFilaModel ChamadoFilaModel = new ChamadoFilaModel();
                ChamadoFilaModel.Create(this.db, this.seguranca_db, SessaoLocal.sessaoId);
                value.ChamadoFilaViewModel = ChamadoFilaModel.BeforeInsert(value.ChamadoFilaViewModel);
                value.Rotas = new List <ChamadoFilaViewModel>();
                ((List <ChamadoFilaViewModel>)value.Rotas).Add(value.ChamadoFilaViewModel);
                #endregion

                #region Executa o método BeforeInsert do ChamadoAnexo para cada elemento da coleção
                ChamadoAnexoModel ChamadoAnexoModel = new ChamadoAnexoModel();
                ChamadoAnexoModel.Create(this.db, this.seguranca_db, SessaoLocal.sessaoId);
                int index = 0;
                while (index <= value.Anexos.Count() - 1)
                {
                    ChamadoAnexoViewModel ChamadoAnexoViewModel = ChamadoAnexoModel.BeforeInsert(value.Anexos.ElementAt(index));
                    value.Anexos.ElementAt(index).UsuarioID = ChamadoAnexoViewModel.UsuarioID;
                    value.Anexos.ElementAt(index).Nome      = ChamadoAnexoViewModel.Nome;
                    value.Anexos.ElementAt(index).Login     = ChamadoAnexoViewModel.Login;
                    index++;
                }
                #endregion
            }
            catch (Exception ex)
            {
                value.mensagem = new Validate()
                {
                    Code        = 999,
                    Message     = "Ocorreu um erro no evento interno que antecede a  inclusão do chamado. Favor entrar em contato com o administrador do sistema",
                    MessageBase = ex.Message
                };
            }

            return(value);
        }
Ejemplo n.º 2
0
        public override void BeforeCreate(ref ChamadoViewModel value, FormCollection collection)
        {
            base.BeforeCreate(ref value, collection);

            #region Anexos
            value.Anexos = new List <ChamadoAnexoViewModel>();
            if (collection["File1ID"] != null && collection["File1ID"] != "")
            {
                ChamadoAnexoViewModel anexo1 = new ChamadoAnexoViewModel()
                {
                    FileID       = collection["File1ID"],
                    DataAnexo    = Funcoes.Brasilia(),
                    NomeOriginal = collection["NomeOriginal1"],
                };
                ((List <ChamadoAnexoViewModel>)value.Anexos).Add(anexo1);
            }
            if (collection["File2ID"] != null && collection["File2ID"] != "")
            {
                ChamadoAnexoViewModel anexo2 = new ChamadoAnexoViewModel()
                {
                    FileID       = collection["File2ID"],
                    DataAnexo    = Funcoes.Brasilia(),
                    NomeOriginal = collection["NomeOriginal2"],
                };
                ((List <ChamadoAnexoViewModel>)value.Anexos).Add(anexo2);
            }
            if (collection["File3ID"] != null && collection["File3ID"] != "")
            {
                ChamadoAnexoViewModel anexo3 = new ChamadoAnexoViewModel()
                {
                    FileID       = collection["File3ID"],
                    DataAnexo    = Funcoes.Brasilia(),
                    NomeOriginal = collection["NomeOriginal3"],
                };
                ((List <ChamadoAnexoViewModel>)value.Anexos).Add(anexo3);
            }
            #endregion

            #region Identificação do Condômino
            if (collection ["__EdificacaoID"] != null && collection["__EdificacaoID"] != "")
            {
                value.EdificacaoID  = int.Parse(collection["__EdificacaoID"]);
                value.UnidadeID     = int.Parse(collection["__UnidadeID"]);
                value.CondominoID   = int.Parse(collection["__CondominoID"]);
                value.CredenciadoID = int.Parse(collection["__CredenciadoID"]);
            }
            #endregion

            if (Request ["_ChamadoMotivoID"] != null && Request["_ChamadoMotivoID"] != "")
            {
                value.ChamadoMotivoID = int.Parse(collection["_ChamadoMotivoID"]);
            }

            if (Request["_FilaSolicitanteID"] != null && Request["_FilaSolicitanteID"] != "")
            {
                value.FilaSolicitanteID = int.Parse(collection["_FilaSolicitanteID"]);
            }

            if (Request["_FilaAtendimentoID"] != null && Request["_FilaAtendimentoID"] != "")
            {
                value.FilaAtendimentoID    = int.Parse(collection["_FilaAtendimentoID"]);
                value.ChamadoFilaViewModel = new ChamadoFilaViewModel()
                {
                    Data = Funcoes.Brasilia(),
                    FilaAtendimentoID = value.FilaAtendimentoID.Value
                };
            }

            value.MensagemOriginal = collection["MensagemOriginal"];
            value.uri = this.ControllerContext.Controller.GetType().Name.Replace("Controller", "") + "/" + this.ControllerContext.RouteData.Values["action"].ToString();
        }
        public override ChamadoViewModel AfterInsert(ChamadoViewModel value)
        {
            // Enviar e-mail ao destinatário
            try
            {
                #region Passo único: Executa o método AfterInsert do ChamadoAnexo para cada elemento da coleção
                ChamadoAnexoModel ChamadoAnexoModel = new ChamadoAnexoModel();
                ChamadoAnexoModel.Create(this.db, this.seguranca_db, SessaoLocal.sessaoId);
                int index = 0;
                while (index <= value.Anexos.Count() - 1)
                {
                    ChamadoAnexoViewModel ChamadoAnexoViewModel = ChamadoAnexoModel.AfterInsert(value.Anexos.ElementAt(index));
                    index++;
                }
                #endregion
            }
            catch (ArgumentException ex)
            {
                value.mensagem = new Validate()
                {
                    Code = 997, Message = MensagemPadrao.Message(997).ToString(), MessageBase = ex.Message
                };
            }
            catch (App_DominioException ex)
            {
                value.mensagem = ex.Result;

                if (ex.InnerException != null)
                {
                    value.mensagem.MessageBase = new App_DominioException(ex.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                }
                else
                {
                    value.mensagem.MessageBase = new App_DominioException(ex.Result.Message, GetType().FullName).Message;
                }
            }
            catch (DbUpdateException ex)
            {
                value.mensagem.MessageBase = ex.InnerException.InnerException.Message ?? ex.Message;
                if (value.mensagem.MessageBase.ToUpper().Contains("REFERENCE") || value.mensagem.MessageBase.ToUpper().Contains("FOREIGN"))
                {
                    if (value.mensagem.MessageBase.ToUpper().Contains("DELETE"))
                    {
                        value.mensagem.Code        = 16;
                        value.mensagem.Message     = MensagemPadrao.Message(16).ToString();
                        value.mensagem.MessageType = MsgType.ERROR;
                    }
                    else
                    {
                        value.mensagem.Code        = 28;
                        value.mensagem.Message     = MensagemPadrao.Message(28).ToString();
                        value.mensagem.MessageType = MsgType.ERROR;
                    }
                }
                else if (value.mensagem.MessageBase.ToUpper().Contains("PRIMARY"))
                {
                    value.mensagem.Code        = 37;
                    value.mensagem.Message     = MensagemPadrao.Message(37).ToString();
                    value.mensagem.MessageType = MsgType.WARNING;
                }
                else if (value.mensagem.MessageBase.ToUpper().Contains("UNIQUE KEY"))
                {
                    value.mensagem.Code        = 54;
                    value.mensagem.Message     = MensagemPadrao.Message(54).ToString();
                    value.mensagem.MessageType = MsgType.WARNING;
                }
                else
                {
                    value.mensagem.Code        = 44;
                    value.mensagem.Message     = MensagemPadrao.Message(44).ToString();
                    value.mensagem.MessageType = MsgType.ERROR;
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                value.mensagem = new Validate()
                {
                    Code = 42, Message = MensagemPadrao.Message(42).ToString(), MessageBase = ex.EntityValidationErrors.Select(m => m.ValidationErrors.First().ErrorMessage).First()
                };
            }
            catch (Exception ex)
            {
                value.mensagem.Code        = 17;
                value.mensagem.Message     = MensagemPadrao.Message(17).ToString();
                value.mensagem.MessageBase = new App_DominioException(ex.InnerException.InnerException.Message ?? ex.Message, GetType().FullName).Message;
                value.mensagem.MessageType = MsgType.ERROR;
            }
            return(value);
        }
        public override ChamadoViewModel MapToRepository(Chamado entity)
        {
            ChamadoViewModel value = new ChamadoViewModel()
            {
                ChamadoID                = entity.ChamadoID,
                ChamadoMotivoID          = entity.ChamadoMotivoID,
                DescricaoChamadoMotivo   = db.ChamadoMotivos.Find(entity.ChamadoMotivoID, sessaoCorrente.empresaId).Descricao,
                ChamadoStatusID          = entity.ChamadoStatusID,
                DescricaoChamadoStatus   = db.ChamadoStatuss.Find(entity.ChamadoStatusID, sessaoCorrente.empresaId).Descricao,
                FilaSolicitanteID        = entity.FilaSolicitanteID,
                DescricaoFilaSolicitante = db.FilaAtendimentos.Find(entity.FilaSolicitanteID).Descricao,
                FilaCondominoID          = DWMSessaoLocal.FilaCondominoID(sessaoCorrente, this.db),
                CondominioID             = entity.CondominioID,
                CondominoID              = entity.CondominoID,
                NomeCondomino            = entity.CondominoID.HasValue ? db.Condominos.Find(entity.CondominoID).Nome : "",
                NomeCredenciado          = entity.CredenciadoID.HasValue ? db.Credenciados.Find(entity.CredenciadoID).Nome : "",
                CredenciadoID            = entity.CredenciadoID,
                EdificacaoID             = entity.EdificacaoID,
                UnidadeID                = entity.UnidadeID,
                DescricaoEdificacao      = entity.UnidadeID.HasValue ? db.Edificacaos.Find(entity.EdificacaoID).Descricao : "",
                DataChamado              = entity.DataChamado,
                Assunto                  = entity.Assunto,
                UsuarioID                = entity.UsuarioID,
                NomeUsuario              = entity.NomeUsuario,
                LoginUsuario             = entity.LoginUsuario,
                Prioridade               = entity.Prioridade,
                DataUltimaAnotacao       = entity.DataUltimaAnotacao,
                MensagemOriginal         = entity.MensagemOriginal,
                FilaAtendimentoID        = entity.FilaAtendimentoID,
                DescricaoFilaAtendimento = db.FilaAtendimentos.Find(entity.FilaAtendimentoID).Descricao,
                DataRedirecionamento     = entity.DataRedirecionamento,
                UsuarioFilaID            = entity.UsuarioFilaID,
                NomeUsuarioFila          = entity.NomeUsuarioFila,
                LoginUsuarioFila         = entity.LoginUsuarioFila,
                mensagem                 = new Validate()
                {
                    Code = 0, Message = "Registro incluído com sucesso", MessageBase = "Registro incluído com sucesso", MessageType = MsgType.SUCCESS
                }
            };

            if (entity.CondominoID.HasValue)
            {
                value.UsuarioCondominoViewModel = new UsuarioViewModel()
                {
                    empresaId = SessaoLocal.empresaId,
                    usuarioId = db.Condominos.Find(entity.CondominoID).UsuarioID.Value
                };
            }
            else if (entity.CredenciadoID.HasValue)
            {
                value.UsuarioCondominoViewModel = new UsuarioViewModel()
                {
                    empresaId = SessaoLocal.empresaId,
                    usuarioId = db.Credenciados.Find(entity.CredenciadoID).UsuarioID.Value
                };
            }

            ListViewChamadoFila     listChamadoFila     = new ListViewChamadoFila(this.db, this.seguranca_db, sessaoCorrente.sessaoId);
            ListViewChamadoAnotacao listChamadoAnotacao = new ListViewChamadoAnotacao(this.db, this.seguranca_db, sessaoCorrente.sessaoId);
            ListViewChamadoAnexo    listChamadoAnexo    = new ListViewChamadoAnexo(this.db, this.seguranca_db, sessaoCorrente.sessaoId);

            if (entity.ChamadoID > 0)
            {
                value.Rotas     = listChamadoFila.Bind(0, 200, value.ChamadoID);
                value.Anotacoes = listChamadoAnotacao.Bind(0, 200, value.ChamadoID);
                value.Anexos    = listChamadoAnexo.Bind(0, 100, value.ChamadoID);
            }
            else
            {
                #region Rotas
                value.Rotas = new List <ChamadoFilaViewModel>();
                ChamadoFilaModel ChamadoFilaModel = new ChamadoFilaModel();
                ChamadoFilaModel.Create(this.db, this.seguranca_db, sessaoCorrente.sessaoId);
                foreach (ChamadoFila fila in entity.Rotas)
                {
                    ChamadoFilaViewModel ChamadoFilaViewModel = ChamadoFilaModel.MapToRepository(fila);
                    ((List <ChamadoFilaViewModel>)value.Rotas).Add(ChamadoFilaViewModel);
                }
                #endregion

                #region Anexos
                value.Anexos = new List <ChamadoAnexoViewModel>();
                ChamadoAnexoModel ChamadoAnexoModel = new ChamadoAnexoModel();
                ChamadoAnexoModel.Create(this.db, this.seguranca_db, sessaoCorrente.sessaoId);
                foreach (ChamadoAnexo anexo in entity.Anexos)
                {
                    ChamadoAnexoViewModel ChamadoAnexoViewModel = ChamadoAnexoModel.MapToRepository(anexo);
                    ((List <ChamadoAnexoViewModel>)value.Anexos).Add(ChamadoAnexoViewModel);
                }
                #endregion
            }

            #region Verifica se o usuário corrente é um usuário da Fila de atendimento atual
            value.IsUsuarioFila = false;

            if (value.UsuarioFilaID.HasValue && value.UsuarioFilaID.Value == SessaoLocal.usuarioId)
            {
                value.IsUsuarioFila = true;
            }
            else if (value.FilaAtendimentoID != DWMSessaoLocal.FilaCondominoID(sessaoCorrente, db))
            {
                value.IsUsuarioFila = (from f in db.FilaAtendimentos
                                       join fu in db.FilaAtendimentoUsuarios on f.FilaAtendimentoID equals fu.FilaAtendimentoID
                                       where f.CondominioID == SessaoLocal.empresaId &&
                                       f.FilaAtendimentoID == value.FilaAtendimentoID &&
                                       fu.UsuarioID == SessaoLocal.usuarioId
                                       select fu.UsuarioID).Count() > 0;
            }
            #endregion

            #region Verifica se o usuário corrente é um condômino/credenciado
            value.IsCondomino = (SessaoLocal.CondominoID > 0 || SessaoLocal.CredenciadoID.HasValue);
            #endregion

            return(value);
        }