Version 0.11 (beta)

Esup-signature est une application en cours de développement. La documentation est en cours d’élaboration

Introduction

Esup-signature propose une interface d’administration qui permet le suivi des demandes en cours, le paramétrage des circuits de signatures ou des formulaires, ainsi que divers outils qui seront détaillés après.

La configuration générale de l'application se fait via le fichier de configuration application.yml avant la compilation du projet voir : Configuration

Enfin pour des besoins très précis il est possible d’écrire directement des classes spécifiques pour gérer les sources de données, le pré-remplissage des formulaires ou encore pour décrire des circuits de signatures.


Pour avoir accès à l'espace "Admin" l'utilisateur doit disposer du rôle ROLE_ADMIN tel que défini dans la propriété group-mapping-role-admin: du fichier de configuration voir : Configuration securité

Liste des demandes

La vue demande est la première vue accessible lorsque que l'on clique sur "Admin" dans la barre de navigation (ou sur la couronne)

Elle permet à l'administrateur de consulter toutes les demandes. Les demandes peuvent être filtrées en fonction de leur statut

Pour autant, l'administrateur ne peut pas consulter les documents, il peut simplement vérifier la liste des événements et si besoin supprimer les demandes.

Les circuits

Dans Esup-signature permet de créer des circuits de signatures puissants dont les fonctionnalités sont :

Dans "Admin" puis "Circuit", vous avez accès à l'outil permet de consulter et de modifier les circuits de signatures. Il est possible de filtrer les circuits décrits via l'interface graphique (Workflows globaux) ou les circuits décrits via une classe (Classes workflow). Il suffit de cliquer sur "l’œil" pour accéder à un circuit.

Configurer un circuit

Pour ajouter un nouveau circuit via l'interface graphique, cliquez sur le bouton bleu "+" puis saisissez un nom (unique). Vous serez redirigé vers la fiche correspondant à votre nouveau circuit. En cliquant sur le bouton bleu "3 points"  vous pouvez modifier les paramètres généraux du circuit, ajouter des étapes ou supprimer le circuit.

Dans les paramètres généraux, vous pouvez:

Pour définir un circuit il faut maintenant utiliser le bouton noir "Ajouter un étape" (les pas). Comme pour une demande signature simple, il faut sélectionner les participants concernés par cette étape, choisir si tous les participants doivent signer lors de cette étape et le définir le type (visa, calligraphique ou électronique)

De plus, il est possible d'ajouter un description de l'étape qui apparaîtra au moment où l'utilisateur validera sa demande. De même il est possible de permettre à l'utilisateur de modifier les participants d'une étape au moment de l'envoi de sa demande en cochant la case "L'utilisateur peut modifier les participants" de l'étape correspondante. Lorsque vous validez, un "bloc" étape est créer au niveau de la fiche du circuit. Dans ce bloc, vous avez la possibilité de modifier les informations précédemment saisies.

Attention, il n'est pas possible de modifier l'ordre des étapes, il faudra supprimer puis recréer les étapes si besoin


Définir un circuit via les métas-données des PDF

Dans certains cas, les participants à une étape donnée ne sont pas prédéfinis. Dans le cas concret des bons de commande à l'université de Rouen, les signataires sont détermines en fonction de l'unité budgétaire (donc par l'application métier).

Le cas d'usage à Rouen est que les utilisateurs génèrent des bon de commande "à signer" au format PDF et les déposent dans leur dossier de travail. Deux cas possible :

Pour cette dernière solution il faut donc créer un circuit comme vu précédemment, y cocher la case "Scanner les metadonnées des PDF" et définir une source pour la récupération des documents.

Les métas-données qui doivent être inscrite dans les document PDF sont les suivantes:

Lorsque le scheduler passera pour importer les documents, ceux-ci seront analysés, le circuit sera généré en fonction des informations trouvées dans les métas-données.

Exemple de code java permettant d'ajouter les métas-données à un fichier pdf :

PDDocument document = PDDocument.load(in);
PDDocumentInformation info = document.getDocumentInformation();
info.setCustomMetadataValue("sign_type_default_val", "pdfImageStamp");
info.setCustomMetadataValue("sign_step#1", "[machin@univ-ville.fr, truc@univ-ville.fr]");
info.setCustomMetadataValue("sign_target_key","smb://serveur_de_fichiers/la_destination/signed");


Créer une classe workflow

Pour les cas les plus spécifiques, il est possible d'ajouter, au sources originales, une classe qui décrira précisément un circuit.

L’intérêt de cette solution est de pouvoir mettre en place des mécanismes complexes de calcul des participants. On peut par exemple imaginer de calculer le n+1 de l'utilisateur courant.

Cette nouvelle classe devra implémenter la classe "DefaultWorkflow". Des exemples sont déjà présent dans le code source original d'Esup-signature dans le dossier 

src/main/java/org/esupportail/esupsignature/service/workflow/impl/

Votre classe doit être construite comme suit :

package org.esupportail.esupsignature.service.workflow.impl;

import org.esupportail.esupsignature.entity.Data;
import org.esupportail.esupsignature.entity.User;
import org.esupportail.esupsignature.entity.WorkflowStep;
import org.esupportail.esupsignature.entity.enums.SignType;
import org.esupportail.esupsignature.exception.EsupSignatureUserException;
import org.esupportail.esupsignature.service.RecipientService;
import org.esupportail.esupsignature.service.UserService;
import org.esupportail.esupsignature.service.WorkflowService;
import org.esupportail.esupsignature.service.workflow.DefaultWorkflow;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Component
public class BasicWorkflow extends DefaultWorkflow {

   private String name = "BasicWorkflow";
   private String description = "Une signature";

   @Resource
   private WorkflowService workflowService;

   @Resource
   private UserService userService;

   @Resource
   private RecipientService recipientService;

   @Override
   public String getName() {
      return name;
   }

   @Override
   public String getDescription() {
      return description;
   }

   @Override
   public List<WorkflowStep> generateWorkflowSteps(User user, Data data, List<String> recipentEmailsStep) throws EsupSignatureUserException {
      List<WorkflowStep> workflowSteps = new ArrayList<>();
/* on cree et on ajoute les étapes du workflow ici */
      WorkflowStep workflowStep = new WorkflowStep();
      workflowStep.setStepNumber(1);
      workflowStep.setSignType(SignType.pdfImageStamp);
      workflowStep.setDescription("Choix du signataire");
      workflowStep.setChangeable(true);
      if(data != null) {
         workflowStep.setRecipients(workflowService.getFavoriteRecipientEmail(1, data.getForm(), recipentEmailsStep, user));
      } else {
         workflowStep.getRecipients().add(recipientService.createRecipient(null, userService.getGenericUser("Utilisateur issue des favoris", "")));
      }
      workflowSteps.add(workflowStep);
      return workflowSteps;
   }
}

Il faut donc préciser a minima :


Les formulaires

Création d'un PDF Form


Import du formulaire


Les messages d'information