From c191288eb7012c375a6b02253f48c380484b141c Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 4 Sep 2025 12:03:36 +0200 Subject: [PATCH 1/3] removes payment for summons --- PadelClub/Views/Calling/CallView.swift | 32 ++++----- .../Calling/Components/MenuWarningView.swift | 4 +- PadelClub/Views/Calling/SendToAllView.swift | 27 ++++--- .../Components/GroupStageTeamView.swift | 70 ++++++++----------- PadelClub/Views/Team/EditingTeamView.swift | 70 ++++++++----------- 5 files changed, 87 insertions(+), 116 deletions(-) diff --git a/PadelClub/Views/Calling/CallView.swift b/PadelClub/Views/Calling/CallView.swift index 821cdd4..dd25e95 100644 --- a/PadelClub/Views/Calling/CallView.swift +++ b/PadelClub/Views/Calling/CallView.swift @@ -262,10 +262,8 @@ struct CallView: View { NavigationStack { LoginView(reason: LoginReason.loginRequiredForFeature) { _ in self.showUserCreationView = false - self._payTournamentAndExecute { - self._summon(byMessage: self.summonParamByMessage, - reSummon: self.summonParamByMessage) - } + self._summon(byMessage: self.summonParamByMessage, + reSummon: self.summonParamByMessage) } } }) @@ -353,12 +351,10 @@ struct CallView: View { self.summonParamByMessage = byMessage self.summonParamReSummon = reSummon self._verifyUser { - self._payTournamentAndExecute { - if byMessage { - self._contactByMessage(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage) - } else { - self._contactByMail(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage) - } + if byMessage { + self._contactByMessage(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage) + } else { + self._contactByMail(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage) } } } @@ -371,14 +367,14 @@ struct CallView: View { } } - fileprivate func _payTournamentAndExecute(_ handler: () -> ()) { - do { - try self.tournament.payIfNecessary() - handler() - } catch { - self.showSubscriptionView = true - } - } +// fileprivate func _payTournamentAndExecute(_ handler: () -> ()) { +// do { +// try self.tournament.payIfNecessary() +// handler() +// } catch { +// self.showSubscriptionView = true +// } +// } fileprivate func _contactByMessage(reSummon: Bool, forcedEmptyMessage: Bool) { self.contactType = .message(date: callDate, diff --git a/PadelClub/Views/Calling/Components/MenuWarningView.swift b/PadelClub/Views/Calling/Components/MenuWarningView.swift index 885b1cf..fb3d4bf 100644 --- a/PadelClub/Views/Calling/Components/MenuWarningView.swift +++ b/PadelClub/Views/Calling/Components/MenuWarningView.swift @@ -147,9 +147,7 @@ struct MenuWarningView: View { fileprivate func _tryToContact() { self._verifyUser { - self._payTournamentAndExecute { - self.contactType = self.savedContactType - } + self.contactType = self.savedContactType } } diff --git a/PadelClub/Views/Calling/SendToAllView.swift b/PadelClub/Views/Calling/SendToAllView.swift index 8547947..41c82ce 100644 --- a/PadelClub/Views/Calling/SendToAllView.swift +++ b/PadelClub/Views/Calling/SendToAllView.swift @@ -272,13 +272,10 @@ struct SendToAllView: View { fileprivate func _contact() { self._verifyUser { - self._payTournamentAndExecute { - - if contactMethod == 0 { - contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.phoneNumber }, body: finalMessage(), tournamentBuild: nil) - } else { - contactType = .mail(date: nil, recipients: tournament.umpireMail(), bccRecipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.email }, body: finalMessage(), subject: tournament.mailSubject(), tournamentBuild: nil) - } + if contactMethod == 0 { + contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.phoneNumber }, body: finalMessage(), tournamentBuild: nil) + } else { + contactType = .mail(date: nil, recipients: tournament.umpireMail(), bccRecipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.email }, body: finalMessage(), subject: tournament.mailSubject(), tournamentBuild: nil) } } @@ -292,14 +289,14 @@ struct SendToAllView: View { } } - fileprivate func _payTournamentAndExecute(_ handler: () -> ()) { - do { - try tournament.payIfNecessary() - handler() - } catch { - self.showSubscriptionView = true - } - } +// fileprivate func _payTournamentAndExecute(_ handler: () -> ()) { +// do { +// try tournament.payIfNecessary() +// handler() +// } catch { +// self.showSubscriptionView = true +// } +// } private var _networkErrorMessage: String { ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected) diff --git a/PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift b/PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift index 00e83b9..f286b4b 100644 --- a/PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift +++ b/PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift @@ -147,55 +147,45 @@ struct GroupStageTeamView: View { Group { switch contactType { case .message(_, let recipients, let body, _): - if Guard.main.paymentForNewTournament() != nil { - MessageComposeView(recipients: recipients, body: body) { result in - switch result { - case .cancelled: - break - case .failed: - self.sentError = .messageFailed - case .sent: - if networkMonitor.connected == false { - self.contactType = nil - if team.getPhoneNumbers().isEmpty == false { - self.sentError = .uncalledTeams([team]) - } else { - self.sentError = .messageNotSent - } + MessageComposeView(recipients: recipients, body: body) { result in + switch result { + case .cancelled: + break + case .failed: + self.sentError = .messageFailed + case .sent: + if networkMonitor.connected == false { + self.contactType = nil + if team.getPhoneNumbers().isEmpty == false { + self.sentError = .uncalledTeams([team]) + } else { + self.sentError = .messageNotSent } - @unknown default: - break } + @unknown default: + break } - } else { - SubscriptionView(isPresented: self.$showSubscriptionView, showLackOfPlanMessage: true) - .environment(\.colorScheme, .light) } case .mail(_, let recipients, let bccRecipients, let body, let subject, _): - if Guard.main.paymentForNewTournament() != nil { - MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in - switch result { - case .cancelled, .saved: - self.contactType = nil - case .failed: + MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in + switch result { + case .cancelled, .saved: + self.contactType = nil + case .failed: + self.contactType = nil + self.sentError = .mailFailed + case .sent: + if networkMonitor.connected == false { self.contactType = nil - self.sentError = .mailFailed - case .sent: - if networkMonitor.connected == false { - self.contactType = nil - if team.getMail().isEmpty == false { - self.sentError = .uncalledTeams([team]) - } else { - self.sentError = .mailNotSent - } + if team.getMail().isEmpty == false { + self.sentError = .uncalledTeams([team]) + } else { + self.sentError = .mailNotSent } - @unknown default: - break } + @unknown default: + break } - } else { - SubscriptionView(isPresented: self.$showSubscriptionView, showLackOfPlanMessage: true) - .environment(\.colorScheme, .light) } } } diff --git a/PadelClub/Views/Team/EditingTeamView.swift b/PadelClub/Views/Team/EditingTeamView.swift index 6136e36..10a58ac 100644 --- a/PadelClub/Views/Team/EditingTeamView.swift +++ b/PadelClub/Views/Team/EditingTeamView.swift @@ -354,55 +354,45 @@ struct EditingTeamView: View { Group { switch contactType { case .message(_, let recipients, let body, _): - if Guard.main.paymentForNewTournament() != nil { - MessageComposeView(recipients: recipients, body: body) { result in - switch result { - case .cancelled: - break - case .failed: - self.sentError = .messageFailed - case .sent: - if networkMonitor.connected == false { - self.contactType = nil - if team.getPhoneNumbers().isEmpty == false { - self.sentError = .uncalledTeams([team]) - } else { - self.sentError = .messageNotSent - } + MessageComposeView(recipients: recipients, body: body) { result in + switch result { + case .cancelled: + break + case .failed: + self.sentError = .messageFailed + case .sent: + if networkMonitor.connected == false { + self.contactType = nil + if team.getPhoneNumbers().isEmpty == false { + self.sentError = .uncalledTeams([team]) + } else { + self.sentError = .messageNotSent } - @unknown default: - break } + @unknown default: + break } - } else { - SubscriptionView(isPresented: self.$showSubscriptionView, showLackOfPlanMessage: true) - .environment(\.colorScheme, .light) } case .mail(_, let recipients, let bccRecipients, let body, let subject, _): - if Guard.main.paymentForNewTournament() != nil { - MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in - switch result { - case .cancelled, .saved: + MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in + switch result { + case .cancelled, .saved: + self.contactType = nil + case .failed: + self.contactType = nil + self.sentError = .mailFailed + case .sent: + if networkMonitor.connected == false { self.contactType = nil - case .failed: - self.contactType = nil - self.sentError = .mailFailed - case .sent: - if networkMonitor.connected == false { - self.contactType = nil - if team.getMail().isEmpty == false { - self.sentError = .uncalledTeams([team]) - } else { - self.sentError = .mailNotSent - } + if team.getMail().isEmpty == false { + self.sentError = .uncalledTeams([team]) + } else { + self.sentError = .mailNotSent } - @unknown default: - break } + @unknown default: + break } - } else { - SubscriptionView(isPresented: self.$showSubscriptionView, showLackOfPlanMessage: true) - .environment(\.colorScheme, .light) } } } From eb7df86c501d099ae7863cd092b9a670568de771 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 17 Sep 2025 15:58:07 +0200 Subject: [PATCH 2/3] adds pack of 10 tournaments IAP --- PadelClub/SyncedProducts.storekit | 65 ++++++++++++++----- .../Subscription/PurchaseListView.swift | 2 +- 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/PadelClub/SyncedProducts.storekit b/PadelClub/SyncedProducts.storekit index 35f21ef..e324bec 100644 --- a/PadelClub/SyncedProducts.storekit +++ b/PadelClub/SyncedProducts.storekit @@ -1,11 +1,36 @@ { + "appPolicies" : { + "eula" : "", + "policies" : [ + { + "locale" : "en_US", + "policyText" : "", + "policyURL" : "" + } + ] + }, "identifier" : "2055C391", "nonRenewingSubscriptions" : [ ], "products" : [ { - "displayPrice" : "14.0", + "displayPrice" : "129.0", + "familyShareable" : false, + "internalID" : "6751947241", + "localizations" : [ + { + "description" : "Achetez 10 tournois", + "displayName" : "Pack de 10 tournois", + "locale" : "fr" + } + ], + "productID" : "app.padelclub.tournament.unit.10", + "referenceName" : "Pack de 10 tournois", + "type" : "Consumable" + }, + { + "displayPrice" : "17.0", "familyShareable" : false, "internalID" : "6484163993", "localizations" : [ @@ -22,57 +47,53 @@ ], "settings" : { "_applicationInternalID" : "6484163558", + "_askToBuyEnabled" : false, + "_billingGracePeriodEnabled" : false, + "_billingIssuesEnabled" : false, "_compatibilityTimeRate" : { "3" : 6 }, "_developerTeamID" : "BQ3Y44M3Q6", + "_disableDialogs" : false, "_failTransactionsEnabled" : false, - "_lastSynchronizedDate" : 735034894.72550702, + "_lastSynchronizedDate" : 779705033.96878397, "_locale" : "en_US", + "_renewalBillingIssuesEnabled" : false, "_storefront" : "USA", "_storeKitErrors" : [ { - "current" : null, "enabled" : false, "name" : "Load Products" }, { - "current" : null, "enabled" : false, "name" : "Purchase" }, { - "current" : null, "enabled" : false, "name" : "Verification" }, { - "current" : null, "enabled" : false, "name" : "App Store Sync" }, { - "current" : null, "enabled" : false, "name" : "Subscription Status" }, { - "current" : null, "enabled" : false, "name" : "App Transaction" }, { - "current" : null, "enabled" : false, "name" : "Manage Subscriptions Sheet" }, { - "current" : null, "enabled" : false, "name" : "Refund Request Sheet" }, { - "current" : null, "enabled" : false, "name" : "Offer Code Redeem Sheet" } @@ -89,7 +110,15 @@ "subscriptions" : [ { "adHocOffers" : [ - + { + "displayPrice" : "45.0", + "internalID" : "1A02CDB5", + "numberOfPeriods" : 12, + "offerID" : "PRICE50", + "paymentMode" : "payAsYouGo", + "referenceName" : "ancien prix 50", + "subscriptionPeriod" : "P1M" + } ], "codeOffers" : [ @@ -110,7 +139,10 @@ "recurringSubscriptionPeriod" : "P1M", "referenceName" : "Monthly Five", "subscriptionGroupID" : "21474782", - "type" : "RecurringSubscription" + "type" : "RecurringSubscription", + "winbackOffers" : [ + + ] }, { "adHocOffers" : [ @@ -135,13 +167,16 @@ "recurringSubscriptionPeriod" : "P1M", "referenceName" : "Monthly Unlimited", "subscriptionGroupID" : "21474782", - "type" : "RecurringSubscription" + "type" : "RecurringSubscription", + "winbackOffers" : [ + + ] } ] } ], "version" : { - "major" : 3, + "major" : 4, "minor" : 0 } } diff --git a/PadelClub/Views/Tournament/Subscription/PurchaseListView.swift b/PadelClub/Views/Tournament/Subscription/PurchaseListView.swift index 0549710..1df730f 100644 --- a/PadelClub/Views/Tournament/Subscription/PurchaseListView.swift +++ b/PadelClub/Views/Tournament/Subscription/PurchaseListView.swift @@ -110,7 +110,7 @@ struct PurchaseView: View { var body: some View { HStack { - Image(systemName: self.purchaseRow.item.systemImage) + Image(systemName: self.purchaseRow.item.summarySystemImage) .foregroundColor(.accentColor).font(.title2) VStack(alignment: .leading) { Text(self.purchaseRow.name) From c5ff31a39656850392ae0a54d8a5f6ef671402f1 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 18 Sep 2025 11:35:12 +0200 Subject: [PATCH 3/3] change default storefront for IAP --- PadelClub/SyncedProducts.storekit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PadelClub/SyncedProducts.storekit b/PadelClub/SyncedProducts.storekit index e324bec..acf9b32 100644 --- a/PadelClub/SyncedProducts.storekit +++ b/PadelClub/SyncedProducts.storekit @@ -57,9 +57,9 @@ "_disableDialogs" : false, "_failTransactionsEnabled" : false, "_lastSynchronizedDate" : 779705033.96878397, - "_locale" : "en_US", + "_locale" : "fr", "_renewalBillingIssuesEnabled" : false, - "_storefront" : "USA", + "_storefront" : "FRA", "_storeKitErrors" : [ { "enabled" : false,