From e9f1e28ac0dcadf5b93848e1623a04d5ed474147 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 24 Jan 2025 11:20:16 +0100 Subject: [PATCH] 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;