multistore
Razmig Sarkissian 1 year ago
parent 48e872a41b
commit d4dc4422ca
  1. 4
      PadelClub.xcodeproj/project.pbxproj
  2. 11
      PadelClub/Data/PlayerRegistration.swift
  3. 18
      PadelClub/Views/Calling/SeedsCallingView.swift
  4. 4
      PadelClub/Views/Calling/SendToAllView.swift
  5. 12
      PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift
  6. 4
      PadelClub/Views/Player/Components/EditablePlayerView.swift
  7. 18
      PadelClub/Views/Tournament/FileImportView.swift
  8. 2
      PadelClub/Views/Tournament/Screen/BroadcastView.swift
  9. 2
      PadelClub/Views/Tournament/TournamentBuildView.swift

@ -1882,7 +1882,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 73; CURRENT_PROJECT_VERSION = 74;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\"";
@ -1922,7 +1922,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 73; CURRENT_PROJECT_VERSION = 74;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\"";
DEVELOPMENT_TEAM = BQ3Y44M3Q6; DEVELOPMENT_TEAM = BQ3Y44M3Q6;

@ -80,8 +80,15 @@ class PlayerRegistration: ModelObject, Storable {
licenceId = federalData[3] licenceId = federalData[3]
clubName = federalData[4] clubName = federalData[4]
rank = Int(federalData[5]) rank = Int(federalData[5])
email = federalData[6] let _email = federalData[6]
phoneNumber = federalData[7] if _email.isEmpty == false {
self.email = _email
}
let _phoneNumber = federalData[7]
if _phoneNumber.isEmpty == false {
self.phoneNumber = _phoneNumber
}
source = .beachPadel source = .beachPadel
if sexUnknown { if sexUnknown {
if sex == 1 && FileImportManager.shared.foundInWomenData(license: federalData[3]) { if sex == 1 && FileImportManager.shared.foundInWomenData(license: federalData[3]) {

@ -9,7 +9,7 @@ import SwiftUI
struct SeedsCallingView: View { struct SeedsCallingView: View {
@Environment(Tournament.self) var tournament: Tournament @Environment(Tournament.self) var tournament: Tournament
@State private var displayByMatch: Bool = false @State private var displayByMatch: Bool = true
var body: some View { var body: some View {
List { List {
@ -48,6 +48,14 @@ struct SeedsCallingView: View {
} }
let keys = times.keys.compactMap { $0 }.sorted() let keys = times.keys.compactMap { $0 }.sorted()
List { List {
Section {
RowButtonView(displayByMatch ? "Regrouper par horaire" : "Lister par match") {
displayByMatch.toggle()
}
}
if displayByMatch == false { if displayByMatch == false {
ForEach(keys, id: \.self) { time in ForEach(keys, id: \.self) { time in
if let matches = times[time] { if let matches = times[time] {
@ -109,14 +117,6 @@ struct SeedsCallingView: View {
.navigationTitle(round.roundTitle()) .navigationTitle(round.roundTitle())
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbarBackground(.visible, for: .navigationBar) .toolbarBackground(.visible, for: .navigationBar)
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button(displayByMatch ? "par horaire" : "par match") {
displayByMatch.toggle()
}
.buttonBorderShape(.capsule)
}
}
} }
} }

@ -20,7 +20,7 @@ struct SendToAllView: View {
@State private var sentError: ContactManagerError? = nil @State private var sentError: ContactManagerError? = nil
let addLink: Bool let addLink: Bool
// @State var cannotPayForTournament: Bool = false // @State var cannotPayForTournament: Bool = false
@State private var pageLink: PageLink = .teams @State private var pageLink: PageLink = .matches
@State var showSubscriptionView: Bool = false @State var showSubscriptionView: Bool = false
@State var showUserCreationView: Bool = false @State var showUserCreationView: Bool = false
@ -75,6 +75,8 @@ struct SendToAllView: View {
.tag(round.id) .tag(round.id)
} }
} }
} footer: {
Text("Si vous ne souhaitez pas contacter toutes les équipes, choisissez un ou plusieurs groupes d'équipes manuellement.")
} }
if addLink { if addLink {

@ -39,7 +39,7 @@ struct GroupStageTeamReplacementView: View {
private func _searchableRange(_ teamRange: TeamRegistration.TeamRange) -> String { private func _searchableRange(_ teamRange: TeamRegistration.TeamRange) -> String {
let left = teamRange.left?.weight let left = teamRange.left?.weight
let right = teamRange.right?.weight let right = teamRange.right?.weight
let sides = [left, right].compactMap({ $0 }).map { $0 - _getWeight() } let sides = [left, right].compactMap({ $0 }).map { max($0 - _getWeight(), 1) }
return sides.map({ String($0) }).joined(separator: ",") return sides.map({ String($0) }).joined(separator: ",")
} }
@ -73,9 +73,11 @@ struct GroupStageTeamReplacementView: View {
.labelsHidden() .labelsHidden()
.pickerStyle(.inline) .pickerStyle(.inline)
} header: { } header: {
Text("Remplacer") if let selectedPlayer {
} footer: { Text("Remplacer \(selectedPlayer.playerLabel())")
Text("Remplacement de l'équipe ou d'un joueur particulier") } else {
Text("Remplacer toute l'équipe")
}
} }
if let teamRange { if let teamRange {
@ -147,7 +149,7 @@ struct GroupStageTeamReplacementView: View {
@ViewBuilder @ViewBuilder
var body: some View { var body: some View {
if let team { if let team, team.weight + playerWeight > 0 {
Text((team.weight + playerWeight).formatted()).font(.largeTitle) Text((team.weight + playerWeight).formatted()).font(.largeTitle)
} else { } else {
Text("Aucune limite") Text("Aucune limite")

@ -96,8 +96,8 @@ struct EditablePlayerView: View {
} }
if let mail = player.email, let url = URL(string: "mailto:\(mail)") { if let mail = player.email, let url = URL(string: "mailto:\(mail)") {
Link(destination: url) { Link(destination: url) {
Label("SMS", systemImage: "message") Label("Mail", systemImage: "envelope")
Text(mail) Text(mail).lineLimit(1)
} }
} }

@ -142,7 +142,7 @@ struct FileImportView: View {
} }
} }
if let tournaments = tournament.eventObject()?.tournaments, tournaments.count > 1, fileProvider == .frenchFederation { if let event = tournament.eventObject(), event.tenupId != nil, event.tournaments.count > 1, fileProvider == .frenchFederation {
Section { Section {
RowButtonView("Importer pour tous les tournois") { RowButtonView("Importer pour tous les tournois") {
multiImport = true multiImport = true
@ -443,10 +443,20 @@ struct FileImportView: View {
await MonthData.calculateCurrentUnrankedValues(mostRecentDateAvailable: rankSourceDate) await MonthData.calculateCurrentUnrankedValues(mostRecentDateAvailable: rankSourceDate)
} }
let tournaments = tournament.eventObject()?.tournaments ?? [tournament] let event: Event? = tournament.eventObject()
for tournament in tournaments { if let event, event.tenupId != nil {
let _teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: tournament, fileProvider: fileProvider) var categoriesDone: [TournamentCategory] = []
for someTournament in event.tournaments {
if categoriesDone.contains(someTournament.tournamentCategory) == false {
let _teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: someTournament, fileProvider: fileProvider)
self.teams += _teams self.teams += _teams
categoriesDone.append(someTournament.tournamentCategory)
} else {
errorMessage = "Attention, l'événement possède plusieurs tournois d'une même catégorie (homme, femme, mixte), Padel Club ne peut savoir quelle équipe appartient à quel tournoi."
}
}
} else {
self.teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: tournament, fileProvider: fileProvider)
} }
await MainActor.run { await MainActor.run {

@ -23,7 +23,7 @@ struct BroadcastView: View {
let filter = CIFilter.qrCodeGenerator() let filter = CIFilter.qrCodeGenerator()
@State private var urlToShow: String? @State private var urlToShow: String?
@State private var tvMode: Bool = false @State private var tvMode: Bool = false
@State private var pageLink: PageLink = .teams @State private var pageLink: PageLink = .matches
let createAccountTip = CreateAccountTip() let createAccountTip = CreateAccountTip()
let tournamentPublishingTip = TournamentPublishingTip() let tournamentPublishingTip = TournamentPublishingTip()

@ -64,7 +64,7 @@ struct TournamentBuildView: View {
} label: { } label: {
Text("Tableau") Text("Tableau")
if tournament.shouldVerifyBracket { if tournament.shouldVerifyBracket {
Text("Vérifier la tableau").foregroundStyle(.logoRed) Text("Vérifier le tableau").foregroundStyle(.logoRed)
} else if let description = bracketStatus?.1 { } else if let description = bracketStatus?.1 {
Text(description) Text(description)
} else if let range = bracketStatus?.2 { } else if let range = bracketStatus?.2 {

Loading…
Cancel
Save