120 lines
2.7 KiB
SQL
120 lines
2.7 KiB
SQL
USE `vn`;
|
|
DROP procedure IF EXISTS `zone_getEvents`;
|
|
|
|
DELIMITER $$
|
|
USE `vn`$$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getEvents`(
|
|
vGeoFk INT,
|
|
vAgencyModeFk INT)
|
|
BEGIN
|
|
/**
|
|
* Returns available events for the passed province/postcode and agency.
|
|
*
|
|
* @param vGeoFk The geo id
|
|
* @param vAgencyModeFk The agency mode id
|
|
*/
|
|
DECLARE vDeliveryMethodFk VARCHAR(255);
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tZone;
|
|
CREATE TEMPORARY TABLE tZone
|
|
(id INT PRIMARY KEY)
|
|
ENGINE = MEMORY;
|
|
|
|
SELECT dm.`code` INTO vDeliveryMethodFk
|
|
FROM agencyMode am
|
|
JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
|
WHERE am.id = vAgencyModeFk;
|
|
|
|
IF vDeliveryMethodFk = 'PICKUP' THEN
|
|
INSERT INTO tZone
|
|
SELECT id
|
|
FROM zone
|
|
WHERE agencyModeFk = vAgencyModeFk;
|
|
ELSE
|
|
CALL zone_getFromGeo(vGeoFk);
|
|
|
|
IF vAgencyModeFk IS NOT NULL THEN
|
|
INSERT INTO tZone
|
|
SELECT t.id
|
|
FROM tmp.zone t
|
|
JOIN zone z ON z.id = t.id
|
|
WHERE z.agencyModeFk = vAgencyModeFk;
|
|
ELSE
|
|
INSERT INTO tZone
|
|
SELECT t.id
|
|
FROM tmp.zone t
|
|
JOIN zone z ON z.id = t.id
|
|
JOIN agencyMode am ON am.id = z.agencyModeFk
|
|
JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
|
WHERE dm.`code` IN ('AGENCY', 'DELIVERY');
|
|
END IF;
|
|
DROP TEMPORARY TABLE tmp.zone;
|
|
END IF;
|
|
|
|
SELECT e.zoneFk, e.`type`, e.dated, e.`started`, e.`ended`, e.weekDays
|
|
FROM tZone t
|
|
JOIN zoneEvent e ON e.zoneFk = t.id;
|
|
|
|
SELECT e.zoneFk, e.dated
|
|
FROM tZone t
|
|
JOIN zoneExclusion e ON e.zoneFk = t.id;
|
|
|
|
DROP TEMPORARY TABLE tZone;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|
|
USE `vn`;
|
|
DROP procedure IF EXISTS `zone_getEvents__`;
|
|
|
|
DELIMITER $$
|
|
USE `vn`$$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getEvents__`(
|
|
vProvinceFk INT,
|
|
vPostCode VARCHAR(255),
|
|
vAgencyModeFk INT)
|
|
BEGIN
|
|
/**
|
|
* Returns available events for the passed province/postcode and agency.
|
|
*
|
|
* @param vAgencyModeFk The agency mode id
|
|
* @param vProvinceFk The province id
|
|
* @param vPostCode The postcode or %NULL to use the province
|
|
*/
|
|
|
|
DECLARE vGeoFk INT;
|
|
|
|
IF vPostCode IS NOT NULL THEN
|
|
SELECT p.geoFk INTO vGeoFk
|
|
FROM postCode p
|
|
JOIN town t ON t.id = p.townFk
|
|
WHERE p.`code` = vPostCode
|
|
AND t.provinceFk = vProvinceFk;
|
|
ELSE
|
|
SELECT geoFk INTO vGeoFk
|
|
FROM province
|
|
WHERE id = vProvinceFk;
|
|
END IF;
|
|
|
|
CALL zone_getFromGeo(vGeoFk);
|
|
|
|
IF vAgencyModeFk IS NOT NULL THEN
|
|
DELETE t FROM tmp.zone t
|
|
JOIN zone z ON z.id = t.id
|
|
WHERE z.agencyModeFk != vAgencyModeFk;
|
|
END IF;
|
|
|
|
SELECT e.zoneFk, e.`type`, e.dated, e.`started`, e.`ended`, e.weekDays
|
|
FROM tmp.zone t
|
|
JOIN zoneEvent e ON e.zoneFk = t.id;
|
|
|
|
SELECT e.zoneFk, e.dated
|
|
FROM tmp.zone t
|
|
JOIN zoneExclusion e ON e.zoneFk = t.id;
|
|
|
|
DROP TEMPORARY TABLE tmp.zone;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|