// GET: Market public ActionResult Index() { var vendors = (db.Roles.OrderBy(m => m.Name) .FirstOrDefault(m => m.Name == "Vendor")).Users; var model = new MarketIndexViewModel { Vendors = new Dictionary <string, string>() }; foreach (var vendor in vendors) { if (vendor is null) { continue; } var v = db.EcomUsers .Include(m => m.Stores) .Include(m => m.VendorDetails) .FirstOrDefault(m => m.ApplicationUserId == vendor.UserId); if (v != null && v.Stores != null && v.Stores.Count > 0) { model.Vendors.Add(v.ApplicationUserId, v.VendorDetails.BusinessName); } } return(View(model)); }
public MarketIndexViewModel GetIndexViewModel(int?playerId, MarketIndexParamsViewModel filters) { var ownAds = _dbContext.MarketAd.Where(ad => ad.AuthorId == playerId); var model = new MarketIndexViewModel { OwnActiveAds = ownAds.Count(ad => ad.Active), OwnInactiveAds = ownAds.Count(ad => !ad.Active), OwnAdReactions = ownAds.Sum(ad => ad.Reactions.Count()), ItemTypes = EnumExtensions.ToDictionary <int>(typeof(Item.ItemType)), WeaponTypes = EnumExtensions.ToDictionary <int>(typeof(Item.ItemWeaponType)), Filters = filters, }; if (filters.HasItemLevelFilters) { var items = _dbContext.MarketAdBundleItem .Include(bi => bi.Item) .Include(bi => bi.Bundle) .ThenInclude(b => b.Ad) .ThenInclude(a => a.Author) .Where(i => // Item-level filters (string.IsNullOrWhiteSpace(filters.NamePart) || i.Item.Name.Contains(filters.NamePart)) && (filters.ItemRarities == null || filters.ItemRarities.Count() == 0 || filters.ItemRarities.Contains(i.Item.Rarity)) && (filters.ItemTypes == null || filters.ItemTypes.Count() == 0 || filters.ItemTypes.Contains(i.Item.Type)) && (filters.WeaponTypes == null || filters.WeaponTypes.Count() == 0 || (i.Item.WeaponType != null && filters.WeaponTypes.Contains(i.Item.WeaponType.Value))) && (filters.WeaponRanges == null || filters.WeaponRanges.Count() == 0 || (i.Item.WeaponRange.HasValue && filters.WeaponRanges.Contains(i.Item.WeaponRange.Value))) && (filters.MinEnergy == null || filters.MinEnergy <= 0 || (i.Item.Energy.HasValue && i.Item.Energy >= filters.MinEnergy)) && (filters.MinImpact == null || filters.MinImpact <= 0 || (i.Item.Impact.HasValue && i.Item.Impact >= filters.MinImpact)) && (filters.MinPiercing == null || filters.MinPiercing <= 0 || (i.Item.Piercing.HasValue && i.Item.Piercing >= filters.MinPiercing)) && (filters.MinTier == null || filters.MinTier <= 1 || i.Item.Tier >= filters.MinTier) && (filters.MaxTier == null || filters.MaxTier >= TauManager.Constants.MaxTier || i.Item.Tier <= filters.MaxTier) && // Bundle-level filters (filters.AdTypes == null || filters.AdTypes.Count() == 0 || (filters.AdTypes != null && filters.AdTypes.Contains(MarketAd.AdType.Buy) && i.Bundle.Type == MarketAdBundle.BundleType.Request) || (filters.AdTypes != null && (filters.AdTypes.Contains(MarketAd.AdType.Sell) || filters.AdTypes.Contains(MarketAd.AdType.Lend)) && i.Bundle.Type == MarketAdBundle.BundleType.Offer)) && // Ad-level filters (filters.AdTypes == null || filters.AdTypes.Count() == 0 || filters.AdTypes.Contains(i.Bundle.Ad.Type)) && (i.Bundle.Ad.Active) && // Generic conditions ((i.Bundle.Type == MarketAdBundle.BundleType.Offer && (i.Bundle.Ad.Type == MarketAd.AdType.Sell || i.Bundle.Ad.Type == MarketAd.AdType.Lend)) || (i.Bundle.Type == MarketAdBundle.BundleType.Request && i.Bundle.Ad.Type == MarketAd.AdType.Buy)) ) .ToList(); var allAds = items.Select(i => i.Bundle.Ad) .Distinct(); var allAdsSorted = filters.Sort == MarketIndexParamsViewModel.SortOrder.DateAscending ? allAds.OrderBy(ad => ad.PlacementDate) : allAds.OrderByDescending(ad => ad.PlacementDate); model.OfferAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Sell || ad.Type == MarketAd.AdType.Lend) .Select(ad => new MarketAdViewModel(ad)); model.AskAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Buy) .Select(ad => new MarketAdViewModel(ad)); } else { var allAds = _dbContext.MarketAd .Include(ad => ad.Author) .Include(ad => ad.Bundles) .ThenInclude(ab => ab.Items) .ThenInclude(abi => abi.Item) .Where(ad => (filters.AdTypes == null || filters.AdTypes.Count() == 0 || filters.AdTypes.Contains(ad.Type)) && ad.Active) .ToList(); var allAdsSorted = filters.Sort == MarketIndexParamsViewModel.SortOrder.DateAscending ? allAds.OrderBy(ad => ad.PlacementDate) : allAds.OrderByDescending(ad => ad.PlacementDate); model.OfferAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Sell || ad.Type == MarketAd.AdType.Lend) .Select(ad => new MarketAdViewModel(ad)); model.AskAds = allAdsSorted.Where(ad => ad.Type == MarketAd.AdType.Buy) .Select(ad => new MarketAdViewModel(ad)); } return(model); }