SET TERM ^ ;
create or alter function FN_IS_EMPTY2 (
    VALOR varchar(8000),
    RETORNO varchar(8000) default '')
returns varchar(8000)
AS
declare variable RET VARCHAR(8000);
begin
    RET = '';
            
    IF( (TRIM(VALOR) = '') OR (VALOR IS NULL) ) THEN
    BEGIN
        RET = RETORNO;
    END
    ELSE
    BEGIN
        RET = TRIM(VALOR);
    END

    RETURN RET;

end^

CREATE OR ALTER procedure CASO_DETALHE (
    PAINEL_ID integer,
    CASO_ID integer)
returns (
    TIPO integer,
    DESCRICAO varchar(100),
    VALOR varchar(7000),
    CAMPO_ID integer)
as
declare variable EMAIL varchar(500);
declare variable MONITOR varchar(500);
declare variable MOTIVO varchar(500);
declare variable TIPOV varchar(500);
declare variable ORIGEM varchar(500);
declare variable RESPONSAVEL varchar(500);
declare variable COR varchar(500);
declare variable STATUS varchar(500);
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, tbcaso_painel p, tbcaso_tipo t,tbcaso_motivo m,
            tbcaso_origem o, tbusuario u, tbcaso_status i
        where p.id   = :painel_id
        and r.id     = :caso_id
        and t.id     = r.tipo_id
        and m.id     = r.motivo_id
        and o.id     = r.origem_id
        and i.id     = r.status_id
        and u.codigo = r.responsavel_id
    into
        :email,
        :monitor,
        :MOTIVO,
        :TIPOV,
        :ORIGEM,
        :RESPONSAVEL,
        :STATUS,
        :COR
    do
    begin
        :campo_id = 0;
        tipo = 7;
        descricao = 'Motivo';         valor = MOTIVO;      suspend;
        descricao = 'Tipo';           valor = TIPOV;       suspend;
        descricao = 'Tipo de Origem'; valor = ORIGEM;      suspend;
        descricao = 'Responsável';    valor = RESPONSAVEL; suspend;
        descricao = 'Status';         valor = STATUS;      suspend;
    end

    for
       select
        
            a.tipo,
            a.campo_id,
            a.descricao,
            iif(a.tipo = 9 or a.tipo = 9 , i.descricao,
            iif(a.tipo = 4,
            (
                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_ARRAY(a.json,a.campo_visualizar)
        
            ,a.valor))) as valor
        
        from
            (
                select
                
                    f.id,
                    c.campo_id,
                    c.registro_id,
                    f.tipo,
                    f.descricao,
                    c.json,
                    f.campo_visualizar,
                    fn_is_empty2(cast(c.valor as varchar(7000)), '0') as valor,
                    iif(f.tipo = 9 or f.tipo = 5, fn_is_empty2(c.valor, '0'), 0) as chave
                
                from tbcaso_registro_detalhe c, tbcaso_painel_conf f
                where c.registro_id = :caso_id
                and   c.painel_id   = :painel_id
                and   c.campo_id    = f.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
        :tipo,
        :campo_id,
        :descricao,
        :valor
    do
    begin
        if(:valor = '')then
        begin
            :valor = null;
        end
        suspend;
    end


end
^

COMMENT ON PARAMETER CASO_DETALHE.PAINEL_ID IS
'id do painel de casos'^

COMMENT ON PARAMETER CASO_DETALHE.CASO_ID IS
'id do caso'^

SET TERM ; ^
