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

62 lines
1.4 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshSale`(
`vTable` VARCHAR(255),
`vId` INT)
BEGIN
DECLARE vPreparation INT;
SELECT id INTO vPreparation
FROM vn.alertLevel WHERE code = 'ON_PREPARATION';
CREATE OR REPLACE TEMPORARY TABLE tOutOld
ENGINE = MEMORY
2025-02-18 18:34:38 +00:00
SELECT outFk
FROM buyOutSale
WHERE
2025-02-19 16:17:02 +00:00
(vTable = 'sale' AND outFk = vId)
OR (vTable = 'ticket' AND ticketFk = vId);
CREATE OR REPLACE TEMPORARY TABLE tOutNew
ENGINE = MEMORY
SELECT
t.id ticketFk,
s.lotFk outFk,
t.warehouseFk,
t.shipped dated,
s.itemFk,
s.quantity,
s.created,
2025-02-19 16:17:02 +00:00
s.isPicked OR ts.alertLevel > vPreparation isPicked
FROM vn.sale s
JOIN vn.ticket t ON t.id = s.ticketFk
JOIN vn.ticketState ts ON s.ticketFk = t.id
WHERE s.quantity >= 0
AND (
(vTable = 'sale' AND s.lotFk = vId)
2025-02-19 16:17:02 +00:00
OR (vTable = 'ticket' AND t.id = vId)
);
CREATE OR REPLACE TEMPORARY TABLE tOutDel
ENGINE = MEMORY
SELECT o.outFk FROM tOutOld o
LEFT JOIN vn.sale s ON s.lotFk = o.outFk
WHERE s.lotFk IS NULL;
START TRANSACTION;
2025-02-18 18:34:38 +00:00
CALL buyOut_refresh('sale');
DELETE o FROM buyOutSale o
2025-02-18 18:34:38 +00:00
JOIN tOutPrune d USING(outFk);
2025-02-19 16:17:02 +00:00
INSERT INTO buyOutSale (outFk, ticketFk)
SELECT outFk, ticketFk FROM tOutNew
ON DUPLICATE KEY UPDATE
ticketFk = VALUES(ticketFk);
COMMIT;
DROP TEMPORARY TABLE tOutNew, tOutOld, tOutPrune, tOutDel;
END$$
DELIMITER ;