
DROP procedure IF EXISTS `vn2008`.`clean`;

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `vn2008`.`clean`(IN `v_full` TINYINT(1))
proc: BEGIN
	DECLARE v_date DATETIME;
	DECLARE v_date18 DATETIME;
	DECLARE v_date26 DATETIME;
	DECLARE v_date8 DATE;
	DECLARE v_date6 DATE;
	DECLARE v_date3Month DATE;
    DECLARE vDate2000 DATE;
    DECLARE vRangeDeleteTicket INT;
	DECLARE strtable varchar(15)  DEFAULT NULL;
	DECLARE done BIT DEFAULT 0;

	SET v_date = TIMESTAMPADD(MONTH, -2, CURDATE());
	SET v_date18 = TIMESTAMPADD(MONTH, -18,CURDATE());
	SET v_date26 = TIMESTAMPADD(MONTH, -26,CURDATE());
	SET v_date3Month = TIMESTAMPADD(MONTH, -3, CURDATE());
	SET v_date8 = TIMESTAMPADD(DAY, -8,CURDATE());
	SET v_date6 = TIMESTAMPADD(DAY, -6,CURDATE());
	SET vRangeDeleteTicket = 60;

	DELETE FROM cdr WHERE calldate < v_date;
	DELETE FROM Monitoring WHERE ODBC_TIME < v_date;
	DELETE FROM Conteo WHERE Fecha < v_date;
	DELETE FROM XDiario WHERE FECHA < v_date3Month OR FECHA IS NULL;
	DELETE FROM mail WHERE DATE_ODBC < v_date;

	-- DELETE FROM Cajas WHERE CajaFecha < v_date18;

	DELETE rr FROM Recibos_recorded rr JOIN Recibos r ON rr.Id_Recibos = r.Id WHERE r.Fechacobro < v_date;

	SELECT MAX(idTickets_dits)
		INTO @id 
		FROM Tickets_dits 
		WHERE ODBC_DATE < v_date;
	DELETE FROM Tickets_dits WHERE idTickets_dits <= @id;

	DELETE FROM expeditions_deleted WHERE odbc_date < v_date26;
	DELETE FROM Entradas_dits WHERE ODBC_DATE < v_date18;
	DELETE FROM log_articles WHERE ODBC_DATE < v_date;
	DELETE FROM Splits WHERE Fecha < v_date18;
	DELETE ts FROM Tickets_stack ts JOIN Tickets t ON ts.Id_Ticket = t.Id_Ticket WHERE t.Fecha < v_date;
	DELETE tobs FROM movement_label tobs JOIN Movimientos m ON tobs.Id_Movimiento = m.Id_Movimiento 
			JOIN Tickets t ON m.Id_Ticket = t.Id_Ticket WHERE t.Fecha < v_date;
	DELETE FROM chat WHERE odbc_date < v_date;
	DELETE FROM Extractos WHERE Fecha < v_date;
	DELETE FROM Remesas WHERE `Fecha Remesa`  < v_date18;
	DELETE FROM Stockcontrol WHERE Datestart < v_date18;
	-- DELETE FROM reference_rate WHERE date < v_date18;
	DELETE FROM hedera.`order` WHERE date_send < v_date18;
    -- DELETE FROM Ordenes WHERE odbc_date < v_date18; JGF 2018-12-21 Si estan en un turno no hay que borrarlas.
    
	SELECT MAX(inter_id)
		INTO @id 
		FROM vncontrol.inter 
		WHERE odbc_date < v_date18;
	DELETE FROM vncontrol.inter WHERE inter_id <= @id;

	DELETE FROM Entradas_dits WHERE ODBC_DATE < v_date;
	DELETE FROM cyc_declaration WHERE Fecha < v_date18;
	DELETE FROM travel_reserve WHERE odbc_date < v_date;
	-- DELETE FROM syslog.systemevents WHERE odbc_date < v_date8;

	DELETE FROM cache.departure_limit WHERE Fecha < TIMESTAMPADD(MONTH,-1,CURDATE());
	DELETE co
		FROM Compres_ok co JOIN Compres c ON c.Id_Compra = co.Id_Compra 
			JOIN Entradas e ON e.Id_Entrada = c.Id_Entrada
			JOIN travel t ON t.id = e.travel_id
		WHERE t.landing <= v_date;

	DELETE FROM vn2008.scan WHERE odbc_date < v_date6 AND id <> 1;
    
	SET vDate2000 = TIMESTAMPADD(YEAR, 2000 - YEAR(CURDATE()), CURDATE());

	IF v_full
    THEN
		DELETE t FROM Tickets t
				LEFT JOIN Tickets_turno tt ON tt.Id_Ticket = t.Id_Ticket
			WHERE Fecha NOT IN ('2000-01-01','2000-01-02')
				AND YEAR(Fecha) = 2000
				AND ABS(DATEDIFF(Fecha,vDate2000)) > vRangeDeleteTicket
                AND tt.Id_Ticket IS NULL;

		DELETE e.* FROM Entradas e
				LEFT JOIN recibida_entrada re ON e.Id_Entrada = re.Id_Entrada
			WHERE travel_id IS NULL 
				AND re.Id_Entrada IS NULL;
	END IF;

	-- Tickets Nulos PAK 11/10/2016

	UPDATE vn2008.Tickets 
		SET empresa_id = 965 
		WHERE Id_Cliente = 31
		AND empresa_id != 965;
		
	-- Equipos duplicados

	DELETE w.* 
		FROM vn2008.workerTeam w
		JOIN (SELECT id, team, workerFk, COUNT(*) - 1 as duplicated
				FROM vn.workerTeam
				GROUP BY team,workerFk
				HAVING duplicated
			 ) d ON d.team = w.team AND d.workerFk = w.user AND d.id != w.id;

    -- CAP 29/10/2018 Mantenimiento tabla Movimientos_componentes 
    
    DELETE mc 
		FROM  vn2008.Movimientos_componentes mc
			JOIN vn2008.Movimientos  mv 
				ON mv.Id_Movimiento=mc.Id_Movimiento
			JOIN vn2008.Tickets t 
				ON t.Id_Ticket= mv.Id_Ticket
		WHERE t.Fecha<v_date18;
END$$

DELIMITER ;

