|
|
|
|
@ -45,10 +45,12 @@ final class PlayerRegistration: ModelObject, Storable { |
|
|
|
|
var sourceName: String? |
|
|
|
|
var isNveq: Bool = false |
|
|
|
|
var isEQConfirmed: Bool? |
|
|
|
|
|
|
|
|
|
var duplicatePlayers: Int? |
|
|
|
|
var isYearValid: Bool? |
|
|
|
|
|
|
|
|
|
func localizedSourceLabel() -> String { |
|
|
|
|
switch source { |
|
|
|
|
case .frenchFederation, .frenchFederationVerified: |
|
|
|
|
case .frenchFederation, .frenchFederationVerified, .frenchFederationEQVerified: |
|
|
|
|
return "Via la base fédérale" |
|
|
|
|
case .beachPadel: |
|
|
|
|
return "Via le fichier beach-padel" |
|
|
|
|
@ -192,21 +194,29 @@ final class PlayerRegistration: ModelObject, Storable { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func isVerified() -> String { |
|
|
|
|
source == .frenchFederationVerified ? "ok" : "" |
|
|
|
|
switch source { |
|
|
|
|
case .frenchFederationVerified: |
|
|
|
|
return "ok" |
|
|
|
|
case .frenchFederationEQVerified: |
|
|
|
|
return "ok2" |
|
|
|
|
default: |
|
|
|
|
return "" |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var duplicatePlayers: Int? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func championshipAlerts(tournament: Tournament, allPlayers: [(String, String)], forRegional: Bool) -> [ChampionshipAlert] { |
|
|
|
|
var alerts = [ChampionshipAlert]() |
|
|
|
|
|
|
|
|
|
if forRegional { |
|
|
|
|
if forRegional, source != .frenchFederationEQVerified { |
|
|
|
|
if isNveq == false && (isEQConfirmed == false || isEQConfirmed == nil) { |
|
|
|
|
alerts.append(.notEQ(isEQConfirmed, self)) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if isYearValid == nil || isYearValid == false { |
|
|
|
|
alerts.append(.isYearValid(isYearValid, self)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if duplicatePlayers == nil { |
|
|
|
|
let teamClubCode = self.team()?.clubCode |
|
|
|
|
let strippedLicense = self.licenceId?.strippedLicense |
|
|
|
|
@ -223,7 +233,7 @@ final class PlayerRegistration: ModelObject, Storable { |
|
|
|
|
|
|
|
|
|
if isUnranked() && source == nil { |
|
|
|
|
alerts.append(.unranked(self)) |
|
|
|
|
} else if source != .frenchFederationVerified { |
|
|
|
|
} else if source != .frenchFederationVerified && source != .frenchFederationEQVerified { |
|
|
|
|
if tournament.tournamentCategory == .men && isMalePlayer() == false { |
|
|
|
|
alerts.append(.playerSexInvalid(self)) |
|
|
|
|
} |
|
|
|
|
@ -242,6 +252,8 @@ final class PlayerRegistration: ModelObject, Storable { |
|
|
|
|
if isLicenceOK() == false { |
|
|
|
|
alerts.append(.playerLicenseInvalid(self)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return alerts |
|
|
|
|
@ -523,6 +535,10 @@ defer { |
|
|
|
|
case _clubCode = "clubCode" |
|
|
|
|
case _sourceName = "sourceName" |
|
|
|
|
case _isNveq = "isNveq" |
|
|
|
|
case _duplicatePlayers = "duplicatePlayers" |
|
|
|
|
case _isYearValid = "isYearValid" |
|
|
|
|
case _isEQConfirmed = "isEQConfirmed" |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
init(from decoder: Decoder) throws { |
|
|
|
|
@ -555,6 +571,10 @@ defer { |
|
|
|
|
clubCode = try container.decodeIfPresent(String.self, forKey: ._clubCode) |
|
|
|
|
isNveq = try container.decodeIfPresent(Bool.self, forKey: ._isNveq) ?? false |
|
|
|
|
sourceName = try container.decodeIfPresent(String.self, forKey: ._sourceName) |
|
|
|
|
isEQConfirmed = try container.decodeIfPresent(Bool.self, forKey: ._isEQConfirmed) |
|
|
|
|
duplicatePlayers = try container.decodeIfPresent(Int.self, forKey: ._duplicatePlayers) |
|
|
|
|
isYearValid = try container.decodeIfPresent(Bool.self, forKey: ._isYearValid) |
|
|
|
|
sourceName = try container.decodeIfPresent(String.self, forKey: ._sourceName) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func encode(to encoder: Encoder) throws { |
|
|
|
|
@ -585,6 +605,9 @@ defer { |
|
|
|
|
try container.encode(clubCode, forKey: ._clubCode) |
|
|
|
|
try container.encode(sourceName, forKey: ._sourceName) |
|
|
|
|
try container.encode(isNveq, forKey: ._isNveq) |
|
|
|
|
try container.encode(isEQConfirmed, forKey: ._isEQConfirmed) |
|
|
|
|
try container.encode(duplicatePlayers, forKey: ._duplicatePlayers) |
|
|
|
|
try container.encode(isYearValid, forKey: ._isYearValid) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
enum PlayerDataSource: Int, Codable { |
|
|
|
|
@ -592,6 +615,7 @@ defer { |
|
|
|
|
case beachPadel = 1 |
|
|
|
|
case onlineRegistration = 2 |
|
|
|
|
case frenchFederationVerified = 3 |
|
|
|
|
case frenchFederationEQVerified = 4 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
enum PlayerSexType: Int, Hashable, CaseIterable, Identifiable, Codable { |
|
|
|
|
|