Initial commit
This commit is contained in:
parent
4d4ea94522
commit
2407aa35e7
5 changed files with 294 additions and 0 deletions
147
WorkTimeCalculator.cpp
Normal file
147
WorkTimeCalculator.cpp
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
#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());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue