creates an infography with data in table - alpha

master
Laurent 6 years ago
parent 4225a3b3cb
commit 749d4fbaf0
  1. 16
      TournamentStats.xcodeproj/project.pbxproj
  2. 16
      TournamentStats/AppDelegate.swift
  3. 176
      TournamentStats/Seed.swift
  4. 63
      TournamentStats/UI/DataSourceWrapper.swift
  5. 2
      TournamentStats/UI/MasterViewController.swift
  6. 21
      TournamentStats/UI/StackTableCell.swift
  7. 38
      TournamentStats/UI/StackTableCell.xib
  8. 99
      TournamentStats/UI/UIView+Extensions.swift
  9. 38
      TournamentStats/UI/reports/InfographyView.swift
  10. 94
      TournamentStats/report/ReportGenerator.swift

@ -37,6 +37,10 @@
4D30463322F4232600DA86C4 /* event57 in Resources */ = {isa = PBXBuildFile; fileRef = 4D30463122F4232600DA86C4 /* event57 */; };
4D30463422F4232600DA86C4 /* event78 in Resources */ = {isa = PBXBuildFile; fileRef = 4D30463222F4232600DA86C4 /* event78 */; };
4D39B6F122F829A500625E31 /* InfographyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F022F829A500625E31 /* InfographyView.swift */; };
4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */; };
4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D39B6F422F856EF00625E31 /* StackTableCell.xib */; };
4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F622F8573900625E31 /* StackTableCell.swift */; };
4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */; };
4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA5CA1D22AD078A00AC628E /* CountryCounter.swift */; };
4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDEF11322AE4FB900F4D7C1 /* TournamentStats.swift */; };
4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF7608322A3FB96004B0EF1 /* AppDelegate.swift */; };
@ -169,6 +173,10 @@
4D30463122F4232600DA86C4 /* event57 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = event57; sourceTree = "<group>"; };
4D30463222F4232600DA86C4 /* event78 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = event78; sourceTree = "<group>"; };
4D39B6F022F829A500625E31 /* InfographyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfographyView.swift; sourceTree = "<group>"; };
4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceWrapper.swift; 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>"; };
4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.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>"; };
4DF7608022A3FB96004B0EF1 /* TournamentStats.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TournamentStats.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -471,6 +479,10 @@
4D97941222F827A5004A2D7F /* reports */,
4DF7608722A3FB96004B0EF1 /* DetailViewController.swift */,
4DF7608522A3FB96004B0EF1 /* MasterViewController.swift */,
4D39B6F222F8549100625E31 /* DataSourceWrapper.swift */,
4D39B6F422F856EF00625E31 /* StackTableCell.xib */,
4D39B6F622F8573900625E31 /* StackTableCell.swift */,
4D39B6F922F85C3400625E31 /* UIView+Extensions.swift */,
);
path = UI;
sourceTree = "<group>";
@ -615,6 +627,7 @@
4D2F1C4C22CC92D1007C639E /* event90 in Resources */,
4DF7611B22A56797004B0EF1 /* event23 in Resources */,
4D2F1C4722CC92D1007C639E /* event69 in Resources */,
4D39B6F522F856EF00625E31 /* StackTableCell.xib in Resources */,
4D2F1C4822CC92D1007C639E /* event66 in Resources */,
4DF7613222A56797004B0EF1 /* event49 in Resources */,
4DF7612F22A56797004B0EF1 /* event63 in Resources */,
@ -734,11 +747,14 @@
4DF7615122A7AECA004B0EF1 /* TournamentRepresentable.swift in Sources */,
4DF7608622A3FB96004B0EF1 /* MasterViewController.swift in Sources */,
4DF7608422A3FB96004B0EF1 /* AppDelegate.swift in Sources */,
4D39B6F322F8549100625E31 /* DataSourceWrapper.swift in Sources */,
4DDEF11422AE4FB900F4D7C1 /* TournamentStats.swift in Sources */,
4DF760A722A3FD12004B0EF1 /* Model.swift in Sources */,
4DF7614F22A6CF93004B0EF1 /* PlayerResult.swift in Sources */,
4D39B6F722F8573900625E31 /* StackTableCell.swift in Sources */,
4DF7614622A59407004B0EF1 /* CumulatedResults.swift in Sources */,
4D0F103922C4C1C4005F797A /* ChipCountParser.swift in Sources */,
4D39B6FA22F85C3400625E31 /* UIView+Extensions.swift in Sources */,
4DF760BF22A560AA004B0EF1 /* FileWriter.swift in Sources */,
4DA5CA1E22AD078A00AC628E /* CountryCounter.swift in Sources */,
4D18861122C36D8F0020C4CD /* TournamentCounter.swift in Sources */,

@ -40,6 +40,22 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele
let d = Date().timeIntervalSince(s)
print("reports created in \(d)s")
let infography = InfographyView(frame: CGRect(x: 0, y: 0, width: 1000, height: 1000), generator: generator)
if let imageData = infography.toImage()?.pngData() {
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
return false
}
do {
try imageData.write(to: directory.appendingPathComponent("infography.png")!)
} catch {
print(error.localizedDescription)
}
}
return true
}

@ -25,94 +25,94 @@ class Seed {
static let tournamentsDescriptions: [TD] = [
TD(date: "31/05/2019", name: "Casino Employees Event", number: 1, buyin: 500, entries: 685, prizePool: 297975),
TD(date: "30/05/2019", name: "Super Turbo Bounty", number: 2, buyin: 10000, entries: 204, prizePool: 1917600),
TD(date: "08/06/2019", name: "BIG 50 No-Limit Hold'em", number: 3, buyin: 500, entries: 28371, prizePool: 13509435),
TD(date: "02/06/2019", name: "Omaha Hi/Lo 8 or Better", number: 4, buyin: 1500, entries: 853, prizePool: 1151550),
TD(date: "03/06/2019", name: "High Roller No-Limit Hold'em for the 50th Annual", number: 5, buyin: 50000, entries: 110, prizePool: 5280000),
TD(date: "03/06/2019", name: "Limit Mixed Triple Draw", number: 6, buyin: 2500, entries: 296, prizePool: 666000),
TD(date: "03/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em", number: 7, buyin: 400, entries: 2825, prizePool: 1017000),
TD(date: "05/06/2019", name: "Short Deck No-Limit Hold'em", number: 8, buyin: 10000, entries: 114, prizePool: 1071600),
TD(date: "06/06/2019", name: "No-Limit Hold'em Deepstack", number: 9, buyin: 600, entries: 6150, prizePool: 3229275),
TD(date: "06/06/2019", name: "Dealers Choice", number: 10, buyin: 150, entries: 470, prizePool: 634500),
TD(date: "07/06/2019", name: "No-Limit Hold'em", number: 11, buyin: 5000, entries: 400, prizePool: 1860000),
TD(date: "06/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 12, buyin: 1000, entries: 2452, prizePool: 1471200),
TD(date: "07/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 13, buyin: 1500, entries: 296, prizePool: 399600),
TD(date: "09/06/2019", name: "HORSE", number: 14, buyin: 1500, entries: 751, prizePool: 1013850),
TD(date: "09/06/2019", name: "Heads-Up No-Limit Hold'em", number: 15, buyin: 10000, entries: 112, prizePool: 1052800),
TD(date: "09/06/2019", name: "No-Limit Hold'em 6-Handed", number: 16, buyin: 1500, entries: 1832, prizePool: 2473200),
TD(date: "09/06/2019", name: "No-Limit Hold'em Shootout", number: 17, buyin: 1500, entries: 917, prizePool: 1237950),
TD(date: "10/06/2019", name: "Omaha Hi-Lo 8 or Better", number: 18, buyin: 10000, entries: 183, prizePool: 1720200),
TD(date: "13/06/2019", name: "Millionaire Maker - No-Limit Hold'em", number: 19, buyin: 1500, entries: 8809, prizePool: 11892150),
TD(date: "11/06/2019", name: "Seven-Card Stud", number: 20, buyin: 1500, entries: 285, prizePool: 384750),
TD(date: "12/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 21, buyin: 10000, entries: 91, prizePool: 855400),
TD(date: "12/06/2019", name: "Double Stack No-Limit Hold'em", number: 22, buyin: 1000, entries: 3253, prizePool: 2927700),
TD(date: "13/06/2019", name: "Eight Game Mix", number: 23, buyin: 1500, entries: 612, prizePool: 826200),
TD(date: "11/06/2019", name: "WSOP.com ONLINE Pot-Limit Omaha 6-Handed", number: 24, buyin: 600, entries: 1216, prizePool: 656640),
TD(date: "13/06/2019", name: "Pot-Limit Omaha Deepstack", number: 25, buyin: 600, entries: 2577, prizePool: 1352925),
TD(date: "16/06/2019", name: "No-Limit Hold'em Marathon", number: 26, buyin: 2620, entries: 1083, prizePool: 2553714),
TD(date: "14/06/2019", name: "Seven-Card Stud Hi/Lo 8 or Better", number: 27, buyin: 1500, entries: 460, prizePool: 621000),
TD(date: "14/06/2019", name: "No-Limit Hold'em", number: 28, buyin: 1000, entries: 2477, prizePool: 2229300),
TD(date: "15/06/2019", name: "HORSE", number: 29, buyin: 10000, entries: 172, prizePool: 1616800),
TD(date: "16/06/2019", name: "Pot-Limit Omaha", number: 30, buyin: 1000, entries: 1526, prizePool: 1374300),
TD(date: "15/06/2019", name: "No-Limit Hold'em 6-Handed", number: 31, buyin: 3000, entries: 754, prizePool: 2035800),
TD(date: "17/06/2019", name: "Seniors No-Limit Hold'em", number: 32, buyin: 1000, entries: 5916 , prizePool: 5324400),
TD(date: "16/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 33, buyin: 1500, entries: 467, prizePool: 630450),
TD(date: "17/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Knockout Bounty", number: 38, buyin: 600, entries: 1224, prizePool: 550800),
TD(date: "18/06/2019", name: "Dealers Choice 6-Handed", number: 35, buyin: 10000, entries: 122, prizePool: 1146800),
TD(date: "18/06/2019", name: "No-Limit Hold'em Shootout", number: 36, buyin: 3000, entries: 313, prizePool: 845100),
TD(date: "19/06/2019", name: "No-Limit Hold'em Deepstack", number: 37, buyin: 800, entries: 2808, prizePool: 1999296),
TD(date: "20/06/2019", name: "Double Stack No-Limit Hold'em", number: 34, buyin: 1000, entries: 6241, prizePool: 5592600),
TD(date: "20/06/2019", name: "Pot-Limit Omaha", number: 40, buyin: 1500, entries: 1216, prizePool: 1641600),
TD(date: "20/06/2019", name: "Seven Card Stud", number: 41, buyin: 10000, entries: 88, prizePool: 827200),
TD(date: "21/06/2019", name: "Super Seniors No-Limit Hold'em", number: 39, buyin: 1000, entries: 2650, prizePool: 2385000),
TD(date: "20/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Turbo Deepstack", number: 46, buyin: 500, entries: 1181, prizePool: 795180),
TD(date: "21/06/2019", name: "Mixed No-Limit Hold'em / Pot-Limit Omaha Deepstack 8-Handed", number: 42, buyin: 600, entries: 2403, prizePool: 1261575),
TD(date: "21/06/2019", name: "Mixed Big Bet", number: 43, buyin: 2500, entries: 218, prizePool: 490500),
TD(date: "22/06/2019", name: "No-Limit Hold'em Bounty", number: 44, buyin: 1500, entries: 1807, prizePool: 2439450),
TD(date: "23/06/2019", name: "Pot-Limit Omaha High Roller", number: 45, buyin: 25000, entries: 278, prizePool: 6602500),
TD(date: "23/06/2019", name: "No-Limit Hold'em", number: 48, buyin: 2500, entries: 996, prizePool: 2241000),
TD(date: "23/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 49, buyin: 10000, entries: 100, prizePool: 940000),
TD(date: "24/06/2019", name: "$1,000/$10,000 Ladies No-Limit Hold'em", number: 47, buyin: 10000, entries: 968, prizePool: 871200),
TD(date: "24/06/2019", name: "Mixed Omaha Hi/Lo 8 or Better, Seven Card Stud Hi/Lo 8 or Better", number: 51, buyin: 2500, entries: 401, prizePool: 902250),
TD(date: "25/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Double Stack", number: 55, buyin: 1000, entries: 1333, prizePool: 1266350),
TD(date: "26/06/2019", name: "Pot-Limit Omaha 8-Handed", number: 52, buyin: 10000, entries: 518, prizePool: 4869200),
TD(date: "26/06/2019", name: "No-Limit Hold'em Deepstack 8-Handed", number: 53, buyin: 800, entries: 3759, prizePool: 2676408),
TD(date: "26/06/2019", name: "Razz", number: 54, buyin: 1500, entries: 363, prizePool: 490050),
TD(date: "26/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 56, buyin: 1500, entries: 1867, prizePool: 2520450),
TD(date: "27/06/2019", name: "Monster Stack No-Limit Hold'em", number: 50, buyin: 1500, entries: 6035, prizePool: 8147250),
TD(date: "27/06/2019", name: "Tag Team No-Limit Hold'em", number: 57, buyin: 1000, entries: 976, prizePool: 878400),
TD(date: "29/06/2019", name: "Poker Players Championship", number: 58, buyin: 50000, entries: 74, prizePool: 3552000),
TD(date: "29/06/2019", name: "No-Limit Hold'em DEEPSTACK CHAMPIONSHIP", number: 59, buyin: 600, entries: 6140, prizePool: 3223500),
TD(date: "29/06/2019", name: "Pot-Limit Omaha Hi/Lo 8 or Better", number: 60, buyin: 1500, entries: 1117, prizePool: 1507950),
TD(date: "30/06/2019", name: "Razz", number: 62, buyin: 10000, entries: 116, prizePool: 1090400),
TD(date: "01/07/2019", name: "COLOSSUS", number: 61, buyin: 400, entries: 13109, prizePool: 4382515),
TD(date: "01/07/2019", name: "Omaha Mix", number: 63, buyin: 1500, entries: 717, prizePool: 967950),
TD(date: "02/07/2019", name: "Pot-Limit Omaha Hi-Lo 8 or Better ", number: 65, buyin: 10000, entries: 193, prizePool: 1814200),
TD(date: "02/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Championship", number: 68, buyin: 1000, entries: 1750, prizePool: 1662500),
TD(date: "03/07/2019", name: "Seven Card Stud Hi-Lo 8 or Better", number: 67, buyin: 10000, entries: 151, prizePool: 1419400),
TD(date: "04/07/2019", name: "Crazy Eights No-Limit Hold'em", number: 64, buyin: 888, entries: 10185, prizePool: 8139852),
TD(date: "04/07/2019", name: "Limit Hold'em", number: 66, buyin: 1500, entries: 541, prizePool: 730350),
TD(date: "04/07/2019", name: "Mini Main Event", number: 69, buyin: 1000, entries: 5521, prizePool: 4968900),
TD(date: "05/07/2019", name: "No-Limit Hold'em 6-Handed", number: 70, buyin: 5000, entries: 815, prizePool: 3789750),
TD(date: "05/07/2019", name: "Limit Hold'em Championship", number: 72, buyin: 10000, entries: 118, prizePool: 1109200),
TD(date: "05/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em High Roller", number: 74, buyin: 3200, entries: 593, prizePool: 1802720),
TD(date: "06/07/2019", name: "SALUTE TO WARRIORS - $500 No-Limit Hold'em", number: 71, buyin: 500, entries: 1723, prizePool: 723660),
TD(date: "08/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em 6-Handed", number: 76, buyin: 800, entries: 1560, prizePool: 1170000),
TD(date: "11/07/2019", name: "Final Fifty No-Limit Hold'em", number: 90, buyin: 50000, entries: 123, prizePool: 5904000),
TD(date: "12/07/2019", name: "Limit Hold'em 6-Handed", number: 77, buyin: 3000, entries: 193, prizePool: 521100),
TD(date: "13/07/2019", name: "Pot-Limit Omaha Bounty", number: 78, buyin: 1500, entries: 1130 , prizePool: 1525500),
TD(date: "13/07/2019", name: "Little One for One Drop", number: 75, buyin: 1111, entries: 6248, prizePool: 5623200),
TD(date: "13/07/2019", name: "No-Limit Hold'em", number: 79, buyin: 3000, entries: 671, prizePool: 1811700),
TD(date: "13/07/2019", name: "50th Annual Bracelet Winners Only No-Limit Hold'em", number: 81, buyin: 1500, entries: 185, prizePool: 277500),
TD(date: "14/07/2019", name: "Mixed No-Limit Hold'em Pot-Limit Omaha", number: 80, buyin: 1500, entries: 1250, prizePool: 1687500),
TD(date: "14/07/2019", name: "No-Limit Hold'em High Roller", number: 83, buyin: 100000, entries: 88, prizePool: 9603000),
TD(date: "15/07/2019", name: "No-Limit Hold'em Double Stack", number: 82, buyin: 1500, entries: 2589, prizePool: 3495150),
TD(date: "15/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Summer Saver", number: 88, buyin: 500, entries: 1859, prizePool: 836550),
TD(date: "16/07/2019", name: "The Closer - No-Limit Hold'em", number: 84, buyin: 1500, entries: 2800, prizePool: 3780000),
TD(date: "16/07/2019", name: "Pot-Limit Omaha 6-Handed", number: 85, buyin: 3000, entries: 835, prizePool: 2254500),
TD(date: "17/07/2019", name: "No-Limit Hold'em 6-Handed", number: 86, buyin: 10000, entries: 272, prizePool: 2556800),
TD(date: "17/07/2019", name: "HORSE", number: 87, buyin: 3000, entries: 301, prizePool: 812700),
TD(date: "17/07/2019", name: "No-Limit Hold'em", number: 89, buyin: 5000, entries: 608, prizePool: 2827200),
TD(date: "17/07/2019", name: "No-Limit Hold'em MAIN EVENT - World Championship", number: 73, buyin: 10000, entries: 8569, prizePool: 80548600),
// TD(date: "08/06/2019", name: "BIG 50 No-Limit Hold'em", number: 3, buyin: 500, entries: 28371, prizePool: 13509435),
// TD(date: "02/06/2019", name: "Omaha Hi/Lo 8 or Better", number: 4, buyin: 1500, entries: 853, prizePool: 1151550),
// TD(date: "03/06/2019", name: "High Roller No-Limit Hold'em for the 50th Annual", number: 5, buyin: 50000, entries: 110, prizePool: 5280000),
// TD(date: "03/06/2019", name: "Limit Mixed Triple Draw", number: 6, buyin: 2500, entries: 296, prizePool: 666000),
// TD(date: "03/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em", number: 7, buyin: 400, entries: 2825, prizePool: 1017000),
// TD(date: "05/06/2019", name: "Short Deck No-Limit Hold'em", number: 8, buyin: 10000, entries: 114, prizePool: 1071600),
// TD(date: "06/06/2019", name: "No-Limit Hold'em Deepstack", number: 9, buyin: 600, entries: 6150, prizePool: 3229275),
// TD(date: "06/06/2019", name: "Dealers Choice", number: 10, buyin: 150, entries: 470, prizePool: 634500),
// TD(date: "07/06/2019", name: "No-Limit Hold'em", number: 11, buyin: 5000, entries: 400, prizePool: 1860000),
// TD(date: "06/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 12, buyin: 1000, entries: 2452, prizePool: 1471200),
// TD(date: "07/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 13, buyin: 1500, entries: 296, prizePool: 399600),
// TD(date: "09/06/2019", name: "HORSE", number: 14, buyin: 1500, entries: 751, prizePool: 1013850),
// TD(date: "09/06/2019", name: "Heads-Up No-Limit Hold'em", number: 15, buyin: 10000, entries: 112, prizePool: 1052800),
// TD(date: "09/06/2019", name: "No-Limit Hold'em 6-Handed", number: 16, buyin: 1500, entries: 1832, prizePool: 2473200),
// TD(date: "09/06/2019", name: "No-Limit Hold'em Shootout", number: 17, buyin: 1500, entries: 917, prizePool: 1237950),
// TD(date: "10/06/2019", name: "Omaha Hi-Lo 8 or Better", number: 18, buyin: 10000, entries: 183, prizePool: 1720200),
// TD(date: "13/06/2019", name: "Millionaire Maker - No-Limit Hold'em", number: 19, buyin: 1500, entries: 8809, prizePool: 11892150),
// TD(date: "11/06/2019", name: "Seven-Card Stud", number: 20, buyin: 1500, entries: 285, prizePool: 384750),
// TD(date: "12/06/2019", name: "No-Limit 2-7 Lowball Draw", number: 21, buyin: 10000, entries: 91, prizePool: 855400),
// TD(date: "12/06/2019", name: "Double Stack No-Limit Hold'em", number: 22, buyin: 1000, entries: 3253, prizePool: 2927700),
// TD(date: "13/06/2019", name: "Eight Game Mix", number: 23, buyin: 1500, entries: 612, prizePool: 826200),
// TD(date: "11/06/2019", name: "WSOP.com ONLINE Pot-Limit Omaha 6-Handed", number: 24, buyin: 600, entries: 1216, prizePool: 656640),
// TD(date: "13/06/2019", name: "Pot-Limit Omaha Deepstack", number: 25, buyin: 600, entries: 2577, prizePool: 1352925),
// TD(date: "16/06/2019", name: "No-Limit Hold'em Marathon", number: 26, buyin: 2620, entries: 1083, prizePool: 2553714),
// TD(date: "14/06/2019", name: "Seven-Card Stud Hi/Lo 8 or Better", number: 27, buyin: 1500, entries: 460, prizePool: 621000),
// TD(date: "14/06/2019", name: "No-Limit Hold'em", number: 28, buyin: 1000, entries: 2477, prizePool: 2229300),
// TD(date: "15/06/2019", name: "HORSE", number: 29, buyin: 10000, entries: 172, prizePool: 1616800),
// TD(date: "16/06/2019", name: "Pot-Limit Omaha", number: 30, buyin: 1000, entries: 1526, prizePool: 1374300),
// TD(date: "15/06/2019", name: "No-Limit Hold'em 6-Handed", number: 31, buyin: 3000, entries: 754, prizePool: 2035800),
// TD(date: "17/06/2019", name: "Seniors No-Limit Hold'em", number: 32, buyin: 1000, entries: 5916 , prizePool: 5324400),
// TD(date: "16/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 33, buyin: 1500, entries: 467, prizePool: 630450),
// TD(date: "17/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Knockout Bounty", number: 38, buyin: 600, entries: 1224, prizePool: 550800),
// TD(date: "18/06/2019", name: "Dealers Choice 6-Handed", number: 35, buyin: 10000, entries: 122, prizePool: 1146800),
// TD(date: "18/06/2019", name: "No-Limit Hold'em Shootout", number: 36, buyin: 3000, entries: 313, prizePool: 845100),
// TD(date: "19/06/2019", name: "No-Limit Hold'em Deepstack", number: 37, buyin: 800, entries: 2808, prizePool: 1999296),
// TD(date: "20/06/2019", name: "Double Stack No-Limit Hold'em", number: 34, buyin: 1000, entries: 6241, prizePool: 5592600),
// TD(date: "20/06/2019", name: "Pot-Limit Omaha", number: 40, buyin: 1500, entries: 1216, prizePool: 1641600),
// TD(date: "20/06/2019", name: "Seven Card Stud", number: 41, buyin: 10000, entries: 88, prizePool: 827200),
// TD(date: "21/06/2019", name: "Super Seniors No-Limit Hold'em", number: 39, buyin: 1000, entries: 2650, prizePool: 2385000),
// TD(date: "20/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Turbo Deepstack", number: 46, buyin: 500, entries: 1181, prizePool: 795180),
// TD(date: "21/06/2019", name: "Mixed No-Limit Hold'em / Pot-Limit Omaha Deepstack 8-Handed", number: 42, buyin: 600, entries: 2403, prizePool: 1261575),
// TD(date: "21/06/2019", name: "Mixed Big Bet", number: 43, buyin: 2500, entries: 218, prizePool: 490500),
// TD(date: "22/06/2019", name: "No-Limit Hold'em Bounty", number: 44, buyin: 1500, entries: 1807, prizePool: 2439450),
// TD(date: "23/06/2019", name: "Pot-Limit Omaha High Roller", number: 45, buyin: 25000, entries: 278, prizePool: 6602500),
// TD(date: "23/06/2019", name: "No-Limit Hold'em", number: 48, buyin: 2500, entries: 996, prizePool: 2241000),
// TD(date: "23/06/2019", name: "Limit 2-7 Lowball Triple Draw", number: 49, buyin: 10000, entries: 100, prizePool: 940000),
// TD(date: "24/06/2019", name: "$1,000/$10,000 Ladies No-Limit Hold'em", number: 47, buyin: 10000, entries: 968, prizePool: 871200),
// TD(date: "24/06/2019", name: "Mixed Omaha Hi/Lo 8 or Better, Seven Card Stud Hi/Lo 8 or Better", number: 51, buyin: 2500, entries: 401, prizePool: 902250),
// TD(date: "25/06/2019", name: "WSOP.com ONLINE No-Limit Hold'em Double Stack", number: 55, buyin: 1000, entries: 1333, prizePool: 1266350),
// TD(date: "26/06/2019", name: "Pot-Limit Omaha 8-Handed", number: 52, buyin: 10000, entries: 518, prizePool: 4869200),
// TD(date: "26/06/2019", name: "No-Limit Hold'em Deepstack 8-Handed", number: 53, buyin: 800, entries: 3759, prizePool: 2676408),
// TD(date: "26/06/2019", name: "Razz", number: 54, buyin: 1500, entries: 363, prizePool: 490050),
// TD(date: "26/06/2019", name: "No-Limit Hold'em Super Turbo Bounty", number: 56, buyin: 1500, entries: 1867, prizePool: 2520450),
// TD(date: "27/06/2019", name: "Monster Stack No-Limit Hold'em", number: 50, buyin: 1500, entries: 6035, prizePool: 8147250),
// TD(date: "27/06/2019", name: "Tag Team No-Limit Hold'em", number: 57, buyin: 1000, entries: 976, prizePool: 878400),
// TD(date: "29/06/2019", name: "Poker Players Championship", number: 58, buyin: 50000, entries: 74, prizePool: 3552000),
// TD(date: "29/06/2019", name: "No-Limit Hold'em DEEPSTACK CHAMPIONSHIP", number: 59, buyin: 600, entries: 6140, prizePool: 3223500),
// TD(date: "29/06/2019", name: "Pot-Limit Omaha Hi/Lo 8 or Better", number: 60, buyin: 1500, entries: 1117, prizePool: 1507950),
// TD(date: "30/06/2019", name: "Razz", number: 62, buyin: 10000, entries: 116, prizePool: 1090400),
// TD(date: "01/07/2019", name: "COLOSSUS", number: 61, buyin: 400, entries: 13109, prizePool: 4382515),
// TD(date: "01/07/2019", name: "Omaha Mix", number: 63, buyin: 1500, entries: 717, prizePool: 967950),
// TD(date: "02/07/2019", name: "Pot-Limit Omaha Hi-Lo 8 or Better ", number: 65, buyin: 10000, entries: 193, prizePool: 1814200),
// TD(date: "02/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Championship", number: 68, buyin: 1000, entries: 1750, prizePool: 1662500),
// TD(date: "03/07/2019", name: "Seven Card Stud Hi-Lo 8 or Better", number: 67, buyin: 10000, entries: 151, prizePool: 1419400),
// TD(date: "04/07/2019", name: "Crazy Eights No-Limit Hold'em", number: 64, buyin: 888, entries: 10185, prizePool: 8139852),
// TD(date: "04/07/2019", name: "Limit Hold'em", number: 66, buyin: 1500, entries: 541, prizePool: 730350),
// TD(date: "04/07/2019", name: "Mini Main Event", number: 69, buyin: 1000, entries: 5521, prizePool: 4968900),
// TD(date: "05/07/2019", name: "No-Limit Hold'em 6-Handed", number: 70, buyin: 5000, entries: 815, prizePool: 3789750),
// TD(date: "05/07/2019", name: "Limit Hold'em Championship", number: 72, buyin: 10000, entries: 118, prizePool: 1109200),
// TD(date: "05/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em High Roller", number: 74, buyin: 3200, entries: 593, prizePool: 1802720),
// TD(date: "06/07/2019", name: "SALUTE TO WARRIORS - $500 No-Limit Hold'em", number: 71, buyin: 500, entries: 1723, prizePool: 723660),
// TD(date: "08/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em 6-Handed", number: 76, buyin: 800, entries: 1560, prizePool: 1170000),
// TD(date: "11/07/2019", name: "Final Fifty No-Limit Hold'em", number: 90, buyin: 50000, entries: 123, prizePool: 5904000),
// TD(date: "12/07/2019", name: "Limit Hold'em 6-Handed", number: 77, buyin: 3000, entries: 193, prizePool: 521100),
// TD(date: "13/07/2019", name: "Pot-Limit Omaha Bounty", number: 78, buyin: 1500, entries: 1130 , prizePool: 1525500),
// TD(date: "13/07/2019", name: "Little One for One Drop", number: 75, buyin: 1111, entries: 6248, prizePool: 5623200),
// TD(date: "13/07/2019", name: "No-Limit Hold'em", number: 79, buyin: 3000, entries: 671, prizePool: 1811700),
// TD(date: "13/07/2019", name: "50th Annual Bracelet Winners Only No-Limit Hold'em", number: 81, buyin: 1500, entries: 185, prizePool: 277500),
// TD(date: "14/07/2019", name: "Mixed No-Limit Hold'em Pot-Limit Omaha", number: 80, buyin: 1500, entries: 1250, prizePool: 1687500),
// TD(date: "14/07/2019", name: "No-Limit Hold'em High Roller", number: 83, buyin: 100000, entries: 88, prizePool: 9603000),
// TD(date: "15/07/2019", name: "No-Limit Hold'em Double Stack", number: 82, buyin: 1500, entries: 2589, prizePool: 3495150),
// TD(date: "15/07/2019", name: "WSOP.com ONLINE No-Limit Hold'em Summer Saver", number: 88, buyin: 500, entries: 1859, prizePool: 836550),
// TD(date: "16/07/2019", name: "The Closer - No-Limit Hold'em", number: 84, buyin: 1500, entries: 2800, prizePool: 3780000),
// TD(date: "16/07/2019", name: "Pot-Limit Omaha 6-Handed", number: 85, buyin: 3000, entries: 835, prizePool: 2254500),
// TD(date: "17/07/2019", name: "No-Limit Hold'em 6-Handed", number: 86, buyin: 10000, entries: 272, prizePool: 2556800),
// TD(date: "17/07/2019", name: "HORSE", number: 87, buyin: 3000, entries: 301, prizePool: 812700),
// TD(date: "17/07/2019", name: "No-Limit Hold'em", number: 89, buyin: 5000, entries: 608, prizePool: 2827200),
// TD(date: "17/07/2019", name: "No-Limit Hold'em MAIN EVENT - World Championship", number: 73, buyin: 10000, entries: 8569, prizePool: 80548600),
]

@ -0,0 +1,63 @@
//
// Array+UITableDataSource.swift
// TournamentStats
//
// Created by Laurent Morvillier on 05/08/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import UIKit
class DataSourceWrapper<T : ColumnRepresentable> : NSObject, UITableViewDataSource, UITableViewDelegate {
var columnRepresentables: [T]
init(array: [T]) {
self.columnRepresentables = array
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("numberOfRowsInSection = \(self.columnRepresentables.count)")
return self.columnRepresentables.count + 1 // + 1 for header
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! StackTableCell
var columns: [String]
var font: UIFont
switch indexPath.row {
case 0:
columns = T.headers()
font = UIFont.boldSystemFont(ofSize: 16.0)
default:
let cr = self.columnRepresentables[indexPath.row - 1]
columns = cr.colums()
font = UIFont.systemFont(ofSize: 16.0)
}
columns.forEach { value in
let label: UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 30))
label.textColor = UIColor.black
label.backgroundColor = UIColor.white
label.text = value
label.font = font
cell.stackView.addArrangedSubview(label)
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 32.0
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
}

@ -35,7 +35,7 @@ class MasterViewController: UITableViewController {
@objc
func generate(_ sender: Any) {
ReportGenerator.go()
// ReportGenerator.go()
}

@ -0,0 +1,21 @@
//
// StackTableCell.swift
// TournamentStats
//
// Created by Laurent Morvillier on 05/08/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import UIKit
class StackTableCell: UITableViewCell {
@IBOutlet weak var stackView: UIStackView!
override func awakeFromNib() {
self.backgroundColor = UIColor.clear
self.stackView.distribution = .fillEqually
}
}

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="aT2-pS-Iqw" customClass="StackTableCell" customModule="TournamentStats" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="aT2-pS-Iqw" id="n6c-N8-BIo">
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zyP-u3-Lbn">
<rect key="frame" x="8" y="0.0" width="398" height="43.5"/>
</stackView>
</subviews>
<constraints>
<constraint firstItem="zyP-u3-Lbn" firstAttribute="leading" secondItem="n6c-N8-BIo" secondAttribute="leading" constant="8" id="36S-42-88h"/>
<constraint firstAttribute="bottom" secondItem="zyP-u3-Lbn" secondAttribute="bottom" id="9Fi-3O-haC"/>
<constraint firstAttribute="trailing" secondItem="zyP-u3-Lbn" secondAttribute="trailing" constant="8" id="Aja-gu-ofx"/>
<constraint firstItem="zyP-u3-Lbn" firstAttribute="top" secondItem="n6c-N8-BIo" secondAttribute="top" id="nko-dF-Ksc"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="stackView" destination="zyP-u3-Lbn" id="Odj-c0-t9N"/>
</connections>
<point key="canvasLocation" x="-57" y="102"/>
</tableViewCell>
</objects>
</document>

@ -0,0 +1,99 @@
//
// UIView+Extensions.swift
// TournamentStats
//
// Created by Laurent Morvillier on 05/08/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import UIKit
extension UIView {
func toImage() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0)
if let context = UIGraphicsGetCurrentContext() {
self.layer.render(in: context)
if let image = UIGraphicsGetImageFromCurrentImageContext() {
UIGraphicsEndImageContext()
return image
}
}
return nil
}
// MARK: - Constraints
@objc public func addMaxConstraints(view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
if #available(iOS 11.0, *) {
view.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor).isActive = true
} else {
view.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}
if #available(iOS 11.0, *) {
view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true
} else {
view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
}
@objc public func addCenterConstraints(view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
view.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
view.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
view.heightAnchor.constraint(equalToConstant: view.frame.size.height).isActive = true
view.widthAnchor.constraint(equalToConstant: view.frame.size.width).isActive = true
}
@objc public func addTopStickyConstraintsWithHeight(_ height: CGFloat, view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
if #available(iOS 11.0, *) {
view.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor).isActive = true
} else {
view.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}
view.heightAnchor.constraint(equalToConstant: height).isActive = true
}
@objc public func addBottomStickyConstraintsWithHeight(_ height: CGFloat, view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
if #available(iOS 11.0, *) {
view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true
} else {
view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
view.heightAnchor.constraint(equalToConstant: height).isActive = true
}
@objc public func addMaxConstraintsToTopView(_ topView: UIView, forView view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
view.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
if #available(iOS 11.0, *) {
view.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true
} else {
view.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
}
}

@ -11,14 +11,38 @@ import UIKit
class InfographyView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
var references: [UITableViewDataSource] = []
init(frame: CGRect, generator: ReportGenerator) {
super.init(frame: frame)
self.backgroundColor = UIColor.white
let table1 = UITableView(frame: CGRect(x: 0, y: 0, width: 500, height: 500), style: .grouped)
table1.register(UINib(nibName: "StackTableCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
table1.backgroundColor = UIColor.clear
let ds = DataSourceWrapper(array: generator.biggestWinners)
table1.dataSource = ds
table1.delegate = ds
self.references.append(ds)
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.backgroundColor = UIColor.clear
let ds2 = DataSourceWrapper(array: generator.winsByCountry)
table2.dataSource = ds2
table2.delegate = ds2
self.references.append(ds2)
let hstack1: UIStackView = UIStackView(arrangedSubviews: [table1, table2])
hstack1.distribution = .fill
hstack1.backgroundColor = UIColor.green
hstack1.axis = .horizontal
let vstack: UIStackView = UIStackView(arrangedSubviews: [hstack1])
hstack1.backgroundColor = UIColor.blue
vstack.axis = .vertical
self.addSubview(vstack)
self.addMaxConstraints(view: vstack)
}

@ -45,21 +45,21 @@ class ReportGenerator {
}
fileprivate var _biggestWinners: [CumulatedResults] = []
fileprivate var _mostWins: [CumulatedResults] = []
fileprivate var _mostCashes: [CumulatedResults] = []
fileprivate var _tournamentWinners: [TournamentWinner] = []
fileprivate var _tourniesByEntries: [TournamentRepresentable] = []
fileprivate var _tourniesByPrizepool: [TournamentRepresentable] = []
fileprivate var _winsByCountry: [CountryCounter] = []
fileprivate var _cashesByCountry: [CountryCounter] = []
fileprivate var _averageEvent: [TournamentStats] = []
fileprivate var _notablesMostCashes: [CumulatedResults] = []
fileprivate var _averageCash: [CumulatedResults] = []
fileprivate var _tournamentBuyinDistribution: [DistributionCounter] = []
fileprivate var _tournamentPrizepoolDistribution: [DistributionCounter] = []
fileprivate var _firstPrizeDistribution: [DistributionCounter] = []
fileprivate var _holdemTournamentsDistribution: [DistributionCounter] = []
var biggestWinners: [CumulatedResults] = []
var mostWins: [CumulatedResults] = []
var mostCashes: [CumulatedResults] = []
var tournamentWinners: [TournamentWinner] = []
var tourniesByEntries: [TournamentRepresentable] = []
var tourniesByPrizepool: [TournamentRepresentable] = []
var winsByCountry: [CountryCounter] = []
var cashesByCountry: [CountryCounter] = []
var averageEvent: [TournamentStats] = []
var notablesMostCashes: [CumulatedResults] = []
var averageCash: [CumulatedResults] = []
var tournamentBuyinDistribution: [DistributionCounter] = []
var tournamentPrizepoolDistribution: [DistributionCounter] = []
var firstPrizeDistribution: [DistributionCounter] = []
var holdemTournamentsDistribution: [DistributionCounter] = []
func create() {
@ -67,21 +67,21 @@ class ReportGenerator {
let realm = try! Realm()
self._biggestWinners = Queries.biggestWinners(realm: realm)
self._mostWins = Queries.mostCashes(realm: realm, sort: .wins)
self._mostCashes = Queries.mostCashes(realm: realm)
self._tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm)
self._tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false)
self._tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false)
self._winsByCountry = Queries.winsByCountry(realm: realm)
self._cashesByCountry = Queries.cashesByCountry(realm: realm)
self._averageEvent = Queries.averageEvent(realm: realm)
self._notablesMostCashes = Queries.mostCashes(realm: realm, notable: true)
self._averageCash = Queries.averageCash(realm: realm)
self._tournamentBuyinDistribution = Queries.tournamentBuyinDistribution(realm: realm)
self._tournamentPrizepoolDistribution = Queries.tournamentPrizepoolDistribution(realm: realm)
self._firstPrizeDistribution = Queries.firstPrizeDistribution(realm: realm)
self._holdemTournamentsDistribution = Queries.holdemTournamentsDistribution(realm: realm)
self.biggestWinners = Queries.biggestWinners(realm: realm)
self.mostWins = Queries.mostCashes(realm: realm, sort: .wins)
self.mostCashes = Queries.mostCashes(realm: realm)
self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm)
self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false)
self.tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false)
self.winsByCountry = Queries.winsByCountry(realm: realm)
self.cashesByCountry = Queries.cashesByCountry(realm: realm)
self.averageEvent = Queries.averageEvent(realm: realm)
self.notablesMostCashes = Queries.mostCashes(realm: realm, notable: true)
self.averageCash = Queries.averageCash(realm: realm)
self.tournamentBuyinDistribution = Queries.tournamentBuyinDistribution(realm: realm)
self.tournamentPrizepoolDistribution = Queries.tournamentPrizepoolDistribution(realm: realm)
self.firstPrizeDistribution = Queries.firstPrizeDistribution(realm: realm)
self.holdemTournamentsDistribution = Queries.holdemTournamentsDistribution(realm: realm)
let tourniesDate = realm.objects(Tournament.self).distinct(by: ["date"])
@ -102,23 +102,23 @@ class ReportGenerator {
}
fileprivate func writeHTML() {
self._biggestWinners.writeHTML(fileName: "reports/earningsLeaderboard.html")
self._mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25)
self._tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil)
self._tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10)
self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil)
self._tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5)
self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil)
self._tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5)
self._winsByCountry.writeHTML(fileName: "reports/countryWins.html")
self._cashesByCountry.writeHTML(fileName: "reports/countryCashes.html")
self._averageEvent.writeHTML(fileName: "reports/averageEvent.html")
self._notablesMostCashes.writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil)
self._averageCash.writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5)
self._tournamentBuyinDistribution.writeHTML(fileName: "reports/buyinDistribution.html")
self._tournamentPrizepoolDistribution.writeHTML(fileName: "reports/prizepoolDistribution.html")
self._firstPrizeDistribution.writeHTML(fileName: "reports/firstPrizeDistribution.html")
self._holdemTournamentsDistribution.writeHTML(fileName: "reports/holdemDistribution.html")
self.biggestWinners.writeHTML(fileName: "reports/earningsLeaderboard.html")
self.mostCashes.writeHTML(fileName: "reports/mostCashes.html", limit: 25)
self.tournamentWinners.writeHTML(fileName: "reports/allWinners.html", limit: nil)
self.tournamentWinners.writeHTML(fileName: "reports/allWinners_top10.html", limit: 10)
self.tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries.html", limit: nil)
self.tourniesByEntries.writeHTML(fileName: "reports/tourniesByEntries_top5.html", limit: 5)
self.tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool.html", limit: nil)
self.tourniesByPrizepool.writeHTML(fileName: "reports/tourniesByPrizepool_top5.html", limit: 5)
self.winsByCountry.writeHTML(fileName: "reports/countryWins.html")
self.cashesByCountry.writeHTML(fileName: "reports/countryCashes.html")
self.averageEvent.writeHTML(fileName: "reports/averageEvent.html")
self.notablesMostCashes.writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil)
self.averageCash.writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5)
self.tournamentBuyinDistribution.writeHTML(fileName: "reports/buyinDistribution.html")
self.tournamentPrizepoolDistribution.writeHTML(fileName: "reports/prizepoolDistribution.html")
self.firstPrizeDistribution.writeHTML(fileName: "reports/firstPrizeDistribution.html")
self.holdemTournamentsDistribution.writeHTML(fileName: "reports/holdemDistribution.html")
}

Loading…
Cancel
Save