CREATE GENERATOR GTBTALOES_AVULSOS_PLACA;

CREATE TABLE TBTALOES_AVULSOS_PLACA (
    ID          INTEGER NOT NULL,
    REMESSA_ID  INTEGER,
    PERFIL_UP   VARCHAR(10),
    ANO         INTEGER,
    MES         INTEGER,
    GP_ID       INTEGER,
    UP_ID       INTEGER
);

ALTER TABLE TBTALOES_AVULSOS_PLACA ADD CONSTRAINT PK_TBTALOES_AVULSOS_PLACA PRIMARY KEY (ID);
CREATE INDEX ITBTALOES_AVULSOS_PLACA_IDX1 ON TBTALOES_AVULSOS_PLACA (REMESSA_ID);

ALTER TABLE TBPLACA_AVULSA
    ADD REMESSA_ID INTEGER;

ALTER TABLE TBPLACA_AVULSA
    ADD TALAO_CONTROLE INTEGER;

SET TERM ^ ;

CREATE OR ALTER trigger ttbtaloes_avulsos_placa_b01i for tbtaloes_avulsos_placa
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbtaloes_avulsos_placa,1);
end
^

SET TERM ; ^

CREATE INDEX TTBPLACA_AVULSA_01 ON TBPLACA_AVULSA (REMESSA_ID);

SET TERM ^ ;

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;
declare variable ano integer;
declare variable mes integer;
declare variable PERFIL_UP varchar(20);
declare variable ABREVGP varchar(20);
declare variable nova_remessa 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
        
            ---------------------------------------------------------------------------------------------
            ---------------------------------------------------------------------------------------------
                ANO = extract(year from current_timestamp);
                MES = extract(month from current_timestamp);

                select
                    g.familia_id,
                    p.id as PERFIL,
                    FN_REPLACE(substring(g.descricao from 1 for 3),'.|-|1|2|3|4|5|6|7||9|0','') as ABREVGP
                from TBGP_UP s, tbgp g, tbup u, tbperfil p, tbfamilia f
                where g.id = :gp_id
                    and g.id = s.gp_id
                    and s.up_id = u.id
                    and u.perfil = p.id
                    and p.tabela = 'UP'
                    and u.id = :up_id
                    and f.codigo = g.familia_id
                into FAMILIA_ID, PERFIL_UP, ABREVGP;
            
                nova_remessa =  coalesce((select first 1 s.remessa_id from TBTALOES_AVULSOS_PLACA s, tbremessa r where r.numero = s.remessa_id and s.ANO = :ANO and s.MES = :MES and s.gp_id = :gp_id and s.up_id = :up_id),0);
            
                if(nova_remessa = 0)then
                begin
                    nova_remessa = GEN_ID(GTBREMESSA,1);
            
                    INSERT INTO TBTALOES_AVULSOS_PLACA (REMESSA_ID, ANO, MES, GP_ID, PERFIL_UP, UP_ID) VALUES (:nova_remessa, :ANO, :MES, :gp_id, :PERFIL_UP, :up_id);
            
                    --########################## - remessa - ###############################
                    INSERT INTO TBREMESSA (
                        NUMERO,
                        ESTABELECIMENTO_CODIGO,
                        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 (
                        :nova_remessa,
                        :ESTABELECIMENTO_ID,
                        :FAMILIA_ID,
                        NULL,
                        '01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4),
                        fn_current_user_id(),
                        '1',
                        '',
                        '0',
                        '0',
                        '0',
                        '1',
                        :ABREVGP||'_'||lpad(:ano, 4)||lpad(:mes, 2),
                        0,
                        0,
                        '0',
                        NULL,
                        fn_start_of_month('01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4)),
                        fn_start_of_month('01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4)),
                        :gp_id,
                        '',
                        '0',
                        '1',
                        '0',
                        NULL,
                        '',
                        0,
                        NULL,
                        '1',
                        ''
                    );
                end
            
                if(nova_remessa = 0)then
                begin
                  exception "..." 'Erro ao gerar remessa.';
                end
            
                :TALAO_ID = coalesce((select max(coalesce(t.TALAO_CONTROLE,0)) from TBPLACA_AVULSA t where t.remessa_id = :nova_remessa),0) + 1;

                new.TALAO_CONTROLE = TALAO_ID;
                new.remessa_id = :nova_remessa;

                if(TALAO_ID = 0)then
                begin
                  exception "..." 'Erro ao gerar talão.';
                end
            ---------------------------------------------------------------------------------------------
            ---------------------------------------------------------------------------------------------

            :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_,
                enderecamento_id
            ) 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,
                new.enderecamento_id
            );
        
        
            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
            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', 
            new.QUANTIDADE,
            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
^

SET TERM ; ^

SET TERM ^ ;

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;
declare variable ano integer;
declare variable mes integer;
declare variable PERFIL_UP varchar(20);
declare variable ABREVGP varchar(20);
declare variable nova_remessa 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
        
            ---------------------------------------------------------------------------------------------
            ---------------------------------------------------------------------------------------------
                ANO = extract(year from current_timestamp);
                MES = extract(month from current_timestamp);

                select
                    g.familia_id,
                    p.id as PERFIL,
                    FN_REPLACE(substring(g.descricao from 1 for 3),'.|-|1|2|3|4|5|6|7||9|0','') as ABREVGP
                from TBGP_UP s, tbgp g, tbup u, tbperfil p, tbfamilia f
                where g.id = :gp_id
                    and g.id = s.gp_id
                    and s.up_id = u.id
                    and u.perfil = p.id
                    and p.tabela = 'UP'
                    and u.id = :up_id
                    and f.codigo = g.familia_id
                into FAMILIA_ID, PERFIL_UP, ABREVGP;
            
                nova_remessa =  coalesce((select first 1 s.remessa_id from TBTALOES_AVULSOS_PLACA s, tbremessa r where r.numero = s.remessa_id and s.ANO = :ANO and s.MES = :MES and s.gp_id = :gp_id and s.up_id = :up_id),0);
            
                if(nova_remessa = 0)then
                begin
                    nova_remessa = GEN_ID(GTBREMESSA,1);
            
                    INSERT INTO TBTALOES_AVULSOS_PLACA (REMESSA_ID, ANO, MES, GP_ID, PERFIL_UP, UP_ID) VALUES (:nova_remessa, :ANO, :MES, :gp_id, :PERFIL_UP, :up_id);
            
                    --########################## - remessa - ###############################
                    INSERT INTO TBREMESSA (
                        NUMERO,
                        ESTABELECIMENTO_CODIGO,
                        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 (
                        :nova_remessa,
                        :ESTABELECIMENTO_ID,
                        :FAMILIA_ID,
                        NULL,
                        '01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4),
                        fn_current_user_id(),
                        '1',
                        '',
                        '0',
                        '0',
                        '0',
                        '1',
                        :ABREVGP||'_'||lpad(:ano, 4)||lpad(:mes, 2),
                        0,
                        0,
                        '0',
                        NULL,
                        fn_start_of_month('01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4)),
                        fn_start_of_month('01.'||lpad(:mes, 2)||'.'||lpad(:ano, 4)),
                        :gp_id,
                        '',
                        '0',
                        '1',
                        '0',
                        NULL,
                        '',
                        0,
                        NULL,
                        '1',
                        ''
                    );
                end
            
                if(nova_remessa = 0)then
                begin
                  exception "..." 'Erro ao gerar remessa.';
                end
            
                :TALAO_ID = coalesce((select max(coalesce(t.TALAO_CONTROLE,0)) from TBPLACA_AVULSA t where t.remessa_id = :nova_remessa),0) + 1;

                new.TALAO_CONTROLE = TALAO_ID;
                new.remessa_id = :nova_remessa;

                if(TALAO_ID = 0)then
                begin
                  exception "..." 'Erro ao gerar talão.';
                end

                REMESSA_ID = nova_remessa;
            ---------------------------------------------------------------------------------------------
            ---------------------------------------------------------------------------------------------

            :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_,
                enderecamento_id
            ) 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,
                new.enderecamento_id
            );
        
        
            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
            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', 
            new.QUANTIDADE,
            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
^

SET TERM ; ^

