DROP TRIGGER TTBPLACA_AVULSA_B02I;

CREATE OR ALTER trigger ttbplaca_avulsa_b02ui for tbplaca_avulsa
active before insert or update position 2
AS
declare variable produto_gerado integer;
declare variable cor varchar(100);
begin

    produto_gerado = 0;

    if(
        inserting or (
        new.cor_id      <> old.cor_id       or
        new.DENSIDADE   <> old.DENSIDADE    or
        new.largura     <> old.largura      or
        new.comprimento <> old.comprimento  or
        new.espessura   <> old.espessura    or
        new.quantidade  <> old.quantidade
        ) )then
    begin

        SELECT first 1
            p.codigo as ID
        from tbproduto p, tbproduto_ficha f
        where MODELO_CODIGO   = ( select p.modelo_codigo from tbproduto p where p.codigo = fn_parametro('SISTEMA.PRODUTO_TALAO_PLACA'))
        and f.LARGURA         = new.LARGURA
        and f.COMPRIMENTO     = new.comprimento
        and p.cor_codigo      = new.cor_id
        and f.produto_codigo  = p.codigo
        and f.densidade       = new.DENSIDADE
        and f.espessura       = new.espessura
        into :produto_gerado;
    
        produto_gerado = coalesce(produto_gerado,0);
    
        if(produto_gerado > 0)then
        begin
            new.produto_id = :produto_gerado;
            new.gererou_produto = 0;
        end else
        begin
            new.gererou_produto = 1;
            cor =  coalesce((select first 1 c.descricao from tbcor c where c.codigo = new.cor_id),'');
            if(cor = '')then
            begin
                exception "..." 'Cor não encontrada.';
            end
    
            :produto_gerado = gen_id(GTBPRODUTO, 1);
            new.produto_id = :produto_gerado;
    
            INSERT into tbproduto
            select
                'PLC BJ D'||new.DENSIDADE||' '||replace(new.espessura, '.',',')||'MM '||:cor||' '||replace(new.LARGURA, '.',',')||'x'||replace(new.COMPRIMENTO, '.',',') as DESCRICAO,
                :produto_gerado as CODIGO,
                CODIGOANTIGO,
                UNIDADEMEDIDA_SIGLA,
                FAMILIA_CODIGO,
                GRADE_CODIGO,
                LOCALIZACAO_CODIGO,
                TIPOPRODUTO_CODIGO,
                NCM_CODIGO,
                MODELO_CODIGO,
                new.cor_id as COR_CODIGO,
                STATUS,
                STATUSEXCLUSAO,
                USUARIO_CODIGO,
                DATA,
                HABILITA_COMPRA,
                HABILITA_VENDA,
                DATA_ALTERACAO,
                EAN,
                LINHA_CODIGO,
                OBSERVACAO,
                PAFECF,
                TOLERANCIA,
                NBM_CODIGO,
                SALESFORCE,
                FLAG_FORNECEDOR,
                SEGURANCA,
                PROGRAMAR_SEM_ESTOQUE,
                INVENTARIO,
                GERAR_OC,
                FEEF,
                FEEF_PERC_DEDUCAO,
                DATA_AMOSTRA_INVENTARIO,
                EXCLUIR_ECOMERCE,
                INFORMACOES_COMPLEMENTARES,
                TOLERANCIA_PRO_QTD_MAIOR,
                TOLERANCIA_PRO_QTD_MENOR,
                TOLERANCIA_CON_QTD_MAIOR,
                TOLERANCIA_CON_QTD_MENOR,
                SOBRA_PRODUCAO,
                SOBRA_CONSUMO,
                TOLERANCIA_TIPO_PRO,
                TOLERANCIA_TIPO_CON,
                DATA_ATIVACAO,
                DATA_INATIVACAO,
                FEEF_DATA_VALIDADE,
                MODELO_ORIGEM,
                new.largura as LARGURA,
                new.comprimento as COMPRIMENTO
            from tbproduto p
            where p.codigo = fn_parametro('SISTEMA.PRODUTO_TALAO_PLACA');
    
            UPDATE OR INSERT INTO TBPRODUTO_FICHA (PRODUTO_CODIGO, DENSIDADE, ESPESSURA, LARGURA, COMPRIMENTO)
                VALUES (:produto_gerado, new.DENSIDADE, new.espessura, new.largura, new.comprimento)
            MATCHING (PRODUTO_CODIGO);
    
        end
    end

end;

ALTER TABLE TBPLACA_AVULSA ADD OPERADOR_ID INTEGER

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

  new.datahora = current_timestamp;
end;


