feat: refs #7564 Added volume column #2664

Merged
guillermo merged 11 commits from 7564-ticketVolume into dev 2024-08-30 11:57:10 +00:00
4 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,24 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolume`(
vSelf INT
)
BEGIN
/**
* Update the volume ticket
*
* @param vSelf Ticket id
*/
DECLARE vVolume DECIMAL(10,6);
SELECT SUM(s.quantity * ic.cm3delivery / 1000000) INTO vVolume
FROM sale s
JOIN ticket t ON t.id = s.ticketFk
JOIN itemCost ic ON ic.itemFk = s.itemFk
AND ic.warehouseFk = t.warehouseFk
WHERE t.id = vSelf;
UPDATE ticket
SET volume = vVolume
WHERE id = vSelf;
END$$
DELIMITER ;

View File

@ -0,0 +1,29 @@
DELIMITER $$
guillermo marked this conversation as resolved
Review

Este procedimiento es muy peligroso de ejecutar, se debería de estudiar la manera de hacerlo, por ejemplo marcando un parámetro que indique el tiempo máximo para recalcular en el pasado.

Este procedimiento es muy peligroso de ejecutar, se debería de estudiar la manera de hacerlo, por ejemplo marcando un parámetro que indique el tiempo máximo para recalcular en el pasado.
Review

He hablado con Pako, y me ha dicho que una vez creado el campo vn.ticket.volume, hagamos un cálculo del volumen de todos los tickets en ese momento, y que el procedimiento solo modifique el presente y el futuro.

He hablado con Pako, y me ha dicho que una vez creado el campo vn.ticket.volume, hagamos un cálculo del volumen de todos los tickets en ese momento, y que el procedimiento solo modifique el presente y el futuro.
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_setVolumeItemCost`(
vItemFk INT
)
BEGIN
/**
* Update the volume tickets of item
*
* @param vSelf Ticket id
*/
CREATE OR REPLACE TEMPORARY TABLE tTicket
(PRIMARY KEY (id))
ENGINE = MEMORY
SELECT t.id, SUM(s.quantity * ic.cm3delivery / 1000000) volume
FROM sale s
JOIN ticket t ON t.id = s.ticketFk
JOIN itemCost ic ON ic.itemFk = s.itemFk
AND ic.warehouseFk = t.warehouseFk
WHERE s.itemFk = vItemFk
AND t.shipped >= util.VN_CURDATE()
GROUP BY t.id;
UPDATE ticket t
JOIN tTicket tt ON tt.id = t.id
SET t.volume = tt.volume;
DROP TEMPORARY TABLE tTicket;
END$$
DELIMITER ;

View File

@ -0,0 +1 @@
ALTER TABLE vn.ticket ADD volume decimal(10,6) DEFAULT NULL NULL COMMENT 'Unidad en m3';

View File

@ -0,0 +1,16 @@
-- Calculamos todos los volumenes de todos los tickets una sola vez
CREATE OR REPLACE TEMPORARY TABLE tmp.tTicketVolume
(PRIMARY KEY (id))
ENGINE = MEMORY
SELECT t.id, SUM(s.quantity * ic.cm3delivery / 1000000) volume
FROM vn.sale s
JOIN vn.ticket t ON t.id = s.ticketFk
JOIN vn.itemCost ic ON ic.itemFk = s.itemFk
AND ic.warehouseFk = t.warehouseFk
GROUP BY t.id;
UPDATE vn.ticket t
JOIN tmp.tTicketVolume tv ON tv.id = t.id
SET t.volume = tv.volume;
DROP TEMPORARY TABLE tmp.tTicketVolume;