/*

Trigger para impedir que a PREVRETI seja recalculada quando o serviço já possuir pedido para o dia

*/
CREATE OR REPLACE TRIGGER APAGA_REQUIPEDIDO
BEFORE DELETE
ON PREVRETI FOR EACH ROW
DECLARE   
V_EXISTE_PEDIDO NUMBER;
BEGIN
   /* Verifica se existe algum pedido informado para a previsão que está sendo apagada */
   BEGIN
      SELECT MAX(1)
        INTO V_EXISTE_PEDIDO
        FROM REQUIPEDIDO R
             INNER JOIN PEDIDOEXOL P ON P.CDFILDEST = R.CDFILDEST AND
                                        P.CDFILLANC = R.CDFILLANC AND
                                        P.NRPEDEXOL = R.NRPEDEXOL
       WHERE R.CDFILIAL = :OLD.CDFILIAL
         AND R.CDSERVFILI = :OLD.CDSERVFILI
         AND R.DTREQUIPEDIDO = :OLD.DTPREVRETI
         AND R.NRPEDEXOL IS NOT NULL;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN V_EXISTE_PEDIDO := NULL;
   END;
   
   -- Emite mensagem bloqueando a exclusão do registro caso exista pedido
   IF V_EXISTE_PEDIDO IS NOT NULL THEN
      raise_application_error(-20101, 'Não é possível apagar previsões de serviços que tenham pedido para OL.');
   END IF;
   
   -- Apaga os agrupamentos em REQUIPEDIDO referentes a filial, serviço e data
   DELETE FROM REQUIPEDIDO
   WHERE CDFILIAL = :OLD.CDFILIAL
     AND CDSERVFILI = :OLD.CDSERVFILI
     AND DTREQUIPEDIDO = :OLD.DTPREVRETI;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('VALIDA_REQUIPEDIDO','5.85.xxx'); END;
/