Exemplo n.º 1
0
        public List <Pollux.Entities.SolicitacaoBeneficio> DefinirRetorno(List <Model.SolicitacaoBeneficio> lstSolBeneficioCrm)
        {
            List <Pollux.Entities.SolicitacaoBeneficio> lstRetorno = new List <Pollux.Entities.SolicitacaoBeneficio>();

            #region Propriedades Crm->Xml
            foreach (var itemCrm in lstSolBeneficioCrm)
            {
                var solBeneficioPollux = new Pollux.Entities.SolicitacaoBeneficio();

                if (itemCrm.DataCriacao.HasValue)
                {
                    solBeneficioPollux.DataCriacaoSolicitacao = itemCrm.DataCriacao.Value;
                }
                else
                {
                    solBeneficioPollux.DataCriacaoSolicitacao = DateTime.MinValue;
                }

                solBeneficioPollux.CodigoSolicitacaoBeneficio = itemCrm.ID.Value.ToString();

                if (!String.IsNullOrEmpty(itemCrm.Nome))
                {
                    solBeneficioPollux.NomeSolicitacaoBeneficio = itemCrm.Nome;
                }
                else
                {
                    solBeneficioPollux.NomeSolicitacaoBeneficio = "N/A";
                }

                if (itemCrm.UnidadedeNegocio != null)
                {
                    UnidadeNegocio unidadeNeg = new Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocio(itemCrm.UnidadedeNegocio.Id);
                    if (unidadeNeg != null)
                    {
                        if (!String.IsNullOrEmpty(unidadeNeg.ChaveIntegracao))
                        {
                            solBeneficioPollux.CodigoUnidadeNegocio = unidadeNeg.ChaveIntegracao;
                        }
                        else
                        {
                            solBeneficioPollux.CodigoUnidadeNegocio = "N/A";
                        }
                        if (!String.IsNullOrEmpty(unidadeNeg.Nome))
                        {
                            solBeneficioPollux.NomeUnidadeNegocio = unidadeNeg.Nome;
                        }
                        else
                        {
                            solBeneficioPollux.NomeUnidadeNegocio = "N/A";
                        }
                    }
                    else
                    {
                        solBeneficioPollux.CodigoUnidadeNegocio = "N/A";
                        solBeneficioPollux.NomeUnidadeNegocio   = "N/A";
                    }
                }
                else
                {
                    solBeneficioPollux.CodigoUnidadeNegocio = "N/A";
                    solBeneficioPollux.NomeUnidadeNegocio   = "N/A";
                }
                if (itemCrm.ValorAcao.HasValue)
                {
                    solBeneficioPollux.ValorAcao = itemCrm.ValorAcao.Value;
                }
                else
                {
                    solBeneficioPollux.ValorAcao = 0;
                }
                if (!String.IsNullOrEmpty(itemCrm.SituacaoIrregular))
                {
                    solBeneficioPollux.DescricaoSituacaoIrregular = itemCrm.SituacaoIrregular;
                }
                if (itemCrm.AcaoSubsidiadaVmc != null)
                {
                    solBeneficioPollux.CodigoAcaoSubsidiadaVMC = itemCrm.AcaoSubsidiadaVmc.Id.ToString();
                    solBeneficioPollux.NomeAcaoSubsidiadaVMC   = itemCrm.AcaoSubsidiadaVmc.Name;
                }

                if (itemCrm.ValorSolicitado.HasValue)
                {
                    solBeneficioPollux.ValorSolicitado = itemCrm.ValorSolicitado.Value;
                }
                else
                {
                    solBeneficioPollux.ValorSolicitado = 0;
                }

                if (itemCrm.Status.HasValue)
                {
                    solBeneficioPollux.SituacaoSolicitacaoBeneficio = itemCrm.StatusSolicitacao.Value;
                }

                if (itemCrm.FormaPagamento != null)
                {
                    solBeneficioPollux.CodigoFormaPagamento = itemCrm.FormaPagamento.Id.ToString();
                    solBeneficioPollux.NomeFormaPagamento   = itemCrm.FormaPagamento.Name;
                }
                else
                {
                    solBeneficioPollux.CodigoFormaPagamento = Guid.Empty.ToString();
                    solBeneficioPollux.NomeFormaPagamento   = "N/A";
                }
                if (itemCrm.ValorAprovado.HasValue)
                {
                    solBeneficioPollux.ValorAprovado = itemCrm.ValorAprovado.Value;
                }

                if (itemCrm.TipoPriceProtection.HasValue)
                {
                    solBeneficioPollux.TipoPriceProtection = itemCrm.TipoPriceProtection.Value;
                    if (itemCrm.StatusCalculoPriceProtection.HasValue)
                    {
                        solBeneficioPollux.StatusCalculoPriceProtection = itemCrm.StatusCalculoPriceProtection.Value;
                    }
                }

                if (itemCrm.ResultadoPrevisto.HasValue)
                {
                    solBeneficioPollux.ResultadoPrevisto = itemCrm.ResultadoPrevisto.Value;
                }

                if (itemCrm.ResultadoAlcancado.HasValue)
                {
                    solBeneficioPollux.ResultadoAlcancado = itemCrm.ResultadoAlcancado.Value;
                }

                if (!string.IsNullOrEmpty(itemCrm.TrimestreCompetencia))
                {
                    solBeneficioPollux.TrimestreCompetencia = itemCrm.TrimestreCompetencia;
                }

                if (!string.IsNullOrEmpty(itemCrm.Descricao))
                {
                    solBeneficioPollux.DescricaoSolicitacao = itemCrm.Descricao;
                }

                if (itemCrm.DataIniAcao.HasValue)
                {
                    solBeneficioPollux.DataInicioAcao = itemCrm.DataIniAcao.Value;
                }

                if (itemCrm.DataFimAcao.HasValue)
                {
                    solBeneficioPollux.DataPrevistaRetornoAcao = itemCrm.DataFimAcao.Value;
                }

                if (itemCrm.ValorPago.HasValue)
                {
                    solBeneficioPollux.ValorPago = itemCrm.ValorPago.Value;
                }
                if (itemCrm.BeneficioPrograma != null)
                {
                    solBeneficioPollux.CodigoBeneficio = itemCrm.BeneficioPrograma.Id.ToString();
                    solBeneficioPollux.NomeBeneficio   = itemCrm.BeneficioPrograma.Name;

                    Beneficio benefProg = new Intelbras.CRM2013.Domain.Servicos.BeneficioService(this.Organizacao, this.IsOffline).ObterPor(itemCrm.BeneficioPrograma.Id);
                    if (benefProg != null && benefProg.Codigo.HasValue)
                    {
                        solBeneficioPollux.BeneficioCodigo = benefProg.Codigo.Value;
                    }
                }
                else
                {
                    solBeneficioPollux.CodigoBeneficio = Guid.Empty.ToString();
                    solBeneficioPollux.NomeBeneficio   = "N/A";
                    solBeneficioPollux.BeneficioCodigo = (int)this.PreencherAtributoVazio("int");
                }
                if (itemCrm.AlteradaParaStockRotation.HasValue)
                {
                    solBeneficioPollux.AlteradaStockRotation = itemCrm.AlteradaParaStockRotation.Value;
                }
                else
                {
                    solBeneficioPollux.AlteradaStockRotation = false;
                }
                if (itemCrm.SituacaoIrregularidades.HasValue)
                {
                    solBeneficioPollux.SolicitacaoIrregular = itemCrm.SituacaoIrregularidades.Value;
                }
                else
                {
                    solBeneficioPollux.SolicitacaoIrregular = false;
                }

                if (itemCrm.AjusteSaldo.HasValue)
                {
                    solBeneficioPollux.SolicitacaoAjuste = itemCrm.AjusteSaldo.Value;
                }

                if (itemCrm.ValorCancelado.HasValue)
                {
                    solBeneficioPollux.ValorCancelado = itemCrm.ValorCancelado.Value;
                }

                //Busca as unidades de negócio relacionadas ao Benefício do canal
                List <SolicitacaoXUnidades> lstUnidadesBenef = new Servicos.SolicitacaoXUnidadesService(this.Organizacao, this.IsOffline).ListarPor(itemCrm.ID.Value);
                solBeneficioPollux.UnidadesRelacionadas = this.ConverteLista(lstUnidadesBenef);

                lstRetorno.Add(solBeneficioPollux);
            }
            #endregion
            return(lstRetorno);
        }
        public void ProdutoSolicitacaoShowRoom(ProdutosdaSolicitacao objProdutoSolicitacao)
        {
            #region Verificações de valores
            if (objProdutoSolicitacao == null)
            {
                throw new ArgumentException("(CRM) Produto Solicitação Vazio");
            }

            if (objProdutoSolicitacao.BeneficioPrograma == null)
            {
                throw new ArgumentException("(CRM) Campo Benefício de Programa obrigatório");
            }

            if (objProdutoSolicitacao.SolicitacaoBeneficio == null)
            {
                throw new ArgumentException("(CRM) Campo Solicitação de Benefício obrigatória");
            }
            #endregion

            Beneficio benefPrograma = new Intelbras.CRM2013.Domain.Servicos.BeneficioService(RepositoryService).ObterPor(objProdutoSolicitacao.BeneficioPrograma.Id);
            #region Verificações de valores
            if (benefPrograma == null)
            {
                throw new ArgumentException("(CRM) Benefício do Programa não encontrado");
            }
            #endregion
            if (benefPrograma.Codigo == (int)Domain.Enum.BeneficiodoPrograma.Codigos.Showroom)
            {
                #region Verificações de valores
                if (objProdutoSolicitacao.Produto == null)
                {
                    throw new ArgumentException("(CRM) Campo Produto obrigatório");
                }
                #endregion

                Product produto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(RepositoryService).ObterPor(objProdutoSolicitacao.Produto.Id);

                #region Verificações de valores
                if (produto == null)
                {
                    throw new ArgumentException("(CRM) Produto " + objProdutoSolicitacao.Produto.Name.ToString() + " não encontrado");
                }

                if (produto.Segmento == null)
                {
                    throw new ArgumentException("(CRM) Campo segmento do Produto não preenchido,operação cancelada");
                }
                #endregion

                Segmento objSegmento = new Intelbras.CRM2013.Domain.Servicos.SegmentoService(RepositoryService).ObterPor(produto.Segmento.Id);

                #region Verificações de valores
                if (objSegmento == null)
                {
                    throw new ArgumentException("(CRM) Segmento do Produto não encontrado");
                }
                #endregion

                ParametroGlobal paramIntervalo = new Intelbras.CRM2013.Domain.Servicos.ParametroGlobalService(RepositoryService).ObterPor((int)Domain.Enum.TipoParametroGlobal.PrazoPermitidoNovaCompraShowroom, null, null, null, null, null, null, null);
                #region Verificações de valores
                if (paramIntervalo == null)
                {
                    throw new ArgumentException("(CRM) Parâmetro Global não encontrado para 'Prazo permitido para nova compra de showroom'.Operação Cancelada");
                }
                #endregion

                SolicitacaoBeneficio objSolicBenef = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(RepositoryService).ObterPor(objProdutoSolicitacao.SolicitacaoBeneficio.Id);

                #region Verificação de valores
                if (objSolicBenef == null)
                {
                    throw new ArgumentException("(CRM) Solicitação Benefício não encontrada");
                }

                if (objSolicBenef.BeneficioCanal == null)
                {
                    throw new ArgumentException("(CRM) Benefício do Canal não encontrado");
                }

                #endregion

                List <SolicitacaoBeneficio> solicBenef = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(RepositoryService).ListarPorBeneficioCanalEStatus(objSolicBenef.BeneficioCanal.Id, objSolicBenef.BeneficioPrograma.Id, (int)Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.PagamentoEfetuado);

                if (solicBenef.Count > 0)
                {
                    List <SolicitacaoBeneficio> tmpSolicBenef = new List <SolicitacaoBeneficio>();
                    foreach (SolicitacaoBeneficio item in solicBenef)
                    {
                        //DateTime.Compare(item.DataCriacao, objSolicBenef.DataCriacao);
                        int diferencaDias = Math.Abs(item.DataCriacao.Value.Subtract(objSolicBenef.DataCriacao.Value).Days);
                        if ((diferencaDias >= Convert.ToInt32(paramIntervalo.Valor)))
                        {
                            //Lista com os beneficios que serão verificados
                            tmpSolicBenef.Add(item);
                        }
                    }

                    int qtdMaxima;

                    if (objSegmento.QtdMaximaShowRoom.HasValue)
                    {
                        qtdMaxima = objSegmento.QtdMaximaShowRoom.Value;
                    }
                    else
                    {
                        //Fluxo alternativo 2
                        ParametroGlobal paramGlobal = new Intelbras.CRM2013.Domain.Servicos.ParametroGlobalService(RepositoryService).ObterPor((int)Domain.Enum.TipoParametroGlobal.QuantidadeKitsShowroomPorSegmento, null, null, null, null, null, null, null);
                        if (paramGlobal == null)
                        {
                            throw new ArgumentException("(CRM) Parâmetro Global não encontrado para Quantidade de Kits para Showroom.Operação Cancelada");
                        }

                        qtdMaxima = Convert.ToInt32(paramGlobal.Valor);
                    }

                    #region Agrupa Produtos por Segmento do Produto

                    decimal qtdProdutosSegmento = 0;
                    if (tmpSolicBenef.Count > 0)
                    {
                        foreach (var item in tmpSolicBenef)
                        {
                            List <ProdutosdaSolicitacao> produtosSolic = new Intelbras.CRM2013.Domain.Servicos.ProdutosdaSolicitacaoService(RepositoryService).ListarPorSolicitacao(item.ID.Value);

                            if (produtosSolic.Count > 0)
                            {
                                foreach (var produtoSolic in produtosSolic)
                                {
                                    if (produtoSolic.Produto == null)
                                    {
                                        throw new ArgumentException("Produto da Solicitação não cadastrado.");
                                    }

                                    Product _produto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(RepositoryService).ObterPor(produtoSolic.Produto.Id);
                                    if (_produto == null)
                                    {
                                        throw new ArgumentException("Produto não encontrado");
                                    }

                                    if (_produto.Segmento == null)
                                    {
                                        throw new ArgumentException("Segmento do Produto " + _produto.Nome + " não preenchido");
                                    }

                                    if (_produto.Segmento.Id == objSegmento.ID.Value)
                                    {
                                        qtdProdutosSegmento += produtoSolic.QuantidadeAprovada.Value;
                                    }
                                }
                            }
                        }
                    }
                    #endregion

                    if (qtdProdutosSegmento > qtdMaxima)
                    {
                        throw new ArgumentException("(CRM) Limite de compras de showroom atingido para este segmento.Operação bloqueada.");
                    }
                }
            }
        }