diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql index b392cf5a1d..e812387484 100644 --- a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql +++ b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql @@ -3,6 +3,20 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_ BEFORE INSERT ON `deviceProductionUser` FOR EACH ROW BEGIN - SET NEW.editorFk = account.myUser_getId(); + DECLARE vHasPda BOOLEAN; + DECLARE visFreelancer BOOLEAN; + DECLARE vUserName VARCHAR(50); + + SELECT COUNT(*) INTO vHasPda FROM deviceProductionUser WHERE userFk = NEW.userFk; + + SELECT name INTO vUserName FROM account.user WHERE id = NEW.userFk; + + SELECT account.user_hasRoleId(vUserName, (SELECT id FROM role WHERE name = 'freelancer')) INTO vIsFreelancer; + + IF NOT vIsFreelancer AND vHasPda THEN + CALL util.throw('You can only have one PDA'); + ELSE + SET NEW.editorFk = account.myUser_getId(); + END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql index 055f817909..9035418943 100644 --- a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql +++ b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql @@ -3,6 +3,20 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_ BEFORE UPDATE ON `deviceProductionUser` FOR EACH ROW BEGIN - SET NEW.editorFk = account.myUser_getId(); + DECLARE vHasPda BOOLEAN; + DECLARE visFreelancer BOOLEAN; + DECLARE vUserName VARCHAR(50); + + SELECT COUNT(*) INTO vHasPda FROM deviceProductionUser WHERE userFk = NEW.userFk; + + SELECT name INTO vUserName FROM account.user WHERE id = NEW.userFk; + + SELECT account.user_hasRoleId(vUserName, (SELECT id FROM role WHERE name = 'freelancer')) INTO vIsFreelancer; + + IF NOT vIsFreelancer AND vHasPda THEN + CALL util.throw('You can only have one PDA'); + ELSE + SET NEW.editorFk = account.myUser_getId(); + END IF; END$$ DELIMITER ; diff --git a/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql b/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql new file mode 100644 index 0000000000..39bac86521 --- /dev/null +++ b/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.deviceProductionUser DROP INDEX IF EXISTS deviceProductionUser_UN; +