// GET: Subscription offer filter search
        public async Task <ActionResult> Search(SubscriptionOfferSearch search)
        {
            int cityID = 1;

            if (HttpContext.Request.Cookies["Current_City"] != null)
            {
                cityID = Convert.ToInt32(HttpContext.Request.Cookies["Current_City"].Values["CityID"]);
            }
            search.CityID       = cityID;
            search.SearchResult = await new SubscriptionOfferRepository().FrontSearch(search);
            return(PartialView("_FrontSearch", search));
        }
 public async Task<List<SubscriptionOffer>> FrontSearch(SubscriptionOfferSearch filter)
 {
     try
     {
         int periodsCount = filter.Periods.Count > 0 ? filter.Periods.Where(c => c.IsCheck == true).ToList().Count : 0;
         int categoriesCount = filter.Categories.Count > 0 ? filter.Categories.Where(c => c.IsCheck == true).ToList().Count : 0;
         var result = CookBazaarContext.SubscriptionOffers.Include(s => s.subscriptionCategory).Include(c => c.subscriptionPeriods).Where(offer => (offer.OfferEndDate > DateTime.Now) && offer.CityID == filter.CityID) && (filter.FromPrice == 0 || offer.Price >= filter.FromPrice) && (filter.ToPrice == 0 || offer.Price <= filter.ToPrice) && (categoriesCount == 0 || filter.CategoryKeys.Contains(offer.CategoryID)) && (periodsCount == 0 || offer.subscriptionPeriods.Any(period => filter.PeriodKeys.Contains(period.PeriodID))));
         return await result.ToListAsync();
     }
     catch (Exception ex)
     {
         Repository.ExceptionLog.AddException(ex, "SubscriptionOfferRep/FrontSearch", "");
         return new List<SubscriptionOffer>();
     }
 }
        // GET: Subscription offer search
        public async Task <ActionResult> Index()
        {
            int cityID = 1;

            if (HttpContext.Request.Cookies["Current_City"] != null)
            {
                cityID = Convert.ToInt32(HttpContext.Request.Cookies["Current_City"].Values["CityID"]);
            }
            SubscriptionOfferSearch searchcontrols = await new SubscriptionOfferRepository().GetFrontSearchItems(new SubscriptionOfferSearch()
            {
                CityID = cityID
            });

            return(View(searchcontrols));
        }
        public async Task<SubscriptionOfferSearch> GetFrontSearchItems()
        {            
            SubscriptionOfferSearch Items = new SubscriptionOfferSearch();

            Items.SearchResult =await FrontSearch(Items);

            if (Items.SearchResult.Count > 0)
            {
                Items.FromPrice = Items.SearchResult.Min(p => p.Price);
                Items.ToPrice = Items.SearchResult.Max(p => p.Price);
            }
            try
            {
                List<SubscriptionPeriod> Periods =await CookBazaarContext.SubscriptionPeriods.Where(cat => cat.IsActive == true).ToListAsync();
                foreach (SubscriptionPeriod period in Periods)
                {
                    Items.Periods.Add(new SubscriptionPeriodControl()
                    {
                        PeriodID = period.PeriodID,
                        PeriodName = Domain.Resources.LKP.Subscriptions.SubscriptionPeriods.SubscriptionPeriod.PeriodNameTextField == "EnglishPeriodName" ? period.EnglishPeriodName : period.ArabicPeriodName,
                        IsCheck = false
                    });
                }

                List<SubscriptionCategory> Categories = CookBazaarContext.SubscriptionCategories.Where(cat => cat.IsActive == true).ToList();
                foreach (SubscriptionCategory type in Categories)
                {
                    Items.Categories.Add(new SubscriptionCategoryControl()
                    {
                        CategoryID = type.CategoryID,
                        CategoryName = Domain.Resources.LKP.Subscriptions.SubscriptionCategories.SubscriptionCategory.CategoryNameTextField == "EnglishCategoryName" ? type.EnglishCategoryName : type.ArabicCategoryName,
                        IsCheck = false
                    });
                }


                return Items;
            }
            catch (Exception)
            {
                return Items;
            }
        }