create view VWPRODUTOS_PDV (
ID,
ATIVO,
PERMITE_FRACIONAR,
GTIN,
DESCRICAO,
UND,
VL_UNITARIO,
NCM,
EXTIPI,
CFOP,
ORIGEM,
CST,
SN_ALIQCREDITO,
ICMS_ALIQUOTA,
ID_CSTPIS,
PIS_ALIQUOTA,
ID_CSTCOFINS,
COFINS_ALIQUOTA,
CEST,
QTDE_ESTOQUE)
as
SELECT

    t.produto_id ID,
    'S' ATIVO,
    'N' PERMITE_FRACIONAR,
    t.ean GTIN,
    p.descricao DESCRICAO,
    'UN' UND,
    0 VL_UNITARIO,
    0 NCM,
    0 EXTIPI,
    0 CFOP,
    3 ORIGEM,
    0 CST,
    0 SN_ALIQCREDITO,
    0 ICMS_ALIQUOTA,
    0 ID_CSTPIS,
    0 PIS_ALIQUOTA,
    0 ID_CSTCOFINS,
    0 COFINS_ALIQUOTA,
    0 CEST,
    0 QTDE_ESTOQUE

from SPC_SKUS_ECOMMERCE2(0,0) t, tbproduto p
where p.codigo = t.produto_id
;

CREATE trigger vwprodutos_pdv_biud0 for vwprodutos_pdv
active before insert or update or delete position 0
AS
begin
  if(deleting)then
  begin
    execute procedure SPI_INTEGRACAO('VWPRODUTOS_PDV',old.ID,1);
  end else
  begin
    execute procedure SPI_INTEGRACAO('VWPRODUTOS_PDV',new.ID,1);
  end
end;

CREATE TABLE TBMFE_CAIXA_MOVIMENTO (
    ID_CAIXA_MOVIMENTO  INTEGER default 0 NOT NULL,
    ID_OPERADOR         INTEGER NOT NULL,
    ID_CAIXA            INTEGER NOT NULL,
    ID_TURNO            INTEGER,
    DATA_ABERTURA       DATE NOT NULL,
    DATA_FECHAMENTO     DATE,
    SITUACAO            VARCHAR(1),
    FLA_ATUALIZACAO     INTEGER,
    FLAG_ATUALIZACAO    INTEGER,
    TAG_ID              INTEGER
);

CREATE TABLE TBMFE_PARCELAMENTO (
    SERIE             INTEGER NOT NULL,
    NUMERO            INTEGER NOT NULL,
    FORMA_PAGAMENTO   INTEGER NOT NULL,
    VALOR             NUMERIC(15,2) NOT NULL,
    ID                INTEGER,
    FLAG_ATUALIZACAO  INTEGER,
    TAG_ID            INTEGER
);

CREATE TABLE TBMFE_PARCELAMENTO_ITEM (
    IDPAGAMENTO            INTEGER NOT NULL,
    ID_RESPOSTA_FISCAL     INTEGER,
    ID_ADQUIRENTE          INTEGER,
    MENSAGEM               VARCHAR(255),
    STATUSPAGAMENTO        VARCHAR(100),
    MFE_ID                 INTEGER,
    MFE_CODIGO             VARCHAR(40),
    MFE_VALOR              VARCHAR(255),
    CFE_SERIE              INTEGER,
    CFE_NUMERO             INTEGER,
    CODIGOAUTORIZACAO      VARCHAR(20),
    NSU                    VARCHAR(40),
    BIN                    VARCHAR(8),
    DONOCARTAO             VARCHAR(120),
    DATAEXPIRACAO          VARCHAR(5),
    INSTITUICAOFINANCEIRA  VARCHAR(100),
    PARCELAS               INTEGER,
    ULTIMOSQUATRODIGITOS   INTEGER,
    CODIGOPAGAMENTO        VARCHAR(40),
    VALORPAGAMENTO         NUMERIC(10,2),
    IDFILA                 INTEGER,
    TIPO                   VARCHAR(10),
    IDSAT                  INTEGER,
    PAGAMENTO              INTEGER,
    FLAG_ATUALIZACAO       INTEGER,
    TAG_ID                 INTEGER
);

CREATE TABLE TBMFE (
    SERIE                  INTEGER NOT NULL,
    NUMERO                 INTEGER NOT NULL,
    ID_EMPRESA             INTEGER,
    SITUACAO               CHAR(1) COLLATE WIN_PTBR,
    CHAVE_ACESSO           CHAR(44) COLLATE WIN_PTBR,
    DT_EMISSAO             DATE,
    DTHR_SAIDA             TIMESTAMP,
    TIPO_NFE               INTEGER,
    TIPO_EMISSAO           INTEGER,
    ID_PESSOA              INTEGER,
    DEST_NOME              VARCHAR(60),
    DEST_CNPJ_CPF          VARCHAR(14),
    DEST_FONE              VARCHAR(14),
    DEST_ENDERECO          VARCHAR(60),
    DEST_NUMERO            VARCHAR(60),
    DEST_COMPLEMENTO       VARCHAR(60),
    DEST_BAIRRO            VARCHAR(60),
    DEST_CIDADE            INTEGER,
    DEST_CIDADE_DESCRICAO  VARCHAR(60),
    DEST_UF                CHAR(2),
    DEST_CEP               VARCHAR(8),
    VL_BASE_ICMS           NUMERIC(15,2),
    VL_ICMS                NUMERIC(15,2),
    VL_DESCONTO            NUMERIC(15,2),
    VL_PRODUTOS            NUMERIC(15,2),
    VL_OUTRAS              NUMERIC(15,2),
    VL_TOTAL_NF            NUMERIC(15,2),
    VL_PIS                 NUMERIC(15,2),
    VL_COFINS              NUMERIC(15,2),
    VL_TROCO               NUMERIC(15,2),
    CSTAT                  INTEGER,
    XMOTIVO                VARCHAR(255) COLLATE WIN_PTBR,
    DHRECBTO               TIMESTAMP,
    NPROT                  VARCHAR(50) COLLATE WIN_PTBR,
    PROTOCOLO              INTEGER,
    OBSERVACAO             BLOB SUB_TYPE 1 SEGMENT SIZE 10 COLLATE WIN_PTBR,
    XML                    BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    XML_CANCELAMENTO       BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    SAT_NUMERO_CFE         INTEGER,
    SAT_NUMERO_SERIE       INTEGER,
    ID_CAIXA_MOVIMENTO     INTEGER,
    OPERADO_ID             INTEGER,
    FLAG_ATUALIZACAO       INTEGER,
    TAG_ID                 INTEGER
);

CREATE TABLE TBMFE_ITEM (
    SERIE               INTEGER NOT NULL,
    NUMERO              INTEGER NOT NULL,
    ITEM                INTEGER NOT NULL,
    ID_PRODUTO          INTEGER NOT NULL,
    GTIN                VARCHAR(14),
    DESCRICAO           VARCHAR(120),
    CFOP                INTEGER,
    UND                 VARCHAR(6) COLLATE WIN_PTBR,
    QUANTIDADE          NUMERIC(15,4),
    VL_UNITARIO         NUMERIC(18,10),
    VL_DESCONTO         NUMERIC(15,2),
    VL_DESCONTO_RATEIO  NUMERIC(15,2),
    VL_OUTROS           NUMERIC(15,2),
    VL_OUTROS_RATEIO    NUMERIC(15,2),
    VL_PRODUTO          NUMERIC(15,2),
    VL_TOTAL            NUMERIC(15,2),
    ORIGEM              INTEGER,
    CST                 VARCHAR(3) COLLATE WIN_PTBR,
    NCM                 VARCHAR(8),
    EXTIPI              VARCHAR(3),
    SN_VBASE            NUMERIC(15,2),
    SN_ALIQCREDITO      NUMERIC(5,2),
    SN_VCREDITO         NUMERIC(15,2),
    ICMS_VBASE          NUMERIC(15,2),
    ICMS_ALIQUOTA       NUMERIC(5,2),
    ICMS_VIMPOSTO       NUMERIC(15,2),
    PIS_CST             CHAR(2) COLLATE WIN_PTBR,
    PIS_VBASE           NUMERIC(15,2),
    PIS_ALIQUOTA        NUMERIC(5,2),
    PIS_VIMPOSTO        NUMERIC(15,2),
    COFINS_CST          CHAR(2) COLLATE WIN_PTBR,
    COFINS_VBASE        NUMERIC(15,2),
    COFINS_ALIQUOTA     NUMERIC(5,2),
    COFINS_VIMPOSTO     NUMERIC(15,2),
    IN_ALIQ_FEDERAL     NUMERIC(5,2),
    IN_VL_FEDERAL       NUMERIC(15,2),
    IN_ALIQ_ESTADUAL    NUMERIC(5,2),
    IN_VL_ESTADUAL      NUMERIC(15,2),
    IN_ALIQ_MUNICIPAL   NUMERIC(5,2),
    IN_VL_MUNICIPAL     NUMERIC(15,2),
    INF_ADICIONAL       VARCHAR(500),
    CEST                VARCHAR(7),
    FLAG_ATUALIZACAO    INTEGER,
    TAG_ID              INTEGER
);


CREATE TABLE TBMFE_SUPRIMENTO_SANGRIA (
    ID_SS               INTEGER default 0 NOT NULL,
    ID_CAIXA_MOVIMENTO  INTEGER default 0 NOT NULL,
    TIPO_EMISSAO        VARCHAR(1),
    VL_EMISSAO          NUMERIC(15,2),
    ANOTACAO            BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    FLAG_ATUALIZACAO    INTEGER,
    TAG_ID              INTEGER
);

CREATE TABLE TBPDV_EMPRESA (
    ID     INTEGER NOT NULL,
    CRT            INTEGER NOT NULL,
    RAZAO_SOCIAL   VARCHAR(60),
    NOME_FANTASIA  VARCHAR(60),
    CNPJ           VARCHAR(14),
    IE             VARCHAR(14),
    IM             VARCHAR(15),
    CNAE           VARCHAR(7),
    FONE           VARCHAR(14),
    ENDERECO       VARCHAR(60),
    NUMERO         VARCHAR(60),
    COMPLEMENTO    VARCHAR(60),
    BAIRRO         VARCHAR(60),
    CIDADE         INTEGER,
    CEP            INTEGER
);

ALTER TABLE TBPDV_EMPRESA
    ADD PDV_ID INTEGER;

CREATE SEQUENCE GTBPDV_EMPRESA;

create trigger ttbpdv_empresa_b01i for tbpdv_empresa
active before insert position 0
as
begin
  if (new.ID is null) then
    new.ID = gen_id(gtbpdv_empresa,1);
end;

ALTER TABLE TBQUIOSQUE
    ADD LOCALIZACAO_ESTOQUE INTEGER,
    ADD OPERACAO_ENTRADA INTEGER;

ALTER TABLE TBQUIOSQUE
    ADD ESTABELECIMENTO_ID INTEGER;

ALTER TABLE TBQUIOSQUE DROP OPERACAO_SAIDA;

ALTER TABLE TBQUIOSQUE
    ADD OPERACAO_SAIDA VARCHAR(10);

CREATE OR ALTER trigger ttbmfe_item_b01i for tbmfe_item
active before insert or update position 0
AS
declare variable OPERACAO varchar(10);
declare variable SITUACAO varchar(10);
declare variable ESTABELECIMENTO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable TAMANHO integer;
declare variable TRANSACAO_ID integer;
declare variable SALDO integer;
begin

    SITUACAO = coalesce((select e.situacao from tbmfe e where e.serie = new.serie and e.numero = new.numero),'');

    if(SITUACAO = 'E' and new.estoque_id = 0)then
    begin

        select
            Q.estabelecimento_id,
            Q.localizacao_estoque,
            Q.operacao_saida
         from tbmfe e, tbquiosque Q, tbmfe_caixa_movimento M
            where e.serie =new.serie
            and e.numero = new.numero
            AND M.id_caixa_movimento = E.id_caixa_movimento
            AND Q.id = M.id_caixa
        into
            :ESTABELECIMENTO_ID,
            :LOCALIZACAO_ID,
            :OPERACAO;

            :TAMANHO = coalesce((select first 1 e.tamanho from TBEAN e where e.prefixo||e.codigo = substring(new.gtin from 1 for 12)),0);

            if(:TAMANHO = 0 or :TAMANHO > 20 )then
            begin
                exception "..." 'Tamanho não encontrado, MFE:'||new.numero||', SERIE:'||new.serie||' ITEM:'||new.item;
            end

            --:SALDO

            :TRANSACAO_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);

            EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO(
                'TBMFE_ITEM',
                0,
                NEW.tag_id,
                :ESTABELECIMENTO_ID,
                :LOCALIZACAO_ID,
                current_date,
                new.id_produto,
                :TAMANHO,
                new.quantidade,
                'S',
                :OPERACAO,
                0,
                '',
                'BAIXA AUTOMATICA DE ESTOQUE',
                :TRANSACAO_ID,
                new.tag_id,
                null,
                null,
                0,
                0,
                new.tag_id,
                0
            );

            new.estoque_id = :TRANSACAO_ID;

    end else
    begin

        if(SITUACAO = 'C' and new.estoque_id > 0 )then
        begin
            delete from tbestoque_transacao_item i where i.controle = new.estoque_id;
            new.estoque_id = 0;
        end

    end
    
end;


CREATE OR ALTER trigger ttbmfe_item_bd0 for tbmfe_item
active before delete position 0
AS
begin

    if( old.estoque_id > 0 )then
    begin
        delete from tbestoque_transacao_item i where i.controle = old.estoque_id;
    end

end;

CREATE OR ALTER trigger ttbmfe_au0 for tbmfe
active after update position 0
AS
begin
  if(new.situacao <> old.situacao)then
  begin
    update tbmfe_item i set i.flag_atualizacao = i.flag_atualizacao + 1 where i.serie = new.serie and i.numero = new.numero;
  end
end;

CREATE OR ALTER trigger ttbmfe_bd0 for tbmfe
active before delete position 0
AS
begin

  delete from tbmfe_item i where i.serie = old.serie and i.numero = old.numero;

end;



ALTER TABLE TBMFE_ITEM
    ADD QTD_CANCELADA INTEGER DEFAULT 0;

ALTER TABLE TBMFE_ITEM
    ADD STATUS INTEGER DEFAULT 0;

COMMENT ON COLUMN TBMFE_ITEM.STATUS IS
'0 -
1 - cancelada';

CREATE TABLE TBMFE_VALES (
    ID INTEGER NOT NULL,
    TIPO INTEGER,
    VALOR NUMERIC(18,4),
    SALDO NUMERIC(18,4),
    CUPOM INTEGER,
    SERIE INTEGER,
    CPF VARCHAR(50),
    CLIENTE VARCHAR(50),
    DATA TIMESTAMP DEFAULT current_timestamp,
    CAIXA INTEGER,
    OPERADOR INTEGER,
    ID_MOVIMENTO INTEGER,
    STATUS INTEGER DEFAULT 0,
    VIA_CLIENTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    VIA_VENDEDOR BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    FLAG_ATUALIZACAO INTEGER DEFAULT 0,
    TAG_ID INTEGER DEFAULT 0);

ALTER TABLE TBMFE_VALES
ADD CONSTRAINT PK_TBMFE_VALES
PRIMARY KEY (ID);

COMMENT ON COLUMN TBMFE_VALES.STATUS IS
'0 - emitido
1 - consumido
2 - cancelado';

CREATE SEQUENCE GTBMFE_VALES;

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

CREATE SEQUENCE GTBMFE_VALES2;

create trigger ttbmfe_vales_b02i for tbmfe_vales
active before insert position 0
as
begin
  if (new.tag_id is null) then
    new.tag_id = gen_id(gtbmfe_vales2,1);
end;

ALTER TABLE TBMFE_VALES
    ADD CODIGO_VALE VARCHAR(40);

CREATE TABLE TBMFE_VALES_DETALHE (
    ID INTEGER NOT NULL,
    TAG_ID INTEGER,
    FLAG_ATUALIZACAO INTEGER,
    ITEM INTEGER,
    QUANTIDADE NUMERIC(18,4));

ALTER TABLE TBMFE_VALES_DETALHE
ADD CONSTRAINT PK_TBMFE_VALES_DETALHE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBMFE_VALES_DETALHE;


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

CREATE SEQUENCE GTBMFE_VALES_DETALHE2;


create trigger ttbmfe_vales_detalhe_b02i for tbmfe_vales_detalhe
active before insert position 0
as
begin
  if (new.tag_id is null) then
    new.tag_id = gen_id(gtbmfe_vales_detalhe2,1);
end;


ALTER TABLE TBMFE_VALES_DETALHE
    ADD VALE_ID INTEGER;

CREATE TABLE TBMFE_CARTAO_BANDEIRA (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(10),
    STATUS INTEGER);

ALTER TABLE TBMFE_CARTAO_BANDEIRA
ADD CONSTRAINT PK_TBMFE_CARTAO_BANDEIRA
PRIMARY KEY (ID);

COMMENT ON COLUMN TBMFE_CARTAO_BANDEIRA.STATUS IS
'0 - Inativo
1 - Ativo';

CREATE SEQUENCE GTBMFE_CARTAO_BANDEIRA;

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

ALTER TABLE TBMFE_CARTAO_BANDEIRA
    ALTER DESCRICAO TYPE VARCHAR(50) CHARACTER SET UTF8;

CREATE OR ALTER trigger ttbmfe_au0 for tbmfe
active after update position 0
AS
begin
  if(new.situacao <> old.situacao)then
  begin
    update tbmfe_item i set i.flag_atualizacao = i.flag_atualizacao + 1 where i.serie = new.serie and i.numero = new.numero;
  end

  if(new.situacao <> old.situacao)then
  begin
    if(new.situacao = 'C')then
    begin
        update tbmfe_item i set i.status = 1 where i.serie = new.serie and i.numero = new.numero;
    end else
    begin
        update tbmfe_item i set i.status = 0 where i.serie = new.serie and i.numero = new.numero;
    end
  end
end;

CREATE TABLE TBMFE_VALE_VENDA (
    ID INTEGER NOT NULL,
    VALE_ID INTEGER,
    PAGAMENTO_ID INTEGER);

ALTER TABLE TBMFE_VALE_VENDA
ADD CONSTRAINT PK_TBMFE_VALE_VENDA
PRIMARY KEY (ID);

CREATE SEQUENCE GTBMFE_VALE_VENDA;

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

ALTER TABLE TBMFE_VALE_VENDA
    ADD TAG_ID INTEGER,
    ADD FLAG_ATUALIZACAO INTEGER;

ALTER TABLE TBMFE_VALE_VENDA
    ADD VALOR NUMERIC(18,4);

ALTER TABLE TBMFE_VALE_VENDA
    ADD SERIE INTEGER,
    ADD NUMERO INTEGER;

ALTER TABLE TBMFE_VALE_VENDA DROP PAGAMENTO_ID;

CREATE trigger ttbmfe_vale_venda_b01d for tbmfe_vale_venda
active before delete position 1
AS
begin
  update tbmfe_vales v set v.saldo = v.saldo + old.valor where v.id = old.vale_id;
end;

CREATE trigger ttb_nfe_b02u for tb_nfe
active before update position 0
AS
begin
  if(old.situacao = 'E' and new.situacao = 'C')then
  begin
     delete from tbmfe_vale_venda d where d.serie = new.serie and d.numero = new.numero;
  end
end;

CREATE trigger ttbmfe_item_b02ui for tbmfe_item
active before insert or update position 10
AS
declare variable SITUACAO varchar(10);
begin

  SITUACAO = coalesce((select e.situacao from tbmfe e where e.serie = new.serie and e.numero = new.numero),'');
    
  if(SITUACAO = 'E')then
  begin
      if(new.qtd_cancelada >= new.quantidade)then
      begin
        new.status = 1;
      end else
      begin
        new.status = 0;
      end
  end else
  begin
    new.status = 1;
  end

end;

CREATE INDEX ITBMFE_03
ON TBMFE (SITUACAO);

CREATE INDEX ITBMFE_02
ON TBMFE (ID_CAIXA_MOVIMENTO);

CREATE INDEX ITBMFE_01
ON TBMFE (SERIE,NUMERO);

CREATE INDEX ITBMFE_CAIXA_MOVIMENTO_05
ON TBMFE_CAIXA_MOVIMENTO (DATA_FECHAMENTO);

CREATE INDEX ITBMFE_CAIXA_MOVIMENTO_04
ON TBMFE_CAIXA_MOVIMENTO (ID_TURNO);

CREATE INDEX ITBMFE_CAIXA_MOVIMENTO_03
ON TBMFE_CAIXA_MOVIMENTO (ID_CAIXA);

CREATE INDEX ITBMFE_CAIXA_MOVIMENTO_02
ON TBMFE_CAIXA_MOVIMENTO (SITUACAO);

CREATE INDEX ITBMFE_CAIXA_MOVIMENTO_01
ON TBMFE_CAIXA_MOVIMENTO (DATA_ABERTURA);

CREATE INDEX ITBMFE_ITEM_05
ON TBMFE_ITEM (ITEM);

CREATE INDEX ITBMFE_ITEM_04
ON TBMFE_ITEM (ID_PRODUTO);

CREATE INDEX ITBMFE_ITEM_03
ON TBMFE_ITEM (STATUS);

CREATE INDEX ITBMFE_ITEM_02
ON TBMFE_ITEM (GTIN);

CREATE INDEX ITBMFE_ITEM_01
ON TBMFE_ITEM (SERIE,NUMERO);

CREATE INDEX ITBMFE_PARCELAMENTO_03
ON TBMFE_PARCELAMENTO (ID);

CREATE INDEX ITBMFE_PARCELAMENTO_02
ON TBMFE_PARCELAMENTO (FORMA_PAGAMENTO);

CREATE INDEX ITBMFE_PARCELAMENTO_01
ON TBMFE_PARCELAMENTO (SERIE,NUMERO);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_07
ON TBMFE_PARCELAMENTO_ITEM (ID_RESPOSTA_FISCAL);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_06
ON TBMFE_PARCELAMENTO_ITEM (ID_ADQUIRENTE);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_05
ON TBMFE_PARCELAMENTO_ITEM (TIPO);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_04
ON TBMFE_PARCELAMENTO_ITEM (CFE_SERIE,CFE_NUMERO);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_03
ON TBMFE_PARCELAMENTO_ITEM (MFE_CODIGO);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_02
ON TBMFE_PARCELAMENTO_ITEM (MFE_ID);

CREATE INDEX ITBMFE_PARCELAMENTO_ITEM_01
ON TBMFE_PARCELAMENTO_ITEM (IDPAGAMENTO);

CREATE INDEX ITBMFE_SUPRIMENTO_SANGRIA_03
ON TBMFE_SUPRIMENTO_SANGRIA (TIPO_EMISSAO);

CREATE INDEX ITBMFE_SUPRIMENTO_SANGRIA_02
ON TBMFE_SUPRIMENTO_SANGRIA (ID_CAIXA_MOVIMENTO);

CREATE INDEX ITBMFE_SUPRIMENTO_SANGRIA_01
ON TBMFE_SUPRIMENTO_SANGRIA (ID_SS);

CREATE INDEX ITBMFE_VALES_05
ON TBMFE_VALES (TIPO);

CREATE INDEX ITBMFE_VALES_04
ON TBMFE_VALES (DATA);

CREATE INDEX ITBMFE_VALES_03
ON TBMFE_VALES (ID_MOVIMENTO);

CREATE INDEX ITBMFE_VALES_02
ON TBMFE_VALES (CODIGO_VALE);

CREATE INDEX ITBMFE_VALES_01
ON TBMFE_VALES (CUPOM,SERIE);

CREATE INDEX ITBMFE_VALES_DETALHE_01
ON TBMFE_VALES_DETALHE (VALE_ID);

CREATE INDEX ITBMFE_VALE_VENDA_02
ON TBMFE_VALE_VENDA (SERIE,NUMERO);

CREATE INDEX ITBMFE_VALE_VENDA_01
ON TBMFE_VALE_VENDA (VALE_ID);

CREATE trigger ttbproduto_b01u for tbproduto
active before update position 99
AS
begin
  update vwprodutos_pdv d set d.ativo = d.ativo where d.id = new.codigo;
end;

CREATE OR ALTER trigger ttbproduto_contabil_b02u for tbproduto_contabil
active before insert or update position 0
AS
begin
  update vwprodutos_pdv d set d.ativo = d.ativo where d.id = new.produto_codigo;
end;

CREATE trigger ttbreferencia_preco_b02iu for tbreferencia_preco
active before insert or update position 0
AS
declare variable ID integer;
begin

    if(new.cliente_tipo_id = 61)then
    begin
      for
        select
            p.codigo as ID
        from tbproduto p, tbmodelo m, tbmodelo_linha l
        where m.codigo = p.modelo_codigo
        and l.codigo = m.linha_codigo
        and l.habilitar_ecommerce = 1
        and l.referencia_id = new.referencia_id
      into
        :ID
      do begin
        update vwprodutos_pdv d set d.ativo = d.ativo where d.id = :ID;
      end
    end else
    begin
        if(new.cliente_tipo_id = 59)then
        begin
            for
                select
                    p.codigo as ID
                from tbproduto p, tbmodelo m, tbmodelo_linha l
                where m.codigo = p.modelo_codigo
                and l.codigo = m.linha_codigo
                and l.habilitar_ecommerce = 1
                and l.referencia_id = new.referencia_id
              into
                :ID
              do begin
                update tbproduto p set p.salesforce = 0 where p.codigo = :ID;
              end
         end
    end

end;


ALTER TABLE TBMFE
    ADD CAIXA_ID INTEGER;
	
ALTER TABLE TBMFE_ITEM
    ADD CAIXA_ID INTEGER;

ALTER TABLE TBMFE_PARCELAMENTO
    ADD CAIXA_ID INTEGER;

ALTER TABLE TBMFE_PARCELAMENTO_ITEM
    ADD CAIXA_ID INTEGER;

ALTER TABLE TBMFE_SUPRIMENTO_SANGRIA
    ADD CAIXA_ID INTEGER;

ALTER TABLE TBMFE_VALES
    ADD CAIXA_ID INTEGER;

ALTER TABLE TBMFE_VALES_DETALHE
    ADD CAIXA_ID INTEGER;
	
ALTER TABLE TBMFE_VALE_VENDA
    ADD CAIXA_ID INTEGER;



CREATE OR ALTER VIEW VWINTEGRACAO_PENDENTE(
    ID,
    TIPO,
    TABELA,
    TABELA_ID,
    VERSSAO,
    ID_ITEM,
    VERSSAO_ITEM,
    LOG_ERRO,
    ORDEM,
    CAIXA)
AS
select
    ID,
    TIPO,
    TABELA,
    TABELA_ID,
    VERSSAO,
    ID_ITEM,
    VERSSAO_ITEM,
    LOG_ERRO,
    ORDEM,
    CAIXA
from(
    select
        i.id,
        i.tipo,
        i.tabela,
        i.tabela_id,
        i.verssao,
        coalesce(t.id_mestre,0) as id_item,
        coalesce(t.verssao,0) as verssao_item,
        t.log_erro,
        coalesce(o.ordem, 9999) as ORDEM,
        i.CAIXA_ID as CAIXA

    from (select j.*,q.id as CAIXA_ID from TBQUIOSQUE q, tbintegracao j
    where fn_getcaixa(j.tabela, j.tabela_id) = q.id or fn_getcaixa(j.tabela, j.tabela_id) = 0
    ) i

    left join tbintegracao_itens t on t.integracao_id = i.id and t.id_mestre = i.CAIXA_ID
    left join TBINTEGRACAO_TABELA_ORDEM o on o.tabela = i.tabela and o.tipo = i.tipo

) where verssao_item < verssao
;


