Some checks failed
arbeitszeitmessung/pipeline/head There was a failure building this commit
113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package models
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
type AbsenceType struct {
|
|
Id int8
|
|
Name string
|
|
}
|
|
|
|
// const (
|
|
// AbsenceNone int8 = iota
|
|
// AbsenceUrlaub
|
|
// AbsenceKurzarbeit
|
|
// AbsenceKrank
|
|
// AbsenceKindkrank
|
|
// )
|
|
|
|
// var AbsenceTypes = []AbsenceType{
|
|
// // {Value: AbsenceNone, Label: "Abwesenheit"},
|
|
// {Id: AbsenceUrlaub, Name: "Urlaub"},
|
|
// {Id: AbsenceKurzarbeit, Name: "Kurzarbeit"},
|
|
// {Id: AbsenceKrank, Name: "Krank"},
|
|
// {Id: AbsenceKindkrank, Name: "Kindkrank"},
|
|
// }
|
|
|
|
// var AbsenceTypesLabel = map[int8]string{
|
|
// 0: "None",
|
|
// AbsenceUrlaub: "Urlaub",
|
|
// AbsenceKurzarbeit: "Kurzarbeit",
|
|
// AbsenceKrank: "Krank",
|
|
// AbsenceKindkrank: "Kindkrank",
|
|
// }
|
|
|
|
type Absence struct {
|
|
CounterId int
|
|
CardUID string
|
|
AbwesenheitTyp AbsenceType
|
|
Datum time.Time
|
|
// Comment string
|
|
}
|
|
|
|
func NewAbsence(card_uid string, abwesenheit_typ int, datum time.Time) (Absence, error) {
|
|
if abwesenheit_typ < 0 {
|
|
return Absence{
|
|
CardUID: card_uid,
|
|
AbwesenheitTyp: AbsenceType{0, "Custom absence"},
|
|
Datum: datum,
|
|
}, nil
|
|
}
|
|
_absenceType, ok := GetAbsenceTypesCached()[int8(abwesenheit_typ)]
|
|
if !ok {
|
|
return Absence{}, errors.New("Invalid absencetype")
|
|
}
|
|
return Absence{
|
|
CardUID: card_uid,
|
|
AbwesenheitTyp: _absenceType,
|
|
Datum: datum,
|
|
}, nil
|
|
}
|
|
|
|
func (a *Absence) Insert() error {
|
|
qStr, err := DB.Prepare(`INSERT INTO abwesenheit (card_uid, abwesenheit_typ, datum) VALUES ($1, $2, $3) RETURNING counter_id;`)
|
|
if err != nil {
|
|
log.Println("Error preparing sql Statement", err)
|
|
return err
|
|
}
|
|
err = qStr.QueryRow(a.CardUID, a.AbwesenheitTyp, a.Datum).Scan(&a.CounterId)
|
|
if err != nil {
|
|
log.Println("Error executing insert statement", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// func (a *Absence) GetStringType() string {
|
|
// return AbsenceTypesLabel[a.AbwesenheitTyp]
|
|
// }
|
|
|
|
func GetAbsenceTypes() (map[int8]AbsenceType, error) {
|
|
var types = make(map[int8]AbsenceType)
|
|
qStr, err := DB.Prepare("SELECT abwesenheit_id, abwesenheit_name FROM s_abwesenheit_typen;")
|
|
if err != nil {
|
|
return types, err
|
|
}
|
|
defer qStr.Close()
|
|
rows, err := qStr.Query()
|
|
if err != nil {
|
|
log.Println("Error getting abwesenheit rows!", err)
|
|
return types, err
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var absenceType AbsenceType
|
|
if err := rows.Scan(&absenceType.Id, &absenceType.Name); err != nil {
|
|
log.Println("Error scanning absence row!", err)
|
|
}
|
|
types[absenceType.Id] = absenceType
|
|
}
|
|
return types, nil
|
|
}
|
|
|
|
func GetAbsenceTypesCached() map[int8]AbsenceType {
|
|
types, err := definedTypes.Get("s_abwesenheit_typen")
|
|
if err != nil {
|
|
return map[int8]AbsenceType{}
|
|
}
|
|
return types.(map[int8]AbsenceType)
|
|
}
|