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

@ -129,6 +129,18 @@ struct GroupStagesSettingsView: View {
} }
#endif #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 { Section {
RowButtonView("Retirer tous les horaires", role: .destructive) { RowButtonView("Retirer tous les horaires", role: .destructive) {
let matches = tournament.groupStages().flatMap({ $0._matches() }) let matches = tournament.groupStages().flatMap({ $0._matches() })
@ -144,30 +156,17 @@ struct GroupStagesSettingsView: View {
} }
} }
} footer: { } 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 { if tournament.unsortedTeams().filter({ $0.groupStagePosition != nil }).isEmpty == false {
Section { Section {
menuBuildAllGroupStages menuBuildAllGroupStages
} footer: { } 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() let groupStages = tournament.groupStages()
Section { Section {

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

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

@ -27,7 +27,6 @@ struct RegistrationSetupView: View {
@State private var showMoreInfos: Bool = false @State private var showMoreInfos: Bool = false
@State private var hasChanges: Bool = false @State private var hasChanges: Bool = false
@State private var displayWarning: Bool = false
@Environment(\.dismiss) private var dismiss @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 { var body: some View {
List { 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.") 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) .foregroundStyle(.logoRed)
} }
@ -255,7 +259,6 @@ struct RegistrationSetupView: View {
} }
.onChange(of: targetTeamCount) { .onChange(of: targetTeamCount) {
displayWarning = targetTeamCount != tournament.teamCount
_hasChanged() _hasChanged()
} }

@ -21,10 +21,13 @@ struct TableStructureView: View {
@State private var updatedElements: Set<StructureElement> = Set() @State private var updatedElements: Set<StructureElement> = Set()
@State private var structurePreset: PadelTournamentStructurePreset = .manual @State private var structurePreset: PadelTournamentStructurePreset = .manual
@State private var buildWildcards: Bool = true @State private var buildWildcards: Bool = true
@State private var displayWarning: Bool = false
@FocusState private var stepperFieldIsFocused: Bool @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 { var qualifiedFromGroupStage: Int {
groupStageCount * qualifiedPerGroupStage groupStageCount * qualifiedPerGroupStage
} }
@ -60,7 +63,7 @@ struct TableStructureView: View {
@ViewBuilder @ViewBuilder
var body: some View { var body: some View {
List { 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.") 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) .foregroundStyle(.logoRed)
} }
@ -97,9 +100,6 @@ struct TableStructureView: View {
} label: { } label: {
Text("Nombre d'équipes") Text("Nombre d'équipes")
} }
.onChange(of: teamCount) {
displayWarning = teamCount != tournament.teamCount
}
LabeledContent { LabeledContent {
StepperView(count: $groupStageCount, minimum: 0, maximum: maxGroupStages) { StepperView(count: $groupStageCount, minimum: 0, maximum: maxGroupStages) {

Loading…
Cancel
Save