#include "WorkTimeCalculator.h" #include #include #include #include #include #include #include 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()); }