Example #1
0
        public ProdutoFatura Atualizar(ProdutoFatura ObjProdutoFatura, ref bool MudancaProprietario)
        {
            ProdutoFatura TmpProdutoFatura = null;

            if (!String.IsNullOrEmpty(ObjProdutoFatura.ChaveIntegracao))                                                      //ID.HasValue)
            {
                TmpProdutoFatura = RepositoryService.ProdutoFatura.ObterPorChaveIntegracao(ObjProdutoFatura.ChaveIntegracao); //ObterPor(ObjProdutoFatura.ID.Value);

                if (TmpProdutoFatura != null)
                {
                    ObjProdutoFatura.ID = TmpProdutoFatura.ID;
                    RepositoryService.ProdutoFatura.Update(ObjProdutoFatura);

                    return(ObjProdutoFatura);
                }
                else
                {
                    ObjProdutoFatura.ID = RepositoryService.ProdutoFatura.Create(ObjProdutoFatura);
                    return(ObjProdutoFatura);
                }
            }
            else
            {
                ObjProdutoFatura.ID = RepositoryService.ProdutoFatura.Create(ObjProdutoFatura);
                return(ObjProdutoFatura);
            }
        }
Example #2
0
 public void Deletar(ProdutoFatura ObjProdutoFatura)
 {
     RepositoryService.ProdutoFatura.Delete(ObjProdutoFatura.ID.Value);
 }
Example #3
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);
        }
Example #4
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);
                }
            }
        }