public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario) { //Trace.Add("Mensagem " + numeroMensagem + " XML: {0}", mensagem); usuarioIntegracao = usuario; Intelbras.Message.Helper.MSG0111 xml = this.CarregarMensagem <Pollux.MSG0111>(mensagem); ParametroGlobal objeto = this.DefinirPropriedades(xml); if (!resultadoPersistencia.Sucesso) { retorno.Add("Resultado", resultadoPersistencia); return(CriarMensagemRetorno <Pollux.MSG0111R1>(numeroMensagem, retorno)); } objeto = new Domain.Servicos.ParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(tipoParamentroCod, unidadeNegocioId, classificacaoId, categoriaId, nivelPosVendaId, compromissoId, beneficioId, null); if (objeto == null) { resultadoPersistencia.Sucesso = true; resultadoPersistencia.Mensagem = "Registro não encontrado!"; } else { Pollux.Entities.ParametroGlobal objRetorno = new Pollux.Entities.ParametroGlobal(); objRetorno.TipoDado = objeto.TipoDado; objRetorno.Valor = objeto.Valor; retorno.Add("ParametroGlobal", objRetorno); resultadoPersistencia.Sucesso = true; resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso"; } retorno.Add("Resultado", resultadoPersistencia); return(CriarMensagemRetorno <Pollux.MSG0111R1>(numeroMensagem, retorno)); }
public void ConcluirTarefaCompromissoCanal(Tarefa tarefa) { if (tarefa.Resultado.HasValue) { var compromissoDoCanal = RepositoryService.CompromissosDoCanal.Retrieve(tarefa.ReferenteA.Id); var compromissoPrograma = RepositoryService.CompromissosPrograma.Retrieve(compromissoDoCanal.CompromissosDoPrograma.ID.Value, "itbc_codigo", "itbc_tipodemonitoramento"); if (!compromissoPrograma.TipoMonitoramento.HasValue || compromissoPrograma.TipoMonitoramento.Value != (int)Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas) { return; } if (tarefa.Resultado.Value == (int)Enum.Tarefa.Resultado.Reprovada) { var statusCompromissoNaoCumprido = RepositoryService.StatusCompromissos.ObterPor(Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido); RepositoryService.CompromissosDoCanal.Update(new CompromissosDoCanal(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { ID = compromissoDoCanal.ID, StatusCompromisso = new Lookup(statusCompromissoNaoCumprido.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(statusCompromissoNaoCumprido), statusCompromissoNaoCumprido.Nome) }); } else if (tarefa.Resultado.Value == (int)Enum.Tarefa.Resultado.Aprovada) { int ordem = (tarefa.Ordem.HasValue) ? tarefa.Ordem.Value : 1; var statusCompromissoCumprido = RepositoryService.StatusCompromissos.ObterPor(Enum.CompromissoCanal.StatusCompromisso.Cumprido); var compromissoCanalService = new CompromissosDoCanalService(RepositoryService); DateTime?validadeCompromissoCanal = compromissoCanalService.ObterValidade(compromissoDoCanal); var compromissoCanalUpdate = new CompromissosDoCanal(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { ID = compromissoDoCanal.ID, Validade = validadeCompromissoCanal, StatusCompromisso = new Lookup(statusCompromissoCumprido.ID.Value, statusCompromissoCumprido.Nome, SDKore.Crm.Util.Utility.GetEntityName(statusCompromissoCumprido)) }; RepositoryService.CompromissosDoCanal.Update(compromissoCanalUpdate); if (compromissoPrograma.Codigo.Value == (int)Enum.CompromissoPrograma.Codigo.Showroom) { ParametroGlobal parametroQuantidadeKitsShowroom = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.QuantidadeKitsShowroomPorSegmento, compromissoDoCanal.UnidadeDeNegocio.Id, null, null, null, compromissoDoCanal.Compromisso.Id, null, null); if (parametroQuantidadeKitsShowroom == null) { throw new ArgumentException("(CRM) Parâmetro Global Quantidade de Evidências Show Room não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + compromissoDoCanal.UnidadeDeNegocio.Name + "]."); } if (parametroQuantidadeKitsShowroom.GetValue <int>() <= ordem) { return; } } CriarTarefaParaChecklistCompromissoCanal(ordem + 1, compromissoDoCanal); } } }
public Pollux.MSG0167 DefinirPropriedadesPlugin(ParametroGlobal objModel) { Pollux.MSG0167 retMsgProp = new Pollux.MSG0167(Domain.Enum.Sistemas.RetornaSistema(Domain.Enum.Sistemas.Sistema.CRM), objModel.ID.ToString()); TipodeParametroGlobalService tipoParamService = new TipodeParametroGlobalService(this.Organizacao, this.IsOffline); CategoriaService catService = new CategoriaService(this.Organizacao, this.IsOffline); BeneficioService benefService = new BeneficioService(this.Organizacao, this.IsOffline); UnidadeNegocioService unidNegService = new UnidadeNegocioService(this.Organizacao, this.IsOffline); retMsgProp.CodigoParametroGlobal = objModel.ID.Value.ToString(); retMsgProp.NomeParametroGlobal = objModel.Nome; var tipoParamObj = tipoParamService.ObterPor(objModel.TipoParametro.Id); retMsgProp.TipoParametroGlobal = tipoParamObj.Codigo; if (objModel.Classificacao != null) { retMsgProp.CodigoClassificacao = objModel.Classificacao.Id.ToString(); } if (objModel.Compromisso != null) { retMsgProp.CodigoCompromisso = objModel.Compromisso.Id.ToString(); } if (objModel.Categoria != null) { retMsgProp.CodigoCategoria = objModel.Categoria.Id.ToString(); var catObj = catService.ObterPor(objModel.Categoria.Id); retMsgProp.CategoriaCodigo = Int32.Parse(catObj.CodigoCategoria); } if (objModel.Beneficio != null) { retMsgProp.CodigoBeneficio = objModel.Beneficio.Id.ToString(); var benefObj = benefService.ObterPor(objModel.Beneficio.Id); retMsgProp.BeneficioCodigo = benefObj.Codigo; } if (objModel.NivelPosVenda != null) { retMsgProp.CodigoNivelPosVenda = objModel.NivelPosVenda.Id.ToString(); } if (objModel.UnidadeNegocio != null) { var unidNegObj = unidNegService.BuscaUnidadeNegocio(objModel.UnidadeNegocio.Id); retMsgProp.CodigoUnidadeNegocio = unidNegObj.ChaveIntegracao; } retMsgProp.TipoDado = objModel.TipoDado; retMsgProp.ValorParametroGlobal = objModel.Valor; retMsgProp.Situacao = objModel.State; return(retMsgProp); }
public void CriarTarefaParaChecklistCompromissoCanal(int ordem, CompromissosDoCanal compromissoDoCanal) { ParametroGlobal parametroFrequenciaChecklist = RepositoryService.ParametroGlobal .ObterPor((int)Enum.TipoParametroGlobal.FrequenciaChecklist, compromissoDoCanal.UnidadeDeNegocio.Id, null, null, null, compromissoDoCanal.Compromisso.Id, null, null); if (parametroFrequenciaChecklist == null) { throw new ArgumentException("(CRM) Parâmetro Global Frequencia de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + compromissoDoCanal.UnidadeDeNegocio.Name + "]."); } var compromissoPrograma = new CompromissosDoPrograma(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline) { ID = compromissoDoCanal.CompromissosDoPrograma.ID, Nome = compromissoDoCanal.CompromissosDoPrograma.Nome }; TarefaService ServiceTarefas = new TarefaService(RepositoryService); string tituloAtividadeChecklist = ServiceTarefas.ObterProximaAtividadeCheckup(ordem + 1, compromissoPrograma); Tarefa task = new Tarefa(RepositoryService); task.ReferenteA = new Lookup(compromissoDoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(compromissoDoCanal)); task.Assunto = tituloAtividadeChecklist; task.Ordem = ordem; task.Conclusao = DateTime.Now.AddDays(parametroFrequenciaChecklist.GetValue <int>()); var tipoTarefa = new TarefaService(RepositoryService).BuscarTipoTarefa("Checklist"); if (tipoTarefa != null) { task.TipoDeAtividade = new Lookup(tipoTarefa.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(tipoTarefa)); } Guid idTarefa = RepositoryService.Tarefa.Create(task); if (idTarefa != Guid.Empty) { Domain.Model.Usuario proprietario = new Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarProprietario("itbc_compdocanal", "itbc_compdocanalid", compromissoDoCanal.Id); if (proprietario != null) { new Domain.Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).MudarProprietarioRegistro("systemuser", proprietario.ID.Value, "task", idTarefa); } } }
public bool HojeDiaExecutarMonitoramentoAutomatico() { ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault(); if (paramGlobal == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, o parâmetro global não foi encontrado ou está preenchido com valores incorretos."); } var lista = ConverterParametroParaLista(paramGlobal.Valor); foreach (var item in lista) { if (item == DateTime.Today) { return(true); } } return(false); }
public string Enviar(ParametroGlobal objModel) { string resposta; Intelbras.Message.Helper.MSG0167 mensagem = DefinirPropriedadesPlugin(objModel); Domain.Servicos.Integracao integracao = new Servicos.Integracao(this.Organizacao, this.IsOffline); if (integracao.EnviarMensagemBarramento(mensagem.GenerateMessage(true), "1", "1", out resposta)) { Intelbras.Message.Helper.MSG0167R1 retorno = CarregarMensagem <Pollux.MSG0167R1>(resposta); if (!retorno.Resultado.Sucesso) { throw new ArgumentException("(CRM) " + retorno.Resultado.Mensagem); } } else { Intelbras.Message.Helper.ERR0001 erro001 = CarregarMensagem <Pollux.ERR0001>(resposta); throw new ArgumentException("(CRM) " + erro001.GenerateMessage(false)); } return(resposta); }
// CASO DE USO 4 – MONITORAMENTO POR TAREFAS public void MonitoramentoPorTarefas() { Trace = new SDKore.Helper.Trace("MonitoramentoPorTarefa"); mensagemLog = new List <string>(); if (StatusCompromissoCumprido == null) { throw new ApplicationException("(CRM) A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Cumprido); } if (StatusCompromissoNaoCumprido == null) { throw new ApplicationException("(CRM) A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido); } List <CompromissosDoCanal> compromissosCanalVencidos = CompromissoDoCanalService.ListarAtivosVencidosCumpridos(Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas); Trace.Add("Foram encontrados {0} vencidos para ser processado!", compromissosCanalVencidos.Count); Trace.SaveClear(); foreach (var item in compromissosCanalVencidos) { var compromissoCanalUpdate = new CompromissosDoCanal(item.OrganizationName, item.IsOffline) { ID = item.ID, StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, "") }; Trace.Add("Atualizando o compromisso do Canal [{0}] para não cumprido!", item.ID); Trace.SaveClear(); RepositoryService.CompromissosDoCanal.Update(compromissoCanalUpdate); } List <CompromissosDoCanal> compromissosCanalCumpridos = CompromissoDoCanalService.ListarAtivosCumpridos(Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.TipoMonitoramento.PorTarefas); Trace.Add("Foram encontrados {0} Cumpridos para ser processado!", compromissosCanalCumpridos.Count); Trace.SaveClear(); foreach (var item in compromissosCanalCumpridos) { List <Tarefa> tarefas = RepositoryService.Tarefa.ListarPorReferenteAAtivo(item.ID.Value); // CRIA TAREFA CASO NAO EXISTA (CASO USO 4: STEP 6) if (tarefas.Count == 0) { try { #region Obtem Parametros Global if (item.UnidadeDeNegocio == null || item.Compromisso == null) { throw new ArgumentException("(CRM) O Comromisso do Canal a seguir não tem Unidade de Negócio ou Compromisso preenchido. " + item.ID.Value); } ParametroGlobal frequenciaChecklist = ParametroGlobal.ObterPor((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.FrequenciaChecklist, null, null, null, null, item.Compromisso.Id, null, null); ParametroGlobal atividadesChecklist = ParametroGlobal.ObterPor((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.AtividadesChecklist, null, null, null, null, item.Compromisso.Id, null, null); if (frequenciaChecklist == null) { InserirLogFormat("Parametro Global {0} não foi localizado.", Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.FrequenciaChecklist); continue; } if (atividadesChecklist == null) { InserirLogFormat("Parametro Global {0} não foi localizado.", Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.AtividadesChecklist); continue; } #endregion #region Criando Tarefa var task = new Model.Tarefa(OrganizationName, isOffline); task.Assunto = string.Format("Atividades Checklist - {0} - {1}", item.UnidadeDeNegocio.Name, item.Compromisso.Name); task.ReferenteA = new Lookup(item.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(item)); task.Descricao = atividadesChecklist.Valor; task.DataInicial = DateTime.Now; task.Conclusao = DateTime.Today.AddDays(int.Parse(frequenciaChecklist.Valor)); task.Prioridade = (int)Enum.Tarefa.Prioridade.Normal; task.Status = (int)Enum.Tarefa.StatusCode.NaoIniciada; Trace.Add("Criando Tarefa para Compromisso do Canal [{0}]", item.ID.Value); Trace.Add("Atividades Checklist [{0}]", atividadesChecklist.Valor); Trace.Add("Frequencia Checklist [{0}]", frequenciaChecklist.Valor); RepositoryService.Tarefa.Create(task); #endregion } catch (Exception ex) { Trace.Add(ex); InserirLog(SDKore.Helper.Error.Handler(ex)); } finally { Trace.SaveClear(); } } } this.EnviaEmailDeLog("Monitoramento Por Tarefas"); }
public bool ExisteDuplicidade(HistoricoDistribuidor historicoDistribuidor, Boolean create, ParametroGlobal qtdDistribuidorPreferencial) { if (historicoDistribuidor.Revenda != null) { if (create || (historicoDistribuidor.Status.HasValue && historicoDistribuidor.Status.Value == (int)Enum.HistoricoDistribuidor.Statecode.Ativo)) { var lista = new List <HistoricoDistribuidor>(); if (historicoDistribuidor.DataFim == null) { lista = RepositoryService.HistoricoDistribuidor.ListarPorRevendaSemDataFim(historicoDistribuidor.Revenda.Id, historicoDistribuidor.DataInicio); } else { lista = RepositoryService.HistoricoDistribuidor.ListarPorRevendaComDataFim(historicoDistribuidor.Revenda.Id, historicoDistribuidor.DataInicio, historicoDistribuidor.DataFim); } if (historicoDistribuidor.ID.HasValue) { lista.RemoveAll(x => x.ID.Value == historicoDistribuidor.ID.Value); } if (lista.Count >= Convert.ToInt32(qtdDistribuidorPreferencial.Valor)) //valida quantidade cadastrada no parâmetro global { return(lista.Count > 0); } } } return(false); }
public ParametroGlobal ObterFrequenciaAtividadeChecklist(Guid compromissoId) { ParametroGlobal parametroGlobal = this.ObterPor((int)Domain.Enum.TipoParametroGlobal.FrequenciaChecklist, null, null, null, null, compromissoId, null, null); return(parametroGlobal); }
public void EnvioDeEvidenciaShowRoom(Tarefa Task) { SolicitacaoBeneficio solBen = RepositoryService.SolicitacaoBeneficio.Retrieve(Task.ReferenteA.Id); CompromissosDoCanal compromissoCanal = RepositoryService.CompromissosDoCanal.ObterPorNome(Enum.CompromissoCanal.Compromisso.EnvioShowroom.ToString(), solBen.Canal.Id, solBen.UnidadedeNegocio.Id); if (compromissoCanal != null) { if (compromissoCanal.Compromisso.Name == Enum.CompromissoCanal.Compromisso.EnvioShowroom) { if (!Task.ReferenteA.Type.ToLower().Equals(SDKore.Crm.Util.Utility.GetEntityName <SolicitacaoBeneficio>().ToLower())) { return; } compromissoCanal.StatusCompromisso = new Lookup(RepositoryService.StatusCompromissos.ObterPor(Domain.Enum.CompromissoCanal.StatusCompromisso.Cumprido).ID.Value, ""); RepositoryService.CompromissosDoCanal.Update(compromissoCanal); SolicitacaoBeneficio mSolicitacaoBeneficio = RepositoryService.SolicitacaoBeneficio.Retrieve(Task.ReferenteA.Id); if (mSolicitacaoBeneficio == null) { throw new ArgumentException("Solicitação de benefício no campo 'Referente a' não encontrada ou Desativada."); } ParametroGlobal parametroAtividadeQtdeEvidencia = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.QuatidadeEvidenciaShowRoom, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null); if (parametroAtividadeQtdeEvidencia == null) { throw new ArgumentException("(CRM) Parâmetro Global Quantidade de Evidências Show Room não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "]."); } ParametroGlobal parametroAtividadeChacklist = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.AtividadesChecklist, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null); if (parametroAtividadeChacklist == null) { throw new ArgumentException("(CRM) Parâmetro Global Atividade de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "]."); } ParametroGlobal parametroFrequenciaChecklist = RepositoryService.ParametroGlobal.ObterPor((int)Enum.TipoParametroGlobal.FrequenciaChecklist, mSolicitacaoBeneficio.UnidadedeNegocio.Id, null, null, null, compromissoCanal.Compromisso.Id, null, null); if (parametroFrequenciaChecklist == null) { throw new ArgumentException("(CRM) Parâmetro Global Frequencia de Checklist não encontrado para o Compromisso Envio de evidências de Showroom e Unidade de Negócio [" + mSolicitacaoBeneficio.UnidadedeNegocio.Name + "]."); } Tarefa task = new Tarefa(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline); task.ReferenteA = new Lookup(compromissoCanal.ID.Value, SDKore.Crm.Util.Utility.GetEntityName <CompromissosDoPrograma>()); task.Assunto = parametroAtividadeChacklist.GetValue <string>(); task.Ordem = Task.Ordem + 1; task.Conclusao = DateTime.Now.AddDays(parametroFrequenciaChecklist.GetValue <int>()); var tipoTarefa = new TarefaService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarTipoTarefa("Checklist"); if (tipoTarefa != null) { task.TipoDeAtividade = new Lookup(tipoTarefa.ID.Value, SDKore.Crm.Util.Utility.GetEntityName(tipoTarefa)); } Conta canal = RepositoryService.Conta.Retrieve(mSolicitacaoBeneficio.Canal.Id, "ownerid"); Guid idTarefa = RepositoryService.Tarefa.Create(task); if (idTarefa != Guid.Empty) { if (canal != null) { Domain.Model.Usuario proprietario = new Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).BuscarProprietario("account", "accountid", canal.Id); if (proprietario != null) { new Domain.Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).MudarProprietarioRegistro("systemuser", proprietario.ID.Value, "task", idTarefa); } } } } } }
///////////////////// CASO DE USO 2 e 3 APURAÇÃO DE BENEFICIO E COMPROMISSO POR FILIAL E POR MATRIZ public void MonitoramntoAutomaticoParaApuracaoDeCompromissosEBaneficiosPorFilialEMatriz() { Trace = new SDKore.Helper.Trace("MonitoramentoAutomatico"); mensagemLog = new List <string>(); string dataProc = DateTime.Now.ToString() + " - "; #region Validando Parametros if (StatusCompromissoCumprido == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Cumprido); } if (StatusCompromissoNaoCumprido == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, não foi encontrado o Status do Compromisso: " + Intelbras.CRM2013.Domain.Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido); } ParametroGlobal dataTimestre = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault(); if (dataTimestre == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, o parâmetro global não foi encontrado ou está preenchido com valores incorretos."); } CompromissosDoPrograma compProgMeta = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.MetaTrimestral); if (compProgMeta == null) { throw new ApplicationException("Não foi possível encontrar o compromisso do programa de MetasTrimestrais"); } CompromissosDoPrograma compromissoTecnicoTreinadoCertificado = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.TecnicoTreinadoCertificado); if (compromissoTecnicoTreinadoCertificado == null) { throw new ApplicationException("Compromisso tecnico treinado certificado não encontrado"); } CompromissosDoPrograma compProgLinhaCorte = CompromissoDoCanal.BuscarCompromissoDoPrograma((int)Intelbras.CRM2013.Domain.Enum.CompromissoPrograma.Codigo.LinhaCorteTrimestral); if (compProgLinhaCorte == null) { throw new ApplicationException("Não foi possível encontrar o compromisso do programa de Linhas de cortes"); } #endregion DateTime ultimoDiaDoUltimoTrimestre = new SDKore.Helper.DateTimeHelper().UltimoDiaDoUltimoTrimestre(); int ano = ultimoDiaDoUltimoTrimestre.Year; int trimestre = (ultimoDiaDoUltimoTrimestre.Month - 1) / 3 + 1; var trimestreOrcamentodaUnidade = Helper.ConverterTrimestreOrcamentoUnidade(trimestre); // Obtem lista de canais matriz ou filial // (CASO USO 2: STEP 2) List <Conta> lstContas = ContaService.ListarContasParticipantesMAtrizEFilial(); // (CASO USO 2: STEP 2) foreach (Conta canal in lstContas) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Filial && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Centralizada_Na_Matriz) { continue; } // LISTA DE CATEGORIAS DO CANAL // (CASO USO 2: STEP 4) List <CategoriasCanal> lstCat = CategoriaCanal.ListarPor(canal.ID, null); // caso seja um canal matriz obtem lista de suas filiais // (CASO USO 2: STEP 4) List <Conta> listaFiliais = ContaService.ListarContasFiliaisPorMatriz(canal.ID.Value); listaFiliais = listaFiliais.Where(x => x.ParticipantePrograma.HasValue && x.ParticipantePrograma.Value == (int)Enum.Conta.ParticipaDoPrograma.Sim).ToList(); // refina lista de unidade de negocio por categoria // (CASO USO 2: STEP 4) List <Guid> unidadesDeNegocio = this.RefinaUnidadeNegocio(lstCat); // (CASO USO 2: STEP 5 INICIANDO) foreach (var unNeg in unidadesDeNegocio) { HistoricoCompraCanal histCanal = new HistoricoCompraCanal(OrganizationName, isOffline); MetadoCanal metaCanal = new MetadoCanal(OrganizationName, isOffline); decimal valorHistorico = 0, metaPlanejada = 0; CompromissosDoCanal compCanal = CompromissoDoCanal.BuscarCompromissoCanal(compProgMeta.ID.Value, unNeg, canal.ID.Value); if (compCanal == null) { continue; } // SE FOR UM CANAL CENTRALIZADO NA MATRI OBTEM SUAS FILIAIS // ESSA INTERAÇÃO GARANTE QUE NO CASO DE UM CANAL SER UMA MATRIZ, O CASO USO 3: STEP 6,7,8 SERA ORRETAMENTE CONTEMPLADO // VISTO QUE O VALOR DO HISTORICO ESTA SENDO SOMADO CASO HAJA FILIAIS PARA O CANAL CORRENTE foreach (Intelbras.CRM2013.Domain.Model.Conta filial in listaFiliais) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais) { continue; } List <CategoriasCanal> lstCatFiliais = CategoriaCanal.ListarPor(filial.ID, null); foreach (var categoria in lstCatFiliais) { if (categoria.UnidadeNegocios != null && categoria.UnidadeNegocios.Id == unNeg) { histCanal = null; metaCanal = null; // (CASO USO 3: STEP 6) hISTORICO DE COMPRA DAS FILIAIS, CASO CANAL SEJA CENTRALIZADO NA MATRI histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(categoria.UnidadeNegocios.Id, (int)trimestreOrcamentodaUnidade, ano, filial.ID.Value); // so soma se for diferente do proprio canal pois posteriormente é somado o canal corrente if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } } } } #region VALIDANDO BENEFICIO DE META x HISTORICO // EM CASO DE MATRIZ O VALOR DO HISTORICO É CALCULADO PARA TODAS A FILIAIS // (CASO USO 3: STEP 6) histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, canal.ID.Value); // (CASO USO 2: STEP 6) e // (CASO USO 3: STEP 9) metaCanal = MetaDoCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, canal.ID.Value, ano); Trace.Add(dataProc + "Obter Meta do Canal - Un [{0}] Trimeste [{1}] Canal [{2}] Ano [{3}] Encontrou? [{4}]", unNeg, trimestre, canal.ID.Value, ano, (metaCanal != null)); if (metaCanal == null || !metaCanal.MetaPlanejada.HasValue || metaCanal.MetaPlanejada.Value == 0) { UnidadeNegocio un = RepositoryService.UnidadeNegocio.Retrieve(unNeg); string mensagem = string.Format("Não foi possível obter a Meta do Canal para Canal [{0}] e Unidade de Negócio [{1}]", canal.CodigoMatriz, un.Nome); this.AtualizarCompromissoCanalInconsistente(mensagem, compCanal, canal); } else { if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } // (CASO USO 2: STEP 7) ou // (CASO USO 3: STEP 10) #region CALCULO DE HITORICO X META E BAIXA EM COMPROMISSO metaPlanejada = metaCanal.MetaPlanejada.Value; StatusCompromissos statusCompromissoMeta = (valorHistorico >= metaPlanejada) ? StatusCompromissoCumprido : StatusCompromissoNaoCumprido; if (statusCompromissoMeta != null) { compCanal.StatusCompromisso = new Lookup(statusCompromissoMeta.ID.Value, ""); compCanal.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compCanal); } #endregion } #endregion #region VALIDANDO BENEFICIO DE LINHA DE CORTE valorHistorico = 0; decimal linhaCorte = 0; Lookup estadoCanal = canal.Endereco1Estadoid; Lookup classCanal = canal.Classificacao; StatusCompromissos statusComp = null; // compromisso do canal para linha de corte CompromissosDoCanal compCanalLinCorte = CompromissoDoCanal.BuscarCompromissoCanal(compProgLinhaCorte.ID.Value, unNeg, canal.ID.Value); #region VALIDAÇÕES PARA LOG if (compCanal == null) { InserirLog(dataProc + "Não foi possível encontrar o compromisso do canal de Linha de Corte para o canal : " + canal.ID.Value.ToString()); } if (canal.Endereco1Estadoid == null) { InserirLog(dataProc + "Monitoramento de linhas de corte não realizado para o canal : " + canal.ID.Value.ToString() + " Estado do canal não preenchido."); } if (canal.Classificacao == null) { InserirLog(dataProc + "Monitoramento de linhas de corte não realizado para o canal : " + canal.ID.Value.ToString() + " Classificação do canal não preenchido."); } #endregion #region PARA AS FILIAIS DA MATRIZ // EM CASO DE MATRIZ O VALOR DO HISTORICO X LINHA DE CORTE É CALCULADO PARA TODAS A FILIAIS // (CASO USO 3: STEP 6) foreach (Intelbras.CRM2013.Domain.Model.Conta filial in listaFiliais) { if (canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz && canal.ApuracaoBeneficiosCompromissos == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais) { continue; } histCanal = null; CRM2013.Domain.Model.Estado estado = new Intelbras.CRM2013.Domain.Model.Estado(this.OrganizationName, this.isOffline); CRM2013.Domain.Model.Municipio municipio = new Intelbras.CRM2013.Domain.Model.Municipio(this.OrganizationName, this.isOffline); CRM2013.Domain.Model.Categoria _categoriaCanal = new Intelbras.CRM2013.Domain.Model.Categoria(this.OrganizationName, this.isOffline); List <Guid> lstUnidade = new List <Guid>(); List <CategoriasCanal> lstCatFiliais = new List <CategoriasCanal>(); if (canal.Endereco1Municipioid == null) { InserirLogFormat("O Município do Canal [{0}] não está preenchido.", canal.CodigoMatriz); } // (CASO USO 3: STEP 6) histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, filial.ID.Value); if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } lstCatFiliais = CategoriaCanal.ListarPor(filial.ID, null); foreach (var categoria in lstCatFiliais) { if (categoria.UnidadeNegocios != null && categoria.UnidadeNegocios.Id == unNeg) { // (CASO USO 3: STEP 12) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_BoxMover || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_VAD) { lstUnidade = new List <Guid>(); lstUnidade.Add(categoria.UnidadeNegocios.Id); estado.ID = estadoCanal.Id; // (CASO USO 3: STEP 11) MUNICIPIO DO CANAL municipio = new Intelbras.CRM2013.Domain.Servicos.EnderecoServices(this.OrganizationName, this.isOffline).ObterMunicipio(canal.Endereco1Municipioid.Id); List <LinhaCorteDistribuidor> listaLinhaCorte = LinhaCorteService.ListarLinhadeCorteDistribuidor(lstUnidade, estado, municipio.CapitalOuInterior); //(CASO USO 3: STEP 14) if (listaLinhaCorte == null || listaLinhaCorte.Count == 0) { InserirLog(dataProc + "Linha de corte não encontrada para a filial: " + filial.CodigoMatriz); continue; } foreach (var item in listaLinhaCorte) { //(CASO USO 3: STEP 12) //Se achar mais de uma linha de corte, verifica se o campo capitalOuInterior é igual ao valor do municipio ligado ao canal if ((listaLinhaCorte.Count > 1 && item.CapitalOuInterior == municipio.CapitalOuInterior) || listaLinhaCorte.Count == 1) { linhaCorte += item.LinhaCorteTrimestral.Value; } //(CASO USO 3: STEP 14) if (!item.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para a filial : : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); } } //SE FOR REVENDA TRANSACIONAL OU RELACIONAL // (CASO USO 3: STEP 17) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Rel || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Trans) { foreach (var item in lstCat) { lstUnidade = new List <Guid>(); lstUnidade.Add(unNeg); _categoriaCanal.ID = item.ID; List <LinhaCorteRevenda> listaLinhaCorteRevenda = LinhaCorteService.ListarLinhadeCorteRevenda(lstUnidade, _categoriaCanal); //(CASO USO 3: STEP 14) if (listaLinhaCorteRevenda == null || listaLinhaCorteRevenda.Count == 0) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); foreach (var _linhaCorteRevenda in listaLinhaCorteRevenda) { //(CASO USO 3: STEP 19) if (!_linhaCorteRevenda.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a filial : " + filial.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para a filial : : " + filial.ID.Value.ToString() + " do canal : ", compCanal, canal); linhaCorte += _linhaCorteRevenda.LinhaCorteTrimestral.Value; } } } } } } #endregion // OBTEM HISTORICO DE CANAL histCanal = RepositoryService.HistoricoCompraCanal.ObterPor(unNeg, (int)trimestreOrcamentodaUnidade, ano, canal.ID.Value); // SE TIVER HISTORICO SOMA COM VARIAVEL SOMADORA valorHistorico if (histCanal != null && histCanal.Valor.HasValue) { valorHistorico += histCanal.Valor.Value; } #region BOXMOVER OU VAD //(CASO USO 2: STEP 11) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_BoxMover || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Dist_VAD) { LinhaCorteDistribuidor objLinhaCorte = (LinhaCorteDistribuidor)LinhaCorteService.ObterLinhaCorte(unNeg, estadoCanal.Id, null, "distribuidor"); if (objLinhaCorte == null || objLinhaCorte.LinhaCorteTrimestral == null) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para o canal : ", compCanal, canal); if (!objLinhaCorte.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para o canal : ", compCanal, canal); linhaCorte += objLinhaCorte.LinhaCorteTrimestral.Value; } #endregion #region RELACIONAL OU TRANSACIONAL //(CASO USO 2: STEP 11) if (classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Rel || classCanal.Name == Intelbras.CRM2013.Domain.Enum.Conta.Classificacao.Rev_Trans) { foreach (var item in lstCat) { LinhaCorteRevenda objLinhaCorteRevenda = (LinhaCorteRevenda)LinhaCorteService.ObterLinhaCorte(unNeg, null, item.Categoria.Id, "revenda"); if (objLinhaCorteRevenda == null || objLinhaCorteRevenda.LinhaCorteTrimestral == null) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não encontrada para o canal : ", compCanal, canal); if (!objLinhaCorteRevenda.LinhaCorteTrimestral.HasValue) { InserirLog(dataProc + "Linha de corte não encontrada para a canal : " + canal.ID.Value.ToString()); } //this.AtualizarCompromissoCanalInconsistente("Linha de corte não possui valor para o canal : ", compCanal, canal); linhaCorte += objLinhaCorteRevenda.LinhaCorteTrimestral.Value; } } #endregion #region CALCULO DE HISTORICO X LINHA DE CORTE statusComp = (valorHistorico >= linhaCorte) ? StatusCompromissoCumprido : StatusCompromissoNaoCumprido; compCanalLinCorte.StatusCompromisso = new Lookup(statusComp.ID.Value, ""); compCanalLinCorte.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compCanalLinCorte); #endregion #endregion #region VALIDANDO TREINAMENTO // ESTE CASO DE USO ATENDE O 2 E O 3 POIS AMBOS IDEPENDEM DE MATRIZ OU FILIAL // E O MESMO DEVE SER REFERENCIADO PELO CANAL EM QUESTÃO CompromissosDoCanal compTreinamento = CompromissoDoCanal.BuscarCompromissoCanal(compromissoTecnicoTreinadoCertificado.ID.Value, unNeg, canal.ID.Value); if (compTreinamento == null) { continue; } //(CASO USO 2: STEP 12) List <TreinamentoCanal> lstTreinamentoCanal = RepositoryService.TreinamentoCanal.ListarPor(null, null, compTreinamento.ID.Value); StatusCompromissos statusCompromissoTreinamento = StatusCompromissoCumprido; //(CASO USO 2: STEP 13) foreach (TreinamentoCanal _treinamentocanal in lstTreinamentoCanal) { if (_treinamentocanal.StatusCompromisso.Name == Enum.TreinamentoCanal.StatusCompromisso.Nao_Cumprido) { statusCompromissoTreinamento = StatusCompromissoNaoCumprido; break; } } compTreinamento.StatusCompromisso = new Lookup(statusCompromissoTreinamento.ID.Value, ""); compTreinamento.Validade = DateTime.Now.Date.AddMonths(3); CompromissoDoCanal.Atualizar(compTreinamento); #endregion Trace.SaveClear(); } } #region MANDA EMAIL DE LOG StringBuilder sb = new StringBuilder(); foreach (string item in mensagemLog) { sb.AppendLine(item); } EnviaEmailDeLog("Monitoramnto Automatico"); #endregion }
public string Enviar(ParametroGlobal objModel) { throw new NotImplementedException(); }
//public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario) //{ // try // { // //Trace.Add("Mensagem " + numeroMensagem + " XML: {0}", mensagem); // usuarioIntegracao = usuario; // Intelbras.Message.Helper.MSG0111 xml = this.CarregarMensagem<Pollux.MSG0111>(mensagem); // ParametroGlobal objeto = this.DefinirPropriedades(xml); // if (!resultadoPersistencia.Sucesso) // { // retorno.Add("Resultado", resultadoPersistencia); // return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno); // } // objeto = new Domain.Servicos.ParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(tipoParamentroCod, unidadeNegocioId, classificacaoId, categoriaId, nivelPosVendaId, compromissoId, beneficioId,null); // if (objeto == null) // { // resultadoPersistencia.Sucesso = true; // resultadoPersistencia.Mensagem = "Registro não encontrado!"; // } // else // { // Pollux.Entities.ParametroGlobal objRetorno = new Pollux.Entities.ParametroGlobal(); // objRetorno.TipoDado = objeto.TipoDado; // objRetorno.Valor = objeto.Valor; // retorno.Add("ParametroGlobal", objRetorno); // resultadoPersistencia.Sucesso = true; // resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso"; // } // retorno.Add("Resultado", resultadoPersistencia); // return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno); // } // catch (Exception e) // { // resultadoPersistencia.Sucesso = false; // resultadoPersistencia.Mensagem = SDKore.Helper.Error.Handler(e); // retorno.Add("Resultado", resultadoPersistencia); // return CriarMensagemRetorno<Pollux.MSG0111R1>(numeroMensagem, retorno); // //throw new ArgumentException(e.Message); // } //} #endregion #region Definir Propriedades public ParametroGlobal DefinirPropriedades(Intelbras.Message.Helper.MSG0111 xml) { ParametroGlobal crm = new ParametroGlobal(this.Organizacao, this.IsOffline); //Obrigatorio TipodeParametroGlobal tipoParamentro = new Servicos.TipodeParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor(xml.TipoParametroGlobal); if (tipoParamentro != null && tipoParamentro.Codigo.HasValue) { tipoParamentroCod = tipoParamentro.Codigo.Value; crm.TipoParametro = new Lookup(tipoParamentro.ID.Value, ""); } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "TipoParametroGlobal/Codigo não cadastrada no Crm."; return(crm); } //Não Obrigatório if (!String.IsNullOrEmpty(xml.CodigoBeneficio)) { if (xml.CodigoBeneficio.Length == 36) { crm.Beneficio = new Lookup((Guid)(TransformaGuid(xml.CodigoBeneficio)), ""); } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Identificador CodigoBeneficio fora do padrão (Guid)."; return(crm); } } //Não obrigatorio if (!String.IsNullOrEmpty(xml.CodigoClassificacao)) { Classificacao classificacao = new Servicos.ClassificacaoService(this.Organizacao, this.IsOffline).BuscaClassificacao(new Guid(xml.CodigoClassificacao)); if (classificacao != null) { crm.Classificacao = new Lookup(classificacao.ID.Value, ""); classificacaoId = classificacao.ID.Value; } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Classificação não cadastrada no Crm."; return(crm); } } //Não obrigatorio if (!String.IsNullOrEmpty(xml.CodigoCategoria)) { Categoria categoria = new Servicos.CategoriaService(this.Organizacao, this.IsOffline).ObterPor(new Guid(xml.CodigoCategoria)); if (categoria != null) { crm.Categoria = new Lookup(categoria.ID.Value, ""); categoriaId = categoria.ID.Value; } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Categoria não cadastrada no Crm."; return(crm); } } //Não Obrigatorio if (!String.IsNullOrEmpty(xml.CodigoCompromisso)) { if (xml.CodigoCompromisso.Length == 36) { crm.Compromisso = new Lookup(new Guid(xml.CodigoCompromisso), ""); compromissoId = new Guid(xml.CodigoCompromisso); } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Identificador CodigoCompromisso fora do padrão (Guid)."; return(crm); } } //Não Obrigatorio if (!String.IsNullOrEmpty(xml.CodigoBeneficio)) { if (xml.CodigoBeneficio.Length == 36) { crm.Beneficio = new Lookup(new Guid(xml.CodigoBeneficio), ""); beneficioId = new Guid(xml.CodigoBeneficio); } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Identificador CodigoBeneficio fora do padrão (Guid)."; return(crm); } } //Não Obrigatorio if (!String.IsNullOrEmpty(xml.CodigoUnidadeNegocio)) { UnidadeNegocio unidadeNeg = new Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocioPorChaveIntegracao(xml.CodigoUnidadeNegocio); if (unidadeNeg != null) { crm.UnidadeNegocio = new Lookup(unidadeNeg.ID.Value, ""); unidadeNegocioId = unidadeNeg.ID.Value; } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "UnidadeNegocio não cadastrada no Crm."; return(crm); } } //Não Obrigatorio if (!String.IsNullOrEmpty(xml.CodigoNivelPosVenda)) { if (xml.CodigoNivelPosVenda.Length == 36) { crm.NivelPosVenda = new Lookup(new Guid(xml.CodigoNivelPosVenda), ""); nivelPosVendaId = new Guid(xml.CodigoNivelPosVenda); } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Identificador NivelPosVenda fora do padrão (Guid)."; return(crm); } } return(crm); }
// TREINAMENTO // CASO DE USO 2 - VERIFICAÇÃO DO STATUS DOS TREINAMENTOS E CERTIFICAÇÃO DO CANAL public void VerificacaoDoStatusTreinamentosECertificacaoCanal() { Trace = new SDKore.Helper.Trace("MonitoramentoVerificaStatus"); mensagemLog = new List <string>(); InserirLog(DateTime.Now + " - Inicio - Verificação do Status dos Treinamentos e Certificados dos Canais!"); ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault(); if (paramGlobal == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, o parâmetro global não foi encontrado ou está preenchido com valores incorretos."); } // Obtem lista de canais matriz ou filial // (CASO USO TREINAMENTO 2: STEP 1) List <Conta> lstContas = ContaService.ListarContasParticipantes(); InserirLog(string.Empty); InserirLog(DateTime.Now + " - Foram encontrados " + lstContas.Count + " participantes do PCI para processar!"); foreach (Conta canal in lstContas) { // (CASO USO TREINAMENTO 2: STEP 3) List <TreinamentoCanal> lstTreinamentoCanal = this.ListarTreinamentoPorCanal(canal.ID.Value); InserirLog(string.Empty); InserirLog(DateTime.Now + " --- Foram encontrados " + lstTreinamentoCanal.Count + " treinamentos do Canal [" + canal.CodigoMatriz + "] para processar!"); // (CASO USO TREINAMENTO 2: STEP 4) foreach (var treinamentoCanal in lstTreinamentoCanal) { try { InserirLog(DateTime.Now + " ----- Treinamentos do Canal [" + treinamentoCanal.Nome + "]"); // (CASO USO TREINAMENTO 2: STEP 5) TreinamentoCertificacao treinamentoCertficacao = TreinamentoCertificacao.ObterPor(treinamentoCanal.Treinamento.Id); if (treinamentoCanal.CompromissoCanal != null) { CompromissosDoCanal compCanal = CompromissoDoCanal.BuscarPorGuid(treinamentoCanal.CompromissoCanal.Id); // (CASO USO TREINAMENTO 2: STEP 5) if (treinamentoCertficacao.ID != null && compCanal.UnidadeDeNegocio != null) { List <ProdutoTreinamento> lstProdTrei = ProdutoTreinamento.ListarPorTreinamento(treinamentoCertficacao.ID.Value, compCanal.UnidadeDeNegocio.Id); int numMinimoProfissionais = lstProdTrei.Max(x => x.NroMinimoProf.Value); // (CASO USO TREINAMENTO 2: STEP 6) List <ColaboradorTreinadoCertificado> lstColaboradorTreinadoCertificadoDoCanal = RepositoryService.ColaboradorTreinadoCertificado.ListarPor(canal.ID.Value, treinamentoCertficacao.ID.Value); // (CASO USO TREINAMENTO 2: STEP 7) if (lstColaboradorTreinadoCertificadoDoCanal.Count >= numMinimoProfissionais) { InserirLog(DateTime.Now + " ----- Atualizando para Cumprido"); treinamentoCanal.StatusCompromisso = new Lookup(StatusCompromissoCumprido.ID.Value, ""); RepositoryService.TreinamentoCanal.Update(treinamentoCanal); } else if (treinamentoCanal.DataLimite < DateTime.Today) { InserirLog(DateTime.Now + " ----- Atualizando para Não Cumprido"); treinamentoCanal.StatusCompromisso = new Lookup(StatusCompromissoNaoCumprido.ID.Value, ""); RepositoryService.TreinamentoCanal.Update(treinamentoCanal); } } } } catch (Exception ex) { string mensagem = SDKore.Helper.Error.Handler(ex); InserirLog(DateTime.Now + " - ERRO: " + mensagem); } } } InserirLog(string.Empty); InserirLog(DateTime.Now + " - Fim - Verificação do Status dos Treinamentos e Certificados dos Canais!"); this.EnviaEmailDeLog("Verificação do status do Treinamento"); }
// TREINAMENTO // CASO DE USO 1 – GERAÇÃO TREINAMENTO E CERTIFICAÇÃO DO CANAL public void GeracaoTreinamentoECertificacaoDoCanal() { Trace = new SDKore.Helper.Trace("GeraTreinamento"); mensagemLog = new List <string>(); InserirLog(DateTime.Now + " - Inicio Geração Treinamento e Certificacao do Canal"); ParametroGlobal paramGlobal = ParametroGlobal.ListarParamGlobalPorTipoParam((int)Intelbras.CRM2013.Domain.Enum.TipoParametroGlobal.DatasTrimestre).FirstOrDefault(); if (paramGlobal == null) { throw new ApplicationException("A execução do monitoramento foi interrompida, o parâmetro global não foi encontrado ou está preenchido com valores incorretos."); } List <Conta> lstContas = ContaService.ListarContasParticipantes(); InserirLog(DateTime.Now + " - Foram encontrados " + lstContas.Count + " participantes do PCI para processar!"); foreach (Conta canal in lstContas) { try { InserirLog(string.Empty); InserirLog(DateTime.Now + " -- Canal[" + canal.CodigoMatriz + "]"); List <TreinamentoCanal> lstTreinamentoCanal = this.ListarTreinamentoPorCanal(canal.ID.Value); InserirLog(DateTime.Now + " --- Foram encontrados " + lstTreinamentoCanal.Count() + " treinamento do canal!"); // Inativa status de treinamentos e certificações this.InativaTreinamentosDeCanal(lstTreinamentoCanal); // lista produtos portifolios List <ProdutoPortfolio> lstProdutoPortifolio = new Servicos.ProdutoService(OrganizationName, isOffline).ProdutosPortfolio(canal, canal.Classificacao.Id, null); InserirLog(DateTime.Now + " --- Foram encontrados " + lstProdutoPortifolio.Count + " produtos do portfolio!"); // filtra produto por produto que exija treinamento var lstProdPortExigeTrein = lstProdutoPortifolio.Where(x => x.Product.ExigeTreinamento == true); InserirLog(DateTime.Now + " --- Foram encontrados " + lstProdPortExigeTrein.Count() + " produtos do portfolio que exigem treinamento!"); // para cada produto portifolio foreach (var prodPort in lstProdPortExigeTrein) { InserirLog(DateTime.Now + " ---- Produto: " + prodPort.Product.Codigo + " - Unidade Negocio: " + prodPort.Product.UnidadeNegocio.Name); List <CompromissosDoCanal> lstCompCanal = new List <CompromissosDoCanal>(); // se forma de apuração de beneficio e compromisso do canal for por filial if (canal.ApuracaoBeneficiosCompromissos.Value == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Por_Filiais || canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Matriz) { // compromisso do canal 33 lstCompCanal = CompromissosDoCanal.ListarPorCod33EPorMatriz(canal.ID.Value, prodPort.Product.UnidadeNegocio.Id); } else if (canal.ApuracaoBeneficiosCompromissos.Value == (int)Enum.Conta.ApuracaoDeBeneficiosECompromissos.Centralizada_Na_Matriz && canal.TipoConta == (int)Enum.Conta.MatrizOuFilial.Filial) { lstCompCanal = CompromissosDoCanal.ListarPorCod33EPorMatriz(canal.ContaPrimaria.Id, prodPort.Product.UnidadeNegocio.Id); } InserirLog(DateTime.Now + " ----- Foram encontrados " + lstCompCanal.Count() + " Compromisso do Canal "); if (lstCompCanal.Count() > 0) { // lista de produto treinamento certificação List <ProdutoTreinamento> lstProdTrei = ProdutoTreinamento.ListarPorProduto(prodPort.Produto.Id); InserirLog(DateTime.Now + " ------ Foram encontrados " + lstProdTrei.Count() + " Produtos do Treinamento "); // Cria TReinamento do canal ou ativa se ja existir foreach (var prodTrei in lstProdTrei) { InserirLog(DateTime.Now + " ------- Produto por Treinamento Certificação: " + prodTrei.Treinamento.Name); this.CriaTreinamentoCanalOuAtiva(prodTrei.Treinamento.Id, prodTrei.Treinamento.Name, canal, lstCompCanal[0].ID); } } } } catch (Exception ex) { string mensagem = SDKore.Helper.Error.Handler(ex); InserirLog(DateTime.Now + " - ERRO: " + mensagem); } } InserirLog(string.Empty); InserirLog(DateTime.Now + " - Fim GeracaoTreinamentoECertificacaoDoCanal"); this.EnviaEmailDeLog("Geracao Treinamento e Certificação"); }