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.

94 lines
2.5 KiB

//
// Model.swift
// TournamentStats
//
// Created by Laurent Morvillier on 02/06/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import RealmSwift
import Realm
class Festival : Object, Named {
@objc dynamic var name: String = ""
let tournaments = List<Tournament>()
}
class Tournament : Object, Named {
@objc dynamic var date: Date = Date()
@objc dynamic var number: Int = 0
@objc dynamic var buyin: Int = 0
@objc dynamic var name: String = ""
let results = List<Result>()
@objc dynamic var prizepool: Double = 0.0
@objc dynamic var entries: Int = 0
static var defaultColumns: [Columns] = [.rank, .player, .earnings, .poy, .city, .state, .country]
var rows: [Columns] {
switch self.number {
case 1, 10, 32, 39, 47, 55, 53: return [.rank, .player, .earnings, .city, .state, .country]
default: return Tournament.defaultColumns
}
}
}
class Player : Object, Named {
@objc dynamic var name: String = ""
@objc dynamic var city: String?
@objc dynamic var state: String?
@objc dynamic var country: String = ""
@objc dynamic var notable: Bool = false
var formattedName: String {
if let flagoji = Locale.current.flagoji(from: self.country) {
return "\(flagoji) \(self.name)"
} else {
return self.name
}
}
let results = LinkingObjects(fromType: Result.self, property: "player")
}
class Result : Object, CSVRepresentable {
@objc dynamic var rank: Int = 0
@objc dynamic var player: Player?
@objc dynamic var earnings: Double = 0.0
@objc dynamic var poyPoints: Double = 0.0
let tournaments = LinkingObjects(fromType: Tournament.self, property: "results")
static func csvHeaders() -> String {
var strings: [String] = []
strings.append("Name")
strings.append("Earnings")
strings.append("POY Points")
return strings.joined(separator: ",")
}
func csv() -> String {
var strings: [String] = []
if let name = player?.name {
strings.append(name)
}
if let earnings = Formatter.currency.string(from: NSNumber(value: self.earnings)) {
strings.append(earnings)
}
if let poy = Formatter.currency.string(from: NSNumber(value: self.poyPoints)) {
strings.append(poy)
}
return strings.joined(separator: ",")
}
}