
ALTER TABLE TBCASO_FEED_GOSTEI
    ADD FEED_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_FEED_GOSTEI.FEED_ID IS
'id do feed';

CREATE OR ALTER procedure spu_feed_gostei (
    usuario_id integer,
    feed_id integer)
returns (
    usuario_gostou integer,
    qtd_gostou integer)
as
begin

  :USUARIO_GOSTOU = coalesce((select first 1 g.valor  from tbcaso_feed_gostei g where g.usuario_id = :usuario_id and g.feed_id = :FEED_ID),0);
  :USUARIO_GOSTOU = iif( coalesce(:USUARIO_GOSTOU,0) = 0 , 1, 0);

  update or insert into tbcaso_feed_gostei (valor, usuario_id, feed_id)
  values(:USUARIO_GOSTOU, :usuario_id, :FEED_ID)
  matching(usuario_id,feed_id);


  :QTD_GOSTOU  = coalesce((select sum(g.valor) from tbcaso_feed_gostei g where g.feed_id = :FEED_ID),0);

  suspend;
end;

CREATE INDEX ITBCASO_FEED_GOSTEI_02
ON TBCASO_FEED_GOSTEI (FEED_ID);

CREATE INDEX ITBCASO_FEED_GOSTEI_01
ON TBCASO_FEED_GOSTEI (USUARIO_ID);

ALTER TABLE TBCASO_FEED
    ADD ORIGEM INTEGER;

COMMENT ON COLUMN TBCASO_FEED.ORIGEM IS
'0-registro manual
1-email';

ALTER TABLE TBCASO_FEED ALTER COLUMN ORIGEM
SET DEFAULT 0;

CREATE OR ALTER trigger ttbcaso_feed_b02i for tbcaso_feed
active before insert position 0
AS
begin
  if(new.origem = 0)then
  begin
    if(new.de <> '' and new.para <> '' and new.assunto <> '' and new.mensagem <> '')then
    begin
       insert into tbemail (email, assunto, corpo, status, usuario_id)
       values ('anderson@delfa.com.be', new.assunto, new.mensagem, 0, 186);
    end
  end
end;

COMMENT ON TRIGGER TTBCASO_FEED_B02I IS 'envia email apartir registro de feeds';

ALTER TABLE TBEMAIL
    ADD CC VARCHAR(300) DEFAULT '',
    ADD CCO VARCHAR(300) DEFAULT '';

COMMENT ON COLUMN TBEMAIL.EMAIL IS
'email de destino';

COMMENT ON COLUMN TBEMAIL.USUARIO_ID IS
'usuario id';

COMMENT ON COLUMN TBEMAIL.ASSUNTO IS
'asunto do email';

COMMENT ON COLUMN TBEMAIL.CORPO IS
'corpo do email';

COMMENT ON COLUMN TBEMAIL.STATUS IS
'menor que 10 esta tentando enviar, maior enviado';

COMMENT ON COLUMN TBEMAIL.DATAHORA IS
'data do registro';

COMMENT ON COLUMN TBEMAIL.DATAHORA_ENVIO IS
'data e hora do envio';

COMMENT ON COLUMN TBEMAIL.FLAG IS
'usado para nao tentar enviar os emails que estao em processo de envio';

COMMENT ON COLUMN TBEMAIL.CC IS
'email em copia';

COMMENT ON COLUMN TBEMAIL.CCO IS
'email em copia oculta';

COMMENT ON TABLE TBEMAIL IS 'tabela que contem os emails que serao e foam enviados pelo sistema';

ALTER TABLE TBCASO_PAINEL
    ADD EMAIL_PASS VARCHAR(100),
    ADD EMAIL_SMTP VARCHAR(100),
    ADD PORTA_SMTP INTEGER,
    ADD AUTENTICACAO INTEGER DEFAULT 0,
    ADD SSL_TLS INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_PAINEL.EMAIL_PASS IS
'senha do email';

COMMENT ON COLUMN TBCASO_PAINEL.EMAIL_SMTP IS
'servidor de envio de email';

COMMENT ON COLUMN TBCASO_PAINEL.PORTA_SMTP IS
'porta do servidor de envio';

COMMENT ON COLUMN TBCASO_PAINEL.AUTENTICACAO IS
'0-sem 1-com';

COMMENT ON COLUMN TBCASO_PAINEL.SSL_TLS IS
'0-sem 1-com';

ALTER TABLE TBEMAIL
    ADD PAINEL_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBEMAIL.PAINEL_ID IS
'id do painel de casos';

ALTER TABLE TBCASO_PAINEL
    ADD EMAIL_MONITOR VARCHAR(300);

COMMENT ON COLUMN TBCASO_PAINEL.EMAIL_MONITOR IS
'email para recebimento de feed dos casos';

ALTER TABLE TBCASO_PAINEL_CONF
    ADD CAMPO_VISUALIZAR VARCHAR(50) DEFAULT '';

COMMENT ON COLUMN TBCASO_PAINEL_CONF.CAMPO_VISUALIZAR IS
'nome do campo que retorna nas visualizacoes';

CREATE OR ALTER procedure caso_detalhe (
    painel_id integer,
    caso_id integer)
returns (
    tipo integer,
    descricao varchar(100),
    valor varchar(1000))
as
declare variable email varchar(50);
declare variable monitor varchar(50);
declare variable motivo varchar(50);
declare variable tipov varchar(50);
declare variable origem varchar(50);
declare variable responsavel varchar(50);
declare variable cor varchar(50);
declare variable status varchar(50);
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
        tipo = 7;
        descricao = 'Motivo';      valor = MOTIVO;      suspend;
        descricao = 'Tipo';        valor = TIPOV;       suspend;
        descricao = 'Origem';      valor = ORIGEM;      suspend;
        descricao = 'Responsavel'; valor = RESPONSAVEL; suspend;
        descricao = 'Status';      valor = STATUS;      suspend;
    end

    for
       select
        
            a.tipo,
            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(a.json,a.campo_visualizar)
        
            ,a.valor))) as valor
        
        from
            (
                select
                
                    f.id,
                    c.registro_id,
                    f.tipo,
                    f.descricao,
                    c.json,
                    f.campo_visualizar,
                    cast(c.valor as varchar(1000)) as valor,
                    iif(f.tipo = 9 or f.tipo = 5,c.valor, 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
            )a
            left join tbcaso_painel_conf_itens i on (i.campo_id = a.ID and i.valor = a.chave)
    into
        :tipo, 
        :descricao,
        :valor
    do
    begin
        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';

CREATE OR ALTER trigger ttbcaso_registro_b02i for tbcaso_registro
active after insert position 0
AS
    declare variable tipo integer;
    declare variable descricao varchar(50);
    declare variable monitor varchar(100);
    declare variable motivo varchar(100);
    declare variable valor varchar(1000);
    declare variable corpo varchar(4000);
begin
    corpo = '';

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

    for
       select * from CASO_DETALHE(new.painel_id, new.id)
    into
        :tipo,
        :descricao,
        :valor
    do
    begin
        corpo = descricao||': '||:valor||'<br>';

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



    insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id)
    values (
        0,
        :monitor,
        new.id || ' - Caso Aberto: '|| :motivo,
        :corpo,
        0,
        (select u.email from tbusuario u where u.codigo = new.usuario_id),
        '',
        new.painel_id
    );

end;

CREATE TABLE TBCASO_HTML (
    ID INTEGER NOT NULL,
    HTML BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    DESCRICAO VARCHAR(50));

ALTER TABLE TBCASO_HTML
ADD CONSTRAINT PK_TBCASO_HTML
PRIMARY KEY (ID);

COMMENT ON TABLE TBCASO_HTML IS 'tabela com o hrml dos emails e dos modelos de email';

CREATE SEQUENCE GTBCASO_HTML;

create trigger tbcaso_html_bi for tbcaso_html
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbcaso_html,1);
end;

CREATE OR ALTER trigger ttbcaso_feed_b02i for tbcaso_feed
active before insert position 0
AS
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)then
    begin

       insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id)
       values (
        0,
        new.para,
        new.assunto,
        new.mensagem,
        new.usuario_id,
        new.em_copia,
        new.em_copia_oculta,
        new.painel_id
       );

    end
  end
end;

CREATE OR ALTER trigger ttbcaso_registro_b02i for tbcaso_registro
active after insert position 0
AS
    declare variable tipo integer;
    declare variable descricao varchar(50);
    declare variable monitor varchar(100);
    declare variable motivo varchar(100);
    declare variable valor varchar(1000);
    declare variable corpo varchar(8000);
    declare variable html1 varchar(4000);
    declare variable html2 varchar(4000);
begin


    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/1/'||new.id||'" target="_blank">Abrir Caso '||new.id||' na web</a></p>';
    corpo = html1;
    corpo = corpo||'<p><u>Data</u>: '||formatdatetime(current_timestamp)||'</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,
        new.id || ' - Caso Aberto: '|| :motivo,
        :corpo,
        0,
        (select u.email from tbusuario u where u.codigo = new.usuario_id),
        '',
        new.painel_id
    );

end;


ALTER TABLE TBCASO_PAINEL_CONF
    ADD AUTOLOAD INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_PAINEL_CONF.AUTOLOAD IS
'1- se do tipo 7 e vinculado a outro campo, e ativado automatico';

CREATE OR ALTER trigger ttbcaso_registro_b02i for tbcaso_registro
active after insert position 0
AS
    declare variable tipo integer;
    declare variable descricao varchar(50);
    declare variable monitor varchar(100);
    declare variable motivo varchar(100);
    declare variable valor varchar(1000);
    declare variable corpo varchar(8000);
    declare variable html1 varchar(4000);
    declare variable html2 varchar(4000);
begin


    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/1/'||new.id||'" target="_blank">Abrir Caso '||new.id||' na web</a></p>';
    corpo = corpo || html1;
    corpo = corpo || '<p><u>Data</u>: '||formatdatetime(current_timestamp)||'</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,
        new.id || ' - Caso Aberto: '|| :motivo,
        :corpo,
        0,
        (select u.email from tbusuario u where u.codigo = new.usuario_id),
        '',
        new.painel_id
    );

end;

CREATE OR ALTER procedure caso_detalhe (
    painel_id integer,
    caso_id integer)
returns (
    tipo integer,
    descricao varchar(100),
    valor varchar(1000))
as
declare variable email varchar(50);
declare variable monitor varchar(50);
declare variable motivo varchar(50);
declare variable tipov varchar(50);
declare variable origem varchar(50);
declare variable responsavel varchar(50);
declare variable cor varchar(50);
declare variable status varchar(50);
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
        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.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(a.json,a.campo_visualizar)
        
            ,a.valor))) as valor
        
        from
            (
                select
                
                    f.id,
                    c.registro_id,
                    f.tipo,
                    f.descricao,
                    c.json,
                    f.campo_visualizar,
                    cast(c.valor as varchar(1000)) as valor,
                    iif(f.tipo = 9 or f.tipo = 5,c.valor, 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
            )a
            left join tbcaso_painel_conf_itens i on (i.campo_id = a.ID and i.valor = a.chave)
    into
        :tipo, 
        :descricao,
        :valor
    do
    begin
        if(coalesce(: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';

CREATE OR ALTER trigger ttbcaso_feed_b02i for tbcaso_feed
active before insert position 0
AS
declare variable corpo varchar(8000);
declare variable html1 varchar(4000);
declare variable html2 varchar(4000);
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)then
    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);

       corpo = '<html><body><p><a href="https://gc.delfa.com.br/_11150/1/'||new.caso_id||'" target="_blank">Abrir Caso '||new.caso_id||' na web</a></p>';
       corpo = corpo || html1;
       corpo = corpo || '<p><u>Data</u>: '||formatdatetime(current_timestamp) || '</p>';
       corpo = corpo || new.mensagem;
       corpo = corpo || html2;

       insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id)
       values (
        0,
        new.para,
        new.assunto,
        :corpo,
        new.usuario_id,
        new.em_copia,
        new.em_copia_oculta,
        new.painel_id
       );

    end
  end
end;

ALTER TABLE TBCASO_PAINEL
    ADD SQL_EMAIL_CONTATO INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_PAINEL.SQL_EMAIL_CONTATO IS
'id do sql que retorna os emails de contato';

CREATE trigger tbcaso_feed_b03i for tbcaso_feed
active before insert position 0
AS
declare variable old_status integer;
declare variable new_status integer;
declare variable tmp integer;
begin
  old_status = (select r.status_id from tbcaso_registro r where r.id = new.caso_id and r.painel_id = new.painel_id);
  tmp        = (select s.aberto from tbcaso_status s where s.id = :old_status);

  if(tmp = 1  and new.usuario_id > 0)then
  begin
     tmp = (select first 1 s.id from tbcaso_status s where s.atendido = 1);
     update tbcaso_registro r set r.status_id = :tmp where r.id = new.caso_id and r.painel_id = new.painel_id;
  end
end;

COMMENT ON TRIGGER TBCASO_FEED_B03I IS 'muda o istatus ao registrar um feed para um caso que esta como novo';

CREATE OR ALTER procedure caso_detalhe (
    painel_id integer,
    caso_id integer)
returns (
    tipo integer,
    descricao varchar(100),
    valor varchar(1000),
    campo_id integer)
as
declare variable email varchar(50);
declare variable monitor varchar(50);
declare variable motivo varchar(50);
declare variable tipov varchar(50);
declare variable origem varchar(50);
declare variable responsavel varchar(50);
declare variable cor varchar(50);
declare variable status varchar(50);
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(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,
                    cast(c.valor as varchar(1000)) as valor,
                    iif(f.tipo = 9 or f.tipo = 5,c.valor, 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
            )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(coalesce(: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';

CREATE TABLE TBCASO_PARAMETROS_USUARIO (
    ID INTEGER,
    DESCRICAO VARCHAR(100),
    NOME VARCHAR(50),
    PAINEL_ID INTEGER);

COMMENT ON COLUMN TBCASO_PARAMETROS_USUARIO.DESCRICAO IS
'descricao do parametro';

COMMENT ON COLUMN TBCASO_PARAMETROS_USUARIO.NOME IS
'nome do parametro q sera usado nos sqls';

COMMENT ON COLUMN TBCASO_PARAMETROS_USUARIO.PAINEL_ID IS
'id do painel de casos';

COMMENT ON TABLE TBCASO_PARAMETROS_USUARIO IS 'tabela com os parametros que podem ser usados no SQL e nas formulas de validacao, um bom uso e para REPRESENTANTE';

CREATE SEQUENCE GTBCASO_PARAMETROS_USUARIO;

create trigger ttbcaso_parametros_usuario_bi for tbcaso_parametros_usuario
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbcaso_parametros_usuario,1);
end;


CREATE TABLE TBCASO_USUARIO_PARAMETRO (
    ID INTEGER NOT NULL,
    USUARIO_ID INTEGER,
    PARAMETRO_ID INTEGER,
    VALOR VARCHAR(10));

ALTER TABLE TBCASO_USUARIO_PARAMETRO
ADD CONSTRAINT PK_TBCASO_USUARIO_PARAMETRO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBCASO_USUARIO_PARAMETRO.USUARIO_ID IS
'id do usuario';

COMMENT ON COLUMN TBCASO_USUARIO_PARAMETRO.PARAMETRO_ID IS
'id do parametro';

COMMENT ON COLUMN TBCASO_USUARIO_PARAMETRO.VALOR IS
'valor do parametro';

COMMENT ON TABLE TBCASO_USUARIO_PARAMETRO IS 'tabela com os parametros e os usuarios, se na tabela de parametros tem o parametro representante_id, nesta tem o id do representante';

CREATE SEQUENCE GTBCASO_USUARIO_PARAMETRO;

create trigger tbcaso_usuario_parametro_bi for tbcaso_usuario_parametro
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbcaso_usuario_parametro,1);
end;

CREATE INDEX ITBCASO_USUARIO_PARAMETRO_02
ON TBCASO_USUARIO_PARAMETRO (PARAMETRO_ID);

CREATE INDEX ITBCASO_USUARIO_PARAMETRO_01
ON TBCASO_USUARIO_PARAMETRO (USUARIO_ID);

CREATE INDEX ITBCASO_PARAMETROS_USUARIO_02
ON TBCASO_PARAMETROS_USUARIO (PAINEL_ID);

CREATE INDEX ITBCASO_PARAMETROS_USUARIO_01
ON TBCASO_PARAMETROS_USUARIO (ID);

CREATE trigger ttbcaso_parametros_usuario_b01i for tbcaso_parametros_usuario
active before insert position 0
AS
declare variable usuario_id integer;
begin

  for
    select
      u.usuario_id
    from
        tbcaso_usuarios u
    where u.painel_id = new.painel_id
  into
    :usuario_id
  do
  begin
    insert into tbcaso_usuario_parametro (usuario_id, parametro_id, valor)
    values (:usuario_id, new.id, 0);
  end

end;

COMMENT ON TRIGGER TTBCASO_PARAMETROS_USUARIO_B01I IS 'ao inserir um parametro, replica para cada usuario';

CREATE trigger ttbcaso_usuarios_b01i for tbcaso_usuarios
active before insert position 0
AS
declare variable parametro_id integer;
begin

  for
    select
      u.id
    from
        tbcaso_parametros_usuario u
    where u.painel_id = new.painel_id
  into
    :parametro_id
  do
  begin
    insert into tbcaso_usuario_parametro (usuario_id, parametro_id, valor)
    values (new.usuario_id, :parametro_id, 0);
  end

end;

COMMENT ON TRIGGER TTBCASO_USUARIOS_B01I IS 'insere os parametros de usuario para o novo usuario';

ALTER TABLE TBCASO_USUARIOS
    ADD FINALIZAR INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_USUARIOS.FINALIZAR IS
'1-pode finalizar casos
0-nao pode finalizar casos';

ALTER TABLE TBCASO_USUARIOS
    ADD FEED INTEGER;

COMMENT ON COLUMN TBCASO_USUARIOS.FEED IS
'1-pode editar um feed
0-nao pode editar um feed';

ALTER TABLE TBCASO_USUARIOS ALTER COLUMN FEED
SET DEFAULT 0;


ALTER TABLE TBCASO_FEED
    ADD COMENTARIO INTEGER DEFAULT 0;

COMMENT ON COLUMN TBCASO_FEED.COMENTARIO IS
'1- e um comentario interno
0- nao e um comentario interno';

CREATE INDEX ITBCASO_FEED_04
ON TBCASO_FEED (COMENTARIO);

ALTER TABLE TBMENU
    ADD URL VARCHAR(50);

COMMENT ON COLUMN TBMENU.URL IS
'caminho adicinal da url, pode ser um parametro';

ALTER TABLE TBMENU ALTER COLUMN URL
SET DEFAULT '';

CREATE trigger ttbesteira_b03i for tbesteira
active before insert position 3
AS
begin
  if(new.familia_codigo = 3)then
  begin
     UPDATE OR INSERT INTO TBTV_AGENDAMENTO ("DESC", GP_ID)  VALUES (new.descricao, new.codigo) MATCHING ("DESC", GP_ID);
  end
end;

COMMENT ON TRIGGER TTBESTEIRA_B03I IS 'adiciona  gp no tratamento do bsc';

CREATE trigger ttbesteira_b10u for tbesteira
active before update position 10
AS
begin
  if(new.familia_codigo = 3 and old.familia_codigo <> 3)then
  begin
     UPDATE OR INSERT INTO TBTV_AGENDAMENTO ("DESC", GP_ID)  VALUES (new.descricao, new.codigo) MATCHING ("DESC", GP_ID);
  end
end;

COMMENT ON TRIGGER TTBESTEIRA_B10U IS 'adiciona ou atualiza o gp no tratamento do bsc';

CREATE TABLE TBNOTIFICACAO (
    ID INTEGER NOT NULL,
    TIPO INTEGER DEFAULT 0,
    USUARIO_ID INTEGER DEFAULT 0,
    TODOS INTEGER DEFAULT 0,
    MENU_ID INTEGER DEFAULT 0,
    TITULO VARCHAR(50) DEFAULT '',
    MENSAGEM BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    LEITURA INTEGER DEFAULT 0,
    ENVIO INTEGER DEFAULT 0);

ALTER TABLE TBNOTIFICACAO
ADD CONSTRAINT PK_TBNOTIFICACAO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBNOTIFICACAO.TIPO IS
'1-mensagem
2-erro
3-evento
4-funcao';

COMMENT ON COLUMN TBNOTIFICACAO.USUARIO_ID IS
'id do usuario';

COMMENT ON COLUMN TBNOTIFICACAO.TODOS IS
'1-envia para todos sos usuarios';

COMMENT ON COLUMN TBNOTIFICACAO.MENU_ID IS
'id do menu';

COMMENT ON COLUMN TBNOTIFICACAO.TITULO IS
'titulo da notificacao';

COMMENT ON COLUMN TBNOTIFICACAO.MENSAGEM IS
'mensagem, pode conter html';

COMMENT ON COLUMN TBNOTIFICACAO.LEITURA IS
'0-nao lido
1-lido';

COMMENT ON COLUMN TBNOTIFICACAO.ENVIO IS
'quantidade de envios';

COMMENT ON TABLE TBNOTIFICACAO IS 'tabela de notificacoes, contem mensagem que serao enviadas ao usuarios do sistema, e podem disparar eventos';

CREATE SEQUENCE GTBNOTIFICACAO;

create trigger ttbnotificacao_b1i for tbnotificacao
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbnotificacao,1);
end;

ALTER TABLE TBNOTIFICACAO
    ADD DATA_HORA TIMESTAMP DEFAULT 'now';

COMMENT ON COLUMN TBNOTIFICACAO.DATA_HORA IS
'data hora do registro';

ALTER TABLE TBCASO_USUARIOS
    ADD NOTIFICACAO INTEGER;

COMMENT ON COLUMN TBCASO_USUARIOS.NOTIFICACAO IS
'1-recebe notificacoes
0-nao recebe';

ALTER TABLE TBCASO_USUARIOS ALTER COLUMN NOTIFICACAO
SET DEFAULT 0;

CREATE OR ALTER trigger tbcaso_feed_b03i for tbcaso_feed
active before insert position 0
AS
declare variable old_status integer;
declare variable new_status integer;
declare variable tmp integer;
begin
  old_status = (select r.status_id from tbcaso_registro r where r.id = new.caso_id and r.painel_id = new.painel_id);
  tmp        = (select s.aberto from tbcaso_status s where s.id = :old_status);

  if(tmp = 1 and new.usuario_id > 0)then
  begin
     tmp = (select first 1 s.id from tbcaso_status s where s.atendido = 1);

     if(tmp > 0)then
     begin
        update tbcaso_registro r set r.status_id = :tmp where r.id = new.caso_id and r.painel_id = new.painel_id;
     end
  end
end;

CREATE INDEX ITBNOTIFICACAO_02
ON TBNOTIFICACAO (TIPO);

CREATE INDEX ITBNOTIFICACAO_01
ON TBNOTIFICACAO (USUARIO_ID);

ALTER TABLE TBNOTIFICACAO
    ADD EMITENTE INTEGER DEFAULT 0;

COMMENT ON COLUMN TBNOTIFICACAO.EMITENTE IS
'id do usuario que enviou a mensagem';

ALTER TABLE TBNOTIFICACAO
    ADD AGENDAMENTO TIMESTAMP,
    ADD EXECUTADO INTEGER;

COMMENT ON COLUMN TBNOTIFICACAO.AGENDAMENTO IS
'data e hora do agendamento';

COMMENT ON COLUMN TBNOTIFICACAO.EXECUTADO IS
'1-agendamento foi executado
0-agendamento nao foi executado';

ALTER TABLE TBNOTIFICACAO ALTER COLUMN EXECUTADO
SET DEFAULT 0;

CREATE INDEX ITBNOTIFICACAO_04
ON TBNOTIFICACAO (EXECUTADO);

CREATE INDEX ITBNOTIFICACAO_03
ON TBNOTIFICACAO (AGENDAMENTO);

ALTER TABLE TBNOTIFICACAO
    ADD TABELA VARCHAR(50) DEFAULT '',
    ADD TABELA_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBNOTIFICACAO.TABELA IS
'nome da tabela a quem a notificacao esta ligada';

COMMENT ON COLUMN TBNOTIFICACAO.TABELA_ID IS
'id da tabela a quem a notificacao esta ligada';

CREATE INDEX ITBNOTIFICACAO_08
ON TBNOTIFICACAO (TABELA);

CREATE INDEX ITBNOTIFICACAO_07
ON TBNOTIFICACAO (TABELA_ID);

CREATE INDEX ITBNOTIFICACAO_06
ON TBNOTIFICACAO (EXECUTADO);

CREATE INDEX ITBNOTIFICACAO_05
ON TBNOTIFICACAO (AGENDAMENTO);

CREATE SEQUENCE GTBTV_AGENDAMENTO;

create trigger ttbtv_agendamento_b01i for tbtv_agendamento
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbtv_agendamento,1);
end;


