Browse Source

Merge arreglado y Dashboard funcionando(casi)

Mario Martínez Hernández 4 months ago
parent
commit
3d62280aeb

+ 1 - 1
.vscode/settings.json

@@ -11,7 +11,7 @@
             "password": "acd425"
         }
     ],
-    "java.configuration.updateBuildConfiguration": "interactive",
+    "java.configuration.updateBuildConfiguration": "disabled",
     "java.compile.nullAnalysis.mode": "automatic",
     "java.dependency.syncWithFolderExplorer": false
 }

+ 3 - 3
src/main/java/es/uv/saic/domain/DummyDataTransfer.java

@@ -57,9 +57,9 @@ public class DummyDataTransfer {
 	public int hashCode() {
 		final int prime = 31;
 		int hash = 17;
-		hash = hash * prime + this.text.hashCode();
-		hash = hash * prime + this.text2.hashCode();
-		hash = hash * prime + this.text3.hashCode();
+		hash = (this.text != null) ? hash * prime + this.text.hashCode() : hash;
+		hash = (this.text2 != null) ? hash * prime + this.text2.hashCode() : hash;
+		hash = (this.text3 != null) ? hash * prime + this.text3.hashCode() : hash;
 		hash = hash * prime + Integer.toString(this.value).hashCode();
 		hash = hash * prime + Integer.toString(this.value2).hashCode();
 		hash = hash * prime + Integer.toString(this.value3).hashCode();

+ 2 - 0
src/main/java/es/uv/saic/domain/UsuarisRol.java

@@ -5,6 +5,8 @@ import java.io.Serializable;
 import jakarta.persistence.*;
 import java.util.Date;
 
+import es.uv.saic.dto.OrganDTO;
+
 /**
  * The persistent class for the usuaris_rols database table.
  * 

+ 47 - 1
src/main/java/es/uv/saic/dto/OrganDTO.java

@@ -1,5 +1,6 @@
 package es.uv.saic.dto;
 
+import es.uv.saic.domain.Acreditacio;
 import es.uv.saic.domain.Organ;
 
 public class OrganDTO{
@@ -11,15 +12,20 @@ public class OrganDTO{
     private String nomVal;
     private Integer ruct;
     private String tambit;
+    private String tambit2;
     private String nomCas2;
     private String nomVal2;
     private Integer ruct2;
+    private String codis;
+    private String codis2;
+    private Acreditacio acreditacio;
 
     public OrganDTO() {}
 
     public OrganDTO(Integer lugar, String tlugar, Integer lugar2, String tlugar2, 
                    String nomCas, String nomVal, Integer ruct, String tambit, 
-                   String nomCas2, String nomVal2, Integer ruct2) {
+                   String tambit2, String nomCas2, String nomVal2, Integer ruct2,
+                   String codis, String codis2, Acreditacio acreditacio) {
         this.lugar = lugar;
         this.tlugar = tlugar;
         this.lugar2 = lugar2;
@@ -28,9 +34,13 @@ public class OrganDTO{
         this.nomVal = nomVal;
         this.ruct = ruct;
         this.tambit = tambit;
+        this.tambit2 = tambit2;
         this.nomCas2 = nomCas2;
         this.nomVal2 = nomVal2;
         this.ruct2 = ruct2;
+        this.codis = codis;
+        this.codis2 = codis2;
+        this.acreditacio = acreditacio;
     }
 
     public OrganDTO(Organ organ) {
@@ -42,9 +52,13 @@ public class OrganDTO{
         this.nomVal = organ.getNomVal();
         this.ruct = organ.getRuct();
         this.tambit = organ.getTambit();
+        this.tambit2 = organ.getOrgan().getTambit();
         this.nomCas2 = organ.getOrgan().getNomCas();
         this.nomVal2 = organ.getOrgan().getNomVal();
         this.ruct2 = organ.getOrgan().getRuct();
+        this.codis = organ.getCodis();
+        this.codis2 = organ.getOrgan().getCodis();
+        this.acreditacio = organ.getAcreditacio();
     }
 
     public OrganDTO(OrganRepositoryDTO organ) {
@@ -93,6 +107,10 @@ public class OrganDTO{
         return tambit;
     }
 
+    public String getTambit2() {
+        return tambit2;
+    }
+
     public String getNomTCas() {
         return nomCas2;
     }
@@ -113,6 +131,18 @@ public class OrganDTO{
         return nomVal2;
     }
 
+    public String getCodis() {
+        return codis;
+    }
+
+    public String getCodis2() {
+        return codis2;
+    }
+
+    public Acreditacio getAcreditacio() {
+        return acreditacio;
+    }
+
     public void setLugar(Integer lugar) {
         this.lugar = lugar;
     }
@@ -145,6 +175,10 @@ public class OrganDTO{
         this.tambit = tambit;
     }
 
+    public void setTambit2(String tambit) {
+        this.tambit2 = tambit;
+    }
+
     public void setNomCas2(String nomCas2) {
         this.nomCas2 = nomCas2;
     }
@@ -156,4 +190,16 @@ public class OrganDTO{
     public void setRuct2(Integer ruct2) {
         this.ruct2 = ruct2;
     }
+
+    public void setCodis(String codis) {
+        this.codis = codis;
+    }
+
+    public void setCodis2(String codis) {
+        this.codis2 = codis;
+    }
+
+     public void setAcreditacio(Acreditacio acreditacio) {
+        this.acreditacio = acreditacio;
+    }
 }

+ 47 - 0
src/main/java/es/uv/saic/dto/UsuariDTO.java

@@ -0,0 +1,47 @@
+package es.uv.saic.dto;
+
+import es.uv.saic.domain.Usuari;
+
+public class UsuariDTO {
+    private String nom;
+    private String cognoms;
+    private String email;
+    
+    public UsuariDTO(String nom, String cognoms, String email) {
+        this.nom = nom;
+        this.cognoms = cognoms;
+        this.email = email;
+    }
+
+    public UsuariDTO(Usuari usuari) {
+        this.nom = usuari.getNom();
+        this.cognoms = usuari.getCognoms();
+        this.email = usuari.getEmail();
+    }
+
+    public String getNom() {
+        return nom;
+    }
+
+    public void setNom(String nom) {
+        this.nom = nom;
+    }
+
+    public String getCognoms() {
+        return cognoms;
+    }
+
+    public void setCognoms(String cognoms) {
+        this.cognoms = cognoms;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+    
+    
+}

+ 53 - 0
src/main/java/es/uv/saic/dto/UsuarisRolDTO.java

@@ -0,0 +1,53 @@
+package es.uv.saic.dto;
+
+import es.uv.saic.domain.Acreditacio;
+import es.uv.saic.domain.Usuari;
+import es.uv.saic.domain.UsuarisRol;
+
+public class UsuarisRolDTO {
+    private OrganDTO organ;
+    private Acreditacio acreditacio;
+    private RolDTO rol;
+    private UsuariDTO usuari;
+
+    public UsuarisRolDTO(OrganDTO organ, Acreditacio acreditacio, RolDTO rol, UsuariDTO usuari) {
+        this.organ = organ;
+        this.acreditacio = acreditacio;
+        this.rol = rol;
+        this.usuari = usuari;
+    }
+
+    public UsuarisRolDTO(UsuarisRol usuarisRol) {
+        this.organ = new OrganDTO(usuarisRol.getOrgan());
+        this.acreditacio = usuarisRol.getOrgan().getAcreditacio();
+        this.rol = new RolDTO(usuarisRol.getRol());
+        this.usuari = new UsuariDTO(usuarisRol.getUsuari());
+    }
+
+    public OrganDTO getOrgan() {
+        return organ;
+    }
+    public void setOrgan(OrganDTO organ) {
+        this.organ = organ;
+    }
+    public Acreditacio getAcreditacio() {
+        return acreditacio;
+    }
+    public void setAcreditacio(Acreditacio acreditacio) {
+        this.acreditacio = acreditacio;
+    }
+    public RolDTO getRol() {
+        return rol;
+    }
+    public void setRol(RolDTO rol) {
+        this.rol = rol;
+    }
+    public UsuariDTO getUsuari() {
+        return usuari;
+    }
+    public void setUsuari(UsuariDTO usuari) {
+        this.usuari = usuari;
+    }
+
+    
+}

+ 122 - 59
src/main/java/es/uv/saic/web/DashboardController.java

@@ -13,6 +13,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
@@ -33,8 +34,10 @@ import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import es.uv.saic.domain.Informe;
@@ -58,10 +61,12 @@ import es.uv.saic.dto.DocumentTmpDTO;
 import es.uv.saic.dto.IndicadorDTO;
 import es.uv.saic.dto.InstanciaDTO;
 import es.uv.saic.dto.InstanciaGanttDTO;
+import es.uv.saic.dto.OrganDTO;
 import es.uv.saic.dto.TreeDTOAny;
 import es.uv.saic.dto.TreeDTODimensio;
 import es.uv.saic.dto.TreeDTOInstancia;
 import es.uv.saic.dto.TreeDTOOrgan;
+import es.uv.saic.dto.UsuarisRolDTO;
 import es.uv.saic.feign.DocumentClient;
 import es.uv.saic.service.CategoriaService;
 import es.uv.saic.service.GraficaService;
@@ -71,6 +76,7 @@ import es.uv.saic.service.InformeService;
 import es.uv.saic.service.InstanciaService;
 import es.uv.saic.service.LinkService;
 import es.uv.saic.service.OrganService;
+import es.uv.saic.service.UsuariService;
 import es.uv.saic.service.UsuarisRolService;
 
 @Controller
@@ -80,6 +86,9 @@ public class DashboardController {
 	private OrganService os;
 	@Autowired
 	private UsuarisRolService urs;
+
+	@Autowired
+	private UsuariService us;
 	@Autowired
 	private InformeService infs;
 	@Autowired
@@ -107,17 +116,20 @@ public class DashboardController {
 	@Value("${saic.data.templates.fileNotFound}")
 	private String fileNotFound;
 	
-	// GET para cargar el dashboard con toda su información
-	@GetMapping("/dashboard")
-	public String getOrganList(Model model, Authentication auth) {
+	// POST para cargar el dashboard con toda su información
+	@PostMapping("/dashboard")
+	@ResponseBody
+	public HashMap<String, Object> getOrganList(@RequestBody String usuari) {
+		HashMap<String, Object> model = new HashMap<>();
 		List<Organ> titulacions = new ArrayList<Organ>();
 		List<Organ> centres = new ArrayList<Organ>();
+		Usuari u = us.findByUsername(usuari);
 		boolean showCentres = false;
-		Usuari u = (Usuari) auth.getPrincipal();
 		
 		if(urs.isGrantedUser(u)){
 			Organ o = os.findByID("C", 0);
-			return "redirect:/dashboard/"+o.getRuct();
+			model.put("redirect", "redirect:/dashboard/"+o.getRuct());
+			return model;
 		}		
 		else if(urs.isGrantedSupervisor(u)) {
 			titulacions = os.getTitulacions().stream().filter(o -> o.getOrgan().getId().getLugar() != 99).collect(Collectors.toList());
@@ -144,63 +156,73 @@ public class DashboardController {
 							 .collect(Collectors.toList());
 		}
 		if(centres.size() == 1) {
-			return "redirect:/dashboard/"+centres.get(0).getRuct();
+			model.put("redirect", "redirect:/dashboard/"+centres.get(0).getRuct());
+			return model;
 		}
 		else if(titulacions.size() == 1) {
-			return "redirect:/dashboard/"+titulacions.get(0).getRuct();
+			model.put("redirect", "redirect:/dashboard/"+titulacions.get(0).getRuct());
+			return model;
 		}
 		else {
-			model.addAttribute("showCentres", showCentres);
-			model.addAttribute("titulacions", titulacions);
-			return "dashboard";
+			model.put("showCentres", showCentres);
+			model.put("titulacions", titulacions.stream().map(OrganDTO::new).toList());
+			model.put("redirect", "dashboard");
+			return model;
 		}
 	}
 	
-	//GET para mostrar el dashboard a partir de un numero ruct
-	@GetMapping("/dashboard/{ruct}")
-	public String getDashboardOrgan(Model model, Authentication auth, @PathVariable("ruct") Integer ruct) {
+	//POST para mostrar el dashboard a partir de un numero ruct
+	@PostMapping("/dashboard/{ruct}")
+	@ResponseBody
+	public HashMap<String, Object> getDashboardOrgan(@PathVariable Integer ruct, @RequestBody String usuari) {
+		HashMap<String, Object> model = new HashMap<>();
 		Organ o = os.findByRuct(ruct);
+		Usuari u = us.findByUsername(usuari);
 		o.setCodis();
-		Usuari u = (Usuari) auth.getPrincipal();
+
 		if(!this.isSuitable(o, u)) {
-			return "401";
+			model.put("redirect", "401");
+			return model;
 		}
 		
 		if(o.getTambit().equals("C") && o.getId().getTlugar().equals("C") && o.getId().getLugar() == 0) {
 			List<Organ> tits = os.getTitulacions();
 			tits.forEach( (t) -> t.setCodis() );
-			model.addAttribute("titulacions", tits);
+			model.put("titulacions", tits.stream().map(OrganDTO::new).toList());
 			this.loadManagers(model, o.getId().getLugar(), o.getId().getLugar());
 		}
 		else if(o.getTambit().equals("C")){
 			List<Organ> tits = this.os.getTitulacionsByCentre(o.getId().getLugar());
-			model.addAttribute("titulacions", tits);
+			model.put("titulacions", tits.stream().map(OrganDTO::new).toList());
 			this.loadManagers(model, o.getId().getLugar(), o.getId().getLugar());	
 		}
 		else {
 			this.loadManagers(model, o.getOrgan().getId().getLugar(), o.getId().getLugar());
 		}
 		List<Categoria> c = cs.findFirstLevel(o.getId().getTlugar());
-		model.addAttribute("organ", o);
-		model.addAttribute("categories", c);		
-		model.addAttribute("editable", ((Usuari)auth.getPrincipal()).isAdmin() || ((Usuari)auth.getPrincipal()).isGranted());
-		model.addAttribute("showCentres", false);
+		model.put("organ", new OrganDTO(o));
+		model.put("categories", c);		
+		model.put("editable", (u.isAdmin() || (u.isGranted())));
+		model.put("showCentres", false);
 		if(o.getTambit().equals("C") && o.getId().getTlugar().equals("C") && o.getId().getLugar() == 0) {
-			model.addAttribute("showCentres", true);
+			model.put("showCentres", true);
 			c = cs.findFirstLevelAndU(o.getId().getTlugar());
-			model.addAttribute("categories", c);	
-			return "dashboardUniversitat";
+			model.put("categories", c);
+			model.put("redirect", "dashboardUniversitat");
+			return model;
 		}
 		else if(o.getTambit().equals("C")) {
-			return "dashboardCentre";
+			model.put("redirect", "dashboardCentre");
+			return model;
 		}
-		return "dashboardTitulacio";
+		model.put("redirect", "dashboardTitulacio");
+		return model;
 	}
 	
 	// GET para conseguir todos los procedimiento a partir del idTitulacio
-	@GetMapping("/dashboard/procedures/{idTitulacio}")
+	@PostMapping("/dashboard/procedures/{idTitulacio}")
 	@ResponseBody
-	public List<?> loadReports(Model model, Authentication auth, @PathVariable("idTitulacio") Integer idTitulacio) {
+	public List<?> loadReports(@PathVariable Integer idTitulacio) {
 		String locale = LocaleContextHolder.getLocale().getLanguage();
 		Organ o = os.findByRuct(idTitulacio);
 		List<Informe> informes = this.infs.findByGrupWebTambit("D", o.getTambit());
@@ -327,7 +349,7 @@ public class DashboardController {
 	// GET para conseguir la documentación ya a aportada a partir del id de la tituación
 	@GetMapping("/dashboard/documents/{idTitulacio}")
 	@ResponseBody
-	public List<CategoriaDocumentDTO> loadDocuments(Model model, @PathVariable("idTitulacio") Integer idTitulacio){
+	public List<CategoriaDocumentDTO> loadDocuments(@PathVariable Integer idTitulacio) {
 		String locale = LocaleContextHolder.getLocale().getLanguage();
 		Organ o = os.findByRuct(idTitulacio);
 		List<Categoria> parents = cs.findFirstLevelAndU(o.getId().getTlugar());
@@ -363,7 +385,7 @@ public class DashboardController {
 	// GET para conseguir el diagrama de gantt a partir del ruct
 	@GetMapping("/dashboard/gantt/{ruct}")
 	@ResponseBody
-	public List<InstanciaGanttDTO> loadGantt(Model model, @PathVariable("ruct") Integer ruct){
+	public List<InstanciaGanttDTO> loadGantt(@PathVariable Integer ruct) {
 		Organ o = os.findByRuct(ruct);
 		List<Integer> ambits = Arrays.asList(1, 2, 3, 0);
 		if(!o.getTambit().equals("C")) {
@@ -408,24 +430,21 @@ public class DashboardController {
 		
 	@GetMapping("/dashboard/documents/cats/{idCategoria}/{tambit}")
 	@ResponseBody
-	public List<Categoria> getDocumentChildCats(@PathVariable("idCategoria") Integer idCategoria, @PathVariable("tambit") String tambit){
-		List<Categoria> c = cs.findByPareTambit(idCategoria, tambit);
-		return c;
+	public List<Categoria> getDocumentChildCats(@PathVariable Integer idCategoria, @PathVariable String tambit) {
+		return cs.findByPareTambit(idCategoria, tambit);
 	}
 
 	@GetMapping("/dashboard/documents/catsu/{idCategoria}/{tambit}")
 	@ResponseBody
-	public List<Categoria> getDocumentChildCatsU(@PathVariable("idCategoria") Integer idCategoria, @PathVariable("tambit") String tambit){
-		List<Categoria> c = cs.findByPareTambitAndU(idCategoria, tambit);
-		System.out.println(c);
-		return c;
+	public List<Categoria> getDocumentChildCatsU(@PathVariable Integer idCategoria, @PathVariable String tambit) {
+		return cs.findByPareTambitAndU(idCategoria, tambit);
 	}
 	
 	// POST para guardar un documento en el sistema
 	@PostMapping("/dashboard/documents")
 	@ResponseBody
-	public void uploadDocument(Model model, @RequestParam MultipartFile file, @RequestParam("idCategoria") Integer idCategoria, 
-							   @RequestParam("lugar") Integer lugar, @RequestParam("tlugar") String tlugar) throws IllegalStateException, IOException {
+	public void uploadDocument(@RequestParam MultipartFile file, @RequestParam Integer idCategoria, 
+							   @RequestParam Integer lugar, @RequestParam String tlugar) throws IllegalStateException, IOException {
 		
 		Categoria cat = this.cs.findById(idCategoria);
 		Organ org = this.os.findByID(tlugar, lugar);
@@ -448,14 +467,15 @@ public class DashboardController {
 	// POST para añadir un documento a un centro cocncreto
 	@PostMapping("/dashboard/documents/archive")
 	@ResponseBody
-	public void archiveDocuments(Model model, @RequestParam("lugar") Integer lugar, @RequestParam("tlugar") String tlugar) {
-		this.archiveByOrgan(lugar, tlugar);
+	public void archiveDocuments(Model model, @RequestParam Integer lugar, @RequestParam String tlugar) {
+		ArchiveOrganDTO organ = new ArchiveOrganDTO(lugar, tlugar);
+		dc.archiveByOrgan(organ);
 	}
 
 	// GET para conseguir todos los graficos a partir de un RUCT
 	@GetMapping("/dashboard/graphs/list/{ruct}")
 	@ResponseBody
-	public List<Grafica> getGraphDataList(@PathVariable("ruct") Integer ruct) throws ParserConfigurationException{
+	public List<Grafica> getGraphDataList(@PathVariable Integer ruct) throws ParserConfigurationException {
 		Organ o = os.findByRuct(ruct);
 		if(o.getId().getTlugar().equals("C")) {
 			return this.gs.findLikeAmbit("%"+o.getId().getTlugar()+"%");
@@ -468,15 +488,14 @@ public class DashboardController {
 	//GET para conseguir todos los datos concretos de tasas para las tablas
 	@GetMapping("/dashboard/graphs/rates/{lugar}")
 	@ResponseBody
-	public List<Indicador> getGraphDataTaxes(@PathVariable("lugar") Integer lugar) throws ParserConfigurationException{
-		List<Indicador> inds = this.ids.getGraphData(lugar);
-		return inds;
+	public List<Indicador> getGraphDataTaxes(@PathVariable Integer lugar) throws ParserConfigurationException {
+		return this.ids.getGraphData(lugar);
 	}
 	
 	//GET para conseguir todos los datos concretos de cada gráfico
 	@GetMapping({"/dashboard/graphs/inds/{ruct}", "/dashboard/graphs/inds/{ruct}/{tambit}"})
 	@ResponseBody
-	public List<Indicador> getGraphData(@PathVariable("ruct") Integer ruct, @PathVariable("tambit") Optional<String> tambit) throws ParserConfigurationException{
+	public List<Indicador> getGraphData(@PathVariable Integer ruct, @PathVariable Optional<String> tambit) throws ParserConfigurationException {
 		Organ o = os.findByRuct(ruct);
 		int year = Year.now().getValue();
 		List<IndicadorDTO> data = new ArrayList<IndicadorDTO>();
@@ -526,8 +545,7 @@ public class DashboardController {
 
 	@GetMapping("/dashboard/links/{ruct}")
 	@ResponseBody
-	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
-	public List<Link> getLinks(@PathVariable("ruct") Integer ruct) {
+	public List<Link> getLinks(@PathVariable Integer ruct) {
 		List<Link> links = this.ls.findByRuct(ruct);
 		for(Link l : links){
 			l.setLink(publicUrl+l.getLink());
@@ -537,8 +555,7 @@ public class DashboardController {
 
 	@PostMapping("/dashboard/links/{ruct}")
 	@ResponseBody
-	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
-	public Link createLink(@PathVariable("ruct") Integer ruct, @RequestParam("dataExp") String dataExp) throws ParseException {
+	public Link createLink(@PathVariable Integer ruct, @RequestParam String dataExp) throws ParseException {
 		
 		String token = UUID.randomUUID().toString();
 		SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
@@ -558,8 +575,7 @@ public class DashboardController {
 
 	@DeleteMapping("/dashboard/links/{id}")
 	@ResponseBody
-	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
-	public Integer deleteLink(@PathVariable("id") Integer id) {
+	public Integer deleteLink(@PathVariable Integer id) {
 		Link l = this.ls.findById(id);
 		if(l != null){
 			this.ls.delete(l);
@@ -616,8 +632,8 @@ public class DashboardController {
 		}
 		else{
 			model.addAttribute("results", true);
-			model.addAttribute("resp_centres", resp_centre);
-			model.addAttribute("resp_titulacions", resp_titulacio);
+			model.addAttribute("resp_centres", resp_centre.stream().map(UsuarisRolDTO::new).toList());
+			model.addAttribute("resp_titulacions", resp_titulacio.stream().map(UsuarisRolDTO::new).toList());
 		}
 	}
 	
@@ -689,13 +705,60 @@ public class DashboardController {
 		return dc.archive(doc);
 	}
 
-	private void archiveByOrgan(Integer lugar, String tlugar) {
-		ArchiveOrganDTO organ = new ArchiveOrganDTO(lugar, tlugar);
-		dc.archiveByOrgan(organ);
-	}
-
 	private String upload(Integer idDocument, Integer idCategoria, Integer lugar, String tlugar, MultipartFile file) {
 			DocumentTmpDTO doc = new DocumentTmpDTO(idDocument, idCategoria, lugar, tlugar, file);
 			return dc.upload(doc);
 	}
+
+	public void loadManagers(HashMap<String, Object> model, Integer centre, Integer titulacio) {
+		List<Integer> centres = Arrays.asList(centre);
+		List<Integer> titulacions = Arrays.asList(titulacio);
+		List<UsuarisRol> resp_centre = urs.findManagerByCentres(centres);
+		Collections.sort(resp_centre, new Comparator<UsuarisRol>() {  
+		    @Override  
+		    public int compare(UsuarisRol a, UsuarisRol b) {  
+		          
+		        int OrgnomComp = a.getOrgan().getNomVal().compareTo(b.getOrgan().getNomVal()); 
+		        if (OrgnomComp != 0) {  
+		            return OrgnomComp;  
+		        }  
+		        int rolComp = a.getRol().getNomRol().compareTo(b.getRol().getNomRol());
+		        if (rolComp != 0) {  
+		            return rolComp;  
+		        }
+		        return a.getUsuari().getNom().concat(a.getUsuari().getCognoms()).compareTo(
+		        		b.getUsuari().getNom().concat(b.getUsuari().getCognoms()));  
+		    }  
+		});
+		
+		List<UsuarisRol> resp_titulacio = new ArrayList<UsuarisRol>();
+		if(titulacions.size() > 0) {
+			resp_titulacio = urs.findManagerByTitulacions(titulacions);
+			Collections.sort(resp_titulacio, new Comparator<UsuarisRol>() {  
+			    @Override 
+			    public int compare(UsuarisRol a, UsuarisRol b) {  
+			          
+			        int OrgnomComp = a.getOrgan().getNomVal().compareTo(b.getOrgan().getNomVal()); 
+			        if (OrgnomComp != 0) {  
+			            return OrgnomComp;  
+			        }  
+			        int rolComp = a.getRol().getNomRol().compareTo(b.getRol().getNomRol());
+			        if (rolComp != 0) {  
+			            return rolComp;  
+			        }
+			        return a.getUsuari().getNom().concat(a.getUsuari().getCognoms()).compareTo(
+			        		b.getUsuari().getNom().concat(b.getUsuari().getCognoms()));  
+			    }  
+			});
+		}
+						
+		if(resp_centre == null) {
+			model.put("results", false);
+		}
+		else{
+			model.put("results", true);
+			model.put("resp_centres", resp_centre.stream().map(UsuarisRolDTO::new).toList());
+			model.put("resp_titulacions", resp_titulacio.stream().map(UsuarisRolDTO::new).toList());
+		}
+	}
 }

+ 24 - 23
src/main/java/es/uv/saic/web/ManagersController.java

@@ -3,16 +3,16 @@ package es.uv.saic.web;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 
 import jakarta.servlet.http.HttpSession;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import es.uv.saic.domain.Organ;
@@ -47,55 +47,56 @@ public class ManagersController {
 	 * - The view is managers.html
 	 */
 	@SuppressWarnings("unchecked")
-	@GetMapping("/managers")
-	public String managersForm(Model model, Authentication auth, HttpSession session) {
-		
+	@PostMapping("/managers")
+	public HashMap<String, Object> managersForm(@RequestBody Usuari usuari, HttpSession session) {
+		HashMap<String, Object> model = new HashMap<>();
 		List<Organ> sup_centres;
 		List<Organ> sup_titulacions;
-		if(urs.isGrantedUser((Usuari) auth.getPrincipal())){
+		if(urs.isGrantedUser((Usuari) usuari)){
 			sup_centres = this.ors.getCentres();
 			sup_titulacions = this.ors.getTitulacions();
 		}
 		else {
-			sup_centres = this.ors.getUsuariCentres(((Usuari) auth.getPrincipal()).getUsuari());
+			sup_centres = this.ors.getUsuariCentres((usuari).getUsuari());
 			if(sup_centres != null) {
 				if(sup_centres.size() > 0) {
 					sup_titulacions = this.ors.getTitulacionsByCentres(sup_centres);
 				}
 				else {
-					sup_titulacions = this.ors.getUsuariTitulacions(((Usuari) auth.getPrincipal()).getUsuari());
+					sup_titulacions = this.ors.getUsuariTitulacions(usuari.getUsuari());
 					for(Organ o : sup_titulacions) {
 						sup_centres.add(o.getOrgan());
 					}
 				}
 			}
 			else {
-				sup_titulacions = this.ors.getUsuariTitulacions(((Usuari) auth.getPrincipal()).getUsuari());
+				sup_titulacions = this.ors.getUsuariTitulacions(usuari.getUsuari());
 			}
 		}
-		model.addAttribute("sup_centres", sup_centres);
-		model.addAttribute("sup_titulacions", sup_titulacions);
+		model.put("sup_centres", sup_centres);
+		model.put("sup_titulacions", sup_titulacions);
 		
 		List<Usuari> users = us.findAll();
 		List<Rol> roles = rs.findAssignables();
-		model.addAttribute("users", users);
-		model.addAttribute("roles", roles);
+		model.put("users", users);
+		model.put("roles", roles);
 		
 	
 		if(session.getAttribute("respTitulacions") != null && session.getAttribute("respCentres") != null ) {
-			model.addAttribute("restoreCentres", ((List<Integer>)session.getAttribute("respCentres")).toString());
-			model.addAttribute("restoreTitulacions", ((List<Integer>)session.getAttribute("respTitulacions")).toString());
+			model.put("restoreCentres", ((List<Integer>)session.getAttribute("respCentres")).toString());
+			model.put("restoreTitulacions", ((List<Integer>)session.getAttribute("respTitulacions")).toString());
 			this.loadManagers(model, (List<Integer>)session.getAttribute("respCentres"), (List<Integer>)session.getAttribute("respTitulacions"));
 			session.removeAttribute("respTitulacions");
 			session.removeAttribute("respCentres");
 		}
 		
 		if(session.getAttribute("roleExists") != null) {
-			model.addAttribute("roleExists", true);
+			model.put("roleExists", true);
 			session.removeAttribute("roleExists");
 		}
 		
-		return "managers";
+		model.put("ok", "managers");
+		return model;
 	}
 	
 	/*
@@ -105,7 +106,7 @@ public class ManagersController {
 	 * @Return The view component list_managers
 	 */
 	@PostMapping("/managers/search")
-	public String managersSearch(Model model, Authentication auth, 
+	public String managersSearch(@RequestBody HashMap<String, Object> model,
 			@RequestParam("center") List<Integer> centres,
 			@RequestParam(name="titulation[]", required=false) List<Integer> titulacions,
 			HttpSession session) {
@@ -127,7 +128,7 @@ public class ManagersController {
 	 * @Param centres List of centre ids to search managers in
 	 * @Param titulacions List of titulacion ids to search managers in
 	 */
-	public void loadManagers(Model model, List<Integer> centres, List<Integer> titulacions) {
+	public void loadManagers(HashMap<String, Object> model, List<Integer> centres, List<Integer> titulacions) {
 		List<UsuarisRol> resp_centre = urs.findManagerByCentres(centres);
 		Collections.sort(resp_centre, new Comparator<UsuarisRol>() {  
 		    @Override  
@@ -168,12 +169,12 @@ public class ManagersController {
 		}
 				
 		if(resp_centre == null) {
-			model.addAttribute("results", false);
+			model.put("results", false);
 		}
 		else{
-			model.addAttribute("results", true);
-			model.addAttribute("resp_centres", resp_centre);
-			model.addAttribute("resp_titulacions", resp_titulacio);
+			model.put("results", true);
+			model.put("resp_centres", resp_centre);
+			model.put("resp_titulacions", resp_titulacio);
 		}
 	}
 	

+ 40 - 14
src/main/java/es/uv/saic/web/OrganController.java

@@ -2,30 +2,37 @@ package es.uv.saic.web;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import es.uv.saic.domain.IndicadorEnquesta;
 import es.uv.saic.domain.Organ;
+import es.uv.saic.domain.Usuari;
 import es.uv.saic.dto.OrganDTO;
 import es.uv.saic.dto.OrganTransferDTO;
 import es.uv.saic.service.IndicadorEnquestaService;
 import es.uv.saic.service.OrganService;
 
 
+
+
 @RestController
 public class OrganController {
-    
+    @Autowired
+    private UsuariController uc;
+
     @Autowired
     private OrganService os;
 
     @Autowired
     private IndicadorEnquestaService ies;
-
     /*
      * Endpoint for getTitulacions
      */
@@ -52,25 +59,20 @@ public class OrganController {
      * Endpoint para findById
      */
     @GetMapping("/findById/{tlugar}/{idTitulacio}")
-    public ResponseEntity<?> findById(@PathVariable String tlugar,  @PathVariable Integer idTitulacio) {
-        try {
-            Organ organ = os.findByID(tlugar, idTitulacio);
-            OrganTransferDTO organTransferDTO = new OrganTransferDTO(organ);
+    public OrganDTO findByID(@PathVariable String tlugar,  @PathVariable Integer idTitulacio) {
+        Organ organ = os.findByID(tlugar, idTitulacio);
+
+        return new OrganDTO(organ);
 
-            return ResponseEntity.ok(organTransferDTO);
-        } catch(Exception e) {
-            return ResponseEntity.badRequest().body("Error al obtener el organo" +
-                " por tlugar y titulación: " + e.getMessage());
-        }
     }
 
     /*
      * Endpoint para getTitulacionsByTypeCentre
      */
-    @GetMapping("/getTitulacionsByTypeCentre/{lugar}/{ambit}")
-    public ResponseEntity<?> getTitulacionsByTypeCentre(@PathVariable Integer lugar, @PathVariable Integer ambit) {
+    @GetMapping("/getTitulacionsByTypeCentre/{lugar}/{type}")
+    public ResponseEntity<?> getTitulacionsByTypeCentre(@PathVariable Integer lugar, @PathVariable Integer type) {
         try {
-            List<Organ> organList = os.getTitulacionsByTypeCentre(lugar, ambit);
+            List<Organ> organList = os.getTitulacionsByTypeCentre(lugar, type);
             List<OrganTransferDTO> organDTOList = new ArrayList<>();
             
             for(Organ org: organList) {
@@ -106,6 +108,30 @@ public class OrganController {
         }
     }
 
+    @GetMapping("/getTitulacions/supervisor")
+    public List<OrganDTO> getTitulacionsSupervisor() {
+        return os.getTitulacions().stream()
+            .filter(o -> o.getOrgan().getId().getLugar() != 99)
+            .map(OrganDTO::new)
+            .collect(Collectors.toList());
+    }
+    
+    @GetMapping("/getTitulacionsByCentre/{centre}")
+    public List<OrganDTO> getTitulacionsByCentre(@PathVariable Integer centre) {
+        return os.getTitulacionsByCentre(centre).stream()
+            .map(OrganDTO::new)
+            .distinct()
+            .collect(Collectors.toList());
+    }
+
+    @PostMapping("/findOrgansByUsuari")
+    public List<OrganDTO> findOrgansByUsuari(@RequestBody Usuari usuari) {
+        return uc.findActiveRols(usuari).stream()
+            .map(ur -> new OrganDTO(ur.getOrgan()))
+            .distinct()
+            .collect(Collectors.toList());
+    }
+
     @GetMapping("/getCentres")
     public ResponseEntity<?> getCentres() {
         try {

+ 2 - 2
src/main/resources/application.properties

@@ -6,8 +6,8 @@ spring.profiles.active=@activatedProperties@
 spring.messages.encoding=UTF-8
 
 # Templates config
-spring.thymeleaf.mode=HTML
-spring.thymeleaf.encoding=UTF-8
+# spring.thymeleaf.mode=HTML
+# spring.thymeleaf.encoding=UTF-8
 
 # JPA config
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect