timesheet

package
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2022 License: BSD-3-Clause Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReasonSickLeave          = "Sick / Medical Consultation"
	ReasonOutsideOfficeHours = "Outside office hours"
	ReasonAuthorities        = "Authorities"
	ReasonPublicService      = "Requested Public Service"

	TypePublicHoliday     = "Public Holiday"
	TypeMilitaryService   = "Military Service"
	TypeSpecialOccasions  = "Special Occasions"
	TypeUnpaid            = "Unpaid"
	TypeLegalLeavesPrefix = "Legal Leaves"

	StateApproved  = "validate"
	StateToApprove = "confirm"
	StateDraft     = "draft"
)
View Source
const (
	ActionSignIn  = "sign_in"
	ActionSignOut = "sign_out"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AbsenceBlock added in v0.2.0

type AbsenceBlock struct {
	Date   time.Time
	Reason string
}

type AttendanceShift added in v0.7.0

type AttendanceShift struct {
	// Start is the localized beginning time of the attendance
	Start time.Time
	// End is the localized finish time of the attendance
	End    time.Time
	Reason string
}

type DailySummary

type DailySummary struct {
	// Date is the localized date of the summary.
	Date     time.Time
	Shifts   []AttendanceShift
	Absences []AbsenceBlock
	FTERatio float64
}

func NewDailySummary

func NewDailySummary(fteRatio float64, date time.Time) *DailySummary

NewDailySummary creates a new instance. The fteRatio is the percentage (input a value between 0..1) of the employee and is used to calculate the daily maximum hours an employee should work. Date is expected to be in a localized timezone.

func (*DailySummary) CalculateAbsenceTime added in v0.7.0

func (s *DailySummary) CalculateAbsenceTime() time.Duration

CalculateAbsenceTime accumulates all absence hours from that day.

func (*DailySummary) CalculateDailyMax added in v0.7.0

func (s *DailySummary) CalculateDailyMax() time.Duration

CalculateDailyMax returns the theoretical amount of hours that an employee should work on this day.

  • It returns 0 for weekend days.
  • It returns 8.5 hours multiplied by FTE ratio for days in 2020 and earlier.
  • It returns 8.0 hours multiplied by FTE ratio for days in 2021 and later.

func (*DailySummary) CalculateExcusedTime added in v0.7.0

func (s *DailySummary) CalculateExcusedTime() time.Duration

CalculateExcusedTime accumulates all hours that are excused in some way (sick leave etc) from that day.

func (*DailySummary) CalculateOvertime

func (s *DailySummary) CalculateOvertime() time.Duration

CalculateOvertime returns the duration of overtime. If returned duration is positive, then the employee did overtime and undertime if duration is negative.

The overtime is then calculated according to these business rules:

  • Outside office hours are multiplied by 1.5 (as a compensation)
  • Excused hours like sick leave, authorities or public service can be used to "fill up" the daily theoretical maximum if the working hours are less than said maximum. However, there's no overtime possible using excused hours
  • If the working hours exceed the theoretical daily maximum, then the excused hours are basically ignored. Example: it's not possible to work 9 hours, have 1 hour sick leave and expect 2 hours overtime for an 8 hours daily maximum, the overtime here is 1 hour.

func (*DailySummary) CalculateWorkingTime added in v0.7.0

func (s *DailySummary) CalculateWorkingTime() time.Duration

CalculateWorkingTime accumulates all working hours from that day. The outside office hours are multiplied with 1.5.

func (*DailySummary) HasAbsences added in v0.2.0

func (s *DailySummary) HasAbsences() bool

HasAbsences returns true if there are any absences.

func (*DailySummary) IsHoliday added in v0.7.0

func (s *DailySummary) IsHoliday() bool

IsHoliday returns true if there is a "personalized" leave. Public and unpaid holidays return false. If the holiday falls on a weekend, the day is not counted.

func (*DailySummary) IsWeekend added in v0.2.0

func (s *DailySummary) IsWeekend() bool

IsWeekend returns true if the date falls on a Saturday or Sunday.

type MonthlyReport added in v0.7.0

type MonthlyReport struct {
	DailySummaries []*DailySummary
	Summary        Summary
	Employee       *model.Employee
	Year           int
	Month          int
}

type ReportBuilder added in v0.7.0

type ReportBuilder struct {
	// contains filtered or unexported fields
}

func NewReporter added in v0.2.0

func NewReporter(attendances model.AttendanceList, leaves model.LeaveList, employee *model.Employee, contracts model.ContractList) *ReportBuilder

func (*ReportBuilder) CalculateMonthlyReport added in v0.7.0

func (r *ReportBuilder) CalculateMonthlyReport() (MonthlyReport, error)

func (*ReportBuilder) CalculateYearlyReport added in v0.7.0

func (r *ReportBuilder) CalculateYearlyReport() (YearlyReport, error)

func (*ReportBuilder) SetMonth added in v0.7.0

func (r *ReportBuilder) SetMonth(year, month int) *ReportBuilder

func (*ReportBuilder) SetTimeZone added in v0.7.0

func (r *ReportBuilder) SetTimeZone(zone string) *ReportBuilder

type Summary

type Summary struct {
	TotalOvertime    time.Duration
	TotalExcusedTime time.Duration
	TotalWorkedTime  time.Duration
	// TotalLeave is the amount of paid leave days.
	// This value respects FTE ratio, e.g. in a 50% ratio a public holiday is still counted as '1d'.
	TotalLeave      float64
	AverageWorkload float64
}

type YearlyReport added in v0.7.0

type YearlyReport struct {
	MonthlyReports []MonthlyReport
	Employee       *model.Employee
	Year           int
	Summary        YearlySummary
}

type YearlySummary added in v0.7.0

type YearlySummary struct {
	TotalOvertime time.Duration
	TotalExcused  time.Duration
	TotalWorked   time.Duration
	TotalLeaves   float64
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL