Commit 4620b263 authored by Thibaut Vallee's avatar Thibaut Vallee
Browse files

Récusion

parent dfe24b1a
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGELOG.md: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
#CHANGELOG 
============
1.3.0 (30/10/2026)
------------------
- Récursion
- Création d'instance par EvenementManager

1.2.0 (30/10/2026)
------------------
+39 −0
Changes for api/doc/data/25_privilege_evenement.yaml: 39 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Exemple de référentiel pour unicaen/referentiel-bundle : catégorie et privilèges de unicaen/evenement-bundle.
# À copier dans le répertoire data/ de l'application, après le fichier des catégories de privilèges.
# La catégorie unicaen_mail doit exister, par exemple dans data/10_privilege_categorie.yaml :
#   - { code: evenement, libelle: Gestion des évenements }
#   - { code: evenement_type, libelle: Gestion des types d'évenements }
#   - { code: evenement_etat, libelle: Gestion des états des évenements }
#   - { code: evenement_journal, libelle: Gestion des journaux évenements }
# Les codes suivent la convention de unicaen:privilege:sync-routes --assign, qui les relie aux routes :
# nom court de la ressource en snake_case, puis voir (GET), creer (POST) ou supprimer (DELETE).
synchronisation:
    entity: Unicaen\Privilege\Entity\Privilege
    identifier: code

    fields:
        libelle: update_always
        categorie:
            policy: update_always
            relation: code

    missing_from_file: keep

items:
    - { code: evenement_voir, libelle: Voir les événements, categorie: evenement }
    - { code: evenement_creer, libelle: Creer un événement, categorie: evenement }
    - { code: evenement_modifier, libelle: Modifier un événement, categorie: evenement }
    - { code: evenement_supprimer, libelle: Supprimer un événement, categorie: evenement }
    - { code: evenement_traiter, libelle: Traiter manuellement des événements, categorie: evenement }
    - { code: evenement_type_voir, libelle: Voir les types d'évenements, categorie: evenement_type }
    - { code: evenement_type_creer, libelle: Creer un type d'évenement, categorie: evenement_type }
    - { code: evenement_type_modifier, libelle: Modifier un type d'événement, categorie: evenement_type }
    - { code: evenement_type_supprimer, libelle: Supprimer un type d'événement, categorie: evenement_type }
    - { code: evenement_etat_voir, libelle: Voir les états d'événements, categorie: evenement_etat }
    - { code: evenement_etat_creer, libelle: Creer un état d'événement, categorie: evenement_etat }
    - { code: evenement_etat_modifier, libelle: Modifier un état d'événement, categorie: evenement_etat }
    - { code: evenement_etat_supprimer, libelle: Supprimer un état d'événement, categorie: evenement_etat }
    - { code: evenement_journal_voir, libelle: Voir les journaux d'événements, categorie: evenement_journal }
    - { code: evenement_journal_creer, libelle: Creer un journal d'événement, categorie: evenement_journal }
    - { code: evenement_journal_modifier, libelle: Modifier un journal d'événement, categorie: evenement_journal }
    - { code: evenement_journal_supprimer, libelle: Supprimer un journal d'événement, categorie: evenement_journal }
+39 −0
Changes for api/doc/data/30_privilege_routes.yaml: 39 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Exemple de référentiel pour unicaen/referentiel-bundle : privilege_route de unicaen/evenement-bundle.
# À copier dans le répertoire data/ de l'application, après le fichier des catégories de privilèges.
# Les routes de unicaen/privilege-bundle sont toutes nomé
# faire appels à unicaen:privilege:sync-routes pour les intégrer dans la base de données
# puis unicaen:referentiel:sync pour associéer les routes aux priviléges
#####
synchronisation:
    entity: Unicaen\Privilege\Entity\PrivilegeRoute
    identifier: name

    fields:
        privileges:
            policy: update_always
            relation: code

    missing_from_file: keep
items:
    - { name: evenement-afficher, privileges:  [ evenement_voir ] }
    - { name: evenement-lister, privileges: [ evenement_voir ] }
    - { name: evenement-ajouter, privileges: [ evenement_creer ] }
    - { name: evenement-modifier, privileges: [ evenement_modifier ] }
    - { name: evenement-supprimer, privileges: [ evenement_supprimer ] }
    - { name: evenement-traiter, privileges: [ evenement_traiter ] }
    - { name: evenement-reinitialiser, privileges: [ evenement_traiter ] }
    - { name: evenement-etat-afficher, privileges: [ evenement_etat_voir ] }
    - { name: evenement-etat-lister, privileges:  [ evenement_etat_voir ] }
    - { name: evenement-etat-ajouter, privileges: [  evenement_etat_creer] }
    - { name: evenement-etat-modifier, privileges: [ evenement_etat_modifier ] }
    - { name: evenement-etat-supprimer, privileges: [ evenement_etat_supprimer ] }
    - { name: evenement-type-afficher, privileges: [ evenement_type_voir ] }
    - { name: evenement-type-lister, privileges:  [ evenement_type_voir ] }
    - { name: evenement-type-ajouter, privileges: [ evenement_type_creer] }
    - { name: evenement-type-modifier, privileges: [ evenement_type_modifier ] }
    - { name: evenement-type-supprimer, privileges: [ evenement_type_supprimer ] }
    - { name: evenement-journal-afficher, privileges: [ evenement_journal_voir ] }
    - { name: evenement-journal-lister, privileges:  [ evenement_journal_voir ] }
    - { name: evenement-journal-ajouter, privileges: [ evenement_journal_creer] }
    - { name: evenement-journal-modifier, privileges: [ evenement_journal_modifier ] }
    - { name: evenement-journal-supprimer, privileges: [ evenement_journal_supprimer ] }
+16 −1
Changes for api/doc/modele.md: 16 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -110,4 +110,19 @@ Cf [mail.md](mail.md) pour plus d'information

## Récursion

Le système de récursions des événements n'est pas encore implémentée
Il est possible de définir des événements dit récurcif c'est à dire que le traitement d'un événement va déclencher la création d'une copie de cette événement à une date utlérieurs. 

La définition des événement récursif passe par la définition du champs recursion dans EvenementType. 
Ce champ attend un DateInterval php au format `P1W`.

Lorsqu'un événement est traité (en succés ou en echec), une copie de lui même est creer avec les même paramétre avec une date de traitement ultérieur (en fonction du paramétre $recursion).

**Attention, réinitialiser ou relancer le traitement d'un événement récurssif provoque a nouveau sa récursion**

Pour arrêter la récursion d'un événement, il faut définir la date de fin de cette événement.





+41 −1
Changes for api/doc/usage.md: 41 added lines, 1 removed line.
Original line number Diff line number Diff line
# unicaen/evenement-bundle

## Usage
## Instanciation d'un événement

Pour instancier une nouvelle instance d'un événement, il existe 2 méthode :

### Via l'API

/evenement (Post)
```json
{
    "type": "/evenement/type/8",
    "nom": "Test",
    "description": "Ceci est un test",
    "datePlanification": "30/10/2026 10:30",
    "motsClefs": "Test",
    "parametres": \"{"mail-to" : "jimi.hendrix@mail.fr"}\"
}
```

### Via l'EvenementManager

Souvent les événements sont instanciés suite à une action utilisateur.

[EvenementManager.php](../src/Service/EvenementManager.php) propose la fonction 
```php
createEvenement(TypeInterface|string $type, ?DateTime $datePlanification = new DateTime(), ?DateTime $dateFin = null, array|string|null $parametres = null): EvenementInterface
``` 
Cette fonction permet d'instancier un nouvelle événement du type demandé (par code ou par l'instance du type).

- `$dateFin` permet aux événements d'arrêter la récursion éventuelle après cete date.
- `$parametres` permet de fournir les paramètre du traitement. Il peut être fournis aux formats tableaux php, tableau JSON ou texte brut
```php
[ 'mail-to' => "jimi.hendrix@mail.fr"]
'{"mail-to" : "jimi.hendrix@mail.fr"}'
"mail-to=jimi.hendrix@mail.fr"
```

_Attention, dans le 3éme cas, les paramètres de l'événement ne sont pas enregistré au format JSON et ne peuvent pas bénéficier de la méthode getParametre("mail-to") de [EvenementLogsTrait.php](../src/Model/EvenementLogsTrait.php)_

Il est donc possible d'injecter l'EvenementManager dans un StateProcessor, une commande, un EventLister ou tout autres services afin de generer les événements.

## Traitements des événements

Le traitements des événements peut s'effectuer de 3 maniéres différentes

Loading