DELETE FROM `salix`.`ACL` WHERE model="SaleChecked";
DROP TABLE IF EXISTS `vn`.`saleChecked`;
DROP PROCEDURE IF EXISTS `vn`.`clean`;

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

	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 v18Month = util.VN_CURDATE() - INTERVAL 18 MONTH;
	SET v26Month = util.VN_CURDATE() - INTERVAL 26 MONTH;
	SET v3Month = util.VN_CURDATE() - INTERVAL 3 MONTH;

	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 < TIMESTAMPADD(YEAR,-2,util.VN_CURDATE());
	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 WHERE s.itemFk 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 FROM vn.buy WHERE created < vDateShort AND entryFk = 9200;
	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;

	-- 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 ETD < v3Month;

	-- 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,util.VN_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 FROM vn.awb WHERE created < TIMESTAMPADD(YEAR,-2,util.VN_CURDATE());

	-- 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;

	CALL shelving_clean;

END$$
DELIMITER ;