feat: refs #3199 Added one more scope ticketTotal #2447

Merged
guillermo merged 15 commits from 3199-ticket_recalc_itemTaxCountry into dev 2024-08-21 12:32:28 +00:00
1 changed files with 21 additions and 8 deletions

View File

@ -14,16 +14,28 @@ BEGIN
DECLARE vTicketFk INT; DECLARE vTicketFk INT;
DECLARE cTickets CURSOR FOR DECLARE cTickets CURSOR FOR
SELECT id FROM ticket SELECT DISTINCT t.id
WHERE refFk IS NULL FROM ticket t
AND ((vScope = 'client' AND clientFk = vId) LEFT JOIN tItems ti ON ti.id = t.id
OR (vScope = 'address' AND addressFk = vId)); WHERE t.refFk IS NULL
guillermo marked this conversation as resolved
Review

Porque se hace JOIN con itemTaxCountry si no se utiliza ninguno de los campos de la tabla?

Para filtrar por itemFk puede hacerse utilizando directamente s.itemFk

Porque se hace JOIN con `itemTaxCountry` si no se utiliza ninguno de los campos de la tabla? Para filtrar por `itemFk` puede hacerse utilizando directamente `s.itemFk`
Review

Porque quiero que tenga registro en la tabla itemTaxCountry, si no no tiene sentido

Porque quiero que tenga registro en la tabla `itemTaxCountry`, si no no tiene sentido
AND ((vScope = 'client' AND t.clientFk = vId)
OR (vScope = 'address' AND t.addressFk = vId)
guillermo marked this conversation as resolved
Review

Si se pasa la columna t.shipped por la funcion DATE no se utilizara el indice y la tabla ticket es demasiado grande como para aplicar filtros sin índice.

Ademas, el filtro no aplica, ya que en caso de recalcular totales, queremos hacerlo de todos aquellos tickets no facturados.

Si se pasa la columna `t.shipped` por la funcion `DATE` no se utilizara el indice y la tabla `ticket` es demasiado grande como para aplicar filtros sin índice. Ademas, el filtro no aplica, ya que en caso de recalcular totales, queremos hacerlo de todos aquellos tickets no facturados.
OR (vScope = 'item' AND ti.id)
);
guillermo marked this conversation as resolved Outdated

Juan:

Generar una tabla temporal para que solo pase por sale y itemTaxCountry cuando sea vScope = 'item'.

Juan: Generar una tabla temporal para que solo pase por sale y itemTaxCountry cuando sea vScope = 'item'.
DECLARE CONTINUE HANDLER FOR NOT FOUND DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
SET vDone = TRUE;
CREATE OR REPLACE TEMPORARY TABLE tItems
guillermo marked this conversation as resolved
Review

pk y engine

pk y engine
(PRIMARY KEY (id))
ENGINE = MEMORY
SELECT DISTINCT t.id
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN itemTaxCountry itc ON itc.itemFk = s.itemFk
WHERE t.refFk IS NULL
AND (vScope = 'item' AND itc.itemFk = vId);
OPEN cTickets; OPEN cTickets;
myLoop: LOOP myLoop: LOOP
SET vDone = FALSE; SET vDone = FALSE;
FETCH cTickets INTO vTicketFk; FETCH cTickets INTO vTicketFk;
@ -34,7 +46,8 @@ BEGIN
CALL ticket_recalc(vTicketFk, NULL); CALL ticket_recalc(vTicketFk, NULL);
END LOOP; END LOOP;
CLOSE cTickets; CLOSE cTickets;
DROP TEMPORARY TABLE tItems;
END$$ END$$
DELIMITER ; DELIMITER ;