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;
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_,
                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 procedure SPC_COLETOR_ENDERECAMENTO2 (
    CODIGO_BARRAS varchar(100),
    CODIGO_BARRAS_ENDERECAMENTO varchar(100) = null)
returns (
    ID integer,
    TABELA varchar(50),
    FAMILIA_ID integer,
    PRODUTO_ID integer,
    TAMANHO integer,
    QUANTIDADE numeric(15,4),
    ENDERECAMENTO_ID integer,
    ENDERECAMENTO varchar(50),
    CAPACIDADE numeric(15,4),
    UTILIZADO numeric(15,4),
    DISPONIVEL numeric(15,4),
    MSG_ERRO varchar(1000),
    ERRO integer,
    STATUS_PECA integer)
as
declare variable ENDERECAMENTO_ID_PARAMETRO integer;
declare variable REMESSA integer;
declare variable TALAO integer;
declare variable ERRO_REMESSA varchar(200);
BEGIN
    
    ERRO_REMESSA = '';
    CODIGO_BARRAS = COALESCE(CODIGO_BARRAS,'');
    CODIGO_BARRAS_ENDERECAMENTO = COALESCE(CODIGO_BARRAS_ENDERECAMENTO,'');

    IF ( CODIGO_BARRAS = '' ) THEN
    BEGIN
        ERRO     = 1;
        MSG_ERRO = 'CODIGO DE BARRAS DA PECA E OBRIGATORIO.';
        suspend;
        exit;
    END



    IF ( CODIGO_BARRAS_ENDERECAMENTO <> '' ) THEN
    BEGIN
        IF ( SUBSTRING(CODIGO_BARRAS_ENDERECAMENTO FROM 1 FOR 1) <> 'E' ) THEN
        BEGIN
            ERRO     = 1;
            MSG_ERRO = 'CODIGO DE BARRAS DE ENDERECAMENTO INVALIDO.';
            suspend;
            exit;
        END

        ENDERECAMENTO_ID_PARAMETRO = REPLACE(CODIGO_BARRAS_ENDERECAMENTO,'E','');

        ENDERECAMENTO_ID = ENDERECAMENTO_ID_PARAMETRO;

    END



    IF ( SUBSTRING(CODIGO_BARRAS FROM 1 FOR 2) = 'P0' ) THEN
    BEGIN
        TABELA = 'TBREVISAO';   
        ID = REPLACE(CODIGO_BARRAS,'P','');

        SELECT FIRST 1
               R.PRODUTO_ID,
               R.TAMANHO,
               R.SALDO,
               r.status_saldo
          FROM TBREVISAO R
         WHERE R.ID = :ID
          INTO PRODUTO_ID,
               TAMANHO,
               QUANTIDADE,
               STATUS_PECA;

        ERRO_REMESSA = '*** Peca:'||ID||', Erro: ';
    END
    ELSE
    BEGIN

        IF ( SUBSTRING(CODIGO_BARRAS FROM 1 FOR 2) = 'RD' ) THEN
        BEGIN
            TABELA = 'VWREMESSA_TALAO_DETALHE';   
            ID = REPLACE(CODIGO_BARRAS,'RD','');
    
            SELECT FIRST 1
                   D.PRODUTO_ID,
                   D.TAMANHO,
                   D.QUANTIDADE_SALDO,
                   d.status,
                   d.remessa_id,
                   d.remessa_talao_id
              FROM VWREMESSA_TALAO_DETALHE D
             WHERE D.ID = :ID
              INTO PRODUTO_ID,
                   TAMANHO,
                   QUANTIDADE,
                   STATUS_PECA,
                   REMESSA,
                   TALAO;

             if(STATUS_PECA <> 3)then
             begin
                STATUS_PECA = 0;
             end else
             begin
                STATUS_PECA = 1;
             end

             ERRO_REMESSA = '*** Remessa:'||REMESSA||', Talao:'||TALAO||', Erro: ';

        END
        ELSE
        BEGIN
            TABELA  = 'VWREMESSA_TALAO';
            REMESSA = substring(CODIGO_BARRAS from 1 for 6);
            TALAO   = substring(CODIGO_BARRAS from 7 for 4);

            SELECT FIRST 1
                   D.id,
                   D.PRODUTO_ID,
                   D.TAMANHO,
                   D.QUANTIDADE_SALDO,
                   d.status
              FROM VWREMESSA_TALAO_DETALHE D
             WHERE D.remessa_id = :REMESSA
              and d.remessa_talao_id = :TALAO
              INTO ID,
                   PRODUTO_ID,
                   TAMANHO,
                   QUANTIDADE,
                   STATUS_PECA;

             ERRO_REMESSA = '*** Remessa:'||REMESSA||', Talao:'||TALAO||', Erro: ';

             if(STATUS_PECA < 3)then
             begin
                ERRO     = 1;
                MSG_ERRO = ERRO_REMESSA||'PECA NAO FOI PRODUZIDA.';
             end

             if(STATUS_PECA > 3)then
             begin
                ERRO     = 1;
                MSG_ERRO = ERRO_REMESSA||'PECA ENCERRADA.';
             end

             if(STATUS_PECA <> 3)then
             begin
                STATUS_PECA = 0;
             end else
             begin
                STATUS_PECA = 1;
             end

        END
    END

    IF ( PRODUTO_ID IS NULL ) THEN
    BEGIN
        ERRO     = 1;
        MSG_ERRO = ERRO_REMESSA||'NENHUMA PECA ENCONTRADA PARA ESTE CODIGO DE BARRAS.';
        suspend;
        exit;
    END

    IF ( COALESCE(QUANTIDADE,0) <= 0 ) THEN
    BEGIN
--        EXCEPTION "..." 'PECA NAO POSSUI SALDO DISPONIVEL PARA ENDERECAR.';
    END

    TAMANHO = COALESCE(TAMANHO,0);

    FAMILIA_ID = COALESCE((SELECT FIRST 1 FAMILIA_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = :PRODUTO_ID),0);

    IF ( FAMILIA_ID = 0 ) THEN
    BEGIN
        ERRO     = 1;
        MSG_ERRO = ERRO_REMESSA||'FAMILIA DE PRODUTO INVALIDA.';
        suspend;
        exit;
    END


    IF ( NOT COALESCE(ENDERECAMENTO_ID,0) > 0 ) THEN
    BEGIN

    
        SELECT FIRST 1
               X.ID ENDERECAMENTO_ID,
               X.GRUPO||'-'||X.SUBGRUPO ENDERECAMENTO,
               X.CAPACIDADE,
               X.UTILIZADO,
               X.CAPACIDADE-X.UTILIZADO DISPONIVEL
        FROM (
            SELECT E.ID,
                   E.GRUPO,
                   E.SUBGRUPO,
                   E.CAPACIDADE,
    
                   CASE :TABELA
                   WHEN 'TBREVISAO' THEN
                       COALESCE((SELECT SUM(R.SALDO)
                                   FROM TBREVISAO R, TBREVISAO_OB RO
                                  WHERE R.ENDERECAMENTO_ID = E.ID
                                    AND R.STATUS_SALDO     = '1'
                                    AND RO.NFE_ID          = R.NFE_ID
                                    AND RO.EMPRESA_ID      = R.EMPRESA_ID
                                    AND RO.OB              = R.OB
                                    AND RO.STATUS         IN ('0','1')
                                    AND R.RESULTADO       IN ('P','R','I')
                                    AND R.ID              <> :ID),0.0000)
                   WHEN 'VWREMESSA_TALAO_DETALHE' THEN
                       COALESCE((SELECT SUM(D.QUANTIDADE_SALDO)
                                   FROM VWREMESSA_TALAO_DETALHE D
                                  WHERE D.ENDERECAMENTO_ID = E.ID
                                    AND D.QUANTIDADE_SALDO > 0
                                    AND D.STATUS          IN (2,3)
                                    AND D.ID              <> :ID),0.0000)
                   WHEN 'VWREMESSA_TALAO' THEN
                       COALESCE((SELECT SUM(D.QUANTIDADE_SALDO)
                                   FROM vwremessa_talao_detalhe D
                                  WHERE D.ENDERECAMENTO_ID = E.ID
                                    AND D.QUANTIDADE_SALDO > 0
                                    AND D.STATUS          IN (2,3)
                                    AND D.ID              <> :ID),0.0000)
                   ELSE 0.0000 END UTILIZADO
              FROM TBENDERECAMENTO E,
                   TBENDERECAMENTO_PRODUTO EP
             WHERE EP.ENDERECAMENTO_ID = E.ID
               AND EP.PRODUTO_ID       = :PRODUTO_ID
               AND iif(:TABELA = 'VWREMESSA_TALAO', true, EP.TAMANHO = :TAMANHO)
               AND IIF(:ENDERECAMENTO_ID_PARAMETRO > 0,E.ID = :ENDERECAMENTO_ID_PARAMETRO, TRUE)

          ORDER BY E.GRUPO,E.SUBGRUPO) X
        WHERE X.CAPACIDADE-X.UTILIZADO >= :QUANTIDADE
        INTO
            ENDERECAMENTO_ID,
            ENDERECAMENTO,
            CAPACIDADE,
            UTILIZADO,
            DISPONIVEL;
    END


    IF ( NOT ENDERECAMENTO_ID > 0 AND CODIGO_BARRAS_ENDERECAMENTO = '' ) THEN
    BEGIN

        SELECT
            FIRST 1
            E.ID,
            E.GRUPO||'-'||E.SUBGRUPO
        FROM
            TBENDERECAMENTO E
        WHERE
            E.FAMILIA_ID = :FAMILIA_ID
        ORDER BY E.GRUPO DESC, E.SUBGRUPO DESC
        INTO ENDERECAMENTO_ID,
             ENDERECAMENTO;
    END

    IF ( COALESCE(ENDERECAMENTO_ID,0) = 0 ) THEN
    BEGIN
        ERRO     = 1;
        MSG_ERRO = ERRO_REMESSA||'ENDERECAMENTO INVALIDO.';
        suspend;
        exit;
    END

    SUSPEND;
end
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SP_REALOCAR_PECA (
    I_PECA varchar(20),
    I_ENDERECAMENTO varchar(20))
returns (
    RETORNO varchar(1000),
    RET_ERRO integer)
as
declare variable ID integer;
declare variable TABELA varchar(50);
declare variable FAMILIA_ID integer;
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable QUANTIDADE numeric(18,4);
declare variable ENDERECAMENTO_ID integer;
declare variable ENDERECAMENTO varchar(50);
declare variable CAPACIDADE numeric(18,4);
declare variable UTILIZADO numeric(18,4);
declare variable DISPONIVEL numeric(18,4);
declare variable MSG_ERRO varchar(1000);
declare variable ERRO integer;
declare variable ENCONTRADA integer;
begin

  ENCONTRADA = 0;

  for
    Select FIRST 1
        ID,
        TABELA,
        FAMILIA_ID,
        PRODUTO_ID,
        TAMANHO,
        QUANTIDADE,
        ENDERECAMENTO_ID,
        ENDERECAMENTO,
        CAPACIDADE,
        UTILIZADO,
        DISPONIVEL,
        MSG_ERRO,
        ERRO
    From SPC_COLETOR_ENDERECAMENTO2(:I_PECA, :I_ENDERECAMENTO)
  into
    ID,
    TABELA,
    FAMILIA_ID,
    PRODUTO_ID,
    TAMANHO,
    QUANTIDADE,
    ENDERECAMENTO_ID,
    ENDERECAMENTO,
    CAPACIDADE,
    UTILIZADO,
    DISPONIVEL,
    MSG_ERRO,
    ERRO
  do begin
    ENCONTRADA = 1;

    if(ERRO = 1)then
    begin
      RET_ERRO = 1;
      RETORNO = MSG_ERRO;
    end else
    begin
        RET_ERRO = 0;

        if(TABELA = 'TBREVISAO')then
        begin
            in autonomous transaction
            do begin
                update TBREVISAO  r set r.enderecamento_id = :ENDERECAMENTO_ID where r.id = :ID;
            end
        end

        if(TABELA = 'VWREMESSA_TALAO_DETALHE')then
        begin
            in autonomous transaction
            do begin
                update VWREMESSA_TALAO_DETALHE r set r.enderecamento_id = :ENDERECAMENTO_ID where r.id = :ID;
            end
        end

        RETORNO = 'COLETADO Peça:'||:I_PECA;

        if(TABELA = 'VWREMESSA_TALAO')then
        begin
            in autonomous transaction
            do begin
                update VWREMESSA_TALAO_DETALHE r set r.enderecamento_id = :ENDERECAMENTO_ID where r.id = :ID;
            end

            RET_ERRO = 0;
            RETORNO =  '*  COLETADO Peça:'||:I_PECA||', E:'||:ENDERECAMENTO_ID||', ID:'||:ID;
        end

    end
  end

  if(ENCONTRADA = 0)then
  begin
    RET_ERRO = 1;
    RETORNO = '*** Erro: Peça:'||:I_PECA||' não encontrada!';
  end

  suspend;
end
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_REALOCAR_PECA (
    I_PECA integer,
    I_ENDERECAMENTO integer)
returns varchar(1000)
AS
declare variable id integer;
declare variable tabela varchar(50);
declare variable familia_id integer;
declare variable produto_id integer;
declare variable tamanho integer;
declare variable quantidade numeric(18,4);
declare variable enderecamento_id integer;
declare variable enderecamento varchar(50);
declare variable capacidade numeric(18,4);
declare variable utilizado numeric(18,4);
declare variable disponivel numeric(18,4);
declare variable msg_erro varchar(1000);
declare variable erro integer;
declare variable retorno varchar(1000);
declare variable encontrada integer;
begin

  ENCONTRADA = 0;

  for
    Select FIRST 1
        ID,
        TABELA,
        FAMILIA_ID,
        PRODUTO_ID,
        TAMANHO,
        QUANTIDADE,
        ENDERECAMENTO_ID,
        ENDERECAMENTO,
        CAPACIDADE,
        UTILIZADO,
        DISPONIVEL,
        MSG_ERRO,
        ERRO
    From SPC_COLETOR_ENDERECAMENTO2(:I_PECA, :I_ENDERECAMENTO)
  into
    ID,
    TABELA,
    FAMILIA_ID,
    PRODUTO_ID,
    TAMANHO,
    QUANTIDADE,
    ENDERECAMENTO_ID,
    ENDERECAMENTO,
    CAPACIDADE,
    UTILIZADO,
    DISPONIVEL,
    MSG_ERRO,
    ERRO
  do begin
    ENCONTRADA = 1;

    if(ERRO = 1)then
    begin
      RETORNO = MSG_ERRO;
    end else
    begin

        if(TABELA = 'TBREVISAO')then
        begin
            update TBREVISAO  r set r.enderecamento_id = :ENDERECAMENTO_ID where r.id = :ID;
        end

        if(TABELA = 'VWREMESSA_TALAO_DETALHE')then
        begin
            update VWREMESSA_TALAO_DETALHE r set r.enderecamento_id = :ENDERECAMENTO_ID where r.id = :ID;
        end

        RETORNO = 'COLETADO Peça:'||:I_PECA;

    end
  end

  if(ENCONTRADA = 0)then
  begin
    RETORNO = '*** Erro: Peça:'||:I_PECA||' não encontrada!';
  end

  return RETORNO;
end
^

SET TERM ; ^


