Пример #1
0
        public void Solicitacao()
        {
            RepositoryService sRepos = new RepositoryService(OrganizationName, IsOffline);

            RetrieveMultipleRequest retrieveMultiple;
            StringBuilder           strFetchXml = new StringBuilder();

            strFetchXml.Append("<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>");
            strFetchXml.Append("<entity name='itbc_produtosdasolicitacao'>");
            strFetchXml.Append("<all-attributes />");
            strFetchXml.Append("</entity>");
            strFetchXml.Append("</fetch>");

            // Build fetch request and obtain results.
            retrieveMultiple = new RetrieveMultipleRequest()
            {
                Query = new FetchExpression(strFetchXml.ToString())
            };

            List <ProdutosdaSolicitacao> lst = (List <ProdutosdaSolicitacao>)sRepos.ProdutosdaSolicitacao.RetrieveMultiple(retrieveMultiple.Query).List;
            //ProdutosdaSolicitacao mProdutosdaSolicitacao = sRepos.ProdutosdaSolicitacao.Retrieve(Guid.Parse(""));
            ProdutosdaSolicitacao mProdutosdaSolicitacao = lst[0];

            ProdutosdaSolicitacaoService ServiceProdutosdaSolicitacao = new ProdutosdaSolicitacaoService(this.OrganizationName, this.IsOffline);
        }
        public void ValidaCamposObrigatorios(ProdutosdaSolicitacao produtoSolicitacao)
        {
            if (produtoSolicitacao.Produto == null)
            {
                throw new ArgumentException("(CRM) O produto é obrigatório.");
            }

            if (produtoSolicitacao.SolicitacaoBeneficio == null)
            {
                throw new ArgumentException("(CRM) A solicitação de benefício é obrigatória.");
            }

            if (produtoSolicitacao.BeneficioPrograma == null)
            {
                throw new ArgumentException("(CRM) A benefício do programa é obrigatória.");
            }

            if (!produtoSolicitacao.QuantidadeSolicitada.HasValue || produtoSolicitacao.QuantidadeSolicitada.Value <= 0)
            {
                throw new ArgumentException("(CRM) A quantidade solicitada precisa ser maior que zero.");
            }

            if (!produtoSolicitacao.QuantidadeAprovada.HasValue || produtoSolicitacao.QuantidadeAprovada.Value <= 0)
            {
                throw new ArgumentException("(CRM) A quantidade aprovada precisa ser maior que zero.");
            }
        }
        public bool ExisteDuplicidade(ProdutosdaSolicitacao produtoSolicitacao)
        {
            int resultado = 0;

            if (produtoSolicitacao.SolicitacaoBeneficio != null && produtoSolicitacao.Produto != null)
            {
                var lista = RepositoryService.ProdutosdaSolicitacao.ListarPorSolicitacao(produtoSolicitacao.SolicitacaoBeneficio.Id);

                if (produtoSolicitacao.ID.HasValue)
                {
                    lista.RemoveAll(x => x.ID.Value == produtoSolicitacao.ID.Value);
                }

                if (produtoSolicitacao.Fatura == null)
                {
                    resultado = lista.Count(x => x.Produto.Id == produtoSolicitacao.Produto.Id);
                }
                else
                {
                    resultado = lista.Count(x => x.Produto.Id == produtoSolicitacao.Produto.Id && x.Fatura.Id == produtoSolicitacao.Fatura.Id);
                }
            }

            return(resultado == 0 ? false : true);
        }
        public ProdutoEstabelecimento ObterEstabelecimento(ProdutosdaSolicitacao produtoSolicitacao)
        {
            if (produtoSolicitacao.Produto != null)
            {
                return(RepositoryService.ProdutoEstabelecimento.ObterPorProduto(produtoSolicitacao.Produto.Id));
            }

            return(null);
        }
Пример #5
0
 private void ValidaAlteracaoProduto(ProdutosdaSolicitacao produtoSolicitacaoTarget, ProdutosdaSolicitacao produtoSolicitacaoImage)
 {
     if (produtoSolicitacaoTarget.Produto != null && produtoSolicitacaoImage.Produto != null)
     {
         if (produtoSolicitacaoTarget.Produto.Id != produtoSolicitacaoImage.Produto.Id)
         {
             throw new ArgumentException("(CRM) Não é permitido alterar o campo Produto no Produto da Solicitação!");
         }
     }
 }
        public void VerificaStatusDaSolicitacao(ProdutosdaSolicitacao produtosdaSolicitacao, string origem)
        {
            SolicitacaoBeneficio mSolicitacaoBeneficio = RepositoryService.SolicitacaoBeneficio.Retrieve(produtosdaSolicitacao.SolicitacaoBeneficio.Id);

            if ((mSolicitacaoBeneficio.StatusSolicitacao.Value != (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.EmAnalise &&
                 mSolicitacaoBeneficio.StatusSolicitacao.Value != (int)Domain.Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.Criada) &&
                (origem != "" && origem != Enum.Sistemas.RetornaSistema(Enum.Sistemas.Sistema.EMS)))
            {
                throw new ArgumentException("(CRM) Não é Possivel Incluir/Alterar/Excluir Produtos de uma solicitação quando o Status é diferente de Criada/Em Analise.");
            }
        }
        public void AtualizarValoresSolicitacao(ProdutosdaSolicitacao produtoSolicitacao)
        {
            var solicitacaoBeneficio = RepositoryService.SolicitacaoBeneficio.ObterPor(produtoSolicitacao, "itbc_status");

            if (solicitacaoBeneficio.StatusSolicitacao.HasValue)
            {
                if (solicitacaoBeneficio.StatusSolicitacao.Value == (int)Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.Criada ||
                    solicitacaoBeneficio.StatusSolicitacao.Value == (int)Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.EmAnalise)
                {
                    solicitacaoBeneficio.IntegrarNoPlugin = produtoSolicitacao.IntegrarNoPlugin;
                    RepositoryService.SolicitacaoBeneficio.Update(solicitacaoBeneficio);
                }
            }
        }
        public void ValidaQuantidadeMultipla(ProdutosdaSolicitacao produtoSolicitacao, Product produto = null)
        {
            if (produto == null)
            {
                produto = RepositoryService.Produto.Retrieve(produtoSolicitacao.Produto.Id);
            }

            if (produtoSolicitacao.QuantidadeSolicitada.HasValue)
            {
                new ProdutoService(RepositoryService).ValidarQuantidadeMultipla(produto, produtoSolicitacao.QuantidadeSolicitada.Value);
            }

            if (produtoSolicitacao.QuantidadeAprovada.HasValue)
            {
                new ProdutoService(RepositoryService).ValidarQuantidadeMultipla(produto, produtoSolicitacao.QuantidadeAprovada.Value);
            }
        }
        public ProdutosdaSolicitacao Persistir(ProdutosdaSolicitacao objProdutosdaSolicitacao)
        {
            ProdutosdaSolicitacao TmpProdSolicitacao = null;

            if (objProdutosdaSolicitacao.ID.HasValue)
            {
                TmpProdSolicitacao = RepositoryService.ProdutosdaSolicitacao.ObterPor(objProdutosdaSolicitacao.ID.Value);
            }
            //alterado pesquisa pela chave de integração - Sol. José - 14/08/2014

            if (TmpProdSolicitacao != null)
            {
                //Para poder atualizar state posteriormente
                int?stateUpdate       = objProdutosdaSolicitacao.State;
                int?razaoStatusUpdate = objProdutosdaSolicitacao.RazaoStatus;
                objProdutosdaSolicitacao.State       = TmpProdSolicitacao.State;
                objProdutosdaSolicitacao.RazaoStatus = TmpProdSolicitacao.RazaoStatus;

                objProdutosdaSolicitacao.ID = TmpProdSolicitacao.ID;
                RepositoryService.ProdutosdaSolicitacao.Update(objProdutosdaSolicitacao);

                //Retorna o state e razao do update
                objProdutosdaSolicitacao.State       = stateUpdate;
                objProdutosdaSolicitacao.RazaoStatus = razaoStatusUpdate;

                //Se statusCode for diferente do atual altera
                if (objProdutosdaSolicitacao.RazaoStatus.HasValue &&
                    objProdutosdaSolicitacao.State.HasValue &&
                    (!TmpProdSolicitacao.State.Equals(objProdutosdaSolicitacao.State) ||
                     !TmpProdSolicitacao.RazaoStatus.Equals(objProdutosdaSolicitacao.RazaoStatus)))
                {
                    this.MudarStatus(objProdutosdaSolicitacao.ID.Value, objProdutosdaSolicitacao.State.Value, objProdutosdaSolicitacao.RazaoStatus.Value);
                }
                return(TmpProdSolicitacao);
            }
            else
            {
                objProdutosdaSolicitacao.ID = RepositoryService.ProdutosdaSolicitacao.Create(objProdutosdaSolicitacao);
            }
            return(objProdutosdaSolicitacao);
        }
        public void ValidaDadosDaNotaFiscal(ProdutosdaSolicitacao produtoSolicitacao, Product produto)
        {
            if (produtoSolicitacao.Fatura != null && produtoSolicitacao.Produto != null)
            {
                var produtoFatura = RepositoryService.ProdutoFatura.ObterObtemPorNotaFiscal(produtoSolicitacao.Produto.Id, produtoSolicitacao.Fatura.Id);
                var fatura        = RepositoryService.Fatura.Retrieve(produtoSolicitacao.Fatura.Id, "name");

                if (produtoFatura == null)
                {
                    throw new ArgumentException("(CRM) Não encontrado o produto [" + produto.Codigo + "] na nota fiscal [" + fatura.NumeroNF + "]");
                }

                if (produtoSolicitacao.QuantidadeSolicitada.HasValue)
                {
                    if (produtoSolicitacao.QuantidadeSolicitada.Value > produtoFatura.Quantidade.Value)
                    {
                        throw new ArgumentException("(CRM) A quantidade solicitada do produto [" + produto.Codigo + "] é maior que a quantidade da nota fiscal [" + fatura.NumeroNF + "]");
                    }
                }
            }
        }
Пример #11
0
        public T ObterPor(ProdutosdaSolicitacao produtoSolicitacao, params string[] columns)
        {
            var query = GetQueryExpression <T>(true);

            if (columns != null && columns.Length > 0)
            {
                query.ColumnSet.AddColumns(columns);
            }

            query.AddLink("itbc_produtosdasolicitacao", "itbc_solicitacaodebeneficioid", "itbc_solicitacaodebeneficioid");
            query.LinkEntities[0].LinkCriteria.AddCondition("itbc_produtosdasolicitacaoid", ConditionOperator.Equal, produtoSolicitacao.ID.Value);

            var colecao = RetrieveMultiple(query);

            if (colecao.List.Count == 0)
            {
                return(default(T));
            }

            return(colecao.List[0]);
        }
Пример #12
0
        public decimal[] CalculoValorUnitarioETotal(ProdutosdaSolicitacao produtoSolicitacao, RepositoryService repoService)
        {
            decimal[] valoresCalculados = { 0, 0 };
            decimal   valorUnitario     = 0;

            SolicitacaoBeneficio solicBen  = repoService.SolicitacaoBeneficio.Retrieve(produtoSolicitacao.SolicitacaoBeneficio.Id);
            Beneficio            beneficio = repoService.Beneficio.ObterPor(solicBen.BeneficioPrograma.Id);
            Product        produto         = repoService.Produto.Retrieve(produtoSolicitacao.Produto.Id);
            UnidadeNegocio unidadeNegocio  = new UnidadeNegocio(repoService)
            {
                ID = solicBen.UnidadedeNegocio.Id, Nome = solicBen.UnidadedeNegocio.Name
            };
            Conta         conta         = repoService.Conta.Retrieve(solicBen.Canal.Id);
            Classificacao classificacao = new Classificacao(conta.OrganizationName, conta.IsOffline)
            {
                ID = conta.Classificacao.Id, Nome = conta.Classificacao.Name
            };
            Categoria categoria = repoService.Categoria.ObterPor(conta.Categoria.Id);

            if (beneficio.Codigo != (int)Domain.Enum.BeneficiodoPrograma.Codigos.StockRotation)
            {
                Estabelecimento estabelecimento = repoService.Estabelecimento.ObterPor(produtoSolicitacao.Estabelecimento.Id);

                var lstPrecoProduto = new List <PrecoProduto>();
                lstPrecoProduto.Add(new PrecoProduto(repoService.NomeDaOrganizacao, repoService.IsOffline)
                {
                    codEstabelecimento = estabelecimento.Codigo.Value,
                    CodigoProduto      = produto.Codigo,
                    ContaId            = solicBen.Canal.Id,
                    Produto            = produto,
                    TipoCrossSelling   = false,
                    Quantidade         = Convert.ToInt32(produtoSolicitacao.QuantidadeAprovada.Value)
                });

                if (conta.Classificacao.Name != "Revendas")
                {
                    var precoProduto = new ProdutoService(repoService).ListarPor(lstPrecoProduto).First();

                    if (precoProduto == null || precoProduto.ValorProduto <= 0)
                    {
                        throw new ArgumentException("(CRM) Não foi possível calcular o preço do produto [" + produto.Nome + "]. Verifique política comercial");
                    }
                    valorUnitario = precoProduto.ValorProduto;
                }
                else
                {
                    ListaPrecoPSDPPPSCF lstListaPreco = repoService.ListaPrecoPSD.ObterPor(conta.Endereco1Estadoid.Id, produto.UnidadeNegocio.Id);
                    if (lstListaPreco == null)
                    {
                        throw new ArgumentException("(CRM) Não foi possível encontrar uma Lista de Preço(PSD) para o Estado [" + conta.Endereco1Estadoid.Name + "] e Unidade de Negócio [" + produto.UnidadeNegocio.Name + "]");
                    }
                    var precoProduto = repoService.ProdutoListaPSD.ListarPor(lstListaPreco.ID.Value, produto.ID).First();
                    if (precoProduto == null || precoProduto.ValorPSD <= 0)
                    {
                        throw new ArgumentException("(CRM) Não foi possível calcular o preço do produto [" + produto.Nome + "]. Verifique a Lista PSD para o Estado [" + conta.Endereco1Estadoid.Name + "]");
                    }
                    valorUnitario = precoProduto.ValorPSD.Value;
                }
            }
            else
            {
                ProdutoFatura prodFatura = repoService.ProdutoFatura.ObterObtemPorNotaFiscal(produtoSolicitacao.Produto.Id, produtoSolicitacao.Fatura.Id);

                if (prodFatura != null)
                {
                    valorUnitario = prodFatura.ValorLiquido.Value;
                }
                else
                {
                    throw new ArgumentException("(CRM) Produto não localizado na nota fiscal informada.");
                }
            }

            valorUnitario        = CalcularDescontoValorSolicitado(valorUnitario, beneficio, unidadeNegocio, classificacao, categoria, repoService);
            valorUnitario        = decimal.Round(valorUnitario, 2);
            valoresCalculados[0] = valorUnitario;
            valoresCalculados[1] = valorUnitario * produtoSolicitacao.QuantidadeAprovada.Value;

            return(valoresCalculados);
        }
Пример #13
0
        private List <ProdutosdaSolicitacao> DefinirPropriedadesItens(List <Pollux.Entities.ProdutoSolicitacaoItem> listSolicitacaoItens, string origem, Guid?solicitacaoID)
        {
            List <ProdutosdaSolicitacao> lstRetorno = new List <ProdutosdaSolicitacao>();

            #region Lista ProdutoSoliciatacao
            foreach (var itemPollux in listSolicitacaoItens.Where(x => x.Situacao == (int)Enum.ProdutoSolicitacao.Status.Ativo))
            {
                ProdutosdaSolicitacao produtoSolicitacao = new ProdutosdaSolicitacao(this.Organizacao, this.IsOffline);

                if (!String.IsNullOrEmpty(itemPollux.CodigoProduto))
                {
                    Product produto = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).BuscaPorCodigo(itemPollux.CodigoProduto);
                    if (produto != null)
                    {
                        produtoSolicitacao.Produto = new Lookup(produto.ID.Value, "");
                    }
                    else
                    {
                        resultadoPersistencia.Sucesso  = false;
                        resultadoPersistencia.Mensagem = "Produto não cadastrado no Crm!";
                        return(null);
                    }
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoProduto não enviado.";
                    return(null);
                }

                #region SETA ORIGEM PARA REGRA DE NEGOCIO ESPECIFICA (2)
                if (!string.IsNullOrEmpty(origem))
                {
                    produtoSolicitacao.IntegradoDe = origem;
                }
                else
                {
                    produtoSolicitacao.AddNullProperty("IntegradoDe");
                }
                #endregion

                if (!String.IsNullOrEmpty(itemPollux.CodigoBeneficio) && itemPollux.CodigoBeneficio.Length == 36)
                {
                    Beneficio beneficio = new Servicos.BeneficioService(this.Organizacao, this.IsOffline).ObterPor(new Guid(itemPollux.CodigoBeneficio));
                    if (beneficio != null)
                    {
                        produtoSolicitacao.BeneficioPrograma = new Lookup(beneficio.ID.Value, "");
                    }
                    else
                    {
                        resultadoPersistencia.Sucesso  = false;
                        resultadoPersistencia.Mensagem = "CodigoBeneficio do ProdutoSolicitacao : " + itemPollux.CodigoBeneficio + " - não cadastrado no Crm.";
                        return(null);
                    }
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "CodigoBeneficio não Enviado ou fora do padrão(Guid).";
                    return(null);
                }
                if (solicitacaoID.HasValue)
                {
                    produtoSolicitacao.SolicitacaoBeneficio = new Lookup(solicitacaoID.Value, "");
                }

                produtoSolicitacao.ValorUnitario = itemPollux.ValorUnitario;
                produtoSolicitacao.ValorTotal    = itemPollux.ValorTotal;
                if (!String.IsNullOrEmpty(itemPollux.ChaveIntegracaoNotaFiscal))
                {
                    Fatura fatura = new Servicos.FaturaService(this.Organizacao, this.IsOffline).ObterPorChaveIntergacao(itemPollux.ChaveIntegracaoNotaFiscal);
                    if (fatura != null)
                    {
                        produtoSolicitacao.Fatura = new Lookup(fatura.ID.Value, "");
                    }
                    else
                    {
                        resultadoPersistencia.Sucesso  = false;
                        resultadoPersistencia.Mensagem = "Fatura referente ChaveIntegracaoNotaFiscal: " + itemPollux.ChaveIntegracaoNotaFiscal + " - não cadastrado no Crm.";
                        return(null);
                    }
                }

                if (itemPollux.QuantidadeAprovado.HasValue)
                {
                    produtoSolicitacao.QuantidadeAprovada = itemPollux.QuantidadeAprovado;
                }
                else
                {
                    produtoSolicitacao.AddNullProperty("QuantidadeAprovada");
                }

                if (itemPollux.ValorUnitarioAprovado.HasValue)
                {
                    produtoSolicitacao.ValorUnitarioAprovado = itemPollux.ValorUnitarioAprovado;
                }
                else
                {
                    produtoSolicitacao.AddNullProperty("ValorUnitarioAprovado");
                }

                if (itemPollux.ValorTotalAprovado.HasValue)
                {
                    produtoSolicitacao.ValorTotalAprovado = itemPollux.ValorTotalAprovado;
                }
                else
                {
                    produtoSolicitacao.AddNullProperty("ValorTotalAprovado");
                }

                produtoSolicitacao.QuantidadeSolicitada = itemPollux.Quantidade;
                //Novos campos

                if (!String.IsNullOrEmpty(itemPollux.CodigoProdutoSolicitacao))
                {
                    produtoSolicitacao.ID = new Guid(itemPollux.CodigoProdutoSolicitacao);
                }

                produtoSolicitacao.Acao = itemPollux.Acao;

                Estabelecimento estabelecimento = new Servicos.EstabelecimentoService(this.Organizacao, this.IsOffline).BuscaEstabelecimentoPorCodigo(itemPollux.CodigoEstabelecimento.Value);

                if (estabelecimento != null)
                {
                    produtoSolicitacao.Estabelecimento = new Lookup(estabelecimento.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Estabelecimento codigo : " + itemPollux.CodigoEstabelecimento.ToString() + " - não cadastrado no Crm.";
                    return(null);
                }

                if (itemPollux.Situacao.HasValue)
                {
                    produtoSolicitacao.State = itemPollux.Situacao.Value;
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Situacao não informado favor verificar integração.";
                    return(null);
                }

                if (itemPollux.QuantidadeCancelada.HasValue)
                {
                    produtoSolicitacao.QuantidadeCancelada = itemPollux.QuantidadeCancelada.Value;
                }

                if (itemPollux.ValorPago.HasValue)
                {
                    produtoSolicitacao.ValorPago = itemPollux.ValorPago.Value;
                }

                if (itemPollux.ValorCancelado.HasValue)
                {
                    produtoSolicitacao.ValorCancelado = itemPollux.ValorCancelado.Value;
                }

                if (itemPollux.QuantidadeAjustada.HasValue)
                {
                    produtoSolicitacao.QuantidadeAjustada = itemPollux.QuantidadeAjustada.Value;
                }

                lstRetorno.Add(produtoSolicitacao);
            }
            #endregion

            return(lstRetorno);
        }
Пример #14
0
        private void AtualizaValores(ProdutosdaSolicitacaoService produtosdaSolicitacaoService, RepositoryService repoService, ref ProdutosdaSolicitacao produtosdaSolicitacao, ref Entity e)
        {
            if (e.Attributes.Contains("itbc_faturaid") || e.Attributes.Contains("itbc_qtdaprovada") || e.Attributes.Contains("itbc_productid"))
            {
                decimal[] valoresCalculados = CalculoValorUnitarioETotal(produtosdaSolicitacao, repoService);
                if (valoresCalculados != null)
                {
                    var solicBenef = repoService.SolicitacaoBeneficio.Retrieve(produtosdaSolicitacao.SolicitacaoBeneficio.Id);

                    if (solicBenef.TipoPriceProtection == null || solicBenef.TipoPriceProtection != (int)Intelbras.CRM2013.Domain.Enum.SolicitacaoBeneficio.TipoPriceProtection.Autorizacao)
                    {
                        e.Attributes["itbc_valorunitario"]         = new Money(valoresCalculados[0]);
                        e.Attributes["itbc_valortotal"]            = new Money(valoresCalculados[1]);
                        e.Attributes["itbc_valorunitarioaprovado"] = new Money(valoresCalculados[0]);
                        e.Attributes["itbc_valortotalaprovado"]    = new Money(valoresCalculados[1]);

                        produtosdaSolicitacao.ValorUnitario         = valoresCalculados[0];
                        produtosdaSolicitacao.ValorUnitarioAprovado = valoresCalculados[0];
                        produtosdaSolicitacao.ValorTotal            = valoresCalculados[1];
                        produtosdaSolicitacao.ValorTotalAprovado    = valoresCalculados[1];
                    }
                }
            }
        }
Пример #15
0
        private void AtualizaEstabelecimento(ProdutosdaSolicitacaoService produtosdaSolicitacaoService, ref ProdutosdaSolicitacao produtosdaSolicitacao, ref Entity e)
        {
            if (!e.Attributes.Contains("itbc_estabelecimentoid"))
            {
                var produtoEstabelecimento = produtosdaSolicitacaoService.ObterEstabelecimento(produtosdaSolicitacao);

                if (produtoEstabelecimento == null || produtoEstabelecimento.Estabelecimento == null)
                {
                    throw new ArgumentException("(CRM) Estabelecimento não encontrado para o produto:  " + produtosdaSolicitacao.Nome + ".");
                }

                e.Attributes.Add("itbc_estabelecimentoid", new EntityReference("itbc_estabelecimento", produtoEstabelecimento.Estabelecimento.Id));
                produtosdaSolicitacao.Estabelecimento = produtoEstabelecimento.Estabelecimento;
            }
        }
        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.");
                    }
                }
            }
        }
Пример #17
0
 private void ValidarDuplicidade(ProdutosdaSolicitacaoService produtosdaSolicitacaoService, ProdutosdaSolicitacao produtosdaSolicitacao)
 {
     if (produtosdaSolicitacaoService.ExisteDuplicidade(produtosdaSolicitacao))
     {
         throw new ArgumentException("(CRM) O Produto da Solicitação [" + produtosdaSolicitacao.Nome
                                     + "] está duplicado, não pode haver mais de um Produto da Solicitação com o mesmo produto e nota fiscal.");
     }
 }
        public void ValidaIntegridadeDados(ProdutosdaSolicitacao produtoSolicitacao, out ProdutoPortfolio produtoPortfolio)
        {
            produtoPortfolio = null;
            var solicitacaoBeneficio = RepositoryService.SolicitacaoBeneficio.Retrieve(produtoSolicitacao.SolicitacaoBeneficio.Id);
            var beneficio            = RepositoryService.Beneficio.ObterPor(produtoSolicitacao.BeneficioPrograma.Id);
            var produto = RepositoryService.Produto.Retrieve(produtoSolicitacao.Produto.Id);
            var canal   = RepositoryService.Conta.Retrieve(solicitacaoBeneficio.Canal.Id);

            if (solicitacaoBeneficio.UnidadedeNegocio.Id != produto.UnidadeNegocio.Id && solicitacaoBeneficio.UnidadedeNegocio.Name != "ADMINISTRATIVO" && canal.Classificacao.Name != "Revendas")
            {
                throw new ArgumentException("(CRM) Não é permitido incluir produto em uma solicitação quando a unidade de negócio é diferente! Produto: [" + produto.Codigo + "]");
            }

            if (solicitacaoBeneficio.AjusteSaldo.HasValue && solicitacaoBeneficio.AjusteSaldo.Value)
            {
                if (beneficio.Codigo.Value == (int)Enum.BeneficiodoPrograma.Codigos.PriceProtection)
                {
                    if (!solicitacaoBeneficio.TipoPriceProtection.HasValue ||
                        (solicitacaoBeneficio.TipoPriceProtection.HasValue && solicitacaoBeneficio.TipoPriceProtection.Value != (int)Enum.BeneficiodoPrograma.TipoPriceProtection.Autorizacao))
                    {
                        throw new ArgumentException("(CRM) Não é permitido incluir produtos em uma solicitação de ajuste! Produto: [" + produto.Codigo + "]");
                    }
                }
                else
                {
                    throw new ArgumentException("(CRM) Não é permitido incluir produtos em uma solicitação de ajuste! Produto: [" + produto.Codigo + "]");
                }
            }



            if (solicitacaoBeneficio.FormaPagamento != null)
            {
                if (solicitacaoBeneficio.FormaPagamento.Name != Enum.SolicitacaoBeneficio.FormaPagamento.Produto)
                {
                    throw new ArgumentException("(CRM) Não é permitido incluir produtos em uma solicitação com forma de pagamento diferente de produto! Produto: [" + produto.Codigo + "]");
                }
            }

            switch (beneficio.Codigo.Value)
            {
            case (int)Enum.BeneficiodoPrograma.Codigos.Showroom:

                if (canal.Classificacao.Name.Contains("Distribuidor"))
                {
                    if (!produto.Showroom.HasValue || !produto.Showroom.Value)
                    {
                        throw new ArgumentException("(CRM) Produto informado não pode ser adquirido para Show Room. Produto: [" + produto.Codigo + "]");
                    }
                }
                else if (canal.Classificacao.Name == "Revendas")
                {
                    if (!produto.ShowroomRevenda.HasValue || !produto.ShowroomRevenda.Value)
                    {
                        throw new ArgumentException("(CRM) Produto informado não pode ser adquirido para Show Room. Produto: [" + produto.Codigo + "]");
                    }
                }
                break;

            case (int)Enum.BeneficiodoPrograma.Codigos.StockRotation:
                if (produtoSolicitacao.Fatura == null)
                {
                    throw new ArgumentException("(CRM) Nota fiscal não informada. Produto: [" + produto.Codigo + "]");
                }

                ValidaDadosDaNotaFiscal(produtoSolicitacao, produto);
                break;

            case (int)Enum.BeneficiodoPrograma.Codigos.Backup:

                if (canal.Classificacao.Name.Contains("Distribuidor"))
                {
                    if (!produto.BackupDistribuidor.HasValue || !produto.BackupDistribuidor.Value)
                    {
                        throw new ArgumentException("(CRM) Produto informado não pode ser adquirido para Backup. Produto: [" + produto.Codigo + "]");
                    }
                }
                else if (canal.Classificacao.Name == "Revendas")
                {
                    if (!produto.BackupRevenda.HasValue || !produto.BackupRevenda.Value)
                    {
                        throw new ArgumentException("(CRM) Produto informado não pode ser adquirido para Backup. Produto: [" + produto.Codigo + "]");
                    }
                }
                break;

            default:
                produtoPortfolio = ObterProdutoPortforlio(solicitacaoBeneficio, produto.ID.Value);

                if (produtoPortfolio == null)
                {
                    throw new ArgumentException("(CRM) Produto [" + produto.Codigo + "] informado não pertence ao portfólio do cliente.");
                }

                if (beneficio.Codigo.Value != (int)Enum.BeneficiodoPrograma.Codigos.PriceProtection &&
                    beneficio.Codigo.Value != (int)Enum.BeneficiodoPrograma.Codigos.Backup)
                {
                    if (canal.Classificacao.Name != "Revendas")
                    {
                        ValidaQuantidadeMultipla(produtoSolicitacao, produto);
                    }
                }
                break;
            }
        }