/**
 * Cria lista de preços do TCO no dia para todas as regiões cadastradas no sistema 
 * revisada
 */
CREATE OR REPLACE PROCEDURE REGISTRA_LISTAPRECOTCO_DIA
AS
	V_CDFILIAL VARCHAR2(4);
	V_CDOPERADOR VARCHAR2(12);
	V_NRORG NUMBER;
	V_NRLISTAPRECOTCO NUMBER;
BEGIN
	SELECT MAX(CDFILIAL), MAX(CDOPERINCLUSAO), MAX(NRORG)
	  INTO V_CDFILIAL, V_CDOPERADOR, V_NRORG
	  FROM PARAMTCO;

	IF V_CDFILIAL IS NOT NULL AND V_NRORG IS NOT NULL AND V_CDOPERADOR IS NOT NULL THEN
		FOR C_REGIAO IN
		(
			SELECT CDREGIAO
			  FROM REGIAO	  
		) LOOP
			GRAVA_LISTAPRECOTCO(TRUNC(SYSDATE), C_REGIAO.CDREGIAO, V_NRORG, V_CDOPERADOR, V_NRLISTAPRECOTCO);
		END LOOP;
	END IF;

	COMMIT;
END;
/

/**
 * Registro do job para execução diária da rotina REGISTRA_LISTAPRECOTCO_DIA
 */
DECLARE
  V_JOB_EXISTS NUMBER;
BEGIN
  -- Mantida para apagar jobs no formato anterior
  FOR C_JOBS IN (SELECT JOB
                   FROM ALL_JOBS
                  WHERE WHAT LIKE '%REGISTRA_LISTAPRECOTCO_DIA%') LOOP
    DBMS_JOB.REMOVE(C_JOBS.JOB);
  END LOOP;

  SELECT COUNT(*) INTO V_JOB_EXISTS
     FROM USER_SCHEDULER_JOBS
    WHERE JOB_NAME = 'JOB_REGISTRA_LISTAPRECOTCO_DIA';

   IF V_JOB_EXISTS > 0 THEN
      DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'JOB_REGISTRA_LISTAPRECOTCO_DIA');
   END IF;

  DBMS_SCHEDULER.CREATE_JOB (
      job_name => 'JOB_REGISTRA_LISTAPRECOTCO_DIA',
      job_type => 'PLSQL_BLOCK',
      job_action => 'BEGIN REGISTRA_LISTAPRECOTCO_DIA(); END;',
      start_date => SYSDATE,
      repeat_interval => 'FREQ=DAILY;BYHOUR=3;BYMINUTE=30',
      end_date => NULL,
      enabled => TRUE,
      comments => 'Job criado para copiar preços da lista de preço por região diariamente para o TCO'
  );
  COMMIT;
END;
/