USE `cache`; DROP procedure IF EXISTS `last_buy_refresh`; DELIMITER $$ USE `cache`$$ CREATE DEFINER=`root`@`%` PROCEDURE `last_buy_refresh`(vRefresh BOOL) proc: BEGIN /** * Crea o actualiza la cache con la última compra y fecha de cada * artículo hasta ayer. Para obtener la última compra hasta una fecha * determinada utilizar el procedimiento vn2008.item_last_buy_(). * * @param vRefresh %TRUE para forzar el recálculo de la cache **/ DECLARE vCalc INT; DECLARE started DATE; DECLARE ended DATE; DECLARE vLastRefresh DATE; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN CALL cache_calc_unlock (vCalc); RESIGNAL; END; CALL cache_calc_start (vCalc, vRefresh, 'last_buy', NULL); IF !vRefresh THEN LEAVE proc; END IF; -- TODO: ¿Se puede usar la fecha del ultimo inventario? SET started = vn2008.date_inv();-- TIMESTAMPADD(DAY, -90, CURDATE()); SET ended = CURDATE(); -- TIMESTAMPADD(DAY, -1, CURDATE()); CALL vn.buyUltimateFromInterval(NULL, started, ended); DELETE FROM last_buy; INSERT INTO last_buy (item_id, warehouse_id, buy_id, landing) SELECT itemFk, warehouseFk, buyFk, landed FROM tmp.buyUltimateFromInterval; DROP TEMPORARY TABLE tmp.buyUltimateFromInterval; CALL cache_calc_end (vCalc); END$$ DELIMITER ;