#5858 - zoneCollisions #1853

Merged
jsegarra merged 78 commits from 5858-zone_Collisions into dev 2024-03-15 12:36:38 +00:00
7 changed files with 27 additions and 9 deletions
Showing only changes of commit 0a398fdd6c - Show all commits

View File

@ -1,11 +1,11 @@
DELIMITER $$
CREATE EVENT IF NOT EXISTS `zone_getCollisions`
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ENABLE
DO BEGIN
DO BEGIN
CALL `zone_getCollisions`();
-- Desactivar el evento después de ejecutarse
ALTER EVENT `zone_getCollisions` DISABLE;
END$$
DELIMITER;
ALTER EVENT `zone_getCollisions` DISABLE;
END$$
DELIMITER ;

View File

@ -1,5 +1,6 @@
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zoneIncluded_checkCollisions`()
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zone_getCollisions`()
BEGIN
/**
* Calcula si para un mismo codigo postal y dia
@ -78,6 +79,7 @@ BEGIN
GROUP BY z.agencyModeFk, zn.geoFk, zw.warehouseFk
HAVING count(*) > 1;
-- Recojo los datos de la zona que ha dado conflicto
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'zoneFk', zoneFk,
@ -91,6 +93,7 @@ BEGIN
JOIN warehouse w ON w.id = gc.warehouseFk
INTO json_data;
-- Creo un registro de la notificacion 'zone-included' para reportar via email
SELECT util.notification_send(
'zone-included',
JSON_OBJECT('zoneCollisions',json_data),
@ -101,5 +104,5 @@ BEGIN
geoCollision,
tmp.zone,
tmp.zoneNodes;
END ;;
END$$
DELIMITER ;

View File

@ -8,6 +8,8 @@ BEGIN
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
-- Activo el evento 'zone_getCollisions'
jsegarra marked this conversation as resolved Outdated

no ponemos dos saltos de linea nunca

no ponemos dos saltos de linea nunca
UPDATE mysql.event SET status = 1 WHERE name = 'zone_getCollisions';
END$$
DELIMITER ;

View File

@ -4,6 +4,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_beforeIn
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
-- Activo el evento 'zone_getCollisions'
UPDATE mysql.event SET status = 1 WHERE name = 'zone_getCollisions';
END$$
jsegarra marked this conversation as resolved Outdated

estamos generando una dependencia en util de vn.
Util no tiene que conocer vn.
Simplemente crea el schedule que se ejecute todas las noches en vn, ya està.

estamos generando una dependencia en util de vn. Util no tiene que conocer vn. Simplemente crea el schedule que se ejecute todas las noches en vn, ya està.
DELIMITER ;

View File

@ -4,6 +4,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_beforeUp
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
-- Activo el evento 'zone_getCollisions'
UPDATE mysql.event SET status = 1 WHERE name = 'zone_getCollisions';
END$$
DELIMITER ;

View File

@ -0,0 +1,10 @@
INSERT INTO util.notification (id, name,description)
jgallego marked this conversation as resolved Outdated

dile a chatgpt que te cambie esta linea y que quieres usar el last_insert_id de forma que primero insertas y luego ya usas el id otorgado.

dile a chatgpt que te cambie esta linea y que quieres usar el last_insert_id de forma que primero insertas y luego ya usas el id otorgado.

No hace falta ir tan lejos...tonto de mi por no haber revisado el resto del proyecto.

Basta con usar LAST_INSERT_ID()

No hace falta ir tan lejos...tonto de mi por no haber revisado el resto del proyecto. Basta con usar LAST_INSERT_ID()

Revisamos porque esta tabla empieza por 0.
Devuelve 0 LAST_INSERT_ID();

Revisamos porque esta tabla empieza por 0. Devuelve 0 LAST_INSERT_ID();

Solved, he modificado la propiedad auto_increment de la columna id de util.notification

Solved, he modificado la propiedad auto_increment de la columna id de util.notification
VALUES (
(SELECT MAX(id)+1 from util.notification n) , 'zone-included','An email to notify zoneCollisions');
jgallego marked this conversation as resolved Outdated

pongo esto para descartar y que cuando tengas el nuevo pr me puedas pedir revision de nuevo

pongo esto para descartar y que cuando tengas el nuevo pr me puedas pedir revision de nuevo

Corregido: 4994a836c7

Corregido: 4994a836c7119a6c894e3600a78ba71438ecb410
INSERT INTO util.notificationSubscription (notificationFk,userFk)
SELECT id, account.myUser_getId() FROM util.notification WHERE name= "zone-included";
jgallego marked this conversation as resolved Outdated

porque se la añades al usuario system? deberia de ser el que solicita la tarea no?

porque se la añades al usuario system? deberia de ser el que solicita la tarea no?

Es un evento el que dispara el procedure de zone_getCollisions, por tanto no hay usuario que haga la operación manual, si no que es el systema.

Me basé en los datos de producción util.notification where id=6

Si las especificaciones no son las correctas, hay algún sitio donde pueda tomar la referencia?

Es un evento el que dispara el procedure de zone_getCollisions, por tanto no hay usuario que haga la operación manual, si no que es el systema. Me basé en los datos de producción util.notification where id=6 Si las especificaciones no son las correctas, hay algún sitio donde pueda tomar la referencia?

@jgallego Tras juntarme con Pablo, he cambiado el usuario de systema a root, porque por lo que me ha comentado, si el procedimiento se ejecuta en la BD es root y en salix es system

@jgallego Tras juntarme con Pablo, he cambiado el usuario de systema a root, porque por lo que me ha comentado, si el procedimiento se ejecuta en la BD es root y en salix es system
jgallego marked this conversation as resolved Outdated

que es este 100? el usuario 100 en prod es icef...no me cuadra.
Busca la forma de usar codes para no poner numeros.

que es este 100? el usuario 100 en prod es icef...no me cuadra. Busca la forma de usar codes para no poner numeros.

INSERT IGNORE INTO util.notificationSubscription (notificationFk,userFk)
VALUES(
@MaxId, (SELECT id from account.user where name = "system"));

La solución estaba mas abajo

INSERT IGNORE INTO util.notificationSubscription (notificationFk,userFk) VALUES( @MaxId, (SELECT id from `account`.`user` where name = "system")); La solución estaba mas abajo
INSERT INTO util.notificationAcl (notificationFk,roleFk)
SELECT id, (SELECT id from `account`.`role` where name = "system") FROM util.notification WHERE name= "zone-included";

View File

@ -35,7 +35,6 @@ describe('zone deletezone()', () => {
try {
const options = {transaction: tx};
await models.Zone.deleteZone(ctx, zoneId, options);
const updatedZone = await models.Zone.findById(zoneId, null, options);