diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml
index 1575f0bb..bc49068c 100644
--- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml
+++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml
@@ -539,7 +539,7 @@
-
+
TRUNCATE TABLE FORM_FIELD RESTART IDENTITY;
@@ -696,7 +696,7 @@
path="classpath:db/dump/inserted_form_field_data_13_09_2024.sql" />
-
+
@@ -710,6 +710,35 @@
+
+
+
+ CREATE OR REPLACE FUNCTION gepafin_schema.clock_timestamp_updated_date_column()
+ RETURNS TRIGGER
+ LANGUAGE plpgsql
+ AS $$
+ BEGIN
+ NEW.updated_date = clock_timestamp();
+ RETURN NEW;
+ END;
+ $$;
+
+
+
+ CREATE OR REPLACE FUNCTION gepafin_schema.clock_timestamp_created_date_column()
+ RETURNS TRIGGER
+ LANGUAGE plpgsql
+ AS $$
+ BEGIN
+ IF NEW.created_date IS NULL THEN
+ NEW.created_date = clock_timestamp();
+ END IF;
+ NEW.updated_date = NEW.created_date;
+ RETURN NEW;
+ END;
+ $$;
+
+
diff --git a/src/main/resources/db/changelog/db.changelog-master.xml b/src/main/resources/db/changelog/db.changelog-master.xml
index f44695c7..bf4c4536 100644
--- a/src/main/resources/db/changelog/db.changelog-master.xml
+++ b/src/main/resources/db/changelog/db.changelog-master.xml
@@ -5,4 +5,5 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.23.xsd">
+
diff --git a/src/main/resources/db/changelog/dynamic-triggers.xml b/src/main/resources/db/changelog/dynamic-triggers.xml
new file mode 100644
index 00000000..23f1101e
--- /dev/null
+++ b/src/main/resources/db/changelog/dynamic-triggers.xml
@@ -0,0 +1,51 @@
+
+
+
+
+ DO $$
+ DECLARE
+ r RECORD;
+ BEGIN
+ -- Loop through all tables in the schema that have the 'updated_date' column
+ FOR r IN (
+ SELECT table_name
+ FROM information_schema.columns
+ WHERE column_name = 'updated_date'
+ AND table_schema = 'gepafin_schema'
+ )
+ LOOP
+ EXECUTE format(
+ 'CREATE OR REPLACE TRIGGER tg_gepafin_schema_updated_at_%I
+ BEFORE UPDATE ON gepafin_schema.%I
+ FOR EACH ROW
+ EXECUTE FUNCTION gepafin_schema.clock_timestamp_updated_date_column()',
+ r.table_name, r.table_name
+ );
+ END LOOP;
+
+ -- Loop through all tables in the schema that have the 'created_date' column
+ FOR r IN (
+ SELECT table_name
+ FROM information_schema.columns
+ WHERE column_name = 'created_date'
+ AND table_schema = 'gepafin_schema'
+ )
+ LOOP
+ EXECUTE format(
+ 'CREATE OR REPLACE TRIGGER tg_gepafin_schema_created_at_%I
+ BEFORE INSERT ON gepafin_schema.%I
+ FOR EACH ROW
+ EXECUTE FUNCTION gepafin_schema.clock_timestamp_created_date_column()',
+ r.table_name, r.table_name
+ );
+ END LOOP;
+ END;
+ $$ LANGUAGE plpgsql;
+
+
+