Auto time update #70
@@ -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)
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user