146 lines
3.4 KiB
MySQL
146 lines
3.4 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`moving_groupOut`()
|
||
|
proc: BEGIN
|
||
|
|
||
|
DECLARE vDayMinute INT;
|
||
|
DECLARE vRouteFk INT;
|
||
|
DECLARE vBufferToFk INT;
|
||
|
DECLARE vBufferFromFk INT;
|
||
|
DECLARE vBufferGroupFk INT;
|
||
|
DECLARE vDone INT DEFAULT FALSE;
|
||
|
DECLARE cur1 CURSOR FOR
|
||
|
SELECT DISTINCT b.id
|
||
|
FROM srt.buffer b
|
||
|
JOIN srt.bufferState bs ON bs.id = b.stateFk
|
||
|
JOIN srt.bufferType bt ON bt.id = b.typeFk
|
||
|
JOIN srt.bufferGroup bg ON bg.bufferFk = b.id
|
||
|
LEFT JOIN srt.moving m ON m.bufferToFk = b.id
|
||
|
WHERE bs.description = 'FREE'
|
||
|
AND b.isActive
|
||
|
AND bt.typeName = 'STRAPPING';
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||
|
|
||
|
IF (SELECT (isAuto OR isRandomMoving) FROM srt.config) THEN
|
||
|
|
||
|
LEAVE proc;
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
CASE (SELECT groupingMode FROM srt.config)
|
||
|
|
||
|
WHEN 'TRUCK' THEN
|
||
|
|
||
|
SELECT min(ev.dayMinute) INTO vDayMinute
|
||
|
FROM srt.expeditionVolume ev
|
||
|
WHERE ev.isReady
|
||
|
AND ev.dayMinute
|
||
|
AND ev.bufferTruck;
|
||
|
|
||
|
IF vDayMinute THEN
|
||
|
|
||
|
SELECT min(ev.bufferTruck) INTO vBufferToFk
|
||
|
FROM srt.expeditionVolume ev
|
||
|
WHERE ev.dayMinute = vDayMinute;
|
||
|
|
||
|
UPDATE srt.buffer
|
||
|
SET dayMinute = vDayMinute
|
||
|
WHERE id = vBufferToFk;
|
||
|
|
||
|
CALL srt.expedition_groupOut(vDayMinute,vBufferToFk);
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
WHEN 'ROUTE' THEN
|
||
|
|
||
|
SELECT min(rv.dayMinute) INTO vDayMinute
|
||
|
FROM srt.routeVolume rv
|
||
|
LEFT JOIN srt.buffer b ON b.routeFk = rv.routeFk
|
||
|
WHERE rv.isReady
|
||
|
AND rv.dayMinute
|
||
|
AND rv.bufferTruck
|
||
|
AND ISNULL(b.id);
|
||
|
|
||
|
IF vDayMinute THEN
|
||
|
|
||
|
SELECT min(ev.bufferTruck) INTO vBufferToFk
|
||
|
FROM srt.expeditionVolume ev
|
||
|
WHERE ev.dayMinute = vDayMinute;
|
||
|
|
||
|
SELECT rv.routeFk INTO vRouteFk
|
||
|
FROM srt.routeVolume rv
|
||
|
WHERE rv.dayMinute = vDayMinute
|
||
|
AND rv.isReady
|
||
|
ORDER BY dayMinute, cajas DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
UPDATE srt.buffer
|
||
|
SET routeFk = vRouteFk
|
||
|
WHERE id = vBufferToFk;
|
||
|
|
||
|
CALL srt.expedition_routeOut(vRouteFk,vBufferToFk);
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
WHEN 'BUFFER' THEN
|
||
|
|
||
|
SELECT rv.dayMinute, rv.routeBuffer
|
||
|
INTO vDayMinute, vBufferToFk
|
||
|
FROM srt.routeVolume rv
|
||
|
WHERE rv.isReady
|
||
|
AND rv.dayMinute
|
||
|
AND rv.routeBuffer
|
||
|
ORDER BY rv.dayMinute
|
||
|
LIMIT 1;
|
||
|
|
||
|
IF vDayMinute THEN
|
||
|
|
||
|
CALL srt.expedition_bufferOut(vBufferToFk);
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
WHEN 'BUFFERGROUP' THEN
|
||
|
|
||
|
-- En el caso de que haya cajas en buffers auxiliares y los principales esten libres, reenvia cajas
|
||
|
|
||
|
OPEN cur1;
|
||
|
|
||
|
read_loop: LOOP
|
||
|
|
||
|
FETCH cur1 INTO vBufferToFk;
|
||
|
|
||
|
IF vDone THEN
|
||
|
LEAVE read_loop;
|
||
|
END IF;
|
||
|
|
||
|
SELECT bg.`group` INTO vBufferGroupFk
|
||
|
FROM srt.bufferGroup bg
|
||
|
WHERE bg.bufferFk = vBufferToFk;
|
||
|
|
||
|
SELECT MAX(e.bufferFk) INTO vBufferFromFk
|
||
|
FROM srt.expedition e
|
||
|
JOIN srt.expeditionState es ON es.id = e.stateFk
|
||
|
JOIN srt.bufferGroup bg ON bg.bufferFk = e.bufferFk
|
||
|
LEFT JOIN srt.moving m ON m.bufferToFk = e.bufferFk
|
||
|
LEFT JOIN srt.moving mo ON mo.bufferFromFk = e.bufferFk
|
||
|
JOIN srt.buffer b on b.id = e.bufferFk
|
||
|
JOIN srt.bufferType bt on bt.id = b.typeFk
|
||
|
WHERE bg.`group` = vBufferGroupFk
|
||
|
AND ISNULL(m.bufferToFk)
|
||
|
AND ISNULL(mo.id)
|
||
|
AND bt.typeName = 'ACCUMULATION';
|
||
|
IF vBufferFromFk THEN
|
||
|
|
||
|
CALL srt.buffer_giveBack(vBufferFromFk);
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
END LOOP;
|
||
|
|
||
|
CLOSE cur1;
|
||
|
|
||
|
END CASE;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|