201 lines
6.3 KiB
SQL
201 lines
6.3 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`multipleInventory`(
|
|
vDate DATE,
|
|
vWarehouseFk TINYINT,
|
|
vMaxDays TINYINT
|
|
)
|
|
proc: BEGIN
|
|
DECLARE vDateTomorrow DATE DEFAULT vDate + INTERVAL 1 DAY;
|
|
DECLARE vDateFrom DATE DEFAULT vDate;
|
|
DECLARE vDateTo DATETIME;
|
|
DECLARE vDateToTomorrow DATETIME;
|
|
DECLARE vDefaultDayRange INT;
|
|
|
|
IF vDate < util.VN_CURDATE() THEN
|
|
LEAVE proc;
|
|
END IF;
|
|
|
|
IF vDate = util.VN_CURDATE() THEN
|
|
SELECT inventoried INTO vDateFrom
|
|
FROM config;
|
|
END IF;
|
|
|
|
SELECT defaultDayRange INTO vDefaultDayRange
|
|
FROM comparativeConfig;
|
|
|
|
SET vDateTo = vDate + INTERVAL IFNULL(vMaxDays, vDefaultDayRange) DAY;
|
|
SET vDateToTomorrow = vDateTo + INTERVAL 1 DAY;
|
|
|
|
ALTER TABLE tmp.itemInventory
|
|
ADD `avalaible` INT NOT NULL,
|
|
ADD `sd` INT NOT NULL,
|
|
ADD `rest` INT NOT NULL,
|
|
ADD `expected` INT NOT NULL,
|
|
ADD `inventory` INT NOT NULL,
|
|
ADD `visible` INT NOT NULL,
|
|
ADD `life` TINYINT NOT NULL DEFAULT '0';
|
|
|
|
-- Calculo del inventario
|
|
CREATE OR REPLACE TEMPORARY TABLE tItemInventoryCalc
|
|
(PRIMARY KEY (itemFk))
|
|
ENGINE = MEMORY
|
|
SELECT itemFk,
|
|
SUM(quantity) quantity,
|
|
SUM(quantity) visible
|
|
FROM (
|
|
SELECT s.itemFk, - s.quantity quantity
|
|
FROM sale s
|
|
JOIN ticket t ON t.id = s.ticketFk
|
|
JOIN warehouse w ON w.id = t.warehouseFk
|
|
WHERE t.shipped BETWEEN vDateFrom AND util.dayEnd(vDate)
|
|
AND IFNULL(vWarehouseFk, t.warehouseFk) = t.warehouseFk
|
|
AND w.isComparative
|
|
UNION ALL
|
|
SELECT b.itemFk, b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseInFk
|
|
WHERE t.landed BETWEEN vDateFrom AND util.dayEnd(vDate)
|
|
AND IFNULL(vWarehouseFk, t.warehouseInFk) = t.warehouseInFk
|
|
AND w.isComparative
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
UNION ALL
|
|
SELECT b.itemFk, - b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseOutFk
|
|
WHERE t.shipped BETWEEN vDateFrom AND util.dayEnd(vDate)
|
|
AND IFNULL(vWarehouseFk, t.warehouseOutFk) = t.warehouseOutFk
|
|
AND w.isComparative
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
) sub
|
|
GROUP BY itemFk;
|
|
|
|
-- Cálculo del visible
|
|
UPDATE tItemInventoryCalc iic
|
|
JOIN (
|
|
SELECT itemFk, SUM(quantity) visible
|
|
FROM (
|
|
SELECT s.itemFk, s.quantity
|
|
FROM sale s
|
|
JOIN ticket t ON t.id = s.ticketFk
|
|
JOIN warehouse w ON w.id = t.warehouseFk
|
|
WHERE t.shipped >= vDate
|
|
AND t.shipped < vDateTomorrow
|
|
AND (NOT isPicked AND NOT t.isLabeled AND t.refFk IS NULL)
|
|
AND IFNULL(vWarehouseFk, t.warehouseFk) = t.warehouseFk
|
|
AND w.isComparative
|
|
UNION ALL
|
|
SELECT b.itemFk, - b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseInFk
|
|
WHERE t.landed = vDate
|
|
AND NOT t.isReceived
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
AND IFNULL(vWarehouseFk, t.warehouseInFk) = t.warehouseInFk
|
|
AND w.isComparative
|
|
UNION ALL
|
|
SELECT b.itemFk, b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseOutFk
|
|
WHERE t.shipped = vDate
|
|
AND NOT t.isReceived
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
AND IFNULL(vWarehouseFk, t.warehouseOutFk) = t.warehouseOutFk
|
|
AND w.isComparative
|
|
) sub2
|
|
GROUP BY itemFk
|
|
) sub ON sub.itemFk = iic.itemFk
|
|
SET iic.visible = iic.visible + sub.visible;
|
|
|
|
UPDATE tmp.itemInventory ai
|
|
JOIN tItemInventoryCalc iic ON iic.itemFk = ai.id
|
|
SET ai.inventory = iic.quantity,
|
|
ai.visible = iic.visible,
|
|
ai.avalaible = iic.quantity,
|
|
ai.sd = iic.quantity;
|
|
|
|
-- Calculo del disponible
|
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
|
(INDEX (itemFk, warehouseFk))
|
|
ENGINE = MEMORY
|
|
SELECT sub.itemFk,
|
|
vWarehouseFk warehouseFk,
|
|
sub.dated,
|
|
SUM(sub.quantity) quantity
|
|
FROM (
|
|
SELECT s.itemFk,
|
|
DATE(t.shipped) dated,
|
|
- s.quantity quantity
|
|
FROM sale s
|
|
JOIN ticket t ON t.id = s.ticketFk
|
|
JOIN warehouse w ON w.id = t.warehouseFk
|
|
WHERE t.shipped BETWEEN vDateTomorrow AND vDateTo
|
|
AND IFNULL(vWarehouseFk, t.warehouseFk) = t.warehouseFk
|
|
AND w.isComparative
|
|
UNION ALL
|
|
SELECT b.itemFk, t.landed, b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseInFk
|
|
WHERE t.landed BETWEEN vDateTomorrow AND vDateTo
|
|
AND IFNULL(vWarehouseFk, t.warehouseInFk) = t.warehouseInFk
|
|
AND w.isComparative
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
UNION ALL
|
|
SELECT b.itemFk, t.shipped, - b.quantity
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
JOIN warehouse w ON w.id = t.warehouseOutFk
|
|
WHERE t.shipped BETWEEN vDateTomorrow AND vDateTo
|
|
AND IFNULL(vWarehouseFk, t.warehouseOutFk) = t.warehouseOutFk
|
|
AND w.isComparative
|
|
AND NOT e.isExcludedFromAvailable
|
|
AND NOT e.isRaid
|
|
) sub
|
|
GROUP BY sub.itemFk, sub.dated;
|
|
|
|
CALL item_getAtp(vDate);
|
|
CALL travel_upcomingArrivals(vWarehouseFk, vDate);
|
|
|
|
UPDATE tmp.itemInventory ai
|
|
JOIN (
|
|
SELECT it.itemFk,
|
|
SUM(it.quantity) quantity,
|
|
im.quantity minQuantity
|
|
FROM tmp.itemCalc it
|
|
JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
|
|
JOIN item i ON i.id = it.itemFk
|
|
LEFT JOIN origin o ON o.id = i.originFk
|
|
LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
|
|
WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
|
|
t.landing,
|
|
vDateToTomorrow)
|
|
GROUP BY it.itemFk
|
|
) sub ON sub.itemFk = ai.id
|
|
SET ai.avalaible = IF(sub.minQuantity > 0,
|
|
ai.avalaible,
|
|
ai.avalaible + sub.minQuantity),
|
|
ai.sd = ai.inventory + sub.quantity;
|
|
|
|
DROP TEMPORARY TABLE
|
|
tmp.itemTravel,
|
|
tmp.itemCalc,
|
|
tItemInventoryCalc,
|
|
tmp.itemAtp;
|
|
END$$
|
|
DELIMITER ;
|