Exemplo n.º 1
0
        public async Task <IActionResult> CreateMemberReservation(int id)
        {
            var sitting = await _db.Sittings
                          .Include(s => s.SittingType)
                          .FirstOrDefaultAsync(s => s.Id == id);

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

            var members = _db.Members.Select(me => new {
                Id   = me.Id,
                Name = $"{me.LastName}, {me.FirstName}"
            }).ToList();

            var m = new CreateMemberReservation
            {
                SittingId     = sitting.Id,
                Sitting       = $"{sitting.SittingType.Name} {sitting.Start}",
                StatusId      = 1, //initial status is pending with id of 1
                StatusOptions = new SelectList(_db.ReservationStatuses.ToList(), "Id", "Name"),
                SourceId      = 1, //set the id of source to 1 i.e. online
                SourceOptions = new SelectList(_db.ReservationSources.ToList(), "Id", "Name"),
                MemberOptions = new SelectList(members, "Id", "Name")
            };

            return(View(m));
        }
        public async Task <IActionResult> CreateMemberReservation(CreateMemberReservation m)
        {
            //get sitting from m
            var sitting = await _db.Sittings
                          .Include(s => s.Reservations)
                          .FirstOrDefaultAsync(s => s.Id == m.SittingId);

            if (sitting == null)
            {
                return(NotFound());
            }
            if (m.StartTime < sitting.Start || m.StartTime > sitting.End || m.StartTime.AddMinutes(m.Duration) > sitting.End)
            {
                ModelState.AddModelError("StartTime", "Invalid Time, must fall within sitting start/end times");
            }
            if (m.Guest > sitting.GuestAvailabilityCount || m.Guest <= 0)
            {
                ModelState.AddModelError("Guest", "Invalid Guest Number");
            }

            //if model state is valid create new reservation and redirect to confirmation page
            if (ModelState.IsValid)
            {
                var member = await _db.Members.FirstOrDefaultAsync(me => me.Id == m.MemberId);

                var r = new Reservation
                {
                    Guest     = m.Guest,
                    Duration  = m.Duration,
                    Note      = m.Note,
                    SourceId  = m.SourceId,
                    StartTime = m.StartTime,
                    StatusId  = 1,
                    SittingId = sitting.Id
                };
                //connect reservation and person
                member.Reservations.Add(r);
                //save cahnge
                _db.SaveChanges();
                return(RedirectToAction(nameof(Confirmation), new { id = r.Id }));
            }

            //otherwise re instantiate select lists for members and source options
            m.SourceOptions = new SelectList(_db.ReservationSources.ToList(), "Id", "Name");
            m.MemberOptions = new SelectList(_db.Members.Select(me => new { Id = me.Id, Name = $"{me.LastName}, {me.FirstName}" }).ToList(), "Id", "Name");
            //pass model to view and send back to client
            return(View(m));
        }
Exemplo n.º 3
0
 public async Task <IActionResult> CreateMemberReservation(CreateMemberReservation m)
 {
     return(View());
 }