USE `vn`; DROP procedure IF EXISTS `vn`.`zoneGetLanded`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetLanded__`(vShipped DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT) BEGIN /** * Devuelve una tabla temporal con el dia de recepcion para vShipped. * * @param vShipped Fecha de preparacion de mercancia * @param vAddressFk Id de consignatario, %NULL para recogida * @param vAgencyModeFk Id agencia * @table tmp.zoneGetLanded Datos de recepción */ DECLARE vPostalCode varchar(10); SELECT postalCode INTO vPostalCode FROM address WHERE id = vAddressFk; DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded; CREATE TEMPORARY TABLE tmp.zoneGetLanded ENGINE = MEMORY SELECT id zoneFk, vShipped shipped, delivered landed, vWarehouseFk warehouseFk, agencyModeFk, isIncluded FROM ( SELECT zi.isIncluded, zc.delivered, z.id, z.agencyModeFk FROM vn.zoneGeo zgSon JOIN vn.zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt JOIN zoneIncluded zi ON zi.geoFk = zgFather.id JOIN zone z ON z.id = zi.zoneFk JOIN zoneCalendar zc ON zc.zoneFk = z.id WHERE zgSon.`name` LIKE vPostalCode AND zc.delivered = TIMESTAMPADD(DAY,z.travelingDays, vShipped) AND IF(vShipped = CURDATE(), hour(now()) < hour(z.`hour`),TRUE) AND z.agencyModeFk = vAgencyModeFk AND z.warehouseFk = vWarehouseFk ORDER BY zgFather.depth DESC) t GROUP BY zoneFk HAVING isIncluded > 0 LIMIT 1; END$$ DELIMITER ; ;