@@ -258,17 +258,19 @@ CREATE TABLE date_company_assignment (
258258
259259CREATE TABLE project (
260260 project_id INT NOT NULL,
261- object_version INT,
261+ object_version INT NOT NULL ,
262262 owner_id INT NOT NULL,
263263 team_id INT,
264- number VARCHAR(100),
265- name VARCHAR(255),
264+ number VARCHAR(100) NOT NULL ,
265+ name VARCHAR(255) NOT NULL ,
266266 start_date TIMESTAMP WITH TIME ZONE,
267267 end_date TIMESTAMP WITH TIME ZONE,
268+ -- 00_sleeping, 05_processing, 10_out_of_date, 30_archived
268269 status VARCHAR(255),
269270 is_fake SMALLINT, -- whether this is the doc store for a company
270- db_status VARCHAR(50),
271+ db_status VARCHAR(50) NOT NULL ,
271272 kind VARCHAR(50),
273+ -- this is the document storage URL, either skyrix:// for DB or empty/file://
272274 url VARCHAR(100),
273275 parent_project_id INT,
274276 CONSTRAINT pk_project PRIMARY KEY (project_id),
@@ -476,14 +478,14 @@ CREATE TABLE job (
476478);
477479
478480CREATE TABLE job_history (
479- job_history_id INT NOT NULL,
480- object_version INT NOT NULL,
481- job_id INT NOT NULL,
482- actor_id INT,
483- action VARCHAR(50),
484- action_date TIMESTAMP WITH TIME ZONE,
485- job_status VARCHAR(50),
486- db_status VARCHAR(50),
481+ job_history_id INT NOT NULL,
482+ object_version INT NOT NULL,
483+ job_id INT NOT NULL,
484+ actor_id INT NOT NULL ,
485+ action VARCHAR(50) NOT NULL ,
486+ action_date TIMESTAMP WITH TIME ZONE NOT NULL ,
487+ job_status VARCHAR(50) NOT NULL ,
488+ db_status VARCHAR(50) NOT NULL ,
487489 CONSTRAINT pk_job_history PRIMARY KEY (job_history_id)
488490);
489491
@@ -783,8 +785,12 @@ CREATE RULE employment_add AS ON INSERT TO employment DO INSTEAD
783785 new.company_assignment_id, new.enterprise_id, new.person_id,
784786 new.is_headquarter, new.is_chief, new."function", new.db_status,
785787 new.start_date, new.end_date
786- );
787-
788+ )
789+ RETURNING
790+ company_assignment_id, company_id, sub_company_id,
791+ is_headquarter, is_chief, "function", db_status,
792+ start_date, end_date
793+ ;
788794CREATE RULE employment_set AS ON UPDATE TO employment DO INSTEAD
789795 UPDATE company_assignment
790796 SET company_id = new.enterprise_id,
@@ -825,7 +831,12 @@ CREATE RULE company_hierarchy_add AS ON INSERT TO company_hierarchy DO INSTEAD
825831 new.company_assignment_id, new.parent_id, new.company_id,
826832 new.is_headquarter, new.is_chief, new."function", new.db_status,
827833 new.start_date, new.end_date
828- );
834+ )
835+ RETURNING
836+ company_assignment_id, company_id, sub_company_id,
837+ is_headquarter, is_chief, "function", db_status,
838+ start_date, end_date
839+ ;
829840
830841CREATE RULE company_hierarchy_set AS ON UPDATE TO company_hierarchy DO INSTEAD
831842 UPDATE company_assignment
@@ -868,7 +879,12 @@ CREATE RULE person_relationship_add AS
868879 new.company_assignment_id, new.person_id, new.related_person_id,
869880 new.relationship, new.db_status,
870881 new.start_date, new.end_date
871- );
882+ )
883+ RETURNING
884+ company_assignment_id, company_id, sub_company_id,
885+ "function", db_status,
886+ start_date, end_date
887+ ;
872888
873889CREATE RULE person_relationship_set AS
874890 ON UPDATE TO person_relationship DO INSTEAD
@@ -899,6 +915,46 @@ CREATE VIEW team_membership AS
899915 FROM company_assignment ca
900916 INNER JOIN team t USING (company_id)
901917 INNER JOIN person p ON (p.company_id = ca.sub_company_id);
918+ CREATE OR REPLACE FUNCTION insert_team_membership() RETURNS trigger AS $$
919+ DECLARE
920+ _team_exists BOOLEAN;
921+ _person_exists BOOLEAN;
922+ BEGIN
923+ SELECT EXISTS ( SELECT 1 FROM team WHERE company_id = NEW.team_id )
924+ INTO _team_exists;
925+ IF NOT _team_exists THEN
926+ RAISE EXCEPTION 'Team with id % does not exist', NEW.team_id;
927+ END IF;
928+ SELECT EXISTS ( SELECT 1 FROM person WHERE company_id = NEW.person_id )
929+ INTO _person_exists;
930+ IF NOT _person_exists THEN
931+ RAISE EXCEPTION 'Person with id % does not exist', NEW.person_id;
932+ END IF;
933+ INSERT INTO company_assignment (
934+ company_assignment_id, company_id, sub_company_id, is_headquarter,
935+ is_chief, "function", db_status, start_date, end_date
936+ )
937+ VALUES (
938+ NEW.company_assignment_id, NEW.team_id, NEW.person_id, NEW.is_headquarter,
939+ NEW.is_chief, NEW."function", NEW.db_status, NEW.start_date, NEW.end_date
940+ );
941+ RETURN NEW;
942+ END;
943+ $$ LANGUAGE plpgsql;
944+ CREATE OR REPLACE FUNCTION delete_team_membership() RETURNS trigger AS $$
945+ BEGIN
946+ DELETE FROM company_assignment
947+ WHERE company_assignment_id = OLD.company_assignment_id;
948+ RETURN OLD;
949+ END;
950+ $$ LANGUAGE plpgsql;
951+
952+ CREATE TRIGGER trigger_insert_team_membership
953+ INSTEAD OF INSERT ON team_membership
954+ FOR EACH ROW EXECUTE FUNCTION insert_team_membership();
955+ CREATE TRIGGER trigger_delete_team_membership
956+ INSTEAD OF DELETE ON team_membership
957+ FOR EACH ROW EXECUTE FUNCTION delete_team_membership();
902958
903959CREATE VIEW team_hierarchy AS
904960 SELECT
@@ -921,21 +977,24 @@ CREATE VIEW project_teams AS
921977CREATE RULE project_teams_add AS ON INSERT TO project_teams DO INSTEAD
922978 INSERT INTO project_company_assignment (
923979 project_company_assignment_id, company_id, project_id, info,
924- has_access, access_right, db_status,
925- start_date, end_date
980+ has_access, access_right, db_status, start_date, end_date
926981 )
927982 VALUES (
928- new.project_company_assignment_id, new.company_id, new.project_id, new.info,
929- new.has_access, new.access_right, new.db_status, new.start_date, new.end_date
930- );
983+ NEW.project_company_assignment_id, NEW.company_id, NEW.project_id, NEW.info,
984+ NEW.has_access, NEW.access_right, NEW.db_status,
985+ NEW.start_date, NEW.end_date
986+ )
987+ RETURNING
988+ project_company_assignment_id, company_id, project_id, info,
989+ has_access, access_right, db_status, start_date, end_date
990+ ;
931991CREATE RULE project_teams_set AS ON UPDATE TO project_teams DO INSTEAD
932992 UPDATE project_company_assignment
933- SET company_id = new .company_id, project_id = new .project_id, info = new .info,
934- has_access = new .has_access, access_right = new .access_right,
935- db_status = new .db_status,
936- start_date = new .start_date, end_date = new .end_date
993+ SET company_id = NEW .company_id, project_id = NEW .project_id, info = NEW .info,
994+ has_access = NEW .has_access, access_right = NEW .access_right,
995+ db_status = NEW .db_status,
996+ start_date = NEW .start_date, end_date = NEW .end_date
937997 WHERE project_company_assignment_id = old.project_company_assignment_id;
938-
939998CREATE RULE project_teams_del AS ON DELETE TO project_teams DO INSTEAD
940999 DELETE FROM project_company_assignment
9411000 WHERE project_company_assignment_id = old.project_company_assignment_id;
@@ -955,7 +1014,11 @@ CREATE RULE project_persons_add AS ON INSERT TO project_persons DO INSTEAD
9551014 new.project_company_assignment_id, new.company_id, new.project_id, new.info,
9561015 new.has_access, new.access_right, new.db_status,
9571016 new.start_date, new.end_date
958- );
1017+ )
1018+ RETURNING
1019+ project_company_assignment_id, company_id, project_id, info, has_access,
1020+ access_right, db_status, start_date, end_date
1021+ ;
9591022CREATE RULE project_persons_set AS ON UPDATE TO project_persons DO INSTEAD
9601023 UPDATE project_company_assignment
9611024 SET company_id = new.company_id, project_id = new.project_id, info = new.info,
@@ -983,7 +1046,11 @@ CREATE RULE project_companies_add AS ON INSERT TO project_companies DO INSTEAD
9831046 new.project_company_assignment_id, new.company_id, new.project_id, new.info,
9841047 new.has_access, new.access_right, new.db_status,
9851048 new.start_date, new.end_date
986- );
1049+ )
1050+ RETURNING
1051+ project_company_assignment_id, company_id, project_id, info, has_access,
1052+ access_right, db_status, start_date, end_date
1053+ ;
9871054CREATE RULE project_companies_set AS ON UPDATE TO project_companies DO INSTEAD
9881055 UPDATE project_company_assignment
9891056 SET company_id = new.company_id, project_id = new.project_id, info = new.info,
@@ -1455,7 +1522,7 @@ INSERT INTO table_version (table_name, table_version)
14551522 VALUES ('date_company_assignment', 55);
14561523
14571524INSERT INTO table_version (table_name, table_version)
1458- VALUES ('project', 54 );
1525+ VALUES ('project', 56 );
14591526INSERT INTO table_version (table_name, table_version)
14601527 VALUES ('project_info', 56);
14611528INSERT INTO table_version (table_name, table_version)
@@ -1475,7 +1542,7 @@ INSERT INTO table_version (table_name, table_version)
14751542INSERT INTO table_version (table_name, table_version)
14761543 VALUES ('job', 55);
14771544INSERT INTO table_version (table_name, table_version)
1478- VALUES ('job_history', 56 );
1545+ VALUES ('job_history', 57 );
14791546INSERT INTO table_version (table_name, table_version)
14801547 VALUES ('job_history_info', 42);
14811548
0 commit comments