80 lines
2.0 KiB
MySQL
80 lines
2.0 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`ticketPositionInPath`(vTicketId INT)
|
||
|
RETURNS varchar(10) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
||
|
DETERMINISTIC
|
||
|
BEGIN
|
||
|
|
||
|
DECLARE vRestTicketsMaxOrder INT;
|
||
|
DECLARE vRestTicketsMinOrder INT;
|
||
|
DECLARE vRestTicketsPacking INT;
|
||
|
DECLARE vMyProductionOrder INT;
|
||
|
DECLARE vPosition VARCHAR(10) DEFAULT 'MID';
|
||
|
DECLARE vMyPath INT;
|
||
|
DECLARE vMyWarehouse INT;
|
||
|
DECLARE PACKING_ORDER INT;
|
||
|
DECLARE vExpeditionsCount INT;
|
||
|
DECLARE vIsValenciaPath BOOLEAN DEFAULT FALSE;
|
||
|
|
||
|
SELECT `order`
|
||
|
INTO PACKING_ORDER
|
||
|
FROM state
|
||
|
WHERE code = 'PACKING';
|
||
|
|
||
|
SELECT t.routeFk, t.warehouseFk, IFNULL(ts.productionOrder,0)
|
||
|
INTO vMyPath, vMyWarehouse, vMyProductionOrder
|
||
|
FROM ticket t
|
||
|
LEFT JOIN ticketState ts on ts.ticketFk = t.id
|
||
|
WHERE t.id = vTicketId;
|
||
|
|
||
|
SELECT (ag.`name` = 'VN_VALENCIA')
|
||
|
INTO vIsValenciaPath
|
||
|
FROM vn2008.Rutas r
|
||
|
JOIN vn2008.Agencias a on a.Id_Agencia = r.Id_Agencia
|
||
|
JOIN vn2008.agency ag on ag.agency_id = a.agency_id
|
||
|
WHERE r.Id_Ruta = vMyPath;
|
||
|
|
||
|
IF vIsValenciaPath THEN -- Rutas Valencia
|
||
|
|
||
|
SELECT COUNT(*)
|
||
|
INTO vExpeditionsCount
|
||
|
FROM expedition e
|
||
|
JOIN ticket t ON t.id = e.ticketFk
|
||
|
WHERE t.routeFk = vMyPath;
|
||
|
|
||
|
SELECT MAX(ts.productionOrder), MIN(ts.productionOrder)
|
||
|
INTO vRestTicketsMaxOrder, vRestTicketsMinOrder
|
||
|
FROM ticket t
|
||
|
LEFT JOIN ticketState ts on t.id = ts.ticketFk
|
||
|
WHERE t.routeFk = vMyPath
|
||
|
AND t.warehouseFk = vMyWarehouse
|
||
|
AND t.id != vTicketid;
|
||
|
|
||
|
SELECT COUNT(*)
|
||
|
INTO vRestTicketsPacking
|
||
|
FROM ticket t
|
||
|
LEFT JOIN ticketState ts on t.id = ts.ticketFk
|
||
|
WHERE ts.productionOrder = PACKING_ORDER
|
||
|
AND t.routeFk = vMyPath
|
||
|
AND t.warehouseFk = vMyWarehouse
|
||
|
AND t.id != vTicketid;
|
||
|
|
||
|
IF vExpeditionsCount = 1 THEN
|
||
|
SET vPosition = 'FIRST';
|
||
|
ELSEIF vRestTicketsMinOrder > PACKING_ORDER THEN
|
||
|
SET vPosition = 'LAST';
|
||
|
ELSEIF vRestTicketsPacking THEN
|
||
|
SET vPosition = 'SHARED';
|
||
|
ELSE
|
||
|
SET vPosition = 'MID';
|
||
|
END IF;
|
||
|
|
||
|
ELSE
|
||
|
SET vPosition = 'MID';
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
RETURN vPosition;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|