DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getSimilar`(
	vSelf INT,
	vWarehouseFk INT,
	vDated DATE,
	vShowType BOOL
)
BEGIN
/**
* Propone articulos disponibles ordenados, con la cantidad
* de veces usado y segun sus caracteristicas.
*
* @param vSelf Id de artículo
* @param vWarehouseFk Id de almacen
* @param vDated Fecha
* @param vShowType Mostrar tipos
*/
	DECLARE vCalcFk INT;
	DECLARE vTypeFk INT;
	DECLARE vPriority INT DEFAULT 1;

	DECLARE vTag1 VARCHAR(20) COLLATE 'utf8_unicode_ci';
	DECLARE vTag5 VARCHAR(20) COLLATE 'utf8_unicode_ci';
	DECLARE vTag6 VARCHAR(20) COLLATE 'utf8_unicode_ci';
	DECLARE vTag7 VARCHAR(20) COLLATE 'utf8_unicode_ci';
	DECLARE vTag8 VARCHAR(20) COLLATE 'utf8_unicode_ci';

	DECLARE vValue1 VARCHAR(50) COLLATE 'utf8_unicode_ci';
	DECLARE vValue5 VARCHAR(50) COLLATE 'utf8_unicode_ci';
	DECLARE vValue6 VARCHAR(50) COLLATE 'utf8_unicode_ci';
	DECLARE vValue7 VARCHAR(50) COLLATE 'utf8_unicode_ci';
	DECLARE vValue8 VARCHAR(50) COLLATE 'utf8_unicode_ci';

	SELECT typeFk,
			tag5,
			value5,
			tag6,
			value6,
			tag7,
			value7,
			tag8,
			value8,
			t.name,
			it.value
		INTO vTypeFk,
				vTag5,
				vValue5,
				vTag6,
				vValue6,
				vTag7,
				vValue7,
				vTag8,
				vValue8,
				vTag1,
				vValue1
		FROM item i
			LEFT JOIN itemTag it ON it.itemFk = i.id
				AND it.priority = vPriority
			LEFT JOIN tag t ON t.id = it.tagFk
		WHERE i.id = vSelf;

	CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, vDated);

	SELECT i.id itemFk,
			i.longName,
			i.subName,
			i.tag5,
			i.value5,
			(i.value5 <=> vValue5) match5,
			i.tag6,
			i.value6,
			(i.value6 <=> vValue6) match6,
			i.tag7,
			i.value7,
			(i.value7 <=> vValue7) match7,
			i.tag8,
			i.value8,
			(i.value8 <=> vValue8) match8,
			a.available,
			IFNULL(ip.counter, 0) `counter`,
			IF(b.groupingMode = 1, b.grouping, b.packing) minQuantity,
			iss.visible located
		FROM item i
			STRAIGHT_JOIN cache.available a ON a.item_id = i.id
				AND a.calc_id = vCalcFk
			LEFT JOIN itemProposal ip ON ip.mateFk = i.id
				AND ip.itemFk = vSelf
			LEFT JOIN itemTag it ON it.itemFk = i.id
				AND it.priority = vPriority
			LEFT JOIN tag t ON t.id = it.tagFk
			LEFT JOIN cache.last_buy lb ON lb.item_id = i.id
				AND lb.warehouse_id = vWarehouseFk
			LEFT JOIN buy b ON b.id = lb.buy_id
			LEFT JOIN itemShelvingStock iss ON iss.itemFk = i.id
				AND iss.warehouseFk = vWarehouseFk
		WHERE a.available > 0
			AND IF(vShowType, i.typeFk = vTypeFk, TRUE)
			AND i.id <> vSelf
		ORDER BY `counter` DESC,
			(t.name = vTag1) DESC,
			(it.value = vValue1) DESC,
			(i.tag5 = vTag5) DESC,
			match5 DESC,
			(i.tag6 = vTag6) DESC,
			match6 DESC,
			(i.tag7 = vTag7) DESC,
			match7 DESC,
			(i.tag8 = vTag8) DESC,
			match8 DESC;
END$$
DELIMITER ;
