DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemProposal`(vItemFk INT, vTicketFk INT,vShowType BOOL)
BEGIN

/**
 * Propone articulos disponible ordenado, con la cantidad de veces usado y segun sus caracteristicas
 *
 * @param vItemFk item id
 * @param vTicketFk ticket id
 * @param vShowType mostrar tipos
 */

	DECLARE vWarehouseFk INT;
	DECLARE vShipped DATE;
	DECLARE vCalcFk INT;
	DECLARE vTypeFk INT;

	DECLARE vTag1 VARCHAR(25);
	DECLARE vTag5 VARCHAR(25);
	DECLARE vTag6 VARCHAR(25);
	DECLARE vTag7 VARCHAR(25);
	DECLARE vTag8 VARCHAR(25);

	DECLARE vValue1 VARCHAR(50);
	DECLARE vValue5 VARCHAR(50);
	DECLARE vValue6 VARCHAR(50);
	DECLARE vValue7 VARCHAR(50);
	DECLARE vValue8 VARCHAR(50);

	SELECT warehouseFk, shipped INTO vWarehouseFk, vShipped
		FROM vn.ticket
		WHERE id = vTicketFk;

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

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

	SELECT i.id itemFk,
			i.longName,
			i.subName,
			i.tag5,
			i.value5,
			(i.value5 <=> vValue5 COLLATE utf8_general_ci) match5,
			i.tag6,
			i.value6,
			(i.value6 <=> vValue6 COLLATE utf8_general_ci) match6,
			i.tag7,
			i.value7,
			(i.value7 <=> vValue7 COLLATE utf8_general_ci) match7,
			i.tag8,
			i.value8,
			(i.value8 <=> vValue8 COLLATE utf8_general_ci) match8,
			a.available,
			IFNULL(ip.counter,0) counter,
			IF(b.groupingMode = 1, b.grouping, b.packing) as minQuantity,
			iss.visible located
		FROM item i
			JOIN cache.available a ON a.item_id = i.id
			LEFT JOIN itemProposal ip ON ip.mateFk = i.id AND ip.itemFk = vItemFk
			LEFT JOIN itemTag it1 ON it1.itemFk = i.id AND it1.priority = 1
			LEFT JOIN tag t1 ON t1.id = it1.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.calc_id = vCalcFk
			AND available > 0
			AND IF(vShowType,i.typeFk = vTypeFk,true)
			AND i.id != vItemFk
		ORDER BY counter DESC,
			(t1.name = vTag1 COLLATE utf8_general_ci) DESC,
			(it1.value = vValue1 COLLATE utf8_general_ci) DESC,
			(i.tag5 = vTag5 COLLATE utf8_general_ci) DESC,
			(i.value5 = vValue5 COLLATE utf8_general_ci) DESC,
			(i.tag6 = vTag6 COLLATE utf8_general_ci) DESC,
			(i.value6 = vValue6 COLLATE utf8_general_ci) DESC,
			(i.tag7 = vTag7 COLLATE utf8_general_ci) DESC,
			(i.value7 = vValue7 COLLATE utf8_general_ci) DESC,
			(i.tag8 = vTag8 COLLATE utf8_general_ci) DESC,
			(i.value8 = vValue8 COLLATE utf8_general_ci) DESC;

END$$
DELIMITER ;
