salix/db/routines/vn/procedures/zone_getClosed.sql

35 lines
1.1 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zone_getClosed`()
proc:BEGIN
/**
* Devuelve una tabla con las zonas cerradas para hoy
*
* @table tmp.closedZones(zoneFk, warehouseFk);
*/
DROP TEMPORARY TABLE IF EXISTS tmp.closedZones;
CREATE TEMPORARY TABLE tmp.closedZones (
`zoneFk` int(11) NOT NULL,
`warehouseFk` smallint(6) unsigned NOT NULL,
PRIMARY KEY `zoneFk` (`zoneFk`,`warehouseFk`),
KEY `warehouseFk` (`warehouseFk`))
ENGINE=MEMORY DEFAULT CHARSET=utf8;
INSERT INTO tmp.closedZones(zoneFk, warehouseFk)
SELECT zoneFk, warehouseFk
FROM (
SELECT t.zoneFk, t.warehouseFk, count(DISTINCT t.id) numTickets, pc.minTicketsToCloseZone
FROM vn.ticket t
JOIN vn.expedition e ON e.ticketFk = t.id
JOIN vn.`zone`z on z.id = t.zoneFk
JOIN vn.agencyMode am ON am.id = z.agencyModeFk
JOIN vn.agency a ON a.id = am.agencyFk
JOIN vn.productionConfig pc
WHERE a.isOwn
AND pc.isZoneClosedByExpeditionActivated
AND e.created >= util.VN_CURDATE()
GROUP BY t.zoneFk, t.warehouseFk
HAVING numTickets >= minTicketsToCloseZone) sub;
END$$
DELIMITER ;