Esempio n. 1
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));
        }
Esempio n. 2
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));
        }
Esempio n. 3
0
        public QuestionarioResposta DefinirPropriedades(Intelbras.Message.Helper.MSG0294 xml)
        {
            var    crm   = new Model.QuestionarioResposta(this.Organizacao, this.IsOffline);
            Conta  conta = new Conta();
            string ReferenteServicoInstalacaoOpacao1 = SDKore.Configuration.ConfigurationManager.GetSettingValue("ReferenteServicoInstalacaoOpacao1");
            string ReferenteServicoInstalacaoOpacao2 = SDKore.Configuration.ConfigurationManager.GetSettingValue("ReferenteServicoInstalacaoOpacao2");
            string ReferenteServicoInstalacaoOpacao3 = SDKore.Configuration.ConfigurationManager.GetSettingValue("ReferenteServicoInstalacaoOpacao3");

            #region Opcoes de resposta

            List <QuestionarioOpcao> lstOpcoes = new Servicos.QuestionarioOpcaoServices(this.Organizacao, this.IsOffline).ListarPorContaId(new Guid(xml.Conta));
            foreach (QuestionarioOpcao questionarioOpcao in lstOpcoes)
            {
                var associada = xml.OpcoesResposta.Select(campo => campo.CodigoOpcao.ToString().ToUpper()).FirstOrDefault(c => c == questionarioOpcao.ID.ToString().ToUpper());
                QuestionarioResposta questionarioResposta = new QuestionarioRespostaServices(this.Organizacao, this.IsOffline).ObterPorOpcaoId((Guid)questionarioOpcao.ID, xml.Conta, false);
                if (associada == null)
                {
                    //Desativa no crm caso não esteja na lista da mensagem
                    new QuestionarioRespostaServices(this.Organizacao, this.IsOffline).Desativar((Guid)questionarioResposta.ID);
                }
                else
                {
                    //Ativa no crm caso esteja na lista da mensagem
                    new QuestionarioRespostaServices(this.Organizacao, this.IsOffline).Ativar((Guid)questionarioResposta.ID);
                }
            }

            foreach (var opcaoResposta in xml.OpcoesResposta)
            {
                var associada = lstOpcoes.Select(campo => campo.ID.ToString().ToUpper()).FirstOrDefault(c => c == opcaoResposta.CodigoOpcao.ToUpper());
                if (associada == null)
                {
                    //Cria o vínculo da Resposta com a conta
                    QuestionarioResposta questionarioRespostaCreate = new QuestionarioResposta();
                    questionarioRespostaCreate.QuestionarioOpcao         = new Lookup(new Guid(opcaoResposta.CodigoOpcao), "itbc_questionarioresposta");
                    questionarioRespostaCreate.QuestionarioRespostaConta = new Lookup(new Guid(xml.Conta), "account");
                    questionarioRespostaCreate.Valor = opcaoResposta.ValorResposta;
                    new RepositoryService(this.Organizacao, this.IsOffline).QuestionarioResposta.Create(questionarioRespostaCreate);
                }
                else
                {
                    //Altera o vínculo da Resposta com a conta
                    QuestionarioResposta questionarioRespostaUpdate = new QuestionarioResposta();
                    QuestionarioResposta questionarioResposta       = new QuestionarioRespostaServices(this.Organizacao, this.IsOffline).ObterPorOpcaoId(new Guid(opcaoResposta.CodigoOpcao), xml.Conta, false);
                    questionarioRespostaUpdate.QuestionarioOpcao = new Lookup(new Guid(opcaoResposta.CodigoOpcao), "itbc_questionarioresposta");
                    questionarioRespostaUpdate.ID    = questionarioResposta.ID;
                    questionarioRespostaUpdate.Valor = opcaoResposta.ValorResposta;
                    new RepositoryService(this.Organizacao, this.IsOffline).QuestionarioResposta.Update(questionarioRespostaUpdate);
                }

                //Caso a opção de resposta seja “Instalamos os produtos independentemente de onde foram comprados” o campo Instalador da conta deve ser atualizado
                if (opcaoResposta.CodigoOpcao == ReferenteServicoInstalacaoOpacao2)
                {
                    conta.Instalador = true;
                }
                else if (opcaoResposta.CodigoOpcao == ReferenteServicoInstalacaoOpacao1 || opcaoResposta.CodigoOpcao == ReferenteServicoInstalacaoOpacao3)
                {
                    conta.Instalador = false;
                }
            }
            #endregion

            #region Segmentos Comerciais

            //Desassociar Segmento comercial à conta
            List <SegmentoComercial> listaAtual = new SegmentoComercialService(this.Organizacao, this.IsOffline).ListarSegmentoPorConta(xml.Conta);
            SegmentoComercialService segmentoComercialService = new SegmentoComercialService(this.Organizacao, this.IsOffline);
            if (listaAtual != null && listaAtual.Count > 0)
            {
                segmentoComercialService.DesassociarSegmentoComercial(listaAtual, new Guid(xml.Conta));
            }

            //Associar Segmento comercial à conta
            List <SegmentoComercial> listaSegmentoComercial = new List <SegmentoComercial>();
            foreach (var segmentosComercialPollux in xml.SegmentosComerciais)
            {
                SegmentoComercial segmentosComercialGuid = new SegmentoComercialService(this.Organizacao, this.IsOffline).ObterPorCodigo(segmentosComercialPollux.CodigoSegmentoComercial);
                listaSegmentoComercial.Add(segmentosComercialGuid);
            }
            if (listaSegmentoComercial != null && listaSegmentoComercial.Count > 0)
            {
                segmentoComercialService.AssociarSegmentoComercial(listaSegmentoComercial, new Guid(xml.Conta));
            }
            #endregion

            #region Marcas
            if (xml.Marcas != null)
            {
                conta.MarcasEnviadas = xml.Marcas;
            }
            else
            {
                conta.MarcasEnviadas = " ";
                //conta.AddNullProperty("itbc_marcas_enviadas");
            }
            conta.ID = new Guid(xml.Conta);
            conta.IntegrarNoPlugin = true;
            new RepositoryService(this.Organizacao, this.IsOffline).Conta.Update(conta);
            MarcasServices marcasService       = new MarcasServices(this.Organizacao, this.IsOffline);
            List <Marcas>  lstMarcas           = new List <Marcas>();
            List <Marcas>  lstMarcasAssociadas = new MarcasServices(this.Organizacao, this.IsOffline).ListarMarcasPorConta(xml.Conta);

            if (xml.Marcas != null)
            {
                string[] Sinonimos = xml.Marcas.Split(';');
                foreach (var marcaSplit in Sinonimos)
                {
                    Marcas marca = new MarcasServices(this.Organizacao, this.IsOffline).obterPorNome(marcaSplit);
                    if (marca != null)
                    {
                        var marcasDuplicadas = lstMarcas.Select(campo => campo.Id).FirstOrDefault(c => c == marca.Id);
                        if (marcasDuplicadas == Guid.Empty)
                        {
                            lstMarcas.Add(marca);
                            continue;
                        }
                    }
                    else if (new SinonimosMarcasServices(this.Organizacao, this.IsOffline).obterPorNome(marcaSplit) != null)
                    {
                        SinonimosMarcas sinonimosMarcas = new SinonimosMarcasServices(this.Organizacao, this.IsOffline).obterPorNome(marcaSplit);
                        if (sinonimosMarcas.Marca != null)
                        {
                            Marcas marcaAssociada = (new CRM2013.Domain.Servicos.RepositoryService()).Marcas.Retrieve((sinonimosMarcas.Marca.Id));
                            var    vinculoConta   = lstMarcas.Select(campo => campo.Id).FirstOrDefault(c => c == marcaAssociada.Id); //Verifica se a marca já está associada á conta
                            if (vinculoConta == Guid.Empty)
                            {
                                lstMarcas.Add(marcaAssociada);
                                continue;
                            }
                        }
                    }
                    else //Caso a marca ou sinônimo da marca enviada não exista, cria.
                    {
                        SinonimosMarcas sinonimosMarcasCreate = new SinonimosMarcas();
                        sinonimosMarcasCreate.Nome = marcaSplit;
                        new RepositoryService(this.Organizacao, this.IsOffline).SinonimosMarcas.Create(sinonimosMarcasCreate);
                    }
                }
                if (lstMarcas.Count > 0)
                {
                    marcasService.desassociarMarcas(lstMarcasAssociadas, new Guid(xml.Conta));
                    marcasService.associarMarcas(lstMarcas, new Guid(xml.Conta));
                }
            }
            else
            {
                marcasService.desassociarMarcas(lstMarcasAssociadas, new Guid(xml.Conta));
            }
            #endregion

            return(crm);
        }