50 lines
1.0 KiB
MySQL
50 lines
1.0 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_mergeSales`(
|
||
|
vSelf INT
|
||
|
)
|
||
|
BEGIN
|
||
|
DECLARE vHasSalesToMerge BOOL;
|
||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||
|
BEGIN
|
||
|
ROLLBACK;
|
||
|
RESIGNAL;
|
||
|
END;
|
||
|
|
||
|
START TRANSACTION;
|
||
|
|
||
|
SELECT id INTO vSelf
|
||
|
FROM ticket
|
||
|
WHERE id = vSelf FOR UPDATE;
|
||
|
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
|
||
|
(PRIMARY KEY (id))
|
||
|
ENGINE = MEMORY
|
||
|
SELECT s.id, s.itemFk, SUM(s.quantity) newQuantity
|
||
|
FROM sale s
|
||
|
JOIN item i ON i.id = s.itemFk
|
||
|
JOIN itemType it ON it.id = i.typeFk
|
||
|
WHERE s.ticketFk = vSelf
|
||
|
AND it.isMergeable
|
||
|
GROUP BY s.itemFk, s.price, s.discount
|
||
|
HAVING COUNT(*) > 1;
|
||
|
|
||
|
SELECT COUNT(*) INTO vHasSalesToMerge
|
||
|
FROM tSalesToPreserve;
|
||
|
|
||
|
IF vHasSalesToMerge THEN
|
||
|
UPDATE sale s
|
||
|
JOIN tSalesToPreserve stp ON stp.id = s.id
|
||
|
SET s.quantity = newQuantity;
|
||
|
|
||
|
DELETE s
|
||
|
FROM sale s
|
||
|
JOIN tSalesToPreserve stp ON stp.itemFk = s.itemFk
|
||
|
WHERE s.ticketFk = vSelf
|
||
|
AND s.id <> stp.id;
|
||
|
END IF;
|
||
|
|
||
|
COMMIT;
|
||
|
DROP TEMPORARY TABLE tSalesToPreserve;
|
||
|
END$$
|
||
|
DELIMITER ;
|