multistore
Razmig Sarkissian 1 year ago
parent dc2371e95a
commit 5ca9f8f462
  1. 22
      PadelClub/Data/MatchScheduler.swift

@ -463,7 +463,7 @@ class MatchScheduler : ModelObject, Storable {
let roundObject = match.roundObject!
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability)
print("courtsUnavailable \(courtsUnavailable)")
if courtIndex >= availableCourts - courtsUnavailable {
if courtPosition >= availableCourts - courtsUnavailable {
return false
}
@ -542,6 +542,11 @@ class MatchScheduler : ModelObject, Storable {
}.sorted(by: \.1).map { $0.0 }
}
let courtsUnavailable = courtsUnavailable(at: minimumTargetedEndDate, courtsUnavailability: courtsUnavailability)
if let courtsUnavailable, courtsUnavailable == availableCourts {
minimumTargetedEndDate.addTimeInterval(3600)
}
dispatchCourts(availableCourts: availableCourts, courts: freeCourts, availableMatchs: &availableMatchs, slots: &slots, rotationIndex: rotationIndex, rotationStartDate: minimumTargetedEndDate, freeCourtPerRotation: &freeCourtPerRotation, courtsUnavailability: courtsUnavailability)
}
}
@ -650,11 +655,24 @@ class MatchScheduler : ModelObject, Storable {
courtUnavailable(courtIndex: $0, from: startDate, to: endDate, source: courtsUnavailability)
}.count
}
func courtsUnavailable(at startDate: Date, courtsUnavailability: [DateInterval]?) -> Int? {
guard let courtsUnavailability else { return nil }
let groupedBy = Dictionary(grouping: courtsUnavailability, by: { $0.courtIndex })
let courts = groupedBy.keys
return courts.filter { courtIndex in
let courtLockedSchedule = courtsUnavailability.filter({ $0.courtIndex == courtIndex })
return courtLockedSchedule.anySatisfy({ dateInterval in
dateInterval.range.contains(startDate)
})
}.count
}
func courtUnavailable(courtIndex: Int, from startDate: Date, to endDate: Date, source: [DateInterval]) -> Bool {
let courtLockedSchedule = source.filter({ $0.courtIndex == courtIndex })
return courtLockedSchedule.anySatisfy({ dateInterval in
dateInterval.isDateInside(startDate) || dateInterval.isDateInside(endDate)
let range = startDate..<endDate
return dateInterval.range.overlaps(range)
})
}

Loading…
Cancel
Save