DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`shelving_clean`()
BEGIN

	DELETE FROM shelving
		WHERE length(code) > 3
			AND parked < TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());
	
	DELETE FROM itemShelving
		WHERE visible <= 0
		AND created < TIMESTAMPADD(MONTH,-1,util.VN_CURDATE());

	DELETE ish.* 
		FROM itemShelving ish
			JOIN vn.shelving sh ON sh.id = ish.shelvingFk
			WHERE sh.parkingFk IS NULL
			AND ish.created < TIMESTAMPADD(WEEK,-1,util.VN_CURDATE());

UPDATE shelving sh
	LEFT JOIN itemShelving its ON its.shelvingFk = sh.id
		SET isPrinted = 0,
		parkingFk = NULL
	WHERE its.id IS NULL
		AND sh.isRecyclable
		AND (
			sh.parked IS NULL
			OR
			sh.parked < util.VN_CURDATE() - INTERVAL 2 WEEK
		)
		AND IF(code REGEXP '^[A-Za-z]{2}[0-9]', LEFT (code, 2) NOT IN (
				SELECT DISTINCT LEFT(sh.code, 2)
					FROM itemShelving its
						JOIN shelving sh ON sh.id = its.shelvingFk
					WHERE sh.code REGEXP '^[A-Za-z]{2}[0-9]'
				), TRUE);

END$$
DELIMITER ;