From 1a3308c9aa816810fcfe0f01692476386f6a38a5 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Mon, 14 Oct 2019 15:33:32 +0200 Subject: [PATCH] soll calculation --- cbooking.cpp | 11 ++- cbooking.h | 127 ++++++++++++++++--------------- cdailyworking.cpp | 188 ++++++++++++++++++++++++++++++++++++++++++++++ cdailyworking.h | 65 ++++++++++++++++ cmainwindow.cpp | 35 ++++++--- cmainwindow.h | 2 + workingHours.pro | 2 + 7 files changed, 355 insertions(+), 75 deletions(-) create mode 100644 cdailyworking.cpp create mode 100644 cdailyworking.h diff --git a/cbooking.cpp b/cbooking.cpp index 177ad13..ed1c837 100644 --- a/cbooking.cpp +++ b/cbooking.cpp @@ -190,9 +190,9 @@ QTime cBooking::ist() return(QTime(0, 0, 0).addSecs(istSecs())); } -void cBooking::setSoll() +void cBooking::setSoll(const QTime& time) { - m_soll = QTime(0, 0, 0); + m_soll = time; } QTime cBooking::soll() @@ -364,8 +364,9 @@ int cBooking::totalPause() return(geht1().secsTo(kommt2()) + geht2().secsTo(kommt3()) + geht3().secsTo(kommt4()) + geht4().secsTo(kommt5())); } -bool cBookingList::load() +bool cBookingList::load(cDailyWorkingList* lpDailyWorkingList) { + m_lpDailyWorkingList = lpDailyWorkingList; QSqlQuery query; query.prepare("SELECT datum, " @@ -408,6 +409,10 @@ bool cBookingList::load() lpBooking->setGeht5(query.value("geht5").toTime()); lpBooking->setCode(query.value("code").toString()); lpBooking->setInformation(query.value("information").toString()); + + cDailyWorking* lpDailyWorking = m_lpDailyWorkingList->get(lpBooking->date()); + if(lpDailyWorking) + lpBooking->setSoll(lpDailyWorking->soll(lpBooking->date().dayOfWeek())); } } diff --git a/cbooking.h b/cbooking.h index cb3486c..7ca190d 100644 --- a/cbooking.h +++ b/cbooking.h @@ -2,6 +2,8 @@ #define CBOOKING_H +#include "cdailyworking.h" + #include #include #include @@ -16,88 +18,88 @@ class cBooking : public QObject Q_OBJECT public: - explicit cBooking(const QDate& date, QObject* parent = nullptr); + explicit cBooking(const QDate& date, QObject* parent = nullptr); - QDate date(); + QDate date(); - void setKommt1(const QTime& time); - QTime kommt1(); + void setKommt1(const QTime& time); + QTime kommt1(); - void setGeht1(const QTime& time); - QTime geht1(); + void setGeht1(const QTime& time); + QTime geht1(); - void setKommt2(const QTime& time); - QTime kommt2(); + void setKommt2(const QTime& time); + QTime kommt2(); - void setGeht2(const QTime& time); - QTime geht2(); + void setGeht2(const QTime& time); + QTime geht2(); - void setKommt3(const QTime& time); - QTime kommt3(); + void setKommt3(const QTime& time); + QTime kommt3(); - void setGeht3(const QTime& time); - QTime geht3(); + void setGeht3(const QTime& time); + QTime geht3(); - void setKommt4(const QTime& time); - QTime kommt4(); + void setKommt4(const QTime& time); + QTime kommt4(); - void setGeht4(const QTime& time); - QTime geht4(); + void setGeht4(const QTime& time); + QTime geht4(); - void setKommt5(const QTime& time); - QTime kommt5(); + void setKommt5(const QTime& time); + QTime kommt5(); - void setGeht5(const QTime& time); - QTime geht5(); + void setGeht5(const QTime& time); + QTime geht5(); - void setCode(const QString& code); - QString code(); + void setCode(const QString& code); + QString code(); - void setInformation(const QString& information); - QString information(); + void setInformation(const QString& information); + QString information(); - qint32 pauseSecs(); - QTime pause(); + qint32 pauseSecs(); + QTime pause(); - qint32 istSecs(); - QTime ist(); + qint32 istSecs(); + QTime ist(); - void setSoll(); - QTime soll(); + void setSoll(const QTime& time); + QTime soll(); - qint32 diff(); - QString diffString(); + qint32 diff(); + QString diffString(); - void setPrevDiff(qint32 diff); - qint32 prevDiff(); + void setPrevDiff(qint32 diff); + qint32 prevDiff(); - qint32 currentDiff(); - QString currentDiffString(); + qint32 currentDiff(); + QString currentDiffString(); - qreal hoursDecimal(); + qreal hoursDecimal(); - bool save(); + bool save(); private: - QDate m_date; - QTime m_kommt1; - QTime m_geht1; - QTime m_kommt2; - QTime m_geht2; - QTime m_kommt3; - QTime m_geht3; - QTime m_kommt4; - QTime m_geht4; - QTime m_kommt5; - QTime m_geht5; - QString m_code; - QString m_information; - QTime m_soll; - qint32 m_prevDiff; + QDate m_date; + QTime m_kommt1; + QTime m_geht1; + QTime m_kommt2; + QTime m_geht2; + QTime m_kommt3; + QTime m_geht3; + QTime m_kommt4; + QTime m_geht4; + QTime m_kommt5; + QTime m_geht5; + QString m_code; + QString m_information; + QTime m_soll; + qint32 m_prevDiff; - void bind(QSqlQuery& query, const QString& variable, const QTime& time); + void bind(QSqlQuery& query, const QString& variable, const QTime& time); - int totalWork(); - int totalPause(); + int totalWork(); + int totalPause(); }; Q_DECLARE_METATYPE(cBooking*) @@ -105,9 +107,12 @@ Q_DECLARE_METATYPE(cBooking*) class cBookingList : public QList { public: - bool load(); - cBooking* add(const QDate& date); - cBooking* find(const QDate& date); + bool load(cDailyWorkingList* m_dailyWorkingList); + cBooking* add(const QDate& date); + cBooking* find(const QDate& date); + +private: + cDailyWorkingList* m_lpDailyWorkingList; }; #endif // CBOOKING_H diff --git a/cdailyworking.cpp b/cdailyworking.cpp new file mode 100644 index 0000000..61a5392 --- /dev/null +++ b/cdailyworking.cpp @@ -0,0 +1,188 @@ +#include "cdailyworking.h" + +#include +#include + +#include + + +cDailyWorking::cDailyWorking(const QDate& date, QObject *parent) : + QObject(parent), + m_date(date), + m_montag(QTime(7, 42, 0)), + m_dienstag(QTime(7, 42, 0)), + m_mittwoch(QTime(7, 42, 0)), + m_donnerstag(QTime(7, 42, 0)), + m_freitag(QTime(7, 42, 0)), + m_samstag(QTime(0, 0, 0)), + m_sonntag(QTime(0, 0, 0)) +{ +} + +QDate cDailyWorking::date() +{ + return(m_date); +} + +void cDailyWorking::setMontag(const QTime& time) +{ + m_montag = time; +} + +QTime cDailyWorking::montag() +{ + return(m_montag); +} + +void cDailyWorking::setDienstag(const QTime& time) +{ + m_dienstag = time; +} + +QTime cDailyWorking::dienstag() +{ + return(m_dienstag); +} + +void cDailyWorking::setMittwoch(const QTime& time) +{ + m_mittwoch = time; +} + +QTime cDailyWorking::mittwoch() +{ + return(m_mittwoch); +} + +void cDailyWorking::setDonnerstag(const QTime& time) +{ + m_donnerstag = time; +} + +QTime cDailyWorking::donnerstag() +{ + return(m_donnerstag); +} + +void cDailyWorking::setFreitag(const QTime& time) +{ + m_freitag = time; +} + +QTime cDailyWorking::freitag() +{ + return(m_freitag); +} + +void cDailyWorking::setSamstag(const QTime& time) +{ + m_samstag = time; +} + +QTime cDailyWorking::samstag() +{ + return(m_samstag); +} + +void cDailyWorking::setSonntag(const QTime& time) +{ + m_sonntag = time; +} + +QTime cDailyWorking::sonntag() +{ + return(m_sonntag); +} + +QTime cDailyWorking::soll(qint16 day) +{ + switch(day) + { + case 1: + return(montag()); + case 2: + return(dienstag()); + case 3: + return(mittwoch()); + case 4: + return(donnerstag()); + case 5: + return(freitag()); + case 6: + return(samstag()); + case 7: + return(sonntag()); + default: + return(QTime(0, 0, 0)); + } +} + +bool cDailyWorkingList::load() +{ + QSqlQuery query; + + query.prepare("SELECT datum, " + " montag," + " dienstag, " + " mittwoch, " + " donnerstag, " + " freitag, " + " samstag, " + " sonntag " + "FROM dailyWorking " + "ORDER BY datum;"); + + if(!query.exec()) + { + qDebug() << "SELECT FROM dailyWorking: " << query.lastError().text(); + return(false); + } + + while(query.next()) + { + cDailyWorking* lpWorking = add(query.value("datum").toDate()); + + if(lpWorking) + { + lpWorking->setMontag(query.value("montag").toTime()); + lpWorking->setDienstag(query.value("dienstag").toTime()); + lpWorking->setMittwoch(query.value("mittwoch").toTime()); + lpWorking->setDonnerstag(query.value("donnerstag").toTime()); + lpWorking->setFreitag(query.value("freitag").toTime()); + lpWorking->setSamstag(query.value("samstag").toTime()); + lpWorking->setSonntag(query.value("sonntag").toTime()); + } + } + + return(true); +} + +cDailyWorking* cDailyWorkingList::add(const QDate& date) +{ + if(find(date)) + return(nullptr); + + cDailyWorking* lpWorking = new cDailyWorking(date); + append(lpWorking); + return(lpWorking); +} + +cDailyWorking* cDailyWorkingList::find(const QDate& date) +{ + for(cDailyWorkingList::iterator i = begin();i != end(); i++) + { + if((*i)->date() == date) + return(*i); + } + return(nullptr); +} + +cDailyWorking* cDailyWorkingList::get(const QDate& date) +{ + for(cDailyWorkingList::iterator i = begin();i != end(); i++) + { + if((*i)->date() <= date) + return(*i); + } + return(nullptr); +} diff --git a/cdailyworking.h b/cdailyworking.h new file mode 100644 index 0000000..f77a199 --- /dev/null +++ b/cdailyworking.h @@ -0,0 +1,65 @@ +#ifndef CDAILYWORKING_H +#define CDAILYWORKING_H + + +#include +#include +#include +#include +#include + + +class cDailyWorking : public QObject +{ + Q_OBJECT +public: + explicit cDailyWorking(const QDate& date, QObject *parent = nullptr); + + QDate date(); + + void setMontag(const QTime& time); + QTime montag(); + + void setDienstag(const QTime& time); + QTime dienstag(); + + void setMittwoch(const QTime& time); + QTime mittwoch(); + + void setDonnerstag(const QTime& time); + QTime donnerstag(); + + void setFreitag(const QTime& time); + QTime freitag(); + + void setSamstag(const QTime& time); + QTime samstag(); + + void setSonntag(const QTime& time); + QTime sonntag(); + + QTime soll(qint16 day); + +private: + QDate m_date; + QTime m_montag; + QTime m_dienstag; + QTime m_mittwoch; + QTime m_donnerstag; + QTime m_freitag; + QTime m_samstag; + QTime m_sonntag; +}; + +Q_DECLARE_METATYPE(cDailyWorking*) + +class cDailyWorkingList : public QList +{ +public: + bool load(); + cDailyWorking* add(const QDate& date); + cDailyWorking* find(const QDate& date); + cDailyWorking* get(const QDate& date); +}; + +#endif // CDAILYWORKING_H diff --git a/cmainwindow.cpp b/cmainwindow.cpp index d35eb87..a761723 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -19,7 +19,8 @@ cMainWindow::cMainWindow(QWidget *parent) : m_lpMonthlyView(nullptr) { openDB(); - m_bookingList.load(); + m_dailyWorkingList.load(); + m_bookingList.load(&m_dailyWorkingList); initUI(); @@ -93,22 +94,34 @@ void cMainWindow::openDB() } qDebug() << "Database opened"; + QSqlQuery query; -// if(!m_db.tables().contains("config")) -// { -// QSqlQuery query; - -// query.prepare("CREATE TABLE config " -// " ") -// } + if(!m_db.tables().contains("dailyWorking")) + { + query.prepare("CREATE TABLE dailyWorking " + "( " + " ab DATE PRIMARY KEY UNIQUE, " + " montag TIME, " + " dienstag TIME, " + " mittwoch TIME, " + " donnerstag TIME, " + " freitag TIME, " + " samstag TIME, " + " sonntag TIME " + ");"); + if(!query.exec()) + { + qDebug() << "CREATE TABLE dailyWorking: " << query.lastError().text(); + return; + } + qDebug() << "CREATE TABLE dailyWorking"; + } if(!m_db.tables().contains("booking")) { - QSqlQuery query; - query.prepare("CREATE TABLE booking " "( " - " datum DATE PRIMARY KEY UNIQE, " + " datum DATE PRIMARY KEY UNIQUE, " " kommt1 TIME, " " geht1 TIME, " " kommt2 TIME, " diff --git a/cmainwindow.h b/cmainwindow.h index d801ce6..9b8560b 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -3,6 +3,7 @@ #include "cmonthlyview.h" +#include "cdailyworking.h" #include "cbooking.h" #include @@ -27,6 +28,7 @@ private: Ui::cMainWindow* ui; cMonthlyView* m_lpMonthlyView; QSqlDatabase m_db; + cDailyWorkingList m_dailyWorkingList; cBookingList m_bookingList; void initUI(); diff --git a/workingHours.pro b/workingHours.pro index 6e3d3eb..93a061c 100644 --- a/workingHours.pro +++ b/workingHours.pro @@ -26,6 +26,7 @@ CONFIG += c++11 SOURCES += \ cbooking.cpp \ + cdailyworking.cpp \ cmonthlyitemdelegate.cpp \ cmonthlyview.cpp \ cpublicholiday.cpp \ @@ -34,6 +35,7 @@ SOURCES += \ HEADERS += \ cbooking.h \ + cdailyworking.h \ cmainwindow.h \ cmonthlyitemdelegate.h \ cmonthlyview.h \