This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"arbeitszeitmessung/models"
|
||||
"arbeitszeitmessung/templates"
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
@@ -30,6 +31,22 @@ func TimeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func AbsencHandler(w http.ResponseWriter, r *http.Request) {
|
||||
helper.RequiresLogin(Session, w, r)
|
||||
helper.SetCors(w)
|
||||
switch r.Method {
|
||||
case http.MethodPost:
|
||||
err := updateAbsence(r)
|
||||
if err != nil {
|
||||
http.Error(w, "Internal error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
http.Redirect(w, r, "/time", 301)
|
||||
default:
|
||||
http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed)
|
||||
}
|
||||
}
|
||||
|
||||
func parseTimestamp(r *http.Request, getKey string, fallback string) (time.Time, error) {
|
||||
getTimestamp := r.URL.Query().Get(getKey)
|
||||
if getTimestamp == "" {
|
||||
@@ -165,6 +182,84 @@ func updateBooking(w http.ResponseWriter, r *http.Request) {
|
||||
getBookings(w, r)
|
||||
}
|
||||
|
||||
func updateAbsence(r *http.Request) error {
|
||||
r.ParseForm()
|
||||
var loc *time.Location
|
||||
loc, err := time.LoadLocation(helper.GetEnv("TZ", "Europe/Berlin"))
|
||||
if err != nil {
|
||||
log.Println("Error loading location", err)
|
||||
loc = time.Local
|
||||
}
|
||||
|
||||
dateFrom, err := time.ParseInLocation("2006-01-02", r.FormValue("date_from"), loc)
|
||||
if err != nil {
|
||||
log.Println("Error parsing date_from input for absence", err)
|
||||
return err
|
||||
}
|
||||
|
||||
dateTo, err := time.ParseInLocation("2006-01-02", r.FormValue("date_to"), loc)
|
||||
if err != nil {
|
||||
log.Println("Error parsing date_to input for absence", err)
|
||||
return err
|
||||
}
|
||||
|
||||
absenceTypeId, err := strconv.Atoi(r.FormValue("aw_type"))
|
||||
if err != nil {
|
||||
log.Println("Error parsing aw_type", err)
|
||||
return err
|
||||
}
|
||||
|
||||
absenceId, err := strconv.Atoi(r.FormValue("aw_id"))
|
||||
if err != nil && r.FormValue("aw_id") == "" {
|
||||
absenceId = 0
|
||||
} else if err != nil {
|
||||
log.Println("Error parsing aw_id", err)
|
||||
return err
|
||||
}
|
||||
|
||||
absenceType, err := models.GetAbsenceTypeById(int8(absenceTypeId))
|
||||
if err != nil {
|
||||
log.Println("No matching absence type found!")
|
||||
return err
|
||||
}
|
||||
|
||||
newAbsence := models.Absence{DateFrom: dateFrom, DateTo: dateTo, AbwesenheitTyp: absenceType}
|
||||
|
||||
absence, err := models.GetAbsenceById(absenceId)
|
||||
if err == sql.ErrNoRows {
|
||||
err = nil
|
||||
log.Println("Absence not found creating new!")
|
||||
|
||||
user, err := models.GetUserFromSession(Session, r.Context())
|
||||
if err != nil {
|
||||
log.Println("No user found!", err)
|
||||
return err
|
||||
}
|
||||
newAbsence.CardUID = user.CardUID
|
||||
newAbsence.Insert()
|
||||
}
|
||||
if err != nil {
|
||||
log.Println("Cannot get Absence for id: ", absenceId, err)
|
||||
return err
|
||||
}
|
||||
if r.FormValue("action") == "delete" {
|
||||
log.Println("Deleting Absence!", "Not implemented")
|
||||
// TODO
|
||||
//absence.Delete()
|
||||
return nil
|
||||
}
|
||||
|
||||
if absence.Update(newAbsence) {
|
||||
err = absence.Save()
|
||||
if err != nil {
|
||||
log.Println("Error saving updated absence!", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func createAbsence(absenceType int, user models.User, loc *time.Location, r *http.Request) {
|
||||
absenceDate, err := time.ParseInLocation("2006-01-02", r.FormValue("date"), loc)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user