added salery and timesheet

This commit is contained in:
Herwig Birke
2020-03-06 13:59:36 +01:00
parent 5678a7e32f
commit 9d7d34079b
6 changed files with 505 additions and 149 deletions
+3 -1
View File
@@ -165,7 +165,9 @@ void cMainWindow::openDB()
query.prepare("CREATE TABLE monthlyBooking "
"( "
" datum DATE PRIMARY KEY UNIQUE, "
" ueberstunden INTEGER "
" ueberstunden INTEGER, "
" salery BLOB, "
" timesheet BLOB "
");");
if(!query.exec())
+36 -4
View File
@@ -27,6 +27,26 @@ qint32 cMonthlyBooking::ueberstunden()
return(m_ueberstunden);
}
void cMonthlyBooking::setSalery(const QByteArray& salery)
{
m_salery = salery;
}
QByteArray cMonthlyBooking::salery()
{
return(m_salery);
}
void cMonthlyBooking::setTimesheet(const QByteArray& timesheet)
{
m_timesheet = timesheet;
}
QByteArray cMonthlyBooking::timesheet()
{
return(m_timesheet);
}
bool cMonthlyBooking::save()
{
QSqlQuery query;
@@ -42,21 +62,29 @@ bool cMonthlyBooking::save()
if(query.next())
query.prepare("UPDATE monthlyBooking "
"SET ueberstunden=:ueberstunden "
"SET ueberstunden=:ueberstunden, "
" salery=:salery, "
" timesheet=:timesheet "
"WHERE datum=:datum;");
else
query.prepare("INSERT INTO monthlyBooking ( "
" datum, "
" ueberstunden "
" ueberstunden, "
" salery, "
" timesheet "
" ) "
"VALUES "
" ( "
" :datum, "
" :ueberstunden "
" :ueberstunden, "
" :salery, "
" :timesheet "
" );");
query.bindValue(":datum", date());
query.bindValue(":ueberstunden", ueberstunden());
query.bindValue(":salery", salery());
query.bindValue(":timesheet", timesheet());
if(!query.exec())
{
@@ -73,7 +101,9 @@ bool cMonthlyBookingList::load()
QSqlQuery query;
query.prepare("SELECT datum, "
" ueberstunden "
" ueberstunden, "
" salery, "
" timesheet "
"FROM monthlyBooking "
"ORDER BY datum;");
@@ -90,6 +120,8 @@ bool cMonthlyBookingList::load()
if(lpBooking)
{
lpBooking->setUeberstunden(query.value("ueberstunden").toInt());
lpBooking->setSalery(query.value("salery").toByteArray());
lpBooking->setTimesheet(query.value("timesheet").toByteArray());
}
}
+9
View File
@@ -7,6 +7,7 @@
#include <QObject>
#include <QDate>
#include <QTime>
#include <QByteArray>
class cMonthlyBooking : public QObject
@@ -21,11 +22,19 @@ public:
void setUeberstunden(qint32 ueberstunden);
qint32 ueberstunden();
void setSalery(const QByteArray& salery);
QByteArray salery();
void setTimesheet(const QByteArray& timesheet);
QByteArray timesheet();
bool save();
private:
QDate m_date;
qint32 m_ueberstunden;
QByteArray m_salery;
QByteArray m_timesheet;
signals:
+204
View File
@@ -3,7 +3,12 @@
#include "common.h"
#include <QFileDialog>
#include <QRegExp>
#include <QSettings>
#include <QMessageBox>
#include <QDesktopServices>
#include <QTemporaryFile>
#include <QDebug>
@@ -58,6 +63,16 @@ cMonthlyView::cMonthlyView(const QDate& date, cMonthlyBookingList* lpMonthlyBook
connect(ui->m_lpMonth, &QDateEdit::dateChanged, this, &cMonthlyView::onDateChanged);
connect(ui->m_lpUeberstunden, &QLineEdit::textChanged, this, &cMonthlyView::onUeberstundenChanged);
connect(ui->m_lpTimesheetView, &QPushButton::clicked, this, &cMonthlyView::onTimesheetView);
connect(ui->m_lpTimesheetDownload, &QPushButton::clicked, this, &cMonthlyView::onTimesheetDownload);
connect(ui->m_lpTimesheetReplace, &QPushButton::clicked, this, &cMonthlyView::onTimesheetReplace);
connect(ui->m_lpTimesheetDelete, &QPushButton::clicked, this, &cMonthlyView::onTimesheetDelete);
connect(ui->m_lpSaleryView, &QPushButton::clicked, this, &cMonthlyView::onSaleryView);
connect(ui->m_lpSaleryDownload, &QPushButton::clicked, this, &cMonthlyView::onSaleryDownload);
connect(ui->m_lpSaleryReplace, &QPushButton::clicked, this, &cMonthlyView::onSaleryReplace);
connect(ui->m_lpSaleryDelete, &QPushButton::clicked, this, &cMonthlyView::onSaleryDelete);
}
void cMonthlyView::setDate(const QDate& date)
@@ -207,6 +222,7 @@ void cMonthlyView::setDate(const QDate& date)
ui->m_lpResturlaubLabel->setText(QString(tr("Resturlaub %1:")).arg(date.addMonths(-1).toString("MMMM yyyy")));
ui->m_lpUeberstunden->setText(secs2String(m_lpMonthlyBooking->ueberstunden(), 3));
updatePDF();
displaySummary();
m_loading = false;
@@ -214,6 +230,9 @@ void cMonthlyView::setDate(const QDate& date)
cMonthlyView::~cMonthlyView()
{
for(int x = 0;x < m_temporaryFileList.count();x++)
QFile::remove(m_temporaryFileList[x]);
delete ui;
}
@@ -334,6 +353,162 @@ void cMonthlyView::onUeberstundenChanged(const QString& string)
displaySummary();
}
void cMonthlyView::onTimesheetView()
{
if(m_lpMonthlyBooking->timesheet().isEmpty())
return;
QTemporaryFile file("XXXXXX.pdf");
file.setAutoRemove(false);
if(!file.open())
return;
file.write(m_lpMonthlyBooking->timesheet());
file.close();
m_temporaryFileList.append(file.fileName());
QDesktopServices::openUrl(QUrl("file:"+file.fileName()));
}
void cMonthlyView::onTimesheetDownload()
{
if(m_lpMonthlyBooking->timesheet().isEmpty())
return;
QSettings settings;
QString path = settings.value("timesheet/lastFolderSave", QVariant::fromValue(QDir::homePath())).toString();
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Timesheet"), path, tr("PDF Files (*.pdf)"));
if(fileName.isEmpty())
return;
QFileInfo fileInfo(fileName);
settings.setValue("timesheet/lastFolderSave", QVariant::fromValue(fileInfo.path()));
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly))
return;
file.write(m_lpMonthlyBooking->timesheet());
file.close();
}
void cMonthlyView::onTimesheetReplace()
{
QSettings settings;
QString path = settings.value("timesheet/lastFolder", QVariant::fromValue(QDir::homePath())).toString();
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Timesheet"), path, tr("PDF Files (*.pdf)"));
if(fileName.isEmpty())
return;
QFileInfo fileInfo(fileName);
settings.setValue("timesheet/lastFolder", QVariant::fromValue(fileInfo.path()));
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
return;
QByteArray data = file.readAll();
file.close();
m_lpMonthlyBooking->setTimesheet(data);
m_lpMonthlyBooking->save();
updatePDF();
}
void cMonthlyView::onTimesheetDelete()
{
if(QMessageBox::question(this, tr("Delete Timesheet"), tr("Are you sure you want to delete the timesheet?")) == QMessageBox::No)
return;
m_lpMonthlyBooking->setTimesheet(QByteArray());
m_lpMonthlyBooking->save();
updatePDF();
}
void cMonthlyView::onSaleryView()
{
if(m_lpMonthlyBooking->salery().isEmpty())
return;
QTemporaryFile file("XXXXXX.pdf");
file.setAutoRemove(false);
if(!file.open())
return;
file.write(m_lpMonthlyBooking->salery());
file.close();
m_temporaryFileList.append(file.fileName());
QDesktopServices::openUrl(QUrl("file:"+file.fileName()));
}
void cMonthlyView::onSaleryDownload()
{
if(m_lpMonthlyBooking->salery().isEmpty())
return;
QSettings settings;
QString path = settings.value("salery/lastFolderSave", QVariant::fromValue(QDir::homePath())).toString();
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Salery"), path, tr("PDF Files (*.pdf)"));
if(fileName.isEmpty())
return;
QFileInfo fileInfo(fileName);
settings.setValue("salery/lastFolderSave", QVariant::fromValue(fileInfo.path()));
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly))
return;
file.write(m_lpMonthlyBooking->salery());
file.close();
}
void cMonthlyView::onSaleryReplace()
{
QSettings settings;
QString path = settings.value("salery/lastFolder", QVariant::fromValue(QDir::homePath())).toString();
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Salery"), path, tr("PDF Files (*.pdf)"));
if(fileName.isEmpty())
return;
QFileInfo fileInfo(fileName);
settings.setValue("salery/lastFolder", QVariant::fromValue(fileInfo.path()));
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
return;
QByteArray data = file.readAll();
file.close();
m_lpMonthlyBooking->setSalery(data);
m_lpMonthlyBooking->save();
updatePDF();
}
void cMonthlyView::onSaleryDelete()
{
if(QMessageBox::question(this, tr("Delete Salery"), tr("Are you sure you want to delete the salery?")) == QMessageBox::No)
return;
m_lpMonthlyBooking->setSalery(QByteArray());
m_lpMonthlyBooking->save();
updatePDF();
}
void cMonthlyView::setBackground(const int day, const QString& code)
{
QBrush brush;
@@ -441,3 +616,32 @@ void cMonthlyView::displaySummary()
ui->m_lpSonderurlaub->setText(QString::number(su));
ui->m_lpTraining->setText(QString::number(t));
}
void cMonthlyView::updatePDF()
{
if(m_lpMonthlyBooking->salery().isEmpty())
{
ui->m_lpSaleryView->setEnabled(false);
ui->m_lpSaleryDownload->setEnabled(false);
ui->m_lpSaleryDelete->setEnabled(false);
}
else
{
ui->m_lpSaleryView->setEnabled(true);
ui->m_lpSaleryDownload->setEnabled(true);
ui->m_lpSaleryDelete->setEnabled(true);
}
if(m_lpMonthlyBooking->timesheet().isEmpty())
{
ui->m_lpTimesheetView->setEnabled(false);
ui->m_lpTimesheetDownload->setEnabled(false);
ui->m_lpTimesheetDelete->setEnabled(false);
}
else
{
ui->m_lpTimesheetView->setEnabled(true);
ui->m_lpTimesheetDownload->setEnabled(true);
ui->m_lpTimesheetDelete->setEnabled(true);
}
}
+10
View File
@@ -40,12 +40,14 @@ private:
QDate m_date;
cMonthlyBooking* m_lpMonthlyBooking;
QRegExpValidator* m_lpValidator;
QStringList m_temporaryFileList;
void setBackground(const int day, const QString& code);
void setText(QStandardItem* lpItem, const QTime& time);
void recalculate(int day, int field);
void displaySummary();
void updatePDF();
private slots:
void onPrevMonth();
@@ -54,6 +56,14 @@ private slots:
void onTextChanged(const int day, const int field, const QString& text);
void onDateChanged(const QDate& date);
void onUeberstundenChanged(const QString& string);
void onTimesheetView();
void onTimesheetDownload();
void onTimesheetReplace();
void onTimesheetDelete();
void onSaleryView();
void onSaleryDownload();
void onSaleryReplace();
void onSaleryDelete();
};
#endif // CMONTHLYVIEW_H
+243 -144
View File
@@ -116,11 +116,68 @@
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout" columnstretch="10,1,1,5,1,1,100">
<item row="3" column="5">
<widget class="QLabel" name="m_lpSonderurlaubLabel">
<layout class="QGridLayout" name="gridLayout" columnstretch="10,1,1,5,1,1,100,0">
<item row="4" column="4">
<widget class="QLineEdit" name="m_lpTraining">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLineEdit" name="m_lpKrank">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="m_lpShouldLabel">
<property name="text">
<string>Sonderurlaub</string>
<string>SOLL:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLabel" name="m_lpKrankLabel">
<property name="text">
<string>Krank</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLineEdit" name="m_lpResturlaub">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="m_lpGleitzeitLabel">
<property name="text">
<string>Gleitzeit</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="m_lpResturlaubLabel">
<property name="text">
<string>Resturlaub:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
@@ -140,16 +197,6 @@
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLineEdit" name="m_lpResturlaub">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QLineEdit" name="m_lpSonderurlaub">
<property name="alignment">
@@ -160,50 +207,17 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="m_lpShouldLabel">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>SOLL:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<string/>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QLineEdit" name="m_lpTraining">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="m_lpUebertragLabel">
<item row="4" column="1">
<widget class="QLabel" name="m_lpUeberstundenLabel">
<property name="text">
<string>Übertrag:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="m_lpShould">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="m_lpUebertragNaechsterMonatLabel">
<property name="text">
<string>Übertrag nächster Monat:</string>
<string>ausbezahlte Überstunden:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -220,20 +234,109 @@
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLineEdit" name="m_lpUebertragNaechsterMonat">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<item row="0" column="7" rowspan="8">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Timesheet</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="m_lpTimesheetView">
<property name="text">
<string>view</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpTimesheetDownload">
<property name="text">
<string>download</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpTimesheetReplace">
<property name="text">
<string>replace</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpTimesheetDelete">
<property name="text">
<string>delete</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Salery</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="m_lpSaleryView">
<property name="text">
<string>view</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpSaleryDownload">
<property name="text">
<string>download</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpSaleryReplace">
<property name="text">
<string>replace</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpSaleryDelete">
<property name="text">
<string>delete</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="4" column="1">
<widget class="QLabel" name="m_lpUeberstundenLabel">
<item row="3" column="1">
<widget class="QLabel" name="m_lpSaldoLabel">
<property name="text">
<string>ausbezahlte Überstunden:</string>
<string>Saldo:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -257,18 +360,8 @@
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="m_lpUebertragUrlaubLabel">
<property name="text">
<string>Übertrag Urlaub:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<item row="0" column="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string/>
</property>
@@ -281,23 +374,6 @@
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="m_lpGleitzeitLabel">
<property name="text">
<string>Gleitzeit</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="m_lpIsLabel">
<property name="text">
<string>IST:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="m_lpUebertrag">
<property name="minimumSize">
@@ -314,39 +390,6 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="m_lpSaldoLabel">
<property name="text">
<string>Saldo:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="6">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="4">
<widget class="QLineEdit" name="m_lpKrank">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="m_lpSaldo">
<property name="alignment">
@@ -357,10 +400,54 @@
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="m_lpResturlaubLabel">
<item row="3" column="5">
<widget class="QLabel" name="m_lpSonderurlaubLabel">
<property name="text">
<string>Resturlaub:</string>
<string>Sonderurlaub</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="m_lpUeberstunden">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLineEdit" name="m_lpUebertragNaechsterMonat">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="m_lpShould">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="m_lpUebertragNaechsterMonatLabel">
<property name="text">
<string>Übertrag nächster Monat:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="m_lpUebertragLabel">
<property name="text">
<string>Übertrag:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -377,27 +464,39 @@
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_3">
<item row="7" column="1">
<widget class="QLabel" name="m_lpUebertragUrlaubLabel">
<property name="text">
<string/>
<string>Übertrag Urlaub:</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLabel" name="m_lpKrankLabel">
<property name="text">
<string>Krank</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="m_lpUeberstunden">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="m_lpIsLabel">
<property name="text">
<string>IST:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="6">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>