Compare commits

...

1 Commits

Author SHA1 Message Date
2fbe00d97c Løste bug #26 implementerte datostempler #23 2021-10-06 15:22:28 +02:00
14 changed files with 45 additions and 16 deletions

View File

@ -4,7 +4,7 @@ DataHandler::DataHandler(QObject *parent) : QObject(parent) {
errorState = false; 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); QFile fil(filSti);
if (!fil.open(QIODevice::WriteOnly)) { if (!fil.open(QIODevice::WriteOnly)) {
errorState = true; errorState = true;
@ -20,13 +20,14 @@ bool DataHandler::lagreFil(QString filSti, KundeKartotek &kartotek, ProsjektKart
ut << kartotek; ut << kartotek;
ut << pKartotek; ut << pKartotek;
ut << bindinger; ut << bindinger;
ut << bindingerDatoStempler;
fil.flush(); fil.flush();
fil.close(); fil.close();
return true; 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); QFile fil(filSti);
if (!fil.open(QIODevice::ReadOnly)) { if (!fil.open(QIODevice::ReadOnly)) {
errorState = true; errorState = true;
@ -47,9 +48,9 @@ bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKarto
errorState = true; errorState = true;
errorCode = ErrorCodes::UGYLDIG_FIL; errorCode = ErrorCodes::UGYLDIG_FIL;
return false; return false;
} else if (appVersjon != APP_VERSJON) { }
} else if (dbVersjon != DB_VERSJON) { if (dbVersjon != DB_VERSJON) {
errorState = true; errorState = true;
errorCode = ErrorCodes::DB_VERSJONSKONFLIKT; errorCode = ErrorCodes::DB_VERSJONSKONFLIKT;
return false; return false;
@ -58,11 +59,18 @@ bool DataHandler::lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKarto
inn >> kartotek; inn >> kartotek;
inn >> pKartotek; inn >> pKartotek;
inn >> bindinger; inn >> bindinger;
inn >> bindingerDatoStempler;
fil.close(); fil.close();
return true; return true;
} }
QString DataHandler::datoStempel() {
QDateTime nu = QDateTime::currentDateTime();
QString tidsFormat = "yyyy-MM-dd HH:mm:ss";
return nu.toString(tidsFormat);
}
bool DataHandler::hasError() { bool DataHandler::hasError() {
return errorState; return errorState;
} }

View File

@ -2,6 +2,7 @@
#define DATAHANDLER_H #define DATAHANDLER_H
#include <QObject> #include <QObject>
#include <QDateTime>
#include "datatypes.h" #include "datatypes.h"
#include "globals.h" #include "globals.h"
@ -13,8 +14,9 @@ class DataHandler : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit DataHandler(QObject *parent = nullptr); explicit DataHandler(QObject *parent = nullptr);
bool lagreFil(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); bool lastFil(QString filSti, KundeKartotek &kartotek, ProsjektKartotek &pKartotek, ProsjektBindinger &bindinger, ProsjektBindingerDatoStempler &bindingerDatoStempler);
static QString datoStempel();
bool hasError(); bool hasError();
ErrorCodes getError(); ErrorCodes getError();

View File

@ -11,6 +11,7 @@ typedef QList<QHash<QString, QVariant>> ProsjektKartotek;
typedef QHash<QString, QVariant> ProsjektFil; typedef QHash<QString, QVariant> ProsjektFil;
typedef QHash<int, QList<int>> ProsjektBindinger; typedef QHash<int, QList<int>> ProsjektBindinger;
typedef QHash<int, QHash<QString, QString>> ProsjektBindingerDatoStempler;
typedef QHash<int, QString> PostNummerTabell; typedef QHash<int, QString> PostNummerTabell;
enum ErrorCodes { enum ErrorCodes {

View File

@ -1,5 +1,5 @@
#include "globals.h" #include "globals.h"
qreal APP_VERSJON = 0.6; qreal APP_VERSJON = 0.7;
qreal DB_VERSJON = 0.1; qreal DB_VERSJON = 0.2;
quint64 APPLIKASJON_STEMPEL = (quint64)0xc4b351957b3bcf8; quint64 APPLIKASJON_STEMPEL = (quint64)0xc4b351957b3bcf8;

View File

@ -44,7 +44,7 @@ void MainWindow::on_actionNy_triggered() {
filSti = QFileDialog::getSaveFileName(this, tr("Opprett ny databasefil"), stdSted, tr("Database fil (*.saeter)")); 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 // invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger, kontroller om vi kan skrive til filen
if (!filSti.isEmpty()) { if (!filSti.isEmpty()) {
if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger)) { if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) {
ErrorCodes error = ioHandler->getError(); ErrorCodes error = ioHandler->getError();
switch (error) { switch (error) {
case ErrorCodes::SKRIVEFEIL: case ErrorCodes::SKRIVEFEIL:
@ -87,7 +87,7 @@ void MainWindow::on_action_pne_triggered() {
if (!filSti.isEmpty()) { if (!filSti.isEmpty()) {
// invokerer lastFil fra DataHandler klassen der alle IO funksjoner ligger // 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(); ErrorCodes error = ioHandler->getError();
switch (error) { switch (error) {
case ErrorCodes::UGYLDIG_FIL: case ErrorCodes::UGYLDIG_FIL:
@ -149,7 +149,7 @@ void MainWindow::on_action_pne_triggered() {
void MainWindow::on_actionLagre_triggered() { void MainWindow::on_actionLagre_triggered() {
// invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger // 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 // Oppdaterer diverse brytere i klassen for å reflektere endringer i programmet
harFil = true; harFil = true;
filLagret = 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)")); 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 // invokerer lagreFil fra DataHandler klassen der alle IO funksjoner ligger, kontroller om vi kan skrive til filen
if (!filSti.isEmpty()) { if (!filSti.isEmpty()) {
if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger)) { if (!ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler)) {
ErrorCodes error = ioHandler->getError(); ErrorCodes error = ioHandler->getError();
switch (error) { switch (error) {
case ErrorCodes::SKRIVEFEIL: case ErrorCodes::SKRIVEFEIL:
@ -338,7 +338,7 @@ void MainWindow::leggFilbaneTilHistorikk(QString filBane) {
void MainWindow::lastDatabaseFil(QString fil) { void MainWindow::lastDatabaseFil(QString fil) {
filSti = fil; filSti = fil;
// invokerer lastFil fra DataHandler klassen der alle IO funksjoner ligger // 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(); ErrorCodes error = ioHandler->getError();
switch (error) { switch (error) {
case ErrorCodes::UGYLDIG_FIL: case ErrorCodes::UGYLDIG_FIL:
@ -466,7 +466,7 @@ void MainWindow::closeEvent(QCloseEvent *event) {
int svar = bekreftBoks.exec(); int svar = bekreftBoks.exec();
switch (svar) { switch (svar) {
case QMessageBox::Save: case QMessageBox::Save:
ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger); ioHandler->lagreFil(filSti, kundeKart, prosjektKart, bindinger, prosjektBindingerStempler);
event->accept(); event->accept();
break; break;
case QMessageBox::Discard: case QMessageBox::Discard:
@ -1003,13 +1003,22 @@ void MainWindow::knyttProsjekt(int kunde, int prosjekt) {
QList<int> kundeListe; QList<int> kundeListe;
QList<int> prosjektBindinger = bindinger.keys(); QList<int> prosjektBindinger = bindinger.keys();
if (!prosjektBindinger.contains(prosjekt)) { if (!prosjektBindinger.contains(prosjekt)) {
QHash<QString, QString> datoStempler;
datoStempler.insert("created_at", DataHandler::datoStempel());
datoStempler.insert("updated_at", DataHandler::datoStempel());
kundeListe.append(kunde); kundeListe.append(kunde);
bindinger.insert(prosjekt, kundeListe); bindinger.insert(prosjekt, kundeListe);
prosjektBindingerStempler.insert(prosjekt, datoStempler);
} else { } else {
kundeListe = bindinger.value(prosjekt); kundeListe = bindinger.value(prosjekt);
QHash<QString, QString> datoStempler = prosjektBindingerStempler.value(prosjekt);
if (!kundeListe.contains(kunde)) { if (!kundeListe.contains(kunde)) {
kundeListe.append(kunde); kundeListe.append(kunde);
datoStempler["updated_at"] = DataHandler::datoStempel();
bindinger[prosjekt] = kundeListe; bindinger[prosjekt] = kundeListe;
prosjektBindingerStempler[prosjekt] = datoStempler;
} }
} }

View File

@ -121,6 +121,7 @@ private:
ProsjektFil prosjektKort; ProsjektFil prosjektKort;
ProsjektKartotek prosjektKart; ProsjektKartotek prosjektKart;
ProsjektBindinger bindinger; ProsjektBindinger bindinger;
ProsjektBindingerDatoStempler prosjektBindingerStempler;
PostNummerTabell postStedTabell; PostNummerTabell postStedTabell;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

View File

@ -50,7 +50,6 @@ void NyKundeDialog::on_pushAvbryt_clicked() {
QDialog::close(); QDialog::close();
} }
void NyKundeDialog::on_pushButton_clicked() { void NyKundeDialog::on_pushButton_clicked() {
KundeFil nyKunde; KundeFil nyKunde;
nyKunde.insert("fornavn", ui->lineFornavn->text()); nyKunde.insert("fornavn", ui->lineFornavn->text());
@ -63,11 +62,12 @@ void NyKundeDialog::on_pushButton_clicked() {
nyKunde.insert("tlf", ui->lineTlf->text().toInt()); nyKunde.insert("tlf", ui->lineTlf->text().toInt());
nyKunde.insert("id", ui->lineKundenummer->text().toInt()); nyKunde.insert("id", ui->lineKundenummer->text().toInt());
nyKunde.insert("active", true); nyKunde.insert("active", true);
nyKunde.insert("created_at", DataHandler::datoStempel());
nyKunde.insert("updated_at", DataHandler::datoStempel());
emit leggTilKunde(nyKunde); emit leggTilKunde(nyKunde);
} }
void NyKundeDialog::on_linePostnr_editingFinished() { void NyKundeDialog::on_linePostnr_editingFinished() {
ui->lineSted->setText(postNummere->value(ui->linePostnr->text().toInt())); ui->lineSted->setText(postNummere->value(ui->linePostnr->text().toInt()));
} }

View File

@ -3,6 +3,7 @@
#include <QDialog> #include <QDialog>
#include <QIntValidator> #include <QIntValidator>
#include "datahandler.h"
#include "datatypes.h" #include "datatypes.h"
namespace Ui { namespace Ui {

View File

@ -69,6 +69,7 @@ void RedigerKundeDialog::on_pushButton_clicked() {
oppdatertFil.insert("epost", ui->lineEpost->text()); oppdatertFil.insert("epost", ui->lineEpost->text());
oppdatertFil.insert("tlf", ui->lineTlf->text().toInt()); oppdatertFil.insert("tlf", ui->lineTlf->text().toInt());
oppdatertFil.insert("active", true); oppdatertFil.insert("active", true);
oppdatertFil.insert("updated_at", DataHandler::datoStempel());
emit oppdaterKundeFil(oppdatertFil); emit oppdaterKundeFil(oppdatertFil);
} }

View File

@ -2,6 +2,7 @@
#define REDIGERKUNDEDIALOG_H #define REDIGERKUNDEDIALOG_H
#include <QDialog> #include <QDialog>
#include "datahandler.h"
#include "datatypes.h" #include "datatypes.h"
namespace Ui { namespace Ui {

View File

@ -69,6 +69,8 @@ void NyttProsjektDialog::on_pushLagre_clicked() {
nyttProsjekt.insert("active", true); nyttProsjekt.insert("active", true);
nyttProsjekt.insert("ferdig", false); nyttProsjekt.insert("ferdig", false);
nyttProsjekt.insert("created_at", DataHandler::datoStempel());
nyttProsjekt.insert("updated_at", DataHandler::datoStempel());
emit leggTilProsjekt(nyttProsjekt); emit leggTilProsjekt(nyttProsjekt);
} }

View File

@ -2,6 +2,7 @@
#define NYTTPROSJEKTDIALOG_H #define NYTTPROSJEKTDIALOG_H
#include <QDialog> #include <QDialog>
#include "datahandler.h"
#include "datatypes.h" #include "datatypes.h"
namespace Ui { namespace Ui {

View File

@ -101,6 +101,7 @@ void RedigerProsjektDialog::on_pushLagre_clicked() {
nyttProsjekt.insert("active", true); nyttProsjekt.insert("active", true);
nyttProsjekt.insert("ferdig", false); nyttProsjekt.insert("ferdig", false);
nyttProsjekt.insert("updated_at", DataHandler::datoStempel());
emit lagreProsjekt(nyttProsjekt); emit lagreProsjekt(nyttProsjekt);
} }

View File

@ -2,6 +2,7 @@
#define REDIGERPROSJEKTDIALOG_H #define REDIGERPROSJEKTDIALOG_H
#include <QDialog> #include <QDialog>
#include "datahandler.h"
#include "datatypes.h" #include "datatypes.h"
namespace Ui { namespace Ui {