arbeitszeitrechner/WorkTimeCalculator.cpp
2025-01-24 23:44:59 +01:00

147 lines
5 KiB
C++

#include "WorkTimeCalculator.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QApplication>
#include <QInputDialog>
#include <QSettings>
#include <QMessageBox>
#include <QStyleFactory>
WorkTimeCalculator::WorkTimeCalculator() {
// Hauptlayout
QWidget *mainWidget = new QWidget;
QVBoxLayout *layout = new QVBoxLayout(mainWidget);
mainWidget->setLayout(layout); // Setze das Layout für das Widget
// Einstempelzeit
QLabel *startTimeLabel = new QLabel("Einstempelzeit:");
startTimeEdit = new QTimeEdit;
startTimeEdit->setTime(QTime::currentTime());
layout->addWidget(startTimeLabel);
layout->addWidget(startTimeEdit);
// Pausenzeiten
QLabel *breaksLabel = new QLabel("Pausenzeiten (Minuten):");
layout->addWidget(breaksLabel);
addBreakButton = new QPushButton("Pause hinzufügen");
layout->addWidget(addBreakButton);
breakList = new QListWidget;
layout->addWidget(breakList);
connect(addBreakButton, &QPushButton::clicked, this, &WorkTimeCalculator::addBreak);
// Ausstempelzeit (optional)
includeEndTimeCheckbox = new QCheckBox("Ausstempelzeit angeben");
endTimeEdit = new QTimeEdit;
endTimeEdit->setTime(QTime::currentTime());
endTimeEdit->setVisible(false);
layout->addWidget(includeEndTimeCheckbox);
layout->addWidget(endTimeEdit);
connect(includeEndTimeCheckbox, &QCheckBox::toggled, endTimeEdit, &QTimeEdit::setVisible);
// Regelarbeitszeit
QLabel *workTimeLabel = new QLabel("Regelarbeitszeit (Std:Min):");
layout->addWidget(workTimeLabel);
dailyHoursSpin = new QSpinBox;
dailyHoursSpin->setRange(0, 24);
dailyMinutesSpin = new QSpinBox;
dailyMinutesSpin->setRange(0, 59);
QHBoxLayout *workTimeLayout = new QHBoxLayout();
workTimeLayout->addWidget(dailyHoursSpin);
workTimeLayout->addWidget(dailyMinutesSpin);
layout->addLayout(workTimeLayout);
// Berechnung starten
calculateButton = new QPushButton("Berechnung starten");
layout->addWidget(calculateButton);
resultLabel = new QLabel;
layout->addWidget(resultLabel);
connect(calculateButton, &QPushButton::clicked, this, &WorkTimeCalculator::calculateWorkTime);
// Dark Mode
qApp->setStyle(QStyleFactory::create("Fusion"));
QPalette darkPalette;
darkPalette.setColor(QPalette::Window, QColor(53, 53, 53));
darkPalette.setColor(QPalette::WindowText, Qt::white);
darkPalette.setColor(QPalette::Base, QColor(25, 25, 25));
darkPalette.setColor(QPalette::AlternateBase, QColor(53, 53, 53));
darkPalette.setColor(QPalette::Text, Qt::white);
darkPalette.setColor(QPalette::Button, QColor(53, 53, 53));
darkPalette.setColor(QPalette::ButtonText, Qt::white);
qApp->setPalette(darkPalette);
setCentralWidget(mainWidget);
setWindowTitle("Arbeitszeitrechner");
loadSettings();
}
WorkTimeCalculator::~WorkTimeCalculator() {
saveSettings();
}
void WorkTimeCalculator::addBreak() {
bool ok;
int breakTime = QInputDialog::getInt(this, "Pause hinzufügen", "Pause (Minuten):", 0, 0, 1440, 1, &ok);
if (ok && breakTime > 0) {
breakList->addItem(QString::number(breakTime) + " Minuten");
}
}
void WorkTimeCalculator::calculateWorkTime() {
QTime startTime = startTimeEdit->time();
int totalBreakMinutes = 0;
for (int i = 0; i < breakList->count(); ++i) {
totalBreakMinutes += breakList->item(i)->text().split(" ")[0].toInt();
}
// Gesamte Pausenzeit anzeigen
QString breakTimeMessage = QString("Gesamte Pausenzeit: %1 Minuten").arg(totalBreakMinutes);
QTime endTime;
if (includeEndTimeCheckbox->isChecked()) {
endTime = endTimeEdit->time();
} else {
// Ausstempelzeit berechnen, wenn nicht angegeben
int dailyMinutes = dailyHoursSpin->value() * 60 + dailyMinutesSpin->value();
endTime = startTime.addSecs((dailyMinutes + totalBreakMinutes) * 60);
}
int workedMinutes = startTime.secsTo(endTime) / 60 - totalBreakMinutes;
int dailyMinutes = dailyHoursSpin->value() * 60 + dailyMinutesSpin->value();
int balanceMinutes = workedMinutes - dailyMinutes;
QString result = QString("Netto-Arbeitszeit: %1 Stunden %2 Minuten\n")
.arg(workedMinutes / 60)
.arg(workedMinutes % 60);
result += QString("Zeitkonto: %1 Minuten\n").arg(balanceMinutes);
result += breakTimeMessage; // Gesamte Pausenzeit hinzufügen
if (!includeEndTimeCheckbox->isChecked()) {
result += QString("\nVorgeschlagene Ausstempelzeit: %1").arg(endTime.toString("hh:mm"));
}
resultLabel->setText(result);
}
void WorkTimeCalculator::loadSettings() {
QSettings settings("ArbeitszeitRechner", "Settings");
dailyHoursSpin->setValue(settings.value("dailyHours", 8).toInt());
dailyMinutesSpin->setValue(settings.value("dailyMinutes", 0).toInt());
}
void WorkTimeCalculator::saveSettings() {
QSettings settings("ArbeitszeitRechner", "Settings");
settings.setValue("dailyHours", dailyHoursSpin->value());
settings.setValue("dailyMinutes", dailyMinutesSpin->value());
}