----------------------------------------
-- VEICULOSDISPOSITIVOS_PERIODICO
EXECUTE BLOCK
RETURNS (
    CODIGO_VEICULO INTEGER,
    CODIGO_VD INTEGER,
    APAGAR CHAR(1))
AS
DECLARE VARIABLE CODIGO INTEGER; --DECLARE VARIABLE CODIGO_VD INTEGER; DECLARE VARIABLE CODIGO_VEICULO INTEGER;
BEGIN
  FOR
    SELECT VDP.CODIGO
         , VDP.CODIGOVEICULODISPOSITIVO
         , VD.CODIGOVEICULO
      FROM VEICULOSDISPOSITIVOS_PERIODICO VDP
      INNER JOIN VEICULOS_DISPOSITIVOS VD ON VDP.CODIGOVEICULODISPOSITIVO = VD.CODIGO AND VD.REMOVIDO = 'T'
      INTO :CODIGO,
           :CODIGO_VD,
           :CODIGO_VEICULO
  DO
  BEGIN
    IF (EXISTS(SELECT FIRST 1 CODIGO
                     FROM VEICULOS_DISPOSITIVOS VD
                     WHERE VD.CODIGOVEICULO = :CODIGO_VEICULO
                       AND VD.CODIGOAVLS = 0
                       AND VD.CODIGO <> :CODIGO_VD
                       AND VD.REMOVIDO = 'F')) THEN
    BEGIN
      DELETE FROM VEICULOSDISPOSITIVOS_PERIODICO
        WHERE CODIGO = :CODIGO;
      APAGAR = 'T';
    END
    ELSE
    BEGIN
      APAGAR = 'F';
    END
    SUSPEND;
  END
END;

COMMIT;

----------------------------------------
-- RASTREAMENTO_PERIODICO
EXECUTE BLOCK
AS
DECLARE VARIABLE CODIGOVEICULO INTEGER;
DECLARE VARIABLE CODIGODISPOSITIVO INTEGER;
DECLARE VARIABLE DATAHORA TIMESTAMP;
BEGIN -- Limpeza em empresas que inserem periódicos
  FOR
    SELECT DISTINCT VD.CODIGOVEICULO
      FROM VEICULOS_DISPOSITIVOS VD
      INNER JOIN VEICULOS V ON VD.CODIGOVEICULO = V.CODIGO
      INNER JOIN EMPRESAS E ON E.CODIGO = V.CODIGOEMPRESA
      WHERE VD.CODIGOAVLS = 0
        AND ((E.INSERIR_PERIODICO = 'T'
        OR E.UTILIZA_OPERACAO_TEMPOREAL = 'T')
        AND E.TEMPOMAXMANTERPERIODICO > 0)
      INTO :CODIGOVEICULO
  DO
  BEGIN
    SELECT TOTAL_REMOVIDOS
      FROM APAGAR_PERIODICOS_VENCIDOS(:CODIGOVEICULO)
      INTO :CODIGODISPOSITIVO;
  END

  -- Limpeza em empresas que atualizam periódicos e possuem mais de um registro
  FOR
    SELECT RP.CODIGOVEICULO
         , RP.CODIGODISPOSITIVO
         , MAX(RP.DATAHORA)
      FROM RASTREAMENTO_PERIODICO RP
      INNER JOIN VEICULOS V ON RP.CODIGOVEICULO = V.CODIGO
      INNER JOIN EMPRESAS E ON E.CODIGO = V.CODIGOEMPRESA
      WHERE (E.INSERIR_PERIODICO = 'F'
        AND E.UTILIZA_OPERACAO_TEMPOREAL = 'F')
      GROUP BY 1, 2
      HAVING COUNT(1) > 1
      INTO :CODIGOVEICULO,
           :CODIGODISPOSITIVO,
           :DATAHORA
  DO
  BEGIN
    DELETE FROM RASTREAMENTO_PERIODICO
      WHERE CODIGOVEICULO = :CODIGOVEICULO
        AND CODIGODISPOSITIVO = :CODIGODISPOSITIVO
        AND DATAHORA < :DATAHORA;
  END

END;

--COMMIT; 

