PageRenderTime 59ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/fap/app/controllers/EditarResolucionController.java

https://github.com/FAP-Team/Fap-Module
Java | 843 lines | 683 code | 113 blank | 47 comment | 116 complexity | 8991e45f4cc0df64f6c7d50402741495 MD5 | raw file
  1. package controllers;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.persistence.EntityTransaction;
  8. import javax.xml.ws.soap.SOAPFaultException;
  9. import messages.Messages;
  10. import models.Agente;
  11. import models.Documento;
  12. import models.Firma;
  13. import models.LineaResolucionFAP;
  14. import models.Registro;
  15. import models.ResolucionFAP;
  16. import models.SolicitudFirmaPortafirma;
  17. import models.SolicitudGenerica;
  18. import org.joda.time.DateTime;
  19. import com.google.inject.Inject;
  20. import platino.FirmaUtils;
  21. import play.db.jpa.JPA;
  22. import play.modules.guice.InjectSupport;
  23. import play.mvc.Util;
  24. import properties.FapProperties;
  25. import registroresolucion.RegistroResolucion;
  26. import reports.Report;
  27. import resolucion.ResolucionBase;
  28. import services.FirmaServiceException;
  29. import services.GestorDocumentalService;
  30. import services.GestorDocumentalServiceException;
  31. import services.PortafirmaFapService;
  32. import services.PortafirmaFapServiceException;
  33. import services.RegistroLibroResolucionesService;
  34. import services.RegistroLibroResolucionesServiceException;
  35. import services.RegistroService;
  36. import services.BDOrganizacion.PlatinoBDOrganizacionServiceImpl;
  37. import services.platino.PlatinoGestorDocumentalService;
  38. import services.responses.PortafirmaCrearSolicitudResponse;
  39. import tags.ComboItem;
  40. import utils.AedUtils;
  41. import utils.ResolucionUtils;
  42. import validation.CustomValidation;
  43. import config.InjectorConfig;
  44. import controllers.fap.AgenteController;
  45. import controllers.fap.ResolucionControllerFAP;
  46. import controllers.gen.EditarResolucionControllerGen;
  47. import emails.Mails;
  48. import enumerado.fap.gen.EstadoResolucionEnum;
  49. import enumerado.fap.gen.EstadoResolucionPublicacionEnum;
  50. import es.gobcan.aciisi.portafirma.ws.dominio.ObtenerEstadoSolicitudResponseType;
  51. import es.gobcan.platino.servicios.organizacion.DBOrganizacionException_Exception;
  52. @InjectSupport
  53. public class EditarResolucionController extends EditarResolucionControllerGen {
  54. @Util
  55. private static ResolucionBase getResolucionObject (Long idResolucionFAP) throws Throwable {
  56. return ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getResolucionObject", idResolucionFAP);
  57. }
  58. public static void index(String accion, Long idResolucionFAP) {
  59. if (accion == null)
  60. accion = getAccion();
  61. if (!permiso(accion)) {
  62. Messages.fatal("No tiene permisos suficientes para realizar esta acción");
  63. renderTemplate("fap/EditarResolucion/EditarResolucion.html");
  64. }
  65. ResolucionFAP resolucionFAP = null;
  66. if ("crear".equals(accion)) {
  67. resolucionFAP = EditarResolucionController.getResolucionFAP();
  68. if (properties.FapProperties.getBoolean("fap.entidades.guardar.antes")) {
  69. resolucionFAP.save();
  70. idResolucionFAP = resolucionFAP.id;
  71. accion = "editar";
  72. }
  73. } else if (!"borrado".equals(accion))
  74. resolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  75. //play.mvc.Router.ActionDefinition ad = play.mvc.Router.reverse("EditarResolucion.index");
  76. //ad.absolute();
  77. //System.out.println("url = " + ad.toString());
  78. log.info("Visitando página: " + "gen/EditarResolucion/EditarResolucion.html" + ", usuario: " + AgenteController.getAgente().name + " Resolución: " + idResolucionFAP);
  79. renderTemplate("fap/EditarResolucion/EditarResolucion.html", accion, idResolucionFAP, resolucionFAP);
  80. }
  81. /**
  82. * Expedientes que se muestran en la tabla para poder seleccionar
  83. */
  84. public static void tablatablaExpedientes(Long idResolucionFAP) {
  85. java.util.List<SolicitudGenerica> rows = new ArrayList<SolicitudGenerica>();
  86. // Obtenemos el objeto "ResolucionBase"
  87. ResolucionBase resolBase = null;
  88. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  89. try {
  90. resolBase = getResolucionObject(idResolucionFAP);
  91. java.util.List<SolicitudGenerica> allrows = null;
  92. allrows = (List<SolicitudGenerica>) resolBase.getSolicitudesAResolver(idResolucionFAP);
  93. for (SolicitudGenerica solicitud : allrows) {
  94. Map<String, Object> vars = new HashMap<String, Object>();
  95. vars.put("solicitud", solicitud);
  96. if (secure.checkAcceso("solicitudes", "leer", ids, vars)) {
  97. rows.add(solicitud);
  98. }
  99. }
  100. List<SolicitudGenerica> rowsFiltered = rows; //Tabla sin permisos, no filtra
  101. tables.TableRenderResponse<SolicitudGenerica> response = new tables.TableRenderResponse<SolicitudGenerica>(rowsFiltered, false, false, false, "", "", "", getAccion(), ids);
  102. renderJSON(response.toJSON("id", "expedienteAed.idAed", "estadoValue", "estado", "estadoUsuario", "solicitante.id", "solicitante.nombreCompleto"));
  103. } catch (Throwable e) {
  104. play.Logger.error("No se ha podido obtener el objeto resolución: "+idResolucionFAP);
  105. }
  106. }
  107. /**
  108. * Expedientes (Unico) que se muestran en la tabla para poder seleccionar.
  109. */
  110. public static void tablatablaExpedientesUnico(Long idResolucionFAP) {
  111. java.util.List<SolicitudGenerica> rows = new ArrayList<SolicitudGenerica>();
  112. // Obtenemos el usuario conectado al sistema y el rol activo
  113. Agente usuario = AgenteController.getAgente();
  114. String rolActivo = usuario.getRolActivo();
  115. // Obtenemos el objeto "ResolucionBase"
  116. ResolucionBase resolBase = null;
  117. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  118. try {
  119. resolBase = getResolucionObject(idResolucionFAP);
  120. java.util.List<SolicitudGenerica> allrows = null;
  121. // Listamos los expedientes segun la provincia a la que esta asignado el gestor o todos
  122. if(rolActivo.equals("gestorTenerife")){
  123. allrows = (List<SolicitudGenerica>) resolBase.getSolicitudesAResolverSC(ids.get("idResolucionFAP"));
  124. } else if(rolActivo.equals("gestorLasPalmas")){
  125. allrows = (List<SolicitudGenerica>) resolBase.getSolicitudesAResolverLP(ids.get("idResolucionFAP"));
  126. }else {
  127. allrows = (List<SolicitudGenerica>) resolBase.getSolicitudesAResolver(ids.get("idResolucionFAP"));
  128. }
  129. for (SolicitudGenerica solicitud : allrows) {
  130. Map<String, Object> vars = new HashMap<String, Object>();
  131. vars.put("solicitud", solicitud);
  132. if (secure.checkAcceso("solicitudes", "leer", ids, vars)) {
  133. rows.add(solicitud);
  134. }
  135. }
  136. List<SolicitudGenerica> rowsFiltered = rows; //Tabla sin permisos, no filtra
  137. tables.TableRenderResponse<SolicitudGenerica> response = new tables.TableRenderResponse<SolicitudGenerica>(rowsFiltered, false, false, false, "", "", "", getAccion(), ids);
  138. renderJSON(response.toJSON("id", "expedienteAed.idAed", "estadoValue", "estado", "estadoUsuario", "solicitante.id", "solicitante.nombreCompleto"));
  139. } catch (Throwable e) {
  140. play.Logger.error("No se ha podido obtener el objeto resolución: "+ idResolucionFAP);
  141. }
  142. }
  143. @Util
  144. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  145. public static void prepararResolucion(Long idResolucionFAP, String btnPrepararResolucion) {
  146. if (ResolucionBase.isGeneradoDocumentoResolucion()) {
  147. checkAuthenticity();
  148. if (!permisoPrepararResolucion("editar")) {
  149. Messages.error("No tiene permisos suficientes para realizar la acción");
  150. }
  151. if (!Messages.hasErrors()) {
  152. ResolucionBase resolBase = null;
  153. try {
  154. resolBase = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getResolucionObject", idResolucionFAP);
  155. resolBase.prepararResolucion(idResolucionFAP);
  156. } catch (Throwable e1) {
  157. play.Logger.error("Error obteniendo tipo de resolución: " + e1.getMessage());
  158. }
  159. }
  160. if (!Messages.hasErrors()) {
  161. EditarResolucionController.prepararResolucionValidateRules();
  162. }
  163. if (!Messages.hasErrors()) {
  164. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  165. } else
  166. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  167. EditarResolucionController.prepararResolucionRender(idResolucionFAP);
  168. } else {
  169. ResolucionFAP resolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  170. if (resolucionFAP.registro.oficial.uri == null) {
  171. redirect("AportarDocumentoResolucionController.index", AportarDocumentoResolucionController.getAccion(), idResolucionFAP);
  172. } else {
  173. redirect("CambiarDocumentoResolucionController.index", CambiarDocumentoResolucionController.getAccion(), idResolucionFAP);
  174. }
  175. }
  176. }
  177. @Util
  178. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  179. public static void frmCrearResolucion(Long idResolucionFAP, String btnCrearResolucion) {
  180. checkAuthenticity();
  181. if (!permisoFrmCrearResolucion("editar")) {
  182. Messages.error("No tiene permisos suficientes para realizar la acción");
  183. }
  184. if (!Messages.hasErrors()) {
  185. ResolucionFAP resolucion = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  186. ResolucionBase resolBase = null;
  187. try {
  188. resolBase = getResolucionObject (idResolucionFAP);
  189. resolBase.prepararLineasResolucion(idResolucionFAP);
  190. } catch (Throwable e) {
  191. play.Logger.error("Error antes de obtener las líneas de resolución: " + e.getMessage());
  192. Messages.error("Error antes de obtener las líneas de resolución");
  193. }
  194. }
  195. if (!Messages.hasErrors()) {
  196. ResolucionFAP resolucion = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  197. ResolucionBase resolBase = null;
  198. try {
  199. resolBase = getResolucionObject (idResolucionFAP);
  200. resolBase.setLineasDeResolucion(idResolucionFAP);
  201. resolBase.avanzarFase_Borrador(resolucion);
  202. } catch (Throwable e) {
  203. play.Logger.error("Error obteniendo tipo de resolución: " + e.getMessage());
  204. Messages.error("Error obteniendo el tipo de resolución");
  205. }
  206. }
  207. if (!Messages.hasErrors()) {
  208. EditarResolucionController.frmCrearResolucionValidateRules();
  209. }
  210. if (!Messages.hasErrors()) {
  211. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  212. } else
  213. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  214. EditarResolucionController.frmCrearResolucionRender(idResolucionFAP);
  215. }
  216. /**
  217. *
  218. * @param id Identificador de la resolución actual (idResolucionFAP)
  219. * @param idsSeleccionados Identificador del expediente seleccionado para su resolución
  220. */
  221. public static void crearResolucion(Long id, List<Long> idsSeleccionados) {
  222. if (idsSeleccionados == null) {
  223. play.Logger.error("Se debe seleccionar un expediente");
  224. Messages.error("Se debe seleccionar un expediente");
  225. Messages.keep();
  226. } else if (idsSeleccionados.size() > 1) {
  227. play.Logger.error("Se debe seleccionar sólo un expediente");
  228. Messages.error("Se debe seleccionar sólo un expediente");
  229. Messages.keep();
  230. } else {
  231. ResolucionBase resolBase = null;
  232. try {
  233. resolBase = getResolucionObject(id);
  234. } catch (Throwable e) {
  235. new Exception ("No se ha podido obtener el objeto resolución", e);
  236. }
  237. resolBase.setLineasDeResolucion(id, idsSeleccionados);
  238. ResolucionFAP resolucion = EditarResolucionController.getResolucionFAP(id);
  239. resolBase.avanzarFase_Borrador(resolucion);
  240. }
  241. index("editar", id);
  242. }
  243. public static List<ComboItem> selectJefeServicio() {
  244. List<ComboItem> listaCombo = new ArrayList<ComboItem>();
  245. try {
  246. listaCombo = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getJefesServicio");
  247. } catch (Throwable e) {
  248. Messages.error("No se pudieron obtener los jefes de servicio");
  249. play.Logger.error("No se pudieron obtener los jefes de servicio"+e.getMessage());
  250. }
  251. return listaCombo;
  252. }
  253. public static List<ComboItem> selectPrioridadFirma() {
  254. List<ComboItem> listaPrioridades = new ArrayList<ComboItem>();
  255. try {
  256. listaPrioridades = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getPrioridadesFirma");
  257. } catch (Throwable e) {
  258. Messages.error("No se pudieron obtener las prioridades de la firma");
  259. play.Logger.error("No se pudieron obtener las prioridades posibles en la firma"+e.getMessage());
  260. }
  261. return listaPrioridades;
  262. }
  263. @Util
  264. public static void formSelectJefeServicio(Long idResolucionFAP, ResolucionFAP resolucionFAP, String enviarFirmaJSPortafirma) {
  265. checkAuthenticity();
  266. if (!permisoFormSelectJefeServicio("editar")) {
  267. Messages.error("No tiene permisos suficientes para realizar la acción");
  268. }
  269. ResolucionFAP dbResolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  270. ResolucionUtils.actualizarSolicitudesFirmaPortafirmaAntiguasResolucion(dbResolucionFAP);
  271. dbResolucionFAP.refresh();
  272. EditarResolucionController.formSelectJefeServicioBindReferences(resolucionFAP);
  273. Agente agenteActual = AgenteController.getAgente();
  274. EntityTransaction tx = JPA.em().getTransaction();
  275. tx.commit();
  276. if (!Messages.hasErrors()) {
  277. if (dbResolucionFAP.solicitudFirmaPortafirma.uriFuncionarioSolicitante == null) {
  278. resolucionFAP.solicitudFirmaPortafirma.idSolicitante = agenteActual.usuarioldap;
  279. EditarResolucionController.formSelectJefeServicioValidateCopy("editar", dbResolucionFAP, resolucionFAP);
  280. if (!Messages.hasErrors()) {
  281. if (properties.FapProperties.getBoolean("fap.platino.portafirma")) {
  282. PlatinoBDOrganizacionServiceImpl platinoDBOrgPort = InjectorConfig.getInjector().getInstance(PlatinoBDOrganizacionServiceImpl.class);
  283. try {
  284. tx.begin();
  285. dbResolucionFAP.solicitudFirmaPortafirma.uriFuncionarioSolicitante = platinoDBOrgPort.recuperarURIPersona(dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante);
  286. dbResolucionFAP.save();
  287. tx.commit();
  288. } catch (DBOrganizacionException_Exception e) {
  289. play.Logger.error("Error al obtener la uri del funcionario solicitante en la Base de Datos de Organización: " + e.getMessage());
  290. Messages.error("Error al obtener la uri del funcionario solicitante en la Base de Datos de Organización.");
  291. }
  292. if ((dbResolucionFAP.solicitudFirmaPortafirma.uriFuncionarioSolicitante == null) || (dbResolucionFAP.solicitudFirmaPortafirma.uriFuncionarioSolicitante.isEmpty()))
  293. Messages.error("El usuario "+dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante+" especificado no se encuentra en la Base de Datos de Organización.");
  294. }
  295. }
  296. }
  297. }
  298. if (!Messages.hasErrors()) {
  299. EditarResolucionController.formSelectJefeServicioValidateRules(dbResolucionFAP, resolucionFAP);
  300. try {
  301. PortafirmaFapService portafirmaService = InjectorConfig.getInjector().getInstance(PortafirmaFapService.class);
  302. PortafirmaCrearSolicitudResponse response = portafirmaService.crearSolicitudFirma(dbResolucionFAP);
  303. portafirmaService.entregarSolicitudFirma(dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante, response.getIdSolicitud(), response.getComentarios());
  304. tx.begin();
  305. if (dbResolucionFAP.solicitudFirmaPortafirma.agenteHaceSolicitud == null)
  306. dbResolucionFAP.solicitudFirmaPortafirma.agenteHaceSolicitud = new Agente();
  307. dbResolucionFAP.solicitudFirmaPortafirma.agenteHaceSolicitud = agenteActual;
  308. dbResolucionFAP.solicitudFirmaPortafirma.uriSolicitud = response.getIdSolicitud();
  309. dbResolucionFAP.solicitudFirmaPortafirma.solicitudEstadoComentario = response.getComentarios();
  310. dbResolucionFAP.save();
  311. tx.commit();
  312. } catch (PortafirmaFapServiceException e) {
  313. play.Logger.error("Error al crear la solicitud de firma: " + e);
  314. Messages.error("Error al crear la solicitud de firma");
  315. } catch (SOAPFaultException e) {
  316. play.Logger.error("Error al crear la solicitud de firma: " + e);
  317. Messages.error("Error al crear la solicitud de firma");
  318. }
  319. }
  320. if (!Messages.hasErrors()) {
  321. ResolucionBase resolBase = null;
  322. try {
  323. tx.begin();
  324. resolBase = getResolucionObject(dbResolucionFAP.id);
  325. resolBase.avanzarFase_Preparada_Portafirma(dbResolucionFAP);
  326. dbResolucionFAP.save();
  327. tx.commit();
  328. Messages.ok("Se ha enviado correctamente al portafirma la solicitud de la firma");
  329. } catch (Throwable e) {
  330. play.Logger.error("No se ha enviado correctamente al portafirma la solicitud de firma: "+e);
  331. Messages.error("No se ha enviado correctamente al portafirma la solicitud de firma. ");
  332. }
  333. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  334. } else
  335. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  336. EditarResolucionController.formSelectJefeServicioRender(idResolucionFAP);
  337. }
  338. @Util
  339. public static void formSelectJefeServicioValidateCopy(String accion, ResolucionFAP dbResolucionFAP, ResolucionFAP resolucionFAP) {
  340. EntityTransaction tx = JPA.em().getTransaction();
  341. CustomValidation.clearValidadas();
  342. CustomValidation.valid("resolucionFAP.solicitudFirmaPortafirma", resolucionFAP.solicitudFirmaPortafirma);
  343. CustomValidation.valid("resolucionFAP", resolucionFAP);
  344. CustomValidation.required("resolucionFAP.solicitudFirmaPortafirma.idDestinatario", resolucionFAP.solicitudFirmaPortafirma.idDestinatario);
  345. CustomValidation.validValueFromTable("resolucionFAP.solicitudFirmaPortafirma.idDestinatario", resolucionFAP.solicitudFirmaPortafirma.idDestinatario);
  346. dbResolucionFAP.solicitudFirmaPortafirma.idDestinatario = resolucionFAP.solicitudFirmaPortafirma.idDestinatario;
  347. CustomValidation.required("resolucionFAP.solicitudFirmaPortafirma.prioridad", resolucionFAP.solicitudFirmaPortafirma.prioridad);
  348. CustomValidation.validValueFromTable("resolucionFAP.solicitudFirmaPortafirma.prioridad", resolucionFAP.solicitudFirmaPortafirma.prioridad);
  349. dbResolucionFAP.solicitudFirmaPortafirma.prioridad = resolucionFAP.solicitudFirmaPortafirma.prioridad;
  350. CustomValidation.required("resolucionFAP.numero_folios", resolucionFAP.numero_folios);
  351. dbResolucionFAP.numero_folios = resolucionFAP.numero_folios;
  352. if (properties.FapProperties.getBoolean("fap.platino.portafirma")) {
  353. if (resolucionFAP.solicitudFirmaPortafirma.idSolicitante == null){
  354. Messages.error("El usuario no tiene asociado un identificador único en el ldap del gobierno.");
  355. play.Logger.error("El usuario no tiene asociado un identificador único en el ldap del gobierno.");
  356. } else
  357. dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante = resolucionFAP.solicitudFirmaPortafirma.idSolicitante;
  358. }
  359. else {
  360. dbResolucionFAP.solicitudFirmaPortafirma.idSolicitante = FapProperties.get("portafirma.usuario");
  361. }
  362. if (dbResolucionFAP.solicitudFirmaPortafirma.plazoMaximo != null) {
  363. DateTime today = new DateTime().withTimeAtStartOfDay();
  364. if (dbResolucionFAP.solicitudFirmaPortafirma.plazoMaximo.isBefore(today)) {
  365. play.Logger.error("La fecha tope de firma no puede ser anterior a hoy.");
  366. CustomValidation.error("La fecha tope de firma no puede ser anterior a hoy.","resolucionFAP.solicitudFirmaPortafirma.plazoMaximo", resolucionFAP.solicitudFirmaPortafirma.plazoMaximo);
  367. }
  368. int dias = 0;
  369. // Comprobar la fecha de tope de firma con el ResolucionBase
  370. try {
  371. dias = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getDiasLimiteFirma", dbResolucionFAP.id, false);
  372. //Si hay un plazo límite, se calcula si la fecha seleccionada está dentro del rango
  373. if (dias != -1) {
  374. //Es requerido sólo si existe la property y tiene valor
  375. CustomValidation.required("resolucionFAP.solicitudFirmaPortafirma.plazoMaximo", resolucionFAP.solicitudFirmaPortafirma.plazoMaximo);
  376. dbResolucionFAP.solicitudFirmaPortafirma.plazoMaximo = resolucionFAP.solicitudFirmaPortafirma.plazoMaximo;
  377. DateTime diaLimite = new DateTime();
  378. diaLimite = diaLimite.plusDays(dias);
  379. if (diaLimite.isBefore(dbResolucionFAP.solicitudFirmaPortafirma.plazoMaximo)) {
  380. play.Logger.error("La fecha tope de firma no puede ser posterior a "+diaLimite+".");
  381. CustomValidation.error("La fecha tope de firma no puede ser posterior a "+diaLimite+".", "resolucionFAP.solicitudFirmaPortafirma.plazoMaximo", resolucionFAP.solicitudFirmaPortafirma.plazoMaximo);
  382. }
  383. } else
  384. play.Logger.info("No hay fecha límite para la firma");
  385. } catch (Throwable e) {
  386. e.printStackTrace();
  387. play.Logger.error("No se ha podido calcular el límite de fecha para la firma."+e);
  388. CustomValidation.error("No se ha podido calcular el límite de fecha para la firma", "resolucionFAP.solicitudFirmaPortafirma.plazoMaximo", resolucionFAP.solicitudFirmaPortafirma.plazoMaximo);
  389. }
  390. }
  391. tx.begin();
  392. dbResolucionFAP.save();
  393. tx.commit();
  394. }
  395. @Util
  396. public static void firmaDirectorPortafirma(Long idResolucionFAP, String enviarFirmaDirectorPortafirma) {
  397. checkAuthenticity();
  398. if (!permisoFirmaDirectorPortafirma("editar")) {
  399. Messages.error("No tiene permisos suficientes para realizar la acción");
  400. }
  401. ResolucionFAP dbResolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  402. if (!Messages.hasErrors()) {
  403. }
  404. if (!Messages.hasErrors()) {
  405. EditarResolucionController.firmaDirectorPortafirmaValidateRules();
  406. }
  407. if (!Messages.hasErrors()) {
  408. ResolucionBase resolBase = null;
  409. try {
  410. resolBase = getResolucionObject(idResolucionFAP);
  411. } catch (Throwable e) {
  412. new Exception ("No se ha podido obtener el objeto resolución", e);
  413. }
  414. resolBase.avanzarFase_FirmadaJefeServicio(dbResolucionFAP);
  415. dbResolucionFAP.save();
  416. Messages.ok("Se ha enviado correctamente al portafirma la solicitud de la firma del Director");
  417. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  418. } else
  419. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  420. EditarResolucionController.firmaDirectorPortafirmaRender(idResolucionFAP);
  421. }
  422. @Util
  423. public static void firFirmarResolucionFrmFirmarJefeServicio(Long idResolucionFAP, String firma) {
  424. ResolucionFAP resolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  425. play.Logger.info("Metodo: firFirmarResolucionFrmFirmarJefeServicio");
  426. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  427. Map<String, Object> vars = new HashMap<String, Object>();
  428. if (secure.checkAcceso("editarFirma", "editar", ids, vars)) {
  429. if (resolucionFAP.registro.firmantes.todos == null || resolucionFAP.registro.firmantes.todos.size() == 0) {
  430. resolucionFAP.registro.firmantes.todos = resolucionFAP.calcularFirmantes();
  431. resolucionFAP.registro.firmantes.save();
  432. }
  433. FirmaUtils.firmar(resolucionFAP.registro.oficial, resolucionFAP.registro.firmantes.todos, firma, null);
  434. } else {
  435. //ERROR
  436. Messages.error("No tiene permisos suficientes para realizar la acción++");
  437. }
  438. if (!Messages.hasErrors()) {
  439. resolucionFAP.save();
  440. ResolucionBase resolBase = null;
  441. try {
  442. resolBase = getResolucionObject(idResolucionFAP);
  443. } catch (Throwable e) {
  444. new Exception ("No se ha podido obtener el objeto resolución", e);
  445. }
  446. resolBase.avanzarFase_Preparada_FirmaJefeServicio(resolucionFAP);
  447. }
  448. }
  449. @Util
  450. public static void frmComprobarFirmas(Long idResolucionFAP, String comprobarFirmado) {
  451. checkAuthenticity();
  452. if (!permisoFrmComprobarFirmas("editar")) {
  453. Messages.error("No tiene permisos suficientes para realizar la acción");
  454. }
  455. if (!Messages.hasErrors()) {
  456. ResolucionFAP dbResolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  457. ResolucionUtils.actualizarSolicitudesFirmaPortafirmaAntiguasResolucion(dbResolucionFAP);
  458. try {
  459. PortafirmaFapService portafirmaService = InjectorConfig.getInjector().getInstance(PortafirmaFapService.class);
  460. if (portafirmaService.comprobarSiSolicitudFirmada(dbResolucionFAP.solicitudFirmaPortafirma)) {
  461. ResolucionBase resolBase = null;
  462. try {
  463. resolBase = getResolucionObject(idResolucionFAP);
  464. } catch (Throwable e) {
  465. new Exception ("No se ha podido obtener el objeto resolución", e);
  466. }
  467. Messages.ok("La solicitud de firma asociada a la resolución se ha firmado y finalizado correctamente.");
  468. resolBase.avanzarFase_PendienteFirmarDirector(dbResolucionFAP);
  469. dbResolucionFAP.registro.fasesRegistro.firmada = true;
  470. // TODO: ¿SE DEBE ELIMINAR?
  471. //portafirmaService.eliminarSolicitudFirma(dbResolucionFAP.solicitudFirmaPortafirma);
  472. dbResolucionFAP.save();
  473. } else {
  474. play.Logger.warn("La resolución ["+dbResolucionFAP.id+"] no ha sido firmada y finalizada ");
  475. Messages.warning("El documento de resolución no ha sido firmado y finalizado");
  476. String estado = portafirmaService.obtenerEstadoFirma(dbResolucionFAP.solicitudFirmaPortafirma);
  477. if (estado == null) {
  478. throw new PortafirmaFapServiceException("No se pudo obtener el estado de la firma: Response null. ");
  479. }
  480. play.Logger.info("El estado de la solicitud en el portafirma es: "+estado);
  481. Messages.warning("El estado de la solicitud en el portafirma es: "+estado);
  482. if (estado.equalsIgnoreCase("Rechazada")) {
  483. //Volver a estado anterior
  484. ResolucionBase resolBase = null;
  485. try {
  486. resolBase = getResolucionObject(idResolucionFAP);
  487. } catch (Throwable e) {
  488. new Exception ("No se ha podido obtener el objeto resolución", e);
  489. }
  490. resolBase.retrocederFase_Modificacion(dbResolucionFAP);
  491. //portafirmaService.eliminarSolicitudFirma(dbResolucionFAP.solicitudFirmaPortafirma);
  492. dbResolucionFAP.save();
  493. } else {
  494. play.Logger.warn("La Solicitud está en el estado: " + estado);
  495. //TODO: Recuperar comentario del response (que ahora no existe)
  496. //play.Logger.warn("La Solicitud está en el estado: "+estado+ ": "+response.getComentario());
  497. Messages.warning("La Solicitud está en el estado: " + estado);
  498. }
  499. }
  500. } catch (PortafirmaFapServiceException e) {
  501. play.Logger.error("Error al comprobar si ya se ha firmado la resolución en el portafirma: " + e);
  502. Messages.error("Error al comprobar si ya se ha firmado la resolución en el portafirma.");
  503. } catch (SOAPFaultException e) {
  504. play.Logger.error("Error al comprobar si ya se ha firmado la resolución en el portafirma: " + e);
  505. Messages.error("Error al comprobar si ya se ha firmado la resolución en el portafirma.");
  506. }
  507. }
  508. if (!Messages.hasErrors()) {
  509. EditarResolucionController.frmComprobarFirmasValidateRules();
  510. }
  511. if (!Messages.hasErrors()) {
  512. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  513. } else
  514. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  515. EditarResolucionController.frmComprobarFirmasRender(idResolucionFAP);
  516. }
  517. @Util
  518. public static void enviarRegistrarResolucion(Long idResolucionFAP, ResolucionFAP resolucionFAP, String btnRegistrarResolucion) {
  519. checkAuthenticity();
  520. if (!permisoEnviarRegistrarResolucion("editar")) {
  521. Messages.error("No tiene permisos suficientes para realizar la acción");
  522. }
  523. ResolucionFAP dbResolucionFAP = EditarResolucionController.getResolucionFAP(idResolucionFAP);
  524. RegistroResolucion datosRegistro = null;
  525. EntityTransaction tx = JPA.em().getTransaction();
  526. tx.commit();
  527. /// 1. Crear la resolución
  528. if (!Messages.hasErrors()) {
  529. if ((dbResolucionFAP.registro.fasesRegistro.firmada) && (!dbResolucionFAP.registro.fasesRegistro.registro)) {
  530. tx.begin();
  531. try {
  532. RegistroLibroResolucionesService registroLibroResolucionesService = InjectorConfig.getInjector().getInstance(RegistroLibroResolucionesService.class);
  533. datosRegistro = registroLibroResolucionesService.crearResolucion(dbResolucionFAP);
  534. dbResolucionFAP.codigoResolucion = Integer.toString(datosRegistro.numero);
  535. dbResolucionFAP.fechaRegistroResolucion = datosRegistro.fecha;
  536. dbResolucionFAP.folio_inicio = datosRegistro.primerFolio;
  537. dbResolucionFAP.folio_final = datosRegistro.ultimoFolio;
  538. dbResolucionFAP.numero = datosRegistro.numero;
  539. dbResolucionFAP.registro.fasesRegistro.registro = true;
  540. dbResolucionFAP.save();
  541. } catch (RegistroLibroResolucionesServiceException e) {
  542. play.Logger.error("No se puede crear el registro de resolución. "+e);
  543. Messages.error("No se puede crear el registro de resolución");
  544. }
  545. tx.commit();
  546. }
  547. }
  548. if (!Messages.hasErrors()) {
  549. EditarResolucionController.enviarRegistrarResolucionValidateRules();
  550. }
  551. GestorDocumentalService gestorDocumentalService = InjectorConfig.getInjector().getInstance(GestorDocumentalService.class);
  552. /// 2. Crear el expediente de la convocatoria en el AED por si no existe
  553. if (!Messages.hasErrors()) {
  554. if ((dbResolucionFAP.registro.fasesRegistro.registro) && (!dbResolucionFAP.registro.fasesRegistro.expedienteAed)) {
  555. // TODO: Crear expediente en el AED
  556. tx.begin();
  557. try {
  558. gestorDocumentalService.crearExpedienteConvocatoria();
  559. dbResolucionFAP.registro.fasesRegistro.expedienteAed = true;
  560. dbResolucionFAP.save();
  561. } catch (GestorDocumentalServiceException e) {
  562. play.Logger.error("Error. No se ha podido crear el expediente de la resolución el el AED.", e);
  563. Messages.error("Error. No se ha podido crear el expediente de la resolución el el AED.");
  564. }
  565. tx.commit();
  566. }
  567. }
  568. // 3. Clasificar el documento de resolución y de consultas
  569. if (!Messages.hasErrors()) {
  570. if ((dbResolucionFAP.registro.fasesRegistro.expedienteAed) && (!dbResolucionFAP.registro.fasesRegistro.clasificarAed)) {
  571. tx.begin();
  572. try {
  573. gestorDocumentalService.clasificarDocumentoResolucion(dbResolucionFAP);
  574. gestorDocumentalService.clasificarDocumentosConsulta(dbResolucionFAP);
  575. dbResolucionFAP.registro.fasesRegistro.clasificarAed = true;
  576. dbResolucionFAP.save();
  577. } catch (GestorDocumentalServiceException e) {
  578. play.Logger.error("Error al clasificar el documento de la resolución.", e);
  579. Messages.error("Error al clasificar el documento de la resolución.");
  580. }
  581. tx.commit();
  582. }
  583. }
  584. //Agregar Firma Platino al documento de resolucion en el AED ACIISI
  585. if (!Messages.hasErrors()) {
  586. PlatinoGestorDocumentalService platinoaed = InjectorConfig.getInjector().getInstance(PlatinoGestorDocumentalService.class);
  587. tx.begin();
  588. es.gobcan.platino.servicios.sgrde.Documento documentoPlatino = platinoaed.descargarFirmado(dbResolucionFAP.registro.oficial.uri);
  589. if (documentoPlatino != null){
  590. try {
  591. AedUtils.docPlatinotoDocumentoFirmantes(dbResolucionFAP.registro.oficial, documentoPlatino);
  592. gestorDocumentalService.agregarFirma(dbResolucionFAP.registro.oficial,
  593. new Firma(documentoPlatino.getMetaInformacion().getFirmasElectronicas().getFirma(), dbResolucionFAP.registro.oficial.firmantes.todos));
  594. } catch (GestorDocumentalServiceException e) {
  595. play.Logger.error("Error. No se ha podido agregar la firma al documento de resolución en el AED.", e);
  596. }
  597. }
  598. tx.commit();
  599. }
  600. if (!Messages.hasErrors()) {
  601. ResolucionBase resolBase = null;
  602. tx.begin();
  603. try {
  604. resolBase = getResolucionObject(idResolucionFAP);
  605. } catch (Throwable e) {
  606. new Exception ("No se ha podido obtener el objeto resolución", e);
  607. }
  608. resolBase.avanzarFase_Firmada(dbResolucionFAP);
  609. // Enviar correo al Jefe de Servicio correspondiente
  610. try {
  611. Agente agente = dbResolucionFAP.solicitudFirmaPortafirma.agenteHaceSolicitud;
  612. ResolucionFAP resolucionfap = dbResolucionFAP;
  613. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("resolucionfap", resolucionfap);
  614. play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.addVariable("agente", agente);
  615. Mails.enviar("registrarResolucion", resolucionfap, agente);
  616. } catch (Exception e) {
  617. play.Logger.fatal("No se ha podido enviar el correo al Jefe de Servicio: "+dbResolucionFAP.solicitudFirmaPortafirma.idDestinatario+" de la resolución: "+dbResolucionFAP.id);
  618. Messages.error("No se ha podido enviar el correo al Jefe de Servicio: "+dbResolucionFAP.solicitudFirmaPortafirma.idDestinatario+" de la resolución: "+dbResolucionFAP.id);
  619. }
  620. tx.commit();
  621. }
  622. tx.begin();
  623. if (!Messages.hasErrors()) {
  624. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito");
  625. } else
  626. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  627. EditarResolucionController.enviarRegistrarResolucionRender(idResolucionFAP);
  628. }
  629. /**
  630. *
  631. * @param id Identificador de la resolución actual (idResolucionFAP)
  632. * @param idsSeleccionados Identificadores de los expedientes seleccionados para su resolución
  633. */
  634. public static void seleccionar(Long id, List<Long> idsSeleccionados) {
  635. if (idsSeleccionados == null) {
  636. play.Logger.error("Se debe seleccionar al menos un expediente");
  637. Messages.error("Se debe seleccionar al menos un expediente");
  638. Messages.keep();
  639. } else {
  640. ResolucionBase resolBase = null;
  641. try {
  642. resolBase = getResolucionObject(id);
  643. } catch (Throwable e) {
  644. new Exception ("No se ha podido obtener el objeto resolución", e);
  645. }
  646. resolBase.setLineasDeResolucion(id, idsSeleccionados);
  647. ResolucionFAP resolucion = EditarResolucionController.getResolucionFAP(id);
  648. resolBase.avanzarFase_Borrador(resolucion);
  649. }
  650. index("editar", id);
  651. }
  652. @Util
  653. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  654. public static void copiaExpediente(Long idResolucionFAP, String btnCopiaExpediente) {
  655. checkAuthenticity();
  656. if (!permisoCopiaExpediente("editar")) {
  657. Messages.error("No tiene permisos suficientes para realizar la acción");
  658. }
  659. if (!Messages.hasErrors()) {
  660. EditarResolucionController.copiaExpedienteValidateRules();
  661. }
  662. ResolucionBase resolBase = null;
  663. if (!Messages.hasErrors()) {
  664. try {
  665. resolBase = ResolucionControllerFAP.invoke(ResolucionControllerFAP.class, "getResolucionObject", idResolucionFAP);
  666. } catch (Throwable e) {
  667. new Exception ("No se ha podido obtener el objeto resolución", e);
  668. }
  669. }
  670. if (!Messages.hasErrors()) {
  671. resolBase.copiarEnExpedientes(idResolucionFAP);
  672. //resolBase.resolucion.estadoPublicacion = EstadoResolucionPublicacionEnum.publicada.name();
  673. resolBase.resolucion.save();
  674. }
  675. if (!Messages.hasErrors()) {
  676. log.info("Acción Editar de página: " + "gen/PaginaPublicarResolucion/PaginaPublicarResolucion.html" + " , intentada con éxito");
  677. } else
  678. log.info("Acción Editar de página: " + "gen/PaginaPublicarResolucion/PaginaPublicarResolucion.html" + " , intentada sin éxito (Problemas de Validación)");
  679. EditarResolucionController.copiaExpedienteRender(idResolucionFAP);
  680. }
  681. public static void tablalineasResolucion(Long idResolucionFAP) {
  682. boolean flag = true;
  683. java.util.List<LineaResolucionFAP> rows = LineaResolucionFAP.find("select lineaResolucionFAP from ResolucionFAP resolucionFAP join resolucionFAP.lineasResolucion lineaResolucionFAP where resolucionFAP.id=?", idResolucionFAP).fetch();
  684. Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
  685. List<LineaResolucionFAP> rowsFiltered = rows; //Tabla sin permisos, no filtra
  686. tables.TableRenderResponse<LineaResolucionFAP> response = new tables.TableRenderResponse<LineaResolucionFAP>(rowsFiltered, false, false, false, "", "", "", getAccion(), ids);
  687. for (LineaResolucionFAP row:rows) {
  688. if (row.registro == null) {
  689. row.registro = new Registro();
  690. row.save();
  691. }
  692. if ((row.registro.oficial.uri == null) || (row.registro.fasesRegistro.firmada == null) || (row.registro.fasesRegistro.firmada == false)){
  693. flag = false;
  694. break;
  695. }
  696. }
  697. if (!flag) {
  698. renderJSON(response.toJSON("id", "solicitud.expedienteAed.idAed", "solicitud.estado", "solicitud.solicitante.numeroId", "solicitud.solicitante.nombreCompleto", "estado"));
  699. }
  700. else {
  701. renderJSON(response.toJSON("id", "solicitud.expedienteAed.idAed", "solicitud.estado", "solicitud.solicitante.numeroId", "solicitud.solicitante.nombreCompleto", "estado", "registro.oficial.enlaceDescargaFirmado", "registro.justificante.enlaceDescarga"));
  702. }
  703. }
  704. @Util
  705. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  706. public static void volverExpedientes(Long idResolucionFAP, String btnVolverExpedientes) {
  707. checkAuthenticity();
  708. if (!permisoVolverExpedientes("editar")) {
  709. Messages.error("No tiene permisos suficientes para realizar la acción");
  710. }
  711. if (!Messages.hasErrors()) {
  712. }
  713. if (!Messages.hasErrors()) {
  714. EditarResolucionController.volverExpedientesValidateRules();
  715. }
  716. Agente logAgente = AgenteController.getAgente();
  717. if (!Messages.hasErrors()) {
  718. // Obtenemos la resolucion que estamos editando
  719. ResolucionFAP resolucionFAP = getResolucionFAP(idResolucionFAP);
  720. // Antes de volver cambiamos el estado de la resolucion a borrador
  721. resolucionFAP.estado = "borrador";
  722. // Borramos las lineas de resolucion y guardamos la resolucion en la BBDD
  723. resolucionFAP.lineasResolucion.clear();
  724. resolucionFAP.save();
  725. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada con éxito " + " Agente: " + logAgente);
  726. } else
  727. log.info("Acción Editar de página: " + "gen/EditarResolucion/EditarResolucion.html" + " , intentada sin éxito (Problemas de Validación)" + " Agente: " + logAgente);
  728. EditarResolucionController.volverExpedientesRender(idResolucionFAP);
  729. }
  730. }