diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index c5e10cf..dfd8689 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include "zeiterfassungapi.h" @@ -33,7 +35,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); @@ -58,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); @@ -74,6 +84,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 +166,17 @@ const std::array &MainWindow::stripsWidgets() const return m_stripsWidgets; } +void MainWindow::timerEvent(QTimerEvent *event) +{ + if(event->timerId() == m_timerId) + { + QSignalBlocker blocker(ui->timeEditTime); + ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); + } + else + QMainWindow::timerEvent(event); +} + void MainWindow::getProjectsFinished() { if(m_getProjectsReply->success()) @@ -180,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")) @@ -195,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()); @@ -251,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)); @@ -279,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; } } @@ -294,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) 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; };