Adds Notable results report

master
Laurent 7 years ago
parent b356883311
commit 058d8eea78
  1. 8
      TournamentStats.xcodeproj/project.pbxproj
  2. BIN
      TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate
  3. 6
      TournamentStats/Importer.swift
  4. 38
      TournamentStats/NotablePlayers.swift
  5. 3
      TournamentStats/core/Realm+Extensions.swift
  6. 21
      TournamentStats/report/Queries.swift
  7. 9
      TournamentStats/report/ReportGenerator.swift
  8. 38
      TournamentStats/report/structures/PlayerResult.swift

@ -91,6 +91,8 @@
4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */; }; 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */; };
4DF7614822A59660004B0EF1 /* ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614722A59660004B0EF1 /* ReportGenerator.swift */; }; 4DF7614822A59660004B0EF1 /* ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614722A59660004B0EF1 /* ReportGenerator.swift */; };
4DF7614A22A66675004B0EF1 /* TournamentWinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */; }; 4DF7614A22A66675004B0EF1 /* TournamentWinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */; };
4DF7614D22A6CC0D004B0EF1 /* NotablePlayers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614C22A6CC0D004B0EF1 /* NotablePlayers.swift */; };
4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -192,6 +194,8 @@
4DF7614522A59407004B0EF1 /* CumulatedResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CumulatedResults.swift; sourceTree = "<group>"; }; 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CumulatedResults.swift; sourceTree = "<group>"; };
4DF7614722A59660004B0EF1 /* ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportGenerator.swift; sourceTree = "<group>"; }; 4DF7614722A59660004B0EF1 /* ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportGenerator.swift; sourceTree = "<group>"; };
4DF7614922A66675004B0EF1 /* TournamentWinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentWinner.swift; sourceTree = "<group>"; }; 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentWinner.swift; sourceTree = "<group>"; };
4DF7614C22A6CC0D004B0EF1 /* NotablePlayers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotablePlayers.swift; sourceTree = "<group>"; };
4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerResult.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -244,6 +248,7 @@
4DF7614422A593FC004B0EF1 /* report */, 4DF7614422A593FC004B0EF1 /* report */,
4DF760AF22A47C74004B0EF1 /* Importer.swift */, 4DF760AF22A47C74004B0EF1 /* Importer.swift */,
4DF760C822A56497004B0EF1 /* Seed.swift */, 4DF760C822A56497004B0EF1 /* Seed.swift */,
4DF7614C22A6CC0D004B0EF1 /* NotablePlayers.swift */,
4DF760C022A561A8004B0EF1 /* UI */, 4DF760C022A561A8004B0EF1 /* UI */,
4DF7608922A3FB96004B0EF1 /* Main.storyboard */, 4DF7608922A3FB96004B0EF1 /* Main.storyboard */,
4DF7608C22A3FB98004B0EF1 /* Assets.xcassets */, 4DF7608C22A3FB98004B0EF1 /* Assets.xcassets */,
@ -392,6 +397,7 @@
children = ( children = (
4DF7614522A59407004B0EF1 /* CumulatedResults.swift */, 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */,
4DF7614922A66675004B0EF1 /* TournamentWinner.swift */, 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */,
4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */,
); );
path = structures; path = structures;
sourceTree = "<group>"; sourceTree = "<group>";
@ -593,10 +599,12 @@
4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */, 4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */,
4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */, 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */,
4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */,
4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */,
4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */, 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */,
4DF760BF22A560AA004B0EF1 /* FileWriter.swift in Sources */, 4DF760BF22A560AA004B0EF1 /* FileWriter.swift in Sources */,
4DF760BC22A5270E004B0EF1 /* Queries.swift in Sources */, 4DF760BC22A5270E004B0EF1 /* Queries.swift in Sources */,
4DF760BA22A524F4004B0EF1 /* Formatters.swift in Sources */, 4DF760BA22A524F4004B0EF1 /* Formatters.swift in Sources */,
4DF7614D22A6CC0D004B0EF1 /* NotablePlayers.swift in Sources */,
4DF760C922A56497004B0EF1 /* Seed.swift in Sources */, 4DF760C922A56497004B0EF1 /* Seed.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;

@ -67,7 +67,7 @@ class Importer {
var city: String = "" var city: String = ""
var state: String = "" var state: String = ""
var country: String = "" var country: String = ""
for i in 0..<rows.count { for i in 0..<rows.count {
let row: String = rows[i] let row: String = rows[i]
let index = i % numberOfColumns let index = i % numberOfColumns
@ -103,8 +103,8 @@ class Importer {
state = row state = row
case .country: case .country:
country = row country = row
let notable: Bool = NotablePlayers.all.contains(playerName)
player = realm.getOrCreatePlayer(name: playerName, city: city, state: state, country: country) player = realm.getOrCreatePlayer(name: playerName, city: city, state: state, country: country, notable: notable)
result?.player = player result?.player = player
} }

@ -0,0 +1,38 @@
//
// NotablePlayers.swift
// TournamentStats
//
// Created by Laurent Morvillier on 04/06/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
class NotablePlayers {
static var all: [String] = [
"Julien Martini",
"James Obst",
"Andrew Lichtenberger",
"Daniel Negreanu",
"Nick Petrangelo",
"Chance Kornuth",
"Phil Hellmuth",
"Bryn Kenney",
"Justin Bonomo",
"Alex Foxen",
"Stephen Chidwick",
"David Peters",
"Jason Koon",
// "",
// "",
// "",
// "",
// "",
// "",
// "",
]
}

@ -26,7 +26,7 @@ extension Realm {
return new return new
} }
func getOrCreatePlayer(name: String, city: String, state: String, country: String) -> Player { func getOrCreatePlayer(name: String, city: String, state: String, country: String, notable: Bool = false) -> Player {
let items = self.objects(Player.self).filter("name = %@ && city = %@ && state = %@ && country = %@", name, city, state, country) let items = self.objects(Player.self).filter("name = %@ && city = %@ && state = %@ && country = %@", name, city, state, country)
if let item = items.first { if let item = items.first {
return item return item
@ -36,6 +36,7 @@ extension Realm {
new.city = city new.city = city
new.country = country new.country = country
new.state = state new.state = state
new.notable = notable
return new return new
} }

@ -66,4 +66,25 @@ class Queries {
return tws return tws
} }
static func notableCashes(realm: Realm, date: Date) -> [PlayerResult] {
let notableCashes: Results<Result> = realm.objects(Result.self).filter("player.notable = true && ANY tournaments.date IN %@", [date])
var prs: [PlayerResult] = []
for nc in notableCashes {
let pr = PlayerResult(tournament: nc.tournaments.first!, result: nc)
prs.append(pr)
}
prs.sort { (pr1, pr2) -> Bool in
if pr1.result.rank == pr2.result.rank {
return pr1.result.earnings > pr2.result.earnings
}
return pr1.result.rank > pr2.result.rank
}
return prs
}
} }

@ -48,13 +48,16 @@ class ReportGenerator {
let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"]) let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"])
// Individual days
for tourny in tourniesDate { for tourny in tourniesDate {
let date = tourny.date let date = tourny.date
let fileDate = Formatter.fileDate.string(from: date)
let dayWinners = Queries.allWinners(realm: realm, date: date) let dayWinners = Queries.allWinners(realm: realm, date: date)
dayWinners.writeHTML(fileName: "reports/winners/bracelets_\(fileDate).html")
let fileDate = Formatter.fileDate.string(from: date) let notableCashes = Queries.notableCashes(realm: realm, date: date)
dayWinners.writeHTML(fileName: "reports/winners/\(fileDate).html") notableCashes.writeHTML(fileName: "reports/winners/notables_\(fileDate).html")
} }
} }

@ -0,0 +1,38 @@
//
// PlayerResult.swift
// TournamentStats
//
// Created by Laurent Morvillier on 04/06/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
struct PlayerResult : HTMLRepresentable {
var tournament: Tournament
var result: Result
static func htmlHeaders() -> String {
var strings: [String] = []
strings.append("Player")
strings.append("Place")
strings.append("Earnings")
strings.append("#")
strings.append("Event")
let all = strings.joined(separator: "</td><td>")
return "<tr><td>\(all)</td></tr>"
}
func html() -> String {
var strings: [String] = []
strings.append(self.result.player?.name ?? "")
strings.append("\(self.result.rank)")
strings.append(result.earnings.currencyFormatted)
strings.append("\(tournament.number)")
strings.append("\(tournament.buyin.currencyFormatted) \(tournament.name)")
let all = strings.joined(separator: "</td><td>")
return "<tr><td>\(all)</td></tr>"
}
}
Loading…
Cancel
Save