feat(availabled): refs #8048
gitea/salix/pipeline/pr-test There was a failure building this commit
Details
gitea/salix/pipeline/pr-test There was a failure building this commit
Details
This commit is contained in:
parent
8cc88453c4
commit
892c95f5f0
|
@ -6,7 +6,15 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`available_refres
|
||||||
`vAvailabled` DATETIME
|
`vAvailabled` DATETIME
|
||||||
)
|
)
|
||||||
proc: BEGIN
|
proc: BEGIN
|
||||||
DECLARE vStartDate DATE;
|
/**
|
||||||
|
* Calculates the availability of all items by warehouse and date
|
||||||
|
*
|
||||||
|
* @param vCalc Returns cache.cache_calc.id
|
||||||
|
* @param vRefresh Forces the calculation
|
||||||
|
* @param vWarehouse vn.warehouse.id
|
||||||
|
* @param vAvailabled Moment in time for required availability
|
||||||
|
*
|
||||||
|
*/
|
||||||
DECLARE vReserveDate DATETIME;
|
DECLARE vReserveDate DATETIME;
|
||||||
DECLARE vParams CHAR(100);
|
DECLARE vParams CHAR(100);
|
||||||
DECLARE vInventoryDate DATE;
|
DECLARE vInventoryDate DATE;
|
||||||
|
@ -28,7 +36,7 @@ proc: BEGIN
|
||||||
|
|
||||||
SET vAvailabled = vDated + INTERVAL HOUR(vAvailabled) HOUR;
|
SET vAvailabled = vDated + INTERVAL HOUR(vAvailabled) HOUR;
|
||||||
|
|
||||||
CALL vn.item_getStock(vWarehouse, vDated, NULL);
|
CALL vn.item_getStock(vWarehouse, vAvailabled, NULL);
|
||||||
|
|
||||||
SET vParams = CONCAT_WS('/', vWarehouse, vAvailabled);
|
SET vParams = CONCAT_WS('/', vWarehouse, vAvailabled);
|
||||||
CALL cache_calc_start (vCalc, vRefresh, 'available', vParams);
|
CALL cache_calc_start (vCalc, vRefresh, 'available', vParams);
|
||||||
|
@ -38,10 +46,16 @@ proc: BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Calcula algunos parámetros necesarios
|
-- Calcula algunos parámetros necesarios
|
||||||
SET vStartDate = TIMESTAMP(vDated, '00:00:00');
|
SELECT inventoried
|
||||||
SELECT inventoried INTO vInventoryDate FROM vn.config;
|
INTO vInventoryDate
|
||||||
SELECT DATE_SUB(vStartDate, INTERVAL MAX(life) DAY) INTO vLifeScope FROM vn.itemType;
|
FROM vn.config;
|
||||||
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vReserveDate
|
|
||||||
|
SELECT DATE_SUB(vDated, INTERVAL MAX(life) DAY)
|
||||||
|
INTO vLifeScope
|
||||||
|
FROM vn.itemType;
|
||||||
|
|
||||||
|
SELECT SUBTIME(util.VN_NOW(), reserveTime)
|
||||||
|
INTO vReserveDate
|
||||||
FROM hedera.orderConfig;
|
FROM hedera.orderConfig;
|
||||||
|
|
||||||
SELECT w.id INTO vWarehouseFkInventory
|
SELECT w.id INTO vWarehouseFkInventory
|
||||||
|
@ -49,22 +63,22 @@ proc: BEGIN
|
||||||
WHERE w.code = 'inv';
|
WHERE w.code = 'inv';
|
||||||
|
|
||||||
-- Calcula el ultimo dia de vida para cada producto
|
-- Calcula el ultimo dia de vida para cada producto
|
||||||
DROP TEMPORARY TABLE IF EXISTS itemRange;
|
CREATE OR REPLACE TEMPORARY TABLE itemRange
|
||||||
CREATE TEMPORARY TABLE itemRange
|
|
||||||
(PRIMARY KEY (itemFk))
|
(PRIMARY KEY (itemFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT i.id itemFk,
|
SELECT i.id itemFk,
|
||||||
util.dayEnd(DATE_ADD(c.maxLanded, INTERVAL it.life DAY)) ended, it.life
|
util.dayEnd(DATE_ADD(c.maxLanded, INTERVAL it.life DAY)) ended,
|
||||||
|
it.life
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT b.itemFk, MAX(t.landed) maxLanded
|
SELECT b.itemFk, MAX(t.availabled) maxLanded
|
||||||
FROM vn.buy b
|
FROM vn.buy b
|
||||||
JOIN vn.entry e ON b.entryFk = e.id
|
JOIN vn.entry e ON b.entryFk = e.id
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
JOIN vn.travel t ON t.id = e.travelFk
|
||||||
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
||||||
JOIN vn.item i ON i.id = b.itemFk
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
WHERE t.landed BETWEEN vLifeScope AND vStartDate
|
WHERE t.landed BETWEEN vLifeScope AND vDated
|
||||||
AND t.warehouseInFk = vWarehouse
|
AND t.warehouseInFk = vWarehouse
|
||||||
AND t.warehouseOutFk <> vWarehouseFkInventory
|
AND t.warehouseOutFk <> vWarehouseFkInventory
|
||||||
AND it.life
|
AND it.life
|
||||||
|
@ -72,62 +86,78 @@ proc: BEGIN
|
||||||
GROUP BY b.itemFk
|
GROUP BY b.itemFk
|
||||||
) c ON i.id = c.itemFk
|
) c ON i.id = c.itemFk
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
HAVING ended >= vStartDate OR life IS NULL;
|
HAVING ended >= vDated OR life IS NULL;
|
||||||
|
|
||||||
-- Calcula el ATP
|
-- Calcula el ATP (Available to Promise)
|
||||||
DELETE FROM available WHERE calc_id = vCalc;
|
DELETE FROM available WHERE calc_id = vCalc;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
||||||
CREATE TEMPORARY TABLE tmp.itemCalc
|
|
||||||
(INDEX (itemFk,warehouseFk))
|
(INDEX (itemFk,warehouseFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT itemFk, vWarehouse warehouseFk, DATE(dated) dated, SUM(quantity) quantity
|
SELECT itemFk,
|
||||||
FROM (SELECT i.itemFk, i.shipped dated, i.quantity
|
vWarehouse warehouseFk,
|
||||||
|
dated,
|
||||||
|
SUM(quantity) quantity
|
||||||
|
FROM (
|
||||||
|
SELECT i.itemFk,
|
||||||
|
i.shipped dated,
|
||||||
|
i.quantity
|
||||||
FROM vn.itemTicketOut i
|
FROM vn.itemTicketOut i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
WHERE i.shipped >= vStartDate
|
WHERE i.shipped >= vAvailabled
|
||||||
AND (ir.ended IS NULL OR i.shipped <= ir.ended)
|
AND (ir.ended IS NULL
|
||||||
|
OR i.shipped <= ir.ended)
|
||||||
AND i.warehouseFk = vWarehouse
|
AND i.warehouseFk = vWarehouse
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT i.itemFk, IFNULL(i.availabled, i.landed), i.quantity
|
SELECT i.itemFk,
|
||||||
|
i.availabled,
|
||||||
|
i.quantity
|
||||||
FROM vn.itemEntryIn i
|
FROM vn.itemEntryIn i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
LEFT JOIN edi.warehouseFloramondo wf ON wf.entryFk = i.entryFk
|
WHERE i.availabled >= vAvailabled
|
||||||
WHERE IFNULL(i.availabled, i.landed) >= vStartDate
|
AND (ir.ended IS NULL
|
||||||
AND IFNULL(i.availabled, i.landed) <= vAvailabled
|
OR i.availabled <= ir.ended)
|
||||||
AND (ir.ended IS NULL OR IFNULL(i.availabled, i.landed) <= ir.ended)
|
|
||||||
AND i.warehouseInFk = vWarehouse
|
AND i.warehouseInFk = vWarehouse
|
||||||
AND wf.entryFk IS NULL
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT i.itemFk, i.shipped, i.quantity
|
SELECT i.itemFk,
|
||||||
|
i.shipped,
|
||||||
|
i.quantity
|
||||||
FROM vn.itemEntryOut i
|
FROM vn.itemEntryOut i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
WHERE i.shipped >= vStartDate
|
WHERE i.shipped >= vAvailabled
|
||||||
AND (ir.ended IS NULL OR i.shipped <= ir.ended)
|
AND (ir.ended IS NULL
|
||||||
|
OR i.shipped <= ir.ended)
|
||||||
AND i.warehouseOutFk = vWarehouse
|
AND i.warehouseOutFk = vWarehouse
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT r.item_id, r.shipment, -r.amount
|
SELECT r.item_id,
|
||||||
|
r.shipment,
|
||||||
|
-r.amount
|
||||||
FROM hedera.order_row r
|
FROM hedera.order_row r
|
||||||
JOIN hedera.`order` o ON o.id = r.order_id
|
JOIN hedera.`order` o ON o.id = r.order_id
|
||||||
JOIN itemRange ir ON ir.itemFk = r.item_id
|
JOIN itemRange ir ON ir.itemFk = r.item_id
|
||||||
WHERE r.shipment >= vStartDate
|
WHERE r.shipment >= vDated
|
||||||
AND (ir.ended IS NULL OR r.shipment <= ir.ended)
|
AND (ir.ended IS NULL
|
||||||
|
OR r.shipment <= ir.ended)
|
||||||
AND r.warehouse_id = vWarehouse
|
AND r.warehouse_id = vWarehouse
|
||||||
AND r.created >= vReserveDate
|
AND r.created >= vReserveDate
|
||||||
AND NOT o.confirmed
|
AND NOT o.confirmed
|
||||||
) t
|
) t
|
||||||
GROUP BY itemFk, dated;
|
GROUP BY itemFk, dated;
|
||||||
|
|
||||||
CALL vn.item_getAtp(vDated);
|
CALL vn.item_getAtp(vAvailabled);
|
||||||
|
|
||||||
INSERT INTO available (calc_id, item_id, available)
|
INSERT INTO available (calc_id, item_id, available)
|
||||||
SELECT vCalc, sub.itemFk, SUM(sub.quantity)
|
SELECT vCalc,
|
||||||
|
sub.itemFk,
|
||||||
|
SUM(sub.quantity)
|
||||||
FROM (
|
FROM (
|
||||||
SELECT ir.itemFk, stock quantity
|
SELECT ir.itemFk,
|
||||||
|
stock quantity
|
||||||
FROM tmp.itemList il
|
FROM tmp.itemList il
|
||||||
JOIN itemRange ir ON ir.itemFk = il.itemFk
|
JOIN itemRange ir ON ir.itemFk = il.itemFk
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk, quantity
|
SELECT itemFk,
|
||||||
|
quantity
|
||||||
FROM tmp.itemAtp
|
FROM tmp.itemAtp
|
||||||
)sub
|
)sub
|
||||||
GROUP BY sub.itemFk;
|
GROUP BY sub.itemFk;
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getAtp`(vDated DATE)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getAtp`(vAvailabled DATETIME)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Calcula el valor mínimo acumulado para cada artículo ordenado por fecha y
|
* Calcula el valor mínimo acumulado para cada artículo por almacén.
|
||||||
* almacén.
|
|
||||||
*
|
*
|
||||||
* @param vDated Si no hay movimientos en la fecha indicada, debe devolver 0
|
* @param vAvailabled Starting time for calculation
|
||||||
* @table tmp.itemCalc(itemFk, wareHouseFk, dated, quantity)
|
* @table tmp.itemCalc(itemFk, wareHouseFk, dated, quantity)
|
||||||
* @return tmp.itemAtp(itemFk, warehouseFk, quantity)
|
* @return tmp.itemAtp(itemFk, warehouseFk, quantity)
|
||||||
*/
|
*/
|
||||||
|
@ -17,7 +16,7 @@ BEGIN
|
||||||
SELECT itemFk, warehouseFk, dated, quantity
|
SELECT itemFk, warehouseFk, dated, quantity
|
||||||
FROM tmp.itemCalc
|
FROM tmp.itemCalc
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk, warehouseFk, vDated, 0
|
SELECT itemFk, warehouseFk, vAvailabled, 0
|
||||||
FROM (SELECT DISTINCT itemFk, warehouseFk FROM tmp.itemCalc) t2
|
FROM (SELECT DISTINCT itemFk, warehouseFk FROM tmp.itemCalc) t2
|
||||||
) t1
|
) t1
|
||||||
GROUP BY itemFk, warehouseFk, dated
|
GROUP BY itemFk, warehouseFk, dated
|
||||||
|
@ -28,7 +27,7 @@ BEGIN
|
||||||
SET @lastQuantity := 0;
|
SET @lastQuantity := 0;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemAtp
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemAtp
|
||||||
(INDEX (itemFk, wareHouseFk))
|
(PRIMARY KEY (itemFk, wareHouseFk))
|
||||||
SELECT itemFk, wareHouseFk, MIN(quantityAccumulated) quantity
|
SELECT itemFk, wareHouseFk, MIN(quantityAccumulated) quantity
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -43,6 +42,10 @@ BEGIN
|
||||||
)sub
|
)sub
|
||||||
GROUP BY itemFk, wareHouseFk;
|
GROUP BY itemFk, wareHouseFk;
|
||||||
|
|
||||||
|
INSERT IGNORE INTO tmp.itemAtp(itemFk, warehouseFk, quantity)
|
||||||
|
SELECT DISTINCT ic.itemFk, ic.warehouseFk, 0
|
||||||
|
FROM tmp.itemCalc ic;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tItemOrdered;
|
DROP TEMPORARY TABLE tItemOrdered;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
|
$$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getBalance`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getBalance`(
|
||||||
vItemFk INT,
|
vItemFk INT,
|
||||||
vWarehouseFk INT,
|
vWarehouseFk INT,
|
||||||
|
@ -99,7 +100,7 @@ BEGIN
|
||||||
),
|
),
|
||||||
sales AS (
|
sales AS (
|
||||||
WITH itemSales AS (
|
WITH itemSales AS (
|
||||||
SELECT DATE(t.shipped) + INTERVAL HOUR(z.`hour`) HOUR shipped,
|
SELECT DATE(t.shipped) + INTERVAL HOUR(IFNULL(z.`hour`,0)) HOUR shipped,
|
||||||
s.quantity,
|
s.quantity,
|
||||||
st2.alertLevel,
|
st2.alertLevel,
|
||||||
st2.name,
|
st2.name,
|
||||||
|
@ -114,7 +115,7 @@ BEGIN
|
||||||
cb.claimFk
|
cb.claimFk
|
||||||
FROM vn.sale s
|
FROM vn.sale s
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
JOIN vn.ticket t ON t.id = s.ticketFk
|
||||||
JOIN vn.`zone` z ON z.id = t.zoneFk
|
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
|
LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
|
||||||
LEFT JOIN vn.state st ON st.code = ts.code
|
LEFT JOIN vn.state st ON st.code = ts.code
|
||||||
JOIN vn.client c ON c.id = t.clientFk
|
JOIN vn.client c ON c.id = t.clientFk
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
|
$$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getMinacum`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getMinacum`(
|
||||||
vWarehouseFk TINYINT,
|
vWarehouseFk TINYINT,
|
||||||
vDated DATE,
|
vAvailabled DATETIME,
|
||||||
vRange INT,
|
vRange INT,
|
||||||
vItemFk INT
|
vItemFk INT
|
||||||
)
|
)
|
||||||
|
@ -11,11 +12,12 @@ BEGIN
|
||||||
* especificado, en caso de NULL para todos.
|
* especificado, en caso de NULL para todos.
|
||||||
*
|
*
|
||||||
* @param vWarehouseFk Id warehouse
|
* @param vWarehouseFk Id warehouse
|
||||||
* @param vDated Fecha inicio
|
* @param vAvailabled Fecha inicio
|
||||||
* @param vRange Número de días a considerar
|
* @param vRange Número de días a considerar
|
||||||
* @param vItemFk Id de artículo
|
* @param vItemFk Id de artículo
|
||||||
* @return tmp.itemMinacum
|
* @return tmp.itemMinacum
|
||||||
*/
|
*/
|
||||||
|
DECLARE vDated DATE DEFAULT DATE(vAvailabled);
|
||||||
DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
|
DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
||||||
|
@ -27,25 +29,25 @@ BEGIN
|
||||||
sub.warehouseFk
|
sub.warehouseFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT s.itemFk,
|
SELECT s.itemFk,
|
||||||
DATE(t.shipped) dated,
|
t.shipped dated,
|
||||||
-s.quantity quantity,
|
-s.quantity quantity,
|
||||||
t.warehouseFk
|
t.warehouseFk
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN ticket t ON t.id = s.ticketFk
|
JOIN ticket t ON t.id = s.ticketFk
|
||||||
WHERE t.shipped BETWEEN vDated AND vDatedTo
|
WHERE t.shipped BETWEEN vAvailabled AND vDatedTo
|
||||||
AND t.warehouseFk
|
AND t.warehouseFk
|
||||||
AND s.quantity <> 0
|
AND s.quantity <> 0
|
||||||
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT b.itemFk,
|
SELECT b.itemFk,
|
||||||
t.landed,
|
t.availabled,
|
||||||
b.quantity,
|
b.quantity,
|
||||||
t.warehouseInFk
|
t.warehouseInFk
|
||||||
FROM buy b
|
FROM buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN entry e ON e.id = b.entryFk
|
||||||
JOIN travel t ON t.id = e.travelFk
|
JOIN travel t ON t.id = e.travelFk
|
||||||
WHERE t.landed BETWEEN vDated AND vDatedTo
|
WHERE t.availabled BETWEEN vAvailabled AND vDatedTo
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
|
||||||
AND NOT e.isExcludedFromAvailable
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND b.quantity <> 0
|
AND b.quantity <> 0
|
||||||
|
@ -58,7 +60,7 @@ BEGIN
|
||||||
FROM buy b
|
FROM buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN entry e ON e.id = b.entryFk
|
||||||
JOIN travel t ON t.id = e.travelFk
|
JOIN travel t ON t.id = e.travelFk
|
||||||
WHERE t.shipped BETWEEN vDated AND vDatedTo
|
WHERE t.shipped BETWEEN vAvailabled AND vDatedTo
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
|
||||||
AND NOT e.isExcludedFromAvailable
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND b.quantity <> 0
|
AND b.quantity <> 0
|
||||||
|
@ -84,7 +86,7 @@ BEGIN
|
||||||
) sub
|
) sub
|
||||||
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
|
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
|
||||||
|
|
||||||
CALL item_getAtp(vDated);
|
CALL item_getAtp(vAvailabled);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
|
||||||
(INDEX(itemFk))
|
(INDEX(itemFk))
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
|
$$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getStock`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getStock`(
|
||||||
vWarehouseFk SMALLINT,
|
vWarehouseFk SMALLINT,
|
||||||
vDated DATE,
|
vAvailabled DATETIME,
|
||||||
vItemFk INT
|
vItemFk INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Calcula el stock de un artículo de un vWarehouseFk,
|
* Calcula el stock de un artículo de un vWarehouseFk,
|
||||||
* desde la fecha del inventario hasta vDated
|
* desde la fecha del inventario hasta el momento anterior a vAvailabled
|
||||||
*
|
*
|
||||||
* @param vWarehouse Warehouse id
|
* @param vWarehouse Warehouse id
|
||||||
* @param vDated Max date to filter
|
* @param vAvailabled Maximum time to filter
|
||||||
* @param vItemFk Item id
|
* @param vItemFk Item id
|
||||||
*
|
*
|
||||||
* @return tmp.itemList(itemFk, stock, visible, available)
|
* @return tmp.itemList(itemFk, stock, visible, available)
|
||||||
*/
|
*/
|
||||||
SET vDated = TIMESTAMP(vDated, '00:00:00');
|
CALL cache.stock_refresh(FALSE);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemList
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemList
|
||||||
(UNIQUE INDEX i USING HASH (itemFk))
|
(UNIQUE INDEX i USING HASH (itemFk))
|
||||||
|
@ -28,15 +29,15 @@ BEGIN
|
||||||
SELECT itemFk, quantity
|
SELECT itemFk, quantity
|
||||||
FROM itemTicketOut
|
FROM itemTicketOut
|
||||||
WHERE shipped >= util.VN_CURDATE()
|
WHERE shipped >= util.VN_CURDATE()
|
||||||
AND shipped < vDated
|
AND shipped < vAvailabled
|
||||||
AND warehouseFk = vWarehouseFk
|
AND warehouseFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR itemFk = vItemFk)
|
AND (vItemFk IS NULL OR itemFk = vItemFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT iei.itemFk, iei.quantity
|
SELECT iei.itemFk, iei.quantity
|
||||||
FROM itemEntryIn iei
|
FROM itemEntryIn iei
|
||||||
JOIN item i ON i.id = iei.itemFk
|
JOIN item i ON i.id = iei.itemFk
|
||||||
WHERE IFNULL(iei.availabled, iei.landed) >= util.VN_CURDATE()
|
WHERE iei.availabled >= util.VN_CURDATE()
|
||||||
AND IFNULL(iei.availabled, iei.landed) < vDated
|
AND iei.availabled < vAvailabled
|
||||||
AND iei.warehouseInFk = vWarehouseFk
|
AND iei.warehouseInFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR iei.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR iei.itemFk = vItemFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
@ -44,23 +45,16 @@ BEGIN
|
||||||
FROM itemEntryOut ieo
|
FROM itemEntryOut ieo
|
||||||
JOIN item i ON i.id = ieo.itemFk
|
JOIN item i ON i.id = ieo.itemFk
|
||||||
WHERE ieo.shipped >= util.VN_CURDATE()
|
WHERE ieo.shipped >= util.VN_CURDATE()
|
||||||
AND ieo.shipped < vDated
|
AND ieo.shipped < vAvailabled
|
||||||
AND ieo.warehouseOutFk = vWarehouseFk
|
AND ieo.warehouseOutFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR ieo.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR ieo.itemFk = vItemFk)
|
||||||
|
UNION ALL
|
||||||
|
SELECT item_id, amount
|
||||||
|
FROM cache.stock
|
||||||
|
WHERE warehouse_id = vWarehouseFk
|
||||||
) sub
|
) sub
|
||||||
GROUP BY itemFk
|
GROUP BY itemFk
|
||||||
HAVING stock;
|
HAVING stock;
|
||||||
|
|
||||||
CALL cache.stock_refresh(FALSE);
|
|
||||||
|
|
||||||
INSERT INTO tmp.itemList(itemFk, stock, visible, available)
|
|
||||||
SELECT item_id, amount, amount, amount
|
|
||||||
FROM cache.stock
|
|
||||||
WHERE warehouse_id = vWarehouseFk
|
|
||||||
AND (vItemFk IS NULL OR vItemFk = item_id)
|
|
||||||
ON DUPLICATE KEY UPDATE
|
|
||||||
stock = stock + VALUES(stock),
|
|
||||||
visible = visible + VALUES(visible),
|
|
||||||
available = available + VALUES(available);
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
|
$$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(
|
||||||
vTicketFk INT,
|
vTicketFk INT,
|
||||||
vNewShipped DATETIME,
|
vNewShipped DATETIME,
|
||||||
|
@ -6,7 +7,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Cálcula el stock movible para los artículos de un ticket
|
* Cálcula el stock que se puede adelantar para los artículos de un ticket.
|
||||||
* vNewShipped debe ser menor que vOldShipped, en los otros casos se
|
* vNewShipped debe ser menor que vOldShipped, en los otros casos se
|
||||||
* asume que siempre es posible
|
* asume que siempre es posible
|
||||||
*
|
*
|
||||||
|
@ -25,7 +26,7 @@ BEGIN
|
||||||
CALL item_getMinacum(
|
CALL item_getMinacum(
|
||||||
vWarehouseFk,
|
vWarehouseFk,
|
||||||
vNewShipped,
|
vNewShipped,
|
||||||
DATEDIFF(DATE_SUB(vOldShipped, INTERVAL 1 DAY), vNewShipped),
|
DATEDIFF(DATE_SUB(vOldShipped, INTERVAL 1 DAY), DATE(vNewShipped)),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,16 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`ticket_beforeInsert`
|
||||||
BEFORE INSERT ON `ticket`
|
BEFORE INSERT ON `ticket`
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
|
DECLARE vTime TIME DEFAULT NULL;
|
||||||
|
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
|
SELECT TIME(hour) INTO vTime
|
||||||
|
FROM zone
|
||||||
|
WHERE id = NEW.zoneFk;
|
||||||
|
|
||||||
|
IF vTime IS NOT NULL THEN
|
||||||
|
SET NEW.shipped = ADDTIME(DATE(NEW.shipped), vTime);
|
||||||
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -4,6 +4,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`ticket_beforeUpdate`
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vNewTime TIME;
|
DECLARE vNewTime TIME;
|
||||||
|
DECLARE vZoneTime TIME;
|
||||||
|
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
|
@ -72,5 +73,19 @@ BEGIN
|
||||||
|
|
||||||
CALL vn.routeUpdateM3(NEW.routeFk);
|
CALL vn.routeUpdateM3(NEW.routeFk);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
IF DATE(NEW.shipped) <> DATE(OLD.shipped) THEN
|
||||||
|
SET NEW.shipped = ADDTIME(DATE(NEW.shipped), TIME(OLD.shipped));
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF NEW.zoneFk <> OLD.zoneFk THEN
|
||||||
|
SELECT TIME(hour) INTO vZoneTime
|
||||||
|
FROM zone
|
||||||
|
WHERE id = NEW.zoneFk;
|
||||||
|
|
||||||
|
IF vZoneTime IS NOT NULL THEN
|
||||||
|
SET NEW.shipped = ADDTIME(DATE(NEW.shipped), vZoneTime);
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -84,8 +84,8 @@ describe('sale priceDifference()', () => {
|
||||||
|
|
||||||
const {items} = await models.Ticket.priceDifference(ctx, options);
|
const {items} = await models.Ticket.priceDifference(ctx, options);
|
||||||
|
|
||||||
expect(items[0].movable).toEqual(386);
|
expect(items[0].movable).toEqual(356);
|
||||||
expect(items[1].movable).toEqual(1810);
|
expect(items[1].movable).toEqual(1790);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
Loading…
Reference in New Issue