From 3a65f07af2e508e9976412a2e0f3528cb4dd56c0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 13 Dec 2018 23:17:22 +0100 Subject: [PATCH] Implemented begin-end timespan export --- exportdialog.cpp | 61 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/exportdialog.cpp b/exportdialog.cpp index 22e5e5a..ea46d9e 100644 --- a/exportdialog.cpp +++ b/exportdialog.cpp @@ -6,6 +6,9 @@ #include #include +// dbcorelib includes +#include "utils/timeutils.h" + // zeiterfassungcorelib includes #include "utils/timeutils.h" @@ -54,7 +57,7 @@ void ExportDialog::start() m_file = std::move(file); - m_textStream.setDevice(file.get()); + m_textStream.setDevice(m_file.get()); m_date = ui->dateEditFrom->date(); m_toDate = ui->dateEditTo->date(); @@ -74,21 +77,63 @@ void ExportDialog::requestFinished() { ui->progressBar->setValue(ui->progressBar->maximum() - m_date.daysTo(m_toDate)); + const auto date = QLocale().toString(m_date, QLocale::ShortFormat); + + // writes a log line with date prefixed + const auto log = [plainTextEdit=ui->plainTextEdit, &date](const QString &msg){ + plainTextEdit->appendHtml(QStringLiteral("%0 %1
").arg(date, msg)); + }; + if(m_reply->success()) { - for(const auto &booking : m_reply->bookings()) + const auto logBooking = [log](const GetBookingsReply::Booking &booking){ + log(QString("booking %0 %1").arg(QLocale().toString(booking.time), booking.type)); + }; + + int totalSeconds = 0; + + auto iter = m_reply->bookings().constBegin(); + while(true) { - ui->plainTextEdit->appendHtml(QStringLiteral("%0 booking %1 %2
") - .arg(QLocale().toString(m_date, QLocale::ShortFormat), QLocale().toString(booking.time), booking.type)); + if(iter == m_reply->bookings().constEnd()) + break; + + const auto &startBooking = *(iter++); + logBooking(startBooking); + + if(startBooking.type != "K") + { + log("unexpected booking type!"); + break; + } + + if(iter == m_reply->bookings().constEnd()) + { + log("missing end booking!"); + break; + } + + const auto &endBooking = *(iter++); + logBooking(endBooking); + + if(endBooking.type != "G") + { + log("unexpected booking type!"); + break; + } + + totalSeconds += startBooking.time.secsTo(endBooking.time); } - ui->plainTextEdit->appendHtml(QStringLiteral("%0 succeeded!
") - .arg(QLocale().toString(m_date, QLocale::ShortFormat))); + const auto totalTime = QTime(0, 0).addSecs(totalSeconds).toString(QStringLiteral("HH:mm:ss")); + + m_textStream << date << ';' << totalTime << endl; + + log(QString("succeeded (%0)!").arg(totalTime)); } else { - ui->plainTextEdit->appendHtml(QStringLiteral("%0 failed to load: %1
") - .arg(QLocale().toString(m_date, QLocale::ShortFormat), m_reply->message())); + log(QString("failed to load: %1").arg(m_reply->message())); } if(m_date < m_toDate)