public List <Pollux.Entities.ProdutoPortifolio> CarregarListaProdutoPortifolio(List <ProdutoPortfolio> lstProdutoPortifolio) { List <Pollux.Entities.ProdutoPortifolio> lstPolluxPortifolio = new List <Pollux.Entities.ProdutoPortifolio>(); List <Guid> lstProdutoListaIds = new List <Guid>(); List <Product> lstProduto = new List <Product>(); List <Product> lstProdutoCompleto = new List <Product>(); foreach (var prodItem in lstProdutoPortifolio) { lstProdutoListaIds.Add(prodItem.Produto.Id); } if (lstProdutoListaIds.Count > 0) { lstProduto = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).ListarProduto(lstProdutoListaIds); } List <ProdutoTreinamento> lstProdTreinamentoCache = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).ProdutoTreinamentoListarTodos(); List <TreinamentoCanal> lstTreinamentoCanalCache = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).TreinamentoCanalListarTodos(); foreach (Product produto in lstProduto) { //Product produto = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).ObterPor(item.Produto.Id); Pollux.Entities.ProdutoPortifolio objPollux = new Pollux.Entities.ProdutoPortifolio(); objPollux.CodigoProduto = produto.Codigo; objPollux.Bloqueado = false; objPollux.TemCache = false; objPollux.TipoPortfolio = lstProdutoPortifolio.Where(x => x.Produto.Id == produto.ID.Value).First().PortfolioTipo; if (produto.ExigeTreinamento.Value) { //Para cada um que requere certificação, localiza a lista de Treinamentos/Certificações requeridas na entidade Produtos x Treinamento/Certificação. List <ProdutoTreinamento> lstProdTreinamento = lstProdTreinamentoCache.Where(x => x.Produto.Id == produto.ID.Value).ToList(); //RepositoryService.ProdutoTreinamento.ListarPorProduto(prodPort.Produto.Id); foreach (ProdutoTreinamento prodTreinamento in lstProdTreinamento) { List <TreinamentoCanal> lstTreinamentoCanal = lstTreinamentoCanalCache.Where(y => y.Treinamento.Id == prodTreinamento.Treinamento.Id). Where(y => y.Canal.Id == lstProdutoPortifolio.First().CanalId).ToList(); //RepositoryService.TreinamentoCanal.ListarPor((Guid)prodTreinamento.Treinamento.Id, (Guid)canalId); //Para cada Treinamento encontrado, verifica quais estão com Status igual a “Não cumprido” na entidade Treinamentos do Canal (de mesmo Canal e Treinamento obtidos). if (lstTreinamentoCanal.Count(x => x.StatusCompromisso.Name == Enum.CompromissoCanal.StatusCompromisso.Nao_Cumprido) > 0) { //Remove da lista de produtos do portfólio do passo 8, todos os produtos encontrados sem treinamento no passo 9 (remove da lista, não da base do CRM). //E apenas bloqueia o portfolio se tiver o flag marcado como sim //Product prodBloq = RepositoryService.Produto.ObterPor(prodTreinamento.Produto.Id); if (prodTreinamento.BloqueiaPortfolio.Value == (int)Enum.ProdutoTreinamento.BloqueiaPortfolio.Sim) { objPollux.Bloqueado = true; } } } } lstPolluxPortifolio.Add(objPollux); } return(lstPolluxPortifolio); }
public List <PrecoProduto> DefinirPropriedadesLista(Intelbras.Message.Helper.MSG0101 xml) { List <PrecoProduto> lstPrecoProduto = new List <PrecoProduto>(); List <String> lstCodProd = new List <String>(); foreach (var item in xml.ProdutosItens) { lstCodProd.Add(item.CodigoProduto); } List <Product> lstProduto = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).ListarProdutosPorCodigo(lstCodProd); Guid contaProduto = new Guid(); if (!String.IsNullOrEmpty(xml.Conta) && xml.Conta.Length == 36) { contaProduto = new Guid(xml.Conta); } else if (!String.IsNullOrEmpty(xml.Conta) && xml.Conta.Length < 36) { Conta conta = new Servicos.ContaService(this.Organizacao, this.IsOffline).BuscaContaPorCpfCnpj(xml.Conta); if (conta != null) { contaProduto = conta.ID.Value; } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Canal não encontrado."; lstPrecoProduto = null; return(lstPrecoProduto); } } else { resultadoPersistencia.Sucesso = false; resultadoPersistencia.Mensagem = "Identificador do Canal não enviado."; lstPrecoProduto = null; return(lstPrecoProduto); } foreach (var item in xml.ProdutosItens) { PrecoProduto precoProduto = new PrecoProduto(this.Organizacao, this.IsOffline); if (!String.IsNullOrEmpty(item.CodigoProduto)) { precoProduto.CodigoProduto = item.CodigoProduto; Product produto = new Product(this.Organizacao, this.IsOffline); produto = lstProduto.Where(x => x.Codigo == item.CodigoProduto).FirstOrDefault <Product>(); if (produto != null) { precoProduto.ProdutoId = produto.ID.Value; precoProduto.Produto = produto; if (item.TipoPortfolio == (int)Domain.Enum.Portfolio.Tipo.CrossSelling) { precoProduto.TipoCrossSelling = true; } else { precoProduto.TipoCrossSelling = false; } precoProduto.codEstabelecimento = item.CodigoEstabelecimento.Value; precoProduto.codUnidade = item.CodigoUnidadeNegocio; precoProduto.codFamiliaComl = item.CodigoFamiliaComercial; precoProduto.tipoPortofolio = item.TipoPortfolio.Value; } else { precoProduto.Produto = null; precoProduto.ProdutoId = Guid.Empty; precoProduto.ValorProduto = 0; precoProduto.MensagemErro = "Produto não cadastrado no Crm."; } } else { precoProduto.Produto = null; precoProduto.ProdutoId = Guid.Empty; precoProduto.ValorProduto = 0; precoProduto.MensagemErro = "Identificador do Produto não enviado."; } if (!String.IsNullOrEmpty(item.Moeda)) { precoProduto.Moeda = item.Moeda; } else { precoProduto.Produto = null; precoProduto.ProdutoId = Guid.Empty; precoProduto.ValorProduto = 0; precoProduto.MensagemErro = "Moeda não enviada."; } precoProduto.ContaId = contaProduto; decimal qtd = 0; if (Decimal.TryParse(item.Quantidade.ToString(), out qtd)) { try { precoProduto.Quantidade = (int)qtd; } catch { precoProduto.Produto = null; precoProduto.ProdutoId = Guid.Empty; precoProduto.ValorProduto = 0; precoProduto.MensagemErro = "Produto com 'Quantidade' fora do padrão."; } } else { precoProduto.Produto = null; precoProduto.ProdutoId = Guid.Empty; precoProduto.ValorProduto = 0; precoProduto.MensagemErro = "Produto com 'Quantidade' fora do padrão ou não enviado."; } precoProduto.ValorProduto = 0; lstPrecoProduto.Add(precoProduto); } return(lstPrecoProduto); }
// 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"); }