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 029b989..334e5d7 100644 Binary files a/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate and b/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate differ 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)" + } + +}