48 lines
1.4 KiB
SQL
48 lines
1.4 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`buy_getUltimate`(
|
|
vItemFk INT,
|
|
vWarehouseFk INT,
|
|
vDated DATE
|
|
)
|
|
BEGIN
|
|
/**
|
|
* Calcula las últimas compras realizadas hasta una fecha.
|
|
*
|
|
* @param vItemFk Id del artículo
|
|
* @param vWarehouseFk Id del almacén
|
|
* @param vDated Compras hasta fecha
|
|
* @return tmp.buyUltimate
|
|
*/
|
|
CALL cache.last_buy_refresh(FALSE);
|
|
|
|
CREATE OR REPLACE TEMPORARY TABLE tmp.buyUltimate
|
|
(PRIMARY KEY (itemFk, warehouseFk),
|
|
INDEX(itemFk))
|
|
ENGINE = MEMORY
|
|
SELECT item_id itemFk, buy_id buyFk, warehouse_id warehouseFk, landing
|
|
FROM cache.last_buy
|
|
WHERE (warehouse_id = vWarehouseFk OR vWarehouseFk IS NULL)
|
|
AND (item_id = vItemFk OR vItemFk IS NULL);
|
|
|
|
IF vDated >= util.VN_CURDATE() THEN
|
|
CALL buy_getUltimateFromInterval(vItemFk, vWarehouseFk, util.VN_CURDATE(), vDated);
|
|
|
|
REPLACE INTO tmp.buyUltimate
|
|
SELECT itemFk, buyFk, warehouseFk, landed landing
|
|
FROM tmp.buyUltimateFromInterval
|
|
WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
|
|
AND (itemFk = vItemFk OR vItemFk IS NULL)
|
|
AND landed <= vDated
|
|
AND NOT isIgnored;
|
|
|
|
INSERT IGNORE INTO tmp.buyUltimate
|
|
SELECT itemFk, buyFk, warehouseFk, landed landing
|
|
FROM tmp.buyUltimateFromInterval
|
|
WHERE (warehouseFk = vWarehouseFk OR vWarehouseFk IS NULL)
|
|
AND (itemFk = vItemFk OR vItemFk IS NULL)
|
|
AND landed > vDated
|
|
ORDER BY isIgnored = FALSE DESC;
|
|
END IF;
|
|
END$$
|
|
DELIMITER ;
|