From 7988a9585c50e93d92253e8f4d4e142e4c93e686 Mon Sep 17 00:00:00 2001 From: Raz Date: Tue, 15 Apr 2025 08:59:52 +0200 Subject: [PATCH] fix online payment stuff --- PadelClub/Data/Tournament.swift | 9 ++++-- PadelClub/Utils/Network/RefundService.swift | 2 +- .../Navigation/Agenda/EventListView.swift | 12 ++++++-- .../Views/Navigation/Umpire/UmpireView.swift | 5 +++- .../Player/Components/PlayerPayView.swift | 4 +++ PadelClub/Views/Player/PlayerDetailView.swift | 14 +++++++-- PadelClub/Views/Team/EditingTeamView.swift | 30 +++++++++---------- .../Views/Tournament/Screen/AddTeamView.swift | 5 ++++ 8 files changed, 56 insertions(+), 25 deletions(-) diff --git a/PadelClub/Data/Tournament.swift b/PadelClub/Data/Tournament.swift index 056e5a1..4fe9f16 100644 --- a/PadelClub/Data/Tournament.swift +++ b/PadelClub/Data/Tournament.swift @@ -2390,11 +2390,16 @@ defer { func refreshTeamList(forced: Bool) async { guard StoreCenter.main.isAuthenticated else { return } guard tournamentStore?.store.fileCollectionsAllLoaded() == true else { return } - guard shouldRefreshTeams(forced: forced), refreshInProgress == false, enableOnlineRegistration, hasEnded() == false else { return } + guard shouldRefreshTeams(forced: forced), refreshInProgress == false else { return } + if forced == false { + guard enableOnlineRegistration, hasEnded() == false else { + return + } + } refreshInProgress = true do { try await self.tournamentStore?.playerRegistrations.loadDataFromServerIfAllowed(clear: true) - try await self.tournamentStore?.teamScores.loadDataFromServerIfAllowed(clear: true) + //try await self.tournamentStore?.teamScores.loadDataFromServerIfAllowed(clear: true) try await self.tournamentStore?.teamRegistrations.loadDataFromServerIfAllowed(clear: true) refreshInProgress = false lastTeamRefresh = Date() diff --git a/PadelClub/Utils/Network/RefundService.swift b/PadelClub/Utils/Network/RefundService.swift index 20eb00f..576d5aa 100644 --- a/PadelClub/Utils/Network/RefundService.swift +++ b/PadelClub/Utils/Network/RefundService.swift @@ -20,7 +20,7 @@ class RefundService { throw RefundError.requestFailed } - let refundResponse = try JSONDecoder().decode(RefundResponse.self, from: data) + let refundResponse = try JSON.decoder.decode(RefundResponse.self, from: data) return refundResponse } } diff --git a/PadelClub/Views/Navigation/Agenda/EventListView.swift b/PadelClub/Views/Navigation/Agenda/EventListView.swift index fece518..c39e0c2 100644 --- a/PadelClub/Views/Navigation/Agenda/EventListView.swift +++ b/PadelClub/Views/Navigation/Agenda/EventListView.swift @@ -324,10 +324,18 @@ struct EventListView: View { if let store = notification.object as? SyncedCollection { if store.storeId == tournament.id { - tournament.lastTeamRefresh = Date() + if tournament.store?.fileCollectionsAllLoaded() == true { + tournament.lastTeamRefresh = nil + } + } + } + if let store = notification.object as? SyncedCollection { + if store.storeId == tournament.id { + if tournament.store?.fileCollectionsAllLoaded() == true { + tournament.lastTeamRefresh = nil + } } } - }) .id(tournament.lastTeamRefresh) .task(priority: .background) { diff --git a/PadelClub/Views/Navigation/Umpire/UmpireView.swift b/PadelClub/Views/Navigation/Umpire/UmpireView.swift index 7a160fc..0588566 100644 --- a/PadelClub/Views/Navigation/Umpire/UmpireView.swift +++ b/PadelClub/Views/Navigation/Umpire/UmpireView.swift @@ -243,7 +243,10 @@ struct UmpireView: View { // } // } } - .id(StoreCenter.main.isAuthenticated) + .onChange(of: StoreCenter.main.userId) { + license = dataStore.user.licenceId ?? "" + licenseMessage = nil + } .navigationTitle("Juge-Arbitre") .toolbar { #if DEBUG diff --git a/PadelClub/Views/Player/Components/PlayerPayView.swift b/PadelClub/Views/Player/Components/PlayerPayView.swift index e4e8b85..0c989b6 100644 --- a/PadelClub/Views/Player/Components/PlayerPayView.swift +++ b/PadelClub/Views/Player/Components/PlayerPayView.swift @@ -20,7 +20,11 @@ struct PlayerPayView: View { Text(type.localizedLabel()).tag(type as PlayerPaymentType?) } } label: { + if player.hasPaidOnline() { + Text("a payé en ligne").foregroundStyle(.logoRed) + } } + .disabled(player.hasPaidOnline()) .pickerStyle(.menu) .fixedSize() .onChange(of: player.paymentType) { diff --git a/PadelClub/Views/Player/PlayerDetailView.swift b/PadelClub/Views/Player/PlayerDetailView.swift index 9905c45..8cb55e3 100644 --- a/PadelClub/Views/Player/PlayerDetailView.swift +++ b/PadelClub/Views/Player/PlayerDetailView.swift @@ -38,20 +38,28 @@ struct PlayerDetailView: View { Text("Source des informations") } - if tournament.enableOnlineRegistration { + if tournament.enableOnlineRegistration || player.registeredOnline || player.hasPaidOnline() { Section { LabeledContent { Text(player.registeredOnline ? "Oui" : "Non") } label: { Text("Inscription en ligne") } + + if player.captain { + LabeledContent { + Text(player.hasPaidOnline() ? "Oui" : "Non") + } label: { + Text("A payé pour l'équipe en ligne") + } + } } } Section { Toggle("Joueur sur place", isOn: $player.hasArrived) - Toggle("Capitaine", isOn: $player.captain) - Toggle("Coach", isOn: $player.coach) + //Toggle("Capitaine", isOn: $player.captain).disabled(player.hasPaidOnline()) + //Toggle("Coach", isOn: $player.coach) } Section { diff --git a/PadelClub/Views/Team/EditingTeamView.swift b/PadelClub/Views/Team/EditingTeamView.swift index a8f6fa9..d4d5641 100644 --- a/PadelClub/Views/Team/EditingTeamView.swift +++ b/PadelClub/Views/Team/EditingTeamView.swift @@ -78,10 +78,9 @@ struct EditingTeamView: View { var body: some View { List { Section { - RowButtonView("Modifier la composition de l'équipe", role: team.hasRegisteredOnline() ? .destructive : .none, confirmationMessage: "Vous êtes sur le point de modifier une équipe qui s'est inscrite en ligne.") { + RowButtonView("Modifier la composition de l'équipe", role: (team.hasRegisteredOnline() || team.hasPaidOnline()) ? .destructive : .none, confirmationMessage: "Vous êtes sur le point de modifier une équipe qui s'est inscrite en ligne.") { editedTeam = team } - .disabled(team.hasPaidOnline()) TeamDetailView(team: team) } header: { if team.hasRegisteredOnline() { @@ -90,19 +89,15 @@ struct EditingTeamView: View { Text("Inscription par vous-même") } } footer: { - if team.hasPaidOnline() { - Text("Cette équipe a réglé son inscription en ligne, la modification de l'équipe est impossible.").foregroundStyle(.logoRed) - } else { - HStack { - CopyPasteButtonView(pasteValue: team.playersPasteData()) - Spacer() - NavigationLink { - GroupStageTeamReplacementView(team: team) - .environment(tournament) - } label: { - Text("Chercher à remplacer") - .underline() - } + HStack { + CopyPasteButtonView(pasteValue: team.playersPasteData()) + Spacer() + NavigationLink { + GroupStageTeamReplacementView(team: team) + .environment(tournament) + } label: { + Text("Chercher à remplacer") + .underline() } } } @@ -242,8 +237,11 @@ struct EditingTeamView: View { } dismiss() } + .disabled(team.hasPaidOnline()) } footer: { - if team.hasRegisteredOnline() { + if team.hasPaidOnline() { + Text("Il n'est pas possible de supprimer cette équipe, leur inscription a été payée en ligne. Vous pouvez les mettre forfait et/ou les rembourser.").foregroundStyle(.logoRed) + } else if team.hasRegisteredOnline() { Text("Attention, supprimer cette équipe notifiera par email que leur inscription a été annulée.").foregroundStyle(.logoRed) } } diff --git a/PadelClub/Views/Tournament/Screen/AddTeamView.swift b/PadelClub/Views/Tournament/Screen/AddTeamView.swift index e96ebe5..e91d8f4 100644 --- a/PadelClub/Views/Tournament/Screen/AddTeamView.swift +++ b/PadelClub/Views/Tournament/Screen/AddTeamView.swift @@ -492,9 +492,14 @@ struct AddTeamView: View { if tournament.isPlayerRankInadequate(player: p) { Text("Trop bien classé !").foregroundStyle(.logoRed).bold() } + if p.captain, p.hasPaidOnline() { + Text("A payé pour l'équipe en ligne").foregroundStyle(.logoRed).bold() + } + PlayerView(player: p).tag(p.id) .environment(tournament) } + .selectionDisabled(p.captain && p.hasPaidOnline()) } if let p = fetchPlayers.first(where: { $0.license == id }) { VStack(alignment: .leading, spacing: 0) {