diff --git a/TournamentStats.xcodeproj/project.pbxproj b/TournamentStats.xcodeproj/project.pbxproj index 81b7669..9a3dd8f 100644 --- a/TournamentStats.xcodeproj/project.pbxproj +++ b/TournamentStats.xcodeproj/project.pbxproj @@ -41,6 +41,7 @@ 4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D39B6F422F856EF00625E31 /* StackTableCell.xib */; }; 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F622F8573900625E31 /* StackTableCell.swift */; }; 4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */; }; + 4D39B6FC22F8686300625E31 /* CumulatedWins.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6FB22F8686300625E31 /* CumulatedWins.swift */; }; 4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */; }; 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */; }; 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7608322A3FB96004B0EF1 /* AppDelegate.swift */; }; @@ -177,6 +178,7 @@ 4D39B6F422F856EF00625E31 /* StackTableCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StackTableCell.xib; sourceTree = ""; }; 4D39B6F622F8573900625E31 /* StackTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackTableCell.swift; sourceTree = ""; }; 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = ""; }; + 4D39B6FB22F8686300625E31 /* CumulatedWins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CumulatedWins.swift; sourceTree = ""; }; 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryCounter.swift; sourceTree = ""; }; 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentStats.swift; sourceTree = ""; }; 4DF7608022A3FB96004B0EF1 /* TournamentStats.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TournamentStats.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -509,6 +511,7 @@ 4DF7614B22A6677A004B0EF1 /* structures */ = { isa = PBXGroup; children = ( + 4D39B6FB22F8686300625E31 /* CumulatedWins.swift */, 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */, 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */, 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */, @@ -750,6 +753,7 @@ 4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */, 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, + 4D39B6FC22F8686300625E31 /* CumulatedWins.swift in Sources */, 4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */, 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */, 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */, diff --git a/TournamentStats/UI/reports/InfographyView.swift b/TournamentStats/UI/reports/InfographyView.swift index 8cb55a4..4ede8ec 100644 --- a/TournamentStats/UI/reports/InfographyView.swift +++ b/TournamentStats/UI/reports/InfographyView.swift @@ -28,7 +28,7 @@ class InfographyView : UIView { let table2 = UITableView(frame: CGRect(x: 500, y: 0, width: 500, height: 500), style: .grouped) table2.register(UINib(nibName: "StackTableCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell") table2.backgroundColor = UIColor.clear - let ds2 = DataSourceWrapper(array: generator.winsByCountry) + let ds2 = DataSourceWrapper(array: generator.mostWins) table2.dataSource = ds2 table2.delegate = ds2 self.references.append(ds2) diff --git a/TournamentStats/report/Queries.swift b/TournamentStats/report/Queries.swift index 449aabf..510a5ef 100644 --- a/TournamentStats/report/Queries.swift +++ b/TournamentStats/report/Queries.swift @@ -40,12 +40,7 @@ class Queries { }) } - enum SortBy { - case cashes - case wins - } - - static func mostCashes(realm: Realm, notable: Bool = false, sort: SortBy = .cashes) -> [CumulatedResults] { + static func mostCashes(realm: Realm, notable: Bool = false) -> [CumulatedResults] { var players = realm.objects(Player.self) if (notable) { @@ -57,22 +52,28 @@ class Queries { crArray.append(CumulatedResults(player: player)) } - switch sort { - case .cashes: - return crArray.sorted(by: { (cr1, cr2) -> Bool in - if cr1.numberOfCashes == cr2.numberOfCashes { - return cr1.total > cr2.total - } - return cr1.numberOfCashes > cr2.numberOfCashes - }) - case .wins: - return crArray.sorted(by: { (cr1, cr2) -> Bool in - if cr1.winsCount == cr2.winsCount { - return cr1.numberOfCashes > cr2.numberOfCashes - } - return cr1.winsCount > cr2.winsCount - }) + return crArray.sorted(by: { (cr1, cr2) -> Bool in + if cr1.numberOfCashes == cr2.numberOfCashes { + return cr1.total > cr2.total + } + return cr1.numberOfCashes > cr2.numberOfCashes + }) + } + + static func mostWins(realm: Realm) -> [CumulatedWins] { + + var crArray: [CumulatedWins] = [] + for player in realm.objects(Player.self) { + crArray.append(CumulatedWins(player: player)) } + + crArray = crArray.filter { $0.winsCount > 0 } + return crArray.sorted(by: { (cr1, cr2) -> Bool in + if cr1.winsCount == cr2.winsCount { + return cr1.numberOfCashes > cr2.numberOfCashes + } + return cr1.winsCount > cr2.winsCount + }) } static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil) -> [TournamentWinner] { @@ -238,7 +239,7 @@ class Queries { static func firstPrizeDistribution(realm: Realm) -> [DistributionCounter] { let winnerResults = realm.objects(Result.self).filter("rank == 1") - + let low = DistributionCounter(name: "Low (<$250K)") let medium = DistributionCounter(name: "Medium ($250K - $1M)") let high = DistributionCounter(name: "High (> $1M)") @@ -275,5 +276,5 @@ class Queries { } return games } - + } diff --git a/TournamentStats/report/ReportGenerator.swift b/TournamentStats/report/ReportGenerator.swift index 4509861..0d118a4 100644 --- a/TournamentStats/report/ReportGenerator.swift +++ b/TournamentStats/report/ReportGenerator.swift @@ -46,7 +46,7 @@ class ReportGenerator { } var biggestWinners: [CumulatedResults] = [] - var mostWins: [CumulatedResults] = [] + var mostWins: [CumulatedWins] = [] var mostCashes: [CumulatedResults] = [] var tournamentWinners: [TournamentWinner] = [] var tourniesByEntries: [TournamentRepresentable] = [] @@ -68,7 +68,7 @@ class ReportGenerator { let realm = try! Realm() self.biggestWinners = Queries.biggestWinners(realm: realm) - self.mostWins = Queries.mostCashes(realm: realm, sort: .wins) + self.mostWins = Queries.mostWins(realm: realm) self.mostCashes = Queries.mostCashes(realm: realm) self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) diff --git a/TournamentStats/report/structures/CumulatedWins.swift b/TournamentStats/report/structures/CumulatedWins.swift new file mode 100644 index 0000000..34748a1 --- /dev/null +++ b/TournamentStats/report/structures/CumulatedWins.swift @@ -0,0 +1,69 @@ +// +// CumulatedResults.swift +// TournamentStats +// +// Created by Laurent Morvillier on 03/06/2019. +// Copyright © 2019 Stax River. All rights reserved. +// + +import Foundation + +class CumulatedWins : HTMLRepresentable, ColumnRepresentable { + + enum Fields : String, CaseIterable { + case name = "Name" + case wins = "Wins" + case earnings = "Total Earnings" + } + + var player: Player + var total: Double = 0.0 +// var results: [Result] = [] + var winsCount: Int = 0 + var numberOfCashes: Int = 0 + + init(player: Player) { + self.player = player + for result in player.results { + self.add(result: result) + } + } + + func add(result: Result) { + self.total += result.earnings +// self.results.append(result) + self.numberOfCashes += 1 + if result.rank == 1 { + self.winsCount += 1 + } + } + + static func headers() -> [String] { + return Fields.allCases.map { $0.rawValue } + } + + func colums() -> [String] { + return [self.player.formattedName, "\(self.winsCount)", self.total.currencyFormatted] + } + +// static func htmlHeaders() -> String { +// var strings: [String] = [] +// strings.append("Name") +//// strings.append("Places (Year)") +// strings.append("Total Earnings") +// strings.append("Cashes") +// let all = strings.joined(separator: "") +// return "\(all)" +// } +// +// func html() -> String { +// var strings: [String] = [] +// strings.append(self.player.formattedName) +//// strings.append(self.results.map { "\($0.rank.rankFormatted) (\($0.tournaments.first?.date.year ?? ""))" }.joined(separator: ", ")) +// strings.append(self.total.currencyFormatted) +// strings.append("\(self.numberOfCashes)") +// let all = strings.joined(separator: "") +// return "\(all)" +// } + +}