--  ALTER TABLE SETORES_BUFFER ADD DATAHORA_INSERCAO DM_DATAHORADEF;
  
--  UPDATE SETORES_BUFFER SET DATAHORA_INSERCAO = '01.01.2000' WHERE DATAHORA_INSERCAO IS NULL;
  
--  ALTER TABLE SETORES_BUFFER ADD DATAHORA_EXECUCAO DM_DATAHORA;

/*
SET TERM ^ ;

CREATE OR ALTER TRIGGER SETORES_BUFFER_BU_DTEXEC FOR SETORES_BUFFER
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
  IF ((NEW.PROCESSADO = 'T')
      AND (OLD.PROCESSADO = 'F')
      AND (NEW.DATAHORA_EXECUCAO IS NULL)) THEN
    NEW.DATAHORA_EXECUCAO = CURRENT_TIMESTAMP;
END^

SET TERM ; ^

COMMENT ON TRIGGER SETORES_BUFFER_BU_DTEXEC IS '07.04.21: Vitorino - Identificar quando foi executado o buffer';

-- *

CREATE TABLE TMP_SETOR_REALIZADO_TROCA (
    CODIGO_SETOR_REALIZADO DM_CODIGOINTEIRO,
    OLD_CODIGO_SETOR DM_INTEIRO,
    NEW_CODIGO_SETOR DM_INTEIRO,
    DATAHORA_INSERCAO DM_DATAHORADEF);

COMMENT ON TABLE TMP_SETOR_REALIZADO_TROCA IS '07.04.21: Vitorino - Tabela temporária para identificar o momento em que há
troca de setor na tabela SETORES_REALIZADOS';

SET TERM ^ ;

CREATE OR ALTER TRIGGER SETORES_REALIZADOS_A_TROCA FOR SETORES_REALIZADOS
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF (OLD.CODIGOSETOR IS DISTINCT FROM NEW.CODIGOSETOR) THEN
  BEGIN
    INSERT INTO TMP_SETOR_REALIZADO_TROCA (
        CODIGO_SETOR_REALIZADO,
        OLD_CODIGO_SETOR,
        NEW_CODIGO_SETOR)
    VALUES (NEW.CODIGOSETOR,
            OLD.CODIGOSETOR,
            NEW.CODIGOSETOR);
  END
END^

SET TERM ; ^

COMMENT ON TRIGGER SETORES_REALIZADOS_A_TROCA IS '07.04.21: Vitorino - Trigger para identificar troca de setores e identificar o momento em que isso ocorre';

*/

ALTER TABLE SETORES_BUFFER
ADD NUMERO_SERIE DM_DESCRICAO_CURTA;

-------

ALTER TABLE SETORES_ATIVOS
ADD CODIGODISPOSITIVOAPONTAMENTO DM_INTEIRO;

COMMENT ON COLUMN SETORES_ATIVOS.CODIGODISPOSITIVOAPONTAMENTO IS
'09.04.21: Vitorino - campo para saber dispositivo que realizaou o apontamento';

ALTER TABLE SETORES_ATIVOS
ADD CONSTRAINT FK_SETORES_ATIVOS_DISPOSITIVOS
FOREIGN KEY (CODIGODISPOSITIVOAPONTAMENTO)
REFERENCES DISPOSITIVOS(CODIGO)
ON DELETE CASCADE;

UPDATE SETORES_ATIVOS SA
  SET SA.CODIGODISPOSITIVOAPONTAMENTO = (SELECT FIRST 1 SR.CODIGODISPOSITIVOAPONTAMENTO
                                           FROM SETORES_REALIZADOS SR
                                           WHERE SR.CODIGOVEICULO = SA.CODIGOVEICULO
                                             AND SR.CONTROLE = SA.CONTROLE
                                             AND SR.CODIGOSETOR = SA.CODIGOSETOR)
  WHERE SA.CODIGODISPOSITIVOAPONTAMENTO IS NULL;
  
 

SET TERM ^ ;

CREATE OR ALTER TRIGGER SETORES_REALIZADOS_AI_CONTROLE FOR SETORES_REALIZADOS
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE CODIGO_SRC_VEI DM_INTEIRO;
DECLARE VARIABLE DATAHORA_INICIO TIMESTAMP;
BEGIN
  IF (NEW.CODIGOSETOR IS NOT NULL) THEN
  BEGIN
    -- PEGO A INFORMAÇÃO DO GMT
    SELECT FIRST 1 TR.DATAHORA_GMT
      FROM TABELAS_REPOSITORIO TR
      WHERE TR.SESSAO = NEW.CONTROLE
        AND TR.DATAHORA = NEW.DATAHORA_INICIO
      INTO :DATAHORA_INICIO;

    UPDATE OR INSERT INTO SETORES_REALIZADOS_CONTROLE_VEI (
        CODIGOVEICULO)
    VALUES (NEW.CODIGOVEICULO)
    MATCHING (CODIGOVEICULO)
    RETURNING CODIGO
    INTO :CODIGO_SRC_VEI;

    INSERT INTO SETORES_REALIZADOS_CONTROLE (
        CODIGO_SRC_VEI,
        CODIGO_SETORES_REALIZADOS,
        CODIGODISPOSITIVO_MOBILE,
        DATAHORA_GMT_HISTORICO,
        DATAHORA_GMT_STATUS_MOBILE)
    VALUES (:CODIGO_SRC_VEI,
            NEW.CODIGO,
            NEW.CODIGODISPOSITIVOAPONTAMENTO,
            new.DATAHORA_INICIO,
            :DATAHORA_INICIO);
  END
END^

SET TERM ; ^

COMMENT ON TRIGGER SETORES_REALIZADOS_AI_CONTROLE IS '08.02.21: Vitorino - Cria um registro para controle do serviço para o serviço de
           integração de histórico com status de mobile para o novo serviço 
           de queima de pacman

24.03.21: Vitorino - Criado o campo CODIGODISPOSITIVOAPONTAMENTO que informa o código do
            dispositivo que fez o apontamento (Mobile ou Teclado)

14.04.21: Vitorino - O horário de histórico não é mais usado GMT, mas sim o local';


 