
CREATE OR ALTER trigger tbprogramacao_bu5 for tbprogramacao
active before update position 0
AS
begin

    if(coalesce(NEW.ferramenta_id,0) > 0)then
    begin
        if((old.status = 1 and new.status = 2) or (old.status = 0 and new.status = 2) )then
        begin
            INSERT INTO TBPROGRAMACAO_REGISTRO (PROGRAMACAO_ID, DATAHORA, STATUS, OPERADOR_ID, JUSTIFICATIVA_ID, REQUISICAO_ID, ESTACAO_ID)
                            VALUES (new.id, current_timestamp, 0 , NEW.operador_id,NEW.justificativa_id, NEW.requisicao_id, NEW.estacao);
    
            INSERT INTO
                    TBFERRAMENTARIA_HISTORICO
                    (
                        FERRAMENTA_ID,
                        STATUS,
                        OPERADOR_ID,
                        GP_ID,
                        UP_ID,
                        ESTACAO,
                        MOTIVO_PARADA,
                        TALAO_ID
                    )
                    
                    VALUES (
                        new.ferramenta_id,
                        'I',
                        new.operador_id,
                        new.gp_id,
                        new.up_id,
                        new.estacao,
                        new.justificativa_id,
                        new.tabela_id
                    );
        end
    
        if(OLD.status is distinct from new.status and new.status = 3)then
        begin
            INSERT INTO TBPROGRAMACAO_REGISTRO (PROGRAMACAO_ID, DATAHORA, STATUS, OPERADOR_ID, JUSTIFICATIVA_ID, REQUISICAO_ID, ESTACAO_ID)
                            VALUES (new.id, current_timestamp, 2 , NEW.operador_id,NEW.justificativa_id, NEW.requisicao_id, NEW.estacao);
            INSERT INTO
                    TBFERRAMENTARIA_HISTORICO
                    (
                        FERRAMENTA_ID,
                        STATUS,
                        OPERADOR_ID,
                        GP_ID,
                        UP_ID,
                        ESTACAO,
                        MOTIVO_PARADA,
                        TALAO_ID
                    )
                    
                    VALUES (
                        new.ferramenta_id,
                        'F',
                        new.operador_id,
                        new.gp_id,
                        new.up_id,
                        new.estacao,
                        new.justificativa_id,
                        new.tabela_id
                    );
        end
    
        if(old.status = 2 and new.status = 1)then
        begin
            INSERT INTO TBPROGRAMACAO_REGISTRO (PROGRAMACAO_ID, DATAHORA, STATUS, OPERADOR_ID, JUSTIFICATIVA_ID, REQUISICAO_ID, ESTACAO_ID)
                            VALUES (new.id, current_timestamp, 1 , NEW.operador_id,NEW.justificativa_id, NEW.requisicao_id, NEW.estacao);
            INSERT INTO
                    TBFERRAMENTARIA_HISTORICO
                    (
                        FERRAMENTA_ID,
                        STATUS,
                        OPERADOR_ID,
                        GP_ID,
                        UP_ID,
                        ESTACAO,
                        MOTIVO_PARADA,
                        TALAO_ID
                    )
                    
                    VALUES (
                        new.ferramenta_id,
                        'P',
                        new.operador_id,
                        new.gp_id,
                        new.up_id,
                        new.estacao,
                        new.justificativa_id,
                        new.tabela_id
                    );
        end
    
        if(old.status = 3 and new.status = 1)then
        begin
            INSERT INTO TBPROGRAMACAO_REGISTRO (PROGRAMACAO_ID, DATAHORA, STATUS, OPERADOR_ID, JUSTIFICATIVA_ID, REQUISICAO_ID, ESTACAO_ID)
                            VALUES (new.id, current_timestamp, 1 , NEW.operador_id,NEW.justificativa_id, NEW.requisicao_id, NEW.estacao);
        end

        if(old.status = 2 and new.status = 0)then
        begin
            INSERT INTO TBPROGRAMACAO_REGISTRO (PROGRAMACAO_ID, DATAHORA, STATUS, OPERADOR_ID, JUSTIFICATIVA_ID, REQUISICAO_ID, ESTACAO_ID)
                            VALUES (new.id, current_timestamp, 1 , NEW.operador_id,NEW.justificativa_id, NEW.requisicao_id, NEW.estacao);
        end
        
    end

end;

CREATE OR ALTER trigger ttbprogramacao_b5u for tbprogramacao
active before update position 5
AS
begin

    IF ( NEW.FERRAMENTA_ID > 0 AND OLD.STATUS IS distinct FROM NEW.status AND NEW.STATUS = '3' ) THEN
    BEGIN

        EXECUTE PROCEDURE SPI_EMAIL(
            'emersoncoelho@delfa.com.br',
            'GC - Talao finalizado',
            ' Programacao ID :' || new.ID      || F_BREAK_LINE(1) ||
            ' GP ID :'          || new.GP_ID   || F_BREAK_LINE(1) ||
            ' UP ID :'          || new.UP_ID   || F_BREAK_LINE(1) ||
            ' ESTACAO :'        || NEW.ESTACAO  
        );

        UPDATE OR INSERT INTO TBPROGRAMACAO_REQUISICAO (
            PROGRAMACAO_ID,
            REQUISICAO_ID,
            STATUS,
            FERRAMENTA_ID,
            TEMPO_PREVISTO,
            TEMPO_REALIZADO,
            TEMPO_OPERACIONAL,
            TEMPO_SETUP_FERRAMENTA,
            TEMPO_SETUP_AQUECIMENTO,
            TEMPO_SETUP_COR,
            TEMPO_SETUP_APROVACAO,
            DATAHORA_INICIO,
            DATAHORA_FIM,
            DATAHORA_REALIZADO_INICIO,
            DATAHORA_REALIZADO_FIM,
            QUANTIDADE
        ) VALUES (
            NEW.ID,
            NEW.REQUISICAO_ID,
            NEW.STATUS,
            NEW.FERRAMENTA_ID,
            NEW.TEMPO,
            NEW.TEMPO_REALIZADO,
            NEW.TEMPO_OPERACIONAL, 
            NEW.TEMPO_SETUP_FERRAMENTA,
            NEW.TEMPO_SETUP_AQUECIMENTO,
            NEW.TEMPO_SETUP_COR,
            NEW.TEMPO_SETUP_APROVACAO,
            NEW.DATAHORA_INICIO,
            NEW.DATAHORA_FIM,
           (SELECT FIRST 1 R.DATAHORA
              FROM TBPROGRAMACAO_REGISTRO R
             WHERE R.PROGRAMACAO_ID = NEW.ID
               AND R.REQUISICAO_ID  = NEW.REQUISICAO_ID
               AND R.STATUS         = 0
             ORDER BY R.DATAHORA),
            CURRENT_TIMESTAMP,
            NEW.QUANTIDADE
        ) MATCHING (
            PROGRAMACAO_ID,
            REQUISICAO_ID
        );

    END
end;

CREATE OR ALTER PROCEDURE SPU_TRATAR_REQUISICOES 
as
declare variable programacao_id integer;
declare variable abertos integer;
declare variable requisicao_id integer;
begin
  FOR
    select * from (select
    
        p.id as programacao_id,
        P.requisicao_id,
        coalesce((select
            
                count(d.id)
            
            
            from vwremessa_talao_detalhe d
            where true
            and d.remessa_id = r.remessa_id
            and d.remessa_talao_id = r.remessa_talao_id
            and d.data_producao is null),0) as ABERTOS
    
    from tbprogramacao p,
         vwremessa_talao r
    
    where p.status_requisicao = 1
    and p.status < 3
    and r.id = p.tabela_id)
    where ABERTOS = 0

  INTO
    :PROGRAMACAO_ID,
    :REQUISICAO_ID,
    :ABERTOS
  DO
  BEGIN
    update tbprogramacao P SET P.status = 3, p.operador_id = 2715 WHERE P.id = :PROGRAMACAO_ID;

    update tbprogramacao_requisicao J SET J.tempo_previsto = 0, J.tempo_realizado = 0, J.tempo_operacional = 0,
        J.tempo_setup_ferramenta = 0, J.tempo_setup_aquecimento = 0, J.tempo_setup_cor = 0, J.tempo_setup_aprovacao = 0, j.datahora_realizado_inicio = j.datahora_realizado_fim
        WHERE J.programacao_id = :PROGRAMACAO_ID AND J.requisicao_id = :REQUISICAO_ID;
  END
  suspend;
end;




