Aggiungi "Elimina CSV delle distinte" e allinea le guide alla cartella di installazione
Nuova voce "File → Elimina CSV delle distinte..." (EliminaCsv): elimina i *.csv al primo livello della cartella di lavoro, che altrimenti si accumulano uno per distinta importata. Chiede conferma mostrando l'elenco dei file; gli .xls del gestionale e raw/step non sono toccati. Guida utente e guida in-app: nuova sezione "Dove finiscono i file" (DB sempre nella cartella di installazione, CSV/raw/step nella cartella di lavoro, comandi di pulizia, come aprire la cartella nascosta in AppData), fase 1 allineata al DB fisso e ad "Apri DB..." solo per la sessione. Tolta dalla guida utente la sezione di installazione: chi la legge ha già il programma installato (resta nel README). Doc aggiornati nello stesso commit: CLAUDE.md, docs/architettura.md, docs/guida-utente.md, CHANGELOG.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
64ff1d8770
commit
4ae3d0e087
6 files changed
+126
-31
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
/// <summary>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.</summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>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
|
||||
|
||||
Reference in new issue
Block a user