Commit 5b900162 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP refresh these

parent ce1c2df3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -486,6 +486,7 @@ return [
                                'these' => '\d+',
                            ],
                            'defaults' => [
                                /** @see TheseController::refreshTheseAction() */
                                'controller' => 'Application\Controller\These',
                                'action' => 'refresh-these',
                            ],
+5 −7
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ use Application\Service\VersionFichier\VersionFichierService;
use Application\Service\Workflow\WorkflowService;
use Application\SourceCodeStringHelper;
use Doctrine\ORM\EntityManager;
use Import\Service\ImportService;
use Interop\Container\ContainerInterface;
use Laminas\View\Renderer\PhpRenderer;

@@ -37,8 +36,10 @@ class TheseControllerFactory
     *
     * @param ContainerInterface $container
     * @return TheseController
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container)
    public function __invoke(ContainerInterface $container): TheseController
    {
        $options = $this->getOptions($container);

@@ -56,7 +57,6 @@ class TheseControllerFactory
         * @var UniteRechercheService   $uniteService
         * @var MailConfirmationService $mailConfirmationService
         * @var EntityManager           $entityManager
         * @var ImportService           $importService
         * @var UtilisateurService      $utilisateurService
         * @var ActeurService           $acteurService
         * @var IndividuService         $indivdiService
@@ -74,7 +74,6 @@ class TheseControllerFactory
        $mailConfirmationService = $container->get('MailConfirmationService');
        $entityManager = $container->get('doctrine.entitymanager.orm_default');
        $notifierService = $container->get(NotifierService::class);
//        $importService = $container->get('ImportService');
        $utilisateurService = $container->get('UtilisateurService');

        /**
@@ -113,7 +112,6 @@ class TheseControllerFactory
        $controller->setMailConfirmationService($mailConfirmationService);
        $controller->setEntityManager($entityManager);
        $controller->setNotifierService($notifierService);
//        $controller->setImportService($importService);
        $controller->setUtilisateurService($utilisateurService);
        $controller->setRdvBuTheseDoctorantForm($rdvBuTheseDoctorantForm);
        $controller->setRdvBuTheseForm($rdvBuTheseForm);
@@ -133,13 +131,13 @@ class TheseControllerFactory

    private function getTimeoutRetraitementFromOptions(array $options)
    {
        return isset($options['retraitement']['timeout']) ? $options['retraitement']['timeout'] : null;
        return $options['retraitement']['timeout'] ?? null;
    }

    private function getOptions(ContainerInterface $container)
    {
        $options = $container->get('config');

        return isset($options['sygal']) ? $options['sygal'] : [];
        return $options['sygal'] ?? [];
    }
}
 No newline at end of file
+10 −16
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ use Application\Command\Exception\TimedOutCommandException;
use Application\Entity\Db\Attestation;
use Application\Entity\Db\Diffusion;
use Application\Entity\Db\FichierThese;
use Application\Entity\Db\Individu;
use Application\Entity\Db\MailConfirmation;
use Application\Entity\Db\MetadonneeThese;
use Application\Entity\Db\NatureFichier;
@@ -43,22 +42,19 @@ use Application\Service\VersionFichier\VersionFichierServiceAwareTrait;
use Application\Service\Workflow\WorkflowServiceAwareTrait;
use Application\SourceCodeStringHelperAwareTrait;
use Doctrine\ORM\OptimisticLockException;
use Import\Service\Traits\ImportServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenApp\Service\MessageCollectorAwareTrait;
use UnicaenApp\Traits\MessageAwareInterface;
use Laminas\Form\Element\Hidden;
use Laminas\Form\Element\Radio;
use Laminas\Form\Element\Submit;
use Laminas\Form\Form;
use Laminas\Http\Response;
use Laminas\InputFilter\InputFilter;
use Laminas\Log\Logger;
use Laminas\Log\Writer\Noop;
use Laminas\Stdlib\ParametersInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Renderer\PhpRenderer;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenApp\Service\MessageCollectorAwareTrait;
use UnicaenApp\Traits\MessageAwareInterface;

class TheseController extends AbstractController
{
@@ -76,7 +72,6 @@ class TheseController extends AbstractController
    use EntityManagerAwareTrait;
    use MailConfirmationServiceAwareTrait;
    use UniteRechercheServiceAwareTrait;
    use ImportServiceAwareTrait;
    use UserContextServiceAwareTrait;
    use VariableServiceAwareTrait;
    use SourceCodeStringHelperAwareTrait;
@@ -317,16 +312,15 @@ class TheseController extends AbstractController
     *
     * @return Response
     */
    public function refreshTheseAction()
    public function refreshTheseAction()/*: Response*/
    {
        $these = $this->requestedThese();
        $this->theseService->refreshThese($these);

        $this->importService->setLogger((new Logger())->addWriter(new Noop()));
        $this->importService->updateThese($these);

        $redirect = $this->params()->fromQuery('redirect', '/');

        return $this->redirect()->toUrl($redirect);
//        $redirect = $this->params()->fromQuery('redirect', '/');
//
//        return $this->redirect()->toUrl($redirect);
        return [];
    }

    /**
+12 −0
Original line number Diff line number Diff line
@@ -12,10 +12,12 @@ use Application\Service\UserContextService;
use Application\Service\Utilisateur\UtilisateurService;
use Application\Service\Validation\ValidationService;
use Application\Service\Variable\VariableService;
use Application\SourceCodeStringHelper;
use Interop\Container\ContainerInterface;
use Soutenance\Service\Membre\MembreService;
use UnicaenAuth\Service\AuthorizeService;
use UnicaenAuth\Service\User as UserService;
use UnicaenDbImport\Service\ImportService;
use Webmozart\Assert\Assert;

class TheseServiceFactory
@@ -57,6 +59,14 @@ class TheseServiceFactory
        /** @var FileService $fileService */
        $fileService = $container->get(FileService::class);

        /**
         * @var SourceCodeStringHelper $sourceCodeStringHelper;
         */
        $sourceCodeStringHelper = $container->get(SourceCodeStringHelper::class);

        /** @var ImportService $importService */
        $importService = $container->get(ImportService::class);

        $service = new TheseService();
        $service->setActeurService($acteurService);
        $service->setValidationService($validationService);
@@ -70,6 +80,8 @@ class TheseServiceFactory
        $service->setEtablissementService($etablissementService);
        $service->setFileService($fileService);
        $service->setAuthorizeService($authorizeService);
        $service->setSourceCodeStringHelper($sourceCodeStringHelper);
        $service->setImportService($importService);

        $this->injectConfig($service, $container);

+112 −0
Original line number Diff line number Diff line
@@ -30,11 +30,16 @@ use Application\Service\UserContextServiceAwareTrait;
use Application\Service\Utilisateur\UtilisateurServiceAwareTrait;
use Application\Service\Validation\ValidationServiceAwareTrait;
use Application\Service\Variable\VariableServiceAwareTrait;
use Application\SourceCodeStringHelper;
use Application\SourceCodeStringHelperAwareTrait;
use Assert\Assertion;
use DateTime;
use Doctrine\DBAL\DBALException;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Import\Model\TmpActeur;
use Import\Model\TmpDoctorant;
use Import\Model\TmpThese;
use Soutenance\Entity\Proposition;
use Soutenance\Service\Membre\MembreServiceAwareTrait;
use UnicaenApp\Exception\LogicException;
@@ -46,6 +51,10 @@ use Laminas\EventManager\EventManagerInterface;
use Laminas\EventManager\ListenerAggregateInterface;
use Laminas\EventManager\ListenerAggregateTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use UnicaenDbImport\Service\Exception\DatabaseServiceException;
use UnicaenDbImport\Service\Traits\ImportServiceAwareTrait;
use UnicaenDbImport\Service\Traits\SynchroServiceAwareTrait;
use function Application\generateNameForEtab;

class TheseService extends BaseService implements ListenerAggregateInterface
{
@@ -62,6 +71,9 @@ class TheseService extends BaseService implements ListenerAggregateInterface
    use AuthorizeServiceAwareTrait;
    use ActeurServiceAwareTrait;
    use MembreServiceAwareTrait;
    use ImportServiceAwareTrait;
    use SynchroServiceAwareTrait;
    use SourceCodeStringHelperAwareTrait;

    /**
     * Resaisir l'autorisation de diffusion ? Sinon celle saisie au 1er dépôt est reprise/dupliquée.
@@ -797,4 +809,104 @@ EOS;
            throw new RuntimeException("Erreur rencontrée lors de l'enregistrement du sursis", null, $e);
        }
    }

    /**
     * @param \Application\Entity\Db\These $these
     * @throws \UnicaenDbImport\Service\Exception\DatabaseServiceException
     */
    public function refreshThese(These $these)
    {
        $names = [];

        // xxxId : préfixé par l'etab

        $theseId = $these->getSourceCode();
        $etab = $this->sourceCodeStringHelper->extractPrefixFrom($theseId);

        /**
         * Imports
         */

        // thèse
        $names[] = $name = generateNameForEtab('these-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import,
            $this->sourceCodeStringHelper->removePrefixFrom($theseId)
        );

        /** @var TmpThese $tmpThese */
        $tmpThese = $this->entityManager->getRepository(TmpThese::class)->findOneBy([
            'sourceCode' => $this->sourceCodeStringHelper->removePrefixFrom($theseId)
        ]);

        // doctorant
        $doctorantId = $tmpThese->getDoctorantId();
        $names[] = $name = generateNameForEtab('doctorant-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import,
            $this->sourceCodeStringHelper->removePrefixFrom($doctorantId)
        );

        /** @var TmpDoctorant $tmpDoctorant */
        $tmpDoctorant = $this->entityManager->getRepository(TmpDoctorant::class)->findOneBy([
            'sourceCode' => $this->sourceCodeStringHelper->removePrefixFrom($doctorantId)
        ]);

        // individu doctorant
        $individuId = $tmpDoctorant->getIndividuId();
        $names[] = $name = generateNameForEtab('individu-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import,
            $this->sourceCodeStringHelper->removePrefixFrom($individuId)
        );

        // acteurs
        //$theseId = $these->getId();
        //$this->fetcherService->fetchRows('acteur', ['these' => $these]);
        $names[] = $name = generateNameForEtab('acteur-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import, $theseId);

        /** @var TmpActeur[] $tmpActeurs */
        $tmpActeurs = $this->entityManager->getRepository(TmpActeur::class)->findBy(['theseId' => $theseId]);

        // individus acteurs
        $sourceCodeIndividus = [];
        foreach ($tmpActeurs as $tmpActeur) {
            $sourceCodeIndividus[] = $individuId = $tmpActeur->getIndividuId();
            //$this->fetcherService->fetchRows('individu', ['source_code' => $individuId]);
            $names[] = $name = generateNameForEtab('individu-%s', $etab);
            $import = $this->importService->getImportByName($name);
            $result = $this->importService->runImportOne($import,
                $this->sourceCodeStringHelper->removePrefixFrom($individuId)
            );
        }

        // ed
        $ecoleDoctId = $tmpThese->getEcoleDoctId();
        $names[] = $name = generateNameForEtab('ecole-doctorale-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import,
            $this->sourceCodeStringHelper->removePrefixFrom($ecoleDoctId)
        );

        // ur
        $uniteRechId = $tmpThese->getUniteRechId();
        $names[] = $name = generateNameForEtab('ecole-recherche-%s', $etab);
        $import = $this->importService->getImportByName($name);
        $result = $this->importService->runImportOne($import,
            $this->sourceCodeStringHelper->removePrefixFrom($uniteRechId)
        );


        /**
         * Synchros
         */

        foreach ($names as $name) {
            $synchro = $this->synchroService->getSynchroByName($name);
            $result = $this->synchroService->runSynchro($synchro);
        }

    }
}
 No newline at end of file
Loading