
DROP PROCEDURE IF EXISTS `vn`.`route_getTickets`;

DELIMITER $$
$$
CREATE 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	*
	FROM (
		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,
				sub2.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
			FROM ticket t
				JOIN client c ON t.clientFk = c.id
				JOIN address a ON t.addressFk = a.id
				LEFT JOIN delivery d ON d.ticketFk = t.id
				LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk
				LEFT JOIN(
					SELECT tob.description, t.id
						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.id = t.id
				LEFT JOIN(
					SELECT sub.ticketFk,
							CONCAT('(',
								GROUP_CONCAT(DISTINCT sub.itemPackingTypeFk
									ORDER BY sub.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
						)sub
						GROUP BY sub.ticketFk
				)sub2 ON sub2.ticketFk = t.id
			WHERE t.routeFk = vRouteFk
			ORDER BY d.id DESC
			LIMIT 10000000000000000000
	)sub3
	GROUP BY sub3.id
	ORDER BY sub3.priority;
END$$
DELIMITER ;

ALTER TABLE `vn`.`delivery` DROP COLUMN addressFk;
