
CREATE OR ALTER trigger ttbjustificativa_grupo_b03i for tbjustificativa_grupo
active before insert position 0
AS
declare variable FLAG_A int;
BEGIN
    FLAG_A = coalesce((SELECT COUNT (FLAG) FROM TBJUSTIFICATIVA_GRUPO WHERE FLAG = NEW.FLAG),0) ;

    IF (FLAG_A > 0) THEN
    BEGIN
        EXCEPTION "..." 'Erro: Flag já existente, não é possível repetir Flags';
    END
end;

CREATE trigger ttbjustificativa_grupo_b02u for tbjustificativa_grupo
active before update position 2
AS
declare variable FLAG_A int;
BEGIN
    FLAG_A = coalesce((SELECT COUNT (FLAG) FROM TBJUSTIFICATIVA_GRUPO WHERE FLAG = NEW.FLAG and ID <> new.ID),0) ;

    IF (FLAG_A > 0) THEN
    BEGIN
        EXCEPTION "..." 'Erro: Flag já existente, não é possível repetir Flags';
    END
end;

INSERT INTO TBTABELA_GENERICA (TABELA_ORIGEM, TABELA_DESTINO, TABELA_DESTINO_NIVEL, DESCRICAO)
                       VALUES ('TBESTOQUE_TRANSACAO_ITEM', 'TBREQUISICAO_PLACA', 1, 'WEB22550 - Controle de Placas do CD ');

ALTER TABLE TBPEDIDO_ITEM_PROCESSADO ADD JUSTIFICATIVA_ID INTEGER;

CREATE OR ALTER VIEW VWREMESSA_TALAO_DETALHE(
    ID,
    ESTABELECIMENTO_ID,
    REMESSA_ID,
    REMESSA_TALAO_ID,
    PECA_CONJUNTO,
    LOCALIZACAO_ID,
    PRODUTO_ID,
    MODELO_ID,
    COR_ID,
    TAMANHO,
    PERFIL,
    QUANTIDADE,
    QUANTIDADE_PRODUCAO,
    QUANTIDADE_PRODUCAO_TMP,
    QUANTIDADE_SALDO,
    QUANTIDADE_ALTERN,
    QUANTIDADE_ALTERN_PRODUCAO,
    QUANTIDADE_ALTERN_PRODUCAO_TMP,
    QUANTIDADE_ALTERN_SALDO,
    STATUS,
    DATA_PRODUCAO,
    DATAHORA_PRODUCAO,
    OPERADOR_ID_PRODUCAO,
    GP_ID,
    ESTOQUE_ID,
    QUANTIDADE_SOBRA,
    QUANTIDADE_SOBRA_TMP,
    LIB,
    ESTOQUE_ID_S_TRANSF,
    ESTOQUE_ID_E_TRANSF,
    VIA_ETIQUETA,
    OBSERVACAO,
    ENDERECAMENTO_ID,
    JUSTIFICATIVA_ID)
AS
Select
    P.CONTROLE,
    P.ESTABELECIMENTO_CODIGO,
    P.REMESSA,
    P.REMESSA_ACUMULADO_CONTROLE,
    P.PECA_CONJUNTO,
    P.LOCALIZACAO_CODIGO,
    P.PRODUTO_CODIGO,
    P.MODELO_CODIGO,
    P.COR_ID,
    P.TAMANHO,
    P.PERFIL,
    P.QUANTIDADE_PEDIDO,
    P.QUANTIDADE_PRODUCAO,
    P.QUANTIDADE_PRODUCAO_TMP,
    P.QUANTIDADE_SALDO,
    P.QUANTIDADE_ALTERN,
    P.QUANTIDADE_ALTERN_PRODUCAO,
    P.QUANTIDADE_ALTERN_PRODUCAO_TMP,
    P.QUANTIDADE_ALTERN_SALDO,
    P.SITUACAO,
    P.DATA_PRODUCAO, 
    P.HORA_PRODUCAO,
    P.OPERADOR_ID_PRODUCAO,
    P.PROGRAMACAO_ESTEIRA,
    P.ESTOQUE_ID,
    P.QUANTIDADE_SOBRA,
    P.QUANTIDADE_SOBRA_TMP ,
    P.LIB,
    P.ESTOQUE_ID_S_TRANSF,
    P.ESTOQUE_ID_E_TRANSF,
    P.VIA_ETIQUETA,
    P.OBSERVACAO,
    P.ENDERECAMENTO_ID,
    p.JUSTIFICATIVA_ID

from TBPEDIDO_ITEM_PROCESSADO P
;

CREATE TABLE TBPLACA_AVULSA (
    ID INTEGER NOT NULL,
    COR_ID INTEGER,
    DENSIDADE INTEGER,
    ESPESSURA INTEGER,
    LARGURA NUMERIC(15,4),
    COMPRIMENTO NUMERIC(15,4),
    QUANTIDADE NUMERIC(15,4),
    TRANSACAO_ID INTEGER,
    PRODUTO_ID INTEGER,
    GEREROU_PRODUTO INTEGER,
    DATAHORA TIMESTAMP,
    STATUS INTEGER,
    TALAO_ID INTEGER);

ALTER TABLE TBPLACA_AVULSA
ADD CONSTRAINT PK_TBPLACA_AVULSA
PRIMARY KEY (ID);

CREATE SEQUENCE GTBPLACA_AVULSA;

create 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);
end;

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

    produto_gerado = 0;

    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);

        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;

COMMENT ON TRIGGER TTBPLACA_AVULSA_B02I IS 'criar produto de placa';

UPDATE OR INSERT INTO TBREMESSA (ESTABELECIMENTO_CODIGO, NUMERO, FAMILIA_CODIGO, TURNO_CODIGO, DATA, USUARIO_CODIGO, TIPO, TONALIDADE, PROJECAO, OC, BLOQ, STATUS, REMESSA, AGRUPAMENTO_ID, FAMILIA_MP, REQUISICAO, DESCRICAO, DATA_BSC, DATAHORA, GP_ID, CONTROLE_TALAO, COMPONENTE, WEB, AMOSTRA, DATA_DISPONIBILIDADE, OBSERVACAO, EMPRESA_ID, DATA_PREVISAO, PERFIL, CLASSIFICACAO)
                         VALUES (1, 1, 12, NULL, '2020-04-01', 186, '1   ', '    ', '0   ', '0   ', '0   ', '1   ', 'RP01', 0, 0, '0   ', NULL, '2018-08-03 18:00:00', '2018-07-30 15:32:41', 27, '    ', '0   ', '2   ', '0   ', NULL, NULL, NULL, NULL, '1', ' ')
                       MATCHING (ESTABELECIMENTO_CODIGO, NUMERO);

UPDATE OR INSERT INTO TBTABELA_GENERICA (TABELA_ORIGEM, TABELA_DESTINO, TABELA_DESTINO_NIVEL, DESCRICAO)
                                 VALUES ('TBESTOQUE_TRANSACAO_ITEM', 'TBPLACA_AVULSA', 1, 'WEB22550 - Placas Avulsas do CD')
                               MATCHING (TABELA_ORIGEM, TABELA_DESTINO);
							   

CREATE OR ALTER trigger ttbplaca_avulsa_b03i for tbplaca_avulsa
active before insert position 3
AS
declare variable ITEM_PROCESSADO integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable MODELO_ID integer;
declare variable REMESSA_ID integer;
declare variable TALAO_ID integer;
declare variable TAMANHO integer;
declare variable QTD_PRODUCAO1 integer;
declare variable QTD_PRODUCAO2 integer;
declare variable QTD_PRODUCAO3 integer;
declare variable QTD_PRODUCAO4 integer;
declare variable COR_ID integer;
declare variable GP_ID integer;
declare variable UP_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable FAMILIA_ID integer;
declare variable PERFIL_SKU varchar(10);
declare variable chapas integer;
declare variable placas integer;
declare variable PLACA_POR_CHAPA integer;
declare variable ccusto varchar(20);
begin

    new.datahora = current_timestamp;

    :ITEM_PROCESSADO = gen_id(GERADOR1_ID,1);
    new.talao_id     = :ITEM_PROCESSADO;

    SELECT  first 1
        p.modelo_codigo as modelo_id,
        p.familia_codigo as familia_id,
        coalesce((select first 1 u.perfil from vwsku U where U.modelo_id = p.modelo_codigo and u.cor_id = p.cor_codigo),'') PERFIL_SKU,
        l.estabelecimento_codigo as ESTABELECIMENTO_ID,
        0 as TAMANHO,
        g.id as GP_ID,
        fn_parametro('SISTEMA.UP_TALAO_PLACA') as UP_ID,

        l.codigo as LOCALIZACAO_ID,
        p.cor_codigo as COR_ID,
        g.ccusto
    
    from tblocalizacao l, tbgp g, tbproduto p
    left join tbfamilia f on f.codigo = p.familia_codigo
    where p.codigo = new.produto_id
    and l.codigo =fn_parametro('SISTEMA.LOCALIZACAO_PLACAS')
    and g.id = fn_parametro('SISTEMA.GP_TALAO_PLACA')

    into
        :MODELO_ID,
        :FAMILIA_ID,
        :PERFIL_SKU,
        :ESTABELECIMENTO_ID,
        :TAMANHO,
        :GP_ID,
        :UP_ID,
        :LOCALIZACAO_ID,
        :COR_ID,
        :ccusto;

    modelo_id = coalesce(modelo_id, 0);

    if(modelo_id = 0)then
    begin
        exception "..." 'Dados do produto não encontrado, Prod. ID:'||coalesce(new.produto_id,0);
    end

    :qtd_producao1 = new.quantidade;
    :QTD_PRODUCAO2 = new.quantidade;
    :QTD_PRODUCAO3 = new.quantidade;
    :QTD_PRODUCAO4 = new.quantidade;

    REMESSA_ID      = 1;
    TALAO_ID        = new.id;

    placas = new.quantidade;
    PLACA_POR_CHAPA = FN_ARRENDONDAR(1.6 / new.comprimento , 0, 2);
    chapas = FN_ARRENDONDAR( new.quantidade / PLACA_POR_CHAPA , 0, 1);

    INSERT INTO TBREMESSA_ITEM_PROCESSADO (
        ESTABELECIMENTO_CODIGO,   
        FAMILIA_CODIGO,  
        REMESSA,
        CONTROLE,
        MATRIZ_CODIGO,
        MODELO_CODIGO,
        PRODUTO_CODIGO,
        TAMANHO,
        QUANTIDADE,
        SITUACAO,
        PERFIL,
        PROGRAMACAO_ESTEIRA,
        UP_ID,
        PROGRAMACAO_BOCA,
        PERCENTUAL_TALAO_EXTRA,
        CHAPAS,
        PLACAS,
        DENSIDADE,
        ESPESSURA,
        PLACA_LARGURA,
        PLACA_COMPRIMENTO,
        PLACA_POR_CHAPA,
        TOLERANCIA,
        CONSUMO_MEDIO,
        SOBRAS,
        PLACA_TAM_SOBRA,
        SOBRAS_,
        PLACAS_
    ) VALUES (        
        :ESTABELECIMENTO_ID, 
        :FAMILIA_ID,
        :REMESSA_ID,
        :TALAO_ID,
        0,
        :MODELO_ID,
        new.produto_id,
        :TAMANHO,
        new.QUANTIDADE,
        3,
        :PERFIL_SKU,
        :GP_ID,
        :UP_ID,
        1,
        0,
        :CHAPAS,
        :PLACAS,
        new.DENSIDADE,
        new.espessura,
        new.largura,
        new.comprimento,
        :PLACA_POR_CHAPA,
        0,
        0,
        0,
        0,
        0,
        0
    );


    INSERT INTO TBPEDIDO_ITEM_PROCESSADO (
        PEDIDO_ITEM_CONTROLE,
        CONTROLE,
        ESTABELECIMENTO_CODIGO,
        FAMILIA_CODIGO,
        MODELO_CODIGO,
        CLIENTE_CODIGO,
        PEDIDO,
        REMESSA,
        REMESSA_ACUMULADO_CONTROLE,
        TURNO_LIBERACAO,
        TURNO_PRODUCAO,
        ESTEIRA_LIBERACAO,
        ESTEIRA_PRODUCAO,
        SETOR_CODIGO,
        PRODUTO_CODIGO,
        EXPEDICAO_PRODUTO_CODIGO,
        DATA_PROCESSAMENTO,
        DATA_EXPEDICAO,
        DATA_LIBERACAO,
        DATA_PRODUCAO,
        HORA_EXPEDICAO,
        HORA_LIBERACAO,
        HORA_PRODUCAO,
        LOTE,
        TAMANHO,
        QUANTIDADE_PEDIDO,
        QUANTIDADE_PRODUCAO,
        QUANTIDADE_SALDO,
        SITUACAO,
        OPERADOR_ID_PRODUCAO,
        OPERADOR,
        PROGRAMACAO_CONTROLE,
        PROGRAMACAO_SEQUENCIA,
        PROGRAMACAO_TURNO,
        COR_ID,
        VOLUME,
        PECA_CONJUNTO,
        PROGRAMACAO_ESTEIRA,
        PROGRAMACAO_BOCA,
        VIA_ETIQUETA,
        LIB,
        LOCALIZACAO_CODIGO,
        REG_ESTOQUE,
        STATUS_PRODUCAO,
        AGRUPAMENTO_ID,
        COLETA_ID,
        ESTOQUE_ID,
        DATAHORA,
        QUANTIDADE_PRODUCAO_TMP,
        QUANTIDADE_ALTERN,
        QUANTIDADE_ALTERN_PRODUCAO,
        QUANTIDADE_ALTERN_SALDO,
        QUANTIDADE_ALTERN_PRODUCAO_TMP,
        QUANTIDADE_SOBRA_TMP,
        QUANTIDADE_SOBRA,
        ESTOQUE_ID_BAIXA,
        QUANTIDADE_BAIXA,
        TURNO,
        ACRESCIMO,
        TALAO_DESMEMBRAMENTO,
        ESTOQUE_ID_S_TRANSF,
        ESTOQUE_ID_E_TRANSF,
        MOTIVO_BAIXA,
        TIPO_BAIXA,
        CCUSTO_BAIXA,
        OBSERVACAO,
        FERRAMENTA_ID,
        ENDERECAMENTO_ID,
        FLAG_DATA,
        MOTIVO_BAIXA_ID,
        PERFIL

    )VALUES (
        0,
        :ITEM_PROCESSADO,
        :ESTABELECIMENTO_ID,
        0,
        :MODELO_ID,
        NULL,
        NULL,
        :REMESSA_ID,
        :TALAO_ID,
        NULL,
        1,
        NULL,
        NULL,
        NULL,
        new.PRODUTO_ID,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        :TAMANHO,
        :QTD_PRODUCAO1,
        :QTD_PRODUCAO2,
        :QTD_PRODUCAO3,
        1,
        NULL,
        NULL,
        0,
        0,
        0,
        :COR_ID,
        0,
        1,
        :GP_ID,
        1,
        0,
        '0',
        :LOCALIZACAO_ID,
        '0',
        '0',
        0,
        NULL,
        0,
        current_timestamp,
        iif(:FAMILIA_ID = 12, :QTD_PRODUCAO4 ,0),
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        1,
        0,
        NULL,
        NULL,
        NULL,
        '',
        '',
        '',
        NULL,
        NULL,
        NULL,
        0,
        0,
        :PERFIL_SKU
    );

    new.transacao_id = gen_id(GTBESTOQUE_TRANSACAO_ITEM,1);

    INSERT INTO TBESTOQUE_TRANSACAO_ITEM (
        ESTABELECIMENTO_CODIGO,
        LOCALIZACAO_CODIGO,
        PRODUTO_CODIGO,
        DATA, 
        CONTROLE, 
        DOCUMENTO, 
        REMESSA_ITEM_CONTROLE, 
        NFE_ITEM_CONTROLE, 
        NFS_ITEM_CONTROLE, 
        TRANSACAO_CONTROLE, 
        OPERACAO_CODIGO, 
        TIPO, 
        QUANTIDADE, 
        CONSUMO, 
        T01, 
        T02, 
        T03, 
        T04, 
        T05, 
        T06, 
        T07, 
        T08, 
        T09, 
        T10, 
        T11, 
        T12, 
        T13, 
        T14, 
        T15, 
        T16, 
        T17, 
        T18, 
        T19, 
        T20, 
        CUSTO_UNITARIO, 
        CUSTO_MEDIO, 
        DEFEITO_CODIGO, 
        DEFEITO_HORA, 
        USUARIO_CODIGO, 
        USUARIO_DATA, 
        ESTEIRA_CODIGO, 
        TURNO_CODIGO, 
        CENTRO_DE_CUSTO, 
        OBSERVACAO, 
        ESPUMACAO, 
        CLASSIFICACAO, 
        OPERADOR, 
        REVISAO_CONTROLE, 
        EMPRESA_CODIGO, 
        DATAHORA, 
        TABELA, 
        TABELA_ID, 
        TABELA_NIVEL, 
        ESTOQUE_TRANSACAO_REGRA_ID, 
        CONFERENCIA, 
        PECA_ID, 
        CONSUMO_CCUSTO, 
        MOTIVO_BAIXA_ID
        ) VALUES (
        :estabelecimento_id,
        :localizacao_id,
        new.produto_id,
        current_date, 
        new.transacao_id,
        new.talao_id,
        0, 
        0, 
        0, 
        0, 
        fn_parametro('SISTEMA.OPERACAO_ENTRADA_SOBRA'),
        'E',
        new.QUANTIDADE,
        '0', 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        NULL, 
        NULL, 
        fn_current_user_id(), 
        current_date, 
        0, 
        0, 
        :CCUSTO, 
        'ENTRADA DE PLACA DE BOJO AVULSA',
        '0', 
        0, 
        0, 
        0, 
        0, 
        current_timestamp, 
        'TBPLACA_AVULSA',
        new.id,
        1, 
        NULL, 
        0, 
        NULL, 
        '0', 
        0
        );

end;

COMMENT ON TRIGGER TTBPLACA_AVULSA_B03I IS 'gerar talao acumulado/detalhado e entrada no estoque';

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

    produto_gerado = 0;

    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;

CREATE OR ALTER trigger ttbplaca_avulsa_b03i for tbplaca_avulsa
active before insert position 3
AS
declare variable ITEM_PROCESSADO integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable MODELO_ID integer;
declare variable REMESSA_ID integer;
declare variable TALAO_ID integer;
declare variable TAMANHO integer;
declare variable QTD_PRODUCAO1 integer;
declare variable QTD_PRODUCAO2 integer;
declare variable QTD_PRODUCAO3 integer;
declare variable QTD_PRODUCAO4 integer;
declare variable COR_ID integer;
declare variable GP_ID integer;
declare variable UP_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable FAMILIA_ID integer;
declare variable PERFIL_SKU varchar(10);
declare variable chapas integer;
declare variable placas integer;
declare variable PLACA_POR_CHAPA integer;
declare variable ccusto varchar(20);
begin

    new.datahora = current_timestamp;

    :ITEM_PROCESSADO = gen_id(GERADOR1_ID,1);
    new.talao_id     = :ITEM_PROCESSADO;

    SELECT  first 1
        p.modelo_codigo as modelo_id,
        p.familia_codigo as familia_id,
        coalesce((select first 1 u.perfil from vwsku U where U.modelo_id = p.modelo_codigo and u.cor_id = p.cor_codigo),'') PERFIL_SKU,
        l.estabelecimento_codigo as ESTABELECIMENTO_ID,
        0 as TAMANHO,
        g.id as GP_ID,
        fn_parametro('SISTEMA.UP_TALAO_PLACA') as UP_ID,

        l.codigo as LOCALIZACAO_ID,
        p.cor_codigo as COR_ID,
        g.ccusto
    
    from tblocalizacao l, tbgp g, tbproduto p
    left join tbfamilia f on f.codigo = p.familia_codigo
    where p.codigo = new.produto_id
    and l.codigo =fn_parametro('SISTEMA.LOCALIZACAO_PLACAS')
    and g.id = fn_parametro('SISTEMA.GP_TALAO_PLACA')

    into
        :MODELO_ID,
        :FAMILIA_ID,
        :PERFIL_SKU,
        :ESTABELECIMENTO_ID,
        :TAMANHO,
        :GP_ID,
        :UP_ID,
        :LOCALIZACAO_ID,
        :COR_ID,
        :ccusto;

    modelo_id = coalesce(modelo_id, 0);

    if(modelo_id = 0)then
    begin
        exception "..." 'Dados do produto não encontrado, Prod. ID:'||coalesce(new.produto_id,0);
    end

    :qtd_producao1 = new.quantidade;
    :QTD_PRODUCAO2 = new.quantidade;
    :QTD_PRODUCAO3 = new.quantidade;
    :QTD_PRODUCAO4 = new.quantidade;

    REMESSA_ID      = 1;
    TALAO_ID        = new.id;

    placas = new.quantidade;
    PLACA_POR_CHAPA = FN_ARRENDONDAR(1.6 / new.comprimento , 0, 2);
    chapas = FN_ARRENDONDAR( new.quantidade / PLACA_POR_CHAPA , 0, 1);

    INSERT INTO TBREMESSA_ITEM_PROCESSADO (
        ESTABELECIMENTO_CODIGO,   
        FAMILIA_CODIGO,  
        REMESSA,
        CONTROLE,
        MATRIZ_CODIGO,
        MODELO_CODIGO,
        PRODUTO_CODIGO,
        TAMANHO,
        QUANTIDADE,
        SITUACAO,
        PERFIL,
        PROGRAMACAO_ESTEIRA,
        UP_ID,
        PROGRAMACAO_BOCA,
        PERCENTUAL_TALAO_EXTRA,
        CHAPAS,
        PLACAS,
        DENSIDADE,
        ESPESSURA,
        PLACA_LARGURA,
        PLACA_COMPRIMENTO,
        PLACA_POR_CHAPA,
        TOLERANCIA,
        CONSUMO_MEDIO,
        SOBRAS,
        PLACA_TAM_SOBRA,
        SOBRAS_,
        PLACAS_
    ) VALUES (        
        :ESTABELECIMENTO_ID, 
        :FAMILIA_ID,
        :REMESSA_ID,
        :TALAO_ID,
        0,
        :MODELO_ID,
        new.produto_id,
        :TAMANHO,
        new.QUANTIDADE,
        3,
        :PERFIL_SKU,
        :GP_ID,
        :UP_ID,
        1,
        0,
        :CHAPAS,
        :PLACAS,
        new.DENSIDADE,
        new.espessura,
        new.largura,
        new.comprimento,
        :PLACA_POR_CHAPA,
        0,
        0,
        0,
        0,
        0,
        0
    );


    INSERT INTO TBPEDIDO_ITEM_PROCESSADO (
        PEDIDO_ITEM_CONTROLE,
        CONTROLE,
        ESTABELECIMENTO_CODIGO,
        FAMILIA_CODIGO,
        MODELO_CODIGO,
        CLIENTE_CODIGO,
        PEDIDO,
        REMESSA,
        REMESSA_ACUMULADO_CONTROLE,
        TURNO_LIBERACAO,
        TURNO_PRODUCAO,
        ESTEIRA_LIBERACAO,
        ESTEIRA_PRODUCAO,
        SETOR_CODIGO,
        PRODUTO_CODIGO,
        EXPEDICAO_PRODUTO_CODIGO,
        DATA_PROCESSAMENTO,
        DATA_EXPEDICAO,
        DATA_LIBERACAO,
        DATA_PRODUCAO,
        HORA_EXPEDICAO,
        HORA_LIBERACAO,
        HORA_PRODUCAO,
        LOTE,
        TAMANHO,
        QUANTIDADE_PEDIDO,
        QUANTIDADE_PRODUCAO,
        QUANTIDADE_SALDO,
        SITUACAO,
        OPERADOR_ID_PRODUCAO,
        OPERADOR,
        PROGRAMACAO_CONTROLE,
        PROGRAMACAO_SEQUENCIA,
        PROGRAMACAO_TURNO,
        COR_ID,
        VOLUME,
        PECA_CONJUNTO,
        PROGRAMACAO_ESTEIRA,
        PROGRAMACAO_BOCA,
        VIA_ETIQUETA,
        LIB,
        LOCALIZACAO_CODIGO,
        REG_ESTOQUE,
        STATUS_PRODUCAO,
        AGRUPAMENTO_ID,
        COLETA_ID,
        ESTOQUE_ID,
        DATAHORA,
        QUANTIDADE_PRODUCAO_TMP,
        QUANTIDADE_ALTERN,
        QUANTIDADE_ALTERN_PRODUCAO,
        QUANTIDADE_ALTERN_SALDO,
        QUANTIDADE_ALTERN_PRODUCAO_TMP,
        QUANTIDADE_SOBRA_TMP,
        QUANTIDADE_SOBRA,
        ESTOQUE_ID_BAIXA,
        QUANTIDADE_BAIXA,
        TURNO,
        ACRESCIMO,
        TALAO_DESMEMBRAMENTO,
        ESTOQUE_ID_S_TRANSF,
        ESTOQUE_ID_E_TRANSF,
        MOTIVO_BAIXA,
        TIPO_BAIXA,
        CCUSTO_BAIXA,
        OBSERVACAO,
        FERRAMENTA_ID,
        ENDERECAMENTO_ID,
        FLAG_DATA,
        MOTIVO_BAIXA_ID,
        PERFIL

    )VALUES (
        0,
        :ITEM_PROCESSADO,
        :ESTABELECIMENTO_ID,
        0,
        :MODELO_ID,
        NULL,
        NULL,
        :REMESSA_ID,
        :TALAO_ID,
        NULL,
        1,
        NULL,
        NULL,
        NULL,
        new.PRODUTO_ID,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        :TAMANHO,
        :QTD_PRODUCAO1,
        :QTD_PRODUCAO2,
        :QTD_PRODUCAO3,
        1,
        NULL,
        NULL,
        0,
        0,
        0,
        :COR_ID,
        0,
        1,
        :GP_ID,
        1,
        0,
        '0',
        :LOCALIZACAO_ID,
        '0',
        '0',
        0,
        NULL,
        0,
        current_timestamp,
        iif(:FAMILIA_ID = 12, :QTD_PRODUCAO4 ,0),
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        1,
        0,
        NULL,
        NULL,
        NULL,
        '',
        '',
        '',
        NULL,
        NULL,
        NULL,
        0,
        0,
        :PERFIL_SKU
    );

    new.transacao_id = gen_id(GTBESTOQUE_TRANSACAO_ITEM,1);

    INSERT INTO TBESTOQUE_TRANSACAO_ITEM (
        ESTABELECIMENTO_CODIGO,
        LOCALIZACAO_CODIGO,
        PRODUTO_CODIGO,
        DATA, 
        CONTROLE, 
        DOCUMENTO, 
        REMESSA_ITEM_CONTROLE, 
        NFE_ITEM_CONTROLE, 
        NFS_ITEM_CONTROLE, 
        TRANSACAO_CONTROLE, 
        OPERACAO_CODIGO, 
        TIPO, 
        QUANTIDADE, 
        CONSUMO, 
        T01, 
        T02, 
        T03, 
        T04, 
        T05, 
        T06, 
        T07, 
        T08, 
        T09, 
        T10, 
        T11, 
        T12, 
        T13, 
        T14, 
        T15, 
        T16, 
        T17, 
        T18, 
        T19, 
        T20, 
        CUSTO_UNITARIO, 
        CUSTO_MEDIO, 
        DEFEITO_CODIGO, 
        DEFEITO_HORA, 
        USUARIO_CODIGO, 
        USUARIO_DATA, 
        ESTEIRA_CODIGO, 
        TURNO_CODIGO, 
        CENTRO_DE_CUSTO, 
        OBSERVACAO, 
        ESPUMACAO, 
        CLASSIFICACAO, 
        OPERADOR, 
        REVISAO_CONTROLE, 
        EMPRESA_CODIGO, 
        DATAHORA, 
        TABELA, 
        TABELA_ID, 
        TABELA_NIVEL, 
        ESTOQUE_TRANSACAO_REGRA_ID, 
        CONFERENCIA, 
        PECA_ID, 
        CONSUMO_CCUSTO, 
        MOTIVO_BAIXA_ID
        ) VALUES (
        :estabelecimento_id,
        :localizacao_id,
        new.produto_id,
        current_date, 
        new.transacao_id,
        0,
        new.talao_id, 
        0, 
        0, 
        0, 
        fn_parametro('SISTEMA.OPERACAO_ENTRADA_SOBRA'),
        'E',
        new.QUANTIDADE,
        '0', 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        0, 
        NULL, 
        NULL, 
        fn_current_user_id(), 
        current_date, 
        0, 
        0, 
        :CCUSTO, 
        'ENTRADA DE PLACA DE BOJO AVULSA',
        '0', 
        0, 
        0, 
        0, 
        0, 
        current_timestamp, 
        'TBPLACA_AVULSA',
        new.id,
        1, 
        NULL, 
        0, 
        NULL, 
        '0', 
        0
        );

end;

CREATE trigger ttbplaca_avulsa_b01d for tbplaca_avulsa
active before delete position 1
AS
begin
    delete from tbestoque_transacao_item i where i.controle = old.transacao_id;
    update tbpedido_item_processado p set p.quantidade_saldo = 0 where p.controle = old.talao_id;
end;

COMMENT ON TRIGGER TTBPLACA_AVULSA_B01D IS 'excluir o estoque';

DROP TRIGGER TTBPLACA_AVULSA_B01U;

CREATE OR ALTER trigger ttbplaca_avulsa_b03ui for tbplaca_avulsa
active before insert or update position 3
AS
declare variable ITEM_PROCESSADO integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable MODELO_ID integer;
declare variable REMESSA_ID integer;
declare variable TALAO_ID integer;
declare variable TAMANHO integer;
declare variable QTD_PRODUCAO1 integer;
declare variable QTD_PRODUCAO2 integer;
declare variable QTD_PRODUCAO3 integer;
declare variable QTD_PRODUCAO4 integer;
declare variable COR_ID integer;
declare variable GP_ID integer;
declare variable UP_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable FAMILIA_ID integer;
declare variable PERFIL_SKU varchar(10);
declare variable chapas integer;
declare variable placas integer;
declare variable PLACA_POR_CHAPA integer;
declare variable ccusto varchar(20);
declare variable old_produto integer;
begin

    old_produto = new.produto_id;

    if( inserting or new.produto_id is distinct from old.produto_id or new.quantidade is distinct from old.quantidade )then
    begin
    
        SELECT  first 1
            p.modelo_codigo as modelo_id,
            p.familia_codigo as familia_id,
            coalesce((select first 1 u.perfil from vwsku U where U.modelo_id = p.modelo_codigo and u.cor_id = p.cor_codigo),'') PERFIL_SKU,
            l.estabelecimento_codigo as ESTABELECIMENTO_ID,
            0 as TAMANHO,
            g.id as GP_ID,
            fn_parametro('SISTEMA.UP_TALAO_PLACA') as UP_ID,
    
            l.codigo as LOCALIZACAO_ID,
            p.cor_codigo as COR_ID,
            g.ccusto
        
        from tblocalizacao l, tbgp g, tbproduto p
        left join tbfamilia f on f.codigo = p.familia_codigo
        where p.codigo = new.produto_id
        and l.codigo =fn_parametro('SISTEMA.LOCALIZACAO_PLACAS')
        and g.id = fn_parametro('SISTEMA.GP_TALAO_PLACA')
    
        into
            :MODELO_ID,
            :FAMILIA_ID,
            :PERFIL_SKU,
            :ESTABELECIMENTO_ID,
            :TAMANHO,
            :GP_ID,
            :UP_ID,
            :LOCALIZACAO_ID,
            :COR_ID,
            :ccusto;
    
        modelo_id = coalesce(modelo_id, 0);
    
        if(modelo_id = 0)then
        begin
            exception "..." 'Dados do produto não encontrado, Prod. ID:'||coalesce(new.produto_id,0);
        end
    
        :qtd_producao1 = new.quantidade;
        :QTD_PRODUCAO2 = new.quantidade;
        :QTD_PRODUCAO3 = new.quantidade;
        :QTD_PRODUCAO4 = new.quantidade;
    
        REMESSA_ID      = 1;
        TALAO_ID        = new.id;
    
        placas = new.quantidade;
        PLACA_POR_CHAPA = FN_ARRENDONDAR(1.6 / new.comprimento , 0, 2);
        chapas = FN_ARRENDONDAR( new.quantidade / PLACA_POR_CHAPA , 0, 1);
    
        if(inserting)then
        begin
		
			:ITEM_PROCESSADO = gen_id(GERADOR1_ID,1);
			new.talao_id     = :ITEM_PROCESSADO;
		
            INSERT INTO TBREMESSA_ITEM_PROCESSADO (
                ESTABELECIMENTO_CODIGO,   
                FAMILIA_CODIGO,  
                REMESSA,
                CONTROLE,
                MATRIZ_CODIGO,
                MODELO_CODIGO,
                PRODUTO_CODIGO,
                TAMANHO,
                QUANTIDADE,
                SITUACAO,
                PERFIL,
                PROGRAMACAO_ESTEIRA,
                UP_ID,
                PROGRAMACAO_BOCA,
                PERCENTUAL_TALAO_EXTRA,
                CHAPAS,
                PLACAS,
                DENSIDADE,
                ESPESSURA,
                PLACA_LARGURA,
                PLACA_COMPRIMENTO,
                PLACA_POR_CHAPA,
                TOLERANCIA,
                CONSUMO_MEDIO,
                SOBRAS,
                PLACA_TAM_SOBRA,
                SOBRAS_,
                PLACAS_
            ) VALUES (        
                :ESTABELECIMENTO_ID, 
                :FAMILIA_ID,
                :REMESSA_ID,
                :TALAO_ID,
                0,
                :MODELO_ID,
                new.produto_id,
                :TAMANHO,
                new.QUANTIDADE,
                3,
                :PERFIL_SKU,
                :GP_ID,
                :UP_ID,
                1,
                0,
                :CHAPAS,
                :PLACAS,
                new.DENSIDADE,
                new.espessura,
                new.largura,
                new.comprimento,
                :PLACA_POR_CHAPA,
                0,
                0,
                0,
                0,
                0,
                0
            );
        
        
            INSERT INTO TBPEDIDO_ITEM_PROCESSADO (
                PEDIDO_ITEM_CONTROLE,
                CONTROLE,
                ESTABELECIMENTO_CODIGO,
                FAMILIA_CODIGO,
                MODELO_CODIGO,
                CLIENTE_CODIGO,
                PEDIDO,
                REMESSA,
                REMESSA_ACUMULADO_CONTROLE,
                TURNO_LIBERACAO,
                TURNO_PRODUCAO,
                ESTEIRA_LIBERACAO,
                ESTEIRA_PRODUCAO,
                SETOR_CODIGO,
                PRODUTO_CODIGO,
                EXPEDICAO_PRODUTO_CODIGO,
                DATA_PROCESSAMENTO,
                DATA_EXPEDICAO,
                DATA_LIBERACAO,
                DATA_PRODUCAO,
                HORA_EXPEDICAO,
                HORA_LIBERACAO,
                HORA_PRODUCAO,
                LOTE,
                TAMANHO,
                QUANTIDADE_PEDIDO,
                QUANTIDADE_PRODUCAO,
                QUANTIDADE_SALDO,
                SITUACAO,
                OPERADOR_ID_PRODUCAO,
                OPERADOR,
                PROGRAMACAO_CONTROLE,
                PROGRAMACAO_SEQUENCIA,
                PROGRAMACAO_TURNO,
                COR_ID,
                VOLUME,
                PECA_CONJUNTO,
                PROGRAMACAO_ESTEIRA,
                PROGRAMACAO_BOCA,
                VIA_ETIQUETA,
                LIB,
                LOCALIZACAO_CODIGO,
                REG_ESTOQUE,
                STATUS_PRODUCAO,
                AGRUPAMENTO_ID,
                COLETA_ID,
                ESTOQUE_ID,
                DATAHORA,
                QUANTIDADE_PRODUCAO_TMP,
                QUANTIDADE_ALTERN,
                QUANTIDADE_ALTERN_PRODUCAO,
                QUANTIDADE_ALTERN_SALDO,
                QUANTIDADE_ALTERN_PRODUCAO_TMP,
                QUANTIDADE_SOBRA_TMP,
                QUANTIDADE_SOBRA,
                ESTOQUE_ID_BAIXA,
                QUANTIDADE_BAIXA,
                TURNO,
                ACRESCIMO,
                TALAO_DESMEMBRAMENTO,
                ESTOQUE_ID_S_TRANSF,
                ESTOQUE_ID_E_TRANSF,
                MOTIVO_BAIXA,
                TIPO_BAIXA,
                CCUSTO_BAIXA,
                OBSERVACAO,
                FERRAMENTA_ID,
                ENDERECAMENTO_ID,
                FLAG_DATA,
                MOTIVO_BAIXA_ID,
                PERFIL
        
            )VALUES (
                0,
                :ITEM_PROCESSADO,
                :ESTABELECIMENTO_ID,
                0,
                :MODELO_ID,
                NULL,
                NULL,
                :REMESSA_ID,
                :TALAO_ID,
                NULL,
                1,
                NULL,
                NULL,
                NULL,
                new.PRODUTO_ID,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL,
                :TAMANHO,
                :QTD_PRODUCAO1,
                :QTD_PRODUCAO2,
                :QTD_PRODUCAO3,
                1,
                NULL,
                NULL,
                0,
                0,
                0,
                :COR_ID,
                0,
                1,
                :GP_ID,
                1,
                0,
                '0',
                :LOCALIZACAO_ID,
                '0',
                '0',
                0,
                NULL,
                0,
                current_timestamp,
                iif(:FAMILIA_ID = 12, :QTD_PRODUCAO4 ,0),
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                1,
                0,
                NULL,
                NULL,
                NULL,
                '',
                '',
                '',
                NULL,
                NULL,
                NULL,
                0,
                0,
                :PERFIL_SKU
            );
        end else
        begin
            update tbpedido_item_processado p set
                p.quantidade_saldo = new.quantidade,
                p.quantidade_pedido = new.quantidade,
                p.quantidade_producao = new.quantidade,
                p.QUANTIDADE_PRODUCAO_TMP = new.quantidade,
                p.produto_codigo = new.produto_id,
                p.cor_id = new.cor_id
            where p.controle = new.talao_id;

            placas = new.quantidade;
            PLACA_POR_CHAPA = FN_ARRENDONDAR(1.6 / new.comprimento , 0, 2);
            chapas = FN_ARRENDONDAR( new.quantidade / PLACA_POR_CHAPA , 0, 1);

            update TBREMESSA_ITEM_PROCESSADO y set
                y.produto_codigo = new.produto_id,
                y.quantidade = new.quantidade,
                y.placas = :placa_por_chapa,
                y.chapas = :chapas,
                y.placa_por_chapa = :placa_por_chapa,
                y.densidade = new.DENSIDADE,
                y.espessura = new.espessura,
                y.placa_largura = new.largura,
                y.placa_comprimento = new.comprimento
            where y.remessa = 1
            and y.controle = new.id;
        end

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

        new.transacao_id = gen_id(GTBESTOQUE_TRANSACAO_ITEM,1);
    
        INSERT INTO TBESTOQUE_TRANSACAO_ITEM (
            ESTABELECIMENTO_CODIGO,
            LOCALIZACAO_CODIGO,
            PRODUTO_CODIGO,
            DATA, 
            CONTROLE, 
            DOCUMENTO, 
            REMESSA_ITEM_CONTROLE, 
            NFE_ITEM_CONTROLE, 
            NFS_ITEM_CONTROLE, 
            TRANSACAO_CONTROLE, 
            OPERACAO_CODIGO, 
            TIPO, 
            QUANTIDADE, 
            CONSUMO, 
            T01, 
            T02, 
            T03, 
            T04, 
            T05, 
            T06, 
            T07, 
            T08, 
            T09, 
            T10, 
            T11, 
            T12, 
            T13, 
            T14, 
            T15, 
            T16, 
            T17, 
            T18, 
            T19, 
            T20, 
            CUSTO_UNITARIO, 
            CUSTO_MEDIO, 
            DEFEITO_CODIGO, 
            DEFEITO_HORA, 
            USUARIO_CODIGO, 
            USUARIO_DATA, 
            ESTEIRA_CODIGO, 
            TURNO_CODIGO, 
            CENTRO_DE_CUSTO, 
            OBSERVACAO, 
            ESPUMACAO, 
            CLASSIFICACAO, 
            OPERADOR, 
            REVISAO_CONTROLE, 
            EMPRESA_CODIGO, 
            DATAHORA, 
            TABELA, 
            TABELA_ID, 
            TABELA_NIVEL, 
            ESTOQUE_TRANSACAO_REGRA_ID, 
            CONFERENCIA, 
            PECA_ID, 
            CONSUMO_CCUSTO, 
            MOTIVO_BAIXA_ID
            ) VALUES (
            :estabelecimento_id,
            :localizacao_id,
            new.produto_id,
            current_date, 
            new.transacao_id,
            0,
            new.talao_id, 
            0, 
            0, 
            0, 
            fn_parametro('SISTEMA.OPERACAO_ENTRADA_SOBRA'),
            'E',
            new.QUANTIDADE,
            '0', 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            0, 
            NULL, 
            NULL, 
            fn_current_user_id(), 
            current_date, 
            0, 
            0, 
            :CCUSTO, 
            'ENTRADA DE PLACA DE BOJO AVULSA',
            '0', 
            0, 
            0, 
            0, 
            0, 
            current_timestamp, 
            'TBPLACA_AVULSA',
            new.id,
            1, 
            NULL, 
            0, 
            NULL, 
            '0', 
            0
            );
     end
end;

ALTER TABLE TBPLACA_AVULSA
    ADD DENSIDADE INTEGER;

