Refactor SQL scripts for index creation in sick and vacation tables; implement checks to prevent duplicate index creation and streamline execution process. Update TimeEntryService to remove obsolete overtime calculation method for cleaner code.
This commit is contained in:
@@ -1,11 +1,23 @@
|
|||||||
-- SQL Script: Index zur sick-Tabelle hinzufügen
|
-- SQL Script: Index zur sick-Tabelle hinzufügen
|
||||||
-- Verbessert die Performance beim Abrufen von Krankheitseinträgen
|
-- Verbessert die Performance beim Abrufen von Krankheitseinträgen
|
||||||
-- Ausführen mit: mysql -u root -p stechuhr < add-sick-index.sql
|
-- Ausführen mit: mysql -u root -p timeclock < add-sick-index.sql
|
||||||
|
|
||||||
USE stechuhr;
|
|
||||||
|
|
||||||
-- Index für user_id und first_day (für effiziente Abfragen nach User und Datum)
|
-- Index für user_id und first_day (für effiziente Abfragen nach User und Datum)
|
||||||
CREATE INDEX IF NOT EXISTS idx_sick_user_first_day ON sick (user_id, first_day DESC);
|
-- Prüfe zuerst ob der Index bereits existiert
|
||||||
|
SELECT COUNT(*) INTO @index_exists
|
||||||
|
FROM information_schema.statistics
|
||||||
|
WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'sick'
|
||||||
|
AND index_name = 'idx_sick_user_first_day';
|
||||||
|
|
||||||
SELECT 'Index idx_sick_user_first_day erfolgreich erstellt oder bereits vorhanden.' AS status;
|
SET @sql = IF(@index_exists = 0,
|
||||||
|
'CREATE INDEX idx_sick_user_first_day ON sick (user_id, first_day DESC)',
|
||||||
|
'SELECT "Index idx_sick_user_first_day existiert bereits" AS Info'
|
||||||
|
);
|
||||||
|
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SELECT 'Index idx_sick_user_first_day erfolgreich erstellt oder bereits vorhanden.' AS Status;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
-- Füge Index für vacation Tabelle hinzu
|
-- Füge Index für vacation Tabelle hinzu
|
||||||
-- Optimiert die Abfrage: WHERE user_id = ? AND first_day >= ? ORDER BY first_day DESC
|
-- Optimiert die Abfrage: WHERE user_id = ? AND first_day >= ? ORDER BY first_day DESC
|
||||||
|
-- Ausführen mit: mysql -u root -p timeclock < add-vacation-index.sql
|
||||||
|
|
||||||
CREATE INDEX idx_vacation_user_first_day
|
-- Prüfe zuerst ob der Index bereits existiert
|
||||||
ON vacation (user_id, first_day DESC);
|
SELECT COUNT(*) INTO @index_exists
|
||||||
|
FROM information_schema.statistics
|
||||||
|
WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'vacation'
|
||||||
|
AND index_name = 'idx_vacation_user_first_day';
|
||||||
|
|
||||||
-- Prüfe ob der Index erstellt wurde
|
SET @sql = IF(@index_exists = 0,
|
||||||
SHOW INDEX FROM vacation WHERE Key_name = 'idx_vacation_user_first_day';
|
'CREATE INDEX idx_vacation_user_first_day ON vacation (user_id, first_day DESC)',
|
||||||
|
'SELECT "Index idx_vacation_user_first_day existiert bereits" AS Info'
|
||||||
|
);
|
||||||
|
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SELECT 'Index idx_vacation_user_first_day erfolgreich erstellt oder bereits vorhanden.' AS Status;
|
||||||
|
|
||||||
|
|||||||
46
backend/adjust-overtime-offset-to-3h.sql
Normal file
46
backend/adjust-overtime-offset-to-3h.sql
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
-- Overtime Offset anpassen
|
||||||
|
-- Ziel: Überstunden von 95h auf 3h reduzieren
|
||||||
|
-- Datum: 2025-10-20
|
||||||
|
|
||||||
|
-- Aktuellen Wert anzeigen
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
full_name,
|
||||||
|
overtime_offset_minutes as 'Aktueller Offset (Minuten)',
|
||||||
|
CONCAT(
|
||||||
|
IF(overtime_offset_minutes >= 0, '+', '-'),
|
||||||
|
FLOOR(ABS(overtime_offset_minutes) / 60),
|
||||||
|
':',
|
||||||
|
LPAD(ABS(overtime_offset_minutes) % 60, 2, '0')
|
||||||
|
) as 'Aktueller Offset (formatiert)'
|
||||||
|
FROM user
|
||||||
|
WHERE id = 1;
|
||||||
|
|
||||||
|
-- Berechnung:
|
||||||
|
-- Aktuell: +95h Überstunden (mit Offset +5620 min)
|
||||||
|
-- Gewünscht: +3h Überstunden
|
||||||
|
-- Differenz: 95 - 3 = 92h = 5520 min
|
||||||
|
-- Neuer Offset: 5620 - 5520 = 100 min = +1:40h
|
||||||
|
|
||||||
|
-- Setze neuen Offset
|
||||||
|
UPDATE user
|
||||||
|
SET overtime_offset_minutes = 100
|
||||||
|
WHERE id = 1;
|
||||||
|
|
||||||
|
-- Neuen Wert anzeigen
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
full_name,
|
||||||
|
overtime_offset_minutes as 'Neuer Offset (Minuten)',
|
||||||
|
CONCAT(
|
||||||
|
IF(overtime_offset_minutes >= 0, '+', '-'),
|
||||||
|
FLOOR(ABS(overtime_offset_minutes) / 60),
|
||||||
|
':',
|
||||||
|
LPAD(ABS(overtime_offset_minutes) % 60, 2, '0')
|
||||||
|
) as 'Neuer Offset (formatiert)'
|
||||||
|
FROM user
|
||||||
|
WHERE id = 1;
|
||||||
|
|
||||||
|
SELECT 'Overtime Offset erfolgreich auf +1:40h gesetzt!' AS Status;
|
||||||
|
SELECT 'Überstunden sollten jetzt ca. +3h anzeigen (nach Reload)' AS Hinweis;
|
||||||
|
|
||||||
@@ -462,9 +462,6 @@ class TimeEntryService {
|
|||||||
// Neue Berechnung: Timewish-basiert
|
// Neue Berechnung: Timewish-basiert
|
||||||
const totalOvertimeResult = await this._calculateTotalOvertime(uid, runningEntry);
|
const totalOvertimeResult = await this._calculateTotalOvertime(uid, runningEntry);
|
||||||
|
|
||||||
// Alte Berechnung: weekly_worktime-basiert (zum Vergleich)
|
|
||||||
const totalOvertimeOldStyleResult = await this._calculateTotalOvertimeOldStyle(uid, runningEntry);
|
|
||||||
|
|
||||||
// Berechne Überstunden für die aktuelle Woche
|
// Berechne Überstunden für die aktuelle Woche
|
||||||
const weekData = await this.getWeekOverview(uid, 0);
|
const weekData = await this.getWeekOverview(uid, 0);
|
||||||
|
|
||||||
@@ -783,7 +780,6 @@ class TimeEntryService {
|
|||||||
regularEnd: null,
|
regularEnd: null,
|
||||||
overtime: overtime, // Überstunden für die aktuelle Woche
|
overtime: overtime, // Überstunden für die aktuelle Woche
|
||||||
totalOvertime: totalOvertimeResult.formatted, // Überstunden über den gesamten Zeitraum (timewish-basiert)
|
totalOvertime: totalOvertimeResult.formatted, // Überstunden über den gesamten Zeitraum (timewish-basiert)
|
||||||
totalOvertimeOldStyle: totalOvertimeOldStyleResult.formatted, // Überstunden (weekly_worktime-basiert, zum Vergleich)
|
|
||||||
weekWorktime: weekWorktime,
|
weekWorktime: weekWorktime,
|
||||||
nonWorkingHours: nonWorkingHoursFormatted,
|
nonWorkingHours: nonWorkingHoursFormatted,
|
||||||
openForWeek: openForWeekFormatted,
|
openForWeek: openForWeekFormatted,
|
||||||
|
|||||||
Reference in New Issue
Block a user