rename player weight into computedRank

multistore
Razmig Sarkissian 2 years ago
parent a61e16123c
commit 4a002de680
  1. 16
      PadelClub/Data/PlayerRegistration.swift
  2. 2
      PadelClub/Data/TeamRegistration.swift
  3. 8
      PadelClub/Data/Tournament.swift
  4. 12
      PadelClub/Utils/FileImportManager.swift
  5. 4
      PadelClub/Views/Cashier/CashierView.swift
  6. 2
      PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift
  7. 2
      PadelClub/Views/Player/Components/PlayerSexPickerView.swift
  8. 6
      PadelClub/Views/Player/PlayerDetailView.swift
  9. 2
      PadelClub/Views/Tournament/FileImportView.swift
  10. 2
      PadelClub/Views/Tournament/Screen/Components/UpdateSourceRankDateView.swift
  11. 4
      PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift

@ -31,7 +31,7 @@ class PlayerRegistration: ModelObject, Storable {
var email: String? var email: String?
var birthdate: String? var birthdate: String?
var weight: Int = 0 var computedRank: Int = 0
var source: PlayerDataSource? var source: PlayerDataSource?
var hasArrived: Bool = false var hasArrived: Bool = false
@ -169,8 +169,8 @@ class PlayerRegistration: ModelObject, Storable {
func rankLabel(_ displayStyle: DisplayStyle = .wide) -> String { func rankLabel(_ displayStyle: DisplayStyle = .wide) -> String {
if let rank, rank > 0 { if let rank, rank > 0 {
if rank != weight { if rank != computedRank {
return weight.formatted() + " (" + rank.formatted() + ")" return computedRank.formatted() + " (" + rank.formatted() + ")"
} else { } else {
return rank.formatted() return rank.formatted()
} }
@ -180,7 +180,7 @@ class PlayerRegistration: ModelObject, Storable {
} }
func getRank() -> Int { func getRank() -> Int {
weight computedRank
} }
@MainActor @MainActor
@ -238,13 +238,13 @@ class PlayerRegistration: ModelObject, Storable {
} }
} }
func setWeight(in tournament: Tournament) { func setComputedRank(in tournament: Tournament) {
let currentRank = rank ?? tournament.unrankValue(for: isMalePlayer()) ?? 100_000 let currentRank = rank ?? tournament.unrankValue(for: isMalePlayer()) ?? 100_000
switch tournament.tournamentCategory { switch tournament.tournamentCategory {
case .men: case .men:
weight = isMalePlayer() ? currentRank : currentRank + PlayerRegistration.addon(for: currentRank, manMax: tournament.maleUnrankedValue ?? 0, womanMax: tournament.femaleUnrankedValue ?? 0) computedRank = isMalePlayer() ? currentRank : currentRank + PlayerRegistration.addon(for: currentRank, manMax: tournament.maleUnrankedValue ?? 0, womanMax: tournament.femaleUnrankedValue ?? 0)
default: default:
weight = currentRank computedRank = currentRank
} }
} }
@ -279,7 +279,7 @@ class PlayerRegistration: ModelObject, Storable {
case _birthdate = "birthdate" case _birthdate = "birthdate"
case _phoneNumber = "phoneNumber" case _phoneNumber = "phoneNumber"
case _email = "email" case _email = "email"
case _weight = "weight" case _computedRank = "computedRank"
case _source = "source" case _source = "source"
case _hasArrived = "hasArrived" case _hasArrived = "hasArrived"

@ -268,7 +268,7 @@ class TeamRegistration: ModelObject, Storable {
func setWeight(from players: [PlayerRegistration], inTournamentCategory tournamentCategory: TournamentCategory) { func setWeight(from players: [PlayerRegistration], inTournamentCategory tournamentCategory: TournamentCategory) {
let significantPlayerCount = significantPlayerCount() let significantPlayerCount = significantPlayerCount()
weight = (players.prefix(significantPlayerCount).map { $0.weight } + missingPlayerType(inTournamentCategory: tournamentCategory).map { unrankValue(for: $0 == 1 ? true : false ) }).prefix(significantPlayerCount).reduce(0,+) weight = (players.prefix(significantPlayerCount).map { $0.computedRank } + missingPlayerType(inTournamentCategory: tournamentCategory).map { unrankValue(for: $0 == 1 ? true : false ) }).prefix(significantPlayerCount).reduce(0,+)
} }
func significantPlayerCount() -> Int { func significantPlayerCount() -> Int {

@ -632,11 +632,11 @@ class Tournament : ModelObject, Storable {
} }
func selectedPlayers() -> [PlayerRegistration] { func selectedPlayers() -> [PlayerRegistration] {
selectedSortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.weight) selectedSortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank)
} }
func players() -> [PlayerRegistration] { func players() -> [PlayerRegistration] {
unsortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.weight) unsortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank)
} }
func femalePlayers() -> [PlayerRegistration] { func femalePlayers() -> [PlayerRegistration] {
@ -670,7 +670,7 @@ class Tournament : ModelObject, Storable {
} }
return players.filter { player in return players.filter { player in
if player.rank == nil { return false } if player.rank == nil { return false }
if player.weight <= tournamentLevel.minimumPlayerRank(category: tournamentCategory, ageCategory: federalTournamentAge) { if player.computedRank <= tournamentLevel.minimumPlayerRank(category: tournamentCategory, ageCategory: federalTournamentAge) {
return true return true
} else { } else {
return false return false
@ -846,7 +846,7 @@ class Tournament : ModelObject, Storable {
let teams = self.unsortedTeams() let teams = self.unsortedTeams()
teams.forEach { team in teams.forEach { team in
let players = team.unsortedPlayers() let players = team.unsortedPlayers()
players.forEach { $0.setWeight(in: self) } players.forEach { $0.setComputedRank(in: self) }
team.setWeight(from: players, inTournamentCategory: tournamentCategory) team.setWeight(from: players, inTournamentCategory: tournamentCategory)
try? DataStore.shared.playerRegistrations.addOrUpdate(contentOfs: players) try? DataStore.shared.playerRegistrations.addOrUpdate(contentOfs: players)
} }

@ -71,7 +71,7 @@ class FileImportManager {
self.players = Set(players) self.players = Set(players)
self.tournamentCategory = tournamentCategory self.tournamentCategory = tournamentCategory
self.previousTeam = previousTeam self.previousTeam = previousTeam
self.weight = players.map { $0.weight }.reduce(0,+) self.weight = players.map { $0.computedRank }.reduce(0,+)
self.registrationDate = registrationDate self.registrationDate = registrationDate
} }
@ -210,9 +210,9 @@ class FileImportManager {
} }
let playerOne = PlayerRegistration(federalData: Array(resultOne[0...7]), sex: sexPlayerOne, sexUnknown: sexUnknown) let playerOne = PlayerRegistration(federalData: Array(resultOne[0...7]), sex: sexPlayerOne, sexUnknown: sexUnknown)
playerOne.setWeight(in: tournament) playerOne.setComputedRank(in: tournament)
let playerTwo = PlayerRegistration(federalData: Array(resultTwo[0...7]), sex: sexPlayerTwo, sexUnknown: sexUnknown) let playerTwo = PlayerRegistration(federalData: Array(resultTwo[0...7]), sex: sexPlayerTwo, sexUnknown: sexUnknown)
playerTwo.setWeight(in: tournament) 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]))
results.append(team) results.append(team)
} }
@ -256,9 +256,9 @@ class FileImportManager {
} }
let playerOne = PlayerRegistration(federalData: Array(result[0...7]), sex: sexPlayerOne, sexUnknown: sexUnknown) let playerOne = PlayerRegistration(federalData: Array(result[0...7]), sex: sexPlayerOne, sexUnknown: sexUnknown)
playerOne.setWeight(in: tournament) playerOne.setComputedRank(in: tournament)
let playerTwo = PlayerRegistration(federalData: Array(result[8...]), sex: sexPlayerTwo, sexUnknown: sexUnknown) let playerTwo = PlayerRegistration(federalData: Array(result[8...]), sex: sexPlayerTwo, sexUnknown: sexUnknown)
playerTwo.setWeight(in: tournament) 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]))
results.append(team) results.append(team)
@ -281,7 +281,7 @@ class FileImportManager {
let found = try? federalContext.fetch(fetchRequest) let found = try? federalContext.fetch(fetchRequest)
let registeredPlayers = found?.map({ importedPlayer in let registeredPlayers = found?.map({ importedPlayer in
let player = PlayerRegistration(importedPlayer: importedPlayer) let player = PlayerRegistration(importedPlayer: importedPlayer)
player.setWeight(in: tournament) player.setComputedRank(in: tournament)
return player return player
}) })
if let registeredPlayers, registeredPlayers.isEmpty == false { if let registeredPlayers, registeredPlayers.isEmpty == false {

@ -188,7 +188,7 @@ struct CashierView: View {
Text(teamCallDate.localizedDate()) Text(teamCallDate.localizedDate())
} }
Spacer() Spacer()
Text(player.weight.formatted()) Text(player.computedRank.formatted())
} }
} footer: { } footer: {
if tournaments.count > 1, let tournamentTitle = player.tournament()?.tournamentTitle() { if tournaments.count > 1, let tournamentTitle = player.tournament()?.tournamentTitle() {
@ -200,7 +200,7 @@ struct CashierView: View {
@ViewBuilder @ViewBuilder
private func _byPlayerRank() -> some View { private func _byPlayerRank() -> some View {
let players = teams.flatMap({ $0.players() }).sorted(using: .keyPath(\.weight)).filter({ _shouldDisplayPlayer($0) }) let players = teams.flatMap({ $0.players() }).sorted(using: .keyPath(\.computedRank)).filter({ _shouldDisplayPlayer($0) })
_byPlayer(players) _byPlayer(players)
} }

@ -21,7 +21,7 @@ struct GroupStageTeamReplacementView: View {
private func _getWeight() -> Int { private func _getWeight() -> Int {
guard let selectedPlayer else { return 0 } guard let selectedPlayer else { return 0 }
return team.weight - selectedPlayer.weight return team.weight - selectedPlayer.computedRank
} }
private func _searchableRange(_ teamRange: TeamRegistration.TeamRange) -> String { private func _searchableRange(_ teamRange: TeamRegistration.TeamRange) -> String {

@ -32,7 +32,7 @@ struct PlayerSexPickerView: View {
private func _save() { private func _save() {
do { do {
player.setWeight(in: tournament) player.setComputedRank(in: tournament)
try dataStore.playerRegistrations.addOrUpdate(instance: player) try dataStore.playerRegistrations.addOrUpdate(instance: player)
if let team = player.team() { if let team = player.team() {
team.updateWeight(inTournamentCategory: tournament.tournamentCategory) team.updateWeight(inTournamentCategory: tournament.tournamentCategory)

@ -60,7 +60,7 @@ struct PlayerDetailView: View {
Text("Valeur à rajouter") Text("Valeur à rajouter")
} }
LabeledContent { LabeledContent {
TextField("Rang", value: $player.weight, format: .number) TextField("Rang", value: $player.computedRank, format: .number)
.keyboardType(.decimalPad) .keyboardType(.decimalPad)
.multilineTextAlignment(.trailing) .multilineTextAlignment(.trailing)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@ -79,12 +79,12 @@ struct PlayerDetailView: View {
.onChange(of: player.sex) { .onChange(of: player.sex) {
_save() _save()
} }
.onChange(of: player.weight) { .onChange(of: player.computedRank) {
player.team()?.updateWeight(inTournamentCategory: tournament.tournamentCategory) player.team()?.updateWeight(inTournamentCategory: tournament.tournamentCategory)
_save() _save()
} }
.onChange(of: player.rank) { .onChange(of: player.rank) {
player.setWeight(in: tournament) player.setComputedRank(in: tournament)
player.team()?.updateWeight(inTournamentCategory: tournament.tournamentCategory) player.team()?.updateWeight(inTournamentCategory: tournament.tournamentCategory)
_save() _save()
} }

@ -272,7 +272,7 @@ struct FileImportView: View {
Section { Section {
HStack { HStack {
VStack(alignment: .leading) { VStack(alignment: .leading) {
ForEach(team.players.sorted(by: \.weight)) { ForEach(team.players.sorted(by: \.computedRank)) {
Text($0.playerLabel()) Text($0.playerLabel())
} }
} }

@ -40,7 +40,7 @@ struct UpdateSourceRankDateView: View {
try await tournament.updateRank(to: currentRankSourceDate) try await tournament.updateRank(to: currentRankSourceDate)
try await MainActor.run { try await MainActor.run {
tournament.unsortedPlayers().forEach { player in tournament.unsortedPlayers().forEach { player in
player.setWeight(in: tournament) player.setComputedRank(in: tournament)
} }
try dataStore.playerRegistrations.addOrUpdate(contentOfs: tournament.unsortedPlayers()) try dataStore.playerRegistrations.addOrUpdate(contentOfs: tournament.unsortedPlayers())

@ -83,7 +83,7 @@ struct InscriptionManagerView: View {
selectionSearchField = nil selectionSearchField = nil
players.forEach { player in players.forEach { player in
let newPlayer = PlayerRegistration(importedPlayer: player) let newPlayer = PlayerRegistration(importedPlayer: player)
newPlayer.setWeight(in: tournament) newPlayer.setComputedRank(in: tournament)
createdPlayers.insert(newPlayer) createdPlayers.insert(newPlayer)
createdPlayerIds.insert(newPlayer.id) createdPlayerIds.insert(newPlayer.id)
} }
@ -529,7 +529,7 @@ struct InscriptionManagerView: View {
fetchPlayers.first(where: { id == $0.license }) fetchPlayers.first(where: { id == $0.license })
}.forEach { player in }.forEach { player in
let player = PlayerRegistration(importedPlayer: player) let player = PlayerRegistration(importedPlayer: player)
player.setWeight(in: tournament) player.setComputedRank(in: tournament)
currentSelection.insert(player) currentSelection.insert(player)
} }

Loading…
Cancel
Save