Commit b57871d1 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Module StepStar : nouveau format pour l'argument 'date-soutenance-min' de la ligne de commande

parent 06278f9b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -70,8 +70,9 @@ class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInte
            [ '<id>', "Ids des thèses concernées, séparées par une virgule.", "Facultatif"],
            [ '<etat>', "États des thèses, séparés par une virgule, ex : 'E,S'.", "Facultatif"],
            [ '<date-soutenance-min>',
                "Date de soutenance minimale. " .
                "Si la valeur spécifiée est de la forme 'AAAA-MM-DD' : les thèses dont la date réelle de soutenance se situe avant cette date seront écartées, ex : '2022-03-11'. " .
                "Si elle est de la forme 'Nm' : les thèses dont la date réelle de soutenance est passée de plus de N mois seront écartées, ex : '6m'.",
                "Si la valeur commence par 'P' : un DateInterval sera construit et retranché à la date du jour pour déterminer la date de soutenance minimale, ex : 'P6M' <=> '6 mois avant la date du jour'.",
                "Facultatif"],
            [ '<etablissement>', "Codes des établissements d'inscription, séparés par une virgule, ex : 'UCN,URN'.", "Facultatif"],
            [ '--force', "Réalise l'envoi même si le contenu du fichier TEF est le même qu'au dernier envoi.", "Facultatif"],
+12 −8
Original line number Diff line number Diff line
@@ -4,14 +4,14 @@ namespace StepStar\Service\Fetch;

use DateInterval;
use DateTime;
use These\QueryBuilder\TheseQueryBuilder;
use These\Service\These\TheseServiceAwareTrait;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\Query\QueryException;
use Exception;
use InvalidArgumentException;
use LogicException;
use RuntimeException;
use Webmozart\Assert\Assert;
use These\QueryBuilder\TheseQueryBuilder;
use These\Service\These\TheseServiceAwareTrait;

class FetchService
{
@@ -69,11 +69,15 @@ class FetchService
                $qb->andWhereEtatIn($etats);
            }
            if ($dateSoutenanceMin !== null) {
                // la contrainte sur la date de soutenance peut être de la forme '{entier}m',
                // ex : '6m' est traduit en "date de soutenance passée de 6 mois maxi"
                if ($months = strstr($dateSoutenanceMin, 'm', true)) {
                    Assert::integerish($months, "La valeur précédent 'm' doit être un entier, ex : '6m'");
                    $period = new DateInterval("P{$months}M");
                // la contrainte sur la date de soutenance peut commencer par 'P', auquel cas on construit un DateInterval avec,
                // ex : 'P6M' est traduit en "date de soutenance passée de 6 mois maxi"
                if (stripos($dateSoutenanceMin, 'P') === 0) {
                    try {
                        $period = new DateInterval($dateSoutenanceMin);
                    } catch (Exception $e) {
                        throw new InvalidArgumentException(
                            "La valeur '$dateSoutenanceMin' ne permet pas de construire un DateInterval", null, $e);
                    }
                    $dateSoutenanceMin = (new DateTime('today'))->sub($period)->format('Y-m-d');
                }
                $qb->andWhere('t.dateSoutenance >= :dateSoutMin')->setParameter('dateSoutMin', $dateSoutenanceMin);