51 lines
1.3 KiB
MySQL
51 lines
1.3 KiB
MySQL
|
|
||
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addByCollection`(
|
||
|
vCollectionFk INT(11)
|
||
|
)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Guarda la ubicación para el contenido de una colección
|
||
|
*
|
||
|
* @param vCollectionFk Identificador de collection
|
||
|
*/
|
||
|
DECLARE vDone BOOL DEFAULT FALSE;
|
||
|
DECLARE vSaleFk INT;
|
||
|
DECLARE vSales CURSOR FOR
|
||
|
WITH sales AS (
|
||
|
SELECT s.id saleFk, s.quantity, SUM(IFNULL(iss.quantity, 0)) quantityReserved
|
||
|
FROM vn.ticketCollection tc
|
||
|
JOIN vn.sale s ON s.ticketFk = tc.ticketFk
|
||
|
LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
|
||
|
WHERE tc.collectionFk = vCollectionFk
|
||
|
GROUP BY s.id
|
||
|
HAVING quantity <> quantityReserved
|
||
|
), trackedSales AS (
|
||
|
SELECT sa.saleFk
|
||
|
FROM sales sa
|
||
|
JOIN vn.saleTracking st ON st.saleFk = sa.saleFk
|
||
|
JOIN vn.`state` s ON s.id = st.stateFk
|
||
|
WHERE st.isChecked
|
||
|
AND s.semaphore = 1
|
||
|
GROUP BY sa.saleFk
|
||
|
) SELECT s.saleFk
|
||
|
FROM sales s
|
||
|
LEFT JOIN trackedSales ts ON ts.saleFk = s.saleFk
|
||
|
WHERE ts.saleFk IS NULL;
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||
|
|
||
|
OPEN vSales;
|
||
|
l: LOOP
|
||
|
SET vDone = FALSE;
|
||
|
FETCH vSales INTO vSaleFk;
|
||
|
|
||
|
IF vDone THEN
|
||
|
LEAVE l;
|
||
|
END IF;
|
||
|
|
||
|
CALL itemShelvingSale_addBySale(vSaleFk);
|
||
|
END LOOP;
|
||
|
CLOSE vSales;
|
||
|
END$$
|
||
|
DELIMITER ;
|