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

92 lines
1.8 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyLot_refresh`(
2025-02-24 17:05:21 +00:00
`vTable` ENUM('lot', 'entry', 'travel'),
`vId` INT)
BEGIN
2025-02-25 09:49:58 +00:00
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
2025-02-24 17:05:21 +00:00
CREATE OR REPLACE TEMPORARY TABLE tBuyAlive
ENGINE = MEMORY
SELECT
t.id travelFk,
t.landed,
t.landingHour,
t.warehouseInFk,
t.isReceived,
2025-02-18 10:06:41 +00:00
t.isRaid,
e.id entryFk,
b.lotFk,
b.itemFk,
b.life,
2025-02-18 18:34:38 +00:00
b.quantity
FROM tLotStatus ls
JOIN vn.buy b ON b.lotFk = ls.lotFk
JOIN vn.entry e ON e.id = b.entryFk
JOIN vn.travel t ON t.id = e.travelFk
WHERE ls.isIncluded;
2025-02-24 17:05:21 +00:00
START TRANSACTION;
2025-02-24 17:05:21 +00:00
-- Delete excluded/deleted/dead lots
DELETE l FROM buyLot l
JOIN tLotStatus ls USING(lotFk)
WHERE NOT ls.isIncluded;
2025-02-24 17:05:21 +00:00
-- Delete undead lot picks
UPDATE buyOut o
JOIN buyPick p ON p.outFk = o.outFk
JOIN tLotStatus ls ON ls.lotFk = p.lotFk
2025-02-24 17:05:21 +00:00
SET o.isSync = FALSE,
o.lack = o.lack + p.quantity
WHERE ls.isExcluded OR ls.isIncluded;
2025-02-24 17:05:21 +00:00
DELETE p FROM buyPick p
JOIN tLotStatus ls USING(lotFk)
WHERE ls.isExcluded OR ls.isIncluded;
2025-02-24 17:05:21 +00:00
-- Update alive outs
INSERT INTO buyLot (
lotFk,
isSync,
isPicked,
warehouseFk,
itemFk,
dated,
expired,
quantity,
available
)
SELECT
lotFk,
FALSE,
isReceived,
warehouseInFk,
itemFk,
@dated := ADDTIME(landed, IFNULL(landingHour, '00:00:00')),
@dated + INTERVAL life DAY,
quantity,
NULL
2025-02-24 17:05:21 +00:00
FROM tBuyAlive
ON DUPLICATE KEY UPDATE
isSync = VALUES(isSync),
isPicked = VALUES(isPicked),
warehouseFk = VALUES(warehouseFk),
itemFk = VALUES(itemFk),
dated = VALUES(dated),
expired = VALUES(expired),
quantity = VALUES(quantity),
available = VALUES(available);
COMMIT;
2025-02-24 17:05:21 +00:00
DROP TEMPORARY TABLE tBuyAlive;
END$$
DELIMITER ;