Example #1
0
        public async Task <IActionResult> OnPostAddSubscriptionAsync(string userId, SubscriptionDTO subscription)
        {
            var memberByUserSpec = new MemberByUserIdSpec(userId);
            var member           = await _repository.GetAsync(memberByUserSpec);

            if (member == null)
            {
                member = await _memberRegistrationService.RegisterMemberAsync(userId);
            }

            var subscriptionByMemberSpec = new SubscriptionsByMemberSpec(member.Id);
            var subscriptionsFromDb      = await _repository.ListAsync(subscriptionByMemberSpec);

            // return error message if new subscription overlaps an existing subscription
            foreach (var subscriptionFromDb in subscriptionsFromDb)
            {
                if ((subscription.StartDate >= subscriptionFromDb.Dates.StartDate && subscription.StartDate <= subscriptionFromDb.Dates.EndDate) ||
                    (subscription.EndDate >= subscriptionFromDb.Dates.StartDate && subscription.EndDate <= subscriptionFromDb.Dates.EndDate))
                {
                    ModelState.AddModelError("OverlappingSubscription", "Subscriptions cannot overlap");
                    return(BadRequest(ModelState));
                }
            }

            try
            {
                await _repository.AddAsync(new Subscription()
                {
                    Dates = new DateTimeRange(subscription.StartDate, subscription.EndDate), MemberId = member.Id
                });
            }

            //DateTimeRange throws an error if EndDate is prior to StartDate
            catch (ArgumentException e)
            {
                ModelState.AddModelError("InvalidSubscription", e.Message);
                return(BadRequest(ModelState));
            }

            return(RedirectToPage("./User", new { userId = userId }));
        }
Example #2
0
        public async Task <IActionResult> OnGetAsync(string userId)
        {
            if (string.IsNullOrEmpty(userId))
            {
                NotFound();
            }

            var currentUser = await _userManager.Users.FirstOrDefaultAsync(x => x.Id == userId);

            if (currentUser == null)
            {
                return(BadRequest());
            }

            var roles = await _roleManager.Roles.ToListAsync();

            var unassignedRoles = new List <IdentityRole>();
            var assignedRoles   = new List <IdentityRole>();

            foreach (var role in roles)
            {
                if (!(await _userManager.GetUsersInRoleAsync(role.Name)).Contains(currentUser))
                {
                    unassignedRoles.Add(role);
                }
                else
                {
                    assignedRoles.Add(role);
                }
            }

            IdentityUser           = currentUser;
            RolesNotAssignedToUser = unassignedRoles.Select(x => new SelectListItem(x.Name, x.Id)).ToList();
            Roles = assignedRoles.ToList();

            var memberByUserSpec = new MemberByUserIdSpec(userId);
            var member           = await _repository.GetAsync(memberByUserSpec);

            var subscriptions = new List <Subscription>();

            if (member != null)
            {
                var subscriptionByMemberSpec = new SubscriptionsByMemberSpec(member.Id);
                subscriptions = await _repository.ListAsync(subscriptionByMemberSpec);

                foreach (var subscription in subscriptions)
                {
                    Subscriptions.Add(new SubscriptionDTO()
                    {
                        Id        = subscription.Id,
                        StartDate = subscription.Dates.StartDate,
                        EndDate   = subscription.Dates.EndDate,
                    });

                    var totalDaysInSubscription = subscription.Dates.EndDate != null ? ((DateTime)subscription.Dates.EndDate - subscription.Dates.StartDate).TotalDays : (DateTime.Today - subscription.Dates.StartDate).TotalDays;
                    TotalDaysInAllSubscriptions += totalDaysInSubscription;
                }
            }

            return(Page());
        }