예제 #1
0
        public void CalcularPreco()
        {
            #region buscar clientes
            IList<ICliente> clientes = new Cliente().Find<ICliente>(new Where { Limit = new Limit(3, 0) });
            #endregion

            #region buscar itens
            IList<IAcabado> produtos = new Acabado().Find<IAcabado>(new Where { Limit = new Limit(3, 0) });

            Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem item = new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item();
            item.ItemMovimentado = produtos[0];
            #endregion

            #region tabela de preço
            //-------------------------------------------------------------------------
            // Gravar um tabela de preços para garantir que iremos ter uma tabela
            //-------------------------------------------------------------------------
            TabelaPrecoTest precoTest = new TabelaPrecoTest();
            precoTest.Gravar();

            //-------------------------------------------------------------------------
            // Carregar esta tabela para uso futuro
            //-------------------------------------------------------------------------
            ITabelaPreco tabela = new TabelaPreco(precoTest.GUID);
            #endregion

            #region Regra com 10% desconto
            IDesconto desconto = new Desconto().Find<IDesconto>(new Where { Limit = new Limit(1, 0) })[0] as IDesconto;

            new PrecoRegra
            {
                Descricao = "Regra desconto 10% Geral",
                TabelaPreco = tabela,
                ItensEspeciais = new List<IPrecoRegraItemEspecial>{
                new PrecoRegraItemEspecial {
                    ItemEspecial  = desconto,
                    TipoValor = Enuns.Cadastro.TipoValor.Percentual,
                    Valor= 10
                }
            }
            }.Save();
            #endregion

            #region Regra com 25% desconto para o cliente posição 0
            desconto = new Desconto().Find<IEspecial>(new Where { Limit = new Limit(1, 0) })[0] as IDesconto;
            new PrecoRegra
            {
            Descricao = "Regra desconto 25% cliente posição 0",
            TabelaPreco = tabela,
            ItensEspeciais = new List<IPrecoRegraItemEspecial>{

                    new PrecoRegraItemEspecial {
                    ItemEspecial  = desconto,
                    TipoValor = Enuns.Cadastro.TipoValor.Percentual,
                    Valor= 25
                }
            }
            }.Save();
            #endregion

            #region Regra com 30% desconto para o cliente posição 0 e produto 0
            desconto = new Desconto().Find<IEspecial>(new Where { Limit = new Limit(1, 0) })[0] as IDesconto;

            new PrecoRegra
            {
                Descricao = "Regra desconto 30% cliente e produto posição 0",
                TabelaPreco = tabela,
                ItensEspeciais = new List<IPrecoRegraItemEspecial>{
                new PrecoRegraItemEspecial {
                    ItemEspecial  = desconto,
                    TipoValor = Enuns.Cadastro.TipoValor.Percentual,
                    Valor= 30
                }
            }
            }.Save();
            #endregion

            #region Regra com 35% desconto para o produto posição 0
            desconto = new Desconto().Find<IEspecial>(new Where { Limit = new Limit(1, 0) })[0] as IDesconto;

            new PrecoRegra
            {
                Descricao = "Regra desconto 35% cliente e produto posição 0",
                TabelaPreco = tabela,
                ItensEspeciais = new List<IPrecoRegraItemEspecial>{
                new PrecoRegraItemEspecial {
                    ItemEspecial  = desconto,
                    TipoValor = Enuns.Cadastro.TipoValor.Percentual,
                    Valor= 35
                }
            }
            }.Save();
            #endregion

            //-------------------------------------------------------------------------
            // Calcular o preço para o cliente na posição 0
            //-------------------------------------------------------------------------
            RegraPrecoResult preco = new CalcularPreco(item).ExecutarRegra(new RegraPrecoFilter
            {
                Pessoa = clientes[0]
            });

            WriteLine("Preço final: {0:C2}", preco.PrecoFinal);
            DumpElement(preco);

            //-------------------------------------------------------------------------
            // Calcular o preço para o cliente e produto na posição 0
            //-------------------------------------------------------------------------
            preco = new CalcularPreco(item).ExecutarRegra(new RegraPrecoFilter
            {
                Pessoa = clientes[0],
                GrupoItem = produtos[0].GrupoItem
            });

            WriteLine("Preço final: {0:C2}", preco.PrecoFinal);
            DumpElement(preco);

            //-------------------------------------------------------------------------
            // Calcular o preço para o produto na posição 0
            //-------------------------------------------------------------------------
            preco = new CalcularPreco(item).ExecutarRegra(new RegraPrecoFilter
            {
                GrupoItem = produtos[0].GrupoItem
            });

            WriteLine("Preço final: {0:C2}", preco.PrecoFinal);
            DumpElement(preco);

            //-------------------------------------------------------------------------
            // Calcular o preço com todo mundo nulo
            //-------------------------------------------------------------------------
            preco = new CalcularPreco(item).ExecutarRegra(new RegraPrecoFilter
            {
            });

            WriteLine("Preço final: {0:C2}", preco.PrecoFinal);
            DumpElement(preco);
        }
예제 #2
0
        /// <summary>
        /// Cancela as Pré Vendas pendentes  
        /// </summary>
        private void CancelaPreVendasPendentes()
        {
            try
            {
                //Verifica se tem pre vendas pendentes
                DateTime dataMov = DateTime.Today;

                #region Antes da emissão da redução Z

                if (DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) > 2)
                    dataMov = dataMov.AddDays(DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) - 1);
                else if (DadosReducaoZ.DataDoMovimento.CompareTo(dataMov) != 1)
                    dataMov = DadosReducaoZ.DataDoMovimento.AddDays(-1);

                IList<IPreVenda> preVendas = new PreVenda().Find<IPreVenda>(new Where() {
                {
                    "fat_LanMov.DataHoraMovimento < @p1",
                    new Parameter
                    {
                        GenericDbType = GenericDbType.DateTime,
                        ParameterName = "@p1",
                        Value = dataMov
                    }
                   },
                     {
                    "fat_Lan.Status = @p2",
                    new Parameter
                    {
                        GenericDbType = GenericDbType.Integer,
                        ParameterName = "@p2",
                        Value = (int)Enuns.Faturamento.Lancamento.Status.Aberto
                    }
                   }
                });
                //Cancela se houver pre vendas pendentes
                foreach (IPreVenda pv in preVendas)
                {
                    Model.Faturamento.Lancamento.Movimento.VendaCF.IVendaCF venda = new VendaCF();
                    venda.DadoPessoa = pv.DadoPessoa;
                    venda.Emitente = pv.Emitente;

                    int contaPV = 0;
                    foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in pv.Itens)
                        if (((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status == Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado)
                            contaPV++;

                    if (contaPV != pv.Itens.Count)
                    {
                        ACBrECF.AbreCupom(venda.DadoPessoa.Cliente.GetCPFCNPJ(), venda.DadoPessoa.NomeFantasia, "");
                        foreach (Model.Faturamento.Lancamento.Movimento.Item.IItem item in pv.Itens)
                            if (((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status != Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado)
                            {
                                Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem i = new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item();
                                i.DescricaoNF = item.DescricaoNF;
                                i.ItemMovimentado = item.ItemMovimentado;
                                i.Quantidade = item.Quantidade;
                                i.ValorUnitarioBruto = item.ValorUnitarioBruto;
                                i.Vendedor = item.Vendedor;
                                i.Status = Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado;
                                i.SituacaoTributaria = SituacaoTributaria.Isento;
                                i.ItensParent.Add(item);
                                (i.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto).IndicadorProducao = "P";
                                (i.ItemMovimentado as Model.Cadastro.Item.Produto.IProduto).IndicadorTruncamento = "T";
                                ((Model.Faturamento.Lancamento.Movimento.Item.PreVenda.IItem)item).Status = Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado;
                                item.Save();
                                venda.Itens.Add(i);
                                ACBrECF.VendeItem(i.Ordem.ToString(), i.DescricaoNF, "FF", (decimal)i.Quantidade, (decimal)i.ValorUnitarioLiquido);
                            }

                        venda.NumeroSerieECF = NumeroSerie;
                        venda.NumeroOrdemECF = Unimake.Convert.ToInt(NumeroECF);
                        venda.COO = COO;
                        venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z
                        venda.CRO = CRO;
                        venda.CCF = CCF;
                        venda.CRZ = CRZ;
                        venda.ValorGrandeTotalECF = GrandeTotal;
                        venda.Save();
                        ACBrECF.SubtotalizaCupom();
                        ACBrECF.FechaCupom("Obrigado");
                        ACBrECF.CancelaCupom();
                        pv.Cancelar(DateTime.Today, "Cancelamento Automático - Emissão de Redução Z");
                    }
                }
                #endregion
            }
            finally
            {
                //aqui tem que liberar a variável da redução Z, pois será chamada em outros métodos que dependem
                // dos dados da última redução Z. Ou seja, os dados de pois de validados por este método.
                // Este método é chamado antes da redução Z
                _dadosReducaoZ = null;
            }
        }
예제 #3
0
        public override void Gravar()
        {
            #region DAV

            DAV dav = new DAV();

            #region Vendedor
            Continente t = new Continente();
            t.Nome = "Europa";
            GUID guidContinente = t.Save();
            Pais p = new Pais();
            p.Nome = "Brasil";
            p.Abreviatura = "BR";
            p.CodBACEN = "1234";
            p.Continente = t;
            GUID guidPais = p.Save();
            Estado e = new Estado();
            e.Nome = "Europa";
            e.CodigoIBGE = "41256";
            e.UF = "PR";
            e.Pais = p;
            GUID guidEstado = e.Save();
            Municipio m = new Municipio();
            m.Abreviatura = "PVI";
            m.CodigoIBGE = "123546";
            m.Estado = e;
            m.Nome = "Paranavaí";
            GUID guidMunicipio = m.Save();
            Cidade c = new Cidade();
            c.Abreviatura = "GR";
            c.Municipio = m;
            c.Nome = "Graciosa";
            GUID = c.Save();

            Logradouro l = new Logradouro();
            l.Descricao = "Avenida";
            l.Abreviatura = "Av";
            GUID guidLogradouro = l.Save();

            Bairro b = new Bairro();
            b.Cidade = c;
            b.Descricao = "Centro";
            GUID guidBairro = b.Save();

            OpenPOS.Data.Cadastro.Endereco.Endereco end = new OpenPOS.Data.Cadastro.Endereco.Endereco();
            end.Logradouro = l;
            end.CEP = "87704020";
            end.Endereco = "Joaquim da Silva";
            end.Bairro = b;
            string guidEndereco = end.Save();

            IVendedor vendedor = new Vendedor();
            vendedor.FisicaJuridica = Enuns.Cadastro.Pessoa.FisicaJuridica.Fisica;
            OpenPOS.Data.Cadastro.Pessoa.Fisica.Fisica fisica = new OpenPOS.Data.Cadastro.Pessoa.Fisica.Fisica();
            fisica.CPF = "05210438910";
            fisica.DataNascimento = new DateTime(1985, 07, 27);
            fisica.EstadoCivil = Enuns.Cadastro.Pessoa.EstadoCivil.Casado;
            fisica.MaeNome = "Teste";
            fisica.PaiNome = "Teste";
            fisica.RG = "90702343";
            fisica.RGEmissao = new DateTime(1995, 12, 12);
            Estado estado = new Estado(guidEstado);
            fisica.RGEstado = estado;
            fisica.RGOrgao = "SSPPR";
            fisica.RGTipoVisto = "";
            fisica.Sexo = Enuns.Cadastro.Pessoa.Sexo.Masculino;

            OpenPOS.Data.Cadastro.Pessoa.Juridica.Juridica juridica = new OpenPOS.Data.Cadastro.Pessoa.Juridica.Juridica();
            juridica.CNPJ = "75480764000120";
            juridica.DataAbertura = new DateTime(1999, 10, 10);
            juridica.IM = "1205";
            juridica.ISuf = "";
            juridica.RamoAtividade = new RamoAtividade().Find<IRamoAtividade>()[0];

            OpenPOS.Data.Cadastro.Pessoa.Endereco endereco = new OpenPOS.Data.Cadastro.Pessoa.Endereco();
            // endereco.GUID = guidEndereco;
            endereco.CaixaPostal = "123";
            endereco.Cobranca = true;
            endereco.Complemento = "teste";
            endereco.Correspondencia = true;
            endereco.Endereco = end;
            endereco.Entrega = true;
            endereco.Faturamento = true;
            endereco.Numero = "1234";
            endereco.Principal = true;
            endereco.Proximidade = "Estadio";
            endereco.Retirada = true;
            endereco.TipoEndereco = Enuns.Cadastro.Endereco.TipoEndereco.Principal;
            vendedor.Enderecos = new List<IEndereco> { endereco };
            vendedor.Fisica = fisica;
            vendedor.Juridica = juridica;
            vendedor.NomeFantasia = "Teste";
            vendedor.Observacao = "teste unitario";
            vendedor.RazaoSocial = "Teste";
            vendedor.TipoPessoa = Enuns.Cadastro.Pessoa.TipoPessoa.Vendedor;
            GUID guidVendedor = vendedor.Save();

            #endregion

            #region DadoPessoa

            Model.Faturamento.Lancamento.Movimento.IDadoPessoa dadoPessoa = new Data.Faturamento.Lancamento.Movimento.DadoPessoa.DadoPessoa();

            Cliente cliente = new Cliente()
            {
                FisicaJuridica = Enuns.Cadastro.Pessoa.FisicaJuridica.Fisica,
                Fisica = fisica,
                NomeFantasia = "Luciano",
                RazaoSocial = "Luciano Leandro",
                TipoPessoa = Enuns.Cadastro.Pessoa.TipoPessoa.Cliente,
                Enderecos = new List<IEndereco> { endereco }
            };
            cliente.Save();
            dadoPessoa.Cliente = cliente;

            #endregion
            dav.DadoPessoa = dadoPessoa;
            Item item1 = new Item()
            {
                Quantidade = 10,
                ValorUnitarioBruto = 12.5,
                DescricaoNF = "Produto de teste um",
                Vendedor = vendedor
            };
            dav.Itens.Add(item1);
            GUID guidDav = dav.Save();

            #endregion

            PreVenda pv = new PreVenda();

            OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.PreVenda.Item itempv1 = new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.PreVenda.Item()
            {
                Quantidade = 10,
                ValorUnitarioBruto = 12.5,
                DescricaoNF = "Produto de teste um",
                Status = 0,

            };
            itempv1.Parent = pv;
            itempv1.ItensParent.Add((Item)dav.Itens[0].Clone());
            pv.Itens.Add(itempv1);

            guidPv = pv.Save();

            VendaCF v = new VendaCF();

            OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item itemVCF = new OpenPOS.Data.Faturamento.Lancamento.Movimento.Item.VendaCF.Item
            {
                Quantidade = 25,
                ValorUnitarioBruto = 15,
                DescricaoNF = "Produto de teste um",
            };
            itemVCF.Parent = v;
            itemVCF.ItensParent.Add((Data.Faturamento.Lancamento.Movimento.Item.PreVenda.Item)pv.Itens[0].Clone());
            v.Itens.Add(itemVCF);
            GUID = v.Save();
        }