Advertisement
tumbilandia

20120828_332789

Aug 28th, 2012
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- -------------------------------------------
  2. -- query
  3. -- -------------------------------------------
  4. SELECT  
  5.   T151.C1         NUMEROLLAMADA,
  6.   TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C3/86400),'dd/mm/yyyy hh24:mi:ss') FECHA_HORALLAMADA,
  7.   T151.C13        PRIORIDAD, -- esto es un número
  8.   T151.C7         ESTADO, -- esto es un número
  9.   TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C536870953/86400),'dd/mm/yyyy hh24:mi:ss') FECHAHORAENTRADA,
  10.   TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C536870950/86400),'dd/mm/yyyy hh24:mi:ss') FECHACIERRE,
  11.   T151.C536870929 GRUPOSOLUCION,
  12.   ROUND(calcula_horas_servicio(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C536870953/86400),
  13.   TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C536870950/86400),
  14.   TRUNC(HESTADOS.TIEMPOTOTAL/24)),2) TIEMPOTOTAL,
  15.   ROUND(HESTADOS.TIEMPOIMPLANTADOR,2) TIEMPOIMPLANTADOR,
  16.   ROUND(HESTADOS.TIEMPOCAU,2) TIEMPOCAU,  
  17.   ROUND(HESTADOS.TIEMPOUSUARIO,2) TIEMPOUSUARIO,
  18.   TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T151.C6/86400),'dd/mm/yyyy hh24:mi:ss') FECHAMODIFICACION,
  19.   T151.C536870941 GRUPO,
  20.   T151.C536870925 CONSEJERIA,
  21.   T151.C8         CENTRO,
  22.   T151.C536870915 DEPARTAMENTO,
  23.   T151.C536870913 AREA,
  24.   T151.C536870931 A1_NIVEL_PRODUCTO,
  25.   T151.C536870932 A2_NIVEL_PRODUCTO,
  26.   T151.C536870933 A3_NIVEL_PRODUCTO,
  27.   --T151.C536870934 A4_NIVEL_PRODUCTO,
  28.   T151.C536871143 A1_NIVEL_OPERACIONAL,
  29.   T151.C536871145 A2_NIVEL_OPERACIONAL,
  30.   T151.C536871099 A3_NIVEL_OPERACIONAL,  
  31.   HESTADOS.NUMSEGUIMIENTOS,
  32.   -- QUEJA
  33.   T151.C536871008 NREAPERTURAS,
  34.   -- RECLAMACIÓN
  35.   -- RESPUESTA
  36.   T151.C536871020 N__SOLUCIONES_PARCIALES_
  37.   -- SECUNDARIA
  38.   -- RECLAMACIÓN
  39.  
  40. FROM
  41.   aradmin.t151 T151,
  42.   (SELECT
  43.                T174.C8 CDINCIDENCIA,
  44.                COUNT(*) NUMSEGUIMIENTOS,
  45.                ROUND(SUM (C536870920)/3600,2) TIEMPOTOTAL,
  46.                calcula_horas_grupo(C8,'DAMADI%',1) TIEMPOIMPLANTADOR,
  47.                calcula_horas_grupo(C8,'%DASC%',1) TIEMPOCAU,
  48.                calcula_horas_grupo(C8,'',0) TIEMPOUSUARIO
  49.                FROM
  50.                aradmin.t174
  51.                GROUP BY T174.C8) HESTADOS              
  52.  
  53. WHERE
  54.  T151.C1 LIKE  '08-16095%'
  55.  AND
  56.  HESTADOS.CDINCIDENCIA =  T151.C1;
  57. /
  58.  
  59. -- -------------------------------------------
  60. -- calcula_horas_grupo
  61. -- -------------------------------------------
  62. CREATE OR REPLACE FUNCTION calcula_horas_grupo (incidencia VARCHAR2, grupo_estado VARCHAR2, es_grupo NUMBER)
  63. RETURN NUMBER IS
  64.  
  65.     total_horas_grupo NUMBER;
  66.  
  67.     CURSOR c1 IS
  68.       SELECT
  69.                calcula_horas_servicio(
  70.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T174.C536870915/86400),
  71.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T174.C536870916/86400),
  72.                    TRUNC((T174.C536870920)/86400)) TIEMPOFUNCION
  73.       FROM ARADMIN.T174
  74.       WHERE C8=incidencia
  75.       AND C536870913 LIKE grupo_estado;
  76.  
  77.     CURSOR c2  IS
  78.       SELECT
  79.                calcula_horas_servicio(
  80.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T174.C536870915/86400),
  81.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (T174.C536870916/86400),
  82.                    TRUNC((T174.C536870920)/86400)) TIEMPOFUNCION
  83.       FROM ARADMIN.T174
  84.       WHERE C8=incidencia
  85.       AND C536870927 IN ('Pend. Confirmación','Pendiente Usu');
  86.  
  87. BEGIN
  88.  
  89.     total_horas_grupo := 0;
  90.  
  91.     -- valores TRUE (1) y FALSE (0)
  92.     IF (es_grupo=1)
  93.     THEN
  94.         FOR tiempo_grupo_rec IN c1
  95.         LOOP
  96.             total_horas_grupo := total_horas_grupo + tiempo_grupo_rec.TIEMPOFUNCION;
  97.         END LOOP;
  98.     ELSE
  99.         FOR tiempo_grupo_rec IN c2
  100.         LOOP
  101.             total_horas_grupo := total_horas_grupo + tiempo_grupo_rec.TIEMPOFUNCION;
  102.         END LOOP;
  103.     END IF;
  104.  
  105.     RETURN total_horas_grupo;
  106. END;
  107.  
  108. -- -------------------------------------------
  109. -- calcula_horas_servicio
  110. -- -------------------------------------------
  111.  
  112. CREATE OR REPLACE FUNCTION calcula_horas_servicio(
  113.   finicio   IN   DATE,
  114.   ffin      IN   DATE,
  115.   dias      IN   NUMBER
  116.  
  117. ) RETURN NUMBER IS
  118.  
  119.   horas_dia_inicio NUMBER;
  120.   horas_dia_fin NUMBER;
  121.   horas_totales NUMBER;
  122.   dia_inicio VARCHAR2(10);
  123.   dia_fin VARCHAR2(10);
  124.   fecha_aux DATE;
  125.   finicio_aux DATE;
  126.   ffin_aux DATE;
  127.   dias_aux NUMBER;
  128.   cadena_hora_fija_inicio VARCHAR2(20);
  129.   cadena_hora_fija_fin VARCHAR2(20);
  130.   cadena_aux VARCHAR2(20);
  131.  
  132.   hora_fija_inicio CONSTANT VARCHAR2(10) := '09:00';
  133.   hora_fija_fin CONSTANT VARCHAR2(10) := '17:00';
  134.  
  135. BEGIN
  136.   cadena_hora_fija_inicio:=TO_CHAR(finicio,'dd/mm/yyyy hh24:mi');
  137.   cadena_hora_fija_fin:=TO_CHAR(ffin,'dd/mm/yyyy hh24:mi');
  138.  
  139.   --Adaptación de horario en la fecha de inicio
  140.   finicio_aux := finicio;
  141.   cadena_aux:=TO_CHAR(finicio,'hh24:mi');
  142.   IF (cadena_aux<hora_fija_inicio)
  143.   THEN
  144.      cadena_hora_fija_inicio := TO_CHAR(finicio,'dd/mm/yyyy') || ' ' || hora_fija_inicio;
  145.      finicio_aux := TO_DATE(cadena_hora_fija_inicio,'dd/mm/yyyy hh24:mi');
  146.   END IF;
  147.  
  148.   IF (TO_CHAR(finicio,'hh24:mi')>hora_fija_fin)
  149.   THEN
  150.      cadena_hora_fija_fin := TO_CHAR(finicio,'dd/mm/yyyy') || ' ' || hora_fija_fin;
  151.      finicio_aux := TO_DATE(cadena_hora_fija_fin,'dd/mm/yyyy hh24:mi');
  152.   END IF;
  153.  
  154.   --Adaptación de horario en la fecha de fin
  155.   ffin_aux := ffin;
  156.   IF (TO_CHAR(ffin,'hh24:mi')<hora_fija_inicio)
  157.   THEN
  158.      cadena_hora_fija_inicio := TO_CHAR(ffin,'dd/mm/yyyy') || ' ' || hora_fija_inicio;
  159.      ffin_aux := TO_DATE(cadena_hora_fija_inicio,'dd/mm/yyyy hh24:mi');
  160.   END IF;
  161.  
  162.   IF (TO_CHAR(ffin,'hh24:mi')>hora_fija_fin)
  163.   THEN
  164.      cadena_hora_fija_fin := TO_CHAR(ffin,'dd/mm/yyyy') || ' ' || hora_fija_fin;
  165.      ffin_aux := TO_DATE(cadena_hora_fija_fin,'dd/mm/yyyy hh24:mi');
  166.   END IF;
  167.  
  168. -- Aquí empieza el programa
  169. IF (ffin_aux > finicio_aux)
  170. THEN
  171.  
  172.   -- 1. Para el caso en que la incidencia se resuelva el mismo día
  173.   IF (TO_CHAR(finicio_aux,'dd/mm/yyyy')= TO_CHAR(ffin_aux,'dd/mm/yyyy'))
  174.     THEN
  175.        horas_totales := (ffin_aux-finicio_aux)*24;
  176.  
  177.        /*if horas_totales > 8
  178.           then horas_totales := 8;
  179.           end if;*/
  180.  
  181.   ELSE
  182.   -- 2. Para el caso en que la incidencia se resuelva en varios días
  183.  
  184.       -- 2.1. Calculamos primero las horas del día de inicio o registro de la incidencia
  185.       IF (TO_CHAR(finicio_aux,'hh24:mi')<= hora_fija_inicio)
  186.         THEN
  187.           horas_dia_inicio := 8;
  188.  
  189.         ELSE
  190.           -- Calculamos las horas del día inicial a partir de la hora de inicio, que será mayor que las '9:00'
  191.           dia_inicio := TO_CHAR(finicio_aux,'dd/mm/yyyy');
  192.           fecha_aux := TO_DATE(dia_inicio||' '||hora_fija_fin,'dd/mm/yyyy hh24:mi:ss');
  193.           horas_dia_inicio := (fecha_aux - finicio_aux)*24;
  194.       END IF;
  195.  
  196.       -- 2.2. A continuación calculamos las horas del día de resolución de la incidencia
  197.       IF (TO_CHAR(ffin_aux,'hh24:mi')>=hora_fija_fin)
  198.         THEN
  199.           horas_dia_fin := 8;
  200.  
  201.         ELSE
  202.           -- Calculamos las horas del día inicial a partir de la hora de inicio, que será mayor que las '9:00'
  203.           dia_fin := TO_CHAR(ffin_aux,'dd/mm/yyyy');
  204.           fecha_aux := TO_DATE(dia_fin||' '||hora_fija_inicio,'dd/mm/yyyy hh24:mi:ss');
  205.           horas_dia_fin := (ffin_aux - fecha_aux)*24;
  206.       END IF;
  207.  
  208.       -- 2.3. Calculamos las horas totales
  209.       dias_aux := dias;
  210.       IF dias_aux>0 AND TO_CHAR(ffin,'hh24:mi')>TO_CHAR(finicio,'hh24:mi')
  211.          THEN dias_aux := dias_aux-1;
  212.       END IF;
  213.  
  214.       horas_totales := horas_dia_inicio + (dias_aux*8) + horas_dia_fin;
  215.  
  216.  
  217.   END IF;
  218.  
  219. ELSE
  220.  horas_totales := 0;
  221. END IF;
  222.  
  223.   RETURN horas_totales;
  224. END;
  225.  
  226.  
  227.  
  228.  
  229. -- -------------------------------------------
  230. -- query INCIDENCIAS
  231. -- -------------------------------------------
  232.  
  233. SELECT i.numerollamada,
  234.        TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fecha_horallamada/86400),'dd/mm/yyyy hh24:mi:ss'),
  235.        i.prioridad,
  236.        i.estado,
  237.        TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fechahoraentrada/86400),'dd/mm/yyyy hh24:mi:ss'),
  238.        TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fechacierre/86400),'dd/mm/yyyy hh24:mi:ss'),
  239.        i.gruposolucion,
  240.        ROUND(calcula_horas_servicio(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fechahoraentrada/86400),
  241.        TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fechacierre/86400),
  242.        TRUNC(hestados.tiempototal/24)),2) tiempototal,
  243.        ROUND(hestados.tiempoimplantador,2) tiempoimplantador,
  244.        ROUND(hestados.tiempocau,2) tiempocau,  
  245.        ROUND(hestados.tiempousuario,2) tiempousuario,
  246.        TO_CHAR(TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (i.fechamodificacion/86400),'dd/mm/yyyy hh24:mi:ss') fechamodificacion,
  247.        i.grupo,
  248.        i.consejeria,
  249.        i.centro,
  250.        i.departamento,
  251.        i.area,
  252.        i.a1_nivel_producto,
  253.        i.a2_nivel_producto,
  254.        i.a3_nivel_producto,
  255.        --i.a4_nivel_producto,
  256.        i.operacional_nivel_1 a1_nivel_operacional,
  257.        i.operacional_nivel_2 a2_nivel_operacional,
  258.        i.operacional_nivel_3 a3_nivel_operacional,
  259.        --i.a3_nivel_operacional,  
  260.        hestados.numseguimientos,
  261.        -- queja
  262.        i.nreaperturas,
  263.        -- reclamación
  264.        -- respuesta
  265.        i.numsolucionesparciales
  266.        -- secundaria
  267.        -- reclamación
  268.   FROM incidencias i,
  269.        (SELECT h.idincidencia cdincidencia,
  270.                COUNT(*) numseguimientos,
  271.                ROUND(SUM (h.totalsg)/3600,2) tiempototal,
  272.                calcula_horas_grupo(idincidencia,'damadi%',1) tiempoimplantador,
  273.                calcula_horas_grupo(idincidencia,'%dasc%',1) tiempocau,
  274.                calcula_horas_grupo(idincidencia,'',0) tiempousuario              
  275.           FROM h_estados h
  276.          GROUP BY idincidencia) hestados
  277.  WHERE i.numerollamada=hestados.cdincidencia
  278.    AND i.numerollamada LIKE '12-32252%';
  279.  
  280. -- -------------------------------------------
  281. -- calcula_horas_grupo
  282. -- -------------------------------------------
  283.  
  284. CREATE OR REPLACE FUNCTION calcula_horas_grupo (incidencia VARCHAR2, grupo_estado VARCHAR2, es_grupo NUMBER)
  285. RETURN NUMBER IS
  286.  
  287.     total_horas_grupo NUMBER;
  288.  
  289.     CURSOR c1 IS
  290.       SELECT
  291.                calcula_horas_servicio(
  292.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (h.fechainicio/86400),
  293.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (h.fechafin/86400),
  294.                    TRUNC((h.totalsg)/86400)) TIEMPOFUNCION
  295.       FROM h_estados h
  296.       WHERE h.idincidencia=incidencia
  297.       AND h.grupo LIKE grupo_estado;
  298.  
  299.     CURSOR c2  IS
  300.       SELECT
  301.                calcula_horas_servicio(
  302.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (h.fechainicio/86400),
  303.                    TO_DATE('01/01/1970','dd/mm/yyyy hh24:mi:ss')+ (h.fechafin/86400),
  304.                    TRUNC((h.totalsg)/86400)) TIEMPOFUNCION
  305.       FROM h_estados h
  306.       WHERE h.idincidencia=incidencia
  307.       AND h.estado IN ('Pend. Confirmación','Pendiente Usu');
  308.  
  309. BEGIN
  310.  
  311.     total_horas_grupo := 0;
  312.  
  313.     -- valores true (1) y false (0)
  314.     IF (es_grupo=1)
  315.     THEN
  316.         FOR tiempo_grupo_rec IN c1
  317.         LOOP
  318.             total_horas_grupo := total_horas_grupo + tiempo_grupo_rec.tiempofuncion;
  319.         END LOOP;
  320.     ELSE
  321.         FOR tiempo_grupo_rec IN c2
  322.         LOOP
  323.             total_horas_grupo := total_horas_grupo + tiempo_grupo_rec.tiempofuncion;
  324.         END LOOP;
  325.     END IF;
  326.  
  327.     RETURN total_horas_grupo;
  328.  
  329. END;
  330.  
  331.  
  332. -- fin -----------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement