예제 #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);
        }
예제 #2
0
        public ActionResult EditAnotacao(
            int ChamadoID, string Mensagem,
            string FilaAtendimentoAtualID, string _FilaAtendimentoID, string DescricaoFilaAtendimento,
            string IsCondomino, string _ChamadoStatusID, string DescricaoChamadoStatus)
        {
            if (ModelState.IsValid)
            {
                if (ViewBag.ValidateRequest)
                {
                    ChamadoViewModel result = null;
                    try
                    {
                        int?FilaAtendimentoID = null;
                        if (FilaAtendimentoAtualID != _FilaAtendimentoID)
                        {
                            FilaAtendimentoID = int.Parse(_FilaAtendimentoID);
                        }

                        #region Incluir Anotação
                        result = new ChamadoViewModel()
                        {
                            ChamadoID                = ChamadoID,
                            uri                      = this.ControllerContext.Controller.GetType().Name.Replace("Controller", "") + "/" + this.ControllerContext.RouteData.Values["action"].ToString(),
                            ChamadoAnexoViewModel    = new ChamadoAnexoViewModel(),
                            ChamadoFilaViewModel     = new ChamadoFilaViewModel(),
                            ChamadoAnotacaoViewModel = new ChamadoAnotacaoViewModel()
                            {
                                ChamadoID = ChamadoID,
                                Mensagem  = Mensagem
                            },
                            ChamadoStatusID          = _ChamadoStatusID == null || _ChamadoStatusID == "" ? 0 : int.Parse(_ChamadoStatusID),
                            FilaAtendimentoID        = FilaAtendimentoID,
                            DescricaoFilaAtendimento = DescricaoFilaAtendimento,
                            DescricaoChamadoStatus   = DescricaoChamadoStatus,
                            DataRedirecionamento     = Funcoes.Brasilia(),
                            Rotas    = new List <ChamadoFilaViewModel>(),
                            Anexos   = new List <ChamadoAnexoViewModel>(),
                            mensagem = new Validate()
                            {
                                Code = 0
                            }
                        };
                        if (FilaAtendimentoAtualID == _FilaAtendimentoID)
                        {
                            result.IsUsuarioFila = false;
                        }
                        else
                        {
                            result.IsUsuarioFila = true;
                        }

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

                        ChamadoAnotacaoModel     model = new ChamadoAnotacaoModel();
                        ChamadoAnotacaoViewModel ChamadoAnotacaoViewModel = model.CreateRepository(Request);
                        result.ChamadoAnotacaoViewModel.ChamadoID = ChamadoID;
                        #endregion

                        #region Emitir Alerta e enviar o e-mail para a fila destinatária
                        FactoryLocalhost <AlertaRepository, ApplicationContext> factoryAlert = new FactoryLocalhost <AlertaRepository, ApplicationContext>();
                        AlertaBI         bi = new AlertaBI();
                        AlertaRepository a  = factoryAlert.Execute(new AlertaBI(), result);
                        if (a.mensagem.Code > 0)
                        {
                            throw new Exception(a.mensagem.Message);
                        }
                        #endregion

                        #region Recupera o ChamadoViewModel
                        FactoryLocalhost <ChamadoViewModel, ApplicationContext> factoryChamado = new FactoryLocalhost <ChamadoViewModel, ApplicationContext>();
                        result = factoryChamado.Execute(new ChamadoEditBI(), result);
                        #endregion

                        //if (FilaAtendimentoAtualID != _FilaAtendimentoID)
                        //    result.IsUsuarioFila = false;
                        //else
                        //    result.IsUsuarioFila = true;

                        //result.IsCondomino = IsCondomino == "True" ? true : false;

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

                    return(View("_Anotacao", result));
                }
                else
                {
                    return(View());
                }
            }
            else
            {
                //CondominoEditViewModel result = new CondominoEditViewModel()
                //{
                //    UnidadeViewModel = new UnidadeViewModel()
                //    {
                //        EdificacaoID = VeiculoViewModel.EdificacaoID,
                //        UnidadeID = VeiculoViewModel.UnidadeID,
                //        CondominioID = VeiculoViewModel.CondominioID
                //    },
                //    CondominoPFViewModel = new CondominoPFViewModel()
                //    {
                //        CondominoID = VeiculoViewModel.CondominoID
                //    },
                //    VeiculoViewModel = VeiculoViewModel
                //};

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

                //Error("Erro de preenhcimento em campos");

                return(View("_Anotacao", result));
            }
        }