DROP PROCEDURE IF EXISTS `vn`.`ticket_getMovable`;

DELIMITER $$
$$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`ticket_getMovable`(vTicketFk INT, vDatedNew DATETIME, vWarehouseFk INT)
BEGIN
/**
 * Cálcula el stock movible para los artículos de un ticket
 * vDatedNew debe ser menor que vDatedOld, en los otros casos se
 * asume que siempre es posible
 *
 * @param vTicketFk -> Ticket
 * @param vDatedNew -> Nueva fecha
 * @return Sales con Movible
*/    
    DECLARE vDatedOld DATETIME;
	SET vDatedNew = DATE_ADD(vDatedNew, INTERVAL 1 DAY);

    SELECT t.shipped INTO vDatedOld
        FROM ticket t 
        WHERE t.id = vTicketFk;

    CALL itemStock(vWarehouseFk, vDatedNew, NULL); 
    CALL item_getMinacum(vWarehouseFk, vDatedNew, DATEDIFF(DATE_SUB(vDatedOld, INTERVAL 1 DAY), vDatedNew), NULL);
	
    SELECT s.id, 
			s.itemFk, 
			s.quantity, 
			s.concept, 
			s.price, 
			s.reserved,
			s.discount,  
			i.image, 
			i.subName, 
			il.stock + IFNULL(im.amount, 0) AS movable
        FROM ticket t
            JOIN sale s ON s.ticketFk = t.id
            JOIN item i ON i.id = s.itemFk 
            LEFT JOIN tmp.itemMinacum im ON im.itemFk = s.itemFk AND im.warehouseFk = vWarehouseFk
            LEFT JOIN tmp.itemList il ON il.itemFk = s.itemFk
        WHERE t.id = vTicketFk;

    DROP TEMPORARY TABLE IF EXISTS tmp.itemList;
    DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum;
END$$
DELIMITER ;
