diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fb04cd..f1892cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ aderisce a [Semantic Versioning](https://semver.org/lang/it/). ### Aggiunto +- "File → Elimina CSV delle distinte...": elimina i CSV generati dall'import, che altrimenti si + accumulano nella cartella di lavoro (uno per distinta). +- Guida utente e guida in-app: nuova sezione "Dove finiscono i file" (cartella di lavoro, + database, pulizia, come aprire la cartella nascosta in AppData); fase 1 allineata al DB + sempre nella cartella di installazione. + - Setup di installazione per-utente (`installer/PrepStep.iss`, Inno Setup 6): installa in `%LOCALAPPDATA%\Programs\PrepStep` senza diritti di amministratore, con collegamento nel menu Start e disinstallazione dal menu Start, da "App installate" o rilanciando il setup (che, se l'app è diff --git a/CLAUDE.md b/CLAUDE.md index 6e79a5f..2cd9636 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -122,7 +122,8 @@ per ripartire con una nuova distinta, senza toccare DB/cartella di lavoro della volutamente alla fase 2, non alla 1: quei dati restano quelli già caricati); "File → Scegli cartella di lavoro..." cambia la cartella di CSV/`raw/`/`step/` in qualunque momento; "File → Pulisci raw e step..." svuota le cartelle `raw/`/`step/` nella cartella di lavoro (non tocca -l'indice); "Aiuto → Guida" (F1) apre una sintesi interattiva delle 5 fasi (`GuidaForm.cs`). +l'indice); "File → Elimina CSV delle distinte..." elimina i `*.csv` generati in fase 2, che +altrimenti si accumulano uno per distinta nella cartella di lavoro; "Aiuto → Guida" (F1) apre una sintesi interattiva delle 5 fasi (`GuidaForm.cs`). ## Script standalone (`scripts/`) diff --git a/PrepStep/Form1.cs b/PrepStep/Form1.cs index f0e1071..22c1356 100644 --- a/PrepStep/Form1.cs +++ b/PrepStep/Form1.cs @@ -25,6 +25,7 @@ public partial class Form1 : Form private readonly MenuStrip _menu = new(); private readonly ToolStripMenuItem _mnuNuovaEstrazione = new("Nuovo"); private readonly ToolStripMenuItem _mnuPulisci = new("Pulisci raw e step..."); + private readonly ToolStripMenuItem _mnuEliminaCsv = new("Elimina CSV delle distinte..."); private readonly ToolStripMenuItem _mnuCambiaCartella = new("Scegli cartella di lavoro..."); // Wizard: una fase alla volta occupa tutta la finestra, si avanza solo quando quella @@ -150,6 +151,9 @@ public partial class Form1 : Form _mnuPulisci.Click += (_, _) => PulisciRawEStep(); mnuFile.DropDownItems.Add(_mnuPulisci); + _mnuEliminaCsv.Click += (_, _) => EliminaCsv(); + mnuFile.DropDownItems.Add(_mnuEliminaCsv); + var mnuAiuto = new ToolStripMenuItem("Aiuto"); var mnuGuida = new ToolStripMenuItem("Guida") { ShortcutKeys = Keys.F1 }; mnuGuida.Click += (_, _) => new GuidaForm().ShowDialog(this); @@ -770,6 +774,47 @@ public partial class Form1 : Form "Pulisci raw e step", MessageBoxButtons.OK, MessageBoxIcon.Information); } + /// Elimina i CSV generati dall'import delle distinte (fase 2), che altrimenti si + /// accumulano uno per distinta nella cartella di lavoro. Solo i *.csv direttamente nella + /// cartella di lavoro, non in sottocartelle; i file originali del gestionale (.xls) restano. + private void EliminaCsv() + { + string radice = _cartellaLavoro!; + var files = Directory.Exists(radice) ? Directory.GetFiles(radice, "*.csv") : []; + if (files.Length == 0) + { + MessageBox.Show(this, $"Nessun file CSV trovato in {radice}.", + "Elimina CSV", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + var nomi = files.Select(Path.GetFileName).Take(15).ToList(); + if (files.Length > nomi.Count) + nomi.Add($"... e altri {files.Length - nomi.Count}"); + var conferma = MessageBox.Show(this, + $"Eliminare {files.Length} file CSV da {radice}?\n\n{string.Join("\n", nomi)}\n\nL'operazione non è reversibile.", + "Elimina CSV", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (conferma != DialogResult.Yes) + return; + + int eliminati = 0; + foreach (var file in files) + { + try + { + File.Delete(file); + eliminati++; + } + catch (Exception ex) when (ex is IOException or UnauthorizedAccessException) + { + // ponytail: file in uso (es. aperto in Excel) -> si salta, non blocca gli altri + } + } + + MessageBox.Show(this, $"{eliminati} file CSV eliminati da {radice}.", + "Elimina CSV", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + /// Tutti i codici prt/asm noti all'indice, con i relativi percorsi (ultima /// versione, un solo file per tipo - stesso criterio di dedup per data_modifica DESC /// usato ovunque in questa classe). Caricato in un'unica query invece che una per diff --git a/PrepStep/GuidaForm.cs b/PrepStep/GuidaForm.cs index 477d652..251349e 100644 --- a/PrepStep/GuidaForm.cs +++ b/PrepStep/GuidaForm.cs @@ -38,6 +38,28 @@ public class GuidaForm : Form NotaTesto: "\"File ▸ Nuovo\" (Ctrl+N) azzera distinta/raw/verifica per ripartire " + "con una nuova distinta base, senza dover ricaricare il database."), + new("Dove finiscono i file", + "Tutto sta nella cartella di lavoro, che di default è la cartella di " + + "installazione (%LOCALAPPDATA%\\Programs\\PrepStep):", + Passi: + [ + "Il database cad_index.db sta sempre nella cartella di installazione.", + "Il CSV di ogni distinta importata, \"raw\" (file CAD delle fasi 3-4) e " + + "\"step\" (STEP esportati da Creo, cartella che indichi tu a Creo) stanno " + + "nella cartella di lavoro. Il file .xls del gestionale resta dove l'hai " + + "preso.", + "Per cambiare la cartella di lavoro: \"File ▸ Scegli cartella di lavoro...\" " + + "(viene ricordata agli avvii successivi).", + "Per fare pulizia: \"File ▸ Pulisci raw e step...\" svuota \"raw\" e " + + "\"step\"; \"File ▸ Elimina CSV delle distinte...\" elimina i CSV, che " + + "altrimenti si accumulano uno per distinta. Nessuno dei due tocca il " + + "database.", + ], + NotaTesto: "AppData è una cartella nascosta in Esplora file: per aprirla scrivi " + + "%LOCALAPPDATA%\\Programs\\PrepStep nella barra degli indirizzi (vale anche " + + "per scegliere \"step\" in Creo). Disinstallando il programma questi file " + + "restano: cancellali a mano se non servono più."), + new("Prima di iniziare", "Prima di importare la prima distinta:", Passi: @@ -50,9 +72,10 @@ public class GuidaForm : Form "Se il file segue la convenzione di nome DBP__, l'app " + "aggiunge da sola l'assieme generale come componente in più: non serve " + "fare nulla di diverso.", - "Conviene impostare la cartella di lavoro giusta (fase 1, o \"File ▸ Scegli " + - "cartella di lavoro...\") prima di importare la distinta: è lì che " + - "finiscono CSV, \"raw\" e, dopo l'esportazione con Creo, \"step\".", + "Se non vuoi usare la cartella di installazione, scegli la cartella di " + + "lavoro (\"File ▸ Scegli cartella di lavoro...\") prima di importare la " + + "distinta: è lì che finiscono CSV, \"raw\" e, dopo l'esportazione con " + + "Creo, \"step\".", "Se la cartella di lavoro è già stata usata per un'altra distinta, conviene " + "pulire \"raw\" e \"step\" prima di ripartire (\"File ▸ Pulisci raw e " + "step...\"): \"File ▸ Nuovo\" azzera solo lo stato dell'app, non i file " + @@ -60,10 +83,18 @@ public class GuidaForm : Form ]), new("1. Database", - "Carica o aggiorna l'indice \"cad_index.db\" a partire dalle cartelle di primo " + - "livello del disco/share (radice di default X:\\). Un pallino verde/rosso indica " + - "se un database è caricato. La cartella di lavoro, dove finiscono CSV, \"raw\" e " + - "\"step\", si cambia da \"File ▸ Scegli cartella di lavoro...\"."), + "All'avvio l'app carica da sola \"cad_index.db\" dalla cartella di installazione. " + + "Un pallino verde/rosso indica se un database è caricato.", + Passi: + [ + "Pallino rosso (nessun database): premi \"Aggiorna indice\" per scansionare " + + "le cartelle di primo livello della share (X:\\) e crearlo. La prima volta " + + "richiede qualche minuto, i giri successivi aggiornano solo quello che è " + + "cambiato.", + "Database da un'altra postazione: \"Apri DB...\" lo carica solo finché non " + + "chiudi il programma. Per usarlo sempre, copialo nella cartella di " + + "installazione come cad_index.db.", + ]), new("2. Importa Distinta Base", "Due passi in sequenza:", @@ -132,7 +163,8 @@ public class GuidaForm : Form "il database o la cartella di lavoro (restano quelli già impostati in fase 1).", NotaTesto: "Per ripulire le cartelle \"raw\" e \"step\" della cartella di lavoro " + "prima di un nuovo giro (senza toccare l'indice), usa \"File ▸ Pulisci raw e " + - "step...\"."), + "step...\"; per eliminare i CSV che ogni distinta importata lascia nella " + + "cartella di lavoro, usa \"File ▸ Elimina CSV delle distinte...\"."), }; public GuidaForm() diff --git a/docs/architettura.md b/docs/architettura.md index f71ef98..b7d8f68 100644 --- a/docs/architettura.md +++ b/docs/architettura.md @@ -107,7 +107,8 @@ trascinano i `.asm` su Creo Distributed Batch, che scrive in `step/`. fase 1: database e cartella di lavoro restano quelli già caricati, non serve rifare lo scan; "File → Scegli cartella di lavoro..." → `ScegliCartellaLavoro`, cambia in qualunque momento la destinazione di CSV/`raw/`/`step/`; "File → Pulisci raw e step..." svuota le cartelle - `raw/`/`step/` nella cartella di lavoro (`PulisciRawEStep`, non tocca l'indice); "Aiuto → + `raw/`/`step/` nella cartella di lavoro (`PulisciRawEStep`, non tocca l'indice); "File → Elimina CSV delle + distinte..." elimina i `*.csv` direttamente nella cartella di lavoro (`EliminaCsv`); "Aiuto → Guida" (F1) apre `GuidaForm`, sintesi interattiva delle 5 fasi per chi non ha letto questi docs. @@ -119,6 +120,9 @@ trascinano i `.asm` su Creo Distributed Batch, che scrive in `step/`. silenziosamente quelli irraggiungibili (share offline/permessi). - `PulisciRawEStep` — svuota `raw/` e `step/` nella cartella di lavoro (manutenzione, richiede conferma). + - `EliminaCsv` — elimina i `*.csv` generati dall'import (uno per distinta) nella cartella di + lavoro, solo al primo livello; gli `.xls` del gestionale restano (richiede conferma, con + l'elenco dei file). - `InizializzaDatabase` / `ScegliDatabase` — localizzazione del DB (sempre `cad_index.db` accanto all'eseguibile; "Apri DB..." ne carica un altro solo per la sessione). - `InizializzaCartellaLavoro` / `ScegliCartellaLavoro` — stesso pattern per la cartella di diff --git a/docs/guida-utente.md b/docs/guida-utente.md index 3e79bf2..ce065f0 100644 --- a/docs/guida-utente.md +++ b/docs/guida-utente.md @@ -7,22 +7,29 @@ fase vedi [`architettura.md`](architettura.md); questa guida si ferma a cosa cli cosa vede l'utente. La stessa sintesi è disponibile anche dentro l'app da **Aiuto → Guida** (F1). -## Installazione +## Dove finiscono i file -1. Lancia `PrepStep-Setup-.exe` (non servono i diritti di amministratore). -2. Alla fine lascia spuntato "Avvia PrepStep - Cevolani", oppure aprilo dal menu Start. +Tutto sta nella **cartella di lavoro**, che di default è la cartella di installazione +`%LOCALAPPDATA%\Programs\PrepStep`: -Il programma si installa in `%LOCALAPPDATA%\Programs\PrepStep`. Il database `cad_index.db` sta sempre in questa cartella. +| Cosa | Dove | +|---|---| +| database `cad_index.db` | sempre nella cartella di installazione | +| CSV di ogni distinta importata | cartella di lavoro | +| `raw/` — file CAD copiati nelle fasi 3-4 | cartella di lavoro | +| `step/` — file STEP esportati da Creo | cartella di lavoro (la indichi tu a Creo) | -Se il programma è già installato, il setup chiede cosa fare: +Il file `.xls` del gestionale resta dove l'hai preso: l'app lo legge soltanto. -- **Sì** — lo aggiorna (o reinstalla): database e cartella di lavoro restano quelli di prima; -- **No** — lo disinstalla; -- **Annulla** — esce senza fare nulla. - -Per **disinstallarlo** si può anche usare menu Start → "Disinstalla PrepStep - Cevolani", oppure -Impostazioni → App installate → PrepStep - Cevolani → Disinstalla (il -database `cad_index.db` e le impostazioni non vengono cancellati, vedi sotto). +- **Cambiare la cartella di lavoro**: **File → Scegli cartella di lavoro...** (viene ricordata + agli avvii successivi). Il database resta comunque nella cartella di installazione. +- **Aprire la cartella**: `AppData` è nascosta in Esplora file; scrivi + `%LOCALAPPDATA%\Programs\PrepStep` nella barra degli indirizzi (vale anche per scegliere + `step/` in Creo). Dalla fase 4 si apre `raw/` con **Apri cartella raw**. +- **Fare pulizia** (menu **File**): **Pulisci raw e step...** svuota `raw/` e `step/`; + **Elimina CSV delle distinte...** elimina i CSV, che altrimenti si accumulano uno per + distinta. Nessuno dei due tocca il database. Entrambi chiedono conferma. +- **Disinstallando** il programma questi file restano: cancellali a mano se non servono più. ## Prima di iniziare @@ -36,9 +43,9 @@ database `cad_index.db` e le impostazioni non vengono cancellati, vedi sotto). - Se il file segue la convenzione di nome del gestionale (`DBP__`), l'app aggiunge da sola l'assieme generale come componente in più — non serve fare nulla di diverso. -- Conviene definire la **cartella di lavoro** giusta (fase 1, o "File → Scegli cartella - di lavoro...") prima di importare la distinta: è lì che finiscono CSV, `raw/` e, dopo - l'esportazione con Creo, `step/`. +- Se non vuoi usare la cartella di installazione, scegli la **cartella di lavoro** + ("File → Scegli cartella di lavoro...") prima di importare la distinta: è lì che + finiscono CSV, `raw/` e, dopo l'esportazione con Creo, `step/`. - Se la cartella di lavoro è già stata usata per un'altra distinta, conviene **pulire `raw/` e `step/`** prima di ripartire ("File → Pulisci raw e step..."): evita di confondere i file CAD/STEP della copia precedente con quelli della nuova distinta (il @@ -47,8 +54,8 @@ database `cad_index.db` e le impostazioni non vengono cancellati, vedi sotto). ## 1. Database -Alla prima apertura, se un database (`cad_index.db`) è già stato creato in precedenza, -l'app lo ricarica da sola: si vede il pallino verde accanto a "Database", il percorso del +Se nella cartella di installazione c'è già un database (`cad_index.db`), l'app lo carica +da sola all'avvio: si vede il pallino verde accanto a "Database", il percorso del file e la data dell'ultimo aggiornamento. - **Se il pallino è rosso** (nessun database trovato): premi **Aggiorna indice** per @@ -59,10 +66,7 @@ file e la data dell'ultimo aggiornamento. selezionalo a mano. Vale solo finché non chiudi il programma: al prossimo avvio si riparte dal database nella cartella di installazione. Per usarlo sempre, copialo in `%LOCALAPPDATA%\Programs\PrepStep` come `cad_index.db`. -- La **cartella di lavoro** (dove l'app scrive il CSV della distinta e la cartella - `raw/`) è ricordata tra un avvio e l'altro; la prima volta è la cartella di installazione - (`%LOCALAPPDATA%\Programs\PrepStep`); per cambiarla usa - **File → Scegli cartella di lavoro...**. +- La **cartella di lavoro** non si imposta qui: vedi [Dove finiscono i file](#dove-finiscono-i-file). Premi **Avanti** quando il database è caricato. @@ -143,3 +147,6 @@ la cartella di lavoro (restano quelli già impostati in fase 1). Per ripulire le cartelle `raw/` e `step/` della cartella di lavoro prima di un nuovo giro (senza toccare l'indice), usa **File → Pulisci raw e step...**. + +Ogni distinta importata lascia un CSV nella cartella di lavoro: per eliminarli tutti usa +**File → Elimina CSV delle distinte...** (i file `.xls` del gestionale non vengono toccati).