Auto time update #70

Merged
0xFEEDC0DE64 merged 2 commits from auto-time-update into master 2018-02-28 18:48:44 +01:00
2 changed files with 89 additions and 47 deletions

View File

@@ -12,6 +12,8 @@
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QDesktopServices> #include <QDesktopServices>
#include <QRegularExpression> #include <QRegularExpression>
#include <QTimerEvent>
#include <QSignalBlocker>
#include <QDebug> #include <QDebug>
#include "zeiterfassungapi.h" #include "zeiterfassungapi.h"
@@ -33,7 +35,8 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass
m_erfassung(erfassung), m_erfassung(erfassung),
m_userInfo(userInfo), m_userInfo(userInfo),
m_stripFactory(stripFactory), m_stripFactory(stripFactory),
m_currentStripWidget(Q_NULLPTR) m_currentStripWidget(Q_NULLPTR),
m_timerId(-1)
{ {
ui->setupUi(this); 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->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->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())); ui->timeEditTime->setTime(timeNormalise(QTime::currentTime()));
connect(ui->pushButtonNow, &QAbstractButton::pressed, this, &MainWindow::pushButtonNowPressed); 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->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed);
connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed);
m_timerId = startTimer(60000);
for(quint8 i = 0; i < 7; i++) for(quint8 i = 0; i < 7; i++)
{ {
m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek); m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek);
@@ -154,6 +166,17 @@ const std::array<StripsWidget*, 7> &MainWindow::stripsWidgets() const
return m_stripsWidgets; 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() void MainWindow::getProjectsFinished()
{ {
if(m_getProjectsReply->success()) if(m_getProjectsReply->success())
@@ -180,7 +203,11 @@ void MainWindow::pushButtonNowPressed()
void MainWindow::pushButtonStartPressed() 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() || if(m_currentStripWidget->bookings().rbegin() == m_currentStripWidget->bookings().rend() ||
m_currentStripWidget->bookings().rbegin()->type == QStringLiteral("G")) 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()); QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message());
m_currentStripWidget->refresh(); 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(); auto timeAssignmentTime = m_currentStripWidget->timeAssignmentTime();
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, if(m_currentStripWidget->timeAssignments().rbegin() != m_currentStripWidget->timeAssignments().rend())
timeAssignment.time, timespan, {
timeAssignment.project, timeAssignment.subproject, auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin();
timeAssignment.workpackage, timeAssignment.text); 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(); reply->waitForFinished();
if(reply->success()) 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()); QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message());
m_currentStripWidget->refresh(); 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.prependProject(ui->comboBoxProject->currentData().toString());
m_settings.prependSubproject(ui->comboBoxSubproject->currentText()); m_settings.prependSubproject(ui->comboBoxSubproject->currentText());
m_settings.prependWorkpackage(ui->comboBoxWorkpackage->currentText()); m_settings.prependWorkpackage(ui->comboBoxWorkpackage->currentText());
@@ -251,17 +278,22 @@ void MainWindow::pushButtonStartPressed()
updateComboboxes(); updateComboboxes();
if(bookingsChanged) //m_currentStripWidget->refresh();
{ //refreshReport();
m_currentStripWidget->refresh(); Q_EMIT refreshEverything();
//refreshReport();
} after:
else m_timerId = startTimer(60000);
m_currentStripWidget->refreshTimeAssignments();
} }
void MainWindow::pushButtonEndPressed() void MainWindow::pushButtonEndPressed()
{ {
if(m_timerId != -1)
{
killTimer(m_timerId);
m_timerId = -1;
}
{ {
auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin();
Q_ASSERT(timeAssignment.timespan == QTime(0, 0)); 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()); QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message());
m_currentStripWidget->refresh(); 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()); QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message());
m_currentStripWidget->refresh(); m_currentStripWidget->refresh();
return; goto after;
} }
} }
m_currentStripWidget->refresh(); //m_currentStripWidget->refresh();
//refreshReport(); //refreshReport();
Q_EMIT refreshEverything();
after:
m_timerId = startTimer(60000);
} }
void MainWindow::dateChangedSlot(const QDate &date) void MainWindow::dateChangedSlot(const QDate &date)

View File

@@ -50,6 +50,10 @@ Q_SIGNALS:
void dateChanged(const QDate &date); void dateChanged(const QDate &date);
void refreshEverything(); void refreshEverything();
protected:
// QObject interface
virtual void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
private Q_SLOTS: private Q_SLOTS:
void getProjectsFinished(); void getProjectsFinished();
void pushButtonNowPressed(); void pushButtonNowPressed();
@@ -76,4 +80,6 @@ private:
std::array<StripsWidget*, 7> m_stripsWidgets; std::array<StripsWidget*, 7> m_stripsWidgets;
StripsWidget *m_currentStripWidget; StripsWidget *m_currentStripWidget;
int m_timerId;
}; };