CREATE OR ALTER procedure SPU_AGRUPAMENTO_CP (
    GP_ID integer)
as
declare variable AGRUPAMENTO_ID integer;
declare variable DATA_INICIAL date;
declare variable DATA_FINAL date;
declare variable UP_ID integer;
declare variable CAP_PRODUTIVA numeric(15,2);
BEGIN

    FOR

        SELECT
            T.ID,
            T.DATA_INICIAL,
            T.DATA_FINAL
        FROM TBAGRUPAMENTO T
        WHERE
        T.GP_ID = :GP_ID
        INTO :AGRUPAMENTO_ID, :DATA_INICIAL, :DATA_FINAL

    DO BEGIN
        IF(:AGRUPAMENTO_ID > 0) THEN
        BEGIN

            FOR
                SELECT 
                    COALESCE(UP_ID, 0),
                    SUM(CAPACIDADE) CAPACIDADE
                FROM (
                        SELECT 
                            U.ID AS UP_ID,
                            C.DATA,
                            C.MINUTOS * C.COLABORADORES AS CAPACIDADE
                        FROM TBUP U, TBCALENDARIO_UP C, TBGP_UP G
                        WHERE C.UP_ID = U.ID
                        AND U.ID = G.UP_ID
                        AND C.DATA BETWEEN :DATA_INICIAL AND :DATA_FINAL
                        AND G.GP_ID = :GP_ID
                        AND C.MINUTOS > 0
                        AND C.COLABORADORES > 0
                    )
                GROUP BY UP_ID
                INTO :UP_ID, :CAP_PRODUTIVA
             DO BEGIN

                IF(:UP_ID > 0) THEN
                BEGIN
                    UPDATE OR INSERT INTO TBAGRUPAMENTO_CARGA_UP (AGRUPAMENTO_ID, UP_ID, CAP_PRODUTIVA)
                        VALUES (:AGRUPAMENTO_ID, :UP_ID, :CAP_PRODUTIVA)
                    MATCHING (AGRUPAMENTO_ID, UP_ID);
                END

             END
        END

    END

END;