73 lines
1.9 KiB
MySQL
73 lines
1.9 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`Trabuque`(IN intIDTICKET BIGINT, IN dblINCREMENTO DOUBLE )
|
||
|
BEGIN
|
||
|
|
||
|
|
||
|
|
||
|
#Vamos a calcular el porcentaje a incrementar las cantidades de las lineas de movimiento para inflar / desinflar la base final
|
||
|
|
||
|
DECLARE dblBASE_INICIAL DOUBLE DEFAULT 0;
|
||
|
DECLARE dblBASE_FINAL DOUBLE DEFAULT 0;
|
||
|
DECLARE dblAUMENTO DOUBLE DEFAULT 1;
|
||
|
|
||
|
|
||
|
SELECT SUM(Cantidad * Preu * (100 - Descuento) / 100)
|
||
|
INTO dblBASE_INICIAL
|
||
|
FROM Movimientos
|
||
|
WHERE Id_Ticket = intIDTICKET;
|
||
|
|
||
|
SET dblBASE_FINAL = dblBASE_INICIAL;
|
||
|
|
||
|
|
||
|
#Eliminamos lineas a 0
|
||
|
|
||
|
DELETE FROM Movimientos WHERE Cantidad = 0 AND Id_Ticket = intIDTICKET;
|
||
|
|
||
|
# Vamos a ir probando incrementos paulatinos hasta que encontremos el que supera lo pedido, teniendo en cuenta el sentido del incremento
|
||
|
|
||
|
IF dblINCREMENTO < 0 THEN
|
||
|
|
||
|
|
||
|
|
||
|
WHILE (dblBASE_FINAL > dblBASE_INICIAL + dblINCREMENTO) or (dblAUMENTO < 0 ) DO
|
||
|
|
||
|
SET dblAUMENTO = dblAUMENTO - 0.01;
|
||
|
|
||
|
SELECT SUM(IF(@cantidad:= ROUND(dblAUMENTO * Cantidad),@cantidad,1) * Preu * (100 - Descuento) / 100)
|
||
|
INTO dblBASE_FINAL
|
||
|
FROM Movimientos
|
||
|
WHERE Id_Ticket = intIDTICKET;
|
||
|
|
||
|
END WHILE;
|
||
|
|
||
|
ELSE
|
||
|
|
||
|
WHILE dblBASE_FINAL < dblBASE_INICIAL + dblINCREMENTO DO
|
||
|
|
||
|
SET dblAUMENTO = dblAUMENTO + 0.01;
|
||
|
|
||
|
SELECT SUM(IF(@cantidad:= ROUND(dblAUMENTO * Cantidad),@cantidad,1) * Preu * (100 - Descuento) / 100)
|
||
|
INTO dblBASE_FINAL
|
||
|
FROM Movimientos
|
||
|
WHERE Id_Ticket = intIDTICKET;
|
||
|
|
||
|
END WHILE;
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
UPDATE Movimientos
|
||
|
SET Cantidad = IF(@cantidad:= ROUND(dblAUMENTO * Cantidad),@cantidad,1)
|
||
|
WHERE Id_Ticket = intIDTICKET;
|
||
|
|
||
|
SELECT tipoiva
|
||
|
, ROUND(SUM(Cantidad * Preu * (100 - Descuento) / 100),2) as Base
|
||
|
, ROUND(ROUND(SUM(Cantidad * Preu * (100 - Descuento) / 100),2) * iva / 100,2) as Cuota
|
||
|
FROM Movimientos M
|
||
|
INNER JOIN Articles A USING(Id_Article)
|
||
|
INNER JOIN tblIVA USING(tipoiva)
|
||
|
WHERE Id_Ticket = intIDTICKET
|
||
|
GROUP BY tipoiva;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|