Commit 5bad216c authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

...

parent d1bd139f
Loading
Loading
Loading
Loading
Loading

README.md

deleted100644 → 0
+0 −2
Original line number Diff line number Diff line
# evenement
+3 −0
Original line number Diff line number Diff line
@@ -15,5 +15,8 @@ return [
        'icone' => [
            Type::COLLECTION    => 'icon icon-listing',
        ],

        /** Délai maximal avant l'annulation pour faute de trop grand retard  */
        'delai-peremption' => 'P7D',
    ],
];
 No newline at end of file
+15 −1
Original line number Diff line number Diff line
@@ -121,6 +121,21 @@ Déclaration dans la crontab

Temps d'exectution des événements
===
Dans le fichier de configuration ```unicaen-evenement.global.php```, modifier la clé 'delai_peremption' pour empècher le traitement d'événement qui auraient dû s'exécuter il y a trop longtemps.
La règle est la suivante : `date_planification + delai < now()`.

Cette clef est facultative.

```php
return [
    'unicaen-evenement' => [
        'delai-peremption' => P7D,
    ],
];
```

Date Limite de Traitement
===
Dans le fichier de configuration ```unicaen-evenement.global.php```, modifier la clé 'max_time_execution' pour stoper automatiquement les événements trop long

```php
@@ -131,7 +146,6 @@ return [
];
```


Purge des événements et des logs du journal
---
Les commandes consoles `evenement:purge` et `evenement:purge` permettent de supprimer les instances d'événement traiter avant une date.
+26 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ class EvenementGestionService
    use EtatServiceAwareTrait;

    private array $serviceMap = [];

    private ?string $delaiPeremption = null;

    /**
     * @param array $serviceMap
@@ -30,6 +30,11 @@ class EvenementGestionService
        return $this;
    }

    public function setDelaiPeremption(?string $delaiPeremption): void
    {
        $this->delaiPeremption = $delaiPeremption;
    }

    /**
     * @param Evenement $evenement
     * @return Evenement
@@ -64,10 +69,30 @@ class EvenementGestionService

            $encours = $this->getEtatEvenementService()->findByCode(Etat::EN_COURS);
            $echec = $this->getEtatEvenementService()->findByCode(Etat::ECHEC);
            $annule = $this->getEtatEvenementService()->findByCode(Etat::ANNULE);

            $evenement->setEtat($encours);
            $this->evenementService->update($evenement);

            if ($this->delaiPeremption !== null) {

                try {
                    $dateLimiteTraitement = DateTime::createFromFormat('d/m/Y H:i:s', $evenement->getDatePlanification()->format('d/m/Y H:i:s'));
                    $dateLimiteTraitement->add(new DateInterval($this->delaiPeremption));
                } catch (Exception $e) {
                    throw new RuntimeException("Impossible de calcul la date limite de traitement",0,$e);
                }

                if ($dateLimiteTraitement < new DateTime()) {
                    $evenement->setEtat($annule);
                    $evenement->setLog("Date Limite de Traitement dépassée, événement annulé");
                    $this->evenementService->update($evenement);
                    return $evenement;
                }
            }

            try {

                $retour = $service->traiter($evenement);

                if ($retour !== null) {
+16 −7
Original line number Diff line number Diff line
@@ -18,16 +18,24 @@ class EvenementGestionServiceFactory
     */
    public function __invoke(ContainerInterface $container): EvenementGestionService
    {
        /** @var array $serviceMap */
        $mapping = $container->get('Config')['unicaen-evenement']['service'];
        //Mapping des services

        $config = $container->get('Config');
        if (!isset($config['unicaen-evenement'])) {
            throw new RuntimeException("Clef de configuration ['unicaen-evenement'] absente",-1);
        }
        $config = $config['unicaen-evenement'];

        /** @var array $serviceMap */
        $mapping = $config['service'];
        if ($mapping === null)
            throw new RuntimeException('Toto tu as oublié la config!');
            throw new RuntimeException("Mapping manquant : la clef ['unicaen-evenement']['service'] est manquante");
        $serviceMap = array_map(function ($serviceName) use ($container) {
            return $container->get($serviceName);
        }, $mapping);

        $serviceMap = [];
        foreach ($mapping as $key => $serviceName) {
            $serviceMap[$key] = $container->get($serviceName);
        }
        //Péremption
        $peremptionService = $config['delai-peremption']??null;

        /**
         * @var EtatService $etatService
@@ -38,6 +46,7 @@ class EvenementGestionServiceFactory

        $service = new EvenementGestionService();
        $service->setServiceMap($serviceMap);
        $service->setDelaiPeremption($peremptionService);
        $service->setEtatEvenementService($etatService);
        $service->setEvenementService($evenementService);
        return $service;