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> /// Calcula regra de preço do item. /// </summary> /// <param name="item"></param> private void CalculaRegraPreco(IItem item) { Shared.Regra.Preco.RegraPrecoResult result = new CalcularPreco(item).ExecutarRegra(new RegraPrecoFilter { Pessoa = DadoPessoa.Cliente, GrupoItem = item.ItemMovimentado != null ? item.ItemMovimentado.GrupoItem : null }); }