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