# DPass 61F1 — Scelta piano e attivazione gratuita da sportello

Base richiesta: 61F completata in LOCALE, inclusa la sua migration. Questa patch non modifica il database.

## Ambito
Corregge esclusivamente **Sportello abbonamenti → Nuova richiesta da sportello** (richiesta inserita dall’operatore). Il percorso di approvazione delle richieste inviate dall’utente rimane invariato.

Il modulo usa un’unica selezione dei piani, condivisa fra GET e POST e ricavata dal catalogo pubblicato del tenant/Comune. La scelta viene mantenuta dopo gli errori. I piani non vengono scelti automaticamente.

- Scelta durante la richiesta: piano obbligatorio anche per “Salva e presenta”.
- Scelta durante l’approvazione: piano obbligatorio per approvare; “Salva e presenta” permette di rinviare la scelta alla revisione.
- Scelta al pagamento: i piani a pagamento restano differiti. Gli eventuali gratuiti possono essere scelti espressamente per l’attivazione in approvazione; con soli piani gratuiti la scelta è obbligatoria quando si approva.
- Un gratuito mostra la scadenza proposta e l’opzione di personalizzarla con motivazione. Il server riutilizza il servizio 61F, senza duplicarlo.
- Dopo l’emissione gratuita viene aperto il titolo, NON la pagina di incasso che potrebbe proporre un rinnovo.
- “Salva e presenta” non attiva e non memorizza una scadenza personalizzata di approvazione: la si imposta alla successiva conferma.
- Piani a pagamento, controlli documenti, autorizzazioni, rinnovi online e relative regole restano invariati.

La personalizzazione della scadenza vale solo per la prima attivazione gratuita. La fine validità resta il primo istante non valido. Il limite dell’autorizzazione è rispettato. Non vengono modificati piani o pratiche pregresse.

## Catalogo
Si usa la versione pubblicata come negli altri percorsi: la patch NON pubblica automaticamente modifiche in bozza. Se la modalità nella tipologia differisce dalla versione pubblicata, il modulo lo segnala. Valutare la pubblicazione della tipologia dal catalogo solo se quelle modifiche sono intenzionali, non come tentativo generico di risolvere un errore.

## Applicazione
Scaricare lo ZIP in `C:\Users\massi\Downloads`. Da WSL:

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

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

L’installer controlla integrità, marcatore e hash, salva il backup in `storage/app/patch-backups`, applica i file, esegue test isolati e pulisce solo le viste compilate standard. Non esegue migration, Composer, NPM, cron o scritture al database applicativo. Se `pdo_sqlite` è assente segnala esplicitamente che la suite SQL è saltata. I test sono parte del collaudo, non sostituiscono la prova sul MySQL locale.

In caso di conflitto fermarsi, non forzare. Un test fallito dopo la copia provoca il tentativo di ripristino dei soli file interessati. Per un ripristino manuale dello stesso pacchetto, prima di nuove patch: `php /percorso/estratto/install.php rollback /home/n4o_admin/progetti/dpass`. Il ripristino controlla eventuali modifiche successive e non cancella pratiche o titoli emessi nel frattempo.

## Collaudo
Aprire nuovamente lo sportello, scegliere anagrafica e tipologia e premere Continua. Scegliere il piano; provare un gratuito con la scadenza standard e un secondo con personalizzazione, poi un piano pagato e Salva e presenta senza piano nella modalità durante approvazione. Usare targhe/intervalli di prova che non siano già in conflitto. Controllare email e PDF nel locale: non sono stati inviati/generati nei test del pacchetto.

## Produzione
Vedere `RILASCIO_CPANEL.md`. Il database 61F rimane necessario. Il SQL 61F incluso è una copia identica di riferimento: NON eseguirlo di nuovo se già applicato. Non usare il cumulativo strutture per questa correzione.
