fix: descuentos en bs.ventas refs #6974 #2331
|
@ -1,32 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add`()
|
|
||||||
BEGIN
|
|
||||||
DECLARE lastCOMP INT; # Se trata de una variable para almacenar el ultimo valor del Periodo
|
|
||||||
DECLARE vMaxPeriod INT;
|
|
||||||
DECLARE vMaxWeek INT;
|
|
||||||
|
|
||||||
SELECT t.period, t.`week` INTO vMaxPeriod, vMaxWeek
|
|
||||||
FROM vn.`time` t
|
|
||||||
WHERE t.dated = util.VN_CURDATE();
|
|
||||||
|
|
||||||
SELECT MAX(Periodo) INTO lastCOMP FROM vn2008.Comparativa;
|
|
||||||
-- Fijaremos las ventas con más de un mes de antiguedad en la tabla Comparativa
|
|
||||||
|
|
||||||
IF lastCOMP < vMaxPeriod - 3 AND vMaxWeek > 3 THEN
|
|
||||||
|
|
||||||
REPLACE vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
|
|
||||||
SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
|
|
||||||
FROM bs.ventas v
|
|
||||||
JOIN vn2008.time tm ON tm.date = v.fecha
|
|
||||||
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
|
|
||||||
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
|
|
||||||
JOIN vn2008.reinos r ON r.id = tp.reino_id
|
|
||||||
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
|
|
||||||
WHERE tm.period BETWEEN lastCOMP AND vMaxPeriod - 3
|
|
||||||
AND t.Id_Cliente NOT IN(400,200)
|
|
||||||
AND t.warehouse_id NOT IN (0,13)
|
|
||||||
GROUP BY m.Id_Article, Periodo, t.warehouse_id;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,40 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`comparativa_add_manual`(IN vStarted DATE, IN vEnded DATE)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Recalcula la tabla Comparativa para dos valores dados
|
|
||||||
*
|
|
||||||
* @param vStarted fecha desde
|
|
||||||
* @param vEnded fecha hasta
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE periodStart INT;
|
|
||||||
DECLARE periodEnd INT;
|
|
||||||
|
|
||||||
-- Seleccionamos la fecha minima/maxima del periodo que vamos a consultar
|
|
||||||
|
|
||||||
SELECT t.period INTO periodStart
|
|
||||||
FROM vn.`time` t
|
|
||||||
WHERE t.dated = vStarted;
|
|
||||||
|
|
||||||
SELECT t.period INTO periodEnd
|
|
||||||
FROM vn.`time` t
|
|
||||||
WHERE t.dated = vEnded;
|
|
||||||
|
|
||||||
DELETE FROM vn2008.Comparativa
|
|
||||||
WHERE Periodo BETWEEN periodStart AND periodEnd;
|
|
||||||
|
|
||||||
INSERT INTO vn2008.Comparativa(Periodo, Id_Article, warehouse_id, Cantidad,price)
|
|
||||||
SELECT tm.period as Periodo, m.Id_Article, t.warehouse_id, sum(m.Cantidad), sum(v.importe)
|
|
||||||
FROM bs.ventas v
|
|
||||||
JOIN vn2008.time tm ON tm.date = v.fecha
|
|
||||||
JOIN vn2008.Movimientos m ON m.Id_Movimiento = v.Id_Movimiento
|
|
||||||
JOIN vn2008.Tipos tp ON tp.tipo_id = v.tipo_id
|
|
||||||
JOIN vn2008.reinos r ON r.id = tp.reino_id
|
|
||||||
JOIN vn2008.Tickets t ON t.Id_Ticket = m.Id_Ticket
|
|
||||||
WHERE tm.period BETWEEN periodStart AND periodEnd
|
|
||||||
AND t.Id_Cliente NOT IN(400,200)
|
|
||||||
AND t.warehouse_id NOT IN (0,13)
|
|
||||||
GROUP BY m.Id_Article, Periodo, t.warehouse_id;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sale_add`(
|
||||||
|
IN vStarted DATE,
|
||||||
|
IN vEnded DATE)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Añade las ventas que se realizaron entre 2 fechas a la tabla bs.sale
|
||||||
|
*
|
||||||
|
* @param vStarted Fecha de inicio
|
||||||
|
* @param vEnded Fecha de fin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
DECLARE vLoopDate DATE;
|
||||||
|
DECLARE vLoopDateTime DATETIME;
|
||||||
|
|
||||||
|
IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN
|
||||||
|
CALL util.throw('Wrong date');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET vLoopDate = vStarted;
|
||||||
|
|
||||||
|
DELETE FROM sale
|
||||||
|
WHERE dated BETWEEN vStarted AND vEnded;
|
||||||
|
|
||||||
|
WHILE vLoopDate <= vEnded DO
|
||||||
|
SET vLoopDateTime = util.dayEnd(vLoopDate);
|
||||||
|
|
||||||
|
REPLACE sale(
|
||||||
|
saleFk,
|
||||||
|
amount,
|
||||||
|
surcharge,
|
||||||
|
dated,
|
||||||
|
typeFk,
|
||||||
|
clientFk,
|
||||||
|
companyFk,
|
||||||
|
margin
|
||||||
|
)WITH calculatedSales AS(
|
||||||
|
SELECT s.id saleFk,
|
||||||
|
SUM(IF(ct.isBase, s.quantity * sc.value, 0)) amount,
|
||||||
|
SUM(IF(ct.isBase, 0, s.quantity * sc.value)) surcharge,
|
||||||
|
s.total pvp,
|
||||||
|
DATE(t.shipped) dated,
|
||||||
|
i.typeFk,
|
||||||
|
t.clientFk,
|
||||||
|
t.companyFk,
|
||||||
|
SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) marginComponents
|
||||||
|
FROM vn.ticket t
|
||||||
|
STRAIGHT_JOIN vn.sale s ON s.ticketFk = t.id
|
||||||
|
JOIN vn.item i ON i.id = s.itemFk
|
||||||
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
|
JOIN vn.itemCategory ic ON ic.id = it.categoryFk
|
||||||
|
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
||||||
|
JOIN vn.component c ON c.id = sc.componentFk
|
||||||
|
JOIN vn.componentType ct ON ct.id = c.typeFk
|
||||||
|
WHERE t.shipped BETWEEN vLoopDate AND vLoopDateTime
|
||||||
|
AND s.quantity <> 0
|
||||||
|
AND ic.merchandise
|
||||||
|
GROUP BY s.id
|
||||||
|
)SELECT saleFk,
|
||||||
|
amount,
|
||||||
|
surcharge,
|
||||||
|
dated,
|
||||||
|
typeFk,
|
||||||
|
clientFk,
|
||||||
|
companyFk,
|
||||||
|
marginComponents + amount + surcharge - pvp
|
||||||
|
FROM calculatedSales;
|
||||||
|
|
||||||
|
SET vLoopDate = vLoopDate + INTERVAL 1 DAY;
|
||||||
|
END WHILE;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,13 +1,12 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add_launcher`()
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sales_addLauncher`()
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Añade las ventas a la tabla bs.sale que se realizaron desde hace un mes hasta hoy
|
* Añade las ventas a la tabla bs.sale que se realizaron desde hace un mes hasta hoy
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE vCurDate DATE DEFAULT util.VN_CURDATE();
|
DECLARE vCurDate DATE DEFAULT util.VN_CURDATE();
|
||||||
CALL ventas_add(vCurDate - INTERVAL 1 MONTH, vCurDate);
|
|
||||||
|
CALL sale_add(vCurDate - INTERVAL 1 MONTH, vCurDate);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -1,78 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_add`(
|
|
||||||
IN vStarted DATETIME,
|
|
||||||
IN vEnded DATETIME)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Añade las ventas que se realizaron entre
|
|
||||||
* vStarted y vEnded
|
|
||||||
*
|
|
||||||
* @param vStarted Fecha de inicio
|
|
||||||
* @param vEnded Fecha de finalizacion
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
DECLARE vStartingDate DATETIME;
|
|
||||||
DECLARE vEndingDate DATETIME;
|
|
||||||
|
|
||||||
IF vStarted < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE())
|
|
||||||
OR vEnded < TIMESTAMPADD(YEAR,-5,util.VN_CURDATE()) THEN
|
|
||||||
CALL util.throw('fechaDemasiadoAntigua');
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SET vEnded = util.dayEnd(vEnded);
|
|
||||||
SET vStartingDate = vStarted ;
|
|
||||||
SET vEndingDate = util.dayEnd(vStartingDate);
|
|
||||||
|
|
||||||
DELETE
|
|
||||||
FROM sale
|
|
||||||
WHERE dated BETWEEN vStartingDate AND vEnded;
|
|
||||||
|
|
||||||
WHILE vEndingDate <= vEnded DO
|
|
||||||
|
|
||||||
REPLACE ventas(Id_Movimiento, importe, recargo, fecha, tipo_id, Id_Cliente, empresa_id)
|
|
||||||
SELECT saleFk,
|
|
||||||
SUM(IF(ct.isBase, s.quantity * sc.value, 0)) importe,
|
|
||||||
SUM(IF(ct.isBase, 0, s.quantity * sc.value)) recargo,
|
|
||||||
vStartingDate,
|
|
||||||
i.typeFk,
|
|
||||||
a.clientFk,
|
|
||||||
t.companyFk
|
|
||||||
FROM vn.saleComponent sc
|
|
||||||
JOIN vn.component c ON c.id = sc.componentFk
|
|
||||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
|
||||||
JOIN vn.sale s ON s.id = sc.saleFk
|
|
||||||
JOIN vn.item i ON i.id = s.itemFk
|
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
|
||||||
JOIN vn.itemCategory ic ON ic.id = it.categoryFk
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
JOIN vn.address a ON a.id = t.addressFk
|
|
||||||
JOIN vn.client cl ON cl.id = a.clientFk
|
|
||||||
WHERE t.shipped BETWEEN vStartingDate AND vEndingDate
|
|
||||||
AND s.quantity <> 0
|
|
||||||
AND s.discount <> 100
|
|
||||||
AND ic.merchandise
|
|
||||||
GROUP BY sc.saleFk
|
|
||||||
HAVING IFNULL(importe,0) <> 0 OR IFNULL(recargo,0) <> 0;
|
|
||||||
|
|
||||||
UPDATE sale s
|
|
||||||
JOIN (
|
|
||||||
SELECT s.id,
|
|
||||||
SUM(s.quantity * sc.value ) margen,
|
|
||||||
s.quantity * s.price * (100 - s.discount ) / 100 pvp
|
|
||||||
FROM vn.sale s
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
|
||||||
JOIN vn.component c ON c.id = sc.componentFk
|
|
||||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
|
||||||
WHERE t.shipped BETWEEN vStartingDate AND vEndingDate
|
|
||||||
AND ct.isMargin = TRUE
|
|
||||||
GROUP BY s.id) sub ON sub.id = s.saleFk
|
|
||||||
SET s.margin = sub.margen + s.amount + s.surcharge - sub.pvp;
|
|
||||||
|
|
||||||
SET vStartingDate = TIMESTAMPADD(DAY,1, vStartingDate);
|
|
||||||
SET vEndingDate = util.dayEnd(vStartingDate);
|
|
||||||
|
|
||||||
END WHILE;
|
|
||||||
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
UPDATE bs.nightTask
|
||||||
|
SET `procedure` = 'sales_addLauncher'
|
||||||
|
WHERE `procedure` = 'ventas_add_launcher';
|
Loading…
Reference in New Issue