129 lines
5.1 KiB
PHP
129 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services\GesconImport\Modules;
|
|
|
|
use App\Services\GesconImport\ImportProgressLogger;
|
|
use App\Services\GesconImport\Modules\Contracts\ImportModule;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Throwable;
|
|
|
|
class UnitaImportModule extends BaseImportModule implements ImportModule
|
|
{
|
|
public function handle(array $payload, ImportContext $context): array
|
|
{
|
|
$legacy = (string) ($payload['legacy_code'] ?? '');
|
|
if ($legacy === '') {
|
|
throw new \InvalidArgumentException('legacy_code è obbligatorio.');
|
|
}
|
|
|
|
$steps = (array) ($payload['steps'] ?? ['unita']);
|
|
$anno = isset($payload['anno']) ? (int) $payload['anno'] : null;
|
|
$mdbCondomin = (string) ($payload['mdb_condomin_path'] ?? '');
|
|
$dry = (bool) ($payload['dry_run'] ?? true);
|
|
$limit = isset($payload['limit']) ? (int) $payload['limit'] : null;
|
|
$scala = isset($payload['scala']) ? (string) $payload['scala'] : null;
|
|
$pianoMin = Arr::get($payload, 'piano_min');
|
|
$pianoMax = Arr::get($payload, 'piano_max');
|
|
$onlyPert = isset($payload['only_pertinenze']) ? (string) $payload['only_pertinenze'] : null;
|
|
$splitMode = $payload['split_mode'] ?? null;
|
|
$targetStabileId = array_key_exists('target_stabile_id', $payload) ? (int) $payload['target_stabile_id'] : null;
|
|
$targetStabileCode = array_key_exists('target_stabile_code', $payload)
|
|
? trim((string) $payload['target_stabile_code'])
|
|
: null;
|
|
$targetStabileCode = $targetStabileCode === '' ? null : $targetStabileCode;
|
|
$targetAdminIdOverride = isset($payload['target_admin_id']) ? (int) $payload['target_admin_id'] : null;
|
|
|
|
if (!$mdbCondomin) {
|
|
$mdbCondomin = $this->resolveMdbPath($legacy, $anno);
|
|
}
|
|
|
|
[$targetStabileId, $targetStabileCode, $splitMode, $targetAdminId] = $this->hydrateMappingPreferences(
|
|
$context,
|
|
$legacy,
|
|
$targetStabileId,
|
|
$targetStabileCode,
|
|
$splitMode,
|
|
'unita_last_filters'
|
|
);
|
|
|
|
if ($targetAdminIdOverride && $this->canTargetAdmin($context, $targetAdminIdOverride)) {
|
|
$targetAdminId = $targetAdminIdOverride;
|
|
}
|
|
|
|
$logger = new ImportProgressLogger();
|
|
$logger->begin('import-unita', [
|
|
'legacy_code' => $legacy,
|
|
'anno' => $anno,
|
|
'steps' => $steps,
|
|
'dry' => $dry,
|
|
]);
|
|
|
|
$results = [];
|
|
foreach ($steps as $step) {
|
|
try {
|
|
Artisan::call('gescon:import-full', $this->buildArtisanParams([
|
|
'--solo' => $step,
|
|
'--stabile' => $legacy,
|
|
'--mdb-condomin' => $mdbCondomin,
|
|
'--anno' => $anno,
|
|
'--dry-run' => $dry,
|
|
'--limit' => $limit,
|
|
'--scala' => $scala,
|
|
'--piano-min' => $pianoMin !== null ? (string) $pianoMin : null,
|
|
'--piano-max' => $pianoMax !== null ? (string) $pianoMax : null,
|
|
'--only-pertinenze' => $onlyPert,
|
|
'--split-mode' => $splitMode,
|
|
'--target-stabile-id' => $targetStabileId,
|
|
'--target-stabile-code' => $targetStabileCode,
|
|
'--amministratore-id' => $targetAdminId,
|
|
]));
|
|
|
|
$output = (string) Artisan::output();
|
|
$logger->checkpoint('step.done', ['step' => $step]);
|
|
$logger->stdout("\n===== STEP {$step} =====\n" . $output . "\n");
|
|
$results[] = ['step' => $step, 'ok' => true, 'output' => $output];
|
|
} catch (Throwable $e) {
|
|
$logger->error('step.error', ['step' => $step, 'error' => $e->getMessage()]);
|
|
$results[] = ['step' => $step, 'ok' => false, 'error' => $e->getMessage()];
|
|
}
|
|
}
|
|
|
|
$logger->finish(['results' => array_map(fn ($r) => ['step' => $r['step'], 'ok' => $r['ok']], $results)]);
|
|
$this->persistMappingMeta(
|
|
$context,
|
|
$legacy,
|
|
$targetStabileId,
|
|
$targetStabileCode,
|
|
$targetAdminId,
|
|
[
|
|
'anno' => $anno,
|
|
'scala' => $scala,
|
|
'piano_min' => $pianoMin,
|
|
'piano_max' => $pianoMax,
|
|
'only_pertinenze' => $onlyPert,
|
|
'split_mode' => $splitMode,
|
|
'dry' => $dry,
|
|
'limit' => $limit,
|
|
'steps' => $steps,
|
|
],
|
|
'unita_last_filters'
|
|
);
|
|
|
|
return [
|
|
'ok' => !collect($results)->contains(fn ($r) => $r['ok'] === false),
|
|
'legacy_code' => $legacy,
|
|
'anno' => $anno,
|
|
'mdb_condomin_path' => $mdbCondomin,
|
|
'dry_run' => $dry,
|
|
'split_mode' => $splitMode,
|
|
'target_stabile_id' => $targetStabileId,
|
|
'target_stabile_code' => $targetStabileCode,
|
|
'target_admin_id' => $targetAdminId,
|
|
'steps' => $steps,
|
|
'results' => $results,
|
|
];
|
|
}
|
|
|
|
}
|