feat: booking can only in between specified hours
every booking happening outside these hours will be clamped to the hours also added few more config options + regex filters
This commit is contained in:
@@ -28,6 +28,8 @@ type User struct {
|
||||
ArbeitszeitPerTag float32 //`json:"arbeitszeit_per_tag"`
|
||||
ArbeitszeitPerWoche float32 //`json:"arbeitszeit_per_woche"`
|
||||
Overtime time.Duration
|
||||
ArbeitMinStart time.Time
|
||||
ArbeitMaxEnde time.Time
|
||||
}
|
||||
|
||||
func GetUserFromSession(Session *scs.SessionManager, ctx context.Context) (User, error) {
|
||||
@@ -65,35 +67,41 @@ func (u *User) GetReportedOvertime(startDate time.Time) (time.Duration, error) {
|
||||
return overtime, nil
|
||||
}
|
||||
|
||||
func GetAllUsers() ([]User, error) {
|
||||
qStr, err := DB.Prepare((`SELECT card_uid, vorname, nachname,arbeitszeit_per_tag, arbeitszeit_per_woche FROM s_personal_daten;`))
|
||||
var users []User
|
||||
if err != nil {
|
||||
return users, err
|
||||
}
|
||||
defer qStr.Close()
|
||||
rows, err := qStr.Query()
|
||||
if err != nil {
|
||||
return users, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
func GetUserByCardUID(cardUid string) (User, error) {
|
||||
var user User
|
||||
|
||||
var user User
|
||||
if err := rows.Scan(&user.CardUID, &user.Vorname, &user.Name, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche); err != nil {
|
||||
log.Println("Error creating user!", err)
|
||||
continue
|
||||
}
|
||||
users = append(users, user)
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, vorname, nachname, card_uid, arbeitszeit_per_tag, arbeitszeit_per_woche, arbeitszeit_min_start, arbeitszeit_max_ende FROM s_personal_daten WHERE card_uid = $1;`))
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return users, nil
|
||||
err = qStr.QueryRow(cardUid).Scan(&user.PersonalNummer, &user.Vorname, &user.Name, &user.CardUID, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche, &user.ArbeitMinStart, &user.ArbeitMaxEnde)
|
||||
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
return users, nil
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (u *User) GetAll() ([]User, error) {
|
||||
qStr, err := DB.Prepare((`SELECT card_uid, vorname, nachname FROM s_personal_daten;`))
|
||||
func (u *User) ArbeitMinStartTime(date time.Time) time.Time {
|
||||
if date.Hour() > 0 {
|
||||
date = date.Truncate(24 * time.Hour).Add(-time.Hour)
|
||||
}
|
||||
date = date.Truncate(time.Hour)
|
||||
slog.Info("Date truncate", "date", date)
|
||||
return date.Add(time.Hour*time.Duration(u.ArbeitMinStart.Hour()) + time.Minute*time.Duration(u.ArbeitMinStart.Minute()))
|
||||
}
|
||||
|
||||
func (u *User) ArbeitMaxEndeTime(date time.Time) time.Time {
|
||||
if date.Hour() > 0 {
|
||||
date = date.Truncate(24 * time.Hour).Add(-time.Hour)
|
||||
}
|
||||
date = date.Truncate(time.Hour)
|
||||
slog.Info("Date truncate", "date", date)
|
||||
return date.Add(time.Hour*time.Duration(u.ArbeitMaxEnde.Hour()) + time.Minute*time.Duration(u.ArbeitMaxEnde.Minute()))
|
||||
}
|
||||
|
||||
func GetAllUsers() ([]User, error) {
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, vorname, nachname, card_uid, arbeitszeit_per_tag, arbeitszeit_per_woche, arbeitszeit_min_start, arbeitszeit_max_ende FROM s_personal_daten;`))
|
||||
var users []User
|
||||
if err != nil {
|
||||
return users, err
|
||||
@@ -107,7 +115,7 @@ func (u *User) GetAll() ([]User, error) {
|
||||
for rows.Next() {
|
||||
|
||||
var user User
|
||||
if err := rows.Scan(&user.CardUID, &user.Vorname, &user.Name); err != nil {
|
||||
if err := rows.Scan(&user.PersonalNummer, &user.Vorname, &user.Name, &user.CardUID, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche, &user.ArbeitMinStart, &user.ArbeitMaxEnde); err != nil {
|
||||
log.Println("Error creating user!", err)
|
||||
continue
|
||||
}
|
||||
@@ -167,11 +175,11 @@ func (u *User) CheckOut() error {
|
||||
func GetUserByPersonalNr(personalNummer int) (User, error) {
|
||||
var user User
|
||||
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, arbeitszeit_per_tag, arbeitszeit_per_woche FROM s_personal_daten WHERE personal_nummer = $1;`))
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, vorname, nachname, card_uid, arbeitszeit_per_tag, arbeitszeit_per_woche, arbeitszeit_min_start, arbeitszeit_max_ende FROM s_personal_daten WHERE personal_nummer = $1;`))
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
err = qStr.QueryRow(personalNummer).Scan(&user.PersonalNummer, &user.CardUID, &user.Vorname, &user.Name, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche)
|
||||
err = qStr.QueryRow(personalNummer).Scan(&user.PersonalNummer, &user.Vorname, &user.Name, &user.CardUID, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche, &user.ArbeitMinStart, &user.ArbeitMaxEnde)
|
||||
|
||||
if err != nil {
|
||||
return user, err
|
||||
@@ -185,7 +193,7 @@ func GetUserByPersonalNrMulti(personalNummerMulti []int) ([]User, error) {
|
||||
return users, errors.New("No personalNumbers provided")
|
||||
}
|
||||
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, arbeitszeit_per_tag, arbeitszeit_per_woche FROM s_personal_daten WHERE personal_nummer = ANY($1::int[]);`))
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, vorname, nachname, card_uid, arbeitszeit_per_tag, arbeitszeit_per_woche, arbeitszeit_min_start, arbeitszeit_max_ende FROM s_personal_daten WHERE personal_nummer = ANY($1::int[]);`))
|
||||
if err != nil {
|
||||
return users, err
|
||||
}
|
||||
@@ -200,7 +208,7 @@ func GetUserByPersonalNrMulti(personalNummerMulti []int) ([]User, error) {
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var user User
|
||||
if err := rows.Scan(&user.PersonalNummer, &user.CardUID, &user.Vorname, &user.Name, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche); err != nil {
|
||||
if err := rows.Scan(&user.PersonalNummer, &user.Vorname, &user.Name, &user.CardUID, &user.ArbeitszeitPerTag, &user.ArbeitszeitPerWoche, &user.ArbeitMinStart, &user.ArbeitMaxEnde); err != nil {
|
||||
return users, err
|
||||
}
|
||||
users = append(users, user)
|
||||
@@ -246,6 +254,7 @@ func (u *User) ChangePass(password, newPassword string) (bool, error) {
|
||||
}
|
||||
|
||||
func (u *User) GetTeamMembers() ([]User, error) {
|
||||
var teamMemberPNrs []int
|
||||
var teamMembers []User
|
||||
qStr, err := DB.Prepare(`SELECT personal_nummer FROM s_personal_daten WHERE vorgesetzter_pers_nr = $1 ORDER BY "nachname";`)
|
||||
if err != nil {
|
||||
@@ -261,12 +270,16 @@ func (u *User) GetTeamMembers() ([]User, error) {
|
||||
for rows.Next() {
|
||||
var personalNr int
|
||||
err := rows.Scan(&personalNr)
|
||||
user, err := GetUserByPersonalNr(personalNr)
|
||||
teamMemberPNrs = append(teamMemberPNrs, personalNr)
|
||||
if err != nil {
|
||||
log.Println("Error getting user!")
|
||||
return teamMembers, err
|
||||
}
|
||||
teamMembers = append(teamMembers, user)
|
||||
}
|
||||
teamMembers, err = GetUserByPersonalNrMulti(teamMemberPNrs)
|
||||
if err != nil {
|
||||
log.Println("Error getting users!")
|
||||
return teamMembers, err
|
||||
}
|
||||
|
||||
return teamMembers, nil
|
||||
@@ -343,22 +356,6 @@ LIMIT 1;
|
||||
return lastSub
|
||||
}
|
||||
|
||||
func (u *User) GetFromCardUID(card_uid string) (User, error) {
|
||||
user := User{}
|
||||
var err error
|
||||
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, arbeitszeit_per_tag FROM s_personal_daten WHERE card_uid = $1;`))
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
err = qStr.QueryRow(card_uid).Scan(&user.PersonalNummer, &user.CardUID, &user.Vorname, &user.Name, &user.ArbeitszeitPerTag)
|
||||
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (u *User) IsSuperior(e User) bool {
|
||||
var isSuperior int
|
||||
qStr, err := DB.Prepare(`SELECT COUNT(1) FROM s_personal_daten WHERE personal_nummer = $1 AND vorgesetzter_pers_nr = $2`)
|
||||
@@ -372,7 +369,6 @@ func (u *User) IsSuperior(e User) bool {
|
||||
return false
|
||||
}
|
||||
return isSuperior == 1
|
||||
|
||||
}
|
||||
|
||||
func getMonday(ts time.Time) time.Time {
|
||||
|
||||
Reference in New Issue
Block a user