DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`zone_getAddresses`(
	vSelf INT,
	vShipped DATE,
	vDepartmentFk INT
)
BEGIN
/**
 * Devuelve un listado de todos los clientes activos
 * con consignatarios a los que se les puede
 * vender producto para esa zona.
 *
 * @param vSelf Id de zona
 * @param vShipped Fecha de envio
 * @param vDepartmentFk Id de departamento
 * @return Un select
 */
	CALL zone_getPostalCode(vSelf);

	WITH clientWithTicket AS (
		SELECT clientFk
			FROM vn.ticket
			WHERE shipped BETWEEN vShipped AND util.dayEnd(vShipped)
				AND NOT isDeleted
	)
	SELECT c.id,
			c.name,
			c.phone,
			bt.description,
			c.salesPersonFk,
			u.name username,
			aai.invoiced,
			cnb.lastShipped,
			cwt.clientFk
		FROM vn.client c
			JOIN vn.worker w ON w.id = c.salesPersonFk
			JOIN vn.workerDepartment wd ON wd.workerFk = w.id
			JOIN vn.department d ON d.id = wd.departmentFk
			LEFT JOIN clientWithTicket cwt ON cwt.clientFk = c.id
			LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
			JOIN vn.`address` a ON a.clientFk = c.id
			JOIN vn.postCode pc ON pc.code = a.postalCode
			JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
			JOIN vn.zoneGeo zg ON zg.name = a.postalCode
			JOIN tmp.zoneNodes zn ON zn.geoFk = pc.geoFk
			LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
			LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
			JOIN vn.clientType ct ON ct.code = c.typeFk
			JOIN vn.businessType bt ON bt.code = c.businessTypeFk
		WHERE a.isActive
			AND c.isActive
			AND ct.code = 'normal'
			AND bt.code <> 'worker'
			AND (d.id = vDepartmentFk OR vDepartmentFk IS NULL)
			AND vn.address_hasDelivery(c.defaultAddressFk, vShipped)
		GROUP BY c.id;

	DROP TEMPORARY TABLE tmp.zoneNodes;
END$$
DELIMITER ;
