SET TERM ^ ;

CREATE OR ALTER PROCEDURE RFID_MOTORISTAS_LOTES (
    LOTE DM_INTEIRO,
    CODIGO_EMPRESA DM_INTEIRO)
RETURNS (
    MAIORLOTE DM_INTEIRO,
    CRACHA TYPE OF COLUMN TAB_VERT_REPOSITORIO.VALOR_STRING,
    TIPO TYPE OF COLUMN RFID_MOTORISTAS.TIPO)
AS
BEGIN -- seleção dos arquivos a serem enviados
  FOR WITH LOTE_ATUAL
    AS (SELECT MAX(MC_S1.LOTE) AS MAIORLOTE
          FROM RFID_CONTROLE MC_S1
          WHERE MC_S1.CODIGO_EMPRESA = :CODIGO_EMPRESA)

    ,
    LISTA_RFIDS
    AS (
    --
    SELECT LA.MAIORLOTE
         , MT_S1.CRACHA
         , MM_S1.TIPO
      FROM (SELECT MAX(MM_S2.CODIGO) AS CODIGO_ALTERACAO
                 , MAX(TVR_S2.VALOR_STRING) AS CRACHA
              FROM RFID_CONTROLE MC_S2
              INNER JOIN RFID_MOTORISTAS MM_S2 ON MM_S2.CODIGO_CONTROLE = MC_S2.CODIGO
              INNER JOIN TAB_VERT_REPOSITORIO TVR_S2 ON TVR_S2.CODIGO = MM_S2.CODIGO_TAB_VERT_REP
              WHERE MC_S2.LOTE > :LOTE
                AND MC_S2.CODIGO_EMPRESA = :CODIGO_EMPRESA
              GROUP BY MM_S2.CODIGO_TAB_VERT_REP) MT_S1
      INNER JOIN RFID_MOTORISTAS MM_S1 ON MM_S1.CODIGO = MT_S1.CODIGO_ALTERACAO
      INNER JOIN LOTE_ATUAL LA ON 1 = 1
      WHERE MT_S1.CRACHA IS NOT NULL
            --
    )

    ,
    REM_RFID
    AS (
    --
    SELECT LA.MAIORLOTE
         , RHA.VALOR_ANTERIOR CRACHA
         , RHA.TIPO
      FROM RFID_HISTORICO_ALT RHA
      INNER JOIN RFID_CONTROLE C ON RHA.CODIGO_RFID_CONTROLE = C.CODIGO
      INNER JOIN LOTE_ATUAL LA ON 1 = 1
      WHERE C.CODIGO_EMPRESA = :CODIGO_EMPRESA
        AND C.LOTE > :LOTE
            --
    )

    SELECT LR.MAIORLOTE
         , LR.CRACHA
         , LR.TIPO
      FROM LISTA_RFIDS LR
    UNION
    SELECT RR.MAIORLOTE
         , RR.CRACHA
         , RR.TIPO
      FROM REM_RFID RR

      INTO :MAIORLOTE,
           :CRACHA,
           :TIPO
  DO
  BEGIN
    SUSPEND;
  END
END^

SET TERM ; ^

COMMENT ON PROCEDURE RFID_MOTORISTAS_LOTES IS '20.07.21: Vitorino - Procedure para encontrar os motoristas que devem ser enviados para o RFID';

