Commit 501de00d authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP API : extractors pour extraires individu et doctorant des insc admin

parent 448f1d6f
Loading
Loading
Loading
Loading
Loading
+46 −2
Original line number Diff line number Diff line
@@ -59,6 +59,14 @@ components:
  Apprenant:
    type: object
    description: Les données de l'apprenant
    required:
      - code
      - INE
      - nomDeNaissance
      - nomUsuel
      - prenom
      - genre
      - naissance
    properties:
      code:
        type: string
@@ -91,9 +99,12 @@ components:
        $ref: '#/components/schemas/Naissance'
      mailPersonnel:
        type: string
        format: email
        description: Adresse de messagerie électronique personnelle
      mailUrgence:
        type: string
        format: email
        nullable: true
        description: Adresse de messagerie électronique d'urgence
      telephonePersonnel:
        type: string
@@ -109,6 +120,16 @@ components:
        $ref: '#/components/schemas/Adresse'
  Inscription:
    type: object
    required:
      - noCandidat
      - origine
      - chemin
      - periode
      - statutInscription
      - cesure
      - mobilite
      - ecoleDoctorale
      - dateInscription
    properties:
      noCandidat:
        type: string
@@ -169,23 +190,31 @@ components:
        description: code de la nomenclature école doctorale
      dateInscription:
        type: string
        format: date
        description: La date de l'inscription au format AAAA-MM-JJ
      dateAnnulation:
        type: string
        format: date
        nullable: true
        description: La date d'annulation de l'inscription au format AAAA-MM-JJ

  Naissance:
    type: object
    required:
      - dateDeNaissance
      - paysDeNaissance
      - nationalite
    properties:
      dateDeNaissance:
        type: string
        description: La date de naissance au format AAAA-MM-JJ
      paysDeNaissance:
        type: string
        pattern: '^[A-Z]{2}$'
        description: |
          Le code pays du pays de naissance (code ISO-alpha 2)
          Ex : 100 = France
        example: 100
          Ex : 'FR' = France
        example: FR
      libellePaysDeNaissance:
        type: string
        description: |
@@ -206,18 +235,25 @@ components:
        description: La commune de naissance à l'étranger
      nationalite:
        type: string
        pattern: '^[A-Z]{2}$'
        description: Le code pays associé à la nationalité (code ISO-alpha 2)
        example: 'FR'
      libelleNationalite:
        type: string
        description: Le libelle pays associé à la nationalité issu de la nomenclature Pays et Nationalités
      deuxiemeNationalite:
        type: string
        pattern: '^[A-Z]{2}$'
        nullable: true
        description: Le code pays associé à la deuxième nationalité (code ISO-alpha 2)
        example: 'UA'
      libelleDeuxiemeNationalite:
        type: string
        description: Le libelle pays associé à la deuxième nationalité issu de la nomenclature Pays et Nationalités
      dateDObtentionDeLaDeuxiemeNationalite:
        type: string
        format: date
        nullable: true
        description: La date d'obtention de la deuxième nationalité au format AAAA-MM-JJ

  Adresse:
@@ -227,7 +263,9 @@ components:
    properties:
      pays:
        type: string
        pattern: '^[A-Z]{2}$'
        description: Code ISO-alpha 2 du pays (FR pour la France, sinon l'adresse est à l'étranger)
        example: 'FR'
      libellePays:
        type: string
        description: libelle du pays
@@ -259,6 +297,12 @@ components:
  Periode:
    description: La période de mise en œuvre associée à la formation
    type: object
    required:
      - code
      - libelle
      - dateDebut
      - dateFin
      - anneeUniversitaire
    properties:
      code:
        type: string
+2 −8
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

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

@@ -18,17 +19,10 @@ abstract class AbstractExtractor implements ExtractionInterface
        ];
    }

    protected function val(array $data, string $key)
    {
        $value = $data[$key] ?? null;

        return $value ?: null;
    }

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

    abstract protected function extractSourceCode(stdClass $object);
    abstract protected function extractSourceCode(stdClass $object): string;
}
 No newline at end of file
+5 −5
Original line number Diff line number Diff line
@@ -14,24 +14,24 @@ class DoctorantExtractor extends AbstractExtractor
        /** @var array $apprenant */
        $apprenant = $object->apprenant;

        $individuSourceCode = $this->val($apprenant, 'INE');
        $individuSourceCode = $apprenant['INE'];

        return array_merge($data, [
            'individu_id' => $individuSourceCode,
            'code_apprenant_in_source' => $this->val($apprenant, 'code'), // id métier de l'apprenant dans la source d'import = code apprenant pegase
            'code_apprenant_in_source' => $apprenant['code'], // id métier de l'apprenant dans la source d'import = code apprenant pegase
            //
            'ine' => $this->val($apprenant, 'INE'),
            'ine' => $apprenant['INE'],
            'source_insert_date' => null,
        ]);
    }

    protected function extractSourceCode(stdClass $object)
    protected function extractSourceCode(stdClass $object): string
    {
        /** @var array $apprenant */
        $apprenant = $object->apprenant;
        Assert::keyExists($apprenant, 'INE', "Clé %s introuvable dans les données apprenant");

        $ine = $this->val($apprenant, 'INE');
        $ine = $apprenant['INE'];
        Assert::notEmpty($ine, "L'INE dans les données apprenant ne doit pas être vide");

        return $ine;
+12 −12
Original line number Diff line number Diff line
@@ -16,21 +16,21 @@ class IndividuExtractor extends AbstractExtractor
        /** @var array $apprenant */
        $apprenant = $object->apprenant;
        /** @var array $naissance */
        $naissance = $this->val($apprenant, 'naissance');
        $naissance = $apprenant['naissance'];

        return array_merge($data, [
            'type' => 'doctorant',
            'civ' => ['M'=>Individu::CIVILITE_M, 'F'=>Individu::CIVILITE_MME][$this->val($apprenant, 'genre')] ?? null,
            'lib_nom_usu_ind' => $this->val($apprenant, 'nomUsuel'),
            'lib_nom_pat_ind' => $this->val($apprenant, 'nomDeNaissance'),
            'lib_pr1_ind' => $this->val($apprenant, 'prenom'),
            'lib_pr2_ind' => $this->val($apprenant, 'deuxiemePrenom'),
            'lib_pr3_ind' => $this->val($apprenant, 'troisiemePrenom'),
            'email' => $this->val($apprenant, 'mailPersonnel'),
            'civ' => ['M'=>Individu::CIVILITE_M, 'F'=>Individu::CIVILITE_MME][$apprenant['genre']] ?? null,
            'lib_nom_usu_ind' => $apprenant['nomUsuel'],
            'lib_nom_pat_ind' => $apprenant['nomDeNaissance'],
            'lib_pr1_ind' => $apprenant['prenom'],
            'lib_pr2_ind' => $apprenant['deuxiemePrenom'] ?? null,
            'lib_pr3_ind' => $apprenant['troisiemePrenom'] ?? null,
            'email' => $apprenant['mailPersonnel'] ?? null,
            'dat_nai_per' => $naissance['dateDeNaissance'],
            //'codepaysnationalite' => $naissance['nationalite'], // todo : obsolète
            //'codepaysnationalite' => $naissance['nationalite'], // todo : colonne 'codepaysnationalite' obsolète
            'cod_pay_nat' => $naissance['nationalite'],
            'lib_nat' => $naissance['libelleNationalite'],
            'lib_nat' => $naissance['libelleNationalite'] ?? null,
            'supann_id' => null, // todo : quid ?
            'source_insert_date' => null,
            /*
@@ -63,13 +63,13 @@ class IndividuExtractor extends AbstractExtractor
        ]);
    }

    protected function extractSourceCode(stdClass $object)
    protected function extractSourceCode(stdClass $object): string
    {
        /** @var array $apprenant */
        $apprenant = $object->apprenant;
        Assert::keyExists($apprenant, 'INE', "Clé %s introuvable dans les données apprenant");

        $ine = $this->val($apprenant, 'INE');
        $ine = $apprenant['INE'];
        Assert::notEmpty($ine, "L'INE dans les données apprenant ne doit pas être vide");

        return $ine;
+40 −22
Original line number Diff line number Diff line
@@ -2,36 +2,54 @@

namespace SygalApi\V1\Rest\InscriptionAdministrative\Extractor;

use Laminas\Hydrator\ExtractionInterface;
use stdClass;

class InscriptionExtractor extends AbstractExtractor
{
    public function extract(object $object): array
    {
        return [
            'source_id' => $object->instancePegase,
            'source_code' => 'INSC_123456879', // Id Pegase inscription (merge request en cours)

            'doctorant_id' => $object->apprenant->INE,
            'ecole_doctorale_id' => $object->inscription->ecoleDoctorale,

            'no_candidat' => $object->noCandidat,
            'date_inscription' => $object->dateInscription,
            'date_annulation' => $object->dateAnnulation,
            'cesure' => $object->cesure,
            'chemin' => $object->chemin,
            'formation' => $object->formation,
            'mobilite' => $object->mobilite,
            'origine' => $object->origine,
            'principale' => $object->principale,
            'regime_inscription_libelle' => $object->regimeInscriptionLibelle,
            'statut_inscription' => $object->statutInscription,
        ];
        $data = parent::extract($object);

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

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

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

        return array_merge($data, [
            'doctorant_id' => $apprenant['INE'],
            'ecole_doct_id' => $inscription['ecoleDoctorale'],
            //
            'no_candidat' => $inscription['noCandidat'] ?? null,
            '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'],
        ]);
    }

    protected function extractSourceCode(stdClass $object)
    protected function extractSourceCode(stdClass $object): string
    {
        // TODO: Implement extractSourceCode() method.
        return $object->id;
    }
}
 No newline at end of file