package endpoints import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "arbeitszeitmessung/templates" "context" "errors" "log" "net/http" "strconv" "time" ) func TeamHandler(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 } userPN, _ := strconv.Atoi(r.FormValue("user")) _weekTs := r.FormValue("week") weekTs, err := time.Parse(time.DateOnly, _weekTs) user, err := models.GetUserByPersonalNr(userPN) workWeek := models.NewWorkWeek(user, weekTs, true) if err != nil { log.Println("Could not get user!") return } 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 } submissionDate := r.URL.Query().Get("submission_date") lastSub := user.GetLastWorkWeekSubmission() if submissionDate != "" { submissionDate, err := time.Parse("2006-01-02", submissionDate) if err == nil { 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.TeamPage([]models.WorkWeek{userWeek, userWeek}, userWeek).Render(r.Context(), w) }