fix: refs #7213 Hotfix-ticket_isTooLittle-group-by-addressFk #2895

Merged
carlosap merged 3 commits from Hotfix-ticket_isTooLittle-group-by-addressFk into master 2024-08-28 14:41:49 +00:00
2 changed files with 31 additions and 14 deletions

View File

@ -2,7 +2,7 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`ticket_isTooLittle`(
vSelf INT
)
RETURNS tinyint(1)
RETURNS BOOL
READS SQL DATA
BEGIN
/**
@ -11,14 +11,21 @@ BEGIN
* @param vSelf Id ticket
* @return BOOL
*/
DECLARE vIsTooLittle TINYINT(1);
DECLARE vIsTooLittle BOOL;
carlosap marked this conversation as resolved Outdated

BOOL, i dalt en el RETURNS tame BOOL

BOOL, i dalt en el RETURNS tame BOOL
WITH ticketData AS (
carlosap marked this conversation as resolved Outdated

Aço es soles una observació, crec que no te sentit dir-li tickets si soles es 1 ticket, jo li diría ticketAddress o algo per l'estil

Aço es soles una observació, crec que no te sentit dir-li tickets si soles es 1 ticket, jo li diría ticketAddress o algo per l'estil
SELECT addressFk, DATE(shipped) dated
FROM vn.ticket
WHERE id = vSelf
)
SELECT (SUM(IFNULL(sv.litros, 0)) < vc.minTicketVolume
AND IFNULL(t.totalWithoutVat, 0) < vc.minTicketValue) INTO vIsTooLittle
FROM ticket t
LEFT JOIN saleVolume sv ON sv.ticketFk = t.id
JOIN volumeConfig vc
WHERE t.id = vSelf;
AND SUM(IFNULL(t.totalWithoutVat, 0)) < vc.minTicketValue) INTO vIsTooLittle
FROM ticketData td
JOIN vn.ticket t ON t.addressFk = td.addressFk
LEFT JOIN vn.saleVolume sv ON sv.ticketFk = t.id
JOIN vn.volumeConfig vc
WHERE t.shipped BETWEEN td.dated AND util.dayEnd(td.dated)
AND ticket_isProblemCalcNeeded(t.id);
RETURN vIsTooLittle;
END$$

View File

@ -8,17 +8,27 @@ BEGIN
*
* @param vSelf Id del ticket
*/
DECLARE vTicketIsTooLittle BOOL;
SELECT ticket_isTooLittle(vSelf) INTO vTicketIsTooLittle;
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
carlosap marked this conversation as resolved Outdated

Lo mateix que ací #2895 (comment)

Lo mateix que ací https://gitea.verdnatura.es/verdnatura/salix/pulls/2895#issuecomment-61020
(INDEX(ticketFk, isProblemCalcNeeded))
ENGINE = MEMORY
SELECT vSelf ticketFk,
ticket_isTooLittle(vSelf) hasProblem,
ticket_isProblemCalcNeeded(vSelf) isProblemCalcNeeded;
WITH ticketData AS (
SELECT addressFk, DATE(shipped) dated
FROM vn.ticket
carlosap marked this conversation as resolved Outdated

Ací estás pasant per cada ticket per la funció vn.ticket_isTooLittle(), no et fa falta, jo ficaria el SELECT amb el ticket vSelf dalt en una variable, ja que tots els tickets te van a donar lo mateix.

Entenc tot lo demes, ja que si que te interesa cridar a la funció ticket_isProblemCalcNeeded per cada ticket.

Ací estás pasant per cada ticket per la funció `vn.ticket_isTooLittle()`, no et fa falta, jo ficaria el SELECT amb el ticket vSelf dalt en una variable, ja que tots els tickets te van a donar lo mateix. Entenc tot lo demes, ja que si que te interesa cridar a la funció `ticket_isProblemCalcNeeded` per cada ticket.
WHERE id = vSelf
)
SELECT t.id ticketFk,
vTicketIsTooLittle hasProblem,
ticket_isProblemCalcNeeded(t.id) isProblemCalcNeeded
FROM vn.ticket t
JOIN ticketData td ON td.addressFk = t.addressFk
WHERE t.shipped BETWEEN td.dated AND util.dayEnd(td.dated);
CALL ticket_setProblem('isTooLittle');
DROP TEMPORARY TABLE tmp.ticket;
END$$
DELIMITER ;