Adds payment when adding supervisors

main
Laurent 1 month ago
parent b239ff9a07
commit dec6f21db9
  1. 9
      PadelClub/Views/Tournament/Subscription/PaymentStatusView.swift
  2. 8
      PadelClub/Views/Tournament/TournamentView.swift
  3. 15
      PadelClub/Views/User/ShareModelView.swift

@ -48,6 +48,8 @@ struct PaymentStatusView: View {
@State var payment: TournamentPayment? = .free @State var payment: TournamentPayment? = .free
@State var noOfferMessage: String? = nil
var body: some View { var body: some View {
Group { Group {
@ -58,7 +60,8 @@ struct PaymentStatusView: View {
let text = "Tournoi offert (\(remaining) restant\(end))" let text = "Tournoi offert (\(remaining) restant\(end))"
ImageInfoView(systemImage: "gift.fill", text: text, tip: FreeTournamentTip()) ImageInfoView(systemImage: "gift.fill", text: text, tip: FreeTournamentTip())
case nil: case nil:
ImageInfoView(systemImage: "exclamationmark.bubble.fill", text: "Veuillez souscrire à une offre pour convoquer ou entrer un résultat", textColor: .white, backgroundColor: .logoRed, tip: NoPaymentTip()) var text = noOfferMessage ?? "Veuillez souscrire à une offre pour entrer un résultat"
ImageInfoView(systemImage: "exclamationmark.bubble.fill", text: text, textColor: .white, backgroundColor: .logoRed, tip: NoPaymentTip())
default: default:
EmptyView() EmptyView()
} }
@ -77,7 +80,7 @@ struct PaymentStatusView: View {
struct FreeTournamentTip: Tip { struct FreeTournamentTip: Tip {
var title: Text { var title: Text {
return Text("Nous vous offrons vos 3 premiers tournois ! Convoquez les équipes, créez les poules, le tableau comme vous le souhaitez. \nEnregistrez les résultats de chaque équipes et diffusez les scores en temps réel sur les écrans de votre club !\n\n Votre tournoi est décompté lorsque vous convoquez ou que vous rentrez un résultat.") return Text("Nous vous offrons vos 3 premiers tournois ! Convoquez les équipes, créez les poules, le tableau comme vous le souhaitez. \nEnregistrez les résultats de chaque équipes et diffusez les scores en temps réel sur les écrans de votre club !\n\n Votre tournoi est décompté lorsque vous rentrez un résultat.")
} }
var image: Image? { var image: Image? {
@ -88,7 +91,7 @@ struct FreeTournamentTip: Tip {
struct NoPaymentTip: Tip { struct NoPaymentTip: Tip {
var title: Text { var title: Text {
return Text("Vous ne disposez plus d'une offre vous permettant de convoquer les joueurs et de rentrer les résultats des matchs. Nous vous invitons à consulter les offres dans l'onglet JA.").foregroundStyle(.white) return Text("Vous ne disposez plus d'une offre vous permettant de rentrer les résultats des matchs. Nous vous invitons à consulter les offres dans l'onglet JA.").foregroundStyle(.white)
} }
var image: Image? { var image: Image? {

@ -168,7 +168,13 @@ struct TournamentView: View {
case .print: case .print:
PrintSettingsView(tournament: tournament) PrintSettingsView(tournament: tournament)
case .share: case .share:
ShareModelView(instance: tournament) ShareModelView(instance: tournament, handler: { users in
if users.count > 0 {
Task {
try? await self.tournament.payIfNecessary()
}
}
})
case .restingTime: case .restingTime:
TeamRestingView() TeamRestingView()
case .stateSettings: case .stateSettings:

@ -10,16 +10,22 @@ import LeStorage
import SwiftUI import SwiftUI
import PadelClubData import PadelClubData
typealias UsersClosure = (([String]) -> ())
struct ShareModelView<T: SyncedStorable> : View { struct ShareModelView<T: SyncedStorable> : View {
@StateObject private var viewModel = UserSearchViewModel() @StateObject private var viewModel = UserSearchViewModel()
let instance: T let instance: T
var handler: UsersClosure? = nil
@State var payment: TournamentPayment? = nil
var body: some View { var body: some View {
List { List {
if T.self is Tournament.Type {
Section {
PaymentStatusView(noOfferMessage: "Veuillez souscrire à une offre afin de payer le tournoi")
}
}
if !self.viewModel.availableUsers.isEmpty { if !self.viewModel.availableUsers.isEmpty {
ForEach(self.viewModel.availableUsers, id: \.id) { user in ForEach(self.viewModel.availableUsers, id: \.id) { user in
let isSelected = viewModel.contains(user.id) let isSelected = viewModel.contains(user.id)
@ -50,9 +56,10 @@ struct ShareModelView<T: SyncedStorable> : View {
.toolbarBackground(.visible, for: .navigationBar) .toolbarBackground(.visible, for: .navigationBar)
.onAppear { .onAppear {
self.viewModel.selectedUsers = StoreCenter.main.authorizedUsers(for: self.instance.stringId) self.viewModel.selectedUsers = StoreCenter.main.authorizedUsers(for: self.instance.stringId)
}.onDisappear {
if let handler {
handler(self.viewModel.selectedUsers)
} }
.task {
self.payment = await Guard.main.paymentForNewTournament()
} }
} }

Loading…
Cancel
Save