From a76d33711cfad547e4d560a73248fad8091d5dea Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 11:49:42 +0100 Subject: [PATCH 01/21] Added absenceplugin --- plugins/absenceplugin/absenceplugin.cpp | 31 +++++++++++++++++ plugins/absenceplugin/absenceplugin.h | 24 ++++++++++++++ plugins/absenceplugin/absenceplugin.json | 0 plugins/absenceplugin/absenceplugin.pro | 33 +++++++++++++++++++ plugins/plugins.pro | 3 +- .../dialogs/authenticationdialog.ui | 4 +-- 6 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 plugins/absenceplugin/absenceplugin.cpp create mode 100644 plugins/absenceplugin/absenceplugin.h create mode 100644 plugins/absenceplugin/absenceplugin.json create mode 100644 plugins/absenceplugin/absenceplugin.pro diff --git a/plugins/absenceplugin/absenceplugin.cpp b/plugins/absenceplugin/absenceplugin.cpp new file mode 100644 index 0000000..2065cc3 --- /dev/null +++ b/plugins/absenceplugin/absenceplugin.cpp @@ -0,0 +1,31 @@ +#include "absenceplugin.h" + +#include +#include +#include +#include + +AbsencePlugin::AbsencePlugin(QObject *parent) : + ZeiterfassungPlugin(parent) +{ + qDebug() << "called"; + + static auto dir = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(QStringLiteral("translations")); + + if(m_translator.load(QLocale(), QStringLiteral("absenceplugin"), QStringLiteral("_"), dir)) + { + if(!QCoreApplication::installTranslator(&m_translator)) + { + qWarning() << "could not install translation absenceplugin"; + } + } + else + { + qWarning() << "could not load translation absenceplugin"; + } +} + +void AbsencePlugin::attachTo(MainWindow &mainWindow) +{ + //TODO +} diff --git a/plugins/absenceplugin/absenceplugin.h b/plugins/absenceplugin/absenceplugin.h new file mode 100644 index 0000000..b3884b8 --- /dev/null +++ b/plugins/absenceplugin/absenceplugin.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include + +#include "zeiterfassungplugin.h" + +class MainWindow; + +class Q_DECL_EXPORT AbsencePlugin : public ZeiterfassungPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "dbsoftware.zeiterfassung.plugin/1.0" FILE "absenceplugin.json") + Q_INTERFACES(ZeiterfassungPlugin) + +public: + explicit AbsencePlugin(QObject *parent = Q_NULLPTR); + + // ZeiterfassungPlugin interface + void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + +private: + QTranslator m_translator; +}; diff --git a/plugins/absenceplugin/absenceplugin.json b/plugins/absenceplugin/absenceplugin.json new file mode 100644 index 0000000..e69de29 diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro new file mode 100644 index 0000000..bb56955 --- /dev/null +++ b/plugins/absenceplugin/absenceplugin.pro @@ -0,0 +1,33 @@ +QT += core network gui widgets + +TARGET = absenceplugin +TEMPLATE = lib + +CONFIG += shared c++14 + +PROJECT_ROOT = ../.. + +DESTDIR = $${OUT_PWD}/$${PROJECT_ROOT}/bin/plugins/zeiterfassung + +LIBS += -L$${OUT_PWD}/$${PROJECT_ROOT}/bin -lzeiterfassungcorelib -lzeiterfassungguilib + +INCLUDEPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT}/zeiterfassungguilib +DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT}/zeiterfassungguilib + +DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT + +HEADERS += \ + absenceplugin.h + +SOURCES += \ + absenceplugin.cpp + +FORMS += + +RESOURCES += + +TRANSLATIONS += + +OTHER_FILES += absenceplugin.json + +include(../../lrelease.pri) diff --git a/plugins/plugins.pro b/plugins/plugins.pro index 647ff3d..2857a61 100644 --- a/plugins/plugins.pro +++ b/plugins/plugins.pro @@ -1,6 +1,7 @@ TEMPLATE = subdirs -SUBDIRS += advancedviewplugin \ +SUBDIRS += absenceplugin \ + advancedviewplugin \ devtoolsplugin \ lunchmealplugin \ profileplugin \ diff --git a/zeiterfassungguilib/dialogs/authenticationdialog.ui b/zeiterfassungguilib/dialogs/authenticationdialog.ui index 7a35741..e68034f 100644 --- a/zeiterfassungguilib/dialogs/authenticationdialog.ui +++ b/zeiterfassungguilib/dialogs/authenticationdialog.ui @@ -37,7 +37,7 @@ - :/zeiterfassungguilib/images/authentication.png + :/zeiterfassungguilib/images/authentication.png true @@ -105,7 +105,7 @@ - + -- 2.50.1 From 6a50d54864d42c925d6f4eca44441a8002207b20 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 14:05:14 +0100 Subject: [PATCH 02/21] Added clang compiler to .travis.yml --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0d8c2a3..afb2677 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,9 @@ language: cpp os: linux sudo: false dist: trusty -compiler: gcc +compiler: + - gcc + - clang cache: directories: @@ -22,4 +24,4 @@ script: - pushd build - ../qt5/build/bin/qmake .. -config release - make -j2 - - popd \ No newline at end of file + - popd -- 2.50.1 From 64f1a81ff5d9b553b5cf7ffa51155c73cd1b16a0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 14:28:29 +0100 Subject: [PATCH 03/21] Added absenceplugin resources --- plugins/absenceplugin/absenceplugin.pro | 2 +- .../absenceplugin/absenceplugin_resources.qrc | 5 +++++ plugins/absenceplugin/images/absence.png | Bin 0 -> 5690 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 plugins/absenceplugin/absenceplugin_resources.qrc create mode 100644 plugins/absenceplugin/images/absence.png diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index bb56955..9631d58 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -24,7 +24,7 @@ SOURCES += \ FORMS += -RESOURCES += +RESOURCES += absenceplugin_resources.qrc TRANSLATIONS += diff --git a/plugins/absenceplugin/absenceplugin_resources.qrc b/plugins/absenceplugin/absenceplugin_resources.qrc new file mode 100644 index 0000000..a3b089d --- /dev/null +++ b/plugins/absenceplugin/absenceplugin_resources.qrc @@ -0,0 +1,5 @@ + + + images/absence.png + + diff --git a/plugins/absenceplugin/images/absence.png b/plugins/absenceplugin/images/absence.png new file mode 100644 index 0000000000000000000000000000000000000000..4a33f1c5223a28db4e4d344ece90897693645a80 GIT binary patch literal 5690 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 B((eEO literal 0 HcmV?d00001 -- 2.50.1 From 5c7eec85c5d45436fa70c5e7e8c6e5f70b45177d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 14:31:41 +0100 Subject: [PATCH 04/21] Added AbsenceWidget --- plugins/absenceplugin/absenceplugin.cpp | 9 ++++++++- plugins/absenceplugin/absenceplugin.pro | 6 ++++-- plugins/absenceplugin/absencewidget.cpp | 8 ++++++++ plugins/absenceplugin/absencewidget.h | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 plugins/absenceplugin/absencewidget.cpp create mode 100644 plugins/absenceplugin/absencewidget.h diff --git a/plugins/absenceplugin/absenceplugin.cpp b/plugins/absenceplugin/absenceplugin.cpp index 2065cc3..ecaa8b0 100644 --- a/plugins/absenceplugin/absenceplugin.cpp +++ b/plugins/absenceplugin/absenceplugin.cpp @@ -4,6 +4,12 @@ #include #include #include +#include + +#include "mainwindow.h" +#include "stripswidget.h" + +#include "absencewidget.h" AbsencePlugin::AbsencePlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -27,5 +33,6 @@ AbsencePlugin::AbsencePlugin(QObject *parent) : void AbsencePlugin::attachTo(MainWindow &mainWindow) { - //TODO + for(auto stripsWidget : mainWindow.stripsWidgets()) + stripsWidget->headerLayout()->addWidget(new AbsenceWidget(stripsWidget)); } diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index 9631d58..8528f50 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -17,10 +17,12 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += \ - absenceplugin.h + absenceplugin.h \ + absencewidget.h SOURCES += \ - absenceplugin.cpp + absenceplugin.cpp \ + absencewidget.cpp FORMS += diff --git a/plugins/absenceplugin/absencewidget.cpp b/plugins/absenceplugin/absencewidget.cpp new file mode 100644 index 0000000..6ce81a3 --- /dev/null +++ b/plugins/absenceplugin/absencewidget.cpp @@ -0,0 +1,8 @@ +#include "absencewidget.h" + +AbsenceWidget::AbsenceWidget(QWidget *parent) : + QToolButton(parent) +{ + setIcon(QIcon(QStringLiteral(":/zeiterfassung/plugins/absenceplugin/images/absence.png"))); + setText(tr("Absence")); +} diff --git a/plugins/absenceplugin/absencewidget.h b/plugins/absenceplugin/absencewidget.h new file mode 100644 index 0000000..b3d9579 --- /dev/null +++ b/plugins/absenceplugin/absencewidget.h @@ -0,0 +1,14 @@ +#ifndef ABSENCEWIDGET_H +#define ABSENCEWIDGET_H + +#include + +class AbsenceWidget : public QToolButton +{ + Q_OBJECT + +public: + explicit AbsenceWidget(QWidget *parent = Q_NULLPTR); +}; + +#endif // ABSENCEWIDGET_H -- 2.50.1 From 9f3f320d408a0e0552e5da420c2c0ce6d8c16b1c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 14:40:34 +0100 Subject: [PATCH 05/21] Added travis build icons to README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 42a9c60..d8fb519 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # Zeiterfassung This tool helps me assigning my working hours to projects at work. +master: ![Build Status of master](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=master) +devel: ![Build Status of devel](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=devel) + ![Screenshot of the main window](https://raw.githubusercontent.com/0xFEEDC0DE64/QtZeiterfassung/master/screenshot.png) ## Building from source -- 2.50.1 From 1d79851c8efdfebb40ce4419bb8d2aa1e811f835 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 14:43:16 +0100 Subject: [PATCH 06/21] Added links on travis icons in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d8fb519..766db01 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Zeiterfassung This tool helps me assigning my working hours to projects at work. -master: ![Build Status of master](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=master) -devel: ![Build Status of devel](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=devel) +master: [![Build Status of master](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=master)](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung) +devel: [![Build Status of devel](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung.svg?branch=devel)](https://travis-ci.org/0xFEEDC0DE64/QtZeiterfassung) ![Screenshot of the main window](https://raw.githubusercontent.com/0xFEEDC0DE64/QtZeiterfassung/master/screenshot.png) -- 2.50.1 From ceb93a2156d7f900baaeb31a9cbabebe7abf79d0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 16:36:10 +0100 Subject: [PATCH 07/21] Fixed install names --- installs.pri | 28 ++++++++++++++-------------- installs_win32.pri | 22 +++++++++++----------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/installs.pri b/installs.pri index 3a7ab5d..df38b05 100644 --- a/installs.pri +++ b/installs.pri @@ -1,14 +1,14 @@ -qtTranslationsInstalls.path = $${OUT_PWD}/bin/translations -qtTranslationsInstalls.files = $$[QT_INSTALL_TRANSLATIONS]/qt_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtbase_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtmultimedia_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtquick1_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtscript_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_en.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qt_de.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtbase_de.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtmultimedia_de.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtquick1_de.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtscript_de.qm \ - $$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_de.qm -INSTALLS += qtTranslationsInstalls +qtTranslationsInstall.path = $${OUT_PWD}/bin/translations +qtTranslationsInstall.files = $$[QT_INSTALL_TRANSLATIONS]/qt_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtbase_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtmultimedia_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtquick1_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtscript_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_en.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qt_de.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtbase_de.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtmultimedia_de.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtquick1_de.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtscript_de.qm \ + $$[QT_INSTALL_TRANSLATIONS]/qtxmlpatterns_de.qm +INSTALLS += qtTranslationsInstall diff --git a/installs_win32.pri b/installs_win32.pri index 65ce4a7..da5ead8 100644 --- a/installs_win32.pri +++ b/installs_win32.pri @@ -11,17 +11,17 @@ qtLibsInstall.files = win32/Qt.conf \ $$[QT_INSTALL_BINS]/libwinpthread-1.dll INSTALLS += qtLibsInstall -qtImageFormats.path = $${OUT_PWD}/bin/plugins/imageformats -qtImageFormats.files = $$[QT_INSTALL_PLUGINS]/imageformats/qgif$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qicns$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qico$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qjpeg$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qsvg$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qtga$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qtiff$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qwbmp$${DEBUG_SIGN}.dll \ - $$[QT_INSTALL_PLUGINS]/imageformats/qwebp$${DEBUG_SIGN}.dll -INSTALLS += qtImageFormats +qtImageFormatsInstall.path = $${OUT_PWD}/bin/plugins/imageformats +qtImageFormatsInstall.files = $$[QT_INSTALL_PLUGINS]/imageformats/qgif$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qicns$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qico$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qjpeg$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qsvg$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qtga$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qtiff$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qwbmp$${DEBUG_SIGN}.dll \ + $$[QT_INSTALL_PLUGINS]/imageformats/qwebp$${DEBUG_SIGN}.dll +INSTALLS += qtImageFormatsInstall qtPlatformsInstall.path = $${OUT_PWD}/bin/plugins/platforms qtPlatformsInstall.files = $$[QT_INSTALL_PLUGINS]/platforms/qwindows$${DEBUG_SIGN}.dll -- 2.50.1 From e6abb265361d82ea218cca40f8d315d47bbd2dac Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:00:49 +0100 Subject: [PATCH 08/21] Added AbsenceDialog --- plugins/absenceplugin/absencedialog.cpp | 14 +++++ plugins/absenceplugin/absencedialog.h | 17 ++++++ plugins/absenceplugin/absencedialog.ui | 71 +++++++++++++++++++++++++ plugins/absenceplugin/absenceplugin.pro | 9 ++-- plugins/absenceplugin/absencewidget.cpp | 10 ++++ plugins/absenceplugin/absencewidget.h | 8 +-- 6 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 plugins/absenceplugin/absencedialog.cpp create mode 100644 plugins/absenceplugin/absencedialog.h create mode 100644 plugins/absenceplugin/absencedialog.ui diff --git a/plugins/absenceplugin/absencedialog.cpp b/plugins/absenceplugin/absencedialog.cpp new file mode 100644 index 0000000..0b8faf8 --- /dev/null +++ b/plugins/absenceplugin/absencedialog.cpp @@ -0,0 +1,14 @@ +#include "absencedialog.h" +#include "ui_absencedialog.h" + +AbsenceDialog::AbsenceDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AbsenceDialog) +{ + ui->setupUi(this); +} + +AbsenceDialog::~AbsenceDialog() +{ + delete ui; +} diff --git a/plugins/absenceplugin/absencedialog.h b/plugins/absenceplugin/absencedialog.h new file mode 100644 index 0000000..37cdb10 --- /dev/null +++ b/plugins/absenceplugin/absencedialog.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +namespace Ui { class AbsenceDialog; } + +class AbsenceDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AbsenceDialog(QWidget *parent = 0); + ~AbsenceDialog(); + +private: + Ui::AbsenceDialog *ui; +}; diff --git a/plugins/absenceplugin/absencedialog.ui b/plugins/absenceplugin/absencedialog.ui new file mode 100644 index 0000000..4b2e795 --- /dev/null +++ b/plugins/absenceplugin/absencedialog.ui @@ -0,0 +1,71 @@ + + + + + AbsenceDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + buttonBox + accepted() + AbsenceDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AbsenceDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index 8528f50..4c1eaed 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -18,13 +18,16 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += \ absenceplugin.h \ - absencewidget.h + absencewidget.h \ + absencedialog.h SOURCES += \ absenceplugin.cpp \ - absencewidget.cpp + absencewidget.cpp \ + absencedialog.cpp -FORMS += +FORMS += \ + absencedialog.ui RESOURCES += absenceplugin_resources.qrc diff --git a/plugins/absenceplugin/absencewidget.cpp b/plugins/absenceplugin/absencewidget.cpp index 6ce81a3..911e2c4 100644 --- a/plugins/absenceplugin/absencewidget.cpp +++ b/plugins/absenceplugin/absencewidget.cpp @@ -1,8 +1,18 @@ #include "absencewidget.h" +#include "absencedialog.h" + AbsenceWidget::AbsenceWidget(QWidget *parent) : QToolButton(parent) { setIcon(QIcon(QStringLiteral(":/zeiterfassung/plugins/absenceplugin/images/absence.png"))); setText(tr("Absence")); + + connect(this, &QAbstractButton::pressed, this, &AbsenceWidget::pressedSlot); +} + +void AbsenceWidget::pressedSlot() +{ + AbsenceDialog dialog(this); + dialog.exec(); } diff --git a/plugins/absenceplugin/absencewidget.h b/plugins/absenceplugin/absencewidget.h index b3d9579..eaec751 100644 --- a/plugins/absenceplugin/absencewidget.h +++ b/plugins/absenceplugin/absencewidget.h @@ -1,5 +1,4 @@ -#ifndef ABSENCEWIDGET_H -#define ABSENCEWIDGET_H +#pragma once #include @@ -9,6 +8,7 @@ class AbsenceWidget : public QToolButton public: explicit AbsenceWidget(QWidget *parent = Q_NULLPTR); -}; -#endif // ABSENCEWIDGET_H +private Q_SLOTS: + void pressedSlot(); +}; -- 2.50.1 From bae2d3af8ae1b98a5cff3cba7614cc6f66aee928 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:01:58 +0100 Subject: [PATCH 09/21] Replaced old #ifndef's with #pragma once's --- plugins/devtoolsplugin/logdialog.h | 5 +---- plugins/devtoolsplugin/logmodel.h | 5 +---- plugins/webradioplugin/webradiodialog.h | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/plugins/devtoolsplugin/logdialog.h b/plugins/devtoolsplugin/logdialog.h index 8f50e2e..1ccd7bf 100644 --- a/plugins/devtoolsplugin/logdialog.h +++ b/plugins/devtoolsplugin/logdialog.h @@ -1,5 +1,4 @@ -#ifndef LOGDIALOG_H -#define LOGDIALOG_H +#pragma once #include @@ -20,5 +19,3 @@ public: private: Ui::LogDialog *ui; }; - -#endif // LOGDIALOG_H diff --git a/plugins/devtoolsplugin/logmodel.h b/plugins/devtoolsplugin/logmodel.h index 75d9eb5..4312fb5 100644 --- a/plugins/devtoolsplugin/logmodel.h +++ b/plugins/devtoolsplugin/logmodel.h @@ -1,5 +1,4 @@ -#ifndef LOGMODEL_H -#define LOGMODEL_H +#pragma once #include #include @@ -35,5 +34,3 @@ private: QList m_entries; }; - -#endif // LOGMODEL_H diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index ed40035..5529756 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -1,5 +1,4 @@ -#ifndef WEBRADIODIALOG_H -#define WEBRADIODIALOG_H +#pragma once #include #include @@ -32,5 +31,3 @@ private: MainWindow &m_mainWindow; QMediaPlayer *m_player; }; - -#endif // WEBRADIODIALOG_H -- 2.50.1 From 7c11cf7d485e2fb84fc9fdf8c14aec4e3f494a9b Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:11:45 +0100 Subject: [PATCH 10/21] Made all reply constructors explicit --- zeiterfassungcorelib/replies/createbookingreply.h | 2 +- zeiterfassungcorelib/replies/createtimeassignmentreply.h | 2 +- zeiterfassungcorelib/replies/deletebookingreply.h | 2 +- zeiterfassungcorelib/replies/deletetimeassignmentreply.h | 2 +- zeiterfassungcorelib/replies/getbookingsreply.h | 2 +- zeiterfassungcorelib/replies/getprojectsreply.h | 2 +- zeiterfassungcorelib/replies/getreportreply.h | 2 +- zeiterfassungcorelib/replies/gettimeassignmentsreply.h | 2 +- zeiterfassungcorelib/replies/getuserinforeply.h | 2 +- zeiterfassungcorelib/replies/loginpagereply.h | 2 +- zeiterfassungcorelib/replies/loginreply.h | 2 +- zeiterfassungcorelib/replies/updatebookingreply.h | 2 +- zeiterfassungcorelib/replies/updatetimeassignmentreply.h | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/zeiterfassungcorelib/replies/createbookingreply.h b/zeiterfassungcorelib/replies/createbookingreply.h index d3527ad..263f099 100644 --- a/zeiterfassungcorelib/replies/createbookingreply.h +++ b/zeiterfassungcorelib/replies/createbookingreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT CreateBookingReply : public Zeiterfassun Q_OBJECT public: - CreateBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit CreateBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/createtimeassignmentreply.h b/zeiterfassungcorelib/replies/createtimeassignmentreply.h index 1b50982..f81e1be 100644 --- a/zeiterfassungcorelib/replies/createtimeassignmentreply.h +++ b/zeiterfassungcorelib/replies/createtimeassignmentreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT CreateTimeAssignmentReply : public Zeite Q_OBJECT public: - CreateTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit CreateTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); int timeAssignmentId() const; diff --git a/zeiterfassungcorelib/replies/deletebookingreply.h b/zeiterfassungcorelib/replies/deletebookingreply.h index e7bd1a8..6807669 100644 --- a/zeiterfassungcorelib/replies/deletebookingreply.h +++ b/zeiterfassungcorelib/replies/deletebookingreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT DeleteBookingReply : public Zeiterfassun Q_OBJECT public: - DeleteBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit DeleteBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/deletetimeassignmentreply.h b/zeiterfassungcorelib/replies/deletetimeassignmentreply.h index ff65b86..9353ba6 100644 --- a/zeiterfassungcorelib/replies/deletetimeassignmentreply.h +++ b/zeiterfassungcorelib/replies/deletetimeassignmentreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT DeleteTimeAssignmentReply : public Zeite Q_OBJECT public: - DeleteTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit DeleteTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/getbookingsreply.h b/zeiterfassungcorelib/replies/getbookingsreply.h index 2272829..bf3c0ea 100644 --- a/zeiterfassungcorelib/replies/getbookingsreply.h +++ b/zeiterfassungcorelib/replies/getbookingsreply.h @@ -15,7 +15,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT GetBookingsReply : public ZeiterfassungR Q_OBJECT public: - GetBookingsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit GetBookingsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); struct Booking { diff --git a/zeiterfassungcorelib/replies/getprojectsreply.h b/zeiterfassungcorelib/replies/getprojectsreply.h index 6124d63..293b592 100644 --- a/zeiterfassungcorelib/replies/getprojectsreply.h +++ b/zeiterfassungcorelib/replies/getprojectsreply.h @@ -15,7 +15,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT GetProjectsReply : public ZeiterfassungR Q_OBJECT public: - GetProjectsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit GetProjectsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); struct Project { diff --git a/zeiterfassungcorelib/replies/getreportreply.h b/zeiterfassungcorelib/replies/getreportreply.h index aea13e3..6b0bc75 100644 --- a/zeiterfassungcorelib/replies/getreportreply.h +++ b/zeiterfassungcorelib/replies/getreportreply.h @@ -13,7 +13,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT GetReportReply : public ZeiterfassungRep Q_OBJECT public: - GetReportReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit GetReportReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); const QByteArray &content() const; diff --git a/zeiterfassungcorelib/replies/gettimeassignmentsreply.h b/zeiterfassungcorelib/replies/gettimeassignmentsreply.h index cd97149..2ff63ee 100644 --- a/zeiterfassungcorelib/replies/gettimeassignmentsreply.h +++ b/zeiterfassungcorelib/replies/gettimeassignmentsreply.h @@ -15,7 +15,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT GetTimeAssignmentsReply : public Zeiterf Q_OBJECT public: - GetTimeAssignmentsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit GetTimeAssignmentsReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); struct TimeAssignment { diff --git a/zeiterfassungcorelib/replies/getuserinforeply.h b/zeiterfassungcorelib/replies/getuserinforeply.h index 7003506..17fdee3 100644 --- a/zeiterfassungcorelib/replies/getuserinforeply.h +++ b/zeiterfassungcorelib/replies/getuserinforeply.h @@ -14,7 +14,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT GetUserInfoReply : public ZeiterfassungR Q_OBJECT public: - GetUserInfoReply(std::unique_ptr &&reply0, std::unique_ptr &&reply1, + explicit GetUserInfoReply(std::unique_ptr &&reply0, std::unique_ptr &&reply1, ZeiterfassungApi *zeiterfassung); struct UserInfo diff --git a/zeiterfassungcorelib/replies/loginpagereply.h b/zeiterfassungcorelib/replies/loginpagereply.h index 0777741..d050555 100644 --- a/zeiterfassungcorelib/replies/loginpagereply.h +++ b/zeiterfassungcorelib/replies/loginpagereply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT LoginPageReply : public ZeiterfassungRep Q_OBJECT public: - LoginPageReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit LoginPageReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/loginreply.h b/zeiterfassungcorelib/replies/loginreply.h index f6f76c4..a0a21e2 100644 --- a/zeiterfassungcorelib/replies/loginreply.h +++ b/zeiterfassungcorelib/replies/loginreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT LoginReply : public ZeiterfassungReply Q_OBJECT public: - LoginReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit LoginReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/updatebookingreply.h b/zeiterfassungcorelib/replies/updatebookingreply.h index 137bd2e..8c37de3 100644 --- a/zeiterfassungcorelib/replies/updatebookingreply.h +++ b/zeiterfassungcorelib/replies/updatebookingreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT UpdateBookingReply : public Zeiterfassun Q_OBJECT public: - UpdateBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit UpdateBookingReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); private Q_SLOTS: void requestFinished(); diff --git a/zeiterfassungcorelib/replies/updatetimeassignmentreply.h b/zeiterfassungcorelib/replies/updatetimeassignmentreply.h index 3bdb59e..5dd3d32 100644 --- a/zeiterfassungcorelib/replies/updatetimeassignmentreply.h +++ b/zeiterfassungcorelib/replies/updatetimeassignmentreply.h @@ -12,7 +12,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT UpdateTimeAssignmentReply : public Zeite Q_OBJECT public: - UpdateTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + explicit UpdateTimeAssignmentReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); int timeAssignmentId() const; -- 2.50.1 From 8a04179ba16a633c513a73564e09a0a8e323225c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:12:08 +0100 Subject: [PATCH 11/21] Fixed dialog parent hirachy --- plugins/advancedviewplugin/advancedviewdialog.cpp | 4 ++-- plugins/advancedviewplugin/advancedviewdialog.h | 2 +- plugins/advancedviewplugin/advancedviewwidget.cpp | 2 +- plugins/lunchmealplugin/lunchmealwidget.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/advancedviewplugin/advancedviewdialog.cpp b/plugins/advancedviewplugin/advancedviewdialog.cpp index c258ae4..f147ab5 100644 --- a/plugins/advancedviewplugin/advancedviewdialog.cpp +++ b/plugins/advancedviewplugin/advancedviewdialog.cpp @@ -21,8 +21,8 @@ #include "models/bookingsmodel.h" #include "models/timeassignmentsmodel.h" -AdvancedViewDialog::AdvancedViewDialog(StripsWidget &stripsWidget) : - QDialog(&stripsWidget.mainWindow()), +AdvancedViewDialog::AdvancedViewDialog(StripsWidget &stripsWidget, QWidget *parent) : + QDialog(parent), ui(new Ui::AdvancedViewDialog), m_stripsWidget(stripsWidget), m_bookingsModel(new BookingsModel(stripsWidget, this)), diff --git a/plugins/advancedviewplugin/advancedviewdialog.h b/plugins/advancedviewplugin/advancedviewdialog.h index da5fd89..5f29b89 100644 --- a/plugins/advancedviewplugin/advancedviewdialog.h +++ b/plugins/advancedviewplugin/advancedviewdialog.h @@ -12,7 +12,7 @@ class AdvancedViewDialog : public QDialog Q_OBJECT public: - explicit AdvancedViewDialog(StripsWidget &stripsWidget); + explicit AdvancedViewDialog(StripsWidget &stripsWidget, QWidget *parent = Q_NULLPTR); ~AdvancedViewDialog(); private Q_SLOTS: diff --git a/plugins/advancedviewplugin/advancedviewwidget.cpp b/plugins/advancedviewplugin/advancedviewwidget.cpp index 1c9c56d..be52d8d 100644 --- a/plugins/advancedviewplugin/advancedviewwidget.cpp +++ b/plugins/advancedviewplugin/advancedviewwidget.cpp @@ -25,6 +25,6 @@ void AdvancedViewWidget::dateChanged(const QDate &date) void AdvancedViewWidget::pressedSlot() { - AdvancedViewDialog dialog(m_stripsWidget); + AdvancedViewDialog dialog(m_stripsWidget, this); dialog.exec(); } diff --git a/plugins/lunchmealplugin/lunchmealwidget.cpp b/plugins/lunchmealplugin/lunchmealwidget.cpp index f93b4b5..1e618a1 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.cpp +++ b/plugins/lunchmealplugin/lunchmealwidget.cpp @@ -29,7 +29,7 @@ LunchMealWidget::LunchMealWidget(StripsWidget &stripsWidget) : void LunchMealWidget::pressedSlot() { - LunchMealDialog dialog(m_stripsWidget.date(), m_content, &m_stripsWidget.mainWindow()); + LunchMealDialog dialog(m_stripsWidget.date(), m_content, this); dialog.exec(); } -- 2.50.1 From 24ea0989f5ebbef3e0a4a76197c917f1ee43cde2 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:19:22 +0100 Subject: [PATCH 12/21] Added GetAbsencesReply --- .../replies/getabsencesreply.cpp | 18 ++++++++++ .../replies/getabsencesreply.h | 33 +++++++++++++++++++ zeiterfassungcorelib/zeiterfassungcorelib.pro | 2 ++ 3 files changed, 53 insertions(+) create mode 100644 zeiterfassungcorelib/replies/getabsencesreply.cpp create mode 100644 zeiterfassungcorelib/replies/getabsencesreply.h diff --git a/zeiterfassungcorelib/replies/getabsencesreply.cpp b/zeiterfassungcorelib/replies/getabsencesreply.cpp new file mode 100644 index 0000000..5832afc --- /dev/null +++ b/zeiterfassungcorelib/replies/getabsencesreply.cpp @@ -0,0 +1,18 @@ +#include "getabsencesreply.h" + +GetAbsencesReply::GetAbsencesReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung) : + ZeiterfassungReply(zeiterfassung), + m_reply(std::move(reply)) +{ + connect(m_reply.get(), &QNetworkReply::finished, this, &GetAbsencesReply::requestFinished); +} + +const QVector &GetAbsencesReply::getAbsences() const +{ + return m_absences; +} + +void GetAbsencesReply::requestFinished() +{ + //TODO +} diff --git a/zeiterfassungcorelib/replies/getabsencesreply.h b/zeiterfassungcorelib/replies/getabsencesreply.h new file mode 100644 index 0000000..09ee07a --- /dev/null +++ b/zeiterfassungcorelib/replies/getabsencesreply.h @@ -0,0 +1,33 @@ +#pragma once + +#include + +#include +#include + +#include "zeiterfassungcorelib_global.h" +#include "zeiterfassungreply.h" + +class ZeiterfassungApi; + +class ZEITERFASSUNGCORELIBSHARED_EXPORT GetAbsencesReply : public ZeiterfassungReply +{ + Q_OBJECT + +public: + explicit GetAbsencesReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + + struct Absence + { + //TODO + }; + + const QVector &getAbsences() const; + +private Q_SLOTS: + void requestFinished(); + +private: + std::unique_ptr m_reply; + QVector m_absences; +}; diff --git a/zeiterfassungcorelib/zeiterfassungcorelib.pro b/zeiterfassungcorelib/zeiterfassungcorelib.pro index 8c0d06f..9ba114a 100644 --- a/zeiterfassungcorelib/zeiterfassungcorelib.pro +++ b/zeiterfassungcorelib/zeiterfassungcorelib.pro @@ -20,6 +20,7 @@ SOURCES += timeutils.cpp \ replies/createtimeassignmentreply.cpp \ replies/deletebookingreply.cpp \ replies/deletetimeassignmentreply.cpp \ + replies/getabsencesreply.cpp \ replies/getbookingsreply.cpp \ replies/getpresencestatusreply.cpp \ replies/getprojectsreply.cpp \ @@ -41,6 +42,7 @@ HEADERS += cpp14polyfills.h \ replies/createtimeassignmentreply.h \ replies/deletebookingreply.h \ replies/deletetimeassignmentreply.h \ + replies/getabsencesreply.h \ replies/getbookingsreply.h \ replies/getpresencestatusreply.h \ replies/getprojectsreply.h \ -- 2.50.1 From 46906b3ac30917cd1eb90a010dc78a282d157a0e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:25:34 +0100 Subject: [PATCH 13/21] Implemented doGetAbsences() --- zeiterfassungcorelib/zeiterfassungapi.cpp | 35 ++++++++++++++++------- zeiterfassungcorelib/zeiterfassungapi.h | 2 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/zeiterfassungcorelib/zeiterfassungapi.cpp b/zeiterfassungcorelib/zeiterfassungapi.cpp index 34b11c2..16d0a02 100644 --- a/zeiterfassungcorelib/zeiterfassungapi.cpp +++ b/zeiterfassungcorelib/zeiterfassungapi.cpp @@ -9,20 +9,21 @@ #include #include -#include "replies/createbookingreply.h" -#include "replies/createtimeassignmentreply.h" -#include "replies/deletebookingreply.h" -#include "replies/deletetimeassignmentreply.h" -#include "replies/getreportreply.h" -#include "replies/getbookingsreply.h" -#include "replies/getpresencestatusreply.h" -#include "replies/getprojectsreply.h" -#include "replies/gettimeassignmentsreply.h" #include "replies/loginpagereply.h" #include "replies/loginreply.h" -#include "replies/updatebookingreply.h" -#include "replies/updatetimeassignmentreply.h" #include "replies/getuserinforeply.h" +#include "replies/getbookingsreply.h" +#include "replies/createbookingreply.h" +#include "replies/updatebookingreply.h" +#include "replies/deletebookingreply.h" +#include "replies/gettimeassignmentsreply.h" +#include "replies/createtimeassignmentreply.h" +#include "replies/updatetimeassignmentreply.h" +#include "replies/deletetimeassignmentreply.h" +#include "replies/getprojectsreply.h" +#include "replies/getreportreply.h" +#include "replies/getpresencestatusreply.h" +#include "replies/getabsencesreply.h" //add support for pre cpp14 compilers #include "cpp14polyfills.h" @@ -286,3 +287,15 @@ std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } + +std::unique_ptr ZeiterfassungApi::doGetAbsences(int userId, const QDate &start, const QDate &end) +{ + QNetworkRequest request(QUrl(QStringLiteral("%0json/fulldayAbsences?start=%1&end=%2&pnrLst=%3") + .arg(m_url) + .arg(start.toString(QStringLiteral("yyyyMMdd"))) + .arg(end.toString(QStringLiteral("yyyyMMdd"))) + .arg(userId))); + request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); + + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); +} diff --git a/zeiterfassungcorelib/zeiterfassungapi.h b/zeiterfassungcorelib/zeiterfassungapi.h index b1320ee..8af9b71 100644 --- a/zeiterfassungcorelib/zeiterfassungapi.h +++ b/zeiterfassungcorelib/zeiterfassungapi.h @@ -25,6 +25,7 @@ class DeleteTimeAssignmentReply; class GetProjectsReply; class GetReportReply; class GetPresenceStatusReply; +class GetAbsencesReply; class ZEITERFASSUNGCORELIBSHARED_EXPORT ZeiterfassungApi : public QObject { @@ -63,6 +64,7 @@ public: std::unique_ptr doGetProjects(int userId, const QDate &date); std::unique_ptr doGetReport(int userId, const QDate &date); std::unique_ptr doGetPresenceStatus(); + std::unique_ptr doGetAbsences(int userId, const QDate &start, const QDate &end); private: QString m_url; -- 2.50.1 From 346b63b168bf3fb3d818504e160112ea8f8bb3e0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 17:38:36 +0100 Subject: [PATCH 14/21] Added view to AbsenceDialog and added translations --- plugins/absenceplugin/absencedialog.cpp | 12 ++++- plugins/absenceplugin/absencedialog.h | 4 +- plugins/absenceplugin/absencedialog.ui | 50 +++++++++++-------- plugins/absenceplugin/absenceplugin.cpp | 2 +- plugins/absenceplugin/absenceplugin.pro | 16 +++--- plugins/absenceplugin/absencewidget.cpp | 9 ++-- plugins/absenceplugin/absencewidget.h | 7 ++- .../translations/absenceplugin_de.ts | 30 +++++++++++ .../translations/absenceplugin_en.ts | 30 +++++++++++ 9 files changed, 123 insertions(+), 37 deletions(-) create mode 100644 plugins/absenceplugin/translations/absenceplugin_de.ts create mode 100644 plugins/absenceplugin/translations/absenceplugin_en.ts diff --git a/plugins/absenceplugin/absencedialog.cpp b/plugins/absenceplugin/absencedialog.cpp index 0b8faf8..f80265a 100644 --- a/plugins/absenceplugin/absencedialog.cpp +++ b/plugins/absenceplugin/absencedialog.cpp @@ -1,11 +1,21 @@ #include "absencedialog.h" #include "ui_absencedialog.h" -AbsenceDialog::AbsenceDialog(QWidget *parent) : +#include + +AbsenceDialog::AbsenceDialog(const QDate &date, QWidget *parent) : QDialog(parent), ui(new Ui::AbsenceDialog) { ui->setupUi(this); + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)) + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +#endif + + ui->labelTitle->setText(tr("Absences for %0").arg(date.toString(tr("dd.MM.yyyy")))); } AbsenceDialog::~AbsenceDialog() diff --git a/plugins/absenceplugin/absencedialog.h b/plugins/absenceplugin/absencedialog.h index 37cdb10..ceecb15 100644 --- a/plugins/absenceplugin/absencedialog.h +++ b/plugins/absenceplugin/absencedialog.h @@ -2,6 +2,8 @@ #include +class QDate; + namespace Ui { class AbsenceDialog; } class AbsenceDialog : public QDialog @@ -9,7 +11,7 @@ class AbsenceDialog : public QDialog Q_OBJECT public: - explicit AbsenceDialog(QWidget *parent = 0); + explicit AbsenceDialog(const QDate &date, QWidget *parent = 0); ~AbsenceDialog(); private: diff --git a/plugins/absenceplugin/absencedialog.ui b/plugins/absenceplugin/absencedialog.ui index 4b2e795..41582c0 100644 --- a/plugins/absenceplugin/absencedialog.ui +++ b/plugins/absenceplugin/absencedialog.ui @@ -1,7 +1,5 @@ + - - - AbsenceDialog @@ -13,26 +11,36 @@ - Dialog + Absences - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + + 16 + + + + Absences for + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + - diff --git a/plugins/absenceplugin/absenceplugin.cpp b/plugins/absenceplugin/absenceplugin.cpp index ecaa8b0..2e09928 100644 --- a/plugins/absenceplugin/absenceplugin.cpp +++ b/plugins/absenceplugin/absenceplugin.cpp @@ -34,5 +34,5 @@ AbsencePlugin::AbsencePlugin(QObject *parent) : void AbsencePlugin::attachTo(MainWindow &mainWindow) { for(auto stripsWidget : mainWindow.stripsWidgets()) - stripsWidget->headerLayout()->addWidget(new AbsenceWidget(stripsWidget)); + stripsWidget->headerLayout()->addWidget(new AbsenceWidget(*stripsWidget)); } diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index 4c1eaed..464f5ed 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -16,22 +16,20 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT -HEADERS += \ +HEADERS += absencedialog.h \ absenceplugin.h \ - absencewidget.h \ - absencedialog.h + absencewidget.h -SOURCES += \ +SOURCES += absencedialog.cpp \ absenceplugin.cpp \ - absencewidget.cpp \ - absencedialog.cpp + absencewidget.cpp -FORMS += \ - absencedialog.ui +FORMS += absencedialog.ui RESOURCES += absenceplugin_resources.qrc -TRANSLATIONS += +TRANSLATIONS += translations/absenceplugin_en.ts \ + translations/absenceplugin_de.ts OTHER_FILES += absenceplugin.json diff --git a/plugins/absenceplugin/absencewidget.cpp b/plugins/absenceplugin/absencewidget.cpp index 911e2c4..4e83ec9 100644 --- a/plugins/absenceplugin/absencewidget.cpp +++ b/plugins/absenceplugin/absencewidget.cpp @@ -1,9 +1,12 @@ #include "absencewidget.h" +#include "stripswidget.h" + #include "absencedialog.h" -AbsenceWidget::AbsenceWidget(QWidget *parent) : - QToolButton(parent) +AbsenceWidget::AbsenceWidget(StripsWidget &stripsWidget) : + QToolButton(&stripsWidget), + m_stripsWidget(stripsWidget) { setIcon(QIcon(QStringLiteral(":/zeiterfassung/plugins/absenceplugin/images/absence.png"))); setText(tr("Absence")); @@ -13,6 +16,6 @@ AbsenceWidget::AbsenceWidget(QWidget *parent) : void AbsenceWidget::pressedSlot() { - AbsenceDialog dialog(this); + AbsenceDialog dialog(m_stripsWidget.date(), this); dialog.exec(); } diff --git a/plugins/absenceplugin/absencewidget.h b/plugins/absenceplugin/absencewidget.h index eaec751..a93cc34 100644 --- a/plugins/absenceplugin/absencewidget.h +++ b/plugins/absenceplugin/absencewidget.h @@ -2,13 +2,18 @@ #include +class StripsWidget; + class AbsenceWidget : public QToolButton { Q_OBJECT public: - explicit AbsenceWidget(QWidget *parent = Q_NULLPTR); + explicit AbsenceWidget(StripsWidget &stripsWidget); private Q_SLOTS: void pressedSlot(); + +private: + StripsWidget &m_stripsWidget; }; diff --git a/plugins/absenceplugin/translations/absenceplugin_de.ts b/plugins/absenceplugin/translations/absenceplugin_de.ts new file mode 100644 index 0000000..a2ffce7 --- /dev/null +++ b/plugins/absenceplugin/translations/absenceplugin_de.ts @@ -0,0 +1,30 @@ + + + + + AbsenceDialog + + + Absences + Abwesenheiten + + + + Absences for %0 + Abwesenheiten für %0 + + + + dd.MM.yyyy + dd.MM.yyyy + + + + AbsenceWidget + + + Absence + Abwesenheit + + + diff --git a/plugins/absenceplugin/translations/absenceplugin_en.ts b/plugins/absenceplugin/translations/absenceplugin_en.ts new file mode 100644 index 0000000..a6f27b3 --- /dev/null +++ b/plugins/absenceplugin/translations/absenceplugin_en.ts @@ -0,0 +1,30 @@ + + + + + AbsenceDialog + + + Absences + + + + + Absences for %0 + + + + + dd.MM.yyyy + + + + + AbsenceWidget + + + Absence + + + + -- 2.50.1 From 0a96e22c66ea4d6c0bbc1c7769f4751733e749bd Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 21:17:51 +0100 Subject: [PATCH 15/21] Fixed crash on app close in webradiodialog --- plugins/webradioplugin/webradiodialog.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 49d7ce3..0614825 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -7,8 +7,7 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : QDialog(&mainWindow), ui(new Ui::WebRadioDialog), - m_mainWindow(mainWindow), - m_player(new QMediaPlayer(this)) + m_mainWindow(mainWindow) { ui->setupUi(this); @@ -18,6 +17,7 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); #endif + m_player = new QMediaPlayer(this); connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets); connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); @@ -65,6 +65,13 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : WebRadioDialog::~WebRadioDialog() { + // To avoid crash on app close + disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); + disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets); + disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); + disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets); + disconnect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error); + delete ui; } -- 2.50.1 From d624ca9719adbf6ce11e78cd875ccf0039a1ab70 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 28 Dec 2017 23:15:35 +0100 Subject: [PATCH 16/21] Fixed race condition with model not being assigned. --- plugins/devtoolsplugin/devtoolsplugin.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/devtoolsplugin/devtoolsplugin.cpp b/plugins/devtoolsplugin/devtoolsplugin.cpp index 3174313..58a1555 100644 --- a/plugins/devtoolsplugin/devtoolsplugin.cpp +++ b/plugins/devtoolsplugin/devtoolsplugin.cpp @@ -21,13 +21,12 @@ void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const Q { previousHandler(type, context, message); - if(!model) - model = std::make_shared(); model->log(type, context.file, context.line, context.function, context.category, message); } void registerMessageHandler() { + model = std::make_shared(); previousHandler = qInstallMessageHandler(myMessageHandler); } @@ -58,5 +57,5 @@ void DevToolsPlugin::attachTo(MainWindow &mainWindow) auto dialog = new LogDialog(&mainWindow); dialog->setModel(model.get()); mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/devtoolsplugin/images/dev-tools.png")), - tr("Show log"), dialog, &QDialog::open); + tr("Show log"), dialog, &QWidget::show); } -- 2.50.1 From ac7ab6639e147ab859f5647f023024f80531d673 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 01:56:17 +0100 Subject: [PATCH 17/21] Added AbsencesModel --- plugins/absenceplugin/absencedialog.cpp | 6 ++- plugins/absenceplugin/absencedialog.h | 4 +- plugins/absenceplugin/absenceplugin.pro | 2 + plugins/absenceplugin/absencesmodel.cpp | 49 +++++++++++++++++++++++++ plugins/absenceplugin/absencesmodel.h | 42 +++++++++++++++++++++ plugins/absenceplugin/absencewidget.cpp | 4 +- 6 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 plugins/absenceplugin/absencesmodel.cpp create mode 100644 plugins/absenceplugin/absencesmodel.h diff --git a/plugins/absenceplugin/absencedialog.cpp b/plugins/absenceplugin/absencedialog.cpp index f80265a..5b92c91 100644 --- a/plugins/absenceplugin/absencedialog.cpp +++ b/plugins/absenceplugin/absencedialog.cpp @@ -3,7 +3,9 @@ #include -AbsenceDialog::AbsenceDialog(const QDate &date, QWidget *parent) : +#include "absencesmodel.h" + +AbsenceDialog::AbsenceDialog(int userId, const QDate &date, ZeiterfassungApi &erfassung, QWidget *parent) : QDialog(parent), ui(new Ui::AbsenceDialog) { @@ -16,6 +18,8 @@ AbsenceDialog::AbsenceDialog(const QDate &date, QWidget *parent) : #endif ui->labelTitle->setText(tr("Absences for %0").arg(date.toString(tr("dd.MM.yyyy")))); + + ui->treeView->setModel(new AbsencesModel(userId, date, erfassung, this)); } AbsenceDialog::~AbsenceDialog() diff --git a/plugins/absenceplugin/absencedialog.h b/plugins/absenceplugin/absencedialog.h index ceecb15..0f2b51a 100644 --- a/plugins/absenceplugin/absencedialog.h +++ b/plugins/absenceplugin/absencedialog.h @@ -4,6 +4,8 @@ class QDate; +class ZeiterfassungApi; + namespace Ui { class AbsenceDialog; } class AbsenceDialog : public QDialog @@ -11,7 +13,7 @@ class AbsenceDialog : public QDialog Q_OBJECT public: - explicit AbsenceDialog(const QDate &date, QWidget *parent = 0); + explicit AbsenceDialog(int userId, const QDate &date, ZeiterfassungApi &erfassung, QWidget *parent = 0); ~AbsenceDialog(); private: diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index 464f5ed..d938567 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -17,10 +17,12 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += absencedialog.h \ + absencesmodel.h \ absenceplugin.h \ absencewidget.h SOURCES += absencedialog.cpp \ + absencesmodel.cpp \ absenceplugin.cpp \ absencewidget.cpp diff --git a/plugins/absenceplugin/absencesmodel.cpp b/plugins/absenceplugin/absencesmodel.cpp new file mode 100644 index 0000000..f302efc --- /dev/null +++ b/plugins/absenceplugin/absencesmodel.cpp @@ -0,0 +1,49 @@ +#include "absencesmodel.h" + +#include "zeiterfassungapi.h" + +AbsencesModel::AbsencesModel(int userId, const QDate &date, ZeiterfassungApi &erfassung, QObject *parent) : + QAbstractListModel(parent), + m_userId(userId), + m_erfassung(erfassung) +{ + setDate(date); +} + +bool AbsencesModel::enabled() const +{ + return m_reply == Q_NULLPTR; +} + +int AbsencesModel::rowCount(const QModelIndex &parent) const +{ + +} + +int AbsencesModel::columnCount(const QModelIndex &parent) const +{ + +} + +QVariant AbsencesModel::data(const QModelIndex &index, int role) const +{ + +} + +QVariant AbsencesModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + +} + +void AbsencesModel::setDate(const QDate &date) +{ + m_date = date; + + m_reply = m_erfassung.doGetAbsences(m_userId, m_date, m_date); + connect(m_reply.get(), &ZeiterfassungReply::finished, this, &AbsencesModel::finished); +} + +void AbsencesModel::finished() +{ + +} diff --git a/plugins/absenceplugin/absencesmodel.h b/plugins/absenceplugin/absencesmodel.h new file mode 100644 index 0000000..92541a3 --- /dev/null +++ b/plugins/absenceplugin/absencesmodel.h @@ -0,0 +1,42 @@ +#pragma once + +#include + +#include +#include + +#include "replies/getabsencesreply.h" + +class ZeiterfassungApi; + +class AbsencesModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged) + +public: + explicit AbsencesModel(int userId, const QDate &date, ZeiterfassungApi &erfassung, QObject *parent = Q_NULLPTR); + + bool enabled() const; + + // QAbstractItemModel interface + int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE; + int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE; + QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; + QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE; + +Q_SIGNALS: + void enabledChanged(bool enabled); + +public Q_SLOTS: + void setDate(const QDate &date); + +private Q_SLOTS: + void finished(); + +private: + int m_userId; + QDate m_date; + ZeiterfassungApi &m_erfassung; + std::unique_ptr m_reply; +}; diff --git a/plugins/absenceplugin/absencewidget.cpp b/plugins/absenceplugin/absencewidget.cpp index 4e83ec9..444f87f 100644 --- a/plugins/absenceplugin/absencewidget.cpp +++ b/plugins/absenceplugin/absencewidget.cpp @@ -1,6 +1,7 @@ #include "absencewidget.h" #include "stripswidget.h" +#include "mainwindow.h" #include "absencedialog.h" @@ -16,6 +17,7 @@ AbsenceWidget::AbsenceWidget(StripsWidget &stripsWidget) : void AbsenceWidget::pressedSlot() { - AbsenceDialog dialog(m_stripsWidget.date(), this); + AbsenceDialog dialog(m_stripsWidget.mainWindow().userInfo().userId, m_stripsWidget.date(), + m_stripsWidget.mainWindow().erfassung(), this); dialog.exec(); } -- 2.50.1 From 5d477e37891ad96609f1fe9c0a75644ecdabcc40 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 01:58:15 +0100 Subject: [PATCH 18/21] Implemented GetAbsencesReply --- .../replies/getabsencesreply.cpp | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/zeiterfassungcorelib/replies/getabsencesreply.cpp b/zeiterfassungcorelib/replies/getabsencesreply.cpp index 5832afc..a3340d3 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.cpp +++ b/zeiterfassungcorelib/replies/getabsencesreply.cpp @@ -1,5 +1,14 @@ #include "getabsencesreply.h" +#include +#include +#include +#include +#include +#include + +#include "zeiterfassungapi.h" + GetAbsencesReply::GetAbsencesReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung) : ZeiterfassungReply(zeiterfassung), m_reply(std::move(reply)) @@ -14,5 +23,55 @@ const QVector &GetAbsencesReply::getAbsences() const void GetAbsencesReply::requestFinished() { - //TODO + if(m_reply->error() != QNetworkReply::NoError) + { + setSuccess(false); + setMessage(tr("Request error occured: %0").arg(m_reply->errorString())); + goto end; + } + + { + QJsonParseError error; + QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll(), &error); + if(error.error != QJsonParseError::NoError) + { + setSuccess(false); + setMessage(tr("Parsing JSON failed: %0").arg(error.errorString())); + goto end; + } + + if(!document.isArray()) + { + setSuccess(false); + setMessage(tr("JSON document is not an array!")); + goto end; + } + + auto arr = document.array(); + + setSuccess(true); + m_absences.clear(); + m_absences.reserve(arr.count()); + for(const auto &val : arr) + { + auto obj = val.toObject(); + + m_absences.append({ + obj.value(QStringLiteral("altRepresentative")).toInt(), + obj.value(QStringLiteral("compositeId")).toString(), + QDate::fromString(QString::number(obj.value(QStringLiteral("end")).toInt()), QStringLiteral("yyyyMMdd")), + obj.value(QStringLiteral("hourCategory")).toString(), + obj.value(QStringLiteral("openMarking")).toString(), + obj.value(QStringLiteral("persNr")).toInt(), + obj.value(QStringLiteral("representative")).toInt(), + QDate::fromString(QString::number(obj.value(QStringLiteral("start")).toInt()), QStringLiteral("yyyyMMdd")), + obj.value(QStringLiteral("text")).toString() + }); + } + } + + end: + m_reply = Q_NULLPTR; + + Q_EMIT finished(); } -- 2.50.1 From eaee8131cbc0a0472d06f35e58ada0d8bf3f84e4 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 02:00:36 +0100 Subject: [PATCH 19/21] Fixed various missing includes --- plugins/lunchmealplugin/lunchmealwidget.cpp | 2 -- plugins/presenceplugin/presencewidget.cpp | 3 ++- plugins/reportsplugin/reportswidget.cpp | 1 + plugins/weatherplugin/weatherwidget.cpp | 3 +-- zeiterfassungcorelib/replies/getabsencesreply.h | 12 +++++++++++- zeiterfassungcorelib/replies/getbookingsreply.h | 1 + .../replies/gettimeassignmentsreply.h | 2 ++ zeiterfassungcorelib/replies/getuserinforeply.h | 2 ++ 8 files changed, 20 insertions(+), 6 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealwidget.cpp b/plugins/lunchmealplugin/lunchmealwidget.cpp index f93b4b5..62efaa9 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.cpp +++ b/plugins/lunchmealplugin/lunchmealwidget.cpp @@ -35,8 +35,6 @@ void LunchMealWidget::pressedSlot() void LunchMealWidget::dateChanged(const QDate &date) { - qDebug() << "called"; - setEnabled(false); setVisible(false); diff --git a/plugins/presenceplugin/presencewidget.cpp b/plugins/presenceplugin/presencewidget.cpp index 190476d..ee7ddbb 100644 --- a/plugins/presenceplugin/presencewidget.cpp +++ b/plugins/presenceplugin/presencewidget.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -71,7 +72,7 @@ void PresenceWidget::finished() icon = QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/not-present.png")); } else - qWarning() << "unknown presence" << status.firstName << status.lastName << status.presence; + qCritical() << "unknown presence" << status.firstName << status.lastName << status.presence; m_menu->addAction(icon, tr("%0 %1").arg(status.firstName).arg(status.lastName)); } diff --git a/plugins/reportsplugin/reportswidget.cpp b/plugins/reportsplugin/reportswidget.cpp index b5292a1..30eba00 100644 --- a/plugins/reportsplugin/reportswidget.cpp +++ b/plugins/reportsplugin/reportswidget.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include diff --git a/plugins/weatherplugin/weatherwidget.cpp b/plugins/weatherplugin/weatherwidget.cpp index 4bdb88d..764bf99 100644 --- a/plugins/weatherplugin/weatherwidget.cpp +++ b/plugins/weatherplugin/weatherwidget.cpp @@ -3,8 +3,7 @@ #include #include #include -#include -#include +#include #include #include #include diff --git a/zeiterfassungcorelib/replies/getabsencesreply.h b/zeiterfassungcorelib/replies/getabsencesreply.h index 09ee07a..349714c 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.h +++ b/zeiterfassungcorelib/replies/getabsencesreply.h @@ -2,6 +2,8 @@ #include +#include +#include #include #include @@ -19,7 +21,15 @@ public: struct Absence { - //TODO + int altRepresentative; + QString compositeId; + QDate end; + QString hourCategory; + QString openMarking; + int persNr; + int representative; + QDate start; + QString text; }; const QVector &getAbsences() const; diff --git a/zeiterfassungcorelib/replies/getbookingsreply.h b/zeiterfassungcorelib/replies/getbookingsreply.h index 2272829..adb2836 100644 --- a/zeiterfassungcorelib/replies/getbookingsreply.h +++ b/zeiterfassungcorelib/replies/getbookingsreply.h @@ -2,6 +2,7 @@ #include +#include #include #include diff --git a/zeiterfassungcorelib/replies/gettimeassignmentsreply.h b/zeiterfassungcorelib/replies/gettimeassignmentsreply.h index cd97149..46a1cb5 100644 --- a/zeiterfassungcorelib/replies/gettimeassignmentsreply.h +++ b/zeiterfassungcorelib/replies/gettimeassignmentsreply.h @@ -2,6 +2,8 @@ #include +#include +#include #include #include diff --git a/zeiterfassungcorelib/replies/getuserinforeply.h b/zeiterfassungcorelib/replies/getuserinforeply.h index 7003506..0f4ecd5 100644 --- a/zeiterfassungcorelib/replies/getuserinforeply.h +++ b/zeiterfassungcorelib/replies/getuserinforeply.h @@ -2,6 +2,8 @@ #include +#include +#include #include #include "zeiterfassungcorelib_global.h" -- 2.50.1 From 582afff664ffd77b157d70520ca7b4d6455ab76c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 02:21:34 +0100 Subject: [PATCH 20/21] Implemented AbsenceModel --- plugins/absenceplugin/absencedialog.ui | 2 +- plugins/absenceplugin/absencesmodel.cpp | 66 +++++++++++++++++++ plugins/absenceplugin/absencesmodel.h | 2 + .../replies/getabsencesreply.cpp | 2 +- .../replies/getabsencesreply.h | 2 +- 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/plugins/absenceplugin/absencedialog.ui b/plugins/absenceplugin/absencedialog.ui index 41582c0..eb6a823 100644 --- a/plugins/absenceplugin/absencedialog.ui +++ b/plugins/absenceplugin/absencedialog.ui @@ -6,7 +6,7 @@ 0 0 - 400 + 947 300 diff --git a/plugins/absenceplugin/absencesmodel.cpp b/plugins/absenceplugin/absencesmodel.cpp index f302efc..77a0043 100644 --- a/plugins/absenceplugin/absencesmodel.cpp +++ b/plugins/absenceplugin/absencesmodel.cpp @@ -17,33 +17,99 @@ bool AbsencesModel::enabled() const int AbsencesModel::rowCount(const QModelIndex &parent) const { + Q_UNUSED(parent) + return m_absences.count(); } int AbsencesModel::columnCount(const QModelIndex &parent) const { + Q_UNUSED(parent) + return 9; } QVariant AbsencesModel::data(const QModelIndex &index, int role) const { + Q_ASSERT(index.row() < m_absences.count()); + const auto &absence = m_absences.at(index.row()); + switch(role) + { + case Qt::DisplayRole: + case Qt::EditRole: + switch(index.column()) + { + case 0: return absence.altRepresentative; + case 1: return absence.compositeId; + case 2: return absence.end; + case 3: return absence.hourCategory; + case 4: return absence.openMarking; + case 5: return absence.persNr; + case 6: return absence.representative; + case 7: return absence.start; + case 8: return absence.text; + } + } + + return QVariant(); } QVariant AbsencesModel::headerData(int section, Qt::Orientation orientation, int role) const { + switch(orientation) + { + case Qt::Horizontal: + switch(role) + { + case Qt::DisplayRole: + case Qt::EditRole: + switch(section) + { + case 0: return tr("altRepresentative"); + case 1: return tr("compositeId"); + case 2: return tr("end"); + case 3: return tr("hourCategory"); + case 4: return tr("openMarking"); + case 5: return tr("persNr"); + case 6: return tr("representative"); + case 7: return tr("start"); + case 8: return tr("text"); + } + } + default: + qt_noop(); + } + return QVariant(); } void AbsencesModel::setDate(const QDate &date) { m_date = date; + auto oldEnabled = enabled(); + m_reply = m_erfassung.doGetAbsences(m_userId, m_date, m_date); connect(m_reply.get(), &ZeiterfassungReply::finished, this, &AbsencesModel::finished); + + if(oldEnabled != enabled()) + Q_EMIT enabledChanged(enabled()); } void AbsencesModel::finished() { + if(!m_reply->success()) + Q_EMIT errorOccured(m_reply->message()); + beginResetModel(); + m_absences = m_reply->absences(); + endResetModel(); + + auto oldEnabled = enabled(); + + m_reply = Q_NULLPTR; + + if(oldEnabled != enabled()) + Q_EMIT enabledChanged(enabled()); } diff --git a/plugins/absenceplugin/absencesmodel.h b/plugins/absenceplugin/absencesmodel.h index 92541a3..0353e5e 100644 --- a/plugins/absenceplugin/absencesmodel.h +++ b/plugins/absenceplugin/absencesmodel.h @@ -27,6 +27,7 @@ public: Q_SIGNALS: void enabledChanged(bool enabled); + void errorOccured(const QString &message); public Q_SLOTS: void setDate(const QDate &date); @@ -39,4 +40,5 @@ private: QDate m_date; ZeiterfassungApi &m_erfassung; std::unique_ptr m_reply; + QVector m_absences; }; diff --git a/zeiterfassungcorelib/replies/getabsencesreply.cpp b/zeiterfassungcorelib/replies/getabsencesreply.cpp index a3340d3..107adc6 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.cpp +++ b/zeiterfassungcorelib/replies/getabsencesreply.cpp @@ -16,7 +16,7 @@ GetAbsencesReply::GetAbsencesReply(std::unique_ptr &&reply, Zeite connect(m_reply.get(), &QNetworkReply::finished, this, &GetAbsencesReply::requestFinished); } -const QVector &GetAbsencesReply::getAbsences() const +const QVector &GetAbsencesReply::absences() const { return m_absences; } diff --git a/zeiterfassungcorelib/replies/getabsencesreply.h b/zeiterfassungcorelib/replies/getabsencesreply.h index 349714c..1a8cbf4 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.h +++ b/zeiterfassungcorelib/replies/getabsencesreply.h @@ -32,7 +32,7 @@ public: QString text; }; - const QVector &getAbsences() const; + const QVector &absences() const; private Q_SLOTS: void requestFinished(); -- 2.50.1 From a5df54c003a3249a0f9c1036e26c2e7c821fd969 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 02:31:23 +0100 Subject: [PATCH 21/21] Absences view not gets disables while loading --- plugins/absenceplugin/absencedialog.cpp | 14 ++++- plugins/absenceplugin/absencedialog.h | 6 ++ .../translations/absenceplugin_de.ts | 59 ++++++++++++++++++- .../translations/absenceplugin_en.ts | 59 ++++++++++++++++++- 4 files changed, 131 insertions(+), 7 deletions(-) diff --git a/plugins/absenceplugin/absencedialog.cpp b/plugins/absenceplugin/absencedialog.cpp index 5b92c91..a193d00 100644 --- a/plugins/absenceplugin/absencedialog.cpp +++ b/plugins/absenceplugin/absencedialog.cpp @@ -2,6 +2,8 @@ #include "ui_absencedialog.h" #include +#include +#include #include "absencesmodel.h" @@ -19,10 +21,20 @@ AbsenceDialog::AbsenceDialog(int userId, const QDate &date, ZeiterfassungApi &er ui->labelTitle->setText(tr("Absences for %0").arg(date.toString(tr("dd.MM.yyyy")))); - ui->treeView->setModel(new AbsencesModel(userId, date, erfassung, this)); + m_model = new AbsencesModel(userId, date, erfassung, this); + connect(m_model, &AbsencesModel::errorOccured, this, &AbsenceDialog::errorOccured); + + ui->treeView->setModel(m_model); + ui->treeView->setEnabled(m_model->enabled()); + connect(m_model, &AbsencesModel::enabledChanged, ui->treeView, &QWidget::setEnabled); } AbsenceDialog::~AbsenceDialog() { delete ui; } + +void AbsenceDialog::errorOccured(const QString &message) +{ + QMessageBox::warning(this, tr("Could not load absences!"), tr("Could not load absences!") % "\n\n" % message); +} diff --git a/plugins/absenceplugin/absencedialog.h b/plugins/absenceplugin/absencedialog.h index 0f2b51a..b93cbfc 100644 --- a/plugins/absenceplugin/absencedialog.h +++ b/plugins/absenceplugin/absencedialog.h @@ -6,6 +6,7 @@ class QDate; class ZeiterfassungApi; +class AbsencesModel; namespace Ui { class AbsenceDialog; } class AbsenceDialog : public QDialog @@ -16,6 +17,11 @@ public: explicit AbsenceDialog(int userId, const QDate &date, ZeiterfassungApi &erfassung, QWidget *parent = 0); ~AbsenceDialog(); +private Q_SLOTS: + void errorOccured(const QString &message); + private: Ui::AbsenceDialog *ui; + + AbsencesModel *m_model; }; diff --git a/plugins/absenceplugin/translations/absenceplugin_de.ts b/plugins/absenceplugin/translations/absenceplugin_de.ts index a2ffce7..8f0589b 100644 --- a/plugins/absenceplugin/translations/absenceplugin_de.ts +++ b/plugins/absenceplugin/translations/absenceplugin_de.ts @@ -9,22 +9,75 @@ Abwesenheiten - + Absences for %0 Abwesenheiten für %0 - + dd.MM.yyyy dd.MM.yyyy + + + Could not load absences! + Konnte Abwesenheiten nicht laden! + AbsenceWidget - + Absence Abwesenheit + + AbsencesModel + + + altRepresentative + + + + + compositeId + + + + + end + + + + + hourCategory + + + + + openMarking + + + + + persNr + + + + + representative + + + + + start + + + + + text + + + diff --git a/plugins/absenceplugin/translations/absenceplugin_en.ts b/plugins/absenceplugin/translations/absenceplugin_en.ts index a6f27b3..b02f346 100644 --- a/plugins/absenceplugin/translations/absenceplugin_en.ts +++ b/plugins/absenceplugin/translations/absenceplugin_en.ts @@ -9,22 +9,75 @@ - + Absences for %0 - + dd.MM.yyyy + + + Could not load absences! + + AbsenceWidget - + Absence + + AbsencesModel + + + altRepresentative + + + + + compositeId + + + + + end + + + + + hourCategory + + + + + openMarking + + + + + persNr + + + + + representative + + + + + start + + + + + text + + + -- 2.50.1