public async Task <IHttpActionResult> GenerateGuestCode([FromBody] GuestCodeRequest codeRequest)
        {
            var guestCode = new GuestCode();

            guestCode.GuestCode1 = GuestCodeGenerator.RandomString(6);
            guestCode.UseLimit   = codeRequest.UseCount ?? 1;

            if (codeRequest.GuestId != null)
            {
                Guest guest = await db.Guests.FindAsync(codeRequest.GuestId);

                if (guest == null)
                {
                    return(NotFound());
                }

                guestCode.GuestId  = guest.GuestId;
                guestCode.UseLimit = codeRequest.GuestId ?? guest.MaxAllowed;
            }

            db.GuestCodes.Add(guestCode);

            await db.SaveChangesAsync();

            db.Entry(guestCode).State = EntityState.Detached;

            return(Ok(guestCode));
        }
예제 #2
0
        static void Main(string[] args)
        {
            HotelCode    hotelCode    = new HotelCode();
            GuestCode    guestCode    = new GuestCode("Guests");
            RoomCode     roomCode     = new RoomCode("Rooms");
            BookingCode  bookingCode  = new BookingCode("Bookings");
            FacilityCode facilityCode = new FacilityCode("Facilities");

            hotelCode.DoTheStuff();
            guestCode.DoTheStuff();
            roomCode.DoTheStuff();
            bookingCode.DoTheStuff();
            facilityCode.DoTheStuff();

            KeepConsoleWindowOpen();
        }
예제 #3
0
        public ActionResult RegisterGuest(RegisterGuestViewModel vm)
        {
            var db          = new WeddingManagementContext();
            var userManager = new UserManager <User, int>(new UserStore <User, UserRole, int, UserLogin, UserUserRole, UserClaim>(new WeddingManagementContext()));

            string requestedGuestCode = (vm.GuestCode ?? string.Empty).ToUpper();

            GuestCode dbCode = db.GuestCodes.FirstOrDefault(gc => gc.GuestCode1.ToUpper() == requestedGuestCode);

            if (dbCode == null)
            {
                ModelState.AddModelError("GuestCode", "Guest code not found!");
            }
            else if (db.Users.Count(u => u.Claims.Any(c => c.ClaimType == "GuestCode" && c.ClaimValue == requestedGuestCode)) > dbCode.UseLimit)
            {
                ModelState.AddModelError("GuestCode", "Exceeded use allowance!");
            }

            if (ModelState.IsValid)
            {
                // TODO: Save guest code claim.
                // TODO: Redirect to requested url in session.

                userManager.AddClaim(User.Identity.GetUserId <int>(), new Claim("GuestCode", dbCode.GuestCode1));
                var identity = new ClaimsIdentity(User.Identity);
                identity.AddClaim(new Claim("GuestCode", dbCode.GuestCode1));

                if (Session["RegisterGuestReturn"] != null)
                {
                    return(Redirect(Session["RegisterGuestReturn"].ToString()));
                }
                else
                {
                    return(RedirectToAction("Index", "Home"));
                }
            }
            else
            {
                return(View(vm));
            }
        }
        public async Task <IHttpActionResult> GenerateAllGuestCodes()
        {
            IEnumerable <Guest> guests = db.Guests.AsNoTracking().ToList();

            foreach (Guest guest in guests)
            {
                if (!db.GuestCodes.Any(gc => gc.GuestId == guest.GuestId))
                {
                    var guestCode = new GuestCode();
                    guestCode.GuestCode1 = GuestCodeGenerator.RandomString(6);
                    guestCode.GuestId    = guest.GuestId;
                    guestCode.UseLimit   = guest.MaxAllowed;
                    guestCode.GuestId    = guest.GuestId;

                    db.GuestCodes.Add(guestCode);

                    await db.SaveChangesAsync();
                }
            }

            return(Ok());
        }
예제 #5
0
        public ActionResult RSVP(RsvpViewModel viewModel)
        {
            var identity = Thread.CurrentPrincipal as ClaimsPrincipal;

            string    guestCode = null;
            GuestCode dbCode    = null;
            Guest     dbGuest   = null;

            using (var db = new WeddingManagementContext())
            {
                viewModel.GuestCode = (viewModel.GuestCode ?? string.Empty).ToUpper();

                dbCode = db.GuestCodes.FirstOrDefault(gc => gc.GuestCode1.ToUpper() == viewModel.GuestCode);

                if (dbCode != null && dbCode.GuestId != null)
                {
                    dbGuest = db.Guests.FirstOrDefault(g => g.GuestId == dbCode.GuestId);

                    if (dbGuest != null)
                    {
                        if (viewModel.Attending == true)
                        {
                            if (viewModel.NumberOfGuests <= 0)
                            {
                                ModelState.AddModelError("NumberOfGuests", "We need to know how many people are attending.");
                            }

                            if (viewModel.NumberOfGuests > dbGuest.MaxAllowed)
                            {
                                ModelState.AddModelError("NumberOfGuests", "Too many people attending.");
                            }
                        }
                        else if (viewModel.Attending == null)
                        {
                            ModelState.AddModelError("Attending", "We need to know if you plan to attend.");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("GuestCode", "No guest found for this guest code.");
                    }
                }
                else
                {
                    ModelState.AddModelError("GuestCode", "Invalid guest code.");
                }

                if (ModelState.IsValid)
                {
                    db.Entry(dbGuest).State = System.Data.Entity.EntityState.Modified;

                    dbGuest.RSVPFlag = true;

                    if (viewModel.Attending == true)
                    {
                        dbGuest.NumberAttending = viewModel.NumberOfGuests;
                    }
                    else
                    {
                        dbGuest.NumberAttending = -1;
                    }

                    db.SaveChanges();

                    return(View("RSVP_Confirmed", viewModel));
                }
                else
                {
                    return(View(viewModel));
                }
            }
        }
예제 #6
0
        public ActionResult RSVP()
        {
            var vm = new RsvpViewModel();

            var identity = Thread.CurrentPrincipal as ClaimsPrincipal;

            string    guestCode = null;
            GuestCode dbCode    = null;

            using (var db = new WeddingManagementContext())
            {
                if (identity.HasClaim(c => c.Type == "GuestCode"))
                {
                    guestCode = identity.FindFirst("GuestCode").Value.ToUpper();

                    dbCode = db.GuestCodes.FirstOrDefault(gc => gc.GuestCode1.ToUpper() == guestCode);
                }
                else
                {
                    int userId = User.Identity.GetUserId <int>();

                    UserClaim guestCodeClaim = db.Users.FirstOrDefault(u => u.Id == userId).Claims.FirstOrDefault(c => c.ClaimType == "GuestCode");

                    if (guestCodeClaim != null)
                    {
                        dbCode = db.GuestCodes.FirstOrDefault(gc => gc.GuestCode1.ToUpper() == guestCodeClaim.ClaimValue.ToUpper());
                    }
                }


                if (dbCode != null)
                {
                    vm.GuestCode = dbCode.GuestCode1;

                    if (dbCode.GuestId != null)
                    {
                        Guest dbGuest = db.Guests.FirstOrDefault(g => g.GuestId == dbCode.GuestId);

                        if (dbGuest != null)
                        {
                            vm.Name = dbGuest.Name;

                            vm.AllowedGuests = dbGuest.MaxAllowed;

                            if (dbGuest.RSVPFlag)
                            {
                                vm.Attending = dbGuest.NumberAttending >= 0;
                            }

                            if (dbGuest.NumberAttending >= 0)
                            {
                                vm.NumberOfGuests = dbGuest.NumberAttending;
                            }
                        }
                    }
                    else
                    {
                        // TODO: Consider redirecting to register guest if the code isn't attached to a guest.
                    }
                }
            }

            return(View(vm));
        }