# PrepStep - Cevolani App Windows Forms (.NET 10, progetto `PrepStep`) per indicizzare, cercare e recuperare i file CAD Pro-ENGINEER/Creo di un disco/share di rete, e per trasformare l'estrazione "Distinta Base" del gestionale (file `.xls`/`.xml`) in un CSV con il percorso CAD di ogni componente, fino a raccogliere in `raw/` tutto il necessario per l'esportazione STEP con **Creo Distributed Batch**: è un pre-processo per quel passaggio, non lo sostituisce. ## Funzionalità 1. **Indice CAD** — all'avvio carica automaticamente `cad_index.db` dalla cartella di installazione (`%LOCALAPPDATA%\Programs\PrepStep`). Se manca, lo si crea con **Aggiorna indice**, oppure si apre un altro DB per la sola sessione con **Apri DB...**. **Aggiorna indice** che scansiona il disco (di default `X:\`, tutte le cartelle di primo livello che trova) e indicizza tutti i file. La **cartella di lavoro** (dove finiscono il CSV e la cartella `raw/`; gli STEP esportati con Creo vanno in `step/`, dentro la stessa cartella) è l'ultima scelta (ricordata tra un avvio e l'altro) o, la prima volta, la cartella di installazione, modificabile in qualunque momento da **File → Scegli cartella di lavoro...**. 2. **Importa Distinta Base** — trascina (o scegli da file) l'estrazione `.xls`/`.xml` del gestionale (foglio "Distinta Base", colonne Componente/Descrizione): viene generato un CSV nella cartella di lavoro, con anteprima in griglia. Se il file segue la convenzione di nome `DBP__` del gestionale, l'assieme generale dell'estrazione viene aggiunto come riga in più nel CSV (il foglio elenca solo i componenti sotto l'assieme, non l'assieme stesso). Il bottone **Verifica presenza** (compare solo dopo un import riuscito) cerca i componenti nel database — è questo passo, non il solo import, a sbloccare la fase successiva. 3. **Crea cartella raw** — cerca nell'indice il percorso CAD di ogni componente importato (assieme generale incluso) e copia i file trovati in una cartella `raw/` dentro la cartella di lavoro. 4. **Trova componenti referenziati** — legge i metadati dei file `.asm` in `raw/` per trovare ricorsivamente i sotto-assiemi/parti che li compongono, copiandoli a loro volta in `raw/` (passo opzionale se la distinta contiene solo parti singole). 5. **Trascina su Creo** — mostra i file `.asm` della distinta già in `raw/`, trascinabili su Creo Distributed Batch per l'esportazione STEP (passo manuale, fuori da quest'app): scrive in `step/`, dentro la cartella di lavoro. Guida utente passo-passo completa in [`docs/guida-utente.md`](docs/guida-utente.md) (stessa sintesi anche in-app da **Aiuto → Guida**, F1). ## Requisiti - Windows - [.NET 10 SDK](https://dotnet.microsoft.com/download) (per build/run da sorgente) - Accesso alla share di rete con i file CAD (`X:\` di default) per l'indicizzazione ## Build ```powershell cd PrepStep dotnet build -c Release ``` ## Avvio Da sorgente: ```powershell cd PrepStep dotnet run -c Release ``` Oppure l'eseguibile già compilato: ```powershell cd PrepStep\bin\Release\net10.0-windows .\PrepStep.exe ``` ## Pubblicazione (eseguibile standalone) Genera un `.exe` self-contained per Windows x64, senza bisogno del runtime .NET installato sulla macchina di destinazione: ```powershell cd PrepStep dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publish ``` L'eseguibile risultante è in `PrepStep\publish\PrepStep.exe` — un unico file, si copia e si lancia su un'altra macchina Windows senza bisogno di .NET installato. ## Setup di installazione Per distribuire l'app agli utenti si genera un setup con [Inno Setup 6](https://jrsoftware.org/isinfo.php) (una volta sola: `winget install JRSoftware.InnoSetup --scope user`). Dalla root del repo, **dopo** il `dotnet publish` qui sopra: ```powershell & "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe" installer\PrepStep.iss ``` Produce `installer\Output\PrepStep-Setup-.exe` (versione letta dall'exe, cioè `` del csproj). Il setup: - installa **solo per l'utente corrente**, in `%LOCALAPPDATA%\Programs\PrepStep`, senza chiedere i diritti di amministratore; - crea nel menu Start i collegamenti al programma e al disinstallatore (quello sul desktop è facoltativo); - compare in "Impostazioni → App installate", da cui si disinstalla. Se l'app è già installata, il setup chiede prima cosa fare: **Sì** aggiorna/reinstalla (DB e impostazioni restano), **No** disinstalla, **Annulla** esce. Installazione silenziosa (aggiorna senza chiedere) — es. per distribuirla da script: `PrepStep-Setup-.exe /VERYSILENT /SUPPRESSMSGBOXES`. ## Struttura del progetto Tutto il codice è in `PrepStep/` (unico progetto nella solution, GUI e indicizzazione integrate): - `Program.cs` — entry point. - `Form1.cs` — finestra principale (indice CAD, import Distinta Base, griglia risultati); UI costruita interamente in codice, nessun designer visuale. - `Indexer.cs` — scansione del disco e scrittura/aggiornamento del DB SQLite. - `DistintaBaseImporter.cs` — parsing del file Distinta Base (SpreadsheetML XML o Excel binario/OpenXML tramite ExcelDataReader) e generazione CSV. - `ProgressForm.cs` — dialog di avanzamento durante l'aggiornamento indice. Il database generato (`cad_index.db`), i file Excel/CSV della distinta trascinati nella root e le cartelle `raw/`/`step/` sono rigenerabili e non sono tracciati in git (vedi `.gitignore`). ## Test `PrepStep.Tests/` contiene unit test (regex di estrazione dei componenti dai `.asm`, parsing del nome file Pro-E) e integration test (schema/vista SQL reale, con focus sui bug di case-sensitivity/duplicati già risolti). Da eseguire: ```powershell cd PrepStep.Tests dotnet test ```