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
|
||||
-- Verbessert die Performance beim Abrufen von Krankheitseinträgen
|
||||
-- Ausführen mit: mysql -u root -p stechuhr < add-sick-index.sql
|
||||
|
||||
USE stechuhr;
|
||||
-- Ausführen mit: mysql -u root -p timeclock < add-sick-index.sql
|
||||
|
||||
-- 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
|
||||
-- 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
|
||||
ON vacation (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 = 'vacation'
|
||||
AND index_name = 'idx_vacation_user_first_day';
|
||||
|
||||
-- Prüfe ob der Index erstellt wurde
|
||||
SHOW INDEX FROM vacation WHERE Key_name = 'idx_vacation_user_first_day';
|
||||
SET @sql = IF(@index_exists = 0,
|
||||
'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
|
||||
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
|
||||
const weekData = await this.getWeekOverview(uid, 0);
|
||||
|
||||
@@ -783,7 +780,6 @@ class TimeEntryService {
|
||||
regularEnd: null,
|
||||
overtime: overtime, // Überstunden für die aktuelle Woche
|
||||
totalOvertime: totalOvertimeResult.formatted, // Überstunden über den gesamten Zeitraum (timewish-basiert)
|
||||
totalOvertimeOldStyle: totalOvertimeOldStyleResult.formatted, // Überstunden (weekly_worktime-basiert, zum Vergleich)
|
||||
weekWorktime: weekWorktime,
|
||||
nonWorkingHours: nonWorkingHoursFormatted,
|
||||
openForWeek: openForWeekFormatted,
|
||||
|
||||
Reference in New Issue
Block a user