add custom import with search

clubs
Raz 1 year ago
parent 70db9f4252
commit 4be9b0aedf
  1. 4
      PadelClub.xcodeproj/project.pbxproj
  2. 24
      PadelClub/Utils/FileImportManager.swift
  3. 7
      PadelClub/Views/Tournament/FileImportView.swift

@ -1935,7 +1935,7 @@
CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 103; CURRENT_PROJECT_VERSION = 104;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\"";
@ -1985,7 +1985,7 @@
CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements; CODE_SIGN_ENTITLEMENTS = PadelClub/PadelClub.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 103; CURRENT_PROJECT_VERSION = 104;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\"";
DEVELOPMENT_TEAM = BQ3Y44M3Q6; DEVELOPMENT_TEAM = BQ3Y44M3Q6;

@ -83,6 +83,7 @@ class FileImportManager {
case frenchFederation case frenchFederation
case padelClub case padelClub
case custom case custom
case customAutoSearch
var localizedLabel: String { var localizedLabel: String {
switch self { switch self {
@ -92,6 +93,8 @@ class FileImportManager {
return "FFT" return "FFT"
case .custom: case .custom:
return "Personnalisé" return "Personnalisé"
case .customAutoSearch:
return "Personnalisé (avec recherche)"
} }
} }
} }
@ -161,7 +164,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, tournament: tournament) return await _getPadelBusinessLeagueTeams(from: fileContent, autoSearch: false, tournament: tournament)
case .customAutoSearch:
return await _getPadelBusinessLeagueTeams(from: fileContent, autoSearch: true, tournament: tournament)
} }
} }
@ -400,13 +405,16 @@ class FileImportManager {
return results return results
} }
private func _getPadelBusinessLeagueTeams(from fileContent: String, tournament: Tournament) async -> [TeamHolder] { private func _getPadelBusinessLeagueTeams(from fileContent: String, 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 = ","
if firstLine.contains(";") { if firstLine.contains(";") {
separator = ";" separator = ";"
} }
let fetchRequest = ImportedPlayer.fetchRequest()
let federalContext = PersistenceController.shared.localContainer.viewContext
let results: [TeamHolder] = lines.chunked(into: 2).map { team in let results: [TeamHolder] = lines.chunked(into: 2).map { team in
var teamName: String? = nil var teamName: String? = nil
let players = team.map { player in let players = team.map { player in
@ -422,9 +430,21 @@ class FileImportManager {
let rank : Int? = data[safe: 6]?.trimmed.toInt() let rank : Int? = data[safe: 6]?.trimmed.toInt()
let licenceId : String? = data[safe: 7]?.trimmed let licenceId : String? = data[safe: 7]?.trimmed
let club : String? = data[safe: 8]?.trimmed let club : String? = data[safe: 8]?.trimmed
let predicate = NSPredicate(format: "firstName like[cd] %@ && lastName like[cd] %@", firstName, lastName)
fetchRequest.predicate = predicate
let found = try? federalContext.fetch(fetchRequest).first
if let found, autoSearch {
let player = PlayerRegistration(importedPlayer: found)
player.setComputedRank(in: tournament)
return player
} else {
let player = PlayerRegistration(firstName: firstName, lastName: lastName, licenceId: licenceId, rank: rank, sex: sex, clubName: club, phoneNumber: phoneNumber, email: email) let player = PlayerRegistration(firstName: firstName, lastName: lastName, licenceId: licenceId, rank: rank, sex: sex, clubName: club, phoneNumber: phoneNumber, email: email)
if rank == nil, autoSearch {
player.setComputedRank(in: tournament)
}
return player return player
} }
}
return TeamHolder(players: players, tournamentCategory: .men, tournamentAgeCategory: .senior, previousTeam: nil, name: teamName, tournament: tournament) return TeamHolder(players: players, tournamentCategory: .men, tournamentAgeCategory: .senior, previousTeam: nil, name: teamName, tournament: tournament)
} }

@ -146,6 +146,13 @@ struct FileImportView: View {
FooterButtonView("Voir le format du fichier") { FooterButtonView("Voir le format du fichier") {
presentFormatHelperView = true presentFormatHelperView = true
} }
} else if fileProvider == .customAutoSearch {
HStack {
Text("Padel Club essaiera de chercher les joueurs dans la base fédérale automatiquement")
FooterButtonView("Voir le format du fichier") {
presentFormatHelperView = true
}
}
} }
} }

Loading…
Cancel
Save