Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE
- PROCEDURE PR_REPROCESSAR_VENCIMENTO(parametro IN VARCHAR2) AS
- BEGIN
- DECLARE VCOUNT INTEGER := 0;
- DATA_ABERTURA VARCHAR(30);
- SLA_TURNO NUMBER := 0;
- DATA_VENCIMENTO VARCHAR(30);
- TOTAL_HORAS_TURNO VARCHAR(4);
- total_horas_dia INTEGER := 0;
- total_minutos_dia NUMERIC (15,2) := 0;
- total_segundos_dia INTEGER := 0;
- V_SLA_TEMP VARCHAR(6);
- VID NUMBER;
- V_DIA_PULO INTEGER := 1;
- V_DIA_FERIADO INTEGER := 0;
- VDATAFINAL NUMBER;
- VOPENDATE NUMBER;
- VCATEGORY VARCHAR(30);
- VREFNUM NUMBER;
- DATA_FINAL_TURNO VARCHAR(30);
- vrTempo DATE := SYSDATE;
- vrTempoF DATE;
- VDIAMESANO VARCHAR(10);
- VREQID VARCHAR(10);
- BEGIN
- VREQID := parametro;
- -- OBTER DADOS CALL_REQ
- SELECT open_date,category,REF_NUM INTO VOPENDATE,VCATEGORY,VREFNUM FROM call_req WHERE persid = VREQID;
- DATA_ABERTURA := TO_CHAR((TIMESTAMP '1970-01-01 00:00:00 GMT' + NUMTODSINTERVAL(VOPENDATE, 'SECOND')) AT TIME ZONE 'AMERICA/BAHIA', 'dd/mm/yy hh24:mi:ss');
- -- DATA INICIO DO TURNO
- DATA_VENCIMENTO := to_date(sysdate, 'dd/mm/yy hh24:mi:ss');
- -- DATA FINAL TURNO
- DATA_FINAL_TURNO := to_char(to_date(sysdate || ' 18:00:00', 'dd/mm/yy hh24:mi:ss'), 'dd/mm/yy hh24:mi:ss');
- -- CALCULA HORA QUE RESTA
- vrTempo := to_date(DATA_ABERTURA, 'dd/mm/yy hh24:mi:ss');
- vrTempoF := to_date(DATA_FINAL_TURNO, 'dd/mm/yy hh24:mi:ss');
- total_horas_dia := TRUNC(( (vrTempoF - vrTempo) * 86400 / 3600));
- total_minutos_dia := TRUNC(MOD( (vrTempoF - vrTempo) * 86400 , 3600 ) / 60 );
- total_segundos_dia := TRUNC(MOD(MOD( (vrTempoF - vrTempo) * 86400, 3600 ), 60));
- -- SLA TURNO
- SELECT (SELECT CASE WHEN CAST (REPLACE(srv_desc.z_sla_time_desc,' Horas','') AS NUMBER) IS NULL THEN 0 ELSE CAST (REPLACE(srv_desc.z_sla_time_desc,' Horas','') AS NUMBER) END FROM prob_ctg
- INNER JOIN srv_desc ON srv_desc.code = prob_ctg.service_type AND prob_ctg.persid = VCATEGORY AND prob_ctg.del=0) INTO SLA_TURNO FROM DUAL;
- -- SE O HORARIO DE ABERTURA AINDA NÃO FOR 8 HORAS DIMINUA 1 DIA
- IF(total_horas_dia > 9) THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') - 1;
- END IF;
- -- SE O SLA JÁ PASSOU DO HORARIO DE ABERTURA OU NÃO ESTA NO HORARIO DE INICIO DO TURNO NÃO ABATE HORAS
- IF ((total_horas_dia <= 0 AND total_minutos_dia < 5) OR total_horas_dia > 9 ) THEN
- V_SLA_TEMP := SLA_TURNO;
- ELSE
- TOTAL_HORAS_TURNO := total_horas_dia || ',' || total_minutos_dia;
- V_SLA_TEMP := SLA_TURNO - TOTAL_HORAS_TURNO;
- END IF;
- WHILE V_SLA_TEMP > 0 LOOP
- IF V_SLA_TEMP >= 10 THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- V_DIA_FERIADO := 1;
- WHILE V_DIA_FERIADO = 1 LOOP
- -- VERIFICA SE O DIA É SABADO OU DOMINGO ;
- SELECT COUNT(*) INTO V_DIA_FERIADO FROM dual WHERE (to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss'),'d') IN (1,7));
- IF (V_DIA_FERIADO = 1) THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- ELSE
- V_DIA_FERIADO := 0;
- END IF;
- -- VERIFICA SE O DIA É FERIADO
- IF V_DIA_FERIADO = 0 THEN
- SELECT CASE WHEN (SELECT INSTR(sched, to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'mm/dd/yyyy')) FROM bpwshft WHERE sym = 'Turno 8-18') > 0 THEN 1 ELSE 0 END INTO V_DIA_FERIADO FROM dual;
- IF (V_DIA_FERIADO = 1) THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- ELSE
- V_DIA_FERIADO := 0;
- END IF;
- END IF;
- END LOOP;
- -- SETAR DATA INICIAL 08:00 DO SLA
- VDIAMESANO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'dd/mm/yy');
- DATA_VENCIMENTO := to_date(to_date(VDIAMESANO, 'dd/mm/yy') || ' 08:00:00', 'dd/mm/yy hh24:mi:ss');
- DATA_VENCIMENTO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + (8 / 24), 'dd/mm/yy hh24:mi:ss');
- SELECT CAST (ROUND((to_date(to_char(TO_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss'), 'YYYYMMDD HH24MISS'), 'YYYYMMDD HH24MISS') - TO_DATE('19700101 205959', 'YYYYMMDD HH24MISS')+1)* 86400) AS NUMERIC) INTO VDATAFINAL FROM DUAL;
- VID := Z_TR_VENCIMENTO_SEQUENCE.NEXTVAL;
- INSERT INTO z_vencimento(id,z_abertura, z_chamado, z_complemento_sla, z_data_vencimento, z_final_turno, z_tipo_serv, z_category,z_vencimento_final)
- VALUES (VID,DATA_ABERTURA,VREFNUM,V_SLA_TEMP,DATA_VENCIMENTO,TOTAL_HORAS_TURNO,SLA_TURNO || ' Horas',VCATEGORY,VDATAFINAL);
- V_SLA_TEMP := V_SLA_TEMP - 10;
- -- CHEGOU AO FIM DO SLA EFETUA UPDATE
- IF(V_SLA_TEMP = 0) THEN
- UPDATE call_req SET z_vencimento_cr = CAST(VDATAFINAL AS NUMBER)
- WHERE ref_num = to_char(VREFNUM);
- END IF;
- ELSE -- QUANDO O SLA É MENOR QUE 10 SIGNIFICA QUE ELE JÁ CHEGOU NO FINAL
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- V_DIA_FERIADO := 1;
- WHILE V_DIA_FERIADO = 1 LOOP
- -- VERIFICA SE O DIA É SABADO OU DOMINGO ;
- SELECT COUNT(*) INTO V_DIA_FERIADO FROM dual WHERE (to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss'),'d') IN (1,7)) FROM DUAL;
- IF (V_DIA_FERIADO = 1) THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- ELSE
- V_DIA_FERIADO := 0;
- END IF;
- -- VERIFICA SE O DIA É FERIADO
- IF V_DIA_FERIADO = 0 THEN
- SELECT CASE WHEN (SELECT INSTR(sched, to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'mm/dd/yyyy')) FROM bpwshft WHERE sym = 'Turno 8-18') > 0 THEN 1 ELSE 0 END INTO V_DIA_FERIADO FROM dual;
- IF (V_DIA_FERIADO = 1) THEN
- DATA_VENCIMENTO := to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + 1;
- ELSE
- V_DIA_FERIADO := 0;
- END IF;
- END IF;
- END LOOP;
- -- SE TEM MINUTOS PEGA OS MINUTOS QUE RESTA;
- IF (LENGTH(V_SLA_TEMP) > 1) THEN
- total_horas_dia := CAST (substr (V_SLA_TEMP, 0, INSTR(V_SLA_TEMP, ',', 1)-1) AS NUMERIC);
- total_minutos_dia := CAST (substr (V_SLA_TEMP, INSTR(V_SLA_TEMP, ',', 1) + 1, 2) AS NUMERIC);
- ELSE
- total_horas_dia := CAST(V_SLA_TEMP AS NUMERIC);
- total_minutos_dia := 0;
- total_segundos_dia := 0;
- END IF;
- -- SETAR DATA INICIAL 08:00 DO SLA
- VDIAMESANO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'dd/mm/yy');
- DATA_VENCIMENTO := to_date(to_date(VDIAMESANO, 'dd/mm/yy') || ' 08:00:00', 'dd/mm/yy hh24:mi:ss');
- DATA_VENCIMENTO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + (8 / 24), 'dd/mm/yy hh24:mi:ss');
- IF(total_horas_dia > 0) THEN
- DATA_VENCIMENTO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + (total_horas_dia / 24), 'dd/mm/yy hh24:mi:ss');
- END IF;
- IF(total_minutos_dia > 0) THEN
- DATA_VENCIMENTO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + (total_minutos_dia / 1440), 'dd/mm/yy hh24:mi:ss');
- END IF;
- IF(total_segundos_dia > 0) THEN
- DATA_VENCIMENTO := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') + (total_segundos_dia / 86400), 'dd/mm/yy hh24:mi:ss');
- END IF;
- SELECT CAST (ROUND((to_date(to_char(TO_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss'), 'YYYYMMDD HH24MISS'), 'YYYYMMDD HH24MISS') - TO_DATE('19700101 205959', 'YYYYMMDD HH24MISS')+1)* 86400) AS NUMERIC) INTO VDATAFINAL FROM DUAL;
- VID := Z_TR_VENCIMENTO_SEQUENCE.NEXTVAL ;
- INSERT INTO z_vencimento(id,z_abertura, z_chamado, z_complemento_sla, z_data_vencimento, z_final_turno, z_tipo_serv,Z_CATEGORY,z_vencimento_final)
- VALUES (VID,DATA_ABERTURA,VREFNUM,V_SLA_TEMP,DATA_VENCIMENTO,TOTAL_HORAS_TURNO,SLA_TURNO || ' Horas',VCATEGORY,VDATAFINAL);
- -- VERIFICAR SE JA PASSOU DO HORARIO DO TURNO SE PASSOU PULE 1 DIA
- total_horas_dia := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'hh24');
- total_minutos_dia := to_char(to_date(DATA_VENCIMENTO, 'dd/mm/yy hh24:mi:ss') , 'mi');
- IF (total_horas_dia >= 18 AND total_minutos_dia > 0) THEN
- V_SLA_TEMP := 10;
- ELSE
- V_SLA_TEMP := 0;
- UPDATE call_req SET z_vencimento_cr = CAST(VDATAFINAL AS NUMBER)
- WHERE ref_num = to_char(VREFNUM);
- END IF;
- END IF;
- END LOOP;
- END;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement