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 rotationStartDate: Date = startingDate.addingTimeInterval(timeIntervalToAdd)
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability) let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: match.matchFormat.getEstimatedDuration(additionalEstimationDuration), courtsUnavailability: courtsUnavailability)
if courtIndex >= numberOfCourtsAvailablePerRotation - courtsUnavailable { if courtIndex >= numberOfCourtsAvailablePerRotation - courtsUnavailable.count {
return false return false
} else { } else {
return teamsPerRotation[rotationIndex]!.allSatisfy({ match.containsTeamId($0) == false }) == true return teamsPerRotation[rotationIndex]!.allSatisfy({ match.containsTeamId($0) == false }) == true
@ -441,9 +441,12 @@ final class MatchScheduler : ModelObject, Storable {
} else if let first = availableMatchs.first { } else if let first = availableMatchs.first {
let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration) let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration)
let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: duration, courtsUnavailability: courtsUnavailability) let courtsUnavailable = courtsUnavailable(startDate: rotationStartDate, duration: duration, courtsUnavailability: courtsUnavailability)
if courtsUnavailable == numberOfCourtsAvailablePerRotation {
if courtsUnavailable.count == numberOfCourtsAvailablePerRotation {
print("issue") print("issue")
issueFound = true issueFound = true
} else {
courts = Array(Set(courts).subtracting(Set(courtsUnavailable)))
} }
} }
@ -477,7 +480,7 @@ final 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 courtPosition >= availableCourts - courtsUnavailable { if courtPosition >= availableCourts - courtsUnavailable.count {
return false return false
} }
@ -560,7 +563,7 @@ final class MatchScheduler : ModelObject, Storable {
if let first = availableMatchs.first { if let first = availableMatchs.first {
let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration) let duration = first.matchFormat.getEstimatedDuration(additionalEstimationDuration)
let courtsUnavailable = courtsUnavailable(startDate: minimumTargetedEndDate, duration: duration, courtsUnavailability: courtsUnavailability) 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) 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) 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 groupedBy = Dictionary(grouping: courtsUnavailability, by: { $0.courtIndex })
let courts = groupedBy.keys let courts = groupedBy.keys
return courts.filter { return courts.filter {
courtUnavailable(courtIndex: $0, from: startDate, to: endDate, source: courtsUnavailability) courtUnavailable(courtIndex: $0, from: startDate, to: endDate, source: courtsUnavailability)
}.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 {

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

Loading…
Cancel
Save