171 lines
5.6 KiB
Swift
171 lines
5.6 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.synchronized = dto.synchronized
|
|
}
|
|
}
|