salix/db/routines/srt/procedures/expedition_in.sql

62 lines
1.5 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_in`(vBufferFk INT, OUT vExpeditionFk INT)
proc:BEGIN
/**
* Ha entrado una caja en un buffer, por la zona de descarga.
*
* @param vBufferFk Identificador de srt.buffer
*
* @return vExpeditionFk Identificador de srt.expedition *
*/
DECLARE vMaxPosition INT;
DECLARE vIsBufferFull BOOL;
DECLARE vBufferTypeFk INT;
DECLARE vBufferStateFk INT;
SELECT el.expeditionFk INTO vExpeditionFk
FROM srt.expeditionLoading el
WHERE el.bufferFk = vBufferFk
ORDER BY id
LIMIT 1;
IF vExpeditionFk THEN
DELETE FROM srt.expeditionLoading
WHERE expeditionFk = vExpeditionFk;
-- SET vExpeditionFk = srt.expedition_check(vExpeditionFk);
INSERT INTO srt.expeditionLog (expeditionFk, bufferFk, `action`)
VALUES(vExpeditionFk, vBufferFk, 'IN');
SELECT MAX(e.position) INTO vMaxPosition
FROM srt.expedition e
WHERE e.bufferFk = vBufferFk;
UPDATE srt.expedition e
JOIN srt.expeditionState es ON es.description = 'STORED'
SET e.bufferFk = vBufferFk,
e.`position` = IFNULL(vMaxPosition,0) + 1,
e.stateFk = es.id
WHERE e.id = vExpeditionFk;
SELECT bfl.freeLength < c.freeLength * 2 INTO vIsBufferFull
FROM srt.bufferFreeLength bfl
JOIN srt.config c
WHERE bfl.bufferFk = vBufferFk;
IF vIsBufferFull THEN
CALL srt.buffer_setStateType(vBufferFk, 'FREE','ACCUMULATION');
END IF;
END IF;
END$$
DELIMITER ;