private void FecharOcorrencia() { SolucaoOcorrencia solucaoOcorrencia = new SolucaoOcorrencia(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { DataHoraConclusao = DateTime.Now, OcorrenciaId = ocorrencia.Id }; RepositoryService.Ocorrencia.FecharOcorrencia(ocorrencia, solucaoOcorrencia); }
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)); }
private static void Executar() { bool reaberta = false; //Cria pasta de armazenamento de log caso não exista. if (!Directory.Exists(Settings.Default.Log)) { Directory.CreateDirectory(Settings.Default.Log); } //Cria o arquivo de log da execução if (Settings.Default.HabilitarLog) { ostrm = new FileStream(Settings.Default.Log + @"\Log_" + DateTime.Now.ToString("yyyy-MM-dd-HH.mm") + ".txt", FileMode.OpenOrCreate, FileAccess.Write); writer = new StreamWriter(ostrm); oldOut = Console.Out; Console.SetOut(writer); } Console.WriteLine("******************************************************************************"); Console.WriteLine(" Serviço - Integração Chat x CRM"); Console.WriteLine("******************************************************************************"); Console.WriteLine(); try { foreach (var item in ListaAtendimentosFinalizados()) { List <Ocorrencia> lstOcorrencias = new List <Ocorrencia>(); try { lstOcorrencias = new OcorrenciaService(OrganizationName, IsOffline).BuscarOcorrenciaPorProtocoloChat(item.protocolNumber); if (lstOcorrencias.Count == 0) { Console.WriteLine("--Atendimento nº " + item.protocolNumber + " não foi encontrado no CRM!"); } } catch (Exception e) { Console.WriteLine("--Erro ao buscar no CRM o nº " + item.protocolNumber + ", " + e.Message); } //Registra os dados da ocorrencia foreach (var ocorrencia in lstOcorrencias) { bool ocorrenciaEstavaFechada = (ocorrencia.Status.Value == 1 || ocorrencia.Status.Value == 2); // Cancelada ou Resolvida if (ocorrenciaEstavaFechada) { (new CRM2013.Domain.Servicos.RepositoryService()).Ocorrencia.ReabrirOcorrencia(ocorrencia); ocorrencia.RazaoStatus = (int)StatusDaOcorrencia.Aberta; ocorrencia.ManterAberto = true; reaberta = true; ocorrencia.Atualizar(); } Console.WriteLine("> Ocorrência nº " + ocorrencia.Numero + " encontrada, atendimento nº " + item.protocolNumber); ocorrencia.OrigemChat = item.origin; ocorrencia.DataEntradaChat = Util.Utilitario.ConverterEmData(item.onSystemDate); ocorrencia.DataInicioAtendimento = Util.Utilitario.ConverterEmData(item.contactStartedDate); ocorrencia.DataFinalAtendimento = Util.Utilitario.ConverterEmData(item.contactFinishedDate); ocorrencia.StatusAtendimentoChat = item.contactState; ocorrencia.TempoNaFilaChat = item.customerInQueueTime; ocorrencia.TempoAtendimentoAtivo = item.agentServingTime; ocorrencia.DuracaoAtendimento = item.contactTotalTime; foreach (var formulario in item.formAnswers) { ocorrencia.FormularioAtendimento = "Questão: " + formulario.question + "\n" + "Resposta:" + formulario.answer + "\n"; } foreach (var nota in item.ratings) { ocorrencia.NotaPesquisa = Convert.ToInt32(nota.answer); } if (Settings.Default.HabilitarLog == false) { Console.WriteLine("** Atualizando Ocorrencia **"); } if (reaberta == true) // Entrou no if de cancelada e resolvida { ocorrencia.ManterAberto = false; reaberta = false; ocorrencia.Atualizar(); } //Antes de resolver a ocorrência, precisa preencher a resolução SolucaoOcorrencia solucaoOcorrencia = new SolucaoOcorrencia(OrganizationName, IsOffline) { DataHoraConclusao = DateTime.Now, Nome = "Rotina Histórico do chat", OcorrenciaId = ocorrencia.Id }; //Fecha a ocorrência, caso ela já estivesse fechada. if (ocorrenciaEstavaFechada) { (new CRM2013.Domain.Servicos.RepositoryService()).Ocorrencia.FecharOcorrencia(ocorrencia, solucaoOcorrencia); } if (Settings.Default.HabilitarLog == false) { Console.WriteLine("** Gravando Data do Atendimento **"); } if (Settings.Default.HabilitarLog == false) { Console.WriteLine("** Registrando Conversa no CRM **"); } try { RegistrarConversaCRM(item.protocolNumber, ocorrencia); } catch (System.Exception e) { Console.WriteLine("--Atendimento nº " + item.protocolNumber + " não foi possivel atualizar atendimento, " + e.Message + "!"); } } GravaDataAtendimento(Util.Utilitario.ConverterEmData(item.onSystemDate).ToString()); } } //Entra no catch caso encontre alguma inconsistência na execução de atualização de informações da ocorrencia catch (Exception ex) { SDKore.Helper.Error.Create("AtualizarAtendimentoChat: " + ex.Message, System.Diagnostics.EventLogEntryType.Error); Console.WriteLine("Erro a executar a aplicação"); Console.WriteLine(ex.Message); } finally { Console.WriteLine(); Console.WriteLine("******************************************************************************"); Console.WriteLine(" Fim da execução"); if (Settings.Default.HabilitarLog) { Console.SetOut(oldOut); writer.Close(); ostrm.Close(); } } }
public string GeraExtratoASTEC(DateTime data) { string retorno = "Extrato;OcorrenciaId;AvulsoId;ValorServico;%NL%"; //Lista as contas que estiverem para gerar extrato na data passada var contas = RepositoryService.Conta.ListarContasAstec(data); if (contas.Count == 0) { return(""); } foreach (var conta in contas) { var ocorrencias = RepositoryService.Ocorrencia.ListarPorAutorizada(conta.Id); //Lista as ocorrências para gerar o extrato var listaLancamentoAvulsoDoExtrato = RepositoryService.LancamentoAvulsoDoExtrato.ListarSemExtratoPor(conta); //Lista todos os itens do lançamento avulso string numeroExtrato = conta.CodigoMatriz + string.Format("{0:yyyyMMdd}", data); Extrato extrato = RepositoryService.Extrato.ObterPor(numeroExtrato); if ((ocorrencias.Count > 0 || listaLancamentoAvulsoDoExtrato.Count > 0) && extrato == null) { extrato = new Extrato(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { Numero = numeroExtrato, Nome = numeroExtrato, AutorizadaId = new Lookup(conta.Id, "account"), Autorizada = conta }; extrato.Id = RepositoryService.Extrato.Create(extrato); } foreach (Ocorrencia item in ocorrencias) { Ocorrencia ocorrenciaTemp = new Ocorrencia(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline); ocorrenciaTemp.Id = item.Id; ocorrenciaTemp.ReferenciaExtratoPagamentoId = new Lookup(extrato.Id, "new_extrato_pagamento_ocorrencia"); if (item.RazaoStatus == (int)StatusDaOcorrencia.Reprovada) { ocorrenciaTemp.ValorServico = 0; } SolucaoOcorrencia solucaoOcorrencia = new SolucaoOcorrencia(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { DataHoraConclusao = DateTime.Now, Nome = "Rotina de Extrato de pagamento", OcorrenciaId = item.Id }; try { retorno += extrato.Numero + ";" + item.Id.ToString() + ";-;" + item.ValorServico.ToString() + ";%NL%"; RepositoryService.Ocorrencia.Update(ocorrenciaTemp); RepositoryService.Ocorrencia.FecharOcorrencia(item, solucaoOcorrencia); } catch (Exception ex) { } } foreach (LancamentoAvulsoDoExtrato itemLancamentoAvulsoDoExtrato in listaLancamentoAvulsoDoExtrato) { itemLancamentoAvulsoDoExtrato.ExtratoId = new Lookup(extrato.Id, "new_extrato_pagamento_ocorrencia"); RepositoryService.LancamentoAvulsoDoExtrato.Update(itemLancamentoAvulsoDoExtrato); retorno += extrato.Numero + ";-;" + itemLancamentoAvulsoDoExtrato.Id.ToString() + ";" + itemLancamentoAvulsoDoExtrato.Valor.ToString() + ";%NL%"; } if (extrato != null) { extrato.RazaoStatus = 1; //Aguardando Análise Intelbras extrato.AtualizarValor(); RepositoryService.Extrato.Update(extrato); retorno += extrato.Numero + ";ValorTotal;-;" + extrato.ValorTotal.ToString() + ";%NL%"; } } return(retorno); }