public override void Editar()
        {
            DescontoRegra oDescRegra = new DescontoRegra(GUID);

            oDescRegra.Descricao = "Regra geral editada";
            oDescRegra.TipoValor = TipoValor.Valor;
            oDescRegra.Save();
        }
        public override void Editar()
        {
            IDescontoRegra descRegra = new DescontoRegra(GUID);

            //descRegra.Filtros.Add(new DescontoRegraFiltro
            //{
            //    Item = new OpenPOS.Data.Cadastro.Item.Produto.Acabado().Find<IAcabado>(new Where { Limit = new Limit(1) })[0]
            //});

            descRegra.Save();
        }
        public void RegraEstadoClienteTest()
        {
            //-------------------------------------------------------------------------
            // Gravar um pré-venda para utilizar durante o teste
            //-------------------------------------------------------------------------
            PreVendaTest pvTest = new PreVendaTest();
            pvTest.Gravar();
            PreVenda pv = pvTest.PreVenda;

            //-------------------------------------------------------------------------
            // Criar um regra por estado e cliente
            //-------------------------------------------------------------------------
            DescontoRegra oRegDesc = new DescontoRegra();
            oRegDesc.Descricao = "Primeira Regra Desconto";
            oRegDesc.TipoValor = TipoValor.Percentual;
            oRegDesc.Valor = 10;

            oRegDesc.Filtros = new List<IDescontoRegraFiltro>{
                new DescontoRegraFiltro{
                    Estado = pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado,
                    Cliente = pv.DadoPessoa.Cliente as ICliente
                }
            };

            GUID = oRegDesc.Save();

            Model.Faturamento.Lancamento.Movimento.Item.IItem item = pv.Itens[0];

            double old = item.ValorTotalLiquido;

            //-------------------------------------------------------------------------
            // Buscar um desconto pelo estado
            //-------------------------------------------------------------------------
            RegraDescontoResult result = new CalcularDesconto(pv, item).ExecutarRegra(
                new RegraDescontoFilter
                {
                    Cliente = new OpenPOS.Data.Cadastro.Pessoa.Cliente
                    {
                        GUID = Guid.NewGuid().ToString()
                    },
                    Estado = pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado
                });

            Assert.AreEqual(old, item.ValorTotalLiquido);

            result = new CalcularDesconto(pv, pv.Itens[0]).ExecutarRegra(
                new RegraDescontoFilter
                {
                    Cliente = pv.DadoPessoa.Cliente as ICliente,
                    Estado = pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado
                });

            Assert.AreNotEqual(old, item.ValorTotalLiquido);
        }
        private void Gravar(IEstado estado)
        {
            DescontoRegra oRegDesc = new DescontoRegra();
            oRegDesc.Descricao = "Primeira Regra Desconto";
            oRegDesc.TipoValor = TipoValor.Percentual;
            oRegDesc.Valor = 10;

            oRegDesc.Filtros = new List<IDescontoRegraFiltro>{
                new DescontoRegraFiltro{
                 TabelaPreco = NovatabelaPreco()
                }
            };
            GUID = oRegDesc.Save();
        }
        public void ExcecaoTest()
        {
            #region gravar a pré-venda
            //-------------------------------------------------------------------------
            // Gravar um pré-venda para utilizar durante o teste
            //-------------------------------------------------------------------------
            PreVendaTest pvTest = new PreVendaTest();
            pvTest.Gravar();
            PreVenda pv = pvTest.PreVenda;
            IEstado estado = RegraDescontoTest.NovoEstado();

            //-------------------------------------------------------------------------
            // Modificar o estado do movimento
            //-------------------------------------------------------------------------
            pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado = estado;
            #endregion

            #region gravar a regra
            //-------------------------------------------------------------------------
            // Criar um regra por estado e cliente
            //-------------------------------------------------------------------------
            DescontoRegra oRegDesc = new DescontoRegra();
            oRegDesc.Descricao = "Primeira Regra Desconto";
            oRegDesc.TipoValor = TipoValor.Percentual;
            oRegDesc.Valor = 10;

            oRegDesc.Filtros = new List<IDescontoRegraFiltro>{
                new DescontoRegraFiltro{
                    Estado = estado,
                }
            };

            GUID = oRegDesc.Save();
            #endregion

            #region aqui existe desconto
            Model.Faturamento.Lancamento.Movimento.Item.IItem item = pv.Itens[0];

            double old = item.ValorTotalLiquido;

            //-------------------------------------------------------------------------
            // Buscar um desconto pelo estado
            //-------------------------------------------------------------------------
            RegraDescontoResult result = new CalcularDesconto(pv, item).ExecutarRegra(
                new RegraDescontoFilter
                {
                    Estado = pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado
                });

            //o desconto foi aplicado
            Assert.AreNotEqual(old, item.ValorTotalLiquido);
            #endregion

            #region exceção pelo cliente
            //-------------------------------------------------------------------------
            // Agora iremos informar a regra que o cliente é exceção
            //-------------------------------------------------------------------------
            oRegDesc.Excecoes.Add(new DescontoRegraExcecao
            {
                Cliente = pv.DadoPessoa.Cliente as ICliente
            });

            oRegDesc.Save();

            old = item.ValorTotalLiquido;

            result = new CalcularDesconto(pv, pv.Itens[0]).ExecutarRegra(
                new RegraDescontoFilter
                {
                    Estado = pv.DadoPessoa.Cliente.Enderecos[0].Endereco.Estado
                });

            //-------------------------------------------------------------------------
            // Não pode ter havido desconto, pois o cliente é uma exceção
            //-------------------------------------------------------------------------
            Assert.AreEqual(old, item.ValorTotalLiquido);
            #endregion
        }
        public override void Gravar()
        {
            #region Regra de descontos
            IDescontoRegra descRegra = new DescontoRegra();
            descRegra.Descricao = "Regra de desconto para grupo de item";
            descRegra.TipoValor = TipoValor.Percentual;
            descRegra.Valor = 5;
            #endregion

            #region Filtros da regra de desconto
            descRegra.Filtros.Add(new DescontoRegraFiltro
            {
                GrupoItem = new GrupoItem().Find<IGrupoItem>(new Where { Limit = new Limit(1) })[0],
            });
            #endregion

            #region Exceçoes da regra de desconto
            descRegra.Excecoes.Add(new DescontoRegraExcecao
            {
                GrupoItem = new GrupoItem().Find<IGrupoItem>(new Where { Limit = new Limit(2) })[1],
            });
            #endregion

            #region Usuarios Responsáveis
            descRegra.UsuariosResponsaveis.Add(new DescontoRegraUsuarioResp
            {
                UsuarioResponsavel = new Usuario().Find<IUsuario>(new Where { Limit = new Limit(2) })[0]
            });
            #endregion
            GUID = descRegra.Save();
        }