65 lines
1.4 KiB
MySQL
65 lines
1.4 KiB
MySQL
|
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 ;
|