paca_championship
Raz 11 months ago
parent 7a71beeea8
commit a2f0ef63e1
  1. 20
      PadelClub/Data/PlayerRegistration.swift
  2. 4
      PadelClub/Data/TeamRegistration.swift
  3. 9
      PadelClub/Extensions/String+Extensions.swift
  4. 8
      PadelClub/Utils/FileImportManager.swift
  5. 2
      PadelClub/Views/Navigation/Umpire/PadelClubView.swift
  6. 2
      PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift

@ -43,7 +43,7 @@ final class PlayerRegistration: ModelObject, Storable {
var clubCode: String?
var sourceName: String?
var isNVEQ: Bool = false
var isNveq: Bool = false
func localizedSourceLabel() -> String {
switch source {
@ -183,7 +183,7 @@ final class PlayerRegistration: ModelObject, Storable {
isVerified(),
"=\"" + formattedLicense() + "\"",
"\(computedRank)",
isNVEQ ? "NVEQ" : "EQ",
isNveq ? "NVEQ" : "EQ",
]
.joined(separator: exportFormat.separator())
return values
@ -231,7 +231,15 @@ final class PlayerRegistration: ModelObject, Storable {
}
func isLicenceOK() -> Bool {
licenceId?.trimmed.strippedLicense != nil
guard let licenceId else { return false }
let licenceIdTrimmed = licenceId.trimmed
guard licenceIdTrimmed.strippedLicense != nil else { return false }
if licenceIdTrimmed.hasLicenseKey() {
return licenceIdTrimmed.isLicenseNumber
} else {
return true
}
}
func isNameOK() -> Bool {
@ -452,7 +460,7 @@ final class PlayerRegistration: ModelObject, Storable {
case _captain = "captain"
case _clubCode = "clubCode"
case _sourceName = "sourceName"
case _isNVEQ = "isNVEQ"
case _isNveq = "isNveq"
}
init(from decoder: Decoder) throws {
@ -483,7 +491,7 @@ final class PlayerRegistration: ModelObject, Storable {
birthdate = try container.decodeIfPresent(String.self, forKey: ._birthdate)
source = try container.decodeIfPresent(PlayerDataSource.self, forKey: ._source)
clubCode = try container.decodeIfPresent(String.self, forKey: ._clubCode)
isNVEQ = try container.decodeIfPresent(Bool.self, forKey: ._isNVEQ) ?? false
isNveq = try container.decodeIfPresent(Bool.self, forKey: ._isNveq) ?? false
sourceName = try container.decodeIfPresent(String.self, forKey: ._sourceName)
}
@ -514,7 +522,7 @@ final class PlayerRegistration: ModelObject, Storable {
try container.encode(coach, forKey: ._coach)
try container.encode(clubCode, forKey: ._clubCode)
try container.encode(sourceName, forKey: ._sourceName)
try container.encode(isNVEQ, forKey: ._isNVEQ)
try container.encode(isNveq, forKey: ._isNveq)
}
enum PlayerDataSource: Int, Codable {

@ -449,7 +449,7 @@ final class TeamRegistration: ModelObject, Storable {
let players = players()
// if teamIndex <= 16, players.filter({ $0.isNVEQ }).count > 2 {
// if teamIndex <= 16, players.filter({ $0.isNveq }).count > 2 {
// alerts.append(.tooManyNVEQ(self))
//
// }
@ -480,7 +480,7 @@ final class TeamRegistration: ModelObject, Storable {
}
func nveqCountFormatted() -> String {
players().filter({ $0.isNVEQ }).count.formatted()
players().filter({ $0.isNveq }).count.formatted()
}
func playerCountFormatted() -> String {

@ -124,6 +124,15 @@ extension String {
return false
}
func hasLicenseKey() -> Bool {
if let match = self.firstMatch(of: /[0-9]{6,8}[A-Z]/) {
return true
} else {
return false
}
}
var licenseKey: String? {
if let intValue = Int(self) {
var value = intValue

@ -483,7 +483,7 @@ class FileImportManager {
let player = PlayerRegistration(importedPlayer: found)
player.setComputedRank(in: tournament)
player.sourceName = lastName
player.isNVEQ = status == "NVEQ"
player.isNveq = status == "NVEQ"
player.clubCode = found.clubCode
if isVerified {
player.source = .frenchFederationVerified
@ -492,7 +492,7 @@ class FileImportManager {
} else {
let player = PlayerRegistration(firstName: firstName, lastName: lastName, licenceId: licenceId, rank: rank, sex: sex, clubName: club, phoneNumber: phoneNumber, email: email)
player.sourceName = lastName
player.isNVEQ = status == "NVEQ"
player.isNveq = status == "NVEQ"
if isVerified {
player.source = .frenchFederationVerified
}
@ -793,7 +793,7 @@ enum ChampionshipAlert: LocalizedError {
extension PlayerRegistration {
func errorDescription(championshipAlert: ChampionshipAlert) -> String? {
var message = lastName + " -> "
var message = self.playerLabel() + " - " + self.formattedLicense() + " -> "
switch championshipAlert {
case .clubCodeInvalid, .tooManyNVEQ, .tooManyPlayers:
return nil
@ -807,7 +807,7 @@ extension PlayerRegistration {
}
case .playerLicenseInvalid:
if let licenceId {
message += "LICENCE NOK : " + licenceId
message += "LICENSE MISSTYPE"
} else {
message += "aucune licence"
}

@ -269,7 +269,7 @@ func fetchPlayerData(for licenseID: String) async throws -> [Player]? {
request.setValue("XMLHttpRequest", forHTTPHeaderField: "X-Requested-With")
// Add cookies if needed (example cookie header value shown, replace with valid cookies)
request.setValue("JSESSIONID=0DB857387EF49025B1A0559774FFFEBA; datadome=yp6ACsLMYiE4WEK2rf31mwP2xtk5EPcVjEKEhjO0qslv89_AOhlUVrMbokM~Rsp3Nfr_KxchUoLdRJvWScouGa8VzSixfwTLigI29EvJ8LbSj1OGmYgaO4kSW0WZU5YD; AWSALB=HQBL6o2O7dDDLA/e/Qt7dWBxG0X7qrzHFNZ6kFgjO18BsOFcLd4m77EbVc8u7jmKH3qdhV3TmsARJpWNWNt3ZzL1kg+tDeKoyFkWKFbqsmFykZEuoQXxI5y+Gswp; AWSALBCORS=HQBL6o2O7dDDLA/e/Qt7dWBxG0X7qrzHFNZ6kFgjO18BsOFcLd4m77EbVc8u7jmKH3qdhV3TmsARJpWNWNt3ZzL1kg+tDeKoyFkWKFbqsmFykZEuoQXxI5y+Gswp; xtan=-; xtant=1; tc_cj_v2=%5Ecl_%5Dny%5B%5D%5D_mmZZZZZZKQMMORPMMMQNNZZZ%5D777m_iZZZ%22**%22%27%20ZZZKQMMQMPMPMKOPZZZ%5D; tc_cj_v2_cmp=; tc_cj_v2_med=; tCdebugLib=1; _pcid=%7B%22browserId%22%3A%22m42mi4kbtfuyj367%22%2C%22_t%22%3A%22mjr1fm32%7Cm42mi4r2%22%7D; _pctx=%7Bu%7DN4IgrgzgpgThIC4B2YA2qA05owMoBcBDfSREQpAeyRCwgEt8oBJAE0RXSwH18yBbAFYwAjADN%2BAZgCsAH34AWAEz96CmNJABfIA; _pprv=eyJjb25zZW50Ijp7IjAiOnsibW9kZSI6ImVzc2VudGlhbCJ9LCI3Ijp7Im1vZGUiOiJvcHQtaW4ifX0sInB1cnBvc2VzIjpudWxsLCJfdCI6Im1qcjFmbHdofG00Mm1pNGtoIn0%3D; TCID=124122155494907703483; TCPID=124115115191501043230; xtvrn=$548419$; visid_incap_2712217=PSfJngzoSuiowsuXXhvOu5K+7mUAAAAAQUIPAAAAAAAleL9ldvN/FC1VykkU9ret; SessionStatId=10.91.140.42.1662124965429001", forHTTPHeaderField: "Cookie")
request.setValue("JSESSIONID=38707D1E3B920F1EF299827B0DAA7482; AWSALB=0KnoZyXR3dBQyIFtnwMkKwq2fqe4raRSsuD5cz/b0tR2DBXsQ5joyZ5jce0hgr0ZzWH/HJbhUC1L6VS+QbQipIVq7UJllGPpxd7OLjdXcfobfOjsVtpowVa/mHTo; AWSALBCORS=0KnoZyXR3dBQyIFtnwMkKwq2fqe4raRSsuD5cz/b0tR2DBXsQ5joyZ5jce0hgr0ZzWH/HJbhUC1L6VS+QbQipIVq7UJllGPpxd7OLjdXcfobfOjsVtpowVa/mHTo; datadome=4uk4nr8fscpV3E1JEKoO_xAZiFP2Mvb7EJojErst8cZ6MQ0C~0CwqDK8N2h8fFHvysKIsI70rHScAPsn5ZEJXXjSFwi8iPpGu26RbQ6h4dD2IHOI~1CXhx9Ac8oqGziX; xtan=-; xtant=1; tc_cj_v2=%5Ecl_%5Dny%5B%5D%5D_mmZZZZZZKQMMORPMMMQNNZZZ%5D777m_iZZZ%22**%22%27%20ZZZKQMMQMPMPMKOPZZZ%5D; tc_cj_v2_cmp=; tc_cj_v2_med=; tCdebugLib=1; _pcid=%7B%22browserId%22%3A%22m42mi4kbtfuyj367%22%2C%22_t%22%3A%22mjr1fm32%7Cm42mi4r2%22%7D; _pctx=%7Bu%7DN4IgrgzgpgThIC4B2YA2qA05owMoBcBDfSREQpAeyRCwgEt8oBJAE0RXSwH18yBbAFYwAjADN%2BAZgCsAH34AWAEz96CmNJABfIA; _pprv=eyJjb25zZW50Ijp7IjAiOnsibW9kZSI6ImVzc2VudGlhbCJ9LCI3Ijp7Im1vZGUiOiJvcHQtaW4ifX0sInB1cnBvc2VzIjpudWxsLCJfdCI6Im1qcjFmbHdofG00Mm1pNGtoIn0%3D; TCID=124122155494907703483; TCPID=124115115191501043230; xtvrn=$548419$; visid_incap_2712217=PSfJngzoSuiowsuXXhvOu5K+7mUAAAAAQUIPAAAAAAAleL9ldvN/FC1VykkU9ret; SessionStatId=10.91.140.42.1662124965429001", forHTTPHeaderField: "Cookie")
let (data, _) = try await URLSession.shared.data(for: request)
let decoder = JSONDecoder()

@ -867,7 +867,7 @@ struct InscriptionManagerView: View {
Button("Récupérer les non-classés") {
Task {
for player in tournament.players().filter({ $0.isUnranked() }) {
for player in tournament.players().filter({ $0.isUnranked() && $0.source == nil }) {
do {
if let playerData = try await player.fetchUnrankPlayerData() {
player.lastName = playerData.nom

Loading…
Cancel
Save