public ActionResult Index()
        {
            var topArticles = Data.Articles.All()
                              .Where(article => article.IsSelectedForTopArticle)
                              .Select(ArticleViewModel.FromArticle(CurrentCulture)).ToList();

            return(View(topArticles));
        }
        public void FromArticle_MustReturnEmptyListIfNoArticlesAreSelectedForTopArticles()
        {
            IList <ArticleViewModel> models = _articles.AsQueryable().Select(ArticleViewModel
                                                                             .FromArticle(Culture.en.ToString())).ToList();

            Assert.AreEqual(models[0].Name, _articles[0].NameEn);
            Assert.AreEqual(models[0].Description, _articles[0].DescriptionEn);
            Assert.AreEqual(models[1].Name, _articles[1].NameEn);
            Assert.AreEqual(models[1].Description, _articles[1].DescriptionEn);
        }
        public void FromArticle_AllReturnedArticlesMustHaveBgPropertiesIfCultureIsBg()
        {
            IList <ArticleViewModel> models = _articles.AsQueryable().Select(ArticleViewModel
                                                                             .FromArticle(Culture.bg.ToString())).ToList();

            Assert.AreEqual(models[0].Name, _articles[0].NameBg);
            Assert.AreEqual(models[0].Description, _articles[0].DescriptionBg);
            Assert.AreEqual(models[1].Name, _articles[1].NameBg);
            Assert.AreEqual(models[1].Description, _articles[1].DescriptionBg);
        }
        public ActionResult Detail(int?articleId)
        {
            if (articleId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var article = Data.Articles.All().Select(ArticleViewModel.FromArticle(CurrentCulture))
                          .FirstOrDefault(a => a.Id == articleId);

            if (article == null)
            {
                return(HttpNotFound());
            }

            return(View(article));
        }
        public ActionResult SearchResults(SearchArticlesViewModel searchModel)
        {
            if (searchModel.FromPrice != null && searchModel.ToPrice != null)
            {
                if (searchModel.FromPrice >= searchModel.ToPrice)
                {
                    ModelState.AddModelError("ToPrice", Errors.GreaterThan);

                    return(View("SearchArticles", searchModel));
                }
            }

            var articles = SearchByCriterias(searchModel);

            if (searchModel.PageNumber == 0)
            {
                searchModel.PageNumber = 1;
            }

            var numberOfPages = Math.Ceiling((double)articles.Count() / PageSize);

            var articlesToDisplay = articles
                                    .OrderBy(article => article.Price)
                                    .Select(ArticleViewModel.FromArticle(CurrentCulture))
                                    .Skip((searchModel.PageNumber - 1) * PageSize).Take(PageSize).ToList();

            if (articlesToDisplay.Count == 0)
            {
                return(RedirectToAction("SearchArticles")
                       .WithInfo(Labels.NoArticlesFound));
            }

            ViewBag.FromPrice       = searchModel.FromPrice;
            ViewBag.ToPrice         = searchModel.ToPrice;
            ViewBag.CategoryId      = searchModel.CategoryId;
            ViewBag.SearchSubstirng = searchModel.SearchSubstring;
            ViewBag.Pages           = numberOfPages;
            ViewBag.PageNumber      = searchModel.PageNumber;

            return(View(articlesToDisplay));
        }
        public ActionResult ArticlesFromCategory(int?id, int?page)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            int pageNumber;

            if (page == 0)
            {
                pageNumber = 1;
            }
            else
            {
                pageNumber = page.GetValueOrDefault(1);
            }

            var articles = Data.Articles.All().Where(article => article.CateoryId == id);

            //We check if the user gave us incorrect category id
            if (articles.Count() == 0)
            {
                CheckIfCategoryExists((int)id);
            }

            var numberOfPages = Math.Ceiling((double)articles.Count() / PageSize);

            var articlesToDisplay = articles
                                    .OrderBy(article => article.Price)
                                    .Select(ArticleViewModel.FromArticle(CurrentCulture))
                                    .Skip((pageNumber - 1) * PageSize).Take(PageSize).ToList();

            ViewBag.CategoryId = id;
            ViewBag.Pages      = numberOfPages;
            ViewBag.PageNumber = pageNumber;

            return(View(articlesToDisplay));
        }