ソースを参照

Fixed procedures

Drowsito 1 ヶ月 前
コミット
f3e6fa52bd
1 ファイル変更111 行追加99 行削除
  1. 111 99
      src/main/java/es/uv/saic/web/AdminController.java

+ 111 - 99
src/main/java/es/uv/saic/web/AdminController.java

@@ -59,6 +59,7 @@ 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 tools.jackson.databind.ObjectMapper;
 
 @RestController
 @RequestMapping("/admin")
@@ -477,136 +478,147 @@ public class AdminController {
 
 	// PUT para la creación de un procedimiento nuevo
 	@PutMapping("/procedure")
-	public 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) {
-
+	public void newProcedure(@RequestBody ProcedureRequestDTO request) {
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DDMMYYYY);
+		ProcesDTO procesDTO = request.getProces();
+		List<TascaDTO> tasquesDTO = request.getTasques();
+
 		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")));
+		p.setIdProces(procesDTO.getIdProces());
+		p.setNomProces(procesDTO.getNomProces());
+		p.setVersio(procesDTO.getVersio());
+		p.setComentaris(procesDTO.getComentaris());
+		p.setSubTitol(procesDTO.getSubTitol());
+		p.setAmbit(procesDTO.getAmbit());
+		p.setTitolCas(procesDTO.getTitolCas());
+		p.setTitolVal(procesDTO.getTitolVal());
+		p.setDescripcioCas(procesDTO.getDescripcioCas());
+		p.setDescripcioVal(procesDTO.getDescripcioVal());
+		p.setCursActivacio(procesDTO.getCursActivacio());
+		p.setCursAvaluat(procesDTO.getCursAvaluat());
 
 		ps.save(p);
 
-		if (idTascaSeg != null) {
-			for (Integer i = 0; i < idTascap.size(); i++) {
+		if (tasquesDTO != null && !tasquesDTO.isEmpty()) {
+			for (TascaDTO tDto : tasquesDTO) {
 				Tasca t = new Tasca();
-				t.setIdTasca((p.getIdProces() * 10000) + t.getIdTascap());
+				t.setIdTasca((p.getIdProces() * 10000) + tDto.getIdTascap());
 				t.setProces(p);
-				t.setIdTascap(t.getIdTascap());
-				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(LocalDate.parse(dataLimit.get(i), formatter));
-				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.setIdTascap(tDto.getIdTascap());
+				t.setIdTascaSeg(tDto.getIdTascaSeg());
+				t.setIdTascaSeg2(tDto.getIdTascaSeg2());
+				t.setOpcions(tDto.getOpcions());
+				t.setTitolCas(limpiarTexto(tDto.getTitolCas()));
+				t.setDescripcioCas(limpiarTexto(tDto.getDescripcioCas()));
+				t.setTitolVal(limpiarTexto(tDto.getTitolVal()));
+				t.setDescripcioVal(limpiarTexto(tDto.getDescripcioVal()));
+				t.setNomEvidenciaCas(limpiarTexto(tDto.getNomEvidenciaCas()));
+				t.setNomEvidenciaVal(limpiarTexto(tDto.getNomEvidenciaVal()));
+				if (tDto.getDataLim() != null && !tDto.getDataLim().isEmpty()) {
+					t.setDataLim(LocalDate.parse(tDto.getDataLim(), formatter));
+				}
+				if (tDto.getIdTipus() != null) {
+					t.setTipus(tps.findOne(tDto.getIdTipus()));
+					
+					if (t.getTipus().getTipus() == 11 || t.getTipus().getTipus() == 15) {
+						// Si es plantilla, usamos el idPlantilla del DTO
+						t.setCodiEvidencia(tDto.getIdPlantilla() != null ? tDto.getIdPlantilla().toString() : "");
+					} else {
+						t.setCodiEvidencia(limpiarTexto(tDto.getCodiEvidencia()));
+					}
 				}
 
-				t.setRol(rs.findOne(Integer.parseInt(idRol.get(i))));
-				t.setInforme(informe.get(i));
+				if (tDto.getIdRol() != null) {
+					t.setRol(rs.findOne(tDto.getIdRol()));
+				}
+            	t.setInforme(tDto.getInforme() != null ? tDto.getInforme() : false);
 
 				ts.save(t);
 			}
 		}
 	}
 
-	// POST para editar un procedimiento ya existente
 	@PostMapping("/procedure")
-	public void editProcedure(@RequestBody ProcedureRequestDTO resquest) {
-		ProcesDTO proces = resquest.getProces();
-		List<TascaDTO> tasques = resquest.getTasques();
-		Proces p = ps.findByID(proces.getIdProces());
-		p.setNomProces(proces.getNomProces());
-		p.setVersio(proces.getVersio());
-		p.setComentaris(proces.getComentaris());
-		p.setSubTitol(proces.getSubTitol());
-		p.setAmbit(proces.getAmbit());
-		p.setTitolCas(proces.getTitolCas());
-		p.setTitolVal(proces.getTitolVal());
-		p.setDescripcioCas(proces.getDescripcioCas());
-		p.setDescripcioVal(proces.getDescripcioVal());
-		p.setCursActivacio(proces.getCursActivacio());
-		p.setCursAvaluat(proces.getCursAvaluat());
-
+	public void editProcedure(@RequestBody ProcedureRequestDTO request) {
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DDMMYYYY);
+		ProcesDTO procesDTO = request.getProces();
+		List<TascaDTO> tasquesDTO = request.getTasques();
+
+		Proces p = ps.findByID(procesDTO.getIdProces());
+		p.setNomProces(procesDTO.getNomProces());
+		p.setVersio(procesDTO.getVersio());
+		p.setComentaris(procesDTO.getComentaris());
+		p.setSubTitol(procesDTO.getSubTitol());
+		p.setAmbit(procesDTO.getAmbit());
+		p.setTitolCas(procesDTO.getTitolCas());
+		p.setTitolVal(procesDTO.getTitolVal());
+		p.setDescripcioCas(procesDTO.getDescripcioCas());
+		p.setDescripcioVal(procesDTO.getDescripcioVal());
+		p.setCursActivacio(procesDTO.getCursActivacio());
+		p.setCursAvaluat(procesDTO.getCursAvaluat());
 		ps.save(p);
 
-		for (TascaDTO t : tasques) {
-			if (t.getIdTascaSeg() != null) {
-				for (Tasca t2 : ts.findByProces(p.getIdProces())) {
-					if (!t.getIdTascap().toString().contains(Integer.toString(t2.getIdTascap()))) {
-						ts.delete(t2);
-					}
-				}
+		List<Tasca> tasquesActuals = ts.findByProces(p.getIdProces());
+		List<Integer> idsTasquesNoves = tasquesDTO.stream()
+				.map(TascaDTO::getIdTascap)
+				.toList();
 
-				Tasca tasca;
-				try {
-					tasca = ts.getByID((p.getIdProces() * 10000) + t.getIdTascap());
-					if (tasca == null) {
-						tasca = new Tasca();
-						tasca.setIdTasca((p.getIdProces() * 10000) + t.getIdTascap());
-						tasca.setProces(p);
-						tasca.setIdTascap(t.getIdTascap());
-					}
-				} catch (Exception e) {
+		for (Tasca t2 : tasquesActuals) {
+			if (!idsTasquesNoves.contains(t2.getIdTascap())) {
+				ts.delete(t2);
+			}
+		}
+
+		for (TascaDTO tDto : tasquesDTO) {
+			if (tDto.getIdTascaSeg() != null) {
+				int idCalculat = (int) (p.getIdProces() * 10000) + tDto.getIdTascap();
+				
+				Tasca tasca = ts.getByID(idCalculat);
+				if (tasca == null) {
 					tasca = new Tasca();
-					tasca.setIdTasca((p.getIdProces() * 10000) + t.getIdTascap());
+					tasca.setIdTasca(idCalculat);
 					tasca.setProces(p);
-					tasca.setIdTascap(t.getIdTascap());
+					tasca.setIdTascap(tDto.getIdTascap());
+				}
+				tasca.setIdTascaSeg(tDto.getIdTascaSeg());
+				tasca.setIdTascaSeg2(tDto.getIdTascaSeg2());
+				tasca.setOpcions(tDto.getOpcions());
+				tasca.setTitolCas(limpiarTexto(tDto.getTitolCas()));
+				tasca.setTitolVal(limpiarTexto(tDto.getTitolVal()));
+				tasca.setDescripcioCas(limpiarTexto(tDto.getDescripcioCas()));
+				tasca.setDescripcioVal(limpiarTexto(tDto.getDescripcioVal()));
+				tasca.setNomEvidenciaCas(limpiarTexto(tDto.getNomEvidenciaCas()));
+				tasca.setNomEvidenciaVal(limpiarTexto(tDto.getNomEvidenciaVal()));
+
+				if (tDto.getDataLim() != null && !tDto.getDataLim().isEmpty()) {
+					tasca.setDataLim(LocalDate.parse(tDto.getDataLim(), formatter));
+				}
+
+				if (tDto.getIdTipus() != null) {
+					tasca.setTipus(tps.findOne(tDto.getIdTipus()));
 				}
 
-				if (tasca.getTipus().getTipus() == 11 || tasca.getTipus().getTipus() == 15) {
-					tasca.setCodiEvidencia(t.getIdPlantilla().toString());
+				if (tasca.getTipus() != null && (tasca.getTipus().getTipus() == 11 || tasca.getTipus().getTipus() == 15)) {
+					tasca.setCodiEvidencia(tDto.getIdPlantilla() != null ? tDto.getIdPlantilla().toString() : "");
 				} else {
-					tasca.setCodiEvidencia(
-							t.getCodiEvidencia().equals(".") ? "" : t.getCodiEvidencia().replace("[comma]", ","));
+					tasca.setCodiEvidencia(limpiarTexto(tDto.getCodiEvidencia()));
 				}
 
-				tasca.setRol(rs.findOne(t.getIdRol()));
-				tasca.setInforme(t.getInforme());
-				ts.save(tasca);
+				tasca.setRol(rs.findOne(tDto.getIdRol()));
+				tasca.setInforme(tDto.getInforme() != null ? tDto.getInforme() : false);
 				
+				ts.save(tasca);
 			}
 		}
 	}
 
+	private String limpiarTexto(String texto) {
+		if (texto == null || texto.equals(".")) {
+			return "";
+		}
+		return texto.replace("[comma]", ",");
+	}
+
 	// DELETE que elimina un procedimiento
 	@DeleteMapping("/procedure")
 	public void removeProcedure(@RequestParam("idProces") Integer idProces) {