diff --git a/CLAUDE.md b/CLAUDE.md index 5d808f5..f718dcf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,10 +73,11 @@ che conta per capire il prodotto. designer visuale): 1. **Database** — carica/aggiorna `cad_index.db` (`Indexer.ScanAsync`, radice disco di - default `X:\` hardcoded in `RadiceDiscoDefault`); qui vive anche la **cartella di lavoro** + default `X:\` hardcoded in `RadiceDiscoDefault`); mostra anche la **cartella di lavoro** (destinazione di CSV/`raw/`/`step/`), proposta dall'ultima usata o dalla cartella del DB se - non c'è ancora nulla di salvato — vedi `docs/db-cad-index.md` per il dettaglio di schema e - risoluzione del percorso DB. + non c'è ancora nulla di salvato — cambiabile da "File → Scegli cartella di lavoro..." (non + più un bottone in fase 1: azione occasionale, non un passo del flusso) — vedi + `docs/db-cad-index.md` per il dettaglio di schema e risoluzione del percorso DB. 2. **Importa Distinta Base** — `DistintaBaseImporter.ConvertiInCsv` genera il CSV componente;descrizione nella cartella di lavoro; se il file segue la convenzione del gestionale (`DBP__`), aggiunge l'assieme generale come riga in più (da @@ -103,9 +104,12 @@ designer visuale): 5. **Verifica completezza** — mostra i `.asm` della distinta già in `raw/`, trascinabili su Creo per l'esportazione STEP (Distributed Batch, manuale, fuori dall'app). -Menu in cima alla finestra: "File → Nuova estrazione" (Ctrl+N) azzera lo stato delle fasi 2-5 -per ripartire con una nuova distinta, senza toccare DB/cartella di lavoro della fase 1; -"Aiuto → Guida" (F1) apre una sintesi interattiva delle 5 fasi (`GuidaForm.cs`). +Menu in cima alla finestra: "File → Nuovo" (Ctrl+N) azzera lo stato delle fasi 2-5 +per ripartire con una nuova distinta, senza toccare DB/cartella di lavoro della fase 1 (va +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`). ## Script standalone (`scripts/`) diff --git a/PrepStep/Form1.cs b/PrepStep/Form1.cs index 1e22d19..020057f 100644 --- a/PrepStep/Form1.cs +++ b/PrepStep/Form1.cs @@ -11,18 +11,18 @@ public partial class Form1 : Form private readonly Button _btnTrovaPrt = new(); private readonly Button _btnVerifica = new(); private readonly ListView _lstAnteprimaAsm = new(); - private readonly Button _btnPulisci = new(); private readonly Label _lblStatus = new(); private readonly Label _lblDb = new(); private readonly Label _lblUltimoAggiornamento = new(); private readonly Label _lblCartellaLavoro = new(); - private readonly Button _btnCambiaCartella = new(); private readonly DataGridView _gridImport = new(); private readonly DataGridView _gridRaw = new(); private readonly Label _lblImportStatus = new(); private readonly ToolTip _tipImportStatus = new(); private readonly MenuStrip _menu = new(); - private readonly ToolStripMenuItem _mnuNuovaEstrazione = new("Nuova estrazione"); + private readonly ToolStripMenuItem _mnuNuovaEstrazione = new("Nuovo"); + private readonly ToolStripMenuItem _mnuPulisci = new("Pulisci raw e step..."); + private readonly ToolStripMenuItem _mnuCambiaCartella = new("Scegli cartella di lavoro..."); // Wizard: una fase alla volta occupa tutta la finestra, si avanza solo quando quella // corrente è "pronta" (vedi AvantiConsentito). NomiFasi/_panelFasi sono paralleli per indice. @@ -152,6 +152,12 @@ public partial class Form1 : Form _mnuNuovaEstrazione.Click += (_, _) => NuovaEstrazione(); mnuFile.DropDownItems.Add(_mnuNuovaEstrazione); + _mnuCambiaCartella.Click += (_, _) => ScegliCartellaLavoro(); + mnuFile.DropDownItems.Add(_mnuCambiaCartella); + + _mnuPulisci.Click += (_, _) => PulisciRawEStep(); + mnuFile.DropDownItems.Add(_mnuPulisci); + var mnuAiuto = new ToolStripMenuItem("Aiuto"); var mnuGuida = new ToolStripMenuItem("Guida") { ShortcutKeys = Keys.F1 }; mnuGuida.Click += (_, _) => new GuidaForm().ShowDialog(this); @@ -259,7 +265,7 @@ public partial class Form1 : Form { if (_dbPath is null || _cartellaLavoro is null) { - MessageBox.Show(this, "Carica prima il database in fase 1.", "Nuova estrazione", + MessageBox.Show(this, "Carica prima il database in fase 1.", "Nuovo", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } @@ -337,7 +343,7 @@ public partial class Form1 : Form Text = "Cartella di lavoro: qui vengono scritti il CSV della distinta e la " + "cartella 'raw' (gli STEP esportati con Creo vanno invece in 'step', " + "dentro la stessa cartella). Proposta automaticamente (ricordata da un " - + "avvio all'altro), modificabile con 'Cambia cartella...'.", + + "avvio all'altro), modificabile da 'File → Scegli cartella di lavoro...'.", }; contenuto.Controls.Add(lblIstruzioniCartella); @@ -347,27 +353,6 @@ public partial class Form1 : Form _lblCartellaLavoro.Margin = new Padding(0, 0, 0, 4); contenuto.Controls.Add(_lblCartellaLavoro); - _btnCambiaCartella.Text = "Cambia cartella..."; - UiStile.Secondario(_btnCambiaCartella); - _btnCambiaCartella.Click += (_, _) => ScegliCartellaLavoro(); - contenuto.Controls.Add(_btnCambiaCartella); - - var lblManutenzione = new Label - { - Dock = DockStyle.Top, - AutoSize = true, - ForeColor = SystemColors.GrayText, - Margin = new Padding(0, 20, 0, 8), - Text = "Manutenzione: svuota le cartelle 'raw' e 'step' nella cartella di lavoro " - + "prima di un nuovo giro (non tocca l'indice, solo le copie locali).", - }; - contenuto.Controls.Add(lblManutenzione); - - _btnPulisci.Text = "Pulisci raw e step"; - UiStile.Secondario(_btnPulisci); - _btnPulisci.Click += (_, _) => PulisciRawEStep(); - contenuto.Controls.Add(_btnPulisci); - var panel = new Panel(); panel.Controls.Add(contenuto); return panel; @@ -707,7 +692,8 @@ public partial class Form1 : Form .ToList(); if (cartelle.Count == 0) { - ImpostaStatoImport($"Nessuna cartella 'raw' o 'step' trovata in {radice}.", Color.DarkRed); + MessageBox.Show(this, $"Nessuna cartella 'raw' o 'step' trovata in {radice}.", + "Pulisci raw e step", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } @@ -734,7 +720,8 @@ public partial class Form1 : Form } } - ImpostaStatoImport($"{eliminati} file eliminati da {string.Join(" e ", cartelle)}.", Color.DarkGreen); + MessageBox.Show(this, $"{eliminati} file eliminati da {string.Join(" e ", cartelle)}.", + "Pulisci raw e step", MessageBoxButtons.OK, MessageBoxIcon.Information); } /// Tutti i codici prt/asm noti all'indice, con i relativi percorsi (ultima @@ -1112,6 +1099,7 @@ public partial class Form1 : Form ? ultima : (_dbPath is not null ? Path.GetDirectoryName(_dbPath) : null) ?? AppContext.BaseDirectory; AggiornaLabelCartellaLavoro(); + AggiornaStatoAvanti(); } private void ScegliCartellaLavoro() diff --git a/PrepStep/GuidaForm.cs b/PrepStep/GuidaForm.cs index 7655f1d..65af454 100644 --- a/PrepStep/GuidaForm.cs +++ b/PrepStep/GuidaForm.cs @@ -12,13 +12,14 @@ public class GuidaForm : Form Distributed Batch per l'esportazione STEP: indicizza i file di una share di rete e guida attraverso 5 fasi, una alla volta, con "Avanti"/"Indietro". - "File ▸ Nuova estrazione" (Ctrl+N) azzera distinta/raw/verifica per + "File ▸ Nuovo" (Ctrl+N) azzera distinta/raw/verifica per ripartire con una nuova distinta base, senza dover ricaricare il database. """), ("1. Database", """ Carica o aggiorna l'indice "cad_index.db" a partire dalle cartelle di primo - livello del disco/share (radice di default X:\). Qui si sceglie anche la - cartella di lavoro, dove finiscono CSV, "raw" e "step". + livello del disco/share (radice di default X:\). Mostra anche la cartella di + lavoro corrente, dove finiscono CSV, "raw" e "step" (cambiabile da + "File ▸ Scegli cartella di lavoro..."). """), ("2. Importa Distinta Base", """ Converte il file della distinta (trascinabile nella finestra) in un CSV diff --git a/docs/architettura.md b/docs/architettura.md index 92dbd75..94e28e9 100644 --- a/docs/architettura.md +++ b/docs/architettura.md @@ -92,7 +92,7 @@ trascinano i `.asm` su Creo Distributed Batch, che scrive in `step/`. | # | Fase | Bottone → metodo | Cosa fa | |---|---|---|---| - | 1 | Database | "Aggiorna indice" → `Indexer.ScanAsync`; "Cambia cartella..." → `ScegliCartellaLavoro` | Crea/aggiorna `cad_index.db` scansionando la share; sceglie/mostra la cartella di lavoro | + | 1 | Database | "Aggiorna indice" → `Indexer.ScanAsync` | Crea/aggiorna `cad_index.db` scansionando la share; mostra anche la cartella di lavoro corrente (cambiabile da "File → Scegli cartella di lavoro...") | | 2 | Importa Distinta Base | selezione file → `ImportaDistinta` → `DistintaBaseImporter.ConvertiInCsv` | Xls/Xml gestionale → CSV componente;descrizione, scritto nella cartella di lavoro | | 3 | Crea cartella raw | "Crea cartella raw" → `CreaCartellaRaw` | `TrovaPercorsiCad` + `CopiaFileTrovati` (parallela) → `raw/` dentro la cartella di lavoro | | 4 | Trova componenti referenziati | "Trova componenti referenziati" → `TrovaPrtReferenziati` → `RisolviAlberoComponenti` | Legge i `.asm` in `raw/`, risolve ricorsivamente sotto-assiemi/parti nell'indice e li copia anch'essi in `raw/`, insieme ai componenti soppressi e ai modelli citati per riferimento esterno che servono a Creo per aprire l'assieme | @@ -102,10 +102,14 @@ trascinano i `.asm` su Creo Distributed Batch, che scrive in `step/`. `_percorsoInputCorrente`, `_righeCorrenti` (righe del CSV), `_ultimaVerifica` (cache percorsi CAD), `_ultimaCartellaRaw`. - Menu (`MenuStrip`, in cima alla finestra): "File → Nuova estrazione" (Ctrl+N) azzera lo - stato delle fasi 2-5 (`NuovaEstrazione`) per ripartire con una nuova distinta senza - ricaricare il database/la cartella di lavoro (fase 1, che resta invariata); "Aiuto → Guida" - (F1) apre `GuidaForm`, sintesi interattiva delle 5 fasi per chi non ha letto questi docs. + Menu (`MenuStrip`, in cima alla finestra): "File → Nuovo" (Ctrl+N) azzera lo + stato delle fasi 2-5 (`NuovaEstrazione`) e va direttamente alla fase 2, senza passare dalla + 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 → + Guida" (F1) apre `GuidaForm`, sintesi interattiva delle 5 fasi per chi non ha letto questi + docs. Altre responsabilità in Form1.cs: - `TrovaPercorsiCad` / `CaricaCodiciNoti` — query sul DB (`files_ultima_versione`), la @@ -189,8 +193,8 @@ completi". file) nelle sole colonne Componente/Descrizione, foglio `"Distinta Base"`. Se il nome del file segue la convenzione `DBP__`, aggiunge l'assieme generale come riga in più (il foglio elenca solo i componenti sotto l'assieme). Scrive il CSV nella cartella - passata da `Form1` (la cartella di lavoro scelta in fase 1), non necessariamente accanto al - file di input. + passata da `Form1` (la cartella di lavoro, impostabile da "File → Scegli cartella di lavoro..."), + non necessariamente accanto al file di input. ## Finestre di dialogo (modali, mostrate a fine step) @@ -225,15 +229,20 @@ completi". ## Persistenza - **DB** (`cad_index.db`, SQLite) — vedi tabella `files`/vista `files_ultima_versione` sopra. - Percorso: cercato accanto all'eseguibile o nella working directory all'avvio; altrimenti - selezionabile con "Apri DB...". Radice disco di scansione di default `X:\` - (`Form1.RadiceDiscoDefault`, hardcoded). -- **Cartella di lavoro** — salvata in `%AppData%/PrepStep/ultima_cartella_lavoro.txt` - (stesso meccanismo del DB sopra), proposta di default `AppContext.BaseDirectory` la prima - volta; selezionabile/cambiabile con "Cambia cartella..." in fase 1. Tutti i file generati a - valle ci finiscono dentro: il CSV della distinta, `raw/` (CAD dei componenti e - sotto-componenti); `step/` non è scritta dall'app ma è dove l'utente esporta gli STEP a - mano con Creo Distributed Batch, a partire dai file trascinati da `raw/` in fase 5. + Percorso ricordato tra un avvio e l'altro in `%AppData%/PrepStep/ultimo_db.txt` + (`SalvaUltimoDbUsato`/`LeggiUltimoDbUsato`), scritto ogni volta che si carica un DB + (all'avvio se già noto, oppure da "Apri DB..." o al termine di "Aggiorna indice"); se il + file non c'è o punta a un percorso cancellato, `InizializzaDatabase` ripiega su + `cad_index.db` accanto all'eseguibile o nella working directory. Radice disco di scansione + di default `X:\` (`Form1.RadiceDiscoDefault`, hardcoded). +- **Cartella di lavoro** — stesso meccanismo del DB sopra, salvata in + `%AppData%/PrepStep/ultima_cartella_lavoro.txt`; se non c'è una preferenza salvata (o punta + a una cartella cancellata) si propone la cartella del DB caricato, o in ultima istanza + `AppContext.BaseDirectory`; cambiabile in qualunque momento da "File → Scegli cartella di + lavoro...". Tutti i file generati a valle ci finiscono dentro: il CSV della distinta, `raw/` + (CAD dei componenti e sotto-componenti); `step/` non è scritta dall'app ma è dove l'utente + esporta gli STEP a mano con Creo Distributed Batch, a partire dai file trascinati da `raw/` + in fase 5. ## Script standalone (`scripts/`)