fix contact missing

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

@ -18,6 +18,43 @@ enum ContactManagerError: LocalizedError {
case calendarAccessDenied
case calendarEventSaveFailed
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 {

@ -81,13 +81,13 @@ struct CallView: View {
}
}
private func _called(_ success: Bool) {
private func _called(_ calledTeams: [TeamRegistration], _ success: Bool) {
if success {
self.teams.forEach { team in
calledTeams.forEach { team in
team.callDate = callDate
}
do {
try self.tournamentStore.teamRegistrations.addOrUpdate(contentOfs: teams)
try self.tournamentStore.teamRegistrations.addOrUpdate(contentOfs: calledTeams)
} catch {
Logger.error(error)
}
@ -138,10 +138,20 @@ struct CallView: View {
case .failed:
self.sentError = .messageFailed
case .sent:
let calledTeams = teams.filter { $0.getPhoneNumbers().isEmpty == false }
let uncalledTeams = teams.filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .messageNotSent
}
} else {
self._called(true)
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
self._called(calledTeams, true)
}
@unknown default:
break
@ -156,11 +166,21 @@ struct CallView: View {
self.contactType = nil
self.sentError = .mailFailed
case .sent:
let calledTeams = teams.filter { $0.getMail().isEmpty == false }
let uncalledTeams = teams.filter { $0.getMail().isEmpty }
if networkMonitor.connected == false {
self.contactType = nil
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else {
self._called(true)
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
self._called(calledTeams, true)
}
@unknown default:
break
@ -260,21 +280,7 @@ struct CallView: View {
}
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")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
}

@ -135,9 +135,21 @@ struct SendToAllView: View {
case .failed:
self.sentError = .messageFailed
case .sent:
let uncalledTeams = _teams().filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false {
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:
break
}
@ -151,10 +163,20 @@ struct SendToAllView: View {
self.contactType = nil
self.sentError = .mailFailed
case .sent:
let uncalledTeams = _teams().filter { $0.getMail().isEmpty }
if networkMonitor.connected == false {
self.contactType = nil
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
}
@unknown default:
break
}
@ -254,23 +276,8 @@ struct SendToAllView: View {
}
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.")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
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 {

@ -110,8 +110,17 @@ struct GroupStageTeamView: View {
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
}
} else {
if team.getPhoneNumbers().isEmpty == false {
self.sentError = .uncalledTeams([team])
}
}
@unknown default:
break
}
@ -132,8 +141,16 @@ struct GroupStageTeamView: View {
case .sent:
if networkMonitor.connected == false {
self.contactType = nil
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:
break
}
@ -153,21 +170,7 @@ struct GroupStageTeamView: View {
}
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")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
private func _save() {

@ -210,9 +210,20 @@ struct MatchDetailView: View {
case .failed:
self.sentError = .messageFailed
case .sent:
let uncalledTeams = match.teams().filter { $0.getPhoneNumbers().isEmpty }
if networkMonitor.connected == false {
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:
break
}
@ -226,10 +237,20 @@ struct MatchDetailView: View {
self.contactType = nil
self.sentError = .mailFailed
case .sent:
let uncalledTeams = match.teams().filter { $0.getMail().isEmpty }
if networkMonitor.connected == false {
self.contactType = nil
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
} else {
self.sentError = .mailNotSent
}
} else {
if uncalledTeams.isEmpty == false {
self.sentError = .uncalledTeams(uncalledTeams)
}
}
@unknown default:
break
}
@ -529,23 +550,8 @@ struct MatchDetailView: View {
}
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.")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
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 {

@ -226,7 +226,12 @@ struct TournamentSubscriptionView: View {
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") {
openAppSettings()
}
@ -322,35 +327,7 @@ struct TournamentSubscriptionView: View {
}
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é")
}
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")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
func openAppSettings() {

@ -103,21 +103,6 @@ struct SupportButtonView: View {
}
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é")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
if sentError == .mailFailed {
errors.append("Le mail n'a pas été envoyé")
}
return errors.joined(separator: "\n")
}
}

@ -200,9 +200,20 @@ struct EditingTeamView: View {
case .failed:
self.sentError = .messageFailed
case .sent:
let uncalledTeams = team.getPhoneNumbers().isEmpty
if networkMonitor.connected == false {
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:
break
}
@ -221,10 +232,20 @@ struct EditingTeamView: View {
self.contactType = nil
self.sentError = .mailFailed
case .sent:
let uncalledTeams = team.getMail().isEmpty
if networkMonitor.connected == false {
self.contactType = nil
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:
break
}
@ -294,23 +315,8 @@ struct EditingTeamView: View {
}
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.")
ContactManagerError.getNetworkErrorMessage(sentError: sentError, networkMonitorConnected: networkMonitor.connected)
}
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 {

@ -24,7 +24,6 @@ struct InscriptionManagerView: View {
@EnvironmentObject var dataStore: DataStore
@EnvironmentObject var networkMonitor: NetworkMonitor
@Environment(\.dismiss) var dismiss
var tournament: Tournament
@ -45,9 +44,6 @@ struct InscriptionManagerView: View {
@State private var filterMode: FilterMode = .all
@State private var sortingMode: SortingMode = .teamWeight
@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 presentAddTeamView: Bool = false
@State private var compactMode: Bool = true
@ -57,17 +53,6 @@ struct InscriptionManagerView: View {
return self.tournament.tournamentStore
}
var messageSentFailed: Binding<Bool> {
Binding {
sentError != nil
} set: { newValue in
if newValue == false {
sentError = nil
}
}
}
enum SortingMode: Int, Identifiable, CaseIterable {
var id: Int { self.rawValue }
case registrationDate
@ -238,61 +223,6 @@ struct InscriptionManagerView: View {
.onDisappear {
_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) {
LearnMoreSheetView(tournament: tournament)
.tint(.master)
@ -997,25 +927,6 @@ struct InscriptionManagerView: View {
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 {

Loading…
Cancel
Save