SET TERM ^;

CREATE OR ALTER TRIGGER GRUPOSCONTROLE_VEICULOS_BD0 FOR GRUPOSCONTROLE_VEICULOS
ACTIVE AFTER DELETE POSITION 0
AS
DECLARE VARIABLE OPERACAO_DESLOCAMENTO_EMPRESA INTEGER;
DECLARE VARIABLE QTDE_GRUPOS INTEGER;
DECLARE VARIABLE DUPLICADOS INTEGER;
BEGIN
  SELECT COUNT(E.CODIGO)
       ,
         (SELECT COUNT(GV.CODIGO)
            FROM GRUPOSCONTROLE_VEICULOS GV
            WHERE GV.CODIGOVEICULO = OLD.CODIGOVEICULO
              AND GV.CODIGOGRUPOCONTROLE <> OLD.CODIGOGRUPOCONTROLE)
       ,
         (SELECT COUNT(GV.CODIGO)
            FROM GRUPOSCONTROLE_VEICULOS GV
            WHERE GV.CODIGOVEICULO = OLD.CODIGOVEICULO
              AND GV.CODIGOGRUPOCONTROLE = OLD.CODIGOGRUPOCONTROLE
              AND GV.CODIGO <> OLD.CODIGO)
    FROM VEICULOS V
    INNER JOIN EMPRESAS E ON E.CODIGO = V.CODIGOEMPRESA AND E.CODIGO_GRUPOCONTRO_DESLOCAMENTO = OLD.CODIGOGRUPOCONTROLE
    WHERE V.CODIGO = OLD.CODIGOVEICULO
    INTO :OPERACAO_DESLOCAMENTO_EMPRESA,
         :QTDE_GRUPOS,
         :DUPLICADOS;

  -- SOMENTE RECRIA SE FOR A DESLOCAMENTE E EXISTIR MAIS ALGUMA OUTRO GRUPO CONTROLE - SE EXISTIR DUPLICADO, MANTÉM SEM ALTERAÇÃO
  IF (OPERACAO_DESLOCAMENTO_EMPRESA > 0
      AND QTDE_GRUPOS > 0
      AND DUPLICADOS = 0) THEN
  BEGIN
    UPDATE OR INSERT INTO GRUPOSCONTROLE_VEICULOS (
        CODIGOGRUPOCONTROLE,
        CODIGOVEICULO,
        CODIGODISPOSITIVO,
        CODIGOOPERACOES,
        CODIGOALARMES,
        CODIGOOPERACAOPRIMARIA,
        DATAHORA_INI_OPERACAOPRIMARIA)
    VALUES (OLD.CODIGOGRUPOCONTROLE,
            OLD.CODIGOVEICULO,
            OLD.CODIGODISPOSITIVO,
            OLD.CODIGOOPERACOES,
            OLD.CODIGOALARMES,
            OLD.CODIGOOPERACOES,
            CURRENT_TIMESTAMP)
    MATCHING (CODIGOGRUPOCONTROLE,
              CODIGOVEICULO,
              CODIGODISPOSITIVO);
  END
END^

SET TERM;
^

COMMENT ON TRIGGER GRUPOSCONTROLE_VEICULOS_BD0 IS '23.09.2020 - Vitorino: Controle para caso existe registros duplicados na operação deslocamento,
não alterar a informação que ficar disponível'; 
