|
|
|
|
@ -11,6 +11,31 @@ import LeStorage |
|
|
|
|
class FileImportManager { |
|
|
|
|
static let shared = FileImportManager() |
|
|
|
|
|
|
|
|
|
func updatePlayers(isMale: Bool, players: inout [FederalPlayer]) { |
|
|
|
|
guard let mostRecentDateAvailable = URL.importDateFormatter.date(from: "05-2024") else { return } |
|
|
|
|
let replacements: [(Character, Character)] = [("Á", "ç"), ("‡", "à"), ("Ù", "ô"), ("Ë", "è"), ("Ó", "î"), ("Î", "ë"), ("…", "É"), ("Ô", "ï"), ("È", "é"), ("«", "Ç"), ("»", "È")] |
|
|
|
|
|
|
|
|
|
var playersLeft = players |
|
|
|
|
SourceFileManager.shared.allFilesSortedByDate(isMale).filter({ $0.dateFromPath.isEarlierThan(mostRecentDateAvailable) }).forEach({ url in |
|
|
|
|
if playersLeft.isEmpty == false { |
|
|
|
|
let federalPlayers = readCSV(inputFile: url) |
|
|
|
|
let replacementsCharacters = url.dateFromPath.monthYearFormatted != "04-2024" ? [] : replacements |
|
|
|
|
|
|
|
|
|
playersLeft.forEach { importedPlayer in |
|
|
|
|
if let federalPlayer = federalPlayers.first(where: { $0.license == importedPlayer.license }) { |
|
|
|
|
var lastName = federalPlayer.lastName |
|
|
|
|
lastName.replace(characters: replacementsCharacters) |
|
|
|
|
var firstName = federalPlayer.firstName |
|
|
|
|
firstName.replace(characters: replacementsCharacters) |
|
|
|
|
importedPlayer.lastName = lastName |
|
|
|
|
importedPlayer.firstName = firstName |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
playersLeft.removeAll(where: { $0.lastName.isEmpty == false }) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func foundInWomenData(license: String?) -> Bool { |
|
|
|
|
guard let license = license?.strippedLicense else { |
|
|
|
|
return false |
|
|
|
|
@ -68,11 +93,23 @@ class FileImportManager { |
|
|
|
|
let previousTeam: TeamRegistration? |
|
|
|
|
var registrationDate: Date? = nil |
|
|
|
|
|
|
|
|
|
init(players: [PlayerRegistration], tournamentCategory: TournamentCategory, previousTeam: TeamRegistration?, registrationDate: Date? = nil) { |
|
|
|
|
init(players: [PlayerRegistration], tournamentCategory: TournamentCategory, previousTeam: TeamRegistration?, registrationDate: Date? = nil, tournament: Tournament) { |
|
|
|
|
self.players = Set(players) |
|
|
|
|
self.tournamentCategory = tournamentCategory |
|
|
|
|
self.previousTeam = previousTeam |
|
|
|
|
if players.count < 2 { |
|
|
|
|
let s = players.compactMap { $0.sex?.rawValue } |
|
|
|
|
var missing = tournamentCategory.mandatoryPlayerType() |
|
|
|
|
s.forEach { i in |
|
|
|
|
if let index = missing.firstIndex(of: i) { |
|
|
|
|
missing.remove(at: index) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
let significantPlayerCount = 2 |
|
|
|
|
self.weight = (players.prefix(significantPlayerCount).map { $0.computedRank } + missing.map { tournament.unrankValue(for: $0 == 1 ? true : false ) ?? 0 }).prefix(significantPlayerCount).reduce(0,+) |
|
|
|
|
} else { |
|
|
|
|
self.weight = players.map { $0.computedRank }.reduce(0,+) |
|
|
|
|
} |
|
|
|
|
self.registrationDate = registrationDate |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -214,7 +251,7 @@ class FileImportManager { |
|
|
|
|
playerOne.setComputedRank(in: tournament) |
|
|
|
|
let playerTwo = PlayerRegistration(federalData: Array(resultTwo[0...7]), sex: sexPlayerTwo, sexUnknown: sexUnknown) |
|
|
|
|
playerTwo.setComputedRank(in: tournament) |
|
|
|
|
let team = TeamHolder(players: [playerOne, playerTwo], tournamentCategory: tournamentCategory, previousTeam: tournament.findTeam([playerOne, playerTwo])) |
|
|
|
|
let team = TeamHolder(players: [playerOne, playerTwo], tournamentCategory: tournamentCategory, previousTeam: tournament.findTeam([playerOne, playerTwo]), tournament: tournament) |
|
|
|
|
results.append(team) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -261,7 +298,7 @@ class FileImportManager { |
|
|
|
|
let playerTwo = PlayerRegistration(federalData: Array(result[8...]), sex: sexPlayerTwo, sexUnknown: sexUnknown) |
|
|
|
|
playerTwo.setComputedRank(in: tournament) |
|
|
|
|
|
|
|
|
|
let team = TeamHolder(players: [playerOne, playerTwo], tournamentCategory: tournamentCategory, previousTeam: tournament.findTeam([playerOne, playerTwo])) |
|
|
|
|
let team = TeamHolder(players: [playerOne, playerTwo], tournamentCategory: tournamentCategory, previousTeam: tournament.findTeam([playerOne, playerTwo]), tournament: tournament) |
|
|
|
|
results.append(team) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -270,11 +307,11 @@ class FileImportManager { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private func _getPadelClubTeams(from fileContent: String, tournament: Tournament) async -> [TeamHolder] { |
|
|
|
|
let lines = fileContent.components(separatedBy: "\n\n") |
|
|
|
|
var lines = fileContent.components(separatedBy: "\n\n") |
|
|
|
|
var results: [TeamHolder] = [] |
|
|
|
|
let fetchRequest = ImportedPlayer.fetchRequest() |
|
|
|
|
let federalContext = PersistenceController.shared.localContainer.viewContext |
|
|
|
|
|
|
|
|
|
lines.removeAll(where: { $0.contains("Liste d'attente")}) |
|
|
|
|
lines.forEach { team in |
|
|
|
|
let data = team.components(separatedBy: "\n") |
|
|
|
|
let players = team.licencesFound() |
|
|
|
|
@ -292,7 +329,7 @@ class FileImportManager { |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
let team = TeamHolder(players: registeredPlayers, tournamentCategory: tournament.tournamentCategory, previousTeam: tournament.findTeam(registeredPlayers), registrationDate: registrationDate) |
|
|
|
|
let team = TeamHolder(players: registeredPlayers, tournamentCategory: tournament.tournamentCategory, previousTeam: tournament.findTeam(registeredPlayers), registrationDate: registrationDate, tournament: tournament) |
|
|
|
|
results.append(team) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|