瀏覽代碼

On work DOCS Service

Drowsito 1 月之前
父節點
當前提交
9b8ee59aa6

+ 5 - 1
src/main/java/META-INF/additional-spring-configuration-metadata.json

@@ -153,6 +153,10 @@
     "name": "saic.url.data.domain",
     "type": "java.lang.String",
     "description": "A description for 'saic.url.data.domain'"
+  },
+  {
+    "name": "saic.url.docs.domain",
+    "type": "java.lang.String",
+    "description": "A description for 'saic.url.docs.domain'"
   }
-
 ]}

+ 31 - 1
src/main/java/es/uv/saic/dto/InstanciaDTO.java

@@ -23,6 +23,9 @@ public class InstanciaDTO implements Serializable {
 	private String ambit;
 	private String text;
 	private String tambit;
+	private String nomval;
+	private String nomcas;
+	private Integer cursAvaluat;
 
 	public InstanciaDTO() {}
 	
@@ -39,6 +42,9 @@ public class InstanciaDTO implements Serializable {
 		this.descCas = i.getProces().getTitolCas();
 		this.ambit = i.getProces().getAmbit(); 
 		this.tambit = i.getOrgan().getTambit();
+		this.nomval = i.getOrgan().getOrgan().getNomVal();
+		this.nomcas = i.getOrgan().getNomCas();
+		this.cursAvaluat = i.getProces().getCursAvaluat();
 		
 		String icon = "<span class=\"btn gantt-legend-done\" style=\"border-width:5px;border-radius:50%;width:20px;height:20px;margin-top:-2px\"></span>";
 		if(this.estat.equals("A")) {
@@ -50,7 +56,7 @@ public class InstanciaDTO implements Serializable {
 		
 		this.text = icon+" <a target=\"_blank\" href=\"/procedure/"+i.getIdInstancia().toString()+"\">"+i.getProces().getNomProces() + " - " + (locale.equals("es") ? i.getProces().getTitolCas() : i.getProces().getTitolVal()) +"</a>";
 	}
-
+	
 	public BigInteger getIdInstancia() {
 		return this.idInstancia;
 	}
@@ -154,5 +160,29 @@ public class InstanciaDTO implements Serializable {
 	public void setTambit(String tambit) {
 		this.tambit = tambit;
 	}
+	
+	public String getNomval() {
+		return nomval;
+	}
+
+	public void setNomval(String nomval) {
+		this.nomval = nomval;
+	}
+
+	public String getNomcas() {
+		return nomcas;
+	}
+
+	public void setNomcas(String nomcas) {
+		this.nomcas = nomcas;
+	}
+	
+	public Integer getCursAvaluat() {
+		return cursAvaluat;
+	}
+
+	public void setCursAvaluat(Integer cursAvaluat) {
+		this.cursAvaluat = cursAvaluat;
+	}
 
 }

+ 64 - 0
src/main/java/es/uv/saic/dto/InstanciaTascaDTO.java

@@ -0,0 +1,64 @@
+package es.uv.saic.dto;
+
+import java.math.BigInteger;
+
+import es.uv.saic.domain.InstanciaTasca;
+
+public class InstanciaTascaDTO {
+    private BigInteger idInstanciaTasca;
+	private String evidencia;
+	private String text;
+    private InstanciaDTO instancia;
+    private TascaDTO tasca;
+
+    public InstanciaTascaDTO(){}
+    
+    public InstanciaTascaDTO(BigInteger idInstanciaTasca, String evidencia, String text, InstanciaDTO instancia,
+            TascaDTO tasca) {
+        this.idInstanciaTasca = idInstanciaTasca;
+        this.evidencia = evidencia;
+        this.text = text;
+        this.instancia = instancia;
+        this.tasca = tasca;
+    }
+
+    public InstanciaTascaDTO(InstanciaTasca its){
+        this.idInstanciaTasca = its.getIdInstanciaTasca();
+        this.evidencia = its.getEvidencia();
+        this.text = its.getText();
+        instancia = new InstanciaDTO(its.getInstancia());
+        tasca = new TascaDTO(its.getTasca());
+    }
+
+    public BigInteger getIdInstanciaTasca() {
+        return idInstanciaTasca;
+    }
+    public void setIdInstanciaTasca(BigInteger idInstanciaTasca) {
+        this.idInstanciaTasca = idInstanciaTasca;
+    }
+    public String getEvidencia() {
+        return evidencia;
+    }
+    public void setEvidencia(String evidencia) {
+        this.evidencia = evidencia;
+    }
+    public String getText() {
+        return text;
+    }
+    public void setText(String text) {
+        this.text = text;
+    }
+    public InstanciaDTO getInstancia() {
+        return instancia;
+    }
+    public void setInstancia(InstanciaDTO instancia) {
+        this.instancia = instancia;
+    }
+    public TascaDTO getTasca() {
+        return tasca;
+    }
+    public void setTasca(TascaDTO tasca) {
+        this.tasca = tasca;
+    }
+    
+}

+ 50 - 0
src/main/java/es/uv/saic/dto/ProcesDTO.java

@@ -0,0 +1,50 @@
+package es.uv.saic.dto;
+
+public class ProcesDTO {
+    private String nomProces;
+    private Integer lugar;
+    private Integer lugar2;
+    private String tambit;
+
+    public ProcesDTO() {
+    }
+
+    public ProcesDTO(String nomProces, Integer lugar, Integer lugar2, String tambit) {
+        this.nomProces = nomProces;
+        this.lugar = lugar;
+        this.lugar2 = lugar2;
+        this.tambit = tambit;
+    }
+
+    public String getNomProces() {
+        return nomProces;
+    }
+
+    public Integer getLugar() {
+        return lugar;
+    }
+
+    public Integer getLugar2() {
+        return lugar2;
+    }
+
+    public String getTambit() {
+        return tambit;
+    }
+
+    public void setNomProces(String nomProces) {
+        this.nomProces = nomProces;
+    }
+
+    public void setLugar(Integer lugar) {
+        this.lugar = lugar;
+    }
+
+    public void setLugar2(Integer lugar2) {
+        this.lugar2 = lugar2;
+    }
+
+    public void setTambit(String tambit) {
+        this.tambit = tambit;
+    }
+}

+ 35 - 30
src/main/java/es/uv/saic/dto/TascaDTO.java

@@ -1,50 +1,55 @@
 package es.uv.saic.dto;
 
+import es.uv.saic.domain.Tasca;
+import es.uv.saic.domain.Tipus;
+
 public class TascaDTO {
-    private String nomProces;
-    private Integer lugar;
-    private Integer lugar2;
-    private String tambit;
+	private Integer idTasca;
+	private String codiEvidencia;
+    private Integer tipus;
+    private String nomEvidenciaCas;
 
     public TascaDTO() {
     }
-
-    public TascaDTO(String nomProces, Integer lugar, Integer lugar2, String tambit) {
-        this.nomProces = nomProces;
-        this.lugar = lugar;
-        this.lugar2 = lugar2;
-        this.tambit = tambit;
+    
+    public TascaDTO(Integer idTasca, String codiEvidencia, Tipus tipus, String nomEvidenciaCas) {
+        this.idTasca = idTasca;
+        this.codiEvidencia = codiEvidencia;
+        this.tipus = tipus.getTipus();
+        this.nomEvidenciaCas = nomEvidenciaCas;
     }
 
-    public String getNomProces() {
-        return nomProces;
+    public TascaDTO(Tasca tasca){
+        this.idTasca = tasca.getIdTasca();
+        this.codiEvidencia = tasca.getCodiEvidencia();
+        this.tipus = tasca.getTipus().getTipus();
+        this.nomEvidenciaCas = tasca.getNomEvidenciaCas();
     }
-
-    public Integer getLugar() {
-        return lugar;
+    public Integer getIdTasca() {
+        return idTasca;
     }
-
-    public Integer getLugar2() {
-        return lugar2;
+    public void setIdTasca(Integer idTasca) {
+        this.idTasca = idTasca;
     }
-
-    public String getTambit() {
-        return tambit;
+    public String getCodiEvidencia() {
+        return codiEvidencia;
     }
-
-    public void setNomProces(String nomProces) {
-        this.nomProces = nomProces;
+    public void setCodiEvidencia(String codiEvidencia) {
+        this.codiEvidencia = codiEvidencia;
+    }
+    public Integer getTipus() {
+        return tipus;
     }
 
-    public void setLugar(Integer lugar) {
-        this.lugar = lugar;
+    public void setTipus(Integer tipus) {
+        this.tipus = tipus;
     }
 
-    public void setLugar2(Integer lugar2) {
-        this.lugar2 = lugar2;
+    public String getNomEvidenciaCas() {
+        return nomEvidenciaCas;
     }
 
-    public void setTambit(String tambit) {
-        this.tambit = tambit;
+    public void setNomEvidenciaCas(String nomEvidenciaCas) {
+        this.nomEvidenciaCas = nomEvidenciaCas;
     }
 }

+ 12 - 0
src/main/java/es/uv/saic/service/InstanciaTascaService.java

@@ -25,6 +25,7 @@ import es.uv.saic.domain.Plantilla;
 import es.uv.saic.domain.TascaVersioTransfer;
 import es.uv.saic.domain.Organ;
 import es.uv.saic.domain.Usuari;
+import es.uv.saic.dto.InstanciaTascaDTO;
 import es.uv.saic.dto.TascaInformeTransferDTO;
 
 @Service
@@ -426,6 +427,17 @@ public class InstanciaTascaService {
 			return i.get();
 		}
 	}
+
+	public InstanciaTascaDTO findByIdDTO(BigInteger id) {
+		Optional<InstanciaTasca> i = this.instanciaTascaRepository.findById(id);
+		
+		if(i.isEmpty()) {
+			return null;
+		}
+		else {
+			return new InstanciaTascaDTO(i.get());
+		}
+	}
 	
 	public List<InstanciaTasca> getPastTasks(){
 		return this.instanciaTascaRepository.getPastTasks();

+ 4 - 1
src/main/java/es/uv/saic/web/DashboardController.java

@@ -113,6 +113,9 @@ public class DashboardController {
 
 	@Value("${saic.url.domain}")
 	private String uri;
+	
+	@Value("${saic.url.docs.domain}")
+	private String uriDocs;
 
 	@Value("${saic.data.templates.fileNotFound}")
 	private String fileNotFound;
@@ -688,7 +691,7 @@ public class DashboardController {
 	
 	private Document findByCategoriaOrgan(Integer idCategoria, Integer lugar, String tlugar) {
 		Document doc = null;
-		URI uriobjUri = URI.create(uri + "/findByCategoriaOrgan");
+		URI uriobjUri = URI.create(uriDocs + "/findByCategoriaOrgan");
 		ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 		
 		try {

+ 65 - 33
src/main/java/es/uv/saic/web/DocumentController.java

@@ -1,38 +1,52 @@
 package es.uv.saic.web;
 
-import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import es.uv.saic.dto.CategoriaDTO;
 import es.uv.saic.dto.DocumentTmpDTO;
 import es.uv.saic.domain.Document;
-import es.uv.saic.service.DocumentService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 
 @RestController
 public class DocumentController {
-    @Autowired
-    private DocumentService ds;
+    @Value("${saic.url.docs.domain}")
+	private String uriDocs;
+
+    private final HttpClient httpClient = HttpClient.newHttpClient();
+    private final ObjectMapper mapper = new ObjectMapper();
+
     /*
      * endpoint para save
      */
     @PostMapping("/document/save")
     public ResponseEntity<?> save(@RequestBody Document doc) {
         try {
-            Document auxDocument = ds.save(doc);        
-            return (auxDocument != null) ? ResponseEntity.ok(auxDocument) : 
-                ResponseEntity.badRequest().body("El documento no se a podido guardad correctamente.") ; 
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/document/save"))
+                .header("Content-Type", "application/json")
+                .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(doc)))
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            return ResponseEntity.status(response.statusCode()).body(response.body());
+
         } catch (Exception e) {
             e.printStackTrace();
-            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
-        }   
+            return ResponseEntity.badRequest().body("Error comunicando con el servicio de documentos: " + e.getMessage());
+        }
     }
 
     /*
@@ -41,12 +55,17 @@ public class DocumentController {
     @PostMapping("/findByCategoriaOrgan")
     public ResponseEntity<?> findByCategoriaOrgan(@RequestBody CategoriaDTO categoria) {
         try {
-            Document document = ds.findByCategoriaOrgan(categoria.getCategoria(), categoria.getLugar(), categoria.getTlugar());
-            return (document != null) ? ResponseEntity.ok(document) : 
-                ResponseEntity.badRequest().body("El documento no se a podido encontrar.") ;
+           HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/findByCategoriaOrgan"))
+                .header("Content-Type", "application/json")
+                .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(categoria)))
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            return ResponseEntity.status(response.statusCode()).body(response.body());
         } catch (Exception e) {
-            e.printStackTrace();
-            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
+             e.printStackTrace();
+            return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());
         }
     }
 
@@ -56,12 +75,16 @@ public class DocumentController {
     @GetMapping("/document/{idDocument}")
     public ResponseEntity<?> findByID(@RequestParam Integer idDocument) {
         try {
-            Document document = ds.findById(idDocument);
-            return (document != null) ? ResponseEntity.ok(document) : 
-                ResponseEntity.badRequest().body("El documento no se a podido encontrar.") ;
+             HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/document/" + idDocument))
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            return ResponseEntity.status(response.statusCode()).body(response.body());
         } catch (Exception e) {
             e.printStackTrace();
-            return ResponseEntity.badRequest().body("No se encontro el documento: " + e.getMessage());
+            return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());
         }
     }
     
@@ -70,29 +93,38 @@ public class DocumentController {
      * endpoint para upload
      */
     @PostMapping("/document/upload")
-    public ResponseEntity<String> upload(@RequestBody DocumentTmpDTO documentTmpDTO) {
-        try{
-            return ResponseEntity.ok(ds.upload(documentTmpDTO.getIdDocument(), documentTmpDTO.getIdCategoria(),
-                documentTmpDTO.getLugar(), documentTmpDTO.getTlugar(), documentTmpDTO.getFile()));
-        } catch(IllegalStateException e) {
-            e.printStackTrace();
-            return ResponseEntity.badRequest().body("Error: " + e.getMessage());
-        } catch(IOException e) {
+    public ResponseEntity<?> upload(@RequestBody DocumentTmpDTO documentTmpDTO) {
+        try {
+            HttpRequest request = HttpRequest.newBuilder()
+                    .uri(URI.create(uriDocs + "/document/upload"))
+                    .header("Content-Type", "application/json")
+                    .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(documentTmpDTO)))
+                    .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            return ResponseEntity.status(response.statusCode()).body(response.body());
+
+        } catch (Exception e) {
             e.printStackTrace();
-            return ResponseEntity.badRequest().body("Error: " + e.getMessage());
+            return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());
         }
     }
 
     @PostMapping("/document/archive")
     public ResponseEntity<?> archive(@RequestBody Document doc) {
         try {
-            Document auxDocument = ds.archive(doc);        
-            return (auxDocument != null) ? ResponseEntity.ok(auxDocument) : 
-                ResponseEntity.badRequest().body("El documento no se a podido archivar correctamente.") ; 
+            HttpRequest request = HttpRequest.newBuilder()
+                    .uri(URI.create(uriDocs + "/document/archive"))
+                    .header("Content-Type", "application/json")
+                    .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(doc)))
+                    .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            return ResponseEntity.status(response.statusCode()).body(response.body());
+
         } catch (Exception e) {
             e.printStackTrace();
-            return ResponseEntity.badRequest().body("Hubo un error al procesar el documento: " + e.getMessage());
+            return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());
         }
-        
     }
 }

+ 164 - 628
src/main/java/es/uv/saic/web/DownloadController.java

@@ -21,9 +21,11 @@ import jakarta.servlet.http.HttpServletResponse;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties.Http;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -46,7 +48,7 @@ import es.uv.saic.dto.CategoriaDTO;
 import es.uv.saic.dto.IndicadorEnquestaDTO;
 import es.uv.saic.dto.IndicadorEnquestaValorDTO;
 import es.uv.saic.dto.PdfDTO;
-import es.uv.saic.dto.TascaDTO;
+import es.uv.saic.dto.ProcesDTO;
 import es.uv.saic.dto.TascaInformeTransferDTO;
 import es.uv.saic.service.PlantillaService;
 import fr.opensagres.xdocreport.core.XDocReportException;
@@ -84,6 +86,12 @@ public class DownloadController {
 	@Value("${saic.url.domain}")
 	private String uri;
 
+	@Value("${saic.url.docs.domain}")
+	private String uriDocs;
+	
+	private final HttpClient httpClient = HttpClient.newHttpClient();
+    private final ObjectMapper mapper = new ObjectMapper();
+
 	/*
 	 * Download a file associated with a task instance
 	 * @param model
@@ -93,28 +101,29 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/download/{fileName}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
-	public FileSystemResource download(Model model, @PathVariable("fileName") BigInteger idInstanciaTasca, HttpServletResponse response) throws FileNotFoundException {		
-		InstanciaTasca i = findByIdTasca(idInstanciaTasca);
-		FileSystemResource r = null;
-		if(i.getTasca().getTipus().getTipus() == 22){
-			r = new FileSystemResource(i.getEvidencia());
-			String extension = "."+FilenameUtils.getExtension(i.getEvidencia());
-			String name = "-"+i.getTasca().getNomEvidenciaCas().replace(" ", "_");
-			response.setHeader("Content-Disposition", "attachment; filename="+i.getTasca().getCodiEvidencia()+name+extension);
-		}
-		else{
-			r = new FileSystemResource(this.filePath+i.getEvidencia());
-			response.setHeader("Content-Disposition", "attachment; filename="+i.getTasca().getCodiEvidencia()+"_"+i.getEvidencia());
-		}
-		
-		if(!r.exists()) {
-			FileNotFoundException e = new FileNotFoundException("No se ha podido encontrar el archivo solicitado");
-			e.setStackTrace(new StackTraceElement[0]);
-			throw e;
-		}
+	public FileSystemResource download(Model model, @PathVariable("fileName") BigInteger idInstanciaTasca) throws FileNotFoundException {	
+		FileSystemResource file = null;	
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/download/" + idInstanciaTasca))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<FileSystemResource>(){});
+
+			} else {
+				System.err.println("Failed to download the files. HTTP error code: " + response.statusCode());
+			}
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 		
-		return r;
-	}
+		return file;
+	}					
 
 	/*
 	 * Download a document by its ID
@@ -125,16 +134,26 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/download/document/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
-	public FileSystemResource downloadDocument(Model model, @PathVariable("id") Integer idDocument, HttpServletResponse response) throws FileNotFoundException {		
-		Document document = findByIdDocument(idDocument);
-		FileSystemResource file = new FileSystemResource(document.getRuta());
-		if(!file.exists()) {
-			FileNotFoundException e = new FileNotFoundException("No se ha podido encontrar el archivo solicitado");
-			e.setStackTrace(new StackTraceElement[0]);
-			throw e;
-		}
-		
-		response.setHeader("Content-Disposition", "attachment; filename="+file.getFilename());
+	public FileSystemResource downloadDocument(Model model, @PathVariable("id") Integer idDocument) throws FileNotFoundException {		
+		FileSystemResource file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/download/document/" + idDocument))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<FileSystemResource>(){});
+
+			} else {
+				System.err.println("Failed to download the files. HTTP error code: " + response.statusCode());
+			}
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 		return file;
 	}
 
@@ -148,23 +167,27 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/download/report/{t}/{p}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody 
-	public FileSystemResource downloadReport(Model model, @PathVariable("t") Integer idTitulacio, @PathVariable("p") String nomProces,
-			HttpServletResponse response) throws IOException, XDocReportException {
-		
-		Organ titulacio = findByIDOrgan("T", idTitulacio);
-		
-		TascaInformeTransferDTO it = getLastByProcName(nomProces, titulacio.getId().getLugar(), 
-														titulacio.getOrgan().getId().getLugar(), 
-														titulacio.getOrgan().getTambit());
-		
-		if(it != null) {
-			if((new File(this.filePath+it.getEvidencia())).exists()) {
-				response.setHeader("Content-Disposition", "attachment; filename="+Integer.toString(idTitulacio)+"_"+nomProces+".pdf");
-				return new FileSystemResource(this.filePath+it.getEvidencia());
+	public FileSystemResource downloadReport(Model model, @PathVariable("t") Integer idTitulacio, @PathVariable("p") String nomProces) throws IOException, XDocReportException {
+		FileSystemResource file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/download/report/" + idTitulacio + "/" + nomProces))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<FileSystemResource>(){});
+
+			} else {
+				System.err.println("Failed to download the report. HTTP error code: " + response.statusCode());
 			}
-		}
-		
-		return new FileSystemResource(this.fileNotFound);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 
 
@@ -177,171 +200,27 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/download/template/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody 
-	public byte[] downloadTemplate(Model model, @PathVariable("id") BigInteger idTascai, HttpServletResponse response) throws IOException, XDocReportException {
-		XDocReportRegistry.getRegistry().clear();
-		String reportId = "none";
-		InstanciaTasca it = findByIdTasca(idTascai);
-		Tasca tasca = it.getTasca();
-		 
-		/* Check if specific template exists */
-		Integer idTitulacio = it.getInstancia().getTitulacio();
-		String templatePath = this.templatePath+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-		if(it.getInstancia().getOrgan().getTambit().equals("G") | idTitulacio == 1) {
-			File f = new File(this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-			}
-		}
-		else if(it.getInstancia().getOrgan().getTambit().equals("M") | idTitulacio == 2) {
-			File f = new File(this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-			}
-		}
-		
-		File f = new File(templatePath);
-		if(!f.exists()) {
-			FileNotFoundException e = new FileNotFoundException("No se ha encontrado la plantilla "+tasca.getCodiEvidencia()+".docx");
-			e.setStackTrace(new StackTraceElement[0]);
-			throw e;
-		}
-				
-		InputStream in = new FileInputStream(f);
-		IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity);
-		FieldsMetadata metadata = new FieldsMetadata();
-		metadata.addFieldAsImage("logo");
-		report.setFieldsMetadata(metadata);
-		IContext context = report.createContext();
-		IImageProvider img;
-		if(new File(this.logoPath+"C"+Integer.toString(it.getInstancia().getCentre())+".png").exists()) {
-			img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(it.getInstancia().getCentre())+".png"));
-		}
-		else {
-			img = new FileImageProvider(new File(this.logoPath+"C0.png"));
-		}
-		context.put("logo", img);
-		context.put("centre", it.getInstancia().getOrgan().getOrgan().getNomVal());
-		context.put("titulacio", it.getInstancia().getOrgan().getNomCas());
-		context.put("curs", Integer.toString(it.getInstancia().getProces().getCursAvaluat()-1)+" - "+Integer.toString(it.getInstancia().getProces().getCursAvaluat()));
-		context.put("curs_anterior", Integer.toString(it.getInstancia().getProces().getCursAvaluat()-2)+" - "+Integer.toString(it.getInstancia().getProces().getCursAvaluat()-1));
-		
-		Proces proces = it.getInstancia().getProces();
-		Integer idCentre = it.getInstancia().getCentre();
-			
-		if(tasca.getTipus().getTipus() == 14) { // Iterable template task
-			List<Organ> titulacions = new ArrayList<Organ>();
-			Integer ambit = idTitulacio/(int)1000;
-			titulacions = getTitulacionsByTypeCentre(it.getInstancia().getOrgan().getOrgan().getId().getLugar(), ambit);
-			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
-			for(Organ x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getId().getLugar(), idCentre, proces.getCursAvaluat());
-				t.put("titulacio", x.getNomCas());
-				data.add(t);
-			} 
-			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
-		}
-		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
-		}	
-		
-		ByteArrayOutputStream out = new ByteArrayOutputStream();  
-		report.process(context, out);
-	    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+tasca.getCodiEvidencia()+".docx\"");
+	public byte[] downloadTemplate(Model model, @PathVariable("id") BigInteger idTascai) throws IOException, XDocReportException {
+		byte[] file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/download/template/" + idTascai))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
 
-		return out.toByteArray();
-		
-	}
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<byte[]>(){});
 
-	/*
-	 * Populate the template data into the context
-	 * @param idTitulacio The ID of the degree
-	 * @param idCentre The ID of the center
-	 * @param curs The academic year
-	 * @param context The IContext to populate
-	 */
-	private void getTemplateData(Integer idTitulacio, Integer idCentre, Integer curs, IContext context) {
-		
-		/*  Indicadores del data warehouse */
-		try {
-			List<Indicador> indicadores;
-			indicadores = getFromTitulacion(idTitulacio, curs);
-			for(Indicador i : indicadores) { 
-				context.put(i.getIndicador(), i.getValor());
+			} else {
+				System.err.println("Failed to download the template. HTTP error code: " + response.statusCode());
 			}
-		} 
-		catch(Exception e) { }
-		
-		/*  Indicadores de encuestas  */
-		List<IndicadorEnquestaValorDTO> enquestesT;
-		enquestesT = getAllInds(idTitulacio, idCentre, curs);
-				
-		for(IndicadorEnquestaValorDTO i : enquestesT) {
-			String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit());
-			indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus());		
-			indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd());
-			context.put(indicador, formatValue(i.getValor()));
-		}
-	}
 
-	/*
-	 * Format a value for template insertion
-	 * @param v The value to format
-	 * @return The formatted value
-	 */
-	private String formatValue(String v) {	
-		if(v == null) return ""; 
-		if(v.equals("NP")) return "NP";
-		if(v.isEmpty() | v.isBlank()) {
-			return "";
-		}
-		
-		try{
-	        return String.format("%.2f", Float.parseFloat(v)).replace(",", ".");
-	    } 
-		catch(NumberFormatException e){ }
-		
-		try{
-	        return Integer.toString(Integer.parseInt(v));
-	    } 
-		catch(NumberFormatException e){ }
-		
-		return v;
-	}
-	
-	/*
-	 * Get template data as a HashMap
-	 * @param idTitulacio The ID of the degree
-	 * @param idCentre The ID of the center
-	 * @param curs The academic year
-	 * @return A HashMap containing the template data
-	 */
-	private HashMap<String, String> getTemplateDataArray(Integer idTitulacio, Integer idCentre, Integer curs) {
-		
-		HashMap<String, String> info = new HashMap<String, String>();
-		
-		/*  Indicadores del data warehouse */
-		try {
-			List<Indicador> indicadores;
-			indicadores = getFromTitulacion(idTitulacio, curs);
-			for(Indicador i : indicadores) { 
-				info.put(i.getIndicador(), i.getValor());
-			}
-		} 
-		catch(Exception e) { }
-		
-		/*  Indicadores de encuestas  */
-		List<IndicadorEnquestaValorDTO> enquestesT;	
-		enquestesT = getAllInds(idTitulacio, idCentre, curs);
-				
-		for(IndicadorEnquestaValorDTO i : enquestesT) {
-			String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit());
-			indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus());	
-			indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd());
-			info.put(indicador, formatValue(i.getValor()));
-		}	
-		
-		return info;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 
 	/*
@@ -357,73 +236,28 @@ public class DownloadController {
 	@GetMapping(value="/test/template/{titulacio}/{centre}/{idProces}/{idTascap}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
 	public byte[] testTemplate(Model model, @PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
-			@PathVariable("idTascap") Integer idTascap, @PathVariable("idProces") Integer idProces, HttpServletResponse response) 
+			@PathVariable("idTascap") Integer idTascap, @PathVariable("idProces") Integer idProces) 
 					throws IOException, XDocReportException {
-		XDocReportRegistry.getRegistry().clear();
-		String reportId = "none";
-		
-		Tasca tasca = getByProcesTascap(idProces, idTascap);
-		Proces proces = findByIDProces(idProces);
-		Organ titulacio = findByIDOrgan("T", idTitulacio);
-		Organ centre = findByIDOrgan("C", idCentre);
-		Integer ambit = idTitulacio/(int)1000;
-		
-		/* Check if specific template exists */
-		String templatePath = this.templatePath+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-		if(titulacio.getTambit().equals("G") | idTitulacio == 1) {
-			File f = new File(this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-			}
-		}
-		else if(titulacio.getTambit().equals("M") | idTitulacio == 2) {
-			File f = new File(this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx";
-			}
-		}
-		
-		InputStream in = new FileInputStream(new File(templatePath));
-		IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity);
-		FieldsMetadata metadata = new FieldsMetadata();
-		metadata.addFieldAsImage("logo");
-		report.setFieldsMetadata(metadata);
-		IContext context = report.createContext();
-		IImageProvider img;
-		if(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png").exists()) {
-			img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png"));
-		}
-		else {
-			img = new FileImageProvider(new File(this.logoPath+"C0.png"));
-		}
-		context.put("logo", img);
-		context.put("centre", centre.getNomVal());
-		context.put("titulacio", titulacio.getNomVal());
-		context.put("curs", Integer.toString(proces.getCursAvaluat()-1)+" - "+Integer.toString(proces.getCursAvaluat()));
-		context.put("curs_anterior", Integer.toString(proces.getCursAvaluat()-2)+" - "+Integer.toString(proces.getCursAvaluat()-1));
-		
-		if(tasca.getTipus().getTipus() == 14) { // Iterable template task
-			List<Organ> titulacions = new ArrayList<Organ>();
-			titulacions = getTitulacionsByTypeCentre(centre.getId().getLugar(), ambit);
-			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
-			for(Organ x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getId().getLugar(), idCentre, proces.getCursAvaluat());
-				t.put("titulacio", x.getNomCas());
-				data.add(t);
+		byte[] file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/test/template/" + idTitulacio + "/" + idCentre + "/" + idProces + "/" + idTascap))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<byte[]>(){});
+
+			} else {
+				System.err.println("Failed to download the test template. HTTP error code: " + response.statusCode());
 			}
-			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
-		}
-		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
-		}
-		
-		ByteArrayOutputStream out = new ByteArrayOutputStream();  
-		report.process(context, out);
-	    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+tasca.getCodiEvidencia()+".docx\"");
 
-		return out.toByteArray();
-		
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 
 	/*
@@ -440,73 +274,27 @@ public class DownloadController {
 	@GetMapping(value="/test/template2/{titulacio}/{centre}/{evidencia}/{curs}/{tipusTasca}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
 	public byte[] testTemplate(Model model, @PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
-			@PathVariable("evidencia") String evidencia, @PathVariable("curs") Integer curs, @PathVariable("tipusTasca") Integer tipusTasca, 
-			HttpServletResponse response) throws IOException, XDocReportException {
-		XDocReportRegistry.getRegistry().clear();
-		String reportId = "none";
-		
-		Organ titulacio = findByIDOrgan("T", idTitulacio);
-		Organ centre = findByIDOrgan("C", idCentre);
-		Integer ambit = idTitulacio/(int)1000;
-		
-		/* Check if specific template exists */
-		String templatePath = this.templatePath+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx";
-		if(idTitulacio < 2000 | idTitulacio == 1) {
-			File f = new File(this.templatePath+"/T1/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T1/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx";
-			}
-			ambit = 1;
-		}
-		else if((idTitulacio >= 2000 & idTitulacio < 3000) | idTitulacio == 2) {
-			File f = new File(this.templatePath+"/T2/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx");
-			if(f.exists() && !f.isDirectory()) { 
-				templatePath = this.templatePath+"/T2/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx";
-			}
-			ambit = 2;
-		}
-		
-		InputStream in = new FileInputStream(new File(templatePath));
-		IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity);
-		FieldsMetadata metadata = new FieldsMetadata();
-		metadata.addFieldAsImage("logo");
-		report.setFieldsMetadata(metadata);
-		IContext context = report.createContext();
-		IImageProvider img;
-		if(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png").exists()) {
-			img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png"));
-		}
-		else {
-			img = new FileImageProvider(new File(this.logoPath+"C0.png"));
-		}
-		context.put("logo", img);
-		context.put("centre", centre.getNomVal());
-		context.put("titulacio", titulacio.getNomVal());
-		context.put("curs", Integer.toString(curs-1)+" - "+Integer.toString(curs));
-		context.put("curs_anterior", Integer.toString(curs-2)+" - "+Integer.toString(curs-1));
-		
-		if(tipusTasca == 14) { // Iterable template task
-			List<Organ> titulacions = new ArrayList<Organ>();
-			titulacions = getTitulacionsByTypeCentre(centre.getId().getLugar(), ambit);
-			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
-			for(Organ x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getId().getLugar(), idCentre, curs);
-				t.put("titulacio", x.getNomCas());
-				data.add(t);
+			@PathVariable("evidencia") String evidencia, @PathVariable("curs") Integer curs, @PathVariable("tipusTasca") Integer tipusTasca) throws IOException, XDocReportException {
+		byte[] file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/test/template2/" + idTitulacio + "/" + idCentre + "/" + evidencia + "/" + curs + "/" + tipusTasca))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<byte[]>(){});
+
+			} else {
+				System.err.println("Failed to download the test template. HTTP error code: " + response.statusCode());
 			}
-			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, curs, context);
-		}
-		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, curs, context);
-		}
-		
-		ByteArrayOutputStream out = new ByteArrayOutputStream();  
-		report.process(context, out);
-	    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+evidencia+".docx\"");
 
-		return out.toByteArray();
-		
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 	
 	/*
@@ -518,11 +306,27 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/pdf/download/{idTascai}")
 	@ResponseBody
-	public byte[] downloadTemplatePdf(Model model, @PathVariable("idTascai") BigInteger idTascai, HttpServletResponse response) throws IOException, InterruptedException {
-		InstanciaTasca it = findByIdTasca(idTascai);
-		response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+it.getIdInstanciaTasca()+".pdf\"");
-		response.setHeader(HttpHeaders.CONTENT_TYPE, "application/pdf");
-		return pls.toPDF(it.getText(), Optional.of(idTascai));
+	public byte[] downloadTemplatePdf(Model model, @PathVariable("idTascai") BigInteger idTascai) throws IOException, InterruptedException {
+		byte[] file = null;
+		try {
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/pdf/download/" + idTascai))
+                .header("Content-Type", "application/json")
+                .GET()
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<byte[]>(){});
+
+			} else {
+				System.err.println("Failed to download the test template PDF. HTTP error code: " + response.statusCode());
+			}
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 
 	/*
@@ -534,297 +338,29 @@ public class DownloadController {
 	 */
 	@PostMapping(value="/pdf/preview")
 	@ResponseBody
-	public byte[] downloadTemplatePdf(Model model, HttpServletResponse response,
+	public byte[] downloadTemplatePdf(Model model,
 			@RequestParam("content") String content, @RequestParam("idtascai") Optional<BigInteger> idtascai) throws IOException, InterruptedException {
-		response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"borrador.pdf\"");
-		response.setHeader(HttpHeaders.CONTENT_TYPE, "application/pdf");	
-		return toPDF(content, idtascai);
-	}
-
-	private TascaInformeTransferDTO getLastByProcName(String nomProces, Integer lugar, Integer lugar2, String tambit) {
-		URI uriObj = URI.create(uri + "/getLastByProcName");
-		ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-		TascaInformeTransferDTO tascaInformeTransferDTO = null;
-		
+		byte[] file = null;
+		PdfDTO pdf = new PdfDTO(content, idtascai);
 		try {
-			TascaDTO TascaDTO = new TascaDTO(nomProces, lugar, lugar2, tambit);
-			String requestBody = mapper.writeValueAsString(TascaDTO);
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.header("Content-Type", "application/json")
-					.POST(HttpRequest.BodyPublishers.ofString(requestBody))
-					.build();
+			String requestBody = mapper.writeValueAsString(pdf);
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/pdf/preview"))
+                .header("Content-Type", "application/json")
+                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
+                .build();
 
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				tascaInformeTransferDTO = mapper.readValue(response.body(), new TypeReference<TascaInformeTransferDTO>() {});
-
-			} else {
-				System.err.println("Failed to find enquesta by Curs, Ambit, Estudi. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return tascaInformeTransferDTO;
-	}
-
-	private InstanciaTasca findByIdTasca(BigInteger idInstanciaTasca) {
-		URI uriObj = URI.create(uri + "/instanciatasca/" + idInstanciaTasca);
-		ObjectMapper mapper = new ObjectMapper();
-		InstanciaTasca instanciaTasca = null;
-		try {
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				instanciaTasca = mapper.readValue(response.body(), new TypeReference<InstanciaTasca>() {});
-			} else {
-				System.err.println("Failed to find InstanciaTasca by ID. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return instanciaTasca;
-	}
-
-	private List<IndicadorEnquestaValorDTO> getAllInds(Integer idTitulacio, Integer idCentre, Integer curs) {
-		URI uriObj = URI.create(uri + "/allInds2");
-		ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-		List<IndicadorEnquestaValorDTO> list = null;
-
-		try {
-			IndicadorEnquestaDTO IndicadorEnquestaDTO = new IndicadorEnquestaDTO(idTitulacio, idCentre, curs);
-			String requestBody = mapper.writeValueAsString(IndicadorEnquestaDTO);
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.header("Content-Type", "application/json")
-					.POST(HttpRequest.BodyPublishers.ofString(requestBody))
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				list = mapper.readValue(response.body(), new TypeReference<List<IndicadorEnquestaValorDTO>>() {});
-
-			} else {
-				System.err.println("Failed to get all IndicadorsEnquestaValorDTO. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return list;
-	}
-
-	private Tasca getByProcesTascap(Integer idProces, Integer idTascap) {
-		URI uriObj = URI.create(uri + "/getByProcesTascap/" + idProces + "/" + idTascap);
-		ObjectMapper mapper = new ObjectMapper();
-		Tasca tasca = null;
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				tasca = mapper.readValue(response.body(), new TypeReference<Tasca>() {});
-
-			} else {
-				System.err.println("Failed to get Tasca. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return tasca;
-	}
-
-	private List<Indicador> getFromTitulacion(Integer idTitulacio, Integer curs) {
-		URI uriObj = URI.create(uri + "/getFromTitulacio/" + idTitulacio + "/" + curs);
-		ObjectMapper mapper = new ObjectMapper();
-		List<Indicador> inds = new ArrayList<>();
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				inds = mapper.readValue(response.body(), new TypeReference<List<Indicador>>() {});
-
-			} else {
-				System.err.println("Failed to getFromTitulacion. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return inds;
-	}
-
-	private Proces findByIDProces(Integer idProces) {
-		URI uriObj = URI.create(uri + "/proces/" + idProces);
-		ObjectMapper mapper = new ObjectMapper();
-		Proces proces = null;
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				proces = mapper.readValue(response.body(), new TypeReference<Proces>() {});
-
-			} else {
-				System.err.println("Failed to find proces byID. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return proces;
-	}
-
-	
-	private Organ findByIDOrgan(String tlugar, Integer idTitulacio) {
-		URI uriObj = URI.create(uri + "/proces/" + tlugar + "/" + idTitulacio);
-		ObjectMapper mapper = new ObjectMapper();
-		Organ organ = null;
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				organ = mapper.readValue(response.body(), new TypeReference<Organ>() {});
-
-			} else {
-				System.err.println("Failed to find proces byID. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return organ;
-	}
-
-	private List<Organ> getTitulacionsByTypeCentre(Integer lugar, Integer ambit) {
-		URI uriObj = URI.create(uri + "/getTitulacionsByTypeCentre/" + lugar + "/" + ambit);
-		ObjectMapper mapper = new ObjectMapper();
-		List<Organ> organs = new ArrayList<>();
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				organs = mapper.readValue(response.body(), new TypeReference<List<Organ>>() {});
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				file = mapper.readValue(response.body(), new TypeReference<byte[]>(){});
 
 			} else {
-				System.err.println("Failed to find proces byID. HTTP error code: " + response.statusCode());
+				System.err.println("Failed to preview the PDF. HTTP error code: " + response.statusCode());
 			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
 
-		return organs;
-	}
-
-	
-	
-	private Document findByIdDocument(Integer idDocument) {
-		URI uriObj = URI.create(uri + "/document/" + idDocument);
-		ObjectMapper mapper = new ObjectMapper();
-		Document document = null;
-
-		try {
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.GET()
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				document = mapper.readValue(response.body(), new TypeReference<Document>() {});
-
-			} else {
-				System.err.println("Failed to find proces byID. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return document;
-	}
-
-	private byte[] toPDF(String content, Optional<BigInteger> idtascai) {
-		URI uriObj = URI.create(uri + "/toPDF/");
-		ObjectMapper mapper = new ObjectMapper();
-		byte[] pdf = null;
-
-		try {
-			PdfDTO pdfDTO = new PdfDTO(content, idtascai);
-			String requestBody = mapper.writeValueAsString(pdfDTO);
-
-			HttpClient httpClient = HttpClient.newHttpClient();
-			HttpRequest request = HttpRequest.newBuilder()
-					.uri(uriObj)
-					.header("Content-Type", "application/json")
-					.POST(HttpRequest.BodyPublishers.ofString(requestBody))
-					.build();
-
-			HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-
-			if (response.statusCode() == HttpURLConnection.HTTP_OK) {
-				pdf = mapper.readValue(response.body(), new TypeReference<byte[]>() {});
-
-			} else {
-				System.err.println("Failed to find proces byID. HTTP error code: " + response.statusCode());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return pdf;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+		return file;
 	}
 }

+ 35 - 7
src/main/java/es/uv/saic/web/PlantillaController.java

@@ -1,9 +1,19 @@
 package es.uv.saic.web;
 
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import es.uv.saic.dto.PdfDTO;
 import es.uv.saic.service.PlantillaService;
 
@@ -13,18 +23,36 @@ import org.springframework.web.bind.annotation.RequestBody;
 
 @RestController
 public class PlantillaController {
-    @Autowired
-    private PlantillaService ps;
+    
+	@Value("${saic.url.docs.domain}")
+	private String uriDocs;
+	
+	private final HttpClient httpClient = HttpClient.newHttpClient();
+    private final ObjectMapper mapper = new ObjectMapper();
 
     @PostMapping("/toPDF")
     public ResponseEntity<?> toPDF(@RequestBody PdfDTO pdfDTO) {
-        try {
-            byte[] pdf = ps.toPDF(pdfDTO.getContent(), pdfDTO.getIdtascai());  
-            return (pdf != null && pdf.length != 0) ? ResponseEntity.ok(pdf) : ResponseEntity.badRequest().body("El pdf esta vacio o es null");
+        byte[] file = null;
+		try {
+			String requestBody = mapper.writeValueAsString(pdfDTO);
+            HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create(uriDocs + "/toPDF"))
+                .header("Content-Type", "application/json")
+                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
+                .build();
+
+            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
+            if (response.statusCode() == HttpURLConnection.HTTP_OK){
+				return ResponseEntity.ok(file = mapper.readValue(response.body(), new TypeReference<byte[]>(){}));
+
+			} else {
+				System.err.println("Failed to convert the PDF. HTTP error code: " + response.statusCode());
+			}
+
         } catch (Exception e) {
-             e.printStackTrace();
-            return ResponseEntity.badRequest().body("Error al pdf:" +  e.getMessage());
+            e.printStackTrace();
         }
+		return ResponseEntity.badRequest().body("Failed to convert the PDF.");
     }
     
 }

+ 6 - 4
src/main/java/es/uv/saic/web/TascaController.java

@@ -4,7 +4,8 @@ import java.math.BigInteger;
 
 import es.uv.saic.domain.InstanciaTasca;
 import es.uv.saic.domain.Tasca;
-import es.uv.saic.dto.TascaDTO;
+import es.uv.saic.dto.InstanciaTascaDTO;
+import es.uv.saic.dto.ProcesDTO;
 import es.uv.saic.dto.TascaInformeTransferDTO;
 import es.uv.saic.service.InstanciaTascaService;
 import es.uv.saic.service.TascaService;
@@ -12,6 +13,7 @@ import es.uv.saic.service.TascaService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RestController;
+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;
@@ -26,10 +28,10 @@ public class TascaController {
     @Autowired
     InstanciaTascaService its;
 
-    @PostMapping("/instanciatasca/{id}")
+    @GetMapping("/instanciatasca/{id}")
     public ResponseEntity<?> findInstanciaTascaById(@PathVariable("id") BigInteger id) {
         try {
-            InstanciaTasca instanciatasca = its.findById(id);
+            InstanciaTascaDTO instanciatasca = its.findByIdDTO(id);
 
             return (instanciatasca != null) ? 
             ResponseEntity.ok(instanciatasca) : ResponseEntity.badRequest().body("La instancia esta vacia");
@@ -40,7 +42,7 @@ public class TascaController {
     }
 
     @PostMapping("/getLastByProcName")
-    public ResponseEntity<?> getLastByProcName(@RequestBody TascaDTO tascaDTO) {
+    public ResponseEntity<?> getLastByProcName(@RequestBody ProcesDTO tascaDTO) {
         try {
             TascaInformeTransferDTO tit = its.getLastByProcName(tascaDTO.getNomProces(),
                 tascaDTO.getLugar(), tascaDTO.getLugar2(), tascaDTO.getTambit());

+ 1 - 0
src/main/resources/application-local.properties

@@ -2,6 +2,7 @@ server.port = 8080
 # 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.public = ${saic.url.domain}/public
 
 # JPA Debug