Refactor PVC models and update tests

- Updated the PVC models in the database and adjusted the tests accordingly to reflect the new model counts and codes.
- Removed deprecated models from the JSON data for PVC systems.
- Added new GLB models for "scorrevole_sf_3_ante" and "scorrevole_sf_4_ante".
- Enhanced the development scripts to streamline the build process for both frontends.
- Updated documentation to reflect changes in the development environment and deployment process.
- Improved the styling of texture radio options for better visibility.
- Fixed URL handling in the configurator to ensure proper routing and API calls.
This commit is contained in:
2026-10-20 18:40:59 +02:00
parent b6a32edfe6
commit 0dfda3a338
33 changed files with 339 additions and 366 deletions
@@ -0,0 +1,86 @@
<?php
use App\Models\Modello;
use App\Models\Sistema;
use Illuminate\Database\Migrations\Migration;
/**
* Scorrevoli SF PVC: i modelli 3 e 4 ante hanno ora il file 3D e vanno nel
* configuratore (listino, regole vetro e opzioni ci sono già); 1 anta SF e parallelo
* 1 anta escono dalla gamma (non hanno listino né opzioni proprie).
*/
return new class extends Migration
{
private const NUOVI = [
'scorrevole_sf_3_ante' => 'SCORREVOLE 3 ANTE SF PVC - SALAMANDER',
'scorrevole_sf_4_ante' => 'SCORREVOLE 4 ANTE SF PVC - SALAMANDER',
];
private const ELIMINATI = ['scorrevole_sf_1_anta', 'scorrevole_parallelo_1_anta'];
/** Moduli che il 2 ante ha in più rispetto ai modelli senza configurazione 3D. */
private const MODULI_3D = ['listino', 'maniglia', 'modello', 'vetro'];
public function up(): void
{
$pvc = Sistema::where('codice', 'pvc')->first();
if (! $pvc) {
return;
}
foreach (self::NUOVI as $codice => $titolo) {
$modello = $pvc->modelli()->where('codice', $codice)->first();
$modello?->update([
'attivo' => true,
'cartella' => $codice,
'file_modello' => "{$codice}.glb",
'cartella_texture' => 'finestra_2_ante',
'titolo' => $modello->titolo ?: $titolo,
'moduli' => array_values(array_unique([...self::MODULI_3D, ...($modello->moduli ?? [])])),
]);
}
// Una alla volta: l'evento deleted rimuove anche l'icona dal disco.
$pvc->modelli()->whereIn('codice', self::ELIMINATI)->get()->each->delete();
$this->dopoIl2Ante($pvc);
}
/** Attivandosi finirebbero in fondo agli attivi: li mette subito dopo lo scorrevole SF 2 ante. */
private function dopoIl2Ante(Sistema $pvc): void
{
$codici = $pvc->modelli()->orderBy('ordine')->orderBy('id')->pluck('codice')
->diff(array_keys(self::NUOVI))->values()->all();
$posizione = array_search('scorrevole_sf_2_ante', $codici, true);
if ($posizione !== false) {
array_splice($codici, $posizione + 1, 0, array_keys(self::NUOVI));
}
foreach ($codici as $i => $codice) {
$pvc->modelli()->where('codice', $codice)->update(['ordine' => $i + 1]);
}
Modello::normalizzaOrdine($pvc->id);
}
public function down(): void
{
// I modelli eliminati non vengono ricreati: si recuperano con il CatalogoSeeder
// da una versione precedente di database/seeders/data/modelli_pvc.php.
$pvc = Sistema::where('codice', 'pvc')->first();
if (! $pvc) {
return;
}
foreach (array_keys(self::NUOVI) as $codice) {
$modello = $pvc->modelli()->where('codice', $codice)->first();
$modello?->update([
'attivo' => false,
'cartella' => null,
'file_modello' => null,
'cartella_texture' => null,
'moduli' => array_values(array_diff($modello->moduli ?? [], self::MODULI_3D)),
]);
}
}
};