ALTER TABLE TBEMPRESA
    ADD REPRESENTANTE_ID INTEGER DEFAULT 0,
    ADD REPLICAR_CLIENTE INTEGER DEFAULT 0;

COMMENT ON COLUMN TBEMPRESA.REPRESENTANTE_ID IS
'id do representante que fez o cadastro';

COMMENT ON COLUMN TBEMPRESA.REPLICAR_CLIENTE IS
'insere na tabela de clientes';

CREATE OR ALTER trigger ttbempresa_b03i for tbempresa
active before insert position 0
AS
begin
    if(new.ecommerce = 1 or new.replicar_cliente = 1 )then
    begin
       INSERT INTO TBCLIENTE (
             RAZAOSOCIAL,
             CODIGO,
             REPRESENTANTE_CODIGO,
             TRANSPORTADORA_CODIGO,
             PAGAMENTO_CONDICAO,
             PAGAMENTO_FORMA,
             STATUS,
             UF,
             BLOQUEIA_PEDIDO,
             BLOQUEIA_NOTAFISCAL,
             REPRESENTANTE_COMISSAO,
             GRADE_SECUNDARIA,
             LIMITE_CREDITO,
             SUFRAMA,
             GRUPO,
             BOQUEIA_PAGAMENTO_CONDICAO,
             TIPO_CODIGO,
             VENDEDOR_CODIGO,
             MATRIZ_ID,
             VENDEDOR_COMISSAO,
             ATENDE_GRADE_COMPLETA,
             SUFRAMA_VENCIMENTO,
             LOJA,
             BLOQUEIO_DIAS_ATRASO,
             BLOQUEIO_DIAS_SEMMOV,
             TAG,
             PRIORIDADE,
             INATIVA_DIAS_SEMMOV,
             CONFIRMACAO_AUTOMATICA,
             PAFECF,
             FRETE,
             SUBSTITUIDO_TRIBUTARIO,
             DATA_BLOQUEIO,
             BLOQUEIO_MOTIVO,
             NOTIFICAR_DIAS_ATRASO,
             NOTIFICAR_ATRASO,
             ETIQUETA,
             EMPRESA_VINCULO,
             BLOQUEIO_DIAS_ATRASO_NF,
             ECOMMERCE
       ) VALUES (
             new.razaosocial,
             new.codigo,
             iif(new.representante_id = 0, coalesce((SELECT FIRST 1 P.valor_ext  FROM tbcontrole_n P WHERE P.id = 272),0), new.representante_id),
             0,
             0,
             0,
             '0   ',
             new.uf,
             '',
             '',
             0,
             '0   ',
             0,
             '',
             '0   ',
             '    ',
             1,
             new.vendedor_id,
             0,
             0,
             '    ',
             NULL,
             '',
             0,
             0,
             '    ',
             10,
             0,
             '    ',
             '',
             0,
             '0   ',
             NULL,
             '',
             0,
             0,
             substring(new.razaosocial from 1 for 6),
             new.codigo,
             0,
             1
        );
    end
end;

ALTER TABLE TBEMPRESA
    ADD VENDEDOR_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBEMPRESA.VENDEDOR_ID IS
'id do vendedor que fez o cadastro';

create or alter function fn_estoque_minimo (
    estabelecimento_codigo integer,
    localizacao_codigo integer,
    produto_codigo integer,
    tamnho integer)
returns integer
as
declare variable estmin numeric(15,4);
begin

    ESTMIN = COALESCE((SELECT

        iif(:TAMNHO = 01, em.t01,
        iif(:TAMNHO = 02, em.t02,
        iif(:TAMNHO = 03, em.t03,
        iif(:TAMNHO = 04, em.t04,
        iif(:TAMNHO = 05, em.t05,
        iif(:TAMNHO = 06, em.t06,
        iif(:TAMNHO = 07, em.t07,
        iif(:TAMNHO = 08, em.t08,
        iif(:TAMNHO = 09, em.t09,
        iif(:TAMNHO = 10, em.t10,
        iif(:TAMNHO = 11, em.t11,
        iif(:TAMNHO = 12, em.t12,
        iif(:TAMNHO = 13, em.t13,
        iif(:TAMNHO = 14, em.t14,
        iif(:TAMNHO = 15, em.t15,
        iif(:TAMNHO = 16, em.t16,
        iif(:TAMNHO = 17, em.t17,
        iif(:TAMNHO = 18, em.t18,
        iif(:TAMNHO = 19, em.t19,
        iif(:TAMNHO = 20, em.t20,0))))))))))))))))))))

        FROM TBESTOQUE_MINIMO EM
        WHERE EM.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO
        AND EM.LOCALIZACAO_CODIGO = :LOCALIZACAO_CODIGO
        AND EM.PRODUTO_CODIGO = :PRODUTO_CODIGO),0);

  return ESTMIN;
end;

CREATE trigger ttbbi_paineis_b02u for tbbi_paineis
active before update position 0
AS
begin
  if(new.nome <> old.nome)then
  begin
     update tbusuario_bi b set b.arquivo = new.nome where b.arquivo = new.nome;
  end
end;

CREATE OR ALTER trigger ttbempresa_b03i for tbempresa
active before insert position 0
AS
begin
    if(new.ecommerce = 1 or new.replicar_cliente = 1 )then
    begin
       INSERT INTO TBCLIENTE (
             RAZAOSOCIAL,
             CODIGO,
             REPRESENTANTE_CODIGO,
             TRANSPORTADORA_CODIGO,
             PAGAMENTO_CONDICAO,
             PAGAMENTO_FORMA,
             STATUS,
             UF,
             BLOQUEIA_PEDIDO,
             BLOQUEIA_NOTAFISCAL,
             REPRESENTANTE_COMISSAO,
             GRADE_SECUNDARIA,
             LIMITE_CREDITO,
             SUFRAMA,
             GRUPO,
             BOQUEIA_PAGAMENTO_CONDICAO,
             TIPO_CODIGO,
             VENDEDOR_CODIGO,
             MATRIZ_ID,
             VENDEDOR_COMISSAO,
             ATENDE_GRADE_COMPLETA,
             SUFRAMA_VENCIMENTO,
             LOJA,
             BLOQUEIO_DIAS_ATRASO,
             BLOQUEIO_DIAS_SEMMOV,
             TAG,
             PRIORIDADE,
             INATIVA_DIAS_SEMMOV,
             CONFIRMACAO_AUTOMATICA,
             PAFECF,
             FRETE,
             SUBSTITUIDO_TRIBUTARIO,
             DATA_BLOQUEIO,
             BLOQUEIO_MOTIVO,
             NOTIFICAR_DIAS_ATRASO,
             NOTIFICAR_ATRASO,
             ETIQUETA,
             EMPRESA_VINCULO,
             BLOQUEIO_DIAS_ATRASO_NF,
             ECOMMERCE
       ) VALUES (
             new.razaosocial,
             new.codigo,
             iif(new.representante_id = 0, coalesce((SELECT FIRST 1 P.valor_ext  FROM tbcontrole_n P WHERE P.id = 272),0), new.representante_id),
             0,
             0,
             0,
             '1',
             new.uf,
             '',
             '',
             0,
             '0',
             0,
             '',
             '0',
             '',
             1,
             new.vendedor_id,
             0,
             0,
             '',
             NULL,
             '',
             0,
             0,
             '',
             10,
             0,
             '',
             '',
             0,
             '0',
             NULL,
             '',
             0,
             0,
             substring(new.razaosocial from 1 for 6),
             new.codigo,
             0,
             iif(new.replicar_cliente = 1, 0, 1)
        );
    end
end;

ALTER TABLE TBCLIENTE_TIPO
    ADD HABILITA_CAD_WEB INTEGER;

COMMENT ON COLUMN TBCLIENTE_TIPO.HABILITA_CAD_WEB IS
'1 - sim
0 - nao
perfil deve aparecer na lista de tipos no cadastro de clientes';

ALTER TABLE TBCLIENTE_TIPO ALTER COLUMN HABILITA_CAD_WEB
SET DEFAULT 0;

CREATE INDEX ITBEMPRESA_VINCULO_TIPO_01
ON TBEMPRESA_VINCULO_TIPO (CLIENTE_TIPO_ID,EMPRESA_VINCULO);

CREATE trigger ttbempresa_b04i for tbempresa
active before insert position 0
AS
declare variable id integer;
declare variable empresa varchar(20);
begin

  id = coalesce((select first 1 e.codigo from tbempresa e where e.cnpj = new.cnpj),0);
  empresa = coalesce((select first 1 e.nomefantasia from tbempresa e where e.cnpj = new.cnpj),0);

  if(id > 0)then
  begin
    exception "..." 'Empresa já cadastrada com este CNPJ, Empresa:'||:id||' - '||:empresa;
  end
end;

CREATE TABLE TBGRADE_TIPO (
    ID          INTEGER NOT NULL,
    DESCRICAO   VARCHAR(50),
    FAMILIA_ID  INTEGER,
    STATUS      INTEGER DEFAULT 1
);

ALTER TABLE TBGRADE_TIPO
ADD CONSTRAINT PK_TBGRADE_TIPO
PRIMARY KEY (ID);

COMMENT ON TABLE TBGRADE_TIPO IS 'tabela com os tipos de grade

0 = GRADRE SKU (SEPARA OS ITENS DE CAIXA FECHADA COM QUANTIDADE IGUAL DA COTA)
1 = GRADE LINHA / SEGUINDO AS COTAS DO MODELO, SEPARANDO OS ITENS DA EMBALAGEM POR LINHA
2 = GRADE COMPOSTA / SEGUINDO AS REGRAS DE COTA DA TBNFS_EMBARQUE_COMPOSICAO_REGRA
3 = GRADRE PADRAO ( TAM.40 = 2 | TAM.42 = 4 | TAM.44 = 4 | TAM.46 = 2 )';

CREATE SEQUENCE GTBGRADE_TIPO;

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

ALTER TABLE TBPEDIDO
    ADD GRADE_TIPO_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBPEDIDO.GRADE_TIPO_ID IS
'id do tipo de grade (TBGRADE_TIPO.ID)';

ALTER TABLE TBDRE_GERENCIAL_HISTORICO_MES ALTER FLAG COMPUTED BY (cast(ANO||lpad(mes,2,0) as integer));

DROP INDEX ITBDRE_GERENCIAL_HIST_02;

CREATE INDEX ITBDRE_GERENCIAL_HIST_02
ON TBDRE_GERENCIAL_HISTORICO_MES COMPUTED BY (cast(ANO||lpad(mes,2,0) as integer));


