Browse Source

Discovery server added

Drowsito 1 month ago
parent
commit
4cab173ee4
30 changed files with 204 additions and 160 deletions
  1. 5 0
      pom.xml
  2. 1 0
      src/main/java/es/uv/saic/config/SecurityConfig.java
  3. 2 0
      src/main/java/es/uv/saic/domain/SupervisionSearchParams.java
  4. 2 10
      src/main/java/es/uv/saic/dto/OrganDTO.java
  5. 20 20
      src/main/java/es/uv/saic/feign/AdminClient.java
  6. 1 1
      src/main/java/es/uv/saic/feign/AjaxClient.java
  7. 1 1
      src/main/java/es/uv/saic/feign/CalendarClient.java
  8. 1 1
      src/main/java/es/uv/saic/feign/DashboardClient.java
  9. 1 1
      src/main/java/es/uv/saic/feign/DataClient.java
  10. 1 1
      src/main/java/es/uv/saic/feign/DocumentClient.java
  11. 1 1
      src/main/java/es/uv/saic/feign/IndicadorClient.java
  12. 1 1
      src/main/java/es/uv/saic/feign/ManagerClient.java
  13. 1 1
      src/main/java/es/uv/saic/feign/NoticiaClient.java
  14. 1 1
      src/main/java/es/uv/saic/feign/OrganClient.java
  15. 1 1
      src/main/java/es/uv/saic/feign/ParseClient.java
  16. 1 1
      src/main/java/es/uv/saic/feign/PlantillaClient.java
  17. 1 1
      src/main/java/es/uv/saic/feign/ProceduresClient.java
  18. 1 2
      src/main/java/es/uv/saic/feign/StatsClient.java
  19. 16 8
      src/main/java/es/uv/saic/feign/SupervisionClient.java
  20. 1 1
      src/main/java/es/uv/saic/feign/TascaClient.java
  21. 1 2
      src/main/java/es/uv/saic/feign/UsuariClient.java
  22. 1 1
      src/main/java/es/uv/saic/feign/WikiClient.java
  23. 20 3
      src/main/java/es/uv/saic/web/OrganController.java
  24. 33 7
      src/main/java/es/uv/saic/web/SupervisionController.java
  25. 9 7
      src/main/resources/application-local.properties
  26. 4 1
      src/main/resources/templates/components/selector_titulacions_managers.html
  27. 2 2
      src/main/resources/templates/dashboardCentre.html
  28. 3 4
      src/main/resources/templates/dashboardTitulacio.html
  29. 70 80
      src/main/resources/templates/dashboardUniversitat.html
  30. 1 0
      src/main/resources/templates/managers.html

+ 5 - 0
pom.xml

@@ -152,6 +152,11 @@
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-openfeign</artifactId>
 		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+		</dependency>
 		<!-- 
 		<dependency>
 		    <groupId>org.jacoco</groupId> 

+ 1 - 0
src/main/java/es/uv/saic/config/SecurityConfig.java

@@ -101,6 +101,7 @@ public class SecurityConfig {
         IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(ipAddress);
         return (authentication, context) -> {
             HttpServletRequest request = context.getRequest();
+			
             return new AuthorizationDecision(ipAddressMatcher.matches(request));
         };
     }

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

@@ -13,6 +13,8 @@ public class SupervisionSearchParams implements Serializable{
 	private List<String> evidencies;
 	private String searchType;
 	
+	public SupervisionSearchParams() {
+	}
 	
 	public SupervisionSearchParams(List<Integer> centres, List<Integer> titulacions, List<Integer> cursos, 
 								   List<String> procediments, List<String> evidencies, String searchType) {

+ 2 - 10
src/main/java/es/uv/saic/dto/OrganDTO.java

@@ -64,8 +64,8 @@ public class OrganDTO{
     public OrganDTO(OrganRepositoryDTO organ) {
         this.lugar = Integer.parseInt(organ.getLugar());
         this.tlugar = organ.getTlugar();
-        this.lugar2 = Integer.parseInt(organ.getLugar());
-        this.tlugar2 =  organ.getTlugar();  
+        this.lugar2 = Integer.parseInt(organ.getLugar2());
+        this.tlugar2 =  organ.getTlugar2();  
         this.nomCas = organ.getNomCas();
         this.nomVal = organ.getNomVal();
         this.ruct = organ.getRuct();
@@ -111,14 +111,6 @@ public class OrganDTO{
         return tambit2;
     }
 
-    public String getNomTCas() {
-        return nomCas2;
-    }
-
-    public String getNomTVal() {
-        return nomVal2;
-    }
-
     public Integer getRuct2() {
         return ruct2;
     }

+ 20 - 20
src/main/java/es/uv/saic/feign/AdminClient.java

@@ -14,42 +14,42 @@ import org.springframework.web.bind.annotation.RequestParam;
 import es.uv.saic.domain.Acreditacio;
 import es.uv.saic.domain.AcreditacioTransfer;
 
-@FeignClient(value = "admin-controller", url = "${saic.url.domain}/core/admin")
+@FeignClient(name = "core-service", contextId = "admin-controller")
 public interface AdminClient {
-    @PostMapping("/instances")
+    @PostMapping("/admin/instances")
     HashMap<String, Object> instantiate(@RequestParam("procedure") Integer idProces,
 			@RequestParam("center") Integer idCentre,
 			@RequestParam("titulation") Integer idTitulacio);
      
-    @PostMapping("/instance/delete")
+    @PostMapping("/admin/instance/delete")
     void deleteInstance(@RequestParam BigInteger idInstancia);
     
-    @PostMapping("/instance/clear")
+    @PostMapping("/admin/instance/clear")
     String clearInstance(@RequestParam BigInteger idInstancia);
 
-    @PostMapping("/instance/close")
+    @PostMapping("/admin/instance/close")
     String closeInstance(@RequestParam BigInteger idInstancia);
 
-    @PostMapping("/instance/task/remove")
+    @PostMapping("/admin/instance/task/remove")
     String removeTask(@RequestParam BigInteger idInstanciaTasca);
 
-    @PostMapping("/instance/task/clear")
+    @PostMapping("/admin/instance/task/clear")
     String clearTask(@RequestParam BigInteger idInstanciaTasca);
 
-    @PostMapping("/instance/task/reload")
+    @PostMapping("/admin/instance/task/reload")
     String reloadTask(@RequestParam BigInteger idInstanciaTasca);
 
-    @PostMapping("/instance/task/reactivate")
+    @PostMapping("/admin/instance/task/reactivate")
     String activateTask(@RequestParam BigInteger idInstanciaTasca);
 
-    @PostMapping("/instance/task/edit")
+    @PostMapping("/admin/instance/task/edit")
     String editTask(@RequestParam BigInteger idInstanciaTasca);
 
-    @PostMapping("/mailing")
+    @PostMapping("/admin/mailing")
     void sendMails( @RequestParam Integer idRol, @RequestParam("centres[]") List<Integer> centres,
 			@RequestParam String subject, @RequestParam String body);
 
-    @PostMapping("/procedures/new")
+    @PostMapping("/admin/procedures/new")
     void newProcedure(@RequestParam Map<String,String> params, 
 			@RequestParam(name="idTascap[]", required=false) List<String> idTascap, 
 			@RequestParam(name="dataLimit[]", required=false) List<String> dataLimit, 
@@ -68,7 +68,7 @@ public interface AdminClient {
 			@RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
 			@RequestParam(name="informe[]", required=false) List<Boolean> informe);
     
-    @PostMapping("/procedures/edit")
+    @PostMapping("/admin/procedures/edit")
     void editProcedure(@RequestParam Map<String,String> params, 
 			@RequestParam(name="idTascap[]", required=false) List<String> idTascap, 
 			@RequestParam(name="dataLimit[]", required=false) List<String> dataLimit, 
@@ -87,21 +87,21 @@ public interface AdminClient {
 			@RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
 			@RequestParam(name="informe[]", required=false) List<Boolean> informe);
 
-    @PostMapping("/procedures/remove")
+    @PostMapping("/admin/procedures/remove")
     void removeProcedure(@RequestParam("idProces") Integer idProces);    
     
-    @PostMapping("/userrole/remove")
+    @PostMapping("/admin/userrole/remove")
     HashMap<String, Object> removeUserrole(@RequestParam("idRol") Integer idRol, @RequestParam("usuari") String usuari, 
 		@RequestParam("lugar") Integer lugar, @RequestParam("tlugar") String tlugar);
     
-    @PostMapping("/userrole/new")
+    @PostMapping("/admin/userrole/new")
 	HashMap<String, Object> newUserrole(@RequestParam("idRol") Integer idRol, @RequestParam(name="usuari", required=false) String usuari, @RequestParam("centre") Integer idCentre, 
 			@RequestParam(name="titulacio", required=false) Integer idTitulacio, @RequestParam Map<String,String> params);
 	
-	@GetMapping("/templates")
+	@GetMapping("/admin/templates")
 	List<String> getTemplates2();
 
-	@PostMapping("/templates/inds/update")
+	@PostMapping("/admin/templates/inds/update")
 	void updateTemplateInds(@RequestParam(name="indicador[]", required=true) List<String> indicador,
 			@RequestParam(name="enquesta[]", required=true) List<String> enquesta,
 			@RequestParam(name="media[]", required=true) List<String> media,
@@ -109,10 +109,10 @@ public interface AdminClient {
 			@RequestParam(name="proces", required=true) String proces
 			);
 	
-	@GetMapping("/acredita/{curs}/{grup}/{tambit}")  
+	@GetMapping("/admin/acredita/{curs}/{grup}/{tambit}")  
 	List<AcreditacioTransfer> acreditacionsByCurs(@PathVariable Integer curs, @PathVariable Integer grup, @PathVariable String tambit);
 
-	@PostMapping("/acredita") 
+	@PostMapping("/admin/acredita") 
 	Acreditacio UpdateAcreditacio(@RequestParam String tlugar, @RequestParam Integer lugar, 
 									@RequestParam Integer grupCurs, @RequestParam Integer grupNum, @RequestParam Integer cursImpla,
 									@RequestParam String dataAcred, @RequestParam String dataRenov, @RequestParam String dataSegui,

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

@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 
 import es.uv.saic.dto.ModelDTO;
 
-@FeignClient(value = "ajax-service", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "ajax-controller")
 public interface AjaxClient {
     @GetMapping("/ajax/active/centres")
 	public ModelDTO getActiveCentres() throws IOException;

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

@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import es.uv.saic.domain.Calendari;
 
-@FeignClient(value = "calendari-service", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "calendar-controller")
 public interface CalendarClient {
     	@ResponseBody
 	@PostMapping("/ajax/calendar")

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

@@ -24,7 +24,7 @@ import es.uv.saic.domain.Link;
 import es.uv.saic.dto.CategoriaDocumentDTO;
 import es.uv.saic.dto.InstanciaGanttDTOImp;
 
-@FeignClient(value = "dashboard-service", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "dashboard-controller")
 public interface DashboardClient {
     @PostMapping("/dashboard")
 	@ResponseBody

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

@@ -14,7 +14,7 @@ import es.uv.saic.dto.ImportDTO;
 import es.uv.saic.dto.IndicadorEnquestaTmpDup;
 import es.uv.saic.dto.TablaDTO;
 
-@FeignClient(value = "data-service", url = "${saic.url.data.domain}/data")
+@FeignClient(name = "data-service")
 public interface DataClient {
 
     @GetMapping("/data/import")

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

@@ -21,7 +21,7 @@ import es.uv.saic.dto.DocumentTmpDTO;
 import es.uv.saic.dto.PdfDTO;
 import fr.opensagres.xdocreport.core.XDocReportException;
 
-@FeignClient(value = "document-service", url = "${saic.url.docs.domain}/docs")
+@FeignClient(name = "docs-service")
 public interface DocumentClient {
 
     @PostMapping("/document/save")

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

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import es.uv.saic.domain.IndicadorEnquesta;
 import es.uv.saic.dto.EnquestaDTO;
 
-@FeignClient(value = "indicador-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "indicador-controller")
 public interface IndicadorClient {
     @GetMapping("/indicadorEnquesta/findTypes")
     List<String> findTypes();

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

@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(value = "manager-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "manager-controller")
 public interface ManagerClient {
     @PostMapping("/managers")
     HashMap<String, Object> managersForm(@RequestBody String usuari);

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

@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 
 import es.uv.saic.domain.Noticia;
 
-@FeignClient(value = "noticia-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "noticia-controller")
 public interface NoticiaClient {
     @GetMapping("/noticia/findVisibles")
     List<Noticia> findVisibles();

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

@@ -15,7 +15,7 @@ import es.uv.saic.domain.IndicadorEnquesta;
 import es.uv.saic.domain.Usuari;
 import es.uv.saic.dto.OrganDTO;
 
-@FeignClient(value = "organ-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "organ-controller")
 public interface OrganClient {
     @GetMapping("/getCentres")
     List<OrganDTO> getCentres();

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

@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import jakarta.servlet.http.HttpServletResponse;
 
-@FeignClient(value = "parse-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "parse-controller")
 public interface ParseClient {
 
     @PostMapping("/admin/parse/do")

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

@@ -13,7 +13,7 @@ import es.uv.saic.domain.Plantilla;
 import es.uv.saic.dto.PdfDTO;
 import es.uv.saic.dto.TemplateDataDTO;
 
-@FeignClient(value = "plantilla-controller", url = "${saic.url.docs.domain}/docs")
+@FeignClient(name = "docs-service", contextId = "plantilla-controller")
 public interface PlantillaClient {
 
     //Se usa

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

@@ -23,7 +23,7 @@ import es.uv.saic.domain.Proces;
 import es.uv.saic.domain.Tipus;
 import es.uv.saic.dto.ProcesDTO;
 
-@FeignClient(value = "procedures-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "procedures-controller")
 public interface ProceduresClient {
     @PostMapping("/procedures")
 	public HashMap<String, Object> getActiveInstances(@RequestParam(required = false) String _new,

+ 1 - 2
src/main/java/es/uv/saic/feign/StatsClient.java

@@ -1,6 +1,5 @@
 package es.uv.saic.feign;
 
-import java.util.HashMap;
 import java.util.List;
 
 import org.springframework.cloud.openfeign.FeignClient;
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 
 import es.uv.saic.web.StatsController.PendingEmail;
 
-@FeignClient(value = "stats-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "stats-controller")
 public interface StatsClient {
     @GetMapping("/admin/get/pendingEmails")
 	public List<PendingEmail> getPendingEmails();

+ 16 - 8
src/main/java/es/uv/saic/feign/SupervisionClient.java

@@ -2,30 +2,38 @@ package es.uv.saic.feign;
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.cloud.openfeign.FeignClient;
-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.SupervisionSearchParams;
 
-@FeignClient(value = "supervision-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "superivision-controller")
 public interface SupervisionClient {
+
     @PostMapping("/supervision")
-	public HashMap<String, Object> supervisionForm(@RequestParam String usuari, @RequestParam(required = false) SupervisionSearchParams ssp);
+    HashMap<String, Object> supervisionForm(
+        @RequestParam("usuari") String usuari, 
+        @RequestBody Optional<SupervisionSearchParams> ssp
+    );
 
     @PostMapping("/supervision/search")
-	public HashMap<String, Object> supervisionSearch(
+    HashMap<String, Object> supervisionSearch(
         @RequestParam(name="centers[]", required=false) List<Integer> centres,
         @RequestParam("years[]") List<Integer> cursos,
         @RequestParam("titulations[]") List<Integer> titulacions,
         @RequestParam(name="procedures[]", required=false) List<String> procediments,
         @RequestParam(name="evidences[]", required=false) List<String> evidencies,
         @RequestParam(name="searchType", required=false) String searchType,
-        @RequestParam String usuari);
+        @RequestParam("usuari") String usuari
+    );
     
-    @GetMapping("/supervision/search")
-	public HashMap<String, Object> restoreSearch(@RequestBody String usuari, @RequestParam SupervisionSearchParams ssp);
-}
+    @PostMapping("/supervision/restore") 
+    HashMap<String, Object> restoreSearch(
+        @RequestParam("usuari") String usuari, 
+        @RequestBody SupervisionSearchParams ssp 
+    );
+}

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

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import es.uv.saic.dto.EvidenciaBuscadorDTO;
 
-@FeignClient(value = "tasca-controller", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "tasca-controller")
 public interface TascaClient {
      @PostMapping("/ajax/search/evidences")
 	public HashMap<String, Object> getEvidencesByCenterTitulationYear(

+ 1 - 2
src/main/java/es/uv/saic/feign/UsuariClient.java

@@ -7,12 +7,11 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
-import es.uv.saic.domain.Rol;
 import es.uv.saic.domain.Usuari;
 import es.uv.saic.dto.RolDTO;
 import es.uv.saic.dto.UsuariDTO;
 
-@FeignClient(value = "usuari-service", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "usuari-controller")
 public interface UsuariClient {
     @PostMapping("/grantedUser")
     public boolean isGrantedUser(@RequestBody Usuari usuari);

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

@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import es.uv.saic.domain.Wiki;
 
-@FeignClient(value = "wiki-service", url = "${saic.url.domain}/core")
+@FeignClient(name = "core-service", contextId = "wiki-controller")
 public interface WikiClient {
     @GetMapping("/wiki/text/{categoria}")
 	@ResponseBody

+ 20 - 3
src/main/java/es/uv/saic/web/OrganController.java

@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
@@ -12,10 +13,14 @@ import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import es.uv.saic.domain.DummyDataTransfer;
 import es.uv.saic.domain.Organ;
 import es.uv.saic.domain.Proces;
 import es.uv.saic.domain.Usuari;
+import es.uv.saic.dto.OrganDTO;
 import es.uv.saic.feign.OrganClient;
 import jakarta.servlet.http.HttpSession;
 
@@ -43,13 +48,25 @@ public class OrganController {
 	public String getCenterTitulations(Model model, Authentication auth, 
 			@RequestParam("center") Integer centre,
 			HttpSession session) {
+		
 		HashMap<String, Object> response = oc.getCenterTitulations(centre);
-       
+		
 		if (response == null) {
-			return "401";	
-        }
+			return "401";   
+		}
+
+		List<Object> rawList = (List<Object>) response.get("resp_titulacions");
+		ObjectMapper mapper = new ObjectMapper();
+		
+		List<OrganDTO> titulacions = rawList.stream()
+			.map(obj -> mapper.convertValue(obj, OrganDTO.class)) 
+			.collect(Collectors.toList());
+		
+		response.remove("resp_titulacions"); 
 
 		model.addAllAttributes(response);
+		model.addAttribute("sup_titulacions", titulacions);
+
 		return "components/selector_titulacions_managers";
 	}
 

+ 33 - 7
src/main/java/es/uv/saic/web/SupervisionController.java

@@ -1,7 +1,9 @@
 package es.uv.saic.web;
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
@@ -11,6 +13,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import es.uv.saic.domain.SupervisionSearchParams;
 import es.uv.saic.domain.Usuari;
 import es.uv.saic.feign.SupervisionClient;
@@ -33,19 +37,32 @@ public class SupervisionController {
 	 */
 	@GetMapping("/supervision")
 	public String supervisionForm(Model model, Authentication auth, HttpSession session) {
+
+		Object obj = session.getAttribute("searchParams");
+
+		SupervisionSearchParams params = null;
+
+		if (obj instanceof LinkedHashMap) {
+			ObjectMapper mapper = new ObjectMapper();
+			params = mapper.convertValue(obj, SupervisionSearchParams.class);
+		} else if (obj instanceof SupervisionSearchParams) {
+			params = (SupervisionSearchParams) obj;
+		}
+
 		HashMap<String, Object> response =
-			sc.supervisionForm(((Usuari) auth.getPrincipal()).getUsuari(),
-			(SupervisionSearchParams) session.getAttribute("searchParams"));
+			sc.supervisionForm(((Usuari) auth.getPrincipal()).getUsuari(), Optional.ofNullable(params));
 
-        if (response == null) {
+		if (response == null) {
 			return "401";
-        }
+		}
 
 		model.addAllAttributes(response);
-		if(response.get("removeAttribute") != null)
+		if (response.get("removeAttribute") != null)
 			session.removeAttribute(response.get("removeAttribute").toString());
+
 		return "supervision";
 	}
+
 	
 	/*
 	 * Handles the supervision search form submission
@@ -94,9 +111,18 @@ public class SupervisionController {
 	 */
 	@GetMapping("/supervision/search")
 	public String restoreSearch(Model model, Authentication auth, HttpSession session) {
+		Object obj = session.getAttribute("searchParams");
+
+		SupervisionSearchParams params = null;
+
+		if (obj instanceof LinkedHashMap) {
+			ObjectMapper mapper = new ObjectMapper();
+			params = mapper.convertValue(obj, SupervisionSearchParams.class);
+		} else if (obj instanceof SupervisionSearchParams) {
+			params = (SupervisionSearchParams) obj;
+		}
 		HashMap<String, Object> response =
-			sc.restoreSearch(((Usuari) auth.getPrincipal()).getUsuari(),
-			(SupervisionSearchParams) session.getAttribute("searchParams"));
+			sc.restoreSearch(((Usuari) auth.getPrincipal()).getUsuari(), params);
 
         if (response == null) {
         	return "401";

+ 9 - 7
src/main/resources/application-local.properties

@@ -1,8 +1,13 @@
-server.port = 8083
+server.port = 0
+spring.application.name = gui-service
+eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka
+eureka.instance.prefer-ip-address=false
+eureka.instance.status-page-url-path=/
+
 # Urls
-saic.url.domain = http://127.0.0.1:8080
-saic.url.data.domain = http://127.0.0.1:8081
-saic.url.docs.domain = http://127.0.0.1:8082
+saic.url.domain = http://core-service
+saic.url.data.domain = http://data-service
+saic.url.docs.domain = http://docs-service
 saic.url.public = ${saic.url.domain}/public
 
 # JPA Debug
@@ -42,10 +47,7 @@ saic.data.evdocente = C:\\SAIC\\databases\\ev_docente\\latest\\
 saic.scheduler.expired.enabled=false
 
 # Actuator
-spring.application.name = UV SAIC [LO]
 spring.boot.admin.client.url=http://127.0.0.1:9090
-spring.boot.admin.client.instance.management-base-url=${saic.url.domain}
-spring.boot.admin.client.instance.service-url=${saic.url.domain}
 spring.boot.admin.client.username=admin
 spring.boot.admin.client.password=kkdvk
 management.endpoints.web.exposure.include=*

+ 4 - 1
src/main/resources/templates/components/selector_titulacions_managers.html

@@ -1 +1,4 @@
-<option th:each="item : ${resp_titulacions}" th:text="${#locale.language} == 'es' ? ${item.nomCas}:${item.nomVal}" th:attr="value=${item.id.lugar}"></option>
+<option th:each="item : ${sup_titulacions}" 
+        th:text="${#locale.language == 'es' ? item.nomCas : item.nomVal}" 
+        th:value="${item.lugar}">
+</option>

+ 2 - 2
src/main/resources/templates/dashboardCentre.html

@@ -247,12 +247,12 @@
                                 <div class="uv-table-group" th:if="${results}" style="cursor: auto;">
 									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_titulacions}" style="margin-top:20px;">
 										<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>:</strong> 
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_centres}">
 										<strong th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></strong>
 										<br>
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 								</div>
                             </div>

+ 3 - 4
src/main/resources/templates/dashboardTitulacio.html

@@ -273,14 +273,13 @@
                             <div class="tab-pane" id="tab4">
                                 <div class="uv-table-group" th:if="${results}" style="cursor: auto;">
 									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_titulacions}" style="margin-top:20px;">
-										<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>:</strong> 
-										<span th:text="${item.usuari.nom}"></span> <span th:text="${item.usuari.cognoms}"></span> (<a th:href="'mailto:'+${item.usuari.email}" th:text="${item.usuari.email}"></a>)<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>: </strong> 
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+										<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>: </strong> 
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_centres}">
 										<strong th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></strong>
 										<br>
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 								</div>
                             </div>

+ 70 - 80
src/main/resources/templates/dashboardUniversitat.html

@@ -69,7 +69,7 @@
                                 <a class="nav-link active" href="" data-target="#tab3" data-toggle="tab" th:text="#{dashboard.menu.tits}">Titulaciones</a>
                             </li>
                         	<li class="nav-item">
-                                <a class="nav-link" href="" data-target="#tab0" data-toggle="tab" th:text="#{dashboard.menu.summary}" onclick="initGantt();">Resumen</a>
+                                <a class="nav-link" href="" data-target="#tab0" data-toggle="tab" th:text="#{dashboard.menu.summary}">Resumen</a>
                             </li>
                             <li class="nav-item">
                                 <a class="nav-link" href="" data-target="#tab1" data-toggle="tab" th:text="#{dashboard.menu.procedures}">Procedimientos SAIC</a>
@@ -91,7 +91,6 @@
 										<span class="gantt-legend-active"><span th:text="#{dashboard.summary.legend.ontime}">En curso</span></span>
 										<span class="gantt-legend-expired"><span th:text="#{dashboard.summary.legend.delayed}">Atrasado</span></span>
 										<span class="gantt-legend-closed"><span th:text="#{dashboard.summary.legend.closed}">Cerrado</span></span>
-										<!--
 										<div class="input-group" style="text-align:right;float:right;margin-right:0px;width:auto !important;">
 										    <div class="input-group-prepend">
 										    	<span class="input-group-text"><span th:text="#{dashboard.gantt.selector}">Procedimientos de</span></span>
@@ -120,7 +119,6 @@
 											<option th:each="item : ${titulacions}" th:text="${#locale.language} == 'es' ? ${item.nomCas}:${item.nomVal}" th:attr="value=${item.ruct}">Tit 1</option>
 										</select>
 								  	</div>
-									-->
                             	</div> 
                                 <div class="col-lg-12">  
                             		<div id="treeProcedures"></div>      
@@ -200,14 +198,14 @@
                             </div>
                             <div class="tab-pane" id="tab4">
                                 <div class="uv-table-group" th:if="${results}" style="cursor: auto;">
-									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_titulacions}">
-										<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>:</strong> 
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_titulacions}" style="margin-top:20px;">
+										<strong><span th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></span>: </strong> 
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 									<div class="col-sm-12 uv-table-section" th:each="item : ${resp_centres}">
 										<strong th:text="${#locale.language} == 'es' ? ${item.rol.descripcioCas}:${item.rol.descripcioVal}"></strong>
 										<br>
-										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${#dates.format(item.inici, 'dd/MM/yyyy')}"></span></small>)
+										<a th:href="'mailto:'+${item.usuari.email}" th:title="${item.usuari.email}" th:text="${item.usuari.nom + ' ' + item.usuari.cognoms}"></a> (<small><span th:text="#{managers.since}">Desde el</span> <span th:text="${item.inici}"></span></small>)
 									</div>
 								</div>
                             </div>
@@ -291,8 +289,6 @@
 	<footer class="uv-footer uv-footer-text" th:replace="~{layouts/common.html :: footer}"></footer>
 	
 	<script th:src="@{/js/jquery/jquery.min.js}"></script>
-	<script th:src="@{/js/popper.js}"></script>
-	<script th:src="@{/js/bootstrap/bootstrap.min.js}"></script>
 	<script th:src="@{/js/fa/all.js}"></script>
 	<script th:src="@{/js/jquery/datatables.min.js}"></script>
 	<script th:src="@{/js/jquery-easing/jquery.easing.min.js}"></script>
@@ -302,7 +298,6 @@
 	<script th:src="@{/js/gijgo/gijgo.min.js}"></script>
 	<script th:src="@{/js/frappe-gantt/frappe-gantt.min.js}"></script>
 	<script th:src="@{/js/chartjs/chart.js}"></script>
-	<script th:src="@{/js/moment.js}"></script>
 	<script th:src="@{/js/saic.js}"></script>
   
   	<script th:if="${editable}" type="text/javascript">
@@ -349,7 +344,7 @@
 		var tlugar = '[[${organ.tlugar}]]';
 		var ruct = '[[${organ.ruct}]]';
 		var tambit = '[[${organ.tambit}]]';
-		var treeProcedures = null, treeDocuments = null, ganttChart = null;
+		var treeProcedures, treeDocuments, ganttChart;
 		var tasks = [];
 		var inds = [];
 		var cursorPosition;
@@ -381,80 +376,13 @@
 				  selectionType: 'single',
 				  dataSource: '/dashboard/documents/'+ruct
 			});
-
 			drawReports(ruct);
-			//drawGantt(ruct);
+			drawGantt(ruct);
 			editableSettings();
 			
 			layout.closeLoadingSpinner(".uv-loading-spinner");
 		});	
 		
-		function initGantt(){
-			if(ganttChart == null){
-				drawGantt(ruct);
-				return true;
-			}
-			return false;
-		}
-
-	function drawGantt(ructAttr){
-		$.get('/dashboard/gantt/'+ructAttr, function(data){
-				data.forEach(function(d){d.id = 'Task '+d.id;});
-				data.at(-1).custom_class += ' gantt-task-last';
-				tasks = data;
-				ganttChart = new Gantt("#gantt", tasks, {
-					on_click: function (task) {
-						window.open("/procedure/"+task.id.replace('Task_', ''));
-					},
-					on_date_change: function(task, start, end) {
-						return false;
-					},
-					on_progress_change: function(task, progress) {
-						return false;
-					},
-					on_view_change: function() {
-						var bars = document.querySelectorAll("#gantt" + " .bar-group");
-						for (var i = 0; i < bars.length; i++) {
-							bars[i].addEventListener("mousedown", stopEvent, true);
-						}
-						var handles = document.querySelectorAll("#gantt" + " .handle-group");
-						for (var i = 0; i < handles.length; i++) {
-							handles[i].remove();
-						}
-					},
-					bar_height: 20, 
-					bar_corner_radius: 10, 
-					arrow_curve: 10, 
-					padding: 15,
-					view_mode: "Month",
-					date_format: "YYYY-MM-DD",
-					language: locale,
-					draggable: false, 
-					hasArrows: false,
-					highlight_weekend: false,
-					infinite_padding: false,
-					readonly: true,
-					//column_width: 20,
-					popup: function(task) {
-						return `
-							<div class="details-container">
-							<h6>${task.titCas}</h6>
-							<p>${task._start.toLocaleDateString()} - ${task._end.toLocaleDateString()}</p>
-							</div>
-						`;
-					},
-				});
-				ganttChart.change_view_mode("Month");
-				$('.gantt-task-last').get(0).scrollIntoView({
-							behavior: 'auto',
-							block: 'center',
-							inline: 'center'
-						});
-				$('.today-button').trigger('click');
-				$(window).scrollTop(0);
-			});
-		}
-
 		function initTables(){
 			
 			$('#titsTable thead tr')
@@ -594,6 +522,62 @@
 			});
 		}	
 		
+		function drawGantt(ructAttr){
+			$.get('/dashboard/gantt/'+ructAttr, function(data){
+				data.forEach(function(d){d.id = 'Task '+d.id;});
+				data.at(-1).custom_class += ' gantt-task-last';
+				tasks = data;
+				ganttChart = new Gantt("#gantt", tasks, {
+					on_click: function (task) {
+						window.open("/procedure/"+task.id.replace('Task_', ''));
+					},
+					on_date_change: function(task, start, end) {
+						return false;
+					},
+					on_progress_change: function(task, progress) {
+						return false;
+					},
+					on_view_change: function() {
+						var bars = document.querySelectorAll("#gantt" + " .bar-group");
+						for (var i = 0; i < bars.length; i++) {
+							bars[i].addEventListener("mousedown", stopEvent, true);
+						}
+						var handles = document.querySelectorAll("#gantt" + " .handle-group");
+						for (var i = 0; i < handles.length; i++) {
+							handles[i].remove();
+						}
+					},
+					bar_height: 20, 
+					bar_corner_radius: 10, 
+					arrow_curve: 10, 
+					padding: 15,
+					view_mode: "Month",
+					date_format: "YYYY-MM-DD",
+					language: locale,
+					draggable: false, 
+		            hasArrows: false,
+		            highlight_weekend: false,
+		            readonly: true,
+		            popup: function(task) {
+		                return `
+		                  <div class="details-container">
+		                    <h6>${task.name}</h6>
+		                    <p>${task._start.toLocaleDateString()} - ${task._end.toLocaleDateString()}</p>
+		                  </div>
+		                `;
+		        	},
+				});
+				ganttChart.change_view_mode("Month");
+				$('.today-button').trigger('click');
+				$('.gantt-task-last').get(0).scrollIntoView({
+				            behavior: 'auto',
+				            block: 'center',
+				            inline: 'center'
+				        });
+				$(window).scrollTop(0);
+			});
+		}
+		
 		function getGraphData(){
 			$.get('/dashboard/graphs/inds/'+ruct+'/'+$('.data-selector-orig').val(), function(data){
 				$('.chart-inds').html('');
@@ -768,6 +752,12 @@
 			event.preventDefault();
 		}
 		
+		function changeGanttOrigin(){
+			ganttChart.clear();
+			$('.gantt-container').parent().html('<svg id="gantt"></svg>')
+			drawGantt($('#ganttOrigin').val());
+		}
+		
 		function changeReportsOrigin(){
 			treeProcedures.destroy();
 			drawReports($('#reportsOrigin').val());
@@ -786,4 +776,4 @@
 
 </body>
 
-</html>
+</html>

+ 1 - 0
src/main/resources/templates/managers.html

@@ -196,6 +196,7 @@
 		
 		function complete_titulations(){
 			$.post("/ajax/search/managers/titulations", {'center':$('#centersSelector').val()}, function(data) {
+				console.log(data);
 				$("#titulationsSelector")
 				   .html(data)
 				   .selectpicker('refresh');