Commit 31683e27 authored by Thomas Hamel's avatar Thomas Hamel
Browse files

génération d'un zip pour l'export des admissions

parent 39cf6412
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ use Admission\Service\Document\DocumentService;
use Admission\Service\Document\DocumentServiceFactory;
use Admission\Service\Etudiant\EtudiantService;
use Admission\Service\Etudiant\EtudiantServiceFactory;
use Admission\Service\Exporter\Admission\AdmissionExporter;
use Admission\Service\Exporter\Recapitulatif\RecapitulatifExporter;
use Admission\Service\Exporter\Recapitulatif\RecapitulatifExporterFactory;
use Admission\Service\Financement\FinancementService;
@@ -65,6 +66,7 @@ use Doctrine\ORM\Mapping\Driver\XmlDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use Laminas\ServiceManager\Factory\InvokableFactory;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;

@@ -421,6 +423,7 @@ return array(
            UrlService::class => UrlServiceFactory::class,

            RecapitulatifExporter::class => RecapitulatifExporterFactory::class,
            AdmissionExporter::class => InvokableFactory::class,

            ExtractionEmailRule::class => ExtractionEmailRuleFactory::class
        ],
+28 −49
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ use Admission\Service\Admission\AdmissionServiceAwareTrait;
use Admission\Service\ConventionFormationDoctorale\ConventionFormationDoctoraleServiceAwareTrait;
use Admission\Service\Document\DocumentServiceAwareTrait;
use Admission\Service\Etudiant\EtudiantServiceAwareTrait;
use Admission\Service\Exporter\Admission\AdmissionExporterAwareTrait;
use Admission\Service\Exporter\Recapitulatif\RecapitulatifExporterAwareTrait;
use Admission\Service\Financement\FinancementServiceAwareTrait;
use Admission\Service\Inscription\InscriptionServiceAwareTrait;
@@ -49,7 +50,6 @@ use Notification\Service\NotifierServiceAwareTrait;
use Structure\Service\Etablissement\EtablissementServiceAwareTrait;
use UnicaenApp\Form\Fieldset\MultipageFormNavFieldset;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenApp\View\Model\CsvModel;

class AdmissionController extends AdmissionAbstractController {

@@ -73,6 +73,7 @@ class AdmissionController extends AdmissionAbstractController {
    use ConventionFormationDoctoraleServiceAwareTrait;
    use RoleServiceAwareTrait;
    use AdmissionRechercheServiceAwareTrait;
    use AdmissionExporterAwareTrait;

    public function indexAction(): ViewModel|Response
    {
@@ -691,7 +692,7 @@ class AdmissionController extends AdmissionAbstractController {
        return $navigationElement;
    }

    public function genererExportCsvAction(): Response|CsvModel
    public function genererExportCsvAction(): Response|JsonModel
    {
        $queryParams = $this->params()->fromQuery();

@@ -717,53 +718,31 @@ class AdmissionController extends AdmissionAbstractController {
            ->setParameter('etat', Etat::CODE_VALIDE);
        $listing = $qb->getQuery()->getResult();

        //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'
        ];
        $records = [];
        /** @var Admission $admission */
        foreach ($listing as $admission) {
            $entry = [];
            /** @var Etudiant $etudiant */
            $etudiant = $admission->getEtudiant()->first();
            $entry['numero_candidat'] = $etudiant->getNumeroCandidat();
            $entry['sexe'] = rtrim($etudiant->getSexe(), '.');
            $entry['nom_famille'] = $etudiant->getNomFamille();
            $entry['nom_usuel'] = $etudiant->getNomUsuel();
            $entry['prenom'] = $etudiant->getPrenom();
            $entry['prenom2'] = $etudiant->getPrenom2();
            $entry['prenom3'] = $etudiant->getPrenom3();
            $entry['date_naissance'] = $etudiant->getDateNaissance();
            $entry['code_commune_naissance'] = $etudiant->getCodeCommuneNaissance();
            $entry['libellé_commune_naissance'] = $etudiant->getLibelleCommuneNaissance();
            $entry['code_pays_naissance'] = $etudiant->getPaysNaissance() ? $etudiant->getPaysNaissance()->getCodePaysApogee() : null;
            $entry['code_nationalite'] = $etudiant->getNationalite() ? $etudiant->getNationalite()->getCodePaysApogee() : null;
            $entry['ine'] = $etudiant->getIne();
            $entry['adresse_code_pays'] = $etudiant->getAdresseCodePays() ? $etudiant->getAdresseCodePays()->getCodePaysApogee() : null;
            $entry['adresse_ligne1_etage'] = $etudiant->getAdresseLigne1Etage();
            $entry['adresse_ligne2_batiment'] = $etudiant->getAdresseLigne2Batiment();
            $entry['adresse_ligne3_voie'] = $etudiant->getAdresseLigne3voie();
            $entry['adresse_ligne4_complement'] = $etudiant->getAdresseLigne4Complement();
            $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') . '_admissions.csv';
        $CSV = new CsvModel();
        $CSV->setDelimiter(';');
        $CSV->setEnclosure('"');
        $CSV->setHeader($headers);
        $CSV->setData($records);
        $CSV->setFilename($filename);

        return $CSV;
        //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);
        }catch (Exception $e){
            throw new RuntimeException("Un problème est survenu lors de la génération du ZIP",0,$e);
        }

        $response = $this->getResponse();
        $response->getHeaders()->addHeaders([
            'Content-Type' => 'application/zip',
            'Content-Disposition' => 'attachment; filename="'.$filenameZIP.'"',
            'Content-Length' => filesize($zipFilename)
        ]);
        $response->setContent(file_get_contents($zipFilename));

        unlink($zipFilename);

        return $response;
    }

    /** TEMPLATES RENDERER *******************************************************************************/
+3 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ use Admission\Service\Admission\AdmissionService;
use Admission\Service\ConventionFormationDoctorale\ConventionFormationDoctoraleService;
use Admission\Service\Document\DocumentService;
use Admission\Service\Etudiant\EtudiantService;
use Admission\Service\Exporter\Admission\AdmissionExporter;
use Admission\Service\Exporter\Recapitulatif\RecapitulatifExporter;
use Admission\Service\Financement\FinancementService;
use Admission\Service\Inscription\InscriptionService;
@@ -58,6 +59,7 @@ class AdmissionControllerFactory implements FactoryInterface
        $conventionFormationDoctoraleService = $container->get(ConventionFormationDoctoraleService::class);
        $roleService = $container->get(RoleService::class);
        $admissionRechercheService = $container->get(AdmissionRechercheService::class);
        $admissionExporter = $container->get(AdmissionExporter::class);

        /** @var AdmissionOperationRule $admissionOperationRule */
        $admissionOperationRule = $container->get(AdmissionOperationRule::class);
@@ -88,6 +90,7 @@ class AdmissionControllerFactory implements FactoryInterface
        $controller->setConventionFormationDoctoraleService($conventionFormationDoctoraleService);
        $controller->setRoleService($roleService);
        $controller->setAdmissionRechercheService($admissionRechercheService);
        $controller->setAdmissionExporter($admissionExporter);

        return $controller;
    }
+1 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ class AdmissionRechercheController extends AbstractController implements SearchC
            'text' => $text,
            'routeName' => $this->routeName,
            'operations' => $operations,
            'role' => $this->userContextService->getSelectedIdentityRole(),
            'individu' => $individu,
            'admission' => $admission,
            'inputIndividu' => $inputIndividu,
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ class FinancementHydrator extends DoctrineObject
            $data["detailContratDoctoral"] = null;
        }

        if(isset($data["financement"]) && !empty($data["financement"])){
        if(isset($data["financement"]) && empty($data["financement"])){
            $data["financement"] = null;
        }

Loading