public ActionResult Recherche(RechercheRevueViewModel model) { var revue = GetRevue(model.CodeRevue); if (revue == null && !model.RechercheGlobale) { throw new HttpException(404, "Not found"); } BuildModel(model, revue); List <int> selectedIndex = model.SelectedIndex.Values.Where(b => b.HasValue).ToList().Cast <int>().ToList(); List <int> selectedRevue = null; if (model.RechercheGlobale) { var revues = GetRevue(model.RevuesSelectionnees); selectedRevue = revues.Select(b => b.Id).Union(revues.SelectMany(r => r.RevuesFille.Select(rf => rf.Id))).Distinct().ToList(); } else { selectedRevue = new List <int>() { revue.Id }.Union(revue.RevuesFille.Select(rf => rf.Id)).ToList(); } var titre = _unitOfWork.FTSContains(model.Nom); Expression <Func <ArticleRevue, bool> > filter = b => (model.Nom == null || b.Titre.Contains(titre)) && selectedRevue.Contains(b.Revue.Id) && (!b.Revue.RechercheParAnnee || ((!model.AnneeDebut.HasValue || model.AnneeDebut.Value <= b.FinPublication) && (!model.AnneeFin.HasValue || model.AnneeFin.Value >= b.DebutPublication))) && (model.Auteur == null || b.Auteur.Contains(model.Auteur)) && ((!b.Revue.PeriodesParoisses.Any() || model.Paroisse == null) || ( b.Revue.PeriodesParoisses.Any(pp => pp.Lieu.Nom == model.Paroisse && pp.Lieu.TypeLieu.TypeFonctionnel == TypeLieuFonctionnel.Paroisse && pp.AnneeDebutPeriode <= b.DebutPublication && pp.AnneeFinPeriode >= b.FinPublication ) )) && (!selectedIndex.Any() || b.ArticleRevueIndex.Join(selectedIndex, outerKey => outerKey.Index.Id, innerKey => innerKey, (o, i) => new { }).Count() == selectedIndex.Count); model.Resultats = _unitOfWork .ArticlesRevue .Paginate(new PaginationRequest(model.Pagination.Valeur, model.Page), filter , o => o.OrderBy(ar => ar.PeriodePublication).ThenBy(ar => ar.NumeroRevue.HasValue ? ar.NumeroRevue.Value : 0).ThenBy(ar => ar.PremierePage)) .ToPagedListMvc(model.Page, model.Pagination.Valeur); return(View("~/Views/Revue/Recherche.cshtml", model)); }
// GET: Revue public ActionResult Index(RechercheRevueViewModel model) { model.Recherche = false; var revue = GetRevue(model.CodeRevue); if (revue == null && !String.IsNullOrEmpty(model.CodeRevue)) { throw new HttpException(404, "Not found"); } BuildModel(model, revue); model.RevuesSelectionnees = model.RevuesDisponibles.Where(b => b.RecherchePartielleDepuisGlobaleDefaut).Select(b => b.Id).ToList(); return(View("~/Views/Revue/Recherche.cshtml", model)); }
private void BuildModel(RechercheRevueViewModel model, Revue revue) { model.RevuesDisponibles = _unitOfWork.Revues.Get(b => b.Active && b.RecherchePartielleDepuisGlobale).ToList(); model.Revue = revue; model.GroupeIndex = GetGroupeIndex(revue); }