SELECT  usuarios.id as idUsuario,
        usuarios.nombre as nombreUsuario,
		calendario.fecha,
		calendario.year,
        calendario.mes,
        calendario.dia,
        calendario.nDiaSemana,
        calendario.nSemana,
        calendario.trimestre,
        IFNULL(
            (SELECT usuarios.horasD1 
             FROM usuarios 
             WHERE calendario.nDiaSemana = 2 
             LIMIT 1), 0) AS horasD1,
        IFNULL(
            (SELECT usuarios.horasD2 
             FROM usuarios 
             WHERE calendario.nDiaSemana = 3 
             LIMIT 1), 0) AS horasD2,
        IFNULL(
            (SELECT usuarios.horasD3 
             FROM usuarios 
             WHERE calendario.nDiaSemana = 4 
             LIMIT 1), 0) AS horasD3,
        IFNULL(
            (SELECT usuarios.horasD4 
             FROM usuarios 
             WHERE calendario.nDiaSemana = 5 
             LIMIT 1), 0) AS horasD4,
        IFNULL(
            (SELECT usuarios.horasD5 
             FROM usuarios 
             WHERE calendario.nDiaSemana = 6 
             LIMIT 1), 0) AS horasD5     
FROM `calendario` , usuarios 
WHERE esFinSemana = 0 and esFeriado = 0
and usuarios.estado = 1 ;




DELIMITER $$

CREATE PROCEDURE obtener_horas_habiles_mes(
    IN p_month INT,  -- Parámetro de mes (1 a 12)
    IN p_year INT    -- Parámetro de año
)
BEGIN
    -- Declarar las fechas de inicio y fin del rango
    DECLARE v_fecha_inicio DATE;
    DECLARE v_fecha_fin DATE;

    -- Si el mes es enero, consideramos diciembre del año anterior
    IF p_month = 1 THEN
        -- Calculamos el 21 de diciembre del año anterior
        SET v_fecha_inicio = DATE(CONCAT(p_year - 1, '-12-21')); 
        -- Calculamos el 20 de enero del año actual
        SET v_fecha_fin = DATE(CONCAT(p_year, '-01-20'));
    ELSE
        -- Para otros meses, calculamos el 21 del mes anterior
        SET v_fecha_inicio = DATE_SUB(DATE(CONCAT(p_year, '-', LPAD(p_month, 2, '0'), '-01')), INTERVAL 1 MONTH) + INTERVAL 20 DAY;
        
        -- Calculamos el 20 del mes actual
        SET v_fecha_fin = DATE(CONCAT(p_year, '-', LPAD(p_month, 2, '0'), '-01')) + INTERVAL 19 DAY;
    END IF;

    -- Ejecutar la consulta utilizando las fechas calculadas
    SELECT 
        v_calendario.idUsuario,
        v_calendario.nombreUsuario,
        SUM(v_calendario.horasD1) + 
        SUM(v_calendario.horasD2) + 
        SUM(v_calendario.horasD3) + 
        SUM(v_calendario.horasD4) + 
        SUM(v_calendario.horasD5) AS horas
        -- ,v_calendario.mes,
        -- v_calendario.year
    FROM 
        v_calendario
    WHERE 
        -- v_calendario.idUsuario = 1 
        v_calendario.fecha >= v_fecha_inicio
        AND v_calendario.fecha <= v_fecha_fin
    GROUP BY v_calendario.idUsuario;
END $$

DELIMITER ;


UPDATE timecontrollings
JOIN usuarios ON timecontrollings.usuario = usuarios.id
SET timecontrollings.horas = (timecontrollings.porcentaje * usuarios.horasD5 / 100)
WHERE timecontrollings.fecha = '2024-12-27'

SHOW PROCEDURE STATUS WHERE Db = '[cdt_timecontroling]';

DELETE FROM `timecontrollings` WHERE timecontrollings.usuario = 1 and YEAR(fecha)>=2024;
