예제 #1
0
        public void CancelTeeTimeHandler(string teeTime, string userId, ISession session, string sessionKey, UserManager <ApplicationUser> userManager, ClaimsPrincipal user)
        {
            bool confirmation = false;
            var  allTeeTimes  = session.Get <IEnumerable <TeeTime> >(sessionKey);

            if (long.TryParse(teeTime, out long teeTimeTicks))
            {
                TeeTime    teeTimeToCancel = allTeeTimes?.FirstOrDefault(t => t.Datetime.Ticks == teeTimeTicks);
                Domain.CBS requestDirector = new Domain.CBS(userId, Startup.ConnectionString);

                if (teeTimeToCancel != null)
                {
                    if ((user.IsInRole("Golfer") && teeTimeToCancel.Golfers.Exists(q => q.UserId == userManager.GetUserId(user))) ||
                        teeTimeToCancel.Golfers.Exists(q => q.UserId == userId))
                    {
                        confirmation = requestDirector.CancelTeeTime(new DateTime(teeTimeTicks));
                    }
                }

                if (confirmation)
                {
                    session.SetString("success", $"{(teeTimeToCancel.ReservedBy == userId ? "Tee Time cancelled" : "Golfer removed ")} successfully");
                }
            }
            else
            {
                session.SetString("danger", "Tee time could not be canceled");
            }
        }
        public IActionResult OnPostGetMembershipApplications([FromForm] string startDate, [FromForm] string endDate)
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            if (!DateTime.TryParse(startDate, out DateTime startDateDate) || !DateTime.TryParse(endDate, out DateTime endDateDate))
            {
                MembershipApplications = HttpContext.Session.Get <List <MembershipApplication> >(nameof(MembershipApplications));
            }
            else
            {
                if (startDateDate.Ticks == 0 || endDateDate.Ticks == 0)
                {
                    if (startDateDate.Ticks == 0)
                    {
                        ModelState.AddModelError(string.Empty, "Please select a valid start date");
                    }
                    if (EndDate.Ticks == 0)
                    {
                        ModelState.AddModelError(string.Empty, "Please select a valid start date");
                    }
                    return(Page());
                }
                StartDate = startDateDate;
                EndDate   = endDateDate;
                MembershipApplications = requestDirector.GetMembershipApplications(StartDate, EndDate);
            }

            HttpContext.Session.Put(nameof(MembershipApplications), MembershipApplications);
            TempData.Keep();
            return(Partial("_MembershipApplicationsPartial", MembershipApplications));
        }
 public void OnPostView(string startDate, string endDate)
 {
     if (DateTime.TryParse(startDate, out DateTime sd) && DateTime.TryParse(endDate, out DateTime ed))
     {
         StartDate = sd;
         if ((DateTime.Today.AddDays(8) - StartDate).Days > 0)
         {
             ErrorMessages.Add($"Start Date must be beyond { DateTime.Today.AddDays(7).ToLongDateString()}");
         }
         if (ed.Ticks > 0)
         {
             EndDate = ed;
             if (StartDate.DayOfWeek != EndDate.DayOfWeek)
             {
                 ErrorMessages.Add($"Day of week for Start Date ({StartDate.DayOfWeek.ToString()}) does not match day of week for End Date({EndDate.DayOfWeek.ToString()})");
             }
         }
         else
         {
             ErrorMessages.Add("Please select an End Date");
         }
         if (!(ErrorMessages?.Any() ?? false))
         {
             TempData[nameof(StartDate)] = StartDate;
             TempData[nameof(EndDate)]   = EndDate;
             Domain.CBS requestDirector = new Domain.CBS(userManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult().Id,
                                                         Startup.ConnectionString);
             STTRequests = requestDirector.ViewStandingTeeTimeRequests(StartDate, EndDate);
             TempData.Put("PermissableTimes", from time in STTRequests where time.Members is null select time.RequestedTime.ToString("HH:mm"));
             return;
         }
     }
     TempData.Put(nameof(ErrorMessages), ErrorMessages);
 }
예제 #4
0
 private void GetReservedTeeTimes(string userId)
 {
     Domain.CBS requestDirector = new Domain.CBS(userId ?? "",
                                                 Startup.ConnectionString);
     reservedTeeTimes = requestDirector.FindReservedTeeTimes();
     HttpContext.Session.Put(nameof(reservedTeeTimes), reservedTeeTimes);
 }
예제 #5
0
 public IActionResult OnGet()
 {
     Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
     if (requestDirector.FindStandingTeeTimeRequest(userManager.GetUserId(User)) is null)
     {
         return(NotFound());
     }
     return(Page());
 }
        public void OnGet()
        {
            StartDate = DateTime.Today.AddDays(-30);
            EndDate   = DateTime.Today;

            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            MembershipApplications = requestDirector.GetMembershipApplications(StartDate, EndDate);
            HttpContext.Session.Put(nameof(MembershipApplications), MembershipApplications);
            TempData.Keep();
        }
예제 #7
0
        public void UpdateTeeTimeHelper(string[] golfers, bool checkedIn, TeeTime teeTimeToUpdate, UserManager <ApplicationUser> userManager, string phone, int numberOfCarts, out bool confirmation, out string message)
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);

            List <string> updatedGolfers = golfers.Length > 4 - teeTimeToUpdate.Golfers.Count ? golfers.ToList()
                                           .GetRange(0, 4 - teeTimeToUpdate.Golfers.Count) : golfers.ToList();

            updatedGolfers = (from user in userManager.Users where updatedGolfers.Contains(user.MemberNumber) select user.Id).ToList();

            confirmation = requestDirector.UpdateTeeTime(teeTimeToUpdate.Datetime, phone, numberOfCarts,
                                                         updatedGolfers, checkedIn, out message);
        }
        public IActionResult OnPostSelect(string selectedTime)
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            if (requestDirector.FindStandingTeeTimeRequest(userManager.GetUserId(User)) != null)
            {
                return(Redirect("/MaxStandingTeeTimeRequest"));
            }

            Confirmation             = false;
            TempData["selectedTime"] = selectedTime;
            return(Redirect($"/StandingTeeTimeRequests?selectedTime={System.Web.HttpUtility.UrlEncode(selectedTime)}"));
        }
예제 #9
0
        public IActionResult OnPostView()
        {
            foreach (var item in ModelState)
            {
                if (item.Key == nameof(Date) && item.Value.ValidationState == Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid)
                {
                    ErrorMessages.Add(item.Value.Errors.FirstOrDefault().ErrorMessage);
                    TempData.Put(nameof(ErrorMessages), ErrorMessages);
                    return(Redirect(Request.Headers["Referer"].ToString()));
                }
            }
            Confirmation = false;

            Domain.CBS requestDirector = null;
            if (!User.IsInRole("Golfer"))
            {
                requestDirector = new Domain.CBS(Startup.ConnectionString);
            }
            else
            {
                requestDirector = new Domain.CBS(GetUserId(), Startup.ConnectionString);
            }
            DailyTeeSheet = requestDirector.ViewDailyTeeSheet(Date);

            if (User.IsInRole("Golfer"))
            {
                DailyTeeSheet.TeeTimes = requestDirector.FilterDailyTeeSheet(Date, DailyTeeSheet.TeeTimes).ToList();
            }
            HttpContext.Session.Put("AllTeeTimes", DailyTeeSheet.TeeTimes);


            IEnumerable <TeeTime> reservedTeeTimes = null;

            if (User.IsInRole("Golfer"))
            {
                reservedTeeTimes = requestDirector.FindReservedTeeTimes().Where(t => (t.Datetime.Date - DateTime.Today).TotalDays > 0);
            }
            else
            {
                reservedTeeTimes = from teeTime in DailyTeeSheet.TeeTimes
                                   where !(teeTime.Golfers is null) &&
                                   (teeTime.Datetime - DateTime.Now).TotalDays > 0
                                   select teeTime;
            }

            HttpContext.Session.Put(nameof(reservedTeeTimes), reservedTeeTimes);

            TempData.Put("PermissableTimes", (from teeTime in DailyTeeSheet.TeeTimes
                                              where (teeTime.Golfers is null || teeTime.Golfers.Count != 4) && teeTime.Reservable && IsValidDate(teeTime.Datetime)
                                              select teeTime.Datetime).Except(from time in reservedTeeTimes select time.Datetime));
            return(Page());
        }
예제 #10
0
        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            #region CreateMembershipApplication
            MembershipApplication membershipApplication = new MembershipApplication(Startup.ConnectionString);
            membershipApplication.ProspectiveMemberContactInfo = new ContactInformation()
            {
                LastName       = LastName,
                FirstName      = FirstName,
                Address        = ApplicantAddress,
                City           = ApplicantCity,
                PostalCode     = ApplicantPostalCode,
                PrimaryPhone   = ApplicantPhone,
                AlternatePhone = ApplicantAlternatePhone,
                Email          = Email
            };
            membershipApplication.DateOfBirth       = DateOfBirth;
            membershipApplication.MembershipType    = MembershipType;
            membershipApplication.Occupation        = Occupation;
            membershipApplication.EmploymentDetails = new ContactInformation()
            {
                CompanyName  = CompanyName,
                Address      = EmployerAddress,
                City         = EmployerCity,
                PostalCode   = EmployerPostalCode,
                PrimaryPhone = EmployerPhone
            };

            membershipApplication.ProspectiveMemberCertification = ProspectiveMemberCertification;
            membershipApplication.Shareholder1             = Shareholder1;
            membershipApplication.Shareholder1SigningDate  = Shareholder1SigningDate;
            membershipApplication.Shareholder2             = Shareholder2;
            membershipApplication.Shareholder2SigningDate  = Shareholder2SigningDate;
            membershipApplication.ShareholderCertification = ShareholderCertification;
            #endregion

            if (requestDirector.RecordMembershipApplication(membershipApplication))
            {
                HttpContext.Session.SetString("success", "Membership application recorded successfully");
                return(RedirectToPage());
            }

            ModelState.AddModelError(string.Empty, "Membership application could not be recorded");
            return(Page());
        }
예제 #11
0
 public void CheckInHelper(string teeTime, string userId, ISession session)
 {
     if (long.TryParse(teeTime, out long teeTimeTicks))
     {
         Domain.CBS requestDirector = new Domain.CBS(userId, Startup.ConnectionString);
         if (requestDirector.UpdateTeeTime(new DateTime(teeTimeTicks), null, null, new List <string>(), true, out string message))
         {
             session.SetString("success", "Tee time checked in successfully");
         }
     }
     else
     {
         session.SetString("danger", "Failed to check in tee time");
     }
 }
예제 #12
0
        public IActionResult OnPostCancel()
        {
            FoundStandingTeeTime = HttpContext.Session.Get <StandingTeeTime>(nameof(FoundStandingTeeTime));

            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            if (requestDirector.CancelStandingTeeTime(FoundStandingTeeTime.StartDate, FoundStandingTeeTime.EndDate, FoundStandingTeeTime.RequestedTime))
            {
                HttpContext.Session.SetString("success", "Standing tee time request cancelled succcessfully");
            }
            else
            {
                HttpContext.Session.SetString("danger", "Standing tee time request could not be cancelled");
            }
            return(LocalRedirect("/"));
        }
예제 #13
0
        public void OnGet()
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            if (User.IsInRole("Golfer"))
            {
                FoundHandicapReport = requestDirector.GetHandicapReport(User.Identity.Name, ReportDate);
            }

            var allHandicapReports = requestDirector.GetAllHandicapReports();

            if (allHandicapReports != null)
            {
                HttpContext.Session.Put("AllHandicapReports", from report in allHandicapReports select new { report.MemberName, report.Email, report.HandicapFactor, report.Average, report.BestOfTenAverage, report.LastUpdated });
                FilteredHandicapReports = HttpContext.Session.Get <IEnumerable <dynamic> >("AllHandicapReports").Where(r => r["LastUpdated"].Value.Month == ReportDate.Month &&
                                                                                                                       r["LastUpdated"].Value.Year == ReportDate.Year && r["Email"].Value != User.Identity.Name);
            }
        }
        public IActionResult OnPost(string email, DateTime lastUpdated)
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            FoundHandicapReport = requestDirector.GetHandicapReport(email, lastUpdated);
            if (FoundHandicapReport is null)
            {
                return(NotFound());
            }

            BestOfLabel = "Best of " + (new int[] { 5, 6 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "1" :
                                        new int[] { 7, 8 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "2" :
                                        new int[] { 9, 10 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "3" :
                                        new int[] { 11, 12 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "4" :
                                        new int[] { 13, 14 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "5" :
                                        new int[] { 15, 16 }.Contains(FoundHandicapReport.PreviousRounds.Length) ? "6" :
                                        FoundHandicapReport.PreviousRounds.Length == 17 ? "7" :
                                        FoundHandicapReport.PreviousRounds.Length == 18 ? "8" :
                                        FoundHandicapReport.PreviousRounds.Length == 19 ? "9" : "10") + " rounds:";
            return(Page());
        }
예제 #15
0
        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                HoleByHoleScores = new int?[18];
                return(Page());
            }

            if (NumberOfHoles != 18 && NumberOfHoles != 9)
            {
                ModelState.AddModelError(string.Empty, "Holes per round must be 9 or 18");
                return(Page());
            }

            ScoreCard providedScores = new ScoreCard(Course, CourseRating, CourseSlope, Date, User.Identity.Name,
                                                     HoleByHoleScores.Where(s => !(s is null)).Cast <int>().ToList());

            if (providedScores.HoleByHoleScore.Count != NumberOfHoles)
            {
                ModelState.AddModelError(string.Empty, $"Exactly {NumberOfHoles} scores must be recored for a {NumberOfHoles} round of golf. {providedScores.HoleByHoleScore.Count} scores were provided. " +
                                         $"If a hole is not played, record par plus any handicap to which you are entitled for the remaining holes.");
                return(Page());
            }

            bool confirmation = new Domain.CBS(Startup.ConnectionString).RecordScores(providedScores, out string message);

            if (confirmation)
            {
                HttpContext.Session.SetString("success", $"Scores recorded successfully{(string.IsNullOrWhiteSpace(message) ? ". Handicap report updated successfully" : "")}");
                if (!string.IsNullOrWhiteSpace(message))
                {
                    HttpContext.Session.SetString("warning", message);
                }
                return(RedirectToPage());
            }

            ModelState.AddModelError(string.Empty, message.Contains("PRIMARY KEY") ? $"Cannot add duplicate socrecard entry. A scorecard already exists on {Date.ToString("dd-MMM-yyyy")}" : message);
            return(Page());
        }
        public PartialViewResult OnPostFilter([FromForm] int?applicationStatus)
        {
            MembershipApplications = new Domain.CBS(Startup.ConnectionString).GetMembershipApplications(StartDate, EndDate);
            TempData.Keep();
            if (applicationStatus is null)
            {
                return(Partial("_MembershipApplicationsPartial", MembershipApplications));
            }

            try
            {
                (from int enumValue in Enum.GetValues(typeof(TechnicalServices.ApplicationStatus)) where enumValue == applicationStatus select enumValue).First();
            }
            catch (InvalidOperationException)
            {
                return(Partial("_MembershipApplicationsPartial", MembershipApplications));
            }

            MembershipApplications = HttpContext.Session.Get <List <MembershipApplication> >(nameof(MembershipApplications));
            MembershipApplications = new Domain.CBS(Startup.ConnectionString)
                                     .FilterMembershipApplications(MembershipApplications, (TechnicalServices.ApplicationStatus)applicationStatus);

            return(Partial("_MembershipApplicationsPartial", MembershipApplications));
        }
예제 #17
0
        public IActionResult OnPostReserve(string[] golfers)
        {
            if (!ModelState.IsValid)
            {
                foreach (var e in from err in ModelState.Values where err.Errors.Count > 0 select err)
                {
                    ErrorMessages.Add(e.Errors.FirstOrDefault()?.ErrorMessage);
                }
                TempData.Put(nameof(ErrorMessages), ErrorMessages);
                return(Redirect(Request.Headers["Referer"].ToString()));
            }
            Confirmation = false;

            Domain.CBS requestDirector = null;

            string userId = "";

            if (User.IsInRole("Golfer"))
            {
                userId = GetUserId();
            }
            else
            {
                userId = GetUserId(golfers.FirstOrDefault());

                if (userId is null)
                {
                    ErrorMessages.Add($"Supplied member Number {golfers.FirstOrDefault()} does not exist");
                    Confirmation = false;
                    TempData.Put(nameof(ErrorMessages), ErrorMessages);
                    return(Redirect(Request.Headers["Referer"].ToString()));
                }
                requestDirector = new Domain.CBS(userId, Startup.ConnectionString);
                var filteredTeeTimes = requestDirector.FilterDailyTeeSheet((DateTime)TempData.Peek(nameof(Date)),
                                                                           HttpContext.Session.Get <IEnumerable <TeeTime> >("AllTeeTimes"));

                if (!filteredTeeTimes.FirstOrDefault(t => t.Datetime == (DateTime)TempData.Peek(nameof(Date)))?.Reservable ?? false)
                {
                    ErrorMessages.Add($"Cannot reserve tee time for member {golfers.FirstOrDefault()} due to membership level conflict.");
                    Confirmation = false;
                    TempData.Put(nameof(ErrorMessages), ErrorMessages);
                    return(Redirect(Request.Headers["Referer"].ToString()));
                }
            }

            requestDirector = new Domain.CBS(userId, Startup.ConnectionString);

            //Gather the names, UserId's and member number together. Need to see of the userId was not found, indicating an invalid entry
            var golfersToAdd = from suppliedMember in golfers
                               join user in UserManager.Users on suppliedMember equals user.MemberNumber into foundMembers
                               from subMember in foundMembers.DefaultIfEmpty() where subMember?.Id != userId
                               select(subMember?.MemberName, UserId : subMember?.Id, SuppliedNumber : suppliedMember);

            //Check for invalid members
            if (golfersToAdd.Any(g => g.UserId is null))
            {
                ErrorMessages.Add("One or more supplied members do not exist");
                Confirmation = false;
                TempData.Put(nameof(ErrorMessages), ErrorMessages);
                return(Redirect(Request.Headers["Referer"].ToString()));
            }

            //Ensure that signed in user is added to this tee time

            var teeTimeOwner = UserManager.FindByIdAsync(userId).GetAwaiter().GetResult();

            golfersToAdd = golfersToAdd.Append((teeTimeOwner.MemberName, teeTimeOwner.Id, teeTimeOwner.MemberNumber));


            if (!requestDirector.ReserveTeeTime(new TeeTime()
            {
                Golfers = (from golfer in golfersToAdd select(golfer.MemberName, golfer.UserId ?? golfer.SuppliedNumber)).ToList(),
                Datetime = (DateTime)TempData.Peek(nameof(Date)),
                NumberOfCarts = NumberOfCarts,
                Phone = Phone,
                ReservedBy = userId
            }, out string error))
예제 #18
0
 public void OnGet()
 {
     Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
     FoundStandingTeeTime = requestDirector.FindStandingTeeTimeRequest(userManager.GetUserId(User));
     HttpContext.Session.Put(nameof(FoundStandingTeeTime), FoundStandingTeeTime);
 }
        public IActionResult OnPostSubmit()
        {
            Domain.CBS requestDirector = new Domain.CBS(Startup.ConnectionString);
            if (requestDirector.FindStandingTeeTimeRequest(userManager.GetUserId(User)) != null)
            {
                return(Redirect("/MaxStandingTeeTimeRequest"));
            }

            ErrorMessages.Clear();
            bool isError = false;
            var  errors  = from error in ModelState
                           where (error.Key == nameof(SuppliedMemberNumbers) || error.Key == nameof(StartDate) || error.Key == nameof(EndDate)) &&
                           error.Value.ValidationState == Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid && error.Value.Errors.Any()
                           select error.Value.Errors;

            if (errors.Any())
            {
                ErrorMessages.AddRange(from errorMessage in errors select errorMessage into messages from m in messages select m.ErrorMessage);
                isError = true;
            }

            var signedInMember = userManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult();

            requestDirector = new Domain.CBS(signedInMember.Id, Startup.ConnectionString);

            StartDate = (DateTime)TempData.Peek(nameof(StartDate));
            EndDate   = (DateTime)TempData.Peek(nameof(EndDate));
            StandingTeeTime requestedStandingTeeTime = new StandingTeeTime()
            {
                StartDate = StartDate, EndDate = EndDate, RequestedTime = DateTime.Parse(TempData.Peek("selectedTime").ToString())
            };

            SuppliedMemberNumbers = SuppliedMemberNumbers.Where(s => !string.IsNullOrEmpty(s)).ToArray();

            for (int i = 0; i < SuppliedMemberNumbers.Length; i++)
            {
                SuppliedMemberNumbers[i] = SuppliedMemberNumbers[i].Trim();
            }
            var userIds = (from user in dbContext.Users where SuppliedMemberNumbers.Contains(user.MemberNumber) select user.Id).ToList();

            if (userIds.Count() != SuppliedMemberNumbers.Count())
            {
                ErrorMessages.Add("One or more supplied member numbers do not exist");
                isError = true;
            }

            if (SuppliedMemberNumbers.Contains(signedInMember.MemberNumber))
            {
                ErrorMessages.Add("Do not enter your own member number");
                isError = true;
            }

            if (StartDate.DayOfWeek != EndDate.DayOfWeek)
            {
                ErrorMessages.Add($"Day of week for start date ({StartDate.DayOfWeek}) must match day of week for end date ({EndDate.DayOfWeek})");
                isError = true;
            }

            string currentUser = userManager.GetUserId(User);

            requestedStandingTeeTime.Members     = userIds.Append(currentUser).ToList();
            requestedStandingTeeTime.SubmittedBy = userManager.GetUserId(User);

            if (isError)
            {
                TempData.Put(nameof(ErrorMessages), ErrorMessages);
                return(Redirect(Request.Headers["Referer"]));
            }

            if (!requestDirector.RequestStandingTeeTime(requestedStandingTeeTime, out string message))
            {
                ErrorMessages.Add(message);
                TempData.Put(nameof(ErrorMessages), ErrorMessages);
                return(Redirect(Request.Headers["Referer"]));
            }
            Confirmation = true;
            return(Page());
        }