public void ConsigoConsultarMateriaisComPrecoAtivo()
        {
            var consultaMaterial = ObjectFactory.GetInstance<IConsultaMaterial>();
            var paginacao = new PaginacaoVm
            {
                Page = 1,
                PageSize = 10,
                Take = 10
            };

            var filtro = new MaterialFiltroVm
            {
                IdDoCliente = "0001000188",
                ComPrecoAtivo = true,
                IdDaAreaDeVenda = 336
            };
            KendoGridVm kendoGridVm = consultaMaterial.Listar(paginacao, filtro);

            Assert.AreEqual(545,kendoGridVm.QuantidadeDeRegistros);
        }
        // pesquisa da tela
        public KendoGridVm Listar(PaginacaoVm paginacaoVm, MaterialFiltroVm filtro)
        {
            Material material = null;
            UnidadeDeMedida unidadeDeMedida = null;

            IQueryOver<Material, Material> queryOver = _unitOfWorkNh.Session.QueryOver(() => material);

            queryOver = queryOver.JoinAlias(x => x.UnidadeDeMedida, () => unidadeDeMedida);
                

            queryOver.Where(
                Restrictions.Disjunction()
                    .Add(() => material.Eliminacao == null)
                    .Add(() => material.Eliminacao != "X"));


            if (!string.IsNullOrEmpty(filtro.Tipo))
            {
                queryOver = queryOver.Where(m => m.Tip_mat == filtro.Tipo);
            }

            if (!string.IsNullOrEmpty(filtro.Codigo))
            {
                queryOver = queryOver.Where(m => m.Id_material.IsInsensitiveLike(filtro.Codigo, MatchMode.Anywhere));
            }

            if (!string.IsNullOrEmpty(filtro.Descricao))
            {
                queryOver = queryOver.Where(m => m.Descricao.IsInsensitiveLike(filtro.Descricao, MatchMode.Anywhere));
            }

            CondicaoDePrecoGeral condicaoDePrecoGeral = null;

            if (filtro.ComPrecoAtivo)
            {
                ClienteVenda areaDeVenda = _areasDeVenda.ObterPorId(filtro.IdDaAreaDeVenda);

                queryOver = queryOver.Where(m => m.Id_centro == areaDeVenda.Org_vendas);

                QueryOver<CondicaoDePrecoGeral, CondicaoDePrecoGeral> subQueryCondicaoGeral = 
                    QueryOver.Of(() => condicaoDePrecoGeral)
                    .Where(c => c.Org_vendas == areaDeVenda.Org_vendas)
                    .And(c => c.Can_dist == areaDeVenda.Can_dist)
                    .Select(Projections.Property(() => condicaoDePrecoGeral.Id_material));

                var disjuncaoDasSubqueries = Restrictions.Disjunction()
                    .Add(Subqueries.WhereProperty<Material>(m => m.Id_material).In(subQueryCondicaoGeral));

                if (!string.IsNullOrEmpty(filtro.IdDoCliente))
                {
                    CondicaoDePrecoCliente condicaoDePrecoCliente = null;

                    QueryOver<CondicaoDePrecoCliente, CondicaoDePrecoCliente> subQueryCondicaoCliente = 
                        QueryOver.Of(() => condicaoDePrecoCliente)
                        .Where(() => condicaoDePrecoCliente.Id_cliente == filtro.IdDoCliente)
                        .And(c => c.Org_vendas == areaDeVenda.Org_vendas)
                        .And(c => c.Can_dist == areaDeVenda.Can_dist)
                        .Select(Projections.Property(() => condicaoDePrecoCliente.Id_material));

                    disjuncaoDasSubqueries.Add(Subqueries.WhereProperty<Material>(m => m.Id_material).In(subQueryCondicaoCliente) );

                    Cliente cliente = _clientes.BuscaPeloCodigo(filtro.IdDoCliente).Single();

                    CondicaoDePrecoRegiao condicaoDePrecoRegiao = null;

                    QueryOver<CondicaoDePrecoRegiao, CondicaoDePrecoRegiao> subQueryCondicaoRegiao = QueryOver.Of(() => condicaoDePrecoRegiao)
                        .Where(() => condicaoDePrecoRegiao.Regiao == cliente.Uf)
                        .Select(Projections.Property(() => condicaoDePrecoRegiao.Id_material));

                    disjuncaoDasSubqueries.Add(Subqueries.WhereProperty<Material>(m => m.Id_material).In(subQueryCondicaoRegiao));

                }

                queryOver = queryOver.Where(disjuncaoDasSubqueries);
            }

            MaterialCadastroVm materialCadastroVm = null;

            queryOver.SelectList(lista => lista
                .Select(x => material.pro_id_material).WithAlias(() => materialCadastroVm.Id)
                .Select(x => material.Id_material).WithAlias(() => materialCadastroVm.Id_material)
                .Select(x => material.Descricao).WithAlias(() => materialCadastroVm.Descricao)
                .Select(x => material.Id_centro).WithAlias(() => materialCadastroVm.Centro)
                .Select(x => material.Tip_mat).WithAlias(() => materialCadastroVm.Tipo)
                //.Select(() => unidadeDeMedida.Descricao ) .WithAlias(() => materialCadastroVm.UnidadeMedida)
                //.Select(x => unidadeDeMedida.Id_unidademedida /*+ " - " + unidadeDeMedida.Descricao */) .WithAlias(() => materialCadastroVm.UnidadeMedida)
                .Select(Projections.SqlFunction("concat", NHibernateUtil.String,
                    Projections.Property(() => unidadeDeMedida.Id_unidademedida),
                    Projections.Constant(" - "),
                    Projections.Property(() => unidadeDeMedida.Descricao)))
                .WithAlias(() => materialCadastroVm.UnidadeMedida)
                );

            var kendoGridVm = new KendoGridVm()
            {
                QuantidadeDeRegistros = queryOver.RowCount(),
                Registros = queryOver
                    .TransformUsing(Transformers.AliasToBean<MaterialCadastroVm>())
                    .Skip(paginacaoVm.Skip)
                    .Take(paginacaoVm.Take)
                    .List<MaterialCadastroVm>()
                    .Cast<ListagemVm>()
                    .ToList()


            };

            return kendoGridVm;

        }
 public JsonResult ListarMaterial(PaginacaoVm paginacaoVm, MaterialFiltroVm filtro)
 {
     KendoGridVm kendoGridVm = _consultaMaterial.Listar(paginacaoVm, filtro);
     return Json(kendoGridVm, JsonRequestBehavior.AllowGet);
 }