AutoCat/AutoCatCore/Models/Realm/Vehicle.swift

172 lines
5.7 KiB
Swift

import Foundation
import RealmSwift
public enum OwnerType: String, CustomStringConvertible {
case legal
case individual
public var description: String {
switch self {
case .legal: return NSLocalizedString("legal", comment: "Owner type")
case .individual: return NSLocalizedString("individual", comment: "Owner type")
}
}
}
public enum SteeringWheelPosition: CustomStringConvertible {
case left
case right
case unknown
public var description: String {
switch self {
case .left: return "Left"
case .right: return "Right"
case .unknown: return "Unknown"
}
}
}
public final class Vehicle: Object, Identifiable {
@Persisted public var brand: VehicleBrand?
@Persisted public var model: VehicleModel?
@Persisted public var color: String?
@Persisted public var year: Int = 0
@Persisted public var category: String?
@Persisted public var engine: VehicleEngine?
@Persisted private var number: String = ""
@Persisted public var currentNumber: String?
@Persisted public var vin1: String?
@Persisted public var vin2: String?
@Persisted public var sts: String?
@Persisted public var pts: String?
@Persisted public var isRightWheel: Bool?
@Persisted public var isJapanese: Bool?
@Persisted public var addedDate: TimeInterval = 0
@Persisted public var updatedDate: TimeInterval = 0
@Persisted public var addedBy: String = ""
@Persisted public var photos: List<VehiclePhoto>
@Persisted public var ownershipPeriods: List<VehicleOwnershipPeriod>
@Persisted public var events: List<VehicleEvent>
@Persisted public var osagoContracts: List<Osago>
@Persisted public var ads: List<VehicleAd>
@Persisted public var notes: List<VehicleNote>
@Persisted public var debugInfo: DebugInfo?
@Persisted public var synchronized: Bool = true
public convenience init(_ number: String) {
self.init()
self.number = number
self.addedDate = Date().timeIntervalSince1970
self.updatedDate = self.addedDate
self.synchronized = false
}
public override static func primaryKey() -> String? {
return "number"
}
public override class func ignoredProperties() -> [String] {
return ["id", "identifier", "differenceIdentifier", "formatter"]
}
}
extension Vehicle: DtoConvertible {
public var shallowDto: VehicleDto {
var vehicle = VehicleDto()
vehicle.number = self.number
vehicle.currentNumber = self.currentNumber
vehicle.addedDate = self.addedDate
vehicle.updatedDate = self.updatedDate
vehicle.brand = self.brand?.dto
vehicle.synchronized = self.synchronized
vehicle.notes = Array(notes.map(\.dto))
vehicle.events = Array(events.map(\.dto).sorted { $0.date > $1.date })
return vehicle
}
public var dto: VehicleDto {
var vehicle = VehicleDto()
vehicle.brand = brand?.dto
vehicle.model = model?.dto
vehicle.color = color
vehicle.year = year
vehicle.category = category
vehicle.engine = engine?.dto
vehicle.number = number
vehicle.currentNumber = currentNumber
vehicle.vin1 = vin1
vehicle.vin2 = vin2
vehicle.sts = sts
vehicle.pts = pts
vehicle.isRightWheel = isRightWheel
vehicle.isJapanese = isJapanese
vehicle.addedDate = addedDate
vehicle.updatedDate = updatedDate
vehicle.addedBy = addedBy
vehicle.photos = photos.map(\.dto)
vehicle.ownershipPeriods = ownershipPeriods.map(\.dto)
vehicle.events = events.map(\.dto)
vehicle.osagoContracts = osagoContracts.map(\.dto)
vehicle.ads = ads.map(\.dto)
vehicle.notes = notes.map(\.dto)
vehicle.debugInfo = debugInfo?.dto
vehicle.synchronized = synchronized
return vehicle
}
public convenience init(dto: VehicleDto) {
self.init(dto.number)
self.brand = VehicleBrand(dto: dto.brand)
self.model = VehicleModel(dto: dto.model)
self.color = dto.color
self.year = dto.year
self.category = dto.category
self.engine = VehicleEngine(dto: dto.engine)
self.number = dto.number
self.currentNumber = dto.currentNumber
self.vin1 = dto.vin1
self.vin2 = dto.vin2
self.sts = dto.sts
self.pts = dto.pts
self.isRightWheel = dto.isRightWheel
self.isJapanese = dto.isJapanese
self.addedDate = dto.addedDate
self.addedBy = dto.addedBy
self.updatedDate = dto.updatedDate
let photos = List<VehiclePhoto>()
photos.append(objectsIn: dto.photos.map(VehiclePhoto.init))
self.photos = photos
let ownerships = List<VehicleOwnershipPeriod>()
ownerships.append(objectsIn: dto.ownershipPeriods.map(VehicleOwnershipPeriod.init))
self.ownershipPeriods = ownerships
let events = List<VehicleEvent>()
events.append(objectsIn: dto.events.map(VehicleEvent.init).sorted { $0.date > $1.date })
self.events = events
let osago = List<Osago>()
osago.append(objectsIn: dto.osagoContracts.map(Osago.init))
self.osagoContracts = osago
let ads = List<VehicleAd>()
ads.append(objectsIn: dto.ads.map(VehicleAd.init))
self.ads = ads
let notes = List<VehicleNote>()
notes.append(objectsIn: dto.notes.map(VehicleNote.init))
self.notes = notes
self.debugInfo = DebugInfo(dto: dto.debugInfo)
self.synchronized = dto.synchronized
}
}