Merge pull request '8408-disponible-por-zonas' (!3495) from 8408-disponible-por-zonas into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
Reviewed-on: #3495 Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
This commit is contained in:
commit
7b8476b42c
|
@ -278,6 +278,15 @@ INSERT INTO `hedera`.`tpvConfig` (currency, terminal, transactionType, maxAmount
|
||||||
INSERT INTO hedera.tpvMerchantEnable (merchantFk, companyFk)
|
INSERT INTO hedera.tpvMerchantEnable (merchantFk, companyFk)
|
||||||
VALUES (1, 442);
|
VALUES (1, 442);
|
||||||
|
|
||||||
|
/* UPDATE vn.ticket t
|
||||||
|
JOIN vn.zone z ON z.id = t.zoneFk
|
||||||
|
SET t.shipped = DATE(t.shipped) +
|
||||||
|
INTERVAL HOUR(z.hour) HOUR +
|
||||||
|
INTERVAL MINUTE(z.hour) MINUTE;
|
||||||
|
*/
|
||||||
|
UPDATE vn.travel
|
||||||
|
SET availabled = landed
|
||||||
|
WHERE availabled IS NULL;
|
||||||
-- XXX
|
-- XXX
|
||||||
|
|
||||||
SET foreign_key_checks = 1;
|
SET foreign_key_checks = 1;
|
||||||
|
|
|
@ -6,7 +6,15 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`available_refresh`
|
||||||
`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,
|
||||||
SELECT i.itemFk, i.shipped, i.quantity
|
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;
|
||||||
|
|
|
@ -2,7 +2,7 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`stock_refresh`(v_refresh BOOL)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`stock_refresh`(v_refresh BOOL)
|
||||||
proc: BEGIN
|
proc: BEGIN
|
||||||
/**
|
/**
|
||||||
* Crea o actualiza la cache con el disponible hasta el día de
|
* Crea o actualiza la cache con el disponible hasta el día de
|
||||||
* ayer. Esta cache es usada como base para otros procedimientos
|
* ayer. Esta cache es usada como base para otros procedimientos
|
||||||
* como el cálculo del visible o del ATP.
|
* como el cálculo del visible o del ATP.
|
||||||
*
|
*
|
||||||
|
@ -36,15 +36,19 @@ proc: BEGIN
|
||||||
(
|
(
|
||||||
SELECT itemFk AS item_id, warehouseFk AS warehouse_id, quantity AS amount
|
SELECT itemFk AS item_id, warehouseFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemTicketOut
|
FROM vn.itemTicketOut
|
||||||
WHERE shipped >= v_date_inv AND shipped < vCURDATE
|
WHERE shipped >= v_date_inv
|
||||||
|
AND shipped < vCURDATE
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk ASitem_id, warehouseInFk AS warehouse_id, quantity AS amount
|
SELECT itemFk ASitem_id, warehouseInFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemEntryIn
|
FROM vn.itemEntryIn
|
||||||
WHERE landed >= v_date_inv AND landed < vCURDATE AND isVirtualStock is FALSE
|
WHERE availabled >= v_date_inv
|
||||||
|
AND availabled < vCURDATE
|
||||||
|
AND isVirtualStock is FALSE
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk AS item_id ,warehouseOutFk AS warehouse_id, quantity AS amount
|
SELECT itemFk AS item_id ,warehouseOutFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemEntryOut
|
FROM vn.itemEntryOut
|
||||||
WHERE shipped >= v_date_inv AND shipped < vCURDATE
|
WHERE shipped >= v_date_inv
|
||||||
|
AND shipped < vCURDATE
|
||||||
) t
|
) t
|
||||||
GROUP BY item_id, warehouse_id HAVING amount != 0;
|
GROUP BY item_id, warehouse_id HAVING amount != 0;
|
||||||
|
|
||||||
|
|
|
@ -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,7 +1,7 @@
|
||||||
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 +11,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 +28,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 +59,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 +85,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,21 @@
|
||||||
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 +28,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 +44,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 ;
|
||||||
|
|
|
@ -6,7 +6,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 +25,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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -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