From e19e50de148f9e46a12fa1e4c9807489d514b432 Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 10 Feb 2025 13:04:23 +0100 Subject: [PATCH 1/6] feat: refs #8227 Update roadmap triggers to manage eta adjustments and prevent recursive calls --- .../vn/triggers/roadmapStop_beforeUpdate.sql | 35 +++++++++++-------- .../vn/triggers/roadmap_afterUpdate.sql | 25 ++++++++----- .../vn/triggers/roadmap_beforeUpdate.sql | 20 +++++++++++ .../11436-bronzeMonstera/00-firstScript.sql | 7 ++++ 4 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 db/versions/11436-bronzeMonstera/00-firstScript.sql diff --git a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql index c3142c8acc..93c44b042b 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -19,24 +19,31 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; - SELECT MAX(eta) INTO vMaxEta - FROM roadmapStop - WHERE roadmapFk = NEW.roadmapFk - AND id <> OLD.id; + IF @roadmapTriggerIsActive IS NULL THEN + SET @roadmapTriggerIsActive = TRUE; - IF vMaxEta < NEW.eta OR vMaxEta IS NULL THEN - SET vMaxEta = NEW.eta; - END IF; + SELECT MAX(eta) INTO vMaxEta + FROM roadmapStop + WHERE roadmapFk = NEW.roadmapFk + AND id <> OLD.id; - SELECT eta INTO vCurrentEta - FROM roadmap - WHERE id = NEW.roadmapFk; + IF vMaxEta < NEW.eta OR vMaxEta IS NULL THEN + SET vMaxEta = NEW.eta; + END IF; - IF (vMaxEta <> vCurrentEta OR vMaxEta IS NULL) OR vMaxEta IS NOT NULL THEN - UPDATE roadmap - SET eta = vMaxEta + SELECT eta INTO vCurrentEta + FROM roadmap WHERE id = NEW.roadmapFk; + + IF (vMaxEta <> vCurrentEta OR vMaxEta IS NULL) OR vMaxEta IS NOT NULL THEN + UPDATE roadmap + SET eta = vMaxEta + WHERE id = NEW.roadmapFk; + END IF; + + SET @roadmapTriggerIsActive = NULL; + END IF; END IF; END$$ -DELIMITER ; +DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/triggers/roadmap_afterUpdate.sql b/db/routines/vn/triggers/roadmap_afterUpdate.sql index 7fcc31d922..26f77dd0cc 100644 --- a/db/routines/vn/triggers/roadmap_afterUpdate.sql +++ b/db/routines/vn/triggers/roadmap_afterUpdate.sql @@ -1,17 +1,26 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_afterUpdate` - AFTER UPDATE ON `roadmap` - FOR EACH ROW +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; + IF @roadmapTriggerIsActive IS NULL THEN + SET @roadmapTriggerIsActive = TRUE; + + 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 vn.roadmapStop + SET eta = eta + INTERVAL vSeconds SECOND + WHERE roadmapFk = NEW.id; + + SET NEW.eta = NEW.eta + INTERVAL vSeconds SECOND; + END IF; END IF; + + SET @roadmapTriggerIsActive = 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 4f355915bc..01f1ba7061 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 + DECLARE vSeconds INT; + SET NEW.editorFk = account.myUser_getId(); IF NOT (NEW.name <=> OLD.name) THEN @@ -37,5 +39,23 @@ BEGIN FROM worker w WHERE w.id = NEW.driverChangeFk); END IF; + + IF @trigger_active IS NULL THEN + SET @trigger_active = TRUE; + + 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 vn.roadmapStop + SET eta = eta + INTERVAL vSeconds SECOND + WHERE roadmapFk = NEW.id; + + SET NEW.eta = NEW.eta + INTERVAL vSeconds SECOND; + END IF; + END IF; + + SET @trigger_active = NULL; + END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/versions/11436-bronzeMonstera/00-firstScript.sql b/db/versions/11436-bronzeMonstera/00-firstScript.sql new file mode 100644 index 0000000000..eaf0c48648 --- /dev/null +++ b/db/versions/11436-bronzeMonstera/00-firstScript.sql @@ -0,0 +1,7 @@ +ALTER TABLE vn.roadmap + MODIFY COLUMN dollyPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL COMMENT + 'Vehículo sin motor diseñado para conectarse a una unidad tractora, un camión o un vehículo tractor con fuerte potencia de tracción'; + +GRANT UPDATE (palletM3) ON vn.volumeConfig TO deliveryBoss; + +ALTER TABLE vn.volumeConfig ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; From 75b6867be8cfdc931396b1f9b00d79c431a7277b Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 10 Feb 2025 13:06:05 +0100 Subject: [PATCH 2/6] feat: refs #8227 Minor change --- db/routines/vn/triggers/roadmap_beforeUpdate.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 01f1ba7061..e9b4b1b981 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -40,8 +40,8 @@ BEGIN WHERE w.id = NEW.driverChangeFk); END IF; - IF @trigger_active IS NULL THEN - SET @trigger_active = TRUE; + IF @roadmapTriggerIsActive IS NULL THEN + SET @roadmapTriggerIsActive = TRUE; IF NOT (NEW.etd <=> OLD.etd) THEN SET vSeconds = TIME_TO_SEC(TIMEDIFF(NEW.etd, OLD.etd)); @@ -55,7 +55,7 @@ BEGIN END IF; END IF; - SET @trigger_active = NULL; + SET @roadmapTriggerIsActive = NULL; END IF; END$$ DELIMITER ; \ No newline at end of file From 92ab3648e70980f4745f39fda2bc9ee97fdcfc11 Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 13 Feb 2025 09:22:45 +0100 Subject: [PATCH 3/6] feat: refs #8227 Fix tests --- .../vn/triggers/roadmap_afterUpdate.sql | 26 ------------------- .../vn/triggers/roadmap_beforeUpdate.sql | 2 +- 2 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 db/routines/vn/triggers/roadmap_afterUpdate.sql diff --git a/db/routines/vn/triggers/roadmap_afterUpdate.sql b/db/routines/vn/triggers/roadmap_afterUpdate.sql deleted file mode 100644 index 26f77dd0cc..0000000000 --- a/db/routines/vn/triggers/roadmap_afterUpdate.sql +++ /dev/null @@ -1,26 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmap_afterUpdate` -AFTER UPDATE ON `roadmap` -FOR EACH ROW -BEGIN - DECLARE vSeconds INT; - - IF @roadmapTriggerIsActive IS NULL THEN - SET @roadmapTriggerIsActive = TRUE; - - 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 vn.roadmapStop - SET eta = eta + INTERVAL vSeconds SECOND - WHERE roadmapFk = NEW.id; - - SET NEW.eta = NEW.eta + INTERVAL vSeconds SECOND; - END IF; - END IF; - - SET @roadmapTriggerIsActive = 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 e9b4b1b981..610bca3ee9 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -47,7 +47,7 @@ BEGIN SET vSeconds = TIME_TO_SEC(TIMEDIFF(NEW.etd, OLD.etd)); IF vSeconds IS NOT NULL AND vSeconds <> 0 THEN - UPDATE vn.roadmapStop + UPDATE roadmapStop SET eta = eta + INTERVAL vSeconds SECOND WHERE roadmapFk = NEW.id; From 4042679c9bde1c205cba6c55fd88a61d518e7b08 Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 13 Feb 2025 14:12:44 +0100 Subject: [PATCH 4/6] feat: refs #8227 Grants --- db/routines/vn/triggers/roadmap_beforeUpdate.sql | 2 +- db/versions/11436-bronzeMonstera/00-firstScript.sql | 6 +----- db/versions/11436-bronzeMonstera/01-firstScript.sql | 4 ++++ db/versions/11436-bronzeMonstera/02-firstScript.sql | 3 +++ 4 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 db/versions/11436-bronzeMonstera/01-firstScript.sql create mode 100644 db/versions/11436-bronzeMonstera/02-firstScript.sql diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql index 610bca3ee9..b5757e5191 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -46,7 +46,7 @@ BEGIN 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 + IF vSeconds <> 0 THEN UPDATE roadmapStop SET eta = eta + INTERVAL vSeconds SECOND WHERE roadmapFk = NEW.id; diff --git a/db/versions/11436-bronzeMonstera/00-firstScript.sql b/db/versions/11436-bronzeMonstera/00-firstScript.sql index eaf0c48648..56c4f01b09 100644 --- a/db/versions/11436-bronzeMonstera/00-firstScript.sql +++ b/db/versions/11436-bronzeMonstera/00-firstScript.sql @@ -1,7 +1,3 @@ ALTER TABLE vn.roadmap MODIFY COLUMN dollyPlate varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL COMMENT - 'Vehículo sin motor diseñado para conectarse a una unidad tractora, un camión o un vehículo tractor con fuerte potencia de tracción'; - -GRANT UPDATE (palletM3) ON vn.volumeConfig TO deliveryBoss; - -ALTER TABLE vn.volumeConfig ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; + 'Vehículo sin motor diseñado para conectarse a una unidad tractora, un camión o un vehículo tractor con fuerte potencia de tracción'; \ No newline at end of file diff --git a/db/versions/11436-bronzeMonstera/01-firstScript.sql b/db/versions/11436-bronzeMonstera/01-firstScript.sql new file mode 100644 index 0000000000..6b3ce86329 --- /dev/null +++ b/db/versions/11436-bronzeMonstera/01-firstScript.sql @@ -0,0 +1,4 @@ +ALTER TABLE vn.volumeConfig ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; + +GRANT UPDATE (palletM3) ON vn.volumeConfig TO deliveryBoss; +GRANT EXECUTE ON FUNCTION vn.getTimeBetweenRoadmapAddresses TO deliveryBoss; diff --git a/db/versions/11436-bronzeMonstera/02-firstScript.sql b/db/versions/11436-bronzeMonstera/02-firstScript.sql new file mode 100644 index 0000000000..ee384ac2ce --- /dev/null +++ b/db/versions/11436-bronzeMonstera/02-firstScript.sql @@ -0,0 +1,3 @@ +ALTER TABLE vn.vehicle + MODIFY COLUMN typeFk enum('car','van','truck','trailer','tug','dolly','trailerLink') + CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT 'van' NOT NULL; From 845ce8d6d86c1c486d6169a7b110e1da92de579f Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 13 Feb 2025 14:36:09 +0100 Subject: [PATCH 5/6] feat: refs #8227 Minor changes --- .../vn/triggers/roadmapStop_beforeInsert.sql | 20 ++++++++++++------- .../vn/triggers/roadmapStop_beforeUpdate.sql | 1 - 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql index 012702f3ed..5d83d653bd 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -17,16 +17,22 @@ BEGIN END IF; END IF; - IF NEW.roadmapFk IS NOT NULL AND NEW.eta IS NOT NULL THEN - SELECT eta INTO vRoadmapEta - FROM roadmap - WHERE id = NEW.roadmapFk; + IF @roadmapTriggerIsActive IS NULL THEN + SET @roadmapTriggerIsActive = TRUE; - IF vRoadmapEta < NEW.eta OR vRoadmapEta IS NULL THEN - UPDATE roadmap - SET eta = NEW.eta + IF NEW.roadmapFk IS NOT NULL AND NEW.eta IS NOT NULL THEN + SELECT eta INTO vRoadmapEta + FROM roadmap WHERE id = NEW.roadmapFk; + + IF vRoadmapEta < NEW.eta OR vRoadmapEta IS NULL THEN + UPDATE roadmap + SET eta = NEW.eta + WHERE id = NEW.roadmapFk; + END IF; END IF; + + SET @roadmapTriggerIsActive = NULL; END IF; END$$ 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 93c44b042b..e7cf33866b 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -42,7 +42,6 @@ BEGIN END IF; SET @roadmapTriggerIsActive = NULL; - END IF; END IF; END$$ From d6f08d7e27e843328fed6e543e162a53c8ece291 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 14 Feb 2025 10:04:04 +0100 Subject: [PATCH 6/6] feat: refs #8227 update roadmap triggers and views, remove obsolete trigger and column --- db/dump/fixtures.before.sql | 8 ++--- .../vn/triggers/roadmapStop_beforeDelete.sql | 26 ---------------- .../vn/triggers/roadmapStop_beforeInsert.sql | 20 ------------ .../vn/triggers/roadmapStop_beforeUpdate.sql | 31 +------------------ .../vn/triggers/roadmap_beforeUpdate.sql | 22 +++++-------- db/routines/vn/views/roadmapEta.sql | 8 +++++ .../11436-bronzeMonstera/01-firstScript.sql | 1 - .../11436-bronzeMonstera/03-firstScript.sql | 1 + 8 files changed, 21 insertions(+), 96 deletions(-) delete mode 100644 db/routines/vn/triggers/roadmapStop_beforeDelete.sql create mode 100644 db/routines/vn/views/roadmapEta.sql create mode 100644 db/versions/11436-bronzeMonstera/03-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 9f632383b1..308a2554fc 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -2754,11 +2754,11 @@ INSERT INTO `vn`.`roadmapAddress` (`addressFk`) (3), (4); -INSERT INTO `vn`.`roadmap` (`id`, `name`, `tractorPlate`, `trailerPlate`, `phone`, `supplierFk`, `etd`, `eta`, `observations`, `editorFk`, `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(), 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'); + (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 3 DAY), 'observations...', 2, 25, 'Driverman'); INSERT INTO `vn`.`roadmapStop` (`id`, `roadmapFk`, `roadmapAddressFk`, `eta`, `description`, `editorFk`) VALUES diff --git a/db/routines/vn/triggers/roadmapStop_beforeDelete.sql b/db/routines/vn/triggers/roadmapStop_beforeDelete.sql deleted file mode 100644 index f0faeb8bef..0000000000 --- a/db/routines/vn/triggers/roadmapStop_beforeDelete.sql +++ /dev/null @@ -1,26 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeDelete` - BEFORE DELETE ON `roadmapStop` - FOR EACH ROW -BEGIN - DECLARE vMaxEta DATETIME; - DECLARE vRoadmapEta DATETIME; - - IF OLD.roadmapFk IS NOT NULL THEN - SELECT MAX(eta) INTO vMaxEta - FROM roadmapStop - WHERE roadmapFk = OLD.roadmapFk - AND id <> OLD.id; - - SELECT eta INTO vRoadmapEta - FROM roadmap - WHERE id = OLD.roadmapFk; - - IF vMaxEta <> vRoadmapEta OR vMaxEta IS NULL THEN - UPDATE roadmap - SET eta = vMaxEta - WHERE id = OLD.roadmapFk; - END IF; - END IF; -END$$ -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 5d83d653bd..2c2a03d866 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeInsert.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeInsert.sql @@ -3,8 +3,6 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeInser BEFORE INSERT ON `roadmapStop` FOR EACH ROW BEGIN - DECLARE vRoadmapEta DATETIME; - SET NEW.editorFk = account.myUser_getId(); IF NEW.description IS NOT NULL THEN @@ -16,23 +14,5 @@ BEGIN CALL util.throw('Departure time can not be after arrival time'); END IF; END IF; - - IF @roadmapTriggerIsActive IS NULL THEN - SET @roadmapTriggerIsActive = TRUE; - - IF NEW.roadmapFk IS NOT NULL AND NEW.eta IS NOT NULL THEN - SELECT eta INTO vRoadmapEta - FROM roadmap - WHERE id = NEW.roadmapFk; - - IF vRoadmapEta < NEW.eta OR vRoadmapEta IS NULL THEN - UPDATE roadmap - SET eta = NEW.eta - WHERE id = NEW.roadmapFk; - END IF; - END IF; - - SET @roadmapTriggerIsActive = NULL; - END IF; END$$ 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 e7cf33866b..9115b972a0 100644 --- a/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmapStop_beforeUpdate.sql @@ -3,46 +3,17 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`roadmapStop_beforeUpdat BEFORE UPDATE ON `roadmapStop` FOR EACH ROW BEGIN - DECLARE vMaxEta DATETIME; - DECLARE vCurrentEta DATETIME; - SET NEW.editorFk = account.myUser_getId(); 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)) THEN + IF NOT (NEW.roadmapFk <=> OLD.roadmapFk) 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'); END IF; - - IF @roadmapTriggerIsActive IS NULL THEN - SET @roadmapTriggerIsActive = TRUE; - - SELECT MAX(eta) INTO vMaxEta - FROM roadmapStop - WHERE roadmapFk = NEW.roadmapFk - AND id <> OLD.id; - - IF vMaxEta < NEW.eta OR vMaxEta IS NULL THEN - SET vMaxEta = NEW.eta; - END IF; - - SELECT eta INTO vCurrentEta - FROM roadmap - WHERE id = NEW.roadmapFk; - - IF (vMaxEta <> vCurrentEta OR vMaxEta IS NULL) OR vMaxEta IS NOT NULL THEN - UPDATE roadmap - SET eta = vMaxEta - WHERE id = NEW.roadmapFk; - END IF; - - SET @roadmapTriggerIsActive = NULL; - END IF; 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 b5757e5191..ff6957f0c0 100644 --- a/db/routines/vn/triggers/roadmap_beforeUpdate.sql +++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql @@ -40,22 +40,14 @@ BEGIN WHERE w.id = NEW.driverChangeFk); END IF; - IF @roadmapTriggerIsActive IS NULL THEN - SET @roadmapTriggerIsActive = TRUE; - - IF NOT (NEW.etd <=> OLD.etd) THEN - SET vSeconds = TIME_TO_SEC(TIMEDIFF(NEW.etd, OLD.etd)); - - IF vSeconds <> 0 THEN - UPDATE roadmapStop - SET eta = eta + INTERVAL vSeconds SECOND - WHERE roadmapFk = NEW.id; - - SET NEW.eta = NEW.eta + INTERVAL vSeconds SECOND; - END IF; + IF NOT (NEW.etd <=> OLD.etd) THEN + SET vSeconds = TIME_TO_SEC(TIMEDIFF(NEW.etd, OLD.etd)); + + IF vSeconds <> 0 THEN + UPDATE roadmapStop + SET eta = eta + INTERVAL vSeconds SECOND + WHERE roadmapFk = NEW.id; END IF; - - SET @roadmapTriggerIsActive = NULL; END IF; END$$ DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/views/roadmapEta.sql b/db/routines/vn/views/roadmapEta.sql new file mode 100644 index 0000000000..dcf2afaf8a --- /dev/null +++ b/db/routines/vn/views/roadmapEta.sql @@ -0,0 +1,8 @@ +CREATE OR REPLACE DEFINER=`vn`@`localhost` + SQL SECURITY DEFINER + VIEW `vn`.`roadmapEta` +AS SELECT `roadmapFk` AS id, + MAX(`eta`) AS `eta` +FROM `vn`.`roadmapStop` +WHERE `roadmapFk` IS NOT NULL +GROUP BY `roadmapFk`; \ No newline at end of file diff --git a/db/versions/11436-bronzeMonstera/01-firstScript.sql b/db/versions/11436-bronzeMonstera/01-firstScript.sql index 6b3ce86329..d809f75b1c 100644 --- a/db/versions/11436-bronzeMonstera/01-firstScript.sql +++ b/db/versions/11436-bronzeMonstera/01-firstScript.sql @@ -1,4 +1,3 @@ ALTER TABLE vn.volumeConfig ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; GRANT UPDATE (palletM3) ON vn.volumeConfig TO deliveryBoss; -GRANT EXECUTE ON FUNCTION vn.getTimeBetweenRoadmapAddresses TO deliveryBoss; diff --git a/db/versions/11436-bronzeMonstera/03-firstScript.sql b/db/versions/11436-bronzeMonstera/03-firstScript.sql new file mode 100644 index 0000000000..efd713c3ad --- /dev/null +++ b/db/versions/11436-bronzeMonstera/03-firstScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.roadmap DROP COLUMN eta;