private void ValidateUserAuthorization(ShoppoingCartItemModel cartItemModel, StringsManager stringsManager) { var currentUser = Session.GetLoggedInUser(); if (currentUser == null) { cartItemModel.ErrorMessage = stringsManager.GetLocalizedString(Strings.UserNotRegistered); return; } if (currentUser.GetStatus() == UserStatusStrings.AppUser) { cartItemModel.ErrorMessage = stringsManager.GetLocalizedString(Strings.USerRegistrationIncomplete); cartItemModel.IsAppUser = true; return; } if (!currentUser.IsActive()) { cartItemModel.ErrorMessage = stringsManager.GetLocalizedString(Strings.UserNotActive); } }
private static bool BundleInvalid(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, string currentUserId, ref bool contentItemActive, ref bool canBeOrderedByTeacher, ref bool contentItemOwner, out Purchase existingPurchase, out ParseObject result) { Bundle bundle = Task.Run(() => repository.FindMinimalBundleById(cartItemModel.ContentItemId)).Result; existingPurchase = repository.FindPurchaseByContentIdAndUserId(cartItemModel.ContentItemId, currentUserId); contentItemActive = bundle.IsActive(); canBeOrderedByTeacher = bundle.CanBeOrderedByTeacher(currentUserId); result = bundle; contentItemOwner = currentUserId == bundle.Teacher.ObjectId; if (existingPurchase == null) { return false; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackagePurchased || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackageIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Bundle) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.BundleAlreadyPurchased); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoOrdered || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackageIsInBasket) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.BundleAlreadyInBasket); return true; } return false; }
private static bool LessonInvalid(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, out Purchase existingPurchase, string currentUserId, ref bool contentItemActive, ref bool canBeOrderedByTeacher, ref bool contentItemOwner, out ParseObject result) { Clip lesson = null; lesson = Task.Run(() => new ParseQuery<Clip>() .Include("status") .Include("currency") .GetAsync(cartItemModel.ContentItemId)).Result; existingPurchase = repository.FindPurchaseByContentIdAndUserId(lesson.ObjectId, currentUserId ); contentItemActive = lesson.IsActive(); canBeOrderedByTeacher = lesson.CanBeOrderedByTeacher(currentUserId); result = lesson; contentItemOwner = lesson.Teacher.ObjectId == currentUserId; if (existingPurchase == null) { return false; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonPurchased || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Lesson) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.LessonAlreadyPurchased); } if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoOrdered || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonIsInBaskert) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.LessonAlreadyInBasket); return true; } return false; }
private ParseObject ValidateContentItem(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, out Purchase existingPurchase, out string previosDemoId) { ParseObject result = new ParseObject(""); previosDemoId = ""; var isAdmin = Session.GetLoggedInUser() == null || Session.GetLoggedInUserRoleName() == Roles.Administrators.ToString(); var isLesson = cartItemModel.ContentItemType.Contains("lesson"); var isDemo = cartItemModel.ContentItemType.Contains("demo"); var contentItemActive = true; var canBeOrderedByTeacher = true; var currentUserId = Session.GetLoggedInUser().ObjectId; var contentItemOwner = false; if (isLesson) { if (LessonInvalid(cartItemModel, repository, stringManager, out existingPurchase, currentUserId, ref contentItemActive, ref canBeOrderedByTeacher, ref contentItemOwner, out result)) return null; } else { if (BundleInvalid(cartItemModel, repository, stringManager, currentUserId, ref contentItemActive, ref canBeOrderedByTeacher, ref contentItemOwner,out existingPurchase, out result)) return null; } if (!isAdmin && !contentItemOwner & !contentItemActive) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.ContentItemNotActive); return null; } if (!isAdmin && !canBeOrderedByTeacher) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.OrderByTeacherNotAllowed); return null; } return result; }
public async Task<ActionResult> GetFirstPageData(string contentItemType, string contentItemId) { Session.ClearPaymentSubmitted(); var cuponViewModel = new CreateCouponViewModel(); using (var repository = RepositoryFactory.GetInstance(Session)) { var currencyRetriever = new CurrencyRetriver(HttpContext, Session, repository); var stringsManager = new StringsManager(repository); var currentCurrency = currencyRetriever.GetCurrent(); string portalNamePart1; string portalNamePart2; double price; double supportPrice; CurrencyDto contentItemCurrency; ParseUser teacher; if (contentItemType == "lesson") { var clipDetailsDto = (repository.FindClipDetails(contentItemId)); portalNamePart1 = clipDetailsDto.GetLocalizedField("portalNamePart1"); portalNamePart2 = clipDetailsDto.GetLocalizedField("portalNamePart2"); teacher = clipDetailsDto.Teacher; price = Convert.ToDouble(clipDetailsDto.Price); supportPrice = Convert.ToDouble(clipDetailsDto.SupportPrice); contentItemCurrency = clipDetailsDto.Currency.ConvertToCurrencyDto(); cuponViewModel.ContentItemDetails.ClipId = clipDetailsDto.ObjectId; } else { var bundle = await repository.FindBundleById(contentItemId); portalNamePart1 = bundle.GetLocalizedField("bundleName"); portalNamePart2 = string.Empty; teacher = bundle.Teacher; price = bundle.Price; supportPrice = bundle.SupportPrice; contentItemCurrency = bundle.Currency.ConvertToCurrencyDto(); cuponViewModel.ContentItemDetails.BundleId = bundle.ObjectId; cuponViewModel.ContentItemDetails.BundleClipIds = bundle.ClipsInBundle.Select(o => o.ObjectId).ToArray(); } cuponViewModel.HelpText = stringsManager.GetLocalizedString(Strings.CouponHelp); cuponViewModel.ContentItemDetails.NamePart1 = portalNamePart1; cuponViewModel.ContentItemDetails.NamePart2 = portalNamePart2; cuponViewModel.TeacherData.TeacherEmailAddress = teacher.GetString("email"); cuponViewModel.TeacherData.Balance = teacher.GetPointerValue<double>("adminData", "balance"); cuponViewModel.TeacherData.Currency = (teacher.GetPointerObject<Currency>("currency")).ConvertToCurrencyDto(); cuponViewModel.TeacherData.LivesInIsrael = teacher.LivesInIsrael(repository); var agent = teacher.GetPointerObject<UserAdminData>("adminData").GetPointerObject<ParseUser>("agent"); cuponViewModel.TeacherData.AgentId =agent != null ? agent.ObjectId : string.Empty; await GetCouponDiscountCalculations(price, supportPrice, contentItemCurrency, currentCurrency, teacher, cuponViewModel); Session.SetCouponData(cuponViewModel); return Json(cuponViewModel, JsonRequestBehavior.AllowGet); } }
private BundleUpdateViewModel GetBundleInitViewModel(Bundle selectedBundle) { var model = new BundleUpdateViewModel(); var retriever = CategoryRetrieverFactory.GetInstance(_worldId); var categories = retriever.GetCategories(); using (var repository = RepositoryFactory.GetInstance(Session)) { var newStatus = repository.FindClipStatuses().Single(x => x.Status == LessonStatus.New); var stringManager = new StringsManager(repository); var status = selectedBundle != null ? selectedBundle.Status.ObjectId : newStatus.ObjectId; var clipStatusName = selectedBundle.GetLocalizedPointerValue("status", "status"); var teacherPublishingStatus = Session.GetLoggedInUser().GetPointerValue<ParseObject>("adminData", "userPublishingStatus").ObjectId; model.CategoryName1 = categories[0].Label; model.CategoryName2 = categories[1].Label; model.CategoryName3 = categories[2].Label; model.CategoryName4 = categories[3].Label; var emptyValue = new CategoryValuesDto { Value_en_us = MyMentorResources.phSelecteCategory, Value_he_il = MyMentorResources.phSelecteCategory, Key = string.Empty }; categories[0].Values.Insert(0, emptyValue); categories[1].Values.Insert(0, emptyValue); categories[2].Values.Insert(0, emptyValue); categories[3].Values.Insert(0, emptyValue); model.Category1Values = categories[0].Values.ToArray(); model.Category2Values = categories[1].Values.ToArray(); model.Category3Values = categories[2].Values.ToArray(); model.Category4Values = categories[3].Values.ToArray(); model.BundleTitleMask = stringManager.GetTemplate(_worldId, StringTemplates.BundleTitlePattern,Language.CurrentLanguageCode); model.LessonsExplanation = stringManager.GetLocalizedString(Strings.BundleLessonExplanation); model.StatusValues =repository.FindStatusOptionsByTeacherPublishingStatusAndClipStatus(teacherPublishingStatus, status,Session.GetLoggedInUserRoleName() == RoleNames.ADMINISTRATORS); if (selectedBundle != null) { if (!model.StatusValues.Any(item => item.Key == selectedBundle.Status.ObjectId)) { var statusValuesList = new List<KeyValuePair<string, string>>(model.StatusValues); statusValuesList.Insert(0, new KeyValuePair<string, string>(selectedBundle.Status.ObjectId, clipStatusName)); model.StatusValues = statusValuesList.ToArray(); } } return model; } }
//[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); } }
public ActionResult GetLessonsSearchData() { var model = new SearchLessonViewModel(); using (var repository = RepositoryFactory.GetInstance(Session)) { var stringManager = new StringsManager(repository); model.DescriptionPopupText = stringManager.GetLocalizedString(Strings.SearchDescriptionPopupText); return PartialView("LessonsSearch", model); } }
public async Task<JsonResult> SetContentItemMetaData(LessonUpdateViewModel model) { using (var repository = RepositoryFactory.GetInstance(Session)) { var response = new ServiceObjectResponse(); var existingLesson = repository.FindClipDetails(model.ObjectId); var existingLessonStatusId = existingLesson.Status.ObjectId; var existingLessonIsActive = existingLesson.Status.GetString("status_en_us") == LessonStatus.Active; var stringsManager = new StringsManager(repository); if (ValidateInputs(model, response)) { if (existingLessonIsActive && model.SelectedStatus != existingLessonStatusId) { var clipsBundles = repository.FindBundlesByClipId(model.ObjectId); if (clipsBundles.ClipToBundle.Any()) { var isInActiveBundle = clipsBundles.ClipToBundle.Keys.Any( o => o.Status.Status_en_us == LessonStatus.Active); if (isInActiveBundle) { response.Status = ServiceObjectResponse.Failure; response.StatusReason = stringsManager.GetLocalizedString(Strings.CannotChangeClipStatusInActiveBundle); return Json(response); } } } var teacher = await repository.FindUserByName(model.TeacherName); if (teacher == null) { response.Status = ServiceObjectResponse.Failure; response.StatusReason = MyMentorResources.updateBundleTeacherNotFound; return Json(response); } model.TeacherId = teacher.ObjectId; model.UserCurrency = new CurrencyRetriver(HttpContext, Session, repository).GetCurrent(); await repository.UpdateClipDetails(model, _worldId); response.Status = ServiceObjectResponse.Success; return Json(response); } response.Status = ServiceObjectResponse.Failure; response.StatusReason = string.IsNullOrEmpty(response.StatusReason) ? MyMentorResources.updateLessonGeneralError : response.StatusReason; return Json(response); } }