feat: refs #7984 add currencyDated and use
gitea/salix/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Alex Moreno 2025-01-23 15:10:58 +01:00
parent 630836cd8e
commit 2e4e209208
9 changed files with 77 additions and 17 deletions

View File

@ -2692,10 +2692,18 @@ UPDATE `vn`.`invoiceIn`
WHERE id IN (5, 7, 8, 9, 10); WHERE id IN (5, 7, 8, 9, 10);
INSERT INTO vn.referenceRate (currencyFk, dated, value) INSERT INTO vn.referenceRate (currencyFk, dated, value)
VALUES (2, '2000-12-01', 1.0495), VALUES (2, '2000-12-01', 1),
(2, '2001-01-01', 1.0531), (2, '2000-12-29', 2),
(2, '2001-02-01', 7.6347), (2, '2000-12-30', 3),
(2, '2000-12-31', 7.6347); (2, '2000-12-31', 4),
(2, '2001-01-01', 5),
(2, '2001-02-01', 6),
(3, '2000-12-01', 10),
(3, '2000-12-29', 20),
(3, '2000-12-30', 30),
(3, '2000-12-31', 40),
(3, '2001-01-01', 50),
(3, '2001-02-01', 60);
UPDATE vn.ticket t UPDATE vn.ticket t
JOIN vn.sale s ON s.ticketFk = t.id JOIN vn.sale s ON s.ticketFk = t.id

View File

@ -15,7 +15,7 @@ BEGIN
* @param vDated The date of exchangue * @param vDated The date of exchangue
* @return vForeignRate The rate e of currency exchange * @return vForeignRate The rate e of currency exchange
*/ */
DECLARE vForeignRate DECIMAL(10,2); DECLARE vForeignRate FLOAT UNSIGNED;
SELECT value INTO vForeignRate SELECT value INTO vForeignRate
FROM referenceRate FROM referenceRate

View File

@ -0,0 +1,15 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`ticket_getCurrencyDate`(vSelf INT)
RETURNS INT(11)
DETERMINISTIC
BEGIN
DECLARE vCurrencyDated DATE;
SELECT IF(DATE(shipped) < util.VN_CURDATE(), shipped, util.yesterday()) INTO vCurrencyDated
FROM ticket
WHERE id = vSelf;
RETURN vCurrencyDated;
END$$
DELIMITER ;

View File

@ -0,0 +1,23 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`ticket_getCurrencyRate`(
vSelf INT,
vCurrencyFk SMALLINT
)
RETURNS DECIMAL(10,2)
NOT DETERMINISTIC
READS SQL DATA
BEGIN
/**
* Returns the rate exchange based on the specified currency for a ticket
*
* @param vSelf The ticket id
* @param vCurrencyFk The currency id, if is null, get the currency of the ticket
* @return The rate of currency exchange
*/
SELECT IFNULL(vCurrencyFk, currencyFk) INTO vCurrencyFk
FROM ticket
WHERE id = vSelf;
RETURN currency_getRate(vCurrencyFk, ticket_getCurrencyDate(vSelf));
END$$
DELIMITER ;

View File

@ -19,6 +19,6 @@ BEGIN
WHERE t.id = vTicketFk WHERE t.id = vTicketFk
GROUP BY sc.saleFk) sub ON sub.saleFk = s.id GROUP BY sc.saleFk) sub ON sub.saleFk = s.id
SET s.price = sub.price, SET s.price = sub.price,
s.foreignPrice = currency_getRate(sub.currencyFk, NULL) * sub.price; s.foreignPrice = ticket_getCurrencyRate(vTicketFk) * sub.price;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -26,9 +26,15 @@ BEGIN
i.category, i.category,
IFNULL(s.quantity, 0) quantity, IFNULL(s.quantity, 0) quantity,
IFNULL(s.price, 0) price, IFNULL(s.price, 0) price,
IFNULL(s.foreignPrice, 0) foreignPrice, ROUND(IFNULL(
IFNULL(
s.foreignPrice,
s.price * ticket_getCurrencyRate(vTicketFk, vCurrencyFk)
) , 0
), 2) foreignPrice,
ROUND(SUM(tc.cost), 2) newPrice, ROUND(SUM(tc.cost), 2) newPrice,
s.id saleFk s.id saleFk,
ticket_getCurrencyRate(vTicketFk, vCurrencyFk) currencyRate
FROM vn.sale s FROM vn.sale s
JOIN vn.item i ON i.id = s.itemFk JOIN vn.item i ON i.id = s.itemFk
JOIN vn.ticket t ON t.id = s.ticketFk JOIN vn.ticket t ON t.id = s.ticketFk
@ -43,9 +49,9 @@ BEGIN
GROUP BY s.id ORDER BY s.id GROUP BY s.id ORDER BY s.id
) SELECT ) SELECT
*, *,
currency_getRate(vCurrencyFk, NULL) * newPrice newForeignPrice, ROUND(currencyRate * newPrice, 2) newForeignPrice,
quantity * (price - newPrice) difference, quantity * (newPrice - price) difference,
quantity * (foreignPrice - currency_getRate(vCurrencyFk, NULL) * newPrice) foreignDifference quantity * (ROUND(currencyRate * newPrice, 2) - foreignPrice ) foreignDifference
FROM ticketPriceDifference; FROM ticketPriceDifference;
DROP TEMPORARY TABLE tmp.ticketComponentPreview; DROP TEMPORARY TABLE tmp.ticketComponentPreview;

View File

@ -3,7 +3,8 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sale_beforeInsert`
BEFORE INSERT ON `sale` BEFORE INSERT ON `sale`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId(),
SET NEW.originalQuantity = NEW.quantity; NEW.originalQuantity = NEW.quantity,
NEW.currencyDated = ticket_getCurrencyDate(NEW.ticketFk);
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -8,7 +8,8 @@ BEGIN
CALL util.throw('Cannot insert a service item into a ticket'); CALL util.throw('Cannot insert a service item into a ticket');
END IF; END IF;
*/ */
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId(),
NEW.currencyDated = ticket_getCurrencyDate(NEW.ticketFk);
IF NEW.discount > 100 THEN IF NEW.discount > 100 THEN
SET NEW.discount = 0; SET NEW.discount = 0;
@ -19,5 +20,9 @@ BEGIN
SET originFk = NEW.ticketFk, userFk = account.myUser_getId(), `action` = 'insert', SET originFk = NEW.ticketFk, userFk = account.myUser_getId(), `action` = 'insert',
description = CONCAT('Cambio de descuento del item :', ' ', new.itemFk, ' de ', old.discount ,' a 0 '); description = CONCAT('Cambio de descuento del item :', ' ', new.itemFk, ' de ', old.discount ,' a 0 ');
END IF; END IF;
IF NOT(NEW.price <=> OLD.price) THEN
SET NEW.currencyDated = ticket_getCurrencyDate(NEW.ticketFk);
END IF;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -76,6 +76,8 @@ UPDATE vn.client c
SET c.defaultCompanyFk = co.companyFk, SET c.defaultCompanyFk = co.companyFk,
c.defaultCurrencyFk = co.currencyFk; c.defaultCurrencyFk = co.currencyFk;
ALTER TABLE vn.sale ADD currencyDated DATE DEFAULT NULL;