SET TERM ^ ;

CREATE OR ALTER TRIGGER TAB_VERT_REP_UPDATE_MOTORISTAS FOR TAB_VERT_REPOSITORIO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE CODIGO_TABVERTICAL_MOT_STATUS INTEGER;
DECLARE VARIABLE CODIGO_TABVERTICAL_MOT_APAGADO INTEGER;
DECLARE VARIABLE CODIGO_TABVERTICAL_MOT_RFID INTEGER;
BEGIN
  SELECT COALESCE(E.CODIGO_TABVERTICAL_MOT_STATUS, 0)
       , COALESCE(E.CODIGO_TABVERTICAL_MOT_APAGADO, 0)
       , COALESCE(E.CODIGO_TABVERTICAL_MOT_RFID, 0)
    FROM TABELAS_VERTICAIS TV
    INNER JOIN EMPRESAS E ON E.CODIGO = TV.CODIGO_EMPRESA AND E.APAGADO = 'F'
    WHERE TV.CODIGO = NEW.CODIGO_TABELA
    INTO :CODIGO_TABVERTICAL_MOT_STATUS,
         :CODIGO_TABVERTICAL_MOT_APAGADO,
         :CODIGO_TABVERTICAL_MOT_RFID;

  /* Verifica altera??o do status */
  IF (NEW.CODIGO_CAMPO = CODIGO_TABVERTICAL_MOT_STATUS) THEN
  BEGIN
    IF (TRIM(OLD.VALOR_STRING) = 'A') THEN
    BEGIN
      IF ((SELECT TRIM(TVR.VALOR_STRING)
             FROM TAB_VERT_REPOSITORIO TVR
             WHERE TVR.CODIGO_GRUPO = NEW.CODIGO_GRUPO
               AND TVR.CODIGO_CAMPO = :CODIGO_TABVERTICAL_MOT_APAGADO) = 'T') THEN
--        NEW.VALOR_STRING = 'I';
--      ELSE
        NEW.VALOR_STRING = 'R';
    END
  END

  /* Verifica altera??o de APAGADO */
  ELSE
  IF (NEW.CODIGO_CAMPO = CODIGO_TABVERTICAL_MOT_APAGADO) THEN
  BEGIN
    IF (NEW.APAGADO = 'T') THEN
      NEW.VALOR_STRING = 'T';

    IF (OLD.VALOR_STRING <> NEW.VALOR_STRING) THEN
    BEGIN
      UPDATE TAB_VERT_REPOSITORIO TVR_U
        SET TVR_U.VALOR_STRING = 'A'
        WHERE TVR_U.CODIGO_GRUPO = NEW.CODIGO_GRUPO
          AND TVR_U.CODIGO_CAMPO = :CODIGO_TABVERTICAL_MOT_STATUS;
    END
  END
  /* VERIFICA ALTERA??O DO RFID */
  IF ((CODIGO_TABVERTICAL_MOT_RFID IS NOT NULL)
      AND (NEW.CODIGO_CAMPO = :CODIGO_TABVERTICAL_MOT_RFID)) THEN
  BEGIN
    IF (OLD.VALOR_STRING IS DISTINCT FROM NEW.VALOR_STRING) THEN
    BEGIN
      /* Salva o valor anterior para remo??o */
      INSERT INTO RFID_HISTORICO_ALT (
          CODIGO_TAB_VERT_REP,
          TIPO,
          VALOR_ANTERIOR)
      VALUES (NEW.CODIGO,
              'R',
              OLD.VALOR_STRING);

      /* Informa altera??o do registro */
      UPDATE TAB_VERT_REPOSITORIO TVR_U
        SET TVR_U.VALOR_STRING = 'A'
        WHERE TVR_U.CODIGO_GRUPO = NEW.CODIGO_GRUPO
          AND TVR_U.CODIGO_CAMPO = :CODIGO_TABVERTICAL_MOT_STATUS;
    END
  END
END^

SET TERM ; ^

COMMENT ON TRIGGER TAB_VERT_REP_UPDATE_MOTORISTAS IS '27.07.21: Vitorino - Alterado para quando um status ? removido de ''A'', n?o alterar novamente o status para ''I''';
