PageRenderTime 63ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/fap/app/controllers/AportacionPresentarController.java

https://github.com/FAP-Team/Fap-Module
Java | 376 lines | 318 code | 39 blank | 19 comment | 43 complexity | 4992be069fdf9f9c694e2cbb026ade61 MD5 | raw file
  1. package controllers;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.text.DateFormat;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.List;
  9. import javax.inject.Inject;
  10. import org.joda.time.DateTime;
  11. import messages.Messages;
  12. import models.Agente;
  13. import models.Aportacion;
  14. import models.Documento;
  15. import models.Firma;
  16. import models.Firmante;
  17. import models.Firmantes;
  18. import models.JustificanteRegistro;
  19. import models.Registro;
  20. import models.SolicitudGenerica;
  21. import models.TableKeyValue;
  22. import platino.FirmaUtils;
  23. import platino.InfoCert;
  24. import play.mvc.Util;
  25. import properties.FapProperties;
  26. import services.FirmaService;
  27. import services.FirmaServiceException;
  28. import services.GestorDocumentalService;
  29. import services.GestorDocumentalServiceException;
  30. import services.RegistroServiceException;
  31. import services.RegistroService;
  32. import sun.util.logging.resources.logging;
  33. import tramitacion.TramiteBase;
  34. import validation.CustomValidation;
  35. import controllers.fap.AgenteController;
  36. import controllers.fap.AportacionFapController;
  37. import controllers.fap.FirmaController;
  38. import controllers.fap.PresentacionFapController;
  39. import controllers.gen.AportacionPresentarControllerGen;
  40. import emails.Mails;
  41. public class AportacionPresentarController extends AportacionPresentarControllerGen {
  42. @Inject
  43. static FirmaService firmaService;
  44. @Inject
  45. static RegistroService registroService;
  46. @Inject
  47. static GestorDocumentalService gestorDocumentalService;
  48. public static void index(String accion, Long idSolicitud) {
  49. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  50. Aportacion aportacion = solicitud.aportaciones.actual;
  51. if (!aportacion.registro.fasesRegistro.borrador) {
  52. // Si la aportación no esta preparada, vuelve a la página para subir
  53. // documentos
  54. Messages.warning("Su aportación de documentación no está preparada para el registro. Pulse el botón 'Registrar Aportacion'");
  55. Messages.keep();
  56. redirect("AportacionController.index", accion, idSolicitud);
  57. } else {
  58. renderTemplate("fap/Aportacion/AportacionPresentar.html", accion, idSolicitud, solicitud);
  59. }
  60. }
  61. public static void modificarBorrador(Long idSolicitud) {
  62. checkAuthenticity();
  63. if (permisoModificarBorrador("editar") || permisoModificarBorrador("crear")) {
  64. try {
  65. //Reinicia el estado de la aportación
  66. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  67. Aportacion aportacion = solicitud.aportaciones.actual;
  68. aportacion.estado = null;
  69. aportacion.save();
  70. TramiteBase tramite = AportacionFapController.invoke("getTramiteObject", idSolicitud);
  71. tramite.deshacer();
  72. Messages.ok("Ahora puede modificar los datos de la solicitud de aportación.");
  73. } catch (Throwable e) {
  74. Messages.error("No se ha podido deshacer la Aportación.");
  75. play.Logger.info("No se ha podido deshacer la aportación de la solicitud: "+e.getMessage());
  76. }
  77. } else {
  78. Messages.fatal("No tiene permisos suficientes para realizar esta acción");
  79. Messages.keep();
  80. }
  81. modificarBorradorRender(idSolicitud);
  82. }
  83. @Util
  84. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  85. public static void formFirmaFH(Long idSolicitud, String firma, String firmarRegistrarFH) {
  86. checkAuthenticity();
  87. if (!permisoFormFirmaFH("editar")) {
  88. Messages.error("No tiene permisos suficientes para realizar la acción");
  89. }
  90. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  91. Aportacion aportacion = solicitud.aportaciones.actual;
  92. if (!aportacion.registro.fasesRegistro.borrador) {
  93. Messages.error("La solicitud no está preparada para registrar");
  94. }
  95. if (!Messages.hasErrors()) {
  96. try {
  97. AportacionFapController.invoke("comprobarFechaLimiteAportacion", idSolicitud);
  98. } catch (Throwable e1) {
  99. log.error("Hubo un problema al invocar los métodos comprobarFechaLimiteAportación: "+e1.getMessage());
  100. Messages.error("Error al validar las comprobaciones de la Fecha Límite de Aportación");
  101. }
  102. }
  103. if (!Messages.hasErrors()) {
  104. try {
  105. AportacionFapController.invoke("beforeFirma", idSolicitud);
  106. } catch (Throwable e1) {
  107. log.error("Hubo un problema al invocar los métodos beforeFirma: "+e1.getMessage());
  108. Messages.error("Error al validar elementos previos a la firma");
  109. }
  110. }
  111. if (!Messages.hasErrors()) {
  112. SolicitudGenerica dbSolicitud = SolicitudPresentarFAPController.getSolicitudGenerica(idSolicitud);
  113. try {
  114. TramiteBase tramite = AportacionFapController.invoke("getTramiteObject", idSolicitud);
  115. AportacionPresentarController.firmarRegistrarFHFormFirmaFH(idSolicitud, firma);
  116. if (!Messages.hasErrors()) {
  117. try {
  118. AportacionFapController.invoke("afterFirma", idSolicitud);
  119. } catch (Throwable e1) {
  120. log.error("Hubo un problema al invocar los métodos afterFirma: "+e1.getMessage());
  121. Messages.error("Error al validar elementos posteriores a la firma");
  122. }
  123. }
  124. if (!Messages.hasErrors()) {
  125. try {
  126. AportacionFapController.invoke("beforeRegistro", idSolicitud);
  127. } catch (Throwable e1) {
  128. log.error("Hubo un problema al invocar los métodos beforeRegistro: "+e1.getMessage());
  129. Messages.error("Error al validar elementos previos al registro");
  130. }
  131. }
  132. if (!Messages.hasErrors()) {
  133. try {
  134. tramite.registrar();
  135. if (aportacion.registro.fasesRegistro.clasificarAed){
  136. aportacion.estado = "finalizada";
  137. aportacion.save();
  138. } else{
  139. play.Logger.error("No se registro la aportacion correctamente por lo que no se cambiara el estado de la misma.");
  140. Messages.error("Error al intentar sólo registrar.");
  141. }
  142. if (!Messages.hasErrors()) {
  143. try {
  144. AportacionFapController.invoke("afterRegistro", idSolicitud);
  145. } catch (Throwable e1) {
  146. log.error("Hubo un problema al invocar los métodos afterRegistro: "+e1.getMessage());
  147. Messages.error("Error al validar elementos posteriores al registro");
  148. }
  149. }
  150. } catch (Exception e) {
  151. log.error("Hubo un error al registrar la solicitud: "+ e.getMessage());
  152. Messages.error("No se pudo registrar la solicitud");
  153. }
  154. }
  155. } catch (Throwable e1) {
  156. log.error("Hubo un problema al invocar el metodo que devuelve la clase TramiteBase en la firma: "+e1.getMessage());
  157. Messages.error("Error al intentar firmar antes de registrar");
  158. }
  159. }
  160. if (!Messages.hasErrors()) {
  161. aportacion.estado = "finalizada";
  162. aportacion.save();
  163. Messages.ok("Su solicitud de aportación de documentación se registró correctamente");
  164. }
  165. presentarRender(idSolicitud);
  166. }
  167. @Util
  168. public static void firmarRegistrarFHFormFirmaFH(Long idSolicitud, String firma) {
  169. SolicitudGenerica solicitud = AportacionController.getSolicitudGenerica(idSolicitud);
  170. play.Logger.info("Metodo: firmarRegistrarFHFormFirmaFH");
  171. Agente agente = AgenteController.getAgente();
  172. if (agente.getFuncionario()){
  173. List<Firmante> firmantes = new ArrayList<Firmante>();
  174. firmantes.add(new Firmante(agente));
  175. FirmaUtils.firmar(solicitud.aportaciones.actual.registro.oficial, firmantes, firma, null);
  176. } else {
  177. //ERROR
  178. Messages.error("No tiene permisos suficientes para realizar la acción");
  179. }
  180. if (!Messages.hasErrors()) {
  181. solicitud.aportaciones.actual.estado = "firmada";
  182. solicitud.aportaciones.actual.registro.fasesRegistro.firmada = true;
  183. solicitud.save();
  184. }
  185. }
  186. /**
  187. * Firma y registra la solicitud de aportación de documentación
  188. *
  189. * @param idSolicitud
  190. * @param firma
  191. */
  192. public static void presentar(Long idSolicitud, String firma) {
  193. checkAuthenticity();
  194. if (permisoPresentar("editar") || permisoPresentar("crear")) {
  195. SolicitudGenerica solicitud = getSolicitudGenerica(idSolicitud);
  196. Aportacion aportacion = solicitud.aportaciones.actual;
  197. if (!aportacion.registro.fasesRegistro.borrador) {
  198. Messages.error("La solicitud no está preparada para registrar");
  199. }
  200. if (!Messages.hasErrors()) {
  201. try {
  202. AportacionFapController.invoke("comprobarFechaLimiteAportacion", idSolicitud);
  203. } catch (Throwable e1) {
  204. log.error("Hubo un problema al invocar los métodos comprobarFechaLimiteAportación: "+e1.getMessage());
  205. Messages.error("Error al validar las comprobaciones de la Fecha Límite de Aportación");
  206. }
  207. }
  208. if (!Messages.hasErrors()) {
  209. try {
  210. AportacionFapController.invoke("beforeFirma", idSolicitud);
  211. } catch (Throwable e1) {
  212. log.error("Hubo un problema al invocar los métodos beforeFirma: "+e1.getMessage());
  213. Messages.error("Error al validar elementos previos a la firma");
  214. }
  215. }
  216. if (!Messages.hasErrors()) {
  217. SolicitudGenerica dbSolicitud = SolicitudPresentarFAPController.getSolicitudGenerica(idSolicitud);
  218. try {
  219. TramiteBase tramite = AportacionFapController.invoke("getTramiteObject", idSolicitud);
  220. // Llamará a la implementación de la última clase que extienda de TramiteBase
  221. tramite.firmar(firma);
  222. if (aportacion.registro.fasesRegistro.firmada){
  223. aportacion.estado = "firmada";
  224. aportacion.save();
  225. }
  226. if (!Messages.hasErrors()) {
  227. try {
  228. AportacionFapController.invoke("afterFirma", idSolicitud);
  229. } catch (Throwable e1) {
  230. log.error("Hubo un problema al invocar los métodos afterFirma: "+e1.getMessage());
  231. Messages.error("Error al validar elementos posteriores a la firma");
  232. }
  233. }
  234. if (!Messages.hasErrors()) {
  235. try {
  236. AportacionFapController.invoke("beforeRegistro", idSolicitud);
  237. } catch (Throwable e1) {
  238. log.error("Hubo un problema al invocar los métodos beforeRegistro: "+e1.getMessage());
  239. Messages.error("Error al validar elementos previos al registro");
  240. }
  241. }
  242. if (!Messages.hasErrors()) {
  243. try {
  244. tramite.registrar();
  245. if (aportacion.registro.fasesRegistro.clasificarAed){
  246. aportacion.estado = "finalizada";
  247. aportacion.save();
  248. } else{
  249. play.Logger.error("No se registro la aportacion correctamente por lo que no se cambiara el estado de la misma.");
  250. Messages.error("Error al intentar sólo registrar.");
  251. }
  252. if (!Messages.hasErrors()) {
  253. try {
  254. AportacionFapController.invoke("afterRegistro", idSolicitud);
  255. } catch (Throwable e1) {
  256. log.error("Hubo un problema al invocar los métodos afterRegistro: "+e1.getMessage());
  257. Messages.error("Error al validar elementos posteriores al registro");
  258. }
  259. }
  260. } catch (Exception e) {
  261. log.error("Hubo un error al registrar la solicitud: "+ e.getMessage());
  262. Messages.error("No se pudo registrar la solicitud");
  263. }
  264. }
  265. } catch (Throwable e1) {
  266. log.error("Hubo un problema al invocar el metodo que devuelve la clase TramiteBase en la firma: "+e1.getMessage());
  267. Messages.error("Error al intentar firmar antes de registrar");
  268. }
  269. }
  270. if (!Messages.hasErrors()) {
  271. aportacion.estado = "finalizada";
  272. aportacion.save();
  273. Messages.ok("Su solicitud de aportación de documentación se registró correctamente");
  274. }
  275. } else {
  276. Messages.fatal("No tiene permisos suficientes para realizar esta acción");
  277. }
  278. presentarRender(idSolicitud);
  279. }
  280. /**
  281. * Redireccionamos a la página de documentos aportados, ya que por defecto
  282. * redireccionaba a la página de recibos
  283. *
  284. * @param idSolicitud
  285. */
  286. @Util
  287. public static void presentarRender(Long idSolicitud) {
  288. if (!Messages.hasMessages()) {
  289. Messages.ok("Página guardada correctamente");
  290. }
  291. Messages.keep();
  292. if (Messages.hasErrors()) {
  293. redirect("AportacionPresentarController.index", "editar", idSolicitud);
  294. } else {
  295. redirect("AportacionRecibosController.index", "editar", idSolicitud);
  296. }
  297. }
  298. @Util
  299. // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  300. public static void formHabilitarFH(Long idSolicitud, String btnHabilitarFH) {
  301. checkAuthenticity();
  302. if (!permisoFormHabilitarFH("editar")) {
  303. Messages.error("No tiene permisos suficientes para realizar la acción");
  304. }
  305. SolicitudGenerica dbSolicitud = AportacionPresentarController.getSolicitudGenerica(idSolicitud);
  306. if (!Messages.hasErrors()) {
  307. try {
  308. TramiteBase tramite = PresentacionFapController.invoke(PresentacionFapController.class, "getTramiteObject", idSolicitud);
  309. boolean encontrado = false;
  310. for (Documento doc: tramite.getDocumentos()){
  311. if (doc.tipo.equals(FapProperties.get("fap.firmaYRegistro.funcionarioHabilitado.tipoDocumento"))){
  312. encontrado = true;
  313. break;
  314. }
  315. }
  316. if (!encontrado){
  317. log.error("El documento que autoriza la firma de un funcionario habilitado no ha sido subido o su tipo no es correcto. Uri del tipo correcto: "+FapProperties.get("fap.firmaYRegistro.funcionarioHabilitado.tipoDocumento"));
  318. Messages.error("El documento que autoriza la firma de un funcionario habilitado no ha sido subido o su tipo no es correcto.");
  319. Messages.error("Asegurese de haber subido el documento pertinente con tipo: "+TableKeyValue.getValue("tiposDocumentos", FapProperties.get("fap.firmaYRegistro.funcionarioHabilitado.tipoDocumento")));
  320. }
  321. } catch (Throwable e) {
  322. log.error("Hubo un problema al intentar verificar la presencia del documento de autorizacion funcionario habilitado: "+e.getMessage());
  323. Messages.error("No se pudo habilitar la firma de un Funcionario");
  324. }
  325. }
  326. if (!Messages.hasErrors()) {
  327. AportacionPresentarController.formHabilitarFHValidateRules();
  328. }
  329. if (!Messages.hasErrors()) {
  330. dbSolicitud.aportaciones.actual.habilitaFuncionario=true;
  331. dbSolicitud.save();
  332. log.info("Acción Editar de página: " + "gen/AportacionPresentar/AportacionPresentar.html" + " , intentada con éxito");
  333. } else
  334. log.info("Acción Editar de página: " + "gen/AportacionPresentar/AportacionPresentar.html" + " , intentada sin éxito (Problemas de Validación)");
  335. AportacionPresentarController.formHabilitarFHRender(idSolicitud);
  336. }
  337. }