soll calculation

This commit is contained in:
2019-10-14 15:33:32 +02:00
parent 4fb9883ea4
commit 1a3308c9aa
7 changed files with 355 additions and 75 deletions
+8 -3
View File
@@ -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()));
}
}
+66 -61
View File
@@ -2,6 +2,8 @@
#define CBOOKING_H
#include "cdailyworking.h"
#include <QMetaType>
#include <QList>
#include <QObject>
@@ -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<cBooking*>
{
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
+188
View File
@@ -0,0 +1,188 @@
#include "cdailyworking.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
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);
}
+65
View File
@@ -0,0 +1,65 @@
#ifndef CDAILYWORKING_H
#define CDAILYWORKING_H
#include <QMetaType>
#include <QList>
#include <QObject>
#include <QDate>
#include <QTime>
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<cDailyWorking*>
{
public:
bool load();
cDailyWorking* add(const QDate& date);
cDailyWorking* find(const QDate& date);
cDailyWorking* get(const QDate& date);
};
#endif // CDAILYWORKING_H
+24 -11
View File
@@ -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, "
+2
View File
@@ -3,6 +3,7 @@
#include "cmonthlyview.h"
#include "cdailyworking.h"
#include "cbooking.h"
#include <QMainWindow>
@@ -27,6 +28,7 @@ private:
Ui::cMainWindow* ui;
cMonthlyView* m_lpMonthlyView;
QSqlDatabase m_db;
cDailyWorkingList m_dailyWorkingList;
cBookingList m_bookingList;
void initUI();
+2
View File
@@ -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 \