salix/db/routines/vn/procedures/route_getTickets.sql

73 lines
2.0 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`route_getTickets`(vRouteFk INT)
BEGIN
/**
* Pasado un RouteFk devuelve la información
* de sus tickets.
*
* @param vRouteFk
* @select Información de los tickets
*/
SELECT t.id Id,
t.clientFk Client,
a.id Address,
a.nickname ClientName,
t.packages Packages,
a.street AddressName,
a.postalCode PostalCode,
a.city City,
sub3.itemPackingTypeFk PackingType,
c.phone ClientPhone,
c.mobile ClientMobile,
a.phone AddressPhone,
a.mobile AddressMobile,
d.longitude Longitude,
d.latitude Latitude,
wm.mediaValue SalePersonPhone,
tob.description Note,
t.isSigned Signed,
t.priority,
t.cmrFk
FROM ticket t
JOIN client c ON t.clientFk = c.id
JOIN address a ON t.addressFk = a.id
LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk
LEFT JOIN (
SELECT t.addressFk, MAX(d.ticketFk) lastTicketFk
FROM ticket t
JOIN delivery d ON t.id = d.ticketFk
JOIN ticket ti ON ti.routeFk = vRouteFk
AND ti.id = t.id
AND ti.clientFk = t.clientFk
GROUP BY addressFk
)sub ON sub.addressFk = a.id
LEFT JOIN delivery d ON d.ticketFk = sub.lastTicketFk
LEFT JOIN(
SELECT t.id ticketFk, tob.description
FROM ticketObservation tob
JOIN ticket t ON tob.ticketFk = t.id
JOIN observationType ot ON ot.id = tob.observationTypeFk
WHERE t.routeFk = vRouteFk
AND ot.code = 'delivery'
)tob ON tob.ticketFk = t.id
LEFT JOIN(
SELECT sub2.ticketFk,
CONCAT('(',
GROUP_CONCAT(DISTINCT sub2.itemPackingTypeFk
ORDER BY sub2.items DESC SEPARATOR ','),
') ') itemPackingTypeFk
FROM (
SELECT s.ticketFk, i.itemPackingTypeFk, COUNT(*) items
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
WHERE t.routeFk = vRouteFk
GROUP BY t.id, i.itemPackingTypeFk
)sub2
GROUP BY sub2.ticketFk
)sub3 ON sub3.ticketFk = t.id
WHERE t.routeFk = vRouteFk
ORDER BY priority, Id;
END$$
DELIMITER ;