Ejemplo n.º 1
0
        public ChamadoAnotacaoViewModel Run(Repository value)
        {
            ChamadoViewModel         repository = (ChamadoViewModel)value;
            ChamadoAnotacaoViewModel r          = repository.ChamadoAnotacaoViewModel;
            ChamadoAnotacaoViewModel result     = new ChamadoAnotacaoViewModel()
            {
                uri          = r.uri,
                empresaId    = sessaoCorrente.empresaId,
                ChamadoID    = r.ChamadoID,
                DataAnotacao = Funcoes.Brasilia(),
                Mensagem     = r.Mensagem,
                UsuarioID    = SessaoLocal.usuarioId,
                mensagem     = new Validate()
                {
                    Code = 0, Message = "Registro processado com sucesso"
                }
            };

            try
            {
                int _empresaId = sessaoCorrente.empresaId;

                ChamadoAnotacaoModel model = new ChamadoAnotacaoModel();

                if (String.IsNullOrEmpty(value.sessionId))
                {
                    model.Create(this.db, this.seguranca_db);
                }
                else
                {
                    model.Create(this.db, this.seguranca_db, value.sessionId);
                }


                result = model.Insert(result);

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

                #region Encaminha o chamado para a Fila de Atendimento
                if (repository.FilaAtendimentoID.HasValue && repository.FilaAtendimentoID != 0)
                {
                    ChamadoFilaModel ChamadoFilaModel = new ChamadoFilaModel();

                    if (String.IsNullOrEmpty(value.sessionId))
                    {
                        ChamadoFilaModel.Create(this.db, this.seguranca_db);
                    }
                    else
                    {
                        ChamadoFilaModel.Create(this.db, this.seguranca_db, value.sessionId);
                    }

                    ChamadoFilaViewModel ChamadoFilaViewModel = new ChamadoFilaViewModel()
                    {
                        empresaId         = SessaoLocal.empresaId,
                        uri               = r.uri,
                        ChamadoID         = repository.ChamadoID,
                        FilaAtendimentoID = repository.FilaAtendimentoID.Value,
                    };
                    if (repository.FilaAtendimentoID == DWMSessaoLocal.FilaCondominoID(this.sessaoCorrente, this.db))
                    {
                        Chamado Chamado = db.Chamados.Find(repository.ChamadoID);
                        if (Chamado.CredenciadoID.HasValue)
                        {
                            ChamadoFilaViewModel.UsuarioID = db.Credenciados.Find(Chamado.CredenciadoID).UsuarioID;
                        }
                        else if (Chamado.CondominoID.HasValue)
                        {
                            ChamadoFilaViewModel.UsuarioID = db.Condominos.Find(Chamado.CondominoID).UsuarioID;
                        }
                    }

                    ChamadoFilaViewModel = ChamadoFilaModel.Insert(ChamadoFilaViewModel);
                    if (ChamadoFilaViewModel.mensagem.Code > 0)
                    {
                        throw new App_DominioException(ChamadoFilaViewModel.mensagem);
                    }
                }
                #endregion

                #region Altera o Status do Chamado
                ChamadoModel ChamadoModel = new ChamadoModel();

                if (String.IsNullOrEmpty(value.sessionId))
                {
                    ChamadoModel.Create(this.db, this.seguranca_db);
                }
                else
                {
                    ChamadoModel.Create(this.db, this.seguranca_db, value.sessionId);
                }


                ChamadoViewModel ChamadoViewModel = ChamadoModel.getObject(repository);
                if (ChamadoViewModel.ChamadoStatusID != repository.ChamadoStatusID)
                {
                    ChamadoViewModel.ChamadoStatusID = repository.ChamadoStatusID;
                    ChamadoViewModel.empresaId       = SessaoLocal.empresaId;
                    ChamadoViewModel.uri             = r.uri;
                    ChamadoViewModel = ChamadoModel.Update(ChamadoViewModel);
                    if (ChamadoViewModel.mensagem.Code > 0)
                    {
                        throw new App_DominioException(ChamadoViewModel.mensagem);
                    }
                }
                #endregion

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

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