EXECUTE BLOCK
AS
DECLARE VARIABLE CODIGO_RFID INTEGER;
DECLARE VARIABLE CODIGO_MIFARE INTEGER;

/* Dados de Mifare  */
DECLARE VARIABLE PK_MIFARE DM_INTEIRO;
DECLARE VARIABLE PK_RFID DM_INTEIRO;
DECLARE VARIABLE DESCRICAO DM_DESCRICAO;
DECLARE VARIABLE POSICAO DM_INTEIRO;
DECLARE VARIABLE EXCLUSIVO DM_LOGICO;
DECLARE VARIABLE INSTANCIAVISIBILIDADE DM_VISIBILIDADE_COMANDO;
DECLARE VARIABLE APAGADO DM_LOGICO;
DECLARE VARIABLE INATIVO DM_LOGICO;
DECLARE VARIABLE CODIGOTIPOCOMANDO DM_INTEIRO;
DECLARE VARIABLE IDENTIFICADOR DM_IDENTIFICADOR;
DECLARE VARIABLE INSTANCIAEXECUCAO DM_EXECUCAO_COMANDO;
DECLARE VARIABLE VISIVEL_PLANOVIAGEM_PC DM_LOGICO;
DECLARE VARIABLE VISIVEL_PLANOVIAGEM_RTS DM_LOGICO;
DECLARE VARIABLE VISIVEL_PLANOVIAGEM_CES DM_LOGICO;
DECLARE VARIABLE VISIVEL_PLANOVIAGEM_EVENTOS DM_LOGICO;
DECLARE VARIABLE RESPOSTACOMANDO DM_TIPORESPOSTACOMANDO;
DECLARE VARIABLE AGUARDAR_RECONEXAO DM_LOGICO;
DECLARE VARIABLE TIMEOUT_RECONEXAO DM_TIMEOUT;
BEGIN
  -- Módulo Origem
  SELECT CODIGO
    FROM TIPOS_DISPOSITIVOS TD
    WHERE TD.APELIDO = 'MFR'
      AND TD.CODIGOTECNOLOGIA = 1
    INTO :CODIGO_MIFARE;

  -- Módulo Destino
  SELECT CODIGO
    FROM TIPOS_DISPOSITIVOS TD
    WHERE TD.APELIDO = 'RFID'
      AND TD.CODIGOTECNOLOGIA = 1
    INTO :CODIGO_RFID;

  -- Comandos a serem portados
  FOR
    SELECT CODIGO
         , DESCRICAO
         , POSICAO
         , EXCLUSIVO
         , INSTANCIAVISIBILIDADE
         , APAGADO
         , INATIVO
         , CODIGOTIPOCOMANDO
         , IDENTIFICADOR
         , INSTANCIAEXECUCAO
         , VISIVEL_PLANOVIAGEM_PC
         , VISIVEL_PLANOVIAGEM_RTS
         , VISIVEL_PLANOVIAGEM_CES
         , VISIVEL_PLANOVIAGEM_EVENTOS
         , RESPOSTACOMANDO
         , AGUARDAR_RECONEXAO
         , TIMEOUT_RECONEXAO
      FROM DISPOSITIVOS_COMANDOS DC
      WHERE DC.CODIGOTIPODISPOSITIVO = :CODIGO_MIFARE
        AND DC.IDENTIFICADOR IN ('257', '258', '259')
      ORDER BY DC.IDENTIFICADOR
      INTO :PK_MIFARE,
           :DESCRICAO,
           :POSICAO,
           :EXCLUSIVO,
           :INSTANCIAVISIBILIDADE,
           :APAGADO,
           :INATIVO,
           :CODIGOTIPOCOMANDO,
           :IDENTIFICADOR,
           :INSTANCIAEXECUCAO,
           :VISIVEL_PLANOVIAGEM_PC,
           :VISIVEL_PLANOVIAGEM_RTS,
           :VISIVEL_PLANOVIAGEM_CES,
           :VISIVEL_PLANOVIAGEM_EVENTOS,
           :RESPOSTACOMANDO,
           :AGUARDAR_RECONEXAO,
           :TIMEOUT_RECONEXAO
  DO
  BEGIN
    UPDATE OR INSERT INTO DISPOSITIVOS_COMANDOS (
        CODIGOTIPODISPOSITIVO,
        DESCRICAO,
        POSICAO,
        EXCLUSIVO,
        INSTANCIAVISIBILIDADE,
        APAGADO,
        INATIVO,
        CODIGOTIPOCOMANDO,
        IDENTIFICADOR,
        INSTANCIAEXECUCAO,
        VISIVEL_PLANOVIAGEM_PC,
        VISIVEL_PLANOVIAGEM_RTS,
        VISIVEL_PLANOVIAGEM_CES,
        VISIVEL_PLANOVIAGEM_EVENTOS,
        RESPOSTACOMANDO,
        AGUARDAR_RECONEXAO,
        TIMEOUT_RECONEXAO)
    VALUES (:CODIGO_RFID,
            :DESCRICAO,
            :POSICAO,
            :EXCLUSIVO,
            :INSTANCIAVISIBILIDADE,
            :APAGADO,
            :INATIVO,
            :CODIGOTIPOCOMANDO,
            :IDENTIFICADOR,
            :INSTANCIAEXECUCAO,
            :VISIVEL_PLANOVIAGEM_PC,
            :VISIVEL_PLANOVIAGEM_RTS,
            :VISIVEL_PLANOVIAGEM_CES,
            :VISIVEL_PLANOVIAGEM_EVENTOS,
            :RESPOSTACOMANDO,
            :AGUARDAR_RECONEXAO,
            :TIMEOUT_RECONEXAO)
    MATCHING (IDENTIFICADOR,
              CODIGOTIPODISPOSITIVO,
              DESCRICAO)
    RETURNING CODIGO
    INTO :PK_RFID;

    -- parametros dos comandos
    IF (NOT EXISTS(SELECT *
                     FROM DISPOSITIVOS_COMANDOS_PARAM DCP
                     WHERE DCP.CODIGODISPOSITIVOCOMANDO = :PK_RFID)) THEN
    BEGIN
      INSERT INTO DISPOSITIVOS_COMANDOS_PARAM (
          CODIGODISPOSITIVOCOMANDO,
          POSICAO,
          DESCRICAO,
          VALORFIXO,
          MASCARA,
          APAGADO,
          INATIVO,
          INVISIVEL_PLANOVIAGEM,
          ESCALA,
          ARREDONDAMENTO,
          TAMANHOBYTES,
          INTERVALOMINIMO,
          INTERVALOMAXIMO,
          TIPO_CAMPO)
      SELECT :PK_RFID
           , DCP.POSICAO
           , DCP.DESCRICAO
           , DCP.VALORFIXO
           , DCP.MASCARA
           , DCP.APAGADO
           , DCP.INATIVO
           , DCP.INVISIVEL_PLANOVIAGEM
           , DCP.ESCALA
           , DCP.ARREDONDAMENTO
           , DCP.TAMANHOBYTES
           , DCP.INTERVALOMINIMO
           , DCP.INTERVALOMAXIMO
           , DCP.TIPO_CAMPO
        FROM DISPOSITIVOS_COMANDOS_PARAM DCP
        WHERE DCP.CODIGODISPOSITIVOCOMANDO = :PK_MIFARE
        ORDER BY POSICAO;
    END
  END

  -- Comando novo para Limpar a lista
  UPDATE OR INSERT INTO DISPOSITIVOS_COMANDOS (
      CODIGOTIPODISPOSITIVO,
      DESCRICAO,
      POSICAO,
      EXCLUSIVO,
      INSTANCIAVISIBILIDADE,
      APAGADO,
      INATIVO,
      CODIGOTIPOCOMANDO,
      IDENTIFICADOR,
      INSTANCIAEXECUCAO,
      VISIVEL_PLANOVIAGEM_PC,
      VISIVEL_PLANOVIAGEM_RTS,
      VISIVEL_PLANOVIAGEM_CES,
      VISIVEL_PLANOVIAGEM_EVENTOS,
      RESPOSTACOMANDO,
      AGUARDAR_RECONEXAO,
      TIMEOUT_RECONEXAO)
  VALUES (:CODIGO_RFID,
          'Zerar Lista Motoristas',
          6,
          'F',
          'A',
          'F',
          'F',
          NULL,
          '261',
          'V',
          'F',
          'F',
          'F',
          'F',
          'DIN',
          'T',
          '00:05')
  MATCHING (IDENTIFICADOR,
            CODIGOTIPODISPOSITIVO,
            DESCRICAO)
  RETURNING CODIGO
  INTO :PK_RFID;

  -- parametros dos comandos
  IF (NOT EXISTS(SELECT *
                   FROM DISPOSITIVOS_COMANDOS_PARAM DCP
                   WHERE DCP.CODIGODISPOSITIVOCOMANDO = :PK_RFID)) THEN
  BEGIN
    INSERT INTO DISPOSITIVOS_COMANDOS_PARAM (
        CODIGODISPOSITIVOCOMANDO,
        POSICAO,
        DESCRICAO,
        VALORFIXO,
        MASCARA,
        APAGADO,
        INATIVO,
        INVISIVEL_PLANOVIAGEM,
        ESCALA,
        ARREDONDAMENTO,
        TAMANHOBYTES,
        INTERVALOMINIMO,
        INTERVALOMAXIMO,
        TIPO_CAMPO)
    VALUES (:PK_RFID,
            0,
            'Comando',
            'p222',
            '#3',
            'F',
            'F',
            'T',
            '01:01',
            'T',
            2,
            0,
            0,
            'S');
  END
END
