fix court unavailability in match scheduler

remove hiding of federal tournament when tournaments of datastore is empty
club_update
Razmig Sarkissian 1 year ago
parent 1fb67af4ae
commit 0e5bb88ed3
  1. 17
      PadelClub/Data/MatchScheduler.swift
  2. 6
      PadelClub/Views/Tournament/Shared/TournamentCellView.swift

@ -217,7 +217,7 @@ final class MatchScheduler : ModelObject, Storable {
let rotationStartDate: Date = startingDate.addingTimeInterval(timeIntervalToAdd)
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability)
if courtIndex >= numberOfCourtsAvailablePerRotation - courtsUnavailable {
if courtIndex >= numberOfCourtsAvailablePerRotation - courtsUnavailable.count {
return false
} else {
return teamsPerRotation[rotationIndex]!.allSatisfy({ match.containsTeamId($0) == false }) == true
@ -441,9 +441,12 @@ final class MatchScheduler : ModelObject, Storable {
} else if let first = availableMatchs.first {
let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration)
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: duration, courtsUnavailability: courtsUnavailability)
if courtsUnavailable == numberOfCourtsAvailablePerRotation {
if courtsUnavailable.count == numberOfCourtsAvailablePerRotation {
print("issue")
issueFound = true
} else {
courts = Array(Set(courts).subtracting(Set(courtsUnavailable)))
}
}
@ -477,7 +480,7 @@ final class MatchScheduler : ModelObject, Storable {
let roundObject = match.roundObject!
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability)
print("courtsUnavailable \(courtsUnavailable)")
if courtPosition >= availableCourts - courtsUnavailable {
if courtPosition >= availableCourts - courtsUnavailable.count {
return false
}
@ -560,7 +563,7 @@ final class MatchScheduler : ModelObject, Storable {
if let first = availableMatchs.first {
let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration)
let courtsUnavailable = courtsUnavailable(startDate: minimumTargetedEndDate, duration: duration, courtsUnavailability: courtsUnavailability)
if courtsUnavailable < availableCourts {
if courtsUnavailable.count < availableCourts {
dispatchCourts(availableCourts: availableCourts, courts: freeCourts, availableMatchs: &availableMatchs, slots: &slots, rotationIndex: rotationIndex, rotationStartDate: minimumTargetedEndDate, freeCourtPerRotation: &freeCourtPerRotation, courtsUnavailability: courtsUnavailability)
}
}
@ -664,14 +667,14 @@ final class MatchScheduler : ModelObject, Storable {
}
func courtsUnavailable(startDate: Date, duration: Int, courtsUnavailability: [DateInterval]?) -> Int {
func courtsUnavailable(startDate: Date, duration: Int, courtsUnavailability: [DateInterval]?) -> [Int] {
let endDate = startDate.addingTimeInterval(Double(duration) * 60)
guard let courtsUnavailability else { return 0 }
guard let courtsUnavailability else { return [] }
let groupedBy = Dictionary(grouping: courtsUnavailability, by: { $0.courtIndex })
let courts = groupedBy.keys
return courts.filter {
courtUnavailable(courtIndex: $0, from: startDate, to: endDate, source: courtsUnavailability)
}.count
}
}
func courtUnavailable(courtIndex: Int, from startDate: Date, to endDate: Date, source: [DateInterval]) -> Bool {

@ -22,10 +22,8 @@ struct TournamentCellView: View {
}
var body: some View {
if dataStore.tournaments.count > 0 {
ForEach(tournament.tournaments, id: \.id) { build in
_buildView(build, existingTournament: event?.existingBuild(build))
}
ForEach(tournament.tournaments, id: \.id) { build in
_buildView(build, existingTournament: event?.existingBuild(build))
}
}

Loading…
Cancel
Save