From 2fbe00d97ca87f156f695cbd7cfe2520eafff39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Helge=20Nordg=C3=A5rd?= Date: Wed, 6 Oct 2021 15:22:28 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B8ste=20bug=20#26=20implementerte=20datost?= =?UTF-8?q?empler=20#23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/datahandler.cpp | 16 ++++++++++---- src/core/datahandler.h | 6 ++++-- src/core/datatypes.h | 1 + src/core/globals.cpp | 4 ++-- src/core/mainwindow.cpp | 21 +++++++++++++------ src/core/mainwindow.h | 1 + .../widgetdialogs/kunde/nykundedialog.cpp | 4 ++-- .../widgetdialogs/kunde/nykundedialog.h | 1 + .../kunde/redigerkundedialog.cpp | 1 + .../widgetdialogs/kunde/redigerkundedialog.h | 1 + .../prosjekt/nyttprosjektdialog.cpp | 2 ++ .../prosjekt/nyttprosjektdialog.h | 1 + .../prosjekt/redigerprosjektdialog.cpp | 1 + .../prosjekt/redigerprosjektdialog.h | 1 + 14 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/core/datahandler.cpp b/src/core/datahandler.cpp index 37e5701..b5d8e63 100644 --- a/src/core/datahandler.cpp +++ b/src/core/datahandler.cpp @@ -4,7 +4,7 @@ DataHandler::DataHandler(QObject *parent) : QObject(parent) { errorState = false; } -bool DataHandler::lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger) { +bool DataHandler::lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger, ProsjektBindingerDatoStempler &bindingerDatoStempler) { QFile fil(filSti); if (!fil.open(QIODevice::WriteOnly)) { errorState = true; @@ -20,13 +20,14 @@ bool DataHandler::lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKart ut << kartotek; ut << pKartotek; ut << bindinger; + ut << bindingerDatoStempler; fil.flush(); fil.close(); return true; } -bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger) { +bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger, ProsjektBindingerDatoStempler &bindingerDatoStempler) { QFile fil(filSti); if (!fil.open(QIODevice::ReadOnly)) { errorState = true; @@ -47,9 +48,9 @@ bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKarto errorState = true; errorCode = ErrorCodes::UGYLDIG_FIL; return false; - } else if (appVersjon != APP_VERSJON) { + } - } else if (dbVersjon != DB_VERSJON) { + if (dbVersjon != DB_VERSJON) { errorState = true; errorCode = ErrorCodes::DB_VERSJONSKONFLIKT; return false; @@ -58,11 +59,18 @@ bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKarto inn >> kartotek; inn >> pKartotek; inn >> bindinger; + inn >> bindingerDatoStempler; fil.close(); return true; } +QString DataHandler::datoStempel() { + QDateTime nu = QDateTime::currentDateTime(); + QString tidsFormat = "yyyy-MM-dd HH:mm:ss"; + return nu.toString(tidsFormat); +} + bool DataHandler::hasError() { return errorState; } diff --git a/src/core/datahandler.h b/src/core/datahandler.h index 1ce084d..0825abd 100644 --- a/src/core/datahandler.h +++ b/src/core/datahandler.h @@ -2,6 +2,7 @@ #define DATAHANDLER_H #include +#include #include "datatypes.h" #include "globals.h" @@ -13,8 +14,9 @@ class DataHandler : public QObject Q_OBJECT public: explicit DataHandler(QObject *parent = nullptr); - bool lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger); - bool lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger); + bool lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger, ProsjektBindingerDatoStempler &bindingerDatoStempler); + bool lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger, ProsjektBindingerDatoStempler &bindingerDatoStempler); + static QString datoStempel(); bool hasError(); ErrorCodes getError(); diff --git a/src/core/datatypes.h b/src/core/datatypes.h index af756fe..1cdd6f2 100644 --- a/src/core/datatypes.h +++ b/src/core/datatypes.h @@ -11,6 +11,7 @@ typedef QList> ProsjektKartotek; typedef QHash ProsjektFil; typedef QHash> ProsjektBindinger; +typedef QHash> ProsjektBindingerDatoStempler; typedef QHash PostNummerTabell; enum ErrorCodes { diff --git a/src/core/globals.cpp b/src/core/globals.cpp index 0bccf27..d31a6a3 100644 --- a/src/core/globals.cpp +++ b/src/core/globals.cpp @@ -1,5 +1,5 @@ #include "globals.h" -qreal APP_VERSJON = 0.6; -qreal DB_VERSJON = 0.1; +qreal APP_VERSJON = 0.7; +qreal DB_VERSJON = 0.2; quint64 APPLIKASJON_STEMPEL = (quint64)0xc4b351957b3bcf8; diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index f735f92..3be4bcd 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -44,7 +44,7 @@ void MainWindow::on_actionNy_triggered() { filSti = QFileDialog::getSaveFileName(this, tr("Opprett ny databasefil"), stdSted, tr("Database fil (*.saeter)")); // invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger, kontroller om vi kan skrive til filen if (!filSti.isEmpty()) { - if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger)) { + if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) { ErrorCodes error = ioHandler->getError(); switch (error) { case ErrorCodes::SKRIVEFEIL: @@ -87,7 +87,7 @@ void MainWindow::on_action_pne_triggered() { if (!filSti.isEmpty()) { // invokerer lastFil fra DataHandler klassen der alle IO funksjoner ligger - if (!ioHandler->lastFil(filSti, kundeKart, prosjektKart, bindinger)) { + if (!ioHandler->lastFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) { ErrorCodes error = ioHandler->getError(); switch (error) { case ErrorCodes::UGYLDIG_FIL: @@ -149,7 +149,7 @@ void MainWindow::on_action_pne_triggered() { void MainWindow::on_actionLagre_triggered() { // invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger - ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger); + ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler); // Oppdaterer diverse brytere i klassen for å reflektere endringer i programmet harFil = true; filLagret = true; @@ -169,7 +169,7 @@ void MainWindow::on_actionL_agre_som_triggered() { filSti = QFileDialog::getSaveFileName(this, tr("Lagre gjeldende database med nytt navn"), stdSted, tr("Database fil (*.saeter)")); // invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger, kontroller om vi kan skrive til filen if (!filSti.isEmpty()) { - if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger)) { + if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) { ErrorCodes error = ioHandler->getError(); switch (error) { case ErrorCodes::SKRIVEFEIL: @@ -338,7 +338,7 @@ void MainWindow::leggFilbaneTilHistorikk(QString filBane) { void MainWindow::lastDatabaseFil(QString fil) { filSti = fil; // invokerer lastFil fra DataHandler klassen der alle IO funksjoner ligger - if (!ioHandler->lastFil(filSti, kundeKart, prosjektKart, bindinger)) { + if (!ioHandler->lastFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) { ErrorCodes error = ioHandler->getError(); switch (error) { case ErrorCodes::UGYLDIG_FIL: @@ -466,7 +466,7 @@ void MainWindow::closeEvent(QCloseEvent *event) { int svar = bekreftBoks.exec(); switch (svar) { case QMessageBox::Save: - ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger); + ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler); event->accept(); break; case QMessageBox::Discard: @@ -1003,13 +1003,22 @@ void MainWindow::knyttProsjekt(int kunde, int prosjekt) { QList kundeListe; QList prosjektBindinger = bindinger.keys(); if (!prosjektBindinger.contains(prosjekt)) { + QHash datoStempler; + datoStempler.insert("created_at", DataHandler::datoStempel()); + datoStempler.insert("updated_at", DataHandler::datoStempel()); + kundeListe.append(kunde); bindinger.insert(prosjekt, kundeListe); + prosjektBindingerStempler.insert(prosjekt, datoStempler); } else { kundeListe = bindinger.value(prosjekt); + QHash datoStempler = prosjektBindingerStempler.value(prosjekt); if (!kundeListe.contains(kunde)) { kundeListe.append(kunde); + datoStempler["updated_at"] = DataHandler::datoStempel(); + bindinger[prosjekt] = kundeListe; + prosjektBindingerStempler[prosjekt] = datoStempler; } } diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 46cf55e..f336d09 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -121,6 +121,7 @@ private: ProsjektFil prosjektKort; ProsjektKartotek prosjektKart; ProsjektBindinger bindinger; + ProsjektBindingerDatoStempler prosjektBindingerStempler; PostNummerTabell postStedTabell; }; #endif // MAINWINDOW_H diff --git a/src/uidialogs/widgetdialogs/kunde/nykundedialog.cpp b/src/uidialogs/widgetdialogs/kunde/nykundedialog.cpp index 907277a..60d1a5d 100644 --- a/src/uidialogs/widgetdialogs/kunde/nykundedialog.cpp +++ b/src/uidialogs/widgetdialogs/kunde/nykundedialog.cpp @@ -50,7 +50,6 @@ void NyKundeDialog::on_pushAvbryt_clicked() { QDialog::close(); } - void NyKundeDialog::on_pushButton_clicked() { KundeFil nyKunde; nyKunde.insert("fornavn", ui->lineFornavn->text()); @@ -63,11 +62,12 @@ void NyKundeDialog::on_pushButton_clicked() { nyKunde.insert("tlf", ui->lineTlf->text().toInt()); nyKunde.insert("id", ui->lineKundenummer->text().toInt()); nyKunde.insert("active", true); + nyKunde.insert("created_at", DataHandler::datoStempel()); + nyKunde.insert("updated_at", DataHandler::datoStempel()); emit leggTilKunde(nyKunde); } - void NyKundeDialog::on_linePostnr_editingFinished() { ui->lineSted->setText(postNummere->value(ui->linePostnr->text().toInt())); } diff --git a/src/uidialogs/widgetdialogs/kunde/nykundedialog.h b/src/uidialogs/widgetdialogs/kunde/nykundedialog.h index 751cb60..f49c527 100644 --- a/src/uidialogs/widgetdialogs/kunde/nykundedialog.h +++ b/src/uidialogs/widgetdialogs/kunde/nykundedialog.h @@ -3,6 +3,7 @@ #include #include +#include "datahandler.h" #include "datatypes.h" namespace Ui { diff --git a/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.cpp b/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.cpp index 7420655..10863d4 100644 --- a/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.cpp +++ b/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.cpp @@ -69,6 +69,7 @@ void RedigerKundeDialog::on_pushButton_clicked() { oppdatertFil.insert("epost", ui->lineEpost->text()); oppdatertFil.insert("tlf", ui->lineTlf->text().toInt()); oppdatertFil.insert("active", true); + oppdatertFil.insert("updated_at", DataHandler::datoStempel()); emit oppdaterKundeFil(oppdatertFil); } diff --git a/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.h b/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.h index 3d1c227..57d0d9e 100644 --- a/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.h +++ b/src/uidialogs/widgetdialogs/kunde/redigerkundedialog.h @@ -2,6 +2,7 @@ #define REDIGERKUNDEDIALOG_H #include +#include "datahandler.h" #include "datatypes.h" namespace Ui { diff --git a/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.cpp b/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.cpp index b8754c9..94afe2f 100644 --- a/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.cpp +++ b/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.cpp @@ -69,6 +69,8 @@ void NyttProsjektDialog::on_pushLagre_clicked() { nyttProsjekt.insert("active", true); nyttProsjekt.insert("ferdig", false); + nyttProsjekt.insert("created_at", DataHandler::datoStempel()); + nyttProsjekt.insert("updated_at", DataHandler::datoStempel()); emit leggTilProsjekt(nyttProsjekt); } diff --git a/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.h b/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.h index 7e3bc13..183bc5e 100644 --- a/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.h +++ b/src/uidialogs/widgetdialogs/prosjekt/nyttprosjektdialog.h @@ -2,6 +2,7 @@ #define NYTTPROSJEKTDIALOG_H #include +#include "datahandler.h" #include "datatypes.h" namespace Ui { diff --git a/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.cpp b/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.cpp index 28fbc05..87ea438 100644 --- a/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.cpp +++ b/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.cpp @@ -101,6 +101,7 @@ void RedigerProsjektDialog::on_pushLagre_clicked() { nyttProsjekt.insert("active", true); nyttProsjekt.insert("ferdig", false); + nyttProsjekt.insert("updated_at", DataHandler::datoStempel()); emit lagreProsjekt(nyttProsjekt); } diff --git a/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.h b/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.h index 9075d52..ae57666 100644 --- a/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.h +++ b/src/uidialogs/widgetdialogs/prosjekt/redigerprosjektdialog.h @@ -2,6 +2,7 @@ #define REDIGERPROSJEKTDIALOG_H #include +#include "datahandler.h" #include "datatypes.h" namespace Ui {