diff --git a/db/routines/vn/procedures/worker_checkMultipleDevice.sql b/db/routines/vn/procedures/worker_checkMultipleDevice.sql new file mode 100644 index 0000000000..ecc485c9d4 --- /dev/null +++ b/db/routines/vn/procedures/worker_checkMultipleDevice.sql @@ -0,0 +1,22 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`worker_checkMultipleDevice`( + vSelf INT +) +BEGIN +/** + * Verify if a worker has multiple assigned devices, + * except for freelancers. + * + * @param vUserFk worker id. + */ + DECLARE vHasPda BOOLEAN; + DECLARE vIsFreelance BOOLEAN; + + SELECT COUNT(*) INTO vHasPda FROM deviceProductionUser WHERE userFk = vSelf; + SELECT isFreelance INTO vIsFreelance FROM worker WHERE id = vSelf; + + IF NOT vIsFreelance AND vHasPda > 1 THEN + CALL util.throw('You can only have one PDA'); + END IF; +END$$ +DELIMITER ; diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql index e812387484..ccef618a4f 100644 --- a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql +++ b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql @@ -3,20 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_ BEFORE INSERT ON `deviceProductionUser` FOR EACH ROW BEGIN - 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; + CALL worker_checkMultipleDevice(NEW.userFk); + SET NEW.editorFk = account.myUser_getId(); END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql index 9035418943..7318bd99bd 100644 --- a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql +++ b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql @@ -3,20 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_ BEFORE UPDATE ON `deviceProductionUser` FOR EACH ROW BEGIN - 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; + CALL worker_checkMultipleDevice(NEW.userFk); + SET NEW.editorFk = account.myUser_getId(); END$$ DELIMITER ;