62 lines
1.4 KiB
SQL
62 lines
1.4 KiB
SQL
USE `vn`;
|
|
DROP procedure IF EXISTS `zone_doCalcInitialize`;
|
|
|
|
DELIMITER $$
|
|
USE `vn`$$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `zone_doCalcInitialize`()
|
|
proc: BEGIN
|
|
/**
|
|
* Initialize ticket
|
|
*/
|
|
DECLARE vDone BOOL;
|
|
DECLARE vTicketFk INT;
|
|
DECLARE vLanded DATE;
|
|
DECLARE vZoneFk INT;
|
|
|
|
DECLARE cCur CURSOR FOR
|
|
SELECT t.id, t.landed, t.zoneFk
|
|
FROM ticket t
|
|
WHERE (zonePrice IS NULL OR zoneBonus IS NULL OR zoneClosure IS NULL)
|
|
AND landed >= '2019-01-01' AND shipped >= '2019-01-01'
|
|
GROUP BY landed, zoneFk;
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
SET vDone = TRUE;
|
|
|
|
OPEN cCur;
|
|
|
|
myLoop: LOOP
|
|
SET vDone = FALSE;
|
|
FETCH cCur INTO vTicketFk, vLanded, vZoneFk;
|
|
|
|
IF vDone THEN
|
|
LEAVE myLoop;
|
|
END IF;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
|
CREATE TEMPORARY TABLE tmp.zone
|
|
(INDEX (id))
|
|
ENGINE = MEMORY
|
|
SELECT vZoneFk id;
|
|
|
|
CALL zone_getOptionsForLanding(vLanded, TRUE);
|
|
|
|
UPDATE ticket t
|
|
LEFT JOIN tmp.zoneOption zo ON TRUE
|
|
SET zonePrice = zo.price, zoneBonus = zo.bonus, zoneClosure = zo.`hour`
|
|
WHERE t.zoneFk = vZoneFk AND landed = vLanded;
|
|
|
|
UPDATE ticket t
|
|
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
|
SET zonePrice = z.price, zoneBonus = z.bonus, zoneClosure = z.`hour`
|
|
WHERE t.zonePrice IS NULL AND z.id = vZoneFk
|
|
AND landed >= '2019-01-01' AND shipped >= '2019-01-01';
|
|
|
|
END LOOP;
|
|
|
|
CLOSE cCur;
|
|
|
|
DELETE FROM zoneCalcTicket;
|
|
END$$
|
|
|
|
DELIMITER ; |