-- ---------------------------- -- Table structure for anwesenheit -- ---------------------------- DROP TABLE IF EXISTS "anwesenheit"; CREATE TABLE "anwesenheit" ( "counter_id" bigserial NOT NULL, "timestamp" timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP, "card_uid" character varying(255) NOT NULL, "check_in_out" smallint NOT NULL, "geraet_id" smallint NOT NULL, "anwesenheit_typ" int2 NOT NULL, PRIMARY KEY ("counter_id") ); 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'; COMMENT ON COLUMN "anwesenheit"."geraet_id" IS 'ID des Lesegerätes'; -- ---------------------------- -- Table structure for anwesenheitstypen -- ---------------------------- DROP TABLE IF EXISTS "s_anwesenheit_typen"; CREATE TABLE "s_anwesenheit_typen" ( "anwesenheit_id" int2 PRIMARY KEY, "anwesenheit_name" varchar(255) NOT NULL ); -- ---------------------------- -- Table structure for personal_daten -- ---------------------------- DROP TABLE IF EXISTS "s_personal_daten"; CREATE TABLE "s_personal_daten" ( "personal_nummer" int4 NOT NULL PRIMARY KEY, "aktiv_beschaeftigt" bool, "vorname" varchar(255) NOT NULL, "nachname" varchar(255) NOT NULL, "geburtsdatum" date, "plz" varchar(255), "adresse" varchar(255), "geschlecht" int2, "card_uid" varchar(255), "hauptbeschaeftigungs_ort" int2, "arbeitszeit_per_tag" float4, "arbeitszeit_per_woche" float4, "arbeitszeit_min_start" time(6), "arbeitszeit_max_ende" time(6), "vorgesetzter_pers_nr" int4 ); COMMENT ON COLUMN "s_personal_daten"."geschlecht" IS '1==weiblich, 2==maennlich, 3==divers'; DROP TABLE IF EXISTS "user_password"; CREATE TABLE "user_password" ( "personal_nummer" int4 NOT NULL PRIMARY KEY, "pass_hash" TEXT, "zuletzt_geandert" timestamp(6) DEFAULT CURRENT_TIMESTAMP ); -- update Funktion für pass_hash CREATE OR REPLACE FUNCTION update_zuletzt_geandert() RETURNS TRIGGER AS $$ BEGIN -- Nur wenn hash geändert wurde IF NEW.pass_hash IS DISTINCT FROM OLD.pass_hash THEN NEW.zuletzt_geandert = now(); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER pass_hash_update BEFORE UPDATE ON user_password FOR EACH ROW EXECUTE FUNCTION update_zuletzt_geandert(); -- audittabelle für arbeitsstunden bestätigung DROP TABLE IF EXISTS "wochen_report"; CREATE TABLE "wochen_report" ( "id" serial PRIMARY KEY, "personal_nummer" int4 NOT NULL, "woche_start" date NOT NULL, "bestaetigt" bool DEFAULT FALSE, "arbeitszeit" interval NOT NULL, "ueberstunden" interval NOT NULL, "anwesenheiten" int ARRAY, "abwesenheiten" int ARRAY, UNIQUE ("personal_nummer", "woche_start") ); DROP TABLE IF EXISTS "abwesenheit"; CREATE TABLE "abwesenheit" ( "counter_id" bigserial PRIMARY KEY, "card_uid" varchar(255) NOT NULL, "abwesenheit_typ" int2 NOT NULL, "datum_from" timestamptz DEFAULT NOW()::DATE NOT NULL, "datum_to" timestamptz NOT NULL ); DROP TABLE IF EXISTS "s_abwesenheit_typen"; CREATE TABLE "s_abwesenheit_typen" ( "abwesenheit_id" int2 PRIMARY KEY NOT NULL, "abwesenheit_name" varchar(255) NOT NULL, "arbeitszeit_equivalent" float4 NOT NULL ); COMMENT ON COLUMN "s_abwesenheit_typen"."arbeitszeit_equivalent" IS '0=keine Arbeitszeit; 1=Arbeitszeit auffüllen; 2=Arbeitszeit austauschen'; -- Adds crypto extension CREATE EXTENSION IF NOT EXISTS pgcrypto;