PageRenderTime 51ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/fap/app/controllers/PaginaNotificarResolucionController.java

https://github.com/FAP-Team/Fap-Module
Java | 485 lines | 408 code | 63 blank | 14 comment | 69 complexity | 43a9f79ac41634a3d529a6431c801c62 MD5 | raw file
  1. package controllers;
  2. import java.io.InputStream;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.persistence.EntityTransaction;
  7. import javax.xml.ws.soap.SOAPFaultException;
  8. import messages.Messages;
  9. import models.Agente;
  10. import models.Documento;
  11. import models.Firma;
  12. import models.LineaResolucionFAP;
  13. import models.ResolucionFAP;
  14. import models.SolicitudGenerica;
  15. import models.ResolucionFAP;
  16. import org.joda.time.DateTime;
  17. import play.db.jpa.JPA;
  18. import play.mvc.Util;
  19. import properties.FapProperties;
  20. import resolucion.ResolucionBase;
  21. import services.GestorDocumentalService;
  22. import services.GestorDocumentalServiceException;
  23. import services.PortafirmaFapService;
  24. import services.PortafirmaFapServiceException;
  25. import services.RegistroService;
  26. import services.BDOrganizacion.PlatinoBDOrganizacionServiceImpl;
  27. import services.platino.PlatinoGestorDocumentalService;
  28. import services.responses.PortafirmaCrearSolicitudResponse;
  29. import tags.ComboItem;
  30. import utils.AedUtils;
  31. import utils.ComboUtils;
  32. import utils.ResolucionUtils;
  33. import validation.CustomValidation;
  34. import config.InjectorConfig;
  35. import controllers.fap.AgenteController;
  36. import controllers.fap.ResolucionControllerFAP;
  37. import controllers.gen.PaginaNotificarResolucionControllerGen;
  38. import enumerado.fap.gen.EstadoResolucionNotificacionEnum;
  39. import es.gobcan.aciisi.portafirma.ws.dominio.PrioridadEnumType;
  40. import es.gobcan.aciisi.portafirma.ws.dominio.TipoSolicitudEnumType;
  41. import es.gobcan.platino.servicios.organizacion.DBOrganizacionException_Exception;
  42. public class PaginaNotificarResolucionController extends PaginaNotificarResolucionControllerGen {
  43. public static void index(String accion, Long idResolucionFAP) {
  44. if (accion == null)
  45. accion = getAccion();
  46. if (!permiso(accion)) {
  47. Messages.fatal("No tiene permisos suficientes para realizar esta acción");
  48. renderTemplate("fap/PaginaNotificarResolucion/PaginaNotificarResolucion.html");
  49. }
  50. ResolucionFAP resolucionFAP = null;
  51. if ("crear".equals(accion)) {
  52. resolucionFAP = PaginaNotificarResolucionController.getResolucionFAP();
  53. if (properties.FapProperties.getBoolean("fap.entidades.guardar.antes")) {
  54. resolucionFAP.save();
  55. idResolucionFAP = resolucionFAP.id;
  56. accion = "editar";
  57. }
  58. } else if (!"borrado".equals(accion))
  59. resolucionFAP = PaginaNotificarResolucionController.getResolucionFAP(idResolucionFAP);
  60. log.info("Visitando página: " + "fap/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  61. renderTemplate("fap/PaginaNotificarResolucion/PaginaNotificarResolucion.html", accion, idResolucionFAP, resolucionFAP);
  62. }
  63. @Util
  64. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  65. public static void formGenerarOficioRemision(Long idResolucionFAP, ResolucionFAP resolucionFAP, String botonGenerarOficioRemision) {
  66. checkAuthenticity();
  67. if (!permisoFormGenerarOficioRemision("editar")) {
  68. Messages.error("No tiene permisos suficientes para realizar la acción");
  69. }
  70. ResolucionFAP dbResolucionFAP = PaginaNotificarResolucionController.getResolucionFAP(idResolucionFAP);
  71. PaginaNotificarResolucionController.formGenerarOficioRemisionBindReferences(resolucionFAP);
  72. if (!Messages.hasErrors()) {
  73. PaginaNotificarResolucionController.formGenerarOficioRemisionValidateCopy("editar", dbResolucionFAP, resolucionFAP);
  74. }
  75. ResolucionBase resolBase = null;
  76. if (!Messages.hasErrors()) {
  77. try {
  78. resolBase = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getResolucionObject", idResolucionFAP);
  79. resolBase.generarOficioRemision(idResolucionFAP);
  80. } catch (Throwable e) {
  81. Messages.error("Error generando los oficios de remisión");
  82. play.Logger.error("Error generando los oficios de remisión: "+e.getMessage());
  83. new Exception ("Error generando los de oficios de remisión", e);
  84. }
  85. }
  86. if (!Messages.hasErrors()) {
  87. PaginaNotificarResolucionController.formGenerarOficioRemisionValidateRules(dbResolucionFAP, resolucionFAP);
  88. }
  89. if (!Messages.hasErrors()) {
  90. dbResolucionFAP.save();
  91. Messages.ok("Se ha generado el documento de oficios de remisón satisfactoriamente");
  92. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada con éxito");
  93. } else
  94. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  95. PaginaNotificarResolucionController.formGenerarOficioRemisionRender(idResolucionFAP);
  96. }
  97. @Util
  98. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  99. public static boolean notificar(Long idResolucionFAP, int fapNotificacionPlazoacceso, int fapNotificacionFrecuenciarecordatorioacceso, int fapNotificacionPlazorespuesta, int fapNotificacionFrecuenciarecordatoriorespuesta) {
  100. ResolucionBase resolBase = null;
  101. boolean notificada = false;
  102. try {
  103. resolBase = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getResolucionObject", idResolucionFAP);
  104. notificada = resolBase.notificarCopiarEnExpedientes(idResolucionFAP, fapNotificacionPlazoacceso, fapNotificacionFrecuenciarecordatorioacceso, fapNotificacionPlazorespuesta, fapNotificacionFrecuenciarecordatoriorespuesta);
  105. } catch (Throwable e) {
  106. Messages.error("Ha ocurrido un error en el proceso de notificación");
  107. play.Logger.error("Ha ocurrido un error en el proceso de notificación: "+e.getMessage());
  108. new Exception ("Ha ocurrido un error en el proceso de notificación", e);
  109. }
  110. if (!Messages.hasErrors())
  111. Messages.ok("El proceso de notificación se ha realizado satisfactoriamente");
  112. Messages.keep();
  113. return notificada;
  114. }
  115. @Util
  116. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  117. public static void formVolver(Long idResolucionFAP) {
  118. checkAuthenticity();
  119. if (!permisoFormVolver("editar")) {
  120. Messages.error("No tiene permisos suficientes para realizar la acción");
  121. }
  122. if (!Messages.hasErrors()) {
  123. }
  124. if (!Messages.hasErrors()) {
  125. PaginaNotificarResolucionController.formVolverValidateRules();
  126. }
  127. if (!Messages.hasErrors()) {
  128. log.info("Acción Editar de página: " + "fap/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada con éxito" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  129. } else
  130. log.info("Acción Editar de página: " + "fap/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  131. PaginaNotificarResolucionController.formVolverRender(idResolucionFAP);
  132. }
  133. @Util
  134. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  135. public static void formEnviarOficiosRemisionPortaFirma(Long idResolucionFAP, ResolucionFAP resolucionFAP, String botonEnviarOficiosRemisionPortaFirma) {
  136. checkAuthenticity();
  137. if (!permisoFormEnviarOficiosRemisionPortaFirma("editar")) {
  138. Messages.error("No tiene permisos suficientes para realizar la acción");
  139. }
  140. ResolucionFAP dbResolucionFAP = PaginaNotificarResolucionController.getResolucionFAP(idResolucionFAP);
  141. ResolucionUtils.actualizarSolicitudesFirmaPortafirmaAntiguasResolucion(dbResolucionFAP);
  142. PaginaNotificarResolucionController.formEnviarOficiosRemisionPortaFirmaBindReferences(resolucionFAP);
  143. Agente agenteActual = AgenteController.getAgente();
  144. if (!Messages.hasErrors()) {
  145. resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante = agenteActual.usuarioldap;
  146. PaginaNotificarResolucionController.formEnviarOficiosRemisionPortaFirmaValidateCopy("editar", dbResolucionFAP, resolucionFAP);
  147. if (!Messages.hasErrors()) {
  148. if (properties.FapProperties.getBoolean("fap.platino.portafirma")) {
  149. PlatinoBDOrganizacionServiceImpl platinoDBOrgPort = InjectorConfig.getInjector().getInstance(PlatinoBDOrganizacionServiceImpl.class);
  150. try {
  151. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.uriFuncionarioSolicitante = platinoDBOrgPort.recuperarURIPersona(dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante);
  152. } catch (DBOrganizacionException_Exception e) {
  153. play.Logger.error("Error al obtener la uri del funcionario solicitante en la Base de Datos de Organización: " + e.getMessage());
  154. Messages.error("Error al obtener la uri del funcionario solicitante en la Base de Datos de Organización.");
  155. }
  156. if ((dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.uriFuncionarioSolicitante == null) || (dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.uriFuncionarioSolicitante.isEmpty()))
  157. Messages.error("El usuario "+dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante+" especificado no se encuentra en la Base de Datos de Organización.");
  158. }
  159. }
  160. }
  161. if (!Messages.hasErrors()) {
  162. PaginaNotificarResolucionController.formEnviarOficiosRemisionPortaFirmaValidateRules(dbResolucionFAP, resolucionFAP);
  163. }
  164. if (!Messages.hasErrors()) {
  165. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.tema = "Oficios de remisión";
  166. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.materia = "Se firmarán los oficios de remisión de la resolución "+idResolucionFAP;
  167. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.tipoSolicitud = TipoSolicitudEnumType.OTROS.value();
  168. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.prioridad = PrioridadEnumType.NORMAL.value();
  169. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.tipoDocumento = "SOL";
  170. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.emailNotificacion = agenteActual.email;
  171. if (dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.agenteHaceSolicitud == null)
  172. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.agenteHaceSolicitud = new Agente();
  173. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.agenteHaceSolicitud = agenteActual;
  174. for (LineaResolucionFAP linea: dbResolucionFAP.lineasResolucion) {
  175. if (!linea.registro.fasesRegistro.firmada) {
  176. Documento documento = new Documento();
  177. documento.uri = linea.registro.oficial.uri;
  178. documento.descripcion = linea.registro.oficial.descripcionVisible;
  179. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.documentosFirma.add(documento);
  180. }
  181. }
  182. dbResolucionFAP.save();
  183. try {
  184. PortafirmaFapService portafirmaService = InjectorConfig.getInjector().getInstance(PortafirmaFapService.class);
  185. PortafirmaCrearSolicitudResponse portafirmaCrearSolicitudResponse = portafirmaService.crearSolicitudFirma(dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision);
  186. portafirmaService.entregarSolicitudFirma(dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante, portafirmaCrearSolicitudResponse.getIdSolicitud(), portafirmaCrearSolicitudResponse.getComentarios());
  187. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.uriSolicitud = portafirmaCrearSolicitudResponse.getIdSolicitud();
  188. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.solicitudEstadoComentario = portafirmaCrearSolicitudResponse.getComentarios();
  189. dbResolucionFAP.estadoNotificacion = EstadoResolucionNotificacionEnum.oficiosRemisionPendientesPortafirma.name();
  190. dbResolucionFAP.save();
  191. Messages.ok("Se ha enviado correctamente al portafirma la solicitud de la firma");
  192. } catch (PortafirmaFapServiceException e) {
  193. play.Logger.error("Error al crear la solicitud de firma: " + e);
  194. Messages.error("Error al crear la solicitud de firma");
  195. } catch (SOAPFaultException e) {
  196. play.Logger.error("Error al crear la solicitud de firma: " + e);
  197. Messages.error("Error al crear la solicitud de firma");
  198. }
  199. }
  200. if (!Messages.hasErrors()) {
  201. dbResolucionFAP.save();
  202. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada con éxito" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  203. } else
  204. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  205. PaginaNotificarResolucionController.formEnviarOficiosRemisionPortaFirmaRender(idResolucionFAP);
  206. }
  207. @Util
  208. public static void formEnviarOficiosRemisionPortaFirmaValidateCopy(String accion, ResolucionFAP dbResolucionFAP, ResolucionFAP resolucionFAP) {
  209. CustomValidation.clearValidadas();
  210. if (secure.checkGrafico("permisoEnviarOficiosRemisionPortafirma", "editable", accion, (Map<String, Long>) tags.TagMapStack.top("idParams"), null)) {
  211. CustomValidation.valid("resolucionFAP.solicitudFirmaPortafirmaOficioRemision", resolucionFAP.solicitudFirmaPortafirmaOficioRemision);
  212. CustomValidation.valid("resolucionFAP", resolucionFAP);
  213. CustomValidation.required("resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario);
  214. CustomValidation.validValueFromTable("resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario);
  215. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision = resolucionFAP.solicitudFirmaPortafirmaOficioRemision;
  216. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario = resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idDestinatario;
  217. if (properties.FapProperties.getBoolean("fap.platino.portafirma")) {
  218. if (resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante == null){
  219. Messages.error("El usuario no tiene asociado un identificador único en el ldap del gobierno.");
  220. play.Logger.error("El usuario no tiene asociado un identificador único en el ldap del gobierno.");
  221. } else
  222. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante = resolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante;
  223. }
  224. else {
  225. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.idSolicitante = FapProperties.get("portafirma.usuario");
  226. }
  227. }
  228. if (dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo != null) {
  229. DateTime today = new DateTime().withTimeAtStartOfDay();
  230. if (dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo.isBefore(today)) {
  231. play.Logger.error("La fecha tope de firma no puede ser anterior a hoy.");
  232. CustomValidation.error("La fecha tope de firma no puede ser anterior a hoy.","resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo);
  233. }
  234. int dias = 0;
  235. try {
  236. dias = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getDiasLimiteFirma", dbResolucionFAP.id, true);
  237. //Si hay un plazo límite, se calcula si la fecha seleccionada está dentro del rango
  238. if (dias != -1) {
  239. //Es requerido sólo si existe la property y tiene valor
  240. CustomValidation.required("resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo);
  241. dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo = resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo;
  242. DateTime diaLimite = new DateTime();
  243. diaLimite = diaLimite.plusDays(1); // Por defecto, sólo se permite un día de plazo máximo
  244. if (diaLimite.isBefore(dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo)) {
  245. play.Logger.error("La fecha tope de firma no puede ser posterior a "+diaLimite+".");
  246. CustomValidation.error("La fecha tope de firma no puede ser posterior a "+diaLimite+".", "resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo);
  247. }
  248. }
  249. } catch (Throwable e) {
  250. e.printStackTrace();
  251. play.Logger.error("No se ha podido calcular el límite de fecha para la firma."+e);
  252. CustomValidation.error("No se ha podido calcular el límite de fecha para la firma", "resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo", resolucionFAP.solicitudFirmaPortafirmaOficioRemision.plazoMaximo);
  253. }
  254. }
  255. dbResolucionFAP.save();
  256. }
  257. @Util
  258. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  259. public static void formComprobarFirmasOficiosRemisionPortaFirma(Long idResolucionFAP, String botonComprobarFirmasOficiosRemisionPortaFirma) {
  260. checkAuthenticity();
  261. if (!permisoFormComprobarFirmasOficiosRemisionPortaFirma("editar")) {
  262. Messages.error("No tiene permisos suficientes para realizar la acción");
  263. }
  264. if (!Messages.hasErrors()) {
  265. ResolucionFAP dbResolucionFAP = PaginaNotificarResolucionController.getResolucionFAP(idResolucionFAP);
  266. ResolucionUtils.actualizarSolicitudesFirmaPortafirmaAntiguasResolucion(dbResolucionFAP);
  267. try {
  268. PortafirmaFapService portafirmaService = InjectorConfig.getInjector().getInstance(PortafirmaFapService.class);
  269. if (portafirmaService.comprobarSiSolicitudFirmada(dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision)) {
  270. //Se agrega la firma de los oficios de remisión del portafirma del gobierno al AED de la ACIISI
  271. for (LineaResolucionFAP linea: dbResolucionFAP.lineasResolucion) {
  272. if (!linea.registro.fasesRegistro.firmada) {
  273. linea.registro.fasesRegistro.firmada = true;
  274. AedUtils.agregarFirma(linea.registro.oficial);
  275. }
  276. }
  277. dbResolucionFAP.estadoNotificacion = EstadoResolucionNotificacionEnum.oficiosRemisionFirmados.name();
  278. dbResolucionFAP.save();
  279. Messages.ok("Los oficios de remisión de la resolución asociados a la solicitud de firma se han firmado y finalizado correctamente.");
  280. play.Logger.info("Los oficios de remisión de la resolución [" + idResolucionFAP + "] asociados a la solicitud de firma se han firmado y finalizado correctamente.");
  281. } else {
  282. play.Logger.warn("Los oficios de remisión de la resolución ["+dbResolucionFAP.id+"] asociados a la solicitud de firma no han sido firmados y finalizados.");
  283. Messages.warning("Los oficios de remisión de la resolución asociados a la solicitud de firma no han sido firmados y finalizados.");
  284. String response = portafirmaService.obtenerEstadoFirma(dbResolucionFAP.solicitudFirmaPortafirmaOficioRemision);
  285. if (response == null) {
  286. throw new PortafirmaFapServiceException("No se pudo obtener el estado de la firma: Response null.");
  287. }
  288. //TODO: Recuperar comentario del response (que ahora no existe)
  289. //play.Logger.info("El estado de la solicitud de firma en el portafirma es: "+response+ ": "+response.getComentario());
  290. play.Logger.info("El estado de la solicitud de firma en el portafirma es: "+response);
  291. Messages.warning("El estado de la solicitud de firma en el portafirma es: "+response);
  292. if (response.equalsIgnoreCase("Rechazada")) {
  293. dbResolucionFAP.estadoNotificacion = EstadoResolucionNotificacionEnum.noNotificada.name();
  294. dbResolucionFAP.save();
  295. }
  296. }
  297. } catch (PortafirmaFapServiceException e) {
  298. play.Logger.error("Error al comprobar si ya se han firmado los oficios de remisión en el portafirma: " + e);
  299. Messages.error("Error al comprobar si ya se han firmado los oficios de remisión en el portafirma.");
  300. } catch (SOAPFaultException e) {
  301. play.Logger.error("Error al comprobar si ya se han firmado los oficios de remisión en el portafirma: " + e);
  302. Messages.error("Error al comprobar si ya se han firmado los oficios de remisión en el portafirma.");
  303. }
  304. }
  305. if (!Messages.hasErrors()) {
  306. PaginaNotificarResolucionController.formComprobarFirmasOficiosRemisionPortaFirmaValidateRules();
  307. }
  308. if (!Messages.hasErrors()) {
  309. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada con éxito" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  310. } else
  311. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  312. PaginaNotificarResolucionController.formComprobarFirmasOficiosRemisionPortaFirmaRender(idResolucionFAP);
  313. }
  314. @Util
  315. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  316. public static void formRegistrarOficiosRemision(Long idResolucionFAP, String botonRegistrarOficiosRemision) {
  317. checkAuthenticity();
  318. if (!permisoFormRegistrarOficiosRemision("editar")) {
  319. Messages.error("No tiene permisos suficientes para realizar la acción");
  320. }
  321. RegistroService registroService = InjectorConfig.getInjector().getInstance(RegistroService.class);
  322. GestorDocumentalService gestorDocumentalService = InjectorConfig.getInjector().getInstance(GestorDocumentalService.class);
  323. try {
  324. if (!registroService.isConfigured()){
  325. Messages.error("No se tiene acceso al servicio web de registro");
  326. play.Logger.info("No se tiene acceso al servicio web de registro, registrando oficios de remision");
  327. }
  328. } catch (Exception e) {
  329. Messages.error("Se ha producido un error de acceso al servicio web de registro");
  330. play.Logger.info("Se ha producido un error de acceso al servicio web de registro: " + e.getMessage());
  331. }
  332. try {
  333. if (!gestorDocumentalService.isConfigured()){
  334. Messages.error("No se tiene acceso al servicio de archivo electrónico de documentos (AED)");
  335. play.Logger.info("No se tiene acceso al servicio de archivo electrónico de documentos (AED)");
  336. }
  337. } catch (Exception e) {
  338. Messages.error("Se ha producido un error de acceso al servico de archivo electrónico de documentos (AED)");
  339. play.Logger.info("Se ha producido un error de acceso al servicio de archivo electrónico de documentos (AED): " + e.getMessage());
  340. }
  341. if (!Messages.hasErrors()) {
  342. EntityTransaction tx = JPA.em().getTransaction();
  343. try {
  344. if (tx.isActive())
  345. tx.commit();
  346. tx.begin();
  347. ResolucionFAP dbResolucionFAP = PaginaNotificarResolucionController.getResolucionFAP(idResolucionFAP);
  348. for (LineaResolucionFAP lineaResolucionFAP: dbResolucionFAP.lineasResolucion) {
  349. SolicitudGenerica solicitud = SolicitudGenerica.findById(lineaResolucionFAP.solicitud.id);
  350. if (!lineaResolucionFAP.registro.fasesRegistro.registro) {
  351. play.Logger.info("Se inicia el proceso de registro de salida del oficio de remisión "+lineaResolucionFAP.registro.oficial.uri);
  352. // Se obtiene el justificante de registro de salida del oficio de remisión
  353. models.JustificanteRegistro justificanteSalida = registroService.registroDeSalida(solicitud.solicitante, lineaResolucionFAP.registro.oficial, solicitud.expedientePlatino, "Oficio de remisión");
  354. lineaResolucionFAP.registro.informacionRegistro.setDataFromJustificante(justificanteSalida);
  355. Documento documento = lineaResolucionFAP.registro.justificante;
  356. documento.tipo = FapProperties.get("fap.aed.tiposdocumentos.justificanteRegistroSalida");
  357. documento.descripcion = "Justificante de registro de salida del oficio de remisión";
  358. documento.save();
  359. play.Logger.info("Creado el documento "+documento.descripcion+" en local, se procede a almacenar en el AED");
  360. InputStream is = justificanteSalida.getDocumento().contenido.getInputStream();
  361. gestorDocumentalService.saveDocumentoTemporal(documento, is, "JustificanteOficioRemision" + ".pdf");
  362. play.Logger.info(documento.descripcion+" almacenado en el AED");
  363. play.Logger.info(documento.uriPlatino);
  364. lineaResolucionFAP.registro.fasesRegistro.registro = true;
  365. List<Documento> documentos = new ArrayList<Documento>();
  366. documentos.add(lineaResolucionFAP.registro.oficial);
  367. documentos.add(lineaResolucionFAP.registro.justificante);
  368. // Se pone la fecha de registro a los documentos
  369. for (Documento doc: documentos) {
  370. if (doc.fechaRegistro == null) {
  371. doc.fechaRegistro = lineaResolucionFAP.registro.informacionRegistro.fechaRegistro;
  372. doc.save();
  373. }
  374. }
  375. play.Logger.info("Se realizó el registro de salida del oficio de remisión correctamente");
  376. }
  377. if (!lineaResolucionFAP.registro.fasesRegistro.clasificarAed) {
  378. List<Documento> documentos = new ArrayList<Documento>();
  379. documentos.add(lineaResolucionFAP.registro.oficial);
  380. documentos.add(lineaResolucionFAP.registro.justificante);
  381. play.Logger.info("Se procede a clasificar los documentos oficio de remisión y justificante de registro de salida del oficio de remisión de la línea: "+lineaResolucionFAP.id);
  382. // Se clasifican los documentos
  383. gestorDocumentalService.clasificarDocumentos(solicitud, documentos, false);
  384. lineaResolucionFAP.registro.fasesRegistro.clasificarAed = true;
  385. play.Logger.info("Documentos clasificados");
  386. lineaResolucionFAP.save();
  387. solicitud.save();
  388. play.Logger.info("Se realizó la clasificación correctamente");
  389. }
  390. }
  391. tx.commit();
  392. } catch (Throwable e) {
  393. if ( tx != null && tx.isActive() ) tx.rollback();
  394. Messages.error("Se ha producido un error realizando el registro de los oficios de remisión");
  395. play.Logger.info("Se ha producido un error realizando el registro de los oficios de remisión: " + e.getMessage());
  396. }
  397. tx.begin();
  398. }
  399. if (!Messages.hasErrors()) {
  400. PaginaNotificarResolucionController.formRegistrarOficiosRemisionValidateRules();
  401. }
  402. if (!Messages.hasErrors()) {
  403. Messages.ok("El registro de los oficios de remisión se ha realizado satisfactoriamente");
  404. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada con éxito" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  405. } else
  406. log.info("Acción Editar de página: " + "gen/PaginaNotificarResolucion/PaginaNotificarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  407. PaginaNotificarResolucionController.formRegistrarOficiosRemisionRender(idResolucionFAP);
  408. }
  409. public static List<ComboItem> selectJefeServicio() {
  410. List<ComboItem> listaCombo = new ArrayList<ComboItem>();
  411. try {
  412. listaCombo = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getJefesServicio");
  413. } catch (Throwable e) {
  414. Messages.error("No se pudieron obtener los jefes de servicio");
  415. play.Logger.error("No se pudieron obtener los jefes de servicio"+e.getMessage());
  416. }
  417. return listaCombo;
  418. }
  419. public static List<ComboItem> gestorAFirmar() {
  420. return ComboUtils.gestorAFirmar();
  421. }
  422. }