Reviewed-on: #30 Co-authored-by: Tom Tröger <t.troeger.02@gmail.com> Co-committed-by: Tom Tröger <t.troeger.02@gmail.com>
107 lines
3.1 KiB
PL/PgSQL
107 lines
3.1 KiB
PL/PgSQL
-- ----------------------------
|
|
-- 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)
|
|
);
|
|
|
|
-- ----------------------------
|
|
-- 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 NOT NULL,
|
|
"arbeitszeit_per_woche" float4 NOT NULL,
|
|
"arbeitszeit_min_start" time(6),
|
|
"arbeitszeit_max_ende" time(6),
|
|
"vorgesetzter_pers_nr" int4 NOT NULL
|
|
);
|
|
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,
|
|
"woche_start" date,
|
|
"bestaetigt" bool DEFAULT FALSE,
|
|
"arbeitszeit" float4,
|
|
"ueberstunden" float4,
|
|
UNIQUE ("personal_nummer", "woche_start")
|
|
);
|
|
|
|
DROP TABLE IF EXISTS "abwesenheit";
|
|
CREATE TABLE "abwesenheit" (
|
|
"counter_id" bigserial PRIMARY KEY,
|
|
"card_uid" varchar(255),
|
|
"abwesenheit_typ" int2,
|
|
"datum" timestamptz(6) DEFAULT NOW()::DATE
|
|
);
|
|
|
|
DROP TABLE IF EXISTS "s_abwesenheit_typen";
|
|
CREATE TABLE "s_abwesenheit_typen" (
|
|
"abwesenheit_id" int2 PRIMARY KEY,
|
|
"abwesenheit_name" varchar(255),
|
|
"arbeitszeit_equivalent" float4
|
|
);
|
|
|
|
-- Adds crypto extension
|
|
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|