diff --git a/PadelClub.xcodeproj/project.pbxproj b/PadelClub.xcodeproj/project.pbxproj index fb6dd99..9b1b10e 100644 --- a/PadelClub.xcodeproj/project.pbxproj +++ b/PadelClub.xcodeproj/project.pbxproj @@ -3246,7 +3246,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.27; + MARKETING_VERSION = 1.0.28; PRODUCT_BUNDLE_IDENTIFIER = app.padelclub; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3290,7 +3290,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.27; + MARKETING_VERSION = 1.0.28; PRODUCT_BUNDLE_IDENTIFIER = app.padelclub; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/PadelClub/Data/Tournament.swift b/PadelClub/Data/Tournament.swift index 0165676..f79366b 100644 --- a/PadelClub/Data/Tournament.swift +++ b/PadelClub/Data/Tournament.swift @@ -1592,10 +1592,10 @@ defer { var entryFeeMessage: String { if let entryFee { - let message: String = "Inscription: \(entryFee.formatted(.currency(code: "EUR"))) par joueur." + let message: String = "Inscription : \(entryFee.formatted(.currency(code: Locale.defaultCurrency()))) par joueur." return [message, self._paymentMethodMessage()].compactMap { $0 }.joined(separator: "\n") } else { - return "Inscription: gratuite." + return "Inscription : gratuite." } } diff --git a/PadelClub/Extensions/Locale+Extensions.swift b/PadelClub/Extensions/Locale+Extensions.swift index 5e6534b..646be4c 100644 --- a/PadelClub/Extensions/Locale+Extensions.swift +++ b/PadelClub/Extensions/Locale+Extensions.swift @@ -20,4 +20,9 @@ extension Locale { return countries.sorted() } + + static func defaultCurrency() -> String { +// return "EUR" + Locale.current.currency?.identifier ?? "EUR" + } } diff --git a/PadelClub/Views/Cashier/CashierDetailView.swift b/PadelClub/Views/Cashier/CashierDetailView.swift index 074a67e..068d17f 100644 --- a/PadelClub/Views/Cashier/CashierDetailView.swift +++ b/PadelClub/Views/Cashier/CashierDetailView.swift @@ -26,7 +26,7 @@ struct CashierDetailView: View { Section { LabeledContent { if let earnings { - Text(earnings.formatted(.currency(code: "EUR").precision(.fractionLength(0)))) + Text(earnings.formatted(.currency(code: Locale.defaultCurrency()).precision(.fractionLength(0)))) } else { ProgressView() } @@ -95,7 +95,7 @@ struct CashierDetailView: View { Section { LabeledContent { if let earnings { - Text(earnings.formatted(.currency(code: "EUR").precision(.fractionLength(0)))) + Text(earnings.formatted(.currency(code: Locale.defaultCurrency()).precision(.fractionLength(0)))) } else { ProgressView() } @@ -144,7 +144,7 @@ struct CashierDetailView: View { var body: some View { LabeledContent { if let value { - Text(value.formatted(.currency(code: "EUR"))) + Text(value.formatted(.currency(code: Locale.defaultCurrency()))) } else { ProgressView() } @@ -173,7 +173,7 @@ struct CashierDetailView: View { LabeledContent { if let entryFee = tournament.entryFee { let sum = Double(count) * entryFee - Text(sum.formatted(.currency(code: "EUR"))) + Text(sum.formatted(.currency(code: Locale.defaultCurrency()))) } } label: { Text(type.localizedLabel()) diff --git a/PadelClub/Views/Cashier/CashierSettingsView.swift b/PadelClub/Views/Cashier/CashierSettingsView.swift index fd51e73..098c78b 100644 --- a/PadelClub/Views/Cashier/CashierSettingsView.swift +++ b/PadelClub/Views/Cashier/CashierSettingsView.swift @@ -24,85 +24,72 @@ struct CashierSettingsView: View { var body: some View { List { Section { - LabeledContent { - TextField(tournament.isFree() ? "Gratuite" : "Inscription", value: $entryFee, format: .currency(code: Locale.current.currency?.identifier ?? "EUR")) - .keyboardType(.decimalPad) - .multilineTextAlignment(.trailing) - .frame(maxWidth: .infinity) - .focused($focusedField, equals: ._entryFee) - } label: { - Text("Inscription") - } + TextField(tournament.isFree() ? "Gratuite" : "Inscription", value: $entryFee, format: .currency(code: Locale.defaultCurrency())) + .keyboardType(.decimalPad) + .multilineTextAlignment(.trailing) + .frame(maxWidth: .infinity) + .focused($focusedField, equals: ._entryFee) + } header: { + Text("Prix de l'inscription") } footer: { Text("Si vous souhaitez que Padel Club vous aide à suivre les encaissements, indiquer un prix d'inscription. Sinon Padel Club vous aidera à suivre simplement l'arrivée et la présence des joueurs.") } - Section { - RowButtonView("Tout le monde est arrivé", role: .destructive) { - let players = tournament.selectedPlayers() // tournaments.flatMap({ $0.selectedPlayers() }) - players.forEach { player in - player.hasArrived = true - } - do { - try tournament.tournamentStore.playerRegistrations.addOrUpdate(contentOfs: players) - } catch { - Logger.error(error) + + let players = tournament.selectedPlayers() + + if players.anySatisfy({ $0.hasArrived == false }) { + Section { + RowButtonView("Tout le monde est arrivé", role: .destructive) { + players.forEach { player in + player.hasArrived = true + } + _save(players: players) } + } footer: { + Text("Indique tous les joueurs sont là") } - } footer: { - Text("Indique tous les joueurs sont là") } - Section { - RowButtonView("Personne n'est là", role: .destructive) { - let players = tournament.selectedPlayers() // tournaments.flatMap({ $0.selectedPlayers() }) - players.forEach { player in - player.hasArrived = false - } - do { - try tournament.tournamentStore.playerRegistrations.addOrUpdate(contentOfs: players) - } catch { - Logger.error(error) + if players.anySatisfy({ $0.hasArrived == true }) { + Section { + RowButtonView("Personne n'est là", role: .destructive) { + players.forEach { player in + player.hasArrived = false + } + _save(players: players) } + } footer: { + Text("Indique qu'aucun joueur n'est arrivé") } - } footer: { - Text("Indique qu'aucun joueur n'est arrivé") } - Section { - RowButtonView("Tout le monde a réglé", role: .destructive) { - let players = tournament.selectedPlayers() // tournaments.flatMap({ $0.selectedPlayers() }) - players.forEach { player in - if player.hasPaid() == false { - player.paymentType = .gift + if players.anySatisfy({ $0.hasPaid() == false }) { + Section { + RowButtonView("Tout le monde a réglé", role: .destructive) { + players.forEach { player in + if player.hasPaid() == false { + player.paymentType = .gift + } } + _save(players: players) } - do { - try tournament.tournamentStore.playerRegistrations.addOrUpdate(contentOfs: players) - } catch { - Logger.error(error) - } + } footer: { + Text("Passe tous les joueurs qui n'ont pas réglé en offert") } - } footer: { - Text("Passe tous les joueurs qui n'ont pas réglé en offert") } - Section { - RowButtonView("Personne n'a réglé", role: .destructive) { - let store = tournament.tournamentStore - - let players = tournament.selectedPlayers() - players.forEach { player in - player.paymentType = nil - } - do { - try store.playerRegistrations.addOrUpdate(contentOfs: players) - } catch { - Logger.error(error) + if players.anySatisfy({ $0.hasPaid() == true }) { + Section { + RowButtonView("Personne n'a réglé", role: .destructive) { + players.forEach { player in + player.paymentType = nil + } + _save(players: players) } + } footer: { + Text("Remet à zéro le type d'encaissement de tous les joueurs") } - } footer: { - Text("Remet à zéro le type d'encaissement de tous les joueurs") } } .navigationBarBackButtonHidden(focusedField != nil) @@ -119,7 +106,7 @@ struct CashierSettingsView: View { HStack { if tournament.isFree() { ForEach(priceTags, id: \.self) { priceTag in - Button(priceTag.formatted(.currency(code: "EUR"))) { + Button(priceTag.formatted(.currency(code: Locale.defaultCurrency()))) { entryFee = priceTag tournament.entryFee = priceTag focusedField = nil @@ -150,6 +137,14 @@ struct CashierSettingsView: View { } } + private func _save(players: [PlayerRegistration]) { + do { + try tournament.tournamentStore.playerRegistrations.addOrUpdate(contentOfs: players) + } catch { + Logger.error(error) + } + } + private func _save() { do { try dataStore.tournaments.addOrUpdate(instance: tournament) diff --git a/PadelClub/Views/Planning/PlanningByCourtView.swift b/PadelClub/Views/Planning/PlanningByCourtView.swift index f90edc6..25592c6 100644 --- a/PadelClub/Views/Planning/PlanningByCourtView.swift +++ b/PadelClub/Views/Planning/PlanningByCourtView.swift @@ -132,17 +132,17 @@ struct PlanningByCourtView: View { } } else if noStartDate == false { ContentUnavailableView { - Label("Aucun match plannifié", systemImage: "clock.badge.questionmark") + Label("Aucun match planifié", systemImage: "clock.badge.questionmark") } description: { - Text("Aucun match n'a été plannifié sur ce terrain et au jour sélectionné") + Text("Aucun match n'a été planifié sur ce terrain et au jour sélectionné") } actions: { } } } else if noStartDate == false { ContentUnavailableView { - Label("Aucun match plannifié", systemImage: "clock.badge.questionmark") + Label("Aucun match planifié", systemImage: "clock.badge.questionmark") } description: { - Text("Aucun match n'a été plannifié sur ce terrain et au jour sélectionné") + Text("Aucun match n'a été planifié sur ce terrain et au jour sélectionné") } actions: { } } diff --git a/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift b/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift index 1d8efa3..7b2f6fe 100644 --- a/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift +++ b/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift @@ -45,7 +45,7 @@ struct TournamentGeneralSettingsView: View { TournamentDatePickerView() TournamentDurationManagerView() LabeledContent { - TextField(tournament.isFree() ? "Gratuite" : "Inscription", value: $entryFee, format: .currency(code: Locale.current.currency?.identifier ?? "EUR")) + TextField(tournament.isFree() ? "Gratuite" : "Inscription", value: $entryFee, format: .currency(code: Locale.defaultCurrency())) .keyboardType(.decimalPad) .multilineTextAlignment(.trailing) .frame(maxWidth: .infinity) @@ -125,7 +125,7 @@ struct TournamentGeneralSettingsView: View { if focusedField == ._entryFee { if tournament.isFree() { ForEach(priceTags, id: \.self) { priceTag in - Button(priceTag.formatted(.currency(code: "EUR"))) { + Button(priceTag.formatted(.currency(code: Locale.defaultCurrency()))) { entryFee = priceTag tournament.entryFee = priceTag focusedField = nil