Files
kreios/backoffice/database/seeders/data/configuratore_pvc.php
T
carmine.savino 06617a985a feat: add previous configuration handling for user selections in quotes
- Implemented session storage management for the last configuration choices made by the user.
- Added functionality to prompt users when changing models to retain their previous selections.
- Introduced methods to apply previous choices to the newly loaded model, including finishes, handles, glass types, and options.
- Enhanced user experience by ensuring selections are automatically applied where applicable.
2026-10-19 19:49:44 +02:00

120 lines
7.8 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_1_anta' => [null, ['finitura_esterna', 'apertura']],
'scorrevole_parallelo_1_anta' => [null, ['finitura_esterna', 'apertura']],
'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']],
],
];