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

[FIX] Observation des résultats d'import/synchro : correction du filtrage par...

[FIX] Observation des résultats d'import/synchro : correction du filtrage par source de données (anciennement 'etablissement') non pris en compte
parent 8906d885
Loading
Loading
Loading
Loading
+7 −1
Changes for doc/release-notes/v6.0.10.md: 7 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -19,4 +19,10 @@ systemctl reload php8.0-fpm

## 2. Dans la base de données

Néant.
 No newline at end of file
```postgresql
-- Nouvelle colonne import_observ_result.source_id :
alter table import_observ_result add column source_id bigint;
update import_observ_result ior set source_id = s.id from these t join source s on t.source_id = s.id
                                                     where t.source_code = ior.source_code;
alter table import_observ_result alter column source_id set not null;
```
+2 −2
Changes for module/Import/Module.php: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ class Module
            ['--em', "Facultatif. Nom de l'EntityManager à utiliser. Valeur par défaut: 'orm_default'."],

            // command
            'process-observed-import-results --etablissement= [--import-observ=] [--source-code=]' => "Traitement des résultats d'observation de certains changements durant la synchro.",
            'process-observed-import-results --source= [--import-observ=] [--source-code=]' => "Traitement des résultats d'observation de certains changements durant la synchro.",
            // parameters
            ['--etablissement', "Requis. Identifiant de l'établissement, ex: 'UCN'"],
            ['--source', "Obligatoire. Codes des sources de données concernées, séparés par une virgule, ex : 'UCN::apogee,URN::apogee'."],
            ['--import-observ', "Facultatif. Code de la seule observation voulue. Valeurs possibles: " . implode(', ', ImportObserv::CODES)],
            ['--source-code', "Facultatif. Source code de la seule thèse à prendre en compte."],
        ];
+1 −1
Changes for module/Import/config/import.config.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ return [
                ],
                'process-observed-import-results' => [
                    'options' => [
                        'route'    => 'process-observed-import-results --etablissement= [--import-observ=] [--source-code=] [--force]',
                        'route'    => 'process-observed-import-results --source= [--import-observ=] [--source-code=]',
                        'defaults' => [
                            /**
                             * @see \Import\Controller\ImportObserverController::processObservedImportResultsAction()
+15 −10
Changes for module/Import/src/Import/Controller/Factory/ImportObserverControllerFactory.php: 15 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -3,22 +3,23 @@
namespace Import\Controller\Factory;

use Application\EventRouterReplacer;
use These\Service\These\TheseService;
use Application\Service\Source\SourceService;
use Import\Controller\ImportObserverController;
use Import\Model\Service\ImportObservResultService;
use Interop\Container\ContainerInterface;
use UnicaenDbImport\Entity\Db\Service\ImportObserv\ImportObservService;
use Laminas\Router\Http\TreeRouteStack;
use These\Service\These\TheseService;
use UnicaenDbImport\Entity\Db\Service\ImportObserv\ImportObservService;

class ImportObserverControllerFactory
{
    /**
     * Create service
     *
     * @param ContainerInterface $container
     * @return ImportObserverController
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container)
    public function __invoke(ContainerInterface $container): ImportObserverController
    {
        /** @var TreeRouteStack $httpRouter */
        $httpRouter = $container->get('HttpRouter');
@@ -41,20 +42,24 @@ class ImportObserverControllerFactory
        $controller->setImportObservResultService($importObservResultEtabService);
        $controller->setTheseService($theseService);

        /** @var SourceService $sourceService */
        $sourceService = $container->get(SourceService::class);
        $controller->setSourceService($sourceService);

        return $controller;
    }

    /**
     * @param ContainerInterface $container
     * @return array
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    private function getCliConfig(ContainerInterface $container)
    private function getCliConfig(ContainerInterface $container): array
    {
        $config = $container->get('Config');

        return [
            'domain' => isset($config['cli_config']['domain']) ? $config['cli_config']['domain'] : null,
            'scheme' => isset($config['cli_config']['scheme']) ? $config['cli_config']['scheme'] : null,
            'domain' => $config['cli_config']['domain'] ?? null,
            'scheme' => $config['cli_config']['scheme'] ?? null,
        ];
    }
}
 No newline at end of file
+24 −13
Changes for module/Import/src/Import/Controller/ImportObserverController.php: 24 added lines, 13 removed lines.
Original line number Diff line number Diff line
@@ -2,27 +2,30 @@

namespace Import\Controller;

use Application\Controller\AbstractController;
use Application\Entity\Db\Source;
use Application\EventRouterReplacerAwareTrait;
use Application\Service\Source\SourceServiceAwareTrait;
use Import\Model\ImportObserv;
use Import\Model\Service\ImportObservResultServiceAwareTrait;
use These\Entity\Db\These;
use Application\EventRouterReplacerAwareTrait;
use These\Service\These\TheseServiceAwareTrait;
use Assert\Assertion;
use Import\Model\Service\ImportObservResultServiceAwareTrait;
use Unicaen\Console\Controller\AbstractConsoleController;
use UnicaenApp\Exception\RuntimeException;
use UnicaenDbImport\Entity\Db\Service\ImportObserv\ImportObservServiceAwareTrait;
use Webmozart\Assert\Assert;

/**
 *
 *
 * @author Unicaen
 */
class ImportObserverController extends AbstractController
class ImportObserverController extends AbstractConsoleController
{
    use ImportObservServiceAwareTrait;
    use EventRouterReplacerAwareTrait;
    use ImportObservResultServiceAwareTrait;
    use TheseServiceAwareTrait;
    use SourceServiceAwareTrait;

    /**
     * Console action.
@@ -33,21 +36,18 @@ class ImportObserverController extends AbstractController
     * Cette action doit être lancée périodiquement (au moins une fois par jour).
     *
     * Ligne de commande :
     * php ./public/index.php process-observed-import-results --etablissement=UCN
     *
     * Exemple de config CRON :
     * 0 5-17 * * 1-5 root /usr/bin/php /home/gauthierb/workspace/sygal/public/index.php process-observed-import-results 1> /tmp/sodoctlog.txt 2>&1
     * i.e. du lundi au vendredi, à 05:00, 06:00 ... 17:00
     * php ./public/index.php process-observed-import-results --source=UCN::apogee [--import-observ=12345] [--source-code=UCN::1234]
     */
    public function processObservedImportResultsAction()
    public function processObservedImportResultsAction(): void
    {
        $codeSource = $this->params('source'); // ex : 'UCN::apogee'
        $codeImportObserv = $this->params('import-observ');
        $sourceCodeThese = $this->params('source-code');

        if ($codeImportObserv === null) {
            $codes = ImportObserv::CODES;
        } else {
            Assertion::inArray($codeImportObserv, ImportObserv::CODES);
            Assert::inArray($codeImportObserv, ImportObserv::CODES);
            $codes = (array) $codeImportObserv;
        }

@@ -60,6 +60,17 @@ class ImportObserverController extends AbstractController
            }
        }

        /** @var Source $source */
        $source = null;
        if ($codeSource !== null) {
            $source = $this->sourceService->getRepository()->findOneBy(['code' => $codeSource]);
            if ($source === null) {
                throw new RuntimeException("Aucune Source trouvée avec le code '$codeSource''");
            }
        }

        $criteria = array_filter(compact('source', 'these'));

        $this->eventRouterReplacer->replaceEventRouter($this->getEvent());

        foreach ($codes as $code) {
@@ -69,7 +80,7 @@ class ImportObserverController extends AbstractController
                throw new RuntimeException("Aucun enregistrement ImportObserv trouvé avec le code '$code'");
            }

            $this->importObservResultService->processImportObservForThese($importObserv, $these);
            $this->importObservResultService->processImportObserv($importObserv, $criteria);
        }

        $this->eventRouterReplacer->restoreEventRouter();
Loading