DROP procedure IF EXISTS `vn`.`zoneGetShipped`; DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`zoneGetShipped`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT) BEGIN /** * Devuelve la mínima fecha de envía para cada warehouse * * @param vLanded La fecha de recepcion * @param vAddressFk Id del consignatario * @param vAgencyModeFk Id de la agencia * @return tmp.zoneGetShipped */ DECLARE vPostalCode varchar(10); SELECT postalCode INTO vPostalCode FROM address WHERE id = vAddressFk; SELECT * FROM ( SELECT * FROM ( SELECT z.id zoneFk, TIMESTAMPADD(DAY,-z.travelingDays, vLanded) shipped, vLanded landed, vWarehouseFk warehouseFk, z.agencyModeFk, zi.isIncluded FROM zoneGeo zgSon JOIN 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 = vLanded AND z.agencyModeFk = vAgencyModeFk AND z.warehouseFk = vWarehouseFk AND IF(TIMESTAMPADD(DAY,-z.travelingDays, vLanded) = CURDATE(), hour(now()) < hour(z.`hour`),TRUE) ORDER BY z.id, zgFather.depth DESC, isIncluded DESC) t GROUP BY zoneFk HAVING isIncluded > 0 ORDER BY shipped) t GROUP BY agencyModeFk; END$$ DELIMITER ;