2024-01-15 11:31:03 +00:00
|
|
|
DELIMITER $$
|
2025-02-19 13:13:54 +00:00
|
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyLot_requestQuantity`(
|
2024-01-15 11:31:03 +00:00
|
|
|
vSelf INT,
|
2024-04-08 07:11:40 +00:00
|
|
|
vRequested INT,
|
|
|
|
vDated DATETIME,
|
2025-02-19 11:56:42 +00:00
|
|
|
vOutFk INT,
|
2024-04-08 07:11:40 +00:00
|
|
|
OUT vSupplied INT)
|
2024-01-15 11:31:03 +00:00
|
|
|
BEGIN
|
|
|
|
/**
|
2025-02-14 09:21:02 +00:00
|
|
|
* Disassociates lot picks after the given date until the demanded quantity is
|
|
|
|
* satisfied.
|
2024-01-15 11:31:03 +00:00
|
|
|
*
|
2025-02-14 09:21:02 +00:00
|
|
|
* @param vSelf The buyLot reference
|
2024-01-15 11:31:03 +00:00
|
|
|
* @param vRequested The requested quantity
|
2025-02-19 11:56:42 +00:00
|
|
|
* @param vDate The starting date for the associated outs
|
|
|
|
* @param vOutFk The if of requesting out
|
2024-01-15 11:31:03 +00:00
|
|
|
* @param vSupplied The supplied quantity
|
|
|
|
*/
|
2025-02-18 14:58:38 +00:00
|
|
|
DECLARE vPickFk INT;
|
2025-02-19 11:56:42 +00:00
|
|
|
DECLARE vPickOutFk INT;
|
2024-01-15 11:31:03 +00:00
|
|
|
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-24 12:24:41 +00:00
|
|
|
WHERE p.lotFk = vSelf
|
2025-02-19 11:56:42 +00:00
|
|
|
AND (o.dated, o.outFk) > (vDated, vOutFk)
|
|
|
|
ORDER BY o.dated DESC, o.created DESC, o.outFk DESC;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
|
|
SET vDone = TRUE;
|
2024-04-08 07:11:40 +00:00
|
|
|
|
2024-01-15 11:31:03 +00:00
|
|
|
SET vSupplied = 0;
|
|
|
|
|
|
|
|
OPEN vPicks;
|
|
|
|
|
|
|
|
myLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
2025-02-19 11:56:42 +00:00
|
|
|
FETCH vPicks INTO vPickFk, vPickOutFk, vPickQuantity;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
|
|
|
SET vSupplied = vSupplied + vPickGranted;
|
2025-02-19 13:50:15 +00:00
|
|
|
CALL buyPick_remove(vPickFk, vPickGranted, vPickQuantity);
|
2024-04-08 07:11:40 +00:00
|
|
|
|
2025-02-14 09:21:02 +00:00
|
|
|
UPDATE buyOut
|
2024-01-15 11:31:03 +00:00
|
|
|
SET isSync = FALSE,
|
|
|
|
lack = lack + vPickGranted
|
2025-02-19 11:56:42 +00:00
|
|
|
WHERE outFk = vPickOutFk;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
IF vSupplied >= vRequested THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
END LOOP;
|
|
|
|
|
|
|
|
CLOSE vPicks;
|
|
|
|
END$$
|
|
|
|
DELIMITER ;
|