Ver código fonte

ruct-changes-and-indicators

Mario Martínez Hernández 3 semanas atrás
pai
commit
543ae0c7b5

+ 62 - 45
src/main/java/es/uv/saic/shared/domain/IndicadorEnquestaRepository.java

@@ -50,50 +50,58 @@ public interface IndicadorEnquestaRepository extends JpaRepository<IndicadorEnqu
 			+ "WHERE eie.evidencia = ?1 AND eie.proces = ?2 AND ei.curs = ?5 AND ei.ambit = 'U'", nativeQuery=true)
 	List<IndicadorEnquestaValorDTO> getAssociatedInds(String evidencia, String proces, Integer titulacio, Integer centre, Integer curs);
 	
-	@Query(value="SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, ei.titulacio "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND ei.ambit = 'T' AND ei.centre = ?2 "
-			+ "AND (ei.titulacio = ?1 OR ei.titulacio IN(SELECT lugar_eq FROM organs_equivalents WHERE tlugar_eq = 'T' AND tlugar = 'T' AND lugar = ?1)) "
-			+ "UNION "
-			+ "SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND ei.ambit = 'C' AND ei.centre = ?2 "
-			+ "UNION "
-			+ "SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND ei.ambit = 'U' "
-			+ "ORDER BY 7 DESC ", nativeQuery=true)
-	List<IndicadorEnquestaValorDTO> getAllInds(Integer titulacio, Integer centre, Integer curs);
-	
-	@Query(value="SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, ei.titulacio "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'T' AND ei.centre = ?2 "
-			+ "AND (ei.titulacio = ?1 OR ei.titulacio IN(SELECT lugar_eq FROM organs_equivalents WHERE tlugar_eq = 'T' AND tlugar = 'T' AND lugar = ?1)) "
-			+ "UNION "
-			+ "SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'C' AND ei.centre = ?2 AND upper(ei.estudi) IN(?4, 'U') "
-			+ "UNION "
-			+ "SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'U' AND upper(ei.estudi) IN(?4, 'U') "
-			+ "ORDER BY 7 DESC ", nativeQuery=true)
-	List<IndicadorEnquestaValorDTO> getAllIndValsByEstudi(Integer titulacio, Integer centre, Integer curs, String estudi);
-	
-	@Query(value="SELECT ei.* "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'T' AND ei.centre = ?2 "
-			+ "AND (ei.titulacio = ?1 OR ei.titulacio IN(SELECT lugar_eq FROM organs_equivalents WHERE tlugar_eq = 'T' AND tlugar = 'T' AND lugar = ?1)) "
-			+ "UNION "
-			+ "SELECT ei.*  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'C' AND ei.centre = ?2 AND upper(ei.estudi) IN(?4, 'U') "
-			+ "UNION "
-			+ "SELECT ei.*  "
-			+ "FROM indicador_enquesta ei "
-			+ "WHERE ei.curs = ?3 AND upper(ei.ambit) = 'U' AND upper(ei.estudi) IN(?4, 'U') "
-			+ "ORDER BY 7 DESC ", nativeQuery=true)
-	List<IndicadorEnquesta> getAllIndsByEstudi(Integer titulacio, Integer centre, Integer curs, String estudi);
+	@Query(value="""
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, ei.titulacio
+		FROM indicador_enquesta ei
+		WHERE ei.curs = ?2 AND ei.ambit = 'T' AND ei.ruct = ?1
+		UNION
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio
+		FROM indicador_enquesta ei
+		WHERE ei.curs = ?2 AND ei.ambit = 'C' AND ei.ruct = (SELECT r.ruct FROM organs WHERE lugar = (SELECT lugar2 FROM organs WHERE ruct = ?1 AND tlugar = 'T'))
+		UNION
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio
+		FROM indicador_enquesta ei
+		WHERE ei.curs = ?2 AND ei.ambit = 'U'
+		ORDER BY 7 DESC
+		""", nativeQuery=true)
+	List<IndicadorEnquestaValorDTO> getAllInds(Integer ruct, Integer curs);
+	
+	@Query(value="""
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, ei.titulacio 
+		FROM indicador_enquesta ei 
+		WHERE ei.curs = ?3 AND ei.ruct = ?1
+		UNION 
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  
+		FROM indicador_enquesta ei 
+		WHERE ei.curs = ?3 AND UPPER(ei.ambit) = 'C' AND ei.centre = ?2 AND UPPER(ei.estudi) IN (?4, 'U') 
+		UNION 
+		SELECT LOWER(ei.enquesta) AS enquesta, LOWER(ei.indicador) AS indicador, ei.valor, ei.num, LOWER(ei.ambit) AS ambit, ei.tipus, ei.cursd, 0 AS titulacio  
+		FROM indicador_enquesta ei 
+		WHERE ei.curs = ?3 AND UPPER(ei.ambit) = 'U' AND UPPER(ei.estudi) IN (?4, 'U') 
+		ORDER BY 7 DESC;
+		""", nativeQuery=true)
+	List<IndicadorEnquestaValorDTO> getAllIndValsByEstudi(Integer ruct, Integer centre, Integer curs, String estudi);
+	
+	@Query(value = """
+       	WITH params AS (
+			SELECT lugar, lugar2 
+			FROM organs 
+			WHERE ruct = ?2
+		)
+		SELECT ei.*
+		FROM indicador_enquesta ei
+		CROSS JOIN params 
+		WHERE ei.curs = ?1
+		AND (
+			(UPPER(ei.ambit) = 'T' AND ei.centre = params.lugar2 AND ei.titulacio = params.lugar)
+			OR 
+			(UPPER(ei.ambit) = 'C' AND ei.centre = params.lugar2 AND UPPER(ei.estudi) IN (?3, 'U'))
+			OR 
+			(UPPER(ei.ambit) = 'U' AND UPPER(ei.estudi) IN (?3, 'U'))
+		)
+		ORDER BY 7 DESC;
+        """, nativeQuery = true)
+	List<IndicadorEnquesta> getAllIndsByEstudi(Integer curs, Integer ruct, String estudi);
 
 	@Query(value="SELECT * FROM indicador_enquesta WHERE ruct = ?1 AND curs = ?2", nativeQuery=true)
 	List<IndicadorEnquesta> getAllIndsByRuct(Integer ruct, Integer curs);
@@ -157,7 +165,16 @@ public interface IndicadorEnquestaRepository extends JpaRepository<IndicadorEnqu
 			+ "WHERE enquesta = ?1", nativeQuery=true)
 	int consolidateByEnquesta(String enquesta);
 	
-	@Query(value="SELECT ruct FROM organs WHERE lugar = ?1", nativeQuery=true)
+	@Query(value="SELECT ruct FROM organs WHERE lugar = ?1 AND ruct IS NOT NULL", nativeQuery=true)
 	Integer getRuctTitulacio(Integer titulacio);
+
+	@Query(value="""
+		SELECT * FROM indicador_enquesta 
+		WHERE (CONCAT(enquesta, '_',indicador), ambit, tipus, curs) IN 
+			(SELECT f.nombre, f.ambit, f.tipus, f.curs 
+			FROM json_to_recordset(CAST(?3 AS json)) 
+			AS f(nombre TEXT, ambit TEXT, tipus TEXT, curs INT)) AND ruct = ?1 AND centre = ?2;
+	""", nativeQuery=true)
+	List<IndicadorEnquestaValorDTO> getIndsList(Integer ruct, Integer centre, String filtros);
 }
 

+ 49 - 0
src/main/java/es/uv/saic/shared/domain/IndicadorFiltro.java

@@ -0,0 +1,49 @@
+package es.uv.saic.shared.domain;
+
+public class IndicadorFiltro {
+    String nombre;
+    String ambit;
+    String tipus;
+    Integer curs;
+
+    public IndicadorFiltro() {}
+
+    public IndicadorFiltro(String nombre, String ambit, String tipus, Integer curs) {
+        this.nombre = nombre;
+        this.ambit = ambit;
+        this.tipus = tipus;
+        this.curs = curs;
+    }
+    
+    public String getNombre() {
+        return nombre;
+    }
+
+    public void setNombre(String nombre) {
+        this.nombre = nombre;
+    }
+
+    public String getAmbit() {
+        return ambit;
+    }
+
+    public void setAmbit(String ambit) {
+        this.ambit = ambit;
+    }
+
+    public String getTipus() {
+        return tipus;
+    }
+
+    public void setTipus(String tipus) {
+        this.tipus = tipus;
+    }
+
+    public Integer getCurs() {
+        return curs;
+    }
+
+    public void setCurs(Integer curs) {
+        this.curs = curs;
+    }
+}

+ 3 - 1
src/main/java/es/uv/saic/shared/domain/OrganRepository.java

@@ -65,7 +65,7 @@ public interface OrganRepository extends JpaRepository<Organ, OrganPK> {
 	public List<Organ> findActiveTitulacionsByCentre(Integer centre);	
 	
 	@Query(value=("SELECT * FROM organs WHERE tlugar = 'T' AND lugar NOT IN (0, 1, 2) AND tlugar2 = 'C' AND lugar2 = ?1 AND CAST(lugar/1000 AS integer) = ?2 AND actiu ORDER BY nom_val"), nativeQuery=true)
-	public List<Organ> findActiveTitulacionsByTypeCentre(Integer centre, Integer type);	
+	public List<Organ> findActiveTitulacionsByTypeCentre(Integer centre, Integer lugar);	
 	
 	@Query(value=("SELECT * FROM organs WHERE tlugar = 'T' AND lugar NOT IN (0, 1, 2) AND tlugar2 = 'C' AND lugar2 = ?1 AND tambit = ?2 AND actiu ORDER BY nom_val"), nativeQuery=true)
 	public List<Organ> findActiveTitulacionsByCentreTambit(Integer centre, String tambit);
@@ -93,4 +93,6 @@ public interface OrganRepository extends JpaRepository<Organ, OrganPK> {
 				"FROM organs AS o1 JOIN organs AS o2 on o1.tlugar2 = o2.tlugar AND o1.lugar2 = o2.lugar WHERE o1.actiu = true;"), nativeQuery=true)
 	public List<OrganRepositoryDTO> findAllTitulacionsWithCentre();
 	
+	@Query(value= "SELECT tambit FROM organs WHERE ruct = ?1 AND ruct IS NOT NULL", nativeQuery=true)
+	public String getAmbitByRuct(Integer ruct);
 }

+ 32 - 0
src/main/java/es/uv/saic/shared/domain/TestRegex.java

@@ -0,0 +1,32 @@
+package es.uv.saic.shared.domain;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class TestRegex {
+    public static void main(String[] args) {
+        List<String> textos = Arrays.asList("{{data_g_it35_pe_(c)_(min)}}", "[[2024_data_g_it35_pe_(c)_(avg)]]", "{{data_g_it35_pe_(c)}}", "[[2024_data_g_it35_pe]]");
+        List<IndicadorFiltro> inds = new java.util.ArrayList<>();
+        String curs = "2024";
+        
+        String regex = "\\{\\{\\s*(.+?)(?:_\\(([^)]+)\\))(?:_\\(([^)]+)\\))\\s*\\}\\}";
+        String regexCursos = "\\[\\[\\s*(\\d{4})_(.+?)(?:_\\(([^)]+)\\))(?:_\\(([^)]+)\\))\\s*\\]\\]";
+
+        Pattern pattern = Pattern.compile(regex);
+        Pattern patternCursos = Pattern.compile(regexCursos);
+        
+        for (String texto : textos) {
+            Matcher matcher = pattern.matcher(texto);
+            Matcher matcherCursos = patternCursos.matcher(texto);
+            if (matcher.find()) {
+                inds.add(new IndicadorFiltro(matcher.group(1), matcher.group(2), matcher.group(3), Integer.parseInt(curs)));
+            } else if (matcherCursos.find()) {
+                inds.add(new IndicadorFiltro(matcherCursos.group(2), matcherCursos.group(3), matcherCursos.group(4), Integer.parseInt(matcherCursos.group(1))));
+            } else {
+                System.out.println("No hubo coincidencia para: " + texto);
+            }
+        }
+    }
+}

+ 11 - 1
src/main/java/es/uv/saic/shared/dto/TemplateDataDTO.java

@@ -13,12 +13,13 @@ public class TemplateDataDTO {
     String nomVal;
     String nomValTitulacio;
     String template;
+    String tambit;
 
     public TemplateDataDTO() {
     }
 
     public TemplateDataDTO(Integer idTitulacio, Integer cursAvaluat, String idCentre, String opcionsStr, String tlugar,
-            String lugar, BigInteger idInstaciaTasca, String nomVal, String nomValTitulacio, String template) {
+            String lugar, BigInteger idInstaciaTasca, String nomVal, String nomValTitulacio, String template, String tambit) {
         this.idTitulacio = idTitulacio;
         this.cursAvaluat = cursAvaluat;
         this.idCentre = idCentre;
@@ -29,6 +30,7 @@ public class TemplateDataDTO {
         this.nomVal = nomVal;
         this.nomValTitulacio = nomValTitulacio;
         this.template = template;
+        this.tambit = tambit;
     }
 
     public Integer getIdTitulacio() {
@@ -110,4 +112,12 @@ public class TemplateDataDTO {
     public void setTemplate(String template) {
         this.template = template;
     }
+
+    public String getTambit() {
+        return tambit;
+    }
+
+    public void setTambit(String tambit) {
+        this.tambit = tambit;
+    }
 }

+ 1 - 1
src/main/java/es/uv/saic/shared/feign/DataClient.java

@@ -43,5 +43,5 @@ public interface DataClient {
     public String addTemplateData(@RequestBody TemplateDataDTO td);
 
     @PostMapping("/template/addData2")
-    public String addTemplateData2(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs, @RequestBody String template);
+    public String addTemplateData2(@RequestParam Integer ruct, @RequestParam Integer centre, @RequestParam Integer curs, @RequestParam String tambit, @RequestBody String template);
 }

+ 4 - 4
src/main/java/es/uv/saic/shared/feign/IndicadorClient.java

@@ -71,14 +71,14 @@ public interface IndicadorClient {
     public Integer countByEnquesta(@PathVariable String enquesta);
 
     @PostMapping("/indicadorEnquesta/templatedata")
-    public HashMap<String, String> getTemplateData(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs, @RequestParam HashMap<String, String> context);
+    public HashMap<String, String> getTemplateData(@RequestParam Integer ruct, @RequestParam Integer centre, @RequestParam Integer curs, @RequestParam String tambit, @RequestParam HashMap<String, String> context);
 
     @PostMapping("/indicadorEnquesta/download/templatedata")
     public HashMap<String, String> getTemplateData(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs);
 
     @PostMapping("/indicadorEnquesta/templatedata/array")
-    public HashMap<String, String> getTemplateDataArray(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs);
+    public HashMap<String, String> getTemplateDataArray(@RequestParam Integer ruct, @RequestParam Integer centre, @RequestParam Integer curs, @RequestParam String tambit);
 
-    @GetMapping("/indicadorEnquesta/{ruct}/{curs}")
-    public List<IndicadorEnquesta> getAllIndsByRuct(@PathVariable Integer ruct, @PathVariable Integer curs);
+    @GetMapping("indicadorEnquesta/{ruct}/{curs}")
+    public List<IndicadorEnquesta> getAllInds(@PathVariable Integer ruct, @PathVariable Integer curs);
 }

+ 6 - 2
src/main/java/es/uv/saic/shared/feign/OrganClient.java

@@ -32,6 +32,7 @@ public interface OrganClient {
     @GetMapping("/organ/titulacions")
     public List<OrganDTO> getTitulacionsWithCentre();
     
+    //TODO: canviar endpoint a IndicadorClient
     @GetMapping("/organ/indicadors/{ruct}/{curs}")
     public List<IndicadorEnquesta> getAllIndsByRuct(@PathVariable Integer ruct, @PathVariable Integer curs);
 
@@ -76,7 +77,7 @@ public interface OrganClient {
     public List<OrganDTO> getTitulacionsByTypeCentre(@PathVariable Integer lugar, @PathVariable Integer ambit);
 
     @PostMapping("/organ/equivalents")
-	public List<Integer> getEquivalents(@RequestParam Integer lugar, @RequestParam String tlugar);
+	public List<Integer> getEquivalents(@RequestParam Integer ruct, @RequestParam String tlugar);
 
     @PostMapping("/organ/new/centre")
     public void createNewCentre(@RequestParam("codiCentro") Integer codigo,
@@ -106,6 +107,9 @@ public interface OrganClient {
 			@RequestParam("nomValTit") String nomVal,
 			@RequestParam("ructTit") Integer ruct,
 		    @RequestParam("centre") Integer idCentro,
-			@RequestParam("tambit") String ambit);  
+			@RequestParam("tambit") String ambit);
+
+    @GetMapping("/organ/ambit/{ruct}")
+    public String getAmbitByRuct(@PathVariable Integer ruct);
 }