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

41 lines
1.1 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_multipleBuyByDate`(
vDated DATETIME,
vWarehouseFk TINYINT(3)
)
BEGIN
/**
* Updates the tmp.itemInventory table, adding the purchase date.
*
* @param tmp.itemInventory(buy_date)
* @param vDated -> end date
* @param vWarehouseFk -> warehouse id
*/
DECLARE vLastBuyScope INT;
SELECT comparativeLastBuyScope INTO vLastBuyScope
FROM config;
ALTER TABLE tmp.itemInventory
ADD `buy_date` datetime NOT NULL;
CREATE OR REPLACE TEMPORARY TABLE lastBuyScope
SELECT i.id, MAX(t.landed) lastLanded
FROM item i
JOIN buy b ON b.itemFk = i.id
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
JOIN supplier s ON s.id = e.supplierFk
JOIN warehouse w ON w.id = t.warehouseInFk
WHERE t.landed BETWEEN (vDated + INTERVAL - vLastBuyScope DAY) AND vDated
AND NOT s.name = 'INVENTARIO'
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
AND w.isComparative
AND NOT t.isRaid
GROUP BY i.id;
UPDATE tmp.itemInventory y
JOIN lastBuyScope lbs ON lbs.id = y.id
SET y.buy_date = lbs.lastLanded;
END$$
DELIMITER ;