add option to import 2 by 2 in custom import

sync2
Raz 1 year ago
parent ca1a3a87f4
commit 91426c9990
  1. 16
      PadelClub/Utils/FileImportManager.swift
  2. 16
      PadelClub/Views/Tournament/FileImportView.swift

@ -178,7 +178,7 @@ class FileImportManager {
static let FFT_ASSIMILATION_WOMAN_IN_MAN = "A calculer selon la pondération en vigueur" 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 { switch fileProvider {
case .frenchFederation: case .frenchFederation:
@ -186,9 +186,9 @@ class FileImportManager {
case .padelClub: case .padelClub:
return await _getPadelClubTeams(from: fileContent, tournament: tournament) return await _getPadelClubTeams(from: fileContent, tournament: tournament)
case .custom: case .custom:
return await _getPadelBusinessLeagueTeams(from: fileContent, autoSearch: false, tournament: tournament) return await _getPadelBusinessLeagueTeams(from: fileContent, chunkByParameter: chunkByParameter, autoSearch: false, tournament: tournament)
case .customAutoSearch: 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 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") let lines = fileContent.replacingOccurrences(of: "\"", with: "").components(separatedBy: "\n")
guard let firstLine = lines.first else { return [] } guard let firstLine = lines.first else { return [] }
var separator = "," var separator = ","
@ -434,7 +434,13 @@ class FileImportManager {
let fetchRequest = ImportedPlayer.fetchRequest() let fetchRequest = ImportedPlayer.fetchRequest()
let federalContext = PersistenceController.shared.localContainer.viewContext 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 var teamName: String? = nil
let players = team.map { player in let players = team.map { player in
let data = player.components(separatedBy: separator) let data = player.components(separatedBy: separator)

@ -84,6 +84,7 @@ struct FileImportView: View {
@State private var multiImport: Bool = false @State private var multiImport: Bool = false
@State private var presentFormatHelperView: Bool = false @State private var presentFormatHelperView: Bool = false
@State private var validatedTournamentIds: Set<String> = Set() @State private var validatedTournamentIds: Set<String> = Set()
@State private var chunkByParameter: Bool = true
init(defaultFileProvider: FileImportManager.FileProvider = .frenchFederation) { init(defaultFileProvider: FileImportManager.FileProvider = .frenchFederation) {
_fileProvider = .init(wrappedValue: defaultFileProvider) _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") 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") { RowButtonView("Démarrer l'importation") {
if let fileContent { if let fileContent {
do { do {
@ -523,7 +535,7 @@ struct FileImportView: View {
for someTournament in event.tournaments { for someTournament in event.tournaments {
let combinedCategory = CombinedCategory(tournamentCategory: someTournament.tournamentCategory, federalTournamentAge: someTournament.federalTournamentAge) let combinedCategory = CombinedCategory(tournamentCategory: someTournament.tournamentCategory, federalTournamentAge: someTournament.federalTournamentAge)
if categoriesDone.contains(combinedCategory) == false { 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 self.teams += _teams
categoriesDone.append(combinedCategory) categoriesDone.append(combinedCategory)
} else { } else {
@ -531,7 +543,7 @@ struct FileImportView: View {
} }
} }
} else { } 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 { await MainActor.run {

Loading…
Cancel
Save