Esempio n. 1
0
        public int CargaSellOutProdutos()
        {
            int    pagina               = 1;
            int    contagem             = 500;
            bool   moreRecords          = true;
            int    registrosAtualizados = 0;
            string usuario              = SDKore.Configuration.ConfigurationManager.GetSettingValue("SellOutCRMWSUser");
            string senha = SDKore.Configuration.ConfigurationManager.GetSettingValue("SellOutCRMWSPasswd");

            while (moreRecords)
            {
                try
                {
                    List <Model.Product> lstProduto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(this.Organizacao, this.IsOffline).ListarTodosProdutos(ref pagina, contagem, out moreRecords);

                    foreach (var item in lstProduto)
                    {
                        string xml;
                        bool   resultado;
                        string resposta;

                        XDocument xmlroot = new XDocument(
                            new XDeclaration("1.0", "utf-8", "no"),
                            new XElement("Produto",
                                         new XElement("Idprodutocrm", item.ID),
                                         new XElement("Idprodutoerp", item.Codigo),
                                         new XElement("Statuscode", item.RazaoStatus),
                                         new XElement("Statecode", item.Status)
                                         ));

                        xml = xmlroot.Declaration.ToString() + Environment.NewLine + xmlroot.ToString();;

                        resultado = new Domain.Servicos.SellOutService(this.Organizacao,
                                                                       this.IsOffline).PersistirProdutoSellOut(usuario, senha, xml, out resposta);

                        if (resultado == false)
                        {
                            throw new ArgumentException(resposta);
                        }
                        registrosAtualizados++;
                    }
                }
                catch (TimeoutException e)
                {
                    continue;
                }
            }
            return(registrosAtualizados);
        }
Esempio n. 2
0
        private List <Pollux.Entities.ProdutoItem> ConverteLista(List <ProdutoEstabelecimento> LstRegistrosCrm)
        {
            List <Pollux.Entities.ProdutoItem> lstPollux = new List <Pollux.Entities.ProdutoItem>();

            foreach (ProdutoEstabelecimento item in LstRegistrosCrm)
            {
                Pollux.Entities.ProdutoItem Objeto = new Pollux.Entities.ProdutoItem();

                Objeto.CodigoEstabelecimento = codigoEstabelecimento;
                Objeto.NomeEstabelecimento   = item.Estabelecimento.Name;

                Product objProduto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(this.Organizacao, this.IsOffline).ObterPor(item.Produto.Id);

                Objeto.CodigoProduto = objProduto.Codigo;
                Objeto.NomeProduto   = objProduto.Nome;

                lstPollux.Add(Objeto);
            }

            return(lstPollux);
        }
Esempio n. 3
0
        public ItemListaPreco DefinirPropriedades(Intelbras.Message.Helper.MSG0082 xml)
        {
            var crm = new ItemListaPreco(this.Organizacao, this.IsOffline);

            #region Propriedades Crm->Xml

            if (!String.IsNullOrEmpty(xml.CodigoItemListaPreco))
            {
                crm.ID = new Guid(xml.CodigoItemListaPreco);
            }

            if (!String.IsNullOrEmpty(xml.Produto))
            {
                Product produto = new Product(this.Organizacao, this.IsOffline);
                produto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(this.Organizacao, this.IsOffline).BuscaPorCodigo(xml.Produto);
                if (produto != null)
                {
                    crm.ProdutoID = new Lookup(produto.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Produto não encontrado.";
                    return(crm);
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Produto não enviado.";
                return(crm);
            }


            if (!String.IsNullOrEmpty(xml.ListaPreco))
            {
                Model.ListaPreco listaPreco = new Model.ListaPreco(this.Organizacao, this.IsOffline);
                listaPreco = new Intelbras.CRM2013.Domain.Servicos.ListaPrecoService(this.Organizacao, this.IsOffline).BuscaListaPreco(xml.ListaPreco);

                if (listaPreco != null && listaPreco.ID.HasValue)
                {
                    crm.ListaPrecos = new Lookup(listaPreco.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "ListaPreco não encontrado.";
                    return(crm);
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "ListaPreco não enviada.";
                return(crm);
            }

            crm.Valor = xml.Valor;

            crm.Porcentual = xml.Porcentagem;

            if (!String.IsNullOrEmpty(xml.ListaDesconto))
            {
                ListaDesconto listaDesconto = new ListaDesconto(this.Organizacao, this.IsOffline);
                listaDesconto = new Intelbras.CRM2013.Domain.Servicos.ListaDescontoService(this.Organizacao, this.IsOffline).BuscaListaDesconto(xml.ListaDesconto);

                if (listaDesconto != null)
                {
                    crm.ListaDesconto = new Lookup(listaDesconto.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Lista Desconto não encontrada.";
                    return(crm);
                }
            }
            else
            {
                crm.AddNullProperty("ListaDesconto");
            }

            crm.MetodoPrecificacao = xml.MetodoPrecificacao;

            crm.OpcaoVendaParcial = xml.OpcaoVendaParcial;

            crm.ValorArredondamento = xml.ValorArredondamento;

            crm.OpcaoArredondamento = xml.OpcaoArredondamento;

            crm.PoliticaArredondamento = xml.PoliticaArredondamento;

            if (!String.IsNullOrEmpty(xml.Moeda))
            {
                Model.Moeda moeda = new Model.Moeda(this.Organizacao, this.IsOffline);
                moeda = new Intelbras.CRM2013.Domain.Servicos.MoedaService(this.Organizacao, this.IsOffline).BuscaMoedaPorNome(xml.Moeda);

                if (moeda != null && moeda.ID.HasValue)
                {
                    crm.Moeda = new Lookup(moeda.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Moeda não encontrada!";
                    return(crm);
                }
            }


            if (!String.IsNullOrEmpty(xml.UnidadeMedida))
            {
                Unidade unidade = new Unidade(this.Organizacao, this.IsOffline);
                unidade = new Intelbras.CRM2013.Domain.Servicos.UnidadeService(this.Organizacao, this.IsOffline).BuscaUnidadePorNome(xml.UnidadeMedida);
                if (unidade != null)
                {
                    crm.Unidade = new Lookup(unidade.ID.Value, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "UnidadeMedida não encontrada.";
                    return(crm);
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "UnidadeMedida não enviada.";
                return(crm);
            }
            //Entidade não tem ownerid
            //crm.Proprietario = new SDKore.DomainModel.Lookup((Guid)usuarioIntegracao.ID, "systemuser");
            //crm.IntegradoEm = DateTime.Now;
            //crm.IntegradoPor = usuarioIntegracao.NomeCompleto;
            //crm.UsuarioIntegracao = xml.LoginUsuario;


            #endregion

            return(crm);
        }
Esempio n. 4
0
        public string Executar(string mensagem, string numeroMensagem, Domain.Model.Usuario usuario)
        {
            //Trace.Add("Mensagem " + numeroMensagem + " XML: {0}", mensagem);
            usuarioIntegracao = usuario;
            Estado         estado        = null;
            Moeda          moeda         = null;
            UnidadeNegocio undadeNegocio = null;
            Guid?          produtoId     = null;

            Intelbras.Message.Helper.MSG0086 xml = this.CarregarMensagem <Pollux.MSG0086>(mensagem);
            #region Validações
            //Estado
            if (!String.IsNullOrEmpty(xml.Estado))
            {
                estado = new Servicos.EstadoServices(this.Organizacao, this.IsOffline).BuscaEstado(xml.Estado);
                if (estado == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Estado: " + xml.Estado + " não encontrado no Crm.";
                    retorno.Add("Resultado", resultadoPersistencia);
                    return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Estado obrigatório";
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
            }
            //Unidade de Negocio
            if (!String.IsNullOrEmpty(xml.CodigoUnidadeNegocio))
            {
                undadeNegocio = new Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocioPorChaveIntegracao(xml.CodigoUnidadeNegocio);
                if (undadeNegocio == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "UnidadeNegocio: " + xml.CodigoUnidadeNegocio + " não encontrado no Crm.";
                    retorno.Add("Resultado", resultadoPersistencia);
                    return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "CodigoUnidadeNegocio não enviado ou fora do padrão(Guid).";
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
            }

            //Moeda


            if (!String.IsNullOrEmpty(xml.Moeda))
            {
                moeda = new Servicos.MoedaService(this.Organizacao, this.IsOffline).BuscaMoedaPorNome(xml.Moeda);
                if (moeda == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Moeda: " + xml.Moeda + " não encontrada no Crm.";
                    retorno.Add("Resultado", resultadoPersistencia);
                    return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
                }
            }
            else
            {
                resultadoPersistencia.Sucesso  = false;
                resultadoPersistencia.Mensagem = "Moeda não enviado ou fora do padrão(Guid).";
                retorno.Add("Resultado", resultadoPersistencia);
                return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
            }

            //Produto - não obrigatório
            if (!String.IsNullOrEmpty(xml.CodigoProduto))
            {
                Product produto = new Servicos.ProdutoService(this.Organizacao, this.IsOffline).BuscaPorCodigo(xml.CodigoProduto);
                if (produto == null)
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Produto código: " + xml.CodigoProduto + " não encontrado no Crm.";
                    retorno.Add("Resultado", resultadoPersistencia);
                    return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
                }
                else
                {
                    produtoId = produto.ID.Value;
                }
            }
            #endregion

            List <Intelbras.Message.Helper.Entities.ProdutoR1> lsTProdutos = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(this.Organizacao, this.IsOffline).ListarPSDPPPSCF(undadeNegocio.ID.Value, moeda.ID.Value, estado.ID.Value, produtoId);

            if (lsTProdutos != null && lsTProdutos.Count > 0)
            {
                retorno.Add("ProdutosItens", lsTProdutos);
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Integração ocorrida com sucesso.";
            }
            else
            {
                resultadoPersistencia.Sucesso  = true;
                resultadoPersistencia.Mensagem = "Não foram encontrados registros que satisfaçam os critérios de pesquisa.";
            }
            retorno.Add("Resultado", resultadoPersistencia);

            return(CriarMensagemRetorno <Pollux.MSG0086R1>(numeroMensagem, retorno));
        }
Esempio n. 5
0
        private void DefinirPropriedadesProdutoFatura(Intelbras.Message.Helper.MSG0094 xml, Guid FaturaID)
        {
            ProdutoFatura crmProdFatura = null;

            foreach (Pollux.Entities.NotaFiscalItem item in xml.NotaFiscalItens)
            {
                crmProdFatura = new ProdutoFatura(this.Organizacao, this.IsOffline);

                crmProdFatura.ChaveIntegracao = item.ChaveIntegracao;
                crmProdFatura.Fatura          = new Lookup(FaturaID, "");

                if (!String.IsNullOrEmpty(item.CodigoProduto))
                {
                    Model.Product ObjProduto = new Product(this.Organizacao, this.IsOffline);
                    ObjProduto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(this.Organizacao, this.IsOffline).BuscaPorCodigo(item.CodigoProduto);

                    if (ObjProduto != null && ObjProduto.ID.HasValue)
                    {
                        crmProdFatura.ProdutoId = new Lookup(ObjProduto.ID.Value, "");
                    }
                    else
                    {
                        resultadoPersistencia.Sucesso  = false;
                        resultadoPersistencia.Mensagem = "Identificador do Produto não encontrado.";
                        return;
                    }
                }

                if (!String.IsNullOrEmpty(item.Descricao))
                {
                    crmProdFatura.Descricao = item.Descricao;
                }
                else
                {
                    crmProdFatura.AddNullProperty("Descricao");
                }

                crmProdFatura.PrecoOriginal           = item.PrecoOriginal;
                crmProdFatura.ValorLiquido            = item.PrecoUnitario;
                crmProdFatura.PrecoLiquido            = item.PrecoLiquido;
                crmProdFatura.ValorMercadoriaTabela   = item.ValorMercadoriaTabela;
                crmProdFatura.ValorMercadoriaOriginal = item.ValorMercadoriaOriginal;
                crmProdFatura.ValorMercadoriaLiquida  = item.ValorMercadoriaLiquido;
                crmProdFatura.Precificacao            = item.PermiteSubstituirPreco;

                //Service Natureza Operação
                NaturezaOperacao ObjNaturezaOperacao = new Intelbras.CRM2013.Domain.Servicos.NaturezaOperacaoService(this.Organizacao, this.IsOffline).BuscaNaturezaOperacaoPorCodigo(item.CodigoNaturezaOperacao);

                if (ObjNaturezaOperacao != null)
                {
                    crmProdFatura.NaturezaOperacao = new Lookup((Guid)ObjNaturezaOperacao.ID, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador da Natureza de Operação não encontrado.";
                    return;
                }

                crmProdFatura.SelecionarProduto = item.ProdutoForaCatalogo;

                if (!String.IsNullOrEmpty(item.DescricaoProdutoForaCatalogo))
                {
                    crmProdFatura.DescricaoProdutoSemCatalogo = item.DescricaoProdutoForaCatalogo;
                }
                else
                {
                    crmProdFatura.AddNullProperty("DescricaoProdutoSemCatalogo");
                }

                crmProdFatura.Precificacao = item.PermiteSubstituirPreco;

                //Service Unidade Medida
                Unidade ObjUnidadeMedida = new Intelbras.CRM2013.Domain.Servicos.UnidadeService(this.Organizacao, this.IsOffline).BuscaUnidadePorNome(item.UnidadeMedida);

                if (ObjUnidadeMedida != null)
                {
                    crmProdFatura.Unidade = new Lookup((Guid)ObjUnidadeMedida.ID, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador da Unidade de Medida não encontrado.";
                    return;
                }

                if (item.ValorBaseICMS.HasValue)
                {
                    crmProdFatura.ValorBaseICMS = item.ValorBaseICMS;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorBaseICMS");
                }

                if (item.ValorBaseICMSSubstituicao.HasValue)
                {
                    crmProdFatura.ValorSubstTributaria = item.ValorBaseICMSSubstituicao;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorSubstTributaria");
                }

                if (item.ValorICMS.HasValue)
                {
                    crmProdFatura.ValorICMSItem = item.ValorICMS;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorICMSItem");
                }

                if (item.ValorICMSSubstituicao.HasValue)
                {
                    crmProdFatura.ValorICMSSubstTributaria = item.ValorICMSSubstituicao;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorICMSSubstTributaria");
                }

                if (item.ValorICMSNaoTributado.HasValue)
                {
                    crmProdFatura.ValorICMSNaoTributado = item.ValorICMSNaoTributado;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorICMSNaoTributado");
                }

                if (item.ValorICMSOutras.HasValue)
                {
                    crmProdFatura.ValorICMSOutras = item.ValorICMSOutras;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorICMSOutras");
                }

                crmProdFatura.CodigoTributarioICMS = item.CodigoTributarioICMS;

                if (!String.IsNullOrEmpty(item.CodigoTributarioISS))
                {
                    crmProdFatura.CodigoTributarioISS = item.CodigoTributarioISS;
                }
                else
                {
                    crmProdFatura.AddNullProperty("CodigoTributarioISS");
                }

                crmProdFatura.CodigoTributarioIPI = item.CodigoTributarioIPI;

                if (item.ValorBaseIPI.HasValue)
                {
                    crmProdFatura.ValorBaseIPI = item.ValorBaseIPI;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorBaseIPI");
                }

                if (item.AliquotaISS.HasValue)
                {
                    crmProdFatura.AliquotaISS = (double)item.AliquotaISS;
                }
                else
                {
                    crmProdFatura.AddNullProperty("AliquotaISS");
                }

                crmProdFatura.CodigoTributarioIPI  = item.CodigoTributarioIPI;
                crmProdFatura.ValorBaseISS         = item.ValorBaseISS;
                crmProdFatura.AliquotaIPI          = (double)item.AliquotaIPI;
                crmProdFatura.AliquotaICMS         = (double)item.AliquotaICMS;
                crmProdFatura.ValorISSItem         = item.ValorISS;
                crmProdFatura.ValorISSNaoTributado = item.ValorISSNaoTributado;
                crmProdFatura.ValorISSOutras       = item.ValorISSOutras;

                crmProdFatura.CalcularRebate = item.CalcularRebate;

                if (item.ValorIPI.HasValue)
                {
                    crmProdFatura.ValorIPIItem = item.ValorIPI;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorIPIItem");
                }

                if (item.ValorIPINaoTributado.HasValue)
                {
                    crmProdFatura.ValorIPINaoTributado = item.ValorIPINaoTributado;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorIPINaoTributado");
                }

                if (item.ValorIPIOutras.HasValue)
                {
                    crmProdFatura.ValorIPIOutras = item.ValorIPIOutras;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorIPIOutras");
                }

                if (item.PrecoConsumidor.HasValue)
                {
                    crmProdFatura.PrecoConsumidor = item.PrecoConsumidor;
                }
                else
                {
                    crmProdFatura.AddNullProperty("PrecoConsumidor");
                }

                if (item.QuantidadeCancelada.HasValue)
                {
                    crmProdFatura.QtdeCancelada = item.QuantidadeCancelada;
                }
                else
                {
                    crmProdFatura.AddNullProperty("QtdeCancelada");
                }

                if (item.QuantidadePendente.HasValue)
                {
                    crmProdFatura.QtdePedidoPendente = item.QuantidadePendente;
                }
                else
                {
                    crmProdFatura.AddNullProperty("QtdePedidoPendente");
                }

                if (item.DataEntrega.HasValue)
                {
                    crmProdFatura.Entregueem = item.DataEntrega;
                }
                else
                {
                    crmProdFatura.AddNullProperty("Entregueem");
                }

                if (item.CondicaoFrete.HasValue)
                {
                    crmProdFatura.CondicoesFrete = item.CondicaoFrete;
                }
                else
                {
                    crmProdFatura.AddNullProperty("CondicoesFrete");
                }

                if (item.CalcularRebate.HasValue)
                {
                    //TODO: Registrar valor de CalcularRebate no Item da nota
                }

                if (item.ValorOriginal.HasValue)
                {
                    crmProdFatura.ValorOriginal = item.ValorOriginal;
                }
                else
                {
                    crmProdFatura.AddNullProperty("ValorOriginal");
                }

                crmProdFatura.TotalImpostos  = item.ValorTotalImposto;
                crmProdFatura.DescontoManual = item.ValorDescontoManual;
                crmProdFatura.Quantidade     = item.Quantidade;
                crmProdFatura.Remessa        = item.RetiraNoLocal;

                if (item.QuantidadeEntregue.HasValue)
                {
                    crmProdFatura.QtdeEntregue = item.QuantidadeEntregue;
                }
                else
                {
                    crmProdFatura.AddNullProperty("QtdeEntregue");
                }

                if (item.NumeroSequencia.HasValue)
                {
                    crmProdFatura.NumeroSequencia = item.NumeroSequencia;
                }
                else
                {
                    crmProdFatura.AddNullProperty("NumeroSequencia");
                }

                //Service Unidade Negócio
                UnidadeNegocio ObjUnidadeNegocio = new Intelbras.CRM2013.Domain.Servicos.UnidadeNegocioService(this.Organizacao, this.IsOffline).BuscaUnidadeNegocioPorChaveIntegracao(item.CodigoUnidadeNegocio);

                if (ObjUnidadeNegocio != null)
                {
                    crmProdFatura.UnidadeNegocio = new Lookup((Guid)ObjUnidadeNegocio.ID, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador da Unidade de Negócio não encontrado.";
                    return;
                }

                #region Representante

                crmProdFatura.IntegradoRepresentanteComErro = false;
                crmProdFatura.RepresentanteOriginal         = item.CodigoRepresentante.ToString();

                Contato ObjRepresentante = new Intelbras.CRM2013.Domain.Servicos.ContatoService(this.Organizacao, this.IsOffline)
                                           .BuscaContatoPorCodigoRepresentante(item.CodigoRepresentante.ToString());

                if (ObjRepresentante != null)
                {
                    crmProdFatura.Representante = new Lookup(ObjRepresentante.ID.Value, "");
                }
                else
                {
                    crmProdFatura.IntegradoRepresentanteComErro = true;
                    crmProdFatura.Representante = new Lookup(ObterRepresentatePadrao(), string.Empty);
                }

                #endregion

                //Service Moeda
                Moeda ObjMoeda = new Intelbras.CRM2013.Domain.Servicos.MoedaService(this.Organizacao, this.IsOffline).BuscaMoedaPorCodigo(xml.Moeda);

                if (ObjMoeda != null)
                {
                    crmProdFatura.Moeda = new Lookup((Guid)ObjMoeda.ID, "");
                }
                else
                {
                    resultadoPersistencia.Sucesso  = false;
                    resultadoPersistencia.Mensagem = "Identificador da Moeda não encontrado.";
                    return;
                }

                crmProdFatura.RazaoStatus = 1;

                string acaoItemFatura = item.Acao;

                if (!string.IsNullOrEmpty(item.EnderecoEntrega.NomeEndereco))
                {
                    crmProdFatura.NomeEntrega = item.EnderecoEntrega.NomeEndereco;
                }
                else
                {
                    crmProdFatura.AddNullProperty("NomeEntrega");
                }

                crmProdFatura.CEPEntrega  = item.EnderecoEntrega.CEP;
                crmProdFatura.Rua1Entrega = item.EnderecoEntrega.Logradouro;

                if (!string.IsNullOrEmpty(item.EnderecoEntrega.Complemento))
                {
                    crmProdFatura.Rua2Entrega = item.EnderecoEntrega.Complemento;
                }
                else
                {
                    crmProdFatura.AddNullProperty("Rua2Entrega");
                }

                crmProdFatura.Rua3Entrega   = item.EnderecoEntrega.Bairro;
                crmProdFatura.CidadeEntrega = item.EnderecoEntrega.NomeCidade;

                if (!String.IsNullOrEmpty(item.EnderecoEntrega.Estado))
                {
                    crmProdFatura.EstadoEntrega = item.EnderecoEntrega.Estado;
                }

                if (!String.IsNullOrEmpty(item.EnderecoEntrega.Pais))
                {
                    crmProdFatura.PaisEntrega = item.EnderecoEntrega.Pais;
                }

                if (!String.IsNullOrEmpty(item.EnderecoEntrega.Telefone))
                {
                    crmProdFatura.TelefoneEntrega = item.EnderecoEntrega.Telefone;
                }
                else
                {
                    crmProdFatura.AddNullProperty("TelefoneEntrega");
                }

                if (!String.IsNullOrEmpty(item.EnderecoEntrega.Fax))
                {
                    crmProdFatura.FAXEntrega = item.EnderecoEntrega.Fax;
                }
                else
                {
                    crmProdFatura.AddNullProperty("FAXEntrega");
                }

                if (acaoItemFatura == "A" || acaoItemFatura == "I")
                {
                    lstProdutoFaturaUpdate.Add(crmProdFatura);
                }
                if (acaoItemFatura == "E")
                {
                    lstProdutoFaturaDelete.Add(crmProdFatura);
                }
            }
        }
        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.");
                    }
                }
            }
        }