98404e1620f8ac3fb02f13d4a41c8988248c67e0
[kivitendo-erp.git] / sql / Pg-upgrade2 / time_recordings_date_duration.sql
1 -- @tag: time_recordings_date_duration
2 -- @description: Erweiterung Zeiterfassung um Datum und Dauer
3 -- @depends: time_recordings2
4
5 ALTER TABLE time_recordings ADD   COLUMN date     DATE;
6 ALTER TABLE time_recordings ADD   COLUMN duration INTEGER;
7
8 UPDATE time_recordings SET date = start_time::DATE;
9 ALTER TABLE time_recordings ALTER COLUMN start_time DROP NOT NULL;
10 ALTER TABLE time_recordings ALTER COLUMN date SET NOT NULL;
11
12 UPDATE time_recordings SET duration = EXTRACT(EPOCH FROM (end_time - start_time))/60;
13
14 -- trigger to set date from start_time
15 CREATE OR REPLACE FUNCTION time_recordings_set_date_trigger()
16 RETURNS TRIGGER AS $$
17   BEGIN
18     IF NEW.start_time IS NOT NULL THEN
19       NEW.date = NEW.start_time::DATE;
20     END IF;
21     RETURN NEW;
22   END;
23 $$ LANGUAGE plpgsql;
24
25 CREATE TRIGGER time_recordings_set_date BEFORE INSERT OR UPDATE ON time_recordings FOR EACH ROW EXECUTE PROCEDURE time_recordings_set_date_trigger();
26
27 -- trigger to set duration from start_time and end_time
28 CREATE OR REPLACE FUNCTION time_recordings_set_duration_trigger()
29 RETURNS TRIGGER AS $$
30   BEGIN
31     IF NEW.start_time IS NOT NULL AND NEW.end_time IS NOT NULL THEN
32       NEW.duration = EXTRACT(EPOCH FROM (NEW.end_time - NEW.start_time))/60;
33     END IF;
34     RETURN NEW;
35   END;
36 $$ LANGUAGE plpgsql;
37
38 CREATE TRIGGER time_recordings_set_duration BEFORE INSERT OR UPDATE ON time_recordings FOR EACH ROW EXECUTE PROCEDURE time_recordings_set_duration_trigger();