SET TERM ^ ;

CREATE OR ALTER PROCEDURE SYS_INSERIRHISTORICO_REPROC (
    CODIGOVEICULO TYPE OF COLUMN RASTREAMENTO_HISTORICO.CODIGOVEICULO,
    CODIGODISPOSITIVO TYPE OF COLUMN RASTREAMENTO_HISTORICO.CODIGODISPOSITIVO,
    DATAHORA TYPE OF COLUMN RASTREAMENTO_HISTORICO.DATAHORA,
    DATAHORA_GMT TYPE OF COLUMN RASTREAMENTO_HISTORICO.DATAHORA_GMT,
    CONSUMO TYPE OF COLUMN RASTREAMENTO_HISTORICO.CONSUMO,
    IGNICAO TYPE OF COLUMN RASTREAMENTO_HISTORICO.IGNICAO,
    LONGITUDE TYPE OF COLUMN RASTREAMENTO_HISTORICO.LONGITUDE,
    LATITUDE TYPE OF COLUMN RASTREAMENTO_HISTORICO.LATITUDE,
    VELOCIDADE TYPE OF COLUMN RASTREAMENTO_HISTORICO.VELOCIDADE,
    SINALCELULAR TYPE OF COLUMN RASTREAMENTO_HISTORICO.SINALCELULAR,
    SINALGPS TYPE OF COLUMN RASTREAMENTO_HISTORICO.SINALGPS,
    CODIGO_PENDENCIA TYPE OF COLUMN RASTREAMENTO_HISTORICO.CODIGO_PENDENCIA,
    PARADO TYPE OF COLUMN RASTREAMENTO_HISTORICO.PARADO,
    FRENAGEM TYPE OF COLUMN RASTREAMENTO_HISTORICO.FRENAGEM,
    GIROMOTOR TYPE OF COLUMN RASTREAMENTO_HISTORICO.GIROMOTOR,
    TEMPERATURA TYPE OF COLUMN RASTREAMENTO_HISTORICO.TEMPERATURA,
    TEMPOMOVIMENTO TYPE OF COLUMN RASTREAMENTO_HISTORICO.TEMPOMOVIMENTO,
    CHUVA TYPE OF COLUMN RASTREAMENTO_HISTORICO.CHUVA,
    ABERTURA_PORTA TYPE OF COLUMN RASTREAMENTO_HISTORICO.ABERTURA_PORTA,
    FECHAMENTO_PORTA TYPE OF COLUMN RASTREAMENTO_HISTORICO.FECHAMENTO_PORTA,
    HODOMETRO TYPE OF COLUMN RASTREAMENTO_HISTORICO.HODOMETRO,
    HODOMETRO_SOBRA TYPE OF COLUMN RASTREAMENTO_HISTORICO.HODOMETRO_SOBRA,
    HORIMETRO TYPE OF COLUMN RASTREAMENTO_HISTORICO.HORIMETRO,
    ABSOLUTO DM_LOGICO,
    PESO_IDENTIFICADOR TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.IDENTIFICADOR,
    PESO_VALOR TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.VALOR,
    PESO_UNIDADE_MEDIDA TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.UNIDADE_MEDIDA_ID,
    CONSUMO_ABSOLUTO DM_INTEIRO,
    TRENA TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.VALOR,
    TRENA_DELTA TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.VALOR)
AS
DECLARE VARIABLE CODIGOHISTORICO TYPE OF COLUMN RASTREAMENTO_HISTORICO.CODIGO;
BEGIN
  UPDATE OR INSERT INTO RASTREAMENTO_HISTORICO (
      CODIGOVEICULO,
      CODIGODISPOSITIVO,
      DATAHORA,
      DATAHORA_GMT,
      CONSUMO,
      IGNICAO,
      LONGITUDE,
      LATITUDE,
      VELOCIDADE,
      SINALCELULAR,
      SINALGPS,
      CODIGO_PENDENCIA,
      PARADO,
      FRENAGEM,
      GIROMOTOR,
      TEMPERATURA,
      TEMPOMOVIMENTO,
      CHUVA,
      ABERTURA_PORTA,
      FECHAMENTO_PORTA,
      HODOMETRO,
      HORIMETRO,
      HODOMETRO_SOBRA,
      CONSUMO_ABSOLUTO)
  VALUES (:CODIGOVEICULO,
          :CODIGODISPOSITIVO,
          :DATAHORA,
          :DATAHORA_GMT,
          :CONSUMO,
          :IGNICAO,
          :LONGITUDE,
          :LATITUDE,
          :VELOCIDADE,
          :SINALCELULAR,
          :SINALGPS,
          :CODIGO_PENDENCIA,
          :PARADO,
          :FRENAGEM,
          :GIROMOTOR,
          :TEMPERATURA,
          :TEMPOMOVIMENTO,
          :CHUVA,
          :ABERTURA_PORTA,
          :FECHAMENTO_PORTA,
          :HODOMETRO,
          :HORIMETRO,
          :HODOMETRO_SOBRA,
          :CONSUMO_ABSOLUTO)
  MATCHING (CODIGOVEICULO,
            DATAHORA_GMT)
  RETURNING CODIGO
  INTO :CODIGOHISTORICO;

  -- PESO
  IF ((:PESO_IDENTIFICADOR IS NOT NULL)
      AND (TRIM(:PESO_IDENTIFICADOR) != '')) THEN
    INSERT INTO RASTREAMENTO_HISTORICO_INFO (
        CODIGOHISTORICO,
        IDENTIFICADOR,
        VALOR,
        UNIDADE_MEDIDA_ID)
    VALUES (:CODIGOHISTORICO,
            :PESO_IDENTIFICADOR,
            :PESO_VALOR,
            :PESO_UNIDADE_MEDIDA);

  IF (ABSOLUTO = 'T') THEN
  BEGIN
    -- HODOMETRO
    IF ((:HODOMETRO IS NOT NULL)
        AND (:HODOMETRO > 0)) THEN
      INSERT INTO RASTREAMENTO_HISTORICO_INFO (
          CODIGOHISTORICO,
          IDENTIFICADOR,
          VALOR)
      VALUES (:CODIGOHISTORICO,
              46,
              CAST(:HODOMETRO AS TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.VALOR));

    -- HORIMETRO
    IF ((:HORIMETRO IS NOT NULL)
        AND (:HORIMETRO > 0)) THEN
      INSERT INTO RASTREAMENTO_HISTORICO_INFO (
          CODIGOHISTORICO,
          IDENTIFICADOR,
          VALOR)
      VALUES (:CODIGOHISTORICO,
              47,
              CAST(:HORIMETRO AS TYPE OF COLUMN RASTREAMENTO_HISTORICO_INFO.VALOR));
  END

  -- TRENA
  IF ((:TRENA IS NOT NULL)
      AND (TRIM(:TRENA) != '')) THEN
    INSERT INTO RASTREAMENTO_HISTORICO_INFO (
        CODIGOHISTORICO,
        IDENTIFICADOR,
        VALOR)
    VALUES (:CODIGOHISTORICO,
            51,
            :TRENA);

  -- TRENA_DELTA
  IF ((:TRENA_DELTA IS NOT NULL)
      AND (TRIM(:TRENA_DELTA) != '')) THEN
    INSERT INTO RASTREAMENTO_HISTORICO_INFO (
        CODIGOHISTORICO,
        IDENTIFICADOR,
        VALOR)
    VALUES (:CODIGOHISTORICO,
            54,
            :TRENA_DELTA);
END^

SET TERM ; ^

COMMENT ON PROCEDURE SYS_INSERIRHISTORICO_REPROC IS 'Procedure utilizada no reprocessamento de alarmes.

15.10.20 - Vitorino: Atualizaço para aceitar o delta da trena
20.07.21 - Vitorino: Adicionado campo CONSUMO_ABSOLUTO';

