ALTER TABLE TBPLACA_AVULSA
    ADD ENDERECAMENTO_ID INTEGER;

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(chapas = 0)then
        begin
            chapas = 1;
        end

        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,
                new.ENDERECAMENTO_ID,
                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,
                p.enderecamento_id = new.enderecamento_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);

            if(chapas = 0)then
            begin
                chapas = 1;
            end

            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;

CREATE TABLE TBREQUISICAO_PLACA_BAIXA (
    ID INTEGER NOT NULL,
    REQUISICAO_PLACA_ID INTEGER,
    PECA_ID INTEGER,
    QUANTIDADE NUMERIC(15,2));

ALTER TABLE TBREQUISICAO_PLACA_BAIXA
ADD CONSTRAINT PK_TBREQUISICAO_PLACA_BAIXA
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREQUISICAO_PLACA_BAIXA;

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

ALTER TABLE TBREQUISICAO_PLACA_ALOCACAO
    ADD TRANSACAO_ID INTEGER;

ALTER TABLE TBREQUISICAO_PLACA_BAIXA
    ADD TRANSACAO_ID INTEGER;

