83 lines
2.3 KiB
Go
83 lines
2.3 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"arbeitszeitmessung/helper"
|
|
"arbeitszeitmessung/helper/paramParser"
|
|
"arbeitszeitmessung/models"
|
|
"encoding/json"
|
|
"errors"
|
|
"log/slog"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func KurzarbeitFillHandler(w http.ResponseWriter, r *http.Request) {
|
|
helper.SetCors(w)
|
|
switch r.Method {
|
|
case "GET":
|
|
fillKurzarbeit(r, w)
|
|
default:
|
|
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
|
}
|
|
}
|
|
|
|
func fillKurzarbeit(r *http.Request, w http.ResponseWriter) {
|
|
bookingTypeKurzarbeit, err := getKurzarbeitBookingType()
|
|
if err != nil {
|
|
slog.Info("Error getting BookingType Kurzarbeit %v\n", slog.Any("Error", err))
|
|
}
|
|
users, err := models.GetAllUsers()
|
|
if err != nil {
|
|
slog.Info("Error getting user list %v\n", slog.Any("Error", err))
|
|
}
|
|
|
|
pp := paramParser.New(r.URL.Query())
|
|
startDate := pp.ParseTimestampFallback("date", time.DateOnly, time.Now())
|
|
|
|
var kurzarbeitAdded int
|
|
|
|
for _, user := range users {
|
|
days := models.GetDays(user, startDate, startDate.AddDate(0, 0, 1), false)
|
|
if len(days) == 0 {
|
|
continue
|
|
}
|
|
|
|
day := days[len(days)-1]
|
|
if !day.IsKurzArbeit() || !day.IsWorkDay() {
|
|
continue
|
|
}
|
|
if day.GetWorktime(user, models.WorktimeBaseDay, false) >= day.GetWorktime(user, models.WorktimeBaseDay, true) {
|
|
continue
|
|
}
|
|
|
|
worktimeKurzarbeit := day.GetWorktime(user, models.WorktimeBaseDay, true) - day.GetWorktime(user, models.WorktimeBaseDay, false)
|
|
|
|
if wDay, ok := day.(*models.WorkDay); !ok || len(wDay.Bookings) == 0 {
|
|
continue
|
|
}
|
|
workday, _ := day.(*models.WorkDay)
|
|
|
|
lastBookingTime := workday.Bookings[len(workday.Bookings)-1].Timestamp
|
|
kurzarbeitBegin := (*models.Booking).New(nil, user.CardUID, 0, 1, bookingTypeKurzarbeit.Id)
|
|
kurzarbeitEnd := (*models.Booking).New(nil, user.CardUID, 0, 2, bookingTypeKurzarbeit.Id)
|
|
kurzarbeitBegin.Timestamp = lastBookingTime.Add(time.Minute)
|
|
kurzarbeitEnd.Timestamp = lastBookingTime.Add(worktimeKurzarbeit)
|
|
|
|
kurzarbeitBegin.InsertWithTimestamp()
|
|
kurzarbeitEnd.InsertWithTimestamp()
|
|
kurzarbeitAdded += 1
|
|
}
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
json.NewEncoder(w).Encode(kurzarbeitAdded)
|
|
}
|
|
|
|
func getKurzarbeitBookingType() (models.BookingType, error) {
|
|
for _, bookingType := range models.GetBookingTypesCached() {
|
|
if bookingType.Name == "Kurzarbeit" {
|
|
return bookingType, nil
|
|
}
|
|
}
|
|
return models.BookingType{}, errors.New("No Booking Type found")
|
|
}
|