//id == reservation id //manager will choose tables to add reservations public async Task <IActionResult> Tables(int id) { //get all tables and area var tables = await _db.Tables.Include(t => t.Area).OrderBy(t => t.Area.Name).ThenBy(t => t.Name).ToListAsync(); //get reservations //include if res has table setting var reservation = await _db.Reservations .Include(r => r.TableReservations) //get assigened reserTables .ThenInclude(tr => tr.Table) .FirstOrDefaultAsync(r => r.Id == id); //reservation id //set the reservation to the Creating Table var m = new Models.Area.Tables { Reservation = reservation }; //just assigned to reserva //now we e //table is from DB //do 30 times for 30 tables. foreach (var t in tables) { var tableDetail = new Models.Area.TableDetails { TableId = t.Id, TableName = t.Name, AreaName = t.Area.Name, //if there is any tables set before==>true Selected = reservation.TableReservations.Any(rt => rt.TableId == t.Id) }; m.TableDetails.Add(tableDetail); } //logic var reservationTables = await _db.TableReservations.ToArrayAsync(); List <int> IdOfReservationWithLaterEndTime = new List <int>(); //get all the tables that has reservations foreach (var rt in reservationTables) { //reservation that has table already var reser = await _db.Reservations.FirstOrDefaultAsync(r => r.Id == rt.ReservationId); if (reser.EndTime > reservation.StartTime) //if the tables has reservation and their end time is later //than what user choose, then the table shouldn't be able to the user to select. //erase from the array. { var deleted = m.TableDetails.FirstOrDefault(m => m.TableId == rt.TableId); m.TableDetails.Remove(deleted); } } return(View(m)); }
//id == reservation id //manager will choose tables to add reservations public async Task <IActionResult> Tables(Models.Area.Tables m) { try { int id = m.Reservation.Id; //clear the previous selected tables from the res var reservation = await _db.Reservations .Include(r => r.TableReservations) .ThenInclude(tr => tr.Table) .FirstOrDefaultAsync(r => r.Id == id); //first remove all existing tables assigned to the reservation reservation.TableReservations.Clear(); await _db.SaveChangesAsync(); var endTime = reservation.EndTime;//get end time //add the selected tables to db var selectedTables = m.TableDetails.Where(to => to.Selected); foreach (var st in selectedTables) { //set the selected table to the tableReservations-connection table var tr = new TableReservation { TableId = st.TableId }; //add the connection table to reservation reservation.TableReservations.Add(tr); } await _db.SaveChangesAsync(); return(RedirectToAction("Index", "Reservation", new { Area = "Staff" })); } catch (Exception) { return(View(m)); } }