Remove the step_finali copy/report feature

Not needed anymore: the app no longer copies matched .stp files from
step/ into a separate step_finali/ folder, or reports which distinta
codes are still missing a STEP. Removed the "Crea cartella step_finali"
button, GeneraReportStep, and ReportStepForm/EsitoStep. Phase 5 keeps
"Verifica completezza assiemi" and the drag&drop .asm list (still how
files get sent to Creo Distributed Batch); renamed from "Verifica
completezza e STEP" to "Verifica completezza" since it's no longer about
STEP output. PulisciRawEStep now only clears raw/ and step/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-21 11:23:46 +02:00
1 parent 13798ad47c
commit 379deec986
5 files changed
+37 -217

No files matched your search

+13 -104
View File
@@ -9,7 +9,6 @@ public partial class Form1 : Form
private readonly Button _btnAggiorna = new();
private readonly Button _btnCreaRaw = new();
private readonly Button _btnTrovaPrt = new();
private readonly Button _btnReport = new();
private readonly Button _btnVerifica = new();
private readonly Button _btnCompletezza = new();
private readonly ListView _lstAnteprimaAsm = new();
@@ -32,7 +31,7 @@ public partial class Form1 : Form
"2. Importa Distinta Base",
"3. Crea cartella raw",
"4. Trova componenti referenziati",
"5. Verifica completezza e STEP",
"5. Verifica completezza",
};
private readonly Panel[] _panelFasi = new Panel[NomiFasi.Length];
private readonly Panel _faseContainer = new() { Dock = DockStyle.Fill };
@@ -282,9 +281,10 @@ public partial class Form1 : Form
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(0, 20, 0, 4),
Text = "Cartella di lavoro: qui vengono scritti il CSV della distinta e le "
+ "cartelle 'raw', 'step' e 'step_finali'. Proposta automaticamente "
+ "(ricordata da un avvio all'altro), modificabile con 'Cambia cartella...'.",
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...'.",
};
contenuto.Controls.Add(lblIstruzioniCartella);
@@ -530,35 +530,9 @@ public partial class Form1 : Form
};
top.Controls.Add(lblAnteprimaAsm);
var bottom = new TableLayoutPanel
{
Dock = DockStyle.Bottom,
AutoSize = true,
AutoSizeMode = AutoSizeMode.GrowAndShrink,
ColumnCount = 1,
};
bottom.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
var lblIstruzioniStep = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
ForeColor = SystemColors.GrayText,
Margin = new Padding(12, 0, 0, 8),
Text = "Dopo aver esportato gli STEP con Creo, premi qui per confrontare i componenti "
+ "della distinta (e i sotto-componenti trovati in fase 4) con i file .stp presenti "
+ "in 'step', copiare quelli trovati in 'step_finali' e vedere quali mancano ancora.",
};
bottom.Controls.Add(lblIstruzioniStep);
_btnReport.Text = "Crea cartella step_finali";
UiStile.Secondario(_btnReport);
_btnReport.Click += (_, _) => GeneraReportStep();
bottom.Controls.Add(_btnReport);
// Dock=Fill invece di una Size fissa: la lista occupa tutto lo spazio verticale
// rimasto tra le istruzioni sopra e sotto, così si vedono più file .asm senza scroll
// anche a finestra ingrandita, invece dei ~160px fissi di prima.
// rimasto sotto le istruzioni, così si vedono più file .asm senza scroll anche a
// finestra ingrandita, invece dei ~160px fissi di prima.
_lstAnteprimaAsm.View = View.LargeIcon;
_lstAnteprimaAsm.MultiSelect = true;
_lstAnteprimaAsm.LargeImageList = new ImageList { ImageSize = new Size(32, 32) };
@@ -575,7 +549,6 @@ public partial class Form1 : Form
};
panel.Controls.Add(_lstAnteprimaAsm);
panel.Controls.Add(bottom);
panel.Controls.Add(top);
return panel;
}
@@ -675,82 +648,18 @@ public partial class Form1 : Form
AggiornaStatoAvanti();
}
/// <summary>Confronta i componenti della distinta importata con i file .stp presenti nella
/// cartella "step" (esportati manualmente con Creo Distributed Batch), per dire quali sono
/// già stati realizzati e quali mancano ancora.</summary>
private void GeneraReportStep()
{
if (_righeCorrenti is null)
return;
string radice = _cartellaLavoro!;
var cartellaStep = Path.Combine(radice, "step");
if (!Directory.Exists(cartellaStep))
{
ImpostaStatoImport($"Cartella 'step' non trovata in {cartellaStep}.", Color.DarkRed);
return;
}
var descrizioni = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (var r in _righeCorrenti)
descrizioni[r.Componente] = r.Descrizione;
// Solo i componenti della distinta importata dal CSV: i sotto-componenti trovati in
// fase 4 (_componentiRisolti) servono a completare "raw", non entrano nello STEP finale.
var tuttiICodici = _righeCorrenti.Select(r => r.Componente)
.Distinct(StringComparer.OrdinalIgnoreCase)
.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");
Directory.CreateDirectory(cartellaStepFinali);
var righeReport = new List<(string Componente, string Descrizione, EsitoStep Esito)>();
foreach (var codice in tuttiICodici)
{
var percorsoStp = Path.Combine(cartellaStep, codice + ".stp");
EsitoStep esito;
if (File.Exists(percorsoStp))
{
File.Copy(percorsoStp, Path.Combine(cartellaStepFinali, codice + ".stp"), overwrite: true);
esito = EsitoStep.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(
$"STEP finali: {creati} copiati, {stepMancanti} da esportare (CAD presente), "
+ $"{nonTrovati} componenti non nell'indice, su {righeReport.Count} totali. "
+ $"Cartella: {cartellaStepFinali}.",
Color.DarkGreen);
using var dialog = new ReportStepForm(righeReport, cartellaStepFinali);
dialog.ShowDialog(this);
}
/// <summary>Svuota in un colpo solo le cartelle "raw", "step" e "step_finali" nella cartella
/// di lavoro, previa un'unica conferma. Non tocca l'indice CAD: solo le copie locali
/// generate dalla pipeline.</summary>
/// <summary>Svuota in un colpo solo le cartelle "raw" e "step" nella cartella di lavoro,
/// previa un'unica conferma. Non tocca l'indice CAD: solo le copie locali generate dalla
/// pipeline.</summary>
private void PulisciRawEStep()
{
string radice = _cartellaLavoro!;
var cartelle = new[] { Path.Combine(radice, "raw"), Path.Combine(radice, "step"), Path.Combine(radice, "step_finali") }
var cartelle = new[] { Path.Combine(radice, "raw"), Path.Combine(radice, "step") }
.Where(Directory.Exists)
.ToList();
if (cartelle.Count == 0)
{
ImpostaStatoImport($"Nessuna cartella 'raw', 'step' o 'step_finali' trovata in {radice}.", Color.DarkRed);
ImpostaStatoImport($"Nessuna cartella 'raw' o 'step' trovata in {radice}.", Color.DarkRed);
return;
}
@@ -1081,7 +990,7 @@ public partial class Form1 : Form
{
using var dialog = new FolderBrowserDialog
{
Description = "Seleziona la cartella di lavoro (CSV, raw, step, step_finali)",
Description = "Seleziona la cartella di lavoro (CSV, raw, step)",
SelectedPath = _cartellaLavoro ?? string.Empty,
};
if (dialog.ShowDialog(this) != DialogResult.OK)
-85
View File
@@ -1,85 +0,0 @@
using System.Diagnostics;
namespace PrepStep;
public enum EsitoStep
{
/// <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 ReportStepForm(List<(string Componente, string Descrizione, EsitoStep Esito)> righe, string cartellaStepFinali)
{
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";
ClientSize = new Size(720, 440);
StartPosition = FormStartPosition.CenterParent;
Font = new Font("Segoe UI", 9.5f);
var lblInfo = new Label
{
Dock = DockStyle.Top,
AutoSize = true,
Padding = new Padding(12, 8, 12, 8),
Text = $"{creati} copiati, {stepMancanti} da esportare (CAD presente), "
+ $"{nonTrovati} non nell'indice, su {righe.Count} totali. In \"{cartellaStepFinali}\".",
};
var grid = new DataGridView
{
Dock = DockStyle.Fill,
ReadOnly = true,
AllowUserToAddRows = false,
AllowUserToDeleteRows = false,
RowHeadersVisible = false,
SelectionMode = DataGridViewSelectionMode.FullRowSelect,
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
};
grid.Columns.Add("componente", "Componente");
grid.Columns.Add("descrizione", "Descrizione");
grid.Columns.Add("step", "STEP");
grid.Columns["componente"]!.FillWeight = 20;
grid.Columns["descrizione"]!.FillWeight = 55;
grid.Columns["step"]!.FillWeight = 25;
foreach (var (componente, descrizione, esito) in righe.OrderBy(r => r.Esito).ThenBy(r => r.Componente))
{
var (testo, colore) = esito switch
{
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 };
UiStile.Secondario(btnApriCartella);
btnApriCartella.Click += (_, _) =>
{
try { Process.Start("explorer.exe", cartellaStepFinali); }
catch (Exception ex)
{
MessageBox.Show(this, $"Impossibile aprire Esplora risorse:\n{ex.Message}", "Errore",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
};
Controls.Add(grid);
Controls.Add(lblInfo);
Controls.Add(btnApriCartella);
}
}