An amazing project that generates micro reports from tournament results
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pa-tournament-stats/TournamentStats/report/ReportGenerator.swift

94 lines
3.8 KiB

//
// ReportGenerator.swift
// TournamentStats
//
// Created by Laurent Morvillier on 03/06/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import RealmSwift
import Realm
class ReportGenerator {
static private let winnersDirectoryName: String = "reports/winners"
static func go() {
let realm = try! Realm()
try! realm.write {
realm.deleteAll()
}
Seed.createTournaments()
Importer.start()
ReportGenerator.create()
}
static func createDirectories() {
// Create winners directory if necessary
if let docDirectory = FileUtils.documentsDirectoryPath {
let winnersDirectory = docDirectory.appendingPathComponent(winnersDirectoryName)
var isDir: ObjCBool = true
if !FileManager.default.fileExists(atPath: winnersDirectory.absoluteString, isDirectory: &isDir) {
do {
try FileManager.default.createDirectory(at: winnersDirectory, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error)
}
}
}
}
static func create() {
self.createDirectories()
let realm = try! Realm()
Queries.biggestWinners(realm: realm).writeHTML(fileName: "reports/earningsLeaderboard.html")
Queries.mostCashes(realm: realm).writeHTML(fileName: "reports/mostCashes.html", limit: 25)
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"])
// Individual days
for tourny in tourniesDate {
let date = tourny.date
let fileDate = Formatter.fileDate.string(from: 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)
Queries.winsByCountry(realm: realm).writeHTML(fileName: "reports/countryWins.html")
Queries.cashesByCountry(realm: realm).writeHTML(fileName: "reports/countryCashes.html")
Queries.averageEvent(realm: realm).writeHTML(fileName: "reports/averageEvent.html")
Queries.mostCashes(realm: realm, notable: true).writeHTML(fileName: "reports/notablesMostCashes.html", limit: nil)
Queries.averageCash(realm: realm).writeHTML(fileName: "reports/bestAverageCashes.html", limit: 5)
Queries.tournamentBuyinDistribution(realm: realm).writeHTML(fileName: "reports/buyinDistribution.html")
Queries.tournamentPrizepoolDistribution(realm: realm).writeHTML(fileName: "reports/prizepoolDistribution.html")
Queries.firstPrizeDistribution(realm: realm).writeHTML(fileName: "reports/firstPrizeDistribution.html")
}
}