query_6-10-2022.sql 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. -- add column carrera_activa to table carrera
  2. ALTER TABLE CARRERA
  3. ADD CARRERA_ACTIVA BOOLEAN DEFAULT TRUE NOT NULL;
  4. -- add column fp_activo to facultad_profesor
  5. ALTER TABLE FACULTAD_PROFESOR
  6. ADD FP_ACTIVO BOOLEAN DEFAULT TRUE NOT NULL;
  7. -- CREATE A VIEW FROM USUARIO
  8. CREATE VIEW public.fs_usuario AS
  9. SELECT USUARIO_ID AS id,
  10. USUARIO_CLAVE AS clave,
  11. U.ROL_ID AS rol,
  12. ROL_TITULO AS titulo,
  13. USUARIO_NOMBRE AS username,
  14. USUARIO_CORREO AS email,
  15. USUARIO_ADMIN AS admin,
  16. facultad_id AS facultad
  17. FROM USUARIO U
  18. JOIN ROL R ON U.rol_id = R.rol_id;
  19. ALTER TABLE public.fs_usuario OWNER TO postgres;
  20. -- FUNCTION: public.fs_asistencia_reporte(integer, integer, character varying, character varying, date, date)
  21. DROP FUNCTION IF EXISTS public.fs_asistencia_reporte(integer, integer, character varying, character varying, date, date);
  22. CREATE OR REPLACE FUNCTION public.fs_asistencia_reporte(
  23. p_carrera int,
  24. p_periodo int,
  25. p_clave varchar,
  26. p_nombre varchar,
  27. p_facultad int,
  28. p_fecha_ini date DEFAULT now(),
  29. p_fecha_fin date DEFAULT now())
  30. RETURNS TABLE(profesor_id int, profesor_nombre varchar, profesor_clave varchar, total int, asistencias int, justificaciones int, retardos int)
  31. LANGUAGE 'sql'
  32. COST 100
  33. VOLATILE PARALLEL UNSAFE
  34. ROWS 1000
  35. AS $BODY$
  36. WITH dias AS (
  37. SELECT DIA.DATE AS FECHA, (SELECT EXTRACT(DOW FROM DIA)::SMALLINT) AS DIA_ID
  38. FROM GENERATE_SERIES(P_FECHA_INI, P_FECHA_FIN, '1 DAY'::INTERVAL) AS DIA
  39. WHERE DIA.DATE NOT IN(SELECT DIASFESTIVOS_DIA FROM DIASFESTIVOS WHERE PERIODO_ID = P_PERIODO)
  40. )
  41. SELECT DISTINCT PROF.PROFESOR_ID, PROF.PROFESOR_NOMBRE, PROF.PROFESOR_CLAVE,
  42. COALESCE (TOT.TOTAL, 0) , COALESCE (TMP.TOTAL, 0), COALESCE (TMPJ.TOTAL, 0) , COALESCE (RET.TOTAL, 0)
  43. FROM HORARIO HOR
  44. INNER JOIN PROFESOR PROF ON HOR.PROFESOR_ID = PROF.PROFESOR_ID
  45. INNER JOIN FACULTAD_PROFESOR FP ON FP.profesor_id = PROF.profesor_id and fp.facultad_id = p_facultad
  46. INNER JOIN MATERIA MAT ON MAT.MATERIA_ID = HOR.MATERIA_ID
  47. LEFT JOIN (
  48. SELECT -- TOTAL
  49. HOR.PROFESOR_ID, COUNT(1) AS TOTAL FROM HORARIO HOR
  50. INNER JOIN PROFESOR PROF ON HOR.PROFESOR_ID = PROF.PROFESOR_ID
  51. INNER JOIN MATERIA MAT ON MAT.MATERIA_ID = HOR.MATERIA_ID
  52. INNER JOIN DIAS AS D ON DIA_ID = HORARIO_DIA
  53. LEFT JOIN CARRERA C ON C.CARRERA_ID = MAT.CARRERA_ID
  54. WHERE MAT.CARRERA_ID = COALESCE(P_CARRERA, MAT.CARRERA_ID) AND PERIODO_ID = P_PERIODO AND P_FACULTAD = C.FACULTAD_ID
  55. GROUP BY HOR.PROFESOR_ID
  56. ) AS TOT ON TOT.PROFESOR_ID = PROF.PROFESOR_ID
  57. LEFT JOIN(
  58. SELECT -- ASISTENCIAS
  59. HOR.PROFESOR_ID,
  60. COUNT(1) AS TOTAL
  61. FROM REGISTRO R
  62. INNER JOIN HORARIO HOR ON HOR.HORARIO_ID = r.HORARIO_ID
  63. INNER JOIN PROFESOR PROF ON HOR.PROFESOR_ID = PROF.PROFESOR_ID
  64. INNER JOIN MATERIA MAT ON MAT.MATERIA_ID = HOR.MATERIA_ID
  65. LEFT JOIN CARRERA C ON C.CARRERA_ID = MAT.CARRERA_ID
  66. WHERE MAT.CARRERA_ID = COALESCE(P_CARRERA, MAT.CARRERA_ID) AND PERIODO_ID = P_PERIODO AND NOT REGISTRO_RETARDO AND NOT REGISTRO_JUSTIFICADA AND R.REGISTRO_FECHA BETWEEN P_FECHA_INI AND P_FECHA_FIN AND P_FACULTAD = C.FACULTAD_ID
  67. GROUP BY HOR.PROFESOR_ID
  68. ) AS TMP ON TMP.PROFESOR_ID = PROF.PROFESOR_ID
  69. LEFT JOIN(
  70. SELECT -- JUSTIFICADAS
  71. HOR.PROFESOR_ID,
  72. COUNT(1) AS TOTAL
  73. FROM REGISTRO R
  74. INNER JOIN HORARIO HOR ON HOR.HORARIO_ID = r.HORARIO_ID
  75. INNER JOIN PROFESOR PROF ON HOR.PROFESOR_ID = PROF.PROFESOR_ID
  76. INNER JOIN MATERIA MAT ON MAT.MATERIA_ID = HOR.MATERIA_ID
  77. LEFT JOIN CARRERA C ON C.CARRERA_ID = MAT.CARRERA_ID
  78. INNER JOIN FACULTAD F ON F.FACULTAD_ID = C.FACULTAD_ID
  79. WHERE MAT.CARRERA_ID = COALESCE(P_CARRERA, MAT.CARRERA_ID) AND PERIODO_ID = P_PERIODO AND NOT REGISTRO_RETARDO AND REGISTRO_JUSTIFICADA AND R.REGISTRO_FECHA BETWEEN P_FECHA_INI AND P_FECHA_FIN AND P_FACULTAD = C.FACULTAD_ID
  80. GROUP BY HOR.PROFESOR_ID
  81. ) AS TMPJ ON TMPJ.PROFESOR_ID = PROF.PROFESOR_ID
  82. LEFT JOIN (
  83. SELECT -- RETARDOS
  84. HOR.PROFESOR_ID,
  85. COUNT(1) AS TOTAL
  86. FROM REGISTRO R
  87. INNER JOIN HORARIO HOR ON HOR.HORARIO_ID = r.HORARIO_ID
  88. INNER JOIN PROFESOR PROF ON HOR.PROFESOR_ID = PROF.PROFESOR_ID
  89. INNER JOIN MATERIA MAT ON MAT.MATERIA_ID = HOR.MATERIA_ID
  90. LEFT JOIN CARRERA C ON C.CARRERA_ID = MAT.CARRERA_ID
  91. INNER JOIN FACULTAD F ON F.FACULTAD_ID = C.FACULTAD_ID
  92. WHERE MAT.CARRERA_ID = COALESCE(P_CARRERA, MAT.CARRERA_ID) AND PERIODO_ID = P_PERIODO AND REGISTRO_RETARDO AND R.REGISTRO_FECHA BETWEEN P_FECHA_INI AND P_FECHA_FIN AND P_FACULTAD = C.FACULTAD_ID
  93. GROUP BY HOR.PROFESOR_ID
  94. ) AS RET ON RET.PROFESOR_ID = PROF.PROFESOR_ID
  95. WHERE PROFESOR_NOMBRE ILIKE '%' || COALESCE(P_NOMBRE,'') || '%' AND PROFESOR_CLAVE = COALESCE(P_CLAVE, PROFESOR_CLAVE)
  96. ORDER BY PROFESOR_NOMBRE
  97. $BODY$;
  98. DROP FUNCTION IF EXISTS public.fs_asistencia_profesorreporte(integer, integer, integer, date, date);
  99. CREATE OR REPLACE FUNCTION public.fs_asistencia_profesorreporte(
  100. p_carrera integer,
  101. p_periodo integer,
  102. p_idprof integer,
  103. p_fecha_ini date DEFAULT now(),
  104. p_fecha_fin date DEFAULT now())
  105. RETURNS TABLE(profesor_id integer, profesor character varying, profesor_clave character varying, horario_fecha date, horario_hora_inicio time without time zone, registro_hora time without time zone, horario_salon character varying, horario_grupo character varying, materia_id int, materia_nombre character varying, carrera integer, checado boolean, retardo boolean, justificada boolean)
  106. LANGUAGE 'sql'
  107. COST 100
  108. VOLATILE PARALLEL UNSAFE
  109. ROWS 1000
  110. AS $BODY$
  111. WITH dias AS (
  112. SELECT dia.date AS fecha, (SELECT EXTRACT(DOW FROM dia)::smallint) AS dia_id
  113. FROM generate_series(p_fecha_ini, p_fecha_fin, '1 day'::interval) AS dia
  114. WHERE dia.date NOT IN(SELECT diasfestivos_dia FROM diasfestivos WHERE periodo_id = COALESCE(p_periodo, PERIODO_ID))
  115. )
  116. SELECT profesor_id, profesor_nombre, profesor_clave, fe.fecha, fe.horario_hora_inicio, reg.registro_fecha::time, fe.horario_salon,fe.horario_grupo, fe.materia_id, fe.materia_nombre, fe.carrera_id,
  117. CASE WHEN reg.registro_fecha IS NULL THEN false ELSE true END AS checado,
  118. reg.registro_retardo, reg.registro_justificada
  119. FROM (
  120. SELECT prof.profesor_id, profesor_nombre, profesor_clave, hor.horario_id, d.fecha, hor.horario_hora_inicio, hor.horario_salon, hor.horario_grupo, mat.materia_id, mat.materia_nombre, mat.carrera_id
  121. FROM dias as d
  122. INNER JOIN horario hor ON d.dia_id = hor.horario_dia
  123. INNER JOIN materia mat ON mat.materia_id = hor.materia_id
  124. INNER JOIN profesor prof ON prof.profesor_id = hor.profesor_id
  125. WHERE hor.profesor_id = COALESCE(p_idprof, hor.profesor_id) and mat.carrera_id = COALESCE(p_carrera, mat.carrera_id) AND periodo_id = COALESCE(p_periodo, PERIODO_ID)
  126. ) AS fe
  127. LEFT JOIN registro reg ON fe.horario_id = reg.horario_id AND fe.fecha = reg.registro_fecha_ideal::date
  128. ORDER BY fe.fecha
  129. $BODY$;
  130. ALTER FUNCTION public.fs_asistencia_profesorreporte(integer, integer, integer, date, date)
  131. OWNER TO postgres;
  132. DELETE FROM REGISTRO WHERE REGISTRO_ID IN (SELECT REGISTRO_ID FROM REGISTRO R
  133. JOIN HORARIO H ON H.HORARIO_ID = R.HORARIO_ID AND FACULTAD_ID = 1);
  134. DELETE FROM HORARIO WHERE FACULTAD_ID = 1;