Loading config/v1/schema/inscription/doctorant-api-v1.yaml +46 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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: | Loading @@ -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: Loading @@ -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 Loading Loading @@ -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 Loading src/V1/Rest/InscriptionAdministrative/Extractor/AbstractExtractor.php +2 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 src/V1/Rest/InscriptionAdministrative/Extractor/DoctorantExtractor.php +5 −5 Original line number Diff line number Diff line Loading @@ -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; Loading src/V1/Rest/InscriptionAdministrative/Extractor/IndividuExtractor.php +12 −12 Original line number Diff line number Diff line Loading @@ -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, /* Loading Loading @@ -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; Loading src/V1/Rest/InscriptionAdministrative/Extractor/InscriptionExtractor.php +40 −22 Original line number Diff line number Diff line Loading @@ -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 Loading
config/v1/schema/inscription/doctorant-api-v1.yaml +46 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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: | Loading @@ -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: Loading @@ -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 Loading Loading @@ -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 Loading
src/V1/Rest/InscriptionAdministrative/Extractor/AbstractExtractor.php +2 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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
src/V1/Rest/InscriptionAdministrative/Extractor/DoctorantExtractor.php +5 −5 Original line number Diff line number Diff line Loading @@ -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; Loading
src/V1/Rest/InscriptionAdministrative/Extractor/IndividuExtractor.php +12 −12 Original line number Diff line number Diff line Loading @@ -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, /* Loading Loading @@ -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; Loading
src/V1/Rest/InscriptionAdministrative/Extractor/InscriptionExtractor.php +40 −22 Original line number Diff line number Diff line Loading @@ -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