示例#1
0
        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));
        }
示例#2
0
        // 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));
        }
示例#3
0
 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);
 }