This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"arbeitszeitmessung/helper"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"log"
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -14,6 +14,7 @@ type WorkWeek struct {
|
||||
Id int
|
||||
WorkDays []WorkDay
|
||||
Absences []Absence
|
||||
Days []IWorkDay
|
||||
User User
|
||||
WeekStart time.Time
|
||||
Worktime time.Duration
|
||||
@@ -39,20 +40,21 @@ func NewWorkWeek(user User, tsMonday time.Time, populate bool) WorkWeek {
|
||||
Status: WeekStatusNone,
|
||||
}
|
||||
if populate {
|
||||
week.PopulateWithBookings(0, 0)
|
||||
week.PopulateWithDays(0, 0)
|
||||
}
|
||||
return week
|
||||
}
|
||||
|
||||
func (w *WorkWeek) PopulateWithBookings(worktime time.Duration, overtime time.Duration) {
|
||||
w.WorkDays = GetWorkDays(w.User, w.WeekStart, w.WeekStart.Add(7*24*time.Hour))
|
||||
if absences, err := GetAbsencesByCardUID(w.User.CardUID, w.WeekStart, w.WeekStart.Add(7*24*time.Hour)); err == nil {
|
||||
w.Absences = absences
|
||||
} else {
|
||||
log.Printf("Error populating absences in workWeek (%s): %v", w.WeekStart, err)
|
||||
func (w *WorkWeek) PopulateWithDays(worktime time.Duration, overtime time.Duration) {
|
||||
w.Days = GetDays(w.User, w.WeekStart, w.WeekStart.Add(6*24*time.Hour))
|
||||
sort.Slice(w.Days, func(i, j int) bool {
|
||||
return w.Days[i].Date().Before(w.Days[j].Date())
|
||||
})
|
||||
|
||||
for _, day := range w.Days {
|
||||
w.Worktime += day.TimeWorkVirtual(w.User)
|
||||
}
|
||||
w.Worktime = w.aggregateWorkTime()
|
||||
w.Overtime = w.Worktime - time.Duration(w.User.ArbeitszeitPerWoche*float32(time.Hour))
|
||||
w.Overtime = w.Worktime - w.User.ArbeitszeitProWoche()
|
||||
|
||||
w.Worktime = w.Worktime.Round(time.Minute)
|
||||
w.Overtime = w.Overtime.Round(time.Minute)
|
||||
@@ -99,10 +101,6 @@ func (w *WorkWeek) CheckStatus() WeekStatus {
|
||||
return w.Status
|
||||
}
|
||||
|
||||
func (w *WorkWeek) GetWorkHourString() string {
|
||||
return helper.FormatDuration(w.Worktime)
|
||||
}
|
||||
|
||||
func (w *WorkWeek) aggregateWorkTime() time.Duration {
|
||||
var workTime time.Duration
|
||||
for _, day := range w.WorkDays {
|
||||
@@ -138,7 +136,7 @@ func (w *WorkWeek) GetSendWeeks(user User) []WorkWeek {
|
||||
return weeks
|
||||
}
|
||||
|
||||
week.PopulateWithBookings(week.Worktime, week.Overtime)
|
||||
week.PopulateWithDays(week.Worktime, week.Overtime)
|
||||
weeks = append(weeks, week)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
@@ -196,8 +194,8 @@ func (w *WorkWeek) Accept() error {
|
||||
}
|
||||
|
||||
func (w *WorkWeek) RequiresAction() bool {
|
||||
var requiresAction bool = true
|
||||
for _, day := range w.WorkDays {
|
||||
var requiresAction bool = false
|
||||
for _, day := range w.Days {
|
||||
requiresAction = requiresAction || day.RequiresAction()
|
||||
}
|
||||
return requiresAction
|
||||
|
||||
Reference in New Issue
Block a user