Adjusting code for new report type
This commit is contained in:
parent
a0bb646623
commit
cc9a645fdc
@ -728,7 +728,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 49;
|
CURRENT_PROJECT_VERSION = 51;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
@ -750,7 +750,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 49;
|
CURRENT_PROJECT_VERSION = 51;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
|||||||
@ -14,35 +14,35 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>5</integer>
|
<integer>3</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DifferenceKit (Playground) 2.xcscheme</key>
|
<key>DifferenceKit (Playground) 2.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>6</integer>
|
<integer>4</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DifferenceKit (Playground).xcscheme</key>
|
<key>DifferenceKit (Playground).xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>4</integer>
|
<integer>2</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Eureka (Playground) 1.xcscheme</key>
|
<key>Eureka (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>8</integer>
|
<integer>6</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Eureka (Playground) 2.xcscheme</key>
|
<key>Eureka (Playground) 2.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>9</integer>
|
<integer>7</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Eureka (Playground) 3.xcscheme</key>
|
<key>Eureka (Playground) 3.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@ -70,7 +70,7 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>7</integer>
|
<integer>5</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>GettingStarted (Playground) 1.xcscheme</key>
|
<key>GettingStarted (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@ -112,28 +112,28 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>12</integer>
|
<integer>13</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Rx (Playground) 1.xcscheme</key>
|
<key>Rx (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>9</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Rx (Playground) 2.xcscheme</key>
|
<key>Rx (Playground) 2.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>3</integer>
|
<integer>10</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Rx (Playground).xcscheme</key>
|
<key>Rx (Playground).xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>2</integer>
|
<integer>8</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SwiftDate (Playground) 1.xcscheme</key>
|
<key>SwiftDate (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>13</integer>
|
<integer>12</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SwiftDate (Playground) 3.xcscheme</key>
|
<key>SwiftDate (Playground) 3.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@ -175,7 +175,7 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>10</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
|
||||||
let config = Realm.Configuration(
|
let config = Realm.Configuration(
|
||||||
schemaVersion: 22,
|
schemaVersion: 23,
|
||||||
migrationBlock: { migration, oldSchemaVersion in
|
migrationBlock: { migration, oldSchemaVersion in
|
||||||
if oldSchemaVersion <= 3 {
|
if oldSchemaVersion <= 3 {
|
||||||
var numbers: [String] = []
|
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
|
Realm.Configuration.defaultConfiguration = config
|
||||||
|
|||||||
@ -241,7 +241,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
return Single.just(event)
|
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)
|
return Single<VehicleEvent>.just(event)
|
||||||
} else {
|
} else {
|
||||||
return LocationManager.requestCurrentLocation()
|
return LocationManager.requestCurrentLocation()
|
||||||
|
|||||||
@ -16,7 +16,8 @@ class OwnersController: FormViewController {
|
|||||||
self.title = "\(self.owners.count) owner(s)"
|
self.title = "\(self.owners.count) owner(s)"
|
||||||
|
|
||||||
for (index, owner) in self.owners.enumerated() {
|
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
|
<<< LabelRow("Owner\(index)") { row in
|
||||||
row.title = "Owner type"
|
row.title = "Owner type"
|
||||||
row.value = owner.ownerType
|
row.value = owner.ownerType
|
||||||
@ -35,6 +36,34 @@ class OwnersController: FormViewController {
|
|||||||
row.value = self.formatter.string(from: date)
|
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))
|
cell?.configure(param: engineSection.description, value: String(engine.powerHp))
|
||||||
break
|
break
|
||||||
case .powerKw:
|
case .powerKw:
|
||||||
cell?.configure(param: engineSection.description, value: String(engine.powerKw))
|
cell?.configure(param: engineSection.description, value: String(engine.powerKw.value ?? 0))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -114,7 +114,7 @@ extension Vehicle {
|
|||||||
y += cellHeight
|
y += cellHeight
|
||||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Power (HP)", value: String(self.engine?.powerHp ?? 0), context: ctx)
|
self.drawCell(y: y, width: w, height: cellHeight, title: "Power (HP)", value: String(self.engine?.powerHp ?? 0), context: ctx)
|
||||||
y += cellHeight
|
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
|
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)
|
"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?
|
@objc dynamic var number: String?
|
||||||
var volume: RealmOptional<Int> = RealmOptional(0)
|
var volume: RealmOptional<Int> = RealmOptional(0)
|
||||||
@objc dynamic var powerHp: Float = 0
|
@objc dynamic var powerHp: Float = 0
|
||||||
@objc dynamic var powerKw: Float = 0
|
var powerKw: RealmOptional<Float> = RealmOptional(0)
|
||||||
@objc dynamic var fuelType: String?
|
@objc dynamic var fuelType: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +64,13 @@ class VehicleOwnershipPeriod: Object, Decodable {
|
|||||||
@objc dynamic var ownerType: String
|
@objc dynamic var ownerType: String
|
||||||
@objc dynamic var from: Int64
|
@objc dynamic var from: Int64
|
||||||
@objc dynamic var to: 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 {
|
class Vehicle: Object, Decodable, Identifiable, Differentiable {
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import RealmSwift
|
import RealmSwift
|
||||||
import DifferenceKit
|
import DifferenceKit
|
||||||
|
import ExceptionCatcher
|
||||||
|
|
||||||
class RealmSectionedDataSource<Item,Cell>: NSObject, UITableViewDataSource where Item: Object & Identifiable & Dated & Differentiable, Cell: UITableViewCell & ConfigurableCell, Cell.Item == Item {
|
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.sections = self.data.groupedByDate()
|
||||||
self.tv.reloadData()
|
self.tv.reloadData()
|
||||||
case .update(_, let deletions, let insertions, let modifications):
|
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 newSections = self.data.groupedByDate()
|
||||||
let changeset = StagedChangeset(source: self.sections, target: newSections, section: 0)
|
let changeset = StagedChangeset(source: self.sections, target: newSections, section: 0)
|
||||||
|
|
||||||
|
do {
|
||||||
|
try ExceptionCatcher.catch {
|
||||||
self.tv.beginUpdates()
|
self.tv.beginUpdates()
|
||||||
self.tv.deleteRows(at: deletions.map(self.indexPath), with: .automatic)
|
self.tv.deleteRows(at: deletions.map(self.indexPath), with: .automatic)
|
||||||
self.sections = self.data.groupedByDate()
|
self.sections = self.data.groupedByDate()
|
||||||
self.tv.insertRows(at: insertions.map(self.indexPath), with: .automatic)
|
self.tv.insertRows(at: insertions.map(self.indexPath), with: .automatic)
|
||||||
self.tv.reloadRows(at: modifications.map(self.indexPath), with: .automatic)
|
self.tv.reloadRows(at: modifications.map(self.indexPath), with: .automatic)
|
||||||
|
|
||||||
print("Changesets count: \(changeset.count)")
|
actions += "\n" + "Changesets count: \(changeset.count)"
|
||||||
if let firstChangeset = changeset.first {
|
if let firstChangeset = changeset.first {
|
||||||
print("Deletions: \(firstChangeset.elementDeleted.map { $0.element })")
|
actions += "\n" + "Deletions: \(firstChangeset.elementDeleted.map { $0.element })"
|
||||||
print("Insertions: \(firstChangeset.elementInserted.map { $0.element })")
|
actions += "\n" + "Insertions: \(firstChangeset.elementInserted.map { $0.element })"
|
||||||
self.tv.deleteSections(IndexSet(firstChangeset.elementDeleted.map { $0.element }), with: .automatic)
|
self.tv.deleteSections(IndexSet(firstChangeset.elementDeleted.map { $0.element }), with: .automatic)
|
||||||
self.tv.insertSections(IndexSet(firstChangeset.elementInserted.map { $0.element }), with: .automatic)
|
self.tv.insertSections(IndexSet(firstChangeset.elementInserted.map { $0.element }), with: .automatic)
|
||||||
}
|
}
|
||||||
self.tv.endUpdates()
|
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)
|
||||||
|
}
|
||||||
case .error(let err):
|
case .error(let err):
|
||||||
print("Realm observer error: \(err)")
|
print("Realm observer error: \(err)")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user