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 ;