DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`clean`()
BEGIN
	DECLARE vDateShort DATETIME;
	DECLARE vOneYearAgo DATE;
	DECLARE vFourYearsAgo DATE;
	DECLARE vFiveYearsAgo DATE;
	DECLARE v18Month DATE;
	DECLARE v26Month DATE;
	DECLARE v3Month DATE;
	DECLARE vTrashId VARCHAR(15);
	DECLARE v2Years DATE;
	DECLARE v5Years DATE;

	SET vDateShort = util.VN_CURDATE() - INTERVAL 2 MONTH;
	SET vOneYearAgo = util.VN_CURDATE() - INTERVAL 1 YEAR;
	SET vFourYearsAgo = util.VN_CURDATE() - INTERVAL 4 YEAR;
	SET vFiveYearsAgo = util.VN_CURDATE() - INTERVAL 5 YEAR;
	SET v18Month = util.VN_CURDATE() - INTERVAL 18 MONTH;
	SET v26Month = util.VN_CURDATE() - INTERVAL 26 MONTH;
	SET v3Month = util.VN_CURDATE() - INTERVAL 3 MONTH;
	SET v2Years = util.VN_CURDATE() - INTERVAL 2 YEAR;
	SET v5Years = util.VN_CURDATE() - INTERVAL 5 YEAR;

	DELETE FROM workerActivity WHERE created < v2Years;
	DELETE FROM ticketParking WHERE created < vDateShort;
	DELETE FROM routesMonitor WHERE dated < vDateShort;
	DELETE FROM workerTimeControlLog WHERE created < vDateShort;
	DELETE FROM `message` WHERE sendDate < vDateShort;
	DELETE FROM messageInbox WHERE sendDate < vDateShort;
	DELETE FROM messageInbox WHERE sendDate < vDateShort;
	DELETE FROM workerTimeControl WHERE timed < vFourYearsAgo;
	DELETE FROM itemShelving WHERE created < util.VN_CURDATE() AND visible = 0;
	DELETE FROM ticketDown WHERE created < TIMESTAMPADD(DAY,-1,util.VN_CURDATE());
	DELETE FROM entryLog WHERE creationDate < vDateShort;
	DELETE IGNORE FROM expedition WHERE created < v26Month;
	DELETE FROM sms WHERE created < v18Month;
	DELETE FROM saleTracking WHERE created < vOneYearAgo;
	DELETE FROM ticketTracking WHERE created < v18Month;
	DELETE tobs FROM ticketObservation tobs 
		JOIN ticket t ON tobs.ticketFk = t.id
		WHERE t.shipped < v5Years;
	DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < vOneYearAgo;
	DELETE FROM sharingCart where ended < vDateShort;
	DELETE FROM sharingClient where ended < vDateShort;
	DELETE tw.* FROM ticketWeekly tw
			LEFT JOIN sale s ON s.ticketFk = tw.ticketFk
			LEFT JOIN ticketRequest tr ON tr.ticketFk = tw.ticketFk
			LEFT JOIN ticketService ts ON ts.ticketFk = tw.ticketFk
		WHERE s.id IS NULL
			AND tr.id IS NULL
			AND ts.id IS NULL;
	DELETE FROM claim WHERE ticketCreated < vFourYearsAgo;
	DELETE FROM message WHERE sendDate < vDateShort;
	-- Robert ubicacion anterior de trevelLog comentario para debug
	DELETE FROM zoneEvent WHERE `type` = 'day' AND dated < v3Month;
	DELETE bm
		FROM buyMark bm
			JOIN buy b ON b.id = bm.id
			JOIN entry e ON e.id = b.entryFk
			JOIN travel t ON t.id = e.travelFk
		WHERE t.landed <= vDateShort;
	DELETE b FROM vn.buy b
			JOIN vn.entryConfig e ON e.defaultEntry = b.entryFk
		WHERE b.created < vDateShort;
	DELETE FROM vn.itemShelvingLog WHERE created < vDateShort;
	DELETE FROM vn.stockBuyed WHERE creationDate < vDateShort;
	DELETE FROM vn.itemCleanLog WHERE created < util.VN_NOW() - INTERVAL 1 YEAR;
	DELETE FROM printQueue WHERE statusCode = 'printed' AND created < vDateShort;
	DELETE FROM ticketLog WHERE creationDate <= vFiveYearsAgo;
	-- Equipos duplicados
	DELETE w.*
		FROM workerTeam w
		JOIN (SELECT id, team, workerFk, COUNT(*) - 1 as duplicated
				FROM workerTeam
				GROUP BY team,workerFk
				HAVING duplicated
			 ) d ON d.team = w.team AND d.workerFk = w.workerFk AND d.id != w.id;

	DELETE sc
		FROM  saleComponent sc
			JOIN sale s ON s.id=  sc.saleFk
			JOIN ticket t ON t.id= s.ticketFk
		WHERE t.shipped < v18Month;

	DELETE c
		FROM vn.claim c
			JOIN vn.claimState cs ON cs.id = c.claimStateFk
		WHERE cs.description = "Anulado" AND
			c.created < vDateShort;
	DELETE
		FROM vn.expeditionTruck
		WHERE eta < v3Month;

	DELETE FROM XDiario WHERE FECHA < v3Month OR FECHA IS NULL;
	-- borrar travels sin entradas
	DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete;
	CREATE TEMPORARY TABLE tmp.thermographToDelete
		SELECT th.id,th.dmsFk
		FROM vn.travel t
			LEFT JOIN vn.entry e ON e.travelFk = t.id
			JOIN vn.travelThermograph th ON th.travelFk = t.id
		WHERE t.shipped < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND e.travelFk IS NULL;

	SELECT dt.id INTO vTrashId
		FROM vn.dmsType dt
		WHERE dt.code = 'trash';

	UPDATE tmp.thermographToDelete th
		JOIN vn.dms d ON d.id = th.dmsFk
		SET d.dmsTypeFk = vTrashId;

	DELETE th
		FROM tmp.thermographToDelete tmp
		JOIN vn.travelThermograph th ON th.id = tmp.id;

	DELETE t
		FROM vn.travel t
		LEFT JOIN vn.entry e ON e.travelFk = t.id
		WHERE t.shipped < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND e.travelFk IS NULL;
	
	UPDATE dms d
			JOIN dmsType dt ON dt.id = d.dmsTypeFk 
		SET d.dmsTypeFk = vTrashId 
		WHERE created < TIMESTAMPADD(MONTH, -dt.monthToDelete, util.VN_CURDATE());
	
	-- borrar entradas sin compras
	DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
	CREATE TEMPORARY TABLE tmp.entryToDelete
		SELECT e.*
			FROM vn.entry e
			LEFT JOIN vn.buy b ON b.entryFk = e.id
			JOIN vn.entryConfig  ec ON e.id != ec.defaultEntry
		WHERE e.dated < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND b.entryFK IS NULL;

	DELETE e
		FROM vn.entry e
		JOIN tmp.entryToDelete tmp ON tmp.id = e.id;

	-- borrar de route registros menores a 4 años
	DROP TEMPORARY TABLE IF EXISTS tmp.routeToDelete;
	CREATE TEMPORARY TABLE tmp.routeToDelete
		SELECT *
		FROM vn.route r
		WHERE created < TIMESTAMPADD(YEAR,-4,util.VN_CURDATE());   

	UPDATE tmp.routeToDelete tmp
		JOIN vn.dms d ON d.id = tmp.gestdocFk
		SET d.dmsTypeFk = vTrashId;

	DELETE r
		FROM tmp.routeToDelete tmp
		JOIN vn.route r ON  r.id = tmp.id;

	-- borrar registros de dua y awb menores a 2 años
	DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete;
	CREATE TEMPORARY TABLE tmp.duaToDelete
		SELECT *
			FROM vn.dua
			WHERE operated < TIMESTAMPADD(YEAR,-2,CURDATE());

	UPDATE  tmp.duaToDelete tm
		JOIN vn.dms d ON d.id = tm.gestdocFk
		SET d.dmsTypeFk = vTrashId;

	DELETE d
		FROM tmp.duaToDelete tmp
		JOIN vn.dua d ON d.id = tmp.id;

	DELETE a
		FROM vn.awb a
			LEFT JOIN vn.travel t ON t.awbFk = a.id
		WHERE a.created < v2Years
			AND t.id IS NULL;

	-- Borra los registros de collection y ticketcollection
	DELETE FROM vn.collection  WHERE created < vDateShort;

	DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete;
	DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
	DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete;

	DELETE FROM travelLog WHERE creationDate < v3Month;

	CREATE OR REPLACE TEMPORARY TABLE tTicketDelete
	SELECT DISTINCT tl.originFk ticketFk, sub.ticketFk aa
		FROM ticketLog tl
			JOIN (
				SELECT MAX(tl.id)ids,tw.ticketFk
					FROM ticket t
						JOIN ticketLog tl ON tl.originFk = t.id
						LEFT JOIN ticketWeekly tw ON tw.ticketFk =t.id
					WHERE t.shipped BETWEEN '2000-01-01' AND '2000-12-31' 
						AND t.isDeleted
						AND tw.ticketFk IS NULL
					GROUP BY t.id
			) sub ON sub.ids = tl.id 
		WHERE tl.creationDate <= util.VN_CURDATE() - INTERVAL 60 DAY;

	DELETE t
		FROM ticket t
			JOIN tTicketDelete tmp ON tmp.ticketFk = t.id;

	DROP TEMPORARY TABLE tTicketDelete;

	CALL shelving_clean;

	DELETE FROM chat WHERE dated < v5Years;

	DELETE tt FROM ticketTracking tt JOIN vn.ticket t ON tt.ticketFk = t.id
		WHERE t.shipped <= vDateShort;

END$$
DELIMITER ;
