fix contact missing

sync2
Raz 1 year ago
parent 6dc3a35628
commit 493b595d5f
  1. 37
      PadelClub/Utils/ContactManager.swift
  2. 50
      PadelClub/Views/Calling/CallView.swift
  3. 43
      PadelClub/Views/Calling/SendToAllView.swift
  4. 37
      PadelClub/Views/GroupStage/Components/GroupStageTeamView.swift
  5. 42
      PadelClub/Views/Match/MatchDetailView.swift
  6. 37
      PadelClub/Views/Navigation/Agenda/TournamentSubscriptionView.swift
  7. 17
      PadelClub/Views/Shared/SupportButtonView.swift
  8. 42
      PadelClub/Views/Team/EditingTeamView.swift
  9. 89
      PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift

@ -18,6 +18,43 @@ enum ContactManagerError: LocalizedError {
case calendarAccessDenied case calendarAccessDenied
case calendarEventSaveFailed case calendarEventSaveFailed
case noCalendarAvailable case noCalendarAvailable
case uncalledTeams([TeamRegistration])
var localizedDescription: String {
switch self {
case .mailFailed:
return "Le mail n'a pas été envoyé"
case .mailNotSent:
return "Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer."
case .messageFailed:
return "Le SMS n'a pas été envoyé"
case .messageNotSent:
return "Le SMS n'a pas été envoyé"
case .uncalledTeams(let array):
let verb = array.count > 1 ? "peut" : "peuvent"
return "Attention, \(array.count) équipe\(array.count.pluralSuffix) ne \(verb) pas être contacté par la méthode choisie"
case .calendarAccessDenied:
return "Padel Club n'a pas accès à votre calendrier"
case .calendarEventSaveFailed:
return "Padel Club n'a pas réussi à sauver ce tournoi dans votre calendrier"
case .noCalendarAvailable:
return "Padel Club n'a pas réussi à trouver un calendrier pour y inscrire ce tournoi"
default:
break
}
}
static func getNetworkErrorMessage(sentError: ContactManagerError?, networkMonitorConnected: Bool) -> String {
var errors: [String] = []
if networkMonitorConnected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if let sentError {
errors.append(sentError.localizedDescription)
}
return errors.joined(separator: "\n")
}
} }
enum ContactType: Identifiable { enum ContactType: Identifiable {

@ -81,13 +81,13 @@ struct CallView: View {
} }
} }
private func _called(_ success: Bool) { private func _called(_ calledTeams: [TeamRegistration], _ success: Bool) {
if success { if success {
self.teams.forEach { team in calledTeams.forEach { team in
team.callDate = callDate team.callDate = callDate
} }
do { do {
try self.tournamentStore.teamRegistrations.addOrUpdate(contentOfs: teams) try self.tournamentStore.teamRegistrations.addOrUpdate(contentOfs: calledTeams)
} catch { } catch {
Logger.error(error) Logger.error(error)
} }
@ -138,10 +138,20 @@ struct CallView: View {
case .failed: case .failed:
self.sentError = .messageFailed self.sentError = .messageFailed
case .sent: case .sent:
let calledTeams = teams.filter { $0.getPhoneNumbers().isEmpty == false }
let uncalledTeams = teams.filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.sentError = .messageNotSent if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .messageNotSent
}
} else { } else {
self._called(true) if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
self._called(calledTeams, true)
} }
@unknown default: @unknown default:
break break
@ -156,11 +166,21 @@ struct CallView: View {
self.contactType = nil self.contactType = nil
self.sentError = .mailFailed self.sentError = .mailFailed
case .sent: case .sent:
let calledTeams = teams.filter { $0.getMail().isEmpty == false }
let uncalledTeams = teams.filter { $0.getMail().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailNotSent if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else { } else {
self._called(true) if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
self._called(calledTeams, true)
} }
@unknown default: @unknown default:
break break
@ -260,21 +280,7 @@ struct CallView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
} }

@ -135,9 +135,21 @@ struct SendToAllView: View {
case .failed: case .failed:
self.sentError = .messageFailed self.sentError = .messageFailed
case .sent: case .sent:
let uncalledTeams = _teams().filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.sentError = .messageNotSent self.contactType = nil
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .messageNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
} }
@unknown default: @unknown default:
break break
} }
@ -151,9 +163,19 @@ struct SendToAllView: View {
self.contactType = nil self.contactType = nil
self.sentError = .mailFailed self.sentError = .mailFailed
case .sent: case .sent:
let uncalledTeams = _teams().filter { $0.getMail().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailNotSent if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
} }
@unknown default: @unknown default:
break break
@ -254,23 +276,8 @@ struct SendToAllView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
} }
//#Preview { //#Preview {

@ -110,7 +110,16 @@ struct GroupStageTeamView: View {
self.sentError = .messageFailed self.sentError = .messageFailed
case .sent: case .sent:
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.sentError = .messageNotSent self.contactType = nil
if team.getPhoneNumbers().isEmpty == false {
self.sentError = .uncalledTeams([team])
} else {
self.sentError = .messageNotSent
}
} else {
if team.getPhoneNumbers().isEmpty == false {
self.sentError = .uncalledTeams([team])
}
} }
@unknown default: @unknown default:
break break
@ -132,7 +141,15 @@ struct GroupStageTeamView: View {
case .sent: case .sent:
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailNotSent if team.getMail().isEmpty == false {
self.sentError = .uncalledTeams([team])
} else {
self.sentError = .mailNotSent
}
} else {
if team.getMail().isEmpty == false {
self.sentError = .uncalledTeams([team])
}
} }
@unknown default: @unknown default:
break break
@ -153,21 +170,7 @@ struct GroupStageTeamView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
private func _save() { private func _save() {

@ -210,8 +210,19 @@ struct MatchDetailView: View {
case .failed: case .failed:
self.sentError = .messageFailed self.sentError = .messageFailed
case .sent: case .sent:
let uncalledTeams = match.teams().filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.sentError = .messageNotSent self.contactType = nil
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .messageNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
} }
@unknown default: @unknown default:
break break
@ -226,9 +237,19 @@ struct MatchDetailView: View {
self.contactType = nil self.contactType = nil
self.sentError = .mailFailed self.sentError = .mailFailed
case .sent: case .sent:
let uncalledTeams = match.teams().filter { $0.getMail().isEmpty }
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailNotSent if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
} }
@unknown default: @unknown default:
break break
@ -529,23 +550,8 @@ struct MatchDetailView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
} }
//#Preview { //#Preview {

@ -226,7 +226,12 @@ struct TournamentSubscriptionView: View {
Button("OK") { Button("OK") {
} }
if sentError == .calendarAccessDenied || sentError == .noCalendarAvailable { if case .calendarAccessDenied = sentError {
Button("Voir vos réglages") {
openAppSettings()
}
}
if case .noCalendarAvailable = sentError{
Button("Voir vos réglages") { Button("Voir vos réglages") {
openAppSettings() openAppSettings()
} }
@ -322,35 +327,7 @@ struct TournamentSubscriptionView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
if sentError == .calendarAccessDenied {
errors.append("Padel Club n'a pas accès à votre calendrier")
}
if sentError == .calendarEventSaveFailed {
errors.append("Padel Club n'a pas réussi à sauver ce tournoi dans votre calendrier")
}
if sentError == .noCalendarAvailable {
errors.append("Padel Club n'a pas réussi à trouver un calendrier pour y inscrire ce tournoi")
}
return errors.joined(separator: "\n")
} }
func openAppSettings() { func openAppSettings() {

@ -103,21 +103,6 @@ struct SupportButtonView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
} }

@ -200,8 +200,19 @@ struct EditingTeamView: View {
case .failed: case .failed:
self.sentError = .messageFailed self.sentError = .messageFailed
case .sent: case .sent:
let uncalledTeams = team.getPhoneNumbers().isEmpty
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.sentError = .messageNotSent self.contactType = nil
if team.getPhoneNumbers().isEmpty == false {
self.sentError = .uncalledTeams([team])
} else {
self.sentError = .messageNotSent
}
} else {
if team.getPhoneNumbers().isEmpty == false {
self.sentError = .uncalledTeams([team])
}
} }
@unknown default: @unknown default:
break break
@ -221,9 +232,19 @@ struct EditingTeamView: View {
self.contactType = nil self.contactType = nil
self.sentError = .mailFailed self.sentError = .mailFailed
case .sent: case .sent:
let uncalledTeams = team.getMail().isEmpty
if networkMonitor.connected == false { if networkMonitor.connected == false {
self.contactType = nil self.contactType = nil
self.sentError = .mailNotSent if team.getMail().isEmpty == false {
self.sentError = .uncalledTeams([team])
} else {
self.sentError = .mailNotSent
}
} else {
if team.getMail().isEmpty == false {
self.sentError = .uncalledTeams([team])
}
} }
@unknown default: @unknown default:
break break
@ -294,23 +315,8 @@ struct EditingTeamView: View {
} }
private var _networkErrorMessage: String { private var _networkErrorMessage: String {
var errors: [String] = [] ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
} }
} }
//#Preview { //#Preview {

@ -24,7 +24,6 @@ struct InscriptionManagerView: View {
@EnvironmentObject var dataStore: DataStore @EnvironmentObject var dataStore: DataStore
@EnvironmentObject var networkMonitor: NetworkMonitor
@Environment(\.dismiss) var dismiss @Environment(\.dismiss) var dismiss
var tournament: Tournament var tournament: Tournament
@ -45,9 +44,6 @@ struct InscriptionManagerView: View {
@State private var filterMode: FilterMode = .all @State private var filterMode: FilterMode = .all
@State private var sortingMode: SortingMode = .teamWeight @State private var sortingMode: SortingMode = .teamWeight
@State private var byDecreasingOrdering: Bool = false @State private var byDecreasingOrdering: Bool = false
@State private var contactType: ContactType? = nil
@State private var sentError: ContactManagerError? = nil
@State private var showSubscriptionView: Bool = false
@State private var confirmDuplicate: Bool = false @State private var confirmDuplicate: Bool = false
@State private var presentAddTeamView: Bool = false @State private var presentAddTeamView: Bool = false
@State private var compactMode: Bool = true @State private var compactMode: Bool = true
@ -57,17 +53,6 @@ struct InscriptionManagerView: View {
return self.tournament.tournamentStore return self.tournament.tournamentStore
} }
var messageSentFailed: Binding<Bool> {
Binding {
sentError != nil
} set: { newValue in
if newValue == false {
sentError = nil
}
}
}
enum SortingMode: Int, Identifiable, CaseIterable { enum SortingMode: Int, Identifiable, CaseIterable {
var id: Int { self.rawValue } var id: Int { self.rawValue }
case registrationDate case registrationDate
@ -238,61 +223,6 @@ struct InscriptionManagerView: View {
.onDisappear { .onDisappear {
_handleHashDiff() _handleHashDiff()
} }
.alert("Un problème est survenu", isPresented: messageSentFailed) {
Button("OK") {
}
} message: {
Text(_networkErrorMessage)
}
.sheet(item: $contactType) { contactType in
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.sentError = .messageNotSent
}
@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:
self.contactType = nil
self.sentError = .mailFailed
case .sent:
if networkMonitor.connected == false {
self.contactType = nil
self.sentError = .mailNotSent
}
@unknown default:
break
}
}
} else {
SubscriptionView(isPresented: self.$showSubscriptionView, showLackOfPlanMessage: true)
.environment(\.colorScheme, .light)
}
}
}
.tint(.master)
}
.sheet(isPresented: $isLearningMore) { .sheet(isPresented: $isLearningMore) {
LearnMoreSheetView(tournament: tournament) LearnMoreSheetView(tournament: tournament)
.tint(.master) .tint(.master)
@ -997,25 +927,6 @@ struct InscriptionManagerView: View {
Logger.error(error) Logger.error(error)
} }
} }
private var _networkErrorMessage: String {
var errors: [String] = []
if networkMonitor.connected == false {
errors.append("L'appareil n'est pas connecté à internet.")
}
if sentError == .mailNotSent {
errors.append("Le mail est dans la boîte d'envoi de l'app Mail. Vérifiez son état dans l'app Mail avant d'essayer de le renvoyer.")
}
if (sentError == .messageFailed || sentError == .messageNotSent) {
errors.append("Le SMS n'a pas été envoyé")
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
}
} }
//#Preview { //#Preview {

Loading…
Cancel
Save