add a call all event method

fix registration issues number
main
Razmig Sarkissian 3 weeks ago
parent 7c3801cb51
commit ceaa03c41f
  1. 2
      PadelClub/Extensions/Tournament+Extensions.swift
  2. 4
      PadelClub/Views/Calling/CallSettingsView.swift
  3. 43
      PadelClub/Views/Calling/SendToAllView.swift
  4. 11
      PadelClub/Views/Cashier/Event/EventSettingsView.swift

@ -205,7 +205,7 @@ extension Tournament {
} }
func registrationIssues(selectedTeams: [TeamRegistration]) async -> Int { func registrationIssues(selectedTeams: [TeamRegistration]) async -> Int {
let players : [PlayerRegistration] = unsortedPlayers() let players : [PlayerRegistration] = selectedTeams.flatMap { $0.players() }
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)
let problematicPlayers : [PlayerRegistration] = players.filter({ $0.sex == nil }) let problematicPlayers : [PlayerRegistration] = players.filter({ $0.sex == nil })

@ -96,11 +96,11 @@ struct CallSettingsView: View {
//#endif //#endif
} }
.sheet(isPresented: $showSendToAllView) { .sheet(isPresented: $showSendToAllView) {
SendToAllView(addLink: false) SendToAllView(tournament: tournament, addLink: false)
.tint(.master) .tint(.master)
} }
.sheet(isPresented: $addLink) { .sheet(isPresented: $addLink) {
SendToAllView(addLink: true) SendToAllView(tournament: tournament, addLink: true)
.tint(.master) .tint(.master)
} }
} }

@ -14,14 +14,16 @@ struct SendToAllView: View {
@Environment(\.dismiss) var dismiss @Environment(\.dismiss) var dismiss
@EnvironmentObject var dataStore: DataStore @EnvironmentObject var dataStore: DataStore
@Environment(Tournament.self) var tournament: Tournament
@EnvironmentObject var networkMonitor: NetworkMonitor @EnvironmentObject var networkMonitor: NetworkMonitor
@State private var contactType: ContactType? = nil @State private var contactType: ContactType? = nil
@State private var contactMethod: Int = 1 @State private var contactMethod: Int = 1
@State private var contactRecipients: Set<String> = Set() @State private var contactRecipients: Set<String> = Set()
@State private var sentError: ContactManagerError? = nil @State private var sentError: ContactManagerError? = nil
let addLink: Bool var event: Event?
var tournament: Tournament?
var addLink: Bool
// @State var cannotPayForTournament: Bool = false // @State var cannotPayForTournament: Bool = false
@State private var pageLink: PageLink = .matches @State private var pageLink: PageLink = .matches
@State private var includeWaitingList: Bool = false @State private var includeWaitingList: Bool = false
@ -33,8 +35,18 @@ struct SendToAllView: View {
@State var summonParamByMessage: Bool = false @State var summonParamByMessage: Bool = false
@State var summonParamReSummon: Bool = false @State var summonParamReSummon: Bool = false
init(event: Event) {
self.event = event
self.addLink = false
}
init(tournament: Tournament, addLink: Bool) {
self.tournament = tournament
self.addLink = addLink
}
var tournamentStore: TournamentStore? { var tournamentStore: TournamentStore? {
return self.tournament.tournamentStore return self.tournament?.tournamentStore
} }
var messageSentFailed: Binding<Bool> { var messageSentFailed: Binding<Bool> {
@ -60,7 +72,14 @@ struct SendToAllView: View {
.labelsHidden() .labelsHidden()
.pickerStyle(.inline) .pickerStyle(.inline)
} }
if let event {
LabeledContent {
Text(event.selectedTeams().count.formatted())
} label: {
Text("Participants")
}
} else if let tournament {
Section { Section {
ForEach(tournament.groupStages()) { groupStage in ForEach(tournament.groupStages()) { groupStage in
let teams = groupStage.teams() let teams = groupStage.teams()
@ -92,8 +111,9 @@ struct SendToAllView: View {
} footer: { } footer: {
Text("Si vous ne souhaitez pas contacter toutes les équipes, choisissez un ou plusieurs groupes d'équipes manuellement.") Text("Si vous ne souhaitez pas contacter toutes les équipes, choisissez un ou plusieurs groupes d'équipes manuellement.")
} }
}
if addLink { if addLink, event == nil {
Section { Section {
let links : [PageLink] = [.teams, .summons, .groupStages, .matches, .rankings] let links : [PageLink] = [.teams, .summons, .groupStages, .matches, .rankings]
Picker(selection: $pageLink) { Picker(selection: $pageLink) {
@ -135,7 +155,7 @@ struct SendToAllView: View {
Button("OK") { Button("OK") {
} }
if case .uncalledTeams(let uncalledTeams) = sentError { if case .uncalledTeams(let uncalledTeams) = sentError, let tournament {
NavigationLink("Voir les équipes non contactées") { NavigationLink("Voir les équipes non contactées") {
TeamsCallingView(teams: uncalledTeams) TeamsCallingView(teams: uncalledTeams)
.environment(tournament) .environment(tournament)
@ -224,6 +244,11 @@ struct SendToAllView: View {
} }
func _teams() -> [TeamRegistration] { func _teams() -> [TeamRegistration] {
if let event {
return event.selectedTeams()
}
guard let tournament else { return [] }
let selectedSortedTeams = tournament.selectedSortedTeams() let selectedSortedTeams = tournament.selectedSortedTeams()
if onlyWaitingList { if onlyWaitingList {
return tournament.waitingListSortedTeams(selectedSortedTeams: selectedSortedTeams) return tournament.waitingListSortedTeams(selectedSortedTeams: selectedSortedTeams)
@ -258,8 +283,10 @@ struct SendToAllView: View {
func finalMessage() -> String { func finalMessage() -> String {
var message = [String?]() var message = [String?]()
message.append("\n\n") message.append("\n\n")
if addLink { if let tournament, addLink, event == nil {
message.append(tournament.shareURL(pageLink)?.absoluteString) message.append(tournament.shareURL(pageLink)?.absoluteString)
} else if let event {
message.append(event.shareURL()?.absoluteString)
} }
let signature = dataStore.user.getSummonsMessageSignature() ?? dataStore.user.defaultSignature(tournament) let signature = dataStore.user.getSummonsMessageSignature() ?? dataStore.user.defaultSignature(tournament)
@ -275,7 +302,9 @@ struct SendToAllView: View {
if contactMethod == 0 { if contactMethod == 0 {
contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.flatMap { [$0.phoneNumber, $0.contactPhoneNumber] }.compactMap({ $0 }), body: finalMessage(), tournamentBuild: nil) contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.flatMap { [$0.phoneNumber, $0.contactPhoneNumber] }.compactMap({ $0 }), body: finalMessage(), tournamentBuild: nil)
} else { } else {
contactType = .mail(date: nil, recipients: tournament.umpireMail(), bccRecipients: _teams().flatMap { $0.unsortedPlayers() }.flatMap { [$0.email, $0.contactEmail] }.compactMap({ $0 }), body: finalMessage(), subject: tournament.mailSubject(), tournamentBuild: nil) let umpireMail = tournament?.umpireMail() ?? event?.umpireMail()
let subject = tournament?.mailSubject() ?? event?.mailSubject()
contactType = .mail(date: nil, recipients: umpireMail, bccRecipients: _teams().flatMap { $0.unsortedPlayers() }.flatMap { [$0.email, $0.contactEmail] }.compactMap({ $0 }), body: finalMessage(), subject: subject, tournamentBuild: nil)
} }
} }

@ -16,6 +16,7 @@ struct EventSettingsView: View {
@State private var pageLink: PageLink = .teams @State private var pageLink: PageLink = .teams
@State private var tournamentInformation: String = "" @State private var tournamentInformation: String = ""
@State private var eventStartDate: Date @State private var eventStartDate: Date
@State private var showSendToAllView: Bool = false
@FocusState private var focusedField: Tournament.CodingKeys? @FocusState private var focusedField: Tournament.CodingKeys?
var visibleOnPadelClub: Binding<Bool> { var visibleOnPadelClub: Binding<Bool> {
@ -92,6 +93,12 @@ struct EventSettingsView: View {
_linkLabel() _linkLabel()
Section {
RowButtonView("Contactez toutes les équipes") {
showSendToAllView = true
}
}
Section { Section {
DatePicker(selection: $eventStartDate) { DatePicker(selection: $eventStartDate) {
Text(eventStartDate.formatted(.dateTime.weekday(.wide)).capitalized).lineLimit(1) Text(eventStartDate.formatted(.dateTime.weekday(.wide)).capitalized).lineLimit(1)
@ -172,6 +179,10 @@ struct EventSettingsView: View {
} }
} }
} }
.sheet(isPresented: $showSendToAllView) {
SendToAllView(event: event)
.tint(.master)
}
.navigationBarBackButtonHidden(focusedField != nil) .navigationBarBackButtonHidden(focusedField != nil)
.toolbar(content: { .toolbar(content: {
if focusedField != nil { if focusedField != nil {

Loading…
Cancel
Save