Commit 2aa01b3a authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Config Pégase : possibilité de spécifier le format des codes périodes.

parent c30ad0a7
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -11,8 +11,8 @@ use Fichier\Service\Storage\Adapter\S3StorageAdapter;
use GuzzleHttp\Client as RestClient;
use Laminas\Mail\Transport\Smtp;
use UnicaenApi\ClientMiddleware\Jwt\JwtMiddleware;
use UnicaenPegaseCocExtApi\Api\JwtMiddlewareAuthStrategy;
use UnicaenPegaseCocExtApi\Api\JwtMiddlewareFactory;
use UnicaenPegaseApi\Api\JwtMiddlewareAuthStrategy;
use UnicaenPegaseApi\Api\JwtMiddlewareFactory;

return [
    // Imports et synchros (unicaen/db-import)
@@ -104,22 +104,31 @@ return [
        ],
    ],

    //
    // Config pour dialogue avec le logiciel de scolarité Pégase.
    //
    'unicaen_pegase' => [
        // correspondance 'Etablissement d'inscription SyGAL (etablissement.source_code)' => 'Code structure etablissement Pégase'
        'codes_structures_etablissements' => [
            'UCN' => 'ETAB00',
            'INSA' => 'ETAB00',
        ],
        // codes des périodes Pégase selon l'établissement d'inscription SyGAL
        'codes_periodes' => [
            'UCN' => 'PER-%d', // %d sera remplacé par l'année, ex : 'PER-2026'
            'INSA' => 'PERIODE-%d',
        ],
        // codes des origines d'admission selon l'établissement d'inscription
        // codes des origines d'admission Pégase selon l'établissement d'inscription SyGAL
        'codes_origines_admissions' => [
            'UCN' => 'ECOLEDOCTORALE',
            'INSA' => 'ECOLEDOCTORALE',
        ],
        // codes des régimes d'inscriptions selon l'établissement d'inscription
        // codes des régimes d'inscriptions Pégase selon l'établissement d'inscription SyGAL
        'codes_regimes_inscriptions' => [
            'UCN' => 'XXXX',
            'INSA' => 'XXXX', // ?
            'UCN' => 'XXXX', // ex : 'REG001'
            'INSA' => 'XXXX',
        ],
        // codes des types de résultats (cf. API Pégase "REF-Référentiel", /parametrage/TypeResultat) selon l'établissement d'inscription
        // codes des types de résultats Pégase (cf. API Pégase "REF-Référentiel", /parametrage/TypeResultat) selon l'établissement d'inscription SyGAL
        'codes_types_resultats' => [
            'UCN' => [
                // diplomation
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ readonly class InjectConfig

        if (!method_exists($target, $injectionMethodName)) {
            throw new InvalidArgumentException(sprintf(
                "La classe '%s du service spécifié via l'Attribute %s doit fournir la méthode '%s'.",
                "La classe '%s' spécifiée via l'Attribute %s doit fournir la méthode '%s'.",
                get_class($target),
                static::class,
                $injectionMethodName
+31 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Webmozart\Assert\Assert;
//

#[InjectConfig('unicaen_pegase > codes_structures_etablissements')] /** @see setCodesStructuresEtablissements() */
#[InjectConfig('unicaen_pegase > codes_periodes')] /** @see setCodesPeriodes() */
#[InjectConfig('unicaen_pegase > codes_origines_admissions')] /** @see setCodesOriginesAdmissions() */
#[InjectConfig('unicaen_pegase > codes_regimes_inscriptions')] /** @see setCodesRegimesInscriptions() */
#[InjectConfig('unicaen_pegase > codes_types_resultats')] /** @see setCodesTypesResultats() */
@@ -19,6 +20,7 @@ class UnicaenPegaseConfig
    {
        $instance = new static();
        $instance->setCodesStructuresEtablissements($config['codes_structures_etablissements'] ?? []);
        $instance->setCodesPeriodes($config['codes_periodes'] ?? []);
        $instance->setCodesOriginesAdmissions($config['codes_origines_admissions'] ?? []);
        $instance->setCodesRegimesInscriptions($config['codes_regimes_inscriptions'] ?? []);
        $instance->setCodesTypesResultats($config['codes_types_resultats'] ?? []);
@@ -55,6 +57,35 @@ class UnicaenPegaseConfig
        return $this->codesStructuresEtablissements[$codeEtablissement] ?? null;
    }

    /**
     * Codes des périodes Pégase selon l'établissement d'inscription.
     *
     * Exemple :
     *
     *      [
     *          'UCN' => 'PER-%d', // %d sera remplacé par l'année, ex : 'PER-2026'
     *          'INSA' => 'PERIODE-%d',
     *      ],
     *
     * @var array<string, string>
     */
    private array $codesPeriodes;

    public function getCodesPeriodes(): array
    {
        return $this->codesPeriodes;
    }

    public function setCodesPeriodes(array $codesPeriodes): void
    {
        $this->codesPeriodes = $codesPeriodes;
    }

    public function getCodePeriodeForEtablissement(string $codeEtablissement): ?string
    {
        return $this->codesPeriodes[$codeEtablissement] ?? null;
    }

    /**
     * Codes des types de résultats Pégase selon l'établissement d'inscription.
     *
+9 −3
Original line number Diff line number Diff line
@@ -38,14 +38,20 @@ class TxDataService extends AbstractTxDataService
    {
        /** @var AutorisationInscriptionThese $autorisation */
        $autorisation = $params['autorisation'];
        $etablissementSourceCode = $autorisation->getThese()->getEtablissement()->getSourceCode();

        $codeStructureEtablissement = $this->unicaenPegaseConfig->getCodeStructureEtablissementForEtablissement(
            $autorisation->getThese()->getEtablissement()->getSourceCode()
        );
        $codeStructureEtablissement = $this->unicaenPegaseConfig->getCodeStructureEtablissementForEtablissement($etablissementSourceCode);

        $codePeriode = $this->unicaenPegaseConfig->getCodePeriodeForEtablissement($etablissementSourceCode);
        if ($codePeriode) {
            $codePeriode = sprintf($codePeriode, $autorisation->getAnneeUniv()->getPremiereAnnee());
        }

        $instance = new TxData();
        $instance->setAutorisationInscriptionThese($autorisation);
        $instance->setCodeStructureEtablissement($codeStructureEtablissement);
        $instance->setCodeApprenant($autorisation->getThese()->getDoctorant()->getCodeApprenantInSource());
        $instance->setCodePeriode($codePeriode);

        // Génération du payload (qui peut échouer à cause de données manquantes) qui sera utilisé pour l'appel à
        // l'API du logiciel de scolarité :