DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingProblem`(vSectorFk INT)
BEGIN

	DECLARE vVisibleCache INT;
    DECLARE vWarehouseFk INT;
    
    SELECT warehouseFk INTO vWarehouseFk
		FROM vn.sector
        WHERE id = vSectorFk;

	CALL cache.visible_refresh (vVisibleCache, FALSE, vWarehouseFk);
		
	SELECT 	t.id as ticketFk, 
		CAST(s.quantity AS DECIMAL(10,0)) as Cantidad, 
        s.itemFk, 
        s.concept, 
        v.visible - GREATEST(0,iss.visible) + IFNULL(sub3.transit,0) as Nicho, 
        i.subName,
        GREATEST(0,iss.visible - IFNULL(sub3.transit,0)) as Altillo, 
        s.id as saleFk,
        IFNULL(sub3.transit,0)  transit,
        v.visible, s.isPicked, s.reserved, t.shipped, tst.productionOrder, mm.Id_Movimiento
		FROM vn.ticket t 
			JOIN vn.ticketState tst ON tst.ticketFk = t.id
			JOIN vn.sale s ON s.ticketFk = t.id
			JOIN vn.item i ON i.id = s.itemFk
			JOIN cache.visible v ON s.itemFk = v.item_id AND v.calc_id = vVisibleCache
			LEFT JOIN vn2008.Movimientos_mark mm ON mm.Id_Movimiento = s.id AND mm.stateFk = 26
			JOIN vn.itemShelvingStock iss ON iss.itemFk = v.item_id    
            LEFT JOIN
			(SELECT itemFk, sum(saldo) as transit 
				FROM vn.itemPlacementSupplyList 
                WHERE saldo > 0 
					AND sectorFk = vSectorFk
                GROUP BY itemFk) sub3 ON sub3.itemFk = i.id
		WHERE v.visible + IFNULL(sub3.transit,0) - GREATEST(0,iss.visible)  < s.quantity 
			AND IFNULL(sub3.transit,0) < s.quantity
			AND s.isPicked = FALSE 
			AND s.reserved = FALSE
			AND t.shipped BETWEEN util.VN_CURDATE() AND MIDNIGHT(util.VN_CURDATE()) 
			AND tst.isPreviousPreparable = TRUE
			AND t.warehouseFk = vWarehouseFk
            AND iss.sectorFk = vSectorFk
			AND mm.Id_Movimiento IS NULL
		ORDER BY itemFk;
                    
END$$
DELIMITER ;
