71 lines
1.9 KiB
SQL
71 lines
1.9 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `srt`.`buffer_get`(vExpeditionFk INT)
|
|
RETURNS int(11)
|
|
NOT DETERMINISTIC
|
|
READS SQL DATA
|
|
BEGIN
|
|
/**
|
|
* Devuelve el buffer destino para una expedición
|
|
*
|
|
* @param vExpeditionFk Identificador de srt.expedition
|
|
* @return Identificador de srt.buffer
|
|
*/
|
|
DECLARE vBufferToFk INT;
|
|
DECLARE vBufferFromFk INT;
|
|
DECLARE vBufferGroup INT;
|
|
DECLARE vBufferStrapping INT;
|
|
|
|
SELECT IFNULL(rm.bufferFk, c.bufferDefault), IFNULL(e.bufferFk,0)
|
|
INTO vBufferToFk, vBufferFromFk
|
|
FROM srt.expedition e
|
|
LEFT JOIN vn.expedition e2 ON e2.id = e.id
|
|
LEFT JOIN vn.ticket t ON t.id = e2.ticketFk
|
|
LEFT JOIN vn.routesMonitor rm ON rm.routeFk = t.routeFk
|
|
JOIN srt.config c
|
|
WHERE e.id = vExpeditionFk;
|
|
|
|
SELECT `group` INTO vBufferGroup
|
|
FROM srt.bufferGroup
|
|
WHERE bufferFk = vBufferToFk;
|
|
|
|
SELECT bg.bufferFk
|
|
INTO vBufferStrapping
|
|
FROM srt.bufferGroup bg
|
|
JOIN srt.buffer b ON b.id = bg.bufferFk
|
|
JOIN srt.bufferType bt ON bt.id = b.typeFk
|
|
WHERE bt.typeName = 'STRAPPING'
|
|
AND bg.`group` = vBufferGroup
|
|
LIMIT 1;
|
|
|
|
IF vBufferGroup THEN
|
|
SELECT sub.bufferFk INTO vBufferToFk
|
|
FROM (
|
|
SELECT b.id bufferFk,
|
|
count(DISTINCT e.id) expeditions,
|
|
bs.description,
|
|
bt.typeName,
|
|
b.motors
|
|
FROM srt.buffer b
|
|
JOIN srt.bufferType bt ON bt.id = b.typeFk
|
|
JOIN srt.bufferState bs ON bs.id = b.stateFk
|
|
JOIN srt.bufferGroup bg ON bg.bufferFk = b.id
|
|
LEFT JOIN srt.expedition e ON e.bufferFk = b.id
|
|
LEFT JOIN srt.moving m ON m.bufferFromFk = b.id
|
|
WHERE bg.`group` = vBufferGroup
|
|
AND b.id != vBufferFromFk
|
|
AND bt.isTarget
|
|
AND m.id IS NULL
|
|
GROUP BY b.id) sub
|
|
JOIN srt.config c
|
|
ORDER BY (sub.description = 'FREE') DESC,
|
|
(sub.typeName = ('STRAPPING')) DESC,
|
|
IF(c.isBalanced , sub.expeditions, -sub.expeditions),
|
|
ABS(sub.bufferFk - vBufferStrapping)
|
|
LIMIT 1;
|
|
END IF;
|
|
|
|
RETURN vBufferToFk;
|
|
|
|
END$$
|
|
DELIMITER ;
|