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

87 lines
1.6 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refresh`(
`vTable` VARCHAR(255),
`vId` INT,
`vSource` VARCHAR(255))
BEGIN
DECLARE vLotExists INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
IF vTable = 'lot' THEN
SELECT COUNT(*) > 0 INTO vLotExists FROM tLotStatus;
IF NOT vLotExists THEN
INSERT INTO tLotStatus
SET lotFk = vId,
isExcluded = TRUE,
isIncluded = FALSE;
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;
-- 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;
DELETE p FROM buyPick p
JOIN tLotStatus oo ON oo.lotFk = p.outFk
WHERE oo.isExcluded OR oo.isIncluded;
-- Update alive outs
INSERT INTO buyOut (
outFk,
source,
isSync,
warehouseFk,
dated,
itemFk,
quantity,
lack,
created,
isPicked
)
SELECT
lotFk,
vSource,
FALSE,
warehouseFk,
dated,
itemFk,
quantity,
quantity,
created,
isPicked
FROM tLotAlive
ON DUPLICATE KEY UPDATE
source = VALUES(source),
warehouseFk = VALUES(warehouseFk),
dated = VALUES(dated),
itemFk = VALUES(itemFk),
quantity = VALUES(quantity),
lack = VALUES(lack),
created = VALUES(created),
isPicked = VALUES(isPicked),
isSync = VALUES(isSync);
COMMIT;
END$$
DELIMITER ;