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 roundObject = match.roundObject!
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability) let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability)
print("courtsUnavailable \(courtsUnavailable)") print("courtsUnavailable \(courtsUnavailable)")
if courtIndex >= availableCourts - courtsUnavailable { if courtPosition >= availableCourts - courtsUnavailable {
return false return false
} }
@ -542,6 +542,11 @@ class MatchScheduler : ModelObject, Storable {
}.sorted(by: \.1).map { $0.0 } }.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) 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) courtUnavailable(courtIndex: $0, from: startDate, to: endDate, source: courtsUnavailability)
}.count }.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 { func courtUnavailable(courtIndex: Int, from startDate: Date, to endDate: Date, source: [DateInterval]) -> Bool {
let courtLockedSchedule = source.filter({ $0.courtIndex == courtIndex }) let courtLockedSchedule = source.filter({ $0.courtIndex == courtIndex })
return courtLockedSchedule.anySatisfy({ dateInterval in return courtLockedSchedule.anySatisfy({ dateInterval in
dateInterval.isDateInside(startDate) || dateInterval.isDateInside(endDate) let range = startDate..<endDate
return dateInterval.range.overlaps(range)
}) })
} }

Loading…
Cancel
Save