Merge pull request '6974-sale_add' (!2452) from 6974-sale_add into master
gitea/salix/pipeline/head This commit looks good Details
gitea/salix/pipeline/pr-test Build queued... Details

Reviewed-on: #2452
Reviewed-by: Jorge Penades <jorgep@verdnatura.es>
This commit is contained in:
Carlos Andrés 2024-05-14 15:06:35 +00:00
commit df15e44442
1 changed files with 44 additions and 52 deletions

View File

@ -1,7 +1,8 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sale_add`( CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`sale_add`(
IN vStarted DATE, IN vStarted DATE,
IN vEnded DATE) IN vEnded DATE
)
BEGIN BEGIN
/** /**
* Añade las ventas que se realizaron entre 2 fechas a la tabla bs.sale * Añade las ventas que se realizaron entre 2 fechas a la tabla bs.sale
@ -10,63 +11,54 @@ BEGIN
* @param vEnded Fecha de fin * @param vEnded Fecha de fin
* *
*/ */
DECLARE vLoopDate DATE;
DECLARE vLoopDateTime DATETIME;
IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN IF vStarted < (util.VN_CURDATE() - INTERVAL 5 YEAR) OR vStarted > vEnded THEN
CALL util.throw('Wrong date'); CALL util.throw('Wrong date');
END IF; END IF;
SET vLoopDate = vStarted;
DELETE FROM sale DELETE FROM sale
WHERE dated BETWEEN vStarted AND vEnded; WHERE dated BETWEEN vStarted AND vEnded;
WHILE vLoopDate <= vEnded DO REPLACE sale(
SET vLoopDateTime = util.dayEnd(vLoopDate); saleFk,
amount,
REPLACE sale( surcharge,
saleFk, dated,
amount, typeFk,
surcharge, clientFk,
dated, companyFk,
typeFk, margin
clientFk, )WITH calculatedSales AS(
companyFk, SELECT s.id saleFk,
margin CAST(SUM(IF(ct.isBase, s.quantity * sc.value, 0)) AS DECIMAL(10, 3)) amount,
)WITH calculatedSales AS( CAST(SUM(IF(ct.isBase, 0, s.quantity * sc.value)) AS DECIMAL(10, 3)) surcharge,
SELECT s.id saleFk, s.total,
SUM(IF(ct.isBase, s.quantity * sc.value, 0)) amount, DATE(t.shipped) dated,
SUM(IF(ct.isBase, 0, s.quantity * sc.value)) surcharge, i.typeFk,
s.total pvp, t.clientFk,
DATE(t.shipped) dated, t.companyFk,
i.typeFk, CAST(SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) AS DECIMAL(10, 3)) marginComponents
t.clientFk, FROM vn.ticket t
t.companyFk, STRAIGHT_JOIN vn.sale s ON s.ticketFk = t.id
SUM(IF(ct.isMargin, s.quantity * sc.value, 0 )) marginComponents JOIN vn.item i ON i.id = s.itemFk
FROM vn.ticket t JOIN vn.itemType it ON it.id = i.typeFk
STRAIGHT_JOIN vn.sale s ON s.ticketFk = t.id JOIN vn.itemCategory ic ON ic.id = it.categoryFk
JOIN vn.item i ON i.id = s.itemFk JOIN vn.saleComponent sc ON sc.saleFk = s.id
JOIN vn.itemType it ON it.id = i.typeFk JOIN vn.component c ON c.id = sc.componentFk
JOIN vn.itemCategory ic ON ic.id = it.categoryFk JOIN vn.componentType ct ON ct.id = c.typeFk
JOIN vn.saleComponent sc ON sc.saleFk = s.id WHERE t.shipped BETWEEN vStarted AND vEnded
JOIN vn.component c ON c.id = sc.componentFk AND s.quantity <> 0
JOIN vn.componentType ct ON ct.id = c.typeFk AND ic.merchandise
WHERE t.shipped BETWEEN vLoopDate AND vLoopDateTime GROUP BY s.id
AND s.quantity <> 0 )SELECT saleFk,
AND ic.merchandise amount,
GROUP BY s.id surcharge,
)SELECT saleFk, dated,
amount, typeFk,
surcharge, clientFk,
dated, companyFk,
typeFk, IF (marginComponents IS NULL,
clientFk, 0,
companyFk, CAST(marginComponents + amount + surcharge - total AS DECIMAL(10, 3)))
marginComponents + amount + surcharge - pvp FROM calculatedSales;
FROM calculatedSales;
SET vLoopDate = vLoopDate + INTERVAL 1 DAY;
END WHILE;
END$$ END$$
DELIMITER ; DELIMITER ;