CREATE OR REPLACE PROCEDURE AGH.FECHAR_ABRIR_FAT_COMPETENCIA (p_modulo IN VARCHAR2, p_openOrClose IN NUMBER)
IS
BEGIN
	IF p_openOrClose = 0 THEN
		INSERT INTO agh.FAT_COMPETENCIAS(modulo, mes, ano, dt_hr_inicio, ind_faturado, dt_hr_fim, criado_por, alterado_por, criado_em, alterado_em, ind_situacao, dthr_liberado_co, dthr_liberado_emerg, dthr_encerra_estatistica, VERSION, versao_sisaih)
		VALUES(UPPER(p_modulo), -- MODULO
		TRUNC(TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'MM')), -- MES
		TRUNC(TO_CHAR(SYSDATE, 'YYYY')), -- ANO
		TRUNC(ADD_MONTHS(SYSDATE, 1), 'MM'), -- DT_HR_INICIO
		'N', -- IND_FATURADO
		NULL, -- DT_HR_FIM
		'AGHU', -- CRIADO_POR
		'AGHU', -- ALTERADO_POR
		SYSDATE, -- CRIADO_EM
		NULL, 'A', NULL, NULL, NULL, 0, NULL);
	ELSIF p_openOrClose = 1 THEN
		UPDATE agh.FAT_COMPETENCIAS
		SET ind_faturado='S',
		    dt_hr_fim=TRUNC(LAST_DAY(SYSDATE)),
		    ind_situacao='P',
		    alterado_em=SYSDATE
		WHERE modulo=UPPER(p_modulo)
		  AND ind_situacao='A'
		  AND mes=TRUNC(TO_CHAR(SYSDATE, 'MM'))
		  AND ano=TRUNC(TO_CHAR(SYSDATE, 'YYYY'));
	END IF;
COMMIT;
END FECHAR_ABRIR_FAT_COMPETENCIA;

COMMIT;

CREATE OR REPLACE PROCEDURE AGH.UPDATE_FAT_COMPETENCIA IS
BEGIN
	AGH.FECHAR_ABRIR_FAT_COMPETENCIA('AMB', 1); -- FECHA COMPETENCIA MES ANTERIOR
	AGH.FECHAR_ABRIR_FAT_COMPETENCIA('AMB', 0); -- ABRE COMPETENCIA MES ATUAL
	AGH.FECHAR_ABRIR_FAT_COMPETENCIA('INT', 1); -- FECHA COMPETENCIA MES ANTERIOR
	AGH.FECHAR_ABRIR_FAT_COMPETENCIA('INT', 0); -- ABRE COMPETENCIA MES ATUAL
END UPDATE_FAT_COMPETENCIA;

COMMIT;

BEGIN
	DBMS_SCHEDULER.CREATE_JOB
	(
		JOB_NAME => 'JB_UPDATE_FAT_COMPETENCIA',
		JOB_TYPE => 'STORED_PROCEDURE',
		JOB_ACTION => 'AGH.UPDATE_FAT_COMPETENCIA',
		START_DATE => TO_DATE(CONCAT(TO_CHAR(LAST_DAY(SYSDATE), 'DD/MM/YYYY'), ' 23:59:00'), 'DD/MM/YYYY HH24:MI:SS'),
		REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=-1; BYHOUR=23; BYMINUTE=59;',
		END_DATE => NULL,
		ENABLED => TRUE,
		COMMENTS => 'ENCERRA E CRIA UMA NOVA COMPETENCIA NA TABELA AGH.FAT_COMPETENCIAS.'
	);
END;

COMMIT;