Просмотр исходного кода

Implemented reports and rol permisions

Mario Martínez Hernández 6 дней назад
Родитель
Сommit
7bca078520
23 измененных файлов с 475 добавлено и 33 удалено
  1. 14 0
      .vscode/launch.json
  2. 3 0
      .vscode/settings.json
  3. 3 0
      src/main/java/es/uv/saic/shared/domain/CategoriaRepository.java
  4. 44 0
      src/main/java/es/uv/saic/shared/domain/CombinedReport.java
  5. 20 0
      src/main/java/es/uv/saic/shared/domain/InstanciaRepository.java
  6. 23 0
      src/main/java/es/uv/saic/shared/domain/InstanciaTasca.java
  7. 1 2
      src/main/java/es/uv/saic/shared/domain/InstanciaTascaRepository.java
  8. 3 0
      src/main/java/es/uv/saic/shared/domain/OrganRepository.java
  9. 1 1
      src/main/java/es/uv/saic/shared/domain/PamDocuments.java
  10. 152 0
      src/main/java/es/uv/saic/shared/domain/Report.java
  11. 0 10
      src/main/java/es/uv/saic/shared/domain/UsuariRepository.java
  12. 10 2
      src/main/java/es/uv/saic/shared/domain/UsuarisRolRepository.java
  13. 34 0
      src/main/java/es/uv/saic/shared/dto/CategoriaPareDTO.java
  14. 10 4
      src/main/java/es/uv/saic/shared/dto/DocumentDTO.java
  15. 10 0
      src/main/java/es/uv/saic/shared/dto/InstanciaDTO.java
  16. 46 2
      src/main/java/es/uv/saic/shared/dto/InstanciaTascaDTO.java
  17. 0 12
      src/main/java/es/uv/saic/shared/feign/DashboardClient.java
  18. 21 0
      src/main/java/es/uv/saic/shared/feign/DocumentClient.java
  19. 19 0
      src/main/java/es/uv/saic/shared/feign/InformeClient.java
  20. 15 0
      src/main/java/es/uv/saic/shared/feign/InstanciaClient.java
  21. 35 0
      src/main/java/es/uv/saic/shared/feign/LinksClient.java
  22. 3 0
      src/main/java/es/uv/saic/shared/feign/OrganClient.java
  23. 8 0
      src/main/java/es/uv/saic/shared/feign/TascaClient.java

+ 14 - 0
.vscode/launch.json

@@ -0,0 +1,14 @@
+{
+    "configurations": [
+        {
+            "type": "java",
+            "name": "Spring Boot-TestRegex<UV_SAIC_SHARED>",
+            "request": "launch",
+            "cwd": "${workspaceFolder}",
+            "mainClass": "es.uv.saic.shared.domain.TestRegex",
+            "projectName": "UV_SAIC_SHARED",
+            "args": "",
+            "envFile": "${workspaceFolder}/.env"
+        }
+    ]
+}

+ 3 - 0
.vscode/settings.json

@@ -0,0 +1,3 @@
+{
+    "java.compile.nullAnalysis.mode": "disabled"
+}

+ 3 - 0
src/main/java/es/uv/saic/shared/domain/CategoriaRepository.java

@@ -9,6 +9,9 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface CategoriaRepository  extends JpaRepository<Categoria, Integer> {
 	
+	List<Categoria> findByPareAndTambitOrderByOrdreAsc(Integer pare, String tambit); 
+	List<Categoria> findByTipusAndTambitOrderByOrdreAsc(String tipus, String tambit);
+	
 	@Query(value="SELECT * FROM categories WHERE pare = ?1 AND tambit IN('U', 'C', ?2) ORDER BY ordre ASC;", nativeQuery=true)
 	List<Categoria> findByPareTambitAndU(Integer pare, String tambit); 
 

+ 44 - 0
src/main/java/es/uv/saic/shared/domain/CombinedReport.java

@@ -0,0 +1,44 @@
+package es.uv.saic.shared.domain;
+
+import java.util.List;
+
+public class CombinedReport {
+	
+	private String prcode;
+	private String prnameCas;
+	private String prnameVal;
+	private List<String> prcodes;
+	
+	public CombinedReport(String prcode, String prnameCas, String prnameVal, List<String> prcodes) {
+		this.prcode = prcode;
+		this.prnameCas = prnameCas;
+		this.prnameVal = prnameVal;
+		this.prcodes = prcodes;
+	}
+	
+	public String getPrcode() {
+		return prcode;
+	}
+	public void setPrcode(String prcode) {
+		this.prcode = prcode;
+	}
+	public String getPrnameCas() {
+		return prnameCas;
+	}
+	public void setPrnameCas(String prnameCas) {
+		this.prnameCas = prnameCas;
+	}
+	public String getPrnameVal() {
+		return prnameVal;
+	}
+	public void setPrnameVal(String prnameVal) {
+		this.prnameVal = prnameVal;
+	}
+	public List<String> getPrcodes() {
+		return prcodes;
+	}
+	public void setPrcodes(List<String> prcodes) {
+		this.prcodes = prcodes;
+	}
+
+}

+ 20 - 0
src/main/java/es/uv/saic/shared/domain/InstanciaRepository.java

@@ -157,5 +157,25 @@ public interface InstanciaRepository extends JpaRepository<Instancia, BigInteger
 	@Query(value="DELETE FROM tasquesi WHERE id_instancia = ?1", nativeQuery=true)
     Integer clearInstance(BigInteger idInstancia);
 	
+
+	// Usado por "SAIC_REPORTS"
+	@Query(value=("SELECT ins.* FROM instancies ins "
+		+ "LEFT JOIN processos pr ON ins.id_proces = pr.id_proces "
+		+ "WHERE ins.tlugar = 'T' AND ins.lugar IN(SELECT lugar FROM organs WHERE tlugar = 'T' AND ruct = ?1) "
+		+ "AND ins.estat = 'F' AND pr.nom_proces = ?2 "
+		+ "AND pr.id_proces IN(SELECT MAX(pr2.id_proces) FROM processos pr2 "
+		+ "				 LEFT JOIN instancies ins2 ON pr2.id_proces = ins2.id_proces "
+		+ "				 WHERE ins2.tlugar = ins.tlugar AND ins2.lugar = ins.lugar "
+		+ "				 AND pr2.nom_proces = ?2 AND ins2.estat = 'F') "
+		+ "UNION "
+		+ "SELECT ins.* FROM instancies ins "
+		+ "LEFT JOIN processos pr ON ins.id_proces = pr.id_proces "
+		+ "WHERE ins.tlugar = 'C' AND ins.lugar IN(SELECT lugar2 FROM organs WHERE tlugar = 'T' AND ruct = ?1 AND actiu) "
+		+ "AND ins.estat = 'F' AND pr.nom_proces = ?2 "
+		+ "AND pr.id_proces IN(SELECT MAX(pr2.id_proces) FROM processos pr2 "
+		+ "				 LEFT JOIN instancies ins2 ON pr2.id_proces = ins2.id_proces "
+		+ "				 WHERE ins2.tlugar = ins.tlugar AND ins2.lugar = ins.lugar "
+		+ "				 AND pr2.nom_proces = ?2 AND ins2.estat = 'F')"), nativeQuery=true)
+	Instancia findLatestByRuctPrname(Integer ruct, String prname);
 }
 

+ 23 - 0
src/main/java/es/uv/saic/shared/domain/InstanciaTasca.java

@@ -45,6 +45,12 @@ public class InstanciaTasca implements Serializable {
 	@Column(name = "pam_text")
 	private String pamText;
 
+	@Transient
+	private Long size;
+
+	@Transient
+	private String extension;
+
 	//bi-directional many-to-one association to Instancia
 	@ManyToOne
 	@JoinColumn(name="id_instancia")
@@ -151,6 +157,23 @@ public class InstanciaTasca implements Serializable {
 		this.usuari = usuari;
 	}
 
+	public Long getSize() {
+		return size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+	public String getExtension() {
+		return extension;
+	}
+
+	public void setExtension(String extension) {
+		this.extension = extension;
+	}
+
+	
 	public String getPamText() {
 		return pamText;
 	}

+ 1 - 2
src/main/java/es/uv/saic/shared/domain/InstanciaTascaRepository.java

@@ -50,7 +50,7 @@ public interface InstanciaTascaRepository extends JpaRepository<InstanciaTasca,
 	
 	@Query(nativeQuery=true, value=("""
 		SELECT DISTINCT(ins.id_instancia) FROM instancies ins, usuaris_rols usr, tasques tas, tasquesi tasi, rols rl 
-		WHERE ins.estat = 'A' AND ins.centre = usr.lugar 
+		WHERE ins.estat = 'A' AND (ins.centre = usr.lugar OR  usr.lugar = 0)
 		AND usr.vigent = TRUE AND usr.usuari = ?1 AND ins.id_instancia = tasi.id_instancia 
 		AND tas.id_proces = ins.id_proces AND tas.id_rol = usr.id_rol 
 		AND rl.id_rol = usr.id_rol AND rl.ambit = 'C' 
@@ -163,6 +163,5 @@ public interface InstanciaTascaRepository extends JpaRepository<InstanciaTasca,
     @Modifying(flushAutomatically = true, clearAutomatically = true)
 	@Query(value=("DELETE FROM tasquesi WHERE id_tascai = ?1"), nativeQuery=true)
 	public void remove(BigInteger idInstanciaTasca);
-	
 }
 

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

@@ -95,4 +95,7 @@ public interface OrganRepository extends JpaRepository<Organ, OrganPK> {
 	
 	@Query(value= "SELECT tambit FROM organs WHERE ruct = ?1 AND ruct IS NOT NULL", nativeQuery=true)
 	public String getAmbitByRuct(Integer ruct);
+
+	@Query(value=("SELECT * FROM organs WHERE tlugar = 'T' AND tambit = ?1 AND actiu AND lugar NOT IN (0, 1, 2) AND lugar2 NOT IN(99) ORDER BY nom_val"), nativeQuery=true)
+	public List<Organ> findActiveByTambit(String tambit);
 }

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

@@ -81,4 +81,4 @@ public class PamDocuments implements Serializable {
         this.usuari = usuari;
     }
 
-}
+}

+ 152 - 0
src/main/java/es/uv/saic/shared/domain/Report.java

@@ -0,0 +1,152 @@
+package es.uv.saic.shared.domain;
+
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.util.List;
+
+public class Report {
+
+	private Integer idInforme;
+	private BigInteger id;
+	private List<BigInteger> ids;
+	private Boolean isCombined;
+	private LocalDate date;
+	private String prcode;
+	private String prnameCas;
+	private String prnameVal;
+	private String filename;
+	private Long size;
+	private String sizeHuman;
+	private String extension;
+	
+	public Report(Integer idInforme, BigInteger id, LocalDate date, String prcode, String prnameCas, String prnameVal, String filename, Long size, String sizeHuman, String extension) {
+		this.idInforme = idInforme;
+		this.isCombined = false;
+		this.id = id;
+		this.date = date;
+		this.prcode = prcode;
+		this.prnameCas = prnameCas;
+		this.prnameVal = prnameVal;
+		this.filename = filename;
+		this.size = size;
+		this.sizeHuman = sizeHuman;
+		this.extension = extension;
+	}
+	
+	public Report(Integer idInforme, List<BigInteger> ids, LocalDate date, String prcode, String prnameCas, String prnameVal, String filename, Long size, String sizeHuman, String extension) {
+		this.idInforme = idInforme;
+		this.isCombined = true;
+		this.ids = ids;
+		this.date = date;
+		this.prcode = prcode;
+		this.prnameCas = prnameCas;
+		this.prnameVal = prnameVal;
+		this.filename = filename;
+		this.size = size;
+		this.sizeHuman = sizeHuman;
+		this.extension = extension;
+	}
+	
+	public Integer getIdInforme() {
+		return idInforme;
+	}
+	
+	public void setIdInforme(Integer idInforme) {
+		this.idInforme = idInforme;
+	}
+	
+	public BigInteger getId() {
+		return id;
+	}
+	
+	public void setId(BigInteger id) {
+		this.id = id;
+	}
+	
+	public List<BigInteger> getIds() {
+		return ids;
+	}
+	
+	public void setIds(List<BigInteger> ids) {
+		this.ids = ids;
+	}
+	
+	public Boolean getIsCombined() {
+		return isCombined;
+	}
+	
+	public Boolean isCombined() {
+		return isCombined;
+	}
+	
+	public void setIsCombined(Boolean isCombined) {
+		this.isCombined = isCombined;
+	}
+	
+	public LocalDate getDate() {
+		return date;
+	}
+	
+	public void setDate(LocalDate date) {
+		this.date = date;
+	}
+	
+	public String getPrcode() {
+		return prcode;
+	}
+	
+	public void setPrcode(String prcode) {
+		this.prcode = prcode;
+	}
+	
+	public String getPrnameCas() {
+		return prnameCas;
+	}
+	
+	public void setPrnameCas(String prnameCas) {
+		this.prnameCas = prnameCas;
+	}
+	
+	public String getPrnameVal() {
+		return prnameVal;
+	}
+	
+	public void setPrnameVal(String prnameVal) {
+		this.prnameVal = prnameVal;
+	}
+	
+	public String getFilename() {
+		return filename;
+	}
+	
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+	
+	public Long getSize() {
+		return size;
+	}
+	
+	public void setSize(Long size) {
+		this.size = size;
+	}
+	
+	public String getSizeHuman() {
+		return sizeHuman;
+	}
+	
+	public void setSizeHuman(String sizeHuman) {
+		this.sizeHuman = sizeHuman;
+	}
+	
+	public String getExtension() {
+		return extension;
+	}
+	
+	public void setExtension(String extension) {
+		this.extension = extension;
+	}
+	
+	
+	
+}

+ 0 - 10
src/main/java/es/uv/saic/shared/domain/UsuariRepository.java

@@ -89,14 +89,4 @@ public interface UsuariRepository extends JpaRepository<Usuari, String> {
 	@Query(value=("SELECT * FROM usuaris WHERE usuari IN(SELECT DISTINCT usuari FROM usuaris_rols WHERE id_rol = ?1 "
 			+ "AND (lugar IN(?2) OR lugar IN (SELECT lugar FROM organs WHERE tlugar = 'T' AND lugar2 IN(?2))) AND vigent)"), nativeQuery=true)
 	List<Usuari> findByRolCentre(Integer idRol, List<Integer> centres);
-
-	@Query(value = """
-    SELECT DISTINCT j.key 
-    FROM rols_permisos rp, 
-         jsonb_each_text(to_jsonb(rp)) AS j(key, value) 
-    WHERE rp.id_rol IN (?1) 
-      AND j.value = 'true' 
-      AND j.key NOT IN ('id_rol')
-    """, nativeQuery = true)
-	List<String> getPermisosRoles(List<Integer> idRoles);
 }

+ 10 - 2
src/main/java/es/uv/saic/shared/domain/UsuarisRolRepository.java

@@ -20,7 +20,7 @@ public interface UsuarisRolRepository extends JpaRepository<UsuarisRol, Long> {
 	
 	@Query("SELECT i FROM UsuarisRol i WHERE i.usuari = ?1 AND i.vigent = TRUE AND i.rol.nomRol = ?2")
 	UsuarisRol findByUsernameActiveRol(Usuari usuari, String Rol);
-	
+
 	@Query("SELECT i FROM UsuarisRol i WHERE i.usuari = ?1 AND i.vigent = TRUE AND i.rol.nomRol IN(?2)")
 	UsuarisRol findByUsernameActiveRoles(Usuari usuari, ArrayList<String> Rol);
 	
@@ -60,5 +60,13 @@ public interface UsuarisRolRepository extends JpaRepository<UsuarisRol, Long> {
 	@Query(value=("SELECT num FROM usuaris_rols WHERE id_rol = ?1 AND lugar = ?2 AND tlugar = ?3 ORDER BY num DESC LIMIT 1"), nativeQuery=true)
 	Integer findLastNum(Integer idRol, Integer lugar, String tlugar);
 	
-	
+	@Query(value = """
+		SELECT DISTINCT j.key 
+		FROM rols_permisos rp, 
+			jsonb_each_text(to_jsonb(rp)) AS j(key, value) 
+		WHERE rp.id_rol IN (?1) 
+		AND j.value = 'true' 
+		AND j.key NOT IN ('id_rol')
+		""", nativeQuery = true)
+	List<String> getPermisosRoles(List<Integer> idRoles);
 }

+ 34 - 0
src/main/java/es/uv/saic/shared/dto/CategoriaPareDTO.java

@@ -0,0 +1,34 @@
+package es.uv.saic.shared.dto;
+
+import java.util.List;
+
+public class CategoriaPareDTO {
+
+	private String text;
+	private List<CategoriaDocumentDTO> children;
+	
+	public CategoriaPareDTO() {}
+
+	public CategoriaPareDTO(String text, List<CategoriaDocumentDTO> children) {
+		this.text = text;
+		this.children = children;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public List<CategoriaDocumentDTO> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<CategoriaDocumentDTO> children) {
+		this.children = children;
+	}
+	
+	
+}

+ 10 - 4
src/main/java/es/uv/saic/shared/dto/DocumentDTO.java

@@ -6,19 +6,25 @@ public class DocumentDTO {
 	private String ruta;
 	
 	public DocumentDTO() {}
+
+	public DocumentDTO(String text, String ruta) {
+		this.text = text;
+		this.ruta = ruta;
+	}
 	
-	public DocumentDTO(String text, String ruta, String data) {
+	public DocumentDTO(String text, String ruta, String data, String size) {
 		String template = """
-			<a style="width:100;display:flex;" target="_blank" href="/download/document/[ruta]">
+			<a style="width:100;display:flex;" target="_blank" href="[ruta]">
 				<span style="width:100%;display:flex;">
 					<span style="width:80%;text-align:left;">[text]</span>
 					<span>[data]</span>
 					&nbsp;&nbsp;&nbsp;
+					<span> ([size])</span>
 				</span>
 			</a>
 		""";
-		this.text = template.replace("[ruta]", ruta).replace("[text]", text)
-					.replace("[data]", (data == null) ? "" : data);
+		this.text = template.replace("[ruta]", ruta != null ? ruta : "").replace("[text]", text != null ? text : "")
+						    .replace("[data]", data != null ? data : "").replace("[size]", size != null ? size : "0KB");
 		this.ruta = ruta;
 	}
 	

+ 10 - 0
src/main/java/es/uv/saic/shared/dto/InstanciaDTO.java

@@ -15,6 +15,7 @@ public class InstanciaDTO implements Serializable {
 	private Integer centre;
 	private String estat;
 	private Integer titulacio;
+	private Integer ruct;
 	private String tlugar;
 	private Integer lugar;
 	private String nomProces;
@@ -36,6 +37,7 @@ public class InstanciaDTO implements Serializable {
 		this.centre = i.getCentre();
 		this.estat = i.getEstat();
 		this.titulacio = i.getTitulacio();
+		this.ruct = i.getOrgan().getRuct();
 		this.lugar = i.getOrgan().getId().getLugar();
 		this.tlugar = i.getOrgan().getId().getTlugar();
 		this.nomProces = i.getProces().getNomProces();
@@ -194,4 +196,12 @@ public class InstanciaDTO implements Serializable {
 	public void setNomValTitulacio(String nomValTitulacio) {
 		this.nomValTitulacio = nomValTitulacio;
 	}
+
+	public Integer getRuct() {
+		return ruct;
+	}
+
+	public void setRuct(Integer ruct) {
+		this.ruct = ruct;
+	}
 }

+ 46 - 2
src/main/java/es/uv/saic/shared/dto/InstanciaTascaDTO.java

@@ -1,6 +1,8 @@
 package es.uv.saic.shared.dto;
 
 import java.math.BigInteger;
+import java.time.LocalDate;
+import java.util.Date;
 
 import es.uv.saic.shared.domain.InstanciaTasca;
 
@@ -10,22 +12,31 @@ public class InstanciaTascaDTO {
 	private String text;
     private InstanciaDTO instancia;
     private TascaDTO tasca;
+	private Long size;
+	private String extension;
+    private LocalDate dataFet;
 
     public InstanciaTascaDTO(){}
     
     public InstanciaTascaDTO(BigInteger idInstanciaTasca, String evidencia, String text, InstanciaDTO instancia,
-            TascaDTO tasca) {
+            TascaDTO tasca, Long size, String extension, LocalDate dataFet) {
         this.idInstanciaTasca = idInstanciaTasca;
         this.evidencia = evidencia;
         this.text = text;
         this.instancia = instancia;
         this.tasca = tasca;
+        this.size = size;
+        this.extension = extension;
+        this.dataFet = dataFet;
     }
 
     public InstanciaTascaDTO(InstanciaTasca its){
         this.idInstanciaTasca = its.getIdInstanciaTasca();
         this.evidencia = its.getEvidencia();
         this.text = its.getText();
+        this.size = its.getSize();
+        this.extension = its.getExtension();
+        this.dataFet = its.getDataFet();
         instancia = new InstanciaDTO(its.getInstancia());
         tasca = new TascaDTO(its.getTasca());
     }
@@ -33,32 +44,65 @@ public class InstanciaTascaDTO {
     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;
     }
-    
+
+    public Long getSize() {
+        return size;
+    }
+
+    public void setSize(Long size) {
+        this.size = size;
+    }
+
+    public String getExtension() {
+        return extension;
+    }
+
+    public void setExtension(String extension) {
+        this.extension = extension;
+    }
+
+    public LocalDate getDataFet() {
+        return dataFet;
+    }
+
+    public void setDataFet(LocalDate dataFet) {
+        this.dataFet = dataFet;
+    }
+
 }

+ 0 - 12
src/main/java/es/uv/saic/shared/feign/DashboardClient.java

@@ -74,16 +74,4 @@ public interface DashboardClient {
     @GetMapping("/dashboard/graphs/inds/{ruct}")
 	@ResponseBody
 	public List<Indicador> getGraphDataByRuct(@PathVariable Integer ruct);
-
-    @GetMapping("/dashboard/links/{ruct}")
-	@ResponseBody
-	public List<Link> getLinks(@PathVariable Integer ruct);
-
-    @PostMapping("/dashboard/links/{ruct}")
-	@ResponseBody
-	public Link createLink(@PathVariable Integer ruct, @RequestParam String dataExp);
-
-    @DeleteMapping("/dashboard/links/{id}")
-	@ResponseBody
-	public Integer deleteLink(@PathVariable Integer id);
 }

+ 21 - 0
src/main/java/es/uv/saic/shared/feign/DocumentClient.java

@@ -2,6 +2,7 @@ package es.uv.saic.shared.feign;
 
 import java.io.IOException;
 import java.math.BigInteger;
+import java.util.List;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.core.io.FileSystemResource;
@@ -11,14 +12,17 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import es.uv.saic.shared.domain.Document;
 import es.uv.saic.shared.dto.ArchiveOrganDTO;
 import es.uv.saic.shared.dto.CategoriaDTO;
+import es.uv.saic.shared.dto.CategoriaDocumentDTO;
 import es.uv.saic.shared.dto.DocumentTmpDTO;
 import es.uv.saic.shared.dto.PdfDTO;
 import fr.opensagres.xdocreport.core.XDocReportException;
+import jakarta.servlet.http.HttpServletResponse;
 
 @FeignClient(name = "saic-docs-service")
 public interface DocumentClient {
@@ -80,4 +84,21 @@ public interface DocumentClient {
     @GetMapping("/download/{idInstancia}/{idTascap}")
     @ResponseBody 
     public ResponseEntity<byte[]> downloadEvidenceByTascaP(@PathVariable("idInstancia") BigInteger idInstancia, @PathVariable("idTascap") Integer idTascap);
+
+    // Metodos para el SAIC_REPORTS
+    @GetMapping("/document/token/{token}")
+    public List<CategoriaDocumentDTO> getDocumentsFor(@PathVariable String token);
+
+    // Descargas del SAIC_REPORTS
+    @GetMapping(value="/public/reports/download/{id}/{idInforme}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
+	@ResponseBody
+	public ResponseEntity<byte[]> downloadPublicReport(@PathVariable("id") BigInteger id, @PathVariable("idInforme") Integer idInforme);
+
+    @PostMapping(value="/public/reports/download", produces = MediaType.APPLICATION_PDF_VALUE)
+	@ResponseBody
+	public ResponseEntity<byte[]> downloadPublicReport(@RequestParam("ids") List<BigInteger> ids, @RequestParam("idInforme") Integer idInforme);
+
+    @GetMapping("/public/shared/documents/download/{idDocument}/{token}")
+	@ResponseBody
+	public ResponseEntity<byte[]> downloadDocuments(@PathVariable Integer idDocument, @PathVariable String token);
 }

+ 19 - 0
src/main/java/es/uv/saic/shared/feign/InformeClient.java

@@ -0,0 +1,19 @@
+package es.uv.saic.shared.feign;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import es.uv.saic.shared.domain.Informe;
+
+@FeignClient(name = "saic-core-service", contextId = "informe-controller")
+public interface InformeClient {
+
+    @GetMapping("/informe/grupWeb/{grupWeb}")
+    public List<Informe> findByGrupWeb(@PathVariable String grupWeb);
+
+    @GetMapping("/informe/{id}")
+    public Informe findById(@PathVariable String id);
+}

+ 15 - 0
src/main/java/es/uv/saic/shared/feign/InstanciaClient.java

@@ -0,0 +1,15 @@
+package es.uv.saic.shared.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import es.uv.saic.shared.domain.Instancia;
+
+@FeignClient(name = "saic-core-service", contextId = "instancia-controller")
+public interface InstanciaClient {
+
+    @GetMapping("/instancia/latest/{ruct}/{prname}")
+    public Instancia findLatestByRuctPrname(@PathVariable Integer ruct, @PathVariable String prname);
+    
+}

+ 35 - 0
src/main/java/es/uv/saic/shared/feign/LinksClient.java

@@ -0,0 +1,35 @@
+package es.uv.saic.shared.feign;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import es.uv.saic.shared.domain.Link;
+
+@FeignClient(name = "saic-core-service", contextId = "links-controller")
+public interface LinksClient {
+    @GetMapping("/links/{ruct}")
+	@ResponseBody
+	public List<Link> getLinks(@PathVariable Integer ruct);
+
+    @PostMapping("/links/{ruct}")
+	@ResponseBody
+	public Link createLink(@PathVariable Integer ruct, @RequestParam String dataExp);
+
+    @DeleteMapping("/links/{id}")
+	@ResponseBody
+	public Integer deleteLink(@PathVariable Integer id);
+
+	@GetMapping("/links/increase")
+    public void increase(@RequestBody Link link);
+
+    @GetMapping("/links/token/{token}")
+    public Link findByToken(@PathVariable String token);
+}

+ 3 - 0
src/main/java/es/uv/saic/shared/feign/OrganClient.java

@@ -111,5 +111,8 @@ public interface OrganClient {
 
     @GetMapping("/organ/ambit/{ruct}")
     public String getAmbitByRuct(@PathVariable Integer ruct);
+
+    @GetMapping("/organ/active/tambit/{tambit}")
+	public List<OrganDTO> findActiveByTambit(@PathVariable String tambit);
 }
 

+ 8 - 0
src/main/java/es/uv/saic/shared/feign/TascaClient.java

@@ -11,7 +11,9 @@ 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.shared.domain.Instancia;
 import es.uv.saic.shared.dto.EvidenciaBuscadorDTO;
+import es.uv.saic.shared.dto.InstanciaDTO;
 import es.uv.saic.shared.dto.InstanciaTascaDTO;
 import es.uv.saic.shared.dto.NomProcesOrganDTO;
 import es.uv.saic.shared.dto.ProcesDTO;
@@ -38,6 +40,12 @@ public interface TascaClient {
     @GetMapping("/instanciaTasca/{idInstancia}/{idTascap}")
     public InstanciaTascaDTO findInstanciaTascaByInstanciaAndTascaP(@PathVariable("idInstancia") BigInteger idInstancia, @PathVariable("idTascap") Integer idTascap);
 
+    @GetMapping("/instancia/latest/{ruct}/{prname}")
+    public InstanciaDTO findLatestByRuctPrname(@PathVariable Integer ruct, @PathVariable String prname);
+    
+    @GetMapping("/instanciaTasca/report/{idInstancia}")
+    public InstanciaTascaDTO getReportFromInstancia(@PathVariable BigInteger idInstancia);
+
     @PostMapping("/tasca/informe")
     TascaInformeTransferDTO getLastByProcName(@RequestBody ProcesDTO tascaDTO);