Commit 8efc92d4 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'feature_flux_multietab' into test

parents 886435d5 19a46316
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@
        "unicaen/api": "dev-master",
        "unicaen/app": "^6.4",
        "unicaen/auth-token": "^7.1",
        "unicaen/authentification": "^6.4",
        "unicaen/authentification": "dev-release_6.5.0 as 6.4.8",
        "unicaen/privilege": "^6.4",
        "unicaen/console": "^6.0",
        "unicaen/db-anonym": "^4.0",
+18 −8
Original line number Diff line number Diff line
@@ -12445,7 +12445,7 @@
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/api.git",
                "reference": "c6de84367846fd5d44cecb521673a96b8f03d1e8"
                "reference": "f931ff756e99fa1303a5907b9a2ce1a6d2724141"
            },
            "require": {
                "eljam/guzzle-jwt-middleware": "dev-main",
@@ -12463,6 +12463,7 @@
                "psr/container": "^1.0",
                "webmozart/assert": "^1.3"
            },
            "default-branch": true,
            "type": "library",
            "autoload": {
                "psr-4": {
@@ -12473,7 +12474,7 @@
                ]
            },
            "description": "Module Unicaen regroupant des choses utiles pour l'appel d'API Rest ou Soap",
            "time": "2025-10-30T16:23:18+00:00"
            "time": "2026-06-04T07:16:39+00:00"
        },
        {
            "name": "unicaen/app",
@@ -12565,11 +12566,11 @@
        },
        {
            "name": "unicaen/authentification",
            "version": "6.4.8",
            "version": "dev-release_6.5.0",
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/authentification.git",
                "reference": "e2c4a50a20911e5e9e7b967e508dff64afdf19ea"
                "reference": "901dc97991813f09ffbf8902e42a70fc6e825359"
            },
            "require": {
                "apereo/phpcas": "1.6.*",
@@ -12592,7 +12593,7 @@
                ]
            },
            "description": "Module d'authentification pour les applications Unicaen - Version Laminas",
            "time": "2025-12-05T16:18:53+00:00"
            "time": "2026-06-01T15:52:15+00:00"
        },
        {
            "name": "unicaen/avis",
@@ -13131,12 +13132,13 @@
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/pegase-coc-ext-api.git",
                "reference": "2e933d92d67e69c45108db3772cece5d1a1b6bb8"
                "reference": "dadb40009c187be74961ea57f7769b21098c3ef1"
            },
            "require": {
                "php": "^8.0",
                "unicaen/api": "dev-master"
            },
            "default-branch": true,
            "type": "library",
            "autoload": {
                "psr-4": {
@@ -13150,7 +13152,7 @@
                ]
            },
            "description": "Appel d'API Pégase",
            "time": "2025-10-30T08:09:34+00:00"
            "time": "2026-06-04T07:15:53+00:00"
        },
        {
            "name": "unicaen/privilege",
@@ -16320,11 +16322,19 @@
            "time": "2025-03-24T14:11:06+00:00"
        }
    ],
    "aliases": [],
    "aliases": [
        {
            "package": "unicaen/authentification",
            "version": "dev-release_6.5.0",
            "alias": "6.4.8",
            "alias_normalized": "6.4.8.0"
        }
    ],
    "minimum-stability": "dev",
    "stability-flags": {
        "eljam/guzzle-jwt-middleware": 20,
        "unicaen/api": 20,
        "unicaen/authentification": 20,
        "unicaen/db-import": 20,
        "unicaen/pegase-coc-ext-api": 20,
        "unicaen/sygal-api": 20
+11 −1
Original line number Diff line number Diff line
Connecteur Pégase-SyGAL
=======================

<!-- TOC -->
* [Connecteur Pégase-SyGAL](#connecteur-pégase-sygal)
  * [Flux Autorisation de diplomation (SyGAL => Pégase)](#flux-autorisation-de-diplomation-sygal--pégase)
    * [Configuration](#configuration)
    * [Envoi d'une Autorisation de diplomation de test vers Pégase en ligne de commande](#envoi-dune-autorisation-de-diplomation-de-test-vers-pégase-en-ligne-de-commande)
    * [Envoi d'une Autorisation de diplomation vers Pégase](#envoi-dune-autorisation-de-diplomation-vers-pégase)
<!-- TOC -->


Flux Autorisation de diplomation (SyGAL => Pégase)
--------------------------------------------------

@@ -8,7 +17,8 @@ Flux Autorisation de diplomation (SyGAL => Pégase)

- SyGAL

Idem "Flux Autorisation d'inscription (SyGAL => Pégase)".
Idem "Flux Autorisation d'inscription (SyGAL => Pégase)", 
cf. ([flux_autorisation_inscription.md](../../AutorisationInscriptionThese/doc/flux_autorisation_inscription.md)).

- Pégase

+57 −16
Original line number Diff line number Diff line
@@ -5,35 +5,68 @@ namespace AutorisationDiplomationThese\Tx\Entity\Db\Service;
use Application\Attribute\DependsOn;
use Application\Attribute\InjectConfig;
use Application\Entity\Db\Role;
use Tx\Entity\Db\Service\AbstractTxDataService;
use AutorisationDiplomationThese\Entity\Db\AutorisationDiplomationThese;
use AutorisationDiplomationThese\Service\Entity\AutorisationDiplomationTheseService;
use AutorisationDiplomationThese\Service\Entity\AutorisationDiplomationTheseServiceAwareTrait;
use AutorisationDiplomationThese\Tx\Entity\Db\TxData;
use AutorisationDiplomationThese\Tx\Entity\Db\Repository\TxDataRepository;
use AutorisationDiplomationThese\Tx\Entity\Db\TxData;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use InvalidArgumentException;
use RuntimeException;
use These\Entity\Db\These;
use These\Service\These\TheseService;
use These\Service\These\TheseServiceAwareTrait;
use Tx\Entity\Db\Service\AbstractTxDataService;
use UnicaenPegaseCocExtApi\Model\DiplomationTroisiemeCycle;
use Webmozart\Assert\Assert;

#[DependsOn(EntityManager::class)]
#[DependsOn(TheseService::class)]
#[DependsOn(AutorisationDiplomationTheseService::class)]
#[InjectConfig('unicaen-pegase-coc-ext-api > codes_types_resultats')] /** @see setCodesTypesResultats() */
#[InjectConfig('unicaen_pegase > codes_structures_etablissements')] /** @see setCodesStructuresEtablissements() */
#[InjectConfig('unicaen_pegase > codes_types_resultats')] /** @see setCodesTypesResultats() */
class TxDataService extends AbstractTxDataService
{
    public const VALIDE = 'VALIDE';
    public const NON_VALIDE = 'NON_VALIDE';

    use TheseServiceAwareTrait;
    use AutorisationDiplomationTheseServiceAwareTrait;

    /**
     * Codes des établissements Pégase selon le contexte (ex : selon l'établissement concerné)
     *
     * Exemple :
     *
     *      [
     *           'UCN' => 'ETAB00',
     *           'INSA' => 'ETAB00',
     *      ],
     *
     * @var array<string, string>
     */
    private array $codesStructuresEtablissements;

    public function setCodesStructuresEtablissements(array $codesStructuresEtablissements): void
    {
        $this->codesStructuresEtablissements = $codesStructuresEtablissements;
    }

    /**
     * Codes des types de résultats Pégase selon le contexte (ex : selon l'établissement concerné)
     *
     * Exemple :
     *
     *      [
     *          'UCN' => [
     *              'VALIDE' => 'TRE009',
     *              'NON_VALIDE' => 'TRE010',
     *          ],
     *          'INSA' => [
     *              'VALIDE' => 'XXXX',
     *              'NON_VALIDE' => 'YYYY',
     *          ],
     *      ],
     *
     * @var array<string, array<string>>
     */
    private array $codesTypesResultats;

    public function setCodesTypesResultats(array $codesTypesResultats): void
@@ -48,20 +81,19 @@ class TxDataService extends AbstractTxDataService
        return $repo;
    }

    public function createQueryBuilder(): QueryBuilder
    {
        return $this->getRepository()->createQueryBuilder('autorisationDiplomationThese');
    }

    /**
     * Retourne simplement une nouvelle instance de la classe d'entité gérée par ce service.
     */
    public function createEntity(array $params): TxData
    {
        /** @var AutorisationDiplomationThese $autorisation */
        $autorisation = $params['autorisation'];

        $instance = new TxData();
        $instance->setAutorisationDiplomationThese($autorisation);
        $instance->setCodeStructureEtablissement(
            $this->codesStructuresEtablissements[$autorisation->getThese()->getEtablissement()->getSourceCode()] ?? null
        );

        // 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é :
@@ -168,18 +200,27 @@ class TxDataService extends AbstractTxDataService
        $valeur = $autorisation->getAutorisation();
        Assert::notNull($valeur, "La valeur de l'autorisation n°{$autorisation->getId()}) est null !");

        $etablissement = $autorisation->getThese()->getEtablissement();
        $codeEtablissement = $etablissement->getSourceCode();

        Assert::keyExists(
            $this->codesTypesResultats,
            $codeEtablissement,
            "La clé %s n'existe pas dans la config des codes de types de résultats."
        );

        if ($valeur === true) {
            $key = self::VALIDE;
        } else {
            $key = self::NON_VALIDE;
        }
        Assert::keyExists(
            $this->codesTypesResultats,
            $this->codesTypesResultats[$codeEtablissement],
            $key,
            "La clé '$key' n'existe pas dans la config des codes de types de résultats."
            "La clé %s n'existe pas dans la config des codes de types de résultats."
        );

        return $this->codesTypesResultats[$key];
        return $this->codesTypesResultats[$codeEtablissement][$key];
    }

    private function extractDirecteurThese(array $acteurs): array
+22 −5
Original line number Diff line number Diff line
@@ -2,21 +2,22 @@

namespace AutorisationDiplomationThese\Tx\Process;

use Application\Attribute\InjectConfig;
use InvalidArgumentException;
use Tx\Process\AbstractTxProcess;
use Tx\Process\TxProcessInterface;
use AutorisationDiplomationThese\Service\Entity\AutorisationDiplomationTheseServiceAwareTrait;
use InvalidArgumentException;
use UnicaenPegaseCocExtApi\Api\TroisiemeCycleApiAwareTrait;
use UnicaenPegaseCocExtApi\Api\TroisiemeCycleApi;
use UnicaenPegaseCocExtApi\Model\DiplomationTroisiemeCycle;
use Webmozart\Assert\Assert;

/**
 * @property \AutorisationDiplomationThese\Tx\Entity\Db\TxData $txData
 * @property \Doctrine\ORM\EntityManager $objectManager
 */
#[InjectConfig('unicaen_pegase > api_clients')] /** @see setApiClients() */
class TxProcess extends AbstractTxProcess implements TxProcessInterface
{
    use AutorisationDiplomationTheseServiceAwareTrait;
    use TroisiemeCycleApiAwareTrait;
    protected TroisiemeCycleApi $troisiemeCycleApi;

    protected function prepareParams(array $params = []): array
    {
@@ -77,6 +78,22 @@ class TxProcess extends AbstractTxProcess implements TxProcessInterface
        return $troisiemeCycleData;
    }

    /**
     * @throws \Tx\Process\TxProcessException
     */
    protected function createApi(): void
    {
        // le client d'API Pégase à utiliser dépend de l'établissement d'inscription
        $etablissement = $this->txData->getAutorisationDiplomationThese()->getThese()->getEtablissement();
        $codeEtablissement = $etablissement->getSourceCode();
        $restClient = $this->getApiClient($codeEtablissement);
        $restClientOptions = $this->getApiClientOptions($codeEtablissement);

        $configuration = $this->createConfiguration($restClientOptions);

        $this->troisiemeCycleApi = new TroisiemeCycleApi($restClient, $configuration);
    }

    /**
     * @param DiplomationTroisiemeCycle $payload
     * @param array $params
Loading