salix/db/routines/vn/procedures/collection_make.sql

69 lines
1.3 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn-admin`@`localhost` PROCEDURE `vn`.`collection_make`()
proc:BEGIN
/**
* Genera colecciones de tickets sin asignar trabajador a partir de la tabla
* vn.collectionHotbed.
*/
DECLARE vUserFk INT;
DECLARE vCounter INT;
DECLARE vMaxCollectionWithoutUser INT;
DECLARE vHasEnoughFreeCollections BOOL;
DECLARE vDone INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR
SELECT DISTINCT userFk
FROM vn.collectionHotbed;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
SELECT maxCollectionWithoutUser
INTO vMaxCollectionWithoutUser
FROM vn.productionConfig pc;
SELECT (vMaxCollectionWithoutUser - COUNT(*)) <= 0
INTO vHasEnoughFreeCollections
FROM vn.collection c
JOIN vn.operator o
ON o.numberOfWagons = c.wagons
AND o.trainFk = c.trainFk
AND o.itemPackingTypeFk = c.itemPackingTypeFk
WHERE c.workerFk IS NULL
AND o.workerFk = vUserFk;
IF vHasEnoughFreeCollections THEN
LEAVE proc;
END IF;
OPEN cur1;
read_loop: LOOP
SET vDone = FALSE;
FETCH cur1 INTO vUserFk;
IF vDone THEN
LEAVE read_loop;
END IF;
SET vCounter = vMaxCollectionWithoutUser;
WHILE vCounter > 0 DO
SET vCounter = vCounter - 1;
CALL vn.collection_new(vUserFk, @vCollectionFk);
END WHILE;
DELETE
FROM vn.collectionHotbed
WHERE userFk = vUserFk;
END LOOP;
CLOSE cur1;
END$$
DELIMITER ;