Loading module/Application/src/Application/Controller/Rapport/RapportCsiController.php +0 −1 Changes for module/Application/src/Application/Controller/Rapport/RapportCsiController.php: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ class RapportCsiController extends RapportController return new ViewModel([ 'rapports' => $rapportsAvecAutorisationInscription ?? $this->rapportsTeleverses, 'autorisationsInscription' => $this->fetchAutorisationsInscriptionParThese($this->these), 'these' => $this->these, 'form' => $this->form, 'isTeleversementPossible' => $this->isTeleversementPossible(), Loading module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AutorisationInscription.dcm.xml +6 −6 Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AutorisationInscription.dcm.xml: 6 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -13,17 +13,17 @@ <many-to-one field="individu" target-entity="Individu\Entity\Db\Individu"> <join-columns> <join-column name="INDIVIDU_ID" referenced-column-name="ID"/> <join-column name="INDIVIDU_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="these" target-entity="These\Entity\Db\These"> <join-column name="THESE_ID" referenced-column-name="ID"/> <join-column name="THESE_ID" referenced-column-name="id"/> </many-to-one> <many-to-one field="rapport" target-entity="Application\Entity\Db\Rapport"> <join-columns> <join-column name="RAPPORT_ID" referenced-column-name="ID"/> <join-column name="RAPPORT_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <field name="histoCreation" type="datetime" column="HISTO_CREATION"/> Loading @@ -32,17 +32,17 @@ <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_CREATEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> Loading module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TitreAcces.dcm.xml +2 −2 Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TitreAcces.dcm.xml: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -29,13 +29,13 @@ <many-to-one field="etablissement" target-entity="Structure\Entity\Db\Etablissement"> <join-columns> <join-column name="etab_id" referenced-column-name="ID"/> <join-column name="etab_id" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="pays" target-entity="Application\Entity\Db\Pays"> <join-columns> <join-column name="pays_id" referenced-column-name="ID"/> <join-column name="pays_id" referenced-column-name="id"/> </join-columns> </many-to-one> Loading module/Application/src/Application/Service/AutorisationInscription/AutorisationInscriptionService.php +1 −205 Changes for module/Application/src/Application/Service/AutorisationInscription/AutorisationInscriptionService.php: 1 added line, 205 removed lines. Original line number Diff line number Diff line Loading @@ -57,8 +57,7 @@ class AutorisationInscriptionService extends BaseService public function createQueryBuilder() : QueryBuilder { $qb = $this->getEntityManager()->getRepository(AutorisationInscription::class)->createQueryBuilder('autorisationInscription'); return $qb; return $this->getRepository()->createQueryBuilder('autorisationInscription'); } public function create(AutorisationInscription $autorisationInscription) : AutorisationInscription Loading Loading @@ -131,211 +130,8 @@ class AutorisationInscriptionService extends BaseService return $autorisationInscription; } /** * @param int $id * @return Rapport * @throws NoResultException */ public function findRapportById(int $id): Rapport { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->addSelect('t, f') ->join('ra.these', 't') ->join('ra.fichier', 'f') ->where('ra = :id')->setParameter('id', $id); try { return $qb->getQuery()->getSingleResult(); } catch (NonUniqueResultException $e) { throw new RuntimeException("Impossible mais vrai !"); } } /** * @param These $these * @param TypeRapport|null $type * @return Rapport[] */ public function findRapportsForThese(These $these, TypeRapport $type = null): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->addSelect('t, f') ->addSelect('tr')->join('ra.typeRapport', 'tr') ->join('ra.these', 't', Join::WITH, 't =:these')->setParameter('these', $these) ->join('ra.fichier', 'f') ->andWhereNotHistorise() ->orderBy('ra.anneeUniv'); if ($type !== null) { $qb->andWhere('tr = :type')->setParameter('type', $type); } return $qb->getQuery()->getResult(); } /** * Enregistre le rapport spécifié, après avoir créé le fichier à partir des données d'upload fournies. * * @param Rapport $rapport * @param array $uploadData Données résultant de l'upload de fichiers * @return Rapport Rapport annuel créé */ public function saveRapport(Rapport $rapport, array $uploadData): Rapport { $codeNatureFichier = $this->computeCodeNatureFichierFromTypeRapport($rapport); $this->fichierService->setNomFichierFormatter(new NomFichierRapportFormatter($rapport)); $fichiers = $this->fichierService->createFichiersFromUpload($uploadData, $codeNatureFichier); $this->entityManager->beginTransaction(); try { $this->fichierService->saveFichiers($fichiers); $fichier = array_pop($fichiers); // il n'y a en fait qu'un seul fichier $rapport->setFichier($fichier); $these = $rapport->getThese(); $these->addRapport($rapport); $this->entityManager->persist($rapport); $this->entityManager->flush($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de l'enregistrement des rapports annuels, rollback!", 0, $e); } return $rapport; } public function updateRapport(Rapport $rapport): Rapport { $this->entityManager->beginTransaction(); try { $this->entityManager->persist($rapport); $this->entityManager->flush($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de l'enregistrement des rapports, rollback!", 0, $e); } return $rapport; } private function computeCodeNatureFichierFromTypeRapport(Rapport $rapport): string { switch ($rapport->getTypeRapport()->getCode()) { case TypeRapport::RAPPORT_CSI: return NatureFichier::CODE_RAPPORT_CSI; case TypeRapport::RAPPORT_MIPARCOURS: return NatureFichier::CODE_RAPPORT_MIPARCOURS; default: throw new InvalidArgumentException("Le type du rapport spécifié n'est pas supporté"); } } /** * @param Rapport $rapport */ public function deleteRapport(Rapport $rapport) { $fichier = $rapport->getFichier(); $these = $rapport->getThese(); $this->entityManager->beginTransaction(); try { $this->rapportValidationService->deleteAllForRapport($rapport); $this->fichierService->supprimerFichiers([$fichier]); $these->removeRapport($rapport); $this->entityManager->remove($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de la suppression des rapports, rollback!", 0, $e); } } /** * @param TypeRapport $typeRapport * @param bool $cacheable * @return array */ public function findDistinctAnnees(TypeRapport $typeRapport, bool $cacheable = false): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->distinct() ->select("ra.anneeUniv") ->join('ra.typeRapport', 'tr', Join::WITH, 'tr = :type')->setParameter('type', $typeRapport) ->orderBy("ra.anneeUniv", 'desc'); $qb->setCacheable($cacheable); return array_map(function($value) { return current($value); }, $qb->getQuery()->getScalarResult()); } /** * @param \These\Entity\Db\These $these * @param TypeRapport $typeRapport * @param bool $cacheable * @return Rapport[] [int => Rapport[]] */ public function findRapportsParAnneesForThese(These $these, TypeRapport $typeRapport, bool $cacheable = false): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->join('ra.these', 't', Join::WITH, 't = :these')->setParameter('these', $these) ->join('ra.typeRapport', 'tr', Join::WITH, 'tr = :type')->setParameter('type', $typeRapport) ->orderBy("ra.anneeUniv", 'desc'); /** @var Rapport $rapports */ $rapports = $qb->setCacheable($cacheable)->getQuery()->getArrayResult(); $rapportsParAnnees = []; foreach ($rapports as $rapport) { $anneeUniv = $rapport['anneeUniv']; if (!array_key_exists($anneeUniv, $rapportsParAnnees)) { $rapportsParAnnees[$anneeUniv] = []; } $rapportsParAnnees[$anneeUniv][] = $rapport; } return $rapportsParAnnees; } /** * @param string $typeRapportCode * @return TypeRapport */ public function findTypeRapportByCode(string $typeRapportCode): TypeRapport { $qb = $this->getEntityManager()->getRepository(TypeRapport::class); /** @var TypeRapport $type */ $type = $qb->findOneBy(['code' => $typeRapportCode]); return $type; } /** * @param \Application\Entity\AnneeUniv $anneeUniv * @return \Closure */ public function getFilterRapportsByAnneeUniv(AnneeUniv $anneeUniv): Closure { return function (Rapport $rapport) use ($anneeUniv) { return $rapport->getAnneeUniv() === $anneeUniv; }; } /** * @param These $these * @param bool $cacheable * @return array */ public function findAutorisationsInscriptionParThese(These $these): array Loading module/Application/view/application/rapport/partial/rapports-table.phtml +6 −3 Changes for module/Application/view/application/rapport/partial/rapports-table.phtml: 6 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -19,7 +19,10 @@ use Application\View\Renderer\PhpRenderer; /** * @var PhpRenderer $this * @var array $rapports * @var array{ * rapport: Rapport, * autorisationInscription: AutorisationInscription * } | array<Rapport> $rapports * @var AutorisationInscription[] $autorisationsInscription * * @var string $routeName Loading Loading @@ -158,7 +161,7 @@ $acteursFormatterCodirecteurs->asSeparated() <?php foreach ($rapports as $ra): ?> <tr> <?php $rapport = $ra["rapport"] ?? $ra; $rapport = is_array($ra) && $ra["rapport"] ? $ra["rapport"] : $ra; $these = $rapport->getThese(); $rapportValidation = $rapport->getRapportValidation(); $rapportAvis = $rapport->getRapportAvis(); Loading Loading @@ -327,7 +330,7 @@ $acteursFormatterCodirecteurs->asSeparated() $derniereAnneeUnivInscription = AnneeUniv::fromPremiereAnnee(max($anneesInscriptionThese)); /** @var AutorisationInscription|null $autorisationInscription */ $autorisationInscription = $ra["autorisationInscription"] ?? null; $autorisationInscription = is_array($ra) && $ra["autorisationInscription"] ? $ra["autorisationInscription"] : null; $hasAutorisation = $autorisationInscription?->getAutorisationInscription(); if ($derniereAnneeUnivInscription === $rapport->getAnneeUniv() && $hasAutorisation === null): ?> Loading Loading
module/Application/src/Application/Controller/Rapport/RapportCsiController.php +0 −1 Changes for module/Application/src/Application/Controller/Rapport/RapportCsiController.php: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ class RapportCsiController extends RapportController return new ViewModel([ 'rapports' => $rapportsAvecAutorisationInscription ?? $this->rapportsTeleverses, 'autorisationsInscription' => $this->fetchAutorisationsInscriptionParThese($this->these), 'these' => $this->these, 'form' => $this->form, 'isTeleversementPossible' => $this->isTeleversementPossible(), Loading
module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AutorisationInscription.dcm.xml +6 −6 Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AutorisationInscription.dcm.xml: 6 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -13,17 +13,17 @@ <many-to-one field="individu" target-entity="Individu\Entity\Db\Individu"> <join-columns> <join-column name="INDIVIDU_ID" referenced-column-name="ID"/> <join-column name="INDIVIDU_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="these" target-entity="These\Entity\Db\These"> <join-column name="THESE_ID" referenced-column-name="ID"/> <join-column name="THESE_ID" referenced-column-name="id"/> </many-to-one> <many-to-one field="rapport" target-entity="Application\Entity\Db\Rapport"> <join-columns> <join-column name="RAPPORT_ID" referenced-column-name="ID"/> <join-column name="RAPPORT_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <field name="histoCreation" type="datetime" column="HISTO_CREATION"/> Loading @@ -32,17 +32,17 @@ <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> <join-column name="HISTO_CREATEUR_ID" referenced-column-name="id"/> </join-columns> </many-to-one> Loading
module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TitreAcces.dcm.xml +2 −2 Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TitreAcces.dcm.xml: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -29,13 +29,13 @@ <many-to-one field="etablissement" target-entity="Structure\Entity\Db\Etablissement"> <join-columns> <join-column name="etab_id" referenced-column-name="ID"/> <join-column name="etab_id" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="pays" target-entity="Application\Entity\Db\Pays"> <join-columns> <join-column name="pays_id" referenced-column-name="ID"/> <join-column name="pays_id" referenced-column-name="id"/> </join-columns> </many-to-one> Loading
module/Application/src/Application/Service/AutorisationInscription/AutorisationInscriptionService.php +1 −205 Changes for module/Application/src/Application/Service/AutorisationInscription/AutorisationInscriptionService.php: 1 added line, 205 removed lines. Original line number Diff line number Diff line Loading @@ -57,8 +57,7 @@ class AutorisationInscriptionService extends BaseService public function createQueryBuilder() : QueryBuilder { $qb = $this->getEntityManager()->getRepository(AutorisationInscription::class)->createQueryBuilder('autorisationInscription'); return $qb; return $this->getRepository()->createQueryBuilder('autorisationInscription'); } public function create(AutorisationInscription $autorisationInscription) : AutorisationInscription Loading Loading @@ -131,211 +130,8 @@ class AutorisationInscriptionService extends BaseService return $autorisationInscription; } /** * @param int $id * @return Rapport * @throws NoResultException */ public function findRapportById(int $id): Rapport { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->addSelect('t, f') ->join('ra.these', 't') ->join('ra.fichier', 'f') ->where('ra = :id')->setParameter('id', $id); try { return $qb->getQuery()->getSingleResult(); } catch (NonUniqueResultException $e) { throw new RuntimeException("Impossible mais vrai !"); } } /** * @param These $these * @param TypeRapport|null $type * @return Rapport[] */ public function findRapportsForThese(These $these, TypeRapport $type = null): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->addSelect('t, f') ->addSelect('tr')->join('ra.typeRapport', 'tr') ->join('ra.these', 't', Join::WITH, 't =:these')->setParameter('these', $these) ->join('ra.fichier', 'f') ->andWhereNotHistorise() ->orderBy('ra.anneeUniv'); if ($type !== null) { $qb->andWhere('tr = :type')->setParameter('type', $type); } return $qb->getQuery()->getResult(); } /** * Enregistre le rapport spécifié, après avoir créé le fichier à partir des données d'upload fournies. * * @param Rapport $rapport * @param array $uploadData Données résultant de l'upload de fichiers * @return Rapport Rapport annuel créé */ public function saveRapport(Rapport $rapport, array $uploadData): Rapport { $codeNatureFichier = $this->computeCodeNatureFichierFromTypeRapport($rapport); $this->fichierService->setNomFichierFormatter(new NomFichierRapportFormatter($rapport)); $fichiers = $this->fichierService->createFichiersFromUpload($uploadData, $codeNatureFichier); $this->entityManager->beginTransaction(); try { $this->fichierService->saveFichiers($fichiers); $fichier = array_pop($fichiers); // il n'y a en fait qu'un seul fichier $rapport->setFichier($fichier); $these = $rapport->getThese(); $these->addRapport($rapport); $this->entityManager->persist($rapport); $this->entityManager->flush($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de l'enregistrement des rapports annuels, rollback!", 0, $e); } return $rapport; } public function updateRapport(Rapport $rapport): Rapport { $this->entityManager->beginTransaction(); try { $this->entityManager->persist($rapport); $this->entityManager->flush($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de l'enregistrement des rapports, rollback!", 0, $e); } return $rapport; } private function computeCodeNatureFichierFromTypeRapport(Rapport $rapport): string { switch ($rapport->getTypeRapport()->getCode()) { case TypeRapport::RAPPORT_CSI: return NatureFichier::CODE_RAPPORT_CSI; case TypeRapport::RAPPORT_MIPARCOURS: return NatureFichier::CODE_RAPPORT_MIPARCOURS; default: throw new InvalidArgumentException("Le type du rapport spécifié n'est pas supporté"); } } /** * @param Rapport $rapport */ public function deleteRapport(Rapport $rapport) { $fichier = $rapport->getFichier(); $these = $rapport->getThese(); $this->entityManager->beginTransaction(); try { $this->rapportValidationService->deleteAllForRapport($rapport); $this->fichierService->supprimerFichiers([$fichier]); $these->removeRapport($rapport); $this->entityManager->remove($rapport); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw new RuntimeException("Erreur survenue lors de la suppression des rapports, rollback!", 0, $e); } } /** * @param TypeRapport $typeRapport * @param bool $cacheable * @return array */ public function findDistinctAnnees(TypeRapport $typeRapport, bool $cacheable = false): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->distinct() ->select("ra.anneeUniv") ->join('ra.typeRapport', 'tr', Join::WITH, 'tr = :type')->setParameter('type', $typeRapport) ->orderBy("ra.anneeUniv", 'desc'); $qb->setCacheable($cacheable); return array_map(function($value) { return current($value); }, $qb->getQuery()->getScalarResult()); } /** * @param \These\Entity\Db\These $these * @param TypeRapport $typeRapport * @param bool $cacheable * @return Rapport[] [int => Rapport[]] */ public function findRapportsParAnneesForThese(These $these, TypeRapport $typeRapport, bool $cacheable = false): array { $qb = $this->getRepository()->createQueryBuilder('ra'); $qb ->join('ra.these', 't', Join::WITH, 't = :these')->setParameter('these', $these) ->join('ra.typeRapport', 'tr', Join::WITH, 'tr = :type')->setParameter('type', $typeRapport) ->orderBy("ra.anneeUniv", 'desc'); /** @var Rapport $rapports */ $rapports = $qb->setCacheable($cacheable)->getQuery()->getArrayResult(); $rapportsParAnnees = []; foreach ($rapports as $rapport) { $anneeUniv = $rapport['anneeUniv']; if (!array_key_exists($anneeUniv, $rapportsParAnnees)) { $rapportsParAnnees[$anneeUniv] = []; } $rapportsParAnnees[$anneeUniv][] = $rapport; } return $rapportsParAnnees; } /** * @param string $typeRapportCode * @return TypeRapport */ public function findTypeRapportByCode(string $typeRapportCode): TypeRapport { $qb = $this->getEntityManager()->getRepository(TypeRapport::class); /** @var TypeRapport $type */ $type = $qb->findOneBy(['code' => $typeRapportCode]); return $type; } /** * @param \Application\Entity\AnneeUniv $anneeUniv * @return \Closure */ public function getFilterRapportsByAnneeUniv(AnneeUniv $anneeUniv): Closure { return function (Rapport $rapport) use ($anneeUniv) { return $rapport->getAnneeUniv() === $anneeUniv; }; } /** * @param These $these * @param bool $cacheable * @return array */ public function findAutorisationsInscriptionParThese(These $these): array Loading
module/Application/view/application/rapport/partial/rapports-table.phtml +6 −3 Changes for module/Application/view/application/rapport/partial/rapports-table.phtml: 6 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -19,7 +19,10 @@ use Application\View\Renderer\PhpRenderer; /** * @var PhpRenderer $this * @var array $rapports * @var array{ * rapport: Rapport, * autorisationInscription: AutorisationInscription * } | array<Rapport> $rapports * @var AutorisationInscription[] $autorisationsInscription * * @var string $routeName Loading Loading @@ -158,7 +161,7 @@ $acteursFormatterCodirecteurs->asSeparated() <?php foreach ($rapports as $ra): ?> <tr> <?php $rapport = $ra["rapport"] ?? $ra; $rapport = is_array($ra) && $ra["rapport"] ? $ra["rapport"] : $ra; $these = $rapport->getThese(); $rapportValidation = $rapport->getRapportValidation(); $rapportAvis = $rapport->getRapportAvis(); Loading Loading @@ -327,7 +330,7 @@ $acteursFormatterCodirecteurs->asSeparated() $derniereAnneeUnivInscription = AnneeUniv::fromPremiereAnnee(max($anneesInscriptionThese)); /** @var AutorisationInscription|null $autorisationInscription */ $autorisationInscription = $ra["autorisationInscription"] ?? null; $autorisationInscription = is_array($ra) && $ra["autorisationInscription"] ? $ra["autorisationInscription"] : null; $hasAutorisation = $autorisationInscription?->getAutorisationInscription(); if ($derniereAnneeUnivInscription === $rapport->getAnneeUniv() && $hasAutorisation === null): ?> Loading