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_sync`(vSelf INT)
|
2024-01-15 11:31:03 +00:00
|
|
|
BEGIN
|
|
|
|
/**
|
2025-02-19 16:17:02 +00:00
|
|
|
* Associates a lot with their possible outs, updating it's available.
|
2024-01-15 11:31:03 +00:00
|
|
|
*
|
2025-02-18 14:58:38 +00:00
|
|
|
* @param vSelf The lot id
|
2024-01-15 11:31:03 +00:00
|
|
|
*/
|
|
|
|
DECLARE vDated DATETIME;
|
|
|
|
DECLARE vExpired DATETIME;
|
|
|
|
DECLARE vItem INT;
|
|
|
|
DECLARE vWarehouse INT;
|
|
|
|
DECLARE vQuantity INT;
|
|
|
|
DECLARE vAvailable INT;
|
|
|
|
DECLARE vSupplied INT;
|
|
|
|
DECLARE vSuppliedFromRequest INT;
|
2025-02-18 14:58:38 +00:00
|
|
|
DECLARE vOutFk INT;
|
2024-01-15 11:31:03 +00:00
|
|
|
DECLARE vLack INT;
|
|
|
|
DECLARE vHasPicks BOOL;
|
|
|
|
DECLARE vDone BOOL;
|
|
|
|
|
2025-02-18 14:58:38 +00:00
|
|
|
DECLARE vOuts CURSOR FOR
|
2025-02-18 18:34:38 +00:00
|
|
|
SELECT outFk, lack, lack < quantity
|
2025-02-14 09:21:02 +00:00
|
|
|
FROM buyOut
|
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 (vExpired IS NULL OR dated < vExpired)
|
2025-02-19 11:56:42 +00:00
|
|
|
ORDER BY dated, created, outFk;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
|
|
SET vDone = TRUE;
|
|
|
|
|
|
|
|
SELECT warehouseFk, itemFk, available, quantity, expired, dated
|
|
|
|
INTO vWarehouse, vItem, vAvailable, vQuantity, vExpired, vDated
|
2025-02-18 14:58:38 +00:00
|
|
|
FROM buyLot
|
|
|
|
WHERE buyFk = vSelf;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
IF vAvailable IS NULL THEN
|
|
|
|
SET vAvailable = vQuantity;
|
|
|
|
END IF;
|
|
|
|
|
2025-02-18 14:58:38 +00:00
|
|
|
OPEN vOuts;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
myLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
2025-02-18 14:58:38 +00:00
|
|
|
FETCH vOuts INTO vOutFk, vLack, vHasPicks;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
SET vSupplied = LEAST(vAvailable, vLack);
|
2024-04-08 07:11:40 +00:00
|
|
|
|
|
|
|
IF vSupplied > 0 THEN
|
2024-01-15 11:31:03 +00:00
|
|
|
SET vAvailable = vAvailable - vSupplied;
|
2025-02-14 09:21:02 +00:00
|
|
|
UPDATE buyOut
|
2024-01-15 11:31:03 +00:00
|
|
|
SET lack = lack - vSupplied
|
2025-02-18 18:34:38 +00:00
|
|
|
WHERE outFk = vOutFk;
|
2024-01-15 11:31:03 +00:00
|
|
|
END IF;
|
|
|
|
|
|
|
|
IF vHasPicks AND vAvailable > 0 THEN
|
2025-02-19 11:56:42 +00:00
|
|
|
CALL buyOut_requestQuantity(vOutFk, vAvailable, vDated, vSelf, vSuppliedFromRequest);
|
2024-01-15 11:31:03 +00:00
|
|
|
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
|
|
|
SET vAvailable = vAvailable - vSuppliedFromRequest;
|
|
|
|
END IF;
|
2024-04-08 07:11:40 +00:00
|
|
|
|
|
|
|
IF vSupplied > 0 THEN
|
2025-02-19 13:50:15 +00:00
|
|
|
CALL buyPick_add(vSelf, vOutFk, vSupplied);
|
2024-01-15 11:31:03 +00:00
|
|
|
END IF;
|
|
|
|
|
|
|
|
IF vAvailable <= 0 THEN
|
|
|
|
LEAVE myLoop;
|
|
|
|
END IF;
|
|
|
|
END LOOP;
|
|
|
|
|
2025-02-18 14:58:38 +00:00
|
|
|
CLOSE vOuts;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
2025-02-18 14:58:38 +00:00
|
|
|
UPDATE buyLot
|
2024-01-15 11:31:03 +00:00
|
|
|
SET isSync = TRUE,
|
|
|
|
available = vAvailable
|
2025-02-18 14:58:38 +00:00
|
|
|
WHERE buyFk = vSelf;
|
2024-01-15 11:31:03 +00:00
|
|
|
END$$
|
|
|
|
DELIMITER ;
|