Laurent 2 months ago
commit 8987c46fae
  1. 69
      PadelClub/SyncedProducts.storekit
  2. 32
      PadelClub/Views/Calling/CallView.swift
  3. 4
      PadelClub/Views/Calling/Components/MenuWarningView.swift
  4. 27
      PadelClub/Views/Calling/SendToAllView.swift
  5. 70
      PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift
  6. 70
      PadelClub/Views/Team/EditingTeamView.swift
  7. 2
      PadelClub/Views/Tournament/Subscription/PurchaseListView.swift

@ -1,11 +1,36 @@
{ {
"appPolicies" : {
"eula" : "",
"policies" : [
{
"locale" : "en_US",
"policyText" : "",
"policyURL" : ""
}
]
},
"identifier" : "2055C391", "identifier" : "2055C391",
"nonRenewingSubscriptions" : [ "nonRenewingSubscriptions" : [
], ],
"products" : [ "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, "familyShareable" : false,
"internalID" : "6484163993", "internalID" : "6484163993",
"localizations" : [ "localizations" : [
@ -22,57 +47,53 @@
], ],
"settings" : { "settings" : {
"_applicationInternalID" : "6484163558", "_applicationInternalID" : "6484163558",
"_askToBuyEnabled" : false,
"_billingGracePeriodEnabled" : false,
"_billingIssuesEnabled" : false,
"_compatibilityTimeRate" : { "_compatibilityTimeRate" : {
"3" : 6 "3" : 6
}, },
"_developerTeamID" : "BQ3Y44M3Q6", "_developerTeamID" : "BQ3Y44M3Q6",
"_disableDialogs" : false,
"_failTransactionsEnabled" : false, "_failTransactionsEnabled" : false,
"_lastSynchronizedDate" : 735034894.72550702, "_lastSynchronizedDate" : 779705033.96878397,
"_locale" : "en_US", "_locale" : "fr",
"_storefront" : "USA", "_renewalBillingIssuesEnabled" : false,
"_storefront" : "FRA",
"_storeKitErrors" : [ "_storeKitErrors" : [
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Load Products" "name" : "Load Products"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Purchase" "name" : "Purchase"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Verification" "name" : "Verification"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "App Store Sync" "name" : "App Store Sync"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Subscription Status" "name" : "Subscription Status"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "App Transaction" "name" : "App Transaction"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Manage Subscriptions Sheet" "name" : "Manage Subscriptions Sheet"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Refund Request Sheet" "name" : "Refund Request Sheet"
}, },
{ {
"current" : null,
"enabled" : false, "enabled" : false,
"name" : "Offer Code Redeem Sheet" "name" : "Offer Code Redeem Sheet"
} }
@ -89,7 +110,15 @@
"subscriptions" : [ "subscriptions" : [
{ {
"adHocOffers" : [ "adHocOffers" : [
{
"displayPrice" : "45.0",
"internalID" : "1A02CDB5",
"numberOfPeriods" : 12,
"offerID" : "PRICE50",
"paymentMode" : "payAsYouGo",
"referenceName" : "ancien prix 50",
"subscriptionPeriod" : "P1M"
}
], ],
"codeOffers" : [ "codeOffers" : [
@ -110,7 +139,10 @@
"recurringSubscriptionPeriod" : "P1M", "recurringSubscriptionPeriod" : "P1M",
"referenceName" : "Monthly Five", "referenceName" : "Monthly Five",
"subscriptionGroupID" : "21474782", "subscriptionGroupID" : "21474782",
"type" : "RecurringSubscription" "type" : "RecurringSubscription",
"winbackOffers" : [
]
}, },
{ {
"adHocOffers" : [ "adHocOffers" : [
@ -135,13 +167,16 @@
"recurringSubscriptionPeriod" : "P1M", "recurringSubscriptionPeriod" : "P1M",
"referenceName" : "Monthly Unlimited", "referenceName" : "Monthly Unlimited",
"subscriptionGroupID" : "21474782", "subscriptionGroupID" : "21474782",
"type" : "RecurringSubscription" "type" : "RecurringSubscription",
"winbackOffers" : [
]
} }
] ]
} }
], ],
"version" : { "version" : {
"major" : 3, "major" : 4,
"minor" : 0 "minor" : 0
} }
} }

@ -262,10 +262,8 @@ struct CallView: View {
NavigationStack { NavigationStack {
LoginView(reason: LoginReason.loginRequiredForFeature) { _ in LoginView(reason: LoginReason.loginRequiredForFeature) { _ in
self.showUserCreationView = false self.showUserCreationView = false
self._payTournamentAndExecute { self._summon(byMessage: self.summonParamByMessage,
self._summon(byMessage: self.summonParamByMessage, reSummon: self.summonParamByMessage)
reSummon: self.summonParamByMessage)
}
} }
} }
}) })
@ -353,12 +351,10 @@ struct CallView: View {
self.summonParamByMessage = byMessage self.summonParamByMessage = byMessage
self.summonParamReSummon = reSummon self.summonParamReSummon = reSummon
self._verifyUser { self._verifyUser {
self._payTournamentAndExecute { if byMessage {
if byMessage { self._contactByMessage(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage)
self._contactByMessage(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage) } else {
} else { self._contactByMail(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage)
self._contactByMail(reSummon: reSummon, forcedEmptyMessage: forcedEmptyMessage)
}
} }
} }
} }
@ -371,14 +367,14 @@ struct CallView: View {
} }
} }
fileprivate func _payTournamentAndExecute(_ handler: () -> ()) { // fileprivate func _payTournamentAndExecute(_ handler: () -> ()) {
do { // do {
try self.tournament.payIfNecessary() // try self.tournament.payIfNecessary()
handler() // handler()
} catch { // } catch {
self.showSubscriptionView = true // self.showSubscriptionView = true
} // }
} // }
fileprivate func _contactByMessage(reSummon: Bool, forcedEmptyMessage: Bool) { fileprivate func _contactByMessage(reSummon: Bool, forcedEmptyMessage: Bool) {
self.contactType = .message(date: callDate, self.contactType = .message(date: callDate,

@ -147,9 +147,7 @@ struct MenuWarningView: View {
fileprivate func _tryToContact() { fileprivate func _tryToContact() {
self._verifyUser { self._verifyUser {
self._payTournamentAndExecute { self.contactType = self.savedContactType
self.contactType = self.savedContactType
}
} }
} }

@ -272,13 +272,10 @@ struct SendToAllView: View {
fileprivate func _contact() { fileprivate func _contact() {
self._verifyUser { self._verifyUser {
self._payTournamentAndExecute { if contactMethod == 0 {
contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.phoneNumber }, body: finalMessage(), tournamentBuild: nil)
if contactMethod == 0 { } else {
contactType = .message(date: nil, recipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.phoneNumber }, body: finalMessage(), tournamentBuild: nil) contactType = .mail(date: nil, recipients: tournament.umpireMail(), bccRecipients: _teams().flatMap { $0.unsortedPlayers() }.compactMap { $0.email }, body: finalMessage(), subject: tournament.mailSubject(), 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: () -> ()) { // fileprivate func _payTournamentAndExecute(_ handler: () -> ()) {
do { // do {
try tournament.payIfNecessary() // try tournament.payIfNecessary()
handler() // handler()
} catch { // } catch {
self.showSubscriptionView = true // self.showSubscriptionView = true
} // }
} // }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected) ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)

@ -147,55 +147,45 @@ struct GroupStageTeamView: View {
Group { Group {
switch contactType { switch contactType {
case .message(_, let recipients, let body, _): case .message(_, let recipients, let body, _):
if Guard.main.paymentForNewTournament() != nil { MessageComposeView(recipients: recipients, body: body) { result in
MessageComposeView(recipients: recipients, body: body) { result in switch result {
switch result { case .cancelled:
case .cancelled: break
break case .failed:
case .failed: self.sentError = .messageFailed
self.sentError = .messageFailed case .sent:
case .sent: if networkMonitor.connected == false {
if networkMonitor.connected == false { self.contactType = nil
self.contactType = nil if team.getPhoneNumbers().isEmpty == false {
if team.getPhoneNumbers().isEmpty == false { self.sentError = .uncalledTeams([team])
self.sentError = .uncalledTeams([team]) } else {
} else { self.sentError = .messageNotSent
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, _): 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
MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in switch result {
switch result { case .cancelled, .saved:
case .cancelled, .saved: self.contactType = nil
self.contactType = nil case .failed:
case .failed: self.contactType = nil
self.sentError = .mailFailed
case .sent:
if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailFailed if team.getMail().isEmpty == false {
case .sent: self.sentError = .uncalledTeams([team])
if networkMonitor.connected == false { } else {
self.contactType = nil 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)
} }
} }
} }

@ -349,55 +349,45 @@ struct EditingTeamView: View {
Group { Group {
switch contactType { switch contactType {
case .message(_, let recipients, let body, _): case .message(_, let recipients, let body, _):
if Guard.main.paymentForNewTournament() != nil { MessageComposeView(recipients: recipients, body: body) { result in
MessageComposeView(recipients: recipients, body: body) { result in switch result {
switch result { case .cancelled:
case .cancelled: break
break case .failed:
case .failed: self.sentError = .messageFailed
self.sentError = .messageFailed case .sent:
case .sent: if networkMonitor.connected == false {
if networkMonitor.connected == false { self.contactType = nil
self.contactType = nil if team.getPhoneNumbers().isEmpty == false {
if team.getPhoneNumbers().isEmpty == false { self.sentError = .uncalledTeams([team])
self.sentError = .uncalledTeams([team]) } else {
} else { self.sentError = .messageNotSent
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, _): 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
MailComposeView(recipients: recipients, bccRecipients: bccRecipients, body: body, subject: subject) { result in switch result {
switch result { case .cancelled, .saved:
case .cancelled, .saved: self.contactType = nil
case .failed:
self.contactType = nil
self.sentError = .mailFailed
case .sent:
if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
case .failed: if team.getMail().isEmpty == false {
self.contactType = nil self.sentError = .uncalledTeams([team])
self.sentError = .mailFailed } else {
case .sent: self.sentError = .mailNotSent
if networkMonitor.connected == false {
self.contactType = nil
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)
} }
} }
} }

@ -110,7 +110,7 @@ struct PurchaseView: View {
var body: some View { var body: some View {
HStack { HStack {
Image(systemName: self.purchaseRow.item.systemImage) Image(systemName: self.purchaseRow.item.summarySystemImage)
.foregroundColor(.accentColor).font(.title2) .foregroundColor(.accentColor).font(.title2)
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(self.purchaseRow.name) Text(self.purchaseRow.name)

Loading…
Cancel
Save