63 lines
1.6 KiB
SQL
63 lines
1.6 KiB
SQL
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
|
|
*
|
|
*/
|
|
IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN
|
|
CALL util.throw('Wrong date');
|
|
END IF;
|
|
|
|
DELETE FROM sale
|
|
WHERE dated BETWEEN vStarted AND vEnded;
|
|
|
|
REPLACE sale(
|
|
saleFk,
|
|
amount,
|
|
surcharge,
|
|
dated,
|
|
typeFk,
|
|
clientFk,
|
|
companyFk,
|
|
margin
|
|
)WITH calculatedSales AS(
|
|
SELECT s.id saleFk,
|
|
CAST(SUM(IF(ct.isBase, s.quantity * sc.value, 0)) AS DECIMAL(10, 3)) amount,
|
|
CAST(SUM(IF(ct.isBase, 0, s.quantity * sc.value)) AS DECIMAL(10, 3)) surcharge,
|
|
s.total,
|
|
DATE(t.shipped) dated,
|
|
i.typeFk,
|
|
t.clientFk,
|
|
t.companyFk,
|
|
CAST(SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) AS DECIMAL(10, 3)) 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 vStarted AND vEnded
|
|
AND s.quantity <> 0
|
|
AND ic.merchandise
|
|
GROUP BY s.id
|
|
)SELECT saleFk,
|
|
amount,
|
|
surcharge,
|
|
dated,
|
|
typeFk,
|
|
clientFk,
|
|
companyFk,
|
|
IF (marginComponents IS NULL, 0, CAST(marginComponents + amount + surcharge - total AS DECIMAL(10, 3)))
|
|
FROM calculatedSales;
|
|
END$$
|
|
DELIMITER ;
|