CREATE TABLE TBAPI_INTEGRACAO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(50),
    USUARIO VARCHAR(100),
    SENHA VARCHAR(100),
    ACCESS_TOKEN VARCHAR(300),
    REFRESH_TOKEN VARCHAR(300),
    SERVIDOR VARCHAR(100));

ALTER TABLE TBAPI_INTEGRACAO
ADD CONSTRAINT PK_TBAPI_INTEGRACAO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_ID;

SET TERM ^ ;

create trigger ttbapi_integracao_b01i for tbapi_integracao
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_id,1);
end
^

SET TERM ; ^

CREATE TABLE TBAPI_INTEGRACAO_METODOS (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(50),
    URL VARCHAR(300),
    AUTHORIZATION_TYPE INTEGER,
    "TYPE" INTEGER,
    API_INTEGRACAO_ID INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_METODOS
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_METODOS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_METODOS_ID;

SET TERM ^ ;

create trigger ttbapi_integracao_metodos_b01i for tbapi_integracao_metodos
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_metodos_id,1);
end
^

SET TERM ; ^

UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA) VALUES (11821, 'ADM', 'ADM', '1   ', '', 'CADASTRO DE API PARA INTEGRAÇÃO', '2022-07-01 10:13:28') MATCHING (CONTROLE, GRUPO);

ALTER TABLE TBAPI_INTEGRACAO
    ADD STATUS INTEGER;

ALTER TABLE TBAPI_INTEGRACAO
    ADD TIPO INTEGER;

DROP TABLE TBAPI_INTEGRACAO_METODOS;

CREATE TABLE TBAPI_INTEGRACAO_AGENDAMENTO (
    ID INTEGER NOT NULL,
    METODO VARCHAR(10),
    TIPO INTEGER,
    DATA DATE,
    HORA VARCHAR(10),
    ULTIMA_EXC TIMESTAMP,
    API_INTEGRACAO_ID INTEGER,
    STATUS INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_AGENDAMENTO
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_AGENDAMENTO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_AGENDAMENTO;

SET TERM ^ ;

create trigger ttbapi_integracao_agend_b01i for tbapi_integracao_agendamento
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_agendamento,1);
end
^

SET TERM ; ^

ALTER TABLE TBAPI_INTEGRACAO
    ADD PARAMETRO1 VARCHAR(50),
    ADD PARAMETRO2 VARCHAR(50),
    ADD PARAMETRO3 VARCHAR(50),
    ADD PARAMETRO4 VARCHAR(50);

ALTER TABLE TBAPI_INTEGRACAO
    ADD FAMILIA_ID INTEGER,
    ADD ESTABELECIMENTO_ID INTEGER,
    ADD PERFIL INTEGER,
    ADD CLIENTE_TIPO_ID INTEGER,
    ADD CLIENTE_SUB_TIPO_ID INTEGER,
    ADD ORIGEM_PRECO_ID INTEGER;

ALTER TABLE TBAPI_INTEGRACAO
    ALTER PERFIL TYPE VARCHAR(20);
	
ALTER TABLE TBAPI_INTEGRACAO
    ADD LOCALIZACAO_ID INTEGER;

ALTER TABLE TBAPI_INTEGRACAO DROP PARAMETRO1;
ALTER TABLE TBAPI_INTEGRACAO DROP PARAMETRO2;
ALTER TABLE TBAPI_INTEGRACAO DROP PARAMETRO3;
ALTER TABLE TBAPI_INTEGRACAO DROP PARAMETRO4;

ALTER TABLE TBAPI_INTEGRACAO
    ADD PARAMETRO1 BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    ADD PARAMETRO2 BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    ADD PARAMETRO3 BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    ADD PARAMETRO4 BLOB SUB_TYPE 1 SEGMENT SIZE 80;

ALTER TABLE TBAPI_INTEGRACAO
    ADD EXPIRES_IN TIMESTAMP;
	
ALTER TABLE TBAPI_INTEGRACAO
    ALTER ACCESS_TOKEN TYPE VARCHAR(1000) CHARACTER SET UTF8;
	
CREATE TABLE TBAPI_INTEGRACAO_COR (
    ID INTEGER NOT NULL,
    API_INTEGRACAO_ID INTEGER,
    COR_ID_LOCAL INTEGER,
    COR_ID_REMOTO INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_COR
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_COR
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_COR;

SET TERM ^ ;

create trigger ttbapi_integracao_cor_b01i for tbapi_integracao_cor
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_cor,1);
end
^

SET TERM ; ^

CREATE TABLE TBAPI_INTEGRACAO_TAM (
    ID INTEGER NOT NULL,
    API_INTEGRACAO_ID INTEGER,
    COR_ID_LOCAL INTEGER,
    COR_ID_REMOTO INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_TAM
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_TAM
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_TAM;

SET TERM ^ ;

create trigger ttbapi_integracao_TAM_b01i for tbapi_integracao_TAM
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_TAM,1);
end
^

SET TERM ; ^

ALTER TABLE TBAPI_INTEGRACAO_TAM
    ALTER COR_ID_LOCAL TO TAM_ID_LOCAL,
    ALTER COR_ID_REMOTO TO ATM_ID_REMOTO;

CREATE TABLE TBAPI_INTEGRACAO_MOD (
    ID INTEGER NOT NULL,
    API_INTEGRACAO_ID INTEGER,
    MOD_ID_LOCAL INTEGER,
    MOD_ID_REMOTO INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_MOD
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_MOD
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_MOD;

SET TERM ^ ;

create trigger ttbapi_integracao_mod_b01i for tbapi_integracao_mod
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_mod,1);
end
^

SET TERM ; ^

ALTER TABLE TBEAN
    ADD ID INTEGER;

CREATE SEQUENCE GTBEAN_ID;

SET TERM ^ ;

create trigger ttbean_b01i for tbean
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbean,1);
end
^

SET TERM ; ^

update tbean e set e.id = gen_id(gtbean,1);

ALTER TABLE TBAPI_INTEGRACAO_TAM
    ALTER ATM_ID_REMOTO TO TAM_ID_REMOTO;

CREATE INDEX ITBAPI_INTEGRACAO_MOD_02
ON TBAPI_INTEGRACAO_MOD (API_INTEGRACAO_ID);

CREATE INDEX ITBAPI_INTEGRACAO_MOD_01
ON TBAPI_INTEGRACAO_MOD (MOD_ID_LOCAL);

CREATE INDEX ITBAPI_INTEGRACAO_COR_02
ON TBAPI_INTEGRACAO_COR (API_INTEGRACAO_ID);

CREATE INDEX ITBAPI_INTEGRACAO_COR_01
ON TBAPI_INTEGRACAO_COR (COR_ID_LOCAL);

CREATE INDEX ITBAPI_INTEGRACAO_TAM_02
ON TBAPI_INTEGRACAO_TAM (API_INTEGRACAO_ID);

CREATE INDEX ITBAPI_INTEGRACAO_TAM_01
ON TBAPI_INTEGRACAO_TAM (TAM_ID_LOCAL);

CREATE TABLE TBAPI_INTEGRACAO_PRO (
    ID INTEGER NOT NULL,
    API_INTEGRACAO_ID INTEGER,
    PRO_ID_LOCAL INTEGER,
    PRO_ID_REMOTO INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_PRO
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_PRO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_PRO;

SET TERM ^ ;

create trigger ttbapi_integracao_pro_b01i for tbapi_integracao_pro
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_pro,1);
end
^

SET TERM ; ^

CREATE INDEX ITBAPI_INTEGRACAO_PRO_02
ON TBAPI_INTEGRACAO_PRO (API_INTEGRACAO_ID);

CREATE INDEX ITBAPI_INTEGRACAO_PRO_01
ON TBAPI_INTEGRACAO_PRO (PRO_ID_LOCAL);

ALTER TABLE TBAPI_INTEGRACAO
    ADD MOSTRAR_LOG INTEGER;

ALTER TABLE TBAPI_INTEGRACAO
    ADD REPRESENTANTE_ID INTEGER;

CREATE TABLE TBAPI_INTEGRACAO_AGD (
    ID INTEGER NOT NULL,
    API_INTEGRACAO_ID INTEGER,
    TIPO INTEGER,
    TIPO_AGD INTEGER,
    INTERVALO INTEGER,
    HORA_INICIO TIME,
    HORA_FIM TIME,
    SEG INTEGER,
    TER INTEGER,
    QUA INTEGER,
    QUI INTEGER,
    SEX INTEGER,
    SAB INTEGER,
    DOM INTEGER,
    DIA INTEGER,
    DATAHORAULTIMOEXEC INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_AGD
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_AGD
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_AGD;

SET TERM ^ ;

create trigger ttbapi_integracao_agd_b01i for tbapi_integracao_agd
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_agd,1);
end
^

SET TERM ; ^

ALTER TABLE TBAPI_INTEGRACAO_AGD
    ADD REPETIVEL INTEGER;

ALTER TABLE TBAPI_INTEGRACAO_AGD
    ADD STATUS INTEGER;

ALTER TABLE TBAPI_INTEGRACAO_AGD DROP DATAHORAULTIMOEXEC;


ALTER TABLE TBAPI_INTEGRACAO_AGD
    ADD DATAHORAULTIMOEXEC TIMESTAMP;

SET TERM ^ ;

CREATE OR ALTER trigger ttbapi_integracao_agd_b01i for tbapi_integracao_agd
active before insert position 0
as
begin
  if (new.id is null) then
  begin
    new.id = gen_id(gtbapi_integracao_agd,1);

    new.datahoraultimoexec = cast('01.01.2001 00:00' as timestamp);
  end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbapi_integracao_agd_b01i for tbapi_integracao_agd
active before insert position 0
as
begin
  new.datahoraultimoexec = cast('01.01.2001 00:00' as timestamp);

  if (new.id is null) then
  begin
    new.id = gen_id(gtbapi_integracao_agd,1);
  end
end
^

SET TERM ; ^

CREATE INDEX ITBAPI_INTEGRACAO_AGD_04
ON TBAPI_INTEGRACAO_AGD (API_INTEGRACAO_ID);

CREATE INDEX ITBAPI_INTEGRACAO_AGD_03
ON TBAPI_INTEGRACAO_AGD (HORA_FIM);

CREATE INDEX ITBAPI_INTEGRACAO_AGD_02
ON TBAPI_INTEGRACAO_AGD (HORA_INICIO);

CREATE INDEX ITBAPI_INTEGRACAO_AGD_01
ON TBAPI_INTEGRACAO_AGD (STATUS);

CREATE TABLE TBAPI_INTEGRACAO_UPDATE (
    ID INTEGER NOT NULL,
    TABELA VARCHAR(10),
    TABELA_ID INTEGER,
    TAMANHO INTEGER,
    SUB_ID INTEGER,
    TIPO INTEGER,
    VERSAO INTEGER);

ALTER TABLE TBAPI_INTEGRACAO_UPDATE
ADD CONSTRAINT PK_TBAPI_INTEGRACAO_UPDATE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBAPI_INTEGRACAO_UPDATE;

SET TERM ^ ;

create trigger ttbapi_integracao_update_b01i for tbapi_integracao_update
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbapi_integracao_update,1);
end
^

SET TERM ; ^

DROP TRIGGER TTBCOR_B10U;

SET TERM ^ ;

CREATE OR ALTER trigger ttbmodelo_999 for tbmodelo
active before insert or update or delete position 999
AS
begin
  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBMODELO'
    and Status = '1';
end
^

SET TERM ; ^

DROP TRIGGER TTBMODELO_OBSERVACAO_B01U;

DROP TRIGGER TTBMODELO_PRECO_B01I;

DROP TRIGGER TTBMODELO_PRECO_B02U;

DROP TRIGGER TTBUPDATE_ECOM_LACLOFIT_B01I;

DROP TRIGGER TTBPEDIDO_B10U;

SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_saldo_999 for tbestoque_saldo
active before insert or update or delete position 999
AS
declare variable produto integer;
begin

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBESTOQUE_SALDO'
    and Status = '1';

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBREPOSICAO_CONSUMO'
    and Status = '1';

  --se vende no ecommerce
  produto = coalesce((select first 1 k.produto_id from SPC_SKUS_ECOMMERCE2(0,new.produto_codigo) k),0);
  if(produto > 0)then
  begin
      UPDATE OR INSERT INTO TBUPDATE_ECOMMERCE (TABELA, TABELA_ID, SUB_ID)
            VALUES ('TBESTOQUE_SALDO', new.produto_codigo, new.estabelecimento_codigo)
          MATCHING (TABELA, TABELA_ID, SUB_ID);
  end

  if(updating or inserting)then
  begin
    produto = coalesce((select first 1 y.id from tbapi y where y.estabelecimento_id = new.estabelecimento_codigo and y.localizacao_id = new.localizacao_codigo),0);
    if(produto > 0)then
    begin
        if(updating )then execute procedure spi_integracao_api('TBESTOQUE_SALDO',new.produto_codigo,'A');
    end
  end
end
^

SET TERM ; ^

DROP TABLE TBUPDATE_ECOM_LACLOFIT;

SET TERM ^ ;

CREATE trigger ttbapi_integracao_update_b02i for tbapi_integracao_update
active before insert position 2
AS
begin
  new.versao = coalesce(new.versao,0) + 1;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_saldo_999 for tbestoque_saldo
active before insert or update or delete position 999
AS
declare variable produto integer;
begin

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBESTOQUE_SALDO'
    and Status = '1';

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBREPOSICAO_CONSUMO'
    and Status = '1';

  --se vende no ecommerce
  produto = coalesce((select first 1 k.produto_id from SPC_SKUS_ECOMMERCE2(0,new.produto_codigo) k),0);
  if(produto > 0)then
  begin
      UPDATE OR INSERT INTO TBUPDATE_ECOMMERCE (TABELA, TABELA_ID, SUB_ID)
            VALUES ('TBESTOQUE_SALDO', new.produto_codigo, new.estabelecimento_codigo)
          MATCHING (TABELA, TABELA_ID, SUB_ID);
  end

  UPDATE OR INSERT INTO TBAPI_INTEGRACAO_UPDATE (TABELA, TABELA_ID, SUB_ID)
            VALUES ('TBESTOQUE_SALDO', new.produto_codigo, new.estabelecimento_codigo)
          MATCHING (TABELA, TABELA_ID, SUB_ID);

  if(updating or inserting)then
  begin
    produto = coalesce((select first 1 y.id from tbapi y where y.estabelecimento_id = new.estabelecimento_codigo and y.localizacao_id = new.localizacao_codigo),0);
    if(produto > 0)then
    begin
        if(updating )then execute procedure spi_integracao_api('TBESTOQUE_SALDO',new.produto_codigo,'A');
    end
  end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_saldo_999 for tbestoque_saldo
active before insert or update or delete position 999
AS
declare variable produto integer;
begin

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBESTOQUE_SALDO'
    and Status = '1';

  update tbreplica_tabela set Status = '0'
  Where tabela = 'TBREPOSICAO_CONSUMO'
    and Status = '1';

  --se vende no ecommerce
  produto = coalesce((select first 1 k.produto_id from SPC_SKUS_ECOMMERCE2(0,new.produto_codigo) k),0);
  if(produto > 0)then
  begin
      UPDATE OR INSERT INTO TBUPDATE_ECOMMERCE (TABELA, TABELA_ID, SUB_ID)
            VALUES ('TBESTOQUE_SALDO', new.produto_codigo, new.estabelecimento_codigo)
          MATCHING (TABELA, TABELA_ID, SUB_ID);
  end

  if(inserting)then execute procedure spi_integracao_mobile('TBESTOQUE_SALDO',new.produto_codigo,'I');
  if(updating )then execute procedure spi_integracao_mobile('TBESTOQUE_SALDO',new.produto_codigo,'A');
  if(deleting )then execute procedure spi_integracao_mobile('TBESTOQUE_SALDO',old.produto_codigo,'D');

  if(updating or inserting)then
  begin
    produto = coalesce((select first 1 y.id from tbapi y where y.estabelecimento_id = new.estabelecimento_codigo and y.localizacao_id = new.localizacao_codigo),0);
    if(produto > 0)then
    begin
        if(updating )then execute procedure spi_integracao_api('TBESTOQUE_SALDO',new.produto_codigo,'A');
    end
  end
end
^

SET TERM ; ^

DROP TABLE TBAPI_INTEGRACAO_UPDATE;

