sync2
Razmig Sarkissian 8 months ago
parent 289056bcd0
commit 4a522abed9
  1. 6
      PadelClub/Data/Tournament.swift
  2. 29
      PadelClub/Views/GroupStage/GroupStagesSettingsView.swift
  3. 11
      PadelClub/Views/Team/EditingTeamView.swift
  4. 4
      PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift
  5. 9
      PadelClub/Views/Tournament/Screen/RegistrationSetupView.swift
  6. 12
      PadelClub/Views/Tournament/Screen/TableStructureView.swift

@ -1196,7 +1196,7 @@ defer {
}
}
func registrationIssues(selectedTeams: [TeamRegistration]) -> Int {
func registrationIssues(selectedTeams: [TeamRegistration]) async -> Int {
let players : [PlayerRegistration] = unsortedPlayers()
let callDateIssue : [TeamRegistration] = selectedTeams.filter { $0.callDate != nil && isStartDateIsDifferentThanCallDate($0) }
let duplicates : [PlayerRegistration] = duplicates(in: players)
@ -2657,6 +2657,10 @@ defer {
unsortedTeams().filter({ $0.hasRegisteredOnline() })
}
func shouldWarnOnlineRegistrationUpdates() -> Bool {
onlineTeams().isEmpty == false && hasEnded() == false && hasStarted() == false
}
func refreshTeamList() async throws {
guard enableOnlineRegistration, refreshInProgress == false, hasEnded() == false else { return }
refreshInProgress = true

@ -129,6 +129,18 @@ struct GroupStagesSettingsView: View {
}
#endif
Section {
menuGenerateGroupStage(.random)
} footer: {
Text("Redistribue les équipes par tirage au sort par chapeau")
}
Section {
menuGenerateGroupStage(.snake)
} footer: {
Text("Redistribue les équipes par la méthode du serpentin")
}
Section {
RowButtonView("Retirer tous les horaires", role: .destructive) {
let matches = tournament.groupStages().flatMap({ $0._matches() })
@ -144,30 +156,17 @@ struct GroupStagesSettingsView: View {
}
}
} footer: {
Text("Retire les horaires pré-définis des matchs. Utile si vous avez convoqué mais que l'ordre des matchs à lancer n'est pas important.")
Text("Retire les horaires pré-définis des matchs. Utile si vous avez convoqué mais que l'ordre des matchs à lancer n'est pas important.").foregroundStyle(.logoRed).bold()
}
if tournament.unsortedTeams().filter({ $0.groupStagePosition != nil }).isEmpty == false {
Section {
menuBuildAllGroupStages
} footer: {
Text("Efface et recréé les poules, les horaires et les résultats existants seront perdus")
Text("Efface et recréé les poules, les horaires et les résultats existants seront perdus").foregroundStyle(.logoRed).bold()
}
}
Section {
menuGenerateGroupStage(.random)
} footer: {
Text("Redistribue les équipes par tirage au sort par chapeau")
}
Section {
menuGenerateGroupStage(.snake)
} footer: {
Text("Redistribue les équipes par la méthode du serpentin")
}
let groupStages = tournament.groupStages()
Section {

@ -38,7 +38,7 @@ struct EditingTeamView: View {
var hasChanged: Binding<Bool> {
Binding {
if tournament.enableOnlineRegistration == false {
if canSaveWithoutWarning() {
return false
}
@ -67,6 +67,7 @@ struct EditingTeamView: View {
private func _resetTeam() {
team.resetPositions()
team.qualified = false
team.wildCardGroupStage = false
team.walkOut = false
team.wildCardBracket = false
@ -315,13 +316,13 @@ struct EditingTeamView: View {
}
}
.onChange(of: registrationDate) {
if tournament.enableOnlineRegistration == false {
if canSaveWithoutWarning() {
team.registrationDate = registrationDate
_save()
}
}
.onChange(of: [walkOut, wildCardBracket, wildCardGroupStage]) {
if tournament.enableOnlineRegistration == false {
if canSaveWithoutWarning() {
_resetTeam()
team.walkOut = walkOut
team.wildCardBracket = wildCardBracket
@ -334,6 +335,10 @@ struct EditingTeamView: View {
.navigationBarTitleDisplayMode(.inline)
}
func canSaveWithoutWarning() -> Bool {
tournament.shouldWarnOnlineRegistrationUpdates() && tournament.teamCount <= tournament.unsortedTeamsCount()
}
private var confirmationReceived: Binding<Bool> {
Binding {
team.confirmed()

@ -192,8 +192,8 @@ struct InscriptionManagerView: View {
self.teamsHash = _simpleHash(ids: selectedSortedTeams.map { $0.id })
}
self.registrationIssues = nil
DispatchQueue.main.async {
self.registrationIssues = tournament.registrationIssues(selectedTeams: selectedSortedTeams)
Task {
self.registrationIssues = await tournament.registrationIssues(selectedTeams: selectedSortedTeams)
}
}

@ -27,7 +27,6 @@ struct RegistrationSetupView: View {
@State private var showMoreInfos: Bool = false
@State private var hasChanges: Bool = false
@State private var displayWarning: Bool = false
@Environment(\.dismiss) private var dismiss
@ -73,9 +72,14 @@ struct RegistrationSetupView: View {
}
func displayWarning() -> Bool {
let unsortedTeamsCount = tournament.unsortedTeamsCount()
return tournament.shouldWarnOnlineRegistrationUpdates() && targetTeamCount != tournament.teamCount && (tournament.teamCount <= unsortedTeamsCount || targetTeamCount <= unsortedTeamsCount)
}
var body: some View {
List {
if displayWarning, tournament.enableOnlineRegistration, tournament.onlineTeams().isEmpty == false, tournament.hasEnded() == false, tournament.hasStarted() == false {
if displayWarning() {
Text("Attention, l'inscription en ligne est activée et vous avez des équipes inscrites en ligne, en modifiant la structure ces équipes seront intégrées ou retirées de votre sélection d'équipes. Padel Club saura prévenir les équipes inscrites en ligne automatiquement.")
.foregroundStyle(.logoRed)
}
@ -255,7 +259,6 @@ struct RegistrationSetupView: View {
}
.onChange(of: targetTeamCount) {
displayWarning = targetTeamCount != tournament.teamCount
_hasChanged()
}

@ -21,10 +21,13 @@ struct TableStructureView: View {
@State private var updatedElements: Set<StructureElement> = Set()
@State private var structurePreset: PadelTournamentStructurePreset = .manual
@State private var buildWildcards: Bool = true
@State private var displayWarning: Bool = false
@FocusState private var stepperFieldIsFocused: Bool
func displayWarning() -> Bool {
let unsortedTeamsCount = tournament.unsortedTeamsCount()
return tournament.shouldWarnOnlineRegistrationUpdates() && teamCount != tournament.teamCount && (tournament.teamCount <= unsortedTeamsCount || teamCount <= unsortedTeamsCount)
}
var qualifiedFromGroupStage: Int {
groupStageCount * qualifiedPerGroupStage
}
@ -60,7 +63,7 @@ struct TableStructureView: View {
@ViewBuilder
var body: some View {
List {
if displayWarning, tournament.enableOnlineRegistration, tournament.onlineTeams().isEmpty == false, tournament.hasEnded() == false, tournament.hasStarted() == false {
if displayWarning() {
Text("Attention, l'inscription en ligne est activée et vous avez des équipes inscrites en ligne, en modifiant la structure ces équipes seront intégrées ou retirées de votre sélection d'équipes. Padel Club saura prévenir les équipes inscrites en ligne automatiquement.")
.foregroundStyle(.logoRed)
}
@ -97,9 +100,6 @@ struct TableStructureView: View {
} label: {
Text("Nombre d'équipes")
}
.onChange(of: teamCount) {
displayWarning = teamCount != tournament.teamCount
}
LabeledContent {
StepperView(count: $groupStageCount, minimum: 0, maximum: maxGroupStages) {

Loading…
Cancel
Save