CHANGE: finalized user auth + added booking edit view
This commit is contained in:
@@ -132,6 +132,9 @@ func (b *Booking) GetBookingsGrouped(card_uid string, tsFrom time.Time, tsTo tim
|
||||
var result []WorkDay
|
||||
for key, bookings := range grouped {
|
||||
day, _ := time.Parse("2006-01-02", key)
|
||||
sort.Slice(bookings, func(i, j int) bool {
|
||||
return bookings[i].Timestamp.Before(bookings[j].Timestamp)
|
||||
})
|
||||
result = append(result, WorkDay{Day: day, Bookings: bookings})
|
||||
}
|
||||
|
||||
@@ -157,11 +160,11 @@ func (b Booking) Save() {
|
||||
|
||||
func (b *Booking) GetBookingType() string {
|
||||
switch b.CheckInOut{
|
||||
case (1):
|
||||
case 1,3: //manuelle Änderung
|
||||
return "kommen"
|
||||
case (2):
|
||||
case 2, 4: //manuelle Änderung
|
||||
return "gehen"
|
||||
case(255):
|
||||
case 255:
|
||||
return "abgemeldet"
|
||||
default:
|
||||
return "Buchungs Typ unbekannt"
|
||||
@@ -203,3 +206,22 @@ func checkLastBooking(b Booking) bool {
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (b *Booking) UpdateTime(newTime time.Time){
|
||||
hour, minute, _ := newTime.Clock()
|
||||
if(hour == b.Timestamp.Local().Hour() && minute == b.Timestamp.Local().Minute()){
|
||||
return
|
||||
}
|
||||
// TODO: add check for time overlap
|
||||
|
||||
var newBooking Booking
|
||||
newBooking.Timestamp = time.Date(b.Timestamp.Year(), b.Timestamp.Month(), b.Timestamp.Day(), hour, minute, 0, 0, time.Local).UTC()
|
||||
if(b.CheckInOut < 3){
|
||||
newBooking.CheckInOut = b.CheckInOut + 2
|
||||
}
|
||||
if(b.CheckInOut == 255){
|
||||
newBooking.CheckInOut = 4
|
||||
}
|
||||
b.Update(newBooking)
|
||||
b.Save()
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ type User struct {
|
||||
Name string `json:"name"`
|
||||
Vorname string `json:"vorname"`
|
||||
HauptbeschaeftigungsOrt int8 `json:"hauptbeschaeftigungsort"`
|
||||
PersonalNummer int `json:"personal_nummer"`
|
||||
}
|
||||
|
||||
func (u *User) GetAll() ([]User, error) {
|
||||
@@ -66,13 +67,27 @@ func (u *User) Logout() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *User) GetById(card_uid string) (User, error) {
|
||||
func (u *User) GetByCardUID(card_uid string) (User, error) {
|
||||
var user User
|
||||
qStr, err := DB.Prepare((`SELECT card_uid, vorname, nachname, hauptbeschaeftigung_ort FROM personal_daten WHERE card_uid = $1;`))
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, hauptbeschaeftigung_ort FROM personal_daten WHERE card_uid = $1;`))
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
err = qStr.QueryRow(card_uid).Scan(&user.CardUID, &user.Vorname, &user.Name, &user.HauptbeschaeftigungsOrt)
|
||||
err = qStr.QueryRow(card_uid).Scan(&user.PersonalNummer, &user.CardUID, &user.Vorname, &user.Name, &user.HauptbeschaeftigungsOrt)
|
||||
if err != nil{
|
||||
return user, err
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (u *User) GetByPersonalNummer (personalNummer int) (User, error) {
|
||||
var user User
|
||||
|
||||
qStr, err := DB.Prepare((`SELECT personal_nummer, card_uid, vorname, nachname, hauptbeschaeftigung_ort FROM 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.HauptbeschaeftigungsOrt)
|
||||
if err != nil{
|
||||
return user, err
|
||||
}
|
||||
|
||||
@@ -1,31 +1,34 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type WorkDay struct {
|
||||
Day time.Time
|
||||
workTime time.Duration
|
||||
Bookings []Booking
|
||||
workTime time.Duration
|
||||
}
|
||||
|
||||
// Gets the duration someone worked that day
|
||||
func (d WorkDay) GetWorkTime() time.Duration{
|
||||
if(d.workTime > 0) {
|
||||
return d.workTime
|
||||
d.workTime = 0
|
||||
for i := 0; i < len(d.Bookings) - (1 + len(d.Bookings)%2); i += 2{
|
||||
start := d.Bookings[i].Timestamp
|
||||
end := d.Bookings[i+1].Timestamp
|
||||
d.workTime += end.Sub(start)
|
||||
}
|
||||
var lastCame Booking
|
||||
for _, booking := range d.Bookings{
|
||||
if(booking.CheckInOut == 1){//kommen
|
||||
lastCame = booking
|
||||
}else{
|
||||
d.workTime = d.workTime + booking.Timestamp.Sub(lastCame.Timestamp)
|
||||
}
|
||||
}
|
||||
if(time.Since(d.Day) < 24 * time.Hour && len(d.Bookings) % 2 == 1){
|
||||
d.workTime += time.Since(lastCame.Timestamp)
|
||||
|
||||
// checks if booking is today and has no gehen yet, so the time since last kommen booking is added to workTime
|
||||
if(d.Day.Equal(time.Now().Truncate(24 * time.Hour)) && len(d.Bookings) % 2 == 1){
|
||||
d.workTime += time.Since(d.Bookings[len(d.Bookings)-1].Timestamp)
|
||||
}
|
||||
return d.workTime
|
||||
}
|
||||
|
||||
// Converts duration to string and replaces 0s with in
|
||||
//
|
||||
// -> output xhxmin
|
||||
func (d WorkDay) GetWorkTimeString() string {
|
||||
str := d.GetWorkTime().Abs().Round(time.Minute).String()
|
||||
str = str[:len(str)-2] + "in"
|
||||
@@ -35,10 +38,12 @@ func (d WorkDay) GetWorkTimeString() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// returns bool wheter the workday was ended with an automatic logout
|
||||
func (d WorkDay) RequiresAction() bool {
|
||||
return d.Bookings[len(d.Bookings)-1].CheckInOut == 255
|
||||
}
|
||||
|
||||
// returns a integer percentage of how much day has been worked of
|
||||
func (d WorkDay) GetWorkDayProgress() uint8 {
|
||||
defaultWorkTime, _ := time.ParseDuration("7h42m")
|
||||
progress := (d.GetWorkTime().Seconds()/defaultWorkTime.Seconds())*100
|
||||
|
||||
Reference in New Issue
Block a user