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 ;