Aggiungi la lista personalizzata di codici nella fase 2
In alternativa al file del gestionale si possono digitare i codici uno alla volta (Invio/Aggiungi, Canc per togliere). Tutto a valle legge solo _righeCorrenti, quindi basta una nuova sorgente; la selezione della griglia mantiene il colore verde/rosso della verifica. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ccfa00ff52
commit
6d1e36a2ae
5 files changed
+138
-11
No files matched your search
@@ -9,6 +9,7 @@ aderisce a [Semantic Versioning](https://semver.org/lang/it/).
|
|||||||
|
|
||||||
### Aggiunto
|
### Aggiunto
|
||||||
|
|
||||||
|
- Fase 2: modalità "Lista personalizzata" per inserire i codici a mano, uno alla volta, in alternativa al file del gestionale.
|
||||||
- Docs-as-code: `scripts/CheckDocs.cs`, markdownlint, `docs/README.md` (indice Diátaxis e fonte unica).
|
- Docs-as-code: `scripts/CheckDocs.cs`, markdownlint, `docs/README.md` (indice Diátaxis e fonte unica).
|
||||||
- Nuovi doc: `tutorial-primo-giro`, `risoluzione-problemi`, `sviluppo`, `rilascio`, `glossario` e registro delle decisioni `docs/decisioni/` (6 ADR).
|
- Nuovi doc: `tutorial-primo-giro`, `risoluzione-problemi`, `sviluppo`, `rilascio`, `glossario` e registro delle decisioni `docs/decisioni/` (6 ADR).
|
||||||
|
|
||||||
|
|||||||
+125
-8
@@ -12,6 +12,11 @@ public partial class Form1 : Form
|
|||||||
private readonly Button _btnTrovaPrt = new();
|
private readonly Button _btnTrovaPrt = new();
|
||||||
private readonly Button _btnVerifica = new();
|
private readonly Button _btnVerifica = new();
|
||||||
private readonly FlowLayoutPanel _rigaVerifica = new();
|
private readonly FlowLayoutPanel _rigaVerifica = new();
|
||||||
|
private readonly FlowLayoutPanel _rigaFile = new();
|
||||||
|
private readonly FlowLayoutPanel _rigaCustom = new();
|
||||||
|
private readonly RadioButton _rbFile = new() { Text = "Da file del gestionale", Checked = true, AutoSize = true };
|
||||||
|
private readonly RadioButton _rbCustom = new() { Text = "Lista personalizzata", AutoSize = true };
|
||||||
|
private readonly TextBox _txtCodice = new() { Width = 220, Margin = new Padding(0, 3, 8, 0) };
|
||||||
private readonly ListView _lstAnteprimaAsm = new();
|
private readonly ListView _lstAnteprimaAsm = new();
|
||||||
private readonly Label _lblStatus = new();
|
private readonly Label _lblStatus = new();
|
||||||
private readonly Label _lblDb = new();
|
private readonly Label _lblDb = new();
|
||||||
@@ -50,7 +55,7 @@ public partial class Form1 : Form
|
|||||||
|
|
||||||
private string? _dbPath;
|
private string? _dbPath;
|
||||||
private string? _cartellaLavoro;
|
private string? _cartellaLavoro;
|
||||||
private string? _percorsoInputCorrente;
|
private bool _ripristinoModalita;
|
||||||
private List<(string Componente, string Descrizione)>? _righeCorrenti;
|
private List<(string Componente, string Descrizione)>? _righeCorrenti;
|
||||||
private Dictionary<string, List<string>>? _ultimaVerifica;
|
private Dictionary<string, List<string>>? _ultimaVerifica;
|
||||||
private string? _ultimaCartellaRaw;
|
private string? _ultimaCartellaRaw;
|
||||||
@@ -266,7 +271,12 @@ public partial class Form1 : Form
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_percorsoInputCorrente = null;
|
AzzeraDistinta();
|
||||||
|
VaiAllaFase(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AzzeraDistinta()
|
||||||
|
{
|
||||||
_righeCorrenti = null;
|
_righeCorrenti = null;
|
||||||
_ultimaCartellaRaw = null;
|
_ultimaCartellaRaw = null;
|
||||||
_ultimaVerifica = null;
|
_ultimaVerifica = null;
|
||||||
@@ -275,8 +285,68 @@ public partial class Form1 : Form
|
|||||||
_lstAnteprimaAsm.Items.Clear();
|
_lstAnteprimaAsm.Items.Clear();
|
||||||
ImpostaStatoImport("", Color.Black);
|
ImpostaStatoImport("", Color.Black);
|
||||||
_rigaVerifica.Visible = false;
|
_rigaVerifica.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
VaiAllaFase(1);
|
private void CambiaModalitaDistinta()
|
||||||
|
{
|
||||||
|
if (_ripristinoModalita)
|
||||||
|
return;
|
||||||
|
if (_gridImport.Rows.Count > 0 && MessageBox.Show(this,
|
||||||
|
"Cambiando modalità la distinta corrente viene azzerata. Continuare?", "Distinta",
|
||||||
|
MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
|
||||||
|
{
|
||||||
|
_ripristinoModalita = true;
|
||||||
|
(_rbCustom.Checked ? _rbFile : _rbCustom).Checked = true;
|
||||||
|
_ripristinoModalita = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AzzeraDistinta();
|
||||||
|
_rigaFile.Visible = _rbFile.Checked;
|
||||||
|
_rigaCustom.Visible = _rbCustom.Checked;
|
||||||
|
AggiornaStatoAvanti();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AggiungiCodice()
|
||||||
|
{
|
||||||
|
string codice = _txtCodice.Text.Trim();
|
||||||
|
if (codice.Length == 0)
|
||||||
|
return;
|
||||||
|
_righeCorrenti ??= new();
|
||||||
|
if (_righeCorrenti.Any(r => string.Equals(r.Componente, codice, StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
_txtCodice.SelectAll();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_righeCorrenti.Add((codice, ""));
|
||||||
|
_gridImport.Rows.Add(codice, "");
|
||||||
|
InvalidaVerifica();
|
||||||
|
_txtCodice.Clear();
|
||||||
|
_txtCodice.Focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RimuoviCodiceSelezionato()
|
||||||
|
{
|
||||||
|
if (_gridImport.CurrentRow is not { } riga || _righeCorrenti is null)
|
||||||
|
return;
|
||||||
|
_righeCorrenti.RemoveAt(riga.Index); // griglia e lista hanno lo stesso ordine
|
||||||
|
_gridImport.Rows.Remove(riga);
|
||||||
|
InvalidaVerifica();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>La lista è cambiata: la verifica presenza e il raw già creato non valgono più.</summary>
|
||||||
|
private void InvalidaVerifica()
|
||||||
|
{
|
||||||
|
_ultimaVerifica = null;
|
||||||
|
_ultimaCartellaRaw = null;
|
||||||
|
_gridRaw.Rows.Clear();
|
||||||
|
foreach (DataGridViewRow r in _gridImport.Rows)
|
||||||
|
{
|
||||||
|
r.DefaultCellStyle.BackColor = Color.Empty;
|
||||||
|
r.DefaultCellStyle.SelectionBackColor = Color.Empty;
|
||||||
|
r.DefaultCellStyle.SelectionForeColor = Color.Empty;
|
||||||
|
}
|
||||||
|
_rigaVerifica.Visible = _righeCorrenti is { Count: > 0 };
|
||||||
|
AggiornaStatoAvanti();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Panel BuildFaseDatabase()
|
private Panel BuildFaseDatabase()
|
||||||
@@ -400,12 +470,51 @@ public partial class Form1 : Form
|
|||||||
};
|
};
|
||||||
contenuto.Controls.Add(lblIstruzioni);
|
contenuto.Controls.Add(lblIstruzioni);
|
||||||
|
|
||||||
var rigaImporta = new FlowLayoutPanel
|
var rigaModalita = new FlowLayoutPanel
|
||||||
{
|
{
|
||||||
AutoSize = true,
|
AutoSize = true,
|
||||||
FlowDirection = FlowDirection.LeftToRight,
|
FlowDirection = FlowDirection.LeftToRight,
|
||||||
Margin = new Padding(0, 0, 0, 8),
|
Margin = new Padding(0, 0, 0, 8),
|
||||||
};
|
};
|
||||||
|
rigaModalita.Controls.Add(_rbFile);
|
||||||
|
rigaModalita.Controls.Add(_rbCustom);
|
||||||
|
_rbCustom.CheckedChanged += (_, _) => CambiaModalitaDistinta();
|
||||||
|
contenuto.Controls.Add(rigaModalita);
|
||||||
|
|
||||||
|
_rigaCustom.AutoSize = true;
|
||||||
|
_rigaCustom.FlowDirection = FlowDirection.LeftToRight;
|
||||||
|
_rigaCustom.Margin = new Padding(0, 0, 0, 8);
|
||||||
|
_rigaCustom.Visible = false;
|
||||||
|
var btnAggiungi = new Button { Text = "Aggiungi", Margin = new Padding(0, 0, 8, 0) };
|
||||||
|
UiStile.Secondario(btnAggiungi);
|
||||||
|
btnAggiungi.Click += (_, _) => AggiungiCodice();
|
||||||
|
_txtCodice.KeyDown += (_, e) =>
|
||||||
|
{
|
||||||
|
if (e.KeyCode != Keys.Enter)
|
||||||
|
return;
|
||||||
|
e.SuppressKeyPress = true;
|
||||||
|
AggiungiCodice();
|
||||||
|
};
|
||||||
|
_rigaCustom.Controls.Add(_txtCodice);
|
||||||
|
_rigaCustom.Controls.Add(btnAggiungi);
|
||||||
|
_rigaCustom.Controls.Add(new Label
|
||||||
|
{
|
||||||
|
AutoSize = true,
|
||||||
|
ForeColor = SystemColors.GrayText,
|
||||||
|
Margin = new Padding(0, 9, 0, 0),
|
||||||
|
Text = "Digita un codice e premi Invio (Canc sulla riga per toglierlo)",
|
||||||
|
});
|
||||||
|
contenuto.Controls.Add(_rigaCustom);
|
||||||
|
_gridImport.KeyDown += (_, e) =>
|
||||||
|
{
|
||||||
|
if (e.KeyCode == Keys.Delete && _rbCustom.Checked)
|
||||||
|
RimuoviCodiceSelezionato();
|
||||||
|
};
|
||||||
|
|
||||||
|
var rigaImporta = _rigaFile;
|
||||||
|
rigaImporta.AutoSize = true;
|
||||||
|
rigaImporta.FlowDirection = FlowDirection.LeftToRight;
|
||||||
|
rigaImporta.Margin = new Padding(0, 0, 0, 8);
|
||||||
var btnSfoglia = new Button
|
var btnSfoglia = new Button
|
||||||
{
|
{
|
||||||
Text = "Scegli file distinta...",
|
Text = "Scegli file distinta...",
|
||||||
@@ -646,10 +755,15 @@ public partial class Form1 : Form
|
|||||||
|
|
||||||
private void ImportaDistinta(string percorso)
|
private void ImportaDistinta(string percorso)
|
||||||
{
|
{
|
||||||
|
if (_rbCustom.Checked)
|
||||||
|
{
|
||||||
|
_rbFile.Checked = true; // chiede conferma se c'è una lista; se rifiuta resta in custom
|
||||||
|
if (_rbCustom.Checked)
|
||||||
|
return;
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var (_, righe) = DistintaBaseImporter.ConvertiInCsv(percorso, _cartellaLavoro!);
|
var (_, righe) = DistintaBaseImporter.ConvertiInCsv(percorso, _cartellaLavoro!);
|
||||||
_percorsoInputCorrente = percorso;
|
|
||||||
_righeCorrenti = righe;
|
_righeCorrenti = righe;
|
||||||
|
|
||||||
_gridImport.Rows.Clear();
|
_gridImport.Rows.Clear();
|
||||||
@@ -666,7 +780,6 @@ public partial class Form1 : Form
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_percorsoInputCorrente = null;
|
|
||||||
_righeCorrenti = null;
|
_righeCorrenti = null;
|
||||||
_gridImport.Rows.Clear();
|
_gridImport.Rows.Clear();
|
||||||
ImpostaStatoImport($"Errore durante la conversione: {ex.Message}", Color.DarkRed);
|
ImpostaStatoImport($"Errore durante la conversione: {ex.Message}", Color.DarkRed);
|
||||||
@@ -694,16 +807,20 @@ public partial class Form1 : Form
|
|||||||
foreach (DataGridViewRow riga in _gridImport.Rows)
|
foreach (DataGridViewRow riga in _gridImport.Rows)
|
||||||
{
|
{
|
||||||
string componente = (string)riga.Cells["componente"].Value!;
|
string componente = (string)riga.Cells["componente"].Value!;
|
||||||
riga.DefaultCellStyle.BackColor = trovati.ContainsKey(componente)
|
var colore = trovati.ContainsKey(componente)
|
||||||
? Color.FromArgb(198, 239, 206)
|
? Color.FromArgb(198, 239, 206)
|
||||||
: Color.FromArgb(255, 199, 206);
|
: Color.FromArgb(255, 199, 206);
|
||||||
|
// la selezione mantiene il colore verde/rosso, altrimenti il blu nasconde l'esito
|
||||||
|
riga.DefaultCellStyle.BackColor = colore;
|
||||||
|
riga.DefaultCellStyle.SelectionBackColor = colore;
|
||||||
|
riga.DefaultCellStyle.SelectionForeColor = Color.Black;
|
||||||
}
|
}
|
||||||
AggiornaStatoAvanti();
|
AggiornaStatoAvanti();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreaCartellaRaw()
|
private void CreaCartellaRaw()
|
||||||
{
|
{
|
||||||
if (_percorsoInputCorrente is null || _righeCorrenti is null)
|
if (_righeCorrenti is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// L'assieme generale è già una riga di _righeCorrenti (aggiunta da
|
// L'assieme generale è già una riga di _righeCorrenti (aggiunta da
|
||||||
|
|||||||
@@ -104,7 +104,10 @@ public class GuidaForm : Form
|
|||||||
[
|
[
|
||||||
"Carica la distinta: trascina il file .xls nella finestra, oppure premi " +
|
"Carica la distinta: trascina il file .xls nella finestra, oppure premi " +
|
||||||
"\"Scegli file distinta...\". Le righe importate compaiono nella griglia " +
|
"\"Scegli file distinta...\". Le righe importate compaiono nella griglia " +
|
||||||
"(Componente/Descrizione) e viene scritto un CSV nella cartella di lavoro.",
|
"(Componente/Descrizione) e viene scritto un CSV nella cartella di lavoro. " +
|
||||||
|
"In alternativa scegli \"Lista personalizzata\" e digita i codici uno alla " +
|
||||||
|
"volta (Invio per aggiungere, Canc per togliere): nessun CSV, l'assieme " +
|
||||||
|
"generale va inserito a mano.",
|
||||||
"Verifica la presenza dei file sul server: compare solo dopo un import " +
|
"Verifica la presenza dei file sul server: compare solo dopo un import " +
|
||||||
"riuscito. Cerca ogni componente nel database — le righe della griglia si " +
|
"riuscito. Cerca ogni componente nel database — le righe della griglia si " +
|
||||||
"colorano di verde (trovato) o rosso (non trovato nell'indice).",
|
"colorano di verde (trovato) o rosso (non trovato nell'indice).",
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ trascinano i `.asm` su Creo Distributed Batch, che scrive in `step/`.
|
|||||||
| # | Fase | Bottone → metodo | Cosa fa |
|
| # | Fase | Bottone → metodo | Cosa fa |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 1 | Database | "Aggiorna indice" → `Indexer.ScanAsync` | Crea/aggiorna `cad_index.db` scansionando la share; un pallino verde/rosso accanto al titolo indica se un DB è caricato. La cartella di lavoro non è mostrata qui (cambiabile in qualunque momento da "File → Scegli cartella di lavoro...") |
|
| 1 | Database | "Aggiorna indice" → `Indexer.ScanAsync` | Crea/aggiorna `cad_index.db` scansionando la share; un pallino verde/rosso accanto al titolo indica se un DB è caricato. La cartella di lavoro non è mostrata qui (cambiabile in qualunque momento da "File → Scegli cartella di lavoro...") |
|
||||||
| 2 | Importa Distinta Base | selezione file/drag&drop → `ImportaDistinta` → `DistintaBaseImporter.ConvertiInCsv`, poi "Verifica presenza" → `VerificaCodiciNelDb` | Xls/Xml gestionale → CSV componente;descrizione, scritto nella cartella di lavoro; "Verifica presenza" (visibile solo dopo un import riuscito) cerca i componenti nell'indice e colora le righe della griglia — è quella che sblocca "Avanti", non il solo import |
|
| 2 | Importa Distinta Base | selezione file/drag&drop → `ImportaDistinta` → `DistintaBaseImporter.ConvertiInCsv`, poi "Verifica presenza" → `VerificaCodiciNelDb` | Xls/Xml gestionale → CSV componente;descrizione, scritto nella cartella di lavoro (oppure "Lista personalizzata": codici digitati uno alla volta con `AggiungiCodice`, solo in memoria, senza CSV; tutto a valle legge solo `_righeCorrenti`); "Verifica presenza" (visibile solo dopo un import riuscito) cerca i componenti nell'indice e colora le righe della griglia — è quella che sblocca "Avanti", non il solo import |
|
||||||
| 3 | Crea cartella raw | "Crea cartella raw" → `CreaCartellaRaw` | `TrovaPercorsiCad` + `CopiaFileTrovati` (parallela) → `raw/` dentro la 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 |
|
| 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 |
|
||||||
| 5 | Verifica completezza | (ingresso in fase) → `AggiornaAnteprimaAsm` | Mostra le icone trascinabili dei `.asm` della distinta già in `raw/`, da trascinare su Creo per l'esportazione STEP (Distributed Batch) |
|
| 5 | Verifica completezza | (ingresso in fase) → `AggiornaAnteprimaAsm` | Mostra le icone trascinabili dei `.asm` della distinta già in `raw/`, da trascinare su Creo per l'esportazione STEP (Distributed Batch) |
|
||||||
|
|||||||
@@ -76,7 +76,13 @@ Premi **Avanti** quando il database è caricato.
|
|||||||
oppure premi **Scegli file distinta...** e selezionalo da Esplora risorse. Le righe importate
|
oppure premi **Scegli file distinta...** e selezionalo da Esplora risorse. Le righe importate
|
||||||
compaiono nella griglia (Componente/Descrizione) e viene scritto un CSV nella cartella
|
compaiono nella griglia (Componente/Descrizione) e viene scritto un CSV nella cartella
|
||||||
di lavoro.
|
di lavoro.
|
||||||
- **2. Verifica la presenza dei file sul server**: compare solo dopo un import riuscito.
|
In alternativa scegli **Lista personalizzata**: digita un codice e premi **Invio** (o
|
||||||
|
**Aggiungi**) per inserirlo, ripeti per ogni codice; **Canc** sulla riga selezionata lo
|
||||||
|
toglie. La lista non scrive nessun CSV e, passando da una modalità all'altra, viene azzerata
|
||||||
|
(con conferma). Inserisci anche l'assieme generale, se serve: qui non viene aggiunto da solo.
|
||||||
|
- **2. Verifica la presenza dei file sul server**: compare solo dopo un import riuscito
|
||||||
|
(o dopo il primo codice aggiunto alla lista personalizzata; ogni modifica della lista
|
||||||
|
richiede di rifare la verifica).
|
||||||
Premila per cercare ogni componente nel database — le righe della griglia si colorano
|
Premila per cercare ogni componente nel database — le righe della griglia si colorano
|
||||||
di verde (trovato) o rosso (non trovato nell'indice).
|
di verde (trovato) o rosso (non trovato nell'indice).
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user