public ActionResult ModerateAds() { var viewModel = new AdminModerateAdsViewModel(); viewModel.Ads = AdsDAL.GetAdsForModeration(); if (viewModel.Ads.Any()) { foreach (var ad in viewModel.Ads) { ad.Photos = PhotosDAL.GetPhotos(ad.Id); ad.Products = AdProductsDAL.GetAdProducts(ad.Id); } } ViewBag.Heading = "Модерация объявлений"; #region Хлебные крошки var breadCrumbs = new List <BreadCrumbLink>(); breadCrumbs.Add(new BreadCrumbLink() { Text = "Админка", Url = C.SiteUrl + "Admin", Title = "Перейти на главную админки" }); breadCrumbs.Add(new BreadCrumbLink() { Text = ViewBag.Heading, EndPoint = true }); ViewBag.BreadCrumbs = breadCrumbs; #endregion return(View(viewModel)); }
/// <summary> /// Возвращает объявления с всей необходимой информацией для представлений /// </summary> /// <param name="adIds"></param> /// <returns></returns> public static List <Ad> GetAdsForView(int currentUserId, List <int> adIds = null, List <Ad> ads = null, bool needInvitedUserIds = false, bool needSender = false) { if (adIds == null && ads == null) { throw new ArgumentNullException("Нужно передать или adIds или ads"); } if (ads == null) { ads = AdsDAL.GetAds(ids: adIds); } else { adIds = ads.Select(a => a.Id).Distinct().ToList(); } ads.ForEach(f => f.City = TownsDAL.GetTown(f.CityId)); //города кэшируются внутри TownsDAL, запросов в БД нет var smallMainPhotos = PhotosDAL.GetPhotos(adIds: adIds, maxWidth: 300); var userFavoriteAds = UserFavoriteAdsDAL.GetUserFavoriteAds(adIds: adIds); var offersForAds = OffersDAL.GetOffers(adIds: adIds); var adProductsForads = AdProductsDAL.GetAdProducts(adIds: adIds); var allProductCategories = ProductCategoriesDAL.GetCategories(); foreach (var ad in ads) { var smallMainPhoto = smallMainPhotos.FirstOrDefault(p => p.AdId == ad.Id); ad.SmallPhotoUrl = smallMainPhoto != null ? smallMainPhoto.Url : PhotoHelper.NoLogoImageUrl; ad.FavoritesCount = userFavoriteAds.Count(a => a.AdId == ad.Id); ad.IsInFavorites = userFavoriteAds.Any(f => f.AdId == ad.Id && f.UserId == currentUserId); ad.Offers = offersForAds.Where(o => o.AdId == ad.Id).ToList(); ad.Products = adProductsForads.Where(ap => ap.AdId == ad.Id).ToList(); if (ad.Products.Any()) { #region Заполнение описания System.Text.StringBuilder productCategoryNames = new System.Text.StringBuilder(); var adProductCategoryIds = ad.Products.Select(p => p.ProductCategoryId).ToList(); var adProductCategories = allProductCategories .Where(c => adProductCategoryIds.Any(id => c.Id == id)) .OrderBy(c => c.Id).ToList(); ad.ProductCategoryNames = ""; if (adProductCategories.Any()) { var level1Categories = new List <ProductCategory>(); //категории 1-го уровня для всех категорий, выбранных в объявлении #region Заполним level1Categories foreach (var category in adProductCategories) { var level1CategoryIds = level1Categories.Select(c => c.Id).ToList(); if (category.Level == 1) { if (!level1CategoryIds.Contains(category.Id)) { level1Categories.Add(category); } } else //Level = 2 или Level = 3 { var parentCategory = allProductCategories.FirstOrDefault(c => c.Id == category.ParentId); if (parentCategory != null) { if (category.Level == 2) { if (!level1CategoryIds.Contains(parentCategory.Id)) { level1Categories.Add(parentCategory); } } else //Level = 3 { var parentParentCategory = allProductCategories.FirstOrDefault(c => c.Id == parentCategory.ParentId); if (parentParentCategory != null && !level1CategoryIds.Contains(parentParentCategory.Id)) { level1Categories.Add(parentParentCategory); } } } } } #endregion ad.ProductCategoriesLevel1 = new List <ProductCategory>(); foreach (var level1Category in level1Categories) { //нужно клонировать, иначе при обработке следующих объявлений в цикле эти данные затрутся var level1CategoryClone = level1Category.Clone(); //выбираем дочерние категории и дочерние категории дочерних категорий var childCategories = adProductCategories.Where(c => c.ParentId == level1CategoryClone.Id || level1CategoryClone.ChildrenId.Any(id => id == c.ParentId)).ToList(); level1CategoryClone.ChildCategories = new List <ProductCategory>(); foreach (var childCategory in childCategories) { var childCategoryClone = childCategory.Clone(); level1CategoryClone.ChildCategories.Add(childCategoryClone); } ad.ProductCategoriesLevel1.Add(level1CategoryClone); } } #endregion } if (needInvitedUserIds) { ad.InvitedUsersId = AdsDAL.GetInvitedUsers(ad.Id); } if (needSender) { ad.Sender = UsersDAL.GetUser(ad.SenderId); if (ad.Sender != null) { ad.Sender.Town = TownsDAL.GetTown(ad.Sender.CityId); } } } return(ads); }