fix: refs #7931 Immediately discount order lines from available #2925

Merged
juan merged 8 commits from 7931-availableFix into test 2024-09-06 11:11:36 +00:00
3 changed files with 35 additions and 5 deletions
Showing only changes of commit a7bc58a5bc - Show all commits

View File

@ -1,5 +1,10 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`available_refresh`(OUT `vCalc` INT, IN `vRefresh` INT, IN `vWarehouse` INT, IN `vDated` DATE)
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`available_refresh`(
OUT `vCalc` INT,
`vRefresh` INT,
`vWarehouse` INT,
`vDated` DATE
)
proc: BEGIN
DECLARE vStartDate DATE;
DECLARE vReserveDate DATETIME;

View File

@ -0,0 +1,23 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `cache`.`available_updateItem`(
`vItem` INT,
`vWarehouse` INT,
`vDated` DATE,
`vQuantity` INT
)
juan marked this conversation as resolved
Review

comentaris

comentaris
Review

Comentarios añadidos

Comentarios añadidos
BEGIN
DECLARE vCalc INT;
SELECT id INTO vCalc FROM cache_calc
juan marked this conversation as resolved Outdated

bot de línea de FROM

bot de línea de FROM
WHERE cacheName = 'available'
AND params = CONCAT_WS('/', vWarehouse, vDated)
AND last_refresh <= NOW();
juan marked this conversation as resolved Outdated
Outdated
Review

¿ puede haber más de una cache con los mismos params ? Si es así, haría falta poner LIMIT, y si no, sobra la condición de last_refresh <= NOW()

¿ puede haber más de una cache con los mismos params ? Si es así, haría falta poner LIMIT, y si no, sobra la condición de last_refresh <= NOW()
Outdated
Review

No puede haber mas de una para el mismo día, elimino el filtro por last_refresh ya que siempre se va a cumplir.

No puede haber mas de una para el mismo día, elimino el filtro por `last_refresh` ya que siempre se va a cumplir.
IF vCalc IS NOT NULL THEN
UPDATE available
SET available = available - vQuantity
juan marked this conversation as resolved
Review

per evitar els negatius ,es pot ficar una funció GREATEST(0, available - vQuantity)

per evitar els negatius ,es pot ficar una funció GREATEST(0, available - vQuantity)
Review

No lo veo, el procedimiento también puede que se utilice para sumar algo a la cache, ademas de esa forma se estan actualizando los parámetros de entrada de forma oculta para el "llamante" del procedimiento.

No lo veo, el procedimiento también puede que se utilice para sumar algo a la cache, ademas de esa forma se estan actualizando los parámetros de entrada de forma oculta para el "llamante" del procedimiento.
WHERE calc_id = vCalc
AND item_id = vItem;
END IF;
END$$
DELIMITER ;

View File

@ -1,8 +1,8 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_addItem`(
vSelf INT,
vWarehouse INT,
vItem INT,
vWarehouse INT,
vItem INT,
vAmount INT)
BEGIN
/**
@ -37,7 +37,7 @@ BEGIN
ROLLBACK;
RESIGNAL;
END;
CALL order_calcCatalogFromItem(vSelf, vItem);
START TRANSACTION;
@ -102,6 +102,8 @@ BEGIN
amount = vAdd,
price = vPrice;
CALL cache.available_updateItem(vItem, vWarehouse, vShipment, vAdd);
SET vRow = LAST_INSERT_ID();
INSERT INTO orderRowComponent (rowFk, componentFk, price)
@ -121,6 +123,6 @@ BEGIN
END IF;
COMMIT;
CALL vn.ticketCalculatePurge;
CALL vn.ticketCalculatePurge;
END$$
DELIMITER ;