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

Merge branch 'feature_deplacement_autoris_diplom' into test

parents e2b48298 27b0ca75
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ Journal des modifications

13.1.0
------
- Admission : nouveau format de fichier unique CSV des futurs doctorants/apprenants (importable par Pégase).
- Association d'individu à un membre de jury : si un acteur existe déjà avec le même individu et le même rôle pas besoin d'en créer un nouveau.
- [FIX] Plantage lors de la suppression d'un dossier d'admission : toutes les données liées n'étaient pas supprimées correctement au préalable.
- [FIX] Plantage lors de la suppression d'une association d'individu à un membre de jury en l'absence de directeur de thèse.
+1 −2
Original line number Diff line number Diff line
@@ -1028,14 +1028,13 @@ class AdmissionController extends AdmissionAbstractController

        //Génération des CSV
        $admisCSV = $this->admissionExporter->exportAdmisCSV($listing);
        $admissionsCSV = $this->admissionExporter->exportAdmissionsCSV($listing);

        //Création du fichier ZIP
        $zipFilename = tempnam(sys_get_temp_dir(), 'export_') . '.zip';
        $filenameZIP = (new DateTime())->format('Ymd') . '_export_module_admissions.zip';

        try{
            $this->admissionExporter->exportToZip([$admisCSV, $admissionsCSV], $zipFilename);
            $this->admissionExporter->exportToZip([$admisCSV], $zipFilename);
        }catch (Exception $e){
            throw new RuntimeException("Un problème est survenu lors de la génération du ZIP",0,$e);
        }
+122 −48
Original line number Diff line number Diff line
@@ -11,9 +11,13 @@ use RuntimeException;
use UnicaenApp\View\Model\CsvModel;
use ZipArchive;

class AdmissionExporter{

class AdmissionExporter
{
    use TransmissionServiceAwareTrait;

    private const origine_admission1 = 'ED';
    private const code_regime_inscription1 = 'REG006';

    public function exportToZip(array $csvs, string $zipFilename): ZipArchive
    {
        // Création de l'archive ZIP
@@ -56,32 +60,96 @@ class AdmissionExporter{
        return $content;
    }

    public function exportAdmisCSV($admissions): CsvModel
    /**
     * @param Admission[] $admissions
     */
    public function exportAdmisCSV(array $admissions): CsvModel
    {
        //export
        $headers = ['numero_candidat', 'sexe', 'nom_famille', 'nom_usuel', 'prenom', 'prenom2', 'prenom3',	'date_naissance', 'code_commune_naissance',
            'libellé_commune_naissance', 'code_pays_naissance',	'code_nationalite',	'ine', 'adresse_code_pays',	'adresse_ligne1_etage',
            'adresse_ligne2_batiment',	'adresse_ligne3_voie',	'adresse_ligne4_complement', 'adresse_code_postal',	'adresse_code_commune',
            'adresse_cp_ville_etranger', 'numero_telephone1', 'numero_telephone2', 'courriel'
        $headers = [
            'sexe',
            'nom_naissance',
            'nom_usage',
            'prenom',
            'prenom2',
            'prenom3',
            'date_naissance',
            'code_commune_naissance',
            'libelle_commune_naissance_etranger',
            'code_pays_naissance',
            'code_nationalite',
            'ine',
            'adresse_code_pays',
            'adresse_ligne1_etage',
            'adresse_ligne2_batiment',
            'adresse_ligne3_voie',
            'adresse_ligne4_complement',
            'adresse_ligne5_etranger',
            'adresse_code_postal',
            'adresse_code_commune',
            'numero_telephone1',
            'numero_telephone2',
            'mail',
            //
            'origine_admission1',
            'code_voeu1',
            'code_periode1',
            'annee_concours1',
            'code_regime_inscription1',
            'code_profil_specifique1',
            'code_cursus_amenage_sise1',
            'origine_admission2',
            'annee_concours2',
            'code_voeu2',
            'code_periode2',
            'code_regime_inscription2',
            'code_profil_specifique2',
            'code_cursus_amenage_sise2',
            'origine_admission3',
            'annee_concours3',
            'code_voeu3',
            'code_periode3',
            'code_regime_inscription3',
            'code_profil_specifique3',
            'code_cursus_amenage_sise3',
            'origine_admission4',
            'annee_concours4',
            'code_voeu4',
            'code_periode4',
            'code_regime_inscription4',
            'code_profil_specifique4',
            'code_cursus_amenage_sise4',
            'origine_admission5',
            'annee_concours5',
            'code_voeu5',
            'code_periode5',
            'code_regime_inscription5',
            'code_profil_specifique5',
            'code_cursus_amenage_sise5',
        ];

        $records = [];
        /** @var Admission $admission */

        foreach ($admissions as $admission) {
            $entry = [];
            /** @var Transmission $transmission */
            $transmission = $this->transmissionService->getRepository()->findOneBy(["admission" => $admission]);

            /** @var Etudiant $etudiant */
            $etudiant = $admission->getEtudiant()->first();
            if ($sexe = $admission->getIndividu()->getCivilite()) {
                $sexe = rtrim($sexe, '.') === "M" ? "M" : "F";
            }

            $entry = [];

            $entry['sexe'] = $sexe;
            $entry['nom_famille'] = $etudiant->getNomFamille();
            $entry['nom_usuel'] = $etudiant->getNomUsuel();
            $entry['nom_naissance'] = $etudiant->getNomFamille();
            $entry['nom_usage'] = $etudiant->getNomUsuel();
            $entry['prenom'] = $etudiant->getPrenom();
            $entry['prenom2'] = $etudiant->getPrenom2();
            $entry['prenom3'] = $etudiant->getPrenom3();
            $entry['date_naissance'] = $etudiant->getDateNaissanceFormat();
            $entry['code_commune_naissance'] = $etudiant->getCodeCommuneNaissance();
            $entry['libellé_commune_naissance'] = $etudiant->getLibelleCommuneNaissance();
            $entry['libelle_commune_naissance_etranger'] = null;
            $entry['code_pays_naissance'] = $etudiant->getPaysNaissance() ? $etudiant->getPaysNaissance()->getCodePaysApogee() : null;
            $entry['code_nationalite'] = $etudiant->getNationalite() ? $etudiant->getNationalite()->getCodePaysApogee() : null;
            $entry['ine'] = $etudiant->getIne();
@@ -90,47 +158,53 @@ class AdmissionExporter{
            $entry['adresse_ligne2_batiment'] = $etudiant->getAdresseLigne2Batiment();
            $entry['adresse_ligne3_voie'] = $etudiant->getAdresseLigne3voie();
            $entry['adresse_ligne4_complement'] = $etudiant->getAdresseLigne4Complement();
            $entry['adresse_ligne5_etranger'] = null;
            $entry['adresse_code_postal'] = $etudiant->getAdresseCodePostal();
            $entry['adresse_code_commune'] = $etudiant->getAdresseCodeCommune();
            $entry['adresse_cp_ville_etranger'] = $etudiant->getAdresseCpVilleEtrangere();
            $entry['numero_telephone1'] = (string)$etudiant->getNumeroTelephone1();
            $entry['numero_telephone2'] = (string)$etudiant->getNumeroTelephone2();
            $entry['courriel'] = $etudiant->getCourriel();
            $records[] = $entry;
        }
        $filename = (new DateTime())->format('Ymd') . '_admis.csv';
        $CSV = new CsvModel();
        $CSV->setDelimiter(';');
        $CSV->setEnclosure('"');
        $CSV->setHeader($headers);
        $CSV->setData($records);
        $CSV->setFilename($filename);
            $entry['mail'] = $etudiant->getCourriel();
            //
            $entry['origine_admission1'] = self::origine_admission1;
            $entry['code_voeu1'] = $transmission?->getCodeVoeu();
            $entry['code_periode1'] = $transmission?->getCodePeriode();
            $entry['annee_concours1'] = null;
            $entry['code_regime_inscription1'] = self::code_regime_inscription1;
            $entry['code_profil_specifique1'] = null;
            $entry['code_cursus_amenage_sise1'] = null;
            $entry['origine_admission2'] = null;
            $entry['annee_concours2'] = null;
            $entry['code_voeu2'] = null;
            $entry['code_periode2'] = null;
            $entry['code_regime_inscription2'] = null;
            $entry['code_profil_specifique2'] = null;
            $entry['code_cursus_amenage_sise2'] = null;
            $entry['origine_admission3'] = null;
            $entry['annee_concours3'] = null;
            $entry['code_voeu3'] = null;
            $entry['code_periode3'] = null;
            $entry['code_regime_inscription3'] = null;
            $entry['code_profil_specifique3'] = null;
            $entry['code_cursus_amenage_sise3'] = null;
            $entry['origine_admission4'] = null;
            $entry['annee_concours4'] = null;
            $entry['code_voeu4'] = null;
            $entry['code_periode4'] = null;
            $entry['code_regime_inscription4'] = null;
            $entry['code_profil_specifique4'] = null;
            $entry['code_cursus_amenage_sise4'] = null;
            $entry['origine_admission5'] = null;
            $entry['annee_concours5'] = null;
            $entry['code_voeu5'] = null;
            $entry['code_periode5'] = null;
            $entry['code_regime_inscription5'] = null;
            $entry['code_profil_specifique5'] = null;
            $entry['code_cursus_amenage_sise5'] = null;

        return $CSV;
    }

    public function exportAdmissionsCSV($admissions): CsvModel
    {
        //export
        $headers = ['numero_candidat', 'origine_admission', 'voie_admission', 'annee_concours', 'code_voeu', 'code_periode', 'code_sise', 'code_formation_psup', 'code_etablissement_affectation'];
        $records = [];
        /** @var Admission $admission */
        foreach ($admissions as $admission) {
            /** @var Transmission $transmission */
            $transmission = $this->transmissionService->getRepository()->findOneBy(["admission" => $admission]);

            $entry = [];
            $entry['origine_admission'] = "CO";
            $entry['voie_admission'] = "D";
            $entry['annee_concours'] = null;
            $entry['code_voeu'] = $transmission?->getCodeVoeu();
            $entry['code_periode'] = $transmission?->getCodePeriode();
            $entry['code_sise'] = null;
            $entry['code_formation_psup'] = null;
            $entry['code_etablissement_affectation'] = null;
            $records[] = $entry;
        }
        $filename = (new DateTime())->format('Ymd') . '_admissions.csv';

        $filename = (new DateTime())->format('Ymd') . '_admis.csv';
        $CSV = new CsvModel();
        $CSV->setDelimiter(';');
        $CSV->setEnclosure('"');