2024-01-15 11:31:03 +00:00
|
|
|
DELIMITER $$
|
2025-02-12 06:57:31 +00:00
|
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyOut_sync`(vSelf INT)
|
2024-01-15 11:31:03 +00:00
|
|
|
BEGIN
|
|
|
|
/**
|
2025-02-14 09:21:02 +00:00
|
|
|
* Attaches a buyOut with available buylots.
|
2024-01-15 11:31:03 +00:00
|
|
|
*
|
2025-02-14 09:21:02 +00:00
|
|
|
* @param vSelf The buyOut reference
|
2024-01-15 11:31:03 +00:00
|
|
|
*/
|
|
|
|
DECLARE vDated DATETIME;
|
2024-04-08 07:11:40 +00:00
|
|
|
DECLARE vItem INT;
|
2024-01-15 11:31:03 +00:00
|
|
|
DECLARE vWarehouse INT;
|
|
|
|
DECLARE vLack INT;
|
|
|
|
DECLARE vSupplied INT;
|
|
|
|
DECLARE vSuppliedFromRequest INT;
|
2025-02-14 09:21:02 +00:00
|
|
|
DECLARE vBuyLotFk INT;
|
2024-01-15 11:31:03 +00:00
|
|
|
DECLARE vAvailable INT;
|
|
|
|
DECLARE vHasPicks BOOL;
|
|
|
|
DECLARE vDone BOOL;
|
|
|
|
|
2025-02-14 09:21:02 +00:00
|
|
|
DECLARE vBuyLots CURSOR FOR
|
2024-01-15 11:31:03 +00:00
|
|
|
SELECT id, available, available < quantity
|
2025-02-14 09:21:02 +00:00
|
|
|
FROM buylot
|
2024-01-15 11:31:03 +00:00
|
|
|
WHERE warehouseFk = vWarehouse
|
2024-04-08 07:11:40 +00:00
|
|
|
AND itemFk = vItem
|
2024-01-15 11:31:03 +00:00
|
|
|
AND dated <= vDated
|
|
|
|
AND (expired IS NULL OR expired > vDated)
|
|
|
|
ORDER BY dated;
|
|
|
|
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
|
|
SET vDone = TRUE;
|
|
|
|
|
|
|
|
SELECT warehouseFk, itemFk, dated, lack
|
|
|
|
INTO vWarehouse, vItem, vDated, vLack
|
2025-02-14 09:21:02 +00:00
|
|
|
FROM buyOut
|
2024-01-15 11:31:03 +00:00
|
|
|
WHERE id = vSelf;
|
|
|
|
|
2025-02-14 09:21:02 +00:00
|
|
|
OPEN vBuyLots;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
myLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
2025-02-14 09:21:02 +00:00
|
|
|
FETCH vBuyLots INTO vBuyLotFk, vAvailable, vHasPicks;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
SET vSupplied = LEAST(vLack, vAvailable);
|
|
|
|
|
|
|
|
IF vSupplied > 0 THEN
|
|
|
|
SET vLack = vLack - vSupplied;
|
2025-02-14 09:21:02 +00:00
|
|
|
UPDATE buylot
|
2024-01-15 11:31:03 +00:00
|
|
|
SET available = available - vSupplied
|
2025-02-14 09:21:02 +00:00
|
|
|
WHERE id = vBuyLotFk;
|
2024-01-15 11:31:03 +00:00
|
|
|
END IF;
|
|
|
|
|
|
|
|
IF vHasPicks AND vLack > 0 THEN
|
2025-02-14 09:21:02 +00:00
|
|
|
CALL buyLot_requestQuantity(vBuyLotFk, vLack, vDated, vSuppliedFromRequest);
|
2024-01-15 11:31:03 +00:00
|
|
|
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
|
|
|
SET vLack = vLack - vSuppliedFromRequest;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
IF vSupplied > 0 THEN
|
2025-02-14 09:21:02 +00:00
|
|
|
CALL buyLot_addPick(vBuyLotFk, vSelf, vSupplied);
|
2024-01-15 11:31:03 +00:00
|
|
|
END IF;
|
|
|
|
|
|
|
|
IF vLack = 0 THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
END LOOP;
|
|
|
|
|
2025-02-14 09:21:02 +00:00
|
|
|
CLOSE vBuyLots;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
2025-02-14 09:21:02 +00:00
|
|
|
UPDATE buyOut
|
2024-01-15 11:31:03 +00:00
|
|
|
SET isSync = TRUE,
|
|
|
|
lack = vLack
|
|
|
|
WHERE id = vSelf;
|
|
|
|
END$$
|
|
|
|
DELIMITER ;
|