// // GET: /MyAccount/ public async Task<ActionResult> Index(MyAccountRequest request) { using (IMyMentorRepository repository = RepositoryFactory.GetInstance(Session)) { await MyMentorUserManager.LoginWithAuthCookie(Session, HttpContext, repository); var user = Session.GetLoggedInUser(); if (user == null) return RedirectToAction("login", "Account"); if (user.GetStatus() == UserStatusStrings.AppUser) return RedirectToAction("UpdateStudent", "Account"); var model = await GetMyAccountVm(request, repository); SetDates(model); request.Asc = request.Asc.HasValue ? request.Asc : true; var entities = repository.FindEntities().ToArray(); var eventTypes = repository.FindEventTypes().ToArray(); var transactionTypes = repository.FindAllTransactionTypes().ToArray(); var couponTypes = repository.FindCouponTypes(); var supportTypes = repository.FindSupportTypes(); var couponStatuses = repository.FindCouponStatus(); var pageCount = 0; var nisCurrencySymbol = repository.FindDefaultCurrency().CurrencySymbol; if (string.IsNullOrEmpty(request.Eid)) { var accountStatements =repository.FindAccountStatementsForUser(request, out pageCount).ToArray(); var purchaseStatuses = repository.FindPurchaseStatues().ToArray(); var clipStatuses = repository.FindClipStatuses(); var events = accountStatements.Select(x => x.Event); var purchases = repository.FindPurchasesByEvents(events); model.AccountStatements = GetAccountStatements(accountStatements, entities, eventTypes, transactionTypes, couponTypes, supportTypes, couponStatuses, nisCurrencySymbol, purchases, clipStatuses, purchaseStatuses); if (accountStatements.Any()) { var accountStatement = accountStatements.First(); model.PrevBalance = accountStatement.PrevBalance.ToCurrency(accountStatement.Currency.CurrencySymbol); model.PrevBalanceNis = accountStatement.PrevBalanceNIS.ToCurrency(nisCurrencySymbol); } } else { model.AccountStatements = GetStatementsByEventId(request.Eid, repository, entities, couponStatuses, eventTypes, transactionTypes, couponTypes, supportTypes, nisCurrencySymbol); } model.PageCount = pageCount; model.ShowAdminView = Session.GetLoggedInUserRoleName() == RoleNames.ADMINISTRATORS || !string.IsNullOrEmpty(Session.GetImpersonatingUserName()); return View("index", model); } }
private async Task<MyAccountViewModel> GetMyAccountVm(MyAccountRequest request, IMyMentorRepository repository) { var model = new MyAccountViewModel {MyAccountRequest = request}; var isAdmin = Session.GetLoggedInUserRoleName() == RoleNames.ADMINISTRATORS || !string.IsNullOrEmpty(Session.GetImpersonatingUserName()); var currentUser = Session.GetLoggedInUser(); var isFirstTimeInPage = Request.QueryString.AllKeys.All(x => x.ToLower() != "uid" && x.ToLower() != "pn"); var userManager = new MyMentorUserManager(repository, Session, HttpContext); if (isAdmin && currentUser.Username != request.Uid && !isFirstTimeInPage) { if (!string.IsNullOrEmpty(request.Uid)) { var user = await repository.FindUserByUserName(request.Uid); if (user != null) { model.ErrorMessage = string.Empty; model.UserName = user.UserName; model.UserDispalyName =string.Concat(user.GetLocalizedField("FirstName") ," ", user.GetLocalizedField("LastName")); model.MyAccountRequest.Uid = user.ObjectId; if (Session.GetImpersonatingUserName() != model.UserName) await userManager.ImpersonateUser(user.UserName); else userManager.StopImpersonation(); } else { model.ErrorMessage = MyMentorResources.userNameDoesNotExist; } } else { userManager.StopImpersonation(); } } else { model.UserName = currentUser.Username; model.UserDispalyName = currentUser.GetFullName(Language.CurrentLanguageCode); model.MyAccountRequest.Uid = currentUser.ObjectId; } return model; }