salix/db/routines/stock/procedures/buyLot_requestQuantity.sql

63 lines
1.4 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyLot_requestQuantity`(
vSelf INT,
vRequested INT,
vDated DATETIME,
OUT vSupplied INT)
BEGIN
/**
* Disassociates lot picks after the given date until the demanded quantity is
* satisfied.
*
* @param vSelf The buyLot reference
* @param vRequested The requested quantity
* @param vDate The starting date for the associated buyOuts
* @param vSupplied The supplied quantity
*/
2025-02-18 14:58:38 +00:00
DECLARE vPickFk INT;
DECLARE vOutFk INT;
DECLARE vPickQuantity INT;
DECLARE vPickGranted INT;
DECLARE vDone BOOL;
DECLARE vPicks CURSOR FOR
2025-02-18 18:34:38 +00:00
SELECT p.id, o.outFk, p.quantity
2025-02-18 14:58:38 +00:00
FROM buyPick p
2025-02-18 18:34:38 +00:00
JOIN buyOut o USING(outFk)
2025-02-18 14:58:38 +00:00
WHERE p.buyFk = vSelf
AND o.dated > vDated
ORDER BY o.dated DESC, o.created DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
SET vSupplied = 0;
OPEN vPicks;
myLoop: LOOP
SET vDone = FALSE;
2025-02-18 14:58:38 +00:00
FETCH vPicks INTO vPickFk, vOutFk, vPickQuantity;
IF vDone THEN
LEAVE myLoop;
END IF;
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
SET vSupplied = vSupplied + vPickGranted;
2025-02-18 14:58:38 +00:00
CALL buyLot_removePick(vPickFk, vPickGranted, vPickQuantity);
UPDATE buyOut
SET isSync = FALSE,
lack = lack + vPickGranted
2025-02-18 18:34:38 +00:00
WHERE outFk = vOutFk;
IF vSupplied >= vRequested THEN
LEAVE myLoop;
END IF;
END LOOP;
CLOSE vPicks;
END$$
DELIMITER ;