@ -143,82 +143,7 @@ struct PlanningSettingsView: View {
}
}
}
}
let allMatches = tournament . allMatches ( )
_smartView ( )
let allGroupStages = tournament . allGroupStages ( )
let allRounds = tournament . allRounds ( )
let matchesWithDate = allMatches . filter ( { $0 . startDate != nil } )
let groupMatchesByDay = _groupMatchesByDay ( matches : matchesWithDate )
let countedSet = _matchCountPerDay ( matchesByDay : groupMatchesByDay , tournament : tournament )
_formatPerDayView ( matchCountPerDay : countedSet )
let groupStagesWithDate = allGroupStages . filter ( { $0 . startDate != nil } )
let roundsWithDate = allRounds . filter ( { $0 . startDate != nil } )
if matchesWithDate . isEmpty = = false || groupStagesWithDate . isEmpty = = false || roundsWithDate . isEmpty = = false {
Section {
RowButtonView ( " Supprimer les horaires des matches " , role : . destructive ) {
do {
deletingDateMatchesDone = false
allMatches . forEach ( {
$0 . startDate = nil
$0 . confirmed = false
} )
try self . tournamentStore . matches . addOrUpdate ( contentOfs : allMatches )
deletingDateMatchesDone = true
} catch {
Logger . error ( error )
}
}
} footer : {
Text ( " Garde les horaires définis pour les poules et les manches. " )
}
Section {
RowButtonView ( " Supprimer tous les horaires " , role : . destructive ) {
do {
deletingDone = false
allMatches . forEach ( {
$0 . startDate = nil
$0 . confirmed = false
} )
try self . tournamentStore . matches . addOrUpdate ( contentOfs : allMatches )
allGroupStages . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . groupStages . addOrUpdate ( contentOfs : allGroupStages )
allRounds . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . rounds . addOrUpdate ( contentOfs : allRounds )
deletingDone = true
} catch {
Logger . error ( error )
}
}
}
}
Section {
if groupStagesWithDate . isEmpty = = false {
Text ( " Des dates de démarrages ont été indiqué pour les poules et seront prises en compte. " )
}
if roundsWithDate . isEmpty = = false {
Text ( " Des dates de démarrages ont été indiqué pour les manches et seront prises en compte. " )
}
RowButtonView ( " Horaire intelligent " , role : . destructive ) {
await MainActor . run {
issueFound = false
schedulingDone = false
}
self . issueFound = await _setupSchedule ( )
await MainActor . run {
_save ( )
schedulingDone = true
}
}
} footer : {
Text ( " Padel Club programmera tous les matchs de votre tournoi en fonction de différents paramètres, " ) + Text ( " tout en tenant compte des horaires que vous avez fixé. " ) . underline ( )
}
}
}
. headerProminence ( . increased )
. headerProminence ( . increased )
. onAppear {
. onAppear {
@ -265,6 +190,149 @@ struct PlanningSettingsView: View {
}
}
}
}
@ ViewBuilder
private func _smartView ( ) -> some View {
let allMatches = tournament . allMatches ( ) . filter ( { $0 . hasEnded ( ) = = false && $0 . hasStarted ( ) = = false } )
let allGroupStages = tournament . allGroupStages ( )
let allRounds = tournament . allRounds ( )
let matchesWithDate = allMatches . filter ( { $0 . startDate != nil } )
let groupMatchesByDay = _groupMatchesByDay ( matches : matchesWithDate )
let countedSet = _matchCountPerDay ( matchesByDay : groupMatchesByDay , tournament : tournament )
_formatPerDayView ( matchCountPerDay : countedSet )
let groupStagesWithDate = allGroupStages . filter ( { $0 . startDate != nil } )
let roundsWithDate = allRounds . filter ( { $0 . startDate != nil } )
if matchesWithDate . isEmpty = = false {
Section {
RowButtonView ( " Supprimer les horaires des matches " , role : . destructive ) {
do {
deletingDateMatchesDone = false
allMatches . forEach ( {
$0 . startDate = nil
$0 . confirmed = false
} )
try self . tournamentStore . matches . addOrUpdate ( contentOfs : allMatches )
deletingDateMatchesDone = true
} catch {
Logger . error ( error )
}
}
} footer : {
Text ( " Supprime les horaires des matchs restants non démarrés. Garde les horaires définis pour les poules et les manches du tableau. " )
}
}
if groupStagesWithDate . isEmpty = = false {
Section {
RowButtonView ( " Supprimer les horaires des poules " , role : . destructive ) {
do {
deletingDone = false
allGroupStages . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . groupStages . addOrUpdate ( contentOfs : allGroupStages )
deletingDone = true
} catch {
Logger . error ( error )
}
}
}
}
if roundsWithDate . isEmpty = = false {
Section {
RowButtonView ( " Supprimer les horaires du tableau " , role : . destructive ) {
do {
deletingDone = false
allRounds . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . rounds . addOrUpdate ( contentOfs : allRounds )
deletingDone = true
} catch {
Logger . error ( error )
}
}
} footer : {
Text ( " Supprime les horaires définis pour les manches du tableau. " )
}
}
if matchesWithDate . isEmpty = = false && groupStagesWithDate . isEmpty = = false && roundsWithDate . isEmpty = = false {
Section {
RowButtonView ( " Supprimer tous les horaires " , role : . destructive ) {
do {
deletingDone = false
allMatches . forEach ( {
$0 . startDate = nil
$0 . confirmed = false
} )
try self . tournamentStore . matches . addOrUpdate ( contentOfs : allMatches )
allGroupStages . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . groupStages . addOrUpdate ( contentOfs : allGroupStages )
allRounds . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . rounds . addOrUpdate ( contentOfs : allRounds )
deletingDone = true
} catch {
Logger . error ( error )
}
}
} footer : {
Text ( " Supprime les horaires des matchs restants non démarrés, les horaires définis pour les poules et les manches du tableau. " )
}
}
#if DEBUG
Section {
RowButtonView ( " Debug delete all dates " , role : . destructive ) {
do {
deletingDone = false
tournament . allMatches ( ) . forEach ( {
$0 . startDate = nil
$0 . endDate = nil
$0 . confirmed = false
} )
try self . tournamentStore . matches . addOrUpdate ( contentOfs : tournament . allMatches ( ) )
allGroupStages . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . groupStages . addOrUpdate ( contentOfs : allGroupStages )
allRounds . forEach ( { $0 . startDate = nil } )
try self . tournamentStore . rounds . addOrUpdate ( contentOfs : allRounds )
deletingDone = true
} catch {
Logger . error ( error )
}
}
}
#endif
Section {
if groupStagesWithDate . isEmpty = = false {
Text ( " Des dates de démarrages ont été indiqué pour les poules et seront prises en compte. " )
}
if roundsWithDate . isEmpty = = false {
Text ( " Des dates de démarrages ont été indiqué pour les manches et seront prises en compte. " )
}
RowButtonView ( " Horaire intelligent " , role : . destructive ) {
await MainActor . run {
issueFound = false
schedulingDone = false
}
self . issueFound = await _setupSchedule ( )
await MainActor . run {
_save ( )
schedulingDone = true
}
}
} footer : {
Text ( " Padel Club programmera tous les matchs de votre tournoi en fonction de différents paramètres, " ) + Text ( " tout en tenant compte des horaires que vous avez fixé. " ) . underline ( )
}
}
@ ViewBuilder
@ ViewBuilder
private func _optionsView ( ) -> some View {
private func _optionsView ( ) -> some View {
List {
List {