feat: updated docs and added description to files
This commit is contained in:
83
Backend/endpoints/team-report.go
Normal file
83
Backend/endpoints/team-report.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package endpoints
|
||||
|
||||
// this endpoint served at "/team/report" handles the report page
|
||||
// and also the submission/change of reports
|
||||
|
||||
import (
|
||||
"arbeitszeitmessung/helper"
|
||||
"arbeitszeitmessung/helper/paramParser"
|
||||
"arbeitszeitmessung/models"
|
||||
"arbeitszeitmessung/templates"
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func ReportHandler(w http.ResponseWriter, r *http.Request) {
|
||||
helper.RequiresLogin(Session, w, r)
|
||||
switch r.Method {
|
||||
case http.MethodPost:
|
||||
submitReport(w, r)
|
||||
case http.MethodGet:
|
||||
showWeeks(w, r)
|
||||
default:
|
||||
http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed)
|
||||
}
|
||||
}
|
||||
|
||||
func submitReport(w http.ResponseWriter, r *http.Request) {
|
||||
err := r.ParseForm()
|
||||
if err != nil {
|
||||
log.Println("Error parsing form", err)
|
||||
return
|
||||
}
|
||||
pp := paramParser.New(r.Form)
|
||||
userPN, err := pp.ParseInt("user")
|
||||
weekTs := pp.ParseTimestampFallback("week", time.DateOnly, time.Now())
|
||||
user, err := models.GetUserByPersonalNr(userPN)
|
||||
if err != nil {
|
||||
log.Println("Could not get user!")
|
||||
return
|
||||
}
|
||||
|
||||
workWeek := models.NewWorkWeek(user, weekTs, true)
|
||||
|
||||
switch r.FormValue("method") {
|
||||
case "send":
|
||||
err = workWeek.SendWeek()
|
||||
case "accept":
|
||||
err = workWeek.Accept()
|
||||
default:
|
||||
break
|
||||
}
|
||||
if errors.Is(err, models.ErrRunningWeek) {
|
||||
showWeeks(w, r.WithContext(context.WithValue(r.Context(), "error", true)))
|
||||
}
|
||||
showWeeks(w, r)
|
||||
}
|
||||
|
||||
func showWeeks(w http.ResponseWriter, r *http.Request) {
|
||||
user, err := models.GetUserFromSession(Session, r.Context())
|
||||
if err != nil {
|
||||
log.Println("No user found with the given personal number!")
|
||||
http.Redirect(w, r, "/user/login", http.StatusSeeOther)
|
||||
return
|
||||
}
|
||||
|
||||
pp := paramParser.New(r.URL.Query())
|
||||
submissionDate := pp.ParseTimestampFallback("submission_date", time.DateOnly, user.GetLastWorkWeekSubmission())
|
||||
lastSub := helper.GetMonday(submissionDate)
|
||||
|
||||
userWeek := models.NewWorkWeek(user, lastSub, true)
|
||||
|
||||
var workWeeks []models.WorkWeek
|
||||
teamMembers, err := user.GetTeamMembers()
|
||||
for _, member := range teamMembers {
|
||||
weeks := (*models.WorkWeek).GetSendWeeks(nil, member)
|
||||
workWeeks = append(workWeeks, weeks...)
|
||||
}
|
||||
// isRunningWeek := time.Since(lastSub) < 24*5*time.Hour //the last submission is this week and cannot be send yet
|
||||
templates.ReportPage(workWeeks, userWeek).Render(r.Context(), w)
|
||||
}
|
||||
Reference in New Issue
Block a user