Browse Source

AdminController done

Drowsito 2 weeks ago
parent
commit
4225e96d03

+ 59 - 2
src/main/java/es/uv/saic/dto/ProcesDTO.java

@@ -3,25 +3,51 @@ package es.uv.saic.dto;
 import es.uv.saic.domain.Proces;
 
 public class ProcesDTO {
+    private Integer idProces;
     private String nomProces;
     private Integer lugar;
     private Integer lugar2;
     private String tambit;
     private Integer cursAvaluat;
+    private String versio;
+    private String titolCas;
+    private String titolVal;
+    private String ambit;
 
     public ProcesDTO() {
     }
-
-    public ProcesDTO(String nomProces, Integer lugar, Integer lugar2, String tambit) {
+    
+    public ProcesDTO(Integer idProces, String nomProces, Integer lugar, Integer lugar2, String tambit,
+            Integer cursAvaluat, String versio, String titolCas, String titolVal, String ambit) {
+        this.idProces = idProces;
         this.nomProces = nomProces;
         this.lugar = lugar;
         this.lugar2 = lugar2;
         this.tambit = tambit;
+        this.cursAvaluat = cursAvaluat;
+        this.versio = versio;
+        this.titolCas = titolCas;
+        this.titolVal = titolVal;
+        this.ambit = ambit;
     }
 
     public ProcesDTO(Proces proces) {
+        this.idProces = proces.getIdProces();
         this.nomProces = proces.getNomProces();
+        this.tambit = proces.getAmbit();
         this.cursAvaluat = proces.getCursAvaluat();
+        this.versio = proces.getVersio();
+        this.titolCas = proces.getTitolCas();
+        this.titolVal = proces.getTitolVal();
+        this.ambit = proces.getAmbit();
+    }
+    
+    public Integer getIdProces() {
+        return idProces;
+    }
+
+    public void setIdProces(Integer idProces) {
+        this.idProces = idProces;
     }
 
     public String getNomProces() {
@@ -64,4 +90,35 @@ public class ProcesDTO {
         this.cursAvaluat = cursAvaluat;
     }
 
+    public String getVersio() {
+        return versio;
+    }
+
+    public void setVersio(String versio) {
+        this.versio = versio;
+    }
+
+    public String getTitolVal() {
+        return titolVal;
+    }
+
+    public void setTitolVal(String titolVal) {
+        this.titolVal = titolVal;
+    }
+
+    public String getTitolCas() {
+        return titolCas;
+    }
+
+    public void setTitolCas(String titolCas) {
+        this.titolCas = titolCas;
+    }
+
+    public String getAmbit() {
+        return ambit;
+    }
+
+    public void setAmbit(String ambit) {
+        this.ambit = ambit;
+    }
 }

+ 49 - 0
src/main/java/es/uv/saic/dto/RolDTO.java

@@ -0,0 +1,49 @@
+package es.uv.saic.dto;
+
+import es.uv.saic.domain.Rol;
+
+public class RolDTO {
+    private Integer idRol;
+    private String descripcioCas;
+    private String descripcioVal;
+
+    public RolDTO() {
+    }
+
+    public RolDTO(Integer idRol, String descripcioCas, String descripcioVal) {
+        this.idRol = idRol;
+        this.descripcioCas = descripcioCas;
+        this.descripcioVal = descripcioVal;
+    }
+
+    public RolDTO(Rol rol) {
+        this.idRol = rol.getIdRol();
+        this.descripcioCas = rol.getDescripcioCas();
+        this.descripcioVal = rol.getDescripcioVal();
+    }
+
+    public Integer getIdRol() {
+        return idRol;
+    }
+
+    public void setIdRol(Integer idRol) {
+        this.idRol = idRol;
+    }
+
+    public String getDescripcioCas() {
+        return descripcioCas;
+    }
+
+    public void setDescripcioCas(String descripcioCas) {
+        this.descripcioCas = descripcioCas;
+    }
+
+    public String getDescripcioVal() {
+        return descripcioVal;
+    }
+
+    public void setDescripcioVal(String descripcioVal) {
+        this.descripcioVal = descripcioVal;
+    }
+
+}

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

@@ -0,0 +1,120 @@
+package es.uv.saic.feign;
+
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.cloud.openfeign.FeignClient;
+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.RequestParam;
+
+import es.uv.saic.domain.Acreditacio;
+import es.uv.saic.domain.AcreditacioTransfer;
+
+@FeignClient(value = "admin-controller", url = "${saic.url.domain}/admin")
+public interface AdminClient {
+    @PostMapping("/instances")
+    HashMap<String, Object> instantiate(@RequestParam("procedure") Integer idProces,
+			@RequestParam("center") Integer idCentre,
+			@RequestParam("titulation") Integer idTitulacio);
+     
+    @PostMapping("/instance/delete")
+    void deleteInstance(@RequestParam BigInteger idInstancia);
+    
+    @PostMapping("/instance/clear")
+    String clearInstance(@RequestParam BigInteger idInstancia);
+
+    @PostMapping("/instance/close")
+    String closeInstance(@RequestParam BigInteger idInstancia);
+
+    @PostMapping("/instance/task/remove")
+    String removeTask(@RequestParam BigInteger idInstanciaTasca);
+
+    @PostMapping("/instance/task/clear")
+    String clearTask(@RequestParam BigInteger idInstanciaTasca);
+
+    @PostMapping("/instance/task/reload")
+    String reloadTask(@RequestParam BigInteger idInstanciaTasca);
+
+    @PostMapping("/instance/task/reactivate")
+    String activateTask(@RequestParam BigInteger idInstanciaTasca);
+
+    @PostMapping("/instance/task/edit")
+    String editTask(@RequestParam BigInteger idInstanciaTasca);
+
+    @PostMapping("/mailing")
+    void sendMails( @RequestParam Integer idRol, @RequestParam("centres[]") List<Integer> centres,
+			@RequestParam String subject, @RequestParam String body);
+
+    @PostMapping("/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, 
+			@RequestParam(name="tipus[]", required=false) List<String> tipus,
+			@RequestParam(name="codiEvidencia[]", required=false) List<String> codiEvidencia, 
+			@RequestParam(name="idTascaSeg[]", required=false) List<String> idTascaSeg, 
+			@RequestParam(name="idTascaSeg2[]", required=false) List<String> idTascaSeg2,
+			@RequestParam(name="opcions[]", required=false) List<String> opcions,
+			@RequestParam(name="idRol[]", required=false) List<String> idRol, 
+			@RequestParam(name="titolCas[]", required=false) List<String> titolCas, 
+			@RequestParam(name="titolVal[]", required=false) List<String> titolVal,
+			@RequestParam(name="descripcioCas[]", required=false) List<String> descripcioCas, 
+			@RequestParam(name="descripcioVal[]", required=false) List<String> descripcioVal,
+			@RequestParam(name="nomEvidenciaCas[]", required=false) List<String> nomEvidenciaCas, 
+			@RequestParam(name="nomEvidenciaVal[]", required=false) List<String> nomEvidenciaVal,
+			@RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
+			@RequestParam(name="informe[]", required=false) List<Boolean> informe);
+    
+    @PostMapping("/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, 
+			@RequestParam(name="tipus[]", required=false) List<String> tipus,
+			@RequestParam(name="codiEvidencia[]", required=false) List<String> codiEvidencia, 
+			@RequestParam(name="idTascaSeg[]", required=false) List<String> idTascaSeg, 
+			@RequestParam(name="idTascaSeg2[]", required=false) List<String> idTascaSeg2,
+			@RequestParam(name="opcions[]", required=false) List<String> opcions,
+			@RequestParam(name="idRol[]", required=false) List<String> idRol, 
+			@RequestParam(name="titolCas[]", required=false) List<String> titolCas, 
+			@RequestParam(name="titolVal[]", required=false) List<String> titolVal,
+			@RequestParam(name="descripcioCas[]", required=false) List<String> descripcioCas, 
+			@RequestParam(name="descripcioVal[]", required=false) List<String> descripcioVal,
+			@RequestParam(name="nomEvidenciaCas[]", required=false) List<String> nomEvidenciaCas, 
+			@RequestParam(name="nomEvidenciaVal[]", required=false) List<String> nomEvidenciaVal,
+			@RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
+			@RequestParam(name="informe[]", required=false) List<Boolean> informe);
+
+    @PostMapping("/procedures/remove")
+    void removeProcedure(@RequestParam("idProces") Integer idProces);    
+    
+    @PostMapping("/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")
+	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")
+	List<String> getTemplates2();
+
+	@PostMapping("/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,
+			@RequestParam(name="evidencia", required=true) String evidencia,
+			@RequestParam(name="proces", required=true) String proces
+			);
+	
+	@GetMapping("/acredita/{curs}/{grup}/{tambit}")  
+	List<AcreditacioTransfer> acreditacionsByCurs(@PathVariable Integer curs, @PathVariable Integer grup, @PathVariable String tambit);
+
+	@PostMapping("/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,
+									@RequestParam String dataVerif, @RequestParam Boolean recom, @RequestParam Boolean segui);			
+}

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

@@ -0,0 +1,12 @@
+package es.uv.saic.feign;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(value = "indicador-controller", url = "${saic.url.domain}")
+public interface IndicadorClient {
+    @GetMapping("/indicadorEnquesta/findTypes")
+    List<String> findTypes();
+}

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

@@ -0,0 +1,17 @@
+package es.uv.saic.feign;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import es.uv.saic.dto.OrganDTO;
+
+@FeignClient(value = "organ-controller", url = "${saic.url.domain}")
+public interface OrganClient {
+    @GetMapping("/getCentres")
+    List<OrganDTO> getCentres();
+
+    @GetMapping("/getActiveCentres")
+    List<OrganDTO> getActiveCentres();
+}

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

@@ -16,9 +16,11 @@ import es.uv.saic.dto.TemplateDataDTO;
 @FeignClient(value = "plantilla-controller", url = "${saic.url.docs.domain}")
 public interface PlantillaClient {
 
+    //Se usa
     @GetMapping("/plantilla")
     List<Plantilla> findAll();
 
+    //Se usa
     @GetMapping("/plantilla/{id}")
     Plantilla findByID(@PathVariable("id") Integer id);
 
@@ -37,6 +39,7 @@ public interface PlantillaClient {
     @PostMapping("/addTemplateData")
     String addTemplateData(@RequestBody TemplateDataDTO td);
 
+    //Se usa
     @PostMapping("/addTemplateData2")
     String addTemplateData2(@RequestBody TemplateDataDTO td);
 

+ 14 - 0
src/main/java/es/uv/saic/feign/ProcesClient.java

@@ -0,0 +1,14 @@
+package es.uv.saic.feign;
+
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import es.uv.saic.dto.ProcesDTO;
+
+@FeignClient(value = "proces-controller", url = "${saic.url.domain}")
+public interface ProcesClient {
+    @GetMapping("/proces/getAll")
+    List<ProcesDTO> getAll();
+}

+ 7 - 0
src/main/java/es/uv/saic/feign/UsuariClient.java

@@ -1,10 +1,14 @@
 package es.uv.saic.feign;
 
+import java.util.List;
+
 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 es.uv.saic.domain.Usuari;
+import es.uv.saic.dto.RolDTO;
 
 @FeignClient(value = "usuari-service", url = "${saic.url.domain}")
 public interface UsuariClient {
@@ -13,4 +17,7 @@ public interface UsuariClient {
 
     @PostMapping("/grantedSupervisor")
     public boolean isGrantedSupervisor(@RequestBody Usuari usuari);
+
+    @GetMapping("/findAllRols")
+    public List<RolDTO> findAllRols();
 }

+ 64 - 697
src/main/java/es/uv/saic/web/AdminController.java

@@ -1,25 +1,17 @@
 package es.uv.saic.web;
 
-import java.io.File;
 import java.io.IOException;
 import java.math.BigInteger;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Stream;
-
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpSession;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.annotation.Secured;
 import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Controller;
@@ -33,72 +25,34 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import es.uv.saic.domain.Acreditacio;
 import es.uv.saic.domain.AcreditacioTransfer;
 import es.uv.saic.domain.DummyDataTransfer;
-import es.uv.saic.domain.Email;
-import es.uv.saic.domain.EvidenciaIndicadorEnquesta;
-import es.uv.saic.domain.EvidenciaIndicadorEnquestaPK;
-import es.uv.saic.domain.Instancia;
-import es.uv.saic.domain.InstanciaTasca;
-import es.uv.saic.domain.Organ;
 import es.uv.saic.domain.Plantilla;
-import es.uv.saic.domain.Proces;
-import es.uv.saic.domain.Rol;
-import es.uv.saic.domain.Tasca;
 import es.uv.saic.domain.Usuari;
-import es.uv.saic.domain.UsuarisRol;
+import es.uv.saic.dto.OrganDTO;
+import es.uv.saic.dto.ProcesDTO;
+import es.uv.saic.dto.RolDTO;
 import es.uv.saic.dto.TemplateDataDTO;
+import es.uv.saic.feign.AdminClient;
+import es.uv.saic.feign.IndicadorClient;
+import es.uv.saic.feign.OrganClient;
 import es.uv.saic.feign.PlantillaClient;
-import es.uv.saic.service.AcreditacioService;
-import es.uv.saic.service.EmailService;
-import es.uv.saic.service.EvidenciaIndicadorEnquestaService;
-import es.uv.saic.service.IndicadorEnquestaService;
-import es.uv.saic.service.InstanciaService;
-import es.uv.saic.service.InstanciaTascaService;
-import es.uv.saic.service.InstanciaTascaVerService;
-import es.uv.saic.service.OrganService;
-import es.uv.saic.service.ProcesService;
-import es.uv.saic.service.RolService;
-import es.uv.saic.service.TascaService;
-import es.uv.saic.service.TipusService;
-import es.uv.saic.service.UsuariService;
-import es.uv.saic.service.UsuarisRolService;
+import es.uv.saic.feign.ProcesClient;
+import es.uv.saic.feign.UsuariClient;
 
 @Controller
 public class AdminController {
 
 	@Autowired
-	private OrganService os;
-	@Autowired
-	private ProcesService ps;
-	@Autowired
-	private InstanciaService is;
-	@Autowired
-	private InstanciaTascaService its;
-	@Autowired
-	private InstanciaTascaVerService itsver;
-	@Autowired
-	private UsuariService us;
-	@Autowired
-	private RolService rs;
+	private OrganClient oc;
 	@Autowired
-	private UsuarisRolService urs;
+	private ProcesClient pc;
 	@Autowired
-	private TascaService ts;
+	private AdminClient ac;
 	@Autowired
-	private TipusService tps;
+	private UsuariClient uc;
 	@Autowired
-	private EmailService es;
-	@Autowired
-	private IndicadorEnquestaService ies;
-	@Autowired
-	private EvidenciaIndicadorEnquestaService eies;
+	private IndicadorClient ic;
 	@Autowired
 	private PlantillaClient plc;
-	@Autowired
-	private AcreditacioService as;
-	@Value("${saic.data.filePath}")
-	private String filePath;
-	@Value("${saic.data.templates.filePath}")
-	private String templatePath;
 	
 	public static final String DDMMYYYY = "dd/MM/yyyy";
 	
@@ -109,21 +63,21 @@ public class AdminController {
 		this.loadInstanceData(model);
 		return "adminInstances";
 	}
-	 
-	// Función utilizada para conseguir las instancias que tiene todo el sistema
+
 	public void loadInstanceData(Model model) {
 		List<DummyDataTransfer> centres = new ArrayList<DummyDataTransfer>();
 		List<DummyDataTransfer> titulacions = new ArrayList<DummyDataTransfer>();
 		List<DummyDataTransfer> procediments = new ArrayList<DummyDataTransfer>();
 		
-		for(Organ o : os.getCentres()) {
+		for(OrganDTO o : oc.getCentres()) {
 			DummyDataTransfer a = new DummyDataTransfer();
 			a.setText(o.getNomCas());
 			a.setText2(o.getNomVal());
-			a.setValue(o.getId().getLugar());
+			a.setValue(o.getLugar());
 			centres.add(a);
 		}
-		for(Proces p : ps.getAll()) {
+
+		for(ProcesDTO p : pc.getAll()) {
 			DummyDataTransfer a = new DummyDataTransfer();
 			a.setText(p.getNomProces()); 
 			a.setText2("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolCas());
@@ -131,7 +85,6 @@ public class AdminController {
 			a.setValue(p.getIdProces());
 			procediments.add(a);
 		}
-		
 		model.addAttribute("centers", centres);
 		model.addAttribute("titulations", titulacions);
 		model.addAttribute("procedures", procediments);
@@ -146,139 +99,10 @@ public class AdminController {
 			@RequestParam("titulation") Integer idTitulacio,
 			HttpSession session) {
 		
-		Proces p = ps.findByID(idProces);
-		List<String> errorCas = new ArrayList<String>();
-		List<String> errorVal = new ArrayList<String>();
-		List<String> successCas = new ArrayList<String>();
-		List<String> successVal = new ArrayList<String>();
-		
-		if(p.getAmbit().equals("U")) { // Type U procedure
-			Organ centre = os.findByID("C", idCentre);
-			BigInteger idInstancia = is.instantiateU(idProces, idTitulacio);
-			if(!idInstancia.equals(BigInteger.valueOf(0))) {
-				InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-				for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-					Email email = new Email();
-					email.setUsusari(u);
-					email.setInstanciaTasca(activa);
-					es.addEmail(email);
-				}
-				successCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas());
-				successVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal());
-				model.addAttribute("success", true);
-			}
-			else {
-				errorCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas());
-				errorVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal());
-				model.addAttribute("error", true);
-			}
-		}
-		else if(idTitulacio > 2 && p.getAmbit().equals("T")) { // Type T procedure for one place
-			Organ o = os.findByID("T", idTitulacio);
-			BigInteger idInstancia = is.instantiateT(idProces, idTitulacio);
-			if(!idInstancia.equals(BigInteger.valueOf(0))) {
-				InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-				for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-					Email email = new Email();
-					email.setUsusari(u);
-					email.setInstanciaTasca(activa);
-					es.addEmail(email);
-				}
-				successCas.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomCas()+", Titulació: "+o.getNomCas());
-				successVal.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomVal()+", Titulació: "+o.getNomVal());
-				model.addAttribute("success", true);
-			}
-			else {
-				errorCas.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomCas()+", Titulació: "+o.getNomCas());
-				errorVal.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomVal()+", Titulació: "+o.getNomVal());
-				model.addAttribute("error", true);
-			}
-		}
-		else if(idTitulacio <= 2 && p.getAmbit().equals("T")){
-			List<Organ> titulacions;
-			if(idTitulacio == 0) {  // Type T procedure for all active places
-				titulacions = os.getTitulacionsByCentre(idCentre);
-			}
-			else {  // Type T procedure for one whole category place (masters/grados)
-				titulacions = os.getTitulacionsByTypeCentre(idCentre, idTitulacio);
-			}
-			for(Organ o : titulacions) {
-				BigInteger idInstancia = is.instantiateT(idProces, o.getId().getLugar());
-				if(!idInstancia.equals(BigInteger.valueOf(0))) {
-					InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-					for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-						Email email = new Email();
-						email.setUsusari(u);
-						email.setInstanciaTasca(activa);
-						es.addEmail(email);
-					}
-					successCas.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomCas()+", Titulació: "+o.getNomCas());
-					successVal.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomVal()+", Titulació: "+o.getNomVal());
-				}
-				else {
-					errorCas.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomCas()+", Titulació: "+o.getNomCas());
-					errorVal.add("Procediment: "+p.getNomProces()+", Centre: "+o.getOrgan().getNomVal()+", Titulació: "+o.getNomVal());
-				}
-			}
-		}
-		else if(p.getAmbit().equals("C")) {
-			if(idCentre == 0) { // Type C procedure for all active places
-				for(Organ centre : os.getActiveCentres()) {
-					Organ titulacio = os.findByID("T", idTitulacio);
-					BigInteger idInstancia = is.instantiateC(idProces, centre.getId().getLugar(), idTitulacio);
-					if(!idInstancia.equals(BigInteger.valueOf(0))) {
-						InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-						for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-							Email email = new Email();
-							email.setUsusari(u);
-							email.setInstanciaTasca(activa);
-							es.addEmail(email);
-						}
-						successCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas()+", Titulació: "+titulacio.getNomCas());
-						successVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal()+", Titulació: "+titulacio.getNomVal());
-						model.addAttribute("success", true);
-					}
-					else {
-						errorCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas()+", Titulació: "+titulacio.getNomCas());
-						errorVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal()+", Titulació: "+titulacio.getNomVal());
-						model.addAttribute("error", true);
-					}
-				}	
-			}
-			else if(idCentre > 0) { // Type C procedure for one place
-				Organ titulacio = os.findByID("T", idTitulacio);
-				Organ centre = os.findByID("C", idCentre);
-				BigInteger idInstancia = is.instantiateC(idProces, idCentre, idTitulacio);
-				if(!idInstancia.equals(BigInteger.valueOf(0))) {
-					InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-					for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-						Email email = new Email();
-						email.setUsusari(u);
-						email.setInstanciaTasca(activa);
-						es.addEmail(email);
-					}
-					successCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas()+", Titulació: "+titulacio.getNomCas());
-					successVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal()+", Titulació: "+titulacio.getNomVal());
-					model.addAttribute("success", true);
-				}
-				else {
-					errorCas.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomCas()+", Titulació: "+titulacio.getNomCas());
-					errorVal.add("Procediment: "+p.getNomProces()+", Centre: "+centre.getNomVal()+", Titulació: "+titulacio.getNomVal());
-					model.addAttribute("error", true);
-				}
-			}
-		}
-		
-		model.addAttribute("successCas", successCas);
-		model.addAttribute("successVal", successVal);
-		model.addAttribute("errorCas", errorCas);
-		model.addAttribute("errorVal", errorVal);
-		if(errorCas.isEmpty()) {
-			model.addAttribute("error", true);
-		}
-		if(successCas.isEmpty()) {
-			model.addAttribute("success", true);
-		}
+		HashMap<String, Object> map = ac.instantiate(idProces, idCentre, idTitulacio);
+
+		model.addAllAttributes(map);
+
 		this.loadInstanceData(model);
 		
 		return "adminInstances";
@@ -295,7 +119,7 @@ public class AdminController {
 	// Función utilizada en el GET que recoge todos los procedimientos
 	public void loadProceduresData(Model model) {
 		List<DummyDataTransfer> procediments = new ArrayList<DummyDataTransfer>();
-		for(Proces p : ps.getAll()) {
+		for(ProcesDTO p : pc.getAll()) {
 			DummyDataTransfer a = new DummyDataTransfer();
 			a.setText(p.getNomProces());
 			a.setText2("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolCas());
@@ -310,13 +134,7 @@ public class AdminController {
 	@PostMapping("/admin/instance/delete")
 	@Secured({"ROLE_ADMIN"})
 	public void deleteInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
-
-		Instancia instancia = is.findByID(idInstancia);
-		List<InstanciaTasca> instanciaTasques = its.findByInstancia(instancia.getIdInstancia());
-		for(InstanciaTasca instanciaTasca : instanciaTasques) {
-			Files.deleteIfExists(Paths.get(this.filePath+instanciaTasca.getEvidencia()));
-		}
-		is.deleteInstance(instancia);
+		ac.deleteInstance(idInstancia);
 		
 		response.sendRedirect("/supervision");
 	}
@@ -325,211 +143,70 @@ public class AdminController {
 	@PostMapping("/admin/instance/clear")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void clearInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
+		String instanciaid = ac.clearInstance(idInstancia);
 		
-		Instancia instancia = is.findByID(idInstancia);
-		List<InstanciaTasca> instanciaTasques = its.findByInstancia(instancia.getIdInstancia());
-		for(InstanciaTasca instanciaTasca : instanciaTasques) {
-			Files.deleteIfExists(Paths.get(this.filePath+instanciaTasca.getEvidencia()));
-		}
-		is.clearInstance(instancia);
-		instancia.setEstat("A");
-		is.save(instancia);
-
-		this.itsver.deleteByIdInstancia(idInstancia);
-		
-		InstanciaTasca activa = its.findActiveByInstancia(idInstancia);
-		if(activa.getTasca().getRol().getNomRol().equals("sys")) {
-			activa = this.its.system(activa);
-		}
-		
-		for(Usuari u : us.getInstanceAsignedUsers(idInstancia)) {
-			Email email = new Email();
-			email.setUsusari(u);
-			email.setInstanciaTasca(activa);
-			es.addEmail(email);
-		}
-		
-		response.sendRedirect("/procedure/"+instancia.getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que establece que una instancia ha sido cerrada, cambiandole su estado
 	@PostMapping("/admin/instance/close")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void closeInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
+		String instanciaid = ac.closeInstance(idInstancia);
 		
-		Instancia instancia = is.findByID(idInstancia);
-		instancia.setEstat("C");
-		InstanciaTasca instanciaTasca = its.findActiveByInstancia(instancia.getIdInstancia());
-		instanciaTasca.setEstat(null);
-		its.save(instanciaTasca);
-		is.save(instancia);
-		
-		response.sendRedirect("/procedure/"+instancia.getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que se encarga de eliminar una tarea concreta de una instancia
 	@PostMapping("/admin/instance/task/remove")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void removeTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
-		
-		InstanciaTasca instanciaTasca = its.findById(idInstanciaTasca);
-		Files.deleteIfExists(Paths.get(this.filePath+instanciaTasca.getEvidencia()));
-		its.remove(instanciaTasca.getIdInstanciaTasca());
-		response.sendRedirect("/procedure/"+instanciaTasca.getInstancia().getIdInstancia().toString());
+		String instanciaid = ac.removeTask(idInstanciaTasca);
+
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que se encarga de reiniciar por completo una tarea de una instancia
 	@PostMapping("/admin/instance/task/clear")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void clearTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
+		String instanciaid = ac.clearTask(idInstanciaTasca);
 		
-		InstanciaTasca instanciaTasca = its.findById(idInstanciaTasca);
-		Files.deleteIfExists(Paths.get(this.filePath+instanciaTasca.getEvidencia()));
-		instanciaTasca.setDataFet(null);
-		instanciaTasca.setEvidencia(null);
-		instanciaTasca.setUsuari(null);
-		instanciaTasca.setEstat(null);
-		instanciaTasca.setText(null);
-		if(instanciaTasca.getTasca().getRol().getNomRol().equals("sys")) {
-			instanciaTasca = this.its.system(instanciaTasca);
-		}
-		its.save(instanciaTasca);
-		
-		response.sendRedirect("/procedure/"+instanciaTasca.getInstancia().getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que reinicia una tarea del procedimiento, eliminando datos anteriores y creando una nueva vesión de esta
 	@PostMapping("/admin/instance/task/reload")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void reloadTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
+		String instanciaid = ac.reloadTask(idInstanciaTasca);
 		
-		InstanciaTasca instanciaTasca = its.findById(idInstanciaTasca);
-		Files.deleteIfExists(Paths.get(this.filePath+instanciaTasca.getEvidencia()));
-		InstanciaTasca instanciaTascaNew = new InstanciaTasca();
-		instanciaTascaNew.setDataFet(null);
-		instanciaTascaNew.setEstat("A");
-		instanciaTascaNew.setEvidencia(null);
-		instanciaTascaNew.setInstancia(instanciaTasca.getInstancia());
-		instanciaTascaNew.setTasca(instanciaTasca.getTasca());
-		instanciaTascaNew.setUsuari(null);
-		instanciaTascaNew.setText(null);
-		instanciaTascaNew.setVersion(0);
-		instanciaTascaNew.setIdInstanciaTasca(instanciaTasca.getInstancia().getIdInstancia()
-				.multiply(BigInteger.valueOf(10000))
-				.add(BigInteger.valueOf(instanciaTasca.getTasca().getIdTascap()))
-				.multiply(BigInteger.valueOf(100)));
-		
-		/* Editable online revisión - inyectar de quien corresponda */
-		if(instanciaTasca.getTasca().getTipus().getTipus() == 15) {
-			InstanciaTasca itdone = its.findByInstanciaTascap(instanciaTasca.getInstancia().getIdInstancia(), Integer.parseInt(instanciaTasca.getTasca().getOpcions()));
-			instanciaTascaNew.setText(itdone.getText());
-		}
-		
-		its.deactivateAll(instanciaTasca.getInstancia().getIdInstancia());
-		its.removeAllVersions(instanciaTasca.getInstancia().getIdInstancia(), instanciaTasca.getTasca().getIdTasca());
-		
-		if(instanciaTascaNew.getTasca().getRol().getNomRol().equals("sys")) {
-			instanciaTascaNew = this.its.system(instanciaTascaNew);
-		}
-		its.save(instanciaTascaNew);
-		
-		if(!instanciaTasca.getInstancia().getEstat().equals("A")) {
-			instanciaTasca.getInstancia().setEstat("A");
-			is.save(instanciaTasca.getInstancia());
-		}
-		
-		
-		for(Usuari u : us.getInstanceAsignedUsers(instanciaTascaNew.getInstancia().getIdInstancia())) {
-			Email email = new Email();
-			email.setUsusari(u);
-			email.setInstanciaTasca(instanciaTascaNew);
-			es.addEmail(email);
-		}
-		
-		response.sendRedirect("/procedure/"+instanciaTasca.getInstancia().getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que tiene como objetivo reactivar una tarea
 	@PostMapping("/admin/instance/task/reactivate")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void activateTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
+		String instanciaid = ac.activateTask(idInstanciaTasca);
 		
-		InstanciaTasca instanciaTasca = its.findById(idInstanciaTasca);
-		InstanciaTasca instanciaTascaNew = new InstanciaTasca();
-		instanciaTascaNew.setDataFet(null);
-		instanciaTascaNew.setEstat("A");
-		instanciaTascaNew.setEvidencia(null);
-		instanciaTascaNew.setInstancia(instanciaTasca.getInstancia());
-		instanciaTascaNew.setTasca(instanciaTasca.getTasca());
-		instanciaTascaNew.setUsuari(null);
-		instanciaTascaNew.setVersion(instanciaTasca.getVersion()+1);
-		instanciaTascaNew.setIdInstanciaTasca(instanciaTasca.getIdInstanciaTasca().add(BigInteger.valueOf(1)));
-		
-		its.deactivateAll(instanciaTasca.getInstancia().getIdInstancia());
-
-		/* Editable online revisión - inyectar de quien corresponda */
-		if(instanciaTasca.getTasca().getTipus().getTipus() == 15) {
-			instanciaTascaNew.setText(instanciaTasca.getText());
-		}
-		
-		its.save(instanciaTascaNew);
-		
-		if(!instanciaTasca.getInstancia().getEstat().equals("A")) {
-			instanciaTasca.getInstancia().setEstat("A");
-			is.save(instanciaTasca.getInstancia());
-		}
-		
-		for(Usuari u : us.getInstanceAsignedUsers(instanciaTascaNew.getInstancia().getIdInstancia())) {
-			Email email = new Email();
-			email.setUsusari(u);
-			email.setInstanciaTasca(instanciaTascaNew);
-			es.addEmail(email);
-		}
-		
-		response.sendRedirect("/procedure/"+instanciaTasca.getInstancia().getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	// POST que edita la información de una tarea ya existente
 	@PostMapping("/admin/instance/task/edit")
 	@Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
 	public void editTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
+		String instanciaid = ac.editTask(idInstanciaTasca);
 		
-		InstanciaTasca instanciaTasca = its.findById(idInstanciaTasca);
-		InstanciaTasca instanciaTascaNew = new InstanciaTasca();
-		instanciaTascaNew.setDataFet(null);
-		instanciaTascaNew.setEstat("A");
-		instanciaTascaNew.setEvidencia(null);
-		instanciaTascaNew.setInstancia(instanciaTasca.getInstancia());
-		instanciaTascaNew.setTasca(instanciaTasca.getTasca());
-		instanciaTascaNew.setUsuari(null);
-		instanciaTascaNew.setVersion(instanciaTasca.getVersion()+1);
-		instanciaTascaNew.setIdInstanciaTasca(instanciaTasca.getIdInstanciaTasca().add(BigInteger.valueOf(1)));
-		instanciaTascaNew.setText(instanciaTasca.getText());
-		
-		its.deactivateAll(instanciaTasca.getInstancia().getIdInstancia());			
-		its.save(instanciaTascaNew);
-		
-		if(!instanciaTasca.getInstancia().getEstat().equals("A")) {
-			instanciaTasca.getInstancia().setEstat("A");
-			is.save(instanciaTasca.getInstancia());
-		}
-		
-		for(Usuari u : us.getInstanceAsignedUsers(instanciaTascaNew.getInstancia().getIdInstancia())) {
-			Email email = new Email();
-			email.setUsusari(u);
-			email.setInstanciaTasca(instanciaTascaNew);
-			es.addEmail(email);
-		}
-		
-		response.sendRedirect("/procedure/"+instanciaTasca.getInstancia().getIdInstancia().toString());
+		response.sendRedirect("/procedure/"+instanciaid);
 	}
 	
 	@GetMapping("/admin/mailing")
 	@Secured({"ROLE_ADMIN"})
 	public String getMailing(Model model, Authentication auth, HttpServletResponse response) {
-
-		List<Rol> rols = rs.findAll();
-		List<Organ> centres = os.getActiveCentres();
+		List<RolDTO> rols = uc.findAllRols();
+		List<OrganDTO> centres = oc.getActiveCentres();
 		model.addAttribute("centres", centres);
 		model.addAttribute("rols", rols);
 		
@@ -541,18 +218,10 @@ public class AdminController {
 	public String sendMails(Model model, Authentication auth, HttpServletResponse response, 
 			@RequestParam Integer idRol, @RequestParam("centres[]") List<Integer> centres,
 			@RequestParam String subject, @RequestParam String body) {
+		ac.sendMails(idRol, centres, subject, body);
 
-		List<Usuari> usuaris = us.findByRolCentre(idRol, centres);
-		for(Usuari usuari : usuaris) {
-			Email email = new Email();
-			email.setUsusari(usuari);
-			email.setBody(body);
-			email.setSubject(subject);
-			es.addEmail(email);
-		}
-		
-		List<Rol> rols = rs.findAll();
-		List<Organ> centresa = os.getActiveCentres();
+		List<RolDTO> rols = uc.findAllRols();
+		List<OrganDTO> centresa = oc.getActiveCentres();
 		model.addAttribute("centres", centresa);
 		model.addAttribute("rols", rols);
 		model.addAttribute("sent", true);
@@ -581,52 +250,7 @@ public class AdminController {
 			@RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
 			@RequestParam(name="informe[]", required=false) List<Boolean> informe) throws NumberFormatException, ParseException {
 	
-		Proces p = new Proces();
-		p.setIdProces(Integer.parseInt(params.get("idProces")));
-		p.setNomProces(params.get("nomProces"));
-		p.setVersio(params.get("versio"));
-		p.setComentaris(params.get("comentaris"));
-		p.setSubTitol(params.get("subTitol"));
-		p.setAmbit(params.get("ambit"));
-		p.setTitolCas(params.get("titolCas").equals(".") ? "" : params.get("titolCas"));
-		p.setTitolVal(params.get("titolVal").equals(".") ? "" : params.get("titolVal"));
-		p.setDescripcioCas(params.get("descripcioCas").equals(".") ? "" : params.get("descripcioCas"));
-		p.setDescripcioVal(params.get("descripcioVal").equals(".") ? "" : params.get("descripcioVal"));
-		p.setCursActivacio(Integer.parseInt(params.get("cursActivacio")));
-		p.setCursAvaluat(Integer.parseInt(params.get("cursAvaluat")));
-		
-		ps.save(p);
-		
-		if(idTascaSeg != null) {
-			for(Integer i = 0; i < idTascap.size(); i++) {
-				Tasca t = new Tasca();
-				t.setIdTasca((p.getIdProces()*10000)+Integer.parseInt(idTascap.get(i)));
-				t.setProces(p);
-				t.setIdTascap(Integer.parseInt(idTascap.get(i)));
-				t.setIdTascaSeg(Integer.parseInt(idTascaSeg.get(i)));
-				t.setIdTascaSeg2(idTascaSeg2.get(i).equals(".") ? null : Integer.parseInt(idTascaSeg2.get(i)));
-				t.setOpcions(opcions.get(i));
-				t.setTitolCas(titolCas.get(i).equals(".") ? "" : titolCas.get(i).replace("[comma]", ","));
-				t.setDescripcioCas(descripcioCas.get(i).equals(".") ? "" : descripcioCas.get(i).replace("[comma]", ","));
-				t.setTitolVal(titolVal.get(i).equals(".") ? "" : titolVal.get(i).replace("[comma]", ","));
-				t.setDescripcioVal(descripcioVal.get(i).equals(".") ? "" : descripcioVal.get(i).replace("[comma]", ","));
-				t.setNomEvidenciaCas(nomEvidenciaCas.get(i).equals(".") ? "" : nomEvidenciaCas.get(i).replace("[comma]", ","));
-				t.setNomEvidenciaVal(nomEvidenciaVal.get(i).equals(".") ? "" : nomEvidenciaVal.get(i).replace("[comma]", ","));
-				t.setDataLim(new SimpleDateFormat(DDMMYYYY).parse(dataLimit.get(i)));
-				t.setTipus(tps.findOne(Integer.parseInt(tipus.get(i))));
-				if(t.getTipus().getTipus() == 11 || t.getTipus().getTipus() == 15) {
-					t.setCodiEvidencia(idPlantilla.get(i));
-				}
-				else {
-					t.setCodiEvidencia(codiEvidencia.get(i).equals(".") ? "" : codiEvidencia.get(i).replace("[comma]", ","));
-				}
-				
-				t.setRol(rs.findOne(Integer.parseInt(idRol.get(i))));
-				t.setInforme(informe.get(i));
-				
-				ts.save(t);
-			}
-		}
+		ac.newProcedure(params, idTascap, dataLimit, tipus, codiEvidencia, idTascaSeg, idTascaSeg2, opcions, idRol, titolCas, titolVal, descripcioCas, descripcioVal, nomEvidenciaCas, nomEvidenciaVal, idPlantilla, informe);
 		
 		this.loadProceduresData(model);
 		
@@ -655,68 +279,7 @@ public class AdminController {
 			@RequestParam(name="informe[]", required=false) List<Boolean> informe) 
 					throws NumberFormatException, ParseException {
 
-		Proces p = ps.findByID(Integer.parseInt(params.get("idProces")));
-		p.setNomProces(params.get("nomProces"));
-		p.setVersio(params.get("versio"));
-		p.setComentaris(params.get("comentaris"));
-		p.setSubTitol(params.get("subTitol"));
-		p.setAmbit(params.get("ambit"));
-		p.setTitolCas(params.get("titolCas").equals(".") ? "" : params.get("titolCas"));
-		p.setTitolVal(params.get("titolVal").equals(".") ? "" : params.get("titolVal"));
-		p.setDescripcioCas(params.get("descripcioCas").equals(".") ? "" : params.get("descripcioCas"));
-		p.setDescripcioVal(params.get("descripcioVal").equals(".") ? "" : params.get("descripcioVal"));
-		p.setCursActivacio(Integer.parseInt(params.get("cursActivacio")));
-		p.setCursAvaluat(Integer.parseInt(params.get("cursAvaluat")));
-		
-		ps.save(p);
-		
-		if(idTascaSeg != null) {
-			for(Tasca t : ts.findByProces(p.getIdProces())) {
-				if(!idTascap.contains(Integer.toString(t.getIdTascap()))) {
-					ts.delete(t);
-				}
-			}
-				
-			for(Integer i = 0; i < idTascap.size(); i++) {
-				Tasca t;
-				try {
-					t = ts.getByID((p.getIdProces()*10000)+Integer.parseInt(idTascap.get(i)));
-					if(t == null) {
-						t = new Tasca();
-						t.setIdTasca((p.getIdProces()*10000)+Integer.parseInt(idTascap.get(i)));
-						t.setProces(p);
-						t.setIdTascap(Integer.parseInt(idTascap.get(i)));
-					}
-				}
-				catch(Exception e) {
-					t = new Tasca();
-					t.setIdTasca((p.getIdProces()*10000)+Integer.parseInt(idTascap.get(i)));
-					t.setProces(p);
-					t.setIdTascap(Integer.parseInt(idTascap.get(i)));
-				}
-	
-				t.setIdTascaSeg(Integer.parseInt(idTascaSeg.get(i)));
-				t.setIdTascaSeg2(idTascaSeg2.get(i).equals(".") ? null : Integer.parseInt(idTascaSeg2.get(i)));
-				t.setOpcions(opcions.get(i));
-				t.setTitolCas(titolCas.get(i).equals(".") ? "" : titolCas.get(i).replace("[comma]", ","));
-				t.setDescripcioCas(descripcioCas.get(i).equals(".") ? "" : descripcioCas.get(i).replace("[comma]", ","));
-				t.setTitolVal(titolVal.get(i).equals(".") ? "" : titolVal.get(i).replace("[comma]", ","));
-				t.setDescripcioVal(descripcioVal.get(i).equals(".") ? "" : descripcioVal.get(i).replace("[comma]", ","));
-				t.setNomEvidenciaCas(nomEvidenciaCas.get(i).equals(".") ? "" : nomEvidenciaCas.get(i).replace("[comma]", ","));
-				t.setNomEvidenciaVal(nomEvidenciaVal.get(i).equals(".") ? "" : nomEvidenciaVal.get(i).replace("[comma]", ","));
-				t.setDataLim(new SimpleDateFormat(DDMMYYYY).parse(dataLimit.get(i)));
-				t.setTipus(tps.findOne(Integer.parseInt(tipus.get(i))));
-				if(t.getTipus().getTipus() == 11 || t.getTipus().getTipus() == 15) {
-					t.setCodiEvidencia(idPlantilla.get(i));
-				}
-				else {
-					t.setCodiEvidencia(codiEvidencia.get(i).equals(".") ? "" : codiEvidencia.get(i).replace("[comma]", ","));
-				}
-				t.setRol(rs.findOne(Integer.parseInt(idRol.get(i))));
-				t.setInforme(informe.get(i));
-				ts.save(t);
-			}
-		}
+		ac.editProcedure(params, idTascap, dataLimit, tipus, codiEvidencia, idTascaSeg, idTascaSeg2, opcions, idRol, titolCas, titolVal, descripcioCas, descripcioVal, nomEvidenciaCas, nomEvidenciaVal, idPlantilla, informe);
 
 		this.loadProceduresData(model);
 		
@@ -727,12 +290,7 @@ public class AdminController {
 	@PostMapping("/admin/procedures/remove")
 	@Secured({"ROLE_ADMIN"})
 	public String removeProcedure(Model model, Authentication auth, HttpServletResponse response, @RequestParam("idProces") Integer idProces){
-
-		Proces p = ps.findByID(idProces);
-		for(Tasca t : ts.findByProces(p.getIdProces())) {
-			ts.delete(t);
-		}
-		ps.delete(p);
+		ac.removeProcedure(idProces);
 		
 		this.loadProceduresData(model);
 		
@@ -745,28 +303,10 @@ public class AdminController {
 	public void removeUserrole(Model model, Authentication auth, HttpServletResponse response, HttpSession session, @RequestParam("idRol") Integer idRol, 
 			@RequestParam("usuari") String usuari, @RequestParam("lugar") Integer lugar, @RequestParam("tlugar") String tlugar) throws IOException{
 		
-		UsuarisRol u = urs.findActive(idRol, usuari, lugar, tlugar);
-		if(u != null) {
-			u.setVigent(false);
-			u.setFin(Calendar.getInstance().getTime());
-			urs.save(u);
-		}
-		
-		List<Integer> respCentres = new ArrayList<Integer>();
-		List<Integer> respTitulacions = new ArrayList<Integer>();
-		if(tlugar.equals("C")) {
-			respCentres.add(lugar);
-			session.setAttribute("respCentres", respCentres);
-			session.setAttribute("respTitulacions", respTitulacions);
-		}
-		else {
-			Organ titulacio = os.findByID(tlugar, lugar);
-			respCentres.add(titulacio.getOrgan().getId().getLugar());
-			respTitulacions.add(titulacio.getId().getLugar());
-			session.setAttribute("respCentres", respCentres);
-			session.setAttribute("respTitulacions", respTitulacions);
-		}
-		
+		HashMap<String, Object> map = ac.removeUserrole(idRol, usuari, lugar, tlugar);
+				
+		session.setAttribute("respCentres", (List<Integer>) map.get("respCentres"));
+		session.setAttribute("respTitulacions", (List<Integer>) map.get("respTitulacions"));
 		
 		response.sendRedirect("/managers");
 	}
@@ -777,115 +317,18 @@ public class AdminController {
 	public void newUserrole(Model model, Authentication auth, HttpServletResponse response, HttpSession session, @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) throws IOException{
-		
-		if(usuari == null && params.get("username") != null) {
-			Usuari x = new Usuari();
-			x.setCognoms(params.get("lastname"));
-			x.setNom(params.get("firstname"));
-			x.setUsuari(params.get("username"));
-			x.setEmail(params.get("email"));
-			x.setLdap(true);
-			this.us.save(x);
-			usuari = x.getUsuari();
-		}
-		
-		Rol rol = rs.findOne(idRol);
-		Integer lugar = null;
-		String tlugar = null;
-		boolean exists = false;
-		if(rol.getAmbit().equals("C")) {
-			lugar = idCentre;
-			tlugar = "C";
-			UsuarisRol u = urs.findLast(idRol, usuari, lugar, tlugar);
-			Integer num = urs.findLastNum(idRol, lugar, tlugar);
-			num = num == null ? 0 : num;
-			if(u != null) {
-				if(!u.getVigent()) {
-					UsuarisRol r = new UsuarisRol();
-					r.setFin(null);
-					r.setInici(Calendar.getInstance().getTime());
-					r.setUsuari(u.getUsuari());
-					r.setOrgan(u.getOrgan());
-					r.setRol(u.getRol());
-					r.setVigent(true);
-					r.setSupervisor(null);
-					r.setNum(num+1);
-					r.setIdUsuariRol(Integer.parseInt(Integer.toString(lugar)+(idRol < 10 ? "0" : "")+Integer.toString(idRol)+(num+1 < 10 ? "0" : "")+Integer.toString(num+1)));
-					urs.save(r);
-				}
-				else {
-					exists = true;
-				}
-			}
-			else {
-				UsuarisRol r = new UsuarisRol();
-				r.setFin(null);
-				r.setInici(Calendar.getInstance().getTime());
-				r.setUsuari(us.findByUsername(usuari));
-				r.setOrgan(os.findByID(tlugar, lugar));
-				r.setRol(rs.findOne(idRol));
-				r.setVigent(true);
-				r.setSupervisor(null);
-				r.setNum(num+1);
-				r.setIdUsuariRol(Integer.parseInt(Integer.toString(lugar)+(idRol < 10 ? "0" : "")+Integer.toString(idRol)+(num+1 < 10 ? "0" : "")+Integer.toString(num+1)));
-				urs.save(r);
-			}
-		}
-		else {
-			tlugar = "T";
-			UsuarisRol u = urs.findLast(idRol, usuari, idTitulacio, tlugar);
-			Integer num = urs.findLastNum(idRol, idTitulacio, tlugar);
-			num = num == null ? 0 : num;
-			if(u != null) {
-				if(!u.getVigent()) {
-					UsuarisRol r = new UsuarisRol();
-					r.setFin(null);
-					r.setInici(Calendar.getInstance().getTime());
-					r.setUsuari(u.getUsuari());
-					r.setOrgan(u.getOrgan());
-					r.setRol(u.getRol());
-					r.setVigent(true);
-					r.setSupervisor(null);
-					r.setNum(num+1);
-					r.setIdUsuariRol(Integer.parseInt(Integer.toString(idTitulacio)+(idRol < 10 ? "0" : "")+Integer.toString(idRol)+(num+1 < 10 ? "0" : "")+Integer.toString(num+1)));
-					urs.save(r);
-				}
-				else {
-					exists = true;
-				}
-			}
-			else {
-				UsuarisRol r = new UsuarisRol();
-				r.setFin(null);
-				r.setInici(Calendar.getInstance().getTime());
-				r.setUsuari(us.findByUsername(usuari));
-				r.setOrgan(os.findByID(tlugar, idTitulacio));
-				r.setRol(rs.findOne(idRol));
-				r.setVigent(true);
-				r.setSupervisor(null);
-				r.setNum(num+1);
-				r.setIdUsuariRol(Integer.parseInt(Integer.toString(idTitulacio)+(idRol < 10 ? "0" : "")+Integer.toString(idRol)+(num+1 < 10 ? "0" : "")+Integer.toString(num+1)));
-				urs.save(r);
-			}
-		}
-		
-		List<Integer> respCentres = new ArrayList<Integer>();
-		respCentres.add(idCentre);
-		session.setAttribute("respCentres", respCentres);
-		List<Integer> respTitulacions = new ArrayList<Integer>();
-		if(idTitulacio != null) {
-			respTitulacions.add(idTitulacio);
-		}
-		session.setAttribute("respTitulacions", respTitulacions);
 
-		if(exists) {
-			session.setAttribute("roleExists", true);
-		}
+		HashMap<String, Object> map = ac.newUserrole(idRol, usuari, idCentre, idTitulacio, params);		
+
+		session.setAttribute("respCentres", (List<Integer>) map.get("respCentres"));
+		session.setAttribute("respTitulacions", (List<Integer>) map.get("respTitulacions"));
+		session.setAttribute("roleExists", map.get("roleExists"));
 		
 		
 		response.sendRedirect("/managers");
 	}
 	
+	//¿POSIBLE ELIMINACIÓN?
 	@GetMapping("/admin/templates2")
 	@Secured({"ROLE_ADMIN", "ROLE_TESTER"})
 	public String getTemplates(Model model, Authentication auth, HttpServletResponse response) {
@@ -899,31 +342,7 @@ public class AdminController {
 	@Secured({"ROLE_ADMIN", "ROLE_TESTER"})
 	public String getTemplates2(Model model, Authentication auth, HttpServletResponse response) {
 					
-		File[] files = Stream.concat(Arrays.stream(new File(this.templatePath).listFiles()), 
-							         Arrays.stream(new File(this.templatePath+"/T1/").listFiles()))
-					         .toArray(File[]::new);
-		files = Stream.concat(Arrays.stream(files), 
-		         			  Arrays.stream(new File(this.templatePath+"/T2/").listFiles()))
-				.distinct()
-				.toArray(File[]::new);
-		
-		List<String> evs = new ArrayList<String>();
-		for(File f : files) {
-			
-			String e = f.getName().replace(".docx", "");
-			if(f.getPath().contains("/T1/")) {
-				e = e + " (G)";
-			}
-			else if(f.getPath().contains("/T2/")) {
-				e = e + " (M)";
-			}
-			
-			if(!e.endsWith("_") && !e.contains(".old")) {
-				evs.add(e.replace("_", "."));
-			}
-			
-		}
-		
+		List<String> evs = ac.getTemplates2();
 		
 		this.loadInstanceData(model);
 		model.addAttribute("currentYear", LocalDate.now().getYear());
@@ -931,10 +350,6 @@ public class AdminController {
 		return "adminTemplates2";
 	}
 	
-	public void loadTemplateData(Model model) {
-		model.addAttribute("evs", this.ts.getAllAvailableEvidences());
-	}
-	
 	// POST que redefine que indicadores están asociados a una evidencia dentro de un proceso
 	@PostMapping("/admin/templates/inds/update")
 	@Secured({"ROLE_ADMIN"})
@@ -946,20 +361,8 @@ public class AdminController {
 			@RequestParam(name="proces", required=true) String proces
 			) {
 		
-		eies.removeByProcesEvidencia(proces, evidencia);
-		
-		for(Integer i = 0; i < indicador.size(); i++) {
-			EvidenciaIndicadorEnquesta e = new EvidenciaIndicadorEnquesta();
-			EvidenciaIndicadorEnquestaPK eid = new EvidenciaIndicadorEnquestaPK();
-			eid.setEnquesta(enquesta.get(i)); 
-			eid.setEvidencia(evidencia);
-			eid.setIndicador(indicador.get(i));
-			eid.setProces(proces);
-			e.setId(eid);
-			e.setMedia(media.get(i));
-			eies.save(e);
-		}
-			
+		ac.updateTemplateInds(indicador, enquesta, media, evidencia, proces);
+
 		return "blank";
 	}
 	
@@ -968,7 +371,7 @@ public class AdminController {
 	@Secured({"ROLE_ADMIN", "ROLE_TESTER"})
 	public String getTemplateEditor(Model model, Authentication auth, HttpServletResponse response) {
 
-		List<String> inds = this.ies.findTypes();
+		List<String> inds = this.ic.findTypes();
 		List<Plantilla> templates = this.plc.findAll();
 		model.addAttribute("templates", templates);
 		model.addAttribute("inds", inds);
@@ -1007,30 +410,7 @@ public class AdminController {
 	public List<AcreditacioTransfer> acreditacionsByCurs(Model model, Authentication auth, HttpServletResponse response,
 			@PathVariable Integer curs, @PathVariable Integer grup, @PathVariable String tambit) {
 		
-		List<AcreditacioTransfer> alist = new ArrayList<AcreditacioTransfer>();
-		
-		if(grup == 0) {
-			for(Acreditacio a : this.as.getByCurs(curs)) {
-				Organ o = os.findByID(a.getTlugar(), a.getLugar());
-				alist.add(new AcreditacioTransfer(a, o));
-			}
-			return alist;
-		}
-		else {
-			if(tambit.equals("A")) {
-				for(Acreditacio a : this.as.getByCursGrup(curs, grup)) {
-					Organ o = os.findByID(a.getTlugar(), a.getLugar());
-					alist.add(new AcreditacioTransfer(a, o));
-				}
-			}
-			else {
-				for(Acreditacio a : this.as.getByCursGrupTambit(curs, grup, tambit)) {
-					Organ o = os.findByID(a.getTlugar(), a.getLugar());
-					alist.add(new AcreditacioTransfer(a, o));
-				}
-			}
-			return alist;
-		}
+		return ac.acreditacionsByCurs(curs, grup, tambit);
 	}
 	
 	@PostMapping("/admin/acredita")  
@@ -1041,20 +421,7 @@ public class AdminController {
 									@RequestParam Integer grupCurs, @RequestParam Integer grupNum, @RequestParam Integer cursImpla,
 									@RequestParam String dataAcred, @RequestParam String dataRenov, @RequestParam String dataSegui,
 									@RequestParam String dataVerif, @RequestParam Boolean recom, @RequestParam Boolean segui) throws ParseException {
-		
-		Acreditacio a = this.as.getById(tlugar, lugar);
-		a.setGrupCurs(grupCurs);
-		a.setGrupNum(grupNum);
-		a.setDataAcred(new SimpleDateFormat(DDMMYYYY).parse(dataAcred));
-		a.setDataRenov(new SimpleDateFormat(DDMMYYYY).parse(dataRenov));
-		a.setDataSegui(new SimpleDateFormat(DDMMYYYY).parse(dataSegui));
-		a.setDataVerif(new SimpleDateFormat(DDMMYYYY).parse(dataVerif));
-		a.setCursImpla(cursImpla);
-		a.setRecom(recom);
-		a.setSegui(segui);
-		a = as.save(a);
-		
-		return a;
+		return ac.UpdateAcreditacio(tlugar, lugar, grupCurs, grupNum, cursImpla, dataAcred, dataRenov, dataSegui, dataVerif, recom, segui);
 	}
 	
 }

+ 2 - 0
src/main/java/es/uv/saic/web/AjaxController.java

@@ -456,6 +456,7 @@ public class AjaxController {
 	}	
 	
 	// POST para encontar las plantillas concretas para cierta titulación, centro o procedimiento
+	//NO se usa
 	@PostMapping("/ajax/find/templates")
 	public String findTemplates(Model model, Authentication auth, @RequestParam("procedure") Integer idProces, 
 			@RequestParam("center") String idCentre, @RequestParam("titulation") String idTitulacio) throws IOException {	
@@ -466,6 +467,7 @@ public class AjaxController {
 		return "components/templates";
 	}
 	
+	//NO se usa
 	@PostMapping("/ajax/find/template/inds")
 	public String findTemplatesInds(Model model, Authentication auth, @RequestParam("procedure") Integer idProces, 
 			@RequestParam("center") String idCentre, @RequestParam("titulation") String idTitulacio,

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

@@ -1,4 +1,4 @@
-server.port = 8080
+server.port = 8083
 # Urls
 saic.url.domain = http://127.0.0.1:8080
 saic.url.data.domain = http://127.0.0.1:8081

+ 1 - 1
src/main/resources/templates/mailing.html

@@ -29,7 +29,7 @@
 					<div class="uv-table-group" th:if="${centres != null}">
 						<label th:text="#{admin.mailing.center}">Centre(s)</label>
 						<select class="selectpicker" id="centerSelector" name="centres[]" multiple data-live-search="true" data-width="100%" data-actions-box="true" th:attr="data-none-selected-text=#{global.selectors.noData}" required>
-					        <option th:each="item : ${centres}" th:text="${#locale.language} == 'es' ? ${item.nomCas}:${item.nomVal}" th:attr="value=${item.id.lugar}"></option>
+					        <option th:each="item : ${centres}" th:text="${#locale.language} == 'es' ? ${item.nomCas}:${item.nomVal}" th:attr="value=${item.lugar}"></option>
 					    </select>
 					</div>
 					<div class="uv-table-group">