From 477646ba311893f8a22e47785fdd5dbd7fff597e Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 20 Jan 2025 14:43:14 +0100 Subject: [PATCH 01/17] feat: refs #8227 Roadmap changes --- .../procedures/vehicle_checkNumberPlate.sql | 27 ++++++++++++++----- .../vn/triggers/roadmap_beforeInsert.sql | 2 ++ .../vn/triggers/roadmap_beforeUpdate.sql | 2 ++ .../11416-goldenTulip/00-firstScript.sql | 5 ++++ 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 db/versions/11416-goldenTulip/00-firstScript.sql diff --git a/db/routines/vn/procedures/vehicle_checkNumberPlate.sql b/db/routines/vn/procedures/vehicle_checkNumberPlate.sql index cbbcbec63..613dda368 100644 --- a/db/routines/vn/procedures/vehicle_checkNumberPlate.sql +++ b/db/routines/vn/procedures/vehicle_checkNumberPlate.sql @@ -1,17 +1,30 @@ DELIMITER $$ -CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`vehicle_checkNumberPlate`(vNumberPlate VARCHAR(10), vCountryCodeFk VARCHAR(2)) +CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`vehicle_checkNumberPlate`( + vNumberPlate VARCHAR(10), + vCountryCodeFk VARCHAR(2) +) BEGIN /** - * Comprueba si la matricula pasada tiene el formato correcto dependiendo del pais del vehiculo + * Comprueba si la matricula pasada tiene el formato + * correcto dependiendo del pais del vehiculo. + * + * @param vNumberPlate Número de matricula + * @param vCountryCodeFk Código de pais */ DECLARE vRegex VARCHAR(45); - SELECT vp.regex INTO vRegex - FROM vehiclePlateRegex vp - WHERE vp.countryCodeFk = vCountryCodeFk; - + IF vCountryCodeFk IS NULL THEN + SET vRegex = '^[A-Z0-9 -]{6,12}$'; + ELSE + SELECT regex INTO vRegex + FROM vehiclePlateRegex + WHERE countryCodeFk = vCountryCodeFk; + END IF; + IF NOT vNumberPlate REGEXP BINARY (vRegex)THEN - CALL util.throw(CONCAT('Error: la matricula ', vNumberPlate, ' no es valida para ',vCountryCodeFk)); + CALL util.throw(CONCAT('La matricula ', vNumberPlate, + ' no es valida', IF(vCountryCodeFk IS NOT NULL, + CONCAT(' para ', vCountryCodeFk), ''))); END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 2f9481140..0a4386e63 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert` BEFORE INSERT ON `roadmap` FOR EACH ROW BEGIN + CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); + CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); IF NEW.driver1Fk IS NOT NULL THEN SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk); ELSE diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index a2a02e96a..b381854ed 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate` BEFORE UPDATE ON `roadmap` FOR EACH ROW BEGIN + CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); + CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); IF NEW.driver1Fk IS NOT NULL THEN SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk); ELSE diff --git a/db/versions/11416-goldenTulip/00-firstScript.sql b/db/versions/11416-goldenTulip/00-firstScript.sql new file mode 100644 index 000000000..9b89fcfa6 --- /dev/null +++ b/db/versions/11416-goldenTulip/00-firstScript.sql @@ -0,0 +1,5 @@ +ALTER TABLE vn.roadmap + MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque'; +ALTER TABLE vn.route + ADD roadmapStopFk int(11) NULL, + ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE; From 482fe77159f72144b3f733f7b86df44509586987 Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 21 Jan 2025 14:03:50 +0100 Subject: [PATCH 02/17] feat: refs #8227 Roadmap changes --- db/dump/fixtures.before.sql | 4 ++-- db/routines/vn/triggers/roadmapStop_beforeInsert.sql | 3 +-- db/routines/vn/triggers/roadmapStop_beforeUpdate.sql | 3 +-- db/routines/vn/triggers/roadmap_beforeInsert.sql | 12 ++++++------ db/routines/vn/triggers/roadmap_beforeUpdate.sql | 12 ++++++------ db/versions/11416-goldenTulip/00-firstScript.sql | 8 ++++---- db/versions/11416-goldenTulip/01-firstScript.sql | 1 + db/versions/11416-goldenTulip/02-firstScript.sql | 4 ++++ 8 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 db/versions/11416-goldenTulip/01-firstScript.sql create mode 100644 db/versions/11416-goldenTulip/02-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 590fe34b6..cc1a9fc6f 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -2749,13 +2749,13 @@ INSERT INTO `vn`.`roadmapAddress` (`addressFk`) (3), (4); -INSERT INTO `vn`.`roadmap` (`id`, `name`, `tractorPlate`, `trailerPlate`, `phone`, `supplierFk`, `etd`, `observations`, `userFk`, `price`, `driverName`) +INSERT INTO `vn`.`roadmap` (`id`, `name`, `tractorPlate`, `trailerPlate`, `phone`, `supplierFk`, `etd`, `observations`, `editorFk`, `price`, `driverName`) VALUES (1, 'val-algemesi', '1234-BCD', '9876-BCD', '111111111', 1, util.VN_NOW(), 'this is test observation', 1, 15, 'Batman'), (2, 'alg-valencia', '2345-CDF', '8765-BCD', '111111111', 1, util.VN_NOW(), 'test observation', 1, 20, 'Robin'), (3, 'alz-algemesi', '3456-DFG', '7654-BCD', '222222222', 2, DATE_ADD(util.VN_NOW(), INTERVAL 2 DAY), 'observations...', 2, 25, 'Driverman'); -INSERT INTO `vn`.`roadmapStop` (`id`, `roadmapFk`, `addressFk`, `eta`, `description`, `userFk`) +INSERT INTO `vn`.`roadmapStop` (`id`, `roadmapFk`, `addressFk`, `eta`, `description`, `editorFk`) VALUES (1, 1, 1, DATE_ADD(util.VN_NOW(), INTERVAL 1 DAY), 'Best truck in fleet', 1), (2, 1, 2, DATE_ADD(util.VN_NOW(), INTERVAL '1 2' DAY_HOUR), 'Second truck in fleet', 1), diff --git a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql index d71942fea..b87a52bdc 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -3,8 +3,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeInser BEFORE INSERT ON `roadmapStop` FOR EACH ROW BEGIN - + SET NEW.editorFk = account.myUser_getId(); SET NEW.description = UCASE(NEW.description); - END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index c3cbf2597..ec4dbe5ba 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -3,8 +3,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeUpdat BEFORE UPDATE ON `roadmapStop` FOR EACH ROW BEGIN - + SET NEW.editorFk = account.myUser_getId(); SET NEW.description = UCASE(NEW.description); - END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 0a4386e63..118653d44 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -3,12 +3,12 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert` BEFORE INSERT ON `roadmap` FOR EACH ROW BEGIN - CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); - CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); - IF NEW.driver1Fk IS NOT NULL THEN - SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk); - ELSE - SET NEW.driverName = NULL; + SET NEW.editorFk = account.myUser_getId(); + IF NEW.tractorPlate IS NOT NULL THEN + CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); + END IF; + IF NEW.trailerPlate IS NOT NULL THEN + CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index b381854ed..a60b1e892 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -3,12 +3,12 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate` BEFORE UPDATE ON `roadmap` FOR EACH ROW BEGIN - CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); - CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); - IF NEW.driver1Fk IS NOT NULL THEN - SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk); - ELSE - SET NEW.driverName = NULL; + SET NEW.editorFk = account.myUser_getId(); + IF NEW.tractorPlate IS NOT NULL THEN + CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); + END IF; + IF NEW.trailerPlate IS NOT NULL THEN + CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/00-firstScript.sql b/db/versions/11416-goldenTulip/00-firstScript.sql index 9b89fcfa6..d06f25493 100644 --- a/db/versions/11416-goldenTulip/00-firstScript.sql +++ b/db/versions/11416-goldenTulip/00-firstScript.sql @@ -1,5 +1,5 @@ ALTER TABLE vn.roadmap - MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque'; -ALTER TABLE vn.route - ADD roadmapStopFk int(11) NULL, - ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE; + MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque', + CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, + CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql new file mode 100644 index 000000000..76b69387c --- /dev/null +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.roadmapStop CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/02-firstScript.sql b/db/versions/11416-goldenTulip/02-firstScript.sql new file mode 100644 index 000000000..89833fe8b --- /dev/null +++ b/db/versions/11416-goldenTulip/02-firstScript.sql @@ -0,0 +1,4 @@ +ALTER TABLE vn.route + ADD roadmapStopFk int(11) NULL, + ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE, + CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER roadmapStopFk; From 052630d268139c62573f0e5430fcc0c54277fade Mon Sep 17 00:00:00 2001 From: guillermo Date: Wed, 22 Jan 2025 12:40:58 +0100 Subject: [PATCH 03/17] feat: refs #8227 Roadmap changes --- db/routines/vn/triggers/roadmapStop_beforeInsert.sql | 5 +++++ db/routines/vn/triggers/roadmapStop_beforeUpdate.sql | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql index b87a52bdc..9ec8b72cf 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -5,5 +5,10 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeInser BEGIN SET NEW.editorFk = account.myUser_getId(); SET NEW.description = UCASE(NEW.description); + IF NEW.roadmapFk IS NOT NULL THEN + IF NEW.eta < (SELECT etd FROM roadmap WHERE id = NEW.roadmapFk) THEN + CALL util.throw('Departure time can not be after arrival time'); + END IF; + END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index ec4dbe5ba..cff48846a 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -5,5 +5,12 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeUpdat BEGIN SET NEW.editorFk = account.myUser_getId(); SET NEW.description = UCASE(NEW.description); + IF (NOT (NEW.roadmapFk <=> OLD.roadmapFk) AND NEW.roadmapFk IS NOT NULL) + OR (NOT (NEW.eta <=> OLD.eta) AND NEW.eta IS NOT NULL) THEN + + IF NEW.eta < (SELECT etd FROM roadmap WHERE id = NEW.roadmapFk) THEN + CALL util.throw('Departure time can not be after arrival time'); + END IF; + END IF; END$$ DELIMITER ; From 162cd4d69ebe1dc4c803a636375e4e31de151fd2 Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 23 Jan 2025 14:54:59 +0100 Subject: [PATCH 04/17] feat: refs #8227 Roadmap major changes --- .../getTimeBetweenRoadmapAddresses.sql | 35 +++++++++++++++++++ .../vn/triggers/roadmap_beforeInsert.sql | 4 +++ .../vn/triggers/roadmap_beforeUpdate.sql | 4 +++ .../11416-goldenTulip/00-firstScript.sql | 7 +++- .../11416-goldenTulip/01-firstScript.sql | 8 ++++- .../11416-goldenTulip/02-firstScript.sql | 7 ++-- .../11416-goldenTulip/03-firstScript.sql | 4 +++ .../11416-goldenTulip/04-firstScript.sql | 2 ++ 8 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql create mode 100644 db/versions/11416-goldenTulip/03-firstScript.sql create mode 100644 db/versions/11416-goldenTulip/04-firstScript.sql diff --git a/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql b/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql new file mode 100644 index 000000000..5a647d51b --- /dev/null +++ b/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql @@ -0,0 +1,35 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`getTimeBetweenRoadmapAddresses`( + vRoadmapAddressFrom INT, + vRoadmapAddressTo INT +) + RETURNS int(11) + DETERMINISTIC +BEGIN +/** + * Retorna el tiempo en segundos que se suele tardar en ir + * de un punto de distribución a otro en una ruta troncal. + * + * @param vRoadmapAddressFrom Punto de distribución de origen + * @param vRoadmapAddressTo Punto de distribución de destino + * @return Tiempo en segundos + */ + DECLARE vSeconds INT; + + WITH wRoadmap AS ( + SELECT ROW_NUMBER() OVER(PARTITION BY roadmapFk ORDER BY eta) `sequence`, + roadmapFk, + roadmapAddressFk, + eta + FROM vn.roadmapStop + ) + SELECT AVG(TIME_TO_SEC(TIMEDIFF(rTo.eta, rFrom.eta))) INTO vSeconds + FROM wRoadmap rFrom + JOIN wRoadmap rTo ON rTo.roadmapFk = rFrom.roadmapFk + WHERE rFrom.roadmapAddressFk = vRoadmapAddressFrom + AND rTo.roadmapAddressFk = vRoadmapAddressTo + AND rFrom.`sequence` + 1 = rTo.`sequence`; + + RETURN vSeconds; +END$$ +DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 118653d44..884fe0bbc 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -4,6 +4,10 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert` FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); + IF NEW.etd > NEW.eta THEN + CALL util.throw('Departure time can not be after arrival time'); + END IF; + IF NEW.tractorPlate IS NOT NULL THEN CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); END IF; diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index a60b1e892..96eec2aaf 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -4,6 +4,10 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate` FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); + IF NEW.etd > NEW.eta THEN + CALL util.throw('Departure time can not be after arrival time'); + END IF; + IF NEW.tractorPlate IS NOT NULL THEN CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); END IF; diff --git a/db/versions/11416-goldenTulip/00-firstScript.sql b/db/versions/11416-goldenTulip/00-firstScript.sql index d06f25493..e2962592c 100644 --- a/db/versions/11416-goldenTulip/00-firstScript.sql +++ b/db/versions/11416-goldenTulip/00-firstScript.sql @@ -1,5 +1,10 @@ ALTER TABLE vn.roadmap + COMMENT='Rutas troncales (trailers)', MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque', + MODIFY COLUMN trailerPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL, + MODIFY COLUMN etd datetime NOT NULL COMMENT 'Tiempo estimado de salida', CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, - CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; \ No newline at end of file + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3, + ADD eta datetime NOT NULL AFTER etd COMMENT 'Tiempo estimado de llegada', + ADD roadmapAddressFk int(11) NOT NULL AFTER `name`; diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql index 76b69387c..58cd44f0d 100644 --- a/db/versions/11416-goldenTulip/01-firstScript.sql +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -1 +1,7 @@ -ALTER TABLE vn.roadmapStop CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL; \ No newline at end of file +UPDATE vn.roadmap + SET roadmapAddressFk = (SELECT MIN(addressFk) FROM vn.roadmapAddress), + eta = etd + INTERVAL 1 DAY; + +ALTER TABLE vn.roadmap + ADD CONSTRAINT roadmap_roadmapAddress_FK FOREIGN KEY (roadmapAddressFk) + REFERENCES vn.roadmapAddress(addressFk) ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/db/versions/11416-goldenTulip/02-firstScript.sql b/db/versions/11416-goldenTulip/02-firstScript.sql index 89833fe8b..8713c5090 100644 --- a/db/versions/11416-goldenTulip/02-firstScript.sql +++ b/db/versions/11416-goldenTulip/02-firstScript.sql @@ -1,4 +1,3 @@ -ALTER TABLE vn.route - ADD roadmapStopFk int(11) NULL, - ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE, - CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER roadmapStopFk; +ALTER TABLE vn.roadmapStop + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL, + CHANGE addressFk roadmapAddressFk int(11) DEFAULT NULL NULL; diff --git a/db/versions/11416-goldenTulip/03-firstScript.sql b/db/versions/11416-goldenTulip/03-firstScript.sql new file mode 100644 index 000000000..89833fe8b --- /dev/null +++ b/db/versions/11416-goldenTulip/03-firstScript.sql @@ -0,0 +1,4 @@ +ALTER TABLE vn.route + ADD roadmapStopFk int(11) NULL, + ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE, + CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER roadmapStopFk; diff --git a/db/versions/11416-goldenTulip/04-firstScript.sql b/db/versions/11416-goldenTulip/04-firstScript.sql new file mode 100644 index 000000000..588810ded --- /dev/null +++ b/db/versions/11416-goldenTulip/04-firstScript.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.roadmapAddress + COMMENT='Direcciones de los troncales o también llamados puntos de distribución'; From 306eb6a0599490a82672be7ae8ab18aa377efab3 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 24 Jan 2025 07:26:25 +0100 Subject: [PATCH 05/17] feat: refs #8227 Roadmap fix version --- db/dump/fixtures.before.sql | 10 +++++----- .../11416-goldenTulip/00-firstScript.sql | 12 +++--------- .../11416-goldenTulip/01-firstScript.sql | 18 ++++++++++++------ .../11416-goldenTulip/02-firstScript.sql | 16 +++++++++++++--- .../11416-goldenTulip/03-firstScript.sql | 7 +++---- .../11416-goldenTulip/04-firstScript.sql | 6 ++++-- .../11416-goldenTulip/05-firstScript.sql | 2 ++ 7 files changed, 42 insertions(+), 29 deletions(-) create mode 100644 db/versions/11416-goldenTulip/05-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index cc1a9fc6f..eb11264e7 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -2749,13 +2749,13 @@ INSERT INTO `vn`.`roadmapAddress` (`addressFk`) (3), (4); -INSERT INTO `vn`.`roadmap` (`id`, `name`, `tractorPlate`, `trailerPlate`, `phone`, `supplierFk`, `etd`, `observations`, `editorFk`, `price`, `driverName`) +INSERT INTO `vn`.`roadmap` (`id`, `name`, `tractorPlate`, `trailerPlate`, `phone`, `supplierFk`, `etd`, `eta`, `observations`, `editorFk`, `price`, `driverName`) VALUES - (1, 'val-algemesi', '1234-BCD', '9876-BCD', '111111111', 1, util.VN_NOW(), 'this is test observation', 1, 15, 'Batman'), - (2, 'alg-valencia', '2345-CDF', '8765-BCD', '111111111', 1, util.VN_NOW(), 'test observation', 1, 20, 'Robin'), - (3, 'alz-algemesi', '3456-DFG', '7654-BCD', '222222222', 2, DATE_ADD(util.VN_NOW(), INTERVAL 2 DAY), 'observations...', 2, 25, 'Driverman'); + (1, 'val-algemesi', '1234-BCD', '9876-BCD', '111111111', 1, util.VN_NOW(), DATE_ADD(util.VN_NOW(), INTERVAL 2 DAY), 'this is test observation', 1, 15, 'Batman'), + (2, 'alg-valencia', '2345-CDF', '8765-BCD', '111111111', 1, util.VN_NOW(), DATE_ADD(util.VN_NOW(), INTERVAL 5 DAY), 'test observation', 1, 20, 'Robin'), + (3, 'alz-algemesi', '3456-DFG', '7654-BCD', '222222222', 2, DATE_ADD(util.VN_NOW(), INTERVAL 3 DAY), DATE_ADD(util.VN_NOW(), INTERVAL 6 DAY), 'observations...', 2, 25, 'Driverman'); -INSERT INTO `vn`.`roadmapStop` (`id`, `roadmapFk`, `addressFk`, `eta`, `description`, `editorFk`) +INSERT INTO `vn`.`roadmapStop` (`id`, `roadmapFk`, `roadmapAddressFk`, `eta`, `description`, `editorFk`) VALUES (1, 1, 1, DATE_ADD(util.VN_NOW(), INTERVAL 1 DAY), 'Best truck in fleet', 1), (2, 1, 2, DATE_ADD(util.VN_NOW(), INTERVAL '1 2' DAY_HOUR), 'Second truck in fleet', 1), diff --git a/db/versions/11416-goldenTulip/00-firstScript.sql b/db/versions/11416-goldenTulip/00-firstScript.sql index e2962592c..aa410c52f 100644 --- a/db/versions/11416-goldenTulip/00-firstScript.sql +++ b/db/versions/11416-goldenTulip/00-firstScript.sql @@ -1,10 +1,4 @@ ALTER TABLE vn.roadmap - COMMENT='Rutas troncales (trailers)', - MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque', - MODIFY COLUMN trailerPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL, - MODIFY COLUMN etd datetime NOT NULL COMMENT 'Tiempo estimado de salida', - CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, - CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, - CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3, - ADD eta datetime NOT NULL AFTER etd COMMENT 'Tiempo estimado de llegada', - ADD roadmapAddressFk int(11) NOT NULL AFTER `name`; + DROP FOREIGN KEY roadmap_worker_FK_2, + DROP FOREIGN KEY roadmap_worker_FK, + DROP FOREIGN KEY roadmap_ibfk_2; diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql index 58cd44f0d..68c369800 100644 --- a/db/versions/11416-goldenTulip/01-firstScript.sql +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -1,7 +1,13 @@ -UPDATE vn.roadmap - SET roadmapAddressFk = (SELECT MIN(addressFk) FROM vn.roadmapAddress), - eta = etd + INTERVAL 1 DAY; - ALTER TABLE vn.roadmap - ADD CONSTRAINT roadmap_roadmapAddress_FK FOREIGN KEY (roadmapAddressFk) - REFERENCES vn.roadmapAddress(addressFk) ON DELETE RESTRICT ON UPDATE CASCADE; + COMMENT='Rutas troncales (trailers)', + MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque', + MODIFY COLUMN trailerPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL, + MODIFY COLUMN etd datetime NOT NULL COMMENT 'Tiempo estimado de salida', + ADD eta datetime NOT NULL COMMENT 'Tiempo estimado de llegada' AFTER etd, + ADD roadmapAddressFk int(11) NOT NULL AFTER `name`; + +-- Separamos los CHANGE por que si no arriba no se aplican +ALTER TABLE vn.roadmap + CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, + CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/02-firstScript.sql b/db/versions/11416-goldenTulip/02-firstScript.sql index 8713c5090..f99334e9b 100644 --- a/db/versions/11416-goldenTulip/02-firstScript.sql +++ b/db/versions/11416-goldenTulip/02-firstScript.sql @@ -1,3 +1,13 @@ -ALTER TABLE vn.roadmapStop - CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL, - CHANGE addressFk roadmapAddressFk int(11) DEFAULT NULL NULL; +UPDATE vn.roadmap + SET roadmapAddressFk = (SELECT MIN(addressFk) FROM vn.roadmapAddress), + eta = etd + INTERVAL 1 DAY; + +ALTER TABLE vn.roadmap + ADD CONSTRAINT roadmap_roadmapAddress_FK FOREIGN KEY (roadmapAddressFk) + REFERENCES vn.roadmapAddress(addressFk) ON DELETE RESTRICT ON UPDATE CASCADE, + ADD CONSTRAINT roadmap_driver_FK FOREIGN KEY (driverFk) + REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE, + ADD CONSTRAINT roadmap_driver_FK2 FOREIGN KEY (codriverFk) + REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE, + ADD CONSTRAINT roadmap_user_Fk FOREIGN KEY (editorFk) + REFERENCES account.user(id) ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/db/versions/11416-goldenTulip/03-firstScript.sql b/db/versions/11416-goldenTulip/03-firstScript.sql index 89833fe8b..8713c5090 100644 --- a/db/versions/11416-goldenTulip/03-firstScript.sql +++ b/db/versions/11416-goldenTulip/03-firstScript.sql @@ -1,4 +1,3 @@ -ALTER TABLE vn.route - ADD roadmapStopFk int(11) NULL, - ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE, - CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER roadmapStopFk; +ALTER TABLE vn.roadmapStop + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL, + CHANGE addressFk roadmapAddressFk int(11) DEFAULT NULL NULL; diff --git a/db/versions/11416-goldenTulip/04-firstScript.sql b/db/versions/11416-goldenTulip/04-firstScript.sql index 588810ded..89833fe8b 100644 --- a/db/versions/11416-goldenTulip/04-firstScript.sql +++ b/db/versions/11416-goldenTulip/04-firstScript.sql @@ -1,2 +1,4 @@ -ALTER TABLE vn.roadmapAddress - COMMENT='Direcciones de los troncales o también llamados puntos de distribución'; +ALTER TABLE vn.route + ADD roadmapStopFk int(11) NULL, + ADD CONSTRAINT route_roadmapStop_FK FOREIGN KEY (roadmapStopFk) REFERENCES vn.roadmapStop(id) ON DELETE RESTRICT ON UPDATE CASCADE, + CHANGE editorFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER roadmapStopFk; diff --git a/db/versions/11416-goldenTulip/05-firstScript.sql b/db/versions/11416-goldenTulip/05-firstScript.sql new file mode 100644 index 000000000..588810ded --- /dev/null +++ b/db/versions/11416-goldenTulip/05-firstScript.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.roadmapAddress + COMMENT='Direcciones de los troncales o también llamados puntos de distribución'; From e9f1e28ac0dcadf5b93848e1623a04d5ed474147 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 24 Jan 2025 11:20:16 +0100 Subject: [PATCH 06/17] feat: refs #8227 Added roadmap_cloneDay --- .../vn/procedures/roadmap_cloneDay.sql | 71 +++++++++++++++++++ .../vn/triggers/roadmap_beforeInsert.sql | 1 + .../vn/triggers/roadmap_beforeUpdate.sql | 1 + .../11416-goldenTulip/01-firstScript.sql | 1 + .../11416-goldenTulip/03-firstScript.sql | 6 +- 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 db/routines/vn/procedures/roadmap_cloneDay.sql diff --git a/db/routines/vn/procedures/roadmap_cloneDay.sql b/db/routines/vn/procedures/roadmap_cloneDay.sql new file mode 100644 index 000000000..51d6ba1ab --- /dev/null +++ b/db/routines/vn/procedures/roadmap_cloneDay.sql @@ -0,0 +1,71 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`roadmap_cloneDay`( + vDateToCopy DATE, + vDateToPaste DATE +) +BEGIN +/** + * Clona roadmaps de un día a otro, incluyendo las paradas y sin algunos + * campos de la tabla principal, como matrículas, conductores... + * + * @param vDateToCopy Fecha para copiar + * @param vDateToPaste Fecha para pegar + */ + DECLARE vDaysDiff INT; + DECLARE vNextRoadmapId INT; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + ROLLBACK; + RESIGNAL; + END; + + SET vDaysDiff = DATEDIFF(vDateToPaste, vDateToCopy); + + IF vDaysDiff IS NULL OR NOT vDaysDiff THEN + CALL util.throw("No valid dates"); + END IF; + + START TRANSACTION; + + SELECT AUTO_INCREMENT INTO vNextRoadmapId + FROM information_schema.tables + WHERE table_name = 'roadmap' + AND table_schema = 'vn'; + + CREATE OR REPLACE TEMPORARY TABLE tmp.roadmapsToCopy + ENGINE = MEMORY + SELECT ROW_NUMBER() OVER(ORDER BY id) rowOrder, + id, + `name`, + roadmapAddressFk, + etd, + eta, + observations, + price + FROM roadmap + WHERE etd BETWEEN vDateToCopy AND util.dayEnd(vDateToCopy); + + INSERT INTO roadmap (`name`, roadmapAddressFk, etd, eta, observations, price) + SELECT `name`, + roadmapAddressFk, + etd + INTERVAL vDaysDiff DAY, + eta + INTERVAL vDaysDiff DAY, + observations, + price + FROM tmp.roadmapsToCopy; + + INSERT INTO roadmapStop (roadmapFk, roadmapAddressFk, eta, `description`, bufferFk) + SELECT (rtc.rowOrder - 1) + vNextRoadmapId, + rs.roadmapAddressFk, + rs.eta + INTERVAL vDaysDiff DAY, + rs.description, + rs.bufferFk + FROM tmp.roadmapsToCopy rtc + JOIN roadmapStop rs ON rs.roadmapFk = rtc.id; + + COMMIT; + + DROP TEMPORARY TABLE tmp.roadmapsToCopy; +END$$ +DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 884fe0bbc..4b0a1c847 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -14,5 +14,6 @@ BEGIN IF NEW.trailerPlate IS NOT NULL THEN CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); END IF; + SET NEW.name = UCASE(NEW.name); END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 96eec2aaf..1ad547f55 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -14,5 +14,6 @@ BEGIN IF NEW.trailerPlate IS NOT NULL THEN CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); END IF; + SET NEW.name = UCASE(NEW.name); END$$ DELIMITER ; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql index 68c369800..0cd794229 100644 --- a/db/versions/11416-goldenTulip/01-firstScript.sql +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -3,6 +3,7 @@ ALTER TABLE vn.roadmap MODIFY COLUMN m3 int(10) unsigned DEFAULT NULL NULL COMMENT 'Capacidad máxima del remolque', MODIFY COLUMN trailerPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL, MODIFY COLUMN etd datetime NOT NULL COMMENT 'Tiempo estimado de salida', + MODIFY COLUMN `name` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL, ADD eta datetime NOT NULL COMMENT 'Tiempo estimado de llegada' AFTER etd, ADD roadmapAddressFk int(11) NOT NULL AFTER `name`; diff --git a/db/versions/11416-goldenTulip/03-firstScript.sql b/db/versions/11416-goldenTulip/03-firstScript.sql index 8713c5090..4df73139a 100644 --- a/db/versions/11416-goldenTulip/03-firstScript.sql +++ b/db/versions/11416-goldenTulip/03-firstScript.sql @@ -1,3 +1,7 @@ ALTER TABLE vn.roadmapStop CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL, - CHANGE addressFk roadmapAddressFk int(11) DEFAULT NULL NULL; + CHANGE addressFk roadmapAddressFk int(11) DEFAULT NULL NULL, + DROP FOREIGN KEY expeditionTruck_FK_2; + +ALTER TABLE vn.roadmapStop ADD CONSTRAINT roadmapStop_roadmap_FK + FOREIGN KEY (roadmapFk) REFERENCES vn.roadmap(id) ON DELETE CASCADE ON UPDATE CASCADE; From 75b0589561a54024ec5f305cc9209e1f2d244ec6 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 24 Jan 2025 12:34:08 +0100 Subject: [PATCH 07/17] feat: refs #8227 Undo vehicle_checkNumberPlate change and triggers checks --- .../vn/procedures/vehicle_checkNumberPlate.sql | 16 +++++----------- db/routines/vn/triggers/roadmap_beforeInsert.sql | 7 ------- db/routines/vn/triggers/roadmap_beforeUpdate.sql | 7 ------- 3 files changed, 5 insertions(+), 25 deletions(-) diff --git a/db/routines/vn/procedures/vehicle_checkNumberPlate.sql b/db/routines/vn/procedures/vehicle_checkNumberPlate.sql index 613dda368..b7444cac8 100644 --- a/db/routines/vn/procedures/vehicle_checkNumberPlate.sql +++ b/db/routines/vn/procedures/vehicle_checkNumberPlate.sql @@ -13,18 +13,12 @@ BEGIN */ DECLARE vRegex VARCHAR(45); - IF vCountryCodeFk IS NULL THEN - SET vRegex = '^[A-Z0-9 -]{6,12}$'; - ELSE - SELECT regex INTO vRegex - FROM vehiclePlateRegex - WHERE countryCodeFk = vCountryCodeFk; - END IF; - + SELECT regex INTO vRegex + FROM vehiclePlateRegex + WHERE countryCodeFk = vCountryCodeFk; + IF NOT vNumberPlate REGEXP BINARY (vRegex)THEN - CALL util.throw(CONCAT('La matricula ', vNumberPlate, - ' no es valida', IF(vCountryCodeFk IS NOT NULL, - CONCAT(' para ', vCountryCodeFk), ''))); + CALL util.throw(CONCAT('Error: la matricula ', vNumberPlate, ' no es valida para ',vCountryCodeFk)); END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 4b0a1c847..9e783e711 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -7,13 +7,6 @@ BEGIN IF NEW.etd > NEW.eta THEN CALL util.throw('Departure time can not be after arrival time'); END IF; - - IF NEW.tractorPlate IS NOT NULL THEN - CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); - END IF; - IF NEW.trailerPlate IS NOT NULL THEN - CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); - END IF; SET NEW.name = UCASE(NEW.name); END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 1ad547f55..4824170ec 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -7,13 +7,6 @@ BEGIN IF NEW.etd > NEW.eta THEN CALL util.throw('Departure time can not be after arrival time'); END IF; - - IF NEW.tractorPlate IS NOT NULL THEN - CALL vehicle_checkNumberPlate(NEW.tractorPlate, NULL); - END IF; - IF NEW.trailerPlate IS NOT NULL THEN - CALL vehicle_checkNumberPlate(NEW.trailerPlate, NULL); - END IF; SET NEW.name = UCASE(NEW.name); END$$ DELIMITER ; \ No newline at end of file From 609df986148c5e9e7e526cb8a076ea29d7247d0f Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 27 Jan 2025 09:02:37 +0100 Subject: [PATCH 08/17] feat: refs #8227 Added grants --- db/versions/11416-goldenTulip/06-firstScript.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 db/versions/11416-goldenTulip/06-firstScript.sql diff --git a/db/versions/11416-goldenTulip/06-firstScript.sql b/db/versions/11416-goldenTulip/06-firstScript.sql new file mode 100644 index 000000000..58563cfd5 --- /dev/null +++ b/db/versions/11416-goldenTulip/06-firstScript.sql @@ -0,0 +1,10 @@ +GRANT SELECT ON TABLE vn.roadmap TO 'delivery'; +GRANT SELECT ON TABLE vn.roadmapStop TO 'delivery'; +GRANT SELECT ON TABLE vn.roadmapAddress TO 'delivery'; + +GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmap TO 'deliveryBoss'; +GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmapStop TO 'deliveryBoss'; +GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmapAddress TO 'deliveryBoss'; + +GRANT EXECUTE ON PROCEDURE vn.roadmap_cloneDay TO 'deliveryBoss'; +GRANT EXECUTE ON FUNCTION vn.getTimeBetweenRoadmapAddresses TO 'deliveryBoss'; From 75168eef91c723d99b369c7afe0dca174bad0d4d Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 27 Jan 2025 11:04:34 +0100 Subject: [PATCH 09/17] feat: refs #8227 Roadmap changes --- db/routines/vn/procedures/roadmap_cloneDay.sql | 2 +- db/routines/vn/triggers/roadmap_beforeInsert.sql | 3 +++ db/routines/vn/triggers/roadmap_beforeUpdate.sql | 3 +++ db/versions/11416-goldenTulip/01-firstScript.sql | 4 +++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/db/routines/vn/procedures/roadmap_cloneDay.sql b/db/routines/vn/procedures/roadmap_cloneDay.sql index 51d6ba1ab..4247b881e 100644 --- a/db/routines/vn/procedures/roadmap_cloneDay.sql +++ b/db/routines/vn/procedures/roadmap_cloneDay.sql @@ -22,7 +22,7 @@ BEGIN SET vDaysDiff = DATEDIFF(vDateToPaste, vDateToCopy); - IF vDaysDiff IS NULL OR NOT vDaysDiff THEN + IF vDaysDiff IS NULL THEN CALL util.throw("No valid dates"); END IF; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 9e783e711..1f046ec14 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -8,5 +8,8 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; SET NEW.name = UCASE(NEW.name); + IF NEW.`trailerPlate` IS NOT NULL THEN + SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 4824170ec..45b0d5e9e 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -8,5 +8,8 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; SET NEW.name = UCASE(NEW.name); + IF NOT (NEW.`trailerPlate` <=> OLD.`trailerPlate`) THEN + SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql index 0cd794229..9fa580ef9 100644 --- a/db/versions/11416-goldenTulip/01-firstScript.sql +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -11,4 +11,6 @@ ALTER TABLE vn.roadmap ALTER TABLE vn.roadmap CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, - CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; \ No newline at end of file + CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; + +CREATE INDEX roadmap_etd_IDX USING BTREE ON vn.roadmap (etd); From 56b0baebaa28e4b6054044e9493e3b0d0aeaea33 Mon Sep 17 00:00:00 2001 From: guillermo Date: Wed, 29 Jan 2025 07:53:41 +0100 Subject: [PATCH 10/17] feat: refs #8227 Roadmap changes --- db/dump/fixtures.before.sql | 16 ++++++++-------- db/versions/11416-goldenTulip/06-firstScript.sql | 5 +++-- db/versions/11416-goldenTulip/07-firstScript.sql | 2 ++ modules/route/back/models/route.json | 7 +------ 4 files changed, 14 insertions(+), 16 deletions(-) create mode 100644 db/versions/11416-goldenTulip/07-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index eb11264e7..a1e6fbcc3 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -745,15 +745,15 @@ INSERT INTO `vn`.`zoneClosure` (`zoneFk`, `dated`, `hour`) INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1'); -INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`, `dated`) +INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `dated`) VALUES - (1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1, util.VN_CURDATE()), - (2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9, util.VN_CURDATE()), - (3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 10, util.VN_CURDATE()), - (4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 12, util.VN_CURDATE()), - (5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 13, util.VN_CURDATE()), - (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3, util.VN_CURDATE()), - (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5, util.VN_CURDATE()); + (1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()); INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`, `problem`, `risk`) VALUES diff --git a/db/versions/11416-goldenTulip/06-firstScript.sql b/db/versions/11416-goldenTulip/06-firstScript.sql index 58563cfd5..82de52c67 100644 --- a/db/versions/11416-goldenTulip/06-firstScript.sql +++ b/db/versions/11416-goldenTulip/06-firstScript.sql @@ -6,5 +6,6 @@ GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmap TO 'deliveryBoss'; GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmapStop TO 'deliveryBoss'; GRANT DELETE, UPDATE, INSERT ON TABLE vn.roadmapAddress TO 'deliveryBoss'; -GRANT EXECUTE ON PROCEDURE vn.roadmap_cloneDay TO 'deliveryBoss'; -GRANT EXECUTE ON FUNCTION vn.getTimeBetweenRoadmapAddresses TO 'deliveryBoss'; +-- Comentado debido a que da error porque ejecuta primero el script de la versión +-- GRANT EXECUTE ON PROCEDURE vn.roadmap_cloneDay TO 'deliveryBoss'; +-- GRANT EXECUTE ON FUNCTION vn.getTimeBetweenRoadmapAddresses TO 'deliveryBoss'; diff --git a/db/versions/11416-goldenTulip/07-firstScript.sql b/db/versions/11416-goldenTulip/07-firstScript.sql new file mode 100644 index 000000000..13cb9df89 --- /dev/null +++ b/db/versions/11416-goldenTulip/07-firstScript.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.route DROP FOREIGN KEY fk_route_1; +ALTER TABLE vn.route DROP COLUMN zoneFk; diff --git a/modules/route/back/models/route.json b/modules/route/back/models/route.json index 8f4eab761..948352571 100644 --- a/modules/route/back/models/route.json +++ b/modules/route/back/models/route.json @@ -75,11 +75,6 @@ "type": "hasMany", "model": "Ticket", "foreignKey": "routeFk" - }, - "zone": { - "type": "belongsTo", - "model": "Zone", - "foreignKey": "zoneFk" - } + } } } From a14d6227a11d7384483eb28c5a1d382b470203c3 Mon Sep 17 00:00:00 2001 From: guillermo Date: Wed, 29 Jan 2025 14:15:22 +0100 Subject: [PATCH 11/17] feat: refs #8227 Roadmap changes --- .../getTimeBetweenRoadmapAddresses.sql | 41 ++++++++++++++--- .../vn/triggers/roadmap_afterUpdate.sql | 17 +++++++ .../vn/triggers/roadmap_beforeInsert.sql | 26 +++++++++-- .../vn/triggers/roadmap_beforeUpdate.sql | 45 +++++++++++++++++-- .../11416-goldenTulip/01-firstScript.sql | 12 +++-- .../11416-goldenTulip/02-firstScript.sql | 6 ++- .../11416-goldenTulip/08-firstScript.sql | 2 + 7 files changed, 130 insertions(+), 19 deletions(-) create mode 100644 db/routines/vn/triggers/roadmap_afterUpdate.sql create mode 100644 db/versions/11416-goldenTulip/08-firstScript.sql diff --git a/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql b/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql index 5a647d51b..354aeb835 100644 --- a/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql +++ b/db/routines/vn/functions/getTimeBetweenRoadmapAddresses.sql @@ -16,19 +16,46 @@ BEGIN */ DECLARE vSeconds INT; - WITH wRoadmap AS ( + WITH wRoadmapStop AS ( SELECT ROW_NUMBER() OVER(PARTITION BY roadmapFk ORDER BY eta) `sequence`, roadmapFk, roadmapAddressFk, eta FROM vn.roadmapStop + WHERE roadmapFk IS NOT NULL + AND roadmapAddressFk IS NOT NULL + AND eta IS NOT NULL ) - SELECT AVG(TIME_TO_SEC(TIMEDIFF(rTo.eta, rFrom.eta))) INTO vSeconds - FROM wRoadmap rFrom - JOIN wRoadmap rTo ON rTo.roadmapFk = rFrom.roadmapFk - WHERE rFrom.roadmapAddressFk = vRoadmapAddressFrom - AND rTo.roadmapAddressFk = vRoadmapAddressTo - AND rFrom.`sequence` + 1 = rTo.`sequence`; + SELECT AVG(TIME_TO_SEC(TIMEDIFF(rsTo.eta, rsFrom.eta))) INTO vSeconds + FROM wRoadmapStop rsFrom + JOIN wRoadmapStop rsTo ON rsTo.roadmapFk = rsFrom.roadmapFk + WHERE rsFrom.roadmapAddressFk = vRoadmapAddressFrom + AND rsTo.roadmapAddressFk = vRoadmapAddressTo + AND rsFrom.`sequence` + 1 = rsTo.`sequence`; + + IF NOT IFNULL(vSeconds, 0) THEN + WITH wRoadmap AS ( + SELECT id, + roadmapAddressFk, + etd + FROM vn.roadmap + WHERE roadmapAddressFk = vRoadmapAddressFrom + AND etd IS NOT NULL + ), wRoadmapStop AS ( + SELECT ROW_NUMBER() OVER(PARTITION BY roadmapFk ORDER BY eta) `sequence`, + roadmapFk, + roadmapAddressFk, + eta + FROM vn.roadmapStop + WHERE roadmapFk IS NOT NULL + AND roadmapAddressFk = vRoadmapAddressTo + AND eta IS NOT NULL + ) + SELECT AVG(TIME_TO_SEC(TIMEDIFF(rsTo.eta, rFrom.etd))) INTO vSeconds + FROM wRoadmap rFrom + JOIN wRoadmapStop rsTo ON rsTo.roadmapFk = rFrom.id + AND rsTo.`sequence` = 1; + END IF; RETURN vSeconds; END$$ diff --git a/db/routines/vn/triggers/roadmap_afterUpdate.sql b/db/routines/vn/triggers/roadmap_afterUpdate.sql new file mode 100644 index 000000000..7fcc31d92 --- /dev/null +++ b/db/routines/vn/triggers/roadmap_afterUpdate.sql @@ -0,0 +1,17 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_afterUpdate` + AFTER UPDATE ON `roadmap` + FOR EACH ROW +BEGIN + DECLARE vSeconds INT; + + IF NOT (NEW.etd <=> OLD.etd) THEN + SET vSeconds = TIME_TO_SEC(TIMEDIFF(NEW.etd, OLD.etd)); + IF vSeconds IS NOT NULL AND vSeconds <> 0 THEN + UPDATE roadmapStop + SET eta = eta + INTERVAL vSeconds SECOND + WHERE roadmapFk = NEW.id; + END IF; + END IF; +END$$ +DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index 1f046ec14..a9b837e6b 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -4,12 +4,32 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert` FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); - IF NEW.etd > NEW.eta THEN + + IF NEW.name IS NOT NULL THEN + SET NEW.name = UCASE(NEW.name); + END IF; + + IF NEW.etd > NEW.eta AND NEW.etd IS NOT NULL AND NEW.eta IS NOT NULL THEN CALL util.throw('Departure time can not be after arrival time'); END IF; - SET NEW.name = UCASE(NEW.name); - IF NEW.`trailerPlate` IS NOT NULL THEN + + IF NEW.trailerPlate IS NOT NULL THEN SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); END IF; + + IF NEW.tugPlate IS NOT NULL THEN + SET NEW.m3 = NEW.m3 + (SELECT m3 FROM vehicle WHERE numberPlate = NEW.tugPlate); + END IF; + + IF NEW.driver1Fk IS NOT NULL THEN + SET NEW.driverName = (SELECT CONCAT(w.firstName, ' ', w.lastName) + FROM worker w + WHERE w.id = NEW.driver1Fk); + + SET NEW.phone = (SELECT COALESCE(w.phone, c.mobile, c.phone, c.mobile) + FROM worker w + LEFT JOIN client c ON c.id = w.id + WHERE w.id = NEW.driver1Fk); + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 45b0d5e9e..46065129d 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -4,12 +4,51 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate` FOR EACH ROW BEGIN SET NEW.editorFk = account.myUser_getId(); - IF NEW.etd > NEW.eta THEN + + IF NOT (NEW.name <=> OLD.name) THEN + SET NEW.name = UCASE(NEW.name); + END IF; + + IF NEW.etd > NEW.eta AND NEW.etd IS NOT NULL AND NEW.eta IS NOT NULL THEN CALL util.throw('Departure time can not be after arrival time'); END IF; - SET NEW.name = UCASE(NEW.name); - IF NOT (NEW.`trailerPlate` <=> OLD.`trailerPlate`) THEN + + IF NOT (NEW.trailerPlate <=> OLD.trailerPlate) THEN SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); END IF; + + IF NOT (NEW.tugPlate <=> OLD.tugPlate) THEN + SET NEW.m3 = NEW.m3 + (SELECT m3 FROM vehicle WHERE numberPlate = NEW.tugPlate); + END IF; + + IF NOT (NEW.driverName <=> OLD.driverName) THEN + SET NEW.driver1Fk = NULL; + END IF; + + IF NOT (NEW.driver1Fk <=> OLD.driver1Fk) AND NEW.driver1Fk IS NOT NULL THEN + SET NEW.driverName = (SELECT CONCAT(w.firstName, ' ', w.lastName) + FROM worker w + WHERE w.id = NEW.driver1Fk); + + SET NEW.phone = (SELECT COALESCE(w.phone, c.mobile, c.phone, c.mobile) + FROM worker w + LEFT JOIN client c ON c.id = w.id + WHERE w.id = NEW.driver1Fk); + END IF; + + IF NOT (NEW.driverChangeName <=> OLD.driverChangeName) THEN + SET NEW.driverChangeFk = NULL; + END IF; + + IF NOT (NEW.driverChangeFk <=> OLD.driverChangeFk) AND NEW.driverChangeFk IS NOT NULL THEN + SET NEW.driverChangeName = (SELECT CONCAT(w.firstName, ' ', w.lastName) + FROM worker w + WHERE w.id = NEW.driverChangeFk); + + SET NEW.phone = (SELECT COALESCE(w.phone, c.mobile, c.phone, c.mobile) + FROM worker w + LEFT JOIN client c ON c.id = w.id + WHERE w.id = NEW.driverChangeFk); + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/versions/11416-goldenTulip/01-firstScript.sql b/db/versions/11416-goldenTulip/01-firstScript.sql index 9fa580ef9..565bf0f55 100644 --- a/db/versions/11416-goldenTulip/01-firstScript.sql +++ b/db/versions/11416-goldenTulip/01-firstScript.sql @@ -4,13 +4,17 @@ ALTER TABLE vn.roadmap MODIFY COLUMN trailerPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL, MODIFY COLUMN etd datetime NOT NULL COMMENT 'Tiempo estimado de salida', MODIFY COLUMN `name` varchar(45) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL, - ADD eta datetime NOT NULL COMMENT 'Tiempo estimado de llegada' AFTER etd, - ADD roadmapAddressFk int(11) NOT NULL AFTER `name`; + MODIFY COLUMN driver1Fk int(10) unsigned DEFAULT NULL NULL AFTER driverName, + MODIFY COLUMN driver2Fk int(10) unsigned DEFAULT NULL NULL AFTER driver1Fk, + ADD eta datetime DEFAULT NULL NULL COMMENT 'Tiempo estimado de llegada' AFTER etd, + ADD roadmapAddressFk int(11) DEFAULT NULL NULL AFTER `name`, + ADD dollyPlate varchar(10) DEFAULT NULL AFTER trailerPlate, + ADD tugPlate varchar(10) DEFAULT NULL AFTER dollyPlate, + ADD driverChangeName varchar(45) DEFAULT NULL AFTER driver2Fk, + ADD driverChangeFk int(10) unsigned DEFAULT NULL NULL AFTER driverChangeName; -- Separamos los CHANGE por que si no arriba no se aplican ALTER TABLE vn.roadmap - CHANGE driver1Fk driverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Conductor principal' AFTER driverName, - CHANGE driver2Fk codriverFk int(10) unsigned DEFAULT NULL NULL COMMENT 'Copiloto' AFTER driverFk, CHANGE userFk editorFk int(10) unsigned DEFAULT NULL NULL AFTER m3; CREATE INDEX roadmap_etd_IDX USING BTREE ON vn.roadmap (etd); diff --git a/db/versions/11416-goldenTulip/02-firstScript.sql b/db/versions/11416-goldenTulip/02-firstScript.sql index f99334e9b..c729c3de2 100644 --- a/db/versions/11416-goldenTulip/02-firstScript.sql +++ b/db/versions/11416-goldenTulip/02-firstScript.sql @@ -5,9 +5,11 @@ UPDATE vn.roadmap ALTER TABLE vn.roadmap ADD CONSTRAINT roadmap_roadmapAddress_FK FOREIGN KEY (roadmapAddressFk) REFERENCES vn.roadmapAddress(addressFk) ON DELETE RESTRICT ON UPDATE CASCADE, - ADD CONSTRAINT roadmap_driver_FK FOREIGN KEY (driverFk) + ADD CONSTRAINT roadmap_driver_FK FOREIGN KEY (driver1Fk) REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE, - ADD CONSTRAINT roadmap_driver_FK2 FOREIGN KEY (codriverFk) + ADD CONSTRAINT roadmap_driver_FK2 FOREIGN KEY (driver2Fk) + REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE, + ADD CONSTRAINT roadmap_driverChange_FK FOREIGN KEY (driverChangeFk) REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE, ADD CONSTRAINT roadmap_user_Fk FOREIGN KEY (editorFk) REFERENCES account.user(id) ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/db/versions/11416-goldenTulip/08-firstScript.sql b/db/versions/11416-goldenTulip/08-firstScript.sql new file mode 100644 index 000000000..a7fdd5b86 --- /dev/null +++ b/db/versions/11416-goldenTulip/08-firstScript.sql @@ -0,0 +1,2 @@ +ALTER TABLE vn.vehicle + ADD typeFk enum('car','van','truck','trailer','tug', 'tugDolly','dolly') DEFAULT 'van' NOT NULL; From 123f28055e265645c70b2ef65210a113d0295834 Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 30 Jan 2025 09:28:44 +0100 Subject: [PATCH 12/17] feat: refs #8227 Roadmap changes --- db/routines/vn/triggers/roadmap_beforeInsert.sql | 14 ++++++++------ db/routines/vn/triggers/roadmap_beforeUpdate.sql | 13 ++----------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index a9b837e6b..bfbb4f879 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -13,12 +13,8 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; - IF NEW.trailerPlate IS NOT NULL THEN - SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); - END IF; - - IF NEW.tugPlate IS NOT NULL THEN - SET NEW.m3 = NEW.m3 + (SELECT m3 FROM vehicle WHERE numberPlate = NEW.tugPlate); + IF NEW.trailerPlate IS NOT NULL OR NEW.tugPlate IS NOT NULL THEN + SET NEW.m3 = (SELECT SUM(m3) FROM vehicle WHERE numberPlate IN (NEW.trailerPlate, NEW.tugPlate)); END IF; IF NEW.driver1Fk IS NOT NULL THEN @@ -31,5 +27,11 @@ BEGIN LEFT JOIN client c ON c.id = w.id WHERE w.id = NEW.driver1Fk); END IF; + + IF NEW.driverChangeFk IS NOT NULL THEN + SET NEW.driverChangeName = (SELECT CONCAT(w.firstName, ' ', w.lastName) + FROM worker w + WHERE w.id = NEW.driverChangeFk); + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 46065129d..f888d3a6f 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -13,12 +13,8 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; - IF NOT (NEW.trailerPlate <=> OLD.trailerPlate) THEN - SET NEW.m3 = (SELECT m3 FROM vehicle WHERE numberPlate = NEW.trailerPlate); - END IF; - - IF NOT (NEW.tugPlate <=> OLD.tugPlate) THEN - SET NEW.m3 = NEW.m3 + (SELECT m3 FROM vehicle WHERE numberPlate = NEW.tugPlate); + IF NOT (NEW.trailerPlate <=> OLD.trailerPlate) OR NOT (NEW.tugPlate <=> OLD.tugPlate) THEN + SET NEW.m3 = (SELECT SUM(m3) FROM vehicle WHERE numberPlate IN (NEW.trailerPlate, NEW.tugPlate)); END IF; IF NOT (NEW.driverName <=> OLD.driverName) THEN @@ -44,11 +40,6 @@ BEGIN SET NEW.driverChangeName = (SELECT CONCAT(w.firstName, ' ', w.lastName) FROM worker w WHERE w.id = NEW.driverChangeFk); - - SET NEW.phone = (SELECT COALESCE(w.phone, c.mobile, c.phone, c.mobile) - FROM worker w - LEFT JOIN client c ON c.id = w.id - WHERE w.id = NEW.driverChangeFk); END IF; END$$ DELIMITER ; \ No newline at end of file From 855600811e15a752a1df1c4f629f5a3ab6bacdc5 Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 30 Jan 2025 15:00:19 +0100 Subject: [PATCH 13/17] feat: refs #8227 Roadmap changes --- .../vn/triggers/roadmapStop_beforeDelete.sql | 21 ++++++++++++++++++ .../vn/triggers/roadmapStop_beforeInsert.sql | 22 +++++++++++++++++-- .../vn/triggers/roadmapStop_beforeUpdate.sql | 18 ++++++++++++++- .../vn/triggers/roadmap_beforeInsert.sql | 4 ---- .../vn/triggers/roadmap_beforeUpdate.sql | 4 ---- 5 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 db/routines/vn/triggers/roadmapStop_beforeDelete.sql diff --git a/db/routines/vn/triggers/roadmapStop_beforeDelete.sql b/db/routines/vn/triggers/roadmapStop_beforeDelete.sql new file mode 100644 index 000000000..3449e5621 --- /dev/null +++ b/db/routines/vn/triggers/roadmapStop_beforeDelete.sql @@ -0,0 +1,21 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeDelete` + BEFORE DELETE ON `roadmapStop` + FOR EACH ROW +BEGIN + DECLARE vMaxEta DATETIME; + + IF OLD.roadmapFk IS NOT NULL THEN + SELECT MAX(eta) INTO vMaxEta + FROM roadmapStop + WHERE roadmapFk = OLD.roadmapFk + AND id <> OLD.id; + + IF OLD.eta > vMaxEta OR vMaxEta IS NULL THEN + UPDATE roadmap + SET eta = COALESCE(vMaxEta, OLD.eta) + WHERE id = OLD.roadmapFk; + END IF; + END IF; +END$$ +DELIMITER ; diff --git a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql index 9ec8b72cf..00d17fcce 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -3,12 +3,30 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeInser BEFORE INSERT ON `roadmapStop` FOR EACH ROW BEGIN + DECLARE vMaxEta DATETIME; + SET NEW.editorFk = account.myUser_getId(); - SET NEW.description = UCASE(NEW.description); + + IF NEW.description IS NOT NULL THEN + SET NEW.description = UCASE(NEW.description); + END IF; + IF NEW.roadmapFk IS NOT NULL THEN IF NEW.eta < (SELECT etd FROM roadmap WHERE id = NEW.roadmapFk) THEN CALL util.throw('Departure time can not be after arrival time'); END IF; END IF; + + IF NEW.roadmapFk IS NOT NULL AND NEW.eta IS NOT NULL THEN + SELECT MAX(eta) INTO vMaxEta + FROM roadmapStop + WHERE roadmapFk = NEW.roadmapFk; + + IF NEW.eta > vMaxEta OR vMaxEta IS NOT NULL THEN + UPDATE roadmap + SET eta = GREATEST(COALESCE(vMaxEta, NEW.eta), NEW.eta) + WHERE id = NEW.roadmapFk; + END IF; + END IF; END$$ -DELIMITER ; +DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index cff48846a..0560ed5eb 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -3,14 +3,30 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeUpdat BEFORE UPDATE ON `roadmapStop` FOR EACH ROW BEGIN + DECLARE vMaxEta DATETIME; + SET NEW.editorFk = account.myUser_getId(); - SET NEW.description = UCASE(NEW.description); + + IF NOT (NEW.description <=> OLD.description) THEN + SET NEW.description = UCASE(NEW.description); + END IF; + IF (NOT (NEW.roadmapFk <=> OLD.roadmapFk) AND NEW.roadmapFk IS NOT NULL) OR (NOT (NEW.eta <=> OLD.eta) AND NEW.eta IS NOT NULL) THEN IF NEW.eta < (SELECT etd FROM roadmap WHERE id = NEW.roadmapFk) THEN CALL util.throw('Departure time can not be after arrival time'); END IF; + + SELECT MAX(eta) INTO vMaxEta + FROM roadmapStop + WHERE roadmapFk = NEW.roadmapFk; + + IF NEW.eta > vMaxEta OR vMaxEta IS NULL THEN + UPDATE roadmap + SET eta = COALESCE(vMaxEta, NEW.eta) + WHERE id = NEW.roadmapFk; + END IF; END IF; END$$ DELIMITER ; diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql index bfbb4f879..4dd9e686c 100644 --- a/db/routines/vn/triggers/roadmap_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql @@ -9,10 +9,6 @@ BEGIN SET NEW.name = UCASE(NEW.name); END IF; - IF NEW.etd > NEW.eta AND NEW.etd IS NOT NULL AND NEW.eta IS NOT NULL THEN - CALL util.throw('Departure time can not be after arrival time'); - END IF; - IF NEW.trailerPlate IS NOT NULL OR NEW.tugPlate IS NOT NULL THEN SET NEW.m3 = (SELECT SUM(m3) FROM vehicle WHERE numberPlate IN (NEW.trailerPlate, NEW.tugPlate)); END IF; diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index f888d3a6f..4f355915b 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -9,10 +9,6 @@ BEGIN SET NEW.name = UCASE(NEW.name); END IF; - IF NEW.etd > NEW.eta AND NEW.etd IS NOT NULL AND NEW.eta IS NOT NULL THEN - CALL util.throw('Departure time can not be after arrival time'); - END IF; - IF NOT (NEW.trailerPlate <=> OLD.trailerPlate) OR NOT (NEW.tugPlate <=> OLD.tugPlate) THEN SET NEW.m3 = (SELECT SUM(m3) FROM vehicle WHERE numberPlate IN (NEW.trailerPlate, NEW.tugPlate)); END IF; From b40f145613220e92635de22a4739eeaae91c4b14 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 31 Jan 2025 10:57:44 +0100 Subject: [PATCH 14/17] feat: refs #8227 Roadmap changes --- .../vn/triggers/roadmapStop_beforeDelete.sql | 13 +++++++++---- .../vn/triggers/roadmapStop_beforeInsert.sql | 12 ++++++------ .../vn/triggers/roadmapStop_beforeUpdate.sql | 18 ++++++++++++++---- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/db/routines/vn/triggers/roadmapStop_beforeDelete.sql b/db/routines/vn/triggers/roadmapStop_beforeDelete.sql index 3449e5621..f0faeb8be 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeDelete.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeDelete.sql @@ -4,18 +4,23 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeDelet FOR EACH ROW BEGIN DECLARE vMaxEta DATETIME; + DECLARE vRoadmapEta DATETIME; IF OLD.roadmapFk IS NOT NULL THEN - SELECT MAX(eta) INTO vMaxEta + SELECT MAX(eta) INTO vMaxEta FROM roadmapStop WHERE roadmapFk = OLD.roadmapFk AND id <> OLD.id; - IF OLD.eta > vMaxEta OR vMaxEta IS NULL THEN + SELECT eta INTO vRoadmapEta + FROM roadmap + WHERE id = OLD.roadmapFk; + + IF vMaxEta <> vRoadmapEta OR vMaxEta IS NULL THEN UPDATE roadmap - SET eta = COALESCE(vMaxEta, OLD.eta) + SET eta = vMaxEta WHERE id = OLD.roadmapFk; END IF; END IF; END$$ -DELIMITER ; +DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql index 00d17fcce..012702f3e 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeInser BEFORE INSERT ON `roadmapStop` FOR EACH ROW BEGIN - DECLARE vMaxEta DATETIME; + DECLARE vRoadmapEta DATETIME; SET NEW.editorFk = account.myUser_getId(); @@ -18,13 +18,13 @@ BEGIN END IF; IF NEW.roadmapFk IS NOT NULL AND NEW.eta IS NOT NULL THEN - SELECT MAX(eta) INTO vMaxEta - FROM roadmapStop - WHERE roadmapFk = NEW.roadmapFk; + SELECT eta INTO vRoadmapEta + FROM roadmap + WHERE id = NEW.roadmapFk; - IF NEW.eta > vMaxEta OR vMaxEta IS NOT NULL THEN + IF vRoadmapEta < NEW.eta OR vRoadmapEta IS NULL THEN UPDATE roadmap - SET eta = GREATEST(COALESCE(vMaxEta, NEW.eta), NEW.eta) + SET eta = NEW.eta WHERE id = NEW.roadmapFk; END IF; END IF; diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index 0560ed5eb..d9016a170 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -4,6 +4,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeUpdat FOR EACH ROW BEGIN DECLARE vMaxEta DATETIME; + DECLARE vCurrentEta DATETIME; SET NEW.editorFk = account.myUser_getId(); @@ -18,13 +19,22 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; - SELECT MAX(eta) INTO vMaxEta + SELECT MAX(eta) INTO vMaxEta FROM roadmapStop - WHERE roadmapFk = NEW.roadmapFk; + WHERE roadmapFk = NEW.roadmapFk + AND id <> OLD.id; - IF NEW.eta > vMaxEta OR vMaxEta IS NULL THEN + IF vMaxEta IS NULL OR NEW.eta > vMaxEta THEN + SET vMaxEta = NEW.eta; + END IF; + + SELECT eta INTO vCurrentEta + FROM roadmap + WHERE id = NEW.roadmapFk; + + IF vMaxEta <> vCurrentEta THEN UPDATE roadmap - SET eta = COALESCE(vMaxEta, NEW.eta) + SET eta = vMaxEta WHERE id = NEW.roadmapFk; END IF; END IF; From 8dc803b5df54167009735596fc59e2d434c913dd Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 31 Jan 2025 14:25:23 +0100 Subject: [PATCH 15/17] feat: refs #8227 Roadmap changes --- db/routines/vn/triggers/roadmapStop_beforeUpdate.sql | 6 +++--- db/versions/11416-goldenTulip/09-firstScript.sql | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 db/versions/11416-goldenTulip/09-firstScript.sql diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index d9016a170..c3142c8ac 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -13,7 +13,7 @@ BEGIN END IF; IF (NOT (NEW.roadmapFk <=> OLD.roadmapFk) AND NEW.roadmapFk IS NOT NULL) - OR (NOT (NEW.eta <=> OLD.eta) AND NEW.eta IS NOT NULL) THEN + OR (NOT (NEW.eta <=> OLD.eta)) THEN IF NEW.eta < (SELECT etd FROM roadmap WHERE id = NEW.roadmapFk) THEN CALL util.throw('Departure time can not be after arrival time'); @@ -24,7 +24,7 @@ BEGIN WHERE roadmapFk = NEW.roadmapFk AND id <> OLD.id; - IF vMaxEta IS NULL OR NEW.eta > vMaxEta THEN + IF vMaxEta < NEW.eta OR vMaxEta IS NULL THEN SET vMaxEta = NEW.eta; END IF; @@ -32,7 +32,7 @@ BEGIN FROM roadmap WHERE id = NEW.roadmapFk; - IF vMaxEta <> vCurrentEta THEN + IF (vMaxEta <> vCurrentEta OR vMaxEta IS NULL) OR vMaxEta IS NOT NULL THEN UPDATE roadmap SET eta = vMaxEta WHERE id = NEW.roadmapFk; diff --git a/db/versions/11416-goldenTulip/09-firstScript.sql b/db/versions/11416-goldenTulip/09-firstScript.sql new file mode 100644 index 000000000..5e61de07a --- /dev/null +++ b/db/versions/11416-goldenTulip/09-firstScript.sql @@ -0,0 +1 @@ +CREATE INDEX route_dated_IDX USING BTREE ON vn.route (dated); From 9cecdab5a823c2d45d50beb9771c93d94ba32478 Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 4 Feb 2025 07:17:11 +0100 Subject: [PATCH 16/17] refactor: refs #8227 Fix tests --- db/dump/fixtures.before.sql | 6 +++--- .../back/methods/agency-term/specs/filter.spec.js | 10 +++++----- modules/route/back/methods/route/specs/filter.spec.js | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 5e23178ec..98c7f42f8 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -752,11 +752,11 @@ INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1'); INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `dated`) VALUES - (1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (1, '1899-12-30 12:15:00', 133, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), (2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), - (3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (3, '1899-12-30 14:30:00', 133, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), (4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), - (5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), + (5, '1899-12-30 16:00:00', 133, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()), (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), util.VN_CURDATE()); diff --git a/modules/route/back/methods/agency-term/specs/filter.spec.js b/modules/route/back/methods/agency-term/specs/filter.spec.js index aa2743868..41e696157 100644 --- a/modules/route/back/methods/agency-term/specs/filter.spec.js +++ b/modules/route/back/methods/agency-term/specs/filter.spec.js @@ -18,7 +18,7 @@ describe('AgencyTerm filter()', () => { const firstAgencyTerm = agencyTerms[0]; expect(firstAgencyTerm.routeFk).toEqual(1); - expect(agencyTerms.length).toEqual(7); + expect(agencyTerms.length).toEqual(5); await tx.rollback(); } catch (e) { @@ -49,7 +49,7 @@ describe('AgencyTerm filter()', () => { let result = await app.models.AgencyTerm.filter(ctx); - expect(result.length).toEqual(4); + expect(result.length).toEqual(2); }); it('should return results matching "from" and "to"', async() => { @@ -72,7 +72,7 @@ describe('AgencyTerm filter()', () => { const results = await models.AgencyTerm.filter(ctx, options); - expect(results.length).toBe(7); + expect(results.length).toBe(5); await tx.rollback(); } catch (e) { @@ -90,7 +90,7 @@ describe('AgencyTerm filter()', () => { let result = await app.models.AgencyTerm.filter(ctx); - expect(result.length).toEqual(2); + expect(result.length).toEqual(1); expect(result[0].routeFk).toEqual(1); }); @@ -103,7 +103,7 @@ describe('AgencyTerm filter()', () => { let result = await app.models.AgencyTerm.filter(ctx); - expect(result.length).toEqual(2); + expect(result.length).toEqual(1); expect(result[0].routeFk).toEqual(2); }); }); diff --git a/modules/route/back/methods/route/specs/filter.spec.js b/modules/route/back/methods/route/specs/filter.spec.js index 11bf0b7b0..ddc2fe893 100644 --- a/modules/route/back/methods/route/specs/filter.spec.js +++ b/modules/route/back/methods/route/specs/filter.spec.js @@ -59,7 +59,7 @@ describe('Route filter()', () => { }; const results = await models.Route.filter(ctx, options); - expect(results.length).toBe(9); + expect(results.length).toBe(7); await tx.rollback(); } catch (e) { @@ -115,7 +115,7 @@ describe('Route filter()', () => { }; const result = await app.models.Route.filter(ctx); - expect(result.length).toEqual(4); + expect(result.length).toEqual(2); }); it('should return the routes matching "warehouseFk"', async() => { @@ -132,7 +132,7 @@ describe('Route filter()', () => { let result = await app.models.Route.filter(ctx); - expect(result.length).toEqual(9); + expect(result.length).toEqual(7); ctx.args.warehouseFk = 2; From eb9d3a7b21b8371e9ae14115fc3282e859d05242 Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 4 Feb 2025 08:27:21 +0100 Subject: [PATCH 17/17] refactor: refs #8227 Requested changes --- .../vn/procedures/roadmap_cloneDay.sql | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/db/routines/vn/procedures/roadmap_cloneDay.sql b/db/routines/vn/procedures/roadmap_cloneDay.sql index 4247b881e..8c3803947 100644 --- a/db/routines/vn/procedures/roadmap_cloneDay.sql +++ b/db/routines/vn/procedures/roadmap_cloneDay.sql @@ -12,8 +12,15 @@ BEGIN * @param vDateToPaste Fecha para pegar */ DECLARE vDaysDiff INT; - DECLARE vNextRoadmapId INT; + DECLARE vRoadmapFk INT; + DECLARE vNewRoadmapFk INT; + DECLARE vDone BOOL DEFAULT FALSE; + DECLARE vRoadmaps CURSOR FOR + SELECT id + FROM roadmap + WHERE etd BETWEEN vDateToCopy AND util.dayEnd(vDateToCopy); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; @@ -28,23 +35,14 @@ BEGIN START TRANSACTION; - SELECT AUTO_INCREMENT INTO vNextRoadmapId - FROM information_schema.tables - WHERE table_name = 'roadmap' - AND table_schema = 'vn'; + OPEN vRoadmaps; + l: LOOP + SET vDone = FALSE; + FETCH vRoadmaps INTO vRoadmapFk; - CREATE OR REPLACE TEMPORARY TABLE tmp.roadmapsToCopy - ENGINE = MEMORY - SELECT ROW_NUMBER() OVER(ORDER BY id) rowOrder, - id, - `name`, - roadmapAddressFk, - etd, - eta, - observations, - price - FROM roadmap - WHERE etd BETWEEN vDateToCopy AND util.dayEnd(vDateToCopy); + IF vDone THEN + LEAVE l; + END IF; INSERT INTO roadmap (`name`, roadmapAddressFk, etd, eta, observations, price) SELECT `name`, @@ -53,19 +51,22 @@ BEGIN eta + INTERVAL vDaysDiff DAY, observations, price - FROM tmp.roadmapsToCopy; + FROM roadmap + WHERE id = vRoadmapFk; + + SET vNewRoadmapFk = LAST_INSERT_ID(); INSERT INTO roadmapStop (roadmapFk, roadmapAddressFk, eta, `description`, bufferFk) - SELECT (rtc.rowOrder - 1) + vNextRoadmapId, - rs.roadmapAddressFk, - rs.eta + INTERVAL vDaysDiff DAY, - rs.description, - rs.bufferFk - FROM tmp.roadmapsToCopy rtc - JOIN roadmapStop rs ON rs.roadmapFk = rtc.id; + SELECT vNewRoadmapFk, + roadmapAddressFk, + eta + INTERVAL vDaysDiff DAY, + `description`, + bufferFk + FROM roadmapStop + WHERE roadmapFk = vRoadmapFk; + END LOOP; + CLOSE vRoadmaps; COMMIT; - - DROP TEMPORARY TABLE tmp.roadmapsToCopy; END$$ DELIMITER ;