Commit 1e92841d authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Import (réception) d'inscription administrative : spécification partielle dans...

Import (réception) d'inscription administrative : spécification partielle dans un fichier de config (complétée dynamiquement) pour la visibilité et accéder aux logs.
parent 932785db
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ Journal des modifications
- Thèses : refonte de la gestion événementielle en cas de modification du résultat (manuelle ou par la synchro) ou de la correction attendue (par la synchro uniquement).
- Thèses : modification de la valeur du témoin de corrections attendues d'une thèse non importée.
- Thèses : notification en cas de modification manuelle de la valeur du témoin de corrections attendues d'une thèse (comme à l'issue d'un import).
- Import (réception) d'inscription administrative : spécification partielle dans un fichier de config (complétée dynamiquement) pour la visibilité et accéder aux logs.
- [FIX] Notification de thèse déposée : warning 'Undefined variable' à cause d'une variable non fournie au template.
- [FIX] Notification 'Corrections attendues' et 'Résultats de thèses modifiés' : correction de l'erreur 'Typed property Notification\Notification::$subject must not be accessed before initialization'.
- [FIX] Notification 'Corrections attendues' et 'Résultats de thèses modifiés' : problème dans l'algo de préparation des données (partie émergée : 'Warning: Undefined array key').
+2 −2
Changes for composer.lock: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -12769,7 +12769,7 @@
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/db-import.git",
                "reference": "82a6b0394f9636e20bf091e393808e86ff392e41"
                "reference": "2f3dff74dcc04db8ce413e4e87317015f10467e6"
            },
            "require": {
                "beberlei/assert": "^3.3",
@@ -12798,7 +12798,7 @@
                ]
            },
            "description": "Module d'import entre bases de données",
            "time": "2026-07-24T12:15:25+00:00"
            "time": "2026-08-25T14:25:22+00:00"
        },
        {
            "name": "unicaen/etat",
+73 −0
Changes for module/SygalApiImpl/config/import.config.php: 73 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

use UnicaenDbImport\Connection\NoConnection;
use UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter;

return [
    'import' => [
        /**
         * Imports configurés à moitié, utilisé pour enregistré les inscription admin reçues via l'API de SyGAL.
         * Ils sont complétés dynamiquement, cf. {@see \SygalApiImpl\V1\Process\InscriptionAdministrativeImportProcess}.
         */
        'imports' => [
            [
                'name' => 'api_import_inscription_administrative',
                'source' => [
                    'name' => 'api',
                    'code' => 'api',
                    'connection' => new NoConnection([]),
                    'select' => 'xxxxx',
                    'source_code_column' => 'source_code',
                    'column_value_filter' => [
                        'source_code' => new ConcatColumnValueFilter([
                            'column' => 'source_code', // colonne à transformer
                            'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                        //'prefix_filter' => null,
                    ],
                ],
                'destination' => [
                    'name' => 'Application',
                    'table' => 'tmp_inscription_administrative',
                    //'connection' => $this->destinationConnection,
                    'connection' => 'default',
                    'source_code_column' => 'source_code',
                    'id_strategy' => null,
                    'id_sequence' => null,
                ],
            ],
            [
                'name' => 'api_import_inscription_administrative_apprenant',
                'source' => [
                    'name' => 'api',
                    'code' => 'api',
                    'connection' => new NoConnection([]),
                    'select' => 'xxxxx',
                    'source_code_column' => 'source_code',
                    'column_value_filter' => [
                        'source_code' => new ConcatColumnValueFilter([
                            'column' => 'source_code', // colonne à transformer
                            'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                        'inscription_administrative_id' => new ConcatColumnValueFilter([
                            'column' => 'inscription_administrative_id', // colonne à transformer
                            'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
                            //'separator' => $this->sourceCodeStringHelper->getSeparator(),
                        ]),
                    ],
                ],
                'destination' => [
                    'name' => 'Application',
                    'table' => 'tmp_inscription_administrative_apprenant',
                    //'connection' => $this->destinationConnection,
                    'connection' => 'default',
                    'source_code_column' => 'source_code',
                    'id_strategy' => null,
                    'id_sequence' => null,
                ],
            ],
        ],
    ],
];
 No newline at end of file
+6 −4
Changes for module/SygalApiImpl/src/Module.php: 6 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
namespace SygalApiImpl;

use Laminas\ApiTools\Provider\ApiToolsProviderInterface;
use Laminas\Config\Factory as ConfigFactory;
use Laminas\Stdlib\ArrayUtils;

class Module implements ApiToolsProviderInterface
@@ -10,10 +11,11 @@ class Module implements ApiToolsProviderInterface
    {
        $configDir = __DIR__ . '/../config';

        return ArrayUtils::merge(
            include $configDir . '/module.config.php',
            include $configDir . '/versions/v1.config.php',
        );
        return ConfigFactory::fromFiles([
            $configDir . '/module.config.php',
            $configDir . '/import.config.php',
            $configDir . '/versions/v1.config.php',
        ]);
    }

    public function getAutoloaderConfig(): array
+113 −70
Changes for module/SygalApiImpl/src/V1/Process/InscriptionAdministrativeImportProcess.php: 113 added lines, 70 removed lines.
Original line number Diff line number Diff line
@@ -209,79 +209,122 @@ class InscriptionAdministrativeImportProcess extends AbstractProcess implements
            PrefixEtabColumnValueFilter::PARAM_CODE_ETABLISSEMENT => $codeEtablissement,
        ]);

        try {
            $source = Source::fromConfig([
                'name' => 'api',
                'code' => 'api',
                'connection' => new NoConnection([$data]),
                'select' => 'xxxxx',
                'source_code_column' => 'source_code',
                'column_value_filter' => [
                    new ConcatColumnValueFilter([
                        'column' => 'source_code', // colonne à transformer
                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                    $this->prefixEtabColumnValueFilter,
                ],
            ]);
            $destination = Destination::fromConfig([
                'name' => 'Application',
                'table' => 'tmp_inscription_administrative',
                'connection' => $this->destinationConnection,
                'source_code_column' => 'source_code',
                'id_strategy' => null,
                'id_sequence' => null,
            ]);

            return Import::fromConfig([
                'name' => 'api_import_inscription_administrative',
                'source' => $source,
                'destination' => $destination,
            ]);
        } catch (ConfigException $e) {
            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
        }
//        try {
//            $source = Source::fromConfig([
//                'name' => 'api',
//                'code' => 'api',
//                'connection' => new NoConnection([$data]),
//                'select' => 'xxxxx',
//                'source_code_column' => 'source_code',
//                'column_value_filter' => [
//                    new ConcatColumnValueFilter([
//                        'column' => 'source_code', // colonne à transformer
//                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                    $this->prefixEtabColumnValueFilter,
//                ],
//            ]);
//            $destination = Destination::fromConfig([
//                'name' => 'Application',
//                'table' => 'tmp_inscription_administrative',
//                'connection' => $this->destinationConnection,
//                'source_code_column' => 'source_code',
//                'id_strategy' => null,
//                'id_sequence' => null,
//            ]);
//
//            return Import::fromConfig([
//                'name' => 'api_import_inscription_administrative',
//                'source' => $source,
//                'destination' => $destination,
//            ]);
//        } catch (ConfigException $e) {
//            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
//        }

        /** @var Import $import */
        $name = 'api_import_inscription_administrative';
        $import = $this->importService->getImportByName($name);

        // source
        $importSource = $import->getSource();
        $importSource->setConnection(new NoConnection([$data]));
        // injection de paramètres dans les value filters
        $columnValueFilters = $importSource->getColumnValueFilter();
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter */
        $concatFilter = $columnValueFilters['source_code'];
        $concatFilter->setSeparator($this->sourceCodeStringHelper->getSeparator());
        $columnValueFilters['prefix_filter'] = $this->prefixEtabColumnValueFilter;
        $importSource->setColumnValueFilter($columnValueFilters);

        // destination
        $importDestination = $import->getDestination();
        $importDestination->setConnection($this->destinationConnection);

        return $import;
    }

    private function createImportInscriptionAdministrativeApprenant(array $data): Import
    {
        try {
            $source = Source::fromConfig([
                'name' => 'api',
                'code' => 'api',
                'connection' => new NoConnection([$data]),
                'select' => 'xxxxx',
                'source_code_column' => 'source_code',
                'column_value_filter' => [
                    new ConcatColumnValueFilter([
                        'column' => 'source_code', // colonne à transformer
                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                    new ConcatColumnValueFilter([
                        'column' => 'inscription_administrative_id', // colonne à transformer
                        'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
                    ]),
                ],
            ]);
            $destination = Destination::fromConfig([
                'name' => 'Application',
                'table' => 'tmp_inscription_administrative_apprenant',
                'connection' => $this->destinationConnection,
                'source_code_column' => 'source_code',
                'id_strategy' => null,
                'id_sequence' => null,
            ]);

            return Import::fromConfig([
                'name' => 'api_import_inscription_administrative_apprenant',
                'source' => $source,
                'destination' => $destination,
            ]);
        } catch (ConfigException $e) {
            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
        }
//        try {
//            $source = Source::fromConfig([
//                'name' => 'api',
//                'code' => 'api',
//                'connection' => new NoConnection([$data]),
//                'select' => 'xxxxx',
//                'source_code_column' => 'source_code',
//                'column_value_filter' => [
//                    new ConcatColumnValueFilter([
//                        'column' => 'source_code', // colonne à transformer
//                        'columns' => ['source_id', 'source_code'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                    new ConcatColumnValueFilter([
//                        'column' => 'inscription_administrative_id', // colonne à transformer
//                        'columns' => ['source_id', 'inscription_administrative_id'], // colonnes dont les valeurs seront concaténées
//                        'separator' => $this->sourceCodeStringHelper->getSeparator(),
//                    ]),
//                ],
//            ]);
//            $destination = Destination::fromConfig([
//                'name' => 'Application',
//                'table' => 'tmp_inscription_administrative_apprenant',
//                'connection' => $this->destinationConnection,
//                'source_code_column' => 'source_code',
//                'id_strategy' => null,
//                'id_sequence' => null,
//            ]);
//
//            return Import::fromConfig([
//                'name' => 'api_import_inscription_administrative_apprenant',
//                'source' => $source,
//                'destination' => $destination,
//            ]);
//        } catch (ConfigException $e) {
//            throw new InvalidArgumentException("Mauvaise config dans " . __METHOD__ . " : " . $e->getMessage(), 0, $e);
//        }

        /** @var Import $import */
        $name = 'api_import_inscription_administrative_apprenant';
        $import = $this->importService->getImportByName($name);

        // source
        $importSource = $import->getSource();
        $importSource->setConnection(new NoConnection([$data]));
        // injection de paramètres dans les value filters
        $columnValueFilters = $importSource->getColumnValueFilter();
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter1 */
        $concatFilter1 = $columnValueFilters['source_code'];
        $concatFilter1->setSeparator($this->sourceCodeStringHelper->getSeparator());
        /** @var \UnicaenDbImport\Filter\ColumnValue\ConcatColumnValueFilter $concatFilter2 */
        $concatFilter2 = $columnValueFilters['inscription_administrative_id'];
        $concatFilter2->setSeparator($this->sourceCodeStringHelper->getSeparator());

        // destination
        $importDestination = $import->getDestination();
        $importDestination->setConnection($this->destinationConnection);

        return $import;
    }
}
 No newline at end of file