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

96 lines
1.8 KiB
MySQL
Raw Permalink 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
/**
* This procedure contains the common code used to refresh the out lot cache.
*
* @param vTable The id source table
* @param vId The lot id
* @param vSource The lot source
* @table tLotStatus Lots to modify
* @table tLotAlive Updated/Created alive lots data
*/
DECLARE vHasLots BOOL;
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 vHasLots FROM tLotStatus;
2025-02-24 17:05:21 +00:00
IF NOT vHasLots THEN
2025-02-24 17:05:21 +00:00
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 ls ON ls.lotFk = o.outFk
WHERE NOT ls.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 ls ON ls.lotFk = p.outFk
2025-02-24 17:05:21 +00:00
SET l.isSync = FALSE,
l.available = l.available + p.quantity
WHERE ls.isExcluded OR ls.isIncluded;
2025-02-24 17:05:21 +00:00
DELETE p FROM buyPick p
JOIN tLotStatus ls ON ls.lotFk = p.outFk
WHERE ls.isExcluded OR ls.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 ;