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. 91
      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 {
let players : [PlayerRegistration] = unsortedPlayers()
let players : [PlayerRegistration] = selectedTeams.flatMap { $0.players() }
let callDateIssue : [TeamRegistration] = selectedTeams.filter { $0.callDate != nil && isStartDateIsDifferentThanCallDate($0) }
let duplicates : [PlayerRegistration] = duplicates(in: players)
let problematicPlayers : [PlayerRegistration] = players.filter({ $0.sex == nil })

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

@ -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,40 +72,48 @@ struct SendToAllView: View {
.labelsHidden()
.pickerStyle(.inline)
}
if let event {
LabeledContent {
Text(event.selectedTeams().count.formatted())
} label: {
Text("Participants")
}
Section {
ForEach(tournament.groupStages()) { groupStage in
let teams = groupStage.teams()
if teams.isEmpty == false {
LabeledContent {
Text(teams.count.formatted() + " équipe" + teams.count.pluralSuffix)
} label: {
Text(groupStage.groupStageTitle())
} else if let tournament {
Section {
ForEach(tournament.groupStages()) { groupStage in
let teams = groupStage.teams()
if teams.isEmpty == false {
LabeledContent {
Text(teams.count.formatted() + " équipe" + teams.count.pluralSuffix)
} label: {
Text(groupStage.groupStageTitle())
}
.tag(groupStage.id)
}
.tag(groupStage.id)
}
}
ForEach(tournament.rounds()) { round in
let teams = round.teams()
if teams.isEmpty == false {
LabeledContent {
Text(teams.count.formatted() + " équipe" + teams.count.pluralSuffix)
} label: {
Text(round.roundTitle())
ForEach(tournament.rounds()) { round in
let teams = round.teams()
if teams.isEmpty == false {
LabeledContent {
Text(teams.count.formatted() + " équipe" + teams.count.pluralSuffix)
} label: {
Text(round.roundTitle())
}
.tag(round.id)
}
.tag(round.id)
}
}
Toggle("Inclure la liste d'attente", isOn: $includeWaitingList)
if includeWaitingList {
Toggle("Seulement la liste d'attente", isOn: $onlyWaitingList)
Toggle("Inclure la liste d'attente", isOn: $includeWaitingList)
if includeWaitingList {
Toggle("Seulement la liste d'attente", isOn: $onlyWaitingList)
}
} footer: {
Text("Si vous ne souhaitez pas contacter toutes les équipes, choisissez un ou plusieurs groupes d'équipes manuellement.")
}
} 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)
}
}

@ -16,6 +16,7 @@ struct EventSettingsView: View {
@State private var pageLink: PageLink = .teams
@State private var tournamentInformation: String = ""
@State private var eventStartDate: Date
@State private var showSendToAllView: Bool = false
@FocusState private var focusedField: Tournament.CodingKeys?
var visibleOnPadelClub: Binding<Bool> {
@ -92,6 +93,12 @@ struct EventSettingsView: View {
_linkLabel()
Section {
RowButtonView("Contactez toutes les équipes") {
showSendToAllView = true
}
}
Section {
DatePicker(selection: $eventStartDate) {
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)
.toolbar(content: {
if focusedField != nil {

Loading…
Cancel
Save