01/10/2014

Dificuldade em filtrar informações

Sei que meu problema é lógica e isso deve partir de mim, eu sei, mas às vezes uma luz, não um código pronto, mas o apontar de um caminho nos ajuda bastante.

1) Tenho 6 ComboBox em minha View que fazem os filtros para uma pesquisa.

2) Essa pesquisa, deverá montar uns CheckBox's, baseado no filtro passado. Acontece que essa montagem dos checkbox's, a LINQ que trás o resultado é a minha model. Alguns me disseram aqui que passar parâmetro direto para a Model, quebra o paradigma da OO e concordo. Nesse momento começa meu problema.

3) Estou tendo dificuldade para fazer isso. Preencho os parâmetros na View e via JQuery eu os pego. Agora como eu faço para distribuir para a minha model, de forma que a LINQ seja executada com esses filtros sendo passados no where da LINQ ou Lambda. Abaixo minha Model.

public static List<MontaArvoreAcao> montaArvoreAcao( )
        {
            RupturaEntities db = new RupturaEntities();

            var monta_arvore = (from rup in db.Ruptura
                                join ap in db.Apresentacao on rup.Codigo_Apresentacao equals (ap.Codigo_Apresentacao)
                                join mo in db.Motivo on rup.IDMotivo equals (mo.IDMotivo)
                                join pdv in db.PDV on rup.CodigoPDV equals (pdv.CodigoPDV)

                                where rup.IDMotivo != 6

                                //group rup by new { rup.IDRuptura} into gr

                                select new MontaArvoreAcao
                                {
                                    IDRuptura = rup.IDRuptura,
                                    DataRuptura = rup.DataRuptura,
                                    IDMotivo = rup.IDMotivo,
                                    Motivo = rup.Motivo.Motivo1,
                                    IDOrigem = rup.IDOrigem,
                                    CodigoPDV = rup.CodigoPDV,
                                    UF = rup.PDV.UF,
                                    Cidade = pdv.Cidade,
                                    CnpjDescricao = pdv.Cnpj + " - " + pdv.Descricao,
                                    Codigo_Apresentacao = rup.Codigo_Apresentacao,
                                    Unidade_Negocio = ap.Unidade_Negocio,
                                    Codigo_Unidade_Negocio = ap.Codigo_Unidade_Negocio,
                                    Franquia = ap.Franquia,
                                    Familia = ap.Familia,
                                    Descricao = ap.Descricao,
                                    Tipo_Rede = pdv.Tipo_PDV,
                                    Farmacia = pdv.Descricao
                                }).ToList().OrderBy(r => r.IDMotivo);

            return monta_arvore.ToList();
        }

Os parâmetros vindo da View são:


Estado, Cidade, Tipo_PDV, Descricao, UN, Familia de Produto.

Pjava

Respostas

01/10/2014

Joel Rodrigues

Se entendi bem, você precisa passar parâmetros da view para o CONTROLLER (não para o MODEL). Se for isso, você deve fazer com Ajax. Teste utilizar o método $.ajax da jQuery, passando como parâmetro os valores coletados da view.
Responder Citar

01/10/2014

Pjava

Não, é para a Model. Preciso executar a LINQ ue está lá com os parâmetros passados, agora, para não infringir os paradigmas da OO, não sei como fazer isso. Da View para Controller já faço isso, exatamente com jquery e ajax.
Responder Citar

02/10/2014

Joel Rodrigues

Mas então, amigo, não é "os paradigmas da OO" e sim do modelo MVC.
Eu insisto que você não precisa fazer isso da forma como está pensando. Você DEVE passar os dados para o controller, que no modelo MVC é o responsável por tratar requisições do usuário e retornar algum resultado para a view. Você deve criar uma action para receber esses parâmetros, passá-los para o model e retornar um resultado.
Responder Citar

02/10/2014

Pjava

Alterei a minha Action para receber parâmetros, conforme vocês estão vendo. Como eu passo?

public ActionResult Acao(string _uf, string _cidade, string _descricao)
{
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1].Trim();

ViewBag.User = user;

ViewData["ListaUn"] = MontaArvoreAcao.CriarListaArvoreUn(_uf,_cidade,_descricao);

ViewData["ListaFamilia"] = MontaArvoreAcao.CriarListaArvoreFamilia();

ViewData["ListaProd"] = MontaArvoreAcao.CriarListaArvoreProduto();

ViewData["ListaPdv"] = MontaArvoreAcao.CriarListaArvorePdv();

return View(MontaArvoreAcao.montaArvoreAcao());
}
Responder Citar