# DPass — Patch 61D3
## Massimo giorni indipendente dalla tariffa; percorso Strutture IT/EN

Base richiesta: patch 61D2 applicata e collaudata sul progetto locale `~/progetti/dpass`.
Questa patch non e un aggiornamento autonomo della produzione e non include tutte le patch precedenti.

## Comportamento
La modalita giornaliera resta identificata da tariffa oraria, massimale economico positivo e periodo `rolling_24h` (24 ore mobili). SOLO per questa modalita Strutture, `maximum_duration_minutes` non limita la durata complessiva della prenotazione. Una tariffa con massimo 1440 minuti puo quindi essere usata per una permanenza di 2, 3 o piu giorni, entro il massimo dell'installazione. Non cambiano la durata massima delle soste ordinarie, le prenotazioni in minuti, i prodotti a durata fissa o la logica economica per periodo introdotta nella 61D2.

Il nuovo parametro e:

```dotenv
DPASS_FACILITY_BOOKING_MAX_DAYS=30
```

La patch NON modifica il `.env`. Se la variabile manca, il valore predefinito e gia 30: non occorre aggiungerla per cominciare il collaudo. Per personalizzare, aggiungere oppure modificare UNA SOLA riga nel `.env` locale. Sono ammessi interi 1..366 (il tetto tecnico di 366 giorni esisteva gia nel percorso 61D2). Valori vuoti, zero, negativi, frazionari o superiori a 366 bloccano le nuove prenotazioni giornaliere con un messaggio, anziche allargare silenziosamente il limite. Il valore vale per tutti i tenant/Comuni della stessa installazione e rappresenta la durata della permanenza, non l'anticipo massimo della prenotazione.

Il codice legge il parametro da `config/dpass_facilities.php`, compatibile con la cache di configurazione. Dopo una successiva modifica manuale del `.env` locale eseguire:

```bash
cd ~/progetti/dpass
php artisan config:clear
```

Durante l'applicazione, l'installer pulisce gia la cache di configurazione standard e le viste Blade compilate; mantiene packages.php, services.php, cache rotte e dati applicativi.

I controlli del massimo giorni sono nel form, nel preventivo, nel calcolatore e prima di iniziare un nuovo acquisto. Un preventivo aperto puo dover essere ricalcolato. Pagamenti gia avviati e prenotazioni gia confermate conservano importo e validita anche se successivamente si riduce il massimo.

## Lingue
Elenco strutture, form, preventivo, importi, pagamenti, elenco/dettaglio prenotazioni, stati, avvisi, messaggi di validazione e ricevuta dell'ingresso seguono il selettore lingua IT/EN esistente. Il checkout PayPal delle strutture usa la lingua della transazione; ritorno e annullamento hanno un fallback consentito solo IT/EN quando manca la lingua in sessione. Una scelta presente in sessione resta prioritaria. Le ricariche e gli altri pagamenti mantengono il precedente criterio del profilo.

Nomi di strutture/tariffe, descrizioni e altri contenuti inseriti dal gestore NON vengono tradotti automaticamente. Non vengono riscritti testi storici dei movimenti. La ricevuta delle soste ordinarie resta sul vecchio template; solo le nuove prenotazioni Strutture usano quello bilingue. Branding e menu mantengono la configurazione esistente.

## Applicazione locale
Salvare `dpass_patch_61D3_limite_giorni_lingue.zip` in `C:\Users\massi\Downloads`.
Copiare il blocco completo nel terminale Ubuntu/WSL, comprese le parentesi:

```bash
(
  set -e
  cd ~/progetti/dpass
  PATCH_DIR="$(mktemp -d /tmp/dpass_patch_61D3.XXXXXX)"
  unzip -q \
    /mnt/c/Users/massi/Downloads/dpass_patch_61D3_limite_giorni_lingue.zip \
    -d "$PATCH_DIR"
  bash "$PATCH_DIR/apply_patch.sh" "$PWD"
)
```

Esito: `[61D3] PATCH 61D3 APPLICATA E VERIFICATA.`

L'installer verifica SHA-256, marcatore 61D2 e hash base; non forzare in caso di conflitto. Crea backup sorgenti e marcatore 61D3. Un errore dopo la copia causa un tentativo di ripristino completo; il ripristino rifiuta file successivamente modificati. `.env`, database, Composer, NPM e cron non vengono modificati. Non viene eseguito alcun SQL o comando migration.

I test girano in ambiente isolato. Con pdo_sqlite nativo disponibile, anche le suite database usano esclusivamente SQLite `:memory:` e pagamenti simulati; in caso contrario l'installer segnala esplicitamente SALTATI i test database. Nessun database specificato nel `.env` viene usato dai test.

Solo preflight: `bash /percorso/patch/apply_patch.sh ~/progetti/dpass --check`.
Ripristino esplicito: `bash /percorso/patch/rollback.sh ~/progetti/dpass`; richiede il marcatore con backup valido e file non modificati dopo la patch. Non usare il ripristino per rimuovere patch successive. I dati applicativi non vengono toccati.

## Collaudo manuale minimo
1. Tariffa di struttura continua: 2 euro/ora, massimale 10 euro/24 ore mobili, durata massima tariffa 1440 minuti. Con targa nuova e nessun consumo precedente, verificare 1/2/3 giorni per 10/20/30 euro, senza cambiare i 1440 minuti in tariffa.
2. Impostare massimo 3 nel `.env`, pulire config locale, verificare che 4 giorni siano rifiutati senza addebito. Ripristinare il massimo voluto al termine del test.
3. Cambiare lingua IT/EN: scelta struttura, date/giorni, preventivo, borsellino, PayPal sandbox, esito, elenco/dettaglio e ricevuta. I nomi inseriti dal gestore restano originali.
4. Provare prenotazione in minuti e normale sosta su strada oltre il loro massimo: devono restare bloccate. Confermare menu e branding invariati.
5. Verificare sul locale PHP 8.3/MySQL, con PayPal sandbox reale, le notifiche ripetute, ripresa pagamento e ritorno dopo perdita sessione; controllare il PDF effettivamente generato da DomPDF.

## Produzione, SOLO dopo il collaudo
Nessuna nuova migration; SQL cumulativo 61A/61B/61D incluso identico alla 61D2. NON eseguire ora ne il cumulativo ne il vecchio 61B separatamente.
Al rilascio completo usare i file dal progetto locale collaudato e l'elenco cumulativo. Istruzioni esclusivamente cPanel/FTP/phpMyAdmin in `CPANEL_RILASCIO_61D3.md`. Il parametro puo essere diverso tra installazioni separate.
