From 058d8eea78a3643b8a3af0c20dbe347f3d162fc2 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 4 Jun 2019 18:35:51 +0200 Subject: [PATCH] Adds Notable results report --- TournamentStats.xcodeproj/project.pbxproj | 8 ++++ .../UserInterfaceState.xcuserstate | Bin 57266 -> 61353 bytes TournamentStats/Importer.swift | 6 +-- TournamentStats/NotablePlayers.swift | 38 ++++++++++++++++++ TournamentStats/core/Realm+Extensions.swift | 3 +- TournamentStats/report/Queries.swift | 21 ++++++++++ TournamentStats/report/ReportGenerator.swift | 9 +++-- .../report/structures/PlayerResult.swift | 38 ++++++++++++++++++ 8 files changed, 116 insertions(+), 7 deletions(-) create mode 100644 TournamentStats/NotablePlayers.swift create mode 100644 TournamentStats/report/structures/PlayerResult.swift diff --git a/TournamentStats.xcodeproj/project.pbxproj b/TournamentStats.xcodeproj/project.pbxproj index 43b2c15..4523edd 100644 --- a/TournamentStats.xcodeproj/project.pbxproj +++ b/TournamentStats.xcodeproj/project.pbxproj @@ -91,6 +91,8 @@ 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */; }; 4DF7614822A59660004B0EF1 /* ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7614722A59660004B0EF1 /* ReportGenerator.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 */ /* Begin PBXContainerItemProxy section */ @@ -192,6 +194,8 @@ 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CumulatedResults.swift; sourceTree = ""; }; 4DF7614722A59660004B0EF1 /* ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportGenerator.swift; sourceTree = ""; }; 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentWinner.swift; sourceTree = ""; }; + 4DF7614C22A6CC0D004B0EF1 /* NotablePlayers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotablePlayers.swift; sourceTree = ""; }; + 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerResult.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -244,6 +248,7 @@ 4DF7614422A593FC004B0EF1 /* report */, 4DF760AF22A47C74004B0EF1 /* Importer.swift */, 4DF760C822A56497004B0EF1 /* Seed.swift */, + 4DF7614C22A6CC0D004B0EF1 /* NotablePlayers.swift */, 4DF760C022A561A8004B0EF1 /* UI */, 4DF7608922A3FB96004B0EF1 /* Main.storyboard */, 4DF7608C22A3FB98004B0EF1 /* Assets.xcassets */, @@ -392,6 +397,7 @@ children = ( 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */, 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */, + 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */, ); path = structures; sourceTree = ""; @@ -593,10 +599,12 @@ 4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */, 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, + 4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */, 4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */, 4DF760BF22A560AA004B0EF1 /* FileWriter.swift in Sources */, 4DF760BC22A5270E004B0EF1 /* Queries.swift in Sources */, 4DF760BA22A524F4004B0EF1 /* Formatters.swift in Sources */, + 4DF7614D22A6CC0D004B0EF1 /* NotablePlayers.swift in Sources */, 4DF760C922A56497004B0EF1 /* Seed.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate b/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate index 029b989e3c09c233407d7e3cdaa1cfc9186070de..334e5d7963166fb025b9105d0d6620627bc56427 100644 GIT binary patch delta 26424 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 JasO|6`Yiysp(FqR diff --git a/TournamentStats/Importer.swift b/TournamentStats/Importer.swift index dd4df72..b9b4ff0 100644 --- a/TournamentStats/Importer.swift +++ b/TournamentStats/Importer.swift @@ -67,7 +67,7 @@ class Importer { var city: String = "" var state: String = "" var country: String = "" - + for i in 0.. 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) if let item = items.first { return item @@ -36,6 +36,7 @@ extension Realm { new.city = city new.country = country new.state = state + new.notable = notable return new } diff --git a/TournamentStats/report/Queries.swift b/TournamentStats/report/Queries.swift index e970d78..20153ec 100644 --- a/TournamentStats/report/Queries.swift +++ b/TournamentStats/report/Queries.swift @@ -66,4 +66,25 @@ class Queries { return tws } + static func notableCashes(realm: Realm, date: Date) -> [PlayerResult] { + + let notableCashes: Results = 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 + } + } diff --git a/TournamentStats/report/ReportGenerator.swift b/TournamentStats/report/ReportGenerator.swift index 514b0de..a5fdf0a 100644 --- a/TournamentStats/report/ReportGenerator.swift +++ b/TournamentStats/report/ReportGenerator.swift @@ -48,13 +48,16 @@ class ReportGenerator { let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"]) + // Individual days for tourny in tourniesDate { - let date = tourny.date + let fileDate = Formatter.fileDate.string(from: date) + let dayWinners = Queries.allWinners(realm: realm, date: date) + dayWinners.writeHTML(fileName: "reports/winners/bracelets_\(fileDate).html") - let fileDate = Formatter.fileDate.string(from: date) - dayWinners.writeHTML(fileName: "reports/winners/\(fileDate).html") + let notableCashes = Queries.notableCashes(realm: realm, date: date) + notableCashes.writeHTML(fileName: "reports/winners/notables_\(fileDate).html") } } diff --git a/TournamentStats/report/structures/PlayerResult.swift b/TournamentStats/report/structures/PlayerResult.swift new file mode 100644 index 0000000..37a8ce9 --- /dev/null +++ b/TournamentStats/report/structures/PlayerResult.swift @@ -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: "") + return "\(all)" + } + + 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: "") + return "\(all)" + } + +}