122 lines
3.9 KiB
Swift
122 lines
3.9 KiB
Swift
import Foundation
|
|
import CoreData
|
|
import DifferenceKit
|
|
|
|
public struct Vehicle: Decodable {
|
|
|
|
public var number: String
|
|
public var currentNumber: String?
|
|
public var brand: VBrand?
|
|
public var model: VModel?
|
|
public var addedDate: TimeInterval
|
|
public var updatedDate: TimeInterval
|
|
public var color: String?
|
|
public var year: Int64?
|
|
public var category: String?
|
|
public var vin1: String?
|
|
public var vin2: String?
|
|
public var sts: String?
|
|
public var pts: String?
|
|
public var isRightWheel: Bool?
|
|
public var isJapanese: Bool?
|
|
public var addedBy: String?
|
|
public var engine: VEngine?
|
|
public var photos: [VPhoto]?
|
|
public var ownershipPeriods: [VOwnershipPeriod]?
|
|
public var events: [VEvent]?
|
|
public var osagoContracts: [VOsago]?
|
|
public var ads: [VAd]?
|
|
public var notes: [VNote]?
|
|
public var debugInfo: DebugInfo?
|
|
|
|
public init(number: String, brandName: String, addedDate: TimeInterval, updatedDate: TimeInterval) {
|
|
self.number = number
|
|
self.currentNumber = number
|
|
self.addedDate = addedDate
|
|
self.updatedDate = updatedDate
|
|
|
|
self.brand = VBrand(name: VName(original: brandName))
|
|
}
|
|
}
|
|
|
|
extension CDVehicle: Dated {
|
|
|
|
public var updatedAt: Date {
|
|
Date(timeIntervalSince1970: updatedDate)
|
|
}
|
|
|
|
public var addedAt: Date {
|
|
Date(timeIntervalSince1970: addedDate)
|
|
}
|
|
}
|
|
|
|
extension CDVehicle: Differentiable {
|
|
|
|
public var differenceIdentifier: String { number! }
|
|
|
|
public func isContentEqual(to source: CDVehicle) -> Bool {
|
|
return number == source.number &&
|
|
addedDate == source.addedDate &&
|
|
updatedDate == source.updatedDate
|
|
}
|
|
}
|
|
|
|
extension CDVehicle {
|
|
|
|
public convenience init(vehicle: Vehicle, context: NSManagedObjectContext) {
|
|
|
|
self.init(context: context)
|
|
self.number = vehicle.number
|
|
self.currentNumber = vehicle.currentNumber
|
|
self.addedDate = vehicle.addedDate/1000
|
|
self.updatedDate = vehicle.updatedDate/1000
|
|
self.color = vehicle.color
|
|
self.brand = CDVBrand(vbrand: vehicle.brand, context: context)
|
|
self.model = CDVModel(model: vehicle.model, context: context)
|
|
self.year = vehicle.year ?? 0
|
|
self.category = category
|
|
self.vin1 = vehicle.vin1
|
|
self.vin2 = vehicle.vin2
|
|
self.sts = vehicle.sts
|
|
self.pts = vehicle.pts
|
|
self.isRightWheel = vehicle.isRightWheel ?? false
|
|
self.isJapanese = vehicle.isJapanese ?? false
|
|
self.addedBy = vehicle.addedBy
|
|
self.synchronized = true
|
|
self.engine = CDVEngine(model: vehicle.engine, context: context)
|
|
|
|
let photos = vehicle.photos?.map { CDVPhoto(model: $0, context: context) } ?? []
|
|
self.photos = NSSet(array: photos)
|
|
|
|
let ownershipPeriods = vehicle.ownershipPeriods?.map { CDVOwnershipPeriod(model: $0, context: context) } ?? []
|
|
self.ownershipPeriods = NSSet(array: ownershipPeriods)
|
|
|
|
let events = vehicle.events?.map { CDVEvent(model: $0, context: context) } ?? []
|
|
self.events = NSSet(array: events)
|
|
|
|
let osagoContracts = vehicle.osagoContracts?.map { CDVOsago(model: $0, context: context) } ?? []
|
|
self.osagoContracts = NSSet(array: osagoContracts)
|
|
|
|
let ads = vehicle.ads?.map { CDVAd(model: $0, context: context) } ?? []
|
|
self.ads = NSSet(array: ads)
|
|
|
|
let notes = vehicle.notes?.map { CDVNote(model: $0, context: context) } ?? []
|
|
self.notes = NSSet(array: notes)
|
|
|
|
self.debugInfo = CDDebugInfo(model: vehicle.debugInfo, context: context)
|
|
}
|
|
|
|
public var unrecognized: Bool {
|
|
return self.brand == nil
|
|
}
|
|
|
|
public var outdated: Bool {
|
|
if let current = self.currentNumber {
|
|
return current != self.number
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
}
|