DELIMITER $$
DROP PROCEDURE IF EXISTS deuda_cuotas_predio;
create procedure deuda_cuotas_predio
(predio$ varchar(8))
begin 
    drop TEMPORARY table if EXISTS cuotas_predio;
    create TEMPORARY TABLE cuotas_predio(
        periodo varchar(30) not null,
        total decimal(10,2) default(0)
    );

   INSERT INTO cuotas_predio (periodo, total)
SELECT 
    periodos.periodo, 
    IFNULL(SUM(
        CASE 
            -- Filtro para el año actual: solo registros hasta el mes de hoy
            WHEN periodos.periodo = YEAR(CURDATE()) AND MONTH(m.periodo) > MONTH(CURDATE()) 
                THEN 0
            -- Lógica original de suma
            WHEN m.pago = 1 THEN c.cuota 
            ELSE m.pago 
        END
    ), 0) AS total
FROM (
    SELECT (1994 + seq) AS periodo 
    FROM seq_0_to_100 
    WHERE (1994 + seq) <= YEAR(CURDATE())
) AS periodos
LEFT JOIN mantto AS m 
    ON YEAR(m.periodo) = periodos.periodo 
    AND m.recibo = (predio$*-1) -- Tu variable de predio
LEFT JOIN cuotas AS c 
    ON m.cuota = c.id
GROUP BY periodos.periodo; 

insert into cuotas_predio(periodo, total)
select 'TOTAL', sum(total) from cuotas_predio;
    select *from cuotas_predio;
    drop temporary table cuotas_predio;
end
$$

DELIMITER $$
DROP PROCEDURE IF EXISTS deuda_fraccionamiento;
CREATE PROCEDURE deuda_fraccionamiento
()
BEGIN
	SELECT descifrar(p.predio) AS predio, descifrar(p.lote) AS lote, CONCAT(descifrar(p.calle), ' ', descifrar(p.exterior)) AS calle, CONCAT(estados(CAST(SUBSTRING(p.uso, 1, 3) AS INT)), '-', estados(CAST(SUBSTRING(p.uso, 5) AS INT))) AS uso, saldo_predio((descifrar(p.predio)*-1)) AS saldo, propietario_predio(p.id) as propietario
	FROM predios AS p
	WHERE SUBSTRING(descifrar(p.lote),1,2) COLLATE utf8mb4_uca1400_ai_ci <> 'MR' AND SUBSTRING(descifrar(p.lote),1,2) COLLATE utf8mb4_uca1400_ai_ci <> 'RB' AND p.estado_registro = 11
	ORDER BY descifrar(p.lote);
END
$$

DELIMITER $$
DROP PROCEDURE IF EXISTS deuda_predio;
CREATE PROCEDURE deuda_predio
(predio$ varchar(8))
BEGIN
    declare cuota_$ float;
    declare actualizacion_$ float;
    declare recargo_$ float;
    declare total_$ float;
    declare periodo_$ int default(1994);
    DROP TEMPORARY TABLE IF EXISTS deuda_predio;
    CREATE TEMPORARY TABLE deuda_predio(
        periodo varchar(8),
        cuota DECIMAL(10,2),
        actualizacion DECIMAL(10,2),
        recargo DECIMAL(10,2),
        total DECIMAL(10,2)
    );
    insert into deuda_predio(periodo, cuota, actualizacion, recargo)
    select year(m.periodo), sum(case when m.pago = 1 then c.cuota else m.pago end), sum(calculaActualizacion(m.indice, case when m.pago = 1 then c.cuota else m.pago end)), sum(calculaRecargo(m.periodo, curdate(), case when m.pago = 1 then c.cuota else m.pago end, m.recargo, m.indice))
    from mantto as m
    inner join cuotas as c on m.cuota = c.id
    where m.recibo = (predio$*-1) and m.periodo <= last_day(curdate()) group by year(m.periodo); 
    update deuda_predio set total = cuota+actualizacion+recargo;
    insert into deuda_predio(periodo, cuota, actualizacion, recargo, total)
    select 'TOTALES', sum(cuota), sum(actualizacion), sum(recargo), sum(total) from deuda_predio;
    SELECT *FROM deuda_predio;
    DROP TEMPORARY TABLE deuda_predio;
END
$$

DELIMITER $$
DROP PROCEDURE IF EXISTS estados_adeudo;
CREATE PROCEDURE estados_adeudo
(predio$ VARCHAR(10))
BEGIN
    drop temporary table if exists estado_adeudo;
    create temporary table estado_adeudo(
        periodo varchar(50) not null,
        cuota decimal(10,2) not null,
        actualizacion decimal(10,2) not null,
        recargo decimal(10,2) not null,
        total decimal(10,2) null
    );
    insert into estado_adeudo(periodo, cuota, actualizacion, recargo)
    select fechas(m.periodo, 2), case when m.pago = 1 then c.cuota else m.pago end, calculaActualizacion(m.indice, case when m.pago = 1 then c.cuota else m.pago end), calculaRecargo(m.periodo, curdate(), case when m.pago = 1 then c.cuota else m.pago end, m.recargo, m.indice)
    from mantto as m
    inner join cuotas as c on m.cuota = c.id
    where m.recibo = (predio$*-1) and m.periodo <= last_day(curdate()) order by m.periodo;
    update estado_adeudo set total = cuota+actualizacion+recargo;
    select *from estado_adeudo;
    select sum(cuota) as cuota, sum(actualizacion) as actualizacion, sum(recargo) as recargo, sum(total) as total from estado_adeudo;
    select concat(fechas(c.inicio, 2),' A ', fechas(c.fin, 2)) as periodo, c.valor as valor, pagado_convenio(c.id) as pagado, (c.valor-pagado_convenio(c.id)) as deuda
    from convenios as c
    inner join predios as p on c.predio = p.id
    where descifrar(p.predio) = predio$ and (c.valor - pagado_convenio(c.id)) > 1;
    drop temporary table estado_adeudo;
END
$$
