drop procedure `vn`.`ticket_getProblems`;

DELIMITER $$
$$
create
    definer = root@`%` procedure `vn`.`ticket_getProblems`(IN vIsTodayRelative tinyint(1))
BEGIN
/**
 * Calcula los problemas para un conjunto de tickets.
 * Agrupados por ticket
 *
 * @table tmp.sale_getProblems(ticketFk, clientFk, warehouseFk, shipped) Identificadores de los tickets a calcular
 * @return tmp.ticket_problems
 */
    CALL sale_getProblems(vIsTodayRelative);

    DROP TEMPORARY TABLE IF EXISTS tmp.ticket_problems;
    CREATE TEMPORARY TABLE tmp.ticket_problems 
    (INDEX (ticketFk))
    ENGINE = MEMORY
    SELECT 
        ticketFk,
        MAX(p.isFreezed)            AS isFreezed,
        MAX(p.risk)                 AS risk,
        MAX(p.hasTicketRequest)     AS hasTicketRequest,
        MIN(p.isAvailable)          AS isAvailable,
        MAX(p.itemShortage)         AS itemShortage,
        MIN(p.isTaxDataChecked)     AS isTaxDataChecked,
        MAX(p.hasComponentLack)     AS hasComponentLack,
        0 AS totalProblems
     FROM tmp.sale_problems p
        GROUP BY ticketFk;

    UPDATE tmp.ticket_problems tp
        SET tp.totalProblems = (
            (tp.isFreezed) +
            IF(tp.risk, TRUE, FALSE) +
            (tp.hasTicketRequest) +
            (tp.isAvailable = 0) +
            (tp.isTaxDataChecked = 0) +
            (tp.hasComponentLack)
        );

    DROP TEMPORARY TABLE
        tmp.sale_problems;
END;;$$
DELIMITER ;
