65 lines
1.4 KiB
SQL
65 lines
1.4 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_relocate`(vExpeditionFk INT, vBufferToFk INT)
|
|
proc:BEGIN
|
|
|
|
/**
|
|
* Asigna buffer destino nuevo para una expedición
|
|
*
|
|
* @param vExpeditionFk Identificacion de srt.expedition
|
|
*
|
|
* @param vBufferToFk Identificador de srt.buffer
|
|
*
|
|
*/
|
|
|
|
DECLARE vBufferFromFk INT;
|
|
|
|
START TRANSACTION;
|
|
|
|
IF (SELECT COUNT(*) FROM srt.moving WHERE expeditionFk = vExpeditionFk) THEN
|
|
|
|
LEAVE proc;
|
|
|
|
END IF;
|
|
|
|
SELECT e.bufferFk INTO vBufferFromFk
|
|
FROM srt.expedition e
|
|
WHERE e.id = vExpeditionFk;
|
|
|
|
SET vBufferToFk = IFNULL(vBufferToFk, IFNULL(srt.bufferPool_get(), `srt`.`buffer_get`(vExpeditionFk)));
|
|
|
|
IF vBufferFromFk = vBufferToFk THEN
|
|
|
|
LEAVE proc;
|
|
|
|
END IF;
|
|
|
|
REPLACE srt.moving (expeditionFk,
|
|
bufferFromFk,
|
|
bufferToFk,
|
|
stateFk)
|
|
SELECT e.id,
|
|
e.bufferFk,
|
|
vBufferToFk,
|
|
ms.id
|
|
FROM srt.expedition e
|
|
JOIN srt.movingState ms ON ms.description = 'NEW'
|
|
LEFT JOIN srt.moving m ON m.expeditionFk
|
|
WHERE e.id = vExpeditionFk;
|
|
|
|
UPDATE srt.expedition e
|
|
JOIN srt.expeditionState es on es.description = 'ENTERING'
|
|
JOIN srt.moving m ON m.expeditionFk = e.id
|
|
SET e.stateFk = es.id
|
|
WHERE e.id = vExpeditionFk;
|
|
|
|
COMMIT;
|
|
|
|
IF srt.buffer_isFull(vBufferToFk) THEN
|
|
|
|
CALL srt.buffer_setStateType(vBufferToFk,'FULL', NULL);
|
|
|
|
END IF;
|
|
|
|
END$$
|
|
DELIMITER ;
|