ALTER TABLE TBEMAIL
    ADD CASO_FEED_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBEMAIL.CASO_FEED_ID IS
'id do feed do caso quando origem de painel de casos';


CREATE INDEX ITBEMAIL_09
ON TBEMAIL (DE);

CREATE INDEX ITBEMAIL_08
ON TBEMAIL (DATAHORA_ENVIO);

CREATE INDEX ITBEMAIL_07
ON TBEMAIL (CASO_FEED_ID);

CREATE INDEX ITBEMAIL_06
ON TBEMAIL (PAINEL_ID);

CREATE INDEX ITBEMAIL_05
ON TBEMAIL (USUARIO_ID);

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcaso_registro_b02i for tbcaso_registro
active after insert position 0
AS
    declare variable tipo integer;
    declare variable descricao varchar(500);
    declare variable PAINEL varchar(500);
    declare variable USUARIO_CAD varchar(500);
    declare variable monitor varchar(500);
    declare variable motivo varchar(500);
    declare variable valor varchar(5000);
    declare variable corpo varchar(8000);
    declare variable html1 varchar(4000);
    declare variable html2 varchar(4000);
begin
    
    PAINEL      = coalesce((select first 1 FN_LPAD(C.ID, 4, '0')||' - '||C.TITULO from tbcaso_painel c where c.id = new.painel_id), '');
    USUARIO_CAD = coalesce((select first 1 u.nome from tbcaso_historico h, tbusuario u where h.caso_id = new.id and h.painel_id = new.painel_id and u.codigo = h.usuario_id),'');

    monitor = (SELECT first 1 p.email_monitor FROM tbcaso_painel p where p.id = new.painel_id);

    html1 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 1);
    html2 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 2);

--    corpo = '<html><body><p><a href="https://gc.delfa.com.br/_11150/'||new.painel_id||'/'||new.id||'" target="_blank">Abrir '||new.id||' na web</a></p>';
    corpo = '<html><body><p><a href="https://gc.delfa.com.br/_11160/'||new.painel_id||'?CASO_ID='||new.id||'" target="_blank">Abrir '||new.id||' na web</a></p>';
    corpo = corpo || html1;
    corpo = corpo || '<p><u>Painel:</u>: '||:PAINEL||'</p><br>';
    corpo = corpo || '<p><u>Data</u>: '||formatdatetime(current_timestamp)||'</p>';
    corpo = corpo || '<p><u>Aberto por:</u>: '||:USUARIO_CAD||'</p>';

    for
       select
            TIPO,
            DESCRICAO,
            coalesce(VALOR,'&nbsp;') as VALOR
       from CASO_DETALHE(new.painel_id, new.id)
    into
        :tipo,
        :descricao,
        :valor
    do
    begin
        corpo = corpo||'<p><u>'||descricao||'</u>: '||:valor||'</p>';

        if(descricao = 'Motivo')then
        begin
            motivo = valor;
        end
    end

    corpo = corpo || html2;

    insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id)
    values (
        0,
        :monitor,
        FN_ELIPSE(('NOVO - [CASO:'|| FN_LPAD(NEW.id, 8, '0') ||'] Aberto : '|| :motivo), 300),
        :corpo,
        0,
        coalesce((select c.email_monitor  from TBCASO_PAINEL c where c.id = new.painel_id),''), --(select u.email from tbusuario u where u.codigo = new.usuario_id),
        '',
        new.painel_id
    );

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcaso_feed_b02i for tbcaso_feed
active before insert position 0
AS
  declare variable corpo1 varchar(8000);
  declare variable corpo2 varchar(8000);
  declare variable corpo3 varchar(8000);
  declare variable id integer;
  declare variable ARQUIVO_ID integer;
begin

  if(new.origem = 0)then
  begin

    if(new.de <> '' and new.para <> '' and new.assunto <> '' and new.mensagem <> '' and (new.tipo = 1 /*or new.tipo = 4*/) and new.usuario_id > 0 and new.subfeed = 0)then
    begin

        for
           select * from SPC_EMAIL_CASO(new.caso_id, new.painel_id, new.mensagem)
        into
          :corpo1,
          :corpo2,
          :corpo3
        do
        begin

        end
    
        id = Gen_ID(gtbemail,1);

        insert into tbemail (id, status, email, assunto, corpo, usuario_id, cc, cco, painel_id, datahora, caso_feed_id)
           values (
            :id,
            0,
            new.para,
            new.assunto,
            :corpo1 || :corpo2 || :corpo3,
            new.usuario_id,
            new.em_copia,
            new.em_copia_oculta,
            new.painel_id,
            current_timestamp,
            new.id
         );

         if(char_length(new.lista_file) > 0)then
         begin
           for
             select OSPLIT from split_blob(new.lista_file,',')
           into
             :ARQUIVO_ID
           do begin
              INSERT INTO TBEMAIL_ANEXO (EMAIL_ID, ARQUIVO_ID, DESCRICAO) VALUES (:id, :ARQUIVO_ID, '');
           end
         end

    end
  end

end
^

SET TERM ; ^

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

SET TERM ^ ;

CREATE OR ALTER procedure SPC_EMAIL_CASO (
    CASO_ID integer,
    PAINEL_ID integer,
    MSG varchar(7000))
returns (
    C1 varchar(8000),
    C2 varchar(8000),
    C3 varchar(8000))
as
declare variable CORPO1 varchar(8000);
declare variable CORPO2 varchar(8000);
declare variable CORPO3 varchar(8000);
declare variable HTML1 varchar(4000);
declare variable HTML2 varchar(4000);
declare variable TIPO integer;
declare variable DESCRICAO varchar(100);
declare variable VALOR varchar(7000);
declare variable PAINEL varchar(500);
begin

   html1 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 3);
   html2 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 2);

   PAINEL = coalesce((select first 1 FN_LPAD(C.ID, 4, '0')||' - '||C.TITULO from tbcaso_painel c where c.id = :painel_id), '');

   corpo1 = '';
   corpo2 = '';
   corpo3 = '';

   corpo1 = '<html><body>';
   corpo1 = corpo1 || :msg;
   corpo1 = corpo1 || '<p></p>';
--   corpo1 = corpo1 || '<p><a href="https://gc.delfa.com.br/_11150/'||:PAINEL_ID||'/'||:caso_id||'" target="_blank">[ABRIR NA WEB]</a></p>';
   corpo1 = corpo1 || '<p><a href="https://gc.delfa.com.br/_11160/'||:PAINEL_ID||'?CASO_ID='||:caso_id||'" target="_blank">[ABRIR NA WEB]</a></p>';
   corpo1 = corpo1 || '<p></p>';
   corpo1 = corpo1 || html1;
   corpo1 = corpo1 || '<p><u>Painel:</u>: '||:PAINEL||'</p><br>';
   --corpo1 = corpo1 || '<p><u>Data</u>: '||formatdatetime(current_timestamp) || '</p>';

    for
       select
            TIPO,
            DESCRICAO,
            TRIM(SUBSTRING(coalesce(VALOR,'&nbsp;') FROM 1 FOR 3000)) || iif(char_length(VALOR) > 300,'...','') as VALOR
       from CASO_DETALHE(:painel_id, :caso_id)
    into
        :tipo,
        :descricao,
        :valor
    do
    begin
        corpo2 = corpo2||'<p><u>'||descricao||'</u>: '||:valor||'</p>';
    end

   corpo3 = corpo3 || html2 || '</body></html>';


  c1 = corpo1;
  c2 = corpo2;
  c3 = corpo3;

  suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NOTIFICACAO_FEED (
    USUARIO_ID integer,
    CADO_ID integer)
as
declare variable USUARIO_RECEBER integer;
declare variable USUARIO_FEED varchar(100);
declare variable PAINEL_ID integer;
begin

  USUARIO_FEED = coalesce((select u.nome from tbusuario u where u.codigo = :USUARIO_ID),'');
  PAINEL_ID    = coalesce((select k.painel_id from tbcaso_registro k where k.id = :CADO_ID),0);

  for
    SELECT distinct usuario_id from
        (

            SELECT
                u.usuario_id
            from
                tbcaso_usuarios u
            where   u.notificacao = 1
                and u.responsavel = 1
                and u.painel_id = :PAINEL_ID
                and u.usuario_id <> :USUARIO_ID
                and u.usuario_id > 0
            
                union 
            
            select e.usuario_id from tbcaso_envolvidos e where e.caso_id = :CADO_ID
            and e.usuario_id <> :USUARIO_ID

                union

            select r.usuario_id from tbcaso_registro r where r.id = :CADO_ID and r.usuario_id <> :USUARIO_ID

        )  order by usuario_id desc
  into
    :USUARIO_RECEBER
  do begin

        INSERT INTO TBNOTIFICACAO (TIPO, USUARIO_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    6,
                    :USUARIO_RECEBER,
                    0,
                    0,
                    'NOVO FEED',
                    0,
                    0,
                    current_timestamp,
                    :USUARIO_ID,
                    current_timestamp,
                    0,
                    'NOVO_FEED',
                    :CADO_ID,
                    'FOI REGISTRADO UM NOVO FEED POR '||:USUARIO_FEED||'<br>'||COALESCE((SELECT FIRST 1 'PAINEL: '||FN_LPAD(C.ID, 4, '0')||' - '||C.TITULO FROM TBCASO_PAINEL C WHERE C.ID = :PAINEL_ID), '')||'<br><a href="https://gc.delfa.com.br/_11150/'||:PAINEL_ID||'/'||:CADO_ID||'" target="_blank" >CASO:'||:CADO_ID||' - Ver Este Caso</a><br><br>'||formatdatetime(current_timestamp));
  end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_CASO (
    IPAINEL_ID integer not null,
    IMOTIVO_ID integer not null,
    ITIPO_ID integer not null,
    IORIGEM_ID integer not null,
    ITELA varchar(10) not null,
    P01 varchar(6000) = '',
    P02 varchar(6000) = '',
    P03 varchar(6000) = '',
    P04 varchar(6000) = '',
    P05 varchar(6000) = '',
    P06 varchar(6000) = '',
    P07 varchar(6000) = '',
    P08 varchar(6000) = '',
    P09 varchar(6000) = '',
    P10 varchar(6000) = '',
    P11 varchar(6000) = '',
    P12 varchar(6000) = '',
    P13 varchar(6000) = '',
    P14 varchar(6000) = '',
    P15 varchar(6000) = '',
    P16 varchar(6000) = '',
    P17 varchar(6000) = '',
    P18 varchar(6000) = '',
    P19 varchar(6000) = '',
    P20 varchar(6000) = '',
    VINCULO_CASO_ID integer = 0,
    VINCULO_CASO_TABELA varchar(50) = '')
returns (
    OCASO_ID integer)
as
declare variable PAINEL_ID integer;
declare variable CASO_ID integer;
declare variable PARAM_EXEC integer;
declare variable CAMPO_ID integer;
declare variable CAMPO_DESC varchar(150);
declare variable REQUERED integer;
declare variable CAMPO_TIPO integer;
declare variable CAMPO_DESC_TIPO varchar(15);
declare variable CAMPO_GERAR_JSON blob sub_type 1 segment size 80;
declare variable CAMPO_SQL blob sub_type 1 segment size 80;
declare variable CAMPO_VALOR_PADRAO varchar(200);
declare variable CAMPO_ITEM_ID integer;
declare variable CAMPO_ITEM_VALOR integer;
declare variable CAMPO_ITEM_SELECIONADO integer;
declare variable VALOR varchar(7000);
declare variable JSON blob sub_type 1 segment size 80;
declare variable MODELO_WORKFLOW_ID integer;
declare variable ORDEM_WORKFLOW integer;
declare variable WORKFLOW_ID integer;
declare variable USUARIO_ID integer;
declare variable USUARIO_DESC varchar(100);
declare variable URL varchar(500);
declare variable CORPO blob sub_type 1 segment size 80;
declare variable USUARIO_ID_NOTIF integer;
declare variable TIPOS_NOTIF varchar(500);
BEGIN

    FOR
        SELECT FIRST 1
            P.ID AS PAINEL_ID

        FROM TBCASO_PAINEL P
        WHERE P.ID = :IPAINEL_ID
        AND P.STATUS = 1
        AND P.PERMITE_GERAR_AUTOMATICO = 1

    INTO
        :PAINEL_ID

    DO
    BEGIN

        /* Gerando Caso - Atribuindo CASO_ID */
        :CASO_ID = GEN_ID(GTBCASO_REGISTRO, 1);

        IF (COALESCE(:CASO_ID, 0) > 0) THEN
        BEGIN

            INSERT INTO TBCASO_REGISTRO (ID, PAINEL_ID, DATAHORA_REGISTRO, USUARIO_ID, MOTIVO_ID, TIPO_ID, ORIGEM_ID, RESPONSAVEL_ID, STATUS_ID, CONTATO_ID, FECHADO, CASO_ORIGEM_ID, CASO_ORIGEM_TABELA)
                VALUES (:CASO_ID, :IPAINEL_ID, CURRENT_TIMESTAMP, FN_CURRENT_USER_ID(), :IMOTIVO_ID, :ITIPO_ID, :IORIGEM_ID, COALESCE((SELECT FIRST 1 CU.USUARIO_ID FROM TBCASO_USUARIOS CU WHERE CU.PAINEL_ID = :PAINEL_ID AND CU.USUARIO_ID = FN_CURRENT_USER_ID() AND CU.RESPONSAVEL = 1), 0), COALESCE((SELECT FIRST 1 CS.ID FROM TBCASO_STATUS CS WHERE CS.PAINEL_ID = :PAINEL_ID AND CS.ABERTO = 1), 0), 0, 0, COALESCE(:VINCULO_CASO_ID, 0), COALESCE(:VINCULO_CASO_TABELA, ''));

            EXECUTE PROCEDURE SPI_CASO_HISTORICO(:CASO_ID, :PAINEL_ID, 'REGISTRO DE CASO AUTOMATICO ('||:ITELA||')');

            IF (COALESCE(:VINCULO_CASO_ID, 0) > 0) THEN
            BEGIN
                EXECUTE PROCEDURE SPI_CASO_HISTORICO(:CASO_ID, :PAINEL_ID, 'NOVO CASO GERADO VIA VINCULO COM TABELA: '||COALESCE(:VINCULO_CASO_TABELA, '')||' - N: '||COALESCE(:VINCULO_CASO_ID, 0)||'');
            END

            /* Registrar valores dos Campos */
            FOR
                SELECT
                    PC.PARAM_EXEC,
    
                    /* Dados dos Campos */
                    PC.ID,
                    PC.DESCRICAO,
                    PC.REQUERED,
    
                    PC.TIPO,
                    IIF(PC.TIPO = 1, 'STRING',
                    IIF(PC.TIPO = 2, 'NUMERO',
                    IIF(PC.TIPO = 3, 'DATA',
                    IIF(PC.TIPO = 4, 'CHECK',
                    IIF(PC.TIPO = 5, 'RADIO',
                    IIF(PC.TIPO = 6, 'RANGE',
                    IIF(PC.TIPO = 7, 'SEARCH',
                    IIF(PC.TIPO = 8, 'TIME',
                    IIF(PC.TIPO = 9, 'SELECT',
                    IIF(PC.TIPO = 10, 'TEXT AREA', '')))))))))) AS DESC_TIPO,
    
                    /* Dados Vinculados aos Campos - CAMPO_CONSULTA */
                    COALESCE(CC.CAMPO_TABELA, '') AS CAMPOS_CONSULTA,
                    FN_CAST_BLOB_TO_TEXT(COALESCE(S.SQL, '')) AS SQL,
    
                    /* Dados Vinculados aos Campos - PAINEL_CONF_ITENS */
                    COALESCE((SELECT FIRST 1 PCI.VALOR FROM TBCASO_PAINEL_CONF_ITENS PCI WHERE PCI.PAINEL_ID = PC.PAINEL_ID AND PCI.CAMPO_ID = PC.ID AND PCI.SELECIONADO = 1), COALESCE(PC."DEFAULT", '')) AS VALOR_PADRAO
    
                FROM TBCASO_PAINEL_CONF PC
                INNER JOIN TBCASO_CAMPOS_AGRUPAMENTO CA ON CA.ID = PC.GRUPO_ID AND CA.PAINEL_ID = PC.PAINEL_ID
                LEFT JOIN TBCASO_CAMPO_CONSULTA CC ON CC.CAMPO_ID = PC.ID AND CC.PAINEL_ID = PC.PAINEL_ID
                LEFT JOIN TBCASO_SQL S ON S.ID = CC.SQL_ID
                WHERE PC.PAINEL_ID = :PAINEL_ID
                AND PC.STATUS = 1
    
                ORDER BY PC.ORDEM
        
            INTO
                :PARAM_EXEC,
                :CAMPO_ID,
                :CAMPO_DESC,
                :REQUERED,
                :CAMPO_TIPO,
                :CAMPO_DESC_TIPO,
                :CAMPO_GERAR_JSON,
                :CAMPO_SQL,
                :CAMPO_VALOR_PADRAO
        
            DO
            BEGIN

                IF (COALESCE(:PARAM_EXEC, 0) = 1) THEN
                BEGIN
                    :VALOR = :P01;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 2) THEN
                BEGIN
                    :VALOR = :P02;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 3) THEN
                BEGIN
                    :VALOR = :P03;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 4) THEN
                BEGIN
                    :VALOR = :P04;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 5) THEN
                BEGIN
                    :VALOR = :P05;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 6) THEN
                BEGIN
                    :VALOR = :P06;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 7) THEN
                BEGIN
                    :VALOR = :P07;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 8) THEN
                BEGIN
                    :VALOR = :P08;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 9) THEN
                BEGIN
                    :VALOR = :P09;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 10) THEN
                BEGIN
                    :VALOR = :P10;
                END
                IF (COALESCE(:PARAM_EXEC, 0) = 11) THEN
                BEGIN
                    :VALOR = :P11;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 12) THEN
                BEGIN
                    :VALOR = :P12;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 13) THEN
                BEGIN
                    :VALOR = :P13;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 14) THEN
                BEGIN
                    :VALOR = :P14;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 15) THEN
                BEGIN
                    :VALOR = :P15;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 16) THEN
                BEGIN
                    :VALOR = :P16;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 17) THEN
                BEGIN
                    :VALOR = :P17;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 18) THEN
                BEGIN
                    :VALOR = :P18;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 19) THEN
                BEGIN
                    :VALOR = :P19;
                END ELSE
                IF (COALESCE(:PARAM_EXEC, 0) = 20) THEN
                BEGIN
                    :VALOR = :P20;
                END

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

                :JSON = '';
                IF (COALESCE(:CAMPO_TIPO, 0) = 7) THEN
                BEGIN
                    :JSON = '';

                    IF (COALESCE(:PARAM_EXEC, 0) > 0 AND COALESCE(:REQUERED, 0) = 1 AND COALESCE(:VALOR, '') = '0') THEN
                    BEGIN
                        EXCEPTION "..." 'CAMPO '||:CAMPO_DESC||' E OBRIGATORIO! ENTRE EM CONTATO COM O SUPORTE TECNICO.';
                    END
                END

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

                IF (COALESCE(:PARAM_EXEC, 0) > 0) THEN
                BEGIN

                    IF (COALESCE(:REQUERED, 0) = 1 AND COALESCE(:VALOR, '') = '') THEN
                    BEGIN
                        EXCEPTION "..." 'CAMPO '||:CAMPO_DESC||' E OBRIGATORIO! ENTRE EM CONTATO COM O SUPORTE TECNICO.';
                    END

                    INSERT INTO TBCASO_REGISTRO_DETALHE (REGISTRO_ID, CAMPO_ID, VALOR, PAINEL_ID, JSON)
                        VALUES (:CASO_ID, :CAMPO_ID, :VALOR, :PAINEL_ID, :JSON);

                END ELSE
                BEGIN

                    IF (COALESCE(:REQUERED, 0) = 1 AND COALESCE(:CAMPO_VALOR_PADRAO, '') = '') THEN
                    BEGIN
                        EXCEPTION "..." 'CAMPO '||:CAMPO_DESC||' E OBRIGATORIO! ENTRE EM CONTATO COM O SUPORTE TECNICO.';
                    END

                    INSERT INTO TBCASO_REGISTRO_DETALHE (REGISTRO_ID, CAMPO_ID, VALOR, PAINEL_ID, JSON)
                        VALUES (:CASO_ID, :CAMPO_ID, :CAMPO_VALOR_PADRAO, :PAINEL_ID, :JSON);

                END

                /*******************************************************/
                -- TBCASO_REGISTRO_ITENS -- Ainda pra descobrir / sem uso

                IF (COALESCE(:CAMPO_TIPO, 0) = 4) THEN
                BEGIN

                    FOR
                        SELECT
                            PCI.ID,
                            PCI.VALOR,
    
                            IIF(COALESCE(:CAMPO_VALOR_PADRAO, '') = FN_IS_EMPTY(PCI.VALOR, ''), 1, 0) AS SELECIONADO
                        
                        FROM TBCASO_PAINEL_CONF_ITENS PCI
                        WHERE PCI.CAMPO_ID = :CAMPO_ID
                        AND PCI.PAINEL_ID = :PAINEL_ID
    
                        ORDER BY PCI.ORDEM
    
                    INTO
                        :CAMPO_ITEM_ID,
                        :CAMPO_ITEM_VALOR,
                        :CAMPO_ITEM_SELECIONADO
    
                    DO
                    BEGIN
    
                        INSERT INTO TBCASO_REGISTRO_ITENS (VALOR, CAMPO_ID, REGISTRO_ID, SELECIONADO)
                            VALUES (:CAMPO_ITEM_VALOR, :CAMPO_ID, :CASO_ID, :CAMPO_ITEM_SELECIONADO);
    
                    END

                END
            END

            /* Registrar Workflows no Caso */
            :ORDEM_WORKFLOW = 0;

            FOR
                SELECT
                    W.MODELO_WORKFLOW_ID

                FROM TBCASO_WORKFLOWS W
                WHERE W.PAINEL_ID = :PAINEL_ID

            INTO
                :MODELO_WORKFLOW_ID

            DO
            BEGIN

                :ORDEM_WORKFLOW = :ORDEM_WORKFLOW + 1;


                :WORKFLOW_ID = COALESCE((SELECT FIRST 1 SPW.OWORKFLOW_ID FROM SPI_WORKFLOW(:MODELO_WORKFLOW_ID, 'CASO: '||FN_LPAD(:CASO_ID, 6, '0')||'', :ITELA, 'M', 0) SPW), 0);

                INSERT INTO TBCASO_REGISTRO_WORKFLOWS (REGISTRO_ID, PAINEL_ID, WORKFLOW_ITEM_ID, ORDEM)
                    VALUES (:CASO_ID, :PAINEL_ID, :WORKFLOW_ID, :ORDEM_WORKFLOW);

            END

            /* Registrar Envolvidos por Padr??o - Motivo */
            FOR
                SELECT
                    ME.USUARIO_ID,
                    IIF(CHAR_LENGTH(U.NOME) > 0, U.NOME, U.USUARIO) AS USUARIO_DESC

                FROM TBCASO_MOTIVO_ENVOLVIDOS ME
                INNER JOIN TBUSUARIO U ON U.CODIGO = ME.USUARIO_ID
                WHERE ME.PAINEL_ID = :PAINEL_ID
                AND ME.MOTIVO_ID = :IMOTIVO_ID
                AND U.STATUS = '1'

            INTO
                :USUARIO_ID,
                :USUARIO_DESC

            DO
            BEGIN

                IF (COALESCE(:USUARIO_ID, 0) <> FN_CURRENT_USER_ID()) THEN
                BEGIN

                    INSERT INTO TBCASO_ENVOLVIDOS (PAINEL_ID, CASO_ID, USUARIO_ID)
                        VALUES (:PAINEL_ID, :CASO_ID, :USUARIO_ID);
    
                    EXECUTE PROCEDURE SPI_CASO_HISTORICO(:CASO_ID, :PAINEL_ID, 'USUARIO '||:USUARIO_DESC||' ENVOLVIDO POR VINCULO COM MOTIVO');

                END
            END

            /* Registrar Comentarios do Caso Anterior - Somente se houver caso de origem da TBCASO_REGISTRO */
            IF (COALESCE(:VINCULO_CASO_TABELA, '') = 'TBCASO_REGISTRO' AND COALESCE(:VINCULO_CASO_ID, 0) > 0) THEN
            BEGIN

                INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, DATAHORA, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, GOSTEI, USUARIO_ID, MENSAGEM, ORIGEM, COMENTARIO, CONTATO, LISTA_FILE, WORKFLOW_ITEM_ID)
                    SELECT
                        GEN_ID(GTBCASO_FEED, 1) AS ID,
                        CF.DE,
                        CF.PARA,
                        CF.EM_COPIA,
                        CF.EM_COPIA_OCULTA,
                        CURRENT_TIMESTAMP AS DATAHORA,
                        CF.ASSUNTO,
                        CAST(:PAINEL_ID AS INTEGER) AS PAINEL_ID,
                        CAST(:CASO_ID AS INTEGER) AS CASO_ID,
                        CF.FILES,
                        CF.SUBFEED,
                        CF.TIPO,
                        CF.GOSTEI,
                        CF.USUARIO_ID,
                        CF.MENSAGEM,
                        2 AS ORIGEM,
                        CF.COMENTARIO,
                        CF.CONTATO,
                        CF.LISTA_FILE,
                        CF.WORKFLOW_ITEM_ID

                    FROM TBCASO_FEED CF
                    INNER JOIN TBCASO_REGISTRO CR ON CR.ID = CF.CASO_ID
                    WHERE CF.COMENTARIO = 1
                    AND CF.CASO_ID = :VINCULO_CASO_ID;
                    
            END

            /***********************************************/
            /* Notifica????o do Sistema para Cria????o de Caso */
            :URL = FN_PARAMETRO('SISTEMA.URL_SERVER')||'/_11160/'||:PAINEL_ID||'?CASO_ID='||:CASO_ID||'';

            :CORPO = '';
            :CORPO = :CORPO||'FOI REGISTRADO UM NOVO CASO POR '|| COALESCE((SELECT FIRST 1 UPPER(IIF(CHAR_LENGTH(U.NOME) > 0, U.NOME, U.USUARIO)) FROM TBUSUARIO U WHERE U.CODIGO = FN_CURRENT_USER_ID()), '') ||'<br>';
            :CORPO = :CORPO||COALESCE((SELECT FIRST 1 'PAINEL: '||FN_LPAD(C.ID, 4, '0')||' - '||C.TITULO FROM TBCASO_PAINEL C WHERE C.ID = :PAINEL_ID), '')||'<br>';
            :CORPO = :CORPO||'<a href="'||:URL||'" target="_blank" >CASO:'||FN_LPAD(:CASO_ID, 6, '0')||' - Ver Este Caso</a><br><br>';
            :CORPO = :CORPO||''|| FORMATDATETIME(CURRENT_TIMESTAMP) ||'';

            FOR
                SELECT
                    X.USUARIO_ID,
                    LIST(TRIM(X.TIPO)) AS TIPOS

                FROM (
                    SELECT
                        U.USUARIO_ID,
                        'RESPONSAVEL' AS TIPO

                    FROM TBCASO_USUARIOS U
                    WHERE U.NOTIFICACAO = 1
                    AND U.RESPONSAVEL = 1
                    AND U.PAINEL_ID = :PAINEL_ID
                    AND U.USUARIO_ID <> FN_CURRENT_USER_ID()
                    AND U.USUARIO_ID > 0

                    UNION

                    SELECT
                        E.USUARIO_ID,
                        'ENVOLVIDO' AS TIPO

                    FROM TBCASO_ENVOLVIDOS E
                    WHERE E.CASO_ID = :CASO_ID
                    AND E.USUARIO_ID <> FN_CURRENT_USER_ID()

                    UNION

                    SELECT
                        R.USUARIO_ID,
                        'USUARIO' AS TIPO

                    FROM TBCASO_REGISTRO R
                    WHERE R.ID = :CASO_ID
                    AND R.USUARIO_ID <> FN_CURRENT_USER_ID()
                ) X

                GROUP BY
                    X.USUARIO_ID

                ORDER BY X.USUARIO_ID DESC

            INTO
                :USUARIO_ID_NOTIF,
                :TIPOS_NOTIF

            DO
            BEGIN

                INSERT INTO TBNOTIFICACAO (TIPO, USUARIO_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, MENSAGEM, EMITENTE)
                    VALUES (0, :USUARIO_ID_NOTIF, 0, 0, 'NOVO CASO', 0, 0, :CORPO, FN_CURRENT_USER_ID());

            END
            /***********************************************/
            /***********************************************/

            :OCASO_ID = :CASO_ID;
            SUSPEND;

        END
    END
END
^

SET TERM ; ^

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

ALTER TABLE TBCAMPANHA
    ADD MENSAGEM BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UTF8;

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcampanha_b01i for tbcampanha
active before insert position 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBCAMPANHA_ID, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcampanha_b02i for tbcampanha
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' REGISTRO INCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAMPANHA', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcampanha_b01u for tbcampanha
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

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

    IF (NEW.DATA_INICIO <> OLD.DATA_INICIO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.INI:'||FORMATDATE(OLD.DATA_INICIO)||'->'||FORMATDATE(NEW.DATA_INICIO);
    END
    
    IF (NEW.DATA_FINAL <> OLD.DATA_FINAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.FIM:'||FORMATDATE(OLD.DATA_FINAL)||'->'||FORMATDATE(NEW.DATA_FINAL);
    END
    
    IF (NEW.MENSAGEM <> OLD.MENSAGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' MENSAGEM ALTERADA!';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAMPANHA', NEW.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcampanha_b02u for tbcampanha
active before update position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';    

    IF (NEW.MENSAGEM <> OLD.MENSAGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' '||FN_ELIPSE2(OLD.MENSAGEM, 230)||'->'||FN_ELIPSE2(NEW.MENSAGEM, 230);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'MENSAGEM ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAMPANHA', NEW.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcampanha_b01d for tbcampanha
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' REGISTRO EXCLUIDO';

        DELETE FROM TBCAMPANHA_CLIENTES T WHERE T.CAMPANHA_ID = OLD.ID;
        DELETE FROM TBCAMPANHA_NOTIFICACAO N WHERE N.CAMPANHA_ID = OLD.ID;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAMPANHA', OLD.ID, HISTORICO);
    END
END
^

SET TERM ; ^

