@Util
  public static void prepararParaFirmarFuncionarioHabilitadoFormPreparar(Long idSolicitud) {
    play.Logger.info("Preparamos para firmar por el funcionario Habilitado (no hace nada aún)");
    prepararParaFirmarFormPreparar(idSolicitud);
    Solicitud dbSolicitud = PaginaFirmaController.getSolicitud(idSolicitud);

    if (!Messages.hasErrors()) {
      // Borra firmantes anteriores
      List<Firmante> firmantesBack = new ArrayList<Firmante>(dbSolicitud.registro.firmantes);
      dbSolicitud.registro.firmantes.clear();
      dbSolicitud.registro.save();
      FirmaUtils.borrarFirmantes(firmantesBack);

      // Calcula quién puede firmar la solicitud (los funcionarios habilitados)
      dbSolicitud.registro.firmantes = FuncionariosHabilitados.getFirmantes();

      dbSolicitud.registro.save();

      play.Logger.info("FIRMANTES");
      for (Firmante f : dbSolicitud.registro.firmantes) {
        play.Logger.info(f.toString());
      }
      dbSolicitud.solicitante.autorizaFuncionario = true;
      dbSolicitud.registro.fasesRegistro.setFase(FaseRegistroEnum.preparadaFuncionario);
      dbSolicitud.save();
      // Debemos comprobar que el documento con el tipo de URI haya sido añadido a la documentación
      Messages.ok("Preparado para firmar por el funcionario correctamente");
    }
  }
  @Util
  public static void firmarRepresentanteFormFirmaRepresentante(
      Long idSolicitud, Long idRegistroModificacion, Long idRegistro, String firma) {
    SolicitudGenerica solicitud =
        SolicitudPresentarModificacionFAPController.getSolicitudGenerica(idSolicitud);
    idRegistroModificacion =
        solicitud.registroModificacion.get(solicitud.registroModificacion.size() - 1).id;
    RegistroModificacion registroModificacion =
        RegistroModificacion.findById(idRegistroModificacion);
    idRegistro = registroModificacion.registro.id;
    Registro registro =
        SolicitudPresentarModificacionFAPController.getRegistro(idRegistroModificacion, idRegistro);

    play.Logger.info("Metodo: firmarRepresentanteFormFirmaRepresentante");
    Map<String, Long> ids = (Map<String, Long>) tags.TagMapStack.top("idParams");
    Map<String, Object> vars = new HashMap<String, Object>();
    if (secure.checkAcceso("editarFirma", "editar", ids, vars)) {
      if (registro.firmantes.todos == null || registro.firmantes.todos.size() == 0) {
        registro.firmantes.todos = solicitud.solicitante.calcularFirmantes();
        registro.firmantes.save();
      }
      FirmaUtils.firmar(registro.oficial, registro.firmantes.todos, firma, null);
    } else {
      // ERROR
      Messages.error("No tiene permisos suficientes para realizar la acción++");
    }
    if (!Messages.hasErrors()) {
      registro.fasesRegistro.firmada = true;
      registroModificacion.save();
      registro.save();
    }
  }
  @Util
  public static void firmarRegistrarFHFormFirmaFH(
      Long idSolicitud, Long idRegistroModificacion, Long idRegistro, String firma) {
    SolicitudGenerica solicitud =
        SolicitudPresentarModificacionFAPController.getSolicitudGenerica(idSolicitud);
    idRegistroModificacion =
        solicitud.registroModificacion.get(solicitud.registroModificacion.size() - 1).id;
    RegistroModificacion registroModificacion =
        RegistroModificacion.findById(idRegistroModificacion);
    idRegistro = registroModificacion.registro.id;
    Registro registro =
        SolicitudPresentarModificacionFAPController.getRegistro(idRegistroModificacion, idRegistro);

    play.Logger.info("Metodo: firmarRegistrarFHFormFirmaFH");
    Agente agente = AgenteController.getAgente();
    if (agente.getFuncionario()) {
      List<Firmante> firmantes = new ArrayList<Firmante>();
      firmantes.add(new Firmante(agente));
      FirmaUtils.firmar(registro.oficial, firmantes, firma, null);
    } else {
      // ERROR
      Messages.error("No tiene permisos suficientes para realizar la acción");
    }
    if (!Messages.hasErrors()) {

      registro.fasesRegistro.firmada = true;
      registro.save();
    }
  }
  @Util
  public static void prepararParaFirmarFormPreparar(Long idSolicitud) {
    // Sobreescribir este método para asignar una acción
    Solicitud dbSolicitud = PaginaFirmaController.getSolicitud(idSolicitud);

    play.Logger.info("Preparamos para firmar");
    FirmaService firmaService = InjectorConfig.getInjector().getInstance(FirmaService.class);

    FirmaUtils.generarOficial(dbSolicitud);

    if (!Messages.hasErrors()) {
      dbSolicitud.registro.fasesRegistro.borrador = true;
      dbSolicitud.solicitante.autorizaFuncionario = false;
      dbSolicitud.registro.fasesRegistro.setFase(FaseRegistroEnum.preparada);
      dbSolicitud.save();

      // Borra firmantes anteriores
      List<Firmante> firmantesBack = new ArrayList<Firmante>(dbSolicitud.registro.firmantes);
      dbSolicitud.registro.firmantes.clear();
      dbSolicitud.registro.save();
      FirmaUtils.borrarFirmantes(firmantesBack);

      // Calcula quién puede firmar la solicitud
      dbSolicitud.registro.firmantes = dbSolicitud.solicitante.calcularFirmantes();

      // dbSolicitud.solicitante.autorizaFuncionario = true;
      dbSolicitud.registro.save();

      play.Logger.info("FIRMANTES");
      for (Firmante f : dbSolicitud.registro.firmantes) {
        play.Logger.info(f.toString());
      }
    }

    if (!Messages.hasErrors()) Messages.ok("Solicitud preparada para firmar");
  }