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); }
/// <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; } }
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(); }