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

72 lines
1.4 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refresh`(
`vTable` VARCHAR(255))
BEGIN
CREATE TEMPORARY TABLE tOutPrune
ENGINE = MEMORY
SELECT outFk FROM tOutOld
EXCEPT
SELECT outFk FROM tOutNew;
DELETE o FROM buyOut o JOIN tOutPrune d USING(outFk);
INSERT INTO buyOut (
tableName,
tableId,
outFk,
warehouseFk,
dated,
itemFk,
quantity,
lack,
created,
isPicked,
isSync
)
SELECT
vTable,
tableId,
outFk,
warehouseFk,
dated,
itemFk,
quantity,
quantity,
created,
isPicked,
FALSE
FROM tOutNew
ON DUPLICATE KEY UPDATE
tableName = VALUES(tableName),
tableId = VALUES(tableId),
warehouseFk = VALUES(warehouseFk),
dated = VALUES(dated),
itemFk = VALUES(itemFk),
quantity = VALUES(quantity),
lack = VALUES(lack),
created = VALUES(created),
isPicked = VALUES(isPicked),
isSync = VALUES(isSync);
CREATE OR REPLACE TEMPORARY TABLE tPickPrune
ENGINE = MEMORY
SELECT id FROM buyPick
WHERE outFk IN (
SELECT outFk FROM tOutDel
UNION
SELECT outFk FROM tOutNew
);
UPDATE buyLot l
JOIN buyPick p ON p.buyFk = l.buyFk
JOIN tPickPrune pp ON pp.id = p.id
SET l.isSync = FALSE,
l.available = l.available + p.quantity;
DELETE p FROM buyPick p
JOIN tPickPrune pp USING (id);
DROP TEMPORARY TABLE tPickPrune;
END$$
DELIMITER ;