Distinguish missing STEP from missing CAD source in the final report
A component with no .stp could mean two different things: the CAD source was never found in the index at all, or it's indexed but nobody exported the STEP yet. Cross-references the missing codes against cad_index.db (reusing the phase-2 verification cache when available) and reports each as EsitoStep.StepMancante vs ComponenteNonTrovato, colored differently. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1f6cb2da00
commit
e6de563f60
3 files changed
+54
-18
No files matched your search
@@ -61,8 +61,10 @@ entrambi rimossi: ora l'unico programma è questo, con GUI e indicizzazione inte
|
|||||||
5. **Verifica completezza e STEP** — "Verifica completezza assiemi" (ricorsivo sui
|
5. **Verifica completezza e STEP** — "Verifica completezza assiemi" (ricorsivo sui
|
||||||
percorsi originali in indice, non su `raw/`) e "Crea cartella step_finali": solo per i
|
percorsi originali in indice, non su `raw/`) e "Crea cartella step_finali": solo per i
|
||||||
codici della distinta importata dal CSV (non i sotto-componenti di fase 4, che servono
|
codici della distinta importata dal CSV (non i sotto-componenti di fase 4, che servono
|
||||||
solo a completare `raw/`) cerca in `step/` il file `<codice>.stp`, lo copia in
|
solo a completare `raw/`) cerca in `step/` il file `<codice>.stp` e lo copia in
|
||||||
`step_finali/` se lo trova e mostra l'esito (creato/mancante) in `ReportStepForm`.
|
`step_finali/` se lo trova. Per i mancanti distingue, incrociando l'indice CAD,
|
||||||
|
`EsitoStep.StepMancante` (il CAD c'è, manca solo l'esportazione STEP) da
|
||||||
|
`ComponenteNonTrovato` (il componente non è nemmeno nell'indice) — vedi `ReportStepForm`.
|
||||||
- **Indexer.cs** — logica di scansione del disco e scrittura/aggiornamento del DB
|
- **Indexer.cs** — logica di scansione del disco e scrittura/aggiornamento del DB
|
||||||
SQLite (`Indexer.ScanAsync`). Cammina tutte le cartelle di primo livello trovate sotto
|
SQLite (`Indexer.ScanAsync`). Cammina tutte le cartelle di primo livello trovate sotto
|
||||||
la radice (scoperte dinamicamente con `Directory.GetDirectories`, non un elenco fisso)
|
la radice (scoperte dinamicamente con `Directory.GetDirectories`, non un elenco fisso)
|
||||||
|
|||||||
+22
-7
@@ -569,23 +569,38 @@ public partial class Form1 : Form
|
|||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
// Per i codici senza STEP, distingue "il CAD c'è ma lo STEP non è stato esportato" da
|
||||||
|
// "il componente non è nemmeno nell'indice CAD" (riusa la verifica già fatta in fase 2/3
|
||||||
|
// se disponibile, altrimenti la rifà).
|
||||||
|
var cadTrovati = _ultimaVerifica ?? TrovaPercorsiCad(tuttiICodici);
|
||||||
|
|
||||||
var cartellaStepFinali = Path.Combine(radice, "step_finali");
|
var cartellaStepFinali = Path.Combine(radice, "step_finali");
|
||||||
Directory.CreateDirectory(cartellaStepFinali);
|
Directory.CreateDirectory(cartellaStepFinali);
|
||||||
|
|
||||||
var righeReport = new List<(string Componente, string Descrizione, bool Creato)>();
|
var righeReport = new List<(string Componente, string Descrizione, EsitoStep Esito)>();
|
||||||
foreach (var codice in tuttiICodici)
|
foreach (var codice in tuttiICodici)
|
||||||
{
|
{
|
||||||
var percorsoStp = Path.Combine(cartellaStep, codice + ".stp");
|
var percorsoStp = Path.Combine(cartellaStep, codice + ".stp");
|
||||||
bool trovato = File.Exists(percorsoStp);
|
EsitoStep esito;
|
||||||
if (trovato)
|
if (File.Exists(percorsoStp))
|
||||||
|
{
|
||||||
File.Copy(percorsoStp, Path.Combine(cartellaStepFinali, codice + ".stp"), overwrite: true);
|
File.Copy(percorsoStp, Path.Combine(cartellaStepFinali, codice + ".stp"), overwrite: true);
|
||||||
righeReport.Add((codice, descrizioni.GetValueOrDefault(codice, ""), trovato));
|
esito = EsitoStep.Creato;
|
||||||
}
|
}
|
||||||
int creati = righeReport.Count(r => r.Creato);
|
else
|
||||||
|
{
|
||||||
|
esito = cadTrovati.ContainsKey(codice) ? EsitoStep.StepMancante : EsitoStep.ComponenteNonTrovato;
|
||||||
|
}
|
||||||
|
righeReport.Add((codice, descrizioni.GetValueOrDefault(codice, ""), esito));
|
||||||
|
}
|
||||||
|
int creati = righeReport.Count(r => r.Esito == EsitoStep.Creato);
|
||||||
|
int stepMancanti = righeReport.Count(r => r.Esito == EsitoStep.StepMancante);
|
||||||
|
int nonTrovati = righeReport.Count(r => r.Esito == EsitoStep.ComponenteNonTrovato);
|
||||||
|
|
||||||
ImpostaStatoImport(
|
ImpostaStatoImport(
|
||||||
$"STEP finali: {creati} componenti copiati su {righeReport.Count} "
|
$"STEP finali: {creati} copiati, {stepMancanti} da esportare (CAD presente), "
|
||||||
+ $"({righeReport.Count - creati} mancanti) in {cartellaStepFinali}.",
|
+ $"{nonTrovati} componenti non nell'indice, su {righeReport.Count} totali. "
|
||||||
|
+ $"Cartella: {cartellaStepFinali}.",
|
||||||
Color.DarkGreen);
|
Color.DarkGreen);
|
||||||
|
|
||||||
using var dialog = new ReportStepForm(righeReport, cartellaStepFinali);
|
using var dialog = new ReportStepForm(righeReport, cartellaStepFinali);
|
||||||
|
|||||||
@@ -2,13 +2,26 @@ using System.Diagnostics;
|
|||||||
|
|
||||||
namespace CadSearchGui;
|
namespace CadSearchGui;
|
||||||
|
|
||||||
/// <summary>Mostra, per ogni componente (distinta base + sotto-componenti risolti in fase 4),
|
public enum EsitoStep
|
||||||
/// se lo STEP corrispondente è stato trovato in "step" e copiato in "step_finali", o se manca.</summary>
|
{
|
||||||
|
/// <summary>File .stp trovato in "step" e copiato in "step_finali".</summary>
|
||||||
|
Creato,
|
||||||
|
/// <summary>Il componente è nell'indice CAD (asm/prt trovato), ma nessuno STEP esportato.</summary>
|
||||||
|
StepMancante,
|
||||||
|
/// <summary>Il componente non è nemmeno nell'indice CAD.</summary>
|
||||||
|
ComponenteNonTrovato,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Mostra, per ogni componente della distinta base, se lo STEP corrispondente è stato
|
||||||
|
/// trovato in "step" e copiato in "step_finali", se manca solo lo STEP (il CAD sorgente c'è,
|
||||||
|
/// ma non è ancora stato esportato) o se manca anche il CAD sorgente nell'indice.</summary>
|
||||||
public class ReportStepForm : Form
|
public class ReportStepForm : Form
|
||||||
{
|
{
|
||||||
public ReportStepForm(List<(string Componente, string Descrizione, bool Creato)> righe, string cartellaStepFinali)
|
public ReportStepForm(List<(string Componente, string Descrizione, EsitoStep Esito)> righe, string cartellaStepFinali)
|
||||||
{
|
{
|
||||||
int creati = righe.Count(r => r.Creato);
|
int creati = righe.Count(r => r.Esito == EsitoStep.Creato);
|
||||||
|
int stepMancanti = righe.Count(r => r.Esito == EsitoStep.StepMancante);
|
||||||
|
int nonTrovati = righe.Count(r => r.Esito == EsitoStep.ComponenteNonTrovato);
|
||||||
|
|
||||||
Text = "Report STEP finali";
|
Text = "Report STEP finali";
|
||||||
ClientSize = new Size(720, 440);
|
ClientSize = new Size(720, 440);
|
||||||
@@ -21,8 +34,8 @@ public class ReportStepForm : Form
|
|||||||
AutoSize = false,
|
AutoSize = false,
|
||||||
Height = 32,
|
Height = 32,
|
||||||
Padding = new Padding(12, 8, 12, 8),
|
Padding = new Padding(12, 8, 12, 8),
|
||||||
Text = $"{creati} componenti copiati su {righe.Count} ({righe.Count - creati} mancanti) "
|
Text = $"{creati} copiati, {stepMancanti} da esportare (CAD presente), "
|
||||||
+ $"in \"{cartellaStepFinali}\".",
|
+ $"{nonTrovati} non nell'indice, su {righe.Count} totali. In \"{cartellaStepFinali}\".",
|
||||||
};
|
};
|
||||||
|
|
||||||
var grid = new DataGridView
|
var grid = new DataGridView
|
||||||
@@ -42,10 +55,16 @@ public class ReportStepForm : Form
|
|||||||
grid.Columns["descrizione"]!.FillWeight = 55;
|
grid.Columns["descrizione"]!.FillWeight = 55;
|
||||||
grid.Columns["step"]!.FillWeight = 25;
|
grid.Columns["step"]!.FillWeight = 25;
|
||||||
|
|
||||||
foreach (var (componente, descrizione, creato) in righe.OrderBy(r => r.Creato).ThenBy(r => r.Componente))
|
foreach (var (componente, descrizione, esito) in righe.OrderBy(r => r.Esito).ThenBy(r => r.Componente))
|
||||||
{
|
{
|
||||||
int i = grid.Rows.Add(componente, descrizione, creato ? "Creato" : "Mancante");
|
var (testo, colore) = esito switch
|
||||||
grid.Rows[i].DefaultCellStyle.ForeColor = creato ? Color.DarkGreen : Color.DarkRed;
|
{
|
||||||
|
EsitoStep.Creato => ("Creato", Color.DarkGreen),
|
||||||
|
EsitoStep.StepMancante => ("Da esportare (CAD presente)", Color.DarkOrange),
|
||||||
|
_ => ("Componente non trovato nel server", Color.DarkRed),
|
||||||
|
};
|
||||||
|
int i = grid.Rows.Add(componente, descrizione, testo);
|
||||||
|
grid.Rows[i].DefaultCellStyle.ForeColor = colore;
|
||||||
}
|
}
|
||||||
|
|
||||||
var btnApriCartella = new Button { Text = "Apri cartella step_finali", Dock = DockStyle.Bottom, Height = 34 };
|
var btnApriCartella = new Button { Text = "Apri cartella step_finali", Dock = DockStyle.Bottom, Height = 34 };
|
||||||
|
|||||||
Reference in new issue
Block a user