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

64 lines
1.4 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`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
(vTable = 'ticket' AND ticketFk = vId)
OR (vTable = 'sale' AND saleFk = vId);
CREATE OR REPLACE TEMPORARY TABLE tOutNew
ENGINE = MEMORY
SELECT
t.id ticketFk,
s.id tableId,
2025-02-18 18:34:38 +00:00
s.outFk,
t.warehouseFk,
t.shipped dated,
s.itemFk,
s.quantity,
s.created,
s.isPicked OR 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 = 'ticket' AND t.id = vId)
OR (vTable = 'sale' AND s.id = vId)
);
CREATE OR REPLACE TEMPORARY TABLE tOutDel
ENGINE = MEMORY
2025-02-18 18:34:38 +00:00
SELECT outFk FROM tOutOld
LEFT JOIN vn.sale s USING(outFk)
WHERE s.outFk 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-18 18:34:38 +00:00
INSERT INTO buyOutSale (outFk, saleFk, ticketFk)
SELECT outFk, tableId, ticketFk FROM tOutNew
ON DUPLICATE KEY UPDATE
2025-02-18 18:34:38 +00:00
saleFk = VALUES(saleFk),
ticketFk = VALUES(ticketFk);
COMMIT;
DROP TEMPORARY TABLE tOutNew, tOutOld, tOutPrune, tOutDel;
END$$
DELIMITER ;