Adjusting code for new report type

This commit is contained in:
Selim Mustafaev 2020-10-25 21:14:16 +03:00
parent a0bb646623
commit cc9a645fdc
9 changed files with 90 additions and 34 deletions

View File

@ -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;

View File

@ -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>

View File

@ -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

View File

@ -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()

View File

@ -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
}
}
}
}

View File

@ -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
}
}

View File

@ -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)

View File

@ -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 {

View File

@ -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)
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)
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)
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)")
}