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