feat: refs #7564 Added volume column #2664
|
@ -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 ;
|
|
@ -0,0 +1,29 @@
|
|||
DELIMITER $$
|
||||
guillermo marked this conversation as resolved
|
||||
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 ;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE vn.ticket ADD volume decimal(10,6) DEFAULT NULL NULL COMMENT 'Unidad en m3';
|
|
@ -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;
|
Loading…
Reference in New Issue
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.
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.