CREATE OR ALTER VIEW VWPAINEL_CASO(
    CASO_ID,
    PAINEL_ID,
    DATAHORA_ABERTURA,
    DATAHORA_FECHAMENTO,
    DATA_ABERTURA,
    DATA_FECHAMENTO,
    MOTIVO_ID,
    MOTIVO,
    TIPO_ID,
    TIPO,
    ORIGEM_ID,
    ORIGEM,
    RESPONSAVEL,
    STATUS,
    STATUS_COR,
    FECHADO,
    CASO_ORIGEM_ID,
    CASO_ORIGEM_TABELA,
    CAMPO_ID,
    CAMPO_TIPO,
    CAMPO_DESCRICAO,
    CAMPO_VALOR,
    CAMPO_JSON,
    CAMPO_DADOS_TABELA)
AS
	SELECT
        CASO_ID,
        PAINEL_ID,
        DATAHORA_ABERTURA,
        DATAHORA_FECHAMENTO,
        DATA_ABERTURA,
        DATA_FECHAMENTO,
        MOTIVO_ID,
        MOTIVO,
        TIPO_ID,
        TIPO,
        ORIGEM_ID,
        ORIGEM,
        RESPONSAVEL,
        STATUS,
        STATUS_COR,
        FECHADO,
        CASO_ORIGEM_ID,
        CASO_ORIGEM_TABELA,
        CAMPO_ID,
        CAMPO_TIPO,
        CAMPO_DESCRICAO,
        CAMPO_VALOR,
        CAMPO_JSON,
        CAMPO_DADOS_TABELA
    
    FROM (
        SELECT
            T.ID AS CASO_ID,
            T.PAINEL_ID,
            T.DATAHORA_REGISTRO DATAHORA_ABERTURA,
            T.DATA_FECHAMENTO DATAHORA_FECHAMENTO,
            CAST(T.DATAHORA_REGISTRO AS DATE) DATA_ABERTURA,
            CAST(T.DATA_FECHAMENTO AS DATE) DATA_FECHAMENTO,
            UPPER(G.ID) AS MOTIVO_ID,
            UPPER(G.DESCRICAO) AS MOTIVO,
            UPPER(H.ID) AS TIPO_ID,
            UPPER(H.DESCRICAO) AS TIPO,
            UPPER(I.ID) AS ORIGEM_ID,
            UPPER(I.DESCRICAO) AS ORIGEM,
            UPPER(IIF(CHAR_LENGTH(J.NOME) > 0, J.NOME, J.USUARIO)) AS RESPONSAVEL,
            UPPER(K.DESCRICAO) AS STATUS,
            K.COR AS STATUS_COR,
            T.FECHADO,
            T.CASO_ORIGEM_ID,
            T.CASO_ORIGEM_TABELA,
        
            A.CAMPO_ID,
    
            IIF(E.TIPO = 1, 'STRING',
            IIF(E.TIPO = 2, 'NUMERO',
            IIF(E.TIPO = 3, 'DATA',
            IIF(E.TIPO = 4, 'CHECKBOX',
            IIF(E.TIPO = 5, 'RADIO BUTTON',
            IIF(E.TIPO = 6, 'RANGE',
            IIF(E.TIPO = 7, 'SEARCH',
            IIF(E.TIPO = 8, 'TIME',
            IIF(E.TIPO = 9, 'SELECT',
            IIF(E.TIPO = 10, 'TEXT AREA',
            IIF(E.TIPO = 11, 'SEARCH LIST', ''))))))))))) AS CAMPO_TIPO,
    
            UPPER(E.DESCRICAO) AS CAMPO_DESCRICAO,
    

            IIF(E.TIPO = 4 OR E.TIPO = 5 OR E.TIPO = 9,
                COALESCE((SELECT FIRST 1
                    UPPER( C3.DESCRICAO )
                FROM TBCASO_PAINEL_CONF_ITENS C3
                WHERE C3.CAMPO_ID = A.CAMPO_ID
                AND C3.VALOR = A.VALOR
                AND C3.PAINEL_ID = T.PAINEL_ID), ''),
            IIF(E.TIPO = 7 OR E.TIPO = 11,
                COALESCE((SELECT FIRST 1
                    UPPER( IIF(C2.OTIPO = 2 OR C2.OTIPO = 6, COALESCE(C2.OVALOR, '0'), COALESCE(C2.OVALOR, '')) )
                FROM SPC_CASO_DETALHE(A.PAINEL_ID, A.REGISTRO_ID, COALESCE(F.CAMPOS_RETORNO, '')) C2 WHERE C2.OCAMPO_ID = A.CAMPO_ID), ''), UPPER(COALESCE(A.VALOR, '')))) AS CAMPO_VALOR,
    

            IIF(E.TIPO = 7, A.JSON, '') AS CAMPO_JSON,
            IIF(E.TIPO = 11, A.DADOS_TABELA, '') AS CAMPO_DADOS_TABELA
        
        FROM TBCASO_REGISTRO T
        INNER JOIN TBCASO_REGISTRO_DETALHE A ON A.REGISTRO_ID = T.ID AND A.PAINEL_ID = T.PAINEL_ID
        LEFT JOIN TBCASO_PAINEL D ON D.ID = T.PAINEL_ID
        LEFT JOIN TBCASO_PAINEL_CONF E ON E.PAINEL_ID = D.ID AND E.ID = A.CAMPO_ID
        LEFT JOIN TBCASO_CAMPO_CONSULTA F ON F.PAINEL_ID = E.PAINEL_ID AND F.CAMPO_ID = E.ID
        LEFT JOIN TBCASO_MOTIVO G ON G.ID = T.MOTIVO_ID AND G.PAINEL_ID = D.ID
        LEFT JOIN TBCASO_TIPO H ON H.ID = T.TIPO_ID AND H.MOTIVO_ID = G.ID
        LEFT JOIN TBCASO_ORIGEM I ON I.ID = T.ORIGEM_ID AND I.TIPO_ID = H.ID
        LEFT JOIN TBUSUARIO J ON J.CODIGO = T.RESPONSAVEL_ID
        LEFT JOIN TBCASO_STATUS K ON K.ID = T.STATUS_ID AND K.PAINEL_ID = D.ID
        WHERE T.ID > 0
    
    )
;

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

SET TERM ^ ;

CREATE OR ALTER procedure SPC_CASO_DETALHE (
    IPAINEL_ID integer not null,
    ICASO_ID integer not null,
    ICAMPO_VISUALIZACAO varchar(100) not null)
returns (
    OCAMPO_ID integer,
    OTIPO integer,
    ODESCRICAO varchar(100),
    ODECIMAIS integer,
    OVALOR varchar(7000))
as
declare variable EMAIL varchar(5000);
declare variable MONITOR varchar(5000);
declare variable MOTIVO varchar(5000);
declare variable TIPO varchar(5000);
declare variable ORIGEM varchar(5000);
declare variable RESPONSAVEL varchar(5000);
declare variable COR varchar(5000);
declare variable STATUS varchar(5000);
BEGIN

    FOR
        SELECT FIRST 1
            P.EMAIL,
            P.EMAIL_MONITOR,
        
            M.DESCRICAO AS MOTIVO,
        
            T.DESCRICAO AS TIPO,
        
            O.DESCRICAO AS ORIGEM,
        
            U.USUARIO AS RESPONSAVEL,
        
            I.DESCRICAO AS STATUS,
            I.COR AS COR
        
        FROM TBCASO_REGISTRO R
        INNER JOIN TBCASO_PAINEL P ON P.ID = R.PAINEL_ID
        INNER JOIN TBCASO_TIPO T ON T.ID = R.TIPO_ID
        INNER JOIN TBCASO_MOTIVO M ON M.ID = R.MOTIVO_ID
        INNER JOIN TBCASO_ORIGEM O ON O.ID = R.ORIGEM_ID
        INNER JOIN TBUSUARIO U ON U.CODIGO = R.RESPONSAVEL_ID
        INNER JOIN TBCASO_STATUS I ON I.ID = R.STATUS_ID
        WHERE P.ID = :IPAINEL_ID
        AND R.ID = :ICASO_ID
    
    INTO
        :EMAIL,
        :MONITOR,
        :MOTIVO,
        :TIPO,
        :ORIGEM,
        :RESPONSAVEL,
        :STATUS,
        :COR

    DO
    BEGIN
        
        :OCAMPO_ID = 0;
        :OTIPO     = 7;

        :ODESCRICAO = 'Motivo';
        :OVALOR = :MOTIVO;
        SUSPEND;

        :ODESCRICAO = 'Tipo';
        :OVALOR = :TIPO;
        SUSPEND;

        :ODESCRICAO = 'Tipo de Origem';
        :OVALOR = :ORIGEM;
        SUSPEND;

        :ODESCRICAO = 'Responsável';
        :OVALOR = :RESPONSAVEL;
        SUSPEND;

        :ODESCRICAO = 'Status';
        :OVALOR = :STATUS;
        SUSPEND;

    END

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

    FOR
        SELECT
            A.TIPO,
            A.CAMPO_ID,
            A.DESCRICAO,
            A.DECIMAIS,
        
            IIF(A.TIPO = 9, FN_IS_EMPTY2(I.DESCRICAO, ''),
            IIF(((A.TIPO = 4) OR (A.TIPO = 5)), COALESCE((SELECT LIST(S.DESCRICAO||':'||R.SELECIONADO, ', ') FROM TBCASO_REGISTRO_ITENS R, TBCASO_PAINEL_CONF_ITENS S WHERE R.CAMPO_ID = A.ID AND R.VALOR = S.VALOR AND S.CAMPO_ID = R.CAMPO_ID AND R.REGISTRO_ID = A.REGISTRO_ID), ''),
            IIF(A.TIPO = 7, FN_JSON_ARRAY2(A.JSON, COALESCE((SELECT FIRST 1 V.CAMPO FROM TBCASO_VISUALIZACAO_CAMPO V WHERE V.CAMPO_ID = A.ID AND V.PAINEL_ID = A.PAINEL_ID AND V.CAMPO LIKE COALESCE(:ICAMPO_VISUALIZACAO, '')), COALESCE(:ICAMPO_VISUALIZACAO, ''))),
            IIF(A.TIPO = 11, FN_ELIPSE2( COALESCE((SELECT LIST(SPLV.VALOR, ', ') FROM ( SELECT FN_JSON_ARRAY2(SPL.OSPLIT, COALESCE((SELECT FIRST 1 V.CAMPO FROM TBCASO_VISUALIZACAO_CAMPO V WHERE V.CAMPO_ID = A.ID AND V.PAINEL_ID = A.PAINEL_ID AND V.CAMPO LIKE COALESCE(:ICAMPO_VISUALIZACAO, '')), COALESCE(:ICAMPO_VISUALIZACAO, ''))) AS VALOR FROM SPLIT_BLOB2(A.DADOS_TABELA, '},{') SPL ) SPLV), '') , 7000), A.VALOR)))) AS VALOR
        
        FROM (
            SELECT
                F.ID,
                F.TIPO,
                F.DESCRICAO,
                F.CAMPO_VISUALIZAR,
                F.STEP,
                IIF(F.STEP >= 1, 0, IIF(F.STEP >= 0.1, 1, IIF(F.STEP >= 0.01, 2, IIF(F.STEP >= 0.001, 3, IIF(F.STEP >= 0.0001, 4, 0))))) AS DECIMAIS,
        
                C.CAMPO_ID,
                C.PAINEL_ID,
                C.REGISTRO_ID,
                C.JSON,
                C.DADOS_TABELA,
        
                FN_IS_EMPTY2(CAST(C.VALOR AS VARCHAR(7000)), '') AS VALOR,
        
                IIF(((F.TIPO = 4) OR (F.TIPO = 5) OR (F.TIPO = 9)), FN_IS_EMPTY2(C.VALOR, '0'), 0) AS CHAVE
            
            FROM TBCASO_REGISTRO_DETALHE C
            INNER JOIN TBCASO_PAINEL_CONF F ON F.ID = C.CAMPO_ID
            WHERE C.REGISTRO_ID = :ICASO_ID
            AND C.PAINEL_ID = :IPAINEL_ID
        
            ORDER BY C.CAMPO_ID
        ) A
        LEFT JOIN TBCASO_PAINEL_CONF_ITENS I ON I.CAMPO_ID = A.ID AND I.VALOR = A.CHAVE

    INTO
        :OTIPO,
        :OCAMPO_ID,
        :ODESCRICAO,
        :ODECIMAIS,
        :OVALOR

    DO
    BEGIN

        IF (COALESCE(:OVALOR, '') = '') THEN
        BEGIN
            :OVALOR = NULL;
        END

        SUSPEND;

    END
END
^

SET TERM ; ^

COMMENT ON PARAMETER SPC_CASO_DETALHE.IPAINEL_ID IS
'ID do Painel de Casos';

COMMENT ON PARAMETER SPC_CASO_DETALHE.ICASO_ID IS
'ID do Caso (Numero do Caso)';

COMMENT ON PARAMETER SPC_CASO_DETALHE.ICAMPO_VISUALIZACAO IS
'Campo de Visualizacao da tabela TBCASO_VISUALIZACAO_CAMPO';

