- 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.
118 lines
7.6 KiB
PHP
118 lines
7.6 KiB
PHP
<?php
|
|
|
|
// Regole del configuratore PVC. Vetri e regole geometriche da
|
|
// "Specifica tecnica vetri - UFFICIALE DEFINITIVA" (14/10/2026); supplementi dai vecchi
|
|
// form.json; icone da "GRAFICA INTERFACCIA PVC" (copiate, senza doppioni, in data/configuratore/pvc).
|
|
// Le proprietà 3D dei nuovi vetri sono valori iniziali da rifinire dal backoffice.
|
|
|
|
$trasparente = ['colore' => '#FFFFFF', 'roughness' => 0.94, 'metalness' => 0, 'opacita' => 0.22];
|
|
$satinato = ['colore' => '#FFFFFF', 'roughness' => 0.94, 'metalness' => 0, 'opacita' => 0.4, 'texture_bump' => 'vetri/texture/vetro_satinato.jpg', 'bump_scala' => 6];
|
|
$riflettente = ['roughness' => 0.28, 'metalness' => 1, 'opacita' => 0.5];
|
|
$pannello = ['roughness' => 0.8, 'metalness' => 0, 'opacita' => 1];
|
|
|
|
$standard = fn (int $lastre, int $detrazioneL, int $detrazioneH) => [[
|
|
'descrizione' => null,
|
|
'quantita' => $lastre,
|
|
'divisore' => $lastre,
|
|
'detrazione_larghezza' => $detrazioneL,
|
|
'detrazione_altezza' => $detrazioneH,
|
|
]];
|
|
|
|
return [
|
|
// codice, descrizione, maggiorazione €/m², minimo m², icona, proprietà 3D
|
|
'vetri' => [
|
|
['V1', 'Acustico base', 80, 0.5, '01_acustico_base.jpg', ['opacita' => 0.3] + $trasparente],
|
|
['V2', 'Standard satinato', 40, 0.5, '02_standard_satinato.jpg', $satinato],
|
|
['V3', 'Standard trasparente', 0, 0.5, '03_standard_trasparente.jpg', $trasparente + ['predefinito' => true]],
|
|
['V4', 'Acustico satinato', 120, 0.5, '04_acustico_satinato.jpg', $satinato],
|
|
['V5', 'Vetro max - ampie dimensioni trasparente', 80, 0.5, '05_vetro_max_trasparente.jpg', $trasparente],
|
|
['V6', 'Vetro max - ampie dimensioni satinato', 115, 0.5, '06_vetro_max_satinato.jpg', $satinato],
|
|
['V7', 'Per infisso senza vetro', -90, 0, '07_no_vetro.jpg', ['opacita' => 0] + $trasparente],
|
|
['V8', 'Pannello PVC 28 mm - bianco', 110, 0.5, '08_pannello_pvc_bianco.jpg', ['colore' => '#F2F2F2'] + $pannello],
|
|
['V9', 'Pannello PVC 28 mm - rivestito', 150, 0.5, '09_pannello_pvc_rivestito.jpg', ['colore' => '#BFB5A3'] + $pannello],
|
|
['V10', 'Riflettente non termico - trasparente', 200, 0.5, '10_riflettente_no_termico_trasparente.jpg', ['colore' => '#D6DEE3'] + $riflettente],
|
|
['V11', 'Riflettente termico', 300, 0.5, '11_riflettente_termico.jpg', ['colore' => '#C5BA9B'] + $riflettente],
|
|
['V12', 'Riflettente non termico - bronzo', 200, 0.5, '12_riflettente_no_termico_bronzo.jpg', ['colore' => '#8C6B45', 'opacita' => 0.55] + $riflettente],
|
|
['V13', 'Triplo base satinato', 210, 0.5, '13_triplo_base_satinato.jpg', $satinato],
|
|
['V14', 'Triplo base trasparente', 175, 0.5, '14_triplo_base_trasparente.jpg', ['opacita' => 0.4] + $trasparente],
|
|
],
|
|
|
|
// codice => [descrizione, lastre]
|
|
'regole_vetro' => [
|
|
'FIXED' => ['Telaio fisso', $standard(1, 106, 106)],
|
|
'F1' => ['Finestra 1 anta', $standard(1, 189, 189)],
|
|
'F2' => ['Finestra 2 ante', $standard(2, 312, 189)],
|
|
'F3' => ['Finestra 3 ante', $standard(3, 435, 189)],
|
|
'PF1' => ['Porta-finestra 1 anta', $standard(1, 189, 189)],
|
|
'PF2' => ['Porta-finestra 2 ante', $standard(2, 311, 189)],
|
|
'PF3' => ['Porta-finestra 3 ante', $standard(3, 435, 189)],
|
|
'WAS' => ['Wasistas', $standard(1, 189, 190)],
|
|
'P1' => ['Porta 1 anta (anche esterna/antipanico)', $standard(1, 265, 237)],
|
|
'P2' => ['Porta 2 ante (anche esterna/antipanico)', $standard(2, 466, 237)],
|
|
'SC2' => ['Scorrevole in linea 2 ante', $standard(2, 288, 230)],
|
|
'SC3' => ['Scorrevole in linea 3 ante', $standard(3, 351, 230)],
|
|
'SC4' => ['Scorrevole in linea 4 ante', $standard(4, 496, 230)],
|
|
'TR_A_AF' => ['Traslante anta + anta fissa', $standard(2, 362, 205)],
|
|
// Vetro fisso L/2 - 81 x H - 105, vetro anta L/2 - 181 x H - 205: minimo fatturabile su ciascuno.
|
|
'TR_A_F' => ['Traslante anta + fisso', [
|
|
['descrizione' => 'Vetro fisso', 'quantita' => 1, 'divisore' => 2, 'detrazione_larghezza' => 162, 'detrazione_altezza' => 105],
|
|
['descrizione' => 'Vetro anta', 'quantita' => 1, 'divisore' => 2, 'detrazione_larghezza' => 362, 'detrazione_altezza' => 205],
|
|
]],
|
|
'ALZ2' => ['Alzante 2 ante apribili', $standard(2, 370, 260)],
|
|
'ALZ_AF' => ['Alzante 1 apribile + 1 fissa', $standard(2, 362, 256)],
|
|
'ALZ4' => ['Alzante 4 ante', $standard(4, 588, 253)],
|
|
'BILICO' => ['Bilico orizzontale', $standard(1, 341, 341)],
|
|
],
|
|
|
|
// Opzioni del sistema: gruppo => [[valore, etichetta, supplemento_tipo, supplemento, icona, parametri]]
|
|
// (i profili extra sono in ProfiliExtraSeeder)
|
|
'opzioni' => [
|
|
'tipo_finitura' => [
|
|
['bianco', 'Bianco liscio', 'percentuale', 0, null, null],
|
|
['uniforme', 'Rivestimento uniforme', 'percentuale', 27, null, null],
|
|
['bicolore', 'Bicolore', 'percentuale', 30, null, null],
|
|
],
|
|
'cerniere_a_scomparsa' => [
|
|
['no', 'NO', 'fisso', 0, null, ['categoria' => 'cerniere', 'func' => 'mostraCerniere']],
|
|
['si', 'SI', 'fisso', 50, null, ['categoria' => 'cerniere', 'func' => 'nascondiCerniere']],
|
|
],
|
|
'telaio' => [
|
|
['telaio_l', 'Telaio a L', null, 0, 'telaio/telaio_l.jpg', null],
|
|
['telaio_z_35', 'Telaio a Z 35', null, 0, 'telaio/telaio_z_35.jpg', null],
|
|
['telaio_z_60', 'Telaio a Z 60', null, 0, 'telaio/telaio_z_60.jpg', null],
|
|
],
|
|
// Icone di default; i modelli con grafica propria hanno un override (vedi sotto).
|
|
'apertura' => [
|
|
['dx', 'DX', null, 0, 'apertura/finestra_2_ante/destra.jpg', ['scale_x' => 1]],
|
|
['sx', 'SX', null, 0, 'apertura/finestra_2_ante/sinistra.jpg', ['scale_x' => -1]],
|
|
],
|
|
],
|
|
|
|
// Modello => regola vetro e moduli da aggiungere (sezioni presenti nella nuova grafica).
|
|
// Le icone di apertura per modello sono in data/configuratore/pvc/opzioni/apertura/<modello>.
|
|
'modelli' => [
|
|
'finestra_1_anta' => ['F1', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'finestra_2_ante' => ['F2', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'finestra_3_ante' => ['F3', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'finestra_anta_fissa' => ['FIXED', ['finitura_esterna', 'telaio']],
|
|
'finestra_vasistas' => ['WAS', ['finitura_esterna', 'telaio']],
|
|
'portafinestra_1_anta' => ['PF1', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'portafinestra_2_ante' => ['PF2', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'portafinestra_3_ante' => ['PF3', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'porta_1_anta' => ['P1', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'porta_1_anta_antipanico' => ['P1', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'porta_2_ante' => ['P2', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'porta_2_ante_antipanico' => ['P2', ['finitura_esterna', 'apertura', 'telaio']],
|
|
'scorrevole_hst_1_anta' => ['ALZ_AF', ['finitura_esterna', 'apertura']],
|
|
'scorrevole_hst_2_ante' => ['ALZ2', ['finitura_esterna', 'apertura']],
|
|
'scorrevole_hst_4_ante' => ['ALZ4', ['finitura_esterna', 'apertura']],
|
|
// Non presenti nella specifica vetri: nessuna variazione di prezzo per il vetro.
|
|
'scorrevole_sf_2_ante' => ['SC2', ['finitura_esterna', 'apertura']],
|
|
'scorrevole_sf_3_ante' => ['SC3', ['finitura_esterna', 'apertura']],
|
|
'scorrevole_sf_4_ante' => ['SC4', ['finitura_esterna', 'apertura']],
|
|
'traslante_scorrevole_1_anta' => ['TR_A_AF', ['finitura_esterna', 'apertura']],
|
|
'traslante_scorrevole_1_anta_f' => ['TR_A_F', ['finitura_esterna', 'apertura']],
|
|
'bilico' => ['BILICO', ['finitura_esterna']],
|
|
],
|
|
];
|