working compound days + working public holidays
Some checks failed
Tests / Run Go Tests (push) Failing after 44s
Some checks failed
Tests / Run Go Tests (push) Failing after 44s
This commit is contained in:
105
Backend/models/compoundDay.go
Normal file
105
Backend/models/compoundDay.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CompoundDay struct {
|
||||
Day time.Time
|
||||
DayParts []IWorkDay
|
||||
}
|
||||
|
||||
func NewCompondDay(date time.Time, dayParts ...IWorkDay) *CompoundDay {
|
||||
return &CompoundDay{Day: date, DayParts: dayParts}
|
||||
}
|
||||
|
||||
func (c *CompoundDay) AddDayPart(dayPart IWorkDay) {
|
||||
c.DayParts = append(c.DayParts, dayPart)
|
||||
}
|
||||
|
||||
func (c *CompoundDay) GetWorkDay() WorkDay {
|
||||
workday, ok := c.DayParts[0].(*WorkDay)
|
||||
if ok {
|
||||
return *workday
|
||||
}
|
||||
return WorkDay{}
|
||||
}
|
||||
|
||||
// IsEmpty implements [IWorkDay].
|
||||
func (c *CompoundDay) IsEmpty() bool {
|
||||
return len(c.DayParts) > 0
|
||||
}
|
||||
|
||||
// Date implements [IWorkDay].
|
||||
func (c *CompoundDay) Date() time.Time {
|
||||
return c.Day
|
||||
}
|
||||
|
||||
// GetDayProgress implements [IWorkDay].
|
||||
func (c *CompoundDay) GetDayProgress(u User) int8 {
|
||||
var dayProcess int8
|
||||
for _, day := range c.DayParts {
|
||||
dayProcess += day.GetDayProgress(u)
|
||||
}
|
||||
return dayProcess
|
||||
}
|
||||
|
||||
// GetOvertime implements [IWorkDay].
|
||||
func (c *CompoundDay) GetOvertime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration {
|
||||
|
||||
var overtime time.Duration
|
||||
for _, day := range c.DayParts {
|
||||
overtime += day.GetOvertime(u, base, includeKurzarbeit)
|
||||
}
|
||||
return overtime
|
||||
}
|
||||
|
||||
// GetPausetime implements [IWorkDay].
|
||||
func (c *CompoundDay) GetPausetime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration {
|
||||
var pausetime time.Duration
|
||||
for _, day := range c.DayParts {
|
||||
pausetime += day.GetPausetime(u, base, includeKurzarbeit)
|
||||
}
|
||||
return pausetime
|
||||
}
|
||||
|
||||
// GetTimes implements [IWorkDay].
|
||||
func (c *CompoundDay) GetTimes(u User, base WorktimeBase, includeKurzarbeit bool) (work time.Duration, pause time.Duration, overtime time.Duration) {
|
||||
return c.GetWorktime(u, base, includeKurzarbeit), c.GetPausetime(u, base, includeKurzarbeit), c.GetOvertime(u, base, includeKurzarbeit)
|
||||
}
|
||||
|
||||
// GetWorktime implements [IWorkDay].
|
||||
func (c *CompoundDay) GetWorktime(u User, base WorktimeBase, includeKurzarbeit bool) time.Duration {
|
||||
var worktime time.Duration
|
||||
for _, day := range c.DayParts {
|
||||
worktime += day.GetWorktime(u, base, includeKurzarbeit)
|
||||
slog.Info("Calc worktime for day", "day", day, "worktime", worktime.String())
|
||||
}
|
||||
return worktime
|
||||
}
|
||||
|
||||
// IsKurzArbeit implements [IWorkDay].
|
||||
func (c *CompoundDay) IsKurzArbeit() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// IsWorkDay implements [IWorkDay].
|
||||
func (c *CompoundDay) IsWorkDay() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// RequiresAction implements [IWorkDay].
|
||||
func (c *CompoundDay) RequiresAction() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// ToString implements [IWorkDay].
|
||||
func (c *CompoundDay) ToString() string {
|
||||
return "Compound Day"
|
||||
}
|
||||
|
||||
// Type implements [IWorkDay].
|
||||
func (c *CompoundDay) Type() DayType {
|
||||
return DayTypeCompound
|
||||
}
|
||||
Reference in New Issue
Block a user