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