public IActionResult Edit(int id, [Bind("Id,Name,Address,LocationX,LocationY,District,Phone,Email,Web,NumberOfRooms,Description,OpeningHourMonday,ClosingHourMonday,OpeningHourTuesday,ClosingHourTuesday,OpeningHourWednesday,ClosingHourWednesday,OpeningHourThursday,ClosingHourThursday,OpeningHourFriday,ClosingHourFriday,OpeningHourSaturday,ClosingHourSaturday,OpeningHourSunday,ClosingHourSunday")] RehearsalStudio rehearsalStudio) { if (id != rehearsalStudio.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _reservationService.UpdateStudio(rehearsalStudio); } catch (DbUpdateConcurrencyException) { if (!RehearsalStudioExists(rehearsalStudio.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(rehearsalStudio)); }
public IActionResult Create([Bind("Id,Name,Address,LocationX,LocationY,District,Phone,Email,Web,Description,OpeningHourMonday,ClosingHourMonday,OpeningHourTuesday,ClosingHourTuesday,OpeningHourWednesday,ClosingHourWednesday,OpeningHourThursday,ClosingHourThursday,OpeningHourFriday,ClosingHourFriday,OpeningHourSaturday,ClosingHourSaturday,OpeningHourSunday,ClosingHourSunday")] RehearsalStudio rehearsalStudio) { if (ModelState.IsValid) { string userId = _userManager.GetUserId(User); rehearsalStudio.UserId = Int32.Parse(userId); _reservationService.AddStudio(rehearsalStudio); return(RedirectToAction(nameof(Index))); } return(View(rehearsalStudio)); }
public bool AddStudio(RehearsalStudio studio) { _context.Studios.Add(studio); try { _context.SaveChanges(); } catch { return(false); } return(true); }
public PartialViewResult GetTableOfReservations(int studioId, int dayIndex) { if (studioId == 0) { return(null); } if (dayIndex < 0) { dayIndex = 0; } if (dayIndex > 9) { dayIndex = 9; } RehearsalStudio studio = _reservationService.Studios.FirstOrDefault(l => l.Id == studioId); if (studio == null) { return(null); } DateTime currentStartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); currentStartDate = currentStartDate.AddDays(dayIndex); DateTime currentEndDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59); currentEndDate = currentEndDate.AddDays(dayIndex); List <Reservation> reservations = _reservationService.Reservations .Where(l => l.RehearsalRoom.StudioId == studioId && l.IsConflicting(currentStartDate, currentEndDate)) .ToList(); ReservationTableViewModel reservationTableViewModel = new ReservationTableViewModel { OpeningHour = GetOpeningHour(studio, dayIndex), ClosingHour = GetClosingHour(studio, dayIndex), NumberOfAvailableRooms = studio.Rooms.Where(l => l.Available).Count(), Rooms = studio.Rooms.ToList(), Reservations = reservations, Studio = studio, Index = dayIndex }; return(PartialView("_ReservationsTable", reservationTableViewModel)); }
public bool UpdateStudio(RehearsalStudio studio) { _context.Studios.Update(studio); try { _context.SaveChanges(); } catch (Exception) { return(false); } return(true); }
public IViewComponentResult InvokeAsync(int studioId, bool isNext) { //if (DayIndex < 0) // return NotFound(); DayIndex = isNext ? DayIndex + 1 : DayIndex - 1; ReservationTableViewModel viewModel = new ReservationTableViewModel(); RehearsalStudio studio = _reservationService.GetStudio(studioId); viewModel.Studio = studio; viewModel.NumberOfAvailableRooms = studio.Rooms.Count; viewModel.Index = DayIndex; viewModel.OpeningHour = GetOpeningHour(studio, DayIndex); viewModel.ClosingHour = GetClosingHour(studio, DayIndex); viewModel.Reservations = _reservationService.GetReservationsByStudioId(studioId).ToList(); viewModel.Rooms = _reservationService.Rooms.Where(l => l.StudioId == studioId).ToList(); return(View(viewModel)); }
private int GetClosingHour(RehearsalStudio studio, int index) { ClosingHours[0] = studio.ClosingHourMonday; ClosingHours[1] = studio.ClosingHourTuesday; ClosingHours[2] = studio.ClosingHourWednesday; ClosingHours[3] = studio.ClosingHourThursday; ClosingHours[4] = studio.ClosingHourFriday; ClosingHours[5] = studio.ClosingHourSaturday; ClosingHours[6] = studio.ClosingHourSunday; switch (DateTime.Today.DayOfWeek) { case DayOfWeek.Monday: return(ClosingHours[(index + 0) % 7]); case DayOfWeek.Tuesday: return(ClosingHours[(index + 1) % 7]); case DayOfWeek.Wednesday: return(ClosingHours[(index + 2) % 7]); case DayOfWeek.Thursday: return(ClosingHours[(index + 3) % 7]); case DayOfWeek.Friday: return(ClosingHours[(index + 4) % 7]); case DayOfWeek.Saturday: return(ClosingHours[(index + 5) % 7]); case DayOfWeek.Sunday: return(ClosingHours[(index + 6) % 7]); default: return(-1); } }
//Generating a random studio. public IActionResult AddStudio() { string userId = _userManager.GetUserId(User); int count = _reservationService.Studios.Count(); string nr = (count + 1).ToString(); RehearsalStudio rehearsalStudio = new RehearsalStudio { UserId = Int32.Parse(userId), Name = "Studio Nr. " + nr, Address = "default address of studio nr " + nr, Phone = "06301234567", Email = "*****@*****.**", Web = "https://www.probazona.hu/", LocationX = 0, LocationY = 0, District = 1, OpeningHourMonday = 10, ClosingHourMonday = 22, OpeningHourTuesday = 10, ClosingHourTuesday = 22, OpeningHourWednesday = 10, ClosingHourWednesday = 22, OpeningHourThursday = 10, ClosingHourThursday = 22, OpeningHourFriday = 10, ClosingHourFriday = 22, OpeningHourSaturday = 10, ClosingHourSaturday = 22, OpeningHourSunday = 10, ClosingHourSunday = 22, Description = "No description" }; _reservationService.AddStudio(rehearsalStudio); return(RedirectToAction("Index")); }
public int GetOpeningHour(RehearsalStudio studio, int index) { OpeningHours[0] = studio.OpeningHourMonday; OpeningHours[1] = studio.OpeningHourTuesday; OpeningHours[2] = studio.OpeningHourWednesday; OpeningHours[3] = studio.OpeningHourThursday; OpeningHours[4] = studio.OpeningHourFriday; OpeningHours[5] = studio.OpeningHourSaturday; OpeningHours[6] = studio.OpeningHourSunday; switch (DateTime.Today.DayOfWeek) { case DayOfWeek.Monday: return(OpeningHours[index + 0]); case DayOfWeek.Tuesday: return(OpeningHours[index + 1]); case DayOfWeek.Wednesday: return(OpeningHours[index + 2]); case DayOfWeek.Thursday: return(OpeningHours[index + 3]); case DayOfWeek.Friday: return(OpeningHours[index + 4]); case DayOfWeek.Saturday: return(OpeningHours[index + 5]); case DayOfWeek.Sunday: return(OpeningHours[index + 6]); default: return(-1); } }
public ReservationDateError Validate(DateTime start, DateTime end, int roomId, string action, int reservationId, Dictionary <string, bool> equipments) { if (end < start) { return(ReservationDateError.EndInvalid); } if (end == start) { return(ReservationDateError.LengthInvalid); } RehearsalRoom currentRoom = _context.Rooms.Include(l => l.Reservations).Include(l => l.Studio).Include(l => l.Studio.Equipments).FirstOrDefault(l => l.Id == roomId); RehearsalStudio currentStudio = currentRoom.Studio; List <int> oldConflictingReservations = new List <int>(); foreach (var resEqPair in _context.ReservationEquipmentPairs) //végigmegyünk a már meglévő foglalásokon, amikhez eszközt is béreltek { if (resEqPair.StudioId == currentStudio.Id && equipments.ContainsKey(resEqPair.EquipmentName)) //ha ebbe a stúdióba szól a foglalás, és olyan eszközt béreltek hozzá, amit mi is akarunk { Reservation oldReservation = _context.Reservations.FirstOrDefault(l => l.Id == resEqPair.ReservationId); //akkor megkeressük ezt a foglalást if (oldReservation.IsConflicting(start, end)) //ha ez a foglalás konfliktál a mienkkel, akkor hozzáadjuk { oldConflictingReservations.Add(oldReservation.Id); //ebbe gyűjtjük azokat, amiknek meg kell nézni egyenként hogy milyen eszközt béreltek hozzá } } } int conflictingReservationsWithSameEquipments = 0; foreach (string eqName in equipments.Keys) //végigmegyünk azokon az eszközökön, amiket most bérelni szeretnénk { /* * minden eszköznévre végig kell számolni, hogy hányszor lett kibérelve. * ha ez annyi, mint amennyi a stúdióban rendelkezésre áll, akkor hibát kell dobni * */ conflictingReservationsWithSameEquipments = _context.ReservationEquipmentPairs .Where(l => oldConflictingReservations.Contains(l.ReservationId) && l.EquipmentName == eqName).Count(); int availableInStudio = _context.Studios .FirstOrDefault(l => l.Id == currentStudio.Id) .Equipments.FirstOrDefault(l => l.Name == eqName) .QuantityAvailable; if (conflictingReservationsWithSameEquipments >= availableInStudio) { return(ReservationDateError.EquipmentNotAvailable); } conflictingReservationsWithSameEquipments = 0; } /* * itt kell csekkolni az adatbázist az equipment reservations pair táblában */ //if (selectedRoom == null) // return ReservationDateError.None; //menjünk végig az adott stúdió összes termének összes foglalásán, válasszuk ki az aktuálissal konfliktálókat //majd ezekből gyűjtsük össze, hogy melyik eszközből hányat béreltek ki az adott időpontban //ha annyiszor van már kibérelve, ahány összesen elérhető a próbahelyen, akkor hibát kell dobni a foglalásra //RehearsalStudio studio = _reservationService.GetStudioByRoomId(roomId); /* * List<Reservation> reservations = new List<Reservation>(); * * foreach (var room in currentStudio.Rooms) * { * foreach (var reservation in _context.Reservations.Include(l => l.Equipments).Where(l => l.RehearsalRoomId == room.Id)) * { * if (reservation.IsConflicting(start, end)) //ebben benne lesz az aktuális foglalás is * { * reservations.Add(reservation); * } * } * } * * Dictionary<string, int> reservedEquipmentsInCurrentTime = new Dictionary<string, int>(); * * foreach (var reservation in reservations) * { * foreach (var equipment in reservation.Equipments) * { * if (!reservedEquipmentsInCurrentTime.ContainsKey(equipment.Name)) * { * reservedEquipmentsInCurrentTime[equipment.Name] = 1; * } * else * { * reservedEquipmentsInCurrentTime[equipment.Name] += 1; * } * } * } * * foreach (var equipment in reservedEquipmentsInCurrentTime) //végigmegyek az adott időpontban már lefoglalt eszközökön * { * //és megnézem hogy az aktuális foglalásban van-e olyan, amit más máskorra is kibéreltek * if (equipments.ContainsKey(equipment.Key) && equipments[equipment.Key] == true && equipment.Value > currentStudio.Equipments.FirstOrDefault(l => l.Name == equipment.Key).QuantityAvailable) //itt az kell hogy equipment.Value > összeselérhető, mert úgy gyűjtöttem a konfliktálókat, hogy az aktuális is benne van * { * //és ha valamit már máskorra is kibéreltek annyiszor, ahány az eszközből rendelkezésre áll, akkor hibát dobunk * return ReservationDateError.EquipmentNotAvailable; * } * } */ switch (action) { case "create": if (_context.Reservations.Where(l => l.RehearsalRoomId == currentRoom.Id && l.End >= start) .ToList() .Any(l => l.IsConflicting(start, end))) { return(ReservationDateError.Conflicting); } break; case "edit": if (_context.Reservations.Where(l => l.Id != reservationId && l.RehearsalRoomId == currentRoom.Id && l.End >= start) .ToList() .Any(l => l.IsConflicting(start, end))) { return(ReservationDateError.Conflicting); } //itt azért nem kell nézni a reservationId-t, mert önmagával konfliktálhat az a foglalás, //amit éppen módosítani akarok. //pl. van 14-16-ig egy foglalásom és 14-15-re szeretném módosítani, vagy csak a bérelt eszközöket akarom módosítani break; } return(ReservationDateError.None); }
public async Task <IActionResult> Edit(int reservationId, ReservationViewModel reservationViewModel) { Reservation reservation = _reservationService.Reservations.FirstOrDefault(l => l.Id == reservationId); reservation.Start = new DateTime( reservationViewModel.Day.Year, reservationViewModel.Day.Month, reservationViewModel.Day.Day, reservationViewModel.StartHour, 0, 0 ); reservation.End = new DateTime( reservationViewModel.Day.Year, reservationViewModel.Day.Month, reservationViewModel.Day.Day, reservationViewModel.EndHour, 0, 0 ); string userId = _userManager.GetUserId(User); User user = await _userManager.FindByIdAsync(userId); reservation.User = user; reservation.BandName = reservationViewModel.BandName; DateTime day = reservationViewModel.Day; DateTime startDate = new DateTime(day.Year, day.Month, day.Day, reservation.Start.Hour, 0, 0); DateTime endDate = new DateTime(day.Year, day.Month, day.Day, reservation.End.Hour, 0, 0); switch (_reservationService.ValidateReservation(startDate, endDate, "edit", reservation.Id, reservationViewModel.Equipments, reservation.RehearsalRoomId)) { case ReservationDateError.StartInvalid: ModelState.AddModelError("StartHour", "A kezdés dátuma nem megfelelő!"); break; case ReservationDateError.EndInvalid: ModelState.AddModelError("EndHour", "A megadott foglalási idő érvénytelen (a foglalás vége korábban van, mint a kezdete)!"); break; case ReservationDateError.Conflicting: ModelState.AddModelError("StartHour", "A megadott időpontban a terembe már van foglalás!"); break; case ReservationDateError.LengthInvalid: ModelState.AddModelError("EndHour", "Üres az időintervallum!"); break; case ReservationDateError.EquipmentNotAvailable: ModelState.AddModelError("Endhour", "A bérelni kívánt eszközből a megadott időpontban már az összes foglalt!"); break; } RehearsalRoom room = _reservationService.GetRoom(reservation.RehearsalRoomId); RehearsalStudio studio = _reservationService.Studios.FirstOrDefault(l => l.Rooms.Contains(room)); /* * foreach (var e in reservationViewModel.Equipments) //ebben az összes stúdióban bérelhető eszköz benne van * { * Equipment eq = studio.Equipments.FirstOrDefault(l => l.Name == e.Key); * //ha már benne van a foglalásban de lemondtuk: * if (!e.Value && reservation.Equipments.Contains(eq)) * { * reservation.Equipments.Remove(eq); * } * else if (e.Value && !reservation.Equipments.Contains(eq)) //ehelyett az egész helyett kellene a pairs táblát módosítani * { * reservation.Equipments.Add(eq); * } * } */ if (ModelState.IsValid) { try { _reservationService.UpdateReservation(reservation); _reservationService.UpdateReservationEquipmentTable(reservationId, studio.Id, reservationViewModel.Equipments); } catch (DbUpdateConcurrencyException) { if (!ReservationExists(reservation.Id)) { return(NotFound()); } else { throw; } } TempData["SuccessAlert"] = "Foglalását sikeresen módosította!"; return(RedirectToAction(nameof(Index))); } reservationViewModel.Room = reservation.RehearsalRoom; reservationViewModel.Id = reservation.Id; TempData["DangerAlert"] = "Foglalás módosítása sikertelen!"; List <int> hours = new List <int>(); //itt attól függően legyenek benne a hours-ban az órák hogy melyik napra akar a felhasználó foglalni //some killing dynamic stuff..... for (int i = reservation.RehearsalRoom.Studio.OpeningHourMonday; i <= reservation.RehearsalRoom.Studio.ClosingHourMonday; ++i) { hours.Add(i); } ViewData["Hours"] = new SelectList(hours); return(View(reservationViewModel)); }
// GET: Reservations/Edit/5 public async Task <IActionResult> Edit(int?reservationId) { if (reservationId == null) { return(NotFound()); } var reservation = _reservationService.GetReservation(reservationId); if (reservation == null) { return(NotFound()); } string userId = _userManager.GetUserId(User); User user = await _userManager.FindByIdAsync(userId); reservation.User = user; ViewData["RehearsalRoomId"] = new SelectList(_reservationService.Rooms, "Id", "Number", reservation.RehearsalRoomId); List <int> hours = new List <int>(); //itt attól függően legyenek benne a hours-ban az órák hogy melyik napra akar a felhasználó foglalni //some killing dynamic stuff..... for (int i = reservation.RehearsalRoom.Studio.OpeningHourMonday; i <= reservation.RehearsalRoom.Studio.ClosingHourMonday; ++i) { hours.Add(i); } ViewData["Hours"] = new SelectList(hours); ReservationViewModel viewModel = new ReservationViewModel { UserOwnName = reservation.User.UserOwnName, UserPhoneNumber = reservation.User.PhoneNumber, UserEmail = reservation.User.Email, Room = reservation.RehearsalRoom, BandName = reservation.BandName, Day = reservation.Start, StartHour = reservation.Start.Hour, EndHour = reservation.End.Hour, Id = reservation.Id }; Dictionary <string, int> equipments = new Dictionary <string, int>(); /* * foreach (var e in reservation.Equipments) * { * viewModel.Equipments[e.Name] = true; * } */ foreach (var pair in _reservationService.GetReservationEquipmentPairsForReservarion(reservationId)) { viewModel.Equipments[pair.EquipmentName] = true; } RehearsalRoom room = _reservationService.GetRoom(reservation.RehearsalRoomId); RehearsalStudio studio = _reservationService.Studios.FirstOrDefault(l => l.Rooms.Contains(room)); foreach (var e in studio.Equipments) { if (!viewModel.Equipments.ContainsKey(e.Name)) //ha nincs foglalva az aktuális foglaláshoz { viewModel.Equipments[e.Name] = false; } } return(View(viewModel)); }