diff --git a/PadelClubData/Data/PlayerRegistration.swift b/PadelClubData/Data/PlayerRegistration.swift index 880e9c6..9d4511f 100644 --- a/PadelClubData/Data/PlayerRegistration.swift +++ b/PadelClubData/Data/PlayerRegistration.swift @@ -119,7 +119,9 @@ final public class PlayerRegistration: BasePlayerRegistration, SideStorable { public func playerLabel(_ displayStyle: DisplayStyle = .wide) -> String { switch displayStyle { - case .wide, .title: + case .title: + return firstName.trimmed.capitalized + " " + lastName.trimmed.capitalized + case .wide: return lastName.trimmed.capitalized + " " + firstName.trimmed.capitalized case .short: let names = lastName.components(separatedBy: .whitespaces) @@ -170,7 +172,7 @@ final public class PlayerRegistration: BasePlayerRegistration, SideStorable { let currentRank = rank ?? maleUnranked switch tournament.tournamentCategory { case .men: - let addon = PlayerRegistration.addon(for: currentRank, manMax: maleUnranked, womanMax: femaleUnranked) + let addon = tournament.addon(for: currentRank, manMax: maleUnranked, womanMax: femaleUnranked) computedRank = isMalePlayer() ? currentRank : currentRank + addon default: computedRank = currentRank @@ -279,16 +281,6 @@ final public class PlayerRegistration: BasePlayerRegistration, SideStorable { } } - public static func addon(for playerRank: Int, manMax: Int, womanMax: Int) -> Int { - switch playerRank { - case 0: return 0 - case womanMax: return manMax - womanMax - case manMax: return 0 - default: - return TournamentCategory.femaleInMaleAssimilationAddition(playerRank) - } - } - func insertOnServer() { self.tournamentStore?.playerRegistrations.writeChangeAndInsertOnServer(instance: self) } diff --git a/PadelClubData/Data/TeamRegistration.swift b/PadelClubData/Data/TeamRegistration.swift index 2028f28..865dfaf 100644 --- a/PadelClubData/Data/TeamRegistration.swift +++ b/PadelClubData/Data/TeamRegistration.swift @@ -261,10 +261,10 @@ final public class TeamRegistration: BaseTeamRegistration, SideStorable { separator: twoLines ? "\n" : " \(separator) ") } - public func teamLabelRanked(displayRank: Bool, displayTeamName: Bool) -> String { + public func teamLabelRanked(displayStyle: DisplayStyle = .wide, displayRank: Bool, displayTeamName: Bool) -> String { [ displayTeamName ? name : nil, displayRank ? seedIndex() : nil, - displayTeamName ? (name == nil ? teamLabel() : name) : teamLabel(), + displayTeamName ? (name == nil ? teamLabel(displayStyle) : name) : teamLabel(displayStyle), ].compactMap({ $0 }).joined(separator: " ") } diff --git a/PadelClubData/Data/Tournament.swift b/PadelClubData/Data/Tournament.swift index d3995c6..d8fdbb4 100644 --- a/PadelClubData/Data/Tournament.swift +++ b/PadelClubData/Data/Tournament.swift @@ -2363,6 +2363,25 @@ defer { } } + public func addon(for playerRank: Int, manMax: Int, womanMax: Int) -> Int { + switch playerRank { + case 0: return 0 + case womanMax: return manMax - womanMax + case manMax: return 0 + default: + return TournamentCategory.femaleInMaleAssimilationAddition(playerRank, seasonYear: self.startDate.seasonYear()) + } + } + + public func coachingIsAuthorized() -> Bool { + switch startDate.seasonYear() { + case 2026: + return true + default: + return tournamentLevel.coachingIsAuthorized + } + } + // MARK: - func insertOnServer() throws { diff --git a/PadelClubData/Extensions/Date+Extensions.swift b/PadelClubData/Extensions/Date+Extensions.swift index 286b8c5..0db32fc 100644 --- a/PadelClubData/Extensions/Date+Extensions.swift +++ b/PadelClubData/Extensions/Date+Extensions.swift @@ -37,6 +37,14 @@ public enum TimeOfDay { public extension Date { + func seasonYear() -> Int { + if self.monthInt >= 9 { + return self.yearInt + 1 + } + return self.yearInt + } + + func withoutSeconds() -> Date { let calendar = Calendar.current return calendar.date(bySettingHour: calendar.component(.hour, from: self), diff --git a/PadelClubData/ViewModel/PadelRule.swift b/PadelClubData/ViewModel/PadelRule.swift index 8cc6a51..b47dc2e 100644 --- a/PadelClubData/ViewModel/PadelRule.swift +++ b/PadelClubData/ViewModel/PadelRule.swift @@ -876,7 +876,28 @@ public enum TournamentCategory: Int, Hashable, Codable, CaseIterable, Identifiab } } - public static func femaleInMaleAssimilationAddition(_ rank: Int) -> Int { + public static func femaleInMaleAssimilationAddition(_ rank: Int, seasonYear: Int?) -> Int { + switch seasonYear { + case .some(let year): + if year < 2026 { + switch rank { + case 1...10: return 400 + case 11...30: return 1000 + case 31...60: return 2000 + case 61...100: return 3500 + case 101...200: return 10000 + case 201...500: return 15000 + case 501...1000: return 25000 + case 1001...2000: return 35000 + case 2001...3000: return 45000 + default: + return 50000 + } + } + case .none: + break + } + switch rank { case 1...10: return 400 case 11...30: return 1000 @@ -887,8 +908,10 @@ public enum TournamentCategory: Int, Hashable, Codable, CaseIterable, Identifiab case 501...1000: return 25000 case 1001...2000: return 35000 case 2001...3000: return 45000 + case 3001...5000: return 55000 + case 5001...10000: return 70000 default: - return 50000 + return 90000 } } @@ -1499,7 +1522,7 @@ public enum MatchFormat: Int, Hashable, Codable, CaseIterable, Identifiable { public var isFederal: Bool { switch self { - case .megaTie, .twoSetsOfSuperTie, .singleSet, .singleSetDecisivePoint, .singleSetOfFourGames, .singleSetOfFourGamesDecisivePoint: + case .megaTie, .twoSetsOfSuperTie, .singleSet, .singleSetDecisivePoint, .singleSetOfFourGamesDecisivePoint: return false default: return true @@ -1525,11 +1548,11 @@ public enum MatchFormat: Int, Hashable, Codable, CaseIterable, Identifiable { case .twoSetsOfSuperTie: return "G" case .megaTie: - return "F" + return "H" case .singleSet: - return "H1" + return "I1" case .singleSetDecisivePoint: - return "H2" + return "I2" case .twoSetsDecisivePoint: return "A2" case .twoSetsDecisivePointSuperTie: @@ -1539,9 +1562,9 @@ public enum MatchFormat: Int, Hashable, Codable, CaseIterable, Identifiable { case .nineGamesDecisivePoint: return "D2" case .singleSetOfFourGames: - return "I1" + return "F1" case .singleSetOfFourGamesDecisivePoint: - return "I2" + return "F2" } }