ALTER TABLE TBFICHA_TEMPLATE
    ADD HABILITA_RELATORIO INTEGER DEFAULT 0;

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

COMMENT ON COLUMN TBFICHA_TEMPLATE.HABILITA_RELATORIO IS
'0 - Desabilitado para Relatorios;
1 - Habilitado para Relatorios;';

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbficha_template_b01u for tbficha_template
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.TIPO_DESCRICAO <> NEW.TIPO_DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC. '|| OLD.TIPO_DESCRICAO||'->'||NEW.TIPO_DESCRICAO;
    END

    IF ( OLD.TIPO <> NEW.TIPO) THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO: '|| OLD.TIPO||'->'||NEW.TIPO;
    END

    IF ( OLD.HABILITA_RELATORIO <> NEW.HABILITA_RELATORIO ) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.REL: '|| OLD.HABILITA_RELATORIO ||'->'|| NEW.HABILITA_RELATORIO;
    END

    IF(OLD.TAMANHO_CAMPO <> NEW.TAMANHO_CAMPO) THEN
    BEGIN
        IF(NEW.TIPO = '1') THEN
        BEGIN
           HISTORICO = HISTORICO||' QTD.DECMS: '|| OLD.TAMANHO_CAMPO||'->'||NEW.TAMANHO_CAMPO;
        END

        IF(NEW.TIPO = '2') THEN
        BEGIN
           HISTORICO = HISTORICO||' TAM.CAMPO: '|| OLD.TAMANHO_CAMPO||'->'||NEW.TAMANHO_CAMPO;
        END
    END

    IF(OLD.TIPO = '4') THEN
    BEGIN
        IF(OLD.TIPO <> NEW.TIPO) THEN
        BEGIN
            DELETE FROM TBFICHA_TEMPLATE_ITENS
                    WHERE TEMPLATE_ID = NEW.TIPO_CODIGO AND FAMILIA_ID = NEW.FAMILIA_CODIGO;
        END 
    END

    IF(OLD.TIPO = '5') THEN
    BEGIN
        IF(OLD.TIPO <> NEW.TIPO) THEN
        BEGIN
            DELETE FROM TBFICHA_MATRIZ_COLUNAS
                    WHERE FICHA_TEMPLATE_ID = NEW.TIPO_CODIGO AND FAMILIA_ID = NEW.FAMILIA_CODIGO;

            DELETE FROM TBFICHA_MATRIZ_LINHAS
                    WHERE FICHA_TEMPLATE_ID = NEW.TIPO_CODIGO AND FAMILIA_ID = NEW.FAMILIA_CODIGO;
        END 
    END 

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Param.Ficha Processos alterado: Param. '||FN_LPAD(NEW.TIPO_CODIGO,4,'0')||' '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFAMILIA',NEW.FAMILIA_CODIGO,HISTORICO);
    END
end
^

SET TERM ; ^

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

UPDATE TBFICHA_TEMPLATE SET HABILITA_RELATORIO = 1 WHERE TIPO = 4;

UPDATE TBFICHA_TEMPLATE SET HABILITA_RELATORIO = 0 WHERE TIPO <> 4;

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

CREATE OR ALTER VIEW VWMODELO_FICHA_PROCESSO(
    MODELO_ID,
    TIPO,
    VALOR)
AS
SELECT
    X.MODELO_ID,
    X.TIPO,
    CAST(X.VALOR AS VARCHAR(7000)) AS VALOR

FROM (
 
    SELECT
        A.CODIGO AS MODELO_ID,
        B.TIPO_DESCRICAO AS TIPO,
        IIF(B.TIPO < 4, CAST(C.VALOR AS VARCHAR(7000)),

        IIF(B.TIPO = 4, COALESCE((SELECT FIRST 1
                                    CAST(TI.DESCRICAO AS VARCHAR(7000))
                                FROM TBFICHA_TEMPLATE_ITENS TI
                                WHERE TI.TEMPLATE_ID = C.TIPO_CODIGO
                                AND B.FAMILIA_CODIGO = TI.FAMILIA_ID
                                AND CAST(C.VALOR AS VARCHAR(7000)) = CAST(TI.VALOR as varchar(7000))), ''), '')) AS VALOR
    
    FROM TBMODELO A, TBFICHA_TEMPLATE B, TBMODELO_FICHA_TEMPLATE C
    WHERE A.FAMILIA_CODIGO = B.FAMILIA_CODIGO
    AND A.CODIGO = C.MODELO_CODIGO
    AND B.TIPO_CODIGO = C.TIPO_CODIGO
    AND B.HABILITA_RELATORIO = 1
    AND B.TIPO <> 5
     
    UNION ALL
      
    SELECT
        A.CODIGO AS MODELO_ID,
        B.TIPO_DESCRICAO||' - '||ML.DESCRICAO||'/'||MC.DESCRICAO AS TIPO,
    
        CAST(FN_UNICODE_TO_UTF8(C.VALOR) AS VARCHAR(7000)) AS VALOR

    FROM TBMODELO A, TBFICHA_TEMPLATE B, TBMODELO_FICHA_TEMPLATE C, TBFICHA_MATRIZ_LINHAS ML, TBFICHA_MATRIZ_COLUNAS MC
    WHERE A.FAMILIA_CODIGO = B.FAMILIA_CODIGO
    AND A.CODIGO = C.MODELO_CODIGO
    AND B.TIPO_CODIGO = C.TIPO_CODIGO
    AND ML.ID = C.LINHA_ID
    AND MC.ID = C.COLUNA_ID
    AND B.HABILITA_RELATORIO = 1
    AND B.TIPO = 5
                   
) X
WHERE X.MODELO_ID > 0
AND X.VALOR <> ''
;

