From 976b18203eefa619c1db80ba38f8ba94e520dc04 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 16 Apr 2024 10:49:17 +0200 Subject: [PATCH 01/16] feat: refs #7187 check if is freelancer on insert & update --- .../deviceProductionUser_beforeInsert.sql | 16 +++++++++++++++- .../deviceProductionUser_beforeUpdate.sql | 16 +++++++++++++++- .../10993-brownAsparagus/00-dropUniqueKey.sql | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 db/versions/10993-brownAsparagus/00-dropUniqueKey.sql 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; + -- 2.40.1 From 71a9aed1bb64acfc8bbadda6541c1145845964f5 Mon Sep 17 00:00:00 2001 From: pablone Date: Mon, 22 Apr 2024 18:03:17 +0200 Subject: [PATCH 02/16] fix: refs #7187 check for multiple device on freelancer --- .../procedures/worker_checkMultipleDevice.sql | 22 +++++++++++++++++++ .../deviceProductionUser_beforeInsert.sql | 17 ++------------ .../deviceProductionUser_beforeUpdate.sql | 16 ++------------ 3 files changed, 26 insertions(+), 29 deletions(-) create mode 100644 db/routines/vn/procedures/worker_checkMultipleDevice.sql 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 ; -- 2.40.1 From fbc1614132bbe5474b02b2b55d052f1cf9bc00f1 Mon Sep 17 00:00:00 2001 From: pablone Date: Tue, 23 Apr 2024 18:50:28 +0200 Subject: [PATCH 03/16] fix: refs #7187 sql creation for deviceProductionUser --- db/versions/11010-blackChrysanthemum/00-firstScript.sql | 6 ++++++ db/versions/11011-pinkMoss/00-firstScript.sql | 1 + 2 files changed, 7 insertions(+) create mode 100644 db/versions/11010-blackChrysanthemum/00-firstScript.sql create mode 100644 db/versions/11011-pinkMoss/00-firstScript.sql diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql new file mode 100644 index 0000000000..79751d0950 --- /dev/null +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -0,0 +1,6 @@ +-- Place your SQL code here +ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY deviceProductionUser_FK; + +ALTER TABLE vn.deviceProductionUser DROP PRIMARY KEY; + +ALTER TABLE vn.deviceProductionUser ADD id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST; diff --git a/db/versions/11011-pinkMoss/00-firstScript.sql b/db/versions/11011-pinkMoss/00-firstScript.sql new file mode 100644 index 0000000000..371c2c358d --- /dev/null +++ b/db/versions/11011-pinkMoss/00-firstScript.sql @@ -0,0 +1 @@ +-- Place your SQL code here -- 2.40.1 From a15970c95ff32917af1853b6e83261bb35c43580 Mon Sep 17 00:00:00 2001 From: pablone Date: Wed, 24 Apr 2024 11:08:57 +0200 Subject: [PATCH 04/16] fix: refs #7187 sql for pdaFreelancer --- .../vn/triggers/deviceProductionUser_afterInsert.sql | 8 ++++++++ .../vn/triggers/deviceProductionUser_beforeInsert.sql | 1 - db/versions/11010-blackChrysanthemum/00-firstScript.sql | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 db/routines/vn/triggers/deviceProductionUser_afterInsert.sql diff --git a/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql b/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql new file mode 100644 index 0000000000..3c8a9a51db --- /dev/null +++ b/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql @@ -0,0 +1,8 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_afterInsert` + AFTER INSERT ON `deviceProductionUser` + FOR EACH ROW +BEGIN + CALL worker_checkMultipleDevice(NEW.userFk); +END$$ +DELIMITER ; diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql index ccef618a4f..b392cf5a1d 100644 --- a/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql +++ b/db/routines/vn/triggers/deviceProductionUser_beforeInsert.sql @@ -3,7 +3,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_ BEFORE INSERT ON `deviceProductionUser` FOR EACH ROW BEGIN - CALL worker_checkMultipleDevice(NEW.userFk); SET NEW.editorFk = account.myUser_getId(); END$$ DELIMITER ; diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index 79751d0950..483df99d01 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -4,3 +4,7 @@ ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY deviceProductionUser_FK; ALTER TABLE vn.deviceProductionUser DROP PRIMARY KEY; ALTER TABLE vn.deviceProductionUser ADD id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST; + +ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_deviceProduction_FK FOREIGN KEY (deviceProductionFk) REFERENCES vn.deviceProduction(id); + +ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique UNIQUE KEY (deviceProductionFk); -- 2.40.1 From 88ef12032b463274187dd131212669e86981971d Mon Sep 17 00:00:00 2001 From: pablone Date: Wed, 24 Apr 2024 14:05:18 +0200 Subject: [PATCH 05/16] feat: refs #7187 serialNumber new column --- db/versions/11010-blackChrysanthemum/00-firstScript.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index 483df99d01..dcf7585c24 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -8,3 +8,6 @@ ALTER TABLE vn.deviceProductionUser ADD id INT UNSIGNED AUTO_INCREMENT NOT NULL ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_deviceProduction_FK FOREIGN KEY (deviceProductionFk) REFERENCES vn.deviceProduction(id); ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique UNIQUE KEY (deviceProductionFk); + +ALTER TABLE vn.deviceProduction ADD simSerialNumber TEXT NULL; + -- 2.40.1 From 008b6f6f416ed6c8faa57f023fbb14f1f5c8fcec Mon Sep 17 00:00:00 2001 From: pablone Date: Wed, 24 Apr 2024 14:08:26 +0200 Subject: [PATCH 06/16] fix: refs #7187 unify versions --- db/versions/10993-brownAsparagus/00-dropUniqueKey.sql | 2 -- db/versions/11010-blackChrysanthemum/00-firstScript.sql | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 db/versions/10993-brownAsparagus/00-dropUniqueKey.sql diff --git a/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql b/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql deleted file mode 100644 index 39bac86521..0000000000 --- a/db/versions/10993-brownAsparagus/00-dropUniqueKey.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE vn.deviceProductionUser DROP INDEX IF EXISTS deviceProductionUser_UN; - diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index dcf7585c24..c274d1c716 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -1,4 +1,5 @@ --- Place your SQL code here +ALTER TABLE vn.deviceProductionUser DROP INDEX IF EXISTS deviceProductionUser_UN; + ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY deviceProductionUser_FK; ALTER TABLE vn.deviceProductionUser DROP PRIMARY KEY; -- 2.40.1 From e8a32d8e13ebd1878d2ddb6cc3d35b66b5b48231 Mon Sep 17 00:00:00 2001 From: pablone Date: Wed, 24 Apr 2024 14:09:42 +0200 Subject: [PATCH 07/16] fix: refs #7187 db version --- db/versions/11011-pinkMoss/00-firstScript.sql | 1 - 1 file changed, 1 deletion(-) delete mode 100644 db/versions/11011-pinkMoss/00-firstScript.sql diff --git a/db/versions/11011-pinkMoss/00-firstScript.sql b/db/versions/11011-pinkMoss/00-firstScript.sql deleted file mode 100644 index 371c2c358d..0000000000 --- a/db/versions/11011-pinkMoss/00-firstScript.sql +++ /dev/null @@ -1 +0,0 @@ --- Place your SQL code here -- 2.40.1 From f2d4283304d50a3420c232ac987662392d46e872 Mon Sep 17 00:00:00 2001 From: pablone Date: Wed, 24 Apr 2024 14:29:57 +0200 Subject: [PATCH 08/16] fix: refs #7187 number on de code --- db/routines/vn/procedures/worker_checkMultipleDevice.sql | 6 ++++-- db/versions/11010-blackChrysanthemum/00-firstScript.sql | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/db/routines/vn/procedures/worker_checkMultipleDevice.sql b/db/routines/vn/procedures/worker_checkMultipleDevice.sql index ecc485c9d4..00df08d49a 100644 --- a/db/routines/vn/procedures/worker_checkMultipleDevice.sql +++ b/db/routines/vn/procedures/worker_checkMultipleDevice.sql @@ -11,11 +11,13 @@ BEGIN */ DECLARE vHasPda BOOLEAN; DECLARE vIsFreelance BOOLEAN; + DECLARE vMaxDevicesPerUser INT; SELECT COUNT(*) INTO vHasPda FROM deviceProductionUser WHERE userFk = vSelf; - SELECT isFreelance INTO vIsFreelance FROM worker WHERE id = vSelf; + SELECT IFNULL(isFreelance, FALSE) INTO vIsFreelance FROM worker WHERE id = vSelf; + SELECT IFNULL(maxDevicesPerUser, FALSE) INTO vMaxDevicesPerUser FROM deviceProductionConfig LIMIT 1; - IF NOT vIsFreelance AND vHasPda > 1 THEN + IF NOT vIsFreelance AND vHasPda > vMaxDevicesPerUser THEN CALL util.throw('You can only have one PDA'); END IF; END$$ diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index c274d1c716..556ddfc1b5 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -12,3 +12,6 @@ ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique U ALTER TABLE vn.deviceProduction ADD simSerialNumber TEXT NULL; +ALTER TABLE vn.deviceProductionConfig ADD maxDevicesPerUser INT UNSIGNED NULL; + +UPDATE vn.deviceProductionConfig SET maxDevicesPerUser=1 WHERE id=1; -- 2.40.1 From 133b862dc0d0fc9660dc44ac0f11fbf1acc269ca Mon Sep 17 00:00:00 2001 From: pablone Date: Fri, 3 May 2024 14:20:16 +0200 Subject: [PATCH 09/16] fix: refs #7187 move column sim to deviceProductionUser --- .../11010-blackChrysanthemum/00-firstScript.sql | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index 556ddfc1b5..a0d10891c6 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -1,17 +1,17 @@ ALTER TABLE vn.deviceProductionUser DROP INDEX IF EXISTS deviceProductionUser_UN; -ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY deviceProductionUser_FK; +ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY IF EXISTS deviceProductionUser_FK; ALTER TABLE vn.deviceProductionUser DROP PRIMARY KEY; -ALTER TABLE vn.deviceProductionUser ADD id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST; +ALTER TABLE vn.deviceProductionUser ADD IF NOT EXISTS id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST; -ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_deviceProduction_FK FOREIGN KEY (deviceProductionFk) REFERENCES vn.deviceProduction(id); +ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_deviceProduction_FK FOREIGN KEY IF NOT EXISTS (deviceProductionFk) REFERENCES vn.deviceProduction(id); -ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique UNIQUE KEY (deviceProductionFk); +ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique UNIQUE KEY IF NOT EXISTS (deviceProductionFk); -ALTER TABLE vn.deviceProduction ADD simSerialNumber TEXT NULL; +ALTER TABLE vn.deviceProductionUser ADD IF NOT EXISTS simSerialNumber TEXT NULL; -ALTER TABLE vn.deviceProductionConfig ADD maxDevicesPerUser INT UNSIGNED NULL; +ALTER TABLE vn.deviceProductionConfig ADD IF NOT EXISTS maxDevicesPerUser INT UNSIGNED NULL; UPDATE vn.deviceProductionConfig SET maxDevicesPerUser=1 WHERE id=1; -- 2.40.1 From 699684bd656342b816d63f7410c02c98f41fb997 Mon Sep 17 00:00:00 2001 From: pablone Date: Fri, 3 May 2024 14:22:48 +0200 Subject: [PATCH 10/16] feat: refs #7187 add sim column to the model and id --- modules/worker/back/models/device-production-user.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/worker/back/models/device-production-user.json b/modules/worker/back/models/device-production-user.json index 35a90fb50d..f11fd240cb 100644 --- a/modules/worker/back/models/device-production-user.json +++ b/modules/worker/back/models/device-production-user.json @@ -14,6 +14,10 @@ } }, "properties": { + "id": { + "type": "number", + "id": true + }, "deviceProductionFk": { "type": "number", "id": true @@ -21,6 +25,9 @@ "userFk": { "type": "number" }, + "simSerialNumber": { + "type": "string" + }, "created": { "type": "date" } -- 2.40.1 From a797fca2ddfb42f31ad0265de0ac43e55ce49187 Mon Sep 17 00:00:00 2001 From: pablone Date: Mon, 13 May 2024 08:30:20 +0200 Subject: [PATCH 11/16] feat: refs #7187 merge dev --- modules/worker/back/models/device-production-user.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/worker/back/models/device-production-user.json b/modules/worker/back/models/device-production-user.json index f11fd240cb..d63fe01483 100644 --- a/modules/worker/back/models/device-production-user.json +++ b/modules/worker/back/models/device-production-user.json @@ -43,5 +43,10 @@ "model": "User", "foreignKey": "userFk" } + }, + "scope": { + "include":{ + "relation": "deviceProduction" + } } } -- 2.40.1 From bcb3ea48372aea93a01e50de2bfbabfa5f7500d7 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 16 May 2024 10:23:33 +0200 Subject: [PATCH 12/16] feat: refs #7187 new method available pda --- .../00-firstScript.sql | 4 +++ loopback/locale/en.json | 9 ++++--- loopback/locale/es.json | 7 +++--- .../back/methods/worker/getAvailablePda.js | 25 +++++++++++++++++++ .../worker/specs/getAvailablePda.spec.js | 13 ++++++++++ .../back/models/device-production-user.js | 8 ++++++ .../back/models/device-production-user.json | 4 +-- .../worker/back/models/device-production.json | 5 ++++ modules/worker/back/models/worker.js | 1 + 9 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 modules/worker/back/methods/worker/getAvailablePda.js create mode 100644 modules/worker/back/methods/worker/specs/getAvailablePda.spec.js create mode 100644 modules/worker/back/models/device-production-user.js diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql index a0d10891c6..c8dce54b29 100644 --- a/db/versions/11010-blackChrysanthemum/00-firstScript.sql +++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql @@ -15,3 +15,7 @@ ALTER TABLE vn.deviceProductionUser ADD IF NOT EXISTS simSerialNumber TEXT NULL; ALTER TABLE vn.deviceProductionConfig ADD IF NOT EXISTS maxDevicesPerUser INT UNSIGNED NULL; UPDATE vn.deviceProductionConfig SET maxDevicesPerUser=1 WHERE id=1; + +INSERT IGNORE INTO salix.ACL (model,property,accessType,permission,principalType,principalId) + VALUES ('Worker','getAvailablePda','READ','ALLOW','ROLE','hr'); + diff --git a/loopback/locale/en.json b/loopback/locale/en.json index ca76eae428..601a26f5b8 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -223,7 +223,8 @@ "printerNotExists": "The printer does not exist", "There are not picking tickets": "There are not picking tickets", "ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)", - "This password can only be changed by the user themselves": "This password can only be changed by the user themselves", - "They're not your subordinate": "They're not your subordinate", - "InvoiceIn is already booked": "InvoiceIn is already booked" -} + "This password can only be changed by the user themselves": "This password can only be changed by the user themselves", + "They're not your subordinate": "They're not your subordinate", + "InvoiceIn is already booked": "InvoiceIn is already booked", + "This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency" +} \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index f1c57455eb..c67f7ecd6c 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -355,6 +355,7 @@ "No results found": "No se han encontrado resultados", "InvoiceIn is already booked": "La factura recibida está contabilizada", "This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia", - "Select ticket or client": "Elija un ticket o un client", - "It was not able to create the invoice": "No se pudo crear la factura" -} + "Select ticket or client": "Elija un ticket o un client", + "It was not able to create the invoice": "No se pudo crear la factura", + "This PDA is already assigned to another user": "This PDA is already assigned to another user" +} \ No newline at end of file diff --git a/modules/worker/back/methods/worker/getAvailablePda.js b/modules/worker/back/methods/worker/getAvailablePda.js new file mode 100644 index 0000000000..5c97e15e12 --- /dev/null +++ b/modules/worker/back/methods/worker/getAvailablePda.js @@ -0,0 +1,25 @@ +module.exports = Self => { + Self.remoteMethod('getAvailablePda', { + description: 'returns devices without user', + accessType: 'READ', + accepts: [], + returns: { + type: 'array', + root: true + }, + http: { + path: `/getAvailablePda`, + verb: 'GET' + } + }); + Self.getAvailablePda = async() => { + const models = Self.app.models; + + return models.DeviceProduction.rawSql( + `SELECT d.* + FROM deviceProduction d + LEFT JOIN deviceProductionUser du ON du.deviceProductionFk = d.id + WHERE du.deviceProductionFk IS NULL` + ); + }; +}; diff --git a/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js b/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js new file mode 100644 index 0000000000..7649225f1e --- /dev/null +++ b/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js @@ -0,0 +1,13 @@ +const models = require('vn-loopback/server/server').models; + +describe('worker getAvailablePda()', () => { + fit('should return a Pda that has no user assigned', async() => { + const [{id}] = await models.Worker.getAvailablePda(); + + const deviceProductionUser = await models.DeviceProductionUser.findOne({ + where: {deviceProductionFk: id} + }); + + expect(!deviceProductionUser).toBeTruthy(); + }); +}); diff --git a/modules/worker/back/models/device-production-user.js b/modules/worker/back/models/device-production-user.js new file mode 100644 index 0000000000..81af484d30 --- /dev/null +++ b/modules/worker/back/models/device-production-user.js @@ -0,0 +1,8 @@ +const UserError = require('vn-loopback/util/user-error'); +module.exports = Self => { + Self.rewriteDbError(function(err) { + if (err.code === 'ER_DUP_ENTRY') + return new UserError(`This PDA is already assigned to another user`); + return err; + }); +}; diff --git a/modules/worker/back/models/device-production-user.json b/modules/worker/back/models/device-production-user.json index d63fe01483..37955ab767 100644 --- a/modules/worker/back/models/device-production-user.json +++ b/modules/worker/back/models/device-production-user.json @@ -34,9 +34,9 @@ }, "relations": { "deviceProduction": { - "type": "belongsTo", + "type": "hasOne", "model": "DeviceProduction", - "foreignKey": "deviceProductionFk" + "foreignKey": "id" }, "user": { "type": "belongsTo", diff --git a/modules/worker/back/models/device-production.json b/modules/worker/back/models/device-production.json index f6e5105adc..91b05eb855 100644 --- a/modules/worker/back/models/device-production.json +++ b/modules/worker/back/models/device-production.json @@ -55,6 +55,11 @@ "type": "belongsTo", "model": "DeviceProductionState", "foreignKey": "stateFk" + }, + "deviceProductionUser": { + "type": "hasMany", + "model": "DeviceProductionUser", + "foreignKey": "deviceProductionFk" } } } diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index b475bf26e2..7128f973cb 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -20,6 +20,7 @@ module.exports = Self => { require('../methods/worker/search')(Self); require('../methods/worker/isAuthorized')(Self); require('../methods/worker/setPassword')(Self); + require('../methods/worker/getAvailablePda')(Self); Self.validatesUniquenessOf('locker', { message: 'This locker has already been assigned' -- 2.40.1 From 1abacdc42b76a65a7096bea23d36838c87697da6 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 16 May 2024 14:00:42 +0200 Subject: [PATCH 13/16] fix: refs #7187 method --- modules/worker/back/methods/worker/getAvailablePda.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/worker/back/methods/worker/getAvailablePda.js b/modules/worker/back/methods/worker/getAvailablePda.js index 5c97e15e12..65641a9e61 100644 --- a/modules/worker/back/methods/worker/getAvailablePda.js +++ b/modules/worker/back/methods/worker/getAvailablePda.js @@ -13,9 +13,7 @@ module.exports = Self => { } }); Self.getAvailablePda = async() => { - const models = Self.app.models; - - return models.DeviceProduction.rawSql( + return Self.app.models.DeviceProduction.rawSql( `SELECT d.* FROM deviceProduction d LEFT JOIN deviceProductionUser du ON du.deviceProductionFk = d.id -- 2.40.1 From 4cf5457690309837dbb5cb69d2a96260472dd238 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 16 May 2024 14:01:41 +0200 Subject: [PATCH 14/16] fix: refs #7187 remove focus on spec --- .../worker/back/methods/worker/specs/getAvailablePda.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js b/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js index 7649225f1e..c7051f0b4b 100644 --- a/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js +++ b/modules/worker/back/methods/worker/specs/getAvailablePda.spec.js @@ -1,7 +1,7 @@ const models = require('vn-loopback/server/server').models; describe('worker getAvailablePda()', () => { - fit('should return a Pda that has no user assigned', async() => { + it('should return a Pda that has no user assigned', async() => { const [{id}] = await models.Worker.getAvailablePda(); const deviceProductionUser = await models.DeviceProductionUser.findOne({ -- 2.40.1 From b299e842b944e43ab13d3ba04c427de9e6a8c106 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 16 May 2024 14:04:21 +0200 Subject: [PATCH 15/16] fix: refs #7187 model foreignKey --- modules/worker/back/models/device-production-user.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/worker/back/models/device-production-user.json b/modules/worker/back/models/device-production-user.json index 37955ab767..a024cc94c8 100644 --- a/modules/worker/back/models/device-production-user.json +++ b/modules/worker/back/models/device-production-user.json @@ -34,9 +34,9 @@ }, "relations": { "deviceProduction": { - "type": "hasOne", - "model": "DeviceProduction", - "foreignKey": "id" + "type": "belongsTo", + "model": "DeviceProduction", + "foreignKey": "deviceProductionFk" }, "user": { "type": "belongsTo", -- 2.40.1 From 1372f817bdb852bb83741fe6c96a4e71ba561aab Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 16 May 2024 14:05:22 +0200 Subject: [PATCH 16/16] fix: refs #7187 model --- modules/worker/back/models/device-production.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/worker/back/models/device-production.json b/modules/worker/back/models/device-production.json index 91b05eb855..f6e5105adc 100644 --- a/modules/worker/back/models/device-production.json +++ b/modules/worker/back/models/device-production.json @@ -55,11 +55,6 @@ "type": "belongsTo", "model": "DeviceProductionState", "foreignKey": "stateFk" - }, - "deviceProductionUser": { - "type": "hasMany", - "model": "DeviceProductionUser", - "foreignKey": "deviceProductionFk" } } } -- 2.40.1