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

82 lines
2.2 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_upcomingArrivals`(
vWarehouseFk INT,
vDate DATETIME
)
BEGIN
/**
* Procedure to track and organize the movement of items between warehouses,
* where 'warehouseINFk' is @vWarehouseFk.
* Uses temporary tables to process and store the travel data of the items.
*
* @params vWarehouseFk warehouse id
* @params vDate selected landed date
* @return tmp.itemTravel
*/
DECLARE vTravelFk INT;
DECLARE vWarehouseOutFk INT;
DECLARE vShipment DATETIME;
DECLARE vDateStart DATETIME;
CREATE OR REPLACE TEMPORARY TABLE tTravelTop
(PRIMARY KEY (wh_in,wh_out,landing,shipment))
ENGINE = MEMORY
SELECT 0 id,
vWarehouseFk wh_in,
vWarehouseFk wh_out,
FALSE ok,
vDate landing,
vDate shipment;
REPEAT
SET vTravelFk = NULL;
SELECT id,
wh_out,
shipment,
landing
INTO vTravelFk,
vWarehouseOutFk,
vShipment,
vDateStart
FROM tTravelTop
WHERE ok = FALSE LIMIT 1;
UPDATE tTravelTop
SET ok = TRUE
WHERE id = vTravelFk;
INSERT IGNORE INTO tTravelTop
SELECT id,
vWarehouseFk,
warehouseOutFk,
FALSE,
IF(vTravelFk, vDateStart, landed),
shipped shipment
FROM travel
WHERE warehouseOutFk = vWarehouseOutFk
AND IF(vTravelFk, landed <= vShipment, landed >= vShipment)
AND shipped >= util.VN_CURDATE()
AND NOT isDelivered;
UNTIL vTravelFk IS NULL END REPEAT;
DELETE FROM tTravelTop WHERE id = 0;
CREATE OR REPLACE TEMPORARY TABLE tmp.itemTravel
(KEY (wh))
ENGINE = MEMORY
SELECT *
FROM (
SELECT wh_out wh,
landing
FROM tTravelTop
WHERE wh_out <> vWarehouseFk
ORDER BY landing
LIMIT 10000000000000000000
) t
GROUP BY wh;
DROP TEMPORARY TABLE tTravelTop;
END$$
DELIMITER ;