AdminController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. package es.uv.saic.web;
  2. import java.io.IOException;
  3. import java.math.BigInteger;
  4. import java.text.ParseException;
  5. import java.time.LocalDate;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. import jakarta.servlet.http.HttpServletResponse;
  11. import jakarta.servlet.http.HttpSession;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.security.access.annotation.Secured;
  14. import org.springframework.security.core.Authentication;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.ui.Model;
  17. import org.springframework.web.bind.annotation.GetMapping;
  18. import org.springframework.web.bind.annotation.PathVariable;
  19. import org.springframework.web.bind.annotation.PostMapping;
  20. import org.springframework.web.bind.annotation.RequestParam;
  21. import org.springframework.web.bind.annotation.ResponseBody;
  22. import es.uv.saic.domain.Acreditacio;
  23. import es.uv.saic.domain.AcreditacioTransfer;
  24. import es.uv.saic.domain.DummyDataTransfer;
  25. import es.uv.saic.domain.Plantilla;
  26. import es.uv.saic.domain.Usuari;
  27. import es.uv.saic.dto.OrganDTO;
  28. import es.uv.saic.dto.ProcesDTO;
  29. import es.uv.saic.dto.RolDTO;
  30. import es.uv.saic.dto.TemplateDataDTO;
  31. import es.uv.saic.feign.AdminClient;
  32. import es.uv.saic.feign.IndicadorClient;
  33. import es.uv.saic.feign.OrganClient;
  34. import es.uv.saic.feign.PlantillaClient;
  35. import es.uv.saic.feign.ProceduresClient;
  36. import es.uv.saic.feign.UsuariClient;
  37. @Controller
  38. public class AdminController {
  39. @Autowired
  40. private OrganClient oc;
  41. @Autowired
  42. private ProceduresClient pc;
  43. @Autowired
  44. private AdminClient ac;
  45. @Autowired
  46. private UsuariClient uc;
  47. @Autowired
  48. private IndicadorClient ic;
  49. @Autowired
  50. private PlantillaClient plc;
  51. public static final String DDMMYYYY = "dd/MM/yyyy";
  52. // GET para conseguir todas las instancias del sistema en ese momento.
  53. @GetMapping("/admin/instances")
  54. @Secured({"ROLE_ADMIN"})
  55. public String getInstances(Model model, Authentication auth) {
  56. this.loadInstanceData(model);
  57. return "adminInstances";
  58. }
  59. public void loadInstanceData(Model model) {
  60. List<DummyDataTransfer> centres = new ArrayList<DummyDataTransfer>();
  61. List<DummyDataTransfer> titulacions = new ArrayList<DummyDataTransfer>();
  62. List<DummyDataTransfer> procediments = new ArrayList<DummyDataTransfer>();
  63. for(OrganDTO o : oc.getCentres()) {
  64. DummyDataTransfer a = new DummyDataTransfer();
  65. a.setText(o.getNomCas());
  66. a.setText2(o.getNomVal());
  67. a.setValue(o.getLugar());
  68. centres.add(a);
  69. }
  70. for(ProcesDTO p : pc.getAll()) {
  71. DummyDataTransfer a = new DummyDataTransfer();
  72. a.setText(p.getNomProces());
  73. a.setText2("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolCas());
  74. a.setText3("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolVal());
  75. a.setValue(p.getIdProces());
  76. procediments.add(a);
  77. }
  78. model.addAttribute("centers", centres);
  79. model.addAttribute("titulations", titulacions);
  80. model.addAttribute("procedures", procediments);
  81. }
  82. // POST que recoge los campos introducidos en los inputs (Proceso, centro y titulación) y busca las instancias relacionadas
  83. @PostMapping("/admin/instances")
  84. @Secured({"ROLE_ADMIN"})
  85. public String instantiate(Model model, Authentication auth,
  86. @RequestParam("procedure") Integer idProces,
  87. @RequestParam("center") Integer idCentre,
  88. @RequestParam("titulation") Integer idTitulacio,
  89. HttpSession session) {
  90. HashMap<String, Object> map = ac.instantiate(idProces, idCentre, idTitulacio);
  91. model.addAllAttributes(map);
  92. this.loadInstanceData(model);
  93. return "adminInstances";
  94. }
  95. // GET que recoge todos los procedimientos del sistema
  96. @GetMapping("/admin/procedures")
  97. @Secured({"ROLE_ADMIN"})
  98. public String getProcedures(Model model, Authentication auth) {
  99. this.loadProceduresData(model);
  100. return "adminProcedures";
  101. }
  102. // Función utilizada en el GET que recoge todos los procedimientos
  103. public void loadProceduresData(Model model) {
  104. List<DummyDataTransfer> procediments = new ArrayList<DummyDataTransfer>();
  105. for(ProcesDTO p : pc.getAll()) {
  106. DummyDataTransfer a = new DummyDataTransfer();
  107. a.setText(p.getNomProces());
  108. a.setText2("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolCas());
  109. a.setText3("(" + p.getIdProces() + " - Ver. "+ p.getVersio() +") " + p.getNomProces() + " " + p.getTitolVal());
  110. a.setValue(p.getIdProces());
  111. procediments.add(a);
  112. }
  113. model.addAttribute("procedures", procediments);
  114. }
  115. // POST que elimina una instancia concreta
  116. @PostMapping("/admin/instance/delete")
  117. @Secured({"ROLE_ADMIN"})
  118. public void deleteInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
  119. ac.deleteInstance(idInstancia);
  120. response.sendRedirect("/supervision");
  121. }
  122. // POST que reinicia una instancia por completo
  123. @PostMapping("/admin/instance/clear")
  124. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  125. public void clearInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
  126. String instanciaid = ac.clearInstance(idInstancia);
  127. response.sendRedirect("/procedure/"+instanciaid);
  128. }
  129. // POST que establece que una instancia ha sido cerrada, cambiandole su estado
  130. @PostMapping("/admin/instance/close")
  131. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  132. public void closeInstance(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstancia) throws IOException {
  133. String instanciaid = ac.closeInstance(idInstancia);
  134. response.sendRedirect("/procedure/"+instanciaid);
  135. }
  136. // POST que se encarga de eliminar una tarea concreta de una instancia
  137. @PostMapping("/admin/instance/task/remove")
  138. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  139. public void removeTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
  140. String instanciaid = ac.removeTask(idInstanciaTasca);
  141. response.sendRedirect("/procedure/"+instanciaid);
  142. }
  143. // POST que se encarga de reiniciar por completo una tarea de una instancia
  144. @PostMapping("/admin/instance/task/clear")
  145. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  146. public void clearTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
  147. String instanciaid = ac.clearTask(idInstanciaTasca);
  148. response.sendRedirect("/procedure/"+instanciaid);
  149. }
  150. // POST que reinicia una tarea del procedimiento, eliminando datos anteriores y creando una nueva vesión de esta
  151. @PostMapping("/admin/instance/task/reload")
  152. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  153. public void reloadTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
  154. String instanciaid = ac.reloadTask(idInstanciaTasca);
  155. response.sendRedirect("/procedure/"+instanciaid);
  156. }
  157. // POST que tiene como objetivo reactivar una tarea
  158. @PostMapping("/admin/instance/task/reactivate")
  159. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  160. public void activateTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
  161. String instanciaid = ac.activateTask(idInstanciaTasca);
  162. response.sendRedirect("/procedure/"+instanciaid);
  163. }
  164. // POST que edita la información de una tarea ya existente
  165. @PostMapping("/admin/instance/task/edit")
  166. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  167. public void editTask(Model model, Authentication auth, HttpServletResponse response, @RequestParam BigInteger idInstanciaTasca) throws IOException {
  168. String instanciaid = ac.editTask(idInstanciaTasca);
  169. response.sendRedirect("/procedure/"+instanciaid);
  170. }
  171. @GetMapping("/admin/mailing")
  172. @Secured({"ROLE_ADMIN"})
  173. public String getMailing(Model model, Authentication auth, HttpServletResponse response) {
  174. List<RolDTO> rols = uc.findAllRols();
  175. List<OrganDTO> centres = oc.getActiveCentres();
  176. model.addAttribute("centres", centres);
  177. model.addAttribute("rols", rols);
  178. return "mailing";
  179. }
  180. @PostMapping("/admin/mailing")
  181. @Secured({"ROLE_ADMIN"})
  182. public String sendMails(Model model, Authentication auth, HttpServletResponse response,
  183. @RequestParam Integer idRol, @RequestParam("centres[]") List<Integer> centres,
  184. @RequestParam String subject, @RequestParam String body) {
  185. ac.sendMails(idRol, centres, subject, body);
  186. List<RolDTO> rols = uc.findAllRols();
  187. List<OrganDTO> centresa = oc.getActiveCentres();
  188. model.addAttribute("centres", centresa);
  189. model.addAttribute("rols", rols);
  190. model.addAttribute("sent", true);
  191. return "mailing";
  192. }
  193. // POST para la creación de un procedimiento nuevo
  194. @PostMapping("/admin/procedures/new")
  195. @Secured({"ROLE_ADMIN"})
  196. public String newProcedure(Model model, Authentication auth, HttpServletResponse response, @RequestParam Map<String,String> params,
  197. @RequestParam(name="idTascap[]", required=false) List<String> idTascap,
  198. @RequestParam(name="dataLimit[]", required=false) List<String> dataLimit,
  199. @RequestParam(name="tipus[]", required=false) List<String> tipus,
  200. @RequestParam(name="codiEvidencia[]", required=false) List<String> codiEvidencia,
  201. @RequestParam(name="idTascaSeg[]", required=false) List<String> idTascaSeg,
  202. @RequestParam(name="idTascaSeg2[]", required=false) List<String> idTascaSeg2,
  203. @RequestParam(name="opcions[]", required=false) List<String> opcions,
  204. @RequestParam(name="idRol[]", required=false) List<String> idRol,
  205. @RequestParam(name="titolCas[]", required=false) List<String> titolCas,
  206. @RequestParam(name="titolVal[]", required=false) List<String> titolVal,
  207. @RequestParam(name="descripcioCas[]", required=false) List<String> descripcioCas,
  208. @RequestParam(name="descripcioVal[]", required=false) List<String> descripcioVal,
  209. @RequestParam(name="nomEvidenciaCas[]", required=false) List<String> nomEvidenciaCas,
  210. @RequestParam(name="nomEvidenciaVal[]", required=false) List<String> nomEvidenciaVal,
  211. @RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
  212. @RequestParam(name="informe[]", required=false) List<Boolean> informe) throws NumberFormatException, ParseException {
  213. ac.newProcedure(params, idTascap, dataLimit, tipus, codiEvidencia, idTascaSeg, idTascaSeg2, opcions, idRol, titolCas, titolVal, descripcioCas, descripcioVal, nomEvidenciaCas, nomEvidenciaVal, idPlantilla, informe);
  214. this.loadProceduresData(model);
  215. return "adminProcedures";
  216. }
  217. // POST para editar un procedimiento ya existente
  218. @PostMapping("/admin/procedures/edit")
  219. @Secured({"ROLE_ADMIN"})
  220. public String editProcedure(Model model, Authentication auth, HttpServletResponse response, @RequestParam Map<String,String> params,
  221. @RequestParam(name="idTascap[]", required=false) List<String> idTascap,
  222. @RequestParam(name="dataLimit[]", required=false) List<String> dataLimit,
  223. @RequestParam(name="tipus[]", required=false) List<String> tipus,
  224. @RequestParam(name="codiEvidencia[]", required=false) List<String> codiEvidencia,
  225. @RequestParam(name="idTascaSeg[]", required=false) List<String> idTascaSeg,
  226. @RequestParam(name="idTascaSeg2[]", required=false) List<String> idTascaSeg2,
  227. @RequestParam(name="opcions[]", required=false) List<String> opcions,
  228. @RequestParam(name="idRol[]", required=false) List<String> idRol,
  229. @RequestParam(name="titolCas[]", required=false) List<String> titolCas,
  230. @RequestParam(name="titolVal[]", required=false) List<String> titolVal,
  231. @RequestParam(name="descripcioCas[]", required=false) List<String> descripcioCas,
  232. @RequestParam(name="descripcioVal[]", required=false) List<String> descripcioVal,
  233. @RequestParam(name="nomEvidenciaCas[]", required=false) List<String> nomEvidenciaCas,
  234. @RequestParam(name="nomEvidenciaVal[]", required=false) List<String> nomEvidenciaVal,
  235. @RequestParam(name="idPlantilla[]", required=false) List<String> idPlantilla,
  236. @RequestParam(name="informe[]", required=false) List<Boolean> informe)
  237. throws NumberFormatException, ParseException {
  238. ac.editProcedure(params, idTascap, dataLimit, tipus, codiEvidencia, idTascaSeg, idTascaSeg2, opcions, idRol, titolCas, titolVal, descripcioCas, descripcioVal, nomEvidenciaCas, nomEvidenciaVal, idPlantilla, informe);
  239. this.loadProceduresData(model);
  240. return "adminProcedures";
  241. }
  242. // POST que elimina un procedimiento
  243. @PostMapping("/admin/procedures/remove")
  244. @Secured({"ROLE_ADMIN"})
  245. public String removeProcedure(Model model, Authentication auth, HttpServletResponse response, @RequestParam("idProces") Integer idProces){
  246. ac.removeProcedure(idProces);
  247. this.loadProceduresData(model);
  248. return "adminProcedures";
  249. }
  250. // POST que le eliminar un usuario concreto del sitema
  251. @PostMapping("/admin/userrole/remove")
  252. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  253. public void removeUserrole(Model model, Authentication auth, HttpServletResponse response, HttpSession session, @RequestParam("idRol") Integer idRol,
  254. @RequestParam("usuari") String usuari, @RequestParam("lugar") Integer lugar, @RequestParam("tlugar") String tlugar) throws IOException{
  255. HashMap<String, Object> map = ac.removeUserrole(idRol, usuari, lugar, tlugar);
  256. response.sendRedirect("/dashboard");
  257. }
  258. // POST para añadir un nuevo usuario al sistema
  259. @PostMapping("/admin/userrole/new")
  260. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  261. public void newUserrole(Model model, Authentication auth, HttpServletResponse response, HttpSession session, @RequestParam("idRol") Integer idRol,
  262. @RequestParam(name="usuari", required=false) String usuari, @RequestParam("centre") Integer idCentre,
  263. @RequestParam(name="titulacio", required=false) Integer idTitulacio, @RequestParam Map<String,String> params) throws IOException{
  264. HashMap<String, Object> map = ac.newUserrole(idRol, usuari, idCentre, idTitulacio, params);
  265. session.setAttribute("respCentres", (List<Integer>) map.get("respCentres"));
  266. session.setAttribute("respTitulacions", (List<Integer>) map.get("respTitulacions"));
  267. session.setAttribute("roleExists", map.get("roleExists"));
  268. response.sendRedirect("/dashboard");
  269. }
  270. //¿POSIBLE ELIMINACIÓN?
  271. @GetMapping("/admin/templates2")
  272. @Secured({"ROLE_ADMIN", "ROLE_TESTER"})
  273. public String getTemplates(Model model, Authentication auth, HttpServletResponse response) {
  274. this.loadInstanceData(model);
  275. return "adminTemplates";
  276. }
  277. // GET que recoge todas las plantillas actuales del sistema
  278. @GetMapping("/admin/templates")
  279. @Secured({"ROLE_ADMIN", "ROLE_TESTER"})
  280. public String getTemplates2(Model model, Authentication auth, HttpServletResponse response) {
  281. List<String> evs = ac.getTemplates2();
  282. this.loadInstanceData(model);
  283. model.addAttribute("currentYear", LocalDate.now().getYear());
  284. model.addAttribute("evs", evs);
  285. return "adminTemplates2";
  286. }
  287. // POST que redefine que indicadores están asociados a una evidencia dentro de un proceso
  288. @PostMapping("/admin/templates/inds/update")
  289. @Secured({"ROLE_ADMIN"})
  290. public String updateTemplateInds(Model model, Authentication auth, HttpServletResponse response,
  291. @RequestParam(name="indicador[]", required=true) List<String> indicador,
  292. @RequestParam(name="enquesta[]", required=true) List<String> enquesta,
  293. @RequestParam(name="media[]", required=true) List<String> media,
  294. @RequestParam(name="evidencia", required=true) String evidencia,
  295. @RequestParam(name="proces", required=true) String proces
  296. ) {
  297. ac.updateTemplateInds(indicador, enquesta, media, evidencia, proces);
  298. return "blank";
  299. }
  300. // GET para abrir el editor de plantillas
  301. @GetMapping("/admin/editor")
  302. @Secured({"ROLE_ADMIN", "ROLE_TESTER"})
  303. public String getTemplateEditor(Model model, Authentication auth, HttpServletResponse response) {
  304. List<String> inds = this.ic.findTypes();
  305. List<Plantilla> templates = this.plc.findAll();
  306. model.addAttribute("templates", templates);
  307. model.addAttribute("inds", inds);
  308. this.loadInstanceData(model);
  309. if(((Usuari)auth.getPrincipal()).isDataTest()) {
  310. return "testerTemplateEditor";
  311. }
  312. return "adminTemplateEditor";
  313. }
  314. @GetMapping("/admin/editor/test")
  315. @Secured({"ROLE_ADMIN", "ROLE_TESTER"})
  316. public String testTemplateEditor(Model model, Authentication auth, HttpServletResponse response,
  317. @RequestParam Integer idPlantilla, @RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs) {
  318. Plantilla p = plc.findByID(idPlantilla);
  319. TemplateDataDTO td = new TemplateDataDTO(idTitulacio, idCentre, curs, p.getText());
  320. String text = plc.addTemplateData2(td);
  321. model.addAttribute("text", text);
  322. return "adminTemplateTest";
  323. }
  324. // GET para la carga del calendario
  325. @GetMapping("/admin/calendar")
  326. @Secured({"ROLE_ADMIN"})
  327. public String calendar(Model model, Authentication auth, HttpServletResponse response) {
  328. this.loadInstanceData(model);
  329. return "adminCalendar";
  330. }
  331. @GetMapping("/admin/acredita/{curs}/{grup}/{tambit}")
  332. @ResponseBody
  333. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  334. public List<AcreditacioTransfer> acreditacionsByCurs(Model model, Authentication auth, HttpServletResponse response,
  335. @PathVariable Integer curs, @PathVariable Integer grup, @PathVariable String tambit) {
  336. return ac.acreditacionsByCurs(curs, grup, tambit);
  337. }
  338. @PostMapping("/admin/acredita")
  339. @ResponseBody
  340. @Secured({"ROLE_ADMIN", "ROLE_MANAGER"})
  341. public Acreditacio UpdateAcreditacio(Model model, Authentication auth, HttpServletResponse response,
  342. @RequestParam String tlugar, @RequestParam Integer lugar,
  343. @RequestParam Integer grupCurs, @RequestParam Integer grupNum, @RequestParam Integer cursImpla,
  344. @RequestParam String dataAcred, @RequestParam String dataRenov, @RequestParam String dataSegui,
  345. @RequestParam String dataVerif, @RequestParam Boolean recom, @RequestParam Boolean segui) throws ParseException {
  346. return ac.UpdateAcreditacio(tlugar, lugar, grupCurs, grupNum, cursImpla, dataAcred, dataRenov, dataSegui, dataVerif, recom, segui);
  347. }
  348. }