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

Déplacement d'éléments dans l'application

parent 09901c4c
Loading
Loading
Loading
Loading
Loading
+0 −27
Original line number Diff line number Diff line
<?php

namespace SygalApi\V1\Extractor;

use Laminas\Hydrator\ExtractionInterface;
use stdClass;
use Webmozart\Assert\Assert;

abstract class AbstractExtractor implements ExtractionInterface
{
    public function extract(object $object): array
    {
        Assert::isInstanceOf($object, stdClass::class);

        return [
            'source_id' => $this->extractSourceId($object),
            'source_code' => $this->extractSourceCode($object),
        ];
    }

    public function extractSourceId(stdClass $object)
    {
        return $object->instancePegase;
    }

    abstract public function extractSourceCode(stdClass $object): string;
}
 No newline at end of file
+0 −68
Original line number Diff line number Diff line
<?php

namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

use stdClass;
use SygalApi\V1\Extractor\AbstractExtractor;

class InscriptionAdministrativeApprenantExtractor extends AbstractExtractor
{
    private InscriptionAdministrativeExtractor $inscriptionAdministrativeExtractor;

    public function __construct()
    {
        $this->inscriptionAdministrativeExtractor = new InscriptionAdministrativeExtractor();
    }

    public function extract(object $object): array
    {
        $data = parent::extract($object);

        $inscriptionAdministrativeSourceCode = $this->inscriptionAdministrativeExtractor->extractSourceCode($object);

        /** @var array $apprenant */
        $apprenant = $object->apprenant;
        /** @var array $naissance */
        $naissance = $apprenant['naissance'];

        return array_merge($data, [
            'inscription_administrative_id' => $inscriptionAdministrativeSourceCode,
            //
            'code' => $apprenant['code'], // code apprenant pegase
            'INE' => $apprenant['INE'],
            'deuxieme_prenom' => $apprenant['deuxiemePrenom'],
            'genre' => $apprenant['genre'],
            'mail_personnel' => $apprenant['mailPersonnel'],
            'mail_urgence' => $apprenant['mailUrgence'],
            'nom_de_naissance' => $apprenant['nomDeNaissance'],
            'nom_usuel' => $apprenant['nomUsuel'],
            'prenom' => $apprenant['prenom'],
            'prenom_usage' => $apprenant['prenomUsage'],
            'telephone_personnel' => $apprenant['telephonePersonnel'],
            'telephone_urgence' => $apprenant['telephoneUrgence'],
            'troisieme_prenom' => $apprenant['troisiemePrenom'],
            // naissance :
            'commune_de_naissance' => $naissance['communeDeNaissance'],
            'commune_de_naissance_etranger' => $naissance['communeDeNaissanceEtranger'],
            'date_d_obtention_de_la_deuxieme_nationalite' => $naissance['dateDObtentionDeLaDeuxiemeNationalite'],
            'date_de_naissance' => $naissance['dateDeNaissance'],
            'deuxieme_nationalite' => $naissance['deuxiemeNationalite'],
            'libelle_commune_de_naissance' => $naissance['libelleCommuneDeNaissance'],
            'libelle_deuxieme_nationalite' => $naissance['libelleDeuxiemeNationalite'],
            'libelle_nationalite' => $naissance['libelleNationalite'],
            'libelle_pays_de_naissance' => $naissance['libellePaysDeNaissance'],
            'nationalite' => $naissance['nationalite'],
            'pays_de_naissance' => $naissance['paysDeNaissance'],
        ]);
    }

    public function extractSourceCode(stdClass $object): string
    {
        $inscriptionAdministrativeSourceCode = $this->inscriptionAdministrativeExtractor->extractSourceCode($object);

        /** @var array $apprenant */
        $apprenant = $object->apprenant;

        return $inscriptionAdministrativeSourceCode . '|' . $apprenant['code'];
    }
}
 No newline at end of file
+0 −76
Original line number Diff line number Diff line
<?php

namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

use stdClass;
use SygalApi\V1\Extractor\AbstractExtractor;
use Webmozart\Assert\Assert;

class InscriptionAdministrativeExtractor extends AbstractExtractor
{
    public function extract(object $object): array
    {
        $data = parent::extract($object);

        $numeroCandidature = $this->extractNumeroCandidature($object);

        /** @var array $inscription */
        $inscription = $object->inscription;

        /** @var array $periode */
        $periode = $inscription['periode'];

        return array_merge($data, [
            'ecole_doct_id' => $inscription['ecoleDoctorale'],
            //
            'no_candidat' => $numeroCandidature,
            'date_inscription' => $inscription['dateInscription'],
            'date_annulation' => $inscription['dateAnnulation'] ?? null,
            'cesure' => $inscription['cesure'],
            'chemin' => $inscription['chemin'],
            'formation' => $inscription['formation'],
            'mobilite' => $inscription['mobilite'],
            'origine' => $inscription['origine'],
            'principale' => $inscription['principale'],
            'regime_inscription_libelle' => $inscription['regimeInscription']['libelle'] ?? null,
            'statut_inscription' => $inscription['statutInscription'],
            'code_structure_etablissement_du_chemin' => $inscription['codeStructureEtablissementDuChemin'],
            //
            // Il n'est pas possible d'importer les périodes d'inscription dans une table dédiée parce que
            // l'id de l'inscription administrative est forgé à partir de l'établissement, de l'apprenant,
            // de la formation et de la période. Si on le faisait, on aurait une duplication de chaque inscription
            // par le nombre de périodes.
            'periode_code' => $periode['code'],
            'periode_libelle' => $periode['libelle'],
            'periode_date_debut' => $periode['dateDebut'],
            'periode_date_fin' => $periode['dateFin'],
            'periode_annee_universitaire' => $periode['anneeUniversitaire'],
        ]);
    }

    public function extractSourceCode(stdClass $object): string
    {
        // NB : l'id de l'inscription administrative est en réalité forgé (côté Pégase) à partir des attributs suivants :
        //   - la structure organisationnelle (code UAI, ex : 'ETAB00'),
        //   - l'apprenant (code apprenant, ex : '000001059'),
        //   - le chemin formation (ex : 'M-BIO-SANT>M1-BIO-SANT'),
        //   - la période (ex : 'PER-2023').
        //
        // Ex d'id reçu : "ETAB00@000001059@M-BIO-SANT>M1-BIO-SANT@PER-2023"
        //
        // Cela pose problème : si l'inscription est modifiée dans Pégase (i.e. la valeur de l'un des attributs change),
        // SyGAL crée une nouvelle inscription !

        return $object->id;
    }

    public function extractNumeroCandidature(stdClass $object): string
    {
        /** @var array $inscription */
        $inscription = $object->inscription;

        Assert::keyExists($inscription, 'noCandidat');

        return $inscription['noCandidat'];
    }
}
 No newline at end of file