SET TERM ^ ;

CREATE OR ALTER procedure SPU_TROCAR_FERRAMENTA_LINHA (
    REMESSA_ID integer,
    TALAO_ID integer,
    FERRAMENTA_ID integer)
returns (
    S_OLD_FERRAMENTA integer,
    S_NEW_FERRAMENTA integer,
    S_PROGRAMACAO_ID integer,
    S_MODELO_ID integer,
    S_COR_ID integer,
    S_TAMANHO integer,
    S_TROCA integer)
as
declare variable GP_ID integer;
declare variable UP_ID integer;
declare variable ESTACAO integer;
declare variable OLD_FERRAMENTA_ID integer;
declare variable DATA_INICIO_TALAO timestamp;
declare variable PRODUTO_ID integer;
declare variable MODELO_ID integer;
declare variable COR_ID integer;
declare variable TAMANHO integer;
declare variable PROGRAMACAO_ID_ITEM integer;
declare variable LINHA_ID integer;
declare variable MATRIZ_ID integer;
declare variable TAMANHO_LINHA integer;
declare variable CONTINUAR_TROCA integer;
begin

    CONTINUAR_TROCA = 1;

    FOR
        select first 1
        
            S.gp_id,
            S.up_id,
            S.estacao,
            S.ferramenta_id,
            S.datahora_inicio

        FROM TBPROGRAMACAO S
        WHERE S.tabela_id = :TALAO_ID
        AND S.remessa_id = :REMESSA_ID
        AND S.tipo = 'A'
    INTO
        :GP_ID,
        :UP_ID,
        :ESTACAO,
        :OLD_FERRAMENTA_ID,
        :DATA_INICIO_TALAO
    DO BEGIN

        FOR
            select

                S.id,
                s.ferramenta_id,
                M.codigo,
                P.cor_codigo,
                S.produto_id,
                S.tamanho
    
            FROM TBPROGRAMACAO S, TBMODELO M, tbproduto P
            WHERE S.gp_id           = :GP_ID
            AND S.up_id             = :UP_ID
            AND S.estacao           = :ESTACAO
            AND S.datahora_inicio  >= :DATA_INICIO_TALAO
            AND S.tipo              = 'A'
            AND M.codigo            = P.modelo_codigo
            AND P.codigo            = S.produto_id
            AND S.STATUS            IN ('0','1')
            AND NOT (S.STATUS = 1 AND S.STATUS_REQUISICAO = 1)

            order by s.datahora_inicio ascending

        INTO
            :PROGRAMACAO_ID_ITEM,
            :OLD_FERRAMENTA_ID,
            :MODELO_ID,
            :COR_ID,
            :PRODUTO_ID,
            :TAMANHO
        DO BEGIN

            S_OLD_FERRAMENTA = OLD_FERRAMENTA_ID;
            S_NEW_FERRAMENTA = FERRAMENTA_ID;
            S_PROGRAMACAO_ID = PROGRAMACAO_ID_ITEM;
            S_MODELO_ID      = MODELO_ID;
            S_COR_ID         = COR_ID;
            S_TAMANHO        = TAMANHO;

            if(CONTINUAR_TROCA = 1)then
            begin
                if(FN_FERRAMENTA_COMPARAR(:FERRAMENTA_ID, :OLD_FERRAMENTA_ID) = 1)then
                begin
                    
                    UPDATE TBPROGRAMACAO P SET P.FERRAMENTA_ID = :FERRAMENTA_ID WHERE ID = :PROGRAMACAO_ID_ITEM;

                    S_TROCA = 1;
                    suspend;
                end else
                begin

                    CONTINUAR_TROCA = 0;

                    S_TROCA = 0;
                    suspend;
                end
            end

        END

    END

end
^

SET TERM ; ^

