@Util
  public static void botonSimpleForm(Long idSolicitud, String firma) {
    // Realizamos la creación del documento y lo subimos al AED
    Solicitud solicitud = getSolicitud(idSolicitud);

    if ((solicitud.registro.oficial == null) || (solicitud.registro.oficial.uri == null)) {
      try { // Genera el documento oficial
        play.Logger.info("Debemos crear el documento y subirlo al AED");
        File oficial =
            new Report("reports/solicitud_simple.html")
                .header("reports/header.html")
                .registroSize()
                .renderTmpFile(solicitud);
        solicitud.registro.oficial = new Documento();
        solicitud.registro.oficial.tipo = FapProperties.get("fap.aed.tiposdocumentos.solicitud");
        solicitud.registro.oficial.descripcion = "Descripción del documento incluida a mano";
        gestorDocumentalService.saveDocumentoTemporal(solicitud.registro.oficial, oficial);
        play.Logger.info("Documento creado y subido al AED: ");
        play.Logger.info("uri -> " + solicitud.registro.oficial.uri);
        play.Logger.info("url -> " + solicitud.registro.oficial.urlDescarga);
        solicitud.save();
      } catch (Exception e) {
        play.Logger.error("Error");
        e.printStackTrace();
        Messages.error("Error: " + e.getMessage());
      }
    } else {
      play.Logger.info("Documento YA creado y subido al AED: ");
      play.Logger.info("uri -> " + solicitud.registro.oficial.uri);
      play.Logger.info("url -> " + solicitud.registro.oficial.urlDescarga);
    }
  }
  public static void index(
      String accion, Long idSolicitud, Long idCEconomico, Long idCEconomicosManuales) {
    if (accion == null) accion = getAccion();
    if (!permiso(accion)) {
      Messages.fatal("No tiene permisos suficientes para realizar esta acción");
      renderTemplate("fap/PaginaCEconomicoManualCopia/PaginaCEconomicoManualCopia.html");
    }

    SolicitudGenerica solicitud =
        PaginaCEconomicoManualCopiaController.getSolicitudGenerica(idSolicitud);
    CEconomico cEconomico =
        PaginaCEconomicoManualCopiaController.getCEconomico(idSolicitud, idCEconomico);

    TipoEvaluacion tipoEvaluacion = TipoEvaluacion.all().first();
    Integer duracion = tipoEvaluacion.duracion - 1;

    CEconomicosManuales cEconomicosManuales = null;
    if ("crear".equals(accion)) {
      cEconomicosManuales = PaginaCEconomicoManualCopiaController.getCEconomicosManuales();
      cEconomicosManuales.valores = new ArrayList<ValoresCEconomico>();
      for (int i = 0; i <= duracion; i++) {
        ValoresCEconomico vCE = new ValoresCEconomico(i);
        cEconomicosManuales.valores.add(vCE);
      }
      if (properties.FapProperties.getBoolean("fap.entidades.guardar.antes")) {

        cEconomicosManuales.save();
        idCEconomicosManuales = cEconomicosManuales.id;
        cEconomico.otros.add(cEconomicosManuales);
        cEconomico.save();

        accion = "editar";
      }

    } else if (!"borrado".equals(accion)) {
      cEconomicosManuales =
          PaginaCEconomicoManualCopiaController.getCEconomicosManuales(
              idCEconomico, idCEconomicosManuales);
      if (cEconomicosManuales == null) {
        cEconomicosManuales = getFlashCEconomicosManuales();
        accion = "crear";
        Messages.clear();
      }
    }

    log.info(
        "Visitando página: " + "fap/PaginaCEconomicoManualCopia/PaginaCEconomicoManualCopia.html");
    renderTemplate(
        "fap/PaginaCEconomicoManualCopia/PaginaCEconomicoManualCopia.html",
        accion,
        idSolicitud,
        idCEconomico,
        idCEconomicosManuales,
        solicitud,
        cEconomico,
        cEconomicosManuales,
        duracion);
  }
 public static void comprobarFechaLimiteJustificacion(Long idSolicitud) {
   try {
     if (FapProperties.get("fap.app.justificacion.fechacierre") != null) {
       String fechaStr = FapProperties.get("fap.app.justificacion.fechacierre");
       DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
       DateTime fechaLimite = formatter.parseDateTime(fechaStr);
       if (fechaLimite.isBeforeNow()) {
         play.Logger.error(
             "La justificaacion de la solicitud "
                 + idSolicitud
                 + " no se ha podido presentar (registrar o firmar). La fecha Límite de Justificación ha expirado: "
                 + fechaStr);
         Messages.keep();
       }
     }
   } catch (Exception e) {
     play.Logger.error(
         "Fallo recuperando y verificando la fecha de cierre de la justificación de la aplicación");
   }
 }
 @Util
 private static String redirectToFirstPage(Long idSolicitud) {
   // Url Primera pagina de la solicitud
   String firstPage = FapProperties.get("fap.app.firstPage");
   if (firstPage == null) {
     play.Logger.error(
         "No está definida la property fap.app.firstPage que identifica la primera página.");
     Messages.fatal("Se ha producido un error");
   }
   String expedienteUrl =
       Router.reverse(firstPage + "Controller.index").add("idSolicitud", idSolicitud).url;
   return expedienteUrl;
 }
  public static void index(
      String accion, Long idSolicitud, Long idRegistroModificacion, Long idRegistro) {
    if (accion == null) accion = getAccion();
    if (!permiso(accion)) {
      Messages.fatal("No tiene suficientes privilegios para acceder a esta solicitud");
      renderTemplate(
          "gen/SolicitudPresentarModificacionFAP/SolicitudPresentarModificacionFAP.html");
    }

    SolicitudGenerica solicitud =
        SolicitudPresentarModificacionFAPController.getSolicitudGenerica(idSolicitud);
    idRegistroModificacion =
        solicitud.registroModificacion.get(solicitud.registroModificacion.size() - 1).id;
    RegistroModificacion registroModificacion =
        SolicitudPresentarModificacionFAPController.getRegistroModificacion(
            idSolicitud, idRegistroModificacion);
    idRegistro = registroModificacion.registro.id;

    Registro registro = null;
    if ("crear".equals(accion)) {
      registro = SolicitudPresentarModificacionFAPController.getRegistro();
      if (properties.FapProperties.getBoolean("fap.entidades.guardar.antes")) {

        registro.save();
        idRegistro = registro.id;
        registroModificacion.registro = registro;
        registroModificacion.save();

        accion = "editar";
      }

    } else if (!"borrado".equals(accion)) {
      registro =
          SolicitudPresentarModificacionFAPController.getRegistro(
              idRegistroModificacion, idRegistro);
    }

    log.info(
        "Visitando página: "
            + "gen/SolicitudPresentarModificacionFAP/SolicitudPresentarModificacionFAP.html");
    renderTemplate(
        "gen/SolicitudPresentarModificacionFAP/SolicitudPresentarModificacionFAP.html",
        accion,
        idSolicitud,
        idRegistroModificacion,
        idRegistro,
        solicitud,
        registroModificacion,
        registro);
  }
public class TramiteAplicacion extends TramiteSolicitud {

  private static final String TIPO_TRAMITE = "Solicitud Aplicacion";
  private static final String TIPO_REGISTRO =
      FapProperties.get("fap.aed.tiposdocumentos.solicitud");
  private static final String BODY_REPORT = "reports/solicitud.html";
  private static final String HEADER_REPORT = "reports/header.html";
  private static final String FOOTER_REPORT = "reports/footer-borrador.html";
  private static final String MAIL = "solicitudIniciada";
  private static final String JUSTIFICANTE_REGISTRO =
      FapProperties.get("fap.aed.tiposdocumentos.justificanteRegistroSolicitud");
  private static final String PREFIJO_JUSTIFICANTE_PDF =
      FapProperties.get("fap.tramitacion.prefijojustificantepdf.solicitud");

  public TramiteAplicacion(SolicitudGenerica solicitud) {
    super(solicitud);
  }

  @Override
  public Registro getRegistro() {
    return this.solicitud.registro;
  }

  @Override
  public String getTipoRegistro() {
    return TramiteAplicacion.TIPO_REGISTRO;
  }

  @Override
  public String getBodyReport() {
    return TramiteAplicacion.BODY_REPORT;
  }

  @Override
  public String getHeaderReport() {
    return TramiteAplicacion.HEADER_REPORT;
  }

  @Override
  public String getFooterReport() {
    return TramiteAplicacion.FOOTER_REPORT;
  }

  @Override
  public String getMail() {
    return TramiteAplicacion.MAIL;
  }

  @Override
  public String getJustificanteRegistro() {
    return TramiteAplicacion.JUSTIFICANTE_REGISTRO;
  }

  @Override
  public String getTipoTramite() {
    return TramiteAplicacion.TIPO_TRAMITE;
  }

  @Override
  public List<Documento> getDocumentos() {
    return this.solicitud.documentacion.documentos;
  }

  @Override
  public String getPrefijoJustificantePdf() {
    return PREFIJO_JUSTIFICANTE_PDF;
  }

  public void guardar() {
    this.solicitud.save();
  }

  @Override
  public List<DocumentoExterno> getDocumentosExternos() {
    // TODO Auto-generated method stub
    return null;
  }
}
 @Before
 protected static void injectProperties() throws Exception {
   renderArgs.put("configfap", FapProperties.get());
 }
  @Util
  // Este @Util es necesario porque en determinadas circunstancias crear(..) llama a editar(..).
  public static void formHabilitarFH(
      Long idSolicitud, Long idRegistroModificacion, Long idRegistro, String btnHabilitarFH) {
    checkAuthenticity();
    if (!permisoFormHabilitarFH("editar")) {
      Messages.error("No tiene permisos suficientes para realizar la acción");
    }

    SolicitudGenerica dbSolicitud =
        SolicitudPresentarModificacionFAPController.getSolicitudGenerica(idSolicitud);
    idRegistroModificacion =
        dbSolicitud.registroModificacion.get(dbSolicitud.registroModificacion.size() - 1).id;
    RegistroModificacion registroModificacion =
        RegistroModificacion.findById(idRegistroModificacion);
    idRegistro = registroModificacion.registro.id;
    Registro dbRegistro =
        SolicitudPresentarModificacionFAPController.getRegistro(idRegistroModificacion, idRegistro);

    if (!Messages.hasErrors()) {
      try {
        PresentacionModificacionFapController.invoke(
            "comprobarFechaLimitePresentacion", idSolicitud);
      } catch (Throwable e1) {
        log.error(
            "Hubo un problema al invocar los métodos comprobarFechaLimitePresentacion: "
                + e1.getMessage());
        Messages.error("Error al validar las comprobaciones de la Fecha Límite de Presentación");
      }
    }

    if (!Messages.hasErrors()) {
      try {
        TramiteBase tramite =
            PresentacionModificacionFapController.invoke("getTramiteObject", idSolicitud);
        boolean encontrado = false;
        for (Documento doc : tramite.getDocumentos()) {
          if (doc.tipo.equals(
              FapProperties.get("fap.firmaYRegistro.funcionarioHabilitado.tipoDocumento"))) {
            encontrado = true;
            break;
          }
        }
        if (!encontrado) {
          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"));
          Messages.error(
              "El documento que autoriza la firma de un funcionario habilitado no ha sido subido o su tipo no es correcto.");
          Messages.error(
              "Asegurese de haber subido el documento pertinente con tipo: "
                  + TableKeyValue.getValue(
                      "tiposDocumentos",
                      FapProperties.get("fap.firmaYRegistro.funcionarioHabilitado.tipoDocumento")));
        }
      } catch (Throwable e) {
        log.error(
            "Hubo un problema al intentar verificar la presencia del documento de autorizacion funcionario habilitado: "
                + e.getMessage());
        Messages.error("No se pudo habilitar la firma de un Funcionario");
      }
    }
    if (!Messages.hasErrors()) {
      SolicitudPresentarModificacionFAPController.formHabilitarFHValidateRules();
    }
    if (!Messages.hasErrors()) {
      dbRegistro.habilitaFuncionario = true;
      dbRegistro.save();
      Messages.ok("Se ha habilitado a un funcionario correctamente.");
      log.info(
          "Acción Editar de página: "
              + "gen/SolicitudPresentarModificacionFAP/SolicitudPresentarModificacionFAP.html"
              + " , intentada con éxito");
    } else
      log.info(
          "Acción Editar de página: "
              + "gen/SolicitudPresentarModificacionFAP/SolicitudPresentarModificacionFAP.html"
              + " , intentada sin éxito (Problemas de Validación)");
    SolicitudPresentarModificacionFAPController.formHabilitarFHRender(
        idSolicitud, idRegistroModificacion, idRegistro);
  }