fix: fix reset of entries when switching between weeks
This commit is contained in:
parent
c8b7666971
commit
20ba24001a
5 changed files with 184 additions and 397 deletions
|
|
@ -59,7 +59,6 @@ func createTables(db *sql.DB) {
|
|||
}
|
||||
}
|
||||
|
||||
// Create default admin user (password: admin123)
|
||||
hash, _ := bcrypt.GenerateFromPassword([]byte("admin123"), bcrypt.DefaultCost)
|
||||
_, err := db.Exec(`
|
||||
INSERT OR IGNORE INTO users (id, username, password, is_admin)
|
||||
|
|
@ -140,15 +139,14 @@ func CreateTimeEntry(db *sql.DB, entry *TimeEntry) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// func CreateTimeEntry(db *sql.DB, entry *TimeEntry) error {
|
||||
// _, err := db.Exec("INSERT INTO time_entries (user_id, schedule_id, date, type) VALUES (?, ?, ?, ?)",
|
||||
// entry.UserID, entry.ScheduleID, entry.Date, entry.Type)
|
||||
// return err
|
||||
// }
|
||||
|
||||
func GetTimeEntriesByUser(db *sql.DB, userID int) ([]TimeEntry, error) {
|
||||
rows, err := db.Query("SELECT id, user_id, schedule_id, date, type, created_at FROM time_entries WHERE user_id = ? ORDER BY date DESC, created_at DESC",
|
||||
userID)
|
||||
rows, err := db.Query(`
|
||||
SELECT te.id, te.user_id, te.schedule_id, te.date, te.type, te.start_time, te.end_time, te.created_at, u.username
|
||||
FROM time_entries te
|
||||
JOIN users u ON te.user_id = u.id
|
||||
WHERE te.user_id = ?
|
||||
ORDER BY te.date DESC, te.created_at DESC
|
||||
`, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -157,7 +155,7 @@ func GetTimeEntriesByUser(db *sql.DB, userID int) ([]TimeEntry, error) {
|
|||
var entries []TimeEntry
|
||||
for rows.Next() {
|
||||
var e TimeEntry
|
||||
if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.CreatedAt); err != nil {
|
||||
if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.StartTime, &e.EndTime, &e.CreatedAt, &e.Username); err != nil {
|
||||
continue
|
||||
}
|
||||
entries = append(entries, e)
|
||||
|
|
@ -188,30 +186,22 @@ func GetAllTimeEntries(db *sql.DB) ([]TimeEntry, error) {
|
|||
return entries, nil
|
||||
}
|
||||
|
||||
// func GetAllTimeEntries(db *sql.DB) ([]TimeEntry, error) {
|
||||
// rows, err := db.Query("SELECT id, user_id, schedule_id, date, type, created_at FROM time_entries ORDER BY date DESC, created_at DESC")
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// defer rows.Close()
|
||||
|
||||
// var entries []TimeEntry
|
||||
// for rows.Next() {
|
||||
// var e TimeEntry
|
||||
// if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.CreatedAt); err != nil {
|
||||
// continue
|
||||
// }
|
||||
// entries = append(entries, e)
|
||||
// }
|
||||
// return entries, nil
|
||||
// }
|
||||
func GetWeeklyHours(db *sql.DB) ([]WeeklyHours, error) {
|
||||
rows, err := db.Query(`
|
||||
SELECT
|
||||
te.user_id,
|
||||
u.username,
|
||||
CAST(strftime('%W', te.date) AS INTEGER) as week,
|
||||
CAST(strftime('%Y', te.date) AS INTEGER) as year,
|
||||
-- ISO 8601 Wochennummer berechnen
|
||||
CASE
|
||||
WHEN strftime('%j', date(te.date, '-' || ((strftime('%w', te.date) + 6) % 7) || ' days')) <= '3'
|
||||
THEN CAST(strftime('%Y', date(te.date, '-' || ((strftime('%w', te.date) + 6) % 7) || ' days', '-4 days')) AS INTEGER)
|
||||
ELSE CAST(strftime('%Y', te.date) AS INTEGER)
|
||||
END as year,
|
||||
CASE
|
||||
WHEN strftime('%j', date(te.date, '-' || ((strftime('%w', te.date) + 6) % 7) || ' days')) <= '3'
|
||||
THEN CAST((strftime('%j', date(te.date, '-' || ((strftime('%w', te.date) + 6) % 7) || ' days', '-4 days')) - 1) / 7 AS INTEGER) + 53
|
||||
ELSE CAST((strftime('%j', date(te.date, '-' || ((strftime('%w', te.date) + 6) % 7) || ' days')) - 1) / 7 AS INTEGER) + 1
|
||||
END as week,
|
||||
SUM(
|
||||
(CAST(substr(te.end_time, 1, 2) AS REAL) + CAST(substr(te.end_time, 4, 2) AS REAL) / 60.0) -
|
||||
(CAST(substr(te.start_time, 1, 2) AS REAL) + CAST(substr(te.start_time, 4, 2) AS REAL) / 60.0)
|
||||
|
|
@ -229,7 +219,7 @@ func GetWeeklyHours(db *sql.DB) ([]WeeklyHours, error) {
|
|||
var hours []WeeklyHours
|
||||
for rows.Next() {
|
||||
var h WeeklyHours
|
||||
if err := rows.Scan(&h.UserID, &h.Username, &h.Week, &h.Year, &h.TotalHours); err != nil {
|
||||
if err := rows.Scan(&h.UserID, &h.Username, &h.Year, &h.Week, &h.TotalHours); err != nil {
|
||||
continue
|
||||
}
|
||||
hours = append(hours, h)
|
||||
|
|
@ -246,39 +236,43 @@ func DeleteUser(db *sql.DB, id int) error {
|
|||
}
|
||||
|
||||
func DeleteTimeEntriesByUserAndWeek(db *sql.DB, userID int, year int, week int) error {
|
||||
dates := calculateWeekDates(year, week)
|
||||
|
||||
var dateList []string
|
||||
for day := 0; day <= 4; day++ {
|
||||
dateList = append(dateList, dates.Dates[fmt.Sprintf("%d", day)])
|
||||
}
|
||||
|
||||
query := `
|
||||
DELETE FROM time_entries
|
||||
WHERE user_id = ?
|
||||
AND CAST(strftime('%W', date) AS INTEGER) = ?
|
||||
AND CAST(strftime('%Y', date) AS INTEGER) = ?
|
||||
`
|
||||
_, err := db.Exec(query, userID, week, year)
|
||||
DELETE FROM time_entries
|
||||
WHERE user_id = ?
|
||||
AND date IN (?, ?, ?, ?, ?)
|
||||
`
|
||||
_, err := db.Exec(query, userID, dateList[0], dateList[1], dateList[2], dateList[3], dateList[4])
|
||||
return err
|
||||
}
|
||||
|
||||
func CheckUserHasEntriesForWeek(db *sql.DB, userID int, year int, week int) (bool, error) {
|
||||
// Berechne die Daten der Woche
|
||||
dates := calculateWeekDates(year, week)
|
||||
|
||||
// Hole alle Daten als Liste
|
||||
var dateList []string
|
||||
for _, date := range dates.Dates {
|
||||
dateList = append(dateList, date)
|
||||
for day := 0; day <= 4; day++ {
|
||||
dateList = append(dateList, dates.Dates[fmt.Sprintf("%d", day)])
|
||||
}
|
||||
|
||||
// Prüfe ob Einträge existieren
|
||||
query := `
|
||||
SELECT COUNT(*)
|
||||
FROM time_entries
|
||||
WHERE user_id = ?
|
||||
AND date IN (?, ?, ?, ?, ?)
|
||||
`
|
||||
SELECT COUNT(*)
|
||||
FROM time_entries
|
||||
WHERE user_id = ?
|
||||
AND date IN (?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
var count int
|
||||
err := db.QueryRow(query, userID,
|
||||
dateList[0], dateList[1], dateList[2], dateList[3], dateList[4]).Scan(&count)
|
||||
|
||||
if err != nil {
|
||||
log.Printf("Error checking entries: %v", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue