Esempio n. 1
0
        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));
        }
Esempio n. 2
0
 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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        //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"));
        }
Esempio n. 9
0
        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);
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        // 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));
        }