versione 0.8

This commit is contained in:
2026-07-13 11:58:30 +02:00
commit 761db06329
1723 changed files with 159016 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
# Origine dei prezzi (listino.json) — sistema PVC
Tutti i `listino.json` in `src/assets/data/modelli/pvc/<cartella>/` sono generati da
`scripts/extract_listini_pvc.py`, che legge i blocchi prezzo da `PVC_LISTINO.xls`
(root del repo). Ogni blocco è identificato da un titolo nella colonna A del foglio
excel; lo script mappa titolo → cartella tramite `KNOWN_FOLDERS`.
Rigenerare con: `python3 scripts/extract_listini_pvc.py` (richiede `pip install xlrd`).
## Modelli con listino dedicato (prezzo reale, 1 blocco = 1 modello)
| id catalogo | Titolo blocco in PVC_LISTINO.xls |
|---|---|
| `finestra_1_anta` | `FINESTRA 1 ANTA` |
| `finestra_2_ante` | `FINSETRA 2 ANTE` *(typo presente nel file excel originale)* |
| `finestra_3_ante` | `FINESTRA 3 ANTE` |
| `finestra_vasistas` | `WASISTAS CON MARTELLINA` |
| `finestra_anta_fissa` | `TELAIO FISSO` |
| `portafinestra_1_anta` | `PORTA-FINESTRA 1 ANTA` |
| `portafinestra_2_ante` | `PORTA-FINESTRA 2 ANTE` |
| `portafinestra_3_ante` | `PORTA-FINESTRA 3 ANTE` |
| `bilico` | `BILICO ORIZZONTALE` |
| `porta_1_anta` | `PORTA 1 ANTA, CON SERRATURA` |
| `porta_1_anta_antipanico` | `PORTA 1 ANTA, ANTIPANICO (APERTURA ESTERNA)` |
| `porta_2_ante` | `PORTA 2 ANTE, CON SERRATURA` |
| `porta_2_ante_antipanico` | `PORTA 2 ANTE, ANTIPANICO (APERTURA ESTERNA)` |
> Nota su `porta_1_anta` / `porta_2_ante`: nel listino esistono anche le varianti
> "CON SERRATURA (APERTURA ESTERNA)" per entrambi — non usate perché non esiste
> una cartella/modello 3D GAMMA distinto per quella variante di apertura.
## Modelli senza listino dedicato: riusano il blocco `CASSONETTO PVC`
Nessuno dei prodotti sotto ha un blocco prezzi proprio in `PVC_LISTINO.xls`, né i
file `.ods` di GAMMA PVC contengono un listino. Su richiesta esplicita, a tutti
questi modelli è stato assegnato lo stesso blocco `CASSONETTO PVC` (range
30–250 cm su entrambe le dimensioni), come prezzo provvisorio in attesa di un
listino reale per prodotto.
| id catalogo | categoria |
|---|---|
| `cassonetto_80` | accessori |
| `cassonetto_139` | accessori |
| `cassonetto_150` | accessori |
| `scuretto_base` | scuretti |
| `scuretto_pannello_malachite` | scuretti |
| `scuretto_pannello_alessandrite` | scuretti |
| `scorrevole_hst_1_anta` | scorrevoli |
| `scorrevole_hst_2_ante` | scorrevoli |
| `scorrevole_parallelo_1_anta` | scorrevoli |
| `scorrevole_sf_1_anta` | scorrevoli |
| `scorrevole_sf_2_ante` | scorrevoli |
| `traslante_scorrevole_1_anta` | scorrevoli |
## Modelli ancora senza alcuna corrispondenza
| id catalogo | listino attuale |
|---|---|
| `celino` | copia del listino di `finestra_2_ante` (placeholder, nessun prezzo reale disponibile) |
## Blocchi presenti nel listino ma non usati (nessuna cartella attiva)
Questi titoli esistono in `PVC_LISTINO.xls` ma corrispondono a prodotti che non
hanno un modello 3D GAMMA attivo nel catalogo attuale (cartelle archiviate in
`src/assets/data/modelli/pvc_archiviate_senza_corrispondenza/`):
- `PORTA 1 ANTA, CON SERRATURA_(APERTURA ESTERNA)`
- `PORTA 2 ANTE, CON SERRATURA_(APERTURA ESTERNA)`
- `SCORREVOLE IN LINEA_2 ANTE` / `_3 ANTE` / `_4 ANTE_2 FISSE + 2 APRIBILI`
- `TRASLANTE_ANTA DX+ANTA FISSA SX` / `DX+FISSO SX` / `SX+ANTA FISSA DX` / `SX+FISSO DX`
- `ALZANTE 2ANTE_MANO DX` / `MANO SX`
- `ALZANTE_1ANTA APRIBILE DX+ANTA FISSA SX` / `SX+ANTA FISSA DX`
- `ALZANTE_4ANTE(2 APRIBILI+2 FISSE)`
+81
View File
@@ -0,0 +1,81 @@
# Parametri URL del configuratore
Il configuratore legge la sua configurazione iniziale esclusivamente dalla query string dell'URL con cui viene caricato `index.html` (tipicamente dentro un `<iframe>`). La logica di parsing/validazione è in [`src/js/communication/UrlParamsParser.js`](../src/js/communication/UrlParamsParser.js), usata da [`Application.start()`](../src/js/Application.js).
Esempio:
```
https://.../index.html?sistema=pvc&type=finestra_2_ante
```
## Parametri obbligatori
| Parametro | Descrizione | Valori ammessi |
|---|---|---|
| `sistema` | Materiale/serramento | `pvc`, `alluminio`, `legno`, `acciaio` |
| `type` | Tipologia di infisso (id modello) | vedi tabella sotto, dipende da `sistema` |
Se uno dei due manca, o `sistema` non è tra i valori ammessi, l'app lancia un errore in fase di avvio (`Application.start()` intercetta l'eccezione, emette `EVENTS.APP_ERROR` e — se l'app gira in iframe — notifica il parent con `configuratore_error` via `postMessage`).
Non ci sono altri parametri opzionali gestiti dall'app: tutto il resto della configurazione (dimensioni, finiture, maniglia, vetro, ecc.) viene impostato dall'utente nell'interfaccia dopo il caricamento.
## Valori validi di `type` per ciascun `sistema`
Ricavati da `src/assets/data/sistemi/<sistema>/modelli.json` (l'elenco effettivo è quel file — questa tabella va aggiornata se i JSON cambiano).
### `sistema=pvc`
- `finestra_anta_fissa`
- `finestra_vasistas`
- `finestra_1_anta`
- `finestra_2_ante`
- `finestra_3_ante`
- `portafinestra_1_anta`
- `portafinestra_2_ante`
- `portafinestra_3_ante`
- `scorrevole_multislide`
- `alzante_scorrevole_hst`
- `portoncino`
- `cassonetto` (variante semplificata, vedi sotto)
### `sistema=alluminio`
- `finestra_anta_fissa`
- `finestra_vasistas`
- `finestra_1_anta`
- `finestra_2_ante`
- `finestra_3_ante`
- `portafinestra_1_anta`
- `portafinestra_2_ante`
- `portafinestra_3_ante`
- `alzante_scorrevole`
- `scorrevole`
- `portoncino`
### `sistema=legno`
- `finestra_anta_fissa`
- `finestra_vasistas`
- `finestra_1_anta`
- `finestra_2_ante`
- `finestra_3_ante`
- `portafinestra_1_anta`
- `portafinestra_2_ante`
- `portafinestra_3_ante`
- `alzante_scorrevole_hst`
- `portoncino`
### `sistema=acciaio`
- `finestra_anta_fissa`
- `finestra_vasistas`
- `finestra_1_anta`
- `finestra_2_ante`
- `finestra_3_ante`
- `portafinestra_1_anta`
- `portafinestra_2_ante`
- `portafinestra_3_ante`
## Caso speciale: `type=cassonetto`
Quando `type=cassonetto`, l'app salta l'inizializzazione di maniglia/finitura interna (non applicabili a un cassonetto) e usa il template menu dedicato `assets/_menu-cassonetto.html` invece di `assets/_menu.html`.
## Comunicazione col parent (non URL, ma correlata)
Se il configuratore è in iframe, oltre ai parametri URL può ricevere messaggi `postMessage` dal parent (gestiti da [`IframeBridge`](../src/js/communication/IframeBridge.js)), es. `{ fn: 'load_configuration', payload }` per precaricare una configurazione salvata. L'origine del parent deve essere in whitelist (`https://www.infissionline.it`, `https://infissionline.test`).