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); }
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 + "]"); } } } }
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]); }
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); }
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); }
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]; } } } }
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."); } } } }
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; } }