infography improvements

master
Laurent 6 years ago
parent 749d4fbaf0
commit 664aca641b
  1. 4
      TournamentStats.xcodeproj/project.pbxproj
  2. 2
      TournamentStats/UI/reports/InfographyView.swift
  3. 47
      TournamentStats/report/Queries.swift
  4. 4
      TournamentStats/report/ReportGenerator.swift
  5. 69
      TournamentStats/report/structures/CumulatedWins.swift

@ -41,6 +41,7 @@
4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D39B6F422F856EF00625E31 /* StackTableCell.xib */; }; 4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D39B6F422F856EF00625E31 /* StackTableCell.xib */; };
4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F622F8573900625E31 /* StackTableCell.swift */; }; 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F622F8573900625E31 /* StackTableCell.swift */; };
4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F922F85C3400625E31 /* UIView+Extensions.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 */; }; 4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */; };
4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */; }; 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */; };
4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7608322A3FB96004B0EF1 /* AppDelegate.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 = "<group>"; }; 4D39B6F422F856EF00625E31 /* StackTableCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StackTableCell.xib; sourceTree = "<group>"; };
4D39B6F622F8573900625E31 /* StackTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackTableCell.swift; sourceTree = "<group>"; }; 4D39B6F622F8573900625E31 /* StackTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackTableCell.swift; sourceTree = "<group>"; };
4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = "<group>"; }; 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = "<group>"; };
4D39B6FB22F8686300625E31 /* CumulatedWins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CumulatedWins.swift; sourceTree = "<group>"; };
4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryCounter.swift; sourceTree = "<group>"; }; 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryCounter.swift; sourceTree = "<group>"; };
4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentStats.swift; sourceTree = "<group>"; }; 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentStats.swift; sourceTree = "<group>"; };
4DF7608022A3FB96004B0EF1 /* TournamentStats.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TournamentStats.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4DF7608022A3FB96004B0EF1 /* TournamentStats.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TournamentStats.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -509,6 +511,7 @@
4DF7614B22A6677A004B0EF1 /* structures */ = { 4DF7614B22A6677A004B0EF1 /* structures */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4D39B6FB22F8686300625E31 /* CumulatedWins.swift */,
4DF7614522A59407004B0EF1 /* CumulatedResults.swift */, 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */,
4DF7614922A66675004B0EF1 /* TournamentWinner.swift */, 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */,
4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */, 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */,
@ -750,6 +753,7 @@
4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */, 4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */,
4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */, 4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */,
4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */,
4D39B6FC22F8686300625E31 /* CumulatedWins.swift in Sources */,
4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */, 4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */,
4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */, 4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */,
4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */, 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */,

@ -28,7 +28,7 @@ class InfographyView : UIView {
let table2 = UITableView(frame: CGRect(x: 500, y: 0, width: 500, height: 500), style: .grouped) 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.register(UINib(nibName: "StackTableCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
table2.backgroundColor = UIColor.clear table2.backgroundColor = UIColor.clear
let ds2 = DataSourceWrapper(array: generator.winsByCountry) let ds2 = DataSourceWrapper(array: generator.mostWins)
table2.dataSource = ds2 table2.dataSource = ds2
table2.delegate = ds2 table2.delegate = ds2
self.references.append(ds2) self.references.append(ds2)

@ -40,12 +40,7 @@ class Queries {
}) })
} }
enum SortBy { static func mostCashes(realm: Realm, notable: Bool = false) -> [CumulatedResults] {
case cashes
case wins
}
static func mostCashes(realm: Realm, notable: Bool = false, sort: SortBy = .cashes) -> [CumulatedResults] {
var players = realm.objects(Player.self) var players = realm.objects(Player.self)
if (notable) { if (notable) {
@ -57,22 +52,28 @@ class Queries {
crArray.append(CumulatedResults(player: player)) crArray.append(CumulatedResults(player: player))
} }
switch sort { return crArray.sorted(by: { (cr1, cr2) -> Bool in
case .cashes: if cr1.numberOfCashes == cr2.numberOfCashes {
return crArray.sorted(by: { (cr1, cr2) -> Bool in return cr1.total > cr2.total
if cr1.numberOfCashes == cr2.numberOfCashes { }
return cr1.total > cr2.total return cr1.numberOfCashes > cr2.numberOfCashes
} })
return cr1.numberOfCashes > cr2.numberOfCashes }
})
case .wins: static func mostWins(realm: Realm) -> [CumulatedWins] {
return crArray.sorted(by: { (cr1, cr2) -> Bool in
if cr1.winsCount == cr2.winsCount { var crArray: [CumulatedWins] = []
return cr1.numberOfCashes > cr2.numberOfCashes for player in realm.objects(Player.self) {
} crArray.append(CumulatedWins(player: player))
return cr1.winsCount > cr2.winsCount
})
} }
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] { static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil) -> [TournamentWinner] {
@ -238,7 +239,7 @@ class Queries {
static func firstPrizeDistribution(realm: Realm) -> [DistributionCounter] { static func firstPrizeDistribution(realm: Realm) -> [DistributionCounter] {
let winnerResults = realm.objects(Result.self).filter("rank == 1") let winnerResults = realm.objects(Result.self).filter("rank == 1")
let low = DistributionCounter(name: "Low (<$250K)") let low = DistributionCounter(name: "Low (<$250K)")
let medium = DistributionCounter(name: "Medium ($250K - $1M)") let medium = DistributionCounter(name: "Medium ($250K - $1M)")
let high = DistributionCounter(name: "High (> $1M)") let high = DistributionCounter(name: "High (> $1M)")
@ -275,5 +276,5 @@ class Queries {
} }
return games return games
} }
} }

@ -46,7 +46,7 @@ class ReportGenerator {
} }
var biggestWinners: [CumulatedResults] = [] var biggestWinners: [CumulatedResults] = []
var mostWins: [CumulatedResults] = [] var mostWins: [CumulatedWins] = []
var mostCashes: [CumulatedResults] = [] var mostCashes: [CumulatedResults] = []
var tournamentWinners: [TournamentWinner] = [] var tournamentWinners: [TournamentWinner] = []
var tourniesByEntries: [TournamentRepresentable] = [] var tourniesByEntries: [TournamentRepresentable] = []
@ -68,7 +68,7 @@ class ReportGenerator {
let realm = try! Realm() let realm = try! Realm()
self.biggestWinners = Queries.biggestWinners(realm: 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.mostCashes = Queries.mostCashes(realm: realm)
self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm)
self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false)

@ -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: "</td><td>")
// return "<tr class=\"table-header\"><td>\(all)</td></tr>"
// }
//
// 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: "</td><td>")
// return "<tr><td>\(all)</td></tr>"
// }
}
Loading…
Cancel
Save