SET TERM ^ ;

create or alter function FN_REMOVER (
    VALOR varchar(500))
returns varchar(300) as
begin

  VALOR = replace(VALOR,'.','');
  VALOR = replace(VALOR,'/','');
  VALOR = replace(VALOR,'-','');
  VALOR = replace(VALOR,'_','');
  return VALOR;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_LPAD (
    VALOR varchar(1000),
    TAMANHO integer,
    CARACTERE varchar(1000) default ' ')
returns varchar(1000)
AS
declare variable ZEROS VARCHAR(1000);
declare variable RET VARCHAR(1000);
begin
    RET = '';
            
    IF( CHAR_LENGTH(COALESCE(VALOR,'')) > 0 ) THEN
    BEGIN
      
        IF(CHAR_LENGTH(VALOR) >= TAMANHO) THEN
        BEGIN
            RET = VALOR;
        END
        ELSE
        BEGIN
            RET = LPAD(VALOR,TAMANHO,CARACTERE);
        END
    END

    RETURN RET;

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_DATA (
    DATA date)
returns varchar(50) as
begin
  /* Function Text */
  return fn_lpad(extract(day   from DATA),2,'0') ||'.'||
         fn_lpad(extract(month from DATA),2,'0') ||'.'||
         fn_lpad(extract(year  from DATA),4,'0');
end
^

SET TERM ; ^

SET TERM ^ ;

create or alter function FN_ELIPSES (
    TEXTO varchar(3000),
    CARACTERES_MAXIMO integer = 30)
returns varchar(3000)
AS
DECLARE VARIABLE TAMANHO INTEGER;
DECLARE VARIABLE TEXTO_CORTADO VARCHAR(3000);
begin

  TAMANHO = CHAR_LENGTH(TEXTO);
  TEXTO_CORTADO = TRIM(SUBSTRING(TEXTO FROM 1 FOR CARACTERES_MAXIMO));

  IF ( TAMANHO > CARACTERES_MAXIMO ) THEN
  BEGIN
    TEXTO = TEXTO_CORTADO;
  END
  /* Function Text */
  return TEXTO;
end^

SET TERM ; ^


ALTER TABLE CLIENTES
    ADD ID INTEGER;

CREATE SEQUENCE GCLIENTES;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger clientes_bu0 for clientes
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gclientes,1);
end^

SET TERM ; ^

update CLIENTES a set a.internet = a.internet;



ALTER TABLE REPRESENTANTES
    ADD ID INTEGER;

CREATE SEQUENCE GREPRESENTANTES;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger REPRESENTANTES_bu0 for REPRESENTANTES
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gREPRESENTANTES,1);
end^

SET TERM ; ^

update REPRESENTANTES a set a.internet = a.internet;

CREATE INDEX IREPRESENTANTES_IDX1 ON REPRESENTANTES (CNPJ);

ALTER TABLE FORNECEDORES
    ADD ID INTEGER;

CREATE SEQUENCE GFORNECEDORES;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger FORNECEDORES_bu0 for FORNECEDORES
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gFORNECEDORES,1);
end^

SET TERM ; ^

update FORNECEDORES a set a.internet = a.internet;

CREATE INDEX IFORNECEDORES_IDX1 ON FORNECEDORES (CNPJ);

ALTER TABLE TRANSPORTADORAS
    ADD ID INTEGER;

CREATE SEQUENCE GTRANSPORTADORAS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger TRANSPORTADORAS_bu0 for TRANSPORTADORAS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gTRANSPORTADORAS,1);
end^

SET TERM ; ^

update TRANSPORTADORAS a set a.internet = a.internet;

CREATE INDEX ITRANSPORTADORAS_IDX1 ON TRANSPORTADORAS (CNPJ);

SET TERM ^ ;

CREATE OR ALTER function FN_TRATAR_CNPJ_CPF (
    CNPJ varchar(30),
    CPF varchar(30))
returns varchar(30)
AS
declare variable RET varchar(30);
begin

  RET = iif(:CNPJ is null ,
                iif(:CPF is null, null, FN_REMOVER(:CPF)),
                iif(char_length(FN_REMOVER(trim(:CNPJ))) > 14, substring(FN_REMOVER(trim(:CNPJ)) from 2 for 15) , FN_REMOVER(trim(:CNPJ)))
         );

  return RET;
end^

SET TERM ; ^



ALTER TABLE CLIENTES        ADD CPFCNPJ varchar(15);
ALTER TABLE FORNECEDORES    ADD CPFCNPJ varchar(15);
ALTER TABLE REPRESENTANTES  ADD CPFCNPJ varchar(15);
ALTER TABLE TRANSPORTADORAS ADD CPFCNPJ varchar(15);

update FORNECEDORES     a set a.CPFCNPJ = FN_TRATAR_CNPJ_CPF(a.cnpj, a.cpf);
update REPRESENTANTES   a set a.CPFCNPJ = FN_TRATAR_CNPJ_CPF(a.cnpj, a.cpf);
update CLIENTES         a set a.CPFCNPJ = FN_TRATAR_CNPJ_CPF(a.cnpj, a.cpf);
update TRANSPORTADORAS  a set a.CPFCNPJ = FN_TRATAR_CNPJ_CPF(a.cnpj, a.cpf);

CREATE INDEX ICLIENTES_IDX2 ON CLIENTES (CPFCNPJ);
CREATE INDEX IFORNECEDORES_IDX2 ON FORNECEDORES (CPFCNPJ);
CREATE INDEX IREPRESENTANTES_IDX2 ON REPRESENTANTES (CPFCNPJ);
CREATE INDEX ITRANSPORTADORAS_IDX2 ON TRANSPORTADORAS (CPFCNPJ);

ALTER TABLE FUNCIONARIOS
    ADD ID INTEGER;

CREATE SEQUENCE GFUNCIONARIOS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger FUNCIONARIOS_bu0 for FUNCIONARIOS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gFUNCIONARIOS,1);
end^

SET TERM ; ^

update FUNCIONARIOS a set a.PF_PJ = a.PF_PJ;

ALTER TABLE CORES
    ADD ID INTEGER;

CREATE SEQUENCE GCORES;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger CORES_bu0 for CORES
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gCORES,1);
end^

SET TERM ; ^

update CORES a set a.FAMILIA_COR = a.FAMILIA_COR;

CREATE TABLE TBGRADE_TEMP (
    ID INTEGER NOT NULL,
    TIPO INTEGER,
    DESC VARCHAR(10));

ALTER TABLE TBGRADE_TEMP
ADD CONSTRAINT PK_TBGRADE_TEMP
PRIMARY KEY (ID);

CREATE SEQUENCE GTBGRADE_TEMP;

SET TERM ^ ;

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

SET TERM ; ^

UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (0 , 1, '01') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (1 , 1, '02') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (2 , 1, '04') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (3 , 1, '06') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (4 , 1, '08') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (5 , 1, '10') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (6 , 1, '12') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (7 , 1, '14') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (8 , 1, '16') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (9 , 1, '18') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (10, 1, '20') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (11, 1, '22') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (12, 1, '24') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (13, 1, '26') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (14, 1, '28') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (15, 1, '30') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (16, 1, '32') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (17, 1, '34') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (18, 1, '36') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (19, 1, '38') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (20, 1, '40') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (21, 1, '42') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (22, 1, '44') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (23, 1, '46') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (24, 1, '48') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (25, 1, '50') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (26, 1, '52') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (27, 1, '54') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (28, 1, '56') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (29, 1, '58') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (30, 1, '60') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (31, 2, 'PP') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (32, 2, 'P') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (33, 2, 'M') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (34, 2, 'G') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (35, 2, 'GG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (36, 2, 'XG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (37, 2, 'XXG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (38, 3, 'UNICA') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (39, 4, 'PP') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (40, 4, 'P') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (41, 4, 'M') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (42, 4, 'G') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (43, 4, 'GG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (44, 4, 'EG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (45, 4, 'EGG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (46, 4, 'XG') MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC) VALUES (47, 4, 'XXG') MATCHING (ID);

SET TERM ^ ;

CREATE OR ALTER procedure SPLIT (
    ITEXTO varchar(4000),
    ISEPARADOR char(1))
returns (
    OSPLIT varchar(4000))
as
declare variable VTEXTO varchar(4000);
declare variable VPOSICAO integer;
declare variable VPOSICAO_INICIAL integer;
declare variable VSPLIT varchar(4000);
BEGIN
    vtexto = itexto;
    vposicao_inicial = 1;
    vposicao = 1;
    
    IF (iseparador IS NULL OR itexto IS NULL) THEN
    BEGIN
        -- Sai da função sem executar
    END
    ELSE
    BEGIN
        WHILE (CHAR_LENGTH(vtexto) > 0) DO
        BEGIN
            vposicao = POSITION (:iseparador, vtexto, vposicao_inicial);
            IF (vposicao <= 0) THEN
            BEGIN
                vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial FOR
                        CHAR_LENGTH (:vtexto) - vposicao_inicial + 1);
                IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
                BEGIN
                    osplit = :vsplit;   
                    SUSPEND;
                END
                BREAK;
            END
            vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial
                    FOR :vposicao - vposicao_inicial);
            IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
            BEGIN
                osplit = :vsplit;   
            END
            vsplit = NULL;
            vposicao_inicial = :vposicao + 1;
            SUSPEND;
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_ARRAY (
    VALOR varchar(1000),
    POSICAO integer,
    SEPARADOR varchar(10))
returns varchar(300)
AS
declare variable linha numeric(15,5);
declare variable ret varchar(300);
begin

    FOR
        select row_number() over(),a.OSPLIT from split(:valor,:separador) a
    INTO
        :linha,
        :ret
    DO
    BEGIN
        if(linha = posicao)then
        begin
          return ret;
        end
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_GRADE_POS (
    GRADE varchar(100))
returns varchar(500)
AS
declare variable CONT integer;
declare variable RET varchar(500);
declare variable INI varchar(10);
declare variable FIM varchar(10);
declare variable INTER varchar(10);
declare variable TIPO integer;
begin
  :GRADE = trim(:GRADE);
  :GRADE =  replace(:GRADE,'  ',' ');
  :GRADE =  replace(:GRADE,'  ',' ');

  CONT = coalesce((select count(OSPLIT) from split(:GRADE,' ')),0);

  --exception DELETE_ESTOQUE_ITEM :CONT;

  INI  = FN_ARRAY(:GRADE,1,' ');
  FIM  = FN_ARRAY(:GRADE,3,' ');
  INTER= FN_ARRAY(:GRADE,2,' ');

  if(CONT >= 2)then
  begin

    TIPO = coalesce((select max(TIPO)  from tbgrade_temp p where p.desc = :INI),-1);

    if(tipo = 1)then
    begin
        INI = fn_lpad(INI,2,'0');
    end

    INI  = coalesce((select first 1 p.id  from tbgrade_temp p where p.desc = :INI and p.tipo = :TIPO),-1);
    FIM  = coalesce((select first 1 p.id  from tbgrade_temp p where p.desc = :FIM and p.tipo = :TIPO),-1);

    if(INTER = 'E')then
    begin
        RET  = coalesce((select list(p.desc) from tbgrade_temp p where p.id in(:INI,:FIM)),'');
    end else
    begin
        RET  = coalesce((select list(p.desc) from tbgrade_temp p where p.id between :INI and :FIM),'');
    end

  end else
  begin
     RET = coalesce((select list(p.desc) from tbgrade_temp p where p.desc = :INI),'');
  end


  return RET;
end^

SET TERM ; ^

ALTER TABLE COLECOES
    ADD ID INTEGER;

CREATE SEQUENCE GCOLECOES;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger COLECOES_bu0 for COLECOES
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gCOLECOES,1);
end^

SET TERM ; ^

update COLECOES a set a.colecao = a.colecao;

ALTER TABLE CONDICOES_PGTO
    ADD ID INTEGER;

CREATE SEQUENCE GCONDICOES_PGTO;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger CONDICOES_PGTO_bu0 for CONDICOES_PGTO
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gCONDICOES_PGTO,1);
end^

SET TERM ; ^

update CONDICOES_PGTO a set a.taxa = a.taxa;

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER_LETRA (
    VALOR varchar(500))
returns varchar(300) as
begin

  VALOR = upper(VALOR);
  VALOR = replace(VALOR,'A','');
  VALOR = replace(VALOR,'B','');
  VALOR = replace(VALOR,'C','');
  VALOR = replace(VALOR,'D','');
  VALOR = replace(VALOR,'B','');
  VALOR = replace(VALOR,'E','');
  VALOR = replace(VALOR,'D','');
  VALOR = replace(VALOR,'G','');
  VALOR = replace(VALOR,'H','');
  VALOR = replace(VALOR,'I','');
  VALOR = replace(VALOR,'J','');
  VALOR = replace(VALOR,'K','');
  VALOR = replace(VALOR,'L','');
  VALOR = replace(VALOR,'M','');
  VALOR = replace(VALOR,'N','');
  VALOR = replace(VALOR,'O','');
  VALOR = replace(VALOR,'P','');
  VALOR = replace(VALOR,'Q','');
  VALOR = replace(VALOR,'R','');
  VALOR = replace(VALOR,'S','');
  VALOR = replace(VALOR,'T','');
  VALOR = replace(VALOR,'U','');
  VALOR = replace(VALOR,'V','');
  VALOR = replace(VALOR,'W','');
  VALOR = replace(VALOR,'X','');
  VALOR = replace(VALOR,'Y','');
  VALOR = replace(VALOR,'Z','');
  return VALOR;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SP_GERAR_LINHAS (
    QUANTIDADE integer)
returns (
    LINHA_CORRENTE integer)
as
begin
    LINHA_CORRENTE = 0;
    WHILE ( NOT (LINHA_CORRENTE = QUANTIDADE ) ) DO
    BEGIN
        LINHA_CORRENTE = LINHA_CORRENTE+1;
        SUSPEND;
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVE_ACENTOS (
    STRING blob sub_type 1 segment size 80 character set WIN1252)
returns blob sub_type 1 segment size 80
AS
begin
--    STRING = upper(STRING);

    STRING = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
    :STRING,'Á','A'),'Ç','C'),'Ã','A'),'Ô','O'),'Ú','U'),'É','E'),'Ó','O'),'Õ','O'),'Ò','O'),'Ê','E'),'È','E'),'À','A'),'Í','I'),'Â','A');

    string = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
    :string,'á','a'),'ç','c'),'ã','a'),'ô','o'),'ú','u'),'é','e'),'ó','o'),'õ','o'),'ò','o'),'ê','e'),'è','e'),'à','a'),'í','i'),'â','a');

    return STRING;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER_LETRA (
    VALOR varchar(500))
returns varchar(300)
AS
begin

  VALOR = upper(VALOR);
  VALOR = replace(VALOR,'A','');
  VALOR = replace(VALOR,'B','');
  VALOR = replace(VALOR,'C','');
  VALOR = replace(VALOR,'D','');
  VALOR = replace(VALOR,'B','');
  VALOR = replace(VALOR,'E','');
  VALOR = replace(VALOR,'F','');
  VALOR = replace(VALOR,'D','');
  VALOR = replace(VALOR,'G','');
  VALOR = replace(VALOR,'H','');
  VALOR = replace(VALOR,'I','');
  VALOR = replace(VALOR,'J','');
  VALOR = replace(VALOR,'K','');
  VALOR = replace(VALOR,'L','');
  VALOR = replace(VALOR,'M','');
  VALOR = replace(VALOR,'N','');
  VALOR = replace(VALOR,'O','');
  VALOR = replace(VALOR,'P','');
  VALOR = replace(VALOR,'Q','');
  VALOR = replace(VALOR,'R','');
  VALOR = replace(VALOR,'S','');
  VALOR = replace(VALOR,'T','');
  VALOR = replace(VALOR,'U','');
  VALOR = replace(VALOR,'V','');
  VALOR = replace(VALOR,'W','');
  VALOR = replace(VALOR,'X','');
  VALOR = replace(VALOR,'Y','');
  VALOR = replace(VALOR,'Z','');
  return VALOR;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER (
    VALOR varchar(500))
returns varchar(300)
AS
begin

  VALOR = replace(VALOR,'.','');
  VALOR = replace(VALOR,'/','');
  VALOR = replace(VALOR,'-','');
  VALOR = replace(VALOR,'_','');
  VALOR = replace(VALOR,'(','');
  VALOR = replace(VALOR,')','');
  return VALOR;
end^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_NUMBER_TRIM (
    NUMBER varchar(50))
returns varchar(50)
AS
DECLARE VARIABLE NUMERO_INTEIRO integer;
DECLARE VARIABLE NUMERO_DECIMAL NUMERIC(18,18);
DECLARE VARIABLE TAMANHO_NUMERO_INC INTEGER;
DECLARE VARIABLE NUMERO_MILHAR VARCHAR(3000) CHARACTER SET UTF8;
DECLARE VARIABLE NUMERO_REVERSE VARCHAR(3000) CHARACTER SET UTF8;
DECLARE VARIABLE MILHAR_CONT INTEGER;
DECLARE VARIABLE DECIMAL_CASTED VARCHAR(3000) CHARACTER SET UTF8;
DECLARE VARIABLE DECIMAL_ROUND VARCHAR(3000) CHARACTER SET UTF8;
DECLARE VARIABLE DECIMAL_INTEIRO VARCHAR(3000) CHARACTER SET UTF8;
DECLARE VARIABLE RET VARCHAR(3000);
declare variable NEGATIVO VARCHAR(10);
begin

    RET = '';

    NEGATIVO = '';
    IF ( POSITION('-',NUMBER) > 0 ) THEN
    BEGIN
        NEGATIVO = '-';
        NUMBER = REPLACE(NUMBER,'-','');
    END

    IF ( CHAR_LENGTH(NUMBER) > 0 ) THEN
    BEGIN
        NUMERO_DECIMAL = CAST(NUMBER AS NUMERIC(18,8)) - TRUNC(CAST(NUMBER AS NUMERIC(18,8)));
    
        DECIMAL_CASTED = IIF(SUBSTRING(NUMERO_DECIMAL FROM 1 FOR 2) IN ('0.','1.'), SUBSTRING(NUMERO_DECIMAL FROM 3),'');
    
        DECIMAL_INTEIRO = REVERSE(CAST(REVERSE(DECIMAL_CASTED) AS integer));
    
        IF ( DECIMAL_INTEIRO = 0 ) THEN
        BEGIN
            DECIMAL_INTEIRO = '';
        END ELSE
        BEGIN
            DECIMAL_INTEIRO = '.' || DECIMAL_INTEIRO;
        END

        RET = NEGATIVO||TRUNC(CAST(NUMBER AS NUMERIC(18,8))) || DECIMAL_INTEIRO;
    END


  /* Function Text */
  return RET;

--    RETURN NUMERO_DECIMAL;
end
^

SET TERM ; ^

ALTER TABLE TIPOS_PGTOS
    ADD ID INTEGER;

CREATE SEQUENCE GTIPOS_PGTOS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger TIPOS_PGTOS_bu0 for TIPOS_PGTOS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gTIPOS_PGTOS,1);
end^

SET TERM ; ^

update TIPOS_PGTOS a set a.BAIXA_AUTO = a.BAIXA_AUTO;

SET TERM ^ ;

CREATE OR ALTER trigger au_precos_total_2_0 for produtos
inactive after update position 0
AS 
declare variable i_count int;
declare variable i_hasdata char;
declare variable BASE INTEGER;
declare variable PRECO_FISICO VARCHAR(1);
declare variable TABELA INTEGER;
declare variable OPERACAO VARCHAR(1);
declare variable ARREDONDAR VARCHAR(1);
declare variable VALOR NUMERIC(15,7);
declare variable TIPO_TABELA VARCHAR(1);
declare variable KIT VARCHAR(1);
declare variable BAIXA_ESTOQUE_FICH VARCHAR(1);
declare variable PRECO_AUTOMATICO VARCHAR(1);
declare variable PRECO_PROPORCIONAL_CODBASE VARCHAR(1);
declare variable CODBASE INTEGER;
declare variable PRECO NUMERIC(15,7);
declare variable FATOR_ARRED NUMERIC(15,7);
declare variable PRECO_OLD NUMERIC(15,7);
declare variable PRECO_DIGITADO NUMERIC(15,7);
declare variable DATA_ULT DATE;
declare variable CONDICAO_PGTO INTEGER;
declare variable CPRECO INTEGER;
declare variable PRODUTO INTEGER;
declare variable COR INTEGER;
declare variable ESTAMPA INTEGER;
declare variable TAMANHO VARCHAR(5);
declare variable TRANS_ID INTEGER;
declare variable VALIDADE_FINAL DATE;
declare variable VALIDADE_INICIAL DATE;
declare variable ENTRADA INTEGER;
declare variable PRECO_BLOQUEADO NUMERIC(15,7);
declare variable USUARIO VARCHAR(50);
declare variable USUARIO_LIBEROU VARCHAR(50);
begin

end^

SET TERM ; ^

ALTER TABLE PRODUTOS
    ADD ID INTEGER;

CREATE SEQUENCE GPRODUTOS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger PRODUTOS_bu0 for PRODUTOS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gPRODUTOS,1);
end^

SET TERM ; ^

update PRODUTOS a set a.FATOR_AU = a.FATOR_AU;

CREATE TABLE TBTIPOPRODUTO (
    DESCRICAO           VARCHAR(20) NOT NULL,
    CODIGO              INTEGER DEFAULT 0 NOT NULL,
    STATUS              CHAR(1) DEFAULT '1',
    STATUSEXCLUSAO      CHAR(1) DEFAULT '1',
    USUARIO_CODIGO      INTEGER,
    DATA                DATE DEFAULT 'NOW',
    CUSTO               CHAR(1) DEFAULT '1',
    DESCRICAO_RESUMIDA  VARCHAR(20) DEFAULT '',
    CLASSE              CHAR(2)
);

UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('MATERIA-PRIMA', 1, '1', '0', 5, '2007-05-16 00:00:00', '1', 'Matéria Prima', 'MP')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('MAT.  P/ USO/CONSUMO', 7, '1', '0', 186, '2019-08-15 00:00:00', '1', 'Mat.p/Uso Consumo', 'MC')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('MATERIAL EMBALAGEM', 8, '1', '1', 5, '2007-12-19 00:00:00', '1', 'Mat.de Embalagem', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('NAVALHAS E MATRIZES', 9, '1', '1', 0, '2018-08-17 00:00:00', '1', 'Navalhas Matrizes', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('OUTROS', 6, '1', '0', 5, '2007-05-16 00:00:00', '0', 'Outros', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('PATRIMONIO', 5, '1', '0', 5, '2007-05-16 00:00:00', '0', 'Patrimônio', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('PRODUTO ACABADO', 2, '1', '0', 5, '2007-05-16 00:00:00', '2', 'Bojo Acabado', 'AC')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('SEMI-ACABADO', 3, '1', '0', 5, '2007-05-16 00:00:00', '2', 'Espuma Semi Acabado', 'SA')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('SERVIÇOS', 4, '1', '0', 5, '2007-05-16 00:00:00', '2', 'Serviços', 'SE')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('PROD. PRONTO MATRIZA', 10, '1', '1', 42, '2012-03-08 00:00:00', '0', 'Outros', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('BRINDES', 12, '1', '1', 347, '2014-12-04 00:00:00', '0', 'Outros', '  ')
                           MATCHING (DESCRICAO, CODIGO);
UPDATE OR INSERT INTO TBTIPOPRODUTO (DESCRICAO, CODIGO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, CUSTO, DESCRICAO_RESUMIDA, CLASSE)
                             VALUES ('PRODUTOS REVENDA', 11, '1', '1', 0, '2019-06-20 00:00:00', '1', 'Revenda', '  ')
                           MATCHING (DESCRICAO, CODIGO);


CREATE TABLE TBUNIDADEMEDIDA (
    SIGLA           VARCHAR(3) NOT NULL,
    DESCRICAO       VARCHAR(20),
    STATUS          CHAR(1) DEFAULT '1',
    STATUSEXCLUSAO  CHAR(1) DEFAULT '0',
    USUARIO_CODIGO  INTEGER,
    DATA            DATE DEFAULT 'NOW',
    ID              INTEGER,
    PODE_FRACIONAR  CHAR(1) DEFAULT '1',
    IMPORTADO       CHAR(1) DEFAULT '0'
);

UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('%', 'PERCENTUAL', '1   ', '0   ', 293, '2018-01-04', 28, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('BL', 'BLOCO', '1   ', '0   ', 19, '2008-04-10', 14, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('CH', 'CHAPA', '1   ', '0   ', 5, '2007-06-28', 1, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('CJ', 'CONJUNTO', '1   ', '0   ', 215, '2017-02-11', 22, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('CON', 'CONE', '1   ', '0   ', NULL, '2020-07-15', 30, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('CT', 'CENTO', '1   ', '0   ', 5, '2009-09-17', 17, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('CX', 'CAIXA', '1   ', '0   ', 5, '2007-05-16', 2, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('FL', 'FOLHA', '1   ', '0   ', 215, '2017-11-29', 26, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('GL', 'GALÃO', '1   ', '0   ', 5, '2009-09-17', 18, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('KG', 'QUILOGRAMA', '1   ', '0   ', 5, '2007-05-16', 3, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('LAT', 'LATA', '1   ', '0   ', 5, '2007-06-28', 4, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('LT', 'LITRO', '1   ', '0   ', 5, '2007-05-16', 5, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('M', 'METRO', '1   ', '0   ', 5, '2007-05-16', 6, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('M2', 'METRO QUADRADO', '1   ', '0   ', 5, '2007-05-16', 7, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('M3', 'METRO CUBICO', '1   ', '0   ', 5, '2007-05-16', 8, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('MIL', 'MILHEIRO', '1   ', '0   ', 5, '2007-06-28', 9, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('ML', 'METRO LINEAR', '1   ', '0   ', 215, '2013-08-14', 20, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('MLI', 'MILILITRO', '1   ', '0   ', 215, '2017-05-23', 24, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('MT', 'METRO', '1   ', '0   ', 123, '2017-09-05', 25, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('MWH', 'MEGAWATT HORA', '1   ', '0   ', 215, '2016-12-07', 21, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('PC', 'PEÇA', '1   ', '0   ', 5, '2007-05-16', 10, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('PCT', 'PACOTE', '1   ', '0   ', 5, '2007-05-16', 11, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('PLC', 'PLACA', '1   ', '0   ', NULL, '2020-03-16', 29, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('PR', 'PARES', '1   ', '0   ', 5, '2007-05-16', 12, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('RL', 'ROLO', '1   ', '0   ', 215, '2017-05-04', 23, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('RSM', 'RESMA', '1   ', '0   ', 19, '2008-06-03', 15, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('TL', 'TALOES', '1   ', '0   ', 19, '2009-07-29', 16, 'N   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('TON', 'TONELADA', '1   ', '0   ', 5, '2012-04-05', 19, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('UN', 'UNIDADE', '1   ', '0   ', 5, '2007-05-16', 13, 'S   ', '0   ')
                             MATCHING (SIGLA);
UPDATE OR INSERT INTO TBUNIDADEMEDIDA (SIGLA, DESCRICAO, STATUS, STATUSEXCLUSAO, USUARIO_CODIGO, DATA, ID, PODE_FRACIONAR, IMPORTADO)
                               VALUES ('kWh', 'QUILOWATT-HORA', '1   ', '0   ', 293, '2018-01-03', 27, 'S   ', '0   ')
                             MATCHING (SIGLA);


delete from TBGRADE_TEMP;

UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (1, 1, 'PP')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (2, 1, 'P')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (3, 1, 'M')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (4, 1, 'G')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (7, 1, 'GG')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (6, 1, 'XG')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (11, 1, 'XXG')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (10, 1, 'UNICA')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (5, 1, 'EG')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (8, 1, 'EGG')
                          MATCHING (ID);
UPDATE OR INSERT INTO TBGRADE_TEMP (ID, TIPO, DESC)
                            VALUES (9, 1, 'XGG')
                          MATCHING (ID);

CREATE TABLE TBGRADE_FIXA (
    DESCRICAO       VARCHAR(20) NOT NULL,
    CODIGO          INTEGER DEFAULT 0 NOT NULL,
    T01             VARCHAR(10),
    T02             VARCHAR(10),
    T03             VARCHAR(10),
    T04             VARCHAR(10),
    T05             VARCHAR(10),
    T06             VARCHAR(10),
    T07             VARCHAR(10),
    T08             VARCHAR(10),
    T09             VARCHAR(10),
    T10             VARCHAR(10),
    T11             VARCHAR(10),
    T12             VARCHAR(10),
    T13             VARCHAR(10),
    T14             VARCHAR(10),
    T15             VARCHAR(10),
    T16             VARCHAR(10),
    T17             VARCHAR(10),
    T18             VARCHAR(10),
    T19             VARCHAR(10),
    T20             VARCHAR(10),
    TOTAL_TAMANHOS  INTEGER DEFAULT 1,
    STATUS          CHAR(1) DEFAULT '1'
);

CREATE INDEX TTBGRADE_FIXA_IDX1
ON TBGRADE_FIXA (CODIGO);


create or alter function FN_TAMANHO (
    GRADE_ID integer,
    DESC_TAMANHO varchar(10))
returns integer
as
declare variable TAMANHO integer;
begin


      TAMANHO = coalesce((select first 1
        iif(T01 = :DESC_TAMANHO, 1,
        iif(T02 = :DESC_TAMANHO, 2,
        iif(T03 = :DESC_TAMANHO, 3,
        iif(T04 = :DESC_TAMANHO, 4,
        iif(T05 = :DESC_TAMANHO, 5,
        iif(T06 = :DESC_TAMANHO, 6,
        iif(T07 = :DESC_TAMANHO, 7,
        iif(T08 = :DESC_TAMANHO, 8,
        iif(T09 = :DESC_TAMANHO, 9,
        iif(T10 = :DESC_TAMANHO,10,
        iif(T11 = :DESC_TAMANHO,11,
        iif(T12 = :DESC_TAMANHO,12,
        iif(T13 = :DESC_TAMANHO,13,
        iif(T14 = :DESC_TAMANHO,14,
        iif(T15 = :DESC_TAMANHO,15,
        iif(T16 = :DESC_TAMANHO,16,
        iif(T17 = :DESC_TAMANHO,17,
        iif(T18 = :DESC_TAMANHO,18,
        iif(T19 = :DESC_TAMANHO,19,
        iif(T20 = :DESC_TAMANHO,20,0)))))))))))))))))))) as TAMANHO
      from TBGRADE_FIXA g
      where g.codigo = :grade_id),0);


  return TAMANHO;
end;

CREATE OR ALTER VIEW VWPRODUTO_COR(
    PRODUTO_CODIGO,
    COR_CODIGO,
    COR_ID,
    PRODUTO_ID)
AS
select
    PRODUTO_CODIGO,
    COR_CODIGO,
    COR_ID,
    cast((row_number() over()) as integer) as PRODUTO_ID
from(
    select distinct
        *
    from(
        select distinct
            p.produto as PRODUTO_CODIGO,
            s.cor as COR_CODIGO,
            h.cod_cor as COR_ID
        from produtos p
        left join COR_PROD s on p.produto = s.produto
        left join cores h on h.cor = s.cor
    
        union all
    
        select distinct
            v.produto_c as PRODUTO_CODIGO,
            v.cor_c as COR_CODIGO,
            h.cod_cor as COR_ID
        from V_FICHA_TECNICA_CONSUMOS v
        left join COR_PROD s on s.produto = v.produto_c
        left join cores h on h.cor = v.cor_c
    )
    order by 1,2,3
)
;


CREATE TABLE tbproduto_cor (
    PRODUTO_CODIGO INTEGER,
    PRODUTO_COR_ID INTEGER,
    COR_CODIGO INTEGER,
    COR_ID INTEGER,
    PRODUTO_ID INTEGER
);

CREATE INDEX TTBPRODUTO_COR_05
ON TBPRODUTO_COR (PRODUTO_ID);

CREATE INDEX TTBPRODUTO_COR_04
ON TBPRODUTO_COR (COR_CODIGO);

CREATE INDEX TTBPRODUTO_COR_03
ON TBPRODUTO_COR (PRODUTO_COR_ID);

CREATE INDEX TTBPRODUTO_COR_02
ON TBPRODUTO_COR (PRODUTO_CODIGO);

CREATE INDEX TTBPRODUTO_COR_01
ON TBPRODUTO_COR (COR_ID);

CREATE TABLE TBFICHA_TECNICA_CONSUMOS (
    PRODUTO INTEGER,
    COR INTEGER,
    ESTAMPA INTEGER,
    TAMANHO VARCHAR(5),
    FICHA_TECNICA INTEGER,
    PRODUTO_C INTEGER,
    COR_C INTEGER,
    ESTAMPA_C INTEGER,
    TAMANHO_C VARCHAR(5),
    CONSUMO NUMERIC(15,4)
);

CREATE INDEX ITBFICHA_TECNICA_CONSUMOS_01
ON TBFICHA_TECNICA_CONSUMOS (PRODUTO);


ALTER TABLE FILIAIS
    ADD ID INTEGER;

CREATE SEQUENCE GFILIAIS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger FILIAIS_bu0 for FILIAIS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gFILIAIS,1);
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger update_fecha_contabil_lanc for lancamentos
inactive after update position 0
AS 
DECLARE VARIABLE N INTEGER; 
BEGIN 
FOR SELECT COUNT ( * )  as N FROM PERIODO_CONTABIL PC WHERE ( PC.DATA_FECHAMENTO >= OLD.DATA_PAGAMENTO OR PC.DATA_FECHAMENTO >= OLD.DATA_EMISSAO ) AND PC.STATUS = 'F'  INTO :N DO 
   IF(:N>0) THEN 
      EXCEPTION lancamentos_UPDATE ( ' 
ALTERACAO BLOQUEADA, A DATA DO LANCAMENTO ESTA RELACIONADA A FAIXA DE UM PERIODO CONTABIL FECHADO!');

END^

SET TERM ; ^


update FILIAIS a set a.nome = a.nome;

ALTER TABLE LANCAMENTOS
    ADD ID INTEGER;

CREATE SEQUENCE GLANCAMENTOS;

SET TERM ^ ;

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

SET TERM ; ^

SET TERM ^ ;

CREATE trigger LANCAMENTOS_bu0 for LANCAMENTOS
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(gLANCAMENTOS,1);
end^

SET TERM ; ^

update LANCAMENTOS a set a.FILIAL = a.FILIAL;

ALTER TABLE LANCAMENTOS
    ADD SALDO_CALC COMPUTED BY ((valor_inicial - valor_pago));

CREATE INDEX ILANCAMENTOS_01
ON LANCAMENTOS COMPUTED BY (valor_inicial - valor_pago);


SET TERM ^ ;

CREATE OR ALTER function FORMATDATE (
    CAMPO date)
returns varchar(10)
AS
BEGIN
 RETURN (
            lpad(EXTRACT(DAY    FROM Campo) ,2,'0') ||'.'||
            lpad(EXTRACT(MONTH  FROM Campo) ,2,'0') ||'.'||
            lpad(EXTRACT(YEAR   FROM Campo) ,4,'0')
        );
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER (
    VALOR varchar(500))
returns varchar(300)
AS
begin

  VALOR = replace(VALOR,'.','');
  VALOR = replace(VALOR,'/','');
  VALOR = replace(VALOR,'-','');
  VALOR = replace(VALOR,'_','');
  VALOR = replace(VALOR,'(','');
  VALOR = replace(VALOR,')','');
  VALOR = replace(VALOR,' ','');
  return VALOR;
end^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER (
    VALOR varchar(500))
returns varchar(300)
AS
begin

  VALOR = replace(VALOR,'.','');
  VALOR = replace(VALOR,'/','');
  VALOR = replace(VALOR,'-','');
  VALOR = replace(VALOR,'_','');
  VALOR = replace(VALOR,'(','');
  VALOR = replace(VALOR,')','');
  VALOR = replace(VALOR,'*','');
  VALOR = replace(VALOR,'\\','');
  VALOR = replace(VALOR,' ','');
  return VALOR;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_REMOVER (
    VALOR varchar(500))
returns varchar(300)
AS
begin

  VALOR = replace(VALOR,'.','');
  VALOR = replace(VALOR,'/','');
  VALOR = replace(VALOR,'-','');
  VALOR = replace(VALOR,'_','');
  VALOR = replace(VALOR,'(','');
  VALOR = replace(VALOR,')','');
  VALOR = replace(VALOR,'*','');
  VALOR = replace(VALOR,',','');
  VALOR = replace(VALOR,'|','');
  VALOR = replace(VALOR,' ','');
  return VALOR;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_NUM_TRIM (
    TEXTO varchar(300))
returns varchar(300)
as
declare variable TMP varchar(300);
declare variable OSPLIT varchar(10);
begin

  TMP = '';
  :TEXTO = coalesce(:TEXTO,'0');

  for
    select
        substring(cast(:TEXTO as varchar(300)) from a.linha_corrente for 1)
    from sp_gerar_linhas(char_length(cast(:TEXTO as varchar(300)))) a

  into
    OSPLIT
  do
  begin
    if(
        OSPLIT = '1' or 
        OSPLIT = '2' or
        OSPLIT = '3' or
        OSPLIT = '4' or
        OSPLIT = '5' or
        OSPLIT = '6' or
        OSPLIT = '7' or
        OSPLIT = '8' or
        OSPLIT = '9' or
        OSPLIT = '0'
    )then
    begin
       TMP = TMP||OSPLIT;
    end
  end

  return coalesce(TMP,'0');
end^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_NUM_TRIM (
    TEXTO varchar(300))
returns varchar(300)
as
declare variable TMP varchar(300);
declare variable OSPLIT varchar(10);
begin

  TMP = '';
  :TEXTO = coalesce(:TEXTO,'0');

  for
    select
        substring(cast(:TEXTO as varchar(300)) from a.linha_corrente for 1)
    from sp_gerar_linhas(char_length(cast(:TEXTO as varchar(300)))) a

  into
    OSPLIT
  do
  begin
    if(
        OSPLIT = '1' or 
        OSPLIT = '2' or
        OSPLIT = '3' or
        OSPLIT = '4' or
        OSPLIT = '5' or
        OSPLIT = '6' or
        OSPLIT = '7' or
        OSPLIT = '8' or
        OSPLIT = '9' or
        OSPLIT = '0'
    )then
    begin
       TMP = TMP||OSPLIT;
    end
  end

  TMP = coalesce(TMP,'0');
  if(TMP = '')then
  begin
    TMP = '0';
  end

  return coalesce(TMP,'0');
end^

SET TERM ; ^


update CLIENTES set obs = '' where obs is null;
update CLIENTES set obs_fat = '' where obs_fat is null;
update CLIENTES set obs_cli_pedido = '' where obs_cli_pedido is null;
update CLIENTES set obs_cli_prefat = '' where obs_cli_prefat is null;
update CLIENTES set obs_cli_fat = '' where obs_cli_fat is null;
update CLIENTES set obs_consulta_cred = '' where obs_consulta_cred is null;

CREATE OR ALTER VIEW VWPRODUTO_COR(
    PRODUTO_CODIGO,
    COR_CODIGO,
    COR_ID,
    PRODUTO_ID)
AS
select
    PRODUTO_CODIGO,
    COR_CODIGO,
    COR_ID,
    cast((row_number() over()) as integer) as PRODUTO_ID
from(
    select distinct
        *
    from(
        select distinct
            p.produto as PRODUTO_CODIGO,
            s.cor as COR_CODIGO,
            h.cod_cor as COR_ID
        from produtos p
        left join COR_PROD s on p.produto = s.produto
        left join cores h on h.cor = s.cor
    
        union all
    
        select distinct
            v.produto_c as PRODUTO_CODIGO,
            v.cor_c as COR_CODIGO,
            h.cod_cor as COR_ID
        from V_FICHA_TECNICA_CONSUMOS v
        left join COR_PROD s on s.produto = v.produto_c
        left join cores h on h.cor = v.cor_c
    )
    order by 1,2,3
)
;


CREATE TABLE TBESTOQUE_SALDO (
    ID INTEGER NOT NULL,
    MODELO VARCHAR(20),
    COR VARCHAR(20),
    TAMANHO VARCHAR(10),
    SALDO NUMERIC(15,4));

ALTER TABLE TBESTOQUE_SALDO
ADD CONSTRAINT PK_TBESTOQUE_SALDO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBESTOQUE_SALDO_ID;

SET TERM ^ ;

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

SET TERM ; ^


CREATE TABLE TBESTOQUE_SALD2 (
    ID INTEGER NOT NULL,
    PRODUTO VARCHAR(20),
    SALDO NUMERIC(15,4));

ALTER TABLE TBESTOQUE_SALD2
ADD CONSTRAINT PK_TBESTOQUE_SALD2
PRIMARY KEY (ID);

CREATE SEQUENCE GTBESTOQUE_SALD2;

SET TERM ^ ;

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

SET TERM ; ^

ALTER TABLE PEDIDO_VENDA
    ADD ID INTEGER;

CREATE SEQUENCE GPEDIDO_VENDA;

SET TERM ^ ;

CREATE trigger tpedido_venda_bu01 for pedido_venda
active before update position 0
AS
begin
if (new.id is null) then
    new.id = gen_id(GPEDIDO_VENDA,1);
end
^

SET TERM ; ^


ALTER TABLE PEDIDO_VENDA
    ADD OBS3 BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UTF8;

ALTER TABLE PROCESSOS ADD ID INTEGER;

CREATE SEQUENCE GPROCESSOS;

SET TERM ^ ;

CREATE OR ALTER trigger tprocessos_bu0 for processos
active before update position 0
AS
begin
  if (new.id is null) then
    new.id = gen_id(GPROCESSOS,1);
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_HORA (
    DATA timestamp)
returns varchar(50)
AS
begin
  /* Function Text */
  return fn_lpad(extract(hour   from DATA),2,'0') ||':'||
         fn_lpad(extract(minute from DATA),2,'0');
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPLIT2 (
    ITEXTO blob sub_type 1 segment size 80,
    ISEPARADOR char(1))
returns (
    OSPLIT varchar(4000))
as
declare variable VTEXTO varchar(4000);
declare variable VPOSICAO integer;
declare variable VPOSICAO_INICIAL integer;
declare variable VSPLIT varchar(4000);
BEGIN
    vtexto = itexto;
    vposicao_inicial = 1;
    vposicao = 1;
    
    IF (iseparador IS NULL OR itexto IS NULL) THEN
    BEGIN
        -- Sai da função sem executar
    END
    ELSE
    BEGIN
        WHILE (CHAR_LENGTH(vtexto) > 0) DO
        BEGIN
            vposicao = POSITION (:iseparador, vtexto, vposicao_inicial);
            IF (vposicao <= 0) THEN
            BEGIN
                vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial FOR
                        CHAR_LENGTH (:vtexto) - vposicao_inicial + 1);
                IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
                BEGIN
                    osplit = :vsplit;   
                    SUSPEND;
                END
                BREAK;
            END
            vsplit = SUBSTRING (:vtexto FROM :vposicao_inicial
                    FOR :vposicao - vposicao_inicial);
            IF (NOT :vsplit IS NULL AND NOT :vsplit = '') THEN
            BEGIN
                osplit = :vsplit;   
            END
            vsplit = NULL;
            vposicao_inicial = :vposicao + 1;
            SUSPEND;
        END
    END
END
^

SET TERM ; ^



SET TERM ^ ;

CREATE OR ALTER function FN_CHAVE_XML (
    CHAVE varchar(300),
    XML blob sub_type 0 segment size 80)
returns blob sub_type 0 segment size 80
AS
declare variable vchave varchar(100);
declare variable p1 integer;
declare variable p2 integer;
declare variable attr varchar(100);
begin

  for
     select OSPLIT from split2(:CHAVE, '.')
  into
    :VCHAVE
  do begin
    
    :ATTR   = coalesce(fn_array(:VCHAVE,2,'|'),'');
    :VCHAVE = coalesce(fn_array(:VCHAVE,1,'|'),'');

    if(char_length(:ATTR) = 0)then
    begin
        P1 = position('<' ||:VCHAVE||'>' in XML) + char_length('<'||:VCHAVE||'>');
        P2 = position('</'||:VCHAVE||'>' in XML) - P1;

        XML = substring(XML from P1 for P2);
    end else
    begin
       P1 = position('<' ||:VCHAVE||''  in XML) + char_length('<'||:VCHAVE||'');
       P2 = position('</'||:VCHAVE||'>' in XML);-- - char_length('</'||:VCHAVE||'>');

       XML = substring(XML from P1 for P2);

       P1 = position('' ||:ATTR||'="' in XML) + char_length(''||:ATTR||'="') + 2;
       XML = substring(XML from P1 for char_length(XML));
       P2 = position('"' in XML) - 1;

       XML = substring(XML from 1 for P2);
    end

  end

  return XML;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_CHAVE_XML (
    CHAVE varchar(300),
    XML blob sub_type 0 segment size 80)
returns varchar(300)
AS
declare variable VCHAVE varchar(100);
declare variable P1 integer;
declare variable P2 integer;
declare variable ATTR varchar(100);
begin

  for
     select OSPLIT from split2(:CHAVE, '.')
  into
    :VCHAVE
  do begin
    
    :ATTR   = coalesce(fn_array(:VCHAVE,2,'|'),'');
    :VCHAVE = coalesce(fn_array(:VCHAVE,1,'|'),'');

    if(char_length(:ATTR) = 0)then
    begin
        P1 = position('<' ||:VCHAVE||'>' in XML) + char_length('<'||:VCHAVE||'>');
        P2 = position('</'||:VCHAVE||'>' in XML) - P1;

        IF(P2 > 0 AND P1 >= 0)THEN
        BEGIN
            XML = substring(XML from P1 for P2);
        END ELSE
        BEGIN
           XML = NULL;
        END
    end else
    begin
       P1 = position('<' ||:VCHAVE||''  in XML) + char_length('<'||:VCHAVE||'');
       P2 = position('</'||:VCHAVE||'>' in XML);-- - char_length('</'||:VCHAVE||'>');

       XML = substring(XML from P1 for P2);

       P1 = position('' ||:ATTR||'="' in XML) + char_length(''||:ATTR||'="') + 2;
       XML = substring(XML from P1 for char_length(XML));
       P2 = position('"' in XML) - 1;


           XML = substring(XML from 1 for P2);

    end

  end

  return XML;
end
^

SET TERM ; ^

