Adjusting code for new report type
This commit is contained in:
parent
a0bb646623
commit
cc9a645fdc
@ -728,7 +728,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 49;
|
||||
CURRENT_PROJECT_VERSION = 51;
|
||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
@ -750,7 +750,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 49;
|
||||
CURRENT_PROJECT_VERSION = 51;
|
||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
|
||||
@ -14,35 +14,35 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>DifferenceKit (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<key>DifferenceKit (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>8</integer>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>9</integer>
|
||||
<integer>7</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground) 3.xcscheme</key>
|
||||
<dict>
|
||||
@ -70,7 +70,7 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>7</integer>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
<key>GettingStarted (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
@ -112,28 +112,28 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>12</integer>
|
||||
<integer>13</integer>
|
||||
</dict>
|
||||
<key>Rx (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>9</integer>
|
||||
</dict>
|
||||
<key>Rx (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
<integer>10</integer>
|
||||
</dict>
|
||||
<key>Rx (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
<integer>8</integer>
|
||||
</dict>
|
||||
<key>SwiftDate (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
@ -147,7 +147,7 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>13</integer>
|
||||
<integer>12</integer>
|
||||
</dict>
|
||||
<key>SwiftDate (Playground) 3.xcscheme</key>
|
||||
<dict>
|
||||
@ -175,7 +175,7 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>10</integer>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
|
||||
@ -25,7 +25,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
|
||||
let config = Realm.Configuration(
|
||||
schemaVersion: 22,
|
||||
schemaVersion: 23,
|
||||
migrationBlock: { migration, oldSchemaVersion in
|
||||
if oldSchemaVersion <= 3 {
|
||||
var numbers: [String] = []
|
||||
@ -90,6 +90,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if oldSchemaVersion <= 22 {
|
||||
migration.enumerateObjects(ofType: "Vehicle") { old, new in
|
||||
if let oldEnginePower = (old?["engine"] as? MigrationObject)?["powerKw"] as? Int {
|
||||
(new?["engine"] as? MigrationObject)?["powerKw"] = RealmOptional(oldEnginePower)
|
||||
} else {
|
||||
(new?["engine"] as? MigrationObject)?["powerKw"] = RealmOptional(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Realm.Configuration.defaultConfiguration = config
|
||||
|
||||
@ -241,7 +241,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
return Single.just(event)
|
||||
}
|
||||
|
||||
if let event = LocationManager.lastEvent, (Date().timeIntervalSince1970 - event.date) < 10 {
|
||||
if let event = LocationManager.lastEvent, (Date().timeIntervalSince1970 - event.date) < 60 {
|
||||
return Single<VehicleEvent>.just(event)
|
||||
} else {
|
||||
return LocationManager.requestCurrentLocation()
|
||||
|
||||
@ -16,7 +16,8 @@ class OwnersController: FormViewController {
|
||||
self.title = "\(self.owners.count) owner(s)"
|
||||
|
||||
for (index, owner) in self.owners.enumerated() {
|
||||
form +++ Section(header: "", footer: owner.lastOperation)
|
||||
let section = Section(header: "", footer: owner.lastOperation)
|
||||
form +++ section
|
||||
<<< LabelRow("Owner\(index)") { row in
|
||||
row.title = "Owner type"
|
||||
row.value = owner.ownerType
|
||||
@ -35,6 +36,34 @@ class OwnersController: FormViewController {
|
||||
row.value = self.formatter.string(from: date)
|
||||
}
|
||||
}
|
||||
|
||||
if let vehicleRegistrationRegion = owner.region {
|
||||
section <<< LabelRow("VehicleRegion\(index)") { row in
|
||||
row.cell.detailTextLabel?.numberOfLines = 0
|
||||
row.title = "Vehicle region"
|
||||
row.value = vehicleRegistrationRegion
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if let driverLocality = owner.locality {
|
||||
var dRegion = driverLocality
|
||||
if let driverRegion = owner.registrationRegion {
|
||||
dRegion += " (\(driverRegion))"
|
||||
}
|
||||
section <<< LabelRow("DriverRegion\(index)") { row in
|
||||
row.cell.detailTextLabel?.numberOfLines = 0
|
||||
row.title = "Driver region"
|
||||
row.value = dRegion
|
||||
}
|
||||
}
|
||||
|
||||
if let code = owner.code {
|
||||
section <<< LabelRow("Code\(index)") { row in
|
||||
row.title = "ZIP (or OKTMO) code"
|
||||
row.value = code
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -239,7 +239,7 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti
|
||||
cell?.configure(param: engineSection.description, value: String(engine.powerHp))
|
||||
break
|
||||
case .powerKw:
|
||||
cell?.configure(param: engineSection.description, value: String(engine.powerKw))
|
||||
cell?.configure(param: engineSection.description, value: String(engine.powerKw.value ?? 0))
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ extension Vehicle {
|
||||
y += cellHeight
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Power (HP)", value: String(self.engine?.powerHp ?? 0), context: ctx)
|
||||
y += cellHeight
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Power (kw)", value: String(self.engine?.powerKw ?? 0), context: ctx)
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Power (kw)", value: String(self.engine?.powerKw.value ?? 0), context: ctx)
|
||||
y += cellHeight + 32
|
||||
|
||||
"OWNERSHIP PERIODS (\(self.ownershipPeriods.count))".draw(with: CGRect(x: 15, y: y, width: w - 15, height: 24), options: .usesLineFragmentOrigin, attributes: headerAttributes, context: nil)
|
||||
|
||||
@ -20,7 +20,7 @@ class VehicleEngine: Object, Decodable {
|
||||
@objc dynamic var number: String?
|
||||
var volume: RealmOptional<Int> = RealmOptional(0)
|
||||
@objc dynamic var powerHp: Float = 0
|
||||
@objc dynamic var powerKw: Float = 0
|
||||
var powerKw: RealmOptional<Float> = RealmOptional(0)
|
||||
@objc dynamic var fuelType: String?
|
||||
}
|
||||
|
||||
@ -64,6 +64,13 @@ class VehicleOwnershipPeriod: Object, Decodable {
|
||||
@objc dynamic var ownerType: String
|
||||
@objc dynamic var from: Int64
|
||||
@objc dynamic var to: Int64
|
||||
@objc dynamic var region: String?
|
||||
@objc dynamic var registrationRegion: String?
|
||||
@objc dynamic var locality: String?
|
||||
@objc dynamic var code: String?
|
||||
@objc dynamic var street: String?
|
||||
@objc dynamic var building: String?
|
||||
@objc dynamic var inn: String?
|
||||
}
|
||||
|
||||
class Vehicle: Object, Decodable, Identifiable, Differentiable {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import UIKit
|
||||
import RealmSwift
|
||||
import DifferenceKit
|
||||
import ExceptionCatcher
|
||||
|
||||
class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource where Item: Object & Identifiable & Dated & Differentiable, Cell: UITableViewCell & ConfigurableCell, Cell.Item == Item {
|
||||
|
||||
@ -23,24 +24,33 @@ class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource where
|
||||
self.sections = self.data.groupedByDate()
|
||||
self.tv.reloadData()
|
||||
case .update(_, let deletions, let insertions, let modifications):
|
||||
print("Deletions: \(deletions.count), Insertions: \(insertions.count), Modifications: \(modifications.count)")
|
||||
var actions = "Deletions: \(deletions), Insertions: \(insertions), Modifications: \(modifications)"
|
||||
let newSections = self.data.groupedByDate()
|
||||
let changeset = StagedChangeset(source: self.sections, target: newSections, section: 0)
|
||||
|
||||
self.tv.beginUpdates()
|
||||
self.tv.deleteRows(at: deletions.map(self.indexPath), with: .automatic)
|
||||
self.sections = self.data.groupedByDate()
|
||||
self.tv.insertRows(at: insertions.map(self.indexPath), with: .automatic)
|
||||
self.tv.reloadRows(at: modifications.map(self.indexPath), with: .automatic)
|
||||
do {
|
||||
try ExceptionCatcher.catch {
|
||||
self.tv.beginUpdates()
|
||||
self.tv.deleteRows(at: deletions.map(self.indexPath), with: .automatic)
|
||||
self.sections = self.data.groupedByDate()
|
||||
self.tv.insertRows(at: insertions.map(self.indexPath), with: .automatic)
|
||||
self.tv.reloadRows(at: modifications.map(self.indexPath), with: .automatic)
|
||||
|
||||
print("Changesets count: \(changeset.count)")
|
||||
if let firstChangeset = changeset.first {
|
||||
print("Deletions: \(firstChangeset.elementDeleted.map { $0.element })")
|
||||
print("Insertions: \(firstChangeset.elementInserted.map { $0.element })")
|
||||
self.tv.deleteSections(IndexSet(firstChangeset.elementDeleted.map { $0.element }), with: .automatic)
|
||||
self.tv.insertSections(IndexSet(firstChangeset.elementInserted.map { $0.element }), with: .automatic)
|
||||
actions += "\n" + "Changesets count: \(changeset.count)"
|
||||
if let firstChangeset = changeset.first {
|
||||
actions += "\n" + "Deletions: \(firstChangeset.elementDeleted.map { $0.element })"
|
||||
actions += "\n" + "Insertions: \(firstChangeset.elementInserted.map { $0.element })"
|
||||
self.tv.deleteSections(IndexSet(firstChangeset.elementDeleted.map { $0.element }), with: .automatic)
|
||||
self.tv.insertSections(IndexSet(firstChangeset.elementInserted.map { $0.element }), with: .automatic)
|
||||
}
|
||||
self.tv.endUpdates()
|
||||
}
|
||||
} catch {
|
||||
let msg = error.localizedDescription + "\n\n" + actions
|
||||
let alert = UIAlertController(title: "Error", message: msg, preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
||||
self.tv.window?.rootViewController?.present(alert, animated: true)
|
||||
}
|
||||
self.tv.endUpdates()
|
||||
case .error(let err):
|
||||
print("Realm observer error: \(err)")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user