Commit 83f8e3d7 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Plantage lors de la suppression d'un dossier d'admission : toutes les...

[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.
parent 478c63fe
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ Journal des modifications

13.1.0
------
- [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.
- [FIX] Formulaire d'association d'individu à un membre de jury : plantage dû à un bug dans la validation permettant d'enregistrer sans fournir l'établissement requis.

+5 −7
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ use Application\Service\UserContextServiceAwareTrait;
use Application\Service\Variable\VariableServiceAwareTrait;
use DateTime;
use Doctorant\Entity\Db\Doctorant;
use Doctrine\ORM\Exception\ORMException;
use DoctrineORMModule\Collector\SQLLoggerCollector;
use Exception;
use Fichier\Service\Fichier\FichierStorageServiceAwareTrait;
@@ -53,8 +52,8 @@ use Laminas\Http\Response as HttpResponse;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;
use Mpdf\MpdfException;
use Notification\Exception\RuntimeException;
use Notification\Service\NotifierServiceAwareTrait;
use RuntimeException;
use Structure\Service\Etablissement\EtablissementServiceAwareTrait;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenMultipageForm\Form\Fieldset\MultipageFormNavFieldset;
@@ -499,9 +498,6 @@ class AdmissionController extends AdmissionAbstractController
        }
    }

    /**
     * @throws ORMException
     */
    public function supprimerAction(): HttpResponse
    {
        $admission = $this->getAdmission();
@@ -518,8 +514,10 @@ class AdmissionController extends AdmissionAbstractController
            $this->gererRoleIndividu($individu, Role::ROLE_ID_ADMISSION_CANDIDAT);
            $this->gererRoleIndividu($directeur, Role::ROLE_ID_ADMISSION_DIRECTEUR_THESE);
            $this->gererRoleIndividu($coDirecteur, Role::ROLE_ID_ADMISSION_CODIRECTEUR_THESE);
        }catch (ORMException $e) {
            throw new ORMException("Un problème est survenu lors de la suppression du dossier d'admission",$e);
        } catch (Exception $e) {
            $message = "Un problème est survenu lors de la suppression du dossier d'admission : " . $e->getMessage();
            error_log($message . PHP_EOL . $e->getTraceAsString());
            throw new RuntimeException($message, previous: $e);
        }

        $this->multipageForm($this->admissionForm)->clear();
+9 −0
Original line number Diff line number Diff line
@@ -5,12 +5,16 @@ namespace Admission\Service\ConventionFormationDoctorale;
use Admission\Entity\Db\Admission;
use Admission\Entity\Db\ConventionFormationDoctorale;
use Admission\Entity\Db\Repository\ConventionFormationDoctoraleRepository;
use Admission\Entity\Db\Verification;
use Admission\Service\Verification\VerificationServiceAwareTrait;
use Application\Service\BaseService;
use Doctrine\ORM\Exception\ORMException;
use UnicaenApp\Exception\RuntimeException;

class ConventionFormationDoctoraleService extends BaseService
{
    use VerificationServiceAwareTrait;

    public function getRepository(): ConventionFormationDoctoraleRepository
    {
        /** @var ConventionFormationDoctoraleRepository $repo */
@@ -89,6 +93,11 @@ class ConventionFormationDoctoraleService extends BaseService
    {
        $this->entityManager->beginTransaction();
        try {
            $verification = $conventionFormationDoctorale->getVerificationConventionFormationDoctorale()->first();
            if ($verification instanceof Verification){
                $this->verificationService->delete($verification);
            }

            $this->entityManager->remove($conventionFormationDoctorale);
            $this->entityManager->flush();
            $this->entityManager->commit();
+7 −2
Original line number Diff line number Diff line
@@ -2,13 +2,18 @@

namespace Admission\Service\ConventionFormationDoctorale;

use Interop\Container\ContainerInterface;
use Admission\Service\Verification\VerificationService;
use Psr\Container\ContainerInterface;

class ConventionFormationDoctoraleServiceFactory {

    public function __invoke(ContainerInterface $container): ConventionFormationDoctoraleService
    {
        $service = new ConventionFormationDoctoraleService();

        return new ConventionFormationDoctoraleService();
        $verificationService = $container->get(VerificationService::class);
        $service->setVerificationService($verificationService);

        return $service;
    }
}
 No newline at end of file
+11 −11
Original line number Diff line number Diff line
@@ -94,23 +94,23 @@ class AdmissionValidationService extends BaseService

    /**
     * Supprime physiquement en bdd la validation d'un dossier d'admission.
     *
     * @param Admission $admission
     */
    public function deleteValidationForAdmission(Admission $admission): void
    {
        $this->entityManager->beginTransaction();
        // NB : inclusion des validations historisées
        foreach ($admission->getAdmissionValidations(true) as $validation) {
            $admission->removeAdmissionValidation($validation);
        $validations = $admission->getAdmissionValidations(true);

        $this->entityManager->beginTransaction();
        try {
            foreach ($validations as $validation) {
                $admission->removeAdmissionValidation($validation);
                $this->entityManager->remove($validation);
            }
            $this->entityManager->flush();
            $this->entityManager->commit();
        } catch (ORMException $e) {
            $this->entityManager->rollback();
                throw new RuntimeException("Erreur rencontrée lors de la suppression en bdd", null, $e);
            }
            throw new RuntimeException("Erreur rencontrée lors de la suppression en bdd", previous: $e);
        }
    }