diff --git a/src/contents/ui/main.qml b/src/contents/ui/main.qml index b4624a894f2b2131f87c5b54ebfb4437613c8c94..a6511c4fe9457b1880033b9a48006a066eb91e49 100644 --- a/src/contents/ui/main.qml +++ b/src/contents/ui/main.qml @@ -262,6 +262,7 @@ Kirigami.ApplicationWindow { property var serviceId: Kirigami.PageRouter.data.id Component.onCompleted: { recordModel.changeVehicleFilter(serviceId); + dbAnalytics.checkOilChangeNeededForVehicle(serviceId); } id: serviceRecordPage title: qsTr("Service Records for ") + Kirigami.PageRouter.data.name @@ -286,8 +287,12 @@ Kirigami.ApplicationWindow { type: Kirigami.MessageType.Information id: oilMessage showCloseButton: false - Component.onCompleted: { - //TODO: check if oil change is needed. + text: qsTr("You are due for an oil change!") + Connections { + target: dbAnalytics + onIsOilChangeNeeded: { + oilMessage.visible = changeNeeded; + } } } } diff --git a/src/db/recordanalytics.cpp b/src/db/recordanalytics.cpp index a3302b3d3621888af23ddd4adbbe4dec715a506b..e01544f2d99aeea4ca8bb2028d8c853be769484a 100644 --- a/src/db/recordanalytics.cpp +++ b/src/db/recordanalytics.cpp @@ -28,13 +28,29 @@ RecordAnalytics::RecordAnalytics(QObject* parent, QSqlDatabase db) : _db(db) void RecordAnalytics::checkOilChangeNeededForVehicle(int vehicleId, int milesForChange, int monthsForChange) { QtConcurrent::run([&](){ - QSqlQuery query = _db.exec("SELECT * FROM records WHERE records.servicetype = 0;"); + QSqlQuery query = _db.exec("SELECT * FROM records WHERE records.vehicle = "+QString::number(vehicleId)); int milesRecord = query.record().indexOf("miles"); int dateRecord = query.record().indexOf("servicedate"); + int typeRecord = query.record().indexOf("servicetype"); + QDateTime lastOilDate; + int lastOilMiles = 0; + int lastKnownMiles = 0; while(query.next()) { - //TODO: query.value(milesRecord); + if(query.value(typeRecord).toInt() == 0) { + if(!lastOilDate.isValid() || lastOilDate < QDateTime::fromString(query.value(dateRecord).toString(), Qt::DateFormat::ISODate)) { + lastOilDate = QDateTime::fromString(query.value(dateRecord).toString(), Qt::DateFormat::ISODate); + lastOilMiles = query.value(milesRecord).toInt(); + } + } + if(lastKnownMiles < query.value(milesRecord).toInt()) { + lastKnownMiles = query.value(milesRecord).toInt(); + } + } + if(lastKnownMiles-lastOilMiles > milesForChange || lastOilMiles == 0 || !lastOilDate.isValid() || lastOilDate.daysTo(QDateTime::currentDateTime()) > 30*monthsForChange) { + emit this->isOilChangeNeeded(true); + } else { + emit this->isOilChangeNeeded(false); } - emit this->isOilChangeNeeded(false); }); } diff --git a/src/main.cpp b/src/main.cpp index 74e7d82092288a6d1924a04294dd2806a5d0237c..709e63fd87f96e164cbee415b1ea2cf1457642ec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,6 +32,7 @@ #include "db/sqlvehicle.h" #include "db/sqlservicerecord.h" #include "jsonio.h" +#include "db/recordanalytics.h" Q_DECL_EXPORT int main(int argc, char *argv[]) { @@ -95,12 +96,14 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) vehicles.select(); records.select(); JsonIO converter(&vehicles, &records); + RecordAnalytics analytics(nullptr, db); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty(QStringLiteral("appAboutData"), QVariant::fromValue(aboutData)); engine.rootContext()->setContextProperty(QStringLiteral("vehicleModel"), &vehicles); engine.rootContext()->setContextProperty(QStringLiteral("recordModel"), &records); engine.rootContext()->setContextProperty(QStringLiteral("jsonConverter"), &converter); + engine.rootContext()->setContextProperty(QStringLiteral("dbAnalytics"), &analytics); engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); if (engine.rootObjects().isEmpty()) {