// Updates the dictionary public void UpdateDictionary() { TimeAvailableTypes = new Dictionary <TimeSpan, List <BoatType> >(); if (When.SelectedDate.HasValue) { if (int.TryParse(Duration.Text, out var durationInt)) { var duration = TimeSpan.FromMinutes(durationInt); for (var i = TimeSpan.Zero; i < new TimeSpan(0, 23, 59, 0); i += TimeSpan.FromMinutes(15)) { if (ReservationConstraints.IsValid(When.SelectedDate.Value + i, duration, _reservationService, _windowManager.UserSession.UserId).IsValid) { var availableTypes = _reservationService.AvailableBoatTypes(When.SelectedDate.Value + i, duration); if (availableTypes.Any()) { TimeAvailableTypes[i] = availableTypes; } } } } } UpdateTimeList(); UpdateBoatTypeList(); }
/// <inheritdoc /> public ReservationConstraintsMessage PlaceReservation(int boatType, int memberId, DateTime reservationDate, TimeSpan duration) { var availableBoats = GetAvailableBoats(reservationDate, duration).Where(boat => boat.BoatTypeId == boatType && boat.Status != (int)BoatState.InService).ToList(); // Checks if the reservation doesn't violate any constraints var message = ReservationConstraints.IsValid(reservationDate, duration, this, memberId); if (!message.IsValid) { return(message); } // Check if there is an available boat if (availableBoats.Count > 0) { SailingBoat boatToReserve = null; // Take the boat with most reservations var max = int.MinValue; foreach (var boat in availableBoats) { if (boat.SailingReservations.Count >= max) { boatToReserve = boat; max = boat.SailingReservations.Count; } } //Create a reservation for this boat _context.Reservations.Add(new SailingReservation { Date = reservationDate, Duration = duration, ReservedByUserId = memberId, ReservedSailingBoatId = boatToReserve.Id }); _context.SaveChanges(); return(new ReservationConstraintsMessage(true, "Reservering is geplaatst")); } return(new ReservationConstraintsMessage(false, "Geen boten beschikbaar.")); }