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

87 lines
1.6 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refresh`(
2025-02-24 17:05:21 +00:00
`vTable` VARCHAR(255),
`vId` INT,
`vSource` VARCHAR(255))
BEGIN
2025-02-24 17:05:21 +00:00
DECLARE vLotExists INT;
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
IF vTable = 'lot' THEN
SELECT COUNT(*) > 0 INTO vLotExists FROM tLotStatus;
2025-02-24 17:05:21 +00:00
IF NOT vLotExists THEN
INSERT INTO tLotStatus
SET lotFk = vId,
isExcluded = TRUE,
isIncluded = FALSE;
2025-02-24 17:05:21 +00:00
END IF;
END IF;
START TRANSACTION;
-- Delete excluded/deleted/dead outs
DELETE o FROM buyOut o
JOIN tLotStatus oo ON oo.lotFk = o.outFk
WHERE NOT oo.isIncluded;
2025-02-24 17:05:21 +00:00
-- Delete undead out picks
UPDATE buyLot l
JOIN buyPick p ON p.lotFk = l.lotFk
JOIN tLotStatus oo ON oo.lotFk = p.outFk
SET l.isSync = FALSE,
l.available = l.available + p.quantity
WHERE oo.isExcluded OR oo.isIncluded;
2025-02-24 17:05:21 +00:00
DELETE p FROM buyPick p
JOIN tLotStatus oo ON oo.lotFk = p.outFk
WHERE oo.isExcluded OR oo.isIncluded;
2025-02-24 17:05:21 +00:00
-- Update alive outs
INSERT INTO buyOut (
2025-02-18 18:34:38 +00:00
outFk,
2025-02-24 17:05:21 +00:00
source,
isSync,
warehouseFk,
dated,
itemFk,
quantity,
2025-02-18 14:58:38 +00:00
lack,
created,
2025-02-24 17:05:21 +00:00
isPicked
)
SELECT
2025-02-24 17:05:21 +00:00
lotFk,
vSource,
FALSE,
warehouseFk,
dated,
itemFk,
quantity,
2025-02-18 14:58:38 +00:00
quantity,
created,
2025-02-24 17:05:21 +00:00
isPicked
FROM tLotAlive
ON DUPLICATE KEY UPDATE
2025-02-24 17:05:21 +00:00
source = VALUES(source),
warehouseFk = VALUES(warehouseFk),
dated = VALUES(dated),
itemFk = VALUES(itemFk),
quantity = VALUES(quantity),
2025-02-18 14:58:38 +00:00
lack = VALUES(lack),
created = VALUES(created),
isPicked = VALUES(isPicked),
isSync = VALUES(isSync);
2025-02-24 17:05:21 +00:00
COMMIT;
END$$
DELIMITER ;