From 5f736fc12ccaa303f26220aba2de2282ea76a3c1 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 5 Jun 2019 11:25:47 +0200 Subject: [PATCH] Updated results + new reports + formatting --- TournamentStats.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 62478 -> 70334 bytes TournamentStats/Events/event3 | 619 +----------------- TournamentStats/Events/event8 | 108 +++ TournamentStats/NotablePlayers.swift | 4 +- TournamentStats/Seed.swift | 24 +- TournamentStats/core/Formatters.swift | 8 +- TournamentStats/realm/Model.swift | 4 +- TournamentStats/report/Queries.swift | 11 +- TournamentStats/report/ReportGenerator.swift | 14 +- .../report/structures/CumulatedResults.swift | 2 +- .../report/structures/PlayerResult.swift | 2 +- .../structures/TournamentRepresentable.swift | 37 ++ .../report/structures/TournamentWinner.swift | 2 +- TournamentStats/utils/CSVUtils.swift | 2 +- 15 files changed, 197 insertions(+), 644 deletions(-) create mode 100644 TournamentStats/report/structures/TournamentRepresentable.swift diff --git a/TournamentStats.xcodeproj/project.pbxproj b/TournamentStats.xcodeproj/project.pbxproj index 4523edd..114ecb4 100644 --- a/TournamentStats.xcodeproj/project.pbxproj +++ b/TournamentStats.xcodeproj/project.pbxproj @@ -93,6 +93,7 @@ 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 */; }; + 4DF7615122A7AECA004B0EF1 /* TournamentRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7615022A7AECA004B0EF1 /* TournamentRepresentable.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -196,6 +197,7 @@ 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 = ""; }; + 4DF7615022A7AECA004B0EF1 /* TournamentRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TournamentRepresentable.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -398,6 +400,7 @@ 4DF7614522A59407004B0EF1 /* CumulatedResults.swift */, 4DF7614922A66675004B0EF1 /* TournamentWinner.swift */, 4DF7614E22A6CF93004B0EF1 /* PlayerResult.swift */, + 4DF7615022A7AECA004B0EF1 /* TournamentRepresentable.swift */, ); path = structures; sourceTree = ""; @@ -596,6 +599,7 @@ 4DF7614A22A66675004B0EF1 /* TournamentWinner.swift in Sources */, 4DF760B322A47CAE004B0EF1 /* Realm+Extensions.swift in Sources */, 4DF7608822A3FB96004B0EF1 /* DetailViewController.swift in Sources */, + 4DF7615122A7AECA004B0EF1 /* TournamentRepresentable.swift in Sources */, 4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */, 4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */, 4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */, diff --git a/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate b/TournamentStats.xcodeproj/project.xcworkspace/xcuserdata/laurent.xcuserdatad/UserInterfaceState.xcuserstate index 314553606849501551e8f72264e9fcce3b9e4d75..a963a841dd57d4958799a0db4a2854d524bbe952 100644 GIT binary patch delta 31875 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 delta 26964 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 N 10 { - unit /= 10 - } - switch unit { + let unit = "\(self)" + let n = Int(String(unit.last!)) + switch n { case 1: return "\(self)st" case 2: diff --git a/TournamentStats/realm/Model.swift b/TournamentStats/realm/Model.swift index 0cf1c4e..5f85f21 100644 --- a/TournamentStats/realm/Model.swift +++ b/TournamentStats/realm/Model.swift @@ -26,11 +26,11 @@ class Tournament : Object, Named { let results = List() @objc dynamic var prizepool: Double = 0.0 - @objc dynamic var entrants: Int = 0 + @objc dynamic var entries: Int = 0 var rows: [Columns] { switch self.number { - case 1: return [.rank, .player, .earnings, .city, .state, .country] + case 1, 8: return [.rank, .player, .earnings, .city, .state, .country] default: return [.rank, .player, .earnings, .poy, .city, .state, .country] } } diff --git a/TournamentStats/report/Queries.swift b/TournamentStats/report/Queries.swift index 5f80cee..48381f0 100644 --- a/TournamentStats/report/Queries.swift +++ b/TournamentStats/report/Queries.swift @@ -43,7 +43,7 @@ class Queries { }) } - static func allWinners(realm: Realm, date: Date? = nil) -> [TournamentWinner] { + static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil) -> [TournamentWinner] { let winners: Results if let day = date { @@ -87,4 +87,13 @@ class Queries { return prs } + static func sortedEvents(realm: Realm, fieldName: String, ascending: Bool) -> [TournamentRepresentable] { + let tournies = realm.objects(Tournament.self).sorted(byKeyPath: fieldName, ascending: ascending) + var trs: [TournamentRepresentable] = [] + for tourny in tournies { + trs.append(TournamentRepresentable(tournament: tourny)) + } + return trs + } + } diff --git a/TournamentStats/report/ReportGenerator.swift b/TournamentStats/report/ReportGenerator.swift index a5fdf0a..327515b 100644 --- a/TournamentStats/report/ReportGenerator.swift +++ b/TournamentStats/report/ReportGenerator.swift @@ -43,8 +43,9 @@ class ReportGenerator { let mostCashes = Queries.mostCashes(realm: realm) mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25) - let tournamentWinners = Queries.allWinners(realm: realm) - tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: 500) + let tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) + tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil) + tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10) let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"]) @@ -53,13 +54,20 @@ class ReportGenerator { let date = tourny.date let fileDate = Formatter.fileDate.string(from: date) - let dayWinners = Queries.allWinners(realm: realm, date: date) + let dayWinners = Queries.allWinnersSortedByEvent(realm: realm, date: date) dayWinners.writeHTML(fileName: "reports/winners/bracelets_\(fileDate).html") let notableCashes = Queries.notableCashes(realm: realm, date: date) notableCashes.writeHTML(fileName: "reports/winners/notables_\(fileDate).html") } + let tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) + tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil) + tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5) + let tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false) + tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil) + tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5) + } } diff --git a/TournamentStats/report/structures/CumulatedResults.swift b/TournamentStats/report/structures/CumulatedResults.swift index db5f1ec..b177856 100644 --- a/TournamentStats/report/structures/CumulatedResults.swift +++ b/TournamentStats/report/structures/CumulatedResults.swift @@ -47,7 +47,7 @@ class CumulatedResults : CSVRepresentable, HTMLRepresentable { strings.append("Total Earnings") strings.append("Cashes") let all = strings.joined(separator: "") - return "\(all)" + return "\(all)" } func html() -> String { diff --git a/TournamentStats/report/structures/PlayerResult.swift b/TournamentStats/report/structures/PlayerResult.swift index f174d3f..b97b70e 100644 --- a/TournamentStats/report/structures/PlayerResult.swift +++ b/TournamentStats/report/structures/PlayerResult.swift @@ -21,7 +21,7 @@ struct PlayerResult : HTMLRepresentable { strings.append("#") strings.append("Event") let all = strings.joined(separator: "") - return "\(all)" + return "\(all)" } func html() -> String { diff --git a/TournamentStats/report/structures/TournamentRepresentable.swift b/TournamentStats/report/structures/TournamentRepresentable.swift new file mode 100644 index 0000000..cd95f64 --- /dev/null +++ b/TournamentStats/report/structures/TournamentRepresentable.swift @@ -0,0 +1,37 @@ +// +// TournamentEntries.swift +// TournamentStats +// +// Created by Laurent Morvillier on 05/06/2019. +// Copyright © 2019 Stax River. All rights reserved. +// + +import Foundation + +struct TournamentRepresentable : HTMLRepresentable { + + var tournament: Tournament + + static func htmlHeaders() -> String { + var strings: [String] = [] + strings.append("#") + strings.append("Buy-in") + strings.append("Event") + strings.append("Prizepool") + strings.append("Entries") + let all = strings.joined(separator: "") + return "\(all)" + } + + func html() -> String { + var strings: [String] = [] + strings.append("\(tournament.number)") + strings.append(tournament.buyin.currencyFormatted) + strings.append(tournament.name) + strings.append(tournament.prizepool.currencyFormatted) + strings.append("\(tournament.entries)") + let all = strings.joined(separator: "") + return "\(all)" + } + +} diff --git a/TournamentStats/report/structures/TournamentWinner.swift b/TournamentStats/report/structures/TournamentWinner.swift index 6856f34..6aeb92a 100644 --- a/TournamentStats/report/structures/TournamentWinner.swift +++ b/TournamentStats/report/structures/TournamentWinner.swift @@ -21,7 +21,7 @@ struct TournamentWinner : HTMLRepresentable { strings.append("Player") strings.append("Prize") let all = strings.joined(separator: "") - return "\(all)" + return "\(all)" } func html() -> String { diff --git a/TournamentStats/utils/CSVUtils.swift b/TournamentStats/utils/CSVUtils.swift index 5d81f65..7cc752a 100644 --- a/TournamentStats/utils/CSVUtils.swift +++ b/TournamentStats/utils/CSVUtils.swift @@ -44,7 +44,7 @@ extension Array where Element : HTMLRepresentable { html.append("\n") html.append(rep.html()) - if index >= max { + if index + 1 >= max { break } }