DELIMITER $$

CREATE PROCEDURE GetHorasPorMes(
    IN p_year INT,      -- Año a filtrar
    IN p_month INT      -- Mes a filtrar
)
BEGIN
    SELECT 
        `r_usuario_centro_costo_sap_dia`.`id` AS `id`,
        `r_usuario_centro_costo_sap_dia`.`usuario` AS `usuario`,
        `r_usuario_centro_costo_sap_dia`.`nombreUsuario` AS `nombreUsuario`,
        `cdt_timecontroling`.`usuarios`.`rut` AS `rut`,
        `cdt_timecontroling`.`areas`.`id` AS `area`,
        `cdt_timecontroling`.`areas`.`nombre` AS `nombreArea`,
        `r_usuario_centro_costo_sap_dia`.`idCentroCostoSap` AS `idCentroCostoSap`,
        `r_usuario_centro_costo_sap_dia`.`codigo` AS `codigo`,
        `r_usuario_centro_costo_sap_dia`.`color` AS `color`,
        `r_usuario_centro_costo_sap_dia`.`nombreCentroCosto` AS `nombreCentroCosto`,
        SUM(`r_usuario_centro_costo_sap_dia`.`horas`) AS `horas`,
        ROUND(SUM(`r_usuario_centro_costo_sap_dia`.`horas`) * 100 / `r_usuario_hora_mes`.`horas`, 2) AS `porcentaje`,
        `r_usuario_centro_costo_sap_dia`.`mes` AS `mes`,
        `r_usuario_centro_costo_sap_dia`.`year` AS `year`,
        `r_usuario_centro_costo_sap_dia`.`createdAt` AS `createdAt`,
        `r_usuario_centro_costo_sap_dia`.`updatedAt` AS `updatedAt`
    FROM 
        (`cdt_timecontroling`.`r_usuario_centro_costo_sap_dia`
        JOIN `cdt_timecontroling`.`r_usuario_hora_mes`) 
        JOIN `cdt_timecontroling`.`usuarios` 
        JOIN `cdt_timecontroling`.`areas`
    WHERE 
        `r_usuario_centro_costo_sap_dia`.`usuario` = `r_usuario_hora_mes`.`usuario`
        AND `r_usuario_centro_costo_sap_dia`.`mes` = `r_usuario_hora_mes`.`mes`
        AND `r_usuario_centro_costo_sap_dia`.`year` = `r_usuario_hora_mes`.`year`
        AND `r_usuario_centro_costo_sap_dia`.`usuario` = `cdt_timecontroling`.`usuarios`.`id`
        AND `r_usuario_hora_mes`.`usuario` = `cdt_timecontroling`.`usuarios`.`id`
        AND `cdt_timecontroling`.`usuarios`.`area` = `cdt_timecontroling`.`areas`.`id`
        -- Filtro por fechas entre el 21 del mes anterior y el 20 del mes filtrado
        AND `r_usuario_centro_costo_sap_dia`.`createdAt` >= DATE_FORMAT(STR_TO_DATE(CONCAT(p_year, '-', p_month, '-01'), '%Y-%m-%d') - INTERVAL 1 MONTH, '%Y-%m-21')
        AND `r_usuario_centro_costo_sap_dia`.`createdAt` < DATE_FORMAT(STR_TO_DATE(CONCAT(p_year, '-', p_month, '-01'), '%Y-%m-%d'), '%Y-%m-20')
    GROUP BY 
        `r_usuario_centro_costo_sap_dia`.`usuario`,
        `r_usuario_centro_costo_sap_dia`.`idCentroCostoSap`,
        `r_usuario_centro_costo_sap_dia`.`mes`,
        `r_usuario_centro_costo_sap_dia`.`year`
    ORDER BY 
        `r_usuario_centro_costo_sap_dia`.`usuario`,
        `r_usuario_centro_costo_sap_dia`.`mes` DESC;
END $$

DELIMITER ;
