Ejemplo n.º 1
0
        public string Executar(string mensagem, string numeroMensagem, Usuario usuario)
        {
            usuarioIntegracao = usuario;
            var  xml      = this.CarregarMensagem <Pollux.MSG0288>(mensagem);
            bool reaberta = false; // Variável de controle de acesso

            List <Intelbras.Message.Helper.Entities.AtendimentoTelefonico> lstAtendimentosTelefonicos = new List <Pollux.Entities.AtendimentoTelefonico>();

            #region Leitura do xml atualização ocorrencia e montagem retorno

            if (xml.AtendimentoTelefonico != null)
            {
                foreach (Pollux.Entities.AtendimentoTelefonico atendimentoTelefonico in xml.AtendimentoTelefonico)
                {
                    if (!string.IsNullOrEmpty(atendimentoTelefonico.ProtocoloTelefonico))
                    {
                        Ocorrencia ocorrencia = new Servicos.RepositoryService(this.Organizacao, this.IsOffline).Ocorrencia.ObterPorProtocoloTelefonico(atendimentoTelefonico.ProtocoloTelefonico);
                        if (ocorrencia != null)
                        {
                            //Reabre a ocorrência, para que salve os dados do protocola de atendimento.
                            bool ocorrenciaEstavaFechada = (ocorrencia.RazaoStatus.Value == (int)StatusDaOcorrencia.Resolvido);
                            if (ocorrenciaEstavaFechada)
                            {
                                (new CRM2013.Domain.Servicos.RepositoryService()).Ocorrencia.ReabrirOcorrencia(ocorrencia);
                                ocorrencia.RazaoStatus  = (int)StatusDaOcorrencia.Aberta;
                                ocorrencia.ManterAberto = true;
                                reaberta = true;
                                ocorrencia.Atualizar();
                            }

                            if (atendimentoTelefonico.DuracaoChamada.HasValue)
                            {
                                ocorrencia.DuracaoChamada = atendimentoTelefonico.DuracaoChamada;
                            }

                            if (!string.IsNullOrEmpty(atendimentoTelefonico.NomeQuestionario))
                            {
                                List <QuestionarioPergunta> lstQuestionarioPergunta = new Servicos.QuestionarioPerguntaServices(this.Organizacao, this.IsOffline).ListarQuestionarioPerguntaPorNomeQuestionario(atendimentoTelefonico.NomeQuestionario);

                                if (atendimentoTelefonico.PesquisaSatisfacao != null)
                                {
                                    if (atendimentoTelefonico.PesquisaSatisfacao.Count > 0)
                                    {
                                        foreach (var pesquisaSatisfacao in atendimentoTelefonico.PesquisaSatisfacao)
                                        {
                                            foreach (var pergunta in lstQuestionarioPergunta)
                                            {
                                                if (pesquisaSatisfacao.Questao == pergunta.Ordem)
                                                {
                                                    List <QuestionarioOpcao> lstOpcoesResposta = new Servicos.QuestionarioOpcaoServices(this.Organizacao, this.IsOffline).ListarQuestionarioOpcaoPor((Guid)pergunta.ID);
                                                    foreach (QuestionarioOpcao opcaoItem in lstOpcoesResposta)
                                                    {
                                                        if (opcaoItem.Nome == pesquisaSatisfacao.ValorPesquisa.ToString())
                                                        {
                                                            //Cria o vínculo da Resposta com a ocorrência
                                                            QuestionarioResposta questionarioRespostaCreate = new QuestionarioResposta();
                                                            questionarioRespostaCreate.QuestionarioOpcao = new Lookup(opcaoItem.Id, "itbc_questionarioresposta");
                                                            questionarioRespostaCreate.QuestionarioRespostaOcorrencia = new Lookup(ocorrencia.Id, "incident");
                                                            new RepositoryService(this.Organizacao, this.IsOffline).QuestionarioResposta.Create(questionarioRespostaCreate);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            if (atendimentoTelefonico.TempoFila.HasValue)
                            {
                                ocorrencia.TempoFila = atendimentoTelefonico.TempoFila;
                            }

                            if (atendimentoTelefonico.TempoWrap.HasValue)
                            {
                                ocorrencia.TempoWrap = atendimentoTelefonico.TempoWrap;
                            }

                            if (!String.IsNullOrEmpty(atendimentoTelefonico.NumeroFilaEntrada))
                            {
                                ocorrencia.NumeroFilaEntrada = atendimentoTelefonico.NumeroFilaEntrada;
                            }

                            if (!String.IsNullOrEmpty(atendimentoTelefonico.CodigoProdutoURA))
                            {
                                ocorrencia.CodigoProdutoURA = atendimentoTelefonico.CodigoProdutoURA;
                            }

                            try
                            {
                                if (reaberta == true) // Entrou no if de cancelada ou resolvida
                                {
                                    ocorrencia.ManterAberto = false;
                                    reaberta = false;
                                    ocorrencia.Atualizar();
                                }
                                else
                                {
                                    ocorrencia.Atualizar();
                                }

                                //Antes de resolver a ocorrência, precisa preencher a resolução
                                SolucaoOcorrencia solucaoOcorrencia = new SolucaoOcorrencia(this.Organizacao, this.IsOffline)
                                {
                                    DataHoraConclusao = DateTime.Now,
                                    Nome         = "Rotina Histórico do Protocolo de atendimento",
                                    OcorrenciaId = ocorrencia.Id
                                };

                                //Fecha a ocorrência, caso ela já estivesse fechada.
                                if (ocorrenciaEstavaFechada)
                                {
                                    (new CRM2013.Domain.Servicos.RepositoryService()).Ocorrencia.FecharOcorrencia(ocorrencia, solucaoOcorrencia);
                                }

                                if (ocorrencia != null)
                                {
                                    Pollux.Entities.AtendimentoTelefonico objPollux = new Pollux.Entities.AtendimentoTelefonico();

                                    objPollux.ProtocoloTelefonico = ocorrencia.ProtocoloTelefonico;
                                    objPollux.NumeroOcorrencia    = ocorrencia.Numero;
                                    objPollux.Mensagem            = "Ocorrência atualizada com sucesso!";

                                    lstAtendimentosTelefonicos.Add(objPollux);
                                }
                            } catch (Exception e) {
                                if (ocorrencia != null)
                                {
                                    Pollux.Entities.AtendimentoTelefonico objPollux = new Pollux.Entities.AtendimentoTelefonico();

                                    objPollux.ProtocoloTelefonico = ocorrencia.ProtocoloTelefonico;
                                    objPollux.NumeroOcorrencia    = ocorrencia.Numero;
                                    objPollux.Mensagem            = "Falha na atualização da Ocorrência: '" + e.Message + "'.";

                                    lstAtendimentosTelefonicos.Add(objPollux);
                                }
                            }
                        }
                        else
                        {
                            Pollux.Entities.AtendimentoTelefonico objPollux = new Pollux.Entities.AtendimentoTelefonico();

                            objPollux.ProtocoloTelefonico = atendimentoTelefonico.ProtocoloTelefonico;
                            objPollux.Mensagem            = "Não encontrou ocorrência com esse Protocolo.";

                            lstAtendimentosTelefonicos.Add(objPollux);
                        }
                    }
                }
            }
            #endregion
            resultadoPersistencia.Sucesso  = true;
            resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso!";
            retorno.Add("AtendimentoTelefonicoAtualizado", lstAtendimentosTelefonicos);
            retorno.Add("Resultado", resultadoPersistencia);

            return(CriarMensagemRetorno <Pollux.MSG0288R1>(numeroMensagem, retorno));
        }
Ejemplo n.º 2
0
        public string Executar(string mensagem, string numeroMensagem, Usuario usuario)
        {
            var xml = this.CarregarMensagem <Pollux.MSG0293>(mensagem);
            List <Intelbras.Message.Helper.Entities.PerguntaItem> lstQuestionarioRespostaItem = new List <Pollux.Entities.PerguntaItem>();

            //Consultas
            List <QuestionarioPergunta> lstQuestionarioPergunta = new Servicos.QuestionarioPerguntaServices(this.Organizacao, this.IsOffline).ListarQuestionarioPerguntaPorQuestionario(xml.Questionario);
            List <QuestionarioResposta> lstRespostasConta       = new Servicos.QuestionarioRespostaServices(this.Organizacao, this.IsOffline).ObterREspostaConta(xml.Conta, true);

            string strMarcas = "";

            #region Marcas
            if (xml.Conta != null)
            {
                Conta conta = new Servicos.ContaService(this.Organizacao, this.IsOffline).BuscaConta(new Guid(xml.Conta));
                if (conta.MarcasEnviadas != null)
                {
                    strMarcas = conta.MarcasEnviadas;
                }
            }
            #endregion

            #region Lista
            if (lstQuestionarioPergunta != null && lstQuestionarioPergunta.Count > 0)
            {
                foreach (QuestionarioPergunta crmItem in lstQuestionarioPergunta)
                {
                    Pollux.Entities.PerguntaItem objPollux = new Pollux.Entities.PerguntaItem();
                    objPollux.OpcoesResposta = new List <Pollux.Entities.OpcaoRespostaItem>();
                    QuestionarioGrupoPergunta grupo = new Servicos.QuestionarioGrupoPerguntaServices(this.Organizacao, this.IsOffline).ListarGrupoById(crmItem.Grupo.Id.ToString());

                    objPollux.CodigoPergunta = crmItem.ID.ToString();
                    objPollux.NomePergunta   = crmItem.Nome;
                    objPollux.TipoPergunta   = crmItem.TipoPergunta;
                    objPollux.OrdemPergunta  = crmItem.Ordem;
                    objPollux.PesoPergunta   = crmItem.Peso;

                    if (grupo != null)
                    {
                        objPollux.NomeGrupo  = grupo.Nome;
                        objPollux.GrupoOrdem = grupo.Ordem;
                    }

                    List <QuestionarioOpcao> lstOpcoesResposta = new Servicos.QuestionarioOpcaoServices(this.Organizacao, this.IsOffline).ListarQuestionarioOpcaoPor((Guid)crmItem.ID);

                    foreach (QuestionarioOpcao opcaoItem in lstOpcoesResposta)
                    {
                        Pollux.Entities.OpcaoRespostaItem objPolluxOpcao = new Pollux.Entities.OpcaoRespostaItem();

                        objPolluxOpcao.CodigoOpcao       = opcaoItem.ID.ToString();
                        objPolluxOpcao.NomeOpcao         = opcaoItem.Nome;
                        objPolluxOpcao.OrdemOpcao        = opcaoItem.Ordem;
                        objPolluxOpcao.PontuacaoResposta = opcaoItem.Pontuacao;

                        var selecionada = lstRespostasConta.Where(s => s.QuestionarioOpcao.Id == opcaoItem.ID).FirstOrDefault <QuestionarioResposta>();

                        if (selecionada != null)
                        {
                            objPolluxOpcao.ValorResposta = selecionada.Valor;
                            objPolluxOpcao.Selecionada   = true;
                        }
                        else
                        {
                            objPolluxOpcao.ValorResposta = 0;
                            objPolluxOpcao.Selecionada   = false;
                        }

                        objPollux.OpcoesResposta.Add(objPolluxOpcao);
                    }

                    lstQuestionarioRespostaItem.Add(objPollux);
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Não foram encontrados registros que satisfaçam os critérios de pesquisa.";
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0293R1>(numeroMensagem, retorno));
            }

            #endregion
            resultadoPersistencia.Sucesso  = true;
            resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso";
            retorno.Add("Marcas", strMarcas);
            retorno.Add("Perguntas", lstQuestionarioRespostaItem);
            retorno.Add("Resultado", resultadoPersistencia);
            return(CriarMensagemRetorno <Pollux.MSG0293R1>(numeroMensagem, retorno));
        }