//[OutputCache(Duration = 10, VaryByParam = "*", VaryByCustom ="currencyAndLanguage")]
        public async Task<ActionResult> Index(ContentItemsRequest request = null)
        {
            var model = new LessonsViewModel();
             using (IMyMentorRepository repository = RepositoryFactory.GetInstance(Session))
             {
                 ParseUser user = Session.GetLoggedInUser();
                 if (user != null)
                 {
                     if (user.GetStatus() == UserStatusStrings.AppUser)
                         return RedirectToAction("UpdateStudent", "Account");
                 }

                 await MyMentorUserManager.LoginWithAuthCookie(Session, HttpContext, repository);

                 var stringManager = new StringsManager(repository);
                 GetFilters(model);

                 if (request == null)
                 {
                     request = new ContentItemsRequest();
                 }

                 if (string.IsNullOrEmpty(request.clipId))
                 {
                     GetLessons(request, model, repository);
                 }
                 else
                 {
                     GetBundles(request, model, repository);
                 }

                 model.LessonFaq = stringManager.GetLocalizedString(Strings.PortalLessonFaq);
                 model.BundleFaq = stringManager.GetLocalizedString(Strings.PortalBundleFaq);

                 var mod = model.ItemsCount % request.PageSize;
                 model.PageCount = mod == 0 ? model.ItemsCount / request.PageSize : (model.ItemsCount / request.PageSize) + 1;

                 model.CurrentPage = request.PageIndex + 1;
                 model.UpdateLessonMessage = stringManager.GetLocalizedString(Strings.UpdateLessonSuccess);

                 return View(model);
             }
        }
        private  void GetLessons(ContentItemsRequest request, LessonsViewModel model, IMyMentorRepository repository)
        {
            model.SelectedResidenceId = request.category6;
            model.SelectedCityId = request.category8;
            var resideces = repository.FindAllResidences();
            var selectedResidence =
                (resideces).SingleOrDefault(res => res.Id == request.category6);

            var selectedCity =
                (resideces).SingleOrDefault(res => res.Id == request.category8);

            model.SelectedResidenceName = selectedResidence != null
                ? selectedResidence.Name
                : string.Empty;

            model.SelectedCityName = selectedCity != null
                ? selectedCity.Name
                : string.Empty;

            model.LessonFilters[1].SelectedValue = request.category2;
            model.LessonFilters[4].SelectedValue =HttpUtility.UrlDecode( request.category5);
            model.SelecteDate = request.category7;
            model.SortBy = request.SortBy;
            model.LessonDisplayMode = LessonDisplayMode.Lessons;

             GetContentItems(model, request);
        }
        private  void GetBundles(ContentItemsRequest request, LessonsViewModel model, IMyMentorRepository repository)
        {
            var currencyRetriver = new CurrencyRetriver(HttpContext, Session, repository);
            var defaultCurrency = repository.FindDefaultCurrency();
            var currentUserId = Session.GetLoggedInUser() != null ? Session.GetLoggedInUser().ObjectId : string.Empty;

            model.LessonDisplayMode = LessonDisplayMode.Bundles;
            var findBundlesResult =  repository.FindBundlesByClipId(request.clipId);
            if (!findBundlesResult.ClipToBundle.Any())
            {
                request.clipId = null;
                GetLessons(request, model, repository);
                return;
            }

            model.BundlesViewModel.ContentItem = findBundlesResult.SelectedClip.ToDto();
            model.BundlesViewModel.Bundles = findBundlesResult.ClipToBundle.Select(o => o.Key).ToDto().ToArray();

            CurrencyDto sourceCurrency = model.BundlesViewModel.ContentItem.Currency ?? defaultCurrency;
            CurrencyDto targetCurrency = currencyRetriver.GetCurrent();

            model.BundlesViewModel.ContentItem.ConvertedPrice = CurrencyConverter.Convert(float.Parse(model.BundlesViewModel.ContentItem.Price), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent());
            model.BundlesViewModel.ContentItem.ConvertedPriceWithSupport = CurrencyConverter.Convert(float.Parse(model.BundlesViewModel.ContentItem.PriceWithSupport), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent());

            foreach (var bundleViewModel in model.BundlesViewModel.Bundles)
            {
                sourceCurrency = bundleViewModel.Currency.ConvertToCurrencyDto() ?? defaultCurrency;
                Bundle bundle = findBundlesResult.ClipToBundle.First(ctb => ctb.Key.ObjectId == bundleViewModel.ObjectId).Key;
                bundleViewModel.Clips = findBundlesResult.ClipToBundle[bundle].ToDto();
                bundleViewModel.ConvertedPrice = CurrencyConverter.Convert(float.Parse(bundleViewModel.Price), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent());
                bundleViewModel.ConvertedSupportPrice = CurrencyConverter.Convert(float.Parse(bundleViewModel.SupportPrice), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent());
                bundleViewModel.IsActive = bundle.GetPointerObject<ClipStatus>("status").Status == LessonStatus.Active.ToLower();

                float allClipsPrices = 0;
                foreach (var clip in bundleViewModel.Clips)
                {
                    sourceCurrency = clip.Currency ?? defaultCurrency;
                    var convertedClipPrice = CurrencyConverter.Convert(float.Parse(clip.Price), sourceCurrency, targetCurrency);
                    clip.ConvertedPrice = convertedClipPrice.ToCurrency(currencyRetriver.GetCurrent());
                    clip.ConvertedPriceWithSupport = CurrencyConverter.Convert(float.Parse(clip.PriceWithSupport), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent());
                    allClipsPrices += convertedClipPrice;
                    clip.ExistsInMultipleBundles = findBundlesResult.ClipToBundle.Count(x => x.Value.Select(_ => _.ObjectId).Contains(clip.ObjectId)) > 1;
                    clip.SelectedContentItem = clip.ObjectId == model.BundlesViewModel.ContentItem.ObjectId;
                    SetDisplayIncludeInActiveBundle(clip, currentUserId);
                }
                bundleViewModel.ConvertedPriceWithoutDiscount = allClipsPrices.ToCurrency(currencyRetriver.GetCurrent());
            }
        }
        private  void GetContentItems(LessonsViewModel model, ContentItemsRequest contentItemsRequest)
        {
            using (var repository = RepositoryFactory.GetInstance(Session))
            {
                var currencyRetriver = new CurrencyRetriver(HttpContext, Session, repository);
                var defaultCurrency = repository.FindDefaultCurrency();
                var currentUserId = Session.GetLoggedInUser() != null
                    ? Session.GetLoggedInUser().ObjectId
                    : string.Empty;

                contentItemsRequest.WorldId = _worldId;
                var lessonsData = repository.FindAggregatedBundlesAndClips(contentItemsRequest);
                model.ContentItems = lessonsData.Items;
                model.ItemsCount = lessonsData.Count;
                foreach (var contentItem in model.ContentItems)
                {
                    CurrencyDto source = contentItem.Currency ?? defaultCurrency;
                    CurrencyDto target = currencyRetriver.GetCurrent();
                    contentItem.ConvertedPrice = CurrencyConverter.Convert(float.Parse(contentItem.Price), source, target).ToCurrency(currencyRetriver.GetCurrent());
                    contentItem.ConvertedPriceWithSupport =CurrencyConverter.Convert(float.Parse(contentItem.PriceWithSupport), source, target).ToCurrency(currencyRetriver.GetCurrent());
                    SetDisplayIncludeInActiveBundle(contentItem, currentUserId);
                }
            }
            //  model.ItemsCount = lessonsData.Count;
        }
        public ActionResult SearchLessons(ContentItemsRequest request = null)
        {
            using (var repository = RepositoryFactory.GetInstance(Session))
            {
                var bundleStatusId = Request["StatusId"];
                var teacherName = Request["TeacherName"];
                var bundleStatus = repository.FindClipStatuses().SingleOrDefault(o => o.ObjectId == bundleStatusId);
                var isBundleActive = bundleStatus != null && bundleStatus.Status_en_us == BL.Consts.LessonStatus.Active;

                if (request != null)
                {
                    request.PageSize = -1;
                    request.ActiveStatusOnly = isBundleActive;
                    request.WorldId = _worldId;
                    request.category5 = teacherName;
                }

                var clips = repository.FindAllClips(request);
                var defaultCurrency = repository.FindDefaultCurrency();
                var minimalData = clips.Items.ToMinimalData().ToArray();
                var currencyRetriver = new CurrencyRetriver(HttpContext, Session, repository);

                foreach (var data in minimalData)
                {
                    CurrencyDto source = data.Currency ?? defaultCurrency;
                    CurrencyDto target = currencyRetriver.GetCurrent();
                    data.Price = CurrencyConverter.Convert(float.Parse(data.Price), source, target).ToString("0.00");
                }

                return PartialView("LessonsSearchResults", minimalData);
            }
        }