From 0b1fa67af4b42c99a2e20a394408ed74ddf162cb Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Wed, 28 Feb 2018 18:34:42 +0100 Subject: [PATCH 1/2] Implemented timer updating time --- zeiterfassungguilib/mainwindow.cpp | 16 +++++++++++++++- zeiterfassungguilib/mainwindow.h | 6 ++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index c5e10cf..b514a4a 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include "zeiterfassungapi.h" @@ -33,7 +34,8 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), - m_currentStripWidget(Q_NULLPTR) + m_currentStripWidget(Q_NULLPTR), + m_timerId(-1) { ui->setupUi(this); @@ -74,6 +76,8 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); + m_timerId = startTimer(60000); + for(quint8 i = 0; i < 7; i++) { m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek); @@ -154,6 +158,16 @@ const std::array &MainWindow::stripsWidgets() const return m_stripsWidgets; } +void MainWindow::timerEvent(QTimerEvent *event) +{ + if(event->timerId() == m_timerId) + { + ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); + } + else + QMainWindow::timerEvent(event); +} + void MainWindow::getProjectsFinished() { if(m_getProjectsReply->success()) diff --git a/zeiterfassungguilib/mainwindow.h b/zeiterfassungguilib/mainwindow.h index 940a71f..2f1666b 100644 --- a/zeiterfassungguilib/mainwindow.h +++ b/zeiterfassungguilib/mainwindow.h @@ -50,6 +50,10 @@ Q_SIGNALS: void dateChanged(const QDate &date); void refreshEverything(); +protected: + // QObject interface + virtual void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; + private Q_SLOTS: void getProjectsFinished(); void pushButtonNowPressed(); @@ -76,4 +80,6 @@ private: std::array m_stripsWidgets; StripsWidget *m_currentStripWidget; + + int m_timerId; }; -- 2.50.1 From d8e86051d27bde4e4d53778effdf2a088e0687d5 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Wed, 28 Feb 2018 18:45:57 +0100 Subject: [PATCH 2/2] Time will not be updated anymore after manual change --- zeiterfassungguilib/mainwindow.cpp | 114 +++++++++++++++++------------ 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index b514a4a..dfd8689 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "zeiterfassungapi.h" @@ -60,6 +61,13 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonPrev, &QAbstractButton::pressed, this, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(-1)); }); connect(ui->pushButtonNext, &QAbstractButton::pressed, this, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(1)); }); + connect(ui->timeEditTime, &QTimeEdit::timeChanged, this, [&](){ + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } + }); ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); connect(ui->pushButtonNow, &QAbstractButton::pressed, this, &MainWindow::pushButtonNowPressed); @@ -162,6 +170,7 @@ void MainWindow::timerEvent(QTimerEvent *event) { if(event->timerId() == m_timerId) { + QSignalBlocker blocker(ui->timeEditTime); ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); } else @@ -194,7 +203,11 @@ void MainWindow::pushButtonNowPressed() void MainWindow::pushButtonStartPressed() { - auto bookingsChanged = false; + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } if(m_currentStripWidget->bookings().rbegin() == m_currentStripWidget->bookings().rend() || m_currentStripWidget->bookings().rbegin()->type == QStringLiteral("G")) @@ -209,55 +222,55 @@ void MainWindow::pushButtonStartPressed() { QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } - - bookingsChanged = true; } - auto timeAssignmentTime = m_currentStripWidget->timeAssignmentTime(); - - if(m_currentStripWidget->timeAssignments().rbegin() != m_currentStripWidget->timeAssignments().rend()) { - auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); - if(timeAssignment.timespan == QTime(0, 0)) - { - auto timespan = timeBetween(m_currentStripWidget->lastTimeAssignmentStart(), ui->timeEditTime->time()); + auto timeAssignmentTime = m_currentStripWidget->timeAssignmentTime(); - auto reply = m_erfassung.doUpdateTimeAssignment(timeAssignment.id, m_userInfo.userId, timeAssignment.date, - timeAssignment.time, timespan, - timeAssignment.project, timeAssignment.subproject, - timeAssignment.workpackage, timeAssignment.text); + if(m_currentStripWidget->timeAssignments().rbegin() != m_currentStripWidget->timeAssignments().rend()) + { + auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); + if(timeAssignment.timespan == QTime(0, 0)) + { + auto timespan = timeBetween(m_currentStripWidget->lastTimeAssignmentStart(), ui->timeEditTime->time()); + + auto reply = m_erfassung.doUpdateTimeAssignment(timeAssignment.id, m_userInfo.userId, timeAssignment.date, + timeAssignment.time, timespan, + timeAssignment.project, timeAssignment.subproject, + timeAssignment.workpackage, timeAssignment.text); + + reply->waitForFinished(); + + if(reply->success()) + timeAssignmentTime = timeAdd(timeAssignmentTime, timespan); + else + { + QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); + m_currentStripWidget->refresh(); + goto after; + } + } + } + + { + auto reply = m_erfassung.doCreateTimeAssignment(m_userInfo.userId, ui->dateEditDate->date(), + timeAssignmentTime, QTime(0, 0), + ui->comboBoxProject->currentData().toString(), ui->comboBoxSubproject->currentText(), + ui->comboBoxWorkpackage->currentText(), ui->comboBoxText->currentText()); reply->waitForFinished(); - if(reply->success()) - timeAssignmentTime = timeAdd(timeAssignmentTime, timespan); - else + if(!reply->success()) { - QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); + QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } } - { - auto reply = m_erfassung.doCreateTimeAssignment(m_userInfo.userId, ui->dateEditDate->date(), - timeAssignmentTime, QTime(0, 0), - ui->comboBoxProject->currentData().toString(), ui->comboBoxSubproject->currentText(), - ui->comboBoxWorkpackage->currentText(), ui->comboBoxText->currentText()); - - reply->waitForFinished(); - - if(!reply->success()) - { - QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message()); - m_currentStripWidget->refresh(); - return; - } - } - m_settings.prependProject(ui->comboBoxProject->currentData().toString()); m_settings.prependSubproject(ui->comboBoxSubproject->currentText()); m_settings.prependWorkpackage(ui->comboBoxWorkpackage->currentText()); @@ -265,17 +278,22 @@ void MainWindow::pushButtonStartPressed() updateComboboxes(); - if(bookingsChanged) - { - m_currentStripWidget->refresh(); - //refreshReport(); - } - else - m_currentStripWidget->refreshTimeAssignments(); + //m_currentStripWidget->refresh(); + //refreshReport(); + Q_EMIT refreshEverything(); + + after: + m_timerId = startTimer(60000); } void MainWindow::pushButtonEndPressed() { + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } + { auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); Q_ASSERT(timeAssignment.timespan == QTime(0, 0)); @@ -293,7 +311,7 @@ void MainWindow::pushButtonEndPressed() { QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } @@ -308,12 +326,16 @@ void MainWindow::pushButtonEndPressed() { QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } - m_currentStripWidget->refresh(); + //m_currentStripWidget->refresh(); //refreshReport(); + Q_EMIT refreshEverything(); + + after: + m_timerId = startTimer(60000); } void MainWindow::dateChangedSlot(const QDate &date) -- 2.50.1