public IActionResult GetFreeCourtsFromToExclude([FromBody] ReservationDto reservation) { if (reservation == null) { return(BadRequest(reservation)); } ReservationRequest res; try { res = new ReservationRequest(reservation); } catch (Exception ex) { return(BadRequest(ex.Message)); } _logger.LogInformation($"Squash Controller is reqesting Free Courts from: {res.FromTime} to: {res.ToTime} for: {res.Duration}"); List <CourtDto> korty = _squash.GetFreeSquashCourts(res); if (korty.Count() > 0 && res.isLogged()) { var kort = korty.FirstOrDefault(); var freeTime = kort.Free.FirstOrDefault(); int lenght = (res.Duration.Hours * 60 + res.Duration.Minutes) / 30; kort.Free.Clear(); for (int i = 0; i < lenght; i++) { var time = new FreeHoursDto() { From = freeTime.From.AddMinutes(i * 30), To = freeTime.From.AddMinutes((i * 30) + 30) }; kort.Free.Add(time); } var book = GenerateBookRequest(kort, res); var rezerwujResponse = _squash.RezerwujTest(book); if (rezerwujResponse != null && rezerwujResponse.StatusCode == System.Net.HttpStatusCode.OK) { kort.Booked = true; var restult = new List <CourtDto>(); restult.Add(kort); return(Ok(restult)); } } _messanger.Send("### Squash Team", $"API found {korty.Count()} free squash courts ###"); return(Ok(korty)); }
public BookRequestDto GenerateBookRequest(CourtDto kort, ReservationRequest res) { var freeTime = new FreeHoursDto() { From = kort.Free.FirstOrDefault().From, To = kort.Free.FirstOrDefault().To }; var bookRequest = new BookRequestDto(res); int lenght = (res.Duration.Hours * 60 + res.Duration.Minutes) / 30; string[] tmpRez = new string[lenght]; string tmp = String.Empty; for (int i = 0; i < lenght; i++) { tmp = $"{kort.ObkietId}_{freeTime.From.Hour}:{freeTime.From.Minute.ToString("D2")}_"; freeTime.From = freeTime.From.AddMinutes(30); tmp += $"{freeTime.From.Hour}:{freeTime.From.Minute.ToString("D2")}"; tmpRez[i] = tmp; } bookRequest.Rez = tmpRez; return(bookRequest); }
private List <CourtDto> GetFreeCourts(List <CourtDto> FreeCourts, DateTime fromTime, DateTime toTime, TimeSpan duration) { var result = FreeCourts.SelectMany(c => c.Free, (court, freeHours) => new { court, freeHours }) .Where(courtAndHours => courtAndHours.freeHours.From >= fromTime && courtAndHours.freeHours.To <= toTime) .Select(courtAndHours => new { Number = courtAndHours.court.Number + "_" + courtAndHours.court.ObkietId, Free = new FreeHoursDto() { From = courtAndHours.freeHours.From, To = courtAndHours.freeHours.To } } ).GroupBy(c => c.Number, c => c.Free, (groupKey, Free) => new { Number = groupKey, Free }); if (result == null) { return(null); } List <CourtDto> korty = new List <CourtDto>(); CourtDto curCourt = null; string num, obiekt; int index; foreach (var kort in result) { index = kort.Number.IndexOf("_"); num = kort.Number.Substring(0, index); obiekt = kort.Number.Substring(index + 1); curCourt = new CourtDto() { Number = Int32.Parse(num), ObkietId = Int32.Parse(obiekt), Free = new List <FreeHoursDto>() }; FreeHoursDto prevTime = null; foreach (var curTime in kort.Free) { if (prevTime is null) { prevTime = curTime; } else { if (curTime.From == prevTime.To) { prevTime.To = curTime.To; } else { if (prevTime.AvailableTime >= duration) { curCourt.Free.Add(prevTime); } prevTime = curTime; } } } if (prevTime.AvailableTime >= duration) { curCourt.Free.Add(prevTime); } if (curCourt.Free.Count() > 0) { korty.Add(curCourt); } } return(korty); }