PageRenderTime 68ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/fap/app/controllers/PaginaVerificacionController.java

https://github.com/FAP-Team/Fap-Module
Java | 957 lines | 750 code | 136 blank | 71 comment | 162 complexity | 42dcb7e384d938cabc272cf357b7a960 MD5 | raw file
  1. package controllers;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.util.ArrayList;
  6. import java.util.Collections;
  7. import java.util.Comparator;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. import javax.inject.Inject;
  12. import javax.persistence.EntityTransaction;
  13. import reports.Report;
  14. import services.FirmaService;
  15. import services.GestorDocumentalService;
  16. import services.GestorDocumentalServiceException;
  17. import services.NotificacionService;
  18. import services.RegistroService;
  19. import services.filesystem.TipoDocumentoEnTramite;
  20. import org.joda.time.DateTime;
  21. import platino.FirmaUtils;
  22. import play.Play;
  23. import play.db.jpa.JPA;
  24. import play.mvc.Util;
  25. import properties.FapProperties;
  26. import tags.ComboItem;
  27. import utils.CalcularFirmantes;
  28. import utils.ComboUtils;
  29. import utils.NotificacionUtils;
  30. import validation.CustomValidation;
  31. import verificacion.VerificacionUtils;
  32. import messages.Messages;
  33. import models.Agente;
  34. import models.Documento;
  35. import models.DocumentoNotificacion;
  36. import models.Firma;
  37. import models.Firmante;
  38. import models.Firmantes;
  39. import models.Notificacion;
  40. import models.Requerimiento;
  41. import models.SolicitudGenerica;
  42. import models.TableKeyValue;
  43. import models.TipoDocumento;
  44. import models.Tramite;
  45. import models.TramitesVerificables;
  46. import models.Verificacion;
  47. import models.VerificacionDocumento;
  48. import models.VerificacionTramites;
  49. import controllers.fap.AgenteController;
  50. import controllers.fap.VerificacionFapController;
  51. import controllers.gen.PaginaVerificacionControllerGen;
  52. import emails.Mails;
  53. import enumerado.fap.gen.EstadoNotificacionEnum;
  54. import enumerado.fap.gen.EstadosDocumentoVerificacionEnum;
  55. import enumerado.fap.gen.EstadosSolicitudEnum;
  56. import enumerado.fap.gen.EstadosVerificacionEnum;
  57. import es.gobcan.eadmon.verificacion.ws.dominio.DocumentoVerificacion;
  58. import es.gobcan.aciisi.servicios.enotificacion.notificacion.NotificacionException;
  59. import es.gobcan.platino.servicios.registro.Documentos;
  60. public class PaginaVerificacionController extends PaginaVerificacionControllerGen {
  61. @Inject
  62. static FirmaService firmaService;
  63. @Inject
  64. static RegistroService registroService;
  65. @Inject
  66. static NotificacionService notificacionService;
  67. @Inject
  68. static GestorDocumentalService gestorDocumentalService;
  69. public static void index(String accion, Long idSolicitud, Long idVerificacion) {
  70. if (accion == null)
  71. accion = getAccion();
  72. if (!permiso(accion)) {
  73. Messages.fatal("No tiene suficientes privilegios para acceder a esta solicitud");
  74. renderTemplate("gen/PaginaVerificacion/PaginaVerificacion.html");
  75. }
  76. SolicitudGenerica solicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  77. Verificacion verificacion = null;
  78. if ("crear".equals(accion))
  79. verificacion = PaginaVerificacionController.getVerificacion();
  80. else if (!"borrado".equals(accion))
  81. verificacion = PaginaVerificacionController.getVerificacion(idSolicitud, idVerificacion);
  82. if ((solicitud != null) && (solicitud.verificacion != null) && (solicitud.verificacion.estado != null)){
  83. log.info("Visitando página: " + "gen/PaginaVerificacion/PaginaVerificacion.html");
  84. if ((verificacion.uriTramite == null) || (verificacion.uriTramite.isEmpty())){
  85. VerificacionTramites vTramites = VerificacionTramites.get(VerificacionTramites.class);
  86. if ((vTramites.uriTramitePorDefecto != null) && (!vTramites.uriTramitePorDefecto.isEmpty()))
  87. verificacion.uriTramite=vTramites.uriTramitePorDefecto;
  88. }
  89. renderTemplate("gen/PaginaVerificacion/PaginaVerificacion.html", accion, idSolicitud, idVerificacion, solicitud, verificacion);
  90. } else
  91. redirect("AccesoVerificacionesController.index", accion, idSolicitud);
  92. }
  93. //Métodos en el controlador manual
  94. public static List<ComboItem> getTramitesCombo () {
  95. List<ComboItem> result = new ArrayList<ComboItem>();
  96. VerificacionTramites vTramites = VerificacionTramites.get(VerificacionTramites.class);
  97. for (TramitesVerificables t: vTramites.tramites) {
  98. if (t.verificable)
  99. result.add(new ComboItem(t.uriTramite, t.nombre));
  100. }
  101. return result;
  102. }
  103. public static void iniciarVerificacion(Long idSolicitud, Long idVerificacion, Verificacion verificacion, String botonIniciarVerificacion) {
  104. checkAuthenticity();
  105. if (!permisoIniciarVerificacion("editar")) {
  106. Messages.error("No tiene permisos suficientes para realizar la acción");
  107. }
  108. Verificacion dbVerificacion = PaginaVerificacionController.getVerificacion(idSolicitud, idVerificacion);
  109. PaginaVerificacionController.iniciarVerificacionBindReferences(verificacion);
  110. if (!Messages.hasErrors()) {
  111. //dbVerificacion.uriTramite = verificacion.tramiteNombre.uri;
  112. PaginaVerificacionController.iniciarVerificacionValidateCopy("editar", dbVerificacion, verificacion);
  113. }
  114. if (!Messages.hasErrors()) {
  115. PaginaVerificacionController.iniciarVerificacionValidateRules(dbVerificacion, verificacion);
  116. }
  117. if (!Messages.hasErrors()) {
  118. dbVerificacion.estado = EstadosVerificacionEnum.verificandoTipos.name();
  119. dbVerificacion.fechaUltimaActualizacion = new DateTime();
  120. dbVerificacion.verificacionTiposDocumentos = VerificacionUtils.existDocumentosNuevos(dbVerificacion, idSolicitud);
  121. //SolicitudGenerica dbSolicitud = getSolicitudGenerica(idSolicitud);
  122. //dbSolicitud.estado = EstadosSolicitudEnum.enVerificacion.name();
  123. dbVerificacion.save();
  124. //dbSolicitud.save();
  125. log.info("Acción sobre iniciar verificacion de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  126. } else
  127. log.info("Acción sobre iniciar verificacion de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  128. PaginaVerificacionController.iniciarVerificacionRender(idSolicitud, idVerificacion);
  129. }
  130. public static void tablaverificacionTipos(Long idSolicitud) {
  131. java.util.List<Documento> rows = Documento.find("select documento from SolicitudGenerica solicitud join solicitud.verificacion.verificacionTiposDocumentos documento where solicitud.id=? and (documento.verificado is null or documento.verificado = false)",idSolicitud).fetch();
  132. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  133. List<Documento> rowsFiltered = rows; //Tabla sin permisos, no filtra
  134. tables.TableRenderResponse<Documento> response = new tables.TableRenderResponse<Documento>(rowsFiltered, false, false, false, "", "", "", getAccion(), ids);
  135. renderJSON(response.toJSON("fechaSubida", "fechaRegistro", "tipo", "descripcionVisible", "verificado", "urlDescarga", "id"));
  136. }
  137. public static void verificaTipos(Long idSolicitud, Long idVerificacion, String finalizaVerificarTipos) {
  138. checkAuthenticity();
  139. if (!permisoVerificaTipos("editar")) {
  140. Messages.error("No tiene permisos suficientes para realizar la acción");
  141. }
  142. if (!Messages.hasErrors()) {
  143. PaginaVerificacionController.verificaTiposValidateRules();
  144. }
  145. if (!Messages.hasErrors()) {
  146. SolicitudGenerica dbSolicitud = getSolicitudGenerica(idSolicitud);
  147. try {
  148. dbSolicitud.verificacion.documentos = VerificacionUtils.getVerificacionDocumentosFromNewDocumentos((List<Documento>)VerificacionFapController.invoke(VerificacionFapController.class, "getNuevosDocumentosVerificar", dbSolicitud.verificacion.id, idSolicitud), dbSolicitud.verificacion.uriTramite, dbSolicitud.verificaciones, idSolicitud);
  149. } catch (Throwable e) {
  150. play.Logger.error("Error recuperando los documentos nuevos a verificar", e.getMessage());
  151. }
  152. dbSolicitud.verificacion.estado = EstadosVerificacionEnum.obtenerNoProcede.name();
  153. dbSolicitud.verificacion.nuevosDocumentos.clear();
  154. dbSolicitud.verificacion.verificacionTiposDocumentos.clear();
  155. dbSolicitud.verificacion.fechaUltimaActualizacion = new DateTime();
  156. dbSolicitud.save();
  157. Messages.ok("Finaliza la verificación de tipos");
  158. log.info("Acción verificacion de tipos de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  159. } else
  160. log.info("Acción verificacion de tipos de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  161. PaginaVerificacionController.verificaTiposRender(idSolicitud, idVerificacion);
  162. }
  163. public static void verificaTiposNuevosDoc(Long idSolicitud, Long idVerificacion, String finalizaVerificarTipos) {
  164. checkAuthenticity();
  165. if (!permisoVerificaTiposNuevosDoc("editar")) {
  166. Messages.error("No tiene permisos suficientes para realizar la acción");
  167. }
  168. if (!Messages.hasErrors()) {
  169. PaginaVerificacionController.verificaTiposNuevosDocValidateRules();
  170. }
  171. if (!Messages.hasErrors()) {
  172. SolicitudGenerica dbSolicitud = getSolicitudGenerica(idSolicitud);
  173. for (Documento doc: dbSolicitud.verificacion.nuevosDocumentos){
  174. VerificacionDocumento vDoc= new VerificacionDocumento(doc);
  175. TipoDocumento tipo = TipoDocumento.find("select tipo from TipoDocumento tipo where tipo.tramitePertenece=? and tipo.uri=?", dbSolicitud.verificacion.uriTramite, doc.tipo).first();
  176. if (tipo != null)
  177. vDoc.identificadorMultiple = tipo.cardinalidad;
  178. else
  179. log.error("Tipo no encontrado al verificar los tipos de documentos nuevos: "+doc.tipo);
  180. vDoc.existe = true;
  181. vDoc.estadoDocumentoVerificacion = EstadosDocumentoVerificacionEnum.noVerificado.name();
  182. vDoc.save();
  183. dbSolicitud.verificacion.documentos.add(vDoc);
  184. }
  185. /// Si existen verificaciones anteriores el estado al que pasa es "obtenerNoProcede",
  186. /// en caso contrario a "enVerificacion"
  187. if (dbSolicitud.verificaciones.size() > 0)
  188. dbSolicitud.verificacion.estado = EstadosVerificacionEnum.obtenerNoProcede.name();
  189. else
  190. dbSolicitud.verificacion.estado = EstadosVerificacionEnum.enVerificacion.name();
  191. dbSolicitud.verificacion.nuevosDocumentos.clear();
  192. dbSolicitud.verificacion.verificacionTiposDocumentos.clear();
  193. dbSolicitud.verificacion.fechaUltimaActualizacion = new DateTime();
  194. dbSolicitud.save();
  195. log.info("Acción sobre verificacion de tipos de nuevos documentos de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  196. } else
  197. log.info("Acción sobre verificacion de tipos de nuevos documentos de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  198. PaginaVerificacionController.verificaTiposNuevosDocRender(idSolicitud, idVerificacion);
  199. }
  200. public static void nuevosDocumentos(Long idSolicitud, Long idVerificacion, String adjuntarNuevosDocumentos) {
  201. checkAuthenticity();
  202. if (!permisoNuevosDocumentos("editar")) {
  203. Messages.error("No tiene permisos suficientes para realizar la acción");
  204. }
  205. if (!Messages.hasErrors()) {
  206. PaginaVerificacionController.nuevosDocumentosValidateRules();
  207. }
  208. if (!Messages.hasErrors()) {
  209. SolicitudGenerica dbSolicitud = getSolicitudGenerica(idSolicitud);
  210. List<Documento> documentosNuevos = VerificacionUtils.existDocumentosNuevos(dbSolicitud.verificacion, idSolicitud);
  211. // Compruebo que no existen documentos nuevos aportados por el solicitante y que no esten incluidos en la verificacion actual
  212. if (!documentosNuevos.isEmpty()){
  213. dbSolicitud.verificacion.nuevosDocumentos.addAll(documentosNuevos);
  214. dbSolicitud.verificacion.estado=EstadosVerificacionEnum.enVerificacionNuevosDoc.name();
  215. dbSolicitud.verificacion.verificacionTiposDocumentos = VerificacionUtils.existDocumentosNuevos(dbSolicitud.verificacion, idSolicitud);
  216. dbSolicitud.save();
  217. Messages.info("Nuevos documentos aportados por el solicitante añadidos a la verificación actual. Verifique los tipos de estos documentos para proseguir con la verificación en curso.");
  218. }
  219. log.info("Acción sobre adjuntar Nuevos Documentos en página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  220. } else
  221. log.info("Acción sobre adjuntar Nuevos Documentos en página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  222. PaginaVerificacionController.nuevosDocumentosRender(idSolicitud, idVerificacion);
  223. }
  224. public static void gnuevoRequerimientoBorradorPreliminar(Long idSolicitud, Long idVerificacion, String obtenerBorradorPreliminar) {
  225. checkAuthenticity();
  226. if (!permisoGnuevoRequerimientoBorradorPreliminar("editar")) {
  227. Messages.error("No tiene permisos suficientes para realizar la acción");
  228. }
  229. if (!Messages.hasErrors()) {
  230. PaginaVerificacionController.gnuevoRequerimientoBorradorPreliminarValidateRules();
  231. }
  232. if (!Messages.hasErrors()) {
  233. try {
  234. SolicitudGenerica dbSolicitud = SolicitudGenerica.findById(idSolicitud);
  235. new Report("reports/requerimiento.html").header("reports/header.html").footer("reports/footer-borrador.html").renderResponse(dbSolicitud);
  236. } catch (Exception e) {
  237. play.Logger.error("Error generando el borrador", e.getMessage());
  238. Messages.error("Error generando el borrador");
  239. } catch (Throwable e) {
  240. play.Logger.error("Error generando el borrador", e.getMessage());
  241. Messages.error("Error generando el borrador");
  242. }
  243. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  244. } else
  245. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  246. PaginaVerificacionController.gnuevoRequerimientoBorradorPreliminarRender(idSolicitud, idVerificacion);
  247. }
  248. @Util
  249. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  250. public static void gnuevoRequerimientoBorradorPreliminargR(Long idSolicitud, Long idVerificacion, String obtenerBorradorPreliminar) {
  251. checkAuthenticity();
  252. if (!permisoGnuevoRequerimientoBorradorPreliminargR("editar")) {
  253. Messages.error("No tiene permisos suficientes para realizar la acción");
  254. }
  255. if (!Messages.hasErrors()) {
  256. PaginaVerificacionController.gnuevoRequerimientoBorradorPreliminargRValidateRules();
  257. }
  258. if (!Messages.hasErrors()) {
  259. try {
  260. SolicitudGenerica dbSolicitud = SolicitudGenerica.findById(idSolicitud);
  261. new Report("reports/requerimiento.html").header("reports/header.html").footer("reports/footer-borrador.html").renderResponse(dbSolicitud);
  262. } catch (Exception e) {
  263. play.Logger.error("Error generando el borrador", e.getMessage());
  264. Messages.error("Error generando el borrador");
  265. } catch (Throwable e) {
  266. play.Logger.error("Error generando el borrador", e.getMessage());
  267. Messages.error("Error generando el borrador");
  268. }
  269. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  270. } else
  271. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  272. PaginaVerificacionController.gnuevoRequerimientoBorradorPreliminargRRender(idSolicitud, idVerificacion);
  273. }
  274. @Util
  275. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  276. public static void guardarMotivoRequerimientoGeneral(Long idSolicitud, Long idVerificacion, SolicitudGenerica solicitud, String guardarRequerimientoMotivoRequerimientoGeneralbtn, String btnFinalizarVerificacion) {
  277. checkAuthenticity();
  278. if (!permisoGuardarMotivoRequerimientoGeneral("editar")) {
  279. Messages.error("No tiene permisos suficientes para realizar la acción");
  280. }
  281. SolicitudGenerica dbSolicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  282. PaginaVerificacionController.guardarMotivoRequerimientoGeneralBindReferences(solicitud);
  283. PaginaVerificacionController.guardarRequerimientoMotivoRequerimientoGeneralbtnGuardarMotivoRequerimientoGeneral(idSolicitud, idVerificacion, solicitud);
  284. if (!Messages.hasErrors()) {
  285. PaginaVerificacionController.guardarMotivoRequerimientoGeneralValidateCopy("editar", dbSolicitud, solicitud);
  286. }
  287. if (!Messages.hasErrors()) {
  288. PaginaVerificacionController.guardarMotivoRequerimientoGeneralValidateRules(dbSolicitud, solicitud);
  289. }
  290. Agente logAgente = AgenteController.getAgente();
  291. if (!Messages.hasErrors()) {
  292. dbSolicitud.save();
  293. }
  294. if (guardarRequerimientoMotivoRequerimientoGeneralbtn != null) {
  295. PaginaVerificacionController.guardarMotivoRequerimientoGeneralRender(idSolicitud, idVerificacion);
  296. }
  297. if (btnFinalizarVerificacion != null) {
  298. PaginaVerificacionController.btnFinalizarVerificacionGuardarMotivoRequerimientoGeneral(idSolicitud, idVerificacion, solicitud);
  299. PaginaVerificacionController.guardarMotivoRequerimientoGeneralRender(idSolicitud, idVerificacion);
  300. }
  301. if (!Messages.hasErrors()) {
  302. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito " + " Agente: " + logAgente);
  303. } else
  304. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)" + " Agente: " + logAgente);
  305. PaginaVerificacionController.guardarMotivoRequerimientoGeneralRender(idSolicitud, idVerificacion);
  306. }
  307. @Util
  308. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  309. public static void btnFinalizarVerificacionGuardarMotivoRequerimientoGeneral(Long idSolicitud, Long idVerificacion, SolicitudGenerica solicitud) {
  310. //public static void finalizarVerificacion(Long idSolicitud, Long idVerificacion, String btnFinalizarVerificacion) {
  311. checkAuthenticity();
  312. if (!permisoFinalizarVerificacion("editar")) {
  313. Messages.error("No tiene permisos suficientes para realizar la acción");
  314. }
  315. if (!Messages.hasErrors()) {
  316. SolicitudGenerica dbSolicitud = getSolicitudGenerica(idSolicitud);
  317. // Comprobamos que esten todos los documentos verificados
  318. if (!VerificacionUtils.existsDocumentoNoVerificado(dbSolicitud.verificacion)){
  319. // Si hay cosas que requerir, la verificación tiene causas subsanables
  320. if (((dbSolicitud.verificacion.requerimiento.motivo != null) && (!dbSolicitud.verificacion.requerimiento.motivo.trim().isEmpty()))
  321. || (VerificacionUtils.documentosIncorrectos(dbSolicitud.verificacion))){
  322. log.info("Hay que requerir y notificar, existe un motivo general de requerimiento o documentos en estado noValidos o noPresentados (Solicitud "+dbSolicitud.id+")");
  323. CustomValidation.required("solicitud.verificacion.requerimiento.firmante", dbSolicitud.verificacion.requerimiento.firmante);
  324. Requerimiento requerimiento = dbSolicitud.verificacion.requerimiento;
  325. if(!Messages.hasErrors()){
  326. try {
  327. String tipoDocumentoRequerimiento = FapProperties.get("fap.aed.tiposdocumentos.requerimiento");
  328. if((requerimiento.oficial != null) && (requerimiento.oficial.uri != null) && (!requerimiento.oficial.uri.trim().equals(""))){
  329. Documento oficialOld = requerimiento.oficial;
  330. requerimiento.oficial = null;
  331. requerimiento.save();
  332. gestorDocumentalService.deleteDocumento(oficialOld);
  333. }
  334. //Genera el documento oficial
  335. SolicitudGenerica solicitudb = dbSolicitud;
  336. File oficial = new Report("reports/requerimiento.html").header("reports/header.html").registroSize().renderTmpFile(solicitudb);
  337. requerimiento.oficial = new Documento();
  338. requerimiento.oficial.tipo = tipoDocumentoRequerimiento;
  339. requerimiento.oficial.descripcion = "Requerimiento";
  340. requerimiento.oficial.clasificado=false;
  341. gestorDocumentalService.saveDocumentoTemporal(requerimiento.oficial, new FileInputStream(oficial), oficial.getName());
  342. requerimiento.estado = "borrador";
  343. requerimiento.save();
  344. // Actualizamos los datos de la verificacion para verificaciones posteriores, en este caso el estado.
  345. dbSolicitud.verificacion.estado = EstadosVerificacionEnum.enRequerimiento.name();
  346. Messages.ok("Se deberá realizar un Requerimiento");
  347. }catch(Exception e){
  348. Messages.error("Se produjo un error generando el documento de requerimiento.");
  349. play.Logger.error(e, "Error al generar el documento de requerimiento: " + e.getMessage());
  350. e.printStackTrace();
  351. }
  352. }
  353. } else { // Si la verificación ha ido correcta, no hay ninguna causa subsanable
  354. log.info("La verificación se ha podido finalizar con éxito, todo es correcto");
  355. Messages.ok("La verificación no tiene ningun requerimiento, finalizada correctamente y con éxito");
  356. // Ponemos todos los documentos de la verificacion como verificados, para que no se incluyan en sucesivas verificaciones
  357. VerificacionUtils.setVerificadoDocumentos(dbSolicitud.verificacion.documentos, dbSolicitud.documentacion.documentos);
  358. if (dbSolicitud.verificacion.tramiteNombre.nombre.equalsIgnoreCase("Solicitud")){
  359. if ((dbSolicitud.registro.oficial != null) && (!dbSolicitud.registro.oficial.uri.isEmpty()) && ((dbSolicitud.registro.oficial.verificado == null) || (!dbSolicitud.registro.oficial.verificado)))
  360. VerificacionUtils.setVerificadoDocumento(dbSolicitud.verificacion.documentos, dbSolicitud.registro.oficial);
  361. }
  362. // Actualizamos los datos de la verificacion para verificaciones posteriores, en este caso el estado.
  363. dbSolicitud.verificacion.estado = EstadosVerificacionEnum.verificacionPositiva.name();
  364. // Actualizamos los datos de la verificacion para verificaciones posteriores. Copiamos la verificacionActual a las verificaciones Anteriores para poder empezar una nueva verificación.
  365. dbSolicitud.verificaciones.add(dbSolicitud.verificacion);
  366. // Si el trámite es distinto de "Solicitud" se vuelve al estado anterior de la verificación
  367. if (!dbSolicitud.verificacion.tramiteNombre.nombre.equalsIgnoreCase("Solicitud")) {
  368. dbSolicitud.estado = dbSolicitud.estadoAntesVerificacion;
  369. }
  370. else {
  371. // Según el estado anterior de la Solicitud cambiamos a nuevo estado
  372. if (dbSolicitud.estado.equals(EstadosSolicitudEnum.enVerifAceptadoRSLPROV.name()))
  373. dbSolicitud.estado = EstadosSolicitudEnum.concedidoRSLPROV.name();
  374. else if (dbSolicitud.estado.equals(EstadosSolicitudEnum.enVerifAceptadoRSLDEF.name()))
  375. dbSolicitud.estado = EstadosSolicitudEnum.concedidoRSLDEF.name();
  376. else
  377. dbSolicitud.estado = EstadosSolicitudEnum.verificado.name();
  378. }
  379. }
  380. dbSolicitud.save();
  381. } else {
  382. Messages.error("Existen documentos aún por verificar, compruebe y verifiquelos para finalizar la Verificación Actual");
  383. }
  384. }
  385. if (!Messages.hasErrors()) {
  386. PaginaVerificacionController.finalizarVerificacionValidateRules();
  387. }
  388. if (!Messages.hasErrors()) {
  389. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  390. } else
  391. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  392. PaginaVerificacionController.finalizarVerificacionRender(idSolicitud, idVerificacion);
  393. }
  394. @Util
  395. public static boolean permisoFinalizarVerificacion(String accion) {
  396. //Sobreescribir para incorporar permisos a mano
  397. return true;
  398. }
  399. @Util
  400. public static void finalizarVerificacionValidateRules() {
  401. //Sobreescribir para validar las reglas de negocio
  402. }
  403. @Util
  404. public static void finalizarVerificacionRender(Long idSolicitud, Long idVerificacion) {
  405. if (!Messages.hasMessages()) {
  406. Messages.ok("Página editada correctamente");
  407. Messages.keep();
  408. redirect("PaginaVerificacionController.index", "editar", idSolicitud, idVerificacion);
  409. }
  410. Messages.keep();
  411. redirect("PaginaVerificacionController.index", "editar", idSolicitud, idVerificacion);
  412. }
  413. /**
  414. * Lista los gestores que pueden firmar el requerimiento
  415. * @return
  416. */
  417. public static List<ComboItem> gestorAFirmar() {
  418. return ComboUtils.gestorAFirmar();
  419. }
  420. @Util
  421. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  422. public static void gRequerirFirmaRequerimiento(Long idSolicitud, Long idVerificacion, SolicitudGenerica solicitud, String requerirFirma) {
  423. checkAuthenticity();
  424. if (!permisoGRequerirFirmaRequerimiento("editar")) {
  425. Messages.error("No tiene permisos suficientes para realizar la acción");
  426. }
  427. SolicitudGenerica dbSolicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  428. if (!Messages.hasErrors()) {
  429. PaginaVerificacionController.gRequerirFirmaRequerimientoValidateCopy("editar", dbSolicitud, solicitud);
  430. }
  431. if (!Messages.hasErrors()) {
  432. // Se debe enviar el mail de "solicitarFirmaRequerimiento"
  433. envioMailFirmaRequerimiento(dbSolicitud);
  434. }
  435. if (!Messages.hasErrors()) {
  436. dbSolicitud.save();
  437. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  438. } else
  439. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  440. PaginaVerificacionController.gRequerirFirmaRequerimientoRender(idSolicitud, idVerificacion);
  441. }
  442. private static void envioMailFirmaRequerimiento(SolicitudGenerica solicitud) {
  443. String mailRevisor = null;
  444. String mailGestor = null;
  445. try {
  446. Agente revisor = AgenteController.getAgente();
  447. mailRevisor = revisor.email;
  448. mailGestor = ((Agente) Agente.find("select agente from Agente agente where agente.username=?", solicitud.verificacion.requerimiento.firmante).first()).email;
  449. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("solicitud", solicitud);
  450. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("mailGestor", mailGestor);
  451. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("mailRevisor", mailRevisor);
  452. Mails.enviar("solicitarFirmaRequerimiento", solicitud, mailGestor, mailRevisor);
  453. Messages.ok("Se envió requerimiento al gestor firmante solicitado.");
  454. solicitud.verificacion.estado = EstadosVerificacionEnum.enRequerimientoFirmaSolicitada.name();
  455. solicitud.save();
  456. } catch (Exception e) {
  457. play.Logger.error("No se pudo enviar el mail solicitarFirmaRequerimiento a los mails: "+mailGestor+", "+mailRevisor+". Error: "+e.getMessage());
  458. }
  459. }
  460. @Util
  461. public static void gRequerirFirmaRequerimientoValidateCopy(String accion, SolicitudGenerica dbSolicitud, SolicitudGenerica solicitud) {
  462. CustomValidation.clearValidadas();
  463. if (secure.checkGrafico("requerimientoRequerirFirma", "editable", accion, (Map<String, Long>) tags.TagMapStack.top("idParams"), null)) {
  464. CustomValidation.valid("solicitud.verificacion.requerimiento", dbSolicitud.verificacion.requerimiento);
  465. CustomValidation.valid("solicitud.verificacion", dbSolicitud.verificacion);
  466. CustomValidation.valid("solicitud", dbSolicitud);
  467. CustomValidation.required("solicitud.verificacion.requerimiento.firmante", dbSolicitud.verificacion.requerimiento.firmante);
  468. CustomValidation.validValueFromTable("solicitud.verificacion.requerimiento.firmante", solicitud.verificacion.requerimiento.firmante);
  469. dbSolicitud.verificacion.requerimiento.registro.firmantes.todos = CalcularFirmantes.getGestorComoFirmante(solicitud.verificacion.requerimiento.firmante);
  470. dbSolicitud.verificacion.requerimiento.registro.firmantes.save();
  471. dbSolicitud.save();
  472. }
  473. }
  474. @Util
  475. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  476. public static void gFirmarRequerimiento(Long idSolicitud, Long idVerificacion, String firma, String firmaRequerimiento) {
  477. checkAuthenticity();
  478. if (!permisoGFirmarRequerimiento("editar")) {
  479. Messages.error("No tiene permisos suficientes para realizar la acción");
  480. }
  481. SolicitudGenerica dbSolicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  482. if (firmaRequerimiento != null) {
  483. // Si no ha sido firmada
  484. if (!dbSolicitud.verificacion.requerimiento.registro.fasesRegistro.firmada) {
  485. PaginaVerificacionController.firmaRequerimientoGFirmarRequerimiento(idSolicitud, idVerificacion, firma);
  486. }
  487. // Si ya fue firmada y no ha sido registrada
  488. if (dbSolicitud.verificacion.requerimiento.registro.fasesRegistro.firmada
  489. && !dbSolicitud.verificacion.requerimiento.registro.fasesRegistro.registro) {
  490. try {
  491. models.JustificanteRegistro justificanteSalida = registroService.registroDeSalida(dbSolicitud.solicitante, dbSolicitud.verificacion.requerimiento.oficial, dbSolicitud.expedientePlatino, "Requerimiento");
  492. // ----- Hecho por Paco ------------------------
  493. dbSolicitud.verificacion.requerimiento.registro.informacionRegistro.setDataFromJustificante(justificanteSalida);
  494. Documento documento = dbSolicitud.verificacion.requerimiento.justificante;
  495. documento.tipo = FapProperties.get("fap.aed.tiposdocumentos.justificanteRegistroSalida");
  496. String aplicacionJ = "la aplicación";
  497. if ((FapProperties.get("fap.app.name.requerimiento.justificante.descripcion") != null) && (!"undefined".equals(FapProperties.get("fap.app.name.requerimiento.justificante.descripcion"))))
  498. aplicacionJ = FapProperties.get("fap.app.name.requerimiento.justificante.descripcion");
  499. documento.descripcion = "Justificante de registro de requerimientos de la solicitud de "+aplicacionJ;
  500. documento.save();
  501. InputStream is = justificanteSalida.getDocumento().contenido.getInputStream();
  502. gestorDocumentalService.saveDocumentoTemporal(documento, is, "JustificanteRequerimiento" + dbSolicitud.verificacion.requerimiento.id + ".pdf");
  503. play.Logger.info("Justificante del Requerimiento almacenado en el AED");
  504. List<Documento> documentos = new ArrayList<Documento>();
  505. documentos.add(dbSolicitud.verificacion.requerimiento.justificante);
  506. documentos.add(dbSolicitud.verificacion.requerimiento.oficial);
  507. // TODO: OJO, Descomentar esto, que el el correcto funcionamiento, pero pro problemas de la sede electronica de mis notificaciones
  508. // No se puede ni poner a notificable tanto el requerimiento como su justificante de registro
  509. // Ni poder los datos de registro del requerimiento
  510. try { // Sin registro
  511. gestorDocumentalService.clasificarDocumentos(dbSolicitud, documentos, false /*true*/);
  512. } catch (Exception e) {
  513. play.Logger.error("No se ha podido clasificar el justificante del requerimiento: "+e.getMessage());
  514. }
  515. // documentos.clear();
  516. // documentos.add(dbSolicitud.verificacion.requerimiento.oficial);
  517. //
  518. // try { // Con registro
  519. // gestorDocumentalService.clasificarDocumentos(dbSolicitud, documentos, dbSolicitud.verificacion.requerimiento.registro.informacionRegistro, true);
  520. // } catch (Exception e) {
  521. // play.Logger.error("No se ha podido clasificar el requerimiento oficial: "+e.getMessage());
  522. // }
  523. // ------------------------------------------
  524. play.Logger.info("Se ha registrado de Salida el documento del requerimiento de la solicitud "+dbSolicitud.id);
  525. Messages.ok("Se ha registrado el Requerimiento correctamente.");
  526. dbSolicitud.verificacion.requerimiento.registro.fasesRegistro.registro = true;
  527. //Si todo fue correcto, cambio el estado de la verificacion a firmada y registrada
  528. //para diferenciarla de las que aún esperan la firma.
  529. dbSolicitud.verificacion.estado=EstadosVerificacionEnum.enRequerimientoFirmadaRegistrada.name();
  530. dbSolicitud.save();
  531. } catch (Exception e) {
  532. Messages.error("No se ha podido registrar el requerimiento de la solicitud "+dbSolicitud.id);
  533. play.Logger.error("No se ha podido registrar el requerimiento de la solicitud "+dbSolicitud.id+": "+e.getMessage());
  534. }
  535. }
  536. // Si ya fue registrada
  537. if (dbSolicitud.verificacion.requerimiento.registro.fasesRegistro.registro) {
  538. Notificacion notificacion = dbSolicitud.verificacion.requerimiento.notificacion;
  539. if (notificacion.estado == null || notificacion.estado.isEmpty()) {
  540. //La notificación no ha sido creada
  541. DocumentoNotificacion docANotificar = new DocumentoNotificacion(dbSolicitud.verificacion.requerimiento.justificante.uri);
  542. notificacion.documentosANotificar.add(docANotificar);
  543. notificacion.interesados.addAll(dbSolicitud.solicitante.getAllInteresados());
  544. notificacion.descripcion = "Notificación";
  545. notificacion.plazoAcceso = FapProperties.getInt("fap.notificacion.plazoacceso");
  546. notificacion.plazoRespuesta = FapProperties.getInt("fap.notificacion.plazorespuesta");
  547. notificacion.frecuenciaRecordatorioAcceso = FapProperties.getInt("fap.notificacion.frecuenciarecordatorioacceso");
  548. notificacion.frecuenciaRecordatorioRespuesta = FapProperties.getInt("fap.notificacion.frecuenciarecordatoriorespuesta");
  549. notificacion.estado = EstadoNotificacionEnum.creada.name();
  550. notificacion.idExpedienteAed = dbSolicitud.expedienteAed.idAed;
  551. notificacion.asunto = "Notificación por Requerimiento";
  552. notificacion.save();
  553. dbSolicitud.save();
  554. }
  555. }
  556. PaginaVerificacionController.gFirmarRequerimientoRender(idSolicitud, idVerificacion);
  557. }
  558. if (!Messages.hasErrors()) {
  559. PaginaVerificacionController.gFirmarRequerimientoValidateRules(firma);
  560. }
  561. if (!Messages.hasErrors()) {
  562. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  563. } else
  564. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  565. PaginaVerificacionController.gFirmarRequerimientoRender(idSolicitud, idVerificacion);
  566. }
  567. @Util
  568. public static void firmaRequerimientoGFirmarRequerimiento(Long idSolicitud, Long idVerificacion, String firma) {
  569. SolicitudGenerica solicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  570. if (solicitud.verificacion.requerimiento.registro.firmantes.todos == null || solicitud.verificacion.requerimiento.registro.firmantes.todos.size() == 0) {
  571. solicitud.verificacion.requerimiento.registro.firmantes.todos = CalcularFirmantes.getGestoresComoFirmantes();
  572. solicitud.verificacion.requerimiento.registro.firmantes.save();
  573. }
  574. FirmaUtils.firmar(solicitud.verificacion.requerimiento.oficial, solicitud.verificacion.requerimiento.registro.firmantes.todos, firma, null);
  575. if (!Messages.hasErrors()) {
  576. Messages.ok("El requerimiento se ha firmado correctamente");
  577. solicitud.verificacion.requerimiento.registro.fasesRegistro.firmada = true;
  578. solicitud.save();
  579. }
  580. }
  581. @Util
  582. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  583. public static void gPonerADisposicion(Long idSolicitud, Long idVerificacion, String ponerADisposicion) {
  584. checkAuthenticity();
  585. if (!permisoGPonerADisposicion("editar")) {
  586. Messages.error("No tiene permisos suficientes para realizar la acción");
  587. }
  588. if (!Messages.hasErrors()) {
  589. Agente gestor = AgenteController.getAgente();
  590. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  591. Notificacion notificacion = solicitud.verificacion.requerimiento.notificacion;
  592. EntityTransaction tx = JPA.em().getTransaction();
  593. if (notificacion.estado.equals(EstadoNotificacionEnum.creada.name())) {
  594. // TODO: Está en estado creada, debo notificarla
  595. try {
  596. if (tx.isActive())
  597. tx.commit();
  598. tx.begin();
  599. notificacionService.enviarNotificaciones(notificacion, AgenteController.getAgente());
  600. play.Logger.info("Se ha puesto a disposición la notificación "+notificacion.id);
  601. notificacion.fechaPuestaADisposicion = new DateTime();
  602. notificacion.save();
  603. tx.commit();
  604. } catch (Exception e) {
  605. if ( tx != null && tx.isActive() ) tx.rollback();
  606. Messages.error("Ha ocurrido un error en el proceso de notificación");
  607. play.Logger.error("Ha ocurrido un error en el proceso de notificación para la notificacion: "+notificacion.id+" error: "+e.getMessage());
  608. e.printStackTrace();
  609. }
  610. tx.begin();
  611. }
  612. // Si fue puesta a disposición
  613. if (notificacion.estado.equals(EstadoNotificacionEnum.puestaadisposicion.name())) {
  614. try{
  615. if (tx.isActive())
  616. tx.commit();
  617. tx.begin();
  618. if (!solicitud.verificacion.estado.equals(EstadosVerificacionEnum.enRequerido.name())) {
  619. solicitud.verificacion.estado = EstadosVerificacionEnum.enRequerido.name();
  620. // Ponemos todos los documentos de la verificacion como verificados, para que no se incluyan en sucesivas verificaciones
  621. VerificacionUtils.setVerificadoDocumentos(solicitud.verificacion.documentos, solicitud.documentacion.documentos);
  622. //Se marca la solicitud como verificada
  623. if (solicitud.verificacion.tramiteNombre.nombre.equalsIgnoreCase("Solicitud")) {
  624. if ((solicitud.registro.oficial != null) && (!solicitud.registro.oficial.uri.isEmpty()) && ((solicitud.registro.oficial.verificado == null) || (!solicitud.registro.oficial.verificado)))
  625. VerificacionUtils.setVerificadoDocumento(solicitud.verificacion.documentos, solicitud.registro.oficial);
  626. }
  627. // Actualizamos los datos de la verificacion para verificaciones posteriores. Copiamos la verificacionActual a las verificaciones Anteriores para poder empezar una nueva verificación.
  628. solicitud.verificaciones.add(solicitud.verificacion);
  629. solicitud.save();
  630. }
  631. notificacion.estado = EstadoNotificacionEnum.enviada.name();
  632. notificacion.save();
  633. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("solicitud", solicitud);
  634. Mails.enviar("emitirRequerimiento", solicitud);
  635. tx.commit();
  636. } catch (Exception e) {
  637. if ( tx != null && tx.isActive() ) tx.rollback();
  638. play.Logger.error("No se pudo enviar el mail emitirRequerimiento: "+e.getMessage());
  639. }
  640. tx.begin();
  641. }
  642. }
  643. if (!Messages.hasErrors()) {
  644. PaginaVerificacionController.gPonerADisposicionValidateRules();
  645. }
  646. if (!Messages.hasErrors()) {
  647. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  648. Messages.ok("El proceso de notificación se ha realizado satisfactoriamente");
  649. } else
  650. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  651. PaginaVerificacionController.gPonerADisposicionRender(idSolicitud, idVerificacion);
  652. }
  653. @Util
  654. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  655. public static void anularVerificacion(Long idSolicitud, Long idVerificacion, String botonAnularVerificacion) {
  656. checkAuthenticity();
  657. if (!permisoAnularVerificacion("editar")) {
  658. Messages.error("No tiene permisos suficientes para realizar la acción");
  659. }
  660. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  661. long idVerificacionActualyMal=0;
  662. if (!Messages.hasErrors()) {
  663. // Cambiamos la verificación actual a null para 'resetear' la verificación y simular el anulamiento de la misma
  664. solicitud.verificacion.setNullOneToMany();
  665. solicitud.save();
  666. idVerificacionActualyMal = solicitud.verificacion.id;
  667. solicitud.verificacion = null;
  668. solicitud.estado = solicitud.estadoAntesVerificacion;
  669. }
  670. if (!Messages.hasErrors()) {
  671. PaginaVerificacionController.anularVerificacionValidateRules();
  672. }
  673. if (!Messages.hasErrors()) {
  674. solicitud.save();
  675. log.info("Anulada Verificación Correctamente por el Agente: "+AgenteController.getAgente().username+". Deshechada la Verificación con ID: "+idVerificacionActualyMal);
  676. Messages.warning("Verificación Anulada Correctamente, puede iniciar una Nueva Verificación");
  677. Messages.keep();
  678. redirect("AccesoVerificacionesController.index", getAccion(), idSolicitud);
  679. } else
  680. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  681. PaginaVerificacionController.anularVerificacionRender(idSolicitud, idVerificacion);
  682. }
  683. @Util
  684. public static void reabrirVerificacion(Long idSolicitud, Long idVerificacion, String botonReabrirVerificacion) {
  685. checkAuthenticity();
  686. if (!permisoReabrirVerificacion("editar")) {
  687. Messages.error("No tiene permisos suficientes para realizar la acción");
  688. }
  689. if(!Messages.hasErrors()) {
  690. Verificacion verificacion = Verificacion.findById(idVerificacion);
  691. if (verificacion != null) {
  692. verificacion.estado = EstadosVerificacionEnum.enVerificacion.name();
  693. verificacion.save();
  694. Messages.ok("Ahora puede modificar la verificación");
  695. }
  696. }
  697. Agente logAgente = AgenteController.getAgente();
  698. if (!Messages.hasErrors()) {
  699. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito " + " Agente: " + logAgente);
  700. } else
  701. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)" + " Agente: " + logAgente);
  702. PaginaVerificacionController.reabrirVerificacionRender(idSolicitud, idVerificacion);
  703. }
  704. @Util
  705. public static void obtenerNoProcede(Long idSolicitud, Long idVerificacion){
  706. //Debe extraer los documentos clasificados como no procede en verificaciones anteriores
  707. //todas las verificaciones de la solicitud
  708. SolicitudGenerica solicitud = SolicitudGenerica.findById(idSolicitud);
  709. List<Verificacion> verificaciones = solicitud.verificaciones;
  710. Map<String, VerificacionDocumento> docsnp = new HashMap<String, VerificacionDocumento>();
  711. for (Verificacion verif : verificaciones) {
  712. List<VerificacionDocumento> documentos = verif.documentos;
  713. for (VerificacionDocumento doc : documentos) {
  714. //Si estado es noProcede, existe y no está ya en la lista -> Añadir
  715. if ((doc.estadoDocumentoVerificacion.equals(EstadosDocumentoVerificacionEnum.noProcede.name())) && (doc.existe) && (!docsnp.containsKey(doc.uriDocumento))){
  716. docsnp.put(doc.uriDocumento, new VerificacionDocumento(doc));
  717. }
  718. //Si está en lista, existe, el estado es distinto de noProcede y fecha posterior al almacenado
  719. else if ((!doc.estadoDocumentoVerificacion.equals(EstadosDocumentoVerificacionEnum.noProcede.name())) && (doc.existe) && (docsnp.containsKey(doc.uriDocumento))){
  720. docsnp.remove(doc.uriDocumento);
  721. }
  722. }
  723. }
  724. Verificacion verificacion = Verificacion.findById(idVerificacion);
  725. verificacion.documentos.addAll(docsnp.values());
  726. verificacion.estado = EstadosVerificacionEnum.enVerificacion.name();
  727. verificacion.save();
  728. }
  729. @Util
  730. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  731. public static void frmtiposProceso(Long idSolicitud, Long idVerificacion, String obtenerNoProcede) {
  732. checkAuthenticity();
  733. if (!permisoFrmtiposProceso("editar")) {
  734. Messages.error("No tiene permisos suficientes para realizar la acción");
  735. }
  736. if (!Messages.hasErrors()) {
  737. obtenerNoProcede(idSolicitud, idVerificacion);
  738. }
  739. if (!Messages.hasErrors()) {
  740. PaginaVerificacionController.frmtiposProcesoValidateRules();
  741. }
  742. if (!Messages.hasErrors()) {
  743. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  744. } else
  745. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  746. PaginaVerificacionController.frmtiposProcesoRender(idSolicitud, idVerificacion);
  747. }
  748. public static void tablaverificacionDocumentos(Long idSolicitud) {
  749. SolicitudGenerica solicitud = SolicitudGenerica.findById(idSolicitud);
  750. java.util.List<VerificacionDocumento> rows = solicitud.verificacion.documentos;
  751. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  752. List<VerificacionDocumento> rowsFiltered = rows; //Tabla sin permisos, no filtra
  753. tables.TableRenderResponse<VerificacionDocumento> response = new tables.TableRenderResponse<VerificacionDocumento>(rowsFiltered, false, false, false, "", "", "", getAccion(), ids);
  754. renderJSON(response.toJSON("fechaPresentacion", "descripcion", "nombreTipoDocumento", "estadoDocumentoVerificacion", "identificadorMultiple", "linkUrlDescarga", "id"));
  755. }
  756. @Util
  757. public static void incluirNoProcede(SolicitudGenerica solicitud, Long idVerificacion) {
  758. Verificacion verificacion = Verificacion.findById(idVerificacion);
  759. TipoDocumento tDoc = TipoDocumento.find("select tDoc from TipoDocumento tDoc where uri=? and tramitePertenece=?", verificacion.incluirFichMultiple, verificacion.uriTramite).first();
  760. if (tDoc == null) {
  761. play.Logger.error("No existe el tipo de documento "+verificacion.incluirFichMultiple+"en el trámite "+verificacion.uriTramite+" de la verificación actual: "+verificacion.id);
  762. Messages.error("No existe el tipo de documento en el trámite de la verificación actual");
  763. return;
  764. }
  765. VerificacionDocumento vDoc = new VerificacionDocumento();
  766. vDoc.existe = false;
  767. vDoc.uriTipoDocumento = tDoc.uri;
  768. vDoc.identificadorMultiple = tDoc.cardinalidad;
  769. vDoc.descripcion = TableKeyValue.getValue("tiposDocumentos", tDoc.uri);
  770. vDoc.estadoDocumentoVerificacion = EstadosDocumentoVerificacionEnum.noProcede.name();
  771. vDoc.save();
  772. verificacion.documentos.add(vDoc);
  773. verificacion.save();
  774. }
  775. /**
  776. * A partir del trámite de la verificación, devuelve todos los tipos de documentos
  777. * que cumplan:
  778. * - Aportado por CIUDADANO
  779. *
  780. * @return
  781. */
  782. public static List<ComboItem> comboMultiples() {
  783. Long idSolicitud = Long.parseLong(params.get("idSolicitud"));
  784. Long idVerificacion = Long.parseLong(params.get("idVerificacion"));
  785. Verificacion verificacion = Verificacion.findById(idVerificacion);
  786. // Obtenemos el trámite actual
  787. Tramite tramite = verificacion.tramiteNombre;
  788. List<ComboItem> result = new ArrayList<ComboItem>();
  789. for (TipoDocumento tDoc : tramite.documentos) {
  790. if (tDoc.aportadoPor.equalsIgnoreCase("CIUDADANO")) {
  791. result.add(new ComboItem(tDoc.uri, tDoc.nombre));
  792. }
  793. }
  794. return result;
  795. }
  796. @Util
  797. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  798. public static void incluirNoProcedeMultiples(Long idSolicitud, Long idVerificacion, SolicitudGenerica solicitud, String incluirNoProcede) {
  799. checkAuthenticity();
  800. if (!permisoIncluirNoProcedeMultiples("editar")) {
  801. Messages.error("No tiene permisos suficientes para realizar la acción");
  802. }
  803. SolicitudGenerica dbSolicitud = PaginaVerificacionController.getSolicitudGenerica(idSolicitud);
  804. PaginaVerificacionController.incluirNoProcedeMultiplesBindReferences(solicitud);
  805. if (!Messages.hasErrors()) {
  806. PaginaVerificacionController.incluirNoProcedeMultiplesValidateCopy("editar", dbSolicitud, solicitud);
  807. }
  808. if ((!Messages.hasErrors()) && (!incluirNoProcede.isEmpty())){
  809. incluirNoProcede(solicitud, idVerificacion);
  810. }
  811. if (!Messages.hasErrors()) {
  812. PaginaVerificacionController.incluirNoProcedeMultiplesValidateRules(dbSolicitud, solicitud);
  813. }
  814. if (!Messages.hasErrors()) {
  815. dbSolicitud.save();
  816. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada con éxito");
  817. } else
  818. log.info("Acción Editar de página: " + "gen/PaginaVerificacion/PaginaVerificacion.html" + " , intentada sin éxito (Problemas de Validación)");
  819. PaginaVerificacionController.incluirNoProcedeMultiplesRender(idSolicitud, idVerificacion);
  820. }
  821. }