4 Commits

Author SHA1 Message Date
3e0f84f618 trying atlas 2025-08-01 18:21:39 +02:00
tom
a9268988e1 Merge pull request 'dev/main' (#19) from dev/main into main
Some checks failed
arbeitszeitmessung/pipeline/head There was a failure building this commit
Reviewed-on: #19
2025-06-20 22:17:20 +02:00
6688128d30 fixed pause times for 9h 2025-05-20 15:08:39 +02:00
d955cb02b8 fixed error when only one booking was inserted 2025-05-20 14:47:24 +02:00
5 changed files with 73 additions and 5 deletions

View File

@@ -26,7 +26,7 @@ func (d *WorkDay) GetWorkDays(card_uid string, tsFrom, tsTo time.Time) []WorkDay
qStr, err := DB.Prepare(` qStr, err := DB.Prepare(`
WITH all_days AS ( WITH all_days AS (
SELECT generate_series($2, $3, INTERVAL '1 day')::DATE AS work_date SELECT generate_series($2::DATE, $3::DATE - INTERVAL '1 day', INTERVAL '1 day')::DATE AS work_date
), ),
ordered_bookings AS ( ordered_bookings AS (
SELECT SELECT
@@ -141,7 +141,7 @@ func (d *WorkDay) GetWorkDays(card_uid string, tsFrom, tsTo time.Time) []WorkDay
func (d *WorkDay) calcPauseTime() { func (d *WorkDay) calcPauseTime() {
if d.workTime > 6*time.Hour && d.pauseTime < 45*time.Minute { if d.workTime > 6*time.Hour && d.pauseTime < 45*time.Minute {
if d.workTime < 9*time.Hour && d.pauseTime < 30*time.Minute { if d.workTime <= (9*time.Hour) && d.pauseTime < 30*time.Minute {
diff := 30*time.Minute - d.pauseTime diff := 30*time.Minute - d.pauseTime
d.workTime -= diff d.workTime -= diff
d.pauseTime += diff d.pauseTime += diff
@@ -155,7 +155,7 @@ func (d *WorkDay) calcPauseTime() {
// Gets the duration someone worked that day // Gets the duration someone worked that day
func (d *WorkDay) getWorkTime() { func (d *WorkDay) getWorkTime() {
if len(d.Bookings) <= 1 && d.Bookings[0].CounterId == 0 { if len(d.Bookings) < 1 {
return return
} }
var workTime, pauseTime time.Duration var workTime, pauseTime time.Duration

View File

@@ -66,7 +66,7 @@ templ dayComponent(workDay models.WorkDay) {
if (workDay.Absence != models.Absence{}) { if (workDay.Absence != models.Absence{}) {
<p>{ workDay.Absence.GetStringType() }</p> <p>{ workDay.Absence.GetStringType() }</p>
} }
if len(workDay.Bookings) <= 1 && (workDay.Absence == models.Absence{}) { if len(workDay.Bookings) < 1 && (workDay.Absence == models.Absence{}) {
<p class="text group-[.edit]:hidden">Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!</p> <p class="text group-[.edit]:hidden">Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!</p>
@absenceComponent(workDay) @absenceComponent(workDay)
@newBookingComponent(workDay) @newBookingComponent(workDay)

View File

@@ -264,7 +264,7 @@ func dayComponent(workDay models.WorkDay) templ.Component {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
} }
if len(workDay.Bookings) <= 1 && (workDay.Absence == models.Absence{}) { if len(workDay.Bookings) < 1 && (workDay.Absence == models.Absence{}) {
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<p class=\"text group-[.edit]:hidden\">Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!</p>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<p class=\"text group-[.edit]:hidden\">Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!</p>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err

10
atlas.hcl Normal file
View File

@@ -0,0 +1,10 @@
# The "dev" environment represents our local testings.
env "local" {
url = "postgres://root:very_secure@:5432/arbeitszeitmessung?search_path=public&sslmode=disable"
migration {
dir = "file://migrations"
format = golang-migrate
}
dev = "docker://postgres/16/dev?search_path=public"
src = "file://schema.sql"
}

58
schema.sql Normal file
View File

@@ -0,0 +1,58 @@
-- Create "abwesenheit" table
CREATE TABLE "abwesenheit" (
"counter_id" bigserial NOT NULL,
"card_uid" character varying(255) NULL,
"abwesenheit_typ" smallint NULL,
"datum" timestamptz NULL DEFAULT (now())::date,
PRIMARY KEY ("counter_id")
);
-- Create "anwesenheit" table
CREATE TABLE "anwesenheit" (
"counter_id" bigserial NOT NULL,
"timestamp" timestamptz NULL DEFAULT CURRENT_TIMESTAMP,
"card_uid" character varying(255) NULL,
"check_in_out" smallint NULL,
"anwesenheit_type" smallint NULL,
"geraet_id" smallint NULL,
PRIMARY KEY ("counter_id")
);
-- Set comment to column: "check_in_out" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."check_in_out" IS '1=Check In 2=Check Out , 3=Check in Manuell, 4=Check out manuell255=Automatic Check Out';
-- Set comment to column: "geraet_id" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."geraet_id" IS 'ID des Lesegerätes';
-- Create "personal_daten" table
CREATE TABLE "personal_daten" (
"personal_nummer" integer NOT NULL,
"aktiv_beschaeftigt" boolean NULL,
"vorname" character varying(255) NULL,
"nachname" character varying(255) NULL,
"geburtsdatum" date NULL,
"plz" character varying(255) NULL,
"adresse" character varying(255) NULL,
"geschlecht" smallint NULL,
"card_uid" character varying(255) NULL,
"hauptbeschaeftigungs_ort" smallint NULL,
"arbeitszeit_per_tag" real NULL,
"arbeitszeit_min_start" time NULL,
"arbeitszeit_max_ende" time NULL,
"vorgesetzter_pers_nr" integer NULL,
PRIMARY KEY ("personal_nummer")
);
-- Set comment to column: "geschlecht" on table: "personal_daten"
COMMENT ON COLUMN "personal_daten"."geschlecht" IS '1==weiblich, 2==maennlich, 3==divers';
-- Create "user_password" table
CREATE TABLE "user_password" (
"personal_nummer" integer NOT NULL,
"pass_hash" text NULL,
"zuletzt_geandert" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("personal_nummer")
);
-- Create "wochen_report" table
CREATE TABLE "wochen_report" (
"id" serial NOT NULL,
"personal_nummer" integer NULL,
"woche_start" date NULL,
"bestaetigt" boolean NULL DEFAULT false,
PRIMARY KEY ("id"),
CONSTRAINT "wochen_report_personal_nummer_woche_start_key" UNIQUE ("personal_nummer", "woche_start")
);