CREATE TABLE TBDOCUMENTO_IMPORTACAO (
    ID INTEGER NOT NULL,
    DOCUMENTO VARCHAR(30),
    PARCELA INTEGER);

ALTER TABLE TBDOCUMENTO_IMPORTACAO
ADD CONSTRAINT PK_TBDOCUMENTO_IMPORTACAO
PRIMARY KEY (ID);

ALTER TABLE TBDOCUMENTO_IMPORTACAO
    ADD EMPRESA_ID INTEGER;

ALTER TABLE TBDOCUMENTO_IMPORTACAO
    ADD OLD_PARCELA VARCHAR(30);

CREATE SEQUENCE GPARCELA;

CREATE TABLE TBCLASSIFICACAO_FINANCEIRA (
    ID INTEGER,
    CONTA VARCHAR(20),
    STATUS INTEGER,
    DESCRICAO VARCHAR(100));

CREATE SEQUENCE GCLASSIFICACAO_FINANCEIRA;

SET TERM ^ ;

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

SET TERM ; ^



SET TERM ^ ;

CREATE OR ALTER function FN_GERAR_DOCUMENTO (
    DOCUMENTO varchar(30),
    EMPRESA_ID integer,
    TIPO integer)
returns integer
as
declare variable RESULTADO integer;
declare variable PARCELA varchar(10);
declare variable ID_NOVO integer;
declare variable TRAT varchar(20);
begin

    
  TRAT = trim(
                iif( position('-',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'-'),
                    iif( position('/',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'/'),
                    iif( position('.',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'.'),
                    iif( position('S',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'S'),
                    iif( position('|',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'|'),
                    iif( position('N',upper(DOCUMENTO)) > 0, fn_array(DOCUMENTO,1,'N'),
                ''))))))

            );

  ID_NOVO = coalesce((select first 1 f.id from TBDOCUMENTO_IMPORTACAO f where f.documento = :TRAT and f.EMPRESA_ID = :EMPRESA_ID),0);

  if(ID_NOVO = 0)then
  begin
     ID_NOVO = gen_id(GTBNFE,1);
     insert into TBDOCUMENTO_IMPORTACAO (ID, DOCUMENTO, PARCELA, EMPRESA_ID) values (:ID_NOVO, :TRAT, 0, :EMPRESA_ID);
  end

  if(TIPO = 1)then
  begin
     return :ID_NOVO;
  end else
  begin
     return 0;
  end

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_GERAR_PARCELA (
    DOCUMENTO integer,
    PARCELA integer,
    CONTROLE integer)
returns integer
as
declare variable PARC integer;
begin

  parc = coalesce((select first 1 f.parcela from TBNFE_PARCELAMENTO f where f.nfe_controle = :DOCUMENTO and f.parcela = :PARCELA and f.controle <> :CONTROLE),0);

  if(parc > 0)then
  begin
    return FN_GERAR_PARCELA(:DOCUMENTO, PARCELA + 1, :CONTROLE);
  end else
  begin
    return PARCELA;
  end

end
^

SET TERM ; ^

ALTER TABLE TBDOCUMENTO_IMPORTACAO
    ADD TIPO INTEGER;


