CREATE GENERATOR GEN_MIN_TABELAS_REPOSITORIO;

CREATE TABLE MINERADO_TABELAS_REPOSITORIO (
    CODIGO                      DM_CODIGOINTEIRO NOT NULL /* DM_CODIGOINTEIRO = INTEGER NOT NULL */,
    CODIGO_TABELAS_REPOSITORIO  DM_CODIGOINTEIRO /* DM_CODIGOINTEIRO = INTEGER NOT NULL */
);

ALTER TABLE MINERADO_TABELAS_REPOSITORIO ADD CONSTRAINT PK_MINERADO_TABELAS_REPOSITORIO PRIMARY KEY (CODIGO);

/* Trigger: MINERADO_TABELAS_REPOSITORIO_BI */
CREATE OR ALTER TRIGGER MINERADO_TABELAS_REPOSITORIO_BI FOR MINERADO_TABELAS_REPOSITORIO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CODIGO IS NULL) THEN
    NEW.CODIGO = GEN_ID(GEN_MIN_TABELAS_REPOSITORIO,1);
END;

DROP TRIGGER MIN_TABELAS_REPOSITORIO_AIU;

###########################################
#######MIN_TABELAS_REPOSITORIO_AIU#########
###########################################
#  Trigger que insere os registros que devem ser minerados na minerao de tabelas repositrio
#  Autor(es):      Alessandro Lima
#  Verso:         1.0.1.1
#  Data:           11/03/2016
#  Descrico:      Trigger que insere os registros que devem ser minerados na minerao de tabelas repositrio
#  Aplicao:      Minerador, Minerao de Tabelas Repositrios
#
#
#  Verso:        1.0.1.0
#  Alteraes:    Esta trigger deve ser na tabela TABELAS_REPOSITORIO_CAMPOS e no na TABELAS_REPOSITORIO como era antes
#  Data:          18/11/2015                          
#  Nome:          Andr Odon
#  Aplicao:     Minerador, Minerao de Tabelas Repositrios
#
#
#  Verso:        1.0.2.0
#  Alteraes:    Esta trigger deve ser na tabela TABELAS_REPOSITORIO_CAMPOS e no na TABELAS_REPOSITORIO como era antes
#  Data:          07/01/2015                          
#  Nome:          Andr Odon, Alessandro Lima
#  Aplicao:     Minerador, Minerao de Tabelas Repositrios
#
#
###########################################

CREATE OR ALTER TRIGGER MIN_TABELAS_REPOSITORIO_AIU FOR TABELAS_REPOSITORIO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO_TABELAS_REPOSITORIO
    FROM MINERADO_TABELAS_REPOSITORIO MTR
    WHERE MTR.CODIGO_TABELAS_REPOSITORIO = NEW.CODIGO
    INTO :CODIGO;

    IF (CODIGO IS NULL OR (CODIGO <> NEW.CODIGO)) THEN
        INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGO_TABELAS_REPOSITORIO) VALUES (NEW.CODIGO);

    NEW.MINERADO = 'F';
END;



/******************************************************************************/
/***                        MINERADO_SM_APONTAMENTOS                        ***/
/******************************************************************************/
CREATE GENERATOR GEN_MIN_SM_APONTAMENTOS;

CREATE TABLE MINERADO_SM_APONTAMENTOS (
    CODIGO                      DM_CODIGOINTEIRO NOT NULL /* DM_CODIGOINTEIRO = INTEGER NOT NULL */,
    CODIGO_SM_APONTAMENTOS      DM_CODIGOINTEIRO /* DM_CODIGOINTEIRO = INTEGER NOT NULL */
);

ALTER TABLE MINERADO_SM_APONTAMENTOS ADD CONSTRAINT PK_MINERADO_SM_APONTAMENTOS PRIMARY KEY (CODIGO);

###########################################
#######MINERADO_SM_APONTAMENTOS_BI#########
###########################################
#  Trigger para inserir a chave incremental na tabela MINERADO_SM_APONTAMENTOS
#  Autor:      Andr Odon Pereira
#
#  Verso:     1.0.0.0
#  Data:       06/01/2015
#  Descrio:  Trigger para inserir a chave incremental na tabela MINERADO_SM_APONTAMENTOS
#  Aplicao:  DB, Minerador, Mineracao de Tabelas Repositrio
#
#
##########################################
CREATE OR ALTER TRIGGER MINERADO_SM_APONTAMENTOS_BI FOR MINERADO_SM_APONTAMENTOS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CODIGO IS NULL) THEN
    NEW.CODIGO = GEN_ID(GEN_MIN_SM_APONTAMENTOS,1);
END;

###########################################
#########MIN_SM_APONTAMENTOS_AIU###########
###########################################
#  Trigger para inserir os resgistros de SETORES_MANUAIS_APONTAMENTOS inseridos ou atualizados na tabela de minerao
#  Autor:      Andr Odon Pereira
#
#  Verso:     1.0.0.0
#  Data:       06/01/2015
#  Descrio:  Trigger para inserir os resgistros de SETORES_MANUAIS_APONTAMENTOS inseridos ou atualizados na tabela de minerao
#  Aplicao:  Minerador, Mineracao de Tabelas Repositrio
#
#
##########################################


CREATE OR ALTER TRIGGER MIN_SM_APONTAMENTOS_AIU FOR SETORES_MANUAIS_APONTAMENTOS
ACTIVE AFTER INSERT OR UPDATE POSITION 1
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO_SM_APONTAMENTOS
    FROM MINERADO_SM_APONTAMENTOS MTR
    WHERE MTR.CODIGO_SM_APONTAMENTOS = NEW.CODIGO
    INTO :CODIGO;

    IF ((CODIGO IS NULL OR (CODIGO <> NEW.CODIGO)) AND NEW.APAGADO = 0) THEN
        INSERT INTO MINERADO_SM_APONTAMENTOS (CODIGO_SM_APONTAMENTOS) VALUES (NEW.CODIGO);
END
---------------------------------------------------------------------------------------
-- Versao: 4.1.0.13 | Correo de Indices
---------------------------------------------------------------------------------------
CREATE INDEX CODIGO_TABELAS_REPOSITORIO_IDX ON MINERADO_TABELAS_REPOSITORIO (CODIGO_TABELAS_REPOSITORIO) ;


--- Versao 5.1. Alteracoes
CREATE OR ALTER TRIGGER MIN_TABELAS_REPOSITORIO_AIU FOR TABELAS_REPOSITORIO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO_TABELAS_REPOSITORIO
    FROM MINERADO_TABELAS_REPOSITORIO MTR
    WHERE MTR.CODIGO_TABELAS_REPOSITORIO = NEW.CODIGO
    INTO :CODIGO;

    IF (CODIGO IS NULL OR (CODIGO <> NEW.CODIGO)) THEN
        INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGO_TABELAS_REPOSITORIO) VALUES (NEW.CODIGO);

    NEW.MINERADO = 'F';
END;


---------------------------------------------------------------------------------------
-- Versao: 4.4.0.0 | Correo de Triggers
---------------------------------------------------------------------------------------
DROP TRIGGER MIN_SETORES_REALIZADOS_IU;

DROP TRIGGER MIN_TABELAS_REPOSITORIO_AIU;

DROP TABLE MINERADO_TABELAS_REPOSITORIO;

CREATE TABLE MINERADO_TABELAS_REPOSITORIO (
	CODIGO INTEGER NOT NULL,
	CODIGOVEICULO INTEGER NOT NULL,
	SESSAO VARCHAR(64),
	CONSTRAINT PK_MINERADO_TABELAS_REPOSITORIO PRIMARY KEY (CODIGO)
) ;

CREATE INDEX MTR_CODIGOVEICULO_SESSAO_IDX ON MINERADO_TABELAS_REPOSITORIO (CODIGOVEICULO,SESSAO) ;

CREATE TRIGGER MINERADO_TABELAS_REPOSITORIO_BI FOR MINERADO_TABELAS_REPOSITORIO BEFORE INSERT
AS
BEGIN
  IF (NEW.CODIGO IS NULL) THEN
    NEW.CODIGO = GEN_ID(GEN_MIN_TABELAS_REPOSITORIO,1);
END;

CREATE TRIGGER MIN_TABELAS_REPOSITORIO_AIU FOR TABELAS_REPOSITORIO BEFORE INSERT OR UPDATE
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO
    FROM MINERADO_TABELAS_REPOSITORIO MTR
    WHERE MTR.CODIGOVEICULO = NEW.CODIGOVEICULO AND MTR.SESSAO = NEW.SESSAO
    INTO :CODIGO;

    IF (CODIGO IS NULL) THEN
        INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGOVEICULO, SESSAO) VALUES (NEW.CODIGOVEICULO, NEW.SESSAO);

    NEW.MINERADO = 'F';
END;

CREATE OR ALTER TRIGGER MIN_SETORES_REALIZADOS_IU FOR SETORES_REALIZADOS
ACTIVE AFTER INSERT OR UPDATE POSITION 1
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    IF (NEW.STATUS <> 'A') THEN
	BEGIN
        SELECT FIRST 1 MSR.CODIGO_SETORES_REALIZADOS FROM MINERADO_SETORES_REALIZADOS MSR
        WHERE MSR.CODIGO_SETORES_REALIZADOS = NEW.CODIGO INTO :CODIGO;

        IF (CODIGO IS NULL) THEN
        BEGIN
            INSERT INTO MINERADO_SETORES_REALIZADOS (CODIGO_SETORES_REALIZADOS) VALUES (NEW.CODIGO);
        END

		SELECT FIRST 1 MTR.CODIGO
		FROM MINERADO_TABELAS_REPOSITORIO MTR
		WHERE MTR.CODIGOVEICULO = NEW.CODIGOVEICULO AND MTR.SESSAO = NEW.CONTROLE
		INTO :CODIGO;

		IF (CODIGO IS NULL) THEN
			INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGOVEICULO, SESSAO) VALUES (NEW.CODIGOVEICULO, NEW.CONTROLE);
	END
END;
---------------------------------------------------------------------------------------
-- Versao: 4.4.0.2 | Correo de Triggers
---------------------------------------------------------------------------------------
CREATE OR ALTER TRIGGER MIN_SETORES_REALIZADOS_IU FOR SETORES_REALIZADOS
ACTIVE AFTER INSERT OR UPDATE POSITION 1
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    IF (NEW.STATUS <> 'A') THEN
	BEGIN
        SELECT FIRST 1 MSR.CODIGO_SETORES_REALIZADOS FROM MINERADO_SETORES_REALIZADOS MSR
        WHERE MSR.CODIGO_SETORES_REALIZADOS = NEW.CODIGO INTO :CODIGO;

        IF (CODIGO IS NULL) THEN
        BEGIN
            INSERT INTO MINERADO_SETORES_REALIZADOS (CODIGO_SETORES_REALIZADOS) VALUES (NEW.CODIGO);
        END

		SELECT FIRST 1 MTR.CODIGO
		FROM MINERADO_TABELAS_REPOSITORIO MTR
		WHERE MTR.CODIGOVEICULO = NEW.CODIGOVEICULO AND MTR.SESSAO = NEW.CONTROLE
		INTO :CODIGO;

		IF (CODIGO IS NULL) THEN
			INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGOVEICULO, SESSAO) VALUES (NEW.CODIGOVEICULO, NEW.CONTROLE);
	END
END;

CREATE OR ALTER TRIGGER MIN_TABELAS_REPOSITORIO_AIU FOR TABELAS_REPOSITORIO BEFORE INSERT OR UPDATE
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO
    FROM MINERADO_TABELAS_REPOSITORIO MTR
    WHERE MTR.CODIGOVEICULO = NEW.CODIGOVEICULO AND MTR.SESSAO = NEW.SESSAO
    INTO :CODIGO;

    IF (CODIGO IS NULL) THEN
        INSERT INTO MINERADO_TABELAS_REPOSITORIO (CODIGOVEICULO, SESSAO) VALUES (NEW.CODIGOVEICULO, NEW.SESSAO);

    NEW.MINERADO = 'F';
END;

---------------------------------------------------------------------------------------
-- Versao: 4.4.1.0 | Correo de Triggers
---------------------------------------------------------------------------------------
DROP TRIGGER MIN_SM_APONTAMENTOS_AIU;

CREATE TRIGGER MIN_SM_APONTAMENTOS_AIU FOR SETORES_MANUAIS_APONTAMENTOS AFTER INSERT OR UPDATE
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    SELECT FIRST 1 MTR.CODIGO_SM_APONTAMENTOS
    FROM MINERADO_SM_APONTAMENTOS MTR
    WHERE MTR.CODIGO_SM_APONTAMENTOS = NEW.CODIGO_SETOR_MANUAL
    INTO :CODIGO;

    IF (CODIGO IS NULL) THEN
        INSERT INTO MINERADO_SM_APONTAMENTOS (CODIGO_SM_APONTAMENTOS) VALUES (NEW.CODIGO_SETOR_MANUAL);
END;


#### 
# Depende do Integrador de Balnaca
# https://dev.azure.com/grupo-inlog/Manuten%C3%A7%C3%A3o%20de%20Clientes/_git/Inlog.Database.Firebird?path=/Inlog.Database.Firebird/Scripts/Inlog.Services.ProCollect.ImportacaoBalanca/1.0.0/003%20-%20ALTER%20TABLE%20TABELAS_REPOSITORIO_CAMPOS.sql&_a=contents&version=GBmaster
#############