Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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");
        }