SET TERM ^ ;

CREATE OR ALTER trigger ttbmodelo_consumo_cor_b02iu for tbmodelo_consumo_cor
active before insert or update position 0
AS
DECLARE VARIABLE REPETIDOS VARCHAR(5000);
DECLARE VARIABLE COR_GRUPO_EXISTENTE INTEGER;
BEGIN

    :REPETIDOS = COALESCE((
        SELECT FIRST 1
            REPETIDOS
        
        FROM (
            SELECT
                COALESCE((
                    SELECT
                        LIST(OSPLIT, ',') AS REPETIDOS
            
                    FROM (
                        SELECT
                            OSPLIT,
                            COUNT(OSPLIT) CONTADOR
            
                        FROM SPLIT(LIST_PRODUTO, ',')
            
                        GROUP BY 1
                   )
                   WHERE CONTADOR > 1
                ), '') AS REPETIDOS
            
            FROM (
                SELECT
                    T.MODELO_ID,
                    T.COR_ID,
                    LIST(T.PRODUTO_ID) AS LIST_PRODUTO,
                    T.TAM,
                    T.SETOR_ID,
                    T.GRUPO_PRODUTO_ID
            
                FROM TBMODELO_CONSUMO_COR T
                INNER JOIN TBMODELO A ON A.CODIGO = T.MODELO_ID
                WHERE T.GRUPO_PRODUTO_ID > 0
                AND T.MODELO_ID = NEW.MODELO_ID
                AND T.SETOR_ID = NEW.SETOR_ID
                AND T.PECA_CONJUNTO = NEW.PECA_CONJUNTO
            
                GROUP BY
                    T.MODELO_ID,
                    T.COR_ID,
                    T.TAM,
                    T.SETOR_ID,
                    T.GRUPO_PRODUTO_ID
            
                ORDER BY T.COR_ID
            )
        )
        WHERE CHAR_LENGTH(REPETIDOS) > 0
    ), '');

    IF (REPETIDOS <> '') THEN
    BEGIN
        EXCEPTION "..." 'REGISTRO COM INFORMACOES DE VINCULO PRODUTO/COR REPETIDOS, MODELO: '||NEW.MODELO_ID||' - PRODUTOS: '||REPETIDOS||'. OPERACAO ABORTADA!';
    END

    /******************************************************************/

    :COR_GRUPO_EXISTENTE = COALESCE((SELECT FIRST 1
                                        T.PRODUTO_ID
                                    FROM TBMODELO_CONSUMO_COR T
                                    WHERE T.MODELO_ID = NEW.MODELO_ID
                                    AND T.COR_ID = NEW.COR_ID
                                    AND T.TAM = NEW.TAM
                                    AND T.SETOR_ID = NEW.SETOR_ID
                                    AND T.GRUPO_PRODUTO_ID = NEW.GRUPO_PRODUTO_ID
                                    AND T.PRODUTO_ID = NEW.PRODUTO_ID
                                    AND T.PECA_CONJUNTO = NEW.PECA_CONJUNTO
                                    AND T.ID <> NEW.ID
                                    AND T.GRUPO_PRODUTO_ID > 0), 0);

    IF (COALESCE(:COR_GRUPO_EXISTENTE, 0) > 0) THEN
    BEGIN
        EXCEPTION "..." 'COR SELECIONADA JA INCLUIDA NO GRUPO DE PRODUTO INFORMADO! MODELO: '||NEW.MODELO_ID||' - PRODUTO: '||:COR_GRUPO_EXISTENTE||'';
    END
END
^

SET TERM ; ^

