diff --git a/PadelClub/Utils/FileImportManager.swift b/PadelClub/Utils/FileImportManager.swift index a275e03..deb82db 100644 --- a/PadelClub/Utils/FileImportManager.swift +++ b/PadelClub/Utils/FileImportManager.swift @@ -178,7 +178,7 @@ class FileImportManager { static let FFT_ASSIMILATION_WOMAN_IN_MAN = "A calculer selon la pondération en vigueur" - func createTeams(from fileContent: String, tournament: Tournament, fileProvider: FileProvider = .frenchFederation, checkingCategoryDisabled: Bool) async throws -> [TeamHolder] { + func createTeams(from fileContent: String, tournament: Tournament, fileProvider: FileProvider = .frenchFederation, checkingCategoryDisabled: Bool, chunkByParameter: Bool) async throws -> [TeamHolder] { switch fileProvider { case .frenchFederation: @@ -186,9 +186,9 @@ class FileImportManager { case .padelClub: return await _getPadelClubTeams(from: fileContent, tournament: tournament) case .custom: - return await _getPadelBusinessLeagueTeams(from: fileContent, autoSearch: false, tournament: tournament) + return await _getPadelBusinessLeagueTeams(from: fileContent, chunkByParameter: chunkByParameter, autoSearch: false, tournament: tournament) case .customAutoSearch: - return await _getPadelBusinessLeagueTeams(from: fileContent, autoSearch: true, tournament: tournament) + return await _getPadelBusinessLeagueTeams(from: fileContent, chunkByParameter: chunkByParameter, autoSearch: true, tournament: tournament) } } @@ -424,7 +424,7 @@ class FileImportManager { return results } - private func _getPadelBusinessLeagueTeams(from fileContent: String, autoSearch: Bool, tournament: Tournament) async -> [TeamHolder] { + private func _getPadelBusinessLeagueTeams(from fileContent: String, chunkByParameter: Bool, autoSearch: Bool, tournament: Tournament) async -> [TeamHolder] { let lines = fileContent.replacingOccurrences(of: "\"", with: "").components(separatedBy: "\n") guard let firstLine = lines.first else { return [] } var separator = "," @@ -434,7 +434,13 @@ class FileImportManager { let fetchRequest = ImportedPlayer.fetchRequest() let federalContext = PersistenceController.shared.localContainer.viewContext - let results: [TeamHolder] = lines.chunked(byParameterAt: 1).map { team in + var chunks: [[String]] = [] + if chunkByParameter { + chunks = lines.chunked(byParameterAt: 1) + } else { + chunks = lines.chunked(into: 2) + } + let results = chunks.map { team in var teamName: String? = nil let players = team.map { player in let data = player.components(separatedBy: separator) diff --git a/PadelClub/Views/Tournament/FileImportView.swift b/PadelClub/Views/Tournament/FileImportView.swift index 99bf6b9..9110942 100644 --- a/PadelClub/Views/Tournament/FileImportView.swift +++ b/PadelClub/Views/Tournament/FileImportView.swift @@ -84,6 +84,7 @@ struct FileImportView: View { @State private var multiImport: Bool = false @State private var presentFormatHelperView: Bool = false @State private var validatedTournamentIds: Set = Set() + @State private var chunkByParameter: Bool = true init(defaultFileProvider: FileImportManager.FileProvider = .frenchFederation) { _fileProvider = .init(wrappedValue: defaultFileProvider) @@ -139,6 +140,17 @@ struct FileImportView: View { Text("Padel Club essaiera de chercher les joueurs dans la base fédérale automatiquement") } + if fileProvider == .custom || fileProvider == .customAutoSearch { + Toggle(isOn: $chunkByParameter) { + Text("Détection des équipes") + if chunkByParameter { + Text("via le nom de l'équipe") + } else { + Text("couple de deux lignes") + } + } + } + RowButtonView("Démarrer l'importation") { if let fileContent { do { @@ -523,7 +535,7 @@ struct FileImportView: View { for someTournament in event.tournaments { let combinedCategory = CombinedCategory(tournamentCategory: someTournament.tournamentCategory, federalTournamentAge: someTournament.federalTournamentAge) if categoriesDone.contains(combinedCategory) == false { - let _teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: someTournament, fileProvider: fileProvider, checkingCategoryDisabled: false) + let _teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: someTournament, fileProvider: fileProvider, checkingCategoryDisabled: false, chunkByParameter: chunkByParameter) self.teams += _teams categoriesDone.append(combinedCategory) } else { @@ -531,7 +543,7 @@ struct FileImportView: View { } } } else { - self.teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: tournament, fileProvider: fileProvider, checkingCategoryDisabled: true) + self.teams = try await FileImportManager.shared.createTeams(from: fileContent, tournament: tournament, fileProvider: fileProvider, checkingCategoryDisabled: true, chunkByParameter: chunkByParameter) } await MainActor.run {