diff --git a/plugins/advancedviewplugin/advanvedviewdialog.cpp b/plugins/advancedviewplugin/advancedviewdialog.cpp similarity index 95% rename from plugins/advancedviewplugin/advanvedviewdialog.cpp rename to plugins/advancedviewplugin/advancedviewdialog.cpp index 9a5f2de..cc3680f 100644 --- a/plugins/advancedviewplugin/advanvedviewdialog.cpp +++ b/plugins/advancedviewplugin/advancedviewdialog.cpp @@ -1,5 +1,5 @@ -#include "advanvedviewdialog.h" -#include "ui_advanvedviewdialog.h" +#include "advancedviewdialog.h" +#include "ui_advancedviewdialog.h" #include #include @@ -21,9 +21,9 @@ #include "models/bookingsmodel.h" #include "models/timeassignmentsmodel.h" -AdvanvedViewDialog::AdvanvedViewDialog(StripsWidget &stripsWidget) : +AdvancedViewDialog::AdvancedViewDialog(StripsWidget &stripsWidget) : QDialog(&stripsWidget.mainWindow()), - ui(new Ui::AdvanvedViewDialog), + ui(new Ui::AdvancedViewDialog), m_stripsWidget(stripsWidget), m_bookingsModel(new BookingsModel(stripsWidget, this)), m_timeAssignmentsModel(new TimeAssignmentsModel(stripsWidget, this)) @@ -33,20 +33,20 @@ AdvanvedViewDialog::AdvanvedViewDialog(StripsWidget &stripsWidget) : ui->bookingsView->setModel(m_bookingsModel); ui->bookingsView->setEnabled(m_bookingsModel->enabled()); connect(m_bookingsModel, &BookingsModel::enabledChanged, ui->bookingsView, &QWidget::setEnabled); - connect(ui->bookingsView, &QWidget::customContextMenuRequested, this, &AdvanvedViewDialog::contextMenuBooking); + connect(ui->bookingsView, &QWidget::customContextMenuRequested, this, &AdvancedViewDialog::contextMenuBooking); ui->timeAssignmentsView->setModel(m_timeAssignmentsModel); ui->timeAssignmentsView->setEnabled(m_timeAssignmentsModel->enabled()); connect(m_timeAssignmentsModel, &TimeAssignmentsModel::enabledChanged, ui->timeAssignmentsView, &QWidget::setEnabled); - connect(ui->timeAssignmentsView, &QWidget::customContextMenuRequested, this, &AdvanvedViewDialog::contextMenuTimeAssignment); + connect(ui->timeAssignmentsView, &QWidget::customContextMenuRequested, this, &AdvancedViewDialog::contextMenuTimeAssignment); } -AdvanvedViewDialog::~AdvanvedViewDialog() +AdvancedViewDialog::~AdvancedViewDialog() { delete ui; } -void AdvanvedViewDialog::contextMenuBooking(const QPoint &pos) +void AdvancedViewDialog::contextMenuBooking(const QPoint &pos) { auto index = ui->bookingsView->indexAt(pos); @@ -152,7 +152,7 @@ void AdvanvedViewDialog::contextMenuBooking(const QPoint &pos) } } -void AdvanvedViewDialog::contextMenuTimeAssignment(const QPoint &pos) +void AdvancedViewDialog::contextMenuTimeAssignment(const QPoint &pos) { auto index = ui->timeAssignmentsView->indexAt(pos); diff --git a/plugins/advancedviewplugin/advanvedviewdialog.h b/plugins/advancedviewplugin/advancedviewdialog.h similarity index 55% rename from plugins/advancedviewplugin/advanvedviewdialog.h rename to plugins/advancedviewplugin/advancedviewdialog.h index 4423716..b35068b 100644 --- a/plugins/advancedviewplugin/advanvedviewdialog.h +++ b/plugins/advancedviewplugin/advancedviewdialog.h @@ -1,27 +1,27 @@ -#ifndef ADVANVEDVIEWDIALOG_H -#define ADVANVEDVIEWDIALOG_H +#ifndef ADVANCEDVIEWDIALOG_H +#define ADVANCEDVIEWDIALOG_H #include -namespace Ui { class AdvanvedViewDialog; } +namespace Ui { class AdvancedViewDialog; } class StripsWidget; class BookingsModel; class TimeAssignmentsModel; -class AdvanvedViewDialog : public QDialog +class AdvancedViewDialog : public QDialog { Q_OBJECT public: - explicit AdvanvedViewDialog(StripsWidget &stripsWidget); - ~AdvanvedViewDialog(); + explicit AdvancedViewDialog(StripsWidget &stripsWidget); + ~AdvancedViewDialog(); private Q_SLOTS: void contextMenuBooking(const QPoint &pos); void contextMenuTimeAssignment(const QPoint &pos); private: - Ui::AdvanvedViewDialog *ui; + Ui::AdvancedViewDialog *ui; StripsWidget &m_stripsWidget; @@ -29,4 +29,4 @@ private: TimeAssignmentsModel *m_timeAssignmentsModel; }; -#endif // ADVANVEDVIEWDIALOG_H +#endif // ADVANCEDVIEWDIALOG_H diff --git a/plugins/advancedviewplugin/advanvedviewdialog.ui b/plugins/advancedviewplugin/advancedviewdialog.ui similarity index 91% rename from plugins/advancedviewplugin/advanvedviewdialog.ui rename to plugins/advancedviewplugin/advancedviewdialog.ui index 0ad8f3f..0d87750 100644 --- a/plugins/advancedviewplugin/advanvedviewdialog.ui +++ b/plugins/advancedviewplugin/advancedviewdialog.ui @@ -1,7 +1,7 @@ - AdvanvedViewDialog - + AdvancedViewDialog + 0 @@ -48,7 +48,7 @@ buttonBox accepted() - AdvanvedViewDialog + AdvancedViewDialog accept() @@ -64,7 +64,7 @@ buttonBox rejected() - AdvanvedViewDialog + AdvancedViewDialog reject() diff --git a/plugins/advancedviewplugin/advancedviewplugin.cpp b/plugins/advancedviewplugin/advancedviewplugin.cpp index 12a241a..6ce9d44 100644 --- a/plugins/advancedviewplugin/advancedviewplugin.cpp +++ b/plugins/advancedviewplugin/advancedviewplugin.cpp @@ -11,7 +11,6 @@ AdvancedViewPlugin::AdvancedViewPlugin(QObject *parent) : ZeiterfassungPlugin(parent) { qDebug() << "called"; - Q_INIT_RESOURCE(advancedviewplugin_resources); } void AdvancedViewPlugin::attachTo(MainWindow &mainWindow) diff --git a/plugins/advancedviewplugin/advancedviewplugin.pro b/plugins/advancedviewplugin/advancedviewplugin.pro index a4436d6..3a024ee 100644 --- a/plugins/advancedviewplugin/advancedviewplugin.pro +++ b/plugins/advancedviewplugin/advancedviewplugin.pro @@ -14,7 +14,7 @@ DEPENDPATH += $$PWD/../../zeiterfassunglib DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT -HEADERS += advanvedviewdialog.h \ +HEADERS += advancedviewdialog.h \ advancedviewplugin.h \ advancedviewwidget.h \ dialogs/bookingdialog.h \ @@ -22,7 +22,7 @@ HEADERS += advanvedviewdialog.h \ models/bookingsmodel.h \ models/timeassignmentsmodel.h -SOURCES += advanvedviewdialog.cpp \ +SOURCES += advancedviewdialog.cpp \ advancedviewplugin.cpp \ advancedviewwidget.cpp \ dialogs/bookingdialog.cpp \ @@ -30,7 +30,7 @@ SOURCES += advanvedviewdialog.cpp \ models/bookingsmodel.cpp \ models/timeassignmentsmodel.cpp -FORMS += advanvedviewdialog.ui \ +FORMS += advancedviewdialog.ui \ dialogs/bookingdialog.ui \ dialogs/timeassignmentdialog.ui diff --git a/plugins/advancedviewplugin/advancedviewplugin_resources.qrc b/plugins/advancedviewplugin/advancedviewplugin_resources.qrc index c0cfae7..6b72660 100644 --- a/plugins/advancedviewplugin/advancedviewplugin_resources.qrc +++ b/plugins/advancedviewplugin/advancedviewplugin_resources.qrc @@ -1,5 +1,5 @@ - + images/advanced-view.png diff --git a/plugins/advancedviewplugin/advancedviewwidget.cpp b/plugins/advancedviewplugin/advancedviewwidget.cpp index a48699c..15eb880 100644 --- a/plugins/advancedviewplugin/advancedviewwidget.cpp +++ b/plugins/advancedviewplugin/advancedviewwidget.cpp @@ -3,13 +3,13 @@ #include #include "stripswidget.h" -#include "advanvedviewdialog.h" +#include "advancedviewdialog.h" AdvancedViewWidget::AdvancedViewWidget(StripsWidget &stripsWidget) : QPushButton(&stripsWidget), m_stripsWidget(stripsWidget) { - setIcon(QIcon(QStringLiteral(":/zeiterfassunglib/plugins/advancedviewplugin/images/advanced-view.png"))); + setIcon(QIcon(QStringLiteral(":/zeiterfassung/plugins/advancedviewplugin/images/advanced-view.png"))); connect(&stripsWidget, &StripsWidget::dateChanged, this, &AdvancedViewWidget::dateChanged); dateChanged(stripsWidget.date()); @@ -24,6 +24,6 @@ void AdvancedViewWidget::dateChanged(const QDate &date) void AdvancedViewWidget::pressedSlot() { - AdvanvedViewDialog dialog(m_stripsWidget); + AdvancedViewDialog dialog(m_stripsWidget); dialog.exec(); } diff --git a/plugins/advancedviewplugin/models/bookingsmodel.cpp b/plugins/advancedviewplugin/models/bookingsmodel.cpp index 14ece31..4c59657 100644 --- a/plugins/advancedviewplugin/models/bookingsmodel.cpp +++ b/plugins/advancedviewplugin/models/bookingsmodel.cpp @@ -7,7 +7,7 @@ BookingsModel::BookingsModel(StripsWidget &stripsWidget, QObject *parent) : m_stripsWidget(stripsWidget) { connect(&stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged); - connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, [=](bool refreshing){ enabledChanged(!refreshing); }); + connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &BookingsModel::refreshingChanged); } StripsWidget &BookingsModel::stripsWidget() const @@ -86,3 +86,8 @@ void BookingsModel::bookingsChanged() beginResetModel(); endResetModel(); } + +void BookingsModel::refreshingChanged(bool refreshing) +{ + Q_EMIT enabledChanged(!refreshing); +} diff --git a/plugins/advancedviewplugin/models/bookingsmodel.h b/plugins/advancedviewplugin/models/bookingsmodel.h index 0c02b3e..9156d0e 100644 --- a/plugins/advancedviewplugin/models/bookingsmodel.h +++ b/plugins/advancedviewplugin/models/bookingsmodel.h @@ -32,6 +32,7 @@ Q_SIGNALS: private Q_SLOTS: void bookingsChanged(); + void refreshingChanged(bool refreshing); private: StripsWidget &m_stripsWidget; diff --git a/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp b/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp index b33930b..73a1a70 100644 --- a/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp +++ b/plugins/advancedviewplugin/models/timeassignmentsmodel.cpp @@ -7,7 +7,7 @@ TimeAssignmentsModel::TimeAssignmentsModel(StripsWidget &stripsWidget, QObject * m_stripsWidget(stripsWidget) { connect(&stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged); - connect(&stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, [=](bool refreshing){ enabledChanged(!refreshing); }); + connect(&stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, this, &TimeAssignmentsModel::refreshingChanged); } StripsWidget &TimeAssignmentsModel::stripsWidget() const @@ -90,3 +90,8 @@ void TimeAssignmentsModel::timeAssignmentsChanged() beginResetModel(); endResetModel(); } + +void TimeAssignmentsModel::refreshingChanged(bool refreshing) +{ + Q_EMIT enabledChanged(!refreshing); +} diff --git a/plugins/plugins.pro b/plugins/plugins.pro index ceae520..f8c26c3 100644 --- a/plugins/plugins.pro +++ b/plugins/plugins.pro @@ -3,5 +3,6 @@ TEMPLATE = subdirs SUBDIRS += advancedviewplugin \ lunchmealplugin \ presenceplugin \ + reportsplugin \ updaterplugin \ weatherplugin diff --git a/plugins/presenceplugin/images/refresh.png b/plugins/presenceplugin/images/refresh.png new file mode 100644 index 0000000..f3585b7 Binary files /dev/null and b/plugins/presenceplugin/images/refresh.png differ diff --git a/plugins/presenceplugin/presenceplugin.cpp b/plugins/presenceplugin/presenceplugin.cpp index 0560bb6..790c36e 100644 --- a/plugins/presenceplugin/presenceplugin.cpp +++ b/plugins/presenceplugin/presenceplugin.cpp @@ -2,7 +2,6 @@ #include -#include "mainwindow.h" #include "presencewidget.h" PresencePlugin::PresencePlugin(QObject *parent) : diff --git a/plugins/presenceplugin/presenceplugin.pro b/plugins/presenceplugin/presenceplugin.pro index 7767bfe..961ea39 100644 --- a/plugins/presenceplugin/presenceplugin.pro +++ b/plugins/presenceplugin/presenceplugin.pro @@ -15,9 +15,15 @@ DEPENDPATH += $$PWD/../../zeiterfassunglib DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += presenceplugin.h \ - presencewidget.h + presencewidget.h SOURCES += presenceplugin.cpp \ - presencewidget.cpp + presencewidget.cpp + +FORMS += + +RESOURCES += presenceplugin_resources.qrc + +TRANSLATIONS += OTHER_FILES += presenceplugin.json diff --git a/plugins/presenceplugin/presenceplugin_resources.qrc b/plugins/presenceplugin/presenceplugin_resources.qrc new file mode 100644 index 0000000..9eca07d --- /dev/null +++ b/plugins/presenceplugin/presenceplugin_resources.qrc @@ -0,0 +1,5 @@ + + + images/refresh.png + + diff --git a/plugins/presenceplugin/presencewidget.cpp b/plugins/presenceplugin/presencewidget.cpp index 05d6223..35d19f1 100644 --- a/plugins/presenceplugin/presencewidget.cpp +++ b/plugins/presenceplugin/presencewidget.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -23,6 +24,9 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : m_labelNotAvailable->setFrameShadow(QFrame::Sunken); m_mainWindow.statusBar()->addWidget(m_labelNotAvailable); + m_action = m_mainWindow.menuView()->addAction(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/refresh.png")), + tr("Refresh presence"), this, &PresenceWidget::timeout); + auto timer = new QTimer(this); timer->setInterval(60000); connect(timer, &QTimer::timeout, this, &PresenceWidget::timeout); @@ -33,15 +37,11 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : void PresenceWidget::timeout() { - if(m_reply) - { - qWarning() << "last request not finished yet!"; - return; - } - m_labelAvailable->setText(tr("%0: %1").arg(tr("Available")).arg(tr("???"))); m_labelNotAvailable->setText(tr("%0: %1").arg(tr("Not available")).arg(tr("???"))); + m_action->setEnabled(false); + m_reply = m_mainWindow.erfassung().doGetPresenceStatus(); connect(m_reply.get(), &ZeiterfassungReply::finished, this, &PresenceWidget::finished); } @@ -73,5 +73,6 @@ void PresenceWidget::finished() } after: + m_action->setEnabled(true); m_reply = Q_NULLPTR; } diff --git a/plugins/presenceplugin/presencewidget.h b/plugins/presenceplugin/presencewidget.h index 2c1e578..90d2433 100644 --- a/plugins/presenceplugin/presencewidget.h +++ b/plugins/presenceplugin/presencewidget.h @@ -6,12 +6,14 @@ #include "replies/getpresencestatusreply.h" class QLabel; +class QAction; class MainWindow; class PresenceWidget : public QWidget { Q_OBJECT + public: explicit PresenceWidget(MainWindow &mainWindow); @@ -25,6 +27,8 @@ private: QLabel *m_labelAvailable; QLabel *m_labelNotAvailable; + QAction *m_action; + std::unique_ptr m_reply; }; diff --git a/plugins/reportsplugin/images/refresh.png b/plugins/reportsplugin/images/refresh.png new file mode 100644 index 0000000..f3585b7 Binary files /dev/null and b/plugins/reportsplugin/images/refresh.png differ diff --git a/zeiterfassunglib/images/auswertung.png b/plugins/reportsplugin/images/report.png similarity index 100% rename from zeiterfassunglib/images/auswertung.png rename to plugins/reportsplugin/images/report.png diff --git a/plugins/reportsplugin/reportsplugin.cpp b/plugins/reportsplugin/reportsplugin.cpp new file mode 100644 index 0000000..ea8d0fa --- /dev/null +++ b/plugins/reportsplugin/reportsplugin.cpp @@ -0,0 +1,16 @@ +#include "reportsplugin.h" + +#include + +#include "reportswidget.h" + +ReportsPlugin::ReportsPlugin(QObject *parent) : + ZeiterfassungPlugin(parent) +{ + qDebug() << "called"; +} + +void ReportsPlugin::attachTo(MainWindow &mainWindow) +{ + new ReportsWidget(mainWindow); +} diff --git a/plugins/reportsplugin/reportsplugin.h b/plugins/reportsplugin/reportsplugin.h new file mode 100644 index 0000000..782caa2 --- /dev/null +++ b/plugins/reportsplugin/reportsplugin.h @@ -0,0 +1,23 @@ +#ifndef REPORTSPLUGIN_H +#define REPORTSPLUGIN_H + +#include + +#include "zeiterfassungplugin.h" + +class MainWindow; + +class Q_DECL_EXPORT ReportsPlugin : public ZeiterfassungPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "dbsoftware.zeiterfassung.plugin/1.0" FILE "reportsplugin.json") + Q_INTERFACES(ZeiterfassungPlugin) + +public: + explicit ReportsPlugin(QObject *parent = Q_NULLPTR); + + // ZeiterfassungPlugin interface + void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; +}; + +#endif // REPORTSPLUGIN_H diff --git a/plugins/reportsplugin/reportsplugin.json b/plugins/reportsplugin/reportsplugin.json new file mode 100644 index 0000000..e69de29 diff --git a/plugins/reportsplugin/reportsplugin.pro b/plugins/reportsplugin/reportsplugin.pro new file mode 100644 index 0000000..a299f62 --- /dev/null +++ b/plugins/reportsplugin/reportsplugin.pro @@ -0,0 +1,29 @@ +QT += core network gui widgets + +TARGET = reportsplugin +TEMPLATE = lib + +CONFIG += shared c++14 + +DESTDIR = $${OUT_PWD}/../../bin/plugins/zeiterfassung + +LIBS += -L$$OUT_PWD/../../lib -lzeiterfassunglib + +INCLUDEPATH += $$PWD/../../zeiterfassunglib +DEPENDPATH += $$PWD/../../zeiterfassunglib + +DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT + +HEADERS += reportsplugin.h \ + reportswidget.h + +SOURCES += reportsplugin.cpp \ + reportswidget.cpp + +FORMS += + +RESOURCES += reportsplugin_resources.qrc + +TRANSLATIONS += + +OTHER_FILES += reportsplugin.json diff --git a/plugins/reportsplugin/reportsplugin_resources.qrc b/plugins/reportsplugin/reportsplugin_resources.qrc new file mode 100644 index 0000000..acd4367 --- /dev/null +++ b/plugins/reportsplugin/reportsplugin_resources.qrc @@ -0,0 +1,6 @@ + + + images/refresh.png + images/report.png + + diff --git a/plugins/reportsplugin/reportswidget.cpp b/plugins/reportsplugin/reportswidget.cpp new file mode 100644 index 0000000..c448ca5 --- /dev/null +++ b/plugins/reportsplugin/reportswidget.cpp @@ -0,0 +1,145 @@ +#include "reportswidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "zeiterfassungapi.h" + +ReportsWidget::ReportsWidget(MainWindow &mainWindow) : + QWidget(&mainWindow), + m_mainWindow(mainWindow) +{ + m_labelBalance = new QLabel(this); + m_labelBalance->setFrameShape(QFrame::Panel); + m_labelBalance->setFrameShadow(QFrame::Sunken); + m_mainWindow.statusBar()->addPermanentWidget(m_labelBalance); + + m_labelHolidays = new QLabel(this); + m_labelHolidays->setFrameShape(QFrame::Panel); + m_labelHolidays->setFrameShadow(QFrame::Sunken); + m_mainWindow.statusBar()->addPermanentWidget(m_labelHolidays); + + m_actionRefreshReport = m_mainWindow.menuView()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/reportsplugin/images/refresh.png")), + tr("Refresh report"), this, &ReportsWidget::refresh); + + m_actionOpenReport = m_mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/reportsplugin/images/report.png")), + tr("Open report"), this, &ReportsWidget::openReport); + m_mainWindow.toolBar()->addAction(m_actionOpenReport); + + dateChanged(m_mainWindow.date()); +} + +void ReportsWidget::dateChanged(const QDate &date) +{ + if(!date.isValid()) + { + qWarning() << "invalid date" << date; + return; + } + + auto monthBegin = QDate(date.year(), date.month(), 1); + if(monthBegin != m_date) + { + m_date = monthBegin; + refresh(); + } +} + +void ReportsWidget::refresh() +{ + if(!m_date.isValid()) + { + qWarning() << "invalid date" << m_date; + return; + } + + m_actionRefreshReport->setEnabled(false); + m_actionOpenReport->setEnabled(false); + + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("???"))); + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("???"))); + + m_reply = m_mainWindow.erfassung().doGetReport(m_mainWindow.userInfo().userId, m_date); + connect(m_reply.get(), &ZeiterfassungReply::finished, this, &ReportsWidget::finished); +} + +void ReportsWidget::finished() +{ + if(!m_reply->success()) + { + m_date = QDate(); + QMessageBox::warning(this, tr("Could not load report!"), tr("Could not load report!") % "\n\n" % m_reply->message()); + goto after; + } + + { + auto content = m_reply->content(); + + { + static QRegularExpression regex(QStringLiteral("Gleitzeit +([0-9]+\\:[0-9]+\\-?) +([0-9]+\\:[0-9]+\\-?)")); + auto match = regex.match(content); + if(match.hasMatch()) + { + auto balance = match.captured(2); + if(balance.endsWith(QChar('-'))) + { + balance.chop(1); + balance = QChar('-') % balance; + } + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("%0h").arg(balance))); + } + else + { + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("n/a"))); + qWarning() << "balance not found in PDF"; + } + } + + { + static QRegularExpression regex(QStringLiteral("Urlaubsanspruch +([0-9]+\\.[0-9]+\\-?) +([0-9]+\\.[0-9]+\\-?)")); + auto match = regex.match(content); + if(match.hasMatch()) + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(match.captured(2))); + else + { + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("n/a"))); + qWarning() << "holidays not found in PDF"; + } + } + + { + QTemporaryFile file(QDir::temp().absoluteFilePath(QStringLiteral("reportXXXXXX.pdf"))); + file.setAutoRemove(false); + if(!file.open()) + { + QMessageBox::warning(this, tr("Could not write report!"), tr("Could not write report!") % "\n\n" % file.errorString()); + goto after; + } + + file.write(content); + + m_url = QUrl::fromLocalFile(file.fileName()); + } + } + + m_actionOpenReport->setEnabled(true); + + after: + m_actionRefreshReport->setEnabled(true); + m_reply = Q_NULLPTR; +} + +void ReportsWidget::openReport() +{ + if(!QDesktopServices::openUrl(m_url)) + QMessageBox::warning(this, tr("Could not launch your default PDF viewer!"), tr("Could not launch your default PDF viewer!")); +} diff --git a/plugins/reportsplugin/reportswidget.h b/plugins/reportsplugin/reportswidget.h new file mode 100644 index 0000000..9adcfe7 --- /dev/null +++ b/plugins/reportsplugin/reportswidget.h @@ -0,0 +1,43 @@ +#ifndef REPORTSWIDGET_H +#define REPORTSWIDGET_H + +#include +#include +#include + +#include "replies/getreportreply.h" + +class QLabel; +class QAction; + +class MainWindow; + +class ReportsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ReportsWidget(MainWindow &mainWindow); + +private Q_SLOTS: + void dateChanged(const QDate &date); + void refresh(); + void finished(); + void openReport(); + +private: + MainWindow &m_mainWindow; + + QLabel *m_labelBalance; + QLabel *m_labelHolidays; + + QAction *m_actionOpenReport; + QAction *m_actionRefreshReport; + + QDate m_date; + QUrl m_url; + + std::unique_ptr m_reply; +}; + +#endif // REPORTSWIDGET_H diff --git a/plugins/updaterplugin/updaterdialog.cpp b/plugins/updaterplugin/updaterdialog.cpp index 3d4c560..55f5bdb 100644 --- a/plugins/updaterplugin/updaterdialog.cpp +++ b/plugins/updaterplugin/updaterdialog.cpp @@ -27,22 +27,8 @@ UpdaterDialog::UpdaterDialog(MainWindow &mainWindow) : setAttribute(Qt::WA_DeleteOnClose); - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [=]() { - if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); - - if(!QDesktopServices::openUrl(m_url)) - QMessageBox::warning(this, tr("Could not open default webbrowser!"), tr("Could not open default webbrowser!")); - - accept(); - }); - - connect(ui->buttonBox, &QDialogButtonBox::rejected, this, [=](){ - if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); - - reject(); - }); + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &UpdaterDialog::acceptedSlot); + connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &UpdaterDialog::rejectedSlot); auto url = m_mainWindow.settings().value(QStringLiteral("UpdaterPlugin/url"), QUrl(QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases"))).toUrl(); @@ -55,6 +41,25 @@ UpdaterDialog::~UpdaterDialog() delete ui; } +void UpdaterDialog::acceptedSlot() +{ + if(ui->checkBoxDontShow->isChecked()) + m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + + if(!QDesktopServices::openUrl(m_url)) + QMessageBox::warning(this, tr("Could not open default webbrowser!"), tr("Could not open default webbrowser!")); + + accept(); +} + +void UpdaterDialog::rejectedSlot() +{ + if(ui->checkBoxDontShow->isChecked()) + m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + + reject(); +} + void UpdaterDialog::finished() { if(m_reply->error() != QNetworkReply::NoError) diff --git a/plugins/updaterplugin/updaterdialog.h b/plugins/updaterplugin/updaterdialog.h index ba41f6e..9626d05 100644 --- a/plugins/updaterplugin/updaterdialog.h +++ b/plugins/updaterplugin/updaterdialog.h @@ -20,6 +20,8 @@ public: ~UpdaterDialog(); private Q_SLOTS: + void acceptedSlot(); + void rejectedSlot(); void finished(); private: diff --git a/plugins/updaterplugin/updaterplugin.cpp b/plugins/updaterplugin/updaterplugin.cpp index 24b5f51..13ad888 100644 --- a/plugins/updaterplugin/updaterplugin.cpp +++ b/plugins/updaterplugin/updaterplugin.cpp @@ -16,8 +16,6 @@ UpdaterPlugin::UpdaterPlugin(QObject *parent) : void UpdaterPlugin::attachTo(MainWindow &mainWindow) { - qDebug() << "called"; - if(mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate().isNull() || mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate() < QDate::currentDate()) new UpdaterDialog(mainWindow); diff --git a/zeiterfassunglib/mainwindow.cpp b/zeiterfassunglib/mainwindow.cpp index 9d52cd9..b3908d7 100644 --- a/zeiterfassunglib/mainwindow.cpp +++ b/zeiterfassunglib/mainwindow.cpp @@ -22,7 +22,6 @@ #include "dialogs/aboutmedialog.h" #include "dialogs/settingsdialog.h" #include "replies/getprojectsreply.h" -#include "replies/getauswertungreply.h" #include "replies/createbookingreply.h" #include "replies/createtimeassignmentreply.h" #include "replies/updatetimeassignmentreply.h" @@ -35,8 +34,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), - m_getProjectsReply(Q_NULLPTR), - m_getAuswertungReply(Q_NULLPTR), m_currentStripWidget(Q_NULLPTR) { ui->setupUi(this); @@ -57,8 +54,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass ui->actionRefresh->setShortcut(QKeySequence::Refresh); connect(ui->actionRefresh, &QAction::triggered, this, [=](){ dateChanged(true); }); - connect(ui->actionAuswertung, &QAction::triggered, this, &MainWindow::openAuswertung); - connect(ui->actionAboutMe, &QAction::triggered, [=](){ AboutMeDialog(userInfo, this).exec(); }); connect(ui->actionSettings, &QAction::triggered, [=](){ SettingsDialog(m_settings, this).exec(); }); @@ -88,13 +83,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); - ui->statusbar->addPermanentWidget(m_balanceLabel = new QLabel(ui->statusbar)); - m_balanceLabel->setFrameShape(QFrame::Panel); - m_balanceLabel->setFrameShadow(QFrame::Sunken); - ui->statusbar->addPermanentWidget(m_holidaysLabel = new QLabel(ui->statusbar)); - m_holidaysLabel->setFrameShape(QFrame::Panel); - m_holidaysLabel->setFrameShadow(QFrame::Sunken); - dateChanged(); } @@ -123,6 +111,11 @@ QMenu *MainWindow::menuAbout() const return ui->menuAbout; } +QToolBar *MainWindow::toolBar() const +{ + return ui->mainToolBar; +} + ZeiterfassungSettings &MainWindow::settings() const { return m_settings; @@ -143,6 +136,11 @@ StripFactory &MainWindow::stripFactory() const return m_stripFactory; } +QDate MainWindow::date() const +{ + return ui->dateEditDate->date(); +} + const QMap &MainWindow::projects() const { return m_projects; @@ -171,66 +169,6 @@ void MainWindow::getProjectsFinished() m_getProjectsReply = Q_NULLPTR; } -void MainWindow::getAuswertungFinished() -{ - if(std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ - return stripsWidget->refreshing(); - })) - { - ui->actionToday->setEnabled(true); - ui->actionRefresh->setEnabled(true); - ui->dateEditDate->setReadOnly(false); - ui->pushButtonPrev->setEnabled(true); - ui->pushButtonNext->setEnabled(true); - } - - if(!m_getAuswertungReply->success()) - { - m_auswertungDate = QDate(); - QMessageBox::warning(this, tr("Could not load Auswertung!"), tr("Could not load Auswertung!") % "\n\n" % m_getAuswertungReply->message()); - m_getAuswertungReply = Q_NULLPTR; - return; - } - - ui->actionAuswertung->setEnabled(true); - m_auswertung = m_getAuswertungReply->auswertung(); - - auto urlaubsAnspruch = tr("n/a"); - - { - static QRegularExpression regex(QStringLiteral("Urlaubsanspruch +([0-9]+\\.[0-9]+\\-?) +([0-9]+\\.[0-9]+\\-?)")); - auto match = regex.match(m_auswertung); - if(match.hasMatch()) - urlaubsAnspruch = match.captured(2); - else - qWarning() << "Urlaubsanspruch not found"; - } - - auto gleitzeit = tr("n/a"); - - { - static QRegularExpression regex(QStringLiteral("Gleitzeit +([0-9]+\\:[0-9]+\\-?) +([0-9]+\\:[0-9]+\\-?)")); - auto match = regex.match(m_auswertung); - if(match.hasMatch()) - { - gleitzeit = match.captured(2); - if(gleitzeit.endsWith(QChar('-'))) - { - gleitzeit.chop(1); - gleitzeit = QChar('-') % gleitzeit; - } - gleitzeit = tr("%0h").arg(gleitzeit); - } - else - qWarning() << "Gleitzeit not found"; - } - - m_balanceLabel->setText(tr("%0: %1").arg(tr("Balance")).arg(gleitzeit)); - m_holidaysLabel->setText(tr("%0: %1").arg(tr("Holidays")).arg(urlaubsAnspruch)); - - m_getAuswertungReply = Q_NULLPTR; -} - void MainWindow::pushButtonStartPressed() { auto bookingsChanged = false; @@ -307,8 +245,7 @@ void MainWindow::pushButtonStartPressed() if(bookingsChanged) { m_currentStripWidget->refresh(); - - refreshAuswertung(); + //refreshReport(); } else m_currentStripWidget->refreshTimeAssignments(); @@ -359,7 +296,7 @@ void MainWindow::pushButtonEndPressed() } m_currentStripWidget->refresh(); - refreshAuswertung(); + //refreshReport(); ui->actionToday->setEnabled(false); ui->actionRefresh->setEnabled(false); @@ -400,12 +337,9 @@ void MainWindow::dateChanged(bool force) } } - if(force || m_auswertungDate != QDate(ui->dateEditDate->date().year(), ui->dateEditDate->date().month(), 1)) - refreshAuswertung(); - if(std::any_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget) { return stripsWidget->refreshing(); - }) || m_getAuswertungReply) + })) { ui->actionToday->setEnabled(false); ui->actionRefresh->setEnabled(false); @@ -415,26 +349,6 @@ void MainWindow::dateChanged(bool force) } } -void MainWindow::openAuswertung() -{ - QTemporaryFile file(QDir::temp().absoluteFilePath(QStringLiteral("auswertungXXXXXX.pdf"))); - file.setAutoRemove(false); - if(!file.open()) - { - QMessageBox::warning(this, tr("Could not open auswertung!"), tr("Could not open auswertung!") % "\n\n" % file.errorString()); - return; - } - - file.write(m_auswertung); - file.close(); - - if(!QDesktopServices::openUrl(QUrl::fromLocalFile(file.fileName()))) - { - QMessageBox::warning(this, tr("Could not open auswertung!"), tr("Could not open default PDF viewer!")); - return; - } -} - void MainWindow::minimumTimeChanged() { ui->timeEditTime->setMinimumTime(m_currentStripWidget->minimumTime()); @@ -442,9 +356,6 @@ void MainWindow::minimumTimeChanged() void MainWindow::refreshingChanged() { - if(m_getAuswertungReply) - return; - { auto allFinished = std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ return stripsWidget->refreshing(); @@ -487,19 +398,6 @@ void MainWindow::endEnabledChanged() ui->pushButtonEnd->setEnabled(endEnabled); } -void MainWindow::refreshAuswertung() -{ - m_balanceLabel->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("???"))); - m_holidaysLabel->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("???"))); - - ui->actionAuswertung->setEnabled(false); - m_auswertung.clear(); - - m_auswertungDate = QDate(ui->dateEditDate->date().year(), ui->dateEditDate->date().month(), 1); - m_getAuswertungReply = m_erfassung.doGetAuswertung(m_userInfo.userId, m_auswertungDate); - connect(m_getAuswertungReply.get(), &ZeiterfassungReply::finished, this, &MainWindow::getAuswertungFinished); -} - void MainWindow::updateComboboxes() { ui->comboBoxProject->clear(); diff --git a/zeiterfassunglib/mainwindow.h b/zeiterfassunglib/mainwindow.h index c74ae2a..a49ae98 100644 --- a/zeiterfassunglib/mainwindow.h +++ b/zeiterfassunglib/mainwindow.h @@ -9,9 +9,10 @@ #include "zeiterfassunglib_global.h" #include "replies/getuserinforeply.h" #include "replies/getprojectsreply.h" -#include "replies/getauswertungreply.h" #include "replies/getpresencestatusreply.h" +class QMenu; +class QToolBar; class QLabel; class QBoxLayout; @@ -19,8 +20,6 @@ namespace Ui { class MainWindow; } class ZeiterfassungSettings; class StripFactory; class StripsWidget; -class BookingsModel; -class TimeAssignmentsModel; class ZEITERFASSUNGLIBSHARED_EXPORT MainWindow : public QMainWindow { @@ -35,22 +34,23 @@ public: QMenu *menuView() const; QMenu *menuTools() const; QMenu *menuAbout() const; + QToolBar *toolBar() const; ZeiterfassungSettings &settings() const; ZeiterfassungApi &erfassung() const; const GetUserInfoReply::UserInfo &userInfo() const; StripFactory &stripFactory() const; + QDate date() const; + const QMap &projects() const; const std::array &stripsWidgets() const; private Q_SLOTS: void getProjectsFinished(); - void getAuswertungFinished(); void pushButtonStartPressed(); void pushButtonEndPressed(); void dateChanged(bool force = false); - void openAuswertung(); void minimumTimeChanged(); void refreshingChanged(); @@ -58,7 +58,6 @@ private Q_SLOTS: void endEnabledChanged(); private: - void refreshAuswertung(); void updateComboboxes(); Ui::MainWindow *ui; @@ -68,19 +67,9 @@ private: StripFactory &m_stripFactory; std::unique_ptr m_getProjectsReply; - std::unique_ptr m_getAuswertungReply; - - BookingsModel *m_bookingsModel; - TimeAssignmentsModel *m_timeAssignmentsModel; QMap m_projects; - QDate m_auswertungDate; - QByteArray m_auswertung; - - QLabel *m_balanceLabel; - QLabel *m_holidaysLabel; - std::array m_stripsWidgets; StripsWidget *m_currentStripWidget; }; diff --git a/zeiterfassunglib/mainwindow.ui b/zeiterfassunglib/mainwindow.ui index 9bfdf0b..ebc7280 100644 --- a/zeiterfassunglib/mainwindow.ui +++ b/zeiterfassunglib/mainwindow.ui @@ -229,7 +229,6 @@ &Tools - @@ -245,8 +244,6 @@ - - @@ -299,15 +296,6 @@ &Refresh everything - - - - :/zeiterfassunglib/images/auswertung.png:/zeiterfassunglib/images/auswertung.png - - - &Auswertung - - diff --git a/zeiterfassunglib/replies/getauswertungreply.h b/zeiterfassunglib/replies/getauswertungreply.h deleted file mode 100644 index c39e93e..0000000 --- a/zeiterfassunglib/replies/getauswertungreply.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef GETAUSWERTUNGREPLY_H -#define GETAUSWERTUNGREPLY_H - -#include - -#include -#include - -#include "zeiterfassunglib_global.h" -#include "zeiterfassungreply.h" - -class ZEITERFASSUNGLIBSHARED_EXPORT GetAuswertungReply : public ZeiterfassungReply -{ - Q_OBJECT - -public: - GetAuswertungReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); - - const QByteArray &auswertung() const; - -private Q_SLOTS: - void request0Finished(); - void request1Finished(); - -private: - std::unique_ptr m_reply; - QByteArray m_auswertung; -}; - -#endif // GETAUSWERTUNGREPLY_H diff --git a/zeiterfassunglib/replies/getauswertungreply.cpp b/zeiterfassunglib/replies/getreportreply.cpp similarity index 59% rename from zeiterfassunglib/replies/getauswertungreply.cpp rename to zeiterfassunglib/replies/getreportreply.cpp index 3a2e0bd..b63f91f 100644 --- a/zeiterfassunglib/replies/getauswertungreply.cpp +++ b/zeiterfassunglib/replies/getreportreply.cpp @@ -1,20 +1,20 @@ -#include "getauswertungreply.h" +#include "getreportreply.h" #include "zeiterfassungapi.h" -GetAuswertungReply::GetAuswertungReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung) : +GetReportReply::GetReportReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung) : ZeiterfassungReply(zeiterfassung), m_reply(std::move(reply)) { - connect(m_reply.get(), &QNetworkReply::finished, this, &GetAuswertungReply::request0Finished); + connect(m_reply.get(), &QNetworkReply::finished, this, &GetReportReply::request0Finished); } -const QByteArray &GetAuswertungReply::auswertung() const +const QByteArray &GetReportReply::content() const { - return m_auswertung; + return m_content; } -void GetAuswertungReply::request0Finished() +void GetReportReply::request0Finished() { if(m_reply->error() != QNetworkReply::NoError) { @@ -29,10 +29,10 @@ void GetAuswertungReply::request0Finished() url.setPath(QString(m_reply->readAll())); m_reply = std::unique_ptr(zeiterfassung()->manager()->get(QNetworkRequest(url))); - connect(m_reply.get(), &QNetworkReply::finished, this, &GetAuswertungReply::request1Finished); + connect(m_reply.get(), &QNetworkReply::finished, this, &GetReportReply::request1Finished); } -void GetAuswertungReply::request1Finished() +void GetReportReply::request1Finished() { if(m_reply->error() != QNetworkReply::NoError) { @@ -42,7 +42,7 @@ void GetAuswertungReply::request1Finished() } setSuccess(true); - m_auswertung = m_reply->readAll(); + m_content = m_reply->readAll(); end: m_reply = Q_NULLPTR; diff --git a/zeiterfassunglib/replies/getreportreply.h b/zeiterfassunglib/replies/getreportreply.h new file mode 100644 index 0000000..1590681 --- /dev/null +++ b/zeiterfassunglib/replies/getreportreply.h @@ -0,0 +1,30 @@ +#ifndef GETREPORTREPLY_H +#define GETREPORTREPLY_H + +#include + +#include +#include + +#include "zeiterfassunglib_global.h" +#include "zeiterfassungreply.h" + +class ZEITERFASSUNGLIBSHARED_EXPORT GetReportReply : public ZeiterfassungReply +{ + Q_OBJECT + +public: + GetReportReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + + const QByteArray &content() const; + +private Q_SLOTS: + void request0Finished(); + void request1Finished(); + +private: + std::unique_ptr m_reply; + QByteArray m_content; +}; + +#endif // GETREPORTREPLY_H diff --git a/zeiterfassunglib/resources.qrc b/zeiterfassunglib/resources.qrc index 13f4b93..252e452 100644 --- a/zeiterfassunglib/resources.qrc +++ b/zeiterfassunglib/resources.qrc @@ -1,7 +1,6 @@ images/about.png - images/auswertung.png images/authentication.png images/help.png images/icon.png diff --git a/zeiterfassunglib/zeiterfassungapi.cpp b/zeiterfassunglib/zeiterfassungapi.cpp index 1d62a58..ffdfa24 100644 --- a/zeiterfassunglib/zeiterfassungapi.cpp +++ b/zeiterfassunglib/zeiterfassungapi.cpp @@ -13,7 +13,7 @@ #include "replies/createtimeassignmentreply.h" #include "replies/deletebookingreply.h" #include "replies/deletetimeassignmentreply.h" -#include "replies/getauswertungreply.h" +#include "replies/getreportreply.h" #include "replies/getbookingsreply.h" #include "replies/getpresencestatusreply.h" #include "replies/getprojectsreply.h" @@ -286,7 +286,7 @@ std::unique_ptr ZeiterfassungApi::doGetProjects(int userId, co return std::make_unique(std::move(reply), this); } -std::unique_ptr ZeiterfassungApi::doGetAuswertung(int userId, const QDate &date) +std::unique_ptr ZeiterfassungApi::doGetReport(int userId, const QDate &date) { QNetworkRequest request(QUrl(QStringLiteral("%0json/auswertung/month?persNr=%1&date=%2") .arg(m_url) @@ -296,7 +296,7 @@ std::unique_ptr ZeiterfassungApi::doGetAuswertung(int userId auto reply = std::unique_ptr(m_manager->get(request)); - return std::make_unique(std::move(reply), this); + return std::make_unique(std::move(reply), this); } std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() diff --git a/zeiterfassunglib/zeiterfassungapi.h b/zeiterfassunglib/zeiterfassungapi.h index ff1f3b7..e978094 100644 --- a/zeiterfassunglib/zeiterfassungapi.h +++ b/zeiterfassunglib/zeiterfassungapi.h @@ -24,7 +24,7 @@ class CreateTimeAssignmentReply; class UpdateTimeAssignmentReply; class DeleteTimeAssignmentReply; class GetProjectsReply; -class GetAuswertungReply; +class GetReportReply; class GetPresenceStatusReply; class ZEITERFASSUNGLIBSHARED_EXPORT ZeiterfassungApi : public QObject @@ -62,7 +62,7 @@ public: std::unique_ptr doDeleteTimeAssignment(int timeAssignmentId); std::unique_ptr doGetProjects(int userId, const QDate &date); - std::unique_ptr doGetAuswertung(int userId, const QDate &date); + std::unique_ptr doGetReport(int userId, const QDate &date); std::unique_ptr doGetPresenceStatus(); private: diff --git a/zeiterfassunglib/zeiterfassunglib.pro b/zeiterfassunglib/zeiterfassunglib.pro index 0c77d71..e58e448 100644 --- a/zeiterfassunglib/zeiterfassunglib.pro +++ b/zeiterfassunglib/zeiterfassunglib.pro @@ -25,7 +25,6 @@ SOURCES += mainwindow.cpp \ replies/createtimeassignmentreply.cpp \ replies/deletebookingreply.cpp \ replies/deletetimeassignmentreply.cpp \ - replies/getauswertungreply.cpp \ replies/getbookingsreply.cpp \ replies/getpresencestatusreply.cpp \ replies/getprojectsreply.cpp \ @@ -35,7 +34,8 @@ SOURCES += mainwindow.cpp \ replies/updatebookingreply.cpp \ replies/updatetimeassignmentreply.cpp \ replies/zeiterfassungreply.cpp \ - replies/getuserinforeply.cpp + replies/getuserinforeply.cpp \ + replies/getreportreply.cpp HEADERS += cpp14polyfills.h \ mainwindow.h \ @@ -54,7 +54,6 @@ HEADERS += cpp14polyfills.h \ replies/createtimeassignmentreply.h \ replies/deletebookingreply.h \ replies/deletetimeassignmentreply.h \ - replies/getauswertungreply.h \ replies/getbookingsreply.h \ replies/getpresencestatusreply.h \ replies/getprojectsreply.h \ @@ -64,7 +63,8 @@ HEADERS += cpp14polyfills.h \ replies/updatebookingreply.h \ replies/updatetimeassignmentreply.h \ replies/zeiterfassungreply.h \ - replies/getuserinforeply.h + replies/getuserinforeply.h \ + replies/getreportreply.h FORMS += mainwindow.ui \ dialogs/settingsdialog.ui \