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).